@yeaft/webchat-agent 1.0.226 → 1.0.227
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/local-runtime/server/handlers/agent-file-terminal.js +11 -2
- package/local-runtime/server/handlers/client-workbench.js +6 -1
- package/local-runtime/server/ws-agent.js +2 -1
- package/local-runtime/version.json +1 -1
- package/local-runtime/web/app.bundle.js +1 -1
- package/local-runtime/web/app.bundle.js.gz +0 -0
- package/local-runtime/web/index.html +1 -1
- package/package.json +1 -1
- package/terminal.js +24 -8
|
@@ -17,9 +17,18 @@ export async function handleAgentFileTerminal(agentId, agent, msg) {
|
|
|
17
17
|
case 'terminal_created':
|
|
18
18
|
case 'terminal_output':
|
|
19
19
|
case 'terminal_closed':
|
|
20
|
-
case 'terminal_error':
|
|
21
|
-
|
|
20
|
+
case 'terminal_error': {
|
|
21
|
+
const targetClient = msg._requestClientId ? webClients.get(msg._requestClientId) : null;
|
|
22
|
+
const targetMatchesUser = !msg._requestUserId || targetClient?.userId === msg._requestUserId;
|
|
23
|
+
if (targetClient?.authenticated && targetMatchesUser) {
|
|
24
|
+
const { _requestClientId, _requestUserId, ...cleanMsg } = msg;
|
|
25
|
+
await sendToWebClient(targetClient, cleanMsg);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
const { _requestClientId, ...fallbackMsg } = msg;
|
|
29
|
+
await forwardToClients(agentId, msg.conversationId, fallbackMsg);
|
|
22
30
|
break;
|
|
31
|
+
}
|
|
23
32
|
|
|
24
33
|
// File operation messages
|
|
25
34
|
case 'file_content':
|
|
@@ -42,7 +42,12 @@ export async function handleClientWorkbench(clientId, client, msg, checkAgentAcc
|
|
|
42
42
|
await sendToWebClient(client, { type: 'error', message: 'Permission denied' });
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
|
-
await forwardToAgent(termAgentId, {
|
|
45
|
+
await forwardToAgent(termAgentId, {
|
|
46
|
+
...msg,
|
|
47
|
+
conversationId: termConvId,
|
|
48
|
+
_requestUserId: client.userId,
|
|
49
|
+
_requestClientId: clientId,
|
|
50
|
+
});
|
|
46
51
|
break;
|
|
47
52
|
}
|
|
48
53
|
|
|
@@ -307,7 +307,8 @@ async function handleAgentMessage(agentId, msg, ws) {
|
|
|
307
307
|
'directory_listing', 'folders_list', 'models_list', 'yeaft_output', 'yeaft_session_output', 'session_output', 'yeaft_asset_put',
|
|
308
308
|
'yeaft_history_chunk', 'yeaft_history_outline', 'yeaft_history_search_result', 'yeaft_history_window', 'slash_commands_update', 'agent_metrics',
|
|
309
309
|
'file_content', 'file_saved', 'file_op_result', 'file_search_result',
|
|
310
|
-
'git_status_result', 'git_diff_result', 'git_op_result'
|
|
310
|
+
'git_status_result', 'git_diff_result', 'git_op_result',
|
|
311
|
+
'terminal_created', 'terminal_output', 'terminal_closed', 'terminal_error'
|
|
311
312
|
]);
|
|
312
313
|
if (msg.conversationId && !CONV_EXEMPT_TYPES.has(msg.type)) {
|
|
313
314
|
if (!agent.conversations.has(msg.conversationId)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"1.0.
|
|
1
|
+
{"version":"1.0.227"}
|
|
@@ -1826,7 +1826,7 @@ ${String(e||"").trim()}
|
|
|
1826
1826
|
<div class="placeholder-text">{{ $t('terminal.autoCreate') }}</div>
|
|
1827
1827
|
</div>
|
|
1828
1828
|
</div>
|
|
1829
|
-
`,setup(){let e=Pinia.useChatStore(),t=Vue.inject("t"),s=Vue.reactive({}),n=Vue.reactive({}),i=Vue.reactive({}),r=Vue.ref(""),o={},a=!1,l=Vue.computed(()=>{let M=e.currentConversation;return M&&n[M]||null}),c=Vue.computed(()=>{let M=e.currentConversation;return M&&i[M]||""}),d=Vue.computed(()=>!!c.value),u=(M,C)=>{if(C){let T=o[M];if(o[M]=C,T&&T!==C){let N=s[M];N?.terminal?.element&&(C.innerHTML="",C.appendChild(N.terminal.element),Vue.nextTick(()=>{try{N.fitAddon?.fit()}catch{}}))}}},p=M=>{let C=e.currentConversation;C&&(i[C]=M)};async function f(){if(a)return!0;let M=typeof Terminal<"u"?Terminal.Terminal||Terminal:null,C=typeof FitAddon<"u"?FitAddon.FitAddon||FitAddon:null;if(!M||!C)try{await fo("vendor/xterm.min.js"),await fo("vendor/xterm-addon-fit.min.js"),M=typeof Terminal<"u"?Terminal.Terminal||Terminal:null,C=typeof FitAddon<"u"?FitAddon.FitAddon||FitAddon:null}catch{}return!M||!C?(r.value=t("terminal.xtermNotLoaded"),!1):(a=!0,!0)}function g(){let M=document.documentElement.getAttribute("data-theme")==="dark",T=getComputedStyle(document.documentElement).getPropertyValue("--bg-main").trim()||(M?"#212121":"#ffffff");return M?{background:T,foreground:"#d4d4d4",cursor:"#a0a0a0",selectionBackground:"rgba(255,255,255,0.12)",black:"#3a3a3a",red:"#f48771",green:"#89d185",yellow:"#e5c07b",blue:"#6cb6ff",magenta:"#d670d6",cyan:"#56d4dd",white:"#cccccc",brightBlack:"#555555",brightRed:"#f48771",brightGreen:"#89d185",brightYellow:"#e5c07b",brightBlue:"#6cb6ff",brightMagenta:"#d670d6",brightCyan:"#56d4dd",brightWhite:"#e8e8e8"}:{background:T,foreground:"#383a42",cursor:"#526fff",selectionBackground:"rgba(0,0,0,0.07)",black:"#383a42",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a1a7",brightBlack:"#4f525e",brightRed:"#e45649",brightGreen:"#50a14f",brightYellow:"#c18401",brightBlue:"#4078f2",brightMagenta:"#a626a4",brightCyan:"#0184bc",brightWhite:"#fafafa"}}async function v(M){if(!M||!e.currentAgent||!await f())return null;let C=Wd(M),T=Terminal.Terminal||Terminal,N=FitAddon.FitAddon||FitAddon,H=new T({cursorBlink:!0,fontSize:13,fontFamily:"'SF Mono', 'Fira Code', 'Consolas', monospace, 'Symbols Nerd Font Mono', 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji'",theme:g(),allowProposedApi:!0}),U=new N;return H.loadAddon(U),H.attachCustomKeyEventHandler(ie=>!((ie.ctrlKey||ie.metaKey)&&ie.key==="v"||(ie.ctrlKey||ie.metaKey)&&ie.key==="c"&&H.hasSelection())),s[C]={created:!0,connected:!1,terminal:H,fitAddon:U},H.onData(ie=>{e.sendWsMessage({type:"terminal_input",conversationId:M,terminalId:C,data:ie,_clientId:e.clientId})}),C}async function y(M,C){let T=s[C];if(!T)return!1;let N=null;for(let H=0;H<10&&(await Vue.nextTick(),N=o[C],!(N||H>=2&&(await new Promise(U=>setTimeout(U,50)),N=o[C],N)));H++);return N?(T.terminal.open(N),T.fitAddon.fit(),e.sendWsMessage({type:"terminal_create",conversationId:M,terminalId:C,cols:T.terminal.cols,rows:T.terminal.rows,_clientId:e.clientId}),!0):(r.value=t("terminal.mountFailed"),T.terminal.dispose(),delete s[C],!1)}let A=!1;async function x(){let M=e.currentConversation;if(!M||!e.currentAgent||n[M]||A)return;A=!0,r.value="";let C=await v(M);if(!C){A=!1;return}n[M]=Vue.reactive({type:"pane",terminalId:C}),i[M]=C,await y(M,C)||(delete n[M],delete i[M]),A=!1}async function k(M){let C=e.currentConversation;if(!C||!i[C])return;let T=i[C],N=await v(C);if(!N)return;let H=Vue.reactive({type:"split",direction:M,ratio:.5,first:{type:"pane",terminalId:T},second:{type:"pane",terminalId:N}}),U=fi(n[C],T,H);if(n[C]=Vue.reactive(U),i[C]=N,!await y(C,N)){let Y=Dt(n[C],N);Y&&(n[C]=Vue.reactive(Y)),i[C]=T;return}await Vue.nextTick(),w(C)}function b(M){let C=e.currentConversation;if(!C)return;let T=s[M];T&&(e.sendWsMessage({type:"terminal_close",conversationId:C,terminalId:M,_clientId:e.clientId}),T.terminal?.dispose(),delete s[M],delete o[M]);let N=Dt(n[C],M);N?(n[C]=Vue.reactive(N),i[C]===M&&(i[C]=gi(n[C])||""),Vue.nextTick(()=>w(C))):(delete n[C],delete i[C],Vue.nextTick(()=>x()))}function m(){let M=e.currentConversation;!M||!i[M]||b(i[M])}function w(M){if(M||(M=e.currentConversation),!M||!n[M])return;let C=an(n[M]);for(let T of C){let N=s[T];if(N?.fitAddon&&N.connected)try{N.fitAddon.fit(),e.sendWsMessage({type:"terminal_resize",conversationId:M,terminalId:T,cols:N.terminal.cols,rows:N.terminal.rows,_clientId:e.clientId})}catch{}}}function E(M){let C=M.detail;if(C)switch(C.type){case"terminal_created":{let T=C.terminalId||C.conversationId,N=s[T];if(N)if(C.success)N.connected=!0,r.value="";else{r.value=C.error||t("terminal.createFailed"),N.terminal?.dispose(),delete s[T];let H=C.conversationId;if(H&&n[H]){let U=Dt(n[H],T);U?n[H]=Vue.reactive(U):(delete n[H],delete i[H])}}break}case"terminal_output":{let T=C.terminalId||C.conversationId,N=s[T];N?.terminal&&N.terminal.write(C.data);break}case"terminal_closed":{let T=C.terminalId||C.conversationId,N=s[T];if(N){N.terminal?.dispose(),delete s[T],delete o[T];let H=C.conversationId;if(H&&n[H]){let U=Dt(n[H],T);U?(n[H]=Vue.reactive(U),i[H]===T&&(i[H]=gi(n[H])||"")):(delete n[H],delete i[H])}}break}case"terminal_error":{r.value=C.message||t("terminal.error");let T=C.terminalId;if(T&&s[T]&&!s[T].connected){s[T].terminal?.dispose(),delete s[T];let N=C.conversationId;if(N&&n[N]){let H=Dt(n[N],T);H?n[N]=Vue.reactive(H):(delete n[N],delete i[N])}}break}}}let R=null;function q(){clearTimeout(R),R=setTimeout(()=>w(),100)}function $(){w()}function P(M){let{conversationId:C}=M.detail;if(C&&n[C]){let T=an(n[C]);for(let N of T){let H=s[N];H&&(H.terminal?.dispose(),delete s[N],delete o[N])}delete n[C],delete i[C]}}Vue.onMounted(()=>{window.addEventListener("workbench-message",E),window.addEventListener("resize",q),window.addEventListener("terminal-fit-all",$),window.addEventListener("conversation-deleted",P)}),Vue.onUnmounted(()=>{window.removeEventListener("workbench-message",E),window.removeEventListener("resize",q),window.removeEventListener("terminal-fit-all",$),window.removeEventListener("conversation-deleted",P),clearTimeout(R);for(let M of Object.keys(s))s[M]?.terminal?.dispose()}),Vue.watch(()=>[e.currentConversation,e.workbenchExpanded],()=>{Vue.nextTick(()=>{if(!e.currentConversation||!e.workbenchExpanded)return;let C=document.querySelector(".terminal-tab");C&&C.offsetParent!==null&&x()})},{immediate:!0}),Vue.watch(()=>e.connectionState,(M,C)=>{if(M==="connected"&&C&&C!=="connected"){for(let T of Object.keys(s))s[T]?.terminal?.dispose(),delete s[T],delete o[T];for(let T of Object.keys(n))delete n[T],delete i[T];Vue.nextTick(()=>x())}}),Vue.watch(()=>e.currentConversation,()=>{Vue.nextTick(()=>w())});let D=null;return Vue.onMounted(()=>{let M=()=>{let T=document.querySelector(".terminal-tab");T&&T.offsetParent!==null&&(x(),w())};D=new MutationObserver(()=>{setTimeout(M,50)});let C=document.querySelector(".workbench-tab-content");C&&D.observe(C,{attributes:!0,subtree:!0,attributeFilter:["style"]})}),Vue.onUnmounted(()=>{D&&D.disconnect()}),{store:e,terminals:s,currentTree:l,currentActivePane:c,hasActivePane:d,terminalError:r,setMountRef:u,activatePane:p,splitPane:k,closeActivePane:m,closePane:b}}}});function mi(e){if(!e)return ln(K.default);let t=e.toLowerCase();if(go[t])return go[t]();let s=t.lastIndexOf(".");if(s>=0){let n=t.slice(s+1);if(Yd[n])return Yd[n]();let i=t;for(let[r,o]of Object.entries(go))if(i===r||i.endsWith("/"+r))return o()}return ln(K.default)}function hi(e=!1){return km(K.folder,e)}var K,ln,km,z,Yd,go,mo=O(()=>{K={js:"#F1C40F",ts:"#3178C6",jsx:"#61DAFB",tsx:"#3178C6",py:"#3776AB",rb:"#CC342D",go:"#00ADD8",rs:"#DEA584",java:"#E76F00",cs:"#68217A",cpp:"#00599C",c:"#A8B9CC",html:"#E44D26",css:"#1572B6",scss:"#CF649A",less:"#1D365D",json:"#F1C40F",yaml:"#CB171E",xml:"#E44D26",md:"#519ABA",txt:"#8E8E8E",log:"#8E8E8E",sh:"#4EAA25",ps1:"#012456",sql:"#E38C00",svg:"#FFB13B",img:"#26A69A",git:"#F05032",docker:"#2496ED",config:"#6D8086",lock:"#8E8E8E",env:"#ECD53F",vue:"#41B883",react:"#61DAFB",angular:"#DD0031",svelte:"#FF3E00",php:"#777BB4",swift:"#FA7343",kt:"#7F52FF",lua:"#000080",r:"#276DC3",dart:"#00B4AB",liquid:"#67B6E4",folder:"#90A4AE",folderOpen:"#90A4AE",default:"#8E8E8E"},ln=e=>`<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M14 2H6C4.9 2 4 2.9 4 4v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6z" fill="${e}" opacity="0.85"/><path d="M14 2v6h6" fill="${e}" opacity="0.5"/></svg>`,km=(e,t)=>t?`<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" fill="${e}" opacity="0.9"/></svg>`:`<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z" fill="${e}" opacity="0.9"/></svg>`,z=(e,t)=>`<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M14 2H6C4.9 2 4 2.9 4 4v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6z" fill="${e}" opacity="0.2"/><path d="M14 2v6h6" fill="${e}" opacity="0.15"/><path d="M14 2H6C4.9 2 4 2.9 4 4v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6z" stroke="${e}" stroke-width="1.2" fill="none"/><text x="12" y="17" text-anchor="middle" font-size="7" font-weight="700" font-family="system-ui,sans-serif" fill="${e}">${t}</text></svg>`,Yd={js:()=>z(K.js,"JS"),mjs:()=>z(K.js,"JS"),cjs:()=>z(K.js,"JS"),ts:()=>z(K.ts,"TS"),mts:()=>z(K.ts,"TS"),jsx:()=>z(K.jsx,"JSX"),tsx:()=>z(K.tsx,"TSX"),html:()=>z(K.html,"</>"),htm:()=>z(K.html,"</>"),css:()=>z(K.css,"CSS"),scss:()=>z(K.scss,"SC"),sass:()=>z(K.scss,"SA"),less:()=>z(K.less,"LS"),vue:()=>z(K.vue,"V"),svelte:()=>z(K.svelte,"SV"),json:()=>z(K.json,"{ }"),yaml:()=>z(K.yaml,"YML"),yml:()=>z(K.yaml,"YML"),toml:()=>z(K.config,"TML"),xml:()=>z(K.xml,"</>"),csv:()=>z(K.config,"CSV"),md:()=>z(K.md,"MD"),markdown:()=>z(K.md,"MD"),txt:()=>ln(K.txt),log:()=>ln(K.log),pdf:()=>z("#E53935","PDF"),py:()=>z(K.py,"PY"),rb:()=>z(K.rb,"RB"),go:()=>z(K.go,"GO"),rs:()=>z(K.rs,"RS"),java:()=>z(K.java,"JA"),cs:()=>z(K.cs,"C#"),cpp:()=>z(K.cpp,"C+"),cc:()=>z(K.cpp,"C+"),c:()=>z(K.c,"C"),h:()=>z(K.c,"H"),hpp:()=>z(K.cpp,"H+"),swift:()=>z(K.swift,"SW"),kt:()=>z(K.kt,"KT"),php:()=>z(K.php,"PHP"),lua:()=>z(K.lua,"LUA"),r:()=>z(K.r,"R"),dart:()=>z(K.dart,"DA"),sh:()=>z(K.sh,">_"),bash:()=>z(K.sh,">_"),zsh:()=>z(K.sh,">_"),fish:()=>z(K.sh,">_"),ps1:()=>z(K.ps1,"PS"),bat:()=>z(K.ps1,"BAT"),cmd:()=>z(K.ps1,"CMD"),sql:()=>z(K.sql,"SQL"),db:()=>z(K.sql,"DB"),sqlite:()=>z(K.sql,"DB"),svg:()=>z(K.svg,"SVG"),png:()=>z(K.img,"PNG"),jpg:()=>z(K.img,"JPG"),jpeg:()=>z(K.img,"JPG"),gif:()=>z(K.img,"GIF"),ico:()=>z(K.img,"ICO"),webp:()=>z(K.img,"WP"),lock:()=>ln(K.lock),env:()=>z(K.env,"ENV"),ini:()=>z(K.config,"INI"),cfg:()=>z(K.config,"CFG"),conf:()=>z(K.config,"CNF"),liquid:()=>z(K.liquid,"LQ"),ejs:()=>z(K.html,"EJS"),hbs:()=>z(K.html,"HBS"),pug:()=>z(K.html,"PUG"),wasm:()=>z("#654FF0","WA"),proto:()=>z(K.config,"PB"),graphql:()=>z("#E535AB","GQL"),gql:()=>z("#E535AB","GQL")},go={dockerfile:()=>z(K.docker,"DK"),"docker-compose.yml":()=>z(K.docker,"DC"),"docker-compose.yaml":()=>z(K.docker,"DC"),".gitignore":()=>z(K.git,"GI"),".gitattributes":()=>z(K.git,"GA"),".gitmodules":()=>z(K.git,"GM"),".env":()=>z(K.env,"ENV"),".env.local":()=>z(K.env,"ENV"),".env.development":()=>z(K.env,"ENV"),".env.production":()=>z(K.env,"ENV"),"package.json":()=>z("#CB3837","NPM"),"package-lock.json":()=>z("#CB3837","NPM"),"tsconfig.json":()=>z(K.ts,"TSC"),eslintrc:()=>z("#4B32C3","ESL"),".eslintrc.js":()=>z("#4B32C3","ESL"),".eslintrc.json":()=>z("#4B32C3","ESL"),".prettierrc":()=>z("#F7B93E","PR"),makefile:()=>z(K.config,"MK"),"cmakelists.txt":()=>z("#064F8C","CM"),"readme.md":()=>z(K.md,"RM"),license:()=>z("#F5C518","LIC"),"license.md":()=>z("#F5C518","LIC"),"cargo.toml":()=>z(K.rs,"CG"),"go.mod":()=>z(K.go,"MOD"),"go.sum":()=>z(K.go,"SUM"),gemfile:()=>z(K.rb,"GEM"),rakefile:()=>z(K.rb,"RK"),"requirements.txt":()=>z(K.py,"REQ"),pipfile:()=>z(K.py,"PIP"),csproj:()=>z(K.cs,"CSP"),".sln":()=>z(K.cs,"SLN"),slnx:()=>z(K.cs,"SLN")}});function Gt(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Sm(e,t){if(!e||!t)return Gt(e);let s=[],n=(a,l)=>{if(!a)return;let c=new RegExp(a.source,a.flags),d;for(;(d=c.exec(e))!==null;){let u=d[1]!==void 0?d[1]:d[0],p=d.index+(d[1]!==void 0?d[0].indexOf(d[1]):0);if(s.push({start:p,end:p+u.length,cls:l}),!c.global)break}},i=t.commentType||"slash";if((i==="slash"||i==="both")&&(n(Ss.comment1,Ie.comment),n(Ss.commentBlock,Ie.comment)),(i==="hash"||i==="both")&&n(Ss.commentHash,Ie.comment),i==="html"&&n(t.commentHtml,Ie.comment),t.commentLine&&n(t.commentLine,Ie.comment),t.commentBlock&&n(t.commentBlock,Ie.comment),n(Ss.string,Ie.string),n(Ss.number,Ie.number),t.keywords&&n(t.keywords,Ie.keyword),t.builtins&&n(t.builtins,Ie.builtin),t.operators&&n(t.operators,Ie.operator),t.decorators&&n(t.decorators,Ie.decorator),t.macros&&n(t.macros,Ie.macro),t.preprocessor&&n(t.preprocessor,Ie.preprocessor),t.attributes&&n(t.attributes,Ie.attribute),t.tags&&n(t.tags,Ie.tag),t.properties&&n(t.properties,Ie.property),t.variables&&n(t.variables,Ie.variable),t.headings&&n(t.headings,Ie.heading),t.bold&&n(t.bold,Ie.bold),t.links&&n(t.links,Ie.link),t.keys&&n(t.keys,Ie.key),t.sections&&n(t.sections,Ie.section),t.selectors&&n(t.selectors,Ie.keyword),t.values&&n(t.values,Ie.number),t.code&&n(t.code,Ie.string),t.italic&&n(t.italic,Ie.builtin),t.attrs&&n(t.attrs,Ie.attribute),s.length===0)return Gt(e);s.sort((a,l)=>a.start-l.start||l.end-l.start-(a.end-a.start));let r="",o=0;for(let a of s)a.start<o||(a.start>o&&(r+=Gt(e.slice(o,a.start))),r+=`<span class="${a.cls}">${Gt(e.slice(a.start,a.end))}</span>`,o=a.end);return o<e.length&&(r+=Gt(e.slice(o))),r}function Cm(e){if(!e)return null;let t=e.split(".").pop()?.toLowerCase();if(!t)return null;let s=Qd[t];return typeof s=="string"&&(s=Qd[s]),s||null}function Xd(e,t){if(!e)return Gt(e||"");let s=Cm(t);return s?Sm(e,s):Gt(e)}var Ss,Qd,Ie,Zd=O(()=>{Ss={string:/("(?:[^"\\]|\\.)*")|('(?:[^'\\]|\\.)*')|(`(?:[^`\\]|\\.)*`)/g,number:/\b(\d+\.?\d*(?:[eE][+-]?\d+)?|0x[\da-fA-F]+|0b[01]+|0o[0-7]+)\b/g,comment1:/(\/\/.*$)/gm,commentHash:/(#.*$)/gm,commentBlock:/(\/\*.*?\*\/)/g},Qd={js:{keywords:/\b(const|let|var|function|class|extends|return|if|else|for|while|do|switch|case|break|continue|new|this|super|import|export|from|default|async|await|yield|try|catch|finally|throw|typeof|instanceof|in|of|delete|void|null|undefined|true|false|NaN|Infinity)\b/g,builtins:/\b(console|window|document|Math|JSON|Array|Object|String|Number|Boolean|Promise|Map|Set|WeakMap|WeakSet|Symbol|Proxy|Reflect|RegExp|Error|Date|parseInt|parseFloat|setTimeout|setInterval|clearTimeout|clearInterval|fetch|require|module|exports|process)\b/g,operators:/(=>|\.\.\.|\?\.|&&|\|\||===|!==|==|!=|>=|<=|>>>=|>>>|>>=|<<=|\+\+|--|[+\-*/%&|^~!<>]=?|\?|:)/g},ts:"js",jsx:"js",tsx:"js",mjs:"js",cjs:"js",vue:"js",py:{keywords:/\b(def|class|return|if|elif|else|for|while|break|continue|pass|import|from|as|with|try|except|finally|raise|yield|lambda|and|or|not|is|in|True|False|None|global|nonlocal|del|assert|async|await)\b/g,builtins:/\b(print|len|range|int|float|str|bool|list|dict|set|tuple|type|isinstance|super|property|staticmethod|classmethod|enumerate|zip|map|filter|sorted|reversed|open|input|hasattr|getattr|setattr|id|hex|oct|bin|abs|max|min|sum|all|any|iter|next)\b/g,decorators:/(@\w+)/g,commentType:"hash"},rb:{keywords:/\b(def|class|module|end|return|if|elsif|else|unless|for|while|until|do|break|next|case|when|begin|rescue|ensure|raise|yield|require|include|extend|attr_accessor|attr_reader|attr_writer|self|super|nil|true|false|and|or|not|then|puts|print)\b/g,commentType:"hash"},go:{keywords:/\b(func|package|import|var|const|type|struct|interface|map|chan|go|select|switch|case|default|if|else|for|range|break|continue|return|defer|fallthrough|nil|true|false|iota)\b/g,builtins:/\b(fmt|make|len|cap|append|copy|delete|close|panic|recover|new|error|string|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float32|float64|bool|byte|rune|complex64|complex128)\b/g},rs:{keywords:/\b(fn|let|mut|const|pub|mod|use|struct|enum|impl|trait|where|for|loop|while|if|else|match|return|break|continue|move|ref|self|Self|super|crate|as|in|unsafe|async|await|dyn|true|false|Some|None|Ok|Err)\b/g,builtins:/\b(String|Vec|Box|Rc|Arc|Option|Result|HashMap|HashSet|println|eprintln|format|panic|todo|unimplemented|assert|assert_eq|assert_ne|dbg|cfg|derive|macro_rules)\b/g,macros:/(\w+!)/g},java:{keywords:/\b(class|interface|extends|implements|public|private|protected|static|final|abstract|synchronized|volatile|transient|native|new|return|if|else|for|while|do|switch|case|default|break|continue|try|catch|finally|throw|throws|import|package|this|super|void|null|true|false|instanceof)\b/g,builtins:/\b(System|String|Integer|Long|Double|Float|Boolean|List|ArrayList|Map|HashMap|Set|HashSet|Optional|Stream|Object|Exception|RuntimeException|Thread|Runnable|Override|Deprecated)\b/g},cs:{keywords:/\b(class|struct|interface|enum|record|delegate|event|namespace|using|public|private|protected|internal|static|readonly|const|sealed|abstract|virtual|override|new|return|if|else|for|foreach|while|do|switch|case|default|break|continue|try|catch|finally|throw|async|await|yield|var|dynamic|is|as|in|out|ref|params|this|base|null|true|false|void|get|set|init|required|partial|where|select|from|orderby|group|join|let|into)\b/g,builtins:/\b(Console|String|Int32|Int64|Double|Boolean|List|Dictionary|HashSet|Task|IEnumerable|ILogger|IOptions|IFeatures|Exception|Guid|DateTime|TimeSpan|CancellationToken|Action|Func|Span|Memory|ReadOnlySpan)\b/g,attributes:/(\[[\w]+(?:\(.*?\))?\])/g},cpp:{keywords:/\b(class|struct|enum|union|namespace|using|template|typename|public|private|protected|static|const|constexpr|volatile|virtual|override|final|explicit|inline|extern|auto|decltype|new|delete|return|if|else|for|while|do|switch|case|default|break|continue|try|catch|throw|sizeof|alignof|typeid|static_cast|dynamic_cast|reinterpret_cast|const_cast|nullptr|true|false|void|this|operator|friend|noexcept|co_await|co_yield|co_return|concept|requires)\b/g,builtins:/\b(std|string|vector|map|unordered_map|set|array|pair|tuple|shared_ptr|unique_ptr|weak_ptr|optional|variant|any|cout|cin|endl|printf|scanf|malloc|free|sizeof|size_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t)\b/g,preprocessor:/(#\s*(?:include|define|undef|if|ifdef|ifndef|else|elif|endif|pragma|error|warning).*$)/gm},c:"cpp",h:"cpp",hpp:"cpp",html:{tags:/(<\/?[\w-]+|>|\/>)/g,attrs:/\b([\w-]+)(?==)/g,commentType:"html",commentHtml:/(<!--[\s\S]*?-->)/g},xml:"html",svg:"html",css:{selectors:/([\w.#\[\]:,>+~*-]+)\s*\{/g,properties:/\b([\w-]+)(?=\s*:)/g,values:/:\s*([^;{}]+)/g,commentType:"block"},scss:"css",less:"css",json:{keys:/("[\w.-]+")\s*:/g,commentType:"none"},yaml:{keys:/([\w.-]+)\s*:/g,commentType:"hash"},yml:"yaml",md:{headings:/^(#{1,6}\s.*)$/gm,bold:/(\*\*[^*]+\*\*|__[^_]+__)/g,italic:/(\*[^*]+\*|_[^_]+_)/g,code:/(`[^`]+`)/g,links:/(\[[^\]]+\]\([^)]+\))/g,commentType:"none"},sh:{keywords:/\b(if|then|else|elif|fi|for|while|do|done|case|esac|function|return|exit|echo|export|local|readonly|unset|set|shift|eval|exec|trap|source|alias|cd|pwd|ls|mkdir|rm|cp|mv|cat|grep|sed|awk|find|xargs|sort|uniq|wc|head|tail|tee|cut|tr|test)\b/g,variables:/(\$\{?\w+\}?|\$\(|\$\{)/g,commentType:"hash"},bash:"sh",zsh:"sh",sql:{keywords:/\b(SELECT|FROM|WHERE|AND|OR|NOT|IN|LIKE|BETWEEN|JOIN|LEFT|RIGHT|INNER|OUTER|FULL|ON|AS|GROUP|BY|ORDER|HAVING|LIMIT|OFFSET|INSERT|INTO|VALUES|UPDATE|SET|DELETE|CREATE|ALTER|DROP|TABLE|INDEX|VIEW|TRIGGER|FUNCTION|PROCEDURE|BEGIN|END|IF|ELSE|THEN|CASE|WHEN|DECLARE|EXEC|UNION|ALL|DISTINCT|TOP|EXISTS|NULL|IS|ASC|DESC|PRIMARY|KEY|FOREIGN|REFERENCES|CONSTRAINT|DEFAULT|CHECK|UNIQUE|CASCADE|TRUNCATE|COMMIT|ROLLBACK|GRANT|REVOKE)\b/gi,commentType:"both"},lua:{keywords:/\b(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/g,builtins:/\b(print|type|tostring|tonumber|pairs|ipairs|next|select|unpack|error|pcall|xpcall|assert|require|table|string|math|io|os|coroutine|setmetatable|getmetatable|rawget|rawset)\b/g,commentLine:/(--(?!\[).*$)/gm,commentBlock:/(--\[\[[\s\S]*?\]\])/g},php:{keywords:/\b(function|class|interface|trait|extends|implements|public|private|protected|static|final|abstract|const|var|new|return|if|else|elseif|for|foreach|while|do|switch|case|default|break|continue|try|catch|finally|throw|use|namespace|require|include|require_once|include_once|echo|print|die|exit|null|true|false|array|list|match|fn|yield|from)\b/g,variables:/(\$\w+)/g},swift:{keywords:/\b(func|class|struct|enum|protocol|extension|let|var|guard|if|else|for|while|repeat|switch|case|default|break|continue|return|throw|try|catch|defer|import|typealias|associatedtype|init|deinit|subscript|operator|precedencegroup|self|Self|super|nil|true|false|is|as|in|inout|throws|rethrows|where|some|any|weak|unowned|lazy|mutating|nonmutating|override|final|required|convenience|optional|dynamic|async|await|actor|nonisolated|isolated|sending|consuming|borrowing)\b/g},kt:{keywords:/\b(fun|class|object|interface|val|var|if|else|when|for|while|do|return|break|continue|throw|try|catch|finally|import|package|as|is|in|out|by|init|constructor|companion|data|sealed|enum|abstract|open|override|private|protected|internal|public|inline|reified|suspend|coroutine|null|true|false|this|super|it|typealias|annotation|lateinit|lazy|get|set)\b/g},dart:{keywords:/\b(class|extends|implements|with|mixin|abstract|sealed|base|interface|final|const|var|late|required|dynamic|void|static|return|if|else|for|while|do|switch|case|default|break|continue|try|catch|finally|throw|rethrow|assert|new|this|super|null|true|false|is|as|in|async|await|yield|import|export|library|part|show|hide|deferred|typedef|enum|extension|on)\b/g},r:{keywords:/\b(if|else|for|while|repeat|function|return|break|next|in|TRUE|FALSE|NULL|NA|Inf|NaN|library|require|source|print|cat|paste|paste0|sprintf|stop|warning|message)\b/g,commentType:"hash"},toml:{keys:/([\w.-]+)\s*=/g,sections:/(\[[\w.]+\])/g,commentType:"hash"},proto:{keywords:/\b(syntax|package|import|option|message|enum|service|rpc|returns|repeated|optional|required|map|oneof|reserved|extensions|extend|group|default|packed|deprecated|java_package|java_outer_classname|optimize_for|cc_enable_arenas|objc_class_prefix|csharp_namespace|swift_prefix|php_class_prefix|php_namespace|ruby_package|string|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|float|double|bool|bytes)\b/g}},Ie={keyword:"hl-kw",builtin:"hl-bi",string:"hl-st",number:"hl-nm",comment:"hl-cm",operator:"hl-op",decorator:"hl-dc",macro:"hl-mc",preprocessor:"hl-pp",attribute:"hl-at",tag:"hl-tg",property:"hl-pr",variable:"hl-vr",heading:"hl-hd",bold:"hl-bd",link:"hl-lk",key:"hl-ky",section:"hl-sc"}});function Jd(e,t,s){let n=[],i=0,r=0;if(t!=null){let f=t.split(`
|
|
1829
|
+
`,setup(){let e=Pinia.useChatStore(),t=Vue.inject("t"),s=Vue.reactive({}),n=Vue.reactive({}),i=Vue.reactive({}),r=Vue.ref(""),o={},a=!1,l=Vue.computed(()=>{let M=e.currentConversation;return M&&n[M]||null}),c=Vue.computed(()=>{let M=e.currentConversation;return M&&i[M]||""}),d=Vue.computed(()=>!!c.value),u=(M,C)=>{if(C){let T=o[M];if(o[M]=C,T&&T!==C){let N=s[M];N?.terminal?.element&&(C.innerHTML="",C.appendChild(N.terminal.element),Vue.nextTick(()=>{try{N.fitAddon?.fit()}catch{}}))}}},p=M=>{let C=e.currentConversation;C&&(i[C]=M)};async function f(){if(a)return!0;let M=typeof Terminal<"u"?Terminal.Terminal||Terminal:null,C=typeof FitAddon<"u"?FitAddon.FitAddon||FitAddon:null;if(!M||!C)try{await fo("vendor/xterm.min.js"),await fo("vendor/xterm-addon-fit.min.js"),M=typeof Terminal<"u"?Terminal.Terminal||Terminal:null,C=typeof FitAddon<"u"?FitAddon.FitAddon||FitAddon:null}catch{}return!M||!C?(r.value=t("terminal.xtermNotLoaded"),!1):(a=!0,!0)}function g(){let M=document.documentElement.getAttribute("data-theme")==="dark",T=getComputedStyle(document.documentElement).getPropertyValue("--bg-main").trim()||(M?"#212121":"#ffffff");return M?{background:T,foreground:"#d4d4d4",cursor:"#a0a0a0",selectionBackground:"rgba(255,255,255,0.12)",black:"#3a3a3a",red:"#f48771",green:"#89d185",yellow:"#e5c07b",blue:"#6cb6ff",magenta:"#d670d6",cyan:"#56d4dd",white:"#cccccc",brightBlack:"#555555",brightRed:"#f48771",brightGreen:"#89d185",brightYellow:"#e5c07b",brightBlue:"#6cb6ff",brightMagenta:"#d670d6",brightCyan:"#56d4dd",brightWhite:"#e8e8e8"}:{background:T,foreground:"#383a42",cursor:"#526fff",selectionBackground:"rgba(0,0,0,0.07)",black:"#383a42",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a1a7",brightBlack:"#4f525e",brightRed:"#e45649",brightGreen:"#50a14f",brightYellow:"#c18401",brightBlue:"#4078f2",brightMagenta:"#a626a4",brightCyan:"#0184bc",brightWhite:"#fafafa"}}async function v(M){if(!M||!e.currentAgent||!await f())return null;let C=Wd(M),T=Terminal.Terminal||Terminal,N=FitAddon.FitAddon||FitAddon,H=new T({cursorBlink:!0,fontSize:13,fontFamily:"'SF Mono', 'Fira Code', 'Consolas', monospace, 'Symbols Nerd Font Mono', 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji'",theme:g(),allowProposedApi:!0}),U=new N;return H.loadAddon(U),H.attachCustomKeyEventHandler(ie=>!((ie.ctrlKey||ie.metaKey)&&ie.key==="v"||(ie.ctrlKey||ie.metaKey)&&ie.key==="c"&&H.hasSelection())),s[C]={created:!0,connected:!1,terminal:H,fitAddon:U},H.onData(ie=>{e.sendWsMessage({type:"terminal_input",agentId:e.currentAgent,conversationId:M,terminalId:C,data:ie,_clientId:e.clientId})}),C}async function y(M,C){let T=s[C];if(!T)return!1;let N=null;for(let H=0;H<10&&(await Vue.nextTick(),N=o[C],!(N||H>=2&&(await new Promise(U=>setTimeout(U,50)),N=o[C],N)));H++);return N?(T.terminal.open(N),T.fitAddon.fit(),e.sendWsMessage({type:"terminal_create",agentId:e.currentAgent,conversationId:M,terminalId:C,cols:T.terminal.cols,rows:T.terminal.rows,_clientId:e.clientId}),!0):(r.value=t("terminal.mountFailed"),T.terminal.dispose(),delete s[C],!1)}let A=!1;async function x(){let M=e.currentConversation;if(!M||!e.currentAgent||n[M]||A)return;A=!0,r.value="";let C=await v(M);if(!C){A=!1;return}n[M]=Vue.reactive({type:"pane",terminalId:C}),i[M]=C,await y(M,C)||(delete n[M],delete i[M]),A=!1}async function k(M){let C=e.currentConversation;if(!C||!i[C])return;let T=i[C],N=await v(C);if(!N)return;let H=Vue.reactive({type:"split",direction:M,ratio:.5,first:{type:"pane",terminalId:T},second:{type:"pane",terminalId:N}}),U=fi(n[C],T,H);if(n[C]=Vue.reactive(U),i[C]=N,!await y(C,N)){let Y=Dt(n[C],N);Y&&(n[C]=Vue.reactive(Y)),i[C]=T;return}await Vue.nextTick(),w(C)}function b(M){let C=e.currentConversation;if(!C)return;let T=s[M];T&&(e.sendWsMessage({type:"terminal_close",agentId:e.currentAgent,conversationId:C,terminalId:M,_clientId:e.clientId}),T.terminal?.dispose(),delete s[M],delete o[M]);let N=Dt(n[C],M);N?(n[C]=Vue.reactive(N),i[C]===M&&(i[C]=gi(n[C])||""),Vue.nextTick(()=>w(C))):(delete n[C],delete i[C],Vue.nextTick(()=>x()))}function m(){let M=e.currentConversation;!M||!i[M]||b(i[M])}function w(M){if(M||(M=e.currentConversation),!M||!n[M])return;let C=an(n[M]);for(let T of C){let N=s[T];if(N?.fitAddon&&N.connected)try{N.fitAddon.fit(),e.sendWsMessage({type:"terminal_resize",agentId:e.currentAgent,conversationId:M,terminalId:T,cols:N.terminal.cols,rows:N.terminal.rows,_clientId:e.clientId})}catch{}}}function E(M){let C=M.detail;if(C)switch(C.type){case"terminal_created":{let T=C.terminalId||C.conversationId,N=s[T];if(N)if(C.success)N.connected=!0,r.value="";else{r.value=C.error||t("terminal.createFailed"),N.terminal?.dispose(),delete s[T];let H=C.conversationId;if(H&&n[H]){let U=Dt(n[H],T);U?n[H]=Vue.reactive(U):(delete n[H],delete i[H])}}break}case"terminal_output":{let T=C.terminalId||C.conversationId,N=s[T];N?.terminal&&N.terminal.write(C.data);break}case"terminal_closed":{let T=C.terminalId||C.conversationId,N=s[T];if(N){N.terminal?.dispose(),delete s[T],delete o[T];let H=C.conversationId;if(H&&n[H]){let U=Dt(n[H],T);U?(n[H]=Vue.reactive(U),i[H]===T&&(i[H]=gi(n[H])||"")):(delete n[H],delete i[H])}}break}case"terminal_error":{r.value=C.message||t("terminal.error");let T=C.terminalId;if(T&&s[T]&&!s[T].connected){s[T].terminal?.dispose(),delete s[T];let N=C.conversationId;if(N&&n[N]){let H=Dt(n[N],T);H?n[N]=Vue.reactive(H):(delete n[N],delete i[N])}}break}}}let R=null;function q(){clearTimeout(R),R=setTimeout(()=>w(),100)}function $(){w()}function P(M){let{conversationId:C}=M.detail;if(C&&n[C]){let T=an(n[C]);for(let N of T){let H=s[N];H&&(H.terminal?.dispose(),delete s[N],delete o[N])}delete n[C],delete i[C]}}Vue.onMounted(()=>{window.addEventListener("workbench-message",E),window.addEventListener("resize",q),window.addEventListener("terminal-fit-all",$),window.addEventListener("conversation-deleted",P)}),Vue.onUnmounted(()=>{window.removeEventListener("workbench-message",E),window.removeEventListener("resize",q),window.removeEventListener("terminal-fit-all",$),window.removeEventListener("conversation-deleted",P),clearTimeout(R);for(let M of Object.keys(s))s[M]?.terminal?.dispose()}),Vue.watch(()=>[e.currentConversation,e.workbenchExpanded],()=>{Vue.nextTick(()=>{if(!e.currentConversation||!e.workbenchExpanded)return;let C=document.querySelector(".terminal-tab");C&&C.offsetParent!==null&&x()})},{immediate:!0}),Vue.watch(()=>e.connectionState,(M,C)=>{if(M==="connected"&&C&&C!=="connected"){for(let T of Object.keys(s))s[T]?.terminal?.dispose(),delete s[T],delete o[T];for(let T of Object.keys(n))delete n[T],delete i[T];Vue.nextTick(()=>x())}}),Vue.watch(()=>e.currentConversation,()=>{Vue.nextTick(()=>w())});let D=null;return Vue.onMounted(()=>{let M=()=>{let T=document.querySelector(".terminal-tab");T&&T.offsetParent!==null&&(x(),w())};D=new MutationObserver(()=>{setTimeout(M,50)});let C=document.querySelector(".workbench-tab-content");C&&D.observe(C,{attributes:!0,subtree:!0,attributeFilter:["style"]})}),Vue.onUnmounted(()=>{D&&D.disconnect()}),{store:e,terminals:s,currentTree:l,currentActivePane:c,hasActivePane:d,terminalError:r,setMountRef:u,activatePane:p,splitPane:k,closeActivePane:m,closePane:b}}}});function mi(e){if(!e)return ln(K.default);let t=e.toLowerCase();if(go[t])return go[t]();let s=t.lastIndexOf(".");if(s>=0){let n=t.slice(s+1);if(Yd[n])return Yd[n]();let i=t;for(let[r,o]of Object.entries(go))if(i===r||i.endsWith("/"+r))return o()}return ln(K.default)}function hi(e=!1){return km(K.folder,e)}var K,ln,km,z,Yd,go,mo=O(()=>{K={js:"#F1C40F",ts:"#3178C6",jsx:"#61DAFB",tsx:"#3178C6",py:"#3776AB",rb:"#CC342D",go:"#00ADD8",rs:"#DEA584",java:"#E76F00",cs:"#68217A",cpp:"#00599C",c:"#A8B9CC",html:"#E44D26",css:"#1572B6",scss:"#CF649A",less:"#1D365D",json:"#F1C40F",yaml:"#CB171E",xml:"#E44D26",md:"#519ABA",txt:"#8E8E8E",log:"#8E8E8E",sh:"#4EAA25",ps1:"#012456",sql:"#E38C00",svg:"#FFB13B",img:"#26A69A",git:"#F05032",docker:"#2496ED",config:"#6D8086",lock:"#8E8E8E",env:"#ECD53F",vue:"#41B883",react:"#61DAFB",angular:"#DD0031",svelte:"#FF3E00",php:"#777BB4",swift:"#FA7343",kt:"#7F52FF",lua:"#000080",r:"#276DC3",dart:"#00B4AB",liquid:"#67B6E4",folder:"#90A4AE",folderOpen:"#90A4AE",default:"#8E8E8E"},ln=e=>`<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M14 2H6C4.9 2 4 2.9 4 4v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6z" fill="${e}" opacity="0.85"/><path d="M14 2v6h6" fill="${e}" opacity="0.5"/></svg>`,km=(e,t)=>t?`<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" fill="${e}" opacity="0.9"/></svg>`:`<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z" fill="${e}" opacity="0.9"/></svg>`,z=(e,t)=>`<svg width="16" height="16" viewBox="0 0 24 24" fill="none"><path d="M14 2H6C4.9 2 4 2.9 4 4v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6z" fill="${e}" opacity="0.2"/><path d="M14 2v6h6" fill="${e}" opacity="0.15"/><path d="M14 2H6C4.9 2 4 2.9 4 4v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6z" stroke="${e}" stroke-width="1.2" fill="none"/><text x="12" y="17" text-anchor="middle" font-size="7" font-weight="700" font-family="system-ui,sans-serif" fill="${e}">${t}</text></svg>`,Yd={js:()=>z(K.js,"JS"),mjs:()=>z(K.js,"JS"),cjs:()=>z(K.js,"JS"),ts:()=>z(K.ts,"TS"),mts:()=>z(K.ts,"TS"),jsx:()=>z(K.jsx,"JSX"),tsx:()=>z(K.tsx,"TSX"),html:()=>z(K.html,"</>"),htm:()=>z(K.html,"</>"),css:()=>z(K.css,"CSS"),scss:()=>z(K.scss,"SC"),sass:()=>z(K.scss,"SA"),less:()=>z(K.less,"LS"),vue:()=>z(K.vue,"V"),svelte:()=>z(K.svelte,"SV"),json:()=>z(K.json,"{ }"),yaml:()=>z(K.yaml,"YML"),yml:()=>z(K.yaml,"YML"),toml:()=>z(K.config,"TML"),xml:()=>z(K.xml,"</>"),csv:()=>z(K.config,"CSV"),md:()=>z(K.md,"MD"),markdown:()=>z(K.md,"MD"),txt:()=>ln(K.txt),log:()=>ln(K.log),pdf:()=>z("#E53935","PDF"),py:()=>z(K.py,"PY"),rb:()=>z(K.rb,"RB"),go:()=>z(K.go,"GO"),rs:()=>z(K.rs,"RS"),java:()=>z(K.java,"JA"),cs:()=>z(K.cs,"C#"),cpp:()=>z(K.cpp,"C+"),cc:()=>z(K.cpp,"C+"),c:()=>z(K.c,"C"),h:()=>z(K.c,"H"),hpp:()=>z(K.cpp,"H+"),swift:()=>z(K.swift,"SW"),kt:()=>z(K.kt,"KT"),php:()=>z(K.php,"PHP"),lua:()=>z(K.lua,"LUA"),r:()=>z(K.r,"R"),dart:()=>z(K.dart,"DA"),sh:()=>z(K.sh,">_"),bash:()=>z(K.sh,">_"),zsh:()=>z(K.sh,">_"),fish:()=>z(K.sh,">_"),ps1:()=>z(K.ps1,"PS"),bat:()=>z(K.ps1,"BAT"),cmd:()=>z(K.ps1,"CMD"),sql:()=>z(K.sql,"SQL"),db:()=>z(K.sql,"DB"),sqlite:()=>z(K.sql,"DB"),svg:()=>z(K.svg,"SVG"),png:()=>z(K.img,"PNG"),jpg:()=>z(K.img,"JPG"),jpeg:()=>z(K.img,"JPG"),gif:()=>z(K.img,"GIF"),ico:()=>z(K.img,"ICO"),webp:()=>z(K.img,"WP"),lock:()=>ln(K.lock),env:()=>z(K.env,"ENV"),ini:()=>z(K.config,"INI"),cfg:()=>z(K.config,"CFG"),conf:()=>z(K.config,"CNF"),liquid:()=>z(K.liquid,"LQ"),ejs:()=>z(K.html,"EJS"),hbs:()=>z(K.html,"HBS"),pug:()=>z(K.html,"PUG"),wasm:()=>z("#654FF0","WA"),proto:()=>z(K.config,"PB"),graphql:()=>z("#E535AB","GQL"),gql:()=>z("#E535AB","GQL")},go={dockerfile:()=>z(K.docker,"DK"),"docker-compose.yml":()=>z(K.docker,"DC"),"docker-compose.yaml":()=>z(K.docker,"DC"),".gitignore":()=>z(K.git,"GI"),".gitattributes":()=>z(K.git,"GA"),".gitmodules":()=>z(K.git,"GM"),".env":()=>z(K.env,"ENV"),".env.local":()=>z(K.env,"ENV"),".env.development":()=>z(K.env,"ENV"),".env.production":()=>z(K.env,"ENV"),"package.json":()=>z("#CB3837","NPM"),"package-lock.json":()=>z("#CB3837","NPM"),"tsconfig.json":()=>z(K.ts,"TSC"),eslintrc:()=>z("#4B32C3","ESL"),".eslintrc.js":()=>z("#4B32C3","ESL"),".eslintrc.json":()=>z("#4B32C3","ESL"),".prettierrc":()=>z("#F7B93E","PR"),makefile:()=>z(K.config,"MK"),"cmakelists.txt":()=>z("#064F8C","CM"),"readme.md":()=>z(K.md,"RM"),license:()=>z("#F5C518","LIC"),"license.md":()=>z("#F5C518","LIC"),"cargo.toml":()=>z(K.rs,"CG"),"go.mod":()=>z(K.go,"MOD"),"go.sum":()=>z(K.go,"SUM"),gemfile:()=>z(K.rb,"GEM"),rakefile:()=>z(K.rb,"RK"),"requirements.txt":()=>z(K.py,"REQ"),pipfile:()=>z(K.py,"PIP"),csproj:()=>z(K.cs,"CSP"),".sln":()=>z(K.cs,"SLN"),slnx:()=>z(K.cs,"SLN")}});function Gt(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Sm(e,t){if(!e||!t)return Gt(e);let s=[],n=(a,l)=>{if(!a)return;let c=new RegExp(a.source,a.flags),d;for(;(d=c.exec(e))!==null;){let u=d[1]!==void 0?d[1]:d[0],p=d.index+(d[1]!==void 0?d[0].indexOf(d[1]):0);if(s.push({start:p,end:p+u.length,cls:l}),!c.global)break}},i=t.commentType||"slash";if((i==="slash"||i==="both")&&(n(Ss.comment1,Ie.comment),n(Ss.commentBlock,Ie.comment)),(i==="hash"||i==="both")&&n(Ss.commentHash,Ie.comment),i==="html"&&n(t.commentHtml,Ie.comment),t.commentLine&&n(t.commentLine,Ie.comment),t.commentBlock&&n(t.commentBlock,Ie.comment),n(Ss.string,Ie.string),n(Ss.number,Ie.number),t.keywords&&n(t.keywords,Ie.keyword),t.builtins&&n(t.builtins,Ie.builtin),t.operators&&n(t.operators,Ie.operator),t.decorators&&n(t.decorators,Ie.decorator),t.macros&&n(t.macros,Ie.macro),t.preprocessor&&n(t.preprocessor,Ie.preprocessor),t.attributes&&n(t.attributes,Ie.attribute),t.tags&&n(t.tags,Ie.tag),t.properties&&n(t.properties,Ie.property),t.variables&&n(t.variables,Ie.variable),t.headings&&n(t.headings,Ie.heading),t.bold&&n(t.bold,Ie.bold),t.links&&n(t.links,Ie.link),t.keys&&n(t.keys,Ie.key),t.sections&&n(t.sections,Ie.section),t.selectors&&n(t.selectors,Ie.keyword),t.values&&n(t.values,Ie.number),t.code&&n(t.code,Ie.string),t.italic&&n(t.italic,Ie.builtin),t.attrs&&n(t.attrs,Ie.attribute),s.length===0)return Gt(e);s.sort((a,l)=>a.start-l.start||l.end-l.start-(a.end-a.start));let r="",o=0;for(let a of s)a.start<o||(a.start>o&&(r+=Gt(e.slice(o,a.start))),r+=`<span class="${a.cls}">${Gt(e.slice(a.start,a.end))}</span>`,o=a.end);return o<e.length&&(r+=Gt(e.slice(o))),r}function Cm(e){if(!e)return null;let t=e.split(".").pop()?.toLowerCase();if(!t)return null;let s=Qd[t];return typeof s=="string"&&(s=Qd[s]),s||null}function Xd(e,t){if(!e)return Gt(e||"");let s=Cm(t);return s?Sm(e,s):Gt(e)}var Ss,Qd,Ie,Zd=O(()=>{Ss={string:/("(?:[^"\\]|\\.)*")|('(?:[^'\\]|\\.)*')|(`(?:[^`\\]|\\.)*`)/g,number:/\b(\d+\.?\d*(?:[eE][+-]?\d+)?|0x[\da-fA-F]+|0b[01]+|0o[0-7]+)\b/g,comment1:/(\/\/.*$)/gm,commentHash:/(#.*$)/gm,commentBlock:/(\/\*.*?\*\/)/g},Qd={js:{keywords:/\b(const|let|var|function|class|extends|return|if|else|for|while|do|switch|case|break|continue|new|this|super|import|export|from|default|async|await|yield|try|catch|finally|throw|typeof|instanceof|in|of|delete|void|null|undefined|true|false|NaN|Infinity)\b/g,builtins:/\b(console|window|document|Math|JSON|Array|Object|String|Number|Boolean|Promise|Map|Set|WeakMap|WeakSet|Symbol|Proxy|Reflect|RegExp|Error|Date|parseInt|parseFloat|setTimeout|setInterval|clearTimeout|clearInterval|fetch|require|module|exports|process)\b/g,operators:/(=>|\.\.\.|\?\.|&&|\|\||===|!==|==|!=|>=|<=|>>>=|>>>|>>=|<<=|\+\+|--|[+\-*/%&|^~!<>]=?|\?|:)/g},ts:"js",jsx:"js",tsx:"js",mjs:"js",cjs:"js",vue:"js",py:{keywords:/\b(def|class|return|if|elif|else|for|while|break|continue|pass|import|from|as|with|try|except|finally|raise|yield|lambda|and|or|not|is|in|True|False|None|global|nonlocal|del|assert|async|await)\b/g,builtins:/\b(print|len|range|int|float|str|bool|list|dict|set|tuple|type|isinstance|super|property|staticmethod|classmethod|enumerate|zip|map|filter|sorted|reversed|open|input|hasattr|getattr|setattr|id|hex|oct|bin|abs|max|min|sum|all|any|iter|next)\b/g,decorators:/(@\w+)/g,commentType:"hash"},rb:{keywords:/\b(def|class|module|end|return|if|elsif|else|unless|for|while|until|do|break|next|case|when|begin|rescue|ensure|raise|yield|require|include|extend|attr_accessor|attr_reader|attr_writer|self|super|nil|true|false|and|or|not|then|puts|print)\b/g,commentType:"hash"},go:{keywords:/\b(func|package|import|var|const|type|struct|interface|map|chan|go|select|switch|case|default|if|else|for|range|break|continue|return|defer|fallthrough|nil|true|false|iota)\b/g,builtins:/\b(fmt|make|len|cap|append|copy|delete|close|panic|recover|new|error|string|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float32|float64|bool|byte|rune|complex64|complex128)\b/g},rs:{keywords:/\b(fn|let|mut|const|pub|mod|use|struct|enum|impl|trait|where|for|loop|while|if|else|match|return|break|continue|move|ref|self|Self|super|crate|as|in|unsafe|async|await|dyn|true|false|Some|None|Ok|Err)\b/g,builtins:/\b(String|Vec|Box|Rc|Arc|Option|Result|HashMap|HashSet|println|eprintln|format|panic|todo|unimplemented|assert|assert_eq|assert_ne|dbg|cfg|derive|macro_rules)\b/g,macros:/(\w+!)/g},java:{keywords:/\b(class|interface|extends|implements|public|private|protected|static|final|abstract|synchronized|volatile|transient|native|new|return|if|else|for|while|do|switch|case|default|break|continue|try|catch|finally|throw|throws|import|package|this|super|void|null|true|false|instanceof)\b/g,builtins:/\b(System|String|Integer|Long|Double|Float|Boolean|List|ArrayList|Map|HashMap|Set|HashSet|Optional|Stream|Object|Exception|RuntimeException|Thread|Runnable|Override|Deprecated)\b/g},cs:{keywords:/\b(class|struct|interface|enum|record|delegate|event|namespace|using|public|private|protected|internal|static|readonly|const|sealed|abstract|virtual|override|new|return|if|else|for|foreach|while|do|switch|case|default|break|continue|try|catch|finally|throw|async|await|yield|var|dynamic|is|as|in|out|ref|params|this|base|null|true|false|void|get|set|init|required|partial|where|select|from|orderby|group|join|let|into)\b/g,builtins:/\b(Console|String|Int32|Int64|Double|Boolean|List|Dictionary|HashSet|Task|IEnumerable|ILogger|IOptions|IFeatures|Exception|Guid|DateTime|TimeSpan|CancellationToken|Action|Func|Span|Memory|ReadOnlySpan)\b/g,attributes:/(\[[\w]+(?:\(.*?\))?\])/g},cpp:{keywords:/\b(class|struct|enum|union|namespace|using|template|typename|public|private|protected|static|const|constexpr|volatile|virtual|override|final|explicit|inline|extern|auto|decltype|new|delete|return|if|else|for|while|do|switch|case|default|break|continue|try|catch|throw|sizeof|alignof|typeid|static_cast|dynamic_cast|reinterpret_cast|const_cast|nullptr|true|false|void|this|operator|friend|noexcept|co_await|co_yield|co_return|concept|requires)\b/g,builtins:/\b(std|string|vector|map|unordered_map|set|array|pair|tuple|shared_ptr|unique_ptr|weak_ptr|optional|variant|any|cout|cin|endl|printf|scanf|malloc|free|sizeof|size_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t)\b/g,preprocessor:/(#\s*(?:include|define|undef|if|ifdef|ifndef|else|elif|endif|pragma|error|warning).*$)/gm},c:"cpp",h:"cpp",hpp:"cpp",html:{tags:/(<\/?[\w-]+|>|\/>)/g,attrs:/\b([\w-]+)(?==)/g,commentType:"html",commentHtml:/(<!--[\s\S]*?-->)/g},xml:"html",svg:"html",css:{selectors:/([\w.#\[\]:,>+~*-]+)\s*\{/g,properties:/\b([\w-]+)(?=\s*:)/g,values:/:\s*([^;{}]+)/g,commentType:"block"},scss:"css",less:"css",json:{keys:/("[\w.-]+")\s*:/g,commentType:"none"},yaml:{keys:/([\w.-]+)\s*:/g,commentType:"hash"},yml:"yaml",md:{headings:/^(#{1,6}\s.*)$/gm,bold:/(\*\*[^*]+\*\*|__[^_]+__)/g,italic:/(\*[^*]+\*|_[^_]+_)/g,code:/(`[^`]+`)/g,links:/(\[[^\]]+\]\([^)]+\))/g,commentType:"none"},sh:{keywords:/\b(if|then|else|elif|fi|for|while|do|done|case|esac|function|return|exit|echo|export|local|readonly|unset|set|shift|eval|exec|trap|source|alias|cd|pwd|ls|mkdir|rm|cp|mv|cat|grep|sed|awk|find|xargs|sort|uniq|wc|head|tail|tee|cut|tr|test)\b/g,variables:/(\$\{?\w+\}?|\$\(|\$\{)/g,commentType:"hash"},bash:"sh",zsh:"sh",sql:{keywords:/\b(SELECT|FROM|WHERE|AND|OR|NOT|IN|LIKE|BETWEEN|JOIN|LEFT|RIGHT|INNER|OUTER|FULL|ON|AS|GROUP|BY|ORDER|HAVING|LIMIT|OFFSET|INSERT|INTO|VALUES|UPDATE|SET|DELETE|CREATE|ALTER|DROP|TABLE|INDEX|VIEW|TRIGGER|FUNCTION|PROCEDURE|BEGIN|END|IF|ELSE|THEN|CASE|WHEN|DECLARE|EXEC|UNION|ALL|DISTINCT|TOP|EXISTS|NULL|IS|ASC|DESC|PRIMARY|KEY|FOREIGN|REFERENCES|CONSTRAINT|DEFAULT|CHECK|UNIQUE|CASCADE|TRUNCATE|COMMIT|ROLLBACK|GRANT|REVOKE)\b/gi,commentType:"both"},lua:{keywords:/\b(and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/g,builtins:/\b(print|type|tostring|tonumber|pairs|ipairs|next|select|unpack|error|pcall|xpcall|assert|require|table|string|math|io|os|coroutine|setmetatable|getmetatable|rawget|rawset)\b/g,commentLine:/(--(?!\[).*$)/gm,commentBlock:/(--\[\[[\s\S]*?\]\])/g},php:{keywords:/\b(function|class|interface|trait|extends|implements|public|private|protected|static|final|abstract|const|var|new|return|if|else|elseif|for|foreach|while|do|switch|case|default|break|continue|try|catch|finally|throw|use|namespace|require|include|require_once|include_once|echo|print|die|exit|null|true|false|array|list|match|fn|yield|from)\b/g,variables:/(\$\w+)/g},swift:{keywords:/\b(func|class|struct|enum|protocol|extension|let|var|guard|if|else|for|while|repeat|switch|case|default|break|continue|return|throw|try|catch|defer|import|typealias|associatedtype|init|deinit|subscript|operator|precedencegroup|self|Self|super|nil|true|false|is|as|in|inout|throws|rethrows|where|some|any|weak|unowned|lazy|mutating|nonmutating|override|final|required|convenience|optional|dynamic|async|await|actor|nonisolated|isolated|sending|consuming|borrowing)\b/g},kt:{keywords:/\b(fun|class|object|interface|val|var|if|else|when|for|while|do|return|break|continue|throw|try|catch|finally|import|package|as|is|in|out|by|init|constructor|companion|data|sealed|enum|abstract|open|override|private|protected|internal|public|inline|reified|suspend|coroutine|null|true|false|this|super|it|typealias|annotation|lateinit|lazy|get|set)\b/g},dart:{keywords:/\b(class|extends|implements|with|mixin|abstract|sealed|base|interface|final|const|var|late|required|dynamic|void|static|return|if|else|for|while|do|switch|case|default|break|continue|try|catch|finally|throw|rethrow|assert|new|this|super|null|true|false|is|as|in|async|await|yield|import|export|library|part|show|hide|deferred|typedef|enum|extension|on)\b/g},r:{keywords:/\b(if|else|for|while|repeat|function|return|break|next|in|TRUE|FALSE|NULL|NA|Inf|NaN|library|require|source|print|cat|paste|paste0|sprintf|stop|warning|message)\b/g,commentType:"hash"},toml:{keys:/([\w.-]+)\s*=/g,sections:/(\[[\w.]+\])/g,commentType:"hash"},proto:{keywords:/\b(syntax|package|import|option|message|enum|service|rpc|returns|repeated|optional|required|map|oneof|reserved|extensions|extend|group|default|packed|deprecated|java_package|java_outer_classname|optimize_for|cc_enable_arenas|objc_class_prefix|csharp_namespace|swift_prefix|php_class_prefix|php_namespace|ruby_package|string|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|float|double|bool|bytes)\b/g}},Ie={keyword:"hl-kw",builtin:"hl-bi",string:"hl-st",number:"hl-nm",comment:"hl-cm",operator:"hl-op",decorator:"hl-dc",macro:"hl-mc",preprocessor:"hl-pp",attribute:"hl-at",tag:"hl-tg",property:"hl-pr",variable:"hl-vr",heading:"hl-hd",bold:"hl-bd",link:"hl-lk",key:"hl-ky",section:"hl-sc"}});function Jd(e,t,s){let n=[],i=0,r=0;if(t!=null){let f=t.split(`
|
|
1830
1830
|
`);for(let g=0;g<f.length;g++)n.push({type:"addition",oldNum:"",oldText:"",newNum:g+1,newText:f[g]}),i++;return{lines:n,stats:{additions:i,deletions:0},content:t}}if(!e||e.trim()==="")return{lines:[{type:"context",oldNum:"",oldText:s("git.noDiff"),newNum:"",newText:s("git.noDiff")}],stats:{additions:0,deletions:0},content:""};if(e.includes("Binary files")&&e.includes("differ"))return{lines:[{type:"context",oldNum:"",oldText:s("git.binaryFile"),newNum:"",newText:s("git.binaryFile")}],stats:{additions:0,deletions:0},content:e};let o=e.split(`
|
|
1831
1831
|
`),a=0,l=0,c=!1,d=[],u=[],p=()=>{let f=Math.max(d.length,u.length);for(let g=0;g<f;g++){let v=d[g],y=u[g];v&&y?n.push({type:"modification",oldNum:v.num,oldText:v.text,newNum:y.num,newText:y.text}):v?n.push({type:"deletion",oldNum:v.num,oldText:v.text,newNum:"",newText:""}):y&&n.push({type:"addition",oldNum:"",oldText:"",newNum:y.num,newText:y.text})}d=[],u=[]};for(let f of o){if(f.startsWith("diff --git")||f.startsWith("index ")||f.startsWith("---")||f.startsWith("+++")||f.startsWith("\\"))continue;let g=f.match(/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);if(g){p(),a=parseInt(g[1]),l=parseInt(g[2]),c=!0,n.push({type:"hunk",oldNum:"\xB7\xB7\xB7",oldText:f,newNum:"\xB7\xB7\xB7",newText:f});continue}if(c)if(f.startsWith("-"))u.length>0&&d.length===0&&p(),d.push({num:a++,text:f.substring(1)}),r++;else if(f.startsWith("+"))u.push({num:l++,text:f.substring(1)}),i++;else{p();let v=f.startsWith(" ")?f.substring(1):f;n.push({type:"context",oldNum:a++,oldText:v,newNum:l++,newText:v})}}return p(),{lines:n,stats:{additions:i,deletions:r},content:e}}var eu=O(()=>{});function tu(e,t){let{effectiveGitWorkDir:s,gitOperating:n,gitOpFeedback:i,commitMessage:r}=t,o=null,a=null,l=(b,m)=>{o&&clearTimeout(o),i.value={ok:b,message:m},o=setTimeout(()=>{i.value=null},4e3)},c=(b,m)=>{e.currentAgent&&(b.value=!0,m.value="",e.sendWsMessage({type:"git_status",conversationId:e.currentConversation||"_explorer",agentId:e.currentAgent,workDir:s.value,_clientId:e.clientId}))},d=(b,m={})=>{e.currentAgent&&(n.value=!0,a&&clearTimeout(a),a=setTimeout(()=>{n.value&&(n.value=!1,l(!1,"Operation timed out"))},15e3),e.sendWsMessage({type:b,conversationId:e.currentConversation||"_explorer",agentId:e.currentAgent,workDir:s.value,_clientId:e.clientId,...m}))};return{showFeedback:l,loadGitStatus:c,gitOp:d,stageFile:b=>d("git_add",{filePath:b}),unstageFile:b=>d("git_reset",{filePath:b}),discardFile:b=>{confirm("Discard changes to "+b+"?")&&d("git_restore",{filePath:b})},stageAll:()=>d("git_add",{addAll:!0}),unstageAll:()=>d("git_reset",{resetAll:!0}),commitChanges:()=>{let b=r.value.trim();b&&d("git_commit",{commitMessage:b})},pushChanges:()=>d("git_push"),handleGitOpResult:(b,m)=>{n.value=!1,a&&(clearTimeout(a),a=null),b.success?(l(!0,b.message||b.operation+" succeeded"),b.operation==="commit"&&(r.value=""),m()):l(!1,b.error||b.operation+" failed")},cleanup:()=>{o&&clearTimeout(o),a&&clearTimeout(a)}}}var su=O(()=>{});function nu(e,t){let s=Vue.ref(!1),n=Vue.ref(""),i=Vue.ref([]),r=Vue.ref(!1),o=Vue.ref(""),a=g=>{r.value=!0,o.value="",e.sendWsMessage({type:"list_directory",conversationId:"_git_folder_picker",agentId:e.currentAgent,dirPath:g,workDir:t.value,_clientId:e.clientId})};return{folderPickerOpen:s,folderPickerPath:n,folderPickerEntries:i,folderPickerLoading:r,folderPickerSelected:o,openFolderPicker:()=>{s.value=!0,o.value="",r.value=!0;let g=t.value||"";n.value=g,i.value=[],e.sendWsMessage({type:"list_directory",conversationId:"_git_folder_picker",agentId:e.currentAgent,dirPath:g,workDir:t.value,_clientId:e.clientId})},folderPickerNavigateUp:()=>{if(!n.value)return;let g=n.value.includes("\\"),v=g?"\\":"/",y=n.value.replace(/[/\\]$/,"").split(/[/\\]/);if(y.pop(),y.length===0)n.value="",a("");else if(g&&y.length===1&&/^[A-Za-z]:$/.test(y[0]))n.value=y[0]+"\\",a(y[0]+"\\");else{let A=y.join(v);n.value=A,a(A)}},folderPickerSelectItem:g=>{o.value=g.name},folderPickerEnter:g=>{let v=n.value.includes("\\")||/^[A-Z]:/.test(g.name)?"\\":"/",y;n.value?y=n.value.replace(/[/\\]$/,"")+v+g.name:y=g.name+(g.name.endsWith("\\")?"":"\\"),n.value=y,a(y)},confirmFolderPicker:(g,v)=>{let y=n.value;if(y){if(o.value){let A=y.includes("\\")?"\\":"/";y=y.replace(/[/\\]$/,"")+A+o.value}g.value=y,s.value=!1,v()}},handleDirectoryListing:g=>g.conversationId!=="_git_folder_picker"?!1:(r.value=!1,i.value=(g.entries||[]).filter(v=>v.type==="directory").sort((v,y)=>v.name.localeCompare(y.name)),g.dirPath!=null&&(n.value=g.dirPath),!0)}}var iu=O(()=>{});var ru,ou=O(()=>{mo();Zd();eu();su();iu();ru={name:"GitStatusTab",template:`
|
|
1832
1832
|
<div class="git-status-tab git-three-col">
|
|
Binary file
|
package/package.json
CHANGED
package/terminal.js
CHANGED
|
@@ -58,11 +58,19 @@ export async function loadNodePty() {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
function terminalRoutingFields(source) {
|
|
62
|
+
return {
|
|
63
|
+
...(source?._requestUserId ? { _requestUserId: source._requestUserId } : {}),
|
|
64
|
+
...(source?._requestClientId ? { _requestClientId: source._requestClientId } : {}),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
61
68
|
export async function handleTerminalCreate(msg) {
|
|
62
69
|
const { conversationId, cols, rows } = msg;
|
|
63
70
|
const terminalId = msg.terminalId || conversationId;
|
|
64
71
|
const conv = ctx.conversations.get(conversationId);
|
|
65
72
|
const workDir = conv?.workDir || ctx.CONFIG.workDir;
|
|
73
|
+
const routingFields = terminalRoutingFields(msg);
|
|
66
74
|
|
|
67
75
|
// 如果已存在终端,先关闭
|
|
68
76
|
if (ctx.terminals.has(terminalId)) {
|
|
@@ -80,7 +88,8 @@ export async function handleTerminalCreate(msg) {
|
|
|
80
88
|
type: 'terminal_error',
|
|
81
89
|
conversationId,
|
|
82
90
|
terminalId,
|
|
83
|
-
message: 'Terminal backend is not installed. Run: npm install'
|
|
91
|
+
message: 'Terminal backend is not installed. Run: npm install',
|
|
92
|
+
...routingFields,
|
|
84
93
|
});
|
|
85
94
|
return;
|
|
86
95
|
}
|
|
@@ -123,7 +132,8 @@ export async function handleTerminalCreate(msg) {
|
|
|
123
132
|
type: 'terminal_output',
|
|
124
133
|
conversationId,
|
|
125
134
|
terminalId,
|
|
126
|
-
data: buffer
|
|
135
|
+
data: buffer,
|
|
136
|
+
...routingFields,
|
|
127
137
|
});
|
|
128
138
|
buffer = '';
|
|
129
139
|
timer = null;
|
|
@@ -138,7 +148,8 @@ export async function handleTerminalCreate(msg) {
|
|
|
138
148
|
type: 'terminal_output',
|
|
139
149
|
conversationId,
|
|
140
150
|
terminalId,
|
|
141
|
-
data: buffer
|
|
151
|
+
data: buffer,
|
|
152
|
+
...routingFields,
|
|
142
153
|
});
|
|
143
154
|
buffer = '';
|
|
144
155
|
}
|
|
@@ -149,7 +160,8 @@ export async function handleTerminalCreate(msg) {
|
|
|
149
160
|
ctx.sendToServer({
|
|
150
161
|
type: 'terminal_closed',
|
|
151
162
|
conversationId,
|
|
152
|
-
terminalId
|
|
163
|
+
terminalId,
|
|
164
|
+
...routingFields,
|
|
153
165
|
});
|
|
154
166
|
});
|
|
155
167
|
|
|
@@ -159,7 +171,8 @@ export async function handleTerminalCreate(msg) {
|
|
|
159
171
|
cols: cols || 80,
|
|
160
172
|
rows: rows || 24,
|
|
161
173
|
buffer: '',
|
|
162
|
-
timer: null
|
|
174
|
+
timer: null,
|
|
175
|
+
...routingFields,
|
|
163
176
|
});
|
|
164
177
|
|
|
165
178
|
console.log(`[PTY] Created terminal ${terminalId} for ${conversationId} in ${workDir}`);
|
|
@@ -167,7 +180,8 @@ export async function handleTerminalCreate(msg) {
|
|
|
167
180
|
type: 'terminal_created',
|
|
168
181
|
conversationId,
|
|
169
182
|
terminalId,
|
|
170
|
-
success: true
|
|
183
|
+
success: true,
|
|
184
|
+
...routingFields,
|
|
171
185
|
});
|
|
172
186
|
} catch (e) {
|
|
173
187
|
console.error(`[PTY] Failed to create terminal:`, e.message);
|
|
@@ -175,7 +189,8 @@ export async function handleTerminalCreate(msg) {
|
|
|
175
189
|
type: 'terminal_error',
|
|
176
190
|
conversationId,
|
|
177
191
|
terminalId,
|
|
178
|
-
message: `Failed to create terminal: ${e.message}
|
|
192
|
+
message: `Failed to create terminal: ${e.message}`,
|
|
193
|
+
...routingFields,
|
|
179
194
|
});
|
|
180
195
|
}
|
|
181
196
|
}
|
|
@@ -220,7 +235,8 @@ export function handleTerminalClose(msg) {
|
|
|
220
235
|
ctx.sendToServer({
|
|
221
236
|
type: 'terminal_closed',
|
|
222
237
|
conversationId: term.conversationId || msg.conversationId,
|
|
223
|
-
terminalId
|
|
238
|
+
terminalId,
|
|
239
|
+
...terminalRoutingFields(term),
|
|
224
240
|
});
|
|
225
241
|
}
|
|
226
242
|
}
|