tide-commander 1.65.0 → 1.66.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 (47) hide show
  1. package/dist/assets/{BossLogsModal-U4mcLIP3.js → BossLogsModal-D6nnEtFf.js} +1 -1
  2. package/dist/assets/{BossSpawnModal-CiFvgaQ1.js → BossSpawnModal-DmPw2xym.js} +1 -1
  3. package/dist/assets/{ControlsModal-Bz4EQ0ii.js → ControlsModal-OEZddGmt.js} +1 -1
  4. package/dist/assets/{DockerLogsModal-CSMh4uRZ.js → DockerLogsModal-CzpJKdxd.js} +1 -1
  5. package/dist/assets/{EmbeddedEditor-ecjZKKkD.js → EmbeddedEditor-Dh9neVWW.js} +1 -1
  6. package/dist/assets/{GmailOAuthSetup-pFwSGVxa.js → GmailOAuthSetup-FtYHQDDw.js} +1 -1
  7. package/dist/assets/{GoogleOAuthSetup-CPvUA9JE.js → GoogleOAuthSetup-reYSDcFV.js} +1 -1
  8. package/dist/assets/{IframeModal-DcTPyjLy.js → IframeModal-DbW9WCx6.js} +1 -1
  9. package/dist/assets/{IntegrationsPanel-DHdp8HO-.js → IntegrationsPanel-DooKtzpO.js} +2 -2
  10. package/dist/assets/{LogViewerModal-QWGgGmiP.js → LogViewerModal-BamqTQzc.js} +1 -1
  11. package/dist/assets/{MonitoringModal-C8cfJlg5.js → MonitoringModal-DiOT_xpJ.js} +1 -1
  12. package/dist/assets/{PM2LogsModal-uUu_bTeC.js → PM2LogsModal-C4hIfwGk.js} +1 -1
  13. package/dist/assets/{RestoreArchivedAreaModal-C-Zxn6n6.js → RestoreArchivedAreaModal-CQ3NdSvn.js} +1 -1
  14. package/dist/assets/{Scene2DCanvas-0uRu2G4V.js → Scene2DCanvas-BfcwE6aA.js} +1 -1
  15. package/dist/assets/{SceneManager-xyitf6BI.js → SceneManager-D409BuL6.js} +1 -1
  16. package/dist/assets/{SkillsPanel-Bgcx1OI3.js → SkillsPanel-B0V-BFfO.js} +1 -1
  17. package/dist/assets/{SpawnModal-CS3BMuY9.js → SpawnModal-gPT83rW4.js} +1 -1
  18. package/dist/assets/{SubordinateAssignmentModal-DNWrbv9p.js → SubordinateAssignmentModal-Dvvqv0yZ.js} +1 -1
  19. package/dist/assets/{TriggerManagerPanel-D-pLDqne.js → TriggerManagerPanel-BmDBe8xx.js} +1 -1
  20. package/dist/assets/{WorkflowEditorPanel-Cu7zjFdE.js → WorkflowEditorPanel-PS4W8Q3F.js} +1 -1
  21. package/dist/assets/{index-cGfzMto2.js → index-BSdgxlrR.js} +1 -1
  22. package/dist/assets/{index-2BVW4z0_.js → index-BkpkUL3C.js} +1 -1
  23. package/dist/assets/{index-CZl-6UH7.js → index-C7cIg4BE.js} +1 -1
  24. package/dist/assets/{index-DEfCPZTr.js → index-CJYuOBJD.js} +3 -3
  25. package/dist/assets/{index-Yy2LrlI7.js → index-D9NmRir8.js} +2 -2
  26. package/dist/assets/{index-Dd0cfrn9.js → index-DvbZsLxj.js} +1 -1
  27. package/dist/assets/index-baPDjRvq.js +1 -0
  28. package/dist/assets/{index-DM70jqOd.js → index-cCrsvvfk.js} +1 -1
  29. package/dist/assets/main-B3L4mgQ4.css +1 -0
  30. package/dist/assets/{main-BNhrjJHj.js → main-BzSUj-VM.js} +5 -5
  31. package/dist/assets/{web-BnX_BsjB.js → web-DffxvD3t.js} +1 -1
  32. package/dist/assets/{web-CyBgxhK2.js → web-y3e1lmyW.js} +1 -1
  33. package/dist/index.html +2 -2
  34. package/dist/src/packages/server/data/builtin-skills/backup-restore.js +242 -0
  35. package/dist/src/packages/server/data/builtin-skills/index.js +2 -0
  36. package/dist/src/packages/server/index.js +4 -0
  37. package/dist/src/packages/server/routes/agents.js +27 -0
  38. package/dist/src/packages/server/services/backup-service.js +148 -0
  39. package/package.json +2 -1
  40. package/scripts/backup-data.sh +116 -0
  41. package/scripts/krunner/install-krunner-integration.sh +53 -0
  42. package/scripts/krunner/org.riven.tide.krunner.service +3 -0
  43. package/scripts/krunner/plasma-runner-tide-commander.desktop +16 -0
  44. package/scripts/krunner/tide-krunner-runner.js +335 -0
  45. package/scripts/recover-agents.ts +623 -0
  46. package/dist/assets/index-CWyxpmuL.js +0 -1
  47. package/dist/assets/main-4iQEaD98.css +0 -1
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-BnX_BsjB.js","assets/main-BNhrjJHj.js","assets/vendor-react--Eh9ivFN.js","assets/vendor-three-Chj50gSY.js","assets/main-4iQEaD98.css"])))=>i.map(i=>d[i]);
2
- import{bx as e,aY as o}from"./main-BNhrjJHj.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 E=e("Haptics",{web:()=>o(()=>import("./web-BnX_BsjB.js"),__vite__mapDeps([0,1,2,3,4])).then(r=>new r.HapticsWeb)});export{E as Haptics,i as ImpactStyle,t as NotificationType};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-DffxvD3t.js","assets/main-BzSUj-VM.js","assets/vendor-react--Eh9ivFN.js","assets/vendor-three-Chj50gSY.js","assets/main-B3L4mgQ4.css"])))=>i.map(i=>d[i]);
2
+ import{bx as e,aY as o}from"./main-BzSUj-VM.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 E=e("Haptics",{web:()=>o(()=>import("./web-DffxvD3t.js"),__vite__mapDeps([0,1,2,3,4])).then(r=>new r.HapticsWeb)});export{E as Haptics,i as ImpactStyle,t as NotificationType};
@@ -1 +1 @@
1
- import{j as f,I as H,N as He,P as Ye,O as Je,bi as Xe,r as A,s as te,bj as Ie,z as de,u as Ee}from"./main-BNhrjJHj.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";function Z(t){return Array.isArray?Array.isArray(t):Te(t)==="[object Array]"}function Ze(t){if(typeof t=="string")return t;let e=t+"";return e=="0"&&1/t==-1/0?"-0":e}function qe(t){return t==null?"":Ze(t)}function J(t){return typeof t=="string"}function _e(t){return typeof t=="number"}function et(t){return t===!0||t===!1||tt(t)&&Te(t)=="[object Boolean]"}function $e(t){return typeof t=="object"}function tt(t){return $e(t)&&t!==null}function P(t){return t!=null}function fe(t){return!t.trim().length}function Te(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const st="Incorrect 'index' type",nt=t=>`Invalid value for key ${t}`,rt=t=>`Pattern length exceeds max of ${t}.`,it=t=>`Missing ${t} property in key`,ct=t=>`Property 'weight' in key '${t}' must be a positive integer`,ve=Object.prototype.hasOwnProperty;class ot{constructor(e){this._keys=[],this._keyMap={};let s=0;e.forEach(n=>{let r=Pe(n);this._keys.push(r),this._keyMap[r.id]=r,s+=r.weight}),this._keys.forEach(n=>{n.weight/=s})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function Pe(t){let e=null,s=null,n=null,r=1,i=null;if(J(t)||Z(t))n=t,e=be(t),s=me(t);else{if(!ve.call(t,"name"))throw new Error(it("name"));const c=t.name;if(n=c,ve.call(t,"weight")&&(r=t.weight,r<=0))throw new Error(ct(c));e=be(c),s=me(c),i=t.getFn}return{path:e,id:s,weight:r,src:n,getFn:i}}function be(t){return Z(t)?t:t.split(".")}function me(t){return Z(t)?t.join("."):t}function at(t,e){let s=[],n=!1;const r=(i,c,a)=>{if(P(i))if(!c[a])s.push(i);else{let u=c[a];const l=i[u];if(!P(l))return;if(a===c.length-1&&(J(l)||_e(l)||et(l)))s.push(qe(l));else if(Z(l)){n=!0;for(let h=0,d=l.length;h<d;h+=1)r(l[h],c,a+1)}else c.length&&r(l,c,a+1)}};return r(t,J(e)?e.split("."):e,0),n?s:s[0]}const ut={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},lt={isCaseSensitive:!1,ignoreDiacritics:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(t,e)=>t.score===e.score?t.idx<e.idx?-1:1:t.score<e.score?-1:1},ht={location:0,threshold:.6,distance:100},dt={useExtendedSearch:!1,getFn:at,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1};var p={...lt,...ut,...ht,...dt};const ft=/[^ ]+/g;function mt(t=1,e=3){const s=new Map,n=Math.pow(10,e);return{get(r){const i=r.match(ft).length;if(s.has(i))return s.get(i);const c=1/Math.pow(i,.5*t),a=parseFloat(Math.round(c*n)/n);return s.set(i,a),a},clear(){s.clear()}}}class Ce{constructor({getFn:e=p.getFn,fieldNormWeight:s=p.fieldNormWeight}={}){this.norm=mt(s,3),this.getFn=e,this.isCreated=!1,this.setIndexRecords()}setSources(e=[]){this.docs=e}setIndexRecords(e=[]){this.records=e}setKeys(e=[]){this.keys=e,this._keysMap={},e.forEach((s,n)=>{this._keysMap[s.id]=n})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,J(this.docs[0])?this.docs.forEach((e,s)=>{this._addString(e,s)}):this.docs.forEach((e,s)=>{this._addObject(e,s)}),this.norm.clear())}add(e){const s=this.size();J(e)?this._addString(e,s):this._addObject(e,s)}removeAt(e){this.records.splice(e,1);for(let s=e,n=this.size();s<n;s+=1)this.records[s].i-=1}getValueForItemAtKeyId(e,s){return e[this._keysMap[s]]}size(){return this.records.length}_addString(e,s){if(!P(e)||fe(e))return;let n={v:e,i:s,n:this.norm.get(e)};this.records.push(n)}_addObject(e,s){let n={i:s,$:{}};this.keys.forEach((r,i)=>{let c=r.getFn?r.getFn(e):this.getFn(e,r.path);if(P(c)){if(Z(c)){let a=[];const u=[{nestedArrIndex:-1,value:c}];for(;u.length;){const{nestedArrIndex:l,value:h}=u.pop();if(P(h))if(J(h)&&!fe(h)){let d={v:h,i:l,n:this.norm.get(h)};a.push(d)}else Z(h)&&h.forEach((d,m)=>{u.push({nestedArrIndex:m,value:d})})}n.$[i]=a}else if(J(c)&&!fe(c)){let a={v:c,n:this.norm.get(c)};n.$[i]=a}}}),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function Ke(t,e,{getFn:s=p.getFn,fieldNormWeight:n=p.fieldNormWeight}={}){const r=new Ce({getFn:s,fieldNormWeight:n});return r.setKeys(t.map(Pe)),r.setSources(e),r.create(),r}function pt(t,{getFn:e=p.getFn,fieldNormWeight:s=p.fieldNormWeight}={}){const{keys:n,records:r}=t,i=new Ce({getFn:e,fieldNormWeight:s});return i.setKeys(n),i.setIndexRecords(r),i}function ue(t,{errors:e=0,currentLocation:s=0,expectedLocation:n=0,distance:r=p.distance,ignoreLocation:i=p.ignoreLocation}={}){const c=e/t.length;if(i)return c;const a=Math.abs(n-s);return r?c+a/r:a?1:c}function gt(t=[],e=p.minMatchCharLength){let s=[],n=-1,r=-1,i=0;for(let c=t.length;i<c;i+=1){let a=t[i];a&&n===-1?n=i:!a&&n!==-1&&(r=i-1,r-n+1>=e&&s.push([n,r]),n=-1)}return t[i-1]&&i-n>=e&&s.push([n,i-1]),s}const se=32;function At(t,e,s,{location:n=p.location,distance:r=p.distance,threshold:i=p.threshold,findAllMatches:c=p.findAllMatches,minMatchCharLength:a=p.minMatchCharLength,includeMatches:u=p.includeMatches,ignoreLocation:l=p.ignoreLocation}={}){if(e.length>se)throw new Error(rt(se));const h=e.length,d=t.length,m=Math.max(0,Math.min(n,d));let g=i,y=m;const I=a>1||u,k=I?Array(d):[];let S;for(;(S=t.indexOf(e,y))>-1;){let E=ue(e,{currentLocation:S,expectedLocation:m,distance:r,ignoreLocation:l});if(g=Math.min(E,g),y=S+h,I){let C=0;for(;C<h;)k[S+C]=1,C+=1}}y=-1;let L=[],O=1,K=h+d;const ne=1<<h-1;for(let E=0;E<h;E+=1){let C=0,D=K;for(;C<D;)ue(e,{errors:E,currentLocation:m+D,expectedLocation:m,distance:r,ignoreLocation:l})<=g?C=D:K=D,D=Math.floor((K-C)/2+C);K=D;let $=Math.max(1,m-D+1),T=c?d:Math.min(m+D,d)+h,Q=Array(T+2);Q[T+1]=(1<<E)-1;for(let j=T;j>=$;j-=1){let X=j-1,oe=s[t.charAt(X)];if(I&&(k[X]=+!!oe),Q[j]=(Q[j+1]<<1|1)&oe,E&&(Q[j]|=(L[j+1]|L[j])<<1|1|L[j+1]),Q[j]&ne&&(O=ue(e,{errors:E,currentLocation:X,expectedLocation:m,distance:r,ignoreLocation:l}),O<=g)){if(g=O,y=X,y<=m)break;$=Math.max(1,2*m-y)}}if(ue(e,{errors:E+1,currentLocation:m,expectedLocation:m,distance:r,ignoreLocation:l})>g)break;L=Q}const G={isMatch:y>=0,score:Math.max(.001,O)};if(I){const E=gt(k,a);E.length?u&&(G.indices=E):G.isMatch=!1}return G}function yt(t){let e={};for(let s=0,n=t.length;s<n;s+=1){const r=t.charAt(s);e[r]=(e[r]||0)|1<<n-s-1}return e}const le=String.prototype.normalize?(t=>t.normalize("NFD").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g,"")):(t=>t);class ze{constructor(e,{location:s=p.location,threshold:n=p.threshold,distance:r=p.distance,includeMatches:i=p.includeMatches,findAllMatches:c=p.findAllMatches,minMatchCharLength:a=p.minMatchCharLength,isCaseSensitive:u=p.isCaseSensitive,ignoreDiacritics:l=p.ignoreDiacritics,ignoreLocation:h=p.ignoreLocation}={}){if(this.options={location:s,threshold:n,distance:r,includeMatches:i,findAllMatches:c,minMatchCharLength:a,isCaseSensitive:u,ignoreDiacritics:l,ignoreLocation:h},e=u?e:e.toLowerCase(),e=l?le(e):e,this.pattern=e,this.chunks=[],!this.pattern.length)return;const d=(g,y)=>{this.chunks.push({pattern:g,alphabet:yt(g),startIndex:y})},m=this.pattern.length;if(m>se){let g=0;const y=m%se,I=m-y;for(;g<I;)d(this.pattern.substr(g,se),g),g+=se;if(y){const k=m-se;d(this.pattern.substr(k),k)}}else d(this.pattern,0)}searchIn(e){const{isCaseSensitive:s,ignoreDiacritics:n,includeMatches:r}=this.options;if(e=s?e:e.toLowerCase(),e=n?le(e):e,this.pattern===e){let I={isMatch:!0,score:0};return r&&(I.indices=[[0,e.length-1]]),I}const{location:i,distance:c,threshold:a,findAllMatches:u,minMatchCharLength:l,ignoreLocation:h}=this.options;let d=[],m=0,g=!1;this.chunks.forEach(({pattern:I,alphabet:k,startIndex:S})=>{const{isMatch:L,score:O,indices:K}=At(e,I,k,{location:i+S,distance:c,threshold:a,findAllMatches:u,minMatchCharLength:l,includeMatches:r,ignoreLocation:h});L&&(g=!0),m+=O,L&&K&&(d=[...d,...K])});let y={isMatch:g,score:g?m/this.chunks.length:1};return g&&r&&(y.indices=d),y}}class q{constructor(e){this.pattern=e}static isMultiMatch(e){return Se(e,this.multiRegex)}static isSingleMatch(e){return Se(e,this.singleRegex)}search(){}}function Se(t,e){const s=t.match(e);return s?s[1]:null}class xt extends q{constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const s=e===this.pattern;return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class Et extends q{constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const n=e.indexOf(this.pattern)===-1;return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class Ct extends q{constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const s=e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class wt extends q{constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const s=!e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class Ft extends q{constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const s=e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}class Mt extends q{constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const s=!e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class Oe extends q{constructor(e,{location:s=p.location,threshold:n=p.threshold,distance:r=p.distance,includeMatches:i=p.includeMatches,findAllMatches:c=p.findAllMatches,minMatchCharLength:a=p.minMatchCharLength,isCaseSensitive:u=p.isCaseSensitive,ignoreDiacritics:l=p.ignoreDiacritics,ignoreLocation:h=p.ignoreLocation}={}){super(e),this._bitapSearch=new ze(e,{location:s,threshold:n,distance:r,includeMatches:i,findAllMatches:c,minMatchCharLength:a,isCaseSensitive:u,ignoreDiacritics:l,ignoreLocation:h})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class Qe extends q{constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let s=0,n;const r=[],i=this.pattern.length;for(;(n=e.indexOf(this.pattern,s))>-1;)s=n+i,r.push([n,s-1]);const c=!!r.length;return{isMatch:c,score:c?0:1,indices:r}}}const pe=[xt,Qe,Ct,wt,Mt,Ft,Et,Oe],ke=pe.length,Dt=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,Bt="|";function It(t,e={}){return t.split(Bt).map(s=>{let n=s.trim().split(Dt).filter(i=>i&&!!i.trim()),r=[];for(let i=0,c=n.length;i<c;i+=1){const a=n[i];let u=!1,l=-1;for(;!u&&++l<ke;){const h=pe[l];let d=h.isMultiMatch(a);d&&(r.push(new h(d,e)),u=!0)}if(!u)for(l=-1;++l<ke;){const h=pe[l];let d=h.isSingleMatch(a);if(d){r.push(new h(d,e));break}}}return r})}const vt=new Set([Oe.type,Qe.type]);class bt{constructor(e,{isCaseSensitive:s=p.isCaseSensitive,ignoreDiacritics:n=p.ignoreDiacritics,includeMatches:r=p.includeMatches,minMatchCharLength:i=p.minMatchCharLength,ignoreLocation:c=p.ignoreLocation,findAllMatches:a=p.findAllMatches,location:u=p.location,threshold:l=p.threshold,distance:h=p.distance}={}){this.query=null,this.options={isCaseSensitive:s,ignoreDiacritics:n,includeMatches:r,minMatchCharLength:i,findAllMatches:a,ignoreLocation:c,location:u,threshold:l,distance:h},e=s?e:e.toLowerCase(),e=n?le(e):e,this.pattern=e,this.query=It(this.pattern,this.options)}static condition(e,s){return s.useExtendedSearch}searchIn(e){const s=this.query;if(!s)return{isMatch:!1,score:1};const{includeMatches:n,isCaseSensitive:r,ignoreDiacritics:i}=this.options;e=r?e:e.toLowerCase(),e=i?le(e):e;let c=0,a=[],u=0;for(let l=0,h=s.length;l<h;l+=1){const d=s[l];a.length=0,c=0;for(let m=0,g=d.length;m<g;m+=1){const y=d[m],{isMatch:I,indices:k,score:S}=y.search(e);if(I){if(c+=1,u+=S,n){const L=y.constructor.type;vt.has(L)?a=[...a,...k]:a.push(k)}}else{u=0,c=0,a.length=0;break}}if(c){let m={isMatch:!0,score:u/c};return n&&(m.indices=a),m}}return{isMatch:!1,score:1}}}const ge=[];function St(...t){ge.push(...t)}function Ae(t,e){for(let s=0,n=ge.length;s<n;s+=1){let r=ge[s];if(r.condition(t,e))return new r(t,e)}return new ze(t,e)}const he={AND:"$and",OR:"$or"},ye={PATH:"$path",PATTERN:"$val"},xe=t=>!!(t[he.AND]||t[he.OR]),kt=t=>!!t[ye.PATH],jt=t=>!Z(t)&&$e(t)&&!xe(t),je=t=>({[he.AND]:Object.keys(t).map(e=>({[e]:t[e]}))});function We(t,e,{auto:s=!0}={}){const n=r=>{let i=Object.keys(r);const c=kt(r);if(!c&&i.length>1&&!xe(r))return n(je(r));if(jt(r)){const u=c?r[ye.PATH]:i[0],l=c?r[ye.PATTERN]:r[u];if(!J(l))throw new Error(nt(u));const h={keyId:me(u),pattern:l};return s&&(h.searcher=Ae(l,e)),h}let a={children:[],operator:i[0]};return i.forEach(u=>{const l=r[u];Z(l)&&l.forEach(h=>{a.children.push(n(h))})}),a};return xe(t)||(t=je(t)),n(t)}function Rt(t,{ignoreFieldNorm:e=p.ignoreFieldNorm}){t.forEach(s=>{let n=1;s.matches.forEach(({key:r,norm:i,score:c})=>{const a=r?r.weight:null;n*=Math.pow(c===0&&a?Number.EPSILON:c,(a||1)*(e?1:i))}),s.score=n})}function Nt(t,e){const s=t.matches;e.matches=[],P(s)&&s.forEach(n=>{if(!P(n.indices)||!n.indices.length)return;const{indices:r,value:i}=n;let c={indices:r,value:i};n.key&&(c.key=n.key.src),n.idx>-1&&(c.refIndex=n.idx),e.matches.push(c)})}function Lt(t,e){e.score=t.score}function _t(t,e,{includeMatches:s=p.includeMatches,includeScore:n=p.includeScore}={}){const r=[];return s&&r.push(Nt),n&&r.push(Lt),t.map(i=>{const{idx:c}=i,a={item:e[c],refIndex:c};return r.length&&r.forEach(u=>{u(i,a)}),a})}class Y{constructor(e,s={},n){this.options={...p,...s},this.options.useExtendedSearch,this._keyStore=new ot(this.options.keys),this.setCollection(e,n)}setCollection(e,s){if(this._docs=e,s&&!(s instanceof Ce))throw new Error(st);this._myIndex=s||Ke(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){P(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(e=()=>!1){const s=[];for(let n=0,r=this._docs.length;n<r;n+=1){const i=this._docs[n];e(i,n)&&(this.removeAt(n),n-=1,r-=1,s.push(i))}return s}removeAt(e){this._docs.splice(e,1),this._myIndex.removeAt(e)}getIndex(){return this._myIndex}search(e,{limit:s=-1}={}){const{includeMatches:n,includeScore:r,shouldSort:i,sortFn:c,ignoreFieldNorm:a}=this.options;let u=J(e)?J(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return Rt(u,{ignoreFieldNorm:a}),i&&u.sort(c),_e(s)&&s>-1&&(u=u.slice(0,s)),_t(u,this._docs,{includeMatches:n,includeScore:r})}_searchStringList(e){const s=Ae(e,this.options),{records:n}=this._myIndex,r=[];return n.forEach(({v:i,i:c,n:a})=>{if(!P(i))return;const{isMatch:u,score:l,indices:h}=s.searchIn(i);u&&r.push({item:i,idx:c,matches:[{score:l,value:i,norm:a,indices:h}]})}),r}_searchLogical(e){const s=We(e,this.options),n=(a,u,l)=>{if(!a.children){const{keyId:d,searcher:m}=a,g=this._findMatches({key:this._keyStore.get(d),value:this._myIndex.getValueForItemAtKeyId(u,d),searcher:m});return g&&g.length?[{idx:l,item:u,matches:g}]:[]}const h=[];for(let d=0,m=a.children.length;d<m;d+=1){const g=a.children[d],y=n(g,u,l);if(y.length)h.push(...y);else if(a.operator===he.AND)return[]}return h},r=this._myIndex.records,i={},c=[];return r.forEach(({$:a,i:u})=>{if(P(a)){let l=n(s,a,u);l.length&&(i[u]||(i[u]={idx:u,item:a,matches:[]},c.push(i[u])),l.forEach(({matches:h})=>{i[u].matches.push(...h)}))}}),c}_searchObjectList(e){const s=Ae(e,this.options),{keys:n,records:r}=this._myIndex,i=[];return r.forEach(({$:c,i:a})=>{if(!P(c))return;let u=[];n.forEach((l,h)=>{u.push(...this._findMatches({key:l,value:c[h],searcher:s}))}),u.length&&i.push({idx:a,item:c,matches:u})}),i}_findMatches({key:e,value:s,searcher:n}){if(!P(s))return[];let r=[];if(Z(s))s.forEach(({v:i,i:c,n:a})=>{if(!P(i))return;const{isMatch:u,score:l,indices:h}=n.searchIn(i);u&&r.push({score:l,key:e,value:i,idx:c,norm:a,indices:h})});else{const{v:i,n:c}=s,{isMatch:a,score:u,indices:l}=n.searchIn(i);a&&r.push({score:u,key:e,value:i,norm:c,indices:l})}return r}}Y.version="7.1.0";Y.createIndex=Ke;Y.parseIndex=pt;Y.config=p;Y.parseQuery=We;St(bt);const Re={".ts":"file-code",".tsx":"atom",".js":"file-code",".jsx":"atom",".py":"file-code",".rs":"file-code",".go":"file-code",".md":"file-text",".json":"clipboard",".yaml":"gear",".yml":"gear",".css":"palette",".scss":"palette",".html":"globe",".sql":"database",".sh":"terminal",".env":"lock",".toml":"gear",".lock":"lock",default:"file-text"};function $t(t){switch(t){case"scout":return"class-scout";case"builder":return"class-builder";case"debugger":return"class-debugger";case"architect":return"class-architect";case"warrior":return"class-warrior";case"support":return"class-support";case"boss":return"class-boss";default:return"class-default"}}function Tt(t,e=16){var r;const s="."+(((r=t.split(".").pop())==null?void 0:r.toLowerCase())??""),n=Re[s]||Re.default;return f.jsx(H,{name:n,size:e})}function Pt(t,e=16){return f.jsx(H,{name:$t(t),size:e,weight:"fill"})}function Ve(t){const e=Math.floor(t/1e3),s=Math.floor(e/60),n=Math.floor(s/60),r=Math.floor(n/24);return r>0?`${r}d ${n%24}h ago`:n>0?`${n}h ${s%60}m ago`:s>0?`${s}m ago`:"just now"}function Yt(t){const s=Date.now()-t;return Ve(s)}function Ne(t){switch(t){case"agent":return"Agent";case"command":return"Command";case"area":return"Area";case"modified-file":return"Changed";case"building":return"Server";default:return t}}const Le=["command","agent","building","area","modified-file"];function Kt({isOpen:t,onClose:e,onOpenSpawnModal:s,onOpenCommanderView:n,onOpenToolbox:r,onOpenFileExplorer:i,onOpenPM2LogsModal:c,onOpenBossLogsModal:a,onOpenDatabasePanel:u,onOpenMonitoringModal:l}){const h=He(),d=Ye(),m=Je(),g=Xe(),y=A.useRef(e);y.current=e;const I=A.useRef(s);I.current=s;const k=A.useRef(n);k.current=n;const S=A.useRef(r);S.current=r;const L=A.useRef(i);L.current=i;const O=A.useRef(c);O.current=c;const K=A.useRef(a);K.current=a;const ne=A.useRef(u);ne.current=u;const G=A.useRef(l);G.current=l;const[E,C]=A.useState(""),[D,$]=A.useState(0);A.useEffect(()=>{t&&(C(""),$(0))},[t]);const T=te.getShortcuts(),Q=A.useMemo(()=>{if(!t)return[];const o=T.find(F=>F.id==="spawn-agent"),w=T.find(F=>F.id==="toggle-commander");return[{id:"cmd-spawn",type:"command",title:"Spawn New Agent",subtitle:o?Ie(o):"Alt+N",icon:f.jsx(H,{name:"plus",size:16}),action:()=>{y.current(),I.current()}},{id:"cmd-commander",type:"command",title:"Commander View",subtitle:w?Ie(w):"Ctrl+K",icon:f.jsx(H,{name:"dashboard",size:16}),action:()=>{y.current(),k.current()}},{id:"cmd-settings",type:"command",title:"Settings & Tools",subtitle:"Configure Tide Commander",icon:f.jsx(H,{name:"gear",size:16}),action:()=>{y.current(),S.current()}},{id:"cmd-monitoring",type:"command",title:"Monitoring & Logs",subtitle:"Triggers, workflows, events",icon:f.jsx(H,{name:"chart-line",size:16}),action:()=>{var F;y.current(),(F=G.current)==null||F.call(G)}}]},[t,T]),ce=A.useMemo(()=>t?Array.from(h.values()).map(o=>{const w=(g||[]).filter(_=>_.agentId===o.id).map(_=>_.filePath),F=[...new Set(w)],M=F.map(_=>_.split("/").pop()||_),b=[];o.lastAssignedTask&&b.push(o.lastAssignedTask);const R=`${o.class} • ${o.status} • ${o.cwd}`;let B=`${o.name} ${R}`;M.length>0&&(B+=` ${M.join(" ")} ${F.join(" ")}`),b.length>0&&(B+=` ${b.join(" ")}`);const z=Date.now()-o.lastActivity;let V;return o.lastAssignedTask&&(o.lastAssignedTask.length>150?V=o.lastAssignedTask.slice(0,150)+"...":V=o.lastAssignedTask),{id:`agent-${o.id}`,type:"agent",title:o.name,subtitle:R,lastUserInput:V,timeAway:z,icon:Pt(o.class),_searchText:B,_modifiedFiles:F,_userQueries:b,action:()=>{y.current(),te.selectAgent(o.id),te.requestTerminalExpand()}}}):[],[t,h,g]),j=A.useMemo(()=>t?Array.from(d.values()).map(o=>{var w;return{id:`area-${o.id}`,type:"area",title:o.name,subtitle:`${o.assignedAgentIds.length} agents • ${((w=o.directories)==null?void 0:w.length)||0} folders`,icon:f.jsx(H,{name:"map",size:16}),action:()=>{y.current(),te.selectArea(o.id)}}}):[],[t,d]),X=A.useMemo(()=>t?Array.from(m.values()).filter(o=>o.type==="server"||o.type==="boss"||o.type==="database").map(o=>{var B,z,V,_;const w=o.status==="running"?"#4ade80":o.status==="stopped"?"#f87171":"#facc15",F=o.type==="boss"?"crown":o.type==="database"?"database":"desktop";let b=`${o.type==="boss"?"Boss":o.type==="database"?"Database":"Server"} • ${o.status}`;if(o.type==="database"&&((z=(B=o.database)==null?void 0:B.connections)!=null&&z.length)){const x=o.database.connections[0];b+=` • ${x.engine} @ ${x.host}`}else o.cwd&&(b+=` • ${o.cwd}`);let R=`${o.name} ${o.type} ${o.status} ${o.cwd||""} ${((V=o.pm2)==null?void 0:V.name)||""}`;if(o.type==="database"&&((_=o.database)!=null&&_.connections))for(const x of o.database.connections)R+=` ${x.name} ${x.engine} ${x.host} ${x.database||""} mysql postgresql sql`;return{id:`building-${o.id}`,type:"building",title:o.name,subtitle:b,icon:f.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[f.jsx(H,{name:"status-pending",size:10,weight:"fill",color:w}),f.jsx(H,{name:F,size:16})]}),_searchText:R,action:()=>{var x;y.current(),o.type==="boss"?K.current(o.id):o.type==="database"?ne.current(o.id):(x=o.pm2)!=null&&x.enabled&&O.current(o.id)}}}):[],[t,m]),oe=A.useMemo(()=>{if(!t)return[];const o=g||[],w=new Set,F=[];for(const M of o){if(w.has(M.filePath))continue;w.add(M.filePath);const b=M.filePath.split("/").pop()||M.filePath,R=M.action==="created"?"Created":M.action==="modified"?"Modified":M.action==="deleted"?"Deleted":"Read";if(F.push({id:`modified-${M.filePath}-${M.timestamp}`,type:"modified-file",title:b,subtitle:`${R} by ${M.agentName} • ${M.filePath}`,matchedText:M.filePath,icon:M.action==="deleted"?f.jsx(H,{name:"trash",size:16}):Tt(M.filePath),action:()=>{y.current();const B=Array.from(te.getState().areas.values());for(const z of B)for(const V of z.directories||[])if(M.filePath.startsWith(V)){te.setFileViewerPath(M.filePath),L.current(z.id);return}te.selectAgent(M.agentId)}}),F.length>=50)break}return F},[t,g]),we=A.useMemo(()=>new Y(ce,{keys:["title","subtitle","_searchText","lastUserInput"],threshold:.4,ignoreLocation:!0,includeScore:!0,includeMatches:!0}),[ce]),Fe=A.useMemo(()=>new Y(Q,{keys:["title","subtitle"],threshold:.4,includeScore:!0,includeMatches:!0}),[Q]),Me=A.useMemo(()=>new Y(j,{keys:["title","subtitle"],threshold:.4,includeScore:!0,includeMatches:!0}),[j]),De=A.useMemo(()=>new Y(oe,{keys:["title","subtitle","matchedText"],threshold:.4,ignoreLocation:!0,includeScore:!0,includeMatches:!0}),[oe]),Be=A.useMemo(()=>new Y(X,{keys:["title","subtitle","_searchText"],threshold:.4,ignoreLocation:!0,includeScore:!0,includeMatches:!0}),[X]),W=A.useMemo(()=>{if(!E.trim()){const x=[];x.push(...X);const v=[...ce].sort((N,U)=>{const re=N.timeAway??0,ie=U.timeAway??0;return re-ie});x.push(...v),x.push(...Q.slice(0,2)),x.push(...j.slice(0,2));const ee={};return Le.forEach((N,U)=>{ee[N]=U}),x.sort((N,U)=>(ee[N.type]??999)-(ee[U.type]??999)),x}const o=E.toLowerCase(),w=we.search(E).slice(0,8),F=Fe.search(E).slice(0,3),M=Me.search(E).slice(0,2),b=De.search(E).slice(0,3),R=Be.search(E).filter(x=>{const v=x.score??1;return`${x.item.title} ${x.item.subtitle||""} ${x.item._searchText||""}`.toLowerCase().includes(o)||v<=.2}).slice(0,4),B=[],z=[],V=[];for(const x of w){const v={...x.item};if(v._modifiedFiles&&v._modifiedFiles.length>0){const N=v._modifiedFiles.filter(U=>{var ae;const re=((ae=U.split("/").pop())==null?void 0:ae.toLowerCase())||"",ie=U.toLowerCase();return re.includes(o)||ie.includes(o)});N.length>0&&(v.matchedFiles=N)}if(v._userQueries&&v._userQueries.length>0){const N=v._userQueries.find(U=>U.toLowerCase().includes(o));if(N)if(N.length>200){const re=N.toLowerCase().indexOf(o),ie=Math.max(0,re-60),ae=Math.min(N.length,re+o.length+100);v.matchedQuery=(ie>0?"...":"")+N.slice(ie,ae)+(ae<N.length?"...":"")}else v.matchedQuery=N}const ee=v.title.toLowerCase();ee===o||ee.startsWith(o)?z.push(v):V.push(v)}for(const x of z)B.push(x);for(const x of R)B.push(x.item);for(const x of V)B.push(x);for(const x of F)B.push(x.item);for(const x of M)B.push(x.item);for(const x of b)B.push(x.item);const _={};return Le.forEach((x,v)=>{_[x]=v}),B.sort((x,v)=>(_[x.type]??999)-(_[v.type]??999)),B},[E,we,Fe,Me,De,Be,Q,ce,j,X]);A.useEffect(()=>{D>=W.length&&$(Math.max(0,W.length-1))},[W.length,D]);const Ue=A.useCallback(o=>{if(o.altKey&&!o.ctrlKey&&!o.metaKey&&(o.key==="p"||o.key==="n"||o.key==="P"||o.key==="N")){o.preventDefault(),o.stopPropagation(),o.nativeEvent.stopImmediatePropagation();const w=o.key.toLowerCase();$(w==="p"?F=>F>0?F-1:W.length-1:F=>F<W.length-1?F+1:0);return}switch(o.key){case"Escape":o.preventDefault(),y.current();break;case"ArrowUp":o.preventDefault(),$(w=>w>0?w-1:W.length-1);break;case"ArrowDown":o.preventDefault(),$(w=>w<W.length-1?w+1:0);break;case"Enter":o.preventDefault(),W[D]&&W[D].action();break}},[W,D]),Ge=A.useCallback((o,w)=>{if(!w||!o)return o;const F=o.toLowerCase(),M=w.toLowerCase(),b=[];let R=0,B=F.indexOf(M),z=0;for(;B!==-1;)B>R&&b.push(o.slice(R,B)),b.push(de.createElement("mark",{key:z++,className:"spotlight-highlight"},o.slice(B,B+w.length))),R=B+w.length,B=F.indexOf(M,R);return R<o.length&&b.push(o.slice(R)),b.length>0?de.createElement(de.Fragment,null,...b):o},[]);return{query:E,setQuery:C,selectedIndex:D,setSelectedIndex:$,results:W,handleKeyDown:Ue,highlightMatch:Ge}}const zt=A.forwardRef(function({query:e,onQueryChange:s,onKeyDown:n,onResetSelection:r},i){const{t:c}=Ee(["common"]);return f.jsxs("div",{className:"spotlight-input-wrapper",children:[f.jsx("span",{className:"spotlight-search-icon",children:"⌘"}),f.jsx("input",{ref:i,type:"text",className:"spotlight-input",placeholder:c("common:search.spotlightPlaceholder"),value:e,onChange:a=>{s(a.target.value),r()},onKeyDown:n,autoFocus:!0,spellCheck:!1}),f.jsxs("div",{className:"spotlight-input-hints",children:[f.jsx("span",{className:"spotlight-shortcut-hint",children:"↑↓"}),f.jsx("span",{className:"spotlight-shortcut-hint",children:"Enter"}),f.jsx("span",{className:"spotlight-shortcut-hint",children:"Esc"})]})]})}),Ot=A.memo(function({result:e,isSelected:s,query:n,highlightMatch:r,onClick:i,onMouseEnter:c}){const a=e.activityText||e.matchedFiles&&e.matchedFiles.length>0||e.matchedQuery;return f.jsxs("div",{className:`spotlight-item ${s?"selected":""} ${e.activityText?"has-activity":""}`,onClick:i,onMouseEnter:c,role:"option","aria-selected":s,children:[f.jsx("span",{className:"spotlight-item-icon","aria-hidden":"true",children:e.icon}),f.jsxs("div",{className:"spotlight-item-content",children:[f.jsxs("div",{className:"spotlight-item-header",children:[f.jsx("span",{className:"spotlight-item-title",children:r(e.title,n)}),f.jsx("span",{className:`spotlight-item-type ${e.type}`,"aria-label":Ne(e.type),children:Ne(e.type)})]}),e.subtitle&&f.jsx("span",{className:"spotlight-item-subtitle",children:r(e.subtitle,n)}),e.activityText&&f.jsx("span",{className:"spotlight-item-activity",children:r(e.activityText,n)}),a&&f.jsxs("div",{className:"spotlight-item-details",children:[e.matchedFiles&&e.matchedFiles.length>0&&f.jsx("span",{className:"spotlight-item-files",children:e.matchedFiles.map((u,l)=>f.jsxs("span",{className:"file-badge",children:[l>0&&f.jsx("span",{className:"file-separator",children:"•"}),r(u.split("/").pop()||u,n)]},u))}),e.matchedQuery&&f.jsx("span",{className:"spotlight-item-query",children:r(e.matchedQuery,n)})]}),e.timeAway!==void 0&&f.jsx("span",{className:"spotlight-item-time",children:f.jsxs("span",{className:"spotlight-time-away",children:["Idle: ",Ve(e.timeAway)]})}),e.lastUserInput&&!e.matchedQuery&&f.jsxs("span",{className:"spotlight-item-last-input",children:['"',r(e.lastUserInput,n),'"']})]})]})}),Qt=A.forwardRef(function({results:e,selectedIndex:s,query:n,highlightMatch:r,onSelectIndex:i},c){const{t:a}=Ee(["terminal"]),u=A.useRef(!1);A.useEffect(()=>{u.current=!1},[e]),A.useEffect(()=>{const d=typeof c=="function"?null:c==null?void 0:c.current;if(!d)return;const m=()=>{u.current=!0};return d.addEventListener("mousemove",m),()=>{d.removeEventListener("mousemove",m)}},[c,e]);const l={command:a("terminal:spotlight.categories.commands"),agent:a("terminal:spotlight.categories.agents"),building:a("terminal:spotlight.categories.infrastructure"),area:a("terminal:spotlight.categories.areas"),"modified-file":a("terminal:spotlight.categories.modifiedFiles")},h=A.useMemo(()=>{const d=[];let m=null,g=[];return e.forEach((y,I)=>{y.type!==m&&(m!==null&&g.length>0&&d.push([m,g]),m=y.type,g=[]),g.push({result:y,index:I})}),m!==null&&g.length>0&&d.push([m,g]),d},[e]);return A.useEffect(()=>{if(!c||typeof c=="function")return;const d=c.current;if(!d)return;const m=d.querySelector(".spotlight-item.selected");m&&m.scrollIntoView({block:"nearest",behavior:"smooth"})},[s,c]),e.length===0?f.jsx("div",{className:"spotlight-results",ref:c,children:f.jsx("div",{className:"spotlight-empty",children:a("terminal:spotlight.noResults")})}):f.jsx("div",{className:"spotlight-results",ref:c,children:h.map(([d,m])=>f.jsxs("div",{children:[h.length>1&&f.jsx("div",{className:"spotlight-category-header",children:l[d]||d}),m.map(({result:g,index:y})=>f.jsx(Ot,{result:g,isSelected:y===s,query:n,highlightMatch:r,onClick:()=>g.action(),onMouseEnter:()=>{u.current&&i(y)}},g.id))]},d))})}),Wt=A.memo(function(){const{t:e}=Ee(["terminal"]);return f.jsxs("div",{className:"spotlight-footer",children:[f.jsxs("div",{className:"spotlight-footer-left",children:[f.jsxs("span",{className:"spotlight-footer-hint",children:[f.jsx("kbd",{children:"↑"}),f.jsx("kbd",{children:"↓"})," ",f.jsx("kbd",{children:"Alt+N"}),f.jsx("kbd",{children:"Alt+P"})," ",e("terminal:spotlight.navigate")]}),f.jsxs("span",{className:"spotlight-footer-hint",children:[f.jsx("kbd",{children:"Enter"})," ",e("terminal:spotlight.select")]})]}),f.jsx("div",{className:"spotlight-footer-right",children:f.jsxs("span",{className:"spotlight-footer-hint",children:[f.jsx("kbd",{children:"Esc"})," ",e("common:buttons.close")]})})]})}),Vt=768;function Jt({isOpen:t,onClose:e,onOpenSpawnModal:s,onOpenCommanderView:n,onOpenToolbox:r,onOpenFileExplorer:i,onOpenPM2LogsModal:c,onOpenBossLogsModal:a,onOpenDatabasePanel:u,onOpenMonitoringModal:l}){const h=A.useRef(null),d=A.useRef(null),m=A.useRef(null),g=A.useRef(0),{query:y,setQuery:I,selectedIndex:k,setSelectedIndex:S,results:L,handleKeyDown:O,highlightMatch:K}=Kt({isOpen:t,onClose:e,onOpenSpawnModal:s,onOpenCommanderView:n,onOpenToolbox:r,onOpenFileExplorer:i,onOpenPM2LogsModal:c,onOpenBossLogsModal:a,onOpenDatabasePanel:u,onOpenMonitoringModal:l});g.current=L.length,A.useEffect(()=>{t&&setTimeout(()=>{var E;(E=h.current)==null||E.focus()},50)},[t]),A.useEffect(()=>{if(!t)return;const E=window.visualViewport;if(!E||window.innerWidth>Vt)return;const C=()=>{const D=d.current;D&&(D.style.height=`${E.height}px`,D.style.top=`${E.offsetTop}px`)};return C(),E.addEventListener("resize",C),E.addEventListener("scroll",C),()=>{E.removeEventListener("resize",C),E.removeEventListener("scroll",C);const D=d.current;D&&(D.style.height="",D.style.top="")}},[t]),A.useEffect(()=>{if(!t)return;const E=C=>{if(C.key==="Escape"){C.preventDefault(),C.stopPropagation(),C.stopImmediatePropagation(),e();return}if(C.altKey&&!C.ctrlKey&&!C.metaKey&&(C.key==="n"||C.key==="p"||C.key==="N"||C.key==="P")){C.preventDefault(),C.stopPropagation(),C.stopImmediatePropagation();const D=C.key.toLowerCase(),$=g.current;S(D==="p"?T=>T>0?T-1:$-1:T=>T<$-1?T+1:0);return}};return window.addEventListener("keydown",E,{capture:!0}),()=>{window.removeEventListener("keydown",E,{capture:!0})}},[t,e]);const ne=A.useCallback(E=>{E.target===E.currentTarget&&e()},[e]),G=A.useCallback(()=>{S(0)},[S]);return t?f.jsx("div",{ref:d,className:"spotlight-overlay",onClick:ne,children:f.jsxs("div",{className:"spotlight-modal",children:[f.jsx(zt,{ref:h,query:y,onQueryChange:I,onKeyDown:O,onResetSelection:G}),f.jsx(Qt,{ref:m,results:L,selectedIndex:k,query:y,highlightMatch:K,onSelectIndex:S}),f.jsx(Wt,{})]})}):null}export{Re as FILE_ICON_NAMES,Jt as Spotlight,Wt as SpotlightFooter,zt as SpotlightInput,Ot as SpotlightItem,Qt as SpotlightResults,Ve as formatDuration,Yt as formatRelativeTime,Pt as getAgentIcon,Tt as getFileIconFromPath,Ne as getTypeLabel,Kt as useSpotlightSearch};
1
+ import{j as f,I as H,N as He,P as Ye,O as Je,bi as Xe,r as A,s as te,bj as Ie,z as de,u as Ee}from"./main-BzSUj-VM.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";function Z(t){return Array.isArray?Array.isArray(t):Te(t)==="[object Array]"}function Ze(t){if(typeof t=="string")return t;let e=t+"";return e=="0"&&1/t==-1/0?"-0":e}function qe(t){return t==null?"":Ze(t)}function J(t){return typeof t=="string"}function _e(t){return typeof t=="number"}function et(t){return t===!0||t===!1||tt(t)&&Te(t)=="[object Boolean]"}function $e(t){return typeof t=="object"}function tt(t){return $e(t)&&t!==null}function P(t){return t!=null}function fe(t){return!t.trim().length}function Te(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const st="Incorrect 'index' type",nt=t=>`Invalid value for key ${t}`,rt=t=>`Pattern length exceeds max of ${t}.`,it=t=>`Missing ${t} property in key`,ct=t=>`Property 'weight' in key '${t}' must be a positive integer`,ve=Object.prototype.hasOwnProperty;class ot{constructor(e){this._keys=[],this._keyMap={};let s=0;e.forEach(n=>{let r=Pe(n);this._keys.push(r),this._keyMap[r.id]=r,s+=r.weight}),this._keys.forEach(n=>{n.weight/=s})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function Pe(t){let e=null,s=null,n=null,r=1,i=null;if(J(t)||Z(t))n=t,e=be(t),s=me(t);else{if(!ve.call(t,"name"))throw new Error(it("name"));const c=t.name;if(n=c,ve.call(t,"weight")&&(r=t.weight,r<=0))throw new Error(ct(c));e=be(c),s=me(c),i=t.getFn}return{path:e,id:s,weight:r,src:n,getFn:i}}function be(t){return Z(t)?t:t.split(".")}function me(t){return Z(t)?t.join("."):t}function at(t,e){let s=[],n=!1;const r=(i,c,a)=>{if(P(i))if(!c[a])s.push(i);else{let u=c[a];const l=i[u];if(!P(l))return;if(a===c.length-1&&(J(l)||_e(l)||et(l)))s.push(qe(l));else if(Z(l)){n=!0;for(let h=0,d=l.length;h<d;h+=1)r(l[h],c,a+1)}else c.length&&r(l,c,a+1)}};return r(t,J(e)?e.split("."):e,0),n?s:s[0]}const ut={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},lt={isCaseSensitive:!1,ignoreDiacritics:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(t,e)=>t.score===e.score?t.idx<e.idx?-1:1:t.score<e.score?-1:1},ht={location:0,threshold:.6,distance:100},dt={useExtendedSearch:!1,getFn:at,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1};var p={...lt,...ut,...ht,...dt};const ft=/[^ ]+/g;function mt(t=1,e=3){const s=new Map,n=Math.pow(10,e);return{get(r){const i=r.match(ft).length;if(s.has(i))return s.get(i);const c=1/Math.pow(i,.5*t),a=parseFloat(Math.round(c*n)/n);return s.set(i,a),a},clear(){s.clear()}}}class Ce{constructor({getFn:e=p.getFn,fieldNormWeight:s=p.fieldNormWeight}={}){this.norm=mt(s,3),this.getFn=e,this.isCreated=!1,this.setIndexRecords()}setSources(e=[]){this.docs=e}setIndexRecords(e=[]){this.records=e}setKeys(e=[]){this.keys=e,this._keysMap={},e.forEach((s,n)=>{this._keysMap[s.id]=n})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,J(this.docs[0])?this.docs.forEach((e,s)=>{this._addString(e,s)}):this.docs.forEach((e,s)=>{this._addObject(e,s)}),this.norm.clear())}add(e){const s=this.size();J(e)?this._addString(e,s):this._addObject(e,s)}removeAt(e){this.records.splice(e,1);for(let s=e,n=this.size();s<n;s+=1)this.records[s].i-=1}getValueForItemAtKeyId(e,s){return e[this._keysMap[s]]}size(){return this.records.length}_addString(e,s){if(!P(e)||fe(e))return;let n={v:e,i:s,n:this.norm.get(e)};this.records.push(n)}_addObject(e,s){let n={i:s,$:{}};this.keys.forEach((r,i)=>{let c=r.getFn?r.getFn(e):this.getFn(e,r.path);if(P(c)){if(Z(c)){let a=[];const u=[{nestedArrIndex:-1,value:c}];for(;u.length;){const{nestedArrIndex:l,value:h}=u.pop();if(P(h))if(J(h)&&!fe(h)){let d={v:h,i:l,n:this.norm.get(h)};a.push(d)}else Z(h)&&h.forEach((d,m)=>{u.push({nestedArrIndex:m,value:d})})}n.$[i]=a}else if(J(c)&&!fe(c)){let a={v:c,n:this.norm.get(c)};n.$[i]=a}}}),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function Ke(t,e,{getFn:s=p.getFn,fieldNormWeight:n=p.fieldNormWeight}={}){const r=new Ce({getFn:s,fieldNormWeight:n});return r.setKeys(t.map(Pe)),r.setSources(e),r.create(),r}function pt(t,{getFn:e=p.getFn,fieldNormWeight:s=p.fieldNormWeight}={}){const{keys:n,records:r}=t,i=new Ce({getFn:e,fieldNormWeight:s});return i.setKeys(n),i.setIndexRecords(r),i}function ue(t,{errors:e=0,currentLocation:s=0,expectedLocation:n=0,distance:r=p.distance,ignoreLocation:i=p.ignoreLocation}={}){const c=e/t.length;if(i)return c;const a=Math.abs(n-s);return r?c+a/r:a?1:c}function gt(t=[],e=p.minMatchCharLength){let s=[],n=-1,r=-1,i=0;for(let c=t.length;i<c;i+=1){let a=t[i];a&&n===-1?n=i:!a&&n!==-1&&(r=i-1,r-n+1>=e&&s.push([n,r]),n=-1)}return t[i-1]&&i-n>=e&&s.push([n,i-1]),s}const se=32;function At(t,e,s,{location:n=p.location,distance:r=p.distance,threshold:i=p.threshold,findAllMatches:c=p.findAllMatches,minMatchCharLength:a=p.minMatchCharLength,includeMatches:u=p.includeMatches,ignoreLocation:l=p.ignoreLocation}={}){if(e.length>se)throw new Error(rt(se));const h=e.length,d=t.length,m=Math.max(0,Math.min(n,d));let g=i,y=m;const I=a>1||u,k=I?Array(d):[];let S;for(;(S=t.indexOf(e,y))>-1;){let E=ue(e,{currentLocation:S,expectedLocation:m,distance:r,ignoreLocation:l});if(g=Math.min(E,g),y=S+h,I){let C=0;for(;C<h;)k[S+C]=1,C+=1}}y=-1;let L=[],O=1,K=h+d;const ne=1<<h-1;for(let E=0;E<h;E+=1){let C=0,D=K;for(;C<D;)ue(e,{errors:E,currentLocation:m+D,expectedLocation:m,distance:r,ignoreLocation:l})<=g?C=D:K=D,D=Math.floor((K-C)/2+C);K=D;let $=Math.max(1,m-D+1),T=c?d:Math.min(m+D,d)+h,Q=Array(T+2);Q[T+1]=(1<<E)-1;for(let j=T;j>=$;j-=1){let X=j-1,oe=s[t.charAt(X)];if(I&&(k[X]=+!!oe),Q[j]=(Q[j+1]<<1|1)&oe,E&&(Q[j]|=(L[j+1]|L[j])<<1|1|L[j+1]),Q[j]&ne&&(O=ue(e,{errors:E,currentLocation:X,expectedLocation:m,distance:r,ignoreLocation:l}),O<=g)){if(g=O,y=X,y<=m)break;$=Math.max(1,2*m-y)}}if(ue(e,{errors:E+1,currentLocation:m,expectedLocation:m,distance:r,ignoreLocation:l})>g)break;L=Q}const G={isMatch:y>=0,score:Math.max(.001,O)};if(I){const E=gt(k,a);E.length?u&&(G.indices=E):G.isMatch=!1}return G}function yt(t){let e={};for(let s=0,n=t.length;s<n;s+=1){const r=t.charAt(s);e[r]=(e[r]||0)|1<<n-s-1}return e}const le=String.prototype.normalize?(t=>t.normalize("NFD").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g,"")):(t=>t);class ze{constructor(e,{location:s=p.location,threshold:n=p.threshold,distance:r=p.distance,includeMatches:i=p.includeMatches,findAllMatches:c=p.findAllMatches,minMatchCharLength:a=p.minMatchCharLength,isCaseSensitive:u=p.isCaseSensitive,ignoreDiacritics:l=p.ignoreDiacritics,ignoreLocation:h=p.ignoreLocation}={}){if(this.options={location:s,threshold:n,distance:r,includeMatches:i,findAllMatches:c,minMatchCharLength:a,isCaseSensitive:u,ignoreDiacritics:l,ignoreLocation:h},e=u?e:e.toLowerCase(),e=l?le(e):e,this.pattern=e,this.chunks=[],!this.pattern.length)return;const d=(g,y)=>{this.chunks.push({pattern:g,alphabet:yt(g),startIndex:y})},m=this.pattern.length;if(m>se){let g=0;const y=m%se,I=m-y;for(;g<I;)d(this.pattern.substr(g,se),g),g+=se;if(y){const k=m-se;d(this.pattern.substr(k),k)}}else d(this.pattern,0)}searchIn(e){const{isCaseSensitive:s,ignoreDiacritics:n,includeMatches:r}=this.options;if(e=s?e:e.toLowerCase(),e=n?le(e):e,this.pattern===e){let I={isMatch:!0,score:0};return r&&(I.indices=[[0,e.length-1]]),I}const{location:i,distance:c,threshold:a,findAllMatches:u,minMatchCharLength:l,ignoreLocation:h}=this.options;let d=[],m=0,g=!1;this.chunks.forEach(({pattern:I,alphabet:k,startIndex:S})=>{const{isMatch:L,score:O,indices:K}=At(e,I,k,{location:i+S,distance:c,threshold:a,findAllMatches:u,minMatchCharLength:l,includeMatches:r,ignoreLocation:h});L&&(g=!0),m+=O,L&&K&&(d=[...d,...K])});let y={isMatch:g,score:g?m/this.chunks.length:1};return g&&r&&(y.indices=d),y}}class q{constructor(e){this.pattern=e}static isMultiMatch(e){return Se(e,this.multiRegex)}static isSingleMatch(e){return Se(e,this.singleRegex)}search(){}}function Se(t,e){const s=t.match(e);return s?s[1]:null}class xt extends q{constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const s=e===this.pattern;return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class Et extends q{constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const n=e.indexOf(this.pattern)===-1;return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class Ct extends q{constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const s=e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class wt extends q{constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const s=!e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class Ft extends q{constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const s=e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}class Mt extends q{constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const s=!e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class Oe extends q{constructor(e,{location:s=p.location,threshold:n=p.threshold,distance:r=p.distance,includeMatches:i=p.includeMatches,findAllMatches:c=p.findAllMatches,minMatchCharLength:a=p.minMatchCharLength,isCaseSensitive:u=p.isCaseSensitive,ignoreDiacritics:l=p.ignoreDiacritics,ignoreLocation:h=p.ignoreLocation}={}){super(e),this._bitapSearch=new ze(e,{location:s,threshold:n,distance:r,includeMatches:i,findAllMatches:c,minMatchCharLength:a,isCaseSensitive:u,ignoreDiacritics:l,ignoreLocation:h})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class Qe extends q{constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let s=0,n;const r=[],i=this.pattern.length;for(;(n=e.indexOf(this.pattern,s))>-1;)s=n+i,r.push([n,s-1]);const c=!!r.length;return{isMatch:c,score:c?0:1,indices:r}}}const pe=[xt,Qe,Ct,wt,Mt,Ft,Et,Oe],ke=pe.length,Dt=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,Bt="|";function It(t,e={}){return t.split(Bt).map(s=>{let n=s.trim().split(Dt).filter(i=>i&&!!i.trim()),r=[];for(let i=0,c=n.length;i<c;i+=1){const a=n[i];let u=!1,l=-1;for(;!u&&++l<ke;){const h=pe[l];let d=h.isMultiMatch(a);d&&(r.push(new h(d,e)),u=!0)}if(!u)for(l=-1;++l<ke;){const h=pe[l];let d=h.isSingleMatch(a);if(d){r.push(new h(d,e));break}}}return r})}const vt=new Set([Oe.type,Qe.type]);class bt{constructor(e,{isCaseSensitive:s=p.isCaseSensitive,ignoreDiacritics:n=p.ignoreDiacritics,includeMatches:r=p.includeMatches,minMatchCharLength:i=p.minMatchCharLength,ignoreLocation:c=p.ignoreLocation,findAllMatches:a=p.findAllMatches,location:u=p.location,threshold:l=p.threshold,distance:h=p.distance}={}){this.query=null,this.options={isCaseSensitive:s,ignoreDiacritics:n,includeMatches:r,minMatchCharLength:i,findAllMatches:a,ignoreLocation:c,location:u,threshold:l,distance:h},e=s?e:e.toLowerCase(),e=n?le(e):e,this.pattern=e,this.query=It(this.pattern,this.options)}static condition(e,s){return s.useExtendedSearch}searchIn(e){const s=this.query;if(!s)return{isMatch:!1,score:1};const{includeMatches:n,isCaseSensitive:r,ignoreDiacritics:i}=this.options;e=r?e:e.toLowerCase(),e=i?le(e):e;let c=0,a=[],u=0;for(let l=0,h=s.length;l<h;l+=1){const d=s[l];a.length=0,c=0;for(let m=0,g=d.length;m<g;m+=1){const y=d[m],{isMatch:I,indices:k,score:S}=y.search(e);if(I){if(c+=1,u+=S,n){const L=y.constructor.type;vt.has(L)?a=[...a,...k]:a.push(k)}}else{u=0,c=0,a.length=0;break}}if(c){let m={isMatch:!0,score:u/c};return n&&(m.indices=a),m}}return{isMatch:!1,score:1}}}const ge=[];function St(...t){ge.push(...t)}function Ae(t,e){for(let s=0,n=ge.length;s<n;s+=1){let r=ge[s];if(r.condition(t,e))return new r(t,e)}return new ze(t,e)}const he={AND:"$and",OR:"$or"},ye={PATH:"$path",PATTERN:"$val"},xe=t=>!!(t[he.AND]||t[he.OR]),kt=t=>!!t[ye.PATH],jt=t=>!Z(t)&&$e(t)&&!xe(t),je=t=>({[he.AND]:Object.keys(t).map(e=>({[e]:t[e]}))});function We(t,e,{auto:s=!0}={}){const n=r=>{let i=Object.keys(r);const c=kt(r);if(!c&&i.length>1&&!xe(r))return n(je(r));if(jt(r)){const u=c?r[ye.PATH]:i[0],l=c?r[ye.PATTERN]:r[u];if(!J(l))throw new Error(nt(u));const h={keyId:me(u),pattern:l};return s&&(h.searcher=Ae(l,e)),h}let a={children:[],operator:i[0]};return i.forEach(u=>{const l=r[u];Z(l)&&l.forEach(h=>{a.children.push(n(h))})}),a};return xe(t)||(t=je(t)),n(t)}function Rt(t,{ignoreFieldNorm:e=p.ignoreFieldNorm}){t.forEach(s=>{let n=1;s.matches.forEach(({key:r,norm:i,score:c})=>{const a=r?r.weight:null;n*=Math.pow(c===0&&a?Number.EPSILON:c,(a||1)*(e?1:i))}),s.score=n})}function Nt(t,e){const s=t.matches;e.matches=[],P(s)&&s.forEach(n=>{if(!P(n.indices)||!n.indices.length)return;const{indices:r,value:i}=n;let c={indices:r,value:i};n.key&&(c.key=n.key.src),n.idx>-1&&(c.refIndex=n.idx),e.matches.push(c)})}function Lt(t,e){e.score=t.score}function _t(t,e,{includeMatches:s=p.includeMatches,includeScore:n=p.includeScore}={}){const r=[];return s&&r.push(Nt),n&&r.push(Lt),t.map(i=>{const{idx:c}=i,a={item:e[c],refIndex:c};return r.length&&r.forEach(u=>{u(i,a)}),a})}class Y{constructor(e,s={},n){this.options={...p,...s},this.options.useExtendedSearch,this._keyStore=new ot(this.options.keys),this.setCollection(e,n)}setCollection(e,s){if(this._docs=e,s&&!(s instanceof Ce))throw new Error(st);this._myIndex=s||Ke(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){P(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(e=()=>!1){const s=[];for(let n=0,r=this._docs.length;n<r;n+=1){const i=this._docs[n];e(i,n)&&(this.removeAt(n),n-=1,r-=1,s.push(i))}return s}removeAt(e){this._docs.splice(e,1),this._myIndex.removeAt(e)}getIndex(){return this._myIndex}search(e,{limit:s=-1}={}){const{includeMatches:n,includeScore:r,shouldSort:i,sortFn:c,ignoreFieldNorm:a}=this.options;let u=J(e)?J(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return Rt(u,{ignoreFieldNorm:a}),i&&u.sort(c),_e(s)&&s>-1&&(u=u.slice(0,s)),_t(u,this._docs,{includeMatches:n,includeScore:r})}_searchStringList(e){const s=Ae(e,this.options),{records:n}=this._myIndex,r=[];return n.forEach(({v:i,i:c,n:a})=>{if(!P(i))return;const{isMatch:u,score:l,indices:h}=s.searchIn(i);u&&r.push({item:i,idx:c,matches:[{score:l,value:i,norm:a,indices:h}]})}),r}_searchLogical(e){const s=We(e,this.options),n=(a,u,l)=>{if(!a.children){const{keyId:d,searcher:m}=a,g=this._findMatches({key:this._keyStore.get(d),value:this._myIndex.getValueForItemAtKeyId(u,d),searcher:m});return g&&g.length?[{idx:l,item:u,matches:g}]:[]}const h=[];for(let d=0,m=a.children.length;d<m;d+=1){const g=a.children[d],y=n(g,u,l);if(y.length)h.push(...y);else if(a.operator===he.AND)return[]}return h},r=this._myIndex.records,i={},c=[];return r.forEach(({$:a,i:u})=>{if(P(a)){let l=n(s,a,u);l.length&&(i[u]||(i[u]={idx:u,item:a,matches:[]},c.push(i[u])),l.forEach(({matches:h})=>{i[u].matches.push(...h)}))}}),c}_searchObjectList(e){const s=Ae(e,this.options),{keys:n,records:r}=this._myIndex,i=[];return r.forEach(({$:c,i:a})=>{if(!P(c))return;let u=[];n.forEach((l,h)=>{u.push(...this._findMatches({key:l,value:c[h],searcher:s}))}),u.length&&i.push({idx:a,item:c,matches:u})}),i}_findMatches({key:e,value:s,searcher:n}){if(!P(s))return[];let r=[];if(Z(s))s.forEach(({v:i,i:c,n:a})=>{if(!P(i))return;const{isMatch:u,score:l,indices:h}=n.searchIn(i);u&&r.push({score:l,key:e,value:i,idx:c,norm:a,indices:h})});else{const{v:i,n:c}=s,{isMatch:a,score:u,indices:l}=n.searchIn(i);a&&r.push({score:u,key:e,value:i,norm:c,indices:l})}return r}}Y.version="7.1.0";Y.createIndex=Ke;Y.parseIndex=pt;Y.config=p;Y.parseQuery=We;St(bt);const Re={".ts":"file-code",".tsx":"atom",".js":"file-code",".jsx":"atom",".py":"file-code",".rs":"file-code",".go":"file-code",".md":"file-text",".json":"clipboard",".yaml":"gear",".yml":"gear",".css":"palette",".scss":"palette",".html":"globe",".sql":"database",".sh":"terminal",".env":"lock",".toml":"gear",".lock":"lock",default:"file-text"};function $t(t){switch(t){case"scout":return"class-scout";case"builder":return"class-builder";case"debugger":return"class-debugger";case"architect":return"class-architect";case"warrior":return"class-warrior";case"support":return"class-support";case"boss":return"class-boss";default:return"class-default"}}function Tt(t,e=16){var r;const s="."+(((r=t.split(".").pop())==null?void 0:r.toLowerCase())??""),n=Re[s]||Re.default;return f.jsx(H,{name:n,size:e})}function Pt(t,e=16){return f.jsx(H,{name:$t(t),size:e,weight:"fill"})}function Ve(t){const e=Math.floor(t/1e3),s=Math.floor(e/60),n=Math.floor(s/60),r=Math.floor(n/24);return r>0?`${r}d ${n%24}h ago`:n>0?`${n}h ${s%60}m ago`:s>0?`${s}m ago`:"just now"}function Yt(t){const s=Date.now()-t;return Ve(s)}function Ne(t){switch(t){case"agent":return"Agent";case"command":return"Command";case"area":return"Area";case"modified-file":return"Changed";case"building":return"Server";default:return t}}const Le=["command","agent","building","area","modified-file"];function Kt({isOpen:t,onClose:e,onOpenSpawnModal:s,onOpenCommanderView:n,onOpenToolbox:r,onOpenFileExplorer:i,onOpenPM2LogsModal:c,onOpenBossLogsModal:a,onOpenDatabasePanel:u,onOpenMonitoringModal:l}){const h=He(),d=Ye(),m=Je(),g=Xe(),y=A.useRef(e);y.current=e;const I=A.useRef(s);I.current=s;const k=A.useRef(n);k.current=n;const S=A.useRef(r);S.current=r;const L=A.useRef(i);L.current=i;const O=A.useRef(c);O.current=c;const K=A.useRef(a);K.current=a;const ne=A.useRef(u);ne.current=u;const G=A.useRef(l);G.current=l;const[E,C]=A.useState(""),[D,$]=A.useState(0);A.useEffect(()=>{t&&(C(""),$(0))},[t]);const T=te.getShortcuts(),Q=A.useMemo(()=>{if(!t)return[];const o=T.find(F=>F.id==="spawn-agent"),w=T.find(F=>F.id==="toggle-commander");return[{id:"cmd-spawn",type:"command",title:"Spawn New Agent",subtitle:o?Ie(o):"Alt+N",icon:f.jsx(H,{name:"plus",size:16}),action:()=>{y.current(),I.current()}},{id:"cmd-commander",type:"command",title:"Commander View",subtitle:w?Ie(w):"Ctrl+K",icon:f.jsx(H,{name:"dashboard",size:16}),action:()=>{y.current(),k.current()}},{id:"cmd-settings",type:"command",title:"Settings & Tools",subtitle:"Configure Tide Commander",icon:f.jsx(H,{name:"gear",size:16}),action:()=>{y.current(),S.current()}},{id:"cmd-monitoring",type:"command",title:"Monitoring & Logs",subtitle:"Triggers, workflows, events",icon:f.jsx(H,{name:"chart-line",size:16}),action:()=>{var F;y.current(),(F=G.current)==null||F.call(G)}}]},[t,T]),ce=A.useMemo(()=>t?Array.from(h.values()).map(o=>{const w=(g||[]).filter(_=>_.agentId===o.id).map(_=>_.filePath),F=[...new Set(w)],M=F.map(_=>_.split("/").pop()||_),b=[];o.lastAssignedTask&&b.push(o.lastAssignedTask);const R=`${o.class} • ${o.status} • ${o.cwd}`;let B=`${o.name} ${R}`;M.length>0&&(B+=` ${M.join(" ")} ${F.join(" ")}`),b.length>0&&(B+=` ${b.join(" ")}`);const z=Date.now()-o.lastActivity;let V;return o.lastAssignedTask&&(o.lastAssignedTask.length>150?V=o.lastAssignedTask.slice(0,150)+"...":V=o.lastAssignedTask),{id:`agent-${o.id}`,type:"agent",title:o.name,subtitle:R,lastUserInput:V,timeAway:z,icon:Pt(o.class),_searchText:B,_modifiedFiles:F,_userQueries:b,action:()=>{y.current(),te.selectAgent(o.id),te.requestTerminalExpand()}}}):[],[t,h,g]),j=A.useMemo(()=>t?Array.from(d.values()).map(o=>{var w;return{id:`area-${o.id}`,type:"area",title:o.name,subtitle:`${o.assignedAgentIds.length} agents • ${((w=o.directories)==null?void 0:w.length)||0} folders`,icon:f.jsx(H,{name:"map",size:16}),action:()=>{y.current(),te.selectArea(o.id)}}}):[],[t,d]),X=A.useMemo(()=>t?Array.from(m.values()).filter(o=>o.type==="server"||o.type==="boss"||o.type==="database").map(o=>{var B,z,V,_;const w=o.status==="running"?"#4ade80":o.status==="stopped"?"#f87171":"#facc15",F=o.type==="boss"?"crown":o.type==="database"?"database":"desktop";let b=`${o.type==="boss"?"Boss":o.type==="database"?"Database":"Server"} • ${o.status}`;if(o.type==="database"&&((z=(B=o.database)==null?void 0:B.connections)!=null&&z.length)){const x=o.database.connections[0];b+=` • ${x.engine} @ ${x.host}`}else o.cwd&&(b+=` • ${o.cwd}`);let R=`${o.name} ${o.type} ${o.status} ${o.cwd||""} ${((V=o.pm2)==null?void 0:V.name)||""}`;if(o.type==="database"&&((_=o.database)!=null&&_.connections))for(const x of o.database.connections)R+=` ${x.name} ${x.engine} ${x.host} ${x.database||""} mysql postgresql sql`;return{id:`building-${o.id}`,type:"building",title:o.name,subtitle:b,icon:f.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[f.jsx(H,{name:"status-pending",size:10,weight:"fill",color:w}),f.jsx(H,{name:F,size:16})]}),_searchText:R,action:()=>{var x;y.current(),o.type==="boss"?K.current(o.id):o.type==="database"?ne.current(o.id):(x=o.pm2)!=null&&x.enabled&&O.current(o.id)}}}):[],[t,m]),oe=A.useMemo(()=>{if(!t)return[];const o=g||[],w=new Set,F=[];for(const M of o){if(w.has(M.filePath))continue;w.add(M.filePath);const b=M.filePath.split("/").pop()||M.filePath,R=M.action==="created"?"Created":M.action==="modified"?"Modified":M.action==="deleted"?"Deleted":"Read";if(F.push({id:`modified-${M.filePath}-${M.timestamp}`,type:"modified-file",title:b,subtitle:`${R} by ${M.agentName} • ${M.filePath}`,matchedText:M.filePath,icon:M.action==="deleted"?f.jsx(H,{name:"trash",size:16}):Tt(M.filePath),action:()=>{y.current();const B=Array.from(te.getState().areas.values());for(const z of B)for(const V of z.directories||[])if(M.filePath.startsWith(V)){te.setFileViewerPath(M.filePath),L.current(z.id);return}te.selectAgent(M.agentId)}}),F.length>=50)break}return F},[t,g]),we=A.useMemo(()=>new Y(ce,{keys:["title","subtitle","_searchText","lastUserInput"],threshold:.4,ignoreLocation:!0,includeScore:!0,includeMatches:!0}),[ce]),Fe=A.useMemo(()=>new Y(Q,{keys:["title","subtitle"],threshold:.4,includeScore:!0,includeMatches:!0}),[Q]),Me=A.useMemo(()=>new Y(j,{keys:["title","subtitle"],threshold:.4,includeScore:!0,includeMatches:!0}),[j]),De=A.useMemo(()=>new Y(oe,{keys:["title","subtitle","matchedText"],threshold:.4,ignoreLocation:!0,includeScore:!0,includeMatches:!0}),[oe]),Be=A.useMemo(()=>new Y(X,{keys:["title","subtitle","_searchText"],threshold:.4,ignoreLocation:!0,includeScore:!0,includeMatches:!0}),[X]),W=A.useMemo(()=>{if(!E.trim()){const x=[];x.push(...X);const v=[...ce].sort((N,U)=>{const re=N.timeAway??0,ie=U.timeAway??0;return re-ie});x.push(...v),x.push(...Q.slice(0,2)),x.push(...j.slice(0,2));const ee={};return Le.forEach((N,U)=>{ee[N]=U}),x.sort((N,U)=>(ee[N.type]??999)-(ee[U.type]??999)),x}const o=E.toLowerCase(),w=we.search(E).slice(0,8),F=Fe.search(E).slice(0,3),M=Me.search(E).slice(0,2),b=De.search(E).slice(0,3),R=Be.search(E).filter(x=>{const v=x.score??1;return`${x.item.title} ${x.item.subtitle||""} ${x.item._searchText||""}`.toLowerCase().includes(o)||v<=.2}).slice(0,4),B=[],z=[],V=[];for(const x of w){const v={...x.item};if(v._modifiedFiles&&v._modifiedFiles.length>0){const N=v._modifiedFiles.filter(U=>{var ae;const re=((ae=U.split("/").pop())==null?void 0:ae.toLowerCase())||"",ie=U.toLowerCase();return re.includes(o)||ie.includes(o)});N.length>0&&(v.matchedFiles=N)}if(v._userQueries&&v._userQueries.length>0){const N=v._userQueries.find(U=>U.toLowerCase().includes(o));if(N)if(N.length>200){const re=N.toLowerCase().indexOf(o),ie=Math.max(0,re-60),ae=Math.min(N.length,re+o.length+100);v.matchedQuery=(ie>0?"...":"")+N.slice(ie,ae)+(ae<N.length?"...":"")}else v.matchedQuery=N}const ee=v.title.toLowerCase();ee===o||ee.startsWith(o)?z.push(v):V.push(v)}for(const x of z)B.push(x);for(const x of R)B.push(x.item);for(const x of V)B.push(x);for(const x of F)B.push(x.item);for(const x of M)B.push(x.item);for(const x of b)B.push(x.item);const _={};return Le.forEach((x,v)=>{_[x]=v}),B.sort((x,v)=>(_[x.type]??999)-(_[v.type]??999)),B},[E,we,Fe,Me,De,Be,Q,ce,j,X]);A.useEffect(()=>{D>=W.length&&$(Math.max(0,W.length-1))},[W.length,D]);const Ue=A.useCallback(o=>{if(o.altKey&&!o.ctrlKey&&!o.metaKey&&(o.key==="p"||o.key==="n"||o.key==="P"||o.key==="N")){o.preventDefault(),o.stopPropagation(),o.nativeEvent.stopImmediatePropagation();const w=o.key.toLowerCase();$(w==="p"?F=>F>0?F-1:W.length-1:F=>F<W.length-1?F+1:0);return}switch(o.key){case"Escape":o.preventDefault(),y.current();break;case"ArrowUp":o.preventDefault(),$(w=>w>0?w-1:W.length-1);break;case"ArrowDown":o.preventDefault(),$(w=>w<W.length-1?w+1:0);break;case"Enter":o.preventDefault(),W[D]&&W[D].action();break}},[W,D]),Ge=A.useCallback((o,w)=>{if(!w||!o)return o;const F=o.toLowerCase(),M=w.toLowerCase(),b=[];let R=0,B=F.indexOf(M),z=0;for(;B!==-1;)B>R&&b.push(o.slice(R,B)),b.push(de.createElement("mark",{key:z++,className:"spotlight-highlight"},o.slice(B,B+w.length))),R=B+w.length,B=F.indexOf(M,R);return R<o.length&&b.push(o.slice(R)),b.length>0?de.createElement(de.Fragment,null,...b):o},[]);return{query:E,setQuery:C,selectedIndex:D,setSelectedIndex:$,results:W,handleKeyDown:Ue,highlightMatch:Ge}}const zt=A.forwardRef(function({query:e,onQueryChange:s,onKeyDown:n,onResetSelection:r},i){const{t:c}=Ee(["common"]);return f.jsxs("div",{className:"spotlight-input-wrapper",children:[f.jsx("span",{className:"spotlight-search-icon",children:"⌘"}),f.jsx("input",{ref:i,type:"text",className:"spotlight-input",placeholder:c("common:search.spotlightPlaceholder"),value:e,onChange:a=>{s(a.target.value),r()},onKeyDown:n,autoFocus:!0,spellCheck:!1}),f.jsxs("div",{className:"spotlight-input-hints",children:[f.jsx("span",{className:"spotlight-shortcut-hint",children:"↑↓"}),f.jsx("span",{className:"spotlight-shortcut-hint",children:"Enter"}),f.jsx("span",{className:"spotlight-shortcut-hint",children:"Esc"})]})]})}),Ot=A.memo(function({result:e,isSelected:s,query:n,highlightMatch:r,onClick:i,onMouseEnter:c}){const a=e.activityText||e.matchedFiles&&e.matchedFiles.length>0||e.matchedQuery;return f.jsxs("div",{className:`spotlight-item ${s?"selected":""} ${e.activityText?"has-activity":""}`,onClick:i,onMouseEnter:c,role:"option","aria-selected":s,children:[f.jsx("span",{className:"spotlight-item-icon","aria-hidden":"true",children:e.icon}),f.jsxs("div",{className:"spotlight-item-content",children:[f.jsxs("div",{className:"spotlight-item-header",children:[f.jsx("span",{className:"spotlight-item-title",children:r(e.title,n)}),f.jsx("span",{className:`spotlight-item-type ${e.type}`,"aria-label":Ne(e.type),children:Ne(e.type)})]}),e.subtitle&&f.jsx("span",{className:"spotlight-item-subtitle",children:r(e.subtitle,n)}),e.activityText&&f.jsx("span",{className:"spotlight-item-activity",children:r(e.activityText,n)}),a&&f.jsxs("div",{className:"spotlight-item-details",children:[e.matchedFiles&&e.matchedFiles.length>0&&f.jsx("span",{className:"spotlight-item-files",children:e.matchedFiles.map((u,l)=>f.jsxs("span",{className:"file-badge",children:[l>0&&f.jsx("span",{className:"file-separator",children:"•"}),r(u.split("/").pop()||u,n)]},u))}),e.matchedQuery&&f.jsx("span",{className:"spotlight-item-query",children:r(e.matchedQuery,n)})]}),e.timeAway!==void 0&&f.jsx("span",{className:"spotlight-item-time",children:f.jsxs("span",{className:"spotlight-time-away",children:["Idle: ",Ve(e.timeAway)]})}),e.lastUserInput&&!e.matchedQuery&&f.jsxs("span",{className:"spotlight-item-last-input",children:['"',r(e.lastUserInput,n),'"']})]})]})}),Qt=A.forwardRef(function({results:e,selectedIndex:s,query:n,highlightMatch:r,onSelectIndex:i},c){const{t:a}=Ee(["terminal"]),u=A.useRef(!1);A.useEffect(()=>{u.current=!1},[e]),A.useEffect(()=>{const d=typeof c=="function"?null:c==null?void 0:c.current;if(!d)return;const m=()=>{u.current=!0};return d.addEventListener("mousemove",m),()=>{d.removeEventListener("mousemove",m)}},[c,e]);const l={command:a("terminal:spotlight.categories.commands"),agent:a("terminal:spotlight.categories.agents"),building:a("terminal:spotlight.categories.infrastructure"),area:a("terminal:spotlight.categories.areas"),"modified-file":a("terminal:spotlight.categories.modifiedFiles")},h=A.useMemo(()=>{const d=[];let m=null,g=[];return e.forEach((y,I)=>{y.type!==m&&(m!==null&&g.length>0&&d.push([m,g]),m=y.type,g=[]),g.push({result:y,index:I})}),m!==null&&g.length>0&&d.push([m,g]),d},[e]);return A.useEffect(()=>{if(!c||typeof c=="function")return;const d=c.current;if(!d)return;const m=d.querySelector(".spotlight-item.selected");m&&m.scrollIntoView({block:"nearest",behavior:"smooth"})},[s,c]),e.length===0?f.jsx("div",{className:"spotlight-results",ref:c,children:f.jsx("div",{className:"spotlight-empty",children:a("terminal:spotlight.noResults")})}):f.jsx("div",{className:"spotlight-results",ref:c,children:h.map(([d,m])=>f.jsxs("div",{children:[h.length>1&&f.jsx("div",{className:"spotlight-category-header",children:l[d]||d}),m.map(({result:g,index:y})=>f.jsx(Ot,{result:g,isSelected:y===s,query:n,highlightMatch:r,onClick:()=>g.action(),onMouseEnter:()=>{u.current&&i(y)}},g.id))]},d))})}),Wt=A.memo(function(){const{t:e}=Ee(["terminal"]);return f.jsxs("div",{className:"spotlight-footer",children:[f.jsxs("div",{className:"spotlight-footer-left",children:[f.jsxs("span",{className:"spotlight-footer-hint",children:[f.jsx("kbd",{children:"↑"}),f.jsx("kbd",{children:"↓"})," ",f.jsx("kbd",{children:"Alt+N"}),f.jsx("kbd",{children:"Alt+P"})," ",e("terminal:spotlight.navigate")]}),f.jsxs("span",{className:"spotlight-footer-hint",children:[f.jsx("kbd",{children:"Enter"})," ",e("terminal:spotlight.select")]})]}),f.jsx("div",{className:"spotlight-footer-right",children:f.jsxs("span",{className:"spotlight-footer-hint",children:[f.jsx("kbd",{children:"Esc"})," ",e("common:buttons.close")]})})]})}),Vt=768;function Jt({isOpen:t,onClose:e,onOpenSpawnModal:s,onOpenCommanderView:n,onOpenToolbox:r,onOpenFileExplorer:i,onOpenPM2LogsModal:c,onOpenBossLogsModal:a,onOpenDatabasePanel:u,onOpenMonitoringModal:l}){const h=A.useRef(null),d=A.useRef(null),m=A.useRef(null),g=A.useRef(0),{query:y,setQuery:I,selectedIndex:k,setSelectedIndex:S,results:L,handleKeyDown:O,highlightMatch:K}=Kt({isOpen:t,onClose:e,onOpenSpawnModal:s,onOpenCommanderView:n,onOpenToolbox:r,onOpenFileExplorer:i,onOpenPM2LogsModal:c,onOpenBossLogsModal:a,onOpenDatabasePanel:u,onOpenMonitoringModal:l});g.current=L.length,A.useEffect(()=>{t&&setTimeout(()=>{var E;(E=h.current)==null||E.focus()},50)},[t]),A.useEffect(()=>{if(!t)return;const E=window.visualViewport;if(!E||window.innerWidth>Vt)return;const C=()=>{const D=d.current;D&&(D.style.height=`${E.height}px`,D.style.top=`${E.offsetTop}px`)};return C(),E.addEventListener("resize",C),E.addEventListener("scroll",C),()=>{E.removeEventListener("resize",C),E.removeEventListener("scroll",C);const D=d.current;D&&(D.style.height="",D.style.top="")}},[t]),A.useEffect(()=>{if(!t)return;const E=C=>{if(C.key==="Escape"){C.preventDefault(),C.stopPropagation(),C.stopImmediatePropagation(),e();return}if(C.altKey&&!C.ctrlKey&&!C.metaKey&&(C.key==="n"||C.key==="p"||C.key==="N"||C.key==="P")){C.preventDefault(),C.stopPropagation(),C.stopImmediatePropagation();const D=C.key.toLowerCase(),$=g.current;S(D==="p"?T=>T>0?T-1:$-1:T=>T<$-1?T+1:0);return}};return window.addEventListener("keydown",E,{capture:!0}),()=>{window.removeEventListener("keydown",E,{capture:!0})}},[t,e]);const ne=A.useCallback(E=>{E.target===E.currentTarget&&e()},[e]),G=A.useCallback(()=>{S(0)},[S]);return t?f.jsx("div",{ref:d,className:"spotlight-overlay",onClick:ne,children:f.jsxs("div",{className:"spotlight-modal",children:[f.jsx(zt,{ref:h,query:y,onQueryChange:I,onKeyDown:O,onResetSelection:G}),f.jsx(Qt,{ref:m,results:L,selectedIndex:k,query:y,highlightMatch:K,onSelectIndex:S}),f.jsx(Wt,{})]})}):null}export{Re as FILE_ICON_NAMES,Jt as Spotlight,Wt as SpotlightFooter,zt as SpotlightInput,Ot as SpotlightItem,Qt as SpotlightResults,Ve as formatDuration,Yt as formatRelativeTime,Pt as getAgentIcon,Tt as getFileIconFromPath,Ne as getTypeLabel,Kt as useSpotlightSearch};
@@ -0,0 +1 @@
1
+ import{r as m,aj as re,ak as ye,j as e,I,u as K,al as Se,M as Ce,f as ge,s as v,am as Oe,k as _e,l as G,an as R,ao as Be,a8 as De,ap as Re,aq as q,a5 as oe,ar as Ue,as as Ve,at as qe,au as Ke,av as Me,a0 as Ge,a3 as He,S as ne,aw as We,ax as Ye,a2 as Je,ay as de,af as ie,ae as Ze,az as me,aA as Xe}from"./main-BzSUj-VM.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const he="deivid11/tide-commander",Qe=`https://api.github.com/repos/${he}/releases/latest`,es=`https://api.github.com/repos/${he}/releases?per_page=3`,ss=3600*1e3,ke="app_update_dismissed_version",we="1.66.0";function ts(){var y,w;const[s,i]=m.useState({isChecking:!1,updateAvailable:!1,updateInfo:null,recentReleases:[],error:null,currentVersion:we}),n=((w=(y=re)==null?void 0:y.getPlatform)==null?void 0:w.call(y))==="android"||!1,o=d=>d.replace(/^v/,"").split(".").map(c=>parseInt(c,10)||0),r=(d,g)=>{const c=o(d),C=o(g),S=Math.max(c.length,C.length);for(let x=0;x<S;x++){const P=c[x]||0,D=C[x]||0;if(P>D)return 1;if(P<D)return-1}return 0},p=async d=>{var c,C;if(re&&ye&&((C=(c=re).isNativePlatform)==null?void 0:C.call(c))===!0){const S=await ye.get({url:d,headers:{Accept:"application/vnd.github.v3+json"}});return{data:S.data,status:S.status}}else{const S=await fetch(d,{headers:{Accept:"application/vnd.github.v3+json"}});return S.ok?{data:await S.json(),status:S.status}:{data:null,status:S.status}}},l=m.useCallback(async(d=!1)=>{i(g=>({...g,isChecking:!0,error:null}));try{const[g,c]=await Promise.all([p(Qe),p(es)]);if(g.status!==200)throw new Error(`GitHub API error: ${g.status}`);const C=g.data,S=C.tag_name;let x=[];c.status===200&&c.data&&(x=c.data.map(k=>({version:k.tag_name,name:k.name,publishedAt:k.published_at,releaseUrl:k.html_url})));const P=localStorage.getItem(ke);if(!d&&P===S)return i(k=>({...k,isChecking:!1,updateAvailable:!1,recentReleases:x})),null;if(!(r(S,we)>0))return i(k=>({...k,isChecking:!1,updateAvailable:!1,recentReleases:x})),null;const $=C.assets.find(k=>k.name.endsWith(".apk")&&k.content_type==="application/vnd.android.package-archive"),u={version:S,name:C.name,changelog:C.body,releaseUrl:C.html_url,apkUrl:($==null?void 0:$.browser_download_url)||null,apkSize:($==null?void 0:$.size)||null,publishedAt:C.published_at};return i(k=>({...k,isChecking:!1,updateAvailable:!0,updateInfo:u,recentReleases:x})),u}catch(g){const c=g instanceof Error?g.message:"Failed to check for updates";return i(C=>({...C,isChecking:!1,error:c})),null}},[]),a=m.useCallback(async()=>{var d,g,c;if(!((d=s.updateInfo)!=null&&d.apkUrl)){(g=s.updateInfo)!=null&&g.releaseUrl&&window.open(s.updateInfo.releaseUrl,"_blank");return}if(!n){(c=s.updateInfo)!=null&&c.releaseUrl&&window.open(s.updateInfo.releaseUrl,"_blank");return}try{window.open(s.updateInfo.apkUrl,"_system"),i(C=>({...C,error:null}))}catch(C){const S=C instanceof Error?C.message:"Failed to open download";i(x=>({...x,error:S}))}},[s.updateInfo,n]),h=m.useCallback(()=>{s.updateInfo&&localStorage.setItem(ke,s.updateInfo.version),i(d=>({...d,updateAvailable:!1,updateInfo:null}))},[s.updateInfo]),A=m.useCallback(()=>{var d;(d=s.updateInfo)!=null&&d.releaseUrl?window.open(s.updateInfo.releaseUrl,"_blank"):window.open(`https://github.com/${he}/releases`,"_blank")},[s.updateInfo]);return m.useEffect(()=>{if(!n)return;const d=setTimeout(()=>{l()},5e3),g=setInterval(()=>{l()},ss);return()=>{clearTimeout(d),clearInterval(g)}},[n,l]),{...s,isAndroid:n,checkForUpdate:l,downloadAndInstall:a,dismissUpdate:h,openReleasePage:A}}const Ae="tide-toolbox-collapse";function as(s,i){try{const n=localStorage.getItem(`${Ae}-${s}`);if(n!==null)return n==="true"}catch{}return i}function ns(s,i){try{localStorage.setItem(`${Ae}-${s}`,String(i))}catch{}}function F({title:s,storageKey:i,defaultOpen:n=!1,forceOpen:o=!1,children:r,headerExtra:p}){const[l,a]=m.useState(()=>i?as(i,n):n),h=()=>{const y=!l;a(y),i&&ns(i,y)},A=o||l;return e.jsxs("div",{className:`collapsible-section ${A?"open":"collapsed"}`,children:[e.jsxs("button",{className:"collapsible-header",onClick:h,children:[e.jsx("span",{className:"collapsible-title",children:s}),e.jsxs("span",{className:"collapsible-header-right",children:[p,e.jsx("span",{className:"collapsible-arrow",children:e.jsx(I,{name:A?"caret-down":"caret-right",size:10})})]})]}),A&&e.jsx("div",{className:"collapsible-content",children:r})]})}function os({area:s,isSelected:i,onClick:n,onDelete:o}){const{t:r}=K(["config","common"]),p=s.assignedAgentIds.length,l=s.type==="rectangle"?r("config:areas.rect"):r("config:areas.circle");return e.jsxs("div",{className:`area-item ${i?"selected":""}`,onClick:n,children:[e.jsx("div",{className:"area-color-dot",style:{backgroundColor:s.color}}),e.jsxs("div",{className:"area-info",children:[e.jsx("div",{className:"area-name",children:s.name}),e.jsxs("div",{className:"area-meta",children:[l," ",p>0&&`• ${p} ${p>1?r("common:labels.agents").toLowerCase():r("common:labels.agent").toLowerCase()}`]})]}),e.jsx("button",{className:"area-delete-btn",onClick:o,title:r("config:areas.deleteArea"),children:"×"})]})}function is({building:s,isSelected:i,onClick:n,onEdit:o}){var a;const{t:r}=K(["config"]),p=((a=s.pm2Status)==null?void 0:a.ports)||[],l=(h,A)=>{h.stopPropagation(),window.open(`http://localhost:${A}`,"_blank")};return e.jsxs("div",{className:`building-item ${i?"selected":""}`,onClick:n,children:[e.jsx("div",{className:"building-status-dot",style:{backgroundColor:Se[s.status]},title:s.status}),e.jsx("div",{className:"building-icon",children:e.jsx(I,{name:Ce(s.type),size:16})}),e.jsxs("div",{className:"building-info",children:[e.jsx("div",{className:"building-name",children:s.name}),e.jsxs("div",{className:"building-meta",children:[s.type,p.length>0&&e.jsx("span",{className:"building-ports",children:p.map(h=>e.jsxs("a",{href:`http://localhost:${h}`,className:"building-port-link",onClick:A=>l(A,h),title:`Open :${h}`,children:[":",h]},h))})]})]}),e.jsx("button",{className:"building-edit-btn",onClick:h=>{h.stopPropagation(),o()},title:r("config:buildings.editBuilding"),children:e.jsx(I,{name:"gear",size:14})})]})}function ls({building:s,onClose:i,onOpenModal:n}){var A,y,w,d,g,c,C,S;const{t:o}=K(["config","common"]),{buildingLogs:r}=ge(),p=v.getBuildingLogs(s.id),l=Oe[s.style||"server-rack"],a=x=>{v.sendBuildingCommand(s.id,x)},h=x=>{window.open(x,"_blank")};return e.jsxs("div",{className:"building-editor",children:[e.jsxs("div",{className:"building-editor-header",children:[e.jsxs("div",{className:"building-editor-title-row",children:[e.jsx("span",{className:"building-editor-icon",children:e.jsx(I,{name:Ce(s.type),size:18})}),e.jsx("span",{className:"building-editor-title",children:s.name}),e.jsx("span",{className:"building-editor-status",style:{backgroundColor:Se[s.status]},children:s.status})]}),e.jsx("button",{className:"building-editor-close",onClick:i,children:"×"})]}),e.jsx("div",{className:"building-editor-section",children:e.jsxs("div",{className:"building-editor-info-grid",children:[e.jsxs("div",{className:"building-editor-info-item",children:[e.jsx("span",{className:"building-editor-info-label",children:o("common:labels.type")}),e.jsx("span",{className:"building-editor-info-value",children:s.type})]}),e.jsxs("div",{className:"building-editor-info-item",children:[e.jsx("span",{className:"building-editor-info-label",children:o("config:buildings.style")}),e.jsx("span",{className:"building-editor-info-value",children:l.label})]}),s.cwd&&e.jsxs("div",{className:"building-editor-info-item building-editor-info-wide",children:[e.jsx("span",{className:"building-editor-info-label",children:o("config:buildings.directory")}),e.jsx("span",{className:"building-editor-info-value building-editor-cwd",title:s.cwd,children:s.cwd.split("/").pop()||s.cwd})]})]})}),s.type==="server"&&e.jsxs("div",{className:"building-editor-section",children:[e.jsx("div",{className:"building-editor-section-title",children:o("config:buildings.actions")}),e.jsxs("div",{className:"building-editor-actions",children:[e.jsxs("button",{className:"building-editor-action-btn start",onClick:()=>a("start"),disabled:!((A=s.commands)!=null&&A.start)||s.status==="running",title:((y=s.commands)==null?void 0:y.start)||o("config:buildings.noStartCommand"),children:[e.jsx(I,{name:"play",size:12})," ",o("common:buttons.start")]}),e.jsxs("button",{className:"building-editor-action-btn stop",onClick:()=>a("stop"),disabled:!((w=s.commands)!=null&&w.stop)||s.status==="stopped",title:((d=s.commands)==null?void 0:d.stop)||o("config:buildings.noStopCommand"),children:[e.jsx(I,{name:"stop",size:12,weight:"fill"})," ",o("common:buttons.stop")]}),e.jsxs("button",{className:"building-editor-action-btn restart",onClick:()=>a("restart"),disabled:!((g=s.commands)!=null&&g.restart),title:((c=s.commands)==null?void 0:c.restart)||o("config:buildings.noRestartCommand"),children:[e.jsx(I,{name:"refresh",size:12})," ",o("common:buttons.retry")]}),e.jsxs("button",{className:"building-editor-action-btn health",onClick:()=>a("healthCheck"),disabled:!((C=s.commands)!=null&&C.healthCheck),title:((S=s.commands)==null?void 0:S.healthCheck)||o("config:buildings.noHealthCheck"),children:[e.jsx(I,{name:"heart",size:12})," Health"]})]})]}),s.urls&&s.urls.length>0&&e.jsxs("div",{className:"building-editor-section",children:[e.jsx("div",{className:"building-editor-section-title",children:o("config:buildings.links")}),e.jsx("div",{className:"building-editor-links",children:s.urls.map((x,P)=>e.jsxs("button",{className:"building-editor-link",onClick:()=>h(x.url),title:x.url,children:[e.jsx(I,{name:"link",size:12})," ",x.label||x.url]},P))})]}),p.length>0&&e.jsxs("div",{className:"building-editor-section",children:[e.jsxs("div",{className:"building-editor-section-title",children:[o("config:buildings.recentLogs"),e.jsx("button",{className:"building-editor-clear-logs",onClick:()=>v.clearBuildingLogs(s.id),title:o("common:buttons.clear"),children:o("common:buttons.clear")})]}),e.jsx("div",{className:"building-editor-logs",children:p.slice(-5).map((x,P)=>e.jsx("div",{className:"building-editor-log-entry",children:x},P))})]}),e.jsx("div",{className:"building-editor-footer",children:e.jsxs("button",{className:"building-editor-edit-btn",onClick:n,children:[e.jsx(I,{name:"gear",size:12})," ",o("config:buildings.fullSettings")]})})]})}async function cs(s,i){const n=R(),o=await fetch(G(`/api/areas/${s}/logo`),{method:"POST",headers:{"Content-Type":i.type||"image/png","X-Filename":encodeURIComponent(i.name),...n?{Authorization:`Bearer ${n}`}:{}},body:i});if(!o.ok){const r=await o.json().catch(()=>({error:o.statusText}));throw new Error(r.error||`Upload failed: ${o.statusText}`)}return o.json()}async function rs(s){const i=R(),n=await fetch(G(`/api/areas/${s}/logo`),{method:"DELETE",headers:{...i?{Authorization:`Bearer ${i}`}:{}}});if(!n.ok)throw new Error(`Failed to delete logo: ${n.statusText}`)}function ds(s){return _e(G(`/api/areas/logos/${s}`))}const ms=[{key:"center",labelKey:"posCenter"},{key:"top-left",labelKey:"posTopLeft"},{key:"top-right",labelKey:"posTopRight"},{key:"bottom-left",labelKey:"posBottomLeft"},{key:"bottom-right",labelKey:"posBottomRight"}];function us({area:s,onClose:i,onOpenFolder:n}){var W;const{t:o}=K(["config","common"]),[r,p]=m.useState(s.name),[l,a]=m.useState(s.prompt||""),[h,A]=m.useState(!1),[y,w]=m.useState(""),[d,g]=m.useState(!1),c=m.useRef(null);m.useEffect(()=>{p(s.name)},[s.id,s.name]),m.useEffect(()=>{a(s.prompt||"")},[s.id,s.prompt]);const C=b=>{const T=b.target.value;p(T),v.updateArea(s.id,{name:T})},S=b=>{v.updateArea(s.id,{color:b})},x=b=>{const T=b.target.value;a(T),v.updateArea(s.id,{prompt:T})},P=()=>{y.trim()&&(v.addDirectoryToArea(s.id,y.trim()),w(""),A(!1))},D=(b,T)=>{T.stopPropagation(),v.removeDirectoryFromArea(s.id,b)},$=()=>{v.bringAreaToFront(s.id)},u=()=>{v.sendAreaToBack(s.id)},k=m.useCallback(()=>{let b=2,T=2;s.type==="rectangle"&&s.width&&s.height?(b=s.width,T=s.height):s.type==="circle"&&s.radius&&(b=s.radius*1.414,T=s.radius*1.414);const B=Math.min(b,T)*.4;return{width:Math.round(B*10)/10,height:Math.round(B*10)/10}},[s.type,s.width,s.height,s.radius]),te=async b=>{var B;const T=(B=b.target.files)==null?void 0:B[0];if(T){g(!0);try{const f=await cs(s.id,T),E=k();v.updateArea(s.id,{logo:{filename:f.filename,position:"center",width:E.width,height:E.height,keepAspectRatio:!0,opacity:.8}})}catch(f){console.error("Failed to upload logo:",f)}finally{g(!1),c.current&&(c.current.value="")}}},H=async()=>{try{await rs(s.id),v.updateArea(s.id,{logo:void 0})}catch(b){console.error("Failed to remove logo:",b)}},Z=b=>{s.logo&&v.updateArea(s.id,{logo:{...s.logo,position:b}})},ae=b=>{if(!s.logo)return;const T=parseFloat(b.target.value)||.1;if(s.logo.keepAspectRatio&&s.logo.width>0){const B=s.logo.height/s.logo.width;v.updateArea(s.id,{logo:{...s.logo,width:T,height:Math.round(T*B*10)/10}})}else v.updateArea(s.id,{logo:{...s.logo,width:T}})},X=b=>{if(!s.logo)return;const T=parseFloat(b.target.value)||.1;if(s.logo.keepAspectRatio&&s.logo.height>0){const B=s.logo.width/s.logo.height;v.updateArea(s.id,{logo:{...s.logo,height:T,width:Math.round(T*B*10)/10}})}else v.updateArea(s.id,{logo:{...s.logo,height:T}})},Q=()=>{s.logo&&v.updateArea(s.id,{logo:{...s.logo,keepAspectRatio:!s.logo.keepAspectRatio}})},ee=b=>{s.logo&&v.updateArea(s.id,{logo:{...s.logo,opacity:parseFloat(b.target.value)}})};return e.jsxs("div",{className:"area-editor",children:[e.jsxs("div",{className:"area-editor-header",children:[e.jsx("span",{className:"area-editor-title",children:o("config:areas.editArea")}),e.jsx("button",{className:"area-editor-close",onClick:i,children:"×"})]}),e.jsxs("div",{className:"area-editor-row",children:[e.jsx("div",{className:"area-editor-label",children:o("common:labels.name")}),e.jsx("input",{type:"text",className:"area-editor-input",value:r,onChange:C,placeholder:o("config:areas.areaName")})]}),e.jsxs("div",{className:"area-editor-row",children:[e.jsx("div",{className:"area-editor-label",children:o("config:areas.color")}),e.jsx("div",{className:"color-picker-row",children:Be.map(b=>e.jsx("div",{className:`color-swatch ${s.color===b?"selected":""}`,style:{backgroundColor:b},onClick:()=>S(b)},b))})]}),e.jsxs("div",{className:"area-editor-row",children:[e.jsx("div",{className:"area-editor-label",children:o("config:areas.layer")}),e.jsxs("div",{className:"area-layer-buttons",children:[e.jsxs("button",{className:"area-layer-btn",onClick:$,title:o("config:areas.bringToFront"),children:[e.jsx(I,{name:"arrow-up",size:12})," ",o("config:areas.front")]}),e.jsxs("button",{className:"area-layer-btn",onClick:u,title:o("config:areas.sendToBack"),children:[e.jsx(I,{name:"arrow-down",size:12})," ",o("config:areas.back")]})]})]}),e.jsxs("div",{className:"area-editor-row",style:{flexDirection:"column",alignItems:"stretch"},children:[e.jsx("div",{className:"area-editor-label",style:{marginBottom:6},children:o("config:areas.logo")}),e.jsxs("div",{className:"area-logo-section",children:[(W=s.logo)!=null&&W.filename?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"area-logo-preview",children:[e.jsx("img",{src:ds(s.logo.filename),alt:"Logo",className:"area-logo-thumbnail"}),e.jsx("button",{className:"area-logo-remove-btn",onClick:H,children:o("config:areas.removeLogo")}),e.jsx("button",{className:"area-logo-replace-btn",onClick:()=>{var b;return(b=c.current)==null?void 0:b.click()},disabled:d,children:d?"...":e.jsx(I,{name:"refresh",size:12})})]}),e.jsxs("div",{className:"area-logo-config-row",children:[e.jsx("span",{className:"area-logo-config-label",children:o("config:areas.logoPosition")}),e.jsx("div",{className:"area-logo-position-row",children:ms.map(({key:b,labelKey:T})=>{var B;return e.jsx("button",{className:`area-logo-pos-btn ${((B=s.logo)==null?void 0:B.position)===b?"active":""}`,onClick:()=>Z(b),children:o(`config:areas.${T}`)},b)})})]}),e.jsxs("div",{className:"area-logo-config-row",children:[e.jsx("span",{className:"area-logo-config-label",children:o("config:areas.logoSize")}),e.jsxs("div",{className:"area-logo-size-row",children:[e.jsxs("label",{className:"area-logo-size-field",children:[e.jsx("span",{children:o("config:areas.logoWidth")}),e.jsx("input",{type:"number",className:"area-logo-size-input",value:s.logo.width,onChange:ae,min:.1,step:.1})]}),e.jsxs("label",{className:"area-logo-size-field",children:[e.jsx("span",{children:o("config:areas.logoHeight")}),e.jsx("input",{type:"number",className:"area-logo-size-input",value:s.logo.height,onChange:X,min:.1,step:.1})]}),e.jsxs("label",{className:"area-logo-aspect-label",title:o("config:areas.keepAspectRatio"),children:[e.jsx("input",{type:"checkbox",checked:s.logo.keepAspectRatio,onChange:Q}),o("config:areas.keepAspectRatio")]})]})]}),e.jsxs("div",{className:"area-logo-config-row",children:[e.jsx("span",{className:"area-logo-config-label",children:o("config:areas.logoOpacity")}),e.jsxs("div",{className:"area-logo-opacity-row",children:[e.jsx("input",{type:"range",min:0,max:1,step:.05,value:s.logo.opacity??.8,onChange:ee,className:"area-logo-opacity-slider"}),e.jsxs("span",{className:"area-logo-opacity-value",children:[Math.round((s.logo.opacity??.8)*100),"%"]})]})]})]}):e.jsx("button",{className:"area-logo-upload-btn",onClick:()=>{var b;return(b=c.current)==null?void 0:b.click()},disabled:d,children:d?"...":o("config:areas.uploadLogo")}),e.jsx("input",{ref:c,type:"file",accept:"image/*",style:{display:"none"},onChange:te})]})]}),e.jsxs("div",{className:"area-editor-row",style:{flexDirection:"column",alignItems:"stretch"},children:[e.jsx("div",{className:"area-editor-label",style:{marginBottom:6},children:o("config:areas.folders",{count:s.directories.length})}),e.jsxs("div",{className:"area-folders-list",children:[s.directories.map(b=>e.jsxs("div",{className:"area-folder-item",title:b,children:[e.jsx("span",{className:"area-folder-icon clickable",onClick:()=>n==null?void 0:n(s.id),title:o("config:areas.openFolder"),children:e.jsx(I,{name:"folder",size:14})}),e.jsx("span",{className:"area-folder-path",children:b.split("/").pop()||b}),e.jsx("button",{className:"area-folder-remove",onClick:T=>D(b,T),title:o("config:areas.removeFolder"),children:"×"})]},b)),h?e.jsxs("div",{className:"area-add-folder-inline",children:[e.jsx(De,{value:y,onChange:w,onSubmit:P,placeholder:o("config:areas.folderPlaceholder"),className:"area-add-folder-input",directoriesOnly:!0,autoFocus:!0}),e.jsx("button",{className:"area-add-folder-confirm",onClick:P,children:"+"})]}):e.jsx("button",{className:"area-add-folder-btn",onClick:()=>A(!0),children:o("config:areas.addFolder")})]})]}),e.jsxs("div",{className:"area-editor-row",style:{flexDirection:"column",alignItems:"stretch"},children:[e.jsx("div",{className:"area-editor-label",style:{marginBottom:6},children:o("config:areas.prompt","Prompt")}),e.jsx("textarea",{className:"area-editor-input",value:l,onChange:x,placeholder:o("config:areas.promptPlaceholder","System prompt for agents in this area..."),rows:4,style:{resize:"vertical",fontFamily:"monospace",fontSize:12}}),e.jsx("div",{style:{fontSize:11,color:"var(--text-secondary)",marginTop:4},children:o("config:areas.promptHint","This prompt is injected into agents assigned to this area. Takes effect on next context refresh.")})]}),s.assignedAgentIds.length>0&&e.jsxs("div",{className:"area-editor-row",children:[e.jsx("div",{className:"area-editor-label",children:o("config:areas.assignedAgents",{count:s.assignedAgentIds.length})}),e.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:o("config:areas.rightClickUnassign")})]})]})}function gs(){const{t:s}=K(["config","common"]),i=Re(),[n,o]=m.useState(!1),[r,p]=m.useState(null),[l,a]=m.useState({name:"",key:"",value:"",description:""}),h=()=>{o(!0),p(null),a({name:"",key:"",value:"",description:""})},A=c=>{p(c.id),o(!1),a({name:c.name,key:c.key,value:c.value,description:c.description||""})},y=()=>{o(!1),p(null),a({name:"",key:"",value:"",description:""})},w=()=>{!l.name.trim()||!l.key.trim()||(r?v.updateSecret(r,{name:l.name.trim(),key:l.key.trim().toUpperCase().replace(/[^A-Z0-9]+/g,"_"),value:l.value,description:l.description.trim()||void 0}):v.createSecret({name:l.name.trim(),key:l.key.trim().toUpperCase().replace(/[^A-Z0-9]+/g,"_"),value:l.value,description:l.description.trim()||void 0}),y())},d=c=>{confirm(s("config:secrets.deleteConfirm"))&&(v.deleteSecret(c),r===c&&y())},g=c=>{navigator.clipboard.writeText(`{{${c}}}`)};return e.jsxs("div",{className:"secrets-section",children:[e.jsx("div",{className:"secrets-description",children:s("config:secrets.description",{placeholder:"{{KEY}}"})}),e.jsx("div",{className:"secrets-list",children:i.length===0&&!n?e.jsx("div",{className:"secrets-empty",children:s("config:secrets.noSecrets")}):i.map(c=>e.jsxs("div",{className:`secret-item ${r===c.id?"editing":""}`,children:[e.jsxs("div",{className:"secret-item-header",children:[e.jsxs("div",{className:"secret-item-info",children:[e.jsx("span",{className:"secret-item-name",children:c.name}),e.jsx("code",{className:"secret-item-key",onClick:()=>g(c.key),title:s("config:secrets.copyPlaceholder"),children:`{{${c.key}}}`})]}),e.jsxs("div",{className:"secret-item-actions",children:[e.jsx("button",{className:"secret-item-btn edit",onClick:()=>A(c),title:s("common:buttons.edit"),children:e.jsx(I,{name:"edit",size:12})}),e.jsx("button",{className:"secret-item-btn delete",onClick:()=>d(c.id),title:s("common:buttons.delete"),children:"×"})]})]}),c.description&&e.jsx("div",{className:"secret-item-description",children:c.description})]},c.id))}),(n||r)&&e.jsxs("div",{className:"secret-form",children:[e.jsxs("div",{className:"secret-form-row",children:[e.jsx("label",{className:"secret-form-label",children:s("common:labels.name")}),e.jsx("input",{type:"text",className:"secret-form-input",placeholder:s("config:secrets.namePlaceholder"),value:l.name,onChange:c=>a({...l,name:c.target.value}),autoFocus:!0})]}),e.jsxs("div",{className:"secret-form-row",children:[e.jsx("label",{className:"secret-form-label",children:"Key"}),e.jsx("input",{type:"text",className:"secret-form-input",placeholder:s("config:secrets.keyPlaceholder"),value:l.key,onChange:c=>a({...l,key:c.target.value.toUpperCase().replace(/[^A-Z0-9_]/g,"")})}),e.jsx("span",{className:"secret-form-hint",children:s("config:secrets.usedAs",{placeholder:`{{${l.key||"KEY"}}}`})})]}),e.jsxs("div",{className:"secret-form-row",children:[e.jsx("label",{className:"secret-form-label",children:s("config:secrets.secretValue")}),e.jsx("input",{type:"password",className:"secret-form-input",placeholder:s("config:secrets.valuePlaceholder"),value:l.value,onChange:c=>a({...l,value:c.target.value})})]}),e.jsxs("div",{className:"secret-form-row",children:[e.jsx("label",{className:"secret-form-label",children:s("common:labels.description")}),e.jsx("input",{type:"text",className:"secret-form-input",placeholder:s("config:secrets.descriptionPlaceholder"),value:l.description,onChange:c=>a({...l,description:c.target.value})})]}),e.jsxs("div",{className:"secret-form-actions",children:[e.jsx("button",{className:"secret-form-btn cancel",onClick:y,children:s("common:buttons.cancel")}),e.jsx("button",{className:"secret-form-btn save",onClick:w,disabled:!l.name.trim()||!l.key.trim(),children:s(r?"config:secrets.update":"common:buttons.add")})]})]}),!n&&!r&&e.jsx("button",{className:"secrets-add-btn",onClick:h,children:s("config:secrets.addSecret")})]})}async function hs(){const s=R(),i=await fetch(`${q()}/api/agents/system-settings/prompt`,{headers:{Authorization:`Bearer ${s}`}});if(!i.ok)throw new Error(`Failed to fetch system prompt: ${i.statusText}`);return(await i.json()).prompt||""}async function ps(s){const i=R(),n=await fetch(`${q()}/api/agents/system-settings/prompt`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({prompt:s})});if(!n.ok)throw new Error(`Failed to update system prompt: ${n.statusText}`)}async function fs(){const s=R(),i=await fetch(`${q()}/api/agents/system-settings/prompt`,{method:"DELETE",headers:{Authorization:`Bearer ${s}`}});if(!i.ok)throw new Error(`Failed to clear system prompt: ${i.statusText}`)}async function xs(){const s=R(),i=await fetch(`${q()}/api/agents/system-settings/echo-prompt`,{headers:{Authorization:`Bearer ${s}`}});if(!i.ok)throw new Error(`Failed to fetch echo prompt setting: ${i.statusText}`);return(await i.json()).enabled||!1}async function bs(s){const i=R(),n=await fetch(`${q()}/api/agents/system-settings/echo-prompt`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({enabled:s})});if(!n.ok)throw new Error(`Failed to update echo prompt setting: ${n.statusText}`)}async function js(){const s=R(),i=await fetch(`${q()}/api/agents/system-settings/codex-binary`,{headers:{Authorization:`Bearer ${s}`}});if(!i.ok)throw new Error(`Failed to fetch codex binary path: ${i.statusText}`);return(await i.json()).path||""}async function vs(s){const i=R(),n=await fetch(`${q()}/api/agents/system-settings/codex-binary`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({path:s})});if(!n.ok)throw new Error(`Failed to update codex binary path: ${n.statusText}`)}async function Ns(){const s=R(),i=await fetch(`${q()}/api/agents/system-settings/tmux-mode`,{headers:{Authorization:`Bearer ${s}`}});if(!i.ok)throw new Error(`Failed to fetch tmux mode setting: ${i.statusText}`);return(await i.json()).enabled||!1}async function ys(s){const i=R(),n=await fetch(`${q()}/api/agents/system-settings/tmux-mode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({enabled:s})});if(!n.ok)throw new Error(`Failed to update tmux mode setting: ${n.statusText}`)}async function ks(){const s=R(),i=await fetch(`${q()}/api/agents/system-settings/backup`,{headers:{Authorization:`Bearer ${s}`}});if(!i.ok)throw new Error(`Failed to fetch backup status: ${i.statusText}`);return i.json()}async function ws(s){const i=R(),n=await fetch(`${q()}/api/agents/system-settings/backup`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({enabled:s})});if(!n.ok){const o=await n.json().catch(()=>({}));throw new Error(o.error||`Failed to update backup setting: ${n.statusText}`)}return n.json()}function Ss({checked:s,onChange:i,disabled:n}){return e.jsxs("label",{className:"config-toggle",children:[e.jsx("input",{type:"checkbox",className:"config-toggle-input",checked:s,disabled:n,onChange:o=>i(o.target.checked)}),e.jsx("span",{className:"config-toggle-track",children:e.jsx("span",{className:"config-toggle-thumb"})})]})}function Cs(){const{t:s}=K(["config","common"]),[i,n]=m.useState([]),[o,r]=m.useState(new Set),[p,l]=m.useState(new Set),[a,h]=m.useState(!1),[A,y]=m.useState(!1),[w,d]=m.useState(null),[g,c]=m.useState(null),[C,S]=m.useState(null),[x,P]=m.useState(null),[D,$]=m.useState(!1),[u,k]=m.useState(null);m.useEffect(()=>{oe(G("/api/config/categories")).then(f=>f.json()).then(f=>{const E=Array.isArray(f)?f:[];n(E),r(new Set(E.map(L=>L.id)))}).catch(f=>console.error("Failed to fetch config categories:",f))},[]),m.useEffect(()=>{ks().then(P).catch(f=>{console.error("Failed to fetch backup status:",f),k(f.message||"Failed to fetch backup status")})},[]);const te=async f=>{if(!D){$(!0),k(null);try{const E=await ws(f);P(E)}catch(E){k(E.message||"Failed to update backup setting")}finally{$(!1)}}},H=f=>{r(E=>{const L=new Set(E);return L.has(f)?L.delete(f):L.add(f),L})},Z=f=>{l(E=>{const L=new Set(E);return L.has(f)?L.delete(f):L.add(f),L})},ae=()=>r(new Set(i.map(f=>f.id))),X=()=>r(new Set),Q=()=>{g&&l(new Set(g.categories.map(f=>f.id)))},ee=()=>l(new Set),W=async()=>{var f;if(o.size!==0){h(!0),S(null);try{const E=Array.from(o).join(","),L=await oe(G(`/api/config/export?categories=${E}`));if(!L.ok)throw new Error("Export failed");const M=await L.blob(),V=window.URL.createObjectURL(M),j=document.createElement("a");j.href=V;const _=L.headers.get("Content-Disposition"),le=((f=_==null?void 0:_.match(/filename="(.+)"/))==null?void 0:f[1])||"tide-commander-config.zip";j.download=le,document.body.appendChild(j),j.click(),document.body.removeChild(j),window.URL.revokeObjectURL(V),S({type:"success",text:s("config:data.exportSuccess")})}catch(E){S({type:"error",text:E.message||"Export failed"})}finally{h(!1)}}},b=async f=>{var L;const E=(L=f.target.files)==null?void 0:L[0];if(E){d(E),S(null),c(null),l(new Set);try{const M=await oe(G("/api/config/preview"),{method:"POST",headers:{"Content-Type":"application/zip"},body:await E.arrayBuffer()});if(!M.ok){const _=await M.json();throw new Error(_.error||"Failed to preview config file")}const V=await M.json(),j=Array.isArray(V.categories)?V.categories:[];c({...V,categories:j}),l(new Set(j.map(_=>_.id)))}catch(M){S({type:"error",text:M.message||"Failed to read config file"}),d(null)}}},T=async()=>{if(!(!w||p.size===0)){y(!0),S(null);try{const f=Array.from(p).join(","),E=await oe(G(`/api/config/import?categories=${f}`),{method:"POST",headers:{"Content-Type":"application/zip"},body:await w.arrayBuffer()}),L=await E.json();if(!E.ok)throw new Error(L.error||"Import failed");S({type:"success",text:L.message||s("config:data.importSuccess")}),d(null),c(null),l(new Set)}catch(f){S({type:"error",text:f.message||"Import failed"})}finally{y(!1)}}},B=()=>{d(null),c(null),l(new Set),S(null)};return e.jsxs("div",{className:"data-section",children:[C&&e.jsx("div",{className:`data-message data-message-${C.type}`,children:C.text}),e.jsxs("div",{className:"data-subsection",children:[e.jsxs("div",{className:"data-subsection-header",children:[e.jsx("span",{className:"data-subsection-title",children:"Hourly Backups"}),e.jsx(Ss,{checked:!!(x!=null&&x.enabled),disabled:D||!x,onChange:te})]}),e.jsxs("div",{className:"data-backup-info",children:[x?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:["Saves a compressed snapshot of your data every hour to"," ",e.jsx("code",{children:x.backupDir}),". Identical snapshots are skipped. Keeps the 8 newest plus one from each of the 2 most recent prior days."]}),!x.scriptExists&&e.jsxs("div",{style:{marginTop:6,color:"var(--dracula-red, #ff5555)"},children:["Backup script not found at ",e.jsx("code",{children:x.scriptPath})]}),x.lastRunAt&&e.jsxs("div",{style:{marginTop:6},children:["Last run: ",new Date(x.lastRunAt).toLocaleString(),x.lastRunOk===!0&&" — ok",x.lastRunOk===!1&&x.lastRunError&&e.jsxs("span",{style:{color:"var(--dracula-red, #ff5555)"},children:[" — ",x.lastRunError]})]})]}):e.jsx("div",{children:"Loading backup status…"}),u&&e.jsx("div",{className:"data-message data-message-error",style:{marginTop:6},children:u})]})]}),e.jsxs("div",{className:"data-subsection",children:[e.jsxs("div",{className:"data-subsection-header",children:[e.jsx("span",{className:"data-subsection-title",children:s("config:data.exportData")}),e.jsxs("div",{className:"data-select-controls",children:[e.jsx("button",{className:"data-select-btn",onClick:ae,children:s("common:labels.all")}),e.jsx("button",{className:"data-select-btn",onClick:X,children:s("common:labels.none")})]})]}),e.jsx("div",{className:"data-category-list",children:i.map(f=>e.jsxs("label",{className:"data-category-item",children:[e.jsx("input",{type:"checkbox",checked:o.has(f.id),onChange:()=>H(f.id)}),e.jsx("span",{className:"data-category-name",children:f.name})]},f.id))}),e.jsx("button",{className:"data-action-btn export",onClick:W,disabled:a||o.size===0,children:a?s("config:data.exporting"):s("config:data.exportCount",{count:o.size})})]}),e.jsxs("div",{className:"data-subsection",children:[e.jsx("div",{className:"data-subsection-header",children:e.jsx("span",{className:"data-subsection-title",children:s("config:data.importData")})}),w?g?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"data-import-info",children:[e.jsx("div",{className:"data-import-file",children:w.name}),e.jsxs("div",{className:"data-import-date",children:[s("config:data.exported"),": ",new Date(g.exportedAt).toLocaleDateString()]})]}),e.jsxs("div",{className:"data-subsection-header",children:[e.jsx("span",{className:"data-subsection-subtitle",children:s("config:data.selectToImport")}),e.jsxs("div",{className:"data-select-controls",children:[e.jsx("button",{className:"data-select-btn",onClick:Q,children:s("common:labels.all")}),e.jsx("button",{className:"data-select-btn",onClick:ee,children:s("common:labels.none")})]})]}),e.jsx("div",{className:"data-category-list",children:g.categories.map(f=>e.jsxs("label",{className:"data-category-item",children:[e.jsx("input",{type:"checkbox",checked:p.has(f.id),onChange:()=>Z(f.id)}),e.jsx("span",{className:"data-category-name",children:f.name}),f.fileCount&&e.jsxs("span",{className:"data-category-count",children:["(",f.fileCount," ",s("config:data.files"),")"]})]},f.id))}),e.jsxs("div",{className:"data-import-actions",children:[e.jsx("button",{className:"data-action-btn cancel",onClick:B,children:s("common:buttons.cancel")}),e.jsx("button",{className:"data-action-btn import",onClick:T,disabled:A||p.size===0,children:A?s("config:data.importing"):s("config:data.importCount",{count:p.size})})]})]}):e.jsx("div",{className:"data-loading",children:s("config:data.readingFile")}):e.jsxs("label",{className:"data-file-input",children:[e.jsx("input",{type:"file",accept:".zip",onChange:b,style:{display:"none"}}),e.jsx("span",{className:"data-file-input-label",children:s("config:data.selectFile")})]})]})]})}function As(){const[s,i]=m.useState(()=>Ue()),n=o=>{i(o);const r=qe(o);Ke(r)};return e.jsx("div",{className:"theme-selector",children:e.jsx("div",{className:"theme-selector-grid",children:Ve.map(o=>e.jsxs("button",{className:`theme-option ${s===o.id?"active":""}`,onClick:()=>n(o.id),title:o.description,children:[e.jsx("div",{className:"theme-preview",children:e.jsxs("div",{className:"theme-preview-bg",style:{backgroundColor:o.colors.bgPrimary},children:[e.jsx("div",{className:"theme-preview-accent",style:{backgroundColor:o.colors.accentBlue}}),e.jsx("div",{className:"theme-preview-claude",style:{backgroundColor:o.colors.accentClaude}})]})}),e.jsx("span",{className:"theme-name",children:o.name})]},o.id))})})}function Ts(){const{t:s}=K(["config"]),{updateAvailable:i,updateInfo:n,recentReleases:o,isChecking:r,error:p,currentVersion:l,isAndroid:a,checkForUpdate:h,downloadAndInstall:A,openReleasePage:y}=ts(),w=g=>g?`${(g/(1024*1024)).toFixed(1)} MB`:"",d=g=>new Date(g).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"});return e.jsxs("div",{className:"about-section",children:[e.jsxs("div",{className:"about-logo",children:[e.jsx("span",{className:"about-logo-icon",children:e.jsx(I,{name:"waves",size:24})}),e.jsx("span",{className:"about-logo-text",children:"Tide Commander"})]}),e.jsxs("div",{className:"about-version",children:[e.jsx("span",{className:"about-version-label",children:s("config:about.version")}),e.jsxs("div",{className:"about-version-info",children:[e.jsx("span",{className:"about-version-value",children:l}),i&&n?e.jsx("span",{className:"about-version-update-badge",onClick:y,title:`Update available: ${n.version}`,children:n.version}):e.jsxs("a",{href:"https://github.com/deivid11/tide-commander/releases",target:"_blank",rel:"noopener noreferrer",className:"about-version-status",children:["(",s("config:about.updated"),")"]})]})]}),e.jsxs("div",{className:"about-update",children:[i&&n?e.jsxs("div",{className:"about-update-available",children:[e.jsxs("div",{className:"about-update-header",children:[e.jsx("span",{className:"about-update-badge",children:s("config:about.updateAvailable")}),e.jsx("span",{className:"about-update-version",children:n.version})]}),n.apkSize&&e.jsxs("div",{className:"about-update-size",children:[s("config:about.sizeLabel"),": ",w(n.apkSize)]}),p&&e.jsx("div",{className:"about-update-error",children:p}),e.jsxs("div",{className:"about-update-actions",children:[e.jsx("button",{className:"about-update-btn changelog",onClick:y,children:s("config:about.changelog")}),a&&n.apkUrl?e.jsx("button",{className:"about-update-btn download",onClick:A,children:s("config:about.downloadAPK")}):e.jsx("button",{className:"about-update-btn download",onClick:y,children:s("config:about.viewRelease")})]})]}):e.jsxs("div",{className:"about-update-check",children:[e.jsx("span",{className:"about-update-status",children:s(r?"config:about.checkingUpdates":"config:about.upToDate")}),e.jsx("button",{className:"about-update-btn check",onClick:()=>h(!0),disabled:r,children:r?"...":s("config:about.check")})]}),o.length>0&&e.jsxs("div",{className:"about-releases",children:[e.jsx("div",{className:"about-releases-title",children:s("config:about.recentReleases")}),e.jsx("div",{className:"about-releases-list",children:o.map(g=>e.jsxs("a",{href:g.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:`about-release-item ${g.version===`v${l}`||g.version===l?"current":""}`,children:[e.jsx("span",{className:"about-release-version",children:g.version}),e.jsx("span",{className:"about-release-date",children:d(g.publishedAt)})]},g.version))})]})]}),e.jsx("div",{className:"about-description",children:s("config:about.tagline")}),e.jsxs("div",{className:"about-principles",children:[e.jsx("div",{className:"about-principles-title",children:s("config:about.corePrinciples")}),e.jsxs("ul",{className:"about-principles-list",children:[e.jsx("li",{children:s("config:about.principle1")}),e.jsx("li",{children:s("config:about.principle2")}),e.jsx("li",{children:s("config:about.principle3")}),e.jsx("li",{children:s("config:about.principle4")})]})]}),e.jsx("div",{className:"about-links",children:e.jsxs("a",{href:"https://github.com/deivid11/tide-commander",target:"_blank",rel:"noopener noreferrer",className:"about-link",children:[e.jsx("span",{className:"about-link-icon",children:e.jsx(I,{name:"package",size:14})}),e.jsx("span",{children:s("config:about.repository")})]})}),e.jsxs("div",{className:"about-credits",children:[e.jsx("div",{className:"about-credits-title",children:s("config:about.specialThanks")}),e.jsxs("div",{className:"about-credit-item",children:[e.jsx("a",{href:"https://kenney.nl",target:"_blank",rel:"noopener noreferrer",className:"about-credit-link",children:"Kenney.nl"}),e.jsx("span",{className:"about-credit-desc",children:s("config:about.kenneyCredit")})]}),e.jsxs("div",{className:"about-credit-item",children:[e.jsx("a",{href:"https://claude.ai/code",target:"_blank",rel:"noopener noreferrer",className:"about-credit-link",children:"Claude Code"}),e.jsx("span",{className:"about-credit-desc",children:s("config:about.claudeCodeCredit")})]})]})]})}const Es={gmail:"✉️",slack:"💬",jira:"📋","google-calendar":"📅",docx:"📄"};function Is({onOpenModal:s}){const[i,n]=m.useState([]),[o,r]=m.useState(!0),p=m.useCallback(async()=>{try{const l=await oe(G("/api/integrations"));if(!l.ok)return;const a=await l.json();n(a)}catch{}finally{r(!1)}},[]);return m.useEffect(()=>{p()},[p]),o?e.jsx("div",{style:{color:"var(--text-secondary, #a6adc8)",fontSize:12,padding:"4px 0"},children:"Loading..."}):i.length===0?e.jsx("div",{style:{color:"var(--text-secondary, #a6adc8)",fontSize:12,padding:"4px 0"},children:"No integrations available."}):e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[i.map(l=>{const a=Es[l.id]||"🔌",h=!!l.status.error,A=l.status.connected,y=h?"#f38ba8":A?"#a6e3a1":"#fab387",w=h?"Error":A?"Connected":"Setup Required",d=h?"✗":A?"✓":"⚠";return e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 8px",borderRadius:6,background:"var(--surface-1, #181825)",border:"1px solid var(--border, #313244)",fontSize:13},children:[e.jsx("span",{style:{fontSize:15,flexShrink:0},children:a}),e.jsx("span",{style:{flex:1,color:"var(--text-primary, #cdd6f4)",fontWeight:500},children:l.name}),e.jsxs("span",{style:{color:y,fontSize:11,fontWeight:500,whiteSpace:"nowrap"},children:[d," ",w]}),e.jsx("button",{onClick:()=>s(l.id),title:`Configure ${l.name}`,style:{background:"none",border:"none",cursor:"pointer",padding:"2px 4px",fontSize:14,color:"var(--text-secondary, #a6adc8)",borderRadius:4,flexShrink:0},onMouseEnter:g=>{g.target.style.color="var(--text-primary, #cdd6f4)"},onMouseLeave:g=>{g.target.style.color="var(--text-secondary, #a6adc8)"},children:"⚙️"})]},l.id)}),e.jsx("button",{onClick:()=>s(),style:{background:"none",border:"1px dashed var(--border, #313244)",borderRadius:6,padding:"6px 8px",cursor:"pointer",color:"var(--text-secondary, #a6adc8)",fontSize:12,textAlign:"center",marginTop:2},onMouseEnter:l=>{l.target.style.borderColor="var(--accent, #89b4fa)",l.target.style.color="var(--accent, #89b4fa)"},onMouseLeave:l=>{l.target.style.borderColor="var(--border, #313244)",l.target.style.color="var(--text-secondary, #a6adc8)"},children:"Manage All Integrations"})]})}function Ps({isOpen:s,onClose:i}){const{t:n}=K(["config"]),[o,r]=m.useState(""),[p,l]=m.useState(""),[a,h]=m.useState(!0),[A,y]=m.useState(null),[w,d]=m.useState(null),[g,c]=m.useState(!1);m.useEffect(()=>{s&&C()},[s]);const C=async()=>{try{h(!0),y(null),d(null);const u=await hs();r(u),l(u),c(!1)}catch(u){y(u instanceof Error?u.message:"Failed to load system prompt")}finally{h(!1)}},S=u=>{const k=u.target.value;r(k),c(k!==p),y(null),d(null)},x=async()=>{try{y(null),d(null),await ps(o),l(o),c(!1),d(n("config:systemPrompt.saved"))}catch(u){y(u instanceof Error?u.message:"Failed to save system prompt")}},P=async()=>{if(window.confirm(n("config:systemPrompt.confirmClear")))try{y(null),d(null),await fs(),r(""),l(""),c(!1),d(n("config:systemPrompt.cleared"))}catch(u){y(u instanceof Error?u.message:"Failed to clear system prompt")}},D=()=>{r(p),c(!1),y(null),d(null)},$=u=>{if(u.key==="Escape"){if(g&&!window.confirm("You have unsaved changes. Close anyway?")){u.preventDefault();return}i()}};return s?e.jsx(Me,{children:e.jsx("div",{className:`modal-overlay ${s?"visible":""}`,onClick:i,children:e.jsxs("div",{className:"system-prompt-modal",onClick:u=>u.stopPropagation(),onKeyDown:$,children:[e.jsxs("div",{className:"modal-header",children:[e.jsx("h2",{children:n("config:systemPrompt.title")}),e.jsx("button",{className:"modal-close",onClick:i,"aria-label":"Close",children:e.jsx(I,{name:"close",size:16})})]}),e.jsx("div",{className:"modal-body",children:a?e.jsxs("div",{className:"loading-state",children:[e.jsx("div",{className:"spinner"}),e.jsx("p",{children:"Loading system prompt..."})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"modal-description",children:n("config:systemPrompt.description")}),A&&e.jsxs("div",{className:"alert alert-error",children:[e.jsx("span",{className:"alert-icon",children:e.jsx(I,{name:"warn",size:14})}),A]}),w&&e.jsxs("div",{className:"alert alert-success",children:[e.jsx("span",{className:"alert-icon",children:e.jsx(I,{name:"check",size:14})}),w]}),e.jsxs("div",{className:"editor-wrapper",children:[e.jsxs("div",{className:"editor-header",children:[e.jsx("label",{htmlFor:"prompt-input",className:"editor-label",children:n("config:systemPrompt.editPrompt")}),e.jsxs("span",{className:"char-count",children:[o.length," ",n("config:systemPrompt.characters")]})]}),e.jsx("textarea",{id:"prompt-input",className:"prompt-editor",value:o,onChange:S,placeholder:n("config:systemPrompt.placeholder"),rows:18,autoFocus:!0}),e.jsx("div",{className:"editor-hint",children:n("config:systemPrompt.hint")})]})]})}),e.jsxs("div",{className:"modal-footer",children:[e.jsx("div",{className:"footer-buttons-left",children:e.jsx("button",{className:"btn btn-danger",onClick:P,disabled:!o||a,children:n("config:systemPrompt.clear")})}),e.jsxs("div",{className:"footer-buttons-right",children:[e.jsx("button",{className:"btn btn-secondary",onClick:i,children:"Close"}),e.jsx("button",{className:"btn btn-secondary",onClick:D,disabled:!g||a,children:n("config:systemPrompt.reset")}),e.jsx("button",{className:"btn btn-primary",onClick:x,disabled:!g||a,children:n("config:systemPrompt.save")})]})]})]})})}):null}const Ls=[{value:"auto",label:"Auto",icon:"🕐"},{value:"dawn",label:"Dawn",icon:"🌅"},{value:"day",label:"Day",icon:"☀️"},{value:"dusk",label:"Dusk",icon:"🌇"},{value:"night",label:"Night",icon:"🌙"}],Fs=[{value:"none",label:"Grass",icon:"🌱"},{value:"concrete",label:"Concrete",icon:"🏗️"},{value:"galactic",label:"Galactic",icon:"🌌"},{value:"metal",label:"Metal",icon:"⚙️"},{value:"hex",label:"Hex",icon:"⬡"},{value:"circuit",label:"Circuit",icon:"🔌"},{value:"pokemon-stadium",label:"Pokemon",icon:"🔴"}],$s=[{value:"static",label:"Static",icon:"🧍"},{value:"idle",label:"Idle",icon:"🚶"},{value:"walk",label:"Walk",icon:"🚶‍♂️"},{value:"sprint",label:"Sprint",icon:"🏃"},{value:"jump",label:"Jump",icon:"⬆️"},{value:"fall",label:"Fall",icon:"⬇️"},{value:"crouch",label:"Crouch",icon:"🧎"},{value:"sit",label:"Sit",icon:"🪑"},{value:"die",label:"Die",icon:"💀"},{value:"emote-yes",label:"Yes",icon:"👍"},{value:"emote-no",label:"No",icon:"👎"}],zs=[{value:"normal",label:"Normal",icon:"🎨"},{value:"bw",label:"B&W",icon:"⬛"},{value:"sepia",label:"Sepia",icon:"🟤"},{value:"cool",label:"Cool",icon:"❄️"},{value:"warm",label:"Warm",icon:"🔥"},{value:"neon",label:"Neon",icon:"💜"}],Os=[{key:"showTrees",icon:"🌳",label:"Trees"},{key:"showBushes",icon:"🌿",label:"Bushes"},{key:"showHouse",icon:"🏠",label:"House"},{key:"showLamps",icon:"💡",label:"Lamps"},{key:"showGrass",icon:"🟩",label:"Grass"},{key:"showClouds",icon:"☁️",label:"Clouds"}],_s=[{value:null,label:"Auto",color:"linear-gradient(135deg, #4a90d9 0%, #0a1a2a 100%)"},{value:"#4a90d9",label:"Day Blue",color:"#4a90d9"},{value:"#0a1a2a",label:"Night",color:"#0a1a2a"},{value:"#ff6b35",label:"Sunset",color:"#ff6b35"},{value:"#1a0a2e",label:"Purple",color:"#1a0a2e"},{value:"#2d5a27",label:"Matrix",color:"#2d5a27"},{value:"#8b0000",label:"Blood",color:"#8b0000"},{value:"#000000",label:"Void",color:"#000000"}],Bs={showTrees:"trees",showBushes:"bushes",showHouse:"house",showLamps:"lamps",showGrass:"grass",showClouds:"clouds"},Ds={none:"grass","pokemon-stadium":"pokemon"},Rs={"emote-yes":"yes","emote-no":"no"},Us={"":"auto","#4a90d9":"dayBlue","#0a1a2a":"night","#ff6b35":"sunset","#1a0a2e":"purple","#2d5a27":"matrix","#8b0000":"blood","#000000":"void"};function U({checked:s,onChange:i}){return e.jsxs("label",{className:"config-toggle",children:[e.jsx("input",{type:"checkbox",className:"config-toggle-input",checked:s,onChange:n=>i(n.target.checked)}),e.jsx("span",{className:"config-toggle-track",children:e.jsx("span",{className:"config-toggle-thumb"})})]})}function se({options:s,value:i,onChange:n,iconOnly:o=!1}){return e.jsx("div",{className:"chip-selector",children:s.map(r=>e.jsxs("button",{className:`chip ${i===r.value?"active":""}`,onClick:()=>n(r.value),title:r.label,children:[e.jsx("span",{className:"chip-icon",children:r.icon}),!o&&e.jsx("span",{className:"chip-label",children:r.label})]},r.value))})}function N({text:s,query:i}){if(!i.trim())return e.jsx(e.Fragment,{children:s});const n=s.toLowerCase(),o=i.toLowerCase(),r=n.indexOf(o);if(r===-1)return e.jsx(e.Fragment,{children:s});const p=s.slice(0,r),l=s.slice(r,r+i.length),a=s.slice(r+i.length);return e.jsxs(e.Fragment,{children:[p,e.jsx("mark",{className:"search-highlight",children:l}),a]})}const Vs=[{id:"general",title:"General",keywords:["history","hide costs","grid","fps","power saving","performance","limit","editor","external editor","language","idioma","语言","vibration","haptic","intensity","tab title","tmux","process persistence"]},{id:"agentNames",title:"Agent Names",keywords:["agent","names","custom","characters","rename"]},{id:"defaultClass",title:"Default Spawn Class",keywords:["default","class","spawn","agent","scout","builder","random"]},{id:"appearance",title:"Appearance",keywords:["theme","appearance","color","dark","light","style","look"]},{id:"connection",title:"Connection",keywords:["backend","url","auth","token","reconnect","server","api","connect","codex","opencode","binary","path"]},{id:"scene",title:"Scene",keywords:["character","size","indicator","scale","time","dawn","day","dusk","night","auto"]},{id:"terrain",title:"Terrain",keywords:["trees","bushes","house","lamps","grass","clouds","fog","brightness","floor","sky","color","environment","battlefield","size","grid","simple","minimal","dark","clean"]},{id:"modelStyle",title:"Agent Model Style",keywords:["saturation","roughness","metalness","glow","emissive","reflections","wireframe","color mode","material","shader"]},{id:"animations",title:"Animations",keywords:["idle","working","animation","walk","run","sprint","jump","sit","crouch"]},{id:"secrets",title:"Secrets",keywords:["secrets","api","key","password","credentials","env","environment"]},{id:"systemPrompt",title:"System Prompt",keywords:["system","prompt","global","instructions","ai","agent","rules","guidelines"]},{id:"data",title:"Data",keywords:["export","import","backup","restore","save","load","json"]},{id:"integrations",title:"Integrations",keywords:["integrations","plugins","gmail","slack","jira","calendar","docx","email","config","setup"]},{id:"workflows",title:"Workflows",keywords:["workflow","automation","state machine","editor","actions","transitions","pipeline"]},{id:"triggers",title:"Triggers",keywords:["trigger","event","webhook","cron","slack","email","jira","matching","fire"]},{id:"monitoring",title:"Monitoring",keywords:["monitoring","logs","triggers","events","history","workflow","traces","audit","timeline"]},{id:"experimental",title:"Experimental",keywords:["experimental","2d","view","voice","assistant","speech","tts","text to speech","echo","prompt","duplicate"]},{id:"about",title:"About",keywords:["about","version","update","credits","github","releases"]}],ue=[{value:"auto",label:"Auto",icon:"🌐"},{value:"en",label:"English",icon:"🇺🇸"},{value:"zh-CN",label:"中文",icon:"🇨🇳"},{value:"es",label:"Español",icon:"🇪🇸"},{value:"hi",label:"हिन्दी",icon:"🇮🇳"},{value:"pt",label:"Português",icon:"🇧🇷"},{value:"ru",label:"Русский",icon:"🇷🇺"},{value:"ja",label:"日本語",icon:"🇯🇵"},{value:"de",label:"Deutsch",icon:"🇩🇪"},{value:"fr",label:"Français",icon:"🇫🇷"},{value:"it",label:"Italiano",icon:"🇮🇹"}];function qs({config:s,onChange:i,searchQuery:n="",onOpenIntegrationsModal:o,onOpenMonitoringModal:r,onOpenWorkflowEditor:p,onOpenTriggerManager:l}){var ve;const{t:a}=K(["config","common"]),h=ge(),A=Ge(),[y,w]=m.useState(()=>He(ne.DEFAULT_AGENT_CLASS)||"scout"),[d,g]=m.useState(h.settings.historyLimit),[c,C]=m.useState(()=>We()),[S,x]=m.useState(!1),[P,D]=m.useState(()=>R()),[$,u]=m.useState(!1),[k,te]=m.useState(!1),[H,Z]=m.useState(""),[ae,X]=m.useState(!1),[Q,ee]=m.useState(""),[W,b]=m.useState(!1);m.useEffect(()=>{js().then(ee).catch(()=>{})},[]),m.useEffect(()=>{xs().then(t=>{t!==h.settings.experimentalEchoPrompt&&v.updateSettings({experimentalEchoPrompt:t})}).catch(()=>{})},[]),m.useEffect(()=>{Ns().then(t=>{t!==h.settings.tmuxMode&&v.updateSettings({tmuxMode:t})}).catch(()=>{})},[]),m.useEffect(()=>Ye(t=>{C(t),x(!1)}),[]);const T=Ls.map(t=>({...t,label:a(`config:time.${t.value}`)})),B=Fs.map(t=>({...t,label:a(`config:floor.${Ds[t.value]||t.value}`)})),f=$s.map(t=>({...t,label:a(`config:animation.${Rs[t.value]||t.value}`)})),E=zs.map(t=>({...t,label:a(`config:colorMode.${t.value}`)})),L=Os.map(t=>({...t,label:a(`config:terrain.${Bs[t.key]}`)})),M=_s.map(t=>({...t,label:a(`config:sky.${Us[t.value??""]}`)})),V=n.trim()?Vs.filter(t=>{const O=n.toLowerCase();return t.title.toLowerCase().includes(O)||t.keywords.some(ce=>ce.toLowerCase().includes(O))}).map(t=>t.id):null,j=t=>V?V.includes(t):!0,_=h.settings.customAgentNames||[],le=_.length>0?_:Je,pe=()=>{const t=H.trim();t&&!_.includes(t)&&(v.updateSettings({customAgentNames:[..._,t]}),Z(""))},Te=t=>{v.updateSettings({customAgentNames:_.filter(O=>O!==t)})},Ee=()=>{v.updateSettings({customAgentNames:[]})},Ie=t=>{C(t),x(!0)},fe=()=>{Xe(c),x(!1),me()},Pe=t=>{D(t),u(!0)},xe=()=>{ie(ne.AUTH_TOKEN,P),u(!1),me()},Le=t=>{ee(t),b(!0)},be=()=>{vs(Q).catch(()=>{}),b(!1)},Y=t=>{i({...s,terrain:{...s.terrain,...t}})},J=t=>{i({...s,modelStyle:{...s.modelStyle,...t}})},je=t=>{i({...s,animations:{...s.animations,...t}})},Fe=t=>{g(t),v.updateSettings({historyLimit:t})},$e=t=>{const O=s.terrain[t];typeof O=="boolean"&&Y({[t]:!O})},z=n.trim().length>0;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"config-section",children:[V&&V.length===0&&e.jsx("div",{className:"config-no-results",children:a("config:noResults",{query:n})}),j("general")&&e.jsxs(F,{title:a("config:sections.general"),storageKey:"general",defaultOpen:!0,forceOpen:z&&j("general"),children:[e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.history"),query:n})}),e.jsx("input",{type:"number",className:"config-input config-input-sm",value:d,onChange:t=>Fe(parseInt(t.target.value)||100),min:50,max:2e3,step:50})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.hideCosts"),query:n})}),e.jsx(U,{checked:h.settings.hideCost,onChange:t=>v.updateSettings({hideCost:t})})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.grid"),query:n})}),e.jsx(U,{checked:s.gridVisible,onChange:t=>i({...s,gridVisible:t})})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.showFPS"),query:n})}),e.jsx(U,{checked:h.settings.showFPS,onChange:t=>v.updateSettings({showFPS:t})})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.fpsLimit"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0",max:"120",step:"10",value:s.fpsLimit,onChange:t=>i({...s,fpsLimit:parseInt(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.fpsLimit===0?"∞":s.fpsLimit})]}),e.jsxs("div",{className:"config-row",children:[e.jsxs("span",{className:"config-label",title:"Experimental: Reduce FPS when idle to save power",children:[e.jsx(N,{text:a("config:general.powerSaving"),query:n})," ",e.jsx(I,{name:"bolt",size:12})]}),e.jsx(U,{checked:h.settings.powerSaving,onChange:t=>v.updateSettings({powerSaving:t})})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",title:"Wrap agent processes in tmux sessions so they survive server restarts (requires tmux installed)",children:e.jsx(N,{text:a("config:general.tmuxMode"),query:n})}),e.jsx(U,{checked:h.settings.tmuxMode,onChange:async t=>{v.updateSettings({tmuxMode:t});try{await ys(t)}catch(O){console.error("Failed to sync tmux mode setting to server:",O)}}})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.vibrationIntensity"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0",max:"5",step:"1",value:h.settings.vibrationIntensity,onChange:t=>v.updateSettings({vibrationIntensity:parseInt(t.target.value)})}),e.jsx("span",{className:"config-value",children:h.settings.vibrationIntensity===0?a("config:vibrationValues.off"):h.settings.vibrationIntensity===1?a("config:vibrationValues.ultraLight"):h.settings.vibrationIntensity===2?a("config:vibrationValues.veryLight"):h.settings.vibrationIntensity===3?a("config:vibrationValues.light"):h.settings.vibrationIntensity===4?a("config:vibrationValues.medium"):a("config:vibrationValues.heavy")})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.externalEditor"),query:n})}),e.jsx("input",{type:"text",className:"config-input",placeholder:a("config:general.externalEditorPlaceholder"),value:h.settings.externalEditorCommand||"",onChange:t=>v.updateSettings({externalEditorCommand:t.target.value})})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.tabTitle"),query:n})}),e.jsx("input",{type:"text",className:"config-input",placeholder:a("config:general.tabTitlePlaceholder"),value:h.settings.tabTitle||"",onChange:t=>v.updateSettings({tabTitle:t.target.value})})]}),e.jsxs("div",{className:"config-group",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:general.language"),query:n})}),e.jsx(se,{options:ue,value:localStorage.getItem("tide-commander-language-mode")==="manual"?((ve=ue.find(t=>t.value!=="auto"&&de.language.startsWith(t.value.split("-")[0])))==null?void 0:ve.value)||"en":"auto",onChange:t=>{var O;if(t==="auto"){localStorage.setItem("tide-commander-language-mode","auto");const ce=navigator.language,ze=((O=ue.find(Ne=>Ne.value!=="auto"&&ce.startsWith(Ne.value.split("-")[0])))==null?void 0:O.value)||"en";de.changeLanguage(ze)}else localStorage.setItem("tide-commander-language-mode","manual"),de.changeLanguage(t)}})]})]}),j("agentNames")&&e.jsx(F,{title:a("config:sections.agentNames"),storageKey:"agentNames",defaultOpen:!1,forceOpen:z&&j("agentNames"),children:e.jsxs("div",{className:"agent-names-section",children:[e.jsx("span",{className:"config-hint",children:_.length>0?a("config:agentNames.customConfigured",{count:_.length}):a("config:agentNames.usingDefaults")}),e.jsxs("div",{className:"agent-names-input-row",children:[e.jsx("input",{type:"text",className:"config-input config-input-full",placeholder:a("config:agentNames.addPlaceholder"),value:H,onChange:t=>Z(t.target.value),onKeyDown:t=>{t.key==="Enter"&&pe()}}),e.jsx("button",{className:"config-btn config-btn-sm",onClick:pe,disabled:!H.trim(),title:a("config:agentNames.addName"),children:"+"})]}),e.jsx("div",{className:"agent-names-list",children:le.map((t,O)=>e.jsxs("div",{className:"agent-name-chip",children:[e.jsx("span",{className:"agent-name-text",children:t}),_.length>0&&e.jsx("button",{className:"agent-name-remove",onClick:()=>Te(t),title:a("common:buttons.remove"),children:"x"})]},`${t}-${O}`))}),_.length>0&&e.jsx("button",{className:"config-btn config-btn-link",onClick:Ee,children:a("common:buttons.resetToDefaults")})]})}),j("defaultClass")&&e.jsx(F,{title:"Default Spawn Class",storageKey:"defaultClass",defaultOpen:!1,forceOpen:z&&j("defaultClass"),children:e.jsxs("div",{className:"config-row config-row-stacked",children:[e.jsx("span",{className:"config-hint",children:'Class pre-selected when the spawn modal opens. "Random" picks a different class each time.'}),e.jsxs("div",{className:"agent-names-list",style:{flexWrap:"wrap",gap:"6px",marginTop:"8px"},children:[e.jsx("div",{className:`agent-name-chip${y==="random"?" agent-name-chip--selected":""}`,style:{cursor:"pointer",userSelect:"none"},onClick:()=>{w("random"),ie(ne.DEFAULT_AGENT_CLASS,"random")},children:e.jsx("span",{className:"agent-name-text",children:"🎲 Random"})}),Object.entries(Ze).map(([t,O])=>e.jsx("div",{className:`agent-name-chip${y===t?" agent-name-chip--selected":""}`,style:{cursor:"pointer",userSelect:"none"},onClick:()=>{w(t),ie(ne.DEFAULT_AGENT_CLASS,t)},children:e.jsxs("span",{className:"agent-name-text",children:[O.icon," ",t.charAt(0).toUpperCase()+t.slice(1)]})},t)),A.map(t=>e.jsx("div",{className:`agent-name-chip${y===t.id?" agent-name-chip--selected":""}`,style:{cursor:"pointer",userSelect:"none"},onClick:()=>{w(t.id),ie(ne.DEFAULT_AGENT_CLASS,t.id)},children:e.jsxs("span",{className:"agent-name-text",children:[t.icon," ",t.name]})},t.id))]})]})}),j("appearance")&&e.jsx(F,{title:a("config:sections.appearance"),storageKey:"appearance",defaultOpen:!1,forceOpen:z&&j("appearance"),children:e.jsx(As,{})}),j("connection")&&e.jsxs(F,{title:a("config:sections.connection"),storageKey:"connection",defaultOpen:!1,forceOpen:z&&j("connection"),children:[e.jsxs("div",{className:"config-row config-row-stacked",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:connection.backendUrl"),query:n})}),e.jsxs("div",{className:"config-input-group",children:[e.jsx("input",{type:"text",className:"config-input config-input-full",value:c,onChange:t=>Ie(t.target.value),placeholder:"http://localhost:5174",onKeyDown:t=>{t.key==="Enter"&&S&&fe()}}),S&&e.jsx("button",{className:"config-btn config-btn-sm",onClick:fe,title:a("config:connection.saveAndReconnect"),children:a("common:buttons.apply")})]}),e.jsx("span",{className:"config-hint",children:a("config:connection.autoDetectHint")})]}),e.jsxs("div",{className:"config-row config-row-stacked",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:connection.authToken"),query:n})}),e.jsxs("div",{className:"config-input-group",children:[e.jsx("input",{type:k?"text":"password",className:"config-input config-input-full",value:P,onChange:t=>Pe(t.target.value),placeholder:a("config:connection.tokenPlaceholder"),onKeyDown:t=>{t.key==="Enter"&&$&&xe()}}),e.jsx("button",{className:"config-btn config-btn-sm",onClick:()=>te(!k),title:a(k?"config:connection.hideToken":"config:connection.showToken"),children:e.jsx(I,{name:k?"eye-closed":"eye",size:14})}),$&&e.jsx("button",{className:"config-btn config-btn-sm",onClick:xe,title:a("config:connection.saveAndReconnect"),children:a("common:buttons.apply")})]}),e.jsx("span",{className:"config-hint",children:a("config:connection.tokenRequired")})]}),e.jsxs("div",{className:"config-row config-row-stacked",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:connection.codexBinaryPath"),query:n})}),e.jsxs("div",{className:"config-input-group",children:[e.jsx("input",{type:"text",className:"config-input config-input-full",value:Q,onChange:t=>Le(t.target.value),placeholder:a("config:connection.codexBinaryPathPlaceholder"),onKeyDown:t=>{t.key==="Enter"&&W&&be()}}),W&&e.jsx("button",{className:"config-btn config-btn-sm",onClick:be,children:a("common:buttons.apply")})]}),e.jsx("span",{className:"config-hint",children:a("config:connection.codexBinaryPathHint")})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("common:buttons.reconnect"),query:n})}),e.jsx("button",{className:"config-btn",onClick:()=>me(),title:"Force reconnect to server",children:a("common:buttons.reconnect")})]})]}),j("scene")&&e.jsxs(F,{title:a("config:sections.scene"),storageKey:"scene",defaultOpen:!1,forceOpen:z&&j("scene"),children:[e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:scene.characterSize"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0.3",max:"3.0",step:"0.1",value:s.characterScale,onChange:t=>i({...s,characterScale:parseFloat(t.target.value)})}),e.jsxs("span",{className:"config-value",children:[s.characterScale.toFixed(1),"x"]})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:scene.scale2d",{defaultValue:"2D Scale"}),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0.3",max:"2.0",step:"0.1",value:s.scale2d,onChange:t=>i({...s,scale2d:parseFloat(t.target.value)})}),e.jsxs("span",{className:"config-value",children:[s.scale2d.toFixed(1),"x"]})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:scene.scale3d",{defaultValue:"3D Scale"}),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0.3",max:"2.0",step:"0.1",value:s.scale3d,onChange:t=>i({...s,scale3d:parseFloat(t.target.value)})}),e.jsxs("span",{className:"config-value",children:[s.scale3d.toFixed(1),"x"]})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:scene.show2DTaskLabels",{defaultValue:"Show 2D task labels"}),query:n})}),e.jsx(U,{checked:s.show2DTaskLabels,onChange:t=>i({...s,show2DTaskLabels:t})})]}),e.jsxs("div",{className:"config-group",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:scene.time"),query:n})}),e.jsx(se,{options:T,value:s.timeMode,onChange:t=>i({...s,timeMode:t}),iconOnly:!0})]})]}),j("terrain")&&e.jsxs(F,{title:a("config:sections.terrain"),storageKey:"terrain",defaultOpen:!1,forceOpen:z&&j("terrain"),children:[e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:terrainSettings.simpleMode",{defaultValue:"Simple Mode"}),query:n})}),e.jsx(U,{checked:s.terrain.simpleMode??!1,onChange:t=>Y({simpleMode:t})})]}),e.jsx("div",{className:"terrain-icons",style:{opacity:s.terrain.simpleMode?.4:1,pointerEvents:s.terrain.simpleMode?"none":"auto"},children:L.map(t=>e.jsx("button",{className:`terrain-icon-btn ${s.terrain[t.key]?"active":""}`,onClick:()=>$e(t.key),title:t.label,children:t.icon},t.key))}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:terrainSettings.fog"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0",max:"2",step:"0.1",value:s.terrain.fogDensity,onChange:t=>Y({fogDensity:parseFloat(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.terrain.fogDensity===0?a("config:fogValues.off"):s.terrain.fogDensity<=1?a("config:fogValues.low"):a("config:fogValues.high")})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:terrainSettings.brightness"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0.2",max:"2",step:"0.1",value:s.terrain.brightness,onChange:t=>Y({brightness:parseFloat(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.terrain.brightness<=.5?a("config:brightnessValues.dark"):s.terrain.brightness<=1.2?a("config:brightnessValues.normal"):a("config:brightnessValues.bright")})]}),e.jsxs("div",{className:"config-group",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:terrainSettings.floor"),query:n})}),e.jsx(se,{options:B,value:s.terrain.floorStyle,onChange:t=>Y({floorStyle:t}),iconOnly:!0})]}),e.jsxs("div",{className:"config-group",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:terrainSettings.sky"),query:n})}),e.jsx("div",{className:"sky-color-selector",children:M.map(t=>e.jsx("button",{className:`sky-color-btn ${s.terrain.skyColor===t.value?"active":""}`,onClick:()=>Y({skyColor:t.value}),title:t.label,style:{background:t.color}},t.value??"auto"))})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:terrainSettings.battlefieldSize"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"30",max:"200",step:"10",value:s.terrain.battlefieldSize,onChange:t=>Y({battlefieldSize:parseInt(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.terrain.battlefieldSize})]})]}),j("modelStyle")&&e.jsxs(F,{title:a("config:sections.modelStyle"),storageKey:"modelStyle",defaultOpen:!1,forceOpen:z&&j("modelStyle"),children:[e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:modelStyleSettings.saturation"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0",max:"2",step:"0.1",value:s.modelStyle.saturation,onChange:t=>J({saturation:parseFloat(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.modelStyle.saturation<=.3?a("config:saturationValues.gray"):s.modelStyle.saturation<=1.2?a("config:saturationValues.normal"):a("config:saturationValues.vivid")})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:modelStyleSettings.roughness"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"-1",max:"1",step:"0.1",value:s.modelStyle.roughness,onChange:t=>J({roughness:parseFloat(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.modelStyle.roughness<0?a("config:roughnessValues.auto"):s.modelStyle.roughness<=.3?a("config:roughnessValues.glossy"):s.modelStyle.roughness<=.7?a("config:roughnessValues.normal"):a("config:roughnessValues.matte")})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:modelStyleSettings.metalness"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"-1",max:"1",step:"0.1",value:s.modelStyle.metalness,onChange:t=>J({metalness:parseFloat(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.modelStyle.metalness<0?a("config:metalnessValues.auto"):s.modelStyle.metalness<=.3?a("config:metalnessValues.plastic"):s.modelStyle.metalness<=.7?a("config:metalnessValues.mixed"):a("config:metalnessValues.metal")})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:modelStyleSettings.glow"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"0",max:"1",step:"0.05",value:s.modelStyle.emissiveBoost,onChange:t=>J({emissiveBoost:parseFloat(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.modelStyle.emissiveBoost<=.1?a("config:glowValues.off"):s.modelStyle.emissiveBoost<=.4?a("config:glowValues.low"):s.modelStyle.emissiveBoost<=.7?a("config:glowValues.med"):a("config:glowValues.high")})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:modelStyleSettings.reflections"),query:n})}),e.jsx("input",{type:"range",className:"config-slider",min:"-1",max:"2",step:"0.1",value:s.modelStyle.envMapIntensity,onChange:t=>J({envMapIntensity:parseFloat(t.target.value)})}),e.jsx("span",{className:"config-value",children:s.modelStyle.envMapIntensity<0?a("config:reflectionValues.auto"):s.modelStyle.envMapIntensity<=.3?a("config:reflectionValues.low"):s.modelStyle.envMapIntensity<=1?a("config:reflectionValues.normal"):a("config:reflectionValues.high")})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:modelStyleSettings.wireframe"),query:n})}),e.jsx(U,{checked:s.modelStyle.wireframe,onChange:t=>J({wireframe:t})})]}),e.jsxs("div",{className:"config-group",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:modelStyleSettings.colorMode"),query:n})}),e.jsx(se,{options:E,value:s.modelStyle.colorMode,onChange:t=>J({colorMode:t}),iconOnly:!0})]})]}),j("animations")&&e.jsxs(F,{title:a("config:sections.animations"),storageKey:"animations",defaultOpen:!1,forceOpen:z&&j("animations"),children:[e.jsxs("div",{className:"config-group",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:animationSettings.idle"),query:n})}),e.jsx(se,{options:f,value:s.animations.idleAnimation,onChange:t=>je({idleAnimation:t}),iconOnly:!0})]}),e.jsxs("div",{className:"config-group",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:animationSettings.working"),query:n})}),e.jsx(se,{options:f,value:s.animations.workingAnimation,onChange:t=>je({workingAnimation:t}),iconOnly:!0})]})]}),j("secrets")&&e.jsx(F,{title:a("config:sections.secrets"),storageKey:"secrets",defaultOpen:!1,forceOpen:z&&j("secrets"),children:e.jsx(gs,{})}),j("systemPrompt")&&e.jsx(F,{title:a("config:sections.systemPrompt"),storageKey:"systemPrompt",defaultOpen:!1,forceOpen:z&&j("systemPrompt"),children:e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",children:e.jsx(N,{text:a("config:systemPrompt.title"),query:n})}),e.jsx("button",{className:"config-button",onClick:()=>X(!0),children:a("config:systemPrompt.editPrompt")})]})}),j("data")&&e.jsx(F,{title:a("config:sections.data"),storageKey:"data",defaultOpen:!1,forceOpen:z&&j("data"),children:e.jsx(Cs,{})}),j("integrations")&&e.jsx(F,{title:"Integrations",storageKey:"integrations",defaultOpen:!1,forceOpen:z&&j("integrations"),children:e.jsx(Is,{onOpenModal:t=>o==null?void 0:o(t)})}),j("workflows")&&e.jsxs(F,{title:"Workflows",storageKey:"workflows",defaultOpen:!1,forceOpen:z&&j("workflows"),children:[e.jsx("div",{className:"config-row",children:e.jsx("span",{className:"config-label",children:e.jsx(N,{text:"Create and manage automated workflow pipelines with visual state machine editor",query:n})})}),e.jsx("div",{className:"config-row",children:e.jsx("button",{className:"config-button",onClick:()=>p==null?void 0:p(),children:"Open Workflow Editor"})})]}),j("triggers")&&e.jsxs(F,{title:"Triggers",storageKey:"triggers",defaultOpen:!1,forceOpen:z&&j("triggers"),children:[e.jsx("div",{className:"config-row",children:e.jsx("span",{className:"config-label",children:e.jsx(N,{text:"Create and manage event-driven triggers that fire agents with templates",query:n})})}),e.jsx("div",{className:"config-row",children:e.jsx("button",{className:"config-button",onClick:()=>l==null?void 0:l(),children:"Open Trigger Manager"})})]}),j("monitoring")&&e.jsxs(F,{title:"Monitoring",storageKey:"monitoring",defaultOpen:!1,forceOpen:z&&j("monitoring"),children:[e.jsx("div",{className:"config-row",children:e.jsx("span",{className:"config-label",children:e.jsx(N,{text:"View event logs, trigger history, workflow traces, and system stats",query:n})})}),e.jsx("div",{className:"config-row",children:e.jsx("button",{className:"config-button",onClick:()=>r==null?void 0:r(),children:"Open Monitoring & Logs"})})]}),j("experimental")&&e.jsxs(F,{title:a("config:sections.experimental"),storageKey:"experimental",defaultOpen:!1,forceOpen:z&&j("experimental"),children:[e.jsxs("div",{className:"config-row",children:[e.jsxs("span",{className:"config-label",title:"Lightweight 2D top-down view for better performance",children:[e.jsx(N,{text:a("config:experimental.2dView"),query:n})," ",e.jsx(I,{name:"map",size:12})]}),e.jsx(U,{checked:h.settings.experimental2DView,onChange:t=>v.updateSettings({experimental2DView:t})})]}),e.jsxs("div",{className:"config-row",children:[e.jsxs("span",{className:"config-label",title:"Voice assistant for hands-free agent control",children:[e.jsx(N,{text:a("config:experimental.voiceAssistant"),query:n})," ",e.jsx(I,{name:"microphone",size:12})]}),e.jsx(U,{checked:h.settings.experimentalVoiceAssistant,onChange:t=>v.updateSettings({experimentalVoiceAssistant:t})})]}),e.jsxs("div",{className:"config-row",children:[e.jsxs("span",{className:"config-label",title:"Text-to-speech for reading agent responses",children:[e.jsx(N,{text:a("config:experimental.tts"),query:n})," ",e.jsx(I,{name:"speaker-on",size:12})]}),e.jsx(U,{checked:h.settings.experimentalTTS,onChange:t=>v.updateSettings({experimentalTTS:t})})]}),e.jsxs("div",{className:"config-row",children:[e.jsx("span",{className:"config-label",title:"Duplicate system prompt for improved LLM attention coverage. Increases input token usage.",children:e.jsx(N,{text:a("config:experimental.echoPrompt"),query:n})}),e.jsx(U,{checked:h.settings.experimentalEchoPrompt,onChange:async t=>{v.updateSettings({experimentalEchoPrompt:t});try{await bs(t)}catch(O){console.error("Failed to sync echo prompt setting to server:",O)}}})]}),e.jsx("span",{className:"config-hint",children:a("config:experimental.hint")})]}),j("about")&&e.jsx(F,{title:a("config:sections.about"),storageKey:"about",defaultOpen:!1,forceOpen:z&&j("about"),children:e.jsx(Ts,{})})]}),e.jsx(Ps,{isOpen:ae,onClose:()=>X(!1)})]})}function Hs({onConfigChange:s,onToolChange:i,config:n,isOpen:o,onClose:r,onOpenBuildingModal:p,onOpenAreaExplorer:l,onOpenIntegrationsModal:a,onOpenMonitoringModal:h,onOpenWorkflowEditor:A,onOpenTriggerManager:y}){const{t:w}=K(["config","common"]),d=ge(),g=Array.from(d.areas.values()),c=Array.from(d.buildings.values()),[C,S]=m.useState(""),x=m.useRef(null);if(m.useEffect(()=>{const u=k=>{k.key==="Escape"&&o&&r()};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[o,r]),m.useEffect(()=>{if(o&&x.current){const u=setTimeout(()=>{var k;(k=x.current)==null||k.focus()},50);return()=>clearTimeout(u)}},[o]),!o)return null;const P=u=>{const k=d.activeTool===u?null:u;i(k)},D=u=>{v.selectArea(d.selectedAreaId===u?null:u),i("select")},$=(u,k)=>{u.stopPropagation(),v.deleteArea(k)};return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"toolbox-backdrop",onClick:r}),e.jsxs("aside",{className:"toolbox",children:[e.jsxs("div",{className:"toolbox-header",children:[e.jsx("span",{children:w("config:title")}),e.jsx("button",{className:"toolbox-close-btn",onClick:r,title:w("common:buttons.close"),children:"×"})]}),e.jsxs("div",{className:"toolbox-search",children:[e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("circle",{cx:"11",cy:"11",r:"8"}),e.jsx("path",{d:"M21 21l-4.35-4.35"})]}),e.jsx("input",{ref:x,type:"text",placeholder:w("config:searchPlaceholder"),value:C,onChange:u=>S(u.target.value),className:"toolbox-search-input"}),C&&e.jsx("button",{className:"toolbox-search-clear",onClick:()=>S(""),children:"×"})]}),e.jsxs("div",{className:"toolbox-content",children:[e.jsx("div",{className:"toolbox-section toolbox-section-collapsible",children:e.jsxs(F,{title:w("config:areas.title",{count:g.length}),storageKey:"areas",children:[e.jsxs("div",{className:"tool-buttons",children:[e.jsx("button",{className:`tool-btn ${d.activeTool==="select"?"active":""}`,onClick:()=>P("select"),title:w("config:tools.select"),children:e.jsx("span",{children:e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"})})})}),e.jsx("button",{className:`tool-btn ${d.activeTool==="rectangle"?"active":""}`,onClick:()=>P("rectangle"),title:w("config:tools.rectangle"),children:e.jsx("span",{children:e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"})})})}),e.jsx("button",{className:`tool-btn ${d.activeTool==="circle"?"active":""}`,onClick:()=>P("circle"),title:w("config:tools.circle"),children:e.jsx("span",{children:e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("circle",{cx:"12",cy:"12",r:"9"})})})})]}),e.jsx("div",{className:"areas-list",children:g.length===0?e.jsx("div",{className:"areas-empty",children:w("config:areas.drawToCreate")}):g.map(u=>e.jsx(os,{area:u,isSelected:d.selectedAreaId===u.id,onClick:()=>D(u.id),onDelete:k=>$(k,u.id)},u.id))})]})}),d.selectedAreaId&&e.jsx(us,{area:d.areas.get(d.selectedAreaId),onClose:()=>v.selectArea(null),onOpenFolder:l}),e.jsx("div",{className:"toolbox-section toolbox-section-collapsible",children:e.jsx(F,{title:w("config:buildings.title",{count:c.length}),storageKey:"buildings",headerExtra:e.jsx("button",{className:"add-building-btn",onClick:u=>{u.stopPropagation(),p==null||p()},title:w("config:buildings.addBuilding"),children:"+"}),children:e.jsx("div",{className:"buildings-list",children:c.length===0?e.jsx("div",{className:"buildings-empty",children:w("config:buildings.clickToAdd")}):c.map(u=>e.jsx(is,{building:u,isSelected:d.selectedBuildingIds.has(u.id),onClick:()=>{v.selectBuilding(d.selectedBuildingIds.has(u.id)?null:u.id)},onEdit:()=>p==null?void 0:p(u.id)},u.id))})})}),d.selectedBuildingIds.size===1&&(()=>{const u=Array.from(d.selectedBuildingIds)[0],k=d.buildings.get(u);return k?e.jsx(ls,{building:k,onClose:()=>v.selectBuilding(null),onOpenModal:()=>p==null?void 0:p(u)}):null})(),e.jsx(qs,{config:n,onChange:s,searchQuery:C,onOpenIntegrationsModal:a,onOpenMonitoringModal:h,onOpenWorkflowEditor:A,onOpenTriggerManager:y})]})]})]})}export{Hs as Toolbox};
@@ -1 +1 @@
1
- import{z as ts,u as as,B as vs,C as bs,E as zs,j as s,I as F,G as Is,H as Es,J as $s,K as Ds,L as Ms,r as c,M as Ls,N as Xs,O as Ps,P as Ss,U as Ys,V as Rs,W as Gs,X as Us,Y as ms,Z as _s,s as M,_ as Fs,n as U}from"./main-BNhrjJHj.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const fs=ts.memo(({agent:t,isSelected:A,isKeyboardFocused:L=!1,onSelect:X,onDoubleClick:n,onChat:g,onFocus:h,onKill:w,onDragStart:P})=>{const{t:x}=as(["dashboard","common"]),S=vs().has(t.id),N=bs(t.status),H=zs(t),j=Ms(H),I=t.taskLabel?s.jsxs(s.Fragment,{children:[s.jsx(F,{name:"task",size:12})," ",t.taskLabel]}):t.currentTask||t.lastAssignedTask,m=t.status==="idle"&&t.lastActivity>0,[,Z]=ts.useState(0);return ts.useEffect(()=>{if(!m)return;const b=window.setInterval(()=>Z(J=>J+1),15e3);return()=>window.clearInterval(b)},[m]),s.jsxs("div",{className:`dash-card dash-card--${N} ${A?"dash-card--selected":""} ${L?"dash-card--keyboard-focused":""}`,"data-agent-id":t.id,onClick:X,onDoubleClick:b=>{b.stopPropagation(),n()},onDragStart:b=>{P==null||P(t),b.dataTransfer.effectAllowed="move"},draggable:!0,title:x("cards.doubleClickHint"),children:[s.jsxs("div",{className:"dash-card__row1",children:[s.jsx("span",{className:`dash-card__status-dot dash-card__status-dot--${N}`}),s.jsx("span",{className:"dash-card__name",children:t.name}),s.jsxs("span",{className:"dash-card__class",children:[s.jsx(Is,{agent:t,size:14})," ",t.class]}),s.jsxs("span",{className:`dash-card__provider dash-card__provider--${t.provider}`,children:[s.jsx(F,{name:t.provider==="codex"||t.provider==="opencode"?"status-pending":"robot",size:11,weight:t.provider==="codex"||t.provider==="opencode"?"fill":"regular",color:t.provider==="codex"?"#a16207":t.provider==="opencode"?"#4ade80":void 0})," ",t.provider]}),S&&s.jsx("span",{className:"dash-card__unseen-badge",title:"New output available - click to view",children:"!"})]}),s.jsxs("div",{className:"dash-card__row2",children:[s.jsx("span",{className:`dash-card__status dash-card__status--${N}`,children:S?"Unseen":t.status}),s.jsxs("div",{className:"dash-card__context",children:[s.jsx("div",{className:"dash-card__context-bar",children:s.jsx("div",{className:`dash-card__context-fill dash-card__context-fill--${j}`,style:{width:`${H}%`}})}),s.jsxs("span",{className:`dash-card__context-pct dash-card__context-pct--${j}`,children:[H,"%"]})]})]}),s.jsxs("div",{className:"dash-card__row3",children:[s.jsxs("span",{className:"dash-card__workdir",title:t.cwd,children:[s.jsx(F,{name:"folder",size:11})," ",t.cwd.split("/").pop()||t.cwd]}),m&&s.jsxs("span",{className:"dash-card__idle-time",style:{color:Ds(t.lastActivity)},title:$s(t.lastActivity),children:[s.jsx(F,{name:"status-waiting-input",size:10})," ",Es(t.lastActivity)]})]}),I&&s.jsx("div",{className:"dash-card__row4",children:s.jsx("span",{className:"dash-card__task",children:I})}),s.jsxs("div",{className:"dash-card__actions",children:[g&&s.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--chat",onClick:b=>{b.stopPropagation(),g()},title:x("cards.openTerminal"),children:x("cards.chat")}),w&&s.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--danger",onClick:b=>{b.stopPropagation(),w()},title:x("cards.killAgent"),children:x("cards.stop")})]})]})});fs.displayName="AgentCard";const ws=({buildings:t,onSelectBuilding:A})=>{const{t:L}=as(["dashboard"]),X=c.useMemo(()=>Array.from(t.values()).sort((n,g)=>n.name.localeCompare(g.name)),[t]);return s.jsxs("div",{className:"dashboard-view__buildings",children:[s.jsxs("div",{className:"dashboard-view__buildings-header",children:[s.jsx("span",{className:"dashboard-view__buildings-title",children:L("buildings.title")}),s.jsx("span",{className:"dashboard-view__buildings-count",children:X.length})]}),s.jsx("div",{className:"dashboard-view__buildings-row",children:X.map(n=>{const g=bs(n.status),h=Ls(n.type);return s.jsxs("button",{className:`dash-pill dash-pill--${g}`,onClick:()=>A==null?void 0:A(n.id),title:`${n.name} (${n.type}) - ${n.status}`,children:[s.jsx("span",{className:"dash-pill__icon",children:s.jsx(F,{name:h,size:14})}),s.jsx("span",{className:"dash-pill__name",children:n.name}),s.jsx("span",{className:`dash-pill__dot dash-pill__dot--${g}`})]},n.id)})})]})};ws.displayName="BuildingPills";function Ws({onSelectAgent:t,onFocusAgent:A,onKillAgent:L,onSelectBuilding:X,onOpenTerminal:n,onFocusZone:g}){const{t:h}=as(["dashboard","common"]),w=Xs(),P=Ps(),x=Ss(),rs=Ys(),S=vs(),[N,H]=c.useState(""),[j,I]=c.useState("all"),[m,Z]=c.useState("zone"),[b,J]=c.useState(new Set),[k,T]=c.useState(null),[ps,W]=c.useState(null),[Y,Q]=c.useState(!1),[p,B]=c.useState(null),K=c.useMemo(()=>{const e=Array.from(w.values());return{total:e.length,working:e.filter(i=>i.status==="working"||i.status==="waiting"||i.status==="waiting_permission").length,idle:e.filter(i=>i.status==="idle").length,error:e.filter(i=>i.status==="error"||i.status==="offline"||i.status==="orphaned").length}},[w]),ns=c.useMemo(()=>m==="zone"?Rs(w,x):m==="status"?Gs(w,S):Us(w),[w,x,m,S]),V=c.useMemo(()=>{const e=N.toLowerCase().trim(),i=ns.map(l=>({...l,agents:l.agents.filter(_=>{if(j==="working"){if(_.status!=="working"&&_.status!=="waiting"&&_.status!=="waiting_permission")return!1}else if(j==="error"&&_.status!=="error"&&_.status!=="offline"&&_.status!=="orphaned")return!1;return!(e&&!_.name.toLowerCase().includes(e)&&!_.class.toLowerCase().includes(e))})}));return m==="zone"?i:i.filter(l=>l.agents.length>0)},[ns,j,N,m]),O=c.useCallback(e=>e.area?`area:${e.area.id}`:`${m}:${e.label}`,[m]),C=c.useMemo(()=>{const e=[];return V.forEach(i=>{const l=O(i);if(b.has(l))return;const _=m==="status"?ms(i.agents,{prioritizeRecentlyIdle:!0}):_s(i.agents);e.push(..._)}),e},[V,b,m,O]),gs=c.useCallback(e=>{J(i=>{const l=new Set(i);return l.has(e)?l.delete(e):l.add(e),l})},[]),xs=c.useCallback(e=>{n==null||n(e)},[n]),js=c.useCallback(e=>{T(e)},[]),Ns=c.useCallback((e,i)=>{e.preventDefault(),e.dataTransfer.dropEffect="move",W(i)},[]),ks=c.useCallback(()=>{W(null)},[]),Cs=c.useCallback(e=>{if(!k)return;if(e===null){const E=M.getState(),a=Array.from(E.areas.values()).find(r=>r.assignedAgentIds.includes(k.id));a&&M.unassignAgentFromArea(k.id,a.id),T(null),W(null);return}const i=x.get(e);if(!i)return;const l=Array.from(w.values()),_=Fs(i,l,k.position);M.updateAgent({...k,position:{...k.position,x:_.x,z:_.z}}),M.assignAgentToArea(k.id,e),T(null),W(null)},[k,x,w]);return c.useEffect(()=>{if(C.length===0){Q(!1),B(null);return}Y&&(!p||!C.some(e=>e.id===p))&&(B(C[0].id),t==null||t(C[0].id))},[C,Y,p,t]),c.useEffect(()=>{const e=a=>a instanceof HTMLElement?a.tagName==="INPUT"||a.tagName==="TEXTAREA"||a.tagName==="SELECT"||a.isContentEditable:!1,i=a=>a instanceof HTMLElement?!!a.closest(".guake-terminal")||a.classList.contains("guake-input")||a.classList.contains("agent-panel-input"):!1,l=a=>{const r=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).find(z=>z.dataset.agentId===a);r==null||r.scrollIntoView({block:"nearest",inline:"nearest"})},_=(a,r)=>{var ds,os,cs,ls,us,hs;const z=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).map(d=>{const u=d.dataset.agentId;if(!u)return null;const y=d.getBoundingClientRect();return{id:u,centerX:y.left+y.width/2,centerY:y.top+y.height/2,height:y.height}}).filter(d=>d!==null).sort((d,u)=>d.centerY-u.centerY||d.centerX-u.centerX);if(z.length===0)return a;const ss=z.reduce((d,u)=>d+u.height,0)/z.length,es=Math.max(18,ss*.6),f=[];for(const d of z){const u=f[f.length-1];if(!u){f.push([{id:d.id,centerX:d.centerX,centerY:d.centerY}]);continue}const y=u.reduce((ys,As)=>ys+As.centerY,0)/u.length;Math.abs(d.centerY-y)<=es?u.push({id:d.id,centerX:d.centerX,centerY:d.centerY}):f.push([{id:d.id,centerX:d.centerX,centerY:d.centerY}])}f.forEach(d=>d.sort((u,y)=>u.centerX-y.centerX));const R=f.findIndex(d=>d.some(u=>u.id===a));if(R===-1)return((os=(ds=f[0])==null?void 0:ds[0])==null?void 0:os.id)??a;const $=f[R],v=$.findIndex(d=>d.id===a);if(v===-1)return((ls=(cs=f[0])==null?void 0:cs[0])==null?void 0:ls.id)??a;if(r==="left")return((us=$[Math.max(0,v-1)])==null?void 0:us.id)??a;if(r==="right")return((hs=$[Math.min($.length-1,v+1)])==null?void 0:hs.id)??a;const q=r==="up"?Math.max(0,R-1):Math.min(f.length-1,R+1),o=f[q],G=$[v].centerX;let D=o[0],is=Math.abs(D.centerX-G);for(const d of o){const u=Math.abs(d.centerX-G);u<is&&(D=d,is=u)}return(D==null?void 0:D.id)??a},E=a=>{const r=M.getShortcuts(),z=r.find(o=>o.id==="dashboard-selector-toggle"),ss=r.find(o=>o.id==="dashboard-vim-left"),es=r.find(o=>o.id==="dashboard-vim-down"),f=r.find(o=>o.id==="dashboard-vim-up"),R=r.find(o=>o.id==="dashboard-vim-right"),$=r.find(o=>o.id==="open-terminal"),v=M.getState();if(e(a.target))if(!v.terminalOpen&&i(a.target)&&document.activeElement instanceof HTMLElement)document.activeElement.blur();else return;if(U(a,z)){if(C.length===0)return;a.preventDefault(),a.stopPropagation(),Q(!0),B(o=>{const G=o&&C.some(D=>D.id===o)?o:C[0].id;return t==null||t(G),window.setTimeout(()=>l(G),0),G});return}const q=U(a,ss)||a.key==="ArrowLeft"?"left":U(a,es)||a.key==="ArrowDown"?"down":U(a,f)||a.key==="ArrowUp"?"up":U(a,R)||a.key==="ArrowRight"?"right":null;if(q&&Y&&p){a.preventDefault(),a.stopPropagation();const o=_(p,q);o!==p&&(B(o),t==null||t(o),window.setTimeout(()=>l(o),0));return}if(U(a,$)){if(v.terminalOpen)return;if(Y&&p&&v.agents.has(p)){a.preventDefault(),n==null||n(p);return}if(v.selectedAgentIds.size===1){a.preventDefault();const o=Array.from(v.selectedAgentIds)[0];n==null||n(o);return}if(v.lastSelectedAgentId&&v.agents.has(v.lastSelectedAgentId)){a.preventDefault(),n==null||n(v.lastSelectedAgentId);return}}};return document.addEventListener("keydown",E,!0),()=>document.removeEventListener("keydown",E,!0)},[C,Y,p,n,t]),c.useEffect(()=>{const e=document.activeElement;e instanceof HTMLElement&&e.closest(".guake-terminal")&&!M.getState().terminalOpen&&e.blur()},[]),s.jsxs("div",{className:"dashboard-view",children:[s.jsxs("div",{className:"dashboard-view__topbar",children:[s.jsxs("div",{className:"dashboard-view__metrics",children:[s.jsxs("button",{className:`dashboard-view__metric-btn ${j==="all"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("all"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:K.total}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:labels.agents")})]}),s.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--working ${j==="working"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("working"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:K.working}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.working")})]}),s.jsxs("button",{className:"dashboard-view__metric-btn dashboard-view__metric-btn--idle ",onClick:()=>I("all"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:K.idle}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.idle")})]}),s.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--error ${j==="error"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("error"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:K.error}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.error")})]})]}),s.jsx("input",{className:"dashboard-view__search",type:"text",placeholder:h("searchPlaceholder"),value:N,onChange:e=>H(e.target.value)})]}),s.jsxs("div",{className:"dashboard-view__grouping",children:[s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="zone"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("zone"),children:h("grouping.byZone")}),s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="status"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("status"),children:h("grouping.byStatus")}),s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="activity"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("activity"),children:h("grouping.byActivity")})]}),s.jsxs("div",{className:"dashboard-view__content",children:[V.map(e=>{const i=O(e),l=b.has(i),_=m==="status"?ms(e.agents,{prioritizeRecentlyIdle:!0}):_s(e.agents),E=e.agents.filter(r=>r.status==="working"||r.status==="waiting"||r.status==="waiting_permission").length,a=e.agents.filter(r=>S.has(r.id)).length;return s.jsxs("div",{className:`dashboard-view__zone ${ps===(e.area?e.area.id:null)&&k?"dashboard-view__zone--drag-over":""}`,onDragOver:r=>Ns(r,e.area?e.area.id:null),onDragLeave:ks,onDrop:()=>Cs(e.area?e.area.id:null),children:[s.jsxs("div",{className:"dashboard-view__zone-header",onClick:()=>gs(i),children:[s.jsxs("div",{className:"dashboard-view__zone-left",children:[s.jsx("span",{className:`dashboard-view__zone-chevron ${l?"dashboard-view__zone-chevron--collapsed":""}`,children:s.jsx(F,{name:"caret-down",size:12})}),s.jsx("span",{className:"dashboard-view__zone-dot",style:{backgroundColor:e.color}}),s.jsx("span",{className:"dashboard-view__zone-name",children:e.label}),s.jsxs("span",{className:"dashboard-view__zone-count",children:[h("agentCount",{count:e.agents.length}),E>0&&s.jsxs("span",{className:"dashboard-view__zone-working",children:[" · ",E," ",h("working")]}),a>0&&s.jsxs("span",{className:"dashboard-view__zone-unseen",children:[" · ",a," Unseen"]})]})]}),e.area&&g&&s.jsx("button",{className:"dashboard-view__zone-focus",onClick:r=>{r.stopPropagation(),g(e.area.id)},title:h("focusZone"),children:h("focusZone")})]}),!l&&s.jsx("div",{className:"dashboard-view__zone-grid",children:_.map(r=>s.jsx(fs,{agent:r,isSelected:rs.has(r.id),isKeyboardFocused:Y&&p===r.id,onSelect:()=>{t==null||t(r.id),Q(!0),B(r.id)},onDoubleClick:()=>xs(r.id),onChat:()=>n==null?void 0:n(r.id),onFocus:A?()=>A(r.id):void 0,onKill:L?()=>L(r.id):void 0,onDragStart:js},r.id))})]},i)}),V.length===0&&s.jsx("div",{className:"dashboard-view__empty",children:N?h("noAgentsMatching",{search:N}):h("noAgentsSpawned")}),P.size>0&&s.jsx(ws,{buildings:P,onSelectBuilding:X})]})]})}export{Ws as DashboardView};
1
+ import{z as ts,u as as,B as vs,C as bs,E as zs,j as s,I as F,G as Is,H as Es,J as $s,K as Ds,L as Ms,r as c,M as Ls,N as Xs,O as Ps,P as Ss,U as Ys,V as Rs,W as Gs,X as Us,Y as ms,Z as _s,s as M,_ as Fs,n as U}from"./main-BzSUj-VM.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const fs=ts.memo(({agent:t,isSelected:A,isKeyboardFocused:L=!1,onSelect:X,onDoubleClick:n,onChat:g,onFocus:h,onKill:w,onDragStart:P})=>{const{t:x}=as(["dashboard","common"]),S=vs().has(t.id),N=bs(t.status),H=zs(t),j=Ms(H),I=t.taskLabel?s.jsxs(s.Fragment,{children:[s.jsx(F,{name:"task",size:12})," ",t.taskLabel]}):t.currentTask||t.lastAssignedTask,m=t.status==="idle"&&t.lastActivity>0,[,Z]=ts.useState(0);return ts.useEffect(()=>{if(!m)return;const b=window.setInterval(()=>Z(J=>J+1),15e3);return()=>window.clearInterval(b)},[m]),s.jsxs("div",{className:`dash-card dash-card--${N} ${A?"dash-card--selected":""} ${L?"dash-card--keyboard-focused":""}`,"data-agent-id":t.id,onClick:X,onDoubleClick:b=>{b.stopPropagation(),n()},onDragStart:b=>{P==null||P(t),b.dataTransfer.effectAllowed="move"},draggable:!0,title:x("cards.doubleClickHint"),children:[s.jsxs("div",{className:"dash-card__row1",children:[s.jsx("span",{className:`dash-card__status-dot dash-card__status-dot--${N}`}),s.jsx("span",{className:"dash-card__name",children:t.name}),s.jsxs("span",{className:"dash-card__class",children:[s.jsx(Is,{agent:t,size:14})," ",t.class]}),s.jsxs("span",{className:`dash-card__provider dash-card__provider--${t.provider}`,children:[s.jsx(F,{name:t.provider==="codex"||t.provider==="opencode"?"status-pending":"robot",size:11,weight:t.provider==="codex"||t.provider==="opencode"?"fill":"regular",color:t.provider==="codex"?"#a16207":t.provider==="opencode"?"#4ade80":void 0})," ",t.provider]}),S&&s.jsx("span",{className:"dash-card__unseen-badge",title:"New output available - click to view",children:"!"})]}),s.jsxs("div",{className:"dash-card__row2",children:[s.jsx("span",{className:`dash-card__status dash-card__status--${N}`,children:S?"Unseen":t.status}),s.jsxs("div",{className:"dash-card__context",children:[s.jsx("div",{className:"dash-card__context-bar",children:s.jsx("div",{className:`dash-card__context-fill dash-card__context-fill--${j}`,style:{width:`${H}%`}})}),s.jsxs("span",{className:`dash-card__context-pct dash-card__context-pct--${j}`,children:[H,"%"]})]})]}),s.jsxs("div",{className:"dash-card__row3",children:[s.jsxs("span",{className:"dash-card__workdir",title:t.cwd,children:[s.jsx(F,{name:"folder",size:11})," ",t.cwd.split("/").pop()||t.cwd]}),m&&s.jsxs("span",{className:"dash-card__idle-time",style:{color:Ds(t.lastActivity)},title:$s(t.lastActivity),children:[s.jsx(F,{name:"status-waiting-input",size:10})," ",Es(t.lastActivity)]})]}),I&&s.jsx("div",{className:"dash-card__row4",children:s.jsx("span",{className:"dash-card__task",children:I})}),s.jsxs("div",{className:"dash-card__actions",children:[g&&s.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--chat",onClick:b=>{b.stopPropagation(),g()},title:x("cards.openTerminal"),children:x("cards.chat")}),w&&s.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--danger",onClick:b=>{b.stopPropagation(),w()},title:x("cards.killAgent"),children:x("cards.stop")})]})]})});fs.displayName="AgentCard";const ws=({buildings:t,onSelectBuilding:A})=>{const{t:L}=as(["dashboard"]),X=c.useMemo(()=>Array.from(t.values()).sort((n,g)=>n.name.localeCompare(g.name)),[t]);return s.jsxs("div",{className:"dashboard-view__buildings",children:[s.jsxs("div",{className:"dashboard-view__buildings-header",children:[s.jsx("span",{className:"dashboard-view__buildings-title",children:L("buildings.title")}),s.jsx("span",{className:"dashboard-view__buildings-count",children:X.length})]}),s.jsx("div",{className:"dashboard-view__buildings-row",children:X.map(n=>{const g=bs(n.status),h=Ls(n.type);return s.jsxs("button",{className:`dash-pill dash-pill--${g}`,onClick:()=>A==null?void 0:A(n.id),title:`${n.name} (${n.type}) - ${n.status}`,children:[s.jsx("span",{className:"dash-pill__icon",children:s.jsx(F,{name:h,size:14})}),s.jsx("span",{className:"dash-pill__name",children:n.name}),s.jsx("span",{className:`dash-pill__dot dash-pill__dot--${g}`})]},n.id)})})]})};ws.displayName="BuildingPills";function Ws({onSelectAgent:t,onFocusAgent:A,onKillAgent:L,onSelectBuilding:X,onOpenTerminal:n,onFocusZone:g}){const{t:h}=as(["dashboard","common"]),w=Xs(),P=Ps(),x=Ss(),rs=Ys(),S=vs(),[N,H]=c.useState(""),[j,I]=c.useState("all"),[m,Z]=c.useState("zone"),[b,J]=c.useState(new Set),[k,T]=c.useState(null),[ps,W]=c.useState(null),[Y,Q]=c.useState(!1),[p,B]=c.useState(null),K=c.useMemo(()=>{const e=Array.from(w.values());return{total:e.length,working:e.filter(i=>i.status==="working"||i.status==="waiting"||i.status==="waiting_permission").length,idle:e.filter(i=>i.status==="idle").length,error:e.filter(i=>i.status==="error"||i.status==="offline"||i.status==="orphaned").length}},[w]),ns=c.useMemo(()=>m==="zone"?Rs(w,x):m==="status"?Gs(w,S):Us(w),[w,x,m,S]),V=c.useMemo(()=>{const e=N.toLowerCase().trim(),i=ns.map(l=>({...l,agents:l.agents.filter(_=>{if(j==="working"){if(_.status!=="working"&&_.status!=="waiting"&&_.status!=="waiting_permission")return!1}else if(j==="error"&&_.status!=="error"&&_.status!=="offline"&&_.status!=="orphaned")return!1;return!(e&&!_.name.toLowerCase().includes(e)&&!_.class.toLowerCase().includes(e))})}));return m==="zone"?i:i.filter(l=>l.agents.length>0)},[ns,j,N,m]),O=c.useCallback(e=>e.area?`area:${e.area.id}`:`${m}:${e.label}`,[m]),C=c.useMemo(()=>{const e=[];return V.forEach(i=>{const l=O(i);if(b.has(l))return;const _=m==="status"?ms(i.agents,{prioritizeRecentlyIdle:!0}):_s(i.agents);e.push(..._)}),e},[V,b,m,O]),gs=c.useCallback(e=>{J(i=>{const l=new Set(i);return l.has(e)?l.delete(e):l.add(e),l})},[]),xs=c.useCallback(e=>{n==null||n(e)},[n]),js=c.useCallback(e=>{T(e)},[]),Ns=c.useCallback((e,i)=>{e.preventDefault(),e.dataTransfer.dropEffect="move",W(i)},[]),ks=c.useCallback(()=>{W(null)},[]),Cs=c.useCallback(e=>{if(!k)return;if(e===null){const E=M.getState(),a=Array.from(E.areas.values()).find(r=>r.assignedAgentIds.includes(k.id));a&&M.unassignAgentFromArea(k.id,a.id),T(null),W(null);return}const i=x.get(e);if(!i)return;const l=Array.from(w.values()),_=Fs(i,l,k.position);M.updateAgent({...k,position:{...k.position,x:_.x,z:_.z}}),M.assignAgentToArea(k.id,e),T(null),W(null)},[k,x,w]);return c.useEffect(()=>{if(C.length===0){Q(!1),B(null);return}Y&&(!p||!C.some(e=>e.id===p))&&(B(C[0].id),t==null||t(C[0].id))},[C,Y,p,t]),c.useEffect(()=>{const e=a=>a instanceof HTMLElement?a.tagName==="INPUT"||a.tagName==="TEXTAREA"||a.tagName==="SELECT"||a.isContentEditable:!1,i=a=>a instanceof HTMLElement?!!a.closest(".guake-terminal")||a.classList.contains("guake-input")||a.classList.contains("agent-panel-input"):!1,l=a=>{const r=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).find(z=>z.dataset.agentId===a);r==null||r.scrollIntoView({block:"nearest",inline:"nearest"})},_=(a,r)=>{var ds,os,cs,ls,us,hs;const z=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).map(d=>{const u=d.dataset.agentId;if(!u)return null;const y=d.getBoundingClientRect();return{id:u,centerX:y.left+y.width/2,centerY:y.top+y.height/2,height:y.height}}).filter(d=>d!==null).sort((d,u)=>d.centerY-u.centerY||d.centerX-u.centerX);if(z.length===0)return a;const ss=z.reduce((d,u)=>d+u.height,0)/z.length,es=Math.max(18,ss*.6),f=[];for(const d of z){const u=f[f.length-1];if(!u){f.push([{id:d.id,centerX:d.centerX,centerY:d.centerY}]);continue}const y=u.reduce((ys,As)=>ys+As.centerY,0)/u.length;Math.abs(d.centerY-y)<=es?u.push({id:d.id,centerX:d.centerX,centerY:d.centerY}):f.push([{id:d.id,centerX:d.centerX,centerY:d.centerY}])}f.forEach(d=>d.sort((u,y)=>u.centerX-y.centerX));const R=f.findIndex(d=>d.some(u=>u.id===a));if(R===-1)return((os=(ds=f[0])==null?void 0:ds[0])==null?void 0:os.id)??a;const $=f[R],v=$.findIndex(d=>d.id===a);if(v===-1)return((ls=(cs=f[0])==null?void 0:cs[0])==null?void 0:ls.id)??a;if(r==="left")return((us=$[Math.max(0,v-1)])==null?void 0:us.id)??a;if(r==="right")return((hs=$[Math.min($.length-1,v+1)])==null?void 0:hs.id)??a;const q=r==="up"?Math.max(0,R-1):Math.min(f.length-1,R+1),o=f[q],G=$[v].centerX;let D=o[0],is=Math.abs(D.centerX-G);for(const d of o){const u=Math.abs(d.centerX-G);u<is&&(D=d,is=u)}return(D==null?void 0:D.id)??a},E=a=>{const r=M.getShortcuts(),z=r.find(o=>o.id==="dashboard-selector-toggle"),ss=r.find(o=>o.id==="dashboard-vim-left"),es=r.find(o=>o.id==="dashboard-vim-down"),f=r.find(o=>o.id==="dashboard-vim-up"),R=r.find(o=>o.id==="dashboard-vim-right"),$=r.find(o=>o.id==="open-terminal"),v=M.getState();if(e(a.target))if(!v.terminalOpen&&i(a.target)&&document.activeElement instanceof HTMLElement)document.activeElement.blur();else return;if(U(a,z)){if(C.length===0)return;a.preventDefault(),a.stopPropagation(),Q(!0),B(o=>{const G=o&&C.some(D=>D.id===o)?o:C[0].id;return t==null||t(G),window.setTimeout(()=>l(G),0),G});return}const q=U(a,ss)||a.key==="ArrowLeft"?"left":U(a,es)||a.key==="ArrowDown"?"down":U(a,f)||a.key==="ArrowUp"?"up":U(a,R)||a.key==="ArrowRight"?"right":null;if(q&&Y&&p){a.preventDefault(),a.stopPropagation();const o=_(p,q);o!==p&&(B(o),t==null||t(o),window.setTimeout(()=>l(o),0));return}if(U(a,$)){if(v.terminalOpen)return;if(Y&&p&&v.agents.has(p)){a.preventDefault(),n==null||n(p);return}if(v.selectedAgentIds.size===1){a.preventDefault();const o=Array.from(v.selectedAgentIds)[0];n==null||n(o);return}if(v.lastSelectedAgentId&&v.agents.has(v.lastSelectedAgentId)){a.preventDefault(),n==null||n(v.lastSelectedAgentId);return}}};return document.addEventListener("keydown",E,!0),()=>document.removeEventListener("keydown",E,!0)},[C,Y,p,n,t]),c.useEffect(()=>{const e=document.activeElement;e instanceof HTMLElement&&e.closest(".guake-terminal")&&!M.getState().terminalOpen&&e.blur()},[]),s.jsxs("div",{className:"dashboard-view",children:[s.jsxs("div",{className:"dashboard-view__topbar",children:[s.jsxs("div",{className:"dashboard-view__metrics",children:[s.jsxs("button",{className:`dashboard-view__metric-btn ${j==="all"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("all"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:K.total}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:labels.agents")})]}),s.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--working ${j==="working"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("working"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:K.working}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.working")})]}),s.jsxs("button",{className:"dashboard-view__metric-btn dashboard-view__metric-btn--idle ",onClick:()=>I("all"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:K.idle}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.idle")})]}),s.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--error ${j==="error"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("error"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:K.error}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.error")})]})]}),s.jsx("input",{className:"dashboard-view__search",type:"text",placeholder:h("searchPlaceholder"),value:N,onChange:e=>H(e.target.value)})]}),s.jsxs("div",{className:"dashboard-view__grouping",children:[s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="zone"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("zone"),children:h("grouping.byZone")}),s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="status"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("status"),children:h("grouping.byStatus")}),s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="activity"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("activity"),children:h("grouping.byActivity")})]}),s.jsxs("div",{className:"dashboard-view__content",children:[V.map(e=>{const i=O(e),l=b.has(i),_=m==="status"?ms(e.agents,{prioritizeRecentlyIdle:!0}):_s(e.agents),E=e.agents.filter(r=>r.status==="working"||r.status==="waiting"||r.status==="waiting_permission").length,a=e.agents.filter(r=>S.has(r.id)).length;return s.jsxs("div",{className:`dashboard-view__zone ${ps===(e.area?e.area.id:null)&&k?"dashboard-view__zone--drag-over":""}`,onDragOver:r=>Ns(r,e.area?e.area.id:null),onDragLeave:ks,onDrop:()=>Cs(e.area?e.area.id:null),children:[s.jsxs("div",{className:"dashboard-view__zone-header",onClick:()=>gs(i),children:[s.jsxs("div",{className:"dashboard-view__zone-left",children:[s.jsx("span",{className:`dashboard-view__zone-chevron ${l?"dashboard-view__zone-chevron--collapsed":""}`,children:s.jsx(F,{name:"caret-down",size:12})}),s.jsx("span",{className:"dashboard-view__zone-dot",style:{backgroundColor:e.color}}),s.jsx("span",{className:"dashboard-view__zone-name",children:e.label}),s.jsxs("span",{className:"dashboard-view__zone-count",children:[h("agentCount",{count:e.agents.length}),E>0&&s.jsxs("span",{className:"dashboard-view__zone-working",children:[" · ",E," ",h("working")]}),a>0&&s.jsxs("span",{className:"dashboard-view__zone-unseen",children:[" · ",a," Unseen"]})]})]}),e.area&&g&&s.jsx("button",{className:"dashboard-view__zone-focus",onClick:r=>{r.stopPropagation(),g(e.area.id)},title:h("focusZone"),children:h("focusZone")})]}),!l&&s.jsx("div",{className:"dashboard-view__zone-grid",children:_.map(r=>s.jsx(fs,{agent:r,isSelected:rs.has(r.id),isKeyboardFocused:Y&&p===r.id,onSelect:()=>{t==null||t(r.id),Q(!0),B(r.id)},onDoubleClick:()=>xs(r.id),onChat:()=>n==null?void 0:n(r.id),onFocus:A?()=>A(r.id):void 0,onKill:L?()=>L(r.id):void 0,onDragStart:js},r.id))})]},i)}),V.length===0&&s.jsx("div",{className:"dashboard-view__empty",children:N?h("noAgentsMatching",{search:N}):h("noAgentsSpawned")}),P.size>0&&s.jsx(ws,{buildings:P,onSelectBuilding:X})]})]})}export{Ws as DashboardView};