zen-gitsync 2.16.9 → 2.16.10

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.
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-Dje8Rg13.js","assets/rolldown-runtime-BM3Ffeng.js","assets/monaco-B2lPvkrc.css","assets/ProjectStartupButton-D7mgEsmf.js","assets/_plugin-vue_export-helper-B9cwfrdH.js","assets/vendor-exjCs1jx.js","assets/element-plus-BId3Dnij.js","assets/element-plus-D3Dn7nX0.css","assets/vendor-DVvq7qtS.css","assets/CommonDialog-Tlk0Fa7g.js","assets/SvgIcon-Diox29ks.js","assets/SvgIcon-CDNsk4-Q.css","assets/CommonDialog-ChSKsEz2.css","assets/configStore-B8X980y1.js","assets/ProjectStartupButton-QLPltCK5.css","assets/FlowOrchestrationWorkspace-CVYPdN7a.js","assets/vue-flow-Dj_X_Vr1.js","assets/vue-flow-CavUTEzp.css","assets/dagre-BCXBo6I9.js","assets/UserInputNode-CYxFuwuS.js","assets/UserInputNode-BVgQkB2l.css","assets/FlowOrchestrationWorkspace-CYGp-PqS.css","assets/FlowExecutionViewer-CFpiqZ2C.js","assets/FlowExecutionViewer-jNHI5zdm.css","assets/CommitForm-CTa0pupJ.js","assets/CommitForm-DdK8dymc.css","assets/LogList-B4rrapVn.js","assets/LogList-CeFFytjB.css","assets/RemoteRepoCard-B-5MDx8k.js","assets/RemoteRepoCard-BRGNlbeO.css","assets/AppVersionBadge-Cwg6vOMz.js","assets/AppVersionBadge-CS7Trvp-.css","assets/BranchSelector-DgxIB9XY.js","assets/BranchSelector-B0eLkAdv.css","assets/EditorView-BOZPwTxr.js","assets/flow-mindmap-DnyDhwJv.js","assets/flow-mindmap-DCVd8Ppe.css","assets/EditorView-BVod-rjn.css","assets/SourceMapView-C3gZ5s1r.js","assets/SourceMapView-BNRjvgzH.css","assets/WorkbenchView-BE53JHac.js","assets/WorkbenchView-DbF4hH5s.css","assets/MonitorView-C2EyggDk.js","assets/MonitorView-TaS4kL0Y.css","assets/MindmapView-C1pPUu8W.js","assets/MindmapView-BQTqx842.css","assets/AgentView-CioAzh-a.js","assets/AgentView-8-xsOmE6.css"])))=>i.map(i=>d[i]);
2
- import{o as e,r as t}from"./rolldown-runtime-BM3Ffeng.js";import{$t as n,A as r,At as i,B as a,Cn as o,D as s,Dn as c,E as l,En as u,Et as d,Fn as f,G as p,Gt as m,H as h,Hn as g,Ht as _,In as v,It as y,Jn as b,K as x,Kt as S,L as C,Ln as ee,Lt as te,M as w,Mn as ne,Nn as T,O as re,P as ie,Pt as ae,Q as E,Qt as D,R as O,Rn as oe,Rt as se,S as ce,Sn as k,St as le,T as A,Tn as j,Tt as ue,U as M,Un as N,Ut as de,V as P,Vn as F,W as fe,Wn as pe,Wt as me,Xn as I,Xt as he,Y as ge,Yt as _e,Z as ve,Zn as L,Zt as ye,_ as be,_n as R,_r as z,a as xe,ar as Se,at as Ce,bn as B,bt as we,cn as Te,ct as Ee,d as De,dn as Oe,dt as ke,en as V,et as Ae,f as je,ft as Me,g as Ne,gn as H,gr as Pe,h as Fe,hn as U,i as W,it as Ie,jt as Le,k as Re,ln as ze,lt as Be,m as Ve,mn as G,mr as K,mt as He,nn as Ue,o as We,on as Ge,or as Ke,p as qe,pt as Je,q as Ye,qt as Xe,r as Ze,s as Qe,sn as q,sr as J,st as $e,tn as et,tt,un as Y,vn as X,vt as nt,wn as rt,x as it,y as at,yt as ot,z as st,zn as Z,zt as ct}from"./element-plus-BId3Dnij.js";import{_a as lt,da as ut,fa as dt,ga as ft,ha as pt,ua as mt}from"./vendor-exjCs1jx.js";import{i as ht,n as Q,t as $}from"./_plugin-vue_export-helper-B9cwfrdH.js";import{t as gt}from"./SvgIcon-Diox29ks.js";import{n as _t,t as vt}from"./CommonDialog-Tlk0Fa7g.js";import{t as yt}from"./socket-io-CGezBd--.js";import{n as bt,t as xt}from"./configStore-B8X980y1.js";import{Bt as St,Ft as Ct,It as wt,Lt as Tt,Rt as Et,zt as Dt}from"./monaco-Dje8Rg13.js";import"./vue-flow-Dj_X_Vr1.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function Ot(e){if(!e)return`Zen GitSync`;let t=e.replace(/\\/g,`/`).split(`/`).filter(e=>e);return t.length>0?t[t.length-1]:`Zen GitSync`}var kt=j({__name:`TreeIcon`,props:{size:{type:[String,Number],required:!1,default:`1em`}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,`__isScriptSetup`,{enumerable:!1,value:!0}),n}}),At=[`width`,`height`];function jt(e,t,n,r,i,a){return Z(),X(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,width:n.size,height:n.size,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`},[R(` 垂直主线 `),t[0]||=U(`line`,{x1:`3`,y1:`2`,x2:`3`,y2:`14`},null,-1),R(` 第一个分支 `),t[1]||=U(`line`,{x1:`3`,y1:`4`,x2:`6`,y2:`4`},null,-1),t[2]||=U(`rect`,{x:`2`,y:`3`,width:`8`,height:`2`,rx:`0.5`,fill:`currentColor`,stroke:`none`},null,-1),R(` 第二个分支 `),t[3]||=U(`line`,{x1:`3`,y1:`8`,x2:`6`,y2:`8`},null,-1),t[4]||=U(`rect`,{x:`4`,y:`7`,width:`8`,height:`2`,rx:`0.5`,fill:`currentColor`,stroke:`none`},null,-1),R(` 第三个分支 `),t[5]||=U(`line`,{x1:`3`,y1:`12`,x2:`6`,y2:`12`},null,-1),t[6]||=U(`rect`,{x:`6`,y:`11`,width:`8`,height:`2`,rx:`0.5`,fill:`currentColor`,stroke:`none`},null,-1)],8,At)}var Mt=$(kt,[[`render`,jt],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/icons/TreeIcon.vue`]]),Nt=j({__name:`ListIcon`,props:{size:{type:[String,Number],required:!1,default:`1em`}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,`__isScriptSetup`,{enumerable:!1,value:!0}),n}}),Pt=[`width`,`height`];function Ft(e,t,n,r,i,a){return Z(),X(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,width:n.size,height:n.size,fill:`currentColor`,stroke:`none`},[R(` 简洁的列表图标 - 三条横线 `),t[0]||=U(`rect`,{x:`2`,y:`3`,width:`12`,height:`2`,rx:`0.5`},null,-1),t[1]||=U(`rect`,{x:`2`,y:`7`,width:`12`,height:`2`,rx:`0.5`},null,-1),t[2]||=U(`rect`,{x:`2`,y:`11`,width:`12`,height:`2`,rx:`0.5`},null,-1)],8,Pt)}var It=$(Nt,[[`render`,Ft],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/icons/ListIcon.vue`]]),Lt=new Set([`5173`,`4173`,`5544`]),Rt=3e3;function zt(){if(typeof window>`u`)return Rt;let e=window.location.port||`80`;if(Lt.has(e)){{let e=5546;if(!Number.isNaN(e))return e}return Rt}let t=parseInt(e,10);return Number.isNaN(t)?Rt:t}var Bt=800,Vt=zt(),Ht=ft(`git`,()=>{let e=xt(),t=J(``),n=J([]),r=J(``),i=J(``),a=J(!1),o=J(!1),s=J(!1),c=J(0),l=J(``),u=J(!1),d=J(!1),f=J(!1),p=J(!1),m=J(!1),h=J(!1),g=J(0),_=J(0),v=J(!1),y=J(``),b=J(0),x=J(``),S=J(null),C=J(``),te=J(``),w=J([]),ne=J({staged:[],unstaged:[],untracked:[]}),T=J([]),re=J(!1),ie=J(!1),ae=J(!1),E=J(!1),D=J(!1),O=J(1),se=J(!0),ce=J(0),k=J([]),le=J(!1),A=J(!1),j=J(!1),ue=J(!1);function M(){t.value=``,n.value=[],r.value=``,i.value=``,a.value=!1,o.value=!1,s.value=!1,c.value=0,g.value=0,_.value=0,v.value=!1,y.value=``,b.value=0,d.value=!1,f.value=!1,p.value=!1,m.value=!1,l.value=``,u.value=!1,w.value=[],ne.value={staged:[],unstaged:[],untracked:[]},T.value=[],re.value=!1,ie.value=!1,ae.value=!1,E.value=!1,D.value=!1,O.value=1,se.value=!0,ce.value=0}async function N(e=!1,t=!1){if(s.value)try{console.log(Q(`@C298B:获取分支状态...`));let n=`/api/branch-status`,r=[];e&&r.push(`force=true`),t&&r.push(`countOnly=true`),r.length>0&&(n+=`?`+r.join(`&`));let i=await(await fetch(n)).json();i&&(g.value=i.ahead||0,_.value=i.behind||0,v.value=i.hasUpstream||!1,y.value=i.upstreamBranch||``,console.log(`${Q(`@C298B:分支状态更新:领先 `)}${g.value}${Q(`@C298B: 个提交,落后 `)}${_.value}${Q(`@C298B: 个提交,上游分支:`)}${v.value?y.value:Q(`@C298B:无`)}`))}catch(e){console.error(`获取分支状态失败:`,e),g.value=0,_.value=0,v.value=!1,y.value=``}}async function de(){let e=Date.now();if(e-c.value<1e3)return console.log(`使用缓存的Git仓库状态:`,s.value?`是`:Q(`@C298B:不是`)),s.value;try{return s.value=(await(await fetch(`/api/current_directory`)).json()).isGitRepo===!0,c.value=e,console.log(`${Q(`@C298B:当前目录`)}${s.value?Q(`@C298B:是`):Q(`@C298B:不是`)}${Q(`@C298B:Git仓库`)}`),s.value}catch(t){return console.error(`检查Git仓库状态失败:`,t),s.value=!1,c.value=e,!1}}async function P(e=!1){try{let n=await(await fetch(e?`/api/branch?force=true`:`/api/branch`)).json();n.branch&&(t.value=n.branch,console.log(`${Q(`@C298B:当前分支更新为: `)}${n.branch}${e?Q(`@C298B: (强制刷新)`):``}`))}catch(e){console.error(`获取分支信息失败:`,e)}}async function F(){if(s.value)try{console.log(Q(`@C298B:获取所有分支...`));let e=await(await fetch(`/api/branches`)).json();e.branches&&Array.isArray(e.branches)&&(n.value=e.branches,b.value=Date.now(),console.log(`${Q(`@C298B:获取到`)}${e.branches.length}${Q(`@C298B:个分支`)}`))}catch(e){console.error(`获取所有分支信息失败:`,e)}}async function fe(e){console.log(`切换到分支:`,e);try{a.value=!0;let t=await(await fetch(`/api/checkout`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({branch:e})})).json();return t.success?(W({message:`${Q(`@C298B:已切换到分支: `)}${e}`,type:`success`}),await P(!0),await N(!0),!0):(W({message:`${Q(`@C298B:切换分支失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:切换分支失败: `)}${e.message}`,type:`error`}),!1}finally{a.value=!1}}async function pe(){try{let e=await(await fetch(`/api/user-info`)).json();e.name&&e.email&&(r.value=e.name,i.value=e.email)}catch(e){console.error(`获取用户信息失败:`,e)}}async function me(e,n){if(!e.trim())return W({message:Q(`@C298B:分支名称不能为空`),type:`warning`}),!1;try{o.value=!0;let r=await(await fetch(`/api/create-branch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newBranchName:e,baseBranch:n||t.value})})).json();return r.success?(W({message:`${Q(`@C298B:已创建并切换到分支: `)}${e}`,type:`success`}),await P(!0),await N(!0),await F(),!0):(W({message:`${Q(`@C298B:创建分支失败: `)}${r.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:创建分支失败: `)}${e.message}`,type:`error`}),!1}finally{o.value=!1}}async function I(){try{let e=await(await fetch(`/api/clear-user-config`,{method:`POST`})).json();return e.success?(r.value=``,i.value=``,W({message:Q(`@C298B:已清除Git用户配置`),type:`success`}),!0):(W({message:`${Q(`@C298B:清除配置失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:清除配置失败: `)}${e.message}`,type:`error`}),!1}}async function he(e,t){try{let n=await(await fetch(`/api/restore-user-config`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e,email:t})})).json();return n.success?(r.value=e,i.value=t,W({message:Q(`@C298B:已恢复Git用户配置`),type:`success`}),!0):(W({message:`${Q(`@C298B:恢复配置失败: `)}${n.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:恢复配置失败: `)}${e.message}`,type:`error`}),!1}}async function ge(){if(!s.value)return W({message:Q(`@C298B:当前目录不是Git仓库`),type:`warning`}),{success:!1,needsMerge:!1,error:Q(`@C298B:当前目录不是Git仓库`),fullError:``,pullOutput:``};try{f.value=!0;let e=await(await fetch(`/api/pull`,{method:`POST`})).json();if(e.success){W({message:Q(`@C298B:拉取成功`),type:`success`}),await N(!0);let t=(e.message||``).toString(),n=!/already up to date|已经是最新的|already up-to-date/i.test(t);return n&&await R(),{success:!0,hadChanges:n}}else return{success:!1,needsMerge:e.needsMerge||!1,error:e.error||``,fullError:e.fullError||e.error||``,pullOutput:e.pullOutput||``}}catch(e){return{success:!1,needsMerge:!1,error:e.message,fullError:e.message,pullOutput:``}}finally{f.value=!1}}async function _e(){if(!s.value)return!1;if(!v.value)return console.log(`[bootFetch] no upstream, skip`),!1;try{p.value=!0;let e=_.value;console.log(`[bootFetch] start silent fetch --all, beforeBehind=${e}`);let t=await(await fetch(`/api/fetch-all`,{method:`POST`})).json();if(!t.success)return console.warn(`[bootFetch] fetch --all failed:`,t.error),!1;await N(!0);let n=_.value,r=n<e;return console.log(`[bootFetch] afterBehind=${n}, hasNewRemoteCommits=${r}`),r?(await be(!0),!0):!1}catch(e){return console.warn(`[bootFetch] silent fetch error (ignored):`,e.message),!1}finally{p.value=!1}}async function ve(){if(!s.value)return W({message:Q(`@C298B:当前目录不是Git仓库`),type:`warning`}),!1;try{p.value=!0;let e=await(await fetch(`/api/fetch-all`,{method:`POST`})).json();return e.success?(W({message:Q(`@C298B:获取所有远程分支信息成功`),type:`success`}),await N(),!0):(W({message:`${Q(`@C298B:获取远程分支信息失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:获取远程分支信息失败: `)}${e.message}`,type:`error`}),!1}finally{p.value=!1}}async function L(){S.value&&(Ge(),S.value.disconnect());try{let e=`http://localhost:${Vt}`;if(console.log(`尝试连接Socket.IO服务器:`,e),S.value=yt(e,{reconnectionDelayMax:1e4,reconnection:!0,reconnectionAttempts:10,reconnectionDelay:1e3,timeout:2e4,autoConnect:!0,forceNew:!0,transports:[`websocket`,`polling`]}),!S.value){console.error(`Socket.IO初始化失败: socket为null`);return}console.log(Q(`@C298B:Socket.IO客户端已创建,开始注册事件监听器...`)),S.value.on(`connect`,()=>{console.log(`✅ Socket.IO连接成功,事件监听器已生效,Socket ID:`,S.value?.id)}),S.value.on(`project_info`,e=>{C.value=e.projectPath,te.value=e.projectRoomId,console.log(`${Q(`@C298B:当前项目: `)}${e.projectPath}`),console.log(`${Q(`@C298B:房间ID: `)}${e.projectRoomId}`)}),S.value.on(`project_changed`,e=>{console.log(`${Q(`@C298B:项目已切换: `)}${e.oldProjectPath} -> ${e.newProjectPath}`),C.value=e.newProjectPath,te.value=e.newProjectRoomId,S.value&&S.value.emit(`join_room`,e.newProjectRoomId),console.log(`${Q(`@C298B:已加入新项目房间: `)}${e.newProjectRoomId}`)}),S.value.on(`disconnect`,e=>{console.log(`与Socket.IO服务器断开连接:`,e)}),S.value.on(`git_status_update`,e=>{if(console.log(`✅ 成功监听到 git_status_update 事件:`,new Date().toLocaleTimeString()),console.log(`git_status_update data ==>`,e),console.log(`currentProjectPath.value ==>`,C.value),console.log(`data.projectPath ==>`,e.projectPath),e.projectPath&&C.value&&e.projectPath!==C.value){console.log(`${Q(`@C298B:忽略不同项目的状态更新: `)}${e.projectPath}`);return}console.log(Q(`@C298B:正在更新 Git 文件状态...`)),e.porcelain!==void 0&&ye(e.porcelain)}),S.value.on(`connect_error`,e=>{console.error(`Socket连接错误:`,e.message)}),S.value.on(`connect_timeout`,()=>{console.error(Q(`@C298B:Socket连接超时`))}),S.value.on(`reconnect`,e=>{console.log(`${Q(`@C298B:Socket重连成功,尝试次数: `)}${e}`)}),S.value.on(`reconnect_attempt`,e=>{console.log(`${Q(`@C298B:Socket尝试重连,第 `)}${e}${Q(`@C298B: 次尝试`)}`)}),S.value.on(`reconnect_error`,e=>{console.error(`Socket重连错误:`,e.message)}),S.value.on(`reconnect_failed`,()=>{console.error(Q(`@C298B:Socket重连失败,已达到最大重试次数`))}),console.log(Q(`@C298B:Socket.IO事件监听器注册完成:connect, project_info, project_changed, git_status_update, monitoring_status`)),S.value&&!S.value.connected&&(console.log(Q(`@C298B:Socket未连接,尝试手动连接...`)),S.value.connect())}catch(e){console.error(`Socket.IO连接初始化失败:`,e)}}function ye(e){if(e===void 0||e===``){T.value=[];return}let t=e.split(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-Dje8Rg13.js","assets/rolldown-runtime-BM3Ffeng.js","assets/monaco-B2lPvkrc.css","assets/ProjectStartupButton-D7mgEsmf.js","assets/_plugin-vue_export-helper-B9cwfrdH.js","assets/vendor-exjCs1jx.js","assets/element-plus-BId3Dnij.js","assets/element-plus-D3Dn7nX0.css","assets/vendor-DVvq7qtS.css","assets/CommonDialog-Tlk0Fa7g.js","assets/SvgIcon-Diox29ks.js","assets/SvgIcon-CDNsk4-Q.css","assets/CommonDialog-ChSKsEz2.css","assets/configStore-B8X980y1.js","assets/ProjectStartupButton-QLPltCK5.css","assets/FlowOrchestrationWorkspace-BRUlRQwp.js","assets/vue-flow-Dj_X_Vr1.js","assets/vue-flow-CavUTEzp.css","assets/dagre-BCXBo6I9.js","assets/UserInputNode-CYxFuwuS.js","assets/UserInputNode-BVgQkB2l.css","assets/FlowOrchestrationWorkspace-CYGp-PqS.css","assets/FlowExecutionViewer-CFpiqZ2C.js","assets/FlowExecutionViewer-jNHI5zdm.css","assets/CommitForm-DueeSB7T.js","assets/CommitForm-DdK8dymc.css","assets/LogList-Do3C4BmA.js","assets/LogList-CeFFytjB.css","assets/RemoteRepoCard-D582mbhK.js","assets/RemoteRepoCard-BRGNlbeO.css","assets/AppVersionBadge-CZ3UbiAu.js","assets/AppVersionBadge-CS7Trvp-.css","assets/BranchSelector-Kwcj7e0Z.js","assets/BranchSelector-B0eLkAdv.css","assets/EditorView-B2gm2OW1.js","assets/flow-mindmap-DnyDhwJv.js","assets/flow-mindmap-DCVd8Ppe.css","assets/EditorView-BVod-rjn.css","assets/SourceMapView-gQRnN0Vj.js","assets/SourceMapView-BNRjvgzH.css","assets/WorkbenchView-CbWSllXy.js","assets/WorkbenchView-DbF4hH5s.css","assets/MonitorView-C2EyggDk.js","assets/MonitorView-TaS4kL0Y.css","assets/MindmapView-C1pPUu8W.js","assets/MindmapView-BQTqx842.css","assets/AgentView-CioAzh-a.js","assets/AgentView-8-xsOmE6.css"])))=>i.map(i=>d[i]);
2
+ import{o as e,r as t}from"./rolldown-runtime-BM3Ffeng.js";import{$t as n,A as r,At as i,B as a,Cn as o,D as s,Dn as c,E as l,En as u,Et as d,Fn as f,G as p,Gt as m,H as h,Hn as g,Ht as _,In as v,It as y,Jn as b,K as x,Kt as S,L as C,Ln as ee,Lt as te,M as w,Mn as ne,Nn as T,O as re,P as ie,Pt as ae,Q as E,Qt as D,R as O,Rn as oe,Rt as se,S as ce,Sn as k,St as le,T as A,Tn as j,Tt as ue,U as M,Un as N,Ut as de,V as P,Vn as F,W as fe,Wn as pe,Wt as me,Xn as I,Xt as he,Y as ge,Yt as _e,Z as ve,Zn as L,Zt as ye,_ as be,_n as R,_r as z,a as xe,ar as Se,at as Ce,bn as B,bt as we,cn as Te,ct as Ee,d as De,dn as Oe,dt as ke,en as V,et as Ae,f as je,ft as Me,g as Ne,gn as H,gr as Pe,h as Fe,hn as U,i as W,it as Ie,jt as Le,k as Re,ln as ze,lt as Be,m as Ve,mn as G,mr as K,mt as He,nn as Ue,o as We,on as Ge,or as Ke,p as qe,pt as Je,q as Ye,qt as Xe,r as Ze,s as Qe,sn as q,sr as J,st as $e,tn as et,tt,un as Y,vn as X,vt as nt,wn as rt,x as it,y as at,yt as ot,z as st,zn as Z,zt as ct}from"./element-plus-BId3Dnij.js";import{_a as lt,da as ut,fa as dt,ga as ft,ha as pt,ua as mt}from"./vendor-exjCs1jx.js";import{i as ht,n as Q,t as $}from"./_plugin-vue_export-helper-B9cwfrdH.js";import{t as gt}from"./SvgIcon-Diox29ks.js";import{n as _t,t as vt}from"./CommonDialog-Tlk0Fa7g.js";import{t as yt}from"./socket-io-CGezBd--.js";import{n as bt,t as xt}from"./configStore-B8X980y1.js";import{Bt as St,Ft as Ct,It as wt,Lt as Tt,Rt as Et,zt as Dt}from"./monaco-Dje8Rg13.js";import"./vue-flow-Dj_X_Vr1.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function Ot(e){if(!e)return`Zen GitSync`;let t=e.replace(/\\/g,`/`).split(`/`).filter(e=>e);return t.length>0?t[t.length-1]:`Zen GitSync`}var kt=j({__name:`TreeIcon`,props:{size:{type:[String,Number],required:!1,default:`1em`}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,`__isScriptSetup`,{enumerable:!1,value:!0}),n}}),At=[`width`,`height`];function jt(e,t,n,r,i,a){return Z(),X(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,width:n.size,height:n.size,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`},[R(` 垂直主线 `),t[0]||=U(`line`,{x1:`3`,y1:`2`,x2:`3`,y2:`14`},null,-1),R(` 第一个分支 `),t[1]||=U(`line`,{x1:`3`,y1:`4`,x2:`6`,y2:`4`},null,-1),t[2]||=U(`rect`,{x:`2`,y:`3`,width:`8`,height:`2`,rx:`0.5`,fill:`currentColor`,stroke:`none`},null,-1),R(` 第二个分支 `),t[3]||=U(`line`,{x1:`3`,y1:`8`,x2:`6`,y2:`8`},null,-1),t[4]||=U(`rect`,{x:`4`,y:`7`,width:`8`,height:`2`,rx:`0.5`,fill:`currentColor`,stroke:`none`},null,-1),R(` 第三个分支 `),t[5]||=U(`line`,{x1:`3`,y1:`12`,x2:`6`,y2:`12`},null,-1),t[6]||=U(`rect`,{x:`6`,y:`11`,width:`8`,height:`2`,rx:`0.5`,fill:`currentColor`,stroke:`none`},null,-1)],8,At)}var Mt=$(kt,[[`render`,jt],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/icons/TreeIcon.vue`]]),Nt=j({__name:`ListIcon`,props:{size:{type:[String,Number],required:!1,default:`1em`}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,`__isScriptSetup`,{enumerable:!1,value:!0}),n}}),Pt=[`width`,`height`];function Ft(e,t,n,r,i,a){return Z(),X(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,width:n.size,height:n.size,fill:`currentColor`,stroke:`none`},[R(` 简洁的列表图标 - 三条横线 `),t[0]||=U(`rect`,{x:`2`,y:`3`,width:`12`,height:`2`,rx:`0.5`},null,-1),t[1]||=U(`rect`,{x:`2`,y:`7`,width:`12`,height:`2`,rx:`0.5`},null,-1),t[2]||=U(`rect`,{x:`2`,y:`11`,width:`12`,height:`2`,rx:`0.5`},null,-1)],8,Pt)}var It=$(Nt,[[`render`,Ft],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/icons/ListIcon.vue`]]),Lt=new Set([`5173`,`4173`,`5544`]),Rt=3e3;function zt(){if(typeof window>`u`)return Rt;let e=window.location.port||`80`;if(Lt.has(e)){{let e=5545;if(!Number.isNaN(e))return e}return Rt}let t=parseInt(e,10);return Number.isNaN(t)?Rt:t}var Bt=800,Vt=zt(),Ht=ft(`git`,()=>{let e=xt(),t=J(``),n=J([]),r=J(``),i=J(``),a=J(!1),o=J(!1),s=J(!1),c=J(0),l=J(``),u=J(!1),d=J(!1),f=J(!1),p=J(!1),m=J(!1),h=J(!1),g=J(0),_=J(0),v=J(!1),y=J(``),b=J(0),x=J(``),S=J(null),C=J(``),te=J(``),w=J([]),ne=J({staged:[],unstaged:[],untracked:[]}),T=J([]),re=J(!1),ie=J(!1),ae=J(!1),E=J(!1),D=J(!1),O=J(1),se=J(!0),ce=J(0),k=J([]),le=J(!1),A=J(!1),j=J(!1),ue=J(!1);function M(){t.value=``,n.value=[],r.value=``,i.value=``,a.value=!1,o.value=!1,s.value=!1,c.value=0,g.value=0,_.value=0,v.value=!1,y.value=``,b.value=0,d.value=!1,f.value=!1,p.value=!1,m.value=!1,l.value=``,u.value=!1,w.value=[],ne.value={staged:[],unstaged:[],untracked:[]},T.value=[],re.value=!1,ie.value=!1,ae.value=!1,E.value=!1,D.value=!1,O.value=1,se.value=!0,ce.value=0}async function N(e=!1,t=!1){if(s.value)try{console.log(Q(`@C298B:获取分支状态...`));let n=`/api/branch-status`,r=[];e&&r.push(`force=true`),t&&r.push(`countOnly=true`),r.length>0&&(n+=`?`+r.join(`&`));let i=await(await fetch(n)).json();i&&(g.value=i.ahead||0,_.value=i.behind||0,v.value=i.hasUpstream||!1,y.value=i.upstreamBranch||``,console.log(`${Q(`@C298B:分支状态更新:领先 `)}${g.value}${Q(`@C298B: 个提交,落后 `)}${_.value}${Q(`@C298B: 个提交,上游分支:`)}${v.value?y.value:Q(`@C298B:无`)}`))}catch(e){console.error(`获取分支状态失败:`,e),g.value=0,_.value=0,v.value=!1,y.value=``}}async function de(){let e=Date.now();if(e-c.value<1e3)return console.log(`使用缓存的Git仓库状态:`,s.value?`是`:Q(`@C298B:不是`)),s.value;try{return s.value=(await(await fetch(`/api/current_directory`)).json()).isGitRepo===!0,c.value=e,console.log(`${Q(`@C298B:当前目录`)}${s.value?Q(`@C298B:是`):Q(`@C298B:不是`)}${Q(`@C298B:Git仓库`)}`),s.value}catch(t){return console.error(`检查Git仓库状态失败:`,t),s.value=!1,c.value=e,!1}}async function P(e=!1){try{let n=await(await fetch(e?`/api/branch?force=true`:`/api/branch`)).json();n.branch&&(t.value=n.branch,console.log(`${Q(`@C298B:当前分支更新为: `)}${n.branch}${e?Q(`@C298B: (强制刷新)`):``}`))}catch(e){console.error(`获取分支信息失败:`,e)}}async function F(){if(s.value)try{console.log(Q(`@C298B:获取所有分支...`));let e=await(await fetch(`/api/branches`)).json();e.branches&&Array.isArray(e.branches)&&(n.value=e.branches,b.value=Date.now(),console.log(`${Q(`@C298B:获取到`)}${e.branches.length}${Q(`@C298B:个分支`)}`))}catch(e){console.error(`获取所有分支信息失败:`,e)}}async function fe(e){console.log(`切换到分支:`,e);try{a.value=!0;let t=await(await fetch(`/api/checkout`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({branch:e})})).json();return t.success?(W({message:`${Q(`@C298B:已切换到分支: `)}${e}`,type:`success`}),await P(!0),await N(!0),!0):(W({message:`${Q(`@C298B:切换分支失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:切换分支失败: `)}${e.message}`,type:`error`}),!1}finally{a.value=!1}}async function pe(){try{let e=await(await fetch(`/api/user-info`)).json();e.name&&e.email&&(r.value=e.name,i.value=e.email)}catch(e){console.error(`获取用户信息失败:`,e)}}async function me(e,n){if(!e.trim())return W({message:Q(`@C298B:分支名称不能为空`),type:`warning`}),!1;try{o.value=!0;let r=await(await fetch(`/api/create-branch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newBranchName:e,baseBranch:n||t.value})})).json();return r.success?(W({message:`${Q(`@C298B:已创建并切换到分支: `)}${e}`,type:`success`}),await P(!0),await N(!0),await F(),!0):(W({message:`${Q(`@C298B:创建分支失败: `)}${r.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:创建分支失败: `)}${e.message}`,type:`error`}),!1}finally{o.value=!1}}async function I(){try{let e=await(await fetch(`/api/clear-user-config`,{method:`POST`})).json();return e.success?(r.value=``,i.value=``,W({message:Q(`@C298B:已清除Git用户配置`),type:`success`}),!0):(W({message:`${Q(`@C298B:清除配置失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:清除配置失败: `)}${e.message}`,type:`error`}),!1}}async function he(e,t){try{let n=await(await fetch(`/api/restore-user-config`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e,email:t})})).json();return n.success?(r.value=e,i.value=t,W({message:Q(`@C298B:已恢复Git用户配置`),type:`success`}),!0):(W({message:`${Q(`@C298B:恢复配置失败: `)}${n.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:恢复配置失败: `)}${e.message}`,type:`error`}),!1}}async function ge(){if(!s.value)return W({message:Q(`@C298B:当前目录不是Git仓库`),type:`warning`}),{success:!1,needsMerge:!1,error:Q(`@C298B:当前目录不是Git仓库`),fullError:``,pullOutput:``};try{f.value=!0;let e=await(await fetch(`/api/pull`,{method:`POST`})).json();if(e.success){W({message:Q(`@C298B:拉取成功`),type:`success`}),await N(!0);let t=(e.message||``).toString(),n=!/already up to date|已经是最新的|already up-to-date/i.test(t);return n&&await R(),{success:!0,hadChanges:n}}else return{success:!1,needsMerge:e.needsMerge||!1,error:e.error||``,fullError:e.fullError||e.error||``,pullOutput:e.pullOutput||``}}catch(e){return{success:!1,needsMerge:!1,error:e.message,fullError:e.message,pullOutput:``}}finally{f.value=!1}}async function _e(){if(!s.value)return!1;if(!v.value)return console.log(`[bootFetch] no upstream, skip`),!1;try{p.value=!0;let e=_.value;console.log(`[bootFetch] start silent fetch --all, beforeBehind=${e}`);let t=await(await fetch(`/api/fetch-all`,{method:`POST`})).json();if(!t.success)return console.warn(`[bootFetch] fetch --all failed:`,t.error),!1;await N(!0);let n=_.value,r=n<e;return console.log(`[bootFetch] afterBehind=${n}, hasNewRemoteCommits=${r}`),r?(await be(!0),!0):!1}catch(e){return console.warn(`[bootFetch] silent fetch error (ignored):`,e.message),!1}finally{p.value=!1}}async function ve(){if(!s.value)return W({message:Q(`@C298B:当前目录不是Git仓库`),type:`warning`}),!1;try{p.value=!0;let e=await(await fetch(`/api/fetch-all`,{method:`POST`})).json();return e.success?(W({message:Q(`@C298B:获取所有远程分支信息成功`),type:`success`}),await N(),!0):(W({message:`${Q(`@C298B:获取远程分支信息失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:获取远程分支信息失败: `)}${e.message}`,type:`error`}),!1}finally{p.value=!1}}async function L(){S.value&&(Ge(),S.value.disconnect());try{let e=`http://localhost:${Vt}`;if(console.log(`尝试连接Socket.IO服务器:`,e),S.value=yt(e,{reconnectionDelayMax:1e4,reconnection:!0,reconnectionAttempts:10,reconnectionDelay:1e3,timeout:2e4,autoConnect:!0,forceNew:!0,transports:[`websocket`,`polling`]}),!S.value){console.error(`Socket.IO初始化失败: socket为null`);return}console.log(Q(`@C298B:Socket.IO客户端已创建,开始注册事件监听器...`)),S.value.on(`connect`,()=>{console.log(`✅ Socket.IO连接成功,事件监听器已生效,Socket ID:`,S.value?.id)}),S.value.on(`project_info`,e=>{C.value=e.projectPath,te.value=e.projectRoomId,console.log(`${Q(`@C298B:当前项目: `)}${e.projectPath}`),console.log(`${Q(`@C298B:房间ID: `)}${e.projectRoomId}`)}),S.value.on(`project_changed`,e=>{console.log(`${Q(`@C298B:项目已切换: `)}${e.oldProjectPath} -> ${e.newProjectPath}`),C.value=e.newProjectPath,te.value=e.newProjectRoomId,S.value&&S.value.emit(`join_room`,e.newProjectRoomId),console.log(`${Q(`@C298B:已加入新项目房间: `)}${e.newProjectRoomId}`)}),S.value.on(`disconnect`,e=>{console.log(`与Socket.IO服务器断开连接:`,e)}),S.value.on(`git_status_update`,e=>{if(console.log(`✅ 成功监听到 git_status_update 事件:`,new Date().toLocaleTimeString()),console.log(`git_status_update data ==>`,e),console.log(`currentProjectPath.value ==>`,C.value),console.log(`data.projectPath ==>`,e.projectPath),e.projectPath&&C.value&&e.projectPath!==C.value){console.log(`${Q(`@C298B:忽略不同项目的状态更新: `)}${e.projectPath}`);return}console.log(Q(`@C298B:正在更新 Git 文件状态...`)),e.porcelain!==void 0&&ye(e.porcelain)}),S.value.on(`connect_error`,e=>{console.error(`Socket连接错误:`,e.message)}),S.value.on(`connect_timeout`,()=>{console.error(Q(`@C298B:Socket连接超时`))}),S.value.on(`reconnect`,e=>{console.log(`${Q(`@C298B:Socket重连成功,尝试次数: `)}${e}`)}),S.value.on(`reconnect_attempt`,e=>{console.log(`${Q(`@C298B:Socket尝试重连,第 `)}${e}${Q(`@C298B: 次尝试`)}`)}),S.value.on(`reconnect_error`,e=>{console.error(`Socket重连错误:`,e.message)}),S.value.on(`reconnect_failed`,()=>{console.error(Q(`@C298B:Socket重连失败,已达到最大重试次数`))}),console.log(Q(`@C298B:Socket.IO事件监听器注册完成:connect, project_info, project_changed, git_status_update, monitoring_status`)),S.value&&!S.value.connected&&(console.log(Q(`@C298B:Socket未连接,尝试手动连接...`)),S.value.connect())}catch(e){console.error(`Socket.IO连接初始化失败:`,e)}}function ye(e){if(e===void 0||e===``){T.value=[];return}let t=e.split(`
3
3
  `),n=[];for(let e of t){let t=e.match(/^([ MADRCU\?]{2})\s+(.+)$/);if(t){let e=``,r=t[1],i=r.charAt(0),a=r.charAt(1);e=r===`UU`||r===`AA`||r===`DD`||r===`AU`||r===`UA`||r===`DU`||r===`UD`?`conflicted`:i===`A`||i===`M`||i===`D`||i===`R`?`added`:i===` `&&a===`M`?`modified`:i===` `&&a===`D`?`deleted`:i===` `&&a===`A`?`intent-to-add`:r===`??`?`untracked`:`other`,n.push({path:t[2],type:e})}}T.value=n}async function be(e=!0){if(!s.value){console.log(Q(`@C298B:当前目录不是Git仓库,跳过加载提交历史`));return}try{re.value=!0,console.log(Q(`@C298B:开始加载提交历史...`));let e=new Date().getTime(),t=await(await fetch(`/api/log?page=1&_t=${e}`)).json();t&&t.data&&Array.isArray(t.data)?(w.value=[...t.data],console.log(`${Q(`@C298B:提交历史加载完成,共 `)}${w.value.length}${Q(`@C298B: 条记录`)}`)):(console.warn(`API返回的提交历史格式不正确:`,t),w.value=[])}catch(t){console.error(`获取提交历史失败:`,t),e&&W({message:`${Q(`@C298B:获取提交历史失败: `)}${t.message}`,type:`error`})}finally{re.value=!1}}async function R(){console.log(Q(`@C298B:刷新提交历史...`)),O.value=1,se.value=!1,await be(!0),ce.value=w.value.length,console.log(Q(`@C298B:提交历史刷新完成`))}async function z(){if(!s.value){console.log(Q(`@C298B:当前目录不是Git仓库,跳过加载Git状态`));return}try{ie.value=!0,await xe()}catch(e){console.error(`获取Git状态失败:`,e),W({message:`${Q(`@C298B:获取Git状态失败: `)}${e.message}`,type:`error`})}finally{ie.value=!1}}async function xe(){if(console.log(Q(`@C298B:开始获取Git状态(porcelain格式)...`)),!s.value){console.log(Q(`@C298B:当前目录不是Git仓库,跳过加载Git状态`));return}try{let e=await(await fetch(`/api/status_porcelain`)).json();e.status===void 0?T.value=[]:ye(e.status),h.value=!!e.isMergeInProgress,e.isMergeInProgress&&e.mergeMessage&&!x.value&&(x.value=String(e.mergeMessage))}catch(e){console.error(`获取Git状态(porcelain)失败:`,e),W({message:`${Q(`@C298B:获取Git状态(porcelain)失败: `)}${e.message}`,type:`error`}),T.value=[]}}async function Se(){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{ae.value=!0;let t=T.value.filter(t=>{let n=t.path.replace(/\\/g,`/`);return!e.lockedFiles.some(e=>n===e.replace(/\\/g,`/`))});if(t.length===0)return W({message:Q(`@C298B:没有需要暂存的文件(所有文件都被锁定)`),type:`warning`}),!1;if(t.length===T.value.length){let e=await(await fetch(`/api/add`,{method:`POST`})).json();return e.success?(W({message:Q(`@C298B:文件已添加到暂存区`),type:`success`}),await xe(),!0):(W({message:`${Q(`@C298B:添加文件失败: `)}${e.error}`,type:`error`}),!1)}else{let e=await(await fetch(`/api/add-filtered`,{method:`POST`})).json();if(e.success){let e=T.value.length-t.length,n=`${Q(`@C298B:已添加 `)}${t.length}${Q(`@C298B: 个文件到暂存区`)}`;return e>0&&(n+=`${Q(`@C298B:,跳过 `)}${e}${Q(`@C298B: 个锁定文件`)}`),W({message:n,type:`success`}),await xe(),!0}else return W({message:`${Q(`@C298B:添加文件失败: `)}${e.error}`,type:`error`}),!1}}catch(e){return W({message:`${Q(`@C298B:添加文件失败: `)}${e.message}`,type:`error`}),!1}finally{ae.value=!1}}async function Ce(){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{ae.value=!0;let e=await(await fetch(`/api/add-all`,{method:`POST`})).json();return e.success?(W({message:Q(`@C298B:所有文件已添加到暂存区`),type:`success`}),await xe(),!0):(W({message:`${Q(`@C298B:添加文件失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:添加文件失败: `)}${e.message}`,type:`error`}),!1}finally{ae.value=!1}}async function B(e){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{ae.value=!0;let t=await(await fetch(`/api/add-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(W({message:Q(`@C298B:文件已暂存`),type:`success`}),z(),!0):(W({message:`${Q(`@C298B:暂存文件失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:暂存文件失败: `)}${e.message}`,type:`error`}),!1}finally{ae.value=!1}}async function we(e){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{D.value=!0;let t=await(await fetch(`/api/unstage-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(W({message:Q(`@C298B:已取消暂存文件`),type:`success`}),z(),!0):(W({message:`${Q(`@C298B:取消暂存失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:取消暂存失败: `)}${e.message}`,type:`error`}),!1}finally{D.value=!1}}function Te(e){return new Promise(t=>setTimeout(t,e))}async function Ee(e,t=!1,n={}){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;let{autoRefresh:r=!0}=n;try{E.value=!0;let n=await(await fetch(`/api/commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:e,hasNewlines:e.includes(`
4
4
  `),noVerify:t})})).json();return n.success?(W({message:Q(`@C298B:提交成功`),type:`success`}),r&&(await xe(),await be(!1),N(!0)),!0):(W({message:`${Q(`@C298B:commitChanges 提交失败: `)}${n.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:提交失败: `)}${e.message}`,type:`error`}),!1}finally{E.value=!1}}async function De(){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{d.value=!0;let e=await(await fetch(`/api/push`,{method:`POST`})).json();return e.success?(g.value=0,_.value=0,await Promise.all([z(),be()]),console.log(`推送成功,分支状态已设置为同步 (ahead=0, behind=0)`),!0):(e.errorCode===`EMPTY_REPO`?W({message:e.error||Q(`@C298B:当前仓库没有任何提交,请先暂存并提交至少一个文件后再推送。`),type:`warning`}):W({message:`${Q(`@C298B:推送失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:推送失败: `)}${e.message}`,type:`error`}),!1}finally{d.value=!1}}async function Oe(e){return s.value?new Promise(t=>{try{d.value=!0,fetch(`/api/push-with-progress`,{method:`POST`}).then(n=>{let r=n.body?.getReader(),i=new TextDecoder;if(!r)throw Error(`无法读取响应流`);(async()=>{try{for(;;){let{done:n,value:a}=await r.read();if(n)break;let o=i.decode(a,{stream:!0}).split(`
5
5
  `);for(let n of o)if(n.startsWith(`data: `))try{let r=JSON.parse(n.slice(6));if(e&&e(r),r.type===`error`){d.value=!1,r.errorCode===`EMPTY_REPO`?W({message:r.error||Q(`@C298B:当前仓库没有任何提交,请先暂存并提交至少一个文件后再推送。`),type:`warning`}):W({message:`${Q(`@C298B:推送失败: `)}${r.error||Q(`@C298B:未知错误`)}`,type:`error`}),t(!1);return}r.type===`complete`&&(d.value=!1,r.success?(g.value=0,_.value=0,Promise.all([z(),be()]),t(!0)):(W({message:`${Q(`@C298B:推送失败: `)}${r.error}`,type:`error`}),t(!1)))}catch(e){console.error(`解析SSE数据失败:`,e)}}}catch(e){console.error(`读取流失败:`,e),d.value=!1,W({message:`${Q(`@C298B:推送失败: `)}${e.message}`,type:`error`}),t(!1)}})()}).catch(e=>{d.value=!1,W({message:`${Q(`@C298B:推送失败: `)}${e.message}`,type:`error`}),t(!1)})}catch(e){d.value=!1,W({message:`${Q(`@C298B:推送失败: `)}${e.message}`,type:`error`}),t(!1)}}):(W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1)}async function ke(e,n={}){if(!s.value)return W({message:Q(`@C298B:当前目录不是Git仓库`),type:`warning`}),!1;if(!e)return W({message:Q(`@C298B:请选择要合并的分支`),type:`warning`}),!1;if(e===t.value)return W({message:Q(`@C298B:不能合并当前分支到自身`),type:`warning`}),!1;let r=`Merge branch '${e}' into ${t.value}`;try{m.value=!0;let i=await fetch(`/api/merge`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({branch:e,...n})}),a=await i.json();return i.status===409?(x.value=n.message||r,W({message:Q(`@C298B:合并分支时发生冲突,请手动解决`),type:`warning`,duration:5e3}),!1):(x.value=``,a.success?(W({message:`${Q(`@C298B:成功合并分支 `)}${e}${Q(`@C298B: 到 `)}${t.value}`,type:`success`}),await z(),await N(),!0):(W({message:`${Q(`@C298B:合并分支失败: `)}${a.error}`,type:`error`}),!1))}catch(e){return W({message:`${Q(`@C298B:合并分支失败: `)}${e.message}`,type:`error`}),!1}finally{m.value=!1}}async function V(e,t=!1){if(console.log(Q(`@C298B:开始暂存并提交操作...`)),!await Se())return!1;console.log(Q(`@C298B:暂存完成,等待Git操作完成...`)),await Te(Bt),console.log(Q(`@C298B:开始提交更改...`));let n=await Ee(e,t);return console.log(Q(`@C298B:暂存并提交操作完成`)),n}async function Ae(e,t=!1){try{if(console.log(Q(`@C298B:开始暂存文件...`)),!await Se()||(console.log(Q(`@C298B:暂存完成,等待Git操作完成...`)),await Te(Bt),console.log(Q(`@C298B:开始提交更改...`)),!await Ee(e,t)))return!1;console.log(Q(`@C298B:提交完成,等待Git操作完成...`)),await Te(Bt),console.log(Q(`@C298B:开始推送到远程...`));let n=await De();return console.log(Q(`@C298B:一键推送操作完成,状态已统一刷新`)),n}catch(e){console.error(`一键推送操作失败:`,e);try{(await(await fetch(`/api/remove-lock`,{method:`POST`})).json()).success&&W({message:Q(`@C298B:检测到Git锁定文件冲突,已自动清理,请重试操作`),type:`warning`})}catch(e){console.error(`清理锁定文件失败:`,e)}W({message:`${Q(`@C298B:操作失败: `)}${e.message}`,type:`error`});try{await Promise.all([z(),be(),N()])}catch(e){console.error(`刷新状态失败:`,e)}return!1}}async function je(e,t=!1){if(!q.value||$e.value.size===0)return V(e,t);let n=it.value;return n.length===0?(W.warning(Q(`@C298B:请选择要暂存的文件`)),!1):(console.log(Q(`@C298B:开始暂存所选文件并提交...`,{n:n.length})),await ot(n)?(await Te(Bt),Ee(e,t)):!1)}async function Me(e,t=!1){if(!q.value||$e.value.size===0)return Ae(e,t);let n=it.value;return n.length===0?(W.warning(Q(`@C298B:请选择要暂存的文件`)),!1):!await ot(n)||(await Te(Bt),!await Ee(e,t))?!1:(await Te(Bt),De())}async function Ne(){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{D.value=!0;let e=await(await fetch(`/api/reset-head`,{method:`POST`})).json();return e.success?(W({message:Q(`@C298B:已重置暂存区`),type:`success`}),z(),!0):(W({message:`${Q(`@C298B:重置暂存区失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:重置暂存区失败: `)}${e.message}`,type:`error`}),!1}finally{D.value=!1}}async function H(e){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{D.value=!0;let t=await(await fetch(`/api/reset-to-remote`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({branch:e})})).json();return t.success?(W({message:`${Q(`@C298B:已重置分支 `)}${e}${Q(`@C298B: 到远程状态`)}`,type:`success`}),z(),be(),await P(!0),await F(),!0):(W({message:`${Q(`@C298B:重置分支失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:重置分支失败: `)}${e.message}`,type:`error`}),!1}finally{D.value=!1}}async function Pe(){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{D.value=!0;let e=await(await fetch(`/api/discard-all-changes`,{method:`POST`})).json();return e.success?(W.success(Q(`@C298B:已清除所有本地更改`)),z(),be(),!0):(W.error(`${Q(`@C298B:操作失败: `)}${e.error}`),!1)}catch(e){return W.error(`${Q(`@C298B:操作失败: `)}${e.message}`),!1}finally{D.value=!1}}async function Fe(e){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;if(!Array.isArray(e)||e.length===0)return W.warning(Q(`@C298B:未选择任何文件`)),!1;try{D.value=!0;let t=await(await fetch(`/api/revert_files`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePaths:e})})).json();if(t.success){let n=Number(t?.count??e.length),r=Array.isArray(t?.results)?t.results.filter(e=>!e?.success).map(e=>String(e?.path||``)):[];return r.length>0?W.warning(`${Q(`@C298B:已清除 `)}${n-r.length}${Q(`@C298B: 个文件,失败 `)}${r.length}${Q(`@C298B: 个`)}`):W.success(`${Q(`@C298B:已清除 `)}${n}${Q(`@C298B: 个所选文件`)}`),z(),be(),!0}else return W.error(`${Q(`@C298B:操作失败: `)}${t.error}`),!1}catch(e){return W.error(`${Q(`@C298B:操作失败: `)}${e.message}`),!1}finally{D.value=!1}}async function U(){if(s.value)try{u.value=!0,console.log(Q(`@C298B:获取远程仓库地址...`));let e=await(await fetch(`/api/remote-url`)).json();e.success?(l.value=e.url||``,console.log(`${Q(`@C298B:获取到远程仓库地址: `)}${l.value}`)):(console.warn(`获取远程仓库地址失败:`,e.error),l.value=``)}catch(e){console.error(`获取远程仓库地址失败:`,e),l.value=``}finally{u.value=!1}}async function Ie(){try{let e=await(await fetch(`/api/git-init`,{method:`POST`})).json();return e.success?(await de(),!0):(W.error(e.error||Q(`@C298B:Git仓库初始化失败`)),!1)}catch(e){return W.error(`${Q(`@C298B:Git仓库初始化失败: `)}${e.message}`),!1}}async function Le(e,t=`origin`){try{let n=await(await fetch(`/api/add-remote`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t,url:e})})).json();return n.success?(await U(),!0):(W.error(n.error||Q(`@C298B:添加远程仓库失败`)),!1)}catch(e){return W.error(`${Q(`@C298B:添加远程仓库失败: `)}${e.message}`),!1}}async function Re(){try{let e=await(await fetch(`/api/diff-head`)).json();return e.success?e.diff?(await navigator.clipboard.writeText(e.diff),W({message:Q(`@C298B:已复制全量 Diff`),type:`success`}),!0):(W({message:Q(`@C298B:没有可复制的 Diff`),type:`warning`}),!1):(W({message:`${Q(`@C298B:复制失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return W({message:`${Q(`@C298B:复制失败: `)}${e.message}`,type:`error`}),!1}}let ze=[`github.com`,`gitlab.com`,`bitbucket.org`,`gitee.com`,`coding.net`,`codeup.aliyun.com`],Be=G(()=>{let e=l.value.trim();if(!e)return null;if(/^https?:\/\//i.test(e))return e.replace(/\.git$/i,``);let t=e.match(/^[\w.-]+@([^:]+):(.+?)(?:\.git)?$/i);if(t){let e=t[1],n=t[2];return ze.includes(e.toLowerCase())?`https://${e}/${n}`:null}let n=e.match(/^ssh:\/\/(?:[\w.-]+@)?([^/:]+)(?::\d+)?\/(.+?)(?:\.git)?$/i);if(n){let e=n[1],t=n[2];return ze.includes(e.toLowerCase())?`https://${e}/${t}`:null}return null}),Ve=G(()=>Be.value!==null);function K(){let e=Be.value;return e?(window.open(e,`_blank`,`noopener,noreferrer`),!0):(W({message:Q(`@C298B:该远程仓库地址无法识别为可访问的网页地址`),type:`warning`}),!1)}async function He(){if(!l.value)return W({message:Q(`@C298B:没有可复制的远程仓库地址`),type:`warning`}),!1;try{return await navigator.clipboard.writeText(l.value),W({message:Q(`@C298B:已复制远程仓库地址`),type:`success`}),!0}catch(e){return console.error(`复制远程仓库地址失败:`,e),W({message:`${Q(`@C298B:复制失败: `)}${e.message}`,type:`error`}),!1}}async function Ue(){if(!l.value)return W({message:Q(`@C298B:没有可复制的远程仓库地址`),type:`warning`}),!1;try{let e=`git clone ${l.value}`;return await navigator.clipboard.writeText(e),W({message:Q(`@F13B4:已复制克隆命令`),type:`success`}),!0}catch(e){return console.error(`复制克隆命令失败:`,e),W({message:`${Q(`@C298B:复制失败: `)}${e.message}`,type:`error`}),!1}}ee(()=>{L()});function We(){S.value&&=(Ge(),S.value.disconnect(),null)}function Ge(){if(S.value)for(let e of[`connect`,`project_info`,`project_changed`,`disconnect`,`git_status_update`,`connect_error`,`connect_timeout`,`reconnect`,`reconnect_attempt`,`reconnect_error`,`reconnect_failed`])try{S.value.off(e)}catch{}}oe(()=>{We()});async function Ke(){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),[];try{le.value=!0;let e=await(await fetch(`/api/stash-list`)).json();return e.success?(k.value=e.stashes,e.stashes):(W.error(`${Q(`@C298B:获取stash列表失败: `)}${e.error}`),[])}catch(e){return console.error(`获取stash列表失败:`,e),W.error(`${Q(`@C298B:获取stash列表失败: `)}${e.message}`),[]}finally{le.value=!1}}async function qe(e,t=!1,n=!0){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{ue.value=!0;let r=await(await fetch(`/api/stash-save`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:e,includeUntracked:t,excludeLocked:n})})).json();return r.success?(W.success(r.message),await Ke(),await z(),!0):(W.warning(r.message),!1)}catch(e){return console.error(`保存stash失败:`,e),W.error(`${Q(`@C298B:保存stash失败: `)}${e.message}`),!1}finally{ue.value=!1}}async function Je(e,t,n=!1){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;if(!e||e.length===0)return W.warning(Q(`@C298B:请选择要储藏的文件`)),!1;try{ue.value=!0;let r=await(await fetch(`/api/stash-save-partial`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({files:e,message:t,includeUntracked:n})})).json();return r.success?(W.success(r.message),await Ke(),await z(),!0):(W.warning(r.message),!1)}catch(e){return console.error(`保存部分stash失败:`,e),W.error(`${Q(`@C298B:保存stash失败: `)}${e.message}`),!1}finally{ue.value=!1}}async function Ye(e,t=!1){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{A.value=!0;let n=await fetch(`/api/stash-apply`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({stashId:e,pop:t})}),r=await n.json();return n.status===409?(W.warning(Q(`@C298B:应用stash时发生冲突,请手动解决`)),!1):r.success?(W.success(r.message),await Ke(),await z(),!0):(W.error(`${Q(`@C298B:应用stash失败: `)}${r.error}`),!1)}catch(e){return console.error(`应用stash失败:`,e),W.error(`${Q(`@C298B:应用stash失败: `)}${e.message}`),!1}finally{A.value=!1}}async function Xe(e){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{j.value=!0;let t=await(await fetch(`/api/stash-drop`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({stashId:e})})).json();return t.success?(W.success(t.message),await Ke(),!0):(W.error(`${Q(`@C298B:删除stash失败: `)}${t.error}`),!1)}catch(e){return console.error(`删除stash失败:`,e),W.error(`${Q(`@C298B:删除stash失败: `)}${e.message}`),!1}finally{j.value=!1}}async function Ze(){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{j.value=!0;let e=await(await fetch(`/api/stash-clear`,{method:`POST`})).json();return e.success?(W.success(e.message),k.value=[],!0):(W.error(`${Q(`@C298B:清空stash失败: `)}${e.error}`),!1)}catch(e){return console.error(`清空stash失败:`,e),W.error(`${Q(`@C298B:清空stash失败: `)}${e.message}`),!1}finally{j.value=!1}}let Qe=G(()=>T.value.some(e=>e.type===`conflicted`)),q=J(!1),$e=J(new Set);function et(){q.value=!q.value,q.value||($e.value=new Set)}function tt(){q.value=!0}function Y(){q.value=!1,$e.value=new Set}function X(e){let t=new Set($e.value);t.has(e)?t.delete(e):t.add(e),$e.value=t}function nt(){$e.value=new Set(T.value.map(e=>e.path))}function rt(){$e.value=new Set}let it=G(()=>{if(!q.value)return[];let t=new Set(e.lockedFiles.map(e=>e.replace(/\\/g,`/`))),n=[];for(let e of $e.value){let r=e.replace(/\\/g,`/`);if(t.has(r))continue;let i=T.value.find(t=>t.path===e);i&&[`modified`,`deleted`,`untracked`,`intent-to-add`].includes(i.type)&&n.push(e)}return n}),at=G(()=>it.value.length>0);async function ot(e){if(!s.value)return W.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;let t=[...new Set(e.filter(e=>typeof e==`string`&&e.length>0))];if(t.length===0)return W.warning(Q(`@C298B:请选择要暂存的文件`)),!1;try{ae.value=!0;let e=await(await fetch(`/api/add-files`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePaths:t})})).json();if(e.success){let n=e.successCount??t.length;W.success(n>0?`${Q(`@C298B:已暂存 `)}${n}${Q(`@C298B: 个所选文件`)}`:Q(`@C298B:文件已添加到暂存区`));let r=new Set($e.value);for(let e of t)r.delete(e);return $e.value=r,await xe(),!0}else return W.error(`${Q(`@C298B:暂存失败: `)}${e.error||``}`),!1}catch(e){return W.error(`${Q(`@C298B:暂存失败: `)}${e.message}`),!1}finally{ae.value=!1}}return{currentBranch:t,allBranches:n,userName:r,userEmail:i,isChangingBranch:a,isCreatingBranch:o,isGitRepo:s,lastCheckedTime:c,branchAhead:g,branchBehind:_,hasUpstream:v,upstreamBranch:y,lastBranchesTime:b,remoteUrl:l,isLoadingRemoteUrl:u,remoteWebUrl:Be,isRemoteBrowsable:Ve,openRemoteWebUrl:K,hasConflictedFiles:Qe,stashes:k,isLoadingStashes:le,isApplyingStash:A,isDroppingStash:j,isSavingStash:ue,log:w,status:ne,fileList:T,isLoadingLog:re,isLoadingStatus:ie,isAddingFiles:ae,isCommiting:E,isResetting:D,currentPage:O,hasMoreData:se,totalCommits:ce,isPushing:d,isGitPulling:f,isGitFetching:p,isGitMerging:m,isMergeInProgress:h,pendingMergeMessage:x,isSelectionMode:q,selectedFiles:$e,selectedUnstagedPaths:it,hasSelectableFiles:at,toggleSelectionMode:et,enterSelectionMode:tt,exitSelectionMode:Y,toggleFileSelection:X,selectAllFiles:nt,clearSelection:rt,$reset:M,checkGitRepo:de,getCurrentBranch:P,getAllBranches:F,changeBranch:fe,getUserInfo:pe,createBranch:me,clearUserConfig:I,restoreUserConfig:he,getBranchStatus:N,gitPull:ge,gitFetchAll:ve,bootFetch:_e,initSocketConnection:L,parseStatusPorcelain:ye,fetchLog:be,refreshLog:R,fetchStatus:z,fetchStatusPorcelain:xe,addToStage:Se,addAllToStage:Ce,addFileToStage:B,stageFiles:ot,unstageFile:we,commitChanges:Ee,pushToRemote:De,pushToRemoteWithProgress:Oe,addAndCommit:V,addCommitAndPush:Ae,stageSelectedAndCommit:je,stageSelectedAndCommitAndPush:Me,resetHead:Ne,resetToRemote:H,discardAllChanges:Pe,discardSelectedFiles:Fe,getRemoteUrl:U,addRemote:Le,gitInit:Ie,copyRemoteUrl:He,copyCloneCommand:Ue,copyCurrentDiff:Re,mergeBranch:ke,getStashList:Ke,saveStash:qe,savePartialStash:Je,applyStash:Ye,dropStash:Xe,clearAllStashes:Ze,socket:S,disconnectSocket:We}}),Ut=600*1e3,Wt=ft(`tools`,()=>{let e=J(!1),t=J(!1),n=J(!1),r=J(!1),i=J(null),a=J(!1);async function o(){if(!a.value){a.value=!0;try{let a=await(await fetch(`/api/check-tools`)).json();a.success&&(e.value=!!a.vscode,t.value=!!a.claude,n.value=!!a.codex,r.value=!!a.opencode,i.value=Date.now())}catch{}finally{a.value=!1}}}let s=null;function c(){s||=(o(),setInterval(()=>{o()},Ut))}function l(){s&&=(clearInterval(s),null)}return{vscodeAvailable:e,claudeAvailable:t,codexAvailable:n,opencodeAvailable:r,lastCheckedAt:i,isChecking:a,checkTools:o,startPolling:c,stopPolling:l}});function Gt(e){return e.replace(/\\/g,`/`)}function Kt(e,t=[]){if(!e||!t?.length)return!1;let n=Gt(e);return t.some(e=>Gt(e)===n)}function qt(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`)}function Jt(e){if(!e)return``;let t=e.split(`
@@ -46,7 +46,7 @@ import{o as e,r as t}from"./rolldown-runtime-BM3Ffeng.js";import{$t as n,A as r,
46
46
  用 el-popover + manual trigger 自己接管右键事件,绕开 el-dropdown contextmenu
47
47
  在 IconButton(el-tooltip) 嵌套下的失效问题。
48
48
  `),r.toolsStore.claudeAvailable?(Z(),H(r.ElPopover,{key:3,visible:r.claudeMenuVisible,trigger:`manual`,placement:`bottom-end`,width:220,"show-arrow":!1,"popper-class":`claude-menu-popover`},{reference:I(()=>[U(`span`,{ref:`claudeTriggerRef`,class:`claude-code-trigger`,onContextmenu:ze(r.openClaudeMenu,[`prevent`,`stop`])},[o(r.IconButton,{tooltip:r.$t(`@67CE7:用 Claude Code 打开(完全批准)`),"aria-label":r.$t(`@67CE7:用 Claude Code 打开(完全批准)`),size:`large`,onClick:t[0]||=e=>r.onOpenInClaudeCode(`bypassPermissions`)},{default:I(()=>[U(`img`,{src:r.claudeCodeIcon,alt:r.$t(`@67CE7:Claude Code`),class:`claude-code-btn__icon`},null,8,mu)]),_:1},8,[`tooltip`,`aria-label`])],544)]),default:I(()=>[U(`ul`,{class:`claude-menu`,role:`menu`,"aria-label":r.$t(`@67CE7:Claude Code 启动模式`)},[U(`li`,{class:`claude-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:t[1]||=e=>r.pickClaudeMode(`default`),onKeydown:[t[2]||=Te(ze(e=>r.pickClaudeMode(`default`),[`prevent`]),[`enter`]),t[3]||=Te(ze(e=>r.pickClaudeMode(`default`),[`prevent`]),[`space`])]},[U(`span`,gu,z(r.$t(`@67CE7:用 Claude Code 打开`)),1),U(`span`,_u,z(r.$t(`@67CE7:默认权限`)),1)],32),U(`li`,{class:`claude-menu__item claude-menu__item--accent`,role:`menuitem`,tabindex:`-1`,onClick:t[4]||=e=>r.pickClaudeMode(`acceptEdits`),onKeydown:[t[5]||=Te(ze(e=>r.pickClaudeMode(`acceptEdits`),[`prevent`]),[`enter`]),t[6]||=Te(ze(e=>r.pickClaudeMode(`acceptEdits`),[`prevent`]),[`space`])]},[U(`span`,vu,z(r.$t(`@67CE7:用 Claude Code 打开`)),1),t[15]||=U(`span`,{class:`claude-menu__hint`},`批准文件编辑`,-1)],32),U(`li`,{class:`claude-menu__item claude-menu__item--danger`,role:`menuitem`,onClick:t[7]||=e=>r.pickClaudeMode(`bypassPermissions`)},[U(`span`,yu,[t[16]||=k(` 用 Claude Code 打开 `),o(s,{class:`claude-menu__warn`},{default:I(()=>[o(c)]),_:1})]),t[17]||=U(`span`,{class:`claude-menu__hint`},`真·完全批准(含 Shell)`,-1)])],8,hu)]),_:1},8,[`visible`])):R(`v-if`,!0)])],2),R(` 切换目录对话框 `),o(r.CommonDialog,{modelValue:r.isDirectoryDialogVisible,"onUpdate:modelValue":t[12]||=e=>r.isDirectoryDialogVisible=e,title:r.$t(`@67CE7:切换工作目录`),size:`medium`,"destroy-on-close":!0,"append-to-body":!0,"custom-class":`directory-dialog`},{footer:I(()=>[U(`div`,ku,[U(`div`,Au,[U(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[9]||=e=>r.isDirectoryDialogVisible=!1},z(r.$t(`@67CE7:取消`)),1),U(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:t[10]||=e=>r.changeDirectory(),disabled:r.isChangingDirectory},[r.isChangingDirectory?(Z(),H(s,{key:1,class:`is-loading`},{default:I(()=>t[19]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{fill:`currentColor`,d:`M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z`})],-1)]),_:1})):(Z(),H(s,{key:0},{default:I(()=>[o(r.Folder)]),_:1})),U(`span`,null,z(r.$t(`@67CE7:切换`)),1)],8,ju),U(`button`,{type:`button`,class:`dialog-newtab-btn`,onClick:t[11]||=e=>r.openNewTabGui()},t[20]||=[U(`span`,null,`使用新标签打开`,-1)])])])]),default:I(()=>[U(`div`,bu,[o(f,{"label-position":`top`},{default:I(()=>[o(d,null,{label:I(()=>[U(`div`,xu,[o(s,{class:`label-icon`},{default:I(()=>[o(r.Folder)]),_:1}),U(`span`,null,z(r.$t(`@67CE7:目录路径`)),1)])]),default:I(()=>[U(`div`,Su,[o(u,{modelValue:r.newDirectoryPath,"onUpdate:modelValue":t[8]||=e=>r.newDirectoryPath=e,placeholder:r.$t(`@67CE7:请输入目录路径`),class:`modern-input`,size:`large`},null,8,[`modelValue`,`placeholder`]),U(`button`,{type:`button`,class:`browse-btn`,onClick:r.browseDirectory},[o(s,null,{default:I(()=>[o(r.Folder)]),_:1}),U(`span`,null,z(r.$t(`@67CE7:浏览`)),1)])])]),_:1}),r.recentDirectories.length>0?(Z(),H(d,{key:0},{label:I(()=>[U(`div`,Cu,[o(s,{class:`label-icon`},{default:I(()=>[o(r.Clock)]),_:1}),U(`span`,null,z(r.$t(`@67CE7:常用目录`)),1)])]),default:I(()=>[U(`div`,wu,[(Z(!0),X(Y,null,F(r.recentDirectories,(e,n)=>(Z(),X(`div`,{key:n,class:K([`recent-dir-item`,{"recent-dir-item--missing":!e.exists}]),title:(r.isMac?`按住 ⌘ 点击用新标签打开`:`按住 Ctrl 点击用新标签打开`)+`
49
- `+e.path,onClick:t=>r.onRecentDirClick(e,t)},[o(s,{class:`dir-icon`},{default:I(()=>[o(r.Folder)]),_:1}),U(`span`,{class:`dir-path`,title:e.path},z(e.path),9,Eu),e.exists?R(`v-if`,!0):(Z(),X(`span`,Du,`不存在`)),U(`button`,{type:`button`,class:`dir-delete-btn`,title:`从常用目录中移除`,onClick:t=>r.removeRecentDirectory(e.path,t)},[...t[18]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`},[U(`path`,{fill:`currentColor`,d:`M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z`})],-1)]],8,Ou)],10,Tu))),128))])]),_:1})):R(`v-if`,!0)]),_:1})])]),_:1},8,[`modelValue`,`title`]),R(` 目录浏览器弹窗 `),o(r.FilePicker,{visible:r.isBrowserDialogVisible,mode:`directory`,theme:r.isDark?`dark`:`light`,locale:r.currentLocale,onClose:t[13]||=e=>r.isBrowserDialogVisible=!1,onConfirm:t[14]||=e=>{r.onBrowserSelect(e[0]),r.isBrowserDialogVisible=!1}},null,8,[`visible`,`theme`,`locale`])],64)}var Nu=$(du,[[`render`,Mu],[`__scopeId`,`data-v-955e45f2`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/DirectorySelector.vue`]]),Pu=j({__name:`GitGlobalSettingsDialog`,props:{modelValue:{type:Boolean,required:!0}},emits:[`update:modelValue`],setup(e,{expose:t,emit:n}){t();let r=Ht(),i=bt(),a=xt(),o=e,s=n,c=J(!1),l=J(!1),u=J(`general`),d=J(`light`),f=J(`zh-CN`),p=J(!1),m=J([]),h=J(void 0),g=G(()=>a.theme===`light`?`light`:`dark`),_=G(()=>{if(h.value===null)return null;let e=m.value.find(e=>e.id===h.value);return e?{endpoint:e.baseURL,modelName:e.model,displayName:e.name,apiKey:e.apiKey}:null}),v=G(()=>u.value===`config`?!0:u.value===`general`?d.value!==M||f.value!==N||h.value!==void 0:u.value===`git`?w.value!==oe||ne.value!==se||ie.value!==ce||ae.value!==k||E.value!==A||D.value!==j||(O.value||``).trim()!==ue:u.value===`editor`?p.value!==a.ui.editorAutoSave:!1);function y(){h.value=null}function x(e){h.value=e.id}function S(){h.value=void 0}async function C(e){let t=h.value===null,n=e.displayName||e.modelName,r=t?`model-${n.toLowerCase().replace(/[^a-z0-9]/g,`-`).slice(0,24)}-${Date.now().toString(36)}`:h.value,i;if(t){let t=m.value.length===0;i=[...m.value,{id:r,name:n,apiKey:e.apiKey,baseURL:e.endpoint,model:e.modelName,isDefault:t}]}else i=m.value.map(t=>t.id===h.value?{...t,name:n,apiKey:e.apiKey||t.apiKey,baseURL:e.endpoint,model:e.modelName}:t);await a.saveModels(i)&&(m.value=i,h.value=void 0,W.success(Q(t?`@42BB9:已添加模型`:`@42BB9:已更新模型`)))}async function ee(e){let t=m.value.filter(t=>t.id!==e);await a.saveModels(t)&&(m.value=t,W.success(Q(`@42BB9:已删除模型`)))}async function te(e){let t=m.value.map(t=>({...t,isDefault:t.id===e}));await a.saveModels(t)&&(m.value=t,W.success(Q(`@42BB9:已设置默认模型`)))}let w=J(``),ne=J(``),T=J(``),re=J(!1),ie=J(!1),ae=J(`false`),E=J(!1),D=J(`true`),O=J(`main`),oe=``,se=``,ce=!1,k=`false`,A=!1,j=`true`,ue=`main`,M=`light`,N=`zh-CN`;b(()=>o.modelValue,async e=>{if(c.value=e,e){w.value=r.userName,ne.value=r.userEmail,T.value=``,d.value=a.theme,f.value=a.locale,m.value=[...a.models],h.value=void 0,p.value=a.ui.editorAutoSave;try{l.value=!0,await fe()}finally{l.value=!1}oe=w.value,se=ne.value,ce=ie.value,k=ae.value,A=E.value,j=D.value,ue=O.value,M=d.value,N=f.value}},{immediate:!0});function de(e){s(`update:modelValue`,e)}async function P(e){try{let t=await(await fetch(`/api/git/global-config?key=${encodeURIComponent(e)}`)).json();if(t.success)return String(t.value||``)}catch{}return``}async function F(e,t){let n=await(await fetch(`/api/git/global-config`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({key:e,value:t})})).json();if(!n.success)throw Error(n.error||`${Q(`@42BB9:设置 `)}${e}${Q(`@42BB9: 失败`)}`)}async function fe(){let[e,t,n,r,i]=await Promise.all([P(`push.autoSetupRemote`),P(`pull.rebase`),P(`fetch.prune`),P(`core.autocrlf`),P(`init.defaultBranch`)]);ie.value=(e||`false`).toLowerCase()===`true`;let a=(t||`false`).toLowerCase();ae.value=a===`true`||a===`merges`?a:`false`,E.value=(n||`false`).toLowerCase()===`true`;let o=(r||`true`).toLowerCase();D.value=o===`true`||o===`input`?o:`false`,O.value=i||`main`}async function pe(){let e=[];try{ie.value!==ce&&e.push(F(`push.autoSetupRemote`,ie.value?`true`:`false`)),ae.value!==k&&e.push(F(`pull.rebase`,ae.value)),E.value!==A&&e.push(F(`fetch.prune`,E.value?`true`:`false`)),D.value!==j&&e.push(F(`core.autocrlf`,D.value));let t=(O.value||``).trim();return t&&t!==ue&&e.push(F(`init.defaultBranch`,t)),e.length===0?!0:(await Promise.all(e),W.success(Q(`@42BB9:已保存变更的 Git 配置`)),ce=ie.value,k=ae.value,A=E.value,j=D.value,ue=t||ue,!0)}catch(e){return W.error(e.message),!1}}async function me(){let e={};if(d.value!==M&&(e.theme=d.value,M=d.value),f.value!==N&&(e.locale=f.value,i.changeLocale(f.value),N=f.value),e.theme!==void 0||e.locale!==void 0){let t=await a.saveGeneralSettings(e);return t&&W.success(Q(`@42BB9:通用设置已保存`)),t}return!0}async function I(){try{let e=await a.resetUiLayout();window.dispatchEvent(new CustomEvent(`ui-layout-reset`,{detail:{layout:e}})),W.success(Q(`@42BB9:布局比例已重置为默认值`))}catch(e){W.error(`${Q(`@42BB9:重置布局失败: `)}${e.message}`)}}async function he(){if(h.value!==void 0){W.warning(Q(`@42BB9:模型尚未保存,请先保存或取消模型编辑`));return}if(u.value===`config`){await _e();return}if(u.value===`editor`){a.ui.editorAutoSave=p.value,W.success(Q(`@42BB9:编辑器设置已保存`)),c.value=!1;return}if(!await me())return;if(!w.value||!ne.value){W.warning(Q(`@42BB9:用户名和邮箱不能为空`));return}let e=!0;(w.value!==oe||ne.value!==se)&&(e=await r.restoreUserConfig(w.value,ne.value),e&&(oe=w.value,se=ne.value));let t=await pe();e&&t&&(c.value=!1)}async function ge(){if(u.value=`config`,!T.value)try{let e=await(await fetch(`/api/config/check-file-format`)).json();e.success||W.warning(e.message||Q(`@42BB9:配置文件格式可能有问题`)),T.value=JSON.stringify(a.config,null,2)}catch{W.error(Q(`@42BB9:加载配置失败`))}}async function _e(){let e;try{e=JSON.parse(T.value)}catch(e){W.error(`${Q(`@42BB9:JSON 解析失败: `)}${e.message||e}`);return}try{re.value=!0;let t=await(await fetch(`/api/config/saveAll`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({config:e})})).json();if(!t.success){W.error(`${Q(`@42BB9:保存失败: `)}${t.error||Q(`@42BB9:未知错误`)}`);return}await a.loadConfig(),W.success(Q(`@42BB9:配置已保存`)),c.value=!1}catch(e){W.error(`${Q(`@42BB9:保存配置失败: `)}${e.message||e}`)}finally{re.value=!1}}async function ve(){try{let e=await(await fetch(`/api/config/open-file`,{method:`POST`})).json();e.success?W.success(Q(`@42BB9:已用系统程序打开配置文件`)):W.error(e.error||Q(`@42BB9:打开文件失败`))}catch(e){W.error(`${Q(`@42BB9:打开文件失败: `)}${e.message||e}`)}}let L={gitStore:r,localeStore:i,configStore:a,props:o,emit:s,visible:c,isLoading:l,activeTab:u,tempTheme:d,tempLocale:f,tempEditorAutoSave:p,aiModels:m,editingModelId:h,currentThemeForForm:g,editingModelInitial:_,hasChanges:v,startAddModel:y,startEditModel:x,cancelEditModel:S,handleAddModelSave:C,handleDeleteModel:ee,handleSetDefaultModel:te,tempUserName:w,tempUserEmail:ne,configEditorText:T,configEditorSaving:re,cfgAutoSetupRemote:ie,cfgPullRebase:ae,cfgFetchPrune:E,cfgCoreAutoCrlf:D,cfgInitDefaultBranch:O,get initUserName(){return oe},set initUserName(e){oe=e},get initUserEmail(){return se},set initUserEmail(e){se=e},get initAutoSetupRemote(){return ce},set initAutoSetupRemote(e){ce=e},get initPullRebase(){return k},set initPullRebase(e){k=e},get initFetchPrune(){return A},set initFetchPrune(e){A=e},get initCoreAutoCrlf(){return j},set initCoreAutoCrlf(e){j=e},get initInitDefaultBranch(){return ue},set initInitDefaultBranch(e){ue=e},get initTheme(){return M},set initTheme(e){M=e},get initLocale(){return N},set initLocale(e){N=e},handleVisibleChange:de,getGlobalConfig:P,setGlobalConfig:F,loadGlobalGitConfigs:fe,saveGlobalGitConfigs:pe,saveGeneralSettings:me,onResetUiLayout:I,handleSave:he,onClickConfigTab:ge,saveConfigJson:_e,openSystemConfigFile:ve,get $t(){return Q},get Check(){return Ae},get InfoFilled(){return le},CommonDialog:vt,get AddModelForm(){return ut}};return Object.defineProperty(L,`__isScriptSetup`,{enumerable:!1,value:!0}),L}}),Fu=[`element-loading-text`],Iu={class:`settings-tabs`},Lu={class:`settings-panels`},Ru={class:`settings-panel`},zu={class:`info-section`},Bu={class:`info-card`},Vu={class:`info-content`},Hu={class:`info-title`},Uu={class:`info-desc`},Wu={class:`settings-section`},Gu={class:`section-title`},Ku={class:`settings-grid`},qu={class:`setting-row`},Ju={class:`setting-label`},Yu={class:`settings-section`},Xu={class:`section-title`},Zu={class:`settings-grid`},Qu={class:`setting-row`},$u={class:`setting-label`},ed={class:`settings-section`},td={class:`section-title`},nd={class:`settings-grid`},rd={class:`setting-row`},id={class:`setting-label`},ad={class:`setting-row`},od={class:`setting-label`},sd={class:`setting-hint-inline`},cd={class:`setting-row setting-row--full`},ld={class:`setting-label`},ud={class:`console-sub-options`},dd={class:`console-split-row`},fd={class:`setting-hint-block`},pd={class:`setting-row`},md={class:`setting-label`},hd={class:`layout-actions`},gd={class:`setting-hint-block`},_d={class:`settings-section`},vd={class:`section-title model-section-title`},yd={class:`model-list`},bd={key:0,class:`model-empty`},xd={class:`model-info`},Sd={class:`model-name-row`},Cd={class:`model-name`},wd={key:0,class:`model-default-badge`},Td={class:`model-meta`},Ed={class:`model-actions`},Dd=[`onClick`],Od=[`onClick`],kd=[`onClick`],Ad={key:0,class:`ai-model-form-wrapper`},jd={class:`settings-panel`},Md={class:`info-section`},Nd={class:`info-card`},Pd={class:`info-content`},Fd={class:`info-title`},Id={class:`info-desc`},Ld={class:`basic-info-section`},Rd={class:`basic-info-grid`},zd={class:`settings-section`},Bd={class:`section-title`},Vd={class:`settings-grid`},Hd={class:`setting-row`},Ud={class:`setting-label`},Wd={class:`setting-row`},Gd={class:`setting-label`},Kd={class:`setting-row`},qd={class:`setting-label`},Jd={class:`setting-row`},Yd={class:`setting-label`},Xd={class:`setting-row`},Zd={class:`setting-label`},Qd={class:`settings-panel`},$d={class:`info-section`},ef={class:`info-card`},tf={class:`info-content`},nf={class:`info-title`},rf={class:`info-desc`},af={class:`settings-section`},of={class:`section-title`},sf={class:`settings-grid commit-settings-grid`},cf={class:`setting-row`},lf={class:`setting-label`},uf={class:`setting-row`},df={class:`setting-label`},ff={class:`setting-row`},pf={class:`setting-label`},mf={class:`setting-row`},hf={class:`setting-label`},gf={class:`setting-row`},_f={class:`setting-label`},vf={class:`setting-row`},yf={class:`setting-label`},bf={class:`settings-panel config-panel`},xf={class:`info-section`},Sf={class:`info-card`},Cf={class:`info-content`},wf={class:`info-title`},Tf={class:`info-desc`},Ef={class:`config-json-editor-wrap`},Df={class:`config-panel-actions`},Of={class:`settings-panel`},kf={class:`info-section`},Af={class:`info-card`},jf={class:`info-content`},Mf={class:`info-title`},Nf={class:`info-desc`},Pf={class:`settings-section`},Ff={class:`section-title`},If={class:`settings-grid`},Lf={class:`setting-row`},Rf={class:`setting-label`},zf={key:0,class:`setting-row setting-row--hint`},Bf={class:`setting-hint`},Vf={class:`user-settings-footer`},Hf={class:`footer-actions`},Uf=[`disabled`],Wf=[`disabled`];function Gf(e,t,n,r,i,s){let c=it,u=ce,d=st,f=a,m=Ne,h=Fe,g=M,_=Ye,v=l,y=V,b=p,x=A,S=xe;return Z(),H(r.CommonDialog,{modelValue:r.visible,"onUpdate:modelValue":[t[28]||=e=>r.visible=e,r.handleVisibleChange],title:r.$t(`@42BB9:设置`),size:`large`,"destroy-on-close":!0,"custom-class":`user-settings-dialog`},B({default:I(()=>[L((Z(),X(`div`,{class:`user-settings-content`,"element-loading-text":r.$t(`@42BB9:正在加载配置...`),"element-loading-background":`rgba(0, 0, 0, 0.15)`},[R(` 左侧标签页切换 `),U(`div`,Iu,[U(`div`,{class:K([`tab-item`,{active:r.activeTab===`general`}]),onClick:t[0]||=e=>r.activeTab=`general`},[U(`span`,null,z(r.$t(`@42BB9:通用设置`)),1)],2),U(`div`,{class:K([`tab-item`,{active:r.activeTab===`git`}]),onClick:t[1]||=e=>r.activeTab=`git`},[U(`span`,null,z(r.$t(`@42BB9:Git 全局设置`)),1)],2),U(`div`,{class:K([`tab-item`,{active:r.activeTab===`commit`}]),onClick:t[2]||=e=>r.activeTab=`commit`},[U(`span`,null,z(r.$t(`@42BB9:提交设置`)),1)],2),U(`div`,{class:K([`tab-item`,{active:r.activeTab===`config`}]),onClick:r.onClickConfigTab},[U(`span`,null,z(r.$t(`@42BB9:编辑配置`)),1)],2),U(`div`,{class:K([`tab-item`,{active:r.activeTab===`editor`}]),onClick:t[3]||=e=>r.activeTab=`editor`},[U(`span`,null,z(r.$t(`@42BB9:编辑器设置`)),1)],2)]),R(` 右侧内容区域 `),U(`div`,Lu,[R(` 通用设置面板 `),L(U(`div`,Ru,[U(`div`,zu,[U(`div`,Bu,[U(`div`,Vu,[U(`p`,Hu,z(r.$t(`@42BB9:通用配置`)),1),U(`p`,Uu,z(r.$t(`@42BB9:自定义应用的外观和语言`)),1)])])]),U(`div`,Wu,[U(`div`,Gu,[U(`span`,null,z(r.$t(`@42BB9:外观`)),1)]),U(`div`,Ku,[U(`div`,qu,[U(`label`,Ju,z(r.$t(`@42BB9:主题`)),1),o(u,{modelValue:r.tempTheme,"onUpdate:modelValue":t[4]||=e=>r.tempTheme=e,class:`modern-input`,size:`default`},{default:I(()=>[o(c,{label:r.$t(`@42BB9:浅色`),value:`light`},null,8,[`label`]),o(c,{label:r.$t(`@42BB9:深色`),value:`dark`},null,8,[`label`]),o(c,{label:r.$t(`@42BB9:跟随系统`),value:`auto`},null,8,[`label`])]),_:1},8,[`modelValue`])])])]),U(`div`,Yu,[U(`div`,Xu,[U(`span`,null,z(r.$t(`@42BB9:语言`)),1)]),U(`div`,Zu,[U(`div`,Qu,[U(`label`,$u,z(r.$t(`@42BB9:界面语言`)),1),o(u,{modelValue:r.tempLocale,"onUpdate:modelValue":t[5]||=e=>r.tempLocale=e,class:`modern-input`,size:`default`},{default:I(()=>[o(c,{label:`简体中文`,value:`zh-CN`}),o(c,{label:`English`,value:`en-US`})]),_:1},8,[`modelValue`])])])]),R(` 界面(视图模式 / 分割比例 / 控制台 / 布局比例) `),U(`div`,ed,[U(`div`,td,[U(`span`,null,z(r.$t(`@42BB9:界面`)),1)]),U(`div`,nd,[R(` 文件列表视图模式 `),U(`div`,rd,[U(`label`,id,z(r.$t(`@42BB9:文件列表视图`)),1),o(f,{modelValue:r.configStore.ui.fileListViewMode,"onUpdate:modelValue":t[6]||=e=>r.configStore.ui.fileListViewMode=e,size:`default`},{default:I(()=>[o(d,{value:`list`},{default:I(()=>[k(z(r.$t(`@42BB9:列表`)),1)]),_:1}),o(d,{value:`tree`},{default:I(()=>[k(z(r.$t(`@42BB9:树状`)),1)]),_:1})]),_:1},8,[`modelValue`])]),R(` 文件差异分割比例 `),U(`div`,ad,[U(`label`,od,[k(z(r.$t(`@42BB9:文件差异分割`))+` `,1),U(`span`,sd,z(r.configStore.ui.fileDiffSplitPercent)+`%`,1)]),o(m,{modelValue:r.configStore.ui.fileDiffSplitPercent,"onUpdate:modelValue":t[7]||=e=>r.configStore.ui.fileDiffSplitPercent=e,min:15,max:85,step:1,class:`setting-slider`},null,8,[`modelValue`])]),R(` 命令控制台(跨整行的复合控件) `),U(`div`,cd,[U(`label`,ld,z(r.$t(`@42BB9:命令控制台`)),1),U(`div`,ud,[o(h,{modelValue:r.configStore.ui.commandConsole.expanded,"onUpdate:modelValue":t[8]||=e=>r.configStore.ui.commandConsole.expanded=e,"active-text":r.$t(`@42BB9:默认展开`)},null,8,[`modelValue`,`active-text`]),o(h,{modelValue:r.configStore.ui.commandConsole.useTerminal,"onUpdate:modelValue":t[9]||=e=>r.configStore.ui.commandConsole.useTerminal=e,"active-text":r.$t(`@42BB9:使用终端执行`)},null,8,[`modelValue`,`active-text`]),o(h,{modelValue:r.configStore.ui.commandConsole.showTerminalSessions,"onUpdate:modelValue":t[10]||=e=>r.configStore.ui.commandConsole.showTerminalSessions=e,"active-text":r.$t(`@42BB9:显示终端会话`)},null,8,[`modelValue`,`active-text`]),U(`div`,dd,[U(`span`,fd,z(r.$t(`@42BB9:控制台高度比例`))+`: `+z(r.configStore.ui.commandConsole.splitPercent)+`% `,1),o(m,{modelValue:r.configStore.ui.commandConsole.splitPercent,"onUpdate:modelValue":t[11]||=e=>r.configStore.ui.commandConsole.splitPercent=e,min:15,max:85,step:1,class:`setting-slider`},null,8,[`modelValue`])])])]),R(` 布局比例重置 `),U(`div`,pd,[U(`label`,md,z(r.$t(`@42BB9:布局比例`)),1),U(`div`,hd,[o(g,{onClick:r.onResetUiLayout,size:`default`},{default:I(()=>[k(z(r.$t(`@42BB9:重置为默认布局`)),1)]),_:1}),U(`span`,gd,z(r.$t(`@42BB9:恢复默认的左/中/右/上面板比例`)),1)])])])]),R(` AI 模型配置 `),U(`div`,_d,[U(`div`,vd,[U(`span`,null,z(r.$t(`@42BB9:AI 模型配置`)),1),U(`button`,{class:`add-model-btn`,onClick:r.startAddModel},`+ `+z(r.$t(`@42BB9:添加模型`)),1)]),U(`div`,yd,[r.aiModels.length===0?(Z(),X(`div`,bd,z(r.$t(`@42BB9:暂未配置模型`)),1)):R(`v-if`,!0),(Z(!0),X(Y,null,F(r.aiModels,e=>(Z(),X(`div`,{key:e.id,class:`model-card`},[U(`div`,xd,[U(`div`,Sd,[U(`span`,Cd,z(e.name),1),e.isDefault?(Z(),X(`span`,wd,z(r.$t(`@42BB9:默认`)),1)):R(`v-if`,!0)]),U(`div`,Td,z(e.model)+` · `+z(e.baseURL),1)]),U(`div`,Ed,[e.isDefault?R(`v-if`,!0):(Z(),X(`button`,{key:0,class:`model-btn`,onClick:t=>r.handleSetDefaultModel(e.id)},z(r.$t(`@42BB9:设为默认`)),9,Dd)),U(`button`,{class:`model-btn`,onClick:t=>r.startEditModel(e)},z(r.$t(`@42BB9:编辑`)),9,Od),U(`button`,{class:`model-btn model-btn--danger`,onClick:t=>r.handleDeleteModel(e.id)},z(r.$t(`@42BB9:删除`)),9,kd)])]))),128))]),R(` 新增 / 编辑表单:使用 ai-model-form 组件 `),r.editingModelId===void 0?R(`v-if`,!0):(Z(),X(`div`,Ad,[(Z(),H(r.AddModelForm,{key:r.editingModelId??`__new__`,"api-base":`/api/ai-model`,initial:r.editingModelInitial,theme:r.currentThemeForForm,locale:r.localeStore.currentLocale,onSave:r.handleAddModelSave,onCancel:r.cancelEditModel},null,8,[`initial`,`theme`,`locale`]))]))])],512),[[q,r.activeTab===`general`]]),R(` Git 全局设置面板 `),L(U(`div`,jd,[U(`div`,Md,[U(`div`,Nd,[U(`div`,Pd,[U(`p`,Fd,z(r.$t(`@42BB9:全局配置`)),1),U(`p`,Id,z(r.$t(`@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效`)),1)])])]),o(x,{class:`user-form`,"label-width":`auto`,model:{tempUserName:r.tempUserName,tempUserEmail:r.tempUserEmail}},{default:I(()=>[U(`div`,Ld,[U(`div`,Rd,[o(v,{class:`form-item`,label:r.$t(`@42BB9:用户名`)},{default:I(()=>[o(_,{modelValue:r.tempUserName,"onUpdate:modelValue":t[12]||=e=>r.tempUserName=e,placeholder:r.$t(`@42BB9:请输入 Git 用户名`),class:`modern-input`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),o(v,{class:`form-item`,label:r.$t(`@42BB9:邮箱地址`)},{default:I(()=>[o(_,{modelValue:r.tempUserEmail,"onUpdate:modelValue":t[13]||=e=>r.tempUserEmail=e,placeholder:r.$t(`@42BB9:请输入 Git 邮箱地址`),class:`modern-input`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])]),R(` 高级设置:常用全局 Git 配置 `),U(`div`,zd,[U(`div`,Bd,[U(`span`,null,z(r.$t(`@42BB9:高级配置`)),1)]),U(`div`,Vd,[U(`div`,Hd,[U(`label`,Ud,[k(z(r.$t(`@42BB9:自动设置上游`))+` `,1),o(b,{content:r.$t(`@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.cfgAutoSetupRemote,"onUpdate:modelValue":t[14]||=e=>r.cfgAutoSetupRemote=e},null,8,[`modelValue`])]),U(`div`,Wd,[U(`label`,Gd,z(r.$t(`@42BB9:拉取策略`)),1),o(u,{modelValue:r.cfgPullRebase,"onUpdate:modelValue":t[15]||=e=>r.cfgPullRebase=e,class:`modern-input`,size:`default`},{default:I(()=>[o(c,{label:r.$t(`@42BB9:merge (默认)`),value:`false`},null,8,[`label`]),o(c,{label:`rebase`,value:`true`}),o(c,{label:r.$t(`@42BB9:rebase(保留合并)`),value:`merges`},null,8,[`label`])]),_:1},8,[`modelValue`])]),U(`div`,Kd,[U(`label`,qd,[k(z(r.$t(`@42BB9:自动清理远程分支`))+` `,1),o(b,{content:r.$t(`@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.cfgFetchPrune,"onUpdate:modelValue":t[16]||=e=>r.cfgFetchPrune=e},null,8,[`modelValue`])]),U(`div`,Jd,[U(`label`,Yd,z(r.$t(`@42BB9:换行符处理`)),1),o(u,{modelValue:r.cfgCoreAutoCrlf,"onUpdate:modelValue":t[17]||=e=>r.cfgCoreAutoCrlf=e,class:`modern-input`,size:`default`},{default:I(()=>[o(c,{label:`true (Windows)`,value:`true`}),o(c,{label:`input`,value:`input`}),o(c,{label:`false`,value:`false`})]),_:1},8,[`modelValue`])]),U(`div`,Xd,[U(`label`,Zd,[k(z(r.$t(`@42BB9:默认初始化分支`))+` `,1),o(b,{content:r.$t(`@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(_,{modelValue:r.cfgInitDefaultBranch,"onUpdate:modelValue":t[18]||=e=>r.cfgInitDefaultBranch=e,placeholder:r.$t(`@42BB9:例如: main`),class:`modern-input`,size:`default`},null,8,[`modelValue`,`placeholder`])])])])]),_:1},8,[`model`])],512),[[q,r.activeTab===`git`]]),R(` 提交设置面板 `),L(U(`div`,Qd,[U(`div`,$d,[U(`div`,ef,[U(`div`,tf,[U(`p`,nf,z(r.$t(`@76872:提交设置`)),1),U(`p`,rf,z(r.$t(`@76872:这些设置实时生效`)),1)])])]),U(`div`,af,[U(`div`,of,[U(`span`,null,z(r.$t(`@76872:提交格式与行为`)),1)]),U(`div`,sf,[U(`div`,cf,[U(`label`,lf,z(r.$t(`@76872:标准化提交`)),1),o(h,{modelValue:r.configStore.isStandardCommit,"onUpdate:modelValue":t[19]||=e=>r.configStore.isStandardCommit=e},null,8,[`modelValue`])]),U(`div`,uf,[U(`label`,df,[k(z(r.$t(`@76872:跳过钩子检查`))+` `,1),o(b,{content:r.$t(`@76872:添加 --no-verify 参数`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.skipHooks,"onUpdate:modelValue":t[20]||=e=>r.configStore.skipHooks=e},null,8,[`modelValue`])]),U(`div`,ff,[U(`label`,pf,[k(z(r.$t(`@76872:回车自动提交`))+` `,1),o(b,{content:r.$t(`@76872:输入提交信息后按回车直接执行一键推送`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.autoQuickPushOnEnter,"onUpdate:modelValue":t[21]||=e=>r.configStore.autoQuickPushOnEnter=e},null,8,[`modelValue`])]),U(`div`,mf,[U(`label`,hf,[k(z(r.$t(`@76872:Push完成自动关闭`))+` `,1),o(b,{content:r.$t(`@76872:推送成功后自动关闭进度弹窗`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.autoClosePushModal,"onUpdate:modelValue":t[22]||=e=>r.configStore.autoClosePushModal=e},null,8,[`modelValue`])]),U(`div`,gf,[U(`label`,_f,[k(z(r.$t(`@76872:推送前拉取更新`))+` `,1),o(b,{content:r.$t(`@76872:推送前自动拉取远程更新,有冲突则停止推送`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.pullBeforePush,"onUpdate:modelValue":t[23]||=e=>r.configStore.pullBeforePush=e},null,8,[`modelValue`])]),U(`div`,vf,[U(`label`,yf,[k(z(r.$t(`@76872:自动填充默认提交信息`))+` `,1),o(b,{content:r.$t(`@76872:打开页面或提交完成后自动填充默认提交信息`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.autoSetDefaultMessage,"onUpdate:modelValue":t[24]||=e=>r.configStore.autoSetDefaultMessage=e},null,8,[`modelValue`])])])])],512),[[q,r.activeTab===`commit`]]),R(` 编辑配置 JSON 面板 `),L(U(`div`,bf,[U(`div`,xf,[U(`div`,Sf,[U(`div`,Cf,[U(`p`,wf,z(r.$t(`@42BB9:编辑当前项目的配置文件`)),1),U(`p`,Tf,z(r.$t(`@42BB9:直接编辑 JSON,支持所有配置项`)),1)])])]),U(`div`,Ef,[o(_,{modelValue:r.configEditorText,"onUpdate:modelValue":t[25]||=e=>r.configEditorText=e,type:`textarea`,spellcheck:`false`,autocomplete:`off`,placeholder:r.$t(`@42BB9:加载中...`),class:`config-json-editor`},null,8,[`modelValue`,`placeholder`])]),U(`div`,Df,[U(`button`,{type:`button`,class:`dialog-cancel-btn system-config-btn`,onClick:r.openSystemConfigFile},z(r.$t(`@42BB9:打开系统配置文件`)),1)])],512),[[q,r.activeTab===`config`]]),R(` 编辑器设置面板 `),L(U(`div`,Of,[U(`div`,kf,[U(`div`,Af,[U(`div`,jf,[U(`p`,Mf,z(r.$t(`@42BB9:编辑器设置`)),1),U(`p`,Nf,z(r.$t(`@42BB9:自定义编辑器行为`)),1)])])]),U(`div`,Pf,[U(`div`,Ff,[U(`span`,null,z(r.$t(`@42BB9:文件编辑`)),1)]),U(`div`,If,[U(`div`,Lf,[U(`label`,Rf,z(r.$t(`@42BB9:自动保存`)),1),o(h,{modelValue:r.tempEditorAutoSave,"onUpdate:modelValue":t[26]||=e=>r.tempEditorAutoSave=e},null,8,[`modelValue`])]),r.tempEditorAutoSave?(Z(),X(`div`,zf,[U(`span`,Bf,z(r.$t(`@42BB9:失去焦点时自动保存当前文件`)),1)])):R(`v-if`,!0)])])],512),[[q,r.activeTab===`editor`]])])],8,Fu)),[[S,r.isLoading]])]),_:2},[r.activeTab===`commit`?void 0:{name:`footer`,fn:I(()=>[U(`div`,Vf,[t[29]||=U(`div`,null,null,-1),U(`div`,Hf,[U(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[27]||=e=>r.visible=!1,disabled:r.isLoading},z(r.hasChanges?r.$t(`@42BB9:取消`):r.$t(`@42BB9:关闭`)),9,Uf),r.hasChanges?(Z(),X(`button`,{key:0,type:`button`,class:`dialog-confirm-btn`,onClick:r.handleSave,disabled:r.isLoading},[o(y,null,{default:I(()=>[o(r.Check)]),_:1}),U(`span`,null,z(r.activeTab===`config`?r.$t(`@42BB9:保存配置`):r.$t(`@42BB9:保存设置`)),1)],8,Wf)):R(`v-if`,!0)])])]),key:`0`}]),1032,[`modelValue`,`title`])}var Kf=$(Pu,[[`render`,Gf],[`__scopeId`,`data-v-97bdc1da`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/GitGlobalSettingsDialog.vue`]]),qf=ft(`workbenchStatus`,()=>{let e=J(0);function t(t){e.value=Math.max(0,t|0)}return{runningCount:e,hasRunning:G(()=>e.value>0),setRunning:t}}),Jf=ft(`editorTabs`,()=>{let e=J(0);function t(t){e.value=Math.max(0,t|0)}return{dirtyCount:e,hasDirty:G(()=>e.value>0),setDirtyCount:t}}),Yf=ft(`terminalSessions`,()=>{let e=J(0);function t(t){e.value=Math.max(0,t|0)}return{count:e,hasActive:G(()=>e.value>0),setCount:t}}),Xf=j({__name:`ActivityBar`,props:{activeView:{type:String,required:!0}},emits:[`update:activeView`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=qf(),o=Ht(),s=Jf(),c=Yf(),l=G(()=>o.fileList?.length??0),u=G(()=>{let e=l.value;return e>99?`99+`:String(e)}),d=G(()=>{let e=s.dirtyCount;return e>99?`99+`:String(e)});function f(e){i(`update:activeView`,e)}let m={props:r,emit:i,wbStatus:a,gitStore:o,editorTabsStore:s,terminalSessionsStore:c,uncommittedCount:l,uncommittedBadge:u,editorDirtyBadge:d,select:f,get $t(){return Q},get ElTooltip(){return p}};return Object.defineProperty(m,`__isScriptSetup`,{enumerable:!1,value:!0}),m}}),Zf={class:`activity-bar`},Qf=[`aria-label`,`aria-pressed`],$f=[`title`],ep=[`aria-label`,`aria-pressed`],tp=[`title`],np=[`aria-label`,`aria-pressed`],rp=[`aria-label`,`aria-pressed`],ip=[`title`],ap=[`aria-label`,`aria-pressed`],op=[`aria-label`,`aria-pressed`],sp=[`title`],cp=[`aria-label`,`aria-pressed`],lp=[`aria-label`,`aria-pressed`];function up(e,t,n,r,i,a){return Z(),X(`div`,Zf,[R(` Git 页面 `),o(r.ElTooltip,{content:r.uncommittedCount>0?`${r.$t(`@ACTBAR:Git`)} · ${r.uncommittedCount} ${r.$t(`@ACTBAR:个未提交文件`)}`:r.$t(`@ACTBAR:Git`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`git`}]),onClick:t[0]||=e=>r.select(`git`),"aria-label":r.uncommittedCount>0?`${r.$t(`@ACTBAR:Git`)} · ${r.uncommittedCount} ${r.$t(`@ACTBAR:个未提交文件`)}`:r.$t(`@ACTBAR:Git`),"aria-pressed":r.props.activeView===`git`},[R(` git.svg `),t[8]||=U(`svg`,{viewBox:`0 0 1025 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M1004.728 466.4l-447.104-447.072c-25.728-25.76-67.488-25.76-93.28 0l-103.872 103.872 78.176 78.176c12.544-5.984 26.56-9.376 41.376-9.376 53.024 0 96 42.976 96 96 0 14.816-3.36 28.864-9.376 41.376l127.968 127.968c12.544-5.984 26.56-9.376 41.376-9.376 53.024 0 96 42.976 96 96s-42.976 96-96 96-96-42.976-96-96c0-14.816 3.36-28.864 9.376-41.376l-127.968-127.968c-3.04 1.472-6.176 2.752-9.376 3.872l0 266.976c37.28 13.184 64 48.704 64 90.528 0 53.024-42.976 96-96 96s-96-42.976-96-96c0-41.792 26.72-77.344 64-90.528l0-266.976c-37.28-13.184-64-48.704-64-90.528 0-14.816 3.36-28.864 9.376-41.376l-78.176-78.176-295.904 295.872c-25.76 25.792-25.76 67.52 0 93.28l447.136 447.072c25.728 25.76 67.488 25.76 93.28 0l444.992-444.992c25.76-25.76 25.76-67.552 0-93.28z`})],-1),r.uncommittedCount>0?(Z(),X(`span`,{key:0,class:`git-uncommitted-badge`,title:`${r.uncommittedCount} ${r.$t(`@ACTBAR:个未提交文件`)}`,"aria-hidden":`true`},z(r.uncommittedBadge),9,$f)):R(`v-if`,!0)],10,Qf)]),_:1},8,[`content`]),R(` 控制台页面:自定义命令 + 命令控制台(从 Git 视图拆出) `),o(r.ElTooltip,{content:r.terminalSessionsStore.hasActive?`${r.$t(`@ACTBAR:控制台`)} · ${r.terminalSessionsStore.count} ${r.$t(`@ACTBAR:个终端会话`)}`:r.$t(`@ACTBAR:控制台`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`console`}]),onClick:t[1]||=e=>r.select(`console`),"aria-label":r.terminalSessionsStore.hasActive?`${r.$t(`@ACTBAR:控制台`)} · ${r.terminalSessionsStore.count} ${r.$t(`@ACTBAR:个终端会话`)}`:r.$t(`@ACTBAR:控制台`),"aria-pressed":r.props.activeView===`console`},[R(` terminal.svg: 终端窗口 + 光标 `),t[9]||=U(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[U(`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`}),U(`path`,{d:`M6 9l3 3-3 3`}),U(`line`,{x1:`12`,y1:`15`,x2:`17`,y2:`15`})],-1),r.terminalSessionsStore.hasActive?(Z(),X(`span`,{key:0,class:`console-sessions-badge`,title:r.$t(`@ACTBAR:个终端会话`),"aria-hidden":`true`},z(r.terminalSessionsStore.count>99?`99+`:r.terminalSessionsStore.count),9,tp)):R(`v-if`,!0)],10,ep)]),_:1},8,[`content`]),R(` 智能体 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:智能体`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`agent`}]),onClick:t[2]||=e=>r.select(`agent`),"aria-label":r.$t(`@ACTBAR:智能体`),"aria-pressed":r.props.activeView===`agent`},[R(` robot/bot.svg: 智能体图标 `),t[10]||=U(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[U(`rect`,{x:`3`,y:`11`,width:`18`,height:`10`,rx:`2`}),U(`circle`,{cx:`12`,cy:`5`,r:`2`}),U(`path`,{d:`M12 7v4`}),U(`line`,{x1:`8`,y1:`16`,x2:`8`,y2:`16`}),U(`line`,{x1:`16`,y1:`16`,x2:`16`,y2:`16`})],-1)],10,np)]),_:1},8,[`content`]),R(` 编辑器页面 `),o(r.ElTooltip,{content:r.editorTabsStore.hasDirty?`${r.$t(`@ACTBAR:编辑器`)} · ${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`:r.$t(`@ACTBAR:编辑器`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`editor`}]),onClick:t[3]||=e=>r.select(`editor`),"aria-label":r.editorTabsStore.hasDirty?`${r.$t(`@ACTBAR:编辑器`)} · ${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`:r.$t(`@ACTBAR:编辑器`),"aria-pressed":r.props.activeView===`editor`},[R(` code-folder.svg `),t[11]||=U(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M928 687.9c-17.8 0-32.2 14.4-32.2 32.1v80.7c0 35.3-28.7 64-64 64H192.5c-35.3 0-64-28.7-64-64V225c0-35.3 28.7-64 64-64H415l82.7 143.3c6.6 11.4 19.2 17.2 31.5 15.8h302.5c35.3 0 64 28.7 64 64v80c0 17.7 14.4 32.1 32.2 32.1s32.2-14.4 32.2-32.1c0-0.8 0-1.6-0.1-2.4v-77.5C960 329 925.1 282 876.1 264v-1c0-68.2-55.8-124-124-124H476.2l-14.8-25.7c-7.4-12.9-18-16.2-27.3-16l-0.1-0.1H192.1c-70.7 0-128 57.3-128 128v574.1c0 70.7 57.3 128 128 128h640c70.7 0 128-57.3 128-128v-76.9c0.1-0.8 0.1-1.6 0.1-2.4 0-17.7-14.4-32.1-32.2-32.1zM747.1 202.8c31.6 0 58 23.2 63.1 53.4H543.9l-30.8-53.4h234z`})],-1),r.editorTabsStore.hasDirty?(Z(),X(`span`,{key:0,class:`editor-dirty-badge`,title:`${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`,"aria-hidden":`true`},z(r.editorDirtyBadge),9,ip)):R(`v-if`,!0)],10,rp)]),_:1},8,[`content`]),R(` 源码地图 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:源码地图`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`source-map`}]),onClick:t[4]||=e=>r.select(`source-map`),"aria-label":r.$t(`@ACTBAR:源码地图`),"aria-pressed":r.props.activeView===`source-map`},[R(` code-map.svg `),t[12]||=U(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M961.5 700.5 889 700.5 889 512c0-24-19.5-43.5-43.5-43.5L541 468.5l0-145 72.5 0c24 0 43.5-19.5 43.5-43.5L657 77c0-24-19.5-43.5-43.5-43.5l-203 0C386.5 33.5 367 53 367 77l0 203c0 24 19.5 43.5 43.5 43.5L483 323.5l0 145L178.5 468.5c-24 0-43.5 19.5-43.5 43.5l0 188.5L62.5 700.5C38.5 700.5 19 720 19 744l0 203c0 24 19.5 43.5 43.5 43.5l203 0c24 0 43.5-19.5 43.5-43.5L309 744c0-24-19.5-43.5-43.5-43.5L193 700.5l0-174 290 0 0 174-72.5 0c-24 0-43.5 19.5-43.5 43.5l0 203c0 24 19.5 43.5 43.5 43.5l203 0c24 0 43.5-19.5 43.5-43.5L657 744c0-24-19.5-43.5-43.5-43.5L541 700.5l0-174 290 0 0 174-72.5 0c-24 0-43.5 19.5-43.5 43.5l0 203c0 24 19.5 43.5 43.5 43.5l203 0c24 0 43.5-19.5 43.5-43.5L1005 744C1005 720 985.5 700.5 961.5 700.5zM425 91.5l174 0 0 174L425 265.5 425 91.5zM251 758.5l0 174L77 932.5l0-174L251 758.5zM599 932.5 425 932.5l0-174 174 0L599 932.5zM947 932.5 773 932.5l0-174 174 0L947 932.5z`})],-1)],10,ap)]),_:1},8,[`content`]),R(` 工作台 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:工作台`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`workbench`}]),onClick:t[5]||=e=>r.select(`workbench`),"aria-label":r.wbStatus.runningCount>0?`${r.$t(`@ACTBAR:工作台`)} · ${r.wbStatus.runningCount} ${r.$t(`@ACTBAR:个任务正在执行`)}`:r.$t(`@ACTBAR:工作台`),"aria-pressed":r.props.activeView===`workbench`},[R(` code-task.svg `),t[13]||=U(`svg`,{viewBox:`0 0 1044 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M840.454 62.442H201.849c-76.445 0-139.409 63.68-139.409 141.007v614.048c0 77.326 62.963 141.007 139.408 141.007h638.605c76.454 0 139.408-63.68 139.408-141.007V203.449c0-77.326-58.454-141.007-139.408-141.007z m71.955 759.608c0 40.931-31.473 72.772-71.954 72.772H201.85c-40.473 0-71.954-31.84-71.954-72.772V203.447c0-40.931 31.481-72.772 71.954-72.772h638.605c40.481 0 71.954 31.84 71.954 72.772V822.05zM399.73 285.32l-98.936 100.065-44.973-45.477c-13.5-13.647-35.981-13.647-44.973 0-13.5 13.638-13.5 36.386 0 45.477l71.954 72.781c4.5 4.546 13.492 9.092 26.981 9.092 13.5 0 13.5-4.546 26.981-9.092L458.19 335.353c13.5-13.647 13.5-36.386 0-45.487-26.981-13.638-44.973-13.638-58.463-4.546z m413.743 54.588H503.165c-22.481 0-31.481 13.638-31.481 31.84 0 22.739 13.5 31.84 31.481 31.84h310.316c22.481 0 31.473-13.647 31.473-31.84 0-18.202-13.5-31.84-31.481-31.84zM318.775 544.584c-58.463 0-103.436 45.487-103.436 104.62 0 59.125 44.973 104.611 103.436 104.611 58.473 0 103.436-45.487 103.436-104.611 0-63.68-49.463-104.62-103.436-104.62z m0 136.459c-22.481 0-35.973-13.647-35.973-36.386 0-22.747 13.492-36.395 35.973-36.395 22.492 0 35.981 13.647 35.981 36.395 0 22.739-17.992 36.386-35.981 36.386z m494.698-68.235H503.165c-22.481 0-31.481 13.647-31.481 31.849 0 18.184 13.5 31.84 31.481 31.84h310.316c22.481 0 31.473-13.647 31.473-31.84 0-18.202-13.5-31.84-31.481-31.84z`})],-1),r.wbStatus.runningCount>0?(Z(),X(`span`,{key:0,class:`wb-running-badge`,title:r.$t(`@ACTBAR:有任务正在执行`),"aria-hidden":`true`},z(r.wbStatus.runningCount>99?`99+`:r.wbStatus.runningCount),9,sp)):R(`v-if`,!0)],10,op)]),_:1},8,[`content`]),R(` 系统监控 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:系统监控`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`monitor`}]),onClick:t[6]||=e=>r.select(`monitor`),"aria-label":r.$t(`@ACTBAR:系统监控`),"aria-pressed":r.props.activeView===`monitor`},[R(` activity.svg: 心跳/波形监控图标 `),t[14]||=U(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M22 12h-4l-3 9L9 3l-3 9H2`})],-1)],10,cp)]),_:1},8,[`content`]),R(` 思维导图 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:思维导图`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`mindmap`}]),onClick:t[7]||=e=>r.select(`mindmap`),"aria-label":r.$t(`@ACTBAR:思维导图`),"aria-pressed":r.props.activeView===`mindmap`},[R(` mindmap.svg: 中心节点 + 四向辐射的节点拓扑 `),t[15]||=U(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[U(`circle`,{cx:`12`,cy:`12`,r:`2.2`}),U(`circle`,{cx:`4.5`,cy:`5`,r:`1.8`}),U(`circle`,{cx:`19.5`,cy:`5`,r:`1.8`}),U(`circle`,{cx:`4.5`,cy:`19`,r:`1.8`}),U(`circle`,{cx:`19.5`,cy:`19`,r:`1.8`}),U(`line`,{x1:`10.3`,y1:`10.6`,x2:`6`,y2:`6.2`}),U(`line`,{x1:`13.7`,y1:`10.6`,x2:`18`,y2:`6.2`}),U(`line`,{x1:`10.3`,y1:`13.4`,x2:`6`,y2:`17.8`}),U(`line`,{x1:`13.7`,y1:`13.4`,x2:`18`,y2:`17.8`})],-1)],10,lp)]),_:1},8,[`content`])])}var dp=$(Xf,[[`render`,up],[`__scopeId`,`data-v-d652a324`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/ActivityBar.vue`]]),fp=zt(),pp=15e3,mp=ft(`instances`,()=>{let e=J([]),t=J(null),n=J(null),r=J(null),i=G(()=>t.value==null?null:e.value.find(e=>e.pid===t.value)??null),a=G(()=>t.value==null?e.value:e.value.filter(e=>e.pid!==t.value));async function o(){try{let n=await fetch(`/api/instances`);if(!n.ok)throw Error(`HTTP ${n.status}`);let i=await n.json();i&&`success`in i&&i.success?(e.value=i.instances,t.value=i.currentInstanceId,r.value=null):r.value=`error`in i&&i.error||`未知错误`}catch(e){r.value=e.message}}function s(){if(n.value)return;let t=yt(`http://localhost:${fp}`,{transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1e3,reconnectionDelayMax:1e4,reconnectionAttempts:1/0,timeout:2e4,forceNew:!0});n.value=t,t.on(`instances_changed`,t=>{t&&Array.isArray(t.instances)&&(e.value=t.instances)})}function c(){if(n.value){try{n.value.off(`instances_changed`)}catch{}try{n.value.disconnect()}catch{}n.value=null}}function l(){o(),s(),d(),document.addEventListener(`visibilitychange`,p)}function u(){c(),f(),document.removeEventListener(`visibilitychange`,p)}function d(){f(),!(typeof document<`u`&&document.hidden)&&(m=window.setInterval(()=>{o()},pp))}function f(){m!=null&&(window.clearInterval(m),m=null)}function p(){document.hidden?f():(o(),d())}let m=null;return{list:e,currentInstanceId:t,currentInstance:i,otherInstances:a,lastError:r,refresh:o,start:l,stop:u}}),hp=j({__name:`InstanceSwitcher`,setup(e,{expose:t}){t();let n=mp(),i=G(()=>n.list.length>0),a=G(()=>n.list.length),o=G(()=>`${a.value} ${Q(`@INSSW:个实例`)}`);function s(e){e&&window.open(`http://localhost:${e}`,`_blank`,`noopener`)}function c(e){return Ot(e.projectPath)||e.projectName}let l={store:n,hasAny:i,count:a,triggerText:o,handleOpen:s,pathSubtitle:c,get ElDropdown(){return re},get ElDropdownMenu(){return r},get ElDropdownItem(){return Re},get ElIcon(){return V},get ElTag(){return C},get $t(){return Q}};return Object.defineProperty(l,`__isScriptSetup`,{enumerable:!1,value:!0}),l}}),gp={class:`instance-switcher`},_p={class:`switcher-text`},vp={class:`instance-row instance-row--current`},yp={class:`instance-row-main`},bp={class:`instance-name`},xp={class:`instance-row-sub`},Sp={class:`instance-path`},Cp={class:`instance-row`},wp={class:`instance-row-main`},Tp={class:`instance-name`},Ep={class:`instance-row-sub`},Dp={class:`instance-path`},Op={class:`instance-empty`};function kp(e,t,n,r,i,a){return r.hasAny?(Z(),H(r.ElDropdown,{key:0,trigger:`click`,placement:`bottom-end`,onCommand:r.handleOpen},{dropdown:I(()=>[o(r.ElDropdownMenu,{class:`instance-dropdown-menu`},{default:I(()=>[R(` 当前实例(不可点击) `),r.store.currentInstance?(Z(),H(r.ElDropdownItem,{key:0,disabled:``},{default:I(()=>[U(`div`,vp,[U(`div`,yp,[U(`span`,bp,z(r.store.currentInstance.projectName),1),o(r.ElTag,{size:`small`,type:`primary`,effect:`light`,class:`instance-tag`},{default:I(()=>[k(z(r.$t(`@INSSW:当前`)),1)]),_:1})]),U(`div`,xp,[o(r.ElTag,{size:`small`,effect:`plain`,class:`port-badge`},{default:I(()=>[k(`:`+z(r.store.currentInstance.port),1)]),_:1}),U(`span`,Sp,z(r.pathSubtitle(r.store.currentInstance)),1)])])]),_:1})):R(`v-if`,!0),R(` 其他运行中的实例 `),(Z(!0),X(Y,null,F(r.store.otherInstances,e=>(Z(),H(r.ElDropdownItem,{key:e.pid,command:e.port},{default:I(()=>[U(`div`,Cp,[U(`div`,wp,[U(`span`,Tp,z(e.projectName),1),o(r.ElTag,{size:`small`,effect:`plain`,class:`port-badge`},{default:I(()=>[k(`:`+z(e.port),1)]),_:2},1024)]),U(`div`,Ep,[U(`span`,Dp,z(r.pathSubtitle(e)),1)])])]),_:2},1032,[`command`]))),128)),R(` 空状态 `),r.store.otherInstances.length===0?(Z(),H(r.ElDropdownItem,{key:1,disabled:``},{default:I(()=>[U(`span`,Op,z(r.$t(`@INSSW:无其他运行中的实例`)),1)]),_:1})):R(`v-if`,!0)]),_:1})]),default:I(()=>[U(`span`,gp,[o(r.ElIcon,{class:`switcher-icon`},{default:I(()=>[R(` apps/layers 图标 `),t[0]||=U(`svg`,{viewBox:`0 0 24 24`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[U(`rect`,{x:`3`,y:`3`,width:`7`,height:`7`,rx:`1`}),U(`rect`,{x:`14`,y:`3`,width:`7`,height:`7`,rx:`1`}),U(`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`}),U(`rect`,{x:`14`,y:`14`,width:`7`,height:`7`,rx:`1`})],-1)]),_:1}),U(`span`,_p,z(r.triggerText),1)])]),_:1})):R(`v-if`,!0)}var Ap=$(hp,[[`render`,kp],[`__scopeId`,`data-v-8a24f415`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/InstanceSwitcher.vue`]]),jp=J(!0),Mp=J(null),Np=J(0),Pp=J(!1),Fp=!1,Ip=null,Lp=null,Rp=null;function zp(e,t){return t&&!t.ok?`HTTP ${t.status} ${t.statusText||``}`.trim():e instanceof Error?e.name===`TypeError`&&/fetch/i.test(e.message)?Q(`@NET:网络连接失败`):e.message:String(e)}var Bp=J(null);async function Vp(){let e=Bp.value;if(!e||!Ip)return!1;try{let t=await Ip(e.url,e.init);return t.ok?(jp.value=!0,Mp.value=null,Pp.value=!1,!0):(Mp.value=zp(null,t),!1)}catch(e){return Mp.value=zp(e),!1}}function Hp(){Pp.value=!0}function Up(){Fp||typeof window>`u`||(Ip=window.fetch.bind(window),window.fetch=async function(e,t){let n=typeof e==`string`?e:e.toString();try{let r=await Ip(e,t);return!r.ok&&r.status>=500?(jp.value=!1,Mp.value=zp(null,r),Np.value=Date.now(),Bp.value={url:n,init:t}):r.ok&&(jp.value||=!0,Mp.value=null,Np.value=0),r}catch(e){throw jp.value=!1,Mp.value=zp(e),Np.value=Date.now(),Bp.value={url:n,init:t},e}},Lp=()=>{jp.value=!0},Rp=()=>{jp.value=!1,Mp.value=Q(`@NET:浏览器报告离线`),Np.value=Date.now()},window.addEventListener(`online`,Lp),window.addEventListener(`offline`,Rp),Fp=!0)}function Wp(){Fp&&(Ip&&(window.fetch=Ip),Lp&&window.removeEventListener(`online`,Lp),Rp&&window.removeEventListener(`offline`,Rp),Fp=!1,Ip=null,Lp=null,Rp=null)}function Gp(){return{isOnline:Ke(jp),lastError:Ke(Mp),lastErrorAt:Ke(Np),isDismissed:Ke(Pp),lastFailedRequest:Ke(Bp),start:Up,stop:Wp,retryLast:Vp,dismiss:Hp}}var Kp=280,qp=j({__name:`AppErrorBanner`,setup(e,{expose:t}){t();let{isOnline:n,lastError:r,lastErrorAt:i,isDismissed:a,retryLast:o,dismiss:s}=Gp(),c=G(()=>!n.value&&!a.value),l=J(!1),u=J(!1);b(c,(e,t)=>{e?(u.value=!1,l.value=!0):l.value&&t!==void 0&&(u.value=!0,window.setTimeout(()=>{l.value=!1,u.value=!1},Kp))},{immediate:!0});let d=J(Q(`@NET:刚刚`)),p=null;function m(){let e=i.value;if(!e){d.value=Q(`@NET:刚刚`);return}let t=Math.max(0,Date.now()-e);t<1e3?d.value=Q(`@NET:刚刚`):t<6e4?d.value=`${Math.floor(t/1e3)}s`:d.value=`${Math.floor(t/6e4)}m`}function h(){p||=(m(),setInterval(m,1e3))}function g(){p&&=(clearInterval(p),null)}b(c,e=>{e?h():g()}),f(g);let _={isOnline:n,lastError:r,lastErrorAt:i,isDismissed:a,retryLast:o,dismiss:s,shouldShow:c,visible:l,isLeaving:u,LEAVE_ANIMATION_MS:Kp,relativeTime:d,get relativeTimer(){return p},set relativeTimer(e){p=e},updateRelativeTime:m,startRelativeTimer:h,stopRelativeTimer:g,get $t(){return Q},get WarningFilled(){return ye},get Refresh(){return y},get Close(){return Ce}};return Object.defineProperty(_,`__isScriptSetup`,{enumerable:!1,value:!0}),_}}),Jp={class:`banner-left`},Yp={class:`banner-text`},Xp={class:`banner-title`},Zp={key:0,class:`banner-detail`},Qp={"data-net-error-time":``},$p={class:`banner-actions`},em=[`aria-label`];function tm(e,t,n,r,i,a){let s=V;return r.visible?(Z(),X(`div`,{key:0,class:K([`app-error-banner`,{"is-leaving":r.isLeaving}]),role:`alert`,"aria-live":`assertive`},[U(`div`,Jp,[o(s,{class:`banner-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.WarningFilled)]),_:1}),U(`div`,Yp,[U(`span`,Xp,z(r.$t(`@NET:无法连接到本地服务,请检查后端进程`)),1),r.lastError?(Z(),X(`span`,Zp,[k(z(r.lastError)+` · `,1),U(`span`,Qp,z(r.relativeTime),1)])):R(`v-if`,!0)])]),U(`div`,$p,[U(`button`,{type:`button`,class:`banner-btn banner-btn--retry`,onClick:t[0]||=(...e)=>r.retryLast&&r.retryLast(...e)},[o(s,{class:`banner-btn-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Refresh)]),_:1}),U(`span`,null,z(r.$t(`@NET:重试`)),1)]),U(`button`,{type:`button`,class:`banner-btn banner-btn--close`,"aria-label":r.$t(`@NET:关闭`),onClick:t[1]||=(...e)=>r.dismiss&&r.dismiss(...e)},[o(s,{class:`banner-btn-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Close)]),_:1})],8,em)])],2)):R(`v-if`,!0)}var nm=$(qp,[[`render`,tm],[`__scopeId`,`data-v-4f5b8eef`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/AppErrorBanner.vue`]]),rm=j({__name:`RecentProjectsList`,props:{variant:{type:String,required:!1,default:`inline`}},setup(e,{expose:t}){t();let n=J([]),r=J(!1),i=J(``);function a(e){let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?{base:e,parent:``}:{base:t[t.length-1],parent:t.slice(0,-1).join(`/`)}}let o=G(()=>{let e=i.value.trim().toLowerCase();return e?n.value.filter(t=>t.path.toLowerCase().includes(e)):n.value}),s=G(()=>o.value.map(e=>{let{base:t}=a(e.path);return{...e,displayBase:t}}));async function c(){r.value=!0;try{let e=await(await fetch(`/api/recent_directories`,{cache:`no-store`})).json();e&&Array.isArray(e.directories)?n.value=e.directories:n.value=[]}catch{n.value=[]}finally{r.value=!1}}async function l(e){if(e)try{let t=await(await fetch(`/api/open-new-tab-gui`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})})).json();t?.success||W.error(t?.error||Q(`@13D1C:打开失败`))}catch(e){W.error(`${Q(`@13D1C:打开失败`)}: ${e.message}`)}}function u(e){if(!e.exists){W.warning(Q(`@13D1C:目录不存在,无法打开`));return}l(e.path)}ee(()=>{c()});let d={recentDirectories:n,isLoadingRecent:r,searchQuery:i,splitPath:a,filteredDirectories:o,displayItems:s,loadRecentDirectories:c,openRecentDirInNewTab:l,onRecentDirClick:u,get Folder(){return nt},get Loading(){return ue},get Search(){return ct},get $t(){return Q}};return Object.defineProperty(d,`__isScriptSetup`,{enumerable:!1,value:!0}),d}}),im={class:`recent-projects__head`},am={class:`recent-projects__title`},om={class:`recent-projects__hint`},sm={key:0,class:`recent-projects__search`},cm=[`placeholder`,`aria-label`],lm=[`aria-label`],um={key:1,class:`recent-projects__empty`},dm={key:2,class:`recent-projects__empty`},fm={key:3,class:`recent-projects__empty`},pm=[`aria-label`],mm=[`title`,`aria-label`,`onClick`],hm=[`title`],gm={class:`recent-projects__name-base`},_m={class:`recent-projects__name-parent`},vm={key:0,class:`recent-projects__tag`};function ym(e,t,n,r,i,a){let s=V;return Z(),X(`div`,{class:K([`recent-projects`,{"recent-projects--fullpage":n.variant===`fullpage`}])},[U(`div`,im,[U(`span`,am,z(r.$t(`@13D1C:最近项目`)),1),U(`span`,om,z(r.$t(`@13D1C:点击在新标签页打开`)),1)]),R(` 搜索框:仅 fullpage 模式(非 Git 仓库右侧整列)展示,inline 紧凑版不渲染避免占用空间 `),n.variant===`fullpage`?(Z(),X(`div`,sm,[o(s,{class:`recent-projects__search-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Search)]),_:1}),L(U(`input`,{"onUpdate:modelValue":t[0]||=e=>r.searchQuery=e,type:`text`,class:`recent-projects__search-input`,placeholder:r.$t(`@13D1C:搜索最近项目...`),"aria-label":r.$t(`@13D1C:搜索最近项目`)},null,8,cm),[[Ge,r.searchQuery]]),r.searchQuery?(Z(),X(`button`,{key:0,type:`button`,class:`recent-projects__search-clear`,"aria-label":r.$t(`@13D1C:清空搜索`),onClick:t[1]||=e=>r.searchQuery=``},`×`,8,lm)):R(`v-if`,!0)])):R(`v-if`,!0),r.isLoadingRecent&&r.recentDirectories.length===0?(Z(),X(`div`,um,[o(s,null,{default:I(()=>[o(r.Loading)]),_:1}),U(`span`,null,z(r.$t(`@13D1C:加载中...`)),1)])):r.recentDirectories.length===0?(Z(),X(`div`,dm,z(r.$t(`@13D1C:暂无最近项目`)),1)):r.filteredDirectories.length===0?(Z(),X(`div`,fm,z(r.$t(`@13D1C:没有匹配 "{q}" 的项目`,{q:r.searchQuery})),1)):(Z(),X(`ul`,{key:4,class:`recent-projects__list`,"aria-label":r.$t(`@13D1C:最近项目列表`)},[(Z(!0),X(Y,null,F(r.displayItems,e=>(Z(),X(`li`,{key:e.path,class:K([`recent-projects__item`,{"is-missing":!e.exists}])},[U(`button`,{type:`button`,class:`recent-projects__btn`,title:e.exists?e.path:r.$t(`@13D1C:目录不存在`),"aria-label":e.exists?r.$t(`@13D1C:在新标签页打开 {path}`,{path:e.path}):r.$t(`@13D1C:{path} (目录不存在)`,{path:e.path}),onClick:t=>r.onRecentDirClick(e)},[o(s,{class:`recent-projects__icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Folder)]),_:1}),U(`span`,{class:`recent-projects__name`,title:e.path},[U(`span`,gm,z(e.displayBase),1),U(`span`,_m,z(e.path),1)],8,hm),e.exists?R(`v-if`,!0):(Z(),X(`span`,vm,z(r.$t(`@13D1C:不存在`)),1))],8,mm)],2))),128))],8,pm))],2)}var bm=$(rm,[[`render`,ym],[`__scopeId`,`data-v-53d20908`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/RecentProjectsList.vue`]]),xm=j({__name:`ViewLoading`,props:{text:{type:String,required:!1,default:Q(`@2AEBA:加载中...`)}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,`__isScriptSetup`,{enumerable:!1,value:!0}),n}}),Sm={class:`view-loading`},Cm=[`aria-label`],wm={class:`view-loading__text`};function Tm(e,t,n,r,i,a){return Z(),X(`div`,Sm,[U(`div`,{class:`view-loading__spinner`,role:`status`,"aria-label":n.text},[t[0]||=U(`svg`,{viewBox:`0 0 24 24`,class:`view-loading__icon`},[U(`circle`,{class:`view-loading__track`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`}),U(`circle`,{class:`view-loading__arc`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`,"stroke-linecap":`round`})],-1),U(`span`,wm,z(n.text),1)],8,Cm)])}var Em=$(xm,[[`render`,Tm],[`__scopeId`,`data-v-d040c841`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/ViewLoading.vue`]]),Dm=j({__name:`TemplateManager`,props:{visible:{type:Boolean,required:!0},type:{type:String,required:!0},title:{type:String,required:!0},placeholder:{type:String,required:!1,default:Q(`@60CAC:输入新模板内容`)},editPlaceholder:{type:String,required:!1,default:Q(`@60CAC:编辑模板内容`)},emptyDescription:{type:String,required:!1,default:Q(`@60CAC:暂无保存的模板`)},showDefaultSection:{type:Boolean,required:!1,default:!1},showHelpText:{type:Boolean,required:!1,default:!1}},emits:[`update:visible`,`use-template`,`set-default`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=xt(),o=J(``),s=J(!1),c=J(``),l=J(-1),u=J(!1),d=J(!1),f=J(!1),p=G(()=>{switch(r.type){case`description`:return a.descriptionTemplates||[];case`scope`:return a.scopeTemplates||[];case`message`:return a.messageTemplates||[];case`command`:return a.commandTemplates||[];default:return[]}}),m=G(()=>r.type===`message`?a.defaultCommitMessage:``),h=G(()=>s.value?r.editPlaceholder:r.placeholder),g=G(()=>s.value?Q(`@60CAC:更新模板`):Q(`@60CAC:添加模板`)),_=G({get:()=>r.visible,set:e=>i(`update:visible`,e)});b(_,e=>{e||v()});function v(){o.value=``,s.value=!1,c.value=``,l.value=-1}async function y(){if(!o.value.trim()){W.warning(Q(`@60CAC:模板内容不能为空`));return}try{u.value=!0,s.value?await a.updateTemplate(c.value,o.value,r.type)&&v():await a.saveTemplate(o.value,r.type)&&(o.value=``)}catch(e){W.error(`${Q(`@60CAC:模板保存失败: `)}${e.message}`)}finally{u.value=!1}}function x(e){i(`use-template`,e),r.type!==`message`&&(_.value=!1)}function S(e,t){s.value=!0,c.value=e,o.value=e,l.value=t}function C(){v()}async function ee(e){try{f.value=!0,await a.pinTemplate(e,r.type)}catch(e){W.error(`${Q(`@60CAC:置顶模板失败: `)}${e.message}`)}finally{f.value=!1}}async function te(e){try{await a.deleteTemplate(e,r.type)}catch(e){W.error(`${Q(`@60CAC:模板删除失败: `)}${e.message}`)}}async function w(){if(!(r.type!==`message`||!o.value.trim()))try{d.value=!0,await a.saveDefaultMessage(o.value)&&i(`set-default`,o.value)}catch(e){W.error(`${Q(`@60CAC:设置默认提交信息失败: `)}${e.message}`)}finally{d.value=!1}}t({resetForm:v});let ne={props:r,emit:i,configStore:a,newTemplate:o,isEditing:s,originalTemplate:c,editingIndex:l,isSaving:u,isSavingDefault:d,isPinning:f,templates:p,defaultCommitMessage:m,currentPlaceholder:h,buttonText:g,dialogVisible:_,resetForm:v,saveTemplate:y,useTemplate:x,startEditTemplate:S,cancelEdit:C,pinTemplate:ee,deleteTemplate:te,setAsDefault:w,get $t(){return Q},get Edit(){return He},CommonDialog:vt};return Object.defineProperty(ne,`__isScriptSetup`,{enumerable:!1,value:!0}),ne}}),Om={class:`template-form`},km={class:`template-form-buttons`},Am={key:0,class:`template-list`},jm={key:1,class:`template-list-scroll`},Mm={class:`template-content`},Nm={class:`template-actions`},Pm={class:`templates-container`},Fm={class:`message-templates-list`},Im={class:`templates-scroll-area`},Lm={class:`template-content`},Rm={class:`template-actions`},zm={key:0,class:`current-default-message`},Bm={class:`default-message-content`},Vm={key:2,class:`message-help-text`};function Hm(e,t,n,r,i,a){let c=Ye,l=M,u=s,d=gt,f=be,p=h,m=C;return Z(),H(r.CommonDialog,{modelValue:r.dialogVisible,"onUpdate:modelValue":t[1]||=e=>r.dialogVisible=e,title:n.title,"close-on-click-modal":!1,"append-to-body":!0,"custom-class":n.type===`message`?`message-template-dialog`:`template-dialog`},{default:I(()=>[U(`div`,{class:K([`template-container`,{"message-template-container":n.type===`message`}])},[U(`div`,Om,[o(c,{modelValue:r.newTemplate,"onUpdate:modelValue":t[0]||=e=>r.newTemplate=e,placeholder:r.currentPlaceholder,class:`template-input`,clearable:``,onKeyup:Te(r.saveTemplate,[`enter`])},null,8,[`modelValue`,`placeholder`]),U(`div`,km,[r.isEditing?(Z(),H(l,{key:0,onClick:r.cancelEdit},{default:I(()=>[k(z(r.$t(`@60CAC:取消`)),1)]),_:1})):R(`v-if`,!0),o(l,{type:`primary`,onClick:r.saveTemplate,disabled:!r.newTemplate.trim()||r.isSaving,loading:r.isSaving},{default:I(()=>[k(z(r.buttonText),1)]),_:1},8,[`disabled`,`loading`]),R(` 默认提交信息设置的特殊按钮 `),n.type===`message`?(Z(),H(l,{key:1,type:`success`,onClick:r.setAsDefault,disabled:!r.newTemplate.trim()||r.isSavingDefault,loading:r.isSavingDefault,plain:``},{default:I(()=>[k(z(r.$t(`@60CAC:设为默认提交信息`)),1)]),_:1},8,[`disabled`,`loading`])):R(`v-if`,!0)])]),R(` 普通模板布局:固定标题,仅列表滚动 `),n.type===`message`?(Z(),X(Y,{key:1},[R(` 提交信息模板的特殊布局 `),U(`div`,Pm,[U(`div`,Fm,[U(`h3`,null,z(r.$t(`@60CAC:已保存模板`)),1),U(`div`,Im,[r.templates.length===0?(Z(),H(u,{key:0,description:n.emptyDescription},null,8,[`description`])):R(`v-if`,!0),(Z(!0),X(Y,null,F(r.templates,(e,t)=>(Z(),H(p,{key:t,class:`template-item`},{default:I(()=>[o(f,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:I(()=>[U(`div`,Lm,z(e),1),U(`div`,Rm,[o(l,{size:`small`,class:`pin-button`,onClick:t=>r.pinTemplate(e),loading:r.isPinning,disabled:t===0,title:`置顶`},{default:I(()=>[o(d,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:2},1032,[`onClick`,`loading`,`disabled`]),o(l,{type:`primary`,size:`small`,onClick:t=>r.useTemplate(e)},{default:I(()=>[k(z(r.$t(`@60CAC:使用`)),1)]),_:2},1032,[`onClick`]),o(l,{type:`warning`,size:`small`,icon:r.Edit,onClick:n=>r.startEditTemplate(e,Number(t))},{default:I(()=>[k(z(r.$t(`@60CAC:编辑`)),1)]),_:2},1032,[`icon`,`onClick`]),o(l,{type:`danger`,size:`small`,onClick:t=>r.deleteTemplate(e)},{default:I(()=>[k(z(r.$t(`@60CAC:删除`)),1)]),_:2},1032,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))])]),R(` 默认提交信息部分 `),n.showDefaultSection?(Z(),X(`div`,zm,[U(`h3`,null,z(r.$t(`@60CAC:当前默认提交信息`)),1),r.defaultCommitMessage?(Z(),H(p,{key:0,class:`default-message-card`},{default:I(()=>[U(`div`,Bm,z(r.defaultCommitMessage),1)]),_:1})):(Z(),H(u,{key:1,description:r.$t(`@60CAC:尚未设置默认提交信息`),"image-size":100},null,8,[`description`])),n.showHelpText?(Z(),X(`div`,Vm,[U(`h4`,null,z(r.$t(`@60CAC:关于默认提交信息`)),1),U(`p`,null,z(r.$t(`@60CAC:默认提交信息将在未输入提交信息时自动使用。`)),1),U(`p`,null,[k(z(r.$t(`@60CAC:你可以通过点击左侧模板的`)),1),o(m,{size:`small`,type:`primary`},{default:I(()=>[k(z(r.$t(`@60CAC:使用`)),1)]),_:1}),k(z(r.$t(`@60CAC:按钮先选择喜欢的模板,然后点击上方`)),1),o(m,{size:`small`,type:`success`},{default:I(()=>[k(z(r.$t(`@60CAC:设为默认提交信息`)),1)]),_:1}),k(z(r.$t(`@60CAC:按钮保存。`)),1)])])):R(`v-if`,!0)])):R(`v-if`,!0)])],2112)):(Z(),X(`div`,Am,[U(`h3`,null,z(r.$t(`@60CAC:已保存`))+` `+z(n.type===`description`?r.$t(`@60CAC:模板`):n.type===`scope`?r.$t(`@60CAC:作用域`):n.type===`command`?r.$t(`@CMD01:命令模板`):``),1),r.templates.length===0?(Z(),H(u,{key:0,description:n.emptyDescription},null,8,[`description`])):(Z(),X(`div`,jm,[(Z(!0),X(Y,null,F(r.templates,(e,t)=>(Z(),H(p,{key:t,class:`template-item`},{default:I(()=>[o(f,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:I(()=>[U(`div`,Mm,z(e),1),U(`div`,Nm,[o(l,{size:`small`,class:`pin-button`,onClick:t=>r.pinTemplate(e),loading:r.isPinning,disabled:t===0,title:`置顶`},{default:I(()=>[o(d,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:2},1032,[`onClick`,`loading`,`disabled`]),o(l,{type:`primary`,size:`small`,onClick:t=>r.useTemplate(e)},{default:I(()=>[k(z(r.$t(`@60CAC:使用`)),1)]),_:2},1032,[`onClick`]),o(l,{type:`warning`,size:`small`,icon:r.Edit,onClick:n=>r.startEditTemplate(e,Number(t))},{default:I(()=>[k(z(r.$t(`@60CAC:编辑`)),1)]),_:2},1032,[`icon`,`onClick`]),o(l,{type:`danger`,size:`small`,onClick:t=>r.deleteTemplate(e)},{default:I(()=>[k(z(r.$t(`@60CAC:删除`)),1)]),_:2},1032,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))]))]))],2)]),_:1},8,[`modelValue`,`title`,`custom-class`])}var Um=$(Dm,[[`render`,Hm],[`__scopeId`,`data-v-9f9265ce`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/TemplateManager.vue`]]),Wm=j({__name:`CustomCommandManager`,props:{visible:{type:Boolean,required:!0},fullscreen:{type:Boolean,required:!1}},emits:[`update:visible`,`execute-command`],setup(e,{expose:t,emit:n}){function r(e){let t=`${e}(copy)`,n=Array.isArray(ee.value)?ee.value:[],r=e=>n.some(t=>String(t?.name||``)===e);if(!r(t))return t;let i=2;for(;i<1e3;){let t=`${e}(copy${i})`;if(!r(t))return t;i++}return`${t}-${Date.now()}`}async function i(e){try{let t=_(e),n={name:r(String(e?.name||``).trim()||Q(`@CMD01:命令名称`)),description:String(e?.description||``),directory:String(e?.directory||``),command:String(e?.command||``),params:JSON.parse(JSON.stringify(t||[]))};(!n.directory||!n.directory.trim())&&(n.directory=s.currentDirectory||``),await s.saveCustomCommand(n)}catch(e){W.error(`${Q(`@CMD01:保存命令失败: `)}${e.message}`)}}let a=e,o=n,s=xt(),{currentLocale:l}=lt(bt()),u=G(()=>s.commandTemplates||[]),d=J(!1);function f(e,t){let n=Array.isArray(u.value)?u.value:[];t([...e?n.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):n.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function p(e){if(e.isSettings){d.value=!0,v.value.command=``;return}v.value.command=e.value}function m(e){let t=[],n=/{{\s*([a-zA-Z0-9_]+)\s*}}/g,r;for(;r=n.exec(e);){let e=String(r[1]||``).trim();e&&!t.includes(e)&&t.push(e)}return t}function h(e,t){return e.replace(/{{\s*([a-zA-Z0-9_]+)\s*}}/g,(e,n)=>{let r=String(n||``).trim();return Object.prototype.hasOwnProperty.call(t,r)?String(t[r]??``):``})}let g=j({name:`CmdParamForm`,props:{vars:{type:Array,required:!0},values:{type:Object,required:!0},params:{type:Array,required:!1}},setup(e){function t(t){let n=(Array.isArray(e.params)?e.params:[]).find(e=>String(e?.name||``)===t);return n?String(n?.description||``).trim():``}return()=>c(`div`,{class:`cmd-param-form`},e.vars.map(n=>c(`div`,{class:`cmd-param-row`},[c(`div`,{class:`cmd-param-label`},n),c(Ye,{modelValue:e.values[n],"onUpdate:modelValue":t=>{e.values[n]=String(t??``)},placeholder:Q(`@CMD01:请输入变量值`,{var:n}),clearable:!0}),t(n)?c(`div`,{class:`cmd-param-desc`},t(n)):null])))}});function _(e){let t=m(String(e?.command||``)),n=Array.isArray(e?.params)?e.params:[],r=new Map;for(let e of n){let t=String(e?.name||``).trim();t&&r.set(t,{name:t,defaultValue:String(e?.defaultValue??``),required:!!e?.required,description:String(e?.description??``)})}return t.map(e=>r.has(e)?r.get(e):{name:e,defaultValue:``,required:!1,description:``})}let v=J({name:``,description:``,directory:``,command:``,params:[]}),y=J(!1),x=J(``),C=J(!1),ee=G(()=>s.customCommands||[]),te=G({get:()=>a.visible,set:e=>o(`update:visible`,e)});b(te,e=>{e||w()});function w(){v.value={name:``,description:``,directory:``,command:``,params:[]},y.value=!1,x.value=``}b(()=>v.value.command,e=>{let t=m(String(e||``));if(!t.length){v.value.params=[];return}let n=Array.isArray(v.value.params)?v.value.params:[],r=new Map(n.map(e=>[String(e?.name||``),e]));v.value.params=t.map(e=>{let t=r.get(e);return{name:e,defaultValue:t?String(t.defaultValue??``):``,required:t?!!t.required:!1,description:t?String(t.description??``):``}})},{immediate:!0});async function ne(){if(!v.value.name.trim()){W.warning(Q(`@CMD01:命令名称不能为空`));return}if(!v.value.command.trim()){W.warning(Q(`@CMD01:命令内容不能为空`));return}try{C.value=!0,y.value?await s.updateCustomCommand(x.value,v.value)&&w():((!v.value.directory||!v.value.directory.trim())&&(v.value.directory=s.currentDirectory||``),await s.saveCustomCommand(v.value)&&w())}catch(e){W.error(`${Q(`@CMD01:命令保存失败: `)}${e.message}`)}finally{C.value=!1}}function T(e){y.value=!0,x.value=e.id||``,v.value={name:e.name,description:e.description||``,directory:e.directory,command:e.command,params:_(e)}}function re(){w()}async function ie(e){try{await Ze.confirm(Q(`@CMD01:确定要删除这个自定义命令吗?`),Q(`@CMD01:删除确认`),{confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`}),await s.deleteCustomCommand(e)}catch{}}async function ae(e){await s.pinCustomCommand(e)}async function E(e){let t=String(e?.command||``),n=m(t);if(!n.length){o(`execute-command`,e);return}let r=Se({});try{let i=_(e),a=new Map(i.map(e=>[String(e.name),e]));for(let e of n){let t=a.get(e);r[e]=t?String(t.defaultValue??``):``}await Ze({title:Q(`@CMD01:执行参数`),message:c(g,{vars:n,values:r,params:i}),showCancelButton:!0,confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),closeOnClickModal:!1,customClass:`cmd-param-message-box`});let s=(Array.isArray(e?.params)?e.params:[]).map(e=>({name:String(e?.name||``).trim(),required:!!e?.required})).filter(e=>e.name);for(let e of s){if(!e.required)continue;let t=r[e.name];if(t==null||String(t).trim()===``){W.warning(Q(`@CMD01:请输入必填变量: `,{var:e.name}));return}}let l=h(t,r);o(`execute-command`,{...e,command:l})}catch{}}let D=J(!1);function O(){D.value=!0}function oe(e){v.value.directory=e}function se(){v.value.directory=s.currentDirectory||``}let ce=J(null),k=J([]);function le(e){k.value=e}async function A(){let e=[...k.value],t=e.length;if(t)try{await Ze.confirm(Q(`@CMD01:确定要删除所选命令吗`,{count:t}),Q(`@CMD01:删除确认`),{confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`});let n=0;for(let t of e)t.id&&(await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t.id})})).json()).success&&n++;await s.loadConfig(!0),k.value=[],W.success(Q(`@CMD01:批量删除成功`,{count:n}))}catch{}}let ue=J(!1),M=J([]),N=J([]),de=J(null),P=J(!1),F=J(!1);async function fe(){try{P.value=!0,ue.value=!0,M.value=[],N.value=[];let e=await(await fetch(`/api/scan-npm-scripts`)).json();if(!e.success){W.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.error||``}`),ue.value=!1;return}let t=e.packages||[];if(t.length===0){W.warning(Q(`@CMD01:未找到任何NPM脚本`)),ue.value=!1;return}let n=new Set((Array.isArray(ee.value)?ee.value:[]).map(e=>String(e?.name||``).trim())),r=[];for(let e of t){let t=e.scripts||{};for(let i of Object.keys(t)){let t=`${e.name}: ${i}`;r.push({key:t,label:t,packageName:e.name,packagePath:e.path,scriptName:i,isDuplicate:n.has(t)})}}M.value=r}catch(e){W.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`),ue.value=!1}finally{P.value=!1}}function pe(e){N.value=e}async function me(){if(!N.value.length){W.warning(Q(`@CMD01:请至少选择一项`));return}try{F.value=!0;let e=new Set((Array.isArray(ee.value)?ee.value:[]).map(e=>String(e?.name||``).trim())),t=0,n=0;for(let r of N.value){if(e.has(r.key)){n++;continue}await s.saveCustomCommand({name:r.key,description:`npm run ${r.scriptName}`,directory:r.packagePath,command:`npm run ${r.scriptName}`})&&(e.add(r.key),t++)}W.success(Q(`@CMD01:NPM命令同步完成2`,{count:t,skip:n})),ue.value=!1,N.value=[]}catch(e){W.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`)}finally{F.value=!1}}t({resetForm:w});let I={buildDuplicateName:r,duplicateCommand:i,props:a,emit:o,configStore:s,currentLocale:l,commandTemplates:u,commandTemplateDialogVisible:d,queryCommandTemplates:f,handleCommandSelect:p,extractTemplateVariables:m,applyTemplateVariables:h,CmdParamForm:g,normalizeCommandParams:_,newCommand:v,isEditing:y,editingId:x,isSaving:C,commands:ee,dialogVisible:te,resetForm:w,saveCommand:ne,startEditCommand:T,cancelEdit:re,deleteCommand:ie,pinCommandToTop:ae,executeCommand:E,isBrowserDialogVisible:D,browseDirectory:O,onBrowserSelect:oe,useCurrentDirectory:se,commandTableRef:ce,selectedCommands:k,onSelectionChange:le,batchDeleteCommands:A,npmDialogVisible:ue,npmScriptItems:M,npmSelected:N,npmTableRef:de,isLoadingNpm:P,isDoingSyncNpm:F,syncNpmCommands:fe,onNpmSelectionChange:pe,doSyncSelectedNpm:me,get $t(){return Q},get ElInput(){return Ye},get Edit(){return He},get Delete(){return Ee},get VideoPlay(){return _e},get Folder(){return nt},get CopyDocument(){return $e},get Top(){return S},IconButton:_t,TemplateManager:Um,get FilePicker(){return dt}};return Object.defineProperty(I,`__isScriptSetup`,{enumerable:!1,value:!0}),I}}),Gm=t({default:()=>Mh}),Km={class:`command-container`},qm={class:`left-panel`},Jm={class:`command-form`},Ym={class:`form-header`},Xm={class:`left-title`},Zm={class:`form-content`},Qm={class:`form-row`},$m={class:`form-field`},eh={class:`required`},th={class:`form-row`},nh={class:`form-field`},rh={class:`form-row`},ih={class:`form-field`},ah={class:`directory-input-group`},oh={class:`form-row`},sh={class:`form-field`},ch={class:`required`},lh={key:0,class:`command-params`},uh={class:`params-title`},dh={class:`form-actions`},fh={class:`right-panel`},ph={class:`command-list`},mh={class:`list-header`},hh={class:`list-header-left`},gh={class:`list-title`},_h={key:0,class:`selection-count`},vh={class:`list-header-actions`},yh={class:`list-content`},bh={key:1,class:`command-list-scroll`},xh={class:`name-cell`},Sh={class:`name-text`},Ch={key:0,class:`description-text`},wh={class:`command-text`},Th={class:`directory-text`},Eh={class:`action-buttons`},Dh={class:`npm-dialog-body`},Oh={class:`command-text`},kh={class:`npm-dialog-footer`},Ah={class:`npm-selected-count`};function jh(e,t,n,r,i,a){let c=M,l=V,u=fe,d=Ve,f=Fe,p=qe,m=s,h=w,g=C,_=xe;return Z(),X(Y,null,[o(h,{modelValue:r.dialogVisible,"onUpdate:modelValue":t[4]||=e=>r.dialogVisible=e,title:r.$t(`@CMD01:自定义命令管理`),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,fullscreen:!!n.fullscreen,width:n.fullscreen?`100vw`:`90%`,top:n.fullscreen?`0`:`50px`,"z-index":3e6,"modal-class":`custom-command-overlay`,class:`custom-command-dialog`},{default:I(()=>[U(`div`,Km,[U(`div`,qm,[U(`div`,Jm,[U(`div`,Ym,[U(`div`,Xm,z(r.isEditing?r.$t(`@CMD01:编辑命令`):r.$t(`@CMD01:添加命令`)),1)]),U(`div`,Zm,[R(` 命令名称 `),U(`div`,Qm,[U(`div`,$m,[U(`label`,eh,z(r.$t(`@CMD01:命令名称`)),1),o(r.ElInput,{modelValue:r.newCommand.name,"onUpdate:modelValue":t[0]||=e=>r.newCommand.name=e,placeholder:r.$t(`@CMD01:输入命令名称,例如: 拉取代码`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`])])]),R(` 描述 `),U(`div`,th,[U(`div`,nh,[U(`label`,null,z(r.$t(`@CMD01:描述`)),1),o(r.ElInput,{modelValue:r.newCommand.description,"onUpdate:modelValue":t[1]||=e=>r.newCommand.description=e,placeholder:r.$t(`@CMD01:可选,简要描述命令用途`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`])])]),R(` 执行目录 `),U(`div`,rh,[U(`div`,ih,[U(`label`,null,z(r.$t(`@CMD01:执行目录`)),1),U(`div`,ah,[o(r.ElInput,{modelValue:r.newCommand.directory,"onUpdate:modelValue":t[2]||=e=>r.newCommand.directory=e,placeholder:r.$t(`@CMD01:留空使用当前目录`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`]),o(c,{onClick:r.useCurrentDirectory,type:`primary`,plain:``,size:`default`},{default:I(()=>[k(z(r.$t(`@CMD01:使用当前目录`)),1)]),_:1}),o(c,{onClick:r.browseDirectory,type:`info`,plain:``,size:`default`},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Folder)]),_:1}),k(` `+z(r.$t(`@CMD01:选择目录`)),1)]),_:1})])])]),R(` 命令 `),U(`div`,oh,[U(`div`,sh,[U(`label`,ch,z(r.$t(`@CMD01:命令`)),1),o(u,{modelValue:r.newCommand.command,"onUpdate:modelValue":t[3]||=e=>r.newCommand.command=e,"fetch-suggestions":r.queryCommandTemplates,placeholder:r.$t(`@CMD01:输入要执行的命令,例如: npm run build`),clearable:``,size:`large`,"trigger-on-focus":``,"popper-class":`custom-command-popper`,onSelect:r.handleCommandSelect,onKeyup:Te(r.saveCommand,[`enter`]),style:{width:`100%`}},null,8,[`modelValue`,`placeholder`]),r.newCommand.params&&r.newCommand.params.length>0?(Z(),X(`div`,lh,[U(`div`,uh,z(r.$t(`@CMD01:变量配置`)),1),o(p,{data:r.newCommand.params,style:{width:`100%`},size:`small`,stripe:``},{default:I(()=>[o(d,{prop:`name`,label:r.$t(`@CMD01:变量名`),width:`160`},null,8,[`label`]),o(d,{label:r.$t(`@CMD01:默认值`),"min-width":`180`},{default:I(e=>[o(r.ElInput,{modelValue:e.row.defaultValue,"onUpdate:modelValue":t=>e.row.defaultValue=t,size:`small`,clearable:``,placeholder:r.$t(`@CMD01:默认值`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),_:1},8,[`label`]),o(d,{label:r.$t(`@CMD01:必填`),width:`90`,align:`center`},{default:I(e=>[o(f,{modelValue:e.row.required,"onUpdate:modelValue":t=>e.row.required=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1},8,[`label`]),o(d,{label:r.$t(`@CMD01:描述`),"min-width":`220`},{default:I(e=>[o(r.ElInput,{modelValue:e.row.description,"onUpdate:modelValue":t=>e.row.description=t,size:`small`,clearable:``,placeholder:r.$t(`@CMD01:描述`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`data`])])):R(`v-if`,!0)])]),R(` 按钮区域 `),U(`div`,dh,[r.isEditing?(Z(),H(c,{key:0,onClick:r.cancelEdit,size:`large`},{default:I(()=>[k(z(r.$t(`@CMD01:取消`)),1)]),_:1})):R(`v-if`,!0),o(c,{type:`primary`,onClick:r.saveCommand,disabled:!r.newCommand.name.trim()||!r.newCommand.command.trim()||r.isSaving,loading:r.isSaving,size:`large`,class:`save-btn`},{default:I(()=>[k(z(r.isEditing?r.$t(`@CMD01:更新命令`):r.$t(`@CMD01:添加命令`)),1)]),_:1},8,[`disabled`,`loading`])])])])]),U(`div`,fh,[R(` 命令列表 `),U(`div`,ph,[U(`div`,mh,[U(`div`,hh,[U(`h3`,gh,z(r.$t(`@CMD01:已保存的命令`)),1),r.selectedCommands.length>0?(Z(),X(`span`,_h,z(r.$t(`@CMD01:已选择`,{count:r.selectedCommands.length})),1)):R(`v-if`,!0)]),U(`div`,vh,[r.selectedCommands.length>0?(Z(),H(c,{key:0,type:`danger`,plain:``,size:`small`,onClick:r.batchDeleteCommands},{default:I(()=>[k(z(r.$t(`@CMD01:批量删除`)),1)]),_:1})):R(`v-if`,!0),o(c,{type:`primary`,plain:``,size:`small`,loading:r.isLoadingNpm,onClick:r.syncNpmCommands},{default:I(()=>[k(z(r.$t(`@CMD01:同步NPM命令`)),1)]),_:1},8,[`loading`])])]),U(`div`,yh,[r.commands.length===0?(Z(),H(m,{key:0,description:r.$t(`@CMD01:暂无保存的命令`)},null,8,[`description`])):(Z(),X(`div`,bh,[o(p,{ref:`commandTableRef`,data:r.commands,style:{width:`100%`,height:`100%`},stripe:``,onSelectionChange:r.onSelectionChange},{default:I(()=>[o(d,{type:`selection`,width:`40`}),o(d,{prop:`name`,label:r.$t(`@CMD01:命令名称`),"min-width":`80`},{default:I(e=>[U(`div`,xh,[U(`span`,Sh,z(e.row.name),1),e.row.description?(Z(),X(`span`,Ch,z(e.row.description),1)):R(`v-if`,!0)])]),_:1},8,[`label`]),o(d,{prop:`command`,label:r.$t(`@CMD01:命令`),"min-width":`200`},{default:I(e=>[U(`code`,wh,z(e.row.command),1)]),_:1},8,[`label`]),o(d,{prop:`directory`,label:r.$t(`@CMD01:执行目录`),"min-width":`200`},{default:I(e=>[U(`span`,Th,z(e.row.directory),1)]),_:1},8,[`label`]),o(d,{label:r.$t(`@CMD01:操作`),width:`138`,fixed:`right`},{default:I(e=>[U(`div`,Eh,[o(r.IconButton,{tooltip:r.$t(`@CMD01:置顶`),size:`small`,"hover-color":`var(--color-info)`,onClick:t=>r.pinCommandToTop(e.row.id)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Top)]),_:1})]),_:2},1032,[`tooltip`,`onClick`]),o(r.IconButton,{tooltip:r.$t(`@CMD01:执行命令`),size:`small`,"hover-color":`var(--color-success)`,onClick:t=>r.executeCommand(e.row)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.VideoPlay)]),_:1})]),_:2},1032,[`tooltip`,`onClick`]),o(r.IconButton,{tooltip:r.$t(`@CMD01:编辑`),size:`small`,"hover-color":`var(--color-primary)`,onClick:t=>r.startEditCommand(e.row)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Edit)]),_:1})]),_:2},1032,[`tooltip`,`onClick`]),o(r.IconButton,{tooltip:r.$t(`@CMD01:复制命令`),size:`small`,"hover-color":`var(--color-warning)`,onClick:t=>r.duplicateCommand(e.row)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.CopyDocument)]),_:1})]),_:2},1032,[`tooltip`,`onClick`]),o(r.IconButton,{tooltip:r.$t(`@CMD01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:t=>r.deleteCommand(e.row.id)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Delete)]),_:1})]),_:2},1032,[`tooltip`,`onClick`])])]),_:1},8,[`label`])]),_:1},8,[`data`])]))])])])])]),_:1},8,[`modelValue`,`title`,`fullscreen`,`width`,`top`]),o(r.TemplateManager,{visible:r.commandTemplateDialogVisible,"onUpdate:visible":t[5]||=e=>r.commandTemplateDialogVisible=e,type:`command`,title:r.$t(`@CMD01:命令模板管理`),placeholder:r.$t(`@CMD01:输入命令模板,例如: npm run build`),"edit-placeholder":r.$t(`@CMD01:编辑命令模板`),"empty-description":r.$t(`@CMD01:暂无保存的命令模板`)},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),R(` 目录浏览器弹窗 `),o(r.FilePicker,{visible:r.isBrowserDialogVisible,locale:r.currentLocale,onClose:t[6]||=e=>r.isBrowserDialogVisible=!1,onConfirm:t[7]||=e=>{r.onBrowserSelect(e[0]),r.isBrowserDialogVisible=!1}},null,8,[`visible`,`locale`]),R(` NPM 命令选择弹窗 `),o(h,{modelValue:r.npmDialogVisible,"onUpdate:modelValue":t[9]||=e=>r.npmDialogVisible=e,title:r.$t(`@CMD01:选择NPM命令`),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,width:`680px`,"z-index":3000010,"modal-class":`npm-sync-overlay`,class:`npm-sync-dialog`},{footer:I(()=>[U(`div`,kh,[U(`span`,Ah,z(r.$t(`@CMD01:已选择`,{count:r.npmSelected.length})),1),o(c,{onClick:t[8]||=e=>r.npmDialogVisible=!1},{default:I(()=>[k(z(r.$t(`@CMD01:取消`)),1)]),_:1}),o(c,{type:`primary`,loading:r.isDoingSyncNpm,disabled:r.npmSelected.length===0,onClick:r.doSyncSelectedNpm},{default:I(()=>[k(z(r.$t(`@CMD01:开始同步`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:I(()=>[L((Z(),X(`div`,Dh,[o(p,{ref:`npmTableRef`,data:r.npmScriptItems,style:{width:`100%`},"max-height":`420`,stripe:``,onSelectionChange:r.onNpmSelectionChange},{default:I(()=>[o(d,{type:`selection`,width:`44`,selectable:()=>!0}),o(d,{prop:`packageName`,label:r.$t(`@CMD01:包名`),"min-width":`140`},null,8,[`label`]),o(d,{prop:`scriptName`,label:r.$t(`@CMD01:脚本名`),"min-width":`120`},null,8,[`label`]),o(d,{prop:`scriptName`,label:r.$t(`@CMD01:命令`),"min-width":`160`},{default:I(e=>[U(`code`,Oh,`npm run `+z(e.row.scriptName),1)]),_:1},8,[`label`]),o(d,{label:r.$t(`@CMD01:状态`),width:`80`,align:`center`},{default:I(e=>[e.row.isDuplicate?(Z(),H(g,{key:0,type:`warning`,size:`small`},{default:I(()=>[k(z(r.$t(`@CMD01:已存在`)),1)]),_:1})):(Z(),H(g,{key:1,type:`success`,size:`small`},{default:I(()=>[k(z(r.$t(`@CMD01:新增`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`])])),[[_,r.isLoadingNpm]])]),_:1},8,[`modelValue`,`title`])],64)}var Mh=$(Wm,[[`render`,jh],[`__scopeId`,`data-v-c7d52d8a`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/CustomCommandManager.vue`]]);function Nh(e){if(!e)return[];let t=/\{\{(\w+)\}\}/g,n=[],r;for(;(r=t.exec(e))!==null;){let e=r[1];n.includes(e)||n.push(e)}return n}function Ph(e,t){if(!e)return``;let n=e;for(let[e,r]of Object.entries(t)){let t=RegExp(`\\{\\{${e}\\}\\}`,`g`);n=n.replace(t,r||``)}return n}var Fh=120,Ih=600,Lh=16,Rh=j({__name:`CustomCommandsPanel`,setup(e,{expose:t}){t();let n=J(!1);function r(){n.value=!n.value}let i=J(!1);function a(){i.value=!0}let o=xt(),s=G(()=>o.customCommands||[]),c=J({}),l=J(240),u=J(!1),d=J(0),f=J(0);function p(e){u.value=!0,d.value=e.clientY,f.value=l.value,document.addEventListener(`mousemove`,m),document.addEventListener(`mouseup`,h),e.preventDefault()}function m(e){if(!u.value)return;let t=d.value-e.clientY;l.value=Math.max(Fh,Math.min(Ih,f.value+t))}function h(){u.value=!1,document.removeEventListener(`mousemove`,m),document.removeEventListener(`mouseup`,h)}function g(e){e.key===`ArrowUp`?(e.preventDefault(),l.value=Math.min(Ih,l.value+Lh)):e.key===`ArrowDown`?(e.preventDefault(),l.value=Math.max(Fh,l.value-Lh)):e.key===`Home`?(e.preventDefault(),l.value=Ih):e.key===`End`&&(e.preventDefault(),l.value=Fh)}async function _(e){let t=String(e.id||e.name);if(c.value[t])return;let n=e.directory||o.currentDirectory||``,r={};if(Array.isArray(e.params))for(let t of e.params)r[t.name]=t.defaultValue||``;let i=Ph(e.command,r);c.value[t]=!0;try{let t=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:i,workingDirectory:n})})).json();t?.success?(W.success(Q(`@CMDPANEL:已在新终端中执行`,{name:e.name})),window.dispatchEvent(new Event(`zen-gitsync:terminal-session-created`))):W.error(t?.error||Q(`@CMDPANEL:执行失败`))}catch(e){W.error(e?.message||Q(`@CMDPANEL:执行失败`))}finally{c.value[t]=!1}}let v={collapsed:n,toggleCollapsed:r,managerVisible:i,openManager:a,configStore:o,commands:s,isRunning:c,panelHeight:l,isResizing:u,startY:d,startHeight:f,MIN_PANEL_HEIGHT:Fh,MAX_PANEL_HEIGHT:Ih,KEY_NUDGE_PX:Lh,startResize:p,handleResize:m,stopResize:h,onResizeKeydown:g,runCommand:_,get $t(){return Q},IconButton:_t,SvgIcon:gt,CustomCommandManager:Mh};return Object.defineProperty(v,`__isScriptSetup`,{enumerable:!1,value:!0}),v}}),zh={class:`custom-commands-panel`},Bh={class:`header-left`},Vh={class:`panel-title`},Hh=[`aria-valuenow`,`aria-label`],Uh={key:0,class:`empty-container`},Wh={class:`empty-text`},Gh=[`onClick`],Kh={class:`command-left`},qh={key:0,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Jh={key:1,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Yh={class:`command-info`},Xh={class:`command-name`},Zh={key:0,class:`command-desc`},Qh={key:1,class:`command-desc command-text`};function $h(e,t,n,r,i,a){let s=V,c=M;return Z(),X(Y,null,[U(`div`,zh,[U(`div`,{class:`panel-header accordion-header`,onClick:r.toggleCollapsed},[U(`div`,Bh,[o(s,{class:K([`accordion-chevron`,{"is-collapsed":r.collapsed}])},{default:I(()=>t[2]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{fill:`currentColor`,d:`M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z`})],-1)]),_:1},8,[`class`]),o(r.SvgIcon,{"icon-class":`command-list`,"class-name":`cmd-panel-icon`}),U(`span`,Vh,z(r.$t(`@CMDPANEL:自定义命令`)),1)]),U(`div`,{class:`header-right`,onClick:t[0]||=ze(()=>{},[`stop`])},[o(r.IconButton,{size:`small`,tooltip:r.$t(`@CMDPANEL:管理命令`),onClick:r.openManager},{default:I(()=>[o(s,null,{default:I(()=>t[3]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{fill:`currentColor`,d:`M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296L315.2 220.096c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384zm0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256z`})],-1)]),_:1})]),_:1},8,[`tooltip`])])]),R(` 拖拽调高度(展开时显示) OPT-4: 补 role/tabindex/aria-orientation + 键盘 nudge `),L(U(`div`,{class:`resize-handle`,role:`separator`,tabindex:`0`,"aria-orientation":`horizontal`,"aria-valuenow":r.panelHeight,"aria-valuemin":r.MIN_PANEL_HEIGHT,"aria-valuemax":r.MAX_PANEL_HEIGHT,"aria-label":r.$t(`@CMDPANEL:调整自定义命令面板高度(上下方向键)`),onMousedown:r.startResize,onKeydown:r.onResizeKeydown},null,40,Hh),[[q,!r.collapsed]]),!r.collapsed&&r.commands.length===0?(Z(),X(`div`,Uh,[t[4]||=U(`svg`,{class:`empty-icon`,viewBox:`0 0 1024 1024`,width:`40`,height:`40`},[U(`path`,{fill:`currentColor`,d:`M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32z`})],-1),U(`p`,Wh,z(r.$t(`@CMDPANEL:暂无自定义命令`)),1),o(c,{size:`small`,text:``,type:`primary`,onClick:r.openManager},{default:I(()=>[k(z(r.$t(`@CMDPANEL:去添加`)),1)]),_:1})])):r.collapsed?R(`v-if`,!0):(Z(),X(`div`,{key:1,class:`commands-list`,style:Pe({maxHeight:r.panelHeight+`px`})},[(Z(!0),X(Y,null,F(r.commands,e=>(Z(),X(`div`,{key:e.id||e.name,class:K([`command-item`,{running:r.isRunning[String(e.id||e.name)]}]),onClick:t=>r.runCommand(e)},[U(`div`,Kh,[o(s,{class:K([`play-icon`,{"is-loading":r.isRunning[String(e.id||e.name)]}])},{default:I(()=>[r.isRunning[String(e.id||e.name)]?(Z(),X(`svg`,Jh,[...t[6]||=[U(`path`,{fill:`currentColor`,d:`M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z`},null,-1)]])):(Z(),X(`svg`,qh,[...t[5]||=[U(`path`,{fill:`currentColor`,d:`M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z`},null,-1),U(`path`,{fill:`currentColor`,d:`M719.4 499.1l-296.1-215A15.9 15.9 0 0 0 398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 0 0 0-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z`},null,-1)]]))]),_:2},1032,[`class`]),U(`div`,Yh,[U(`span`,Xh,z(e.name),1),e.description?(Z(),X(`span`,Zh,z(e.description),1)):(Z(),X(`span`,Qh,z(e.command),1))])])],10,Gh))),128))],4))]),R(` 命令管理弹窗 `),o(r.CustomCommandManager,{visible:r.managerVisible,"onUpdate:visible":t[1]||=e=>r.managerVisible=e,fullscreen:!0,onExecuteCommand:r.runCommand},null,8,[`visible`])],64)}var eg=$(Rh,[[`render`,$h],[`__scopeId`,`data-v-70af0dcb`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/CustomCommandsPanel.vue`]]),tg=e(mt(),1),ng={0:`var(--color-black)`,1:`#cd3131`,2:`#0dbc79`,3:`#e5e510`,4:`#2472c8`,5:`#bc3fbc`,6:`#11a8cd`,7:`#e5e5e5`,8:`#666666`,9:`#f14c4c`,10:`#23d18b`,11:`#f5f543`,12:`#3b8eea`,13:`#d670d6`,14:`#29b8db`,15:`var(--color-white)`};function rg(e={}){let t=new tg.default({fg:e.fg??`#e5e5e5`,bg:e.bg??`transparent`,newline:e.newline??!1,escapeXML:e.escapeXML??!1,stream:e.stream??!1,colors:e.colors??ng});function n(e){return t.toHtml(e)}return{ansiToHtml:n,converter:t}}function ig(){let e=J([]),t=J(!1);async function n(){try{t.value=!0;let n=await(await fetch(`/api/terminal-sessions`)).json();n?.success?e.value=Array.isArray(n.sessions)?n.sessions:[]:W.error(n?.error||`获取终端会话失败`)}catch(e){W.error(e?.message||`获取终端会话失败`)}finally{t.value=!1}}async function r(e){try{t.value=!0;let r=await(await fetch(`/api/terminal-sessions/${e.id}/restart`,{method:`POST`})).json();return r?.success?(W.success(`已重新启动终端`),await n(),!0):(W.error(r?.error||`重新启动失败`),!1)}catch(e){return W.error(e?.message||`重新启动失败`),!1}finally{t.value=!1}}async function i(e){try{await Ze.confirm(`确定要删除该终端会话记录吗?如果该终端仍在运行,将尝试结束进程。`,`删除终端会话`,{confirmButtonText:`删除`,cancelButtonText:`取消`,type:`warning`})}catch{return!1}try{t.value=!0;let r=await(await fetch(`/api/terminal-sessions/${e.id}`,{method:`DELETE`})).json();return r?.success?(W.success(`已删除`),await n(),!0):(W.error(r?.error||`删除失败`),!1)}catch(e){return W.error(e?.message||`删除失败`),!1}finally{t.value=!1}}function a(t){let n=e.value.findIndex(e=>e.id===t.id);n>=0?e.value.splice(n,1,t):e.value.unshift(t)}return{sessions:e,loading:G(()=>t.value),count:G(()=>e.value.length),refresh:n,restart:r,remove:i,upsert:a}}var ag=8e3,og=j({__name:`CommandConsole`,setup(e,{expose:t}){t();let n=rt(()=>Ct(()=>Promise.resolve().then(()=>Gm),void 0)),r=rt(()=>Ct(()=>import(`./ProjectStartupButton-D7mgEsmf.js`),__vite__mapDeps([3,4,5,1,0,2,6,7,8,9,10,11,12,13,14]))),a=rt(()=>Ct(()=>import(`./FlowOrchestrationWorkspace-CVYPdN7a.js`),__vite__mapDeps([15,4,5,1,0,2,6,7,8,16,17,18,9,10,11,12,19,13,20,21]))),o=rt(()=>Ct(()=>import(`./FlowExecutionViewer-CFpiqZ2C.js`),__vite__mapDeps([22,4,5,1,0,2,6,7,8,16,17,19,13,20,23]))),s=xt(),c=Ht(),l=Yf();function u(){ze().catch(e=>{W.error(e?.message||Q(`@CF05E:提交后启动项执行失败`))})}async function d(e){let t=e?.flowData,n={id:String(e?.id||``).trim(),name:String(e?.name||``).trim()};if(t&&Array.isArray(t?.nodes)&&Array.isArray(t?.edges)){await f({flowData:t,orchestrationMeta:n});return}W.warning(Q(`@CF05E:该编排缺少流程数据,无法执行`))}async function f(e){let t=e?.flowData;if(!t||!Array.isArray(t.nodes)||!Array.isArray(t.edges))return;let n=t.nodes,r=t.edges;Te.value=!0,y.value=!0,x.value=!1,D.value=[],O.value=-1,ce.value=t,k.value=!0,le.value=null,A.value=[],j.value=[],M.value=[],N.value=(e?.orchestrationMeta?.name||``).trim(),de.value=(e?.orchestrationMeta?.id||``).trim();let i={},a=new Map(n.map(e=>[e.id,e])),o=(e?.startNodeId||``).trim()||n.find(e=>e.type===`start`)?.id;if(!o){W.error(Q(`@CF05E:未找到 start 节点`));return}let s=new Map;for(let e of r)s.has(e.source)||s.set(e.source,[]),s.get(e.source).push(e);for(let[e,t]of s.entries()){let n=a.get(e);if(n&&n.type!==`start`&&n.type!==`condition`&&t.length>1){W.error(`节点 ${n.data?.label||n.id} 出边超过 1 条,当前版本不支持`);return}}let c=Math.max(100,n.length*10),l=new Map,u=(e,t,n)=>{let r=e??``,i=n??``;switch(t){case`contains`:return r.includes(i);case`not_contains`:return!r.includes(i);case`isEmpty`:return String(r).trim().length===0;case`isNotEmpty`:return String(r).trim().length>0;case`==`:return r===i;case`!=`:return r!==i;case`>`:case`>=`:case`<`:case`<=`:{let e=Number(r),n=Number(i);return Number.isNaN(e)||Number.isNaN(n)?!1:t===`>`?e>n:t===`>=`?e>=n:t===`<`?e<n:e<=n}default:return!1}},d=(e,t)=>{let n=s.get(e)||[],r=(Array.isArray(t?.conditionBranches)?t.conditionBranches:[]).map(e=>({id:String(e?.id||``),name:String(e?.name||``),handleId:String(e?.handleId||``),priority:typeof e?.priority==`number`?e.priority:Number(e?.priority??0),combine:e?.combine===`any`?`any`:`all`,rules:Array.isArray(e?.rules)?e.rules:[],isDefault:!!e?.isDefault||String(e?.handleId||``)===`default`})).filter(e=>!!e.handleId),a=r.find(e=>e.isDefault)||r.find(e=>e.handleId===`default`),o=r.filter(e=>!e.isDefault&&e.handleId!==`default`).sort((e,t)=>(e.priority??0)-(t.priority??0)),c=e=>{let t=Array.isArray(e.rules)?e.rules:[];if(t.length===0)return!1;let n=t.map(e=>{let t=String(e?.left?.nodeId||``).trim(),n=String(e?.left?.outputKey||`stdout`).trim()||`stdout`,r=t&&i?.[t]?.[n]||``;return u(String(r??``),String(e?.op||``),e?.right)});return e.combine===`any`?n.some(Boolean):n.every(Boolean)},l=o.find(e=>c(e));!l&&a&&(l=a);let d=String(l?.handleId||``),f=d?n.find(e=>String(e.sourceHandle||``).trim()===d):void 0;return console.log(`[FLOW][condition]`,{nodeId:e,chosen:l?{name:l.name,handleId:l.handleId,priority:l.priority,isDefault:l.isDefault}:null,outs:n.map(e=>({id:e.id,sourceHandle:e.sourceHandle,target:e.target})),nodeOutputsKeys:Object.keys(i||{})}),f},f=o,p=0;try{for(;f;){if(!y.value)throw Error(Q(`@CF05E:用户停止执行`));if(p++>c)throw Error(`执行步数超过上限(${c}),可能存在循环`);let t=l.get(f)||0;if(l.set(f,t+1),t>=10)throw Error(`检测到节点 ${f} 被重复执行过多次,可能存在循环`);let n=a.get(f);if(!n)throw Error(`节点不存在: ${f}`);if(le.value=n.id,n.type===`start`){let e=s.get(n.id)||[];A.value=A.value.includes(n.id)?A.value:[...A.value,n.id],e[0]?.id&&(j.value=j.value.includes(e[0].id)?j.value:[...j.value,e[0].id]),f=e[0]?.target;continue}let r=n.data?.config;if(!r)throw Error(`节点未配置: ${n.data?.label||n.id}`);r.enabled===void 0&&(r.enabled=n.data?.enabled??!0);let o=e?.isSingleExecution===!0;if(r.enabled===!1&&!o){f=(s.get(n.id)||[])[0]?.target;continue}if(n.type===`condition`){let e=d(n.id,r);if(A.value=A.value.includes(n.id)?A.value:[...A.value,n.id],e?.id&&(j.value=j.value.includes(e.id)?j.value:[...j.value,e.id]),f=e?.target,o)break;continue}let u=s.get(n.id)||[],m=e?.isSingleExecution!==!0&&!!u[0]?.target;if(!await lt([{...r,nodeId:n.id,enabled:r.enabled}],0,!0,e?.orchestrationMeta,{nodeOutputs:i,skipUiSetup:!0,skipUiTeardown:!0,forceTerminalConfirm:m})){n.id&&!M.value.includes(n.id)&&(M.value=[...M.value,n.id]);break}if(!y.value)break;A.value=A.value.includes(n.id)?A.value:[...A.value,n.id];let h=s.get(n.id)||[];if(h[0]?.id&&(j.value=j.value.includes(h[0].id)?j.value:[...j.value,h[0].id]),f=h[0]?.target,o)break}}catch(e){String(e?.message||e)!==Q(`@CF05E:用户停止执行`)&&(le.value&&!M.value.includes(le.value)&&(M.value=[...M.value,le.value]),W.error(e?.message||String(e)))}finally{y.value=!1,x.value=!1,O.value=-1,D.value=[],le.value=null}}let p=zt(),h=J(null),g=J(``),_=J(``),y=J(!1),x=J(!1),S=J([]),C=0;function te(){Ze.confirm(Q(`@CF05E:确定要清空所有执行历史吗?此操作不可撤销。`),Q(`@CF05E:清空历史`),{confirmButtonText:Q(`@CF05E:清空`),cancelButtonText:Q(`@CF05E:取消`),type:`warning`}).then(()=>{S.value=[],W.success(Q(`@CF05E:执行历史已清空`))}).catch(()=>{})}function w(){fe&&fe(!0)}function re(){fe&&fe(!1),y.value=!1,x.value=!1}function ie(){he&&he(!0)}function E(){he&&he(!1),y.value=!1,x.value=!1}let D=J([]),O=J(-1),ce=J(null),k=J(!0),le=J(null),A=J([]),j=J([]),M=J([]),N=J(``),de=J(``),P=J(!1),F=J(``),fe=null,pe=J(!1),I=J(``),he=null,ve=J(!1),L=J(``),ye=J([]),be=J({}),R=null,z=G({get:()=>ve.value,set:e=>{ve.value=e}});function xe(){let e=Array.isArray(ye.value)?ye.value:[];for(let t of e){if(!t?.required)continue;let e=be.value?.[t.name];if(e==null||String(e).trim()===``){W.warning(Q(`@UINPUT:请输入必填参数的值`,{name:t.name}));return}}R&&R(!0)}function Se(){R&&R(!1),y.value=!1,x.value=!1}let{ansiToHtml:B}=rg(),Te=J(!1),De=G({get:()=>s.ui.commandConsole.useTerminal,set:e=>{s.ui.commandConsole.useTerminal=e}}),{sessions:Oe,loading:ke,refresh:V,restart:Ae,remove:je,upsert:Ne}=ig(),H=G({get:()=>s.ui.commandConsole.showTerminalSessions,set:e=>{s.ui.commandConsole.showTerminalSessions=e}}),Pe=G(()=>Oe.value.length);b(Pe,e=>{l.setCount(e)},{immediate:!0});let Fe=J(!1);function U(e){return new Promise(t=>setTimeout(t,e))}async function Ie(e=8e3){let t=Date.now();for(;Date.now()-t<e;){if(h.value&&h.value.connected)return!0;await U(100)}return!1}async function Le(e){let t=s.customCommands.find(t=>String(t.id)===String(e));if(!t){W.warning(`启动项命令不存在: ${e}`);return}let n=t.directory||g.value,r=t.command;if(De.value){try{let e=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:r,workingDirectory:n})})).json();e?.success?e?.session?Ne(e.session):await V():W.error(e?.error||Q(`@CF05E:启动项命令执行失败`))}catch(e){W.error(e?.message||Q(`@CF05E:启动项命令执行失败`))}return}if(!await Ie()){W.error(Q(`@CF05E:Socket 连接未就绪,无法自动执行交互式启动项`));return}await ft(r,n)}async function Re(e){let t=s.orchestrations.find(t=>t.id===e);if(!t){W.warning(`启动项工作流不存在: ${e}`);return}await d(t)}async function ze(){await s.loadConfig(!1);let e=s.afterQuickPushAction;e?.enabled&&e?.refId&&(e.type===`workflow`?await Re(e.refId):await Le(e.refId))}async function Be(){if(Fe.value||(Fe.value=!0,await s.loadConfig(!1),!s.startupAutoRun))return;let e=(s.startupItems||[]).filter(e=>e?.enabled!==!1);if(e.length!==0)for(let t of e)t.type===`workflow`?await Re(t.refId):await Le(t.refId)}let Ve=e=>Math.min(85,Math.max(15,e)),K=G({get:()=>Ve(s.ui.commandConsole.splitPercent),set:e=>{s.ui.commandConsole.splitPercent=Ve(e)}}),He=J(null),Ue=()=>{let e=He.value?.$el??He.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},We=()=>{let e=He.value?.$el??He.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=Ue();if(!t||t.length<1||n<=0)return;let r=t[0]?.getBoundingClientRect?.().width??0;if(r>0){let e=Ve(r/n*100);e!==K.value&&(K.value=e)}},Ge=G({get(){return`${Ve(K.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=Ue();n>0&&!isNaN(e)&&(t=e/n*100)}else if(typeof e==`string`){if(e.endsWith(`%`))t=parseFloat(e);else if(e.endsWith(`px`)){let n=parseFloat(e),r=Ue();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(K.value=Ve(t))}});async function Ke(e=!0){if(Oe.value.length!==0)try{let t=await(await fetch(`/api/terminal-sessions/status?cleanup=${e?`true`:`false`}`)).json();t?.success&&(Oe.value=Array.isArray(t.sessions)?t.sessions:[])}catch{}}let qe=null;function Je(){qe!==null&&(clearInterval(qe),qe=null)}function Ye(){qe===null&&(qe=setInterval(()=>{Ke(!0)},ag))}b(Pe,e=>{e>0?Ye():Je()},{immediate:!0});function Xe(e){let t=String(e||``).trim();if(!t)return``;let n=t.replace(/\/+$/g,``).replace(/\+$/g,``),r=n.split(/[\\/]+/).filter(Boolean);return r[r.length-1]||n}let Qe=J(!1),q=J(!1);async function $e(){let e=_.value.trim();!e||y.value||(_.value=``,await et(e,g.value))}async function et(e,t=g.value){if(y.value=!0,De.value){try{let n=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e,workingDirectory:t})})).json();n?.success?(W.success(Q(`@CF05E:已在新终端中执行命令`)),n?.session?Ne(n.session):await V()):W.error(n?.error||Q(`@CF05E:执行失败`))}catch(e){W.error(e?.message||Q(`@CF05E:执行失败`))}finally{y.value=!1}return}let n={id:++C,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0};S.value.unshift(n),_.value=``;try{console.log(`[前端-控制台] 开始发送流式请求:`,e);let t=await fetch(`/api/exec-stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e,directory:n.directory})});if(console.log(`[前端-控制台] 收到响应,状态:`,t.status,t.statusText),!t.ok)throw Error(`HTTP ${t.status}: ${t.statusText}`);let r=t.body?.getReader(),i=new TextDecoder;if(!r)throw Error(Q(`@CF05E:无法读取响应流`));console.log(`[前端-控制台] 开始读取流数据`);let a=``,o=0;for(;;){let{done:e,value:t}=await r.read();if(o++,console.log(`[前端-控制台] 读取数据块 #${o}, done:`,e,`size:`,t?.length||0),e)break;let s=i.decode(t,{stream:!0});console.log(`[前端-控制台] 解码数据块:`,s.substring(0,200)),a+=s;let c=a.split(`
49
+ `+e.path,onClick:t=>r.onRecentDirClick(e,t)},[o(s,{class:`dir-icon`},{default:I(()=>[o(r.Folder)]),_:1}),U(`span`,{class:`dir-path`,title:e.path},z(e.path),9,Eu),e.exists?R(`v-if`,!0):(Z(),X(`span`,Du,`不存在`)),U(`button`,{type:`button`,class:`dir-delete-btn`,title:`从常用目录中移除`,onClick:t=>r.removeRecentDirectory(e.path,t)},[...t[18]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`},[U(`path`,{fill:`currentColor`,d:`M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z`})],-1)]],8,Ou)],10,Tu))),128))])]),_:1})):R(`v-if`,!0)]),_:1})])]),_:1},8,[`modelValue`,`title`]),R(` 目录浏览器弹窗 `),o(r.FilePicker,{visible:r.isBrowserDialogVisible,mode:`directory`,theme:r.isDark?`dark`:`light`,locale:r.currentLocale,onClose:t[13]||=e=>r.isBrowserDialogVisible=!1,onConfirm:t[14]||=e=>{r.onBrowserSelect(e[0]),r.isBrowserDialogVisible=!1}},null,8,[`visible`,`theme`,`locale`])],64)}var Nu=$(du,[[`render`,Mu],[`__scopeId`,`data-v-955e45f2`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/DirectorySelector.vue`]]),Pu=j({__name:`GitGlobalSettingsDialog`,props:{modelValue:{type:Boolean,required:!0}},emits:[`update:modelValue`],setup(e,{expose:t,emit:n}){t();let r=Ht(),i=bt(),a=xt(),o=e,s=n,c=J(!1),l=J(!1),u=J(`general`),d=J(`light`),f=J(`zh-CN`),p=J(!1),m=J([]),h=J(void 0),g=G(()=>a.theme===`light`?`light`:`dark`),_=G(()=>{if(h.value===null)return null;let e=m.value.find(e=>e.id===h.value);return e?{endpoint:e.baseURL,modelName:e.model,displayName:e.name,apiKey:e.apiKey}:null}),v=G(()=>u.value===`config`?!0:u.value===`general`?d.value!==M||f.value!==N||h.value!==void 0:u.value===`git`?w.value!==oe||ne.value!==se||ie.value!==ce||ae.value!==k||E.value!==A||D.value!==j||(O.value||``).trim()!==ue:u.value===`editor`?p.value!==a.ui.editorAutoSave:!1);function y(){h.value=null}function x(e){h.value=e.id}function S(){h.value=void 0}async function C(e){let t=h.value===null,n=e.displayName||e.modelName,r=t?`model-${n.toLowerCase().replace(/[^a-z0-9]/g,`-`).slice(0,24)}-${Date.now().toString(36)}`:h.value,i;if(t){let t=m.value.length===0;i=[...m.value,{id:r,name:n,apiKey:e.apiKey,baseURL:e.endpoint,model:e.modelName,isDefault:t}]}else i=m.value.map(t=>t.id===h.value?{...t,name:n,apiKey:e.apiKey||t.apiKey,baseURL:e.endpoint,model:e.modelName}:t);await a.saveModels(i)&&(m.value=i,h.value=void 0,W.success(Q(t?`@42BB9:已添加模型`:`@42BB9:已更新模型`)))}async function ee(e){let t=m.value.filter(t=>t.id!==e);await a.saveModels(t)&&(m.value=t,W.success(Q(`@42BB9:已删除模型`)))}async function te(e){let t=m.value.map(t=>({...t,isDefault:t.id===e}));await a.saveModels(t)&&(m.value=t,W.success(Q(`@42BB9:已设置默认模型`)))}let w=J(``),ne=J(``),T=J(``),re=J(!1),ie=J(!1),ae=J(`false`),E=J(!1),D=J(`true`),O=J(`main`),oe=``,se=``,ce=!1,k=`false`,A=!1,j=`true`,ue=`main`,M=`light`,N=`zh-CN`;b(()=>o.modelValue,async e=>{if(c.value=e,e){w.value=r.userName,ne.value=r.userEmail,T.value=``,d.value=a.theme,f.value=a.locale,m.value=[...a.models],h.value=void 0,p.value=a.ui.editorAutoSave;try{l.value=!0,await fe()}finally{l.value=!1}oe=w.value,se=ne.value,ce=ie.value,k=ae.value,A=E.value,j=D.value,ue=O.value,M=d.value,N=f.value}},{immediate:!0});function de(e){s(`update:modelValue`,e)}async function P(e){try{let t=await(await fetch(`/api/git/global-config?key=${encodeURIComponent(e)}`)).json();if(t.success)return String(t.value||``)}catch{}return``}async function F(e,t){let n=await(await fetch(`/api/git/global-config`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({key:e,value:t})})).json();if(!n.success)throw Error(n.error||`${Q(`@42BB9:设置 `)}${e}${Q(`@42BB9: 失败`)}`)}async function fe(){let[e,t,n,r,i]=await Promise.all([P(`push.autoSetupRemote`),P(`pull.rebase`),P(`fetch.prune`),P(`core.autocrlf`),P(`init.defaultBranch`)]);ie.value=(e||`false`).toLowerCase()===`true`;let a=(t||`false`).toLowerCase();ae.value=a===`true`||a===`merges`?a:`false`,E.value=(n||`false`).toLowerCase()===`true`;let o=(r||`true`).toLowerCase();D.value=o===`true`||o===`input`?o:`false`,O.value=i||`main`}async function pe(){let e=[];try{ie.value!==ce&&e.push(F(`push.autoSetupRemote`,ie.value?`true`:`false`)),ae.value!==k&&e.push(F(`pull.rebase`,ae.value)),E.value!==A&&e.push(F(`fetch.prune`,E.value?`true`:`false`)),D.value!==j&&e.push(F(`core.autocrlf`,D.value));let t=(O.value||``).trim();return t&&t!==ue&&e.push(F(`init.defaultBranch`,t)),e.length===0?!0:(await Promise.all(e),W.success(Q(`@42BB9:已保存变更的 Git 配置`)),ce=ie.value,k=ae.value,A=E.value,j=D.value,ue=t||ue,!0)}catch(e){return W.error(e.message),!1}}async function me(){let e={};if(d.value!==M&&(e.theme=d.value,M=d.value),f.value!==N&&(e.locale=f.value,i.changeLocale(f.value),N=f.value),e.theme!==void 0||e.locale!==void 0){let t=await a.saveGeneralSettings(e);return t&&W.success(Q(`@42BB9:通用设置已保存`)),t}return!0}async function I(){try{let e=await a.resetUiLayout();window.dispatchEvent(new CustomEvent(`ui-layout-reset`,{detail:{layout:e}})),W.success(Q(`@42BB9:布局比例已重置为默认值`))}catch(e){W.error(`${Q(`@42BB9:重置布局失败: `)}${e.message}`)}}async function he(){if(h.value!==void 0){W.warning(Q(`@42BB9:模型尚未保存,请先保存或取消模型编辑`));return}if(u.value===`config`){await _e();return}if(u.value===`editor`){a.ui.editorAutoSave=p.value,W.success(Q(`@42BB9:编辑器设置已保存`)),c.value=!1;return}if(!await me())return;if(!w.value||!ne.value){W.warning(Q(`@42BB9:用户名和邮箱不能为空`));return}let e=!0;(w.value!==oe||ne.value!==se)&&(e=await r.restoreUserConfig(w.value,ne.value),e&&(oe=w.value,se=ne.value));let t=await pe();e&&t&&(c.value=!1)}async function ge(){if(u.value=`config`,!T.value)try{let e=await(await fetch(`/api/config/check-file-format`)).json();e.success||W.warning(e.message||Q(`@42BB9:配置文件格式可能有问题`)),T.value=JSON.stringify(a.config,null,2)}catch{W.error(Q(`@42BB9:加载配置失败`))}}async function _e(){let e;try{e=JSON.parse(T.value)}catch(e){W.error(`${Q(`@42BB9:JSON 解析失败: `)}${e.message||e}`);return}try{re.value=!0;let t=await(await fetch(`/api/config/saveAll`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({config:e})})).json();if(!t.success){W.error(`${Q(`@42BB9:保存失败: `)}${t.error||Q(`@42BB9:未知错误`)}`);return}await a.loadConfig(),W.success(Q(`@42BB9:配置已保存`)),c.value=!1}catch(e){W.error(`${Q(`@42BB9:保存配置失败: `)}${e.message||e}`)}finally{re.value=!1}}async function ve(){try{let e=await(await fetch(`/api/config/open-file`,{method:`POST`})).json();e.success?W.success(Q(`@42BB9:已用系统程序打开配置文件`)):W.error(e.error||Q(`@42BB9:打开文件失败`))}catch(e){W.error(`${Q(`@42BB9:打开文件失败: `)}${e.message||e}`)}}let L={gitStore:r,localeStore:i,configStore:a,props:o,emit:s,visible:c,isLoading:l,activeTab:u,tempTheme:d,tempLocale:f,tempEditorAutoSave:p,aiModels:m,editingModelId:h,currentThemeForForm:g,editingModelInitial:_,hasChanges:v,startAddModel:y,startEditModel:x,cancelEditModel:S,handleAddModelSave:C,handleDeleteModel:ee,handleSetDefaultModel:te,tempUserName:w,tempUserEmail:ne,configEditorText:T,configEditorSaving:re,cfgAutoSetupRemote:ie,cfgPullRebase:ae,cfgFetchPrune:E,cfgCoreAutoCrlf:D,cfgInitDefaultBranch:O,get initUserName(){return oe},set initUserName(e){oe=e},get initUserEmail(){return se},set initUserEmail(e){se=e},get initAutoSetupRemote(){return ce},set initAutoSetupRemote(e){ce=e},get initPullRebase(){return k},set initPullRebase(e){k=e},get initFetchPrune(){return A},set initFetchPrune(e){A=e},get initCoreAutoCrlf(){return j},set initCoreAutoCrlf(e){j=e},get initInitDefaultBranch(){return ue},set initInitDefaultBranch(e){ue=e},get initTheme(){return M},set initTheme(e){M=e},get initLocale(){return N},set initLocale(e){N=e},handleVisibleChange:de,getGlobalConfig:P,setGlobalConfig:F,loadGlobalGitConfigs:fe,saveGlobalGitConfigs:pe,saveGeneralSettings:me,onResetUiLayout:I,handleSave:he,onClickConfigTab:ge,saveConfigJson:_e,openSystemConfigFile:ve,get $t(){return Q},get Check(){return Ae},get InfoFilled(){return le},CommonDialog:vt,get AddModelForm(){return ut}};return Object.defineProperty(L,`__isScriptSetup`,{enumerable:!1,value:!0}),L}}),Fu=[`element-loading-text`],Iu={class:`settings-tabs`},Lu={class:`settings-panels`},Ru={class:`settings-panel`},zu={class:`info-section`},Bu={class:`info-card`},Vu={class:`info-content`},Hu={class:`info-title`},Uu={class:`info-desc`},Wu={class:`settings-section`},Gu={class:`section-title`},Ku={class:`settings-grid`},qu={class:`setting-row`},Ju={class:`setting-label`},Yu={class:`settings-section`},Xu={class:`section-title`},Zu={class:`settings-grid`},Qu={class:`setting-row`},$u={class:`setting-label`},ed={class:`settings-section`},td={class:`section-title`},nd={class:`settings-grid`},rd={class:`setting-row`},id={class:`setting-label`},ad={class:`setting-row`},od={class:`setting-label`},sd={class:`setting-hint-inline`},cd={class:`setting-row setting-row--full`},ld={class:`setting-label`},ud={class:`console-sub-options`},dd={class:`console-split-row`},fd={class:`setting-hint-block`},pd={class:`setting-row`},md={class:`setting-label`},hd={class:`layout-actions`},gd={class:`setting-hint-block`},_d={class:`settings-section`},vd={class:`section-title model-section-title`},yd={class:`model-list`},bd={key:0,class:`model-empty`},xd={class:`model-info`},Sd={class:`model-name-row`},Cd={class:`model-name`},wd={key:0,class:`model-default-badge`},Td={class:`model-meta`},Ed={class:`model-actions`},Dd=[`onClick`],Od=[`onClick`],kd=[`onClick`],Ad={key:0,class:`ai-model-form-wrapper`},jd={class:`settings-panel`},Md={class:`info-section`},Nd={class:`info-card`},Pd={class:`info-content`},Fd={class:`info-title`},Id={class:`info-desc`},Ld={class:`basic-info-section`},Rd={class:`basic-info-grid`},zd={class:`settings-section`},Bd={class:`section-title`},Vd={class:`settings-grid`},Hd={class:`setting-row`},Ud={class:`setting-label`},Wd={class:`setting-row`},Gd={class:`setting-label`},Kd={class:`setting-row`},qd={class:`setting-label`},Jd={class:`setting-row`},Yd={class:`setting-label`},Xd={class:`setting-row`},Zd={class:`setting-label`},Qd={class:`settings-panel`},$d={class:`info-section`},ef={class:`info-card`},tf={class:`info-content`},nf={class:`info-title`},rf={class:`info-desc`},af={class:`settings-section`},of={class:`section-title`},sf={class:`settings-grid commit-settings-grid`},cf={class:`setting-row`},lf={class:`setting-label`},uf={class:`setting-row`},df={class:`setting-label`},ff={class:`setting-row`},pf={class:`setting-label`},mf={class:`setting-row`},hf={class:`setting-label`},gf={class:`setting-row`},_f={class:`setting-label`},vf={class:`setting-row`},yf={class:`setting-label`},bf={class:`settings-panel config-panel`},xf={class:`info-section`},Sf={class:`info-card`},Cf={class:`info-content`},wf={class:`info-title`},Tf={class:`info-desc`},Ef={class:`config-json-editor-wrap`},Df={class:`config-panel-actions`},Of={class:`settings-panel`},kf={class:`info-section`},Af={class:`info-card`},jf={class:`info-content`},Mf={class:`info-title`},Nf={class:`info-desc`},Pf={class:`settings-section`},Ff={class:`section-title`},If={class:`settings-grid`},Lf={class:`setting-row`},Rf={class:`setting-label`},zf={key:0,class:`setting-row setting-row--hint`},Bf={class:`setting-hint`},Vf={class:`user-settings-footer`},Hf={class:`footer-actions`},Uf=[`disabled`],Wf=[`disabled`];function Gf(e,t,n,r,i,s){let c=it,u=ce,d=st,f=a,m=Ne,h=Fe,g=M,_=Ye,v=l,y=V,b=p,x=A,S=xe;return Z(),H(r.CommonDialog,{modelValue:r.visible,"onUpdate:modelValue":[t[28]||=e=>r.visible=e,r.handleVisibleChange],title:r.$t(`@42BB9:设置`),size:`large`,"destroy-on-close":!0,"custom-class":`user-settings-dialog`},B({default:I(()=>[L((Z(),X(`div`,{class:`user-settings-content`,"element-loading-text":r.$t(`@42BB9:正在加载配置...`),"element-loading-background":`rgba(0, 0, 0, 0.15)`},[R(` 左侧标签页切换 `),U(`div`,Iu,[U(`div`,{class:K([`tab-item`,{active:r.activeTab===`general`}]),onClick:t[0]||=e=>r.activeTab=`general`},[U(`span`,null,z(r.$t(`@42BB9:通用设置`)),1)],2),U(`div`,{class:K([`tab-item`,{active:r.activeTab===`git`}]),onClick:t[1]||=e=>r.activeTab=`git`},[U(`span`,null,z(r.$t(`@42BB9:Git 全局设置`)),1)],2),U(`div`,{class:K([`tab-item`,{active:r.activeTab===`commit`}]),onClick:t[2]||=e=>r.activeTab=`commit`},[U(`span`,null,z(r.$t(`@42BB9:提交设置`)),1)],2),U(`div`,{class:K([`tab-item`,{active:r.activeTab===`config`}]),onClick:r.onClickConfigTab},[U(`span`,null,z(r.$t(`@42BB9:编辑配置`)),1)],2),U(`div`,{class:K([`tab-item`,{active:r.activeTab===`editor`}]),onClick:t[3]||=e=>r.activeTab=`editor`},[U(`span`,null,z(r.$t(`@42BB9:编辑器设置`)),1)],2)]),R(` 右侧内容区域 `),U(`div`,Lu,[R(` 通用设置面板 `),L(U(`div`,Ru,[U(`div`,zu,[U(`div`,Bu,[U(`div`,Vu,[U(`p`,Hu,z(r.$t(`@42BB9:通用配置`)),1),U(`p`,Uu,z(r.$t(`@42BB9:自定义应用的外观和语言`)),1)])])]),U(`div`,Wu,[U(`div`,Gu,[U(`span`,null,z(r.$t(`@42BB9:外观`)),1)]),U(`div`,Ku,[U(`div`,qu,[U(`label`,Ju,z(r.$t(`@42BB9:主题`)),1),o(u,{modelValue:r.tempTheme,"onUpdate:modelValue":t[4]||=e=>r.tempTheme=e,class:`modern-input`,size:`default`},{default:I(()=>[o(c,{label:r.$t(`@42BB9:浅色`),value:`light`},null,8,[`label`]),o(c,{label:r.$t(`@42BB9:深色`),value:`dark`},null,8,[`label`]),o(c,{label:r.$t(`@42BB9:跟随系统`),value:`auto`},null,8,[`label`])]),_:1},8,[`modelValue`])])])]),U(`div`,Yu,[U(`div`,Xu,[U(`span`,null,z(r.$t(`@42BB9:语言`)),1)]),U(`div`,Zu,[U(`div`,Qu,[U(`label`,$u,z(r.$t(`@42BB9:界面语言`)),1),o(u,{modelValue:r.tempLocale,"onUpdate:modelValue":t[5]||=e=>r.tempLocale=e,class:`modern-input`,size:`default`},{default:I(()=>[o(c,{label:`简体中文`,value:`zh-CN`}),o(c,{label:`English`,value:`en-US`})]),_:1},8,[`modelValue`])])])]),R(` 界面(视图模式 / 分割比例 / 控制台 / 布局比例) `),U(`div`,ed,[U(`div`,td,[U(`span`,null,z(r.$t(`@42BB9:界面`)),1)]),U(`div`,nd,[R(` 文件列表视图模式 `),U(`div`,rd,[U(`label`,id,z(r.$t(`@42BB9:文件列表视图`)),1),o(f,{modelValue:r.configStore.ui.fileListViewMode,"onUpdate:modelValue":t[6]||=e=>r.configStore.ui.fileListViewMode=e,size:`default`},{default:I(()=>[o(d,{value:`list`},{default:I(()=>[k(z(r.$t(`@42BB9:列表`)),1)]),_:1}),o(d,{value:`tree`},{default:I(()=>[k(z(r.$t(`@42BB9:树状`)),1)]),_:1})]),_:1},8,[`modelValue`])]),R(` 文件差异分割比例 `),U(`div`,ad,[U(`label`,od,[k(z(r.$t(`@42BB9:文件差异分割`))+` `,1),U(`span`,sd,z(r.configStore.ui.fileDiffSplitPercent)+`%`,1)]),o(m,{modelValue:r.configStore.ui.fileDiffSplitPercent,"onUpdate:modelValue":t[7]||=e=>r.configStore.ui.fileDiffSplitPercent=e,min:15,max:85,step:1,class:`setting-slider`},null,8,[`modelValue`])]),R(` 命令控制台(跨整行的复合控件) `),U(`div`,cd,[U(`label`,ld,z(r.$t(`@42BB9:命令控制台`)),1),U(`div`,ud,[o(h,{modelValue:r.configStore.ui.commandConsole.expanded,"onUpdate:modelValue":t[8]||=e=>r.configStore.ui.commandConsole.expanded=e,"active-text":r.$t(`@42BB9:默认展开`)},null,8,[`modelValue`,`active-text`]),o(h,{modelValue:r.configStore.ui.commandConsole.useTerminal,"onUpdate:modelValue":t[9]||=e=>r.configStore.ui.commandConsole.useTerminal=e,"active-text":r.$t(`@42BB9:使用终端执行`)},null,8,[`modelValue`,`active-text`]),o(h,{modelValue:r.configStore.ui.commandConsole.showTerminalSessions,"onUpdate:modelValue":t[10]||=e=>r.configStore.ui.commandConsole.showTerminalSessions=e,"active-text":r.$t(`@42BB9:显示终端会话`)},null,8,[`modelValue`,`active-text`]),U(`div`,dd,[U(`span`,fd,z(r.$t(`@42BB9:控制台高度比例`))+`: `+z(r.configStore.ui.commandConsole.splitPercent)+`% `,1),o(m,{modelValue:r.configStore.ui.commandConsole.splitPercent,"onUpdate:modelValue":t[11]||=e=>r.configStore.ui.commandConsole.splitPercent=e,min:15,max:85,step:1,class:`setting-slider`},null,8,[`modelValue`])])])]),R(` 布局比例重置 `),U(`div`,pd,[U(`label`,md,z(r.$t(`@42BB9:布局比例`)),1),U(`div`,hd,[o(g,{onClick:r.onResetUiLayout,size:`default`},{default:I(()=>[k(z(r.$t(`@42BB9:重置为默认布局`)),1)]),_:1}),U(`span`,gd,z(r.$t(`@42BB9:恢复默认的左/中/右/上面板比例`)),1)])])])]),R(` AI 模型配置 `),U(`div`,_d,[U(`div`,vd,[U(`span`,null,z(r.$t(`@42BB9:AI 模型配置`)),1),U(`button`,{class:`add-model-btn`,onClick:r.startAddModel},`+ `+z(r.$t(`@42BB9:添加模型`)),1)]),U(`div`,yd,[r.aiModels.length===0?(Z(),X(`div`,bd,z(r.$t(`@42BB9:暂未配置模型`)),1)):R(`v-if`,!0),(Z(!0),X(Y,null,F(r.aiModels,e=>(Z(),X(`div`,{key:e.id,class:`model-card`},[U(`div`,xd,[U(`div`,Sd,[U(`span`,Cd,z(e.name),1),e.isDefault?(Z(),X(`span`,wd,z(r.$t(`@42BB9:默认`)),1)):R(`v-if`,!0)]),U(`div`,Td,z(e.model)+` · `+z(e.baseURL),1)]),U(`div`,Ed,[e.isDefault?R(`v-if`,!0):(Z(),X(`button`,{key:0,class:`model-btn`,onClick:t=>r.handleSetDefaultModel(e.id)},z(r.$t(`@42BB9:设为默认`)),9,Dd)),U(`button`,{class:`model-btn`,onClick:t=>r.startEditModel(e)},z(r.$t(`@42BB9:编辑`)),9,Od),U(`button`,{class:`model-btn model-btn--danger`,onClick:t=>r.handleDeleteModel(e.id)},z(r.$t(`@42BB9:删除`)),9,kd)])]))),128))]),R(` 新增 / 编辑表单:使用 ai-model-form 组件 `),r.editingModelId===void 0?R(`v-if`,!0):(Z(),X(`div`,Ad,[(Z(),H(r.AddModelForm,{key:r.editingModelId??`__new__`,"api-base":`/api/ai-model`,initial:r.editingModelInitial,theme:r.currentThemeForForm,locale:r.localeStore.currentLocale,onSave:r.handleAddModelSave,onCancel:r.cancelEditModel},null,8,[`initial`,`theme`,`locale`]))]))])],512),[[q,r.activeTab===`general`]]),R(` Git 全局设置面板 `),L(U(`div`,jd,[U(`div`,Md,[U(`div`,Nd,[U(`div`,Pd,[U(`p`,Fd,z(r.$t(`@42BB9:全局配置`)),1),U(`p`,Id,z(r.$t(`@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效`)),1)])])]),o(x,{class:`user-form`,"label-width":`auto`,model:{tempUserName:r.tempUserName,tempUserEmail:r.tempUserEmail}},{default:I(()=>[U(`div`,Ld,[U(`div`,Rd,[o(v,{class:`form-item`,label:r.$t(`@42BB9:用户名`)},{default:I(()=>[o(_,{modelValue:r.tempUserName,"onUpdate:modelValue":t[12]||=e=>r.tempUserName=e,placeholder:r.$t(`@42BB9:请输入 Git 用户名`),class:`modern-input`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),o(v,{class:`form-item`,label:r.$t(`@42BB9:邮箱地址`)},{default:I(()=>[o(_,{modelValue:r.tempUserEmail,"onUpdate:modelValue":t[13]||=e=>r.tempUserEmail=e,placeholder:r.$t(`@42BB9:请输入 Git 邮箱地址`),class:`modern-input`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])]),R(` 高级设置:常用全局 Git 配置 `),U(`div`,zd,[U(`div`,Bd,[U(`span`,null,z(r.$t(`@42BB9:高级配置`)),1)]),U(`div`,Vd,[U(`div`,Hd,[U(`label`,Ud,[k(z(r.$t(`@42BB9:自动设置上游`))+` `,1),o(b,{content:r.$t(`@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.cfgAutoSetupRemote,"onUpdate:modelValue":t[14]||=e=>r.cfgAutoSetupRemote=e},null,8,[`modelValue`])]),U(`div`,Wd,[U(`label`,Gd,z(r.$t(`@42BB9:拉取策略`)),1),o(u,{modelValue:r.cfgPullRebase,"onUpdate:modelValue":t[15]||=e=>r.cfgPullRebase=e,class:`modern-input`,size:`default`},{default:I(()=>[o(c,{label:r.$t(`@42BB9:merge (默认)`),value:`false`},null,8,[`label`]),o(c,{label:`rebase`,value:`true`}),o(c,{label:r.$t(`@42BB9:rebase(保留合并)`),value:`merges`},null,8,[`label`])]),_:1},8,[`modelValue`])]),U(`div`,Kd,[U(`label`,qd,[k(z(r.$t(`@42BB9:自动清理远程分支`))+` `,1),o(b,{content:r.$t(`@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.cfgFetchPrune,"onUpdate:modelValue":t[16]||=e=>r.cfgFetchPrune=e},null,8,[`modelValue`])]),U(`div`,Jd,[U(`label`,Yd,z(r.$t(`@42BB9:换行符处理`)),1),o(u,{modelValue:r.cfgCoreAutoCrlf,"onUpdate:modelValue":t[17]||=e=>r.cfgCoreAutoCrlf=e,class:`modern-input`,size:`default`},{default:I(()=>[o(c,{label:`true (Windows)`,value:`true`}),o(c,{label:`input`,value:`input`}),o(c,{label:`false`,value:`false`})]),_:1},8,[`modelValue`])]),U(`div`,Xd,[U(`label`,Zd,[k(z(r.$t(`@42BB9:默认初始化分支`))+` `,1),o(b,{content:r.$t(`@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(_,{modelValue:r.cfgInitDefaultBranch,"onUpdate:modelValue":t[18]||=e=>r.cfgInitDefaultBranch=e,placeholder:r.$t(`@42BB9:例如: main`),class:`modern-input`,size:`default`},null,8,[`modelValue`,`placeholder`])])])])]),_:1},8,[`model`])],512),[[q,r.activeTab===`git`]]),R(` 提交设置面板 `),L(U(`div`,Qd,[U(`div`,$d,[U(`div`,ef,[U(`div`,tf,[U(`p`,nf,z(r.$t(`@76872:提交设置`)),1),U(`p`,rf,z(r.$t(`@76872:这些设置实时生效`)),1)])])]),U(`div`,af,[U(`div`,of,[U(`span`,null,z(r.$t(`@76872:提交格式与行为`)),1)]),U(`div`,sf,[U(`div`,cf,[U(`label`,lf,z(r.$t(`@76872:标准化提交`)),1),o(h,{modelValue:r.configStore.isStandardCommit,"onUpdate:modelValue":t[19]||=e=>r.configStore.isStandardCommit=e},null,8,[`modelValue`])]),U(`div`,uf,[U(`label`,df,[k(z(r.$t(`@76872:跳过钩子检查`))+` `,1),o(b,{content:r.$t(`@76872:添加 --no-verify 参数`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.skipHooks,"onUpdate:modelValue":t[20]||=e=>r.configStore.skipHooks=e},null,8,[`modelValue`])]),U(`div`,ff,[U(`label`,pf,[k(z(r.$t(`@76872:回车自动提交`))+` `,1),o(b,{content:r.$t(`@76872:输入提交信息后按回车直接执行一键推送`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.autoQuickPushOnEnter,"onUpdate:modelValue":t[21]||=e=>r.configStore.autoQuickPushOnEnter=e},null,8,[`modelValue`])]),U(`div`,mf,[U(`label`,hf,[k(z(r.$t(`@76872:Push完成自动关闭`))+` `,1),o(b,{content:r.$t(`@76872:推送成功后自动关闭进度弹窗`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.autoClosePushModal,"onUpdate:modelValue":t[22]||=e=>r.configStore.autoClosePushModal=e},null,8,[`modelValue`])]),U(`div`,gf,[U(`label`,_f,[k(z(r.$t(`@76872:推送前拉取更新`))+` `,1),o(b,{content:r.$t(`@76872:推送前自动拉取远程更新,有冲突则停止推送`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.pullBeforePush,"onUpdate:modelValue":t[23]||=e=>r.configStore.pullBeforePush=e},null,8,[`modelValue`])]),U(`div`,vf,[U(`label`,yf,[k(z(r.$t(`@76872:自动填充默认提交信息`))+` `,1),o(b,{content:r.$t(`@76872:打开页面或提交完成后自动填充默认提交信息`),placement:`top`,"show-after":200},{default:I(()=>[o(y,{class:`qmark`},{default:I(()=>[o(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),o(h,{modelValue:r.configStore.autoSetDefaultMessage,"onUpdate:modelValue":t[24]||=e=>r.configStore.autoSetDefaultMessage=e},null,8,[`modelValue`])])])])],512),[[q,r.activeTab===`commit`]]),R(` 编辑配置 JSON 面板 `),L(U(`div`,bf,[U(`div`,xf,[U(`div`,Sf,[U(`div`,Cf,[U(`p`,wf,z(r.$t(`@42BB9:编辑当前项目的配置文件`)),1),U(`p`,Tf,z(r.$t(`@42BB9:直接编辑 JSON,支持所有配置项`)),1)])])]),U(`div`,Ef,[o(_,{modelValue:r.configEditorText,"onUpdate:modelValue":t[25]||=e=>r.configEditorText=e,type:`textarea`,spellcheck:`false`,autocomplete:`off`,placeholder:r.$t(`@42BB9:加载中...`),class:`config-json-editor`},null,8,[`modelValue`,`placeholder`])]),U(`div`,Df,[U(`button`,{type:`button`,class:`dialog-cancel-btn system-config-btn`,onClick:r.openSystemConfigFile},z(r.$t(`@42BB9:打开系统配置文件`)),1)])],512),[[q,r.activeTab===`config`]]),R(` 编辑器设置面板 `),L(U(`div`,Of,[U(`div`,kf,[U(`div`,Af,[U(`div`,jf,[U(`p`,Mf,z(r.$t(`@42BB9:编辑器设置`)),1),U(`p`,Nf,z(r.$t(`@42BB9:自定义编辑器行为`)),1)])])]),U(`div`,Pf,[U(`div`,Ff,[U(`span`,null,z(r.$t(`@42BB9:文件编辑`)),1)]),U(`div`,If,[U(`div`,Lf,[U(`label`,Rf,z(r.$t(`@42BB9:自动保存`)),1),o(h,{modelValue:r.tempEditorAutoSave,"onUpdate:modelValue":t[26]||=e=>r.tempEditorAutoSave=e},null,8,[`modelValue`])]),r.tempEditorAutoSave?(Z(),X(`div`,zf,[U(`span`,Bf,z(r.$t(`@42BB9:失去焦点时自动保存当前文件`)),1)])):R(`v-if`,!0)])])],512),[[q,r.activeTab===`editor`]])])],8,Fu)),[[S,r.isLoading]])]),_:2},[r.activeTab===`commit`?void 0:{name:`footer`,fn:I(()=>[U(`div`,Vf,[t[29]||=U(`div`,null,null,-1),U(`div`,Hf,[U(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[27]||=e=>r.visible=!1,disabled:r.isLoading},z(r.hasChanges?r.$t(`@42BB9:取消`):r.$t(`@42BB9:关闭`)),9,Uf),r.hasChanges?(Z(),X(`button`,{key:0,type:`button`,class:`dialog-confirm-btn`,onClick:r.handleSave,disabled:r.isLoading},[o(y,null,{default:I(()=>[o(r.Check)]),_:1}),U(`span`,null,z(r.activeTab===`config`?r.$t(`@42BB9:保存配置`):r.$t(`@42BB9:保存设置`)),1)],8,Wf)):R(`v-if`,!0)])])]),key:`0`}]),1032,[`modelValue`,`title`])}var Kf=$(Pu,[[`render`,Gf],[`__scopeId`,`data-v-97bdc1da`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/GitGlobalSettingsDialog.vue`]]),qf=ft(`workbenchStatus`,()=>{let e=J(0);function t(t){e.value=Math.max(0,t|0)}return{runningCount:e,hasRunning:G(()=>e.value>0),setRunning:t}}),Jf=ft(`editorTabs`,()=>{let e=J(0);function t(t){e.value=Math.max(0,t|0)}return{dirtyCount:e,hasDirty:G(()=>e.value>0),setDirtyCount:t}}),Yf=ft(`terminalSessions`,()=>{let e=J(0);function t(t){e.value=Math.max(0,t|0)}return{count:e,hasActive:G(()=>e.value>0),setCount:t}}),Xf=j({__name:`ActivityBar`,props:{activeView:{type:String,required:!0}},emits:[`update:activeView`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=qf(),o=Ht(),s=Jf(),c=Yf(),l=G(()=>o.fileList?.length??0),u=G(()=>{let e=l.value;return e>99?`99+`:String(e)}),d=G(()=>{let e=s.dirtyCount;return e>99?`99+`:String(e)});function f(e){i(`update:activeView`,e)}let m={props:r,emit:i,wbStatus:a,gitStore:o,editorTabsStore:s,terminalSessionsStore:c,uncommittedCount:l,uncommittedBadge:u,editorDirtyBadge:d,select:f,get $t(){return Q},get ElTooltip(){return p}};return Object.defineProperty(m,`__isScriptSetup`,{enumerable:!1,value:!0}),m}}),Zf={class:`activity-bar`},Qf=[`aria-label`,`aria-pressed`],$f=[`title`],ep=[`aria-label`,`aria-pressed`],tp=[`title`],np=[`aria-label`,`aria-pressed`],rp=[`aria-label`,`aria-pressed`],ip=[`title`],ap=[`aria-label`,`aria-pressed`],op=[`aria-label`,`aria-pressed`],sp=[`title`],cp=[`aria-label`,`aria-pressed`],lp=[`aria-label`,`aria-pressed`];function up(e,t,n,r,i,a){return Z(),X(`div`,Zf,[R(` Git 页面 `),o(r.ElTooltip,{content:r.uncommittedCount>0?`${r.$t(`@ACTBAR:Git`)} · ${r.uncommittedCount} ${r.$t(`@ACTBAR:个未提交文件`)}`:r.$t(`@ACTBAR:Git`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`git`}]),onClick:t[0]||=e=>r.select(`git`),"aria-label":r.uncommittedCount>0?`${r.$t(`@ACTBAR:Git`)} · ${r.uncommittedCount} ${r.$t(`@ACTBAR:个未提交文件`)}`:r.$t(`@ACTBAR:Git`),"aria-pressed":r.props.activeView===`git`},[R(` git.svg `),t[8]||=U(`svg`,{viewBox:`0 0 1025 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M1004.728 466.4l-447.104-447.072c-25.728-25.76-67.488-25.76-93.28 0l-103.872 103.872 78.176 78.176c12.544-5.984 26.56-9.376 41.376-9.376 53.024 0 96 42.976 96 96 0 14.816-3.36 28.864-9.376 41.376l127.968 127.968c12.544-5.984 26.56-9.376 41.376-9.376 53.024 0 96 42.976 96 96s-42.976 96-96 96-96-42.976-96-96c0-14.816 3.36-28.864 9.376-41.376l-127.968-127.968c-3.04 1.472-6.176 2.752-9.376 3.872l0 266.976c37.28 13.184 64 48.704 64 90.528 0 53.024-42.976 96-96 96s-96-42.976-96-96c0-41.792 26.72-77.344 64-90.528l0-266.976c-37.28-13.184-64-48.704-64-90.528 0-14.816 3.36-28.864 9.376-41.376l-78.176-78.176-295.904 295.872c-25.76 25.792-25.76 67.52 0 93.28l447.136 447.072c25.728 25.76 67.488 25.76 93.28 0l444.992-444.992c25.76-25.76 25.76-67.552 0-93.28z`})],-1),r.uncommittedCount>0?(Z(),X(`span`,{key:0,class:`git-uncommitted-badge`,title:`${r.uncommittedCount} ${r.$t(`@ACTBAR:个未提交文件`)}`,"aria-hidden":`true`},z(r.uncommittedBadge),9,$f)):R(`v-if`,!0)],10,Qf)]),_:1},8,[`content`]),R(` 控制台页面:自定义命令 + 命令控制台(从 Git 视图拆出) `),o(r.ElTooltip,{content:r.terminalSessionsStore.hasActive?`${r.$t(`@ACTBAR:控制台`)} · ${r.terminalSessionsStore.count} ${r.$t(`@ACTBAR:个终端会话`)}`:r.$t(`@ACTBAR:控制台`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`console`}]),onClick:t[1]||=e=>r.select(`console`),"aria-label":r.terminalSessionsStore.hasActive?`${r.$t(`@ACTBAR:控制台`)} · ${r.terminalSessionsStore.count} ${r.$t(`@ACTBAR:个终端会话`)}`:r.$t(`@ACTBAR:控制台`),"aria-pressed":r.props.activeView===`console`},[R(` terminal.svg: 终端窗口 + 光标 `),t[9]||=U(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[U(`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`}),U(`path`,{d:`M6 9l3 3-3 3`}),U(`line`,{x1:`12`,y1:`15`,x2:`17`,y2:`15`})],-1),r.terminalSessionsStore.hasActive?(Z(),X(`span`,{key:0,class:`console-sessions-badge`,title:r.$t(`@ACTBAR:个终端会话`),"aria-hidden":`true`},z(r.terminalSessionsStore.count>99?`99+`:r.terminalSessionsStore.count),9,tp)):R(`v-if`,!0)],10,ep)]),_:1},8,[`content`]),R(` 智能体 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:智能体`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`agent`}]),onClick:t[2]||=e=>r.select(`agent`),"aria-label":r.$t(`@ACTBAR:智能体`),"aria-pressed":r.props.activeView===`agent`},[R(` robot/bot.svg: 智能体图标 `),t[10]||=U(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[U(`rect`,{x:`3`,y:`11`,width:`18`,height:`10`,rx:`2`}),U(`circle`,{cx:`12`,cy:`5`,r:`2`}),U(`path`,{d:`M12 7v4`}),U(`line`,{x1:`8`,y1:`16`,x2:`8`,y2:`16`}),U(`line`,{x1:`16`,y1:`16`,x2:`16`,y2:`16`})],-1)],10,np)]),_:1},8,[`content`]),R(` 编辑器页面 `),o(r.ElTooltip,{content:r.editorTabsStore.hasDirty?`${r.$t(`@ACTBAR:编辑器`)} · ${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`:r.$t(`@ACTBAR:编辑器`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`editor`}]),onClick:t[3]||=e=>r.select(`editor`),"aria-label":r.editorTabsStore.hasDirty?`${r.$t(`@ACTBAR:编辑器`)} · ${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`:r.$t(`@ACTBAR:编辑器`),"aria-pressed":r.props.activeView===`editor`},[R(` code-folder.svg `),t[11]||=U(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M928 687.9c-17.8 0-32.2 14.4-32.2 32.1v80.7c0 35.3-28.7 64-64 64H192.5c-35.3 0-64-28.7-64-64V225c0-35.3 28.7-64 64-64H415l82.7 143.3c6.6 11.4 19.2 17.2 31.5 15.8h302.5c35.3 0 64 28.7 64 64v80c0 17.7 14.4 32.1 32.2 32.1s32.2-14.4 32.2-32.1c0-0.8 0-1.6-0.1-2.4v-77.5C960 329 925.1 282 876.1 264v-1c0-68.2-55.8-124-124-124H476.2l-14.8-25.7c-7.4-12.9-18-16.2-27.3-16l-0.1-0.1H192.1c-70.7 0-128 57.3-128 128v574.1c0 70.7 57.3 128 128 128h640c70.7 0 128-57.3 128-128v-76.9c0.1-0.8 0.1-1.6 0.1-2.4 0-17.7-14.4-32.1-32.2-32.1zM747.1 202.8c31.6 0 58 23.2 63.1 53.4H543.9l-30.8-53.4h234z`})],-1),r.editorTabsStore.hasDirty?(Z(),X(`span`,{key:0,class:`editor-dirty-badge`,title:`${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`,"aria-hidden":`true`},z(r.editorDirtyBadge),9,ip)):R(`v-if`,!0)],10,rp)]),_:1},8,[`content`]),R(` 源码地图 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:源码地图`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`source-map`}]),onClick:t[4]||=e=>r.select(`source-map`),"aria-label":r.$t(`@ACTBAR:源码地图`),"aria-pressed":r.props.activeView===`source-map`},[R(` code-map.svg `),t[12]||=U(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M961.5 700.5 889 700.5 889 512c0-24-19.5-43.5-43.5-43.5L541 468.5l0-145 72.5 0c24 0 43.5-19.5 43.5-43.5L657 77c0-24-19.5-43.5-43.5-43.5l-203 0C386.5 33.5 367 53 367 77l0 203c0 24 19.5 43.5 43.5 43.5L483 323.5l0 145L178.5 468.5c-24 0-43.5 19.5-43.5 43.5l0 188.5L62.5 700.5C38.5 700.5 19 720 19 744l0 203c0 24 19.5 43.5 43.5 43.5l203 0c24 0 43.5-19.5 43.5-43.5L309 744c0-24-19.5-43.5-43.5-43.5L193 700.5l0-174 290 0 0 174-72.5 0c-24 0-43.5 19.5-43.5 43.5l0 203c0 24 19.5 43.5 43.5 43.5l203 0c24 0 43.5-19.5 43.5-43.5L657 744c0-24-19.5-43.5-43.5-43.5L541 700.5l0-174 290 0 0 174-72.5 0c-24 0-43.5 19.5-43.5 43.5l0 203c0 24 19.5 43.5 43.5 43.5l203 0c24 0 43.5-19.5 43.5-43.5L1005 744C1005 720 985.5 700.5 961.5 700.5zM425 91.5l174 0 0 174L425 265.5 425 91.5zM251 758.5l0 174L77 932.5l0-174L251 758.5zM599 932.5 425 932.5l0-174 174 0L599 932.5zM947 932.5 773 932.5l0-174 174 0L947 932.5z`})],-1)],10,ap)]),_:1},8,[`content`]),R(` 工作台 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:工作台`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`workbench`}]),onClick:t[5]||=e=>r.select(`workbench`),"aria-label":r.wbStatus.runningCount>0?`${r.$t(`@ACTBAR:工作台`)} · ${r.wbStatus.runningCount} ${r.$t(`@ACTBAR:个任务正在执行`)}`:r.$t(`@ACTBAR:工作台`),"aria-pressed":r.props.activeView===`workbench`},[R(` code-task.svg `),t[13]||=U(`svg`,{viewBox:`0 0 1044 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M840.454 62.442H201.849c-76.445 0-139.409 63.68-139.409 141.007v614.048c0 77.326 62.963 141.007 139.408 141.007h638.605c76.454 0 139.408-63.68 139.408-141.007V203.449c0-77.326-58.454-141.007-139.408-141.007z m71.955 759.608c0 40.931-31.473 72.772-71.954 72.772H201.85c-40.473 0-71.954-31.84-71.954-72.772V203.447c0-40.931 31.481-72.772 71.954-72.772h638.605c40.481 0 71.954 31.84 71.954 72.772V822.05zM399.73 285.32l-98.936 100.065-44.973-45.477c-13.5-13.647-35.981-13.647-44.973 0-13.5 13.638-13.5 36.386 0 45.477l71.954 72.781c4.5 4.546 13.492 9.092 26.981 9.092 13.5 0 13.5-4.546 26.981-9.092L458.19 335.353c13.5-13.647 13.5-36.386 0-45.487-26.981-13.638-44.973-13.638-58.463-4.546z m413.743 54.588H503.165c-22.481 0-31.481 13.638-31.481 31.84 0 22.739 13.5 31.84 31.481 31.84h310.316c22.481 0 31.473-13.647 31.473-31.84 0-18.202-13.5-31.84-31.481-31.84zM318.775 544.584c-58.463 0-103.436 45.487-103.436 104.62 0 59.125 44.973 104.611 103.436 104.611 58.473 0 103.436-45.487 103.436-104.611 0-63.68-49.463-104.62-103.436-104.62z m0 136.459c-22.481 0-35.973-13.647-35.973-36.386 0-22.747 13.492-36.395 35.973-36.395 22.492 0 35.981 13.647 35.981 36.395 0 22.739-17.992 36.386-35.981 36.386z m494.698-68.235H503.165c-22.481 0-31.481 13.647-31.481 31.849 0 18.184 13.5 31.84 31.481 31.84h310.316c22.481 0 31.473-13.647 31.473-31.84 0-18.202-13.5-31.84-31.481-31.84z`})],-1),r.wbStatus.runningCount>0?(Z(),X(`span`,{key:0,class:`wb-running-badge`,title:r.$t(`@ACTBAR:有任务正在执行`),"aria-hidden":`true`},z(r.wbStatus.runningCount>99?`99+`:r.wbStatus.runningCount),9,sp)):R(`v-if`,!0)],10,op)]),_:1},8,[`content`]),R(` 系统监控 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:系统监控`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`monitor`}]),onClick:t[6]||=e=>r.select(`monitor`),"aria-label":r.$t(`@ACTBAR:系统监控`),"aria-pressed":r.props.activeView===`monitor`},[R(` activity.svg: 心跳/波形监控图标 `),t[14]||=U(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{d:`M22 12h-4l-3 9L9 3l-3 9H2`})],-1)],10,cp)]),_:1},8,[`content`]),R(` 思维导图 `),o(r.ElTooltip,{content:r.$t(`@ACTBAR:思维导图`),placement:`right`,"show-after":300},{default:I(()=>[U(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`mindmap`}]),onClick:t[7]||=e=>r.select(`mindmap`),"aria-label":r.$t(`@ACTBAR:思维导图`),"aria-pressed":r.props.activeView===`mindmap`},[R(` mindmap.svg: 中心节点 + 四向辐射的节点拓扑 `),t[15]||=U(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[U(`circle`,{cx:`12`,cy:`12`,r:`2.2`}),U(`circle`,{cx:`4.5`,cy:`5`,r:`1.8`}),U(`circle`,{cx:`19.5`,cy:`5`,r:`1.8`}),U(`circle`,{cx:`4.5`,cy:`19`,r:`1.8`}),U(`circle`,{cx:`19.5`,cy:`19`,r:`1.8`}),U(`line`,{x1:`10.3`,y1:`10.6`,x2:`6`,y2:`6.2`}),U(`line`,{x1:`13.7`,y1:`10.6`,x2:`18`,y2:`6.2`}),U(`line`,{x1:`10.3`,y1:`13.4`,x2:`6`,y2:`17.8`}),U(`line`,{x1:`13.7`,y1:`13.4`,x2:`18`,y2:`17.8`})],-1)],10,lp)]),_:1},8,[`content`])])}var dp=$(Xf,[[`render`,up],[`__scopeId`,`data-v-d652a324`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/ActivityBar.vue`]]),fp=zt(),pp=15e3,mp=ft(`instances`,()=>{let e=J([]),t=J(null),n=J(null),r=J(null),i=G(()=>t.value==null?null:e.value.find(e=>e.pid===t.value)??null),a=G(()=>t.value==null?e.value:e.value.filter(e=>e.pid!==t.value));async function o(){try{let n=await fetch(`/api/instances`);if(!n.ok)throw Error(`HTTP ${n.status}`);let i=await n.json();i&&`success`in i&&i.success?(e.value=i.instances,t.value=i.currentInstanceId,r.value=null):r.value=`error`in i&&i.error||`未知错误`}catch(e){r.value=e.message}}function s(){if(n.value)return;let t=yt(`http://localhost:${fp}`,{transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1e3,reconnectionDelayMax:1e4,reconnectionAttempts:1/0,timeout:2e4,forceNew:!0});n.value=t,t.on(`instances_changed`,t=>{t&&Array.isArray(t.instances)&&(e.value=t.instances)})}function c(){if(n.value){try{n.value.off(`instances_changed`)}catch{}try{n.value.disconnect()}catch{}n.value=null}}function l(){o(),s(),d(),document.addEventListener(`visibilitychange`,p)}function u(){c(),f(),document.removeEventListener(`visibilitychange`,p)}function d(){f(),!(typeof document<`u`&&document.hidden)&&(m=window.setInterval(()=>{o()},pp))}function f(){m!=null&&(window.clearInterval(m),m=null)}function p(){document.hidden?f():(o(),d())}let m=null;return{list:e,currentInstanceId:t,currentInstance:i,otherInstances:a,lastError:r,refresh:o,start:l,stop:u}}),hp=j({__name:`InstanceSwitcher`,setup(e,{expose:t}){t();let n=mp(),i=G(()=>n.list.length>0),a=G(()=>n.list.length),o=G(()=>`${a.value} ${Q(`@INSSW:个实例`)}`);function s(e){e&&window.open(`http://localhost:${e}`,`_blank`,`noopener`)}function c(e){return Ot(e.projectPath)||e.projectName}let l={store:n,hasAny:i,count:a,triggerText:o,handleOpen:s,pathSubtitle:c,get ElDropdown(){return re},get ElDropdownMenu(){return r},get ElDropdownItem(){return Re},get ElIcon(){return V},get ElTag(){return C},get $t(){return Q}};return Object.defineProperty(l,`__isScriptSetup`,{enumerable:!1,value:!0}),l}}),gp={class:`instance-switcher`},_p={class:`switcher-text`},vp={class:`instance-row instance-row--current`},yp={class:`instance-row-main`},bp={class:`instance-name`},xp={class:`instance-row-sub`},Sp={class:`instance-path`},Cp={class:`instance-row`},wp={class:`instance-row-main`},Tp={class:`instance-name`},Ep={class:`instance-row-sub`},Dp={class:`instance-path`},Op={class:`instance-empty`};function kp(e,t,n,r,i,a){return r.hasAny?(Z(),H(r.ElDropdown,{key:0,trigger:`click`,placement:`bottom-end`,onCommand:r.handleOpen},{dropdown:I(()=>[o(r.ElDropdownMenu,{class:`instance-dropdown-menu`},{default:I(()=>[R(` 当前实例(不可点击) `),r.store.currentInstance?(Z(),H(r.ElDropdownItem,{key:0,disabled:``},{default:I(()=>[U(`div`,vp,[U(`div`,yp,[U(`span`,bp,z(r.store.currentInstance.projectName),1),o(r.ElTag,{size:`small`,type:`primary`,effect:`light`,class:`instance-tag`},{default:I(()=>[k(z(r.$t(`@INSSW:当前`)),1)]),_:1})]),U(`div`,xp,[o(r.ElTag,{size:`small`,effect:`plain`,class:`port-badge`},{default:I(()=>[k(`:`+z(r.store.currentInstance.port),1)]),_:1}),U(`span`,Sp,z(r.pathSubtitle(r.store.currentInstance)),1)])])]),_:1})):R(`v-if`,!0),R(` 其他运行中的实例 `),(Z(!0),X(Y,null,F(r.store.otherInstances,e=>(Z(),H(r.ElDropdownItem,{key:e.pid,command:e.port},{default:I(()=>[U(`div`,Cp,[U(`div`,wp,[U(`span`,Tp,z(e.projectName),1),o(r.ElTag,{size:`small`,effect:`plain`,class:`port-badge`},{default:I(()=>[k(`:`+z(e.port),1)]),_:2},1024)]),U(`div`,Ep,[U(`span`,Dp,z(r.pathSubtitle(e)),1)])])]),_:2},1032,[`command`]))),128)),R(` 空状态 `),r.store.otherInstances.length===0?(Z(),H(r.ElDropdownItem,{key:1,disabled:``},{default:I(()=>[U(`span`,Op,z(r.$t(`@INSSW:无其他运行中的实例`)),1)]),_:1})):R(`v-if`,!0)]),_:1})]),default:I(()=>[U(`span`,gp,[o(r.ElIcon,{class:`switcher-icon`},{default:I(()=>[R(` apps/layers 图标 `),t[0]||=U(`svg`,{viewBox:`0 0 24 24`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[U(`rect`,{x:`3`,y:`3`,width:`7`,height:`7`,rx:`1`}),U(`rect`,{x:`14`,y:`3`,width:`7`,height:`7`,rx:`1`}),U(`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`}),U(`rect`,{x:`14`,y:`14`,width:`7`,height:`7`,rx:`1`})],-1)]),_:1}),U(`span`,_p,z(r.triggerText),1)])]),_:1})):R(`v-if`,!0)}var Ap=$(hp,[[`render`,kp],[`__scopeId`,`data-v-8a24f415`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/InstanceSwitcher.vue`]]),jp=J(!0),Mp=J(null),Np=J(0),Pp=J(!1),Fp=!1,Ip=null,Lp=null,Rp=null;function zp(e,t){return t&&!t.ok?`HTTP ${t.status} ${t.statusText||``}`.trim():e instanceof Error?e.name===`TypeError`&&/fetch/i.test(e.message)?Q(`@NET:网络连接失败`):e.message:String(e)}var Bp=J(null);async function Vp(){let e=Bp.value;if(!e||!Ip)return!1;try{let t=await Ip(e.url,e.init);return t.ok?(jp.value=!0,Mp.value=null,Pp.value=!1,!0):(Mp.value=zp(null,t),!1)}catch(e){return Mp.value=zp(e),!1}}function Hp(){Pp.value=!0}function Up(){Fp||typeof window>`u`||(Ip=window.fetch.bind(window),window.fetch=async function(e,t){let n=typeof e==`string`?e:e.toString();try{let r=await Ip(e,t);return!r.ok&&r.status>=500?(jp.value=!1,Mp.value=zp(null,r),Np.value=Date.now(),Bp.value={url:n,init:t}):r.ok&&(jp.value||=!0,Mp.value=null,Np.value=0),r}catch(e){throw jp.value=!1,Mp.value=zp(e),Np.value=Date.now(),Bp.value={url:n,init:t},e}},Lp=()=>{jp.value=!0},Rp=()=>{jp.value=!1,Mp.value=Q(`@NET:浏览器报告离线`),Np.value=Date.now()},window.addEventListener(`online`,Lp),window.addEventListener(`offline`,Rp),Fp=!0)}function Wp(){Fp&&(Ip&&(window.fetch=Ip),Lp&&window.removeEventListener(`online`,Lp),Rp&&window.removeEventListener(`offline`,Rp),Fp=!1,Ip=null,Lp=null,Rp=null)}function Gp(){return{isOnline:Ke(jp),lastError:Ke(Mp),lastErrorAt:Ke(Np),isDismissed:Ke(Pp),lastFailedRequest:Ke(Bp),start:Up,stop:Wp,retryLast:Vp,dismiss:Hp}}var Kp=280,qp=j({__name:`AppErrorBanner`,setup(e,{expose:t}){t();let{isOnline:n,lastError:r,lastErrorAt:i,isDismissed:a,retryLast:o,dismiss:s}=Gp(),c=G(()=>!n.value&&!a.value),l=J(!1),u=J(!1);b(c,(e,t)=>{e?(u.value=!1,l.value=!0):l.value&&t!==void 0&&(u.value=!0,window.setTimeout(()=>{l.value=!1,u.value=!1},Kp))},{immediate:!0});let d=J(Q(`@NET:刚刚`)),p=null;function m(){let e=i.value;if(!e){d.value=Q(`@NET:刚刚`);return}let t=Math.max(0,Date.now()-e);t<1e3?d.value=Q(`@NET:刚刚`):t<6e4?d.value=`${Math.floor(t/1e3)}s`:d.value=`${Math.floor(t/6e4)}m`}function h(){p||=(m(),setInterval(m,1e3))}function g(){p&&=(clearInterval(p),null)}b(c,e=>{e?h():g()}),f(g);let _={isOnline:n,lastError:r,lastErrorAt:i,isDismissed:a,retryLast:o,dismiss:s,shouldShow:c,visible:l,isLeaving:u,LEAVE_ANIMATION_MS:Kp,relativeTime:d,get relativeTimer(){return p},set relativeTimer(e){p=e},updateRelativeTime:m,startRelativeTimer:h,stopRelativeTimer:g,get $t(){return Q},get WarningFilled(){return ye},get Refresh(){return y},get Close(){return Ce}};return Object.defineProperty(_,`__isScriptSetup`,{enumerable:!1,value:!0}),_}}),Jp={class:`banner-left`},Yp={class:`banner-text`},Xp={class:`banner-title`},Zp={key:0,class:`banner-detail`},Qp={"data-net-error-time":``},$p={class:`banner-actions`},em=[`aria-label`];function tm(e,t,n,r,i,a){let s=V;return r.visible?(Z(),X(`div`,{key:0,class:K([`app-error-banner`,{"is-leaving":r.isLeaving}]),role:`alert`,"aria-live":`assertive`},[U(`div`,Jp,[o(s,{class:`banner-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.WarningFilled)]),_:1}),U(`div`,Yp,[U(`span`,Xp,z(r.$t(`@NET:无法连接到本地服务,请检查后端进程`)),1),r.lastError?(Z(),X(`span`,Zp,[k(z(r.lastError)+` · `,1),U(`span`,Qp,z(r.relativeTime),1)])):R(`v-if`,!0)])]),U(`div`,$p,[U(`button`,{type:`button`,class:`banner-btn banner-btn--retry`,onClick:t[0]||=(...e)=>r.retryLast&&r.retryLast(...e)},[o(s,{class:`banner-btn-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Refresh)]),_:1}),U(`span`,null,z(r.$t(`@NET:重试`)),1)]),U(`button`,{type:`button`,class:`banner-btn banner-btn--close`,"aria-label":r.$t(`@NET:关闭`),onClick:t[1]||=(...e)=>r.dismiss&&r.dismiss(...e)},[o(s,{class:`banner-btn-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Close)]),_:1})],8,em)])],2)):R(`v-if`,!0)}var nm=$(qp,[[`render`,tm],[`__scopeId`,`data-v-4f5b8eef`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/AppErrorBanner.vue`]]),rm=j({__name:`RecentProjectsList`,props:{variant:{type:String,required:!1,default:`inline`}},setup(e,{expose:t}){t();let n=J([]),r=J(!1),i=J(``);function a(e){let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?{base:e,parent:``}:{base:t[t.length-1],parent:t.slice(0,-1).join(`/`)}}let o=G(()=>{let e=i.value.trim().toLowerCase();return e?n.value.filter(t=>t.path.toLowerCase().includes(e)):n.value}),s=G(()=>o.value.map(e=>{let{base:t}=a(e.path);return{...e,displayBase:t}}));async function c(){r.value=!0;try{let e=await(await fetch(`/api/recent_directories`,{cache:`no-store`})).json();e&&Array.isArray(e.directories)?n.value=e.directories:n.value=[]}catch{n.value=[]}finally{r.value=!1}}async function l(e){if(e)try{let t=await(await fetch(`/api/open-new-tab-gui`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})})).json();t?.success||W.error(t?.error||Q(`@13D1C:打开失败`))}catch(e){W.error(`${Q(`@13D1C:打开失败`)}: ${e.message}`)}}function u(e){if(!e.exists){W.warning(Q(`@13D1C:目录不存在,无法打开`));return}l(e.path)}ee(()=>{c()});let d={recentDirectories:n,isLoadingRecent:r,searchQuery:i,splitPath:a,filteredDirectories:o,displayItems:s,loadRecentDirectories:c,openRecentDirInNewTab:l,onRecentDirClick:u,get Folder(){return nt},get Loading(){return ue},get Search(){return ct},get $t(){return Q}};return Object.defineProperty(d,`__isScriptSetup`,{enumerable:!1,value:!0}),d}}),im={class:`recent-projects__head`},am={class:`recent-projects__title`},om={class:`recent-projects__hint`},sm={key:0,class:`recent-projects__search`},cm=[`placeholder`,`aria-label`],lm=[`aria-label`],um={key:1,class:`recent-projects__empty`},dm={key:2,class:`recent-projects__empty`},fm={key:3,class:`recent-projects__empty`},pm=[`aria-label`],mm=[`title`,`aria-label`,`onClick`],hm=[`title`],gm={class:`recent-projects__name-base`},_m={class:`recent-projects__name-parent`},vm={key:0,class:`recent-projects__tag`};function ym(e,t,n,r,i,a){let s=V;return Z(),X(`div`,{class:K([`recent-projects`,{"recent-projects--fullpage":n.variant===`fullpage`}])},[U(`div`,im,[U(`span`,am,z(r.$t(`@13D1C:最近项目`)),1),U(`span`,om,z(r.$t(`@13D1C:点击在新标签页打开`)),1)]),R(` 搜索框:仅 fullpage 模式(非 Git 仓库右侧整列)展示,inline 紧凑版不渲染避免占用空间 `),n.variant===`fullpage`?(Z(),X(`div`,sm,[o(s,{class:`recent-projects__search-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Search)]),_:1}),L(U(`input`,{"onUpdate:modelValue":t[0]||=e=>r.searchQuery=e,type:`text`,class:`recent-projects__search-input`,placeholder:r.$t(`@13D1C:搜索最近项目...`),"aria-label":r.$t(`@13D1C:搜索最近项目`)},null,8,cm),[[Ge,r.searchQuery]]),r.searchQuery?(Z(),X(`button`,{key:0,type:`button`,class:`recent-projects__search-clear`,"aria-label":r.$t(`@13D1C:清空搜索`),onClick:t[1]||=e=>r.searchQuery=``},`×`,8,lm)):R(`v-if`,!0)])):R(`v-if`,!0),r.isLoadingRecent&&r.recentDirectories.length===0?(Z(),X(`div`,um,[o(s,null,{default:I(()=>[o(r.Loading)]),_:1}),U(`span`,null,z(r.$t(`@13D1C:加载中...`)),1)])):r.recentDirectories.length===0?(Z(),X(`div`,dm,z(r.$t(`@13D1C:暂无最近项目`)),1)):r.filteredDirectories.length===0?(Z(),X(`div`,fm,z(r.$t(`@13D1C:没有匹配 "{q}" 的项目`,{q:r.searchQuery})),1)):(Z(),X(`ul`,{key:4,class:`recent-projects__list`,"aria-label":r.$t(`@13D1C:最近项目列表`)},[(Z(!0),X(Y,null,F(r.displayItems,e=>(Z(),X(`li`,{key:e.path,class:K([`recent-projects__item`,{"is-missing":!e.exists}])},[U(`button`,{type:`button`,class:`recent-projects__btn`,title:e.exists?e.path:r.$t(`@13D1C:目录不存在`),"aria-label":e.exists?r.$t(`@13D1C:在新标签页打开 {path}`,{path:e.path}):r.$t(`@13D1C:{path} (目录不存在)`,{path:e.path}),onClick:t=>r.onRecentDirClick(e)},[o(s,{class:`recent-projects__icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Folder)]),_:1}),U(`span`,{class:`recent-projects__name`,title:e.path},[U(`span`,gm,z(e.displayBase),1),U(`span`,_m,z(e.path),1)],8,hm),e.exists?R(`v-if`,!0):(Z(),X(`span`,vm,z(r.$t(`@13D1C:不存在`)),1))],8,mm)],2))),128))],8,pm))],2)}var bm=$(rm,[[`render`,ym],[`__scopeId`,`data-v-53d20908`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/RecentProjectsList.vue`]]),xm=j({__name:`ViewLoading`,props:{text:{type:String,required:!1,default:Q(`@2AEBA:加载中...`)}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,`__isScriptSetup`,{enumerable:!1,value:!0}),n}}),Sm={class:`view-loading`},Cm=[`aria-label`],wm={class:`view-loading__text`};function Tm(e,t,n,r,i,a){return Z(),X(`div`,Sm,[U(`div`,{class:`view-loading__spinner`,role:`status`,"aria-label":n.text},[t[0]||=U(`svg`,{viewBox:`0 0 24 24`,class:`view-loading__icon`},[U(`circle`,{class:`view-loading__track`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`}),U(`circle`,{class:`view-loading__arc`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`,"stroke-linecap":`round`})],-1),U(`span`,wm,z(n.text),1)],8,Cm)])}var Em=$(xm,[[`render`,Tm],[`__scopeId`,`data-v-d040c841`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/ViewLoading.vue`]]),Dm=j({__name:`TemplateManager`,props:{visible:{type:Boolean,required:!0},type:{type:String,required:!0},title:{type:String,required:!0},placeholder:{type:String,required:!1,default:Q(`@60CAC:输入新模板内容`)},editPlaceholder:{type:String,required:!1,default:Q(`@60CAC:编辑模板内容`)},emptyDescription:{type:String,required:!1,default:Q(`@60CAC:暂无保存的模板`)},showDefaultSection:{type:Boolean,required:!1,default:!1},showHelpText:{type:Boolean,required:!1,default:!1}},emits:[`update:visible`,`use-template`,`set-default`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=xt(),o=J(``),s=J(!1),c=J(``),l=J(-1),u=J(!1),d=J(!1),f=J(!1),p=G(()=>{switch(r.type){case`description`:return a.descriptionTemplates||[];case`scope`:return a.scopeTemplates||[];case`message`:return a.messageTemplates||[];case`command`:return a.commandTemplates||[];default:return[]}}),m=G(()=>r.type===`message`?a.defaultCommitMessage:``),h=G(()=>s.value?r.editPlaceholder:r.placeholder),g=G(()=>s.value?Q(`@60CAC:更新模板`):Q(`@60CAC:添加模板`)),_=G({get:()=>r.visible,set:e=>i(`update:visible`,e)});b(_,e=>{e||v()});function v(){o.value=``,s.value=!1,c.value=``,l.value=-1}async function y(){if(!o.value.trim()){W.warning(Q(`@60CAC:模板内容不能为空`));return}try{u.value=!0,s.value?await a.updateTemplate(c.value,o.value,r.type)&&v():await a.saveTemplate(o.value,r.type)&&(o.value=``)}catch(e){W.error(`${Q(`@60CAC:模板保存失败: `)}${e.message}`)}finally{u.value=!1}}function x(e){i(`use-template`,e),r.type!==`message`&&(_.value=!1)}function S(e,t){s.value=!0,c.value=e,o.value=e,l.value=t}function C(){v()}async function ee(e){try{f.value=!0,await a.pinTemplate(e,r.type)}catch(e){W.error(`${Q(`@60CAC:置顶模板失败: `)}${e.message}`)}finally{f.value=!1}}async function te(e){try{await a.deleteTemplate(e,r.type)}catch(e){W.error(`${Q(`@60CAC:模板删除失败: `)}${e.message}`)}}async function w(){if(!(r.type!==`message`||!o.value.trim()))try{d.value=!0,await a.saveDefaultMessage(o.value)&&i(`set-default`,o.value)}catch(e){W.error(`${Q(`@60CAC:设置默认提交信息失败: `)}${e.message}`)}finally{d.value=!1}}t({resetForm:v});let ne={props:r,emit:i,configStore:a,newTemplate:o,isEditing:s,originalTemplate:c,editingIndex:l,isSaving:u,isSavingDefault:d,isPinning:f,templates:p,defaultCommitMessage:m,currentPlaceholder:h,buttonText:g,dialogVisible:_,resetForm:v,saveTemplate:y,useTemplate:x,startEditTemplate:S,cancelEdit:C,pinTemplate:ee,deleteTemplate:te,setAsDefault:w,get $t(){return Q},get Edit(){return He},CommonDialog:vt};return Object.defineProperty(ne,`__isScriptSetup`,{enumerable:!1,value:!0}),ne}}),Om={class:`template-form`},km={class:`template-form-buttons`},Am={key:0,class:`template-list`},jm={key:1,class:`template-list-scroll`},Mm={class:`template-content`},Nm={class:`template-actions`},Pm={class:`templates-container`},Fm={class:`message-templates-list`},Im={class:`templates-scroll-area`},Lm={class:`template-content`},Rm={class:`template-actions`},zm={key:0,class:`current-default-message`},Bm={class:`default-message-content`},Vm={key:2,class:`message-help-text`};function Hm(e,t,n,r,i,a){let c=Ye,l=M,u=s,d=gt,f=be,p=h,m=C;return Z(),H(r.CommonDialog,{modelValue:r.dialogVisible,"onUpdate:modelValue":t[1]||=e=>r.dialogVisible=e,title:n.title,"close-on-click-modal":!1,"append-to-body":!0,"custom-class":n.type===`message`?`message-template-dialog`:`template-dialog`},{default:I(()=>[U(`div`,{class:K([`template-container`,{"message-template-container":n.type===`message`}])},[U(`div`,Om,[o(c,{modelValue:r.newTemplate,"onUpdate:modelValue":t[0]||=e=>r.newTemplate=e,placeholder:r.currentPlaceholder,class:`template-input`,clearable:``,onKeyup:Te(r.saveTemplate,[`enter`])},null,8,[`modelValue`,`placeholder`]),U(`div`,km,[r.isEditing?(Z(),H(l,{key:0,onClick:r.cancelEdit},{default:I(()=>[k(z(r.$t(`@60CAC:取消`)),1)]),_:1})):R(`v-if`,!0),o(l,{type:`primary`,onClick:r.saveTemplate,disabled:!r.newTemplate.trim()||r.isSaving,loading:r.isSaving},{default:I(()=>[k(z(r.buttonText),1)]),_:1},8,[`disabled`,`loading`]),R(` 默认提交信息设置的特殊按钮 `),n.type===`message`?(Z(),H(l,{key:1,type:`success`,onClick:r.setAsDefault,disabled:!r.newTemplate.trim()||r.isSavingDefault,loading:r.isSavingDefault,plain:``},{default:I(()=>[k(z(r.$t(`@60CAC:设为默认提交信息`)),1)]),_:1},8,[`disabled`,`loading`])):R(`v-if`,!0)])]),R(` 普通模板布局:固定标题,仅列表滚动 `),n.type===`message`?(Z(),X(Y,{key:1},[R(` 提交信息模板的特殊布局 `),U(`div`,Pm,[U(`div`,Fm,[U(`h3`,null,z(r.$t(`@60CAC:已保存模板`)),1),U(`div`,Im,[r.templates.length===0?(Z(),H(u,{key:0,description:n.emptyDescription},null,8,[`description`])):R(`v-if`,!0),(Z(!0),X(Y,null,F(r.templates,(e,t)=>(Z(),H(p,{key:t,class:`template-item`},{default:I(()=>[o(f,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:I(()=>[U(`div`,Lm,z(e),1),U(`div`,Rm,[o(l,{size:`small`,class:`pin-button`,onClick:t=>r.pinTemplate(e),loading:r.isPinning,disabled:t===0,title:`置顶`},{default:I(()=>[o(d,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:2},1032,[`onClick`,`loading`,`disabled`]),o(l,{type:`primary`,size:`small`,onClick:t=>r.useTemplate(e)},{default:I(()=>[k(z(r.$t(`@60CAC:使用`)),1)]),_:2},1032,[`onClick`]),o(l,{type:`warning`,size:`small`,icon:r.Edit,onClick:n=>r.startEditTemplate(e,Number(t))},{default:I(()=>[k(z(r.$t(`@60CAC:编辑`)),1)]),_:2},1032,[`icon`,`onClick`]),o(l,{type:`danger`,size:`small`,onClick:t=>r.deleteTemplate(e)},{default:I(()=>[k(z(r.$t(`@60CAC:删除`)),1)]),_:2},1032,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))])]),R(` 默认提交信息部分 `),n.showDefaultSection?(Z(),X(`div`,zm,[U(`h3`,null,z(r.$t(`@60CAC:当前默认提交信息`)),1),r.defaultCommitMessage?(Z(),H(p,{key:0,class:`default-message-card`},{default:I(()=>[U(`div`,Bm,z(r.defaultCommitMessage),1)]),_:1})):(Z(),H(u,{key:1,description:r.$t(`@60CAC:尚未设置默认提交信息`),"image-size":100},null,8,[`description`])),n.showHelpText?(Z(),X(`div`,Vm,[U(`h4`,null,z(r.$t(`@60CAC:关于默认提交信息`)),1),U(`p`,null,z(r.$t(`@60CAC:默认提交信息将在未输入提交信息时自动使用。`)),1),U(`p`,null,[k(z(r.$t(`@60CAC:你可以通过点击左侧模板的`)),1),o(m,{size:`small`,type:`primary`},{default:I(()=>[k(z(r.$t(`@60CAC:使用`)),1)]),_:1}),k(z(r.$t(`@60CAC:按钮先选择喜欢的模板,然后点击上方`)),1),o(m,{size:`small`,type:`success`},{default:I(()=>[k(z(r.$t(`@60CAC:设为默认提交信息`)),1)]),_:1}),k(z(r.$t(`@60CAC:按钮保存。`)),1)])])):R(`v-if`,!0)])):R(`v-if`,!0)])],2112)):(Z(),X(`div`,Am,[U(`h3`,null,z(r.$t(`@60CAC:已保存`))+` `+z(n.type===`description`?r.$t(`@60CAC:模板`):n.type===`scope`?r.$t(`@60CAC:作用域`):n.type===`command`?r.$t(`@CMD01:命令模板`):``),1),r.templates.length===0?(Z(),H(u,{key:0,description:n.emptyDescription},null,8,[`description`])):(Z(),X(`div`,jm,[(Z(!0),X(Y,null,F(r.templates,(e,t)=>(Z(),H(p,{key:t,class:`template-item`},{default:I(()=>[o(f,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:I(()=>[U(`div`,Mm,z(e),1),U(`div`,Nm,[o(l,{size:`small`,class:`pin-button`,onClick:t=>r.pinTemplate(e),loading:r.isPinning,disabled:t===0,title:`置顶`},{default:I(()=>[o(d,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:2},1032,[`onClick`,`loading`,`disabled`]),o(l,{type:`primary`,size:`small`,onClick:t=>r.useTemplate(e)},{default:I(()=>[k(z(r.$t(`@60CAC:使用`)),1)]),_:2},1032,[`onClick`]),o(l,{type:`warning`,size:`small`,icon:r.Edit,onClick:n=>r.startEditTemplate(e,Number(t))},{default:I(()=>[k(z(r.$t(`@60CAC:编辑`)),1)]),_:2},1032,[`icon`,`onClick`]),o(l,{type:`danger`,size:`small`,onClick:t=>r.deleteTemplate(e)},{default:I(()=>[k(z(r.$t(`@60CAC:删除`)),1)]),_:2},1032,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))]))]))],2)]),_:1},8,[`modelValue`,`title`,`custom-class`])}var Um=$(Dm,[[`render`,Hm],[`__scopeId`,`data-v-9f9265ce`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/TemplateManager.vue`]]),Wm=j({__name:`CustomCommandManager`,props:{visible:{type:Boolean,required:!0},fullscreen:{type:Boolean,required:!1}},emits:[`update:visible`,`execute-command`],setup(e,{expose:t,emit:n}){function r(e){let t=`${e}(copy)`,n=Array.isArray(ee.value)?ee.value:[],r=e=>n.some(t=>String(t?.name||``)===e);if(!r(t))return t;let i=2;for(;i<1e3;){let t=`${e}(copy${i})`;if(!r(t))return t;i++}return`${t}-${Date.now()}`}async function i(e){try{let t=_(e),n={name:r(String(e?.name||``).trim()||Q(`@CMD01:命令名称`)),description:String(e?.description||``),directory:String(e?.directory||``),command:String(e?.command||``),params:JSON.parse(JSON.stringify(t||[]))};(!n.directory||!n.directory.trim())&&(n.directory=s.currentDirectory||``),await s.saveCustomCommand(n)}catch(e){W.error(`${Q(`@CMD01:保存命令失败: `)}${e.message}`)}}let a=e,o=n,s=xt(),{currentLocale:l}=lt(bt()),u=G(()=>s.commandTemplates||[]),d=J(!1);function f(e,t){let n=Array.isArray(u.value)?u.value:[];t([...e?n.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):n.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function p(e){if(e.isSettings){d.value=!0,v.value.command=``;return}v.value.command=e.value}function m(e){let t=[],n=/{{\s*([a-zA-Z0-9_]+)\s*}}/g,r;for(;r=n.exec(e);){let e=String(r[1]||``).trim();e&&!t.includes(e)&&t.push(e)}return t}function h(e,t){return e.replace(/{{\s*([a-zA-Z0-9_]+)\s*}}/g,(e,n)=>{let r=String(n||``).trim();return Object.prototype.hasOwnProperty.call(t,r)?String(t[r]??``):``})}let g=j({name:`CmdParamForm`,props:{vars:{type:Array,required:!0},values:{type:Object,required:!0},params:{type:Array,required:!1}},setup(e){function t(t){let n=(Array.isArray(e.params)?e.params:[]).find(e=>String(e?.name||``)===t);return n?String(n?.description||``).trim():``}return()=>c(`div`,{class:`cmd-param-form`},e.vars.map(n=>c(`div`,{class:`cmd-param-row`},[c(`div`,{class:`cmd-param-label`},n),c(Ye,{modelValue:e.values[n],"onUpdate:modelValue":t=>{e.values[n]=String(t??``)},placeholder:Q(`@CMD01:请输入变量值`,{var:n}),clearable:!0}),t(n)?c(`div`,{class:`cmd-param-desc`},t(n)):null])))}});function _(e){let t=m(String(e?.command||``)),n=Array.isArray(e?.params)?e.params:[],r=new Map;for(let e of n){let t=String(e?.name||``).trim();t&&r.set(t,{name:t,defaultValue:String(e?.defaultValue??``),required:!!e?.required,description:String(e?.description??``)})}return t.map(e=>r.has(e)?r.get(e):{name:e,defaultValue:``,required:!1,description:``})}let v=J({name:``,description:``,directory:``,command:``,params:[]}),y=J(!1),x=J(``),C=J(!1),ee=G(()=>s.customCommands||[]),te=G({get:()=>a.visible,set:e=>o(`update:visible`,e)});b(te,e=>{e||w()});function w(){v.value={name:``,description:``,directory:``,command:``,params:[]},y.value=!1,x.value=``}b(()=>v.value.command,e=>{let t=m(String(e||``));if(!t.length){v.value.params=[];return}let n=Array.isArray(v.value.params)?v.value.params:[],r=new Map(n.map(e=>[String(e?.name||``),e]));v.value.params=t.map(e=>{let t=r.get(e);return{name:e,defaultValue:t?String(t.defaultValue??``):``,required:t?!!t.required:!1,description:t?String(t.description??``):``}})},{immediate:!0});async function ne(){if(!v.value.name.trim()){W.warning(Q(`@CMD01:命令名称不能为空`));return}if(!v.value.command.trim()){W.warning(Q(`@CMD01:命令内容不能为空`));return}try{C.value=!0,y.value?await s.updateCustomCommand(x.value,v.value)&&w():((!v.value.directory||!v.value.directory.trim())&&(v.value.directory=s.currentDirectory||``),await s.saveCustomCommand(v.value)&&w())}catch(e){W.error(`${Q(`@CMD01:命令保存失败: `)}${e.message}`)}finally{C.value=!1}}function T(e){y.value=!0,x.value=e.id||``,v.value={name:e.name,description:e.description||``,directory:e.directory,command:e.command,params:_(e)}}function re(){w()}async function ie(e){try{await Ze.confirm(Q(`@CMD01:确定要删除这个自定义命令吗?`),Q(`@CMD01:删除确认`),{confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`}),await s.deleteCustomCommand(e)}catch{}}async function ae(e){await s.pinCustomCommand(e)}async function E(e){let t=String(e?.command||``),n=m(t);if(!n.length){o(`execute-command`,e);return}let r=Se({});try{let i=_(e),a=new Map(i.map(e=>[String(e.name),e]));for(let e of n){let t=a.get(e);r[e]=t?String(t.defaultValue??``):``}await Ze({title:Q(`@CMD01:执行参数`),message:c(g,{vars:n,values:r,params:i}),showCancelButton:!0,confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),closeOnClickModal:!1,customClass:`cmd-param-message-box`});let s=(Array.isArray(e?.params)?e.params:[]).map(e=>({name:String(e?.name||``).trim(),required:!!e?.required})).filter(e=>e.name);for(let e of s){if(!e.required)continue;let t=r[e.name];if(t==null||String(t).trim()===``){W.warning(Q(`@CMD01:请输入必填变量: `,{var:e.name}));return}}let l=h(t,r);o(`execute-command`,{...e,command:l})}catch{}}let D=J(!1);function O(){D.value=!0}function oe(e){v.value.directory=e}function se(){v.value.directory=s.currentDirectory||``}let ce=J(null),k=J([]);function le(e){k.value=e}async function A(){let e=[...k.value],t=e.length;if(t)try{await Ze.confirm(Q(`@CMD01:确定要删除所选命令吗`,{count:t}),Q(`@CMD01:删除确认`),{confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`});let n=0;for(let t of e)t.id&&(await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t.id})})).json()).success&&n++;await s.loadConfig(!0),k.value=[],W.success(Q(`@CMD01:批量删除成功`,{count:n}))}catch{}}let ue=J(!1),M=J([]),N=J([]),de=J(null),P=J(!1),F=J(!1);async function fe(){try{P.value=!0,ue.value=!0,M.value=[],N.value=[];let e=await(await fetch(`/api/scan-npm-scripts`)).json();if(!e.success){W.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.error||``}`),ue.value=!1;return}let t=e.packages||[];if(t.length===0){W.warning(Q(`@CMD01:未找到任何NPM脚本`)),ue.value=!1;return}let n=new Set((Array.isArray(ee.value)?ee.value:[]).map(e=>String(e?.name||``).trim())),r=[];for(let e of t){let t=e.scripts||{};for(let i of Object.keys(t)){let t=`${e.name}: ${i}`;r.push({key:t,label:t,packageName:e.name,packagePath:e.path,scriptName:i,isDuplicate:n.has(t)})}}M.value=r}catch(e){W.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`),ue.value=!1}finally{P.value=!1}}function pe(e){N.value=e}async function me(){if(!N.value.length){W.warning(Q(`@CMD01:请至少选择一项`));return}try{F.value=!0;let e=new Set((Array.isArray(ee.value)?ee.value:[]).map(e=>String(e?.name||``).trim())),t=0,n=0;for(let r of N.value){if(e.has(r.key)){n++;continue}await s.saveCustomCommand({name:r.key,description:`npm run ${r.scriptName}`,directory:r.packagePath,command:`npm run ${r.scriptName}`})&&(e.add(r.key),t++)}W.success(Q(`@CMD01:NPM命令同步完成2`,{count:t,skip:n})),ue.value=!1,N.value=[]}catch(e){W.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`)}finally{F.value=!1}}t({resetForm:w});let I={buildDuplicateName:r,duplicateCommand:i,props:a,emit:o,configStore:s,currentLocale:l,commandTemplates:u,commandTemplateDialogVisible:d,queryCommandTemplates:f,handleCommandSelect:p,extractTemplateVariables:m,applyTemplateVariables:h,CmdParamForm:g,normalizeCommandParams:_,newCommand:v,isEditing:y,editingId:x,isSaving:C,commands:ee,dialogVisible:te,resetForm:w,saveCommand:ne,startEditCommand:T,cancelEdit:re,deleteCommand:ie,pinCommandToTop:ae,executeCommand:E,isBrowserDialogVisible:D,browseDirectory:O,onBrowserSelect:oe,useCurrentDirectory:se,commandTableRef:ce,selectedCommands:k,onSelectionChange:le,batchDeleteCommands:A,npmDialogVisible:ue,npmScriptItems:M,npmSelected:N,npmTableRef:de,isLoadingNpm:P,isDoingSyncNpm:F,syncNpmCommands:fe,onNpmSelectionChange:pe,doSyncSelectedNpm:me,get $t(){return Q},get ElInput(){return Ye},get Edit(){return He},get Delete(){return Ee},get VideoPlay(){return _e},get Folder(){return nt},get CopyDocument(){return $e},get Top(){return S},IconButton:_t,TemplateManager:Um,get FilePicker(){return dt}};return Object.defineProperty(I,`__isScriptSetup`,{enumerable:!1,value:!0}),I}}),Gm=t({default:()=>Mh}),Km={class:`command-container`},qm={class:`left-panel`},Jm={class:`command-form`},Ym={class:`form-header`},Xm={class:`left-title`},Zm={class:`form-content`},Qm={class:`form-row`},$m={class:`form-field`},eh={class:`required`},th={class:`form-row`},nh={class:`form-field`},rh={class:`form-row`},ih={class:`form-field`},ah={class:`directory-input-group`},oh={class:`form-row`},sh={class:`form-field`},ch={class:`required`},lh={key:0,class:`command-params`},uh={class:`params-title`},dh={class:`form-actions`},fh={class:`right-panel`},ph={class:`command-list`},mh={class:`list-header`},hh={class:`list-header-left`},gh={class:`list-title`},_h={key:0,class:`selection-count`},vh={class:`list-header-actions`},yh={class:`list-content`},bh={key:1,class:`command-list-scroll`},xh={class:`name-cell`},Sh={class:`name-text`},Ch={key:0,class:`description-text`},wh={class:`command-text`},Th={class:`directory-text`},Eh={class:`action-buttons`},Dh={class:`npm-dialog-body`},Oh={class:`command-text`},kh={class:`npm-dialog-footer`},Ah={class:`npm-selected-count`};function jh(e,t,n,r,i,a){let c=M,l=V,u=fe,d=Ve,f=Fe,p=qe,m=s,h=w,g=C,_=xe;return Z(),X(Y,null,[o(h,{modelValue:r.dialogVisible,"onUpdate:modelValue":t[4]||=e=>r.dialogVisible=e,title:r.$t(`@CMD01:自定义命令管理`),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,fullscreen:!!n.fullscreen,width:n.fullscreen?`100vw`:`90%`,top:n.fullscreen?`0`:`50px`,"z-index":3e6,"modal-class":`custom-command-overlay`,class:`custom-command-dialog`},{default:I(()=>[U(`div`,Km,[U(`div`,qm,[U(`div`,Jm,[U(`div`,Ym,[U(`div`,Xm,z(r.isEditing?r.$t(`@CMD01:编辑命令`):r.$t(`@CMD01:添加命令`)),1)]),U(`div`,Zm,[R(` 命令名称 `),U(`div`,Qm,[U(`div`,$m,[U(`label`,eh,z(r.$t(`@CMD01:命令名称`)),1),o(r.ElInput,{modelValue:r.newCommand.name,"onUpdate:modelValue":t[0]||=e=>r.newCommand.name=e,placeholder:r.$t(`@CMD01:输入命令名称,例如: 拉取代码`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`])])]),R(` 描述 `),U(`div`,th,[U(`div`,nh,[U(`label`,null,z(r.$t(`@CMD01:描述`)),1),o(r.ElInput,{modelValue:r.newCommand.description,"onUpdate:modelValue":t[1]||=e=>r.newCommand.description=e,placeholder:r.$t(`@CMD01:可选,简要描述命令用途`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`])])]),R(` 执行目录 `),U(`div`,rh,[U(`div`,ih,[U(`label`,null,z(r.$t(`@CMD01:执行目录`)),1),U(`div`,ah,[o(r.ElInput,{modelValue:r.newCommand.directory,"onUpdate:modelValue":t[2]||=e=>r.newCommand.directory=e,placeholder:r.$t(`@CMD01:留空使用当前目录`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`]),o(c,{onClick:r.useCurrentDirectory,type:`primary`,plain:``,size:`default`},{default:I(()=>[k(z(r.$t(`@CMD01:使用当前目录`)),1)]),_:1}),o(c,{onClick:r.browseDirectory,type:`info`,plain:``,size:`default`},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Folder)]),_:1}),k(` `+z(r.$t(`@CMD01:选择目录`)),1)]),_:1})])])]),R(` 命令 `),U(`div`,oh,[U(`div`,sh,[U(`label`,ch,z(r.$t(`@CMD01:命令`)),1),o(u,{modelValue:r.newCommand.command,"onUpdate:modelValue":t[3]||=e=>r.newCommand.command=e,"fetch-suggestions":r.queryCommandTemplates,placeholder:r.$t(`@CMD01:输入要执行的命令,例如: npm run build`),clearable:``,size:`large`,"trigger-on-focus":``,"popper-class":`custom-command-popper`,onSelect:r.handleCommandSelect,onKeyup:Te(r.saveCommand,[`enter`]),style:{width:`100%`}},null,8,[`modelValue`,`placeholder`]),r.newCommand.params&&r.newCommand.params.length>0?(Z(),X(`div`,lh,[U(`div`,uh,z(r.$t(`@CMD01:变量配置`)),1),o(p,{data:r.newCommand.params,style:{width:`100%`},size:`small`,stripe:``},{default:I(()=>[o(d,{prop:`name`,label:r.$t(`@CMD01:变量名`),width:`160`},null,8,[`label`]),o(d,{label:r.$t(`@CMD01:默认值`),"min-width":`180`},{default:I(e=>[o(r.ElInput,{modelValue:e.row.defaultValue,"onUpdate:modelValue":t=>e.row.defaultValue=t,size:`small`,clearable:``,placeholder:r.$t(`@CMD01:默认值`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),_:1},8,[`label`]),o(d,{label:r.$t(`@CMD01:必填`),width:`90`,align:`center`},{default:I(e=>[o(f,{modelValue:e.row.required,"onUpdate:modelValue":t=>e.row.required=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1},8,[`label`]),o(d,{label:r.$t(`@CMD01:描述`),"min-width":`220`},{default:I(e=>[o(r.ElInput,{modelValue:e.row.description,"onUpdate:modelValue":t=>e.row.description=t,size:`small`,clearable:``,placeholder:r.$t(`@CMD01:描述`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`data`])])):R(`v-if`,!0)])]),R(` 按钮区域 `),U(`div`,dh,[r.isEditing?(Z(),H(c,{key:0,onClick:r.cancelEdit,size:`large`},{default:I(()=>[k(z(r.$t(`@CMD01:取消`)),1)]),_:1})):R(`v-if`,!0),o(c,{type:`primary`,onClick:r.saveCommand,disabled:!r.newCommand.name.trim()||!r.newCommand.command.trim()||r.isSaving,loading:r.isSaving,size:`large`,class:`save-btn`},{default:I(()=>[k(z(r.isEditing?r.$t(`@CMD01:更新命令`):r.$t(`@CMD01:添加命令`)),1)]),_:1},8,[`disabled`,`loading`])])])])]),U(`div`,fh,[R(` 命令列表 `),U(`div`,ph,[U(`div`,mh,[U(`div`,hh,[U(`h3`,gh,z(r.$t(`@CMD01:已保存的命令`)),1),r.selectedCommands.length>0?(Z(),X(`span`,_h,z(r.$t(`@CMD01:已选择`,{count:r.selectedCommands.length})),1)):R(`v-if`,!0)]),U(`div`,vh,[r.selectedCommands.length>0?(Z(),H(c,{key:0,type:`danger`,plain:``,size:`small`,onClick:r.batchDeleteCommands},{default:I(()=>[k(z(r.$t(`@CMD01:批量删除`)),1)]),_:1})):R(`v-if`,!0),o(c,{type:`primary`,plain:``,size:`small`,loading:r.isLoadingNpm,onClick:r.syncNpmCommands},{default:I(()=>[k(z(r.$t(`@CMD01:同步NPM命令`)),1)]),_:1},8,[`loading`])])]),U(`div`,yh,[r.commands.length===0?(Z(),H(m,{key:0,description:r.$t(`@CMD01:暂无保存的命令`)},null,8,[`description`])):(Z(),X(`div`,bh,[o(p,{ref:`commandTableRef`,data:r.commands,style:{width:`100%`,height:`100%`},stripe:``,onSelectionChange:r.onSelectionChange},{default:I(()=>[o(d,{type:`selection`,width:`40`}),o(d,{prop:`name`,label:r.$t(`@CMD01:命令名称`),"min-width":`80`},{default:I(e=>[U(`div`,xh,[U(`span`,Sh,z(e.row.name),1),e.row.description?(Z(),X(`span`,Ch,z(e.row.description),1)):R(`v-if`,!0)])]),_:1},8,[`label`]),o(d,{prop:`command`,label:r.$t(`@CMD01:命令`),"min-width":`200`},{default:I(e=>[U(`code`,wh,z(e.row.command),1)]),_:1},8,[`label`]),o(d,{prop:`directory`,label:r.$t(`@CMD01:执行目录`),"min-width":`200`},{default:I(e=>[U(`span`,Th,z(e.row.directory),1)]),_:1},8,[`label`]),o(d,{label:r.$t(`@CMD01:操作`),width:`138`,fixed:`right`},{default:I(e=>[U(`div`,Eh,[o(r.IconButton,{tooltip:r.$t(`@CMD01:置顶`),size:`small`,"hover-color":`var(--color-info)`,onClick:t=>r.pinCommandToTop(e.row.id)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Top)]),_:1})]),_:2},1032,[`tooltip`,`onClick`]),o(r.IconButton,{tooltip:r.$t(`@CMD01:执行命令`),size:`small`,"hover-color":`var(--color-success)`,onClick:t=>r.executeCommand(e.row)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.VideoPlay)]),_:1})]),_:2},1032,[`tooltip`,`onClick`]),o(r.IconButton,{tooltip:r.$t(`@CMD01:编辑`),size:`small`,"hover-color":`var(--color-primary)`,onClick:t=>r.startEditCommand(e.row)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Edit)]),_:1})]),_:2},1032,[`tooltip`,`onClick`]),o(r.IconButton,{tooltip:r.$t(`@CMD01:复制命令`),size:`small`,"hover-color":`var(--color-warning)`,onClick:t=>r.duplicateCommand(e.row)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.CopyDocument)]),_:1})]),_:2},1032,[`tooltip`,`onClick`]),o(r.IconButton,{tooltip:r.$t(`@CMD01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:t=>r.deleteCommand(e.row.id)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Delete)]),_:1})]),_:2},1032,[`tooltip`,`onClick`])])]),_:1},8,[`label`])]),_:1},8,[`data`])]))])])])])]),_:1},8,[`modelValue`,`title`,`fullscreen`,`width`,`top`]),o(r.TemplateManager,{visible:r.commandTemplateDialogVisible,"onUpdate:visible":t[5]||=e=>r.commandTemplateDialogVisible=e,type:`command`,title:r.$t(`@CMD01:命令模板管理`),placeholder:r.$t(`@CMD01:输入命令模板,例如: npm run build`),"edit-placeholder":r.$t(`@CMD01:编辑命令模板`),"empty-description":r.$t(`@CMD01:暂无保存的命令模板`)},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),R(` 目录浏览器弹窗 `),o(r.FilePicker,{visible:r.isBrowserDialogVisible,locale:r.currentLocale,onClose:t[6]||=e=>r.isBrowserDialogVisible=!1,onConfirm:t[7]||=e=>{r.onBrowserSelect(e[0]),r.isBrowserDialogVisible=!1}},null,8,[`visible`,`locale`]),R(` NPM 命令选择弹窗 `),o(h,{modelValue:r.npmDialogVisible,"onUpdate:modelValue":t[9]||=e=>r.npmDialogVisible=e,title:r.$t(`@CMD01:选择NPM命令`),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,width:`680px`,"z-index":3000010,"modal-class":`npm-sync-overlay`,class:`npm-sync-dialog`},{footer:I(()=>[U(`div`,kh,[U(`span`,Ah,z(r.$t(`@CMD01:已选择`,{count:r.npmSelected.length})),1),o(c,{onClick:t[8]||=e=>r.npmDialogVisible=!1},{default:I(()=>[k(z(r.$t(`@CMD01:取消`)),1)]),_:1}),o(c,{type:`primary`,loading:r.isDoingSyncNpm,disabled:r.npmSelected.length===0,onClick:r.doSyncSelectedNpm},{default:I(()=>[k(z(r.$t(`@CMD01:开始同步`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:I(()=>[L((Z(),X(`div`,Dh,[o(p,{ref:`npmTableRef`,data:r.npmScriptItems,style:{width:`100%`},"max-height":`420`,stripe:``,onSelectionChange:r.onNpmSelectionChange},{default:I(()=>[o(d,{type:`selection`,width:`44`,selectable:()=>!0}),o(d,{prop:`packageName`,label:r.$t(`@CMD01:包名`),"min-width":`140`},null,8,[`label`]),o(d,{prop:`scriptName`,label:r.$t(`@CMD01:脚本名`),"min-width":`120`},null,8,[`label`]),o(d,{prop:`scriptName`,label:r.$t(`@CMD01:命令`),"min-width":`160`},{default:I(e=>[U(`code`,Oh,`npm run `+z(e.row.scriptName),1)]),_:1},8,[`label`]),o(d,{label:r.$t(`@CMD01:状态`),width:`80`,align:`center`},{default:I(e=>[e.row.isDuplicate?(Z(),H(g,{key:0,type:`warning`,size:`small`},{default:I(()=>[k(z(r.$t(`@CMD01:已存在`)),1)]),_:1})):(Z(),H(g,{key:1,type:`success`,size:`small`},{default:I(()=>[k(z(r.$t(`@CMD01:新增`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`])])),[[_,r.isLoadingNpm]])]),_:1},8,[`modelValue`,`title`])],64)}var Mh=$(Wm,[[`render`,jh],[`__scopeId`,`data-v-c7d52d8a`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/CustomCommandManager.vue`]]);function Nh(e){if(!e)return[];let t=/\{\{(\w+)\}\}/g,n=[],r;for(;(r=t.exec(e))!==null;){let e=r[1];n.includes(e)||n.push(e)}return n}function Ph(e,t){if(!e)return``;let n=e;for(let[e,r]of Object.entries(t)){let t=RegExp(`\\{\\{${e}\\}\\}`,`g`);n=n.replace(t,r||``)}return n}var Fh=120,Ih=600,Lh=16,Rh=j({__name:`CustomCommandsPanel`,setup(e,{expose:t}){t();let n=J(!1);function r(){n.value=!n.value}let i=J(!1);function a(){i.value=!0}let o=xt(),s=G(()=>o.customCommands||[]),c=J({}),l=J(240),u=J(!1),d=J(0),f=J(0);function p(e){u.value=!0,d.value=e.clientY,f.value=l.value,document.addEventListener(`mousemove`,m),document.addEventListener(`mouseup`,h),e.preventDefault()}function m(e){if(!u.value)return;let t=d.value-e.clientY;l.value=Math.max(Fh,Math.min(Ih,f.value+t))}function h(){u.value=!1,document.removeEventListener(`mousemove`,m),document.removeEventListener(`mouseup`,h)}function g(e){e.key===`ArrowUp`?(e.preventDefault(),l.value=Math.min(Ih,l.value+Lh)):e.key===`ArrowDown`?(e.preventDefault(),l.value=Math.max(Fh,l.value-Lh)):e.key===`Home`?(e.preventDefault(),l.value=Ih):e.key===`End`&&(e.preventDefault(),l.value=Fh)}async function _(e){let t=String(e.id||e.name);if(c.value[t])return;let n=e.directory||o.currentDirectory||``,r={};if(Array.isArray(e.params))for(let t of e.params)r[t.name]=t.defaultValue||``;let i=Ph(e.command,r);c.value[t]=!0;try{let t=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:i,workingDirectory:n})})).json();t?.success?(W.success(Q(`@CMDPANEL:已在新终端中执行`,{name:e.name})),window.dispatchEvent(new Event(`zen-gitsync:terminal-session-created`))):W.error(t?.error||Q(`@CMDPANEL:执行失败`))}catch(e){W.error(e?.message||Q(`@CMDPANEL:执行失败`))}finally{c.value[t]=!1}}let v={collapsed:n,toggleCollapsed:r,managerVisible:i,openManager:a,configStore:o,commands:s,isRunning:c,panelHeight:l,isResizing:u,startY:d,startHeight:f,MIN_PANEL_HEIGHT:Fh,MAX_PANEL_HEIGHT:Ih,KEY_NUDGE_PX:Lh,startResize:p,handleResize:m,stopResize:h,onResizeKeydown:g,runCommand:_,get $t(){return Q},IconButton:_t,SvgIcon:gt,CustomCommandManager:Mh};return Object.defineProperty(v,`__isScriptSetup`,{enumerable:!1,value:!0}),v}}),zh={class:`custom-commands-panel`},Bh={class:`header-left`},Vh={class:`panel-title`},Hh=[`aria-valuenow`,`aria-label`],Uh={key:0,class:`empty-container`},Wh={class:`empty-text`},Gh=[`onClick`],Kh={class:`command-left`},qh={key:0,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Jh={key:1,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Yh={class:`command-info`},Xh={class:`command-name`},Zh={key:0,class:`command-desc`},Qh={key:1,class:`command-desc command-text`};function $h(e,t,n,r,i,a){let s=V,c=M;return Z(),X(Y,null,[U(`div`,zh,[U(`div`,{class:`panel-header accordion-header`,onClick:r.toggleCollapsed},[U(`div`,Bh,[o(s,{class:K([`accordion-chevron`,{"is-collapsed":r.collapsed}])},{default:I(()=>t[2]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{fill:`currentColor`,d:`M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z`})],-1)]),_:1},8,[`class`]),o(r.SvgIcon,{"icon-class":`command-list`,"class-name":`cmd-panel-icon`}),U(`span`,Vh,z(r.$t(`@CMDPANEL:自定义命令`)),1)]),U(`div`,{class:`header-right`,onClick:t[0]||=ze(()=>{},[`stop`])},[o(r.IconButton,{size:`small`,tooltip:r.$t(`@CMDPANEL:管理命令`),onClick:r.openManager},{default:I(()=>[o(s,null,{default:I(()=>t[3]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{fill:`currentColor`,d:`M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296L315.2 220.096c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384zm0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256z`})],-1)]),_:1})]),_:1},8,[`tooltip`])])]),R(` 拖拽调高度(展开时显示) OPT-4: 补 role/tabindex/aria-orientation + 键盘 nudge `),L(U(`div`,{class:`resize-handle`,role:`separator`,tabindex:`0`,"aria-orientation":`horizontal`,"aria-valuenow":r.panelHeight,"aria-valuemin":r.MIN_PANEL_HEIGHT,"aria-valuemax":r.MAX_PANEL_HEIGHT,"aria-label":r.$t(`@CMDPANEL:调整自定义命令面板高度(上下方向键)`),onMousedown:r.startResize,onKeydown:r.onResizeKeydown},null,40,Hh),[[q,!r.collapsed]]),!r.collapsed&&r.commands.length===0?(Z(),X(`div`,Uh,[t[4]||=U(`svg`,{class:`empty-icon`,viewBox:`0 0 1024 1024`,width:`40`,height:`40`},[U(`path`,{fill:`currentColor`,d:`M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32z`})],-1),U(`p`,Wh,z(r.$t(`@CMDPANEL:暂无自定义命令`)),1),o(c,{size:`small`,text:``,type:`primary`,onClick:r.openManager},{default:I(()=>[k(z(r.$t(`@CMDPANEL:去添加`)),1)]),_:1})])):r.collapsed?R(`v-if`,!0):(Z(),X(`div`,{key:1,class:`commands-list`,style:Pe({maxHeight:r.panelHeight+`px`})},[(Z(!0),X(Y,null,F(r.commands,e=>(Z(),X(`div`,{key:e.id||e.name,class:K([`command-item`,{running:r.isRunning[String(e.id||e.name)]}]),onClick:t=>r.runCommand(e)},[U(`div`,Kh,[o(s,{class:K([`play-icon`,{"is-loading":r.isRunning[String(e.id||e.name)]}])},{default:I(()=>[r.isRunning[String(e.id||e.name)]?(Z(),X(`svg`,Jh,[...t[6]||=[U(`path`,{fill:`currentColor`,d:`M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z`},null,-1)]])):(Z(),X(`svg`,qh,[...t[5]||=[U(`path`,{fill:`currentColor`,d:`M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z`},null,-1),U(`path`,{fill:`currentColor`,d:`M719.4 499.1l-296.1-215A15.9 15.9 0 0 0 398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 0 0 0-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z`},null,-1)]]))]),_:2},1032,[`class`]),U(`div`,Yh,[U(`span`,Xh,z(e.name),1),e.description?(Z(),X(`span`,Zh,z(e.description),1)):(Z(),X(`span`,Qh,z(e.command),1))])])],10,Gh))),128))],4))]),R(` 命令管理弹窗 `),o(r.CustomCommandManager,{visible:r.managerVisible,"onUpdate:visible":t[1]||=e=>r.managerVisible=e,fullscreen:!0,onExecuteCommand:r.runCommand},null,8,[`visible`])],64)}var eg=$(Rh,[[`render`,$h],[`__scopeId`,`data-v-70af0dcb`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/CustomCommandsPanel.vue`]]),tg=e(mt(),1),ng={0:`var(--color-black)`,1:`#cd3131`,2:`#0dbc79`,3:`#e5e510`,4:`#2472c8`,5:`#bc3fbc`,6:`#11a8cd`,7:`#e5e5e5`,8:`#666666`,9:`#f14c4c`,10:`#23d18b`,11:`#f5f543`,12:`#3b8eea`,13:`#d670d6`,14:`#29b8db`,15:`var(--color-white)`};function rg(e={}){let t=new tg.default({fg:e.fg??`#e5e5e5`,bg:e.bg??`transparent`,newline:e.newline??!1,escapeXML:e.escapeXML??!1,stream:e.stream??!1,colors:e.colors??ng});function n(e){return t.toHtml(e)}return{ansiToHtml:n,converter:t}}function ig(){let e=J([]),t=J(!1);async function n(){try{t.value=!0;let n=await(await fetch(`/api/terminal-sessions`)).json();n?.success?e.value=Array.isArray(n.sessions)?n.sessions:[]:W.error(n?.error||`获取终端会话失败`)}catch(e){W.error(e?.message||`获取终端会话失败`)}finally{t.value=!1}}async function r(e){try{t.value=!0;let r=await(await fetch(`/api/terminal-sessions/${e.id}/restart`,{method:`POST`})).json();return r?.success?(W.success(`已重新启动终端`),await n(),!0):(W.error(r?.error||`重新启动失败`),!1)}catch(e){return W.error(e?.message||`重新启动失败`),!1}finally{t.value=!1}}async function i(e){try{await Ze.confirm(`确定要删除该终端会话记录吗?如果该终端仍在运行,将尝试结束进程。`,`删除终端会话`,{confirmButtonText:`删除`,cancelButtonText:`取消`,type:`warning`})}catch{return!1}try{t.value=!0;let r=await(await fetch(`/api/terminal-sessions/${e.id}`,{method:`DELETE`})).json();return r?.success?(W.success(`已删除`),await n(),!0):(W.error(r?.error||`删除失败`),!1)}catch(e){return W.error(e?.message||`删除失败`),!1}finally{t.value=!1}}function a(t){let n=e.value.findIndex(e=>e.id===t.id);n>=0?e.value.splice(n,1,t):e.value.unshift(t)}return{sessions:e,loading:G(()=>t.value),count:G(()=>e.value.length),refresh:n,restart:r,remove:i,upsert:a}}var ag=8e3,og=j({__name:`CommandConsole`,setup(e,{expose:t}){t();let n=rt(()=>Ct(()=>Promise.resolve().then(()=>Gm),void 0)),r=rt(()=>Ct(()=>import(`./ProjectStartupButton-D7mgEsmf.js`),__vite__mapDeps([3,4,5,1,0,2,6,7,8,9,10,11,12,13,14]))),a=rt(()=>Ct(()=>import(`./FlowOrchestrationWorkspace-BRUlRQwp.js`),__vite__mapDeps([15,4,5,1,0,2,6,7,8,16,17,18,9,10,11,12,19,13,20,21]))),o=rt(()=>Ct(()=>import(`./FlowExecutionViewer-CFpiqZ2C.js`),__vite__mapDeps([22,4,5,1,0,2,6,7,8,16,17,19,13,20,23]))),s=xt(),c=Ht(),l=Yf();function u(){ze().catch(e=>{W.error(e?.message||Q(`@CF05E:提交后启动项执行失败`))})}async function d(e){let t=e?.flowData,n={id:String(e?.id||``).trim(),name:String(e?.name||``).trim()};if(t&&Array.isArray(t?.nodes)&&Array.isArray(t?.edges)){await f({flowData:t,orchestrationMeta:n});return}W.warning(Q(`@CF05E:该编排缺少流程数据,无法执行`))}async function f(e){let t=e?.flowData;if(!t||!Array.isArray(t.nodes)||!Array.isArray(t.edges))return;let n=t.nodes,r=t.edges;Te.value=!0,y.value=!0,x.value=!1,D.value=[],O.value=-1,ce.value=t,k.value=!0,le.value=null,A.value=[],j.value=[],M.value=[],N.value=(e?.orchestrationMeta?.name||``).trim(),de.value=(e?.orchestrationMeta?.id||``).trim();let i={},a=new Map(n.map(e=>[e.id,e])),o=(e?.startNodeId||``).trim()||n.find(e=>e.type===`start`)?.id;if(!o){W.error(Q(`@CF05E:未找到 start 节点`));return}let s=new Map;for(let e of r)s.has(e.source)||s.set(e.source,[]),s.get(e.source).push(e);for(let[e,t]of s.entries()){let n=a.get(e);if(n&&n.type!==`start`&&n.type!==`condition`&&t.length>1){W.error(`节点 ${n.data?.label||n.id} 出边超过 1 条,当前版本不支持`);return}}let c=Math.max(100,n.length*10),l=new Map,u=(e,t,n)=>{let r=e??``,i=n??``;switch(t){case`contains`:return r.includes(i);case`not_contains`:return!r.includes(i);case`isEmpty`:return String(r).trim().length===0;case`isNotEmpty`:return String(r).trim().length>0;case`==`:return r===i;case`!=`:return r!==i;case`>`:case`>=`:case`<`:case`<=`:{let e=Number(r),n=Number(i);return Number.isNaN(e)||Number.isNaN(n)?!1:t===`>`?e>n:t===`>=`?e>=n:t===`<`?e<n:e<=n}default:return!1}},d=(e,t)=>{let n=s.get(e)||[],r=(Array.isArray(t?.conditionBranches)?t.conditionBranches:[]).map(e=>({id:String(e?.id||``),name:String(e?.name||``),handleId:String(e?.handleId||``),priority:typeof e?.priority==`number`?e.priority:Number(e?.priority??0),combine:e?.combine===`any`?`any`:`all`,rules:Array.isArray(e?.rules)?e.rules:[],isDefault:!!e?.isDefault||String(e?.handleId||``)===`default`})).filter(e=>!!e.handleId),a=r.find(e=>e.isDefault)||r.find(e=>e.handleId===`default`),o=r.filter(e=>!e.isDefault&&e.handleId!==`default`).sort((e,t)=>(e.priority??0)-(t.priority??0)),c=e=>{let t=Array.isArray(e.rules)?e.rules:[];if(t.length===0)return!1;let n=t.map(e=>{let t=String(e?.left?.nodeId||``).trim(),n=String(e?.left?.outputKey||`stdout`).trim()||`stdout`,r=t&&i?.[t]?.[n]||``;return u(String(r??``),String(e?.op||``),e?.right)});return e.combine===`any`?n.some(Boolean):n.every(Boolean)},l=o.find(e=>c(e));!l&&a&&(l=a);let d=String(l?.handleId||``),f=d?n.find(e=>String(e.sourceHandle||``).trim()===d):void 0;return console.log(`[FLOW][condition]`,{nodeId:e,chosen:l?{name:l.name,handleId:l.handleId,priority:l.priority,isDefault:l.isDefault}:null,outs:n.map(e=>({id:e.id,sourceHandle:e.sourceHandle,target:e.target})),nodeOutputsKeys:Object.keys(i||{})}),f},f=o,p=0;try{for(;f;){if(!y.value)throw Error(Q(`@CF05E:用户停止执行`));if(p++>c)throw Error(`执行步数超过上限(${c}),可能存在循环`);let t=l.get(f)||0;if(l.set(f,t+1),t>=10)throw Error(`检测到节点 ${f} 被重复执行过多次,可能存在循环`);let n=a.get(f);if(!n)throw Error(`节点不存在: ${f}`);if(le.value=n.id,n.type===`start`){let e=s.get(n.id)||[];A.value=A.value.includes(n.id)?A.value:[...A.value,n.id],e[0]?.id&&(j.value=j.value.includes(e[0].id)?j.value:[...j.value,e[0].id]),f=e[0]?.target;continue}let r=n.data?.config;if(!r)throw Error(`节点未配置: ${n.data?.label||n.id}`);r.enabled===void 0&&(r.enabled=n.data?.enabled??!0);let o=e?.isSingleExecution===!0;if(r.enabled===!1&&!o){f=(s.get(n.id)||[])[0]?.target;continue}if(n.type===`condition`){let e=d(n.id,r);if(A.value=A.value.includes(n.id)?A.value:[...A.value,n.id],e?.id&&(j.value=j.value.includes(e.id)?j.value:[...j.value,e.id]),f=e?.target,o)break;continue}let u=s.get(n.id)||[],m=e?.isSingleExecution!==!0&&!!u[0]?.target;if(!await lt([{...r,nodeId:n.id,enabled:r.enabled}],0,!0,e?.orchestrationMeta,{nodeOutputs:i,skipUiSetup:!0,skipUiTeardown:!0,forceTerminalConfirm:m})){n.id&&!M.value.includes(n.id)&&(M.value=[...M.value,n.id]);break}if(!y.value)break;A.value=A.value.includes(n.id)?A.value:[...A.value,n.id];let h=s.get(n.id)||[];if(h[0]?.id&&(j.value=j.value.includes(h[0].id)?j.value:[...j.value,h[0].id]),f=h[0]?.target,o)break}}catch(e){String(e?.message||e)!==Q(`@CF05E:用户停止执行`)&&(le.value&&!M.value.includes(le.value)&&(M.value=[...M.value,le.value]),W.error(e?.message||String(e)))}finally{y.value=!1,x.value=!1,O.value=-1,D.value=[],le.value=null}}let p=zt(),h=J(null),g=J(``),_=J(``),y=J(!1),x=J(!1),S=J([]),C=0;function te(){Ze.confirm(Q(`@CF05E:确定要清空所有执行历史吗?此操作不可撤销。`),Q(`@CF05E:清空历史`),{confirmButtonText:Q(`@CF05E:清空`),cancelButtonText:Q(`@CF05E:取消`),type:`warning`}).then(()=>{S.value=[],W.success(Q(`@CF05E:执行历史已清空`))}).catch(()=>{})}function w(){fe&&fe(!0)}function re(){fe&&fe(!1),y.value=!1,x.value=!1}function ie(){he&&he(!0)}function E(){he&&he(!1),y.value=!1,x.value=!1}let D=J([]),O=J(-1),ce=J(null),k=J(!0),le=J(null),A=J([]),j=J([]),M=J([]),N=J(``),de=J(``),P=J(!1),F=J(``),fe=null,pe=J(!1),I=J(``),he=null,ve=J(!1),L=J(``),ye=J([]),be=J({}),R=null,z=G({get:()=>ve.value,set:e=>{ve.value=e}});function xe(){let e=Array.isArray(ye.value)?ye.value:[];for(let t of e){if(!t?.required)continue;let e=be.value?.[t.name];if(e==null||String(e).trim()===``){W.warning(Q(`@UINPUT:请输入必填参数的值`,{name:t.name}));return}}R&&R(!0)}function Se(){R&&R(!1),y.value=!1,x.value=!1}let{ansiToHtml:B}=rg(),Te=J(!1),De=G({get:()=>s.ui.commandConsole.useTerminal,set:e=>{s.ui.commandConsole.useTerminal=e}}),{sessions:Oe,loading:ke,refresh:V,restart:Ae,remove:je,upsert:Ne}=ig(),H=G({get:()=>s.ui.commandConsole.showTerminalSessions,set:e=>{s.ui.commandConsole.showTerminalSessions=e}}),Pe=G(()=>Oe.value.length);b(Pe,e=>{l.setCount(e)},{immediate:!0});let Fe=J(!1);function U(e){return new Promise(t=>setTimeout(t,e))}async function Ie(e=8e3){let t=Date.now();for(;Date.now()-t<e;){if(h.value&&h.value.connected)return!0;await U(100)}return!1}async function Le(e){let t=s.customCommands.find(t=>String(t.id)===String(e));if(!t){W.warning(`启动项命令不存在: ${e}`);return}let n=t.directory||g.value,r=t.command;if(De.value){try{let e=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:r,workingDirectory:n})})).json();e?.success?e?.session?Ne(e.session):await V():W.error(e?.error||Q(`@CF05E:启动项命令执行失败`))}catch(e){W.error(e?.message||Q(`@CF05E:启动项命令执行失败`))}return}if(!await Ie()){W.error(Q(`@CF05E:Socket 连接未就绪,无法自动执行交互式启动项`));return}await ft(r,n)}async function Re(e){let t=s.orchestrations.find(t=>t.id===e);if(!t){W.warning(`启动项工作流不存在: ${e}`);return}await d(t)}async function ze(){await s.loadConfig(!1);let e=s.afterQuickPushAction;e?.enabled&&e?.refId&&(e.type===`workflow`?await Re(e.refId):await Le(e.refId))}async function Be(){if(Fe.value||(Fe.value=!0,await s.loadConfig(!1),!s.startupAutoRun))return;let e=(s.startupItems||[]).filter(e=>e?.enabled!==!1);if(e.length!==0)for(let t of e)t.type===`workflow`?await Re(t.refId):await Le(t.refId)}let Ve=e=>Math.min(85,Math.max(15,e)),K=G({get:()=>Ve(s.ui.commandConsole.splitPercent),set:e=>{s.ui.commandConsole.splitPercent=Ve(e)}}),He=J(null),Ue=()=>{let e=He.value?.$el??He.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},We=()=>{let e=He.value?.$el??He.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=Ue();if(!t||t.length<1||n<=0)return;let r=t[0]?.getBoundingClientRect?.().width??0;if(r>0){let e=Ve(r/n*100);e!==K.value&&(K.value=e)}},Ge=G({get(){return`${Ve(K.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=Ue();n>0&&!isNaN(e)&&(t=e/n*100)}else if(typeof e==`string`){if(e.endsWith(`%`))t=parseFloat(e);else if(e.endsWith(`px`)){let n=parseFloat(e),r=Ue();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(K.value=Ve(t))}});async function Ke(e=!0){if(Oe.value.length!==0)try{let t=await(await fetch(`/api/terminal-sessions/status?cleanup=${e?`true`:`false`}`)).json();t?.success&&(Oe.value=Array.isArray(t.sessions)?t.sessions:[])}catch{}}let qe=null;function Je(){qe!==null&&(clearInterval(qe),qe=null)}function Ye(){qe===null&&(qe=setInterval(()=>{Ke(!0)},ag))}b(Pe,e=>{e>0?Ye():Je()},{immediate:!0});function Xe(e){let t=String(e||``).trim();if(!t)return``;let n=t.replace(/\/+$/g,``).replace(/\+$/g,``),r=n.split(/[\\/]+/).filter(Boolean);return r[r.length-1]||n}let Qe=J(!1),q=J(!1);async function $e(){let e=_.value.trim();!e||y.value||(_.value=``,await et(e,g.value))}async function et(e,t=g.value){if(y.value=!0,De.value){try{let n=await(await fetch(`/api/exec-in-terminal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e,workingDirectory:t})})).json();n?.success?(W.success(Q(`@CF05E:已在新终端中执行命令`)),n?.session?Ne(n.session):await V()):W.error(n?.error||Q(`@CF05E:执行失败`))}catch(e){W.error(e?.message||Q(`@CF05E:执行失败`))}finally{y.value=!1}return}let n={id:++C,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0};S.value.unshift(n),_.value=``;try{console.log(`[前端-控制台] 开始发送流式请求:`,e);let t=await fetch(`/api/exec-stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e,directory:n.directory})});if(console.log(`[前端-控制台] 收到响应,状态:`,t.status,t.statusText),!t.ok)throw Error(`HTTP ${t.status}: ${t.statusText}`);let r=t.body?.getReader(),i=new TextDecoder;if(!r)throw Error(Q(`@CF05E:无法读取响应流`));console.log(`[前端-控制台] 开始读取流数据`);let a=``,o=0;for(;;){let{done:e,value:t}=await r.read();if(o++,console.log(`[前端-控制台] 读取数据块 #${o}, done:`,e,`size:`,t?.length||0),e)break;let s=i.decode(t,{stream:!0});console.log(`[前端-控制台] 解码数据块:`,s.substring(0,200)),a+=s;let c=a.split(`
50
50
 
51
51
  `);a=c.pop()||``,console.log(`[前端-控制台] 分割出 ${c.length} 条消息`);for(let e of c){let t=e.split(`
52
52
  `);for(let e of t)if(e.startsWith(`data: `))try{let t=JSON.parse(e.substring(6));console.log(`[前端-控制台] 解析到数据:`,t.type,`长度:`,t.data?.length||0),t.type===`process_id`?(n.processId=t.data,console.log(`[前端-控制台] 收到进程ID:`,n.processId),S.value=[...S.value]):t.type===`stdout`?(n.stdout=(n.stdout||``)+B(t.data),console.log(`[前端-控制台] 当前stdout总长度:`,n.stdout.length),y.value&&n.stdout.length<200&&(y.value=!1),S.value=[...S.value]):t.type===`stderr`?(n.stderr=(n.stderr||``)+B(t.data),console.log(`[前端-控制台] 当前stderr总长度:`,n.stderr.length),y.value&&n.stderr.length<200&&(y.value=!1),S.value=[...S.value]):t.type===`exit`?(n.success=t.data.success,n.running=!1,console.log(`[前端-控制台] 进程退出,成功:`,n.success),S.value=[...S.value]):t.type===`error`&&(n.stderr=(n.stderr||``)+`错误: ${t.data}\n`,S.value=[...S.value])}catch(t){console.warn(`解析SSE数据失败:`,e,t)}}}if(a.trim()){let e=a.split(`
@@ -61,7 +61,7 @@ import{o as e,r as t}from"./rolldown-runtime-BM3Ffeng.js";import{$t as n,A as r,
61
61
 
62
62
  `);s=i.pop()||``,console.log(`[前端-自定义] 分割出 ${i.length} 条消息, buffer剩余: ${s.length} 字符`);for(let e of i){let t=e.split(`
63
63
  `);for(let e of t)if(e.startsWith(`data: `))try{let t=JSON.parse(e.substring(6));console.log(`[前端-自定义] 解析到数据:`,t.type,`内容长度:`,t.data?.length||0),t.type===`process_id`?(r.processId=t.data,console.log(`[前端-自定义] 收到进程ID:`,r.processId),S.value=[...S.value]):t.type===`stdout`?(r.stdout=(r.stdout||``)+B(t.data),console.log(`[前端-自定义] 当前stdout总长度:`,r.stdout.length,`内容预览:`,r.stdout.substring(0,100)),y.value&&r.stdout.length<200&&(y.value=!1),S.value=[...S.value]):t.type===`stderr`?(r.stderr=(r.stderr||``)+B(t.data),console.log(`[前端-自定义] 当前stderr总长度:`,r.stderr.length),y.value&&r.stderr.length<200&&(y.value=!1),S.value=[...S.value]):t.type===`exit`?(r.success=t.data.success,r.running=!1,console.log(`[前端-自定义] 进程退出,成功:`,r.success),S.value=[...S.value]):t.type===`error`&&(r.stderr=(r.stderr||``)+`错误: ${t.data}\n`,S.value=[...S.value])}catch(t){console.warn(`[前端-自定义] 解析SSE数据失败:`,e,t)}}}if(s.trim()){let e=s.split(`
64
- `);for(let t of e)if(t.startsWith(`data: `))try{let e=JSON.parse(t.substring(6));e.type===`stdout`?r.stdout=(r.stdout||``)+B(e.data):e.type===`stderr`?r.stderr=(r.stderr||``)+B(e.data):e.type===`exit`&&(r.success=e.data.success,r.running=!1)}catch(e){console.warn(`解析剩余SSE数据失败:`,e)}S.value=[...S.value]}console.log(`[前端-自定义] 流读取完成,正常退出`)}catch(e){console.error(`[前端-自定义] 捕获异常:`,e),r.success=!1,r.running=!1,r.stderr=e?.message||String(e)}finally{console.log(`[前端-自定义] finally块执行,设置consoleRunning=false`),y.value=!1,Z(n)&&(await c.fetchStatus(),await c.fetchLog())}}async function dt(){let e=_.value.trim();!e||y.value||(_.value=``,await ft(e))}async function ft(e,t=g.value){y.value=!0;let n=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,r={id:++C,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0,sessionId:n,isInteractive:!0,stdinInput:``};if(S.value.unshift(r),!h.value||!h.value.connected){W.error(`Socket 连接未建立,无法执行交互式命令`),y.value=!1,r.running=!1,r.stderr=`Socket 连接未建立`;return}h.value.emit(`exec_interactive`,{command:e,directory:t,sessionId:n});let i=e=>{e.sessionId===n&&(r.processId=e.processId,console.log(`[交互式] 收到进程ID:`,r.processId),S.value=[...S.value])},a=e=>{e.sessionId===n&&(r.stdout=(r.stdout||``)+B(e.data),y.value=!1,S.value=[...S.value])},o=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+B(e.data),y.value=!1,S.value=[...S.value])},s=e=>{e.sessionId===n&&(r.success=e.success,r.running=!1,console.log(`[交互式] 进程退出,成功:`,r.success),S.value=[...S.value],h.value?.off(`interactive_process_id`,i),h.value?.off(`interactive_stdout`,a),h.value?.off(`interactive_stderr`,o),h.value?.off(`interactive_exit`,s),h.value?.off(`interactive_error`,c))},c=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+`错误: ${e.error}\n`,r.running=!1,r.success=!1,S.value=[...S.value],h.value?.off(`interactive_process_id`,i),h.value?.off(`interactive_stdout`,a),h.value?.off(`interactive_stderr`,o),h.value?.off(`interactive_exit`,s),h.value?.off(`interactive_error`,c))};h.value.on(`interactive_process_id`,i),h.value.on(`interactive_stdout`,a),h.value.on(`interactive_stderr`,o),h.value.on(`interactive_exit`,s),h.value.on(`interactive_error`,c),y.value=!1}function pt(e){let t=e.stdinInput?.trim();if(!(!t||!e.sessionId)){if(!h.value||!h.value.connected){W.error(`Socket 连接未建立`);return}console.log(`[交互式] 发送 stdin 输入:`,t),h.value.emit(`interactive_stdin_${e.sessionId}`,{input:t}),e.stdinInput=``,S.value=[...S.value]}}function mt(e){if(!e.sessionId||!e.running){W.warning(`命令已经结束`);return}if(!h.value||!h.value.connected){W.error(`Socket 连接未建立`);return}console.log(`[交互式] 停止命令:`,e.sessionId),h.value.emit(`interactive_stop_${e.sessionId}`),e.running=!1,S.value=[...S.value]}b(H,e=>{e&&Ke(!0)});function ht(){let e=`http://localhost:${p}`;console.log(`[控制台] 连接到 Socket.IO:`,e),h.value=yt(e,{transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1e3,reconnectionAttempts:5}),h.value.on(`connect`,()=>{console.log(`[控制台] Socket.IO 已连接`)}),h.value.on(`disconnect`,()=>{console.log(`[控制台] Socket.IO 已断开`)}),h.value.on(`connect_error`,e=>{console.error(`[控制台] Socket.IO 连接错误:`,e)})}let $=()=>{H.value&&V()},bt=()=>{document.visibilityState===`visible`&&H.value&&(console.log(`[页面可见性] 标签页已激活,刷新终端会话状态`),Ke(!0))},St=()=>{H.value&&(console.log(`[窗口焦点] 浏览器窗口已激活,刷新终端会话状态`),Ke(!0))};ee(async()=>{try{g.value=(await(await fetch(`/api/current_directory`)).json())?.directory||``}catch{}ht(),await s.loadConfig(!1),await V(),await Be(),document.addEventListener(`visibilitychange`,bt),window.addEventListener(`focus`,St),window.addEventListener(`zen-gitsync:after-quick-push-success`,u),window.addEventListener(`zen-gitsync:terminal-session-created`,$)}),oe(()=>{document.removeEventListener(`visibilitychange`,bt),window.removeEventListener(`focus`,St),window.removeEventListener(`zen-gitsync:after-quick-push-success`,u),window.removeEventListener(`zen-gitsync:terminal-session-created`,$),h.value&&=(h.value.disconnect(),null),Je()}),v(()=>{Je()}),T(()=>{Pe.value>0&&(Ke(!0),Ye())});let wt={CustomCommandManager:n,ProjectStartupButton:r,FlowOrchestrationWorkspace:a,FlowExecutionViewer:o,configStore:s,gitStore:c,terminalSessionsStore:l,handleAfterQuickPushSuccessEvent:u,runWorkflow:d,executeFlow:f,backendPort:p,socket:h,currentDirectory:g,consoleInput:_,consoleRunning:y,orchestrationPaused:x,consoleHistory:S,get consoleIdCounter(){return C},set consoleIdCounter(e){C=e},clearConsoleHistory:te,continueAfterTerminal:w,stopAfterTerminal:re,continueUserConfirm:ie,stopUserConfirm:E,orchestrationSteps:D,currentStepIndex:O,executionFlowData:ce,showExecutionFlowPanel:k,currentExecutingNodeId:le,executedNodeIds:A,executedEdgeIds:j,failedNodeIds:M,currentOrchestrationName:N,currentOrchestrationId:de,waitingForTerminalConfirm:P,waitingStepName:F,get terminalConfirmResolve(){return fe},set terminalConfirmResolve(e){fe=e},waitingForUserConfirm:pe,waitingConfirmMessage:I,get userConfirmResolve(){return he},set userConfirmResolve(e){he=e},waitingForUserInput:ve,waitingUserInputTitle:L,userInputParams:ye,userInputValues:be,get userInputResolve(){return R},set userInputResolve(e){R=e},userInputDialogVisible:z,confirmUserInput:xe,cancelUserInput:Se,ansiToHtml:B,isFullscreen:Te,useTerminal:De,terminalSessions:Oe,terminalSessionsLoading:ke,loadTerminalSessions:V,restartTerminalSession:Ae,deleteTerminalSession:je,upsertTerminalSession:Ne,showTerminalSessions:H,terminalSessionsCount:Pe,startupAutoRunTriggered:Fe,sleep:U,waitForSocketConnected:Ie,runStartupCommandById:Le,runStartupWorkflow:Re,runAfterQuickPushAction:ze,autoRunProjectStartupItems:Be,clampPercent:Ve,splitPercent:K,splitterRef:He,getSplitterWidth:Ue,updateSplitFromDom:We,panelSize:Ge,loadTerminalSessionsStatus:Ke,TERMINAL_POLL_INTERVAL_MS:ag,get terminalPollTimer(){return qe},set terminalPollTimer(e){qe=e},stopTerminalPolling:Je,startTerminalPolling:Ye,getLastDirName:Xe,commandManagerVisible:Qe,flowOrchestrationVisible:q,runConsoleCommand:$e,runConsoleCommandWithCmd:et,closeConsoleRecord:tt,rerunConsoleRecord:Y,toggleCommandOutput:X,stopCommand:it,openCommandManager:at,openFlowOrchestrationWorkspace:ot,scrollToCurrentStep:st,isGitCommand:Z,extractVersionFromOutput:ct,executeOrchestration:lt,executeCustomCommand:ut,runInteractiveCommand:dt,runInteractiveCommandWithCmd:ft,sendStdinInput:pt,stopInteractiveCommand:mt,initSocket:ht,handleExternalTerminalCreated:$,handleVisibilityChange:bt,handleWindowFocus:St,get ArrowDown(){return ge},get FullScreen(){return we},get VideoPlay(){return _e},get Loading(){return ue},get Close(){return Ce},get Position(){return ae},get Monitor(){return i},get Document(){return Me},get Timer(){return m},get Ticket(){return me},get Delete(){return Ee},get RefreshRight(){return se},get Folder(){return nt},SvgIcon:gt,IconButton:_t,CommonDialog:vt,get $t(){return Q}};return Object.defineProperty(wt,`__isScriptSetup`,{enumerable:!1,value:!0}),wt}}),sg={class:`console-header`},cg={class:`header-left`},lg={class:`console-title`},ug={class:`header-actions`},dg={key:0,class:`execution-controls`},fg={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},pg={class:`console-content`},mg={class:`termial-session`},hg={key:0,class:`terminal-sessions-panel`},gg={class:`terminal-sessions-header`},_g={class:`terminal-sessions-title`},vg={class:`terminal-sessions-count`},yg={class:`terminal-sessions-actions`},bg={class:`terminal-sessions-body`},xg={key:0,class:`terminal-sessions-empty`},Sg={key:1,class:`terminal-sessions-list`},Cg={class:`terminal-session-main`},wg=[`title`],Tg={class:`terminal-session-pid`},Eg={class:`terminal-session-meta`},Dg={class:`terminal-session-dir`},Og={class:`terminal-session-actions`},kg={key:1,class:`terminal-sessions-collapsed`},Ag={class:`console-content-main`},jg={key:0,class:`orchestration-flow-panel`},Mg={class:`flow-panel-header`},Ng={class:`flow-panel-title`},Pg={key:1,class:`orchestration-steps-panel`},Fg={class:`steps-header`},Ig={class:`steps-title`},Lg={key:0,class:`steps-orchestration`},Rg={key:0,class:`steps-list`},zg={class:`step-indicator`},Bg={key:4,class:`step-number`},Vg={class:`step-content`},Hg={class:`step-header`},Ug={key:0,class:`step-terminal-tag`,title:`终端执行`},Wg={key:1,class:`step-disabled-tag`},Gg={class:`step-name`},Kg={key:1,class:`terminal-waiting-panel`},qg={class:`waiting-content`},Jg={class:`waiting-text`},Yg={class:`waiting-desc`},Xg={class:`waiting-actions`},Zg={key:2,class:`terminal-waiting-panel user-confirm-panel`},Qg={class:`waiting-content`},$g={class:`waiting-text`},e_={class:`waiting-desc`},t_={class:`waiting-actions`},n_={class:`console-input-row`},r_=[`title`],i_={key:2,class:`console-output`},a_=[`onClick`],o_={class:`cmd-line`},s_={class:`cmd-text`},c_=[`title`],l_={class:`ts`},u_={class:`cmd-actions`},d_={key:0,class:`output-content`},f_=[`innerHTML`],p_=[`innerHTML`],m_={key:0,class:`stdin-input-row`},h_={class:`user-input-dialog-content`},g_={key:0,class:`user-input-empty`},__={key:1,class:`user-input-form`},v_={class:`user-input-label`},y_={key:0,class:`required`};function b_(e,t,n,r,i,a){let s=M,c=p,l=V,u=Qe,d=Ye,f=We,m=xe;return Z(),X(Y,null,[R(` 自定义指令执行控制台 `),U(`div`,{class:K([`command-console`,{fullscreen:r.isFullscreen}])},[R(` 标题栏 `),U(`div`,sg,[U(`div`,cg,[t[16]||=U(`span`,{class:`console-window-dots`},[U(`span`,{class:`dot dot-red`}),U(`span`,{class:`dot dot-yellow`}),U(`span`,{class:`dot dot-green`})],-1),U(`span`,lg,z(r.$t(`@CF05E:自定义指令执行`)),1)]),U(`div`,ug,[R(` 编排暂停/继续按钮 `),r.consoleRunning?(Z(),X(`div`,dg,[o(c,{content:r.orchestrationPaused?`继续执行`:`暂停执行`,placement:`bottom`},{default:I(()=>[o(s,{type:r.orchestrationPaused?`success`:`warning`,size:`small`,onClick:t[0]||=e=>r.orchestrationPaused=!r.orchestrationPaused,class:`pause-btn`},{icon:I(()=>[r.orchestrationPaused?(Z(),H(r.VideoPlay,{key:0})):(Z(),H(r.Loading,{key:1}))]),default:I(()=>[k(` `+z(r.orchestrationPaused?`继续`:`暂停`),1)]),_:1},8,[`type`])]),_:1},8,[`content`]),o(c,{content:`停止执行`,placement:`bottom`},{default:I(()=>[o(s,{type:`danger`,size:`small`,onClick:t[1]||=e=>{r.consoleRunning=!1,r.orchestrationPaused=!1,r.currentStepIndex=-1,r.orchestrationSteps=[]},class:`stop-btn`},{icon:I(()=>[o(r.Close)]),default:I(()=>[t[17]||=k(` 停止 `)]),_:1})]),_:1})])):R(`v-if`,!0),r.consoleHistory.length>0?(Z(),H(r.IconButton,{key:1,tooltip:`清空执行历史`,"hover-color":`var(--color-danger)`,onClick:r.clearConsoleHistory,"custom-class":`clear-history-btn`},{default:I(()=>[o(l,{size:18},{default:I(()=>[o(r.Delete)]),_:1})]),_:1})):R(`v-if`,!0),o(r.IconButton,{tooltip:r.$t(`@CF05E:使用终端执行`),active:r.useTerminal,onClick:t[2]||=e=>r.useTerminal=!r.useTerminal,"custom-class":`terminal-toggle-btn`},{default:I(()=>[o(l,{size:20},{default:I(()=>[o(r.Monitor)]),_:1})]),_:1},8,[`tooltip`,`active`]),o(r.IconButton,{tooltip:r.$t(`@CF05E:自定义命令管理`),"hover-color":`var(--color-success)`,onClick:r.openCommandManager,"custom-class":`command-manager-btn`},{default:I(()=>[o(r.SvgIcon,{"icon-class":`command-list`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),o(r.ProjectStartupButton,{onExecuteCommand:r.executeCustomCommand,onExecuteWorkflow:t[3]||=e=>r.runWorkflow(e)}),o(r.IconButton,{tooltip:r.$t(`@ORCH:可视化编排`),"hover-color":`#9c27b0`,onClick:r.openFlowOrchestrationWorkspace,"custom-class":`flow-orchestrator-btn`},{default:I(()=>[o(r.SvgIcon,{"icon-class":`workflow`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),o(r.IconButton,{tooltip:r.isFullscreen?r.$t(`@CF05E:退出全屏`):r.$t(`@CF05E:全屏显示`),onClick:t[4]||=e=>r.isFullscreen=!r.isFullscreen},{default:I(()=>[r.isFullscreen?(Z(),X(`svg`,fg,t[18]||=[U(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)])):(Z(),H(l,{key:0},{default:I(()=>[o(r.FullScreen)]),_:1}))]),_:1},8,[`tooltip`])])]),R(` 内容区域 `),U(`div`,pg,[o(f,{ref:`splitterRef`,layout:`horizontal`,style:{height:`100%`},onResize:r.updateSplitFromDom,onResizeEnd:r.updateSplitFromDom},{default:I(()=>[o(u,{size:r.panelSize,"onUpdate:size":t[7]||=e=>r.panelSize=e,min:`15%`,max:`85%`},{default:I(()=>[U(`div`,mg,[r.showTerminalSessions?(Z(),X(`div`,hg,[U(`div`,gg,[U(`div`,_g,[U(`span`,null,z(r.$t(`@CMDCON:终端会话`)),1),U(`span`,vg,`(`+z(r.terminalSessionsCount)+`)`,1)]),U(`div`,yg,[o(c,{content:r.$t(`@CMDCON:刷新`),placement:`bottom`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:r.loadTerminalSessions,disabled:r.terminalSessionsLoading},{default:I(()=>[o(l,null,{default:I(()=>[o(r.RefreshRight)]),_:1})]),_:1},8,[`onClick`,`disabled`])]),_:1},8,[`content`]),o(c,{content:r.$t(`@CMDCON:隐藏`),placement:`bottom`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:t[5]||=e=>r.showTerminalSessions=!1},{default:I(()=>[o(l,null,{default:I(()=>[o(r.ArrowDown)]),_:1})]),_:1})]),_:1},8,[`content`])])]),L((Z(),X(`div`,bg,[r.terminalSessions.length===0?(Z(),X(`div`,xg,z(r.$t(`@CMDCON:暂无终端会话`)),1)):(Z(),X(`div`,Sg,[(Z(!0),X(Y,null,F(r.terminalSessions,e=>(Z(),X(`div`,{key:e.id,class:`terminal-session-item`},[U(`div`,Cg,[U(`div`,{class:`terminal-session-command`,title:e.command},[k(z(e.command),1),U(`span`,Tg,` PID: `+z(e.pid??`-`),1)],8,wg),U(`div`,Eg,[e.workingDirectory?(Z(),H(c,{key:0,content:e.workingDirectory,placement:`top`},{default:I(()=>[U(`span`,Dg,[o(l,{class:`cmd-dir-icon`},{default:I(()=>[o(r.Folder)]),_:1}),k(` `+z(r.getLastDirName(e.workingDirectory)),1)])]),_:2},1032,[`content`])):R(`v-if`,!0)])]),U(`div`,Og,[o(c,{content:r.$t(`@CMDCON:重新启动`),placement:`top`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:t=>r.restartTerminalSession(e)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.RefreshRight)]),_:1})]),_:2},1032,[`onClick`])]),_:2},1032,[`content`]),o(c,{content:r.$t(`@CMDCON:删除`),placement:`top`},{default:I(()=>[o(s,{text:``,size:`small`,type:`danger`,onClick:t=>r.deleteTerminalSession(e)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Delete)]),_:1})]),_:2},1032,[`onClick`])]),_:2},1032,[`content`])])]))),128))]))])),[[m,r.terminalSessionsLoading]])])):(Z(),X(`div`,kg,[o(s,{text:``,size:`small`,onClick:t[6]||=e=>r.showTerminalSessions=!0},{default:I(()=>[k(z(r.$t(`@CMDCON:显示终端会话`,{count:r.terminalSessionsCount})),1)]),_:1})]))])]),_:1},8,[`size`]),o(u,{min:`15%`,max:`85%`},{default:I(()=>[U(`div`,Ag,[R(` 执行画布(只读,高亮执行路径) `),r.executionFlowData&&r.showExecutionFlowPanel?(Z(),X(`div`,jg,[U(`div`,Mg,[U(`div`,Ng,z(r.currentOrchestrationName||r.currentOrchestrationId),1),o(r.IconButton,{tooltip:r.$t(`@CMDCON:隐藏`),"hover-color":`var(--color-danger)`,"custom-class":`flow-panel-close-btn`,onClick:t[8]||=e=>r.showExecutionFlowPanel=!1},{default:I(()=>[o(l,{size:18},{default:I(()=>[o(r.Close)]),_:1})]),_:1},8,[`tooltip`])]),o(r.FlowExecutionViewer,{"flow-data":r.executionFlowData,"current-node-id":r.currentExecutingNodeId||void 0,"executed-node-ids":r.executedNodeIds,"failed-node-ids":r.failedNodeIds,"executed-edge-ids":r.executedEdgeIds},null,8,[`flow-data`,`current-node-id`,`executed-node-ids`,`failed-node-ids`,`executed-edge-ids`])])):R(`v-if`,!0),R(` 编排步骤列表 `),r.orchestrationSteps.length>0||r.waitingForTerminalConfirm||r.waitingForUserConfirm?(Z(),X(`div`,Pg,[U(`div`,Fg,[U(`span`,Ig,[t[19]||=k(` 执行步骤 `),r.currentOrchestrationName||r.currentOrchestrationId?(Z(),X(`span`,Lg,` - `+z(r.currentOrchestrationName||r.currentOrchestrationId),1)):R(`v-if`,!0),k(` (`+z(r.currentStepIndex+1)+`/`+z(r.orchestrationSteps.length)+`) `,1)])]),r.orchestrationSteps.length>0?(Z(),X(`div`,Rg,[(Z(!0),X(Y,null,F(r.orchestrationSteps,(e,n)=>(Z(),X(`div`,{key:n,class:K([`step-item`,{"step-current":n===r.currentStepIndex,"step-completed":n<r.currentStepIndex,"step-pending":n>r.currentStepIndex,"step-disabled":e.enabled===!1,[`step-type-${e.type}`]:!0}])},[U(`div`,zg,[n<r.currentStepIndex?(Z(),H(l,{key:0,class:`step-icon-check`},{default:I(()=>[...t[20]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{fill:`currentColor`,d:`M406.656 706.944L195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z`})],-1)]]),_:1})):e.type===`wait`?(Z(),H(l,{key:1,class:`step-type-icon`},{default:I(()=>[o(r.Timer)]),_:1})):e.type===`version`?(Z(),H(l,{key:2,class:`step-type-icon`},{default:I(()=>[o(r.Ticket)]),_:1})):e.type===`command`?(Z(),H(l,{key:3,class:`step-type-icon`},{default:I(()=>[o(r.Document)]),_:1})):(Z(),X(`span`,Bg,z(n+1),1))]),U(`div`,Vg,[U(`div`,Hg,[U(`span`,{class:K([`step-type-tag`,`type-${e.type}`])},z(e.type===`command`?`命令`:e.type===`wait`?`等待`:e.type===`version`?`版本`:e.type===`user_input`?`输入`:e.type),3),e.useTerminal?(Z(),X(`span`,Ug,[o(l,{class:`step-terminal-icon`},{default:I(()=>[o(r.Monitor)]),_:1}),t[21]||=k(` 终端 `)])):R(`v-if`,!0),e.enabled===!1?(Z(),X(`span`,Wg,`已禁用`)):R(`v-if`,!0)]),U(`span`,Gg,z(e.type===`command`?e.commandName:e.type===`wait`?`${e.waitSeconds} 秒`:e.type===`version`?e.versionTarget===`dependency`?`${e.dependencyName}`:`${e.versionBump||`patch`}`:e.type===`user_input`?e.displayName||`用户输入`:e.type),1)])],2))),128))])):R(`v-if`,!0),R(` 终端命令等待确认提示 `),r.waitingForTerminalConfirm?(Z(),X(`div`,Kg,[U(`div`,qg,[o(l,{class:`waiting-icon`},{default:I(()=>[o(r.Monitor)]),_:1}),U(`div`,Jg,[t[24]||=U(`div`,{class:`waiting-title`},`等待终端命令完成`,-1),U(`div`,Yg,[t[22]||=k(` 终端命令 "`),U(`strong`,null,z(r.waitingStepName),1),t[23]||=k(`" 已在新窗口中打开,请在终端中查看命令执行结果 `)])])]),U(`div`,Xg,[o(s,{type:`primary`,onClick:r.continueAfterTerminal},{default:I(()=>[o(l,null,{default:I(()=>[o(r.VideoPlay)]),_:1}),t[25]||=k(` 继续下一步 `)]),_:1}),o(s,{type:`danger`,plain:``,onClick:r.stopAfterTerminal},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Close)]),_:1}),t[26]||=k(` 停止执行 `)]),_:1})])])):R(`v-if`,!0),R(` 用户确认节点等待提示 `),r.waitingForUserConfirm?(Z(),X(`div`,Zg,[U(`div`,Qg,[o(l,{class:`waiting-icon`,style:{color:`#ff9800`}},{default:I(()=>t[27]||=[k(`✋`)]),_:1}),U(`div`,$g,[t[28]||=U(`div`,{class:`waiting-title`},`用户确认节点`,-1),U(`div`,e_,z(r.waitingConfirmMessage),1)])]),U(`div`,t_,[o(s,{type:`primary`,onClick:r.continueUserConfirm},{default:I(()=>[o(l,null,{default:I(()=>[o(r.VideoPlay)]),_:1}),t[29]||=k(` 继续执行 `)]),_:1}),o(s,{type:`danger`,plain:``,onClick:r.stopUserConfirm},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Close)]),_:1}),t[30]||=k(` 取消执行 `)]),_:1})])])):R(`v-if`,!0)])):R(`v-if`,!0),R(` 输入区 `),U(`div`,n_,[U(`span`,{class:`prompt`,title:r.$t(`@CF05E:当前路径`)},z(r.currentDirectory)+` >`,9,r_),o(d,{modelValue:r.consoleInput,"onUpdate:modelValue":t[9]||=e=>r.consoleInput=e,class:`console-input`,placeholder:r.useTerminal?r.$t(`@CMDCON:在新终端执行`):r.$t(`@CMDCON:交互式模式`),onKeydown:t[10]||=Te(ze(e=>r.useTerminal?r.runConsoleCommand():r.runInteractiveCommand(),[`prevent`]),[`enter`]),disabled:r.consoleRunning,clearable:``},null,8,[`modelValue`,`placeholder`,`disabled`]),o(r.IconButton,{disabled:r.consoleRunning,"hover-color":`var(--color-primary)`,onClick:t[11]||=e=>r.useTerminal?r.runConsoleCommand():r.runInteractiveCommand()},{default:I(()=>[r.consoleRunning?(Z(),H(l,{key:0,class:`is-loading`},{default:I(()=>[o(r.Loading)]),_:1})):(Z(),H(l,{key:1},{default:I(()=>[o(r.VideoPlay)]),_:1}))]),_:1},8,[`disabled`])]),R(` 命令历史输出 `),r.consoleHistory.length?(Z(),X(`div`,i_,[(Z(!0),X(Y,null,F(r.consoleHistory,e=>(Z(),X(`div`,{key:e.id,class:`console-record`},[U(`div`,{class:`cmd-header cursor-pointer`,onClick:t=>r.toggleCommandOutput(e)},[U(`div`,o_,[t[31]||=U(`span`,{class:`cmd-prefix`},`>`,-1),U(`span`,s_,z(e.command),1),e.directory?(Z(),X(`span`,{key:0,class:`cmd-dir`,title:e.directory},[o(l,{class:`cmd-dir-icon`},{default:I(()=>[o(r.Folder)]),_:1}),k(` `+z(e.directory),1)],8,c_)):R(`v-if`,!0),e.running?(Z(),H(l,{key:1,class:`running-icon is-loading`,color:`var(--color-primary)`},{default:I(()=>[o(r.Loading)]),_:1})):R(`v-if`,!0),U(`span`,l_,z(e.ts),1)]),U(`div`,u_,[o(c,{content:`重新执行`,placement:`top`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:ze(t=>r.rerunConsoleRecord(e),[`stop`]),class:`rerun-btn`},{default:I(()=>[o(l,null,{default:I(()=>[o(r.RefreshRight)]),_:1})]),_:2},1032,[`onClick`])]),_:2},1024),e.running?(Z(),H(c,{key:0,content:`停止命令`,placement:`top`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:ze(t=>e.isInteractive?r.stopInteractiveCommand(e):r.stopCommand(e),[`stop`]),class:`stop-btn`,type:`danger`},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Close)]),_:1})]),_:2},1032,[`onClick`])]),_:2},1024)):R(`v-if`,!0),o(s,{text:``,size:`small`,onClick:ze(t=>r.toggleCommandOutput(e),[`stop`]),disabled:!e.stdout&&!e.stderr,class:`toggle-output-btn`},{default:I(()=>[o(l,{class:K({"rotate-icon":!e.expanded})},{default:I(()=>[o(r.ArrowDown)]),_:2},1032,[`class`])]),_:2},1032,[`onClick`,`disabled`])])],8,a_),o(et,{name:`output-slide`},{default:I(()=>[e.expanded&&(e.stdout||e.stderr)?(Z(),X(`div`,d_,[e.stdout?(Z(),X(`pre`,{key:0,class:`stdout`,innerHTML:e.stdout},null,8,f_)):R(`v-if`,!0),e.stderr?(Z(),X(`pre`,{key:1,class:`stderr`,innerHTML:e.stderr},null,8,p_)):R(`v-if`,!0)])):R(`v-if`,!0)]),_:2},1024),R(` 每个交互式命令独立的 stdin 输入框 `),e.isInteractive&&e.running?(Z(),X(`div`,m_,[o(l,{class:`stdin-icon`},{default:I(()=>[o(r.Position)]),_:1}),o(d,{modelValue:e.stdinInput,"onUpdate:modelValue":t=>e.stdinInput=t,class:`stdin-input`,placeholder:`输入响应内容(如密码、确认等),按回车发送`,onKeydown:Te(ze(t=>r.sendStdinInput(e),[`prevent`]),[`enter`]),clearable:``,size:`small`},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),o(s,{type:`success`,onClick:t=>r.sendStdinInput(e),size:`small`},{default:I(()=>[...t[32]||=[k(`发送`)]]),_:2},1032,[`onClick`])])):R(`v-if`,!0)]))),128))])):R(`v-if`,!0)])]),_:1})]),_:1},512)])],2),R(` 自定义命令管理弹窗 `),o(r.CustomCommandManager,{visible:r.commandManagerVisible,"onUpdate:visible":t[12]||=e=>r.commandManagerVisible=e,fullscreen:!0,onExecuteCommand:r.executeCustomCommand},null,8,[`visible`]),R(` 可视化编排工作台(基于 vue-flow) `),o(r.FlowOrchestrationWorkspace,{visible:r.flowOrchestrationVisible,"onUpdate:visible":t[13]||=e=>r.flowOrchestrationVisible=e,onExecuteFlow:r.executeFlow,onOpenCommandManager:t[14]||=e=>r.commandManagerVisible=!0},null,8,[`visible`]),o(r.CommonDialog,{modelValue:r.userInputDialogVisible,"onUpdate:modelValue":t[15]||=e=>r.userInputDialogVisible=e,title:r.waitingUserInputTitle,size:`small`,type:`flex`,width:`520px`,"append-to-body":!0,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-footer":!0,"confirm-text":r.$t(`@803A9:确定`),"cancel-text":r.$t(`@803A9:取消`),onConfirm:r.confirmUserInput,onCancel:r.cancelUserInput},{default:I(()=>[U(`div`,h_,[r.userInputParams.length===0?(Z(),X(`div`,g_,z(r.$t(`@UINPUT:暂无输入参数`)),1)):(Z(),X(`div`,__,[(Z(!0),X(Y,null,F(r.userInputParams,e=>(Z(),X(`div`,{key:e.name,class:`user-input-row`},[U(`div`,v_,[e.required?(Z(),X(`span`,y_,`*`)):R(`v-if`,!0),k(` `+z(e.name),1)]),o(d,{modelValue:r.userInputValues[e.name],"onUpdate:modelValue":t=>r.userInputValues[e.name]=t,placeholder:e.name,clearable:``},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]))),128))]))])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`])],64)}var x_=$(og,[[`render`,b_],[`__scopeId`,`data-v-f56c993a`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/CommandConsole.vue`]]),S_=j({__name:`ConsoleView`,setup(e,{expose:t}){t();let n={CustomCommandsPanel:eg,CommandConsole:x_};return Object.defineProperty(n,`__isScriptSetup`,{enumerable:!1,value:!0}),n}}),C_={class:`console-view`},w_={class:`console-view__sidebar`},T_={class:`console-view__terminal`};function E_(e,t,n,r,i,a){return Z(),X(`div`,C_,[R(` 左侧:自定义命令快捷面板(手风琴竖向列表,折叠后只留 header 竖条) `),U(`aside`,w_,[o(r.CustomCommandsPanel)]),R(` 右侧:命令控制台(终端 + 自定义指令管理),占满剩余空间 `),U(`main`,T_,[o(r.CommandConsole)])])}var D_=$(S_,[[`render`,E_],[`__scopeId`,`data-v-862e14cf`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/views/ConsoleView.vue`]]),O_=`data:image/svg+xml,%3csvg%20width='200'%20height='200'%20viewBox='0%200%20200%20200'%20xmlns='http://www.w3.org/2000/svg'%3e%3cdefs%3e%3cradialGradient%20id='bgGrad'%20cx='38%25'%20cy='32%25'%20r='70%25'%3e%3cstop%20offset='0%25'%20stop-color='%231e1b4b'/%3e%3cstop%20offset='100%25'%20stop-color='%230d0b1e'/%3e%3c/radialGradient%3e%3clinearGradient%20id='mainGrad'%20x1='0%25'%20y1='0%25'%20x2='0%25'%20y2='100%25'%3e%3cstop%20offset='0%25'%20stop-color='%23c4b5fd'/%3e%3cstop%20offset='100%25'%20stop-color='%237c3aed'/%3e%3c/linearGradient%3e%3clinearGradient%20id='featGrad'%20x1='0%25'%20y1='0%25'%20x2='100%25'%20y2='100%25'%3e%3cstop%20offset='0%25'%20stop-color='%237dd3fc'/%3e%3cstop%20offset='100%25'%20stop-color='%230284c7'/%3e%3c/linearGradient%3e%3cfilter%20id='glow'%20x='-40%25'%20y='-40%25'%20width='180%25'%20height='180%25'%3e%3cfeGaussianBlur%20in='SourceGraphic'%20stdDeviation='2.5'%20result='blur'/%3e%3cfeMerge%3e%3cfeMergeNode%20in='blur'/%3e%3cfeMergeNode%20in='SourceGraphic'/%3e%3c/feMerge%3e%3c/filter%3e%3cfilter%20id='softGlow'%20x='-20%25'%20y='-20%25'%20width='140%25'%20height='140%25'%3e%3cfeGaussianBlur%20in='SourceGraphic'%20stdDeviation='1.5'%20result='blur'/%3e%3cfeMerge%3e%3cfeMergeNode%20in='blur'/%3e%3cfeMergeNode%20in='SourceGraphic'/%3e%3c/feMerge%3e%3c/filter%3e%3c/defs%3e%3c!--%20背景圆%20--%3e%3ccircle%20cx='100'%20cy='100'%20r='96'%20fill='url(%23bgGrad)'/%3e%3c!--%20同步外弧(上半,代表%20sync%20循环)%20--%3e%3cpath%20d='M%20100,20%20A%2080,80%200%201,1%2036,153'%20stroke='rgba(167,139,250,0.18)'%20stroke-width='4.5'%20fill='none'%20stroke-linecap='round'/%3e%3c!--%20同步外弧(下半)%20--%3e%3cpath%20d='M%2036,153%20A%2080,80%200%200,1%20164,153'%20stroke='rgba(56,189,248,0.18)'%20stroke-width='4.5'%20fill='none'%20stroke-linecap='round'/%3e%3c!--%20同步箭头(上)%20--%3e%3cpath%20d='M%2091,17%20L%20100,20%20L%2096,29'%20stroke='rgba(167,139,250,0.55)'%20stroke-width='2.5'%20fill='none'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c!--%20同步箭头(下)%20--%3e%3cpath%20d='M%20163,145%20L%20164,154%20L%20155,151'%20stroke='rgba(56,189,248,0.55)'%20stroke-width='2.5'%20fill='none'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c!--%20主分支竖线%20--%3e%3cline%20x1='76'%20y1='44'%20x2='76'%20y2='156'%20stroke='url(%23mainGrad)'%20stroke-width='5.5'%20stroke-linecap='round'%20filter='url(%23softGlow)'/%3e%3c!--%20特性分支曲线(分出)%20--%3e%3cpath%20d='M%2076,80%20C%2098,80%20130,96%20130,120%20L%20130,140'%20stroke='url(%23featGrad)'%20stroke-width='4.5'%20fill='none'%20stroke-linecap='round'%20filter='url(%23softGlow)'/%3e%3c!--%20特性分支合并回主分支%20--%3e%3cpath%20d='M%20130,140%20C%20130,156%20105,159%2076,155'%20stroke='url(%23featGrad)'%20stroke-width='4.5'%20fill='none'%20stroke-linecap='round'/%3e%3c!--%20主分支节点%20--%3e%3ccircle%20cx='76'%20cy='48'%20r='11'%20fill='%2313103a'%20stroke='%23c4b5fd'%20stroke-width='3'%20filter='url(%23glow)'/%3e%3ccircle%20cx='76'%20cy='48'%20r='5'%20fill='%23ddd6fe'/%3e%3ccircle%20cx='76'%20cy='84'%20r='11'%20fill='%2313103a'%20stroke='%23a78bfa'%20stroke-width='3'/%3e%3ccircle%20cx='76'%20cy='84'%20r='5'%20fill='%23c4b5fd'/%3e%3ccircle%20cx='76'%20cy='120'%20r='11'%20fill='%2313103a'%20stroke='%238b5cf6'%20stroke-width='3'/%3e%3ccircle%20cx='76'%20cy='120'%20r='5'%20fill='%23a78bfa'/%3e%3ccircle%20cx='76'%20cy='155'%20r='11'%20fill='%2313103a'%20stroke='%237c3aed'%20stroke-width='3'%20filter='url(%23glow)'/%3e%3ccircle%20cx='76'%20cy='155'%20r='5'%20fill='%238b5cf6'/%3e%3c!--%20特性分支节点%20--%3e%3ccircle%20cx='130'%20cy='115'%20r='11'%20fill='%2313103a'%20stroke='%2338bdf8'%20stroke-width='3'%20filter='url(%23glow)'/%3e%3ccircle%20cx='130'%20cy='115'%20r='5'%20fill='%237dd3fc'/%3e%3ccircle%20cx='130'%20cy='143'%20r='11'%20fill='%2313103a'%20stroke='%230ea5e9'%20stroke-width='3'%20filter='url(%23glow)'/%3e%3ccircle%20cx='130'%20cy='143'%20r='5'%20fill='%2338bdf8'/%3e%3c/svg%3e`,k_=j({__name:`App`,setup(e,{expose:t}){t();let n=rt(()=>Ct(()=>import(`./CommitForm-CTa0pupJ.js`),__vite__mapDeps([24,4,5,1,0,2,6,7,8,9,10,11,12,13,25]))),r=rt(()=>Ct(()=>import(`./LogList-B4rrapVn.js`),__vite__mapDeps([26,4,5,1,0,2,6,7,8,9,10,11,12,27]))),i=rt(()=>Ct(()=>import(`./RemoteRepoCard-B-5MDx8k.js`),__vite__mapDeps([28,4,5,1,0,2,6,7,8,10,11,29]))),a=rt(()=>Ct(()=>import(`./AppVersionBadge-Cwg6vOMz.js`),__vite__mapDeps([30,4,5,1,0,2,6,7,8,31]))),o=rt(()=>Ct(()=>import(`./BranchSelector-DgxIB9XY.js`),__vite__mapDeps([32,4,5,1,0,2,6,7,8,9,10,11,12,33]))),s={loadingComponent:Em,delay:200},c=rt({loader:()=>Ct(()=>import(`./EditorView-BOZPwTxr.js`),__vite__mapDeps([34,4,5,1,0,2,6,7,8,35,36,13,37])),...s}),l=rt({loader:()=>Ct(()=>import(`./SourceMapView-C3gZ5s1r.js`),__vite__mapDeps([38,4,5,1,0,2,6,7,8,16,17,18,13,39])),...s}),u=rt({loader:()=>Ct(()=>import(`./WorkbenchView-BE53JHac.js`),__vite__mapDeps([40,4,5,1,0,2,6,7,8,13,41])),...s}),d=rt({loader:()=>Ct(()=>import(`./MonitorView-C2EyggDk.js`),__vite__mapDeps([42,4,5,1,0,2,6,7,8,43])),...s}),m=rt({loader:()=>Ct(()=>import(`./MindmapView-C1pPUu8W.js`),__vite__mapDeps([44,4,5,1,0,2,6,7,8,35,36,13,45])),...s}),h=rt({loader:()=>Ct(()=>import(`./AgentView-CioAzh-a.js`),__vite__mapDeps([46,4,5,1,0,2,6,7,8,13,47])),...s}),g=J(``),v=J(null),y=Ht(),x=xt(),S=bt(),C=mp(),te=Wt(),w=J(!1),T=G(()=>x.currentDirectory),re=G(()=>{let e=x.models.find(e=>e.isDefault);return e?e.name||e.model:``});function ae(){let e=Ot(T.value);document.title=`${e} - Zen GitSync`}b(T,()=>{ae()},{immediate:!0});function E(){x.config&&(g.value=`${Q(`@F13B4:默认提交信息: `)}${x.config.defaultCommitMessage}`)}async function D(){try{let e=await(await fetch(`/api/current_directory`)).json();return x.setCurrentDirectory(e.directory||Q(`@F13B4:未知目录`)),e}catch(e){return console.error(`获取当前目录失败:`,e),{directory:Q(`@F13B4:未知目录`),isGitRepo:!1}}}ee(async()=>{console.log(Q(`@F13B4:---------- 页面初始化开始 ----------`)),Gp().start(),C.start(),te.startPolling();try{let e=await D();x.isLoaded||await x.loadConfig(),E(),y.isGitRepo=e.isGitRepo===!0,y.lastCheckedTime=Date.now(),y.isGitRepo?(await Promise.all([y.getCurrentBranch(!0),y.getAllBranches(),y.getUserInfo(),y.getRemoteUrl(),y.getBranchStatus(!0)]),setTimeout(()=>{y.bootFetch().catch(e=>{console.warn(`[App] 启动静默 fetch 异常(已忽略):`,e)})},3e3)):W.warning(Q(`@F13B4:当前目录不是Git仓库,部分功能将不可用`))}catch(e){console.error(`初始化失败:`,e)}finally{w.value=!0,console.log(Q(`@F13B4:---------- 页面初始化完成 ----------`)),setTimeout(()=>{ve()},100)}}),f(()=>{C.stop(),te.stopPolling(),Gp().stop()});function O(){ve()}window.addEventListener(`ui-layout-reset`,O),f(()=>{window.removeEventListener(`ui-layout-reset`,O)}),b(()=>y.isGitRepo,()=>{ne(()=>ve())});function oe(){v.value&&v.value.refreshStatus()}let se=J(`git`),ce=J(null);b(se,e=>{e===`git`&&v.value&&y.isGitRepo&&Promise.all([y.fetchStatus(),y.getBranchStatus()]).catch(e=>console.error(`切换到Git视图刷新失败:`,e))});let k={value:null};function le(e){let t=e.detail;console.log(`[debug-open-in-editor] App.vue handleOpenFileInEditor fired, detail=`,t),t?.filePath&&(ce.value=t.filePath,se.value=`editor`,console.log(`[debug-open-in-editor] App.vue set pendingEditorFilePath=`,t.filePath,`activeView=editor`),k.value!==null&&clearTimeout(k.value),k.value=window.setTimeout(()=>{ce.value=null,k.value=null},500))}window.addEventListener(`zen-gitsync:open-file-in-editor`,le),f(()=>{window.removeEventListener(`zen-gitsync:open-file-in-editor`,le)});let A=J(!1);function j(){A.value=!0}let{theme:ue}=Gn(),N=!1,P=!1,F=0,fe=0,pe=``,me=``,I=null,he=null,ge=null;function _e(){let e=document.querySelector(`.grid-layout`);if(!e||!y.isGitRepo)return;let t=getComputedStyle(e).gridTemplateColumns.split(` `),n=getComputedStyle(e).gridTemplateRows.split(` `);if(t.length>=3&&n.length>=3){let e=parseFloat(t[0]),r=e/(e+parseFloat(t[2])),i=parseFloat(n[0]),a=i/(i+parseFloat(n[2]));x.ui.layout={...x.ui.layout,leftRatio:r,topRatio:a},console.log(`${Q(`@F13B4:布局比例已保存 - 左侧: `)}${(r*100).toFixed(0)}${Q(`@F13B4:%, 上方: `)}${(a*100).toFixed(0)}%`)}}function ve(){let e=document.querySelector(`.grid-layout`);if(!e)return;if(!y.isGitRepo){e.style.gridTemplateRows=``,z();return}let t=x.ui.layout,n=Number.isFinite(t?.leftRatio)?t.leftRatio:null,r=Number.isFinite(t?.topRatio)?t.topRatio:null;if(n==null?e.style.gridTemplateColumns=`0.25fr 4px 0.75fr`:e.style.gridTemplateColumns=`${n}fr 4px ${1-n}fr`,r!=null){let t=1-r;e.style.gridTemplateRows=`${r}fr 4px ${t}fr`}else e.style.gridTemplateRows=``;z()}function L(){let e=document.querySelector(`.grid-layout`);if(!e)return{left:25,top:50};let t=getComputedStyle(e).gridTemplateColumns.split(` `),n=getComputedStyle(e).gridTemplateRows.split(` `),r=parseFloat(t[0]??`0`),i=r+parseFloat(t[2]??`0`)||1,a=parseFloat(n[0]??`0`),o=a+parseFloat(n[2]??`0`)||1;return{left:Math.round(r/i*100),top:Math.round(a/o*100)}}let be=J(25),R=J(50);function z(){let e=L();be.value=e.left,R.value=e.top}function xe(e){let t=document.querySelector(`.grid-layout`);if(!t)return;let n=getComputedStyle(t).gridTemplateColumns.split(` `);if(n.length<3)return;let r=parseFloat(n[0]),i=r/(r+parseFloat(n[2])||1)*100+e;i=Math.min(40,Math.max(8,i)),t.style.gridTemplateColumns=`${i}fr 4px ${100-i}fr`,z(),_e()}function Se(e){let t=document.querySelector(`.grid-layout`);if(!t)return;let n=getComputedStyle(t).gridTemplateRows.split(` `);if(n.length<3)return;let r=parseFloat(n[0]),i=r/(r+parseFloat(n[2])||1)*100+e;i=Math.min(80,Math.max(20,i)),t.style.gridTemplateRows=`${i}fr 4px ${100-i}fr`,z(),_e()}function Ce(e){I=e,he===null&&(he=requestAnimationFrame(()=>{he=null,we()}))}function B(e){N=!0,F=e.clientX;let t=document.querySelector(`.grid-layout`);pe=getComputedStyle(t).gridTemplateColumns,document.getElementById(`v-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,Ce),document.addEventListener(`mouseup`,Te),e.preventDefault()}function we(){if(!N)return;let e=I;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientX-F,r=pe.split(` `);if(r.length>=3){let e=parseFloat(r[0]),i=e+parseFloat(r[2]),a=(e+n/t.clientWidth*i)/i,o=.08,s=.4;a<o?t.style.gridTemplateColumns=`${o}fr 4px ${1-o}fr`:a>s?t.style.gridTemplateColumns=`${s}fr 4px ${1-s}fr`:t.style.gridTemplateColumns=`${a}fr 4px ${1-a}fr`}}function Te(){N=!1,document.getElementById(`v-resizer`)?.classList.remove(`active`),he!==null&&(cancelAnimationFrame(he),he=null),document.removeEventListener(`mousemove`,Ce),document.removeEventListener(`mouseup`,Te),_e()}function Ee(e){P=!0,fe=e.clientY;let t=document.querySelector(`.grid-layout`);me=getComputedStyle(t).gridTemplateRows,document.getElementById(`h-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,De),document.addEventListener(`mouseup`,ke),e.preventDefault()}function De(e){I=e,ge===null&&(ge=requestAnimationFrame(()=>{ge=null,Oe()}))}function Oe(){if(!P)return;let e=I;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientY-fe,r=me.split(` `);if(r.length>=3){let e=parseFloat(r[0]),i=e+parseFloat(r[2]),a=(e+n/t.clientHeight*i)/i,o=1-a,s=.2,c=.8;a<s?t.style.gridTemplateRows=`${s}fr 4px ${1-s}fr`:a>c?t.style.gridTemplateRows=`${c}fr 4px ${1-c}fr`:t.style.gridTemplateRows=`${a}fr 4px ${o}fr`}}function ke(){P=!1,document.getElementById(`h-resizer`)?.classList.remove(`active`),ge!==null&&(cancelAnimationFrame(ge),ge=null),document.removeEventListener(`mousemove`,De),document.removeEventListener(`mouseup`,ke),_e()}let Ae={CommitForm:n,LogList:r,RemoteRepoCard:i,AppVersionBadge:a,BranchSelector:o,asyncOpts:s,EditorView:c,SourceMapView:l,WorkbenchView:u,MonitorView:d,MindmapView:m,AgentView:h,configInfo:g,gitStatusRef:v,gitStore:y,configStore:x,localeStore:S,instancesStore:C,toolsStore:te,initCompleted:w,currentDirectory:T,defaultModelName:re,updateDocumentTitle:ae,updateConfigInfo:E,loadCurrentDirectory:D,handleUiLayoutReset:O,handleBranchChanged:oe,activeView:se,pendingEditorFilePath:ce,pendingEditorTimer:k,handleOpenFileInEditor:le,userSettingsDialogVisible:A,openUserSettingsDialog:j,isDarkTheme:ue,get isVResizing(){return N},set isVResizing(e){N=e},get isHResizing(){return P},set isHResizing(e){P=e},get initialX(){return F},set initialX(e){F=e},get initialY(){return fe},set initialY(e){fe=e},get initialGridTemplateColumns(){return pe},set initialGridTemplateColumns(e){pe=e},get initialGridTemplateRows(){return me},set initialGridTemplateRows(e){me=e},get lastMouseEvent(){return I},set lastMouseEvent(e){I=e},get vResizeRafId(){return he},set vResizeRafId(e){he=e},get hResizeRafId(){return ge},set hResizeRafId(e){ge=e},saveLayoutRatios:_e,loadLayoutRatios:ve,readGridPercents:L,gridLeftPercent:be,gridTopPercent:R,refreshGridPercents:z,nudgeV:xe,nudgeH:Se,scheduleVResize:Ce,startVResize:B,handleVResize:we,stopVResize:Te,startHResize:Ee,scheduleHResize:De,handleHResize:Oe,stopHResize:ke,get $t(){return Q},GitStatus:lu,DirectorySelector:Nu,UserSettingsDialog:Kf,ActivityBar:dp,InstanceSwitcher:Ap,AppErrorBanner:nm,RecentProjectsList:bm,ConsoleView:D_,get ElConfigProvider(){return ie},get ElButton(){return M},get ElTooltip(){return p},get ElIcon(){return V},get Setting(){return _},get WarningFilled(){return ye},get Sunny(){return de},get Moon(){return Le},get logo(){return O_}};return Object.defineProperty(Ae,`__isScriptSetup`,{enumerable:!1,value:!0}),Ae}}),A_={class:`main-header app-header`},j_={class:`header-left`},M_={href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,class:`header-brand-link`},N_=[`src`],P_={class:`header-center`},F_={class:`header-info`},I_={key:0,class:`header-actions`},L_=[`aria-label`,`aria-pressed`],R_={id:`user-info`,class:`user-info-card`},z_={class:`user-name`},B_={class:`user-label`},V_={class:`user-warning`},H_=[`aria-label`],U_={key:0,class:`config-broken-banner`,role:`alert`,"aria-live":`polite`},W_={class:`banner-left`},G_={class:`banner-text`},K_={class:`banner-title`},q_={class:`banner-detail`},J_={key:1,class:`banner-path`},Y_={class:`banner-actions`},X_={key:0,class:`loading-container`},Z_={class:`loading-card`,role:`status`,"aria-live":`polite`},Q_={class:`loading-text`},$_={class:`loading-text__label`},ev={key:1,class:`app-body`},tv={class:`git-status-panel`},nv=[`aria-label`,`aria-valuenow`],rv={key:0,class:`commit-form-panel`},iv={key:0,class:`state-block state-block--warning user-unconfigured-card`},av={class:`state-block__title user-unconfigured-title`},ov={class:`state-block__hint user-unconfigured-desc`},sv={class:`user-unconfigured-actions`},cv={class:`user-unconfigured-divider`},lv={class:`user-unconfigured-code`},uv={key:1,class:`commit-form-panel commit-form-panel--empty`},dv=[`aria-label`,`aria-valuenow`],fv={class:`log-list-panel`},pv={class:`view-pane console-pane`},mv={class:`view-pane editor-pane`},hv={class:`view-pane source-map-pane`},gv={class:`view-pane workbench-pane`},_v={class:`view-pane monitor-pane`},vv={class:`view-pane mindmap-pane`},yv={class:`view-pane agent-pane`},bv={class:`main-footer app-footer`},xv={key:0,class:`footer-model-hint`},Sv={class:`footer-model-hint__label`},Cv={class:`footer-model-hint__name`};function wv(e,t,n,r,i,a){return Z(),H(r.ElConfigProvider,{locale:r.localeStore.elementPlusLocale},{default:I(()=>[R(` OPT-5: 全局网络错误横幅(header 下方置顶,不影响主区布局) `),o(r.AppErrorBanner),U(`header`,A_,[U(`div`,j_,[U(`a`,M_,[U(`img`,{src:r.logo,alt:`Zen GitSync Logo`,class:`logo`},null,8,N_),t[8]||=U(`h1`,null,`Zen GitSync`,-1)])]),U(`div`,P_,[o(r.DirectorySelector,{variant:`header`})]),U(`div`,F_,[R(` 顶部右侧动作 `),r.gitStore.isGitRepo?(Z(),X(`div`,I_,[R(` <CommandHistory /> `)])):R(`v-if`,!0),R(` 实例切换器:显示所有运行中的 GUI 项目 `),o(r.InstanceSwitcher),R(` 主题切换快捷按钮(OPT-2:原本要进设置→通用→主题 4 次点击,现在 1 次) `),o(r.ElTooltip,{content:r.isDarkTheme?r.$t(`@F13B4:切换到浅色主题`):r.$t(`@F13B4:切换到深色主题`),placement:`bottom`,effect:`dark`,"show-after":200},{default:I(()=>[U(`button`,{class:`modern-btn btn-icon-32 theme-toggle-btn`,"aria-label":r.isDarkTheme?r.$t(`@F13B4:切换到浅色主题`):r.$t(`@F13B4:切换到深色主题`),"aria-pressed":r.isDarkTheme?`true`:`false`,onClick:t[0]||=e=>r.configStore.toggleTheme()},[o(r.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:I(()=>[r.isDarkTheme?(Z(),H(r.Moon,{key:0})):(Z(),H(r.Sunny,{key:1}))]),_:1})],8,L_)]),_:1},8,[`content`]),R(` 用户信息 `),U(`div`,R_,[r.gitStore.userName?(Z(),H(r.ElTooltip,{key:0,content:r.gitStore.userEmail||r.gitStore.userName,placement:`bottom`,effect:`dark`,"show-after":200},{default:I(()=>[U(`span`,z_,z(r.gitStore.userName),1)]),_:1},8,[`content`])):(Z(),X(Y,{key:1},[U(`span`,B_,z(r.$t(`@F13B4:用户: `)),1),U(`span`,V_,z(r.$t(`@F13B4:未配置`)),1)],64)),o(r.ElTooltip,{content:r.$t(`@F13B4:用户设置`),placement:`bottom`,effect:`dark`,"show-after":200},{default:I(()=>[U(`button`,{class:`modern-btn btn-icon-28`,"aria-label":r.$t(`@F13B4:用户设置`),onClick:r.openUserSettingsDialog},[o(r.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Setting)]),_:1})],8,H_)]),_:1},8,[`content`])])])]),r.configStore.hasConfigLoadError?(Z(),X(`div`,U_,[U(`div`,W_,[o(r.ElIcon,{class:`banner-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.WarningFilled)]),_:1}),U(`div`,G_,[U(`span`,K_,z(r.$t(`@CFGERR:系统配置文件有问题`)),1),r.configStore.configLoadError?(Z(),H(r.ElTooltip,{key:0,content:r.configStore.configLoadError,placement:`bottom`,effect:`dark`,"show-after":200},{default:I(()=>[U(`span`,q_,z(r.$t(`@CFGERR:查看原因`)),1)]),_:1},8,[`content`])):R(`v-if`,!0),r.configStore.configFilePath?(Z(),X(`span`,J_,z(r.configStore.configFilePath),1)):R(`v-if`,!0)])]),U(`div`,Y_,[o(r.ElButton,{size:`small`,type:`warning`,onClick:t[1]||=e=>r.configStore.openSystemConfigFile()},{default:I(()=>[k(z(r.$t(`@CFGERR:打开系统配置文件`)),1)]),_:1})])])):R(`v-if`,!0),U(`main`,{class:`main-container`,style:Pe({top:r.configStore.hasConfigLoadError?`104px`:`64px`})},[r.initCompleted?(Z(),X(`div`,ev,[R(` VS Code 风格活动栏 `),o(r.ActivityBar,{activeView:r.activeView,"onUpdate:activeView":t[2]||=e=>r.activeView=e},null,8,[`activeView`]),R(` Git 视图:2 列布局 — 左 GitStatus | 右(上 commit-form / h-resizer / 下 log-list)
64
+ `);for(let t of e)if(t.startsWith(`data: `))try{let e=JSON.parse(t.substring(6));e.type===`stdout`?r.stdout=(r.stdout||``)+B(e.data):e.type===`stderr`?r.stderr=(r.stderr||``)+B(e.data):e.type===`exit`&&(r.success=e.data.success,r.running=!1)}catch(e){console.warn(`解析剩余SSE数据失败:`,e)}S.value=[...S.value]}console.log(`[前端-自定义] 流读取完成,正常退出`)}catch(e){console.error(`[前端-自定义] 捕获异常:`,e),r.success=!1,r.running=!1,r.stderr=e?.message||String(e)}finally{console.log(`[前端-自定义] finally块执行,设置consoleRunning=false`),y.value=!1,Z(n)&&(await c.fetchStatus(),await c.fetchLog())}}async function dt(){let e=_.value.trim();!e||y.value||(_.value=``,await ft(e))}async function ft(e,t=g.value){y.value=!0;let n=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,r={id:++C,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0,sessionId:n,isInteractive:!0,stdinInput:``};if(S.value.unshift(r),!h.value||!h.value.connected){W.error(`Socket 连接未建立,无法执行交互式命令`),y.value=!1,r.running=!1,r.stderr=`Socket 连接未建立`;return}h.value.emit(`exec_interactive`,{command:e,directory:t,sessionId:n});let i=e=>{e.sessionId===n&&(r.processId=e.processId,console.log(`[交互式] 收到进程ID:`,r.processId),S.value=[...S.value])},a=e=>{e.sessionId===n&&(r.stdout=(r.stdout||``)+B(e.data),y.value=!1,S.value=[...S.value])},o=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+B(e.data),y.value=!1,S.value=[...S.value])},s=e=>{e.sessionId===n&&(r.success=e.success,r.running=!1,console.log(`[交互式] 进程退出,成功:`,r.success),S.value=[...S.value],h.value?.off(`interactive_process_id`,i),h.value?.off(`interactive_stdout`,a),h.value?.off(`interactive_stderr`,o),h.value?.off(`interactive_exit`,s),h.value?.off(`interactive_error`,c))},c=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+`错误: ${e.error}\n`,r.running=!1,r.success=!1,S.value=[...S.value],h.value?.off(`interactive_process_id`,i),h.value?.off(`interactive_stdout`,a),h.value?.off(`interactive_stderr`,o),h.value?.off(`interactive_exit`,s),h.value?.off(`interactive_error`,c))};h.value.on(`interactive_process_id`,i),h.value.on(`interactive_stdout`,a),h.value.on(`interactive_stderr`,o),h.value.on(`interactive_exit`,s),h.value.on(`interactive_error`,c),y.value=!1}function pt(e){let t=e.stdinInput?.trim();if(!(!t||!e.sessionId)){if(!h.value||!h.value.connected){W.error(`Socket 连接未建立`);return}console.log(`[交互式] 发送 stdin 输入:`,t),h.value.emit(`interactive_stdin_${e.sessionId}`,{input:t}),e.stdinInput=``,S.value=[...S.value]}}function mt(e){if(!e.sessionId||!e.running){W.warning(`命令已经结束`);return}if(!h.value||!h.value.connected){W.error(`Socket 连接未建立`);return}console.log(`[交互式] 停止命令:`,e.sessionId),h.value.emit(`interactive_stop_${e.sessionId}`),e.running=!1,S.value=[...S.value]}b(H,e=>{e&&Ke(!0)});function ht(){let e=`http://localhost:${p}`;console.log(`[控制台] 连接到 Socket.IO:`,e),h.value=yt(e,{transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1e3,reconnectionAttempts:5}),h.value.on(`connect`,()=>{console.log(`[控制台] Socket.IO 已连接`)}),h.value.on(`disconnect`,()=>{console.log(`[控制台] Socket.IO 已断开`)}),h.value.on(`connect_error`,e=>{console.error(`[控制台] Socket.IO 连接错误:`,e)})}let $=()=>{H.value&&V()},bt=()=>{document.visibilityState===`visible`&&H.value&&(console.log(`[页面可见性] 标签页已激活,刷新终端会话状态`),Ke(!0))},St=()=>{H.value&&(console.log(`[窗口焦点] 浏览器窗口已激活,刷新终端会话状态`),Ke(!0))};ee(async()=>{try{g.value=(await(await fetch(`/api/current_directory`)).json())?.directory||``}catch{}ht(),await s.loadConfig(!1),await V(),await Be(),document.addEventListener(`visibilitychange`,bt),window.addEventListener(`focus`,St),window.addEventListener(`zen-gitsync:after-quick-push-success`,u),window.addEventListener(`zen-gitsync:terminal-session-created`,$)}),oe(()=>{document.removeEventListener(`visibilitychange`,bt),window.removeEventListener(`focus`,St),window.removeEventListener(`zen-gitsync:after-quick-push-success`,u),window.removeEventListener(`zen-gitsync:terminal-session-created`,$),h.value&&=(h.value.disconnect(),null),Je()}),v(()=>{Je()}),T(()=>{Pe.value>0&&(Ke(!0),Ye())});let wt={CustomCommandManager:n,ProjectStartupButton:r,FlowOrchestrationWorkspace:a,FlowExecutionViewer:o,configStore:s,gitStore:c,terminalSessionsStore:l,handleAfterQuickPushSuccessEvent:u,runWorkflow:d,executeFlow:f,backendPort:p,socket:h,currentDirectory:g,consoleInput:_,consoleRunning:y,orchestrationPaused:x,consoleHistory:S,get consoleIdCounter(){return C},set consoleIdCounter(e){C=e},clearConsoleHistory:te,continueAfterTerminal:w,stopAfterTerminal:re,continueUserConfirm:ie,stopUserConfirm:E,orchestrationSteps:D,currentStepIndex:O,executionFlowData:ce,showExecutionFlowPanel:k,currentExecutingNodeId:le,executedNodeIds:A,executedEdgeIds:j,failedNodeIds:M,currentOrchestrationName:N,currentOrchestrationId:de,waitingForTerminalConfirm:P,waitingStepName:F,get terminalConfirmResolve(){return fe},set terminalConfirmResolve(e){fe=e},waitingForUserConfirm:pe,waitingConfirmMessage:I,get userConfirmResolve(){return he},set userConfirmResolve(e){he=e},waitingForUserInput:ve,waitingUserInputTitle:L,userInputParams:ye,userInputValues:be,get userInputResolve(){return R},set userInputResolve(e){R=e},userInputDialogVisible:z,confirmUserInput:xe,cancelUserInput:Se,ansiToHtml:B,isFullscreen:Te,useTerminal:De,terminalSessions:Oe,terminalSessionsLoading:ke,loadTerminalSessions:V,restartTerminalSession:Ae,deleteTerminalSession:je,upsertTerminalSession:Ne,showTerminalSessions:H,terminalSessionsCount:Pe,startupAutoRunTriggered:Fe,sleep:U,waitForSocketConnected:Ie,runStartupCommandById:Le,runStartupWorkflow:Re,runAfterQuickPushAction:ze,autoRunProjectStartupItems:Be,clampPercent:Ve,splitPercent:K,splitterRef:He,getSplitterWidth:Ue,updateSplitFromDom:We,panelSize:Ge,loadTerminalSessionsStatus:Ke,TERMINAL_POLL_INTERVAL_MS:ag,get terminalPollTimer(){return qe},set terminalPollTimer(e){qe=e},stopTerminalPolling:Je,startTerminalPolling:Ye,getLastDirName:Xe,commandManagerVisible:Qe,flowOrchestrationVisible:q,runConsoleCommand:$e,runConsoleCommandWithCmd:et,closeConsoleRecord:tt,rerunConsoleRecord:Y,toggleCommandOutput:X,stopCommand:it,openCommandManager:at,openFlowOrchestrationWorkspace:ot,scrollToCurrentStep:st,isGitCommand:Z,extractVersionFromOutput:ct,executeOrchestration:lt,executeCustomCommand:ut,runInteractiveCommand:dt,runInteractiveCommandWithCmd:ft,sendStdinInput:pt,stopInteractiveCommand:mt,initSocket:ht,handleExternalTerminalCreated:$,handleVisibilityChange:bt,handleWindowFocus:St,get ArrowDown(){return ge},get FullScreen(){return we},get VideoPlay(){return _e},get Loading(){return ue},get Close(){return Ce},get Position(){return ae},get Monitor(){return i},get Document(){return Me},get Timer(){return m},get Ticket(){return me},get Delete(){return Ee},get RefreshRight(){return se},get Folder(){return nt},SvgIcon:gt,IconButton:_t,CommonDialog:vt,get $t(){return Q}};return Object.defineProperty(wt,`__isScriptSetup`,{enumerable:!1,value:!0}),wt}}),sg={class:`console-header`},cg={class:`header-left`},lg={class:`console-title`},ug={class:`header-actions`},dg={key:0,class:`execution-controls`},fg={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},pg={class:`console-content`},mg={class:`termial-session`},hg={key:0,class:`terminal-sessions-panel`},gg={class:`terminal-sessions-header`},_g={class:`terminal-sessions-title`},vg={class:`terminal-sessions-count`},yg={class:`terminal-sessions-actions`},bg={class:`terminal-sessions-body`},xg={key:0,class:`terminal-sessions-empty`},Sg={key:1,class:`terminal-sessions-list`},Cg={class:`terminal-session-main`},wg=[`title`],Tg={class:`terminal-session-pid`},Eg={class:`terminal-session-meta`},Dg={class:`terminal-session-dir`},Og={class:`terminal-session-actions`},kg={key:1,class:`terminal-sessions-collapsed`},Ag={class:`console-content-main`},jg={key:0,class:`orchestration-flow-panel`},Mg={class:`flow-panel-header`},Ng={class:`flow-panel-title`},Pg={key:1,class:`orchestration-steps-panel`},Fg={class:`steps-header`},Ig={class:`steps-title`},Lg={key:0,class:`steps-orchestration`},Rg={key:0,class:`steps-list`},zg={class:`step-indicator`},Bg={key:4,class:`step-number`},Vg={class:`step-content`},Hg={class:`step-header`},Ug={key:0,class:`step-terminal-tag`,title:`终端执行`},Wg={key:1,class:`step-disabled-tag`},Gg={class:`step-name`},Kg={key:1,class:`terminal-waiting-panel`},qg={class:`waiting-content`},Jg={class:`waiting-text`},Yg={class:`waiting-desc`},Xg={class:`waiting-actions`},Zg={key:2,class:`terminal-waiting-panel user-confirm-panel`},Qg={class:`waiting-content`},$g={class:`waiting-text`},e_={class:`waiting-desc`},t_={class:`waiting-actions`},n_={class:`console-input-row`},r_=[`title`],i_={key:2,class:`console-output`},a_=[`onClick`],o_={class:`cmd-line`},s_={class:`cmd-text`},c_=[`title`],l_={class:`ts`},u_={class:`cmd-actions`},d_={key:0,class:`output-content`},f_=[`innerHTML`],p_=[`innerHTML`],m_={key:0,class:`stdin-input-row`},h_={class:`user-input-dialog-content`},g_={key:0,class:`user-input-empty`},__={key:1,class:`user-input-form`},v_={class:`user-input-label`},y_={key:0,class:`required`};function b_(e,t,n,r,i,a){let s=M,c=p,l=V,u=Qe,d=Ye,f=We,m=xe;return Z(),X(Y,null,[R(` 自定义指令执行控制台 `),U(`div`,{class:K([`command-console`,{fullscreen:r.isFullscreen}])},[R(` 标题栏 `),U(`div`,sg,[U(`div`,cg,[t[16]||=U(`span`,{class:`console-window-dots`},[U(`span`,{class:`dot dot-red`}),U(`span`,{class:`dot dot-yellow`}),U(`span`,{class:`dot dot-green`})],-1),U(`span`,lg,z(r.$t(`@CF05E:自定义指令执行`)),1)]),U(`div`,ug,[R(` 编排暂停/继续按钮 `),r.consoleRunning?(Z(),X(`div`,dg,[o(c,{content:r.orchestrationPaused?`继续执行`:`暂停执行`,placement:`bottom`},{default:I(()=>[o(s,{type:r.orchestrationPaused?`success`:`warning`,size:`small`,onClick:t[0]||=e=>r.orchestrationPaused=!r.orchestrationPaused,class:`pause-btn`},{icon:I(()=>[r.orchestrationPaused?(Z(),H(r.VideoPlay,{key:0})):(Z(),H(r.Loading,{key:1}))]),default:I(()=>[k(` `+z(r.orchestrationPaused?`继续`:`暂停`),1)]),_:1},8,[`type`])]),_:1},8,[`content`]),o(c,{content:`停止执行`,placement:`bottom`},{default:I(()=>[o(s,{type:`danger`,size:`small`,onClick:t[1]||=e=>{r.consoleRunning=!1,r.orchestrationPaused=!1,r.currentStepIndex=-1,r.orchestrationSteps=[]},class:`stop-btn`},{icon:I(()=>[o(r.Close)]),default:I(()=>[t[17]||=k(` 停止 `)]),_:1})]),_:1})])):R(`v-if`,!0),r.consoleHistory.length>0?(Z(),H(r.IconButton,{key:1,tooltip:`清空执行历史`,"hover-color":`var(--color-danger)`,onClick:r.clearConsoleHistory,"custom-class":`clear-history-btn`},{default:I(()=>[o(l,{size:18},{default:I(()=>[o(r.Delete)]),_:1})]),_:1})):R(`v-if`,!0),o(r.IconButton,{tooltip:r.$t(`@CF05E:使用终端执行`),active:r.useTerminal,onClick:t[2]||=e=>r.useTerminal=!r.useTerminal,"custom-class":`terminal-toggle-btn`},{default:I(()=>[o(l,{size:20},{default:I(()=>[o(r.Monitor)]),_:1})]),_:1},8,[`tooltip`,`active`]),o(r.IconButton,{tooltip:r.$t(`@CF05E:自定义命令管理`),"hover-color":`var(--color-success)`,onClick:r.openCommandManager,"custom-class":`command-manager-btn`},{default:I(()=>[o(r.SvgIcon,{"icon-class":`command-list`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),o(r.ProjectStartupButton,{onExecuteCommand:r.executeCustomCommand,onExecuteWorkflow:t[3]||=e=>r.runWorkflow(e)}),o(r.IconButton,{tooltip:r.$t(`@ORCH:可视化编排`),"hover-color":`#9c27b0`,onClick:r.openFlowOrchestrationWorkspace,"custom-class":`flow-orchestrator-btn`},{default:I(()=>[o(r.SvgIcon,{"icon-class":`workflow`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),o(r.IconButton,{tooltip:r.isFullscreen?r.$t(`@CF05E:退出全屏`):r.$t(`@CF05E:全屏显示`),onClick:t[4]||=e=>r.isFullscreen=!r.isFullscreen},{default:I(()=>[r.isFullscreen?(Z(),X(`svg`,fg,t[18]||=[U(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)])):(Z(),H(l,{key:0},{default:I(()=>[o(r.FullScreen)]),_:1}))]),_:1},8,[`tooltip`])])]),R(` 内容区域 `),U(`div`,pg,[o(f,{ref:`splitterRef`,layout:`horizontal`,style:{height:`100%`},onResize:r.updateSplitFromDom,onResizeEnd:r.updateSplitFromDom},{default:I(()=>[o(u,{size:r.panelSize,"onUpdate:size":t[7]||=e=>r.panelSize=e,min:`15%`,max:`85%`},{default:I(()=>[U(`div`,mg,[r.showTerminalSessions?(Z(),X(`div`,hg,[U(`div`,gg,[U(`div`,_g,[U(`span`,null,z(r.$t(`@CMDCON:终端会话`)),1),U(`span`,vg,`(`+z(r.terminalSessionsCount)+`)`,1)]),U(`div`,yg,[o(c,{content:r.$t(`@CMDCON:刷新`),placement:`bottom`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:r.loadTerminalSessions,disabled:r.terminalSessionsLoading},{default:I(()=>[o(l,null,{default:I(()=>[o(r.RefreshRight)]),_:1})]),_:1},8,[`onClick`,`disabled`])]),_:1},8,[`content`]),o(c,{content:r.$t(`@CMDCON:隐藏`),placement:`bottom`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:t[5]||=e=>r.showTerminalSessions=!1},{default:I(()=>[o(l,null,{default:I(()=>[o(r.ArrowDown)]),_:1})]),_:1})]),_:1},8,[`content`])])]),L((Z(),X(`div`,bg,[r.terminalSessions.length===0?(Z(),X(`div`,xg,z(r.$t(`@CMDCON:暂无终端会话`)),1)):(Z(),X(`div`,Sg,[(Z(!0),X(Y,null,F(r.terminalSessions,e=>(Z(),X(`div`,{key:e.id,class:`terminal-session-item`},[U(`div`,Cg,[U(`div`,{class:`terminal-session-command`,title:e.command},[k(z(e.command),1),U(`span`,Tg,` PID: `+z(e.pid??`-`),1)],8,wg),U(`div`,Eg,[e.workingDirectory?(Z(),H(c,{key:0,content:e.workingDirectory,placement:`top`},{default:I(()=>[U(`span`,Dg,[o(l,{class:`cmd-dir-icon`},{default:I(()=>[o(r.Folder)]),_:1}),k(` `+z(r.getLastDirName(e.workingDirectory)),1)])]),_:2},1032,[`content`])):R(`v-if`,!0)])]),U(`div`,Og,[o(c,{content:r.$t(`@CMDCON:重新启动`),placement:`top`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:t=>r.restartTerminalSession(e)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.RefreshRight)]),_:1})]),_:2},1032,[`onClick`])]),_:2},1032,[`content`]),o(c,{content:r.$t(`@CMDCON:删除`),placement:`top`},{default:I(()=>[o(s,{text:``,size:`small`,type:`danger`,onClick:t=>r.deleteTerminalSession(e)},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Delete)]),_:1})]),_:2},1032,[`onClick`])]),_:2},1032,[`content`])])]))),128))]))])),[[m,r.terminalSessionsLoading]])])):(Z(),X(`div`,kg,[o(s,{text:``,size:`small`,onClick:t[6]||=e=>r.showTerminalSessions=!0},{default:I(()=>[k(z(r.$t(`@CMDCON:显示终端会话`,{count:r.terminalSessionsCount})),1)]),_:1})]))])]),_:1},8,[`size`]),o(u,{min:`15%`,max:`85%`},{default:I(()=>[U(`div`,Ag,[R(` 执行画布(只读,高亮执行路径) `),r.executionFlowData&&r.showExecutionFlowPanel?(Z(),X(`div`,jg,[U(`div`,Mg,[U(`div`,Ng,z(r.currentOrchestrationName||r.currentOrchestrationId),1),o(r.IconButton,{tooltip:r.$t(`@CMDCON:隐藏`),"hover-color":`var(--color-danger)`,"custom-class":`flow-panel-close-btn`,onClick:t[8]||=e=>r.showExecutionFlowPanel=!1},{default:I(()=>[o(l,{size:18},{default:I(()=>[o(r.Close)]),_:1})]),_:1},8,[`tooltip`])]),o(r.FlowExecutionViewer,{"flow-data":r.executionFlowData,"current-node-id":r.currentExecutingNodeId||void 0,"executed-node-ids":r.executedNodeIds,"failed-node-ids":r.failedNodeIds,"executed-edge-ids":r.executedEdgeIds},null,8,[`flow-data`,`current-node-id`,`executed-node-ids`,`failed-node-ids`,`executed-edge-ids`])])):R(`v-if`,!0),R(` 编排步骤列表 `),r.orchestrationSteps.length>0||r.waitingForTerminalConfirm||r.waitingForUserConfirm?(Z(),X(`div`,Pg,[U(`div`,Fg,[U(`span`,Ig,[t[19]||=k(` 执行步骤 `),r.currentOrchestrationName||r.currentOrchestrationId?(Z(),X(`span`,Lg,` - `+z(r.currentOrchestrationName||r.currentOrchestrationId),1)):R(`v-if`,!0),k(` (`+z(r.currentStepIndex+1)+`/`+z(r.orchestrationSteps.length)+`) `,1)])]),r.orchestrationSteps.length>0?(Z(),X(`div`,Rg,[(Z(!0),X(Y,null,F(r.orchestrationSteps,(e,n)=>(Z(),X(`div`,{key:n,class:K([`step-item`,{"step-current":n===r.currentStepIndex,"step-completed":n<r.currentStepIndex,"step-pending":n>r.currentStepIndex,"step-disabled":e.enabled===!1,[`step-type-${e.type}`]:!0}])},[U(`div`,zg,[n<r.currentStepIndex?(Z(),H(l,{key:0,class:`step-icon-check`},{default:I(()=>[...t[20]||=[U(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[U(`path`,{fill:`currentColor`,d:`M406.656 706.944L195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z`})],-1)]]),_:1})):e.type===`wait`?(Z(),H(l,{key:1,class:`step-type-icon`},{default:I(()=>[o(r.Timer)]),_:1})):e.type===`version`?(Z(),H(l,{key:2,class:`step-type-icon`},{default:I(()=>[o(r.Ticket)]),_:1})):e.type===`command`?(Z(),H(l,{key:3,class:`step-type-icon`},{default:I(()=>[o(r.Document)]),_:1})):(Z(),X(`span`,Bg,z(n+1),1))]),U(`div`,Vg,[U(`div`,Hg,[U(`span`,{class:K([`step-type-tag`,`type-${e.type}`])},z(e.type===`command`?`命令`:e.type===`wait`?`等待`:e.type===`version`?`版本`:e.type===`user_input`?`输入`:e.type),3),e.useTerminal?(Z(),X(`span`,Ug,[o(l,{class:`step-terminal-icon`},{default:I(()=>[o(r.Monitor)]),_:1}),t[21]||=k(` 终端 `)])):R(`v-if`,!0),e.enabled===!1?(Z(),X(`span`,Wg,`已禁用`)):R(`v-if`,!0)]),U(`span`,Gg,z(e.type===`command`?e.commandName:e.type===`wait`?`${e.waitSeconds} 秒`:e.type===`version`?e.versionTarget===`dependency`?`${e.dependencyName}`:`${e.versionBump||`patch`}`:e.type===`user_input`?e.displayName||`用户输入`:e.type),1)])],2))),128))])):R(`v-if`,!0),R(` 终端命令等待确认提示 `),r.waitingForTerminalConfirm?(Z(),X(`div`,Kg,[U(`div`,qg,[o(l,{class:`waiting-icon`},{default:I(()=>[o(r.Monitor)]),_:1}),U(`div`,Jg,[t[24]||=U(`div`,{class:`waiting-title`},`等待终端命令完成`,-1),U(`div`,Yg,[t[22]||=k(` 终端命令 "`),U(`strong`,null,z(r.waitingStepName),1),t[23]||=k(`" 已在新窗口中打开,请在终端中查看命令执行结果 `)])])]),U(`div`,Xg,[o(s,{type:`primary`,onClick:r.continueAfterTerminal},{default:I(()=>[o(l,null,{default:I(()=>[o(r.VideoPlay)]),_:1}),t[25]||=k(` 继续下一步 `)]),_:1}),o(s,{type:`danger`,plain:``,onClick:r.stopAfterTerminal},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Close)]),_:1}),t[26]||=k(` 停止执行 `)]),_:1})])])):R(`v-if`,!0),R(` 用户确认节点等待提示 `),r.waitingForUserConfirm?(Z(),X(`div`,Zg,[U(`div`,Qg,[o(l,{class:`waiting-icon`,style:{color:`#ff9800`}},{default:I(()=>t[27]||=[k(`✋`)]),_:1}),U(`div`,$g,[t[28]||=U(`div`,{class:`waiting-title`},`用户确认节点`,-1),U(`div`,e_,z(r.waitingConfirmMessage),1)])]),U(`div`,t_,[o(s,{type:`primary`,onClick:r.continueUserConfirm},{default:I(()=>[o(l,null,{default:I(()=>[o(r.VideoPlay)]),_:1}),t[29]||=k(` 继续执行 `)]),_:1}),o(s,{type:`danger`,plain:``,onClick:r.stopUserConfirm},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Close)]),_:1}),t[30]||=k(` 取消执行 `)]),_:1})])])):R(`v-if`,!0)])):R(`v-if`,!0),R(` 输入区 `),U(`div`,n_,[U(`span`,{class:`prompt`,title:r.$t(`@CF05E:当前路径`)},z(r.currentDirectory)+` >`,9,r_),o(d,{modelValue:r.consoleInput,"onUpdate:modelValue":t[9]||=e=>r.consoleInput=e,class:`console-input`,placeholder:r.useTerminal?r.$t(`@CMDCON:在新终端执行`):r.$t(`@CMDCON:交互式模式`),onKeydown:t[10]||=Te(ze(e=>r.useTerminal?r.runConsoleCommand():r.runInteractiveCommand(),[`prevent`]),[`enter`]),disabled:r.consoleRunning,clearable:``},null,8,[`modelValue`,`placeholder`,`disabled`]),o(r.IconButton,{disabled:r.consoleRunning,"hover-color":`var(--color-primary)`,onClick:t[11]||=e=>r.useTerminal?r.runConsoleCommand():r.runInteractiveCommand()},{default:I(()=>[r.consoleRunning?(Z(),H(l,{key:0,class:`is-loading`},{default:I(()=>[o(r.Loading)]),_:1})):(Z(),H(l,{key:1},{default:I(()=>[o(r.VideoPlay)]),_:1}))]),_:1},8,[`disabled`])]),R(` 命令历史输出 `),r.consoleHistory.length?(Z(),X(`div`,i_,[(Z(!0),X(Y,null,F(r.consoleHistory,e=>(Z(),X(`div`,{key:e.id,class:`console-record`},[U(`div`,{class:`cmd-header cursor-pointer`,onClick:t=>r.toggleCommandOutput(e)},[U(`div`,o_,[t[31]||=U(`span`,{class:`cmd-prefix`},`>`,-1),U(`span`,s_,z(e.command),1),e.directory?(Z(),X(`span`,{key:0,class:`cmd-dir`,title:e.directory},[o(l,{class:`cmd-dir-icon`},{default:I(()=>[o(r.Folder)]),_:1}),k(` `+z(e.directory),1)],8,c_)):R(`v-if`,!0),e.running?(Z(),H(l,{key:1,class:`running-icon is-loading`,color:`var(--color-primary)`},{default:I(()=>[o(r.Loading)]),_:1})):R(`v-if`,!0),U(`span`,l_,z(e.ts),1)]),U(`div`,u_,[o(c,{content:`重新执行`,placement:`top`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:ze(t=>r.rerunConsoleRecord(e),[`stop`]),class:`rerun-btn`},{default:I(()=>[o(l,null,{default:I(()=>[o(r.RefreshRight)]),_:1})]),_:2},1032,[`onClick`])]),_:2},1024),e.running?(Z(),H(c,{key:0,content:`停止命令`,placement:`top`},{default:I(()=>[o(s,{text:``,size:`small`,onClick:ze(t=>e.isInteractive?r.stopInteractiveCommand(e):r.stopCommand(e),[`stop`]),class:`stop-btn`,type:`danger`},{default:I(()=>[o(l,null,{default:I(()=>[o(r.Close)]),_:1})]),_:2},1032,[`onClick`])]),_:2},1024)):R(`v-if`,!0),o(s,{text:``,size:`small`,onClick:ze(t=>r.toggleCommandOutput(e),[`stop`]),disabled:!e.stdout&&!e.stderr,class:`toggle-output-btn`},{default:I(()=>[o(l,{class:K({"rotate-icon":!e.expanded})},{default:I(()=>[o(r.ArrowDown)]),_:2},1032,[`class`])]),_:2},1032,[`onClick`,`disabled`])])],8,a_),o(et,{name:`output-slide`},{default:I(()=>[e.expanded&&(e.stdout||e.stderr)?(Z(),X(`div`,d_,[e.stdout?(Z(),X(`pre`,{key:0,class:`stdout`,innerHTML:e.stdout},null,8,f_)):R(`v-if`,!0),e.stderr?(Z(),X(`pre`,{key:1,class:`stderr`,innerHTML:e.stderr},null,8,p_)):R(`v-if`,!0)])):R(`v-if`,!0)]),_:2},1024),R(` 每个交互式命令独立的 stdin 输入框 `),e.isInteractive&&e.running?(Z(),X(`div`,m_,[o(l,{class:`stdin-icon`},{default:I(()=>[o(r.Position)]),_:1}),o(d,{modelValue:e.stdinInput,"onUpdate:modelValue":t=>e.stdinInput=t,class:`stdin-input`,placeholder:`输入响应内容(如密码、确认等),按回车发送`,onKeydown:Te(ze(t=>r.sendStdinInput(e),[`prevent`]),[`enter`]),clearable:``,size:`small`},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),o(s,{type:`success`,onClick:t=>r.sendStdinInput(e),size:`small`},{default:I(()=>[...t[32]||=[k(`发送`)]]),_:2},1032,[`onClick`])])):R(`v-if`,!0)]))),128))])):R(`v-if`,!0)])]),_:1})]),_:1},512)])],2),R(` 自定义命令管理弹窗 `),o(r.CustomCommandManager,{visible:r.commandManagerVisible,"onUpdate:visible":t[12]||=e=>r.commandManagerVisible=e,fullscreen:!0,onExecuteCommand:r.executeCustomCommand},null,8,[`visible`]),R(` 可视化编排工作台(基于 vue-flow) `),o(r.FlowOrchestrationWorkspace,{visible:r.flowOrchestrationVisible,"onUpdate:visible":t[13]||=e=>r.flowOrchestrationVisible=e,onExecuteFlow:r.executeFlow,onOpenCommandManager:t[14]||=e=>r.commandManagerVisible=!0},null,8,[`visible`]),o(r.CommonDialog,{modelValue:r.userInputDialogVisible,"onUpdate:modelValue":t[15]||=e=>r.userInputDialogVisible=e,title:r.waitingUserInputTitle,size:`small`,type:`flex`,width:`520px`,"append-to-body":!0,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-footer":!0,"confirm-text":r.$t(`@803A9:确定`),"cancel-text":r.$t(`@803A9:取消`),onConfirm:r.confirmUserInput,onCancel:r.cancelUserInput},{default:I(()=>[U(`div`,h_,[r.userInputParams.length===0?(Z(),X(`div`,g_,z(r.$t(`@UINPUT:暂无输入参数`)),1)):(Z(),X(`div`,__,[(Z(!0),X(Y,null,F(r.userInputParams,e=>(Z(),X(`div`,{key:e.name,class:`user-input-row`},[U(`div`,v_,[e.required?(Z(),X(`span`,y_,`*`)):R(`v-if`,!0),k(` `+z(e.name),1)]),o(d,{modelValue:r.userInputValues[e.name],"onUpdate:modelValue":t=>r.userInputValues[e.name]=t,placeholder:e.name,clearable:``},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]))),128))]))])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`])],64)}var x_=$(og,[[`render`,b_],[`__scopeId`,`data-v-f56c993a`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/components/CommandConsole.vue`]]),S_=j({__name:`ConsoleView`,setup(e,{expose:t}){t();let n={CustomCommandsPanel:eg,CommandConsole:x_};return Object.defineProperty(n,`__isScriptSetup`,{enumerable:!1,value:!0}),n}}),C_={class:`console-view`},w_={class:`console-view__sidebar`},T_={class:`console-view__terminal`};function E_(e,t,n,r,i,a){return Z(),X(`div`,C_,[R(` 左侧:自定义命令快捷面板(手风琴竖向列表,折叠后只留 header 竖条) `),U(`aside`,w_,[o(r.CustomCommandsPanel)]),R(` 右侧:命令控制台(终端 + 自定义指令管理),占满剩余空间 `),U(`main`,T_,[o(r.CommandConsole)])])}var D_=$(S_,[[`render`,E_],[`__scopeId`,`data-v-862e14cf`],[`__file`,`D:/xz_workspace/github_workspace/zen-gitsync/src/ui/client/src/views/ConsoleView.vue`]]),O_=`data:image/svg+xml,%3csvg%20width='200'%20height='200'%20viewBox='0%200%20200%20200'%20xmlns='http://www.w3.org/2000/svg'%3e%3cdefs%3e%3cradialGradient%20id='bgGrad'%20cx='38%25'%20cy='32%25'%20r='70%25'%3e%3cstop%20offset='0%25'%20stop-color='%231e1b4b'/%3e%3cstop%20offset='100%25'%20stop-color='%230d0b1e'/%3e%3c/radialGradient%3e%3clinearGradient%20id='mainGrad'%20x1='0%25'%20y1='0%25'%20x2='0%25'%20y2='100%25'%3e%3cstop%20offset='0%25'%20stop-color='%23c4b5fd'/%3e%3cstop%20offset='100%25'%20stop-color='%237c3aed'/%3e%3c/linearGradient%3e%3clinearGradient%20id='featGrad'%20x1='0%25'%20y1='0%25'%20x2='100%25'%20y2='100%25'%3e%3cstop%20offset='0%25'%20stop-color='%237dd3fc'/%3e%3cstop%20offset='100%25'%20stop-color='%230284c7'/%3e%3c/linearGradient%3e%3cfilter%20id='glow'%20x='-40%25'%20y='-40%25'%20width='180%25'%20height='180%25'%3e%3cfeGaussianBlur%20in='SourceGraphic'%20stdDeviation='2.5'%20result='blur'/%3e%3cfeMerge%3e%3cfeMergeNode%20in='blur'/%3e%3cfeMergeNode%20in='SourceGraphic'/%3e%3c/feMerge%3e%3c/filter%3e%3cfilter%20id='softGlow'%20x='-20%25'%20y='-20%25'%20width='140%25'%20height='140%25'%3e%3cfeGaussianBlur%20in='SourceGraphic'%20stdDeviation='1.5'%20result='blur'/%3e%3cfeMerge%3e%3cfeMergeNode%20in='blur'/%3e%3cfeMergeNode%20in='SourceGraphic'/%3e%3c/feMerge%3e%3c/filter%3e%3c/defs%3e%3c!--%20背景圆%20--%3e%3ccircle%20cx='100'%20cy='100'%20r='96'%20fill='url(%23bgGrad)'/%3e%3c!--%20同步外弧(上半,代表%20sync%20循环)%20--%3e%3cpath%20d='M%20100,20%20A%2080,80%200%201,1%2036,153'%20stroke='rgba(167,139,250,0.18)'%20stroke-width='4.5'%20fill='none'%20stroke-linecap='round'/%3e%3c!--%20同步外弧(下半)%20--%3e%3cpath%20d='M%2036,153%20A%2080,80%200%200,1%20164,153'%20stroke='rgba(56,189,248,0.18)'%20stroke-width='4.5'%20fill='none'%20stroke-linecap='round'/%3e%3c!--%20同步箭头(上)%20--%3e%3cpath%20d='M%2091,17%20L%20100,20%20L%2096,29'%20stroke='rgba(167,139,250,0.55)'%20stroke-width='2.5'%20fill='none'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c!--%20同步箭头(下)%20--%3e%3cpath%20d='M%20163,145%20L%20164,154%20L%20155,151'%20stroke='rgba(56,189,248,0.55)'%20stroke-width='2.5'%20fill='none'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c!--%20主分支竖线%20--%3e%3cline%20x1='76'%20y1='44'%20x2='76'%20y2='156'%20stroke='url(%23mainGrad)'%20stroke-width='5.5'%20stroke-linecap='round'%20filter='url(%23softGlow)'/%3e%3c!--%20特性分支曲线(分出)%20--%3e%3cpath%20d='M%2076,80%20C%2098,80%20130,96%20130,120%20L%20130,140'%20stroke='url(%23featGrad)'%20stroke-width='4.5'%20fill='none'%20stroke-linecap='round'%20filter='url(%23softGlow)'/%3e%3c!--%20特性分支合并回主分支%20--%3e%3cpath%20d='M%20130,140%20C%20130,156%20105,159%2076,155'%20stroke='url(%23featGrad)'%20stroke-width='4.5'%20fill='none'%20stroke-linecap='round'/%3e%3c!--%20主分支节点%20--%3e%3ccircle%20cx='76'%20cy='48'%20r='11'%20fill='%2313103a'%20stroke='%23c4b5fd'%20stroke-width='3'%20filter='url(%23glow)'/%3e%3ccircle%20cx='76'%20cy='48'%20r='5'%20fill='%23ddd6fe'/%3e%3ccircle%20cx='76'%20cy='84'%20r='11'%20fill='%2313103a'%20stroke='%23a78bfa'%20stroke-width='3'/%3e%3ccircle%20cx='76'%20cy='84'%20r='5'%20fill='%23c4b5fd'/%3e%3ccircle%20cx='76'%20cy='120'%20r='11'%20fill='%2313103a'%20stroke='%238b5cf6'%20stroke-width='3'/%3e%3ccircle%20cx='76'%20cy='120'%20r='5'%20fill='%23a78bfa'/%3e%3ccircle%20cx='76'%20cy='155'%20r='11'%20fill='%2313103a'%20stroke='%237c3aed'%20stroke-width='3'%20filter='url(%23glow)'/%3e%3ccircle%20cx='76'%20cy='155'%20r='5'%20fill='%238b5cf6'/%3e%3c!--%20特性分支节点%20--%3e%3ccircle%20cx='130'%20cy='115'%20r='11'%20fill='%2313103a'%20stroke='%2338bdf8'%20stroke-width='3'%20filter='url(%23glow)'/%3e%3ccircle%20cx='130'%20cy='115'%20r='5'%20fill='%237dd3fc'/%3e%3ccircle%20cx='130'%20cy='143'%20r='11'%20fill='%2313103a'%20stroke='%230ea5e9'%20stroke-width='3'%20filter='url(%23glow)'/%3e%3ccircle%20cx='130'%20cy='143'%20r='5'%20fill='%2338bdf8'/%3e%3c/svg%3e`,k_=j({__name:`App`,setup(e,{expose:t}){t();let n=rt(()=>Ct(()=>import(`./CommitForm-DueeSB7T.js`),__vite__mapDeps([24,4,5,1,0,2,6,7,8,9,10,11,12,13,25]))),r=rt(()=>Ct(()=>import(`./LogList-Do3C4BmA.js`),__vite__mapDeps([26,4,5,1,0,2,6,7,8,9,10,11,12,27]))),i=rt(()=>Ct(()=>import(`./RemoteRepoCard-D582mbhK.js`),__vite__mapDeps([28,4,5,1,0,2,6,7,8,10,11,29]))),a=rt(()=>Ct(()=>import(`./AppVersionBadge-CZ3UbiAu.js`),__vite__mapDeps([30,4,5,1,0,2,6,7,8,31]))),o=rt(()=>Ct(()=>import(`./BranchSelector-Kwcj7e0Z.js`),__vite__mapDeps([32,4,5,1,0,2,6,7,8,9,10,11,12,33]))),s={loadingComponent:Em,delay:200},c=rt({loader:()=>Ct(()=>import(`./EditorView-B2gm2OW1.js`),__vite__mapDeps([34,4,5,1,0,2,6,7,8,35,36,13,37])),...s}),l=rt({loader:()=>Ct(()=>import(`./SourceMapView-gQRnN0Vj.js`),__vite__mapDeps([38,4,5,1,0,2,6,7,8,16,17,18,13,39])),...s}),u=rt({loader:()=>Ct(()=>import(`./WorkbenchView-CbWSllXy.js`),__vite__mapDeps([40,4,5,1,0,2,6,7,8,13,41])),...s}),d=rt({loader:()=>Ct(()=>import(`./MonitorView-C2EyggDk.js`),__vite__mapDeps([42,4,5,1,0,2,6,7,8,43])),...s}),m=rt({loader:()=>Ct(()=>import(`./MindmapView-C1pPUu8W.js`),__vite__mapDeps([44,4,5,1,0,2,6,7,8,35,36,13,45])),...s}),h=rt({loader:()=>Ct(()=>import(`./AgentView-CioAzh-a.js`),__vite__mapDeps([46,4,5,1,0,2,6,7,8,13,47])),...s}),g=J(``),v=J(null),y=Ht(),x=xt(),S=bt(),C=mp(),te=Wt(),w=J(!1),T=G(()=>x.currentDirectory),re=G(()=>{let e=x.models.find(e=>e.isDefault);return e?e.name||e.model:``});function ae(){let e=Ot(T.value);document.title=`${e} - Zen GitSync`}b(T,()=>{ae()},{immediate:!0});function E(){x.config&&(g.value=`${Q(`@F13B4:默认提交信息: `)}${x.config.defaultCommitMessage}`)}async function D(){try{let e=await(await fetch(`/api/current_directory`)).json();return x.setCurrentDirectory(e.directory||Q(`@F13B4:未知目录`)),e}catch(e){return console.error(`获取当前目录失败:`,e),{directory:Q(`@F13B4:未知目录`),isGitRepo:!1}}}ee(async()=>{console.log(Q(`@F13B4:---------- 页面初始化开始 ----------`)),Gp().start(),C.start(),te.startPolling();try{let e=await D();x.isLoaded||await x.loadConfig(),E(),y.isGitRepo=e.isGitRepo===!0,y.lastCheckedTime=Date.now(),y.isGitRepo?(await Promise.all([y.getCurrentBranch(!0),y.getAllBranches(),y.getUserInfo(),y.getRemoteUrl(),y.getBranchStatus(!0)]),setTimeout(()=>{y.bootFetch().catch(e=>{console.warn(`[App] 启动静默 fetch 异常(已忽略):`,e)})},3e3)):W.warning(Q(`@F13B4:当前目录不是Git仓库,部分功能将不可用`))}catch(e){console.error(`初始化失败:`,e)}finally{w.value=!0,console.log(Q(`@F13B4:---------- 页面初始化完成 ----------`)),setTimeout(()=>{ve()},100)}}),f(()=>{C.stop(),te.stopPolling(),Gp().stop()});function O(){ve()}window.addEventListener(`ui-layout-reset`,O),f(()=>{window.removeEventListener(`ui-layout-reset`,O)}),b(()=>y.isGitRepo,()=>{ne(()=>ve())});function oe(){v.value&&v.value.refreshStatus()}let se=J(`git`),ce=J(null);b(se,e=>{e===`git`&&v.value&&y.isGitRepo&&Promise.all([y.fetchStatus(),y.getBranchStatus()]).catch(e=>console.error(`切换到Git视图刷新失败:`,e))});let k={value:null};function le(e){let t=e.detail;console.log(`[debug-open-in-editor] App.vue handleOpenFileInEditor fired, detail=`,t),t?.filePath&&(ce.value=t.filePath,se.value=`editor`,console.log(`[debug-open-in-editor] App.vue set pendingEditorFilePath=`,t.filePath,`activeView=editor`),k.value!==null&&clearTimeout(k.value),k.value=window.setTimeout(()=>{ce.value=null,k.value=null},500))}window.addEventListener(`zen-gitsync:open-file-in-editor`,le),f(()=>{window.removeEventListener(`zen-gitsync:open-file-in-editor`,le)});let A=J(!1);function j(){A.value=!0}let{theme:ue}=Gn(),N=!1,P=!1,F=0,fe=0,pe=``,me=``,I=null,he=null,ge=null;function _e(){let e=document.querySelector(`.grid-layout`);if(!e||!y.isGitRepo)return;let t=getComputedStyle(e).gridTemplateColumns.split(` `),n=getComputedStyle(e).gridTemplateRows.split(` `);if(t.length>=3&&n.length>=3){let e=parseFloat(t[0]),r=e/(e+parseFloat(t[2])),i=parseFloat(n[0]),a=i/(i+parseFloat(n[2]));x.ui.layout={...x.ui.layout,leftRatio:r,topRatio:a},console.log(`${Q(`@F13B4:布局比例已保存 - 左侧: `)}${(r*100).toFixed(0)}${Q(`@F13B4:%, 上方: `)}${(a*100).toFixed(0)}%`)}}function ve(){let e=document.querySelector(`.grid-layout`);if(!e)return;if(!y.isGitRepo){e.style.gridTemplateRows=``,z();return}let t=x.ui.layout,n=Number.isFinite(t?.leftRatio)?t.leftRatio:null,r=Number.isFinite(t?.topRatio)?t.topRatio:null;if(n==null?e.style.gridTemplateColumns=`0.25fr 4px 0.75fr`:e.style.gridTemplateColumns=`${n}fr 4px ${1-n}fr`,r!=null){let t=1-r;e.style.gridTemplateRows=`${r}fr 4px ${t}fr`}else e.style.gridTemplateRows=``;z()}function L(){let e=document.querySelector(`.grid-layout`);if(!e)return{left:25,top:50};let t=getComputedStyle(e).gridTemplateColumns.split(` `),n=getComputedStyle(e).gridTemplateRows.split(` `),r=parseFloat(t[0]??`0`),i=r+parseFloat(t[2]??`0`)||1,a=parseFloat(n[0]??`0`),o=a+parseFloat(n[2]??`0`)||1;return{left:Math.round(r/i*100),top:Math.round(a/o*100)}}let be=J(25),R=J(50);function z(){let e=L();be.value=e.left,R.value=e.top}function xe(e){let t=document.querySelector(`.grid-layout`);if(!t)return;let n=getComputedStyle(t).gridTemplateColumns.split(` `);if(n.length<3)return;let r=parseFloat(n[0]),i=r/(r+parseFloat(n[2])||1)*100+e;i=Math.min(40,Math.max(8,i)),t.style.gridTemplateColumns=`${i}fr 4px ${100-i}fr`,z(),_e()}function Se(e){let t=document.querySelector(`.grid-layout`);if(!t)return;let n=getComputedStyle(t).gridTemplateRows.split(` `);if(n.length<3)return;let r=parseFloat(n[0]),i=r/(r+parseFloat(n[2])||1)*100+e;i=Math.min(80,Math.max(20,i)),t.style.gridTemplateRows=`${i}fr 4px ${100-i}fr`,z(),_e()}function Ce(e){I=e,he===null&&(he=requestAnimationFrame(()=>{he=null,we()}))}function B(e){N=!0,F=e.clientX;let t=document.querySelector(`.grid-layout`);pe=getComputedStyle(t).gridTemplateColumns,document.getElementById(`v-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,Ce),document.addEventListener(`mouseup`,Te),e.preventDefault()}function we(){if(!N)return;let e=I;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientX-F,r=pe.split(` `);if(r.length>=3){let e=parseFloat(r[0]),i=e+parseFloat(r[2]),a=(e+n/t.clientWidth*i)/i,o=.08,s=.4;a<o?t.style.gridTemplateColumns=`${o}fr 4px ${1-o}fr`:a>s?t.style.gridTemplateColumns=`${s}fr 4px ${1-s}fr`:t.style.gridTemplateColumns=`${a}fr 4px ${1-a}fr`}}function Te(){N=!1,document.getElementById(`v-resizer`)?.classList.remove(`active`),he!==null&&(cancelAnimationFrame(he),he=null),document.removeEventListener(`mousemove`,Ce),document.removeEventListener(`mouseup`,Te),_e()}function Ee(e){P=!0,fe=e.clientY;let t=document.querySelector(`.grid-layout`);me=getComputedStyle(t).gridTemplateRows,document.getElementById(`h-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,De),document.addEventListener(`mouseup`,ke),e.preventDefault()}function De(e){I=e,ge===null&&(ge=requestAnimationFrame(()=>{ge=null,Oe()}))}function Oe(){if(!P)return;let e=I;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientY-fe,r=me.split(` `);if(r.length>=3){let e=parseFloat(r[0]),i=e+parseFloat(r[2]),a=(e+n/t.clientHeight*i)/i,o=1-a,s=.2,c=.8;a<s?t.style.gridTemplateRows=`${s}fr 4px ${1-s}fr`:a>c?t.style.gridTemplateRows=`${c}fr 4px ${1-c}fr`:t.style.gridTemplateRows=`${a}fr 4px ${o}fr`}}function ke(){P=!1,document.getElementById(`h-resizer`)?.classList.remove(`active`),ge!==null&&(cancelAnimationFrame(ge),ge=null),document.removeEventListener(`mousemove`,De),document.removeEventListener(`mouseup`,ke),_e()}let Ae={CommitForm:n,LogList:r,RemoteRepoCard:i,AppVersionBadge:a,BranchSelector:o,asyncOpts:s,EditorView:c,SourceMapView:l,WorkbenchView:u,MonitorView:d,MindmapView:m,AgentView:h,configInfo:g,gitStatusRef:v,gitStore:y,configStore:x,localeStore:S,instancesStore:C,toolsStore:te,initCompleted:w,currentDirectory:T,defaultModelName:re,updateDocumentTitle:ae,updateConfigInfo:E,loadCurrentDirectory:D,handleUiLayoutReset:O,handleBranchChanged:oe,activeView:se,pendingEditorFilePath:ce,pendingEditorTimer:k,handleOpenFileInEditor:le,userSettingsDialogVisible:A,openUserSettingsDialog:j,isDarkTheme:ue,get isVResizing(){return N},set isVResizing(e){N=e},get isHResizing(){return P},set isHResizing(e){P=e},get initialX(){return F},set initialX(e){F=e},get initialY(){return fe},set initialY(e){fe=e},get initialGridTemplateColumns(){return pe},set initialGridTemplateColumns(e){pe=e},get initialGridTemplateRows(){return me},set initialGridTemplateRows(e){me=e},get lastMouseEvent(){return I},set lastMouseEvent(e){I=e},get vResizeRafId(){return he},set vResizeRafId(e){he=e},get hResizeRafId(){return ge},set hResizeRafId(e){ge=e},saveLayoutRatios:_e,loadLayoutRatios:ve,readGridPercents:L,gridLeftPercent:be,gridTopPercent:R,refreshGridPercents:z,nudgeV:xe,nudgeH:Se,scheduleVResize:Ce,startVResize:B,handleVResize:we,stopVResize:Te,startHResize:Ee,scheduleHResize:De,handleHResize:Oe,stopHResize:ke,get $t(){return Q},GitStatus:lu,DirectorySelector:Nu,UserSettingsDialog:Kf,ActivityBar:dp,InstanceSwitcher:Ap,AppErrorBanner:nm,RecentProjectsList:bm,ConsoleView:D_,get ElConfigProvider(){return ie},get ElButton(){return M},get ElTooltip(){return p},get ElIcon(){return V},get Setting(){return _},get WarningFilled(){return ye},get Sunny(){return de},get Moon(){return Le},get logo(){return O_}};return Object.defineProperty(Ae,`__isScriptSetup`,{enumerable:!1,value:!0}),Ae}}),A_={class:`main-header app-header`},j_={class:`header-left`},M_={href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,class:`header-brand-link`},N_=[`src`],P_={class:`header-center`},F_={class:`header-info`},I_={key:0,class:`header-actions`},L_=[`aria-label`,`aria-pressed`],R_={id:`user-info`,class:`user-info-card`},z_={class:`user-name`},B_={class:`user-label`},V_={class:`user-warning`},H_=[`aria-label`],U_={key:0,class:`config-broken-banner`,role:`alert`,"aria-live":`polite`},W_={class:`banner-left`},G_={class:`banner-text`},K_={class:`banner-title`},q_={class:`banner-detail`},J_={key:1,class:`banner-path`},Y_={class:`banner-actions`},X_={key:0,class:`loading-container`},Z_={class:`loading-card`,role:`status`,"aria-live":`polite`},Q_={class:`loading-text`},$_={class:`loading-text__label`},ev={key:1,class:`app-body`},tv={class:`git-status-panel`},nv=[`aria-label`,`aria-valuenow`],rv={key:0,class:`commit-form-panel`},iv={key:0,class:`state-block state-block--warning user-unconfigured-card`},av={class:`state-block__title user-unconfigured-title`},ov={class:`state-block__hint user-unconfigured-desc`},sv={class:`user-unconfigured-actions`},cv={class:`user-unconfigured-divider`},lv={class:`user-unconfigured-code`},uv={key:1,class:`commit-form-panel commit-form-panel--empty`},dv=[`aria-label`,`aria-valuenow`],fv={class:`log-list-panel`},pv={class:`view-pane console-pane`},mv={class:`view-pane editor-pane`},hv={class:`view-pane source-map-pane`},gv={class:`view-pane workbench-pane`},_v={class:`view-pane monitor-pane`},vv={class:`view-pane mindmap-pane`},yv={class:`view-pane agent-pane`},bv={class:`main-footer app-footer`},xv={key:0,class:`footer-model-hint`},Sv={class:`footer-model-hint__label`},Cv={class:`footer-model-hint__name`};function wv(e,t,n,r,i,a){return Z(),H(r.ElConfigProvider,{locale:r.localeStore.elementPlusLocale},{default:I(()=>[R(` OPT-5: 全局网络错误横幅(header 下方置顶,不影响主区布局) `),o(r.AppErrorBanner),U(`header`,A_,[U(`div`,j_,[U(`a`,M_,[U(`img`,{src:r.logo,alt:`Zen GitSync Logo`,class:`logo`},null,8,N_),t[8]||=U(`h1`,null,`Zen GitSync`,-1)])]),U(`div`,P_,[o(r.DirectorySelector,{variant:`header`})]),U(`div`,F_,[R(` 顶部右侧动作 `),r.gitStore.isGitRepo?(Z(),X(`div`,I_,[R(` <CommandHistory /> `)])):R(`v-if`,!0),R(` 实例切换器:显示所有运行中的 GUI 项目 `),o(r.InstanceSwitcher),R(` 主题切换快捷按钮(OPT-2:原本要进设置→通用→主题 4 次点击,现在 1 次) `),o(r.ElTooltip,{content:r.isDarkTheme?r.$t(`@F13B4:切换到浅色主题`):r.$t(`@F13B4:切换到深色主题`),placement:`bottom`,effect:`dark`,"show-after":200},{default:I(()=>[U(`button`,{class:`modern-btn btn-icon-32 theme-toggle-btn`,"aria-label":r.isDarkTheme?r.$t(`@F13B4:切换到浅色主题`):r.$t(`@F13B4:切换到深色主题`),"aria-pressed":r.isDarkTheme?`true`:`false`,onClick:t[0]||=e=>r.configStore.toggleTheme()},[o(r.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:I(()=>[r.isDarkTheme?(Z(),H(r.Moon,{key:0})):(Z(),H(r.Sunny,{key:1}))]),_:1})],8,L_)]),_:1},8,[`content`]),R(` 用户信息 `),U(`div`,R_,[r.gitStore.userName?(Z(),H(r.ElTooltip,{key:0,content:r.gitStore.userEmail||r.gitStore.userName,placement:`bottom`,effect:`dark`,"show-after":200},{default:I(()=>[U(`span`,z_,z(r.gitStore.userName),1)]),_:1},8,[`content`])):(Z(),X(Y,{key:1},[U(`span`,B_,z(r.$t(`@F13B4:用户: `)),1),U(`span`,V_,z(r.$t(`@F13B4:未配置`)),1)],64)),o(r.ElTooltip,{content:r.$t(`@F13B4:用户设置`),placement:`bottom`,effect:`dark`,"show-after":200},{default:I(()=>[U(`button`,{class:`modern-btn btn-icon-28`,"aria-label":r.$t(`@F13B4:用户设置`),onClick:r.openUserSettingsDialog},[o(r.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.Setting)]),_:1})],8,H_)]),_:1},8,[`content`])])])]),r.configStore.hasConfigLoadError?(Z(),X(`div`,U_,[U(`div`,W_,[o(r.ElIcon,{class:`banner-icon`,"aria-hidden":`true`},{default:I(()=>[o(r.WarningFilled)]),_:1}),U(`div`,G_,[U(`span`,K_,z(r.$t(`@CFGERR:系统配置文件有问题`)),1),r.configStore.configLoadError?(Z(),H(r.ElTooltip,{key:0,content:r.configStore.configLoadError,placement:`bottom`,effect:`dark`,"show-after":200},{default:I(()=>[U(`span`,q_,z(r.$t(`@CFGERR:查看原因`)),1)]),_:1},8,[`content`])):R(`v-if`,!0),r.configStore.configFilePath?(Z(),X(`span`,J_,z(r.configStore.configFilePath),1)):R(`v-if`,!0)])]),U(`div`,Y_,[o(r.ElButton,{size:`small`,type:`warning`,onClick:t[1]||=e=>r.configStore.openSystemConfigFile()},{default:I(()=>[k(z(r.$t(`@CFGERR:打开系统配置文件`)),1)]),_:1})])])):R(`v-if`,!0),U(`main`,{class:`main-container`,style:Pe({top:r.configStore.hasConfigLoadError?`104px`:`64px`})},[r.initCompleted?(Z(),X(`div`,ev,[R(` VS Code 风格活动栏 `),o(r.ActivityBar,{activeView:r.activeView,"onUpdate:activeView":t[2]||=e=>r.activeView=e},null,8,[`activeView`]),R(` Git 视图:2 列布局 — 左 GitStatus | 右(上 commit-form / h-resizer / 下 log-list)
65
65
  非 Git 仓库时:右上 RecentProjectsList 占满右侧整列,隐藏 h-resizer + log-list-panel,
66
66
  由 .grid-layout--no-bottom 控制 grid-template-rows 去掉下方行 `),L(U(`div`,{class:K([`view-pane grid-layout`,{"grid-layout--no-bottom":!r.gitStore.isGitRepo}])},[R(` 左侧Git状态 `),U(`div`,tv,[o(r.GitStatus,{ref:`gitStatusRef`,"initial-directory":r.currentDirectory},null,8,[`initial-directory`])]),R(` 垂直分隔条(GitStatus | 右侧列) `),U(`div`,{class:`vertical-resizer`,id:`v-resizer`,role:`separator`,tabindex:`0`,"aria-orientation":`vertical`,"aria-label":r.$t(`@F13B4:调整左侧与右侧面板宽度(左右方向键)`),"aria-valuenow":r.gridLeftPercent,"aria-valuemin":`8`,"aria-valuemax":`40`,onMousedown:r.startVResize,onKeydown:[t[3]||=Te(ze(e=>r.nudgeV(-2),[`prevent`]),[`left`]),t[4]||=Te(ze(e=>r.nudgeV(2),[`prevent`]),[`right`])]},null,40,nv),R(` 右侧上方提交表单 `),r.gitStore.isGitRepo?(Z(),X(`div`,rv,[R(` 当用户未配置时显示配置提示 `),!r.gitStore.userName||!r.gitStore.userEmail?(Z(),X(`div`,iv,[t[15]||=U(`div`,{class:`state-block__icon user-unconfigured-icon`},[U(`svg`,{viewBox:`0 0 24 24`,width:`40`,height:`40`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[U(`circle`,{cx:`12`,cy:`8`,r:`4`}),U(`path`,{d:`M4 20c0-4 3.6-7 8-7s8 3 8 7`}),U(`path`,{d:`M17 13.5l1.5 1.5 3-3`,stroke:`var(--color-warning)`,"stroke-width":`2`})])],-1),U(`h2`,av,`Git `+z(r.$t(`@F13B4:用户未配置`)),1),U(`p`,ov,z(r.$t(`@F13B4:请先配置Git用户信息才能进行提交操作。`)),1),U(`div`,sv,[U(`button`,{class:`user-unconfigured-primary-btn`,onClick:r.openUserSettingsDialog},[t[11]||=U(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[U(`path`,{d:`M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`}),U(`path`,{d:`M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z`})],-1),k(` `+z(r.$t(`@F13B4:立即配置`)),1)])]),U(`div`,cv,[U(`span`,null,z(r.$t(`@F13B4:或者使用命令行配置:`)),1)]),U(`div`,lv,[t[12]||=U(`span`,{class:`code-prompt`},`$`,-1),k(` git config `+z(r.$t(`@F13B4:--global user.name "您的用户名"`)),1),t[13]||=U(`br`,null,null,-1),t[14]||=U(`span`,{class:`code-prompt`},`$`,-1),k(` git config `+z(r.$t(`@F13B4:--global user.email "您的邮箱"`)),1)])])):(Z(),X(Y,{key:1},[R(` 用户已配置显示提交表单 `),o(r.CommitForm)],64))])):(Z(),X(`div`,uv,[R(` 非 Git 仓库时,右侧空态直接用"最近项目"列表代替原"Git 仓库初始化"卡片
67
67
  (左侧 GitStatus 已经有"初始化 Git 仓库"按钮 + "尚未配置远程仓库"提示,这里不重复) `),o(r.RecentProjectsList,{variant:`fullpage`})])),R(` 水平分隔条(提交表单 | 提交历史) `),L(U(`div`,{class:`horizontal-resizer`,id:`h-resizer`,role:`separator`,tabindex:`0`,"aria-orientation":`horizontal`,"aria-label":r.$t(`@F13B4:调整上方与下方面板高度(上下方向键)`),"aria-valuenow":r.gridTopPercent,"aria-valuemin":`20`,"aria-valuemax":`80`,onMousedown:r.startHResize,onKeydown:[t[5]||=Te(ze(e=>r.nudgeH(-2),[`prevent`]),[`up`]),t[6]||=Te(ze(e=>r.nudgeH(2),[`prevent`]),[`down`])]},null,40,dv),[[q,r.gitStore.isGitRepo]]),R(` 右侧下方提交历史(仅 Git 仓库显示,非 Git 仓库时 RecentProjectsList 占满右侧整列) `),L(U(`div`,fv,[o(r.LogList)],512),[[q,r.gitStore.isGitRepo]])],2),[[q,r.activeView===`git`]]),R(` /view-pane git `),R(` 控制台视图(默认加载:随首屏静态挂载,切过去零等待;KeepAlive 缓存实例保状态) `),L(U(`div`,pv,[(Z(),H(Oe,null,[o(r.ConsoleView)],1024))],512),[[q,r.activeView===`console`]]),R(` 编辑器视图(懒加载:v-if 控制组件加载,KeepAlive 缓存实例保状态;