@turmind/halo 2.0.5 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin-out/404.html +1 -1
- package/admin-out/_next/static/chunks/989-af7e27a2004069ac.js +1 -0
- package/admin-out/_next/static/chunks/app/page-2af2482b39d6ec64.js +1 -0
- package/admin-out/_next/static/chunks/webpack-662d2cae1104f635.js +1 -0
- package/admin-out/index.html +1 -1
- package/admin-out/index.txt +4 -4
- package/bundled-docs/design/canvas-extensions.md +4 -4
- package/bundled-docs/dev/api.md +3 -3
- package/bundled-docs/requirements/chat.md +1 -1
- package/bundled-docs/requirements/editor.md +1 -1
- package/dist/index.js +39 -32
- package/package.json +1 -1
- package/admin-out/_next/static/chunks/989-5c90f88e8111b360.js +0 -1
- package/admin-out/_next/static/chunks/app/page-cb05cd98d8f9042a.js +0 -1
- package/admin-out/_next/static/chunks/webpack-74f577c1b094f942.js +0 -1
- /package/admin-out/_next/static/{F7kFetjUGIXr5T6aTQAtP → sZUQ_5Hh4zzCiFvNd2Aci}/_buildManifest.js +0 -0
- /package/admin-out/_next/static/{F7kFetjUGIXr5T6aTQAtP → sZUQ_5Hh4zzCiFvNd2Aci}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{17119:(e,t,r)=>{"use strict";r.d(t,{kj:()=>n.useT,pZ:()=>a.LanguageSelect,s9:()=>n.useI18n});var n=r(19882);r(38115);var a=r(53804);r(24554)},27173:(e,t,r)=>{"use strict";r.d(t,{SQ:()=>o,Tv:()=>s,_H:()=>l,dj:()=>a});var n=r(54604);let a=["png","jpg","jpeg","gif","webp","svg","bmp","ico","avif"],s=["mp4","webm","ogg","mov","avi","mkv"],l=["mp3","wav","flac","aac","m4a","wma"],o={id:"media",extensions:[...a,...s,...l],Component:(0,n.lazy)(()=>r.e(58).then(r.bind(r,75058)).then(e=>({default:e.MediaPreview})))}},29562:(e,t,r)=>{"use strict";r.d(t,{Ar:()=>h,Uw:()=>x,_r:()=>v,nm:()=>o,y:()=>l});var n=r(54604),a=r(60252),s=r(56207);function l(e,t){return"".concat(null!=e?e:"","/").concat(t)}function o(e,t){let r=s.wG.__getMonacoInstance();if(r)for(let a of t){var n;null==(n=r.editor.getModel(r.Uri.parse(l(e,a))))||n.dispose()}}let i=1;function c(){return"g".concat(i++)}function d(e){let t=e.groups[e.activeGroupIdx];if(!t)return{tabs:[],activeTab:null};let r=[];for(let n of t.tabs){let t=e.buffers[n];t&&r.push(t)}return{tabs:r,activeTab:t.activeTab}}function u(e,t,r,n){let a=e.buffers[r]?e.buffers:{...e.buffers,[r]:n()},s=e.groups[t],l=s.tabs.includes(r)?s.tabs:[...s.tabs,r];return{buffers:a,groups:e.groups.map((e,n)=>n===t?{...e,tabs:l,activeTab:r}:e)}}function m(e,t){let r={...e,children:e.children&&[...e.children]},n=r,a=0;for(let e of t){if(!n.children)break;let t=n.children.findIndex(t=>t.name===e&&"directory"===t.type);if(-1===t)break;let r={...n.children[t]};r.children&&(r.children=[...r.children]),n.children[t]=r,n=r,a++}return{root:r,node:n,depth:a}}function p(){return(0,a.v)((e,t)=>({buffers:{},groups:[{id:c(),tabs:[],activeTab:null}],activeGroupIdx:0,tabs:[],activeTab:null,modelPathPrefix:null,setModelPathPrefix(r){t().modelPathPrefix!==r&&e({modelPathPrefix:r})},pinnedTab:null,pinTab(r,n){let a=r.path,s=t().buffers[a];e(e=>{let t=e.groups.findIndex(e=>e.tabs.includes(a)),s=e.pinnedTab===a&&t>=0?t:e.activeGroupIdx,l=e.groups.map((e,t)=>{var r,l;if(t!==s){if(!e.tabs.includes(a))return e;let t=e.tabs.filter(e=>e!==a),r=e.activeTab===a?null!=(l=t[Math.min(e.tabs.indexOf(a),t.length-1)])?l:null:e.activeTab;return{...e,tabs:t,activeTab:r}}let o=[a,...e.tabs.filter(e=>e!==a)];return{...e,tabs:o,activeTab:n?a:null!=(r=e.activeTab)?r:a}}),o=l.length>1?l.filter(e=>e.tabs.length>0):l,i=o.indexOf(l[s]),c=n||o.length!==l.length?i:e.activeGroupIdx,u={...e.buffers,[a]:r},m=e.modifiedPaths.has(a)?(()=>{let t=new Set(e.modifiedPaths);return t.delete(a),t})():e.modifiedPaths,p={...e,buffers:u,groups:o,activeGroupIdx:c,modifiedPaths:m};return{buffers:u,groups:o,activeGroupIdx:c,modifiedPaths:m,pinnedTab:a,...d(p)}}),s&&!s.preview&&o(t().modelPathPrefix,[a])},unpinTab(){let r=t().pinnedTab;r&&(e({pinnedTab:null}),t().closeTab(r))},fileTree:null,modifiedPaths:new Set,rejectedFile:null,bottomTab:"chat",maximized:"true"===localStorage.getItem("halo_editor_maximized"),bottomFloating:"true"===sessionStorage.getItem("halo_bottom_floating"),bottomMaximized:!1,bottomFloatRect:(()=>{let e=sessionStorage.getItem("halo_bottom_float_rect");if(e)try{return JSON.parse(e)}catch(e){}return{x:Math.max(0,window.innerWidth-480-24),y:Math.max(0,window.innerHeight-640-24),w:480,h:640}})(),selectedText:null,selectedRange:null,contextEnabled:"false"!==localStorage.getItem("halo_context_enabled"),setSelectedText(t,r){e({selectedText:t||null,selectedRange:null!=r?r:null})},setContextEnabled(t){e({contextEnabled:t}),localStorage.setItem("halo_context_enabled",String(t))},openFile(r,n,a,s,l){if(r===t().pinnedTab)return void t().setActiveTab(r);e(e=>{let{buffers:t,groups:o}=u(e,e.activeGroupIdx,r,()=>({path:r,content:n,originalContent:n,language:a,mtime:s,size:null==l?void 0:l.size,createdAt:null==l?void 0:l.createdAt})),i={...e,buffers:t,groups:o};return{buffers:t,groups:o,...d(i)}})},openPreview(r,n,a,s){if(r===t().pinnedTab)return void t().setActiveTab(r);e(e=>{let{buffers:t,groups:l}=u(e,e.activeGroupIdx,r,()=>({path:r,content:"",originalContent:"",language:"",preview:{downloadUrl:n,viewUrl:a,tooLarge:null==s?void 0:s.tooLarge,...(null==s?void 0:s.bundle)?{bundle:!0}:{}},size:null==s?void 0:s.size,mtime:null==s?void 0:s.mtime,createdAt:null==s?void 0:s.createdAt})),o={...e,buffers:t,groups:l};return{buffers:t,groups:l,...d(o)}})},openFileInGroup(r,n,a,s,l,o){if(n===t().pinnedTab)return void t().setActiveTab(n);e(e=>{if(r<0||r>=e.groups.length)return e;let{buffers:t,groups:i}=u(e,r,n,()=>({path:n,content:a,originalContent:a,language:s,mtime:l,size:null==o?void 0:o.size,createdAt:null==o?void 0:o.createdAt})),c={...e,buffers:t,groups:i,activeGroupIdx:r};return{buffers:t,groups:i,activeGroupIdx:r,...d(c)}})},closeTab(r){if(r===t().pinnedTab)return;e(e=>{let t=e.groups.map(e=>{if(!e.tabs.includes(r))return e;let t=e.tabs.filter(e=>e!==r),n=e.activeTab;if(n===r){var a;n=null!=(a=t[Math.min(e.tabs.indexOf(r),t.length-1)])?a:null}return{...e,tabs:t,activeTab:n}}),n=t.some(e=>e.tabs.includes(r)),a=n?e.buffers:(()=>{let{[r]:t,...n}=e.buffers;return n})(),s=n?e.modifiedPaths:(()=>{if(!e.modifiedPaths.has(r))return e.modifiedPaths;let t=new Set(e.modifiedPaths);return t.delete(r),t})(),l=t.length>1&&0===t[1].tabs.length?{groups:[t[0]],activeGroupIdx:0}:{groups:t,activeGroupIdx:Math.min(e.activeGroupIdx,t.length-1)},o={...e,buffers:a,modifiedPaths:s,...l};return{buffers:a,modifiedPaths:s,...l,...d(o)}});let n=t();n.buffers[r]||o(n.modelPathPrefix,[r])},closeTabIn(r,n){if(n===t().pinnedTab)return;e(e=>{if(r<0||r>=e.groups.length)return e;let t=e.groups[r];if(!t.tabs.includes(n))return e;let a=t.tabs.filter(e=>e!==n),s=t.activeTab;if(s===n){var l;s=null!=(l=a[Math.min(t.tabs.indexOf(n),a.length-1)])?l:null}let o=e.groups.map((e,t)=>t===r?{...e,tabs:a,activeTab:s}:e),i=e.activeGroupIdx;o.length>1&&0===o[1].tabs.length&&(o=[o[0]],i=0);let c=o.some(e=>e.tabs.includes(n)),u=c?e.buffers:(()=>{let{[n]:t,...r}=e.buffers;return r})(),m=c?e.modifiedPaths:(()=>{if(!e.modifiedPaths.has(n))return e.modifiedPaths;let t=new Set(e.modifiedPaths);return t.delete(n),t})(),p={...e,groups:o,activeGroupIdx:i,buffers:u,modifiedPaths:m};return{groups:o,activeGroupIdx:i,buffers:u,modifiedPaths:m,...d(p)}});let a=t();a.buffers[n]||o(a.modelPathPrefix,[n])},setActiveTab(t,r){e(e=>{let n=null!=r?r:-1;if(n<0){let r=e.groups[e.activeGroupIdx];n=(null==r?void 0:r.tabs.includes(t))?e.activeGroupIdx:e.groups.findIndex(e=>e.tabs.includes(t))}if(n<0||!e.groups[n].tabs.includes(t))return e;let a=e.groups.map((e,r)=>r===n?{...e,activeTab:t}:e),s=n,l={...e,groups:a,activeGroupIdx:s};return{groups:a,activeGroupIdx:s,...d(l)}})},updateContent(t,r){e(e=>{let n=e.buffers[t];if(!n)return e;let a=r!==n.originalContent,s={...e.buffers,[t]:{...n,content:r,modified:a}},l=new Set(e.modifiedPaths);a?l.add(t):l.delete(t);let o={...e,buffers:s,modifiedPaths:l};return{buffers:s,modifiedPaths:l,...d(o)}})},setActiveGroup(t){e(e=>{if(t<0||t>=e.groups.length||t===e.activeGroupIdx)return e;let r={...e,activeGroupIdx:t};return{activeGroupIdx:t,...d(r)}})},splitToRight(t){e(e=>{var r,n,a,s;if(e.groups.length>=2)return e;let l=null!=(n=null!=t?t:null==(r=e.groups[e.activeGroupIdx])?void 0:r.activeTab)?n:null;if(l&&l===e.pinnedTab&&(l=null!=(s=null==(a=e.groups[e.activeGroupIdx])?void 0:a.tabs.find(t=>t!==e.pinnedTab))?s:null),!l||!e.buffers[l])return e;let o={id:c(),tabs:[l],activeTab:l},i=[e.groups[0],o],u={...e,groups:i,activeGroupIdx:1};return{groups:i,activeGroupIdx:1,...d(u)}})},closeGroup(r){let n=[];e(e=>{if(e.groups.length<=1||r<0||r>=e.groups.length)return e;let t=e.groups.filter((e,t)=>t!==r),a=new Set;for(let e of t)for(let t of e.tabs)a.add(t);let s={};for(let[t,r]of Object.entries(e.buffers))a.has(t)?s[t]=r:n.push(t);let l=new Set;for(let t of e.modifiedPaths)a.has(t)&&l.add(t);let o=Math.max(0,Math.min(e.activeGroupIdx,t.length-1)),i={...e,groups:t,activeGroupIdx:o,buffers:s,modifiedPaths:l};return{groups:t,activeGroupIdx:o,buffers:s,modifiedPaths:l,...d(i)}}),n.length>0&&o(t().modelPathPrefix,n)},moveTabToGroup(t,r,n,a){e(e=>{if(t===n){if(t<0||t>=e.groups.length)return e;let n=e.groups[t],s=n.tabs.indexOf(r);if(s<0)return e;let l=null==a?n.tabs.length-1:Math.max(0,Math.min(a,n.tabs.length-1));if(s===l)return e;let o=function(e,t,r){let n=[...e],[a]=n.splice(t,1);return n.splice(r,0,a),n}(n.tabs,s,l),i=e.groups.map((e,n)=>n===t?{...e,tabs:o,activeTab:r}:e),c={...e,groups:i};return{groups:i,...d(c)}}if(t<0||t>=e.groups.length||n<0||n>e.groups.length)return e;let s=e.groups[t];if(!s.tabs.includes(r))return e;let l=s.tabs.filter(e=>e!==r),o=s.activeTab;if(o===r){var i;o=null!=(i=l[Math.min(s.tabs.indexOf(r),l.length-1)])?i:null}let u=e.groups.slice();if(n===e.groups.length){if(e.groups.length>=2)return e;u[t]={...s,tabs:l,activeTab:o},u.push({id:c(),tabs:[r],activeTab:r})}else{let e=u[n],i=e.tabs.includes(r)?e.tabs:(()=>{let t=[...e.tabs];return null==a||a>=t.length?t.push(r):t.splice(Math.max(0,a),0,r),t})();u[t]={...s,tabs:l,activeTab:o},u[n]={...e,tabs:i,activeTab:r}}let m=n;0===u[t].tabs.length&&u.length>1&&(u=u.filter((e,r)=>r!==t),m=Math.max(0,Math.min(n>t?n-1:n,u.length-1)));let p={...e,groups:u,activeGroupIdx:m};return{groups:u,activeGroupIdx:m,...d(p)}})},setFileTree(t){e({fileTree:t})},setDirChildren(t,r){e(e=>{if(!e.fileTree)return e;let n=t.split("/").filter(Boolean),{root:a,node:s,depth:l}=m(e.fileTree,n);if(l<n.length)return e;let o=[...r].sort((e,t)=>e.type!==t.type?"directory"===e.type?-1:1:e.name.localeCompare(t.name));return s.children=o,s.hasChildren=o.length>0,{fileTree:a}})},markModified(t){e(e=>{let r=e.buffers[t];if(!r)return e;let n=new Set(e.modifiedPaths);n.add(t);let a={...e.buffers,[t]:{...r,modified:!0}},s={...e,buffers:a,modifiedPaths:n};return{buffers:a,modifiedPaths:n,...d(s)}})},clearModified(t){e(e=>{let r=e.buffers[t];if(!r)return e;let n=new Set(e.modifiedPaths);n.delete(t);let a={...e.buffers,[t]:{...r,modified:!1}},s={...e,buffers:a,modifiedPaths:n};return{buffers:a,modifiedPaths:n,...d(s)}})},markSaved(t,r){e(e=>{let n=e.buffers[t];if(!n)return e;let a=new Set(e.modifiedPaths);a.delete(t);let s={...e.buffers,[t]:{...n,originalContent:n.content,modified:!1,mtime:null!=r?r:n.mtime}},l={...e,buffers:s,modifiedPaths:a};return{buffers:s,modifiedPaths:a,...d(l)}})},setRejectedFile(t){e({rejectedFile:t})},setBottomTab(t){e({bottomTab:t})},pendingTerminalCwd:null,requestTerminalSpawn(t){e({pendingTerminalCwd:t})},consumeTerminalSpawn(){let r=t().pendingTerminalCwd;return null!=r&&e({pendingTerminalCwd:null}),r},toggleMaximized(){e(e=>{let t=!e.maximized;return localStorage.setItem("halo_editor_maximized",String(t)),{maximized:t}})},setMaximized(t){localStorage.setItem("halo_editor_maximized",String(t)),e({maximized:t})},setBottomFloating(t){sessionStorage.setItem("halo_bottom_floating",String(t)),e({bottomFloating:t})},setBottomMaximized(t){e({bottomMaximized:t})},setBottomFloatRect(t){sessionStorage.setItem("halo_bottom_float_rect",JSON.stringify(t)),e({bottomFloatRect:t})},insertFileNode(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"file";e(e=>{if(!e.fileTree)return e;let n=t.split("/").filter(Boolean);if(0===n.length)return e;let a=n.slice(0,-1),{root:s,node:l,depth:o}=m(e.fileTree,a);if(o<a.length||void 0===l.children)return void 0===l.children&&!0!==l.hasChildren?(l.hasChildren=!0,{fileTree:s}):e;let i=n[n.length-1];if(l.children.some(e=>e.name===i))return e;let c="directory"===r?{name:i,path:t,type:"directory",hasChildren:!1,children:[]}:{name:i,path:t,type:"file"};return l.children.push(c),l.children.sort((e,t)=>e.type!==t.type?"directory"===e.type?-1:1:e.name.localeCompare(t.name)),{fileTree:s}})},removeFileNode(t){e(e=>{if(!e.fileTree)return e;let r=t.split("/").filter(Boolean);if(0===r.length)return e;let n=r.slice(0,-1),{root:a,node:s,depth:l}=m(e.fileTree,n);if(l<n.length||!s.children)return e;let o=r[r.length-1],i=s.children.findIndex(e=>e.name===o);return -1===i?e:(s.children.splice(i,1),{fileTree:a})})},async checkAndRefresh(r,n,a){let s=t().buffers[r];if(!s||s.preview||s.mtime&&n<=s.mtime||s.modified)return!1;let l=await a();return e(e=>{var t,n;let a=e.buffers[r];if(!a||a.modified)return e;let s={...e.buffers,[r]:{...a,content:l.content,originalContent:l.content,mtime:l.modifiedAt,size:null!=(t=l.size)?t:a.size,createdAt:null!=(n=l.createdAt)?n:a.createdAt}},o={...e,buffers:s};return{buffers:s,...d(o)}}),!0},refreshPreview(t,r,n){e(e=>{let a=e.buffers[t];if(!(null==a?void 0:a.preview)||a.mtime&&r<=a.mtime)return e;let s={...e.buffers,[t]:{...a,mtime:r,size:n}};return{buffers:s,...d({...e,buffers:s})}})}}))}let x=p(),f=(0,n.createContext)(null);function h(e){let{children:t}=e,r=(0,n.useRef)(null);return r.current||(r.current=p()),(0,n.useEffect)(()=>{let e=r.current;return()=>{let t=e.getState();o(t.modelPathPrefix,Object.keys(t.buffers))}},[]),(0,n.createElement)(f.Provider,{value:r.current},t)}function v(){let e=(0,n.useContext)(f);return null!=e?e:x}},37050:(e,t,r)=>{"use strict";r.d(t,{IB:()=>d,NU:()=>i,no:()=>c});var n=r(41440),a=r(54604),s=r(48434),l=r(90302),o=r(17119);let i=(0,a.createContext)(null);function c(e){let{name:t,downloadUrl:r,onOpenAsText:c,extraToolbar:u,loading:m,error:p,hideHeader:x,children:f}=e,h=(0,o.kj)(),v=(0,a.useContext)(i);return(0,n.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,n.jsxs)("div",{className:"flex h-8 shrink-0 items-center gap-2 border-b border-[var(--border)] bg-[var(--card)] px-3".concat(x?" hidden":""),children:[(0,n.jsx)("span",{className:"truncate text-xs text-[var(--muted-foreground)]",children:t}),(0,n.jsx)("div",{className:"flex-1"}),u,v,c&&(0,n.jsxs)(d,{onClick:c,title:h("editor.openAsText"),children:[(0,n.jsx)(s.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:h("editor.openAsText")})]}),r&&(0,n.jsxs)("a",{href:r,download:!0,className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",title:h("editor.download"),children:[(0,n.jsx)(l.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:h("editor.download")})]})]}),(0,n.jsx)("div",{className:"relative min-h-0 flex-1",children:p?(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-red-400",children:p}):(0,n.jsxs)(n.Fragment,{children:[f,m&&(0,n.jsx)("div",{className:"absolute inset-0 flex items-center justify-center bg-[var(--background)]/80 text-sm text-[var(--muted-foreground)]",children:"Loading preview..."})]})})]})}function d(e){let{onClick:t,title:r,children:a}=e;return(0,n.jsx)("button",{onClick:t,title:r,className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:a})}},40909:(e,t,r)=>{"use strict";r.d(t,{$C:()=>l,Z1:()=>o,ZC:()=>i,cn:()=>s,fN:()=>c,fw:()=>d,sQ:()=>m,v7:()=>u});var n=r(59344),a=r(1623);function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.QP)((0,n.$)(t))}function l(){return Math.random().toString(36).substring(2,10)+Date.now().toString(36)}function o(e){return!!e&&!!(e.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(e)||e.startsWith("\\\\"))}function i(e,t){let r=window;return"function"==typeof r.haloPrompt?r.haloPrompt(e,t):Promise.resolve(window.prompt(e,t))}function c(e){let t=window;return"function"==typeof t.haloConfirm?t.haloConfirm(e):Promise.resolve(window.confirm(e))}function d(e,t){let r="number"==typeof e?e:new Date(e).getTime(),n=Math.floor((Date.now()-r)/6e4);if(n<1)return t?t("time.justNow"):"just now";if(n<60)return t?t("time.minutes",{n:n}):"".concat(n,"m ago");let a=Math.floor(n/60);if(a<24)return t?t("time.hours",{n:a}):"".concat(a,"h ago");let s=Math.floor(a/24);return s<30?t?t("time.days",{n:s}):"".concat(s,"d ago"):new Date(r).toLocaleDateString()}function u(e){return e<1024?"".concat(e," B"):e<1048576?"".concat((e/1024).toFixed(1)," KB"):"".concat((e/1048576).toFixed(1)," MB")}function m(e){var t,r,n;return null!=(n=({ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",json:"json",md:"markdown",css:"css",html:"html",yaml:"yaml",yml:"yaml",py:"python",rs:"rust",go:"go",sh:"shell",bash:"shell",sql:"sql",toml:"toml",xml:"xml",svg:"xml",env:"plaintext",gitignore:"plaintext",dockerfile:"dockerfile"})[null!=(r=null==(t=e.split(".").pop())?void 0:t.toLowerCase())?r:""])?n:"plaintext"}},44652:(e,t,r)=>{Promise.resolve().then(r.bind(r,48891))},48891:(e,t,r)=>{"use strict";let n;r.r(t),r.d(t,{default:()=>cJ});var a,s,l=r(41440),o=r(54604),i=r(2877),c=r(17640),d=r(29562),u=r(43672);class m{connect(e){if(!this.ws||this.ws.readyState!==WebSocket.OPEN&&this.ws.readyState!==WebSocket.CONNECTING){this.url=null!=e?e:this.getDefaultUrl(),this.intentionalClose=!1,this.connectStartedAt=Date.now(),this.startLiveness();try{let e=!1;this.ws=new WebSocket(this.url),this.ws.onopen=()=>{for(let t of(e=!0,this.reconnectDelay=1e3,this.lastReceiveTs=Date.now(),this.lastProbeTs=0,this.missedProbes=0,this.pendingQueue))this.ws.send(JSON.stringify(t));for(let[e,t]of(this.pendingQueue=[],this.pendingAcks))this.transmitChat(e,t);this.emit("_connected",{})},this.ws.onmessage=e=>{this.lastReceiveTs=Date.now();try{let t=JSON.parse(e.data),r=t.type;"chat:ack"===r&&this.resolveAck(t.clientMsgId),r&&this.emit(r,t)}catch(e){console.error("[WsClient] Failed to parse message:",e)}},this.ws.onclose=()=>{this.ws=null,this.emit("_disconnected",{}),this.intentionalClose||(e?this.reconnect():this.checkAuthThenReconnect())},this.ws.onerror=e=>{console.error("[WsClient] Error:",e)}}catch(e){console.error("[WsClient] Failed to connect:",e),this.reconnect()}}}disconnect(){for(let e of(this.intentionalClose=!0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.stopLiveness(),this.pendingAcks.values()))e.ackTimer&&clearTimeout(e.ackTimer),clearTimeout(e.deadlineTimer);this.pendingAcks.clear(),this.ws&&(this.ws.close(),this.ws=null)}startLiveness(){this.stopLiveness(),this.livenessTimer=setInterval(()=>{if(!this.ws||this.intentionalClose)return;let e=this.ws.readyState;if(e===WebSocket.CONNECTING){if(Date.now()-this.connectStartedAt>1e4)try{this.ws.close()}catch(e){}return}if(e===WebSocket.CLOSING||e===WebSocket.CLOSED){this.ws=null,this.emit("_disconnected",{}),this.reconnect();return}if(this.lastProbeTs>0&&this.lastReceiveTs<this.lastProbeTs){if(this.missedProbes++,this.missedProbes>=2){try{this.ws.close()}catch(e){}return}}else this.missedProbes=0;try{this.ws.send(JSON.stringify({type:"__ping__"})),this.lastProbeTs=Date.now()}catch(e){try{this.ws.close()}catch(e){}}},15e3)}stopLiveness(){this.livenessTimer&&(clearInterval(this.livenessTimer),this.livenessTimer=null)}send(e){let{type:t,clientMsgId:r}=e;return"chat"===t&&r?void this.sendChat(r,e):this.ws&&this.ws.readyState===WebSocket.OPEN?void this.ws.send(JSON.stringify(e)):"__ping__"===t||"terminal:input"===t||"terminal:resize"===t?void 0:void(this.pendingQueue.length>=100&&this.pendingQueue.shift(),this.pendingQueue.push(e))}sendChat(e,t){if(this.pendingAcks.size>=100){let e=this.pendingAcks.keys().next().value;void 0!==e&&this.failPendingChat(e)}let r={message:t,attempts:0,ackTimer:null,deadlineTimer:setTimeout(()=>this.failPendingChat(e),12e4)};if(this.pendingAcks.set(e,r),this.ws&&this.ws.readyState===WebSocket.OPEN){if(Date.now()-this.lastReceiveTs>3e4){try{this.ws.close()}catch(e){}return}this.transmitChat(e,r)}}transmitChat(e,t){t.ackTimer&&(clearTimeout(t.ackTimer),t.ackTimer=null),t.attempts++;try{this.ws.send(JSON.stringify(t.message))}catch(e){try{var r;null==(r=this.ws)||r.close()}catch(e){}return}t.ackTimer=setTimeout(()=>{if((t.ackTimer=null,this.pendingAcks.has(e))&&!(t.attempts>=3))try{var r;null==(r=this.ws)||r.close()}catch(e){}},5e3)}failPendingChat(e){let t=this.pendingAcks.get(e);t&&(t.ackTimer&&clearTimeout(t.ackTimer),clearTimeout(t.deadlineTimer),this.pendingAcks.delete(e),this.emit("_chat_send_failed",{clientMsgId:e}))}resolveAck(e){if("string"!=typeof e)return;let t=this.pendingAcks.get(e);t&&(t.ackTimer&&clearTimeout(t.ackTimer),clearTimeout(t.deadlineTimer),this.pendingAcks.delete(e))}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>{let r=this.listeners.get(e);r&&(r.delete(t),0===r.size&&this.listeners.delete(e))}}get connected(){var e;return(null==(e=this.ws)?void 0:e.readyState)===WebSocket.OPEN}get lastReceiveAgeMs(){return 0===this.lastReceiveTs?1/0:Date.now()-this.lastReceiveTs}reconnectIfStale(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5e3;if(!this.ws)return void this.connect(this.url);if(0===e&&this.ws.readyState===WebSocket.CONNECTING){try{this.ws.close()}catch(e){}return}if(this.ws.readyState===WebSocket.OPEN&&!(Date.now()-this.lastReceiveTs<e))try{this.ws.close()}catch(e){}}emit(e,t){let r=this.listeners.get(e);r&&r.forEach(r=>{try{r(t)}catch(t){console.error('[WsClient] Error in handler for "'.concat(e,'":'),t)}})}reconnect(){this.reconnectTimer||(this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.reconnectDelay=Math.min(2*this.reconnectDelay,this.maxReconnectDelay),this.connect(this.url)},this.reconnectDelay))}async checkAuthThenReconnect(){try{let e=await fetch("/api/auth/check",{credentials:"include"});if(401===e.status){this.stopLiveness(),this.emit("_auth_expired",{});return}}catch(e){}this.intentionalClose||this.reconnect()}getDefaultUrl(){let e="https:"===window.location.protocol?"wss:":"ws:";return"".concat(e,"//").concat(window.location.host,"/ws")}constructor(){this.ws=null,this.listeners=new Map,this.reconnectTimer=null,this.reconnectDelay=1e3,this.maxReconnectDelay=3e4,this.url="",this.intentionalClose=!1,this.pendingQueue=[],this.pendingAcks=new Map,this.lastReceiveTs=0,this.lastProbeTs=0,this.missedProbes=0,this.connectStartedAt=0,this.livenessTimer=null}}let p=new m;function x(e,t){let r=e.connected;return e.on("_connected",()=>{if(!r){r=!0;return}t()})}function f(e,t){var r,n;return{name:null!=(n=null!=(r=t.root)?r:e.split("/").filter(Boolean).pop())?n:"root",path:"",type:"directory",hasChildren:t.tree.length>0,children:t.tree}}function h(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d.Uw;u.F.files.tree(e).then(r=>{t.getState().setFileTree(f(e,r))}).catch(e=>{console.error("[Explorer] Failed to load file tree:",e)})}async function v(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:d.Uw;try{let n=await u.F.files.tree(e,t);r.getState().setDirChildren(t,n.tree)}catch(e){console.error("[Explorer] Failed to load directory:",t,e)}}var g=r(60252);let b=[".halo/sessions/",".halo/logs/",".halo/halo.db"];function y(e){let t=e.path;return"string"==typeof t&&b.some(e=>t.startsWith(e))}let j={M:{letter:"M",color:"#1B81A8",label:"Modified"},A:{letter:"A",color:"#487E02",label:"Added"},D:{letter:"D",color:"#F48771",label:"Deleted"},R:{letter:"R",color:"#2090D3",label:"Renamed"},C:{letter:"C",color:"#2090D3",label:"Copied"},U:{letter:"C",color:"#E4676B",label:"Conflict"},"?":{letter:"U",color:"#487E02",label:"Untracked"}},w={letter:"?",color:"#487E02",label:"Untracked"};function N(e){var t;return null!=(t=j[e])?t:w}function k(e){return""!==e&&" "!==e&&"?"!==e}function S(e){return""!==e&&" "!==e}let C={files:new Map,dirs:new Map,ignored:new Set},A=(0,g.v)(e=>({byProject:{},repoStatus:{},setForProject:(t,r)=>e(e=>({byProject:{...e.byProject,[t]:r}})),clearProject:t=>e(e=>{if(!e.byProject[t])return e;let r={...e.byProject};return delete r[t],{byProject:r}}),setRepoStatus:(t,r)=>e(e=>e.repoStatus[t]===r?e:{repoStatus:{...e.repoStatus,[t]:r}}),clearRepoStatus:t=>e(e=>{if(!(t in e.repoStatus))return e;let r={...e.repoStatus};return delete r[t],{repoStatus:r}})}));var I=r(40909),E=r(27322),T=r(54810),M=r(93396),F=r(19478),D=r(54718),P=r(70101),L=r(87212),R=r(74262),_=r(58781),z=r(44607),O=r(14909),U=r(34996),B=r(5431),W=r(71311),H=r(60086),K=r(13743),G=r(77470),q=r(2038),$=r(94944),J=r(95342),Z=r(58983),V=r(28963),Y=r(42563),Q=r(60768);let X={ts:R.A,tsx:R.A,mts:R.A,cts:R.A,js:R.A,jsx:R.A,mjs:R.A,cjs:R.A,json:_.A,jsonc:_.A,html:z.A,htm:z.A,svg:z.A,xml:z.A,css:O.A,scss:O.A,sass:O.A,less:O.A,md:U.A,mdx:U.A,txt:U.A,rst:U.A,log:U.A,csv:B.A,tsv:B.A,xlsx:B.A,xls:B.A,sql:W.A,sh:H.A,bash:H.A,zsh:H.A,yaml:K.A,yml:K.A,toml:K.A,ini:K.A,env:K.A,py:G.A,go:q.A,rs:q.A,c:q.A,cpp:q.A,h:q.A,hpp:q.A,java:q.A,kt:q.A,scala:q.A,cs:q.A,swift:q.A,dart:q.A,rb:q.A,php:q.A,lua:q.A,r:q.A,png:$.A,jpg:$.A,jpeg:$.A,gif:$.A,webp:$.A,bmp:$.A,ico:$.A,avif:$.A,mp4:J.A,webm:J.A,mov:J.A,avi:J.A,mkv:J.A,ogg:J.A,mp3:Z.A,wav:Z.A,flac:Z.A,aac:Z.A,m4a:Z.A,wma:Z.A,zip:V.A,tar:V.A,gz:V.A,"7z":V.A,rar:V.A,pdf:Y.A,docx:Y.A,doc:Y.A,pptx:Y.A,ppt:Y.A},ee={ts:"text-blue-400",tsx:"text-blue-400",mts:"text-blue-400",cts:"text-blue-400",js:"text-yellow-400",jsx:"text-yellow-400",mjs:"text-yellow-400",cjs:"text-yellow-400",json:"text-yellow-300",jsonc:"text-yellow-300",html:"text-orange-400",htm:"text-orange-400",css:"text-blue-300",scss:"text-pink-400",sass:"text-pink-400",less:"text-blue-300",md:"text-sky-300",mdx:"text-sky-300",py:"text-green-400",go:"text-cyan-400",rs:"text-orange-400",java:"text-red-400",rb:"text-red-300",php:"text-indigo-300",sh:"text-green-300",bash:"text-green-300",svg:"text-orange-300",xml:"text-orange-300",yaml:"text-red-300",yml:"text-red-300",sql:"text-cyan-300",png:"text-purple-300",jpg:"text-purple-300",jpeg:"text-purple-300",gif:"text-purple-300",webp:"text-purple-300",avif:"text-purple-300",mp4:"text-pink-300",webm:"text-pink-300",mov:"text-pink-300",mp3:"text-emerald-300",wav:"text-emerald-300",flac:"text-emerald-300",pdf:"text-red-400",docx:"text-blue-400",doc:"text-blue-400",pptx:"text-orange-400",ppt:"text-orange-400",zip:"text-amber-400",tar:"text-amber-400",gz:"text-amber-400"};function et(e){var t,r,n,a,s,l;let o=null!=(n=null==(t=e.split(".").pop())?void 0:t.toLowerCase())?n:"",i=null!=(a=null==(r=e.split("/").pop())?void 0:r.toLowerCase())?a:"";return"dockerfile"===i||i.startsWith("dockerfile.")?{Icon:H.A,color:"text-cyan-400"}:".gitignore"===i||".gitattributes"===i?{Icon:K.A,color:"text-[var(--muted-foreground)]"}:".env"===i||i.startsWith(".env.")?{Icon:K.A,color:"text-yellow-300"}:"makefile"===i||"cmake"===i?{Icon:H.A,color:"text-[var(--muted-foreground)]"}:{Icon:null!=(s=X[o])?s:Q.A,color:null!=(l=ee[o])?l:"text-[var(--muted-foreground)]"}}let er=new Map,en={extensions:[],disabled:[],errors:[]},ea=0,es=new Set;function el(){for(let e of(ea++,es))e()}function eo(e){return es.add(e),()=>{es.delete(e)}}function ei(){return ea}function ec(){return(0,o.useSyncExternalStore)(eo,ei,ei)}function ed(e){for(let t of e.extensions)er.set(t.toLowerCase(),e);el()}function eu(e){var t;en={...e,disabled:null!=(t=e.disabled)?t:[]},el()}let em=null;function ep(){if(!em){let e=u.F.extensions.list().then(eu).catch(e=>{console.error("[PreviewRegistry] Failed to load extensions:",e)});em=Promise.race([e,new Promise(t=>{let r=setTimeout(()=>{console.warn("[PreviewRegistry] Extension list not back after ".concat(3e3,"ms, opening files without it")),t()},3e3);e.finally(()=>clearTimeout(r))})])}return em}function ex(){return en}function ef(e){return e.toLowerCase().replace(/^\./,"")}let eh=null;function ev(){var e;return eh?eh:"undefined"==typeof navigator?"web":eh=(e=navigator.userAgent).includes("Electron/")?/Macintosh|Mac OS X/.test(e)?"desktop-mac":e.includes("Windows")?"desktop-win":"desktop-linux":"web"}function eg(e,t){return e.map(e=>t("extensions.platform.".concat(e))).join(t("extensions.platform.sep"))}function eb(e){return!e.platforms||e.platforms.includes(ev())}function ey(e,t,r){return!!e.bundle===r&&e.extensions.includes(".".concat(t))}function ej(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return en.extensions.filter(n=>n.priority===t&&ey(n,e,r)&&eb(n)).sort((e,t)=>t.installedAt-e.installedAt).map(e=>({kind:"extension",info:e}))}function ew(e){let t=ef(e),r=ej(t,"default"),n=er.get(t);return n&&r.push({kind:"builtin",plugin:n}),r.push(...ej(t,"option")),r.push({kind:"text"}),r}function eN(e){let t=ef(e);return[...ej(t,"default",!0),...ej(t,"option",!0),{kind:"text"}]}function ek(e){let t=e.lastIndexOf(".");return!(t<=0)&&ej(ef(e.slice(t+1)),"default",!0).length>0}function eS(e){switch(e.kind){case"extension":return"extension:".concat(e.info.id);case"builtin":return"builtin:".concat(e.plugin.id);case"text":return"text"}}function eC(e){return"text"!==ew(e)[0].kind}let eA="halo:file-tree:expanded",eI=null,eE=new Map;function eT(){if(eI)return eI;try{let e=localStorage.getItem(eA);eI=e?new Set(JSON.parse(e)):new Set}catch(e){eI=new Set}return eI}let eM=null;function eF(e,t){let r=eT(),n=r.has(e);if(t?r.add(e):r.delete(e),eM&&clearTimeout(eM),eM=setTimeout(()=>{try{let e=eT();localStorage.setItem(eA,JSON.stringify([...e]))}catch(e){}},300),n!==t){let r=eE.get(e);if(r)for(let e of r)e(t)}}function eD(e){return eT().has(e)}let eP="application/x-halo-path";function eL(e){let{depth:t,initialValue:r,iconKind:n,onCommit:a,onCancel:s}=e,i=(0,o.useRef)(null),[c,d]=(0,o.useState)(r),u=(0,o.useRef)(!1);(0,o.useEffect)(()=>{let e=i.current;if(!e)return;e.focus();let t=r.lastIndexOf(".");"file"===n&&t>0?e.setSelectionRange(0,t):e.select()},[r,n]);let m="folder"===n?E.A:T.A;return(0,l.jsxs)("div",{className:"flex w-full items-center gap-1 py-1 text-xs",style:{paddingLeft:"".concat(12*t+8,"px")},children:[(0,l.jsx)("span",{className:"w-3.5 shrink-0"}),(0,l.jsx)(m,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0","folder"===n?"text-blue-400":"fill-[var(--muted-foreground)] text-[var(--muted-foreground)]")}),(0,l.jsx)("input",{ref:i,type:"text",value:c,onChange:e=>d(e.target.value),onKeyDown:e=>{"Enter"===e.key?(e.preventDefault(),u.current=!0,a(c)):"Escape"===e.key&&(e.preventDefault(),u.current=!0,s()),e.stopPropagation()},onBlur:()=>{u.current||(""===c.trim()?s():a(c))},className:"min-w-0 flex-1 rounded border border-[var(--primary)] bg-[var(--background)] px-1 py-0 text-xs text-[var(--foreground)] outline-none"})]})}async function eR(e){let t=e.items;if(t&&t.length>0){let e=[];for(let a=0;a<t.length;a++){var r,n;let s=null==(r=(n=t[a]).webkitGetAsEntry)?void 0:r.call(n);s&&e.push(s)}if(e.some(e=>e.isDirectory)){let t=[];async function a(e,r){if(e.isFile){let n=await new Promise((t,r)=>e.file(t,r)),a=r?"".concat(r,"/").concat(e.name):e.name;t.push(new File([n],a,{type:n.type,lastModified:n.lastModified}))}else if(e.isDirectory){let t,n=e.createReader(),s=r?"".concat(r,"/").concat(e.name):e.name;do for(let e of t=await function(e){return new Promise((t,r)=>e.readEntries(t,r))}(n))await a(e,s);while(t.length>0)}}for(let t of e)await a(t,"");return t}}return Array.from(e.files)}function e_(e,t){return e.type!==t.type?"directory"===e.type?-1:1:e.name.localeCompare(t.name)}function ez(e){let t=[];if(e.path&&t.push(e.path),"directory"===e.type&&e.children&&(!e.path||eD(e.path))){var r;for(let n of[...null!=(r=e.children)?r:[]].sort(e_))t.push(...ez(n))}return t}function eO(e){var t,r,n;let{node:a,projectId:s,onSelect:i,onContextMenu:c,onDropFiles:u,onMoveFile:m,selectedPaths:p,onSelectionChange:x,lastAnchor:f,visiblePaths:h,depth:g,pendingEdit:b,onCommitEdit:y,onCancelEdit:j}=e,w=(0,d._r)(),[k,S]=(0,o.useState)(()=>!!a.path&&eD(a.path)),[R,_]=(0,o.useState)(!1),[z,O]=(0,o.useState)(!1),U=(0,o.useRef)(null),B=(0,o.useRef)(null),W="directory"===a.type;ec();let H=W&&ek(a.name),K=W&&!1!==a.hasChildren&&void 0===a.children,G=(0,o.useRef)(k),q=(0,o.useCallback)(e=>{S(e),a.path&&eF(a.path,e)},[a.path]);(0,o.useEffect)(()=>{if(a.path){var e,t;let r;return e=a.path,t=e=>S(e),(r=eE.get(e))||(r=new Set,eE.set(e,r)),r.add(t),()=>{let r=eE.get(e);r&&(r.delete(t),0===r.size&&eE.delete(e))}}},[a.path]),(0,o.useEffect)(()=>{let e=G.current;G.current=k,k&&!z&&a.path&&(K||!e)&&(O(!0),v(s,a.path,w).finally(()=>O(!1)))},[k,K,z,a.path,s,w]);let $=w(e=>e.modifiedPaths),J=w(e=>e.activeTab),Z=A(e=>{var t;return null!=(t=s?e.byProject[s]:void 0)?t:C}),V=0===g&&!a.path,Y=(e,t,r)=>{var n;return(0,l.jsxs)(l.Fragment,{children:[e&&b&&(0,l.jsx)(eL,{depth:t,initialValue:"",iconKind:"create-folder"===b.mode?"folder":"file",onCommit:e=>null==y?void 0:y(e),onCancel:()=>null==j?void 0:j()}),(null!=(n=a.children)?n:[]).sort(e_).map(e=>(0,l.jsx)(eO,{node:e,projectId:s,onSelect:i,onContextMenu:c,onDropFiles:u,onMoveFile:m,selectedPaths:p,onSelectionChange:x,lastAnchor:f,visiblePaths:r,depth:t,pendingEdit:b,onCommitEdit:y,onCancelEdit:j},e.path))]})};if(V){let e=(0,o.useCallback)(()=>ez(a),[a])(),t=async e=>{e.preventDefault(),e.stopPropagation(),_(!1);let t=e.dataTransfer.getData(eP);if(t){null==m||m(t,"");return}let r=await eR(e.dataTransfer);r.length>0&&(null==u||u(r,""))},r=b&&""===b.parentDir&&"rename"!==b.mode;return(0,l.jsx)("div",{onClick:e=>{e.target===e.currentTarget&&x&&x(new Set,"")},onContextMenu:e=>{e.target===e.currentTarget&&(e.preventDefault(),null==c||c({x:e.clientX,y:e.clientY,path:"",name:"/",isDir:!0}))},onDragOver:e=>{(e.dataTransfer.types.includes("Files")||e.dataTransfer.types.includes(eP))&&(e.preventDefault(),e.stopPropagation(),_(!0))},onDragLeave:e=>{e.currentTarget===e.target&&_(!1)},onDrop:t,className:(0,I.cn)("min-h-full",R&&"bg-[var(--accent)]/30"),children:Y(!!r,0,e)})}let Q=$.has(a.path),X=J===a.path,ee=null!=(r=null==p?void 0:p.has(a.path))&&r,{Icon:er,color:en}=et(a.path),ea=W?Z.dirs.get(a.path):Z.files.get(a.path),es=ea&&"*"!==ea?N(ea):null,el="*"===ea?"#8C8C8C":null==es?void 0:es.color,eo=!ea&&function(e,t){if(0===e.size)return!1;if(e.has(t))return!0;for(let r of e)if(t.startsWith(r+"/"))return!0;return!1}(Z.ignored,a.path),ei=()=>{B.current&&(clearTimeout(B.current),B.current=null)},ed=async e=>{if(!W)return;e.preventDefault(),e.stopPropagation(),_(!1),ei(),k||q(!0);let t=e.dataTransfer.getData(eP);if(t){try{for(let e of JSON.parse(t))e===a.path||e.startsWith(a.path+"/")||null==m||m(e,a.path)}catch(e){t===a.path||t.startsWith(a.path+"/")||null==m||m(t,a.path)}return}let r=await eR(e.dataTransfer);r.length>0&&(null==u||u(r,a.path))},eu=W&&(null==(t=a.children)?void 0:t.some(e=>{let t=e=>{var r,n;return!!$.has(e.path)||null!=(n=null==(r=e.children)?void 0:r.some(t))&&n};return t(e)})),em=b&&"rename"===b.mode&&b.originalPath===a.path,ep=b&&"rename"!==b.mode&&b.parentDir===a.path&&W;return em&&b?(0,l.jsx)(eL,{depth:g,initialValue:null!=(n=b.originalName)?n:a.name,iconKind:W?"folder":"file",onCommit:e=>null==y?void 0:y(e),onCancel:()=>null==j?void 0:j()}):(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{draggable:!0,"data-path":a.path,onClick:e=>{if(e.stopPropagation(),W&&!H&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){x&&x(new Set([a.path]),a.path),q(!k);return}if(e.shiftKey&&x&&h&&f){let e=h.indexOf(f),t=h.indexOf(a.path);if(e>=0&&t>=0){let r=Math.min(e,t),n=Math.max(e,t);x(new Set(h.slice(r,n+1)),f)}return}if((e.ctrlKey||e.metaKey)&&x){let e=new Set(p);e.has(a.path)?e.delete(a.path):e.add(a.path),x(e,a.path);return}(!W||H)&&(x&&x(new Set([a.path]),a.path),U.current&&clearTimeout(U.current),U.current=setTimeout(()=>{U.current=null,i(a.path,H?{bundle:!0}:void 0)},300))},onDoubleClick:e=>{e.stopPropagation(),U.current&&(clearTimeout(U.current),U.current=null),W&&!H?q(!k):i(a.path,H?{bundle:!0}:void 0)},onDragStart:e=>{p&&p.size>1&&p.has(a.path)?e.dataTransfer.setData(eP,JSON.stringify([...p])):e.dataTransfer.setData(eP,JSON.stringify([a.path])),e.dataTransfer.effectAllowed="move"},onContextMenu:e=>{e.preventDefault(),e.stopPropagation(),!ee&&x&&x(new Set([a.path]),a.path),null==c||c({x:e.clientX,y:e.clientY,path:a.path,name:a.name,isDir:W})},onDragOver:e=>{W&&(e.dataTransfer.types.includes("Files")||e.dataTransfer.types.includes(eP))&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",_(!0),k||B.current||(B.current=setTimeout(()=>{B.current=null,q(!0)},600)))},onDragLeave:()=>{_(!1),ei()},onDrop:ed,className:(0,I.cn)("flex w-full items-center gap-1 py-1 text-left text-xs transition-colors hover:bg-[var(--secondary)]",ee&&"bg-[var(--primary)]/20 text-[var(--foreground)]",!ee&&X&&"bg-[var(--accent)] text-[var(--accent-foreground)]",!ee&&!X&&"text-[var(--foreground)]",R&&W&&"bg-[var(--accent)] ring-1 ring-[var(--primary)]"),style:{paddingLeft:"".concat(12*g+8,"px")},children:[W&&(0,l.jsx)("span",{className:(0,I.cn)("shrink-0 text-[var(--muted-foreground)]",H&&"rounded hover:bg-[var(--accent)] hover:text-[var(--foreground)]"),onClick:e=>{H&&(e.stopPropagation(),q(!k))},onDoubleClick:H?e=>e.stopPropagation():void 0,children:k?(0,l.jsx)(M.A,{className:"h-3.5 w-3.5"}):(0,l.jsx)(F.A,{className:"h-3.5 w-3.5"})}),!W&&(0,l.jsx)("span",{className:"w-3.5 shrink-0"}),H?(0,l.jsx)(D.A,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0 text-violet-400",eo&&"opacity-60")}):W?k?(0,l.jsx)(P.A,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0 text-blue-400",eo&&"opacity-60")}):(0,l.jsx)(E.A,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0 text-blue-400",eo&&"opacity-60")}):(0,l.jsx)(er,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0",en,eo&&"opacity-60")}),(0,l.jsx)("span",{className:(0,I.cn)("truncate",eo&&"text-[var(--muted-foreground)] opacity-60"),style:el?{color:el}:void 0,children:a.name}),(0,l.jsxs)("span",{className:"ml-auto flex shrink-0 items-center gap-1 pl-1 pr-2",children:[(Q||eu)&&(0,l.jsx)(T.A,{className:"h-1.5 w-1.5 shrink-0 fill-amber-400 text-amber-400"}),W?el&&(0,l.jsx)(T.A,{className:"h-1.5 w-1.5 shrink-0",style:{fill:el,color:el}}):es&&(0,l.jsx)("span",{className:"w-3 text-center font-mono text-[11px] font-semibold",style:{color:es.color},title:es.label,children:es.letter})]})]}),W&&k&&z&&!a.children&&(0,l.jsxs)("div",{className:"flex items-center gap-1.5 py-1 text-[10px] text-[var(--muted-foreground)]",style:{paddingLeft:"".concat((g+1)*12+8,"px")},children:[(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin"}),(0,l.jsx)("span",{children:"Loading..."})]}),W&&k&&(a.children||ep)&&(0,l.jsx)("div",{children:Y(!!ep,g+1,h)})]})}var eU=r(80151),eB=r(66731),eW=r(877),eH=r(94665),eK=r(90302),eG=r(11943),eq=r(19127);function e$(e){let{x:t,y:r,path:n,name:a,isDir:s,selectedCount:i,onAction:c,onClose:d}=e,u=(0,o.useRef)(null),[m,p]=(0,o.useState)({x:t,y:r});(0,o.useEffect)(()=>{function e(e){u.current&&!u.current.contains(e.target)&&d()}function t(e){"Escape"===e.key&&d()}return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[d]),(0,o.useLayoutEffect)(()=>{let e=u.current;if(!e)return;let n=e.getBoundingClientRect(),a=window.innerWidth,s=window.innerHeight,l=t+n.width+4>a?Math.max(4,a-n.width-4):t,o=r+n.height+4>s?Math.max(4,s-n.height-4):r;(l!==m.x||o!==m.y)&&p({x:l,y:o})},[t,r,m.x,m.y]);let x={position:"fixed",left:m.x,top:m.y,zIndex:9999};if(void 0!==i&&i>1)return(0,l.jsxs)("div",{ref:u,style:x,className:"min-w-[140px] rounded-md border border-[var(--border)] bg-[var(--card)] py-1 shadow-lg",children:[(0,l.jsxs)("div",{className:"truncate border-b border-[var(--border)] px-3 py-1.5 text-[10px] text-[var(--muted-foreground)]",children:[i," items selected"]}),(0,l.jsxs)("button",{onClick:()=>{c({type:"delete",path:n,isDir:s}),d()},className:"flex w-full items-center gap-2 px-3 py-1.5 text-xs text-red-400 transition-colors hover:bg-[var(--secondary)] hover:text-red-300",children:[(0,l.jsx)(eU.A,{className:"h-3.5 w-3.5"}),"Delete ",i," items"]})]});let f=""===n&&s,h=!!window.haloReveal,v=f?[{icon:eB.A,label:"New File...",type:"new-file"},{icon:eW.A,label:"New Folder...",type:"new-folder"},{icon:H.A,label:"Open in Integrated Terminal",type:"open-terminal"},...h?[{icon:eH.A,label:"Reveal in File Manager",type:"reveal-in-file-manager"}]:[],{icon:eK.A,label:"Download",type:"download"}]:[{icon:eB.A,label:"New File...",type:"new-file",separatorAfter:!1},{icon:eW.A,label:"New Folder...",type:"new-folder",separatorAfter:!1},{icon:H.A,label:"Open in Integrated Terminal",type:"open-terminal",separatorAfter:!h},...h?[{icon:eH.A,label:"Reveal in File Manager",type:"reveal-in-file-manager",separatorAfter:!0}]:[],...s?[...ek(a)?[{icon:eG.A,label:"Open to the Side",type:"open-to-side"}]:[],{icon:eK.A,label:"Download",type:"download"}]:[{icon:eG.A,label:"Open to the Side",type:"open-to-side",separatorAfter:!1},{icon:eK.A,label:"Download",type:"download"}],{icon:eq.A,label:"Rename",type:"rename"},{icon:eU.A,label:"Delete",type:"delete",danger:!0,separatorAfter:s},...s?[{icon:P.A,label:"Open as Workspace",type:"open-as-workspace"}]:[]];return(0,l.jsxs)("div",{ref:u,style:x,className:"min-w-[140px] rounded-md border border-[var(--border)] bg-[var(--card)] py-1 shadow-lg",children:[(0,l.jsx)("div",{className:"truncate border-b border-[var(--border)] px-3 py-1.5 text-[10px] text-[var(--muted-foreground)]",children:a}),v.map(e=>{let t=e.icon;return(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{onClick:()=>{c({type:e.type,path:n,isDir:s}),d()},className:"flex w-full items-center gap-2 px-3 py-1.5 text-xs transition-colors hover:bg-[var(--secondary)] ".concat(e.danger?"text-red-400 hover:text-red-300":"text-[var(--foreground)]"),children:[(0,l.jsx)(t,{className:"h-3.5 w-3.5"}),e.label]}),e.separatorAfter&&(0,l.jsx)("div",{className:"my-1 border-t border-[var(--border)]"})]},e.type)})]})}var eJ=r(97558),eZ=r(17119);let eV=["node_modules",".git"];function eY(e){var t,r,n;let{path:a,projectId:s,onClose:i}=e,c=(0,eZ.kj)(),[d,m]=(0,o.useState)(!1),p="".concat(s,"\n").concat(a,"\n").concat(d),[x,f]=(0,o.useState)(null),h=(null==x?void 0:x.key)===p?x.result:null,v=(null==h?void 0:h.ok)===!0,g=(0,o.useRef)(null),b=(0,o.useRef)(null),y=a.split("/").pop()||s.split(/[\\/]/).filter(Boolean).pop()||c("explorer.download.workspace");(0,o.useEffect)(()=>{let e=new AbortController;return u.F.files.downloadFolderEstimate(a,s,d,e.signal).then(t=>{e.signal.aborted||f({key:p,result:t})}).catch(t=>{e.signal.aborted||f({key:p,result:{ok:!1,status:0,message:t instanceof Error?t.message:String(t)}})}),()=>e.abort()},[p,a,s,d]),(0,o.useEffect)(()=>{let e=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),i())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[i]),(0,o.useEffect)(()=>{var e;if(!v)return;let t=document.activeElement;t&&t!==document.body&&t!==g.current||null==(e=b.current)||e.focus()},[v]);let j=(null==h?void 0:h.ok)?h.ignoredNames:{},w=eV.filter(e=>j[e]).map(e=>"".concat(e," (").concat(j[e],")")),N=Object.entries(j).filter(e=>{let[t]=e;return!eV.includes(t)}).reduce((e,t)=>{let[,r]=t;return e+r},0);N>0&&w.push(c("explorer.download.otherFolders",{n:N}));let k=(null==h?void 0:h.ok)&&null!=(t=h.excluded.blocked)?t:0,S=(null==h?void 0:h.ok)?(null!=(r=h.excluded.symlink)?r:0)+(null!=(n=h.excluded.unreadable)?n:0):0;return(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:i,children:(0,l.jsxs)("div",{role:"dialog","aria-label":c("explorer.download.title",{name:y}),className:"w-[420px] rounded-lg border border-[var(--border)] bg-[var(--background)] shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-2.5",children:[(0,l.jsx)("h3",{className:"truncate text-sm font-medium text-[var(--foreground)]",children:c("explorer.download.title",{name:y})}),(0,l.jsx)("button",{onClick:i,className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)]",children:(0,l.jsx)(eJ.A,{className:"h-4 w-4"})})]}),(0,l.jsxs)("div",{className:"flex flex-col gap-3 px-4 py-4 text-xs",children:[h?h.ok?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("p",{"data-testid":"download-folder-summary",className:"text-sm text-[var(--foreground)]",children:["≈ ",(0,I.v7)(h.bytes)," \xb7 ",c(1===h.files?"explorer.download.file":"explorer.download.files",{n:h.files.toLocaleString()})]}),(w.length>0||k>0||S>0)&&(0,l.jsxs)("ul",{className:"flex flex-col gap-1 text-[var(--muted-foreground)]",children:[w.length>0&&(0,l.jsx)("li",{children:c("explorer.download.excludedDefault",{list:w.join(", ")})}),k>0&&(0,l.jsx)("li",{children:c("explorer.download.excludedBlocked",{n:k})}),S>0&&(0,l.jsx)("li",{children:c("explorer.download.excludedSkipped",{n:S})})]})]}):(0,l.jsx)("p",{"data-testid":"download-folder-error",className:"text-red-400",children:h.message}):(0,l.jsxs)("p",{className:"flex items-center gap-2 text-[var(--muted-foreground)]",children:[(0,l.jsx)(L.A,{className:"h-3.5 w-3.5 animate-spin"}),c("explorer.download.estimating")]}),(0,l.jsxs)("label",{className:"flex items-center gap-2 text-[var(--foreground)]",children:[(0,l.jsx)("input",{type:"checkbox",checked:d,onChange:e=>m(e.target.checked)}),c("explorer.download.include")]})]}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--border)] px-3 py-2.5",children:[(0,l.jsx)("button",{ref:g,autoFocus:!0,onClick:i,className:"rounded px-3 py-1 text-xs font-medium text-[var(--muted-foreground)] hover:bg-[var(--secondary)]",children:c("explorer.download.cancel")}),(0,l.jsxs)("button",{ref:b,onClick:function(){let e=document.createElement("a");e.href=u.F.files.downloadFolderUrl(a,s,d),e.download="",document.body.appendChild(e),e.click(),e.remove(),i()},disabled:!v,className:"flex items-center gap-1.5 rounded bg-[var(--primary)] px-3 py-1 text-xs font-medium text-[var(--primary-foreground)] hover:opacity-90 disabled:opacity-40",children:[(0,l.jsx)(eK.A,{className:"h-3.5 w-3.5"}),c("explorer.download.confirm")]})]})]})})}var eQ=r(56207);eQ.wG.config({paths:{vs:"/monaco/vs"}});var eX=r(58321);let e0={dark:"vs-dark",light:"vs",midnight:"halo-midnight",warm:"halo-warm"},e1=!1;function e3(e){e1||(e1=!0,e.editor.defineTheme("halo-midnight",{base:"vs-dark",inherit:!0,rules:[],colors:{"editor.background":"#0b1220","editor.foreground":"#dbe4f3","editor.lineHighlightBackground":"#111a2e","editorLineNumber.foreground":"#3d4f78"}}),e.editor.defineTheme("halo-warm",{base:"vs",inherit:!0,rules:[],colors:{"editor.background":"#f6f1e7","editor.foreground":"#3d3427","editor.lineHighlightBackground":"#efe7d8","editorLineNumber.foreground":"#a89878"}}))}function e5(e){let{path:t,content:r,language:n,onChange:a,onSave:s,onClose:i}=e,c=(0,d._r)(),u=(0,o.useRef)(null),{theme:m}=(0,eX.useTheme)(),p=(0,o.useRef)(s),x=(0,o.useRef)(i),f=(0,o.useRef)(r);(0,o.useEffect)(()=>{p.current=s,x.current=i,f.current=r},[s,i,r]),(0,o.useEffect)(()=>()=>{c.getState().setSelectedText(null,null)},[t]);let h=(0,o.useCallback)(e=>{void 0!==e&&a&&a(e)},[a]),v=(0,o.useCallback)((e,t)=>{u.current=e;let r=e.getModel();r&&r.getValue()!==f.current&&r.setValue(f.current),e.onDidChangeCursorSelection(t=>{var r,n;let a=e.getSelection();if(!a||a.isEmpty())return void c.getState().setSelectedText(null,null);let s=null!=(n=null==(r=e.getModel())?void 0:r.getValueInRange(a))?n:null;s&&c.getState().setSelectedText(s,{startLine:a.startLineNumber,endLine:a.endLineNumber})}),e.addAction({id:"halo-save",label:"Save File",keybindings:[t.KeyMod.CtrlCmd|t.KeyCode.KeyS],run:()=>{var e;null==(e=p.current)||e.call(p)}}),e.addAction({id:"halo-close-tab",label:"Close Tab",keybindings:[t.KeyMod.Alt|t.KeyCode.KeyW],run:()=>{var e;null==(e=x.current)||e.call(x)}})},[]);return(0,l.jsx)(eQ.Ay,{path:t,keepCurrentModel:!0,height:"100%",language:n,value:r,onChange:h,beforeMount:e3,onMount:v,theme:e0[m],options:{fontSize:13,lineHeight:20,fontFamily:"'JetBrains Mono', 'Fira Code', 'Cascadia Code', Menlo, Monaco, monospace",minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:"on",tabSize:2,renderLineHighlight:"line",cursorBlinking:"smooth",smoothScrolling:!0,padding:{top:12,bottom:12},bracketPairColorization:{enabled:!0},automaticLayout:!0,overviewRulerLanes:0,hideCursorInOverviewRuler:!0,overviewRulerBorder:!1,scrollbar:{verticalScrollbarSize:6,horizontalScrollbarSize:6}},loading:(0,l.jsx)("div",{className:"flex h-full items-center justify-center bg-[var(--background)]",children:(0,l.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:"Loading editor..."})})})}var e2=r(10691),e4=r(76633),e8=r(5659),e6=r(28965),e9=r(79906);function e7(e){let{content:t,filePath:r,projectId:n}=e,a=(0,eZ.kj)(),s=(0,d._r)(),i=(0,o.useRef)(null),c=(0,o.useMemo)(()=>(function(e){let t=[],r=new Map,n=!1;for(let s of e.split("\n")){var a;let e=s.trimEnd();if(/^\s*(```|~~~)/.test(e)){n=!n;continue}if(n)continue;let l=/^(#{1,6})\s+(.+?)\s*#*$/.exec(e);if(!l)continue;let o=l[1].length,i=l[2].trim(),c=i.trim().toLowerCase().replace(/[^\w一-鿿\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"section",d=null!=(a=r.get(c))?a:0;r.set(c,d+1),d>0&&(c="".concat(c,"-").concat(d)),t.push({level:o,text:i,slug:c})}return t})(t),[t]),u=0,m=e=>{let t=i.current;if(!t)return;let r=t.querySelector("#".concat(CSS.escape(e)));r&&r.scrollIntoView({behavior:"smooth",block:"start"})},[p,x]=(0,o.useState)(()=>{try{return"1"===localStorage.getItem("halo.mdOutlineHidden")}catch(e){return!1}}),f=()=>{x(e=>{let t=!e;try{localStorage.setItem("halo.mdOutlineHidden",t?"1":"0")}catch(e){}return t})};(0,o.useEffect)(()=>{let e=i.current;if(!e)return;let t=s.getState().setSelectedText;function r(){let r=window.getSelection();if(!r||0===r.rangeCount)return;let n=r.getRangeAt(0);if(!(e&&e.contains(n.commonAncestorContainer)))return;if(r.isCollapsed)return void t(null,null);let a=r.toString();if(!a.trim())return void t(null,null);t(a,null)}return document.addEventListener("selectionchange",r),()=>{document.removeEventListener("selectionchange",r),t(null,null)}},[s]);let h=e=>function(t){var r;let{children:n}=t;return(0,l.jsx)(e,{id:null==(r=c[u++])?void 0:r.slug,children:n})};return(0,l.jsxs)("div",{className:"flex h-full bg-[var(--background)]",children:[c.length>1&&!p&&(0,l.jsxs)("nav",{className:"hidden w-56 shrink-0 flex-col overflow-y-auto border-r border-[var(--border)] py-4 md:flex",children:[(0,l.jsxs)("div",{className:"flex shrink-0 items-center justify-between px-3 pb-2",children:[(0,l.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-[var(--muted-foreground)]",children:a("editor.outline")}),(0,l.jsx)("button",{onClick:f,title:a("editor.hideOutline"),className:"text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:(0,l.jsx)(e8.A,{className:"h-3.5 w-3.5"})})]}),c.map((e,t)=>(0,l.jsx)("button",{onClick:()=>m(e.slug),title:e.text,className:"block w-full shrink-0 truncate px-3 py-1 text-left text-xs text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",style:{paddingLeft:"".concat(.75+(e.level-1)*.75,"rem")},children:e.text},"".concat(e.slug,"-").concat(t)))]}),(0,l.jsxs)("div",{ref:i,className:"relative flex-1 overflow-y-auto px-8 py-6",children:[c.length>1&&p&&(0,l.jsx)("button",{onClick:f,title:a("editor.showOutline"),className:"absolute left-2 top-2 z-10 hidden rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] md:block",children:(0,l.jsx)(e6.A,{className:"h-4 w-4"})}),(0,l.jsx)("article",{className:"prose prose-invert prose-sm max-w-none prose-headings:text-[var(--foreground)] prose-headings:font-semibold prose-headings:scroll-mt-4 prose-h1:text-2xl prose-h1:border-b prose-h1:border-[var(--border)] prose-h1:pb-2 prose-h2:text-xl prose-h2:border-b prose-h2:border-[var(--border)] prose-h2:pb-1.5 prose-h3:text-lg prose-p:text-[var(--foreground)] prose-p:leading-relaxed prose-a:text-blue-400 prose-a:no-underline hover:prose-a:underline prose-strong:text-[var(--foreground)] prose-code:text-amber-300 prose-code:bg-[var(--secondary)] prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded prose-code:text-xs prose-code:before:content-none prose-code:after:content-none prose-pre:bg-[var(--secondary)] prose-pre:border prose-pre:border-[var(--border)] prose-pre:rounded-lg prose-blockquote:border-l-blue-500 prose-blockquote:text-[var(--muted-foreground)] prose-li:text-[var(--foreground)] prose-th:text-[var(--foreground)] prose-td:text-[var(--foreground)] prose-table:border-collapse prose-th:border prose-th:border-[var(--border)] prose-th:px-3 prose-th:py-1.5 prose-th:bg-[var(--secondary)] prose-td:border prose-td:border-[var(--border)] prose-td:px-3 prose-td:py-1.5 prose-hr:border-[var(--border)] prose-img:rounded-lg ",children:(0,l.jsx)(e2.oz,{remarkPlugins:[e4.A],components:{h1:h("h1"),h2:h("h2"),h3:h("h3"),h4:h("h4"),h5:h("h5"),h6:h("h6"),a(e){let{href:t,children:r,node:n,...a}=e;return(null==t?void 0:t.startsWith("#"))?(0,l.jsx)("a",{href:t,onClick:e=>{e.preventDefault();let r=t.slice(1);try{r=decodeURIComponent(r)}catch(e){}m(r)},...a,children:r}):(0,l.jsx)("a",{href:t,target:"_blank",rel:"noopener noreferrer",...a,children:r})},img(e){let{src:t,alt:a,node:s,...o}=e,i=function(e,t,r){let n;if(!e)return null;if(/^(https?:|data:|blob:)/i.test(e))return e;if(!r)return null;if(e.startsWith("/"))n=e;else{if(!t)return null;let a=t.includes("/")?t.slice(0,t.lastIndexOf("/")):"",s=a?"".concat(a,"/").concat(e):e,l=[];for(let e of s.split("/"))""!==e&&"."!==e&&(".."===e?l.pop():l.push(e));n="".concat(r.replace(/\/$/,""),"/").concat(l.join("/"))}let a=new URLSearchParams;return a.set("path",n),a.set("projectId",r),a.set("inline","1"),"/api/files/download?".concat(a.toString())}("string"==typeof t?t:"",r,n);return i?(0,l.jsx)(e9.p,{src:i,alt:null!=a?a:"",...o,placeholderClassName:"my-2 aspect-[4/3] w-full max-w-sm"}):(0,l.jsxs)("span",{className:"rounded border border-[var(--border)] bg-[var(--secondary)]/30 px-2 py-1 text-xs text-[var(--muted-foreground)]",children:["[image unavailable: ",a||String(t),"]"]})}},children:t})})]})]})}let te=["background","foreground","card","card-foreground","border","input","primary","primary-foreground","secondary","secondary-foreground","muted","muted-foreground","accent","accent-foreground","destructive","ring"];function tt(){if("undefined"==typeof document)return{theme:"dark",themeVars:{}};let e=function(e){let t={};for(let r of te){let n=e.getPropertyValue("--".concat(r)).trim();n&&(t[r]=n)}return t}(getComputedStyle(document.documentElement)),t=e.background?document.createElement("canvas").getContext("2d",{willReadFrequently:!0}):null;if(!t||!e.background)return{theme:"dark",themeVars:e};t.fillStyle=e.background,t.fillRect(0,0,1,1);let[r,n,a]=t.getImageData(0,0,1,1).data;return{theme:function(e){let[t,r,n]=e,a=e=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4};return .2126*a(t)+.7152*a(r)+.0722*a(n)>.4?"light":"dark"}([r,n,a]),themeVars:e}}let tr=".halo/canvas/self.html",tn=new Set,ta=!1;function ts(e){let{theme:t,themeVars:r}=tt();try{var n;null==(n=e.contentWindow)||n.postMessage({haloFaceTheme:{scheme:t,vars:r}},"*")}catch(e){}}function tl(e,t){try{var r;null==(r=e.contentWindow)||r.postMessage({haloFaceLang:t},"*")}catch(e){}}let to=[];function ti(e){let t=e.replace(/[[\]\r\n]+/g," ").replace(/\s+/g," ").trim().slice(0,100);t&&((to=to.filter(e=>e!==t)).push(t),to.length>8&&(to=to.slice(-8)))}let tc=null,td=!1,tu=!1,tm=new Set(["image/jpeg","image/png","image/webp"]),tp=!1;function tx(e){let{url:t,name:r,face:n}=e,a=(0,o.useRef)(null),{theme:s}=(0,eX.useTheme)(),{lang:i}=(0,eZ.s9)();return(0,o.useEffect)(()=>{if(n&&a.current){var e;return e=a.current,tn.add(e),tp||(tp=!0,window.addEventListener("message",e=>(function(e,t){var r,n;if(!e||"object"!=typeof e||void 0===e.haloFaceAck&&void 0===e.haloFaceSnap)return;let a=!1;for(let e of tn)e.contentWindow&&e.contentWindow===t&&(a=!0);if(!a)return;"string"==typeof e.haloFaceAck&&ti(e.haloFaceAck);let s=e.haloFaceSnap;s&&"string"==typeof s.data&&s.data&&s.data.length<=8388608&&"string"==typeof s.mimeType&&tm.has(s.mimeType)&&(r=s.data,n=s.mimeType,td?ti("snap skipped (1 per round)"):tu?ti("snap skipped (chain)"):tc?tc(r,n)&&(td=!0,tu=!0):ti("snap skipped"))})(e.data,e.source))),()=>{tn.delete(e)}}},[n]),(0,o.useEffect)(()=>{n&&a.current&&ts(a.current)},[n,s]),(0,o.useEffect)(()=>{n&&a.current&&tl(a.current,i)},[n,i]),(0,l.jsx)("iframe",{ref:a,src:t,title:r,className:"h-full w-full border-0 ".concat(n?"bg-[var(--background)]":"bg-white"),sandbox:"allow-scripts allow-same-origin",allow:"autoplay",onLoad:n?e=>(function(e,t){if(ts(e),tl(e,t),ta){ta=!1;try{var r;null==(r=e.contentWindow)||r.postMessage({haloFace:"self.intro()"},"*")}catch(e){}}})(e.currentTarget,i):void 0})}let tf=e=>"halo_face_on:".concat(e);function th(e){return"1"===localStorage.getItem(tf(e))}let tv=(0,g.v)(e=>({on:{},setFaceOn(t,r){tb(t)!==r&&(r?localStorage.setItem(tf(t),"1"):localStorage.removeItem(tf(t)),to=[],e(e=>({on:{...e.on,[t]:r}})))}})),tg=!1;function tb(e){var t;return!!e&&(null!=(t=tv.getState().on[e])?t:th(e))}function ty(e){return tv(t=>{var r;return!!e&&(null!=(r=t.on[e])?r:th(e))})}function tj(e){let{original:t,modified:r,path:n}=e,a=(0,I.sQ)(n),{theme:s}=(0,eX.useTheme)();return(0,l.jsx)(eQ.zC,{height:"100%",language:a,original:t,modified:r,beforeMount:e3,theme:e0[s],options:{fontSize:13,lineHeight:20,fontFamily:"'JetBrains Mono', 'Fira Code', 'Cascadia Code', Menlo, Monaco, monospace",minimap:{enabled:!1},scrollBeyondLastLine:!1,readOnly:!0,renderSideBySide:!0,padding:{top:12,bottom:12},automaticLayout:!0,overviewRulerLanes:0,scrollbar:{verticalScrollbarSize:6,horizontalScrollbarSize:6}},loading:(0,l.jsx)("div",{className:"flex h-full items-center justify-center bg-[var(--background)]",children:(0,l.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:"Loading diff..."})})})}var tw=r(74037),tN=r(56279),tk=r(53105);function tS(e){var t,r;let{x:n,y:a,path:s,groupIdx:i,onClose:c,onCloseTab:u}=e,m=(0,d._r)(),p=(0,o.useRef)(null);(0,o.useEffect)(()=>{function e(e){p.current&&!p.current.contains(e.target)&&c()}return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[c]);let x=m.getState(),f=(null!=(r=null==(t=x.groups[i])?void 0:t.tabs)?r:[]).filter(e=>e!==x.pinnedTab).map(e=>x.buffers[e]).filter(e=>!!e),h=f.findIndex(e=>e.path===s),v=[{label:"Close",action:()=>u(s),disabled:s===x.pinnedTab},{label:"Close Others",action:()=>{f.forEach(e=>{e.path!==s&&u(e.path)})},disabled:0===f.filter(e=>e.path!==s).length},{label:"Close to the Right",action:()=>{f.slice(h+1).forEach(e=>u(e.path))},disabled:h>=f.length-1},{label:"Close Saved",action:()=>{f.forEach(e=>{e.modified||u(e.path)})}},{label:"Close All",action:()=>{f.forEach(e=>u(e.path))}}];return(0,l.jsx)("div",{ref:p,className:"fixed z-50 min-w-[160px] rounded-md border border-[var(--border)] bg-[var(--card)] py-1 shadow-lg",style:{left:n,top:a},children:v.map((e,t)=>(0,l.jsx)("button",{disabled:e.disabled,onClick:()=>{e.action(),c()},className:(0,I.cn)("w-full px-3 py-1.5 text-left text-xs transition-colors",e.disabled?"text-[var(--muted-foreground)]/40 cursor-default":"text-[var(--foreground)] hover:bg-[var(--secondary)]"),children:e.label},t))})}let tC="application/x-halo-tab";function tA(e){let{tabs:t,activeTab:r,groupIdx:n,canSplit:a,onCloseTab:s,renderMode:i,onToggleRenderMode:c,showDiffButton:u,onToggleDiff:m}=e,p=(0,eZ.kj)(),x=(0,d._r)(),f=(0,o.useRef)(null),[h,v]=(0,o.useState)(!1),[g,b]=(0,o.useState)(!1),[y,j]=(0,o.useState)(null),[w,N]=(0,o.useState)(null),[k,S]=(0,o.useState)(!1),[C,A]=(0,o.useState)(null),E=function(e){var t,r,n,a;let s=new Map,l=new Map;for(let n of e){let e=null!=(t=n.path.split("/").pop())?t:n.path;l.set(e,(null!=(r=l.get(e))?r:0)+1)}for(let t of e){let e=t.path.split("/"),r=null!=(n=e.pop())?n:t.path;(null!=(a=l.get(r))?a:0)>1&&e.length>0?s.set(t.path,"".concat(e[e.length-1],"/").concat(r)):s.set(t.path,r)}return s}(t),M=(0,o.useCallback)(()=>{let e=f.current;e&&(v(e.scrollLeft>0),b(e.scrollLeft+e.clientWidth<e.scrollWidth-1))},[]);(0,o.useEffect)(()=>{M();let e=f.current;if(!e)return;e.addEventListener("scroll",M);let t=new ResizeObserver(M);return t.observe(e),()=>{e.removeEventListener("scroll",M),t.disconnect()}},[M,t.length]);let D=e=>{var t;null==(t=f.current)||t.scrollBy({left:e,behavior:"smooth"})},P=()=>{j(null),N(null),S(!1)},L=x(e=>e.activeGroupIdx),R=x(e=>e.pinnedTab);return(0,l.jsxs)("div",{className:(0,I.cn)("relative flex shrink-0 items-center border-b border-[var(--border)] bg-[var(--card)]",k&&"ring-1 ring-[var(--primary)]"),onDragOver:e=>{if(!tI(e))return;let t=e.dataTransfer.types.includes(tC)?{srcGroupIdx:-1,path:""}:null;t&&t.srcGroupIdx!==n&&(e.preventDefault(),e.dataTransfer.dropEffect="move",S(!0))},onDragLeave:e=>{e.currentTarget===e.target&&S(!1)},onDrop:e=>{if(!tI(e))return;e.preventDefault();let t=tE(e);t&&t.srcGroupIdx!==n&&x.getState().moveTabToGroup(t.srcGroupIdx,t.path,n),j(null),N(null),S(!1)},onMouseDown:()=>x.getState().setActiveGroup(n),children:[h&&(0,l.jsx)("button",{onClick:()=>D(-150),className:"sticky left-0 z-10 flex h-full w-6 shrink-0 items-center justify-center bg-[var(--card)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] border-r border-[var(--border)]",children:(0,l.jsx)(tw.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("div",{ref:f,className:"flex flex-1 overflow-x-hidden",children:t.map((e,t)=>{var a;let{Icon:o,color:i}=et(e.path),c=e.path===r&&n===L,d=e.path===r&&n!==L;return(0,l.jsxs)("div",{draggable:!0,onDragStart:r=>{var a;return a=e.path,j(t),r.dataTransfer.effectAllowed="move",r.dataTransfer.setData("text/plain",String(t)),void r.dataTransfer.setData(tC,JSON.stringify({srcGroupIdx:n,path:a}))},onDragOver:e=>{tI(e)&&(e.preventDefault(),e.dataTransfer.dropEffect="move",N(t))},onDrop:e=>((e,t)=>{if(!tI(e))return;e.preventDefault();let r=tE(e);r&&x.getState().moveTabToGroup(r.srcGroupIdx,r.path,n,t),j(null),N(null),S(!1)})(e,t),onDragEnd:P,onContextMenu:t=>{t.preventDefault(),A({x:t.clientX,y:t.clientY,path:e.path})},className:(0,I.cn)("group relative flex items-center gap-1.5 border-r border-[var(--border)] px-3 py-1.5 text-xs cursor-pointer transition-colors select-none",c?"bg-[var(--background)] text-[var(--foreground)]":d?"bg-[var(--background)]/50 text-[var(--muted-foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]",y===t&&"opacity-40"),onClick:()=>{x.getState().setActiveTab(e.path,n),x.getState().setRejectedFile(null)},children:[w===t&&null!==y&&y>t&&(0,l.jsx)("div",{className:"absolute left-0 top-1 bottom-1 w-0.5 bg-[var(--primary)]"}),w===t&&null!==y&&y<t&&(0,l.jsx)("div",{className:"absolute right-0 top-1 bottom-1 w-0.5 bg-[var(--primary)]"}),(0,l.jsx)(o,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0",i)}),(0,l.jsx)("span",{className:"max-w-40 truncate",children:null!=(a=E.get(e.path))?a:e.path.split("/").pop()}),e.path===R?null:e.modified?(0,l.jsx)(T.A,{className:"h-2 w-2 fill-amber-400 text-amber-400 shrink-0"}):(0,l.jsx)("button",{onClick:t=>{t.stopPropagation(),s(e.path)},className:"ml-0.5 rounded p-0.5 opacity-0 transition-opacity group-hover:opacity-100 hover:bg-[var(--secondary)]",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})}),e.modified&&e.path!==R&&(0,l.jsx)("button",{onClick:t=>{t.stopPropagation(),s(e.path)},className:"ml-0.5 rounded p-0.5 opacity-0 transition-opacity group-hover:opacity-100 hover:bg-[var(--secondary)]",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})})]},e.path)})}),g&&(0,l.jsx)("button",{onClick:()=>D(150),className:"sticky right-0 z-10 flex h-full w-6 shrink-0 items-center justify-center bg-[var(--card)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] border-l border-[var(--border)]",children:(0,l.jsx)(F.A,{className:"h-3.5 w-3.5"})}),(()=>{let e=t.find(e=>e.path===r),n=(null==e?void 0:e.language)==="markdown"||(null==e?void 0:e.language)==="html";return(0,l.jsxs)("div",{className:"flex items-center gap-0.5 mr-1",children:[n&&(0,l.jsxs)("button",{onClick:c,title:i?"Switch to source view":"Switch to rendered view",className:(0,I.cn)("flex items-center gap-1 rounded px-1.5 py-1 text-[11px] transition-colors",i?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"),children:[i?(0,l.jsx)(eq.A,{className:"h-3 w-3"}):(0,l.jsx)(tN.A,{className:"h-3 w-3"}),(0,l.jsx)("span",{children:i?"Edit":"Preview"})]}),u&&(0,l.jsxs)("button",{onClick:m,title:p("editor.viewDiff"),className:"flex items-center gap-1 rounded px-1.5 py-1 text-[11px] text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:[(0,l.jsx)(tk.A,{className:"h-3 w-3"}),(0,l.jsx)("span",{children:p("editor.diff")})]})]})})(),a&&(0,l.jsx)("button",{title:p("editor.splitRight"),onClick:()=>x.getState().splitToRight(),className:"ml-1 mr-1 shrink-0 rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eG.A,{className:"h-3.5 w-3.5"})}),C&&(0,l.jsx)(tS,{x:C.x,y:C.y,path:C.path,groupIdx:n,onClose:()=>A(null),onCloseTab:s})]})}function tI(e){return e.dataTransfer.types.includes(tC)}function tE(e){try{let t=e.dataTransfer.getData(tC);if(!t)return null;return JSON.parse(t)}catch(e){return null}}let tT={id:"pdf",extensions:["pdf"],Component:(0,o.lazy)(()=>r.e(839).then(r.bind(r,9839)).then(e=>({default:e.PdfPreview})))},tM={id:"docx",extensions:["docx","doc"],Component:(0,o.lazy)(()=>r.e(449).then(r.bind(r,32449)).then(e=>({default:e.DocxPreview})))},tF={id:"xlsx",extensions:["xlsx","xls"],Component:(0,o.lazy)(()=>r.e(892).then(r.bind(r,28892)).then(e=>({default:e.XlsxPreview})))},tD={id:"pptx",extensions:["pptx","ppt"],Component:(0,o.lazy)(()=>Promise.all([r.e(819),r.e(522),r.e(160),r.e(868)]).then(r.bind(r,49868)).then(e=>({default:e.PptxPreview}))),heavy:!0};var tP=r(27173);let tL={id:"parquet",extensions:["parquet"],Component:(0,o.lazy)(()=>r.e(613).then(r.bind(r,37613)).then(e=>({default:e.ParquetPreview})))},tR={id:"sqlite",extensions:["db","sqlite","sqlite3"],Component:(0,o.lazy)(()=>r.e(362).then(r.bind(r,84362)).then(e=>({default:e.SqlitePreview})))},t_={id:"csv",extensions:["csv","tsv"],Component:(0,o.lazy)(()=>r.e(73).then(r.bind(r,27073)).then(e=>({default:e.CsvPreview})))};ed(tT),ed(tM),ed(tF),ed(tD),ed(tP.SQ),ed(tL),ed(tR),ed(t_);var tz=r(43180),tO=r(35418),tU=r(19875);let tB=e=>e.replace(/\\/g,"/");function tW(e){var t,r;let{workspace:n,accept:a,start:s,onDone:c}=e,d=(0,eZ.kj)(),[m,p]=(0,o.useState)(null),[x,f]=(0,o.useState)(null),[h,v]=(0,o.useState)(null),[g,b]=(0,o.useState)(0),[y,j]=(0,o.useState)(""),[w,N]=(0,o.useState)(null),k=(0,o.useRef)(null),S=(0,o.useRef)(null),C=(0,o.useRef)(!1),A=(0,o.useCallback)(e=>{C.current||(C.current=!0,c(e))},[c]),T=(0,o.useCallback)((e,t)=>{f(null),v(null),u.F.fs.browseFiles(e).then(e=>{let t=tB(e.path);p(t),j(t),f(e.entries.map(e=>({...e,path:tB(e.path)})).filter(e=>"directory"===e.type||((e,t)=>{if(0===t.length)return!0;let r=e.toLowerCase();return t.some(e=>r.endsWith(e))})(e.name,a))),b(0)},r=>{if(t&&e!==n)return void T(n,!1);p(e),j(e),f([]),v(r instanceof Error?r.message:String(r))})},[a,n]);(0,o.useEffect)(()=>{T(s,!0)},[T,s]),(0,o.useEffect)(()=>{u.F.fs.home().then(e=>N(tB(e.home)),()=>{})},[]),(0,o.useEffect)(()=>{var e;null==(e=S.current)||e.focus()},[]);let M=m?null!=(r=null==(t=/^[A-Za-z]:\//.exec(m))?void 0:t[0])?r:"/":"/",D=m&&m!==M?m.lastIndexOf("/")<=M.length-1?M:m.slice(0,m.lastIndexOf("/")):null,P=[...null!==D?["up"]:[],...null!=x?x:[]],L=e=>{var t;if("up"===e){null!==D&&T(D,!1);return}if("directory"===e.type)return void T(e.path,!1);A({path:e.path,name:e.name,size:null!=(t=e.size)?t:0})};(0,o.useEffect)(()=>{let e=e=>{var t;let r=(null==(t=e.target)?void 0:t.tagName)==="INPUT";["Escape","Enter","ArrowDown","ArrowUp","Backspace"].includes(e.key)&&(!r||"Backspace"!==e.key)&&(e.preventDefault(),e.stopImmediatePropagation(),"Escape"===e.key?A(null):r&&"Enter"===e.key?y.trim()&&T(tB(y.trim()),!1):"ArrowDown"===e.key?b(e=>Math.min(e+1,P.length-1)):"ArrowUp"===e.key?b(e=>Math.max(e-1,0)):"Backspace"===e.key?null!==D&&T(D,!1):P[g]&&L(P[g]))};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)}),(0,o.useEffect)(()=>{var e,t;null==(t=k.current)||null==(e=t.children[g])||e.scrollIntoView({block:"nearest"})},[g]);let R=m?m.slice(M.length).split("/").filter(Boolean):[],_="flex items-center gap-1 rounded border border-[var(--border)] px-2 py-1 text-xs hover:bg-[var(--secondary)]";return(0,i.createPortal)((0,l.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":d("picker.title"),"data-file-picker":!0,className:"fixed inset-0 z-[90] flex items-center justify-center bg-black/40 p-3",onPointerDown:e=>{e.target===e.currentTarget&&A(null)},children:(0,l.jsxs)("div",{ref:S,tabIndex:-1,className:"flex max-h-[85vh] w-full max-w-xl flex-col overflow-hidden rounded-lg border border-[var(--border)] bg-[var(--card)] text-[var(--foreground)] shadow-xl outline-none",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 border-b border-[var(--border)] px-3 py-2",children:[(0,l.jsx)("span",{className:"text-sm font-medium",children:d("picker.title")}),a.length>0&&(0,l.jsx)("span",{className:"truncate text-[10px] text-[var(--muted-foreground)]",children:a.join(" ")}),(0,l.jsx)("button",{type:"button",onClick:()=>A(null),"aria-label":d("picker.cancel"),className:"ml-auto rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-4 w-4"})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2 border-b border-[var(--border)] px-3 py-2",children:[(0,l.jsxs)("button",{type:"button",onClick:()=>T(n,!1),className:_,children:[(0,l.jsx)(tz.A,{className:"h-3.5 w-3.5"}),d("picker.workspace")]}),w&&(0,l.jsxs)("button",{type:"button",onClick:()=>T(w,!1),className:_,children:[(0,l.jsx)(tO.A,{className:"h-3.5 w-3.5"}),d("picker.home")]}),(0,l.jsx)("input",{value:y,onChange:e=>j(e.target.value),"aria-label":d("picker.pathBox"),spellCheck:!1,className:"min-w-0 flex-1 rounded border border-[var(--border)] bg-[var(--background)] px-2 py-1 font-mono text-xs outline-none focus:border-[var(--primary)]"})]}),(0,l.jsxs)("nav",{className:"flex flex-wrap items-center gap-0.5 border-b border-[var(--border)] px-3 py-1.5 text-xs",children:[(0,l.jsx)("button",{type:"button",onClick:()=>T(M,!1),className:"rounded px-1 py-0.5 font-mono hover:bg-[var(--secondary)]",children:M}),R.map((e,t)=>(0,l.jsxs)("span",{className:"flex items-center gap-0.5",children:[t>0&&(0,l.jsx)(F.A,{className:"h-3 w-3 text-[var(--muted-foreground)]"}),(0,l.jsx)("button",{type:"button",onClick:()=>T(M+R.slice(0,t+1).join("/"),!1),className:"rounded px-1 py-0.5 hover:bg-[var(--secondary)]",children:e})]},t))]}),(0,l.jsxs)("div",{ref:k,className:"min-h-[8rem] flex-1 overflow-y-auto py-1",children:[P.map((e,t)=>(0,l.jsx)("button",{type:"button",onClick:()=>L(e),onPointerEnter:e=>{"mouse"===e.pointerType&&b(t)},className:(0,I.cn)("flex w-full items-center gap-2 px-3 py-2.5 text-left text-sm sm:py-1.5 sm:text-xs",t===g?"bg-[var(--accent)] text-[var(--accent-foreground)]":"hover:bg-[var(--secondary)]"),children:"up"===e?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(tU.A,{className:"h-4 w-4 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{children:".."})]}):(0,l.jsxs)(l.Fragment,{children:["directory"===e.type?(0,l.jsx)(E.A,{className:"h-4 w-4 shrink-0 text-[var(--primary)]"}):(0,l.jsx)(Q.A,{className:"h-4 w-4 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.name}),"file"===e.type&&void 0!==e.size&&(0,l.jsx)("span",{className:"shrink-0 text-[10px] text-[var(--muted-foreground)]",children:(0,I.v7)(e.size)})]})},"up"===e?"..":e.path)),null===x&&(0,l.jsx)("p",{className:"px-3 py-4 text-center text-xs text-[var(--muted-foreground)]",children:d("picker.loading")}),null!==x&&h&&(0,l.jsx)("p",{className:"px-3 py-4 text-center text-xs text-[var(--muted-foreground)]",children:h}),null!==x&&!h&&!x.some(e=>"file"===e.type)&&(0,l.jsx)("p",{className:"px-3 py-4 text-center text-xs text-[var(--muted-foreground)]",children:a.length>0?d("picker.emptyAccept",{accept:a.join(" ")}):d("picker.empty")})]}),(0,l.jsx)("div",{className:"flex justify-end border-t border-[var(--border)] px-3 py-2",children:(0,l.jsx)("button",{type:"button",onClick:()=>A(null),className:"rounded-md border border-[var(--border)] bg-[var(--secondary)] px-4 py-1.5 text-xs hover:opacity-90",children:d("picker.cancel")})})]})}),document.body)}var tH=r(37050);let tK=null,tG=null;function tq(){return tK&&tK.expiresAt-Date.now()>6e4?Promise.resolve(tK.token):(tG||(tG=u.F.extensions.token().then(e=>(tK=e,e.token)).finally(()=>{tG=null})),tG)}function t$(e,t,r,n){return"/api/extensions/".concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t),"/").concat(encodeURIComponent(r),"/").concat(n)}let tJ=(0,o.createContext)(null),tZ=null,tV=new Set;function tY(){for(let e of tV)e()}function tQ(e){return tV.add(e),()=>{tV.delete(e)}}function tX(){return null!==tZ}function t0(){return(0,o.useSyncExternalStore)(tQ,tX,()=>!1)}let t1=!1,t3=!1;function t5(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};tZ&&(t3=!1===e.refocus,d.Uw.getState().setMaximized(!1))}function t2(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{ready:!1,dirty:!1,mtime:null,saving:!1,retried:!1,capabilities:e,bundle:t}}function t4(e){return"object"==typeof e&&null!==e&&1===e.haloExt&&"string"==typeof e.type}function t8(e){return e.capabilities.includes("save")}function t6(e){return e.capabilities.includes("fs-read")}let t9=new Set(["read","write","append","list","stat"]);function t7(e,t){return"string"==typeof e&&(""===e?t:!(e.includes("\\")||e.includes("\0"))&&e.split("/").every(e=>""!==e&&"."!==e&&".."!==e))}function re(e){var t;if("string"!=typeof e||e.includes("\\")||e.includes("\0"))return!1;let r=null==(t=/^(\/|[A-Za-z]:\/)/.exec(e))?void 0:t[0];if(!r)return!1;let n=e.slice(r.length);return""===n||n.split("/").every(e=>""!==e&&"."!==e&&".."!==e)}function rt(e){return"[object ArrayBuffer]"===Object.prototype.toString.call(e)}function rr(e,t){return{type:"post",frame:{haloExt:1,type:"export-error",reason:e,message:t}}}function rn(e,t,r,n){return{type:"post",frame:{haloExt:1,type:"fs-result",id:e,ok:!1,code:t,error:r,...n?{auth:n}:{}}}}function ra(e,t){return{type:"post",frame:{haloExt:1,type:"pick-result",id:e,...t}}}function rs(e,t,r){if(!r.ok)return r.auth?{state:e,effects:[rn(t,"io",r.message,!0)]}:{state:e,effects:[rn(t,404===r.status?"not-found":403===r.status?"denied":"io",r.message)]};let{ok:n,...a}=r;return{state:e,effects:[{type:"post",frame:{haloExt:1,type:"fs-result",id:t,ok:!0,...a},...a.buffer?{transfer:[a.buffer]}:{}}]}}function rl(e,t,r){return r.ok?{state:{...e,saving:!1,retried:!1,dirty:!1,mtime:r.mtime},effects:[{type:"post",frame:{haloExt:1,type:"saved",mtime:r.mtime}},{type:"set-modified",modified:!1}]}:"mtime"in r?e.retried?{state:{...e,saving:!1,retried:!1},effects:[{type:"post",frame:{haloExt:1,type:"save-error",reason:"conflict",message:"file changed on disk again",mtime:r.mtime}},{type:"error",message:"Save failed: the file keeps changing on disk"}]}:{state:{...e,saving:!1},effects:[{type:"confirm-conflict",buffer:t,diskMtime:r.mtime}]}:{state:{...e,saving:!1,retried:!1},effects:[{type:"post",frame:{haloExt:1,type:"save-error",reason:"io",message:r.message}},{type:"error",message:"Save failed: ".concat(r.message)}]}}let ro=new Map;function ri(e,t){return"".concat(null!=e?e:"","::").concat(t)}let rc="microphone; display-capture; clipboard-write",rd=e=>e.replace(/\\/g,"/"),ru={redirect:"manual"};async function rm(e){var t;let r=(0,u.c)(e);if(r)return r;let n=await e.json().catch(()=>({}));return{ok:!1,status:e.status,message:null!=(t=n.error)?t:e.statusText}}async function rp(e){let t=encodeURIComponent(e.path);switch(e.op){case"read":{let e=await fetch("/api/fs/raw?path=".concat(t),ru);return e.ok?{ok:!0,buffer:await e.arrayBuffer()}:await rm(e)}case"list":{let e=await fetch("/api/fs/browse?path=".concat(t,"&files=1"),ru);if(!e.ok)return await rm(e);return{ok:!0,entries:(await e.json()).entries.map(e=>{let{name:t,type:r}=e;return{name:t,type:r}})}}case"stat":{let e=await fetch("/api/fs/stat?path=".concat(t),ru);if(!e.ok)return await rm(e);let r=await e.json();return{ok:!0,size:r.size,mtime:r.modifiedAt}}default:return{ok:!1,status:403,message:"system scope is read-only"}}}async function rx(e,t,r){if("system"===r.scope)try{return await rp(r)}catch(e){return{ok:!1,status:0,message:e instanceof Error?e.message:String(e)}}let n="workspace"===r.scope?r.path:r.path?"".concat(t,"/").concat(r.path):t,a=new URLSearchParams({path:n,projectId:e});try{switch(r.op){case"read":{let t=await fetch(u.F.files.viewUrl(n,e),ru);return t.ok?{ok:!0,buffer:await t.arrayBuffer()}:await rm(t)}case"list":{let e=await fetch("/api/files/tree?".concat(a),ru);if(!e.ok)return await rm(e);let t=await e.json();return{ok:!0,entries:t.tree.map(e=>{let{name:t,type:r}=e;return{name:t,type:r}})}}case"stat":{let e=await fetch("/api/files/stat?".concat(a),ru);if(!e.ok)return await rm(e);let t=await e.json();return{ok:!0,size:t.size,mtime:t.modifiedAt}}case"write":case"append":{let a=await u.F.files.saveRaw(n,r.buffer,e,void 0,{create:!0,append:"append"===r.op,root:t});if(a.ok)return{ok:!0,size:a.size,mtime:a.mtime};return"message"in a?a:{ok:!1,status:a.status,message:"conflict"}}}}catch(e){return{ok:!1,status:0,message:e instanceof Error?e.message:String(e)}}}function rf(e){var t,r;let{info:n,gone:a,name:s,path:i,projectId:c,viewUrl:m,downloadUrl:p,size:x,onOpenAsText:f}=e,{t:h,lang:v}=(0,eZ.s9)(),g=(0,d._r)(),{theme:b}=(0,eX.useTheme)(),y=(0,o.useMemo)(()=>tt(),[b]),j=(0,o.useRef)(null),w=(0,o.useRef)(t2(n.capabilities,n.bundle)),N=(0,o.useRef)(function(){let e=new Map;return{run(t,r){var n;let a=(null!=(n=e.get(t))?n:Promise.resolve()).then(r),s=a.then(()=>{},()=>{});return e.set(t,s),s.then(()=>{e.get(t)===s&&e.delete(t)}),a}}}()),[k,S]=(0,o.useState)(0),C=(0,o.useRef)(k),[A,E]=(0,o.useState)(null),[T,M]=(0,o.useState)("token"),[F,D]=(0,o.useState)(null),[P,L]=(0,o.useState)(null),[R,_]=(0,o.useState)(null),z=(0,o.useRef)(null),[O,U]=(0,o.useState)(null),B=e=>{z.current=e,U(e)},W=(0,o.useRef)(null),H=(0,o.useRef)(null),K=(0,o.useRef)(n.version),G={file:{name:s,path:i,size:null!=x?x:0,ext:null!=(r=null==(t=s.split(".").pop())?void 0:t.toLowerCase())?r:""},theme:y.theme,themeVars:y.themeVars,platform:ev(),lang:v,projectId:c},q=(0,o.useRef)(G),$=(0,o.useRef)(()=>{}),J=(0,o.useCallback)(e=>{for(let t of(w.current=e.state,e.effects))$.current(t)},[]),Z=()=>{W.current&&(clearTimeout(W.current),W.current=null)},V=e=>{var t,r,a,s,l;switch(e.type){case"post":null==(r=j.current)||null==(t=r.contentWindow)||t.postMessage(e.frame,"*",null!=(a=e.transfer)?a:[]);return;case"load":(async()=>{try{var e;let[t,r]=await Promise.all([fetch(m),c?u.F.files.stat(i,c).catch(()=>null):Promise.resolve(null)]);if(!t.ok)throw Error("HTTP ".concat(t.status));let n=await t.arrayBuffer();J(function(e,t,r){let n=[{type:"post",frame:{haloExt:1,type:"load",buffer:t,mtime:null!=r?r:0},transfer:[t]}];return e.dirty&&n.push({type:"set-modified",modified:!1}),{state:{...e,mtime:r,dirty:!1},effects:n}}(w.current,n,null!=(e=null==r?void 0:r.modifiedAt)?e:null))}catch(e){D("Failed to load file: ".concat(e instanceof Error?e.message:String(e)))}})();return;case"put":if(Z(),!c)return void J(rl(w.current,e.buffer,{ok:!1,status:0,message:"no workspace"}));u.F.files.saveRaw(i,e.buffer,c,null!=(s=e.expectMtime)?s:void 0).then(t=>J(rl(w.current,e.buffer,t)));return;case"set-modified":e.modified?g.getState().markModified(i):g.getState().clearModified(i);return;case"error":D(e.message);return;case"confirm-conflict":(async()=>{let t=i.split("/").pop(),r=await (0,I.fN)('"'.concat(t,'" changed on disk since you opened it. Overwrite the disk version with your changes?'))?"overwrite":await (0,I.fN)('Discard your changes and reload "'.concat(t,'" from disk? (Cancel keeps your unsaved changes.)'))?"discard":"cancel";J(function(e,t,r,n){switch(t){case"overwrite":return{state:{...e,saving:!0,retried:!0},effects:[{type:"put",buffer:r,expectMtime:n}]};case"discard":return{state:e,effects:[{type:"load"}]};case"cancel":return{state:e,effects:[]}}}(w.current,r,e.buffer,e.diskMtime))})();return;case"warn":console.warn("[ExtensionHost] ".concat(n.id,": ").concat(e.message));return;case"fs":{if(!c)return void J(rs(w.current,e.id,{ok:!1,status:0,message:"no workspace"}));let t=C.current,r=()=>rx(c,i,e);("write"===e.op||"append"===e.op?N.current.run(e.path,r):r()).then(r=>{C.current===t&&J(rs(w.current,e.id,r))});return}case"export":{let t=C.current,r=e=>{C.current===t&&$.current(e)};if(!c)return void r(rr("io","no workspace"));let n=i.lastIndexOf("/"),a=n<0?e.name:"".concat(i.slice(0,n),"/").concat(e.name);(async()=>{if(await u.F.files.stat(a,c).then(()=>!0,()=>!1)&&!await (0,I.fN)(h("editor.extension.exportOverwrite",{name:e.name})))return r(rr("cancelled","overwrite declined"));let t=await u.F.files.saveRaw(a,e.buffer,c,void 0,{create:!0});if(t.ok){r({type:"post",frame:{haloExt:1,type:"exported",name:e.name,path:a}}),L({path:a,url:u.F.files.downloadUrl(a,c)});return}let n="message"in t?t.message:"HTTP ".concat(t.status);r(rr("io",n)),D(h("editor.extension.exportFailed",{message:n}))})();return}case"pick":{if(!c||z.current)return void J({state:w.current,effects:[ra(e.id,{ok:!1,code:"cancelled",error:c?"a picker is already open":"no workspace"})]});let t=document.fullscreenElement;t&&t!==document.documentElement&&document.exitFullscreen().catch(()=>{});let r=rd(c).replace(/(.)\/$/,"$1"),a=null!=(l=e.start)?l:n.bundle?i:i.includes("/")?i.slice(0,i.lastIndexOf("/")):"",s=re(a)?a:a?"".concat(r,"/").concat(a):r;B({id:e.id,accept:e.accept,start:s,attempt:C.current});return}}},Y=async e=>{let t=z.current;B(null);let r=e=>{t&&t.attempt===C.current&&(J({state:w.current,effects:[ra(t.id,e)]}),ec())};if(!e||!c)return void r({ok:!1,code:"cancelled",error:"picker closed"});try{let[t,n]=await Promise.all([u.F.fs.stat(e.path),u.F.fs.stat(c)]),a=rd(t.realPath),s=rd(n.realPath).replace(/(.)\/$/,"$1"),l=a.startsWith(s.endsWith("/")?s:"".concat(s,"/"));r({ok:!0,path:l?a.slice(s.length).replace(/^\//,""):e.path,name:e.name,size:t.size})}catch(e){r({ok:!1,code:"cancelled",error:"could not stat the picked file: ".concat(e instanceof Error?e.message:String(e))})}};(0,o.useEffect)(()=>{q.current=G,$.current=V});let Q=()=>{_(null),M("token"),D(null),E(null),S(e=>e+1)};(0,o.useEffect)(()=>{let e=!1;return C.current=k,w.current.dirty&&g.getState().clearModified(i),w.current=t2(n.capabilities,n.bundle),tq().then(t=>{e||(K.current=n.version,E(t$(n.id,n.version,t,n.entry)),M("loading"),H.current=setTimeout(()=>{w.current.ready||M("failed")},1e4))}).catch(t=>{e||(D(t instanceof Error?t.message:String(t)),M("failed"))}),()=>{e=!0,H.current&&clearTimeout(H.current)}},[k]),(0,o.useEffect)(()=>{let e=e=>{var t;e.source===(null==(t=j.current)?void 0:t.contentWindow)&&t4(e.data)&&("ready"===e.data.type&&(H.current&&(clearTimeout(H.current),H.current=null),M("ready")),"save"===e.data.type&&Z(),J(function(e,t,r){switch(t.type){case"ready":{let t=e.dirty?[{type:"set-modified",modified:!1}]:[],n={type:"post",frame:{haloExt:1,type:"init",view:"file",protocol:1,file:r.file,capabilities:e.capabilities,theme:r.theme,themeVars:r.themeVars,bundle:e.bundle,platform:r.platform,lang:r.lang,export:t8(e)&&!e.bundle,...r.projectId&&!e.bundle?{jupyter:{projectId:r.projectId}}:{}}};return{state:{...e,ready:!0,dirty:!1},effects:e.bundle?[...t,n]:[...t,n,{type:"load"}]}}case"dirty":if(!e.ready)return{state:e,effects:[{type:"warn",message:"dirty before ready ignored"}]};if(!t8(e)&&!e.bundle)return{state:e,effects:[{type:"warn",message:"dirty from an extension without the save capability ignored"}]};if(e.dirty===t.dirty)return{state:e,effects:[]};return{state:{...e,dirty:t.dirty},effects:[{type:"set-modified",modified:t.dirty}]};case"save":if(!e.ready)return{state:e,effects:[{type:"warn",message:"save before ready ignored"}]};if(!t8(e))return{state:e,effects:[{type:"post",frame:{haloExt:1,type:"save-error",reason:"denied",message:"extension did not declare the save capability"}},{type:"warn",message:"save from an extension without the save capability denied"}]};if(e.saving)return{state:e,effects:[{type:"warn",message:"save while a save is in flight dropped"}]};return{state:{...e,saving:!0},effects:[{type:"put",buffer:t.buffer,expectMtime:e.mtime}]};case"error":return{state:e,effects:[{type:"error",message:t.message}]};case"fs":let{id:n}=t;if("number"!=typeof n||!Number.isFinite(n))return{state:e,effects:[{type:"warn",message:"fs frame without a numeric id ignored"}]};if(void 0!==t.scope){let{scope:r}=t;return"workspace"!==r&&"system"!==r?{state:e,effects:[rn(n,"denied","unknown fs scope: ".concat(String(r)))]}:t6(e)?t9.has(t.op)?"write"===t.op||"append"===t.op?{state:e,effects:[rn(n,"denied","".concat(r," scope is read-only"))]}:("system"===r?re(t.path):t7(t.path,"list"===t.op))?{state:e,effects:[{type:"fs",id:n,op:t.op,path:t.path,scope:r}]}:{state:e,effects:[rn(n,"invalid-path","invalid ".concat(r," path: ").concat(JSON.stringify(t.path)))]}:{state:e,effects:[rn(n,"denied","unknown fs op: ".concat(String(t.op)))]}:{state:e,effects:[rn(n,"denied","".concat(r," fs needs the fs-read capability")),{type:"warn",message:"".concat(r," fs without fs-read denied")}]}}if(!e.bundle)return{state:e,effects:[rn(n,"denied","fs is only available to bundle extensions"),{type:"warn",message:"fs from a non-bundle extension denied"}]};if(!t9.has(t.op))return{state:e,effects:[rn(n,"denied","unknown fs op: ".concat(String(t.op)))]};if(!t7(t.path,"list"===t.op))return{state:e,effects:[rn(n,"invalid-path","invalid bundle path: ".concat(JSON.stringify(t.path)))]};if("write"===t.op||"append"===t.op)return rt(t.buffer)?{state:e,effects:[{type:"fs",id:n,op:t.op,path:t.path,buffer:t.buffer}]}:{state:e,effects:[rn(n,"io","".concat(t.op," needs an ArrayBuffer buffer"))]};return{state:e,effects:[{type:"fs",id:n,op:t.op,path:t.path}]};case"export":var a;if(!e.ready)return{state:e,effects:[{type:"warn",message:"export before ready ignored"}]};if(!t8(e)||e.bundle)return{state:e,effects:[rr("denied","export needs the save capability (non-bundle)"),{type:"warn",message:"export from an extension without export support denied"}]};return"string"!=typeof(a=t.name)||""===a||"."===a||".."===a||/[/\\\0]/.test(a)?{state:e,effects:[rr("invalid","invalid export file name: ".concat(JSON.stringify(t.name)))]}:t.name===r.file.name?{state:e,effects:[rr("invalid","export must not overwrite the open file")]}:rt(t.buffer)?{state:e,effects:[{type:"export",name:t.name,buffer:t.buffer}]}:{state:e,effects:[rr("invalid","export needs an ArrayBuffer buffer")]};case"pick":let{id:s}=t;if("number"!=typeof s||!Number.isFinite(s))return{state:e,effects:[{type:"warn",message:"pick frame without a numeric id ignored"}]};if(!t6(e))return{state:e,effects:[ra(s,{ok:!1,code:"denied",error:"pick needs the fs-read capability"}),{type:"warn",message:"pick without fs-read denied"}]};let l=Array.isArray(t.accept)?t.accept.filter(e=>"string"==typeof e&&""!==e).map(e=>e.toLowerCase()):[],o=t7(t.start,!0)||re(t.start)?t.start:void 0;return{state:e,effects:[{type:"pick",id:s,accept:l,...void 0!==o?{start:o}:{}}]};case"insert-text":case"busy":return{state:e,effects:[{type:"warn",message:"".concat(t.type," frame ignored outside a chat-bar panel")}]}}}(w.current,e.data,q.current)))};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[J]),(0,o.useEffect)(()=>{var e,t,r;J((e=w.current,t=y.theme,r=y.themeVars,e.ready?{state:e,effects:[{type:"post",frame:{haloExt:1,type:"theme",theme:t,themeVars:r}}]}:{state:e,effects:[]}))},[y,J]),(0,o.useEffect)(()=>{var e;J((e=w.current,e.ready?{state:e,effects:[{type:"post",frame:{haloExt:1,type:"lang",lang:v}}]}:{state:e,effects:[]}))},[v,J]);let X=(0,o.useCallback)(()=>{var e;let t=(e=w.current).ready&&t8(e)&&e.dirty&&!e.saving?{state:e,effects:[{type:"post",frame:{haloExt:1,type:"save-request"}}]}:{state:e,effects:[]};J(t),0!==t.effects.length&&(Z(),W.current=setTimeout(()=>{W.current=null,w.current.dirty&&!w.current.saving&&window.alert('Extension "'.concat(n.name,'" did not respond to the save request.'))},5e3))},[J,n.name]);(0,o.useEffect)(()=>(function(e,t,r){let n=ri(e,t);return ro.set(n,r),()=>{ro.get(n)===r&&ro.delete(n)}})(c,i,{requestSave:X,fileChanged(){c&&!w.current.bundle&&u.F.files.stat(i,c).then(e=>{var t,r;return J((t=w.current,r=e.modifiedAt,!t.ready||t.bundle||null!=t.mtime&&r<=t.mtime||t.dirty?{state:t,effects:[]}:{state:t,effects:[{type:"load"}]}))}).catch(()=>{})}}),[c,i,X,J]),(0,o.useEffect)(()=>{if(n.version!==K.current){if(w.current.dirty)return void _(h("editor.extension.updated",{version:n.version}));Q()}},[n.version,h]),(0,o.useEffect)(()=>()=>{Z(),w.current.dirty&&g.getState().clearModified(i)},[g,i]);let ee=async()=>{(!w.current.dirty||await (0,I.fN)('"'.concat(s,'" has unsaved changes. Discard them and reload?')))&&Q()},et=(0,o.useContext)(tJ)===i&&!n.capabilities.includes("save"),[er,en]=(0,o.useState)(!1),[ea]=(0,o.useState)(()=>(function(e){let{enterMs:t=2500,leaveMs:r=1500,tapMs:n=3e3}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=!1,s=null,l=t=>{t!==a&&(a=t,e(t))},o=()=>{s&&(clearTimeout(s),s=null)},i=e=>{o(),s=setTimeout(()=>{s=null,l(!1)},e)};return{start(){l(!0),i(t)},move(e){if(e<=48){o(),l(!0);return}a&&!s&&i(r)},tap(e){e>48||(l(!0),i(n))},dispose:o}})(en)),[es]=(0,o.useState)(()=>{var e,t;return!!(null==(e=(t=window).matchMedia)?void 0:e.call(t,"(pointer: coarse)").matches)}),el=(0,o.useRef)(!1),[eo,ei]=(0,o.useState)(0),ec=()=>{var e;let t=j.current;null==t||t.focus(),null==t||null==(e=t.contentWindow)||e.focus()};(0,o.useEffect)(()=>{if(!et)return;let e=function(){let e={};return tZ=e,tY(),()=>{tZ===e&&(tZ=null,tY())}}();ea.start();let t=!1,r=!1,n=document.documentElement;(function(){let e=t1;return t1=!1,e})()&&!document.fullscreenElement&&n.requestFullscreen&&n.requestFullscreen().then(()=>{t=!0,r&&document.exitFullscreen().catch(()=>{})},()=>{});let a=document.fullscreenElement,s=()=>{let e=document.fullscreenElement,r=null!==a&&a!==n;a=e,t&&!e&&(t=!1,r||t5())},l=e=>{"mouse"===e.pointerType&&ea.move(e.clientY)},o=()=>ea.move(1/0),i=e=>{"mouse"!==e.pointerType&&ea.tap(e.clientY)};return document.addEventListener("fullscreenchange",s),window.addEventListener("pointermove",l),n.addEventListener("mouseleave",o),window.addEventListener("pointerdown",i,!0),()=>{r=!0,document.removeEventListener("fullscreenchange",s),window.removeEventListener("pointermove",l),n.removeEventListener("mouseleave",o),window.removeEventListener("pointerdown",i,!0),ea.dispose(),e(),t&&document.fullscreenElement===n&&document.exitFullscreen().catch(()=>{}),function(){let e=!t3;return t3=!1,e}()&&ec()}},[et,ea]),(0,o.useEffect)(()=>{if(!et||0===eo)return;let e=j.current,t=null==e?void 0:e.contentWindow;if(!e||!t)return;let r=()=>e.getBoundingClientRect().top,n=e=>{"Escape"===e.key&&(t.document.fullscreenElement||(e.preventDefault(),e.stopPropagation(),t5()))},a=e=>{"mouse"===e.pointerType&&ea.move(e.clientY+r())},s=()=>ea.move(1/0),l=e=>{"mouse"!==e.pointerType&&ea.tap(e.clientY+r())},o=null;try{o=t.document,t.addEventListener("keydown",n,!0),t.addEventListener("pointermove",a),t.addEventListener("pointerdown",l,!0),o.documentElement.addEventListener("mouseleave",s)}catch(e){}return ec(),()=>{try{t.removeEventListener("keydown",n,!0),t.removeEventListener("pointermove",a),t.removeEventListener("pointerdown",l,!0),null==o||o.documentElement.removeEventListener("mouseleave",s)}catch(e){}}},[et,eo,ea]);let ed=n.capabilities.includes("save")?(0,l.jsx)(tH.IB,{onClick:X,title:h("editor.extension.save"),children:(0,l.jsx)("span",{children:h("editor.extension.save")})}):void 0;return(0,l.jsx)(tH.no,{name:s,downloadUrl:p,onOpenAsText:f,extraToolbar:ed,hideHeader:et,children:(0,l.jsxs)("div",{"data-immersive":et||void 0,className:(0,I.cn)("flex h-full flex-col",et&&"fixed inset-0 z-[70] bg-[var(--background)]"),children:[a&&(0,l.jsx)(rh,{children:h("editor.extension.".concat(a))}),R&&(0,l.jsxs)(rh,{onClose:()=>_(null),children:[R,(0,l.jsx)("button",{onClick:ee,className:"ml-2 text-[var(--primary)] hover:underline",children:h("editor.extension.reload")})]}),F&&"failed"!==T&&(0,l.jsx)(rh,{onClose:()=>D(null),children:F}),P&&(0,l.jsxs)(rh,{onClose:()=>L(null),children:[h("editor.extension.exported",{path:P.path}),(0,l.jsx)("a",{href:P.url,download:!0,className:"ml-2 text-[var(--primary)] hover:underline",children:h("editor.download")})]}),"failed"===T?(0,l.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 p-8 text-center",children:[(0,l.jsx)("p",{className:"text-sm text-[var(--foreground)]",children:h("editor.extension.unresponsive",{name:n.name})}),F&&(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:F}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("button",{onClick:ee,className:"inline-flex items-center rounded-md bg-[var(--primary)] px-4 py-2 text-xs font-medium text-[var(--primary-foreground)] hover:opacity-90",children:h("editor.extension.retry")}),f&&(0,l.jsx)("button",{onClick:f,className:"inline-flex items-center rounded-md border border-[var(--border)] bg-[var(--secondary)] px-4 py-2 text-xs font-medium text-[var(--foreground)] hover:opacity-90",children:h("editor.openAsText")})]})]}):(0,l.jsxs)("div",{className:"relative min-h-0 flex-1",children:[A&&(0,l.jsx)("iframe",{ref:j,src:A,sandbox:"allow-scripts allow-same-origin",allow:n.capabilities.includes("media")?rc:"",referrerPolicy:"no-referrer",title:n.name,className:"h-full w-full border-0 bg-[var(--background)]",onLoad:()=>ei(e=>e+1)},k),"ready"!==T&&(0,l.jsx)("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center bg-[var(--background)]/80 text-sm text-[var(--muted-foreground)]",children:"Loading preview..."})]}),O&&c&&(0,l.jsx)(tW,{workspace:rd(c),accept:O.accept,start:O.start,onDone:e=>{Y(e)}}),et&&(0,l.jsx)("button",{type:"button",onPointerDown:()=>{el.current=!0},onClick:e=>{let t=el.current;el.current=!1,(t||0===e.detail)&&t5()},onPointerEnter:e=>{"mouse"===e.pointerType&&ea.move(0)},"aria-label":h("editor.immersive.exit"),className:(0,I.cn)("absolute z-10 flex items-center justify-center rounded-full border border-[var(--border)] bg-[var(--card)]/90 text-xs text-[var(--foreground)] shadow-lg backdrop-blur transition-all duration-200",es?"left-2":"left-1/2 -translate-x-1/2",er?"top-2 h-7 gap-1 px-3 opacity-100":es?"top-1.5 h-7 w-7 opacity-60":"pointer-events-none -top-2 h-7 px-3 opacity-0"),children:er||!es?h("editor.immersive.exit"):"\xd7"})]})})}function rh(e){let{children:t,onClose:r}=e;return(0,l.jsxs)("div",{className:"flex shrink-0 items-center gap-2 border-b border-[var(--border)] bg-[var(--card)] px-3 py-1.5 text-xs text-[var(--foreground)]",children:[(0,l.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t}),r&&(0,l.jsx)("button",{onClick:r,className:"shrink-0 text-[var(--muted-foreground)] hover:text-[var(--foreground)]","aria-label":"Dismiss",children:"\xd7"})]})}var rv=r(46415),rg=r(22726);function rb(e){let{candidates:t,current:r,onPick:n}=e,a=(0,eZ.kj)(),[s,i]=(0,o.useState)(!1),c=eS(r);return(0,l.jsxs)("div",{className:"relative",children:[(0,l.jsxs)("button",{onClick:()=>i(e=>!e),title:a("editor.openWith"),className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:[(0,l.jsx)(rv.A,{className:"h-3 w-3"}),(0,l.jsx)("span",{children:a("editor.openWith")})]}),s&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{className:"fixed inset-0 z-20",onClick:()=>i(!1)}),(0,l.jsx)("div",{className:"absolute right-0 top-full z-30 mt-0.5 min-w-[180px] rounded-md border border-[var(--border)] bg-[var(--background)] py-1 shadow-lg",children:t.map(e=>{let t=eS(e),r=t===c;return(0,l.jsxs)("button",{onClick:()=>{i(!1),r||n(e)},className:(0,I.cn)("flex w-full items-center gap-2 px-3 py-1.5 text-left text-[11px] transition-colors hover:bg-[var(--secondary)]",r?"text-[var(--foreground)]":"text-[var(--foreground)]/80"),children:[(0,l.jsx)(rg.A,{className:(0,I.cn)("h-3 w-3 shrink-0",!r&&"invisible")}),(0,l.jsx)("span",{className:"truncate",children:"text"===e.kind?a("editor.openAsText"):"builtin"===e.kind?a("editor.openWith.builtin",{id:e.plugin.id}):e.info.name}),"extension"===e.kind&&(0,l.jsxs)("span",{className:"ml-auto shrink-0 text-[9px] text-[var(--muted-foreground)]",children:["v",e.info.version]})]},t)})})]})]})}function ry(e,t){return e&&null!=t?"".concat(e,"&v=").concat(t):e}let rj="https://github.com/turmind/halo-hub";function rw(){return(0,l.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-[var(--muted-foreground)]",children:"Loading preview..."})}function rN(e){var t,r;ec();let n=(0,d._r)();if(e.tooLarge)return(0,l.jsx)(rS,{...e});let a=null!=(r=null==(t=e.name.split(".").pop())?void 0:t.toLowerCase())?r:"",s=e.bundle?eN(a):ew(a),o=e.bundle?void 0:e.onOpenAsText;return(0,l.jsx)(rk,{...e,onOpenAsText:o,candidates:s,useEditorStore:n},a)}function rk(e){var t,r;let n,a,{candidates:s,useEditorStore:i,...c}=e,[d,u]=(0,o.useState)(null),[m,p]=(0,o.useState)(null),x=i(e=>{var t;return!!(null==(t=e.buffers[c.path])?void 0:t.modified)}),f=e=>s.find(t=>eS(t)===eS(e)),h=null!=(t=d&&f(d))?t:s[0];if((null==m?void 0:m.kind)==="extension"&&!f(m)&&x){h=m;let e=m.info.id;n=ex().disabled.some(t=>t.id===e)?"disabled":"uninstalled"}m&&eS(m)===eS(h)&&("extension"!==m.kind||"extension"!==h.kind||m.info===h.info)||p(h);let v=async e=>{if(!x||await (0,I.fN)('"'.concat(c.name,'" has unsaved changes. Discard them and switch viewer?'))){if("text"===e.kind){var t;null==(t=c.onOpenAsText)||t.call(c);return}u(e)}},g=s.length>2?(0,l.jsx)(rb,{candidates:c.bundle?s.filter(e=>"text"!==e.kind):s,current:h,onPick:v}):null;if("extension"===h.kind&&!c.bundle&&(null!=(r=c.size)?r:0)>0x6400000)a=(0,l.jsx)(tH.no,{name:c.name,downloadUrl:c.downloadUrl,onOpenAsText:c.onOpenAsText,children:(0,l.jsx)(rS,{...c,maxLabel:"100MB"})});else if("extension"===h.kind)a=(0,l.jsx)(rf,{...c,info:h.info,gone:n},h.info.id);else if("builtin"===h.kind){let{Component:e}=h.plugin;a=(0,l.jsx)(o.Suspense,{fallback:(0,l.jsx)(rw,{}),children:(0,l.jsx)(e,{...c,viewUrl:ry(c.viewUrl,c.mtime)},c.mtime)})}else a=(0,l.jsx)(rC,{...c});return(0,l.jsx)(tH.NU.Provider,{value:g,children:a})}function rS(e){let{name:t,size:r,downloadUrl:n,maxLabel:a="10MB"}=e;return(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-4 bg-[var(--background)] p-8",children:[(0,l.jsx)("div",{className:"flex h-16 w-16 items-center justify-center rounded-full bg-[var(--secondary)]",children:(0,l.jsx)(Q.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"})}),(0,l.jsx)("p",{className:"text-sm font-medium text-[var(--foreground)]",children:t}),(0,l.jsxs)("p",{className:"text-xs text-[var(--muted-foreground)]",children:[null!=r?"".concat((0,I.v7)(r)," \xb7 "):"","File is too large to preview (max ",a,")"]}),(0,l.jsx)("a",{href:n,download:!0,className:"inline-flex items-center gap-1.5 rounded-md bg-[var(--primary)] px-4 py-2 text-xs font-medium text-[var(--primary-foreground)] transition-colors hover:opacity-90",children:"Download"})]})}function rC(e){var t,r;let{name:n,projectId:a,downloadUrl:s,onOpenAsText:i,bundle:c}=e,d=(0,eZ.kj)(),[m,p]=(0,o.useState)({url:rj,raw:""}),x=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=ef(e);return en.extensions.filter(e=>ey(e,r,t)&&!eb(e))}(null!=(t=n.split(".").pop())?t:"",!!c),f=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=ef(e);return en.disabled.filter(e=>ey(e,r,t))}(null!=(r=n.split(".").pop())?r:"",!!c);return(0,o.useEffect)(()=>{let e=!0;return u.F.settings.getSchema(a).then(t=>{var r,n;let a=null==(r=t.sections.find(e=>"extension"===e.namespaceId))?void 0:r.fields.find(e=>"hub_repo"===e.key);e&&p({url:function(e){let t=(null!=e?e:"").trim();return!t||t.startsWith("{{")?rj:/^[A-Za-z0-9][\w.-]*\/[\w.-]+$/.test(t)?"https://github.com/".concat(t):/^https?:\/\//.test(t)?t.replace(/\/+$/,"").replace(/\.git$/,""):null}(null==a?void 0:a.value),raw:null!=(n=null==a?void 0:a.value)?n:""})}).catch(()=>{}),()=>{e=!1}},[a]),(0,l.jsx)(tH.no,{name:n,downloadUrl:s,onOpenAsText:i,children:(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-4 bg-[var(--background)] p-8",children:[(0,l.jsx)("div",{className:"flex h-16 w-16 items-center justify-center rounded-full bg-[var(--secondary)]",children:(0,l.jsx)(Q.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"})}),(0,l.jsx)("p",{className:"text-sm font-medium text-[var(--foreground)]",children:n}),(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:d("editor.unsupported.title")}),x.map(e=>{var t;return(0,l.jsx)("p",{className:"text-xs text-[var(--foreground)]",children:d("editor.unsupported.platform",{name:e.name,platforms:eg(null!=(t=e.platforms)?t:[],d)})},e.id)}),f.map(e=>(0,l.jsx)("p",{className:"text-xs text-[var(--foreground)]",children:d("editor.unsupported.disabled",{name:e.name})},e.id)),(0,l.jsxs)("p",{className:"text-xs text-[var(--muted-foreground)]",children:[d("editor.unsupported.hub")," ",m.url?(0,l.jsxs)("a",{href:m.url,target:"_blank",rel:"noopener",className:"text-[var(--primary)] hover:underline",children:[m.url===rj?"halo-hub":m.url.replace(/^https?:\/\//,"")," ↗"]}):(0,l.jsx)("code",{className:"text-[var(--foreground)]",children:m.raw})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[i&&(0,l.jsx)("button",{onClick:i,className:"inline-flex items-center gap-1.5 rounded-md border border-[var(--border)] bg-[var(--secondary)] px-4 py-2 text-xs font-medium text-[var(--foreground)] transition-colors hover:opacity-90",children:d("editor.openAsText")}),s&&(0,l.jsx)("a",{href:s,download:!0,className:"inline-flex items-center gap-1.5 rounded-md bg-[var(--primary)] px-4 py-2 text-xs font-medium text-[var(--primary-foreground)] transition-colors hover:opacity-90",children:d("editor.download")})]})]})})}let rA=(0,g.v)((e,t)=>({projects:[],activeProject:null,folderPath:"",setProjects(t){e({projects:t})},setActiveProject(t){e({activeProject:t})},setFolderPath(t){e({folderPath:t})},openFolder(r,n){var a;let s=r.trim();if(!s)return;let l=null!=(a=s.split("/").filter(Boolean).pop())?a:s,o={id:s,name:l,path:s,workspaceId:n,createdAt:Date.now()},i=t().projects;i.find(e=>e.path===s)||e({projects:[...i,o]}),e({activeProject:o,folderPath:s})}}));var rI=r(65099),rE=r(95037),rT=r(31367);function rM(e,t){if(!e||!t)return!0;let r=t.split("/").filter(Boolean),n=e;for(let e of r){var a;if(!(n=null==n||null==(a=n.children)?void 0:a.find(t=>t.name===e)))return!1}return"directory"===n.type}function rF(e){return new Date(e).toLocaleString(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}let rD=new Set(["tiff","tif","zip","tar","gz","bz2","xz","7z","rar","woff","woff2","ttf","otf","eot","exe","dll","so","dylib","o","a","class","pyc","wasm"]);async function rP(e){return!!(rD.has(e)||eC(e))||(await ep(),eC(e))}function rL(e,t,r){return r?{downloadUrl:"",viewUrl:"",bundle:!0}:{downloadUrl:u.F.files.downloadUrl(e,t),viewUrl:u.F.files.viewUrl(e,t)}}function rR(e){var t;return null!=(t=e.split("/").pop())?t:""}function r_(e){let{projectId:t,mode:r="full",showMaximize:n=!0}=e,a=(0,eZ.kj)(),s=(0,d._r)(),i=s(e=>e.tabs),m=s(e=>e.activeTab),v=s(e=>e.buffers),g=s(e=>e.groups),b=s(e=>e.activeGroupIdx),y=s(e=>e.pinnedTab),j=s(e=>e.maximized),w=t0()&&n&&j,N="editor-only"===r,[k,S]=(0,o.useState)(!0),[C,A]=(0,o.useState)({}),[E,T]=(0,o.useState)({});function M(e){var t;return null==(t=E[e])||t}let[F,D]=(0,o.useState)(null),[P,L]=(0,o.useState)(null),[R,_]=(0,o.useState)(new Set),[z,O]=(0,o.useState)(null),[U,B]=(0,o.useState)(null),[W,H]=(0,o.useState)(null),K=(0,o.useRef)(null),G=(0,o.useRef)(null),{tree:q,loading:$}=function(e){let t=(0,d._r)(),[r,n]=(0,o.useState)(!1),[a,s]=(0,o.useState)(null),l=t(e=>e.fileTree),i=(0,o.useCallback)(async()=>{if(e){n(!0),s(null);try{let r=await u.F.files.tree(e);t.getState().setFileTree(f(e,r))}catch(e){s(e instanceof Error?e.message:"Failed to load file tree"),console.error("[useFileTree] Error:",e)}finally{n(!1)}}},[e,t]);return(0,o.useEffect)(()=>{e&&i()},[e,i]),(0,o.useEffect)(()=>{if(e)return p.on("file:changed",e=>{"add"===e.action||"addDir"===e.action?t.getState().insertFileNode(e.path,"addDir"===e.action?"directory":"file"):("unlink"===e.action||"unlinkDir"===e.action)&&t.getState().removeFileNode(e.path)})},[e,t]),(0,o.useEffect)(()=>{if(e)return x(p,()=>h(e,t))},[e,t]),{tree:l,loading:r,error:a,refresh:i}}(t),[J,Z]=(0,o.useState)(!1),V=(0,o.useRef)(null),Y=ec(),Q=(0,o.useCallback)(e=>{var t,r,n,a;return function(e){var t;let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=(r?eN(e):ew(e))[0];return"builtin"===n.kind?!!n.plugin.heavy:"extension"===n.kind&&!(t=n.info).capabilities.includes("save")&&!t.bundle}(null!=(a=null==(t=e.split(".").pop())?void 0:t.toLowerCase())?a:"",!!(null==(n=s.getState().buffers[e])||null==(r=n.preview)?void 0:r.bundle))},[s]),[X,ee]=(0,o.useState)([]);(0,o.useEffect)(()=>{let e=[];for(let t of g){let r=t.activeTab;if(!r)continue;let n=v[r];(null==n?void 0:n.preview)&&r!==y&&(Q(r)||e.push(r))}0!==e.length&&ee(t=>{let r=t.slice();for(let t=e.length-1;t>=0;t--){let n=e[t];r=[n,...r.filter(e=>e!==n)]}return(r=[...r.slice(0,5),...r.slice(5).filter(e=>{var t;return null==(t=v[e])?void 0:t.modified})],t.length===r.length&&t.every((e,t)=>e===r[t]))?t:r})},[g,v,Q,Y,y]),(0,o.useEffect)(()=>{ee(e=>{let t=new Set;for(let e of g)for(let r of e.tabs)t.add(r);let r=e.filter(e=>t.has(e));return r.length===e.length?e:r})},[g]),(0,o.useEffect)(()=>{s.getState().setModelPathPrefix(null!=t?t:null)},[t,s]),(0,o.useEffect)(()=>{if(!t)return;V.current&&V.current!==t&&((0,d.nm)(V.current,Object.keys(s.getState().buffers)),s.setState(e=>{var t,r;return{buffers:{},groups:[{id:null!=(r=null==(t=e.groups[0])?void 0:t.id)?r:"g0",tabs:[],activeTab:null}],activeGroupIdx:0,tabs:[],activeTab:null,modifiedPaths:new Set,pinnedTab:null}}),Z(!1)),V.current=t;let e="halo_tabs:".concat(t),r=localStorage.getItem(e);if(!r)return void Z(!0);let n=!1;return async function(){try{var e,a,l;let o=JSON.parse(r),i=null!=(a=o.groups)?a:o.tabs?[{tabs:o.tabs,activeTab:null!=(e=o.activeTab)?e:null}]:[],c=null!=(l=o.activeGroupIdx)?l:0;if(0===i.length)return void Z(!0);let d=Array.from(new Set(i.flatMap(e=>e.tabs.map(e=>e.path)))),m=new Map,p=new Set;for(let e of i)for(let t of e.tabs)m.has(t.path)||m.set(t.path,t.language),t.bundle&&p.add(t.path);let x=await Promise.all(d.map(async e=>{var r,n;let a=null!=(n=null==(r=e.split(".").pop())?void 0:r.toLowerCase())?n:"",s=!1;if(p.has(e)){if(await ep(),!ek(rR(e)))return null;s=!0}if(s||await rP(a))try{let r=await u.F.files.stat(e,t);return{path:e,content:"",originalContent:"",language:"",size:r.size,mtime:r.modifiedAt,createdAt:r.createdAt,preview:rL(e,t,s)}}catch(e){return null}try{let r=await u.F.files.read(e,t);return{path:e,content:r.content,originalContent:r.content,language:m.get(e)||(0,I.sQ)(e),mtime:r.modifiedAt,size:r.size,createdAt:r.createdAt}}catch(e){return null}}));if(n)return;let f={};for(let e of x)e&&(f[e.path]=e);let h=i.map((e,t)=>{var r;let n=e.tabs.map(e=>e.path).filter(e=>f[e]),a=e.activeTab&&n.includes(e.activeTab)?e.activeTab:null!=(r=n[0])?r:null;return{id:"g_restored_".concat(t,"_").concat(Date.now().toString(36)),tabs:n,activeTab:a}}).filter(e=>e.tabs.length>0);if(0===h.length)s.setState(e=>{var t,r;return{buffers:{},groups:[{id:null!=(r=null==(t=e.groups[0])?void 0:t.id)?r:"g0",tabs:[],activeTab:null}],activeGroupIdx:0,tabs:[],activeTab:null}});else{let e=Math.max(0,Math.min(c,h.length-1)),t=h[e],r=t.tabs.map(e=>f[e]).filter(e=>!!e);s.setState({buffers:f,groups:h,activeGroupIdx:e,tabs:r,activeTab:t.activeTab})}}catch(e){}n||Z(!0)}(),()=>{n=!0}},[t]),(0,o.useEffect)(()=>{if(!t||!J)return;let e=g.map(e=>({tabs:e.tabs.filter(e=>e!==y).map(e=>{var t;let r=v[e];return{path:e,isPreview:!!(null==r?void 0:r.preview),...(null==r||null==(t=r.preview)?void 0:t.bundle)?{bundle:!0}:{},language:null==r?void 0:r.language}}),activeTab:e.activeTab===y?null:e.activeTab}));localStorage.setItem("halo_tabs:".concat(t),JSON.stringify({groups:e,activeGroupIdx:b}))},[g,b,v,t,J,y]);let et=ty(t);(0,o.useEffect)(()=>{var e;if("editor-only"!==r||!t||!J)return;let n=s.getState();if(!et)return void n.unpinTab();let a=function(){let e=tg;return tg=!1,e}();if(n.pinnedTab===tr&&(null==(e=n.buffers[tr])?void 0:e.preview)&&n.groups.some(e=>e.tabs.includes(tr))){a&&n.setActiveTab(tr);return}let l=!1;return u.F.files.stat(tr,t).then(e=>{l||s.getState().pinTab({path:tr,content:"",originalContent:"",language:"",size:e.size,mtime:e.modifiedAt,createdAt:e.createdAt,preview:rL(tr,t,!1)},a)}).catch(e=>console.warn("[EditorPanel] Face page missing:",e)),()=>{l=!0}},[et,t,J,r,s]);let er=i.find(e=>e.path===m),en=(0,o.useCallback)((e,r)=>{var n,a;if(!t)return;let l=s.getState(),o=ro.get(ri(t,e)),i=(n=l.buffers[e],a={pinned:e===l.pinnedTab,hasHost:!!o},!n||a.pinned?"none":n.preview?a.hasHost?"host":n.preview.bundle?"none":"preview":n.modified?"none":"text");if("none"!==i){if("host"===i){r&&o.fileChanged();return}u.F.files.stat(e,t).then(r=>{let n=s.getState();"preview"===i?n.refreshPreview(e,r.modifiedAt,r.size):n.checkAndRefresh(e,r.modifiedAt,()=>u.F.files.read(e,t))}).catch(()=>{})}},[t,s]),ea=(0,o.useCallback)(()=>{let e=s.getState().activeTab;e&&en(e,!1)},[en,s]);(0,o.useEffect)(()=>{J&&ea()},[m,ea,J]);let es=rA(e=>{var t;return null==(t=e.activeProject)?void 0:t.path});(0,o.useEffect)(()=>{if(t&&es&&"tree-only"!==r)return p.on("file:changed",e=>{var r;if("change"!==(r=e.action)&&"add"!==r)return;let n="".concat(es,"/").concat(e.path),a=t.endsWith("/")?t:"".concat(t,"/");if(!n.startsWith(a))return;let l=n.slice(a.length);s.getState().buffers[l]&&en(l,!0)})},[t,es,r,en,s]),(0,o.useEffect)(()=>{if("tree-only"===r)return;let e=()=>ea();return window.addEventListener("focus",e),()=>window.removeEventListener("focus",e)},[ea,r]),(0,o.useEffect)(()=>{if("tree-only"!==r)return x(p,ea)},[ea,r]);let el=(0,o.useCallback)(async(e,r)=>{var n,a;if(!t)return;if(e===s.getState().pinnedTab)return void s.getState().setActiveTab(e);let l=null!=(a=null==(n=e.split(".").pop())?void 0:n.toLowerCase())?a:"",o=!!(null==r?void 0:r.bundle);if(o||await rP(l)){let r,{downloadUrl:n,viewUrl:a}=rL(e,t,o);try{let n=await u.F.files.stat(e,t);r={size:n.size,mtime:n.modifiedAt,createdAt:n.createdAt}}catch(e){}s.getState().openPreview(e,n,a,{...r,bundle:o});return}if(s.getState().tabs.find(t=>t.path===e))return void s.getState().setActiveTab(e);try{let r=await u.F.files.read(e,t),n=(0,I.sQ)(e);s.getState().openFile(e,r.content,n,r.modifiedAt,{size:r.size,createdAt:r.createdAt})}catch(n){console.error("[EditorPanel] Failed to read file:",n);let r=n instanceof Error?n.message:String(n);if(r.includes("413")||r.includes("too large")){let r;try{let n=await u.F.files.stat(e,t);r={size:n.size,mtime:n.modifiedAt,createdAt:n.createdAt}}catch(e){}s.getState().openPreview(e,u.F.files.downloadUrl(e,t),u.F.files.viewUrl(e,t),{...r,tooLarge:!0})}}},[t]),eo=(0,o.useCallback)(async(e,t)=>{let r=s.getState(),n=r.buffers[t],a=r.groups.some((r,n)=>n!==e&&r.tabs.includes(t));(null==n||!n.modified||a&&!n.preview||await (0,I.fN)('"'.concat(t.split("/").pop(),'" has unsaved changes. Close anyway?')))&&s.getState().closeTabIn(e,t)},[]),ei=(0,o.useCallback)(async e=>{let t=Object.values(s.getState().buffers).filter(t=>{var r;return t.modified&&(null==(r=t.preview)?void 0:r.bundle)&&e.some(e=>t.path===e||t.path.startsWith("".concat(e,"/")))}).map(e=>e.path);for(let e of t)if(!await (0,I.fN)('"'.concat(rR(e),'" has unsaved changes. Close anyway?')))return!1;for(let e of t)s.getState().closeTab(e);return!0},[s]),ed=(0,o.useCallback)(async e=>{if(t)try{let r=await u.F.files.read(e,t),n=(0,I.sQ)(e);s.getState().closeTab(e),s.getState().openFile(e,r.content,n,r.modifiedAt,{size:r.size,createdAt:r.createdAt})}catch(e){console.error("[EditorPanel] Failed to open as text:",e)}},[t]),eu=(0,o.useCallback)((e,t)=>{s.getState().updateContent(e,t)},[]),em=(0,o.useCallback)(async e=>{var r;let n=null!=e?e:m;if(!n||!t)return;let a=s.getState().tabs.find(e=>e.path===n);if(!a||!a.modified||(null==(r=a.preview)?void 0:r.bundle))return;let l=ro.get(ri(t,n));if(l)return void l.requestSave();try{let e=await u.F.files.save(n,a.content,t);s.getState().markSaved(n,e.modifiedAt)}catch(e){console.error("[EditorPanel] Failed to save file:",e)}},[t,m]),ex=(0,o.useCallback)((e,t)=>{let r=s.getState().buffers[t];r&&A(n=>({...n,[e]:{original:r.originalContent,modified:r.content,path:t}}))},[]),ef=(0,o.useCallback)(e=>{A(t=>({...t,[e]:null}))},[]),eh=(0,o.useCallback)(async(e,r)=>{if(!t)return;let n=new AbortController;K.current=n,H({count:e.length,progress:0});try{await u.F.files.upload(e,t,r||void 0,(e,t)=>{t>0&&H(r=>r?{...r,progress:e/t*100}:null)},n.signal),H(e=>e?{...e,progress:100}:null),setTimeout(()=>H(null),400),h(t,s)}catch(e){if(H(null),e instanceof DOMException&&"AbortError"===e.name)return;console.error("[EditorPanel] Upload failed:",e),window.alert(e instanceof Error?e.message:"Upload failed")}finally{K.current=null}},[t]),ev=(0,o.useCallback)(async(e,r)=>{var n;if(!t)return;let a=null!=(n=e.split("/").pop())?n:"",l=r?"".concat(r,"/").concat(a):a;if(e!==l&&await ei([e]))try{await u.F.files.rename(e,l,t);let r=s.getState();r.tabs.find(t=>t.path===e)&&r.closeTab(e),h(t,s)}catch(e){console.error("[EditorPanel] Move failed:",e),window.alert(e instanceof Error?e.message:"Move failed")}},[t,ei]),eg=(0,o.useCallback)((e,t)=>{_(e),t&&O(t)},[]),eb=(0,o.useCallback)(e=>{D(e)},[]),ey=(0,o.useCallback)(async e=>{var r,n,a,l,o;if(!t)return;let i=""===e.path&&e.isDir,c=(()=>{if(!i)return{path:e.path,isDir:e.isDir};if(0===R.size)return{path:"",isDir:!0};let t=R.values().next().value;return{path:t,isDir:rM(q,t)}})(),m=c.isDir?c.path:c.path.includes("/")?c.path.substring(0,c.path.lastIndexOf("/")):"";if("new-file"===e.type||"new-folder"===e.type){m&&eF(m,!0),B({mode:"new-file"===e.type?"create-file":"create-folder",parentDir:m});return}if("open-to-side"===e.type){let l=e.isDir&&ek(rR(e.path));if(e.isDir&&!l)return;try{let o=null!=(n=null==(r=e.path.split(".").pop())?void 0:r.toLowerCase())?n:"",i=l||await rP(o),c=s.getState();1===c.groups.length&&c.splitToRight(null!=(a=c.groups[0].activeTab)?a:e.path);let d=+(s.getState().groups.length>1);if(i){let r=await u.F.files.stat(e.path,t);s.getState().openFileInGroup(d,e.path,"","",r.modifiedAt,{size:r.size,createdAt:r.createdAt}),s.setState(r=>({buffers:{...r.buffers,[e.path]:{...r.buffers[e.path],preview:rL(e.path,t,l)}}}))}else{let r=await u.F.files.read(e.path,t),n=(0,I.sQ)(e.path);s.getState().openFileInGroup(d,e.path,r.content,n,r.modifiedAt,{size:r.size,createdAt:r.createdAt})}}catch(e){console.error("[EditorPanel] Open to the side failed:",e),window.alert(e instanceof Error?e.message:"Open to the side failed")}return}if("open-terminal"===e.type){if(!es)return;let e=m?"".concat(es,"/").concat(m):es;d.Uw.getState().requestTerminalSpawn(e),d.Uw.getState().setBottomTab("terminal");return}if("open-as-workspace"===e.type){if(!e.isDir||!es)return;let t=e.path?"".concat(es,"/").concat(e.path):es;window.dispatchEvent(new CustomEvent("halo:open-workspace",{detail:{path:t}}));return}if("reveal-in-file-manager"===e.type){if(!es)return;let t=window.haloReveal;if(!t)return;let r=e.path?"".concat(es,"/").concat(e.path):es;t.reveal(r,e.isDir);return}if("download"===e.type){if(e.isDir)return void L(e.path);let r=u.F.files.downloadUrl(e.path,t),n=document.createElement("a");return n.href=r,n.download=null!=(l=e.path.split("/").pop())?l:"file",document.body.appendChild(n),n.click(),void n.remove()}if("rename"===e.type){let t=null!=(o=e.path.split("/").pop())?o:"";B({mode:"rename",parentDir:e.path.includes("/")?e.path.substring(0,e.path.lastIndexOf("/")):"",originalPath:e.path,originalName:t});return}if("delete"===e.type){let r=R.size>1&&R.has(e.path)?Array.from(R):[e.path];if(r.length>1){if(!await (0,I.fN)("Delete ".concat(r.length," items?")))return}else{let t=e.isDir?"folder":"file";if(!await (0,I.fN)("Delete ".concat(t,' "').concat(e.path.split("/").pop(),'"?')))return}if(!await ei(r))return;try{for(let e of r)await u.F.files.remove(e,t),s.getState().closeTab(e);_(new Set),h(t,s)}catch(e){console.error("[EditorPanel] Delete failed:",e),window.alert(e instanceof Error?e.message:"Delete failed"),h(t,s)}}},[t,R,ei]),ej=(0,o.useCallback)(()=>{B(null)},[]),eS=(0,o.useCallback)(async e=>{if(!t||!U)return;let r=e.trim();if(""===r)return void B(null);let{mode:n,parentDir:a,originalPath:l,originalName:o}=U;if("rename"===n){if(!l||r===o)return void B(null);let e=a?"".concat(a,"/").concat(r):r;if(!await ei([l]))return void B(null);try{await u.F.files.rename(l,e,t),s.getState().closeTab(l),h(t,s)}catch(e){console.error("[EditorPanel] Rename failed:",e),window.alert(e instanceof Error?e.message:"Rename failed")}return void B(null)}let i=a?"".concat(a,"/").concat(r):r,c="create-file"===n&&ek(r);try{"create-file"!==n||c?await u.F.files.mkdir(i,t):await u.F.files.create(i,t),h(t,s),c&&el(i,{bundle:!0})}catch(e){console.error("[EditorPanel] Create failed:",e),window.alert(e instanceof Error?e.message:"Create failed")}B(null)},[t,U,s,el,ei]);(0,o.useEffect)(()=>{function e(e){var t;let r=null==(t=G.current)?void 0:t.querySelector('button[data-path="'.concat(CSS.escape(e),'"]'));r&&(r.focus({preventScroll:!0}),r.scrollIntoView({block:"nearest"}))}function t(t){if(U)return;let r=G.current;if(!r||!q)return;let n=t.target;if(!n||!r.contains(n)||t.ctrlKey||t.metaKey||t.altKey)return;let a=ez(q);if(0===a.length)return;let s=[...R].map(e=>a.indexOf(e)).filter(e=>e>=0),l=s.length?Math.min(...s):-1,o=s.length?Math.max(...s):-1,i=z?a.indexOf(z):-1,c=0===s.length?-1:i>=0&&l<i?l:o,d=i>=0?i:c,u=t=>{let r=a[t];eg(new Set([r]),r),e(r)};switch(t.key){case"ArrowDown":case"ArrowUp":{t.preventDefault();let r="ArrowDown"===t.key?1:-1;if(t.shiftKey&&d>=0&&c>=0){let t=Math.max(0,Math.min(a.length-1,c+r)),n=Math.min(d,t),s=Math.max(d,t);eg(new Set(a.slice(n,s+1)),a[d]),e(a[t]);return}if(c<0)return void u(1===r?0:a.length-1);u(Math.max(0,Math.min(a.length-1,c+r)));return}case"ArrowRight":{if(t.shiftKey||c<0)return;t.preventDefault();let e=a[c];if(!rM(q,e))return;if(!eD(e))return void eF(e,!0);let r=a[c+1];r&&r.startsWith("".concat(e,"/"))&&u(c+1);return}case"ArrowLeft":{if(t.shiftKey||c<0)return;t.preventDefault();let e=a[c];if(rM(q,e)&&eD(e))return void eF(e,!1);if(!e.includes("/"))return;let r=a.indexOf(e.slice(0,e.lastIndexOf("/")));r>=0&&u(r);return}case"Enter":{if(t.shiftKey||c<0)return;t.preventDefault();let e=a[c],r=rM(q,e);r&&ek(rR(e))?el(e,{bundle:!0}):r?eF(e,!eD(e)):el(e);return}case"Home":case"End":if(t.shiftKey)return;t.preventDefault(),u("Home"===t.key?0:a.length-1);return;case"F2":{var m;if(1!==R.size)return;t.preventDefault();let e=R.values().next().value,r=null!=(m=e.split("/").pop())?m:"";B({mode:"rename",parentDir:e.includes("/")?e.substring(0,e.lastIndexOf("/")):"",originalPath:e,originalName:r});return}}}return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[q,R,z,U,el,eg]);let eC=W&&(0,l.jsxs)("div",{className:"shrink-0 border-b border-[var(--border)] bg-[var(--card)] px-3 py-1.5",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between text-[10px] text-[var(--muted-foreground)]",children:[(0,l.jsxs)("span",{children:["Uploading ",W.count," file",W.count>1?"s":"","..."]}),(0,l.jsxs)("span",{className:"flex items-center gap-1.5",children:[Math.round(W.progress),"%",(0,l.jsx)("button",{type:"button",onClick:()=>{var e;return null==(e=K.current)?void 0:e.abort()},className:"rounded p-0.5 hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",title:"Cancel upload",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})})]})]}),(0,l.jsx)("div",{className:"mt-1 h-1 overflow-hidden rounded-full bg-[var(--secondary)]",children:(0,l.jsx)("div",{className:"h-full rounded-full bg-[var(--primary)] transition-all duration-150",style:{width:"".concat(W.progress,"%")}})})]});if("tree-only"===r)return(0,l.jsxs)("div",{className:"flex h-full flex-col",children:[eC,R.size>0&&(0,l.jsxs)("div",{className:"flex shrink-0 items-center justify-between border-b border-[var(--border)] bg-[var(--secondary)]/50 px-3 py-1.5",children:[(0,l.jsxs)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:[R.size," selected"]}),(0,l.jsx)("button",{onClick:()=>_(new Set),className:"rounded px-1.5 py-0.5 text-[10px] text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})})]}),(0,l.jsx)("div",{ref:G,tabIndex:0,className:"flex-1 overflow-y-auto outline-none",children:$?(0,l.jsx)("div",{className:"p-3 text-xs text-[var(--muted-foreground)]",children:"Loading..."}):q?(0,l.jsx)(eO,{node:q,projectId:t,onSelect:el,onContextMenu:eb,onDropFiles:eh,onMoveFile:ev,selectedPaths:R,onSelectionChange:eg,lastAnchor:z,depth:0,pendingEdit:U,onCommitEdit:eS,onCancelEdit:ej}):(0,l.jsx)("div",{className:"p-3 text-xs text-[var(--muted-foreground)]",children:"No files"})}),F&&(0,l.jsx)(e$,{x:F.x,y:F.y,path:F.path,name:F.name,isDir:F.isDir,selectedCount:R.size>1&&R.has(F.path)?R.size:void 0,onAction:ey,onClose:()=>D(null)}),null!==P&&t&&(0,l.jsx)(eY,{path:P,projectId:t,onClose:()=>L(null)})]});let eA="full"===r&&k;return(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:(0,I.cn)("flex h-10 shrink-0 items-center justify-between border-b border-[var(--border)] px-3",w&&"hidden"),children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:["full"===r&&(0,l.jsx)("button",{onClick:()=>S(!k),className:"rounded p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:k?(0,l.jsx)(e8.A,{className:"h-4 w-4"}):(0,l.jsx)(e6.A,{className:"h-4 w-4"})}),(0,l.jsx)(rI.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:a("nav.canvas")}),er&&(null!=er.size||null!=er.mtime)&&(0,l.jsxs)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:["(",[null!=er.size?(0,I.v7)(er.size):"",null!=er.createdAt?"Created ".concat(rF(er.createdAt)):"",null!=er.mtime?"Modified ".concat(rF(er.mtime)):""].filter(Boolean).join(" \xb7 "),")"]})]}),(0,l.jsx)("div",{className:"flex items-center gap-1",children:n&&(0,l.jsx)("button",{onClick:()=>{let e=s.getState();e.maximized||(t1=!0,setTimeout(()=>{t1=!1},0)),e.toggleMaximized()},title:j?"Exit full screen":"Maximize editor",className:"rounded p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:j?(0,l.jsx)(rE.A,{className:"h-4 w-4"}):(0,l.jsx)(rT.A,{className:"h-4 w-4"})})})]}),(0,l.jsxs)(c.YZ,{direction:"horizontal",autoSaveId:eA?"halo-editor-tree":void 0,children:[eA&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.Zk,{defaultSize:20,minSize:10,maxSize:40,children:(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--card)]",children:[eC,(0,l.jsx)("div",{ref:G,tabIndex:0,className:"flex-1 overflow-y-auto outline-none",children:t?$?(0,l.jsx)("div",{className:"p-3 text-xs text-[var(--muted-foreground)]",children:"Loading..."}):q?(0,l.jsx)(eO,{node:q,projectId:t,onSelect:el,onContextMenu:eb,onDropFiles:eh,onMoveFile:ev,selectedPaths:R,onSelectionChange:eg,lastAnchor:z,depth:0,pendingEdit:U,onCommitEdit:eS,onCancelEdit:ej}):(0,l.jsx)("div",{className:"p-3 text-xs text-[var(--muted-foreground)]",children:"No files"}):(0,l.jsx)("div",{className:"p-3 text-xs text-[var(--muted-foreground)]",children:"Open a folder to view files"})})]})}),(0,l.jsx)(c.TW,{className:"w-px bg-[var(--border)] hover:w-1 hover:bg-[var(--primary)] transition-colors"})]}),(0,l.jsx)(c.Zk,{defaultSize:80,minSize:40,children:(0,l.jsx)(c.YZ,{direction:"horizontal",autoSaveId:"halo-editor-panes",children:g.map((e,r)=>{var a,o;let i=e.tabs.map(e=>v[e]).filter(e=>!!e),m=e.activeTab,p=i.find(e=>e.path===m),x=r===b;return(0,l.jsx)(c.Zk,{defaultSize:100/g.length,minSize:20,children:(0,l.jsxs)("div",{className:(0,I.cn)("flex h-full flex-col overflow-hidden",x&&g.length>1&&"ring-1 ring-inset ring-[var(--primary)]/30",w&&!x&&"hidden"),onMouseDown:()=>s.getState().setActiveGroup(r),children:[i.length>0&&(()=>{let t=M(e.id),n=C[e.id],a=!!(null==p?void 0:p.modified)&&!p.preview;return(0,l.jsx)("div",{className:w?"hidden":"contents",children:(0,l.jsx)(tA,{tabs:i,activeTab:m,groupIdx:r,canSplit:N&&1===g.length,onCloseTab:e=>eo(r,e),renderMode:t,onToggleRenderMode:()=>T(r=>({...r,[e.id]:!t})),showDiffButton:a,onToggleDiff:()=>{n?ef(e.id):p&&ex(e.id,p.path)}})})})(),(0,l.jsx)(tJ.Provider,{value:j&&n&&x?m:null,children:(0,l.jsxs)("div",{className:"flex-1 overflow-hidden",children:[y&&e.tabs.includes(y)&&(null==(a=v[y])?void 0:a.preview)&&(0,l.jsx)("div",{className:(0,I.cn)("h-full",m!==y&&"hidden"),children:(0,l.jsx)(tx,{url:v[y].preview.viewUrl,name:rR(y),face:!0})}),[...X].sort().map(e=>i.find(t=>t.path===e&&t.preview)).filter(e=>!!e).map(e=>{var r;return(0,l.jsx)("div",{className:(0,I.cn)("h-full",(null==p?void 0:p.path)!==e.path&&"hidden"),children:(0,l.jsx)(rN,{path:e.path,name:null!=(r=e.path.split("/").pop())?r:"",projectId:null!=t?t:void 0,downloadUrl:e.preview.downloadUrl,viewUrl:e.preview.viewUrl,tooLarge:e.preview.tooLarge,bundle:e.preview.bundle,size:e.size,mtime:e.mtime,onOpenAsText:()=>ed(e.path)})},e.path)}),(null==p?void 0:p.preview)&&p.path!==y&&Q(p.path)&&!X.includes(p.path)&&(0,l.jsx)("div",{className:"h-full",children:(0,l.jsx)(rN,{path:p.path,name:null!=(o=p.path.split("/").pop())?o:"",projectId:null!=t?t:void 0,downloadUrl:p.preview.downloadUrl,viewUrl:p.preview.viewUrl,tooLarge:p.preview.tooLarge,bundle:p.preview.bundle,size:p.size,mtime:p.mtime,onOpenAsText:()=>ed(p.path)})},p.path),(()=>{let n=C[e.id],a=M(e.id);if(null==p?void 0:p.preview)return null;if(n)return(0,l.jsxs)("div",{className:"h-full flex flex-col",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] bg-[var(--card)] px-3 py-1.5",children:[(0,l.jsxs)("span",{className:"text-xs text-[var(--muted-foreground)]",children:["Diff: ",n.path]}),(0,l.jsx)("button",{onClick:()=>ef(e.id),className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-3.5 w-3.5"})})]}),(0,l.jsx)("div",{className:"flex-1",children:(0,l.jsx)(tj,{original:n.original,modified:n.modified,path:n.path})})]});if(p){var s;let e=a&&"markdown"===p.language,n=a&&"html"===p.language&&!!t;return(0,l.jsxs)(l.Fragment,{children:[e&&(0,l.jsx)(e7,{content:p.content,filePath:p.path,projectId:t}),n&&(0,l.jsx)(tx,{url:p.path===tr?u.F.files.viewUrl(p.path,t):ry(u.F.files.viewUrl(p.path,t),p.mtime),name:null!=(s=p.path.split("/").pop())?s:"",face:p.path===tr}),(0,l.jsx)("div",{className:(0,I.cn)("h-full",(e||n)&&"hidden"),children:(0,l.jsx)(e5,{path:(0,d.y)(t,p.path),content:p.content,language:p.language,onChange:e=>eu(p.path,e),onSave:()=>em(p.path),onClose:()=>eo(r,p.path)})})]})}return(0,l.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,l.jsxs)("div",{className:"text-center",children:[(0,l.jsx)(rI.A,{className:"mx-auto h-8 w-8 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"Open a file to start editing"})]})})})()]})})]})},e.id)}).flatMap((e,t,r)=>t<r.length-1?[e,(0,l.jsx)(c.TW,{className:"w-px bg-[var(--border)] hover:w-1 hover:bg-[var(--primary)] transition-colors"},"rh-".concat(t))]:[e])},g.length)})]}),F&&(0,l.jsx)(e$,{x:F.x,y:F.y,path:F.path,name:F.name,isDir:F.isDir,selectedCount:R.size>1&&R.has(F.path)?R.size:void 0,onAction:ey,onClose:()=>D(null)}),null!==P&&t&&(0,l.jsx)(eY,{path:P,projectId:t,onClose:()=>L(null)})]})}var rz=r(3546);function rO(e){let{info:t,icon:r,fallback:n,className:a}=e,[s,i]=(0,o.useState)(null),[c,d]=(0,o.useState)(!1);if((0,o.useEffect)(()=>{if(!r)return;let e=!1;return tq().then(n=>{e||i(t$(t.id,t.version,n,r))}).catch(()=>{e||d(!0)}),()=>{e=!0,i(null),d(!1)}},[t.id,t.version,r]),!r||c)return(0,l.jsx)(n,{className:a});if(!s)return(0,l.jsx)("span",{"aria-hidden":!0,className:(0,I.cn)("block",a)});let u="url(".concat(JSON.stringify(s),") center / contain no-repeat");return(0,l.jsx)("span",{"aria-hidden":!0,className:(0,I.cn)("block bg-current",a),style:{mask:u,WebkitMask:u}})}function rU(){return{ready:!1}}function rB(e,t,r){let n={type:"post",frame:{haloExt:1,type:"init",view:r,protocol:1,capabilities:t.capabilities,theme:t.theme,themeVars:t.themeVars,platform:t.platform,lang:t.lang}};return{state:{...e,ready:!0},effects:[{type:"ready"},n]}}function rW(e,t,r){switch(t.type){case"ready":return rB(e,r,"activity");case"error":return{state:e,effects:[{type:"error",message:t.message}]};default:return{state:e,effects:[{type:"warn",message:"".concat(t.type," frame ignored on an activity page")}]}}}function rH(e,t){var r,n;let a=e.activity;return null!=(n=null!=(r="zh"===t?null==a?void 0:a.title_zh:void 0)?r:null==a?void 0:a.title)?n:e.name}let rK="ext:";function rG(e){return"".concat(rK).concat(e)}function rq(e){return e.startsWith(rK)}function r$(e){var t;let{info:r}=e;return(0,l.jsx)(rO,{info:r,icon:null==(t=r.activity)?void 0:t.icon,fallback:rz.A,className:"h-5 w-5"})}function rJ(e){let{info:t}=e,{lang:r}=(0,eZ.s9)();return(0,l.jsx)(rZ,{info:t,title:rH(t,r),onFrame:rW,logTag:"ExtensionActivity"})}function rZ(e){let{info:t,title:r,onFrame:n,onInsert:a,onBusy:s,closeRequested:i=!1,logTag:c,compact:d=!1}=e,{t:u,lang:m}=(0,eZ.s9)(),{theme:p}=(0,eX.useTheme)(),x=(0,o.useMemo)(()=>tt(),[p]),f=(0,o.useRef)(null),h=(0,o.useRef)(rU()),v=(0,o.useRef)(null),[g,b]=(0,o.useState)(0),[y,j]=(0,o.useState)(null),[w,N]=(0,o.useState)("loading"),[k,S]=(0,o.useState)(null),C={capabilities:t.capabilities.filter(e=>"media"===e||"transcribe"===e||"stt-local"===e),theme:x.theme,themeVars:x.themeVars,platform:ev(),lang:m},A=(0,o.useRef)(C),E=(0,o.useRef)(n),T=(0,o.useRef)(a),M=(0,o.useRef)(s);(0,o.useEffect)(()=>{A.current=C,E.current=n,T.current=a,M.current=s});let F=(0,o.useCallback)(e=>{for(let l of(h.current=e.state,e.effects)){var r,n,a,s;switch(l.type){case"post":null==(n=f.current)||null==(r=n.contentWindow)||r.postMessage(l.frame,"*");break;case"ready":v.current&&(clearTimeout(v.current),v.current=null),N("ready");break;case"error":S(l.message);break;case"warn":console.warn("[".concat(c,"] ").concat(t.id,": ").concat(l.message));break;case"insert":null==(a=T.current)||a.call(T,l.text);break;case"busy":null==(s=M.current)||s.call(M,l.busy)}}},[t.id,c]);return(0,o.useEffect)(()=>{let e=!1;return h.current=rU(),tq().then(r=>{e||(j(t$(t.id,t.version,r,t.entry)),v.current=setTimeout(()=>{h.current.ready||N("failed")},1e4))}).catch(t=>{e||(S(t instanceof Error?t.message:String(t)),N("failed"))}),()=>{e=!0,v.current&&(clearTimeout(v.current),v.current=null)}},[g,t.id,t.version,t.entry]),(0,o.useEffect)(()=>{let e=e=>{var t;e.source===(null==(t=f.current)?void 0:t.contentWindow)&&t4(e.data)&&F(E.current(h.current,e.data,A.current))};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[F]),(0,o.useEffect)(()=>{var e,t,r;F((e=h.current,t=x.theme,r=x.themeVars,e.ready?{state:e,effects:[{type:"post",frame:{haloExt:1,type:"theme",theme:t,themeVars:r}}]}:{state:e,effects:[]}))},[x,F]),(0,o.useEffect)(()=>{var e;F((e=h.current,e.ready?{state:e,effects:[{type:"post",frame:{haloExt:1,type:"lang",lang:m}}]}:{state:e,effects:[]}))},[m,F]),(0,o.useEffect)(()=>{var e,t;i&&(null==(t=f.current)||null==(e=t.contentWindow)||e.postMessage({haloExt:1,type:"close-request"},"*"))},[i]),(0,l.jsxs)("div",{className:"flex h-full flex-col",children:[k&&"failed"!==w&&(0,l.jsx)(rh,{onClose:()=>S(null),children:k}),"failed"===w?(0,l.jsxs)("div",{className:(0,I.cn)("flex flex-1 flex-col items-center justify-center overflow-auto text-center",d?"gap-2 p-2":"gap-3 p-8"),children:[(0,l.jsx)("p",{className:"text-sm text-[var(--foreground)]",children:u("editor.extension.unresponsive",{name:t.name})}),k&&(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:k}),(0,l.jsx)("button",{onClick:()=>{N("loading"),S(null),j(null),b(e=>e+1)},className:"inline-flex items-center rounded-md bg-[var(--primary)] px-4 py-2 text-xs font-medium text-[var(--primary-foreground)] hover:opacity-90",children:u("editor.extension.retry")})]}):(0,l.jsxs)("div",{className:"relative min-h-0 flex-1",children:[y&&(0,l.jsx)("iframe",{ref:f,src:y,sandbox:"allow-scripts allow-same-origin",allow:t.capabilities.includes("media")?rc:"",referrerPolicy:"no-referrer",title:r,className:"h-full w-full border-0 bg-[var(--background)]"},"".concat(t.id,"@").concat(t.version)),"ready"!==w&&(0,l.jsx)("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center bg-[var(--background)]/80 text-sm text-[var(--muted-foreground)]",children:"Loading..."})]})]})}function rV(e){return e.type?e.type:"user"===e.role?"user":"assistant"===e.role?"assistant":e.toolName?"tool_call":void 0===e.toolOutput||e.toolName?e.usage?"usage":e.systemPrompt?"context":"notification":"tool_result"}var rY=r(4671),rQ=r(46073),rX=r(77497);let r0=/\.(png|jpe?g|gif|webp|bmp|svg)$/i,r1=/\.(mp4|webm|mov|m4v|ogv)$/i,r3=/\.(mp3|wav|flac|aac|m4a|ogg|opus|amr|silk)$/i;function r5(e){return r0.test(e)?"image":r1.test(e)?"video":r3.test(e)?"audio":"file"}function r2(e){let t=[],r=e.replace(/\[(图片|视频|语音消息(?:\s*[^\s]+)?|文件(?:\s*"[^"]*")?)\s*已保存:\s*([^,\]]+)(?:,\s*服务端转写:\s*([^\]]+))?\]/g,(e,r,n,a)=>{let s,l=n.trim();s=r.startsWith("图片")?"image":r.startsWith("视频")?"video":r.startsWith("语音")?"audio":r.startsWith("文件")?"file":r5(l);let o=r.match(/"([^"]+)"/),i=o?o[1]:a?a.trim():void 0;return t.push({path:l,kind:s,label:i}),""});return{text:r=(r=r.replace(/^[ \t]*MEDIA:\s*(\S.*?)\s*$/gm,(e,r)=>{let n=r.trim();return t.push({path:n,kind:r5(n)}),""})).replace(/\n{3,}/g,"\n\n").trim(),media:t}}function r4(e){let{media:t}=e,[r,n]=(0,o.useState)(null);return 0===t.length?null:(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{className:"mt-2 flex flex-wrap gap-2",children:t.map((e,t)=>(0,l.jsx)(r6,{media:e,onOpen:()=>n(e)},"".concat(e.path,"-").concat(t)))}),r&&(0,l.jsx)(r7,{media:r,onClose:()=>n(null)})]})}function r8(e,t){if(!t||!/^(\/|[a-zA-Z]:[\\/]|\\\\)/.test(e))return null;let r=new URLSearchParams;return r.set("path",e),r.set("projectId",t),r.set("inline","1"),"/api/files/download?".concat(r.toString())}function r6(e){var t;let{media:r,onOpen:n}=e,a=rA(e=>{var t,r;return null!=(r=null==(t=e.activeProject)?void 0:t.path)?r:null}),s=r8(r.path,a),o=null!=(t=r.path.split("/").pop())?t:r.path;return s?(0,l.jsxs)("button",{onClick:n,className:"inline-flex items-center gap-1.5 rounded border border-[var(--border)] bg-[var(--secondary)]/30 px-2 py-1 text-[11px] text-[var(--foreground)] cursor-pointer hover:ring-1 hover:ring-[var(--primary)]/40 transition-all no-underline",title:o,children:[(0,l.jsx)(r9,{kind:r.kind}),(0,l.jsx)("span",{className:"truncate max-w-[240px] font-mono",children:r.label||o})]}):(0,l.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded border border-[var(--border)] bg-[var(--secondary)]/30 px-2 py-1 font-mono text-[10px] text-[var(--muted-foreground)]",children:[(0,l.jsx)(r9,{kind:r.kind}),o]})}function r9(e){let{kind:t}=e,r="h-3 w-3";return"image"===t?(0,l.jsx)(rY.A,{className:r}):"video"===t?(0,l.jsx)(rQ.A,{className:r}):"audio"===t?(0,l.jsx)(rX.A,{className:r}):(0,l.jsx)(U.A,{className:r})}function r7(e){var t;let{media:r,onClose:n}=e,a=rA(e=>{var t,r;return null!=(r=null==(t=e.activeProject)?void 0:t.path)?r:null}),s=r8(r.path,a),[i]=(0,o.useState)(()=>Date.now()),c=null!=(t=r.path.split("/").pop())?t:"file";if((0,o.useEffect)(()=>{let e=e=>{"Escape"===e.key&&n()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[n]),!s)return null;let d="".concat(s,"&t=").concat(i),u="".concat(s.replace("&inline=1",""),"&t=").concat(i);return(0,l.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-6",onClick:n,children:["file"!==r.kind&&(0,l.jsx)("a",{href:u,download:c,onClick:e=>e.stopPropagation(),className:"absolute right-14 top-4 rounded p-2 text-white/80 hover:bg-white/10 hover:text-white","aria-label":"Download",title:"Download",children:(0,l.jsx)(eK.A,{className:"h-5 w-5"})}),(0,l.jsx)("button",{onClick:n,className:"absolute right-4 top-4 rounded p-2 text-white/80 hover:bg-white/10 hover:text-white","aria-label":"Close",children:(0,l.jsx)(eJ.A,{className:"h-5 w-5"})}),(0,l.jsxs)("div",{className:"flex max-h-full max-w-full flex-col items-center gap-3",onClick:e=>e.stopPropagation(),children:["image"===r.kind&&(0,l.jsx)(e9.p,{src:d,alt:r.path,className:"max-h-[85vh] max-w-[90vw] object-contain",placeholderClassName:"aspect-video w-[min(90vw,640px)]"}),"video"===r.kind&&(0,l.jsx)("video",{src:d,controls:!0,autoPlay:!0,className:"max-h-[85vh] max-w-[90vw]"}),"audio"===r.kind&&(0,l.jsx)("audio",{src:d,controls:!0,autoPlay:!0,className:"w-[min(80vw,480px)]"}),"file"===r.kind&&(0,l.jsxs)("a",{href:u,download:c,className:"rounded bg-white/10 px-4 py-2 text-sm text-white hover:bg-white/20 no-underline",children:["Download ",c]}),(0,l.jsx)("div",{className:"max-w-[90vw] truncate font-mono text-[11px] text-white/60",children:r.path})]})]})}var ne=r(45764);function nt(e){let t=rV(e);return"tool_call"===t||"tool_result"===t||"usage"===t||"context"===t||"agent_start"===t||"agent_done"===t}function nr(e){if(e.taskId)return!1;let t=rV(e);return"user"===t||"assistant"===t||"notification"===t}function nn(e){var t,r;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now();return!!e.streaming&&!e.content&&!(null==(t=e.toolCalls)?void 0:t.length)&&!(null==(r=e.contentBlocks)?void 0:r.length)&&n-e.timestamp>3e4}let na=0;function ns(e){var t;return"system"!==e.role||"notification"!==rV(e)?null:"".concat(null!=(t=e.taskId)?t:"","\0").concat(e.content)}function nl(e){return null!=e?e:""}function no(e,t,r){if("assistant"===t.role&&t.streaming&&e.streamingIdx.set(nl(t.taskId),r),t.toolCalls)for(let n of t.toolCalls)n.toolUseId&&e.toolUseIdIdx.set(n.toolUseId,r);if(t.contentBlocks)for(let n of t.contentBlocks)"tool_call"===n.type&&n.toolCall.toolUseId&&e.toolUseIdIdx.set(n.toolCall.toolUseId,r)}function ni(e,t){e.streamingIdx.clear(),e.toolUseIdIdx.clear();for(let r=0;r<t.length;r++)no(e,t[r],r)}function nc(e,t){for(let[r,n]of e.streamingIdx){let a=t[n];a&&"assistant"===a.role&&a.streaming&&nl(a.taskId)===r||e.streamingIdx.delete(r)}}function nd(e,t,r){let n=nl(r),a=e.streamingIdx.get(n);if(void 0!==a){let e=t[a];if(e&&"assistant"===e.role&&e.streaming&&e.taskId===r)return a}for(let a=t.length-1;a>=0;a--){let s=t[a];if("assistant"===s.role&&s.streaming&&s.taskId===r)return e.streamingIdx.set(n,a),a}return e.streamingIdx.delete(n),-1}function nu(e,t,r,n,a){if(!a)return{messages:t,slotIdx:nd(e,t,n),copied:!1};let s=nd(e,t,n),l=-1===s?void 0:t[s];if(l&&!(r&&l.agentName&&l.agentName.toLowerCase()!==r.toLowerCase())){var o;let i=null!=(o=l.contentBlocks)?o:[],c=i.length>0?i[i.length-1].turnId:void 0;if(!c||c===a)return{messages:t,slotIdx:s,copied:!1};let d=[...t];return d[s]={...l,streaming:!1},d.push({id:(0,I.$C)(),role:"assistant",content:"",timestamp:Date.now(),streaming:!0,agentName:r,taskId:n}),e.streamingIdx.set(nl(n),d.length-1),{messages:d,slotIdx:d.length-1,copied:!0}}let i=[...t,{id:(0,I.$C)(),role:"assistant",content:"",timestamp:Date.now(),streaming:!0,agentName:r,taskId:n}];return e.streamingIdx.set(nl(n),i.length-1),{messages:i,slotIdx:i.length-1,copied:!0}}function nm(e){let t="",r=[];for(let n of e)"text"===n.type?t+=n.text:"tool_call"===n.type&&r.push(n.toolCall);return{content:t,toolCalls:r,contentBlocks:e}}let np={usableAgentCount:-1,sandboxAvailable:null,screenSource:null,cameraSource:null},nx=new Set;function nf(e){for(let t of(Object.assign(np,e),nx))t.setState(e)}let nh=new Set;function nv(){let e,t={streamingIdx:new Map,toolUseIdIdx:new Map,roundStart:0,lastSnapshot:null},r=(0,ne.y)()((e=()=>queueMicrotask(()=>{if(nx.has(r)&&!r.getState().isStreaming)for(let e of nh)e(r)}),(r,n)=>({messages:[],isStreaming:!1,sessionId:null,pendingMessages:[],contextTokens:0,outputTokens:0,maxContextTokens:0,isCompacting:!1,selectedAgentId:"default",accessLevel:"full",...np,addMessage(e){var n,a;let s={id:null!=(n=e.id)?n:(0,I.$C)(),type:e.type,role:e.role,content:e.content,timestamp:null!=(a=e.timestamp)?a:Date.now(),streaming:e.streaming,agentName:e.agentName,taskId:e.taskId,contentBlocks:e.contentBlocks,toolName:e.toolName,toolInput:e.toolInput,toolOutput:e.toolOutput,systemPrompt:e.systemPrompt,usage:e.usage,turnId:e.turnId,modelId:e.modelId,durationMs:e.durationMs,localImages:e.localImages,clientMsgId:e.clientMsgId};r(r=>{var n;let a,l=function(e,t,r){var n;if("assistant"===r.role||!nr(r))return null;let a=nd(e,t);if(-1===a)return null;let s=t[a],l=null!=(n=s.contentBlocks)?n:[],o=l.findIndex(e=>"tool_call"===e.type&&!e.toolCall.output),i=-1===o?!l.some(e=>"tool_call"===e.type):0===o;if(!s.content.trim()&&i)return{prefix:[...t.slice(0,a),...t.slice(a+1)],slot:s};let c=[...t];return c[a]=-1===o?{...s,streaming:!1}:{...s,...nm(l.slice(0,o)),streaming:!1},{prefix:c,slot:{id:(0,I.$C)(),role:"assistant",timestamp:Date.now(),streaming:!0,agentName:s.agentName,...nm(-1===o?[]:l.slice(o))}}}(t,r.messages,s),o=ns(s);return null!==o&&function(e,t){for(let r=e.length-1;r>=0;r--){let n=ns(e[r]);if(null===n)break;if(n===t)return!0}return!1}(null!=(n=null==l?void 0:l.prefix)?n:r.messages,o)?r:(l?ni(t,a=[...l.prefix,s,l.slot]):(no(t,s,r.messages.length),a=[...r.messages,s]),{messages:a,isStreaming:!!e.streaming&&!e.taskId||r.isStreaming})})},appendThinking(e,n,a,s){r(r=>{var l;let o=nu(t,r.messages,n,a,s);if(-1===o.slotIdx)return r;let i=o.copied?o.messages:[...o.messages],c=i[o.slotIdx],d=[...null!=(l=c.contentBlocks)?l:[]],u=d[d.length-1];return u&&"thinking"===u.type&&(!s||u.turnId===s)?d[d.length-1]={type:"thinking",text:u.text+e,turnId:null!=s?s:u.turnId}:d.push({type:"thinking",text:e,turnId:s}),i[o.slotIdx]={...c,contentBlocks:d},{messages:i}})},updateLastAssistant(e,n,a,s){r(r=>{var l;let o=nu(t,r.messages,n,a,s);if(-1===o.slotIdx)return r;let i=o.copied?o.messages:[...o.messages],c=i[o.slotIdx],d=[...null!=(l=c.contentBlocks)?l:[]],u=d[d.length-1];return u&&"text"===u.type&&(!s||u.turnId===s)?d[d.length-1]={type:"text",text:u.text+e,turnId:null!=s?s:u.turnId}:d.push({type:"text",text:e,turnId:s}),i[o.slotIdx]={...c,content:c.content+e,contentBlocks:d},a?{messages:i}:{messages:i,isStreaming:!0}})},discardTurnText(e){r(r=>{var n,a;let s=nd(t,r.messages);if(-1===s)return r;let l=r.messages[s],o=(null!=(n=l.contentBlocks)?n:[]).filter(t=>"text"!==t.type&&"thinking"!==t.type||t.turnId!==e);if(o.length===(null!=(a=l.contentBlocks)?a:[]).length)return r;let i=[...r.messages];return i[s]={...l,...nm(o)},{messages:i}})},addToolCallToLastAssistant(e,n,a,s){r(r=>{var l,o;if(e.toolUseId&&t.toolUseIdIdx.has(e.toolUseId))return r;let i=nu(t,r.messages,n,a,s);if(-1===i.slotIdx)return r;let c=i.copied?i.messages:[...i.messages],d=c[i.slotIdx],u=[...null!=(l=d.contentBlocks)?l:[]];return u.push({type:"tool_call",toolCall:e,turnId:s}),c[i.slotIdx]={...d,toolCalls:[...null!=(o=d.toolCalls)?o:[],e],contentBlocks:u},e.toolUseId&&t.toolUseIdIdx.set(e.toolUseId,i.slotIdx),{messages:c}})},updateLastToolCallResult(e,n,a,s){r(r=>{var n,l,o,i,c,d,u;if(s){let n=null!=(i=t.toolUseIdIdx.get(s))?i:-1,a=-1===n?void 0:r.messages[n],u=null!=(c=null==a||null==(l=a.toolCalls)?void 0:l.findIndex(e=>e.toolUseId===s))?c:-1,m=null!=(d=null==a||null==(o=a.contentBlocks)?void 0:o.findIndex(e=>"tool_call"===e.type&&e.toolCall.toolUseId===s))?d:-1;if(a&&(-1!==u||-1!==m)){if(-1!==u&&void 0!==a.toolCalls[u].output||-1!==m&&void 0!==a.contentBlocks[m].toolCall.output)return r;let t=a.toolCalls?[...a.toolCalls]:a.toolCalls;t&&-1!==u&&(t[u]={...t[u],output:e});let s=a.contentBlocks?[...a.contentBlocks]:a.contentBlocks;if(s&&-1!==m){let t=s[m];s[m]={type:"tool_call",toolCall:{...t.toolCall,output:e},turnId:t.turnId}}let l=[...r.messages];return l[n]={...a,toolCalls:t,contentBlocks:s},{messages:l}}}let m=nd(t,r.messages,a),p=-1===m?void 0:r.messages[m];if(!p||!(null==(n=p.toolCalls)?void 0:n.length))return r;let x=[...p.toolCalls],f=x.findIndex(e=>void 0===e.output);-1!==f&&(x[f]={...x[f],output:e});let h=[...null!=(u=p.contentBlocks)?u:[]];for(let t=0;t<h.length;t++){let r=h[t];if("tool_call"===r.type&&void 0===r.toolCall.output){h[t]={type:"tool_call",toolCall:{...r.toolCall,output:e},turnId:r.turnId};break}}let v=[...r.messages];return v[m]={...p,toolCalls:x,contentBlocks:h},{messages:v}})},completeStreaming(){r(e=>{let r=e.messages.map(e=>e.streaming?{...e,streaming:!1}:e);return nc(t,r),{messages:r,isStreaming:!1}})},completeAgentStreaming(a,s,l){let o=n().isStreaming;r(e=>{let r=e.messages.filter(nr).length,n=e.messages.map(e=>e.streaming?(!s||e.taskId!==s)&&(s||e.taskId)?e:{...e,streaming:!1}:e),l=n.filter(nr).length,o=n.some(e=>e.streaming&&!e.taskId);return r!==l&&console.warn("[ChatStore:completeAgentStreaming] main msgs changed ".concat(r," -> ").concat(l,", agentName=").concat(a,", taskId=").concat(s)),nc(t,n),{messages:n,isStreaming:o}}),!o||n().isStreaming||l||e()},takeRoundReplies(){let{messages:e}=n(),r=e.slice(t.roundStart).filter(e=>"assistant"===e.role&&!e.taskId);return t.roundStart=e.length,r},noteSnapshot(e,r){t.lastSnapshot={sessionId:e,messages:r}},takeReplaySnapshot(){let e=n().sessionId;return t.lastSnapshot&&e&&t.lastSnapshot.sessionId===e?t.lastSnapshot.messages:null},dropOptimisticSend(e){let{messages:a}=n(),s=a.findIndex(t=>t.clientMsgId===e);if(-1===s)return;let l=a.filter((e,t)=>{var r,n;return t!==s&&!(t>s&&e.streaming&&!e.taskId&&!e.content&&!(null==(r=e.toolCalls)?void 0:r.length)&&!(null==(n=e.contentBlocks)?void 0:n.length))});ni(t,l),t.roundStart=Math.min(t.roundStart,l.length),r({messages:l,isStreaming:l.some(e=>e.streaming&&!e.taskId)})},setSessionId(e){r({sessionId:e})},setMessages(e){ni(t,e),t.roundStart=e.length,r({messages:e})},setTokenUsage(e,t){r({contextTokens:e,outputTokens:t})},setMaxContextTokens(e){e>0&&r({maxContextTokens:e})},setCompacting(e){r({isCompacting:e})},setSelectedAgentId(e){r({selectedAgentId:e})},setUsableAgentCount(e){nf({usableAgentCount:e})},setAccessLevel(e){r({accessLevel:e})},setSandboxAvailable(e){nf({sandboxAvailable:e})},setScreenSource(e){nf({screenSource:e})},setCameraSource(e){nf({cameraSource:e})},addPendingMessage(e){r(t=>({pendingMessages:[...t.pendingMessages,e]}))},removePendingMessage(e){r(t=>({pendingMessages:t.pendingMessages.filter((t,r)=>r!==e)}))},shiftPendingMessage(){let e=n().pendingMessages;if(0===e.length)return;let[t,...a]=e;return r({pendingMessages:a}),t},markChatSendFailed(e){r(r=>{let n=r.messages.findIndex(t=>t.clientMsgId===e);if(-1===n)return r;let a=r.messages.map((e,t)=>{var r,a;return t===n?{...e,sendFailed:!0}:!(t>n)||!e.streaming||e.taskId||e.content||(null==(r=e.toolCalls)?void 0:r.length)||(null==(a=e.contentBlocks)?void 0:a.length)?e:{...e,streaming:!1,interrupted:!0}});return nc(t,a),{messages:a,isStreaming:a.some(e=>e.streaming&&!e.taskId)}})},convergeStaleStreaming(){if(n().isCompacting||0===na)return;let e=Date.now(),a=t=>t.timestamp<=na&&nn(t,e);n().messages.some(a)&&r(e=>{let r=e.messages.map(e=>a(e)?{...e,streaming:!1,interrupted:!0}:e);return nc(t,r),{messages:r,isStreaming:r.some(e=>e.streaming&&!e.taskId)}})},clear(){ni(t,[]),t.roundStart=0,t.lastSnapshot=null,r({messages:[],isStreaming:!1,pendingMessages:[],sessionId:null,contextTokens:0,outputTokens:0,accessLevel:"full"})}})));return nx.add(r),r}function ng(e){nx.delete(e)}function nb(e){for(let t of nx)e(t)}let ny=nv(),nj=new Set;function nw(){return ny}function nN(e){return nj.add(e),()=>{nj.delete(e)}}let nk=Object.assign(function(e){let t=(0,o.useSyncExternalStore)(nN,nw,nw);return(0,g.P)(t,e)},{getState:()=>ny.getState(),setState:function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return ny.setState(...t)}}),nS=new Map,nC=(0,g.v)(()=>({sessionId:null,anchor:0,cursor:0,messages:[],loading:!1}));function nA(e,t){let r=nC.getState();r.sessionId===e&&t<=r.anchor||nC.setState({sessionId:e,anchor:t,cursor:t,messages:[],loading:!1})}function nI(e,t,r){let n=nC.getState();n.sessionId===e&&n.cursor===t&&nC.setState({messages:[...r,...n.messages],cursor:t-1,loading:!1})}async function nE(){var e,t;let r=null==(e=rA.getState().activeProject)?void 0:e.id,{sessionId:n,cursor:a,loading:s}=nC.getState();if(!r||!n||a<1||s)return;let l="".concat(n,"\0").concat(a),o=nS.get(l);if(o)return void nI(n,a,o);nC.setState({loading:!0});try{let e=null!=(t=(await u.F.sessionLogs.archiveSegment(n,a,r)).messages)?t:[];if(nS.size>=20){let e=nS.keys().next().value;void 0!==e&&nS.delete(e)}nS.set(l,e),nI(n,a,e)}catch(e){nC.setState({loading:!1})}}function nT(e){return{tabId:(0,I.$C)(),sessionId:null,store:e}}let nM=nT(nw()),nF=(0,g.v)(()=>({projectId:null,tabs:[nM],activeTabId:nM.tabId})),nD=e=>"halo_chat_tabs_".concat(e);function nP(){var e,t;let{projectId:r,tabs:n,activeTabId:a}=nF.getState();if(!r)return;let s=null!=(t=null==(e=n.find(e=>e.tabId===a))?void 0:e.sessionId)?t:null;try{localStorage.setItem(nD(r),JSON.stringify({active:s}))}catch(e){}}let nL=new Map;function nR(e,t){nL.set(e,{scrollTop:0,userScrolledUp:!1,hiddenTurns:0,...nL.get(e),...t})}function n_(e){return nF.getState().tabs.find(e)}function nz(e,t){nF.setState(r=>({tabs:r.tabs.map(r=>r.tabId===e?{...r,...t}:r)}))}function nO(e){return null===e.sessionId&&(!e.store||0===e.store.getState().messages.length)}function nU(e,t){let r=nw().getState(),n=nv(),a=n.getState();return a.setSelectedAgentId(null!=t?t:r.selectedAgentId),a.setMaxContextTokens(r.maxContextTokens),e&&a.setSessionId(e),n}function nB(e){var t;let r=null==(t=rA.getState().activeProject)?void 0:t.id;r&&p.connected&&p.send({type:"subscribe",sessionId:e,projectId:r})}function nW(e){let t=n_(t=>t.tabId===e);if(!t)return null;let r={},n=null,a=t.store;!a&&(r.store=a=nU(t.sessionId),t.sessionId&&(n=t.sessionId,r.loading=!0,r.attempt=(null!=(s=t.attempt)?s:0)+1)),t.unread&&(r.unread=!1);var s,l,o=a;if(o!==ny)for(let e of(ny=o,nj))e();return nF.setState(t=>({activeTabId:e,tabs:Object.keys(r).length>0?t.tabs.map(t=>t.tabId===e?{...t,...r}:t):t.tabs})),t.sessionId&&nA(t.sessionId,null!=(l=t.archiveCount)?l:0),nP(),n}function nH(e){let t=nK(e);t&&nB(t)}function nK(e){let t=nF.getState(),r=t.tabs.find(t=>t.sessionId===e);if(r)return nW(r.tabId);let n={tabId:(0,I.$C)(),sessionId:e},a=t.tabs.find(e=>e.tabId===t.activeTabId),s=a&&nO(a)?a:null;nF.setState({tabs:s?t.tabs.map(e=>e===s?n:e):[...t.tabs,n]});let l=nW(n.tabId);return s&&(s.store&&ng(s.store),nL.delete(s.tabId)),l}function nG(e){let t=nF.getState(),r=t.tabs.find(nO);if(r){var n;nW(r.tabId),e&&(null==(n=r.store)||n.getState().setSelectedAgentId(e));return}let a=nT(nU(null,e));nF.setState({tabs:[...t.tabs,a]}),nW(a.tabId)}function nq(e){let t=n_(t=>t.sessionId===e);t&&function(e){let t=nF.getState(),r=t.tabs.findIndex(t=>t.tabId===e);if(-1===r)return;let n=t.tabs[r],a=t.tabs.filter(t=>t.tabId!==e);if(0===a.length&&(a=[nT(nU(null))]),nF.setState({tabs:a}),t.activeTabId===e){let e=nW(a[Math.min(r,a.length-1)].tabId);e&&nB(e)}else nP();n.store&&ng(n.store),nL.delete(e)}(t.tabId)}function n$(e){let t=nw();t.getState().sessionId!==e&&t.getState().setSessionId(e);let r=n_(e=>e.store===t);r&&r.sessionId!==e&&(nz(r.tabId,{sessionId:e}),nP())}function nJ(e){var t;let r=[];return nb(t=>{t.getState().sessionId===e&&r.push(t)}),null!=(t=r[0])?t:null}function nZ(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1],r=e?nJ(e):nw();if(r&&t&&r!==nw()){let e=n_(e=>e.store===r);e&&!e.unread&&nz(e.tabId,{unread:!0})}return r}function nV(e){e.store&&(ng(e.store),nz(e.tabId,{store:void 0,loading:!1,unread:!1}))}function nY(e){return"halo_goal_dismissed_".concat(e)}let nQ=(0,g.v)(e=>({enabled:!1,setEnabled:t=>e({enabled:t}),goal:null,dismissedGoalId:null,setGoal:t=>e({goal:t}),dismiss:t=>{var r;e({dismissedGoalId:t});let n=null==(r=rA.getState().activeProject)?void 0:r.id;n&&localStorage.setItem(nY(n),t)}}));async function nX(e){if(!nQ.getState().enabled)return;let t=localStorage.getItem(nY(e));nQ.setState({dismissedGoalId:t});try{var r;let t=await u.F.sessionLogs.goal(e);nQ.getState().setGoal(null!=(r=t.goal)?r:null)}catch(e){}}let n0=(0,g.v)(()=>({sessionId:null,anchor:0,cursor:0,messages:[],loading:!1}));function n1(e,t){let r=n0.getState();r.sessionId===e&&t<=r.anchor||n0.setState({sessionId:e,anchor:t,cursor:t,messages:[],loading:!1})}async function n3(){var e,t;let r=null==(e=rA.getState().activeProject)?void 0:e.id,{sessionId:n,cursor:a,loading:s}=n0.getState();if(r&&n&&!(a<1)&&!s){n0.setState({loading:!0});try{let e=await u.F.sessionLogs.archiveSegment(n,a,r),s=n0.getState();if(s.sessionId!==n||s.cursor!==a)return;n0.setState({messages:[...null!=(t=e.messages)?t:[],...s.messages],cursor:a-1,loading:!1})}catch(t){let e=n0.getState();e.sessionId===n&&e.cursor===a&&n0.setState({loading:!1})}}}let n5=new Map,n2=null,n4=!1;function n8(e){return n5.get(e)}function n6(e,t,r){let n=n5.get(e);if(n){n.messages=t,n.archiveCount=r;return}if(n5.set(e,{messages:t,archiveCount:r,scrollOffset:0,atBottom:!0,stale:!1}),!(n5.size<=20)){for(let e of n5.keys())if(e!==n2)return void n5.delete(e)}}function n9(e,t){let r=n5.get(e);r&&(r.stale=t)}function n7(e){for(let t of n5.keys())(t===e||t.startsWith("".concat(e,">")))&&n5.delete(t)}function ae(e){return e.slice(e.lastIndexOf(">")+1)}function at(e,t){if(t)return e.find(e=>void 0!==e.store&&!e.loading&&e.sessionId===t)}function ar(){let e=(0,g.v)(e=>({version:0,bump:()=>e(e=>({version:e.version+1}))}));return{useBus:e,bump:()=>e.getState().bump()}}let an=ar(),aa=an.useBus,as=an.bump;function al(e,t){let r=(0,o.useRef)(null);return(0,o.useEffect)(()=>{let t=r.current;if(!t||"undefined"==typeof IntersectionObserver)return;let n=new IntersectionObserver(t=>{var r;(null==(r=t[0])?void 0:r.isIntersecting)&&e()},{rootMargin:"64px"});return n.observe(t),()=>n.disconnect()},[e,t]),r}var ao=r(63129),ai=r(22936),ac=r(70207),ad=r(4882),au=r(87343);let am=(0,g.v)(e=>({selectedAgent:null,selectedSessionId:null,selectedSession:null,loadedMessages:null,loading:!1,setSelectedSession:t=>e({selectedAgent:t.agentName||t.agentId,selectedSessionId:t.id,selectedSession:t,loadedMessages:null}),setLoadedMessages:t=>e({loadedMessages:t,loading:!1}),setLoading:t=>e({loading:t}),clearSelection:()=>e({selectedAgent:null,selectedSessionId:null,selectedSession:null,loadedMessages:null,loading:!1})}));function ap(e){let t=new Map;for(let r of e)t.set(r.id,{...r,children:[]});let r=[];for(let e of t.values())e.parentSessionId&&t.has(e.parentSessionId)?t.get(e.parentSessionId).children.push(e):r.push(e);for(let e of t.values())e.children.sort((e,t)=>t.updatedAt-e.updatedAt);return r}function ax(e){let t=0;for(let r of e)t+=1+ax(r.children);return t}function af(e){let{value:t,onChange:r,onCommit:n,onCancel:a,textSize:s}=e;return(0,l.jsx)("input",{autoFocus:!0,value:t,onChange:e=>r(e.target.value),onClick:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),onKeyDown:e=>{"Enter"===e.key?(e.preventDefault(),n()):"Escape"===e.key&&(e.preventDefault(),a())},onBlur:n,className:(0,I.cn)("min-w-0 flex-1 rounded border border-[var(--border)] bg-[var(--background)] px-1 py-0.5 text-[var(--foreground)] outline-none focus:border-blue-500",s)})}function ah(e){let{nodes:t,depth:r,expanded:n,selectedSessionId:a,onToggle:s,onSelect:o,editingId:i,editingTitle:c,setEditingTitle:d,onStartRename:u,onCommitRename:m,onCancelRename:p}=e,x=(0,eZ.kj)(),f=nQ(e=>e.enabled),h=12+16*r;return(0,l.jsx)(l.Fragment,{children:t.map(e=>{let t=a===e.id,v=!!e.stoppedAt,g=!!e.archivedAt,b=e.children.length>0,y=n.has(e.id);return(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{onClick:()=>o(e),title:"Click to preview sub-agent session",className:(0,I.cn)("group flex w-full items-center gap-1.5 pr-3 py-1.5 text-left transition-colors border-b border-[var(--border)]/10",t?"bg-[var(--secondary)]":"hover:bg-[var(--secondary)]/40",g&&"opacity-50"),style:{paddingLeft:"".concat(h,"px")},children:[b?(0,l.jsx)("span",{onClick:t=>{t.stopPropagation(),s(e.id)},className:"shrink-0 flex items-center justify-center w-4 h-4 -ml-0.5 cursor-pointer rounded hover:bg-[var(--muted)]/50",children:(0,l.jsx)(F.A,{className:(0,I.cn)("h-2.5 w-2.5 text-[var(--muted-foreground)] transition-transform",y&&"rotate-90")})}):(0,l.jsx)("span",{className:"w-4 shrink-0 -ml-0.5"}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,l.jsx)("span",{className:"shrink-0 rounded bg-purple-900/50 px-1 py-0.5 text-[8px] text-purple-400",children:e.agentName||e.agentId}),i===e.id?(0,l.jsx)(af,{value:c,onChange:d,onCommit:()=>m(e.id),onCancel:p,textSize:"text-[10px]"}):(0,l.jsxs)("p",{className:"truncate text-[10px] text-[var(--foreground)]",children:[f&&e.goalSessionId&&(0,l.jsx)("span",{title:"Goal-bound worker session",className:"mr-1",children:"\uD83C\uDFAF"}),e.title||"Untitled"]}),v&&(0,l.jsx)("span",{title:"Stopped",children:(0,l.jsx)(ao.A,{className:"h-2.5 w-2.5 shrink-0 text-[var(--muted-foreground)]"})}),g&&(0,l.jsx)("span",{title:"Archived",children:(0,l.jsx)(ai.A,{className:"h-2.5 w-2.5 shrink-0 text-amber-500"})}),b&&(0,l.jsxs)("span",{className:"text-[9px] text-[var(--muted-foreground)]",children:["+",ax(e.children)]})]}),(0,l.jsxs)("p",{className:"text-[9px] text-[var(--muted-foreground)]",children:[e.exchangeCount," msgs \xb7 ",(0,I.fw)(e.updatedAt,x)]})]}),i!==e.id&&(0,l.jsx)("span",{onClick:t=>u(t,e),title:"Rename",className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100 hover:text-blue-400 transition-opacity",children:(0,l.jsx)(eq.A,{className:"h-2.5 w-2.5"})})]}),y&&b&&(0,l.jsx)(ah,{nodes:e.children,depth:r+1,expanded:n,selectedSessionId:a,onToggle:s,onSelect:o,editingId:i,editingTitle:c,setEditingTitle:d,onStartRename:u,onCommitRename:m,onCancelRename:p})]},e.id)})})}let av=e=>"halo_selected_session_".concat(e);function ag(e){let t=[];return!function e(r){for(let n of r)t.push(n),e(n.children)}(e),t}function ab(){let e=(0,eZ.kj)(),t=nk(e=>e.isStreaming),r=nk(e=>e.sessionId),n=rA(e=>e.activeProject),{selectedSessionId:a,setSelectedSession:s,clearSelection:i,setLoadedMessages:c,setLoading:d}=am(),[m,p]=(0,o.useState)([]),[x,f]=(0,o.useState)(null),h=(0,o.useRef)(0),v=(0,o.useRef)(null),[g,b]=(0,o.useState)(new Set),[y,j]=(0,o.useState)(!0),[w,N]=(0,o.useState)(!1),k=(0,o.useRef)(null),[S,C]=(0,o.useState)(null),[A,E]=(0,o.useState)(""),T=(0,o.useRef)(""),M=(0,o.useRef)(null),D=(0,o.useRef)(!1);(0,o.useEffect)(()=>{(null==n?void 0:n.id)&&k.current&&k.current!==n.id&&(i(),n5.clear(),k.current=null)},[null==n?void 0:n.id,i]);let P=(0,o.useCallback)(async function(){let{showSpinner:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{showSpinner:!0};if(!(null==n?void 0:n.path)){p([]),f(null),j(!1);return}if(null!==M.current){D.current=!0;return}D.current=!1,e&&j(!0);let t=n.path,r=Date.now();try{let e=await u.F.sessionLogs.list(t,{includeArchived:!0,limit:30}),r=e.sessions,n=e.nextCursor;if(v.current!==t||h.current<=30||null===n)p(ap(r)),f(n);else{let e=new Set(r.map(e=>e.id));p(t=>{let a=t.filter(t=>t.updatedAt<n&&!e.has(t.id));return ap([...r,...ag(a)])})}v.current=t}catch(e){console.error("[Sessions] Failed to fetch:",e),p([]),f(null)}finally{e?setTimeout(()=>j(!1),Math.max(0,350-(Date.now()-r))):j(!1)}},[null==n?void 0:n.path]),R=(0,o.useCallback)(async()=>{if((null==n?void 0:n.path)&&null!==x&&!w){N(!0);try{let e=await u.F.sessionLogs.list(n.path,{includeArchived:!0,limit:30,cursor:x}),t=e.sessions;p(e=>{let r=ag(e),n=new Set(r.map(e=>e.id)),a=[...r,...t.filter(e=>!n.has(e.id))];return ap(a)}),f(e.nextCursor)}catch(e){console.error("[Sessions] loadMore failed:",e)}finally{N(!1)}}},[null==n?void 0:n.path,x,w]);(0,o.useEffect)(()=>{h.current=m.length},[m.length]);let _=aa(e=>e.version),z=(0,o.useRef)(!0);(0,o.useEffect)(()=>{P({showSpinner:z.current}),z.current=!1},[P,_]),(0,o.useEffect)(()=>{a&&!y&&!new Set(ag(m).map(e=>e.id)).has(a)&&(i(),(null==n?void 0:n.id)&&localStorage.removeItem(av(n.id)))},[m,a,y,i,null==n?void 0:n.id]);let O=(0,o.useCallback)(e=>{b(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),U=(0,o.useCallback)(async e=>{var t,r;let a=am.getState();if(a.selectedSessionId===e.id&&(null!==a.loadedMessages||a.loading))return;s(e),d(!0),(null==n?void 0:n.id)&&localStorage.setItem(av(n.id),e.id);let l=at(nF.getState().tabs,e.id);if(null==l?void 0:l.store){n1(e.id,null!=(t=l.archiveCount)?t:0),c(l.store.getState().messages);return}let o=n8(e.id);if(o){n1(e.id,o.archiveCount),c(o.messages);return}let i=()=>am.getState().selectedSessionId===e.id;try{let t=await u.F.sessionLogs.get(e.id,null==n?void 0:n.path),a="number"==typeof t.archiveCount?t.archiveCount:0,s=null!=(r=t.messages)?r:[];if(n6(e.id,s,a),!i())return;n1(e.id,a),c(s)}catch(t){if(console.error("[Sessions] Load failed:",t),!i())return;n1(e.id,0),c([])}},[null==n?void 0:n.id,null==n?void 0:n.path,s,c,d]);(0,o.useEffect)(()=>{if(!(null==n?void 0:n.id)||y||0===m.length||k.current===n.id)return;k.current=n.id;let e=localStorage.getItem(av(n.id));if(!e)return;let t=ag(m),r=t.find(t=>t.id===e);if(!r)return;let a=new Map(t.map(e=>[e.id,e])),s=[],l=r;for(;null==l?void 0:l.parentSessionId;)s.push(l.parentSessionId),l=a.get(l.parentSessionId);s.length>0&&b(e=>{let t=new Set(e);for(let e of s)t.add(e);return t}),U(r)},[null==n?void 0:n.id,y,m,U]);let B=(0,o.useCallback)(e=>{nH(e.id)},[]),W=(0,o.useCallback)(async(t,r)=>{if((t.stopPropagation(),null==n?void 0:n.path)&&await (0,I.fN)(e("chat.sessions.deleteTreeConfirm")))try{p(e=>e.filter(e=>e.id!==r)),nq(r),n7(r),a===r&&(i(),(null==n?void 0:n.id)&&localStorage.removeItem(av(n.id))),await u.F.sessionLogs.delete(r,n.path),as()}catch(e){console.error("[Sessions] Delete failed:",e),as()}},[null==n?void 0:n.path,null==n?void 0:n.id,a,i,e]),H=(0,o.useCallback)((e,t)=>{e.stopPropagation(),M.current=t.id,T.current=t.title||"",C(t.id),E(t.title||"")},[]),K=(0,o.useCallback)(()=>{M.current=null,C(null),E(""),D.current&&P({showSpinner:!1})},[P]),G=(0,o.useCallback)(async e=>{if(M.current!==e)return;let t=A.trim();if(!t||t===T.current||!(null==n?void 0:n.path))return void K();M.current=null,C(null),p(r=>(function e(t,r,n){return t.map(t=>t.id===r?{...t,title:n}:{...t,children:e(t.children,r,n)})})(r,e,t));try{await u.F.sessionLogs.rename(e,t,n.path),as()}catch(e){console.error("[Sessions] Rename failed:",e),as()}},[A,null==n?void 0:n.path,K]),q=m.length,$=al(R,m.length);return(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex h-10 shrink-0 items-center gap-2 border-b border-[var(--border)] px-3",children:[(0,l.jsx)(ac.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:"Sessions"}),q>0&&(0,l.jsxs)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:["(",q,null!==x?"+":"",")"]}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsx)("button",{onClick:()=>P(),disabled:y,className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] transition-colors disabled:opacity-50",title:"Refresh sessions",children:(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",y&&"animate-spin")})}),t&&(0,l.jsx)("span",{className:"rounded bg-blue-900/50 px-1.5 py-0.5 text-[9px] text-blue-400 animate-pulse",children:"running"})]}),(0,l.jsx)("div",{className:"flex-1 overflow-y-auto",children:y?(0,l.jsxs)("div",{className:"flex items-center justify-center py-8 text-xs text-[var(--muted-foreground)]",children:[(0,l.jsx)(L.A,{className:"h-3.5 w-3.5 animate-spin mr-1.5"})," Loading..."]}):0===m.length?(0,l.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 p-6 text-center",children:[(0,l.jsx)(au.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:"No session history yet"}),(0,l.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)]",children:"Start a conversation in the Chat panel"})]}):(0,l.jsxs)(l.Fragment,{children:[m.map(t=>{let n=t.children,s=g.has(t.id),o=t.id===r,i=a===t.id,c=!!t.archivedAt,d=n.length>0,u=ax(n);return(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{onClick:()=>U(t),onDoubleClick:()=>B(t),title:"Click to preview, double-click to load into chat",className:(0,I.cn)("group flex w-full items-center gap-1.5 px-3 py-2 text-left border-b border-[var(--border)]/30 transition-colors",i?"bg-[var(--secondary)]":"hover:bg-[var(--secondary)]/50",c&&"opacity-50"),children:[d?(0,l.jsx)("span",{onClick:e=>{e.stopPropagation(),O(t.id)},className:"shrink-0 flex items-center justify-center w-5 h-5 -ml-1 cursor-pointer rounded hover:bg-[var(--muted)]/50",children:(0,l.jsx)(F.A,{className:(0,I.cn)("h-3 w-3 text-[var(--muted-foreground)] transition-transform",s&&"rotate-90")})}):(0,l.jsx)("span",{className:"w-5 shrink-0 -ml-1"}),(0,l.jsx)(ac.A,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0",o?"text-blue-400":"text-[var(--muted-foreground)]")}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("div",{className:"flex items-center gap-1.5",children:[S===t.id?(0,l.jsx)(af,{value:A,onChange:E,onCommit:()=>void G(t.id),onCancel:K,textSize:"text-[11px]"}):(0,l.jsx)("p",{className:"truncate text-[11px] font-medium text-[var(--foreground)]",children:t.title||"Untitled"}),o&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-blue-900/50 px-1 py-0.5 text-[8px] text-blue-400",children:"active"}),c&&(0,l.jsx)("span",{title:"Archived",children:(0,l.jsx)(ai.A,{className:"h-2.5 w-2.5 shrink-0 text-amber-500"})}),d&&(0,l.jsxs)("span",{className:"text-[9px] text-[var(--muted-foreground)]",children:["+",u]})]}),(0,l.jsxs)("p",{className:"text-[9px] text-[var(--muted-foreground)]",children:[t.exchangeCount," msgs \xb7 ",(0,I.fw)(t.updatedAt,e)]})]}),S!==t.id&&(0,l.jsx)("button",{onClick:e=>H(e,t),title:"Rename",className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100 hover:text-blue-400 transition-opacity",children:(0,l.jsx)(eq.A,{className:"h-3 w-3"})}),(0,l.jsx)("button",{onClick:e=>W(e,t.id),className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100 hover:text-red-400 transition-opacity",children:(0,l.jsx)(eU.A,{className:"h-3 w-3"})})]}),s&&d&&(0,l.jsx)(ah,{nodes:n,depth:1,expanded:g,selectedSessionId:a,onToggle:O,onSelect:U,editingId:S,editingTitle:A,setEditingTitle:E,onStartRename:H,onCommitRename:G,onCancelRename:K})]},t.id)}),null!==x&&(0,l.jsx)("div",{ref:$,className:"flex items-center justify-center py-2 text-[10px] text-[var(--muted-foreground)]",children:w?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin mr-1"})," Loading more…"]}):(0,l.jsx)("span",{className:"opacity-50",children:"scroll for more"})})]})})]})}let ay=/<<<CAPTURE(?::(screen|camera))?>>>/g,aj="web:screen",aw=e=>new Promise(t=>setTimeout(t,e));function aN(e){if(e)for(let t of e.getTracks())t.stop()}function ak(e){return!!e&&e.getVideoTracks().some(e=>"live"===e.readyState)}function aS(e){let t=document.createElement("video");return t.muted=!0,t.playsInline=!0,t.setAttribute("aria-hidden","true"),t.style.cssText="position:fixed;left:-10000px;top:0;width:160px;height:90px;opacity:0;pointer-events:none",t.srcObject=e,document.body.appendChild(t),t.play().catch(()=>{}),t}function aC(e,t){aN(e),t&&(t.srcObject=null,t.remove())}async function aA(e){e.paused&&await e.play().catch(()=>{}),e.videoWidth||await new Promise(t=>{e.addEventListener("loadedmetadata",()=>t(),{once:!0}),setTimeout(t,1e3)})}function aI(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1920,r=e.videoWidth,n=e.videoHeight;if(!r||!n)return null;let a=Math.min(1,t/r),s=document.createElement("canvas");s.width=Math.max(1,Math.round(r*a)),s.height=Math.max(1,Math.round(n*a));let l=s.getContext("2d");return l?(l.drawImage(e,0,0,s.width,s.height),s):null}function aE(e,t){let r=e.getContext("2d").getImageData(0,0,e.width,e.height).data;if(r.length<4)return!0;let n=4*Math.max(1,Math.floor(r.length/4/1e3)),a=0,s=0;for(let e=0;e+2<r.length;e+=n)a++,r[e]<=t&&r[e+1]<=t&&r[e+2]<=t&&s++;return a>0&&s/a>.99}function aT(e){return e.toDataURL("image/jpeg",.85).split(",")[1]||null}function aM(e){return(null==e?void 0:e.id)===aj}let aF=null;function aD(){aF&&(aC(aF.stream,aF.video),aF=null)}let aP={web:!0,start:async()=>{var e;let t;try{t=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1})}catch(e){return null}let r=t.getVideoTracks()[0];if(!r)return aN(t),null;aD();let n={stream:t,video:aS(t)};return aF=n,r.addEventListener("ended",()=>{if(aF!==n)return;aD();let e=nk.getState();aM(e.screenSource)&&e.setScreenSource(null)}),"window"===(e=r.getSettings().displaySurface)?"capture.webSurfaceWindow":"browser"===e?"capture.webSurfaceTab":"capture.webSurfaceScreen"},grab:async()=>{for(let e=0;e<3;e++){e>0&&await aw(300);let t=aF;if(!t||!ak(t.stream))break;await aA(t.video);let r=aI(t.video);if(r&&!aE(r,8))return aT(r)}return null}};async function aL(){let e,t=window.CaptureController,r=t?new t:void 0;try{e=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1,...r?{controller:r}:{}})}catch(e){return null}try{null==r||r.setFocusBehavior("no-focus-change")}catch(e){}let n=aS(e),a=null;try{for(let e=0;e<4;e++){var s;if(e>0&&await aw(300),await aA(n),(a=null!=(s=aI(n,1/0))?s:a)&&!aE(a,8))break}}finally{aC(e,n)}if(!a)return null;let l=await new Promise(e=>a.toBlob(e,"image/png"));return l?URL.createObjectURL(l):null}let aR=null;function a_(e){var t;if(e.opening)return e.opening;aC(e.stream,e.video),e.stream=null,e.video=null;let r=navigator.mediaDevices.getUserMedia({video:(t=e.deviceId)?{deviceId:{exact:t},width:{ideal:1280},height:{ideal:720}}:{width:{ideal:1280},height:{ideal:720}},audio:!1}).then(t=>aR!==e?(aN(t),!1):(e.stream=t,e.video=aS(t),e.openedAt=Date.now(),!0),()=>!1).finally(()=>{e.opening=null});return e.opening=r,r}let az={web:!0,has:async()=>{try{return(await navigator.mediaDevices.enumerateDevices()).some(e=>"videoinput"===e.kind)}catch(e){return!1}},list:async()=>{try{return(await navigator.mediaDevices.enumerateDevices()).filter(e=>"videoinput"===e.kind).map((e,t)=>({deviceId:e.deviceId,label:e.label||"Camera ".concat(t+1)}))}catch(e){return[]}},requestPermission:async()=>{try{return aN(await navigator.mediaDevices.getUserMedia({video:!0})),!0}catch(e){return!1}},snap:async e=>{var t;let r=aR;if(!r||r.deviceId!==(null!=e?e:"")||!ak(r.stream)&&!await (t=a_(r),Promise.race([t,aw(5e3).then(()=>!1)])))return null;let n=r.video;if(aR!==r||!n)return null;try{await aA(n);let e=r.openedAt+500-Date.now();e>0&&await aw(e);let t=aI(n);return(!t||aE(t,10))&&(await aw(500),t=aI(n)),t?aT(t):null}catch(e){return null}}};function aO(){var e;let t=window.haloCapture;return t||("function"==typeof(null==(e=navigator.mediaDevices)?void 0:e.getDisplayMedia)?aP:void 0)}function aU(){var e;let t=window.haloCamera;return t||("function"==typeof(null==(e=navigator.mediaDevices)?void 0:e.getUserMedia)?az:void 0)}let aB=new Set(["PageUp","ArrowUp","Home"]),aW=e=>e.scrollHeight-e.scrollTop-e.clientHeight;function aH(e,t){let r=(0,o.useRef)(null);return(0,o.useLayoutEffect)(()=>{let n=e.current;if(!n)return;let a=function(e,t){let r=e.scrollTop,n=null,a=!1,s=r=>{e.scrollTop>0&&!function(e,t){for(let r=e instanceof Element?e:null;r&&r!==t;r=r.parentElement)if(r.scrollTop>0&&r.scrollHeight>r.clientHeight){let e=getComputedStyle(r).overflowY;if("auto"===e||"scroll"===e)return!0}return!1}(r,e)&&(t.current=!0)},l=()=>{1>=aW(e)&&(t.current=!1)},o=e=>{!e.ctrlKey&&(e.deltaY<0?s(e.target):e.deltaY>0&&l())},i=e=>{var t,r;n=null!=(r=null==(t=e.touches[0])?void 0:t.clientY)?r:null},c=e=>{var t;let r=null==(t=e.touches[0])?void 0:t.clientY;void 0!==r&&(null!==n&&r>n?s(e.target):null!==n&&r<n&&l(),n=r)},d=e=>{(aB.has(e.key)||" "===e.key&&e.shiftKey)&&s(e.target)},u=()=>{a=!1,80>=aW(e)&&(t.current=!1)},m=r=>{r.target!==e||r.offsetX<e.clientWidth||(a=!0,t.current=!0,window.addEventListener("pointerup",u,{once:!0}))},p=()=>{let n=e.scrollTop;n>r?aW(e)>80?t.current=!0:a||(t.current=!1):n<r&&aW(e)>1&&(t.current=!0),r=n},x={passive:!0};return e.addEventListener("wheel",o,x),e.addEventListener("touchstart",i,x),e.addEventListener("touchmove",c,x),e.addEventListener("keydown",d),e.addEventListener("pointerdown",m),e.addEventListener("scroll",p,x),{pin(){e.clientHeight>0&&e.scrollHeight<=e.clientHeight&&(t.current=!1),t.current||(e.scrollTop=e.scrollHeight,r=e.scrollTop)},destroy(){e.removeEventListener("wheel",o),e.removeEventListener("touchstart",i),e.removeEventListener("touchmove",c),e.removeEventListener("keydown",d),e.removeEventListener("pointerdown",m),e.removeEventListener("scroll",p),window.removeEventListener("pointerup",u)}}}(n,t);return r.current=a,()=>{a.destroy(),r.current=null}},[e,t]),(0,o.useCallback)(()=>{var e;return null==(e=r.current)?void 0:e.pin()},[])}var aK=r(32031),aG=r(75037);function aq(e){var t;let r=null==(t=rA.getState().activeProject)?void 0:t.id;if(!r)return null;let n=nk.getState();if(n.sessionId&&n.messages.some(t=>t.id===e))return n.sessionId.includes(">")?null:{sessionId:n.sessionId,projectId:r,archiveCount:a$(nC.getState(),n.sessionId)};let a=am.getState().selectedSessionId;return a&&!a.includes(">")?{sessionId:a,projectId:r,archiveCount:a$(n0.getState(),a)}:null}function a$(e,t){return e.sessionId===t?e.anchor:0}function aJ(e){let{messages:t,debugMode:r,readOnly:n,userOrdinalBase:a}=e;return(0,l.jsx)(aZ,{messages:t,debugMode:r,readOnly:n,userOrdinalBase:a})}function aZ(e){let{messages:t,debugMode:r,readOnly:n,userOrdinalBase:a}=e,s=(0,o.useMemo)(()=>(function(e){var t,r;let n=[],a=null,s=new Map;if(e.some(e=>"usage"===rV(e))){for(let r of e)if("assistant"===rV(r))for(let e of null!=(t=r.contentBlocks)?t:[])e.turnId&&s.set(e.turnId,r)}let l=new Map,o=[];for(let t of e)"context"!==rV(t)&&("user"===t.role?(a&&n.push(a),a={user:t,responses:[]}):a?t.turnId&&s.has(t.turnId)&&"usage"===rV(t)?o.push([t,a]):(a.responses.push(t),s.size>0&&l.set(t,a)):n.push({user:t,responses:[]}));for(let[e,t]of(a&&n.push(a),o))(null!=(r=l.get(s.get(e.turnId)))?r:t).responses.push(e);return n})(t),[t]),i=(0,o.useMemo)(()=>{if(n)return!1;let e=t.find(e=>"user"===e.role);return!!e&&null!==aq(e.id)},[t,n]),c=null!=a?a:0;return(0,l.jsx)("div",{className:"flex flex-col",children:s.map(e=>{let t="user"===e.user.role?c++:-1;return(0,l.jsx)(aV,{user:e.user,responses:e.responses,debugMode:r,userOrdinal:t,deletable:i},e.user.id)})})}let aV=(0,o.memo)(function(e){let{user:t,responses:r,debugMode:n,userOrdinal:a,deletable:s}=e,o=!!t.deleted;return(0,l.jsxs)("div",{className:(0,I.cn)("border-b border-[var(--border)]/50 last:border-b-0",o&&"opacity-50"),children:["user"===t.role?aX(t.content)?(0,l.jsx)(a0,{content:t.content,userOrdinal:a,deleted:o,messageId:t.id,deletable:s}):a1(t.content)?(0,l.jsx)(a3,{content:t.content,userOrdinal:a,deleted:o,messageId:t.id,deletable:s}):(0,l.jsx)(a9,{content:t.content,localImages:t.localImages,timestamp:t.timestamp,userOrdinal:a,deleted:o,messageId:t.id,deletable:s,sendFailed:t.sendFailed}):(0,l.jsx)("div",{className:"px-3 py-2",children:(0,l.jsx)(a4,{message:t,debugMode:n})}),r.length>0&&(0,l.jsx)(a5,{responses:r,debugMode:n})]})},(e,t)=>e.user===t.user&&e.debugMode===t.debugMode&&e.userOrdinal===t.userOrdinal&&e.deletable===t.deletable&&e.responses.length===t.responses.length&&e.responses.every((e,r)=>e===t.responses[r]));function aY(e){let{copyText:t,userOrdinal:r,deleted:n,messageId:a,deletable:s}=e,i=(0,eZ.kj)(),[c,d]=(0,o.useState)(!1),u=s&&!n&&r>=0,m=async()=>{let e=aq(a);e&&await (0,I.fN)(i("chat.exchange.deleteConfirm"))&&p.send({type:"exchange:delete",sessionId:e.sessionId,projectId:e.projectId,userOrdinal:r,archiveCount:e.archiveCount})};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(t).then(()=>{d(!0),setTimeout(()=>d(!1),2e3)}).catch(()=>{})},title:"Copy message",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--background)]/40",children:c?(0,l.jsx)(rg.A,{className:"h-3 w-3 text-emerald-400"}):(0,l.jsx)(aK.A,{className:"h-3 w-3"})}),u&&(0,l.jsx)("button",{onClick:m,title:"Delete message",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-red-900/30 hover:text-red-400",children:(0,l.jsx)(eU.A,{className:"h-3 w-3"})})]})}let aQ="rounded bg-red-900/30 px-1 py-px text-[9px] font-medium text-red-400";function aX(e){let t=e.match(/^\(from: session ([^)]+)\)\n([\s\S]*)$/);return t?{sessionId:t[1],body:t[2]}:null}function a0(e){var t;let{content:r,...n}=e,a=aX(r),s=null!=(t=a.sessionId.split(">").pop())?t:a.sessionId,{contentRef:i,clamped:c,expanded:d,toggle:u,contentStyle:m}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20*e,r=(0,o.useRef)(null),[n,a]=(0,o.useState)(!1),[s,l]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{let t=r.current;if(!t)return;let n=20*e+4,s=new ResizeObserver(()=>{let e=t.scrollHeight>n;a(t=>t===e?t:e)});return s.observe(t),()=>s.disconnect()},[e]),{contentRef:r,clamped:n,expanded:s,toggle:()=>l(e=>!e),contentStyle:n?s?{maxHeight:"40vh",overflowY:"auto"}:{maxHeight:"".concat(t,"px"),overflow:"hidden"}:void 0}}(4);return(0,l.jsxs)("div",{className:"sticky top-0 z-10 px-3 py-2 border-b border-[var(--border)] border-l-2 border-l-emerald-500/70 bg-emerald-950/40 backdrop-blur-sm shadow-sm",children:[(0,l.jsx)("div",{className:"absolute top-1.5 right-1.5 z-20 flex items-center gap-0.5",children:(0,l.jsx)(aY,{copyText:a.body,...n})}),(0,l.jsxs)("button",{onClick:u,disabled:!c,className:"mb-1 flex w-full items-center gap-2 pr-16 text-left text-[10px] font-medium text-emerald-400 enabled:hover:text-emerald-300",children:[c&&(d?(0,l.jsx)(M.A,{className:"h-3 w-3"}):(0,l.jsx)(F.A,{className:"h-3 w-3"})),(0,l.jsx)("span",{children:"Report from sub-session"}),(0,l.jsx)("span",{className:"rounded bg-emerald-900/40 px-1 py-0.5 font-mono text-emerald-300/80",children:s}),n.deleted&&(0,l.jsx)("span",{className:aQ,children:"deleted"})]}),(0,l.jsx)("div",{ref:i,style:m,children:(0,l.jsx)("div",{className:"text-xs text-[var(--foreground)] whitespace-pre-wrap leading-relaxed",children:a.body})})]})}function a1(e){let t=e.match(/^\[Conversation Summary — (\d+) messages compacted\]\n([\s\S]*)$/);return t?{olderCount:parseInt(t[1],10),body:t[2]}:null}function a3(e){let{content:t,...r}=e,n=a1(t),[a,s]=(0,o.useState)(!1);return(0,l.jsxs)("div",{className:"sticky top-0 z-10 border-l-2 border-l-purple-500/70 bg-purple-950/40 backdrop-blur-sm shadow-sm",children:[(0,l.jsx)("div",{className:"absolute top-1.5 right-1.5 z-20 flex items-center gap-0.5",children:(0,l.jsx)(aY,{copyText:n.body,...r})}),(0,l.jsxs)("button",{onClick:()=>s(!a),className:"flex w-full items-center gap-2 px-3 py-2 pr-14 text-[10px] font-medium text-purple-400 hover:bg-purple-900/30 transition-colors",children:[a?(0,l.jsx)(M.A,{className:"h-3 w-3"}):(0,l.jsx)(F.A,{className:"h-3 w-3"}),(0,l.jsx)("span",{children:"Conversation summary sent to LLM"}),(0,l.jsxs)("span",{className:"rounded bg-purple-900/40 px-1 py-0.5 font-mono text-purple-300/80",children:[n.olderCount," messages compacted"]}),r.deleted&&(0,l.jsx)("span",{className:aQ,children:"deleted"})]}),a&&(0,l.jsx)("div",{className:"px-3 pb-2 text-xs text-[var(--foreground)] whitespace-pre-wrap leading-relaxed max-h-[40vh] overflow-y-auto",children:n.body})]})}function a5(e){let{responses:t,debugMode:r}=e,n=(0,o.useMemo)(()=>{var e,n;let a=new Map;if(!r)return a;let s=t.filter(e=>"usage"===rV(e)&&e.usage);if(0===s.length)return a;let l=new Map;for(let e of t)if("assistant"===rV(e)&&e.contentBlocks)for(let t of e.contentBlocks)t.turnId&&l.set(t.turnId,e.id);let o=[];for(let t of s){let r=t.turnId?l.get(t.turnId):void 0;if(r){let n=null!=(e=a.get(r))?e:[];n.push(t),a.set(r,n)}else o.push(t)}if(o.length>0){let e=[...t].reverse().find(e=>"assistant"===rV(e));if(e){let t=null!=(n=a.get(e.id))?n:[];t.push(...o),a.set(e.id,t)}}return a},[r,t]);return(0,l.jsx)("div",{className:"px-3 py-2",children:t.map(e=>(0,l.jsx)(a4,{message:e,debugMode:r,usages:n.get(e.id)},e.id))})}function a2(e){var t,r,n,a,s,o,i,c;let{message:d}=e,u=d.usage;if(!u)return null;let m=null!=(r=null==(t=d.modelId)?void 0:t.replace(/^global\.anthropic\./,""))?r:"",p=u.inputTokens+(null!=(n=u.cacheReadInputTokens)?n:0)+(null!=(a=u.cacheWriteInputTokens)?a:0),x=p+u.outputTokens,f=p>0?Math.round(u.cacheReadInputTokens/p*100):0,h=e=>e>=1e3?"".concat((e/1e3).toFixed(1),"s"):"".concat(e,"ms"),v=new Date(d.timestamp),g=e=>e.toString().padStart(2,"0"),b="".concat(g(v.getMonth()+1),"-").concat(g(v.getDate())," ").concat(g(v.getHours()),":").concat(g(v.getMinutes()),":").concat(g(v.getSeconds()));return(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-1 py-0.5 text-[10px] font-mono text-[var(--muted-foreground)]",children:[(0,l.jsx)("span",{className:"inline-flex items-center gap-0.5 rounded bg-[var(--secondary)] px-1 py-px opacity-70",title:v.toLocaleString(),children:b}),(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-[var(--secondary)] px-1 py-px",children:[(0,l.jsx)("span",{className:"opacity-60",children:"in"}),(u.inputTokens/1e3).toFixed(1),"K"]}),(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-[var(--secondary)] px-1 py-px",children:[(0,l.jsx)("span",{className:"opacity-60",children:"out"}),(u.outputTokens/1e3).toFixed(1),"K"]}),(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-[var(--secondary)] px-1 py-px",children:[(0,l.jsx)("span",{className:"opacity-60",children:"ctx"}),(x/1e3).toFixed(1),"K"]}),(null!=(s=u.cacheReadInputTokens)?s:0)>0&&(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-emerald-900/30 px-1 py-px text-emerald-400",children:[(0,l.jsx)("span",{className:"opacity-60",children:"read"}),((null!=(o=u.cacheReadInputTokens)?o:0)/1e3).toFixed(1),"K"]}),(null!=(i=u.cacheWriteInputTokens)?i:0)>0&&(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-amber-900/30 px-1 py-px text-amber-400",children:[(0,l.jsx)("span",{className:"opacity-60",children:"write"}),((null!=(c=u.cacheWriteInputTokens)?c:0)/1e3).toFixed(1),"K"]}),f>0&&(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-emerald-900/30 px-1 py-px text-emerald-400",children:[(0,l.jsx)("span",{className:"opacity-60",children:"cache"}),f,"%"]}),null!=u.ttftMs&&(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-[var(--secondary)] px-1 py-px",children:[(0,l.jsx)("span",{className:"opacity-60",children:"ttft"}),h(u.ttftMs)]}),null!=u.e2eMs&&(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-[var(--secondary)] px-1 py-px",children:[(0,l.jsx)("span",{className:"opacity-60",children:"e2e"}),h(u.e2eMs)]}),u.thinkingEffort&&"off"!==u.thinkingEffort&&(0,l.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-purple-900/30 px-1 py-px text-purple-400",children:[(0,l.jsx)("span",{className:"opacity-60",children:"think"}),u.thinkingEffort]}),"off"===u.thinkingEffort&&(0,l.jsx)("span",{className:"inline-flex items-center gap-0.5 rounded bg-[var(--secondary)] px-1 py-px opacity-50",children:"think off"}),m&&(0,l.jsx)("span",{className:"inline-flex items-center gap-0.5 rounded bg-blue-900/30 px-1 py-px text-blue-400",children:m})]})}function a4(e){var t,r,n,a,s;let{message:i,debugMode:c,usages:d}=e,u=(0,eZ.kj)(),m=rV(i),p="assistant"===m,x=(0,o.useMemo)(()=>{if(!c||!p||!(null==d?void 0:d.length))return null;let e=new Map;for(let t of d)t.turnId&&e.set(t.turnId,t);return e.size>0?e:null},[c,p,d]);if("tool_call"===m||"tool_result"===m||"usage"===m||"context"===m)return null;if("agent_start"===m||"agent_done"===m)return c?(0,l.jsx)("div",{className:"my-0.5 px-1",children:(0,l.jsxs)("span",{className:(0,I.cn)("inline-block rounded px-1.5 py-0.5 text-[9px]","agent_start"===m?"bg-blue-900/40 text-blue-400":"bg-emerald-900/40 text-emerald-400"),children:[null!=(a=i.agentName)?a:"Agent",": ",i.content||("agent_start"===m?"started":"done")]})}):null;let f=p&&i.contentBlocks&&i.contentBlocks.length>0,h=f?i.contentBlocks.filter(e=>"tool_call"===e.type).length:0;if(i.interrupted&&!i.content&&!(null==(t=i.toolCalls)?void 0:t.length))return(0,l.jsxs)("div",{className:"flex items-center gap-1.5 py-1",children:[(0,l.jsx)(aG.A,{className:"h-3 w-3 text-amber-400"}),(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:u("chat.interrupted")})]});if(i.streaming&&!i.content&&!(null==(r=i.toolCalls)?void 0:r.length)&&!(null==(n=i.contentBlocks)?void 0:n.some(e=>"thinking"===e.type&&e.text.trim())))return(0,l.jsxs)("div",{className:"flex items-center gap-1.5 py-1",children:[(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin text-[var(--primary)]"}),(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"Thinking..."})]});let v=[];if(f){let e=i.contentBlocks,t=0;for(let r=0;r<e.length;r++){let n=e[r];if("thinking"===n.type&&n.text.trim()?v.push(i.streaming&&r===e.length-1?(0,l.jsx)(a6,{text:n.text},"b".concat(r)):(0,l.jsx)(a8,{text:n.text},"b".concat(r))):"text"===n.type&&n.text.trim()?v.push((0,l.jsx)(a7,{text:n.text},"b".concat(r))):"tool_call"===n.type&&(t++,v.push((0,l.jsx)(sa,{call:n.toolCall,isStreaming:i.streaming,isLast:t===h},"b".concat(r)))),x&&n.turnId){let t=null==(s=e[r+1])?void 0:s.turnId;if(!t||t!==n.turnId){let e=x.get(n.turnId);e&&v.push((0,l.jsx)(a2,{message:e},"u".concat(n.turnId)))}}}if(x){let t=new Set(e.map(e=>e.turnId).filter(Boolean));for(let[e,r]of x)t.has(e)||v.push((0,l.jsx)(a2,{message:r},"u".concat(e)))}}else{if(p&&i.toolCalls&&i.toolCalls.length>0&&i.toolCalls.forEach((e,t)=>{v.push((0,l.jsx)(sa,{call:e,isStreaming:i.streaming,isLast:t===i.toolCalls.length-1},"tc".concat(t)))}),x)for(let[e,t]of x)v.push((0,l.jsx)(a2,{message:t},"u".concat(e)));if(i.content){let e=!p&&/^Compacting context /.test(i.content);v.push(p?(0,l.jsx)(a7,{text:i.content},"txt"):e?(0,l.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-xs text-[var(--muted-foreground)]",children:[(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin shrink-0"}),(0,l.jsx)("span",{className:"whitespace-pre-wrap",children:i.content})]},"txt"):(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)] whitespace-pre-wrap",children:i.content},"txt"))}}return 0===v.length?null:(0,l.jsx)("div",{className:"py-1",children:v})}function a8(e){let{text:t}=e,[r,n]=(0,o.useState)(!1);return(0,l.jsxs)("div",{className:"my-1 rounded border border-purple-900/50 bg-purple-950/20",children:[(0,l.jsxs)("button",{onClick:()=>n(!r),className:"flex w-full items-center gap-1.5 px-2 py-1 text-left text-[11px] text-purple-400 hover:bg-purple-900/20 transition-colors",children:[r?(0,l.jsx)(M.A,{className:"h-3 w-3"}):(0,l.jsx)(F.A,{className:"h-3 w-3"}),(0,l.jsx)("span",{className:"font-medium",children:"Thinking"}),(0,l.jsxs)("span",{className:"text-[10px] text-purple-400/60",children:[t.length.toLocaleString()," chars"]})]}),r&&(0,l.jsx)("pre",{className:"px-2 pb-2 text-[11px] text-[var(--foreground)] whitespace-pre-wrap break-words leading-relaxed max-h-[50vh] overflow-y-auto",children:t})]})}function a6(e){let{text:t}=e,r=(0,o.useRef)(null),n=aH(r,(0,o.useRef)(!1));return(0,o.useLayoutEffect)(n,[t,n]),(0,l.jsxs)("div",{"data-thinking-live":"",className:"my-1 rounded border border-purple-900/50 bg-purple-950/20",children:[(0,l.jsxs)("div",{className:"flex items-center gap-1.5 px-2 py-1 text-[11px] text-purple-400",children:[(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin"}),(0,l.jsx)("span",{className:"font-medium",children:"Thinking..."}),(0,l.jsxs)("span",{className:"text-[10px] text-purple-400/60",children:[t.length.toLocaleString()," chars"]})]}),(0,l.jsx)("pre",{ref:r,className:"max-h-40 overflow-y-auto px-2 pb-2 text-[11px] leading-relaxed text-[var(--muted-foreground)] whitespace-pre-wrap break-words",children:t})]})}function a9(e){let{content:t,localImages:r,timestamp:n,userOrdinal:a,deleted:s,messageId:i,deletable:c,sendFailed:d}=e,u=(0,eZ.kj)(),{text:m,media:p}=(0,o.useMemo)(()=>r2(t),[t]),[x,f]=(0,o.useState)(null),[h,v]=(0,o.useState)(!1),[g,b]=(0,o.useState)(!1),y=(0,o.useRef)(null),j=m.trim().split("\n"),w=j.length>1,N=(w?"".concat(j[0].trim(),"…"):j[0].trim())||(p.length>0||(null==r?void 0:r.length)?"(attachment)":""),k=w||g;(0,o.useEffect)(()=>{let e=y.current;if(!e)return;let t=new ResizeObserver(()=>{let t=e.scrollWidth>e.clientWidth;b(e=>e===t?e:t)});return t.observe(e),()=>t.disconnect()},[N]);let S=new Date(n),C=e=>e.toString().padStart(2,"0"),A=s?"text-[var(--muted-foreground)] line-through":"text-[var(--accent-foreground)]";return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:(0,I.cn)("sticky top-0 z-10 bg-[var(--accent)] border-b border-[var(--border)] border-l-2 px-4 py-2.5 shadow-sm",s||d?"border-l-red-500/60":"border-l-blue-500"),children:[(0,l.jsxs)("div",{className:"absolute top-1.5 right-1.5 z-20 flex items-center gap-0.5",children:[s&&(0,l.jsx)("span",{className:(0,I.cn)("mr-1",aQ),children:"deleted"}),d&&!s&&(0,l.jsxs)("span",{className:"mr-1 inline-flex items-center gap-0.5 rounded bg-red-900/30 px-1 py-px text-[9px] font-medium text-red-400",title:u("chat.sendFailed"),children:[(0,l.jsx)(aG.A,{className:"h-2.5 w-2.5"}),u("chat.sendFailedBadge")]}),(0,l.jsx)(aY,{copyText:m,userOrdinal:a,deleted:s,messageId:i,deletable:c})]}),(0,l.jsxs)("button",{onClick:()=>v(e=>!e),disabled:!k,className:(0,I.cn)("flex w-full min-w-0 items-center gap-1.5 text-left",s||d?"pr-32":"pr-14"),children:[(0,l.jsx)("span",{className:"flex w-3 shrink-0 justify-center text-[var(--muted-foreground)]",children:k?h?(0,l.jsx)(M.A,{className:"h-3 w-3"}):(0,l.jsx)(F.A,{className:"h-3 w-3"}):"\xb7"}),(0,l.jsxs)("span",{className:"shrink-0 text-[10px] font-mono text-[var(--muted-foreground)] opacity-70",title:S.toLocaleString(),children:[C(S.getHours()),":",C(S.getMinutes())]}),(0,l.jsx)("span",{ref:y,className:(0,I.cn)("min-w-0 truncate text-xs",A,h&&k&&"invisible"),children:N})]}),h&&k&&(0,l.jsx)("div",{className:"mt-1 max-h-[40vh] overflow-y-auto",children:(0,l.jsx)("div",{className:(0,I.cn)("text-xs leading-relaxed whitespace-pre-wrap",A),children:m})})]}),r&&r.length>0&&(0,l.jsx)("div",{className:"flex flex-wrap gap-2 px-4 py-2 border-b border-[var(--border)]/30",children:r.map((e,t)=>(0,l.jsx)(e9.p,{src:e,alt:"screenshot",onClick:()=>f(e),className:"max-h-40 max-w-[240px] cursor-pointer rounded border border-[var(--border)] object-contain hover:ring-1 hover:ring-[var(--primary)]/40",placeholderClassName:"aspect-video w-40"},t))}),p.length>0&&(0,l.jsx)("div",{className:"px-4 py-2 border-b border-[var(--border)]/30",children:(0,l.jsx)(r4,{media:p})}),x&&(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-6",onClick:()=>f(null),children:(0,l.jsx)(e9.p,{src:x,alt:"screenshot",className:"max-h-[90vh] max-w-[92vw] object-contain",placeholderClassName:"aspect-video w-[min(92vw,640px)]"})})]})}function a7(e){let{text:t}=e,{text:r,media:n}=(0,o.useMemo)(()=>r2(t),[t]),a=(0,o.useMemo)(()=>r.replace(ay,"").replace(/<<<SHOW:[\s\S]*?>>>/g,"").trim(),[r]);return(0,l.jsxs)("div",{className:"prose prose-sm prose-invert max-w-none prose-p:my-1.5 prose-headings:my-2 prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-pre:my-2 prose-code:text-amber-300 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-[var(--secondary)] prose-pre:border prose-pre:border-[var(--border)] prose-a:text-[var(--primary)] prose-code:bg-[var(--secondary)] prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:text-xs prose-th:border prose-th:border-[var(--border)] prose-th:px-2 prose-th:py-1 prose-th:bg-[var(--secondary)] prose-td:border prose-td:border-[var(--border)] prose-td:px-2 prose-td:py-1",children:[a&&(0,l.jsx)(e2.oz,{remarkPlugins:[e4.A],components:{a(e){let{href:t,children:r,node:n,...a}=e;return(0,l.jsx)("a",{href:t,target:"_blank",rel:"noopener noreferrer",...a,children:r})},img(e){let{src:t,alt:r,node:n,...a}=e;return(0,l.jsx)(e9.p,{src:t,alt:null!=r?r:"",...a,placeholderClassName:"my-2 aspect-[4/3] w-full max-w-sm"})},pre(e){let{children:t}=e;return(0,l.jsx)("pre",{className:"overflow-x-auto",children:t})},code(e){let{className:t,children:r,node:n,...a}=e;return(null==t?void 0:t.startsWith("language-"))||String(r).includes("\n")?(0,l.jsx)(ss,{className:t,children:r}):(0,l.jsx)("code",{className:t,...a,children:r})}},children:a}),(0,l.jsx)(r4,{media:n})]})}function se(e){try{let t=JSON.parse(e);return"object"==typeof t&&null!==t?t:null}catch(e){return null}}let st="__TOOL_ERROR__",sr="__TOOL_WARN__",sn={running:"bg-amber-400 animate-pulse",success:"bg-emerald-400",warn:"bg-yellow-400",error:"bg-red-400"};function sa(e){let{call:t,isStreaming:r,isLast:n}=e,[a,s]=(0,o.useState)(!1),i=function(e,t,r){var n;if(!e.output&&""!==e.output)return"running";let a=null!=(n=e.output)?n:"";return a.startsWith(st)?"error":a.startsWith(sr)?"warn":"success"}(t,r,0),c=void 0!==t.output&&""!==t.output,{summary:d}=(0,o.useMemo)(()=>(function(e,t){let r=se(t);if(r){var n,a,s,l,o,i,c,d,u,m,p,x,f,h,v,g,b,y,j,w,N,k,S;switch(e){case"shell_exec":return{summary:String(null!=(a=null!=(n=r.command)?n:r.cmd)?a:"")||t};case"file_read":return{summary:String(null!=(o=null!=(l=null!=(s=r.path)?s:r.file)?l:r.filePath)?o:"")||t};case"file_write":{let e=String(null!=(d=null!=(c=null!=(i=r.path)?i:r.file)?c:r.filePath)?d:""),t=String(null!=(u=r.content)?u:"");return{summary:e,detail:t?"".concat(t.length," chars"):void 0}}case"file_edit":return{summary:String(null!=(x=null!=(p=null!=(m=r.path)?m:r.file)?p:r.filePath)?x:"")};case"file_list":return{summary:String(null!=(v=null!=(h=null!=(f=r.path)?f:r.directory)?h:r.dir)?v:".")};case"grep":{let e=String(null!=(b=null!=(g=r.pattern)?g:r.query)?b:""),t=r.path?" in ".concat(r.path):"",n=r.include?" (".concat(r.include,")"):"";return{summary:'"'.concat(e,'"').concat(t).concat(n)}}case"glob":{let e=String(null!=(j=null!=(y=r.pattern)?y:r.glob)?j:""),t=r.path?" in ".concat(r.path):"";return{summary:"".concat(e).concat(t)}}case"web_fetch":return{summary:String(null!=(w=r.url)?w:"")};case"delegate_task":{let e=String(null!=(N=r.agent_id)?N:""),t=String(null!=(S=null!=(k=r.task)?k:r.input)?S:""),n=t.length>100?t.slice(0,100)+"...":t;return{summary:e?"→ ".concat(e,": ").concat(n):n}}}}return{summary:t}})(t.name,t.input),[t.name,t.input]),u=(0,o.useMemo)(()=>{var e;return c?function(e,t){let r=se(t);if(r){let e=r.toolResult;if(null==e?void 0:e.content){let t=e.content;if(Array.isArray(t)&&t.length>0&&t[0].text)return t[0].text}if("string"==typeof r.text)return r.text;if("string"==typeof r.result)return r.result;if("string"==typeof r.output)return r.output}return t}(t.name,(e=t.output).startsWith(st+"\n")?e.slice(st.length+1):e.startsWith(sr+"\n")?e.slice(sr.length+1):e):""},[t.name,t.output,c]),m=u.length>120?u.slice(0,120)+"...":u;return(0,l.jsxs)("div",{className:"my-0.5 text-[12px] font-mono",children:[(0,l.jsxs)("button",{onClick:()=>s(!a),className:"flex w-full items-center gap-1.5 rounded px-1 py-0.5 hover:bg-[var(--secondary)]/60 transition-colors text-left group",children:[(0,l.jsx)("span",{className:(0,I.cn)("h-2 w-2 shrink-0 rounded-full",sn[i])}),a?(0,l.jsx)(M.A,{className:"h-3 w-3 shrink-0 text-[var(--muted-foreground)]"}):(0,l.jsx)(F.A,{className:"h-3 w-3 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"shrink-0 font-semibold text-[var(--foreground)]",children:t.name}),(0,l.jsx)("span",{className:"truncate text-[var(--muted-foreground)]",children:d})]}),a&&(0,l.jsxs)("div",{className:"ml-[22px] mt-0.5 mb-1 rounded border border-[var(--border)] bg-[var(--card)] overflow-hidden",children:[(0,l.jsxs)("div",{className:"border-b border-[var(--border)] px-2.5 py-1.5",children:[(0,l.jsx)("div",{className:"text-[10px] uppercase tracking-wider text-[var(--muted-foreground)] opacity-60 mb-0.5",children:"IN"}),(0,l.jsx)("pre",{className:"text-[11px] text-[var(--foreground)] whitespace-pre-wrap break-all leading-relaxed",children:d})]}),c&&(0,l.jsxs)("div",{className:"px-2.5 py-1.5",children:[(0,l.jsx)("div",{className:"text-[10px] uppercase tracking-wider text-[var(--muted-foreground)] opacity-60 mb-0.5",children:"OUT"}),(0,l.jsx)("pre",{className:(0,I.cn)("text-[11px] whitespace-pre-wrap break-all leading-relaxed max-h-[200px] overflow-y-auto","error"===i?"text-red-400":"warn"===i?"text-yellow-300":"text-[var(--foreground)]"),children:u})]}),"running"===i&&(0,l.jsxs)("div",{className:"px-2.5 py-1.5 flex items-center gap-1.5",children:[(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin text-amber-400"}),(0,l.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:"Running..."})]})]}),!a&&c&&m&&(0,l.jsx)("div",{className:"ml-[22px] text-[11px] text-[var(--muted-foreground)] truncate",children:m})]})}function ss(e){let{children:t,className:r}=e,[n,a]=(0,o.useState)(!1),s=String(t).replace(/\n$/,""),i=(null==r?void 0:r.replace("language-",""))||"";return(0,l.jsxs)("div",{className:"relative group",children:[i&&(0,l.jsx)("span",{className:"block mb-1 text-[9px] leading-none text-[var(--muted-foreground)] opacity-60",children:i}),(0,l.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(s).then(()=>{a(!0),setTimeout(()=>a(!1),2e3)})},className:"absolute top-1 right-1 rounded p-1 text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100 hover:bg-[var(--accent)] transition-opacity",children:n?(0,l.jsx)(rg.A,{className:"h-3 w-3 text-emerald-400"}):(0,l.jsx)(aK.A,{className:"h-3 w-3"})}),(0,l.jsx)("code",{className:r,children:t})]})}var sl=r(8985),so=r(98285),si=r(16936),sc=r(30906),sd=r(73082),su=r(78153),sm=r(57482),sp=r(48253),sx=r(37784);let sf=ar(),sh=sf.useBus,sv=sf.bump,sg=[{name:"/session",description:"Manage sessions (new/list/switch/stop/interrupt/compact/context)",type:"server",argHint:"<verb>"},{name:"/clear",description:"Clear chat (alias for /session new)",type:"client"},{name:"/help",description:"Show available commands",type:"client"}],sb=[];async function sy(e,t,r){try{sb=(await u.F.commands.list(e,t,r)).commands.map(e=>({name:e.slashName,description:e.description,type:e.type,argHint:e.argHint,source:e.source,skillId:e.skillId,verbs:e.verbs}))}catch(e){sb=[]}}function sj(){let e=sb.length>0?sb:sg;return nQ.getState().enabled?e:e.filter(e=>"/goal"!==e.name)}function sw(e){let{commands:t,selectedIndex:r,onSelect:n}=e,a=(0,o.useRef)(null);return((0,o.useEffect)(()=>{var e;let t=null==(e=a.current)?void 0:e.children[r];null==t||t.scrollIntoView({block:"nearest"})},[r]),0===t.length)?null:(0,l.jsx)("div",{ref:a,className:"absolute bottom-full left-3 right-3 mb-1 max-h-48 overflow-y-auto rounded-lg border border-[var(--border)] bg-[var(--background)] shadow-lg z-20",children:t.map((e,t)=>(0,l.jsxs)("button",{onMouseDown:t=>{t.preventDefault(),n(e)},className:"flex w-full items-center gap-3 px-3 py-2 text-left text-sm transition-colors ".concat(t===r?"bg-[var(--accent)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]"),children:[(0,l.jsx)("span",{className:"font-mono font-medium text-[var(--primary)]",children:e.name}),e.argHint&&(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:e.argHint}),(0,l.jsx)("span",{className:"flex-1 truncate text-xs",children:e.description})]},e.name))})}function sN(e){let{matches:t,selectedIndex:r,onSelect:n,dirs:a=!1}=e,s=(0,o.useRef)(null);return((0,o.useEffect)(()=>{var e;let t=null==(e=s.current)?void 0:e.children[r];null==t||t.scrollIntoView({block:"nearest"})},[r]),0===t.length)?null:(0,l.jsx)("div",{ref:s,className:"absolute bottom-full left-3 right-3 mb-1 max-h-48 overflow-y-auto rounded-lg border border-[var(--border)] bg-[var(--background)] shadow-lg z-20",children:t.map((e,t)=>{var s;let o=et(e),i=a?E.A:o.Icon,c=a?"text-amber-500":o.color,d=null!=(s=e.split("/").pop())?s:e,u=e.includes("/")?e.slice(0,e.lastIndexOf("/")):"";return(0,l.jsxs)("button",{onMouseDown:t=>{t.preventDefault(),n(e)},className:(0,I.cn)("flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm transition-colors",t===r?"bg-[var(--accent)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]"),children:[(0,l.jsx)(i,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0",c)}),(0,l.jsx)("span",{className:"truncate font-medium",children:d}),u&&(0,l.jsx)("span",{className:"ml-auto truncate text-xs text-[var(--muted-foreground)] opacity-60",children:u})]},e)})})}let sk=(e,t,r)=>Math.min(r,Math.max(t,e));function sS(e){let{src:t,onConfirm:r,onCancel:n}=e,a=(0,eZ.kj)(),s=(0,o.useRef)(null),c=(0,o.useRef)(null),[d,u]=(0,o.useState)(null),[m,p]=(0,o.useState)(null),[x,f]=(0,o.useState)(null),h=(0,o.useRef)(null),v=(0,o.useRef)(!1);(0,o.useLayoutEffect)(()=>{let e=s.current;if(!e)return;let t=new ResizeObserver(()=>{p({w:e.clientWidth,h:e.clientHeight}),f(null)});return t.observe(e),()=>t.disconnect()},[]);let g=d&&m?function(e,t,r,n){let a=Math.min(r/e,n/t),s=e*a,l=t*a;return{x:(r-s)/2,y:(n-l)/2,w:s,h:l}}(d.w,d.h,m.w,m.h):null,b=(0,o.useCallback)(async()=>{var e;let t=c.current;if(v.current||!t||!d)return;v.current=!0;let a=function(e,t,r,n){let a={x:0,y:0,w:r,h:n};if(!e||e.w<8||e.h<8||t.w<=0||t.h<=0)return a;let s=r/t.w,l=n/t.h,o=sk(Math.round((e.x-t.x)*s),0,r),i=sk(Math.round((e.y-t.y)*l),0,n),c=sk(Math.round((e.x+e.w-t.x)*s),0,r),d=sk(Math.round((e.y+e.h-t.y)*l),0,n);return c-o<1||d-i<1?a:{x:o,y:i,w:c-o,h:d-i}}(x,null!=g?g:{x:0,y:0,w:0,h:0},d.w,d.h),s=document.createElement("canvas");s.width=a.w,s.height=a.h,null==(e=s.getContext("2d"))||e.drawImage(t,a.x,a.y,a.w,a.h,0,0,a.w,a.h);let l=await new Promise(e=>s.toBlob(e,"image/png"));l?r(new File([l],function(e){let t=e=>String(e).padStart(2,"0");return"screenshot-".concat(e.getFullYear()).concat(t(e.getMonth()+1)).concat(t(e.getDate()),"-").concat(t(e.getHours())).concat(t(e.getMinutes())).concat(t(e.getSeconds()),".png")}(new Date),{type:"image/png"})):n()},[x,g,d,r,n]);(0,o.useEffect)(()=>{let e=e=>{("Escape"===e.key||"Enter"===e.key)&&(e.preventDefault(),e.stopImmediatePropagation(),"Escape"===e.key?n():b())};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[b,n]);let y=e=>{let t=s.current.getBoundingClientRect();return{x:sk(e.clientX-t.left,g.x,g.x+g.w),y:sk(e.clientY-t.top,g.y,g.y+g.h)}};return(0,i.createPortal)((0,l.jsxs)("div",{role:"dialog","aria-label":a("capture.screenshotHint"),className:"fixed inset-0 z-[10000] flex select-none flex-col bg-black/90",children:[(0,l.jsxs)("div",{className:"flex h-12 shrink-0 items-center justify-center gap-3 text-xs text-white/80",children:[(0,l.jsx)("span",{children:a("capture.screenshotHint")}),(0,l.jsx)("button",{onClick:()=>void b(),title:a("capture.screenshotConfirm"),className:"flex h-7 w-7 items-center justify-center rounded-md bg-[var(--primary)] text-[var(--primary-foreground)] transition-opacity hover:opacity-90",children:(0,l.jsx)(rg.A,{className:"h-4 w-4"})}),(0,l.jsx)("button",{onClick:n,title:a("capture.screenshotCancel"),className:"flex h-7 w-7 items-center justify-center rounded-md bg-white/10 text-white transition-colors hover:bg-white/20",children:(0,l.jsx)(eJ.A,{className:"h-4 w-4"})})]}),(0,l.jsxs)("div",{ref:s,className:"relative mx-4 mb-4 min-h-0 flex-1 cursor-crosshair touch-none",onPointerDown:e=>{0===e.button&&g&&(e.currentTarget.setPointerCapture(e.pointerId),h.current={...y(e),moved:!1})},onPointerMove:e=>{let t=h.current;if(!t||!g)return;let r=y(e);!t.moved&&3>Math.hypot(r.x-t.x,r.y-t.y)||(t.moved=!0,f({x:Math.min(t.x,r.x),y:Math.min(t.y,r.y),w:Math.abs(r.x-t.x),h:Math.abs(r.y-t.y)}))},onPointerUp:()=>{h.current=null},onDoubleClick:e=>{if(!x||!g)return;let t=y(e);t.x>=x.x&&t.x<=x.x+x.w&&t.y>=x.y&&t.y<=x.y+x.h&&b()},children:[(0,l.jsx)("img",{ref:c,src:t,alt:"",draggable:!1,onLoad:e=>u({w:e.currentTarget.naturalWidth,h:e.currentTarget.naturalHeight}),onError:n,className:"pointer-events-none absolute",style:g?{left:g.x,top:g.y,width:g.w,height:g.h}:{visibility:"hidden"}}),g&&(0,l.jsx)("div",{className:"pointer-events-none absolute overflow-hidden",style:{left:g.x,top:g.y,width:g.w,height:g.h},children:x?(0,l.jsx)("div",{className:"absolute border border-[var(--primary)] shadow-[0_0_0_9999px_rgba(0,0,0,0.55)]",style:{left:x.x-g.x,top:x.y-g.y,width:x.w,height:x.h}}):(0,l.jsx)("div",{className:"absolute inset-0 bg-black/30"})})]})]}),document.body)}var sC=r(25713);function sA(e,t,r){switch(t.type){case"ready":{let t=rB(e,r,"chatbar");return{state:t.state,effects:[...t.effects,{type:"busy",busy:!1}]}}case"error":return{state:e,effects:[{type:"error",message:t.message}]};case"insert-text":{let r=t.text;if("string"!=typeof r)return{state:e,effects:[{type:"warn",message:"insert-text without a string text ignored"}]};if(""===r)return{state:e,effects:[{type:"warn",message:"empty insert-text ignored"}]};if(r.length>1e4)return{state:e,effects:[{type:"warn",message:"insert-text over ".concat(1e4," chars ignored (").concat(r.length,")")}]};return{state:e,effects:[{type:"insert",text:r}]}}case"busy":{let r=t.busy;if("boolean"!=typeof r)return{state:e,effects:[{type:"warn",message:"busy without a boolean busy ignored"}]};return{state:e,effects:[{type:"busy",busy:r}]}}default:return{state:e,effects:[{type:"warn",message:"".concat(t.type," frame ignored on a chat-bar panel")}]}}}let sI={openId:null,busy:!1,closing:!1};function sE(e,t){var r,n;let a=e.chatbar;return null!=(n=null!=(r="zh"===t?null==a?void 0:a.title_zh:void 0)?r:null==a?void 0:a.title)?n:e.name}function sT(e){let{panel:t,dispatch:r,onInsert:n,anchor:a,disabled:s}=e,{t:i,lang:c}=(0,eZ.s9)(),d=ec(),u=(0,o.useMemo)(()=>en.extensions.filter(e=>e.chatbar&&eb(e)).sort((e,t)=>e.chatbar.order-t.chatbar.order||e.id.localeCompare(t.id)),[d]),{openId:m,closing:p}=t,x=m?u.find(e=>e.id===m):void 0;return((0,o.useEffect)(()=>{m&&!x&&r({type:"unmount"})},[m,x,r]),(0,o.useEffect)(()=>{if(!x)return;let e=e=>{"Escape"!==e.key||e.defaultPrevented||r({type:"close"})};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[x,r]),(0,o.useEffect)(()=>{if(!p)return;let e=setTimeout(()=>r({type:"unmount"}),35e3);return()=>clearTimeout(e)},[p,r]),0===u.length)?null:(0,l.jsxs)(l.Fragment,{children:[u.map(e=>{var t;let n=sE(e,c),a=e.id===(null==x?void 0:x.id);return(0,l.jsx)("button",{onClick:()=>r({type:"toggle",id:e.id}),disabled:s,title:n,"aria-label":n,"aria-pressed":a,className:(0,I.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded-lg transition-colors hover:bg-[var(--secondary)]",a?"text-[var(--primary)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:(0,l.jsx)(rO,{info:e,icon:null==(t=e.chatbar)?void 0:t.icon,fallback:sC.A,className:"h-4 w-4"})},e.id)}),x&&(0,l.jsx)(sM,{info:x,title:sE(x,c),closeLabel:i("chat.chatbar.close"),anchor:a,closing:p,onClose:()=>r({type:"close"}),onHidden:()=>r({type:"unmount"}),onBusy:e=>r({type:"busy",busy:e}),onInsert:n},"".concat(x.id,"@").concat(x.version))]})}function sM(e){var t,r;let{info:n,title:a,closeLabel:s,anchor:c,closing:d,onClose:u,onHidden:m,onBusy:p,onInsert:x}=e,f=function(e,t,r){let[n,a]=(0,o.useState)(null),s=(0,o.useRef)(r);return(0,o.useLayoutEffect)(()=>{s.current=r}),(0,o.useLayoutEffect)(()=>{if(!e)return;let r=0,n=()=>{r=0;let n=e.getBoundingClientRect();if(0===n.width&&0===n.height)return void s.current();let l=function(e,t,r){let n=Math.min(420,t.width-16),a=Math.max(8,Math.min(e.left+12,t.width-n-8)),s=Math.max(80,Math.min(r,e.top-8-28-4)),l=Math.max(e.top-4,36+s);return{left:a,bottom:t.height-l,width:n,frameHeight:s}}(n,{width:window.innerWidth,height:window.innerHeight},t);a(e=>e&&e.left===l.left&&e.bottom===l.bottom&&e.width===l.width&&e.frameHeight===l.frameHeight?e:l)},l=()=>{r||(r=requestAnimationFrame(n))};n();let o=new ResizeObserver(l);for(let t=e;t&&t!==document.body;t=t.parentElement)o.observe(t);return window.addEventListener("resize",l),window.addEventListener("scroll",l,!0),window.addEventListener("pointermove",l,{passive:!0}),()=>{o.disconnect(),window.removeEventListener("resize",l),window.removeEventListener("scroll",l,!0),window.removeEventListener("pointermove",l),r&&cancelAnimationFrame(r)}},[e,t]),n}(c,null!=(r=null==(t=n.chatbar)?void 0:t.height)?r:160,m);return f?(0,i.createPortal)((0,l.jsxs)("div",{role:"dialog","aria-label":a,className:"fixed z-[55] flex flex-col overflow-hidden rounded-lg border border-[var(--border)] bg-[var(--background)] shadow-lg",style:{left:f.left,bottom:f.bottom,width:f.width},children:[(0,l.jsxs)("div",{className:"flex shrink-0 items-center gap-2 border-b border-[var(--border)] pl-2.5 pr-1 text-xs text-[var(--muted-foreground)]",style:{height:28},children:[(0,l.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a}),(0,l.jsx)("button",{onClick:u,title:s,"aria-label":s,className:"flex h-5 w-5 shrink-0 items-center justify-center rounded hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-3.5 w-3.5"})})]}),(0,l.jsx)("div",{className:"min-h-0",style:{height:f.frameHeight},children:(0,l.jsx)(rZ,{info:n,title:a,onFrame:sA,onInsert:x,onBusy:p,closeRequested:d,logTag:"ExtensionChatbar",compact:!0})})]}),document.body):null}let sF=["image/jpeg","image/png","image/gif","image/webp"];async function sD(e){if("image/svg+xml"!==e.type){let t=await createImageBitmap(e);return{source:t,width:t.width,height:t.height,close:()=>t.close()}}let t=URL.createObjectURL(e);try{let e=new Image;e.src=t,await e.decode();let r=e.naturalWidth||1,n=e.naturalHeight||1,a=1024/Math.max(r,n);return{source:e,width:Math.round(r*a),height:Math.round(n*a),close:()=>{}}}finally{URL.revokeObjectURL(t)}}async function sP(e){try{let t=await sD(e),r=Math.min(1,1568/Math.max(t.width,t.height)),n=Math.max(1,Math.round(t.width*r)),a=Math.max(1,Math.round(t.height*r)),s=document.createElement("canvas");s.width=n,s.height=a;let l=s.getContext("2d");if(!l)throw Error("no 2d context");"image/svg+xml"===e.type&&(l.fillStyle="#fff",l.fillRect(0,0,n,a)),l.drawImage(t.source,0,0,n,a),t.close();let o=s.toDataURL("image/jpeg",.85).split(",")[1];if(!o)throw Error("encode failed");return{base64:o,mimeType:"image/jpeg"}}catch(t){if(sF.includes(e.type))return{base64:await new Promise((t,r)=>{let n=new FileReader;n.onload=()=>t(n.result.split(",")[1]),n.onerror=r,n.readAsDataURL(e)}),mimeType:e.type};throw t}}async function sL(e){if(sF.includes(e.type))return!0;try{return(await sD(e)).close(),!0}catch(e){return!1}}let sR=null,s_=null,sz=-1;function sO(){let e=(0,eZ.kj)(),t=rA(e=>e.activeProject),r=ty(null==t?void 0:t.id);return t?(0,l.jsx)("button",{onClick:()=>{let e=t.id;if(r)return void tv.getState().setFaceOn(e,!1);window.dispatchEvent(new CustomEvent("halo:navigate",{detail:{tab:"explorer"}})),tg=!0,ta=!0,tv.getState().setFaceOn(e,!0)},"aria-pressed":r,title:e(r?"face.on":"face.button"),className:(0,I.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded-lg transition-colors hover:bg-[var(--secondary)]",r?"text-[var(--primary)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:(0,l.jsx)(sl.A,{className:(0,I.cn)("h-4 w-4",r&&"fill-current")})}):null}function sU(e){var t;let{cameras:r,onPick:n,onClose:a}=e,s=(0,eZ.kj)(),[i,c]=(0,o.useState)((null==(t=r[0])?void 0:t.deviceId)||""),d=(0,o.useRef)(null),u=(0,o.useRef)(null);return(0,o.useEffect)(()=>{let e=!1,t=()=>{if(u.current){for(let e of u.current.getTracks())e.stop();u.current=null}};return t(),navigator.mediaDevices.getUserMedia({video:!i||{deviceId:{exact:i}},audio:!1}).then(t=>{if(e){for(let e of t.getTracks())e.stop();return}u.current=t,d.current&&(d.current.srcObject=t,d.current.play().catch(()=>{}))}).catch(()=>{}),()=>{e=!0,t()}},[i]),(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-3",onClick:a,children:(0,l.jsxs)("div",{className:"flex w-[640px] max-w-[94vw] flex-col overflow-hidden rounded-xl border border-[var(--border)] bg-[var(--background)] shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-3",children:[(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:s("capture.cameraPick")}),(0,l.jsx)("button",{onClick:a,className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-4 w-4"})})]}),(0,l.jsx)("video",{ref:d,muted:!0,playsInline:!0,className:"aspect-video w-full bg-black object-contain"}),(0,l.jsx)("div",{className:"flex flex-col gap-1 p-2",children:r.map(e=>(0,l.jsxs)("button",{onClick:()=>c(e.deviceId),title:e.label,className:(0,I.cn)("flex items-center gap-2 rounded px-2 py-1.5 text-left text-xs hover:bg-[var(--secondary)]",i===e.deviceId?"text-[var(--primary)]":"text-[var(--foreground)]"),children:[(0,l.jsx)(so.A,{className:"h-3.5 w-3.5 shrink-0"}),(0,l.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.label})]},e.deviceId))}),(0,l.jsx)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--border)] px-4 py-3",children:(0,l.jsx)("button",{onClick:()=>{let e=r.find(e=>e.deviceId===i);e&&n(e)},className:"rounded-md bg-[var(--primary)] px-3 py-1.5 text-xs font-medium text-white hover:opacity-90",children:s("capture.cameraUse")})})]})})}let sB=["full","workspace","readonly"],sW={full:{Icon:si.A,color:"text-amber-400"},workspace:{Icon:sc.A,color:"text-blue-400"},readonly:{Icon:tN.A,color:"text-emerald-400"}};function sH(){let e=(0,eZ.kj)(),t=nk(e=>e.accessLevel),r=nk(e=>e.isStreaming),n=nk(e=>e.sandboxAvailable),[a,s]=(0,o.useState)(!1),i=(0,o.useRef)(null);(0,o.useEffect)(()=>{null===n&&u.F.health().then(e=>nk.getState().setSandboxAvailable(!!e.sandbox)).catch(()=>{})},[n]),(0,o.useEffect)(()=>{if(!a)return;let e=e=>{i.current&&!i.current.contains(e.target)&&s(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[a]);let c=!1===n,d=c?"full":t,m=r||c,{Icon:p,color:x}=sW[d];return(0,l.jsxs)("div",{ref:i,className:"relative",children:[(0,l.jsxs)("button",{onClick:()=>!m&&s(!a),disabled:m,title:c?e("chat.access.noSandbox"):e("chat.access.title"),className:(0,I.cn)("flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors",m?"opacity-50 cursor-default":"hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"),children:[(0,l.jsx)(p,{className:(0,I.cn)("h-3 w-3",x)}),(0,l.jsx)("span",{children:e("chat.access.".concat(d))}),!m&&(0,l.jsx)(M.A,{className:"h-2.5 w-2.5"})]}),a&&(0,l.jsx)("div",{className:"absolute bottom-full left-0 mb-1 min-w-[180px] rounded-lg border border-[var(--border)] bg-[var(--background)] shadow-lg z-30",children:sB.map(r=>{let{Icon:n,color:a}=sW[r];return(0,l.jsxs)("button",{onClick:()=>{nk.getState().setAccessLevel(r),s(!1)},className:(0,I.cn)("flex w-full items-start gap-2 px-3 py-1.5 text-left text-xs transition-colors",r===t?"bg-[var(--accent)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]"),children:[(0,l.jsx)(n,{className:(0,I.cn)("mt-0.5 h-3 w-3 shrink-0",a)}),(0,l.jsxs)("span",{className:"flex min-w-0 flex-col",children:[(0,l.jsx)("span",{children:e("chat.access.".concat(r))}),(0,l.jsx)("span",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:e("chat.access.".concat(r,"Desc"))})]}),r===t&&(0,l.jsx)(rg.A,{className:"ml-auto h-3.5 w-3.5 shrink-0 self-center text-[var(--primary)]"})]},r)})})]})}function sK(){return(0,l.jsx)("span",{className:"mx-1 h-4 w-px shrink-0 bg-[var(--border)]"})}function sG(){let e=(0,eZ.kj)(),t=nk(e=>e.screenSource),r=nk(e=>e.cameraSource);return[t&&{key:"screen",Icon:sd.A,name:t.name,unbind:()=>nk.getState().setScreenSource(null)},r&&{key:"camera",Icon:so.A,name:r.name,unbind:()=>nk.getState().setCameraSource(null)}].filter(e=>!!e).map(t=>{let{key:r,Icon:n,name:a,unbind:s}=t;return(0,l.jsxs)("div",{className:"flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] font-medium text-[var(--primary)]",children:[(0,l.jsx)(n,{className:"h-3 w-3 shrink-0"}),(0,l.jsx)("span",{className:"max-w-[80px] truncate",title:a,children:a}),(0,l.jsx)("button",{onClick:s,title:e("capture.unbind"),className:"rounded opacity-75 hover:opacity-100",children:(0,l.jsx)(eJ.A,{className:"h-2.5 w-2.5"})})]},r)})}function sq(e){let{modelSupportsImage:t}=e,r=(0,eZ.kj)(),n=nk(e=>e.screenSource),a=nk(e=>e.cameraSource),s=nk(e=>e.setScreenSource),i=nk(e=>e.setCameraSource),[c,d]=(0,o.useState)(!1),[u,m]=(0,o.useState)([]),[p,x]=(0,o.useState)(!1),[f,h]=(0,o.useState)(!1),[v,g]=(0,o.useState)(!1),[b,y]=(0,o.useState)(!1),[j,w]=(0,o.useState)([]),[N,k]=(0,o.useState)(!1),S=(0,o.useRef)(null),C=aO(),A=aU();if((0,o.useEffect)(()=>{!t&&(n&&s(null),a&&i(null))},[t,n,a,s,i]),(0,o.useEffect)(()=>{var e,t=n,r=a;aM(t)||aD();let s=r&&(null==(e=aU())?void 0:e.web)?r.id:null;aR&&aR.deviceId===s||(aR&&(aC(aR.stream,aR.video),aR=null),null!==s&&a_(aR={deviceId:s,stream:null,video:null,opening:null,openedAt:0}))},[n,a]),(0,o.useEffect)(()=>{if(!A||!t)return void g(!1);let e=!1;return A.has().then(t=>{e||g(t)}).catch(()=>{}),()=>{e=!0}},[A,t]),(0,o.useEffect)(()=>{if(!c&&!N)return;let e=e=>{S.current&&!S.current.contains(e.target)&&(d(!1),k(!1))},t=e=>{"Escape"===e.key&&(d(!1),k(!1))};return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[c,N]),!C&&!A||!t)return null;let E=async()=>{if(n)return void s(null);if(null==C?void 0:C.web){let e=await C.start();e&&s({id:aj,name:r(e)});return}if(c)return void d(!1);d(!0),h(!0);try{let e=await C.list();m(e);let t=e.filter(e=>e.id.startsWith("screen:"));x(t.length>0&&t.every(e=>e.blank))}catch(e){m([])}finally{h(!1)}},T=(e,t)=>{if(y(!1),k(!1),e)try{localStorage.setItem("halo.cameraId",e)}catch(e){}i({id:e,name:t||r("capture.cameraName")})},M=async()=>{if(a)return void i(null);if(!await A.requestPermission())return void y(!0);let e=await A.list();if(0===e.length)return void T("",void 0);w(e),k(!0)};return(0,l.jsxs)("div",{ref:S,className:"relative flex items-center gap-1",children:[C&&(0,l.jsx)("button",{onClick:E,title:n?r("capture.bound",{name:n.name}):r("capture.button"),className:(0,I.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded-lg transition-colors hover:bg-[var(--secondary)]",n?"text-[var(--primary)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:(0,l.jsx)(sd.A,{className:"h-4 w-4"})}),A&&v&&(0,l.jsx)("button",{onClick:M,title:a?r("capture.cameraBound"):r("capture.cameraButton"),className:(0,I.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded-lg transition-colors hover:bg-[var(--secondary)]",a?"text-[var(--primary)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:(0,l.jsx)(so.A,{className:"h-4 w-4"})}),b&&(0,l.jsxs)("div",{className:"absolute bottom-full left-0 z-50 mb-1 w-64 rounded-md border border-amber-500/30 bg-[var(--background)] p-2.5 text-xs text-amber-300 shadow-lg",children:[(0,l.jsx)("div",{children:r((null==A?void 0:A.web)?"capture.cameraPermissionHintWeb":"capture.cameraPermissionHint")}),(0,l.jsxs)("div",{className:"mt-1.5 flex items-center gap-3",children:[A&&!A.web&&(0,l.jsx)("button",{onClick:()=>A.openSettings(),className:"underline hover:text-amber-200",children:r("capture.openSettings")}),(0,l.jsx)("button",{onClick:()=>y(!1),className:"text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:r("capture.dismiss")})]})]}),N&&j.length>=1&&(0,l.jsx)(sU,{cameras:j,onPick:e=>T(e.deviceId,e.label),onClose:()=>k(!1)}),c&&(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-3",onClick:()=>d(!1),children:(0,l.jsxs)("div",{className:"flex h-[92vh] w-[96vw] flex-col overflow-hidden rounded-xl border border-[var(--border)] bg-[var(--background)] shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-3",children:[(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:r("capture.pickTitle")}),(0,l.jsx)("button",{onClick:()=>d(!1),className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-4 w-4"})})]}),(0,l.jsxs)("div",{className:"flex-1 overflow-y-auto p-4",children:[p&&C&&!C.web&&(0,l.jsxs)("div",{className:"mb-3 rounded-md border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-300",children:[(0,l.jsx)("div",{children:r("capture.permissionHint")}),(0,l.jsx)("button",{onClick:()=>C.openSettings(),className:"mt-1.5 underline hover:text-amber-200",children:r("capture.openSettings")})]}),f?(0,l.jsx)("div",{className:"py-8 text-center text-xs text-[var(--muted-foreground)]",children:r("capture.loading")}):0===u.length?(0,l.jsx)("div",{className:"py-8 text-center text-xs text-[var(--muted-foreground)]",children:r("capture.empty")}):(0,l.jsx)("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-3",children:u.map(e=>(0,l.jsxs)("button",{onClick:()=>{s({id:e.id,name:e.name}),d(!1)},title:e.name,className:"flex min-w-0 flex-col gap-1.5 overflow-hidden rounded-lg border border-[var(--border)] p-2 text-left transition-colors hover:border-[var(--primary)] hover:bg-[var(--secondary)]",children:[e.thumb?(0,l.jsx)("img",{src:e.thumb,alt:e.name,className:"aspect-video w-full rounded object-cover bg-black/20"}):(0,l.jsx)("div",{className:"flex aspect-video w-full items-center justify-center rounded bg-black/20 text-[10px] text-[var(--muted-foreground)]",children:r("capture.noPreview")}),(0,l.jsxs)("div",{className:"flex min-w-0 items-center gap-1.5",children:[e.icon&&(0,l.jsx)("img",{src:e.icon,alt:"",className:"h-4 w-4 shrink-0"}),(0,l.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs text-[var(--foreground)]",children:e.name})]})]},e.id))})]})]})})]})}function s$(e){let{disabled:t,onCapture:r,onNotice:n}=e,a=(0,eZ.kj)(),s=function(){var e,t;let r=null==(e=window.haloCapture)?void 0:e.screenshot;return"function"==typeof r?async()=>{let e=await r();return"string"==typeof e?"data:image/jpeg;base64,".concat(e):e}:"function"==typeof(null==(t=navigator.mediaDevices)?void 0:t.getDisplayMedia)?aL:void 0}(),[i,c]=(0,o.useState)(!1),[d,u]=(0,o.useState)(null),m=(0,o.useRef)(0);if((0,o.useEffect)(()=>()=>{(null==d?void 0:d.startsWith("blob:"))&&URL.revokeObjectURL(d)},[d]),!s)return null;let p=i||null!==d,x=async()=>{if(p){m.current++,c(!1),u(null);return}let e=++m.current;c(!0);let t=null;try{t=await s()}catch(e){}if(e!==m.current){"string"==typeof t&&t.startsWith("blob:")&&URL.revokeObjectURL(t);return}c(!1),t&&"object"==typeof t?n(a("capture.permissionHint")):t&&u(t)};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{onClick:x,disabled:t,title:p?a("capture.screenshotActive"):a("capture.screenshotButton"),className:(0,I.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded-lg transition-colors hover:bg-[var(--secondary)]",p?"text-[var(--primary)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:(0,l.jsx)(su.A,{className:"h-4 w-4"})}),d&&(0,l.jsx)(sS,{src:d,onConfirm:e=>{u(null),r(e)},onCancel:()=>u(null)})]})}function sJ(e){let{onCompact:t}=e,r=nk(e=>e.messages),n=nk(e=>e.contextTokens),a=nk(e=>e.maxContextTokens),s=nk(e=>e.isCompacting),i=nk(e=>e.isStreaming),c=(0,o.useMemo)(()=>n>0?n:0,[n]);if(0===c||0===r.length||0===a)return null;let d=Math.min(c/a*100,100),u=(c/1e3).toFixed(2),m=2*Math.PI*8,p=r.length>5&&t&&!s&&!i;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(sK,{}),(0,l.jsx)("div",{className:(0,I.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded-lg",p&&"cursor-pointer hover:bg-[var(--secondary)]"),title:s?"Compacting...":"~".concat(u,"K / ").concat(a/1e3,"K tokens (").concat(Math.round(d),"%)").concat(p?"\nClick to compact context":""),onClick:p?t:void 0,children:(0,l.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 22 22",className:(0,I.cn)("transform -rotate-90",s&&"animate-pulse"),children:[(0,l.jsx)("circle",{cx:"11",cy:"11",r:8,fill:"none",stroke:"var(--muted-foreground)",strokeWidth:"2.5",opacity:"0.3"}),(0,l.jsx)("circle",{cx:"11",cy:"11",r:8,fill:"none",stroke:s?"#3b82f6":d<50?"#22c55e":d<70?"#eab308":d<85?"#f97316":"#ef4444",strokeWidth:"2.5",strokeDasharray:m,strokeDashoffset:m-d/100*m,strokeLinecap:"round",className:"transition-all duration-300"})]})})]})}function sZ(e){let{onSend:t,disabled:r,isStreaming:n,onStop:a,onInterrupt:s,pendingMessages:c,onRemovePending:m,onCommand:p,onCompact:x,agentControl:f,debugControl:h}=e,v=(0,eZ.kj)(),g=(0,d.Uw)(e=>e.selectedText),b=(0,d.Uw)(e=>e.selectedRange),y=(0,d.Uw)(e=>e.activeTab),j=(0,d.Uw)(e=>e.contextEnabled),w=(0,d.Uw)(e=>e.setContextEnabled),[N,k]=(0,o.useState)(""),[S,C]=(0,o.useState)([]),[A,E]=(0,o.useState)(!1),[T,M]=(0,o.useState)(0),[F,D]=(0,o.useState)([]),[P,L]=(0,o.useState)(0),[R,_]=(0,o.useState)(0),[z,O]=(0,o.useState)(!1),[B,W]=(0,o.useState)(null),H=function(){let e=nk(e=>e.selectedAgentId),t=rA(e=>{var t;return null==(t=e.activeProject)?void 0:t.path}),r=sh(e=>e.version),[n,a]=(0,o.useState)(!0);return(0,o.useEffect)(()=>{if(!t)return;let n=!1;return Promise.all([u.F.agentConfigs.list(t),(r!==sz&&(sz=r,sR=null,s_=null),sR)?Promise.resolve(sR):(!s_&&(s_=u.F.agentConfigs.models().then(e=>{let t={};for(let n of e.providers){var r;for(let e of n.models)t[e.id]=!!(null==(r=e.capabilities)?void 0:r.image)}return sR=t,t}).catch(()=>({}))),s_)]).then(t=>{var r;let[s,l]=t;if(n)return;let o=null!=(r=s.agents.find(t=>t.id===e))?r:s.agents[0],i=null==o?void 0:o.model;if(!i||!(i in l))return void a(!0);a(l[i])}).catch(()=>{n||a(!0)}),()=>{n=!0}},[e,t,r]),n}(),K=(0,o.useRef)(null);(0,o.useEffect)(()=>{let e=()=>{var e;return null==(e=K.current)?void 0:e.focus()};return window.addEventListener("halo:focus-chat-input",e),()=>window.removeEventListener("halo:focus-chat-input",e)},[]);let G=(0,o.useRef)(null),q=rA(e=>e.activeProject),$=0===nk(e=>e.usableAgentCount),J=nQ(e=>e.enabled),Z=nQ(e=>e.goal),V=nk(e=>e.sessionId),Y=J&&!!Z&&("intake"===Z.status||"running"===Z.status)&&V===Z.workerSessionId,X=Y&&!N.trim().startsWith("/"),ee=(0,o.useMemo)(()=>{var e,t;if(g&&y){let t=null!=(e=y.split("/").pop())?e:y,r=b?":".concat(b.startLine,"-").concat(b.endLine):"";return"".concat(t).concat(r," (").concat(g.length," chars)")}return y?null!=(t=y.split("/").pop())?t:y:null},[g,b,y]),et=(0,o.useMemo)(()=>{if(!N.startsWith("/")||/\s/.test(N))return[];if(!N.startsWith("/"))return[];let e=N.toLowerCase();return sj().filter(t=>t.name.startsWith(e))},[N]),er=(0,o.useMemo)(()=>(function(e){var t;let r=e.match(/^(\/\S+)\s+(\S*)$/);if(!r)return[];let n=sj().find(e=>e.name===r[1].toLowerCase());if(!(null==n||null==(t=n.verbs)?void 0:t.length))return[];let a=r[2].toLowerCase();return n.verbs.filter(e=>e.name.startsWith(a)&&e.name!==a).map(e=>({cmd:n,verb:e}))})(N),[N]),[en,ea]=(0,o.useState)(0);(0,o.useEffect)(()=>{ea(0)},[er.length]);let es=(0,o.useCallback)(e=>{var t;k("".concat(e.cmd.name," ").concat(e.verb.name," ")),null==(t=K.current)||t.focus()},[]),el=(0,o.useMemo)(()=>{let e=N.slice(0,R).match(/(^|\s)@scope\s+(\S*)$/);return e?{startIdx:e.index+e[1].length,query:e[2]}:null},[N,R]),eo=(0,o.useMemo)(()=>{if(el)return null;let e=N.slice(0,R).match(/(^|\s)@(\S*)$/);return e?{startIdx:e.index+e[1].length,query:e[2]}:null},[N,R,el]),[ei,ec]=(0,o.useState)([]);(0,o.useEffect)(()=>{if(!eo||z||!q)return void ec([]);let e=!1,t=setTimeout(()=>{u.F.files.search(q.id,eo.query,15).then(t=>{e||ec(t.matches.map(e=>e.path))}).catch(()=>{e||ec([])})},120);return()=>{e=!0,clearTimeout(t)}},[eo,z,q]);let ed=(0,o.useCallback)(e=>{if(!eo)return;let t=N.slice(0,eo.startIdx);k(t+N.slice(eo.startIdx+1+eo.query.length)),D(t=>t.includes(e)?t:[...t,e]),L(0),O(!1),requestAnimationFrame(()=>{if(K.current){let e=t.length;K.current.selectionStart=e,K.current.selectionEnd=e,K.current.focus(),_(e)}})},[N,eo]),[eu,em]=(0,o.useReducer)(function e(t,r){switch(r.type){case"toggle":if(t.openId!==r.id)return{openId:r.id,busy:!1,closing:!1};return e(t,{type:"close"});case"close":if(!t.openId)return t;return t.busy&&!t.closing?{...t,closing:!0}:sI;case"unmount":return t.openId?sI:t;case"busy":if(!t.openId)return t;if(!r.busy&&t.closing)return sI;return t.busy===r.busy?t:{...t,busy:r.busy}}},sI),[ep,ex]=(0,o.useState)(null);(0,o.useEffect)(()=>nF.subscribe((e,t)=>{e.activeTabId!==t.activeTabId&&em({type:"unmount"})}),[]);let ef=(0,o.useCallback)(e=>{var t;let r=K.current;if(!r)return;let n=function(e,t,r,n){let a=Math.max(0,Math.min(t,e.length)),s=Math.max(a,Math.min(r,e.length));return{value:e.slice(0,a)+n+e.slice(s),caret:a+n.length}}(r.value,r.selectionStart,r.selectionEnd,e);(0,i.flushSync)(()=>{k(n.value),_(n.caret)}),r.selectionStart=n.caret,r.selectionEnd=n.caret;let a=document.getSelection();a&&a.rangeCount>0&&document.activeElement!==r&&(null==(t=a.anchorNode)?void 0:t.childNodes[a.anchorOffset])===r&&a.removeAllRanges(),r.style.height="auto",r.style.height=Math.min(r.scrollHeight,200)+"px"},[]),[eh,ev]=(0,o.useState)([]),[eg,eb]=(0,o.useState)(0);(0,o.useEffect)(()=>{if(!el||!q)return void ev([]);let e=!1,t=setTimeout(()=>{u.F.files.search(q.id,el.query,15,!0).then(t=>{e||ev(t.matches.map(e=>e.path))}).catch(()=>{e||ev([])})},120);return()=>{e=!0,clearTimeout(t)}},[el,q]);let ey=(0,o.useCallback)(e=>{if(!el)return;let t=N.slice(0,el.startIdx),r=N.slice(R),n="@scope ".concat(e," ");k(t+n+r),eb(0),requestAnimationFrame(()=>{if(K.current){let e=t.length+n.length;K.current.selectionStart=e,K.current.selectionEnd=e,K.current.focus(),_(e)}})},[N,el,R]),ej=(0,o.useCallback)(e=>{D(t=>t.filter(t=>t!==e))},[]),ew=(0,o.useCallback)(e=>{var t,r;let n=N.split(/\s+/),a=null!=(t=n[0])?t:"",s=n.slice(1).join(" ");if(e.argHint&&!s&&a!==e.name){k(e.name+" "),M(0),null==(r=K.current)||r.focus();return}null==p||p(e,s),k(""),M(0),K.current&&(K.current.style.height="auto")},[N,p]),eN=(0,o.useCallback)(e=>{let t=Array.from(e).filter(e=>e.type.startsWith("image/"));Promise.all(t.map(sL)).then(e=>{let r=t.filter((t,r)=>!e[r]);W(r.length>0?v("chat.attachUnsupported",{names:r.map(e=>e.name).join(", ")}):null);let n=t.filter((t,r)=>e[r]).map(e=>({file:e,preview:URL.createObjectURL(e)}));n.length>0&&C(e=>[...e,...n])})},[v]);(0,o.useEffect)(()=>{let e=e=>{var t;let r=null==(t=e.detail)?void 0:t.file;if(!r)return;H?eN([r]):W(v("chat.attachNoVision",{name:r.name}));let n=d.Uw.getState();n.setBottomTab("chat"),n.maximized&&n.setMaximized(!1),requestAnimationFrame(()=>{var e;return null==(e=K.current)?void 0:e.focus()})};return window.addEventListener("halo:attach-image",e),()=>window.removeEventListener("halo:attach-image",e)},[eN,H,v]);let ek=(0,o.useCallback)(e=>{C(t=>{let r=t[e];return(null==r?void 0:r.preview)&&URL.revokeObjectURL(r.preview),t.filter((t,r)=>r!==e)})},[]),eS=(0,o.useCallback)(async()=>{var e,r;let n=N.trim();if(!n&&0===S.length||$)return;if(er.length>0)return void es(null!=(e=er[en])?e:er[0]);if(n.startsWith("/")){if(et.length>0)return void ew(null!=(r=et[T])?r:et[0]);let e=sj().find(e=>{var t;return e.name===(null==(t=n.split(/\s+/)[0])?void 0:t.toLowerCase())});if(e)return void ew(e)}if(Y)return;let a=[];for(let e of S)try{let{base64:t,mimeType:r}=await sP(e.file);a.push({data:t,mimeType:r})}catch(e){console.error("[MessageInput] Image conversion failed:",e)}(n||a.length>0)&&t(n||"(image)",a.length>0?a:void 0,F.length>0?F:void 0),S.forEach(e=>{e.preview&&URL.revokeObjectURL(e.preview)}),C([]),D([]),k(""),K.current&&(K.current.style.height="auto")},[N,S,t,et,T,ew,F,er,en,es,$,Y]),eC=(0,o.useCallback)(e=>{if(eh.length>0){if("ArrowDown"===e.key){e.preventDefault(),eb(e=>Math.min(e+1,eh.length-1));return}if("ArrowUp"===e.key){e.preventDefault(),eb(e=>Math.max(e-1,0));return}if("Tab"===e.key||"Enter"===e.key&&!e.nativeEvent.isComposing){e.preventDefault();let t=eh[eg];t&&ey(t);return}if("Escape"===e.key){e.preventDefault(),ev([]);return}}if(ei.length>0){if("ArrowDown"===e.key){e.preventDefault(),L(e=>Math.min(e+1,ei.length-1));return}if("ArrowUp"===e.key){e.preventDefault(),L(e=>Math.max(e-1,0));return}if("Tab"===e.key||"Enter"===e.key&&!e.nativeEvent.isComposing){e.preventDefault();let t=ei[P];t&&ed(t);return}if("Escape"===e.key){e.preventDefault(),O(!0);return}}if(er.length>0){if("ArrowDown"===e.key){e.preventDefault(),ea(e=>Math.min(e+1,er.length-1));return}if("ArrowUp"===e.key){e.preventDefault(),ea(e=>Math.max(e-1,0));return}if("Tab"===e.key){e.preventDefault();let t=er[en];t&&es(t);return}if("Escape"===e.key){e.preventDefault(),ea(0);return}}if(et.length>0){if("ArrowDown"===e.key){e.preventDefault(),M(e=>Math.min(e+1,et.length-1));return}if("ArrowUp"===e.key){e.preventDefault(),M(e=>Math.max(e-1,0));return}if("Escape"===e.key){e.preventDefault(),k(""),M(0);return}if("Tab"===e.key){e.preventDefault();let t=et[T];t&&k(t.name+" ");return}}if("Escape"===e.key&&eu.openId){e.preventDefault(),em({type:"close"});return}if("Escape"===e.key&&n&&!N.trim()&&s){e.preventDefault(),s();return}"Enter"!==e.key||e.nativeEvent.isComposing||e.shiftKey||e.metaKey||e.ctrlKey||(e.preventDefault(),eS())},[eS,et,T,er,en,es,ei,P,ed,eh,eg,ey,n,N,s,eu.openId]),eA=(0,o.useCallback)(e=>{k(e.target.value),_(e.target.selectionStart),M(0),O(!1),L(0),eb(0);let t=e.target;t.style.height="auto",t.style.height=Math.min(t.scrollHeight,200)+"px"},[]),eI=(0,o.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),E(!0)},[]),eE=(0,o.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),E(!1)},[]),eT=(0,o.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),E(!1),e.dataTransfer.files.length>0&&eN(e.dataTransfer.files)},[eN]),eM=(0,o.useCallback)(e=>{let t=e.clipboardData.items,r=[];for(let e=0;e<t.length;e++){let n=t[e];if("file"===n.kind){let e=n.getAsFile();e&&r.push(e)}}r.length>0&&(e.preventDefault(),eN(r))},[eN]);return(0,l.jsxs)("div",{ref:ex,className:(0,I.cn)("relative px-3 pb-3 pt-1 transition-colors",A&&"bg-[var(--accent)]"),onDragOver:eI,onDragLeave:eE,onDrop:eT,children:[(0,l.jsx)(sw,{commands:et,selectedIndex:T,onSelect:ew}),(0,l.jsx)(sw,{commands:er.map(e=>{var t;return{name:"".concat(e.cmd.name," ").concat(e.verb.name),description:null!=(t=e.verb.desc)?t:"",type:"server"}}),selectedIndex:en,onSelect:e=>{var t;k(e.name+" "),null==(t=K.current)||t.focus()}}),(0,l.jsx)(sN,{matches:ei,selectedIndex:P,onSelect:ed}),(0,l.jsx)(sN,{matches:eh,selectedIndex:eg,onSelect:ey,dirs:!0}),A&&(0,l.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center rounded-xl bg-[var(--accent)]/80 border-2 border-dashed border-[var(--primary)]",children:(0,l.jsx)("p",{className:"text-sm text-[var(--primary)]",children:"Drop images here"})}),(0,l.jsx)("input",{ref:G,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:e=>{e.target.files&&eN(e.target.files),e.target.value=""}}),B&&(0,l.jsxs)("div",{className:"mb-1 flex items-start gap-2 rounded-md border border-amber-500/30 bg-amber-500/10 px-2.5 py-1.5 text-xs text-amber-300",children:[(0,l.jsx)("span",{className:"flex-1",children:B}),(0,l.jsx)("button",{onClick:()=>W(null),className:"shrink-0 rounded p-0.5 hover:bg-amber-500/20",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})})]}),(0,l.jsxs)("div",{className:(0,I.cn)("rounded-2xl border border-[var(--border)] bg-[var(--secondary)] transition-colors","focus-within:border-[var(--primary)] focus-within:ring-1 focus-within:ring-[var(--primary)]"),children:[(0,l.jsx)("textarea",{ref:K,value:N,onChange:eA,onKeyDown:eC,onPaste:eM,onSelect:e=>_(e.target.selectionStart),placeholder:$?"All agents are disabled — enable one in the Agents tab to chat":Y?v("goal.inputLocked"):n?"Send to interrupt current response...":"Type @ to reference files...",rows:1,className:"w-full resize-none bg-transparent px-3.5 pt-3 pb-1 text-sm text-[var(--foreground)] placeholder-[var(--muted-foreground)] outline-none max-h-[200px]"}),(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-1 px-2 pb-2",children:[(0,l.jsx)(sH,{}),f,(0,l.jsx)(sG,{}),(0,l.jsx)(sJ,{onCompact:x}),(0,l.jsx)(sK,{}),(0,l.jsx)("button",{onClick:()=>{var e;return null==(e=G.current)?void 0:e.click()},disabled:r,title:"Attach images",className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(sm.A,{className:"h-4 w-4"})}),H&&(0,l.jsx)(s$,{disabled:r,onCapture:e=>eN([e]),onNotice:W}),(0,l.jsx)(sq,{modelSupportsImage:H}),(0,l.jsx)(sT,{panel:eu,dispatch:em,onInsert:ef,anchor:ep,disabled:r}),(q||h||ee)&&(0,l.jsx)(sK,{}),(0,l.jsx)(sO,{}),h,ee&&(0,l.jsxs)("button",{onClick:()=>w(!j),title:j?"Click to exclude context":"Click to include context",className:(0,I.cn)("flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] font-medium transition-colors hover:bg-[var(--secondary)]",j?"text-[var(--primary)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)] line-through opacity-50"),children:[(0,l.jsx)(U.A,{className:"h-3 w-3 shrink-0"}),(0,l.jsx)("span",{className:"max-w-36 truncate",children:ee})]}),null==c?void 0:c.map((e,t)=>(0,l.jsxs)("div",{className:"flex items-center gap-1 rounded-full border border-[var(--border)] bg-[var(--background)] px-2 py-0.5 text-[10px] text-[var(--muted-foreground)]",children:[(0,l.jsx)("span",{className:"max-w-32 truncate",children:e}),(0,l.jsx)("button",{onClick:()=>null==m?void 0:m(t),className:"ml-0.5 rounded-full p-0.5 hover:bg-[var(--accent)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-2.5 w-2.5"})})]},"q-".concat(t))),F.map(e=>(0,l.jsxs)("div",{className:"flex items-center gap-1 rounded-full border border-green-500/20 bg-green-500/10 px-2 py-0.5 text-[10px] text-green-400",children:[(0,l.jsxs)("span",{className:"max-w-32 truncate",children:["@",e.split("/").pop()]}),(0,l.jsx)("button",{onClick:()=>ej(e),className:"ml-0.5 rounded-full p-0.5 hover:bg-green-500/20 hover:text-green-300",children:(0,l.jsx)(eJ.A,{className:"h-2.5 w-2.5"})})]},"@".concat(e))),S.map((e,t)=>(0,l.jsxs)("div",{className:"flex items-center gap-1 rounded-lg border border-[var(--border)] bg-[var(--background)] px-2 py-0.5",children:[e.preview?(0,l.jsx)("img",{src:e.preview,alt:e.file.name,className:"h-5 w-5 rounded object-cover"}):(0,l.jsx)(Q.A,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"max-w-20 truncate text-[10px] text-[var(--muted-foreground)]",children:e.file.name}),(0,l.jsx)("button",{onClick:()=>ek(t),className:"ml-0.5 rounded p-0.5 text-[var(--muted-foreground)] hover:bg-[var(--accent)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-2.5 w-2.5"})})]},"f-".concat(t))),(0,l.jsx)("div",{className:"flex-1"}),n&&!N.trim()&&0===S.length?(0,l.jsx)("button",{onClick:a,title:"Stop generation",className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-red-600 text-white transition-colors hover:bg-red-700",children:(0,l.jsx)(sp.A,{className:"h-3.5 w-3.5 fill-current"})}):(0,l.jsx)("button",{onClick:eS,disabled:$||X||!N.trim()&&0===S.length,title:$?"All agents are disabled — enable one to chat":X?v("goal.inputLocked"):n&&N.trim()?"Send (interrupts current response)":"Send (Enter)",className:(0,I.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded-lg transition-colors",!$&&!X&&(N.trim()||S.length>0)?n?"bg-orange-600 text-white hover:bg-orange-700":"bg-[var(--primary)] text-[var(--primary-foreground)] hover:bg-blue-600":"text-[var(--muted-foreground)] cursor-not-allowed"),children:(0,l.jsx)(sx.A,{className:"h-4 w-4"})})]})]})]})}let sV={intake:"border-blue-500/30 bg-blue-500/10 text-blue-400",running:"border-emerald-500/30 bg-emerald-500/10 text-emerald-400",paused:"border-amber-500/30 bg-amber-500/10 text-amber-400",halted:"border-red-500/30 bg-red-500/10 text-red-400",done:"border-emerald-500/30 bg-emerald-500/10 text-emerald-400"};function sY(e){let{currentSessionId:t,onJump:r}=e,n=nQ(e=>e.enabled),a=nQ(e=>e.goal),s=nQ(e=>e.dismissedGoalId),o=nQ(e=>e.dismiss),i=(0,eZ.kj)();if(!n||!a)return null;let c="done"===a.status||"halted"===a.status;if(c&&s===a.goalSessionId)return null;let d=i("goal.banner.".concat(a.status),{round:a.round,max:a.maxRounds}),u=t===a.goalSessionId,m=t===a.workerSessionId;return(0,l.jsxs)("div",{className:(0,I.cn)("flex items-center gap-2 border-t px-3 py-1.5 text-[11px]",sV[a.status]),children:[(0,l.jsx)("button",{onClick:()=>!u&&r(a.goalSessionId),title:u?void 0:i("goal.banner.jump"),className:(0,I.cn)("min-w-0 flex-1 truncate text-left",!u&&"hover:underline cursor-pointer"),children:d}),(0,l.jsx)("button",{onClick:()=>!m&&r(a.workerSessionId),title:m?void 0:i("goal.banner.jump_worker"),className:(0,I.cn)("shrink-0",!m&&"hover:underline cursor-pointer"),children:i("goal.banner.worker")}),c&&(0,l.jsx)("button",{onClick:()=>o(a.goalSessionId),title:i("goal.banner.dismiss"),className:"shrink-0 rounded p-0.5 opacity-60 hover:opacity-100 transition-opacity",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})})]})}var sQ=r(70805);function sX(e){let{onLoadOlder:t,scrollRef:r}=e,n=(0,eZ.kj)(),a=nk(e=>e.sessionId),s=nC(e=>e.sessionId),i=nC(e=>e.anchor),c=nC(e=>e.cursor),d=nC(e=>e.messages),u=nC(e=>e.loading),[m,p]=(0,o.useState)(!1),x=(0,o.useRef)(null);(0,o.useLayoutEffect)(()=>{let e=r.current,t=x.current;e&&null!==t&&(e.scrollTop=e.scrollHeight-t,x.current=null)},[m,r]);let f=(0,o.useMemo)(()=>d.filter(nr),[d]);return null===s||s!==a||0===i?null:(0,l.jsxs)("div",{className:"border-b border-[var(--border)]/50",children:[c>0?(0,l.jsxs)("button",{onClick:t,disabled:u,className:"flex w-full items-center justify-center gap-1.5 px-3 py-2 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)] disabled:hover:bg-transparent",children:[u&&(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin"}),n(u?"chat.archive.loading":"chat.archive.loadOlder")]}):(0,l.jsx)("div",{className:"px-3 py-2 text-center text-[10px] text-[var(--muted-foreground)]",children:n("chat.archive.noEarlier")}),f.length>0&&(0,l.jsxs)(l.Fragment,{children:[m&&(0,l.jsx)(aJ,{messages:f,readOnly:!0}),(0,l.jsxs)("button",{onClick:()=>{let e=r.current;x.current=e?e.scrollHeight-e.scrollTop:null,p(!m)},className:"flex w-full items-center gap-2 border-t border-[var(--border)]/50 px-3 py-2 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:[m?(0,l.jsx)(sQ.A,{className:"h-3 w-3"}):(0,l.jsx)(F.A,{className:"h-3 w-3"}),(0,l.jsx)("span",{children:n("chat.archive.header",{segments:i-c,messages:f.length})})]})]})]})}var s0=r(39802),s1=r(72486);let s3=e=>Math.min(480,Math.max(120,Math.round(e)));function s5(e,t){try{localStorage.setItem(e,t)}catch(e){}}function s2(e){let{openKey:t,widthKey:r,defaultWidth:n,title:a,children:s,collapsedContent:i,hoverPeek:c}=e,d=(0,eZ.kj)(),[u,m]=(0,o.useState)(()=>"false"!==localStorage.getItem(t)),[p,x]=(0,o.useState)(()=>(function(e,t){let r=Number(localStorage.getItem(e));return Number.isFinite(r)&&r>0?s3(r):t})(r,n)),f=null==c?void 0:c.close,h=(0,o.useCallback)((e,r)=>{m(e),s5(t,String(e)),null==f||f(!e&&!!r&&r.detail>0)},[t,f]),v=(0,o.useCallback)(e=>{if(0!==e.button)return;e.preventDefault();let t=e.clientX,n=p,a=document.body.style,s=a.cursor,l=a.userSelect;a.cursor="col-resize",a.userSelect="none";let o=e=>{x(n=s3(p+t-e.clientX))},i=()=>{window.removeEventListener("pointermove",o),window.removeEventListener("pointerup",i),window.removeEventListener("pointercancel",i),a.cursor=s,a.userSelect=l,s5(r,String(n))};window.addEventListener("pointermove",o),window.addEventListener("pointerup",i),window.addEventListener("pointercancel",i)},[p,r]),g=e=>{let t=d(e?"sidebar.expand":"sidebar.collapse"),r=e?s0.A:s1.A;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex h-7 shrink-0 items-center justify-between gap-1 border-b border-[var(--border)] pl-2 pr-1",children:[(0,l.jsx)("span",{className:"truncate text-[10px] font-medium uppercase tracking-wide text-[var(--muted-foreground)]",children:a}),(0,l.jsx)("button",{onClick:t=>h(e,t),title:t,"aria-label":t,className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(r,{className:"h-3.5 w-3.5"})})]}),(0,l.jsx)("div",{className:"flex min-h-0 flex-1 flex-col",children:s})]})};return u?(0,l.jsxs)("div",{className:"relative flex shrink-0 flex-col border-l border-[var(--border)] bg-[var(--card)]",style:{width:p},children:[(0,l.jsx)("div",{onPointerDown:v,title:d("sidebar.resize"),className:"absolute inset-y-0 -left-0.5 z-10 w-1 cursor-col-resize transition-colors hover:bg-[var(--primary)]/40"}),g(!1)]}):(0,l.jsxs)("div",{...null==c?void 0:c.bind,className:(0,I.cn)("relative flex shrink-0 flex-col items-center border-l border-[var(--border)] bg-[var(--card)] pt-1",i?"w-10":"w-6"),children:[(0,l.jsx)("button",{onClick:()=>h(!0),title:d("sidebar.expand"),"aria-label":d("sidebar.expand"),className:"shrink-0 rounded p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(s0.A,{className:"h-3.5 w-3.5"})}),i&&(0,l.jsx)("div",{className:"flex min-h-0 w-full flex-1 flex-col items-center",children:i}),(null==c?void 0:c.open)&&(0,l.jsx)("div",{ref:s4,"data-peek":!0,className:"absolute inset-y-0 right-0 z-30 flex flex-col border-l border-[var(--border)] bg-[var(--card)] shadow-[-6px_0_16px_-6px_rgba(0,0,0,0.35)] transition-[translate,opacity] duration-150 ease-out starting:translate-x-4 starting:opacity-0 motion-reduce:transition-none",style:{width:p},children:g(!0)})]})}function s4(e){var t;let r=null==e||null==(t=e.parentElement)?void 0:t.parentElement;e&&r&&(e.style.maxWidth="".concat(r.clientWidth,"px"))}var s8=r(58958);let s6=e=>e?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]/50 hover:text-[var(--foreground)]";function s9(e){let{icon:t,label:r,tooltip:n,active:a,onActivate:s,badge:o,statusBar:i,onClose:c,closeLabel:d,menuGestures:u}=e;return(0,l.jsxs)("div",{...u,onClick:s,title:n,"aria-selected":a,className:(0,I.cn)("group relative mx-1.5 flex h-7 shrink-0 cursor-pointer select-none items-center gap-2 rounded-md px-2 text-[11px] transition-colors",s6(a)),children:[t&&(0,l.jsx)("span",{className:"flex h-3.5 w-3.5 shrink-0 items-center justify-center",children:t}),(0,l.jsx)("div",{className:"min-w-0 flex-1 truncate",children:r}),o,c&&(0,l.jsx)("button",{onClick:e=>{e.stopPropagation(),c(e)},title:d,"aria-label":d,className:"shrink-0 rounded p-0.5 opacity-0 hover:bg-[var(--accent)] group-hover:opacity-100",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})}),i]})}function s7(e){let{icon:t,tooltip:r,active:n,onActivate:a,badge:s}=e;return(0,l.jsxs)("button",{onClick:a,title:r,"aria-label":r,"aria-pressed":n,className:(0,I.cn)("group relative flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-[11px] font-medium transition-colors",s6(n)),children:[t,s]})}function le(e){let{onClick:t,label:r,collapsed:n=!1}=e;return(0,l.jsx)("div",{className:(0,I.cn)("flex shrink-0 justify-center",n?"py-1.5":"p-1.5"),children:(0,l.jsx)("button",{onClick:t,title:r,"aria-label":r,className:(0,I.cn)("flex h-7 items-center justify-center rounded-md bg-[var(--secondary)]/50 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",n?"w-7":"w-full"),children:(0,l.jsx)(s8.A,{className:"h-3.5 w-3.5"})})})}function lt(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],[t,r]=(0,o.useState)(!1),[a]=(0,o.useState)(()=>(function(e){let t,{openDelay:r=300,closeDelay:n=200}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=!1,s=!1,l=!1,o=!1,i=()=>{clearTimeout(t),t=void 0},c=t=>{i(),a!==t&&(a=t,e(t))},d=(e,r)=>{i(),t=setTimeout(()=>c(e),r)};return{enter(){s=!0,l||o||(a?i():d(!0,r))},leave(){s=!1,o=!1,l||(a?d(!1,n):i())},close(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];o=e,c(!1)},setHold(e){(l=e)?i():a&&!s&&d(!1,n)},dispose:i}})(r));(0,o.useEffect)(()=>()=>a.dispose(),[a]),(0,o.useEffect)(()=>a.setHold(e),[a,e]);let s=(0,o.useMemo)(()=>({onPointerEnter:e=>{"mouse"===e.pointerType&&"function"==typeof window.matchMedia&&(null!=n||(n=window.matchMedia("(hover: hover) and (pointer: fine)")),n.matches)&&a.enter()},onPointerLeave:e=>{"mouse"===e.pointerType&&a.leave()}}),[a]);return{open:t,close:a.close,bind:s}}function lr(e){let{x:t,y:r,returnFocus:n,onRename:a,onDelete:s,onClose:i}=e,c=(0,eZ.kj)(),d=(0,o.useRef)(null),[u,m]=(0,o.useState)({x:t,y:r}),p=(0,o.useRef)(!1);(0,o.useEffect)(()=>{var e;function t(e){d.current&&!d.current.contains(e.target)&&i()}function r(e){"Escape"===e.key&&(i(),(null==n?void 0:n.isConnected)&&n.focus())}return null==(e=d.current)||e.focus(),document.addEventListener("pointerdown",t),document.addEventListener("keydown",r),()=>{document.removeEventListener("pointerdown",t),document.removeEventListener("keydown",r)}},[i,n]),(0,o.useLayoutEffect)(()=>{let e=d.current;if(!e)return;let n=e.getBoundingClientRect(),a=window.innerWidth,s=window.innerHeight,l=t+n.width+4>a?Math.max(4,a-n.width-4):t,o=r+n.height+4>s?Math.max(4,s-n.height-4):r;(l!==u.x||o!==u.y)&&m({x:l,y:o})},[t,r,u.x,u.y]);let x=(e,t,r)=>{(!(e.detail>0)||p.current)&&(r&&(null==n?void 0:n.isConnected)&&n.focus(),i(),t(e))},f="flex w-full items-center gap-2 px-3 py-1.5 text-xs transition-colors hover:bg-[var(--secondary)]";return(0,l.jsxs)("div",{ref:d,role:"menu",tabIndex:-1,style:{position:"fixed",left:u.x,top:u.y,zIndex:9999},onPointerDown:()=>{p.current=!0},onContextMenu:e=>e.preventDefault(),className:"min-w-[140px] rounded-md border border-[var(--border)] bg-[var(--card)] py-1 shadow-lg outline-none",children:[(0,l.jsxs)("button",{role:"menuitem",onClick:e=>x(e,a,!1),className:"".concat(f," text-[var(--foreground)]"),children:[(0,l.jsx)(eq.A,{className:"h-3.5 w-3.5"}),c("chat.sessions.rename")]}),(0,l.jsxs)("button",{role:"menuitem",onClick:e=>x(e,s,!0),className:"".concat(f," text-red-400 hover:text-red-300"),children:[(0,l.jsx)(eU.A,{className:"h-3.5 w-3.5"}),c("chat.sessions.delete")]})]})}let ln=new Map;function la(e){let{sessions:t,currentSessionId:r,onSelect:n,onDelete:a,onNew:s,onLoadMore:i,hasMore:c=!1,loadingMore:d=!1}=e,m=(0,eZ.kj)(),p=nQ(e=>e.enabled),x=rA(e=>e.activeProject),[f,h]=(0,o.useState)(null),[v,g]=(0,o.useState)(""),b=(0,o.useRef)(null),y=(0,o.useRef)(""),j=()=>{b.current=null,h(null),g("")},w=async e=>{if(b.current!==e)return;let t=v.trim();if(!t||t===y.current||!(null==x?void 0:x.path))return void j();b.current=null,h(null);try{await u.F.sessionLogs.rename(e,t,x.path)}catch(e){console.error("[SessionSidebar] Rename failed:",e)}as()},[N,k]=(0,o.useState)(null),S=(0,o.useCallback)(()=>k(null),[]),[C,A]=(0,o.useState)(!1),E=lt(null!==N||null!==f||C),T=e=>{E.close(),n(e)},M=async(e,t)=>{A(!0);try{await a(e,t)}finally{A(!1)}};(0,o.useEffect)(()=>{for(let e of(ln.clear(),t))e.title&&ln.set(e.id,e.title)},[t]);let F=(0,o.useCallback)(e=>{if(!e||"undefined"==typeof IntersectionObserver)return;let t=new IntersectionObserver(e=>{var t;(null==(t=e[0])?void 0:t.isIntersecting)&&(null==i||i())},{rootMargin:"48px"});return t.observe(e),()=>t.disconnect()},[i,t.length]),D=nF(e=>e.tabs),P=(0,o.useMemo)(()=>new Map(D.flatMap(e=>e.sessionId?[[e.sessionId,e]]:[])),[D]),R=null===r,_=e=>{let t=P.get(e.id);return e.id!==r&&!!(null==t?void 0:t.store)&&!!t.unread},z=e=>e.title||m("chat.tabs.untitled"),O=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex min-h-0 w-full flex-1 flex-col items-center gap-0.5 overflow-y-auto py-1",children:[R&&(0,l.jsx)(s7,{icon:(0,l.jsx)(ac.A,{className:"h-3.5 w-3.5"}),tooltip:m("chat.tabs.newSession"),active:!0,onActivate:()=>{}}),t.map(e=>{let t=P.get(e.id);return(0,l.jsx)(lc,{title:e.title,tooltip:z(e),active:r===e.id,store:null==t?void 0:t.store,unread:_(e),onActivate:()=>T(e.id)},e.id)})]}),s&&(0,l.jsx)(le,{collapsed:!0,onClick:s,label:m("chat.sessions.new")})]});return(0,l.jsxs)(s2,{openKey:"halo_session_sidebar_open",widthKey:"halo_session_sidebar_width",defaultWidth:200,title:m("chat.sessions.title"),collapsedContent:O,hoverPeek:E,children:[(0,l.jsxs)("div",{className:"flex flex-1 flex-col gap-0.5 overflow-y-auto py-1",children:[R&&(0,l.jsx)(s9,{label:m("chat.tabs.newSession"),active:!0,onActivate:()=>{}}),0===t.length?(0,l.jsx)("div",{className:"px-3 py-4 text-center text-[10px] text-[var(--muted-foreground)]",children:"No sessions yet"}):t.map(e=>{var t;let n=P.get(e.id),a=f===e.id,s="string"==typeof(null==(t=e.agentSnapshot)?void 0:t.model)?" \xb7 ".concat(e.agentSnapshot.model.split(".").pop()):"";return(0,l.jsx)(li,{store:null==n?void 0:n.store,unread:_(e),tooltip:"".concat(z(e),"\n").concat(e.exchangeCount," msgs \xb7 ").concat((0,I.fw)(e.updatedAt,m)).concat(s),active:r===e.id,onActivate:()=>T(e.id),onMenu:a?void 0:(t,r,n)=>k({session:e,x:t,y:r,returnFocus:n}),label:a?(0,l.jsx)("input",{autoFocus:!0,value:v,onChange:e=>g(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:t=>{"Enter"===t.key?(t.preventDefault(),w(e.id)):"Escape"===t.key&&(t.preventDefault(),j())},onBlur:()=>w(e.id),className:"w-full rounded border border-[var(--border)] bg-[var(--background)] px-1 py-0.5 text-[11px] text-[var(--foreground)] outline-none focus:border-blue-500"}):(0,l.jsxs)(l.Fragment,{children:[p&&e.goalSessionId&&(0,l.jsx)("span",{title:"Goal-bound worker session",className:"mr-1",children:"\uD83C\uDFAF"}),z(e)]})},e.id)}),c&&(0,l.jsx)("div",{ref:F,className:"flex items-center justify-center py-2 text-[9px] text-[var(--muted-foreground)]",children:d?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(L.A,{className:"h-2.5 w-2.5 animate-spin mr-1"})," Loading…"]}):(0,l.jsx)("span",{className:"opacity-50",children:"scroll for more"})})]}),s&&(0,l.jsx)(le,{onClick:()=>{E.close(),s()},label:m("chat.sessions.new")}),N&&(0,l.jsx)(lr,{x:N.x,y:N.y,returnFocus:N.returnFocus,onRename:e=>{var t;return t=N.session,void(e.stopPropagation(),b.current=t.id,y.current=t.title||"",h(t.id),g(t.title||""))},onDelete:e=>{M(N.session.id,e)},onClose:S})]})}function ls(e,t){return!function(e){let t=(0,o.useCallback)(t=>e?e.subscribe(t):()=>{},[e]),r=()=>{var t;return null!=(t=null==e?void 0:e.getState().isStreaming)&&t};return(0,o.useSyncExternalStore)(t,r,r)}(e)?t?"unread":"idle":"busy"}let ll={busy:"status.busy",unread:"chat.tabs.unread",idle:"status.idle"};function lo(e){let{status:t,active:r,className:n}=e;return(0,l.jsx)("span",{"aria-hidden":!0,className:(0,I.cn)("pointer-events-none absolute bottom-0 h-0.5 rounded-full transition-colors","busy"===t&&"bg-amber-400 animate-pulse","unread"===t&&"bg-blue-500","idle"===t&&(r?"bg-emerald-500/70":"bg-emerald-500/40 group-hover:bg-emerald-500/70"),n)})}function li(e){let{store:t,unread:r,tooltip:n,onMenu:a,...s}=e,i=(0,eZ.kj)(),c=ls(t,r),d=function(e){let t=(0,o.useRef)(null),r=(0,o.useRef)(!1),n=(0,o.useRef)(null),a=()=>{t.current&&clearTimeout(t.current.timer),t.current=null};return(0,o.useEffect)(()=>()=>{t.current&&clearTimeout(t.current.timer)},[]),{onPointerDown:s=>{if(r.current=!1,n.current=document.activeElement,a(),"mouse"===s.pointerType)return;let{clientX:l,clientY:o}=s;t.current={x:l,y:o,timer:setTimeout(()=>{t.current=null,r.current=!0,e(l,o,n.current)},500)}},onPointerMove:e=>{let r=t.current;r&&Math.hypot(e.clientX-r.x,e.clientY-r.y)>8&&a()},onPointerUp:a,onPointerCancel:a,onContextMenu:s=>{s.preventDefault(),r.current||(t.current&&(r.current=!0),a(),e(s.clientX,s.clientY,n.current))},onClickCapture:e=>{r.current&&(r.current=!1,e.preventDefault(),e.stopPropagation())}}}((e,t,r)=>null==a?void 0:a(e,t,r));return(0,l.jsx)(s9,{...s,menuGestures:a&&d,tooltip:"".concat(n," \xb7 ").concat(i(ll[c])),statusBar:(0,l.jsx)(lo,{status:c,active:s.active,className:"inset-x-1.5"})})}function lc(e){let{title:t,tooltip:r,active:n,store:a,unread:s,onActivate:o}=e,i=(0,eZ.kj)(),c=ls(a,s),d=Array.from(t.trim())[0];return(0,l.jsx)(s7,{icon:d?d.toUpperCase():(0,l.jsx)(ac.A,{className:"h-3.5 w-3.5"}),tooltip:"".concat(r," \xb7 ").concat(i(ll[c])),active:n,onActivate:o,badge:(0,l.jsx)(lo,{status:c,active:n,className:"inset-x-[20%]"})})}var ld=r(81324);let lu=ar(),lm=lu.useBus,lp=lu.bump,lx=ar(),lf=lx.useBus,lh=lx.bump;function lv(){var e,t;let r=nk(e=>e.selectedAgentId),n=nk(e=>e.sessionId),a=nk(e=>e.isStreaming),s=rA(e=>e.activeProject),[i,c]=(0,o.useState)([]),[d,m]=(0,o.useState)(!1),p=(0,o.useRef)(null),x=(0,eZ.kj)(),f=lm(e=>e.version);(0,o.useEffect)(()=>{(null==s?void 0:s.path)&&u.F.agentConfigs.list(s.path).then(e=>{let t=e.agents.filter(e=>!e.overridden&&!e.disabled&&!e.internal).map(e=>{var t;return{id:e.id,name:e.name,scope:e.scope,priority:null!=(t=e.priority)?t:0}}).sort((e,t)=>t.priority-e.priority||e.name.localeCompare(t.name));c(t),nk.getState().setUsableAgentCount(t.length);let r=nk.getState();!r.sessionId&&"default"===r.selectedAgentId&&t[0]&&"default"!==t[0].id&&r.setSelectedAgentId(t[0].id)}).catch(()=>{})},[null==s?void 0:s.path,f]);let h=lf(e=>e.version);(0,o.useEffect)(()=>{(null==s?void 0:s.path)&&sy(s.path,null!=n?n:void 0,null!=r?r:void 0).catch(()=>{})},[null==s?void 0:s.path,n,r,f,h]),(0,o.useEffect)(()=>{if(!d)return;let e=e=>{p.current&&!p.current.contains(e.target)&&m(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[d]);let v=!!n,g=null!=(e=i.find(e=>e.id===r))?e:i[0],b=null!=(t=null==g?void 0:g.name)?t:r;return i.length<=1?null:(0,l.jsxs)("div",{ref:p,className:"relative",children:[(0,l.jsxs)("button",{onClick:()=>!v&&!a&&m(!d),disabled:v||a,title:x(v?"chat.agent.locked":"chat.agent.select"),className:(0,I.cn)("flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] font-medium transition-colors",v?"text-[var(--muted-foreground)] opacity-50 cursor-default":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"),children:[(0,l.jsx)(au.A,{className:(0,I.cn)("h-3 w-3",!v&&!a&&"text-[var(--primary)]")}),(0,l.jsx)("span",{className:"max-w-[80px] truncate",children:b}),!v&&(0,l.jsx)(M.A,{className:"h-2.5 w-2.5"})]}),d&&(0,l.jsx)("div",{className:"absolute bottom-full left-0 mb-1 min-w-[160px] max-h-60 overflow-y-auto rounded-lg border border-[var(--border)] bg-[var(--background)] shadow-lg z-30",children:i.map(e=>(0,l.jsxs)("button",{onClick:()=>{nk.getState().setSelectedAgentId(e.id),m(!1)},className:(0,I.cn)("flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors",e.id===r?"bg-[var(--accent)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]"),children:[(0,l.jsx)(au.A,{className:"h-3 w-3 shrink-0"}),(0,l.jsx)("span",{className:"truncate",children:e.name})]},"".concat(e.id,":").concat(e.scope)))})]})}function lg(){let e=(0,eZ.kj)(),{messages:t,sendMessage:r,isStreaming:n,deleteSession:a,stopGeneration:s,interruptGeneration:i,pendingMessages:c,removePendingMessage:m,handleCommand:x,sessionId:f}=function(){let e=(0,eZ.kj)(),t=nk(e=>e.messages),r=nk(e=>e.isStreaming),n=nk(e=>e.sessionId),a=nk(e=>e.pendingMessages),s=rA(e=>e.activeProject);(0,o.useEffect)(()=>{s&&function(e){var t;let r=nF.getState();if(r.projectId===e)return;let n=function(e){try{let t=localStorage.getItem(nD(e));if(t){let e=JSON.parse(t);return"string"==typeof e.active&&e.active.length>0?e.active:null}for(let t of["halo_session_".concat(e),"halo_session_id"]){let e=localStorage.getItem(t);if(e)return localStorage.removeItem(t),e}}catch(e){}return null}(e),a=n?{tabId:(0,I.$C)(),sessionId:n}:nT(nU(null));for(let n of(nF.setState({projectId:e,tabs:[a],activeTabId:a.tabId}),nB(null!=(t=nW(a.tabId))?t:""),r.tabs))n.store&&ng(n.store);nL.clear()}(s.id)},[null==s?void 0:s.id]);let l=(0,o.useCallback)(()=>{let{activeTab:e,selectedText:t,selectedRange:r,tabs:n,contextEnabled:a}=d.Uw.getState();if(!a)return"";let s=[];if(e&&s.push("[Currently viewing: ".concat(e,"]")),t&&t.trim()&&e){let n=r?":".concat(r.startLine,"-").concat(r.endLine):"";s.push("[Selected text in ".concat(e).concat(n,"]\n```\n").concat(t,"\n```"))}return s.length>0?s.join("\n")+"\n\n":""},[]),i=(0,o.useCallback)((t,r,a)=>{var o;if(!s)return;let i=null!=n?n:(0,I.$C)();n||n$(i);let c=l(),d=[];c&&d.push(c.trim()),(null==a?void 0:a.length)&&d.push("[Referenced files:\n".concat(a.map(e=>" - ".concat(e)).join("\n"),"]"));let{screenSource:u,cameraSource:m}=nk.getState(),x=aO(),f=!!u&&!!x,h=!!m&&!!aU();f&&h?d.push(e("capture.bothLlmPrompt",{name:u.name})):h?d.push(e("capture.cameraLlmPrompt")):f&&d.push(e(x.web?"capture.webLlmPrompt":"capture.llmPrompt",{name:u.name})),tu=!1,tb(s.id)&&d.push((o=function(){let e=to;return to=[],e}(),"[Face open: ".concat(tr).concat(o.length?" \xb7 last: ".concat(o.join(", ")):"","]")));let v=(d.length>0?d.join("\n")+"\n\n":"")+t.trim(),g=nk.getState(),b=t.trim();if(null==a?void 0:a.length){let e=a.map(e=>"@".concat(e.split("/").pop())).join(" ");b="".concat(e," ").concat(b)}if(null==r?void 0:r.length){let t=e("chat.imageSent",{n:r.length});b=b?"".concat(t,"\n").concat(b):t}let y=(0,I.$C)();g.addMessage({id:(0,I.$C)(),role:"user",content:b,timestamp:Date.now(),clientMsgId:y,...(null==r?void 0:r.length)?{localImages:r.map(e=>"data:".concat(e.mimeType,";base64,").concat(e.data))}:{}}),g.messages.some(e=>e.streaming&&"assistant"===e.role&&!e.taskId)||g.addMessage({id:(0,I.$C)(),role:"assistant",content:"",timestamp:Date.now(),streaming:!0});let{selectedAgentId:j,accessLevel:w}=nk.getState();p.send({type:"chat",sessionId:i,projectId:s.id,message:v,clientMsgId:y,accessLevel:w,..."default"!==j?{agentId:j}:{},...(null==r?void 0:r.length)?{images:r}:{}})},[n,s,l]),c=(0,o.useCallback)((e,t,r)=>{if(e.trim()||(null==t?void 0:t.length)){if(!s)return void console.warn("[useChat] No active project selected");i(e,t,r)}},[s,i,n]),u=(0,o.useCallback)(()=>{p.send({type:"chat:stop",sessionId:n})},[n]),m=(0,o.useCallback)(()=>{p.send({type:"chat:interrupt",sessionId:n})},[n]),x=(0,o.useCallback)(e=>{nk.getState().removePendingMessage(e)},[]);(0,o.useEffect)(()=>{if(r)return;let e=nk.getState().shiftPendingMessage();if(e){let t=setTimeout(()=>i(e),100);return()=>clearTimeout(t)}},[r,i]);let f=(0,o.useCallback)(e=>{s&&(p.send({type:"session:delete",sessionId:e,projectId:s.path}),nq(e),n7(e))},[s]),h=(0,o.useCallback)((e,t)=>{if(!s)return;if("/clear"===e.name||"/session"===e.name&&"new"===t.trim())return void nG();let r=null!=n?n:(0,I.$C)();n||n$(r);let a=e.name.slice(1),l=nk.getState().selectedAgentId,o={type:"command:".concat(a),sessionId:r,projectId:s.id,..."default"!==l?{agentId:l}:{}};t.trim()&&(o.message=t.trim()),p.send(o),nk.getState().addMessage({id:(0,I.$C)(),role:"system",content:"Executing ".concat(e.name).concat(t.trim()?" ".concat(t.trim()):"","..."),timestamp:Date.now()})},[s,n]);return{messages:t,sendMessage:c,isStreaming:r,sessionId:n,deleteSession:f,stopGeneration:u,interruptGeneration:m,pendingMessages:a,removePendingMessage:x,handleCommand:h}}(),h=nF(e=>e.tabs.find(t=>t.tabId===e.activeTabId)),{sessions:v,remove:g,loadMore:b,hasMore:y,loadingMore:j}=function(){let e=rA(e=>e.activeProject);return function(e){let[t,r]=(0,o.useState)([]),[n,a]=(0,o.useState)(null),[s,l]=(0,o.useState)(!1),i=aa(e=>e.version),c=(0,o.useCallback)(async()=>{if(!e){r([]),a(null);return}try{let t=await u.F.sessionLogs.list(e,{rootOnly:!0,limit:30});r(t.sessions),a(t.nextCursor)}catch(e){r([]),a(null)}},[e]);(0,o.useEffect)(()=>{c()},[c,i]);let d=(0,o.useCallback)(async()=>{if(null!==n&&!s){l(!0);try{if(!e)return;let t=await u.F.sessionLogs.list(e,{rootOnly:!0,limit:30,cursor:n}),s=t.sessions;r(e=>{let t=new Set(e.map(e=>e.id));return[...e,...s.filter(e=>!t.has(e.id))]}),a(t.nextCursor)}catch(e){console.error("[SessionList] loadMore failed:",e)}finally{l(!1)}}},[e,n,s]);return{sessions:t,refresh:c,remove:(0,o.useCallback)(async t=>{try{await u.F.sessionLogs.delete(t,e),r(e=>e.filter(e=>e.id!==t)),n7(t),as()}catch(e){console.error("[SessionList] Delete failed:",e)}},[e]),loadMore:d,hasMore:null!==n,loadingMore:s}}(null==e?void 0:e.path)}(),[w,N]=(0,o.useState)(()=>"1"===localStorage.getItem("halo_chat_debug"));(0,o.useEffect)(()=>{localStorage.setItem("halo_chat_debug",w?"1":"0")},[w]);let k=rA(e=>{var t;return null==(t=e.activeProject)?void 0:t.id});(0,o.useEffect)(()=>{k&&nX(k)},[k]);let S=(0,o.useCallback)(async(t,r)=>{r.stopPropagation(),await (0,I.fN)(e("chat.sessions.deleteConfirm"))&&(await g(t),a(t))},[a,g,e]),C=(0,o.useMemo)(()=>w?t.filter(e=>!e.taskId):t.filter(nr),[t,w]);return(0,l.jsxs)("div",{className:"flex h-full min-h-0 bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex h-full min-w-0 flex-1 flex-col",children:[h&&(0,l.jsx)(lb,{tab:h,sessionId:f,mainMessages:C,debugMode:w},h.tabId),(0,l.jsxs)("div",{className:"shrink-0",children:[(0,l.jsx)(sY,{currentSessionId:f,onJump:nH}),(0,l.jsx)(sZ,{onSend:r,isStreaming:n,onStop:s,onInterrupt:i,pendingMessages:c,onRemovePending:m,onCommand:x,onCompact:()=>x({name:"/session",description:"",type:"server"},"compact"),agentControl:(0,l.jsx)(lv,{}),debugControl:(0,l.jsx)("button",{onClick:()=>N(!w),"aria-pressed":w,className:(0,I.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded-lg transition-colors hover:bg-[var(--secondary)]",w?"text-[var(--primary)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),title:"Debug mode: show all messages including tool calls and usage",children:(0,l.jsx)(ld.A,{className:"h-4 w-4"})})})]})]}),(0,l.jsx)(la,{sessions:v,currentSessionId:f,onSelect:nH,onDelete:S,onNew:()=>nG(),onLoadMore:b,hasMore:y,loadingMore:j})]})}function lb(e){var t,r;let{tab:n,sessionId:a,mainMessages:s,debugMode:i}=e,c=(0,eZ.kj)(),d=n.tabId,u=(0,o.useRef)(null),[m]=(0,o.useState)(()=>nL.get(d)),[p,x]=(0,o.useState)(null),f=!!n.loading,h=null!=(t=n.attempt)?t:0;(0,o.useEffect)(()=>{if(!f)return;let e=setTimeout(()=>x(h),3e4);return()=>clearTimeout(e)},[f,h]);let v=f&&p===h,g=(0,o.useRef)(null!=(r=null==m?void 0:m.userScrolledUp)&&r),b=(0,o.useMemo)(()=>{let e=0;for(let t of s)"user"===t.role&&e++;return e},[s]),y=Math.max(0,b-30),[j,w]=(0,o.useState)(()=>({sessionId:a,hiddenTurns:m?Math.min(m.hiddenTurns,y):y,seenTurns:b}));j.sessionId!==a?w({sessionId:a,hiddenTurns:y,seenTurns:b}):(j.hiddenTurns>y||0===j.seenTurns&&b>0)&&w({sessionId:j.sessionId,hiddenTurns:y,seenTurns:b});let N=j.hiddenTurns;(0,o.useLayoutEffect)(()=>{j.seenTurns!==b&&w(e=>({sessionId:e.sessionId,hiddenTurns:g.current?e.hiddenTurns:Math.max(0,b-30),seenTurns:b}))}),(0,o.useEffect)(()=>{nR(d,{hiddenTurns:N})},[d,N]);let k=(0,o.useMemo)(()=>{if(N<=0)return s;let e=0;for(let t=0;t<s.length;t++)if("user"===s[t].role&&++e>N)return s.slice(t);return s},[s,N]),S=(0,o.useRef)(null),C=(0,o.useCallback)(()=>{let e=u.current;S.current=e?e.scrollHeight-e.scrollTop:null,w(e=>({...e,hiddenTurns:Math.max(0,e.hiddenTurns-30)}))},[]);(0,o.useLayoutEffect)(()=>{let e=u.current,t=S.current;e&&null!==t&&(e.scrollTop=e.scrollHeight-t,S.current=null)},[N]),(0,o.useLayoutEffect)(()=>{let e=u.current;e&&(e.scrollTop=(null==m?void 0:m.userScrolledUp)?m.scrollTop:e.scrollHeight)},[m]);let A=aH(u,g),I=(0,o.useRef)(null),E=(0,o.useRef)(!0),T=(0,o.useCallback)(()=>{let e=u.current;I.current=e?e.scrollHeight-e.scrollTop:null,nE()},[]),M=N>0;(0,o.useEffect)(()=>{let e=u.current;if(!e)return;let t=()=>{nR(d,{scrollTop:e.scrollTop,userScrolledUp:g.current}),e.scrollTop>200?E.current=!0:e.scrollTop<80&&E.current&&(E.current=!1,M?C():T())};return e.addEventListener("scroll",t),()=>e.removeEventListener("scroll",t)},[d,T,C,M]);let F=nC(e=>e.messages);return(0,o.useEffect)(()=>{let e=u.current,t=I.current;e&&null!==t&&(e.scrollTop=e.scrollHeight-t,I.current=null)},[F]),(0,o.useEffect)(()=>{A()},[s,A]),(0,o.useEffect)(()=>{let e=u.current;if(!e||"undefined"==typeof ResizeObserver)return;let t=new ResizeObserver(A);return t.observe(e),()=>t.disconnect()},[A]),(0,l.jsx)("div",{ref:u,className:"flex-1 min-h-0 overflow-y-auto",children:f&&n.sessionId?(0,l.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-8 text-xs text-[var(--muted-foreground)]",children:[(0,l.jsxs)("div",{className:"flex items-center",children:[(0,l.jsx)(L.A,{className:"h-3.5 w-3.5 animate-spin mr-1.5"})," Loading session..."]}),v&&(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{children:"Slow network — still loading…"}),(0,l.jsx)("button",{onClick:()=>(function(e){var t;let r=n_(t=>t.tabId===e);(null==r?void 0:r.sessionId)&&(nz(e,{loading:!0,attempt:(null!=(t=r.attempt)?t:0)+1}),nB(r.sessionId))})(d),className:"text-[var(--primary)] hover:underline",children:"Retry"})]})]}):0===s.length?(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 px-6 text-center",children:[(0,l.jsx)("div",{className:"rounded-full bg-[var(--secondary)] p-3",children:(0,l.jsx)(ac.A,{className:"h-6 w-6 text-[var(--muted-foreground)]"})}),(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-sm font-medium text-[var(--foreground)]",children:"Start a conversation"}),(0,l.jsx)("p",{className:"mt-1 text-xs text-[var(--muted-foreground)]",children:"Describe what you want to build, and agents will work together to deliver it."})]})]}):(0,l.jsxs)(l.Fragment,{children:[N>0?(0,l.jsx)("button",{onClick:C,className:"flex w-full items-center justify-center gap-1.5 border-b border-[var(--border)]/50 px-3 py-2 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:c("chat.window.showEarlier",{count:N})}):(0,l.jsx)(sX,{onLoadOlder:T,scrollRef:u}),(0,l.jsx)(aJ,{messages:k,debugMode:i,userOrdinalBase:N})]})})}var ly=r(86557),lj=r(21379);let lw="halo_browser_id";function lN(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"b-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,12))}let lk=null;function lS(){if(lk)return lk;try{let e=window.localStorage.getItem(lw);return e||(e=lN(),window.localStorage.setItem(lw,e)),lk=e,e}catch(e){return lk=lN()}}let lC="undefined"!=typeof navigator&&/Mac|iPhone|iPad/.test(navigator.userAgent);var lA=r(65146),lI=r(77408),lE=r(89678);function lT(e){let{x:t,y:r,term:n,onClose:a}=e,s=(0,eZ.kj)(),i=(0,o.useRef)(null),[c,d]=(0,o.useState)({x:t,y:r}),[u]=(0,o.useState)(()=>n.hasSelection()),[m,p]=(0,o.useState)(!1);(0,o.useEffect)(()=>{var e;function t(e){i.current&&!i.current.contains(e.target)&&a()}function r(e){"Escape"===e.key&&(a(),n.focus())}return null==(e=i.current)||e.focus(),document.addEventListener("mousedown",t),document.addEventListener("keydown",r),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("keydown",r)}},[a,n]),(0,o.useLayoutEffect)(()=>{let e=i.current;if(!e)return;let n=e.getBoundingClientRect(),a=window.innerWidth,s=window.innerHeight,l=t+n.width+4>a?Math.max(4,a-n.width-4):t,o=r+n.height+4>s?Math.max(4,s-n.height-4):r;(l!==c.x||o!==c.y)&&d({x:l,y:o})},[t,r,c.x,c.y]);let x=()=>{n.focus(),a()},f=async()=>{let e=n.getSelection();try{await navigator.clipboard.writeText(e)}catch(e){n.focus(),document.execCommand("copy")}x()},h=async()=>{try{n.paste(await navigator.clipboard.readText()),x()}catch(e){p(!0)}},v=[{key:"copy",icon:aK.A,label:s("terminal.menu.copy"),hint:lC?"⌘C":"Ctrl+C",disabled:!u,run:f},{key:"paste",icon:lA.A,label:s("terminal.menu.paste"),hint:lC?"⌘V":"Ctrl+V",run:h},{key:"selectAll",icon:lI.A,label:s("terminal.menu.selectAll"),run:()=>{n.selectAll(),x()}},{key:"clear",icon:lE.A,label:s("terminal.menu.clear"),run:()=>{n.clear(),x()}}];return(0,l.jsx)("div",{ref:i,tabIndex:-1,style:{position:"fixed",left:c.x,top:c.y,zIndex:9999},onContextMenu:e=>e.preventDefault(),className:"min-w-[160px] rounded-md border border-[var(--border)] bg-[var(--card)] py-1 shadow-lg outline-none",children:v.map(e=>{let t=e.icon;return(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{disabled:e.disabled,onClick:()=>{e.run()},className:"flex w-full items-center gap-2 px-3 py-1.5 text-xs text-[var(--foreground)] transition-colors hover:bg-[var(--secondary)] disabled:pointer-events-none disabled:opacity-40",children:[(0,l.jsx)(t,{className:"h-3.5 w-3.5"}),(0,l.jsx)("span",{className:"flex-1 text-left",children:e.label}),e.hint&&(0,l.jsx)("span",{className:"pl-4 text-[10px] text-[var(--muted-foreground)]",children:e.hint})]}),"paste"===e.key&&m&&(0,l.jsx)("div",{className:"max-w-[220px] px-3 pb-1.5 text-[10px] text-[var(--muted-foreground)]",children:s("terminal.menu.pasteHint",{key:lC?"⌘V":"Ctrl+V"})}),"paste"===e.key&&(0,l.jsx)("div",{className:"my-1 border-t border-[var(--border)]"})]},e.key)})})}r(87063);let lM=0,lF={dark:{background:"#0a0a0a",foreground:"#e4e4e7",cursor:"#e4e4e7",cursorAccent:"#0a0a0a",selectionBackground:"#27272a",black:"#18181b",red:"#f87171",green:"#4ade80",yellow:"#facc15",blue:"#60a5fa",magenta:"#c084fc",cyan:"#22d3ee",white:"#e4e4e7",brightBlack:"#52525b",brightRed:"#fca5a5",brightGreen:"#86efac",brightYellow:"#fde68a",brightBlue:"#93c5fd",brightMagenta:"#d8b4fe",brightCyan:"#67e8f9",brightWhite:"#fafafa"},light:{background:"#ffffff",foreground:"#171717",cursor:"#171717",cursorAccent:"#ffffff",selectionBackground:"#bfdbfe",black:"#262626",red:"#b91c1c",green:"#15803d",yellow:"#a16207",blue:"#1d4ed8",magenta:"#7e22ce",cyan:"#0e7490",white:"#525252",brightBlack:"#737373",brightRed:"#dc2626",brightGreen:"#16a34a",brightYellow:"#ca8a04",brightBlue:"#2563eb",brightMagenta:"#9333ea",brightCyan:"#0891b2",brightWhite:"#a3a3a3"},midnight:{background:"#0b1220",foreground:"#dbe4f3",cursor:"#dbe4f3",cursorAccent:"#0b1220",selectionBackground:"#1e2a47",black:"#16213a",red:"#f87171",green:"#4ade80",yellow:"#facc15",blue:"#60a5fa",magenta:"#c084fc",cyan:"#22d3ee",white:"#dbe4f3",brightBlack:"#64769b",brightRed:"#fca5a5",brightGreen:"#86efac",brightYellow:"#fde68a",brightBlue:"#93c5fd",brightMagenta:"#d8b4fe",brightCyan:"#67e8f9",brightWhite:"#f1f5fb"},warm:{background:"#f6f1e7",foreground:"#3d3427",cursor:"#3d3427",cursorAccent:"#f6f1e7",selectionBackground:"#e6dabf",black:"#292524",red:"#b91c1c",green:"#15803d",yellow:"#a16207",blue:"#1d4ed8",magenta:"#7e22ce",cyan:"#0e7490",white:"#57534e",brightBlack:"#78716c",brightRed:"#dc2626",brightGreen:"#16a34a",brightYellow:"#ca8a04",brightBlue:"#2563eb",brightMagenta:"#9333ea",brightCyan:"#0891b2",brightWhite:"#a8a29e"}},lD={fontFamily:"'JetBrains Mono', 'Fira Code', Menlo, Monaco, monospace",fontSize:13,lineHeight:1,cursorBlink:!0,scrollback:1e4};function lP(e,t,r,n){let a=document.createElement("div");a.className="absolute inset-0",a.style.display="none",e.appendChild(a);let s=new ly.B({...lD,theme:lF[r]}),l=new lj.Y;s.loadAddon(l),s.open(a),l.fit(),s.onData(e=>{p.send({type:"terminal:input",data:e,terminalId:t})}),s.attachCustomKeyEventHandler(e=>{let t=function(e,t){let{isMac:r,hasSelection:n}=t;if(r||"keydown"!==e.type||!e.ctrlKey||e.altKey||e.metaKey)return null;let a=e.key.toLowerCase();return"c"===a?e.shiftKey||n?"copy":null:"v"===a?"paste":null}(e,{isMac:lC,hasSelection:s.hasSelection()});return"copy"===t&&(e.preventDefault(),s.hasSelection()&&(document.execCommand("copy"),s.clearSelection())),null===t}),a.addEventListener("contextmenu",e=>{e.preventDefault(),n({x:e.clientX,y:e.clientY,term:s})});let o=null,i=new ResizeObserver(()=>{l.fit(),o&&clearTimeout(o),o=setTimeout(()=>{p.send({type:"terminal:resize",cols:s.cols,rows:s.rows,terminalId:t})},150)});return i.observe(a),{term:s,fit:l,container:a,ro:i}}function lL(){let{headerless:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,eZ.kj)(),r=(0,o.useRef)(null),n=(0,o.useRef)(new Map),[a,s]=(0,o.useState)([]),[i,c]=(0,o.useState)(null),[u,m]=(0,o.useState)(null),x=(0,o.useCallback)(()=>m(null),[]),f=rA(e=>e.activeProject),{theme:h}=(0,eX.useTheme)(),v=(0,o.useRef)(h);(0,o.useEffect)(()=>{for(let e of(v.current=h,n.current.values()))e.term.options.theme=lF[h]},[h]);let g=(0,o.useCallback)(e=>{var t,l,o;let i=r.current;if(!i)return;lM++;let d="term_".concat(Date.now().toString(36),"_").concat(lM),u=0===a.length?"bash":"bash (".concat(lM,")"),{term:x,fit:h,container:g,ro:b}=lP(i,d,v.current,m);n.current.set(d,{id:d,name:u,term:x,fit:h,container:g,ro:b,ready:!1,exited:!1});let y=new URLSearchParams(window.location.search).get("folder"),j=null!=(l=null!=(t=null!=e?e:null==f?void 0:f.path)?t:y)?l:"~";return p.send({type:"terminal:start",terminalId:d,cwd:j,cols:x.cols,rows:x.rows,browserId:lS(),workspacePath:null!=(o=null==f?void 0:f.path)?o:""}),s(e=>[...e,{id:d,name:u}]),c(d),d},[f,a.length]),b=(0,o.useCallback)(e=>{let t=n.current.get(e);t&&(p.send({type:"terminal:close",terminalId:e}),t.ro.disconnect(),t.term.dispose(),t.container.remove(),n.current.delete(e),s(t=>{let r=t.filter(t=>t.id!==e);return c(n=>{if(n===e){var a,s;return null!=(s=null==(a=r[Math.min(t.findIndex(t=>t.id===e),r.length-1)])?void 0:a.id)?s:null}return n}),r}))},[]),y=(0,o.useCallback)(e=>{c(e)},[]);(0,o.useEffect)(()=>{let e=n.current;return()=>{for(let t of e.values())t.ro.disconnect(),t.term.dispose(),t.container.remove();e.clear()}},[]),(0,o.useEffect)(()=>{for(let[e,t]of n.current){let r=e===i;t.container.style.display=r?"block":"none",r&&(t.fit.fit(),t.term.focus())}},[i]),(0,o.useEffect)(()=>{let e=[];return e.push(p.on("terminal:output",e=>{let{terminalId:t,data:r}=e;if(t){var a;null==(a=n.current.get(t))||a.term.write(r)}else{let e=n.current.values().next().value;null==e||e.term.write(r)}})),e.push(p.on("terminal:ready",e=>{let{terminalId:t}=e;if(t){let e=n.current.get(t);e&&(e.ready=!0)}})),e.push(p.on("terminal:exit",e=>{let{terminalId:t}=e;if(t){let e=n.current.get(t);e&&(e.exited=!0,e.term.writeln("\r\n\x1b[90m[Process exited]\x1b[0m"))}})),()=>e.forEach(e=>e())},[]);let j=(0,o.useRef)(!1);return(0,o.useEffect)(()=>{if(j.current)return;j.current=!0;let e=p.on("terminal:reattached",e=>{let t=e.terminalIds,a=r.current,l=0;for(let e of t){if(n.current.has(e)){let t=n.current.get(e);p.send({type:"terminal:resize",cols:t.term.cols,rows:t.term.rows,terminalId:e});continue}if(!a)continue;lM++;let t=0===l&&0===n.current.size?"bash":"bash (".concat(lM,")");l++;let{term:r,fit:o,container:i,ro:d}=lP(a,e,v.current,m);r.write("\x1b[?2004h");let u={id:e,name:t,term:r,fit:o,container:i,ro:d,ready:!0,exited:!1};n.current.set(e,u),s(r=>[...r,{id:e,name:t}]),c(t=>null!=t?t:e),p.send({type:"terminal:resize",cols:r.cols,rows:r.rows,terminalId:e})}0===t.length&&0===n.current.size&&g()}),t=()=>{var e;p.send({type:"terminal:reattach",browserId:lS(),workspacePath:null!=(e=null==f?void 0:f.path)?e:""})};t();let a=p.on("_connected",t),l=setTimeout(()=>{0===n.current.size&&g()},2e3);return()=>{clearTimeout(l),e(),a()}},[g]),(0,o.useEffect)(()=>{let e=d.Uw.getState().pendingTerminalCwd;return d.Uw.subscribe(t=>{let r=t.pendingTerminalCwd;if(r&&r!==e){e=r;let n=t.consumeTerminalSpawn();n&&g(n)}else e=r})},[g]),(0,l.jsxs)("div",{className:"flex h-full min-h-0 bg-[var(--background)]",children:[(0,l.jsx)("div",{ref:r,className:"relative min-h-0 flex-1 overflow-hidden"}),u&&(0,l.jsx)(lT,{x:u.x,y:u.y,term:u.term,onClose:x}),(0,l.jsxs)(s2,{openKey:"halo_terminal_sidebar_open",widthKey:"halo_terminal_sidebar_width",defaultWidth:160,title:t("terminal.list.title"),collapsedContent:(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{className:"flex min-h-0 w-full flex-1 flex-col items-center gap-0.5 overflow-y-auto py-1",children:a.map(e=>(0,l.jsx)(s7,{icon:(0,l.jsx)(H.A,{className:"h-3.5 w-3.5"}),tooltip:e.name,active:e.id===i,onActivate:()=>y(e.id)},e.id))}),(0,l.jsx)(le,{collapsed:!0,onClick:()=>g(),label:t("terminal.list.new")})]}),children:[(0,l.jsx)("div",{className:"flex flex-1 flex-col gap-0.5 overflow-y-auto py-1",children:a.map(e=>(0,l.jsx)(s9,{icon:(0,l.jsx)(H.A,{className:"h-3 w-3"}),label:e.name,tooltip:e.name,active:e.id===i,onActivate:()=>y(e.id),onClose:a.length>1?()=>b(e.id):void 0,closeLabel:t("terminal.list.close")},e.id))}),(0,l.jsx)(le,{onClick:()=>g(),label:t("terminal.list.new")})]})]})}var lR=r(39768);function l_(){let{floating:e=!1,dragHandleRef:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=(0,eZ.kj)(),n=(0,d.Uw)(e=>e.bottomTab),a=(0,d.Uw)(e=>e.setBottomTab),s=(0,d.Uw)(e=>e.setBottomFloating),i=(0,d.Uw)(e=>e.bottomMaximized),c=(0,d.Uw)(e=>e.setBottomMaximized),[u,m]=(0,o.useState)("terminal"===n);(0,o.useEffect)(()=>{"terminal"===n&&m(!0)},[n]);let[x,f]=(0,o.useState)(0);return(0,o.useEffect)(()=>p.on("_disconnected",()=>f(e=>e+1)),[]),(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{ref:t,className:(0,I.cn)("flex h-[35px] shrink-0 items-center gap-0 border-b border-[var(--border)] bg-[var(--card)] px-2",e&&"cursor-move select-none"),children:[(0,l.jsx)(lz,{label:r("nav.chat"),active:"chat"===n,onClick:()=>a("chat")}),(0,l.jsx)(lz,{label:r("nav.terminal"),active:"terminal"===n,onClick:()=>a("terminal")}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsx)("button",{onMouseDown:e=>e.stopPropagation(),onClick:()=>c(!i),title:i?"Restore panel":"Maximize panel",className:"rounded p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:i?(0,l.jsx)(rE.A,{className:"h-3.5 w-3.5"}):(0,l.jsx)(rT.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("button",{onMouseDown:e=>e.stopPropagation(),onClick:()=>s(!e),title:e?"Dock back":"Float panel",className:"rounded p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:e?(0,l.jsx)(eJ.A,{className:"h-3.5 w-3.5"}):(0,l.jsx)(lR.A,{className:"h-3.5 w-3.5"})})]}),(0,l.jsxs)("div",{className:"min-h-0 flex-1",children:[(0,l.jsx)("div",{className:"chat"===n?"h-full":"hidden",children:(0,l.jsx)(lg,{})}),(0,l.jsx)("div",{className:"terminal"===n?"h-full":"hidden",children:u&&(0,l.jsx)(lL,{headerless:!0},x)})]})]})}function lz(e){let{label:t,active:r,onClick:n}=e;return(0,l.jsxs)("button",{onClick:n,className:(0,I.cn)("relative px-3 py-2 text-[11px] font-medium tracking-wide transition-colors",r?"text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:[t,r&&(0,l.jsx)("div",{className:"absolute bottom-0 left-2 right-2 h-px bg-[var(--foreground)]"})]})}function lO(e){let{slotRef:t,dragHandleRef:r}=e,n=(0,d.Uw)(e=>e.bottomFloatRect),a=(0,d.Uw)(e=>e.setBottomFloatRect),s=(0,d.Uw)(e=>e.bottomMaximized),i=(0,o.useRef)(n);(0,o.useEffect)(()=>{i.current=n}),(0,o.useEffect)(()=>{let e=r.current;if(e&&!s)return e.addEventListener("mousedown",t),()=>e.removeEventListener("mousedown",t);function t(e){if(e.target.closest("button"))return;e.preventDefault();let t=e.clientX,r=e.clientY,n={...i.current};function s(e){let s=e.clientX-t,l=e.clientY-r;a({x:lU(n.x+s,0,window.innerWidth-n.w),y:lU(n.y+l,0,window.innerHeight-n.h),w:n.w,h:n.h})}window.addEventListener("mousemove",s),window.addEventListener("mouseup",function e(){window.removeEventListener("mousemove",s),window.removeEventListener("mouseup",e)})}},[a,s,r]),(0,o.useEffect)(()=>{function e(){let e=i.current,t=lU(e.x,0,Math.max(0,window.innerWidth-e.w)),r=lU(e.y,0,Math.max(0,window.innerHeight-e.h));(t!==e.x||r!==e.y)&&a({...e,x:t,y:r})}return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[a]);let c=(0,o.useRef)(null);(0,o.useEffect)(()=>{let e=c.current;if(e&&!s)return e.addEventListener("mousedown",t),()=>e.removeEventListener("mousedown",t);function t(e){var t;let r=e.target.closest("[data-edges]");if(!r)return;let n=null!=(t=r.getAttribute("data-edges"))?t:"",s={top:n.includes("top"),bottom:n.includes("bottom"),left:n.includes("left"),right:n.includes("right")};e.preventDefault(),e.stopPropagation();let l=e.clientX,o=e.clientY,c={...i.current},d=c.x+c.w,u=c.y+c.h;function m(e){let t=e.clientX-l,r=e.clientY-o,{x:n,y:i,w:m,h:p}=c;if(s.right&&(m=lU(c.w+t,320,window.innerWidth-c.x)),s.bottom&&(p=lU(c.h+r,240,window.innerHeight-c.y)),s.left){let e=lU(c.x+t,0,d-320);n=e,m=d-e}if(s.top){let e=lU(c.y+r,0,u-240);i=e,p=u-e}a({x:n,y:i,w:m,h:p})}window.addEventListener("mousemove",m),window.addEventListener("mouseup",function e(){window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",e)})}},[a,s]);let u=s?{left:0,top:0,width:"100vw",height:"100vh"}:{left:n.x,top:n.y,width:n.w,height:n.h};return(0,l.jsxs)("div",{className:"fixed z-50 flex flex-col rounded-md border border-[var(--border)] bg-[var(--background)] shadow-2xl",style:u,children:[(0,l.jsx)("div",{ref:t,className:"min-h-0 flex-1 overflow-hidden rounded-md"}),!s&&(0,l.jsxs)("div",{ref:c,children:[(0,l.jsx)("div",{"data-edges":"top",className:"absolute -top-1 left-3 right-3 h-2 cursor-ns-resize"}),(0,l.jsx)("div",{"data-edges":"bottom",className:"absolute -bottom-1 left-3 right-3 h-2 cursor-ns-resize"}),(0,l.jsx)("div",{"data-edges":"left",className:"absolute -left-1 top-3 bottom-3 w-2 cursor-ew-resize"}),(0,l.jsx)("div",{"data-edges":"right",className:"absolute -right-1 top-3 bottom-3 w-2 cursor-ew-resize"}),(0,l.jsx)("div",{"data-edges":"top left",className:"absolute -top-1 -left-1 h-3 w-3 cursor-nwse-resize"}),(0,l.jsx)("div",{"data-edges":"top right",className:"absolute -top-1 -right-1 h-3 w-3 cursor-nesw-resize"}),(0,l.jsx)("div",{"data-edges":"bottom left",className:"absolute -bottom-1 -left-1 h-3 w-3 cursor-nesw-resize"}),(0,l.jsx)("div",{"data-edges":"bottom right",className:"absolute -bottom-1 -right-1 h-3 w-3 cursor-nwse-resize"})]})]})}function lU(e,t,r){return Math.max(t,Math.min(r,e))}let lB={ts:q.A,tsx:q.A,js:q.A,jsx:q.A,json:_.A,md:U.A};function lW(e){let{onSelect:t,onClose:r}=e,n=rA(e=>{var t,r;return null!=(r=null==(t=e.activeProject)?void 0:t.id)?r:null}),[a,s]=(0,o.useState)(""),[i,c]=(0,o.useState)(0),[d,m]=(0,o.useState)([]),[p,x]=(0,o.useState)(!1),f=(0,o.useRef)(null),h=(0,o.useRef)(null);(0,o.useEffect)(()=>{var e;null==(e=f.current)||e.focus()},[]),(0,o.useEffect)(()=>{c(0)},[a]),(0,o.useEffect)(()=>{if(!n)return;let e=a.trim();if(!e){m([]),x(!1);return}x(!0);let t=!1,r=setTimeout(()=>{u.F.files.search(n,e,50).then(e=>{t||m(e.matches)}).catch(e=>{t||(console.error("[QuickOpen] Search failed:",e),m([]))}).finally(()=>{t||x(!1)})},150);return()=>{t=!0,clearTimeout(r)}},[n,a]),(0,o.useEffect)(()=>{var e;let t=null==(e=h.current)?void 0:e.children[i];null==t||t.scrollIntoView({block:"nearest"})},[i]);let v=(0,o.useCallback)(e=>{if("Escape"===e.key)return void r();if("ArrowDown"===e.key){e.preventDefault(),c(e=>Math.min(e+1,d.length-1));return}if("ArrowUp"===e.key){e.preventDefault(),c(e=>Math.max(e-1,0));return}"Enter"===e.key&&(e.preventDefault(),d[i]&&(t(d[i].path),r()))},[d,i,t,r]);return(0,o.useEffect)(()=>{function e(e){e.target.closest("[data-quick-open]")||r()}return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[r]),(0,l.jsxs)("div",{className:"fixed inset-0 z-50 flex justify-center pt-[15vh]",children:[(0,l.jsx)("div",{className:"fixed inset-0 bg-black/40"}),(0,l.jsxs)("div",{"data-quick-open":!0,className:"relative w-full max-w-lg",children:[(0,l.jsx)("input",{ref:f,value:a,onChange:e=>s(e.target.value),onKeyDown:v,placeholder:"Search files by name...",className:"w-full rounded-t-md border border-[var(--border)] bg-[var(--card)] px-4 py-3 text-sm text-[var(--foreground)] placeholder-[var(--muted-foreground)] outline-none"}),(0,l.jsx)("div",{ref:h,className:"max-h-[40vh] overflow-y-auto rounded-b-md border border-t-0 border-[var(--border)] bg-[var(--card)]",children:0===d.length?(0,l.jsx)("div",{className:"px-4 py-6 text-center text-xs text-[var(--muted-foreground)]",children:p?"Searching...":"No files found"}):d.map((e,n)=>{var a,s,o;let c=null!=(o=lB[null!=(s=null==(a=e.name.split(".").pop())?void 0:a.toLowerCase())?s:""])?o:Q.A;return(0,l.jsxs)("button",{onClick:()=>{t(e.path),r()},className:(0,I.cn)("flex w-full items-center gap-2 px-4 py-2 text-left text-xs transition-colors",n===i?"bg-[var(--accent)] text-[var(--accent-foreground)]":"text-[var(--foreground)] hover:bg-[var(--secondary)]"),children:[(0,l.jsx)(c,{className:"h-3.5 w-3.5 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"truncate font-medium",children:e.name}),(0,l.jsx)("span",{className:"ml-auto truncate text-[10px] text-[var(--muted-foreground)]",children:e.path})]},e.path)})})]})]})}var lH=r(82011);function lK(e){let{initialPath:t,onSelect:r,onClose:n}=e,[a,s]=(0,o.useState)(null!=t?t:""),[i,c]=(0,o.useState)(""),[d,m]=(0,o.useState)([]),[p,x]=(0,o.useState)(!1),[f,h]=(0,o.useState)(null),v=(0,o.useCallback)(async e=>{x(!0),h(null);try{let t=await u.F.fs.browse(e);s(t.path),c(t.parent),m(t.entries)}catch(e){h(e instanceof Error?e.message:"Failed to load directory")}finally{x(!1)}},[]);return(0,o.useEffect)(()=>{t?v(t):u.F.fs.home().then(e=>{let{home:t}=e;return v(t)}).catch(e=>h(String(e)))},[t,v]),(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:n,children:(0,l.jsxs)("div",{className:"w-[560px] max-h-[70vh] flex flex-col rounded-lg border border-[var(--border)] bg-[var(--background)] shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-2.5",children:[(0,l.jsx)("h3",{className:"text-sm font-medium text-[var(--foreground)]",children:"Open Workspace"}),(0,l.jsx)("button",{onClick:n,className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)]",children:(0,l.jsx)(eJ.A,{className:"h-4 w-4"})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-1 border-b border-[var(--border)] px-3 py-2",children:[(0,l.jsx)("button",{onClick:()=>v(i),disabled:p||!i||i===a,title:"Parent directory",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] disabled:opacity-30",children:(0,l.jsx)(lH.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("button",{onClick:()=>u.F.fs.home().then(e=>{let{home:t}=e;return v(t)}),disabled:p,title:"Home directory",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] disabled:opacity-30",children:(0,l.jsx)(tO.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("input",{type:"text",value:a,onChange:e=>s(e.target.value),onKeyDown:e=>{"Enter"===e.key&&v(a)},className:"flex-1 rounded border border-[var(--border)] bg-[var(--secondary)] px-2 py-1 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)]"})]}),(0,l.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:[f&&(0,l.jsx)("p",{className:"px-4 py-3 text-xs text-red-400",children:f}),p&&!f&&(0,l.jsx)("p",{className:"px-4 py-3 text-xs text-[var(--muted-foreground)]",children:"Loading..."}),!p&&!f&&0===d.length&&(0,l.jsx)("p",{className:"px-4 py-3 text-xs text-[var(--muted-foreground)]",children:"(empty)"}),!p&&d.map(e=>(0,l.jsxs)("button",{onDoubleClick:()=>v(e.path),onClick:()=>s(e.path),className:(0,I.cn)("flex w-full items-center gap-2 px-4 py-1.5 text-xs text-left transition-colors",a===e.path?"bg-[var(--primary)]/20 text-[var(--foreground)]":"text-[var(--foreground)] hover:bg-[var(--secondary)]"),children:[(0,l.jsx)(E.A,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"}),e.name]},e.path))]}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--border)] px-3 py-2.5",children:[(0,l.jsx)("button",{onClick:n,className:"rounded px-3 py-1 text-xs font-medium text-[var(--muted-foreground)] hover:bg-[var(--secondary)]",children:"Cancel"}),(0,l.jsx)("button",{onClick:()=>r(a),disabled:!a,className:"rounded bg-[var(--primary)] px-3 py-1 text-xs font-medium text-[var(--primary-foreground)] hover:opacity-90 disabled:opacity-30",children:"Open"})]})]})})}let lG="halo_recent_workspaces";function lq(){try{let e=localStorage.getItem(lG),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch(e){return[]}}function l$(e){try{localStorage.setItem(lG,JSON.stringify(e))}catch(e){}}var lJ=r(42981),lZ=r(29062),lV=r(24619);function lY(e){var t,r;let{projectId:n,pathInput:a,onPathInputChange:s,onOpenFolder:i,onOpenPath:c,activeProject:m}=e,p=(0,eZ.kj)(),x=(0,d._r)(),f=nk(e=>e.isStreaming),[v,g]=(0,o.useState)(!1),[b,y]=(0,o.useState)(!1),j=(0,o.useRef)(null),{recent:w,remove:N}=function(){let[e,t]=(0,o.useState)([]);return(0,o.useEffect)(()=>{t(lq())},[]),{recent:e,remove:(0,o.useCallback)(e=>{t(t=>{let r=t.filter(t=>t!==e);return l$(r),r})},[])}}(),[k,S]=(0,o.useState)(!1),[C,A]=(0,o.useState)(!1),E=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(k)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e);function e(e){E.current&&!E.current.contains(e.target)&&S(!1)}},[k]);let T=C?a.trim().toLowerCase():"",M=w.filter(e=>e!==(null==m?void 0:m.path)&&(!T||e.toLowerCase().includes(T)));async function F(){var e;if(!n)return;let t=await (0,I.ZC)("New file name (relative path, e.g. src/hello.ts):");if(!(null==t?void 0:t.trim()))return;let r=t.trim(),a=ek(null!=(e=r.split("/").pop())?e:"");try{a?await u.F.files.mkdir(r,n):await u.F.files.create(r,n),h(n),a&&x.getState().openPreview(r,"","",{bundle:!0})}catch(e){console.error("[Explorer] Failed to create file:",e),window.alert(e instanceof Error?e.message:"Failed to create file")}}async function D(){if(!n)return;let e=await (0,I.ZC)("New folder name (relative path, e.g. src/utils):");if(null==e?void 0:e.trim())try{await u.F.files.mkdir(e.trim(),n),h(n)}catch(e){console.error("[Explorer] Failed to create folder:",e),window.alert(e instanceof Error?e.message:"Failed to create folder")}}async function L(e){var t;if(!n||!(null==(t=e.target.files)?void 0:t.length))return;let r=Array.from(e.target.files);try{await u.F.files.upload(r,n),h(n)}catch(e){console.error("[Explorer] Upload failed:",e),window.alert(e instanceof Error?e.message:"Upload failed")}e.target.value=""}let R=null!=(r=null==m||null==(t=m.path.split("/").filter(Boolean).pop())?void 0:t.toUpperCase())?r:"EXPLORER";return(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex h-10 shrink-0 items-center border-b border-[var(--border)] px-3",children:[(0,l.jsx)(lJ.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"ml-2 text-sm font-medium text-[var(--foreground)]",children:p("nav.explorer")}),(0,l.jsx)("div",{className:"flex-1"}),n&&(0,l.jsx)("button",{onClick:function(){n&&(g(!0),h(n),setTimeout(()=>g(!1),500))},disabled:v,title:"Refresh",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] transition-colors disabled:opacity-50",children:(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",v&&"animate-spin")})})]}),(0,l.jsxs)("div",{className:"flex items-center gap-1 border-b border-[var(--border)] p-3",children:[(0,l.jsxs)("div",{ref:E,className:"relative min-w-0 flex-1",children:[(0,l.jsx)("input",{type:"text",value:a,onChange:e=>{s(e.target.value),A(!0),S(!0)},onFocus:()=>{A(!1),S(!0)},onKeyDown:e=>{"Enter"!==e.key||e.repeat||e.nativeEvent.isComposing?"Escape"===e.key&&S(!1):(S(!1),i())},placeholder:"Enter folder path, press Enter",className:"w-full rounded border border-[var(--border)] bg-[var(--secondary)] px-2 py-1.5 text-xs text-[var(--foreground)] placeholder-[var(--muted-foreground)] outline-none focus:border-[var(--primary)]"}),k&&M.length>0&&(0,l.jsx)("div",{className:"absolute left-0 right-0 top-full z-20 mt-1 max-h-64 overflow-y-auto rounded border border-[var(--border)] bg-[var(--background)] py-1 shadow-lg",children:M.map(e=>(0,l.jsxs)("div",{onClick:()=>{S(!1),c(e)},className:"group flex cursor-pointer items-center gap-2 px-2 py-1.5 hover:bg-[var(--secondary)]",children:[(0,l.jsx)(lZ.A,{className:"h-3.5 w-3.5 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsx)("div",{className:"truncate text-xs text-[var(--foreground)]",children:e.split(/[/\\]/).filter(Boolean).pop()||e}),(0,l.jsx)("div",{className:"truncate text-[10px] text-[var(--muted-foreground)]",children:e})]}),(0,l.jsx)("button",{onClick:t=>{t.stopPropagation(),N(e)},title:"Remove from recent",className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] opacity-0 hover:bg-[var(--border)] hover:text-[var(--foreground)] group-hover:opacity-100",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})})]},e))})]}),(0,l.jsx)("button",{onClick:()=>y(!0),title:"Browse for folder",className:"shrink-0 rounded border border-[var(--border)] p-1.5 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eH.A,{className:"h-3.5 w-3.5"})})]}),b&&(0,l.jsx)(lK,{initialPath:null==m?void 0:m.path,onSelect:e=>{y(!1),c(e)},onClose:()=>y(!1)}),n&&(0,l.jsxs)("div",{className:"flex shrink-0 items-center justify-between border-b border-[var(--border)] px-3 py-1.5",children:[(0,l.jsxs)("div",{className:"flex min-w-0 items-center gap-1.5",children:[(0,l.jsx)("span",{title:p(f?"status.busy":"status.idle"),className:(0,I.cn)("inline-block h-2 w-2 shrink-0 rounded-full",f?"bg-amber-400 animate-pulse":"bg-emerald-500")}),(0,l.jsx)("span",{className:"truncate text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:R})]}),(0,l.jsxs)("div",{className:"flex items-center gap-0.5",children:[(0,l.jsx)("button",{onClick:F,title:"New File",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eB.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("button",{onClick:D,title:"New Folder",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eW.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("button",{onClick:()=>{var e;return null==(e=j.current)?void 0:e.click()},title:"Upload Files",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(lV.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("input",{ref:j,type:"file",multiple:!0,className:"hidden",onChange:L})]})]}),(0,l.jsx)("div",{className:"flex-1 overflow-y-auto",children:n?(0,l.jsx)(r_,{projectId:n,mode:"tree-only"}):(0,l.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 p-6 text-center",children:[(0,l.jsx)(P.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:"Enter a folder path to explore files"})]})})]})}var lQ=r(91061),lX=r(40876),l0=r(35829);function l1(e){return"".concat(e.id,":").concat(e.scope)}let l3="halo_skills_selectedKey",l5="halo_skills_expandedScopes";function l2(){try{let e=localStorage.getItem(l5);if(e)return new Set(JSON.parse(e))}catch(e){}return new Set(["global","workspace","extension"])}let l4=(0,g.v)(e=>({skills:[],selectedKey:localStorage.getItem(l3),setSkills:t=>e({skills:t}),setSelectedKey:t=>{t?localStorage.setItem(l3,t):localStorage.removeItem(l3),e({selectedKey:t})},addSkill:t=>e(e=>({skills:[...e.skills,t]})),removeSkill:t=>e(e=>{let r=e.skills.filter(e=>l1(e)!==t),[n,a]=t.split(":"),s="workspace"===a?r.map(e=>e.id===n&&"global"===e.scope?{...e,overridden:!1}:e):r,l=e.selectedKey===t?null:e.selectedKey;return e.selectedKey===t&&localStorage.removeItem(l3),{skills:s,selectedKey:l}})}));function l8(){let e=(0,eZ.kj)(),{skills:t,selectedKey:r,setSkills:n,setSelectedKey:a,addSkill:s,removeSkill:i}=l4(),c=rA(e=>e.activeProject),d=null==c?void 0:c.path,[m,f]=(0,o.useState)(l2),[h,v]=(0,o.useState)(!1),g=lf(e=>e.version);async function b(e){if("workspace"===e&&!d)return;let r=await (0,I.ZC)("New ".concat(e," skill name:"));if(!(null==r?void 0:r.trim()))return;let l=r.trim().toLowerCase().replace(/[^a-z0-9一-鿿]+/g,"-").replace(/^-|-$/g,""),o=t.find(t=>t.id===l&&t.scope!==e);if(o){var i;let t="workspace"===o.scope?'Workspace skill "'.concat(o.name,'" has the same ID.\nIt will override this global skill in that project.\n\nContinue?'):"extension"===o.scope?'Skill "'.concat(o.name,'" from extension ').concat(null!=(i=o.extId)?i:""," has the same ID.\nThe new ").concat(e," skill will override it at runtime.\n\nContinue?"):'Global skill "'.concat(o.name,'" has the same ID.\nWorkspace version will override it at runtime.\n\nContinue?');if(!await (0,I.fN)(t))return}try{let l=(await u.F.skills.create({name:r.trim(),scope:e,projectId:"workspace"===e?d:void 0})).skill;o?n(t.map(t=>t.id===l.id&&("workspace"===e?"workspace"!==t.scope:"extension"===t.scope)?{...t,overridden:!0}:t).concat(l)):s(l),f(t=>new Set(t).add(e)),a(l1(l)),lh()}catch(e){console.error("[SkillsSidebar] Create failed:",e)}}async function y(e,t){if(e.stopPropagation(),await (0,I.fN)('Delete skill "'.concat(t.name,'"?')))try{await u.F.skills.remove(t.id,"workspace"===t.scope?{scope:"workspace",projectId:d}:void 0),i(l1(t)),lh()}catch(e){console.error("[SkillsSidebar] Delete failed:",e)}}async function j(e,r){e.stopPropagation();try{let e=await u.F.skills.toggle(r.id,{scope:r.scope,projectId:d});n(t.map(t=>l1(t)===l1(r)?{...t,disabled:e.disabled}:t)),lh()}catch(e){console.error("[SkillsSidebar] Toggle failed:",e)}}(0,o.useEffect)(()=>{localStorage.setItem(l5,JSON.stringify([...m]))},[m]),(0,o.useEffect)(()=>{v(!0),u.F.skills.list(d).then(e=>n(e.skills)).catch(()=>{}).finally(()=>v(!1))},[d,g,n]),(0,o.useEffect)(()=>{if(d)return x(p,lh)},[d]),(0,o.useEffect)(()=>{let e=()=>lh();return window.addEventListener("focus",e),()=>window.removeEventListener("focus",e)},[]);let w=t.filter(e=>"global"===e.scope),N=t.filter(e=>"workspace"===e.scope),k=t.filter(e=>"extension"===e.scope),S=(t,n,s,o)=>{let i=m.has(t),c="extension"===t;return(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"flex items-center h-8 px-2 hover:bg-[var(--secondary)]/50 transition-colors",children:[(0,l.jsxs)("button",{onClick:()=>{f(e=>{let r=new Set(e);return r.has(t)?r.delete(t):r.add(t),r})},className:"flex items-center gap-1.5 flex-1 min-w-0",children:[(0,l.jsx)(F.A,{className:(0,I.cn)("h-3 w-3 shrink-0 text-[var(--muted-foreground)] transition-transform",i&&"rotate-90")}),(0,l.jsx)(n,{className:"h-3 w-3 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-[11px] font-medium text-[var(--foreground)] truncate",children:s}),(0,l.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)] ml-auto",children:o.length})]}),!c&&(0,l.jsx)("button",{onClick:e=>{e.stopPropagation(),b(t)},title:"New ".concat(t," skill"),className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--secondary)]",children:(0,l.jsx)(s8.A,{className:"h-3 w-3"})})]}),i&&o.map(t=>{var n;let s=l1(t);return(0,l.jsxs)("div",{onClick:()=>a(s),className:(0,I.cn)("group flex w-full items-center gap-2 pl-7 pr-2 py-1.5 cursor-pointer transition-colors",r===s?"bg-[var(--secondary)]":"hover:bg-[var(--secondary)]/50",(t.overridden||t.disabled)&&"opacity-40"),children:[(0,l.jsx)(lQ.A,{className:"h-3 w-3 shrink-0 text-amber-500"}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",title:c?t.description:void 0,children:[(0,l.jsx)("p",{className:"text-[11px] font-medium text-[var(--foreground)] truncate",children:t.name}),(t.disabled||t.overridden||t.description||c)&&(0,l.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] truncate",children:t.disabled?"disabled":t.overridden?"overridden":c?e("skill.fromExtension",{ext:null!=(n=t.extId)?n:""}):t.description})]}),(0,l.jsx)("button",{onClick:e=>j(e,t),className:(0,I.cn)("shrink-0 rounded p-0.5 text-[var(--muted-foreground)] transition-opacity hover:text-[var(--foreground)]",t.disabled?"opacity-100":"opacity-0 group-hover:opacity-100"),title:t.disabled?"Enable skill":"Disable skill",children:t.disabled?(0,l.jsx)(lX.A,{className:"h-4.5 w-4.5"}):(0,l.jsx)(l0.A,{className:"h-4.5 w-4.5 text-blue-500"})}),!c&&(0,l.jsx)("button",{onClick:e=>y(e,t),className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] opacity-0 transition-opacity group-hover:opacity-100 hover:text-red-400",title:"Delete skill",children:(0,l.jsx)(eU.A,{className:"h-3 w-3"})})]},s)})]},t)};return(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex h-10 shrink-0 items-center border-b border-[var(--border)] px-3",children:[(0,l.jsx)(lQ.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"ml-2 text-sm font-medium text-[var(--foreground)]",children:e("skill.skills")}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsx)("button",{onClick:()=>lh(),disabled:h,title:"Refresh skills",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] transition-colors disabled:opacity-50",children:(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",h&&"animate-spin")})})]}),(0,l.jsxs)("div",{className:"flex-1 overflow-y-auto py-1",children:[S("global",z.A,e("common.global"),w),d&&S("workspace",P.A,e("common.workspace"),N),k.length>0&&S("extension",rz.A,e("skill.section.extension"),k),0===t.length&&(0,l.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 p-6 text-center",children:[(0,l.jsx)(lQ.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:e("skill.noSkills")})]})]})]})}var l6=r(67889),l9=r(79773),l7=r(73743),oe=r(4196);function ot(e){let{value:t,disabled:r,presets:n,placeholder:a,onCommit:s,minWidth:i=240,className:c}=e,[d,u]=(0,o.useState)(t),[m,p]=(0,o.useState)(!1),[x,f]=(0,o.useState)(""),[h,v]=(0,o.useState)(0),g=(0,o.useRef)(null),b=(0,o.useRef)(null);(0,o.useEffect)(()=>{u(t)},[t]),(0,o.useEffect)(()=>{m&&(f(""),v(0),setTimeout(()=>{var e;return null==(e=b.current)?void 0:e.focus()},0))},[m]);let y=(0,o.useMemo)(()=>{if(!x)return n;let e=x.toLowerCase();return n.filter(t=>t.id.toLowerCase().includes(e)||t.label.toLowerCase().includes(e))},[x,n]);function j(e){u(e),p(!1),e!==t&&s(e)}function w(){d!==t&&s(d)}return(0,o.useEffect)(()=>{h>=y.length&&v(0)},[y.length,h]),(0,o.useEffect)(()=>{if(m)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e);function e(e){g.current&&!g.current.contains(e.target)&&p(!1)}},[m]),(0,l.jsxs)("div",{ref:g,className:"relative ".concat(null!=c?c:""),style:{minWidth:i},children:[(0,l.jsx)("input",{value:d,disabled:r,onFocus:()=>p(!0),onChange:e=>u(e.target.value),onBlur:()=>{setTimeout(()=>{m||w()},120)},onKeyDown:e=>{"ArrowDown"!==e.key||m?"Enter"===e.key?(e.preventDefault(),w()):"Escape"===e.key&&p(!1):(e.preventDefault(),p(!0))},placeholder:a,className:"h-7 w-full rounded border border-[var(--border)] bg-[var(--card)] px-2 pr-6 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)]"}),(0,l.jsx)("span",{className:"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-[10px] opacity-50",children:"▾"}),m&&(0,l.jsxs)("div",{className:"absolute left-0 right-0 top-[calc(100%+2px)] z-20 max-h-72 overflow-hidden rounded border border-[var(--border)] bg-[var(--card)] shadow-lg",children:[(0,l.jsx)("div",{className:"border-b border-[var(--border)] p-1",children:(0,l.jsx)("input",{ref:b,value:x,onChange:e=>{f(e.target.value),v(0)},onKeyDown:e=>{if("ArrowDown"===e.key)e.preventDefault(),v(e=>Math.min(y.length-1,e+1));else if("ArrowUp"===e.key)e.preventDefault(),v(e=>Math.max(0,e-1));else if("Enter"===e.key){e.preventDefault();let t=y[h];t&&j(t.id)}else"Escape"===e.key&&p(!1)},placeholder:"Filter…",className:"h-6 w-full rounded border border-[var(--border)] bg-[var(--background)] px-2 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)]"})}),(0,l.jsx)("div",{className:"max-h-56 overflow-auto",children:0===y.length?(0,l.jsx)("div",{className:"px-2 py-2 text-xs text-[var(--muted-foreground)]",children:"No matches"}):y.map((e,t)=>(0,l.jsxs)("div",{onMouseDown:t=>{t.preventDefault(),j(e.id)},onMouseEnter:()=>v(t),className:"cursor-pointer px-2 py-1 text-xs ".concat(t===h?"bg-[var(--primary)] text-[var(--primary-foreground)]":"text-[var(--foreground)] hover:bg-[var(--secondary)]"),children:[(0,l.jsx)("div",{className:"font-medium",children:e.label}),e.label!==e.id&&(0,l.jsx)("div",{className:"text-[10px] ".concat(t===h?"opacity-80":"opacity-60"),children:e.id})]},e.id))})]})]})}let or=e=>Array.isArray(e)?e.filter(e=>"string"==typeof e&&e.length>0):[];function on(e,t){let r="string"==typeof(null==e?void 0:e.defaultEndpoint)?e.defaultEndpoint:"",n=or(null==t?void 0:t.endpoints);return 0===n.length?{presets:or(null==e?void 0:e.endpointPresets),defaultEndpoint:r,modelScoped:!1}:{presets:n,defaultEndpoint:n.includes(r)?r:n[0],modelScoped:!0}}let oa={promptCaching:{ttlPresets:[{value:"5m",label:"5min"},{value:"1h",label:"1hour"}]},thinking:{effortPresets:[{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"},{value:"max",label:"Max"}]},verbosity:{presets:[{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"}]}};function os(e,t){var r,n,a,s,l,o,i,c,d,u;let m=null==e?void 0:e.capabilities,p={},x=null==m?void 0:m.thinking,f=t.thinking;if(x||f){let e=null!=(r=null==x?void 0:x.mode)?r:"adaptive";if(f?!f.enabled:!(null==x?void 0:x.defaultEnabled))p.thinking=void 0;else if("manual"===e){let e=null==f?void 0:f.budget_tokens;p.thinking={enabled:!0,budget_tokens:null!=(n=null!=e?e:null==x?void 0:x.defaultBudgetTokens)?n:8192}}else{let e=null==x?void 0:x.effortPresets,t=null!=(s=null==f?void 0:f.effort)?s:null==f?void 0:f.budget,r=t&&(null==e?void 0:e.some(e=>e.value===t)),n=null!=(o=null!=(l=null==x?void 0:x.default)?l:null==e||null==(a=e[0])?void 0:a.value)?o:"medium";p.thinking={enabled:!0,effort:r?t:n}}}let h=null==m?void 0:m.promptCaching,v=null==h?void 0:h.ttlPresets;if(null==v?void 0:v.length){let e=t.promptCaching,r="string"==typeof e?e:void 0;r&&v.some(e=>e.value===r)?p.promptCaching=r:r?p.promptCaching=null!=(i=null==h?void 0:h.default)?i:v[0].value:p.promptCaching=null==(c=null==h?void 0:h.defaultEnabled)||c?null!=(d=null==h?void 0:h.default)?d:v[0].value:void 0}else p.promptCaching=void 0;let g=null==m?void 0:m.verbosity,b=null==g?void 0:g.presets,y="string"==typeof t.verbosity?t.verbosity:void 0;return(null==b?void 0:b.length)?y&&b.some(e=>e.value===y)?p.verbosity=y:p.verbosity=null!=(u=null==g?void 0:g.default)?u:void 0:p.verbosity=void 0,p}function ol(e){var t;return null!=(t=null==e?void 0:e.maxContextWindow)?t:null==e?void 0:e.contextWindow}function oo(e,t,r){if(!t||0===Object.keys(r).length)return;let n={...r},a="number"==typeof r.maxTokens?r.maxTokens:void 0,s=ol(t);void 0!==t.contextWindow&&(void 0===a||a===(null==e?void 0:e.contextWindow)||void 0!==s&&a>s)&&(n.maxTokens=Math.min(t.contextWindow,null!=s?s:t.contextWindow));let l="number"==typeof r.compressAt?r.compressAt:void 0;return void 0!==t.compressAt&&(void 0===l||l===(null==e?void 0:e.compressAt))&&(n.compressAt=t.compressAt),n.maxTokens===r.maxTokens&&n.compressAt===r.compressAt?void 0:n}function oi(e){let{value:t,max:r,onCommit:n}=e,a=(0,eZ.kj)(),[s,i]=(0,o.useState)(String(t)),[c,d]=(0,o.useState)(t);t!==c&&(d(t),i(String(t)));let u=void 0!==r&&Number(s)>r;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"number",value:s,onChange:e=>{i(e.target.value);let t=Number(e.target.value);Number.isInteger(t)&&t>0&&(void 0===r||t<=r)&&n(t)},className:(0,I.cn)(oc,"mt-1",u&&"border-red-500 focus:border-red-500")}),void 0!==r&&(0,l.jsx)("p",{className:(0,I.cn)(ou,"mt-0.5",u&&"text-red-500"),children:a(u?"agent.contextOverMax":"agent.contextMax",{max:r.toLocaleString()})})]})}let oc="h-7 w-full rounded border border-[var(--border)] bg-[var(--card)] px-2 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)]",od="text-[11px] font-medium text-[var(--foreground)]",ou="text-[10px] text-[var(--muted-foreground)]";function om(e){let{label:t,enabled:r,value:n,defaultValue:a,presets:s,onChange:o}=e;return(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,l.jsx)("input",{type:"checkbox",checked:r,onChange:e=>o(e.target.checked?n||a:void 0),className:"rounded border-[var(--border)] bg-[var(--card)] text-[var(--primary)] focus:ring-[var(--primary)] h-3.5 w-3.5 cursor-pointer"}),(0,l.jsx)("span",{className:od,children:t})]}),r&&(0,l.jsx)(ot,{value:n||a,presets:s.map(e=>({id:e.value,label:e.label})),onCommit:e=>o(e||void 0),minWidth:110,className:"h-7"})]})}function op(e){var t,r,n,a,s,i,c,d,u,m,p,x;let{data:f,availableSkills:h,availableTools:v,allAgents:g,selfId:b,modelsRegistry:y,onUpdate:j,onUpdateNested:w,onToggleArrayItem:N}=e,k=(0,eZ.kj)(),S=null!=(n=f.model)?n:{},C=null!=(a=f.context)?a:{},A=Array.isArray(f.skills)?f.skills:[],E=Array.isArray(f.tools)?f.tools:[],T=Array.isArray(f.team)?f.team:void 0,M=null!=(s=null==y||null==(t=y.providers)?void 0:t.flatMap(e=>e.models))?s:[],F=String(null!=(i=S.id)?i:""),D=M.find(e=>e.id===F),[P,L]=(0,o.useState)(null);return(0,l.jsxs)("div",{className:"h-full overflow-y-auto p-5 space-y-5",children:[(0,l.jsxs)("section",{className:"space-y-3",children:[(0,l.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:k("agent.basic")}),(0,l.jsxs)("div",{className:"grid grid-cols-[1fr_1fr_80px] gap-4",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:od,children:k("agent.name")}),(0,l.jsx)("input",{value:String(null!=(c=f.name)?c:""),onChange:e=>j("name",e.target.value),className:(0,I.cn)(oc,"mt-1")})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:od,children:k("agent.description")}),(0,l.jsx)("input",{value:String(null!=(d=f.description)?d:""),onChange:e=>j("description",e.target.value),className:(0,I.cn)(oc,"mt-1")})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:od,children:k("agent.priority")}),(0,l.jsx)("input",{type:"number",value:null!=f.priority?String(f.priority):"",onChange:e=>j("priority",e.target.value?Number(e.target.value):void 0),className:(0,I.cn)(oc,"mt-1"),placeholder:"0"})]})]})]}),(0,l.jsxs)("section",{className:"space-y-3",children:[(0,l.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:k("agent.model")}),(0,l.jsxs)("div",{className:"grid grid-cols-4 gap-4",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:od,children:k("agent.provider")}),y&&y.providers.length>0?(0,l.jsx)("select",{value:String(null!=(m=S.provider)?m:null!=(u=null==(r=y.providers[0])?void 0:r.id)?u:""),onChange:e=>{var t,r,n,a;let s=y.providers.find(t=>t.id===e.target.value),l=String(null!=(t=S.id)?t:""),o=null==s?void 0:s.models.some(e=>e.id===l),i=null!=(n=null!=(r=null==s?void 0:s.models.find(e=>e.id===s.defaultModelId))?r:o?s.models.find(e=>e.id===l):void 0)?n:null==s?void 0:s.models[0];L(null),j("model",{...S,provider:e.target.value,id:null!=(a=null==i?void 0:i.id)?a:"",endpoint:on(s,i).defaultEndpoint,...os(i,S)});let c=oo(D,i,C);c&&j("context",c)},className:(0,I.cn)("h-7 w-full rounded border border-[var(--border)] bg-[var(--card)] px-2 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)] appearance-none cursor-pointer","mt-1"),children:y.providers.map(e=>{var t;return(0,l.jsx)("option",{value:e.id,title:e.description,children:null!=(t=e.displayName)?t:e.id},e.id)})}):(0,l.jsx)("input",{value:String(null!=(p=S.provider)?p:""),onChange:e=>w("model","provider",e.target.value),className:(0,I.cn)(oc,"mt-1")})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:od,children:k("agent.modelId")}),(()=>{var e,t,r,n;let a=String(null!=(r=S.provider)?r:null!=(t=null==y||null==(e=y.providers[0])?void 0:e.id)?t:""),s=null==y?void 0:y.providers.find(e=>e.id===a),o=null!=(n=null==s?void 0:s.models)?n:[];return(0,l.jsx)(ot,{value:F,presets:o.map(e=>{var t;return{id:e.id,label:null!=(t=e.displayName)?t:e.id}}),placeholder:"model id",onCommit:e=>(function(e){var t,r,n;let a=o.find(t=>t.id===e),l=on(s,a),i=String(null!=(t=S.endpoint)?t:"")||(null!=(r=null==s?void 0:s.defaultEndpoint)?r:""),c=l.modelScoped&&!l.presets.includes(i)?l.defaultEndpoint:void 0;L(c?k("agent.endpointSwitched",{endpoint:c,model:null!=(n=null==a?void 0:a.displayName)?n:e}):null),j("model",{...S,id:e,...c?{endpoint:c}:{},...os(a,S)});let d=oo(D,a,C);d&&j("context",d)})(e),className:"mt-1"})})()]}),(()=>{var e,t,r,n,a;let s=String(null!=(r=S.provider)?r:null!=(t=null==y||null==(e=y.providers[0])?void 0:e.id)?t:""),o=null==y?void 0:y.providers.find(e=>e.id===s),i=null==o?void 0:o.models.find(e=>e.id===F),{presets:c,defaultEndpoint:d,modelScoped:u}=on(o,i),m=String(null!=(n=S.endpoint)?n:""),p=u&&""!==m&&!c.includes(m);return(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:od,children:k("agent.endpoint")}),(0,l.jsx)(ot,{value:m,presets:c.map(e=>({id:e,label:e})),placeholder:d||"https://...",onCommit:e=>{L(null),w("model","endpoint",e)},className:"mt-1"}),d&&!S.endpoint&&(0,l.jsxs)("p",{className:(0,I.cn)(ou,"mt-0.5"),children:["Default: ",d]}),P&&(0,l.jsx)("p",{className:(0,I.cn)(ou,"mt-0.5"),children:P}),p&&(0,l.jsx)("p",{className:(0,I.cn)(ou,"mt-0.5 text-amber-500"),children:k("agent.endpointOffList",{model:null!=(a=null==i?void 0:i.displayName)?a:F})})]})})(),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:od,children:k("agent.maxTokens")}),(0,l.jsx)("input",{type:"number",value:null!=S.maxTokens?String(S.maxTokens):"",onChange:e=>w("model","maxTokens",e.target.value?Number(e.target.value):void 0),className:(0,I.cn)(oc,"mt-1"),placeholder:(null==D?void 0:D.maxOutputTokens)?String(D.maxOutputTokens):"auto"}),(0,l.jsx)("p",{className:(0,I.cn)(ou,"mt-0.5"),children:(null==D?void 0:D.maxOutputTokens)?k("agent.maxTokensDefault",{max:D.maxOutputTokens.toLocaleString()}):k("agent.maxTokensAuto")})]})]}),(()=>{var e,t,r,n,a,s,o,i;let c=null!=(s=null==D?void 0:D.capabilities)?s:F?oa:null;if(!c)return null;let d=null==(e=c.promptCaching)?void 0:e.ttlPresets,u=null==(t=c.thinking)?void 0:t.effortPresets;return(0,l.jsxs)("div",{className:"flex flex-wrap gap-6 pt-1",children:[d&&(0,l.jsx)(om,{label:"Prompt Caching",enabled:!!S.promptCaching,value:"string"==typeof S.promptCaching?S.promptCaching:"",defaultValue:null!=(o=null==(r=c.promptCaching)?void 0:r.default)?o:d[0].value,presets:d,onChange:e=>w("model","promptCaching",e)}),(null==(a=c.verbosity)||null==(n=a.presets)?void 0:n.length)&&(0,l.jsx)(om,{label:"Verbosity",enabled:"string"==typeof S.verbosity,value:"string"==typeof S.verbosity?S.verbosity:"",defaultValue:null!=(i=c.verbosity.default)?i:c.verbosity.presets[0].value,presets:c.verbosity.presets,onChange:e=>w("model","verbosity",e)}),(()=>{let e=!D&&""!==F,t=S.image,r=S.video,n=S.audio;if(e){let e=e=>{let{field:t,label:r,value:n}=e;return(0,l.jsx)("button",{type:"button",onClick:()=>w("model",t,!n||void 0),className:(0,I.cn)("rounded px-2 py-0.5 text-[10px] font-medium transition-colors cursor-pointer",n?"bg-[var(--primary)] text-[var(--primary-foreground)]":"bg-[var(--secondary)] text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:r})};return(0,l.jsxs)("div",{className:"flex items-center gap-1",children:[(0,l.jsx)(e,{field:"image",label:"Image",value:t}),(0,l.jsx)(e,{field:"video",label:"Video",value:r}),(0,l.jsx)(e,{field:"audio",label:"Audio",value:n})]})}return void 0===c.image&&void 0===c.video&&void 0===c.audio?null:(0,l.jsxs)("div",{className:"flex items-center gap-1",children:[void 0!==c.image&&(0,l.jsx)("span",{className:(0,I.cn)("rounded px-2 py-0.5 text-[10px] font-medium",c.image?"bg-emerald-500/15 text-emerald-600":"bg-[var(--secondary)] text-[var(--muted-foreground)]"),children:"Image"}),void 0!==c.video&&(0,l.jsx)("span",{className:(0,I.cn)("rounded px-2 py-0.5 text-[10px] font-medium",c.video?"bg-emerald-500/15 text-emerald-600":"bg-[var(--secondary)] text-[var(--muted-foreground)]"),children:"Video"}),void 0!==c.audio&&(0,l.jsx)("span",{className:(0,I.cn)("rounded px-2 py-0.5 text-[10px] font-medium",c.audio?"bg-emerald-500/15 text-emerald-600":"bg-[var(--secondary)] text-[var(--muted-foreground)]"),children:"Audio"})]})})(),(u||c.thinking)&&(()=>{var e,t,r,n,a,s,o,i,d;let m=S.thinking,p=!!(null==m?void 0:m.enabled),x=!D&&""!==F,f=null!=(n=null==(e=c.thinking)?void 0:e.mode)?n:"adaptive",h=x?(null==m?void 0:m.budget_tokens)!=null?"manual":"adaptive":f,v=null!=(s=null!=(a=null==(t=c.thinking)?void 0:t.default)?a:null==u||null==(r=u[0])?void 0:r.value)?s:"medium",g="manual"===h?{enabled:!0,budget_tokens:8192}:{enabled:!0,effort:v};return(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,l.jsx)("input",{type:"checkbox",checked:p,onChange:e=>{w("model","thinking",e.target.checked?g:void 0)},className:"rounded border-[var(--border)] bg-[var(--card)] text-[var(--primary)] focus:ring-[var(--primary)] h-3.5 w-3.5 cursor-pointer"}),(0,l.jsx)("span",{className:od,children:"Thinking"})]}),p&&"adaptive"===h&&u&&(0,l.jsx)(ot,{value:null!=(i=null!=(o=null==m?void 0:m.effort)?o:null==m?void 0:m.budget)?i:v,presets:u.map(e=>({id:e.value,label:e.label})),onCommit:e=>w("model","thinking",{enabled:!0,effort:e}),minWidth:110,className:"h-7"}),p&&"manual"===h&&(0,l.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,l.jsx)("span",{className:ou,children:"budget"}),(0,l.jsx)("input",{type:"number",min:1024,step:1024,value:null!=(d=null==m?void 0:m.budget_tokens)?d:8192,onChange:e=>{let t=parseInt(e.target.value,10);Number.isFinite(t)&&t>0&&w("model","thinking",{enabled:!0,budget_tokens:t})},className:"h-6 w-24 rounded border border-[var(--border)] bg-[var(--card)] px-2 text-[10px] text-[var(--foreground)] outline-none focus:border-[var(--primary)]"}),(0,l.jsx)("span",{className:ou,children:"tokens"})]}),p&&x&&(0,l.jsx)("button",{type:"button",onClick:()=>{"adaptive"===h?w("model","thinking",{enabled:!0,budget_tokens:8192}):w("model","thinking",{enabled:!0,effort:v})},className:"text-[10px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] underline cursor-pointer",children:"adaptive"===h?"use budget":"use effort"})]})})()]})})(),Object.keys(C).length>0&&(0,l.jsx)("div",{className:"grid grid-cols-2 gap-4 pt-1",children:Object.entries(C).map(e=>{let[t,r]=e;return(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:od,children:"context.".concat(t)}),"maxTokens"===t&&"number"==typeof r?(0,l.jsx)(oi,{value:r,max:ol(D),onCommit:e=>w("context",t,e)}):(0,l.jsx)("input",{type:"number"==typeof r?"number":"text",step:"number"==typeof r&&r<1?"0.1":void 0,value:String(null!=r?r:""),onChange:e=>w("context",t,"number"==typeof r?Number(e.target.value):e.target.value),className:(0,I.cn)(oc,"mt-1")})]},t)})})]}),(0,l.jsxs)("section",{className:"space-y-3",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:k("agent.systemPrompt")}),(0,l.jsx)("span",{className:"text-[9px] text-[var(--muted-foreground)] opacity-60",children:k("agent.systemPromptHint")})]}),(0,l.jsx)("textarea",{value:String(null!=(x=f.system_prompt)?x:""),onChange:e=>j("system_prompt",e.target.value),rows:8,className:"w-full rounded border border-[var(--border)] bg-[var(--card)] px-3 py-2 text-xs leading-relaxed text-[var(--foreground)] outline-none focus:border-[var(--primary)] resize-y font-mono",placeholder:k("agent.systemPromptPlaceholder")})]}),(0,l.jsxs)("section",{className:"space-y-3",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:k("agent.team")}),(0,l.jsx)("span",{className:"text-[9px] text-[var(--muted-foreground)] opacity-60",children:k("agent.teamHint")})]}),(0,l.jsx)("div",{className:"flex flex-wrap gap-2",children:g.map(e=>{let t=void 0!==T&&T.includes(e.id);return(0,l.jsxs)("button",{type:"button",title:e.id,onClick:()=>{let t=null!=T?T:[],r=t.includes(e.id)?t.filter(t=>t!==e.id):[...t,e.id];j("team",0===r.length?void 0:r)},className:(0,I.cn)("rounded-full px-3 py-1 text-xs font-medium transition-colors cursor-pointer",t?"bg-[var(--primary)] text-[var(--primary-foreground)]":"bg-[var(--secondary)] text-[var(--muted-foreground)] hover:bg-[var(--secondary)]/80 hover:text-[var(--foreground)]"),children:[e.name,e.id===b?" (you)":""]},e.id)})})]}),(0,l.jsxs)("section",{className:"space-y-3",children:[(0,l.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Tools"}),0===v.length?(0,l.jsx)("p",{className:ou,children:k("agent.loadingTools")}):(()=>{var e;let t=new Set(v.map(e=>e.name)),r=new Set(["query_agent","start_session","session_list","get_session_output","query_session","interrupt_session","stop_session","archive_session"]),n=E.filter(e=>!t.has(e)&&!r.has(e)),a=S.image,s=null!=a?a:null==D||null==(e=D.capabilities)?void 0:e.image;return(0,l.jsxs)("div",{className:"flex flex-wrap gap-2",children:[v.map(e=>{let t=E.includes(e.name),r="view_image"===e.name&&""!==F&&!0!==s,n=r?"".concat(e.description,"\n\nNote: the selected model does not declare capabilities.image: true — view_image will be dropped from this agent's tool list at runtime."):e.description;return(0,l.jsxs)("button",{type:"button",title:n,onClick:()=>N("tools",e.name),className:(0,I.cn)("rounded-full px-3 py-1 text-xs font-medium transition-colors cursor-pointer",t?"bg-[var(--primary)] text-[var(--primary-foreground)]":"bg-[var(--secondary)] text-[var(--muted-foreground)] hover:bg-[var(--secondary)]/80 hover:text-[var(--foreground)]",r&&"opacity-50"),children:[e.name,r&&(0,l.jsx)("span",{className:"ml-1",children:"⊘"})]},e.name)}),n.map(e=>(0,l.jsxs)("button",{type:"button",title:'Tool "'.concat(e,'" is not available in this server. Click to remove from this agent.'),onClick:()=>N("tools",e),className:"rounded-full px-3 py-1 text-xs font-medium transition-colors cursor-pointer border border-[var(--destructive)] bg-[var(--destructive)]/10 text-[var(--destructive)] hover:bg-[var(--destructive)]/20",children:["⚠ ",e]},"missing-".concat(e)))]})})()]}),(0,l.jsxs)("section",{className:"space-y-3",children:[(0,l.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Skills"}),(()=>{let e=h.filter(e=>!e.disabled&&!e.overridden),t=new Set(e.map(e=>e.id)),r=A.filter(e=>!t.has(e));return 0===e.length&&0===r.length?(0,l.jsx)("p",{className:ou,children:k("agent.noSkills")}):(0,l.jsxs)("div",{className:"flex flex-wrap gap-2",children:[e.map(e=>{let t=A.includes(e.id);return(0,l.jsx)("button",{type:"button",title:[e.description,"(".concat(e.scope,")")].filter(Boolean).join(" "),onClick:()=>N("skills",e.id),className:(0,I.cn)("rounded-full px-3 py-1 text-xs font-medium transition-colors cursor-pointer",t?"bg-[var(--primary)] text-[var(--primary-foreground)]":"bg-[var(--secondary)] text-[var(--muted-foreground)] hover:bg-[var(--secondary)]/80 hover:text-[var(--foreground)]"),children:e.name},e.id)}),r.map(e=>(0,l.jsxs)("button",{type:"button",title:'Skill "'.concat(e,'" is not installed. Add it to ~/.halo/global/skills/ or ',"<workspace>","/.halo/skills/, or click to remove from this agent."),onClick:()=>N("skills",e),className:"rounded-full px-3 py-1 text-xs font-medium transition-colors cursor-pointer border border-[var(--destructive)] bg-[var(--destructive)]/10 text-[var(--destructive)] hover:bg-[var(--destructive)]/20",children:["⚠ ",e]},"missing-".concat(e)))]})})()]})]})}function ox(e){return"".concat(e.id,":").concat(e.scope)}let of="halo_agents_selectedKey",oh="halo_agents_expandedScopes";function ov(){try{let e=localStorage.getItem(oh);if(e)return new Set(JSON.parse(e))}catch(e){}return new Set(["global","workspace"])}function og(){var e,t;let r=(0,eZ.kj)(),n=rA(e=>e.activeProject),a=null!=(e=null==n?void 0:n.path)?e:void 0,[s,i]=(0,o.useState)([]),[d,m]=(0,o.useState)(()=>localStorage.getItem(of)),[f,h]=(0,o.useState)(ov),{skills:v,setSkills:g}=l4(),[b,y]=(0,o.useState)(null),[j,w]=(0,o.useState)(!1);(0,o.useEffect)(()=>{d?localStorage.setItem(of,d):localStorage.removeItem(of)},[d]),(0,o.useEffect)(()=>{localStorage.setItem(oh,JSON.stringify([...f]))},[f]);let N=sh(e=>e.version);(0,o.useEffect)(()=>{u.F.agentConfigs.models().then(y).catch(()=>{})},[N]);let k=(0,o.useCallback)(async()=>{w(!0);try{let e=(await u.F.agentConfigs.list(a)).agents.filter(e=>!(e.internal&&"goal"===e.id));i(e),!e.some(e=>ox(e)===d)&&e.length>0&&m(ox(e[0]))}catch(e){console.error("[AgentManagement] Load failed:",e)}finally{w(!1)}},[a,d]),S=lm(e=>e.version);(0,o.useEffect)(()=>{k()},[k,S]),(0,o.useEffect)(()=>{if(!a)return;let e=p.on("file:changed",e=>{("add"===e.action||"unlink"===e.action||"addDir"===e.action||"unlinkDir"===e.action)&&e.path.startsWith(".halo/agents/")&&lp()}),t=x(p,lp);return()=>{e(),t()}},[a]),(0,o.useEffect)(()=>{let e=()=>lp();return window.addEventListener("focus",e),()=>window.removeEventListener("focus",e)},[]);let C=lf(e=>e.version),A=(0,o.useRef)(C);(0,o.useEffect)(()=>{v.length>0&&A.current===C||(A.current=C,u.F.skills.list(null==n?void 0:n.path).then(e=>{g(e.skills)}).catch(()=>{}))},[null==n?void 0:n.path,v.length,g,C]);let E=null!=(t=s.find(e=>ox(e)===d))?t:null;async function T(e){var t;if("workspace"===e&&!a)return;let r=await (0,I.ZC)("Agent name:");if(!(null==r?void 0:r.trim()))return;let n=null!=(t=await (0,I.ZC)("Agent description (optional):"))?t:"",l=r.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fff]+/g,"-").replace(/^-|-$/g,""),o="workspace"===e?"global":"workspace",c=s.find(e=>e.id===l&&e.scope===o);if(c){let t="workspace"===e?'Global agent "'.concat(c.name,'" has the same ID.\nWorkspace version will override it at runtime.\n\nContinue?'):'Workspace agent "'.concat(c.name,'" has the same ID.\nIt will override this global agent in that project.\n\nContinue?');if(!await (0,I.fN)(t))return}try{let t=(await u.F.agentConfigs.create({name:r.trim(),description:n.trim(),scope:e,projectId:"workspace"===e?a:void 0})).agent;i(r=>[..."workspace"===e?r.map(e=>e.id===t.id&&"global"===e.scope?{...e,overridden:!0}:e):r,t]),h(t=>new Set(t).add(e)),m(ox(t)),lp()}catch(e){console.error("[AgentManagement] Create failed:",e)}}async function M(e){if(await (0,I.fN)('Delete agent "'.concat(e.name,'"?')))try{await u.F.agentConfigs.remove(e.id,{scope:e.scope,projectId:a}),i(t=>{let r=t.filter(t=>ox(t)!==ox(e));return"workspace"===e.scope?r.map(t=>t.id===e.id&&"global"===t.scope?{...t,overridden:!1}:t):r}),d===ox(e)&&m(null),lp()}catch(e){console.error("[AgentManagement] Delete failed:",e)}}async function D(e){try{let{disabled:t}=await u.F.agentConfigs.toggle(e.id,{scope:e.scope,projectId:a});i(r=>r.map(r=>ox(r)===ox(e)?{...r,disabled:t}:r)),lp()}catch(e){console.error("[AgentManagement] Toggle failed:",e)}}let L=s.filter(e=>e.internal),R=s.filter(e=>"global"===e.scope&&!e.internal),_=s.filter(e=>"workspace"===e.scope&&!e.internal),O=(()=>{let e=new Map;for(let t of[...R,..._])t.overridden||t.disabled||e.set(t.id,{id:t.id,name:t.name});return[...e.values()]})(),U=function(e,t,r,n){let s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{allowCreate:!0},o=f.has(e);return(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"flex items-center h-8 px-2 hover:bg-[var(--secondary)]/50 transition-colors",children:[(0,l.jsxs)("button",{onClick:()=>{h(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},className:"flex items-center gap-1.5 flex-1 min-w-0",children:[(0,l.jsx)(F.A,{className:(0,I.cn)("h-3 w-3 shrink-0 text-[var(--muted-foreground)] transition-transform",o&&"rotate-90")}),(0,l.jsx)(t,{className:"h-3 w-3 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-[11px] font-medium text-[var(--foreground)] truncate",children:r}),(0,l.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)] ml-auto",children:n.length})]}),s.allowCreate&&"internal"!==e&&(0,l.jsx)("button",{onClick:t=>{t.stopPropagation(),T(e)},title:"New ".concat(e," agent"),className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--secondary)]",children:(0,l.jsx)(s8.A,{className:"h-3 w-3"})})]}),o&&n.map(t=>{let r=ox(t);return(0,l.jsxs)("div",{className:(0,I.cn)("group flex w-full items-center gap-2 pl-7 pr-2 py-1.5 cursor-pointer transition-colors",d===r?"bg-[var(--secondary)]":"hover:bg-[var(--secondary)]/50",(t.overridden||t.disabled)&&"opacity-40"),onClick:()=>m(r),children:[(0,l.jsx)(au.A,{className:"h-3 w-3 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsx)("p",{className:"text-[11px] font-medium text-[var(--foreground)] truncate",children:t.name}),(t.overridden||t.disabled||t.description)&&(0,l.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] truncate",children:t.overridden?"overridden":t.disabled?"disabled":t.description})]}),"internal"!==e&&a&&(0,l.jsx)("button",{onClick:e=>{e.stopPropagation(),D(t)},title:t.disabled?"Enable (show in roster)":"Disable (hide from roster)",className:(0,I.cn)("shrink-0 rounded p-0.5 text-[var(--muted-foreground)] transition-opacity hover:text-[var(--foreground)]",t.disabled?"opacity-100":"opacity-0 group-hover:opacity-100"),children:t.disabled?(0,l.jsx)(lX.A,{className:"h-4.5 w-4.5"}):(0,l.jsx)(l0.A,{className:"h-4.5 w-4.5 text-blue-500"})}),"global"===t.scope?(0,l.jsx)("span",{title:"Global agent (cannot delete)",children:(0,l.jsx)(l6.A,{className:"h-3 w-3 shrink-0 text-amber-500"})}):(0,l.jsx)("button",{onClick:e=>{e.stopPropagation(),M(t)},className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] opacity-0 transition-opacity group-hover:opacity-100 hover:text-red-400",children:(0,l.jsx)(eU.A,{className:"h-3 w-3"})})]},r)})]},e)};return(0,l.jsxs)(c.YZ,{direction:"horizontal",autoSaveId:"halo-agent-mgmt",className:"h-full",children:[(0,l.jsx)(c.Zk,{defaultSize:22,minSize:12,maxSize:40,children:(0,l.jsxs)("div",{className:"h-full flex flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex h-10 items-center gap-2 border-b border-[var(--border)] px-3",children:[(0,l.jsx)(au.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:r("agent.agents")}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsx)("button",{onClick:()=>k(),disabled:j,className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] transition-colors disabled:opacity-50",title:"Refresh agents",children:(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",j&&"animate-spin")})})]}),(0,l.jsxs)("div",{className:"flex-1 overflow-y-auto py-1",children:[U("global",z.A,r("common.global"),R),a&&U("workspace",P.A,r("common.workspace"),_),L.length>0&&U("internal",l9.A,r("common.internal"),L,{allowCreate:!1})]})]})}),(0,l.jsx)(c.TW,{className:"w-px bg-[var(--border)] hover:w-1 hover:bg-[var(--primary)] transition-colors"}),(0,l.jsx)(c.Zk,{defaultSize:78,minSize:40,children:E?(0,l.jsx)(ob,{agent:E,allAgents:O,modelsRegistry:b,onSaved:e=>{i(t=>t.map(t=>ox(t)===ox(e)?e:t))}},ox(E)):(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 text-center",children:[(0,l.jsx)(au.A,{className:"h-10 w-10 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:r("agent.selectToEdit")})]})})]})}function ob(e){let{agent:t,allAgents:n,modelsRegistry:a,onSaved:s}=e,i=(0,eZ.kj)(),{skills:c}=l4(),m=rA(e=>e.activeProject),[p,x]=(0,o.useState)({}),f="halo_agent_view:".concat(ox(t)),[h,v]=(0,o.useState)(()=>{var e;return null!=(e=localStorage.getItem(f))?e:"form"}),g=(0,o.useCallback)(e=>{localStorage.setItem(f,e),v(e)},[f]),[b,y]=(0,o.useState)(!0),[j,w]=(0,o.useState)(null),[N,k]=(0,o.useState)(!1),[S,C]=(0,o.useState)([]),[A,I]=(0,o.useState)("");(0,o.useEffect)(()=>{u.F.agentConfigs.tools().then(e=>C(e.tools)).catch(()=>{})},[]);let E=(0,o.useRef)(s);(0,o.useEffect)(()=>{E.current=s});let T=(0,o.useRef)(null),M=(0,o.useCallback)(async()=>{y(!0),w(null);let e="workspace"===t.scope?null==m?void 0:m.path:void 0;try{let n=await u.F.agentConfigs.getYaml(t.id,{scope:t.scope,projectId:e}),{parse:a,stringify:s}=await r.e(510).then(r.bind(r,5510)),l=null,o=!1;try{l=a(n.yaml)}catch(e){o=!0}if(o||null!==l&&("object"!=typeof l||Array.isArray(l)))w("agent.yamlInvalid");else{let e=null!=l?l:{};x(e),T.current=s(e,{lineWidth:120})}}catch(e){console.error("[AgentEditor] Load YAML failed:",e),w("agent.loadFailed"),x({}),T.current=null}try{var n,a;let r=await u.F.agentConfigs.getMdAll(t.id,{scope:t.scope,projectId:e});I(null!=(a=null==(n=r.files["AGENT.md"])?void 0:n.content)?a:"")}catch(e){I("")}y(!1)},[t.id,t.scope,null==m?void 0:m.path]);(0,o.useEffect)(()=>{M()},[M]);let F=(0,o.useRef)(h);return(0,o.useEffect)(()=>{"edit"===F.current&&"form"===h&&M(),F.current=h},[h,M]),(0,o.useEffect)(()=>{if(b||j)return;let e=setTimeout(async()=>{try{let{stringify:e}=await r.e(510).then(r.bind(r,5510)),n=e(p,{lineWidth:120});if(T.current===n)return;k(!0);let a="workspace"===t.scope?null==m?void 0:m.path:void 0,s=await u.F.agentConfigs.saveYaml(t.id,n,{scope:t.scope,projectId:a});T.current=n,E.current(s.agent)}catch(e){console.error("[AgentEditor] Auto-save failed:",e)}finally{k(!1)}},500);return()=>clearTimeout(e)},[p,t.id,t.scope,null==m?void 0:m.path,b,j]),(0,o.useEffect)(()=>{T.current=null},[t.id,t.scope]),(0,l.jsxs)("div",{className:"flex h-full flex-col",children:[(0,l.jsxs)("div",{className:"flex h-10 items-center justify-between border-b border-[var(--border)] bg-[var(--card)] px-3",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:["edit"===h&&(0,l.jsxs)("button",{onClick:()=>g("form"),className:"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",title:"Back to form",children:[(0,l.jsx)(l7.A,{className:"h-3 w-3"}),i("agent.back")]}),(0,l.jsx)("span",{className:"text-xs font-medium text-[var(--foreground)]",children:t.name}),(0,l.jsx)("span",{className:"rounded bg-[var(--secondary)] px-1.5 py-0.5 text-[9px] text-[var(--muted-foreground)]",children:t.scope}),"form"===h&&N&&(0,l.jsx)("span",{className:"text-[9px] text-[var(--muted-foreground)]",children:i("agent.saving")})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[!t.internal&&(0,l.jsxs)("button",{onClick:()=>{nG(t.id),window.dispatchEvent(new CustomEvent("halo:navigate",{detail:{tab:"explorer"}}))},className:"flex items-center gap-1.5 rounded bg-[var(--secondary)] px-2.5 py-1 text-xs font-medium text-[var(--foreground)] transition-colors hover:bg-[var(--secondary)]/80",children:[(0,l.jsx)(oe.A,{className:"h-3 w-3"}),i("agent.test")]}),"form"===h&&(0,l.jsxs)("button",{onClick:()=>g("edit"),className:"flex items-center gap-1.5 rounded bg-[var(--primary)] px-3 py-1 text-xs font-medium text-[var(--primary-foreground)] transition-colors hover:opacity-90",title:i("agent.editHint"),children:[(0,l.jsx)(eq.A,{className:"h-3 w-3"}),i("agent.edit")]})]})]}),(0,l.jsx)("div",{className:"flex-1 min-h-0 overflow-hidden",children:"edit"===h?(0,l.jsx)(d.Ar,{children:(0,l.jsx)(r_,{projectId:t.path,mode:"full",showMaximize:!1})},"".concat(t.id,":").concat(t.scope)):b?(0,l.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-[var(--muted-foreground)]",children:i("agent.loading")}):j?(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 text-sm text-[var(--muted-foreground)]",children:[(0,l.jsx)("span",{children:i(j)}),(0,l.jsxs)("button",{onClick:()=>M(),className:"flex items-center gap-1.5 rounded bg-[var(--secondary)] px-2.5 py-1 text-xs font-medium text-[var(--foreground)] transition-colors hover:bg-[var(--secondary)]/80",children:[(0,l.jsx)(ad.A,{className:"h-3 w-3"}),i("agent.retry")]})]}):(0,l.jsxs)("div",{className:"h-full overflow-y-auto",children:[(0,l.jsx)(op,{data:p,availableSkills:c,availableTools:S,allAgents:n,selfId:t.id,modelsRegistry:a,onUpdate:function(e,t){x(r=>({...r,[e]:t}))},onUpdateNested:function(e,t,r){x(n=>{var a;let s=null!=(a=n[e])?a:{};return{...n,[e]:{...s,[t]:r}}})},onToggleArrayItem:function(e,t){x(r=>{let n=Array.isArray(r[e])?[...r[e]]:[],a=n.indexOf(t);return a>=0?n.splice(a,1):n.push(t),{...r,[e]:n}})}}),A.trim()&&(0,l.jsxs)("div",{className:"border-t border-[var(--border)]",children:[(0,l.jsxs)("div",{className:"flex items-center gap-1.5 px-8 pt-6 text-[10px] uppercase tracking-wide text-[var(--muted-foreground)]",children:[(0,l.jsx)("span",{className:"rounded bg-[var(--secondary)] px-1.5 py-0.5",children:"AGENT.md"}),(0,l.jsx)("span",{children:i("agent.mdPreviewHint")})]}),(0,l.jsx)(e7,{content:A})]})]})})]})}function oy(){var e;let{skills:t,selectedKey:r}=l4(),n=null!=(e=t.find(e=>"".concat(e.id,":").concat(e.scope)===r))?e:null;return n?(0,l.jsx)(d.Ar,{children:"extension"===n.scope?(0,l.jsx)(oj,{skill:n}):(0,l.jsx)(r_,{projectId:n.path,mode:"full",showMaximize:!1})},"".concat(n.id,":").concat(n.scope)):(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 text-center bg-[var(--background)]",children:[(0,l.jsx)(lQ.A,{className:"h-10 w-10 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Select a skill to edit, or create a new one"})]})}function oj(e){var t;let{skill:r}=e,n=(0,eZ.kj)(),[a,s]=(0,o.useState)([]),[i,c]=(0,o.useState)("SKILL.md"),[d,m]=(0,o.useState)(null);return(0,o.useEffect)(()=>{u.F.files.search(r.path,"",1e3).then(e=>s(e.matches.map(e=>e.path).sort((e,t)=>"SKILL.md"===e?-1:"SKILL.md"===t?1:e.localeCompare(t)))).catch(()=>s([]))},[r.path]),(0,o.useEffect)(()=>{m(null),u.F.files.read(i,r.path).then(e=>m(e.content)).catch(e=>m(e instanceof Error?e.message:String(e)))},[i,r.path]),(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex shrink-0 items-center gap-2 border-b border-[var(--border)] px-3 py-2",children:[(0,l.jsx)(rz.A,{className:"h-4 w-4 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)] truncate",children:r.name}),(0,l.jsxs)("span",{className:"shrink-0 rounded bg-[var(--secondary)] px-1.5 py-0.5 text-[10px] text-[var(--muted-foreground)]",children:[n("skill.fromExtension",{ext:null!=(t=r.extId)?t:""})," \xb7 ",n("skill.readOnly")]}),(0,l.jsx)("span",{className:"ml-auto truncate font-mono text-[10px] text-[var(--muted-foreground)]",title:r.path,children:r.path})]}),(0,l.jsx)("p",{className:"shrink-0 border-b border-[var(--border)] bg-[var(--secondary)]/30 px-3 py-1.5 text-[10px] text-[var(--muted-foreground)]",children:n("skill.extensionHint",{id:r.id})}),(0,l.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,l.jsx)("div",{className:"w-48 shrink-0 overflow-y-auto border-r border-[var(--border)] py-1",children:a.map(e=>(0,l.jsxs)("button",{onClick:()=>c(e),title:e,className:(0,I.cn)("flex w-full items-center gap-1.5 px-3 py-1 text-left text-[11px] transition-colors",i===e?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]/50 hover:text-[var(--foreground)]"),children:[(0,l.jsx)(U.A,{className:"h-3 w-3 shrink-0"}),(0,l.jsx)("span",{className:"truncate",children:e})]},e))}),(0,l.jsx)("div",{className:"min-w-0 flex-1 overflow-hidden",children:null!==d&&(0,l.jsx)("pre",{className:"h-full overflow-auto p-4 font-mono text-xs text-[var(--foreground)] whitespace-pre-wrap",children:d})})]})]})}var ow=r(99603);let oN=[],ok=()=>()=>{};function oS(e){var t;let{visible:r}=e,n=(0,eZ.kj)(),a=am(e=>e.selectedSessionId),s=am(e=>e.selectedSession),i=am(e=>e.loadedMessages),c=am(e=>e.loading),d=nF(e=>at(e.tabs,a)),m=null==d?void 0:d.store,f=void 0!==m,h=m&&r?m.subscribe:ok,v=()=>{var e;return null!=(e=null==m?void 0:m.getState().messages)?e:oN},g=(0,o.useSyncExternalStore)(h,v,v),b=()=>{var e;return null!=(e=null==m?void 0:m.getState().isStreaming)&&e},y=(0,o.useSyncExternalStore)(h,b,b),j=(0,o.useRef)(null),[w,N]=(0,o.useState)(!1),[k,S]=(0,o.useState)(()=>"1"===localStorage.getItem("halo_session_debug")),[C,A]=(0,o.useState)(()=>"1"===localStorage.getItem("halo_session_prompt"));(0,o.useEffect)(()=>{localStorage.setItem("halo_session_debug",k?"1":"0")},[k]),(0,o.useEffect)(()=>{localStorage.setItem("halo_session_prompt",C?"1":"0")},[C]),(0,o.useEffect)(()=>{n2=a;let e=a?n5.get(a):void 0;a&&e&&(n5.delete(a),n5.set(a,e))},[a]),(0,o.useEffect)(()=>{n4=r},[r]);let E=am(e=>e.setLoadedMessages),T=(0,o.useRef)(new Map),M=(0,o.useCallback)(e=>{let t=T.current;if(t.has(e))return void t.set(e,!0);let r=()=>{var n;let a=null==(n=rA.getState().activeProject)?void 0:n.path;a&&(t.set(e,!1),n9(e,!1),u.F.sessionLogs.get(e,a).then(t=>{var r,n,a;let s="number"==typeof t.archiveCount?t.archiveCount:0,l=null!=(n=t.messages)?n:[],o=am.getState(),i=o.selectedSessionId===e,c=function(e,t){if(!e||0===e.length)return t;let r=Math.min(e.length,t.length),n=Math.max(0,e.length-2),a=t.length>=e.length;for(let r=0;a&&r<n;r++)(e[r].id!==t[r].id||e[r].deleted!==t[r].deleted)&&(a=!1);if(a){let a=e.length===t.length,s=t.slice();for(let t=0;t<n;t++)s[t]=e[t];for(let l=n;l<r;l++)JSON.stringify(e[l])===JSON.stringify(t[l])?s[l]=e[l]:a=!1;return a?e:s}let s=e.length===t.length,l=t.map((t,r)=>{let n=e[r];return n&&JSON.stringify(n)===JSON.stringify(t)?n:(s=!1,t)});return s?e:l}(null!=(a=null==(r=n8(e))?void 0:r.messages)?a:null,l);n6(e,c,s),i&&(n1(e,s),c!==o.loadedMessages&&E(c))}).catch(()=>n9(e,!0)).finally(()=>{let n=t.get(e);t.delete(e),n&&(n9(e,!0),am.getState().selectedSessionId===e&&r())}))};r()},[E]);(0,o.useEffect)(()=>{let e=e=>{e&&!at(nF.getState().tabs,e)&&M(e)},t=p.on("file:changed",t=>e(function(e,t){if("change"!==t&&"add"!==t||!e.startsWith(".halo/sessions/")||!e.endsWith(".ui.jsonl"))return null;let r=e.slice(e.lastIndexOf("/")+1,-9);for(let[e,t]of n5)ae(e)===r&&(t.stale=!0);return n4&&null!==n2&&ae(n2)===r?n2:null}(t.path,t.action))),r=x(p,()=>e(function(){for(let e of n5.values())e.stale=!0;return n4?n2:null}()));return()=>{t(),r()}},[M]),(0,o.useEffect)(()=>{if(!r||!a||f)return;let e=am.getState();if(e.loading)return;let t=n8(a);!t||t.stale?M(a):e.loadedMessages!==t.messages&&E(t.messages)},[r,a,f,M,E]);let F=(0,o.useMemo)(()=>{if(!a)return[];if(f){let e=g.filter(e=>!e.taskId);return k?e:e.filter(nr)}let e=null!=i?i:[];return k?e:e.filter(e=>!nt(e))},[a,f,g,i,k]),D=(0,o.useMemo)(()=>{for(let e of f?g:null!=i?i:[])if("context"===rV(e)&&e.systemPrompt)return e.systemPrompt;return null},[f,g,i]),P=n0(e=>e.sessionId),R=n0(e=>e.anchor),_=n0(e=>e.cursor),z=n0(e=>e.messages),O=n0(e=>e.loading),B=null!==P&&P===a,W=null!=(t=null==d?void 0:d.archiveCount)?t:0;(0,o.useEffect)(()=>{a&&f&&n1(a,W)},[a,f,W]);let H=(0,o.useMemo)(()=>B?k?z:z.filter(e=>!nt(e)):[],[B,z,k]),K=(0,o.useRef)(!1),G=aH(j,K),q=(0,o.useRef)(null),$=(0,o.useRef)(!0),J=(0,o.useRef)(r),Z=(0,o.useRef)(null),V=(0,o.useRef)(null),Y=(0,o.useRef)(!0),Q=(0,o.useRef)(0),X=(0,o.useCallback)(()=>{let e=n0.getState();if(e.sessionId!==a||e.cursor<1||e.loading)return;let t=j.current;q.current=t?t.scrollHeight-t.scrollTop:null,n3()},[a]);return(0,o.useLayoutEffect)(()=>{$.current=!0,q.current=null,Y.current=!0,K.current=!1,Q.current=0},[a]),(0,o.useLayoutEffect)(()=>{J.current=r,Y.current=!0},[r]),(0,o.useLayoutEffect)(()=>{Z.current=f?null:a},[f,a]),(0,o.useLayoutEffect)(()=>{let e=j.current;if(!Y.current||!r||!e||c||0===F.length)return;Y.current=!1;let t=a&&!f?n8(a):void 0;if(t&&(K.current=!t.atBottom,Q.current=t.scrollOffset),K.current){var n,s;e.scrollTop=(null!=(s=null==(n=V.current)?void 0:n.offsetTop)?s:0)+Q.current,e.scrollTop<80&&($.current=!1)}else G()},[a,r,c,F,f]),(0,o.useEffect)(()=>{let e=j.current;if(!e)return;let t=()=>{var t,r;if(!J.current)return;Q.current=e.scrollTop-(null!=(r=null==(t=V.current)?void 0:t.offsetTop)?r:0);let n=Z.current;n&&function(e,t,r){let n=n5.get(e);n&&(n.scrollOffset=t,n.atBottom=r)}(n,Q.current,!K.current),e.scrollTop>200?$.current=!0:e.scrollTop<80&&$.current&&($.current=!1,X())};return e.addEventListener("scroll",t,{passive:!0}),()=>e.removeEventListener("scroll",t)},[X]),(0,o.useLayoutEffect)(()=>{let e=j.current,t=q.current;e&&null!==t&&(e.scrollTop=e.scrollHeight-t,q.current=null)},[z]),(0,o.useEffect)(()=>{G()},[F,G]),(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex h-10 shrink-0 items-center gap-2 border-b border-[var(--border)] px-3 min-w-0",children:[a?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(ow.A,{className:"h-4 w-4 shrink-0 text-[var(--muted-foreground)]"}),(null==s?void 0:s.agentName)&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-purple-900/50 px-1.5 py-0.5 text-[10px] text-purple-400",children:s.agentName}),(0,l.jsx)("span",{className:"truncate text-xs font-medium text-[var(--foreground)]",title:(null==s?void 0:s.title)||"Untitled",children:(null==s?void 0:s.title)||"Untitled"}),(0,l.jsxs)("span",{className:"shrink-0 text-[10px] text-[var(--muted-foreground)]",children:["(",F.length,")"]}),f&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-blue-900/50 px-1.5 py-0.5 text-[8px] text-blue-400",children:"live"}),(null==s?void 0:s.parentSessionId)&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-[var(--secondary)] px-1 py-0.5 text-[8px] text-[var(--muted-foreground)]",title:"Sub-session",children:"sub"}),(null==s?void 0:s.stoppedAt)&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-[var(--secondary)] px-1 py-0.5 text-[8px] text-[var(--muted-foreground)]",children:"stopped"}),(null==s?void 0:s.archivedAt)&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-amber-900/50 px-1 py-0.5 text-[8px] text-amber-400",title:"Archived: ".concat(new Date(s.archivedAt).toLocaleString()),children:"archived"}),(null==s?void 0:s.createdAt)&&(0,l.jsx)("span",{className:"shrink-0 text-[10px] text-[var(--muted-foreground)]",title:"Created: ".concat(new Date(s.createdAt).toLocaleString()),children:(0,I.fw)(s.createdAt)}),(0,l.jsxs)("button",{onClick:()=>{a&&navigator.clipboard.writeText(a).then(()=>{N(!0),setTimeout(()=>N(!1),1200)}).catch(()=>{})},title:"Session ID: ".concat(a),className:"shrink-0 flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-mono text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] transition-colors",children:[w?(0,l.jsx)(rg.A,{className:"h-2.5 w-2.5 text-green-400"}):(0,l.jsx)(aK.A,{className:"h-2.5 w-2.5"}),a.slice(0,8)]})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(au.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:"Session Viewer"})]}),a&&(0,l.jsxs)("div",{className:"ml-auto flex items-center gap-1",children:[D&&(0,l.jsxs)("button",{onClick:()=>A(!C),className:(0,I.cn)("flex items-center gap-1 rounded px-1.5 py-0.5 text-[9px] transition-colors",C?"bg-purple-900/50 text-purple-400":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"),title:"View system prompt",children:[(0,l.jsx)(U.A,{className:"h-3 w-3"}),"Prompt"]}),(0,l.jsxs)("button",{onClick:()=>S(!k),className:(0,I.cn)("flex items-center gap-1 rounded px-1.5 py-0.5 text-[9px] transition-colors",k?"bg-amber-900/50 text-amber-400":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"),title:"Debug mode: show all messages including sub-agent tool calls",children:[(0,l.jsx)(ld.A,{className:"h-3 w-3"}),"Debug"]})]}),y&&(0,l.jsx)("span",{className:"rounded bg-blue-900/50 px-1.5 py-0.5 text-[9px] text-blue-400 animate-pulse",children:"streaming"})]}),(0,l.jsxs)("div",{ref:j,className:"relative flex-1 overflow-y-auto",children:[C&&D&&(0,l.jsxs)("div",{className:"sticky top-2 right-2 z-10 float-right ml-2 mb-2 mr-2 w-[min(520px,80%)] rounded-md border border-purple-900/60 bg-[var(--background)] shadow-lg",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-purple-900/50 bg-purple-950/40 px-3 py-1.5 rounded-t-md",children:[(0,l.jsx)("span",{className:"text-[10px] font-semibold text-purple-400",children:"System Prompt"}),(0,l.jsx)("button",{onClick:()=>A(!1),title:"Close",className:"rounded p-0.5 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})})]}),(0,l.jsx)("pre",{className:"px-3 py-2 text-[11px] text-[var(--foreground)] whitespace-pre-wrap break-words leading-relaxed max-h-[60vh] overflow-y-auto",children:D})]}),c?(0,l.jsxs)("div",{className:"flex items-center justify-center py-8 text-xs text-[var(--muted-foreground)]",children:[(0,l.jsx)(L.A,{className:"h-3.5 w-3.5 animate-spin mr-1.5"})," Loading session..."]}):a?0===F.length?(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 px-6 text-center",children:[(0,l.jsx)(au.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"No messages in this session"})]}):(0,l.jsxs)(l.Fragment,{children:[B&&R>0&&(0,l.jsxs)("div",{className:"border-b border-[var(--border)]/50",children:[_>0?(0,l.jsxs)("button",{onClick:X,disabled:O,className:"flex w-full items-center justify-center gap-1.5 px-3 py-2 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)] disabled:hover:bg-transparent",children:[O&&(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin"}),n(O?"chat.archive.loading":"chat.archive.loadOlder")]}):(0,l.jsx)("div",{className:"px-3 py-2 text-center text-[10px] text-[var(--muted-foreground)]",children:n("chat.archive.noEarlier")}),H.length>0&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(aJ,{messages:H,debugMode:k,readOnly:!0}),(0,l.jsx)("div",{className:"border-t border-[var(--border)]/50 px-3 py-2 text-center text-[10px] text-[var(--muted-foreground)]",children:n("chat.archive.header",{segments:R-_,messages:H.length})})]})]}),(0,l.jsx)("div",{ref:V}),(0,l.jsx)(aJ,{messages:F,debugMode:k})]}):(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 px-6 text-center",children:[(0,l.jsx)(au.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Select a session from the sidebar to view messages"})]})]})]})}var oC=r(37568),oA=r(28976),oI=r(70539),oE=r(13680),oT=r(29656),oM=r(23715),oF=r(85615),oD=r(8565);function oP(){return(0,l.jsxs)("div",{className:"space-y-8 p-6",children:[(0,l.jsx)(oL,{}),(0,l.jsx)(oR,{})]})}function oL(){let{t:e}=(0,eZ.s9)(),[t,r]=(0,o.useState)(""),[n,a]=(0,o.useState)(""),[s,i]=(0,o.useState)(""),[c,d]=(0,o.useState)(!1),[u,m]=(0,o.useState)(""),[p,x]=(0,o.useState)(!1),f=""!==n?n.length<8?"tooShort":/[A-Za-z]/.test(n)?/[0-9]/.test(n)?null:"needDigit":"needLetter":null,h=""!==n&&n===t,v=""!==s&&s!==n,g=!c&&""!==t&&""!==n&&s===n&&null===f&&!h;async function b(s){if(s.preventDefault(),g){d(!0),m(""),x(!1);try{let e=await fetch("/api/auth/change-password",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldPassword:t,newPassword:n}),credentials:"include"});if(e.ok)x(!0),r(""),a(""),i("");else{let t=await e.json().catch(()=>null);m((null==t?void 0:t.error)||"HTTP ".concat(e.status))}}catch(t){m(e("security.changePassword.connectionFailed"))}finally{d(!1)}}}return(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:e("security.changePassword.title")}),(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:e("security.changePassword.desc")})]}),(0,l.jsxs)("form",{onSubmit:b,className:"max-w-md space-y-4 rounded-md border border-[var(--border)] bg-[var(--card)] p-4",children:[(0,l.jsx)(o_,{label:e("security.changePassword.current"),value:t,disabled:c,autoComplete:"current-password",onChange:e=>{r(e),x(!1)}}),(0,l.jsx)(o_,{label:e("security.changePassword.new"),value:n,disabled:c,autoComplete:"new-password",onChange:e=>{a(e),x(!1)},error:f?e("security.changePassword.".concat(f)):h?e("security.changePassword.sameAsOld"):void 0,hint:e("security.changePassword.rule")}),(0,l.jsx)(o_,{label:e("security.changePassword.confirm"),value:s,disabled:c,autoComplete:"new-password",onChange:e=>{i(e),x(!1)},error:v?e("security.changePassword.mismatch"):void 0}),u&&(0,l.jsx)("p",{className:"text-[11px] text-red-400",children:u}),p&&(0,l.jsx)("p",{className:"text-[11px] text-emerald-400",children:e("security.changePassword.success")}),(0,l.jsx)("button",{type:"submit",disabled:!g,className:"rounded bg-[var(--primary)] px-3 py-1.5 text-xs font-medium text-[var(--primary-foreground)] transition-colors hover:opacity-90 disabled:opacity-50",children:c?e("security.changePassword.submitting"):e("security.changePassword.submit")})]})]})}function oR(){let{t:e}=(0,eZ.s9)(),[t,r]=(0,o.useState)(!1);async function n(){r(!0);try{await fetch("/api/auth/logout",{method:"POST",credentials:"include"})}catch(e){}window.location.reload()}return(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:e("security.logout")}),(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:e("security.logout.desc")})]}),(0,l.jsxs)("button",{onClick:n,disabled:t,className:"flex items-center gap-1.5 rounded border border-[var(--border)] bg-[var(--card)] px-3 py-1.5 text-xs font-medium text-red-400 transition-colors hover:bg-[var(--secondary)] disabled:opacity-50",children:[(0,l.jsx)(oD.A,{className:"h-3.5 w-3.5"}),e("security.logout")]})]})}function o_(e){let{label:t,value:r,disabled:n,autoComplete:a,onChange:s,error:o,hint:i}=e;return(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"text-xs font-medium text-[var(--foreground)]",children:t}),(0,l.jsx)("input",{type:"password",value:r,autoComplete:a,disabled:n,onChange:e=>s(e.target.value),className:(0,I.cn)("mt-1 h-7 w-full rounded border bg-[var(--background)] px-2 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)]",o?"border-red-400/60":"border-[var(--border)]")}),o?(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-red-400",children:o}):i?(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:i}):null]})}var oz=r(3524);function oO(e,t){var r,n;return null===e?t:(null!=(r=t.checkedAt)?r:-1/0)<(null!=(n=e.checkedAt)?n:-1/0)?e:t}function oU(){var e;let{t}=(0,eZ.s9)(),r=(0,o.useSyncExternalStore)(eo,ex,ex),n=(0,o.useRef)(null),[a,s]=(0,o.useState)(!1),[i,c]=(0,o.useState)(null),[d,m]=(0,o.useState)(null);async function x(e){s(!0),c(null);try{await u.F.extensions.update(e)}catch(e){c(e instanceof Error?e.message:String(e))}finally{s(!1)}}async function f(e){s(!0),c(null);try{await u.F.extensions.install(e)}catch(e){c(e instanceof Error?e.message:String(e))}finally{s(!1)}}async function h(e,t){s(!0),c(null);try{await u.F.extensions.setEnabled(e,t)}catch(e){c(e instanceof Error?e.message:String(e))}finally{s(!1)}}async function v(e,r){if(await (0,I.fN)(t("settings.extensions.confirmRemove",{name:r}))){s(!0),c(null);try{await u.F.extensions.remove(e)}catch(e){c(e instanceof Error?e.message:String(e))}finally{s(!1)}}}(0,o.useEffect)(()=>{let e=p.on("updates:changed",e=>{"extensions"===e.scope&&m(t=>oO(t,e.status))});return u.F.updates.extensions().then(e=>m(t=>oO(t,e))).catch(e=>c(e instanceof Error?e.message:String(e))),e},[]);let g=(0,o.useMemo)(()=>{var e;let t=new Map((null!=(e=null==d?void 0:d.extensions)?e:[]).map(e=>["".concat(e.id,"@").concat(e.installed),e]));return[...r.extensions.map(e=>({ext:e,off:!1})),...r.disabled.map(e=>({ext:e,off:!0}))].sort((e,t)=>e.ext.id.localeCompare(t.ext.id)).map(e=>({...e,update:t.get("".concat(e.ext.id,"@").concat(e.ext.version))}))},[r,d]),b=0===g.length&&0===r.errors.length,y=null!=(e=null==d?void 0:d.checking)&&e,j=g.filter(e=>{var t;return(null==(t=e.update)?void 0:t.state)==="available"}).length,w=y?null:j>0?t(1===j?"settings.extensions.updateAvailable":"settings.extensions.updatesAvailable",{n:j}):g.length>0&&g.every(e=>{var t;return(null==(t=e.update)?void 0:t.state)==="current"})?t("settings.extensions.allCurrent"):null;return(0,l.jsxs)("div",{className:"space-y-6 p-6",children:[(0,l.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:t("settings.extensions.title")}),(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:t("settings.extensions.intro")})]}),(0,l.jsx)("input",{ref:n,type:"file",accept:".zip,application/zip",className:"hidden",onChange:e=>{var t;let r=null==(t=e.target.files)?void 0:t[0];e.target.value="",r&&f(r)}}),(0,l.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[(null==d?void 0:d.checkedAt)!=null&&(0,l.jsxs)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:[t("settings.extensions.lastChecked",{time:new Date(d.checkedAt).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1})}),w&&" \xb7 ".concat(w)]}),(0,l.jsxs)("button",{onClick:function(){c(null),u.F.updates.checkExtensions().then(e=>m(t=>oO(t,e))).catch(e=>c(e instanceof Error?e.message:String(e)))},disabled:y,className:"flex shrink-0 items-center gap-1.5 rounded border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--foreground)] transition-colors hover:bg-[var(--secondary)] disabled:opacity-50",children:[(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",y&&"animate-spin")}),y?t("settings.update.checking"):t("settings.update.check")]}),(0,l.jsxs)("button",{onClick:()=>{var e;return null==(e=n.current)?void 0:e.click()},disabled:a,className:"flex shrink-0 items-center gap-1.5 rounded bg-[var(--primary)] px-3 py-1.5 text-xs font-medium text-[var(--primary-foreground)] transition-colors hover:opacity-90 disabled:opacity-50",children:[(0,l.jsx)(lV.A,{className:"h-3.5 w-3.5"}),a?t("settings.extensions.working"):t("settings.extensions.upload")]})]})]}),i&&(0,l.jsx)("p",{className:"text-[11px] text-red-400",children:i}),b?(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:t("settings.extensions.empty")}):(0,l.jsxs)("ul",{className:"divide-y divide-[var(--border)] rounded border border-[var(--border)]",children:[g.map(e=>{let{ext:r,off:n,update:s}=e;return(0,l.jsxs)("li",{className:"flex items-center gap-3 px-3 py-2",children:[(0,l.jsxs)("div",{className:(0,I.cn)("min-w-0 flex-1",n&&"opacity-50"),children:[(0,l.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,l.jsx)("span",{className:"truncate text-xs font-medium text-[var(--foreground)]",children:r.name}),(0,l.jsxs)("code",{className:"text-[10px] text-[var(--muted-foreground)]",children:[r.id,"@",r.version]}),n&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-[var(--secondary)] px-1.5 text-[10px] text-[var(--muted-foreground)]",children:t("settings.extensions.off")}),r.platforms&&(0,l.jsx)("span",{className:"shrink-0 rounded border border-[var(--border)] px-1.5 text-[10px] text-[var(--muted-foreground)]",children:eg(r.platforms,t)}),r.activity&&(0,l.jsx)("span",{className:"shrink-0 rounded border border-[var(--border)] px-1.5 text-[10px] text-[var(--muted-foreground)]",children:t("settings.extensions.activity")}),r.chatbar&&(0,l.jsx)("span",{className:"shrink-0 rounded border border-[var(--border)] px-1.5 text-[10px] text-[var(--muted-foreground)]",children:t("settings.extensions.chatbar")}),!eb(r)&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-[var(--secondary)] px-1.5 text-[10px] text-[var(--muted-foreground)]",children:t("settings.extensions.unsupportedHere")})]}),r.extensions.length>0?(0,l.jsxs)("p",{className:"mt-0.5 truncate text-[10px] text-[var(--muted-foreground)]",children:[r.extensions.join(" "),"option"===r.priority&&" \xb7 ".concat(t("settings.extensions.optionOnly")),r.bundle&&" \xb7 ".concat(t("settings.extensions.bundle")),r.capabilities.includes("save")&&" \xb7 ".concat(t("settings.extensions.canSave")),r.capabilities.includes("media")&&" \xb7 ".concat(t("settings.extensions.media")),r.capabilities.includes("fs-read")&&" \xb7 ".concat(t("settings.extensions.fsRead")),r.description&&" — ".concat(r.description)]}):r.description&&(0,l.jsx)("p",{className:"mt-0.5 truncate text-[10px] text-[var(--muted-foreground)]",children:r.description}),s&&(0,l.jsx)(oB,{entry:s})]}),(null==s?void 0:s.state)==="available"&&(0,l.jsxs)("button",{onClick:()=>x(r.id),disabled:a,className:"flex shrink-0 cursor-pointer items-center gap-1 rounded px-2 py-0.5 text-[10px] text-blue-500 hover:bg-blue-500/10 disabled:opacity-50",children:[(0,l.jsx)(oz.A,{className:"h-3 w-3"}),t("settings.extensions.update")]}),(0,l.jsx)("button",{role:"switch","aria-checked":!n,onClick:()=>h(r.id,n),disabled:a,title:t(n?"settings.extensions.enable":"settings.extensions.disable"),"aria-label":t(n?"settings.extensions.enable":"settings.extensions.disable"),className:"shrink-0 cursor-pointer rounded p-0.5 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] disabled:opacity-50",children:n?(0,l.jsx)(lX.A,{className:"h-4.5 w-4.5"}):(0,l.jsx)(l0.A,{className:"h-4.5 w-4.5 text-blue-500"})}),(0,l.jsx)(oW,{disabled:a,onClick:()=>v(r.id,r.name),label:t("settings.extensions.remove")})]},r.id)}),r.errors.map(e=>(0,l.jsxs)("li",{className:"flex items-center gap-3 px-3 py-2",children:[(0,l.jsx)(aG.A,{className:"h-3.5 w-3.5 shrink-0 text-red-400"}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsx)("code",{className:"text-xs text-red-400",children:e.id}),(0,l.jsx)("p",{className:"mt-0.5 truncate text-[10px] text-[var(--muted-foreground)]",children:e.error})]}),(0,l.jsx)(oW,{disabled:a,onClick:()=>v(e.id,e.id),label:t("settings.extensions.remove")})]},e.id))]})]})}function oB(e){var t,r,n,a;let{entry:s}=e,{t:o}=(0,eZ.s9)(),i="mt-0.5 truncate text-[10px] text-[var(--muted-foreground)]";switch(s.state){case"available":return(0,l.jsx)("p",{className:"mt-0.5 truncate text-[10px] text-blue-500",children:o("settings.extensions.latest",{version:null!=(t=s.latest)?t:""})});case"needs-halo":return(0,l.jsx)("p",{className:i,children:o("settings.extensions.needsHalo",{version:null!=(r=s.latest)?r:"",minHalo:null!=(n=s.minHalo)?n:""})});case"not-found":return(0,l.jsx)("p",{className:i,children:o("settings.extensions.notFound")});case"no-source":return(0,l.jsx)("p",{className:i,children:o("settings.extensions.noSource")});case"invalid":case"refused":case"unreachable":return(0,l.jsx)("p",{className:i,title:s.error,children:o("settings.extensions.".concat(s.state),{error:null!=(a=s.error)?a:""})});default:return null}}function oW(e){let{disabled:t,onClick:r,label:n}=e;return(0,l.jsxs)("button",{onClick:r,disabled:t,className:"flex shrink-0 cursor-pointer items-center gap-1 rounded px-2 py-0.5 text-[10px] text-red-400 hover:bg-red-500/10 hover:text-red-300 disabled:opacity-50",children:[(0,l.jsx)(eU.A,{className:"h-3 w-3"}),n]})}let oH="halo upgrade && halo server restart",oK="https://github.com/turmind/halo-agent/releases";function oG(e){var t,r;let{version:n}=e,{t:a}=(0,eZ.s9)(),[s,i]=(0,o.useState)(null),[c,d]=(0,o.useState)(null),[m,x]=(0,o.useState)(!1);(0,o.useEffect)(()=>{let e=p.on("updates:changed",e=>{"core"===e.scope&&i(t=>oO(t,e.status))});return u.F.updates.core().then(e=>i(t=>oO(t,e))).catch(e=>d(e instanceof Error?e.message:String(e))),e},[]);let f=null!=(t=null==s?void 0:s.checking)&&t,h="web"!==ev(),v=null!=c?c:(null==s?void 0:s.state)==="error"?null!=(r=s.error)?r:"":null;return(0,l.jsxs)("div",{className:"shrink-0 space-y-1 border-t border-[var(--border)] px-3 py-2 text-[10px] text-[var(--muted-foreground)]",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)("span",{className:"truncate",children:["Halo v",n]}),(0,l.jsx)("div",{className:"flex-1"}),(null==s?void 0:s.state)!=="dev"&&(0,l.jsxs)("button",{onClick:function(){d(null),u.F.updates.checkCore().then(e=>i(t=>oO(t,e))).catch(e=>d(e instanceof Error?e.message:String(e)))},disabled:f,className:"flex shrink-0 items-center gap-1 rounded px-1.5 py-0.5 hover:bg-[var(--secondary)] hover:text-[var(--foreground)] disabled:opacity-50",children:[(0,l.jsx)(ad.A,{className:"h-3 w-3 ".concat(f?"animate-spin":"")}),a(f?"settings.update.checking":"settings.update.check")]})]}),(null==s?void 0:s.state)==="dev"&&(0,l.jsx)("p",{children:a("settings.update.dev")}),(null==s?void 0:s.state)==="current"&&s.latest&&(0,l.jsx)("p",{children:a("settings.update.current",{version:s.latest})}),(null==s?void 0:s.state)==="available"&&s.latest&&(0,l.jsxs)("div",{className:"space-y-1",children:[(0,l.jsx)("p",{className:"font-medium text-[var(--foreground)]",children:a("settings.update.available",{version:s.latest})}),h?(0,l.jsx)("a",{href:oK,target:"_blank",rel:"noreferrer",className:"text-[var(--primary)] hover:underline",children:a("settings.update.download")}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex items-center gap-1 rounded bg-[var(--secondary)] px-1.5 py-1",children:[(0,l.jsx)("code",{className:"min-w-0 flex-1 truncate text-[var(--foreground)]",children:oH}),(0,l.jsx)("button",{onClick:function(){navigator.clipboard.writeText(oH).then(()=>{x(!0),setTimeout(()=>x(!1),2e3)}).catch(()=>{})},title:a("settings.update.copy"),className:"shrink-0 hover:text-[var(--foreground)]",children:m?(0,l.jsx)(rg.A,{className:"h-3 w-3"}):(0,l.jsx)(aK.A,{className:"h-3 w-3"})})]}),(0,l.jsx)("p",{children:a("settings.update.sudoHint")}),(0,l.jsx)("a",{href:"".concat(oK,"/tag/v").concat(s.latest),target:"_blank",rel:"noreferrer",className:"text-[var(--primary)] hover:underline",children:a("settings.update.notes")})]})]}),null!==v&&(0,l.jsx)("p",{className:"truncate",title:v,children:a("settings.update.error",{error:v})})]})}function oq(){var e,t,r;let{t:n,refreshFromServer:a}=(0,eZ.s9)(),{refreshFromServer:s}=(0,eX.useTheme)(),i=rA(e=>e.activeProject),[c,d]=(0,o.useState)("global"),[m,p]=(0,o.useState)(null),[x,f]=(0,o.useState)("general"),[h,v]=(0,o.useState)(!1),[g,b]=(0,o.useState)(!1),[y,j]=(0,o.useState)(null),[w,N]=(0,o.useState)([]),k="workspace"===c?null==i?void 0:i.path:void 0,S=(0,o.useCallback)(()=>{b(!0),u.F.settings.getSchema(k).then(e=>{p(e),f(t=>"__orphans"===t||"__security"===t||"__extensions"===t||e.sections.find(e=>e.namespaceId===t)?t:"general")}).catch(e=>{console.error("[Settings] schema load failed:",e)}).finally(()=>b(!1))},[k]),C=sh(e=>e.version),A=(0,o.useSyncExternalStore)(eo,ex,ex);function E(e,t){e.restartRequired&&N(e=>e.includes(t)?e:[...e,t])}async function T(e,t,r){v(!0);try{let n="general"===e?"general.".concat(t.key):"".concat(e,".").concat(t.kind,"s.").concat(t.key);if(""===r)await u.F.settings.remove(c,n,k);else{let e=function(e,t){switch(e){case"int":{let e=parseInt(t,10);return Number.isFinite(e)?e:t}case"float":{let e=parseFloat(t);return Number.isFinite(e)?e:t}case"boolean":return"true"===t;default:return t}}(t.type,r);await u.F.settings.patch(c,n,e,k)}E(t,n),S(),a(),s()}catch(e){console.error("[Settings] save failed:",e)}finally{v(!1)}}async function M(e,t){v(!0);try{let r="general"===e?"general.".concat(t.key):"".concat(e,".").concat(t.kind,"s.").concat(t.key);await u.F.settings.remove(c,r,k),E(t,r),S(),a(),s()}catch(e){console.error("[Settings] reset failed:",e)}finally{v(!1)}}async function F(e){let t="".concat(e.namespaceId,".").concat(e.kind,"s.").concat(e.key);if(confirm(n("settings.orphans.confirm",{key:t}))){v(!0);try{await u.F.settings.remove(c,t,k),S()}catch(e){console.error("[Settings] orphan remove failed:",e)}finally{v(!1)}}}(0,o.useEffect)(()=>{S()},[S,C,A]),(0,o.useEffect)(()=>{u.F.health().then(e=>j("string"==typeof(null==e?void 0:e.version)?e.version:null)).catch(()=>j(null))},[]);let D=null!=(e=null==m?void 0:m.sections)?e:[],P=null!=(t=null==m?void 0:m.orphans)?t:[],L=(0,o.useMemo)(()=>D.find(e=>e.namespaceId===x),[D,x]);return(0,l.jsxs)("div",{className:"flex h-full bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex w-[220px] shrink-0 flex-col border-r border-[var(--border)]",children:[(0,l.jsxs)("div",{className:"flex h-10 items-center gap-2 border-b border-[var(--border)] px-3",children:[(0,l.jsx)(oC.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:n("nav.settings")}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsx)("button",{onClick:S,disabled:g,title:"Refresh",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] transition-colors disabled:opacity-50",children:(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",g&&"animate-spin")})})]}),(0,l.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:[(0,l.jsxs)("div",{className:"border-b border-[var(--border)] p-2",children:[(0,l.jsxs)("div",{className:"flex rounded-md bg-[var(--card)] p-0.5",children:[(0,l.jsxs)("button",{onClick:()=>d("global"),className:(0,I.cn)("flex flex-1 items-center justify-center gap-1 rounded-sm px-2 py-1 text-[10px] font-medium transition-colors","global"===c?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:[(0,l.jsx)(z.A,{className:"h-3 w-3"}),n("common.global")]}),(0,l.jsxs)("button",{onClick:()=>d("workspace"),disabled:!i,className:(0,I.cn)("flex flex-1 items-center justify-center gap-1 rounded-sm px-2 py-1 text-[10px] font-medium transition-colors","workspace"===c?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]",!i&&"cursor-not-allowed opacity-40"),children:[(0,l.jsx)(oA.A,{className:"h-3 w-3"}),n("common.workspace")]})]}),"workspace"===c&&i&&(0,l.jsx)("p",{className:"mt-1 truncate text-[9px] text-[var(--muted-foreground)]",children:i.path})]}),(0,l.jsx)(o$,{sections:D,orphans:P,active:x,onPick:f})]}),y&&(0,l.jsx)(oG,{version:y})]}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,l.jsx)("div",{className:"flex h-10 shrink-0 items-center justify-between border-b border-[var(--border)] px-4",children:(0,l.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:"__security"===x?(0,l.jsxs)(l.Fragment,{children:["~/.halo/secrets/config.yaml → ",(0,l.jsx)("code",{className:"text-[var(--foreground)]",children:"server.password"})]}):"__extensions"===x?(0,l.jsx)(l.Fragment,{children:"~/.halo/global/extensions/"}):(0,l.jsxs)(l.Fragment,{children:["global"===c?"~/.halo/secrets/settings.yaml":"".concat(null!=(r=null==i?void 0:i.path)?r:"...","/.halo/settings.yaml")," ","→ ",(0,l.jsx)("code",{className:"text-[var(--foreground)]",children:x})]})})}),w.length>0&&(0,l.jsxs)("div",{className:"flex shrink-0 items-start gap-2 border-b border-amber-500/30 bg-amber-500/10 px-4 py-2 text-[11px] text-amber-400",children:[(0,l.jsx)(aG.A,{className:"mt-px h-3.5 w-3.5 shrink-0"}),(0,l.jsx)("span",{className:"min-w-0 flex-1 break-words",children:n("settings.restartNotice",{keys:w.join(", ")})}),(0,l.jsx)("button",{onClick:()=>N([]),title:n("settings.restartNotice.dismiss"),className:"shrink-0 cursor-pointer rounded p-0.5 hover:bg-amber-500/20",children:(0,l.jsx)(eJ.A,{className:"h-3 w-3"})})]}),(0,l.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:"__security"===x?(0,l.jsx)(oP,{}):"__extensions"===x?(0,l.jsx)(oU,{}):"__orphans"===x?(0,l.jsx)(o4,{orphans:P,onRemove:F,saving:h}):L?(0,l.jsx)(oY,{section:L,scope:c,saving:h,onSave:(e,t)=>T(L.namespaceId,e,t),onReset:e=>M(L.namespaceId,e)}):(0,l.jsx)("div",{className:"p-10 text-center text-xs text-[var(--muted-foreground)]",children:m?n("settings.empty"):n("settings.loading")})})]})]})}function o$(e){let{sections:t,orphans:r,active:n,onPick:a}=e,{t:s}=(0,eZ.s9)(),i=(0,o.useMemo)(()=>{let e=t.filter(e=>"general"===e.source),r=t.filter(e=>"provider"===e.source),n=t.filter(e=>"skill"===e.source);return{general:e,providers:r,skills:n,agents:t.filter(e=>"agent"===e.source),extensions:t.filter(e=>"extension"===e.source)}},[t]),[c,d]=function(){let[e,t]=(0,o.useState)(()=>{try{var e;return new Set(JSON.parse(null!=(e=localStorage.getItem(oJ))?e:"[]"))}catch(e){return new Set}});return[e,(0,o.useCallback)(e=>{t(t=>{let r=new Set(t);return r.delete(e)||r.add(e),localStorage.setItem(oJ,JSON.stringify([...r])),r})},[])]}(),u=(e,t)=>({label:t,collapsed:c.has(e),onToggle:()=>d(e)});return(0,l.jsxs)("div",{className:"py-1",children:[(0,l.jsxs)(oV,{...u("system",s("settings.nav.system")),items:i.general,icons:{general:oI.A,a2a:oE.A},active:n,onPick:a,children:[(0,l.jsxs)(oZ,{active:"__security"===n,onClick:()=>a("__security"),children:[(0,l.jsx)(oT.A,{className:"h-3 w-3 shrink-0"}),(0,l.jsx)("span",{children:s("settings.nav.security")})]}),(0,l.jsxs)(oZ,{active:"__extensions"===n,onClick:()=>a("__extensions"),children:[(0,l.jsx)(rz.A,{className:"h-3 w-3 shrink-0"}),(0,l.jsx)("span",{children:s("settings.nav.extensions")})]})]}),(0,l.jsx)(oV,{...u("extensions",s("settings.nav.extensionSettings")),items:i.extensions,active:n,onPick:a}),(0,l.jsx)(oV,{...u("providers",s("settings.nav.providers")),items:i.providers,active:n,onPick:a}),(0,l.jsx)(oV,{...u("agents",s("settings.nav.agents")),items:i.agents,active:n,onPick:a}),(0,l.jsx)(oV,{...u("skills",s("settings.nav.skills")),items:i.skills,active:n,onPick:a}),r.length>0&&(0,l.jsx)(oV,{...u("orphans",s("settings.nav.orphans")),items:[],active:n,onPick:a,children:(0,l.jsxs)(oZ,{active:"__orphans"===n,onClick:()=>a("__orphans"),children:[(0,l.jsx)(eU.A,{className:"h-3 w-3 shrink-0"}),(0,l.jsx)("span",{children:s("settings.nav.unclaimed")}),(0,l.jsx)("span",{className:"ml-auto rounded bg-[var(--card)] px-1 py-0 text-[9px]",children:r.length})]})})]})}let oJ="halo_settings_navCollapsed";function oZ(e){let{active:t,onClick:r,title:n,children:a}=e;return(0,l.jsx)("button",{onClick:r,title:n,className:(0,I.cn)("flex w-full cursor-pointer items-center gap-2 py-1.5 pl-6 pr-3 text-[11px] transition-colors",t?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--foreground)]/80 hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"),children:a})}function oV(e){let{label:t,items:r,icons:n,active:a,onPick:s,collapsed:o,onToggle:i,children:c}=e,{lang:d}=(0,eZ.s9)();return 0!==r.length||c?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("button",{onClick:i,"aria-expanded":!o,className:"flex w-full cursor-pointer items-center gap-1 px-2 pb-1 pt-2.5 text-[10px] font-medium tracking-wide text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:[(0,l.jsx)(F.A,{className:(0,I.cn)("h-3 w-3 shrink-0 transition-transform",!o&&"rotate-90")}),(0,l.jsx)("span",{className:"truncate",children:t})]}),!o&&r.map(e=>{let t="zh"===d&&e.displayName_zh||e.displayName,r="zh"===d&&e.description_zh||e.description,o=null==n?void 0:n[e.namespaceId];return(0,l.jsxs)(oZ,{active:a===e.namespaceId,onClick:()=>s(e.namespaceId),title:null!=r?r:e.namespaceId,children:[o&&(0,l.jsx)(o,{className:"h-3 w-3 shrink-0"}),(0,l.jsx)("span",{className:"truncate",children:t})]},e.namespaceId)}),!o&&c]}):null}function oY(e){let{section:t,scope:r,saving:n,onSave:a,onReset:s}=e,{t:i,lang:c}=(0,eZ.s9)(),[d,u]=(0,o.useState)(!1),m=t.fields.filter(e=>"param"===e.kind),p=m.filter(e=>!e.advanced),x=m.filter(e=>e.advanced),f=t.fields.filter(e=>"secret"===e.kind),h=e=>(0,l.jsx)(oQ,{namespaceId:t.namespaceId,field:e,scope:r,saving:n,onSave:t=>a(e,t),onReset:()=>s(e)},e.key),v="zh"===c&&t.displayName_zh||t.displayName,g="zh"===c&&t.description_zh||t.description,[b,y]=i("settings.section.secretsHint",{placeholder:"\0"}).split("\0");return(0,l.jsxs)("div",{className:"space-y-6 p-6",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:v}),g&&(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:g}),(0,l.jsxs)("p",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:[i("settings.section.namespace"),": ",(0,l.jsx)("code",{className:"text-[var(--foreground)]",children:t.namespaceId})," \xb7 ",i("settings.section.declaredBy"),": ",(0,l.jsx)("span",{children:i("settings.section.declaredBy.".concat(t.source))})]})]}),m.length>0&&(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsx)("h3",{className:"text-[11px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:i("general"===t.namespaceId?"settings.section.settings":"settings.section.params")}),p.map(h),x.length>0&&(0,l.jsxs)("div",{className:"space-y-4 border-t border-[var(--border)] pt-3",children:[(0,l.jsxs)("button",{onClick:()=>u(e=>!e),className:"flex cursor-pointer items-center gap-1 text-[11px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:[(0,l.jsx)(F.A,{className:(0,I.cn)("h-3 w-3 transition-transform",d&&"rotate-90")}),i("settings.section.advanced"),(0,l.jsx)("span",{className:"rounded bg-[var(--card)] px-1 py-0 text-[9px] font-normal normal-case",children:x.length})]}),d&&x.map(h)]})]}),f.length>0&&(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsx)("h3",{className:"text-[11px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:i("settings.section.secrets")}),(0,l.jsxs)("p",{className:"text-[10px] text-[var(--muted-foreground)]",children:[b,(0,l.jsx)("code",{className:"rounded bg-[var(--card)] px-1 py-0.5",children:"<<ENV_NAME>>"}),y]}),f.map(h)]})]})}function oQ(e){var t,r,n;let{namespaceId:a,field:s,scope:o,saving:i,onSave:c,onReset:d}=e,{lang:u,t:m}=(0,eZ.s9)(),p="zh"===u&&s.description_zh||s.description||"",x="general"===a?"general.".concat(s.key):"".concat(a,".").concat(s.kind,"s.").concat(s.key),f="workspace"===o&&s.inheritedFromGlobal,h="workspace"===o&&!0===s.globalOnly,v=!h&&s.source===o&&("workspace"===o||(null!=(r=s.value)?r:"")!==(null!=(n=s.default)?n:""));return(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,l.jsx)("label",{className:"text-xs font-medium text-[var(--foreground)]",children:s.key}),(0,l.jsx)("code",{className:"text-[10px] text-[var(--muted-foreground)]",children:x}),(0,l.jsx)(oX,{source:s.source,inherited:f}),s.globalOnly&&(0,l.jsx)("span",{className:"rounded bg-[var(--secondary)] px-1.5 py-px text-[10px] uppercase text-[var(--muted-foreground)]",title:m("settings.globalOnlyHint"),children:"global only"}),v&&(0,l.jsxs)("button",{onClick:d,disabled:i,className:"flex cursor-pointer items-center gap-1 text-[10px] text-blue-400 hover:text-blue-300",title:m("workspace"===o?"settings.field.resetTitleWorkspace":"settings.field.resetTitleGlobal"),children:[(0,l.jsx)(oM.A,{className:"h-2.5 w-2.5"}),m("settings.field.reset")]})]}),p&&(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:p}),(0,l.jsx)("div",{className:(0,I.cn)("mt-1.5",h&&"opacity-60 pointer-events-none"),children:function(e,t,r){var n,a,s,o,i,c,d,u;if(e.secret)return(0,l.jsx)(o2,{initial:null!=(n=e.value)?n:"",placeholder:null!=(a=e.default)?a:"",saving:t,onCommit:r});switch(e.type){case"int":case"float":return(0,l.jsx)(o1,{initial:null!=(s=e.value)?s:"",placeholder:null!=(o=e.default)?o:"",type:"number",step:"int"===e.type?1:.1,saving:t,onCommit:r});case"boolean":return(0,l.jsx)(o3,{value:e.value,saving:t,onCommit:r});case"enum":return(0,l.jsx)(o5,{value:e.value,options:null!=(i=e.options)?i:[],optionLabels:e.optionLabels,placeholder:null!=(c=e.default)?c:"",saving:t,onCommit:r});default:return(0,l.jsx)(o1,{initial:null!=(d=e.value)?d:"",placeholder:null!=(u=e.default)?u:"",saving:t,onCommit:r})}}(s,i||h,c)}),(null==(t=s.envMissing)?void 0:t.length)>0&&(0,l.jsxs)("p",{className:"mt-1 flex items-start gap-1 text-[10px] text-amber-400",children:[(0,l.jsx)(aG.A,{className:"mt-px h-3 w-3 shrink-0"}),(0,l.jsx)("span",{children:m("settings.field.envMissing",{names:s.envMissing.join(", ")})})]})]})}function oX(e){let{source:t,inherited:r}=e,{t:n}=(0,eZ.s9)();return(0,l.jsx)("span",{className:(0,I.cn)("rounded px-1.5 py-0 text-[9px] font-medium",{workspace:"bg-blue-500/20 text-blue-300",global:r?"bg-[var(--secondary)] text-[var(--muted-foreground)]":"bg-emerald-500/20 text-emerald-300",unset:"bg-[var(--secondary)] text-[var(--muted-foreground)] opacity-60"}[t]),children:n("unset"===t?"settings.source.unset":r?"settings.source.inherited":"settings.source.".concat(t))})}let o0=/^<<[A-Z_][A-Z0-9_]*>>$/;function o1(e){let{initial:t,placeholder:r,type:n="text",step:a,saving:s,onCommit:i}=e,c=""===t&&!!r,[d,u]=(0,o.useState)(t),[m,p]=(0,o.useState)(!1),x=(0,o.useRef)(t);function f(){p(!1),d!==x.current&&(x.current=d,i(d))}(0,o.useEffect)(()=>{u(t),x.current=t,p(!1)},[t]);let h=c&&!m?null!=r?r:"":d;return(0,l.jsx)("input",{type:n,step:a,value:h,placeholder:r,onFocus:()=>{c&&u(""),p(!0)},onChange:e=>{u(e.target.value),p(!0)},onBlur:f,onKeyDown:e=>{"Enter"===e.key&&f()},disabled:s,className:(0,I.cn)("h-7 w-full max-w-md rounded border border-[var(--border)] bg-[var(--card)] px-2 text-xs outline-none focus:border-[var(--primary)]",c&&!m?"text-[var(--muted-foreground)] italic":"text-[var(--foreground)]")})}function o3(e){let{value:t,saving:r,onCommit:n}=e,a="true"===t||"1"===t;return(0,l.jsxs)("label",{className:"inline-flex cursor-pointer items-center gap-2",children:[(0,l.jsx)("input",{type:"checkbox",checked:a,disabled:r,onChange:e=>n(e.target.checked?"true":"false"),className:"h-3.5 w-3.5 cursor-pointer rounded border-[var(--border)] bg-[var(--card)] text-[var(--primary)] focus:ring-[var(--primary)]"}),(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:a?"on":"off"})]})}function o5(e){var t,r;let{value:n,options:a,optionLabels:s,placeholder:o,saving:i,onCommit:c}=e,d=null!=(r=null!=(t=null!=n?n:o)?t:a[0])?r:"";return(0,l.jsx)("select",{value:d,disabled:i,onChange:e=>c(e.target.value),className:"h-7 w-full max-w-md cursor-pointer rounded border border-[var(--border)] bg-[var(--card)] px-2 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)]",children:a.map((e,t)=>{var r;return(0,l.jsx)("option",{value:e,children:null!=(r=null==s?void 0:s[t])?r:e},e)})})}function o2(e){let{initial:t,placeholder:r,saving:n,onCommit:a}=e,s=o0.test(t),[i,c]=(0,o.useState)(t),[d,u]=(0,o.useState)(!1),[m,p]=(0,o.useState)(s),x=(0,o.useRef)(t);function f(){if(d){if(i===x.current)return void u(!1);x.current=i,a(i),u(!1)}}return(0,o.useEffect)(()=>{c(t),x.current=t,u(!1),p(o0.test(t))},[t]),(0,l.jsxs)("div",{className:"relative w-full max-w-md",children:[(0,l.jsx)("input",{type:m||d?"text":"password",value:d?i:t||"",placeholder:r,onFocus:()=>{d||!t||o0.test(t)||c(""),u(!0)},onChange:e=>c(e.target.value),onBlur:f,onKeyDown:e=>{"Enter"===e.key&&f()},disabled:n,className:"h-7 w-full rounded border border-[var(--border)] bg-[var(--card)] px-2 pr-7 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)]"}),!s&&(0,l.jsx)("button",{type:"button",onClick:()=>p(e=>!e),className:"absolute right-1.5 top-1/2 -translate-y-1/2 text-[var(--muted-foreground)] hover:text-[var(--foreground)]",tabIndex:-1,children:m?(0,l.jsx)(oF.A,{className:"h-3.5 w-3.5"}):(0,l.jsx)(tN.A,{className:"h-3.5 w-3.5"})})]})}function o4(e){let{orphans:t,onRemove:r,saving:n}=e,{t:a}=(0,eZ.s9)(),s=(0,o.useMemo)(()=>{let e=new Map;for(let n of t){var r;let t=null!=(r=e.get(n.namespaceId))?r:[];t.push(n),e.set(n.namespaceId,t)}return Array.from(e.entries())},[t]);return 0===t.length?null:(0,l.jsxs)("div",{className:"space-y-6 p-6",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:a("settings.orphans.title")}),(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:a("settings.orphans.intro")})]}),s.map(e=>{let[t,s]=e;return(0,l.jsxs)("div",{className:"space-y-2 rounded border border-[var(--border)] p-3",children:[(0,l.jsx)("h3",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:t}),(0,l.jsx)("ul",{className:"space-y-1",children:s.map(e=>(0,l.jsxs)("li",{className:"flex items-center justify-between text-[11px]",children:[(0,l.jsxs)("code",{className:"text-[var(--muted-foreground)]",children:[t,".",e.kind,"s.",e.key]}),(0,l.jsxs)("button",{onClick:()=>r(e),disabled:n,className:"flex cursor-pointer items-center gap-1 rounded px-2 py-0.5 text-[10px] text-red-400 hover:bg-red-500/10 hover:text-red-300",children:[(0,l.jsx)(eU.A,{className:"h-3 w-3"}),a("settings.orphans.remove")]})]},"".concat(e.kind,".").concat(e.key)))})]},t)})]})}var o8=r(84064);let o6=ar(),o9=o6.useBus,o7=o6.bump;var ie=r(89918),it=r(27269),ir=r(78547),ia=r(45211),is=r(35622);function il(e,t){return(0,I.cn)(e?"mt-0.5":"mt-1","w-full rounded border border-[var(--border)] bg-[var(--card)] px-2",e?"py-1":"py-1.5",t&&"font-mono","text-xs")}function io(e){return(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:(0,I.cn)(e.compact?"text-[10px]":"text-[11px]","text-[var(--muted-foreground)]"),children:e.label}),e.children,e.hint&&(0,l.jsx)("p",{className:"mt-1 text-[10px] text-[var(--muted-foreground)]",children:e.hint})]})}function ii(e){return(0,l.jsx)("input",{type:e.type,value:e.value,onChange:t=>e.onChange(t.target.value),className:il(e.compact,e.mono),placeholder:e.placeholder})}function ic(e){let t=(0,eZ.kj)(),{ns:r}=e;return(0,l.jsxs)("select",{value:e.value,onChange:t=>e.onChange(t.target.value),className:il(e.compact),children:[(0,l.jsx)("option",{value:"readonly",children:t("".concat(r,".readonly"))}),e.observer?(0,l.jsx)("option",{value:"observer",children:t("".concat(r,".observer"))}):"observer"===e.value&&(0,l.jsx)("option",{value:"observer",disabled:!0,children:t("channels.observerAdminOnly")}),(0,l.jsx)("option",{value:"workspace",children:t("".concat(r,".wsWrite"))}),(0,l.jsx)("option",{value:"full",children:t("".concat(r,".full"))})]})}function id(e){return(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:e.onClose,children:(0,l.jsxs)("div",{className:(0,I.cn)(e.width,"max-h-[90vh] overflow-y-auto rounded-lg border border-[var(--border)] bg-[var(--background)] p-5 shadow-xl"),onClick:e=>e.stopPropagation(),children:[e.title&&(0,l.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,l.jsx)("h3",{className:"text-sm font-medium text-[var(--foreground)]",children:e.title}),(0,l.jsx)("button",{onClick:e.onClose,className:"text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:(0,l.jsx)(eJ.A,{className:"h-4 w-4"})})]}),e.children]})})}function iu(e){let t=(0,eZ.kj)(),{ns:r,value:n,onChange:a}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(io,{label:t("".concat(r,".bindWorkspace")),hint:e.workspaceHint,children:(0,l.jsx)(ii,{mono:!0,value:n.workspacePath,onChange:e=>a({workspacePath:e}),placeholder:"/home/user/project"})}),(0,l.jsx)(io,{label:t("".concat(r,".nameOptional")),children:(0,l.jsx)(ii,{value:n.label,onChange:e=>a({label:e}),placeholder:t("".concat(r,".namePlaceholder"))})}),(0,l.jsx)(io,{label:t("".concat(r,".accessLevel")),hint:e.accessHint,children:(0,l.jsx)(ic,{ns:r,value:n.accessLevel,onChange:e=>a({accessLevel:e}),observer:e.observer})}),(0,l.jsx)(eZ.pZ,{value:n.language,onChange:e=>a({language:e})})]})}function im(e){let t=(0,eZ.kj)(),{lang:r}=(0,eZ.s9)(),{ns:n,onClose:a,canSubmit:s=!0}=e,i=rA(e=>e.activeProject),[c,d]=(0,o.useState)({workspacePath:(null==i?void 0:i.path)||"",label:"",accessLevel:"readonly",language:r}),[u,m]=(0,o.useState)(!1),[p,x]=(0,o.useState)("");async function f(){x(""),m(!0);try{e.onDone(await e.create({...c,label:c.label||void 0}))}catch(e){x(e instanceof Error?e.message:String(e))}finally{m(!1)}}return(0,l.jsx)(id,{width:e.width,title:t("".concat(n,".addTitle")),onClose:a,children:(0,l.jsxs)("div",{className:"space-y-3",children:[e.children,(0,l.jsx)(iu,{ns:n,value:c,onChange:e=>d(t=>({...t,...e})),observer:e.observer}),e.extraFields,p&&(0,l.jsx)("p",{className:"text-xs text-red-400",children:p}),(0,l.jsxs)("div",{className:"flex justify-end gap-2 pt-2",children:[(0,l.jsx)("button",{onClick:a,className:"rounded border border-[var(--border)] px-3 py-1.5 text-xs",children:t("".concat(n,".cancel"))}),(0,l.jsxs)("button",{onClick:f,disabled:u||!s||!(0,I.Z1)(c.workspacePath),className:"flex items-center gap-1.5 rounded bg-[var(--primary)] px-3 py-1.5 text-xs text-white disabled:opacity-50",children:[u&&(0,l.jsx)(L.A,{className:"h-3 w-3 animate-spin"}),t("".concat(n,".addBtn"))]})]})]})})}function ip(e,t){let[r,n]=(0,o.useState)([]),[a,s]=(0,o.useState)(!0),l=(0,o.useCallback)(()=>{s(!0),t().then(e=>n(e.accounts)).catch(t=>{console.error("[".concat(e,"] list failed:"),t)}).finally(()=>s(!1))},[e,t]);(0,o.useEffect)(()=>{l()},[l]);let i=o9(e=>e.version);return(0,o.useEffect)(()=>{i>0&&l()},[i,l]),{accounts:r,loading:a,reload:l}}function ix(e){let t=(0,eZ.kj)(),{ns:r,accounts:n,loading:a,reload:s}=e,[i,c]=(0,o.useState)(null);return(0,l.jsxs)("div",{className:"flex h-full flex-col",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-3",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h2",{className:"text-sm font-medium text-[var(--foreground)]",children:t("".concat(r,".title"))}),(0,l.jsx)("p",{className:"text-[11px] text-[var(--muted-foreground)]",children:t("".concat(r,".desc"))})]}),(0,l.jsxs)("button",{onClick:e.onAdd,className:"flex items-center gap-1.5 rounded-md bg-[var(--primary)] px-3 py-1.5 text-xs font-medium text-white hover:opacity-90",children:[(0,l.jsx)(s8.A,{className:"h-3.5 w-3.5"}),t("".concat(r,".add"))]})]}),(0,l.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:a?(0,l.jsxs)("div",{className:"flex items-center justify-center py-8 text-xs text-[var(--muted-foreground)]",children:[(0,l.jsx)(L.A,{className:"mr-2 h-3.5 w-3.5 animate-spin"}),t("".concat(r,".loading"))]}):0===n.length?(0,l.jsx)("div",{className:"p-8 text-center text-xs text-[var(--muted-foreground)]",children:t("".concat(r,".empty"))}):(0,l.jsx)("ul",{className:"divide-y divide-[var(--border)]",children:n.map(t=>(0,l.jsx)(o.Fragment,{children:e.renderRow(t,{editing:i===t.accountId,onEdit:()=>c(t.accountId),onCancelEdit:()=>c(null),onSaved:()=>{c(null),s()},onChanged:s})},t.accountId))})}),e.children]})}function ih(e){let t=e.icon;return(0,l.jsx)("button",{onClick:e.onClick,disabled:e.disabled,title:e.title,className:(0,I.cn)("rounded p-1.5 text-[var(--muted-foreground)]",e.danger?"hover:bg-red-500/20 hover:text-red-400":"hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"),children:(0,l.jsx)(t,{className:"h-3.5 w-3.5"})})}let iv={readonly:{text:"Readonly",className:"bg-emerald-500/15 text-emerald-300"},observer:{text:"Observer",className:"bg-teal-500/15 text-teal-300"},workspace:{text:"Workspace",className:"bg-blue-500/15 text-blue-300"},full:{text:"Full",className:"bg-amber-500/15 text-amber-300"}};function ig(e){return e instanceof Error?e.message:String(e)}function ib(e){var t;let r=(0,eZ.kj)(),{ns:n,account:a,onEdit:s,onChanged:i}=e,[c,d]=(0,o.useState)(!1);if(e.editing)return(0,l.jsx)(iy,{...e});async function u(e,t){d(!0);try{await e(),i()}catch(e){alert(r("".concat(n,".").concat(t),{error:ig(e)}))}finally{d(!1)}}async function m(){var t;await (0,I.fN)(r("".concat(n,".confirmDelete"),{name:null!=(t=e.deleteName)?t:""}))&&await u(e.remove,"deleteFailed")}let p=iv[a.accessLevel];return(0,l.jsxs)("li",{className:"flex items-center gap-3 px-4 py-3",children:[(0,l.jsx)("div",{className:(0,I.cn)("h-2 w-2 rounded-full",a.enabled?"bg-emerald-500":"bg-[var(--muted-foreground)]")}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-medium text-[var(--foreground)]",children:e.title}),(0,l.jsx)("span",{className:(0,I.cn)("rounded px-1.5 py-0.5 text-[9px] font-medium",p.className),children:p.text}),e.titleExtra]}),(0,l.jsxs)("p",{className:"mt-0.5 truncate font-mono text-[10px] text-[var(--muted-foreground)]",children:[e.detail,e.workspaceMissing&&(0,l.jsx)("span",{className:"ml-1 text-red-400",children:r("".concat(n,".pathMissing"))})]}),e.footer]}),(0,l.jsxs)("div",{className:"flex items-center gap-1",children:[(0,l.jsx)(ih,{onClick:()=>u(()=>e.setEnabled(!a.enabled),"switchFailed"),disabled:c,title:a.enabled?r("".concat(n,".disable")):r("".concat(n,".enable")),icon:a.enabled?ir.A:ia.A}),null==(t=e.actions)?void 0:t.call(e,c),(0,l.jsx)(ih,{onClick:s,disabled:c,title:r("".concat(n,".edit")),icon:is.A}),(0,l.jsx)(ih,{onClick:m,disabled:c,title:r("".concat(n,".delete")),icon:eU.A,danger:!0})]})]})}function iy(e){var t;let r=(0,eZ.kj)(),{ns:n,account:a}=e,s=()=>({label:a.label,workspacePath:a.workspacePath,accessLevel:a.accessLevel,language:a.language||"en",...e.extraDraft}),[i,c]=(0,o.useState)(s),[d,u]=(0,o.useState)(a);d!==a&&(u(a),c(s()));let[m,p]=(0,o.useState)(!1),x=e=>c(t=>({...t,...e}));async function f(){p(!0);let{accessLevel:t,...a}=i;try{await e.save("observer"===t&&!e.observer?a:i),e.onSaved()}catch(e){alert(r("".concat(n,".saveFailed"),{error:ig(e)}))}finally{p(!1)}}return(0,l.jsx)("li",{className:"px-4 py-3",children:(0,l.jsxs)("div",{className:"space-y-2",children:[(0,l.jsx)(io,{compact:!0,label:r("".concat(n,".label")),children:(0,l.jsx)(ii,{compact:!0,value:i.label,onChange:e=>x({label:e}),placeholder:r("".concat(n,".labelPlaceholder"))})}),(0,l.jsx)(io,{compact:!0,label:r("".concat(n,".workspace")),children:(0,l.jsx)(ii,{compact:!0,mono:!0,value:i.workspacePath,onChange:e=>x({workspacePath:e}),placeholder:"/home/user/project"})}),(0,l.jsx)(io,{compact:!0,label:r("".concat(n,".accessLevel")),hint:e.accessHint,children:(0,l.jsx)(ic,{compact:!0,ns:n,value:i.accessLevel,onChange:e=>x({accessLevel:e}),observer:e.observer})}),(0,l.jsx)(eZ.pZ,{value:i.language,onChange:e=>x({language:e})}),null==(t=e.editExtra)?void 0:t.call(e,i,e=>c(t=>({...t,...e}))),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsxs)("button",{onClick:f,disabled:m||!(0,I.Z1)(i.workspacePath),className:"flex items-center gap-1 rounded bg-[var(--primary)] px-2 py-1 text-[11px] text-white disabled:opacity-50",children:[(0,l.jsx)(rg.A,{className:"h-3 w-3"})," ",r("".concat(n,".save"))]}),(0,l.jsxs)("button",{onClick:e.onCancelEdit,disabled:m,className:"flex items-center gap-1 rounded border border-[var(--border)] px-2 py-1 text-[11px]",children:[(0,l.jsx)(eJ.A,{className:"h-3 w-3"})," ",r("".concat(n,".cancel"))]})]})]})})}function ij(e){let t=(0,eZ.kj)(),{intent:r,onClose:n,onDone:a}=e,s=rA(e=>e.activeProject),[i,c]=(0,o.useState)(null),[d,m]=(0,o.useState)(null),[p,x]=(0,o.useState)("loading"),[f,h]=(0,o.useState)(t("wx.generatingQr")),[v,g]=(0,o.useState)({workspacePath:r.workspacePath||(null==s?void 0:s.path)||"",label:r.label||"",accessLevel:r.accessLevel,language:r.language}),{workspacePath:b,label:y,accessLevel:j,language:w}=v,[N,k]=(0,o.useState)(r.skipConfig?"scan":"config"),S=(0,o.useRef)(!1),C=r.skipConfig;async function A(){if(!(0,I.Z1)(b))return void h(t("wx.pathRequired"));k("scan"),x("loading"),h(t("wx.generatingQr"));try{let{qrcodeUrl:r,sessionKey:n}=await u.F.wechat.startLogin();if(S.current)return;if(!r){x("error"),h(t("wx.qrFailed"));return}c(n);let s=await ie.toDataURL(r,{width:256,margin:2});if(S.current)return;m(s),x("waiting"),h(t("wx.scanPrompt"));let l=await u.F.wechat.waitLogin({sessionKey:n,workspacePath:b,label:y||void 0,accessLevel:j,language:w});if(S.current)return;if(l.connected){var e;x("success"),h(t("wx.connected",{id:null!=(e=l.accountId)?e:""})),setTimeout(a,1200)}else x("error"),h(l.message||t("wx.loginFailed"))}catch(e){if(S.current)return;x("error"),h(e instanceof Error?e.message:String(e))}}return(0,o.useEffect)(()=>()=>{S.current=!0},[]),(0,o.useEffect)(()=>{r.skipConfig&&A()},[]),(0,l.jsxs)(id,{width:"w-[400px]",title:C?t("wx.rescanBtn"):t("wx.addTitle"),onClose:n,children:["config"===N?(0,l.jsxs)("div",{className:"space-y-3",children:[(0,l.jsx)(iu,{ns:"wx",value:v,onChange:e=>g(t=>({...t,...e})),workspaceHint:t("wx.bindHint"),accessHint:t("wx.readonlyShareHint")}),(0,l.jsxs)("div",{className:"flex justify-end gap-2 pt-2",children:[(0,l.jsx)("button",{onClick:n,className:"rounded border border-[var(--border)] px-3 py-1.5 text-xs",children:t("wx.cancel")}),(0,l.jsx)("button",{onClick:A,disabled:!(0,I.Z1)(b),className:"rounded bg-[var(--primary)] px-3 py-1.5 text-xs text-white disabled:opacity-50",children:t("wx.nextStep")})]})]}):(0,l.jsxs)("div",{className:"flex flex-col items-center gap-3",children:[d?(0,l.jsx)("img",{src:d,alt:t("wx.scanTitle"),className:"rounded border border-[var(--border)]"}):(0,l.jsx)("div",{className:"flex h-64 w-64 items-center justify-center rounded border border-[var(--border)] bg-[var(--card)]",children:(0,l.jsx)(L.A,{className:"h-6 w-6 animate-spin text-[var(--muted-foreground)]"})}),(0,l.jsx)("p",{className:(0,I.cn)("text-center text-xs","success"===p&&"text-emerald-400","error"===p&&"text-red-400","success"!==p&&"error"!==p&&"text-[var(--muted-foreground)]"),children:f}),(0,l.jsxs)("p",{className:"text-[10px] text-[var(--muted-foreground)]",children:[t("wx.bindTo")," ",(0,l.jsx)("code",{className:"text-[var(--foreground)]",children:b})]}),"error"===p&&(0,l.jsx)("button",{onClick:()=>{k("config")},className:"rounded border border-[var(--border)] px-3 py-1.5 text-xs",children:t("wx.restart")})]}),i&&(0,l.jsx)("input",{type:"hidden",value:i,readOnly:!0})]})}let iw={id:"wechat",label:"channels.wechat",Icon:o8.A,Component:function(){let e=(0,eZ.kj)(),{lang:t}=(0,eZ.s9)(),{accounts:r,loading:n,reload:a}=ip("wechat",u.F.wechat.listAccounts),[s,i]=(0,o.useState)(null);return(0,l.jsx)(ix,{ns:"wx",accounts:r,loading:n,reload:a,onAdd:()=>i({workspacePath:"",label:"",accessLevel:"readonly",language:t,skipConfig:!1}),renderRow:(t,r)=>(0,l.jsx)(ib,{...r,ns:"wx",account:t,title:t.label||t.accountId,deleteName:t.label,titleExtra:(0,l.jsx)("span",{className:"font-mono text-[10px] text-[var(--muted-foreground)]",children:t.accountId}),detail:t.workspacePath,workspaceMissing:t.workspaceMissing,accessHint:e("wx.readonlyHint"),actions:r=>(0,l.jsx)(ih,{onClick:()=>i({workspacePath:t.workspacePath,label:t.label,accessLevel:t.accessLevel,language:t.language,skipConfig:!0}),disabled:r,title:e("wx.rescan"),icon:it.A}),save:e=>u.F.wechat.updateAccount(t.accountId,e),setEnabled:e=>u.F.wechat.updateAccount(t.accountId,{enabled:e}),remove:()=>u.F.wechat.deleteAccount(t.accountId)}),children:s&&(0,l.jsx)(ij,{intent:s,onClose:()=>i(null),onDone:()=>{i(null),a()}})})}};function iN(e){let t=(0,eZ.kj)(),[r,n]=(0,o.useState)(""),[a,s]=(0,o.useState)("");return(0,l.jsx)(im,{ns:"tg",width:"w-[420px]",onClose:e.onClose,onDone:e.onDone,canSubmit:!!r.trim(),create:e=>u.F.telegram.createAccount({botToken:r,...e,allowedUsers:a||void 0}),extraFields:(0,l.jsx)(io,{label:t("tg.allowedUsersOptional"),children:(0,l.jsx)(ii,{mono:!0,value:a,onChange:s,placeholder:t("tg.allowedUsersHint")})}),children:(0,l.jsx)(io,{label:t("tg.tokenLabel"),children:(0,l.jsx)(ii,{mono:!0,type:"password",value:r,onChange:n,placeholder:"123456:ABC-DEF..."})})})}let ik={id:"telegram",label:"Telegram",Icon:sx.A,Component:function(){let e=(0,eZ.kj)(),{accounts:t,loading:r,reload:n}=ip("telegram",u.F.telegram.listAccounts),[a,s]=(0,o.useState)(!1);return(0,l.jsx)(ix,{ns:"tg",accounts:t,loading:r,reload:n,onAdd:()=>s(!0),renderRow:(t,r)=>(0,l.jsx)(ib,{...r,ns:"tg",account:t,title:t.label||"@".concat(t.botUsername),deleteName:t.botUsername,titleExtra:t.allowedUsers&&(0,l.jsx)("span",{className:"rounded bg-blue-500/15 px-1.5 py-0.5 text-[9px] font-medium text-blue-300",children:e("tg.whitelist")}),detail:(0,l.jsxs)(l.Fragment,{children:["@",t.botUsername," → ",t.workspacePath]}),workspaceMissing:t.workspaceMissing,extraDraft:{allowedUsers:t.allowedUsers},editExtra:(t,r)=>(0,l.jsx)(io,{compact:!0,label:e("tg.allowedUsers"),children:(0,l.jsx)(ii,{compact:!0,mono:!0,value:t.allowedUsers,onChange:e=>r({allowedUsers:e}),placeholder:"123456789,@username"})}),save:e=>u.F.telegram.updateAccount(t.accountId,e),setEnabled:e=>u.F.telegram.updateAccount(t.accountId,{enabled:e}),remove:()=>u.F.telegram.deleteAccount(t.accountId)}),children:a&&(0,l.jsx)(iN,{onClose:()=>s(!1),onDone:()=>{s(!1),n()}})})}};function iS(e){let t=(0,eZ.kj)(),[r,n]=(0,o.useState)(!1);return(0,l.jsxs)("div",{className:"mt-1 flex items-center gap-2",children:[(0,l.jsxs)("code",{className:"rounded bg-[var(--secondary)] px-1.5 py-0.5 font-mono text-[9px] text-[var(--muted-foreground)]",children:[e.token.slice(0,12),"..."]}),(0,l.jsx)("button",{onClick:function(){navigator.clipboard.writeText(e.token),n(!0),setTimeout(()=>n(!1),2e3)},className:"text-[10px] text-[var(--primary)] hover:underline",children:t(r?"web.copied":"web.copyToken")})]})}function iC(e){let t=(0,eZ.kj)(),{onClose:r,onDone:n}=e,[a,s]=(0,o.useState)(null);return a?(0,l.jsxs)(id,{width:"w-[420px]",onClose:n,children:[(0,l.jsx)("h3",{className:"mb-3 text-sm font-medium text-[var(--foreground)]",children:t("web.createSuccess")}),(0,l.jsx)("p",{className:"mb-2 text-xs text-[var(--muted-foreground)]",children:t("web.tokenNotice")}),(0,l.jsxs)("div",{className:"flex items-center gap-2 rounded border border-[var(--border)] bg-[var(--card)] p-2",children:[(0,l.jsx)("code",{className:"flex-1 break-all font-mono text-xs text-[var(--foreground)]",children:a.token}),(0,l.jsx)("button",{onClick:()=>navigator.clipboard.writeText(a.token),className:"rounded p-1 text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:(0,l.jsx)(aK.A,{className:"h-3.5 w-3.5"})})]}),(0,l.jsx)("div",{className:"mt-4 flex justify-end",children:(0,l.jsx)("button",{onClick:n,className:"rounded bg-[var(--primary)] px-3 py-1.5 text-xs text-white",children:t("web.done")})})]}):(0,l.jsx)(im,{ns:"web",width:"w-[420px]",observer:!0,onClose:r,create:e=>u.F.web.createAccount(e),onDone:e=>s({token:e.token})})}let iA={id:"web_demo",label:"Web",Icon:z.A,Component:function(){let{accounts:e,loading:t,reload:r}=ip("web",u.F.web.listAccounts),[n,a]=(0,o.useState)(!1);return(0,l.jsx)(ix,{ns:"web",accounts:e,loading:t,reload:r,onAdd:()=>a(!0),renderRow:(e,t)=>(0,l.jsx)(ib,{...t,ns:"web",account:e,observer:!0,title:e.label||e.accountId,detail:e.workspacePath,workspaceMissing:e.workspaceMissing,footer:(0,l.jsx)(iS,{token:e.token}),save:t=>u.F.web.updateAccount(e.accountId,t),setEnabled:t=>u.F.web.updateAccount(e.accountId,{enabled:t}),remove:()=>u.F.web.deleteAccount(e.accountId)}),children:n&&(0,l.jsx)(iC,{onClose:()=>a(!1),onDone:()=>{a(!1),r()}})})}};function iI(e){let t=(0,eZ.kj)(),[r,n]=(0,o.useState)(""),[a,s]=(0,o.useState)("");return(0,l.jsxs)(im,{ns:"slack",width:"w-[480px]",onClose:e.onClose,onDone:e.onDone,canSubmit:!!r.trim()&&!!a.trim(),create:e=>u.F.slack.createAccount({botToken:r,appToken:a,...e}),children:[(0,l.jsx)(io,{label:t("slack.botTokenLabel"),hint:t("slack.botTokenHint"),children:(0,l.jsx)(ii,{mono:!0,type:"password",value:r,onChange:n,placeholder:"xoxb-..."})}),(0,l.jsx)(io,{label:t("slack.appTokenLabel"),hint:t("slack.appTokenHint"),children:(0,l.jsx)(ii,{mono:!0,type:"password",value:a,onChange:s,placeholder:"xapp-..."})})]})}let iE={id:"slack",label:"Slack",Icon:G.A,Component:function(){let{accounts:e,loading:t,reload:r}=ip("slack",u.F.slack.listAccounts),[n,a]=(0,o.useState)(!1);return(0,l.jsx)(ix,{ns:"slack",accounts:e,loading:t,reload:r,onAdd:()=>a(!0),renderRow:(e,t)=>(0,l.jsx)(ib,{...t,ns:"slack",account:e,title:e.label||e.teamId,deleteName:e.teamId,detail:(0,l.jsxs)(l.Fragment,{children:["team:",e.teamId," bot:",e.botUserId," → ",e.workspacePath]}),workspaceMissing:e.workspaceMissing,save:t=>u.F.slack.updateAccount(e.accountId,t),setEnabled:t=>u.F.slack.updateAccount(e.accountId,{enabled:t}),remove:()=>u.F.slack.deleteAccount(e.accountId)}),children:n&&(0,l.jsx)(iI,{onClose:()=>a(!1),onDone:()=>{a(!1),r()}})})}};function iT(e){let t=(0,eZ.kj)(),[r,n]=(0,o.useState)(""),[a,s]=(0,o.useState)(""),[i,c]=(0,o.useState)(""),[d,m]=(0,o.useState)("");return(0,l.jsxs)(im,{ns:"feishu",width:"w-[480px]",onClose:e.onClose,onDone:e.onDone,canSubmit:!!r.trim()&&!!a.trim(),create:e=>u.F.feishu.createAccount({appId:r,appSecret:a,verificationToken:i||void 0,encryptKey:d||void 0,...e}),children:[(0,l.jsx)(io,{label:t("feishu.appIdLabel"),children:(0,l.jsx)(ii,{mono:!0,value:r,onChange:n,placeholder:"cli_xxxxxxx"})}),(0,l.jsx)(io,{label:t("feishu.appSecretLabel"),children:(0,l.jsx)(ii,{mono:!0,type:"password",value:a,onChange:s,placeholder:"****************"})}),(0,l.jsx)(io,{label:t("feishu.verificationTokenLabel"),children:(0,l.jsx)(ii,{mono:!0,value:i,onChange:c,placeholder:""})}),(0,l.jsx)(io,{label:t("feishu.encryptKeyLabel"),children:(0,l.jsx)(ii,{mono:!0,type:"password",value:d,onChange:m,placeholder:""})})]})}function iM(e){let t=(0,eZ.kj)(),[r,n]=(0,o.useState)(""),[a,s]=(0,o.useState)("");return(0,l.jsxs)(im,{ns:"wecom",width:"w-[480px]",onClose:e.onClose,onDone:e.onDone,canSubmit:!!r.trim()&&!!a.trim(),create:e=>u.F.wecom.createAccount({botId:r,secret:a,...e}),children:[(0,l.jsx)(io,{label:t("wecom.botIdLabel"),children:(0,l.jsx)(ii,{mono:!0,value:r,onChange:n,placeholder:"wecombot_xxxxxxx"})}),(0,l.jsx)(io,{label:t("wecom.secretLabel"),children:(0,l.jsx)(ii,{mono:!0,type:"password",value:a,onChange:s,placeholder:"****************"})})]})}let iF=[iw,ik,iA,iE,{id:"feishu",label:"Feishu",Icon:r(61557).A,Component:function(){let{accounts:e,loading:t,reload:r}=ip("feishu",u.F.feishu.listAccounts),[n,a]=(0,o.useState)(!1);return(0,l.jsx)(ix,{ns:"feishu",accounts:e,loading:t,reload:r,onAdd:()=>a(!0),renderRow:(e,t)=>(0,l.jsx)(ib,{...t,ns:"feishu",account:e,title:e.label||e.appId,deleteName:e.appId,detail:(0,l.jsxs)(l.Fragment,{children:["app:",e.appId," bot:",e.botOpenId," → ",e.workspacePath]}),workspaceMissing:e.workspaceMissing,save:t=>u.F.feishu.updateAccount(e.accountId,t),setEnabled:t=>u.F.feishu.updateAccount(e.accountId,{enabled:t}),remove:()=>u.F.feishu.deleteAccount(e.accountId)}),children:n&&(0,l.jsx)(iT,{onClose:()=>a(!1),onDone:()=>{a(!1),r()}})})}},{id:"wecom",label:"WeCom",Icon:r(60490).A,Component:function(){let{accounts:e,loading:t,reload:r}=ip("wecom",u.F.wecom.listAccounts),[n,a]=(0,o.useState)(!1);return(0,l.jsx)(ix,{ns:"wecom",accounts:e,loading:t,reload:r,onAdd:()=>a(!0),renderRow:(e,t)=>(0,l.jsx)(ib,{...t,ns:"wecom",account:e,title:e.label||e.botId,deleteName:e.botId,detail:(0,l.jsxs)(l.Fragment,{children:["bot:",e.botId," → ",e.workspacePath]}),workspaceMissing:e.workspaceMissing,save:t=>u.F.wecom.updateAccount(e.accountId,t),setEnabled:t=>u.F.wecom.updateAccount(e.accountId,{enabled:t}),remove:()=>u.F.wecom.deleteAccount(e.accountId)}),children:n&&(0,l.jsx)(iM,{onClose:()=>a(!1),onDone:()=>{a(!1),r()}})})}}],iD="halo_channel_active",iP=new Set(iF.map(e=>e.id)),iL=null!=(s=null==(a=iF[0])?void 0:a.id)?s:"",iR=(0,g.v)(e=>({active:function(){try{let e=localStorage.getItem(iD);if(e&&iP.has(e))return e}catch(e){}return iL}(),setActive(t){if(iP.has(t)){try{localStorage.setItem(iD,t)}catch(e){}e({active:t})}}}));function i_(){let e=(0,eZ.kj)(),t=iR(e=>e.active),r=iR(e=>e.setActive);return(0,l.jsxs)("div",{className:"flex h-full flex-col",children:[(0,l.jsxs)("div",{className:"flex h-10 items-center gap-2 border-b border-[var(--border)] px-3",children:[(0,l.jsx)(o8.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:"Channels"}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsx)("button",{onClick:()=>o7(),title:"Refresh",className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] transition-colors",children:(0,l.jsx)(ad.A,{className:"h-3.5 w-3.5"})})]}),(0,l.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto py-1",children:iF.map(n=>{if(!1===n.enabled)return null;let a=n.Icon,s=e(n.label),o=s===n.label?n.label:s;return(0,l.jsxs)("button",{onClick:()=>r(n.id),className:(0,I.cn)("flex w-full items-center gap-2 px-3 py-2 text-xs transition-colors",t===n.id?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]/50 hover:text-[var(--foreground)]"),children:[(0,l.jsx)(a,{className:"h-3.5 w-3.5"}),o]},n.id)})})]})}function iz(){let e=iR(e=>e.active),t=iF.find(t=>t.id===e);if(!t)return null;let r=t.Component;return(0,l.jsx)(r,{})}var iO=r(2462);let iU=(0,g.v)(e=>({selectedId:null,filter:"all",refreshTick:0,setSelectedId:t=>e({selectedId:t}),setFilter:t=>e({filter:t}),bumpRefresh:()=>e(e=>({refreshTick:e.refreshTick+1}))}));function iB(e){var t;let{status:r}=e,n=null!=(t=iW[r])?t:"bg-[var(--accent)] text-[var(--foreground)]";return(0,l.jsx)("span",{className:(0,I.cn)("rounded px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide",n),children:r.replace("_"," ")})}let iW={pending:"bg-[var(--accent)] text-[var(--foreground)]",running:"bg-blue-700 text-blue-100",awaiting_review:"bg-amber-600 text-amber-50",approved:"bg-emerald-700 text-emerald-50",applied:"bg-emerald-800 text-emerald-100",skipped:"bg-[var(--accent)] text-[var(--foreground)]",rejected:"bg-red-700 text-red-50",failed:"bg-red-800 text-red-100",timeout:"bg-orange-700 text-orange-100"};function iH(){let e=(0,eZ.kj)(),t=iU(e=>e.selectedId);return t?(0,l.jsx)(iG,{id:t}):(0,l.jsx)(iK,{label:e("evolution.list.pickRun")})}function iK(e){let{label:t}=e;return(0,l.jsx)("div",{className:"flex h-full items-center justify-center p-6 text-sm text-[var(--muted-foreground)]",children:t})}function iG(e){var t,r,n,a;let{id:s}=e,i=(0,eZ.kj)(),c=iU(e=>e.refreshTick),d=iU(e=>e.setSelectedId),[m,x]=(0,o.useState)(null),[f,h]=(0,o.useState)(!0),[v,g]=(0,o.useState)(null),[b,y]=(0,o.useState)(!1),[j,w]=(0,o.useState)(""),[N,k]=(0,o.useState)(""),[S,C]=(0,o.useState)(!1),[A,E]=(0,o.useState)(!1),[T,M]=(0,o.useState)(!1),[F,D]=(0,o.useState)(""),P=(0,o.useCallback)(async()=>{h(!0);try{let e=await u.F.evolution.getRun(s);x(e),g(null)}catch(e){g(e instanceof Error?e.message:String(e))}finally{h(!1)}},[s]);if((0,o.useEffect)(()=>{x(null),C(!1),E(!1),w(""),k(""),P()},[s,P]),(0,o.useEffect)(()=>{0!==c&&P()},[c,P]),(0,o.useEffect)(()=>p.on("evolution:run_changed",e=>{e.id===s&&("deleted"===e.kind?d(null):P())}),[s,P,d]),f&&!m)return(0,l.jsx)(iK,{label:i("evolution.list.loading")});if(v)return(0,l.jsx)(iK,{label:i("cron.error",{error:v})});if(!m)return(0,l.jsx)(iK,{label:i("evolution.list.noRun")});let{run:L,patchMd:R,scoreJson:_,skipReasonMd:z,snapshotSummary:O,wrapperLog:U,subCliLog:B}=m,W="awaiting_review"===L.status,H="approved"===L.status&&("failed"===L.applyStatus||"timeout"===L.applyStatus),K=async()=>{y(!0);try{await u.F.evolution.approve(s,j.trim()||void 0),C(!1),w(""),await P()}catch(e){alert(e instanceof Error?e.message:String(e))}finally{y(!1)}},G=async()=>{if(await (0,I.fN)(i("evolution.action.confirmReject"))){y(!0);try{await u.F.evolution.reject(s),await P()}catch(e){alert(e instanceof Error?e.message:String(e))}finally{y(!1)}}},q=async()=>{let e=N.trim();if(e){y(!0);try{await u.F.evolution.addHint(s,e),k(""),E(!1),await P()}catch(e){alert(e instanceof Error?e.message:String(e))}finally{y(!1)}}},$=async()=>{let e=F.trim();if(!e)return void alert(i("evolution.action.retryNeedsHint"));y(!0);try{await u.F.evolution.retry(s,e),D(""),M(!1),await P()}catch(e){alert(e instanceof Error?e.message:String(e))}finally{y(!1)}},J=async()=>{if(await (0,I.fN)(i("evolution.action.confirmDelete"))){y(!0);try{await u.F.evolution.delete(s),d(null)}catch(e){alert(e instanceof Error?e.message:String(e)),y(!1)}}};return(0,l.jsxs)("div",{className:"flex h-full flex-col",children:[(0,l.jsxs)("div",{className:"border-b border-[var(--border)] px-4 py-3",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)(iB,{status:L.status}),(0,l.jsx)("span",{className:"text-sm text-[var(--muted-foreground)]",children:L.triggerKind}),(0,l.jsx)("span",{className:"ml-auto text-xs text-[var(--muted-foreground)]",children:L.id}),"pending"!==L.status&&"running"!==L.status&&"approved"!==L.status&&(0,l.jsx)("button",{disabled:b,onClick:()=>{J()},className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-red-700/80 hover:text-white disabled:opacity-50",title:i("evolution.action.delete"),children:(0,l.jsx)(eU.A,{className:"h-3.5 w-3.5"})})]}),(0,l.jsxs)("div",{className:"mt-2 text-xs text-[var(--muted-foreground)]",children:[i("evolution.detail.workspace")," ",(0,l.jsx)("span",{className:"font-mono",children:L.workspacePath})]}),L.userHint&&(0,l.jsxs)("div",{className:"mt-2 rounded bg-[var(--accent)] p-2 text-xs",children:[(0,l.jsx)("div",{className:"font-medium text-[var(--foreground)]",children:i("evolution.detail.hint")}),(0,l.jsx)("div",{className:"mt-1 whitespace-pre-wrap text-[var(--muted-foreground)]",children:L.userHint})]}),L.failureReason&&(0,l.jsx)("div",{className:"mt-2 rounded bg-red-900/30 p-2 text-xs text-red-200",children:i("evolution.detail.failure",{reason:L.failureReason})}),"skipped"===L.status&&(0,l.jsx)("div",{className:"mt-2 rounded bg-[var(--accent)] p-2 text-xs text-[var(--muted-foreground)]",children:i("evolution.detail.skipped")}),H&&(0,l.jsxs)("div",{className:"mt-2 rounded bg-red-900/30 p-2 text-xs text-red-200",children:[(0,l.jsx)("div",{className:"font-medium",children:i("evolution.detail.applyFailed")}),L.applyFailureReason&&(0,l.jsx)("div",{className:"mt-1 whitespace-pre-wrap",children:L.applyFailureReason})]})]}),W&&(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-b border-[var(--border)] bg-amber-950/20 px-4 py-2",children:[(0,l.jsxs)("button",{disabled:b,onClick:()=>C(e=>!e),className:"flex items-center gap-1 rounded bg-emerald-700 px-2 py-1 text-xs text-emerald-50 hover:bg-emerald-600 disabled:opacity-50",children:[(0,l.jsx)(rg.A,{className:"h-3.5 w-3.5"})," ",i("evolution.action.approve")]}),(0,l.jsxs)("button",{disabled:b,onClick:()=>{G()},className:"flex items-center gap-1 rounded bg-red-700 px-2 py-1 text-xs text-red-50 hover:bg-red-600 disabled:opacity-50",children:[(0,l.jsx)(eJ.A,{className:"h-3.5 w-3.5"})," ",i("evolution.action.reject")]}),(0,l.jsxs)("button",{disabled:b,onClick:()=>E(e=>!e),className:"flex items-center gap-1 rounded bg-[var(--accent)] px-2 py-1 text-xs text-[var(--foreground)] hover:bg-[var(--accent)]/80 disabled:opacity-50",children:[(0,l.jsx)(iO.A,{className:"h-3.5 w-3.5"})," ",i("evolution.action.addHint")]}),(0,l.jsxs)("button",{disabled:b,onClick:()=>M(e=>!e),className:"flex items-center gap-1 rounded bg-sky-700 px-2 py-1 text-xs text-sky-50 hover:bg-sky-600 disabled:opacity-50",title:i("evolution.retry.tooltip"),children:[(0,l.jsx)(ad.A,{className:"h-3.5 w-3.5"})," ",i("evolution.action.retry")]})]}),!W&&("failed"===L.status||"timeout"===L.status||"skipped"===L.status||"rejected"===L.status||H)&&(0,l.jsx)("div",{className:"flex flex-wrap items-center gap-2 border-b border-[var(--border)] bg-sky-950/20 px-4 py-2",children:(0,l.jsxs)("button",{disabled:b,onClick:()=>M(e=>!e),className:"flex items-center gap-1 rounded bg-sky-700 px-2 py-1 text-xs text-sky-50 hover:bg-sky-600 disabled:opacity-50",title:i("evolution.retry.tooltip"),children:[(0,l.jsx)(ad.A,{className:"h-3.5 w-3.5"})," ",i("evolution.action.retryWithHint")]})}),T&&(0,l.jsxs)("div",{className:"border-b border-[var(--border)] bg-sky-950/20 px-4 py-2",children:[(0,l.jsx)("div",{className:"text-xs text-[var(--muted-foreground)]",children:i("evolution.retry.title")}),(0,l.jsx)("textarea",{value:F,onChange:e=>D(e.target.value),rows:2,className:"mt-1 w-full rounded border border-[var(--border)] bg-[var(--background)] p-2 text-xs",placeholder:i("evolution.retry.placeholder"),autoFocus:!0}),(0,l.jsxs)("div",{className:"mt-1 flex gap-2",children:[(0,l.jsx)("button",{disabled:b||!F.trim(),onClick:()=>{$()},className:"rounded bg-sky-700 px-2 py-1 text-xs text-sky-50 hover:bg-sky-600 disabled:opacity-50",children:i("evolution.action.confirmRetry")}),(0,l.jsx)("button",{disabled:b,onClick:()=>{M(!1),D("")},className:"rounded bg-[var(--accent)] px-2 py-1 text-xs text-[var(--foreground)] hover:bg-[var(--accent)]/80 disabled:opacity-50",children:i("evolution.action.cancel")})]})]}),W&&S&&(0,l.jsxs)("div",{className:"border-b border-[var(--border)] bg-emerald-950/20 px-4 py-2",children:[(0,l.jsx)("div",{className:"text-xs text-[var(--muted-foreground)]",children:i("evolution.approve.title")}),(0,l.jsx)("textarea",{value:j,onChange:e=>w(e.target.value),rows:2,className:"mt-1 w-full rounded border border-[var(--border)] bg-[var(--background)] p-2 text-xs",placeholder:i("evolution.approve.placeholder")}),(0,l.jsxs)("div",{className:"mt-1 flex gap-2",children:[(0,l.jsx)("button",{disabled:b,onClick:()=>{K()},className:"rounded bg-emerald-700 px-2 py-1 text-xs text-emerald-50 hover:bg-emerald-600 disabled:opacity-50",children:i("evolution.action.confirmApprove")}),(0,l.jsx)("button",{disabled:b,onClick:()=>{C(!1),w("")},className:"rounded bg-[var(--accent)] px-2 py-1 text-xs text-[var(--foreground)] hover:bg-[var(--accent)]/80 disabled:opacity-50",children:i("evolution.action.cancel")})]})]}),W&&A&&(0,l.jsxs)("div",{className:"border-b border-[var(--border)] bg-[var(--background)]/40 px-4 py-2",children:[(0,l.jsx)("div",{className:"text-xs text-[var(--muted-foreground)]",children:i("evolution.hint.title")}),(0,l.jsx)("textarea",{value:N,onChange:e=>k(e.target.value),rows:2,className:"mt-1 w-full rounded border border-[var(--border)] bg-[var(--background)] p-2 text-xs",placeholder:i("evolution.hint.placeholder")}),(0,l.jsxs)("div",{className:"mt-1 flex gap-2",children:[(0,l.jsx)("button",{disabled:b||!N.trim(),onClick:()=>{q()},className:"rounded bg-[var(--accent)] px-2 py-1 text-xs text-[var(--foreground)] hover:bg-[var(--accent)]/80 disabled:opacity-50",children:i("evolution.action.add")}),(0,l.jsx)("button",{disabled:b,onClick:()=>{E(!1),k("")},className:"rounded bg-[var(--accent)] px-2 py-1 text-xs text-[var(--foreground)] hover:bg-[var(--accent)]/80 disabled:opacity-50",children:i("evolution.action.cancel")})]})]}),_&&(0,l.jsxs)("div",{className:"border-b border-[var(--border)] px-4 py-3",children:[(0,l.jsx)("div",{className:"mb-2 text-sm font-medium",children:i("evolution.score.title")}),(0,l.jsxs)("div",{className:"grid grid-cols-4 gap-3 text-xs",children:[(0,l.jsx)(i$,{label:i("evolution.score.lint"),value:_.lint}),(0,l.jsx)(i$,{label:i("evolution.score.behavior"),value:_.behavior}),(0,l.jsx)(i$,{label:i("evolution.score.scope"),value:_.scope}),(0,l.jsx)(i$,{label:i("evolution.score.avg"),value:_.avg,highlight:!0})]}),(0,l.jsxs)("div",{className:"mt-2 flex items-center gap-2 text-xs text-[var(--muted-foreground)]",children:[(0,l.jsx)("span",{children:i("evolution.score.confidence")}),(0,l.jsx)("span",{className:"font-medium text-[var(--foreground)]",children:null!=(t=_.confidence)?t:"—"})]}),"string"==typeof _.notes&&(0,l.jsx)("div",{className:"mt-2 whitespace-pre-wrap rounded bg-[var(--accent)] p-2 text-xs text-[var(--foreground)]",children:_.notes})]}),O&&(0,l.jsxs)("div",{className:"border-b border-[var(--border)] px-4 py-3 text-xs",children:[(0,l.jsx)("div",{className:"mb-1 font-medium",children:i("evolution.snapshot.title",{n:null!=(r=O.messageCount)?r:0})}),O.firstUser&&(0,l.jsxs)("div",{className:"mb-1",children:[(0,l.jsxs)("span",{className:"text-[var(--muted-foreground)]",children:[i("evolution.snapshot.firstUser")," "]}),(0,l.jsx)("span",{className:"line-clamp-2 whitespace-pre-wrap",children:O.firstUser})]}),O.firstAssistant&&(0,l.jsxs)("div",{children:[(0,l.jsxs)("span",{className:"text-[var(--muted-foreground)]",children:[i("evolution.snapshot.firstAssistant")," "]}),(0,l.jsx)("span",{className:"line-clamp-3 whitespace-pre-wrap",children:(n=O.firstAssistant,a=400,n.length<=400?n:n.slice(0,a)+"…")})]})]}),(0,l.jsxs)("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:[z&&(0,l.jsxs)("div",{className:"mb-4",children:[(0,l.jsx)("div",{className:"mb-2 text-sm font-medium",children:i("evolution.skip.title")}),(0,l.jsx)("pre",{className:"whitespace-pre-wrap rounded border border-[var(--border)]/40 bg-[var(--secondary)]/40 p-3 text-xs leading-relaxed",children:z})]}),(0,l.jsx)("div",{className:"mb-2 text-sm font-medium",children:i("evolution.patch.title")}),R?(0,l.jsx)("pre",{className:"whitespace-pre-wrap rounded bg-[var(--accent)] p-3 text-xs leading-relaxed",children:R}):(0,l.jsx)("div",{className:"text-xs italic text-[var(--muted-foreground)]",children:i("evolution.patch.empty")}),(U||B)&&(0,l.jsxs)("div",{className:"mt-6 space-y-4 border-t border-[var(--border)] pt-4",children:[(0,l.jsx)("div",{className:"text-xs uppercase tracking-wide text-[var(--muted-foreground)]",children:i("evolution.logs.title")}),U&&(0,l.jsx)(iq,{title:i("evolution.logs.wrapper"),body:U}),B&&(0,l.jsx)(iq,{title:i("evolution.logs.subCli"),body:B})]})]})]})}function iq(e){let{title:t,body:r}=e,[n,a]=(0,o.useState)(r.length<4e3);return(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{type:"button",className:"flex items-center gap-2 text-sm font-medium text-[var(--foreground)] hover:text-[var(--primary)]",onClick:()=>a(e=>!e),children:[(0,l.jsx)("span",{children:n?"▼":"▶"}),(0,l.jsx)("span",{children:t}),(0,l.jsxs)("span",{className:"text-xs text-[var(--muted-foreground)]",children:["(",(r.length/1024).toFixed(1)," KB)"]})]}),n&&(0,l.jsx)("pre",{className:"mt-2 whitespace-pre-wrap break-words rounded border border-[var(--border)]/40 bg-[var(--background)]/40 p-3 font-mono text-[11px] leading-relaxed",children:r})]})}function i$(e){let{label:t,value:r,highlight:n}=e;return(0,l.jsxs)("div",{className:(0,I.cn)("rounded p-2",n?"bg-[var(--primary)]/10":"bg-[var(--accent)]"),children:[(0,l.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-[var(--muted-foreground)]",children:t}),(0,l.jsx)("div",{className:(0,I.cn)("text-lg font-medium",n&&"text-[var(--primary)]"),children:"number"==typeof r?r:"—"})]})}let iJ=["all","awaiting_review","pending","running","approved","applied","skipped","rejected","failed","timeout","archived"];function iZ(){let e=(0,eZ.kj)(),t=iU(e=>e.filter),r=iU(e=>e.setFilter),n=iU(e=>e.selectedId),a=iU(e=>e.setSelectedId),s=iU(e=>e.bumpRefresh),[i,c]=(0,o.useState)([]),[d,m]=(0,o.useState)(!0),[x,f]=(0,o.useState)(null),[h,v]=(0,o.useState)(!1),[g,b]=(0,o.useState)(null),[y,j]=(0,o.useState)(!1),w=(0,o.useRef)(0);(0,o.useEffect)(()=>{w.current=i.length,i.length>=300&&b(null)},[i.length]);let N=(0,o.useCallback)(async()=>{let e=Math.min(300,Math.max(20,w.current));try{let r=await u.F.evolution.listRuns({archived:"archived"===t,limit:e});c(r.runs),b(r.hasMore?r.nextCursor:null),f(null)}catch(e){f(e instanceof Error?e.message:String(e))}finally{m(!1)}},[t]),k=(0,o.useCallback)(async()=>{if(g&&!y){j(!0);try{let e=await u.F.evolution.listRuns({archived:"archived"===t,limit:20,before:g});c(t=>[...t,...e.runs]),b(e.hasMore?e.nextCursor:null)}catch(e){console.error("evolution.listRuns more",e)}finally{j(!1)}}},[t,g,y]);(0,o.useEffect)(()=>{N()},[N]);let S=al(k,i.length);(0,o.useEffect)(()=>{let e=p.on("evolution:run_changed",()=>{N()}),t=p.on("evolution:apply_changed",()=>{N()});return()=>{e(),t()}},[N]);let C=(0,o.useMemo)(()=>"all"===t||"archived"===t?i:i.filter(e=>e.status===t),[i,t]);return(0,o.useEffect)(()=>{var e;if(n)return;let t=null!=(e=i.find(e=>"awaiting_review"===e.status))?e:i[0];t&&a(t.id)},[i,n,a]),(0,l.jsxs)("div",{className:"flex h-full flex-col border-r border-[var(--border)] bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-[var(--border)] px-3 py-2",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-[var(--foreground)]",children:[(0,l.jsx)(sl.A,{className:"h-4 w-4"}),e("evolution.title")]}),(0,l.jsx)("button",{onClick:async()=>{v(!0),s();let e=new Promise(e=>setTimeout(e,400));await Promise.all([N(),e]),v(!1)},disabled:h,className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--accent)] hover:text-[var(--foreground)] disabled:cursor-default",title:e("evolution.refresh"),children:(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",h&&"animate-spin")})})]}),(0,l.jsx)("div",{className:"flex flex-wrap gap-1 border-b border-[var(--border)] px-2 py-2",children:iJ.map(n=>(0,l.jsx)("button",{onClick:()=>r(n),className:(0,I.cn)("w-16 shrink-0 rounded px-2 py-0.5 text-xs text-center",t===n?"bg-[var(--primary)] text-[var(--primary-foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--accent)] hover:text-[var(--foreground)]"),children:e("evolution.filter.".concat(n))},n))}),(0,l.jsxs)("div",{className:"flex-1 overflow-y-auto",children:[d&&(0,l.jsx)(iV,{label:e("evolution.list.loading")}),x&&(0,l.jsx)(iV,{label:e("cron.error",{error:x})}),!d&&!x&&0===C.length&&(0,l.jsx)(iV,{label:e("evolution.list.empty")}),C.map(e=>(0,l.jsx)(iY,{run:e,selected:e.id===n,onClick:()=>a(e.id)},e.id)),g&&(0,l.jsx)("div",{ref:S,className:"px-3 py-3 text-center text-[10px] text-[var(--muted-foreground)]",children:y?e("evolution.list.loading"):e("cron.loadOlder")})]})]})}function iV(e){let{label:t}=e;return(0,l.jsx)("div",{className:"flex h-full items-center justify-center p-6 text-sm text-[var(--muted-foreground)]",children:t})}function iY(e){var t;let{run:r,selected:n,onClick:a}=e,s=(0,eZ.kj)();return(0,l.jsxs)("button",{onClick:a,className:(0,I.cn)("flex w-full flex-col gap-1 border-b border-[var(--border)] px-3 py-2 text-left text-sm transition-colors",n?"bg-[var(--accent)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--accent)] hover:text-[var(--foreground)]"),children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)(iB,{status:r.status}),"approved"===r.status&&("failed"===r.applyStatus||"timeout"===r.applyStatus)&&(0,l.jsx)("span",{className:"rounded bg-red-800 px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-red-100",children:s("evolution.list.applyFailed")}),(0,l.jsx)("span",{className:"text-xs",children:r.triggerKind})]}),(0,l.jsx)("div",{className:"truncate text-xs text-[var(--muted-foreground)]",children:null!=(t=r.userHint)?t:(0,l.jsx)("span",{className:"italic",children:s("evolution.list.noHint")})}),(0,l.jsxs)("div",{className:"flex items-center gap-2 text-[10px] text-[var(--muted-foreground)]",children:[(0,l.jsx)("span",{children:(0,I.fw)(r.createdAt,s)}),(0,l.jsx)("span",{children:"•"}),(0,l.jsx)("span",{title:r.workspacePath,className:"truncate",children:r.workspacePath.split("/").pop()}),r.attempts>1&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("span",{children:"•"}),(0,l.jsx)("span",{children:s("evolution.list.attempts",{n:r.attempts})})]})]})]})}var iQ=r(30478),iX=r.n(iQ),i0=r(90144);let i1=(0,g.v)(e=>({selectedId:null,formMode:null,setSelectedId:t=>e({selectedId:t,formMode:null}),openCreate:()=>e({formMode:"create"}),openEdit:()=>e({formMode:"edit"}),closeForm:()=>e({formMode:null})}));function i3(e,t){return e?e.includes("ret=-2")?t("cron.err.wechat.noInbound"):e:"?"}function i5(){let e=(0,eZ.kj)(),t=i1(e=>e.selectedId),r=i1(e=>e.setSelectedId),n=i1(e=>e.formMode),a=i1(e=>e.closeForm),[s,i]=(0,o.useState)(null),c=(0,o.useCallback)(async()=>{if(!t)return void i(null);try{var e;let{jobs:r}=await u.F.cron.listJobs();i(null!=(e=r.find(e=>e.id===t))?e:null)}catch(e){console.error("cron.listJobs",e)}},[t]);(0,o.useEffect)(()=>{c()},[c]),(0,o.useEffect)(()=>p.on("cron:job_changed",()=>{c()}),[c]);let d=(0,o.useCallback)(async n=>{if(await (0,I.fN)(e("cron.confirmDelete")))try{await u.F.cron.deleteJob(n),t===n&&r(null)}catch(e){alert(e instanceof Error?e.message:String(e))}},[t,r,e]),m=(0,o.useCallback)(async e=>{try{await u.F.cron.runNow(e)}catch(e){alert(e instanceof Error?e.message:String(e))}},[]);return"create"===n?(0,l.jsx)(i8,{onClose:a,onSaved:a}):"edit"===n&&s?(0,l.jsx)(i8,{initial:s,onClose:a,onSaved:a}):s?(0,l.jsx)(i2,{job:s,onEdit:()=>{c().then(()=>i1.getState().openEdit())},onDelete:()=>d(s.id),onRunNow:()=>m(s.id)},s.id):(0,l.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:e("cron.pickJob")})}function i2(e){var t,r;let{job:n,onEdit:a,onDelete:s,onRunNow:i}=e,c=(0,eZ.kj)(),[d,m]=(0,o.useState)([]),[x,f]=(0,o.useState)(null),[h,v]=(0,o.useState)(null),[g,b]=(0,o.useState)(!1),[y,j]=(0,o.useState)(null),[w,N]=(0,o.useState)(!1),k=(0,o.useCallback)(async()=>{try{let e=await u.F.cron.listRuns(n.id,{limit:20});m(e.runs),j(e.hasMore?e.nextCursor:null)}catch(e){console.error("listRuns",e)}},[n.id]),S=(0,o.useCallback)(async()=>{if(y&&!w){N(!0);try{let e=await u.F.cron.listRuns(n.id,{limit:20,before:y});m(t=>[...t,...e.runs]),j(e.hasMore?e.nextCursor:null)}catch(e){console.error("listRuns more",e)}finally{N(!1)}}},[n.id,y,w]);(0,o.useEffect)(()=>{k()},[k]);let C=al(S,d.length);(0,o.useEffect)(()=>p.on("cron:run_changed",e=>{e.jobId===n.id&&k()}),[n.id,k]);let A=(0,o.useCallback)(async e=>{f(e),v(null),b(!0);try{let{log:t}=await u.F.cron.getRunLog(e);v(null!=t?t:"(log file not available — retention or never written)")}catch(e){v("error: ".concat(e instanceof Error?e.message:String(e)))}finally{b(!1)}},[]);return(0,l.jsxs)("div",{className:"flex h-full flex-col",children:[(0,l.jsxs)("div",{className:"border-b border-[var(--border)] px-4 py-3",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,l.jsxs)("div",{className:"flex flex-1 items-center gap-2 text-sm font-medium text-[var(--foreground)]",children:[(0,l.jsx)(i0.A,{className:"h-4 w-4"}),(0,l.jsx)("span",{children:n.label||n.id}),0===n.enabled&&(0,l.jsx)("span",{className:"rounded bg-[var(--accent)] px-1.5 py-0.5 text-[10px] uppercase",children:c("cron.disabled")})]}),(0,l.jsxs)("div",{className:"flex items-center gap-1",children:[(0,l.jsxs)("button",{onClick:i,className:"flex items-center gap-1 rounded bg-emerald-600 px-2 py-1 text-xs text-white hover:opacity-90",title:c("cron.runNow"),children:[(0,l.jsx)(oe.A,{className:"h-3 w-3"})," ",c("cron.runNow")]}),(0,l.jsxs)("button",{onClick:a,className:"flex items-center gap-1 rounded bg-[var(--accent)] px-2 py-1 text-xs text-[var(--foreground)] hover:opacity-90",title:c("cron.edit"),children:[(0,l.jsx)(is.A,{className:"h-3 w-3"})," ",c("cron.edit")]}),(0,l.jsx)("button",{onClick:s,className:"flex items-center gap-1 rounded bg-red-700/80 px-2 py-1 text-xs text-white hover:opacity-90",title:c("cron.delete"),children:(0,l.jsx)(eU.A,{className:"h-3 w-3"})})]})]}),(0,l.jsxs)("div",{className:"mt-3 grid grid-cols-2 gap-2 text-xs text-[var(--muted-foreground)]",children:[n.runAt?(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.runAt")})," ",(0,l.jsxs)("span",{className:"font-mono",children:[new Date(n.runAt).toLocaleString(),n.timezone?" (".concat(n.timezone,")"):""]})]}):(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.schedule")})," ",(0,l.jsxs)("span",{className:"font-mono",children:[n.schedule,n.timezone?" (".concat(n.timezone,")"):""]})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.agent")})," ",n.agentId]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.timeoutSec")})," ",null!=n.timeoutSec?"".concat(n.timeoutSec,"s"):c("cron.field.timeoutSecDefault")]}),null!=n.activeFrom&&(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.activeFrom")})," ",(0,l.jsx)("span",{className:"font-mono",children:new Date(n.activeFrom).toLocaleString()})]}),null!=n.activeUntil&&(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.activeUntil")})," ",(0,l.jsx)("span",{className:"font-mono",children:new Date(n.activeUntil).toLocaleString()})]}),(0,l.jsxs)("div",{className:"col-span-2 truncate",children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.workspace")})," ",n.workspacePath]}),(0,l.jsxs)("div",{className:"col-span-2 truncate",children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.folder")})," ",(0,l.jsx)("span",{className:"font-mono",children:null!=(t=n.workingDir)?t:c("cron.field.folderRoot")})]}),(0,l.jsxs)("div",{className:"col-span-2 truncate",children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.session")})," ",(0,l.jsx)("span",{className:"font-mono",children:n.stateless?c("cron.field.sessionStateless"):null!=(r=n.sessionId)?r:c("cron.field.sessionDefault",{id:n.effectiveSessionId})})]}),(0,l.jsxs)("div",{className:"col-span-2",children:[(0,l.jsx)("span",{className:"text-[var(--foreground)]",children:c("cron.field.targets")})," ",0===n.targets.length?c("cron.field.targetsLogOnly"):n.targets.map(e=>"".concat(e.channelType,":").concat(e.accountId).concat(e.chatId?"/"+e.chatId:"")).join(", ")]})]}),(0,l.jsxs)("div",{className:"mt-2",children:[(0,l.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)]",children:c("cron.field.prompt")}),(0,l.jsx)("pre",{className:"mt-1 whitespace-pre-wrap rounded bg-[var(--accent)] p-2 text-xs",children:n.userPrompt})]})]}),(0,l.jsxs)("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:[(0,l.jsx)("div",{className:"mb-2 text-xs font-medium text-[var(--foreground)]",children:c("cron.runHistory")}),0===d.length?(0,l.jsx)("div",{className:"text-xs italic text-[var(--muted-foreground)]",children:c("cron.noRuns")}):(0,l.jsx)(l.Fragment,{children:(0,l.jsxs)("ul",{className:"divide-y divide-[var(--border)] text-xs",children:[d.map(e=>(0,l.jsxs)("li",{className:"py-2",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:(0,I.cn)("rounded px-1.5 py-0.5 text-[10px] uppercase","succeeded"===e.status?"bg-emerald-700 text-emerald-50":"running"===e.status?"bg-amber-700 text-amber-50":"skipped"===e.status?"bg-[var(--accent)] text-[var(--foreground)]":"bg-red-700 text-red-50"),children:e.status}),(0,l.jsx)("span",{className:"text-[var(--muted-foreground)]",children:new Date(e.startedAt).toLocaleString()}),(0,l.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"\xb7"}),(0,l.jsx)("span",{className:"text-[var(--muted-foreground)]",children:e.triggerKind}),e.sessionId&&(0,l.jsx)("span",{className:"truncate font-mono text-[10px] text-[var(--muted-foreground)]",title:c("cron.run.session"),children:e.sessionId})]}),(0,l.jsx)("button",{onClick:()=>{A(e.id)},className:"rounded bg-[var(--accent)] px-2 py-0.5 text-[10px] hover:opacity-90",children:"Log"})]}),e.failureReason&&(0,l.jsx)("div",{className:"mt-1 text-red-400",children:i3(e.failureReason,c)}),e.dispatchResults&&e.dispatchResults.length>0&&(0,l.jsxs)("div",{className:"mt-1 text-[var(--muted-foreground)]",children:[c("cron.dispatch")," ",e.dispatchResults.map(e=>{let t=e.chatId?"".concat(e.channelType,":").concat(e.accountId,"/").concat(e.chatId):"".concat(e.channelType,":").concat(e.accountId);return"".concat(t," ").concat(e.ok?"✓":"✗ (".concat(i3(e.error,c),")"))}).join(" \xb7 ")]}),e.output&&(0,l.jsx)("pre",{className:"mt-1 line-clamp-3 whitespace-pre-wrap rounded bg-[var(--accent)] p-2 text-[11px]",children:e.output})]},e.id)),y&&(0,l.jsx)("li",{ref:C,className:"py-3 text-center text-[10px] text-[var(--muted-foreground)]",children:w?c("cron.loading"):c("cron.loadOlder")})]})})]}),x&&(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4",onClick:()=>f(null),children:(0,l.jsxs)("div",{className:"flex h-[80vh] w-[800px] max-w-full flex-col overflow-hidden rounded border border-[var(--border)] bg-[var(--background)]",onClick:e=>e.stopPropagation(),children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-3 py-2 text-xs",children:[(0,l.jsx)("span",{children:c("cron.log.title",{id:x})}),(0,l.jsx)("button",{onClick:()=>f(null),className:"rounded px-2 py-0.5 text-[var(--muted-foreground)] hover:bg-[var(--accent)]",children:c("cron.log.close")})]}),(0,l.jsx)("pre",{className:"flex-1 overflow-auto whitespace-pre-wrap p-3 font-mono text-[11px] leading-relaxed",children:g?c("cron.loading"):null!=h?h:""})]})})]})}function i4(e){let t=e=>e.toString().padStart(2,"0");return"".concat(e.getFullYear(),"-").concat(t(e.getMonth()+1),"-").concat(t(e.getDate()),"T").concat(t(e.getHours()),":").concat(t(e.getMinutes()))}function i8(e){var t,r,n,a,s,i,c,d,m,p,x,f,h;let{initial:v,onClose:g,onSaved:b}=e,y=(0,eZ.kj)(),j=rA(e=>e.activeProject),[w,N]=(0,o.useState)(null!=(r=null==v?void 0:v.label)?r:""),[k,S]=(0,o.useState)(null!=(a=null!=(n=null==v?void 0:v.workspacePath)?n:null==j?void 0:j.path)?a:""),[C,A]=(0,o.useState)(k),[E,T]=(0,o.useState)(null!=(s=null==v?void 0:v.agentId)?s:"default"),[M,F]=(0,o.useState)([]),[D,P]=(0,o.useState)(null!=(i=null==v?void 0:v.sessionId)?i:""),[L,R]=(0,o.useState)([]),[_,z]=(0,o.useState)(null!=(c=null==v?void 0:v.workingDir)?c:""),[O,U]=(0,o.useState)(null!=(d=null==v?void 0:v.stateless)&&d),B=v?null!=(m=v.sessionId)?m:"":null,W=O?null:D!==B||(null==v?void 0:v.stateless)||C!==(null==v?void 0:v.workspacePath)?D&&null!=(x=null==(t=L.find(e=>e.id===D))?void 0:t.agentId)?x:null:null!=(p=null==v?void 0:v.sessionAgentId)?p:null,H=D||(null==v?void 0:v.effectiveSessionId)||"",K=null!==W&&W!==E,[G,q]=(0,o.useState)((null==v?void 0:v.runAt)?"oneShot":"recurring"),[$,J]=(0,o.useState)((null==v?void 0:v.schedule)||"0 9 * * *"),[Z,V]=(0,o.useState)(()=>(null==v?void 0:v.runAt)?i4(new Date(v.runAt)):i4(new Date(Date.now()+36e5))),[Y,Q]=(0,o.useState)(()=>(function(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC"}catch(e){return"UTC"}})());(0,o.useEffect)(()=>{let e=!0;return u.F.cron.meta().then(t=>{let{hostTimezone:r}=t;e&&r&&Q(r)}).catch(e=>console.error("cron.meta",e)),()=>{e=!1}},[]);let X=(0,o.useMemo)(()=>{let e=function(){let e=Intl;if("function"==typeof e.supportedValuesOf)try{return e.supportedValuesOf("timeZone")}catch(e){}return["UTC","Asia/Shanghai","Asia/Tokyo","Asia/Singapore","Europe/London","Europe/Paris","America/New_York","America/Los_Angeles"]}(),t=e.includes(Y)?Y:e[0];return[{id:t,label:"".concat(t," (default)")},...e.filter(e=>e!==t).map(e=>({id:e,label:e}))]},[Y]),[ee,et]=(0,o.useState)(null!=(f=null==v?void 0:v.timezone)?f:""),[er,en]=(0,o.useState)((null==v?void 0:v.timeoutSec)!=null?String(v.timeoutSec):""),[ea,es]=(0,o.useState)(null),[el,eo]=(0,o.useState)(null),[ei,ec]=(0,o.useState)(null!=(h=null==v?void 0:v.userPrompt)?h:""),[ed,eu]=(0,o.useState)((null==v?void 0:v.enabled)!==0),[em,ep]=(0,o.useState)([]),[ex,ef]=(0,o.useState)(()=>{var e;let t=new Set;for(let r of null!=(e=null==v?void 0:v.targets)?e:[])t.add("".concat(r.channelType,":").concat(r.accountId));return t}),[eh,ev]=(0,o.useState)(()=>{var e;let t={};for(let r of null!=(e=null==v?void 0:v.targets)?e:[]){let e="".concat(r.channelType,":").concat(r.accountId);r.chatId&&(t[e]=t[e]?"".concat(t[e],", ").concat(r.chatId):r.chatId)}return t}),[eg,eb]=(0,o.useState)(!1),[ey,ej]=(0,o.useState)(null);(0,o.useEffect)(()=>{let e=!0,t=async()=>{try{let{agents:t}=await u.F.agentConfigs.list(C||void 0);if(!e)return;let r=t.filter(e=>!e.internal&&!e.overridden&&!e.disabled).map(e=>({id:e.id,name:e.name||e.id}));F(r),r.length>0&&T(e=>r.some(t=>t.id===e)?e:r[0].id)}catch(e){console.error("agentConfigs.list",e)}};return C&&t(),()=>{e=!1}},[C]),(0,o.useEffect)(()=>{let e=!0;if(C)return u.F.sessionLogs.list(C,{rootOnly:!0,limit:50}).then(t=>{let{sessions:r}=t;e&&R(r.map(e=>{var t;return{id:e.id,label:"".concat(e.title||e.id," \xb7 ").concat(e.agentName||e.agentId),agentId:e.agentId,workingDir:null!=(t=e.workingDir)?t:null}}))}).catch(t=>{e&&R([]),console.error("sessionLogs.list",t)}),()=>{e=!1}},[C]),(0,o.useEffect)(()=>{let e=!0;return u.F.cron.listChannelTargets().then(t=>{let{targets:r}=t;e&&ep(r)}).catch(e=>console.error("listChannelTargets",e)),()=>{e=!1}},[]);let ew=(0,o.useCallback)(e=>{ef(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),eN=(0,o.useCallback)((e,t)=>{let r=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})$/.exec(e);if(!r)return Date.parse(e);let[,n,a,s,l,o]=r,i=Date.UTC(+n,a-1,+s,+l,+o),c=Object.fromEntries(new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).formatToParts(new Date(i)).filter(e=>"literal"!==e.type).map(e=>[e.type,e.value]));return i-(Date.UTC(+c.year,c.month-1,+c.day,24==+c.hour?0:+c.hour,+c.minute,+c.second)-i)},[]),ek=(0,o.useCallback)(async()=>{if(ej(null),!k.trim())return void ej(y("cron.form.err.workspace"));if(!E.trim())return void ej(y("cron.form.err.agent"));if("recurring"===G&&!$.trim())return void ej(y("cron.form.err.schedule"));if("oneShot"===G&&!Z)return void ej(y("cron.form.err.runAt"));if(!ei.trim())return void ej(y("cron.form.err.prompt"));let e=ee||Y,t="oneShot"===G?eN(Z,e):void 0;if("oneShot"===G&&void 0!==t&&t<=Date.now())return void ej(y("cron.form.err.runAtPast"));let r=er.trim(),n=r?Number(r):void 0;if(void 0!==n&&(!Number.isInteger(n)||n<60||n>21600))return void ej(y("cron.form.err.timeoutSec"));let a=(t,r)=>null===t?null!=r?r:null:t?eN(t,e):null,s="recurring"===G?a(ea,null==v?void 0:v.activeFrom):null,l="recurring"===G?a(el,null==v?void 0:v.activeUntil):null;if(el&&null!==l&&l<=Date.now())return void ej(y("cron.form.err.activeUntilPast"));if(null!==s&&null!==l&&l<=s)return void ej(y("cron.form.err.activeOrder"));let o=[];for(let e of ex){var i;let[t,r]=e.split(":"),n=(null!=(i=eh[e])?i:"").trim(),a=n?n.split(",").map(e=>e.trim()).filter(Boolean):[],s=e=>"slack"!==t||/^[DCG][A-Z0-9]+(:[\d.]+)?$/.test(e)?"feishu"!==t||/^oc_[a-zA-Z0-9]+(:[a-zA-Z0-9_-]+)?$/.test(e)?"wecom"!==t||/^[\w@.-]+$/.test(e)?"telegram"!==t||/^-?\d+$/.test(e)?null:y("cron.form.err.chatId.telegram",{chatId:e}):y("cron.form.err.chatId.wecom",{chatId:e}):y("cron.form.err.chatId.feishu",{chatId:e}):y("cron.form.err.chatId.slack",{chatId:e});for(let e of a){let t=s(e);if(t)return void ej(t)}if(0===a.length)o.push({channelType:t,accountId:r});else for(let e of a)o.push({channelType:t,accountId:r,chatId:e})}eb(!0);try{let e={label:w||void 0,workspacePath:k,agentId:E,userPrompt:ei,timezone:ee||void 0,targets:o,enabled:ed};v?await u.F.cron.updateJob(v.id,{...e,schedule:"recurring"===G?$:"",runAt:"oneShot"===G?t:null,timeoutSec:null!=n?n:null,sessionId:O?null:D||null,workingDir:_.trim()||null,stateless:O,..."oneShot"===G||null!==ea?{activeFrom:s}:{},..."oneShot"===G||null!==el?{activeUntil:l}:{}}):await u.F.cron.createJob({...e,schedule:"recurring"===G?$:"",runAt:"oneShot"===G?t:void 0,timeoutSec:n,sessionId:O?void 0:D||void 0,workingDir:_.trim()||void 0,stateless:O,activeFrom:null!=s?s:void 0,activeUntil:null!=l?l:void 0}),b()}catch(e){ej(e instanceof Error?e.message:String(e))}finally{eb(!1)}},[v,w,k,E,D,_,O,ei,G,$,Z,ee,Y,eN,er,ea,el,ex,eh,ed,b,y]);return(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 flex h-full flex-col",children:[(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 flex items-center justify-between border-b border-[var(--border)] px-4 py-3",children:[(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 text-sm font-medium",children:v?y("cron.form.edit"):y("cron.form.create")}),(0,l.jsx)("button",{onClick:g,className:"jsx-8283b0ed0bcf6928 rounded px-2 py-1 text-xs text-[var(--muted-foreground)] hover:bg-[var(--accent)]",children:y("cron.form.cancel")})]}),(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 flex-1 space-y-3 overflow-y-auto p-4 text-xs",children:[(0,l.jsx)(i6,{label:y("cron.form.label"),children:(0,l.jsx)("input",{value:w,onChange:e=>N(e.target.value),placeholder:y("cron.form.label.placeholder"),className:"jsx-8283b0ed0bcf6928 input-base"})}),(0,l.jsx)(i6,{label:y("cron.form.workspace"),children:(0,l.jsx)("input",{value:k,onChange:e=>S(e.target.value),onBlur:()=>A(k),onKeyDown:e=>{"Enter"===e.key&&A(k)},placeholder:y("cron.form.workspace.placeholder"),className:"jsx-8283b0ed0bcf6928 input-base font-mono"})}),(0,l.jsxs)(i6,{label:y("cron.form.agent"),children:[(0,l.jsxs)("select",{value:E,onChange:e=>T(e.target.value),disabled:null!==W&&!K,className:"jsx-8283b0ed0bcf6928 input-base disabled:opacity-60",children:[0===M.length&&(0,l.jsx)("option",{value:"default",className:"jsx-8283b0ed0bcf6928",children:"default"}),W&&!M.some(e=>e.id===W)&&(0,l.jsx)("option",{value:W,className:"jsx-8283b0ed0bcf6928",children:W}),M.map(e=>(0,l.jsxs)("option",{value:e.id,className:"jsx-8283b0ed0bcf6928",children:[e.name," (",e.id,")"]},e.id))]}),K?(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-amber-600",children:y("cron.form.agent.mismatch",{id:H,agent:W})}):W&&(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.agent.locked",{id:H,agent:W})})]}),(0,l.jsxs)(i6,{label:y("cron.form.stateless"),children:[(0,l.jsxs)("label",{className:"jsx-8283b0ed0bcf6928 flex cursor-pointer items-center gap-1",children:[(0,l.jsx)("input",{type:"checkbox",checked:O,onChange:e=>U(e.target.checked),className:"jsx-8283b0ed0bcf6928"}),(0,l.jsx)("span",{className:"jsx-8283b0ed0bcf6928",children:y("cron.form.stateless.label")})]}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.stateless.hint")})]}),(0,l.jsxs)(i6,{label:y("cron.form.session"),children:[(0,l.jsx)(ot,{value:O?"":D,disabled:O,placeholder:O?y("cron.form.session.stateless"):y("cron.form.session.placeholder"),presets:C?L:[],onCommit:e=>{let t=e.trim();P(t);let r=L.find(e=>e.id===t);if(r){var n;T(r.agentId),z(null!=(n=r.workingDir)?n:"")}},minWidth:280}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.session.hint")})]}),(0,l.jsxs)(i6,{label:y("cron.form.folder"),children:[(0,l.jsx)("input",{value:_,onChange:e=>z(e.target.value),placeholder:y("cron.form.folder.placeholder"),className:"jsx-8283b0ed0bcf6928 input-base font-mono"}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.folder.hint")})]}),(0,l.jsx)(i6,{label:y("cron.form.mode"),children:(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 flex gap-3",children:[(0,l.jsxs)("label",{className:"jsx-8283b0ed0bcf6928 flex cursor-pointer items-center gap-1",children:[(0,l.jsx)("input",{type:"radio",name:"cron-mode",value:"recurring",checked:"recurring"===G,onChange:()=>q("recurring"),className:"jsx-8283b0ed0bcf6928"}),(0,l.jsx)("span",{className:"jsx-8283b0ed0bcf6928",children:y("cron.form.mode.recurring")})]}),(0,l.jsxs)("label",{className:"jsx-8283b0ed0bcf6928 flex cursor-pointer items-center gap-1",children:[(0,l.jsx)("input",{type:"radio",name:"cron-mode",value:"oneShot",checked:"oneShot"===G,onChange:()=>q("oneShot"),className:"jsx-8283b0ed0bcf6928"}),(0,l.jsx)("span",{className:"jsx-8283b0ed0bcf6928",children:y("cron.form.mode.oneShot")})]})]})}),"recurring"===G?(0,l.jsxs)(i6,{label:y("cron.form.schedule"),children:[(0,l.jsx)("input",{value:$,onChange:e=>J(e.target.value),placeholder:y("cron.form.schedule.placeholder"),className:"jsx-8283b0ed0bcf6928 input-base font-mono"}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.schedule.hint")})]}):(0,l.jsxs)(i6,{label:y("cron.form.runAt"),children:[(0,l.jsx)("input",{type:"datetime-local",value:Z,onChange:e=>V(e.target.value),className:"jsx-8283b0ed0bcf6928 input-base font-mono"}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.runAt.hint")})]}),(0,l.jsx)(i6,{label:y("cron.form.timezone"),children:(0,l.jsx)(ot,{value:ee||Y,placeholder:y("cron.form.timezone.hostDefault",{tz:Y}),presets:X,onCommit:e=>{et(e===Y?"":e)},minWidth:280})}),"recurring"===G&&(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928",children:[(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 grid grid-cols-2 gap-2",children:[["cron.form.activeFrom",ea,null==v?void 0:v.activeFrom,es],["cron.form.activeUntil",el,null==v?void 0:v.activeUntil,eo]].map(e=>{let[t,r,n,a]=e,s=null!=r?r:null!=n?function(e,t){let r=Object.fromEntries(new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).formatToParts(new Date(e)).filter(e=>"literal"!==e.type).map(e=>[e.type,e.value]));return"".concat(r.year,"-").concat(r.month,"-").concat(r.day,"T").concat("24"===r.hour?"00":r.hour,":").concat(r.minute)}(n,ee||Y):"";return(0,l.jsx)(i6,{label:y(t),children:(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 flex items-center gap-1",children:[(0,l.jsx)("input",{type:"datetime-local",value:s,onChange:e=>a(e.target.value),className:"jsx-8283b0ed0bcf6928 input-base font-mono"}),s&&(0,l.jsx)("button",{type:"button",onClick:()=>a(""),className:"jsx-8283b0ed0bcf6928 shrink-0 rounded px-2 py-1 text-[var(--muted-foreground)] hover:bg-[var(--accent)]",children:y("cron.form.activeClear")})]})},t)})}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.active.hint")})]}),(0,l.jsxs)(i6,{label:y("cron.form.timeoutSec"),children:[(0,l.jsx)("input",{type:"number",min:60,max:21600,step:1,value:er,onChange:e=>en(e.target.value),placeholder:y("cron.form.timeoutSec.placeholder"),className:"jsx-8283b0ed0bcf6928 input-base font-mono"}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.timeoutSec.hint")})]}),(0,l.jsx)(i6,{label:y("cron.form.userPrompt"),children:(0,l.jsx)("textarea",{value:ei,onChange:e=>ec(e.target.value),rows:5,placeholder:y("cron.form.userPrompt.placeholder"),className:"jsx-8283b0ed0bcf6928 input-base"})}),(0,l.jsx)(i6,{label:y("cron.form.targets"),children:(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 space-y-1 rounded border border-[var(--border)] p-2",children:[0===em.length?(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 text-[var(--muted-foreground)]",children:y("cron.form.targets.empty")}):em.map(e=>{var t;let r="".concat(e.channelType,":").concat(e.accountId),n=ex.has(r),a="wechat"!==e.channelType,s="slack"===e.channelType?"D… (DM) / C… (channel) / C…:1700.0 (thread)":"telegram"===e.channelType?y("cron.form.chatIdHint.telegram"):"feishu"===e.channelType?y("cron.form.chatIdHint.feishu"):"wecom"===e.channelType?y("cron.form.chatIdHint.wecom"):"";return(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 "+((0,I.cn)("rounded px-1 py-0.5",n&&"bg-[var(--accent)]")||""),children:[(0,l.jsxs)("label",{className:"jsx-8283b0ed0bcf6928 flex cursor-pointer items-center gap-2",children:[(0,l.jsx)("input",{type:"checkbox",checked:n,onChange:()=>ew(r),disabled:!e.enabled,className:"jsx-8283b0ed0bcf6928"}),(0,l.jsx)("span",{className:"jsx-8283b0ed0bcf6928 font-medium",children:e.channelType}),(0,l.jsx)("span",{className:"jsx-8283b0ed0bcf6928",children:e.label}),!e.enabled&&(0,l.jsx)("span",{className:"jsx-8283b0ed0bcf6928 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.targets.disabled")}),!e.hasActiveChat&&(0,l.jsx)("span",{title:y("cron.form.targets.noActiveChat"),className:"jsx-8283b0ed0bcf6928 text-[10px] text-amber-400",children:y("cron.form.targets.noActiveChatLabel")})]}),n&&a&&(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 ml-6",children:[(0,l.jsx)(i9,{channelType:e.channelType,accountId:e.accountId,value:null!=(t=eh[r])?t:"",onChange:e=>ev(t=>({...t,[r]:e})),placeholder:s}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-0.5 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.chatIdHelp")})]})]},r)}),(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 mt-1 text-[10px] text-[var(--muted-foreground)]",children:y("cron.form.targets.hint")})]})}),(0,l.jsxs)("label",{className:"jsx-8283b0ed0bcf6928 flex items-center gap-2",children:[(0,l.jsx)("input",{type:"checkbox",checked:ed,onChange:e=>eu(e.target.checked),className:"jsx-8283b0ed0bcf6928"}),(0,l.jsx)("span",{className:"jsx-8283b0ed0bcf6928",children:y("cron.form.enabled")})]}),ey&&(0,l.jsx)("div",{className:"jsx-8283b0ed0bcf6928 rounded border border-red-500/50 bg-red-950/40 p-2 text-red-300",children:ey})]}),(0,l.jsxs)("div",{className:"jsx-8283b0ed0bcf6928 flex justify-end gap-2 border-t border-[var(--border)] px-4 py-3",children:[(0,l.jsx)("button",{onClick:g,className:"jsx-8283b0ed0bcf6928 rounded bg-[var(--accent)] px-3 py-1 text-xs",children:y("cron.form.cancel")}),(0,l.jsx)("button",{onClick:()=>{ek()},disabled:eg,className:"jsx-8283b0ed0bcf6928 rounded bg-[var(--primary)] px-3 py-1 text-xs text-[var(--primary-foreground)] disabled:opacity-50",children:eg?y("cron.form.saving"):v?y("cron.form.save"):y("cron.form.create.btn")})]}),(0,l.jsx)(iX(),{id:"8283b0ed0bcf6928",children:".input-base{width:100%;background:var(--background);color:var(--foreground);border:1px solid var(--border);border-radius:.25rem;padding:.375rem .5rem;font-size:.75rem}"})]})}function i6(e){let{label:t,children:r}=e;return(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"mb-1 block text-[var(--foreground)]",children:t}),r]})}function i9(e){let{channelType:t,accountId:r,value:n,onChange:a,placeholder:s}=e,i=(0,eZ.kj)(),[c,d]=(0,o.useState)(""),[m,p]=(0,o.useState)([]),[x,f]=(0,o.useState)(!1),[h,v]=(0,o.useState)(!1),g="slack"===t||"feishu"===t;return(0,o.useEffect)(()=>{if(!g||!c.trim())return void p([]);let e=!1;v(!0);let n=setTimeout(async()=>{try{let n="slack"===t?await u.F.slack.searchTargets(r,c):await u.F.feishu.searchTargets(r,c);if(e)return;let a=n.hits.map(e=>{var t,r;let n=null!=(r=null!=(t=e.realName)?t:e.email)?r:"";return{id:e.id,name:e.name,chatId:e.chatId,kind:e.kind,subtitle:n}});p(a)}catch(t){e||p([]),console.error("[cron-form] target search failed:",t)}finally{e||v(!1)}},300);return()=>{e=!0,clearTimeout(n)}},[c,t,r,g]),(0,l.jsxs)("div",{className:"relative",children:[(0,l.jsx)("input",{value:n,onChange:e=>(function(e){var t,r;if(a(e),!g)return;let n=null!=(r=null==(t=e.split(",").pop())?void 0:t.trim())?r:"";d(n),f(n.length>0)})(e.target.value),onFocus:()=>{c&&f(!0)},onBlur:()=>setTimeout(()=>f(!1),150),placeholder:s,className:"input-base font-mono text-[11px]"}),g&&x&&(h||m.length>0)&&(0,l.jsxs)("div",{className:"absolute z-10 mt-1 max-h-60 w-full overflow-y-auto rounded border border-[var(--border)] bg-[var(--background)] shadow-lg",children:[h&&(0,l.jsx)("div",{className:"px-2 py-1 text-[10px] text-[var(--muted-foreground)]",children:i("cron.form.searching")}),!h&&m.map(e=>(0,l.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>(function(e){let t=n.split(",").map(e=>e.trim()).filter(Boolean);t.length>0?t[t.length-1]=e:t.push(e),a(t.join(", ")),d(""),p([]),f(!1)})(e.chatId),className:"flex w-full items-center gap-2 px-2 py-1 text-left text-[11px] hover:bg-[var(--accent)]",children:[(0,l.jsx)("span",{className:"text-[var(--muted-foreground)]",children:function(e){switch(e){case"user":return"@";case"channel":case"chat":return"#";case"group":return"\uD83D\uDD12";case"mpim":return"\uD83D\uDC65";case"im":case"p2p":return"\uD83D\uDCAC";default:return"\xb7"}}(e.kind)}),(0,l.jsxs)("span",{className:"flex-1 truncate",children:[e.name,e.subtitle&&(0,l.jsx)("span",{className:"ml-1 text-[10px] text-[var(--muted-foreground)]",children:e.subtitle})]}),(0,l.jsx)("span",{className:"font-mono text-[10px] text-[var(--muted-foreground)]",children:e.chatId})]},e.kind+":"+e.id))]})]})}function i7(){let e=(0,eZ.kj)(),[t,r]=(0,o.useState)([]),[n,a]=(0,o.useState)(!0),[s,i]=(0,o.useState)(null),[c,d]=(0,o.useState)(!1),[m,x]=(0,o.useState)(null),[f,h]=(0,o.useState)(!1),[v,g]=(0,o.useState)(0),b=i1(e=>e.selectedId),y=i1(e=>e.setSelectedId),j=i1(e=>e.openCreate),w=(0,o.useCallback)(async()=>{try{let e=await u.F.cron.listJobs({limit:20});r(e.jobs),g(Date.now()),x(e.hasMore?e.nextCursor:null),i(null)}catch(e){i(e instanceof Error?e.message:String(e))}finally{a(!1)}},[]),N=al((0,o.useCallback)(async()=>{if(m&&!f){h(!0);try{let e=await u.F.cron.listJobs({limit:20,before:m});r(t=>[...t,...e.jobs]),x(e.hasMore?e.nextCursor:null)}catch(e){console.error("cron.listJobs more",e)}finally{h(!1)}}},[m,f]),t.length),k=(0,o.useCallback)(async()=>{d(!0);let e=new Promise(e=>setTimeout(e,400));await Promise.all([w(),e]),d(!1)},[w]);return(0,o.useEffect)(()=>{w()},[w]),(0,o.useEffect)(()=>{let e=p.on("cron:job_changed",()=>{w()}),t=p.on("cron:run_changed",()=>{w()});return()=>{e(),t()}},[w]),(0,o.useEffect)(()=>{!b&&t[0]&&y(t[0].id)},[t,b,y]),(0,l.jsxs)("div",{className:"flex h-full flex-col border-r border-[var(--border)] bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-[var(--border)] px-3 py-2",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-[var(--foreground)]",children:[(0,l.jsx)(i0.A,{className:"h-4 w-4"}),e("cron.title")]}),(0,l.jsxs)("div",{className:"flex items-center gap-1",children:[(0,l.jsxs)("button",{onClick:j,className:"flex items-center gap-1 rounded bg-[var(--primary)] px-2 py-1 text-xs text-[var(--primary-foreground)] hover:opacity-90",title:e("cron.new"),children:[(0,l.jsx)(s8.A,{className:"h-3 w-3"})," ",e("cron.new")]}),(0,l.jsx)("button",{onClick:()=>{k()},disabled:c,className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--accent)] hover:text-[var(--foreground)] disabled:cursor-default",title:e("cron.refresh"),children:(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",c&&"animate-spin")})})]})]}),(0,l.jsx)("div",{className:"flex-1 overflow-y-auto",children:n&&0===t.length?(0,l.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:e("cron.loading")}):s?(0,l.jsx)("div",{className:"px-3 py-4 text-xs text-red-400",children:e("cron.error",{error:s})}):0===t.length?(0,l.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:e("cron.empty")}):(0,l.jsxs)("ul",{className:"divide-y divide-[var(--border)]",children:[t.map(t=>{let r=b===t.id,n=t.lastRunStatus;return(0,l.jsxs)("li",{className:(0,I.cn)("cursor-pointer px-3 py-2 text-xs hover:bg-[var(--accent)]",r&&"bg-[var(--accent)]"),onClick:()=>y(t.id),children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:(0,I.cn)("inline-block h-2 w-2 rounded-full",0===t.enabled?"bg-[var(--muted-foreground)]":"succeeded"===n?"bg-emerald-500":"running"===n?"bg-amber-400 animate-pulse":"failed"===n||"timeout"===n?"bg-red-500":"bg-[var(--muted-foreground)]")}),(0,l.jsx)("span",{className:"truncate font-medium text-[var(--foreground)]",children:t.label||t.id}),null!=t.activeUntil&&t.activeUntil<=v?(0,l.jsx)("span",{className:"shrink-0 rounded bg-[var(--accent)] px-1.5 py-0.5 text-[10px] text-[var(--muted-foreground)]",children:e("cron.badge.ended")}):null!=t.activeFrom&&t.activeFrom>v?(0,l.jsx)("span",{className:"shrink-0 rounded bg-[var(--accent)] px-1.5 py-0.5 text-[10px] text-[var(--muted-foreground)]",children:e("cron.badge.activeFrom",{date:new Date(t.activeFrom).toLocaleString(void 0,{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"})})}):null]}),(0,l.jsxs)("div",{className:"mt-1 flex items-center justify-between gap-2 text-[var(--muted-foreground)]",children:[(0,l.jsx)("span",{className:"font-mono",children:t.runAt?new Date(t.runAt).toLocaleString():t.schedule}),(0,l.jsx)("span",{children:t.agentId})]}),(0,l.jsx)("div",{className:"mt-0.5 truncate text-[var(--muted-foreground)]",children:t.workspacePath}),t.nextRunAt&&1===t.enabled&&(0,l.jsxs)("div",{className:"mt-0.5 text-[var(--muted-foreground)]",children:[e("cron.next")," ",new Date(t.nextRunAt).toLocaleString()]})]},t.id)}),m&&(0,l.jsx)("li",{ref:e=>{N.current=e},className:"px-3 py-3 text-center text-[10px] text-[var(--muted-foreground)]",children:f?e("cron.loading"):e("cron.loadOlder")})]})})]})}var ce=r(88373),ct=r(10969),cr=r(60087),cn=r(82358),ca=r(80566);let cs=(0,g.v)(e=>({selected:null,select:t=>e({selected:t}),clear:()=>e({selected:null})}));function cl(e){let{files:t,group:r,selectedPath:n,onSelect:a,onAction:s}=e,[i,c]=(0,o.useState)(new Set),d=function(e,t){let r={type:"dir",name:"",path:"",children:[]};for(let n of e){let e=n.path.split("/"),a=r;for(let t=0;t<e.length-1;t++){let r=e[t],n=a.path?"".concat(a.path,"/").concat(r):r,s=a.children.find(e=>"dir"===e.type&&e.name===r);s||(s={type:"dir",name:r,path:n,children:[]},a.children.push(s)),a=s}a.children.push({type:"file",name:e[e.length-1],file:n,char:t(n)})}return function e(t){for(let r of t.children)"dir"===r.type&&e(r);for(;1===t.children.length&&"dir"===t.children[0].type&&""!==t.name;){let e=t.children[0];t.name="".concat(t.name,"/").concat(e.name),t.path=e.path,t.children=e.children}}(r),function e(t){for(let r of(t.children.sort((e,t)=>e.type!==t.type?"dir"===e.type?-1:1:e.name.localeCompare(t.name)),t.children))"dir"===r.type&&e(r)}(r),r.children}(t,e=>"staged"===r?e.index:e.workingDir);return(0,l.jsx)("div",{children:d.map(e=>(function e(t,o){let d=12*o+8;if("dir"===t.type){let r=i.has(t.path);return(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{onClick:()=>{var e;return e=t.path,void c(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},className:"flex w-full items-center gap-1 py-0.5 text-xs text-[var(--muted-foreground)] hover:text-[var(--foreground)]",style:{paddingLeft:"".concat(d,"px")},children:[r?(0,l.jsx)(F.A,{className:"h-3.5 w-3.5 shrink-0"}):(0,l.jsx)(M.A,{className:"h-3.5 w-3.5 shrink-0"}),(0,l.jsx)("span",{className:"truncate",children:t.name})]}),!r&&t.children.map(t=>e(t,o+1))]},"d:".concat(t.path))}let u=N(t.char),m=n===t.file.path,p="staged"===r?ca.A:s8.A,{Icon:x,color:f}=et(t.file.path);return(0,l.jsxs)("div",{onClick:()=>a(t.file),className:(0,I.cn)("group flex w-full cursor-pointer items-center gap-1.5 py-0.5 pr-2 text-xs",m?"bg-[var(--accent)]":"hover:bg-[var(--accent)]"),style:{paddingLeft:"".concat(d+16,"px")},children:[(0,l.jsx)(x,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0",f)}),(0,l.jsx)("span",{className:"truncate text-[var(--foreground)]",style:{color:u.color},children:t.name}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsx)("button",{onClick:e=>{e.stopPropagation(),s([t.file.path])},title:"staged"===r?"Unstage":"Stage",className:"hidden shrink-0 rounded p-0.5 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] group-hover:block",children:(0,l.jsx)(p,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("span",{className:"w-4 shrink-0 text-center font-mono text-[11px] font-semibold",style:{color:u.color},title:u.label,children:u.letter})]},"f:".concat(t.file.path))})(e,0))})}var co=r(4704),ci=r(6821);function cc(e){let{projectId:t,onClose:r,onSaved:n}=e,a=(0,eZ.kj)(),[s,i]=(0,o.useState)("https");return(0,l.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:r,children:(0,l.jsxs)("div",{className:"w-[460px] rounded-lg border border-[var(--border)] bg-[var(--background)] shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-2.5",children:[(0,l.jsx)("h3",{className:"text-sm font-medium text-[var(--foreground)]",children:a("sc.cred.title")}),(0,l.jsx)("button",{onClick:r,className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)]",children:(0,l.jsx)(eJ.A,{className:"h-4 w-4"})})]}),(0,l.jsx)("div",{className:"flex gap-1 border-b border-[var(--border)] px-4 pt-3",children:["https","ssh"].map(e=>(0,l.jsx)("button",{onClick:()=>i(e),className:(0,I.cn)("rounded-t px-3 py-1.5 text-xs font-medium",s===e?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:"https"===e?a("sc.cred.tabHttps"):a("sc.cred.tabSsh")},e))}),"https"===s?(0,l.jsx)(cu,{onClose:r,onSaved:n}):(0,l.jsx)(cm,{projectId:t,onClose:r})]})})}let cd="rounded border border-[var(--border)] bg-[var(--secondary)] px-2 py-1.5 text-xs text-[var(--foreground)] outline-none focus:border-[var(--primary)]";function cu(e){let{onClose:t,onSaved:r}=e,n=(0,eZ.kj)(),[a,s]=(0,o.useState)([]),[i,c]=(0,o.useState)(null),[d,m]=(0,o.useState)("github.com"),[p,x]=(0,o.useState)(""),[f,h]=(0,o.useState)(""),[v,g]=(0,o.useState)(!1),[b,y]=(0,o.useState)(null),j=(0,o.useCallback)(()=>{u.F.git.getCredentials().then(e=>s(e.credentials)).catch(()=>s([]))},[]);async function w(){if(!d.trim()||!p.trim()||!f)return void y(n("sc.cred.required"));g(!0),y(null);try{await u.F.git.saveCredentials({host:d.trim(),username:p.trim(),token:f}),h(""),j(),r()}catch(e){y(e instanceof Error?e.message:String(e))}finally{g(!1)}}async function N(e){y(null);try{await u.F.git.deleteCredential(e),j()}catch(e){y(e instanceof Error?e.message:String(e))}finally{c(null)}}return(0,o.useEffect)(()=>{j()},[j]),(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex max-h-[420px] flex-col gap-3 overflow-y-auto px-4 py-4",children:[(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.httpsDesc")}),(0,l.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.configuredList")}),0===a.length?(0,l.jsx)("p",{className:"rounded border border-dashed border-[var(--border)] px-2 py-3 text-center text-[10px] text-[var(--muted-foreground)]",children:n("sc.cred.noCredsYet")}):a.map(e=>(0,l.jsxs)("div",{className:"flex items-center gap-2 rounded border border-[var(--border)] px-2.5 py-1.5 text-xs",children:[(0,l.jsx)("span",{className:"h-2 w-2 shrink-0 rounded-full bg-emerald-400"}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[(0,l.jsx)("span",{className:"truncate text-[var(--foreground)]",children:e.host}),(0,l.jsx)("span",{className:"truncate text-[10px] text-[var(--muted-foreground)]",children:e.username})]}),i===e.host?(0,l.jsx)("button",{onClick:()=>N(e.host),className:"shrink-0 rounded bg-red-500/15 px-2 py-0.5 text-[10px] font-medium text-red-400 hover:bg-red-500/25",children:n("sc.cred.confirmDelete")}):(0,l.jsx)("button",{onClick:()=>c(e.host),title:n("sc.cred.delete"),className:"shrink-0 rounded p-1 text-[var(--muted-foreground)] hover:text-red-400",children:(0,l.jsx)(eU.A,{className:"h-3 w-3"})})]},e.host))]}),(0,l.jsx)("div",{className:"border-t border-[var(--border)]"}),(0,l.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.addNew")}),(0,l.jsxs)("label",{className:"flex flex-col gap-1",children:[(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.host")}),(0,l.jsx)("input",{type:"text",value:d,onChange:e=>m(e.target.value),placeholder:"github.com",className:cd})]}),(0,l.jsxs)("label",{className:"flex flex-col gap-1",children:[(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.username")}),(0,l.jsx)("input",{type:"text",value:p,onChange:e=>x(e.target.value),autoComplete:"off",className:cd})]}),(0,l.jsxs)("label",{className:"flex flex-col gap-1",children:[(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.token")}),(0,l.jsx)("input",{type:"password",value:f,onChange:e=>h(e.target.value),autoComplete:"new-password",className:cd}),(0,l.jsxs)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:[n("sc.cred.tokenHint")," ",(0,l.jsxs)("a",{href:"https://github.com/settings/tokens",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-0.5 text-[var(--primary)] hover:underline",children:[n("sc.cred.tokenLink"),(0,l.jsx)(co.A,{className:"h-2.5 w-2.5"})]})]})]})]}),b&&(0,l.jsx)("p",{className:"text-xs text-red-400",children:b})]}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--border)] px-3 py-2.5",children:[(0,l.jsx)("button",{onClick:t,className:"rounded px-3 py-1 text-xs font-medium text-[var(--muted-foreground)] hover:bg-[var(--secondary)]",children:n("sc.cred.cancel")}),(0,l.jsx)("button",{onClick:w,disabled:v,className:"rounded bg-[var(--primary)] px-3 py-1 text-xs font-medium text-[var(--primary-foreground)] hover:opacity-90 disabled:opacity-40",children:v?n("sc.cred.saving"):n("sc.cred.save")})]})]})}function cm(e){let{projectId:t,onClose:r}=e,n=(0,eZ.kj)(),[a,s]=(0,o.useState)([]),[i,c]=(0,o.useState)(!1),[d,m]=(0,o.useState)([]),[p,x]=(0,o.useState)("other"),[f,h]=(0,o.useState)(""),[v,g]=(0,o.useState)(!1),[b,y]=(0,o.useState)(null),[j,w]=(0,o.useState)(null),[N,k]=(0,o.useState)(""),[S,C]=(0,o.useState)(!1),[A,E]=(0,o.useState)(null),T=(0,o.useCallback)(()=>{u.F.git.sshKeys().then(e=>s(e.keys)).catch(()=>s([])),u.F.git.sshAgent().then(e=>{c(e.agentRunning),m(e.loadedKeys)}).catch(()=>{}),u.F.git.getRemoteProtocol(t).then(e=>{x(e.protocol),h(e.url)}).catch(()=>{})},[t]);function M(){w(null),k(""),E(null)}async function F(e){C(!0),E(null);try{let r=await u.F.git.unlockSshKey({keyPath:e.path,passphrase:N});if(r.ok)M(),T();else{var t;E(null!=(t=r.error)?t:n("sc.cred.sshUnlockFailed"))}}catch(e){E(e instanceof Error?e.message:String(e))}finally{C(!1)}}async function D(e){g(!0),y(null);try{let r=await u.F.git.setRemoteProtocol(t,e);x(e),h(r.url)}catch(e){y(e instanceof Error?e.message:String(e))}finally{g(!1)}}return(0,o.useEffect)(()=>{T()},[T]),(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex max-h-[420px] flex-col gap-3 overflow-y-auto px-4 py-4",children:[(0,l.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.sshDesc")}),(0,l.jsxs)("div",{className:"flex items-center gap-2 rounded bg-[var(--secondary)] px-2.5 py-1.5 text-xs",children:[(0,l.jsx)("span",{className:(0,I.cn)("h-2 w-2 rounded-full",i?"bg-emerald-400":"bg-[var(--muted-foreground)]")}),(0,l.jsx)("span",{className:"text-[var(--muted-foreground)]",children:i?n("sc.cred.sshAgentOn",{count:String(d.length)}):n("sc.cred.sshAgentOff")}),(0,l.jsx)("button",{onClick:T,className:"ml-auto rounded p-0.5 text-[var(--muted-foreground)] hover:text-[var(--foreground)]",title:n("sc.cred.sshRefresh"),children:(0,l.jsx)(ad.A,{className:"h-3 w-3"})})]}),(0,l.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.sshKeys")}),0===a.length?(0,l.jsx)("p",{className:"rounded border border-dashed border-[var(--border)] px-2 py-3 text-center text-[10px] text-[var(--muted-foreground)]",children:n("sc.cred.sshNoKeys")}):a.map(e=>{let t=d.some(t=>t.includes(e.path)||t.includes(e.name)),r=j===e.path;return(0,l.jsxs)("div",{className:"rounded border border-[var(--border)]",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 px-2.5 py-1.5 text-xs",children:[e.encrypted?(0,l.jsx)(ci.A,{className:"h-3 w-3 shrink-0 text-amber-400"}):(0,l.jsx)(si.A,{className:"h-3 w-3 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"truncate text-[var(--foreground)]",children:e.name}),t?(0,l.jsx)("span",{className:"ml-auto text-[10px] text-emerald-400",children:n("sc.cred.sshLoaded")}):!r&&(0,l.jsx)("button",{onClick:()=>{w(e.path),k(""),E(null)},className:"ml-auto shrink-0 rounded bg-[var(--secondary)] px-2 py-0.5 text-[10px] font-medium text-[var(--foreground)] hover:opacity-90",children:n("sc.cred.sshUnlock")})]}),!t&&r&&(0,l.jsxs)("div",{className:"flex flex-col gap-1.5 border-t border-[var(--border)] px-2.5 py-2",children:[(0,l.jsx)("span",{className:"text-[10px] leading-relaxed text-[var(--muted-foreground)]",children:n("sc.cred.sshUnlockHint")}),(0,l.jsx)("input",{type:"password",autoFocus:!0,autoComplete:"off",value:N,onChange:e=>k(e.target.value),onKeyDown:t=>{"Enter"!==t.key||S||F(e)},placeholder:n("sc.cred.sshPassphrase"),className:cd}),A&&(0,l.jsx)("span",{className:"text-[10px] leading-relaxed text-red-400",children:A}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,l.jsx)("button",{onClick:M,disabled:S,className:"rounded px-2 py-0.5 text-[10px] font-medium text-[var(--muted-foreground)] hover:bg-[var(--secondary)] disabled:opacity-40",children:n("sc.cred.cancel")}),(0,l.jsx)("button",{onClick:()=>F(e),disabled:S,className:"rounded bg-[var(--primary)] px-2 py-0.5 text-[10px] font-medium text-[var(--primary-foreground)] hover:opacity-90 disabled:opacity-40",children:S?n("sc.cred.sshUnlocking"):n("sc.cred.sshUnlock")})]})]})]},e.path)})]}),(0,l.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,l.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:n("sc.cred.sshRemote")}),(0,l.jsxs)("div",{className:"flex items-center gap-2 rounded bg-[var(--secondary)] px-2.5 py-1.5",children:[(0,l.jsx)("span",{className:"truncate text-[10px] text-[var(--muted-foreground)]",title:f,children:f||"—"}),(0,l.jsx)("div",{className:"ml-auto flex shrink-0 overflow-hidden rounded border border-[var(--border)]",children:["https","ssh"].map(e=>(0,l.jsx)("button",{onClick:()=>D(e),disabled:v||p===e,className:(0,I.cn)("px-2 py-0.5 text-[10px] font-medium",p===e?"bg-[var(--primary)] text-[var(--primary-foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)] disabled:opacity-40"),children:e.toUpperCase()},e))})]})]}),(0,l.jsx)("p",{className:"text-[10px] leading-relaxed text-[var(--muted-foreground)]",children:n("sc.cred.sshRestartNote")}),b&&(0,l.jsx)("p",{className:"text-xs text-red-400",children:b})]}),(0,l.jsx)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--border)] px-3 py-2.5",children:(0,l.jsx)("button",{onClick:r,className:"rounded px-3 py-1 text-xs font-medium text-[var(--muted-foreground)] hover:bg-[var(--secondary)]",children:n("sc.cred.close")})})]})}var cp=r(72526);function cx(e){return e.startsWith("HEAD -> ")?{kind:"head",label:e.slice(8)}:"HEAD"===e?{kind:"head",label:"HEAD"}:e.startsWith("tag: ")?{kind:"tag",label:e.slice(5)}:e.endsWith("/HEAD")?null:e.includes("/")?{kind:"remote",label:e}:{kind:"branch",label:e}}function cf(e){let{info:t}=e,r="tag"===t.kind?cp.A:ce.A,n="head"===t.kind?"bg-[var(--primary)] text-[var(--primary-foreground)] font-medium":"tag"===t.kind?"bg-amber-400/10 text-amber-300 ring-1 ring-inset ring-amber-400/30":"remote"===t.kind?"text-[var(--muted-foreground)] ring-1 ring-inset ring-[var(--border)]":"bg-[var(--secondary)] text-[var(--foreground)] ring-1 ring-inset ring-[var(--border)]";return(0,l.jsxs)("span",{className:(0,I.cn)("inline-flex items-center gap-1 rounded px-1.5 py-px text-[10px] leading-tight",n),children:[(0,l.jsx)(r,{className:"h-2.5 w-2.5 shrink-0"}),(0,l.jsx)("span",{className:"truncate",children:t.label})]})}function ch(e){let{file:t,active:r,onSelect:n}=e,a=N(t.status),{Icon:s,color:o}=et(t.path),{name:i,dir:c}=function(e){let t=e.lastIndexOf("/");return -1===t?{name:e,dir:""}:{name:e.slice(t+1),dir:e.slice(0,t)}}(t.path);return(0,l.jsxs)("button",{onClick:n,className:(0,I.cn)("flex w-full items-center gap-1.5 py-0.5 pr-2 text-left text-xs",r?"bg-[var(--accent)]":"hover:bg-[var(--accent)]"),children:[(0,l.jsx)(s,{className:(0,I.cn)("h-3.5 w-3.5 shrink-0",o)}),(0,l.jsx)("span",{className:"shrink-0 truncate",style:{color:a.color},children:i}),c&&(0,l.jsx)("span",{className:"truncate text-[10px] text-[var(--muted-foreground)]",children:c}),(0,l.jsx)("span",{className:"flex-1"}),(0,l.jsx)("span",{className:"w-4 shrink-0 text-center font-mono text-[11px] font-semibold",style:{color:a.color},title:a.label,children:a.letter})]})}function cv(e){let{projectId:t}=e,r=(0,eZ.kj)(),n=cs(e=>e.select),a=cs(e=>e.selected),[s,i]=(0,o.useState)([]),[c,d]=(0,o.useState)(null),[m,f]=(0,o.useState)(!1),[h,v]=(0,o.useState)(null),[g,b]=(0,o.useState)(50),[j,w]=(0,o.useState)(!1),[N,k]=(0,o.useState)({}),S=(0,o.useRef)(null),C=(0,o.useCallback)(async()=>{try{let e=await u.F.git.log(t,g);i(e.commits),w(e.commits.length>=g),d(null)}catch(e){d(e instanceof Error?e.message:String(e))}finally{f(!0)}},[t,g]);(0,o.useEffect)(()=>{C()},[C]),(0,o.useEffect)(()=>{let e=null,t=p.on("file:changed",t=>{y(t)||(e&&clearTimeout(e),e=setTimeout(()=>{C()},400))}),r=x(p,()=>{C()});return()=>{e&&clearTimeout(e),t(),r()}},[C]),(0,o.useEffect)(()=>{let e=S.current;if(!e||!j)return;let t=new IntersectionObserver(e=>{var t;(null==(t=e[0])?void 0:t.isIntersecting)&&b(e=>e+50)});return t.observe(e),()=>t.disconnect()},[j]);let A=(0,o.useCallback)(e=>{v(t=>t===e?null:e),k(r=>(r[e]||u.F.git.commitFiles(t,e).then(t=>k(r=>({...r,[e]:t.files}))).catch(()=>k(t=>({...t,[e]:[]}))),r))},[t]);return c?(0,l.jsx)("div",{className:"px-3 py-4 text-xs text-red-400",children:c}):m&&0===s.length?(0,l.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:r("sc.noCommits")}):(0,l.jsxs)("div",{className:"py-1",children:[s.map((e,t)=>{let s=0===t,o=h===e.hash,i=e.pushed?"var(--muted-foreground)":"var(--primary)",c=N[e.hash],d=e.refs?e.refs.split(",").map(e=>e.trim()).filter(Boolean).map(cx).filter(e=>null!==e):[];return(0,l.jsxs)("div",{className:"flex px-3",children:[(0,l.jsxs)("div",{className:"relative shrink-0",style:{width:24},children:[!s&&(0,l.jsx)("div",{className:"absolute left-1/2 w-px -translate-x-1/2 bg-[var(--primary)] opacity-30",style:{top:0,height:16}}),(0,l.jsx)("div",{className:"absolute left-1/2 w-px -translate-x-1/2 bg-[var(--primary)] opacity-30",style:{top:16,bottom:0}}),(0,l.jsx)("div",{className:(0,I.cn)("absolute left-1/2 z-10 -translate-x-1/2 rounded-full",s&&"border-2 bg-[var(--background)]"),style:{top:11,width:10,height:10,...s?{borderColor:i}:{backgroundColor:i}},title:e.pushed?r("sc.pushed"):r("sc.unpushed")})]}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("div",{onClick:()=>A(e.hash),className:(0,I.cn)("cursor-pointer rounded-sm py-2",o?"bg-[var(--accent)]":"hover:bg-[var(--accent)]"),children:[(0,l.jsx)("div",{className:"truncate text-xs leading-4 text-[var(--foreground)]",children:e.message}),(0,l.jsxs)("div",{className:"mt-1 flex items-center gap-1.5 text-[10px] text-[var(--muted-foreground)]",children:[(0,l.jsx)("span",{className:"font-mono",children:e.shortHash}),(0,l.jsx)("span",{className:"truncate",children:e.author}),(0,l.jsxs)("span",{className:"shrink-0",children:["\xb7 ",(0,I.fw)(e.date)]})]}),d.length>0&&(0,l.jsx)("div",{className:"mt-1 flex flex-wrap gap-1",children:d.map(e=>(0,l.jsx)(cf,{info:e},"".concat(e.kind,":").concat(e.label)))})]}),o&&(0,l.jsx)("div",{className:"mb-1 ml-1 border-l border-[var(--border)] pl-2",children:void 0===c?(0,l.jsx)("div",{className:"py-1 text-[10px] text-[var(--muted-foreground)]",children:"…"}):0===c.length?(0,l.jsx)("div",{className:"py-1 text-[10px] text-[var(--muted-foreground)]",children:r("sc.noCommitFiles")}):c.map(t=>(0,l.jsx)(ch,{file:t,active:(null==a?void 0:a.commit)===e.hash&&a.path===t.path,onSelect:()=>n({path:t.path,staged:!1,from:t.from,commit:e.hash})},t.path))})]})]},e.hash)}),j&&(0,l.jsx)("div",{ref:S,className:"h-4"})]})}function cg(e){return/authentication|could not read username|permission denied|publickey|passphrase|\b401\b|\b403\b/i.test(e)}function cb(){var e,t,r;let n=(0,eZ.kj)(),a=rA(e=>{var t,r;return null!=(r=null==(t=e.activeProject)?void 0:t.id)?r:null}),s=cs(e=>e.selected),i=cs(e=>e.select),c=cs(e=>e.clear),[d,m]=(0,o.useState)(null),[f,h]=(0,o.useState)(null),[v,g]=(0,o.useState)(!1),[b,j]=(0,o.useState)(""),[w,N]=(0,o.useState)(!1),[C,A]=(0,o.useState)(null),[E,T]=(0,o.useState)(!1),[D,P]=(0,o.useState)(!1),[L,R]=(0,o.useState)(!1),[_,z]=(0,o.useState)("changes"),[O,U]=(0,o.useState)(null),[B,W]=(0,o.useState)(""),H=(0,o.useCallback)(async()=>{if(a)try{let e=await u.F.git.status(a);if(!1===e.isRepo){g(!0),m(null),U(null),h(null);return}m(e),g(!1),h(null);let t=await u.F.git.remotes(a);U(t.remotes)}catch(e){h(e instanceof Error?e.message:String(e))}},[a]);(0,o.useEffect)(()=>{H()},[H]),(0,o.useEffect)(()=>{if(!a)return;let e=null,t=p.on("file:changed",t=>{y(t)||(e&&clearTimeout(e),e=setTimeout(()=>{H()},400))}),r=x(p,()=>{H()});return()=>{e&&clearTimeout(e),t(),r()}},[a,H]);let G=null!=(e=null==d?void 0:d.files)?e:[],q=G.filter(e=>k(e.index)),$=G.filter(e=>S(e.workingDir));async function J(e){N(!0),A(null);try{await e(),await H()}catch(e){A(e instanceof Error?e.message:String(e))}finally{N(!1)}}let Z=(0,o.useCallback)((e,t)=>{i({path:e.path,staged:t,from:e.from})},[i]);function V(e){J(()=>u.F.git.stage(a,e))}function Y(e){J(()=>u.F.git.unstage(a,e))}async function Q(){a&&b.trim()&&await J(async()=>{await u.F.git.commit(a,b),j(""),c()})}function X(){a&&B.trim()&&J(async()=>{await u.F.git.addRemote(a,B.trim()),W("")})}let ee=(null!=(t=null==O?void 0:O.length)?t:0)>0;return a?v?(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 bg-[var(--background)] p-6 text-center",children:[(0,l.jsx)(tz.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"max-w-[240px] text-xs text-[var(--muted-foreground)]",children:n("sc.initRepoDesc")}),(0,l.jsxs)("button",{onClick:function(){J(()=>u.F.git.init(a))},disabled:w,className:"flex items-center gap-1.5 rounded bg-[var(--primary)] px-3 py-1.5 text-xs font-medium text-[var(--primary-foreground)] hover:opacity-90 disabled:opacity-40",children:[(0,l.jsx)(tz.A,{className:"h-3.5 w-3.5"}),n(w?"sc.initializing":"sc.initRepo")]}),C&&(0,l.jsx)("p",{className:"max-w-[240px] text-[11px] text-red-400",children:C})]}):(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex h-10 shrink-0 items-center gap-2 border-b border-[var(--border)] px-3",children:[(0,l.jsx)(ce.A,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:n("nav.sourceControl")}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsxs)("div",{className:"flex items-center rounded border border-[var(--border)]",children:[(0,l.jsx)("button",{onClick:()=>z("changes"),title:n("sc.viewChanges"),className:(0,I.cn)("rounded-l p-1","changes"===_?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:(0,l.jsx)(ct.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("button",{onClick:()=>z("graph"),title:n("sc.viewGraph"),className:(0,I.cn)("rounded-r p-1","graph"===_?"bg-[var(--secondary)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"),children:(0,l.jsx)(cr.A,{className:"h-3.5 w-3.5"})})]}),(0,l.jsx)("button",{onClick:()=>T(!0),title:n("sc.cred.title"),className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(K.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("button",{onClick:()=>{H()},title:n("sc.refresh"),className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:(0,l.jsx)(ad.A,{className:(0,I.cn)("h-3.5 w-3.5",w&&"animate-spin")})})]}),(0,l.jsxs)("div",{className:"flex shrink-0 items-center gap-2 border-b border-[var(--border)] px-3 py-1.5",children:[(0,l.jsx)(ce.A,{className:"h-3.5 w-3.5 shrink-0 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"truncate text-xs font-medium text-[var(--foreground)]",children:null!=(r=null==d?void 0:d.branch)?r:"—"}),d&&(d.ahead>0||d.behind>0)&&(0,l.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-[var(--muted-foreground)]",children:[d.behind>0&&(0,l.jsxs)("span",{className:"flex items-center",children:[(0,l.jsx)(cn.A,{className:"h-3 w-3"}),d.behind]}),d.ahead>0&&(0,l.jsxs)("span",{className:"flex items-center",children:[(0,l.jsx)(lH.A,{className:"h-3 w-3"}),d.ahead]})]}),(0,l.jsx)("div",{className:"flex-1"}),ee&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{onClick:()=>void J(()=>u.F.git.pull(a)),disabled:w,title:n("sc.pull"),className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] disabled:opacity-40",children:(0,l.jsx)(cn.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("button",{onClick:()=>void J(()=>u.F.git.push(a)),disabled:w,title:n("sc.push"),className:"rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] disabled:opacity-40",children:(0,l.jsx)(lH.A,{className:"h-3.5 w-3.5"})})]})]}),!ee&&"changes"===_&&(0,l.jsxs)("div",{className:"flex shrink-0 flex-col gap-1.5 border-b border-[var(--border)] p-2",children:[(0,l.jsxs)("div",{className:"flex items-center gap-1.5 text-[11px] text-[var(--muted-foreground)]",children:[(0,l.jsx)(lV.A,{className:"h-3.5 w-3.5 shrink-0"}),(0,l.jsx)("span",{children:n("sc.addRemoteDesc")})]}),(0,l.jsx)("input",{type:"text",value:B,onChange:e=>W(e.target.value),onKeyDown:e=>{"Enter"===e.key&&B.trim()&&X()},placeholder:n("sc.remotePlaceholder"),autoComplete:"off",className:"rounded border border-[var(--border)] bg-[var(--secondary)] px-2 py-1.5 font-mono text-[11px] text-[var(--foreground)] placeholder-[var(--muted-foreground)] outline-none focus:border-[var(--primary)]"}),(0,l.jsxs)("button",{onClick:X,disabled:w||!B.trim(),className:"flex items-center justify-center gap-1.5 rounded bg-[var(--primary)] px-2 py-1 text-xs font-medium text-[var(--primary-foreground)] hover:opacity-90 disabled:opacity-40",children:[(0,l.jsx)(lV.A,{className:"h-3.5 w-3.5"})," ",n(w?"sc.adding":"sc.addRemote")]})]}),"changes"===_&&(0,l.jsxs)("div",{className:"flex shrink-0 flex-col gap-1.5 border-b border-[var(--border)] p-2",children:[(0,l.jsx)("textarea",{value:b,onChange:e=>j(e.target.value),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"Enter"===e.key&&(e.preventDefault(),Q())},placeholder:n("sc.commitPlaceholder"),rows:2,className:"resize-none rounded border border-[var(--border)] bg-[var(--secondary)] px-2 py-1.5 text-xs text-[var(--foreground)] placeholder-[var(--muted-foreground)] outline-none focus:border-[var(--primary)]"}),(0,l.jsxs)("button",{onClick:()=>void Q(),disabled:w||!b.trim()||0===q.length,className:"flex items-center justify-center gap-1.5 rounded bg-[var(--primary)] px-2 py-1 text-xs font-medium text-[var(--primary-foreground)] hover:opacity-90 disabled:opacity-40",children:[(0,l.jsx)(rg.A,{className:"h-3.5 w-3.5"})," ",n("sc.commit")]})]}),C&&(0,l.jsxs)("div",{className:"shrink-0 border-b border-[var(--border)] bg-red-500/10 px-3 py-2 text-[11px] text-red-400",children:[cg(C)?n("sc.authError"):C,cg(C)&&(0,l.jsx)("button",{onClick:()=>T(!0),className:"ml-1 underline hover:text-red-300",children:n("sc.openCreds")})]}),(0,l.jsx)("div",{className:"flex-1 overflow-y-auto",children:"graph"===_?(0,l.jsx)(cv,{projectId:a}):f?(0,l.jsx)("div",{className:"px-3 py-4 text-xs text-red-400",children:f}):0===G.length?(0,l.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:n("sc.clean")}):(0,l.jsxs)(l.Fragment,{children:[q.length>0&&(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"group flex items-center gap-1 px-2 py-1",children:[(0,l.jsxs)("button",{onClick:()=>P(e=>!e),className:"flex flex-1 items-center gap-1 text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:[D?(0,l.jsx)(F.A,{className:"h-3.5 w-3.5"}):(0,l.jsx)(M.A,{className:"h-3.5 w-3.5"}),n("sc.staged")]}),(0,l.jsx)("button",{onClick:()=>Y(q.map(e=>e.path)),title:n("sc.unstageAll"),className:"hidden rounded p-0.5 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] group-hover:block",children:(0,l.jsx)(ca.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("span",{className:"rounded bg-[var(--secondary)] px-1.5 text-[10px] text-[var(--muted-foreground)]",children:q.length})]}),!D&&(0,l.jsx)(cl,{files:q,group:"staged",selectedPath:(null==s?void 0:s.staged)?s.path:null,onSelect:e=>Z(e,!0),onAction:Y})]}),$.length>0&&(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"group flex items-center gap-1 px-2 py-1",children:[(0,l.jsxs)("button",{onClick:()=>R(e=>!e),className:"flex flex-1 items-center gap-1 text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:[L?(0,l.jsx)(F.A,{className:"h-3.5 w-3.5"}):(0,l.jsx)(M.A,{className:"h-3.5 w-3.5"}),n("sc.changes")]}),(0,l.jsx)("button",{onClick:()=>V($.map(e=>e.path)),title:n("sc.stageAll"),className:"hidden rounded p-0.5 text-[var(--muted-foreground)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] group-hover:block",children:(0,l.jsx)(s8.A,{className:"h-3.5 w-3.5"})}),(0,l.jsx)("span",{className:"rounded bg-[var(--secondary)] px-1.5 text-[10px] text-[var(--muted-foreground)]",children:$.length})]}),!L&&(0,l.jsx)(cl,{files:$,group:"changes",selectedPath:s&&!s.staged?s.path:null,onSelect:e=>Z(e,!1),onAction:V})]})]})}),E&&(0,l.jsx)(cc,{projectId:a,onClose:()=>T(!1),onSaved:()=>{}})]}):(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center bg-[var(--background)] p-6 text-center",children:[(0,l.jsx)(ce.A,{className:"h-8 w-8 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"mt-2 text-xs text-[var(--muted-foreground)]",children:n("sc.noWorkspace")})]})}var cy=r(34016);function cj(){let e=(0,eZ.kj)(),t=rA(e=>{var t,r;return null!=(r=null==(t=e.activeProject)?void 0:t.id)?r:null}),r=cs(e=>e.selected),[n,a]=(0,o.useState)(null),[s,i]=(0,o.useState)(!1),[c,d]=(0,o.useState)(null);return((0,o.useEffect)(()=>{if(!t||!r)return void a(null);let e=!1;return i(!0),d(null),u.F.git.diff(t,r.path,r.staged,r.from,r.commit).then(t=>{e||a({original:t.original,modified:t.modified,path:r.path})}).catch(t=>{e||d(t instanceof Error?t.message:String(t))}).finally(()=>{e||i(!1)}),()=>{e=!0}},[t,r]),r)?(0,l.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,l.jsxs)("div",{className:"flex h-9 shrink-0 items-center gap-2 border-b border-[var(--border)] px-3",children:[(0,l.jsx)(cy.A,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"}),(0,l.jsx)("span",{className:"truncate text-xs text-[var(--foreground)]",children:r.path}),(0,l.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:r.commit?"(".concat(r.commit.slice(0,7),")"):e(r.staged?"sc.diffStaged":"sc.diffWorking")})]}),(0,l.jsx)("div",{className:"flex-1 overflow-hidden",children:s?(0,l.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:e("sc.loadingDiff")}):c?(0,l.jsx)("div",{className:"px-4 py-3 text-xs text-red-400",children:c}):n?(0,l.jsx)(tj,{original:n.original,modified:n.modified,path:n.path}):null})]}):(0,l.jsxs)("div",{className:"flex h-full flex-col items-center justify-center bg-[var(--background)] text-center",children:[(0,l.jsx)(cy.A,{className:"h-10 w-10 text-[var(--muted-foreground)]"}),(0,l.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:e("sc.selectFile")})]})}var cw=r(6023),cN=r(83599),ck=r(62803),cS=r(28109),cC=r(81208);function cA(e){let{expanded:t,title:r,desc:n}=e;return(0,l.jsxs)("span",{className:(0,I.cn)("min-w-0 flex-1 whitespace-nowrap pr-3 text-left transition-opacity duration-150 ease-out motion-reduce:transition-none",t?"opacity-100":"opacity-0"),children:[(0,l.jsx)("span",{className:"block truncate text-sm leading-5 text-[var(--foreground)]",children:r}),(0,l.jsx)("span",{className:"block truncate text-[11px] leading-4 text-[var(--muted-foreground)]",children:n})]})}let cI="text-[var(--muted-foreground)]/40",cE={fresh:"text-emerald-400",stale:"text-amber-400 animate-pulse",down:"text-[var(--destructive)]"};function cT(e){return window[e]}function cM(e){let[t,r]=(0,o.useState)(!1);(0,o.useEffect)(()=>{let t=cT(e);t&&t.get().then(r)},[e]);let n=(0,o.useCallback)(()=>{let t=cT(e);t&&t.toggle().then(r)},[e]);return{available:!!cT(e),on:t,toggle:n}}function cF(e){let{items:t,expanded:r=!1,onOpenChange:n}=e,a=(0,eZ.kj)(),[s,i]=(0,o.useState)(!1);(0,o.useEffect)(()=>{null==n||n(s)},[s,n]);let c=(0,o.useRef)(null),d=t.filter(e=>e.available),u=d.some(e=>e.alert);(0,o.useEffect)(()=>{if(!s)return;let e=e=>{var t;(null==(t=c.current)?void 0:t.contains(e.target))||i(!1)},t=e=>{"Escape"===e.key&&i(!1)};return document.addEventListener("mousedown",e),window.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),window.removeEventListener("keydown",t)}},[s]);let m=e=>"string"==typeof e.state?e.state:a(e.state?"quick.on":"quick.off"),p="".concat(a("quick.title")," — ").concat(d.map(e=>"".concat(e.label," ").concat(m(e))).join(" \xb7 "));return(0,l.jsxs)("div",{ref:c,className:"relative w-full",children:[(0,l.jsxs)("button",{onClick:()=>i(e=>!e),title:p,"aria-expanded":s,className:(0,I.cn)("flex h-12 w-full items-center overflow-hidden transition-colors",u?"text-[var(--destructive)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]",s&&"bg-[var(--secondary)]"),children:[(0,l.jsxs)("span",{className:"flex w-12 shrink-0 flex-col items-center justify-center gap-1",children:[(0,l.jsx)(K.A,{className:"h-5 w-5"}),(0,l.jsx)("span",{className:"flex h-[3px] w-[30px] gap-[2px]",children:d.map(e=>(0,l.jsx)("span",{"data-segment":e.id,className:(0,I.cn)("flex-1 rounded-full bg-current",e.color)},e.id))})]}),(0,l.jsx)(cA,{expanded:r,title:a("quick.title"),desc:a("nav.desc.quick")})]}),s&&(0,l.jsxs)("div",{className:"absolute bottom-0 left-full z-[60] ml-1 w-[260px] rounded-lg border border-[var(--border)] bg-[var(--background)] py-1 shadow-lg",children:[(0,l.jsx)("div",{className:"px-3 py-1.5 text-[10px] font-medium uppercase tracking-wider text-[var(--muted-foreground)]",children:a("quick.panelTitle")}),d.map((e,t)=>{let r=e.icon,n=(0,l.jsxs)("div",{className:"min-w-0 flex-1 text-left",children:[(0,l.jsx)("div",{className:"truncate text-xs text-[var(--foreground)]",children:e.title}),(0,l.jsx)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:e.subtitle})]}),a=t>0&&e.onToggle&&!d[t-1].onToggle?(0,l.jsx)("div",{className:"my-1 border-t border-[var(--border)]"}):null;if(!e.onToggle)return(0,l.jsxs)("div",{"data-row":e.id,className:"flex items-center gap-3 px-3 py-2",children:[(0,l.jsx)(r,{className:(0,I.cn)("h-4 w-4 shrink-0",e.color)}),n,(0,l.jsx)("span",{className:(0,I.cn)("shrink-0 text-[11px]",e.color),children:m(e)})]},e.id);let s=!0===e.state,o=s?l0.A:lX.A;return(0,l.jsxs)("div",{children:[a,(0,l.jsxs)("button",{"data-row":e.id,role:"switch","aria-checked":s,onClick:e.onToggle,className:"flex w-full items-center gap-3 px-3 py-2 transition-colors hover:bg-[var(--secondary)]",children:[(0,l.jsx)(r,{className:"h-4 w-4 shrink-0 text-[var(--muted-foreground)]"}),n,(0,l.jsx)(o,{className:(0,I.cn)("h-5 w-5 shrink-0",s?e.color:"text-[var(--muted-foreground)]")})]})]},e.id)})]})]})}let cD=null;function cP(){return cD?"[".concat(cD,"] "):""}let cL=["explorer","source-control","sessions","skills","channels","evolution","cron"],cR=null;function c_(e){var t,r;let{linkState:n}=e,{t:a,lang:s}=(0,eZ.s9)(),m=rA(e=>e.activeProject),f=rA(e=>e.openFolder),v=nk(e=>e.isStreaming),[g,b]=(0,o.useState)(()=>localStorage.getItem("halo_sidebar_tab")||"explorer"),[j,w]=(0,o.useState)(()=>"false"!==localStorage.getItem("halo_sidebar_open")),[N,C]=(0,o.useState)("sessions"===g);"sessions"!==g||N||C(!0);let[E,T]=(0,o.useState)(""),[M,F]=(0,o.useState)(!1),{items:D,notifyOnFinish:P}=function(e){let t=(0,eZ.kj)(),r=cM("haloPin"),n=cM("haloAwake"),a=!!window.haloNotify||"Notification"in window,[s,l]=(0,o.useState)(()=>"true"===localStorage.getItem("halo_notify_on_finish")),i=(0,o.useCallback)(async()=>{let e=!!window.haloNotify;if(!s&&!e&&"Notification"in window){let e=Notification.permission;if("default"===e&&(e=await Notification.requestPermission()),"granted"!==e)return}l(e=>{let t=!e;try{localStorage.setItem("halo_notify_on_finish",String(t))}catch(e){}return t})},[s]);return{items:[{id:"network",icon:"down"===e?cw.A:cN.A,label:t("quick.network"),title:t("quick.networkTitle"),subtitle:t("quick.networkSub"),state:t("link.".concat(e)),color:cE[e],available:!0,alert:"down"===e},{id:"notify",icon:ck.A,label:t("quick.notify"),title:t("quick.notifyTitle"),subtitle:t("quick.notifySub"),state:s,color:s?"text-[var(--primary)]":cI,onToggle:()=>{i()},available:a},{id:"pin",icon:cS.A,label:t("quick.pin"),title:t("quick.pinTitle"),subtitle:t("quick.pinSub"),state:r.on,color:r.on?"text-[var(--primary)]":cI,onToggle:r.toggle,available:r.available},{id:"awake",icon:cC.A,label:t("quick.awake"),title:t("quick.awakeTitle"),subtitle:t("quick.awakeSub"),state:n.on,color:n.on?"text-amber-400":cI,onToggle:n.toggle,available:n.available}],notifyOnFinish:s}}(n),[L,R]=(0,o.useState)(!1),_=lt(L),z=_.close;(0,o.useEffect)(()=>{if(!_.open)return;let e=e=>{"Escape"===e.key&&z()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[_.open,z]),(0,o.useEffect)(()=>{let e=null==m?void 0:m.name;document.title=cP()+(e?"".concat(v?"● ":"","Halo — ").concat(e):"Halo")},[v,null==m?void 0:m.name]);let O=t0(),[U,B]=(0,o.useState)(null);!O&&U&&B(null),(0,o.useEffect)(()=>{if(!U)return;let e=setTimeout(()=>B(null),8e3);return()=>clearTimeout(e)},[U]),(0,o.useEffect)(()=>{if(P){var e;return e=e=>{!function(){try{let e=window.AudioContext||window.webkitAudioContext;if(!e)return;cR||(cR=new e);let t=cR;t.resume();let r=t.currentTime;[[880,0],[1174.66,.15]].forEach(e=>{let[n,a]=e,s=t.createOscillator(),l=t.createGain();s.type="sine",s.frequency.value=n,l.gain.setValueAtTime(1e-4,r+a),l.gain.exponentialRampToValueAtTime(.2,r+a+.02),l.gain.exponentialRampToValueAtTime(1e-4,r+a+.35),s.connect(l).connect(t.destination),s.start(r+a),s.stop(r+a+.4)})}catch(e){}}();let t=e.getState().sessionId,r=t?ln.get(t):void 0;if(t&&tX()&&B(e=>{var n;return{sessionIds:[t,...(null!=(n=null==e?void 0:e.sessionIds)?n:[]).filter(e=>e!==t)],title:r}}),document.hasFocus())return;let n=null==m?void 0:m.name,s=n?"Halo — ".concat(n):"Halo",l=r?a("status.notifyBodySession",{title:r}):a("status.notifyBody"),o=window.haloNotify;if(o)o.notify({title:s,body:l});else if("Notification"in window&&"granted"===Notification.permission){let e=new Notification(s,{body:l});e.onclick=()=>{window.focus(),e.close()}}},nh.add(e),()=>{nh.delete(e)}}},[P,null==m?void 0:m.name,a]),(0,o.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get("folder"),t=async(e,t)=>{try{let n=await u.F.fs.resolveWorkspace(e);f(n.path,n.id),T(n.path),h(n.path);try{localStorage.setItem("halo_last_folder",n.path)}catch(e){}var r=n.path;let a=lq().filter(e=>e!==r);if(a.unshift(r),l$(a.slice(0,8)),t||n.path!==e){let e=new URL(window.location.href);e.searchParams.set("folder",n.path),window.history.replaceState({},"",e.toString())}}catch(e){return console.error("[Workspace] Failed to resolve workspace:",e),!1}return!0};if(e)t(e,!1);else{let e=(()=>{try{return localStorage.getItem("halo_last_folder")}catch(e){return null}})(),r=()=>u.F.fs.home().then(e=>{let{home:r}=e;return t(r,!0)}).catch(e=>{console.error("[Workspace] Failed to resolve home dir:",e)});e?t(e,!0).then(e=>{e||r()}):r()}},[]);let[W,H]=(0,o.useState)(!1);(0,o.useEffect)(()=>{ep().then(()=>H(!0))},[]);let K=(0,o.useRef)(!1);(0,o.useEffect)(()=>{function e(e){K.current||("web"===ev()||0!==d.Uw.getState().modifiedPaths.size)&&e.preventDefault()}return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[]);let G=(0,o.useCallback)(()=>{let e=d.Uw.getState(),t=e.activeTab;if(!t)return!1;let r=e.tabs.find(e=>e.path===t);return(async()=>{(null==r||!r.modified||await (0,I.fN)('"'.concat(r.path.split("/").pop(),'" has unsaved changes. Close anyway?')))&&e.closeTab(t)})(),!0},[]);(0,o.useEffect)(()=>{function e(e){if((e.metaKey||e.ctrlKey)&&"p"===e.key&&(e.preventDefault(),F(e=>!e)),(e.metaKey||e.ctrlKey)&&"`"===e.key){e.preventDefault();let t=d.Uw.getState();t.setBottomTab("terminal"===t.bottomTab?"chat":"terminal")}!e.altKey||"KeyW"!==e.code||e.metaKey||e.ctrlKey||(e.preventDefault(),G())}return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[G]),(0,o.useEffect)(()=>{let e=window.haloCloseShortcut;e&&e.onTrigger(()=>{G()||e.closeWindow()})},[G]),(0,o.useEffect)(()=>{function e(e){if("Escape"!==e.key||!d.Uw.getState().maximized)return;let t=document.activeElement;if(t){let e=t.tagName;if("INPUT"===e||"TEXTAREA"===e||t.isContentEditable||t.closest(".monaco-editor"))return}M||d.Uw.getState().setMaximized(!1)}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[M]),(0,o.useEffect)(()=>{let e=e=>{let t=e.detail;if(!(null==t?void 0:t.tab))return;let{bottomFloating:r}=d.Uw.getState();r&&"explorer"===t.tab||(b(t.tab),w(!0))};return window.addEventListener("halo:navigate",e),()=>window.removeEventListener("halo:navigate",e)},[]),(0,o.useEffect)(()=>{let e=e=>{var t;let r=null==(t=e.detail)?void 0:t.path;r&&$(r)};return window.addEventListener("halo:open-workspace",e),()=>window.removeEventListener("halo:open-workspace",e)},[]),(0,o.useEffect)(()=>{localStorage.setItem("halo_sidebar_tab",g),localStorage.setItem("halo_sidebar_open",String(j))},[g,j]);let q=(0,o.useRef)(!1);async function $(e){let t=e.trim();if(!t||q.current)return;q.current=!0;try{let e=await u.F.fs.exists(t);if(!e.exists||!e.isDirectory){window.alert("Workspace not found: ".concat(t)),q.current=!1;return}}catch(e){window.alert(e instanceof Error?e.message:"Failed to validate path"),q.current=!1;return}let r=d.Uw.getState().tabs.filter(e=>e.modified);if(r.length>0){let e=r.map(e=>e.path.split("/").pop()).join(", ");if(!await (0,I.fN)("Unsaved changes in ".concat(e," will be lost. Switch workspace anyway?"))){q.current=!1;return}}K.current=!0;try{localStorage.setItem("halo_last_folder",t)}catch(e){}let n=new URL(window.location.href);n.searchParams.set("folder",t),window.location.href=n.toString()}let J=(0,o.useCallback)(async e=>{let t=null==m?void 0:m.id;if(t){if(d.Uw.getState().tabs.find(t=>t.path===e))return void d.Uw.getState().setActiveTab(e);try{let r=await u.F.files.read(e,t),n=(0,I.sQ)(e);d.Uw.getState().openFile(e,r.content,n)}catch(e){console.error("[QuickOpen] Failed to read file:",e)}}},[m]),Z=[{id:"explorer",icon:lJ.A,label:a("nav.explorer")},{id:"sessions",icon:ac.A,label:a("nav.sessions")},{id:"source-control",icon:ce.A,label:a("nav.sourceControl")},{id:"management",icon:au.A,label:"Agents"},{id:"skills",icon:lQ.A,label:"Skills"},{id:"channels",icon:o8.A,label:a("nav.channels")},{id:"evolution",icon:sl.A,label:"Evolution"},{id:"cron",icon:i0.A,label:"Cron"},{id:"settings",icon:oC.A,label:a("nav.settings"),position:"bottom"}].map(e=>{let{icon:t,...r}=e;return{...r,icon:(0,l.jsx)(t,{className:"h-5 w-5"}),desc:a("nav.desc.".concat(r.id))}}),V=ec(),Y=(0,o.useMemo)(()=>en.extensions.filter(e=>e.activity&&eb(e)).sort((e,t)=>e.activity.order-t.activity.order||e.id.localeCompare(t.id)),[V]),Q=Y.map(e=>({id:rG(e.id),icon:(0,l.jsx)(r$,{info:e}),label:rH(e,s),desc:function(e,t){var r,n,a;let s=e.activity;return null!=(a=null!=(n=null!=(r="zh"===t?null==s?void 0:s.description_zh:void 0)?r:null==s?void 0:s.description)?n:e.description)?a:""}(e,s)})),X=rq(g)?Y.find(e=>rG(e.id)===g):void 0,ee=null!=(t=null==m?void 0:m.id)?t:null;(0,o.useEffect)(()=>{if(!ee)return;let{setForProject:e,clearProject:t,setRepoStatus:r,clearRepoStatus:n}=A.getState(),a=!1;async function s(){try{let[n,s]=await Promise.all([u.F.git.status(ee),u.F.git.ignored(ee)]);if(!1===n.isRepo){a||(t(ee),r(ee,!1));return}a||(e(ee,function(e,t){let r=new Map,n=new Map;for(let t of e){var a,s;let e=(a=t.index,S(s=t.workingDir)?"?"===s?"?":s:k(a)?a:"");if(!e)continue;r.set(t.path,e);let l=t.path.split("/");for(let t=0;t<l.length-1;t++){let r=l.slice(0,t+1).join("/"),a=n.get(r);void 0===a?n.set(r,e):a!==e&&"*"!==a&&n.set(r,"*")}}return{files:r,dirs:n,ignored:new Set(t)}}(n.files,s.ignored)),r(ee,!0))}catch(e){a||(t(ee),r(ee,!1))}}s();let l=null,o=p.on("file:changed",e=>{y(e)||(l&&clearTimeout(l),l=setTimeout(()=>{s()},400))}),i=x(p,()=>{s()});return()=>{a=!0,l&&clearTimeout(l),o(),i(),t(ee),n(ee)}},[ee]);let et=A(e=>{var t;return null!=(t=ee?e.repoStatus[ee]:void 0)?t:"unknown"}),er=Z.filter(e=>"bottom"!==e.position).filter(e=>"source-control"!==e.id||!1!==et),ea=Z.filter(e=>"bottom"===e.position),es=(0,d.Uw)(e=>e.maximized),el=(0,d.Uw)(e=>e.bottomFloating),eo=(0,d.Uw)(e=>e.bottomMaximized),ei=j&&!es,ed=cL.includes(g)&&j&&"explorer"!==g,eu="explorer"===g;(0,o.useEffect)(()=>{!1===et&&"source-control"===g&&b("explorer")},[et,g]),(0,o.useEffect)(()=>{W&&rq(g)&&!X&&b("explorer")},[W,g,X]);let[em]=(0,o.useState)(()=>{if("undefined"==typeof document)return null;let e=document.createElement("div");return e.className="h-full",e}),ex=(0,o.useRef)(null),[ef,eh]=(0,o.useState)(null),[eg,ey]=(0,o.useState)(null),[ej,ew]=(0,o.useState)(null),eN=el?ej:eo?eg:ef;(0,o.useLayoutEffect)(()=>{em&&eN&&em.parentElement!==eN&&eN.appendChild(em)},[em,eN]);let ek=e=>{let t=g===e.id;return(0,l.jsxs)("button",{onClick:()=>{var t;t=e.id,d.Uw.getState().maximized&&d.Uw.getState().setMaximized(!1),g===t&&j?w(!1):(b(t),w(!0)),_.close()},"aria-label":e.label,className:(0,I.cn)("relative flex h-12 w-full shrink-0 items-center overflow-hidden transition-colors hover:text-[var(--foreground)]",t?"text-[var(--foreground)]":"text-[var(--muted-foreground)]"),children:[t&&(0,l.jsx)("div",{className:"absolute left-0 top-1/2 h-6 w-0.5 -translate-y-1/2 rounded-r bg-[var(--primary)]"}),(0,l.jsx)("span",{className:"flex w-12 shrink-0 justify-center",children:e.icon}),(0,l.jsx)(cA,{expanded:_.open,title:e.label,desc:e.desc})]},e.id)};return(0,l.jsxs)("div",{className:"flex h-full",children:[(0,l.jsx)("div",{className:(0,I.cn)("relative w-12 shrink-0",es&&"hidden"),children:(0,l.jsxs)("div",{..._.bind,className:(0,I.cn)("absolute inset-y-0 left-0 flex flex-col border-r border-[var(--border)] bg-[var(--card)] py-2 transition-[width,box-shadow] duration-150 ease-out motion-reduce:transition-none",_.open?"w-60 shadow-[6px_0_16px_-6px_rgba(0,0,0,0.35)]":"w-12",L?"z-[60]":"z-[45]"),children:[(0,l.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto overflow-x-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:[er.map(ek),Q.map(ek)]}),ea.map(ek),(0,l.jsx)(cF,{items:D,expanded:_.open,onOpenChange:R})]})}),(0,l.jsx)("div",{className:(0,I.cn)("flex min-w-0 flex-1",!eu&&"hidden",es&&"fixed inset-0 z-40 bg-[var(--background)]"),children:(0,l.jsx)(cz,{showSidebar:ei,sidebar:(0,l.jsx)(lY,{projectId:ee,pathInput:E,onPathInputChange:T,onOpenFolder:function(){$(E)},onOpenPath:$,activeProject:m}),main:(0,l.jsx)(cO,{projectId:ee,showBottom:!el&&!es,bottomSlotRef:eh})})}),N&&(0,l.jsx)("div",{className:(0,I.cn)("flex min-w-0 flex-1",("sessions"!==g||es)&&"hidden"),children:(0,l.jsx)(cz,{autoSaveId:"halo-h-sessions",showSidebar:j,sidebar:(0,l.jsx)(ab,{}),main:(0,l.jsx)(oS,{visible:"sessions"===g&&!es})})}),!eu&&"sessions"!==g&&!es&&(ed?(0,l.jsxs)(c.YZ,{direction:"horizontal",autoSaveId:"halo-h-sidebar",className:"flex-1",children:[(0,l.jsx)(c.Zk,{defaultSize:22,minSize:15,maxSize:40,children:(0,l.jsxs)("div",{className:"h-full overflow-hidden",children:["source-control"===g&&(0,l.jsx)(cb,{}),"skills"===g&&(0,l.jsx)(l8,{}),"channels"===g&&(0,l.jsx)(i_,{}),"evolution"===g&&(0,l.jsx)(iZ,{}),"cron"===g&&(0,l.jsx)(i7,{})]})}),(0,l.jsx)(c.TW,{className:"w-px bg-[var(--border)] hover:w-1 hover:bg-[var(--primary)] transition-colors"}),(0,l.jsx)(c.Zk,{defaultSize:78,minSize:40,children:(0,l.jsx)(cU,{activeTab:g})})]}):(0,l.jsx)("div",{className:"flex-1 min-w-0 overflow-hidden",children:X?(0,l.jsx)(rJ,{info:X},"".concat(X.id,"@").concat(X.version)):(0,l.jsx)(cU,{activeTab:g})})),M&&(0,l.jsx)(lW,{onSelect:J,onClose:()=>F(!1)}),el&&(0,l.jsx)("div",{className:O?"hidden":"contents",children:(0,l.jsx)(lO,{slotRef:ew,dragHandleRef:ex})}),O&&U&&(0,l.jsxs)("div",{role:"status",onMouseDown:e=>e.preventDefault(),className:"fixed right-4 top-14 z-[80] flex max-w-[360px] items-center gap-3 rounded-lg border border-[var(--border)] bg-[var(--card)] px-3 py-2 text-xs text-[var(--foreground)] shadow-lg",children:[(0,l.jsx)("span",{className:"min-w-0 flex-1 truncate",children:U.sessionIds.length>1?a("editor.immersive.repliedMany",{count:U.sessionIds.length}):a("editor.immersive.replied",{title:null!=(r=U.title)?r:a("chat.tabs.untitled")})}),(0,l.jsx)("button",{type:"button",onClick:()=>{var e;return e=U.sessionIds[0],void(B(null),t5({refocus:!1}),nH(e),d.Uw.getState().setBottomTab("chat"),requestAnimationFrame(()=>window.dispatchEvent(new CustomEvent("halo:focus-chat-input"))))},className:"shrink-0 font-medium text-[var(--primary)] hover:underline",children:a("editor.immersive.backToChat")})]}),eo&&!el&&(0,l.jsx)("div",{ref:ey,className:"fixed inset-0 z-50 bg-[var(--background)]"}),em&&(0,i.createPortal)((0,l.jsx)(l_,{floating:el,dragHandleRef:ex}),em)]})}function cz(e){let{showSidebar:t,sidebar:r,main:n,autoSaveId:a="halo-h-sidebar"}=e,s=(0,o.useRef)(null),i=(0,o.useRef)([22,78]);return(0,o.useEffect)(()=>{let e=s.current;if(e)if(t)e.setLayout(i.current);else{let t=e.getLayout();t[0]>0&&(i.current=t),e.setLayout([0,100])}},[t]),(0,l.jsxs)(c.YZ,{ref:s,direction:"horizontal",autoSaveId:a,className:"flex-1",children:[(0,l.jsx)(c.Zk,{defaultSize:22,minSize:0,maxSize:40,collapsible:!0,children:(0,l.jsx)("div",{className:(0,I.cn)("h-full overflow-hidden",!t&&"hidden"),children:r})}),(0,l.jsx)(c.TW,{className:(0,I.cn)("w-px bg-[var(--border)] hover:w-1 hover:bg-[var(--primary)] transition-colors",!t&&"pointer-events-none opacity-0")}),(0,l.jsx)(c.Zk,{defaultSize:78,minSize:40,children:n})]})}function cO(e){let{projectId:t,showBottom:r,bottomSlotRef:n}=e,a=(0,o.useRef)(null),s=(0,o.useRef)([65,35]);return(0,o.useEffect)(()=>{let e=a.current;if(e)if(r)e.setLayout(s.current);else{let t=e.getLayout();t[1]>0&&(s.current=t),e.setLayout([100,0])}},[r]),(0,l.jsxs)(c.YZ,{ref:a,direction:"vertical",autoSaveId:"halo-v-editor",className:"h-full",children:[(0,l.jsx)(c.Zk,{defaultSize:65,minSize:20,children:(0,l.jsx)(r_,{projectId:t,mode:"editor-only"})}),(0,l.jsx)(c.TW,{className:(0,I.cn)("h-px bg-[var(--border)] hover:h-1 hover:bg-[var(--primary)] transition-colors",!r&&"pointer-events-none opacity-0")}),(0,l.jsx)(c.Zk,{defaultSize:35,minSize:0,collapsible:!0,children:(0,l.jsx)("div",{ref:n,className:(0,I.cn)("h-full",!r&&"hidden")})})]})}function cU(e){let{activeTab:t}=e;return"source-control"===t?(0,l.jsx)(cj,{}):"management"===t?(0,l.jsx)(og,{}):"skills"===t?(0,l.jsx)(oy,{}):"channels"===t?(0,l.jsx)(iz,{}):"evolution"===t?(0,l.jsx)(iH,{}):"cron"===t?(0,l.jsx)(i5,{}):"settings"===t?(0,l.jsx)(oq,{}):null}var cB=r(45966),cW=r(42883);let cH=/<<<SHOW:([\s\S]*?)>>>/g,cK="[Face snapshot]",cG=null;async function cq(e,t,r){let n=t.getState(),a=n.screenSource,s=n.cameraSource,l=a?aO():void 0,o=s?aU():void 0,i=[];l&&i.push("screen"),o&&i.push("camera");let c=function(e,t){let r=new Set,n=!1;for(let a of e)for(let e of a.content.matchAll(ay))if(n=!0,e[1])r.add(e[1]);else for(let e of t)r.add(e);if(!n)return[];let a=t.filter(e=>r.has(e));return a.length>0?a:t}(r,i);if(0===c.length)return;let d=rA.getState().activeProject,u=n.sessionId;if(!d||!u)return;let m=(0,I.$C)(),p="undefined"!=typeof localStorage&&"zh"===localStorage.getItem("halo_lang")?cW.zh:cB.en,x="image/jpeg",f=await Promise.all(c.map(async e=>{let t="camera"===e?s:a,r=null;try{r="camera"===e?await o.snap(t.id||void 0):await l.grab(t.id)}catch(e){r=null}return r?{base64:r,note:"[\uD83D\uDCF7 ".concat(t.name,"]"),msg:"camera"===e?"[Photo from the camera]":'[Screenshot of "'.concat(t.name,'"]')}:{base64:null,note:p["camera"===e?"capture.cameraFailNote":(null==l?void 0:l.web)?"capture.webFailNote":"capture.failNote"].replace("{name}",t.name),msg:"camera"===e?"[Could not take a photo from the camera — it may be in use by another app, or camera permission was revoked. Ask the user to check, then request the capture again.]":(null==l?void 0:l.web)?"[Could not capture the shared screen — sharing may have stopped, or the shared window is minimized. Ask the user to check, then request the capture again.]":'[Could not capture "'.concat(t.name,'" — it was likely occluded/minimized long enough that macOS purged its rendered frame (came back blank/black). Ask the user to briefly bring that window to the foreground, then request the capture again.]')}})),h=f.flatMap(e=>e.base64?[e.base64]:[]);n.addMessage({id:(0,I.$C)(),role:"user",content:f.map(e=>e.note).join("\n"),timestamp:Date.now(),clientMsgId:m,...h.length>0?{localImages:h.map(e=>"data:".concat(x,";base64,").concat(e))}:{}}),n.addMessage({id:(0,I.$C)(),role:"assistant",content:"",timestamp:Date.now(),streaming:!0});let v=n.selectedAgentId;e.send({type:"chat",sessionId:u,projectId:d.id,message:f.map(e=>e.msg).join("\n"),clientMsgId:m,..."default"!==v?{agentId:v}:{},...h.length>0?{images:h.map(e=>({data:e,mimeType:x}))}:{}})}function c$(e){let{onSuccess:t}=e,[r,n]=(0,o.useState)(""),[a,s]=(0,o.useState)(""),[i,c]=(0,o.useState)(!1),d=(0,o.useCallback)(async e=>{if(e.preventDefault(),r.trim()){c(!0),s("");try{(await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:r.trim()}),credentials:"include"})).ok?t():(s("Incorrect password"),n(""))}catch(e){s("Connection failed")}finally{c(!1)}}},[r,t]);return(0,l.jsx)("div",{className:"flex h-screen w-screen items-center justify-center bg-[var(--background)]",children:(0,l.jsxs)("div",{className:"w-full max-w-sm px-6",children:[(0,l.jsxs)("div",{className:"text-center",children:[(0,l.jsx)("div",{className:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-[var(--secondary)]",children:(0,l.jsx)(ci.A,{className:"h-7 w-7 text-[var(--foreground)]"})}),(0,l.jsx)("h1",{className:"text-xl font-semibold text-[var(--foreground)]",children:"Halo"}),(0,l.jsx)("p",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:"Enter password to access workspace"})]}),(0,l.jsxs)("form",{onSubmit:d,className:"mt-8",children:[(0,l.jsx)("input",{type:"password",value:r,onChange:e=>n(e.target.value),placeholder:"Password",autoFocus:!0,className:"w-full rounded-md border border-[var(--border)] bg-[var(--secondary)] px-3 py-2.5 text-sm text-[var(--foreground)] placeholder-[var(--muted-foreground)] outline-none focus:border-[var(--primary)] focus:ring-1 focus:ring-[var(--primary)]"}),a&&(0,l.jsx)("p",{className:"mt-2 text-xs text-red-400",children:a}),(0,l.jsx)("button",{type:"submit",disabled:i||!r.trim(),className:"mt-4 w-full rounded-md bg-[var(--primary)] px-3 py-2.5 text-sm font-medium text-[var(--primary-foreground)] transition-colors hover:opacity-90 disabled:opacity-50",children:i?"Verifying...":"Login"})]})]})})}function cJ(){let{linkState:e}=function(){let[e,t]=(0,o.useState)(!1),[r,n]=(0,o.useState)("down"),a=(0,o.useRef)(!1);return(0,o.useEffect)(()=>{if(a.current)return;a.current=!0,p.connect();let e=[p.on("_connected",()=>{t(!0),n("fresh");let e=rA.getState().activeProject;(null==e?void 0:e.id)&&nF.getState().projectId===e.id&&p.send({type:"subscribe",sessionId:function(){var e;let{tabs:t,activeTabId:r}=nF.getState();for(let e of t)e.tabId!==r&&nV(e);return null!=(e=nw().getState().sessionId)?e:""}(),projectId:e.id})}),p.on("_disconnected",()=>{t(!1),n("down")}),function(e){var t;let r=[];r.push((tc=t=(t,r)=>(function(e,t,r){let n=rA.getState().activeProject,a=nw();if(cG&&cG!==a)return ti("snap skipped (tab switched)"),!1;let s=a.getState(),l=s.sessionId;if(!n||!l)return ti("snap skipped (no session)"),!1;let o=(0,I.$C)();s.addMessage({id:(0,I.$C)(),role:"user",content:cK,timestamp:Date.now(),clientMsgId:o,localImages:["data:".concat(r,";base64,").concat(t)]}),s.messages.some(e=>e.streaming&&"assistant"===e.role&&!e.taskId)||s.addMessage({id:(0,I.$C)(),role:"assistant",content:"",timestamp:Date.now(),streaming:!0});let i=s.selectedAgentId;return e.send({type:"chat",sessionId:l,projectId:n.id,message:cK,clientMsgId:o,..."default"!==i?{agentId:i}:{},images:[{data:t,mimeType:r}]}),!0})(e,t,r),()=>{tc===t&&(tc=null)})),r.push(e.on("_chat_send_failed",e=>{e.clientMsgId&&nb(t=>t.getState().markChatSendFailed(e.clientMsgId))})),r.push(e.on("_disconnected",()=>void(na=Date.now())));let n=setInterval(()=>{nb(e=>e.getState().convergeStaleStreaming())},5e3);r.push(()=>clearInterval(n)),r.push(e.on("chat:thinking",e=>{var t;null==(t=nZ(e.sessionId))||t.getState().appendThinking(e.text,e.agentName,void 0,e.turnId)})),r.push(e.on("chat:stream",e=>{var t;null==(t=nZ(e.sessionId))||t.getState().updateLastAssistant(e.text,e.agentName,void 0,e.turnId)})),r.push(e.on("chat:discard",e=>{var t;null==(t=nZ(e.sessionId))||t.getState().discardTurnText(e.turnId)})),r.push(e.on("chat:complete",t=>{let r=nZ(t.sessionId);if(!r)return;let n=r.getState();n.completeAgentStreaming(void 0,void 0,t.batchBoundary);let a=n.takeRoundReplies();if(r===nw()){cq(e,r,a),a.length>0&&(td=!1,cG=r);for(let e of a)for(let t of e.content.matchAll(cH)){let e=t[1].trim();e&&function(e){for(let r of tn)try{var t;null==(t=r.contentWindow)||t.postMessage({haloFace:e},"*")}catch(e){}}(e)}}})),r.push(e.on("chat:stopped",e=>{var t;null==(t=nZ(e.sessionId))||t.getState().completeAgentStreaming()})),r.push(e.on("error",e=>{var t,r;let n=null==(t=nZ(e.sessionId))?void 0:t.getState();if(!n)return;let a=e.code?null!=(r=e.error)?r:"":e.error?"Error: ".concat(e.error):"An unknown error occurred.";n.addMessage({id:(0,I.$C)(),role:"system",content:a,timestamp:Date.now(),agentName:e.agentName}),e.taskId||n.completeAgentStreaming(e.agentName)})),r.push(e.on("chat:followup",e=>{var t;let r=null==(t=nZ(e.sessionId))?void 0:t.getState();if(r){if(e.replay){let t=r.takeReplaySnapshot();t?r.setMessages(t):r.completeAgentStreaming(e.agentName)}else r.completeAgentStreaming(e.agentName);r.addMessage({id:(0,I.$C)(),role:"assistant",content:"",timestamp:Date.now(),streaming:!0,agentName:e.agentName})}})),r.push(e.on("chat:user",e=>{var t;null==(t=nZ(e.sessionId))||t.getState().addMessage({id:(0,I.$C)(),role:"user",content:e.text,timestamp:Date.now()})})),r.push(e.on("chat:usage",e=>{var t;let r=null==(t=nZ(e.sessionId,!1))?void 0:t.getState();r&&(r.setTokenUsage(e.contextTokens,e.outputTokens),e.usage&&r.addMessage({type:"usage",role:"system",content:"[Usage] in=".concat(e.usage.inputTokens," out=").concat(e.usage.outputTokens," cache=").concat(e.usage.cacheReadInputTokens),usage:e.usage,turnId:e.turnId,modelId:e.modelId}))})),r.push(e.on("session:switched",t=>{if(!t.sessionId)return;if(t.clientMsgId&&t.fromSessionId){var r;null==(r=nJ(t.fromSessionId))||r.getState().dropOptimisticSend(t.clientMsgId)}let n=nK(t.sessionId),a=rA.getState().activeProject;n&&a&&e.send({type:"subscribe",sessionId:n,projectId:a.id})})),r.push(e.on("session:compacted",e=>{var t,r;let n=nZ(e.sessionId);if(!n)return;let a=null!=(t=e.message)?t:"Context compacted",s=n.getState();s.setCompacting(!1),l(n),s.setTokenUsage(null!=(r=e.contextTokens)?r:0,s.outputTokens),s.addMessage({id:(0,I.$C)(),role:"system",content:a,timestamp:Date.now()})}));let a=new Map;function s(e){l(e),a.set(e,setTimeout(()=>{a.delete(e),e.getState().setCompacting(!1)},6e4))}function l(e){let t=a.get(e);void 0!==t&&(clearTimeout(t),a.delete(e))}for(let t of(r.push(()=>{for(let e of a.values())clearTimeout(e);a.clear()}),r.push(e.on("chat:system",e=>{let t=nZ(e.sessionId);if(!t)return;let r=t.getState(),n=e.text;if(!e.taskId){let e=n.match(/^Compacting context \((\d+)K tokens\)…$/);if(e&&(r.setCompacting(!0),s(t),"0"===e[1])){let e=t.getState().contextTokens;e>0&&(n="Compacting context (~".concat(Math.round(e/1e3),"K tokens)…"))}}r.addMessage({id:(0,I.$C)(),role:"system",content:n,timestamp:Date.now(),taskId:e.taskId,agentName:e.agentName})})),r.push(e.on("chat:queued",e=>{var t,r;null==(t=nZ(e.sessionId))||t.getState().addMessage({id:(0,I.$C)(),role:"system",content:null!=(r=e.message)?r:"Message queued.",timestamp:Date.now()})})),["compact:progress","compact:started","compact:summarizing"]))r.push(e.on(t,e=>{let t=nZ(e.sessionId,!1);t&&(t.getState().setCompacting(!0),s(t))}));return r.push(e.on("compact:done",e=>{let t=nZ(e.sessionId,!1);t&&(t.getState().setCompacting(!1),l(t))})),()=>r.forEach(e=>e())}(p),function(e){let t=[];return t.push(e.on("agent:start",e=>{var t;let r=null==(t=nZ(e.sessionId))?void 0:t.getState();r&&r.addMessage({id:(0,I.$C)(),role:"assistant",content:"",timestamp:Date.now(),streaming:!0,agentName:e.agentName,taskId:e.taskId})})),t.push(e.on("agent:done",e=>{var t;let r=null==(t=nZ(e.sessionId))?void 0:t.getState();r&&r.completeAgentStreaming(e.agentName,e.taskId)})),t.push(e.on("agent:context",e=>{var t,r;let n=null==(t=nZ(e.sessionId))?void 0:t.getState();n&&n.addMessage({id:(0,I.$C)(),role:"system",content:"[System Prompt: ".concat(null!=(r=e.agentName)?r:"Agent","]"),timestamp:Date.now(),agentName:e.agentName,taskId:e.taskId,systemPrompt:e.systemPrompt})})),t.push(e.on("agent:tool_call",e=>{var t,r,n,a;let s=null==(t=nZ(e.sessionId))?void 0:t.getState();if(!s)return;let l=null!=(r=e.agentName)?r:"default",o="string"==typeof e.input?e.input:JSON.stringify(null!=(n=e.input)?n:{});s.addToolCallToLastAssistant({name:null!=(a=e.tool)?a:"",input:o,toolUseId:e.toolUseId},l,e.taskId,e.turnId)})),t.push(e.on("agent:tool_result",e=>{var t,r,n;let a=null==(t=nZ(e.sessionId))?void 0:t.getState();if(!a)return;let s=null!=(r=e.agentName)?r:"default",l="string"==typeof e.result?e.result:JSON.stringify(null!=(n=e.result)?n:"");a.updateLastToolCallResult(l,s,e.taskId,e.toolUseId)})),()=>t.forEach(e=>e())}(p),function(e){let t=[];return t.push(e.on("file:changed",e=>{let t=d.Uw.getState();"add"===e.action||"addDir"===e.action?t.insertFileNode(e.path,"addDir"===e.action?"directory":"file"):("unlink"===e.action||"unlinkDir"===e.action)&&t.removeFileNode(e.path)})),()=>t.forEach(e=>e())}(p),function(e){let t=[];return t.push(e.on("state:snapshot",e=>{var t,r,n;let{snapshot:a}=e,s=nZ(a.sessionId,!1);if(!s)return;let l=s.getState();if(a.sessionId){let e=null!=(t=a.archiveCount)?t:0;!function(e,t){var r,n;let a=n_(t=>t.store===e);if(!a)return;let s=Math.max(null!=(r=a.archiveCount)?r:0,t);(a.loading||s!==(null!=(n=a.archiveCount)?n:0))&&nz(a.tabId,{loading:!1,archiveCount:s})}(s,e),s===nw()&&nA(a.sessionId,e)}a.agentId&&l.setSelectedAgentId(a.agentId),void 0!==a.accessLevel&&l.setAccessLevel(null!=(r=a.accessLevel)?r:"full");let o=s.getState().messages.some(e=>e.streaming&&!nn(e)),i=null!=(n=a.recentMessages)?n:a.messages;i&&a.sessionId&&l.noteSnapshot(a.sessionId,i),!o&&i&&i.length>0&&l.setMessages(i),"number"==typeof a.maxContextTokens&&a.maxContextTokens>0&&l.setMaxContextTokens(a.maxContextTokens)})),t.push(e.on("listener:released",t=>{let{sessionId:r}=t,n=rA.getState().activeProject;if(!(null==n?void 0:n.id)||!r)return;let a=nJ(r);if(a){if(a!==nw())return void function(e){let{tabs:t,activeTabId:r}=nF.getState(),n=t.find(t=>t.sessionId===e);n&&n.tabId!==r&&nV(n)}(r);e.send({type:"subscribe",sessionId:r,projectId:n.id})}})),t.push(e.on("session:changed",()=>as())),t.push(x(e,()=>as())),t.push(e.on("goal:changed",()=>{var e;let t=null==(e=rA.getState().activeProject)?void 0:e.id;t&&nX(t),as()})),t.push(e.on("extension:changed",e=>{let{extensions:t,disabled:r,errors:n}=e;eu({extensions:t,disabled:r,errors:n}),lh()})),t.push(x(e,()=>{u.F.extensions.list().then(eu).catch(()=>{})})),t.push(e.on("skills:changed",()=>lh())),t.push(e.on("models:changed",()=>sv())),t.push(x(e,()=>sv())),()=>t.forEach(e=>e())}(p)],r=()=>p.reconnectIfStale(0);window.addEventListener("online",r);let s=0,l=()=>{if(document.hidden){s=Date.now();return}s>0&&Date.now()-s>=3e5&&p.reconnectIfStale(45e3),s=0};document.addEventListener("visibilitychange",l);let o=setInterval(()=>{n(p.connected?p.lastReceiveAgeMs>45e3?"stale":"fresh":"down")},5e3);return()=>{e.forEach(e=>e()),window.removeEventListener("online",r),document.removeEventListener("visibilitychange",l),clearInterval(o),p.disconnect(),a.current=!1}},[]),{connected:e,linkState:r,send:(0,o.useCallback)(e=>{p.send(e)},[])}}(),[t,r]=(0,o.useState)("checking");(0,o.useEffect)(()=>{fetch("/api/auth/check",{credentials:"include"}).then(async e=>{let t=await e.json().catch(()=>null);var n=null==t?void 0:t.badge;let a="string"==typeof n&&n.trim()?n.trim():null;a&&!cD&&(cD=a,document.title=cP()+document.title,function(e){let t=document.createElement("canvas");t.width=64,t.height=64;let r=t.getContext("2d");if(!r)return;r.beginPath(),r.moveTo(14.08,0),r.arcTo(64,0,64,64,14.08),r.arcTo(64,64,0,64,14.08),r.arcTo(0,64,0,0,14.08),r.arcTo(0,0,64,0,14.08),r.closePath();let n=r.createLinearGradient(0,0,64,64);n.addColorStop(0,"#0e1430"),n.addColorStop(1,"#070a16"),r.fillStyle=n,r.fill(),r.clip();for(let[e,t]of[[8.96,.55],[13.44,.3]])r.beginPath(),r.arc(32,21.12,e,0,2*Math.PI),r.strokeStyle="rgba(125, 140, 255, ".concat(t,")"),r.lineWidth=2.24,r.stroke();let a=r.createRadialGradient(32,21.12,0,32,21.12,6.4);a.addColorStop(0,"#d8e6ff"),a.addColorStop(1,"#8aa6ff"),r.beginPath(),r.arc(32,21.12,6.4,0,2*Math.PI),r.fillStyle=a,r.fill();r.fillStyle="#e8401c",r.fillRect(0,64-26.88,64,26.88),r.fillStyle="#ffffff",r.textAlign="center",r.textBaseline="middle";let s=Math.round(22.0416);r.font="bold ".concat(s,"px system-ui, sans-serif");for(;s>8&&r.measureText(e).width>58.88;)s-=1,r.font="bold ".concat(s,"px system-ui, sans-serif");r.fillText(e,32,51.56),document.querySelectorAll('link[rel="icon"]').forEach(e=>e.remove());let l=document.createElement("link");l.rel="icon",l.type="image/png",l.href=t.toDataURL("image/png"),document.head.appendChild(l)}(a.slice(0,4))),nQ.getState().setEnabled(e.ok&&(null==t?void 0:t.goalModeEnabled)===!0),r(e.ok?"authenticated":"login")}).catch(()=>{r("login")})},[]),(0,o.useEffect)(()=>p.on("_auth_expired",()=>{r("login")}),[]);let n=(0,o.useCallback)(()=>{r("authenticated"),window.location.reload()},[]);return"checking"===t?(0,l.jsx)("div",{className:"flex h-screen w-screen items-center justify-center bg-[var(--background)]",children:(0,l.jsx)("div",{className:"text-sm text-[var(--muted-foreground)]",children:"Loading..."})}):"login"===t?(0,l.jsx)(c$,{onSuccess:n}):(0,l.jsx)("div",{className:"h-screen w-screen overflow-hidden bg-[var(--background)]",children:(0,l.jsx)(c_,{linkState:e})})}},79906:(e,t,r)=>{"use strict";r.d(t,{p:()=>i});var n=r(41440),a=r(54604),s=r(9239),l=r(40909),o=r(17119);function i(e){let{src:t,alt:r,className:i,placeholderClassName:c,onLoad:d,onError:u,...m}=e,p=(0,o.kj)(),x=(0,a.useRef)(null),[f,h]=(0,a.useState)({src:t,status:"loading"}),v=t?f.src===t?f.status:"loading":"error";(0,a.useLayoutEffect)(()=>{let e=x.current;(null==e?void 0:e.complete)&&e.naturalWidth>0&&h({src:t,status:"loaded"})},[t]);let g="loaded"!==v;return(0,n.jsx)("span",{role:"error"===v?"img":void 0,"aria-label":"error"===v?r||p("common.imageUnavailable"):void 0,"aria-busy":"loading"===v||void 0,title:"error"===v&&r?r:void 0,className:(0,l.cn)("contents",g&&"relative inline-flex max-w-full items-center justify-center overflow-hidden rounded align-middle bg-[var(--secondary)]/40 text-[var(--muted-foreground)]",g&&(null!=c?c:"aspect-video w-64"),"loading"===v&&"animate-pulse","error"===v&&"flex-col gap-1.5 border border-[var(--border)] p-2 text-center text-xs"),children:"error"===v?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.A,{className:"h-5 w-5 shrink-0"}),(0,n.jsx)("span",{children:p("common.imageUnavailable")})]}):(0,n.jsx)("img",{ref:x,src:t,alt:r,...m,className:(0,l.cn)(i,"loading"===v&&"absolute inset-0 h-full w-full opacity-0")||void 0,onLoad:e=>{h({src:t,status:"loaded"}),null==d||d(e)},onError:e=>{h({src:t,status:"error"}),null==u||u(e)}},String(t))})}}},e=>{e.O(0,[772,560,241,989,946,698,358],()=>e(e.s=44652)),_N_E=e.O()}]);
|