zen-gitsync 2.16.2 → 2.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/cli/ai/agent.js +8 -6
- package/src/cli/ai/termui.js +59 -36
- package/src/cli/ai/termui.test.js +10 -8
- package/src/ui/public/assets/{AppVersionBadge-BTznOVSJ.js → AppVersionBadge-nwlsGMPO.js} +1 -1
- package/src/ui/public/assets/{BranchSelector-BISqgXoZ.js → BranchSelector-bUBqRWF2.js} +1 -1
- package/src/ui/public/assets/{CommitForm-C7FmI0Sl.js → CommitForm-DyHOStnk.js} +1 -1
- package/src/ui/public/assets/{EditorView-CSWy4q7G.js → EditorView-D939kLwW.js} +0 -0
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-BECFOAcQ.js → FlowOrchestrationWorkspace-BOn17akW.js} +1 -1
- package/src/ui/public/assets/{LogList-DYoGtOou.js → LogList-xk8W-v1F.js} +1 -1
- package/src/ui/public/assets/{RemoteRepoCard-DHsJwTEX.js → RemoteRepoCard-Cx5q9Yxb.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-DskfUia5.js → SourceMapView-uEieIRHF.js} +1 -1
- package/src/ui/public/assets/{WorkbenchView-1q0xaqyV.js → WorkbenchView-DBoFN37v.js} +1 -1
- package/src/ui/public/assets/{index-Br2VZQBT.js → index-Dh9-lDzZ.js} +3 -3
- package/src/ui/public/index.html +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-BvgtFLbw.js","assets/rolldown-runtime-DAXXjFlN.js","assets/monaco-B2lPvkrc.css","assets/ProjectStartupButton-2By0-fuq.js","assets/element-plus-DNnePjco.js","assets/element-plus-CQrjg9us.css","assets/vendor-CcK8n8T4.js","assets/vendor-Dm_yd-By.css","assets/_plugin-vue_export-helper-BQRl7WAH.js","assets/SvgIcon-BqWp2WS8.js","assets/SvgIcon-CDNsk4-Q.css","assets/CommonDialog-BA4xg5l3.js","assets/CommonDialog-ChSKsEz2.css","assets/configStore-BkxDLXGa.js","assets/ProjectStartupButton-QLPltCK5.css","assets/FlowOrchestrationWorkspace-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-BvgtFLbw.js","assets/rolldown-runtime-DAXXjFlN.js","assets/monaco-B2lPvkrc.css","assets/ProjectStartupButton-2By0-fuq.js","assets/element-plus-DNnePjco.js","assets/element-plus-CQrjg9us.css","assets/vendor-CcK8n8T4.js","assets/vendor-Dm_yd-By.css","assets/_plugin-vue_export-helper-BQRl7WAH.js","assets/SvgIcon-BqWp2WS8.js","assets/SvgIcon-CDNsk4-Q.css","assets/CommonDialog-BA4xg5l3.js","assets/CommonDialog-ChSKsEz2.css","assets/configStore-BkxDLXGa.js","assets/ProjectStartupButton-QLPltCK5.css","assets/FlowOrchestrationWorkspace-BOn17akW.js","assets/vue-flow-pAz--378.js","assets/vue-flow-CavUTEzp.css","assets/UserInputNode-Ccnh0e-0.js","assets/UserInputNode-BVgQkB2l.css","assets/dagre-CTEVx1fc.js","assets/FlowOrchestrationWorkspace-CYGp-PqS.css","assets/FlowExecutionViewer-CZdF1f1e.js","assets/FlowExecutionViewer-jNHI5zdm.css","assets/CommitForm-DyHOStnk.js","assets/CommitForm-DdK8dymc.css","assets/LogList-xk8W-v1F.js","assets/LogList-CeFFytjB.css","assets/RemoteRepoCard-Cx5q9Yxb.js","assets/RemoteRepoCard-BRGNlbeO.css","assets/AppVersionBadge-nwlsGMPO.js","assets/AppVersionBadge-CS7Trvp-.css","assets/BranchSelector-bUBqRWF2.js","assets/BranchSelector-B0eLkAdv.css","assets/EditorView-D939kLwW.js","assets/flow-mindmap-DRmzYE4F.js","assets/flow-mindmap-DCVd8Ppe.css","assets/EditorView-BVod-rjn.css","assets/SourceMapView-uEieIRHF.js","assets/SourceMapView-BNRjvgzH.css","assets/WorkbenchView-DBoFN37v.js","assets/WorkbenchView-DbF4hH5s.css","assets/MonitorView-CSAqU7oV.js","assets/MonitorView-TaS4kL0Y.css","assets/MindmapView-CU3tXgbR.js","assets/MindmapView-3rMfOoNm.css"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{$ as n,$t as r,B as i,Bt as a,C as o,Cn as s,Ct as c,D as l,Dn as u,Dt as d,En as f,Et as p,F as m,Fn as h,Ft as g,G as _,Gt as v,H as y,Hn as b,I as x,In as S,Jn as C,Jt as w,K as T,Kt as ee,L as E,Ln as te,Lt as ne,M as re,Mn as D,Mt as ie,N as O,Nn as ae,P as oe,Q as se,Qt as ce,R as k,Rn as le,Rt as A,S as j,Sn as M,T as ue,Tn as N,U as de,Un as P,Ut as fe,V as pe,Vn as F,W as I,Wn as me,Wt as he,X as ge,Xn as L,Xt as _e,Y as R,Zn as z,Zt as ve,_ as ye,_n as B,_r as V,a as H,ar as be,at as xe,bn as Se,bt as Ce,c as we,cn as Te,ct as Ee,dn as De,en as Oe,f as ke,ft as Ae,g as je,gn as U,gr as Me,h as Ne,hn as W,ht as Pe,i as Fe,j as Ie,jt as Le,ln as Re,lt as ze,m as Be,mn as G,mr as K,mt as Ve,nn as He,nt as Ue,o as We,on as Ge,or as Ke,ot as qe,p as Je,pt as Ye,q as Xe,qt as Ze,r as Qe,s as $e,sn as q,sr as J,tn as et,tt,un as Y,ut as nt,vn as X,w as rt,wn as it,xt as at,yt as ot,z as st,zn as Z,zt as ct}from"./element-plus-DNnePjco.js";import{a as lt,d as ut,f as dt,o as ft,s as pt,u as mt}from"./vendor-CcK8n8T4.js";import{i as ht,n as Q,t as $}from"./_plugin-vue_export-helper-BQRl7WAH.js";import{t as gt}from"./SvgIcon-BqWp2WS8.js";import{n as _t,t as vt}from"./CommonDialog-BA4xg5l3.js";import{t as yt}from"./socket-io-pmu5tRPo.js";import{n as bt,t as xt}from"./configStore-BkxDLXGa.js";import{a as St,c as Ct,i as wt,l as Tt,o as Et,s as Dt}from"./monaco-BvgtFLbw.js";import"./vue-flow-pAz--378.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=N({__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`},[B(` 垂直主线 `),t[0]||=W(`line`,{x1:`3`,y1:`2`,x2:`3`,y2:`14`},null,-1),B(` 第一个分支 `),t[1]||=W(`line`,{x1:`3`,y1:`4`,x2:`6`,y2:`4`},null,-1),t[2]||=W(`rect`,{x:`2`,y:`3`,width:`8`,height:`2`,rx:`0.5`,fill:`currentColor`,stroke:`none`},null,-1),B(` 第二个分支 `),t[3]||=W(`line`,{x1:`3`,y1:`8`,x2:`6`,y2:`8`},null,-1),t[4]||=W(`rect`,{x:`4`,y:`7`,width:`8`,height:`2`,rx:`0.5`,fill:`currentColor`,stroke:`none`},null,-1),B(` 第三个分支 `),t[5]||=W(`line`,{x1:`3`,y1:`12`,x2:`6`,y2:`12`},null,-1),t[6]||=W(`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`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/icons/TreeIcon.vue`]]),Nt=N({__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`},[B(` 简洁的列表图标 - 三条横线 `),t[0]||=W(`rect`,{x:`2`,y:`3`,width:`12`,height:`2`,rx:`0.5`},null,-1),t[1]||=W(`rect`,{x:`2`,y:`7`,width:`12`,height:`2`,rx:`0.5`},null,-1),t[2]||=W(`rect`,{x:`2`,y:`11`,width:`12`,height:`2`,rx:`0.5`},null,-1)],8,Pt)}var It=$(Nt,[[`render`,Ft],[`__file`,`E:/workspace/github_workspace/zen-git/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=ut(`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(``),w=J(``),T=J([]),ee=J({staged:[],unstaged:[],untracked:[]}),E=J([]),ne=J(!1),re=J(!1),D=J(!1),ie=J(!1),O=J(!1),ae=J(1),oe=J(!0),se=J(0),ce=J([]),k=J(!1),A=J(!1),j=J(!1),M=J(!1);function ue(){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,T.value=[],ee.value={staged:[],unstaged:[],untracked:[]},E.value=[],ne.value=!1,re.value=!1,D.value=!1,ie.value=!1,O.value=!1,ae.value=1,oe.value=!0,se.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{let t=await(await fetch(`/api/current_directory`)).json();return s.value=t.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 fe(){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 pe(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?(H({message:`${Q(`@C298B:已切换到分支: `)}${e}`,type:`success`}),await P(!0),await N(!0),!0):(H({message:`${Q(`@C298B:切换分支失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:切换分支失败: `)}${e.message}`,type:`error`}),!1}finally{a.value=!1}}async function F(){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 I(e,n){if(!e.trim())return H({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?(H({message:`${Q(`@C298B:已创建并切换到分支: `)}${e}`,type:`success`}),await P(!0),await N(!0),await fe(),!0):(H({message:`${Q(`@C298B:创建分支失败: `)}${r.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:创建分支失败: `)}${e.message}`,type:`error`}),!1}finally{o.value=!1}}async function me(){try{let e=await(await fetch(`/api/clear-user-config`,{method:`POST`})).json();return e.success?(r.value=``,i.value=``,H({message:Q(`@C298B:已清除Git用户配置`),type:`success`}),!0):(H({message:`${Q(`@C298B:清除配置失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return H({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,H({message:Q(`@C298B:已恢复Git用户配置`),type:`success`}),!0):(H({message:`${Q(`@C298B:恢复配置失败: `)}${n.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:恢复配置失败: `)}${e.message}`,type:`error`}),!1}}async function ge(){if(!s.value)return H({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){H({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 ye(),{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 L(){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 ve(!0),!0):!1}catch(e){return console.warn(`[bootFetch] silent fetch error (ignored):`,e.message),!1}finally{p.value=!1}}async function _e(){if(!s.value)return H({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?(H({message:Q(`@C298B:获取所有远程分支信息成功`),type:`success`}),await N(),!0):(H({message:`${Q(`@C298B:获取远程分支信息失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:获取远程分支信息失败: `)}${e.message}`,type:`error`}),!1}finally{p.value=!1}}async function R(){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,w.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,w.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&&z(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 z(e){if(e===void 0||e===``){E.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})}}E.value=n}async function ve(e=!0){if(!s.value){console.log(Q(`@C298B:当前目录不是Git仓库,跳过加载提交历史`));return}try{ne.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)?(T.value=[...t.data],console.log(`${Q(`@C298B:提交历史加载完成,共 `)}${T.value.length}${Q(`@C298B: 条记录`)}`)):(console.warn(`API返回的提交历史格式不正确:`,t),T.value=[])}catch(t){console.error(`获取提交历史失败:`,t),e&&H({message:`${Q(`@C298B:获取提交历史失败: `)}${t.message}`,type:`error`})}finally{ne.value=!1}}async function ye(){console.log(Q(`@C298B:刷新提交历史...`)),ae.value=1,oe.value=!1,await ve(!0),se.value=T.value.length,console.log(Q(`@C298B:提交历史刷新完成`))}async function B(){if(!s.value){console.log(Q(`@C298B:当前目录不是Git仓库,跳过加载Git状态`));return}try{re.value=!0,await V()}catch(e){console.error(`获取Git状态失败:`,e),H({message:`${Q(`@C298B:获取Git状态失败: `)}${e.message}`,type:`error`})}finally{re.value=!1}}async function V(){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?E.value=[]:z(e.status),h.value=!!e.isMergeInProgress,e.isMergeInProgress&&e.mergeMessage&&!x.value&&(x.value=String(e.mergeMessage))}catch(e){console.error(`获取Git状态(porcelain)失败:`,e),H({message:`${Q(`@C298B:获取Git状态(porcelain)失败: `)}${e.message}`,type:`error`}),E.value=[]}}async function be(){if(!s.value)return H.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{D.value=!0;let t=E.value.filter(t=>{let n=t.path.replace(/\\/g,`/`);return!e.lockedFiles.some(e=>{let t=e.replace(/\\/g,`/`);return n===t})});if(t.length===0)return H({message:Q(`@C298B:没有需要暂存的文件(所有文件都被锁定)`),type:`warning`}),!1;if(t.length===E.value.length){let e=await(await fetch(`/api/add`,{method:`POST`})).json();return e.success?(H({message:Q(`@C298B:文件已添加到暂存区`),type:`success`}),await V(),!0):(H({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=E.value.length-t.length,n=`${Q(`@C298B:已添加 `)}${t.length}${Q(`@C298B: 个文件到暂存区`)}`;return e>0&&(n+=`${Q(`@C298B:,跳过 `)}${e}${Q(`@C298B: 个锁定文件`)}`),H({message:n,type:`success`}),await V(),!0}else return H({message:`${Q(`@C298B:添加文件失败: `)}${e.error}`,type:`error`}),!1}}catch(e){return H({message:`${Q(`@C298B:添加文件失败: `)}${e.message}`,type:`error`}),!1}finally{D.value=!1}}async function xe(){if(!s.value)return H.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{D.value=!0;let e=await(await fetch(`/api/add-all`,{method:`POST`})).json();return e.success?(H({message:Q(`@C298B:所有文件已添加到暂存区`),type:`success`}),await V(),!0):(H({message:`${Q(`@C298B:添加文件失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:添加文件失败: `)}${e.message}`,type:`error`}),!1}finally{D.value=!1}}async function Se(e){if(!s.value)return H.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{D.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?(H({message:Q(`@C298B:文件已暂存`),type:`success`}),B(),!0):(H({message:`${Q(`@C298B:暂存文件失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:暂存文件失败: `)}${e.message}`,type:`error`}),!1}finally{D.value=!1}}async function Ce(e){if(!s.value)return H.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;try{O.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?(H({message:Q(`@C298B:已取消暂存文件`),type:`success`}),B(),!0):(H({message:`${Q(`@C298B:取消暂存失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:取消暂存失败: `)}${e.message}`,type:`error`}),!1}finally{O.value=!1}}function we(e){return new Promise(t=>setTimeout(t,e))}async function Te(e,t=!1,n={}){if(!s.value)return H.warning(Q(`@C298B:当前目录不是Git仓库`)),!1;let{autoRefresh:r=!0}=n;try{ie.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?(H({message:Q(`@C298B:提交成功`),type:`success`}),r&&(await V(),await ve(!1),N(!0)),!0):(H({message:`${Q(`@C298B:commitChanges 提交失败: `)}${n.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:提交失败: `)}${e.message}`,type:`error`}),!1}finally{ie.value=!1}}async function Ee(){if(!s.value)return H.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([B(),ve()]),console.log(`推送成功,分支状态已设置为同步 (ahead=0, behind=0)`),!0):(e.errorCode===`EMPTY_REPO`?H({message:e.error||Q(`@C298B:当前仓库没有任何提交,请先暂存并提交至少一个文件后再推送。`),type:`warning`}):H({message:`${Q(`@C298B:推送失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return H({message:`${Q(`@C298B:推送失败: `)}${e.message}`,type:`error`}),!1}finally{d.value=!1}}async function De(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(`
|
|
@@ -46,7 +46,7 @@ import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{$ as n,$t as r,
|
|
|
46
46
|
用 el-popover + manual trigger 自己接管右键事件,绕开 el-dropdown contextmenu
|
|
47
47
|
在 IconButton(el-tooltip) 嵌套下的失效问题。
|
|
48
48
|
`),r.toolsStore.claudeAvailable?(Z(),U(r.ElPopover,{key:3,visible:r.claudeMenuVisible,trigger:`manual`,placement:`bottom-end`,width:220,"show-arrow":!1,"popper-class":`claude-menu-popover`},{reference:L(()=>[W(`span`,{ref:`claudeTriggerRef`,class:`claude-code-trigger`,onContextmenu:Re(r.openClaudeMenu,[`prevent`,`stop`])},[s(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:L(()=>[W(`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:L(()=>[W(`ul`,{class:`claude-menu`,role:`menu`,"aria-label":r.$t(`@67CE7:Claude Code 启动模式`)},[W(`li`,{class:`claude-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:t[1]||=e=>r.pickClaudeMode(`default`),onKeydown:[t[2]||=Te(Re(e=>r.pickClaudeMode(`default`),[`prevent`]),[`enter`]),t[3]||=Te(Re(e=>r.pickClaudeMode(`default`),[`prevent`]),[`space`])]},[W(`span`,gu,V(r.$t(`@67CE7:用 Claude Code 打开`)),1),W(`span`,_u,V(r.$t(`@67CE7:默认权限`)),1)],32),W(`li`,{class:`claude-menu__item claude-menu__item--accent`,role:`menuitem`,tabindex:`-1`,onClick:t[4]||=e=>r.pickClaudeMode(`acceptEdits`),onKeydown:[t[5]||=Te(Re(e=>r.pickClaudeMode(`acceptEdits`),[`prevent`]),[`enter`]),t[6]||=Te(Re(e=>r.pickClaudeMode(`acceptEdits`),[`prevent`]),[`space`])]},[W(`span`,vu,V(r.$t(`@67CE7:用 Claude Code 打开`)),1),t[15]||=W(`span`,{class:`claude-menu__hint`},`批准文件编辑`,-1)],32),W(`li`,{class:`claude-menu__item claude-menu__item--danger`,role:`menuitem`,onClick:t[7]||=e=>r.pickClaudeMode(`bypassPermissions`)},[W(`span`,yu,[t[16]||=M(` 用 Claude Code 打开 `,-1),s(o,{class:`claude-menu__warn`},{default:L(()=>[s(c)]),_:1})]),t[17]||=W(`span`,{class:`claude-menu__hint`},`真·完全批准(含 Shell)`,-1)])],8,hu)]),_:1},8,[`visible`])):B(`v-if`,!0)])],2),B(` 切换目录对话框 `),s(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:L(()=>[W(`div`,ku,[W(`div`,Au,[W(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[9]||=e=>r.isDirectoryDialogVisible=!1},V(r.$t(`@67CE7:取消`)),1),W(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:t[10]||=e=>r.changeDirectory(),disabled:r.isChangingDirectory},[r.isChangingDirectory?(Z(),U(o,{key:1,class:`is-loading`},{default:L(()=>[...t[19]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[W(`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(),U(o,{key:0},{default:L(()=>[s(r.Folder)]),_:1})),W(`span`,null,V(r.$t(`@67CE7:切换`)),1)],8,ju),W(`button`,{type:`button`,class:`dialog-newtab-btn`,onClick:t[11]||=e=>r.openNewTabGui()},[...t[20]||=[W(`span`,null,`使用新标签打开`,-1)]])])])]),default:L(()=>[W(`div`,bu,[s(d,{"label-position":`top`},{default:L(()=>[s(u,null,{label:L(()=>[W(`div`,xu,[s(o,{class:`label-icon`},{default:L(()=>[s(r.Folder)]),_:1}),W(`span`,null,V(r.$t(`@67CE7:目录路径`)),1)])]),default:L(()=>[W(`div`,Su,[s(l,{modelValue:r.newDirectoryPath,"onUpdate:modelValue":t[8]||=e=>r.newDirectoryPath=e,placeholder:r.$t(`@67CE7:请输入目录路径`),class:`modern-input`,size:`large`},null,8,[`modelValue`,`placeholder`]),W(`button`,{type:`button`,class:`browse-btn`,onClick:r.browseDirectory},[s(o,null,{default:L(()=>[s(r.Folder)]),_:1}),W(`span`,null,V(r.$t(`@67CE7:浏览`)),1)])])]),_:1}),r.recentDirectories.length>0?(Z(),U(u,{key:0},{label:L(()=>[W(`div`,Cu,[s(o,{class:`label-icon`},{default:L(()=>[s(r.Clock)]),_:1}),W(`span`,null,V(r.$t(`@67CE7:常用目录`)),1)])]),default:L(()=>[W(`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)},[s(o,{class:`dir-icon`},{default:L(()=>[s(r.Folder)]),_:1}),W(`span`,{class:`dir-path`,title:e.path},V(e.path),9,Eu),e.exists?B(`v-if`,!0):(Z(),X(`span`,Du,`不存在`)),W(`button`,{type:`button`,class:`dir-delete-btn`,title:`从常用目录中移除`,onClick:t=>r.removeRecentDirectory(e.path,t)},[...t[18]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`},[W(`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})):B(`v-if`,!0)]),_:1})])]),_:1},8,[`modelValue`,`title`]),B(` 目录浏览器弹窗 `),s(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`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/DirectorySelector.vue`]]),Pu=N({__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,l=J(!1),u=J(!1),d=J(`general`),f=J(`light`),p=J(`zh-CN`),m=J(!1),h=J([]),g=J(void 0),_=G(()=>a.theme===`light`?`light`:`dark`),v=G(()=>{if(g.value===null)return null;let e=h.value.find(e=>e.id===g.value);return e?{endpoint:e.baseURL,modelName:e.model,displayName:e.name,apiKey:e.apiKey}:null}),y=G(()=>d.value===`config`?!0:d.value===`general`?f.value!==ue||p.value!==N||g.value!==void 0:d.value===`git`?E.value!==se||te.value!==ce||D.value!==k||ie.value!==le||O.value!==A||ae.value!==j||(oe.value||``).trim()!==M:d.value===`editor`?m.value!==a.ui.editorAutoSave:!1);function b(){g.value=null}function x(e){g.value=e.id}function S(){g.value=void 0}async function w(e){let t=g.value===null,n=e.displayName||e.modelName,r=t?`model-${n.toLowerCase().replace(/[^a-z0-9]/g,`-`).slice(0,24)}-${Date.now().toString(36)}`:g.value,i;if(t){let t=h.value.length===0;i=[...h.value,{id:r,name:n,apiKey:e.apiKey,baseURL:e.endpoint,model:e.modelName,isDefault:t}]}else i=h.value.map(t=>t.id===g.value?{...t,name:n,apiKey:e.apiKey||t.apiKey,baseURL:e.endpoint,model:e.modelName}:t);await a.saveModels(i)&&(h.value=i,g.value=void 0,H.success(Q(t?`@42BB9:已添加模型`:`@42BB9:已更新模型`)))}async function T(e){let t=h.value.filter(t=>t.id!==e);await a.saveModels(t)&&(h.value=t,H.success(Q(`@42BB9:已删除模型`)))}async function ee(e){let t=h.value.map(t=>({...t,isDefault:t.id===e}));await a.saveModels(t)&&(h.value=t,H.success(Q(`@42BB9:已设置默认模型`)))}let E=J(``),te=J(``),ne=J(``),re=J(!1),D=J(!1),ie=J(`false`),O=J(!1),ae=J(`true`),oe=J(`main`),se=``,ce=``,k=!1,le=`false`,A=!1,j=`true`,M=`main`,ue=`light`,N=`zh-CN`;C(()=>o.modelValue,async e=>{if(l.value=e,e){E.value=r.userName,te.value=r.userEmail,ne.value=``,f.value=a.theme,p.value=a.locale,h.value=[...a.models],g.value=void 0,m.value=a.ui.editorAutoSave;try{u.value=!0,await pe()}finally{u.value=!1}se=E.value,ce=te.value,k=D.value,le=ie.value,A=O.value,j=ae.value,M=oe.value,ue=f.value,N=p.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 fe(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 pe(){let[e,t,n,r,i]=await Promise.all([P(`push.autoSetupRemote`),P(`pull.rebase`),P(`fetch.prune`),P(`core.autocrlf`),P(`init.defaultBranch`)]);D.value=(e||`false`).toLowerCase()===`true`;let a=(t||`false`).toLowerCase();ie.value=a===`true`||a===`merges`?a:`false`,O.value=(n||`false`).toLowerCase()===`true`;let o=(r||`true`).toLowerCase();ae.value=o===`true`||o===`input`?o:`false`,oe.value=i||`main`}async function F(){let e=[];try{D.value!==k&&e.push(fe(`push.autoSetupRemote`,D.value?`true`:`false`)),ie.value!==le&&e.push(fe(`pull.rebase`,ie.value)),O.value!==A&&e.push(fe(`fetch.prune`,O.value?`true`:`false`)),ae.value!==j&&e.push(fe(`core.autocrlf`,ae.value));let t=(oe.value||``).trim();return t&&t!==M&&e.push(fe(`init.defaultBranch`,t)),e.length===0?!0:(await Promise.all(e),H.success(Q(`@42BB9:已保存变更的 Git 配置`)),k=D.value,le=ie.value,A=O.value,j=ae.value,M=t||M,!0)}catch(e){return H.error(e.message),!1}}async function I(){let e={};if(f.value!==ue&&(e.theme=f.value,ue=f.value),p.value!==N&&(e.locale=p.value,i.changeLocale(p.value),N=p.value),e.theme!==void 0||e.locale!==void 0){let t=await a.saveGeneralSettings(e);return t&&H.success(Q(`@42BB9:通用设置已保存`)),t}return!0}async function me(){try{let e=await a.resetUiLayout();window.dispatchEvent(new CustomEvent(`ui-layout-reset`,{detail:{layout:e}})),H.success(Q(`@42BB9:布局比例已重置为默认值`))}catch(e){H.error(`${Q(`@42BB9:重置布局失败: `)}${e.message}`)}}async function he(){if(g.value!==void 0){H.warning(Q(`@42BB9:模型尚未保存,请先保存或取消模型编辑`));return}if(d.value===`config`){await L();return}if(d.value===`editor`){a.ui.editorAutoSave=m.value,H.success(Q(`@42BB9:编辑器设置已保存`)),l.value=!1;return}if(!await I())return;if(!E.value||!te.value){H.warning(Q(`@42BB9:用户名和邮箱不能为空`));return}let e=!0;(E.value!==se||te.value!==ce)&&(e=await r.restoreUserConfig(E.value,te.value),e&&(se=E.value,ce=te.value));let t=await F();e&&t&&(l.value=!1)}async function ge(){if(d.value=`config`,!ne.value)try{let e=await(await fetch(`/api/config/check-file-format`)).json();e.success||H.warning(e.message||Q(`@42BB9:配置文件格式可能有问题`)),ne.value=JSON.stringify(a.config,null,2)}catch{H.error(Q(`@42BB9:加载配置失败`))}}async function L(){let e;try{e=JSON.parse(ne.value)}catch(e){H.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){H.error(`${Q(`@42BB9:保存失败: `)}${t.error||Q(`@42BB9:未知错误`)}`);return}await a.loadConfig(),H.success(Q(`@42BB9:配置已保存`)),l.value=!1}catch(e){H.error(`${Q(`@42BB9:保存配置失败: `)}${e.message||e}`)}finally{re.value=!1}}async function _e(){try{let e=await(await fetch(`/api/config/open-file`,{method:`POST`})).json();e.success?H.success(Q(`@42BB9:已用系统程序打开配置文件`)):H.error(e.error||Q(`@42BB9:打开文件失败`))}catch(e){H.error(`${Q(`@42BB9:打开文件失败: `)}${e.message||e}`)}}let R={gitStore:r,localeStore:i,configStore:a,props:o,emit:s,visible:l,isLoading:u,activeTab:d,tempTheme:f,tempLocale:p,tempEditorAutoSave:m,aiModels:h,editingModelId:g,currentThemeForForm:_,editingModelInitial:v,hasChanges:y,startAddModel:b,startEditModel:x,cancelEditModel:S,handleAddModelSave:w,handleDeleteModel:T,handleSetDefaultModel:ee,tempUserName:E,tempUserEmail:te,configEditorText:ne,configEditorSaving:re,cfgAutoSetupRemote:D,cfgPullRebase:ie,cfgFetchPrune:O,cfgCoreAutoCrlf:ae,cfgInitDefaultBranch:oe,get initUserName(){return se},set initUserName(e){se=e},get initUserEmail(){return ce},set initUserEmail(e){ce=e},get initAutoSetupRemote(){return k},set initAutoSetupRemote(e){k=e},get initPullRebase(){return le},set initPullRebase(e){le=e},get initFetchPrune(){return A},set initFetchPrune(e){A=e},get initCoreAutoCrlf(){return j},set initCoreAutoCrlf(e){j=e},get initInitDefaultBranch(){return M},set initInitDefaultBranch(e){M=e},get initTheme(){return ue},set initTheme(e){ue=e},get initLocale(){return N},set initLocale(e){N=e},handleVisibleChange:de,getGlobalConfig:P,setGlobalConfig:fe,loadGlobalGitConfigs:pe,saveGlobalGitConfigs:F,saveGeneralSettings:I,onResetUiLayout:me,handleSave:he,onClickConfigTab:ge,saveConfigJson:L,openSystemConfigFile:_e,get $t(){return Q},get Check(){return tt},get InfoFilled(){return c},CommonDialog:vt,get AddModelForm(){return ft}};return Object.defineProperty(R,"__isScriptSetup",{enumerable:!1,value:!0}),R}}),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,a,o){let c=E,l=k,u=O,d=oe,f=ye,p=je,m=i,h=I,g=Xe,v=R,y=_,b=T,x=We;return Z(),U(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`},Se({default:L(()=>[z((Z(),X(`div`,{class:`user-settings-content`,"element-loading-text":r.$t(`@42BB9:正在加载配置...`),"element-loading-background":`rgba(0, 0, 0, 0.15)`},[B(` 左侧标签页切换 `),W(`div`,Iu,[W(`div`,{class:K([`tab-item`,{active:r.activeTab===`general`}]),onClick:t[0]||=e=>r.activeTab=`general`},[W(`span`,null,V(r.$t(`@42BB9:通用设置`)),1)],2),W(`div`,{class:K([`tab-item`,{active:r.activeTab===`git`}]),onClick:t[1]||=e=>r.activeTab=`git`},[W(`span`,null,V(r.$t(`@42BB9:Git 全局设置`)),1)],2),W(`div`,{class:K([`tab-item`,{active:r.activeTab===`commit`}]),onClick:t[2]||=e=>r.activeTab=`commit`},[W(`span`,null,V(r.$t(`@42BB9:提交设置`)),1)],2),W(`div`,{class:K([`tab-item`,{active:r.activeTab===`config`}]),onClick:r.onClickConfigTab},[W(`span`,null,V(r.$t(`@42BB9:编辑配置`)),1)],2),W(`div`,{class:K([`tab-item`,{active:r.activeTab===`editor`}]),onClick:t[3]||=e=>r.activeTab=`editor`},[W(`span`,null,V(r.$t(`@42BB9:编辑器设置`)),1)],2)]),B(` 右侧内容区域 `),W(`div`,Lu,[B(` 通用设置面板 `),z(W(`div`,Ru,[W(`div`,zu,[W(`div`,Bu,[W(`div`,Vu,[W(`p`,Hu,V(r.$t(`@42BB9:通用配置`)),1),W(`p`,Uu,V(r.$t(`@42BB9:自定义应用的外观和语言`)),1)])])]),W(`div`,Wu,[W(`div`,Gu,[W(`span`,null,V(r.$t(`@42BB9:外观`)),1)]),W(`div`,Ku,[W(`div`,qu,[W(`label`,Ju,V(r.$t(`@42BB9:主题`)),1),s(l,{modelValue:r.tempTheme,"onUpdate:modelValue":t[4]||=e=>r.tempTheme=e,class:`modern-input`,size:`default`},{default:L(()=>[s(c,{label:r.$t(`@42BB9:浅色`),value:`light`},null,8,[`label`]),s(c,{label:r.$t(`@42BB9:深色`),value:`dark`},null,8,[`label`]),s(c,{label:r.$t(`@42BB9:跟随系统`),value:`auto`},null,8,[`label`])]),_:1},8,[`modelValue`])])])]),W(`div`,Yu,[W(`div`,Xu,[W(`span`,null,V(r.$t(`@42BB9:语言`)),1)]),W(`div`,Zu,[W(`div`,Qu,[W(`label`,$u,V(r.$t(`@42BB9:界面语言`)),1),s(l,{modelValue:r.tempLocale,"onUpdate:modelValue":t[5]||=e=>r.tempLocale=e,class:`modern-input`,size:`default`},{default:L(()=>[s(c,{label:`简体中文`,value:`zh-CN`}),s(c,{label:`English`,value:`en-US`})]),_:1},8,[`modelValue`])])])]),B(` 界面(视图模式 / 分割比例 / 控制台 / 布局比例) `),W(`div`,ed,[W(`div`,td,[W(`span`,null,V(r.$t(`@42BB9:界面`)),1)]),W(`div`,nd,[B(` 文件列表视图模式 `),W(`div`,rd,[W(`label`,id,V(r.$t(`@42BB9:文件列表视图`)),1),s(d,{modelValue:r.configStore.ui.fileListViewMode,"onUpdate:modelValue":t[6]||=e=>r.configStore.ui.fileListViewMode=e,size:`default`},{default:L(()=>[s(u,{value:`list`},{default:L(()=>[M(V(r.$t(`@42BB9:列表`)),1)]),_:1}),s(u,{value:`tree`},{default:L(()=>[M(V(r.$t(`@42BB9:树状`)),1)]),_:1})]),_:1},8,[`modelValue`])]),B(` 文件差异分割比例 `),W(`div`,ad,[W(`label`,od,[M(V(r.$t(`@42BB9:文件差异分割`))+` `,1),W(`span`,sd,V(r.configStore.ui.fileDiffSplitPercent)+`%`,1)]),s(f,{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`])]),B(` 命令控制台(跨整行的复合控件) `),W(`div`,cd,[W(`label`,ld,V(r.$t(`@42BB9:命令控制台`)),1),W(`div`,ud,[s(p,{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`]),s(p,{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`]),s(p,{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`]),W(`div`,dd,[W(`span`,fd,V(r.$t(`@42BB9:控制台高度比例`))+`: `+V(r.configStore.ui.commandConsole.splitPercent)+`% `,1),s(f,{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`])])])]),B(` 布局比例重置 `),W(`div`,pd,[W(`label`,md,V(r.$t(`@42BB9:布局比例`)),1),W(`div`,hd,[s(m,{onClick:r.onResetUiLayout,size:`default`},{default:L(()=>[M(V(r.$t(`@42BB9:重置为默认布局`)),1)]),_:1}),W(`span`,gd,V(r.$t(`@42BB9:恢复默认的左/中/右/上面板比例`)),1)])])])]),B(` AI 模型配置 `),W(`div`,_d,[W(`div`,vd,[W(`span`,null,V(r.$t(`@42BB9:AI 模型配置`)),1),W(`button`,{class:`add-model-btn`,onClick:r.startAddModel},`+ `+V(r.$t(`@42BB9:添加模型`)),1)]),W(`div`,yd,[r.aiModels.length===0?(Z(),X(`div`,bd,V(r.$t(`@42BB9:暂未配置模型`)),1)):B(`v-if`,!0),(Z(!0),X(Y,null,F(r.aiModels,e=>(Z(),X(`div`,{key:e.id,class:`model-card`},[W(`div`,xd,[W(`div`,Sd,[W(`span`,Cd,V(e.name),1),e.isDefault?(Z(),X(`span`,wd,V(r.$t(`@42BB9:默认`)),1)):B(`v-if`,!0)]),W(`div`,Td,V(e.model)+` · `+V(e.baseURL),1)]),W(`div`,Ed,[e.isDefault?B(`v-if`,!0):(Z(),X(`button`,{key:0,class:`model-btn`,onClick:t=>r.handleSetDefaultModel(e.id)},V(r.$t(`@42BB9:设为默认`)),9,Dd)),W(`button`,{class:`model-btn`,onClick:t=>r.startEditModel(e)},V(r.$t(`@42BB9:编辑`)),9,Od),W(`button`,{class:`model-btn model-btn--danger`,onClick:t=>r.handleDeleteModel(e.id)},V(r.$t(`@42BB9:删除`)),9,kd)])]))),128))]),B(` 新增 / 编辑表单:使用 ai-model-form 组件 `),r.editingModelId===void 0?B(`v-if`,!0):(Z(),X(`div`,Ad,[(Z(),U(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`]]),B(` Git 全局设置面板 `),z(W(`div`,jd,[W(`div`,Md,[W(`div`,Nd,[W(`div`,Pd,[W(`p`,Fd,V(r.$t(`@42BB9:全局配置`)),1),W(`p`,Id,V(r.$t(`@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效`)),1)])])]),s(b,{class:`user-form`,"label-width":`auto`,model:{tempUserName:r.tempUserName,tempUserEmail:r.tempUserEmail}},{default:L(()=>[W(`div`,Ld,[W(`div`,Rd,[s(g,{class:`form-item`,label:r.$t(`@42BB9:用户名`)},{default:L(()=>[s(h,{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`]),s(g,{class:`form-item`,label:r.$t(`@42BB9:邮箱地址`)},{default:L(()=>[s(h,{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`])])]),B(` 高级设置:常用全局 Git 配置 `),W(`div`,zd,[W(`div`,Bd,[W(`span`,null,V(r.$t(`@42BB9:高级配置`)),1)]),W(`div`,Vd,[W(`div`,Hd,[W(`label`,Ud,[M(V(r.$t(`@42BB9:自动设置上游`))+` `,1),s(y,{content:r.$t(`@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.cfgAutoSetupRemote,"onUpdate:modelValue":t[14]||=e=>r.cfgAutoSetupRemote=e},null,8,[`modelValue`])]),W(`div`,Wd,[W(`label`,Gd,V(r.$t(`@42BB9:拉取策略`)),1),s(l,{modelValue:r.cfgPullRebase,"onUpdate:modelValue":t[15]||=e=>r.cfgPullRebase=e,class:`modern-input`,size:`default`},{default:L(()=>[s(c,{label:r.$t(`@42BB9:merge (默认)`),value:`false`},null,8,[`label`]),s(c,{label:`rebase`,value:`true`}),s(c,{label:r.$t(`@42BB9:rebase(保留合并)`),value:`merges`},null,8,[`label`])]),_:1},8,[`modelValue`])]),W(`div`,Kd,[W(`label`,qd,[M(V(r.$t(`@42BB9:自动清理远程分支`))+` `,1),s(y,{content:r.$t(`@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.cfgFetchPrune,"onUpdate:modelValue":t[16]||=e=>r.cfgFetchPrune=e},null,8,[`modelValue`])]),W(`div`,Jd,[W(`label`,Yd,V(r.$t(`@42BB9:换行符处理`)),1),s(l,{modelValue:r.cfgCoreAutoCrlf,"onUpdate:modelValue":t[17]||=e=>r.cfgCoreAutoCrlf=e,class:`modern-input`,size:`default`},{default:L(()=>[s(c,{label:`true (Windows)`,value:`true`}),s(c,{label:`input`,value:`input`}),s(c,{label:`false`,value:`false`})]),_:1},8,[`modelValue`])]),W(`div`,Xd,[W(`label`,Zd,[M(V(r.$t(`@42BB9:默认初始化分支`))+` `,1),s(y,{content:r.$t(`@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(h,{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`]]),B(` 提交设置面板 `),z(W(`div`,Qd,[W(`div`,$d,[W(`div`,ef,[W(`div`,tf,[W(`p`,nf,V(r.$t(`@76872:提交设置`)),1),W(`p`,rf,V(r.$t(`@76872:这些设置实时生效`)),1)])])]),W(`div`,af,[W(`div`,of,[W(`span`,null,V(r.$t(`@76872:提交格式与行为`)),1)]),W(`div`,sf,[W(`div`,cf,[W(`label`,lf,V(r.$t(`@76872:标准化提交`)),1),s(p,{modelValue:r.configStore.isStandardCommit,"onUpdate:modelValue":t[19]||=e=>r.configStore.isStandardCommit=e},null,8,[`modelValue`])]),W(`div`,uf,[W(`label`,df,[M(V(r.$t(`@76872:跳过钩子检查`))+` `,1),s(y,{content:r.$t(`@76872:添加 --no-verify 参数`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.skipHooks,"onUpdate:modelValue":t[20]||=e=>r.configStore.skipHooks=e},null,8,[`modelValue`])]),W(`div`,ff,[W(`label`,pf,[M(V(r.$t(`@76872:回车自动提交`))+` `,1),s(y,{content:r.$t(`@76872:输入提交信息后按回车直接执行一键推送`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.autoQuickPushOnEnter,"onUpdate:modelValue":t[21]||=e=>r.configStore.autoQuickPushOnEnter=e},null,8,[`modelValue`])]),W(`div`,mf,[W(`label`,hf,[M(V(r.$t(`@76872:Push完成自动关闭`))+` `,1),s(y,{content:r.$t(`@76872:推送成功后自动关闭进度弹窗`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.autoClosePushModal,"onUpdate:modelValue":t[22]||=e=>r.configStore.autoClosePushModal=e},null,8,[`modelValue`])]),W(`div`,gf,[W(`label`,_f,[M(V(r.$t(`@76872:推送前拉取更新`))+` `,1),s(y,{content:r.$t(`@76872:推送前自动拉取远程更新,有冲突则停止推送`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.pullBeforePush,"onUpdate:modelValue":t[23]||=e=>r.configStore.pullBeforePush=e},null,8,[`modelValue`])]),W(`div`,vf,[W(`label`,yf,[M(V(r.$t(`@76872:自动填充默认提交信息`))+` `,1),s(y,{content:r.$t(`@76872:打开页面或提交完成后自动填充默认提交信息`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.autoSetDefaultMessage,"onUpdate:modelValue":t[24]||=e=>r.configStore.autoSetDefaultMessage=e},null,8,[`modelValue`])])])])],512),[[q,r.activeTab===`commit`]]),B(` 编辑配置 JSON 面板 `),z(W(`div`,bf,[W(`div`,xf,[W(`div`,Sf,[W(`div`,Cf,[W(`p`,wf,V(r.$t(`@42BB9:编辑当前项目的配置文件`)),1),W(`p`,Tf,V(r.$t(`@42BB9:直接编辑 JSON,支持所有配置项`)),1)])])]),W(`div`,Ef,[s(h,{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`])]),W(`div`,Df,[W(`button`,{type:`button`,class:`dialog-cancel-btn system-config-btn`,onClick:r.openSystemConfigFile},V(r.$t(`@42BB9:打开系统配置文件`)),1)])],512),[[q,r.activeTab===`config`]]),B(` 编辑器设置面板 `),z(W(`div`,Of,[W(`div`,kf,[W(`div`,Af,[W(`div`,jf,[W(`p`,Mf,V(r.$t(`@42BB9:编辑器设置`)),1),W(`p`,Nf,V(r.$t(`@42BB9:自定义编辑器行为`)),1)])])]),W(`div`,Pf,[W(`div`,Ff,[W(`span`,null,V(r.$t(`@42BB9:文件编辑`)),1)]),W(`div`,If,[W(`div`,Lf,[W(`label`,Rf,V(r.$t(`@42BB9:自动保存`)),1),s(p,{modelValue:r.tempEditorAutoSave,"onUpdate:modelValue":t[26]||=e=>r.tempEditorAutoSave=e},null,8,[`modelValue`])]),r.tempEditorAutoSave?(Z(),X(`div`,zf,[W(`span`,Bf,V(r.$t(`@42BB9:失去焦点时自动保存当前文件`)),1)])):B(`v-if`,!0)])])],512),[[q,r.activeTab===`editor`]])])],8,Fu)),[[x,r.isLoading]])]),_:2},[r.activeTab===`commit`?void 0:{name:`footer`,fn:L(()=>[W(`div`,Vf,[t[29]||=W(`div`,null,null,-1),W(`div`,Hf,[W(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[27]||=e=>r.visible=!1,disabled:r.isLoading},V(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},[s(v,null,{default:L(()=>[s(r.Check)]),_:1}),W(`span`,null,V(r.activeTab===`config`?r.$t(`@42BB9:保存配置`):r.$t(`@42BB9:保存设置`)),1)],8,Wf)):B(`v-if`,!0)])])]),key:`0`}]),1032,[`modelValue`,`title`])}var Kf=$(Pu,[[`render`,Gf],[`__scopeId`,`data-v-97bdc1da`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/GitGlobalSettingsDialog.vue`]]),qf=ut(`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=ut(`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=ut(`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=N({__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 p={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 _}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Zf={class:`activity-bar`},Qf=[`aria-label`,`aria-pressed`],$f=[`title`],ep=[`aria-label`,`aria-pressed`],tp=[`title`],np=[`aria-label`,`aria-pressed`],rp=[`title`],ip=[`aria-label`,`aria-pressed`],ap=[`aria-label`,`aria-pressed`],op=[`title`],sp=[`aria-label`,`aria-pressed`],cp=[`aria-label`,`aria-pressed`];function lp(e,t,n,r,i,a){return Z(),X(`div`,Zf,[B(` Git 页面 `),s(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:L(()=>[W(`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`},[B(` git.svg `),t[7]||=W(`svg`,{viewBox:`0 0 1025 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`},V(r.uncommittedBadge),9,$f)):B(`v-if`,!0)],10,Qf)]),_:1},8,[`content`]),B(` 控制台页面:自定义命令 + 命令控制台(从 Git 视图拆出) `),s(r.ElTooltip,{content:r.terminalSessionsStore.hasActive?`${r.$t(`@ACTBAR:控制台`)} · ${r.terminalSessionsStore.count} ${r.$t(`@ACTBAR:个终端会话`)}`:r.$t(`@ACTBAR:控制台`),placement:`right`,"show-after":300},{default:L(()=>[W(`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`},[B(` terminal.svg: 终端窗口 + 光标 `),t[8]||=W(`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`},[W(`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`}),W(`path`,{d:`M6 9l3 3-3 3`}),W(`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`},V(r.terminalSessionsStore.count>99?`99+`:r.terminalSessionsStore.count),9,tp)):B(`v-if`,!0)],10,ep)]),_:1},8,[`content`]),B(` 编辑器页面 `),s(r.ElTooltip,{content:r.editorTabsStore.hasDirty?`${r.$t(`@ACTBAR:编辑器`)} · ${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`:r.$t(`@ACTBAR:编辑器`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`editor`}]),onClick:t[2]||=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`},[B(` code-folder.svg `),t[9]||=W(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`},V(r.editorDirtyBadge),9,rp)):B(`v-if`,!0)],10,np)]),_:1},8,[`content`]),B(` 源码地图 `),s(r.ElTooltip,{content:r.$t(`@ACTBAR:源码地图`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`source-map`}]),onClick:t[3]||=e=>r.select(`source-map`),"aria-label":r.$t(`@ACTBAR:源码地图`),"aria-pressed":r.props.activeView===`source-map`},[B(` code-map.svg `),t[10]||=W(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[W(`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,ip)]),_:1},8,[`content`]),B(` 工作台 `),s(r.ElTooltip,{content:r.$t(`@ACTBAR:工作台`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`workbench`}]),onClick:t[4]||=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`},[B(` code-task.svg `),t[11]||=W(`svg`,{viewBox:`0 0 1044 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`},V(r.wbStatus.runningCount>99?`99+`:r.wbStatus.runningCount),9,op)):B(`v-if`,!0)],10,ap)]),_:1},8,[`content`]),B(` 系统监控 `),s(r.ElTooltip,{content:r.$t(`@ACTBAR:系统监控`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`monitor`}]),onClick:t[5]||=e=>r.select(`monitor`),"aria-label":r.$t(`@ACTBAR:系统监控`),"aria-pressed":r.props.activeView===`monitor`},[B(` activity.svg: 心跳/波形监控图标 `),t[12]||=W(`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`},[W(`path`,{d:`M22 12h-4l-3 9L9 3l-3 9H2`})],-1)],10,sp)]),_:1},8,[`content`]),B(` 思维导图 `),s(r.ElTooltip,{content:r.$t(`@ACTBAR:思维导图`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`mindmap`}]),onClick:t[6]||=e=>r.select(`mindmap`),"aria-label":r.$t(`@ACTBAR:思维导图`),"aria-pressed":r.props.activeView===`mindmap`},[B(` mindmap.svg: 中心节点 + 四向辐射的节点拓扑 `),t[13]||=W(`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`},[W(`circle`,{cx:`12`,cy:`12`,r:`2.2`}),W(`circle`,{cx:`4.5`,cy:`5`,r:`1.8`}),W(`circle`,{cx:`19.5`,cy:`5`,r:`1.8`}),W(`circle`,{cx:`4.5`,cy:`19`,r:`1.8`}),W(`circle`,{cx:`19.5`,cy:`19`,r:`1.8`}),W(`line`,{x1:`10.3`,y1:`10.6`,x2:`6`,y2:`6.2`}),W(`line`,{x1:`13.7`,y1:`10.6`,x2:`18`,y2:`6.2`}),W(`line`,{x1:`10.3`,y1:`13.4`,x2:`6`,y2:`17.8`}),W(`line`,{x1:`13.7`,y1:`13.4`,x2:`18`,y2:`17.8`})],-1)],10,cp)]),_:1},8,[`content`])])}var up=$(Xf,[[`render`,lp],[`__scopeId`,`data-v-d652a324`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/ActivityBar.vue`]]),dp=zt(),fp=15e3,pp=ut(`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:${dp}`,{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()},fp))}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}}),mp=N({__name:`InstanceSwitcher`,setup(e,{expose:t}){t();let n=pp(),r=G(()=>n.list.length>0),i=G(()=>n.list.length),a=G(()=>`${i.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:r,count:i,triggerText:a,handleOpen:s,pathSubtitle:c,get ElDropdown(){return o},get ElDropdownMenu(){return ue},get ElDropdownItem(){return rt},get ElIcon(){return R},get ElTag(){return st},get $t(){return Q}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),hp={class:`instance-switcher`},gp={class:`switcher-text`},_p={class:`instance-row instance-row--current`},vp={class:`instance-row-main`},yp={class:`instance-name`},bp={class:`instance-row-sub`},xp={class:`instance-path`},Sp={class:`instance-row`},Cp={class:`instance-row-main`},wp={class:`instance-name`},Tp={class:`instance-row-sub`},Ep={class:`instance-path`},Dp={class:`instance-empty`};function Op(e,t,n,r,i,a){return r.hasAny?(Z(),U(r.ElDropdown,{key:0,trigger:`click`,placement:`bottom-end`,onCommand:r.handleOpen},{dropdown:L(()=>[s(r.ElDropdownMenu,{class:`instance-dropdown-menu`},{default:L(()=>[B(` 当前实例(不可点击) `),r.store.currentInstance?(Z(),U(r.ElDropdownItem,{key:0,disabled:``},{default:L(()=>[W(`div`,_p,[W(`div`,vp,[W(`span`,yp,V(r.store.currentInstance.projectName),1),s(r.ElTag,{size:`small`,type:`primary`,effect:`light`,class:`instance-tag`},{default:L(()=>[M(V(r.$t(`@INSSW:当前`)),1)]),_:1})]),W(`div`,bp,[s(r.ElTag,{size:`small`,effect:`plain`,class:`port-badge`},{default:L(()=>[M(`:`+V(r.store.currentInstance.port),1)]),_:1}),W(`span`,xp,V(r.pathSubtitle(r.store.currentInstance)),1)])])]),_:1})):B(`v-if`,!0),B(` 其他运行中的实例 `),(Z(!0),X(Y,null,F(r.store.otherInstances,e=>(Z(),U(r.ElDropdownItem,{key:e.pid,command:e.port},{default:L(()=>[W(`div`,Sp,[W(`div`,Cp,[W(`span`,wp,V(e.projectName),1),s(r.ElTag,{size:`small`,effect:`plain`,class:`port-badge`},{default:L(()=>[M(`:`+V(e.port),1)]),_:2},1024)]),W(`div`,Tp,[W(`span`,Ep,V(r.pathSubtitle(e)),1)])])]),_:2},1032,[`command`]))),128)),B(` 空状态 `),r.store.otherInstances.length===0?(Z(),U(r.ElDropdownItem,{key:1,disabled:``},{default:L(()=>[W(`span`,Dp,V(r.$t(`@INSSW:无其他运行中的实例`)),1)]),_:1})):B(`v-if`,!0)]),_:1})]),default:L(()=>[W(`span`,hp,[s(r.ElIcon,{class:`switcher-icon`},{default:L(()=>[B(` apps/layers 图标 `),t[0]||=W(`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`},[W(`rect`,{x:`3`,y:`3`,width:`7`,height:`7`,rx:`1`}),W(`rect`,{x:`14`,y:`3`,width:`7`,height:`7`,rx:`1`}),W(`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`}),W(`rect`,{x:`14`,y:`14`,width:`7`,height:`7`,rx:`1`})],-1)]),_:1}),W(`span`,gp,V(r.triggerText),1)])]),_:1})):B(`v-if`,!0)}var kp=$(mp,[[`render`,Op],[`__scopeId`,`data-v-8a24f415`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/InstanceSwitcher.vue`]]),Ap=J(!0),jp=J(null),Mp=J(0),Np=J(!1),Pp=!1,Fp=null,Ip=null,Lp=null;function Rp(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 zp=J(null);async function Bp(){let e=zp.value;if(!e||!Fp)return!1;try{let t=await Fp(e.url,e.init);return t.ok?(Ap.value=!0,jp.value=null,Np.value=!1,!0):(jp.value=Rp(null,t),!1)}catch(e){return jp.value=Rp(e),!1}}function Vp(){Np.value=!0}function Hp(){Pp||typeof window>`u`||(Fp=window.fetch.bind(window),window.fetch=async function(e,t){let n=typeof e==`string`?e:e.toString();try{let r=await Fp(e,t);return!r.ok&&r.status>=500?(Ap.value=!1,jp.value=Rp(null,r),Mp.value=Date.now(),zp.value={url:n,init:t}):r.ok&&(Ap.value||=!0,jp.value=null,Mp.value=0),r}catch(e){throw Ap.value=!1,jp.value=Rp(e),Mp.value=Date.now(),zp.value={url:n,init:t},e}},Ip=()=>{Ap.value=!0},Lp=()=>{Ap.value=!1,jp.value=Q(`@NET:浏览器报告离线`),Mp.value=Date.now()},window.addEventListener(`online`,Ip),window.addEventListener(`offline`,Lp),Pp=!0)}function Up(){Pp&&(Fp&&(window.fetch=Fp),Ip&&window.removeEventListener(`online`,Ip),Lp&&window.removeEventListener(`offline`,Lp),Pp=!1,Fp=null,Ip=null,Lp=null)}function Wp(){return{isOnline:Ke(Ap),lastError:Ke(jp),lastErrorAt:Ke(Mp),isDismissed:Ke(Np),lastFailedRequest:Ke(zp),start:Hp,stop:Up,retryLast:Bp,dismiss:Vp}}var Gp=280,Kp=N({__name:`AppErrorBanner`,setup(e,{expose:t}){t();let{isOnline:n,lastError:r,lastErrorAt:i,isDismissed:a,retryLast:o,dismiss:s}=Wp(),c=G(()=>!n.value&&!a.value),l=J(!1),u=J(!1);C(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},Gp))},{immediate:!0});let d=J(Q(`@NET:刚刚`)),f=null;function p(){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 m(){f||=(p(),setInterval(p,1e3))}function g(){f&&=(clearInterval(f),null)}C(c,e=>{e?m():g()}),h(g);let _={isOnline:n,lastError:r,lastErrorAt:i,isDismissed:a,retryLast:o,dismiss:s,shouldShow:c,visible:l,isLeaving:u,LEAVE_ANIMATION_MS:Gp,relativeTime:d,get relativeTimer(){return f},set relativeTimer(e){f=e},updateRelativeTime:p,startRelativeTimer:m,stopRelativeTimer:g,get $t(){return Q},get WarningFilled(){return ce},get Refresh(){return ne},get Close(){return qe}};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),qp={class:`banner-left`},Jp={class:`banner-text`},Yp={class:`banner-title`},Xp={key:0,class:`banner-detail`},Zp={"data-net-error-time":``},Qp={class:`banner-actions`},$p=[`aria-label`];function em(e,t,n,r,i,a){let o=R;return r.visible?(Z(),X(`div`,{key:0,class:K([`app-error-banner`,{"is-leaving":r.isLeaving}]),role:`alert`,"aria-live":`assertive`},[W(`div`,qp,[s(o,{class:`banner-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.WarningFilled)]),_:1}),W(`div`,Jp,[W(`span`,Yp,V(r.$t(`@NET:无法连接到本地服务,请检查后端进程`)),1),r.lastError?(Z(),X(`span`,Xp,[M(V(r.lastError)+` · `,1),W(`span`,Zp,V(r.relativeTime),1)])):B(`v-if`,!0)])]),W(`div`,Qp,[W(`button`,{type:`button`,class:`banner-btn banner-btn--retry`,onClick:t[0]||=(...e)=>r.retryLast&&r.retryLast(...e)},[s(o,{class:`banner-btn-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Refresh)]),_:1}),W(`span`,null,V(r.$t(`@NET:重试`)),1)]),W(`button`,{type:`button`,class:`banner-btn banner-btn--close`,"aria-label":r.$t(`@NET:关闭`),onClick:t[1]||=(...e)=>r.dismiss&&r.dismiss(...e)},[s(o,{class:`banner-btn-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Close)]),_:1})],8,$p)])],2)):B(`v-if`,!0)}var tm=$(Kp,[[`render`,em],[`__scopeId`,`data-v-4f5b8eef`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/AppErrorBanner.vue`]]),nm=N({__name:`RecentProjectsList`,props:{variant:{type:String,required:!1,default:`inline`}},setup(e,{expose:t}){t();let n=J([]),r=J(!1),i=J(``);function o(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 s=G(()=>{let e=i.value.trim().toLowerCase();return e?n.value.filter(t=>t.path.toLowerCase().includes(e)):n.value}),c=G(()=>s.value.map(e=>{let{base:t}=o(e.path);return{...e,displayBase:t}}));async function l(){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 u(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||H.error(t?.error||Q(`@13D1C:打开失败`))}catch(e){H.error(`${Q(`@13D1C:打开失败`)}: ${e.message}`)}}function d(e){if(!e.exists){H.warning(Q(`@13D1C:目录不存在,无法打开`));return}u(e.path)}te(()=>{l()});let f={recentDirectories:n,isLoadingRecent:r,searchQuery:i,splitPath:o,filteredDirectories:s,displayItems:c,loadRecentDirectories:l,openRecentDirInNewTab:u,onRecentDirClick:d,get Folder(){return ot},get Loading(){return p},get Search(){return a},get $t(){return Q}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),rm={class:`recent-projects__head`},im={class:`recent-projects__title`},am={class:`recent-projects__hint`},om={key:0,class:`recent-projects__search`},sm=[`placeholder`,`aria-label`],cm=[`aria-label`],lm={key:1,class:`recent-projects__empty`},um={key:2,class:`recent-projects__empty`},dm={key:3,class:`recent-projects__empty`},fm=[`aria-label`],pm=[`title`,`aria-label`,`onClick`],mm=[`title`],hm={class:`recent-projects__name-base`},gm={class:`recent-projects__name-parent`},_m={key:0,class:`recent-projects__tag`};function vm(e,t,n,r,i,a){let o=R;return Z(),X(`div`,{class:K([`recent-projects`,{"recent-projects--fullpage":n.variant===`fullpage`}])},[W(`div`,rm,[W(`span`,im,V(r.$t(`@13D1C:最近项目`)),1),W(`span`,am,V(r.$t(`@13D1C:点击在新标签页打开`)),1)]),B(` 搜索框:仅 fullpage 模式(非 Git 仓库右侧整列)展示,inline 紧凑版不渲染避免占用空间 `),n.variant===`fullpage`?(Z(),X(`div`,om,[s(o,{class:`recent-projects__search-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Search)]),_:1}),z(W(`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,sm),[[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,cm)):B(`v-if`,!0)])):B(`v-if`,!0),r.isLoadingRecent&&r.recentDirectories.length===0?(Z(),X(`div`,lm,[s(o,null,{default:L(()=>[s(r.Loading)]),_:1}),W(`span`,null,V(r.$t(`@13D1C:加载中...`)),1)])):r.recentDirectories.length===0?(Z(),X(`div`,um,V(r.$t(`@13D1C:暂无最近项目`)),1)):r.filteredDirectories.length===0?(Z(),X(`div`,dm,V(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}])},[W(`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)},[s(o,{class:`recent-projects__icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Folder)]),_:1}),W(`span`,{class:`recent-projects__name`,title:e.path},[W(`span`,hm,V(e.displayBase),1),W(`span`,gm,V(e.path),1)],8,mm),e.exists?B(`v-if`,!0):(Z(),X(`span`,_m,V(r.$t(`@13D1C:不存在`)),1))],8,pm)],2))),128))],8,fm))],2)}var ym=$(nm,[[`render`,vm],[`__scopeId`,`data-v-53d20908`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/RecentProjectsList.vue`]]),bm=N({__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}}),xm={class:`view-loading`},Sm=[`aria-label`],Cm={class:`view-loading__text`};function wm(e,t,n,r,i,a){return Z(),X(`div`,xm,[W(`div`,{class:`view-loading__spinner`,role:`status`,"aria-label":n.text},[t[0]||=W(`svg`,{viewBox:`0 0 24 24`,class:`view-loading__icon`},[W(`circle`,{class:`view-loading__track`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`}),W(`circle`,{class:`view-loading__arc`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`,"stroke-linecap":`round`})],-1),W(`span`,Cm,V(n.text),1)],8,Sm)])}var Tm=$(bm,[[`render`,wm],[`__scopeId`,`data-v-d040c841`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/ViewLoading.vue`]]),Em=N({__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)});C(_,e=>{e||v()});function v(){o.value=``,s.value=!1,c.value=``,l.value=-1}async function y(){if(!o.value.trim()){H.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){H.error(`${Q(`@60CAC:模板保存失败: `)}${e.message}`)}finally{u.value=!1}}function b(e){i(`use-template`,e),r.type!==`message`&&(_.value=!1)}function x(e,t){s.value=!0,c.value=e,o.value=e,l.value=t}function S(){v()}async function w(e){try{f.value=!0,await a.pinTemplate(e,r.type)}catch(e){H.error(`${Q(`@60CAC:置顶模板失败: `)}${e.message}`)}finally{f.value=!1}}async function T(e){try{await a.deleteTemplate(e,r.type)}catch(e){H.error(`${Q(`@60CAC:模板删除失败: `)}${e.message}`)}}async function ee(){if(!(r.type!==`message`||!o.value.trim()))try{d.value=!0,await a.saveDefaultMessage(o.value)&&i(`set-default`,o.value)}catch(e){H.error(`${Q(`@60CAC:设置默认提交信息失败: `)}${e.message}`)}finally{d.value=!1}}t({resetForm:v});let E={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:b,startEditTemplate:x,cancelEdit:S,pinTemplate:w,deleteTemplate:T,setAsDefault:ee,get $t(){return Q},get Edit(){return Pe},CommonDialog:vt};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}}),Dm={class:`template-form`},Om={class:`template-form-buttons`},km={key:0,class:`template-list`},Am={key:1,class:`template-list-scroll`},jm={class:`template-content`},Mm={class:`template-actions`},Nm={class:`templates-container`},Pm={class:`message-templates-list`},Fm={class:`templates-scroll-area`},Im={class:`template-content`},Lm={class:`template-actions`},Rm={key:0,class:`current-default-message`},zm={class:`default-message-content`},Bm={key:2,class:`message-help-text`};function Vm(e,t,n,r,a,o){let c=I,l=i,u=j,d=gt,f=Ie,p=x,m=st;return Z(),U(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:L(()=>[W(`div`,{class:K([`template-container`,{"message-template-container":n.type===`message`}])},[W(`div`,Dm,[s(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`]),W(`div`,Om,[r.isEditing?(Z(),U(l,{key:0,onClick:r.cancelEdit},{default:L(()=>[M(V(r.$t(`@60CAC:取消`)),1)]),_:1})):B(`v-if`,!0),s(l,{type:`primary`,onClick:r.saveTemplate,disabled:!r.newTemplate.trim()||r.isSaving,loading:r.isSaving},{default:L(()=>[M(V(r.buttonText),1)]),_:1},8,[`disabled`,`loading`]),B(` 默认提交信息设置的特殊按钮 `),n.type===`message`?(Z(),U(l,{key:1,type:`success`,onClick:r.setAsDefault,disabled:!r.newTemplate.trim()||r.isSavingDefault,loading:r.isSavingDefault,plain:``},{default:L(()=>[M(V(r.$t(`@60CAC:设为默认提交信息`)),1)]),_:1},8,[`disabled`,`loading`])):B(`v-if`,!0)])]),B(` 普通模板布局:固定标题,仅列表滚动 `),n.type===`message`?(Z(),X(Y,{key:1},[B(` 提交信息模板的特殊布局 `),W(`div`,Nm,[W(`div`,Pm,[W(`h3`,null,V(r.$t(`@60CAC:已保存模板`)),1),W(`div`,Fm,[r.templates.length===0?(Z(),U(u,{key:0,description:n.emptyDescription},null,8,[`description`])):B(`v-if`,!0),(Z(!0),X(Y,null,F(r.templates,(e,t)=>(Z(),U(p,{key:t,class:`template-item`},{default:L(()=>[s(f,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:L(()=>[W(`div`,Im,V(e),1),W(`div`,Lm,[s(l,{size:`small`,class:`pin-button`,onClick:t=>r.pinTemplate(e),loading:r.isPinning,disabled:t===0,title:`置顶`},{default:L(()=>[s(d,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:1},8,[`onClick`,`loading`,`disabled`]),s(l,{type:`primary`,size:`small`,onClick:t=>r.useTemplate(e)},{default:L(()=>[M(V(r.$t(`@60CAC:使用`)),1)]),_:1},8,[`onClick`]),s(l,{type:`warning`,size:`small`,icon:r.Edit,onClick:n=>r.startEditTemplate(e,Number(t))},{default:L(()=>[M(V(r.$t(`@60CAC:编辑`)),1)]),_:1},8,[`icon`,`onClick`]),s(l,{type:`danger`,size:`small`,onClick:t=>r.deleteTemplate(e)},{default:L(()=>[M(V(r.$t(`@60CAC:删除`)),1)]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))])]),B(` 默认提交信息部分 `),n.showDefaultSection?(Z(),X(`div`,Rm,[W(`h3`,null,V(r.$t(`@60CAC:当前默认提交信息`)),1),r.defaultCommitMessage?(Z(),U(p,{key:0,class:`default-message-card`},{default:L(()=>[W(`div`,zm,V(r.defaultCommitMessage),1)]),_:1})):(Z(),U(u,{key:1,description:r.$t(`@60CAC:尚未设置默认提交信息`),"image-size":100},null,8,[`description`])),n.showHelpText?(Z(),X(`div`,Bm,[W(`h4`,null,V(r.$t(`@60CAC:关于默认提交信息`)),1),W(`p`,null,V(r.$t(`@60CAC:默认提交信息将在未输入提交信息时自动使用。`)),1),W(`p`,null,[M(V(r.$t(`@60CAC:你可以通过点击左侧模板的`)),1),s(m,{size:`small`,type:`primary`},{default:L(()=>[M(V(r.$t(`@60CAC:使用`)),1)]),_:1}),M(V(r.$t(`@60CAC:按钮先选择喜欢的模板,然后点击上方`)),1),s(m,{size:`small`,type:`success`},{default:L(()=>[M(V(r.$t(`@60CAC:设为默认提交信息`)),1)]),_:1}),M(V(r.$t(`@60CAC:按钮保存。`)),1)])])):B(`v-if`,!0)])):B(`v-if`,!0)])],2112)):(Z(),X(`div`,km,[W(`h3`,null,V(r.$t(`@60CAC:已保存`))+` `+V(n.type===`description`?r.$t(`@60CAC:模板`):n.type===`scope`?r.$t(`@60CAC:作用域`):n.type===`command`?r.$t(`@CMD01:命令模板`):``),1),r.templates.length===0?(Z(),U(u,{key:0,description:n.emptyDescription},null,8,[`description`])):(Z(),X(`div`,Am,[(Z(!0),X(Y,null,F(r.templates,(e,t)=>(Z(),U(p,{key:t,class:`template-item`},{default:L(()=>[s(f,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:L(()=>[W(`div`,jm,V(e),1),W(`div`,Mm,[s(l,{size:`small`,class:`pin-button`,onClick:t=>r.pinTemplate(e),loading:r.isPinning,disabled:t===0,title:`置顶`},{default:L(()=>[s(d,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:1},8,[`onClick`,`loading`,`disabled`]),s(l,{type:`primary`,size:`small`,onClick:t=>r.useTemplate(e)},{default:L(()=>[M(V(r.$t(`@60CAC:使用`)),1)]),_:1},8,[`onClick`]),s(l,{type:`warning`,size:`small`,icon:r.Edit,onClick:n=>r.startEditTemplate(e,Number(t))},{default:L(()=>[M(V(r.$t(`@60CAC:编辑`)),1)]),_:1},8,[`icon`,`onClick`]),s(l,{type:`danger`,size:`small`,onClick:t=>r.deleteTemplate(e)},{default:L(()=>[M(V(r.$t(`@60CAC:删除`)),1)]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))]))]))],2)]),_:1},8,[`modelValue`,`title`,`custom-class`])}var Hm=$(Em,[[`render`,Vm],[`__scopeId`,`data-v-9f9265ce`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/TemplateManager.vue`]]),Um=N({__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(S.value)?S.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){H.error(`${Q(`@CMD01:保存命令失败: `)}${e.message}`)}}let a=e,o=n,s=xt(),{currentLocale:c}=dt(bt()),l=G(()=>s.commandTemplates||[]),d=J(!1);function f(e,t){let n=Array.isArray(l.value)?l.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=N({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()=>u(`div`,{class:`cmd-param-form`},e.vars.map(n=>u(`div`,{class:`cmd-param-row`},[u(`div`,{class:`cmd-param-label`},n),u(I,{modelValue:e.values[n],"onUpdate:modelValue":t=>{e.values[n]=String(t??``)},placeholder:Q(`@CMD01:请输入变量值`,{var:n}),clearable:!0}),t(n)?u(`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),b=J(``),x=J(!1),S=G(()=>s.customCommands||[]),w=G({get:()=>a.visible,set:e=>o(`update:visible`,e)});C(w,e=>{e||T()});function T(){v.value={name:``,description:``,directory:``,command:``,params:[]},y.value=!1,b.value=``}C(()=>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 ee(){if(!v.value.name.trim()){H.warning(Q(`@CMD01:命令名称不能为空`));return}if(!v.value.command.trim()){H.warning(Q(`@CMD01:命令内容不能为空`));return}try{x.value=!0,y.value?await s.updateCustomCommand(b.value,v.value)&&T():((!v.value.directory||!v.value.directory.trim())&&(v.value.directory=s.currentDirectory||``),await s.saveCustomCommand(v.value)&&T())}catch(e){H.error(`${Q(`@CMD01:命令保存失败: `)}${e.message}`)}finally{x.value=!1}}function E(e){y.value=!0,b.value=e.id||``,v.value={name:e.name,description:e.description||``,directory:e.directory,command:e.command,params:_(e)}}function te(){T()}async function ne(e){try{await Fe.confirm(Q(`@CMD01:确定要删除这个自定义命令吗?`),Q(`@CMD01:删除确认`),{confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`}),await s.deleteCustomCommand(e)}catch{}}async function re(e){await s.pinCustomCommand(e)}async function D(e){let t=String(e?.command||``),n=m(t);if(!n.length){o(`execute-command`,e);return}let r=be({});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 Fe({title:Q(`@CMD01:执行参数`),message:u(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()===``){H.warning(Q(`@CMD01:请输入必填变量: `,{var:e.name}));return}}let c=h(t,r);o(`execute-command`,{...e,command:c})}catch{}}let ie=J(!1);function O(){ie.value=!0}function ae(e){v.value.directory=e}function oe(){v.value.directory=s.currentDirectory||``}let se=J(null),ce=J([]);function k(e){ce.value=e}async function le(){let e=[...ce.value],t=e.length;if(t)try{await Fe.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),ce.value=[],H.success(Q(`@CMD01:批量删除成功`,{count:n}))}catch{}}let A=J(!1),j=J([]),M=J([]),ue=J(null),de=J(!1),P=J(!1);async function fe(){try{de.value=!0,A.value=!0,j.value=[],M.value=[];let e=await(await fetch(`/api/scan-npm-scripts`)).json();if(!e.success){H.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.error||``}`),A.value=!1;return}let t=e.packages||[];if(t.length===0){H.warning(Q(`@CMD01:未找到任何NPM脚本`)),A.value=!1;return}let n=new Set((Array.isArray(S.value)?S.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)})}}j.value=r}catch(e){H.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`),A.value=!1}finally{de.value=!1}}function pe(e){M.value=e}async function F(){if(!M.value.length){H.warning(Q(`@CMD01:请至少选择一项`));return}try{P.value=!0;let e=new Set((Array.isArray(S.value)?S.value:[]).map(e=>String(e?.name||``).trim())),t=0,n=0;for(let r of M.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++)}H.success(Q(`@CMD01:NPM命令同步完成2`,{count:t,skip:n})),A.value=!1,M.value=[]}catch(e){H.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`)}finally{P.value=!1}}t({resetForm:T});let me={buildDuplicateName:r,duplicateCommand:i,props:a,emit:o,configStore:s,currentLocale:c,commandTemplates:l,commandTemplateDialogVisible:d,queryCommandTemplates:f,handleCommandSelect:p,extractTemplateVariables:m,applyTemplateVariables:h,CmdParamForm:g,normalizeCommandParams:_,newCommand:v,isEditing:y,editingId:b,isSaving:x,commands:S,dialogVisible:w,resetForm:T,saveCommand:ee,startEditCommand:E,cancelEdit:te,deleteCommand:ne,pinCommandToTop:re,executeCommand:D,isBrowserDialogVisible:ie,browseDirectory:O,onBrowserSelect:ae,useCurrentDirectory:oe,commandTableRef:se,selectedCommands:ce,onSelectionChange:k,batchDeleteCommands:le,npmDialogVisible:A,npmScriptItems:j,npmSelected:M,npmTableRef:ue,isLoadingNpm:de,isDoingSyncNpm:P,syncNpmCommands:fe,onNpmSelectionChange:pe,doSyncSelectedNpm:F,get $t(){return Q},get ElInput(){return I},get Edit(){return Pe},get Delete(){return ze},get VideoPlay(){return _e},get Folder(){return ot},get CopyDocument(){return Ee},get Top(){return Ze},IconButton:_t,TemplateManager:Hm,get FilePicker(){return pt}};return Object.defineProperty(me,"__isScriptSetup",{enumerable:!1,value:!0}),me}}),Wm=t({default:()=>jh}),Gm={class:`command-container`},Km={class:`left-panel`},qm={class:`command-form`},Jm={class:`form-header`},Ym={class:`left-title`},Xm={class:`form-content`},Zm={class:`form-row`},Qm={class:`form-field`},$m={class:`required`},eh={class:`form-row`},th={class:`form-field`},nh={class:`form-row`},rh={class:`form-field`},ih={class:`directory-input-group`},ah={class:`form-row`},oh={class:`form-field`},sh={class:`required`},ch={key:0,class:`command-params`},lh={class:`params-title`},uh={class:`form-actions`},dh={class:`right-panel`},fh={class:`command-list`},ph={class:`list-header`},mh={class:`list-header-left`},hh={class:`list-title`},gh={key:0,class:`selection-count`},_h={class:`list-header-actions`},vh={class:`list-content`},yh={key:1,class:`command-list-scroll`},bh={class:`name-cell`},xh={class:`name-text`},Sh={key:0,class:`description-text`},Ch={class:`command-text`},wh={class:`directory-text`},Th={class:`action-buttons`},Eh={class:`npm-dialog-body`},Dh={class:`command-text`},Oh={class:`npm-dialog-footer`},kh={class:`npm-selected-count`};function Ah(e,t,n,r,a,o){let c=i,u=R,d=y,f=Ne,p=je,m=Be,h=j,g=l,_=st,v=We;return Z(),X(Y,null,[s(g,{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:L(()=>[W(`div`,Gm,[W(`div`,Km,[W(`div`,qm,[W(`div`,Jm,[W(`div`,Ym,V(r.isEditing?r.$t(`@CMD01:编辑命令`):r.$t(`@CMD01:添加命令`)),1)]),W(`div`,Xm,[B(` 命令名称 `),W(`div`,Zm,[W(`div`,Qm,[W(`label`,$m,V(r.$t(`@CMD01:命令名称`)),1),s(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`])])]),B(` 描述 `),W(`div`,eh,[W(`div`,th,[W(`label`,null,V(r.$t(`@CMD01:描述`)),1),s(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`])])]),B(` 执行目录 `),W(`div`,nh,[W(`div`,rh,[W(`label`,null,V(r.$t(`@CMD01:执行目录`)),1),W(`div`,ih,[s(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`]),s(c,{onClick:r.useCurrentDirectory,type:`primary`,plain:``,size:`default`},{default:L(()=>[M(V(r.$t(`@CMD01:使用当前目录`)),1)]),_:1}),s(c,{onClick:r.browseDirectory,type:`info`,plain:``,size:`default`},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Folder)]),_:1}),M(` `+V(r.$t(`@CMD01:选择目录`)),1)]),_:1})])])]),B(` 命令 `),W(`div`,ah,[W(`div`,oh,[W(`label`,sh,V(r.$t(`@CMD01:命令`)),1),s(d,{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`,ch,[W(`div`,lh,V(r.$t(`@CMD01:变量配置`)),1),s(m,{data:r.newCommand.params,style:{width:`100%`},size:`small`,stripe:``},{default:L(()=>[s(f,{prop:`name`,label:r.$t(`@CMD01:变量名`),width:`160`},null,8,[`label`]),s(f,{label:r.$t(`@CMD01:默认值`),"min-width":`180`},{default:L(e=>[s(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`]),s(f,{label:r.$t(`@CMD01:必填`),width:`90`,align:`center`},{default:L(e=>[s(p,{modelValue:e.row.required,"onUpdate:modelValue":t=>e.row.required=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1},8,[`label`]),s(f,{label:r.$t(`@CMD01:描述`),"min-width":`220`},{default:L(e=>[s(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`])])):B(`v-if`,!0)])]),B(` 按钮区域 `),W(`div`,uh,[r.isEditing?(Z(),U(c,{key:0,onClick:r.cancelEdit,size:`large`},{default:L(()=>[M(V(r.$t(`@CMD01:取消`)),1)]),_:1})):B(`v-if`,!0),s(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:L(()=>[M(V(r.isEditing?r.$t(`@CMD01:更新命令`):r.$t(`@CMD01:添加命令`)),1)]),_:1},8,[`disabled`,`loading`])])])])]),W(`div`,dh,[B(` 命令列表 `),W(`div`,fh,[W(`div`,ph,[W(`div`,mh,[W(`h3`,hh,V(r.$t(`@CMD01:已保存的命令`)),1),r.selectedCommands.length>0?(Z(),X(`span`,gh,V(r.$t(`@CMD01:已选择`,{count:r.selectedCommands.length})),1)):B(`v-if`,!0)]),W(`div`,_h,[r.selectedCommands.length>0?(Z(),U(c,{key:0,type:`danger`,plain:``,size:`small`,onClick:r.batchDeleteCommands},{default:L(()=>[M(V(r.$t(`@CMD01:批量删除`)),1)]),_:1})):B(`v-if`,!0),s(c,{type:`primary`,plain:``,size:`small`,loading:r.isLoadingNpm,onClick:r.syncNpmCommands},{default:L(()=>[M(V(r.$t(`@CMD01:同步NPM命令`)),1)]),_:1},8,[`loading`])])]),W(`div`,vh,[r.commands.length===0?(Z(),U(h,{key:0,description:r.$t(`@CMD01:暂无保存的命令`)},null,8,[`description`])):(Z(),X(`div`,yh,[s(m,{ref:`commandTableRef`,data:r.commands,style:{width:`100%`,height:`100%`},stripe:``,onSelectionChange:r.onSelectionChange},{default:L(()=>[s(f,{type:`selection`,width:`40`}),s(f,{prop:`name`,label:r.$t(`@CMD01:命令名称`),"min-width":`80`},{default:L(e=>[W(`div`,bh,[W(`span`,xh,V(e.row.name),1),e.row.description?(Z(),X(`span`,Sh,V(e.row.description),1)):B(`v-if`,!0)])]),_:1},8,[`label`]),s(f,{prop:`command`,label:r.$t(`@CMD01:命令`),"min-width":`200`},{default:L(e=>[W(`code`,Ch,V(e.row.command),1)]),_:1},8,[`label`]),s(f,{prop:`directory`,label:r.$t(`@CMD01:执行目录`),"min-width":`200`},{default:L(e=>[W(`span`,wh,V(e.row.directory),1)]),_:1},8,[`label`]),s(f,{label:r.$t(`@CMD01:操作`),width:`138`,fixed:`right`},{default:L(e=>[W(`div`,Th,[s(r.IconButton,{tooltip:r.$t(`@CMD01:置顶`),size:`small`,"hover-color":`var(--color-info)`,onClick:t=>r.pinCommandToTop(e.row.id)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Top)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),s(r.IconButton,{tooltip:r.$t(`@CMD01:执行命令`),size:`small`,"hover-color":`var(--color-success)`,onClick:t=>r.executeCommand(e.row)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.VideoPlay)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),s(r.IconButton,{tooltip:r.$t(`@CMD01:编辑`),size:`small`,"hover-color":`var(--color-primary)`,onClick:t=>r.startEditCommand(e.row)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Edit)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),s(r.IconButton,{tooltip:r.$t(`@CMD01:复制命令`),size:`small`,"hover-color":`var(--color-warning)`,onClick:t=>r.duplicateCommand(e.row)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.CopyDocument)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),s(r.IconButton,{tooltip:r.$t(`@CMD01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:t=>r.deleteCommand(e.row.id)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Delete)]),_:1})]),_:1},8,[`tooltip`,`onClick`])])]),_:1},8,[`label`])]),_:1},8,[`data`])]))])])])])]),_:1},8,[`modelValue`,`title`,`fullscreen`,`width`,`top`]),s(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`]),B(` 目录浏览器弹窗 `),s(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`]),B(` NPM 命令选择弹窗 `),s(g,{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:L(()=>[W(`div`,Oh,[W(`span`,kh,V(r.$t(`@CMD01:已选择`,{count:r.npmSelected.length})),1),s(c,{onClick:t[8]||=e=>r.npmDialogVisible=!1},{default:L(()=>[M(V(r.$t(`@CMD01:取消`)),1)]),_:1}),s(c,{type:`primary`,loading:r.isDoingSyncNpm,disabled:r.npmSelected.length===0,onClick:r.doSyncSelectedNpm},{default:L(()=>[M(V(r.$t(`@CMD01:开始同步`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:L(()=>[z((Z(),X(`div`,Eh,[s(m,{ref:`npmTableRef`,data:r.npmScriptItems,style:{width:`100%`},"max-height":`420`,stripe:``,onSelectionChange:r.onNpmSelectionChange},{default:L(()=>[s(f,{type:`selection`,width:`44`,selectable:()=>!0}),s(f,{prop:`packageName`,label:r.$t(`@CMD01:包名`),"min-width":`140`},null,8,[`label`]),s(f,{prop:`scriptName`,label:r.$t(`@CMD01:脚本名`),"min-width":`120`},null,8,[`label`]),s(f,{prop:`scriptName`,label:r.$t(`@CMD01:命令`),"min-width":`160`},{default:L(e=>[W(`code`,Dh,`npm run `+V(e.row.scriptName),1)]),_:1},8,[`label`]),s(f,{label:r.$t(`@CMD01:状态`),width:`80`,align:`center`},{default:L(e=>[e.row.isDuplicate?(Z(),U(_,{key:0,type:`warning`,size:`small`},{default:L(()=>[M(V(r.$t(`@CMD01:已存在`)),1)]),_:1})):(Z(),U(_,{key:1,type:`success`,size:`small`},{default:L(()=>[M(V(r.$t(`@CMD01:新增`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`])])),[[v,r.isLoadingNpm]])]),_:1},8,[`modelValue`,`title`])],64)}var jh=$(Um,[[`render`,Ah],[`__scopeId`,`data-v-c7d52d8a`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/CustomCommandManager.vue`]]);function Mh(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 Nh(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 Ph=120,Fh=600,Ih=16,Lh=N({__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(Ph,Math.min(Fh,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(Fh,l.value+Ih)):e.key===`ArrowDown`?(e.preventDefault(),l.value=Math.max(Ph,l.value-Ih)):e.key===`Home`?(e.preventDefault(),l.value=Fh):e.key===`End`&&(e.preventDefault(),l.value=Ph)}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=Nh(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?(H.success(Q(`@CMDPANEL:已在新终端中执行`,{name:e.name})),window.dispatchEvent(new Event(`zen-gitsync:terminal-session-created`))):H.error(t?.error||Q(`@CMDPANEL:执行失败`))}catch(e){H.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:Ph,MAX_PANEL_HEIGHT:Fh,KEY_NUDGE_PX:Ih,startResize:p,handleResize:m,stopResize:h,onResizeKeydown:g,runCommand:_,get $t(){return Q},IconButton:_t,SvgIcon:gt,CustomCommandManager:jh};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),Rh={class:`custom-commands-panel`},zh={class:`header-left`},Bh={class:`panel-title`},Vh=[`aria-valuenow`,`aria-label`],Hh={key:0,class:`empty-container`},Uh={class:`empty-text`},Wh=[`onClick`],Gh={class:`command-left`},Kh={key:0,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},qh={key:1,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Jh={class:`command-info`},Yh={class:`command-name`},Xh={key:0,class:`command-desc`},Zh={key:1,class:`command-desc command-text`};function Qh(e,t,n,r,a,o){let c=R,l=i;return Z(),X(Y,null,[W(`div`,Rh,[W(`div`,{class:`panel-header accordion-header`,onClick:r.toggleCollapsed},[W(`div`,zh,[s(c,{class:K([`accordion-chevron`,{"is-collapsed":r.collapsed}])},{default:L(()=>[...t[2]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`]),s(r.SvgIcon,{"icon-class":`command-list`,"class-name":`cmd-panel-icon`}),W(`span`,Bh,V(r.$t(`@CMDPANEL:自定义命令`)),1)]),W(`div`,{class:`header-right`,onClick:t[0]||=Re(()=>{},[`stop`])},[s(r.IconButton,{size:`small`,tooltip:r.$t(`@CMDPANEL:管理命令`),onClick:r.openManager},{default:L(()=>[s(c,null,{default:L(()=>[...t[3]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`])])]),B(` 拖拽调高度(展开时显示) OPT-4: 补 role/tabindex/aria-orientation + 键盘 nudge `),z(W(`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,Vh),[[q,!r.collapsed]]),!r.collapsed&&r.commands.length===0?(Z(),X(`div`,Hh,[t[4]||=W(`svg`,{class:`empty-icon`,viewBox:`0 0 1024 1024`,width:`40`,height:`40`},[W(`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),W(`p`,Uh,V(r.$t(`@CMDPANEL:暂无自定义命令`)),1),s(l,{size:`small`,text:``,type:`primary`,onClick:r.openManager},{default:L(()=>[M(V(r.$t(`@CMDPANEL:去添加`)),1)]),_:1})])):r.collapsed?B(`v-if`,!0):(Z(),X(`div`,{key:1,class:`commands-list`,style:Me({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)},[W(`div`,Gh,[s(c,{class:K([`play-icon`,{"is-loading":r.isRunning[String(e.id||e.name)]}])},{default:L(()=>[r.isRunning[String(e.id||e.name)]?(Z(),X(`svg`,qh,[...t[6]||=[W(`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`,Kh,[...t[5]||=[W(`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),W(`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`]),W(`div`,Jh,[W(`span`,Yh,V(e.name),1),e.description?(Z(),X(`span`,Xh,V(e.description),1)):(Z(),X(`span`,Zh,V(e.command),1))])])],10,Wh))),128))],4))]),B(` 命令管理弹窗 `),s(r.CustomCommandManager,{visible:r.managerVisible,"onUpdate:visible":t[1]||=e=>r.managerVisible=e,fullscreen:!0,onExecuteCommand:r.runCommand},null,8,[`visible`])],64)}var $h=$(Lh,[[`render`,Qh],[`__scopeId`,`data-v-70af0dcb`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/CustomCommandsPanel.vue`]]),eg=e(lt(),1),tg={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 ng(e={}){let t=new eg.default({fg:e.fg??`#e5e5e5`,bg:e.bg??`transparent`,newline:e.newline??!1,escapeXML:e.escapeXML??!1,stream:e.stream??!1,colors:e.colors??tg});function n(e){return t.toHtml(e)}return{ansiToHtml:n,converter:t}}function rg(){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:[]:H.error(n?.error||`获取终端会话失败`)}catch(e){H.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?(H.success(`已重新启动终端`),await n(),!0):(H.error(r?.error||`重新启动失败`),!1)}catch(e){return H.error(e?.message||`重新启动失败`),!1}finally{t.value=!1}}async function i(e){try{await Fe.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?(H.success(`已删除`),await n(),!0):(H.error(r?.error||`删除失败`),!1)}catch(e){return H.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 ig=8e3,ag=N({__name:`CommandConsole`,setup(e,{expose:t}){t();let n=it(()=>wt(()=>Promise.resolve().then(()=>Wm),void 0)),r=it(()=>wt(()=>import(`./ProjectStartupButton-2By0-fuq.js`),__vite__mapDeps([3,1,4,5,6,0,2,7,8,9,10,11,12,13,14]))),i=it(()=>wt(()=>import(`./FlowOrchestrationWorkspace-BECFOAcQ.js`),__vite__mapDeps([15,1,4,5,6,0,2,7,8,9,10,11,12,13,16,17,18,19,20,21]))),a=it(()=>wt(()=>import(`./FlowExecutionViewer-CZdF1f1e.js`),__vite__mapDeps([22,4,1,5,8,6,0,2,7,16,17,18,13,19,23]))),o=xt(),s=Ht(),c=Yf();function l(){W().catch(e=>{H.error(e?.message||Q(`@CF05E:提交后启动项执行失败`))})}async function u(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 d({flowData:t,orchestrationMeta:n});return}H.warning(Q(`@CF05E:该编排缺少流程数据,无法执行`))}async function d(e){let t=e?.flowData;if(!t||!Array.isArray(t.nodes)||!Array.isArray(t.edges))return;let n=t.nodes,r=t.edges;be.value=!0,y.value=!0,b.value=!1,O.value=[],oe.value=-1,se.value=t,ce.value=!0,k.value=null,A.value=[],j.value=[],M.value=[],ue.value=(e?.orchestrationMeta?.name||``).trim(),N.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){H.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){H.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(k.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:用户停止执行`)&&(k.value&&!M.value.includes(k.value)&&(M.value=[...M.value,k.value]),H.error(e?.message||String(e)))}finally{y.value=!1,b.value=!1,oe.value=-1,O.value=[],k.value=null}}let f=zt(),m=J(null),h=J(``),_=J(``),y=J(!1),b=J(!1),x=J([]),w=0;function T(){Fe.confirm(Q(`@CF05E:确定要清空所有执行历史吗?此操作不可撤销。`),Q(`@CF05E:清空历史`),{confirmButtonText:Q(`@CF05E:清空`),cancelButtonText:Q(`@CF05E:取消`),type:`warning`}).then(()=>{x.value=[],H.success(Q(`@CF05E:执行历史已清空`))}).catch(()=>{})}function E(){fe&&fe(!0)}function ne(){fe&&fe(!1),y.value=!1,b.value=!1}function re(){I&&I(!0)}function ie(){I&&I(!1),y.value=!1,b.value=!1}let O=J([]),oe=J(-1),se=J(null),ce=J(!0),k=J(null),A=J([]),j=J([]),M=J([]),ue=J(``),N=J(``),de=J(!1),P=J(``),fe=null,pe=J(!1),F=J(``),I=null,me=J(!1),he=J(``),L=J([]),R=J({}),z=null,ve=G({get:()=>me.value,set:e=>{me.value=e}});function ye(){let e=Array.isArray(L.value)?L.value:[];for(let t of e){if(!t?.required)continue;let e=R.value?.[t.name];if(e==null||String(e).trim()===``){H.warning(Q(`@UINPUT:请输入必填参数的值`,{name:t.name}));return}}z&&z(!0)}function B(){z&&z(!1),y.value=!1,b.value=!1}let{ansiToHtml:V}=ng(),be=J(!1),xe=G({get:()=>o.ui.commandConsole.useTerminal,set:e=>{o.ui.commandConsole.useTerminal=e}}),{sessions:Se,loading:Ce,refresh:we,restart:Te,remove:Ee,upsert:De}=rg(),Oe=G({get:()=>o.ui.commandConsole.showTerminalSessions,set:e=>{o.ui.commandConsole.showTerminalSessions=e}}),ke=G(()=>Se.value.length);C(ke,e=>{c.setCount(e)},{immediate:!0});let Ae=J(!1);function je(e){return new Promise(t=>setTimeout(t,e))}async function U(e=8e3){let t=Date.now();for(;Date.now()-t<e;){if(m.value&&m.value.connected)return!0;await je(100)}return!1}async function Me(e){let t=o.customCommands.find(t=>String(t.id)===String(e));if(!t){H.warning(`启动项命令不存在: ${e}`);return}let n=t.directory||h.value,r=t.command;if(xe.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?De(e.session):await we():H.error(e?.error||Q(`@CF05E:启动项命令执行失败`))}catch(e){H.error(e?.message||Q(`@CF05E:启动项命令执行失败`))}return}if(!await U()){H.error(Q(`@CF05E:Socket 连接未就绪,无法自动执行交互式启动项`));return}await ft(r,n)}async function Ne(e){let t=o.orchestrations.find(t=>t.id===e);if(!t){H.warning(`启动项工作流不存在: ${e}`);return}await u(t)}async function W(){await o.loadConfig(!1);let e=o.afterQuickPushAction;e?.enabled&&e?.refId&&(e.type===`workflow`?await Ne(e.refId):await Me(e.refId))}async function Pe(){if(Ae.value||(Ae.value=!0,await o.loadConfig(!1),!o.startupAutoRun))return;let e=(o.startupItems||[]).filter(e=>e?.enabled!==!1);if(e.length!==0)for(let t of e)t.type===`workflow`?await Ne(t.refId):await Me(t.refId)}let Ie=e=>Math.min(85,Math.max(15,e)),Re=G({get:()=>Ie(o.ui.commandConsole.splitPercent),set:e=>{o.ui.commandConsole.splitPercent=Ie(e)}}),Be=J(null),K=()=>{let e=Be.value?.$el??Be.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},Ve=()=>{let e=Be.value?.$el??Be.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=K();if(!t||t.length<1||n<=0)return;let r=t[0]?.getBoundingClientRect?.().width??0;if(r>0){let e=Ie(r/n*100);e!==Re.value&&(Re.value=e)}},He=G({get(){return`${Ie(Re.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=K();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=K();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(Re.value=Ie(t))}});async function Ue(e=!0){if(Se.value.length!==0)try{let t=await(await fetch(`/api/terminal-sessions/status?cleanup=${e?`true`:`false`}`)).json();t?.success&&(Se.value=Array.isArray(t.sessions)?t.sessions:[])}catch{}}let We=null;function Ge(){We!==null&&(clearInterval(We),We=null)}function Ke(){We===null&&(We=setInterval(()=>{Ue(!0)},ig))}C(ke,e=>{e>0?Ke():Ge()},{immediate:!0});function Je(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 Xe=J(!1),Ze=J(!1);async function Qe(){let e=_.value.trim();!e||y.value||(_.value=``,await $e(e,h.value))}async function $e(e,t=h.value){if(y.value=!0,xe.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?(H.success(Q(`@CF05E:已在新终端中执行命令`)),n?.session?De(n.session):await we()):H.error(n?.error||Q(`@CF05E:执行失败`))}catch(e){H.error(e?.message||Q(`@CF05E:执行失败`))}finally{y.value=!1}return}let n={id:++w,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0};x.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)},[s(o,{class:`dir-icon`},{default:L(()=>[s(r.Folder)]),_:1}),W(`span`,{class:`dir-path`,title:e.path},V(e.path),9,Eu),e.exists?B(`v-if`,!0):(Z(),X(`span`,Du,`不存在`)),W(`button`,{type:`button`,class:`dir-delete-btn`,title:`从常用目录中移除`,onClick:t=>r.removeRecentDirectory(e.path,t)},[...t[18]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`},[W(`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})):B(`v-if`,!0)]),_:1})])]),_:1},8,[`modelValue`,`title`]),B(` 目录浏览器弹窗 `),s(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`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/DirectorySelector.vue`]]),Pu=N({__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,l=J(!1),u=J(!1),d=J(`general`),f=J(`light`),p=J(`zh-CN`),m=J(!1),h=J([]),g=J(void 0),_=G(()=>a.theme===`light`?`light`:`dark`),v=G(()=>{if(g.value===null)return null;let e=h.value.find(e=>e.id===g.value);return e?{endpoint:e.baseURL,modelName:e.model,displayName:e.name,apiKey:e.apiKey}:null}),y=G(()=>d.value===`config`?!0:d.value===`general`?f.value!==ue||p.value!==N||g.value!==void 0:d.value===`git`?E.value!==se||te.value!==ce||D.value!==k||ie.value!==le||O.value!==A||ae.value!==j||(oe.value||``).trim()!==M:d.value===`editor`?m.value!==a.ui.editorAutoSave:!1);function b(){g.value=null}function x(e){g.value=e.id}function S(){g.value=void 0}async function w(e){let t=g.value===null,n=e.displayName||e.modelName,r=t?`model-${n.toLowerCase().replace(/[^a-z0-9]/g,`-`).slice(0,24)}-${Date.now().toString(36)}`:g.value,i;if(t){let t=h.value.length===0;i=[...h.value,{id:r,name:n,apiKey:e.apiKey,baseURL:e.endpoint,model:e.modelName,isDefault:t}]}else i=h.value.map(t=>t.id===g.value?{...t,name:n,apiKey:e.apiKey||t.apiKey,baseURL:e.endpoint,model:e.modelName}:t);await a.saveModels(i)&&(h.value=i,g.value=void 0,H.success(Q(t?`@42BB9:已添加模型`:`@42BB9:已更新模型`)))}async function T(e){let t=h.value.filter(t=>t.id!==e);await a.saveModels(t)&&(h.value=t,H.success(Q(`@42BB9:已删除模型`)))}async function ee(e){let t=h.value.map(t=>({...t,isDefault:t.id===e}));await a.saveModels(t)&&(h.value=t,H.success(Q(`@42BB9:已设置默认模型`)))}let E=J(``),te=J(``),ne=J(``),re=J(!1),D=J(!1),ie=J(`false`),O=J(!1),ae=J(`true`),oe=J(`main`),se=``,ce=``,k=!1,le=`false`,A=!1,j=`true`,M=`main`,ue=`light`,N=`zh-CN`;C(()=>o.modelValue,async e=>{if(l.value=e,e){E.value=r.userName,te.value=r.userEmail,ne.value=``,f.value=a.theme,p.value=a.locale,h.value=[...a.models],g.value=void 0,m.value=a.ui.editorAutoSave;try{u.value=!0,await pe()}finally{u.value=!1}se=E.value,ce=te.value,k=D.value,le=ie.value,A=O.value,j=ae.value,M=oe.value,ue=f.value,N=p.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 fe(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 pe(){let[e,t,n,r,i]=await Promise.all([P(`push.autoSetupRemote`),P(`pull.rebase`),P(`fetch.prune`),P(`core.autocrlf`),P(`init.defaultBranch`)]);D.value=(e||`false`).toLowerCase()===`true`;let a=(t||`false`).toLowerCase();ie.value=a===`true`||a===`merges`?a:`false`,O.value=(n||`false`).toLowerCase()===`true`;let o=(r||`true`).toLowerCase();ae.value=o===`true`||o===`input`?o:`false`,oe.value=i||`main`}async function F(){let e=[];try{D.value!==k&&e.push(fe(`push.autoSetupRemote`,D.value?`true`:`false`)),ie.value!==le&&e.push(fe(`pull.rebase`,ie.value)),O.value!==A&&e.push(fe(`fetch.prune`,O.value?`true`:`false`)),ae.value!==j&&e.push(fe(`core.autocrlf`,ae.value));let t=(oe.value||``).trim();return t&&t!==M&&e.push(fe(`init.defaultBranch`,t)),e.length===0?!0:(await Promise.all(e),H.success(Q(`@42BB9:已保存变更的 Git 配置`)),k=D.value,le=ie.value,A=O.value,j=ae.value,M=t||M,!0)}catch(e){return H.error(e.message),!1}}async function I(){let e={};if(f.value!==ue&&(e.theme=f.value,ue=f.value),p.value!==N&&(e.locale=p.value,i.changeLocale(p.value),N=p.value),e.theme!==void 0||e.locale!==void 0){let t=await a.saveGeneralSettings(e);return t&&H.success(Q(`@42BB9:通用设置已保存`)),t}return!0}async function me(){try{let e=await a.resetUiLayout();window.dispatchEvent(new CustomEvent(`ui-layout-reset`,{detail:{layout:e}})),H.success(Q(`@42BB9:布局比例已重置为默认值`))}catch(e){H.error(`${Q(`@42BB9:重置布局失败: `)}${e.message}`)}}async function he(){if(g.value!==void 0){H.warning(Q(`@42BB9:模型尚未保存,请先保存或取消模型编辑`));return}if(d.value===`config`){await L();return}if(d.value===`editor`){a.ui.editorAutoSave=m.value,H.success(Q(`@42BB9:编辑器设置已保存`)),l.value=!1;return}if(!await I())return;if(!E.value||!te.value){H.warning(Q(`@42BB9:用户名和邮箱不能为空`));return}let e=!0;(E.value!==se||te.value!==ce)&&(e=await r.restoreUserConfig(E.value,te.value),e&&(se=E.value,ce=te.value));let t=await F();e&&t&&(l.value=!1)}async function ge(){if(d.value=`config`,!ne.value)try{let e=await(await fetch(`/api/config/check-file-format`)).json();e.success||H.warning(e.message||Q(`@42BB9:配置文件格式可能有问题`)),ne.value=JSON.stringify(a.config,null,2)}catch{H.error(Q(`@42BB9:加载配置失败`))}}async function L(){let e;try{e=JSON.parse(ne.value)}catch(e){H.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){H.error(`${Q(`@42BB9:保存失败: `)}${t.error||Q(`@42BB9:未知错误`)}`);return}await a.loadConfig(),H.success(Q(`@42BB9:配置已保存`)),l.value=!1}catch(e){H.error(`${Q(`@42BB9:保存配置失败: `)}${e.message||e}`)}finally{re.value=!1}}async function _e(){try{let e=await(await fetch(`/api/config/open-file`,{method:`POST`})).json();e.success?H.success(Q(`@42BB9:已用系统程序打开配置文件`)):H.error(e.error||Q(`@42BB9:打开文件失败`))}catch(e){H.error(`${Q(`@42BB9:打开文件失败: `)}${e.message||e}`)}}let R={gitStore:r,localeStore:i,configStore:a,props:o,emit:s,visible:l,isLoading:u,activeTab:d,tempTheme:f,tempLocale:p,tempEditorAutoSave:m,aiModels:h,editingModelId:g,currentThemeForForm:_,editingModelInitial:v,hasChanges:y,startAddModel:b,startEditModel:x,cancelEditModel:S,handleAddModelSave:w,handleDeleteModel:T,handleSetDefaultModel:ee,tempUserName:E,tempUserEmail:te,configEditorText:ne,configEditorSaving:re,cfgAutoSetupRemote:D,cfgPullRebase:ie,cfgFetchPrune:O,cfgCoreAutoCrlf:ae,cfgInitDefaultBranch:oe,get initUserName(){return se},set initUserName(e){se=e},get initUserEmail(){return ce},set initUserEmail(e){ce=e},get initAutoSetupRemote(){return k},set initAutoSetupRemote(e){k=e},get initPullRebase(){return le},set initPullRebase(e){le=e},get initFetchPrune(){return A},set initFetchPrune(e){A=e},get initCoreAutoCrlf(){return j},set initCoreAutoCrlf(e){j=e},get initInitDefaultBranch(){return M},set initInitDefaultBranch(e){M=e},get initTheme(){return ue},set initTheme(e){ue=e},get initLocale(){return N},set initLocale(e){N=e},handleVisibleChange:de,getGlobalConfig:P,setGlobalConfig:fe,loadGlobalGitConfigs:pe,saveGlobalGitConfigs:F,saveGeneralSettings:I,onResetUiLayout:me,handleSave:he,onClickConfigTab:ge,saveConfigJson:L,openSystemConfigFile:_e,get $t(){return Q},get Check(){return tt},get InfoFilled(){return c},CommonDialog:vt,get AddModelForm(){return ft}};return Object.defineProperty(R,"__isScriptSetup",{enumerable:!1,value:!0}),R}}),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,a,o){let c=E,l=k,u=O,d=oe,f=ye,p=je,m=i,h=I,g=Xe,v=R,y=_,b=T,x=We;return Z(),U(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`},Se({default:L(()=>[z((Z(),X(`div`,{class:`user-settings-content`,"element-loading-text":r.$t(`@42BB9:正在加载配置...`),"element-loading-background":`rgba(0, 0, 0, 0.15)`},[B(` 左侧标签页切换 `),W(`div`,Iu,[W(`div`,{class:K([`tab-item`,{active:r.activeTab===`general`}]),onClick:t[0]||=e=>r.activeTab=`general`},[W(`span`,null,V(r.$t(`@42BB9:通用设置`)),1)],2),W(`div`,{class:K([`tab-item`,{active:r.activeTab===`git`}]),onClick:t[1]||=e=>r.activeTab=`git`},[W(`span`,null,V(r.$t(`@42BB9:Git 全局设置`)),1)],2),W(`div`,{class:K([`tab-item`,{active:r.activeTab===`commit`}]),onClick:t[2]||=e=>r.activeTab=`commit`},[W(`span`,null,V(r.$t(`@42BB9:提交设置`)),1)],2),W(`div`,{class:K([`tab-item`,{active:r.activeTab===`config`}]),onClick:r.onClickConfigTab},[W(`span`,null,V(r.$t(`@42BB9:编辑配置`)),1)],2),W(`div`,{class:K([`tab-item`,{active:r.activeTab===`editor`}]),onClick:t[3]||=e=>r.activeTab=`editor`},[W(`span`,null,V(r.$t(`@42BB9:编辑器设置`)),1)],2)]),B(` 右侧内容区域 `),W(`div`,Lu,[B(` 通用设置面板 `),z(W(`div`,Ru,[W(`div`,zu,[W(`div`,Bu,[W(`div`,Vu,[W(`p`,Hu,V(r.$t(`@42BB9:通用配置`)),1),W(`p`,Uu,V(r.$t(`@42BB9:自定义应用的外观和语言`)),1)])])]),W(`div`,Wu,[W(`div`,Gu,[W(`span`,null,V(r.$t(`@42BB9:外观`)),1)]),W(`div`,Ku,[W(`div`,qu,[W(`label`,Ju,V(r.$t(`@42BB9:主题`)),1),s(l,{modelValue:r.tempTheme,"onUpdate:modelValue":t[4]||=e=>r.tempTheme=e,class:`modern-input`,size:`default`},{default:L(()=>[s(c,{label:r.$t(`@42BB9:浅色`),value:`light`},null,8,[`label`]),s(c,{label:r.$t(`@42BB9:深色`),value:`dark`},null,8,[`label`]),s(c,{label:r.$t(`@42BB9:跟随系统`),value:`auto`},null,8,[`label`])]),_:1},8,[`modelValue`])])])]),W(`div`,Yu,[W(`div`,Xu,[W(`span`,null,V(r.$t(`@42BB9:语言`)),1)]),W(`div`,Zu,[W(`div`,Qu,[W(`label`,$u,V(r.$t(`@42BB9:界面语言`)),1),s(l,{modelValue:r.tempLocale,"onUpdate:modelValue":t[5]||=e=>r.tempLocale=e,class:`modern-input`,size:`default`},{default:L(()=>[s(c,{label:`简体中文`,value:`zh-CN`}),s(c,{label:`English`,value:`en-US`})]),_:1},8,[`modelValue`])])])]),B(` 界面(视图模式 / 分割比例 / 控制台 / 布局比例) `),W(`div`,ed,[W(`div`,td,[W(`span`,null,V(r.$t(`@42BB9:界面`)),1)]),W(`div`,nd,[B(` 文件列表视图模式 `),W(`div`,rd,[W(`label`,id,V(r.$t(`@42BB9:文件列表视图`)),1),s(d,{modelValue:r.configStore.ui.fileListViewMode,"onUpdate:modelValue":t[6]||=e=>r.configStore.ui.fileListViewMode=e,size:`default`},{default:L(()=>[s(u,{value:`list`},{default:L(()=>[M(V(r.$t(`@42BB9:列表`)),1)]),_:1}),s(u,{value:`tree`},{default:L(()=>[M(V(r.$t(`@42BB9:树状`)),1)]),_:1})]),_:1},8,[`modelValue`])]),B(` 文件差异分割比例 `),W(`div`,ad,[W(`label`,od,[M(V(r.$t(`@42BB9:文件差异分割`))+` `,1),W(`span`,sd,V(r.configStore.ui.fileDiffSplitPercent)+`%`,1)]),s(f,{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`])]),B(` 命令控制台(跨整行的复合控件) `),W(`div`,cd,[W(`label`,ld,V(r.$t(`@42BB9:命令控制台`)),1),W(`div`,ud,[s(p,{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`]),s(p,{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`]),s(p,{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`]),W(`div`,dd,[W(`span`,fd,V(r.$t(`@42BB9:控制台高度比例`))+`: `+V(r.configStore.ui.commandConsole.splitPercent)+`% `,1),s(f,{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`])])])]),B(` 布局比例重置 `),W(`div`,pd,[W(`label`,md,V(r.$t(`@42BB9:布局比例`)),1),W(`div`,hd,[s(m,{onClick:r.onResetUiLayout,size:`default`},{default:L(()=>[M(V(r.$t(`@42BB9:重置为默认布局`)),1)]),_:1}),W(`span`,gd,V(r.$t(`@42BB9:恢复默认的左/中/右/上面板比例`)),1)])])])]),B(` AI 模型配置 `),W(`div`,_d,[W(`div`,vd,[W(`span`,null,V(r.$t(`@42BB9:AI 模型配置`)),1),W(`button`,{class:`add-model-btn`,onClick:r.startAddModel},`+ `+V(r.$t(`@42BB9:添加模型`)),1)]),W(`div`,yd,[r.aiModels.length===0?(Z(),X(`div`,bd,V(r.$t(`@42BB9:暂未配置模型`)),1)):B(`v-if`,!0),(Z(!0),X(Y,null,F(r.aiModels,e=>(Z(),X(`div`,{key:e.id,class:`model-card`},[W(`div`,xd,[W(`div`,Sd,[W(`span`,Cd,V(e.name),1),e.isDefault?(Z(),X(`span`,wd,V(r.$t(`@42BB9:默认`)),1)):B(`v-if`,!0)]),W(`div`,Td,V(e.model)+` · `+V(e.baseURL),1)]),W(`div`,Ed,[e.isDefault?B(`v-if`,!0):(Z(),X(`button`,{key:0,class:`model-btn`,onClick:t=>r.handleSetDefaultModel(e.id)},V(r.$t(`@42BB9:设为默认`)),9,Dd)),W(`button`,{class:`model-btn`,onClick:t=>r.startEditModel(e)},V(r.$t(`@42BB9:编辑`)),9,Od),W(`button`,{class:`model-btn model-btn--danger`,onClick:t=>r.handleDeleteModel(e.id)},V(r.$t(`@42BB9:删除`)),9,kd)])]))),128))]),B(` 新增 / 编辑表单:使用 ai-model-form 组件 `),r.editingModelId===void 0?B(`v-if`,!0):(Z(),X(`div`,Ad,[(Z(),U(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`]]),B(` Git 全局设置面板 `),z(W(`div`,jd,[W(`div`,Md,[W(`div`,Nd,[W(`div`,Pd,[W(`p`,Fd,V(r.$t(`@42BB9:全局配置`)),1),W(`p`,Id,V(r.$t(`@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效`)),1)])])]),s(b,{class:`user-form`,"label-width":`auto`,model:{tempUserName:r.tempUserName,tempUserEmail:r.tempUserEmail}},{default:L(()=>[W(`div`,Ld,[W(`div`,Rd,[s(g,{class:`form-item`,label:r.$t(`@42BB9:用户名`)},{default:L(()=>[s(h,{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`]),s(g,{class:`form-item`,label:r.$t(`@42BB9:邮箱地址`)},{default:L(()=>[s(h,{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`])])]),B(` 高级设置:常用全局 Git 配置 `),W(`div`,zd,[W(`div`,Bd,[W(`span`,null,V(r.$t(`@42BB9:高级配置`)),1)]),W(`div`,Vd,[W(`div`,Hd,[W(`label`,Ud,[M(V(r.$t(`@42BB9:自动设置上游`))+` `,1),s(y,{content:r.$t(`@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.cfgAutoSetupRemote,"onUpdate:modelValue":t[14]||=e=>r.cfgAutoSetupRemote=e},null,8,[`modelValue`])]),W(`div`,Wd,[W(`label`,Gd,V(r.$t(`@42BB9:拉取策略`)),1),s(l,{modelValue:r.cfgPullRebase,"onUpdate:modelValue":t[15]||=e=>r.cfgPullRebase=e,class:`modern-input`,size:`default`},{default:L(()=>[s(c,{label:r.$t(`@42BB9:merge (默认)`),value:`false`},null,8,[`label`]),s(c,{label:`rebase`,value:`true`}),s(c,{label:r.$t(`@42BB9:rebase(保留合并)`),value:`merges`},null,8,[`label`])]),_:1},8,[`modelValue`])]),W(`div`,Kd,[W(`label`,qd,[M(V(r.$t(`@42BB9:自动清理远程分支`))+` `,1),s(y,{content:r.$t(`@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.cfgFetchPrune,"onUpdate:modelValue":t[16]||=e=>r.cfgFetchPrune=e},null,8,[`modelValue`])]),W(`div`,Jd,[W(`label`,Yd,V(r.$t(`@42BB9:换行符处理`)),1),s(l,{modelValue:r.cfgCoreAutoCrlf,"onUpdate:modelValue":t[17]||=e=>r.cfgCoreAutoCrlf=e,class:`modern-input`,size:`default`},{default:L(()=>[s(c,{label:`true (Windows)`,value:`true`}),s(c,{label:`input`,value:`input`}),s(c,{label:`false`,value:`false`})]),_:1},8,[`modelValue`])]),W(`div`,Xd,[W(`label`,Zd,[M(V(r.$t(`@42BB9:默认初始化分支`))+` `,1),s(y,{content:r.$t(`@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(h,{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`]]),B(` 提交设置面板 `),z(W(`div`,Qd,[W(`div`,$d,[W(`div`,ef,[W(`div`,tf,[W(`p`,nf,V(r.$t(`@76872:提交设置`)),1),W(`p`,rf,V(r.$t(`@76872:这些设置实时生效`)),1)])])]),W(`div`,af,[W(`div`,of,[W(`span`,null,V(r.$t(`@76872:提交格式与行为`)),1)]),W(`div`,sf,[W(`div`,cf,[W(`label`,lf,V(r.$t(`@76872:标准化提交`)),1),s(p,{modelValue:r.configStore.isStandardCommit,"onUpdate:modelValue":t[19]||=e=>r.configStore.isStandardCommit=e},null,8,[`modelValue`])]),W(`div`,uf,[W(`label`,df,[M(V(r.$t(`@76872:跳过钩子检查`))+` `,1),s(y,{content:r.$t(`@76872:添加 --no-verify 参数`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.skipHooks,"onUpdate:modelValue":t[20]||=e=>r.configStore.skipHooks=e},null,8,[`modelValue`])]),W(`div`,ff,[W(`label`,pf,[M(V(r.$t(`@76872:回车自动提交`))+` `,1),s(y,{content:r.$t(`@76872:输入提交信息后按回车直接执行一键推送`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.autoQuickPushOnEnter,"onUpdate:modelValue":t[21]||=e=>r.configStore.autoQuickPushOnEnter=e},null,8,[`modelValue`])]),W(`div`,mf,[W(`label`,hf,[M(V(r.$t(`@76872:Push完成自动关闭`))+` `,1),s(y,{content:r.$t(`@76872:推送成功后自动关闭进度弹窗`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.autoClosePushModal,"onUpdate:modelValue":t[22]||=e=>r.configStore.autoClosePushModal=e},null,8,[`modelValue`])]),W(`div`,gf,[W(`label`,_f,[M(V(r.$t(`@76872:推送前拉取更新`))+` `,1),s(y,{content:r.$t(`@76872:推送前自动拉取远程更新,有冲突则停止推送`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.pullBeforePush,"onUpdate:modelValue":t[23]||=e=>r.configStore.pullBeforePush=e},null,8,[`modelValue`])]),W(`div`,vf,[W(`label`,yf,[M(V(r.$t(`@76872:自动填充默认提交信息`))+` `,1),s(y,{content:r.$t(`@76872:打开页面或提交完成后自动填充默认提交信息`),placement:`top`,"show-after":200},{default:L(()=>[s(v,{class:`qmark`},{default:L(()=>[s(r.InfoFilled)]),_:1})]),_:1},8,[`content`])]),s(p,{modelValue:r.configStore.autoSetDefaultMessage,"onUpdate:modelValue":t[24]||=e=>r.configStore.autoSetDefaultMessage=e},null,8,[`modelValue`])])])])],512),[[q,r.activeTab===`commit`]]),B(` 编辑配置 JSON 面板 `),z(W(`div`,bf,[W(`div`,xf,[W(`div`,Sf,[W(`div`,Cf,[W(`p`,wf,V(r.$t(`@42BB9:编辑当前项目的配置文件`)),1),W(`p`,Tf,V(r.$t(`@42BB9:直接编辑 JSON,支持所有配置项`)),1)])])]),W(`div`,Ef,[s(h,{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`])]),W(`div`,Df,[W(`button`,{type:`button`,class:`dialog-cancel-btn system-config-btn`,onClick:r.openSystemConfigFile},V(r.$t(`@42BB9:打开系统配置文件`)),1)])],512),[[q,r.activeTab===`config`]]),B(` 编辑器设置面板 `),z(W(`div`,Of,[W(`div`,kf,[W(`div`,Af,[W(`div`,jf,[W(`p`,Mf,V(r.$t(`@42BB9:编辑器设置`)),1),W(`p`,Nf,V(r.$t(`@42BB9:自定义编辑器行为`)),1)])])]),W(`div`,Pf,[W(`div`,Ff,[W(`span`,null,V(r.$t(`@42BB9:文件编辑`)),1)]),W(`div`,If,[W(`div`,Lf,[W(`label`,Rf,V(r.$t(`@42BB9:自动保存`)),1),s(p,{modelValue:r.tempEditorAutoSave,"onUpdate:modelValue":t[26]||=e=>r.tempEditorAutoSave=e},null,8,[`modelValue`])]),r.tempEditorAutoSave?(Z(),X(`div`,zf,[W(`span`,Bf,V(r.$t(`@42BB9:失去焦点时自动保存当前文件`)),1)])):B(`v-if`,!0)])])],512),[[q,r.activeTab===`editor`]])])],8,Fu)),[[x,r.isLoading]])]),_:2},[r.activeTab===`commit`?void 0:{name:`footer`,fn:L(()=>[W(`div`,Vf,[t[29]||=W(`div`,null,null,-1),W(`div`,Hf,[W(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[27]||=e=>r.visible=!1,disabled:r.isLoading},V(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},[s(v,null,{default:L(()=>[s(r.Check)]),_:1}),W(`span`,null,V(r.activeTab===`config`?r.$t(`@42BB9:保存配置`):r.$t(`@42BB9:保存设置`)),1)],8,Wf)):B(`v-if`,!0)])])]),key:`0`}]),1032,[`modelValue`,`title`])}var Kf=$(Pu,[[`render`,Gf],[`__scopeId`,`data-v-97bdc1da`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/GitGlobalSettingsDialog.vue`]]),qf=ut(`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=ut(`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=ut(`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=N({__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 p={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 _}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Zf={class:`activity-bar`},Qf=[`aria-label`,`aria-pressed`],$f=[`title`],ep=[`aria-label`,`aria-pressed`],tp=[`title`],np=[`aria-label`,`aria-pressed`],rp=[`title`],ip=[`aria-label`,`aria-pressed`],ap=[`aria-label`,`aria-pressed`],op=[`title`],sp=[`aria-label`,`aria-pressed`],cp=[`aria-label`,`aria-pressed`];function lp(e,t,n,r,i,a){return Z(),X(`div`,Zf,[B(` Git 页面 `),s(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:L(()=>[W(`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`},[B(` git.svg `),t[7]||=W(`svg`,{viewBox:`0 0 1025 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`},V(r.uncommittedBadge),9,$f)):B(`v-if`,!0)],10,Qf)]),_:1},8,[`content`]),B(` 控制台页面:自定义命令 + 命令控制台(从 Git 视图拆出) `),s(r.ElTooltip,{content:r.terminalSessionsStore.hasActive?`${r.$t(`@ACTBAR:控制台`)} · ${r.terminalSessionsStore.count} ${r.$t(`@ACTBAR:个终端会话`)}`:r.$t(`@ACTBAR:控制台`),placement:`right`,"show-after":300},{default:L(()=>[W(`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`},[B(` terminal.svg: 终端窗口 + 光标 `),t[8]||=W(`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`},[W(`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`}),W(`path`,{d:`M6 9l3 3-3 3`}),W(`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`},V(r.terminalSessionsStore.count>99?`99+`:r.terminalSessionsStore.count),9,tp)):B(`v-if`,!0)],10,ep)]),_:1},8,[`content`]),B(` 编辑器页面 `),s(r.ElTooltip,{content:r.editorTabsStore.hasDirty?`${r.$t(`@ACTBAR:编辑器`)} · ${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`:r.$t(`@ACTBAR:编辑器`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`editor`}]),onClick:t[2]||=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`},[B(` code-folder.svg `),t[9]||=W(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`},V(r.editorDirtyBadge),9,rp)):B(`v-if`,!0)],10,np)]),_:1},8,[`content`]),B(` 源码地图 `),s(r.ElTooltip,{content:r.$t(`@ACTBAR:源码地图`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`source-map`}]),onClick:t[3]||=e=>r.select(`source-map`),"aria-label":r.$t(`@ACTBAR:源码地图`),"aria-pressed":r.props.activeView===`source-map`},[B(` code-map.svg `),t[10]||=W(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[W(`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,ip)]),_:1},8,[`content`]),B(` 工作台 `),s(r.ElTooltip,{content:r.$t(`@ACTBAR:工作台`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`workbench`}]),onClick:t[4]||=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`},[B(` code-task.svg `),t[11]||=W(`svg`,{viewBox:`0 0 1044 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`},V(r.wbStatus.runningCount>99?`99+`:r.wbStatus.runningCount),9,op)):B(`v-if`,!0)],10,ap)]),_:1},8,[`content`]),B(` 系统监控 `),s(r.ElTooltip,{content:r.$t(`@ACTBAR:系统监控`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`monitor`}]),onClick:t[5]||=e=>r.select(`monitor`),"aria-label":r.$t(`@ACTBAR:系统监控`),"aria-pressed":r.props.activeView===`monitor`},[B(` activity.svg: 心跳/波形监控图标 `),t[12]||=W(`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`},[W(`path`,{d:`M22 12h-4l-3 9L9 3l-3 9H2`})],-1)],10,sp)]),_:1},8,[`content`]),B(` 思维导图 `),s(r.ElTooltip,{content:r.$t(`@ACTBAR:思维导图`),placement:`right`,"show-after":300},{default:L(()=>[W(`button`,{class:K([`activity-btn`,{active:r.props.activeView===`mindmap`}]),onClick:t[6]||=e=>r.select(`mindmap`),"aria-label":r.$t(`@ACTBAR:思维导图`),"aria-pressed":r.props.activeView===`mindmap`},[B(` mindmap.svg: 中心节点 + 四向辐射的节点拓扑 `),t[13]||=W(`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`},[W(`circle`,{cx:`12`,cy:`12`,r:`2.2`}),W(`circle`,{cx:`4.5`,cy:`5`,r:`1.8`}),W(`circle`,{cx:`19.5`,cy:`5`,r:`1.8`}),W(`circle`,{cx:`4.5`,cy:`19`,r:`1.8`}),W(`circle`,{cx:`19.5`,cy:`19`,r:`1.8`}),W(`line`,{x1:`10.3`,y1:`10.6`,x2:`6`,y2:`6.2`}),W(`line`,{x1:`13.7`,y1:`10.6`,x2:`18`,y2:`6.2`}),W(`line`,{x1:`10.3`,y1:`13.4`,x2:`6`,y2:`17.8`}),W(`line`,{x1:`13.7`,y1:`13.4`,x2:`18`,y2:`17.8`})],-1)],10,cp)]),_:1},8,[`content`])])}var up=$(Xf,[[`render`,lp],[`__scopeId`,`data-v-d652a324`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/ActivityBar.vue`]]),dp=zt(),fp=15e3,pp=ut(`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:${dp}`,{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()},fp))}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}}),mp=N({__name:`InstanceSwitcher`,setup(e,{expose:t}){t();let n=pp(),r=G(()=>n.list.length>0),i=G(()=>n.list.length),a=G(()=>`${i.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:r,count:i,triggerText:a,handleOpen:s,pathSubtitle:c,get ElDropdown(){return o},get ElDropdownMenu(){return ue},get ElDropdownItem(){return rt},get ElIcon(){return R},get ElTag(){return st},get $t(){return Q}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),hp={class:`instance-switcher`},gp={class:`switcher-text`},_p={class:`instance-row instance-row--current`},vp={class:`instance-row-main`},yp={class:`instance-name`},bp={class:`instance-row-sub`},xp={class:`instance-path`},Sp={class:`instance-row`},Cp={class:`instance-row-main`},wp={class:`instance-name`},Tp={class:`instance-row-sub`},Ep={class:`instance-path`},Dp={class:`instance-empty`};function Op(e,t,n,r,i,a){return r.hasAny?(Z(),U(r.ElDropdown,{key:0,trigger:`click`,placement:`bottom-end`,onCommand:r.handleOpen},{dropdown:L(()=>[s(r.ElDropdownMenu,{class:`instance-dropdown-menu`},{default:L(()=>[B(` 当前实例(不可点击) `),r.store.currentInstance?(Z(),U(r.ElDropdownItem,{key:0,disabled:``},{default:L(()=>[W(`div`,_p,[W(`div`,vp,[W(`span`,yp,V(r.store.currentInstance.projectName),1),s(r.ElTag,{size:`small`,type:`primary`,effect:`light`,class:`instance-tag`},{default:L(()=>[M(V(r.$t(`@INSSW:当前`)),1)]),_:1})]),W(`div`,bp,[s(r.ElTag,{size:`small`,effect:`plain`,class:`port-badge`},{default:L(()=>[M(`:`+V(r.store.currentInstance.port),1)]),_:1}),W(`span`,xp,V(r.pathSubtitle(r.store.currentInstance)),1)])])]),_:1})):B(`v-if`,!0),B(` 其他运行中的实例 `),(Z(!0),X(Y,null,F(r.store.otherInstances,e=>(Z(),U(r.ElDropdownItem,{key:e.pid,command:e.port},{default:L(()=>[W(`div`,Sp,[W(`div`,Cp,[W(`span`,wp,V(e.projectName),1),s(r.ElTag,{size:`small`,effect:`plain`,class:`port-badge`},{default:L(()=>[M(`:`+V(e.port),1)]),_:2},1024)]),W(`div`,Tp,[W(`span`,Ep,V(r.pathSubtitle(e)),1)])])]),_:2},1032,[`command`]))),128)),B(` 空状态 `),r.store.otherInstances.length===0?(Z(),U(r.ElDropdownItem,{key:1,disabled:``},{default:L(()=>[W(`span`,Dp,V(r.$t(`@INSSW:无其他运行中的实例`)),1)]),_:1})):B(`v-if`,!0)]),_:1})]),default:L(()=>[W(`span`,hp,[s(r.ElIcon,{class:`switcher-icon`},{default:L(()=>[B(` apps/layers 图标 `),t[0]||=W(`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`},[W(`rect`,{x:`3`,y:`3`,width:`7`,height:`7`,rx:`1`}),W(`rect`,{x:`14`,y:`3`,width:`7`,height:`7`,rx:`1`}),W(`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`}),W(`rect`,{x:`14`,y:`14`,width:`7`,height:`7`,rx:`1`})],-1)]),_:1}),W(`span`,gp,V(r.triggerText),1)])]),_:1})):B(`v-if`,!0)}var kp=$(mp,[[`render`,Op],[`__scopeId`,`data-v-8a24f415`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/InstanceSwitcher.vue`]]),Ap=J(!0),jp=J(null),Mp=J(0),Np=J(!1),Pp=!1,Fp=null,Ip=null,Lp=null;function Rp(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 zp=J(null);async function Bp(){let e=zp.value;if(!e||!Fp)return!1;try{let t=await Fp(e.url,e.init);return t.ok?(Ap.value=!0,jp.value=null,Np.value=!1,!0):(jp.value=Rp(null,t),!1)}catch(e){return jp.value=Rp(e),!1}}function Vp(){Np.value=!0}function Hp(){Pp||typeof window>`u`||(Fp=window.fetch.bind(window),window.fetch=async function(e,t){let n=typeof e==`string`?e:e.toString();try{let r=await Fp(e,t);return!r.ok&&r.status>=500?(Ap.value=!1,jp.value=Rp(null,r),Mp.value=Date.now(),zp.value={url:n,init:t}):r.ok&&(Ap.value||=!0,jp.value=null,Mp.value=0),r}catch(e){throw Ap.value=!1,jp.value=Rp(e),Mp.value=Date.now(),zp.value={url:n,init:t},e}},Ip=()=>{Ap.value=!0},Lp=()=>{Ap.value=!1,jp.value=Q(`@NET:浏览器报告离线`),Mp.value=Date.now()},window.addEventListener(`online`,Ip),window.addEventListener(`offline`,Lp),Pp=!0)}function Up(){Pp&&(Fp&&(window.fetch=Fp),Ip&&window.removeEventListener(`online`,Ip),Lp&&window.removeEventListener(`offline`,Lp),Pp=!1,Fp=null,Ip=null,Lp=null)}function Wp(){return{isOnline:Ke(Ap),lastError:Ke(jp),lastErrorAt:Ke(Mp),isDismissed:Ke(Np),lastFailedRequest:Ke(zp),start:Hp,stop:Up,retryLast:Bp,dismiss:Vp}}var Gp=280,Kp=N({__name:`AppErrorBanner`,setup(e,{expose:t}){t();let{isOnline:n,lastError:r,lastErrorAt:i,isDismissed:a,retryLast:o,dismiss:s}=Wp(),c=G(()=>!n.value&&!a.value),l=J(!1),u=J(!1);C(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},Gp))},{immediate:!0});let d=J(Q(`@NET:刚刚`)),f=null;function p(){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 m(){f||=(p(),setInterval(p,1e3))}function g(){f&&=(clearInterval(f),null)}C(c,e=>{e?m():g()}),h(g);let _={isOnline:n,lastError:r,lastErrorAt:i,isDismissed:a,retryLast:o,dismiss:s,shouldShow:c,visible:l,isLeaving:u,LEAVE_ANIMATION_MS:Gp,relativeTime:d,get relativeTimer(){return f},set relativeTimer(e){f=e},updateRelativeTime:p,startRelativeTimer:m,stopRelativeTimer:g,get $t(){return Q},get WarningFilled(){return ce},get Refresh(){return ne},get Close(){return qe}};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),qp={class:`banner-left`},Jp={class:`banner-text`},Yp={class:`banner-title`},Xp={key:0,class:`banner-detail`},Zp={"data-net-error-time":``},Qp={class:`banner-actions`},$p=[`aria-label`];function em(e,t,n,r,i,a){let o=R;return r.visible?(Z(),X(`div`,{key:0,class:K([`app-error-banner`,{"is-leaving":r.isLeaving}]),role:`alert`,"aria-live":`assertive`},[W(`div`,qp,[s(o,{class:`banner-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.WarningFilled)]),_:1}),W(`div`,Jp,[W(`span`,Yp,V(r.$t(`@NET:无法连接到本地服务,请检查后端进程`)),1),r.lastError?(Z(),X(`span`,Xp,[M(V(r.lastError)+` · `,1),W(`span`,Zp,V(r.relativeTime),1)])):B(`v-if`,!0)])]),W(`div`,Qp,[W(`button`,{type:`button`,class:`banner-btn banner-btn--retry`,onClick:t[0]||=(...e)=>r.retryLast&&r.retryLast(...e)},[s(o,{class:`banner-btn-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Refresh)]),_:1}),W(`span`,null,V(r.$t(`@NET:重试`)),1)]),W(`button`,{type:`button`,class:`banner-btn banner-btn--close`,"aria-label":r.$t(`@NET:关闭`),onClick:t[1]||=(...e)=>r.dismiss&&r.dismiss(...e)},[s(o,{class:`banner-btn-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Close)]),_:1})],8,$p)])],2)):B(`v-if`,!0)}var tm=$(Kp,[[`render`,em],[`__scopeId`,`data-v-4f5b8eef`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/AppErrorBanner.vue`]]),nm=N({__name:`RecentProjectsList`,props:{variant:{type:String,required:!1,default:`inline`}},setup(e,{expose:t}){t();let n=J([]),r=J(!1),i=J(``);function o(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 s=G(()=>{let e=i.value.trim().toLowerCase();return e?n.value.filter(t=>t.path.toLowerCase().includes(e)):n.value}),c=G(()=>s.value.map(e=>{let{base:t}=o(e.path);return{...e,displayBase:t}}));async function l(){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 u(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||H.error(t?.error||Q(`@13D1C:打开失败`))}catch(e){H.error(`${Q(`@13D1C:打开失败`)}: ${e.message}`)}}function d(e){if(!e.exists){H.warning(Q(`@13D1C:目录不存在,无法打开`));return}u(e.path)}te(()=>{l()});let f={recentDirectories:n,isLoadingRecent:r,searchQuery:i,splitPath:o,filteredDirectories:s,displayItems:c,loadRecentDirectories:l,openRecentDirInNewTab:u,onRecentDirClick:d,get Folder(){return ot},get Loading(){return p},get Search(){return a},get $t(){return Q}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),rm={class:`recent-projects__head`},im={class:`recent-projects__title`},am={class:`recent-projects__hint`},om={key:0,class:`recent-projects__search`},sm=[`placeholder`,`aria-label`],cm=[`aria-label`],lm={key:1,class:`recent-projects__empty`},um={key:2,class:`recent-projects__empty`},dm={key:3,class:`recent-projects__empty`},fm=[`aria-label`],pm=[`title`,`aria-label`,`onClick`],mm=[`title`],hm={class:`recent-projects__name-base`},gm={class:`recent-projects__name-parent`},_m={key:0,class:`recent-projects__tag`};function vm(e,t,n,r,i,a){let o=R;return Z(),X(`div`,{class:K([`recent-projects`,{"recent-projects--fullpage":n.variant===`fullpage`}])},[W(`div`,rm,[W(`span`,im,V(r.$t(`@13D1C:最近项目`)),1),W(`span`,am,V(r.$t(`@13D1C:点击在新标签页打开`)),1)]),B(` 搜索框:仅 fullpage 模式(非 Git 仓库右侧整列)展示,inline 紧凑版不渲染避免占用空间 `),n.variant===`fullpage`?(Z(),X(`div`,om,[s(o,{class:`recent-projects__search-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Search)]),_:1}),z(W(`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,sm),[[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,cm)):B(`v-if`,!0)])):B(`v-if`,!0),r.isLoadingRecent&&r.recentDirectories.length===0?(Z(),X(`div`,lm,[s(o,null,{default:L(()=>[s(r.Loading)]),_:1}),W(`span`,null,V(r.$t(`@13D1C:加载中...`)),1)])):r.recentDirectories.length===0?(Z(),X(`div`,um,V(r.$t(`@13D1C:暂无最近项目`)),1)):r.filteredDirectories.length===0?(Z(),X(`div`,dm,V(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}])},[W(`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)},[s(o,{class:`recent-projects__icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Folder)]),_:1}),W(`span`,{class:`recent-projects__name`,title:e.path},[W(`span`,hm,V(e.displayBase),1),W(`span`,gm,V(e.path),1)],8,mm),e.exists?B(`v-if`,!0):(Z(),X(`span`,_m,V(r.$t(`@13D1C:不存在`)),1))],8,pm)],2))),128))],8,fm))],2)}var ym=$(nm,[[`render`,vm],[`__scopeId`,`data-v-53d20908`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/RecentProjectsList.vue`]]),bm=N({__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}}),xm={class:`view-loading`},Sm=[`aria-label`],Cm={class:`view-loading__text`};function wm(e,t,n,r,i,a){return Z(),X(`div`,xm,[W(`div`,{class:`view-loading__spinner`,role:`status`,"aria-label":n.text},[t[0]||=W(`svg`,{viewBox:`0 0 24 24`,class:`view-loading__icon`},[W(`circle`,{class:`view-loading__track`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`}),W(`circle`,{class:`view-loading__arc`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`,"stroke-linecap":`round`})],-1),W(`span`,Cm,V(n.text),1)],8,Sm)])}var Tm=$(bm,[[`render`,wm],[`__scopeId`,`data-v-d040c841`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/ViewLoading.vue`]]),Em=N({__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)});C(_,e=>{e||v()});function v(){o.value=``,s.value=!1,c.value=``,l.value=-1}async function y(){if(!o.value.trim()){H.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){H.error(`${Q(`@60CAC:模板保存失败: `)}${e.message}`)}finally{u.value=!1}}function b(e){i(`use-template`,e),r.type!==`message`&&(_.value=!1)}function x(e,t){s.value=!0,c.value=e,o.value=e,l.value=t}function S(){v()}async function w(e){try{f.value=!0,await a.pinTemplate(e,r.type)}catch(e){H.error(`${Q(`@60CAC:置顶模板失败: `)}${e.message}`)}finally{f.value=!1}}async function T(e){try{await a.deleteTemplate(e,r.type)}catch(e){H.error(`${Q(`@60CAC:模板删除失败: `)}${e.message}`)}}async function ee(){if(!(r.type!==`message`||!o.value.trim()))try{d.value=!0,await a.saveDefaultMessage(o.value)&&i(`set-default`,o.value)}catch(e){H.error(`${Q(`@60CAC:设置默认提交信息失败: `)}${e.message}`)}finally{d.value=!1}}t({resetForm:v});let E={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:b,startEditTemplate:x,cancelEdit:S,pinTemplate:w,deleteTemplate:T,setAsDefault:ee,get $t(){return Q},get Edit(){return Pe},CommonDialog:vt};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}}),Dm={class:`template-form`},Om={class:`template-form-buttons`},km={key:0,class:`template-list`},Am={key:1,class:`template-list-scroll`},jm={class:`template-content`},Mm={class:`template-actions`},Nm={class:`templates-container`},Pm={class:`message-templates-list`},Fm={class:`templates-scroll-area`},Im={class:`template-content`},Lm={class:`template-actions`},Rm={key:0,class:`current-default-message`},zm={class:`default-message-content`},Bm={key:2,class:`message-help-text`};function Vm(e,t,n,r,a,o){let c=I,l=i,u=j,d=gt,f=Ie,p=x,m=st;return Z(),U(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:L(()=>[W(`div`,{class:K([`template-container`,{"message-template-container":n.type===`message`}])},[W(`div`,Dm,[s(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`]),W(`div`,Om,[r.isEditing?(Z(),U(l,{key:0,onClick:r.cancelEdit},{default:L(()=>[M(V(r.$t(`@60CAC:取消`)),1)]),_:1})):B(`v-if`,!0),s(l,{type:`primary`,onClick:r.saveTemplate,disabled:!r.newTemplate.trim()||r.isSaving,loading:r.isSaving},{default:L(()=>[M(V(r.buttonText),1)]),_:1},8,[`disabled`,`loading`]),B(` 默认提交信息设置的特殊按钮 `),n.type===`message`?(Z(),U(l,{key:1,type:`success`,onClick:r.setAsDefault,disabled:!r.newTemplate.trim()||r.isSavingDefault,loading:r.isSavingDefault,plain:``},{default:L(()=>[M(V(r.$t(`@60CAC:设为默认提交信息`)),1)]),_:1},8,[`disabled`,`loading`])):B(`v-if`,!0)])]),B(` 普通模板布局:固定标题,仅列表滚动 `),n.type===`message`?(Z(),X(Y,{key:1},[B(` 提交信息模板的特殊布局 `),W(`div`,Nm,[W(`div`,Pm,[W(`h3`,null,V(r.$t(`@60CAC:已保存模板`)),1),W(`div`,Fm,[r.templates.length===0?(Z(),U(u,{key:0,description:n.emptyDescription},null,8,[`description`])):B(`v-if`,!0),(Z(!0),X(Y,null,F(r.templates,(e,t)=>(Z(),U(p,{key:t,class:`template-item`},{default:L(()=>[s(f,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:L(()=>[W(`div`,Im,V(e),1),W(`div`,Lm,[s(l,{size:`small`,class:`pin-button`,onClick:t=>r.pinTemplate(e),loading:r.isPinning,disabled:t===0,title:`置顶`},{default:L(()=>[s(d,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:1},8,[`onClick`,`loading`,`disabled`]),s(l,{type:`primary`,size:`small`,onClick:t=>r.useTemplate(e)},{default:L(()=>[M(V(r.$t(`@60CAC:使用`)),1)]),_:1},8,[`onClick`]),s(l,{type:`warning`,size:`small`,icon:r.Edit,onClick:n=>r.startEditTemplate(e,Number(t))},{default:L(()=>[M(V(r.$t(`@60CAC:编辑`)),1)]),_:1},8,[`icon`,`onClick`]),s(l,{type:`danger`,size:`small`,onClick:t=>r.deleteTemplate(e)},{default:L(()=>[M(V(r.$t(`@60CAC:删除`)),1)]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))])]),B(` 默认提交信息部分 `),n.showDefaultSection?(Z(),X(`div`,Rm,[W(`h3`,null,V(r.$t(`@60CAC:当前默认提交信息`)),1),r.defaultCommitMessage?(Z(),U(p,{key:0,class:`default-message-card`},{default:L(()=>[W(`div`,zm,V(r.defaultCommitMessage),1)]),_:1})):(Z(),U(u,{key:1,description:r.$t(`@60CAC:尚未设置默认提交信息`),"image-size":100},null,8,[`description`])),n.showHelpText?(Z(),X(`div`,Bm,[W(`h4`,null,V(r.$t(`@60CAC:关于默认提交信息`)),1),W(`p`,null,V(r.$t(`@60CAC:默认提交信息将在未输入提交信息时自动使用。`)),1),W(`p`,null,[M(V(r.$t(`@60CAC:你可以通过点击左侧模板的`)),1),s(m,{size:`small`,type:`primary`},{default:L(()=>[M(V(r.$t(`@60CAC:使用`)),1)]),_:1}),M(V(r.$t(`@60CAC:按钮先选择喜欢的模板,然后点击上方`)),1),s(m,{size:`small`,type:`success`},{default:L(()=>[M(V(r.$t(`@60CAC:设为默认提交信息`)),1)]),_:1}),M(V(r.$t(`@60CAC:按钮保存。`)),1)])])):B(`v-if`,!0)])):B(`v-if`,!0)])],2112)):(Z(),X(`div`,km,[W(`h3`,null,V(r.$t(`@60CAC:已保存`))+` `+V(n.type===`description`?r.$t(`@60CAC:模板`):n.type===`scope`?r.$t(`@60CAC:作用域`):n.type===`command`?r.$t(`@CMD01:命令模板`):``),1),r.templates.length===0?(Z(),U(u,{key:0,description:n.emptyDescription},null,8,[`description`])):(Z(),X(`div`,Am,[(Z(!0),X(Y,null,F(r.templates,(e,t)=>(Z(),U(p,{key:t,class:`template-item`},{default:L(()=>[s(f,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:L(()=>[W(`div`,jm,V(e),1),W(`div`,Mm,[s(l,{size:`small`,class:`pin-button`,onClick:t=>r.pinTemplate(e),loading:r.isPinning,disabled:t===0,title:`置顶`},{default:L(()=>[s(d,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:1},8,[`onClick`,`loading`,`disabled`]),s(l,{type:`primary`,size:`small`,onClick:t=>r.useTemplate(e)},{default:L(()=>[M(V(r.$t(`@60CAC:使用`)),1)]),_:1},8,[`onClick`]),s(l,{type:`warning`,size:`small`,icon:r.Edit,onClick:n=>r.startEditTemplate(e,Number(t))},{default:L(()=>[M(V(r.$t(`@60CAC:编辑`)),1)]),_:1},8,[`icon`,`onClick`]),s(l,{type:`danger`,size:`small`,onClick:t=>r.deleteTemplate(e)},{default:L(()=>[M(V(r.$t(`@60CAC:删除`)),1)]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))]))]))],2)]),_:1},8,[`modelValue`,`title`,`custom-class`])}var Hm=$(Em,[[`render`,Vm],[`__scopeId`,`data-v-9f9265ce`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/TemplateManager.vue`]]),Um=N({__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(S.value)?S.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){H.error(`${Q(`@CMD01:保存命令失败: `)}${e.message}`)}}let a=e,o=n,s=xt(),{currentLocale:c}=dt(bt()),l=G(()=>s.commandTemplates||[]),d=J(!1);function f(e,t){let n=Array.isArray(l.value)?l.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=N({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()=>u(`div`,{class:`cmd-param-form`},e.vars.map(n=>u(`div`,{class:`cmd-param-row`},[u(`div`,{class:`cmd-param-label`},n),u(I,{modelValue:e.values[n],"onUpdate:modelValue":t=>{e.values[n]=String(t??``)},placeholder:Q(`@CMD01:请输入变量值`,{var:n}),clearable:!0}),t(n)?u(`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),b=J(``),x=J(!1),S=G(()=>s.customCommands||[]),w=G({get:()=>a.visible,set:e=>o(`update:visible`,e)});C(w,e=>{e||T()});function T(){v.value={name:``,description:``,directory:``,command:``,params:[]},y.value=!1,b.value=``}C(()=>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 ee(){if(!v.value.name.trim()){H.warning(Q(`@CMD01:命令名称不能为空`));return}if(!v.value.command.trim()){H.warning(Q(`@CMD01:命令内容不能为空`));return}try{x.value=!0,y.value?await s.updateCustomCommand(b.value,v.value)&&T():((!v.value.directory||!v.value.directory.trim())&&(v.value.directory=s.currentDirectory||``),await s.saveCustomCommand(v.value)&&T())}catch(e){H.error(`${Q(`@CMD01:命令保存失败: `)}${e.message}`)}finally{x.value=!1}}function E(e){y.value=!0,b.value=e.id||``,v.value={name:e.name,description:e.description||``,directory:e.directory,command:e.command,params:_(e)}}function te(){T()}async function ne(e){try{await Fe.confirm(Q(`@CMD01:确定要删除这个自定义命令吗?`),Q(`@CMD01:删除确认`),{confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`}),await s.deleteCustomCommand(e)}catch{}}async function re(e){await s.pinCustomCommand(e)}async function D(e){let t=String(e?.command||``),n=m(t);if(!n.length){o(`execute-command`,e);return}let r=be({});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 Fe({title:Q(`@CMD01:执行参数`),message:u(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()===``){H.warning(Q(`@CMD01:请输入必填变量: `,{var:e.name}));return}}let c=h(t,r);o(`execute-command`,{...e,command:c})}catch{}}let ie=J(!1);function O(){ie.value=!0}function ae(e){v.value.directory=e}function oe(){v.value.directory=s.currentDirectory||``}let se=J(null),ce=J([]);function k(e){ce.value=e}async function le(){let e=[...ce.value],t=e.length;if(t)try{await Fe.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),ce.value=[],H.success(Q(`@CMD01:批量删除成功`,{count:n}))}catch{}}let A=J(!1),j=J([]),M=J([]),ue=J(null),de=J(!1),P=J(!1);async function fe(){try{de.value=!0,A.value=!0,j.value=[],M.value=[];let e=await(await fetch(`/api/scan-npm-scripts`)).json();if(!e.success){H.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.error||``}`),A.value=!1;return}let t=e.packages||[];if(t.length===0){H.warning(Q(`@CMD01:未找到任何NPM脚本`)),A.value=!1;return}let n=new Set((Array.isArray(S.value)?S.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)})}}j.value=r}catch(e){H.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`),A.value=!1}finally{de.value=!1}}function pe(e){M.value=e}async function F(){if(!M.value.length){H.warning(Q(`@CMD01:请至少选择一项`));return}try{P.value=!0;let e=new Set((Array.isArray(S.value)?S.value:[]).map(e=>String(e?.name||``).trim())),t=0,n=0;for(let r of M.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++)}H.success(Q(`@CMD01:NPM命令同步完成2`,{count:t,skip:n})),A.value=!1,M.value=[]}catch(e){H.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`)}finally{P.value=!1}}t({resetForm:T});let me={buildDuplicateName:r,duplicateCommand:i,props:a,emit:o,configStore:s,currentLocale:c,commandTemplates:l,commandTemplateDialogVisible:d,queryCommandTemplates:f,handleCommandSelect:p,extractTemplateVariables:m,applyTemplateVariables:h,CmdParamForm:g,normalizeCommandParams:_,newCommand:v,isEditing:y,editingId:b,isSaving:x,commands:S,dialogVisible:w,resetForm:T,saveCommand:ee,startEditCommand:E,cancelEdit:te,deleteCommand:ne,pinCommandToTop:re,executeCommand:D,isBrowserDialogVisible:ie,browseDirectory:O,onBrowserSelect:ae,useCurrentDirectory:oe,commandTableRef:se,selectedCommands:ce,onSelectionChange:k,batchDeleteCommands:le,npmDialogVisible:A,npmScriptItems:j,npmSelected:M,npmTableRef:ue,isLoadingNpm:de,isDoingSyncNpm:P,syncNpmCommands:fe,onNpmSelectionChange:pe,doSyncSelectedNpm:F,get $t(){return Q},get ElInput(){return I},get Edit(){return Pe},get Delete(){return ze},get VideoPlay(){return _e},get Folder(){return ot},get CopyDocument(){return Ee},get Top(){return Ze},IconButton:_t,TemplateManager:Hm,get FilePicker(){return pt}};return Object.defineProperty(me,"__isScriptSetup",{enumerable:!1,value:!0}),me}}),Wm=t({default:()=>jh}),Gm={class:`command-container`},Km={class:`left-panel`},qm={class:`command-form`},Jm={class:`form-header`},Ym={class:`left-title`},Xm={class:`form-content`},Zm={class:`form-row`},Qm={class:`form-field`},$m={class:`required`},eh={class:`form-row`},th={class:`form-field`},nh={class:`form-row`},rh={class:`form-field`},ih={class:`directory-input-group`},ah={class:`form-row`},oh={class:`form-field`},sh={class:`required`},ch={key:0,class:`command-params`},lh={class:`params-title`},uh={class:`form-actions`},dh={class:`right-panel`},fh={class:`command-list`},ph={class:`list-header`},mh={class:`list-header-left`},hh={class:`list-title`},gh={key:0,class:`selection-count`},_h={class:`list-header-actions`},vh={class:`list-content`},yh={key:1,class:`command-list-scroll`},bh={class:`name-cell`},xh={class:`name-text`},Sh={key:0,class:`description-text`},Ch={class:`command-text`},wh={class:`directory-text`},Th={class:`action-buttons`},Eh={class:`npm-dialog-body`},Dh={class:`command-text`},Oh={class:`npm-dialog-footer`},kh={class:`npm-selected-count`};function Ah(e,t,n,r,a,o){let c=i,u=R,d=y,f=Ne,p=je,m=Be,h=j,g=l,_=st,v=We;return Z(),X(Y,null,[s(g,{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:L(()=>[W(`div`,Gm,[W(`div`,Km,[W(`div`,qm,[W(`div`,Jm,[W(`div`,Ym,V(r.isEditing?r.$t(`@CMD01:编辑命令`):r.$t(`@CMD01:添加命令`)),1)]),W(`div`,Xm,[B(` 命令名称 `),W(`div`,Zm,[W(`div`,Qm,[W(`label`,$m,V(r.$t(`@CMD01:命令名称`)),1),s(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`])])]),B(` 描述 `),W(`div`,eh,[W(`div`,th,[W(`label`,null,V(r.$t(`@CMD01:描述`)),1),s(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`])])]),B(` 执行目录 `),W(`div`,nh,[W(`div`,rh,[W(`label`,null,V(r.$t(`@CMD01:执行目录`)),1),W(`div`,ih,[s(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`]),s(c,{onClick:r.useCurrentDirectory,type:`primary`,plain:``,size:`default`},{default:L(()=>[M(V(r.$t(`@CMD01:使用当前目录`)),1)]),_:1}),s(c,{onClick:r.browseDirectory,type:`info`,plain:``,size:`default`},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Folder)]),_:1}),M(` `+V(r.$t(`@CMD01:选择目录`)),1)]),_:1})])])]),B(` 命令 `),W(`div`,ah,[W(`div`,oh,[W(`label`,sh,V(r.$t(`@CMD01:命令`)),1),s(d,{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`,ch,[W(`div`,lh,V(r.$t(`@CMD01:变量配置`)),1),s(m,{data:r.newCommand.params,style:{width:`100%`},size:`small`,stripe:``},{default:L(()=>[s(f,{prop:`name`,label:r.$t(`@CMD01:变量名`),width:`160`},null,8,[`label`]),s(f,{label:r.$t(`@CMD01:默认值`),"min-width":`180`},{default:L(e=>[s(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`]),s(f,{label:r.$t(`@CMD01:必填`),width:`90`,align:`center`},{default:L(e=>[s(p,{modelValue:e.row.required,"onUpdate:modelValue":t=>e.row.required=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1},8,[`label`]),s(f,{label:r.$t(`@CMD01:描述`),"min-width":`220`},{default:L(e=>[s(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`])])):B(`v-if`,!0)])]),B(` 按钮区域 `),W(`div`,uh,[r.isEditing?(Z(),U(c,{key:0,onClick:r.cancelEdit,size:`large`},{default:L(()=>[M(V(r.$t(`@CMD01:取消`)),1)]),_:1})):B(`v-if`,!0),s(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:L(()=>[M(V(r.isEditing?r.$t(`@CMD01:更新命令`):r.$t(`@CMD01:添加命令`)),1)]),_:1},8,[`disabled`,`loading`])])])])]),W(`div`,dh,[B(` 命令列表 `),W(`div`,fh,[W(`div`,ph,[W(`div`,mh,[W(`h3`,hh,V(r.$t(`@CMD01:已保存的命令`)),1),r.selectedCommands.length>0?(Z(),X(`span`,gh,V(r.$t(`@CMD01:已选择`,{count:r.selectedCommands.length})),1)):B(`v-if`,!0)]),W(`div`,_h,[r.selectedCommands.length>0?(Z(),U(c,{key:0,type:`danger`,plain:``,size:`small`,onClick:r.batchDeleteCommands},{default:L(()=>[M(V(r.$t(`@CMD01:批量删除`)),1)]),_:1})):B(`v-if`,!0),s(c,{type:`primary`,plain:``,size:`small`,loading:r.isLoadingNpm,onClick:r.syncNpmCommands},{default:L(()=>[M(V(r.$t(`@CMD01:同步NPM命令`)),1)]),_:1},8,[`loading`])])]),W(`div`,vh,[r.commands.length===0?(Z(),U(h,{key:0,description:r.$t(`@CMD01:暂无保存的命令`)},null,8,[`description`])):(Z(),X(`div`,yh,[s(m,{ref:`commandTableRef`,data:r.commands,style:{width:`100%`,height:`100%`},stripe:``,onSelectionChange:r.onSelectionChange},{default:L(()=>[s(f,{type:`selection`,width:`40`}),s(f,{prop:`name`,label:r.$t(`@CMD01:命令名称`),"min-width":`80`},{default:L(e=>[W(`div`,bh,[W(`span`,xh,V(e.row.name),1),e.row.description?(Z(),X(`span`,Sh,V(e.row.description),1)):B(`v-if`,!0)])]),_:1},8,[`label`]),s(f,{prop:`command`,label:r.$t(`@CMD01:命令`),"min-width":`200`},{default:L(e=>[W(`code`,Ch,V(e.row.command),1)]),_:1},8,[`label`]),s(f,{prop:`directory`,label:r.$t(`@CMD01:执行目录`),"min-width":`200`},{default:L(e=>[W(`span`,wh,V(e.row.directory),1)]),_:1},8,[`label`]),s(f,{label:r.$t(`@CMD01:操作`),width:`138`,fixed:`right`},{default:L(e=>[W(`div`,Th,[s(r.IconButton,{tooltip:r.$t(`@CMD01:置顶`),size:`small`,"hover-color":`var(--color-info)`,onClick:t=>r.pinCommandToTop(e.row.id)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Top)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),s(r.IconButton,{tooltip:r.$t(`@CMD01:执行命令`),size:`small`,"hover-color":`var(--color-success)`,onClick:t=>r.executeCommand(e.row)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.VideoPlay)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),s(r.IconButton,{tooltip:r.$t(`@CMD01:编辑`),size:`small`,"hover-color":`var(--color-primary)`,onClick:t=>r.startEditCommand(e.row)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Edit)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),s(r.IconButton,{tooltip:r.$t(`@CMD01:复制命令`),size:`small`,"hover-color":`var(--color-warning)`,onClick:t=>r.duplicateCommand(e.row)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.CopyDocument)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),s(r.IconButton,{tooltip:r.$t(`@CMD01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:t=>r.deleteCommand(e.row.id)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Delete)]),_:1})]),_:1},8,[`tooltip`,`onClick`])])]),_:1},8,[`label`])]),_:1},8,[`data`])]))])])])])]),_:1},8,[`modelValue`,`title`,`fullscreen`,`width`,`top`]),s(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`]),B(` 目录浏览器弹窗 `),s(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`]),B(` NPM 命令选择弹窗 `),s(g,{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:L(()=>[W(`div`,Oh,[W(`span`,kh,V(r.$t(`@CMD01:已选择`,{count:r.npmSelected.length})),1),s(c,{onClick:t[8]||=e=>r.npmDialogVisible=!1},{default:L(()=>[M(V(r.$t(`@CMD01:取消`)),1)]),_:1}),s(c,{type:`primary`,loading:r.isDoingSyncNpm,disabled:r.npmSelected.length===0,onClick:r.doSyncSelectedNpm},{default:L(()=>[M(V(r.$t(`@CMD01:开始同步`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:L(()=>[z((Z(),X(`div`,Eh,[s(m,{ref:`npmTableRef`,data:r.npmScriptItems,style:{width:`100%`},"max-height":`420`,stripe:``,onSelectionChange:r.onNpmSelectionChange},{default:L(()=>[s(f,{type:`selection`,width:`44`,selectable:()=>!0}),s(f,{prop:`packageName`,label:r.$t(`@CMD01:包名`),"min-width":`140`},null,8,[`label`]),s(f,{prop:`scriptName`,label:r.$t(`@CMD01:脚本名`),"min-width":`120`},null,8,[`label`]),s(f,{prop:`scriptName`,label:r.$t(`@CMD01:命令`),"min-width":`160`},{default:L(e=>[W(`code`,Dh,`npm run `+V(e.row.scriptName),1)]),_:1},8,[`label`]),s(f,{label:r.$t(`@CMD01:状态`),width:`80`,align:`center`},{default:L(e=>[e.row.isDuplicate?(Z(),U(_,{key:0,type:`warning`,size:`small`},{default:L(()=>[M(V(r.$t(`@CMD01:已存在`)),1)]),_:1})):(Z(),U(_,{key:1,type:`success`,size:`small`},{default:L(()=>[M(V(r.$t(`@CMD01:新增`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`])])),[[v,r.isLoadingNpm]])]),_:1},8,[`modelValue`,`title`])],64)}var jh=$(Um,[[`render`,Ah],[`__scopeId`,`data-v-c7d52d8a`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/CustomCommandManager.vue`]]);function Mh(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 Nh(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 Ph=120,Fh=600,Ih=16,Lh=N({__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(Ph,Math.min(Fh,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(Fh,l.value+Ih)):e.key===`ArrowDown`?(e.preventDefault(),l.value=Math.max(Ph,l.value-Ih)):e.key===`Home`?(e.preventDefault(),l.value=Fh):e.key===`End`&&(e.preventDefault(),l.value=Ph)}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=Nh(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?(H.success(Q(`@CMDPANEL:已在新终端中执行`,{name:e.name})),window.dispatchEvent(new Event(`zen-gitsync:terminal-session-created`))):H.error(t?.error||Q(`@CMDPANEL:执行失败`))}catch(e){H.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:Ph,MAX_PANEL_HEIGHT:Fh,KEY_NUDGE_PX:Ih,startResize:p,handleResize:m,stopResize:h,onResizeKeydown:g,runCommand:_,get $t(){return Q},IconButton:_t,SvgIcon:gt,CustomCommandManager:jh};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),Rh={class:`custom-commands-panel`},zh={class:`header-left`},Bh={class:`panel-title`},Vh=[`aria-valuenow`,`aria-label`],Hh={key:0,class:`empty-container`},Uh={class:`empty-text`},Wh=[`onClick`],Gh={class:`command-left`},Kh={key:0,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},qh={key:1,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Jh={class:`command-info`},Yh={class:`command-name`},Xh={key:0,class:`command-desc`},Zh={key:1,class:`command-desc command-text`};function Qh(e,t,n,r,a,o){let c=R,l=i;return Z(),X(Y,null,[W(`div`,Rh,[W(`div`,{class:`panel-header accordion-header`,onClick:r.toggleCollapsed},[W(`div`,zh,[s(c,{class:K([`accordion-chevron`,{"is-collapsed":r.collapsed}])},{default:L(()=>[...t[2]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`]),s(r.SvgIcon,{"icon-class":`command-list`,"class-name":`cmd-panel-icon`}),W(`span`,Bh,V(r.$t(`@CMDPANEL:自定义命令`)),1)]),W(`div`,{class:`header-right`,onClick:t[0]||=Re(()=>{},[`stop`])},[s(r.IconButton,{size:`small`,tooltip:r.$t(`@CMDPANEL:管理命令`),onClick:r.openManager},{default:L(()=>[s(c,null,{default:L(()=>[...t[3]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[W(`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`])])]),B(` 拖拽调高度(展开时显示) OPT-4: 补 role/tabindex/aria-orientation + 键盘 nudge `),z(W(`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,Vh),[[q,!r.collapsed]]),!r.collapsed&&r.commands.length===0?(Z(),X(`div`,Hh,[t[4]||=W(`svg`,{class:`empty-icon`,viewBox:`0 0 1024 1024`,width:`40`,height:`40`},[W(`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),W(`p`,Uh,V(r.$t(`@CMDPANEL:暂无自定义命令`)),1),s(l,{size:`small`,text:``,type:`primary`,onClick:r.openManager},{default:L(()=>[M(V(r.$t(`@CMDPANEL:去添加`)),1)]),_:1})])):r.collapsed?B(`v-if`,!0):(Z(),X(`div`,{key:1,class:`commands-list`,style:Me({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)},[W(`div`,Gh,[s(c,{class:K([`play-icon`,{"is-loading":r.isRunning[String(e.id||e.name)]}])},{default:L(()=>[r.isRunning[String(e.id||e.name)]?(Z(),X(`svg`,qh,[...t[6]||=[W(`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`,Kh,[...t[5]||=[W(`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),W(`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`]),W(`div`,Jh,[W(`span`,Yh,V(e.name),1),e.description?(Z(),X(`span`,Xh,V(e.description),1)):(Z(),X(`span`,Zh,V(e.command),1))])])],10,Wh))),128))],4))]),B(` 命令管理弹窗 `),s(r.CustomCommandManager,{visible:r.managerVisible,"onUpdate:visible":t[1]||=e=>r.managerVisible=e,fullscreen:!0,onExecuteCommand:r.runCommand},null,8,[`visible`])],64)}var $h=$(Lh,[[`render`,Qh],[`__scopeId`,`data-v-70af0dcb`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/CustomCommandsPanel.vue`]]),eg=e(lt(),1),tg={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 ng(e={}){let t=new eg.default({fg:e.fg??`#e5e5e5`,bg:e.bg??`transparent`,newline:e.newline??!1,escapeXML:e.escapeXML??!1,stream:e.stream??!1,colors:e.colors??tg});function n(e){return t.toHtml(e)}return{ansiToHtml:n,converter:t}}function rg(){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:[]:H.error(n?.error||`获取终端会话失败`)}catch(e){H.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?(H.success(`已重新启动终端`),await n(),!0):(H.error(r?.error||`重新启动失败`),!1)}catch(e){return H.error(e?.message||`重新启动失败`),!1}finally{t.value=!1}}async function i(e){try{await Fe.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?(H.success(`已删除`),await n(),!0):(H.error(r?.error||`删除失败`),!1)}catch(e){return H.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 ig=8e3,ag=N({__name:`CommandConsole`,setup(e,{expose:t}){t();let n=it(()=>wt(()=>Promise.resolve().then(()=>Wm),void 0)),r=it(()=>wt(()=>import(`./ProjectStartupButton-2By0-fuq.js`),__vite__mapDeps([3,1,4,5,6,0,2,7,8,9,10,11,12,13,14]))),i=it(()=>wt(()=>import(`./FlowOrchestrationWorkspace-BOn17akW.js`),__vite__mapDeps([15,1,4,5,6,0,2,7,8,9,10,11,12,13,16,17,18,19,20,21]))),a=it(()=>wt(()=>import(`./FlowExecutionViewer-CZdF1f1e.js`),__vite__mapDeps([22,4,1,5,8,6,0,2,7,16,17,18,13,19,23]))),o=xt(),s=Ht(),c=Yf();function l(){W().catch(e=>{H.error(e?.message||Q(`@CF05E:提交后启动项执行失败`))})}async function u(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 d({flowData:t,orchestrationMeta:n});return}H.warning(Q(`@CF05E:该编排缺少流程数据,无法执行`))}async function d(e){let t=e?.flowData;if(!t||!Array.isArray(t.nodes)||!Array.isArray(t.edges))return;let n=t.nodes,r=t.edges;be.value=!0,y.value=!0,b.value=!1,O.value=[],oe.value=-1,se.value=t,ce.value=!0,k.value=null,A.value=[],j.value=[],M.value=[],ue.value=(e?.orchestrationMeta?.name||``).trim(),N.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){H.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){H.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(k.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:用户停止执行`)&&(k.value&&!M.value.includes(k.value)&&(M.value=[...M.value,k.value]),H.error(e?.message||String(e)))}finally{y.value=!1,b.value=!1,oe.value=-1,O.value=[],k.value=null}}let f=zt(),m=J(null),h=J(``),_=J(``),y=J(!1),b=J(!1),x=J([]),w=0;function T(){Fe.confirm(Q(`@CF05E:确定要清空所有执行历史吗?此操作不可撤销。`),Q(`@CF05E:清空历史`),{confirmButtonText:Q(`@CF05E:清空`),cancelButtonText:Q(`@CF05E:取消`),type:`warning`}).then(()=>{x.value=[],H.success(Q(`@CF05E:执行历史已清空`))}).catch(()=>{})}function E(){fe&&fe(!0)}function ne(){fe&&fe(!1),y.value=!1,b.value=!1}function re(){I&&I(!0)}function ie(){I&&I(!1),y.value=!1,b.value=!1}let O=J([]),oe=J(-1),se=J(null),ce=J(!0),k=J(null),A=J([]),j=J([]),M=J([]),ue=J(``),N=J(``),de=J(!1),P=J(``),fe=null,pe=J(!1),F=J(``),I=null,me=J(!1),he=J(``),L=J([]),R=J({}),z=null,ve=G({get:()=>me.value,set:e=>{me.value=e}});function ye(){let e=Array.isArray(L.value)?L.value:[];for(let t of e){if(!t?.required)continue;let e=R.value?.[t.name];if(e==null||String(e).trim()===``){H.warning(Q(`@UINPUT:请输入必填参数的值`,{name:t.name}));return}}z&&z(!0)}function B(){z&&z(!1),y.value=!1,b.value=!1}let{ansiToHtml:V}=ng(),be=J(!1),xe=G({get:()=>o.ui.commandConsole.useTerminal,set:e=>{o.ui.commandConsole.useTerminal=e}}),{sessions:Se,loading:Ce,refresh:we,restart:Te,remove:Ee,upsert:De}=rg(),Oe=G({get:()=>o.ui.commandConsole.showTerminalSessions,set:e=>{o.ui.commandConsole.showTerminalSessions=e}}),ke=G(()=>Se.value.length);C(ke,e=>{c.setCount(e)},{immediate:!0});let Ae=J(!1);function je(e){return new Promise(t=>setTimeout(t,e))}async function U(e=8e3){let t=Date.now();for(;Date.now()-t<e;){if(m.value&&m.value.connected)return!0;await je(100)}return!1}async function Me(e){let t=o.customCommands.find(t=>String(t.id)===String(e));if(!t){H.warning(`启动项命令不存在: ${e}`);return}let n=t.directory||h.value,r=t.command;if(xe.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?De(e.session):await we():H.error(e?.error||Q(`@CF05E:启动项命令执行失败`))}catch(e){H.error(e?.message||Q(`@CF05E:启动项命令执行失败`))}return}if(!await U()){H.error(Q(`@CF05E:Socket 连接未就绪,无法自动执行交互式启动项`));return}await ft(r,n)}async function Ne(e){let t=o.orchestrations.find(t=>t.id===e);if(!t){H.warning(`启动项工作流不存在: ${e}`);return}await u(t)}async function W(){await o.loadConfig(!1);let e=o.afterQuickPushAction;e?.enabled&&e?.refId&&(e.type===`workflow`?await Ne(e.refId):await Me(e.refId))}async function Pe(){if(Ae.value||(Ae.value=!0,await o.loadConfig(!1),!o.startupAutoRun))return;let e=(o.startupItems||[]).filter(e=>e?.enabled!==!1);if(e.length!==0)for(let t of e)t.type===`workflow`?await Ne(t.refId):await Me(t.refId)}let Ie=e=>Math.min(85,Math.max(15,e)),Re=G({get:()=>Ie(o.ui.commandConsole.splitPercent),set:e=>{o.ui.commandConsole.splitPercent=Ie(e)}}),Be=J(null),K=()=>{let e=Be.value?.$el??Be.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},Ve=()=>{let e=Be.value?.$el??Be.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=K();if(!t||t.length<1||n<=0)return;let r=t[0]?.getBoundingClientRect?.().width??0;if(r>0){let e=Ie(r/n*100);e!==Re.value&&(Re.value=e)}},He=G({get(){return`${Ie(Re.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=K();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=K();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(Re.value=Ie(t))}});async function Ue(e=!0){if(Se.value.length!==0)try{let t=await(await fetch(`/api/terminal-sessions/status?cleanup=${e?`true`:`false`}`)).json();t?.success&&(Se.value=Array.isArray(t.sessions)?t.sessions:[])}catch{}}let We=null;function Ge(){We!==null&&(clearInterval(We),We=null)}function Ke(){We===null&&(We=setInterval(()=>{Ue(!0)},ig))}C(ke,e=>{e>0?Ke():Ge()},{immediate:!0});function Je(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 Xe=J(!1),Ze=J(!1);async function Qe(){let e=_.value.trim();!e||y.value||(_.value=``,await $e(e,h.value))}async function $e(e,t=h.value){if(y.value=!0,xe.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?(H.success(Q(`@CF05E:已在新终端中执行命令`)),n?.session?De(n.session):await we()):H.error(n?.error||Q(`@CF05E:执行失败`))}catch(e){H.error(e?.message||Q(`@CF05E:执行失败`))}finally{y.value=!1}return}let n={id:++w,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0};x.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),x.value=[...x.value]):t.type===`stdout`?(n.stdout=(n.stdout||``)+V(t.data),console.log(`[前端-控制台] 当前stdout总长度:`,n.stdout.length),y.value&&n.stdout.length<200&&(y.value=!1),x.value=[...x.value]):t.type===`stderr`?(n.stderr=(n.stderr||``)+V(t.data),console.log(`[前端-控制台] 当前stderr总长度:`,n.stderr.length),y.value&&n.stderr.length<200&&(y.value=!1),x.value=[...x.value]):t.type===`exit`?(n.success=t.data.success,n.running=!1,console.log(`[前端-控制台] 进程退出,成功:`,n.success),x.value=[...x.value]):t.type===`error`&&(n.stderr=(n.stderr||``)+`错误: ${t.data}\n`,x.value=[...x.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-DAXXjFlN.js";import{$ as n,$t 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),x.value=[...x.value]):t.type===`stdout`?(r.stdout=(r.stdout||``)+V(t.data),console.log(`[前端-自定义] 当前stdout总长度:`,r.stdout.length,`内容预览:`,r.stdout.substring(0,100)),y.value&&r.stdout.length<200&&(y.value=!1),x.value=[...x.value]):t.type===`stderr`?(r.stderr=(r.stderr||``)+V(t.data),console.log(`[前端-自定义] 当前stderr总长度:`,r.stderr.length),y.value&&r.stderr.length<200&&(y.value=!1),x.value=[...x.value]):t.type===`exit`?(r.success=t.data.success,r.running=!1,console.log(`[前端-自定义] 进程退出,成功:`,r.success),x.value=[...x.value]):t.type===`error`&&(r.stderr=(r.stderr||``)+`错误: ${t.data}\n`,x.value=[...x.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||``)+V(e.data):e.type===`stderr`?r.stderr=(r.stderr||``)+V(e.data):e.type===`exit`&&(r.success=e.data.success,r.running=!1)}catch(e){console.warn(`解析剩余SSE数据失败:`,e)}x.value=[...x.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,st(n)&&(await s.fetchStatus(),await s.fetchLog())}}async function dt(){let e=_.value.trim();!e||y.value||(_.value=``,await ft(e))}async function ft(e,t=h.value){y.value=!0;let n=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,r={id:++w,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0,sessionId:n,isInteractive:!0,stdinInput:``};if(x.value.unshift(r),!m.value||!m.value.connected){H.error(`Socket 连接未建立,无法执行交互式命令`),y.value=!1,r.running=!1,r.stderr=`Socket 连接未建立`;return}m.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),x.value=[...x.value])},a=e=>{e.sessionId===n&&(r.stdout=(r.stdout||``)+V(e.data),y.value=!1,x.value=[...x.value])},o=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+V(e.data),y.value=!1,x.value=[...x.value])},s=e=>{e.sessionId===n&&(r.success=e.success,r.running=!1,console.log(`[交互式] 进程退出,成功:`,r.success),x.value=[...x.value],m.value?.off(`interactive_process_id`,i),m.value?.off(`interactive_stdout`,a),m.value?.off(`interactive_stderr`,o),m.value?.off(`interactive_exit`,s),m.value?.off(`interactive_error`,c))},c=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+`错误: ${e.error}\n`,r.running=!1,r.success=!1,x.value=[...x.value],m.value?.off(`interactive_process_id`,i),m.value?.off(`interactive_stdout`,a),m.value?.off(`interactive_stderr`,o),m.value?.off(`interactive_exit`,s),m.value?.off(`interactive_error`,c))};m.value.on(`interactive_process_id`,i),m.value.on(`interactive_stdout`,a),m.value.on(`interactive_stderr`,o),m.value.on(`interactive_exit`,s),m.value.on(`interactive_error`,c),y.value=!1}function pt(e){let t=e.stdinInput?.trim();if(!(!t||!e.sessionId)){if(!m.value||!m.value.connected){H.error(`Socket 连接未建立`);return}console.log(`[交互式] 发送 stdin 输入:`,t),m.value.emit(`interactive_stdin_${e.sessionId}`,{input:t}),e.stdinInput=``,x.value=[...x.value]}}function mt(e){if(!e.sessionId||!e.running){H.warning(`命令已经结束`);return}if(!m.value||!m.value.connected){H.error(`Socket 连接未建立`);return}console.log(`[交互式] 停止命令:`,e.sessionId),m.value.emit(`interactive_stop_${e.sessionId}`),e.running=!1,x.value=[...x.value]}C(Oe,e=>{e&&Ue(!0)});function ht(){let e=`http://localhost:${f}`;console.log(`[控制台] 连接到 Socket.IO:`,e),m.value=yt(e,{transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1e3,reconnectionAttempts:5}),m.value.on(`connect`,()=>{console.log(`[控制台] Socket.IO 已连接`)}),m.value.on(`disconnect`,()=>{console.log(`[控制台] Socket.IO 已断开`)}),m.value.on(`connect_error`,e=>{console.error(`[控制台] Socket.IO 连接错误:`,e)})}let $=()=>{Oe.value&&we()},bt=()=>{document.visibilityState===`visible`&&Oe.value&&(console.log(`[页面可见性] 标签页已激活,刷新终端会话状态`),Ue(!0))},St=()=>{Oe.value&&(console.log(`[窗口焦点] 浏览器窗口已激活,刷新终端会话状态`),Ue(!0))};te(async()=>{try{let e=await(await fetch(`/api/current_directory`)).json();h.value=e?.directory||``}catch{}ht(),await o.loadConfig(!1),await we(),await Pe(),document.addEventListener(`visibilitychange`,bt),window.addEventListener(`focus`,St),window.addEventListener(`zen-gitsync:after-quick-push-success`,l),window.addEventListener(`zen-gitsync:terminal-session-created`,$)}),le(()=>{document.removeEventListener(`visibilitychange`,bt),window.removeEventListener(`focus`,St),window.removeEventListener(`zen-gitsync:after-quick-push-success`,l),window.removeEventListener(`zen-gitsync:terminal-session-created`,$),m.value&&=(m.value.disconnect(),null),Ge()}),S(()=>{Ge()}),ae(()=>{ke.value>0&&(Ue(!0),Ke())});let Ct={CustomCommandManager:n,ProjectStartupButton:r,FlowOrchestrationWorkspace:i,FlowExecutionViewer:a,configStore:o,gitStore:s,terminalSessionsStore:c,handleAfterQuickPushSuccessEvent:l,runWorkflow:u,executeFlow:d,backendPort:f,socket:m,currentDirectory:h,consoleInput:_,consoleRunning:y,orchestrationPaused:b,consoleHistory:x,get consoleIdCounter(){return w},set consoleIdCounter(e){w=e},clearConsoleHistory:T,continueAfterTerminal:E,stopAfterTerminal:ne,continueUserConfirm:re,stopUserConfirm:ie,orchestrationSteps:O,currentStepIndex:oe,executionFlowData:se,showExecutionFlowPanel:ce,currentExecutingNodeId:k,executedNodeIds:A,executedEdgeIds:j,failedNodeIds:M,currentOrchestrationName:ue,currentOrchestrationId:N,waitingForTerminalConfirm:de,waitingStepName:P,get terminalConfirmResolve(){return fe},set terminalConfirmResolve(e){fe=e},waitingForUserConfirm:pe,waitingConfirmMessage:F,get userConfirmResolve(){return I},set userConfirmResolve(e){I=e},waitingForUserInput:me,waitingUserInputTitle:he,userInputParams:L,userInputValues:R,get userInputResolve(){return z},set userInputResolve(e){z=e},userInputDialogVisible:ve,confirmUserInput:ye,cancelUserInput:B,ansiToHtml:V,isFullscreen:be,useTerminal:xe,terminalSessions:Se,terminalSessionsLoading:Ce,loadTerminalSessions:we,restartTerminalSession:Te,deleteTerminalSession:Ee,upsertTerminalSession:De,showTerminalSessions:Oe,terminalSessionsCount:ke,startupAutoRunTriggered:Ae,sleep:je,waitForSocketConnected:U,runStartupCommandById:Me,runStartupWorkflow:Ne,runAfterQuickPushAction:W,autoRunProjectStartupItems:Pe,clampPercent:Ie,splitPercent:Re,splitterRef:Be,getSplitterWidth:K,updateSplitFromDom:Ve,panelSize:He,loadTerminalSessionsStatus:Ue,TERMINAL_POLL_INTERVAL_MS:ig,get terminalPollTimer(){return We},set terminalPollTimer(e){We=e},stopTerminalPolling:Ge,startTerminalPolling:Ke,getLastDirName:Je,commandManagerVisible:Xe,flowOrchestrationVisible:Ze,runConsoleCommand:Qe,runConsoleCommandWithCmd:$e,closeConsoleRecord:q,rerunConsoleRecord:et,toggleCommandOutput:tt,stopCommand:Y,openCommandManager:nt,openFlowOrchestrationWorkspace:X,scrollToCurrentStep:rt,isGitCommand:st,extractVersionFromOutput:Z,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 at},get VideoPlay(){return _e},get Loading(){return p},get Close(){return qe},get Position(){return g},get Monitor(){return Le},get Document(){return Ye},get Timer(){return ee},get Ticket(){return v},get Delete(){return ze},get RefreshRight(){return ct},get Folder(){return ot},SvgIcon:gt,IconButton:_t,CommonDialog:vt,get $t(){return Q}};return Object.defineProperty(Ct,"__isScriptSetup",{enumerable:!1,value:!0}),Ct}}),og={class:`console-header`},sg={class:`header-left`},cg={class:`console-title`},lg={class:`header-actions`},ug={key:0,class:`execution-controls`},dg={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},fg={class:`console-content`},pg={class:`termial-session`},mg={key:0,class:`terminal-sessions-panel`},hg={class:`terminal-sessions-header`},gg={class:`terminal-sessions-title`},_g={class:`terminal-sessions-count`},vg={class:`terminal-sessions-actions`},yg={class:`terminal-sessions-body`},bg={key:0,class:`terminal-sessions-empty`},xg={key:1,class:`terminal-sessions-list`},Sg={class:`terminal-session-main`},Cg=[`title`],wg={class:`terminal-session-pid`},Tg={class:`terminal-session-meta`},Eg={class:`terminal-session-dir`},Dg={class:`terminal-session-actions`},Og={key:1,class:`terminal-sessions-collapsed`},kg={class:`console-content-main`},Ag={key:0,class:`orchestration-flow-panel`},jg={class:`flow-panel-header`},Mg={class:`flow-panel-title`},Ng={key:1,class:`orchestration-steps-panel`},Pg={class:`steps-header`},Fg={class:`steps-title`},Ig={key:0,class:`steps-orchestration`},Lg={key:0,class:`steps-list`},Rg={class:`step-indicator`},zg={key:4,class:`step-number`},Bg={class:`step-content`},Vg={class:`step-header`},Hg={key:0,class:`step-terminal-tag`,title:`终端执行`},Ug={key:1,class:`step-disabled-tag`},Wg={class:`step-name`},Gg={key:1,class:`terminal-waiting-panel`},Kg={class:`waiting-content`},qg={class:`waiting-text`},Jg={class:`waiting-desc`},Yg={class:`waiting-actions`},Xg={key:2,class:`terminal-waiting-panel user-confirm-panel`},Zg={class:`waiting-content`},Qg={class:`waiting-text`},$g={class:`waiting-desc`},e_={class:`waiting-actions`},t_={class:`console-input-row`},n_=[`title`],r_={key:2,class:`console-output`},i_=[`onClick`],a_={class:`cmd-line`},o_={class:`cmd-text`},s_=[`title`],c_={class:`ts`},l_={class:`cmd-actions`},u_={key:0,class:`output-content`},d_=[`innerHTML`],f_=[`innerHTML`],p_={key:0,class:`stdin-input-row`},m_={class:`user-input-dialog-content`},h_={key:0,class:`user-input-empty`},g_={key:1,class:`user-input-form`},__={class:`user-input-label`},v_={key:0,class:`required`};function y_(e,t,n,r,a,o){let c=i,l=_,u=R,d=we,f=I,p=$e,m=We;return Z(),X(Y,null,[B(` 自定义指令执行控制台 `),W(`div`,{class:K([`command-console`,{fullscreen:r.isFullscreen}])},[B(` 标题栏 `),W(`div`,og,[W(`div`,sg,[t[16]||=W(`span`,{class:`console-window-dots`},[W(`span`,{class:`dot dot-red`}),W(`span`,{class:`dot dot-yellow`}),W(`span`,{class:`dot dot-green`})],-1),W(`span`,cg,V(r.$t(`@CF05E:自定义指令执行`)),1)]),W(`div`,lg,[B(` 编排暂停/继续按钮 `),r.consoleRunning?(Z(),X(`div`,ug,[s(l,{content:r.orchestrationPaused?`继续执行`:`暂停执行`,placement:`bottom`},{default:L(()=>[s(c,{type:r.orchestrationPaused?`success`:`warning`,size:`small`,onClick:t[0]||=e=>r.orchestrationPaused=!r.orchestrationPaused,class:`pause-btn`},{icon:L(()=>[r.orchestrationPaused?(Z(),U(r.VideoPlay,{key:0})):(Z(),U(r.Loading,{key:1}))]),default:L(()=>[M(` `+V(r.orchestrationPaused?`继续`:`暂停`),1)]),_:1},8,[`type`])]),_:1},8,[`content`]),s(l,{content:`停止执行`,placement:`bottom`},{default:L(()=>[s(c,{type:`danger`,size:`small`,onClick:t[1]||=e=>{r.consoleRunning=!1,r.orchestrationPaused=!1,r.currentStepIndex=-1,r.orchestrationSteps=[]},class:`stop-btn`},{icon:L(()=>[s(r.Close)]),default:L(()=>[t[17]||=M(` 停止 `,-1)]),_:1})]),_:1})])):B(`v-if`,!0),r.consoleHistory.length>0?(Z(),U(r.IconButton,{key:1,tooltip:`清空执行历史`,"hover-color":`var(--color-danger)`,onClick:r.clearConsoleHistory,"custom-class":`clear-history-btn`},{default:L(()=>[s(u,{size:18},{default:L(()=>[s(r.Delete)]),_:1})]),_:1})):B(`v-if`,!0),s(r.IconButton,{tooltip:r.$t(`@CF05E:使用终端执行`),active:r.useTerminal,onClick:t[2]||=e=>r.useTerminal=!r.useTerminal,"custom-class":`terminal-toggle-btn`},{default:L(()=>[s(u,{size:20},{default:L(()=>[s(r.Monitor)]),_:1})]),_:1},8,[`tooltip`,`active`]),s(r.IconButton,{tooltip:r.$t(`@CF05E:自定义命令管理`),"hover-color":`var(--color-success)`,onClick:r.openCommandManager,"custom-class":`command-manager-btn`},{default:L(()=>[s(r.SvgIcon,{"icon-class":`command-list`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),s(r.ProjectStartupButton,{onExecuteCommand:r.executeCustomCommand,onExecuteWorkflow:t[3]||=e=>r.runWorkflow(e)}),s(r.IconButton,{tooltip:r.$t(`@ORCH:可视化编排`),"hover-color":`#9c27b0`,onClick:r.openFlowOrchestrationWorkspace,"custom-class":`flow-orchestrator-btn`},{default:L(()=>[s(r.SvgIcon,{"icon-class":`workflow`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),s(r.IconButton,{tooltip:r.isFullscreen?r.$t(`@CF05E:退出全屏`):r.$t(`@CF05E:全屏显示`),onClick:t[4]||=e=>r.isFullscreen=!r.isFullscreen},{default:L(()=>[r.isFullscreen?(Z(),X(`svg`,dg,[...t[18]||=[W(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])):(Z(),U(u,{key:0},{default:L(()=>[s(r.FullScreen)]),_:1}))]),_:1},8,[`tooltip`])])]),B(` 内容区域 `),W(`div`,fg,[s(p,{ref:`splitterRef`,layout:`horizontal`,style:{height:`100%`},onResize:r.updateSplitFromDom,onResizeEnd:r.updateSplitFromDom},{default:L(()=>[s(d,{size:r.panelSize,"onUpdate:size":t[7]||=e=>r.panelSize=e,min:`15%`,max:`85%`},{default:L(()=>[W(`div`,pg,[r.showTerminalSessions?(Z(),X(`div`,mg,[W(`div`,hg,[W(`div`,gg,[W(`span`,null,V(r.$t(`@CMDCON:终端会话`)),1),W(`span`,_g,`(`+V(r.terminalSessionsCount)+`)`,1)]),W(`div`,vg,[s(l,{content:r.$t(`@CMDCON:刷新`),placement:`bottom`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:r.loadTerminalSessions,disabled:r.terminalSessionsLoading},{default:L(()=>[s(u,null,{default:L(()=>[s(r.RefreshRight)]),_:1})]),_:1},8,[`onClick`,`disabled`])]),_:1},8,[`content`]),s(l,{content:r.$t(`@CMDCON:隐藏`),placement:`bottom`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:t[5]||=e=>r.showTerminalSessions=!1},{default:L(()=>[s(u,null,{default:L(()=>[s(r.ArrowDown)]),_:1})]),_:1})]),_:1},8,[`content`])])]),z((Z(),X(`div`,yg,[r.terminalSessions.length===0?(Z(),X(`div`,bg,V(r.$t(`@CMDCON:暂无终端会话`)),1)):(Z(),X(`div`,xg,[(Z(!0),X(Y,null,F(r.terminalSessions,e=>(Z(),X(`div`,{key:e.id,class:`terminal-session-item`},[W(`div`,Sg,[W(`div`,{class:`terminal-session-command`,title:e.command},[M(V(e.command),1),W(`span`,wg,` PID: `+V(e.pid??`-`),1)],8,Cg),W(`div`,Tg,[e.workingDirectory?(Z(),U(l,{key:0,content:e.workingDirectory,placement:`top`},{default:L(()=>[W(`span`,Eg,[s(u,{class:`cmd-dir-icon`},{default:L(()=>[s(r.Folder)]),_:1}),M(` `+V(r.getLastDirName(e.workingDirectory)),1)])]),_:2},1032,[`content`])):B(`v-if`,!0)])]),W(`div`,Dg,[s(l,{content:r.$t(`@CMDCON:重新启动`),placement:`top`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:t=>r.restartTerminalSession(e)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.RefreshRight)]),_:1})]),_:1},8,[`onClick`])]),_:2},1032,[`content`]),s(l,{content:r.$t(`@CMDCON:删除`),placement:`top`},{default:L(()=>[s(c,{text:``,size:`small`,type:`danger`,onClick:t=>r.deleteTerminalSession(e)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Delete)]),_:1})]),_:1},8,[`onClick`])]),_:2},1032,[`content`])])]))),128))]))])),[[m,r.terminalSessionsLoading]])])):(Z(),X(`div`,Og,[s(c,{text:``,size:`small`,onClick:t[6]||=e=>r.showTerminalSessions=!0},{default:L(()=>[M(V(r.$t(`@CMDCON:显示终端会话`,{count:r.terminalSessionsCount})),1)]),_:1})]))])]),_:1},8,[`size`]),s(d,{min:`15%`,max:`85%`},{default:L(()=>[W(`div`,kg,[B(` 执行画布(只读,高亮执行路径) `),r.executionFlowData&&r.showExecutionFlowPanel?(Z(),X(`div`,Ag,[W(`div`,jg,[W(`div`,Mg,V(r.currentOrchestrationName||r.currentOrchestrationId),1),s(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:L(()=>[s(u,{size:18},{default:L(()=>[s(r.Close)]),_:1})]),_:1},8,[`tooltip`])]),s(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`])])):B(`v-if`,!0),B(` 编排步骤列表 `),r.orchestrationSteps.length>0||r.waitingForTerminalConfirm||r.waitingForUserConfirm?(Z(),X(`div`,Ng,[W(`div`,Pg,[W(`span`,Fg,[t[19]||=M(` 执行步骤 `,-1),r.currentOrchestrationName||r.currentOrchestrationId?(Z(),X(`span`,Ig,` - `+V(r.currentOrchestrationName||r.currentOrchestrationId),1)):B(`v-if`,!0),M(` (`+V(r.currentStepIndex+1)+`/`+V(r.orchestrationSteps.length)+`) `,1)])]),r.orchestrationSteps.length>0?(Z(),X(`div`,Lg,[(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}])},[W(`div`,Rg,[n<r.currentStepIndex?(Z(),U(u,{key:0,class:`step-icon-check`},{default:L(()=>[...t[20]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[W(`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(),U(u,{key:1,class:`step-type-icon`},{default:L(()=>[s(r.Timer)]),_:1})):e.type===`version`?(Z(),U(u,{key:2,class:`step-type-icon`},{default:L(()=>[s(r.Ticket)]),_:1})):e.type===`command`?(Z(),U(u,{key:3,class:`step-type-icon`},{default:L(()=>[s(r.Document)]),_:1})):(Z(),X(`span`,zg,V(n+1),1))]),W(`div`,Bg,[W(`div`,Vg,[W(`span`,{class:K([`step-type-tag`,`type-${e.type}`])},V(e.type===`command`?`命令`:e.type===`wait`?`等待`:e.type===`version`?`版本`:e.type===`user_input`?`输入`:e.type),3),e.useTerminal?(Z(),X(`span`,Hg,[s(u,{class:`step-terminal-icon`},{default:L(()=>[s(r.Monitor)]),_:1}),t[21]||=M(` 终端 `,-1)])):B(`v-if`,!0),e.enabled===!1?(Z(),X(`span`,Ug,`已禁用`)):B(`v-if`,!0)]),W(`span`,Wg,V(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))])):B(`v-if`,!0),B(` 终端命令等待确认提示 `),r.waitingForTerminalConfirm?(Z(),X(`div`,Gg,[W(`div`,Kg,[s(u,{class:`waiting-icon`},{default:L(()=>[s(r.Monitor)]),_:1}),W(`div`,qg,[t[24]||=W(`div`,{class:`waiting-title`},`等待终端命令完成`,-1),W(`div`,Jg,[t[22]||=M(` 终端命令 "`,-1),W(`strong`,null,V(r.waitingStepName),1),t[23]||=M(`" 已在新窗口中打开,请在终端中查看命令执行结果 `,-1)])])]),W(`div`,Yg,[s(c,{type:`primary`,onClick:r.continueAfterTerminal},{default:L(()=>[s(u,null,{default:L(()=>[s(r.VideoPlay)]),_:1}),t[25]||=M(` 继续下一步 `,-1)]),_:1}),s(c,{type:`danger`,plain:``,onClick:r.stopAfterTerminal},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Close)]),_:1}),t[26]||=M(` 停止执行 `,-1)]),_:1})])])):B(`v-if`,!0),B(` 用户确认节点等待提示 `),r.waitingForUserConfirm?(Z(),X(`div`,Xg,[W(`div`,Zg,[s(u,{class:`waiting-icon`,style:{color:`#ff9800`}},{default:L(()=>[...t[27]||=[M(`✋`,-1)]]),_:1}),W(`div`,Qg,[t[28]||=W(`div`,{class:`waiting-title`},`用户确认节点`,-1),W(`div`,$g,V(r.waitingConfirmMessage),1)])]),W(`div`,e_,[s(c,{type:`primary`,onClick:r.continueUserConfirm},{default:L(()=>[s(u,null,{default:L(()=>[s(r.VideoPlay)]),_:1}),t[29]||=M(` 继续执行 `,-1)]),_:1}),s(c,{type:`danger`,plain:``,onClick:r.stopUserConfirm},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Close)]),_:1}),t[30]||=M(` 取消执行 `,-1)]),_:1})])])):B(`v-if`,!0)])):B(`v-if`,!0),B(` 输入区 `),W(`div`,t_,[W(`span`,{class:`prompt`,title:r.$t(`@CF05E:当前路径`)},V(r.currentDirectory)+` >`,9,n_),s(f,{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(Re(e=>r.useTerminal?r.runConsoleCommand():r.runInteractiveCommand(),[`prevent`]),[`enter`]),disabled:r.consoleRunning,clearable:``},null,8,[`modelValue`,`placeholder`,`disabled`]),s(r.IconButton,{disabled:r.consoleRunning,"hover-color":`var(--color-primary)`,onClick:t[11]||=e=>r.useTerminal?r.runConsoleCommand():r.runInteractiveCommand()},{default:L(()=>[r.consoleRunning?(Z(),U(u,{key:0,class:`is-loading`},{default:L(()=>[s(r.Loading)]),_:1})):(Z(),U(u,{key:1},{default:L(()=>[s(r.VideoPlay)]),_:1}))]),_:1},8,[`disabled`])]),B(` 命令历史输出 `),r.consoleHistory.length?(Z(),X(`div`,r_,[(Z(!0),X(Y,null,F(r.consoleHistory,e=>(Z(),X(`div`,{key:e.id,class:`console-record`},[W(`div`,{class:`cmd-header cursor-pointer`,onClick:t=>r.toggleCommandOutput(e)},[W(`div`,a_,[t[31]||=W(`span`,{class:`cmd-prefix`},`>`,-1),W(`span`,o_,V(e.command),1),e.directory?(Z(),X(`span`,{key:0,class:`cmd-dir`,title:e.directory},[s(u,{class:`cmd-dir-icon`},{default:L(()=>[s(r.Folder)]),_:1}),M(` `+V(e.directory),1)],8,s_)):B(`v-if`,!0),e.running?(Z(),U(u,{key:1,class:`running-icon is-loading`,color:`var(--color-primary)`},{default:L(()=>[s(r.Loading)]),_:1})):B(`v-if`,!0),W(`span`,c_,V(e.ts),1)]),W(`div`,l_,[s(l,{content:`重新执行`,placement:`top`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:Re(t=>r.rerunConsoleRecord(e),[`stop`]),class:`rerun-btn`},{default:L(()=>[s(u,null,{default:L(()=>[s(r.RefreshRight)]),_:1})]),_:1},8,[`onClick`])]),_:2},1024),e.running?(Z(),U(l,{key:0,content:`停止命令`,placement:`top`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:Re(t=>e.isInteractive?r.stopInteractiveCommand(e):r.stopCommand(e),[`stop`]),class:`stop-btn`,type:`danger`},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Close)]),_:1})]),_:1},8,[`onClick`])]),_:2},1024)):B(`v-if`,!0),s(c,{text:``,size:`small`,onClick:Re(t=>r.toggleCommandOutput(e),[`stop`]),disabled:!e.stdout&&!e.stderr,class:`toggle-output-btn`},{default:L(()=>[s(u,{class:K({"rotate-icon":!e.expanded})},{default:L(()=>[s(r.ArrowDown)]),_:1},8,[`class`])]),_:2},1032,[`onClick`,`disabled`])])],8,i_),s(et,{name:`output-slide`},{default:L(()=>[e.expanded&&(e.stdout||e.stderr)?(Z(),X(`div`,u_,[e.stdout?(Z(),X(`pre`,{key:0,class:`stdout`,innerHTML:e.stdout},null,8,d_)):B(`v-if`,!0),e.stderr?(Z(),X(`pre`,{key:1,class:`stderr`,innerHTML:e.stderr},null,8,f_)):B(`v-if`,!0)])):B(`v-if`,!0)]),_:2},1024),B(` 每个交互式命令独立的 stdin 输入框 `),e.isInteractive&&e.running?(Z(),X(`div`,p_,[s(u,{class:`stdin-icon`},{default:L(()=>[s(r.Position)]),_:1}),s(f,{modelValue:e.stdinInput,"onUpdate:modelValue":t=>e.stdinInput=t,class:`stdin-input`,placeholder:`输入响应内容(如密码、确认等),按回车发送`,onKeydown:Te(Re(t=>r.sendStdinInput(e),[`prevent`]),[`enter`]),clearable:``,size:`small`},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),s(c,{type:`success`,onClick:t=>r.sendStdinInput(e),size:`small`},{default:L(()=>[...t[32]||=[M(`发送`,-1)]]),_:1},8,[`onClick`])])):B(`v-if`,!0)]))),128))])):B(`v-if`,!0)])]),_:1})]),_:1},512)])],2),B(` 自定义命令管理弹窗 `),s(r.CustomCommandManager,{visible:r.commandManagerVisible,"onUpdate:visible":t[12]||=e=>r.commandManagerVisible=e,fullscreen:!0,onExecuteCommand:r.executeCustomCommand},null,8,[`visible`]),B(` 可视化编排工作台(基于 vue-flow) `),s(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`]),s(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:L(()=>[W(`div`,m_,[r.userInputParams.length===0?(Z(),X(`div`,h_,V(r.$t(`@UINPUT:暂无输入参数`)),1)):(Z(),X(`div`,g_,[(Z(!0),X(Y,null,F(r.userInputParams,e=>(Z(),X(`div`,{key:e.name,class:`user-input-row`},[W(`div`,__,[e.required?(Z(),X(`span`,v_,`*`)):B(`v-if`,!0),M(` `+V(e.name),1)]),s(f,{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 b_=$(ag,[[`render`,y_],[`__scopeId`,`data-v-f56c993a`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/CommandConsole.vue`]]),x_=N({__name:`ConsoleView`,setup(e,{expose:t}){t();let n={CustomCommandsPanel:$h,CommandConsole:b_};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),S_={class:`console-view`},C_={class:`console-view__sidebar`},w_={class:`console-view__terminal`};function T_(e,t,n,r,i,a){return Z(),X(`div`,S_,[B(` 左侧:自定义命令快捷面板(手风琴竖向列表,折叠后只留 header 竖条) `),W(`aside`,C_,[s(r.CustomCommandsPanel)]),B(` 右侧:命令控制台(终端 + 自定义指令管理),占满剩余空间 `),W(`main`,w_,[s(r.CommandConsole)])])}var E_=$(x_,[[`render`,T_],[`__scopeId`,`data-v-862e14cf`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/views/ConsoleView.vue`]]),D_=`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`,O_=N({__name:`App`,setup(e,{expose:t}){t();let n=it(()=>wt(()=>import(`./CommitForm-C7FmI0Sl.js`),__vite__mapDeps([24,1,4,5,6,0,2,7,8,11,9,10,12,13,25]))),r=it(()=>wt(()=>import(`./LogList-DYoGtOou.js`),__vite__mapDeps([26,1,4,5,8,6,0,2,7,11,9,10,12,27]))),a=it(()=>wt(()=>import(`./RemoteRepoCard-DHsJwTEX.js`),__vite__mapDeps([28,1,4,5,8,6,0,2,7,9,10,29]))),o=it(()=>wt(()=>import(`./AppVersionBadge-BTznOVSJ.js`),__vite__mapDeps([30,1,4,5,8,6,0,2,7,31]))),s=it(()=>wt(()=>import(`./BranchSelector-BISqgXoZ.js`),__vite__mapDeps([32,1,4,5,8,6,0,2,7,9,10,11,12,33]))),c={loadingComponent:Tm,delay:200},l=it({loader:()=>wt(()=>import(`./EditorView-CSWy4q7G.js`),__vite__mapDeps([34,1,4,5,6,0,2,7,8,13,35,36,37])),...c}),u=it({loader:()=>wt(()=>import(`./SourceMapView-DskfUia5.js`),__vite__mapDeps([38,1,4,5,8,6,0,2,7,13,16,17,20,39])),...c}),d=it({loader:()=>wt(()=>import(`./WorkbenchView-1q0xaqyV.js`),__vite__mapDeps([40,1,4,5,6,0,2,7,8,13,41])),...c}),f=it({loader:()=>wt(()=>import(`./MonitorView-CSAqU7oV.js`),__vite__mapDeps([42,1,4,5,6,0,2,7,8,43])),...c}),p=it({loader:()=>wt(()=>import(`./MindmapView-CU3tXgbR.js`),__vite__mapDeps([44,1,4,5,6,0,2,7,8,13,35,36,45])),...c}),m=J(``),g=J(null),v=Ht(),y=xt(),b=bt(),x=pp(),S=Wt(),w=J(!1),T=G(()=>y.currentDirectory),ee=G(()=>{let e=y.models.find(e=>e.isDefault);return e?e.name||e.model:``});function E(){let e=Ot(T.value);document.title=`${e} - Zen GitSync`}C(T,()=>{E()},{immediate:!0});function ne(){y.config&&(m.value=`${Q(`@F13B4:默认提交信息: `)}${y.config.defaultCommitMessage}`)}async function re(){try{let e=await(await fetch(`/api/current_directory`)).json();return y.setCurrentDirectory(e.directory||Q(`@F13B4:未知目录`)),e}catch(e){return console.error(`获取当前目录失败:`,e),{directory:Q(`@F13B4:未知目录`),isGitRepo:!1}}}te(async()=>{console.log(Q(`@F13B4:---------- 页面初始化开始 ----------`)),Wp().start(),x.start(),S.startPolling();try{let e=await re();y.isLoaded||await y.loadConfig(),ne(),v.isGitRepo=e.isGitRepo===!0,v.lastCheckedTime=Date.now(),v.isGitRepo?(await Promise.all([v.getCurrentBranch(!0),v.getAllBranches(),v.getUserInfo(),v.getRemoteUrl(),v.getBranchStatus(!0)]),setTimeout(()=>{v.bootFetch().catch(e=>{console.warn(`[App] 启动静默 fetch 异常(已忽略):`,e)})},3e3)):H.warning(Q(`@F13B4:当前目录不是Git仓库,部分功能将不可用`))}catch(e){console.error(`初始化失败:`,e)}finally{w.value=!0,console.log(Q(`@F13B4:---------- 页面初始化完成 ----------`)),setTimeout(()=>{ge()},100)}}),h(()=>{x.stop(),S.stopPolling(),Wp().stop()});function O(){ge()}window.addEventListener(`ui-layout-reset`,O),h(()=>{window.removeEventListener(`ui-layout-reset`,O)}),C(()=>v.isGitRepo,()=>{D(()=>ge())});function ae(){g.value&&g.value.refreshStatus()}let oe=J(`git`);C(oe,e=>{e===`git`&&g.value&&v.isGitRepo&&Promise.all([v.fetchStatus(),v.getBranchStatus()]).catch(e=>console.error(`切换到Git视图刷新失败:`,e))});let se=J(!1);function k(){se.value=!0}let{theme:le}=Gn(),A=!1,j=!1,M=0,ue=0,N=``,de=``,P=null,F=null,I=null;function me(){let e=document.querySelector(`.grid-layout`);if(!e||!v.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]));y.ui.layout={...y.ui.layout,leftRatio:r,topRatio:a},console.log(`${Q(`@F13B4:布局比例已保存 - 左侧: `)}${(r*100).toFixed(0)}${Q(`@F13B4:%, 上方: `)}${(a*100).toFixed(0)}%`)}}function ge(){let e=document.querySelector(`.grid-layout`);if(!e)return;if(!v.isGitRepo){e.style.gridTemplateRows=``,ve();return}let t=y.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=``;ve()}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 _e=J(25),z=J(50);function ve(){let e=L();_e.value=e.left,z.value=e.top}function ye(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`,ve(),me()}function B(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`,ve(),me()}function V(e){P=e,F===null&&(F=requestAnimationFrame(()=>{F=null,xe()}))}function be(e){A=!0,M=e.clientX;let t=document.querySelector(`.grid-layout`);N=getComputedStyle(t).gridTemplateColumns,document.getElementById(`v-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,V),document.addEventListener(`mouseup`,Se),e.preventDefault()}function xe(){if(!A)return;let e=P;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientX-M,r=N.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 Se(){A=!1,document.getElementById(`v-resizer`)?.classList.remove(`active`),F!==null&&(cancelAnimationFrame(F),F=null),document.removeEventListener(`mousemove`,V),document.removeEventListener(`mouseup`,Se),me()}function Ce(e){j=!0,ue=e.clientY;let t=document.querySelector(`.grid-layout`);de=getComputedStyle(t).gridTemplateRows,document.getElementById(`h-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,we),document.addEventListener(`mouseup`,Ee),e.preventDefault()}function we(e){P=e,I===null&&(I=requestAnimationFrame(()=>{I=null,Te()}))}function Te(){if(!j)return;let e=P;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientY-ue,r=de.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 Ee(){j=!1,document.getElementById(`h-resizer`)?.classList.remove(`active`),I!==null&&(cancelAnimationFrame(I),I=null),document.removeEventListener(`mousemove`,we),document.removeEventListener(`mouseup`,Ee),me()}let De={CommitForm:n,LogList:r,RemoteRepoCard:a,AppVersionBadge:o,BranchSelector:s,asyncOpts:c,EditorView:l,SourceMapView:u,WorkbenchView:d,MonitorView:f,MindmapView:p,configInfo:m,gitStatusRef:g,gitStore:v,configStore:y,localeStore:b,instancesStore:x,toolsStore:S,initCompleted:w,currentDirectory:T,defaultModelName:ee,updateDocumentTitle:E,updateConfigInfo:ne,loadCurrentDirectory:re,handleUiLayoutReset:O,handleBranchChanged:ae,activeView:oe,userSettingsDialogVisible:se,openUserSettingsDialog:k,isDarkTheme:le,get isVResizing(){return A},set isVResizing(e){A=e},get isHResizing(){return j},set isHResizing(e){j=e},get initialX(){return M},set initialX(e){M=e},get initialY(){return ue},set initialY(e){ue=e},get initialGridTemplateColumns(){return N},set initialGridTemplateColumns(e){N=e},get initialGridTemplateRows(){return de},set initialGridTemplateRows(e){de=e},get lastMouseEvent(){return P},set lastMouseEvent(e){P=e},get vResizeRafId(){return F},set vResizeRafId(e){F=e},get hResizeRafId(){return I},set hResizeRafId(e){I=e},saveLayoutRatios:me,loadLayoutRatios:ge,readGridPercents:L,gridLeftPercent:_e,gridTopPercent:z,refreshGridPercents:ve,nudgeV:ye,nudgeH:B,scheduleVResize:V,startVResize:be,handleVResize:xe,stopVResize:Se,startHResize:Ce,scheduleHResize:we,handleHResize:Te,stopHResize:Ee,get $t(){return Q},GitStatus:lu,DirectorySelector:Nu,UserSettingsDialog:Kf,ActivityBar:up,InstanceSwitcher:kp,AppErrorBanner:tm,RecentProjectsList:ym,ConsoleView:E_,get ElConfigProvider(){return pe},get ElButton(){return i},get ElTooltip(){return _},get ElIcon(){return R},get Setting(){return fe},get WarningFilled(){return ce},get Sunny(){return he},get Moon(){return ie},get logo(){return D_}};return Object.defineProperty(De,"__isScriptSetup",{enumerable:!1,value:!0}),De}}),k_={class:`main-header app-header`},A_={class:`header-left`},j_={href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,class:`header-brand-link`},M_=[`src`],N_={class:`header-center`},P_={class:`header-info`},F_={key:0,class:`header-actions`},I_=[`aria-label`,`aria-pressed`],L_={id:`user-info`,class:`user-info-card`},R_={class:`user-name`},z_={class:`user-label`},B_={class:`user-warning`},V_=[`aria-label`],H_={key:0,class:`config-broken-banner`,role:`alert`,"aria-live":`polite`},U_={class:`banner-left`},W_={class:`banner-text`},G_={class:`banner-title`},K_={class:`banner-detail`},q_={key:1,class:`banner-path`},J_={class:`banner-actions`},Y_={key:0,class:`loading-container`},X_={class:`loading-card`,role:`status`,"aria-live":`polite`},Z_={class:`loading-text`},Q_={class:`loading-text__label`},$_={key:1,class:`app-body`},ev={class:`git-status-panel`},tv=[`aria-label`,`aria-valuenow`],nv={key:0,class:`commit-form-panel`},rv={key:0,class:`state-block state-block--warning user-unconfigured-card`},iv={class:`state-block__title user-unconfigured-title`},av={class:`state-block__hint user-unconfigured-desc`},ov={class:`user-unconfigured-actions`},sv={class:`user-unconfigured-divider`},cv={class:`user-unconfigured-code`},lv={key:1,class:`commit-form-panel commit-form-panel--empty`},uv=[`aria-label`,`aria-valuenow`],dv={class:`log-list-panel`},fv={class:`view-pane console-pane`},pv={class:`view-pane editor-pane`},mv={class:`view-pane source-map-pane`},hv={class:`view-pane workbench-pane`},gv={class:`view-pane monitor-pane`},_v={class:`view-pane mindmap-pane`},vv={class:`main-footer app-footer`},yv={key:0,class:`footer-model-hint`},bv={class:`footer-model-hint__label`},xv={class:`footer-model-hint__name`};function Sv(e,t,n,r,i,a){return Z(),U(r.ElConfigProvider,{locale:r.localeStore.elementPlusLocale},{default:L(()=>[B(` OPT-5: 全局网络错误横幅(header 下方置顶,不影响主区布局) `),s(r.AppErrorBanner),W(`header`,k_,[W(`div`,A_,[W(`a`,j_,[W(`img`,{src:r.logo,alt:`Zen GitSync Logo`,class:`logo`},null,8,M_),t[8]||=W(`h1`,null,`Zen GitSync`,-1)])]),W(`div`,N_,[s(r.DirectorySelector,{variant:`header`})]),W(`div`,P_,[B(` 顶部右侧动作 `),r.gitStore.isGitRepo?(Z(),X(`div`,F_,[B(` <CommandHistory /> `)])):B(`v-if`,!0),B(` 实例切换器:显示所有运行中的 GUI 项目 `),s(r.InstanceSwitcher),B(` 主题切换快捷按钮(OPT-2:原本要进设置→通用→主题 4 次点击,现在 1 次) `),s(r.ElTooltip,{content:r.isDarkTheme?r.$t(`@F13B4:切换到浅色主题`):r.$t(`@F13B4:切换到深色主题`),placement:`bottom`,effect:`dark`,"show-after":200},{default:L(()=>[W(`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()},[s(r.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:L(()=>[r.isDarkTheme?(Z(),U(r.Moon,{key:0})):(Z(),U(r.Sunny,{key:1}))]),_:1})],8,I_)]),_:1},8,[`content`]),B(` 用户信息 `),W(`div`,L_,[r.gitStore.userName?(Z(),U(r.ElTooltip,{key:0,content:r.gitStore.userEmail||r.gitStore.userName,placement:`bottom`,effect:`dark`,"show-after":200},{default:L(()=>[W(`span`,R_,V(r.gitStore.userName),1)]),_:1},8,[`content`])):(Z(),X(Y,{key:1},[W(`span`,z_,V(r.$t(`@F13B4:用户: `)),1),W(`span`,B_,V(r.$t(`@F13B4:未配置`)),1)],64)),s(r.ElTooltip,{content:r.$t(`@F13B4:用户设置`),placement:`bottom`,effect:`dark`,"show-after":200},{default:L(()=>[W(`button`,{class:`modern-btn btn-icon-28`,"aria-label":r.$t(`@F13B4:用户设置`),onClick:r.openUserSettingsDialog},[s(r.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Setting)]),_:1})],8,V_)]),_:1},8,[`content`])])])]),r.configStore.hasConfigLoadError?(Z(),X(`div`,H_,[W(`div`,U_,[s(r.ElIcon,{class:`banner-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.WarningFilled)]),_:1}),W(`div`,W_,[W(`span`,G_,V(r.$t(`@CFGERR:系统配置文件有问题`)),1),r.configStore.configLoadError?(Z(),U(r.ElTooltip,{key:0,content:r.configStore.configLoadError,placement:`bottom`,effect:`dark`,"show-after":200},{default:L(()=>[W(`span`,K_,V(r.$t(`@CFGERR:查看原因`)),1)]),_:1},8,[`content`])):B(`v-if`,!0),r.configStore.configFilePath?(Z(),X(`span`,q_,V(r.configStore.configFilePath),1)):B(`v-if`,!0)])]),W(`div`,J_,[s(r.ElButton,{size:`small`,type:`warning`,onClick:t[1]||=e=>r.configStore.openSystemConfigFile()},{default:L(()=>[M(V(r.$t(`@CFGERR:打开系统配置文件`)),1)]),_:1})])])):B(`v-if`,!0),W(`main`,{class:`main-container`,style:Me({top:r.configStore.hasConfigLoadError?`104px`:`64px`})},[r.initCompleted?(Z(),X(`div`,$_,[B(` VS Code 风格活动栏 `),s(r.ActivityBar,{activeView:r.activeView,"onUpdate:activeView":t[2]||=e=>r.activeView=e},null,8,[`activeView`]),B(` 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||``)+V(e.data):e.type===`stderr`?r.stderr=(r.stderr||``)+V(e.data):e.type===`exit`&&(r.success=e.data.success,r.running=!1)}catch(e){console.warn(`解析剩余SSE数据失败:`,e)}x.value=[...x.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,st(n)&&(await s.fetchStatus(),await s.fetchLog())}}async function dt(){let e=_.value.trim();!e||y.value||(_.value=``,await ft(e))}async function ft(e,t=h.value){y.value=!0;let n=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,r={id:++w,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0,sessionId:n,isInteractive:!0,stdinInput:``};if(x.value.unshift(r),!m.value||!m.value.connected){H.error(`Socket 连接未建立,无法执行交互式命令`),y.value=!1,r.running=!1,r.stderr=`Socket 连接未建立`;return}m.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),x.value=[...x.value])},a=e=>{e.sessionId===n&&(r.stdout=(r.stdout||``)+V(e.data),y.value=!1,x.value=[...x.value])},o=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+V(e.data),y.value=!1,x.value=[...x.value])},s=e=>{e.sessionId===n&&(r.success=e.success,r.running=!1,console.log(`[交互式] 进程退出,成功:`,r.success),x.value=[...x.value],m.value?.off(`interactive_process_id`,i),m.value?.off(`interactive_stdout`,a),m.value?.off(`interactive_stderr`,o),m.value?.off(`interactive_exit`,s),m.value?.off(`interactive_error`,c))},c=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+`错误: ${e.error}\n`,r.running=!1,r.success=!1,x.value=[...x.value],m.value?.off(`interactive_process_id`,i),m.value?.off(`interactive_stdout`,a),m.value?.off(`interactive_stderr`,o),m.value?.off(`interactive_exit`,s),m.value?.off(`interactive_error`,c))};m.value.on(`interactive_process_id`,i),m.value.on(`interactive_stdout`,a),m.value.on(`interactive_stderr`,o),m.value.on(`interactive_exit`,s),m.value.on(`interactive_error`,c),y.value=!1}function pt(e){let t=e.stdinInput?.trim();if(!(!t||!e.sessionId)){if(!m.value||!m.value.connected){H.error(`Socket 连接未建立`);return}console.log(`[交互式] 发送 stdin 输入:`,t),m.value.emit(`interactive_stdin_${e.sessionId}`,{input:t}),e.stdinInput=``,x.value=[...x.value]}}function mt(e){if(!e.sessionId||!e.running){H.warning(`命令已经结束`);return}if(!m.value||!m.value.connected){H.error(`Socket 连接未建立`);return}console.log(`[交互式] 停止命令:`,e.sessionId),m.value.emit(`interactive_stop_${e.sessionId}`),e.running=!1,x.value=[...x.value]}C(Oe,e=>{e&&Ue(!0)});function ht(){let e=`http://localhost:${f}`;console.log(`[控制台] 连接到 Socket.IO:`,e),m.value=yt(e,{transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1e3,reconnectionAttempts:5}),m.value.on(`connect`,()=>{console.log(`[控制台] Socket.IO 已连接`)}),m.value.on(`disconnect`,()=>{console.log(`[控制台] Socket.IO 已断开`)}),m.value.on(`connect_error`,e=>{console.error(`[控制台] Socket.IO 连接错误:`,e)})}let $=()=>{Oe.value&&we()},bt=()=>{document.visibilityState===`visible`&&Oe.value&&(console.log(`[页面可见性] 标签页已激活,刷新终端会话状态`),Ue(!0))},St=()=>{Oe.value&&(console.log(`[窗口焦点] 浏览器窗口已激活,刷新终端会话状态`),Ue(!0))};te(async()=>{try{let e=await(await fetch(`/api/current_directory`)).json();h.value=e?.directory||``}catch{}ht(),await o.loadConfig(!1),await we(),await Pe(),document.addEventListener(`visibilitychange`,bt),window.addEventListener(`focus`,St),window.addEventListener(`zen-gitsync:after-quick-push-success`,l),window.addEventListener(`zen-gitsync:terminal-session-created`,$)}),le(()=>{document.removeEventListener(`visibilitychange`,bt),window.removeEventListener(`focus`,St),window.removeEventListener(`zen-gitsync:after-quick-push-success`,l),window.removeEventListener(`zen-gitsync:terminal-session-created`,$),m.value&&=(m.value.disconnect(),null),Ge()}),S(()=>{Ge()}),ae(()=>{ke.value>0&&(Ue(!0),Ke())});let Ct={CustomCommandManager:n,ProjectStartupButton:r,FlowOrchestrationWorkspace:i,FlowExecutionViewer:a,configStore:o,gitStore:s,terminalSessionsStore:c,handleAfterQuickPushSuccessEvent:l,runWorkflow:u,executeFlow:d,backendPort:f,socket:m,currentDirectory:h,consoleInput:_,consoleRunning:y,orchestrationPaused:b,consoleHistory:x,get consoleIdCounter(){return w},set consoleIdCounter(e){w=e},clearConsoleHistory:T,continueAfterTerminal:E,stopAfterTerminal:ne,continueUserConfirm:re,stopUserConfirm:ie,orchestrationSteps:O,currentStepIndex:oe,executionFlowData:se,showExecutionFlowPanel:ce,currentExecutingNodeId:k,executedNodeIds:A,executedEdgeIds:j,failedNodeIds:M,currentOrchestrationName:ue,currentOrchestrationId:N,waitingForTerminalConfirm:de,waitingStepName:P,get terminalConfirmResolve(){return fe},set terminalConfirmResolve(e){fe=e},waitingForUserConfirm:pe,waitingConfirmMessage:F,get userConfirmResolve(){return I},set userConfirmResolve(e){I=e},waitingForUserInput:me,waitingUserInputTitle:he,userInputParams:L,userInputValues:R,get userInputResolve(){return z},set userInputResolve(e){z=e},userInputDialogVisible:ve,confirmUserInput:ye,cancelUserInput:B,ansiToHtml:V,isFullscreen:be,useTerminal:xe,terminalSessions:Se,terminalSessionsLoading:Ce,loadTerminalSessions:we,restartTerminalSession:Te,deleteTerminalSession:Ee,upsertTerminalSession:De,showTerminalSessions:Oe,terminalSessionsCount:ke,startupAutoRunTriggered:Ae,sleep:je,waitForSocketConnected:U,runStartupCommandById:Me,runStartupWorkflow:Ne,runAfterQuickPushAction:W,autoRunProjectStartupItems:Pe,clampPercent:Ie,splitPercent:Re,splitterRef:Be,getSplitterWidth:K,updateSplitFromDom:Ve,panelSize:He,loadTerminalSessionsStatus:Ue,TERMINAL_POLL_INTERVAL_MS:ig,get terminalPollTimer(){return We},set terminalPollTimer(e){We=e},stopTerminalPolling:Ge,startTerminalPolling:Ke,getLastDirName:Je,commandManagerVisible:Xe,flowOrchestrationVisible:Ze,runConsoleCommand:Qe,runConsoleCommandWithCmd:$e,closeConsoleRecord:q,rerunConsoleRecord:et,toggleCommandOutput:tt,stopCommand:Y,openCommandManager:nt,openFlowOrchestrationWorkspace:X,scrollToCurrentStep:rt,isGitCommand:st,extractVersionFromOutput:Z,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 at},get VideoPlay(){return _e},get Loading(){return p},get Close(){return qe},get Position(){return g},get Monitor(){return Le},get Document(){return Ye},get Timer(){return ee},get Ticket(){return v},get Delete(){return ze},get RefreshRight(){return ct},get Folder(){return ot},SvgIcon:gt,IconButton:_t,CommonDialog:vt,get $t(){return Q}};return Object.defineProperty(Ct,"__isScriptSetup",{enumerable:!1,value:!0}),Ct}}),og={class:`console-header`},sg={class:`header-left`},cg={class:`console-title`},lg={class:`header-actions`},ug={key:0,class:`execution-controls`},dg={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},fg={class:`console-content`},pg={class:`termial-session`},mg={key:0,class:`terminal-sessions-panel`},hg={class:`terminal-sessions-header`},gg={class:`terminal-sessions-title`},_g={class:`terminal-sessions-count`},vg={class:`terminal-sessions-actions`},yg={class:`terminal-sessions-body`},bg={key:0,class:`terminal-sessions-empty`},xg={key:1,class:`terminal-sessions-list`},Sg={class:`terminal-session-main`},Cg=[`title`],wg={class:`terminal-session-pid`},Tg={class:`terminal-session-meta`},Eg={class:`terminal-session-dir`},Dg={class:`terminal-session-actions`},Og={key:1,class:`terminal-sessions-collapsed`},kg={class:`console-content-main`},Ag={key:0,class:`orchestration-flow-panel`},jg={class:`flow-panel-header`},Mg={class:`flow-panel-title`},Ng={key:1,class:`orchestration-steps-panel`},Pg={class:`steps-header`},Fg={class:`steps-title`},Ig={key:0,class:`steps-orchestration`},Lg={key:0,class:`steps-list`},Rg={class:`step-indicator`},zg={key:4,class:`step-number`},Bg={class:`step-content`},Vg={class:`step-header`},Hg={key:0,class:`step-terminal-tag`,title:`终端执行`},Ug={key:1,class:`step-disabled-tag`},Wg={class:`step-name`},Gg={key:1,class:`terminal-waiting-panel`},Kg={class:`waiting-content`},qg={class:`waiting-text`},Jg={class:`waiting-desc`},Yg={class:`waiting-actions`},Xg={key:2,class:`terminal-waiting-panel user-confirm-panel`},Zg={class:`waiting-content`},Qg={class:`waiting-text`},$g={class:`waiting-desc`},e_={class:`waiting-actions`},t_={class:`console-input-row`},n_=[`title`],r_={key:2,class:`console-output`},i_=[`onClick`],a_={class:`cmd-line`},o_={class:`cmd-text`},s_=[`title`],c_={class:`ts`},l_={class:`cmd-actions`},u_={key:0,class:`output-content`},d_=[`innerHTML`],f_=[`innerHTML`],p_={key:0,class:`stdin-input-row`},m_={class:`user-input-dialog-content`},h_={key:0,class:`user-input-empty`},g_={key:1,class:`user-input-form`},__={class:`user-input-label`},v_={key:0,class:`required`};function y_(e,t,n,r,a,o){let c=i,l=_,u=R,d=we,f=I,p=$e,m=We;return Z(),X(Y,null,[B(` 自定义指令执行控制台 `),W(`div`,{class:K([`command-console`,{fullscreen:r.isFullscreen}])},[B(` 标题栏 `),W(`div`,og,[W(`div`,sg,[t[16]||=W(`span`,{class:`console-window-dots`},[W(`span`,{class:`dot dot-red`}),W(`span`,{class:`dot dot-yellow`}),W(`span`,{class:`dot dot-green`})],-1),W(`span`,cg,V(r.$t(`@CF05E:自定义指令执行`)),1)]),W(`div`,lg,[B(` 编排暂停/继续按钮 `),r.consoleRunning?(Z(),X(`div`,ug,[s(l,{content:r.orchestrationPaused?`继续执行`:`暂停执行`,placement:`bottom`},{default:L(()=>[s(c,{type:r.orchestrationPaused?`success`:`warning`,size:`small`,onClick:t[0]||=e=>r.orchestrationPaused=!r.orchestrationPaused,class:`pause-btn`},{icon:L(()=>[r.orchestrationPaused?(Z(),U(r.VideoPlay,{key:0})):(Z(),U(r.Loading,{key:1}))]),default:L(()=>[M(` `+V(r.orchestrationPaused?`继续`:`暂停`),1)]),_:1},8,[`type`])]),_:1},8,[`content`]),s(l,{content:`停止执行`,placement:`bottom`},{default:L(()=>[s(c,{type:`danger`,size:`small`,onClick:t[1]||=e=>{r.consoleRunning=!1,r.orchestrationPaused=!1,r.currentStepIndex=-1,r.orchestrationSteps=[]},class:`stop-btn`},{icon:L(()=>[s(r.Close)]),default:L(()=>[t[17]||=M(` 停止 `,-1)]),_:1})]),_:1})])):B(`v-if`,!0),r.consoleHistory.length>0?(Z(),U(r.IconButton,{key:1,tooltip:`清空执行历史`,"hover-color":`var(--color-danger)`,onClick:r.clearConsoleHistory,"custom-class":`clear-history-btn`},{default:L(()=>[s(u,{size:18},{default:L(()=>[s(r.Delete)]),_:1})]),_:1})):B(`v-if`,!0),s(r.IconButton,{tooltip:r.$t(`@CF05E:使用终端执行`),active:r.useTerminal,onClick:t[2]||=e=>r.useTerminal=!r.useTerminal,"custom-class":`terminal-toggle-btn`},{default:L(()=>[s(u,{size:20},{default:L(()=>[s(r.Monitor)]),_:1})]),_:1},8,[`tooltip`,`active`]),s(r.IconButton,{tooltip:r.$t(`@CF05E:自定义命令管理`),"hover-color":`var(--color-success)`,onClick:r.openCommandManager,"custom-class":`command-manager-btn`},{default:L(()=>[s(r.SvgIcon,{"icon-class":`command-list`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),s(r.ProjectStartupButton,{onExecuteCommand:r.executeCustomCommand,onExecuteWorkflow:t[3]||=e=>r.runWorkflow(e)}),s(r.IconButton,{tooltip:r.$t(`@ORCH:可视化编排`),"hover-color":`#9c27b0`,onClick:r.openFlowOrchestrationWorkspace,"custom-class":`flow-orchestrator-btn`},{default:L(()=>[s(r.SvgIcon,{"icon-class":`workflow`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),s(r.IconButton,{tooltip:r.isFullscreen?r.$t(`@CF05E:退出全屏`):r.$t(`@CF05E:全屏显示`),onClick:t[4]||=e=>r.isFullscreen=!r.isFullscreen},{default:L(()=>[r.isFullscreen?(Z(),X(`svg`,dg,[...t[18]||=[W(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])):(Z(),U(u,{key:0},{default:L(()=>[s(r.FullScreen)]),_:1}))]),_:1},8,[`tooltip`])])]),B(` 内容区域 `),W(`div`,fg,[s(p,{ref:`splitterRef`,layout:`horizontal`,style:{height:`100%`},onResize:r.updateSplitFromDom,onResizeEnd:r.updateSplitFromDom},{default:L(()=>[s(d,{size:r.panelSize,"onUpdate:size":t[7]||=e=>r.panelSize=e,min:`15%`,max:`85%`},{default:L(()=>[W(`div`,pg,[r.showTerminalSessions?(Z(),X(`div`,mg,[W(`div`,hg,[W(`div`,gg,[W(`span`,null,V(r.$t(`@CMDCON:终端会话`)),1),W(`span`,_g,`(`+V(r.terminalSessionsCount)+`)`,1)]),W(`div`,vg,[s(l,{content:r.$t(`@CMDCON:刷新`),placement:`bottom`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:r.loadTerminalSessions,disabled:r.terminalSessionsLoading},{default:L(()=>[s(u,null,{default:L(()=>[s(r.RefreshRight)]),_:1})]),_:1},8,[`onClick`,`disabled`])]),_:1},8,[`content`]),s(l,{content:r.$t(`@CMDCON:隐藏`),placement:`bottom`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:t[5]||=e=>r.showTerminalSessions=!1},{default:L(()=>[s(u,null,{default:L(()=>[s(r.ArrowDown)]),_:1})]),_:1})]),_:1},8,[`content`])])]),z((Z(),X(`div`,yg,[r.terminalSessions.length===0?(Z(),X(`div`,bg,V(r.$t(`@CMDCON:暂无终端会话`)),1)):(Z(),X(`div`,xg,[(Z(!0),X(Y,null,F(r.terminalSessions,e=>(Z(),X(`div`,{key:e.id,class:`terminal-session-item`},[W(`div`,Sg,[W(`div`,{class:`terminal-session-command`,title:e.command},[M(V(e.command),1),W(`span`,wg,` PID: `+V(e.pid??`-`),1)],8,Cg),W(`div`,Tg,[e.workingDirectory?(Z(),U(l,{key:0,content:e.workingDirectory,placement:`top`},{default:L(()=>[W(`span`,Eg,[s(u,{class:`cmd-dir-icon`},{default:L(()=>[s(r.Folder)]),_:1}),M(` `+V(r.getLastDirName(e.workingDirectory)),1)])]),_:2},1032,[`content`])):B(`v-if`,!0)])]),W(`div`,Dg,[s(l,{content:r.$t(`@CMDCON:重新启动`),placement:`top`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:t=>r.restartTerminalSession(e)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.RefreshRight)]),_:1})]),_:1},8,[`onClick`])]),_:2},1032,[`content`]),s(l,{content:r.$t(`@CMDCON:删除`),placement:`top`},{default:L(()=>[s(c,{text:``,size:`small`,type:`danger`,onClick:t=>r.deleteTerminalSession(e)},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Delete)]),_:1})]),_:1},8,[`onClick`])]),_:2},1032,[`content`])])]))),128))]))])),[[m,r.terminalSessionsLoading]])])):(Z(),X(`div`,Og,[s(c,{text:``,size:`small`,onClick:t[6]||=e=>r.showTerminalSessions=!0},{default:L(()=>[M(V(r.$t(`@CMDCON:显示终端会话`,{count:r.terminalSessionsCount})),1)]),_:1})]))])]),_:1},8,[`size`]),s(d,{min:`15%`,max:`85%`},{default:L(()=>[W(`div`,kg,[B(` 执行画布(只读,高亮执行路径) `),r.executionFlowData&&r.showExecutionFlowPanel?(Z(),X(`div`,Ag,[W(`div`,jg,[W(`div`,Mg,V(r.currentOrchestrationName||r.currentOrchestrationId),1),s(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:L(()=>[s(u,{size:18},{default:L(()=>[s(r.Close)]),_:1})]),_:1},8,[`tooltip`])]),s(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`])])):B(`v-if`,!0),B(` 编排步骤列表 `),r.orchestrationSteps.length>0||r.waitingForTerminalConfirm||r.waitingForUserConfirm?(Z(),X(`div`,Ng,[W(`div`,Pg,[W(`span`,Fg,[t[19]||=M(` 执行步骤 `,-1),r.currentOrchestrationName||r.currentOrchestrationId?(Z(),X(`span`,Ig,` - `+V(r.currentOrchestrationName||r.currentOrchestrationId),1)):B(`v-if`,!0),M(` (`+V(r.currentStepIndex+1)+`/`+V(r.orchestrationSteps.length)+`) `,1)])]),r.orchestrationSteps.length>0?(Z(),X(`div`,Lg,[(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}])},[W(`div`,Rg,[n<r.currentStepIndex?(Z(),U(u,{key:0,class:`step-icon-check`},{default:L(()=>[...t[20]||=[W(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[W(`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(),U(u,{key:1,class:`step-type-icon`},{default:L(()=>[s(r.Timer)]),_:1})):e.type===`version`?(Z(),U(u,{key:2,class:`step-type-icon`},{default:L(()=>[s(r.Ticket)]),_:1})):e.type===`command`?(Z(),U(u,{key:3,class:`step-type-icon`},{default:L(()=>[s(r.Document)]),_:1})):(Z(),X(`span`,zg,V(n+1),1))]),W(`div`,Bg,[W(`div`,Vg,[W(`span`,{class:K([`step-type-tag`,`type-${e.type}`])},V(e.type===`command`?`命令`:e.type===`wait`?`等待`:e.type===`version`?`版本`:e.type===`user_input`?`输入`:e.type),3),e.useTerminal?(Z(),X(`span`,Hg,[s(u,{class:`step-terminal-icon`},{default:L(()=>[s(r.Monitor)]),_:1}),t[21]||=M(` 终端 `,-1)])):B(`v-if`,!0),e.enabled===!1?(Z(),X(`span`,Ug,`已禁用`)):B(`v-if`,!0)]),W(`span`,Wg,V(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))])):B(`v-if`,!0),B(` 终端命令等待确认提示 `),r.waitingForTerminalConfirm?(Z(),X(`div`,Gg,[W(`div`,Kg,[s(u,{class:`waiting-icon`},{default:L(()=>[s(r.Monitor)]),_:1}),W(`div`,qg,[t[24]||=W(`div`,{class:`waiting-title`},`等待终端命令完成`,-1),W(`div`,Jg,[t[22]||=M(` 终端命令 "`,-1),W(`strong`,null,V(r.waitingStepName),1),t[23]||=M(`" 已在新窗口中打开,请在终端中查看命令执行结果 `,-1)])])]),W(`div`,Yg,[s(c,{type:`primary`,onClick:r.continueAfterTerminal},{default:L(()=>[s(u,null,{default:L(()=>[s(r.VideoPlay)]),_:1}),t[25]||=M(` 继续下一步 `,-1)]),_:1}),s(c,{type:`danger`,plain:``,onClick:r.stopAfterTerminal},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Close)]),_:1}),t[26]||=M(` 停止执行 `,-1)]),_:1})])])):B(`v-if`,!0),B(` 用户确认节点等待提示 `),r.waitingForUserConfirm?(Z(),X(`div`,Xg,[W(`div`,Zg,[s(u,{class:`waiting-icon`,style:{color:`#ff9800`}},{default:L(()=>[...t[27]||=[M(`✋`,-1)]]),_:1}),W(`div`,Qg,[t[28]||=W(`div`,{class:`waiting-title`},`用户确认节点`,-1),W(`div`,$g,V(r.waitingConfirmMessage),1)])]),W(`div`,e_,[s(c,{type:`primary`,onClick:r.continueUserConfirm},{default:L(()=>[s(u,null,{default:L(()=>[s(r.VideoPlay)]),_:1}),t[29]||=M(` 继续执行 `,-1)]),_:1}),s(c,{type:`danger`,plain:``,onClick:r.stopUserConfirm},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Close)]),_:1}),t[30]||=M(` 取消执行 `,-1)]),_:1})])])):B(`v-if`,!0)])):B(`v-if`,!0),B(` 输入区 `),W(`div`,t_,[W(`span`,{class:`prompt`,title:r.$t(`@CF05E:当前路径`)},V(r.currentDirectory)+` >`,9,n_),s(f,{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(Re(e=>r.useTerminal?r.runConsoleCommand():r.runInteractiveCommand(),[`prevent`]),[`enter`]),disabled:r.consoleRunning,clearable:``},null,8,[`modelValue`,`placeholder`,`disabled`]),s(r.IconButton,{disabled:r.consoleRunning,"hover-color":`var(--color-primary)`,onClick:t[11]||=e=>r.useTerminal?r.runConsoleCommand():r.runInteractiveCommand()},{default:L(()=>[r.consoleRunning?(Z(),U(u,{key:0,class:`is-loading`},{default:L(()=>[s(r.Loading)]),_:1})):(Z(),U(u,{key:1},{default:L(()=>[s(r.VideoPlay)]),_:1}))]),_:1},8,[`disabled`])]),B(` 命令历史输出 `),r.consoleHistory.length?(Z(),X(`div`,r_,[(Z(!0),X(Y,null,F(r.consoleHistory,e=>(Z(),X(`div`,{key:e.id,class:`console-record`},[W(`div`,{class:`cmd-header cursor-pointer`,onClick:t=>r.toggleCommandOutput(e)},[W(`div`,a_,[t[31]||=W(`span`,{class:`cmd-prefix`},`>`,-1),W(`span`,o_,V(e.command),1),e.directory?(Z(),X(`span`,{key:0,class:`cmd-dir`,title:e.directory},[s(u,{class:`cmd-dir-icon`},{default:L(()=>[s(r.Folder)]),_:1}),M(` `+V(e.directory),1)],8,s_)):B(`v-if`,!0),e.running?(Z(),U(u,{key:1,class:`running-icon is-loading`,color:`var(--color-primary)`},{default:L(()=>[s(r.Loading)]),_:1})):B(`v-if`,!0),W(`span`,c_,V(e.ts),1)]),W(`div`,l_,[s(l,{content:`重新执行`,placement:`top`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:Re(t=>r.rerunConsoleRecord(e),[`stop`]),class:`rerun-btn`},{default:L(()=>[s(u,null,{default:L(()=>[s(r.RefreshRight)]),_:1})]),_:1},8,[`onClick`])]),_:2},1024),e.running?(Z(),U(l,{key:0,content:`停止命令`,placement:`top`},{default:L(()=>[s(c,{text:``,size:`small`,onClick:Re(t=>e.isInteractive?r.stopInteractiveCommand(e):r.stopCommand(e),[`stop`]),class:`stop-btn`,type:`danger`},{default:L(()=>[s(u,null,{default:L(()=>[s(r.Close)]),_:1})]),_:1},8,[`onClick`])]),_:2},1024)):B(`v-if`,!0),s(c,{text:``,size:`small`,onClick:Re(t=>r.toggleCommandOutput(e),[`stop`]),disabled:!e.stdout&&!e.stderr,class:`toggle-output-btn`},{default:L(()=>[s(u,{class:K({"rotate-icon":!e.expanded})},{default:L(()=>[s(r.ArrowDown)]),_:1},8,[`class`])]),_:2},1032,[`onClick`,`disabled`])])],8,i_),s(et,{name:`output-slide`},{default:L(()=>[e.expanded&&(e.stdout||e.stderr)?(Z(),X(`div`,u_,[e.stdout?(Z(),X(`pre`,{key:0,class:`stdout`,innerHTML:e.stdout},null,8,d_)):B(`v-if`,!0),e.stderr?(Z(),X(`pre`,{key:1,class:`stderr`,innerHTML:e.stderr},null,8,f_)):B(`v-if`,!0)])):B(`v-if`,!0)]),_:2},1024),B(` 每个交互式命令独立的 stdin 输入框 `),e.isInteractive&&e.running?(Z(),X(`div`,p_,[s(u,{class:`stdin-icon`},{default:L(()=>[s(r.Position)]),_:1}),s(f,{modelValue:e.stdinInput,"onUpdate:modelValue":t=>e.stdinInput=t,class:`stdin-input`,placeholder:`输入响应内容(如密码、确认等),按回车发送`,onKeydown:Te(Re(t=>r.sendStdinInput(e),[`prevent`]),[`enter`]),clearable:``,size:`small`},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),s(c,{type:`success`,onClick:t=>r.sendStdinInput(e),size:`small`},{default:L(()=>[...t[32]||=[M(`发送`,-1)]]),_:1},8,[`onClick`])])):B(`v-if`,!0)]))),128))])):B(`v-if`,!0)])]),_:1})]),_:1},512)])],2),B(` 自定义命令管理弹窗 `),s(r.CustomCommandManager,{visible:r.commandManagerVisible,"onUpdate:visible":t[12]||=e=>r.commandManagerVisible=e,fullscreen:!0,onExecuteCommand:r.executeCustomCommand},null,8,[`visible`]),B(` 可视化编排工作台(基于 vue-flow) `),s(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`]),s(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:L(()=>[W(`div`,m_,[r.userInputParams.length===0?(Z(),X(`div`,h_,V(r.$t(`@UINPUT:暂无输入参数`)),1)):(Z(),X(`div`,g_,[(Z(!0),X(Y,null,F(r.userInputParams,e=>(Z(),X(`div`,{key:e.name,class:`user-input-row`},[W(`div`,__,[e.required?(Z(),X(`span`,v_,`*`)):B(`v-if`,!0),M(` `+V(e.name),1)]),s(f,{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 b_=$(ag,[[`render`,y_],[`__scopeId`,`data-v-f56c993a`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/components/CommandConsole.vue`]]),x_=N({__name:`ConsoleView`,setup(e,{expose:t}){t();let n={CustomCommandsPanel:$h,CommandConsole:b_};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),S_={class:`console-view`},C_={class:`console-view__sidebar`},w_={class:`console-view__terminal`};function T_(e,t,n,r,i,a){return Z(),X(`div`,S_,[B(` 左侧:自定义命令快捷面板(手风琴竖向列表,折叠后只留 header 竖条) `),W(`aside`,C_,[s(r.CustomCommandsPanel)]),B(` 右侧:命令控制台(终端 + 自定义指令管理),占满剩余空间 `),W(`main`,w_,[s(r.CommandConsole)])])}var E_=$(x_,[[`render`,T_],[`__scopeId`,`data-v-862e14cf`],[`__file`,`E:/workspace/github_workspace/zen-git/src/ui/client/src/views/ConsoleView.vue`]]),D_=`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`,O_=N({__name:`App`,setup(e,{expose:t}){t();let n=it(()=>wt(()=>import(`./CommitForm-DyHOStnk.js`),__vite__mapDeps([24,1,4,5,6,0,2,7,8,11,9,10,12,13,25]))),r=it(()=>wt(()=>import(`./LogList-xk8W-v1F.js`),__vite__mapDeps([26,1,4,5,8,6,0,2,7,11,9,10,12,27]))),a=it(()=>wt(()=>import(`./RemoteRepoCard-Cx5q9Yxb.js`),__vite__mapDeps([28,1,4,5,8,6,0,2,7,9,10,29]))),o=it(()=>wt(()=>import(`./AppVersionBadge-nwlsGMPO.js`),__vite__mapDeps([30,1,4,5,8,6,0,2,7,31]))),s=it(()=>wt(()=>import(`./BranchSelector-bUBqRWF2.js`),__vite__mapDeps([32,1,4,5,8,6,0,2,7,9,10,11,12,33]))),c={loadingComponent:Tm,delay:200},l=it({loader:()=>wt(()=>import(`./EditorView-D939kLwW.js`),__vite__mapDeps([34,1,4,5,6,0,2,7,8,13,35,36,37])),...c}),u=it({loader:()=>wt(()=>import(`./SourceMapView-uEieIRHF.js`),__vite__mapDeps([38,1,4,5,8,6,0,2,7,13,16,17,20,39])),...c}),d=it({loader:()=>wt(()=>import(`./WorkbenchView-DBoFN37v.js`),__vite__mapDeps([40,1,4,5,6,0,2,7,8,13,41])),...c}),f=it({loader:()=>wt(()=>import(`./MonitorView-CSAqU7oV.js`),__vite__mapDeps([42,1,4,5,6,0,2,7,8,43])),...c}),p=it({loader:()=>wt(()=>import(`./MindmapView-CU3tXgbR.js`),__vite__mapDeps([44,1,4,5,6,0,2,7,8,13,35,36,45])),...c}),m=J(``),g=J(null),v=Ht(),y=xt(),b=bt(),x=pp(),S=Wt(),w=J(!1),T=G(()=>y.currentDirectory),ee=G(()=>{let e=y.models.find(e=>e.isDefault);return e?e.name||e.model:``});function E(){let e=Ot(T.value);document.title=`${e} - Zen GitSync`}C(T,()=>{E()},{immediate:!0});function ne(){y.config&&(m.value=`${Q(`@F13B4:默认提交信息: `)}${y.config.defaultCommitMessage}`)}async function re(){try{let e=await(await fetch(`/api/current_directory`)).json();return y.setCurrentDirectory(e.directory||Q(`@F13B4:未知目录`)),e}catch(e){return console.error(`获取当前目录失败:`,e),{directory:Q(`@F13B4:未知目录`),isGitRepo:!1}}}te(async()=>{console.log(Q(`@F13B4:---------- 页面初始化开始 ----------`)),Wp().start(),x.start(),S.startPolling();try{let e=await re();y.isLoaded||await y.loadConfig(),ne(),v.isGitRepo=e.isGitRepo===!0,v.lastCheckedTime=Date.now(),v.isGitRepo?(await Promise.all([v.getCurrentBranch(!0),v.getAllBranches(),v.getUserInfo(),v.getRemoteUrl(),v.getBranchStatus(!0)]),setTimeout(()=>{v.bootFetch().catch(e=>{console.warn(`[App] 启动静默 fetch 异常(已忽略):`,e)})},3e3)):H.warning(Q(`@F13B4:当前目录不是Git仓库,部分功能将不可用`))}catch(e){console.error(`初始化失败:`,e)}finally{w.value=!0,console.log(Q(`@F13B4:---------- 页面初始化完成 ----------`)),setTimeout(()=>{ge()},100)}}),h(()=>{x.stop(),S.stopPolling(),Wp().stop()});function O(){ge()}window.addEventListener(`ui-layout-reset`,O),h(()=>{window.removeEventListener(`ui-layout-reset`,O)}),C(()=>v.isGitRepo,()=>{D(()=>ge())});function ae(){g.value&&g.value.refreshStatus()}let oe=J(`git`);C(oe,e=>{e===`git`&&g.value&&v.isGitRepo&&Promise.all([v.fetchStatus(),v.getBranchStatus()]).catch(e=>console.error(`切换到Git视图刷新失败:`,e))});let se=J(!1);function k(){se.value=!0}let{theme:le}=Gn(),A=!1,j=!1,M=0,ue=0,N=``,de=``,P=null,F=null,I=null;function me(){let e=document.querySelector(`.grid-layout`);if(!e||!v.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]));y.ui.layout={...y.ui.layout,leftRatio:r,topRatio:a},console.log(`${Q(`@F13B4:布局比例已保存 - 左侧: `)}${(r*100).toFixed(0)}${Q(`@F13B4:%, 上方: `)}${(a*100).toFixed(0)}%`)}}function ge(){let e=document.querySelector(`.grid-layout`);if(!e)return;if(!v.isGitRepo){e.style.gridTemplateRows=``,ve();return}let t=y.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=``;ve()}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 _e=J(25),z=J(50);function ve(){let e=L();_e.value=e.left,z.value=e.top}function ye(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`,ve(),me()}function B(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`,ve(),me()}function V(e){P=e,F===null&&(F=requestAnimationFrame(()=>{F=null,xe()}))}function be(e){A=!0,M=e.clientX;let t=document.querySelector(`.grid-layout`);N=getComputedStyle(t).gridTemplateColumns,document.getElementById(`v-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,V),document.addEventListener(`mouseup`,Se),e.preventDefault()}function xe(){if(!A)return;let e=P;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientX-M,r=N.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 Se(){A=!1,document.getElementById(`v-resizer`)?.classList.remove(`active`),F!==null&&(cancelAnimationFrame(F),F=null),document.removeEventListener(`mousemove`,V),document.removeEventListener(`mouseup`,Se),me()}function Ce(e){j=!0,ue=e.clientY;let t=document.querySelector(`.grid-layout`);de=getComputedStyle(t).gridTemplateRows,document.getElementById(`h-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,we),document.addEventListener(`mouseup`,Ee),e.preventDefault()}function we(e){P=e,I===null&&(I=requestAnimationFrame(()=>{I=null,Te()}))}function Te(){if(!j)return;let e=P;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientY-ue,r=de.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 Ee(){j=!1,document.getElementById(`h-resizer`)?.classList.remove(`active`),I!==null&&(cancelAnimationFrame(I),I=null),document.removeEventListener(`mousemove`,we),document.removeEventListener(`mouseup`,Ee),me()}let De={CommitForm:n,LogList:r,RemoteRepoCard:a,AppVersionBadge:o,BranchSelector:s,asyncOpts:c,EditorView:l,SourceMapView:u,WorkbenchView:d,MonitorView:f,MindmapView:p,configInfo:m,gitStatusRef:g,gitStore:v,configStore:y,localeStore:b,instancesStore:x,toolsStore:S,initCompleted:w,currentDirectory:T,defaultModelName:ee,updateDocumentTitle:E,updateConfigInfo:ne,loadCurrentDirectory:re,handleUiLayoutReset:O,handleBranchChanged:ae,activeView:oe,userSettingsDialogVisible:se,openUserSettingsDialog:k,isDarkTheme:le,get isVResizing(){return A},set isVResizing(e){A=e},get isHResizing(){return j},set isHResizing(e){j=e},get initialX(){return M},set initialX(e){M=e},get initialY(){return ue},set initialY(e){ue=e},get initialGridTemplateColumns(){return N},set initialGridTemplateColumns(e){N=e},get initialGridTemplateRows(){return de},set initialGridTemplateRows(e){de=e},get lastMouseEvent(){return P},set lastMouseEvent(e){P=e},get vResizeRafId(){return F},set vResizeRafId(e){F=e},get hResizeRafId(){return I},set hResizeRafId(e){I=e},saveLayoutRatios:me,loadLayoutRatios:ge,readGridPercents:L,gridLeftPercent:_e,gridTopPercent:z,refreshGridPercents:ve,nudgeV:ye,nudgeH:B,scheduleVResize:V,startVResize:be,handleVResize:xe,stopVResize:Se,startHResize:Ce,scheduleHResize:we,handleHResize:Te,stopHResize:Ee,get $t(){return Q},GitStatus:lu,DirectorySelector:Nu,UserSettingsDialog:Kf,ActivityBar:up,InstanceSwitcher:kp,AppErrorBanner:tm,RecentProjectsList:ym,ConsoleView:E_,get ElConfigProvider(){return pe},get ElButton(){return i},get ElTooltip(){return _},get ElIcon(){return R},get Setting(){return fe},get WarningFilled(){return ce},get Sunny(){return he},get Moon(){return ie},get logo(){return D_}};return Object.defineProperty(De,"__isScriptSetup",{enumerable:!1,value:!0}),De}}),k_={class:`main-header app-header`},A_={class:`header-left`},j_={href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,class:`header-brand-link`},M_=[`src`],N_={class:`header-center`},P_={class:`header-info`},F_={key:0,class:`header-actions`},I_=[`aria-label`,`aria-pressed`],L_={id:`user-info`,class:`user-info-card`},R_={class:`user-name`},z_={class:`user-label`},B_={class:`user-warning`},V_=[`aria-label`],H_={key:0,class:`config-broken-banner`,role:`alert`,"aria-live":`polite`},U_={class:`banner-left`},W_={class:`banner-text`},G_={class:`banner-title`},K_={class:`banner-detail`},q_={key:1,class:`banner-path`},J_={class:`banner-actions`},Y_={key:0,class:`loading-container`},X_={class:`loading-card`,role:`status`,"aria-live":`polite`},Z_={class:`loading-text`},Q_={class:`loading-text__label`},$_={key:1,class:`app-body`},ev={class:`git-status-panel`},tv=[`aria-label`,`aria-valuenow`],nv={key:0,class:`commit-form-panel`},rv={key:0,class:`state-block state-block--warning user-unconfigured-card`},iv={class:`state-block__title user-unconfigured-title`},av={class:`state-block__hint user-unconfigured-desc`},ov={class:`user-unconfigured-actions`},sv={class:`user-unconfigured-divider`},cv={class:`user-unconfigured-code`},lv={key:1,class:`commit-form-panel commit-form-panel--empty`},uv=[`aria-label`,`aria-valuenow`],dv={class:`log-list-panel`},fv={class:`view-pane console-pane`},pv={class:`view-pane editor-pane`},mv={class:`view-pane source-map-pane`},hv={class:`view-pane workbench-pane`},gv={class:`view-pane monitor-pane`},_v={class:`view-pane mindmap-pane`},vv={class:`main-footer app-footer`},yv={key:0,class:`footer-model-hint`},bv={class:`footer-model-hint__label`},xv={class:`footer-model-hint__name`};function Sv(e,t,n,r,i,a){return Z(),U(r.ElConfigProvider,{locale:r.localeStore.elementPlusLocale},{default:L(()=>[B(` OPT-5: 全局网络错误横幅(header 下方置顶,不影响主区布局) `),s(r.AppErrorBanner),W(`header`,k_,[W(`div`,A_,[W(`a`,j_,[W(`img`,{src:r.logo,alt:`Zen GitSync Logo`,class:`logo`},null,8,M_),t[8]||=W(`h1`,null,`Zen GitSync`,-1)])]),W(`div`,N_,[s(r.DirectorySelector,{variant:`header`})]),W(`div`,P_,[B(` 顶部右侧动作 `),r.gitStore.isGitRepo?(Z(),X(`div`,F_,[B(` <CommandHistory /> `)])):B(`v-if`,!0),B(` 实例切换器:显示所有运行中的 GUI 项目 `),s(r.InstanceSwitcher),B(` 主题切换快捷按钮(OPT-2:原本要进设置→通用→主题 4 次点击,现在 1 次) `),s(r.ElTooltip,{content:r.isDarkTheme?r.$t(`@F13B4:切换到浅色主题`):r.$t(`@F13B4:切换到深色主题`),placement:`bottom`,effect:`dark`,"show-after":200},{default:L(()=>[W(`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()},[s(r.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:L(()=>[r.isDarkTheme?(Z(),U(r.Moon,{key:0})):(Z(),U(r.Sunny,{key:1}))]),_:1})],8,I_)]),_:1},8,[`content`]),B(` 用户信息 `),W(`div`,L_,[r.gitStore.userName?(Z(),U(r.ElTooltip,{key:0,content:r.gitStore.userEmail||r.gitStore.userName,placement:`bottom`,effect:`dark`,"show-after":200},{default:L(()=>[W(`span`,R_,V(r.gitStore.userName),1)]),_:1},8,[`content`])):(Z(),X(Y,{key:1},[W(`span`,z_,V(r.$t(`@F13B4:用户: `)),1),W(`span`,B_,V(r.$t(`@F13B4:未配置`)),1)],64)),s(r.ElTooltip,{content:r.$t(`@F13B4:用户设置`),placement:`bottom`,effect:`dark`,"show-after":200},{default:L(()=>[W(`button`,{class:`modern-btn btn-icon-28`,"aria-label":r.$t(`@F13B4:用户设置`),onClick:r.openUserSettingsDialog},[s(r.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.Setting)]),_:1})],8,V_)]),_:1},8,[`content`])])])]),r.configStore.hasConfigLoadError?(Z(),X(`div`,H_,[W(`div`,U_,[s(r.ElIcon,{class:`banner-icon`,"aria-hidden":`true`},{default:L(()=>[s(r.WarningFilled)]),_:1}),W(`div`,W_,[W(`span`,G_,V(r.$t(`@CFGERR:系统配置文件有问题`)),1),r.configStore.configLoadError?(Z(),U(r.ElTooltip,{key:0,content:r.configStore.configLoadError,placement:`bottom`,effect:`dark`,"show-after":200},{default:L(()=>[W(`span`,K_,V(r.$t(`@CFGERR:查看原因`)),1)]),_:1},8,[`content`])):B(`v-if`,!0),r.configStore.configFilePath?(Z(),X(`span`,q_,V(r.configStore.configFilePath),1)):B(`v-if`,!0)])]),W(`div`,J_,[s(r.ElButton,{size:`small`,type:`warning`,onClick:t[1]||=e=>r.configStore.openSystemConfigFile()},{default:L(()=>[M(V(r.$t(`@CFGERR:打开系统配置文件`)),1)]),_:1})])])):B(`v-if`,!0),W(`main`,{class:`main-container`,style:Me({top:r.configStore.hasConfigLoadError?`104px`:`64px`})},[r.initCompleted?(Z(),X(`div`,$_,[B(` VS Code 风格活动栏 `),s(r.ActivityBar,{activeView:r.activeView,"onUpdate:activeView":t[2]||=e=>r.activeView=e},null,8,[`activeView`]),B(` 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 去掉下方行 `),z(W(`div`,{class:K([`view-pane grid-layout`,{"grid-layout--no-bottom":!r.gitStore.isGitRepo}])},[B(` 左侧Git状态 `),W(`div`,ev,[s(r.GitStatus,{ref:`gitStatusRef`,"initial-directory":r.currentDirectory},null,8,[`initial-directory`])]),B(` 垂直分隔条(GitStatus | 右侧列) `),W(`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(Re(e=>r.nudgeV(-2),[`prevent`]),[`left`]),t[4]||=Te(Re(e=>r.nudgeV(2),[`prevent`]),[`right`])]},null,40,tv),B(` 右侧上方提交表单 `),r.gitStore.isGitRepo?(Z(),X(`div`,nv,[B(` 当用户未配置时显示配置提示 `),!r.gitStore.userName||!r.gitStore.userEmail?(Z(),X(`div`,rv,[t[15]||=W(`div`,{class:`state-block__icon user-unconfigured-icon`},[W(`svg`,{viewBox:`0 0 24 24`,width:`40`,height:`40`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[W(`circle`,{cx:`12`,cy:`8`,r:`4`}),W(`path`,{d:`M4 20c0-4 3.6-7 8-7s8 3 8 7`}),W(`path`,{d:`M17 13.5l1.5 1.5 3-3`,stroke:`var(--color-warning)`,"stroke-width":`2`})])],-1),W(`h2`,iv,`Git `+V(r.$t(`@F13B4:用户未配置`)),1),W(`p`,av,V(r.$t(`@F13B4:请先配置Git用户信息才能进行提交操作。`)),1),W(`div`,ov,[W(`button`,{class:`user-unconfigured-primary-btn`,onClick:r.openUserSettingsDialog},[t[11]||=W(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[W(`path`,{d:`M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`}),W(`path`,{d:`M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z`})],-1),M(` `+V(r.$t(`@F13B4:立即配置`)),1)])]),W(`div`,sv,[W(`span`,null,V(r.$t(`@F13B4:或者使用命令行配置:`)),1)]),W(`div`,cv,[t[12]||=W(`span`,{class:`code-prompt`},`$`,-1),M(` git config `+V(r.$t(`@F13B4:--global user.name "您的用户名"`)),1),t[13]||=W(`br`,null,null,-1),t[14]||=W(`span`,{class:`code-prompt`},`$`,-1),M(` git config `+V(r.$t(`@F13B4:--global user.email "您的邮箱"`)),1)])])):(Z(),X(Y,{key:1},[B(` 用户已配置显示提交表单 `),s(r.CommitForm)],64))])):(Z(),X(`div`,lv,[B(` 非 Git 仓库时,右侧空态直接用"最近项目"列表代替原"Git 仓库初始化"卡片
|
|
67
67
|
(左侧 GitStatus 已经有"初始化 Git 仓库"按钮 + "尚未配置远程仓库"提示,这里不重复) `),s(r.RecentProjectsList,{variant:`fullpage`})])),B(` 水平分隔条(提交表单 | 提交历史) `),z(W(`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(Re(e=>r.nudgeH(-2),[`prevent`]),[`up`]),t[6]||=Te(Re(e=>r.nudgeH(2),[`prevent`]),[`down`])]},null,40,uv),[[q,r.gitStore.isGitRepo]]),B(` 右侧下方提交历史(仅 Git 仓库显示,非 Git 仓库时 RecentProjectsList 占满右侧整列) `),z(W(`div`,dv,[s(r.LogList)],512),[[q,r.gitStore.isGitRepo]])],2),[[q,r.activeView===`git`]]),B(` /view-pane git `),B(` 控制台视图(默认加载:随首屏静态挂载,切过去零等待;KeepAlive 缓存实例保状态) `),z(W(`div`,fv,[(Z(),U(De,null,[s(r.ConsoleView)],1024))],512),[[q,r.activeView===`console`]]),B(` 编辑器视图(懒加载:v-if 控制组件加载,KeepAlive 缓存实例保状态;
|