zen-gitsync 2.17.36 → 2.17.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +6 -6
  2. package/package.json +1 -1
  3. package/src/cli/ai/turn.js +3 -1
  4. package/src/config.js +7 -4
  5. package/src/ui/public/assets/{AgentEngineSelector-DVs4LGHZ.js → AgentEngineSelector-BMJAsMx_.js} +1 -1
  6. package/src/ui/public/assets/{AgentView-Blp40VRr.js → AgentView-BH5Ec4j1.js} +1 -1
  7. package/src/ui/public/assets/{AppVersionBadge-BEnoFzwh.js → AppVersionBadge-DNG70v26.js} +2 -2
  8. package/src/ui/public/assets/{BranchSelector-C7eXeFif.js → BranchSelector-DBI8ieGq.js} +1 -1
  9. package/src/ui/public/assets/{CommitForm-CK9jLJOC.js → CommitForm-BHwc5sEG.js} +1 -1
  10. package/src/ui/public/assets/{CommonDialog-BTeIpgGT.js → CommonDialog-DuI8Bsg7.js} +1 -1
  11. package/src/ui/public/assets/{EditorView-D00zvntf.js → EditorView-B3EO-mxZ.js} +1 -1
  12. package/src/ui/public/assets/{FileDiffViewer-zqgG9ok3.js → FileDiffViewer-DtGtQGLR.js} +1 -1
  13. package/src/ui/public/assets/{FlowExecutionViewer-VFnxkbIs.js → FlowExecutionViewer-sM9EwU3Q.js} +1 -1
  14. package/src/ui/public/assets/{FlowOrchestrationWorkspace-CIIdKK3v.js → FlowOrchestrationWorkspace-0Kh0IoGP.js} +1 -1
  15. package/src/ui/public/assets/{IconButton-Cgc5v9vb.js → IconButton-C07zojvw.js} +1 -1
  16. package/src/ui/public/assets/{LogList-DyQv-Yec.js → LogList-BatjYplm.js} +1 -1
  17. package/src/ui/public/assets/{MindmapView-EC2Wk_Qi.js → MindmapView-CTHfsYTC.js} +1 -1
  18. package/src/ui/public/assets/{MonitorView-Z5ZbGtaU.js → MonitorView-BblFdPFM.js} +1 -1
  19. package/src/ui/public/assets/{ProjectStartupButton-Ci19q1bL.js → ProjectStartupButton-CFQKlRoA.js} +1 -1
  20. package/src/ui/public/assets/{RecentDirectoriesChat-DT0sguEG.js → RecentDirectoriesChat-BVgA8lLY.js} +1 -1
  21. package/src/ui/public/assets/{RemoteManagerDialog-BRQpjMSK.js → RemoteManagerDialog-BxD0m5c-.js} +1 -1
  22. package/src/ui/public/assets/{RemoteRepoCard-yK90_VfS.js → RemoteRepoCard-kOIERvah.js} +1 -1
  23. package/src/ui/public/assets/{SourceMapView-C55ixUwz.js → SourceMapView-Bs3DYqDP.js} +1 -1
  24. package/src/ui/public/assets/{SvgIcon-ub85vovN.js → SvgIcon-YQZtv72i.js} +1 -1
  25. package/src/ui/public/assets/{TemplateManager-uDno_64z.js → TemplateManager-zSKmah02.js} +1 -1
  26. package/src/ui/public/assets/{UserInputNode-Ce55MMEZ.js → UserInputNode-DMCLoOUw.js} +1 -1
  27. package/src/ui/public/assets/{WorkbenchView-D1Pf6Etd.css → WorkbenchView-C_E3GV0q.css} +1 -1
  28. package/src/ui/public/assets/WorkbenchView-nHzg7gau.js +231 -0
  29. package/src/ui/public/assets/{_plugin-vue_export-helper-VuE2vqnn.js → _plugin-vue_export-helper-DcQKU19k.js} +2 -2
  30. package/src/ui/public/assets/{agentConversations-DcW54Tlt.js → agentConversations-D_TsndCC.js} +1 -1
  31. package/src/ui/public/assets/{configStore-De_8eQuS.js → configStore-u3FUM08v.js} +1 -1
  32. package/src/ui/public/assets/{gitStore-BP6TATf7.js → gitStore-ZjHYEyKS.js} +1 -1
  33. package/src/ui/public/assets/{index-Bq_-TrTP.js → index-DorcTBZN.js} +16 -16
  34. package/src/ui/public/assets/{previewSandbox-DcVlFmag.js → previewSandbox-KLKRAhm4.js} +1 -1
  35. package/src/ui/public/assets/{toolsStore-CQclze0T.js → toolsStore-CfyhqJeq.js} +1 -1
  36. package/src/ui/public/index.html +11 -11
  37. package/src/ui/server/routes/workbench/agentChat.js +1 -1
  38. package/src/ui/server/routes/workbench/orchestratorStore.js +4 -0
  39. package/src/ui/server/routes/workbench/orchestratorStore.progressReport.test.js +26 -0
  40. package/src/ui/public/assets/WorkbenchView-CtJD3pz-.js +0 -228
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RecentDirectoriesChat-DT0sguEG.js","assets/element-plus-Buzx8xRf.js","assets/rolldown-runtime-C0FnF6B9.js","assets/dagre-CDSwApuC.js","assets/element-plus-Qexo5hiM.css","assets/vendor-wERX2bc3.js","assets/vendor-CP-WuGZG.css","assets/_plugin-vue_export-helper-VuE2vqnn.js","assets/useThemeObserver-CWioG2jb.js","assets/agentConversations-DcW54Tlt.js","assets/configStore-De_8eQuS.js","assets/RecentDirectoriesChat-BMkc7fS1.css","assets/ProjectStartupButton-Ci19q1bL.js","assets/SvgIcon-ub85vovN.js","assets/SvgIcon-CDNsk4-Q.css","assets/IconButton-Cgc5v9vb.js","assets/IconButton-RlXqKOeu.css","assets/CommonDialog-BTeIpgGT.js","assets/CommonDialog-w6EmBEXv.css","assets/ProjectStartupButton-CB8IOg1E.css","assets/FlowOrchestrationWorkspace-CIIdKK3v.js","assets/vue-flow-KUZI4f_9.js","assets/vue-flow-CavUTEzp.css","assets/UserInputNode-Ce55MMEZ.js","assets/UserInputNode-DDNSarag.css","assets/FlowOrchestrationWorkspace-DwuSSxJ1.css","assets/FlowExecutionViewer-VFnxkbIs.js","assets/FlowExecutionViewer-jNHI5zdm.css","assets/CommitForm-CK9jLJOC.js","assets/gitStore-BP6TATf7.js","assets/socket-io-BFqQXqAp.js","assets/TemplateManager-uDno_64z.js","assets/TemplateManager-DO7EPfj8.css","assets/CommitForm-BZKY-bFa.css","assets/LogList-DyQv-Yec.js","assets/FileDiffViewer-zqgG9ok3.js","assets/fileIcon-B5p5pGN9.js","assets/previewSandbox-DcVlFmag.js","assets/flow-mindmap-D-65aZb7.js","assets/flow-mindmap-BMpmHdqh.css","assets/previewSandbox-PYnM6Paz.css","assets/monaco-BD8Gy_t7.js","assets/monaco-B2lPvkrc.css","assets/FileDiffViewer-n5ea9qMe.css","assets/toolsStore-CQclze0T.js","assets/LogList-XspUhx-C.css","assets/RemoteRepoCard-yK90_VfS.js","assets/RemoteRepoCard-o01IrbVz.css","assets/RemoteManagerDialog-BRQpjMSK.js","assets/RemoteManagerDialog-D4WphMtO.css","assets/AppVersionBadge-BEnoFzwh.js","assets/AppVersionBadge-DDYQqoy7.css","assets/BranchSelector-C7eXeFif.js","assets/BranchSelector-F4ibldMN.css","assets/EditorView-D00zvntf.js","assets/AgentEngineSelector-DVs4LGHZ.js","assets/AgentEngineSelector-DUf0TfaU.css","assets/EditorView-CftLj8-x.css","assets/SourceMapView-C55ixUwz.js","assets/SourceMapView-CfDydtsu.css","assets/WorkbenchView-CtJD3pz-.js","assets/WorkbenchView-D1Pf6Etd.css","assets/MonitorView-Z5ZbGtaU.js","assets/MonitorView-DwUwJXnY.css","assets/MindmapView-EC2Wk_Qi.js","assets/MindmapView-Diq2Cu4O.css","assets/AgentView-Blp40VRr.js","assets/AgentView-Bebv5xk6.css"])))=>i.map(i=>d[i]);
2
- import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{$ as n,$n as r,$t as i,A as a,At as o,B as s,Bn as c,Bt as l,C as u,Cn as d,Ct as f,Dn as p,Dt as m,En as h,F as g,Fn as _,Fr as v,Ft as y,G as b,Gn as x,Gt as S,Ht as C,I as w,In as T,It as ee,J as E,Jn as D,Jr as O,Jt as te,K as ne,L as k,M as A,N as j,Nn as M,On as N,Ot as re,Pn as P,Q as ie,Qt as ae,Rn as oe,S as se,Sn as ce,St as le,Tn as F,U as I,Ut as ue,V as de,W as L,Wn as fe,Wt as pe,Xn as me,Xr as R,Xt as he,Y as ge,Yn as _e,Yt as ve,Zn as z,Zt as ye,_n as B,a as V,an as be,at as xe,bn as H,br as U,bt as W,c as Se,cr as G,ct as Ce,d as we,dn as K,ei as q,en as Te,f as Ee,ft as De,g as Oe,gn as ke,h as Ae,ht as je,i as Me,j as Ne,jn as Pe,jt as Fe,kn as J,kt as Ie,ln as Le,lr as Y,lt as Re,m as ze,mt as Be,nt as Ve,o as He,on as Ue,or as We,ot as Ge,p as Ke,pr as X,pt as qe,q as Je,qn as Ye,r as Xe,rn as Ze,s as Qe,st as $e,tn as et,tr as tt,tt as nt,un as rt,ut as it,vn as at,vr as ot,w as st,wt as ct,x as lt,xn as Z,y as ut,yn as dt,yr as ft,z as pt}from"./element-plus-Buzx8xRf.js";import{C as mt,S as ht,f as gt,g as _t,m as vt,p as yt,x as bt}from"./vendor-wERX2bc3.js";import{i as xt,n as Q,t as $}from"./_plugin-vue_export-helper-VuE2vqnn.js";import{ir as St}from"./dagre-CDSwApuC.js";import{a as Ct,c as wt,i as Tt,l as Et,n as Dt,o as Ot,r as kt,t as At}from"./FileDiffViewer-zqgG9ok3.js";import{t as jt}from"./SvgIcon-ub85vovN.js";import{t as Mt}from"./IconButton-Cgc5v9vb.js";import{t as Nt}from"./socket-io-BFqQXqAp.js";import{i as Pt,n as Ft,r as It,t as Lt}from"./configStore-De_8eQuS.js";import{a as Rt,n as zt,r as Bt,t as Vt}from"./gitStore-BP6TATf7.js";import{t as Ht}from"./toolsStore-CQclze0T.js";import{t as Ut}from"./fileIcon-B5p5pGN9.js";import{c as Wt}from"./previewSandbox-DcVlFmag.js";import{t as Gt}from"./useThemeObserver-CWioG2jb.js";import{t as Kt}from"./CommonDialog-BTeIpgGT.js";import{t as qt}from"./TemplateManager-uDno_64z.js";import"./vue-flow-KUZI4f_9.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),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function Jt(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`}function Yt(e){let t=(e||``).trim();return/^[a-zA-Z]:/.test(t)?t.replace(/\//g,`\\`).toLowerCase():t}function Xt(e){return e.replace(/\\/g,`/`)}function Zt(e,t=[]){if(!e||!t?.length)return!1;let n=Xt(e);return t.some(e=>Xt(e)===n)}c();var Qt=T({__name:`FileRow`,props:{file:{type:Object,required:!0},isFileLocked:{type:Function,required:!0},isLocking:{type:Function,required:!0},getFileName:{type:Function,required:!0},getFileDirectory:{type:Function,required:!0},isSelectionMode:{type:Boolean,required:!1},isFileSelected:{type:Function,required:!1}},emits:[`fileClick`,`toggleFileLock`,`stageFile`,`unstageFile`,`revertFileChanges`,`manageLockedFiles`,`toggleFileSelection`],setup(e,{expose:t,emit:n}){t();let r=e,i=n;function a(e){r.isSelectionMode?(e?.stopPropagation(),i(`toggleFileSelection`,r.file.path)):i(`fileClick`,r.file)}function o(e){switch(e){case`added`:return`A`;case`modified`:return`M`;case`deleted`:return`D`;case`conflicted`:return`!`;case`untracked`:return`U`;case`intent-to-add`:return`I`;default:return``}}let s={props:r,emit:i,handleFileClick:a,getStatusLetter:o,getFileIcon:e=>Ut(r.getFileName(e)),get Lock(){return Fe},FileActionButtons:Ot};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}});c(),K(),v();var $t={class:`file-info`},en={class:`file-type-icon mit-icon`,"aria-hidden":`true`},tn=[`xlink:href`],nn={class:`file-name-section`},rn=[`title`],an={class:`file-directory`},on={key:0,class:`file-actions`};function sn(e,t,n,r,i,a){let o=j,s=E,c=L;return z(),J(`div`,{class:O([`file-item file-group-item`,{"is-loading":n.isLocking(n.file.path),locked:n.isFileLocked(n.file.path),selected:n.isSelectionMode&&n.isFileSelected?.(n.file.path),[`file-type-${n.file.type}`]:n.file.type}]),onClick:t[7]||=e=>r.handleFileClick(e)},[h(`div`,$t,[N(` 选择模式下显示复选框 `),n.isSelectionMode?(z(),p(o,{key:0,"model-value":n.isFileSelected?.(n.file.path),onChange:t[0]||=e=>r.emit(`toggleFileSelection`,n.file.path),onClick:t[1]||=H(()=>{},[`stop`]),class:`file-checkbox`},null,8,[`model-value`])):N(`v-if`,!0),(z(),J(`svg`,en,[h(`use`,{"xlink:href":`#${r.getFileIcon(n.file.path)}`},null,8,tn)])),h(`div`,nn,[P(c,{content:n.getFileName(n.file.path),placement:`top`,disabled:n.getFileName(n.file.path).length<=25,"show-after":200},{default:G(()=>[h(`div`,{class:O([`file-name`,{"locked-file-name":n.isFileLocked(n.file.path),"deleted-file-name":n.file.type===`deleted`}])},[M(q(n.getFileName(n.file.path))+` `,1),n.isFileLocked(n.file.path)?(z(),p(s,{key:0,class:`lock-indicator`},{default:G(()=>[P(r.Lock)]),_:1})):N(`v-if`,!0)],2)]),_:1},8,[`content`,`disabled`])]),h(`div`,{class:`file-path-section`,title:n.getFileDirectory(n.file.path)},[P(c,{content:n.getFileDirectory(n.file.path),placement:`top`,disabled:n.getFileDirectory(n.file.path).length<=30,"show-after":200},{default:G(()=>[h(`span`,an,q(n.getFileDirectory(n.file.path)),1)]),_:1},8,[`content`,`disabled`])],8,rn),h(`div`,{class:O([`file-status-indicator`,[n.file.type,{locked:n.isFileLocked(n.file.path)}]])},q(r.getStatusLetter(n.file.type)),3)]),N(` 悬浮操作按钮(非选择模式下显示) `),n.isSelectionMode?N(`v-if`,!0):(z(),J(`div`,on,[P(r.FileActionButtons,{"file-path":n.file.path,"file-type":n.file.type,"is-locked":n.isFileLocked(n.file.path),"is-locking":n.isLocking(n.file.path),onToggleLock:t[2]||=e=>r.emit(`toggleFileLock`,e),onStage:t[3]||=e=>r.emit(`stageFile`,e),onUnstage:t[4]||=e=>r.emit(`unstageFile`,e),onRevert:t[5]||=e=>r.emit(`revertFileChanges`,e),onManageLockedFiles:t[6]||=e=>r.emit(`manageLockedFiles`)},null,8,[`file-path`,`file-type`,`is-locked`,`is-locking`])]))],2)}var cn=$(Qt,[[`render`,sn],[`__scopeId`,`data-v-be205496`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/FileRow.vue`]]);function ln(e,t){let n=new Float64Array(e.length+1),r=0;for(let i=0;i<e.length;i++)n[i]=r,r+=t(e[i]);return n[e.length]=r,n}function un(e,t){let n=e.length-2;if(n<0||t<=0)return 0;if(t>=e[n])return n;let r=0,i=n,a=0;for(;r<=i;){let n=r+i>>1;e[n]<=t?(a=n,r=n+1):i=n-1}return a}c(),X();function dn(e,t,n=400){let r=U(null),i=U(null),a=U(0),o=U(0),s=F(()=>ln(e(),t)),c=F(()=>s.value[s.value.length-1]||0),l=F(()=>{let t=e();if(!t.length)return[];let r=s.value,i=un(r,Math.max(0,a.value-n)),c=Math.min(t.length-1,un(r,a.value+o.value+n)),l=[];for(let e=i;e<=c;e++)l.push({row:t[e],index:e,top:r[e]});return l});function u(e){let t=e?.parentElement??null;for(;t;){let e=getComputedStyle(t).overflowY;if((e===`auto`||e===`scroll`||e===`overlay`)&&t.scrollHeight>t.clientHeight)return t;t=t.parentElement}return document.scrollingElement??null}function d(){let e=i.value;e&&(o.value=e.clientHeight,a.value=e.scrollTop)}function f(){let e=i.value;e&&(a.value=e.scrollTop)}let p=null,m=0;function h(){m||=requestAnimationFrame(()=>{m=0,d()})}return _e(()=>{i.value=u(r.value),i.value?.addEventListener(`scroll`,f,{passive:!0}),d(),typeof ResizeObserver<`u`&&i.value&&(p=new ResizeObserver(h),p.observe(i.value))}),Ye(()=>{i.value?.removeEventListener(`scroll`,f),p?.disconnect(),p=null,m&&cancelAnimationFrame(m)}),We(e,()=>{fe(d)}),{root:r,scroller:i,visibleRows:l,totalHeight:c,syncMetrics:d}}function fn(e){return e.kind===`header`?42:29}var pn=[{key:`conflicted`,match:e=>e.type===`conflicted`},{key:`staged`,match:e=>e.type===`added`},{key:`unstaged`,match:e=>e.type===`modified`||e.type===`deleted`},{key:`intent-to-add`,match:e=>e.type===`intent-to-add`},{key:`untracked`,match:e=>e.type===`untracked`}];function mn(e,t,n){let r=[];for(let i of pn){let a=e.filter(i.match);if(!a.length)continue;let o=!!t[i.key];if(r.push({kind:`header`,key:`h:${i.key}`,groupKey:i.key,title:n[i.key],count:a.length,collapsed:o}),!o)for(let e of a)r.push({kind:`file`,key:`f:${i.key}:${e.path}`,groupKey:i.key,file:e})}return r}c();var hn=T({__name:`VirtualFileList`,props:{rows:{type:Array,required:!0},isFileLocked:{type:Function,required:!0},isLocking:{type:Function,required:!0},getFileName:{type:Function,required:!0},getFileDirectory:{type:Function,required:!0},isSelectionMode:{type:Boolean,required:!1,default:!1},isFileSelected:{type:Function,required:!1},overscan:{type:Number,required:!1,default:400}},emits:[`toggleCollapse`,`fileClick`,`toggleFileLock`,`stageFile`,`unstageFile`,`revertFileChanges`,`manageLockedFiles`,`toggleFileSelection`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{root:a,visibleRows:o,totalHeight:s}=dn(()=>r.rows,fn,r.overscan),c={props:r,emit:i,root:a,visibleRows:o,totalHeight:s,get ArrowDown(){return ge},FileRow:cn};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}});c(),v();var gn={ref:`root`,class:`vfl`},_n=[`aria-expanded`,`onClick`],vn={class:`vfl__header-title`},yn={class:`file-count`};function bn(e,t,n,i,a,o){let s=E;return z(),J(`div`,gn,[h(`div`,{class:`vfl__spacer`,style:R({height:`${i.totalHeight}px`})},[(z(!0),J(Z,null,r(i.visibleRows,e=>(z(),J(`div`,{key:e.row.key,class:O([`vfl__row`,e.row.kind===`header`?`vfl__row--header`:`vfl__row--file`]),style:R({transform:`translateY(${e.top}px)`})},[N(` 分组标题行 `),e.row.kind===`header`?(z(),J(`div`,{key:0,class:`vfl__header`,role:`button`,"aria-expanded":!e.row.collapsed,onClick:t=>i.emit(`toggleCollapse`,e.row.groupKey)},[P(s,{class:O([`collapse-icon`,{collapsed:e.row.collapsed}])},{default:G(()=>[P(i.ArrowDown)]),_:1},8,[`class`]),h(`span`,vn,q(e.row.title),1),h(`span`,yn,`(`+q(e.row.count)+`)`,1)],8,_n)):(z(),J(Z,{key:1},[N(` 文件行 `),P(i.FileRow,{file:e.row.file,"is-file-locked":n.isFileLocked,"is-locking":n.isLocking,"get-file-name":n.getFileName,"get-file-directory":n.getFileDirectory,"is-selection-mode":n.isSelectionMode,"is-file-selected":n.isFileSelected,onFileClick:t[0]||=e=>i.emit(`fileClick`,e),onToggleFileLock:t[1]||=e=>i.emit(`toggleFileLock`,e),onStageFile:t[2]||=e=>i.emit(`stageFile`,e),onUnstageFile:t[3]||=e=>i.emit(`unstageFile`,e),onRevertFileChanges:t[4]||=e=>i.emit(`revertFileChanges`,e),onManageLockedFiles:t[5]||=e=>i.emit(`manageLockedFiles`),onToggleFileSelection:t[6]||=e=>i.emit(`toggleFileSelection`,e)},null,8,[`file`,`is-file-locked`,`is-locking`,`get-file-name`,`get-file-directory`,`is-selection-mode`,`is-file-selected`])],2112))],6))),128))],4)],512)}var xn=$(hn,[[`render`,bn],[`__scopeId`,`data-v-8d5a3432`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/VirtualFileList.vue`]]),Sn=42;function Cn(e){return e.kind===`tree-header`?Sn:33}function wn(e,t,n,r){for(let i of e)r.push({kind:`node`,key:`n:${t}:${i.path}`,groupKey:t,level:n,node:{...i,children:void 0},source:i}),i.isDirectory&&i.expanded&&i.children?.length&&wn(i.children,t,n+1,r)}function Tn(e,t){let n=[];for(let r of e){if(!r.tree?.length)continue;let e=!!t[r.key];n.push({kind:`tree-header`,key:`th:${r.key}`,groupKey:r.key,title:r.title,count:r.count,collapsed:e}),!e&&wn(r.tree,r.key,0,n)}return n}c();var En=T({__name:`VirtualFileTree`,props:{rows:{type:Array,required:!0},selectedFile:{type:String,required:!1,default:``},isFileLocked:{type:Function,required:!0},isLocking:{type:Function,required:!0},showActionButtons:{type:Boolean,required:!1,default:!0},overscan:{type:Number,required:!1,default:400}},emits:[`toggleCollapse`,`toggleNode`,`fileSelect`,`toggleLock`,`stage`,`unstage`,`revert`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{root:a,visibleRows:o,totalHeight:s}=dn(()=>r.rows,Cn,r.overscan);function c(e){e.source.isDirectory?i(`toggleNode`,e.source):i(`fileSelect`,{path:e.source.path,type:e.source.type||`modified`})}function l(e){return e.kind===`node`&&e.source.type||`modified`}let u={props:r,emit:i,root:a,visibleRows:o,totalHeight:s,handleNodeClick:c,fileTypeOf:l,get ArrowDown(){return ge},TreeNodeItem:Dt};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});c(),v();var Dn={ref:`root`,class:`vft`},On=[`aria-expanded`,`onClick`],kn={class:`vft__header-title`},An={class:`file-count`};function jn(e,t,n,i,a,o){let s=E;return z(),J(`div`,Dn,[h(`div`,{class:`vft__spacer`,style:R({height:`${i.totalHeight}px`})},[(z(!0),J(Z,null,r(i.visibleRows,e=>(z(),J(`div`,{key:e.row.key,class:O([`vft__row`,e.row.kind===`tree-header`?`vft__row--header`:`vft__row--node`]),style:R({transform:`translateY(${e.top}px)`})},[N(` 分组标题行 `),e.row.kind===`tree-header`?(z(),J(`div`,{key:0,class:`vft__header`,role:`button`,"aria-expanded":!e.row.collapsed,onClick:t=>i.emit(`toggleCollapse`,e.row.groupKey)},[P(s,{class:O([`collapse-icon`,{collapsed:e.row.collapsed}])},{default:G(()=>[P(i.ArrowDown)]),_:1},8,[`class`]),h(`span`,kn,q(e.row.title),1),h(`span`,An,`(`+q(e.row.count)+`)`,1)],8,On)):(z(),J(Z,{key:1},[N(` 节点行(复用 TreeNodeItem) `),P(i.TreeNodeItem,{node:e.row.node,level:e.row.level,"selected-file":n.selectedFile,"show-action-buttons":n.showActionButtons,"is-file-locked":n.isFileLocked,"is-locking":n.isLocking,onNodeClick:t=>i.handleNodeClick(e.row),onFileSelect:t=>i.emit(`fileSelect`,{path:t,type:i.fileTypeOf(e.row)}),onToggleLock:t[0]||=e=>i.emit(`toggleLock`,e),onStage:t[1]||=e=>i.emit(`stage`,e),onUnstage:t[2]||=e=>i.emit(`unstage`,e),onRevert:t[3]||=e=>i.emit(`revert`,e)},null,8,[`node`,`level`,`selected-file`,`show-action-buttons`,`is-file-locked`,`is-locking`,`onNodeClick`,`onFileSelect`])],2112))],6))),128))],4)],512)}var Mn=$(En,[[`render`,jn],[`__scopeId`,`data-v-0be6a060`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/VirtualFileTree.vue`]]);c(),X();var Nn=T({__name:`NpmSettingsDialog`,props:{visible:{type:Boolean,required:!0},packageInfo:{type:Object,required:!0}},emits:[`close`,`complete`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=U(`version`),o=U(`patch`),s=U(!1),c=U(``),l=U(``),u=U(!1),d=U(``),f=U(!1),p=U(!1),m=U(!1),h=U(``);function g(e){return e.trim()?e.includes(` `)?(h.value=Q(`@NPM01:脚本名称不能包含空格`),!1):/^[a-zA-Z_:][a-zA-Z0-9_:.-]*$/.test(e)?(h.value=``,!0):(h.value=Q(`@NPM01:脚本名称只能包含字母、数字、连字符、冒号、下划线和点号,且不能以数字开头`),!1):(h.value=``,!1)}function _(){c.value.trim()?g(c.value):h.value=``}let v=[{label:Q(`@NPM01:主版本号 (major)`),value:`major`,desc:`1.0.0 → 2.0.0`},{label:Q(`@NPM01:次版本号 (minor)`),value:`minor`,desc:`1.0.0 → 1.1.0`},{label:Q(`@NPM01:修订号 (patch)`),value:`patch`,desc:`1.0.0 → 1.0.1`}];async function y(){try{s.value=!0;let e=await(await fetch(`/api/update-npm-version`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:r.packageInfo.path,versionType:o.value})})).json();e.success?(V.success(`${Q(`@NPM01:版本号已更新`)}: ${e.oldVersion} → ${e.newVersion}`),i(`complete`)):V.error(e.error||Q(`@NPM01:更新版本号失败`))}catch(e){console.error(`更新版本号失败:`,e),V.error(Q(`@NPM01:更新版本号失败`))}finally{s.value=!1}}async function b(){if(!c.value.trim()){V.warning(Q(`@NPM01:请输入脚本名称`));return}if(!g(c.value)){V.warning(h.value||Q(`@NPM01:脚本名称格式不正确`));return}if(!l.value.trim()){V.warning(Q(`@NPM01:请输入脚本命令`));return}try{u.value=!0;let e=m.value?`/api/update-npm-script`:`/api/add-npm-script`,t=await(await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:r.packageInfo.path,scriptName:c.value.trim(),scriptCommand:l.value.trim(),oldScriptName:m.value?d.value:void 0})})).json();t.success?(V.success(m.value?Q(`@NPM01:脚本已更新`):Q(`@NPM01:脚本已添加`)),S(),i(`complete`)):V.error(t.error||(m.value?Q(`@NPM01:更新脚本失败`):Q(`@NPM01:添加脚本失败`)))}catch(e){console.error(`保存脚本失败:`,e),V.error(m.value?Q(`@NPM01:更新脚本失败`):Q(`@NPM01:添加脚本失败`))}finally{u.value=!1}}function x(e,t){m.value=!0,d.value=e,c.value=e,l.value=t,h.value=``}function S(){m.value=!1,d.value=``,c.value=``,l.value=``,h.value=``}async function C(e){try{p.value=!0;let t=await(await fetch(`/api/pin-npm-script`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:r.packageInfo.path,scriptName:e})})).json();t.success?(V.success(Q(`@NPM01:脚本已置顶`)),i(`complete`)):V.error(t.error||Q(`@NPM01:置顶脚本失败`))}catch(e){console.error(`置顶脚本失败:`,e),V.error(Q(`@NPM01:置顶脚本失败`))}finally{p.value=!1}}async function w(e){try{await Me.confirm(Q(`@NPM01:确定要删除脚本`)+` "${e}" `+Q(`@NPM01:吗?`),Q(`@NPM01:删除脚本`),{confirmButtonText:Q(`@NPM01:确定`),cancelButtonText:Q(`@NPM01:取消`),type:`warning`}),f.value=!0;let t=await(await fetch(`/api/delete-npm-script`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:r.packageInfo.path,scriptName:e})})).json();t.success?(V.success(Q(`@NPM01:脚本已删除`)),i(`complete`)):V.error(t.error||Q(`@NPM01:删除脚本失败`))}catch(e){e!==`cancel`&&(console.error(`删除脚本失败:`,e),V.error(Q(`@NPM01:删除脚本失败`)))}finally{f.value=!1}}function T(){a.value=`version`,o.value=`patch`,S(),i(`close`)}let ee={props:r,emit:i,activeTab:a,versionType:o,isUpdatingVersion:s,scriptName:c,scriptCommand:l,isAddingScript:u,editingScriptName:d,isDeletingScript:f,isPinningScript:p,isEditMode:m,scriptNameError:h,validateScriptName:g,handleScriptNameInput:_,versionOptions:v,updateVersion:y,saveScript:b,editScript:x,cancelEdit:S,pinScript:C,deleteScript:w,handleClose:T,get $t(){return Q},CommonDialog:Kt};return Object.defineProperty(ee,"__isScriptSetup",{enumerable:!1,value:!0}),ee}});c(),v();var Pn={class:`settings-content`},Fn={class:`package-info-bar`},In={class:`info-label`},Ln={class:`info-value`},Rn={class:`info-path`},zn={class:`tab-content`},Bn={class:`current-version`},Vn={class:`version-label`},Hn={class:`version-value`},Un={class:`version-options`},Wn={class:`option-label`},Gn={class:`radio-content`},Kn={class:`radio-label`},qn={class:`radio-desc`},Jn={class:`tab-content script-management`},Yn={class:`scripts-list-section`},Xn={class:`section-header`},Zn={class:`section-title`},Qn={class:`script-count`},$n={key:0,class:`empty-scripts`},er={key:1,class:`script-items`},tr={class:`script-item-content`},nr={class:`script-name-tag`},rr={class:`name-text`},ir={class:`script-command`},ar={class:`script-item-actions`},or={class:`script-form-section`},sr={class:`section-header`},cr={class:`section-title`},lr={class:`form-group`},ur={class:`form-item`},dr={class:`form-label`},fr={key:0,class:`error-tip`},pr={key:1,class:`success-tip`},mr={class:`form-item`},hr={class:`form-label`};function gr(e,t,n,i,o,s){let c=a,l=A,u=pt,d=we,f=lt,m=E,g=jt,_=I,v=Ee;return z(),p(i.CommonDialog,{"model-value":n.visible,title:n.packageInfo.name+` - `+i.$t(`@NPM01:NPM 设置`),size:`medium`,onClose:i.handleClose},{default:G(()=>[h(`div`,Pn,[N(` 包信息 `),h(`div`,Fn,[h(`span`,In,q(i.$t(`@NPM01:包名称`))+`:`,1),h(`span`,Ln,q(n.packageInfo.name),1),h(`span`,Rn,q(n.packageInfo.relativePath),1)]),N(` 功能选项卡 `),P(v,{modelValue:i.activeTab,"onUpdate:modelValue":t[3]||=e=>i.activeTab=e,class:`settings-tabs`},{default:G(()=>[N(` 版本号增加 `),P(d,{label:i.$t(`@NPM01:版本号管理`),name:`version`},{default:G(()=>[h(`div`,zn,[h(`div`,Bn,[h(`span`,Vn,q(i.$t(`@NPM01:当前版本`))+`:`,1),h(`span`,Hn,q(n.packageInfo.version),1)]),h(`div`,Un,[h(`label`,Wn,q(i.$t(`@NPM01:选择要增加的版本号类型`))+`:`,1),P(l,{modelValue:i.versionType,"onUpdate:modelValue":t[0]||=e=>i.versionType=e,class:`version-radio-group`},{default:G(()=>[(z(),J(Z,null,r(i.versionOptions,e=>P(c,{key:e.value,value:e.value,border:``,class:`version-radio`},{default:G(()=>[h(`div`,Gn,[h(`span`,Kn,q(e.label),1),h(`span`,qn,q(e.desc),1)])]),_:2},1032,[`value`])),64))]),_:1},8,[`modelValue`])]),P(u,{type:`primary`,loading:i.isUpdatingVersion,onClick:i.updateVersion,class:`action-button`},{default:G(()=>[M(q(i.$t(`@NPM01:更新版本号`)),1)]),_:1},8,[`loading`])])]),_:1},8,[`label`]),N(` 脚本管理 `),P(d,{label:i.$t(`@NPM01:脚本管理`),name:`script`},{default:G(()=>[h(`div`,Jn,[N(` 现有脚本列表 `),h(`div`,Yn,[h(`div`,Xn,[h(`span`,Zn,q(i.$t(`@NPM01:当前脚本列表`)),1),h(`span`,Qn,q(Object.keys(n.packageInfo.scripts||{}).length)+` `+q(i.$t(`@NPM01:个脚本`)),1)]),Object.keys(n.packageInfo.scripts||{}).length===0?(z(),J(`div`,$n,[P(f,{description:i.$t(`@NPM01:暂无脚本`),"image-size":80},null,8,[`description`])])):(z(),J(`div`,er,[(z(!0),J(Z,null,r(n.packageInfo.scripts,(e,n)=>(z(),J(`div`,{key:n,class:`script-item-card`},[h(`div`,tr,[h(`div`,nr,[P(m,{class:`script-icon`},{default:G(()=>[...t[4]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M160 224a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64V288a64 64 0 0 0-64-64H160zm0-64h704a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H160A128 128 0 0 1 32 736V288a128 128 0 0 1 128-128z`}),h(`path`,{fill:`currentColor`,d:`m448 327.872 163.2 160-163.2 160-45.248-46.08L502.4 487.872l-99.648-99.84L448 327.872z`})],-1)]]),_:1}),h(`span`,rr,q(n),1)]),h(`div`,ir,[h(`code`,null,q(e),1)])]),h(`div`,ar,[P(u,{size:`small`,text:``,class:`pin-button`,onClick:e=>i.pinScript(n),loading:i.isPinningScript,title:`置顶`},{default:G(()=>[P(g,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:1},8,[`onClick`,`loading`]),P(u,{size:`small`,type:`primary`,text:``,onClick:t=>i.editScript(n,e),disabled:i.isEditMode&&i.editingScriptName===n,title:i.$t(`@NPM01:编辑`)},{default:G(()=>[P(m,null,{default:G(()=>[...t[5]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z`}),h(`path`,{fill:`currentColor`,d:`m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088l-139.456 19.904a32 32 0 0 1-36.224-36.224l19.904-139.456a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.808 0z`})],-1)]]),_:1})]),_:1},8,[`onClick`,`disabled`,`title`]),P(u,{size:`small`,type:`danger`,text:``,onClick:e=>i.deleteScript(n),loading:i.isDeletingScript,title:i.$t(`@NPM01:删除`)},{default:G(()=>[P(m,null,{default:G(()=>[...t[6]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32zm192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z`})],-1)]]),_:1})]),_:1},8,[`onClick`,`loading`,`title`])])]))),128))]))]),N(` 添加/编辑脚本表单 `),h(`div`,or,[h(`div`,sr,[h(`span`,cr,q(i.isEditMode?i.$t(`@NPM01:编辑脚本`):i.$t(`@NPM01:添加新脚本`)),1),i.isEditMode?(z(),p(u,{key:0,size:`small`,text:``,onClick:i.cancelEdit},{default:G(()=>[M(q(i.$t(`@NPM01:取消编辑`)),1)]),_:1})):N(`v-if`,!0)]),h(`div`,lr,[h(`div`,ur,[h(`label`,dr,q(i.$t(`@NPM01:脚本名称`))+`:`,1),P(_,{modelValue:i.scriptName,"onUpdate:modelValue":t[1]||=e=>i.scriptName=e,placeholder:i.$t(`@NPM01:例如: build, dev, test`),disabled:i.isEditMode,clearable:``,onInput:i.handleScriptNameInput},null,8,[`modelValue`,`placeholder`,`disabled`]),i.scriptNameError?(z(),J(`div`,fr,[P(m,null,{default:G(()=>[...t[7]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm0 832a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0zm-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32z`})],-1)]]),_:1}),h(`span`,null,q(i.scriptNameError),1)])):i.scriptName.trim()&&!i.isEditMode?(z(),J(`div`,pr,[P(m,null,{default:G(()=>[...t[8]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336L456.192 600.384z`})],-1)]]),_:1}),h(`span`,null,q(i.$t(`@NPM01:脚本名称格式正确`)),1)])):N(`v-if`,!0)]),h(`div`,mr,[h(`label`,hr,q(i.$t(`@NPM01:脚本命令`))+`:`,1),P(_,{modelValue:i.scriptCommand,"onUpdate:modelValue":t[2]||=e=>i.scriptCommand=e,placeholder:i.$t(`@NPM01:例如: vite build, vite dev`),clearable:``},null,8,[`modelValue`,`placeholder`])])]),P(u,{type:`primary`,loading:i.isAddingScript,disabled:!i.scriptName.trim()||!i.scriptCommand.trim(),onClick:i.saveScript,class:`action-button`},{default:G(()=>[M(q(i.isEditMode?i.$t(`@NPM01:更新脚本`):i.$t(`@NPM01:添加脚本`)),1)]),_:1},8,[`loading`,`disabled`])])])]),_:1},8,[`label`])]),_:1},8,[`modelValue`])])]),_:1},8,[`model-value`,`title`])}var _r=$(Nn,[[`render`,gr],[`__scopeId`,`data-v-86093677`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/NpmSettingsDialog.vue`]]);c(),X();var vr=200,yr=600,br=16,xr=T({__name:`NpmScriptsPanel`,setup(e,{expose:t}){t();let n=U(!0);function r(){n.value=!n.value}let i=U([]),a=U(!1),o=U(new Set),s=U(!1),c=U(``),l=U(null);function u(e){c.value=e.path,l.value=e,s.value=!0}function d(){s.value=!1,c.value=``,l.value=null}function p(){d(),w()}function m(e){if(!e)return null;if(typeof e==`string`)return e;if(typeof e==`object`&&e.url){let t=e.url;return t=t.replace(/^git\+/,``),t=t.replace(/\.git$/,``),t}return null}function h(e){let t=m(e.repository);t&&window.open(t,`_blank`)}let g=U(300),_=U(!1),v=U(0),y=U(0);function b(e){_.value=!0,v.value=e.clientY,y.value=g.value,document.addEventListener(`mousemove`,x),document.addEventListener(`mouseup`,S),e.preventDefault()}function x(e){if(!_.value)return;let t=v.value-e.clientY,n=Math.max(vr,Math.min(yr,y.value+t));g.value=n}function S(){_.value=!1,document.removeEventListener(`mousemove`,x),document.removeEventListener(`mouseup`,S)}function C(e){e.key===`ArrowUp`?(e.preventDefault(),g.value=Math.min(yr,g.value+br)):e.key===`ArrowDown`?(e.preventDefault(),g.value=Math.max(vr,g.value-br)):e.key===`Home`?(e.preventDefault(),g.value=yr):e.key===`End`&&(e.preventDefault(),g.value=vr)}async function w(){let e=Date.now();console.log(`[NPM面板] 开始加载npm脚本...`);try{a.value=!0;let t=new AbortController,n=3e4,r=setTimeout(()=>{t.abort(),console.warn(`[NPM面板] 超时${n}ms,中断请求`)},n);console.log(`[NPM面板] 发起请求到后端(超时${n}ms)...`);let o=Date.now(),s=await fetch(`/api/scan-npm-scripts`,{signal:t.signal});clearTimeout(r);let c=Date.now()-o;console.log(`[NPM面板] 后端响应完成,耗时${c}ms`);let l=Date.now(),u=await s.json(),d=Date.now()-l;if(console.log(`[NPM面板] JSON解析完成,耗时${d}ms`),u.success){if(u.cancelled){console.log(`[NPM面板] 扫描被取消,总耗时${Date.now()-e}ms`);return}i.value=u.packages,console.log(`[NPM面板] 加载完成,找到${i.value.length}个package.json,共${u.totalScripts}个脚本,总耗时${Date.now()-e}ms`),i.value.length===0&&console.log(`[NPM面板] 未找到包含scripts的package.json`)}else console.error(`[NPM面板] 加载失败,耗时${Date.now()-e}ms`),V.error(Q(`@NPM01:加载npm脚本失败`))}catch(t){t.name===`AbortError`?(console.warn(`[NPM面板] 请求超时被中断,耗时${Date.now()-e}ms`),V.warning(`NPM脚本扫描超时,请稍后重试`)):console.error(`[NPM面板] 加载失败,耗时${Date.now()-e}ms,错误:`,t)}finally{a.value=!1}}function T(e){o.value.has(e)?o.value.delete(e):o.value.add(e)}async function ee(e,t){try{let n=await(await fetch(`/api/run-npm-script`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:e,scriptName:t})})).json();n.success?V.success(`${Q(`@NPM01:已在新终端中执行`)}: ${t}`):V.error(n.error||Q(`@NPM01:执行脚本失败`))}catch(e){console.error(`执行npm脚本失败:`,e),V.error(`${Q(`@NPM01:执行脚本失败`)}: ${e.message}`)}}_e(()=>{w()});let E={collapsed:n,toggleCollapsed:r,packages:i,isLoading:a,expandedPackages:o,showSettingsDialog:s,selectedPackagePath:c,selectedPackageInfo:l,openSettings:u,closeSettings:d,handleSettingsComplete:p,getRepositoryUrl:m,openRepository:h,panelHeight:g,isResizing:_,startY:v,startHeight:y,MIN_PANEL_HEIGHT:vr,MAX_PANEL_HEIGHT:yr,KEY_NUDGE_PX:br,startResize:b,handleResize:x,stopResize:S,onResizeKeydown:C,loadNpmScripts:w,togglePackage:T,runScript:ee,get FolderOpened(){return f},get $t(){return Q},NpmSettingsDialog:_r,IconButton:Mt,SvgIcon:jt};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}});c(),v(),K();var Sr={class:`npm-scripts-panel`},Cr={class:`header-left`},wr={class:`panel-title`},Tr=[`aria-valuenow`,`aria-label`],Er={key:0,class:`loading-container`},Dr={class:`loading-text`},Or={key:1,class:`empty-container`},kr={class:`empty-text`},Ar=[`onClick`],jr={class:`package-info`},Mr={class:`package-name`},Nr={class:`package-path`},Pr={key:0,class:`scripts-list`},Fr=[`onClick`],Ir={class:`script-left`},Lr={class:`script-name`},Rr={class:`script-command`};function zr(e,t,n,i,a,o){let s=E,c=L;return z(),J(`div`,Sr,[h(`div`,{class:`panel-header accordion-header`,onClick:i.toggleCollapsed},[h(`div`,Cr,[P(s,{class:O([`accordion-chevron`,{"is-collapsed":i.collapsed}])},{default:G(()=>[...t[1]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`]),P(i.SvgIcon,{"icon-class":`npm`,"class-name":`npm-icon`}),h(`span`,wr,q(i.$t(`@NPM01:NPM 脚本`)),1)]),h(`div`,{class:`header-right`,onClick:t[0]||=H(()=>{},[`stop`])},[P(i.IconButton,{size:`small`,disabled:i.isLoading,onClick:i.loadNpmScripts},{default:G(()=>[P(s,{class:O({"is-rotating":i.isLoading})},{default:G(()=>[...t[2]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z`})],-1)]]),_:1},8,[`class`])]),_:1},8,[`disabled`])])]),N(` 调节高度的拖拽条(展开时显示) OPT-4: 补 role/tabindex/aria-orientation + 键盘 nudge `),Y(h(`div`,{class:`resize-handle`,role:`separator`,tabindex:`0`,"aria-orientation":`horizontal`,"aria-valuenow":i.panelHeight,"aria-valuemin":i.MIN_PANEL_HEIGHT,"aria-valuemax":i.MAX_PANEL_HEIGHT,"aria-label":i.$t(`@NPM01:调整 NPM 脚本面板高度(上下方向键)`),onMousedown:i.startResize,onKeydown:i.onResizeKeydown},null,40,Tr),[[at,!i.collapsed]]),!i.collapsed&&i.isLoading?(z(),J(`div`,Er,[P(s,{class:`is-loading loading-icon`},{default:G(()=>[...t[3]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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}),h(`p`,Dr,q(i.$t(`@NPM01:正在扫描项目中的 npm 脚本...`)),1)])):!i.collapsed&&i.packages.length===0?(z(),J(`div`,Or,[t[4]||=h(`svg`,{class:`empty-icon`,viewBox:`0 0 1024 1024`,width:`64`,height:`64`},[h(`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),h(`p`,kr,q(i.$t(`@NPM01:当前项目中未找到包含 scripts 的 package.json`)),1)])):i.collapsed?N(`v-if`,!0):(z(),J(`div`,{key:2,class:`packages-container`,style:R({maxHeight:i.panelHeight+`px`})},[(z(!0),J(Z,null,r(i.packages,e=>(z(),J(`div`,{key:e.path,class:`package-item`},[h(`div`,{class:`package-header`,onClick:t=>i.togglePackage(e.path)},[P(s,{class:O([`expand-icon`,{expanded:i.expandedPackages.has(e.path)}])},{default:G(()=>[...t[5]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`]),P(s,{class:`folder-icon`},{default:G(()=>[P(i.FolderOpened)]),_:1}),h(`div`,jr,[h(`span`,Mr,q(e.name),1),h(`span`,Nr,q(e.relativePath),1)]),i.getRepositoryUrl(e.repository)?(z(),p(c,{key:0,content:i.getRepositoryUrl(e.repository),placement:`bottom`,"show-after":300},{default:G(()=>[P(s,{class:`repo-icon`,onClick:H(t=>i.openRepository(e),[`stop`])},{default:G(()=>[...t[6]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M458.64 119.072a84.176 84.176 0 0 1 106.72 0l366.912 300.4a32 32 0 0 1-40.544 49.52L524.816 168.592a20.176 20.176 0 0 0-25.632 0L132.272 468.992a32 32 0 1 1-40.544-49.52L458.64 119.072zM304.32 415.184c0-27.2 22-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552H353.76a49.504 49.504 0 0 1-49.472-49.552V415.2z m64 14.432v67.68h66.976v-67.68H368.32z m-162.976 36.96a32 32 0 0 1 32 32v307.2c0 21.28 17.12 38.224 37.856 38.224h471.52a38.032 38.032 0 0 0 37.84-38.224v-307.2a32 32 0 1 1 64 0v307.2c0 56.304-45.44 102.224-101.856 102.224H275.2c-56.4 0-101.856-45.92-101.856-102.224v-307.2a32 32 0 0 1 32-32z m98.976 168.048c0-27.216 22-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552H353.76a49.504 49.504 0 0 1-49.472-49.552v-96.544z m64 14.432v67.68h66.976v-67.68H368.32z m154.288-14.432c0-27.216 21.984-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552h-96.048a49.504 49.504 0 0 1-49.472-49.552v-96.544z m64 14.432v67.68h66.976v-67.68h-66.976z`})],-1)]]),_:1},8,[`onClick`])]),_:2},1032,[`content`])):N(`v-if`,!0),P(s,{class:`settings-icon`,onClick:H(t=>i.openSettings(e),[`stop`])},{default:G(()=>[...t[7]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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},8,[`onClick`])],8,Ar),i.expandedPackages.has(e.path)?(z(),J(`div`,Pr,[(z(!0),J(Z,null,r(e.scripts,(n,r)=>(z(),J(`div`,{key:r,class:`script-item`,onClick:t=>i.runScript(e.path,r)},[h(`div`,Ir,[P(s,{class:`play-icon`},{default:G(()=>[...t[8]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`}),h(`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`})],-1)]]),_:1}),h(`span`,Lr,q(r),1)]),h(`span`,Rr,q(n),1)],8,Fr))),128))])):N(`v-if`,!0)]))),128))],4)),N(` 设置对话框 `),i.selectedPackageInfo?(z(),p(i.NpmSettingsDialog,{key:3,visible:i.showSettingsDialog,"package-info":i.selectedPackageInfo,onClose:i.closeSettings,onComplete:i.handleSettingsComplete},null,8,[`visible`,`package-info`])):N(`v-if`,!0)])}var Br=$(xr,[[`render`,zr],[`__scopeId`,`data-v-13486225`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/NpmScriptsPanel.vue`]]);c(),X();var Vr=T({__name:`StashChangesButton`,props:{variant:{type:String,required:!1,default:`icon`}},setup(e,{expose:t}){t();let n=e,r=Bt(),i=Lt(),a=U(!1),s=U(``),c=U(!0),l=U(!1),u=F(()=>r.fileList.some(e=>e.type===`modified`||e.type===`added`||e.type===`deleted`||e.type===`untracked`||e.type===`intent-to-add`)),d=F(()=>{if(!u.value)return!1;let e=r.fileList.filter(e=>e.type===`modified`||e.type===`added`||e.type===`deleted`||e.type===`untracked`||e.type===`intent-to-add`);return e.length!==0&&e.every(e=>{let t=e.path.replace(/\\/g,`/`);return i.lockedFiles.some(e=>{let n=e.replace(/\\/g,`/`);return t===n})})});function f(){s.value=``,d.value||(l.value=!1),a.value=!0}async function p(){try{await r.saveStash(s.value,c.value,l.value),a.value=!1}catch(e){console.error(`储藏失败:`,e)}}function m(e){if(!(e.isComposing||e.keyCode===229)&&e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),r.isSavingStash||r.hasConflictedFiles)return;p()}}let h={props:n,gitStore:r,configStore:i,isStashDialogVisible:a,stashMessage:s,includeUntracked:c,excludeLocked:l,anyChangesIncludingLocked:u,allChangesAreLocked:d,openStashDialog:f,saveStash:p,handleStashMessageKeydown:m,get $t(){return Q},get Setting(){return te},get Document(){return qe},get Loading(){return o},get Check(){return nt},CommonDialog:Kt,IconButton:Mt,SvgIcon:jt};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}});c(),v();var Hr={key:0,class:`stash-changes-button`},Ur={class:`stash-dialog-content`},Wr={class:`stash-info-card`},Gr={class:`info-icon`},Kr={class:`info-content`},qr={class:`stash-options`},Jr={class:`options-title`},Yr={class:`option-item`},Xr={class:`option-label`},Zr={class:`option-desc`},Qr={class:`option-item`},$r={class:`option-label`},ei={key:0,class:`stash-preview`},ti={class:`preview-title`},ni={class:`file-count-info`},ri={class:`dialog-footer`},ii={class:`footer-actions`},ai=[`disabled`];function oi(e,t,n,r,i,a){let o=E,s=pt,c=I,l=ne,u=j,d=k,f=b;return r.anyChangesIncludingLocked?(z(),J(`div`,Hr,[N(` 储藏更改按钮 `),r.props.variant===`icon`?(z(),p(r.IconButton,{key:0,tooltip:r.gitStore.hasConflictedFiles?r.$t(`@76872:存在冲突文件,请先解决冲突`):r.$t(`@76872:将工作区更改储藏起来`),size:`medium`,disabled:r.gitStore.hasConflictedFiles||r.gitStore.isSavingStash,"hover-color":`var(--color-warning)`,onClick:r.openStashDialog},{default:G(()=>[r.gitStore.isSavingStash?(z(),p(o,{key:0,class:`is-loading`},{default:G(()=>[P(r.Loading)]),_:1})):(z(),p(r.SvgIcon,{key:1,"icon-class":`git-stash`}))]),_:1},8,[`tooltip`,`disabled`])):(z(),p(s,{key:1,type:`warning`,class:`action-button`,onClick:r.openStashDialog,loading:r.gitStore.isSavingStash,disabled:r.gitStore.hasConflictedFiles},{default:G(()=>[M(q(r.$t(`@76872:储藏更改`)),1)]),_:1},8,[`loading`,`disabled`])),N(` Stash弹窗:创建储藏 `),P(r.CommonDialog,{modelValue:r.isStashDialogVisible,"onUpdate:modelValue":t[4]||=e=>r.isStashDialogVisible=e,title:r.$t(`@76872:储藏更改 (Git Stash)`),size:`medium`,"close-on-click-modal":!1,"custom-class":`stash-dialog`},{footer:G(()=>[h(`div`,ri,[h(`div`,ii,[h(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[3]||=e=>r.isStashDialogVisible=!1},q(r.$t(`@76872:取消`)),1),h(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:r.saveStash,disabled:r.gitStore.isSavingStash||r.gitStore.hasConflictedFiles},[r.gitStore.isSavingStash?(z(),p(o,{key:1,class:`is-loading`},{default:G(()=>[P(r.Loading)]),_:1})):(z(),p(o,{key:0},{default:G(()=>[P(r.Check)]),_:1})),h(`span`,null,q(r.$t(`@76872:储藏`)),1)],8,ai)])])]),default:G(()=>[h(`div`,Ur,[N(` 功能说明卡片 `),h(`div`,Wr,[h(`div`,Gr,[P(r.SvgIcon,{"icon-class":`git-stash`})]),h(`div`,Kr,[h(`h4`,null,q(r.$t(`@76872:储藏工作区更改`)),1),h(`p`,null,q(r.$t(`@76872:将当前工作区的更改临时保存,稍后可以重新应用到任何分支`)),1)])]),P(f,{"label-position":`top`,class:`stash-form`},{default:G(()=>[P(l,{label:r.$t(`@76872:储藏说明`)},{default:G(()=>[P(c,{modelValue:r.stashMessage,"onUpdate:modelValue":t[0]||=e=>r.stashMessage=e,placeholder:r.$t(`@76872:为这次储藏添加描述信息(可选)`),clearable:``,onKeydown:r.handleStashMessageKeydown,rows:2,type:`textarea`,resize:`none`,maxlength:`200`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),N(` 选项配置 `),h(`div`,qr,[h(`h5`,Jr,[P(o,null,{default:G(()=>[P(r.Setting)]),_:1}),M(` `+q(r.$t(`@76872:储藏选项`)),1)]),h(`div`,Yr,[P(u,{modelValue:r.includeUntracked,"onUpdate:modelValue":t[1]||=e=>r.includeUntracked=e,size:`large`},{default:G(()=>[h(`span`,Xr,q(r.$t(`@76872:包含未跟踪文件`)),1)]),_:1},8,[`modelValue`]),h(`p`,Zr,q(r.$t(`@76872:同时储藏新建但未添加到Git的文件 (--include-untracked)`)),1)]),h(`div`,Qr,[P(u,{modelValue:r.excludeLocked,"onUpdate:modelValue":t[2]||=e=>r.excludeLocked=e,disabled:r.allChangesAreLocked,size:`large`},{default:G(()=>[h(`span`,$r,q(r.$t(`@76872:排除锁定文件`)),1)]),_:1},8,[`modelValue`,`disabled`]),h(`p`,{class:O([`option-desc`,{disabled:r.allChangesAreLocked}])},q(r.$t(`@76872:不储藏被锁定的文件,保持其当前状态`)),3)])]),N(` 储藏预览信息 `),r.gitStore.status.staged.length>0||r.gitStore.status.unstaged.length>0?(z(),J(`div`,ei,[h(`h5`,ti,[P(o,null,{default:G(()=>[P(r.Document)]),_:1}),M(` `+q(r.$t(`@76872:将要储藏的文件`)),1)]),h(`div`,ni,[r.gitStore.status.staged.length>0?(z(),p(d,{key:0,type:`success`},{default:G(()=>[M(q(r.$t(`@76872:已暂存: `))+q(r.gitStore.status.staged.length)+` `+q(r.$t(`@76872:个文件`)),1)]),_:1})):N(`v-if`,!0),r.gitStore.status.unstaged.length>0?(z(),p(d,{key:1,type:`warning`},{default:G(()=>[M(q(r.$t(`@76872:未暂存: `))+q(r.gitStore.status.unstaged.length)+` `+q(r.$t(`@76872:个文件`)),1)]),_:1})):N(`v-if`,!0)])])):N(`v-if`,!0)]),_:1})])]),_:1},8,[`modelValue`,`title`])])):N(`v-if`,!0)}var si=$(Vr,[[`render`,oi],[`__scopeId`,`data-v-469ed533`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/StashChangesButton.vue`]]);c(),X();var ci=T({__name:`StashListButton`,props:{variant:{type:String,required:!1,default:`icon`}},setup(e,{expose:t}){t();let r=e,i=Bt(),a=Ht(),o=U(!1),s=U(!1),c=U(null),l=U([]),u=U(``),d=U(!1),f=U(``),p=U(`compare`),m=U(``),h=U(``),g=F(()=>l.value.map(e=>({path:e,name:e.split(`/`).pop()||e})));function _(){i.getStashList(),o.value=!0}async function v(e,t=!1){try{await i.applyStash(e,t),t&&await i.getStashList()}catch(e){console.error(`应用储藏失败:`,e)}}async function y(e){Me.confirm(Q(`@76872:确定要删除此储藏吗?此操作不可恢复。`),Q(`@76872:删除储藏`),{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),type:`warning`}).then(async()=>{await i.dropStash(e),await i.getStashList()}).catch(()=>{})}async function b(){Me.confirm(Q(`@76872:确定要清空所有储藏吗?此操作不可恢复。`),Q(`@76872:清空所有储藏`),{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),type:`warning`}).then(async()=>{await i.clearAllStashes(),await i.getStashList()}).catch(()=>{})}async function x(e){if(e){c.value=e,s.value=!0,d.value=!0,l.value=[],u.value=``,m.value=``,h.value=``,f.value=``;try{if(!e.id||e.id.length<7){u.value=Q(`@76872:无效的stash ID`),d.value=!1;return}let t=await(await fetch(`/api/stash-files?stashId=${encodeURIComponent(e.id)}`)).json();t.success&&Array.isArray(t.files)?(l.value=t.files,l.value.length>0?p.value===`compare`?await C(e.id,l.value[0]):await S(e.id,l.value[0]):u.value=Q(`@76872:该stash没有变更文件`)):u.value=`${Q(`@76872:获取文件列表失败: `)}${t.error||Q(`@76872:未知错误`)}`}catch(e){u.value=`${Q(`@76872:获取stash详情失败: `)}${e.message}`}finally{d.value=!1}}}async function S(e,t){d.value=!0,f.value=t;try{let n=await(await fetch(`/api/stash-file-diff?stashId=${encodeURIComponent(e)}&file=${encodeURIComponent(t)}`)).json();n.success?u.value=n.diff||Q(`@76872:没有变更内容`):u.value=`${Q(`@76872:获取差异失败: `)}${n.error||Q(`@76872:未知错误`)}`}catch(e){u.value=`${Q(`@76872:获取差异失败: `)}${e.message}`}finally{d.value=!1}}async function C(e,t){d.value=!0,f.value=t,u.value=``;try{let n=await(await fetch(`/api/stash-file-compare?stashId=${encodeURIComponent(e)}&file=${encodeURIComponent(t)}`)).json();n.success?(m.value=n.original??``,h.value=n.modified??``):(m.value=``,h.value=``)}catch{m.value=``,h.value=``}finally{d.value=!1}}function w(){p.value=`diff`,c.value&&f.value&&S(c.value.id,f.value)}function T(){p.value=`compare`,c.value&&f.value&&C(c.value.id,f.value)}function ee(e){c.value&&(p.value===`compare`?C(c.value.id,e):S(c.value.id,e))}async function E(e,t){try{let n=await(await fetch(`/api/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?V.success(n.message):V.error(n.error||Q(`@76872:打开文件失败`))}catch(e){V.error(`${Q(`@76872:打开文件失败: `)}${e.message}`)}}async function D(e,t){try{let n=await(await fetch(`/api/open-with-vscode`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?V.success(n.message):V.error(n.error||Q(`@76872:用VSCode打开文件失败`))}catch(e){V.error(`${Q(`@76872:用VSCode打开文件失败: `)}${e.message}`)}}function O(e,t){o.value=!1,window.dispatchEvent(new CustomEvent(`zen-gitsync:open-file-in-editor`,{detail:{filePath:e}}))}let te={props:r,gitStore:i,toolsStore:a,isStashListDialogVisible:o,stashDetailVisible:s,selectedStash:c,stashFiles:l,stashDiff:u,isLoadingStashDetail:d,selectedStashFile:f,stashDiffViewMode:p,stashCompareOriginal:m,stashCompareModified:h,stashFilesForViewer:g,openStashListDialog:_,applyStash:v,confirmDropStash:y,confirmClearAllStashes:b,viewStashDetail:x,getStashFileDiff:S,getStashFileCompare:C,showStashDiffOnly:w,showStashFullCompare:T,handleStashFileSelect:ee,handleOpenFile:E,handleOpenWithVSCode:D,handleOpenInEditor:O,get $t(){return Q},get Box(){return n},get Delete(){return Re},get Edit(){return je},get Download(){return Be},get Check(){return nt},CommonDialog:Kt,FileDiffViewer:At,IconButton:Mt};return Object.defineProperty(te,"__isScriptSetup",{enumerable:!1,value:!0}),te}});c(),v();var li={class:`stash-list-button`},ui={class:`stash-list-content`},di={key:0,class:`stash-header`},fi={class:`stash-stats`},pi={class:`stat-item`},mi={class:`stat-number`},hi={class:`stat-label`},gi={key:0,class:`stash-actions-header`},_i={class:`stash-list-container`},vi={key:0,class:`empty-state`},yi={class:`empty-text`},bi={class:`empty-hint`},xi={key:1,class:`stash-cards`},Si={class:`stash-card-content`},Ci={class:`stash-info`},wi={class:`stash-main-info`},Ti={class:`stash-id-badge`},Ei={class:`stash-id-text`},Di={class:`stash-description`},Oi={class:`description-text`},ki={class:`stash-card-actions`},Ai={class:`stash-content`},ji={key:0,class:`stash-info-row`},Mi={class:`stash-id`},Ni={class:`stash-id-value`},Pi={class:`stash-description`},Fi={class:`info-label`},Ii={class:`stash-description-value`},Li={class:`stash-main-content`};function Ri(e,t,n,i,a,o){let s=E,c=pt,l=lt,u=k,d=He;return z(),J(`div`,li,[N(` 储藏列表按钮 `),i.props.variant===`icon`?(z(),p(i.IconButton,{key:0,tooltip:i.$t(`@76872:查看和管理所有储藏记录`),size:`medium`,"hover-color":`var(--color-info)`,onClick:i.openStashListDialog},{default:G(()=>[P(s,null,{default:G(()=>[P(i.Box)]),_:1})]),_:1},8,[`tooltip`])):(z(),p(c,{key:1,type:`info`,class:`action-button`,onClick:i.openStashListDialog},{default:G(()=>[M(q(i.$t(`@76872:储藏列表`)),1)]),_:1})),N(` Stash列表弹窗 `),P(i.CommonDialog,{modelValue:i.isStashListDialogVisible,"onUpdate:modelValue":t[0]||=e=>i.isStashListDialogVisible=e,title:i.$t(`@76872:储藏列表 (Git Stash)`),size:`large`,"show-footer":!1,"custom-class":`stash-list-dialog`},{default:G(()=>[h(`div`,ui,[N(` 头部统计信息 `),i.gitStore.isLoadingStashes?N(`v-if`,!0):(z(),J(`div`,di,[h(`div`,fi,[h(`div`,pi,[P(s,{class:`stat-icon`},{default:G(()=>[P(i.Box)]),_:1}),h(`span`,mi,q(i.gitStore.stashes.length),1),h(`span`,hi,q(i.$t(`@76872:个储藏`)),1)])]),i.gitStore.stashes.length>0?(z(),J(`div`,gi,[P(c,{type:`danger`,size:`small`,icon:i.Delete,onClick:i.confirmClearAllStashes,loading:i.gitStore.isDroppingStash,class:`clear-all-btn`},{default:G(()=>[M(q(i.$t(`@76872:清空所有储藏`)),1)]),_:1},8,[`icon`,`loading`])])):N(`v-if`,!0)])),N(` 储藏列表 `),Y((z(),J(`div`,_i,[i.gitStore.stashes.length===0&&!i.gitStore.isLoadingStashes?(z(),J(`div`,vi,[P(l,{description:i.$t(`@76872:暂无储藏记录`),"image-size":120},{image:G(()=>[P(s,{class:`empty-icon`},{default:G(()=>[P(i.Box)]),_:1})]),description:G(()=>[h(`p`,yi,q(i.$t(`@76872:还没有任何储藏记录`)),1),h(`p`,bi,q(i.$t(`@76872:使用 git stash 可以临时保存工作进度`)),1)]),_:1},8,[`description`])])):(z(),J(`div`,xi,[(z(!0),J(Z,null,r(i.gitStore.stashes,(e,t)=>(z(),J(`div`,{key:e.id,class:O([`stash-card`,{"stash-card-latest":t===0}])},[h(`div`,Si,[h(`div`,Ci,[h(`div`,wi,[h(`div`,Ti,[P(s,{class:`badge-icon`},{default:G(()=>[P(i.Box)]),_:1}),h(`span`,Ei,q(e.id),1),t===0?(z(),p(u,{key:0,size:`small`,type:`success`,class:`latest-tag`},{default:G(()=>[M(q(i.$t(`@76872:最新`)),1)]),_:1})):N(`v-if`,!0)]),h(`div`,Di,[h(`span`,Oi,q(e.description),1)])])]),h(`div`,ki,[P(c,{size:`small`,type:`info`,icon:i.Edit,onClick:t=>i.viewStashDetail(e),loading:i.isLoadingStashDetail,class:`action-btn view-btn`},{default:G(()=>[M(q(i.$t(`@76872:查看`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),P(c,{size:`small`,type:`success`,icon:i.Download,onClick:t=>i.applyStash(e.id,!1),loading:i.gitStore.isApplyingStash,class:`action-btn apply-btn`},{default:G(()=>[M(q(i.$t(`@76872:应用`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),P(c,{size:`small`,type:`primary`,icon:i.Check,onClick:t=>i.applyStash(e.id,!0),loading:i.gitStore.isApplyingStash,class:`action-btn apply-pop-btn`},{default:G(()=>[M(q(i.$t(`@76872:应用并删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),P(c,{size:`small`,type:`danger`,icon:i.Delete,onClick:t=>i.confirmDropStash(e.id),loading:i.gitStore.isDroppingStash,class:`action-btn delete-btn`},{default:G(()=>[M(q(i.$t(`@76872:删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`])])])],2))),128))]))])),[[d,i.gitStore.isLoadingStashes]])])]),_:1},8,[`modelValue`,`title`]),N(` Stash详情弹窗 `),P(i.CommonDialog,{modelValue:i.stashDetailVisible,"onUpdate:modelValue":t[1]||=e=>i.stashDetailVisible=e,title:i.$t(`@76872:储藏详情`),"custom-class":`stash-detail-dialog`,size:`extra-large`,type:`flex`,heightMode:`fixed`,"close-on-click-modal":!1},{default:G(()=>[h(`div`,Ai,[N(` 储藏信息横向布局 `),i.selectedStash?(z(),J(`div`,ji,[h(`div`,Mi,[t[2]||=h(`span`,{class:`info-label`},`Stash ID:`,-1),h(`code`,Ni,q(i.selectedStash.id),1)]),h(`div`,Pi,[h(`span`,Fi,q(i.$t(`@76872:描述:`)),1),h(`span`,Ii,q(i.selectedStash.description),1)])])):N(`v-if`,!0),N(` 文件差异查看器 `),h(`div`,Li,[P(i.FileDiffViewer,{files:i.stashFilesForViewer,diffContent:i.stashDiff,selectedFile:i.selectedStashFile,isLoading:i.isLoadingStashDetail,compareMode:i.stashDiffViewMode===`compare`,compareOriginal:i.stashCompareOriginal,compareModified:i.stashCompareModified,context:`stash-detail`,emptyText:i.$t(`@76872:该stash没有变更文件`),showVscodeButton:i.toolsStore.vscodeAvailable,onFileSelect:i.handleStashFileSelect,onOpenFile:i.handleOpenFile,onOpenWithVscode:i.handleOpenWithVSCode,onOpenInEditor:i.handleOpenInEditor},{"header-extra":G(()=>[P(c,{size:`small`,type:i.stashDiffViewMode===`diff`?`primary`:`default`,onClick:i.showStashDiffOnly},{default:G(()=>[M(q(i.$t(`@76872:仅显示差异`)),1)]),_:1},8,[`type`]),P(c,{size:`small`,type:i.stashDiffViewMode===`compare`?`primary`:`default`,onClick:i.showStashFullCompare},{default:G(()=>[M(q(i.$t(`@76872:显示完整对比`)),1)]),_:1},8,[`type`])]),_:1},8,[`files`,`diffContent`,`selectedFile`,`isLoading`,`compareMode`,`compareOriginal`,`compareModified`,`emptyText`,`showVscodeButton`])])])]),_:1},8,[`modelValue`,`title`])])}var zi=$(ci,[[`render`,Ri],[`__scopeId`,`data-v-a07cc588`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/StashListButton.vue`]]);c(),X();var Bi=T({__name:`StashSelectedFilesButton`,props:{selectedFiles:{type:Array,required:!0},variant:{type:String,required:!1,default:`icon`}},emits:[`success`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Bt(),s=Lt(),c=U(!1),l=U(``),u=U(!0),d=U(!1),f=F(()=>r.selectedFiles.length>0),p=F(()=>r.selectedFiles.filter(e=>{let t=e.replace(/\\/g,`/`);return s.lockedFiles.some(e=>{let n=e.replace(/\\/g,`/`);return t===n})}));function m(){if(!f.value){V.warning(Q(`@76872:请先选择要储藏的文件`));return}l.value=``,d.value=!1,c.value=!0}async function h(){try{let e=r.selectedFiles;if(d.value&&p.value.length>0&&(e=r.selectedFiles.filter(e=>{let t=e.replace(/\\/g,`/`);return!s.lockedFiles.some(e=>{let n=e.replace(/\\/g,`/`);return t===n})}),e.length===0)){V.warning(Q(`@76872:所有选中的文件都是锁定文件,无法储藏`));return}await a.savePartialStash(e,l.value,u.value),c.value=!1,i(`success`)}catch(e){console.error(`储藏选中文件失败:`,e)}}function g(e){if(!(e.isComposing||e.keyCode===229)&&e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),a.isSavingStash)return;h()}}let _={props:r,emit:i,gitStore:a,configStore:s,isStashDialogVisible:c,stashMessage:l,includeUntracked:u,excludeLocked:d,hasSelectedFiles:f,lockedFilesInSelection:p,openStashDialog:m,saveStash:h,handleStashMessageKeydown:g,get $t(){return Q},get Setting(){return te},get Loading(){return o},get Check(){return nt},CommonDialog:Kt,IconButton:Mt,SvgIcon:jt};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}});c(),v();var Vi={key:0,class:`stash-selected-files-button`},Hi={class:`stash-dialog-content`},Ui={class:`stash-info-card`},Wi={class:`info-icon`},Gi={class:`info-content`},Ki={class:`stash-options`},qi={class:`options-title`},Ji={class:`option-item`},Yi={class:`option-label`},Xi={class:`option-desc`},Zi={class:`option-item`},Qi={class:`option-label`},$i={class:`option-desc`},ea={key:0,class:`locked-count`},ta={class:`stash-preview`},na={class:`preview-title`},ra={class:`file-count-info`},ia={class:`file-list-preview`},aa={key:0,class:`more-files`},oa={class:`dialog-footer`},sa={class:`footer-actions`},ca=[`disabled`];function la(e,t,n,i,a,o){let s=E,c=pt,l=I,u=ne,d=j,f=k,m=b;return i.hasSelectedFiles?(z(),J(`div`,Vi,[N(` 储藏选中文件按钮 `),i.props.variant===`icon`?(z(),p(i.IconButton,{key:0,tooltip:i.$t(`@76872:储藏选中的文件`),size:`large`,disabled:i.gitStore.isSavingStash||!i.hasSelectedFiles,"hover-color":`var(--color-warning)`,onClick:i.openStashDialog},{default:G(()=>[i.gitStore.isSavingStash?(z(),p(s,{key:0,class:`is-loading`},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(i.SvgIcon,{key:1,"icon-class":`git-stash`}))]),_:1},8,[`tooltip`,`disabled`])):(z(),p(c,{key:1,type:`warning`,class:`action-button`,onClick:i.openStashDialog,loading:i.gitStore.isSavingStash,disabled:!i.hasSelectedFiles},{default:G(()=>[M(q(i.$t(`@76872:储藏选中文件`))+` (`+q(i.props.selectedFiles.length)+`) `,1)]),_:1},8,[`loading`,`disabled`])),N(` Stash弹窗:储藏选中的文件 `),P(i.CommonDialog,{modelValue:i.isStashDialogVisible,"onUpdate:modelValue":t[4]||=e=>i.isStashDialogVisible=e,title:i.$t(`@76872:储藏选中的文件`),size:`medium`,"close-on-click-modal":!1,"custom-class":`stash-dialog`},{footer:G(()=>[h(`div`,oa,[h(`div`,sa,[h(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[3]||=e=>i.isStashDialogVisible=!1},q(i.$t(`@76872:取消`)),1),h(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:i.saveStash,disabled:i.gitStore.isSavingStash},[i.gitStore.isSavingStash?(z(),p(s,{key:1,class:`is-loading`},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(s,{key:0},{default:G(()=>[P(i.Check)]),_:1})),h(`span`,null,q(i.$t(`@76872:储藏`)),1)],8,ca)])])]),default:G(()=>[h(`div`,Hi,[N(` 功能说明卡片 `),h(`div`,Ui,[h(`div`,Wi,[P(i.SvgIcon,{"icon-class":`git-stash`})]),h(`div`,Gi,[h(`h4`,null,q(i.$t(`@76872:储藏选中的文件`)),1),h(`p`,null,q(i.$t(`@76872:将选中的文件更改临时保存,稍后可以重新应用`)),1)])]),P(m,{"label-position":`top`,class:`stash-form`},{default:G(()=>[P(u,{label:i.$t(`@76872:储藏说明`)},{default:G(()=>[P(l,{modelValue:i.stashMessage,"onUpdate:modelValue":t[0]||=e=>i.stashMessage=e,placeholder:i.$t(`@76872:为这次储藏添加描述信息(可选)`),clearable:``,onKeydown:i.handleStashMessageKeydown,rows:2,type:`textarea`,resize:`none`,maxlength:`200`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),N(` 选项配置 `),h(`div`,Ki,[h(`h5`,qi,[P(s,null,{default:G(()=>[P(i.Setting)]),_:1}),M(` `+q(i.$t(`@76872:储藏选项`)),1)]),h(`div`,Ji,[P(d,{modelValue:i.includeUntracked,"onUpdate:modelValue":t[1]||=e=>i.includeUntracked=e,size:`large`},{default:G(()=>[h(`span`,Yi,q(i.$t(`@76872:包含未跟踪文件`)),1)]),_:1},8,[`modelValue`]),h(`p`,Xi,q(i.$t(`@76872:对于未跟踪的文件,同时储藏 (--include-untracked)`)),1)]),h(`div`,Zi,[P(d,{modelValue:i.excludeLocked,"onUpdate:modelValue":t[2]||=e=>i.excludeLocked=e,size:`large`},{default:G(()=>[h(`span`,Qi,q(i.$t(`@76872:排除锁定文件`)),1)]),_:1},8,[`modelValue`]),h(`p`,$i,[M(q(i.$t(`@76872:不储藏被锁定的文件,保持其当前状态`))+` `,1),i.lockedFilesInSelection.length>0?(z(),J(`span`,ea,` (`+q(i.$t(`@76872:选中`))+` `+q(i.lockedFilesInSelection.length)+` `+q(i.$t(`@76872:个锁定文件`))+`) `,1)):N(`v-if`,!0)])])]),N(` 储藏预览信息 `),h(`div`,ta,[h(`h5`,na,[P(i.SvgIcon,{"icon-class":`git-stash`,style:{"font-size":`16px`}}),M(` `+q(i.$t(`@76872:将要储藏的文件`)),1)]),h(`div`,ra,[P(f,{type:`warning`},{default:G(()=>[M(q(i.$t(`@76872:已选中: `))+q(i.props.selectedFiles.length)+` `+q(i.$t(`@76872:个文件`)),1)]),_:1})]),h(`div`,ia,[(z(!0),J(Z,null,r(i.props.selectedFiles.slice(0,10),e=>(z(),J(`div`,{key:e,class:`file-preview-item`},q(e),1))),128)),i.props.selectedFiles.length>10?(z(),J(`div`,aa,q(i.$t(`@76872:...还有`))+` `+q(i.props.selectedFiles.length-10)+` `+q(i.$t(`@76872:个文件`)),1)):N(`v-if`,!0)])])]),_:1})])]),_:1},8,[`modelValue`,`title`])])):N(`v-if`,!0)}var ua=$(Bi,[[`render`,la],[`__scopeId`,`data-v-cb6e2d4a`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/StashSelectedFilesButton.vue`]]);c();var da=T({__name:`GitCommandPreview`,props:{command:{type:String,required:!0},title:{type:String,required:!1,default:Q(`@34292:Git命令预览:`)},copyButtonText:{type:String,required:!1,default:Q(`@34292:复制命令`)},placeholder:{type:String,required:!1,default:`<命令内容>`}},setup(e,{expose:t}){t();let n=e,r=F(()=>n.command||n.placeholder);async function i(){if(!n.command){V.warning(Q(`@34292:没有可复制的命令内容`));return}try{await navigator.clipboard.writeText(n.command),V.success(Q(`@34292:命令已复制到剪贴板`))}catch(e){V.error(`${Q(`@34292:复制失败: `)}${e.message}`)}}let a={props:n,displayCommand:r,copyCommand:i,get CopyDocument(){return Ce},IconButton:Mt};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}});v(),c();var fa={class:`git-command-preview`},pa={class:`preview-container`},ma={class:`preview-title`},ha={class:`preview-content code-command`};function ga(e,t,n,r,i,a){let o=E;return z(),J(`div`,fa,[h(`div`,pa,[h(`div`,ma,q(n.title),1),h(`div`,ha,q(r.displayCommand),1),P(r.IconButton,{tooltip:n.copyButtonText,size:`small`,"custom-class":`copy-command-btn`,onClick:r.copyCommand},{default:G(()=>[P(o,null,{default:G(()=>[P(r.CopyDocument)]),_:1})]),_:1},8,[`tooltip`])])])}var _a=$(da,[[`render`,ga],[`__scopeId`,`data-v-78888d2c`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/GitCommandPreview.vue`]]);c(),X();var va=T({__name:`MergeBranchButton`,props:{variant:{type:String,required:!1,default:`icon`}},setup(e,{expose:t}){t();let n=e,r=Bt(),i=U(!1),a=U(``),s=U({noCommit:!1,noFf:!1,squash:!1,message:``}),c=U(`all`),l=F(()=>{let e=r.allBranches.filter(e=>e!==r.currentBranch);return c.value===`local`?e.filter(e=>!e.includes(`origin/`)):c.value===`remote`?e.filter(e=>e.includes(`origin/`)):e});function u(){a.value=``,s.value={noFf:!1,squash:!1,noCommit:!1,message:``},c.value=`all`,i.value=!0,r.allBranches.length===0&&r.getAllBranches();let e=r.allBranches.filter(e=>e!==r.currentBranch);e.includes(`origin/master`)?a.value=`origin/master`:e.includes(`origin/main`)&&(a.value=`origin/main`)}async function d(){if(f.value)try{await navigator.clipboard.writeText(f.value),V.success(Q(`@76872:默认合并消息已复制`))}catch{V.error(Q(`@76872:复制失败`))}}We(c,()=>{a.value&&!l.value.includes(a.value)&&(a.value=``)});let f=F(()=>{if(!a.value)return``;let e=r.currentBranch||`current`;return`Merge branch '${a.value}' into ${e}`}),p=F(()=>{if(!a.value)return``;let e=`git merge ${a.value}`;if(s.value.noFf&&(e+=` --no-ff`),s.value.squash&&(e+=` --squash`),s.value.noCommit&&(e+=` --no-commit`),!s.value.noCommit){let t=s.value.message||f.value;t&&(e+=` -m "${t}"`)}return e});async function h(){if(!a.value){V({message:Q(`@76872:请选择要合并的分支`),type:`warning`});return}try{await r.mergeBranch(a.value,s.value)?(i.value=!1,await Promise.all([r.fetchStatus(),r.fetchLog(!1),r.getBranchStatus(!0)])):(r.pendingMergeMessage=s.value.message||f.value,i.value=!1,await Promise.all([r.fetchStatus(),r.fetchLog(!1),r.getBranchStatus(!0)]))}catch(e){console.error(`合并分支操作发生错误:`,e),r.pendingMergeMessage=s.value.message||f.value,i.value=!1,await Promise.all([r.fetchStatus(),r.fetchLog(!1),r.getBranchStatus(!0)])}}let g={props:n,gitStore:r,isMergeDialogVisible:i,selectedBranch:a,mergeOptions:s,branchTypeFilter:c,filteredBranches:l,openMergeDialog:u,copyDefaultMessage:d,defaultMergeMessage:f,mergeCommand:p,handleMergeBranch:h,get $t(){return Q},get Setting(){return te},get Loading(){return o},get InfoFilled(){return m},get DocumentCopy(){return De},CommonDialog:Kt,GitCommandPreview:_a,IconButton:Mt,SvgIcon:jt};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}});c(),v();var ya={class:`merge-branch-button`},ba={class:`merge-dialog-content`},xa={class:`merge-info-card`},Sa={class:`info-icon`},Ca={class:`info-content`},wa={class:`merge-options`},Ta={class:`options-title`},Ea={class:`options-horizontal`},Da={key:0,class:`default-message-hint`},Oa={class:`hint-content`};function ka(e,t,n,i,a,o){let s=E,c=pt,l=Ne,u=A,d=ne,f=g,m=w,_=j,v=L,y=I,x=b;return z(),J(`div`,ya,[N(` 合并分支按钮 `),i.props.variant===`icon`?(z(),p(i.IconButton,{key:0,tooltip:i.gitStore.hasConflictedFiles?i.$t(`@76872:存在冲突文件,请先解决冲突`):i.$t(`@76872:合并其他分支到当前分支`),size:`medium`,disabled:i.gitStore.hasConflictedFiles||i.gitStore.isGitMerging,"hover-color":`var(--color-primary)`,onClick:i.openMergeDialog},{default:G(()=>[i.gitStore.isGitMerging?(z(),p(s,{key:0,class:`is-loading`},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(i.SvgIcon,{key:1,"icon-class":`git-merge`}))]),_:1},8,[`tooltip`,`disabled`])):(z(),p(c,{key:1,type:`primary`,class:`action-button`,onClick:i.openMergeDialog,loading:i.gitStore.isGitMerging,disabled:i.gitStore.hasConflictedFiles},{default:G(()=>[M(q(i.$t(`@76872:合并分支`)),1)]),_:1},8,[`loading`,`disabled`])),N(` 合并分支对话框 `),P(i.CommonDialog,{modelValue:i.isMergeDialogVisible,"onUpdate:modelValue":t[6]||=e=>i.isMergeDialogVisible=e,title:i.$t(`@76872:合并分支`),size:`medium`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":i.$t(`@76872:合并`),"cancel-text":i.$t(`@76872:取消`),"confirm-loading":i.gitStore.isGitMerging,"custom-class":`merge-dialog`,onConfirm:i.handleMergeBranch},{default:G(()=>[h(`div`,ba,[N(` 功能说明卡片 `),h(`div`,xa,[h(`div`,Sa,[P(i.SvgIcon,{"icon-class":`git-merge`})]),h(`div`,Ca,[h(`h4`,null,q(i.$t(`@76872:合并分支到当前分支`)),1),h(`p`,null,[M(q(i.$t(`@76872:将选择的分支合并到`))+` `,1),h(`code`,null,q(i.gitStore.currentBranch),1)])])]),P(x,{"label-position":`top`,class:`merge-form`},{default:G(()=>[N(` 分支类型选择 `),P(d,{label:i.$t(`@76872:分支类型`)},{default:G(()=>[P(u,{modelValue:i.branchTypeFilter,"onUpdate:modelValue":t[0]||=e=>i.branchTypeFilter=e,size:`default`},{default:G(()=>[P(l,{value:`all`},{default:G(()=>[M(q(i.$t(`@76872:所有分支`)),1)]),_:1}),P(l,{value:`local`},{default:G(()=>[M(q(i.$t(`@76872:本地分支`)),1)]),_:1}),P(l,{value:`remote`},{default:G(()=>[M(q(i.$t(`@76872:远程分支`)),1)]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`label`]),N(` 分支选择 `),P(d,{label:i.$t(`@76872:选择分支`)},{default:G(()=>[P(m,{modelValue:i.selectedBranch,"onUpdate:modelValue":t[1]||=e=>i.selectedBranch=e,placeholder:i.$t(`@76872:选择要合并的分支`),filterable:``,clearable:``,style:{width:`100%`}},{default:G(()=>[(z(!0),J(Z,null,r(i.filteredBranches,e=>(z(),p(f,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),N(` 命令预览 `),P(i.GitCommandPreview,{command:i.mergeCommand,title:i.$t(`@76872:合并命令预览:`),placeholder:i.$t(`@76872:请先选择要合并的分支`)},null,8,[`command`,`title`,`placeholder`]),N(` 合并选项 `),h(`div`,wa,[h(`h5`,Ta,[P(s,null,{default:G(()=>[P(i.Setting)]),_:1}),M(` `+q(i.$t(`@76872:合并选项`)),1)]),h(`div`,Ea,[P(v,{content:i.$t(`@76872:始终创建合并提交,即使可以快进 (--no-ff)`),placement:`top`,"show-after":200},{default:G(()=>[P(_,{modelValue:i.mergeOptions.noFf,"onUpdate:modelValue":t[2]||=e=>i.mergeOptions.noFf=e,size:`large`},{default:G(()=>[M(q(i.$t(`@76872:禁用快进合并`)),1)]),_:1},8,[`modelValue`])]),_:1},8,[`content`]),P(v,{content:i.$t(`@76872:将所有提交压缩成一个提交 (--squash)`),placement:`top`,"show-after":200},{default:G(()=>[P(_,{modelValue:i.mergeOptions.squash,"onUpdate:modelValue":t[3]||=e=>i.mergeOptions.squash=e,size:`large`},{default:G(()=>[M(q(i.$t(`@76872:压缩合并`)),1)]),_:1},8,[`modelValue`])]),_:1},8,[`content`]),P(v,{content:i.$t(`@76872:执行合并但不自动提交,可以手动检查后提交 (--no-commit)`),placement:`top`,"show-after":200},{default:G(()=>[P(_,{modelValue:i.mergeOptions.noCommit,"onUpdate:modelValue":t[4]||=e=>i.mergeOptions.noCommit=e,size:`large`},{default:G(()=>[M(q(i.$t(`@76872:不自动提交`)),1)]),_:1},8,[`modelValue`])]),_:1},8,[`content`])])]),N(` 自定义合并消息 `),i.mergeOptions.noCommit?N(`v-if`,!0):(z(),p(d,{key:0,label:i.$t(`@76872:合并消息(可选)`)},{default:G(()=>[P(y,{modelValue:i.mergeOptions.message,"onUpdate:modelValue":t[5]||=e=>i.mergeOptions.message=e,type:`textarea`,rows:2,placeholder:i.$t(`@76872:自定义合并提交消息`),clearable:``,resize:`none`,maxlength:`200`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`]),i.selectedBranch&&!i.mergeOptions.message?(z(),J(`div`,Da,[h(`div`,Oa,[P(s,null,{default:G(()=>[P(i.InfoFilled)]),_:1}),h(`span`,null,q(i.$t(`@76872:默认消息:`))+q(i.defaultMergeMessage),1)]),P(c,{type:`primary`,link:``,size:`small`,onClick:i.copyDefaultMessage,class:`copy-btn`},{default:G(()=>[P(s,null,{default:G(()=>[P(i.DocumentCopy)]),_:1})]),_:1})])):N(`v-if`,!0)]),_:1},8,[`label`]))]),_:1})])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])])}var Aa=$(va,[[`render`,ka],[`__scopeId`,`data-v-233ecb8e`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/MergeBranchButton.vue`]]);c();var ja=T({__name:`UnstageAllButton`,props:{from:{type:String,required:!1,default:`form`}},emits:[`click`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Bt(),o=F(()=>a.fileList.filter(e=>[`staged`,`renamed`,`added`].includes(e.type)).length),s=F(()=>o.value>0),c=F(()=>!s.value),l=F(()=>s.value?`取消暂存所有文件(git reset HEAD)`:`没有已暂存的更改`);async function u(){i(`click`);try{await a.resetHead()&&a.fetchStatus()}catch(e){console.error(`取消暂存失败:`,e)}}let d={props:r,emit:i,gitStore:a,stagedFilesCount:o,hasStagedChanges:s,isDisabled:c,tooltipText:l,handleClick:u,get RefreshLeft(){return ue},IconButton:Mt};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}});c(),v();var Ma={key:0,class:`unstage-all-button`},Na={key:0};function Pa(e,t,n,r,i,a){let o=E,s=pt,c=L;return r.hasStagedChanges?(z(),J(`div`,Ma,[N(` 图标按钮模式 (from === 'status') `),r.props.from===`status`?(z(),p(r.IconButton,{key:0,tooltip:r.tooltipText,size:`medium`,disabled:r.isDisabled,loading:r.gitStore.isResetting,"hover-color":`var(--color-warning)`,onClick:r.handleClick},{default:G(()=>[P(o,null,{default:G(()=>[P(r.RefreshLeft)]),_:1})]),_:1},8,[`tooltip`,`disabled`,`loading`])):(z(),J(Z,{key:1},[N(` 文字按钮模式 (from !== 'status') `),P(c,{content:r.tooltipText,placement:`top`,"show-after":200},{default:G(()=>[P(s,{type:`warning`,onClick:r.handleClick,loading:r.gitStore.isResetting,disabled:r.isDisabled,class:O(`from-${r.props.from}`)},{default:G(()=>[t[0]||=M(` 取消暂存所有 `,-1),r.stagedFilesCount>0?(z(),J(`span`,Na,`(`+q(r.stagedFilesCount)+`)`,1)):N(`v-if`,!0)]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])],2112))])):N(`v-if`,!0)}var Fa=$(ja,[[`render`,Pa],[`__scopeId`,`data-v-5a00229f`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/UnstageAllButton.vue`]]);c();var Ia=T({__name:`ResetToRemoteButton`,props:{variant:{type:String,required:!1,default:`icon`}},setup(e,{expose:t}){t();let n=e,r=Bt(),i=F(()=>r.fileList.length>0||r.branchAhead>0);async function a(){try{await Promise.all([r.getCurrentBranch(!0),r.getAllBranches()]);let e=r.currentBranch;if(!e){V.warning(Q(`@76872:无法获取当前分支,请稍后重试`));return}await Me.confirm(Q(`@76872:确定要重置当前分支吗?`,{branch:e}),Q(`@76872:重置到远程`)+` origin/${e}`,{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),confirmButtonClass:`el-button--danger`,dangerouslyUseHTMLString:!0,type:`warning`}),await r.resetToRemote(e)&&(r.fetchStatus(),r.fetchLog())}catch(e){e!==`cancel`&&console.error(`重置到远程失败:`,e)}}let o={props:n,gitStore:r,shouldShowReset:i,resetToRemote:a,get $t(){return Q},IconButton:Mt,SvgIcon:jt};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});c(),v();function La(e,t,n,r,i,a){let o=pt,s=L;return r.shouldShowReset?(z(),J(Z,{key:0},[r.props.variant===`icon`?(z(),p(r.IconButton,{key:0,"icon-class":`git-reset`,tooltip:r.gitStore.hasConflictedFiles?r.$t(`@76872:存在冲突文件,请先解决冲突`):r.$t(`@76872:重置到远程`),size:`medium`,"hover-color":`var(--color-danger)`,disabled:!r.gitStore.hasUpstream||r.gitStore.hasConflictedFiles||r.gitStore.isResetting,onClick:r.resetToRemote},null,8,[`tooltip`,`disabled`])):(z(),p(s,{key:1,content:r.gitStore.hasConflictedFiles?r.$t(`@76872:存在冲突文件,请先解决冲突`):`git reset --hard origin/branch`,placement:`top`},{default:G(()=>[P(o,{type:`danger`,onClick:r.resetToRemote,loading:r.gitStore.isResetting,disabled:!r.gitStore.hasUpstream||r.gitStore.hasConflictedFiles,class:`action-button danger-button`},{default:G(()=>[P(r.SvgIcon,{"icon-class":`git-reset`,"class-name":`git-reset-icon`}),M(` `+q(r.$t(`@76872:重置到远程`)),1)]),_:1},8,[`loading`,`disabled`])]),_:1},8,[`content`]))],64)):N(`v-if`,!0)}var Ra=$(Ia,[[`render`,La],[`__scopeId`,`data-v-60ced04e`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/ResetToRemoteButton.vue`]]);c();var za=T({__name:`DiscardAllChangesButton`,props:{variant:{type:String,required:!1,default:`icon`},size:{type:String,required:!1,default:`large`},selectedFiles:{type:Array,required:!1,default:()=>[]}},setup(e,{expose:t}){t();let n=e,r=Bt(),i=F(()=>Array.isArray(n.selectedFiles)&&n.selectedFiles.length>0),a=F(()=>n.selectedFiles?.length??0),o=F(()=>r.fileList.length>0);async function s(){try{await Me.confirm(Q(`@76872:确定要清除本地所有更改吗?`),Q(`@76872:清除所有本地更改`),{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),confirmButtonClass:`el-button--danger`,dangerouslyUseHTMLString:!0,type:`warning`}),await r.discardAllChanges()&&(r.fetchStatus(),r.fetchLog())}catch(e){e!==`cancel`&&console.error(`清除本地更改失败:`,e)}}async function c(){let e=n.selectedFiles??[];if(e.length!==0)try{await Me.confirm(Q(`@76872:确定要清除所选的 {count} 个文件吗?`,{count:e.length}),Q(`@76872:清除所选文件`),{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),confirmButtonClass:`el-button--danger`,dangerouslyUseHTMLString:!0,type:`warning`}),await r.discardSelectedFiles(e)&&(r.fetchStatus(),r.fetchLog())}catch(e){e!==`cancel`&&console.error(`清除所选文件失败:`,e)}}let l={props:n,gitStore:r,isSelectiveMode:i,selectedCount:a,shouldShowDiscard:o,discardAllChanges:s,discardSelectedChanges:c,get $t(){return Q},get DeleteFilled(){return it},IconButton:Mt};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});c(),v();function Ba(e,t,n,r,i,a){let o=E,s=pt,c=L;return r.shouldShowDiscard?(z(),J(Z,{key:0},[r.props.variant===`icon`?(z(),p(r.IconButton,{key:0,tooltip:r.isSelectiveMode?r.$t(`@76872:清除所选 {count} 个文件`,{count:r.selectedCount}):r.$t(`@76872:清除所有本地更改`),size:r.props.size,"hover-color":`var(--color-danger)`,disabled:r.gitStore.isResetting,onClick:t[0]||=e=>r.isSelectiveMode?r.discardSelectedChanges():r.discardAllChanges()},{default:G(()=>[P(o,null,{default:G(()=>[P(r.DeleteFilled)]),_:1})]),_:1},8,[`tooltip`,`size`,`disabled`])):(z(),p(c,{key:1,content:r.isSelectiveMode?r.$t(`@76872:对所选文件执行 git checkout / git clean`):`git reset --hard && git clean -fd`,placement:`top`},{default:G(()=>[P(s,{type:`danger`,icon:r.DeleteFilled,onClick:t[1]||=e=>r.isSelectiveMode?r.discardSelectedChanges():r.discardAllChanges(),loading:r.gitStore.isResetting,class:`action-button danger-button`},{default:G(()=>[M(q(r.isSelectiveMode?r.$t(`@76872:清除所选 {count} 个文件`,{count:r.selectedCount}):r.$t(`@76872:清除所有本地更改`)),1)]),_:1},8,[`icon`,`loading`])]),_:1},8,[`content`]))],64)):N(`v-if`,!0)}var Va=$(za,[[`render`,Ba],[`__scopeId`,`data-v-e83ece54`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/DiscardAllChangesButton.vue`]]);c(),X();var Ha=T({__name:`GitStatus`,props:{initialDirectory:{type:String,default:``}},setup(e,{expose:t}){let n=e,r=Bt(),i=Lt(),a=Ht(),s=F(()=>r.isLoadingStatus),c=U(``),l=U(``),u=U(null),d=U(!1),f=U(!1),p=U(-1),h=U(`compare`),g=U(``),_=U(``),v=U({});function y(e){return!!v.value[e]}let b=F(()=>r.selectedFiles),x=F(()=>r.isSelectionMode);function S(){r.toggleSelectionMode()}function w(e){r.toggleFileSelection(e)}function T(){r.selectedFiles.size===r.fileList.length?r.clearSelection():r.selectAllFiles()}function ee(e){return r.selectedFiles.has(e)}let E=F(()=>Array.from(r.selectedFiles)),D=F(()=>r.fileList.map(e=>({path:e.path,name:e.path.split(`/`).pop()||e.path,type:e.type,locked:Y(e.path)})));async function O(e){h.value===`compare`?await L(e):await ce(e)}async function te(e,t){try{let n=await(await fetch(`/api/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?V.success(n.message):V.error(n.error||Q(`@13D1C:打开文件失败`))}catch(e){V.error(`${Q(`@13D1C:打开文件失败: `)}${e.message}`)}}async function ne(e,t){try{let n=await(await fetch(`/api/open-with-vscode`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?V.success(n.message):V.error(n.error||Q(`@13D1C:用VSCode打开文件失败`))}catch(e){V.error(`${Q(`@13D1C:用VSCode打开文件失败: `)}${e.message}`)}}function k(e,t){console.log(`[debug-open-in-editor] GitStatus handleOpenInEditor dispatching, filePath=`,e),d.value=!1,window.dispatchEvent(new CustomEvent(`zen-gitsync:open-file-in-editor`,{detail:{filePath:e}}))}let A=U(!1),j=U({staged:!1,unstaged:!1,untracked:!1,conflicted:!1,"intent-to-add":!1}),M=F({get:()=>i.ui.fileListViewMode,set:e=>{i.ui.fileListViewMode=e}}),N=F(()=>({conflicted:Q(`@13D1C:冲突文件`),staged:Q(`@13D1C:已暂存的更改`),unstaged:Q(`@13D1C:未暂存的更改`),"intent-to-add":Q(`@13D1C:已声明添加(待暂存)`),untracked:Q(`@13D1C:未跟踪的文件`)})),re=F(()=>mn(r.fileList,j.value,N.value)),P=U(n.initialDirectory||``);async function ae(){try{if(!P.value){let e=await(await fetch(`/api/current_directory`)).json();P.value=e.directory||Q(`@13D1C:未知目录`)}if(!r.isGitRepo)return;await r.fetchStatus(),V({message:Q(`@13D1C:Git 状态已刷新`),type:`success`})}catch(e){V({message:`刷新失败: `+e.message,type:`error`})}}async function oe(e){try{await Me.confirm(`确认解锁该文件?\n${e}`,Q(`@13D1C:确认解锁`),{type:`warning`,confirmButtonText:Q(`@13D1C:解锁`),cancelButtonText:Q(`@13D1C:取消`)}),await i.unlockFile(e)}catch{}}async function se(){if(i.lockedFiles.length)try{await Me.confirm(`${Q(`@13D1C:确认解锁所有已锁定文件?共 `)}${i.lockedFiles.length}${Q(`@13D1C: 个。`)}`,Q(`@13D1C:清空全部锁定`),{type:`warning`,confirmButtonText:Q(`@13D1C:全部解锁`),cancelButtonText:Q(`@13D1C:取消`)});let e=[...i.lockedFiles];await Promise.all(e.map(e=>i.unlockFile(e))),await i.loadLockedFiles(),V.success(Q(`@13D1C:已清空所有文件锁定`))}catch{}}async function ce(e){try{f.value=!0,l.value=``,g.value=``,_.value=``,u.value=null,c.value=e,p.value=r.fileList.findIndex(t=>t.path===e);let t=r.fileList[p.value];if(Wt(e)){l.value=``,u.value=null;return}if(t&&t.type===`untracked`)try{let t=await(await fetch(`/api/file-content?file=${encodeURIComponent(e)}`)).json();t.success&&t.content?l.value=`diff --git a/${e} b/${e}\n${Q(`@13D1C:新文件: `)}${e}\n--- /dev/null\n+++ b/${e}\n@@ -0,0 +1,${t.content.split(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RecentDirectoriesChat-BVgA8lLY.js","assets/element-plus-Buzx8xRf.js","assets/rolldown-runtime-C0FnF6B9.js","assets/dagre-CDSwApuC.js","assets/element-plus-Qexo5hiM.css","assets/vendor-wERX2bc3.js","assets/vendor-CP-WuGZG.css","assets/_plugin-vue_export-helper-DcQKU19k.js","assets/useThemeObserver-CWioG2jb.js","assets/agentConversations-D_TsndCC.js","assets/configStore-u3FUM08v.js","assets/RecentDirectoriesChat-BMkc7fS1.css","assets/ProjectStartupButton-CFQKlRoA.js","assets/SvgIcon-YQZtv72i.js","assets/SvgIcon-CDNsk4-Q.css","assets/IconButton-C07zojvw.js","assets/IconButton-RlXqKOeu.css","assets/CommonDialog-DuI8Bsg7.js","assets/CommonDialog-w6EmBEXv.css","assets/ProjectStartupButton-CB8IOg1E.css","assets/FlowOrchestrationWorkspace-0Kh0IoGP.js","assets/vue-flow-KUZI4f_9.js","assets/vue-flow-CavUTEzp.css","assets/UserInputNode-DMCLoOUw.js","assets/UserInputNode-DDNSarag.css","assets/FlowOrchestrationWorkspace-DwuSSxJ1.css","assets/FlowExecutionViewer-sM9EwU3Q.js","assets/FlowExecutionViewer-jNHI5zdm.css","assets/CommitForm-BHwc5sEG.js","assets/gitStore-ZjHYEyKS.js","assets/socket-io-BFqQXqAp.js","assets/TemplateManager-zSKmah02.js","assets/TemplateManager-DO7EPfj8.css","assets/CommitForm-BZKY-bFa.css","assets/LogList-BatjYplm.js","assets/FileDiffViewer-DtGtQGLR.js","assets/fileIcon-B5p5pGN9.js","assets/previewSandbox-KLKRAhm4.js","assets/flow-mindmap-D-65aZb7.js","assets/flow-mindmap-BMpmHdqh.css","assets/previewSandbox-PYnM6Paz.css","assets/monaco-BD8Gy_t7.js","assets/monaco-B2lPvkrc.css","assets/FileDiffViewer-n5ea9qMe.css","assets/toolsStore-CfyhqJeq.js","assets/LogList-XspUhx-C.css","assets/RemoteRepoCard-kOIERvah.js","assets/RemoteRepoCard-o01IrbVz.css","assets/RemoteManagerDialog-BxD0m5c-.js","assets/RemoteManagerDialog-D4WphMtO.css","assets/AppVersionBadge-DNG70v26.js","assets/AppVersionBadge-DDYQqoy7.css","assets/BranchSelector-DBI8ieGq.js","assets/BranchSelector-F4ibldMN.css","assets/EditorView-B3EO-mxZ.js","assets/AgentEngineSelector-BMJAsMx_.js","assets/AgentEngineSelector-DUf0TfaU.css","assets/EditorView-CftLj8-x.css","assets/SourceMapView-Bs3DYqDP.js","assets/SourceMapView-CfDydtsu.css","assets/WorkbenchView-nHzg7gau.js","assets/WorkbenchView-C_E3GV0q.css","assets/MonitorView-BblFdPFM.js","assets/MonitorView-DwUwJXnY.css","assets/MindmapView-CTHfsYTC.js","assets/MindmapView-Diq2Cu4O.css","assets/AgentView-BH5Ec4j1.js","assets/AgentView-Bebv5xk6.css"])))=>i.map(i=>d[i]);
2
+ import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{$ as n,$n as r,$t as i,A as a,At as o,B as s,Bn as c,Bt as l,C as u,Cn as d,Ct as f,Dn as p,Dt as m,En as h,F as g,Fn as _,Fr as v,Ft as y,G as b,Gn as x,Gt as S,Ht as C,I as w,In as T,It as ee,J as E,Jn as D,Jr as O,Jt as te,K as ne,L as k,M as A,N as j,Nn as M,On as N,Ot as re,Pn as P,Q as ie,Qt as ae,Rn as oe,S as se,Sn as ce,St as le,Tn as F,U as I,Ut as ue,V as de,W as L,Wn as fe,Wt as pe,Xn as me,Xr as R,Xt as he,Y as ge,Yn as _e,Yt as ve,Zn as z,Zt as ye,_n as B,a as V,an as be,at as xe,bn as H,br as U,bt as W,c as Se,cr as G,ct as Ce,d as we,dn as K,ei as q,en as Te,f as Ee,ft as De,g as Oe,gn as ke,h as Ae,ht as je,i as Me,j as Ne,jn as Pe,jt as Fe,kn as J,kt as Ie,ln as Le,lr as Y,lt as Re,m as ze,mt as Be,nt as Ve,o as He,on as Ue,or as We,ot as Ge,p as Ke,pr as X,pt as qe,q as Je,qn as Ye,r as Xe,rn as Ze,s as Qe,st as $e,tn as et,tr as tt,tt as nt,un as rt,ut as it,vn as at,vr as ot,w as st,wt as ct,x as lt,xn as Z,y as ut,yn as dt,yr as ft,z as pt}from"./element-plus-Buzx8xRf.js";import{C as mt,S as ht,f as gt,g as _t,m as vt,p as yt,x as bt}from"./vendor-wERX2bc3.js";import{i as xt,n as Q,t as $}from"./_plugin-vue_export-helper-DcQKU19k.js";import{ir as St}from"./dagre-CDSwApuC.js";import{a as Ct,c as wt,i as Tt,l as Et,n as Dt,o as Ot,r as kt,t as At}from"./FileDiffViewer-DtGtQGLR.js";import{t as jt}from"./SvgIcon-YQZtv72i.js";import{t as Mt}from"./IconButton-C07zojvw.js";import{t as Nt}from"./socket-io-BFqQXqAp.js";import{i as Pt,n as Ft,r as It,t as Lt}from"./configStore-u3FUM08v.js";import{a as Rt,n as zt,r as Bt,t as Vt}from"./gitStore-ZjHYEyKS.js";import{t as Ht}from"./toolsStore-CfyhqJeq.js";import{t as Ut}from"./fileIcon-B5p5pGN9.js";import{c as Wt}from"./previewSandbox-KLKRAhm4.js";import{t as Gt}from"./useThemeObserver-CWioG2jb.js";import{t as Kt}from"./CommonDialog-DuI8Bsg7.js";import{t as qt}from"./TemplateManager-zSKmah02.js";import"./vue-flow-KUZI4f_9.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),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function Jt(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`}function Yt(e){let t=(e||``).trim();return/^[a-zA-Z]:/.test(t)?t.replace(/\//g,`\\`).toLowerCase():t}function Xt(e){return e.replace(/\\/g,`/`)}function Zt(e,t=[]){if(!e||!t?.length)return!1;let n=Xt(e);return t.some(e=>Xt(e)===n)}c();var Qt=T({__name:`FileRow`,props:{file:{type:Object,required:!0},isFileLocked:{type:Function,required:!0},isLocking:{type:Function,required:!0},getFileName:{type:Function,required:!0},getFileDirectory:{type:Function,required:!0},isSelectionMode:{type:Boolean,required:!1},isFileSelected:{type:Function,required:!1}},emits:[`fileClick`,`toggleFileLock`,`stageFile`,`unstageFile`,`revertFileChanges`,`manageLockedFiles`,`toggleFileSelection`],setup(e,{expose:t,emit:n}){t();let r=e,i=n;function a(e){r.isSelectionMode?(e?.stopPropagation(),i(`toggleFileSelection`,r.file.path)):i(`fileClick`,r.file)}function o(e){switch(e){case`added`:return`A`;case`modified`:return`M`;case`deleted`:return`D`;case`conflicted`:return`!`;case`untracked`:return`U`;case`intent-to-add`:return`I`;default:return``}}let s={props:r,emit:i,handleFileClick:a,getStatusLetter:o,getFileIcon:e=>Ut(r.getFileName(e)),get Lock(){return Fe},FileActionButtons:Ot};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}});c(),K(),v();var $t={class:`file-info`},en={class:`file-type-icon mit-icon`,"aria-hidden":`true`},tn=[`xlink:href`],nn={class:`file-name-section`},rn=[`title`],an={class:`file-directory`},on={key:0,class:`file-actions`};function sn(e,t,n,r,i,a){let o=j,s=E,c=L;return z(),J(`div`,{class:O([`file-item file-group-item`,{"is-loading":n.isLocking(n.file.path),locked:n.isFileLocked(n.file.path),selected:n.isSelectionMode&&n.isFileSelected?.(n.file.path),[`file-type-${n.file.type}`]:n.file.type}]),onClick:t[7]||=e=>r.handleFileClick(e)},[h(`div`,$t,[N(` 选择模式下显示复选框 `),n.isSelectionMode?(z(),p(o,{key:0,"model-value":n.isFileSelected?.(n.file.path),onChange:t[0]||=e=>r.emit(`toggleFileSelection`,n.file.path),onClick:t[1]||=H(()=>{},[`stop`]),class:`file-checkbox`},null,8,[`model-value`])):N(`v-if`,!0),(z(),J(`svg`,en,[h(`use`,{"xlink:href":`#${r.getFileIcon(n.file.path)}`},null,8,tn)])),h(`div`,nn,[P(c,{content:n.getFileName(n.file.path),placement:`top`,disabled:n.getFileName(n.file.path).length<=25,"show-after":200},{default:G(()=>[h(`div`,{class:O([`file-name`,{"locked-file-name":n.isFileLocked(n.file.path),"deleted-file-name":n.file.type===`deleted`}])},[M(q(n.getFileName(n.file.path))+` `,1),n.isFileLocked(n.file.path)?(z(),p(s,{key:0,class:`lock-indicator`},{default:G(()=>[P(r.Lock)]),_:1})):N(`v-if`,!0)],2)]),_:1},8,[`content`,`disabled`])]),h(`div`,{class:`file-path-section`,title:n.getFileDirectory(n.file.path)},[P(c,{content:n.getFileDirectory(n.file.path),placement:`top`,disabled:n.getFileDirectory(n.file.path).length<=30,"show-after":200},{default:G(()=>[h(`span`,an,q(n.getFileDirectory(n.file.path)),1)]),_:1},8,[`content`,`disabled`])],8,rn),h(`div`,{class:O([`file-status-indicator`,[n.file.type,{locked:n.isFileLocked(n.file.path)}]])},q(r.getStatusLetter(n.file.type)),3)]),N(` 悬浮操作按钮(非选择模式下显示) `),n.isSelectionMode?N(`v-if`,!0):(z(),J(`div`,on,[P(r.FileActionButtons,{"file-path":n.file.path,"file-type":n.file.type,"is-locked":n.isFileLocked(n.file.path),"is-locking":n.isLocking(n.file.path),onToggleLock:t[2]||=e=>r.emit(`toggleFileLock`,e),onStage:t[3]||=e=>r.emit(`stageFile`,e),onUnstage:t[4]||=e=>r.emit(`unstageFile`,e),onRevert:t[5]||=e=>r.emit(`revertFileChanges`,e),onManageLockedFiles:t[6]||=e=>r.emit(`manageLockedFiles`)},null,8,[`file-path`,`file-type`,`is-locked`,`is-locking`])]))],2)}var cn=$(Qt,[[`render`,sn],[`__scopeId`,`data-v-be205496`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/FileRow.vue`]]);function ln(e,t){let n=new Float64Array(e.length+1),r=0;for(let i=0;i<e.length;i++)n[i]=r,r+=t(e[i]);return n[e.length]=r,n}function un(e,t){let n=e.length-2;if(n<0||t<=0)return 0;if(t>=e[n])return n;let r=0,i=n,a=0;for(;r<=i;){let n=r+i>>1;e[n]<=t?(a=n,r=n+1):i=n-1}return a}c(),X();function dn(e,t,n=400){let r=U(null),i=U(null),a=U(0),o=U(0),s=F(()=>ln(e(),t)),c=F(()=>s.value[s.value.length-1]||0),l=F(()=>{let t=e();if(!t.length)return[];let r=s.value,i=un(r,Math.max(0,a.value-n)),c=Math.min(t.length-1,un(r,a.value+o.value+n)),l=[];for(let e=i;e<=c;e++)l.push({row:t[e],index:e,top:r[e]});return l});function u(e){let t=e?.parentElement??null;for(;t;){let e=getComputedStyle(t).overflowY;if((e===`auto`||e===`scroll`||e===`overlay`)&&t.scrollHeight>t.clientHeight)return t;t=t.parentElement}return document.scrollingElement??null}function d(){let e=i.value;e&&(o.value=e.clientHeight,a.value=e.scrollTop)}function f(){let e=i.value;e&&(a.value=e.scrollTop)}let p=null,m=0;function h(){m||=requestAnimationFrame(()=>{m=0,d()})}return _e(()=>{i.value=u(r.value),i.value?.addEventListener(`scroll`,f,{passive:!0}),d(),typeof ResizeObserver<`u`&&i.value&&(p=new ResizeObserver(h),p.observe(i.value))}),Ye(()=>{i.value?.removeEventListener(`scroll`,f),p?.disconnect(),p=null,m&&cancelAnimationFrame(m)}),We(e,()=>{fe(d)}),{root:r,scroller:i,visibleRows:l,totalHeight:c,syncMetrics:d}}function fn(e){return e.kind===`header`?42:29}var pn=[{key:`conflicted`,match:e=>e.type===`conflicted`},{key:`staged`,match:e=>e.type===`added`},{key:`unstaged`,match:e=>e.type===`modified`||e.type===`deleted`},{key:`intent-to-add`,match:e=>e.type===`intent-to-add`},{key:`untracked`,match:e=>e.type===`untracked`}];function mn(e,t,n){let r=[];for(let i of pn){let a=e.filter(i.match);if(!a.length)continue;let o=!!t[i.key];if(r.push({kind:`header`,key:`h:${i.key}`,groupKey:i.key,title:n[i.key],count:a.length,collapsed:o}),!o)for(let e of a)r.push({kind:`file`,key:`f:${i.key}:${e.path}`,groupKey:i.key,file:e})}return r}c();var hn=T({__name:`VirtualFileList`,props:{rows:{type:Array,required:!0},isFileLocked:{type:Function,required:!0},isLocking:{type:Function,required:!0},getFileName:{type:Function,required:!0},getFileDirectory:{type:Function,required:!0},isSelectionMode:{type:Boolean,required:!1,default:!1},isFileSelected:{type:Function,required:!1},overscan:{type:Number,required:!1,default:400}},emits:[`toggleCollapse`,`fileClick`,`toggleFileLock`,`stageFile`,`unstageFile`,`revertFileChanges`,`manageLockedFiles`,`toggleFileSelection`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{root:a,visibleRows:o,totalHeight:s}=dn(()=>r.rows,fn,r.overscan),c={props:r,emit:i,root:a,visibleRows:o,totalHeight:s,get ArrowDown(){return ge},FileRow:cn};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}});c(),v();var gn={ref:`root`,class:`vfl`},_n=[`aria-expanded`,`onClick`],vn={class:`vfl__header-title`},yn={class:`file-count`};function bn(e,t,n,i,a,o){let s=E;return z(),J(`div`,gn,[h(`div`,{class:`vfl__spacer`,style:R({height:`${i.totalHeight}px`})},[(z(!0),J(Z,null,r(i.visibleRows,e=>(z(),J(`div`,{key:e.row.key,class:O([`vfl__row`,e.row.kind===`header`?`vfl__row--header`:`vfl__row--file`]),style:R({transform:`translateY(${e.top}px)`})},[N(` 分组标题行 `),e.row.kind===`header`?(z(),J(`div`,{key:0,class:`vfl__header`,role:`button`,"aria-expanded":!e.row.collapsed,onClick:t=>i.emit(`toggleCollapse`,e.row.groupKey)},[P(s,{class:O([`collapse-icon`,{collapsed:e.row.collapsed}])},{default:G(()=>[P(i.ArrowDown)]),_:1},8,[`class`]),h(`span`,vn,q(e.row.title),1),h(`span`,yn,`(`+q(e.row.count)+`)`,1)],8,_n)):(z(),J(Z,{key:1},[N(` 文件行 `),P(i.FileRow,{file:e.row.file,"is-file-locked":n.isFileLocked,"is-locking":n.isLocking,"get-file-name":n.getFileName,"get-file-directory":n.getFileDirectory,"is-selection-mode":n.isSelectionMode,"is-file-selected":n.isFileSelected,onFileClick:t[0]||=e=>i.emit(`fileClick`,e),onToggleFileLock:t[1]||=e=>i.emit(`toggleFileLock`,e),onStageFile:t[2]||=e=>i.emit(`stageFile`,e),onUnstageFile:t[3]||=e=>i.emit(`unstageFile`,e),onRevertFileChanges:t[4]||=e=>i.emit(`revertFileChanges`,e),onManageLockedFiles:t[5]||=e=>i.emit(`manageLockedFiles`),onToggleFileSelection:t[6]||=e=>i.emit(`toggleFileSelection`,e)},null,8,[`file`,`is-file-locked`,`is-locking`,`get-file-name`,`get-file-directory`,`is-selection-mode`,`is-file-selected`])],2112))],6))),128))],4)],512)}var xn=$(hn,[[`render`,bn],[`__scopeId`,`data-v-8d5a3432`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/VirtualFileList.vue`]]),Sn=42;function Cn(e){return e.kind===`tree-header`?Sn:33}function wn(e,t,n,r){for(let i of e)r.push({kind:`node`,key:`n:${t}:${i.path}`,groupKey:t,level:n,node:{...i,children:void 0},source:i}),i.isDirectory&&i.expanded&&i.children?.length&&wn(i.children,t,n+1,r)}function Tn(e,t){let n=[];for(let r of e){if(!r.tree?.length)continue;let e=!!t[r.key];n.push({kind:`tree-header`,key:`th:${r.key}`,groupKey:r.key,title:r.title,count:r.count,collapsed:e}),!e&&wn(r.tree,r.key,0,n)}return n}c();var En=T({__name:`VirtualFileTree`,props:{rows:{type:Array,required:!0},selectedFile:{type:String,required:!1,default:``},isFileLocked:{type:Function,required:!0},isLocking:{type:Function,required:!0},showActionButtons:{type:Boolean,required:!1,default:!0},overscan:{type:Number,required:!1,default:400}},emits:[`toggleCollapse`,`toggleNode`,`fileSelect`,`toggleLock`,`stage`,`unstage`,`revert`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{root:a,visibleRows:o,totalHeight:s}=dn(()=>r.rows,Cn,r.overscan);function c(e){e.source.isDirectory?i(`toggleNode`,e.source):i(`fileSelect`,{path:e.source.path,type:e.source.type||`modified`})}function l(e){return e.kind===`node`&&e.source.type||`modified`}let u={props:r,emit:i,root:a,visibleRows:o,totalHeight:s,handleNodeClick:c,fileTypeOf:l,get ArrowDown(){return ge},TreeNodeItem:Dt};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});c(),v();var Dn={ref:`root`,class:`vft`},On=[`aria-expanded`,`onClick`],kn={class:`vft__header-title`},An={class:`file-count`};function jn(e,t,n,i,a,o){let s=E;return z(),J(`div`,Dn,[h(`div`,{class:`vft__spacer`,style:R({height:`${i.totalHeight}px`})},[(z(!0),J(Z,null,r(i.visibleRows,e=>(z(),J(`div`,{key:e.row.key,class:O([`vft__row`,e.row.kind===`tree-header`?`vft__row--header`:`vft__row--node`]),style:R({transform:`translateY(${e.top}px)`})},[N(` 分组标题行 `),e.row.kind===`tree-header`?(z(),J(`div`,{key:0,class:`vft__header`,role:`button`,"aria-expanded":!e.row.collapsed,onClick:t=>i.emit(`toggleCollapse`,e.row.groupKey)},[P(s,{class:O([`collapse-icon`,{collapsed:e.row.collapsed}])},{default:G(()=>[P(i.ArrowDown)]),_:1},8,[`class`]),h(`span`,kn,q(e.row.title),1),h(`span`,An,`(`+q(e.row.count)+`)`,1)],8,On)):(z(),J(Z,{key:1},[N(` 节点行(复用 TreeNodeItem) `),P(i.TreeNodeItem,{node:e.row.node,level:e.row.level,"selected-file":n.selectedFile,"show-action-buttons":n.showActionButtons,"is-file-locked":n.isFileLocked,"is-locking":n.isLocking,onNodeClick:t=>i.handleNodeClick(e.row),onFileSelect:t=>i.emit(`fileSelect`,{path:t,type:i.fileTypeOf(e.row)}),onToggleLock:t[0]||=e=>i.emit(`toggleLock`,e),onStage:t[1]||=e=>i.emit(`stage`,e),onUnstage:t[2]||=e=>i.emit(`unstage`,e),onRevert:t[3]||=e=>i.emit(`revert`,e)},null,8,[`node`,`level`,`selected-file`,`show-action-buttons`,`is-file-locked`,`is-locking`,`onNodeClick`,`onFileSelect`])],2112))],6))),128))],4)],512)}var Mn=$(En,[[`render`,jn],[`__scopeId`,`data-v-0be6a060`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/VirtualFileTree.vue`]]);c(),X();var Nn=T({__name:`NpmSettingsDialog`,props:{visible:{type:Boolean,required:!0},packageInfo:{type:Object,required:!0}},emits:[`close`,`complete`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=U(`version`),o=U(`patch`),s=U(!1),c=U(``),l=U(``),u=U(!1),d=U(``),f=U(!1),p=U(!1),m=U(!1),h=U(``);function g(e){return e.trim()?e.includes(` `)?(h.value=Q(`@NPM01:脚本名称不能包含空格`),!1):/^[a-zA-Z_:][a-zA-Z0-9_:.-]*$/.test(e)?(h.value=``,!0):(h.value=Q(`@NPM01:脚本名称只能包含字母、数字、连字符、冒号、下划线和点号,且不能以数字开头`),!1):(h.value=``,!1)}function _(){c.value.trim()?g(c.value):h.value=``}let v=[{label:Q(`@NPM01:主版本号 (major)`),value:`major`,desc:`1.0.0 → 2.0.0`},{label:Q(`@NPM01:次版本号 (minor)`),value:`minor`,desc:`1.0.0 → 1.1.0`},{label:Q(`@NPM01:修订号 (patch)`),value:`patch`,desc:`1.0.0 → 1.0.1`}];async function y(){try{s.value=!0;let e=await(await fetch(`/api/update-npm-version`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:r.packageInfo.path,versionType:o.value})})).json();e.success?(V.success(`${Q(`@NPM01:版本号已更新`)}: ${e.oldVersion} → ${e.newVersion}`),i(`complete`)):V.error(e.error||Q(`@NPM01:更新版本号失败`))}catch(e){console.error(`更新版本号失败:`,e),V.error(Q(`@NPM01:更新版本号失败`))}finally{s.value=!1}}async function b(){if(!c.value.trim()){V.warning(Q(`@NPM01:请输入脚本名称`));return}if(!g(c.value)){V.warning(h.value||Q(`@NPM01:脚本名称格式不正确`));return}if(!l.value.trim()){V.warning(Q(`@NPM01:请输入脚本命令`));return}try{u.value=!0;let e=m.value?`/api/update-npm-script`:`/api/add-npm-script`,t=await(await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:r.packageInfo.path,scriptName:c.value.trim(),scriptCommand:l.value.trim(),oldScriptName:m.value?d.value:void 0})})).json();t.success?(V.success(m.value?Q(`@NPM01:脚本已更新`):Q(`@NPM01:脚本已添加`)),S(),i(`complete`)):V.error(t.error||(m.value?Q(`@NPM01:更新脚本失败`):Q(`@NPM01:添加脚本失败`)))}catch(e){console.error(`保存脚本失败:`,e),V.error(m.value?Q(`@NPM01:更新脚本失败`):Q(`@NPM01:添加脚本失败`))}finally{u.value=!1}}function x(e,t){m.value=!0,d.value=e,c.value=e,l.value=t,h.value=``}function S(){m.value=!1,d.value=``,c.value=``,l.value=``,h.value=``}async function C(e){try{p.value=!0;let t=await(await fetch(`/api/pin-npm-script`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:r.packageInfo.path,scriptName:e})})).json();t.success?(V.success(Q(`@NPM01:脚本已置顶`)),i(`complete`)):V.error(t.error||Q(`@NPM01:置顶脚本失败`))}catch(e){console.error(`置顶脚本失败:`,e),V.error(Q(`@NPM01:置顶脚本失败`))}finally{p.value=!1}}async function w(e){try{await Me.confirm(Q(`@NPM01:确定要删除脚本`)+` "${e}" `+Q(`@NPM01:吗?`),Q(`@NPM01:删除脚本`),{confirmButtonText:Q(`@NPM01:确定`),cancelButtonText:Q(`@NPM01:取消`),type:`warning`}),f.value=!0;let t=await(await fetch(`/api/delete-npm-script`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:r.packageInfo.path,scriptName:e})})).json();t.success?(V.success(Q(`@NPM01:脚本已删除`)),i(`complete`)):V.error(t.error||Q(`@NPM01:删除脚本失败`))}catch(e){e!==`cancel`&&(console.error(`删除脚本失败:`,e),V.error(Q(`@NPM01:删除脚本失败`)))}finally{f.value=!1}}function T(){a.value=`version`,o.value=`patch`,S(),i(`close`)}let ee={props:r,emit:i,activeTab:a,versionType:o,isUpdatingVersion:s,scriptName:c,scriptCommand:l,isAddingScript:u,editingScriptName:d,isDeletingScript:f,isPinningScript:p,isEditMode:m,scriptNameError:h,validateScriptName:g,handleScriptNameInput:_,versionOptions:v,updateVersion:y,saveScript:b,editScript:x,cancelEdit:S,pinScript:C,deleteScript:w,handleClose:T,get $t(){return Q},CommonDialog:Kt};return Object.defineProperty(ee,"__isScriptSetup",{enumerable:!1,value:!0}),ee}});c(),v();var Pn={class:`settings-content`},Fn={class:`package-info-bar`},In={class:`info-label`},Ln={class:`info-value`},Rn={class:`info-path`},zn={class:`tab-content`},Bn={class:`current-version`},Vn={class:`version-label`},Hn={class:`version-value`},Un={class:`version-options`},Wn={class:`option-label`},Gn={class:`radio-content`},Kn={class:`radio-label`},qn={class:`radio-desc`},Jn={class:`tab-content script-management`},Yn={class:`scripts-list-section`},Xn={class:`section-header`},Zn={class:`section-title`},Qn={class:`script-count`},$n={key:0,class:`empty-scripts`},er={key:1,class:`script-items`},tr={class:`script-item-content`},nr={class:`script-name-tag`},rr={class:`name-text`},ir={class:`script-command`},ar={class:`script-item-actions`},or={class:`script-form-section`},sr={class:`section-header`},cr={class:`section-title`},lr={class:`form-group`},ur={class:`form-item`},dr={class:`form-label`},fr={key:0,class:`error-tip`},pr={key:1,class:`success-tip`},mr={class:`form-item`},hr={class:`form-label`};function gr(e,t,n,i,o,s){let c=a,l=A,u=pt,d=we,f=lt,m=E,g=jt,_=I,v=Ee;return z(),p(i.CommonDialog,{"model-value":n.visible,title:n.packageInfo.name+` - `+i.$t(`@NPM01:NPM 设置`),size:`medium`,onClose:i.handleClose},{default:G(()=>[h(`div`,Pn,[N(` 包信息 `),h(`div`,Fn,[h(`span`,In,q(i.$t(`@NPM01:包名称`))+`:`,1),h(`span`,Ln,q(n.packageInfo.name),1),h(`span`,Rn,q(n.packageInfo.relativePath),1)]),N(` 功能选项卡 `),P(v,{modelValue:i.activeTab,"onUpdate:modelValue":t[3]||=e=>i.activeTab=e,class:`settings-tabs`},{default:G(()=>[N(` 版本号增加 `),P(d,{label:i.$t(`@NPM01:版本号管理`),name:`version`},{default:G(()=>[h(`div`,zn,[h(`div`,Bn,[h(`span`,Vn,q(i.$t(`@NPM01:当前版本`))+`:`,1),h(`span`,Hn,q(n.packageInfo.version),1)]),h(`div`,Un,[h(`label`,Wn,q(i.$t(`@NPM01:选择要增加的版本号类型`))+`:`,1),P(l,{modelValue:i.versionType,"onUpdate:modelValue":t[0]||=e=>i.versionType=e,class:`version-radio-group`},{default:G(()=>[(z(),J(Z,null,r(i.versionOptions,e=>P(c,{key:e.value,value:e.value,border:``,class:`version-radio`},{default:G(()=>[h(`div`,Gn,[h(`span`,Kn,q(e.label),1),h(`span`,qn,q(e.desc),1)])]),_:2},1032,[`value`])),64))]),_:1},8,[`modelValue`])]),P(u,{type:`primary`,loading:i.isUpdatingVersion,onClick:i.updateVersion,class:`action-button`},{default:G(()=>[M(q(i.$t(`@NPM01:更新版本号`)),1)]),_:1},8,[`loading`])])]),_:1},8,[`label`]),N(` 脚本管理 `),P(d,{label:i.$t(`@NPM01:脚本管理`),name:`script`},{default:G(()=>[h(`div`,Jn,[N(` 现有脚本列表 `),h(`div`,Yn,[h(`div`,Xn,[h(`span`,Zn,q(i.$t(`@NPM01:当前脚本列表`)),1),h(`span`,Qn,q(Object.keys(n.packageInfo.scripts||{}).length)+` `+q(i.$t(`@NPM01:个脚本`)),1)]),Object.keys(n.packageInfo.scripts||{}).length===0?(z(),J(`div`,$n,[P(f,{description:i.$t(`@NPM01:暂无脚本`),"image-size":80},null,8,[`description`])])):(z(),J(`div`,er,[(z(!0),J(Z,null,r(n.packageInfo.scripts,(e,n)=>(z(),J(`div`,{key:n,class:`script-item-card`},[h(`div`,tr,[h(`div`,nr,[P(m,{class:`script-icon`},{default:G(()=>[...t[4]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M160 224a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64V288a64 64 0 0 0-64-64H160zm0-64h704a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H160A128 128 0 0 1 32 736V288a128 128 0 0 1 128-128z`}),h(`path`,{fill:`currentColor`,d:`m448 327.872 163.2 160-163.2 160-45.248-46.08L502.4 487.872l-99.648-99.84L448 327.872z`})],-1)]]),_:1}),h(`span`,rr,q(n),1)]),h(`div`,ir,[h(`code`,null,q(e),1)])]),h(`div`,ar,[P(u,{size:`small`,text:``,class:`pin-button`,onClick:e=>i.pinScript(n),loading:i.isPinningScript,title:`置顶`},{default:G(()=>[P(g,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:1},8,[`onClick`,`loading`]),P(u,{size:`small`,type:`primary`,text:``,onClick:t=>i.editScript(n,e),disabled:i.isEditMode&&i.editingScriptName===n,title:i.$t(`@NPM01:编辑`)},{default:G(()=>[P(m,null,{default:G(()=>[...t[5]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z`}),h(`path`,{fill:`currentColor`,d:`m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088l-139.456 19.904a32 32 0 0 1-36.224-36.224l19.904-139.456a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.808 0z`})],-1)]]),_:1})]),_:1},8,[`onClick`,`disabled`,`title`]),P(u,{size:`small`,type:`danger`,text:``,onClick:e=>i.deleteScript(n),loading:i.isDeletingScript,title:i.$t(`@NPM01:删除`)},{default:G(()=>[P(m,null,{default:G(()=>[...t[6]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32zm192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z`})],-1)]]),_:1})]),_:1},8,[`onClick`,`loading`,`title`])])]))),128))]))]),N(` 添加/编辑脚本表单 `),h(`div`,or,[h(`div`,sr,[h(`span`,cr,q(i.isEditMode?i.$t(`@NPM01:编辑脚本`):i.$t(`@NPM01:添加新脚本`)),1),i.isEditMode?(z(),p(u,{key:0,size:`small`,text:``,onClick:i.cancelEdit},{default:G(()=>[M(q(i.$t(`@NPM01:取消编辑`)),1)]),_:1})):N(`v-if`,!0)]),h(`div`,lr,[h(`div`,ur,[h(`label`,dr,q(i.$t(`@NPM01:脚本名称`))+`:`,1),P(_,{modelValue:i.scriptName,"onUpdate:modelValue":t[1]||=e=>i.scriptName=e,placeholder:i.$t(`@NPM01:例如: build, dev, test`),disabled:i.isEditMode,clearable:``,onInput:i.handleScriptNameInput},null,8,[`modelValue`,`placeholder`,`disabled`]),i.scriptNameError?(z(),J(`div`,fr,[P(m,null,{default:G(()=>[...t[7]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm0 832a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0zm-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32z`})],-1)]]),_:1}),h(`span`,null,q(i.scriptNameError),1)])):i.scriptName.trim()&&!i.isEditMode?(z(),J(`div`,pr,[P(m,null,{default:G(()=>[...t[8]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336L456.192 600.384z`})],-1)]]),_:1}),h(`span`,null,q(i.$t(`@NPM01:脚本名称格式正确`)),1)])):N(`v-if`,!0)]),h(`div`,mr,[h(`label`,hr,q(i.$t(`@NPM01:脚本命令`))+`:`,1),P(_,{modelValue:i.scriptCommand,"onUpdate:modelValue":t[2]||=e=>i.scriptCommand=e,placeholder:i.$t(`@NPM01:例如: vite build, vite dev`),clearable:``},null,8,[`modelValue`,`placeholder`])])]),P(u,{type:`primary`,loading:i.isAddingScript,disabled:!i.scriptName.trim()||!i.scriptCommand.trim(),onClick:i.saveScript,class:`action-button`},{default:G(()=>[M(q(i.isEditMode?i.$t(`@NPM01:更新脚本`):i.$t(`@NPM01:添加脚本`)),1)]),_:1},8,[`loading`,`disabled`])])])]),_:1},8,[`label`])]),_:1},8,[`modelValue`])])]),_:1},8,[`model-value`,`title`])}var _r=$(Nn,[[`render`,gr],[`__scopeId`,`data-v-86093677`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/NpmSettingsDialog.vue`]]);c(),X();var vr=200,yr=600,br=16,xr=T({__name:`NpmScriptsPanel`,setup(e,{expose:t}){t();let n=U(!0);function r(){n.value=!n.value}let i=U([]),a=U(!1),o=U(new Set),s=U(!1),c=U(``),l=U(null);function u(e){c.value=e.path,l.value=e,s.value=!0}function d(){s.value=!1,c.value=``,l.value=null}function p(){d(),w()}function m(e){if(!e)return null;if(typeof e==`string`)return e;if(typeof e==`object`&&e.url){let t=e.url;return t=t.replace(/^git\+/,``),t=t.replace(/\.git$/,``),t}return null}function h(e){let t=m(e.repository);t&&window.open(t,`_blank`)}let g=U(300),_=U(!1),v=U(0),y=U(0);function b(e){_.value=!0,v.value=e.clientY,y.value=g.value,document.addEventListener(`mousemove`,x),document.addEventListener(`mouseup`,S),e.preventDefault()}function x(e){if(!_.value)return;let t=v.value-e.clientY,n=Math.max(vr,Math.min(yr,y.value+t));g.value=n}function S(){_.value=!1,document.removeEventListener(`mousemove`,x),document.removeEventListener(`mouseup`,S)}function C(e){e.key===`ArrowUp`?(e.preventDefault(),g.value=Math.min(yr,g.value+br)):e.key===`ArrowDown`?(e.preventDefault(),g.value=Math.max(vr,g.value-br)):e.key===`Home`?(e.preventDefault(),g.value=yr):e.key===`End`&&(e.preventDefault(),g.value=vr)}async function w(){let e=Date.now();console.log(`[NPM面板] 开始加载npm脚本...`);try{a.value=!0;let t=new AbortController,n=3e4,r=setTimeout(()=>{t.abort(),console.warn(`[NPM面板] 超时${n}ms,中断请求`)},n);console.log(`[NPM面板] 发起请求到后端(超时${n}ms)...`);let o=Date.now(),s=await fetch(`/api/scan-npm-scripts`,{signal:t.signal});clearTimeout(r);let c=Date.now()-o;console.log(`[NPM面板] 后端响应完成,耗时${c}ms`);let l=Date.now(),u=await s.json(),d=Date.now()-l;if(console.log(`[NPM面板] JSON解析完成,耗时${d}ms`),u.success){if(u.cancelled){console.log(`[NPM面板] 扫描被取消,总耗时${Date.now()-e}ms`);return}i.value=u.packages,console.log(`[NPM面板] 加载完成,找到${i.value.length}个package.json,共${u.totalScripts}个脚本,总耗时${Date.now()-e}ms`),i.value.length===0&&console.log(`[NPM面板] 未找到包含scripts的package.json`)}else console.error(`[NPM面板] 加载失败,耗时${Date.now()-e}ms`),V.error(Q(`@NPM01:加载npm脚本失败`))}catch(t){t.name===`AbortError`?(console.warn(`[NPM面板] 请求超时被中断,耗时${Date.now()-e}ms`),V.warning(`NPM脚本扫描超时,请稍后重试`)):console.error(`[NPM面板] 加载失败,耗时${Date.now()-e}ms,错误:`,t)}finally{a.value=!1}}function T(e){o.value.has(e)?o.value.delete(e):o.value.add(e)}async function ee(e,t){try{let n=await(await fetch(`/api/run-npm-script`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({packagePath:e,scriptName:t})})).json();n.success?V.success(`${Q(`@NPM01:已在新终端中执行`)}: ${t}`):V.error(n.error||Q(`@NPM01:执行脚本失败`))}catch(e){console.error(`执行npm脚本失败:`,e),V.error(`${Q(`@NPM01:执行脚本失败`)}: ${e.message}`)}}_e(()=>{w()});let E={collapsed:n,toggleCollapsed:r,packages:i,isLoading:a,expandedPackages:o,showSettingsDialog:s,selectedPackagePath:c,selectedPackageInfo:l,openSettings:u,closeSettings:d,handleSettingsComplete:p,getRepositoryUrl:m,openRepository:h,panelHeight:g,isResizing:_,startY:v,startHeight:y,MIN_PANEL_HEIGHT:vr,MAX_PANEL_HEIGHT:yr,KEY_NUDGE_PX:br,startResize:b,handleResize:x,stopResize:S,onResizeKeydown:C,loadNpmScripts:w,togglePackage:T,runScript:ee,get FolderOpened(){return f},get $t(){return Q},NpmSettingsDialog:_r,IconButton:Mt,SvgIcon:jt};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}});c(),v(),K();var Sr={class:`npm-scripts-panel`},Cr={class:`header-left`},wr={class:`panel-title`},Tr=[`aria-valuenow`,`aria-label`],Er={key:0,class:`loading-container`},Dr={class:`loading-text`},Or={key:1,class:`empty-container`},kr={class:`empty-text`},Ar=[`onClick`],jr={class:`package-info`},Mr={class:`package-name`},Nr={class:`package-path`},Pr={key:0,class:`scripts-list`},Fr=[`onClick`],Ir={class:`script-left`},Lr={class:`script-name`},Rr={class:`script-command`};function zr(e,t,n,i,a,o){let s=E,c=L;return z(),J(`div`,Sr,[h(`div`,{class:`panel-header accordion-header`,onClick:i.toggleCollapsed},[h(`div`,Cr,[P(s,{class:O([`accordion-chevron`,{"is-collapsed":i.collapsed}])},{default:G(()=>[...t[1]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`]),P(i.SvgIcon,{"icon-class":`npm`,"class-name":`npm-icon`}),h(`span`,wr,q(i.$t(`@NPM01:NPM 脚本`)),1)]),h(`div`,{class:`header-right`,onClick:t[0]||=H(()=>{},[`stop`])},[P(i.IconButton,{size:`small`,disabled:i.isLoading,onClick:i.loadNpmScripts},{default:G(()=>[P(s,{class:O({"is-rotating":i.isLoading})},{default:G(()=>[...t[2]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z`})],-1)]]),_:1},8,[`class`])]),_:1},8,[`disabled`])])]),N(` 调节高度的拖拽条(展开时显示) OPT-4: 补 role/tabindex/aria-orientation + 键盘 nudge `),Y(h(`div`,{class:`resize-handle`,role:`separator`,tabindex:`0`,"aria-orientation":`horizontal`,"aria-valuenow":i.panelHeight,"aria-valuemin":i.MIN_PANEL_HEIGHT,"aria-valuemax":i.MAX_PANEL_HEIGHT,"aria-label":i.$t(`@NPM01:调整 NPM 脚本面板高度(上下方向键)`),onMousedown:i.startResize,onKeydown:i.onResizeKeydown},null,40,Tr),[[at,!i.collapsed]]),!i.collapsed&&i.isLoading?(z(),J(`div`,Er,[P(s,{class:`is-loading loading-icon`},{default:G(()=>[...t[3]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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}),h(`p`,Dr,q(i.$t(`@NPM01:正在扫描项目中的 npm 脚本...`)),1)])):!i.collapsed&&i.packages.length===0?(z(),J(`div`,Or,[t[4]||=h(`svg`,{class:`empty-icon`,viewBox:`0 0 1024 1024`,width:`64`,height:`64`},[h(`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),h(`p`,kr,q(i.$t(`@NPM01:当前项目中未找到包含 scripts 的 package.json`)),1)])):i.collapsed?N(`v-if`,!0):(z(),J(`div`,{key:2,class:`packages-container`,style:R({maxHeight:i.panelHeight+`px`})},[(z(!0),J(Z,null,r(i.packages,e=>(z(),J(`div`,{key:e.path,class:`package-item`},[h(`div`,{class:`package-header`,onClick:t=>i.togglePackage(e.path)},[P(s,{class:O([`expand-icon`,{expanded:i.expandedPackages.has(e.path)}])},{default:G(()=>[...t[5]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`]),P(s,{class:`folder-icon`},{default:G(()=>[P(i.FolderOpened)]),_:1}),h(`div`,jr,[h(`span`,Mr,q(e.name),1),h(`span`,Nr,q(e.relativePath),1)]),i.getRepositoryUrl(e.repository)?(z(),p(c,{key:0,content:i.getRepositoryUrl(e.repository),placement:`bottom`,"show-after":300},{default:G(()=>[P(s,{class:`repo-icon`,onClick:H(t=>i.openRepository(e),[`stop`])},{default:G(()=>[...t[6]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M458.64 119.072a84.176 84.176 0 0 1 106.72 0l366.912 300.4a32 32 0 0 1-40.544 49.52L524.816 168.592a20.176 20.176 0 0 0-25.632 0L132.272 468.992a32 32 0 1 1-40.544-49.52L458.64 119.072zM304.32 415.184c0-27.2 22-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552H353.76a49.504 49.504 0 0 1-49.472-49.552V415.2z m64 14.432v67.68h66.976v-67.68H368.32z m-162.976 36.96a32 32 0 0 1 32 32v307.2c0 21.28 17.12 38.224 37.856 38.224h471.52a38.032 38.032 0 0 0 37.84-38.224v-307.2a32 32 0 1 1 64 0v307.2c0 56.304-45.44 102.224-101.856 102.224H275.2c-56.4 0-101.856-45.92-101.856-102.224v-307.2a32 32 0 0 1 32-32z m98.976 168.048c0-27.216 22-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552H353.76a49.504 49.504 0 0 1-49.472-49.552v-96.544z m64 14.432v67.68h66.976v-67.68H368.32z m154.288-14.432c0-27.216 21.984-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552h-96.048a49.504 49.504 0 0 1-49.472-49.552v-96.544z m64 14.432v67.68h66.976v-67.68h-66.976z`})],-1)]]),_:1},8,[`onClick`])]),_:2},1032,[`content`])):N(`v-if`,!0),P(s,{class:`settings-icon`,onClick:H(t=>i.openSettings(e),[`stop`])},{default:G(()=>[...t[7]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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},8,[`onClick`])],8,Ar),i.expandedPackages.has(e.path)?(z(),J(`div`,Pr,[(z(!0),J(Z,null,r(e.scripts,(n,r)=>(z(),J(`div`,{key:r,class:`script-item`,onClick:t=>i.runScript(e.path,r)},[h(`div`,Ir,[P(s,{class:`play-icon`},{default:G(()=>[...t[8]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`}),h(`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`})],-1)]]),_:1}),h(`span`,Lr,q(r),1)]),h(`span`,Rr,q(n),1)],8,Fr))),128))])):N(`v-if`,!0)]))),128))],4)),N(` 设置对话框 `),i.selectedPackageInfo?(z(),p(i.NpmSettingsDialog,{key:3,visible:i.showSettingsDialog,"package-info":i.selectedPackageInfo,onClose:i.closeSettings,onComplete:i.handleSettingsComplete},null,8,[`visible`,`package-info`])):N(`v-if`,!0)])}var Br=$(xr,[[`render`,zr],[`__scopeId`,`data-v-13486225`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/NpmScriptsPanel.vue`]]);c(),X();var Vr=T({__name:`StashChangesButton`,props:{variant:{type:String,required:!1,default:`icon`}},setup(e,{expose:t}){t();let n=e,r=Bt(),i=Lt(),a=U(!1),s=U(``),c=U(!0),l=U(!1),u=F(()=>r.fileList.some(e=>e.type===`modified`||e.type===`added`||e.type===`deleted`||e.type===`untracked`||e.type===`intent-to-add`)),d=F(()=>{if(!u.value)return!1;let e=r.fileList.filter(e=>e.type===`modified`||e.type===`added`||e.type===`deleted`||e.type===`untracked`||e.type===`intent-to-add`);return e.length!==0&&e.every(e=>{let t=e.path.replace(/\\/g,`/`);return i.lockedFiles.some(e=>{let n=e.replace(/\\/g,`/`);return t===n})})});function f(){s.value=``,d.value||(l.value=!1),a.value=!0}async function p(){try{await r.saveStash(s.value,c.value,l.value),a.value=!1}catch(e){console.error(`储藏失败:`,e)}}function m(e){if(!(e.isComposing||e.keyCode===229)&&e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),r.isSavingStash||r.hasConflictedFiles)return;p()}}let h={props:n,gitStore:r,configStore:i,isStashDialogVisible:a,stashMessage:s,includeUntracked:c,excludeLocked:l,anyChangesIncludingLocked:u,allChangesAreLocked:d,openStashDialog:f,saveStash:p,handleStashMessageKeydown:m,get $t(){return Q},get Setting(){return te},get Document(){return qe},get Loading(){return o},get Check(){return nt},CommonDialog:Kt,IconButton:Mt,SvgIcon:jt};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}});c(),v();var Hr={key:0,class:`stash-changes-button`},Ur={class:`stash-dialog-content`},Wr={class:`stash-info-card`},Gr={class:`info-icon`},Kr={class:`info-content`},qr={class:`stash-options`},Jr={class:`options-title`},Yr={class:`option-item`},Xr={class:`option-label`},Zr={class:`option-desc`},Qr={class:`option-item`},$r={class:`option-label`},ei={key:0,class:`stash-preview`},ti={class:`preview-title`},ni={class:`file-count-info`},ri={class:`dialog-footer`},ii={class:`footer-actions`},ai=[`disabled`];function oi(e,t,n,r,i,a){let o=E,s=pt,c=I,l=ne,u=j,d=k,f=b;return r.anyChangesIncludingLocked?(z(),J(`div`,Hr,[N(` 储藏更改按钮 `),r.props.variant===`icon`?(z(),p(r.IconButton,{key:0,tooltip:r.gitStore.hasConflictedFiles?r.$t(`@76872:存在冲突文件,请先解决冲突`):r.$t(`@76872:将工作区更改储藏起来`),size:`medium`,disabled:r.gitStore.hasConflictedFiles||r.gitStore.isSavingStash,"hover-color":`var(--color-warning)`,onClick:r.openStashDialog},{default:G(()=>[r.gitStore.isSavingStash?(z(),p(o,{key:0,class:`is-loading`},{default:G(()=>[P(r.Loading)]),_:1})):(z(),p(r.SvgIcon,{key:1,"icon-class":`git-stash`}))]),_:1},8,[`tooltip`,`disabled`])):(z(),p(s,{key:1,type:`warning`,class:`action-button`,onClick:r.openStashDialog,loading:r.gitStore.isSavingStash,disabled:r.gitStore.hasConflictedFiles},{default:G(()=>[M(q(r.$t(`@76872:储藏更改`)),1)]),_:1},8,[`loading`,`disabled`])),N(` Stash弹窗:创建储藏 `),P(r.CommonDialog,{modelValue:r.isStashDialogVisible,"onUpdate:modelValue":t[4]||=e=>r.isStashDialogVisible=e,title:r.$t(`@76872:储藏更改 (Git Stash)`),size:`medium`,"close-on-click-modal":!1,"custom-class":`stash-dialog`},{footer:G(()=>[h(`div`,ri,[h(`div`,ii,[h(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[3]||=e=>r.isStashDialogVisible=!1},q(r.$t(`@76872:取消`)),1),h(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:r.saveStash,disabled:r.gitStore.isSavingStash||r.gitStore.hasConflictedFiles},[r.gitStore.isSavingStash?(z(),p(o,{key:1,class:`is-loading`},{default:G(()=>[P(r.Loading)]),_:1})):(z(),p(o,{key:0},{default:G(()=>[P(r.Check)]),_:1})),h(`span`,null,q(r.$t(`@76872:储藏`)),1)],8,ai)])])]),default:G(()=>[h(`div`,Ur,[N(` 功能说明卡片 `),h(`div`,Wr,[h(`div`,Gr,[P(r.SvgIcon,{"icon-class":`git-stash`})]),h(`div`,Kr,[h(`h4`,null,q(r.$t(`@76872:储藏工作区更改`)),1),h(`p`,null,q(r.$t(`@76872:将当前工作区的更改临时保存,稍后可以重新应用到任何分支`)),1)])]),P(f,{"label-position":`top`,class:`stash-form`},{default:G(()=>[P(l,{label:r.$t(`@76872:储藏说明`)},{default:G(()=>[P(c,{modelValue:r.stashMessage,"onUpdate:modelValue":t[0]||=e=>r.stashMessage=e,placeholder:r.$t(`@76872:为这次储藏添加描述信息(可选)`),clearable:``,onKeydown:r.handleStashMessageKeydown,rows:2,type:`textarea`,resize:`none`,maxlength:`200`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),N(` 选项配置 `),h(`div`,qr,[h(`h5`,Jr,[P(o,null,{default:G(()=>[P(r.Setting)]),_:1}),M(` `+q(r.$t(`@76872:储藏选项`)),1)]),h(`div`,Yr,[P(u,{modelValue:r.includeUntracked,"onUpdate:modelValue":t[1]||=e=>r.includeUntracked=e,size:`large`},{default:G(()=>[h(`span`,Xr,q(r.$t(`@76872:包含未跟踪文件`)),1)]),_:1},8,[`modelValue`]),h(`p`,Zr,q(r.$t(`@76872:同时储藏新建但未添加到Git的文件 (--include-untracked)`)),1)]),h(`div`,Qr,[P(u,{modelValue:r.excludeLocked,"onUpdate:modelValue":t[2]||=e=>r.excludeLocked=e,disabled:r.allChangesAreLocked,size:`large`},{default:G(()=>[h(`span`,$r,q(r.$t(`@76872:排除锁定文件`)),1)]),_:1},8,[`modelValue`,`disabled`]),h(`p`,{class:O([`option-desc`,{disabled:r.allChangesAreLocked}])},q(r.$t(`@76872:不储藏被锁定的文件,保持其当前状态`)),3)])]),N(` 储藏预览信息 `),r.gitStore.status.staged.length>0||r.gitStore.status.unstaged.length>0?(z(),J(`div`,ei,[h(`h5`,ti,[P(o,null,{default:G(()=>[P(r.Document)]),_:1}),M(` `+q(r.$t(`@76872:将要储藏的文件`)),1)]),h(`div`,ni,[r.gitStore.status.staged.length>0?(z(),p(d,{key:0,type:`success`},{default:G(()=>[M(q(r.$t(`@76872:已暂存: `))+q(r.gitStore.status.staged.length)+` `+q(r.$t(`@76872:个文件`)),1)]),_:1})):N(`v-if`,!0),r.gitStore.status.unstaged.length>0?(z(),p(d,{key:1,type:`warning`},{default:G(()=>[M(q(r.$t(`@76872:未暂存: `))+q(r.gitStore.status.unstaged.length)+` `+q(r.$t(`@76872:个文件`)),1)]),_:1})):N(`v-if`,!0)])])):N(`v-if`,!0)]),_:1})])]),_:1},8,[`modelValue`,`title`])])):N(`v-if`,!0)}var si=$(Vr,[[`render`,oi],[`__scopeId`,`data-v-469ed533`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/StashChangesButton.vue`]]);c(),X();var ci=T({__name:`StashListButton`,props:{variant:{type:String,required:!1,default:`icon`}},setup(e,{expose:t}){t();let r=e,i=Bt(),a=Ht(),o=U(!1),s=U(!1),c=U(null),l=U([]),u=U(``),d=U(!1),f=U(``),p=U(`compare`),m=U(``),h=U(``),g=F(()=>l.value.map(e=>({path:e,name:e.split(`/`).pop()||e})));function _(){i.getStashList(),o.value=!0}async function v(e,t=!1){try{await i.applyStash(e,t),t&&await i.getStashList()}catch(e){console.error(`应用储藏失败:`,e)}}async function y(e){Me.confirm(Q(`@76872:确定要删除此储藏吗?此操作不可恢复。`),Q(`@76872:删除储藏`),{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),type:`warning`}).then(async()=>{await i.dropStash(e),await i.getStashList()}).catch(()=>{})}async function b(){Me.confirm(Q(`@76872:确定要清空所有储藏吗?此操作不可恢复。`),Q(`@76872:清空所有储藏`),{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),type:`warning`}).then(async()=>{await i.clearAllStashes(),await i.getStashList()}).catch(()=>{})}async function x(e){if(e){c.value=e,s.value=!0,d.value=!0,l.value=[],u.value=``,m.value=``,h.value=``,f.value=``;try{if(!e.id||e.id.length<7){u.value=Q(`@76872:无效的stash ID`),d.value=!1;return}let t=await(await fetch(`/api/stash-files?stashId=${encodeURIComponent(e.id)}`)).json();t.success&&Array.isArray(t.files)?(l.value=t.files,l.value.length>0?p.value===`compare`?await C(e.id,l.value[0]):await S(e.id,l.value[0]):u.value=Q(`@76872:该stash没有变更文件`)):u.value=`${Q(`@76872:获取文件列表失败: `)}${t.error||Q(`@76872:未知错误`)}`}catch(e){u.value=`${Q(`@76872:获取stash详情失败: `)}${e.message}`}finally{d.value=!1}}}async function S(e,t){d.value=!0,f.value=t;try{let n=await(await fetch(`/api/stash-file-diff?stashId=${encodeURIComponent(e)}&file=${encodeURIComponent(t)}`)).json();n.success?u.value=n.diff||Q(`@76872:没有变更内容`):u.value=`${Q(`@76872:获取差异失败: `)}${n.error||Q(`@76872:未知错误`)}`}catch(e){u.value=`${Q(`@76872:获取差异失败: `)}${e.message}`}finally{d.value=!1}}async function C(e,t){d.value=!0,f.value=t,u.value=``;try{let n=await(await fetch(`/api/stash-file-compare?stashId=${encodeURIComponent(e)}&file=${encodeURIComponent(t)}`)).json();n.success?(m.value=n.original??``,h.value=n.modified??``):(m.value=``,h.value=``)}catch{m.value=``,h.value=``}finally{d.value=!1}}function w(){p.value=`diff`,c.value&&f.value&&S(c.value.id,f.value)}function T(){p.value=`compare`,c.value&&f.value&&C(c.value.id,f.value)}function ee(e){c.value&&(p.value===`compare`?C(c.value.id,e):S(c.value.id,e))}async function E(e,t){try{let n=await(await fetch(`/api/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?V.success(n.message):V.error(n.error||Q(`@76872:打开文件失败`))}catch(e){V.error(`${Q(`@76872:打开文件失败: `)}${e.message}`)}}async function D(e,t){try{let n=await(await fetch(`/api/open-with-vscode`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?V.success(n.message):V.error(n.error||Q(`@76872:用VSCode打开文件失败`))}catch(e){V.error(`${Q(`@76872:用VSCode打开文件失败: `)}${e.message}`)}}function O(e,t){o.value=!1,window.dispatchEvent(new CustomEvent(`zen-gitsync:open-file-in-editor`,{detail:{filePath:e}}))}let te={props:r,gitStore:i,toolsStore:a,isStashListDialogVisible:o,stashDetailVisible:s,selectedStash:c,stashFiles:l,stashDiff:u,isLoadingStashDetail:d,selectedStashFile:f,stashDiffViewMode:p,stashCompareOriginal:m,stashCompareModified:h,stashFilesForViewer:g,openStashListDialog:_,applyStash:v,confirmDropStash:y,confirmClearAllStashes:b,viewStashDetail:x,getStashFileDiff:S,getStashFileCompare:C,showStashDiffOnly:w,showStashFullCompare:T,handleStashFileSelect:ee,handleOpenFile:E,handleOpenWithVSCode:D,handleOpenInEditor:O,get $t(){return Q},get Box(){return n},get Delete(){return Re},get Edit(){return je},get Download(){return Be},get Check(){return nt},CommonDialog:Kt,FileDiffViewer:At,IconButton:Mt};return Object.defineProperty(te,"__isScriptSetup",{enumerable:!1,value:!0}),te}});c(),v();var li={class:`stash-list-button`},ui={class:`stash-list-content`},di={key:0,class:`stash-header`},fi={class:`stash-stats`},pi={class:`stat-item`},mi={class:`stat-number`},hi={class:`stat-label`},gi={key:0,class:`stash-actions-header`},_i={class:`stash-list-container`},vi={key:0,class:`empty-state`},yi={class:`empty-text`},bi={class:`empty-hint`},xi={key:1,class:`stash-cards`},Si={class:`stash-card-content`},Ci={class:`stash-info`},wi={class:`stash-main-info`},Ti={class:`stash-id-badge`},Ei={class:`stash-id-text`},Di={class:`stash-description`},Oi={class:`description-text`},ki={class:`stash-card-actions`},Ai={class:`stash-content`},ji={key:0,class:`stash-info-row`},Mi={class:`stash-id`},Ni={class:`stash-id-value`},Pi={class:`stash-description`},Fi={class:`info-label`},Ii={class:`stash-description-value`},Li={class:`stash-main-content`};function Ri(e,t,n,i,a,o){let s=E,c=pt,l=lt,u=k,d=He;return z(),J(`div`,li,[N(` 储藏列表按钮 `),i.props.variant===`icon`?(z(),p(i.IconButton,{key:0,tooltip:i.$t(`@76872:查看和管理所有储藏记录`),size:`medium`,"hover-color":`var(--color-info)`,onClick:i.openStashListDialog},{default:G(()=>[P(s,null,{default:G(()=>[P(i.Box)]),_:1})]),_:1},8,[`tooltip`])):(z(),p(c,{key:1,type:`info`,class:`action-button`,onClick:i.openStashListDialog},{default:G(()=>[M(q(i.$t(`@76872:储藏列表`)),1)]),_:1})),N(` Stash列表弹窗 `),P(i.CommonDialog,{modelValue:i.isStashListDialogVisible,"onUpdate:modelValue":t[0]||=e=>i.isStashListDialogVisible=e,title:i.$t(`@76872:储藏列表 (Git Stash)`),size:`large`,"show-footer":!1,"custom-class":`stash-list-dialog`},{default:G(()=>[h(`div`,ui,[N(` 头部统计信息 `),i.gitStore.isLoadingStashes?N(`v-if`,!0):(z(),J(`div`,di,[h(`div`,fi,[h(`div`,pi,[P(s,{class:`stat-icon`},{default:G(()=>[P(i.Box)]),_:1}),h(`span`,mi,q(i.gitStore.stashes.length),1),h(`span`,hi,q(i.$t(`@76872:个储藏`)),1)])]),i.gitStore.stashes.length>0?(z(),J(`div`,gi,[P(c,{type:`danger`,size:`small`,icon:i.Delete,onClick:i.confirmClearAllStashes,loading:i.gitStore.isDroppingStash,class:`clear-all-btn`},{default:G(()=>[M(q(i.$t(`@76872:清空所有储藏`)),1)]),_:1},8,[`icon`,`loading`])])):N(`v-if`,!0)])),N(` 储藏列表 `),Y((z(),J(`div`,_i,[i.gitStore.stashes.length===0&&!i.gitStore.isLoadingStashes?(z(),J(`div`,vi,[P(l,{description:i.$t(`@76872:暂无储藏记录`),"image-size":120},{image:G(()=>[P(s,{class:`empty-icon`},{default:G(()=>[P(i.Box)]),_:1})]),description:G(()=>[h(`p`,yi,q(i.$t(`@76872:还没有任何储藏记录`)),1),h(`p`,bi,q(i.$t(`@76872:使用 git stash 可以临时保存工作进度`)),1)]),_:1},8,[`description`])])):(z(),J(`div`,xi,[(z(!0),J(Z,null,r(i.gitStore.stashes,(e,t)=>(z(),J(`div`,{key:e.id,class:O([`stash-card`,{"stash-card-latest":t===0}])},[h(`div`,Si,[h(`div`,Ci,[h(`div`,wi,[h(`div`,Ti,[P(s,{class:`badge-icon`},{default:G(()=>[P(i.Box)]),_:1}),h(`span`,Ei,q(e.id),1),t===0?(z(),p(u,{key:0,size:`small`,type:`success`,class:`latest-tag`},{default:G(()=>[M(q(i.$t(`@76872:最新`)),1)]),_:1})):N(`v-if`,!0)]),h(`div`,Di,[h(`span`,Oi,q(e.description),1)])])]),h(`div`,ki,[P(c,{size:`small`,type:`info`,icon:i.Edit,onClick:t=>i.viewStashDetail(e),loading:i.isLoadingStashDetail,class:`action-btn view-btn`},{default:G(()=>[M(q(i.$t(`@76872:查看`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),P(c,{size:`small`,type:`success`,icon:i.Download,onClick:t=>i.applyStash(e.id,!1),loading:i.gitStore.isApplyingStash,class:`action-btn apply-btn`},{default:G(()=>[M(q(i.$t(`@76872:应用`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),P(c,{size:`small`,type:`primary`,icon:i.Check,onClick:t=>i.applyStash(e.id,!0),loading:i.gitStore.isApplyingStash,class:`action-btn apply-pop-btn`},{default:G(()=>[M(q(i.$t(`@76872:应用并删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),P(c,{size:`small`,type:`danger`,icon:i.Delete,onClick:t=>i.confirmDropStash(e.id),loading:i.gitStore.isDroppingStash,class:`action-btn delete-btn`},{default:G(()=>[M(q(i.$t(`@76872:删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`])])])],2))),128))]))])),[[d,i.gitStore.isLoadingStashes]])])]),_:1},8,[`modelValue`,`title`]),N(` Stash详情弹窗 `),P(i.CommonDialog,{modelValue:i.stashDetailVisible,"onUpdate:modelValue":t[1]||=e=>i.stashDetailVisible=e,title:i.$t(`@76872:储藏详情`),"custom-class":`stash-detail-dialog`,size:`extra-large`,type:`flex`,heightMode:`fixed`,"close-on-click-modal":!1},{default:G(()=>[h(`div`,Ai,[N(` 储藏信息横向布局 `),i.selectedStash?(z(),J(`div`,ji,[h(`div`,Mi,[t[2]||=h(`span`,{class:`info-label`},`Stash ID:`,-1),h(`code`,Ni,q(i.selectedStash.id),1)]),h(`div`,Pi,[h(`span`,Fi,q(i.$t(`@76872:描述:`)),1),h(`span`,Ii,q(i.selectedStash.description),1)])])):N(`v-if`,!0),N(` 文件差异查看器 `),h(`div`,Li,[P(i.FileDiffViewer,{files:i.stashFilesForViewer,diffContent:i.stashDiff,selectedFile:i.selectedStashFile,isLoading:i.isLoadingStashDetail,compareMode:i.stashDiffViewMode===`compare`,compareOriginal:i.stashCompareOriginal,compareModified:i.stashCompareModified,context:`stash-detail`,emptyText:i.$t(`@76872:该stash没有变更文件`),showVscodeButton:i.toolsStore.vscodeAvailable,onFileSelect:i.handleStashFileSelect,onOpenFile:i.handleOpenFile,onOpenWithVscode:i.handleOpenWithVSCode,onOpenInEditor:i.handleOpenInEditor},{"header-extra":G(()=>[P(c,{size:`small`,type:i.stashDiffViewMode===`diff`?`primary`:`default`,onClick:i.showStashDiffOnly},{default:G(()=>[M(q(i.$t(`@76872:仅显示差异`)),1)]),_:1},8,[`type`]),P(c,{size:`small`,type:i.stashDiffViewMode===`compare`?`primary`:`default`,onClick:i.showStashFullCompare},{default:G(()=>[M(q(i.$t(`@76872:显示完整对比`)),1)]),_:1},8,[`type`])]),_:1},8,[`files`,`diffContent`,`selectedFile`,`isLoading`,`compareMode`,`compareOriginal`,`compareModified`,`emptyText`,`showVscodeButton`])])])]),_:1},8,[`modelValue`,`title`])])}var zi=$(ci,[[`render`,Ri],[`__scopeId`,`data-v-a07cc588`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/StashListButton.vue`]]);c(),X();var Bi=T({__name:`StashSelectedFilesButton`,props:{selectedFiles:{type:Array,required:!0},variant:{type:String,required:!1,default:`icon`}},emits:[`success`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Bt(),s=Lt(),c=U(!1),l=U(``),u=U(!0),d=U(!1),f=F(()=>r.selectedFiles.length>0),p=F(()=>r.selectedFiles.filter(e=>{let t=e.replace(/\\/g,`/`);return s.lockedFiles.some(e=>{let n=e.replace(/\\/g,`/`);return t===n})}));function m(){if(!f.value){V.warning(Q(`@76872:请先选择要储藏的文件`));return}l.value=``,d.value=!1,c.value=!0}async function h(){try{let e=r.selectedFiles;if(d.value&&p.value.length>0&&(e=r.selectedFiles.filter(e=>{let t=e.replace(/\\/g,`/`);return!s.lockedFiles.some(e=>{let n=e.replace(/\\/g,`/`);return t===n})}),e.length===0)){V.warning(Q(`@76872:所有选中的文件都是锁定文件,无法储藏`));return}await a.savePartialStash(e,l.value,u.value),c.value=!1,i(`success`)}catch(e){console.error(`储藏选中文件失败:`,e)}}function g(e){if(!(e.isComposing||e.keyCode===229)&&e.key===`Enter`&&!e.shiftKey){if(e.preventDefault(),a.isSavingStash)return;h()}}let _={props:r,emit:i,gitStore:a,configStore:s,isStashDialogVisible:c,stashMessage:l,includeUntracked:u,excludeLocked:d,hasSelectedFiles:f,lockedFilesInSelection:p,openStashDialog:m,saveStash:h,handleStashMessageKeydown:g,get $t(){return Q},get Setting(){return te},get Loading(){return o},get Check(){return nt},CommonDialog:Kt,IconButton:Mt,SvgIcon:jt};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}});c(),v();var Vi={key:0,class:`stash-selected-files-button`},Hi={class:`stash-dialog-content`},Ui={class:`stash-info-card`},Wi={class:`info-icon`},Gi={class:`info-content`},Ki={class:`stash-options`},qi={class:`options-title`},Ji={class:`option-item`},Yi={class:`option-label`},Xi={class:`option-desc`},Zi={class:`option-item`},Qi={class:`option-label`},$i={class:`option-desc`},ea={key:0,class:`locked-count`},ta={class:`stash-preview`},na={class:`preview-title`},ra={class:`file-count-info`},ia={class:`file-list-preview`},aa={key:0,class:`more-files`},oa={class:`dialog-footer`},sa={class:`footer-actions`},ca=[`disabled`];function la(e,t,n,i,a,o){let s=E,c=pt,l=I,u=ne,d=j,f=k,m=b;return i.hasSelectedFiles?(z(),J(`div`,Vi,[N(` 储藏选中文件按钮 `),i.props.variant===`icon`?(z(),p(i.IconButton,{key:0,tooltip:i.$t(`@76872:储藏选中的文件`),size:`large`,disabled:i.gitStore.isSavingStash||!i.hasSelectedFiles,"hover-color":`var(--color-warning)`,onClick:i.openStashDialog},{default:G(()=>[i.gitStore.isSavingStash?(z(),p(s,{key:0,class:`is-loading`},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(i.SvgIcon,{key:1,"icon-class":`git-stash`}))]),_:1},8,[`tooltip`,`disabled`])):(z(),p(c,{key:1,type:`warning`,class:`action-button`,onClick:i.openStashDialog,loading:i.gitStore.isSavingStash,disabled:!i.hasSelectedFiles},{default:G(()=>[M(q(i.$t(`@76872:储藏选中文件`))+` (`+q(i.props.selectedFiles.length)+`) `,1)]),_:1},8,[`loading`,`disabled`])),N(` Stash弹窗:储藏选中的文件 `),P(i.CommonDialog,{modelValue:i.isStashDialogVisible,"onUpdate:modelValue":t[4]||=e=>i.isStashDialogVisible=e,title:i.$t(`@76872:储藏选中的文件`),size:`medium`,"close-on-click-modal":!1,"custom-class":`stash-dialog`},{footer:G(()=>[h(`div`,oa,[h(`div`,sa,[h(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[3]||=e=>i.isStashDialogVisible=!1},q(i.$t(`@76872:取消`)),1),h(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:i.saveStash,disabled:i.gitStore.isSavingStash},[i.gitStore.isSavingStash?(z(),p(s,{key:1,class:`is-loading`},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(s,{key:0},{default:G(()=>[P(i.Check)]),_:1})),h(`span`,null,q(i.$t(`@76872:储藏`)),1)],8,ca)])])]),default:G(()=>[h(`div`,Hi,[N(` 功能说明卡片 `),h(`div`,Ui,[h(`div`,Wi,[P(i.SvgIcon,{"icon-class":`git-stash`})]),h(`div`,Gi,[h(`h4`,null,q(i.$t(`@76872:储藏选中的文件`)),1),h(`p`,null,q(i.$t(`@76872:将选中的文件更改临时保存,稍后可以重新应用`)),1)])]),P(m,{"label-position":`top`,class:`stash-form`},{default:G(()=>[P(u,{label:i.$t(`@76872:储藏说明`)},{default:G(()=>[P(l,{modelValue:i.stashMessage,"onUpdate:modelValue":t[0]||=e=>i.stashMessage=e,placeholder:i.$t(`@76872:为这次储藏添加描述信息(可选)`),clearable:``,onKeydown:i.handleStashMessageKeydown,rows:2,type:`textarea`,resize:`none`,maxlength:`200`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),N(` 选项配置 `),h(`div`,Ki,[h(`h5`,qi,[P(s,null,{default:G(()=>[P(i.Setting)]),_:1}),M(` `+q(i.$t(`@76872:储藏选项`)),1)]),h(`div`,Ji,[P(d,{modelValue:i.includeUntracked,"onUpdate:modelValue":t[1]||=e=>i.includeUntracked=e,size:`large`},{default:G(()=>[h(`span`,Yi,q(i.$t(`@76872:包含未跟踪文件`)),1)]),_:1},8,[`modelValue`]),h(`p`,Xi,q(i.$t(`@76872:对于未跟踪的文件,同时储藏 (--include-untracked)`)),1)]),h(`div`,Zi,[P(d,{modelValue:i.excludeLocked,"onUpdate:modelValue":t[2]||=e=>i.excludeLocked=e,size:`large`},{default:G(()=>[h(`span`,Qi,q(i.$t(`@76872:排除锁定文件`)),1)]),_:1},8,[`modelValue`]),h(`p`,$i,[M(q(i.$t(`@76872:不储藏被锁定的文件,保持其当前状态`))+` `,1),i.lockedFilesInSelection.length>0?(z(),J(`span`,ea,` (`+q(i.$t(`@76872:选中`))+` `+q(i.lockedFilesInSelection.length)+` `+q(i.$t(`@76872:个锁定文件`))+`) `,1)):N(`v-if`,!0)])])]),N(` 储藏预览信息 `),h(`div`,ta,[h(`h5`,na,[P(i.SvgIcon,{"icon-class":`git-stash`,style:{"font-size":`16px`}}),M(` `+q(i.$t(`@76872:将要储藏的文件`)),1)]),h(`div`,ra,[P(f,{type:`warning`},{default:G(()=>[M(q(i.$t(`@76872:已选中: `))+q(i.props.selectedFiles.length)+` `+q(i.$t(`@76872:个文件`)),1)]),_:1})]),h(`div`,ia,[(z(!0),J(Z,null,r(i.props.selectedFiles.slice(0,10),e=>(z(),J(`div`,{key:e,class:`file-preview-item`},q(e),1))),128)),i.props.selectedFiles.length>10?(z(),J(`div`,aa,q(i.$t(`@76872:...还有`))+` `+q(i.props.selectedFiles.length-10)+` `+q(i.$t(`@76872:个文件`)),1)):N(`v-if`,!0)])])]),_:1})])]),_:1},8,[`modelValue`,`title`])])):N(`v-if`,!0)}var ua=$(Bi,[[`render`,la],[`__scopeId`,`data-v-cb6e2d4a`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/StashSelectedFilesButton.vue`]]);c();var da=T({__name:`GitCommandPreview`,props:{command:{type:String,required:!0},title:{type:String,required:!1,default:Q(`@34292:Git命令预览:`)},copyButtonText:{type:String,required:!1,default:Q(`@34292:复制命令`)},placeholder:{type:String,required:!1,default:`<命令内容>`}},setup(e,{expose:t}){t();let n=e,r=F(()=>n.command||n.placeholder);async function i(){if(!n.command){V.warning(Q(`@34292:没有可复制的命令内容`));return}try{await navigator.clipboard.writeText(n.command),V.success(Q(`@34292:命令已复制到剪贴板`))}catch(e){V.error(`${Q(`@34292:复制失败: `)}${e.message}`)}}let a={props:n,displayCommand:r,copyCommand:i,get CopyDocument(){return Ce},IconButton:Mt};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}});v(),c();var fa={class:`git-command-preview`},pa={class:`preview-container`},ma={class:`preview-title`},ha={class:`preview-content code-command`};function ga(e,t,n,r,i,a){let o=E;return z(),J(`div`,fa,[h(`div`,pa,[h(`div`,ma,q(n.title),1),h(`div`,ha,q(r.displayCommand),1),P(r.IconButton,{tooltip:n.copyButtonText,size:`small`,"custom-class":`copy-command-btn`,onClick:r.copyCommand},{default:G(()=>[P(o,null,{default:G(()=>[P(r.CopyDocument)]),_:1})]),_:1},8,[`tooltip`])])])}var _a=$(da,[[`render`,ga],[`__scopeId`,`data-v-78888d2c`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/GitCommandPreview.vue`]]);c(),X();var va=T({__name:`MergeBranchButton`,props:{variant:{type:String,required:!1,default:`icon`}},setup(e,{expose:t}){t();let n=e,r=Bt(),i=U(!1),a=U(``),s=U({noCommit:!1,noFf:!1,squash:!1,message:``}),c=U(`all`),l=F(()=>{let e=r.allBranches.filter(e=>e!==r.currentBranch);return c.value===`local`?e.filter(e=>!e.includes(`origin/`)):c.value===`remote`?e.filter(e=>e.includes(`origin/`)):e});function u(){a.value=``,s.value={noFf:!1,squash:!1,noCommit:!1,message:``},c.value=`all`,i.value=!0,r.allBranches.length===0&&r.getAllBranches();let e=r.allBranches.filter(e=>e!==r.currentBranch);e.includes(`origin/master`)?a.value=`origin/master`:e.includes(`origin/main`)&&(a.value=`origin/main`)}async function d(){if(f.value)try{await navigator.clipboard.writeText(f.value),V.success(Q(`@76872:默认合并消息已复制`))}catch{V.error(Q(`@76872:复制失败`))}}We(c,()=>{a.value&&!l.value.includes(a.value)&&(a.value=``)});let f=F(()=>{if(!a.value)return``;let e=r.currentBranch||`current`;return`Merge branch '${a.value}' into ${e}`}),p=F(()=>{if(!a.value)return``;let e=`git merge ${a.value}`;if(s.value.noFf&&(e+=` --no-ff`),s.value.squash&&(e+=` --squash`),s.value.noCommit&&(e+=` --no-commit`),!s.value.noCommit){let t=s.value.message||f.value;t&&(e+=` -m "${t}"`)}return e});async function h(){if(!a.value){V({message:Q(`@76872:请选择要合并的分支`),type:`warning`});return}try{await r.mergeBranch(a.value,s.value)?(i.value=!1,await Promise.all([r.fetchStatus(),r.fetchLog(!1),r.getBranchStatus(!0)])):(r.pendingMergeMessage=s.value.message||f.value,i.value=!1,await Promise.all([r.fetchStatus(),r.fetchLog(!1),r.getBranchStatus(!0)]))}catch(e){console.error(`合并分支操作发生错误:`,e),r.pendingMergeMessage=s.value.message||f.value,i.value=!1,await Promise.all([r.fetchStatus(),r.fetchLog(!1),r.getBranchStatus(!0)])}}let g={props:n,gitStore:r,isMergeDialogVisible:i,selectedBranch:a,mergeOptions:s,branchTypeFilter:c,filteredBranches:l,openMergeDialog:u,copyDefaultMessage:d,defaultMergeMessage:f,mergeCommand:p,handleMergeBranch:h,get $t(){return Q},get Setting(){return te},get Loading(){return o},get InfoFilled(){return m},get DocumentCopy(){return De},CommonDialog:Kt,GitCommandPreview:_a,IconButton:Mt,SvgIcon:jt};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}});c(),v();var ya={class:`merge-branch-button`},ba={class:`merge-dialog-content`},xa={class:`merge-info-card`},Sa={class:`info-icon`},Ca={class:`info-content`},wa={class:`merge-options`},Ta={class:`options-title`},Ea={class:`options-horizontal`},Da={key:0,class:`default-message-hint`},Oa={class:`hint-content`};function ka(e,t,n,i,a,o){let s=E,c=pt,l=Ne,u=A,d=ne,f=g,m=w,_=j,v=L,y=I,x=b;return z(),J(`div`,ya,[N(` 合并分支按钮 `),i.props.variant===`icon`?(z(),p(i.IconButton,{key:0,tooltip:i.gitStore.hasConflictedFiles?i.$t(`@76872:存在冲突文件,请先解决冲突`):i.$t(`@76872:合并其他分支到当前分支`),size:`medium`,disabled:i.gitStore.hasConflictedFiles||i.gitStore.isGitMerging,"hover-color":`var(--color-primary)`,onClick:i.openMergeDialog},{default:G(()=>[i.gitStore.isGitMerging?(z(),p(s,{key:0,class:`is-loading`},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(i.SvgIcon,{key:1,"icon-class":`git-merge`}))]),_:1},8,[`tooltip`,`disabled`])):(z(),p(c,{key:1,type:`primary`,class:`action-button`,onClick:i.openMergeDialog,loading:i.gitStore.isGitMerging,disabled:i.gitStore.hasConflictedFiles},{default:G(()=>[M(q(i.$t(`@76872:合并分支`)),1)]),_:1},8,[`loading`,`disabled`])),N(` 合并分支对话框 `),P(i.CommonDialog,{modelValue:i.isMergeDialogVisible,"onUpdate:modelValue":t[6]||=e=>i.isMergeDialogVisible=e,title:i.$t(`@76872:合并分支`),size:`medium`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":i.$t(`@76872:合并`),"cancel-text":i.$t(`@76872:取消`),"confirm-loading":i.gitStore.isGitMerging,"custom-class":`merge-dialog`,onConfirm:i.handleMergeBranch},{default:G(()=>[h(`div`,ba,[N(` 功能说明卡片 `),h(`div`,xa,[h(`div`,Sa,[P(i.SvgIcon,{"icon-class":`git-merge`})]),h(`div`,Ca,[h(`h4`,null,q(i.$t(`@76872:合并分支到当前分支`)),1),h(`p`,null,[M(q(i.$t(`@76872:将选择的分支合并到`))+` `,1),h(`code`,null,q(i.gitStore.currentBranch),1)])])]),P(x,{"label-position":`top`,class:`merge-form`},{default:G(()=>[N(` 分支类型选择 `),P(d,{label:i.$t(`@76872:分支类型`)},{default:G(()=>[P(u,{modelValue:i.branchTypeFilter,"onUpdate:modelValue":t[0]||=e=>i.branchTypeFilter=e,size:`default`},{default:G(()=>[P(l,{value:`all`},{default:G(()=>[M(q(i.$t(`@76872:所有分支`)),1)]),_:1}),P(l,{value:`local`},{default:G(()=>[M(q(i.$t(`@76872:本地分支`)),1)]),_:1}),P(l,{value:`remote`},{default:G(()=>[M(q(i.$t(`@76872:远程分支`)),1)]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`label`]),N(` 分支选择 `),P(d,{label:i.$t(`@76872:选择分支`)},{default:G(()=>[P(m,{modelValue:i.selectedBranch,"onUpdate:modelValue":t[1]||=e=>i.selectedBranch=e,placeholder:i.$t(`@76872:选择要合并的分支`),filterable:``,clearable:``,style:{width:`100%`}},{default:G(()=>[(z(!0),J(Z,null,r(i.filteredBranches,e=>(z(),p(f,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),N(` 命令预览 `),P(i.GitCommandPreview,{command:i.mergeCommand,title:i.$t(`@76872:合并命令预览:`),placeholder:i.$t(`@76872:请先选择要合并的分支`)},null,8,[`command`,`title`,`placeholder`]),N(` 合并选项 `),h(`div`,wa,[h(`h5`,Ta,[P(s,null,{default:G(()=>[P(i.Setting)]),_:1}),M(` `+q(i.$t(`@76872:合并选项`)),1)]),h(`div`,Ea,[P(v,{content:i.$t(`@76872:始终创建合并提交,即使可以快进 (--no-ff)`),placement:`top`,"show-after":200},{default:G(()=>[P(_,{modelValue:i.mergeOptions.noFf,"onUpdate:modelValue":t[2]||=e=>i.mergeOptions.noFf=e,size:`large`},{default:G(()=>[M(q(i.$t(`@76872:禁用快进合并`)),1)]),_:1},8,[`modelValue`])]),_:1},8,[`content`]),P(v,{content:i.$t(`@76872:将所有提交压缩成一个提交 (--squash)`),placement:`top`,"show-after":200},{default:G(()=>[P(_,{modelValue:i.mergeOptions.squash,"onUpdate:modelValue":t[3]||=e=>i.mergeOptions.squash=e,size:`large`},{default:G(()=>[M(q(i.$t(`@76872:压缩合并`)),1)]),_:1},8,[`modelValue`])]),_:1},8,[`content`]),P(v,{content:i.$t(`@76872:执行合并但不自动提交,可以手动检查后提交 (--no-commit)`),placement:`top`,"show-after":200},{default:G(()=>[P(_,{modelValue:i.mergeOptions.noCommit,"onUpdate:modelValue":t[4]||=e=>i.mergeOptions.noCommit=e,size:`large`},{default:G(()=>[M(q(i.$t(`@76872:不自动提交`)),1)]),_:1},8,[`modelValue`])]),_:1},8,[`content`])])]),N(` 自定义合并消息 `),i.mergeOptions.noCommit?N(`v-if`,!0):(z(),p(d,{key:0,label:i.$t(`@76872:合并消息(可选)`)},{default:G(()=>[P(y,{modelValue:i.mergeOptions.message,"onUpdate:modelValue":t[5]||=e=>i.mergeOptions.message=e,type:`textarea`,rows:2,placeholder:i.$t(`@76872:自定义合并提交消息`),clearable:``,resize:`none`,maxlength:`200`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`]),i.selectedBranch&&!i.mergeOptions.message?(z(),J(`div`,Da,[h(`div`,Oa,[P(s,null,{default:G(()=>[P(i.InfoFilled)]),_:1}),h(`span`,null,q(i.$t(`@76872:默认消息:`))+q(i.defaultMergeMessage),1)]),P(c,{type:`primary`,link:``,size:`small`,onClick:i.copyDefaultMessage,class:`copy-btn`},{default:G(()=>[P(s,null,{default:G(()=>[P(i.DocumentCopy)]),_:1})]),_:1})])):N(`v-if`,!0)]),_:1},8,[`label`]))]),_:1})])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])])}var Aa=$(va,[[`render`,ka],[`__scopeId`,`data-v-233ecb8e`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/MergeBranchButton.vue`]]);c();var ja=T({__name:`UnstageAllButton`,props:{from:{type:String,required:!1,default:`form`}},emits:[`click`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Bt(),o=F(()=>a.fileList.filter(e=>[`staged`,`renamed`,`added`].includes(e.type)).length),s=F(()=>o.value>0),c=F(()=>!s.value),l=F(()=>s.value?`取消暂存所有文件(git reset HEAD)`:`没有已暂存的更改`);async function u(){i(`click`);try{await a.resetHead()&&a.fetchStatus()}catch(e){console.error(`取消暂存失败:`,e)}}let d={props:r,emit:i,gitStore:a,stagedFilesCount:o,hasStagedChanges:s,isDisabled:c,tooltipText:l,handleClick:u,get RefreshLeft(){return ue},IconButton:Mt};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}});c(),v();var Ma={key:0,class:`unstage-all-button`},Na={key:0};function Pa(e,t,n,r,i,a){let o=E,s=pt,c=L;return r.hasStagedChanges?(z(),J(`div`,Ma,[N(` 图标按钮模式 (from === 'status') `),r.props.from===`status`?(z(),p(r.IconButton,{key:0,tooltip:r.tooltipText,size:`medium`,disabled:r.isDisabled,loading:r.gitStore.isResetting,"hover-color":`var(--color-warning)`,onClick:r.handleClick},{default:G(()=>[P(o,null,{default:G(()=>[P(r.RefreshLeft)]),_:1})]),_:1},8,[`tooltip`,`disabled`,`loading`])):(z(),J(Z,{key:1},[N(` 文字按钮模式 (from !== 'status') `),P(c,{content:r.tooltipText,placement:`top`,"show-after":200},{default:G(()=>[P(s,{type:`warning`,onClick:r.handleClick,loading:r.gitStore.isResetting,disabled:r.isDisabled,class:O(`from-${r.props.from}`)},{default:G(()=>[t[0]||=M(` 取消暂存所有 `,-1),r.stagedFilesCount>0?(z(),J(`span`,Na,`(`+q(r.stagedFilesCount)+`)`,1)):N(`v-if`,!0)]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])],2112))])):N(`v-if`,!0)}var Fa=$(ja,[[`render`,Pa],[`__scopeId`,`data-v-5a00229f`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/UnstageAllButton.vue`]]);c();var Ia=T({__name:`ResetToRemoteButton`,props:{variant:{type:String,required:!1,default:`icon`}},setup(e,{expose:t}){t();let n=e,r=Bt(),i=F(()=>r.fileList.length>0||r.branchAhead>0);async function a(){try{await Promise.all([r.getCurrentBranch(!0),r.getAllBranches()]);let e=r.currentBranch;if(!e){V.warning(Q(`@76872:无法获取当前分支,请稍后重试`));return}await Me.confirm(Q(`@76872:确定要重置当前分支吗?`,{branch:e}),Q(`@76872:重置到远程`)+` origin/${e}`,{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),confirmButtonClass:`el-button--danger`,dangerouslyUseHTMLString:!0,type:`warning`}),await r.resetToRemote(e)&&(r.fetchStatus(),r.fetchLog())}catch(e){e!==`cancel`&&console.error(`重置到远程失败:`,e)}}let o={props:n,gitStore:r,shouldShowReset:i,resetToRemote:a,get $t(){return Q},IconButton:Mt,SvgIcon:jt};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});c(),v();function La(e,t,n,r,i,a){let o=pt,s=L;return r.shouldShowReset?(z(),J(Z,{key:0},[r.props.variant===`icon`?(z(),p(r.IconButton,{key:0,"icon-class":`git-reset`,tooltip:r.gitStore.hasConflictedFiles?r.$t(`@76872:存在冲突文件,请先解决冲突`):r.$t(`@76872:重置到远程`),size:`medium`,"hover-color":`var(--color-danger)`,disabled:!r.gitStore.hasUpstream||r.gitStore.hasConflictedFiles||r.gitStore.isResetting,onClick:r.resetToRemote},null,8,[`tooltip`,`disabled`])):(z(),p(s,{key:1,content:r.gitStore.hasConflictedFiles?r.$t(`@76872:存在冲突文件,请先解决冲突`):`git reset --hard origin/branch`,placement:`top`},{default:G(()=>[P(o,{type:`danger`,onClick:r.resetToRemote,loading:r.gitStore.isResetting,disabled:!r.gitStore.hasUpstream||r.gitStore.hasConflictedFiles,class:`action-button danger-button`},{default:G(()=>[P(r.SvgIcon,{"icon-class":`git-reset`,"class-name":`git-reset-icon`}),M(` `+q(r.$t(`@76872:重置到远程`)),1)]),_:1},8,[`loading`,`disabled`])]),_:1},8,[`content`]))],64)):N(`v-if`,!0)}var Ra=$(Ia,[[`render`,La],[`__scopeId`,`data-v-60ced04e`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/ResetToRemoteButton.vue`]]);c();var za=T({__name:`DiscardAllChangesButton`,props:{variant:{type:String,required:!1,default:`icon`},size:{type:String,required:!1,default:`large`},selectedFiles:{type:Array,required:!1,default:()=>[]}},setup(e,{expose:t}){t();let n=e,r=Bt(),i=F(()=>Array.isArray(n.selectedFiles)&&n.selectedFiles.length>0),a=F(()=>n.selectedFiles?.length??0),o=F(()=>r.fileList.length>0);async function s(){try{await Me.confirm(Q(`@76872:确定要清除本地所有更改吗?`),Q(`@76872:清除所有本地更改`),{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),confirmButtonClass:`el-button--danger`,dangerouslyUseHTMLString:!0,type:`warning`}),await r.discardAllChanges()&&(r.fetchStatus(),r.fetchLog())}catch(e){e!==`cancel`&&console.error(`清除本地更改失败:`,e)}}async function c(){let e=n.selectedFiles??[];if(e.length!==0)try{await Me.confirm(Q(`@76872:确定要清除所选的 {count} 个文件吗?`,{count:e.length}),Q(`@76872:清除所选文件`),{confirmButtonText:Q(`@76872:确定`),cancelButtonText:Q(`@76872:取消`),confirmButtonClass:`el-button--danger`,dangerouslyUseHTMLString:!0,type:`warning`}),await r.discardSelectedFiles(e)&&(r.fetchStatus(),r.fetchLog())}catch(e){e!==`cancel`&&console.error(`清除所选文件失败:`,e)}}let l={props:n,gitStore:r,isSelectiveMode:i,selectedCount:a,shouldShowDiscard:o,discardAllChanges:s,discardSelectedChanges:c,get $t(){return Q},get DeleteFilled(){return it},IconButton:Mt};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});c(),v();function Ba(e,t,n,r,i,a){let o=E,s=pt,c=L;return r.shouldShowDiscard?(z(),J(Z,{key:0},[r.props.variant===`icon`?(z(),p(r.IconButton,{key:0,tooltip:r.isSelectiveMode?r.$t(`@76872:清除所选 {count} 个文件`,{count:r.selectedCount}):r.$t(`@76872:清除所有本地更改`),size:r.props.size,"hover-color":`var(--color-danger)`,disabled:r.gitStore.isResetting,onClick:t[0]||=e=>r.isSelectiveMode?r.discardSelectedChanges():r.discardAllChanges()},{default:G(()=>[P(o,null,{default:G(()=>[P(r.DeleteFilled)]),_:1})]),_:1},8,[`tooltip`,`size`,`disabled`])):(z(),p(c,{key:1,content:r.isSelectiveMode?r.$t(`@76872:对所选文件执行 git checkout / git clean`):`git reset --hard && git clean -fd`,placement:`top`},{default:G(()=>[P(s,{type:`danger`,icon:r.DeleteFilled,onClick:t[1]||=e=>r.isSelectiveMode?r.discardSelectedChanges():r.discardAllChanges(),loading:r.gitStore.isResetting,class:`action-button danger-button`},{default:G(()=>[M(q(r.isSelectiveMode?r.$t(`@76872:清除所选 {count} 个文件`,{count:r.selectedCount}):r.$t(`@76872:清除所有本地更改`)),1)]),_:1},8,[`icon`,`loading`])]),_:1},8,[`content`]))],64)):N(`v-if`,!0)}var Va=$(za,[[`render`,Ba],[`__scopeId`,`data-v-e83ece54`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/buttons/DiscardAllChangesButton.vue`]]);c(),X();var Ha=T({__name:`GitStatus`,props:{initialDirectory:{type:String,default:``}},setup(e,{expose:t}){let n=e,r=Bt(),i=Lt(),a=Ht(),s=F(()=>r.isLoadingStatus),c=U(``),l=U(``),u=U(null),d=U(!1),f=U(!1),p=U(-1),h=U(`compare`),g=U(``),_=U(``),v=U({});function y(e){return!!v.value[e]}let b=F(()=>r.selectedFiles),x=F(()=>r.isSelectionMode);function S(){r.toggleSelectionMode()}function w(e){r.toggleFileSelection(e)}function T(){r.selectedFiles.size===r.fileList.length?r.clearSelection():r.selectAllFiles()}function ee(e){return r.selectedFiles.has(e)}let E=F(()=>Array.from(r.selectedFiles)),D=F(()=>r.fileList.map(e=>({path:e.path,name:e.path.split(`/`).pop()||e.path,type:e.type,locked:Y(e.path)})));async function O(e){h.value===`compare`?await L(e):await ce(e)}async function te(e,t){try{let n=await(await fetch(`/api/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?V.success(n.message):V.error(n.error||Q(`@13D1C:打开文件失败`))}catch(e){V.error(`${Q(`@13D1C:打开文件失败: `)}${e.message}`)}}async function ne(e,t){try{let n=await(await fetch(`/api/open-with-vscode`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?V.success(n.message):V.error(n.error||Q(`@13D1C:用VSCode打开文件失败`))}catch(e){V.error(`${Q(`@13D1C:用VSCode打开文件失败: `)}${e.message}`)}}function k(e,t){console.log(`[debug-open-in-editor] GitStatus handleOpenInEditor dispatching, filePath=`,e),d.value=!1,window.dispatchEvent(new CustomEvent(`zen-gitsync:open-file-in-editor`,{detail:{filePath:e}}))}let A=U(!1),j=U({staged:!1,unstaged:!1,untracked:!1,conflicted:!1,"intent-to-add":!1}),M=F({get:()=>i.ui.fileListViewMode,set:e=>{i.ui.fileListViewMode=e}}),N=F(()=>({conflicted:Q(`@13D1C:冲突文件`),staged:Q(`@13D1C:已暂存的更改`),unstaged:Q(`@13D1C:未暂存的更改`),"intent-to-add":Q(`@13D1C:已声明添加(待暂存)`),untracked:Q(`@13D1C:未跟踪的文件`)})),re=F(()=>mn(r.fileList,j.value,N.value)),P=U(n.initialDirectory||``);async function ae(){try{if(!P.value){let e=await(await fetch(`/api/current_directory`)).json();P.value=e.directory||Q(`@13D1C:未知目录`)}if(!r.isGitRepo)return;await r.fetchStatus(),V({message:Q(`@13D1C:Git 状态已刷新`),type:`success`})}catch(e){V({message:`刷新失败: `+e.message,type:`error`})}}async function oe(e){try{await Me.confirm(`确认解锁该文件?\n${e}`,Q(`@13D1C:确认解锁`),{type:`warning`,confirmButtonText:Q(`@13D1C:解锁`),cancelButtonText:Q(`@13D1C:取消`)}),await i.unlockFile(e)}catch{}}async function se(){if(i.lockedFiles.length)try{await Me.confirm(`${Q(`@13D1C:确认解锁所有已锁定文件?共 `)}${i.lockedFiles.length}${Q(`@13D1C: 个。`)}`,Q(`@13D1C:清空全部锁定`),{type:`warning`,confirmButtonText:Q(`@13D1C:全部解锁`),cancelButtonText:Q(`@13D1C:取消`)});let e=[...i.lockedFiles];await Promise.all(e.map(e=>i.unlockFile(e))),await i.loadLockedFiles(),V.success(Q(`@13D1C:已清空所有文件锁定`))}catch{}}async function ce(e){try{f.value=!0,l.value=``,g.value=``,_.value=``,u.value=null,c.value=e,p.value=r.fileList.findIndex(t=>t.path===e);let t=r.fileList[p.value];if(Wt(e)){l.value=``,u.value=null;return}if(t&&t.type===`untracked`)try{let t=await(await fetch(`/api/file-content?file=${encodeURIComponent(e)}`)).json();t.success&&t.content?l.value=`diff --git a/${e} b/${e}\n${Q(`@13D1C:新文件: `)}${e}\n--- /dev/null\n+++ b/${e}\n@@ -0,0 +1,${t.content.split(`
3
3
  `).length} @@\n`+t.content.split(`
4
4
  `).map(e=>`+${e}`).join(`
5
5
  `):l.value=`这是一个新文件,尚未被Git跟踪。
@@ -33,7 +33,7 @@ import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{$ as n,$n as r,
33
33
  由 initGitRepo 在 createInitialCommit 返回 confirm-required 时弹出。
34
34
  三个出口:取消 / 仍要提交全部文件 / 补充 .gitignore 后提交。 `),P(i.CommonDialog,{modelValue:i.initScopeDialogVisible,"onUpdate:modelValue":t[9]||=e=>i.initScopeDialogVisible=e,title:i.$t(`@13D1C:即将提交的文件数量异常`),width:`min(520px, 92vw)`,"custom-class":`init-scope-dialog`,onClose:t[10]||=e=>i.decideInitScope(`cancel`)},{footer:G(()=>[h(`div`,Go,[P(l,{onClick:t[6]||=e=>i.decideInitScope(`cancel`)},{default:G(()=>[M(q(i.$t(`@13D1C:取消`)),1)]),_:1}),h(`div`,Ko,[P(l,{onClick:t[7]||=e=>i.decideInitScope(`force`)},{default:G(()=>[M(q(i.$t(`@13D1C:仍要提交全部文件`)),1)]),_:1}),P(l,{type:`primary`,onClick:t[8]||=e=>i.decideInitScope(`gitignore`)},{default:G(()=>[M(q(i.$t(`@13D1C:补充 .gitignore 后提交`)),1)]),_:1})])])]),default:G(()=>[h(`div`,zo,[P(f,{type:`warning`,closable:!1,"show-icon":``,title:i.$t(`@13D1C:这次首个提交会包含 {total} 个文件`,{total:i.initScopeTotal})},null,8,[`title`]),i.initScopeGenerated.length?(z(),J(Z,{key:0},[h(`p`,Bo,q(i.$t(`@13D1C:下面的目录通常是依赖或构建产物,不应该写进 Git 历史:`)),1),h(`ul`,Vo,[(z(!0),J(Z,null,r(i.initScopeGenerated,e=>(z(),J(`li`,{key:e.path},[h(`code`,null,q(e.path),1),h(`span`,null,q(i.$t(`@13D1C:{count} 个文件`,{count:e.count})),1)]))),128))])],64)):(z(),J(Z,{key:1},[h(`p`,Ho,q(i.$t(`@13D1C:文件数最多的目录:`)),1),h(`ul`,Uo,[(z(!0),J(Z,null,r(i.initScopeTopDirs,e=>(z(),J(`li`,{key:e.path},[h(`code`,null,q(e.path),1),h(`span`,null,q(i.$t(`@13D1C:{count} 个文件`,{count:e.count})),1)]))),128))])],64)),h(`p`,Wo,q(i.$t(`@13D1C:建议先补充 .gitignore 再提交。一旦提交并推送,这些文件就会进入 Git 历史,之后只能重写历史才能清理。`)),1)])]),_:1},8,[`modelValue`,`title`]),N(` 锁定文件管理对话框 `),P(i.CommonDialog,{modelValue:i.showLockedFilesDialog,"onUpdate:modelValue":t[11]||=e=>i.showLockedFilesDialog=e,title:i.$t(`@13D1C:锁定文件管理`),size:`large`,"destroy-on-close":``},{default:G(()=>[N(` 功能说明 `),h(`div`,qo,[h(`div`,Jo,[P(s,{class:`description-icon`},{default:G(()=>[P(i.InfoFilled)]),_:1}),h(`span`,Yo,q(i.$t(`@13D1C:文件锁定功能说明`)),1)]),h(`div`,Xo,[h(`ul`,null,[h(`li`,null,q(i.$t(`@13D1C:锁定的文件在执行 Git 提交时会被自动跳过,不会被添加到暂存区`)),1)])])]),i.configStore.lockedFiles.length===0?(z(),J(`div`,Zo,[h(`div`,Qo,[P(s,null,{default:G(()=>[P(i.Lock)]),_:1})]),h(`p`,null,q(i.$t(`@13D1C:当前没有锁定的文件`)),1),h(`p`,$o,q(i.$t(`@13D1C:您可以在文件列表中点击锁定按钮来锁定文件`)),1)])):(z(),J(`div`,es,[h(`div`,ts,[h(`span`,null,`🔒 已锁定 `+q(i.configStore.lockedFiles.length)+` `+q(i.$t(`@13D1C:个文件`)),1),P(d,{content:i.$t(`@13D1C:这些文件在提交时会被自动跳过`),placement:`top`},{default:G(()=>[P(s,{class:`info-icon`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`]),t[15]||=h(`div`,{style:{flex:`1`}},null,-1),P(l,{type:`danger`,size:`small`,plain:``,disabled:!i.configStore.lockedFiles.length,onClick:i.confirmUnlockAll},{default:G(()=>[M(q(i.$t(`@13D1C:清空全部锁定`)),1)]),_:1},8,[`disabled`])]),h(`div`,ns,[(z(!0),J(Z,null,r(i.configStore.lockedFiles,e=>(z(),J(`div`,{key:e,class:`locked-file-item`},[h(`div`,rs,[t[16]||=h(`div`,{class:`file-status-indicator locked`},null,-1),h(`div`,is,[h(`span`,as,q(i.getFileName(e)),1),h(`span`,os,q(i.getFileDirectory(e)),1)])]),h(`div`,ss,[P(i.IconButton,{tooltip:i.$t(`@13D1C:解锁文件`),size:`small`,"hover-color":`var(--color-danger)`,"custom-class":`file-action-btn`,onClick:t=>i.confirmUnlockFile(e)},{default:G(()=>[P(s,null,{default:G(()=>[P(i.Unlock)]),_:1})]),_:1},8,[`tooltip`,`onClick`])])]))),128))])]))]),_:1},8,[`modelValue`,`title`]),N(` Pull 失败错误详情弹窗 `),P(i.CommonDialog,{modelValue:i.pullErrorDialogVisible,"onUpdate:modelValue":t[12]||=e=>i.pullErrorDialogVisible=e,title:i.pullErrorInfo.needsMerge?i.$t(`@13D1C:需要合并更改`):i.$t(`@13D1C:拉取失败`),size:`medium`,"show-footer":!0,"show-cancel":!1,"confirm-text":i.$t(`@13D1C:我知道了`),onConfirm:t[13]||=e=>i.pullErrorDialogVisible=!1},{default:G(()=>[h(`div`,cs,[N(` 错误类型提示 `),h(`div`,{class:O([`pull-error-type`,i.pullErrorInfo.needsMerge?`is-warning`:`is-error`])},[P(s,{class:`pull-error-icon`},{default:G(()=>[P(i.InfoFilled)]),_:1}),i.pullErrorInfo.needsMerge?(z(),J(`span`,ls,q(i.$t(`@13D1C:本地存在未提交的更改,与远程内容冲突,请先处理本地更改后再拉取。`)),1)):(z(),J(`span`,us,q(i.$t(`@13D1C:执行 git pull 时发生错误,请查看详细信息。`)),1))],2),N(` 完整错误信息 `),h(`div`,ds,[h(`div`,fs,q(i.$t(`@13D1C:错误详情`))+`:`,1),h(`pre`,ps,q(i.pullErrorInfo.fullError||i.pullErrorInfo.error),1)]),N(` Pull 输出信息(包含冲突详情) `),i.pullErrorInfo.pullOutput?(z(),J(`div`,ms,[h(`div`,hs,q(i.$t(`@13D1C:冲突详情`))+`:`,1),h(`pre`,gs,q(i.pullErrorInfo.pullOutput),1)])):N(`v-if`,!0)])]),_:1},8,[`modelValue`,`title`,`confirm-text`])],64)}var vs=$(Ha,[[`render`,_s],[`__scopeId`,`data-v-d48be6cf`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/views/components/GitStatus.vue`]]),ys=new Set;function bs(e){return!ys.has(e)&&(ys.add(e),!0)}var xs=20,Ss=new Map;function Cs(e){return Ss.get(e)}function ws(e,t){if(e&&t)for(Ss.set(e,t);Ss.size>xs;){let e=Ss.keys().next().value;if(e===void 0)break;Ss.delete(e)}}function Ts(e){Ss.delete(e)}var Es=new Map;function Ds(e,t){if(!e)return;Es.set(e,t);let n=()=>{Es.get(e)===t&&Es.delete(e)};t.then(n,n)}function Os(e){return Es.get(e)??null}c(),X();var ks=T({__name:`RecentDirectoriesSummary`,props:{items:{type:Array,required:!0},ready:{type:Boolean,required:!1,default:!1},variant:{type:String,required:!1,default:`panel`}},setup(e,{expose:t}){t();let n=e,r=Lt(),i=F(()=>Array.isArray(r.models)&&r.models.length>0),a=F(()=>String(r.locale||``).startsWith(`en`)?`en`:`zh`),o=F(()=>{let e=Array.isArray(r.models)?r.models:[],t=e.find(e=>e?.isDefault)||e[0];return t?`${t.id??t.name??``}|${t.model??``}|${t.baseURL??``}`:``}),s=U({status:`idle`,text:``,error:``}),c=null,l=null,u=0;function d(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return`${e.length}:${(t>>>0).toString(36)}`}function f(){return n.items.map(e=>({path:e.path,exists:e.exists!==!1,git:e.git?{isGitRepo:e.git.isGitRepo,branch:e.git.branch??null,upstream:e.git.upstream??null,changed:e.git.changed??0,staged:e.git.staged??0,unstaged:e.git.unstaged??0,untracked:e.git.untracked??0,ahead:e.git.ahead??0,behind:e.git.behind??0}:null}))}function p(){return f().map(e=>{let t=e.git,n=t?[t.isGitRepo===null?`?`:t.isGitRepo?`1`:`0`,t.branch,t.upstream,t.changed,t.staged,t.unstaged,t.untracked,t.ahead,t.behind].join(`,`):`-`;return`${e.path}|${+!!e.exists}|${n}`}).join(`
35
35
  `)}let m=F(()=>`${a.value}|${o.value}|${d(p())}`);function h(){c?.abort(),c=null}let g=F(()=>Q(`@13D1C:共 {count} 个目录。徽标里的「领先/落后」是上次 fetch 时的快照,「未提交 N 项」来自本工作区的实时扫描。配置 AI 模型后,这里会自动解读各项目状态、指出需要注意的项目。`,{count:n.items.length}));function v(e){return String(e||``).replace(/<think[^>]*>[\s\S]*?<\/think>/gi,``).replace(/^\s{0,3}#{1,6}\s*/gm,``).replace(/^\s{0,3}[-*+]\s+/gm,``).replace(/\*\*|__|`/g,``).trim()}async function y(e=!1){if(!i.value||!n.ready||n.items.length===0)return;let t=m.value,r=Cs(t);if(!e&&r){s.value={status:`done`,text:r,error:``};return}h();let a=new AbortController;c=a,s.value={status:`loading`,text:``,error:``};let o=b(t,a);Ds(t,o),await o}async function b(e,t){let n=``,r=e=>{let t=e.trim();if(!t.startsWith(`data:`))return;let r=t.slice(5).trim();if(!r)return;let i;try{i=JSON.parse(r)}catch{return}if(i.type===`delta`)n+=i.content||``,s.value={status:`loading`,text:n,error:``};else if(i.type===`done`)s.value={status:`done`,text:v(n),error:``};else if(i.type===`error`){let e=i.code===`NO_MODEL`||i.code===`CONFIG_ERR`||i.code===`NO_ITEMS`?Q(`@13D1C:无法解读项目状态`):i.error||Q(`@13D1C:解读失败`);s.value={status:`error`,text:``,error:e}}};try{let i=await fetch(`/api/recent_directories/summary`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({items:f(),locale:a.value}),signal:t.signal});if(!i.ok||!i.body)throw Error(`HTTP ${i.status}`);let o=i.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:t}=await o.read();if(e)break;l+=c.decode(t,{stream:!0});let n=l.split(`
36
- `);l=n.pop()||``,n.forEach(r)}l+=c.decode(),l&&r(l),s.value.status===`loading`&&(s.value={status:`done`,text:v(n),error:``}),s.value.status===`done`&&s.value.text&&ws(e,s.value.text)}catch(e){e?.name!==`AbortError`&&c===t&&(s.value={status:`error`,text:``,error:e?.message||Q(`@13D1C:解读失败`)})}finally{c===t&&(c=null)}}function x(){h(),l&&=(clearTimeout(l),null);let e=++u,t=m.value,r=Cs(t);if(r){s.value={status:`done`,text:r,error:``};return}if(s.value={status:`idle`,text:``,error:``},!i.value||!n.ready||n.items.length===0)return;let a=Os(t);if(a){s.value={status:`loading`,text:``,error:``},a.then(()=>{if(e!==u)return;let n=Cs(t);s.value=n?{status:`done`,text:n,error:``}:{status:`idle`,text:``,error:``}});return}l=setTimeout(()=>{l=null,y()},350)}function S(){Ts(m.value),y(!0)}We(()=>[n.items,n.ready,i.value,a.value,o.value],()=>x(),{immediate:!0}),Ye(()=>{h(),l&&clearTimeout(l)});let w=F(()=>s.value.status===`loading`),T={props:n,configStore:r,hasModel:i,locale:a,modelKey:o,state:s,get controller(){return c},set controller(e){c=e},get debounceTimer(){return l},set debounceTimer(e){l=e},get syncToken(){return u},set syncToken(e){u=e},fingerprintOf:d,requestItems:f,stateSignature:p,cacheKey:m,abort:h,staticNote:g,toPlainText:v,generate:y,stream:b,sync:x,regenerate:S,isBusy:w,bodyText:F(()=>s.value.text?v(s.value.text):w.value?``:g.value),showChat:F(()=>(n.variant===`bare`||n.variant===`split`)&&i.value&&n.items.length>0),RecentDirectoriesChat:_(()=>St(()=>import(`./RecentDirectoriesChat-DT0sguEG.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]))),chatDirStatus:F(()=>f()),chatSummary:F(()=>s.value.status===`done`?v(s.value.text):``),get Refresh(){return C},get Warning(){return be},get $t(){return Q}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}});c(),v();var As=[`aria-busy`],js={key:0,class:`dir-summary__head`},Ms={class:`dir-summary__title`},Ns=[`disabled`,`title`,`aria-label`],Ps={key:1,class:`dir-summary__text dir-summary__text--pending`,"aria-live":`polite`},Fs={key:2,class:`dir-summary__text`,"aria-live":`polite`},Is={key:3,class:`dir-summary__error`},Ls={class:`dir-summary__error-msg`},Rs=[`disabled`,`title`];function zs(e,t,n,r,i,a){let o=E;return z(),J(`section`,{class:O([`dir-summary`,[`dir-summary--${n.variant}`,{"is-ai":r.hasModel}]]),"aria-busy":r.isBusy},[N(` 标题行只在"有 AI 解读"时出现;没配模型时它就是一段说明文字,不需要标题 `),r.hasModel?(z(),J(`header`,js,[h(`span`,Ms,q(r.$t(`@13D1C:AI 项目状态解读`)),1),h(`button`,{type:`button`,class:`dir-summary__refresh`,disabled:r.isBusy||n.items.length===0,title:r.$t(`@13D1C:重新生成解读`),"aria-label":r.$t(`@13D1C:重新生成解读`),onClick:r.regenerate},[P(o,{class:O({"is-spinning":r.isBusy}),"aria-hidden":`true`},{default:G(()=>[P(r.Refresh)]),_:1},8,[`class`])],8,Ns)])):N(`v-if`,!0),r.isBusy&&!r.bodyText?(z(),J(`p`,Ps,q(r.$t(`@13D1C:AI 正在解读各项目状态...`)),1)):r.bodyText?(z(),J(`p`,Fs,q(r.bodyText),1)):N(`v-if`,!0),N(` 解读失败时静态说明仍在上面垫着,这里只补一行原因 + 重试,不占满整块 `),r.state.status===`error`&&r.hasModel?(z(),J(`div`,Is,[P(o,{"aria-hidden":`true`},{default:G(()=>[P(r.Warning)]),_:1}),h(`span`,Ls,q(r.$t(`@13D1C:解读失败:{error}`,{error:r.state.error})),1),h(`button`,{type:`button`,class:`dir-summary__retry`,disabled:r.isBusy,title:r.$t(`@13D1C:重试`),onClick:r.regenerate},q(r.$t(`@13D1C:重试`)),9,Rs)])):N(`v-if`,!0),N(` 追问区:在上面那段解读底下就地接一个 g ai 对话,不用另开智能体视图重述背景 `),r.showChat?(z(),p(r.RecentDirectoriesChat,{key:4,"dir-status":r.chatDirStatus,summary:r.chatSummary,fill:n.variant===`split`},null,8,[`dir-status`,`summary`,`fill`])):N(`v-if`,!0)],10,As)}var Bs=$(ks,[[`render`,zs],[`__scopeId`,`data-v-10ca7c7b`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/RecentDirectoriesSummary.vue`]]);c();var Vs=T({__name:`DirListRefreshButton`,props:{label:{type:String,required:!0},title:{type:String,required:!1,default:``},ariaLabel:{type:String,required:!1,default:``},refreshing:{type:Boolean,required:!1,default:!1},disabled:{type:Boolean,required:!1,default:!1}},emits:[`click`],setup(e,{expose:t,emit:n}){t();let r=e,i=n;function a(e){r.disabled||r.refreshing||i(`click`,e)}let o={props:r,emit:i,onClick:a,get Refresh(){return C}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});c(),v();var Hs=[`disabled`,`title`,`aria-label`];function Us(e,t,n,r,i,a){let o=E;return z(),J(Z,null,[N(` 类名保持 .dir-list__refresh:这个按钮原本就长在列表组件里,
36
+ `);l=n.pop()||``,n.forEach(r)}l+=c.decode(),l&&r(l),s.value.status===`loading`&&(s.value={status:`done`,text:v(n),error:``}),s.value.status===`done`&&s.value.text&&ws(e,s.value.text)}catch(e){e?.name!==`AbortError`&&c===t&&(s.value={status:`error`,text:``,error:e?.message||Q(`@13D1C:解读失败`)})}finally{c===t&&(c=null)}}function x(){h(),l&&=(clearTimeout(l),null);let e=++u,t=m.value,r=Cs(t);if(r){s.value={status:`done`,text:r,error:``};return}if(s.value={status:`idle`,text:``,error:``},!i.value||!n.ready||n.items.length===0)return;let a=Os(t);if(a){s.value={status:`loading`,text:``,error:``},a.then(()=>{if(e!==u)return;let n=Cs(t);s.value=n?{status:`done`,text:n,error:``}:{status:`idle`,text:``,error:``}});return}l=setTimeout(()=>{l=null,y()},350)}function S(){Ts(m.value),y(!0)}We(()=>[n.items,n.ready,i.value,a.value,o.value],()=>x(),{immediate:!0}),Ye(()=>{h(),l&&clearTimeout(l)});let w=F(()=>s.value.status===`loading`),T={props:n,configStore:r,hasModel:i,locale:a,modelKey:o,state:s,get controller(){return c},set controller(e){c=e},get debounceTimer(){return l},set debounceTimer(e){l=e},get syncToken(){return u},set syncToken(e){u=e},fingerprintOf:d,requestItems:f,stateSignature:p,cacheKey:m,abort:h,staticNote:g,toPlainText:v,generate:y,stream:b,sync:x,regenerate:S,isBusy:w,bodyText:F(()=>s.value.text?v(s.value.text):w.value?``:g.value),showChat:F(()=>(n.variant===`bare`||n.variant===`split`)&&i.value&&n.items.length>0),RecentDirectoriesChat:_(()=>St(()=>import(`./RecentDirectoriesChat-BVgA8lLY.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]))),chatDirStatus:F(()=>f()),chatSummary:F(()=>s.value.status===`done`?v(s.value.text):``),get Refresh(){return C},get Warning(){return be},get $t(){return Q}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}});c(),v();var As=[`aria-busy`],js={key:0,class:`dir-summary__head`},Ms={class:`dir-summary__title`},Ns=[`disabled`,`title`,`aria-label`],Ps={key:1,class:`dir-summary__text dir-summary__text--pending`,"aria-live":`polite`},Fs={key:2,class:`dir-summary__text`,"aria-live":`polite`},Is={key:3,class:`dir-summary__error`},Ls={class:`dir-summary__error-msg`},Rs=[`disabled`,`title`];function zs(e,t,n,r,i,a){let o=E;return z(),J(`section`,{class:O([`dir-summary`,[`dir-summary--${n.variant}`,{"is-ai":r.hasModel}]]),"aria-busy":r.isBusy},[N(` 标题行只在"有 AI 解读"时出现;没配模型时它就是一段说明文字,不需要标题 `),r.hasModel?(z(),J(`header`,js,[h(`span`,Ms,q(r.$t(`@13D1C:AI 项目状态解读`)),1),h(`button`,{type:`button`,class:`dir-summary__refresh`,disabled:r.isBusy||n.items.length===0,title:r.$t(`@13D1C:重新生成解读`),"aria-label":r.$t(`@13D1C:重新生成解读`),onClick:r.regenerate},[P(o,{class:O({"is-spinning":r.isBusy}),"aria-hidden":`true`},{default:G(()=>[P(r.Refresh)]),_:1},8,[`class`])],8,Ns)])):N(`v-if`,!0),r.isBusy&&!r.bodyText?(z(),J(`p`,Ps,q(r.$t(`@13D1C:AI 正在解读各项目状态...`)),1)):r.bodyText?(z(),J(`p`,Fs,q(r.bodyText),1)):N(`v-if`,!0),N(` 解读失败时静态说明仍在上面垫着,这里只补一行原因 + 重试,不占满整块 `),r.state.status===`error`&&r.hasModel?(z(),J(`div`,Is,[P(o,{"aria-hidden":`true`},{default:G(()=>[P(r.Warning)]),_:1}),h(`span`,Ls,q(r.$t(`@13D1C:解读失败:{error}`,{error:r.state.error})),1),h(`button`,{type:`button`,class:`dir-summary__retry`,disabled:r.isBusy,title:r.$t(`@13D1C:重试`),onClick:r.regenerate},q(r.$t(`@13D1C:重试`)),9,Rs)])):N(`v-if`,!0),N(` 追问区:在上面那段解读底下就地接一个 g ai 对话,不用另开智能体视图重述背景 `),r.showChat?(z(),p(r.RecentDirectoriesChat,{key:4,"dir-status":r.chatDirStatus,summary:r.chatSummary,fill:n.variant===`split`},null,8,[`dir-status`,`summary`,`fill`])):N(`v-if`,!0)],10,As)}var Bs=$(ks,[[`render`,zs],[`__scopeId`,`data-v-10ca7c7b`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/RecentDirectoriesSummary.vue`]]);c();var Vs=T({__name:`DirListRefreshButton`,props:{label:{type:String,required:!0},title:{type:String,required:!1,default:``},ariaLabel:{type:String,required:!1,default:``},refreshing:{type:Boolean,required:!1,default:!1},disabled:{type:Boolean,required:!1,default:!1}},emits:[`click`],setup(e,{expose:t,emit:n}){t();let r=e,i=n;function a(e){r.disabled||r.refreshing||i(`click`,e)}let o={props:r,emit:i,onClick:a,get Refresh(){return C}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});c(),v();var Hs=[`disabled`,`title`,`aria-label`];function Us(e,t,n,r,i,a){let o=E;return z(),J(Z,null,[N(` 类名保持 .dir-list__refresh:这个按钮原本就长在列表组件里,
37
37
  单测(RecentDirectoriesList.test.ts)按这个类名定位,别随手改。 `),h(`button`,{type:`button`,class:`dir-list__refresh`,disabled:n.refreshing||n.disabled,title:n.title,"aria-label":n.ariaLabel||n.title||void 0,onClick:r.onClick},[P(o,{class:O({"is-spinning":n.refreshing}),"aria-hidden":`true`},{default:G(()=>[P(r.Refresh)]),_:1},8,[`class`]),h(`span`,null,q(n.label),1)],8,Hs)],2112)}var Ws=$(Vs,[[`render`,Us],[`__scopeId`,`data-v-a6e995d8`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/DirListRefreshButton.vue`]]);c(),X();var Gs=6,Ks=`recent-dirs-auto-refresh`,qs=T({__name:`RecentDirectoriesList`,props:{mode:{type:String,required:!1,default:`open`},variant:{type:String,required:!1,default:`panel`},layout:{type:String,required:!1,default:`stack`},removable:{type:String,required:!1,default:`missing`},autoLoad:{type:Boolean,required:!1,default:!0},refreshOnMount:{type:Boolean,required:!1,default:!1},minCardWidth:{type:String,required:!1,default:`380px`},removeLabel:{type:String,required:!1},emptyText:{type:String,required:!1},ariaLabel:{type:String,required:!1}},emits:[`select`,`loaded`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=F(()=>r.layout===`split`),s=U([]),c=U(!1),l=U({}),u=U(``),d=U(!1),f=U({done:0,total:0}),p=U(!1),m=U({}),h=F(()=>d.value?Q(`@13D1C:刷新中 {done}/{total}`,{done:f.value.done,total:f.value.total}):Q(`@13D1C:刷新全部`)),g=F(()=>Q(`@13D1C:对所有项目执行 git fetch --all,让「领先/落后」显示真实状态(需联网,较慢)`)),_=F(()=>d.value||s.value.length===0),v=F(()=>{if(typeof navigator>`u`)return!1;let e=navigator.userAgentData;return e?.platform?/mac/i.test(e.platform):/mac/i.test(navigator.platform||``)}),y=F(()=>v.value?Q(`@13D1C:按住 ⌘ 点击用新标签打开`):Q(`@13D1C:按住 Ctrl 点击用新标签打开`)),b=F(()=>r.removeLabel??Q(`@13D1C:从最近项目中移除`)),x=F(()=>r.emptyText??Q(`@13D1C:暂无最近项目`)),C=F(()=>r.ariaLabel??Q(`@13D1C:最近项目列表`)),w=F(()=>s.value.map(e=>{let t=l.value[e.path];return{...e,base:Jt(e.path),git:t&&t.isGitRepo!==null?t:null}})),T=F(()=>{let e=u.value.trim().toLowerCase();return e?w.value.filter(t=>t.path.toLowerCase().includes(e)):w.value});function ee(e){let t=e.git;if(!t||t.isGitRepo!==!0)return[];let n=[];return t.hasRemote===!1&&n.push(Q(`@13D1C:未配置远程仓库,推送与拉取都不可用`)),t.upstream&&t.behind>0&&n.push(Q(`@13D1C:落后 {upstream} {count} 个提交`,{upstream:t.upstream,count:t.behind})),t.upstream&&t.ahead>0&&n.push(Q(`@13D1C:领先 {upstream} {count} 个提交`,{upstream:t.upstream,count:t.ahead})),t.changed>0&&n.push(Q(`@13D1C:已暂存 {staged} · 未暂存 {unstaged} · 未跟踪 {untracked}`,{staged:t.staged,unstaged:t.unstaged,untracked:t.untracked})),n.length===0&&n.push(Q(`@13D1C:Git 仓库,工作区干净`)),n}function E(e){let t=e.git;return!t||t.isGitRepo!==!0?!1:t.changed>0||t.ahead>0||t.behind>0||t.hasRemote===!1}function D(e){let t=[];r.mode===`pick`&&t.push(y.value),t.push(e.exists?e.path:Q(`@13D1C:目录不存在`)),t.push(...ee(e));let n=m.value[e.path];return n&&t.push(Q(`@13D1C:刷新失败:{error}`,{error:n})),t.join(`
38
38
  `)}function O(e){return e.exists?r.mode===`pick`?Q(`@13D1C:选择 {path}`,{path:e.path}):Q(`@13D1C:在新标签页打开 {path}`,{path:e.path}):Q(`@13D1C:{path} (目录不存在)`,{path:e.path})}function te(e){return r.removable===`always`||!e.exists}async function ne(e){let t=e.filter(e=>typeof e==`string`&&e.trim());if(t.length!==0)try{let e=await(await fetch(`/api/recent_directories/git-state`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({paths:t})})).json();e?.success&&e.results&&(l.value={...l.value,...e.results})}catch{}}async function k(){c.value=!0;try{let e=await(await fetch(`/api/recent_directories`,{cache:`no-store`})).json();s.value=Array.isArray(e?.directories)?e.directories:[],await ne(s.value.filter(e=>e.exists!==!1).map(e=>e.path))}catch{s.value=[]}finally{c.value=!1,r.refreshOnMount||(p.value=!0),i(`loaded`,s.value.length)}}async function A(e,t,n){let r=e.slice(),i=Math.max(1,Math.min(t,r.length));await Promise.all(Array.from({length:i},async()=>{for(;r.length>0;)await n(r.shift())}))}async function j(){if(d.value)return;let e=s.value.filter(e=>e.exists!==!1).map(e=>e.path);if(e.length===0){p.value=!0;return}d.value=!0,p.value=!1,f.value={done:0,total:e.length};let t={},n=0,r=0,i=0;try{await A(e,Gs,async e=>{try{let a=await(await fetch(`/api/recent_directories/fetch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})})).json();a?.status===`ok`?(n+=1,a.state&&(l.value={...l.value,[e]:a.state})):a?.status===`failed`?(i+=1,t[e]=a.timeout?Q(`@13D1C:刷新超时(超过 {seconds} 秒)`,{seconds:a.timeoutSeconds??30}):a.error||Q(`@13D1C:刷新失败`)):r+=1}catch(n){i+=1,t[e]=n.message}finally{f.value={done:f.value.done+1,total:f.value.total}}})}finally{d.value=!1,p.value=!0;let n={};for(let[t,r]of Object.entries(m.value))e.includes(t)||(n[t]=r);m.value={...n,...t}}V({message:Q(`@13D1C:刷新完成:成功 {ok} · 跳过 {skipped} · 失败 {failed}`,{ok:n,skipped:r,failed:i}),type:i>0?`warning`:`success`})}async function M(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||V.error(t?.error||Q(`@13D1C:打开失败`))}catch(e){V.error(`${Q(`@13D1C:打开失败`)}: ${e.message}`)}}function N(e,t){if(!(r.mode===`open`||t.ctrlKey||t.metaKey)){i(`select`,e.path);return}if(!e.exists){V.warning(Q(`@13D1C:目录不存在,无法打开`));return}M(e.path)}async function re(e){if(e)try{await navigator.clipboard.writeText(e),V.success(Q(`@13D1C:路径已复制到剪贴板`))}catch(e){V.error(`${Q(`@13D1C:复制失败`)}: ${e.message}`)}}async function P(e){if(e){try{await Me.confirm(Q(`@13D1C:确定要移除以下目录吗?`,{path:e}),Q(`@13D1C:移除目录`),{confirmButtonText:Q(`@13D1C:移除`),cancelButtonText:Q(`@13D1C:取消`),type:`warning`})}catch{return}try{let t=await(await fetch(`/api/remove_recent_directory`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})})).json();t?.success?(s.value=s.value.filter(t=>t.path!==e),V.success(Q(`@13D1C:已从目录列表中移除`))):V.error(t?.error||Q(`@13D1C:移除失败`))}catch(e){V.error(`${Q(`@13D1C:移除失败`)}: ${e.message}`)}}}_e(async()=>{r.autoLoad&&(await k(),r.refreshOnMount&&(bs(Ks)?j():p.value=!0))}),t({reload:k,refreshAll:j,refreshing:d,refreshLabel:h,refreshTitle:g,refreshDisabled:_});let ie={REFRESH_CONCURRENCY:Gs,props:r,emit:i,isSplit:a,directories:s,isLoading:c,gitStates:l,searchQuery:u,isRefreshingAll:d,refreshProgress:f,summaryReady:p,fetchErrors:m,refreshLabel:h,refreshTitle:g,refreshDisabled:_,isMac:v,ctrlHint:y,removeLabelText:b,resolvedEmptyText:x,resolvedAriaLabel:C,allItems:w,items:T,gitSummaryLines:ee,hasGitSignal:E,itemTitle:D,itemAriaLabel:O,canRemove:te,loadGitStates:ne,load:k,mapWithLimit:A,refreshAllGitStates:j,openInNewTab:M,onItemClick:N,copyPath:re,removeDirectory:P,AUTO_REFRESH_KEY:Ks,get Delete(){return Re},get DocumentCopy(){return De},get Folder(){return le},get Loading(){return o},get Search(){return S},get $t(){return Q},RecentDirectoriesSummary:Bs,DirListRefreshButton:Ws};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}});c(),v(),K();var Js={class:`dir-list__head`},Ys={class:`dir-list__title`},Xs={class:`dir-list__head-actions`},Zs={class:`dir-list__hint`},Qs={class:`dir-list__search`},$s=[`placeholder`,`aria-label`],ec=[`aria-label`],tc={key:1,class:`dir-list__empty`},nc={key:2,class:`dir-list__empty`},rc={key:3,class:`dir-list__empty`},ic=[`aria-label`],ac=[`title`],oc=[`aria-label`,`onClick`],sc={class:`dir-card__name`},cc={class:`dir-card__name-base`},lc={class:`dir-card__name-path`},uc={class:`dir-card__tags`},dc={key:0,class:`dir-card__tag dir-card__tag--missing`},fc={key:1,class:`dir-card__tag dir-card__tag--plain`},pc={key:0,class:`dir-card__tag dir-card__tag--noremote`},mc={key:1,class:`dir-card__tag dir-card__tag--dirty`},hc={key:2,class:`dir-card__tag dir-card__tag--ahead`},gc={key:3,class:`dir-card__tag dir-card__tag--behind`},_c={key:4,class:`dir-card__tag dir-card__tag--git`},vc={class:`dir-card__actions`},yc=[`title`,`aria-label`,`onClick`],bc=[`title`,`aria-label`,`onClick`];function xc(e,t,n,i,a,o){let s=E;return z(),J(`div`,{class:O([`dir-list`,[`dir-list--${n.variant}`,{"dir-list--split":i.isSplit}]])},[N(` 外壳:仅 panel 形态自带标题行 + 搜索框;bare 形态由调用方(弹窗表单 label)提供标题 `),n.variant===`panel`?(z(),J(Z,{key:0},[h(`div`,Js,[h(`span`,Ys,q(i.$t(`@13D1C:最近项目`)),1),h(`div`,Xs,[h(`span`,Zs,q(i.$t(`@13D1C:点击在新标签页打开`)),1),N(` 徽标里的「领先/落后」读的是本地 remote-tracking 引用 = "上次 fetch 时的
39
39
  快照",只有 fetch 才会更新它。「未提交 N 项」是本地实时扫描,不需要刷。
@@ -84,17 +84,17 @@ import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{$ as n,$n as r,
84
84
  状态由列表组件 expose 出来(recentDirsRefresh),不在这儿重算一遍。 `),i.recentDirsRefresh?(z(),p(i.DirListRefreshButton,{key:0,class:`form-label__refresh`,label:i.recentDirsRefresh.label,title:i.recentDirsRefresh.title,"aria-label":i.$t(`@13D1C:刷新全部`),refreshing:i.recentDirsRefresh.refreshing,disabled:i.recentDirsRefresh.disabled,onClick:t[12]||=e=>i.recentDirsRefresh.run()},null,8,[`label`,`title`,`aria-label`,`refreshing`,`disabled`])):N(`v-if`,!0)])]),default:G(()=>[P(i.RecentDirectoriesList,{ref:`recentDirsListRef`,class:`recent-dirs-list`,mode:`pick`,variant:`bare`,layout:`split`,removable:`always`,"min-card-width":`min(470px, 46%)`,"remove-label":i.$t(`@67CE7:从常用目录中移除`),"empty-text":i.$t(`@67CE7:暂无常用目录`),"aria-label":i.$t(`@67CE7:常用目录`),onSelect:i.onRecentDirSelect,onLoaded:t[13]||=e=>i.recentDirsCount=e},null,8,[`remove-label`,`empty-text`,`aria-label`])]),_:1})]),_:1})])]),_:1},8,[`modelValue`,`title`]),N(` 目录浏览器弹窗 `),N(` default-global-search / global-search-change:把弹窗里「全局」开关的选择写进
85
85
  ui.pickerGlobalSearch,下次打开(任意入口的弹窗)都按上次的选择开局,
86
86
  落盘由 configStore 里同名字段的 watch 负责 `),P(i.FilePicker,{visible:i.isBrowserDialogVisible,mode:`directory`,theme:i.isDark?`dark`:`light`,locale:i.currentLocale,"default-global-search":i.configStore.ui.pickerGlobalSearch,onGlobalSearchChange:t[18]||=e=>{i.configStore.ui.pickerGlobalSearch=e},onClose:t[19]||=e=>i.isBrowserDialogVisible=!1,onConfirm:t[20]||=e=>{i.onBrowserSelect(e[0]),i.isBrowserDialogVisible=!1}},null,8,[`visible`,`theme`,`locale`,`default-global-search`])],64)}var Pl=$(Xc,[[`render`,Nl],[`__scopeId`,`data-v-955e45f2`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/DirectorySelector.vue`]]);function Fl(){if(typeof window>`u`)return`unsupported`;let e=window.Notification;if(!e)return`unsupported`;let t=e.permission;return t===`granted`||t===`denied`||t==="default"?t:`default`}async function Il(){let e=Fl();if(e===`unsupported`||e===`granted`||e===`denied`)return e;try{let e=await window.Notification.requestPermission();return e===`granted`||e===`denied`?e:`default`}catch{return`default`}}function Ll(e){return e.permission==="default"?e.loaded?e.enabled?`request`:`skip`:`wait`:`skip`}function Rl(){return typeof document>`u`?!1:document.visibilityState!==`visible`||typeof document.hasFocus==`function`&&!document.hasFocus()}function zl(e){if(Fl()!==`granted`)return!1;try{let t=window.Notification,n=new t(e.title,{body:e.body||``,tag:e.tag||void 0,requireInteraction:!1,silent:!1});return n.onclick=()=>{try{window.focus()}catch{}try{n.close()}catch{}},!0}catch{return!1}}var Bl=`data:image/svg+xml,%3csvg%20t='1784427065526'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='5971'%20width='200'%20height='200'%3e%3cpath%20d='M716.8%20819.2H307.2V409.6h409.6v409.6z'%20fill='%23CFCECD'%20p-id='5972'%3e%3c/path%3e%3cpath%20d='M716.8%20204.8H307.2v614.4h409.6V204.8z%20m204.8%20819.2H102.4V0h819.2v1024z'%20fill='%23211E1E'%20p-id='5973'%3e%3c/path%3e%3c/svg%3e`,Vl=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20width='24'%20height='24'%3e%3cpath%20fill='%23000000'%20d='M22.2819%209.8211a5.9847%205.9847%200%200%200-.5157-4.9108%206.0462%206.0462%200%200%200-6.5098-2.9A6.0651%206.0651%200%200%200%204.9807%204.1818a5.9847%205.9847%200%200%200-3.9977%202.9%206.0462%206.0462%200%200%200%20.7427%207.0966%205.98%205.98%200%200%200%20.511%204.9107%206.051%206.051%200%200%200%206.5146%202.9001A5.9847%205.9847%200%200%200%2013.2599%2024a6.0557%206.0557%200%200%200%205.7718-4.2058%205.9894%205.9894%200%200%200%203.9977-2.9001%206.0557%206.0557%200%200%200-.7475-7.0729zm-9.022%2012.6081a4.4755%204.4755%200%200%201-2.8764-1.0408l.1419-.0804%204.7783-2.7582a.7948.7948%200%200%200%20.3927-.6813v-6.7369l2.02%201.1686a.071.071%200%200%201%20.038.052v5.5826a4.504%204.504%200%200%201-4.4945%204.4944zm-9.6607-4.1254a4.4708%204.4708%200%200%201-.5346-3.0137l.142.0852%204.783%202.7582a.7712.7712%200%200%200%20.7806%200l5.8428-3.3685v2.3324a.0804.0804%200%200%201-.0332.0615L9.74%2019.9502a4.4992%204.4992%200%200%201-6.1408-1.6464zM2.3408%207.8956a4.485%204.485%200%200%201%202.3655-1.9728V11.6a.7664.7664%200%200%200%20.3879.6765l5.8144%203.3543-2.0201%201.1685a.0757.0757%200%200%201-.071%200l-4.8303-2.7865A4.504%204.504%200%200%201%202.3408%207.872zm16.5963%203.8558L13.1038%208.364%2015.1192%207.2a.0757.0757%200%200%201%20.071%200l4.8303%202.7913a4.4944%204.4944%200%200%201-.6765%208.1042v-5.6772a.79.79%200%200%200-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759%200%200%200-.7854%200L9.409%209.2297V6.8974a.0662.0662%200%200%201%20.0284-.0615l4.8303-2.7866a4.4992%204.4992%200%200%201%206.6802%204.66zM8.3065%2012.863l-2.02-1.1638a.0804.0804%200%200%201-.038-.0567V6.0742a4.4992%204.4992%200%200%201%207.3757-3.4537l-.142.0805L8.704%205.459a.7948.7948%200%200%200-.3927.6813zm1.0976-2.3654l2.602-1.4998%202.6069%201.4998v2.9994l-2.5974%201.4997-2.6067-1.4997z'/%3e%3c/svg%3e`;c();var Hl=T({__name:`TaskExecutorIcon`,props:{executor:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r={claude:zc,opencode:Bl,codex:Vl},i={props:n,ICONS:r,src:F(()=>r[n.executor])};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});c();var Ul=[`src`];function Wl(e,t,n,r,i,a){return z(),J(`img`,{src:r.src,alt:``,class:`task-executor-icon`,draggable:`false`},null,8,Ul)}var Gl=$(Hl,[[`render`,Wl],[`__scopeId`,`data-v-7d6f0102`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/TaskExecutorIcon.vue`]]);c(),X();var Kl=T({__name:`MemoryPanel`,setup(e,{expose:t}){function n(e){return e instanceof Error?e.message:String(e)}let r=U(!0),i=U([]),a=U(!1),o=U(``),s=U([]),c=U(!1),l=U(new Set),u=U(``),d=U({}),p=U(!1),m=U(``),h=F(()=>o.value!==`global`&&o.value!==`global-index`),g=F(()=>i.value.find(e=>e.scope===o.value)?.repoPath||``),_=F(()=>i.value.reduce((e,t)=>e+t.count,0)),v=F(()=>s.value.filter(e=>!e.indexed).length),y=e=>`${o.value}/${e}`,b=F(()=>s.value.length>0&&s.value.every(e=>l.value.has(y(e.file)))),x=F(()=>s.value.some(e=>l.value.has(y(e.file)))&&!b.value);function S(e){if(e.scope===`global`)return Q(`@42BB9:全局经验 (GLOBAL.md)`);if(e.scope===`global-index`)return Q(`@42BB9:全局索引 (INDEX.md)`);let t=e.repoPath||e.label;return`${t.split(/[\\/]/).filter(Boolean).pop()||t} · ${e.count}`}function w(e){return e<1024?`${e} B`:`${(e/1024).toFixed(1)} KB`}function T(e){if(!e)return`—`;let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`}async function ee(){a.value=!0;try{let e=await fetch(`/api/memory/scopes`).then(e=>e.json());if(!e.success)throw Error(e.error||`scopes failed`);r.value=e.available!==!1,i.value=e.scopes||[],i.value.some(e=>e.scope===o.value)||(o.value=i.value[0]?.scope||``)}catch(e){V.error(Q(`@42BB9:读取记忆库失败`)+`: `+n(e))}finally{a.value=!1}}async function E(){if(!o.value){s.value=[];return}c.value=!0,m.value=``;try{let e=await fetch(`/api/memory/entries?scope=${encodeURIComponent(o.value)}`).then(e=>e.json());if(!e.success)throw Error(e.error||`entries failed`);s.value=e.entries||[];let t=new Set(s.value.map(e=>y(e.file)));for(let e of Array.from(l.value))t.has(e)||l.value.delete(e);l.value=new Set(l.value),u.value&&!s.value.some(e=>e.file===u.value)&&(u.value=``)}catch(e){s.value=[],V.error(Q(`@42BB9:读取条目失败`)+`: `+n(e))}finally{c.value=!1}}async function D(){await ee(),await E()}function O(){u.value=``,m.value=``,E()}async function te(e){if(u.value===e){u.value=``;return}if(u.value=e,m.value=``,!d.value[e]){p.value=!0;try{let t=new URLSearchParams({scope:o.value,file:e}),n=await fetch(`/api/memory/entry?${t.toString()}`).then(e=>e.json());if(!n.success)throw Error(n.error||`read failed`);d.value={...d.value,[e]:n.content}}catch(e){m.value=n(e)}finally{p.value=!1}}}function ne(e,t){let n=y(e);t?l.value.add(n):l.value.delete(n),l.value=new Set(l.value)}function k(e){if(e)for(let e of s.value)l.value.add(y(e.file));else for(let e of s.value)l.value.delete(y(e.file));l.value=new Set(l.value)}async function A(e){try{await Me.confirm(Q(`@42BB9:确定要删除「{title}」吗?它会同时从索引里移除。`,{title:e.title}),Q(`@42BB9:删除经验`),{type:`warning`,confirmButtonText:Q(`@42BB9:删除`)})}catch{return}await M([{scope:o.value,file:e.file}])}async function j(){let e=s.value.filter(e=>l.value.has(y(e.file))).map(e=>({scope:o.value,file:e.file}));if(e.length!==0){try{await Me.confirm(Q(`@42BB9:确定要删除所选的 {count} 条经验吗?此操作不可恢复。`,{count:e.length}),Q(`@42BB9:批量删除`),{type:`warning`})}catch{return}await M(e)}}async function M(e){try{let t=await fetch(`/api/memory/batch-delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({items:e,confirm:!0})}).then(e=>e.json());if(!t.success)throw Error(t.error||`delete failed`);V.success(Q(`@42BB9:已删除 {count} 条`,{count:t.removed})),t.failed?.length&&V.warning(Q(`@42BB9:{count} 条删除失败`,{count:t.failed.length})),l.value=new Set;for(let t of e)delete d.value[t.file];d.value={...d.value},u.value=``,await D()}catch(e){V.error(Q(`@42BB9:删除失败`)+`: `+n(e))}}_e(D),t({reload:D});let N={errMsg:n,available:r,scopes:i,scopesLoading:a,currentScope:o,entries:s,loading:c,selectedKeys:l,expanded:u,bodyCache:d,bodyLoading:p,bodyError:m,deletable:h,currentRepoPath:g,totalCount:_,orphanCount:v,keyOf:y,isAllSelected:b,isSomeSelected:x,scopeLabel:S,formatSize:w,formatTime:T,loadScopes:ee,loadEntries:E,reload:D,onScopeChange:O,toggleExpand:te,toggleSelect:ne,toggleSelectAll:k,removeOne:A,batchDelete:j,doDelete:M,get Delete(){return Re},get Document(){return qe},get FolderOpened(){return f},get Refresh(){return C},get $t(){return Q}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}});c(),v();var ql={class:`mem-panel`},Jl={class:`mem-panel__head`},Yl={class:`mem-panel__title-block`},Xl={class:`mem-panel__stats`},Zl={key:0,class:`mem-panel__stat-warn`},Ql={class:`mem-panel__head-actions`},$l={class:`mem-panel__scope`},eu={class:`mem-panel__scope-option`},tu={class:`mem-panel__scope-name`},nu={class:`mem-panel__scope-count`},ru=[`title`],iu={key:0,class:`mem-panel__batch`},au={class:`mem-panel__batch-meta`},ou={class:`mem-panel__list`},su={key:0,class:`mem-panel__empty`},cu={class:`mem-panel__empty-art`,"aria-hidden":`true`},lu={class:`mem-panel__empty-title`},uu={class:`mem-panel__empty-hint`},du={key:1,class:`mem-panel__empty`},fu={class:`mem-panel__empty-art`,"aria-hidden":`true`},pu={class:`mem-panel__empty-title`},mu={class:`mem-panel__empty-hint`},hu={class:`mem-card__main`},gu=[`aria-expanded`,`onClick`],_u={class:`mem-card__title`},vu={key:0,class:`mem-card__badge mem-card__badge--warn`},yu={class:`mem-card__meta`},bu={key:0,class:`mem-card__body`},xu={key:0,class:`mem-card__text`},Su={key:1,class:`mem-card__body-error`},Cu={class:`mem-card__actions`},wu={class:`mem-panel__foot`};function Tu(e,t,n,i,a,o){let s=pt,c=g,l=w,u=j,d=E,f=He;return z(),J(`div`,ql,[N(` 头部:统计 + 刷新 `),h(`header`,Jl,[h(`div`,Yl,[h(`span`,Xl,q(i.$t(`@42BB9:共 {count} 条经验`,{count:i.totalCount})),1),i.orphanCount>0?(z(),J(`span`,Zl,q(i.$t(`@42BB9:{count} 条没有索引(Agent 查不到)`,{count:i.orphanCount})),1)):N(`v-if`,!0)]),h(`div`,Ql,[P(s,{icon:i.Refresh,size:`small`,loading:i.loading,onClick:i.reload},{default:G(()=>[M(q(i.$t(`@42BB9:刷新`)),1)]),_:1},8,[`icon`,`loading`])])]),N(` 范围切换:全局两篇 + 每个项目 `),h(`div`,$l,[P(l,{modelValue:i.currentScope,"onUpdate:modelValue":t[0]||=e=>i.currentScope=e,size:`small`,class:`mem-panel__scope-select`,placeholder:i.$t(`@42BB9:全部`),loading:i.scopesLoading,onChange:i.onScopeChange},{default:G(()=>[(z(!0),J(Z,null,r(i.scopes,e=>(z(),p(c,{key:e.scope,label:i.scopeLabel(e),value:e.scope},{default:G(()=>[h(`span`,eu,[h(`span`,tu,q(i.scopeLabel(e)),1),h(`span`,nu,q(e.count),1)])]),_:2},1032,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`]),h(`span`,{class:`mem-panel__scope-path`,title:i.currentRepoPath},q(i.currentRepoPath||i.currentScope),9,ru)]),N(` 批量操作条 `),i.selectedKeys.size>0?(z(),J(`div`,iu,[P(u,{"model-value":i.isAllSelected,indeterminate:i.isSomeSelected,onChange:i.toggleSelectAll},{default:G(()=>[M(q(i.isAllSelected?i.$t(`@42BB9:取消全选`):i.$t(`@42BB9:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),h(`span`,au,q(i.$t(`@42BB9:已选择 {count} 项`,{count:i.selectedKeys.size})),1),P(s,{type:`danger`,size:`small`,onClick:i.batchDelete},{default:G(()=>[M(q(i.$t(`@42BB9:批量删除`)),1)]),_:1})])):N(`v-if`,!0),N(` 列表 `),Y((z(),J(`div`,ou,[N(` 未初始化:这是合法状态(用户还没开过工作台),给一句人话而不是报错 `),!i.loading&&!i.available?(z(),J(`div`,su,[h(`div`,cu,[P(d,null,{default:G(()=>[P(i.FolderOpened)]),_:1})]),h(`div`,lu,q(i.$t(`@42BB9:记忆库尚未初始化`)),1),h(`div`,uu,q(i.$t(`@42BB9:启动一次工作台即会自动创建记忆库目录。`)),1)])):!i.loading&&i.entries.length===0?(z(),J(`div`,du,[h(`div`,fu,[P(d,null,{default:G(()=>[P(i.Document)]),_:1})]),h(`div`,pu,q(i.$t(`@42BB9:这里还没有经验`)),1),h(`div`,mu,q(i.$t(`@42BB9:智能体在派发任务收尾时自检四问,命中才会记一条。`)),1)])):N(`v-if`,!0),(z(!0),J(Z,null,r(i.entries,e=>(z(),J(`article`,{key:e.file,class:O([`mem-card`,{"is-selected":i.selectedKeys.has(e.file),"is-open":i.expanded===e.file}])},[P(u,{class:`mem-card__check`,"model-value":i.selectedKeys.has(e.file),disabled:!i.deletable,onChange:t=>i.toggleSelect(e.file,t)},null,8,[`model-value`,`disabled`,`onChange`]),h(`div`,hu,[h(`button`,{type:`button`,class:`mem-card__head`,"aria-expanded":i.expanded===e.file,onClick:t=>i.toggleExpand(e.file)},[h(`span`,_u,q(e.title),1),e.indexed?N(`v-if`,!0):(z(),J(`span`,vu,q(i.$t(`@42BB9:未索引`)),1)),t[1]||=h(`span`,{class:`mem-card__spacer`},null,-1),h(`span`,yu,q(i.formatSize(e.size))+` · `+q(i.formatTime(e.mtime)),1)],8,gu),N(` 展开:正文。原始 markdown 而非渲染后 —— 用户多半是照着去改文件,
87
- 给渲染结果等于把"可以照抄的原文"藏起来。 `),i.expanded===e.file?Y((z(),J(`div`,bu,[i.bodyCache[e.file]?(z(),J(`pre`,xu,q(i.bodyCache[e.file]),1)):i.bodyError?(z(),J(`div`,Su,q(i.bodyError),1)):N(`v-if`,!0)])),[[f,i.bodyLoading]]):N(`v-if`,!0)]),h(`div`,Cu,[i.deletable?(z(),p(s,{key:0,type:`danger`,plain:``,size:`small`,icon:i.Delete,onClick:t=>i.removeOne(e)},{default:G(()=>[M(q(i.$t(`@42BB9:删除`)),1)]),_:1},8,[`icon`,`onClick`])):N(`v-if`,!0)])],2))),128))])),[[f,i.loading]]),h(`p`,wu,q(i.$t(`@42BB9:记忆库位于 ~/.zen-gitsync/memory/,只有索引会进智能体的上下文,正文按需读取。`)),1)])}var Eu=$(Kl,[[`render`,Tu],[`__scopeId`,`data-v-1d631e80`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/MemoryPanel.vue`]]);c(),X();var Du=T({__name:`GitGlobalSettingsDialog`,props:{modelValue:{type:Boolean,required:!0},initialTab:{type:String,required:!1}},emits:[`update:modelValue`],setup(e,{expose:t,emit:n}){t();let r=Bt(),i=It(),a=Lt(),o=Ht(),s=[`vscode`,`claude`,`codex`,`opencode`,`kimi`,`zcode`,`dsh`],c={vscode:`vscode`,claude:`claudecode-color`,codex:`codex`,opencode:`opencode`,kimi:`kimi`,zcode:`zcode`,dsh:`dsh`},l=s.map(e=>({id:e,name:Vc[e],icon:c[e]}));function u(e){return!a.ui.headerToolsHidden.includes(e)}function d(e,t){let n=new Set(a.ui.headerToolsHidden);t?n.delete(e):n.add(e),a.ui.headerToolsHidden=[...n]}let f=Ft;async function p(e){await a.setMarkdownTheme(e)}let h=e,g=n,_=U(!1),v=U(!1),y=U(`general`),b=U(`light`),x=U(`zh-CN`),S=U(`claude`),C=F(()=>o.executorModelText(S.value)),w=F(()=>o.executorModelDetail(S.value)),T=F(()=>[C.value,w.value?`(${w.value})`:``].filter(Boolean).join(` `));function ee(e){return[o.executorModelText(e),o.executorModelDetail(e)].filter(Boolean).join(` · `)}let E=U(!1),D=U(!0),O=U(`default`),te=U(!1),ne=U(!0),k=U([]),A=U(void 0),j=U(200),M=U(!1);async function N(e){let t=Number(e);if(!Number.isFinite(t)||t<=0){j.value=a.aiMaxToolIterations;return}if(t!==a.aiMaxToolIterations){M.value=!0;try{let e=await a.saveAiSettings({aiMaxToolIterations:t});j.value=a.aiMaxToolIterations,e&&V.success(Q(`@42BB9:已保存`))}finally{M.value=!1}}}let re=F(()=>a.theme===`light`?`light`:`dark`),P=F(()=>{let e=a.currentDirectory.replace(/[\\/]+$/,``);return e.split(/[\\/]/).pop()||e});function ie(e){a.setAiDiffSummaryEnabled(e===!0)}let ae=F(()=>{if(A.value===null)return null;let e=k.value.find(e=>e.id===A.value);return e?{endpoint:e.baseURL,modelName:e.model,displayName:e.name,apiKey:e.apiKey}:null}),oe=F(()=>y.value===`config`?!0:y.value===`general`?b.value!==G||x.value!==Ce||S.value!==we||E.value!==K||D.value!==q||A.value!==void 0:y.value===`git`?L.value!==ye||pe.value!==B||he.value!==be||ge.value!==xe||_e.value!==H||ve.value!==W||(z.value||``).trim()!==Se:y.value===`editor`?te.value!==a.ui.editorAutoSave||ne.value!==a.ui.fileTreeAutoRefresh:!1);function se(){A.value=null}function ce(e){A.value=e.id}function le(){A.value=void 0}async function I(e){let t=A.value===null,n=e.displayName||e.modelName,r=t?`model-${n.toLowerCase().replace(/[^a-z0-9]/g,`-`).slice(0,24)}-${Date.now().toString(36)}`:A.value,i;if(t){let t=k.value.length===0;i=[...k.value,{id:r,name:n,apiKey:e.apiKey,baseURL:e.endpoint,model:e.modelName,isDefault:t}]}else i=k.value.map(t=>t.id===A.value?{...t,name:n,apiKey:e.apiKey||t.apiKey,baseURL:e.endpoint,model:e.modelName}:t);await a.saveModels(i)&&(k.value=i,A.value=void 0,V.success(Q(t?`@42BB9:已添加模型`:`@42BB9:已更新模型`)))}async function ue(e){let t=k.value.filter(t=>t.id!==e);await a.saveModels(t)&&(k.value=t,V.success(Q(`@42BB9:已删除模型`)))}async function de(e){let t=k.value.map(t=>({...t,isDefault:t.id===e}));await a.saveModels(t)&&(k.value=t,V.success(Q(`@42BB9:已设置默认模型`)))}let L=U(``),pe=U(``),me=U(``),R=U(!1),he=U(!1),ge=U(`false`),_e=U(!1),ve=U(`true`),z=U(`main`),ye=``,B=``,be=!1,xe=`false`,H=!1,W=`true`,Se=`main`,G=`light`,Ce=`zh-CN`,we=`claude`,K=!1,q=!0;We(()=>h.modelValue,async e=>{if(_.value=e,e){await a.loadConfig(!0),o.fetchExecutorModels(!0),L.value=r.userName,pe.value=r.userEmail,me.value=``,b.value=a.theme,x.value=a.locale,S.value=a.taskExecutor,E.value=a.notifyOnTaskDone,D.value=a.notifySoundOnTaskDone,O.value=Fl(),X(),k.value=[...a.models],j.value=a.aiMaxToolIterations,A.value=void 0,te.value=a.ui.editorAutoSave,ne.value=a.ui.fileTreeAutoRefresh,h.initialTab?y.value=h.initialTab:y.value=`general`;try{v.value=!0,await Re()}finally{v.value=!1}ye=L.value,B=pe.value,be=he.value,xe=ge.value,H=_e.value,W=ve.value,Se=z.value,G=b.value,Ce=x.value,we=S.value,K=E.value,q=D.value}},{immediate:!0}),We(()=>h.initialTab,e=>{e&&_.value&&(y.value=e)});let Te=F(()=>[`# ${Q(`@42BB9:Markdown 主题预览`)}`,``,Q("@42BB9:这段话用来看主题的正文配色:**加粗**、*斜体*、`行内代码` 与 [链接](https://example.com)。"),``,`> ${Q(`@42BB9:引用块:左侧竖条用的是主题强调色。`)}`,``,`- ${Q(`@42BB9:列表项一`)}`,`- [x] ${Q(`@42BB9:已完成的任务`)}`,`- [ ] ${Q(`@42BB9:待办的任务`)}`,``,"```js",`const total = items.length * 2`,"```",``,`| A | B |`,`| --- | --- |`,`| 1 | 2 |`].join(`
88
- `)),Ee=U(``),De=U(!1),Oe=F(()=>Ee.value||a.markdownTheme),ke=U(null),Ae=null,je=``;function Me(){let e=ke.value;return e?(Ae&&Ae.element!==e&&Pe(),Ae||(Ae=_t(e,{theme:a.markdownTheme,initialValue:Te.value}),je=a.markdownTheme),Ae):null}function Ne(){let e=Me();e&&(e.update(Te.value),je!==Oe.value&&(e.setTheme(Oe.value),je=Oe.value))}function Pe(){Ae?.destroy(),Ae=null,je=``}function Fe(e){De.value&&(Ee.value=e,Ne())}function J(e){De.value=e,e||(Ee.value=``),Ne()}We(_,async e=>{if(!e){Pe();return}for(let e=0;e<5&&!ke.value;e+=1)await fe();Ne()}),Ye(Pe);function Ie(e){g(`update:modelValue`,e)}async function Le(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 Y(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 Re(){let[e,t,n,r,i]=await Promise.all([Le(`push.autoSetupRemote`),Le(`pull.rebase`),Le(`fetch.prune`),Le(`core.autocrlf`),Le(`init.defaultBranch`)]);he.value=(e||`false`).toLowerCase()===`true`;let a=(t||`false`).toLowerCase();ge.value=a===`true`||a===`merges`?a:`false`,_e.value=(n||`false`).toLowerCase()===`true`;let o=(r||`true`).toLowerCase();ve.value=o===`true`||o===`input`?o:`false`,z.value=i||`main`}async function ze(){let e=[];try{he.value!==be&&e.push(Y(`push.autoSetupRemote`,he.value?`true`:`false`)),ge.value!==xe&&e.push(Y(`pull.rebase`,ge.value)),_e.value!==H&&e.push(Y(`fetch.prune`,_e.value?`true`:`false`)),ve.value!==W&&e.push(Y(`core.autocrlf`,ve.value));let t=(z.value||``).trim();return t&&t!==Se&&e.push(Y(`init.defaultBranch`,t)),e.length===0||(await Promise.all(e),V.success(Q(`@42BB9:已保存变更的 Git 配置`)),be=he.value,xe=ge.value,H=_e.value,W=ve.value,Se=t||Se,!0)}catch(e){return V.error(e.message),!1}}async function Be(){let e={};if(b.value!==G&&(e.theme=b.value,G=b.value),x.value!==Ce&&(e.locale=x.value,i.changeLocale(x.value),Ce=x.value),S.value!==we&&(e.taskExecutor=S.value,we=S.value),E.value!==K&&(e.notifyOnTaskDone=E.value,K=E.value),D.value!==q&&(e.notifySoundOnTaskDone=D.value,q=D.value),e.theme!==void 0||e.locale!==void 0||e.taskExecutor!==void 0||e.notifyOnTaskDone!==void 0||e.notifySoundOnTaskDone!==void 0){let t=await a.saveGeneralSettings(e);return t&&V.success(Q(`@42BB9:通用设置已保存`)),t}return!0}async function Ve(e){e===!0?(O.value=await Il(),O.value===`denied`&&V.warning(Q(`@42BB9:浏览器已拒绝通知权限,将只在页面内提示`))):O.value=Fl()}let He=U(!1),Ue=U(!1),Ge=U(!1),Ke=F(()=>He.value?Ue.value?Q(`@42BB9:已添加:右键文件夹(或文件夹空白处)即可用 g UI 打开该目录`):Q(`@42BB9:右键文件夹(或文件夹空白处)即可用 g UI 打开该目录;Windows 11 需在「显示更多选项」中查找`):Q(`@42BB9:仅支持 Windows 资源管理器`));async function X(){try{let e=await(await fetch(`/api/explorer-context-menu`)).json();if(!e?.success)return;He.value=e.supported===!0,Ue.value=e.installed===!0}catch{He.value=!1}}async function qe(){let e=!Ue.value;Ge.value=!0;try{let t=await fetch(`/api/explorer-context-menu/${e?`install`:`uninstall`}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:Q(`@42BB9:用 g UI 打开`)})}),n=await t.json().catch(()=>null);if(!t.ok||!n?.success){V.error(n?.error||Q(`@42BB9:操作失败,请重试`));return}Ue.value=e,V.success(Q(e?`@42BB9:已添加到资源管理器右键菜单`:`@42BB9:已从资源管理器右键菜单移除`))}catch(e){V.error(e.message)}finally{Ge.value=!1}}async function Je(){try{let e=await a.resetUiLayout();window.dispatchEvent(new CustomEvent(`ui-layout-reset`,{detail:{layout:e}})),V.success(Q(`@42BB9:布局比例已重置为默认值`))}catch(e){V.error(`${Q(`@42BB9:重置布局失败: `)}${e.message}`)}}async function Xe(){if(A.value!==void 0){V.warning(Q(`@42BB9:模型尚未保存,请先保存或取消模型编辑`));return}if(y.value===`config`){await tt();return}if(y.value===`editor`){a.ui.editorAutoSave=te.value,a.ui.fileTreeAutoRefresh=ne.value,V.success(Q(`@42BB9:编辑器设置已保存`)),_.value=!1;return}if(!await Be())return;if(!L.value||!pe.value){V.warning(Q(`@42BB9:用户名和邮箱不能为空`));return}let e=!0;(L.value!==ye||pe.value!==B)&&(e=await r.restoreUserConfig(L.value,pe.value),e&&(ye=L.value,B=pe.value));let t=await ze();e&&t&&(_.value=!1)}async function Ze(){if(y.value=`config`,!me.value)try{let e=await(await fetch(`/api/config/check-file-format`)).json();e.success||V.warning(e.message||Q(`@42BB9:配置文件格式可能有问题`)),me.value=JSON.stringify(a.config,null,2)}catch{V.error(Q(`@42BB9:加载配置失败`))}}let Qe=U(null),$e=!1;function et(){y.value=`memory`,!$e&&($e=!0,fe(()=>{Qe.value?.reload?.()}))}async function tt(){let e;try{e=JSON.parse(me.value)}catch(e){V.error(`${Q(`@42BB9:JSON 解析失败: `)}${e.message||e}`);return}try{R.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){V.error(`${Q(`@42BB9:保存失败: `)}${t.error||Q(`@42BB9:未知错误`)}`);return}await a.loadConfig(),V.success(Q(`@42BB9:配置已保存`)),_.value=!1}catch(e){V.error(`${Q(`@42BB9:保存配置失败: `)}${e.message||e}`)}finally{R.value=!1}}async function rt(){try{let e=await(await fetch(`/api/config/open-file`,{method:`POST`})).json();e.success?V.success(Q(`@42BB9:已用系统程序打开配置文件`)):V.error(e.error||Q(`@42BB9:打开文件失败`))}catch(e){V.error(`${Q(`@42BB9:打开文件失败: `)}${e.message||e}`)}}let it={gitStore:r,localeStore:i,configStore:a,toolsStore:o,HEADER_TOOL_IDS:s,HEADER_TOOL_ICONS:c,headerToolOptions:l,isHeaderToolVisible:u,toggleHeaderTool:d,markdownThemeOptions:f,onMarkdownThemeChange:p,props:h,emit:g,visible:_,isLoading:v,activeTab:y,tempTheme:b,tempLocale:x,tempTaskExecutor:S,selectedExecutorModelText:C,selectedExecutorModelDetail:w,selectedExecutorModelLineTitle:T,optionExecutorModelTitle:ee,tempNotifyOnTaskDone:E,tempNotifySoundOnTaskDone:D,notifyPermissionState:O,tempEditorAutoSave:te,tempFileTreeAutoRefresh:ne,aiModels:k,editingModelId:A,aiMaxToolIterationsInput:j,savingAiSettings:M,handleAiMaxToolIterationsChange:N,currentThemeForForm:re,currentProjectName:P,handleAiDiffSummaryEnabledChange:ie,editingModelInitial:ae,hasChanges:oe,startAddModel:se,startEditModel:ce,cancelEditModel:le,handleAddModelSave:I,handleDeleteModel:ue,handleSetDefaultModel:de,tempUserName:L,tempUserEmail:pe,configEditorText:me,configEditorSaving:R,cfgAutoSetupRemote:he,cfgPullRebase:ge,cfgFetchPrune:_e,cfgCoreAutoCrlf:ve,cfgInitDefaultBranch:z,get initUserName(){return ye},set initUserName(e){ye=e},get initUserEmail(){return B},set initUserEmail(e){B=e},get initAutoSetupRemote(){return be},set initAutoSetupRemote(e){be=e},get initPullRebase(){return xe},set initPullRebase(e){xe=e},get initFetchPrune(){return H},set initFetchPrune(e){H=e},get initCoreAutoCrlf(){return W},set initCoreAutoCrlf(e){W=e},get initInitDefaultBranch(){return Se},set initInitDefaultBranch(e){Se=e},get initTheme(){return G},set initTheme(e){G=e},get initLocale(){return Ce},set initLocale(e){Ce=e},get initTaskExecutor(){return we},set initTaskExecutor(e){we=e},get initNotifyOnTaskDone(){return K},set initNotifyOnTaskDone(e){K=e},get initNotifySoundOnTaskDone(){return q},set initNotifySoundOnTaskDone(e){q=e},mdThemeSample:Te,mdThemeHovered:Ee,mdThemeDropdownOpen:De,mdThemePreviewName:Oe,mdThemePreviewRef:ke,get mdThemePreview(){return Ae},set mdThemePreview(e){Ae=e},get mdThemePreviewApplied(){return je},set mdThemePreviewApplied(e){je=e},ensureMdThemePreview:Me,syncMdThemePreview:Ne,destroyMdThemePreview:Pe,onMarkdownThemeHover:Fe,onMarkdownThemeDropdownVisible:J,handleVisibleChange:Ie,getGlobalConfig:Le,setGlobalConfig:Y,loadGlobalGitConfigs:Re,saveGlobalGitConfigs:ze,saveGeneralSettings:Be,onNotifyToggleChange:Ve,explorerMenuSupported:He,explorerMenuInstalled:Ue,explorerMenuBusy:Ge,explorerMenuHint:Ke,loadExplorerMenuStatus:X,onToggleExplorerMenu:qe,onResetUiLayout:Je,handleSave:Xe,onClickConfigTab:Ze,memoryPanelRef:Qe,get memoryTabLoaded(){return $e},set memoryTabLoaded(e){$e=e},onClickMemoryTab:et,saveConfigJson:tt,openSystemConfigFile:rt,get $t(){return Q},get Check(){return nt},get InfoFilled(){return m},CommonDialog:Kt,get TASK_EXECUTOR_OPTIONS(){return Pt},TaskExecutorIcon:Gl,MemoryPanel:Eu,SvgIcon:jt,get AddModelForm(){return yt}};return Object.defineProperty(it,"__isScriptSetup",{enumerable:!1,value:!0}),it}});c(),v(),K();var Ou=[`element-loading-text`],ku={class:`settings-tabs`},Au={class:`settings-panels`},ju={class:`settings-panel`},Mu={class:`info-section`},Nu={class:`info-card`},Pu={class:`info-content`},Fu={class:`info-title`},Iu={class:`info-desc`},Lu={class:`settings-section`},Ru={class:`section-title`},zu={class:`settings-grid`},Bu={class:`setting-row`},Vu={class:`setting-label`},Hu={class:`settings-section`},Uu={class:`section-title`},Wu={class:`settings-grid`},Gu={class:`setting-row`},Ku={class:`setting-label`},qu={class:`settings-section`},Ju={class:`section-title`},Yu={class:`settings-grid`},Xu={class:`setting-row`},Zu={class:`setting-label`},Qu={class:`project-toggle`},$u={class:`executor-option`},ed=[`title`],td={key:1,class:`executor-option__missing`},nd={class:`setting-hint-block`},rd=[`title`],id={key:0,class:`executor-model-line__detail`},ad={class:`setting-row`},od={class:`setting-label`},sd={class:`project-toggle`},cd={class:`setting-hint-block notify-hint`},ld={key:0,class:`setting-hint-block notify-hint notify-hint--warn`},ud={key:1,class:`setting-hint-block notify-hint notify-hint--warn`},dd={class:`notify-sub`},fd={class:`notify-sub__head`},pd={class:`notify-sub__label`},md={class:`setting-hint-block notify-hint notify-sub__hint`},hd={class:`settings-section`},gd={class:`section-title`},_d={class:`settings-grid`},vd={class:`setting-row`},yd={class:`setting-label`},bd={class:`setting-row`},xd={class:`setting-label`},Sd={class:`setting-hint-inline`},Cd={class:`setting-row`},wd={class:`setting-label`},Td={class:`project-toggle`},Ed=[`title`],Dd={class:`setting-row setting-row--full setting-row--span`},Od={class:`setting-label`},kd={class:`md-theme-panel`},Ad={class:`md-theme-col`},jd={class:`md-theme-option`},Md={class:`setting-hint-block`},Nd={class:`setting-hint-block`},Pd={class:`md-theme-preview`},Fd={class:`md-theme-preview__head`},Id={class:`md-theme-preview__name`},Ld={ref:`mdThemePreviewRef`,class:`md-theme-preview__body`},Rd={class:`setting-row setting-row--full setting-row--span`},zd={class:`setting-label`},Bd={class:`console-sub-options`},Vd={class:`console-split-row`},Hd={class:`setting-hint-block`},Ud={class:`setting-row`},Wd={class:`setting-label`},Gd={class:`layout-actions`},Kd={class:`setting-hint-block`},qd={class:`settings-section`},Jd={class:`section-title`},Yd={class:`header-tools-row`},Xd={class:`header-tools`},Zd={class:`header-tool__icon`},Qd={class:`header-tool__name`},$d={class:`setting-hint-block`},ef={class:`settings-section`},tf={class:`section-title`},nf={class:`settings-grid`},rf={class:`setting-row setting-row--span`},af={class:`setting-label`},of={class:`layout-actions`},sf={class:`setting-hint-block`},cf={class:`settings-panel`},lf={class:`info-section`},uf={class:`info-card`},df={class:`info-content`},ff={class:`info-title`},pf={class:`info-desc`},mf={class:`settings-section`},hf={class:`section-title model-section-title`},gf={class:`model-list`},_f={key:0,class:`model-empty`},vf={class:`model-info`},yf={class:`model-name-row`},bf={class:`model-name`},xf={key:0,class:`model-default-badge`},Sf={class:`model-meta`},Cf={class:`model-actions`},wf=[`onClick`],Tf=[`onClick`],Ef=[`onClick`],Df={key:0,class:`ai-model-form-wrapper`},Of={class:`settings-section`},kf={class:`section-title model-section-title`},Af={class:`setting-row`},jf={class:`setting-label`},Mf={class:`project-toggle`},Nf={class:`setting-hint-block ai-iterations-hint`},Pf={class:`settings-panel`},Ff={class:`info-section`},If={class:`info-card`},Lf={class:`info-content`},Rf={class:`info-title`},zf={class:`info-desc`},Bf={class:`basic-info-section`},Vf={class:`basic-info-grid`},Hf={class:`settings-section`},Uf={class:`section-title`},Wf={class:`settings-grid`},Gf={class:`setting-row`},Kf={class:`setting-label`},qf={class:`setting-row`},Jf={class:`setting-label`},Yf={class:`setting-row`},Xf={class:`setting-label`},Zf={class:`setting-row`},Qf={class:`setting-label`},$f={class:`setting-row`},ep={class:`setting-label`},tp={class:`settings-panel`},np={class:`info-section`},rp={class:`info-card`},ip={class:`info-content`},ap={class:`info-title`},op={class:`info-desc`},sp={class:`settings-section`},cp={class:`section-title`},lp={class:`settings-grid commit-settings-grid`},up={class:`setting-row`},dp={class:`setting-label`},fp={class:`setting-row`},pp={class:`setting-label`},mp={class:`setting-row`},hp={class:`setting-label`},gp={class:`setting-row`},_p={class:`setting-label`},vp={class:`setting-row`},yp={class:`setting-label`},bp={class:`setting-row`},xp={class:`setting-label`},Sp={class:`settings-panel config-panel`},Cp={class:`info-section`},wp={class:`info-card`},Tp={class:`info-content`},Ep={class:`info-title`},Dp={class:`info-desc`},Op={class:`config-json-editor-wrap`},kp={class:`config-panel-actions`},Ap={class:`settings-panel`},jp={class:`info-section`},Mp={class:`info-card`},Np={class:`info-content`},Pp={class:`info-title`},Fp={class:`info-desc`},Ip={class:`settings-section`},Lp={class:`section-title`},Rp={class:`settings-grid`},zp={class:`setting-row`},Bp={class:`setting-label`},Vp={key:0,class:`setting-row setting-row--hint`},Hp={class:`setting-hint`},Up={class:`settings-section`},Wp={class:`section-title`},Gp={class:`settings-grid`},Kp={class:`setting-row`},qp={class:`setting-label`},Jp={key:0,class:`setting-row setting-row--hint`},Yp={class:`setting-hint`},Xp={class:`settings-panel`},Zp={class:`info-section`},Qp={class:`info-card`},$p={class:`info-content`},em={class:`info-title`},tm={class:`info-desc`},nm={class:`user-settings-footer`},rm={class:`footer-actions`},im=[`disabled`],am=[`disabled`];function om(e,t,n,i,a,o){let s=g,c=w,l=Ae,u=Ne,d=A,f=Oe,m=pt,_=ut,v=I,y=ne,x=E,S=L,C=b,T=He;return z(),p(i.CommonDialog,{modelValue:i.visible,"onUpdate:modelValue":[t[34]||=e=>i.visible=e,i.handleVisibleChange],title:i.$t(`@42BB9:设置`),size:`large`,"destroy-on-close":!0,"custom-class":`user-settings-dialog`},Pe({default:G(()=>[Y((z(),J(`div`,{class:`user-settings-content`,"element-loading-text":i.$t(`@42BB9:正在加载配置...`),"element-loading-background":`rgba(0, 0, 0, 0.15)`},[N(` 左侧标签页切换 `),h(`div`,ku,[h(`div`,{class:O([`tab-item`,{active:i.activeTab===`general`}]),onClick:t[0]||=e=>i.activeTab=`general`},[h(`span`,null,q(i.$t(`@42BB9:通用设置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`ai-models`}]),onClick:t[1]||=e=>i.activeTab=`ai-models`},[h(`span`,null,q(i.$t(`@42BB9:AI 模型配置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`git`}]),onClick:t[2]||=e=>i.activeTab=`git`},[h(`span`,null,q(i.$t(`@42BB9:Git 全局设置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`commit`}]),onClick:t[3]||=e=>i.activeTab=`commit`},[h(`span`,null,q(i.$t(`@42BB9:提交设置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`config`}]),onClick:i.onClickConfigTab},[h(`span`,null,q(i.$t(`@42BB9:编辑配置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`editor`}]),onClick:t[4]||=e=>i.activeTab=`editor`},[h(`span`,null,q(i.$t(`@42BB9:编辑器设置`)),1)],2),N(` 记忆库:懒加载 —— 点进来才拉,否则打开设置弹窗就多一次无用请求。\r
89
- 与「编辑配置」tab 同一套约定(见 onClickConfigTab)。 `),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`memory`}]),onClick:i.onClickMemoryTab},[h(`span`,null,q(i.$t(`@42BB9:记忆库`)),1)],2)]),N(` 右侧内容区域 `),h(`div`,Au,[N(` 通用设置面板 `),Y(h(`div`,ju,[h(`div`,Mu,[h(`div`,Nu,[h(`div`,Pu,[h(`p`,Fu,q(i.$t(`@42BB9:通用配置`)),1),h(`p`,Iu,q(i.$t(`@42BB9:自定义应用的外观和语言`)),1)])])]),h(`div`,Lu,[h(`div`,Ru,[h(`span`,null,q(i.$t(`@42BB9:外观`)),1)]),h(`div`,zu,[h(`div`,Bu,[h(`label`,Vu,q(i.$t(`@42BB9:主题`)),1),P(c,{modelValue:i.tempTheme,"onUpdate:modelValue":t[5]||=e=>i.tempTheme=e,class:`modern-input`,size:`default`},{default:G(()=>[P(s,{label:i.$t(`@42BB9:浅色`),value:`light`},null,8,[`label`]),P(s,{label:i.$t(`@42BB9:深色`),value:`dark`},null,8,[`label`]),P(s,{label:i.$t(`@42BB9:跟随系统`),value:`auto`},null,8,[`label`])]),_:1},8,[`modelValue`])])])]),h(`div`,Hu,[h(`div`,Uu,[h(`span`,null,q(i.$t(`@42BB9:语言`)),1)]),h(`div`,Wu,[h(`div`,Gu,[h(`label`,Ku,q(i.$t(`@42BB9:界面语言`)),1),P(c,{modelValue:i.tempLocale,"onUpdate:modelValue":t[6]||=e=>i.tempLocale=e,class:`modern-input`,size:`default`},{default:G(()=>[P(s,{label:`简体中文`,value:`zh-CN`}),P(s,{label:`English`,value:`en-US`})]),_:1},8,[`modelValue`])])])]),N(` 任务执行:工作台任务默认用哪个本地 CLI 执行 `),h(`div`,qu,[h(`div`,Ju,[h(`span`,null,q(i.$t(`@42BB9:任务执行`)),1)]),h(`div`,Yu,[h(`div`,Xu,[h(`label`,Zu,q(i.$t(`@42BB9:任务执行器`)),1),h(`div`,Qu,[N(` fit-input-width=false:下拉宽度跟着**内容**走。默认跟输入框等宽,\r
90
- 而这个选项里要同时放「产品名 + 模型名」,等宽会把模型名截成\r
91
- \`opencode-go/space-bunny-…\`(实测),等于白显示 `),P(c,{modelValue:i.tempTaskExecutor,"onUpdate:modelValue":t[7]||=e=>i.tempTaskExecutor=e,class:`modern-input`,size:`default`,"fit-input-width":!1},{default:G(()=>[(z(!0),J(Z,null,r(i.TASK_EXECUTOR_OPTIONS,e=>(z(),p(s,{key:e.id,label:e.name,value:e.id,disabled:!i.toolsStore.isToolAvailable(e.id)},{default:G(()=>[h(`span`,$u,[P(i.TaskExecutorIcon,{executor:e.id,class:`executor-option__icon`},null,8,[`executor`]),M(` `+q(e.name)+` `,1),i.toolsStore.executorModelText(e.id)?(z(),J(`span`,{key:0,class:`executor-option__model`,title:i.optionExecutorModelTitle(e.id)},q(i.toolsStore.executorModelText(e.id)),9,ed)):N(`v-if`,!0),i.toolsStore.isToolAvailable(e.id)?N(`v-if`,!0):(z(),J(`span`,td,q(i.$t(`@42BB9:未安装`)),1))])]),_:2},1032,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`]),h(`span`,nd,q(i.$t(`@42BB9:工作台执行任务时使用的本地 CLI;模型跟随各自 CLI 的自身配置`)),1),N(` 当前模型:把"模型跟随各自 CLI 的自身配置"这句话落到实处 `),i.selectedExecutorModelText?(z(),J(`span`,{key:0,class:`setting-hint-block executor-model-line`,title:i.$t(`@42BB9:当前模型:{model}`,{model:i.selectedExecutorModelLineTitle})},[M(q(i.$t(`@42BB9:当前模型:{model}`,{model:i.selectedExecutorModelText}))+` `,1),i.selectedExecutorModelDetail?(z(),J(`span`,id,`(`+q(i.selectedExecutorModelDetail)+`)`,1)):N(`v-if`,!0)],8,rd)):N(`v-if`,!0)])]),N(` 任务 / 对话执行结束提示:跑完一个任务或一轮对话时给个动静(页面在后台发系统通知) `),h(`div`,ad,[h(`label`,od,q(i.$t(`@42BB9:任务与对话完成提示`)),1),h(`div`,sd,[P(l,{modelValue:i.tempNotifyOnTaskDone,"onUpdate:modelValue":t[8]||=e=>i.tempNotifyOnTaskDone=e,onChange:i.onNotifyToggleChange},null,8,[`modelValue`]),h(`span`,cd,q(i.$t(`@42BB9:任务或对话结束时提醒我:页面在后台发系统通知,在前台弹应用内提示`)),1),i.notifyPermissionState===`denied`?(z(),J(`span`,ld,q(i.$t(`@42BB9:浏览器已拒绝通知权限,只能在页面内提示(可在浏览器地址栏的站点设置里恢复)`)),1)):i.notifyPermissionState===`unsupported`?(z(),J(`span`,ud,q(i.$t(`@42BB9:当前环境不支持系统通知,只能在页面内提示`)),1)):N(`v-if`,!0),N(` 提示音:总开关的子选项。缩进 + 左侧竖线表达从属关系,总开关关掉时置灰 `),h(`div`,dd,[h(`div`,fd,[P(l,{modelValue:i.tempNotifySoundOnTaskDone,"onUpdate:modelValue":t[9]||=e=>i.tempNotifySoundOnTaskDone=e,size:`small`,disabled:!i.tempNotifyOnTaskDone},null,8,[`modelValue`,`disabled`]),h(`span`,pd,q(i.$t(`@42BB9:提示音`)),1)]),h(`span`,md,q(i.$t(`@42BB9:任务或对话跑完、出错各响一声(主动停止不响);上面的总开关关着时也不会有声音`)),1)])])])])]),N(` 界面(视图模式 / 分割比例 / 控制台 / 布局比例) `),h(`div`,hd,[h(`div`,gd,[h(`span`,null,q(i.$t(`@42BB9:界面`)),1)]),h(`div`,_d,[N(` 文件列表视图模式 `),h(`div`,vd,[h(`label`,yd,q(i.$t(`@42BB9:文件列表视图`)),1),P(d,{modelValue:i.configStore.ui.fileListViewMode,"onUpdate:modelValue":t[10]||=e=>i.configStore.ui.fileListViewMode=e,size:`default`},{default:G(()=>[P(u,{value:`list`},{default:G(()=>[M(q(i.$t(`@42BB9:列表`)),1)]),_:1}),P(u,{value:`tree`},{default:G(()=>[M(q(i.$t(`@42BB9:树状`)),1)]),_:1})]),_:1},8,[`modelValue`])]),N(` 文件差异分割比例 `),h(`div`,bd,[h(`label`,xd,[M(q(i.$t(`@42BB9:文件差异分割`))+` `,1),h(`span`,Sd,q(i.configStore.ui.fileDiffSplitPercent)+`%`,1)]),P(f,{modelValue:i.configStore.ui.fileDiffSplitPercent,"onUpdate:modelValue":t[11]||=e=>i.configStore.ui.fileDiffSplitPercent=e,min:15,max:85,step:1,class:`setting-slider`},null,8,[`modelValue`])]),h(`div`,Cd,[h(`label`,wd,q(i.$t(`@42BB9:AI 差异说明`)),1),h(`div`,Td,[P(l,{"model-value":i.configStore.aiDiffSummaryEnabled,disabled:!i.configStore.currentDirectory,onChange:i.handleAiDiffSummaryEnabledChange},null,8,[`model-value`,`disabled`]),h(`span`,{class:`setting-hint-block`,title:i.configStore.currentDirectory},[M(q(i.$t(`@42BB9:在当前项目的文件差异和提交详情中显示 AI 生成的说明`))+` `,1),i.currentProjectName?(z(),J(Z,{key:0},[M(` · `+q(i.currentProjectName),1)],64)):N(`v-if`,!0)],8,Ed)])]),N(` Markdown 预览主题(全局唯一):文件预览 / 差异预览 / AI 说明共用同一套配色。\r
92
- 光看下拉里的名字看不出主题长什么样,所以右侧常驻一块实时预览:\r
93
- 默认渲染当前生效的那套,鼠标悬停下拉项时临时切到那一套(只预览,不改配置)。 `),h(`div`,Dd,[h(`label`,Od,q(i.$t(`@42BB9:Markdown 预览主题`)),1),h(`div`,kd,[h(`div`,Ad,[P(c,{"model-value":i.configStore.markdownTheme,class:`modern-input md-theme-select`,size:`default`,filterable:``,"onUpdate:modelValue":i.onMarkdownThemeChange,onVisibleChange:i.onMarkdownThemeDropdownVisible},{default:G(()=>[(z(!0),J(Z,null,r(i.markdownThemeOptions,e=>(z(),p(s,{key:e.value,label:e.value,value:e.value,onMouseenter:t=>i.onMarkdownThemeHover(e.value)},{default:G(()=>[h(`span`,jd,[h(`span`,{class:`md-theme-swatch`,style:R({background:e.bg||`transparent`,color:e.fg||`inherit`})},`Aa`,4),h(`span`,null,q(e.value),1)])]),_:2},1032,[`label`,`value`,`onMouseenter`]))),128))]),_:1},8,[`model-value`]),h(`span`,Md,q(i.$t(`@42BB9:整个应用只用一个主题,同时作用于文件预览、差异预览与 AI 说明`)),1),h(`span`,Nd,q(i.$t(`@42BB9:鼠标移到下拉项上可即时预览,点击即应用`)),1)]),h(`div`,Pd,[h(`div`,Fd,[h(`span`,null,q(i.$t(`@42BB9:效果预览`)),1),h(`span`,Id,q(i.mdThemePreviewName),1),h(`span`,{class:O([`md-theme-preview__tag`,{"is-hover":!!i.mdThemeHovered}])},q(i.mdThemeHovered?i.$t(`@42BB9:悬停预览,未应用`):i.$t(`@42BB9:当前生效`)),3)]),h(`div`,Ld,null,512)])])]),N(` 命令控制台(跨整行的复合控件):4 个开关 + 比例滑条,\r
94
- 只在半格里会把 el-switch 的 active-text 压成竖排单字(实测),\r
95
- 所以整行跨两列 + 内部两列网格。 `),h(`div`,Rd,[h(`label`,zd,q(i.$t(`@42BB9:命令控制台`)),1),h(`div`,Bd,[P(l,{modelValue:i.configStore.ui.commandConsole.expanded,"onUpdate:modelValue":t[12]||=e=>i.configStore.ui.commandConsole.expanded=e,"active-text":i.$t(`@42BB9:默认展开`)},null,8,[`modelValue`,`active-text`]),P(l,{modelValue:i.configStore.ui.commandConsole.useTerminal,"onUpdate:modelValue":t[13]||=e=>i.configStore.ui.commandConsole.useTerminal=e,"active-text":i.$t(`@42BB9:使用终端执行`)},null,8,[`modelValue`,`active-text`]),P(l,{modelValue:i.configStore.ui.commandConsole.showTerminalSessions,"onUpdate:modelValue":t[14]||=e=>i.configStore.ui.commandConsole.showTerminalSessions=e,"active-text":i.$t(`@42BB9:显示终端会话`)},null,8,[`modelValue`,`active-text`]),h(`div`,Vd,[h(`span`,Hd,q(i.$t(`@42BB9:控制台高度比例`))+`: `+q(i.configStore.ui.commandConsole.splitPercent)+`% `,1),P(f,{modelValue:i.configStore.ui.commandConsole.splitPercent,"onUpdate:modelValue":t[15]||=e=>i.configStore.ui.commandConsole.splitPercent=e,min:15,max:85,step:1,class:`setting-slider`},null,8,[`modelValue`])])])]),N(` 布局比例重置 `),h(`div`,Ud,[h(`label`,Wd,q(i.$t(`@42BB9:布局比例`)),1),h(`div`,Gd,[P(m,{onClick:i.onResetUiLayout,size:`default`},{default:G(()=>[M(q(i.$t(`@42BB9:重置为默认布局`)),1)]),_:1}),h(`span`,Kd,q(i.$t(`@42BB9:恢复默认的左/中/右/上面板比例`)),1)])])])]),N(` 顶栏工具图标:勾选的固定在顶栏,取消勾选的收进右侧「更多」菜单 `),h(`div`,qd,[h(`div`,Jd,[h(`span`,null,q(i.$t(`@42BB9:顶部工具栏`)),1)]),N(` 不套 setting-row:这里是一整格工具开关网格(两列),塞进 160px 标签列会被挤成竖排 `),h(`div`,Yd,[h(`div`,Xd,[(z(!0),J(Z,null,r(i.headerToolOptions,e=>(z(),J(`div`,{key:e.id,class:O([`header-tool`,{"is-off":!i.isHeaderToolVisible(e.id)}])},[h(`span`,Zd,[P(i.SvgIcon,{"icon-class":e.icon},null,8,[`icon-class`])]),h(`span`,Qd,q(e.name),1),P(l,{class:`header-tool__switch`,"model-value":i.isHeaderToolVisible(e.id),onChange:t=>i.toggleHeaderTool(e.id,!!t)},null,8,[`model-value`,`onChange`])],2))),128))]),h(`span`,$d,q(i.$t(`@42BB9:勾选后固定在顶栏显示,取消勾选的工具会收进右侧「更多」菜单`)),1)])]),N(` 系统集成:把 g ui 注册进 Windows 资源管理器右键菜单(写 HKCU,不需要管理员权限) `),h(`div`,ef,[h(`div`,tf,[h(`span`,null,q(i.$t(`@42BB9:系统集成`)),1)]),h(`div`,nf,[N(` 说明文案较长,整行铺开:半宽单元格里会被挤成好几行 `),h(`div`,rf,[h(`label`,af,q(i.$t(`@42BB9:资源管理器右键菜单`)),1),h(`div`,of,[P(m,{size:`default`,loading:i.explorerMenuBusy,disabled:!i.explorerMenuSupported,onClick:i.onToggleExplorerMenu},{default:G(()=>[M(q(i.explorerMenuInstalled?i.$t(`@42BB9:从右键菜单移除`):i.$t(`@42BB9:添加到右键菜单`)),1)]),_:1},8,[`loading`,`disabled`]),h(`span`,sf,q(i.explorerMenuHint),1)])])])])],512),[[at,i.activeTab===`general`]]),N(` AI 模型配置面板 `),Y(h(`div`,cf,[h(`div`,lf,[h(`div`,uf,[h(`div`,df,[h(`p`,ff,q(i.$t(`@42BB9:AI 模型配置`)),1),h(`p`,pf,q(i.$t(`@42BB9:管理 AI 模型的 API 端点、凭据与默认模型`)),1)])])]),h(`div`,mf,[h(`div`,hf,[h(`span`,null,q(i.$t(`@42BB9:已配置模型`)),1),h(`button`,{class:`add-model-btn`,onClick:i.startAddModel},`+ `+q(i.$t(`@42BB9:添加模型`)),1)]),h(`div`,gf,[i.aiModels.length===0?(z(),J(`div`,_f,q(i.$t(`@42BB9:暂未配置模型`)),1)):N(`v-if`,!0),(z(!0),J(Z,null,r(i.aiModels,e=>(z(),J(`div`,{key:e.id,class:`model-card`},[h(`div`,vf,[h(`div`,yf,[h(`span`,bf,q(e.name),1),e.isDefault?(z(),J(`span`,xf,q(i.$t(`@42BB9:默认`)),1)):N(`v-if`,!0)]),h(`div`,Sf,q(e.model)+` · `+q(e.baseURL),1)]),h(`div`,Cf,[e.isDefault?N(`v-if`,!0):(z(),J(`button`,{key:0,class:`model-btn`,onClick:t=>i.handleSetDefaultModel(e.id)},q(i.$t(`@42BB9:设为默认`)),9,wf)),h(`button`,{class:`model-btn`,onClick:t=>i.startEditModel(e)},q(i.$t(`@42BB9:编辑`)),9,Tf),h(`button`,{class:`model-btn model-btn--danger`,onClick:t=>i.handleDeleteModel(e.id)},q(i.$t(`@42BB9:删除`)),9,Ef)])]))),128))]),N(` 新增 / 编辑表单:使用 ai-model-form 组件 `),i.editingModelId===void 0?N(`v-if`,!0):(z(),J(`div`,Df,[(z(),p(i.AddModelForm,{key:i.editingModelId??`__new__`,"api-base":`/api/ai-model`,initial:i.editingModelInitial,theme:i.currentThemeForForm,locale:i.localeStore.currentLocale,onSave:i.handleAddModelSave,onCancel:i.cancelEditModel},null,8,[`initial`,`theme`,`locale`]))]))]),N(" 智能体运行时(全局设置,CLI `g ai` 与 Web 智能体共用) "),h(`div`,Of,[h(`div`,kf,[h(`span`,null,q(i.$t(`@42BB9:智能体运行时`)),1)]),h(`div`,Af,[h(`label`,jf,q(i.$t(`@42BB9:单轮最大工具调用次数`)),1),h(`div`,Mf,[P(_,{modelValue:i.aiMaxToolIterationsInput,"onUpdate:modelValue":t[16]||=e=>i.aiMaxToolIterationsInput=e,min:1,max:2e3,step:10,disabled:i.savingAiSettings,class:`ai-iterations-input`,onChange:i.handleAiMaxToolIterationsChange},null,8,[`modelValue`,`disabled`]),h(`span`,Nf,q(i.$t(`@42BB9:一条消息内智能体最多连续调用多少次工具。达到上限本轮会被强制结束,需要再发一条消息才能继续`)),1)])])])],512),[[at,i.activeTab===`ai-models`]]),N(` Git 全局设置面板 `),Y(h(`div`,Pf,[h(`div`,Ff,[h(`div`,If,[h(`div`,Lf,[h(`p`,Rf,q(i.$t(`@42BB9:全局配置`)),1),h(`p`,zf,q(i.$t(`@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效`)),1)])])]),P(C,{class:`user-form`,"label-width":`auto`,model:{tempUserName:i.tempUserName,tempUserEmail:i.tempUserEmail}},{default:G(()=>[h(`div`,Bf,[h(`div`,Vf,[P(y,{class:`form-item`,label:i.$t(`@42BB9:用户名`)},{default:G(()=>[P(v,{modelValue:i.tempUserName,"onUpdate:modelValue":t[17]||=e=>i.tempUserName=e,placeholder:i.$t(`@42BB9:请输入 Git 用户名`),class:`modern-input`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),P(y,{class:`form-item`,label:i.$t(`@42BB9:邮箱地址`)},{default:G(()=>[P(v,{modelValue:i.tempUserEmail,"onUpdate:modelValue":t[18]||=e=>i.tempUserEmail=e,placeholder:i.$t(`@42BB9:请输入 Git 邮箱地址`),class:`modern-input`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])]),N(` 高级设置:常用全局 Git 配置 `),h(`div`,Hf,[h(`div`,Uf,[h(`span`,null,q(i.$t(`@42BB9:高级配置`)),1)]),h(`div`,Wf,[h(`div`,Gf,[h(`label`,Kf,[M(q(i.$t(`@42BB9:自动设置上游`))+` `,1),P(S,{content:i.$t(`@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.cfgAutoSetupRemote,"onUpdate:modelValue":t[19]||=e=>i.cfgAutoSetupRemote=e},null,8,[`modelValue`])]),h(`div`,qf,[h(`label`,Jf,q(i.$t(`@42BB9:拉取策略`)),1),P(c,{modelValue:i.cfgPullRebase,"onUpdate:modelValue":t[20]||=e=>i.cfgPullRebase=e,class:`modern-input`,size:`default`},{default:G(()=>[P(s,{label:i.$t(`@42BB9:merge (默认)`),value:`false`},null,8,[`label`]),P(s,{label:`rebase`,value:`true`}),P(s,{label:i.$t(`@42BB9:rebase(保留合并)`),value:`merges`},null,8,[`label`])]),_:1},8,[`modelValue`])]),h(`div`,Yf,[h(`label`,Xf,[M(q(i.$t(`@42BB9:自动清理远程分支`))+` `,1),P(S,{content:i.$t(`@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.cfgFetchPrune,"onUpdate:modelValue":t[21]||=e=>i.cfgFetchPrune=e},null,8,[`modelValue`])]),h(`div`,Zf,[h(`label`,Qf,q(i.$t(`@42BB9:换行符处理`)),1),P(c,{modelValue:i.cfgCoreAutoCrlf,"onUpdate:modelValue":t[22]||=e=>i.cfgCoreAutoCrlf=e,class:`modern-input`,size:`default`},{default:G(()=>[P(s,{label:`true (Windows)`,value:`true`}),P(s,{label:`input`,value:`input`}),P(s,{label:`false`,value:`false`})]),_:1},8,[`modelValue`])]),h(`div`,$f,[h(`label`,ep,[M(q(i.$t(`@42BB9:默认初始化分支`))+` `,1),P(S,{content:i.$t(`@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(v,{modelValue:i.cfgInitDefaultBranch,"onUpdate:modelValue":t[23]||=e=>i.cfgInitDefaultBranch=e,placeholder:i.$t(`@42BB9:例如: main`),class:`modern-input`,size:`default`},null,8,[`modelValue`,`placeholder`])])])])]),_:1},8,[`model`])],512),[[at,i.activeTab===`git`]]),N(` 提交设置面板 `),Y(h(`div`,tp,[h(`div`,np,[h(`div`,rp,[h(`div`,ip,[h(`p`,ap,q(i.$t(`@76872:提交设置`)),1),h(`p`,op,q(i.$t(`@76872:这些设置实时生效`)),1)])])]),h(`div`,sp,[h(`div`,cp,[h(`span`,null,q(i.$t(`@76872:提交格式与行为`)),1)]),h(`div`,lp,[h(`div`,up,[h(`label`,dp,q(i.$t(`@76872:标准化提交`)),1),P(l,{modelValue:i.configStore.isStandardCommit,"onUpdate:modelValue":t[24]||=e=>i.configStore.isStandardCommit=e},null,8,[`modelValue`])]),h(`div`,fp,[h(`label`,pp,[M(q(i.$t(`@76872:跳过钩子检查`))+` `,1),P(S,{content:i.$t(`@76872:添加 --no-verify 参数`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.skipHooks,"onUpdate:modelValue":t[25]||=e=>i.configStore.skipHooks=e},null,8,[`modelValue`])]),h(`div`,mp,[h(`label`,hp,[M(q(i.$t(`@76872:回车自动提交`))+` `,1),P(S,{content:i.$t(`@76872:输入提交信息后按回车直接执行一键推送`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.autoQuickPushOnEnter,"onUpdate:modelValue":t[26]||=e=>i.configStore.autoQuickPushOnEnter=e},null,8,[`modelValue`])]),h(`div`,gp,[h(`label`,_p,[M(q(i.$t(`@76872:Push完成自动关闭`))+` `,1),P(S,{content:i.$t(`@76872:推送成功后自动关闭进度弹窗`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.autoClosePushModal,"onUpdate:modelValue":t[27]||=e=>i.configStore.autoClosePushModal=e},null,8,[`modelValue`])]),h(`div`,vp,[h(`label`,yp,[M(q(i.$t(`@76872:推送前拉取更新`))+` `,1),P(S,{content:i.$t(`@76872:推送前自动拉取远程更新,有冲突则停止推送`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.pullBeforePush,"onUpdate:modelValue":t[28]||=e=>i.configStore.pullBeforePush=e},null,8,[`modelValue`])]),h(`div`,bp,[h(`label`,xp,[M(q(i.$t(`@76872:自动填充默认提交信息`))+` `,1),P(S,{content:i.$t(`@76872:打开页面或提交完成后自动填充默认提交信息`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.autoSetDefaultMessage,"onUpdate:modelValue":t[29]||=e=>i.configStore.autoSetDefaultMessage=e},null,8,[`modelValue`])])])])],512),[[at,i.activeTab===`commit`]]),N(` 编辑配置 JSON 面板 `),Y(h(`div`,Sp,[h(`div`,Cp,[h(`div`,wp,[h(`div`,Tp,[h(`p`,Ep,q(i.$t(`@42BB9:编辑当前项目的配置文件`)),1),h(`p`,Dp,q(i.$t(`@42BB9:直接编辑 JSON,支持所有配置项`)),1)])])]),h(`div`,Op,[P(v,{modelValue:i.configEditorText,"onUpdate:modelValue":t[30]||=e=>i.configEditorText=e,type:`textarea`,spellcheck:`false`,autocomplete:`off`,placeholder:i.$t(`@42BB9:加载中...`),class:`config-json-editor`},null,8,[`modelValue`,`placeholder`])]),h(`div`,kp,[h(`button`,{type:`button`,class:`dialog-cancel-btn system-config-btn`,onClick:i.openSystemConfigFile},q(i.$t(`@42BB9:打开系统配置文件`)),1)])],512),[[at,i.activeTab===`config`]]),N(` 编辑器设置面板 `),Y(h(`div`,Ap,[h(`div`,jp,[h(`div`,Mp,[h(`div`,Np,[h(`p`,Pp,q(i.$t(`@42BB9:编辑器设置`)),1),h(`p`,Fp,q(i.$t(`@42BB9:自定义编辑器行为`)),1)])])]),h(`div`,Ip,[h(`div`,Lp,[h(`span`,null,q(i.$t(`@42BB9:文件编辑`)),1)]),h(`div`,Rp,[h(`div`,zp,[h(`label`,Bp,q(i.$t(`@42BB9:自动保存`)),1),P(l,{modelValue:i.tempEditorAutoSave,"onUpdate:modelValue":t[31]||=e=>i.tempEditorAutoSave=e},null,8,[`modelValue`])]),i.tempEditorAutoSave?(z(),J(`div`,Vp,[h(`span`,Hp,q(i.$t(`@42BB9:失去焦点时自动保存当前文件`)),1)])):N(`v-if`,!0)])]),h(`div`,Up,[h(`div`,Wp,[h(`span`,null,q(i.$t(`@42BB9:文件树`)),1)]),h(`div`,Gp,[h(`div`,Kp,[h(`label`,qp,q(i.$t(`@42BB9:自动刷新`)),1),P(l,{modelValue:i.tempFileTreeAutoRefresh,"onUpdate:modelValue":t[32]||=e=>i.tempFileTreeAutoRefresh=e},null,8,[`modelValue`])]),i.tempFileTreeAutoRefresh?(z(),J(`div`,Jp,[h(`span`,Yp,q(i.$t(`@42BB9:定时刷新左侧文件树`)),1)])):N(`v-if`,!0)])])],512),[[at,i.activeTab===`editor`]]),N(` 记忆库面板:浏览 / 展开看正文 / 单条与批量删除。\r
96
- 没有需要「保存」的设置项(全是即时操作),所以刻意不给 hasChanges 加分支 ——\r
97
- 那样 footer 的「保存设置」按钮天然不出现(v-if="hasChanges"),行为是对的。\r
87
+ 给渲染结果等于把"可以照抄的原文"藏起来。 `),i.expanded===e.file?Y((z(),J(`div`,bu,[i.bodyCache[e.file]?(z(),J(`pre`,xu,q(i.bodyCache[e.file]),1)):i.bodyError?(z(),J(`div`,Su,q(i.bodyError),1)):N(`v-if`,!0)])),[[f,i.bodyLoading]]):N(`v-if`,!0)]),h(`div`,Cu,[i.deletable?(z(),p(s,{key:0,type:`danger`,plain:``,size:`small`,icon:i.Delete,onClick:t=>i.removeOne(e)},{default:G(()=>[M(q(i.$t(`@42BB9:删除`)),1)]),_:1},8,[`icon`,`onClick`])):N(`v-if`,!0)])],2))),128))])),[[f,i.loading]]),h(`p`,wu,q(i.$t(`@42BB9:记忆库位于 ~/.zen-gitsync/memory/,只有索引会进智能体的上下文,正文按需读取。`)),1)])}var Eu=$(Kl,[[`render`,Tu],[`__scopeId`,`data-v-1d631e80`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/MemoryPanel.vue`]]);c(),X();var Du=T({__name:`GitGlobalSettingsDialog`,props:{modelValue:{type:Boolean,required:!0},initialTab:{type:String,required:!1}},emits:[`update:modelValue`],setup(e,{expose:t,emit:n}){t();let r=Bt(),i=It(),a=Lt(),o=Ht(),s=[`vscode`,`claude`,`codex`,`opencode`,`kimi`,`zcode`,`dsh`],c={vscode:`vscode`,claude:`claudecode-color`,codex:`codex`,opencode:`opencode`,kimi:`kimi`,zcode:`zcode`,dsh:`dsh`},l=s.map(e=>({id:e,name:Vc[e],icon:c[e]}));function u(e){return!a.ui.headerToolsHidden.includes(e)}function d(e,t){let n=new Set(a.ui.headerToolsHidden);t?n.delete(e):n.add(e),a.ui.headerToolsHidden=[...n]}let f=Ft;async function p(e){await a.setMarkdownTheme(e)}let h=e,g=n,_=U(!1),v=U(!1),y=U(`general`),b=U(`light`),x=U(`zh-CN`),S=U(`claude`),C=F(()=>o.executorModelText(S.value)),w=F(()=>o.executorModelDetail(S.value)),T=F(()=>[C.value,w.value?`(${w.value})`:``].filter(Boolean).join(` `));function ee(e){return[o.executorModelText(e),o.executorModelDetail(e)].filter(Boolean).join(` · `)}let E=U(!1),D=U(!0),O=U(`default`),te=U(!1),ne=U(!0),k=U([]),A=U(void 0),j=U(1e3),M=U(!1);async function N(e){let t=Number(e);if(!Number.isFinite(t)||t<=0){j.value=a.aiMaxToolIterations;return}if(t!==a.aiMaxToolIterations){M.value=!0;try{let e=await a.saveAiSettings({aiMaxToolIterations:t});j.value=a.aiMaxToolIterations,e&&V.success(Q(`@42BB9:已保存`))}finally{M.value=!1}}}let re=F(()=>a.theme===`light`?`light`:`dark`),P=F(()=>{let e=a.currentDirectory.replace(/[\\/]+$/,``);return e.split(/[\\/]/).pop()||e});function ie(e){a.setAiDiffSummaryEnabled(e===!0)}let ae=F(()=>{if(A.value===null)return null;let e=k.value.find(e=>e.id===A.value);return e?{endpoint:e.baseURL,modelName:e.model,displayName:e.name,apiKey:e.apiKey}:null}),oe=F(()=>y.value===`config`?!0:y.value===`general`?b.value!==G||x.value!==Ce||S.value!==we||E.value!==K||D.value!==q||A.value!==void 0:y.value===`git`?L.value!==ye||pe.value!==B||he.value!==be||ge.value!==xe||_e.value!==H||ve.value!==W||(z.value||``).trim()!==Se:y.value===`editor`?te.value!==a.ui.editorAutoSave||ne.value!==a.ui.fileTreeAutoRefresh:!1);function se(){A.value=null}function ce(e){A.value=e.id}function le(){A.value=void 0}async function I(e){let t=A.value===null,n=e.displayName||e.modelName,r=t?`model-${n.toLowerCase().replace(/[^a-z0-9]/g,`-`).slice(0,24)}-${Date.now().toString(36)}`:A.value,i;if(t){let t=k.value.length===0;i=[...k.value,{id:r,name:n,apiKey:e.apiKey,baseURL:e.endpoint,model:e.modelName,isDefault:t}]}else i=k.value.map(t=>t.id===A.value?{...t,name:n,apiKey:e.apiKey||t.apiKey,baseURL:e.endpoint,model:e.modelName}:t);await a.saveModels(i)&&(k.value=i,A.value=void 0,V.success(Q(t?`@42BB9:已添加模型`:`@42BB9:已更新模型`)))}async function ue(e){let t=k.value.filter(t=>t.id!==e);await a.saveModels(t)&&(k.value=t,V.success(Q(`@42BB9:已删除模型`)))}async function de(e){let t=k.value.map(t=>({...t,isDefault:t.id===e}));await a.saveModels(t)&&(k.value=t,V.success(Q(`@42BB9:已设置默认模型`)))}let L=U(``),pe=U(``),me=U(``),R=U(!1),he=U(!1),ge=U(`false`),_e=U(!1),ve=U(`true`),z=U(`main`),ye=``,B=``,be=!1,xe=`false`,H=!1,W=`true`,Se=`main`,G=`light`,Ce=`zh-CN`,we=`claude`,K=!1,q=!0;We(()=>h.modelValue,async e=>{if(_.value=e,e){await a.loadConfig(!0),o.fetchExecutorModels(!0),L.value=r.userName,pe.value=r.userEmail,me.value=``,b.value=a.theme,x.value=a.locale,S.value=a.taskExecutor,E.value=a.notifyOnTaskDone,D.value=a.notifySoundOnTaskDone,O.value=Fl(),X(),k.value=[...a.models],j.value=a.aiMaxToolIterations,A.value=void 0,te.value=a.ui.editorAutoSave,ne.value=a.ui.fileTreeAutoRefresh,h.initialTab?y.value=h.initialTab:y.value=`general`;try{v.value=!0,await Re()}finally{v.value=!1}ye=L.value,B=pe.value,be=he.value,xe=ge.value,H=_e.value,W=ve.value,Se=z.value,G=b.value,Ce=x.value,we=S.value,K=E.value,q=D.value}},{immediate:!0}),We(()=>h.initialTab,e=>{e&&_.value&&(y.value=e)});let Te=F(()=>[`# ${Q(`@42BB9:Markdown 主题预览`)}`,``,Q("@42BB9:这段话用来看主题的正文配色:**加粗**、*斜体*、`行内代码` 与 [链接](https://example.com)。"),``,`> ${Q(`@42BB9:引用块:左侧竖条用的是主题强调色。`)}`,``,`- ${Q(`@42BB9:列表项一`)}`,`- [x] ${Q(`@42BB9:已完成的任务`)}`,`- [ ] ${Q(`@42BB9:待办的任务`)}`,``,"```js",`const total = items.length * 2`,"```",``,`| A | B |`,`| --- | --- |`,`| 1 | 2 |`].join(`
88
+ `)),Ee=U(``),De=U(!1),Oe=F(()=>Ee.value||a.markdownTheme),ke=U(null),Ae=null,je=``;function Me(){let e=ke.value;return e?(Ae&&Ae.element!==e&&Pe(),Ae||(Ae=_t(e,{theme:a.markdownTheme,initialValue:Te.value}),je=a.markdownTheme),Ae):null}function Ne(){let e=Me();e&&(e.update(Te.value),je!==Oe.value&&(e.setTheme(Oe.value),je=Oe.value))}function Pe(){Ae?.destroy(),Ae=null,je=``}function Fe(e){De.value&&(Ee.value=e,Ne())}function J(e){De.value=e,e||(Ee.value=``),Ne()}We(_,async e=>{if(!e){Pe();return}for(let e=0;e<5&&!ke.value;e+=1)await fe();Ne()}),Ye(Pe);function Ie(e){g(`update:modelValue`,e)}async function Le(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 Y(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 Re(){let[e,t,n,r,i]=await Promise.all([Le(`push.autoSetupRemote`),Le(`pull.rebase`),Le(`fetch.prune`),Le(`core.autocrlf`),Le(`init.defaultBranch`)]);he.value=(e||`false`).toLowerCase()===`true`;let a=(t||`false`).toLowerCase();ge.value=a===`true`||a===`merges`?a:`false`,_e.value=(n||`false`).toLowerCase()===`true`;let o=(r||`true`).toLowerCase();ve.value=o===`true`||o===`input`?o:`false`,z.value=i||`main`}async function ze(){let e=[];try{he.value!==be&&e.push(Y(`push.autoSetupRemote`,he.value?`true`:`false`)),ge.value!==xe&&e.push(Y(`pull.rebase`,ge.value)),_e.value!==H&&e.push(Y(`fetch.prune`,_e.value?`true`:`false`)),ve.value!==W&&e.push(Y(`core.autocrlf`,ve.value));let t=(z.value||``).trim();return t&&t!==Se&&e.push(Y(`init.defaultBranch`,t)),e.length===0||(await Promise.all(e),V.success(Q(`@42BB9:已保存变更的 Git 配置`)),be=he.value,xe=ge.value,H=_e.value,W=ve.value,Se=t||Se,!0)}catch(e){return V.error(e.message),!1}}async function Be(){let e={};if(b.value!==G&&(e.theme=b.value,G=b.value),x.value!==Ce&&(e.locale=x.value,i.changeLocale(x.value),Ce=x.value),S.value!==we&&(e.taskExecutor=S.value,we=S.value),E.value!==K&&(e.notifyOnTaskDone=E.value,K=E.value),D.value!==q&&(e.notifySoundOnTaskDone=D.value,q=D.value),e.theme!==void 0||e.locale!==void 0||e.taskExecutor!==void 0||e.notifyOnTaskDone!==void 0||e.notifySoundOnTaskDone!==void 0){let t=await a.saveGeneralSettings(e);return t&&V.success(Q(`@42BB9:通用设置已保存`)),t}return!0}async function Ve(e){e===!0?(O.value=await Il(),O.value===`denied`&&V.warning(Q(`@42BB9:浏览器已拒绝通知权限,将只在页面内提示`))):O.value=Fl()}let He=U(!1),Ue=U(!1),Ge=U(!1),Ke=F(()=>He.value?Ue.value?Q(`@42BB9:已添加:右键文件夹(或文件夹空白处)即可用 g UI 打开该目录`):Q(`@42BB9:右键文件夹(或文件夹空白处)即可用 g UI 打开该目录;Windows 11 需在「显示更多选项」中查找`):Q(`@42BB9:仅支持 Windows 资源管理器`));async function X(){try{let e=await(await fetch(`/api/explorer-context-menu`)).json();if(!e?.success)return;He.value=e.supported===!0,Ue.value=e.installed===!0}catch{He.value=!1}}async function qe(){let e=!Ue.value;Ge.value=!0;try{let t=await fetch(`/api/explorer-context-menu/${e?`install`:`uninstall`}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:Q(`@42BB9:用 g UI 打开`)})}),n=await t.json().catch(()=>null);if(!t.ok||!n?.success){V.error(n?.error||Q(`@42BB9:操作失败,请重试`));return}Ue.value=e,V.success(Q(e?`@42BB9:已添加到资源管理器右键菜单`:`@42BB9:已从资源管理器右键菜单移除`))}catch(e){V.error(e.message)}finally{Ge.value=!1}}async function Je(){try{let e=await a.resetUiLayout();window.dispatchEvent(new CustomEvent(`ui-layout-reset`,{detail:{layout:e}})),V.success(Q(`@42BB9:布局比例已重置为默认值`))}catch(e){V.error(`${Q(`@42BB9:重置布局失败: `)}${e.message}`)}}async function Xe(){if(A.value!==void 0){V.warning(Q(`@42BB9:模型尚未保存,请先保存或取消模型编辑`));return}if(y.value===`config`){await tt();return}if(y.value===`editor`){a.ui.editorAutoSave=te.value,a.ui.fileTreeAutoRefresh=ne.value,V.success(Q(`@42BB9:编辑器设置已保存`)),_.value=!1;return}if(!await Be())return;if(!L.value||!pe.value){V.warning(Q(`@42BB9:用户名和邮箱不能为空`));return}let e=!0;(L.value!==ye||pe.value!==B)&&(e=await r.restoreUserConfig(L.value,pe.value),e&&(ye=L.value,B=pe.value));let t=await ze();e&&t&&(_.value=!1)}async function Ze(){if(y.value=`config`,!me.value)try{let e=await(await fetch(`/api/config/check-file-format`)).json();e.success||V.warning(e.message||Q(`@42BB9:配置文件格式可能有问题`)),me.value=JSON.stringify(a.config,null,2)}catch{V.error(Q(`@42BB9:加载配置失败`))}}let Qe=U(null),$e=!1;function et(){y.value=`memory`,!$e&&($e=!0,fe(()=>{Qe.value?.reload?.()}))}async function tt(){let e;try{e=JSON.parse(me.value)}catch(e){V.error(`${Q(`@42BB9:JSON 解析失败: `)}${e.message||e}`);return}try{R.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){V.error(`${Q(`@42BB9:保存失败: `)}${t.error||Q(`@42BB9:未知错误`)}`);return}await a.loadConfig(),V.success(Q(`@42BB9:配置已保存`)),_.value=!1}catch(e){V.error(`${Q(`@42BB9:保存配置失败: `)}${e.message||e}`)}finally{R.value=!1}}async function rt(){try{let e=await(await fetch(`/api/config/open-file`,{method:`POST`})).json();e.success?V.success(Q(`@42BB9:已用系统程序打开配置文件`)):V.error(e.error||Q(`@42BB9:打开文件失败`))}catch(e){V.error(`${Q(`@42BB9:打开文件失败: `)}${e.message||e}`)}}let it={gitStore:r,localeStore:i,configStore:a,toolsStore:o,HEADER_TOOL_IDS:s,HEADER_TOOL_ICONS:c,headerToolOptions:l,isHeaderToolVisible:u,toggleHeaderTool:d,markdownThemeOptions:f,onMarkdownThemeChange:p,props:h,emit:g,visible:_,isLoading:v,activeTab:y,tempTheme:b,tempLocale:x,tempTaskExecutor:S,selectedExecutorModelText:C,selectedExecutorModelDetail:w,selectedExecutorModelLineTitle:T,optionExecutorModelTitle:ee,tempNotifyOnTaskDone:E,tempNotifySoundOnTaskDone:D,notifyPermissionState:O,tempEditorAutoSave:te,tempFileTreeAutoRefresh:ne,aiModels:k,editingModelId:A,aiMaxToolIterationsInput:j,savingAiSettings:M,handleAiMaxToolIterationsChange:N,currentThemeForForm:re,currentProjectName:P,handleAiDiffSummaryEnabledChange:ie,editingModelInitial:ae,hasChanges:oe,startAddModel:se,startEditModel:ce,cancelEditModel:le,handleAddModelSave:I,handleDeleteModel:ue,handleSetDefaultModel:de,tempUserName:L,tempUserEmail:pe,configEditorText:me,configEditorSaving:R,cfgAutoSetupRemote:he,cfgPullRebase:ge,cfgFetchPrune:_e,cfgCoreAutoCrlf:ve,cfgInitDefaultBranch:z,get initUserName(){return ye},set initUserName(e){ye=e},get initUserEmail(){return B},set initUserEmail(e){B=e},get initAutoSetupRemote(){return be},set initAutoSetupRemote(e){be=e},get initPullRebase(){return xe},set initPullRebase(e){xe=e},get initFetchPrune(){return H},set initFetchPrune(e){H=e},get initCoreAutoCrlf(){return W},set initCoreAutoCrlf(e){W=e},get initInitDefaultBranch(){return Se},set initInitDefaultBranch(e){Se=e},get initTheme(){return G},set initTheme(e){G=e},get initLocale(){return Ce},set initLocale(e){Ce=e},get initTaskExecutor(){return we},set initTaskExecutor(e){we=e},get initNotifyOnTaskDone(){return K},set initNotifyOnTaskDone(e){K=e},get initNotifySoundOnTaskDone(){return q},set initNotifySoundOnTaskDone(e){q=e},mdThemeSample:Te,mdThemeHovered:Ee,mdThemeDropdownOpen:De,mdThemePreviewName:Oe,mdThemePreviewRef:ke,get mdThemePreview(){return Ae},set mdThemePreview(e){Ae=e},get mdThemePreviewApplied(){return je},set mdThemePreviewApplied(e){je=e},ensureMdThemePreview:Me,syncMdThemePreview:Ne,destroyMdThemePreview:Pe,onMarkdownThemeHover:Fe,onMarkdownThemeDropdownVisible:J,handleVisibleChange:Ie,getGlobalConfig:Le,setGlobalConfig:Y,loadGlobalGitConfigs:Re,saveGlobalGitConfigs:ze,saveGeneralSettings:Be,onNotifyToggleChange:Ve,explorerMenuSupported:He,explorerMenuInstalled:Ue,explorerMenuBusy:Ge,explorerMenuHint:Ke,loadExplorerMenuStatus:X,onToggleExplorerMenu:qe,onResetUiLayout:Je,handleSave:Xe,onClickConfigTab:Ze,memoryPanelRef:Qe,get memoryTabLoaded(){return $e},set memoryTabLoaded(e){$e=e},onClickMemoryTab:et,saveConfigJson:tt,openSystemConfigFile:rt,get $t(){return Q},get Check(){return nt},get InfoFilled(){return m},CommonDialog:Kt,get TASK_EXECUTOR_OPTIONS(){return Pt},TaskExecutorIcon:Gl,MemoryPanel:Eu,SvgIcon:jt,get AddModelForm(){return yt}};return Object.defineProperty(it,"__isScriptSetup",{enumerable:!1,value:!0}),it}});c(),v(),K();var Ou=[`element-loading-text`],ku={class:`settings-tabs`},Au={class:`settings-panels`},ju={class:`settings-panel`},Mu={class:`info-section`},Nu={class:`info-card`},Pu={class:`info-content`},Fu={class:`info-title`},Iu={class:`info-desc`},Lu={class:`settings-section`},Ru={class:`section-title`},zu={class:`settings-grid`},Bu={class:`setting-row`},Vu={class:`setting-label`},Hu={class:`settings-section`},Uu={class:`section-title`},Wu={class:`settings-grid`},Gu={class:`setting-row`},Ku={class:`setting-label`},qu={class:`settings-section`},Ju={class:`section-title`},Yu={class:`settings-grid`},Xu={class:`setting-row`},Zu={class:`setting-label`},Qu={class:`project-toggle`},$u={class:`executor-option`},ed=[`title`],td={key:1,class:`executor-option__missing`},nd={class:`setting-hint-block`},rd=[`title`],id={key:0,class:`executor-model-line__detail`},ad={class:`setting-row`},od={class:`setting-label`},sd={class:`project-toggle`},cd={class:`setting-hint-block notify-hint`},ld={key:0,class:`setting-hint-block notify-hint notify-hint--warn`},ud={key:1,class:`setting-hint-block notify-hint notify-hint--warn`},dd={class:`notify-sub`},fd={class:`notify-sub__head`},pd={class:`notify-sub__label`},md={class:`setting-hint-block notify-hint notify-sub__hint`},hd={class:`settings-section`},gd={class:`section-title`},_d={class:`settings-grid`},vd={class:`setting-row`},yd={class:`setting-label`},bd={class:`setting-row`},xd={class:`setting-label`},Sd={class:`setting-hint-inline`},Cd={class:`setting-row`},wd={class:`setting-label`},Td={class:`project-toggle`},Ed=[`title`],Dd={class:`setting-row setting-row--full setting-row--span`},Od={class:`setting-label`},kd={class:`md-theme-panel`},Ad={class:`md-theme-col`},jd={class:`md-theme-option`},Md={class:`setting-hint-block`},Nd={class:`setting-hint-block`},Pd={class:`md-theme-preview`},Fd={class:`md-theme-preview__head`},Id={class:`md-theme-preview__name`},Ld={ref:`mdThemePreviewRef`,class:`md-theme-preview__body`},Rd={class:`setting-row setting-row--full setting-row--span`},zd={class:`setting-label`},Bd={class:`console-sub-options`},Vd={class:`console-split-row`},Hd={class:`setting-hint-block`},Ud={class:`setting-row`},Wd={class:`setting-label`},Gd={class:`layout-actions`},Kd={class:`setting-hint-block`},qd={class:`settings-section`},Jd={class:`section-title`},Yd={class:`header-tools-row`},Xd={class:`header-tools`},Zd={class:`header-tool__icon`},Qd={class:`header-tool__name`},$d={class:`setting-hint-block`},ef={class:`settings-section`},tf={class:`section-title`},nf={class:`settings-grid`},rf={class:`setting-row setting-row--span`},af={class:`setting-label`},of={class:`layout-actions`},sf={class:`setting-hint-block`},cf={class:`settings-panel`},lf={class:`info-section`},uf={class:`info-card`},df={class:`info-content`},ff={class:`info-title`},pf={class:`info-desc`},mf={class:`settings-section`},hf={class:`section-title model-section-title`},gf={class:`model-list`},_f={key:0,class:`model-empty`},vf={class:`model-info`},yf={class:`model-name-row`},bf={class:`model-name`},xf={key:0,class:`model-default-badge`},Sf={class:`model-meta`},Cf={class:`model-actions`},wf=[`onClick`],Tf=[`onClick`],Ef=[`onClick`],Df={key:0,class:`ai-model-form-wrapper`},Of={class:`settings-section`},kf={class:`section-title model-section-title`},Af={class:`setting-row`},jf={class:`setting-label`},Mf={class:`project-toggle`},Nf={class:`setting-hint-block ai-iterations-hint`},Pf={class:`settings-panel`},Ff={class:`info-section`},If={class:`info-card`},Lf={class:`info-content`},Rf={class:`info-title`},zf={class:`info-desc`},Bf={class:`basic-info-section`},Vf={class:`basic-info-grid`},Hf={class:`settings-section`},Uf={class:`section-title`},Wf={class:`settings-grid`},Gf={class:`setting-row`},Kf={class:`setting-label`},qf={class:`setting-row`},Jf={class:`setting-label`},Yf={class:`setting-row`},Xf={class:`setting-label`},Zf={class:`setting-row`},Qf={class:`setting-label`},$f={class:`setting-row`},ep={class:`setting-label`},tp={class:`settings-panel`},np={class:`info-section`},rp={class:`info-card`},ip={class:`info-content`},ap={class:`info-title`},op={class:`info-desc`},sp={class:`settings-section`},cp={class:`section-title`},lp={class:`settings-grid commit-settings-grid`},up={class:`setting-row`},dp={class:`setting-label`},fp={class:`setting-row`},pp={class:`setting-label`},mp={class:`setting-row`},hp={class:`setting-label`},gp={class:`setting-row`},_p={class:`setting-label`},vp={class:`setting-row`},yp={class:`setting-label`},bp={class:`setting-row`},xp={class:`setting-label`},Sp={class:`settings-panel config-panel`},Cp={class:`info-section`},wp={class:`info-card`},Tp={class:`info-content`},Ep={class:`info-title`},Dp={class:`info-desc`},Op={class:`config-json-editor-wrap`},kp={class:`config-panel-actions`},Ap={class:`settings-panel`},jp={class:`info-section`},Mp={class:`info-card`},Np={class:`info-content`},Pp={class:`info-title`},Fp={class:`info-desc`},Ip={class:`settings-section`},Lp={class:`section-title`},Rp={class:`settings-grid`},zp={class:`setting-row`},Bp={class:`setting-label`},Vp={key:0,class:`setting-row setting-row--hint`},Hp={class:`setting-hint`},Up={class:`settings-section`},Wp={class:`section-title`},Gp={class:`settings-grid`},Kp={class:`setting-row`},qp={class:`setting-label`},Jp={key:0,class:`setting-row setting-row--hint`},Yp={class:`setting-hint`},Xp={class:`settings-panel`},Zp={class:`info-section`},Qp={class:`info-card`},$p={class:`info-content`},em={class:`info-title`},tm={class:`info-desc`},nm={class:`user-settings-footer`},rm={class:`footer-actions`},im=[`disabled`],am=[`disabled`];function om(e,t,n,i,a,o){let s=g,c=w,l=Ae,u=Ne,d=A,f=Oe,m=pt,_=ut,v=I,y=ne,x=E,S=L,C=b,T=He;return z(),p(i.CommonDialog,{modelValue:i.visible,"onUpdate:modelValue":[t[34]||=e=>i.visible=e,i.handleVisibleChange],title:i.$t(`@42BB9:设置`),size:`large`,"destroy-on-close":!0,"custom-class":`user-settings-dialog`},Pe({default:G(()=>[Y((z(),J(`div`,{class:`user-settings-content`,"element-loading-text":i.$t(`@42BB9:正在加载配置...`),"element-loading-background":`rgba(0, 0, 0, 0.15)`},[N(` 左侧标签页切换 `),h(`div`,ku,[h(`div`,{class:O([`tab-item`,{active:i.activeTab===`general`}]),onClick:t[0]||=e=>i.activeTab=`general`},[h(`span`,null,q(i.$t(`@42BB9:通用设置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`ai-models`}]),onClick:t[1]||=e=>i.activeTab=`ai-models`},[h(`span`,null,q(i.$t(`@42BB9:AI 模型配置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`git`}]),onClick:t[2]||=e=>i.activeTab=`git`},[h(`span`,null,q(i.$t(`@42BB9:Git 全局设置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`commit`}]),onClick:t[3]||=e=>i.activeTab=`commit`},[h(`span`,null,q(i.$t(`@42BB9:提交设置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`config`}]),onClick:i.onClickConfigTab},[h(`span`,null,q(i.$t(`@42BB9:编辑配置`)),1)],2),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`editor`}]),onClick:t[4]||=e=>i.activeTab=`editor`},[h(`span`,null,q(i.$t(`@42BB9:编辑器设置`)),1)],2),N(` 记忆库:懒加载 —— 点进来才拉,否则打开设置弹窗就多一次无用请求。
89
+ 与「编辑配置」tab 同一套约定(见 onClickConfigTab)。 `),h(`div`,{class:O([`tab-item`,{active:i.activeTab===`memory`}]),onClick:i.onClickMemoryTab},[h(`span`,null,q(i.$t(`@42BB9:记忆库`)),1)],2)]),N(` 右侧内容区域 `),h(`div`,Au,[N(` 通用设置面板 `),Y(h(`div`,ju,[h(`div`,Mu,[h(`div`,Nu,[h(`div`,Pu,[h(`p`,Fu,q(i.$t(`@42BB9:通用配置`)),1),h(`p`,Iu,q(i.$t(`@42BB9:自定义应用的外观和语言`)),1)])])]),h(`div`,Lu,[h(`div`,Ru,[h(`span`,null,q(i.$t(`@42BB9:外观`)),1)]),h(`div`,zu,[h(`div`,Bu,[h(`label`,Vu,q(i.$t(`@42BB9:主题`)),1),P(c,{modelValue:i.tempTheme,"onUpdate:modelValue":t[5]||=e=>i.tempTheme=e,class:`modern-input`,size:`default`},{default:G(()=>[P(s,{label:i.$t(`@42BB9:浅色`),value:`light`},null,8,[`label`]),P(s,{label:i.$t(`@42BB9:深色`),value:`dark`},null,8,[`label`]),P(s,{label:i.$t(`@42BB9:跟随系统`),value:`auto`},null,8,[`label`])]),_:1},8,[`modelValue`])])])]),h(`div`,Hu,[h(`div`,Uu,[h(`span`,null,q(i.$t(`@42BB9:语言`)),1)]),h(`div`,Wu,[h(`div`,Gu,[h(`label`,Ku,q(i.$t(`@42BB9:界面语言`)),1),P(c,{modelValue:i.tempLocale,"onUpdate:modelValue":t[6]||=e=>i.tempLocale=e,class:`modern-input`,size:`default`},{default:G(()=>[P(s,{label:`简体中文`,value:`zh-CN`}),P(s,{label:`English`,value:`en-US`})]),_:1},8,[`modelValue`])])])]),N(` 任务执行:工作台任务默认用哪个本地 CLI 执行 `),h(`div`,qu,[h(`div`,Ju,[h(`span`,null,q(i.$t(`@42BB9:任务执行`)),1)]),h(`div`,Yu,[h(`div`,Xu,[h(`label`,Zu,q(i.$t(`@42BB9:任务执行器`)),1),h(`div`,Qu,[N(` fit-input-width=false:下拉宽度跟着**内容**走。默认跟输入框等宽,
90
+ 而这个选项里要同时放「产品名 + 模型名」,等宽会把模型名截成
91
+ \`opencode-go/space-bunny-…\`(实测),等于白显示 `),P(c,{modelValue:i.tempTaskExecutor,"onUpdate:modelValue":t[7]||=e=>i.tempTaskExecutor=e,class:`modern-input`,size:`default`,"fit-input-width":!1},{default:G(()=>[(z(!0),J(Z,null,r(i.TASK_EXECUTOR_OPTIONS,e=>(z(),p(s,{key:e.id,label:e.name,value:e.id,disabled:!i.toolsStore.isToolAvailable(e.id)},{default:G(()=>[h(`span`,$u,[P(i.TaskExecutorIcon,{executor:e.id,class:`executor-option__icon`},null,8,[`executor`]),M(` `+q(e.name)+` `,1),i.toolsStore.executorModelText(e.id)?(z(),J(`span`,{key:0,class:`executor-option__model`,title:i.optionExecutorModelTitle(e.id)},q(i.toolsStore.executorModelText(e.id)),9,ed)):N(`v-if`,!0),i.toolsStore.isToolAvailable(e.id)?N(`v-if`,!0):(z(),J(`span`,td,q(i.$t(`@42BB9:未安装`)),1))])]),_:2},1032,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`]),h(`span`,nd,q(i.$t(`@42BB9:工作台执行任务时使用的本地 CLI;模型跟随各自 CLI 的自身配置`)),1),N(` 当前模型:把"模型跟随各自 CLI 的自身配置"这句话落到实处 `),i.selectedExecutorModelText?(z(),J(`span`,{key:0,class:`setting-hint-block executor-model-line`,title:i.$t(`@42BB9:当前模型:{model}`,{model:i.selectedExecutorModelLineTitle})},[M(q(i.$t(`@42BB9:当前模型:{model}`,{model:i.selectedExecutorModelText}))+` `,1),i.selectedExecutorModelDetail?(z(),J(`span`,id,`(`+q(i.selectedExecutorModelDetail)+`)`,1)):N(`v-if`,!0)],8,rd)):N(`v-if`,!0)])]),N(` 任务 / 对话执行结束提示:跑完一个任务或一轮对话时给个动静(页面在后台发系统通知) `),h(`div`,ad,[h(`label`,od,q(i.$t(`@42BB9:任务与对话完成提示`)),1),h(`div`,sd,[P(l,{modelValue:i.tempNotifyOnTaskDone,"onUpdate:modelValue":t[8]||=e=>i.tempNotifyOnTaskDone=e,onChange:i.onNotifyToggleChange},null,8,[`modelValue`]),h(`span`,cd,q(i.$t(`@42BB9:任务或对话结束时提醒我:页面在后台发系统通知,在前台弹应用内提示`)),1),i.notifyPermissionState===`denied`?(z(),J(`span`,ld,q(i.$t(`@42BB9:浏览器已拒绝通知权限,只能在页面内提示(可在浏览器地址栏的站点设置里恢复)`)),1)):i.notifyPermissionState===`unsupported`?(z(),J(`span`,ud,q(i.$t(`@42BB9:当前环境不支持系统通知,只能在页面内提示`)),1)):N(`v-if`,!0),N(` 提示音:总开关的子选项。缩进 + 左侧竖线表达从属关系,总开关关掉时置灰 `),h(`div`,dd,[h(`div`,fd,[P(l,{modelValue:i.tempNotifySoundOnTaskDone,"onUpdate:modelValue":t[9]||=e=>i.tempNotifySoundOnTaskDone=e,size:`small`,disabled:!i.tempNotifyOnTaskDone},null,8,[`modelValue`,`disabled`]),h(`span`,pd,q(i.$t(`@42BB9:提示音`)),1)]),h(`span`,md,q(i.$t(`@42BB9:任务或对话跑完、出错各响一声(主动停止不响);上面的总开关关着时也不会有声音`)),1)])])])])]),N(` 界面(视图模式 / 分割比例 / 控制台 / 布局比例) `),h(`div`,hd,[h(`div`,gd,[h(`span`,null,q(i.$t(`@42BB9:界面`)),1)]),h(`div`,_d,[N(` 文件列表视图模式 `),h(`div`,vd,[h(`label`,yd,q(i.$t(`@42BB9:文件列表视图`)),1),P(d,{modelValue:i.configStore.ui.fileListViewMode,"onUpdate:modelValue":t[10]||=e=>i.configStore.ui.fileListViewMode=e,size:`default`},{default:G(()=>[P(u,{value:`list`},{default:G(()=>[M(q(i.$t(`@42BB9:列表`)),1)]),_:1}),P(u,{value:`tree`},{default:G(()=>[M(q(i.$t(`@42BB9:树状`)),1)]),_:1})]),_:1},8,[`modelValue`])]),N(` 文件差异分割比例 `),h(`div`,bd,[h(`label`,xd,[M(q(i.$t(`@42BB9:文件差异分割`))+` `,1),h(`span`,Sd,q(i.configStore.ui.fileDiffSplitPercent)+`%`,1)]),P(f,{modelValue:i.configStore.ui.fileDiffSplitPercent,"onUpdate:modelValue":t[11]||=e=>i.configStore.ui.fileDiffSplitPercent=e,min:15,max:85,step:1,class:`setting-slider`},null,8,[`modelValue`])]),h(`div`,Cd,[h(`label`,wd,q(i.$t(`@42BB9:AI 差异说明`)),1),h(`div`,Td,[P(l,{"model-value":i.configStore.aiDiffSummaryEnabled,disabled:!i.configStore.currentDirectory,onChange:i.handleAiDiffSummaryEnabledChange},null,8,[`model-value`,`disabled`]),h(`span`,{class:`setting-hint-block`,title:i.configStore.currentDirectory},[M(q(i.$t(`@42BB9:在当前项目的文件差异和提交详情中显示 AI 生成的说明`))+` `,1),i.currentProjectName?(z(),J(Z,{key:0},[M(` · `+q(i.currentProjectName),1)],64)):N(`v-if`,!0)],8,Ed)])]),N(` Markdown 预览主题(全局唯一):文件预览 / 差异预览 / AI 说明共用同一套配色。
92
+ 光看下拉里的名字看不出主题长什么样,所以右侧常驻一块实时预览:
93
+ 默认渲染当前生效的那套,鼠标悬停下拉项时临时切到那一套(只预览,不改配置)。 `),h(`div`,Dd,[h(`label`,Od,q(i.$t(`@42BB9:Markdown 预览主题`)),1),h(`div`,kd,[h(`div`,Ad,[P(c,{"model-value":i.configStore.markdownTheme,class:`modern-input md-theme-select`,size:`default`,filterable:``,"onUpdate:modelValue":i.onMarkdownThemeChange,onVisibleChange:i.onMarkdownThemeDropdownVisible},{default:G(()=>[(z(!0),J(Z,null,r(i.markdownThemeOptions,e=>(z(),p(s,{key:e.value,label:e.value,value:e.value,onMouseenter:t=>i.onMarkdownThemeHover(e.value)},{default:G(()=>[h(`span`,jd,[h(`span`,{class:`md-theme-swatch`,style:R({background:e.bg||`transparent`,color:e.fg||`inherit`})},`Aa`,4),h(`span`,null,q(e.value),1)])]),_:2},1032,[`label`,`value`,`onMouseenter`]))),128))]),_:1},8,[`model-value`]),h(`span`,Md,q(i.$t(`@42BB9:整个应用只用一个主题,同时作用于文件预览、差异预览与 AI 说明`)),1),h(`span`,Nd,q(i.$t(`@42BB9:鼠标移到下拉项上可即时预览,点击即应用`)),1)]),h(`div`,Pd,[h(`div`,Fd,[h(`span`,null,q(i.$t(`@42BB9:效果预览`)),1),h(`span`,Id,q(i.mdThemePreviewName),1),h(`span`,{class:O([`md-theme-preview__tag`,{"is-hover":!!i.mdThemeHovered}])},q(i.mdThemeHovered?i.$t(`@42BB9:悬停预览,未应用`):i.$t(`@42BB9:当前生效`)),3)]),h(`div`,Ld,null,512)])])]),N(` 命令控制台(跨整行的复合控件):4 个开关 + 比例滑条,
94
+ 只在半格里会把 el-switch 的 active-text 压成竖排单字(实测),
95
+ 所以整行跨两列 + 内部两列网格。 `),h(`div`,Rd,[h(`label`,zd,q(i.$t(`@42BB9:命令控制台`)),1),h(`div`,Bd,[P(l,{modelValue:i.configStore.ui.commandConsole.expanded,"onUpdate:modelValue":t[12]||=e=>i.configStore.ui.commandConsole.expanded=e,"active-text":i.$t(`@42BB9:默认展开`)},null,8,[`modelValue`,`active-text`]),P(l,{modelValue:i.configStore.ui.commandConsole.useTerminal,"onUpdate:modelValue":t[13]||=e=>i.configStore.ui.commandConsole.useTerminal=e,"active-text":i.$t(`@42BB9:使用终端执行`)},null,8,[`modelValue`,`active-text`]),P(l,{modelValue:i.configStore.ui.commandConsole.showTerminalSessions,"onUpdate:modelValue":t[14]||=e=>i.configStore.ui.commandConsole.showTerminalSessions=e,"active-text":i.$t(`@42BB9:显示终端会话`)},null,8,[`modelValue`,`active-text`]),h(`div`,Vd,[h(`span`,Hd,q(i.$t(`@42BB9:控制台高度比例`))+`: `+q(i.configStore.ui.commandConsole.splitPercent)+`% `,1),P(f,{modelValue:i.configStore.ui.commandConsole.splitPercent,"onUpdate:modelValue":t[15]||=e=>i.configStore.ui.commandConsole.splitPercent=e,min:15,max:85,step:1,class:`setting-slider`},null,8,[`modelValue`])])])]),N(` 布局比例重置 `),h(`div`,Ud,[h(`label`,Wd,q(i.$t(`@42BB9:布局比例`)),1),h(`div`,Gd,[P(m,{onClick:i.onResetUiLayout,size:`default`},{default:G(()=>[M(q(i.$t(`@42BB9:重置为默认布局`)),1)]),_:1}),h(`span`,Kd,q(i.$t(`@42BB9:恢复默认的左/中/右/上面板比例`)),1)])])])]),N(` 顶栏工具图标:勾选的固定在顶栏,取消勾选的收进右侧「更多」菜单 `),h(`div`,qd,[h(`div`,Jd,[h(`span`,null,q(i.$t(`@42BB9:顶部工具栏`)),1)]),N(` 不套 setting-row:这里是一整格工具开关网格(两列),塞进 160px 标签列会被挤成竖排 `),h(`div`,Yd,[h(`div`,Xd,[(z(!0),J(Z,null,r(i.headerToolOptions,e=>(z(),J(`div`,{key:e.id,class:O([`header-tool`,{"is-off":!i.isHeaderToolVisible(e.id)}])},[h(`span`,Zd,[P(i.SvgIcon,{"icon-class":e.icon},null,8,[`icon-class`])]),h(`span`,Qd,q(e.name),1),P(l,{class:`header-tool__switch`,"model-value":i.isHeaderToolVisible(e.id),onChange:t=>i.toggleHeaderTool(e.id,!!t)},null,8,[`model-value`,`onChange`])],2))),128))]),h(`span`,$d,q(i.$t(`@42BB9:勾选后固定在顶栏显示,取消勾选的工具会收进右侧「更多」菜单`)),1)])]),N(` 系统集成:把 g ui 注册进 Windows 资源管理器右键菜单(写 HKCU,不需要管理员权限) `),h(`div`,ef,[h(`div`,tf,[h(`span`,null,q(i.$t(`@42BB9:系统集成`)),1)]),h(`div`,nf,[N(` 说明文案较长,整行铺开:半宽单元格里会被挤成好几行 `),h(`div`,rf,[h(`label`,af,q(i.$t(`@42BB9:资源管理器右键菜单`)),1),h(`div`,of,[P(m,{size:`default`,loading:i.explorerMenuBusy,disabled:!i.explorerMenuSupported,onClick:i.onToggleExplorerMenu},{default:G(()=>[M(q(i.explorerMenuInstalled?i.$t(`@42BB9:从右键菜单移除`):i.$t(`@42BB9:添加到右键菜单`)),1)]),_:1},8,[`loading`,`disabled`]),h(`span`,sf,q(i.explorerMenuHint),1)])])])])],512),[[at,i.activeTab===`general`]]),N(` AI 模型配置面板 `),Y(h(`div`,cf,[h(`div`,lf,[h(`div`,uf,[h(`div`,df,[h(`p`,ff,q(i.$t(`@42BB9:AI 模型配置`)),1),h(`p`,pf,q(i.$t(`@42BB9:管理 AI 模型的 API 端点、凭据与默认模型`)),1)])])]),h(`div`,mf,[h(`div`,hf,[h(`span`,null,q(i.$t(`@42BB9:已配置模型`)),1),h(`button`,{class:`add-model-btn`,onClick:i.startAddModel},`+ `+q(i.$t(`@42BB9:添加模型`)),1)]),h(`div`,gf,[i.aiModels.length===0?(z(),J(`div`,_f,q(i.$t(`@42BB9:暂未配置模型`)),1)):N(`v-if`,!0),(z(!0),J(Z,null,r(i.aiModels,e=>(z(),J(`div`,{key:e.id,class:`model-card`},[h(`div`,vf,[h(`div`,yf,[h(`span`,bf,q(e.name),1),e.isDefault?(z(),J(`span`,xf,q(i.$t(`@42BB9:默认`)),1)):N(`v-if`,!0)]),h(`div`,Sf,q(e.model)+` · `+q(e.baseURL),1)]),h(`div`,Cf,[e.isDefault?N(`v-if`,!0):(z(),J(`button`,{key:0,class:`model-btn`,onClick:t=>i.handleSetDefaultModel(e.id)},q(i.$t(`@42BB9:设为默认`)),9,wf)),h(`button`,{class:`model-btn`,onClick:t=>i.startEditModel(e)},q(i.$t(`@42BB9:编辑`)),9,Tf),h(`button`,{class:`model-btn model-btn--danger`,onClick:t=>i.handleDeleteModel(e.id)},q(i.$t(`@42BB9:删除`)),9,Ef)])]))),128))]),N(` 新增 / 编辑表单:使用 ai-model-form 组件 `),i.editingModelId===void 0?N(`v-if`,!0):(z(),J(`div`,Df,[(z(),p(i.AddModelForm,{key:i.editingModelId??`__new__`,"api-base":`/api/ai-model`,initial:i.editingModelInitial,theme:i.currentThemeForForm,locale:i.localeStore.currentLocale,onSave:i.handleAddModelSave,onCancel:i.cancelEditModel},null,8,[`initial`,`theme`,`locale`]))]))]),N(" 智能体运行时(全局设置,CLI `g ai` 与 Web 智能体共用) "),h(`div`,Of,[h(`div`,kf,[h(`span`,null,q(i.$t(`@42BB9:智能体运行时`)),1)]),h(`div`,Af,[h(`label`,jf,q(i.$t(`@42BB9:单轮最大工具调用次数`)),1),h(`div`,Mf,[P(_,{modelValue:i.aiMaxToolIterationsInput,"onUpdate:modelValue":t[16]||=e=>i.aiMaxToolIterationsInput=e,min:1,max:1e4,step:10,disabled:i.savingAiSettings,class:`ai-iterations-input`,onChange:i.handleAiMaxToolIterationsChange},null,8,[`modelValue`,`disabled`]),h(`span`,Nf,q(i.$t(`@42BB9:一条消息内智能体最多连续调用多少次工具。达到上限本轮会被强制结束,需要再发一条消息才能继续`)),1)])])])],512),[[at,i.activeTab===`ai-models`]]),N(` Git 全局设置面板 `),Y(h(`div`,Pf,[h(`div`,Ff,[h(`div`,If,[h(`div`,Lf,[h(`p`,Rf,q(i.$t(`@42BB9:全局配置`)),1),h(`p`,zf,q(i.$t(`@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效`)),1)])])]),P(C,{class:`user-form`,"label-width":`auto`,model:{tempUserName:i.tempUserName,tempUserEmail:i.tempUserEmail}},{default:G(()=>[h(`div`,Bf,[h(`div`,Vf,[P(y,{class:`form-item`,label:i.$t(`@42BB9:用户名`)},{default:G(()=>[P(v,{modelValue:i.tempUserName,"onUpdate:modelValue":t[17]||=e=>i.tempUserName=e,placeholder:i.$t(`@42BB9:请输入 Git 用户名`),class:`modern-input`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),P(y,{class:`form-item`,label:i.$t(`@42BB9:邮箱地址`)},{default:G(()=>[P(v,{modelValue:i.tempUserEmail,"onUpdate:modelValue":t[18]||=e=>i.tempUserEmail=e,placeholder:i.$t(`@42BB9:请输入 Git 邮箱地址`),class:`modern-input`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])]),N(` 高级设置:常用全局 Git 配置 `),h(`div`,Hf,[h(`div`,Uf,[h(`span`,null,q(i.$t(`@42BB9:高级配置`)),1)]),h(`div`,Wf,[h(`div`,Gf,[h(`label`,Kf,[M(q(i.$t(`@42BB9:自动设置上游`))+` `,1),P(S,{content:i.$t(`@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.cfgAutoSetupRemote,"onUpdate:modelValue":t[19]||=e=>i.cfgAutoSetupRemote=e},null,8,[`modelValue`])]),h(`div`,qf,[h(`label`,Jf,q(i.$t(`@42BB9:拉取策略`)),1),P(c,{modelValue:i.cfgPullRebase,"onUpdate:modelValue":t[20]||=e=>i.cfgPullRebase=e,class:`modern-input`,size:`default`},{default:G(()=>[P(s,{label:i.$t(`@42BB9:merge (默认)`),value:`false`},null,8,[`label`]),P(s,{label:`rebase`,value:`true`}),P(s,{label:i.$t(`@42BB9:rebase(保留合并)`),value:`merges`},null,8,[`label`])]),_:1},8,[`modelValue`])]),h(`div`,Yf,[h(`label`,Xf,[M(q(i.$t(`@42BB9:自动清理远程分支`))+` `,1),P(S,{content:i.$t(`@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.cfgFetchPrune,"onUpdate:modelValue":t[21]||=e=>i.cfgFetchPrune=e},null,8,[`modelValue`])]),h(`div`,Zf,[h(`label`,Qf,q(i.$t(`@42BB9:换行符处理`)),1),P(c,{modelValue:i.cfgCoreAutoCrlf,"onUpdate:modelValue":t[22]||=e=>i.cfgCoreAutoCrlf=e,class:`modern-input`,size:`default`},{default:G(()=>[P(s,{label:`true (Windows)`,value:`true`}),P(s,{label:`input`,value:`input`}),P(s,{label:`false`,value:`false`})]),_:1},8,[`modelValue`])]),h(`div`,$f,[h(`label`,ep,[M(q(i.$t(`@42BB9:默认初始化分支`))+` `,1),P(S,{content:i.$t(`@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(v,{modelValue:i.cfgInitDefaultBranch,"onUpdate:modelValue":t[23]||=e=>i.cfgInitDefaultBranch=e,placeholder:i.$t(`@42BB9:例如: main`),class:`modern-input`,size:`default`},null,8,[`modelValue`,`placeholder`])])])])]),_:1},8,[`model`])],512),[[at,i.activeTab===`git`]]),N(` 提交设置面板 `),Y(h(`div`,tp,[h(`div`,np,[h(`div`,rp,[h(`div`,ip,[h(`p`,ap,q(i.$t(`@76872:提交设置`)),1),h(`p`,op,q(i.$t(`@76872:这些设置实时生效`)),1)])])]),h(`div`,sp,[h(`div`,cp,[h(`span`,null,q(i.$t(`@76872:提交格式与行为`)),1)]),h(`div`,lp,[h(`div`,up,[h(`label`,dp,q(i.$t(`@76872:标准化提交`)),1),P(l,{modelValue:i.configStore.isStandardCommit,"onUpdate:modelValue":t[24]||=e=>i.configStore.isStandardCommit=e},null,8,[`modelValue`])]),h(`div`,fp,[h(`label`,pp,[M(q(i.$t(`@76872:跳过钩子检查`))+` `,1),P(S,{content:i.$t(`@76872:添加 --no-verify 参数`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.skipHooks,"onUpdate:modelValue":t[25]||=e=>i.configStore.skipHooks=e},null,8,[`modelValue`])]),h(`div`,mp,[h(`label`,hp,[M(q(i.$t(`@76872:回车自动提交`))+` `,1),P(S,{content:i.$t(`@76872:输入提交信息后按回车直接执行一键推送`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.autoQuickPushOnEnter,"onUpdate:modelValue":t[26]||=e=>i.configStore.autoQuickPushOnEnter=e},null,8,[`modelValue`])]),h(`div`,gp,[h(`label`,_p,[M(q(i.$t(`@76872:Push完成自动关闭`))+` `,1),P(S,{content:i.$t(`@76872:推送成功后自动关闭进度弹窗`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.autoClosePushModal,"onUpdate:modelValue":t[27]||=e=>i.configStore.autoClosePushModal=e},null,8,[`modelValue`])]),h(`div`,vp,[h(`label`,yp,[M(q(i.$t(`@76872:推送前拉取更新`))+` `,1),P(S,{content:i.$t(`@76872:推送前自动拉取远程更新,有冲突则停止推送`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.pullBeforePush,"onUpdate:modelValue":t[28]||=e=>i.configStore.pullBeforePush=e},null,8,[`modelValue`])]),h(`div`,bp,[h(`label`,xp,[M(q(i.$t(`@76872:自动填充默认提交信息`))+` `,1),P(S,{content:i.$t(`@76872:打开页面或提交完成后自动填充默认提交信息`),placement:`top`,"show-after":200},{default:G(()=>[P(x,{class:`qmark`},{default:G(()=>[P(i.InfoFilled)]),_:1})]),_:1},8,[`content`])]),P(l,{modelValue:i.configStore.autoSetDefaultMessage,"onUpdate:modelValue":t[29]||=e=>i.configStore.autoSetDefaultMessage=e},null,8,[`modelValue`])])])])],512),[[at,i.activeTab===`commit`]]),N(` 编辑配置 JSON 面板 `),Y(h(`div`,Sp,[h(`div`,Cp,[h(`div`,wp,[h(`div`,Tp,[h(`p`,Ep,q(i.$t(`@42BB9:编辑当前项目的配置文件`)),1),h(`p`,Dp,q(i.$t(`@42BB9:直接编辑 JSON,支持所有配置项`)),1)])])]),h(`div`,Op,[P(v,{modelValue:i.configEditorText,"onUpdate:modelValue":t[30]||=e=>i.configEditorText=e,type:`textarea`,spellcheck:`false`,autocomplete:`off`,placeholder:i.$t(`@42BB9:加载中...`),class:`config-json-editor`},null,8,[`modelValue`,`placeholder`])]),h(`div`,kp,[h(`button`,{type:`button`,class:`dialog-cancel-btn system-config-btn`,onClick:i.openSystemConfigFile},q(i.$t(`@42BB9:打开系统配置文件`)),1)])],512),[[at,i.activeTab===`config`]]),N(` 编辑器设置面板 `),Y(h(`div`,Ap,[h(`div`,jp,[h(`div`,Mp,[h(`div`,Np,[h(`p`,Pp,q(i.$t(`@42BB9:编辑器设置`)),1),h(`p`,Fp,q(i.$t(`@42BB9:自定义编辑器行为`)),1)])])]),h(`div`,Ip,[h(`div`,Lp,[h(`span`,null,q(i.$t(`@42BB9:文件编辑`)),1)]),h(`div`,Rp,[h(`div`,zp,[h(`label`,Bp,q(i.$t(`@42BB9:自动保存`)),1),P(l,{modelValue:i.tempEditorAutoSave,"onUpdate:modelValue":t[31]||=e=>i.tempEditorAutoSave=e},null,8,[`modelValue`])]),i.tempEditorAutoSave?(z(),J(`div`,Vp,[h(`span`,Hp,q(i.$t(`@42BB9:失去焦点时自动保存当前文件`)),1)])):N(`v-if`,!0)])]),h(`div`,Up,[h(`div`,Wp,[h(`span`,null,q(i.$t(`@42BB9:文件树`)),1)]),h(`div`,Gp,[h(`div`,Kp,[h(`label`,qp,q(i.$t(`@42BB9:自动刷新`)),1),P(l,{modelValue:i.tempFileTreeAutoRefresh,"onUpdate:modelValue":t[32]||=e=>i.tempFileTreeAutoRefresh=e},null,8,[`modelValue`])]),i.tempFileTreeAutoRefresh?(z(),J(`div`,Jp,[h(`span`,Yp,q(i.$t(`@42BB9:定时刷新左侧文件树`)),1)])):N(`v-if`,!0)])])],512),[[at,i.activeTab===`editor`]]),N(` 记忆库面板:浏览 / 展开看正文 / 单条与批量删除。
96
+ 没有需要「保存」的设置项(全是即时操作),所以刻意不给 hasChanges 加分支 ——
97
+ 那样 footer 的「保存设置」按钮天然不出现(v-if="hasChanges"),行为是对的。
98
98
  v-show 是本文件所有 panel 的既有约定;数据靠 onClickMemoryTab 懒加载。 `),Y(h(`div`,Xp,[h(`div`,Zp,[h(`div`,Qp,[h(`div`,$p,[h(`p`,em,q(i.$t(`@42BB9:跨轮记忆`)),1),h(`p`,tm,q(i.$t(`@42BB9:智能体在派发任务时会把这里当成"经验库":开工前查、收尾时按四问自检记一条。`)),1)])])]),P(i.MemoryPanel,{ref:`memoryPanelRef`},null,512)],512),[[at,i.activeTab===`memory`]])])],8,Ou)),[[T,i.isLoading]])]),_:2},[i.activeTab===`commit`?void 0:{name:`footer`,fn:G(()=>[h(`div`,nm,[t[35]||=h(`div`,null,null,-1),h(`div`,rm,[h(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:t[33]||=e=>i.visible=!1,disabled:i.isLoading},q(i.hasChanges?i.$t(`@42BB9:取消`):i.$t(`@42BB9:关闭`)),9,im),i.hasChanges?(z(),J(`button`,{key:0,type:`button`,class:`dialog-confirm-btn`,onClick:i.handleSave,disabled:i.isLoading},[P(x,null,{default:G(()=>[P(i.Check)]),_:1}),h(`span`,null,q(i.activeTab===`config`?i.$t(`@42BB9:保存配置`):i.$t(`@42BB9:保存设置`)),1)],8,am)):N(`v-if`,!0)])])]),key:`0`}]),1032,[`modelValue`,`title`])}var sm=$(Du,[[`render`,om],[`__scopeId`,`data-v-97bdc1da`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/GitGlobalSettingsDialog.vue`]]);c(),X();var cm=ht(`workbenchStatus`,()=>{let e=U(0);function t(t){e.value=Math.max(0,t|0)}return{runningCount:e,hasRunning:F(()=>e.value>0),setRunning:t}});c(),X();var lm=ht(`agentActivity`,()=>{let e=U([]);function t(t){return!t||e.value.includes(t)?!1:(e.value=[...e.value,t],!0)}function n(t){return e.value.includes(t)?(e.value=e.value.filter(e=>e!==t),!0):!1}let r=F(()=>e.value.length);return{activeTokens:e,runningCount:r,hasRunning:F(()=>r.value>0),begin:t,end:n}});c(),X();var um=ht(`editorTabs`,()=>{let e=U(0);function t(t){e.value=Math.max(0,t|0)}return{dirtyCount:e,hasDirty:F(()=>e.value>0),setDirtyCount:t}});c(),X();var dm=ht(`terminalSessions`,()=>{let e=U(0);function t(t){e.value=Math.max(0,t|0)}return{count:e,hasActive:F(()=>e.value>0),setCount:t}});c();var fm=!1,pm=T({__name:`ActivityBar`,props:{activeView:{type:String,required:!0}},emits:[`update:activeView`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=cm(),o=lm(),s=Bt(),c=um(),l=dm(),u=F(()=>s.fileList?.length??0),d=F(()=>{let e=u.value;return e>99?`99+`:String(e)}),f=F(()=>s.isGitRepo?s.branchAhead:0),p=F(()=>s.isGitRepo?s.branchBehind:0),m=F(()=>f.value>0||p.value>0);function h(e){return e>99?`99+`:String(e)}let g=F(()=>{let e=[];return f.value>0&&e.push(`↑${h(f.value)}`),p.value>0&&e.push(`↓${h(p.value)}`),e.join(` `)}),_=F(()=>f.value>0&&p.value>0?`git-sync-badge--diverged`:p.value>0?`git-sync-badge--behind`:`git-sync-badge--ahead`),v=F(()=>{let e=[];return f.value>0&&e.push(Q(`@ACTBAR:领先 {count} 个提交`,{count:f.value})),p.value>0&&e.push(Q(`@ACTBAR:落后 {count} 个提交`,{count:p.value})),e.join(` · `)}),y=F(()=>{let e=[];return u.value>0&&e.push(`${u.value} ${Q(`@ACTBAR:个未提交文件`)}`),v.value&&e.push(v.value),e.length?`${Q(`@ACTBAR:Git`)} · ${e.join(` · `)}`:Q(`@ACTBAR:Git`)}),b=F(()=>{let e=c.dirtyCount;return e>99?`99+`:String(e)}),x=F(()=>{let e=o.runningCount;return e>99?`99+`:String(e)});function S(e){i(`update:activeView`,e)}let C={props:r,emit:i,wbStatus:a,agentStatus:o,gitStore:s,editorTabsStore:c,terminalSessionsStore:l,SHOW_SOURCE_MAP:fm,uncommittedCount:u,uncommittedBadge:d,syncAhead:f,syncBehind:p,hasSyncBadge:m,capBadge:h,syncBadgeText:g,syncBadgeClass:_,gitSyncSummary:v,gitButtonLabel:y,editorDirtyBadge:b,agentRunningBadge:x,select:S,get $t(){return Q},get ElTooltip(){return L}};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}});c(),v();var mm={class:`activity-bar`},hm=[`aria-label`,`aria-pressed`],gm=[`title`],_m=[`title`],vm=[`aria-label`,`aria-pressed`],ym=[`title`],bm=[`aria-label`,`aria-pressed`],xm=[`title`],Sm=[`aria-label`,`aria-pressed`],Cm=[`title`],wm=[`aria-label`,`aria-pressed`],Tm=[`aria-label`,`aria-pressed`],Em=[`title`],Dm=[`aria-label`,`aria-pressed`],Om=[`aria-label`,`aria-pressed`];function km(e,t,n,r,i,a){return z(),J(`div`,mm,[N(` Git 页面 `),P(r.ElTooltip,{content:r.gitButtonLabel,placement:`right`,"show-after":300},{default:G(()=>[h(`button`,{class:O([`activity-btn`,{active:r.props.activeView===`git`}]),onClick:t[0]||=e=>r.select(`git`),"aria-label":r.gitButtonLabel,"aria-pressed":r.props.activeView===`git`},[N(` git.svg `),t[8]||=h(`svg`,{viewBox:`0 0 1025 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[h(`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(),J(`span`,{key:0,class:`git-uncommitted-badge`,title:`${r.uncommittedCount} ${r.$t(`@ACTBAR:个未提交文件`)}`,"aria-hidden":`true`},q(r.uncommittedBadge),9,gm)):N(`v-if`,!0),N(` 与远程分支的领先 / 落后:落在按钮右下角,与右上的未提交徽标错开 `),r.hasSyncBadge?(z(),J(`span`,{key:1,class:O([`git-sync-badge`,r.syncBadgeClass]),title:r.gitSyncSummary,"aria-hidden":`true`},q(r.syncBadgeText),11,_m)):N(`v-if`,!0)],10,hm)]),_:1},8,[`content`]),N(` 控制台页面:自定义命令 + 命令控制台(从 Git 视图拆出) `),P(r.ElTooltip,{content:r.terminalSessionsStore.hasActive?`${r.$t(`@ACTBAR:控制台`)} · ${r.terminalSessionsStore.count} ${r.$t(`@ACTBAR:个终端会话`)}`:r.$t(`@ACTBAR:控制台`),placement:`right`,"show-after":300},{default:G(()=>[h(`button`,{class:O([`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`},[N(` terminal.svg: 终端窗口 + 光标 `),t[9]||=h(`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`},[h(`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`}),h(`path`,{d:`M6 9l3 3-3 3`}),h(`line`,{x1:`12`,y1:`15`,x2:`17`,y2:`15`})],-1),r.terminalSessionsStore.hasActive?(z(),J(`span`,{key:0,class:`console-sessions-badge`,title:r.$t(`@ACTBAR:个终端会话`),"aria-hidden":`true`},q(r.terminalSessionsStore.count>99?`99+`:r.terminalSessionsStore.count),9,ym)):N(`v-if`,!0)],10,vm)]),_:1},8,[`content`]),N(` 智能体 `),P(r.ElTooltip,{content:r.agentStatus.hasRunning?`${r.$t(`@ACTBAR:智能体`)} · ${r.agentStatus.runningCount} ${r.$t(`@ACTBAR:个对话正在生成`)}`:r.$t(`@ACTBAR:智能体`),placement:`right`,"show-after":300},{default:G(()=>[h(`button`,{class:O([`activity-btn`,{active:r.props.activeView===`agent`}]),onClick:t[2]||=e=>r.select(`agent`),"aria-label":r.agentStatus.hasRunning?`${r.$t(`@ACTBAR:智能体`)} · ${r.agentStatus.runningCount} ${r.$t(`@ACTBAR:个对话正在生成`)}`:r.$t(`@ACTBAR:智能体`),"aria-pressed":r.props.activeView===`agent`},[N(` robot/bot.svg: 智能体图标 `),t[10]||=h(`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`},[h(`rect`,{x:`3`,y:`11`,width:`18`,height:`10`,rx:`2`}),h(`circle`,{cx:`12`,cy:`5`,r:`2`}),h(`path`,{d:`M12 7v4`}),h(`line`,{x1:`8`,y1:`16`,x2:`8`,y2:`16`}),h(`line`,{x1:`16`,y1:`16`,x2:`16`,y2:`16`})],-1),r.agentStatus.hasRunning?(z(),J(`span`,{key:0,class:`agent-running-badge`,title:`${r.agentStatus.runningCount} ${r.$t(`@ACTBAR:个对话正在生成`)}`,"aria-hidden":`true`},q(r.agentRunningBadge),9,xm)):N(`v-if`,!0)],10,bm)]),_:1},8,[`content`]),N(` 编辑器页面 `),P(r.ElTooltip,{content:r.editorTabsStore.hasDirty?`${r.$t(`@ACTBAR:编辑器`)} · ${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`:r.$t(`@ACTBAR:编辑器`),placement:`right`,"show-after":300},{default:G(()=>[h(`button`,{class:O([`activity-btn`,{active:r.props.activeView===`editor`}]),onClick:t[3]||=e=>r.select(`editor`),"aria-label":r.editorTabsStore.hasDirty?`${r.$t(`@ACTBAR:编辑器`)} · ${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`:r.$t(`@ACTBAR:编辑器`),"aria-pressed":r.props.activeView===`editor`},[N(` code-folder.svg `),t[11]||=h(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[h(`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(),J(`span`,{key:0,class:`editor-dirty-badge`,title:`${r.editorTabsStore.dirtyCount} ${r.$t(`@ACTBAR:个未保存文件`)}`,"aria-hidden":`true`},q(r.editorDirtyBadge),9,Cm)):N(`v-if`,!0)],10,Sm)]),_:1},8,[`content`]),N(` 源码地图(SHOW_SOURCE_MAP = false 时隐藏入口) `),r.SHOW_SOURCE_MAP?(z(),p(r.ElTooltip,{key:0,content:r.$t(`@ACTBAR:源码地图`),placement:`right`,"show-after":300},{default:G(()=>[h(`button`,{class:O([`activity-btn`,{active:r.props.activeView===`source-map`}]),onClick:t[4]||=e=>r.select(`source-map`),"aria-label":r.$t(`@ACTBAR:源码地图`),"aria-pressed":r.props.activeView===`source-map`},[N(` code-map.svg `),t[12]||=h(`svg`,{viewBox:`0 0 1024 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[h(`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,wm)]),_:1},8,[`content`])):N(`v-if`,!0),N(` 工作台 `),P(r.ElTooltip,{content:r.$t(`@ACTBAR:工作台`),placement:`right`,"show-after":300},{default:G(()=>[h(`button`,{class:O([`activity-btn`,{active:r.props.activeView===`workbench`}]),onClick:t[5]||=e=>r.select(`workbench`),"aria-label":r.wbStatus.runningCount>0?`${r.$t(`@ACTBAR:工作台`)} · ${r.wbStatus.runningCount} ${r.$t(`@ACTBAR:个任务正在执行`)}`:r.$t(`@ACTBAR:工作台`),"aria-pressed":r.props.activeView===`workbench`},[N(` code-task.svg `),t[13]||=h(`svg`,{viewBox:`0 0 1044 1024`,width:`20`,height:`20`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[h(`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(),J(`span`,{key:0,class:`wb-running-badge`,title:r.$t(`@ACTBAR:有任务正在执行`),"aria-hidden":`true`},q(r.wbStatus.runningCount>99?`99+`:r.wbStatus.runningCount),9,Em)):N(`v-if`,!0)],10,Tm)]),_:1},8,[`content`]),N(` 系统监控 `),P(r.ElTooltip,{content:r.$t(`@ACTBAR:系统监控`),placement:`right`,"show-after":300},{default:G(()=>[h(`button`,{class:O([`activity-btn`,{active:r.props.activeView===`monitor`}]),onClick:t[6]||=e=>r.select(`monitor`),"aria-label":r.$t(`@ACTBAR:系统监控`),"aria-pressed":r.props.activeView===`monitor`},[N(` activity.svg: 心跳/波形监控图标 `),t[14]||=h(`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`},[h(`path`,{d:`M22 12h-4l-3 9L9 3l-3 9H2`})],-1)],10,Dm)]),_:1},8,[`content`]),N(` 思维导图 `),P(r.ElTooltip,{content:r.$t(`@ACTBAR:思维导图`),placement:`right`,"show-after":300},{default:G(()=>[h(`button`,{class:O([`activity-btn`,{active:r.props.activeView===`mindmap`}]),onClick:t[7]||=e=>r.select(`mindmap`),"aria-label":r.$t(`@ACTBAR:思维导图`),"aria-pressed":r.props.activeView===`mindmap`},[N(` mindmap.svg: 中心节点 + 四向辐射的节点拓扑 `),t[15]||=h(`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`},[h(`circle`,{cx:`12`,cy:`12`,r:`2.2`}),h(`circle`,{cx:`4.5`,cy:`5`,r:`1.8`}),h(`circle`,{cx:`19.5`,cy:`5`,r:`1.8`}),h(`circle`,{cx:`4.5`,cy:`19`,r:`1.8`}),h(`circle`,{cx:`19.5`,cy:`19`,r:`1.8`}),h(`line`,{x1:`10.3`,y1:`10.6`,x2:`6`,y2:`6.2`}),h(`line`,{x1:`13.7`,y1:`10.6`,x2:`18`,y2:`6.2`}),h(`line`,{x1:`10.3`,y1:`13.4`,x2:`6`,y2:`17.8`}),h(`line`,{x1:`13.7`,y1:`13.4`,x2:`18`,y2:`17.8`})],-1)],10,Om)]),_:1},8,[`content`])])}var Am=$(pm,[[`render`,km],[`__scopeId`,`data-v-d652a324`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/ActivityBar.vue`]]);X(),c();var jm=Rt(),Mm=15e3,Nm=ht(`instances`,()=>{let e=U([]),t=U(null),n=U(null),r=U(null),i=F(()=>t.value==null?null:e.value.find(e=>e.pid===t.value)??null),a=F(()=>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}}async function s(t){if(!Number.isInteger(t)||t<=0)throw Error(`实例 PID 无效`);let n=await fetch(`/api/instances/${t}/close`,{method:`POST`}),i=await n.json().catch(()=>null);if(!n.ok||!i?.success)throw Error(i?.error||`HTTP ${n.status}`);e.value=e.value.filter(e=>e.pid!==t),r.value=null}async function c(){let e=await fetch(`/api/instances/close-all`,{method:`POST`}),t=await e.json().catch(()=>null);if(!e.ok||!t)throw Error(t?.error||`HTTP ${e.status}`);let n=t.closed??0,i=t.failed??0,a=t.total??0;return n>0&&await o(),r.value=null,t.success,{closed:n,failed:i,total:a}}function l(){if(n.value)return;let t=`http://localhost:${jm}`,r=Nt(t,{transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1e3,reconnectionDelayMax:1e4,reconnectionAttempts:1/0,timeout:2e4,forceNew:!0});n.value=r,r.on(`instances_changed`,t=>{t&&Array.isArray(t.instances)&&(e.value=t.instances)})}function u(){if(n.value){try{n.value.off(`instances_changed`)}catch{}try{n.value.disconnect()}catch{}n.value=null}}function d(){o(),l(),p(),document.addEventListener(`visibilitychange`,h)}function f(){u(),m(),document.removeEventListener(`visibilitychange`,h)}function p(){m(),!(typeof document<`u`&&document.hidden)&&(g=window.setInterval(()=>{o()},Mm))}function m(){g!=null&&(window.clearInterval(g),g=null)}function h(){document.hidden?m():(o(),p())}let g=null;return{list:e,currentInstanceId:t,currentInstance:i,otherInstances:a,lastError:r,refresh:o,closeInstance:s,closeAllInstances:c,start:d,stop:f}});c(),X();var Pm=T({__name:`InstanceSwitcher`,setup(e,{expose:t}){t();let n=Nm(),r=U(!1),i=U(null),a=U(!1),s=U(!1),c=U(``),l=null;Ye(()=>{l!=null&&(window.clearTimeout(l),l=null)});let d=F(()=>n.list.length>0),f=F(()=>n.list.length),p=F(()=>n.otherInstances.length),m=F(()=>p.value>0),h=F(()=>`${f.value} ${Q(`@INSSW:个实例`)}`);function g(e){e&&window.open(`http://localhost:${e}`,`_blank`)}function _(e){return Jt(e.projectPath)||e.projectName}function v(e){return(e.projectName||_(e)||`?`).slice(0,1).toUpperCase()}async function y(e){if(i.value!=null||a.value)return;let t=e.pid===n.currentInstanceId,r=Q(t?`@INSSW:关闭当前实例`:`@INSSW:关闭实例`),o=t?Q(`@INSSW:关闭当前实例确认内容`,{name:e.projectName}):Q(`@INSSW:关闭实例确认内容`,{name:e.projectName,port:e.port});try{await Me.confirm(o,r,{confirmButtonText:Q(`@INSSW:确认关闭`),cancelButtonText:Q(`@INSSW:取消`),type:`warning`,autofocus:!1})}catch{return}i.value=e.pid;try{if(await n.closeInstance(e.pid),V.success(Q(t?`@INSSW:当前实例已关闭`:`@INSSW:实例已关闭`,{name:e.projectName})),t){c.value=e.projectName;try{window.close()}catch{}l!=null&&window.clearTimeout(l),l=window.setTimeout(()=>{l=null,s.value=!0;try{n.stop()}catch{}},250)}}catch(e){V.error(`${Q(`@INSSW:关闭实例失败`)}: ${e.message}`),await n.refresh()}finally{i.value=null}}async function b(){if(!m.value||a.value)return;let e=p.value;try{await Me.confirm(Q(`@INSSW:关闭全部实例确认内容`,{count:e}),Q(`@INSSW:关闭全部实例`),{confirmButtonText:Q(`@INSSW:确认关闭`),cancelButtonText:Q(`@INSSW:取消`),type:`warning`,autofocus:!1})}catch{return}a.value=!0;try{let e=await n.closeAllInstances();e.failed===0?V.success(Q(`@INSSW:关闭全部实例成功`,{closed:e.closed})):V.warning(Q(`@INSSW:关闭全部实例部分失败`,{closed:e.closed,failed:e.failed}))}catch(e){V.error(`${Q(`@INSSW:关闭实例失败`)}: ${e.message}`),await n.refresh()}finally{a.value=!1}}let x={store:n,dropdownVisible:r,closingPid:i,closingAll:a,selfClosed:s,selfClosedName:c,get selfCloseFallbackTimer(){return l},set selfCloseFallbackTimer(e){l=e},hasAny:d,count:f,otherCount:p,canCloseAll:m,triggerText:h,handleOpen:g,pathSubtitle:_,instanceInitial:v,requestClose:y,requestCloseAll:b,get ElDropdown(){return se},get ElDropdownMenu(){return st},get ElDropdownItem(){return u},get ElIcon(){return E},get ArrowDown(){return ge},get Close(){return Ge},get Loading(){return o},get $t(){return Q}};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}});c(),v(),K();var Fm=[`aria-label`,`aria-expanded`],Im={class:`switcher-count`},Lm={class:`switcher-label`},Rm={class:`instance-menu-header`,role:`presentation`},zm={class:`instance-header-actions`},Bm=[`disabled`,`aria-label`,`title`],Vm={class:`instance-total`},Hm={class:`instance-row instance-row--current`},Um={class:`instance-avatar`,"aria-hidden":`true`},Wm={class:`instance-content`},Gm={class:`instance-row-main`},Km={class:`instance-name`},qm={class:`instance-current-label`},Jm=[`title`],Ym={class:`instance-action`},Xm={class:`port-badge`},Zm=[`disabled`,`aria-label`,`title`],Qm={class:`instance-row`},$m={class:`instance-avatar`,"aria-hidden":`true`},eh={class:`instance-content`},th={class:`instance-row-main`},nh={class:`instance-name`},rh=[`title`],ih={class:`instance-action`},ah={class:`port-badge`},oh=[`disabled`,`aria-label`,`title`,`onClick`],sh={class:`instance-empty`},ch={key:0,class:`self-closed-overlay`,role:`alert`},lh={class:`self-closed-card`},uh={class:`self-closed-title`},dh={class:`self-closed-desc`},fh={class:`self-closed-hint`};function ph(e,t,n,i,a,o){return z(),J(Z,null,[i.hasAny?(z(),p(i.ElDropdown,{key:0,trigger:`click`,placement:`bottom-end`,"popper-class":`instance-switcher-popper`,onCommand:i.handleOpen,onVisibleChange:t[1]||=e=>i.dropdownVisible=e},{dropdown:G(()=>[P(i.ElDropdownMenu,{class:`instance-dropdown-menu`},{default:G(()=>[h(`li`,Rm,[h(`div`,null,[h(`strong`,null,q(i.$t(`@INSSW:运行中的实例`)),1),h(`span`,null,q(i.$t(`@INSSW:点击实例可在新标签页打开`)),1)]),h(`div`,zm,[i.canCloseAll?(z(),J(`button`,{key:0,type:`button`,class:O([`instance-close-all`,{"is-loading":i.closingAll}]),disabled:i.closingAll||i.closingPid!=null,"aria-label":i.$t(`@INSSW:关闭全部实例`),title:i.$t(`@INSSW:关闭全部实例 {count}`,{count:i.otherCount}),onClick:H(i.requestCloseAll,[`stop`,`prevent`])},[i.closingAll?(z(),p(i.ElIcon,{key:0},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(i.ElIcon,{key:1},{default:G(()=>[P(i.Close)]),_:1})),h(`span`,null,q(i.$t(`@INSSW:关闭全部实例 {count}`,{count:i.otherCount})),1)],10,Bm)):N(`v-if`,!0),h(`span`,Vm,q(i.count),1)])]),N(` 当前实例(整行 disabled 防止误触发 dropdown 的 command → 新标签页打开;
99
99
  内置独立关闭按钮走自己的 click,实现"先关后台再关 tab"流程) `),i.store.currentInstance?(z(),p(i.ElDropdownItem,{key:0,disabled:``,class:`instance-menu-item instance-menu-item--current`},{default:G(()=>[h(`div`,Hm,[h(`span`,Um,q(i.instanceInitial(i.store.currentInstance)),1),h(`div`,Wm,[h(`div`,Gm,[h(`span`,Km,q(i.store.currentInstance.projectName),1),h(`span`,qm,q(i.$t(`@INSSW:当前`)),1)]),h(`span`,{class:`instance-path`,title:i.store.currentInstance.projectPath},q(i.store.currentInstance.projectPath),9,Jm)]),h(`div`,Ym,[h(`span`,Xm,`:`+q(i.store.currentInstance.port),1),h(`button`,{type:`button`,class:O([`instance-close`,{"is-loading":i.closingPid===i.store.currentInstance.pid}]),disabled:i.closingPid!=null||i.closingAll,"aria-label":i.$t(`@INSSW:关闭当前实例`),title:i.$t(`@INSSW:关闭当前实例`),onClick:t[0]||=H(e=>i.requestClose(i.store.currentInstance),[`stop`,`prevent`])},[i.closingPid===i.store.currentInstance.pid?(z(),p(i.ElIcon,{key:0},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(i.ElIcon,{key:1},{default:G(()=>[P(i.Close)]),_:1}))],10,Zm)])])]),_:1})):N(`v-if`,!0),N(` 其他运行中的实例 `),(z(!0),J(Z,null,r(i.store.otherInstances,e=>(z(),p(i.ElDropdownItem,{key:e.pid,command:e.port,class:`instance-menu-item`},{default:G(()=>[h(`div`,Qm,[h(`span`,$m,q(i.instanceInitial(e)),1),h(`div`,eh,[h(`div`,th,[h(`span`,nh,q(e.projectName),1)]),h(`span`,{class:`instance-path`,title:e.projectPath},q(e.projectPath),9,rh)]),h(`div`,ih,[h(`span`,ah,`:`+q(e.port),1),h(`button`,{type:`button`,class:O([`instance-close`,{"is-loading":i.closingPid===e.pid}]),disabled:i.closingPid!=null||i.closingAll,"aria-label":i.$t(`@INSSW:关闭实例 {name}`,{name:e.projectName}),title:i.$t(`@INSSW:关闭实例`),onClick:H(t=>i.requestClose(e),[`stop`,`prevent`])},[i.closingPid===e.pid?(z(),p(i.ElIcon,{key:0},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(i.ElIcon,{key:1},{default:G(()=>[P(i.Close)]),_:1}))],10,oh)])])]),_:2},1032,[`command`]))),128)),N(` 空状态 `),i.store.otherInstances.length===0?(z(),p(i.ElDropdownItem,{key:1,disabled:``},{default:G(()=>[h(`span`,sh,q(i.$t(`@INSSW:无其他运行中的实例`)),1)]),_:1})):N(`v-if`,!0)]),_:1})]),default:G(()=>[h(`button`,{type:`button`,class:O([`instance-switcher`,{"is-open":i.dropdownVisible}]),"aria-label":i.triggerText,"aria-expanded":i.dropdownVisible},[P(i.ElIcon,{class:`switcher-icon`},{default:G(()=>[N(` apps/layers 图标 `),t[2]||=h(`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`},[h(`rect`,{x:`3`,y:`3`,width:`7`,height:`7`,rx:`1`}),h(`rect`,{x:`14`,y:`3`,width:`7`,height:`7`,rx:`1`}),h(`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`}),h(`rect`,{x:`14`,y:`14`,width:`7`,height:`7`,rx:`1`})],-1)]),_:1}),h(`span`,Im,q(i.count),1),h(`span`,Lm,q(i.$t(`@INSSW:运行中`)),1),P(i.ElIcon,{class:`switcher-chevron`},{default:G(()=>[P(i.ArrowDown)]),_:1})],10,Fm)]),_:1})):N(`v-if`,!0),N(` 「关闭当前实例」兜底遮罩:后台已关、window.close() 又被浏览器拦截时,
100
100
  页面还活着但已与服务端断开 —— 明确告知用户此标签页可以安全关闭,
@@ -112,7 +112,7 @@ import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{$ as n,$n as r,
112
112
  徽标自己不做点击区 —— hover 时它会淡出给操作按钮让位。 `),i.clonedPathOf(e)?(z(),J(`span`,x_,[P(s,{"aria-hidden":`true`},{default:G(()=>[P(i.CircleCheck)]),_:1}),M(` `+q(i.$t(`@REPOLIST:已克隆`)),1)])):N(`v-if`,!0),e.isFork?(z(),J(`span`,S_,q(i.$t(`@REPOLIST:Fork`)),1)):N(`v-if`,!0),e.isPrivate?(z(),J(`span`,C_,q(i.$t(`@REPOLIST:私有`)),1)):N(`v-if`,!0),N(` 语言色点用官方品牌色,算不出颜色的语言退回中性灰点(见 languageColor) `),e.language?(z(),J(`span`,w_,[h(`span`,{class:`repo-card__lang-dot`,style:R({background:i.languageColor(e.language)}),"aria-hidden":`true`},null,4),M(q(e.language),1)])):N(`v-if`,!0),N(` 星标只在有人 star 时才出现:满屏 ★0 是没有信息量的噪音 `),e.stars>0?(z(),J(`span`,T_,[P(s,{"aria-hidden":`true`},{default:G(()=>[P(i.Star)]),_:1}),M(q(e.stars),1)])):N(`v-if`,!0)])],8,m_),h(`span`,E_,[i.toSshUrl(e.url)?(z(),J(`button`,{key:0,type:`button`,class:`repo-card__action`,disabled:i.cloningRepo===e.fullName,title:i.$t(`@REPOLIST:克隆到文件夹`),"aria-label":i.$t(`@REPOLIST:克隆 {name} 到指定文件夹`,{name:e.fullName}),onClick:H(t=>i.openClonePicker(e),[`stop`])},[P(s,{class:O({"is-spinning":i.cloningRepo===e.fullName}),"aria-hidden":`true`},{default:G(()=>[i.cloningRepo===e.fullName?(z(),p(i.Loading,{key:0})):(z(),p(i.FolderAdd,{key:1}))]),_:2},1032,[`class`])],8,D_)):N(`v-if`,!0),h(`button`,{type:`button`,class:`repo-card__action`,title:i.$t(`@REPOLIST:复制 HTTPS 地址`),"aria-label":i.$t(`@REPOLIST:复制 HTTPS 地址 {name}`,{name:e.fullName}),onClick:H(t=>i.copyText(e.url,i.$t(`@REPOLIST:HTTPS 地址已复制`)),[`stop`])},[P(s,{"aria-hidden":`true`},{default:G(()=>[P(i.DocumentCopy)]),_:1})],8,O_),i.toSshUrl(e.url)?(z(),J(`button`,{key:1,type:`button`,class:`repo-card__action`,title:i.$t(`@REPOLIST:复制 SSH 地址`),"aria-label":i.$t(`@REPOLIST:复制 SSH 地址 {name}`,{name:e.fullName}),onClick:H(t=>i.copyText(i.toSshUrl(e.url),i.$t(`@REPOLIST:SSH 地址已复制`)),[`stop`])},[P(s,{"aria-hidden":`true`},{default:G(()=>[P(i.Key)]),_:1})],8,k_)):N(`v-if`,!0),h(`button`,{type:`button`,class:`repo-card__action`,title:i.$t(`@REPOLIST:在浏览器中打开`),"aria-label":i.$t(`@REPOLIST:在浏览器中打开 {name}`,{name:e.fullName}),onClick:H(t=>i.openUrl(e.url),[`stop`])},[P(s,{"aria-hidden":`true`},{default:G(()=>[P(i.Link)]),_:1})],8,A_)])],12,p_))),128))])],8,c_))),128))],12,s_)),i.items.length>0&&!i.searchQuery?(z(),J(`p`,j_,[P(s,{"aria-hidden":`true`},{default:G(()=>[P(i.CircleCheck)]),_:1}),M(` `+q(i.$t(`@REPOLIST:点击卡片在浏览器中打开仓库主页`)),1)])):N(`v-if`,!0)],64)),N(` 克隆目标文件夹选择(local-file-picker)。选中的是**父目录** ——
113
113
  仓库会在它下面建出以仓库名命名的子目录,与命令行 git clone 一致。
114
114
  「全局」开关的状态与其它入口共用 ui.pickerGlobalSearch(记住上次的选择)。 `),P(i.FilePicker,{visible:i.clonePickerVisible,mode:`directory`,theme:i.isDark?`dark`:`light`,locale:i.currentLocale,"default-global-search":i.configStore.ui.pickerGlobalSearch,onGlobalSearchChange:t[8]||=e=>{i.configStore.ui.pickerGlobalSearch=e},onClose:t[9]||=e=>i.clonePickerVisible=!1,onConfirm:i.onCloneDirConfirm},null,8,[`visible`,`theme`,`locale`,`default-global-search`])])}var N_=$(cg,[[`render`,M_],[`__scopeId`,`data-v-adb1455d`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/RemoteReposList.vue`]]);c();var P_=T({__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}});c(),v();var F_={class:`view-loading`},I_=[`aria-label`],L_={class:`view-loading__text`};function R_(e,t,n,r,i,a){return z(),J(`div`,F_,[h(`div`,{class:`view-loading__spinner`,role:`status`,"aria-label":n.text},[t[0]||=h(`svg`,{viewBox:`0 0 24 24`,class:`view-loading__icon`},[h(`circle`,{class:`view-loading__track`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`}),h(`circle`,{class:`view-loading__arc`,cx:`12`,cy:`12`,r:`9`,fill:`none`,"stroke-width":`2.5`,"stroke-linecap":`round`})],-1),h(`span`,L_,q(n.text),1)],8,I_)])}var z_=$(P_,[[`render`,R_],[`__scopeId`,`data-v-d040c841`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/ViewLoading.vue`]]);c(),X();var B_=T({__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(x.value)?x.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=g(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){V.error(`${Q(`@CMD01:保存命令失败: `)}${e.message}`)}}let a=e,o=n,s=Lt(),{currentLocale:c}=mt(It()),l=F(()=>s.commandTemplates||[]),u=U(!1);function d(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 f(e){if(e.isSettings){u.value=!0,_.value.command=``;return}_.value.command=e.value}function p(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 m(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 h=T({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()=>oe(`div`,{class:`cmd-param-form`},e.vars.map(n=>oe(`div`,{class:`cmd-param-row`},[oe(`div`,{class:`cmd-param-label`},n),oe(I,{modelValue:e.values[n],"onUpdate:modelValue":t=>{e.values[n]=String(t??``)},placeholder:Q(`@CMD01:请输入变量值`,{var:n}),clearable:!0}),t(n)?oe(`div`,{class:`cmd-param-desc`},t(n)):null])))}});function g(e){let t=p(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 _=U({name:``,description:``,directory:``,command:``,params:[]}),v=U(!1),y=U(``),b=U(!1),x=F(()=>s.customCommands||[]),S=F({get:()=>a.visible,set:e=>o(`update:visible`,e)});We(S,e=>{e||C()});function C(){_.value={name:``,description:``,directory:``,command:``,params:[]},v.value=!1,y.value=``}We(()=>_.value.command,e=>{let t=p(String(e||``));if(!t.length){_.value.params=[];return}let n=Array.isArray(_.value.params)?_.value.params:[],r=new Map(n.map(e=>[String(e?.name||``),e]));_.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 w(){if(!_.value.name.trim()){V.warning(Q(`@CMD01:命令名称不能为空`));return}if(!_.value.command.trim()){V.warning(Q(`@CMD01:命令内容不能为空`));return}try{b.value=!0,v.value?await s.updateCustomCommand(y.value,_.value)&&C():((!_.value.directory||!_.value.directory.trim())&&(_.value.directory=s.currentDirectory||``),await s.saveCustomCommand(_.value)&&C())}catch(e){V.error(`${Q(`@CMD01:命令保存失败: `)}${e.message}`)}finally{b.value=!1}}function ee(e){v.value=!0,y.value=e.id||``,_.value={name:e.name,description:e.description||``,directory:e.directory,command:e.command,params:g(e)}}function E(){C()}async function D(e){try{await Me.confirm(Q(`@CMD01:确定要删除这个自定义命令吗?`),Q(`@CMD01:删除确认`),{confirmButtonText:Q(`@CMD01:确定`),cancelButtonText:Q(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`}),await s.deleteCustomCommand(e)}catch{}}async function O(e){await s.pinCustomCommand(e)}async function te(e){let t=String(e?.command||``),n=p(t);if(!n.length){o(`execute-command`,e);return}let r=ot({});try{let i=g(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 Me({title:Q(`@CMD01:执行参数`),message:oe(h,{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()===``){V.warning(Q(`@CMD01:请输入必填变量: `,{var:e.name}));return}}let c=m(t,r);o(`execute-command`,{...e,command:c})}catch{}}let ne=U(!1);function k(){ne.value=!0}function A(e){_.value.directory=e}function j(){_.value.directory=s.currentDirectory||``}let M=U(null),N=U([]);function re(e){N.value=e}async function P(){let e=[...N.value],t=e.length;if(t)try{await Me.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),N.value=[],V.success(Q(`@CMD01:批量删除成功`,{count:n}))}catch{}}let ie=U(!1),ae=U([]),se=U([]),ce=U(null),ue=U(!1),de=U(!1);async function L(){try{ue.value=!0,ie.value=!0,ae.value=[],se.value=[];let e=await(await fetch(`/api/scan-npm-scripts`)).json();if(!e.success){V.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.error||``}`),ie.value=!1;return}let t=e.packages||[];if(t.length===0){V.warning(Q(`@CMD01:未找到任何NPM脚本`)),ie.value=!1;return}let n=new Set((Array.isArray(x.value)?x.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)})}}ae.value=r}catch(e){V.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`),ie.value=!1}finally{ue.value=!1}}function fe(e){se.value=e}async function pe(){if(!se.value.length){V.warning(Q(`@CMD01:请至少选择一项`));return}try{de.value=!0;let e=new Set((Array.isArray(x.value)?x.value:[]).map(e=>String(e?.name||``).trim())),t=0,n=0;for(let r of se.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++)}V.success(Q(`@CMD01:NPM命令同步完成2`,{count:t,skip:n})),ie.value=!1,se.value=[]}catch(e){V.error(`${Q(`@CMD01:NPM命令同步失败: `)}${e.message}`)}finally{de.value=!1}}t({resetForm:C});let me={buildDuplicateName:r,duplicateCommand:i,props:a,emit:o,configStore:s,currentLocale:c,commandTemplates:l,commandTemplateDialogVisible:u,queryCommandTemplates:d,handleCommandSelect:f,extractTemplateVariables:p,applyTemplateVariables:m,CmdParamForm:h,normalizeCommandParams:g,newCommand:_,isEditing:v,editingId:y,isSaving:b,commands:x,dialogVisible:S,resetForm:C,saveCommand:w,startEditCommand:ee,cancelEdit:E,deleteCommand:D,pinCommandToTop:O,executeCommand:te,isBrowserDialogVisible:ne,browseDirectory:k,onBrowserSelect:A,useCurrentDirectory:j,commandTableRef:M,selectedCommands:N,onSelectionChange:re,batchDeleteCommands:P,npmDialogVisible:ie,npmScriptItems:ae,npmSelected:se,npmTableRef:ce,isLoadingNpm:ue,isDoingSyncNpm:de,syncNpmCommands:L,onNpmSelectionChange:fe,doSyncSelectedNpm:pe,get $t(){return Q},get ElInput(){return I},get Edit(){return je},get Delete(){return Re},get VideoPlay(){return Ze},get Folder(){return le},get CopyDocument(){return Ce},get Top(){return Te},IconButton:Mt,CommonDialog:Kt,TemplateManager:qt,get FilePicker(){return vt}};return Object.defineProperty(me,"__isScriptSetup",{enumerable:!1,value:!0}),me}}),V_=t({default:()=>Ov});v(),c(),K();var H_={class:`command-container`},U_={class:`left-panel`},W_={class:`command-form`},G_={class:`form-header`},K_={class:`left-title`},q_={class:`form-content`},J_={class:`form-row`},Y_={class:`form-field`},X_={class:`required`},Z_={class:`form-row`},Q_={class:`form-field`},$_={class:`form-row`},ev={class:`form-field`},tv={class:`directory-input-group`},nv={class:`form-row`},rv={class:`form-field`},iv={class:`required`},av={key:0,class:`command-params`},ov={class:`params-title`},sv={class:`form-actions`},cv={class:`right-panel`},lv={class:`command-list`},uv={class:`list-header`},dv={class:`list-header-left`},fv={class:`list-title`},pv={key:0,class:`selection-count`},mv={class:`list-header-actions`},hv={class:`list-content`},gv={key:1,class:`command-list-scroll`},_v={class:`name-cell`},vv={class:`name-text`},yv={key:0,class:`description-text`},bv={class:`command-text`},xv={class:`directory-text`},Sv={class:`action-buttons`},Cv={class:`npm-dialog-body`},wv={class:`command-text`},Tv={class:`npm-dialog-footer`},Ev={class:`npm-selected-count`};function Dv(e,t,n,r,i,a){let o=pt,s=E,c=de,l=ze,u=Ae,d=Ke,f=lt,m=k,g=He;return z(),J(Z,null,[P(r.CommonDialog,{modelValue:r.dialogVisible,"onUpdate:modelValue":t[4]||=e=>r.dialogVisible=e,title:r.$t(`@CMD01:自定义命令管理`),"close-on-click-modal":!1,"append-to-body":!0,size:n.fullscreen?`fullscreen`:`medium`,width:n.fullscreen?`100vw`:`90%`,top:n.fullscreen?`0`:`50px`,type:`flex`,"z-index":3e6,"modal-class":`custom-command-overlay`,"custom-class":`custom-command-dialog`},{default:G(()=>[h(`div`,H_,[h(`div`,U_,[h(`div`,W_,[h(`div`,G_,[h(`div`,K_,q(r.isEditing?r.$t(`@CMD01:编辑命令`):r.$t(`@CMD01:添加命令`)),1)]),h(`div`,q_,[N(` 命令名称 `),h(`div`,J_,[h(`div`,Y_,[h(`label`,X_,q(r.$t(`@CMD01:命令名称`)),1),P(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`])])]),N(` 描述 `),h(`div`,Z_,[h(`div`,Q_,[h(`label`,null,q(r.$t(`@CMD01:描述`)),1),P(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`])])]),N(` 执行目录 `),h(`div`,$_,[h(`div`,ev,[h(`label`,null,q(r.$t(`@CMD01:执行目录`)),1),h(`div`,tv,[P(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`]),P(o,{onClick:r.useCurrentDirectory,type:`primary`,plain:``,size:`default`},{default:G(()=>[M(q(r.$t(`@CMD01:使用当前目录`)),1)]),_:1}),P(o,{onClick:r.browseDirectory,type:`info`,plain:``,size:`default`},{default:G(()=>[P(s,null,{default:G(()=>[P(r.Folder)]),_:1}),M(` `+q(r.$t(`@CMD01:选择目录`)),1)]),_:1})])])]),N(` 命令 `),h(`div`,nv,[h(`div`,rv,[h(`label`,iv,q(r.$t(`@CMD01:命令`)),1),P(c,{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:dt(r.saveCommand,[`enter`]),style:{width:`100%`}},null,8,[`modelValue`,`placeholder`]),r.newCommand.params&&r.newCommand.params.length>0?(z(),J(`div`,av,[h(`div`,ov,q(r.$t(`@CMD01:变量配置`)),1),P(d,{data:r.newCommand.params,style:{width:`100%`},size:`small`,stripe:``},{default:G(()=>[P(l,{prop:`name`,label:r.$t(`@CMD01:变量名`),width:`160`},null,8,[`label`]),P(l,{label:r.$t(`@CMD01:默认值`),"min-width":`180`},{default:G(e=>[P(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`]),P(l,{label:r.$t(`@CMD01:必填`),width:`90`,align:`center`},{default:G(e=>[P(u,{modelValue:e.row.required,"onUpdate:modelValue":t=>e.row.required=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1},8,[`label`]),P(l,{label:r.$t(`@CMD01:描述`),"min-width":`220`},{default:G(e=>[P(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`])])):N(`v-if`,!0)])]),N(` 按钮区域 `),h(`div`,sv,[r.isEditing?(z(),p(o,{key:0,onClick:r.cancelEdit,size:`large`},{default:G(()=>[M(q(r.$t(`@CMD01:取消`)),1)]),_:1})):N(`v-if`,!0),P(o,{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:G(()=>[M(q(r.isEditing?r.$t(`@CMD01:更新命令`):r.$t(`@CMD01:添加命令`)),1)]),_:1},8,[`disabled`,`loading`])])])])]),h(`div`,cv,[N(` 命令列表 `),h(`div`,lv,[h(`div`,uv,[h(`div`,dv,[h(`h3`,fv,q(r.$t(`@CMD01:已保存的命令`)),1),r.selectedCommands.length>0?(z(),J(`span`,pv,q(r.$t(`@CMD01:已选择`,{count:r.selectedCommands.length})),1)):N(`v-if`,!0)]),h(`div`,mv,[r.selectedCommands.length>0?(z(),p(o,{key:0,type:`danger`,plain:``,size:`small`,onClick:r.batchDeleteCommands},{default:G(()=>[M(q(r.$t(`@CMD01:批量删除`)),1)]),_:1})):N(`v-if`,!0),P(o,{type:`primary`,plain:``,size:`small`,loading:r.isLoadingNpm,onClick:r.syncNpmCommands},{default:G(()=>[M(q(r.$t(`@CMD01:同步NPM命令`)),1)]),_:1},8,[`loading`])])]),h(`div`,hv,[r.commands.length===0?(z(),p(f,{key:0,description:r.$t(`@CMD01:暂无保存的命令`)},null,8,[`description`])):(z(),J(`div`,gv,[P(d,{ref:`commandTableRef`,data:r.commands,style:{width:`100%`,height:`100%`},stripe:``,onSelectionChange:r.onSelectionChange},{default:G(()=>[P(l,{type:`selection`,width:`40`}),P(l,{prop:`name`,label:r.$t(`@CMD01:命令名称`),"min-width":`80`},{default:G(e=>[h(`div`,_v,[h(`span`,vv,q(e.row.name),1),e.row.description?(z(),J(`span`,yv,q(e.row.description),1)):N(`v-if`,!0)])]),_:1},8,[`label`]),P(l,{prop:`command`,label:r.$t(`@CMD01:命令`),"min-width":`200`},{default:G(e=>[h(`code`,bv,q(e.row.command),1)]),_:1},8,[`label`]),P(l,{prop:`directory`,label:r.$t(`@CMD01:执行目录`),"min-width":`200`},{default:G(e=>[h(`span`,xv,q(e.row.directory),1)]),_:1},8,[`label`]),P(l,{label:r.$t(`@CMD01:操作`),width:`138`,fixed:`right`},{default:G(e=>[h(`div`,Sv,[P(r.IconButton,{tooltip:r.$t(`@CMD01:置顶`),size:`small`,"hover-color":`var(--color-info)`,onClick:t=>r.pinCommandToTop(e.row.id)},{default:G(()=>[P(s,null,{default:G(()=>[P(r.Top)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),P(r.IconButton,{tooltip:r.$t(`@CMD01:执行命令`),size:`small`,"hover-color":`var(--color-success)`,onClick:t=>r.executeCommand(e.row)},{default:G(()=>[P(s,null,{default:G(()=>[P(r.VideoPlay)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),P(r.IconButton,{tooltip:r.$t(`@CMD01:编辑`),size:`small`,"hover-color":`var(--color-primary)`,onClick:t=>r.startEditCommand(e.row)},{default:G(()=>[P(s,null,{default:G(()=>[P(r.Edit)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),P(r.IconButton,{tooltip:r.$t(`@CMD01:复制命令`),size:`small`,"hover-color":`var(--color-warning)`,onClick:t=>r.duplicateCommand(e.row)},{default:G(()=>[P(s,null,{default:G(()=>[P(r.CopyDocument)]),_:1})]),_:1},8,[`tooltip`,`onClick`]),P(r.IconButton,{tooltip:r.$t(`@CMD01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:t=>r.deleteCommand(e.row.id)},{default:G(()=>[P(s,null,{default:G(()=>[P(r.Delete)]),_:1})]),_:1},8,[`tooltip`,`onClick`])])]),_:1},8,[`label`])]),_:1},8,[`data`])]))])])])])]),_:1},8,[`modelValue`,`title`,`size`,`width`,`top`]),P(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`]),N(` 目录浏览器弹窗。default-global-search / global-search-change 与其它入口共用
115
- ui.pickerGlobalSearch,弹窗里「全局」开关的选择会被记住(落盘见 configStore)。 `),P(r.FilePicker,{visible:r.isBrowserDialogVisible,locale:r.currentLocale,"default-global-search":r.configStore.ui.pickerGlobalSearch,onGlobalSearchChange:t[6]||=e=>{r.configStore.ui.pickerGlobalSearch=e},onClose:t[7]||=e=>r.isBrowserDialogVisible=!1,onConfirm:t[8]||=e=>{r.onBrowserSelect(e[0]),r.isBrowserDialogVisible=!1}},null,8,[`visible`,`locale`,`default-global-search`]),N(` NPM 命令选择弹窗 `),P(r.CommonDialog,{modelValue:r.npmDialogVisible,"onUpdate:modelValue":t[10]||=e=>r.npmDialogVisible=e,title:r.$t(`@CMD01:选择NPM命令`),"close-on-click-modal":!1,"append-to-body":!0,width:`680px`,type:`flex`,"z-index":3000010,"modal-class":`npm-sync-overlay`,"custom-class":`npm-sync-dialog`},{footer:G(()=>[h(`div`,Tv,[h(`span`,Ev,q(r.$t(`@CMD01:已选择`,{count:r.npmSelected.length})),1),P(o,{onClick:t[9]||=e=>r.npmDialogVisible=!1},{default:G(()=>[M(q(r.$t(`@CMD01:取消`)),1)]),_:1}),P(o,{type:`primary`,loading:r.isDoingSyncNpm,disabled:r.npmSelected.length===0,onClick:r.doSyncSelectedNpm},{default:G(()=>[M(q(r.$t(`@CMD01:开始同步`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:G(()=>[Y((z(),J(`div`,Cv,[P(d,{ref:`npmTableRef`,data:r.npmScriptItems,style:{width:`100%`},"max-height":`420`,stripe:``,onSelectionChange:r.onNpmSelectionChange},{default:G(()=>[P(l,{type:`selection`,width:`44`,selectable:()=>!0}),P(l,{prop:`packageName`,label:r.$t(`@CMD01:包名`),"min-width":`140`},null,8,[`label`]),P(l,{prop:`scriptName`,label:r.$t(`@CMD01:脚本名`),"min-width":`120`},null,8,[`label`]),P(l,{prop:`scriptName`,label:r.$t(`@CMD01:命令`),"min-width":`160`},{default:G(e=>[h(`code`,wv,`npm run `+q(e.row.scriptName),1)]),_:1},8,[`label`]),P(l,{label:r.$t(`@CMD01:状态`),width:`80`,align:`center`},{default:G(e=>[e.row.isDuplicate?(z(),p(m,{key:0,type:`warning`,size:`small`},{default:G(()=>[M(q(r.$t(`@CMD01:已存在`)),1)]),_:1})):(z(),p(m,{key:1,type:`success`,size:`small`},{default:G(()=>[M(q(r.$t(`@CMD01:新增`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`])])),[[g,r.isLoadingNpm]])]),_:1},8,[`modelValue`,`title`])],64)}var Ov=$(B_,[[`render`,Dv],[`__scopeId`,`data-v-c7d52d8a`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/CustomCommandManager.vue`]]);function kv(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 Av(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}c(),X();var jv=`zen-gitsync:schedule-commit-settings`,Mv=120,Nv=600,Pv=16,Fv=T({__name:`CustomCommandsPanel`,setup(e,{expose:t}){t();let n=U(!1);function r(){n.value=!n.value}let i=U(!1);function a(){i.value=!0}let o=Lt(),s=Bt(),c=F(()=>o.customCommands||[]),l=U({}),u=U(!1),d=U(30),f=U(`min`),p=U(!0),m=U(!0),h=U(`default`),g=U(``),_=U(!1),v=U(0),y=U(Date.now()),b=U([]),x=U(``),S={min:6e4,hour:36e5,day:864e5},C=F(()=>Math.max(1,Number(d.value)||1)*S[f.value]);We([d,f,p,h,g,m],()=>{try{localStorage.setItem(jv,JSON.stringify({interval:d.value,unit:f.value,commitNow:p.value,messageMode:h.value,customMessage:g.value,autoPush:m.value}))}catch{}},{deep:!0});try{let e=JSON.parse(localStorage.getItem(jv)||`{}`);e.interval&&(d.value=Math.max(1,Number(e.interval)||30)),e.unit&&S[e.unit]&&(f.value=e.unit),typeof e.commitNow==`boolean`&&(p.value=e.commitNow),(e.messageMode===`ai`||e.messageMode==="default")&&(h.value=e.messageMode),typeof e.customMessage==`string`&&(g.value=e.customMessage),typeof e.autoPush==`boolean`&&(m.value=e.autoPush)}catch{}let w=F(()=>o.defaultCommitMessage||`chore: auto commit at ${j(Date.now())}`),T=F(()=>{let e=[`g`],t=g.value.trim();return h.value===`ai`?e.push(`--ai`):t?e.push(`-m="${t.replace(/"/g,`\\"`)}"`):o.defaultCommitMessage?e.push(`-y`):e.push(`-m="chore: auto commit at ${j(Date.now())}"`),e.push(`--interval=${Math.round(C.value/1e3)}`),o.currentDirectory&&e.push(`--path="${o.currentDirectory}"`),e.join(` `)}),ee=F(()=>{let e=[];return p.value||e.push(Q(`@CMDPANEL:命令行模式启动时会立即提交一次,没有跳过参数`)),m.value||e.push(Q(`@CMDPANEL:命令行模式提交成功后会推送远程,没有关闭参数`)),e});async function E(){try{await navigator.clipboard.writeText(T.value),V.success(Q(`@CMDPANEL:命令行已复制`))}catch(e){V.error(`${Q(`@CMDPANEL:复制失败`)}${e?.message?`: `+e.message:``}`)}}let D=null,O=null;function te(){u.value&&(D&&clearTimeout(D),v.value=Date.now()+C.value,D=setTimeout(re,C.value))}function ne(e){e?(u.value=!0,x.value=o.currentDirectory||``,y.value=Date.now(),O=setInterval(()=>{y.value=Date.now()},1e3),p.value?re():te(),V.success(Q(`@CMDPANEL:定时提交已启动`))):(u.value=!1,D&&=(clearTimeout(D),null),O&&=(clearInterval(O),null),v.value=0,V.info(Q(`@CMDPANEL:定时提交已停止`)))}Ye(()=>{D&&clearTimeout(D),O&&clearInterval(O)});function k(e){b.value.unshift(e),b.value.length>20&&(b.value.length=20)}function A(e){return e.ok?e.message:e.stage===`push`?Q(`@CMDPANEL:推送失败`):`${Q(`@CMDPANEL:提交失败`)}: ${e.error||``}`}function j(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}let M=F(()=>{if(!u.value||!v.value)return``;let e=Math.max(0,v.value-y.value),t=Math.floor(e/1e3),n=e=>String(e).padStart(2,`0`),r=Math.floor(t/3600),i=Math.floor(t%3600/60),a=t%60;return r>0?`${n(r)}:${n(i)}:${n(a)}`:`${n(i)}:${n(a)}`});async function N(){_.value||await re()}async function re(){if(!_.value){_.value=!0;try{if(!s.isGitRepo){k({time:Date.now(),message:``,ok:!1,error:Q(`@CMDPANEL:当前目录不是Git仓库`)});return}if(u.value&&(o.currentDirectory||``)!==x.value){k({time:Date.now(),message:``,ok:!1,error:Q(`@CMDPANEL:项目目录已切换,定时提交已自动停止`)}),u.value=!1,D&&=(clearTimeout(D),null),O&&=(clearInterval(O),null),v.value=0,V.warning(Q(`@CMDPANEL:项目目录已切换,定时提交已自动停止`));return}if(await s.fetchStatusPorcelain(),s.fileList.length===0){k({time:Date.now(),message:Q(`@CMDPANEL:无变更,跳过本次提交`),ok:!0,skipped:!0});return}let e=``;if(h.value===`ai`){let t=await(await fetch(`/api/config/generate-commit-message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})})).json();if(!t.success){k({time:Date.now(),message:``,ok:!1,error:t.error||Q(`@CMDPANEL:AI 生成失败`)});return}e=t.scope?`${t.type}(${t.scope}): ${t.description}`:`${t.type}: ${t.description}`}else{let t=j(Date.now());e=g.value.trim()||o.defaultCommitMessage||`chore: auto commit at ${t}`}let t=await(await fetch(`/api/add-all`,{method:`POST`})).json();if(!t.success){k({time:Date.now(),message:e,ok:!1,error:t.error||`git add 失败`});return}let n=await s.commitChanges(e,!1);k({time:Date.now(),message:e,ok:n}),n&&m.value&&(await s.pushToRemote()||k({time:Date.now(),message:e,ok:!1,stage:`push`}))}catch(e){k({time:Date.now(),message:``,ok:!1,error:e?.message||String(e)})}finally{_.value=!1,u.value&&te()}}}let P=U(240),ie=U(!1),ae=U(0),oe=U(0);function se(e){ie.value=!0,ae.value=e.clientY,oe.value=P.value,document.addEventListener(`mousemove`,ce),document.addEventListener(`mouseup`,le),e.preventDefault()}function ce(e){if(!ie.value)return;let t=ae.value-e.clientY;P.value=Math.max(Mv,Math.min(Nv,oe.value+t))}function le(){ie.value=!1,document.removeEventListener(`mousemove`,ce),document.removeEventListener(`mouseup`,le)}function I(e){e.key===`ArrowUp`?(e.preventDefault(),P.value=Math.min(Nv,P.value+Pv)):e.key===`ArrowDown`?(e.preventDefault(),P.value=Math.max(Mv,P.value-Pv)):e.key===`Home`?(e.preventDefault(),P.value=Nv):e.key===`End`&&(e.preventDefault(),P.value=Mv)}async function ue(e){let t=String(e.id||e.name);if(l.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=Av(e.command,r);l.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?(V.success(Q(`@CMDPANEL:已在新终端中执行`,{name:e.name})),window.dispatchEvent(new Event(`zen-gitsync:terminal-session-created`))):V.error(t?.error||Q(`@CMDPANEL:执行失败`))}catch(e){V.error(e?.message||Q(`@CMDPANEL:执行失败`))}finally{l.value[t]=!1}}let de={collapsed:n,toggleCollapsed:r,managerVisible:i,openManager:a,configStore:o,gitStore:s,commands:c,isRunning:l,SCHEDULE_SETTINGS_KEY:jv,scheduleEnabled:u,scheduleInterval:d,scheduleUnit:f,scheduleCommitNow:p,scheduleAutoPush:m,scheduleMessageMode:h,scheduleCustomMessage:g,scheduleBusy:_,nextCommitAt:v,nowTick:y,scheduleLogs:b,scheduleStartDir:x,UNIT_MS:S,intervalMs:C,defaultMessagePreview:w,cliEquivalentCommand:T,cliHints:ee,copyCliCommand:E,get scheduleTimer(){return D},set scheduleTimer(e){D=e},get tickTimer(){return O},set tickTimer(e){O=e},armNextTimer:te,toggleSchedule:ne,pushLog:k,logText:A,fmtClock:j,countdownText:M,commitOnceNow:N,runScheduledCommit:re,panelHeight:P,isResizing:ie,startY:ae,startHeight:oe,MIN_PANEL_HEIGHT:Mv,MAX_PANEL_HEIGHT:Nv,KEY_NUDGE_PX:Pv,startResize:se,handleResize:ce,stopResize:le,onResizeKeydown:I,runCommand:ue,get CopyDocument(){return Ce},get $t(){return Q},IconButton:Mt,SvgIcon:jt,CustomCommandManager:Ov};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}});c(),v(),K();var Iv={class:`custom-commands-panel`},Lv={class:`header-left`},Rv={class:`panel-title`},zv=[`aria-valuenow`,`aria-label`],Bv={key:0,class:`empty-container`},Vv={class:`empty-text`},Hv=[`onClick`],Uv={class:`command-left`},Wv={key:0,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Gv={key:1,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Kv={class:`command-info`},qv={class:`command-name`},Jv={key:0,class:`command-desc`},Yv={key:1,class:`command-desc command-text`},Xv={class:`schedule-header`},Zv={class:`schedule-header-left`},Qv={class:`schedule-title`},$v={key:0,class:`schedule-countdown`},ey={class:`schedule-body`},ty={class:`schedule-row`},ny={class:`schedule-label`},ry={class:`schedule-row`},iy={class:`schedule-label`},ay={key:0,class:`schedule-row`},oy={class:`schedule-label`},sy={class:`schedule-row`},cy={class:`schedule-label`},ly={class:`schedule-row schedule-cli-row`},uy={class:`schedule-label`},dy={class:`schedule-cli-box`},fy={class:`schedule-cli-text`},py={key:1,class:`schedule-cli-hints`},my={key:2,class:`schedule-logs`},hy={class:`schedule-log-time`},gy={class:`schedule-log-text`};function _y(e,t,n,i,o,s){let c=E,l=pt,u=Ae,d=ut,f=g,p=w,m=j,_=a,v=L,y=A,b=I;return z(),J(Z,null,[h(`div`,Iv,[h(`div`,{class:`panel-header accordion-header`,onClick:i.toggleCollapsed},[h(`div`,Lv,[P(c,{class:O([`accordion-chevron`,{"is-collapsed":i.collapsed}])},{default:G(()=>[...t[10]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`]),P(i.SvgIcon,{"icon-class":`command-list`,"class-name":`cmd-panel-icon`}),h(`span`,Rv,q(i.$t(`@CMDPANEL:自定义命令`)),1)]),h(`div`,{class:`header-right`,onClick:t[0]||=H(()=>{},[`stop`])},[P(i.IconButton,{size:`small`,tooltip:i.$t(`@CMDPANEL:管理命令`),onClick:i.openManager},{default:G(()=>[P(c,null,{default:G(()=>[...t[11]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`])])]),N(` 拖拽调高度(展开时显示) OPT-4: 补 role/tabindex/aria-orientation + 键盘 nudge `),Y(h(`div`,{class:`resize-handle`,role:`separator`,tabindex:`0`,"aria-orientation":`horizontal`,"aria-valuenow":i.panelHeight,"aria-valuemin":i.MIN_PANEL_HEIGHT,"aria-valuemax":i.MAX_PANEL_HEIGHT,"aria-label":i.$t(`@CMDPANEL:调整自定义命令面板高度(上下方向键)`),onMousedown:i.startResize,onKeydown:i.onResizeKeydown},null,40,zv),[[at,!i.collapsed]]),!i.collapsed&&i.commands.length===0?(z(),J(`div`,Bv,[t[12]||=h(`svg`,{class:`empty-icon`,viewBox:`0 0 1024 1024`,width:`40`,height:`40`},[h(`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),h(`p`,Vv,q(i.$t(`@CMDPANEL:暂无自定义命令`)),1),P(l,{size:`small`,text:``,type:`primary`,onClick:i.openManager},{default:G(()=>[M(q(i.$t(`@CMDPANEL:去添加`)),1)]),_:1})])):i.collapsed?N(`v-if`,!0):(z(),J(`div`,{key:1,class:`commands-list`,style:R({maxHeight:i.panelHeight+`px`})},[(z(!0),J(Z,null,r(i.commands,e=>(z(),J(`div`,{key:e.id||e.name,class:O([`command-item`,{running:i.isRunning[String(e.id||e.name)]}]),onClick:t=>i.runCommand(e)},[h(`div`,Uv,[P(c,{class:O([`play-icon`,{"is-loading":i.isRunning[String(e.id||e.name)]}])},{default:G(()=>[i.isRunning[String(e.id||e.name)]?(z(),J(`svg`,Gv,[...t[14]||=[h(`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(),J(`svg`,Wv,[...t[13]||=[h(`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),h(`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`]),h(`div`,Kv,[h(`span`,qv,q(e.name),1),e.description?(z(),J(`span`,Jv,q(e.description),1)):(z(),J(`span`,Yv,q(e.command),1))])])],10,Hv))),128))],4)),N(` 定时提交:按间隔自动 add-all + commit,支持默认信息 / AI 生成 `),h(`div`,{class:O([`schedule-section`,{"is-running":i.scheduleEnabled}])},[h(`div`,Xv,[h(`div`,Zv,[P(c,{class:`schedule-icon`},{default:G(()=>[...t[15]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896z`}),h(`path`,{fill:`currentColor`,d:`M480 256a32 32 0 0 1 32 32v224a32 32 0 0 1-14.08 26.56l-128 85.312a32 32 0 1 1-35.456-53.248L448 495.168V288a32 32 0 0 1 32-32z`})],-1)]]),_:1}),h(`span`,Qv,q(i.$t(`@CMDPANEL:定时提交`)),1),i.scheduleEnabled&&i.countdownText?(z(),J(`span`,$v,q(i.$t(`@CMDPANEL:下次提交`))+` `+q(i.countdownText),1)):N(`v-if`,!0)]),h(`div`,{class:`schedule-header-right`,onClick:t[2]||=H(()=>{},[`stop`])},[P(u,{modelValue:i.scheduleEnabled,"onUpdate:modelValue":t[1]||=e=>i.scheduleEnabled=e,disabled:!i.gitStore.isGitRepo||!i.scheduleEnabled&&i.scheduleBusy,"aria-label":i.$t(`@CMDPANEL:定时提交`),onChange:i.toggleSchedule},null,8,[`modelValue`,`disabled`,`aria-label`])])]),h(`div`,ey,[h(`div`,ty,[h(`span`,ny,q(i.$t(`@CMDPANEL:提交间隔`)),1),P(d,{modelValue:i.scheduleInterval,"onUpdate:modelValue":t[3]||=e=>i.scheduleInterval=e,min:1,max:999,step:i.scheduleUnit===`min`?5:1,size:`small`,"controls-position":`right`,class:`schedule-interval-input`,disabled:i.scheduleEnabled},null,8,[`modelValue`,`step`,`disabled`]),P(p,{modelValue:i.scheduleUnit,"onUpdate:modelValue":t[4]||=e=>i.scheduleUnit=e,size:`small`,class:`schedule-unit-select`,disabled:i.scheduleEnabled},{default:G(()=>[P(f,{label:i.$t(`@CMDPANEL:分钟`),value:`min`},null,8,[`label`]),P(f,{label:i.$t(`@CMDPANEL:小时`),value:`hour`},null,8,[`label`]),P(f,{label:i.$t(`@CMDPANEL:天`),value:`day`},null,8,[`label`])]),_:1},8,[`modelValue`,`disabled`]),P(m,{modelValue:i.scheduleCommitNow,"onUpdate:modelValue":t[5]||=e=>i.scheduleCommitNow=e,size:`small`,disabled:i.scheduleEnabled,class:`schedule-commit-now`},{default:G(()=>[M(q(i.$t(`@CMDPANEL:启动时立即提交一次`)),1)]),_:1},8,[`modelValue`,`disabled`])]),h(`div`,ry,[h(`span`,iy,q(i.$t(`@CMDPANEL:提交信息`)),1),P(y,{modelValue:i.scheduleMessageMode,"onUpdate:modelValue":t[6]||=e=>i.scheduleMessageMode=e,size:`small`,disabled:i.scheduleEnabled},{default:G(()=>[P(_,{value:`default`},{default:G(()=>[M(q(i.$t(`@CMDPANEL:默认提交信息`)),1)]),_:1}),P(_,{value:`ai`},{default:G(()=>[M(q(i.$t(`@CMDPANEL:AI 生成`))+` `,1),P(v,{placement:`top`,effect:`dark`,"show-after":200},{content:G(()=>[h(`span`,null,q(i.$t(`@CMDPANEL:使用通用设置中已配置的默认模型,按当前变更生成 Conventional Commits 信息`)),1)]),default:G(()=>[P(c,{class:`schedule-help-icon`},{default:G(()=>[...t[16]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm0 64a384 384 0 1 0 0 768 384 384 0 0 0 0-768zm0 128a96 96 0 0 1 96 96c0 36.032-20.864 64.192-51.392 82.752-8.832 5.376-16.832 9.6-27.264 14.272l-5.312 2.368v16.832a32 32 0 0 1-63.488 5.632L448 576v-64a32 32 0 0 1 32-32c22.528 0 32.896-3.776 44.48-10.816C537.344 461.632 544 452.032 544 416a32 32 0 0 0-64 0 32 32 0 0 1-64 0 96 96 0 0 1 96-96zm0 416a40 40 0 1 1 0-80 40 40 0 0 1 0 80z`})],-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`disabled`]),P(l,{size:`small`,class:`schedule-once-btn`,disabled:!i.gitStore.isGitRepo||i.scheduleBusy,loading:i.scheduleBusy,onClick:i.commitOnceNow},{default:G(()=>[M(q(i.$t(`@CMDPANEL:立即提交一次`)),1)]),_:1},8,[`disabled`,`loading`])]),N(` 默认模式:展示实际会用的信息并可编辑;留空则回落到全局默认/时间戳兜底 `),i.scheduleMessageMode==="default"?(z(),J(`div`,ay,[h(`span`,oy,q(i.$t(`@CMDPANEL:信息内容`)),1),P(b,{modelValue:i.scheduleCustomMessage,"onUpdate:modelValue":t[7]||=e=>i.scheduleCustomMessage=e,size:`small`,class:`schedule-message-input`,placeholder:i.defaultMessagePreview,maxlength:200,clearable:``,disabled:i.scheduleEnabled},null,8,[`modelValue`,`placeholder`,`disabled`])])):N(`v-if`,!0),h(`div`,sy,[h(`span`,cy,q(i.$t(`@CMDPANEL:推送`)),1),P(m,{modelValue:i.scheduleAutoPush,"onUpdate:modelValue":t[8]||=e=>i.scheduleAutoPush=e,size:`small`,disabled:i.scheduleEnabled},{default:G(()=>[M(q(i.$t(`@CMDPANEL:提交后自动推送到远程`)),1)]),_:1},8,[`modelValue`,`disabled`])]),N(` 等效命令行:把当前设置翻译成等价的 CLI 调用,可一键复制到终端执行 `),h(`div`,ly,[h(`span`,uy,q(i.$t(`@CMDPANEL:等效命令行`)),1),h(`div`,dy,[h(`code`,fy,q(i.cliEquivalentCommand),1),P(i.IconButton,{size:`small`,tooltip:i.$t(`@CMDPANEL:复制命令行`),"custom-class":`schedule-cli-copy`,onClick:i.copyCliCommand},{default:G(()=>[P(c,null,{default:G(()=>[P(i.CopyDocument)]),_:1})]),_:1},8,[`tooltip`])])]),i.cliHints.length>0?(z(),J(`div`,py,[(z(!0),J(Z,null,r(i.cliHints,(e,t)=>(z(),J(`div`,{key:t,class:`schedule-cli-hint`},q(e),1))),128))])):N(`v-if`,!0),N(` 运行日志:只展示最近几条 `),i.scheduleLogs.length>0?(z(),J(`div`,my,[(z(!0),J(Z,null,r(i.scheduleLogs.slice(0,3),(e,t)=>(z(),J(`div`,{key:e.time+`-`+t,class:O([`schedule-log-item`,{"is-error":!e.ok,"is-skipped":e.skipped}])},[h(`span`,hy,q(i.fmtClock(e.time)),1),h(`span`,gy,q(i.logText(e)),1)],2))),128))])):N(`v-if`,!0)])],2)]),N(` 命令管理弹窗 `),P(i.CustomCommandManager,{visible:i.managerVisible,"onUpdate:visible":t[9]||=e=>i.managerVisible=e,fullscreen:!0,onExecuteCommand:i.runCommand},null,8,[`visible`])],64)}var vy=$(Fv,[[`render`,_y],[`__scopeId`,`data-v-70af0dcb`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/CustomCommandsPanel.vue`]]),yy=e(gt(),1),by={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 xy(e={}){let t=new yy.default({fg:e.fg??`#e5e5e5`,bg:e.bg??`transparent`,newline:e.newline??!1,escapeXML:e.escapeXML??!1,stream:e.stream??!1,colors:e.colors??by});function n(e){return t.toHtml(e)}return{ansiToHtml:n,converter:t}}X(),c();function Sy(){let e=U([]),t=U(!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:[]:V.error(n?.error||`获取终端会话失败`)}catch(e){V.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?(V.success(`已重新启动终端`),await n(),!0):(V.error(r?.error||`重新启动失败`),!1)}catch(e){return V.error(e?.message||`重新启动失败`),!1}finally{t.value=!1}}async function i(e){try{await Me.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?(V.success(`已删除`),await n(),!0):(V.error(r?.error||`删除失败`),!1)}catch(e){return V.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:F(()=>t.value),count:F(()=>e.value.length),refresh:n,restart:r,remove:i,upsert:a}}c(),X();var Cy=8e3,wy=T({__name:`CommandConsole`,setup(e,{expose:t}){t();let n=_(()=>St(()=>Promise.resolve().then(()=>V_),void 0)),r=_(()=>St(()=>import(`./ProjectStartupButton-Ci19q1bL.js`),__vite__mapDeps([12,2,1,3,4,5,6,7,13,14,15,16,10,17,18,19]))),a=_(()=>St(()=>import(`./FlowOrchestrationWorkspace-CIIdKK3v.js`),__vite__mapDeps([20,2,1,3,4,5,6,7,13,14,15,16,10,17,18,21,22,23,24,25]))),s=_(()=>St(()=>import(`./FlowExecutionViewer-VFnxkbIs.js`),__vite__mapDeps([26,1,2,3,4,7,5,6,21,22,23,10,24,27]))),c=Lt(),u=Bt(),d=dm();function f(){Fe().catch(e=>{V.error(e?.message||Q(`@CF05E:提交后启动项执行失败`))})}async function p(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 m({flowData:t,orchestrationMeta:n});return}V.warning(Q(`@CF05E:该编排缺少流程数据,无法执行`))}async function m(e){let t=e?.flowData;if(!t||!Array.isArray(t.nodes)||!Array.isArray(t.edges))return;let n=t.nodes,r=t.edges;Se.value=!0,S.value=!0,C.value=!1,k.value=[],A.value=-1,j.value=t,M.value=!0,N.value=null,re.value=[],P.value=[],ie.value=[],oe.value=(e?.orchestrationMeta?.name||``).trim(),se.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){V.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){V.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(!S.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(N.value=n.id,n.type===`start`){let e=s.get(n.id)||[];re.value=re.value.includes(n.id)?re.value:[...re.value,n.id],e[0]?.id&&(P.value=P.value.includes(e[0].id)?P.value:[...P.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(re.value=re.value.includes(n.id)?re.value:[...re.value,n.id],e?.id&&(P.value=P.value.includes(e.id)?P.value:[...P.value,e.id]),f=e?.target,o)break;continue}let u=s.get(n.id)||[],m=e?.isSingleExecution!==!0&&!!u[0]?.target;if(!await Z([{...r,nodeId:n.id,enabled:r.enabled}],0,!0,e?.orchestrationMeta,{nodeOutputs:i,skipUiSetup:!0,skipUiTeardown:!0,forceTerminalConfirm:m})){n.id&&!ie.value.includes(n.id)&&(ie.value=[...ie.value,n.id]);break}if(!S.value)break;re.value=re.value.includes(n.id)?re.value:[...re.value,n.id];let h=s.get(n.id)||[];if(h[0]?.id&&(P.value=P.value.includes(h[0].id)?P.value:[...P.value,h[0].id]),f=h[0]?.target,o)break}}catch(e){String(e?.message||e)!==Q(`@CF05E:用户停止执行`)&&(N.value&&!ie.value.includes(N.value)&&(ie.value=[...ie.value,N.value]),V.error(e?.message||String(e)))}finally{S.value=!1,C.value=!1,A.value=-1,k.value=[],N.value=null}}let h=Rt(),g=U(null),v=U(``),b=U(``),S=U(!1),C=U(!1),w=U([]),T=0;function ee(){Me.confirm(Q(`@CF05E:确定要清空所有执行历史吗?此操作不可撤销。`),Q(`@CF05E:清空历史`),{confirmButtonText:Q(`@CF05E:清空`),cancelButtonText:Q(`@CF05E:取消`),type:`warning`}).then(()=>{w.value=[],V.success(Q(`@CF05E:执行历史已清空`))}).catch(()=>{})}function E(){ue&&ue(!0)}function O(){ue&&ue(!1),S.value=!1,C.value=!1}function te(){R&&R(!0)}function ne(){R&&R(!1),S.value=!1,C.value=!1}let k=U([]),A=U(-1),j=U(null),M=U(!0),N=U(null),re=U([]),P=U([]),ie=U([]),oe=U(``),se=U(``),ce=U(!1),I=U(``),ue=null,de=U(!1),L=U(``),R=null,he=U(!1),ve=U(``),z=U([]),ye=U({}),B=null,be=F({get:()=>he.value,set:e=>{he.value=e}});function xe(){let e=Array.isArray(z.value)?z.value:[];for(let t of e){if(!t?.required)continue;let e=ye.value?.[t.name];if(e==null||String(e).trim()===``){V.warning(Q(`@UINPUT:请输入必填参数的值`,{name:t.name}));return}}B&&B(!0)}function H(){B&&B(!1),S.value=!1,C.value=!1}let{ansiToHtml:W}=xy(),Se=U(!1),G=F({get:()=>c.ui.commandConsole.useTerminal,set:e=>{c.ui.commandConsole.useTerminal=e}}),{sessions:Ce,loading:we,refresh:K,restart:q,remove:Te,upsert:Ee}=Sy(),De=F({get:()=>c.ui.commandConsole.showTerminalSessions,set:e=>{c.ui.commandConsole.showTerminalSessions=e}}),Oe=F(()=>Ce.value.length);We(Oe,e=>{d.setCount(e)},{immediate:!0});let ke=U(!1);function Ae(e){return new Promise(t=>setTimeout(t,e))}async function je(e=8e3){let t=Date.now();for(;Date.now()-t<e;){if(g.value&&g.value.connected)return!0;await Ae(100)}return!1}async function Ne(e){let t=c.customCommands.find(t=>String(t.id)===String(e));if(!t){V.warning(`启动项命令不存在: ${e}`);return}let n=t.directory||v.value,r=t.command;if(G.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?Ee(e.session):await K():V.error(e?.error||Q(`@CF05E:启动项命令执行失败`))}catch(e){V.error(e?.message||Q(`@CF05E:启动项命令执行失败`))}return}if(!await je()){V.error(Q(`@CF05E:Socket 连接未就绪,无法自动执行交互式启动项`));return}await ft(r,n)}async function Pe(e){let t=c.orchestrations.find(t=>t.id===e);if(!t){V.warning(`启动项工作流不存在: ${e}`);return}await p(t)}async function Fe(){await c.loadConfig(!1);let e=c.afterQuickPushAction;e?.enabled&&e?.refId&&(e.type===`workflow`?await Pe(e.refId):await Ne(e.refId))}async function J(){if(ke.value||(ke.value=!0,await c.loadConfig(!1),!c.startupAutoRun))return;let e=(c.startupItems||[]).filter(e=>e?.enabled!==!1);if(e.length!==0)for(let t of e)t.type===`workflow`?await Pe(t.refId):await Ne(t.refId)}let Ie=e=>Math.min(85,Math.max(15,e)),Le=F({get:()=>Ie(c.ui.commandConsole.splitPercent),set:e=>{c.ui.commandConsole.splitPercent=Ie(e)}}),Y=U(null),ze=()=>{let e=Y.value?.$el??Y.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},Be=()=>{let e=Y.value?.$el??Y.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=ze();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!==Le.value&&(Le.value=e)}},Ve=F({get(){return`${Ie(Le.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=ze();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=ze();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(Le.value=Ie(t))}});async function He(e=!0){if(Ce.value.length!==0)try{let t=await(await fetch(`/api/terminal-sessions/status?cleanup=${e?`true`:`false`}`)).json();t?.success&&(Ce.value=Array.isArray(t.sessions)?t.sessions:[])}catch{}}let Ue=null;function Ke(){Ue!==null&&(clearInterval(Ue),Ue=null)}function X(){Ue===null&&(Ue=setInterval(()=>{He(!0)},Cy))}We(Oe,e=>{e>0?X():Ke()},{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 Ye=U(!1),Xe=U(!1);async function Qe(){let e=b.value.trim();e&&!S.value&&(b.value=``,await $e(e,v.value))}async function $e(e,t=v.value){if(S.value=!0,G.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?(V.success(Q(`@CF05E:已在新终端中执行命令`)),n?.session?Ee(n.session):await K()):V.error(n?.error||Q(`@CF05E:执行失败`))}catch(e){V.error(e?.message||Q(`@CF05E:执行失败`))}finally{S.value=!1}return}let n={id:++T,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0};w.value.unshift(n),b.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(`
115
+ ui.pickerGlobalSearch,弹窗里「全局」开关的选择会被记住(落盘见 configStore)。 `),P(r.FilePicker,{visible:r.isBrowserDialogVisible,locale:r.currentLocale,"default-global-search":r.configStore.ui.pickerGlobalSearch,onGlobalSearchChange:t[6]||=e=>{r.configStore.ui.pickerGlobalSearch=e},onClose:t[7]||=e=>r.isBrowserDialogVisible=!1,onConfirm:t[8]||=e=>{r.onBrowserSelect(e[0]),r.isBrowserDialogVisible=!1}},null,8,[`visible`,`locale`,`default-global-search`]),N(` NPM 命令选择弹窗 `),P(r.CommonDialog,{modelValue:r.npmDialogVisible,"onUpdate:modelValue":t[10]||=e=>r.npmDialogVisible=e,title:r.$t(`@CMD01:选择NPM命令`),"close-on-click-modal":!1,"append-to-body":!0,width:`680px`,type:`flex`,"z-index":3000010,"modal-class":`npm-sync-overlay`,"custom-class":`npm-sync-dialog`},{footer:G(()=>[h(`div`,Tv,[h(`span`,Ev,q(r.$t(`@CMD01:已选择`,{count:r.npmSelected.length})),1),P(o,{onClick:t[9]||=e=>r.npmDialogVisible=!1},{default:G(()=>[M(q(r.$t(`@CMD01:取消`)),1)]),_:1}),P(o,{type:`primary`,loading:r.isDoingSyncNpm,disabled:r.npmSelected.length===0,onClick:r.doSyncSelectedNpm},{default:G(()=>[M(q(r.$t(`@CMD01:开始同步`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:G(()=>[Y((z(),J(`div`,Cv,[P(d,{ref:`npmTableRef`,data:r.npmScriptItems,style:{width:`100%`},"max-height":`420`,stripe:``,onSelectionChange:r.onNpmSelectionChange},{default:G(()=>[P(l,{type:`selection`,width:`44`,selectable:()=>!0}),P(l,{prop:`packageName`,label:r.$t(`@CMD01:包名`),"min-width":`140`},null,8,[`label`]),P(l,{prop:`scriptName`,label:r.$t(`@CMD01:脚本名`),"min-width":`120`},null,8,[`label`]),P(l,{prop:`scriptName`,label:r.$t(`@CMD01:命令`),"min-width":`160`},{default:G(e=>[h(`code`,wv,`npm run `+q(e.row.scriptName),1)]),_:1},8,[`label`]),P(l,{label:r.$t(`@CMD01:状态`),width:`80`,align:`center`},{default:G(e=>[e.row.isDuplicate?(z(),p(m,{key:0,type:`warning`,size:`small`},{default:G(()=>[M(q(r.$t(`@CMD01:已存在`)),1)]),_:1})):(z(),p(m,{key:1,type:`success`,size:`small`},{default:G(()=>[M(q(r.$t(`@CMD01:新增`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`])])),[[g,r.isLoadingNpm]])]),_:1},8,[`modelValue`,`title`])],64)}var Ov=$(B_,[[`render`,Dv],[`__scopeId`,`data-v-c7d52d8a`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/CustomCommandManager.vue`]]);function kv(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 Av(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}c(),X();var jv=`zen-gitsync:schedule-commit-settings`,Mv=120,Nv=600,Pv=16,Fv=T({__name:`CustomCommandsPanel`,setup(e,{expose:t}){t();let n=U(!1);function r(){n.value=!n.value}let i=U(!1);function a(){i.value=!0}let o=Lt(),s=Bt(),c=F(()=>o.customCommands||[]),l=U({}),u=U(!1),d=U(30),f=U(`min`),p=U(!0),m=U(!0),h=U(`default`),g=U(``),_=U(!1),v=U(0),y=U(Date.now()),b=U([]),x=U(``),S={min:6e4,hour:36e5,day:864e5},C=F(()=>Math.max(1,Number(d.value)||1)*S[f.value]);We([d,f,p,h,g,m],()=>{try{localStorage.setItem(jv,JSON.stringify({interval:d.value,unit:f.value,commitNow:p.value,messageMode:h.value,customMessage:g.value,autoPush:m.value}))}catch{}},{deep:!0});try{let e=JSON.parse(localStorage.getItem(jv)||`{}`);e.interval&&(d.value=Math.max(1,Number(e.interval)||30)),e.unit&&S[e.unit]&&(f.value=e.unit),typeof e.commitNow==`boolean`&&(p.value=e.commitNow),(e.messageMode===`ai`||e.messageMode==="default")&&(h.value=e.messageMode),typeof e.customMessage==`string`&&(g.value=e.customMessage),typeof e.autoPush==`boolean`&&(m.value=e.autoPush)}catch{}let w=F(()=>o.defaultCommitMessage||`chore: auto commit at ${j(Date.now())}`),T=F(()=>{let e=[`g`],t=g.value.trim();return h.value===`ai`?e.push(`--ai`):t?e.push(`-m="${t.replace(/"/g,`\\"`)}"`):o.defaultCommitMessage?e.push(`-y`):e.push(`-m="chore: auto commit at ${j(Date.now())}"`),e.push(`--interval=${Math.round(C.value/1e3)}`),o.currentDirectory&&e.push(`--path="${o.currentDirectory}"`),e.join(` `)}),ee=F(()=>{let e=[];return p.value||e.push(Q(`@CMDPANEL:命令行模式启动时会立即提交一次,没有跳过参数`)),m.value||e.push(Q(`@CMDPANEL:命令行模式提交成功后会推送远程,没有关闭参数`)),e});async function E(){try{await navigator.clipboard.writeText(T.value),V.success(Q(`@CMDPANEL:命令行已复制`))}catch(e){V.error(`${Q(`@CMDPANEL:复制失败`)}${e?.message?`: `+e.message:``}`)}}let D=null,O=null;function te(){u.value&&(D&&clearTimeout(D),v.value=Date.now()+C.value,D=setTimeout(re,C.value))}function ne(e){e?(u.value=!0,x.value=o.currentDirectory||``,y.value=Date.now(),O=setInterval(()=>{y.value=Date.now()},1e3),p.value?re():te(),V.success(Q(`@CMDPANEL:定时提交已启动`))):(u.value=!1,D&&=(clearTimeout(D),null),O&&=(clearInterval(O),null),v.value=0,V.info(Q(`@CMDPANEL:定时提交已停止`)))}Ye(()=>{D&&clearTimeout(D),O&&clearInterval(O)});function k(e){b.value.unshift(e),b.value.length>20&&(b.value.length=20)}function A(e){return e.ok?e.message:e.stage===`push`?Q(`@CMDPANEL:推送失败`):`${Q(`@CMDPANEL:提交失败`)}: ${e.error||``}`}function j(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}let M=F(()=>{if(!u.value||!v.value)return``;let e=Math.max(0,v.value-y.value),t=Math.floor(e/1e3),n=e=>String(e).padStart(2,`0`),r=Math.floor(t/3600),i=Math.floor(t%3600/60),a=t%60;return r>0?`${n(r)}:${n(i)}:${n(a)}`:`${n(i)}:${n(a)}`});async function N(){_.value||await re()}async function re(){if(!_.value){_.value=!0;try{if(!s.isGitRepo){k({time:Date.now(),message:``,ok:!1,error:Q(`@CMDPANEL:当前目录不是Git仓库`)});return}if(u.value&&(o.currentDirectory||``)!==x.value){k({time:Date.now(),message:``,ok:!1,error:Q(`@CMDPANEL:项目目录已切换,定时提交已自动停止`)}),u.value=!1,D&&=(clearTimeout(D),null),O&&=(clearInterval(O),null),v.value=0,V.warning(Q(`@CMDPANEL:项目目录已切换,定时提交已自动停止`));return}if(await s.fetchStatusPorcelain(),s.fileList.length===0){k({time:Date.now(),message:Q(`@CMDPANEL:无变更,跳过本次提交`),ok:!0,skipped:!0});return}let e=``;if(h.value===`ai`){let t=await(await fetch(`/api/config/generate-commit-message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})})).json();if(!t.success){k({time:Date.now(),message:``,ok:!1,error:t.error||Q(`@CMDPANEL:AI 生成失败`)});return}e=t.scope?`${t.type}(${t.scope}): ${t.description}`:`${t.type}: ${t.description}`}else{let t=j(Date.now());e=g.value.trim()||o.defaultCommitMessage||`chore: auto commit at ${t}`}let t=await(await fetch(`/api/add-all`,{method:`POST`})).json();if(!t.success){k({time:Date.now(),message:e,ok:!1,error:t.error||`git add 失败`});return}let n=await s.commitChanges(e,!1);k({time:Date.now(),message:e,ok:n}),n&&m.value&&(await s.pushToRemote()||k({time:Date.now(),message:e,ok:!1,stage:`push`}))}catch(e){k({time:Date.now(),message:``,ok:!1,error:e?.message||String(e)})}finally{_.value=!1,u.value&&te()}}}let P=U(240),ie=U(!1),ae=U(0),oe=U(0);function se(e){ie.value=!0,ae.value=e.clientY,oe.value=P.value,document.addEventListener(`mousemove`,ce),document.addEventListener(`mouseup`,le),e.preventDefault()}function ce(e){if(!ie.value)return;let t=ae.value-e.clientY;P.value=Math.max(Mv,Math.min(Nv,oe.value+t))}function le(){ie.value=!1,document.removeEventListener(`mousemove`,ce),document.removeEventListener(`mouseup`,le)}function I(e){e.key===`ArrowUp`?(e.preventDefault(),P.value=Math.min(Nv,P.value+Pv)):e.key===`ArrowDown`?(e.preventDefault(),P.value=Math.max(Mv,P.value-Pv)):e.key===`Home`?(e.preventDefault(),P.value=Nv):e.key===`End`&&(e.preventDefault(),P.value=Mv)}async function ue(e){let t=String(e.id||e.name);if(l.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=Av(e.command,r);l.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?(V.success(Q(`@CMDPANEL:已在新终端中执行`,{name:e.name})),window.dispatchEvent(new Event(`zen-gitsync:terminal-session-created`))):V.error(t?.error||Q(`@CMDPANEL:执行失败`))}catch(e){V.error(e?.message||Q(`@CMDPANEL:执行失败`))}finally{l.value[t]=!1}}let de={collapsed:n,toggleCollapsed:r,managerVisible:i,openManager:a,configStore:o,gitStore:s,commands:c,isRunning:l,SCHEDULE_SETTINGS_KEY:jv,scheduleEnabled:u,scheduleInterval:d,scheduleUnit:f,scheduleCommitNow:p,scheduleAutoPush:m,scheduleMessageMode:h,scheduleCustomMessage:g,scheduleBusy:_,nextCommitAt:v,nowTick:y,scheduleLogs:b,scheduleStartDir:x,UNIT_MS:S,intervalMs:C,defaultMessagePreview:w,cliEquivalentCommand:T,cliHints:ee,copyCliCommand:E,get scheduleTimer(){return D},set scheduleTimer(e){D=e},get tickTimer(){return O},set tickTimer(e){O=e},armNextTimer:te,toggleSchedule:ne,pushLog:k,logText:A,fmtClock:j,countdownText:M,commitOnceNow:N,runScheduledCommit:re,panelHeight:P,isResizing:ie,startY:ae,startHeight:oe,MIN_PANEL_HEIGHT:Mv,MAX_PANEL_HEIGHT:Nv,KEY_NUDGE_PX:Pv,startResize:se,handleResize:ce,stopResize:le,onResizeKeydown:I,runCommand:ue,get CopyDocument(){return Ce},get $t(){return Q},IconButton:Mt,SvgIcon:jt,CustomCommandManager:Ov};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}});c(),v(),K();var Iv={class:`custom-commands-panel`},Lv={class:`header-left`},Rv={class:`panel-title`},zv=[`aria-valuenow`,`aria-label`],Bv={key:0,class:`empty-container`},Vv={class:`empty-text`},Hv=[`onClick`],Uv={class:`command-left`},Wv={key:0,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Gv={key:1,viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},Kv={class:`command-info`},qv={class:`command-name`},Jv={key:0,class:`command-desc`},Yv={key:1,class:`command-desc command-text`},Xv={class:`schedule-header`},Zv={class:`schedule-header-left`},Qv={class:`schedule-title`},$v={key:0,class:`schedule-countdown`},ey={class:`schedule-body`},ty={class:`schedule-row`},ny={class:`schedule-label`},ry={class:`schedule-row`},iy={class:`schedule-label`},ay={key:0,class:`schedule-row`},oy={class:`schedule-label`},sy={class:`schedule-row`},cy={class:`schedule-label`},ly={class:`schedule-row schedule-cli-row`},uy={class:`schedule-label`},dy={class:`schedule-cli-box`},fy={class:`schedule-cli-text`},py={key:1,class:`schedule-cli-hints`},my={key:2,class:`schedule-logs`},hy={class:`schedule-log-time`},gy={class:`schedule-log-text`};function _y(e,t,n,i,o,s){let c=E,l=pt,u=Ae,d=ut,f=g,p=w,m=j,_=a,v=L,y=A,b=I;return z(),J(Z,null,[h(`div`,Iv,[h(`div`,{class:`panel-header accordion-header`,onClick:i.toggleCollapsed},[h(`div`,Lv,[P(c,{class:O([`accordion-chevron`,{"is-collapsed":i.collapsed}])},{default:G(()=>[...t[10]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`]),P(i.SvgIcon,{"icon-class":`command-list`,"class-name":`cmd-panel-icon`}),h(`span`,Rv,q(i.$t(`@CMDPANEL:自定义命令`)),1)]),h(`div`,{class:`header-right`,onClick:t[0]||=H(()=>{},[`stop`])},[P(i.IconButton,{size:`small`,tooltip:i.$t(`@CMDPANEL:管理命令`),onClick:i.openManager},{default:G(()=>[P(c,null,{default:G(()=>[...t[11]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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`])])]),N(` 拖拽调高度(展开时显示) OPT-4: 补 role/tabindex/aria-orientation + 键盘 nudge `),Y(h(`div`,{class:`resize-handle`,role:`separator`,tabindex:`0`,"aria-orientation":`horizontal`,"aria-valuenow":i.panelHeight,"aria-valuemin":i.MIN_PANEL_HEIGHT,"aria-valuemax":i.MAX_PANEL_HEIGHT,"aria-label":i.$t(`@CMDPANEL:调整自定义命令面板高度(上下方向键)`),onMousedown:i.startResize,onKeydown:i.onResizeKeydown},null,40,zv),[[at,!i.collapsed]]),!i.collapsed&&i.commands.length===0?(z(),J(`div`,Bv,[t[12]||=h(`svg`,{class:`empty-icon`,viewBox:`0 0 1024 1024`,width:`40`,height:`40`},[h(`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),h(`p`,Vv,q(i.$t(`@CMDPANEL:暂无自定义命令`)),1),P(l,{size:`small`,text:``,type:`primary`,onClick:i.openManager},{default:G(()=>[M(q(i.$t(`@CMDPANEL:去添加`)),1)]),_:1})])):i.collapsed?N(`v-if`,!0):(z(),J(`div`,{key:1,class:`commands-list`,style:R({maxHeight:i.panelHeight+`px`})},[(z(!0),J(Z,null,r(i.commands,e=>(z(),J(`div`,{key:e.id||e.name,class:O([`command-item`,{running:i.isRunning[String(e.id||e.name)]}]),onClick:t=>i.runCommand(e)},[h(`div`,Uv,[P(c,{class:O([`play-icon`,{"is-loading":i.isRunning[String(e.id||e.name)]}])},{default:G(()=>[i.isRunning[String(e.id||e.name)]?(z(),J(`svg`,Gv,[...t[14]||=[h(`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(),J(`svg`,Wv,[...t[13]||=[h(`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),h(`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`]),h(`div`,Kv,[h(`span`,qv,q(e.name),1),e.description?(z(),J(`span`,Jv,q(e.description),1)):(z(),J(`span`,Yv,q(e.command),1))])])],10,Hv))),128))],4)),N(` 定时提交:按间隔自动 add-all + commit,支持默认信息 / AI 生成 `),h(`div`,{class:O([`schedule-section`,{"is-running":i.scheduleEnabled}])},[h(`div`,Xv,[h(`div`,Zv,[P(c,{class:`schedule-icon`},{default:G(()=>[...t[15]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896z`}),h(`path`,{fill:`currentColor`,d:`M480 256a32 32 0 0 1 32 32v224a32 32 0 0 1-14.08 26.56l-128 85.312a32 32 0 1 1-35.456-53.248L448 495.168V288a32 32 0 0 1 32-32z`})],-1)]]),_:1}),h(`span`,Qv,q(i.$t(`@CMDPANEL:定时提交`)),1),i.scheduleEnabled&&i.countdownText?(z(),J(`span`,$v,q(i.$t(`@CMDPANEL:下次提交`))+` `+q(i.countdownText),1)):N(`v-if`,!0)]),h(`div`,{class:`schedule-header-right`,onClick:t[2]||=H(()=>{},[`stop`])},[P(u,{modelValue:i.scheduleEnabled,"onUpdate:modelValue":t[1]||=e=>i.scheduleEnabled=e,disabled:!i.gitStore.isGitRepo||!i.scheduleEnabled&&i.scheduleBusy,"aria-label":i.$t(`@CMDPANEL:定时提交`),onChange:i.toggleSchedule},null,8,[`modelValue`,`disabled`,`aria-label`])])]),h(`div`,ey,[h(`div`,ty,[h(`span`,ny,q(i.$t(`@CMDPANEL:提交间隔`)),1),P(d,{modelValue:i.scheduleInterval,"onUpdate:modelValue":t[3]||=e=>i.scheduleInterval=e,min:1,max:999,step:i.scheduleUnit===`min`?5:1,size:`small`,"controls-position":`right`,class:`schedule-interval-input`,disabled:i.scheduleEnabled},null,8,[`modelValue`,`step`,`disabled`]),P(p,{modelValue:i.scheduleUnit,"onUpdate:modelValue":t[4]||=e=>i.scheduleUnit=e,size:`small`,class:`schedule-unit-select`,disabled:i.scheduleEnabled},{default:G(()=>[P(f,{label:i.$t(`@CMDPANEL:分钟`),value:`min`},null,8,[`label`]),P(f,{label:i.$t(`@CMDPANEL:小时`),value:`hour`},null,8,[`label`]),P(f,{label:i.$t(`@CMDPANEL:天`),value:`day`},null,8,[`label`])]),_:1},8,[`modelValue`,`disabled`]),P(m,{modelValue:i.scheduleCommitNow,"onUpdate:modelValue":t[5]||=e=>i.scheduleCommitNow=e,size:`small`,disabled:i.scheduleEnabled,class:`schedule-commit-now`},{default:G(()=>[M(q(i.$t(`@CMDPANEL:启动时立即提交一次`)),1)]),_:1},8,[`modelValue`,`disabled`])]),h(`div`,ry,[h(`span`,iy,q(i.$t(`@CMDPANEL:提交信息`)),1),P(y,{modelValue:i.scheduleMessageMode,"onUpdate:modelValue":t[6]||=e=>i.scheduleMessageMode=e,size:`small`,disabled:i.scheduleEnabled},{default:G(()=>[P(_,{value:`default`},{default:G(()=>[M(q(i.$t(`@CMDPANEL:默认提交信息`)),1)]),_:1}),P(_,{value:`ai`},{default:G(()=>[M(q(i.$t(`@CMDPANEL:AI 生成`))+` `,1),P(v,{placement:`top`,effect:`dark`,"show-after":200},{content:G(()=>[h(`span`,null,q(i.$t(`@CMDPANEL:使用通用设置中已配置的默认模型,按当前变更生成 Conventional Commits 信息`)),1)]),default:G(()=>[P(c,{class:`schedule-help-icon`},{default:G(()=>[...t[16]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{fill:`currentColor`,d:`M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm0 64a384 384 0 1 0 0 768 384 384 0 0 0 0-768zm0 128a96 96 0 0 1 96 96c0 36.032-20.864 64.192-51.392 82.752-8.832 5.376-16.832 9.6-27.264 14.272l-5.312 2.368v16.832a32 32 0 0 1-63.488 5.632L448 576v-64a32 32 0 0 1 32-32c22.528 0 32.896-3.776 44.48-10.816C537.344 461.632 544 452.032 544 416a32 32 0 0 0-64 0 32 32 0 0 1-64 0 96 96 0 0 1 96-96zm0 416a40 40 0 1 1 0-80 40 40 0 0 1 0 80z`})],-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`disabled`]),P(l,{size:`small`,class:`schedule-once-btn`,disabled:!i.gitStore.isGitRepo||i.scheduleBusy,loading:i.scheduleBusy,onClick:i.commitOnceNow},{default:G(()=>[M(q(i.$t(`@CMDPANEL:立即提交一次`)),1)]),_:1},8,[`disabled`,`loading`])]),N(` 默认模式:展示实际会用的信息并可编辑;留空则回落到全局默认/时间戳兜底 `),i.scheduleMessageMode==="default"?(z(),J(`div`,ay,[h(`span`,oy,q(i.$t(`@CMDPANEL:信息内容`)),1),P(b,{modelValue:i.scheduleCustomMessage,"onUpdate:modelValue":t[7]||=e=>i.scheduleCustomMessage=e,size:`small`,class:`schedule-message-input`,placeholder:i.defaultMessagePreview,maxlength:200,clearable:``,disabled:i.scheduleEnabled},null,8,[`modelValue`,`placeholder`,`disabled`])])):N(`v-if`,!0),h(`div`,sy,[h(`span`,cy,q(i.$t(`@CMDPANEL:推送`)),1),P(m,{modelValue:i.scheduleAutoPush,"onUpdate:modelValue":t[8]||=e=>i.scheduleAutoPush=e,size:`small`,disabled:i.scheduleEnabled},{default:G(()=>[M(q(i.$t(`@CMDPANEL:提交后自动推送到远程`)),1)]),_:1},8,[`modelValue`,`disabled`])]),N(` 等效命令行:把当前设置翻译成等价的 CLI 调用,可一键复制到终端执行 `),h(`div`,ly,[h(`span`,uy,q(i.$t(`@CMDPANEL:等效命令行`)),1),h(`div`,dy,[h(`code`,fy,q(i.cliEquivalentCommand),1),P(i.IconButton,{size:`small`,tooltip:i.$t(`@CMDPANEL:复制命令行`),"custom-class":`schedule-cli-copy`,onClick:i.copyCliCommand},{default:G(()=>[P(c,null,{default:G(()=>[P(i.CopyDocument)]),_:1})]),_:1},8,[`tooltip`])])]),i.cliHints.length>0?(z(),J(`div`,py,[(z(!0),J(Z,null,r(i.cliHints,(e,t)=>(z(),J(`div`,{key:t,class:`schedule-cli-hint`},q(e),1))),128))])):N(`v-if`,!0),N(` 运行日志:只展示最近几条 `),i.scheduleLogs.length>0?(z(),J(`div`,my,[(z(!0),J(Z,null,r(i.scheduleLogs.slice(0,3),(e,t)=>(z(),J(`div`,{key:e.time+`-`+t,class:O([`schedule-log-item`,{"is-error":!e.ok,"is-skipped":e.skipped}])},[h(`span`,hy,q(i.fmtClock(e.time)),1),h(`span`,gy,q(i.logText(e)),1)],2))),128))])):N(`v-if`,!0)])],2)]),N(` 命令管理弹窗 `),P(i.CustomCommandManager,{visible:i.managerVisible,"onUpdate:visible":t[9]||=e=>i.managerVisible=e,fullscreen:!0,onExecuteCommand:i.runCommand},null,8,[`visible`])],64)}var vy=$(Fv,[[`render`,_y],[`__scopeId`,`data-v-70af0dcb`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/CustomCommandsPanel.vue`]]),yy=e(gt(),1),by={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 xy(e={}){let t=new yy.default({fg:e.fg??`#e5e5e5`,bg:e.bg??`transparent`,newline:e.newline??!1,escapeXML:e.escapeXML??!1,stream:e.stream??!1,colors:e.colors??by});function n(e){return t.toHtml(e)}return{ansiToHtml:n,converter:t}}X(),c();function Sy(){let e=U([]),t=U(!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:[]:V.error(n?.error||`获取终端会话失败`)}catch(e){V.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?(V.success(`已重新启动终端`),await n(),!0):(V.error(r?.error||`重新启动失败`),!1)}catch(e){return V.error(e?.message||`重新启动失败`),!1}finally{t.value=!1}}async function i(e){try{await Me.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?(V.success(`已删除`),await n(),!0):(V.error(r?.error||`删除失败`),!1)}catch(e){return V.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:F(()=>t.value),count:F(()=>e.value.length),refresh:n,restart:r,remove:i,upsert:a}}c(),X();var Cy=8e3,wy=T({__name:`CommandConsole`,setup(e,{expose:t}){t();let n=_(()=>St(()=>Promise.resolve().then(()=>V_),void 0)),r=_(()=>St(()=>import(`./ProjectStartupButton-CFQKlRoA.js`),__vite__mapDeps([12,2,1,3,4,5,6,7,13,14,15,16,10,17,18,19]))),a=_(()=>St(()=>import(`./FlowOrchestrationWorkspace-0Kh0IoGP.js`),__vite__mapDeps([20,2,1,3,4,5,6,7,13,14,15,16,10,17,18,21,22,23,24,25]))),s=_(()=>St(()=>import(`./FlowExecutionViewer-sM9EwU3Q.js`),__vite__mapDeps([26,1,2,3,4,7,5,6,21,22,23,10,24,27]))),c=Lt(),u=Bt(),d=dm();function f(){Fe().catch(e=>{V.error(e?.message||Q(`@CF05E:提交后启动项执行失败`))})}async function p(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 m({flowData:t,orchestrationMeta:n});return}V.warning(Q(`@CF05E:该编排缺少流程数据,无法执行`))}async function m(e){let t=e?.flowData;if(!t||!Array.isArray(t.nodes)||!Array.isArray(t.edges))return;let n=t.nodes,r=t.edges;Se.value=!0,S.value=!0,C.value=!1,k.value=[],A.value=-1,j.value=t,M.value=!0,N.value=null,re.value=[],P.value=[],ie.value=[],oe.value=(e?.orchestrationMeta?.name||``).trim(),se.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){V.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){V.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(!S.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(N.value=n.id,n.type===`start`){let e=s.get(n.id)||[];re.value=re.value.includes(n.id)?re.value:[...re.value,n.id],e[0]?.id&&(P.value=P.value.includes(e[0].id)?P.value:[...P.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(re.value=re.value.includes(n.id)?re.value:[...re.value,n.id],e?.id&&(P.value=P.value.includes(e.id)?P.value:[...P.value,e.id]),f=e?.target,o)break;continue}let u=s.get(n.id)||[],m=e?.isSingleExecution!==!0&&!!u[0]?.target;if(!await Z([{...r,nodeId:n.id,enabled:r.enabled}],0,!0,e?.orchestrationMeta,{nodeOutputs:i,skipUiSetup:!0,skipUiTeardown:!0,forceTerminalConfirm:m})){n.id&&!ie.value.includes(n.id)&&(ie.value=[...ie.value,n.id]);break}if(!S.value)break;re.value=re.value.includes(n.id)?re.value:[...re.value,n.id];let h=s.get(n.id)||[];if(h[0]?.id&&(P.value=P.value.includes(h[0].id)?P.value:[...P.value,h[0].id]),f=h[0]?.target,o)break}}catch(e){String(e?.message||e)!==Q(`@CF05E:用户停止执行`)&&(N.value&&!ie.value.includes(N.value)&&(ie.value=[...ie.value,N.value]),V.error(e?.message||String(e)))}finally{S.value=!1,C.value=!1,A.value=-1,k.value=[],N.value=null}}let h=Rt(),g=U(null),v=U(``),b=U(``),S=U(!1),C=U(!1),w=U([]),T=0;function ee(){Me.confirm(Q(`@CF05E:确定要清空所有执行历史吗?此操作不可撤销。`),Q(`@CF05E:清空历史`),{confirmButtonText:Q(`@CF05E:清空`),cancelButtonText:Q(`@CF05E:取消`),type:`warning`}).then(()=>{w.value=[],V.success(Q(`@CF05E:执行历史已清空`))}).catch(()=>{})}function E(){ue&&ue(!0)}function O(){ue&&ue(!1),S.value=!1,C.value=!1}function te(){R&&R(!0)}function ne(){R&&R(!1),S.value=!1,C.value=!1}let k=U([]),A=U(-1),j=U(null),M=U(!0),N=U(null),re=U([]),P=U([]),ie=U([]),oe=U(``),se=U(``),ce=U(!1),I=U(``),ue=null,de=U(!1),L=U(``),R=null,he=U(!1),ve=U(``),z=U([]),ye=U({}),B=null,be=F({get:()=>he.value,set:e=>{he.value=e}});function xe(){let e=Array.isArray(z.value)?z.value:[];for(let t of e){if(!t?.required)continue;let e=ye.value?.[t.name];if(e==null||String(e).trim()===``){V.warning(Q(`@UINPUT:请输入必填参数的值`,{name:t.name}));return}}B&&B(!0)}function H(){B&&B(!1),S.value=!1,C.value=!1}let{ansiToHtml:W}=xy(),Se=U(!1),G=F({get:()=>c.ui.commandConsole.useTerminal,set:e=>{c.ui.commandConsole.useTerminal=e}}),{sessions:Ce,loading:we,refresh:K,restart:q,remove:Te,upsert:Ee}=Sy(),De=F({get:()=>c.ui.commandConsole.showTerminalSessions,set:e=>{c.ui.commandConsole.showTerminalSessions=e}}),Oe=F(()=>Ce.value.length);We(Oe,e=>{d.setCount(e)},{immediate:!0});let ke=U(!1);function Ae(e){return new Promise(t=>setTimeout(t,e))}async function je(e=8e3){let t=Date.now();for(;Date.now()-t<e;){if(g.value&&g.value.connected)return!0;await Ae(100)}return!1}async function Ne(e){let t=c.customCommands.find(t=>String(t.id)===String(e));if(!t){V.warning(`启动项命令不存在: ${e}`);return}let n=t.directory||v.value,r=t.command;if(G.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?Ee(e.session):await K():V.error(e?.error||Q(`@CF05E:启动项命令执行失败`))}catch(e){V.error(e?.message||Q(`@CF05E:启动项命令执行失败`))}return}if(!await je()){V.error(Q(`@CF05E:Socket 连接未就绪,无法自动执行交互式启动项`));return}await ft(r,n)}async function Pe(e){let t=c.orchestrations.find(t=>t.id===e);if(!t){V.warning(`启动项工作流不存在: ${e}`);return}await p(t)}async function Fe(){await c.loadConfig(!1);let e=c.afterQuickPushAction;e?.enabled&&e?.refId&&(e.type===`workflow`?await Pe(e.refId):await Ne(e.refId))}async function J(){if(ke.value||(ke.value=!0,await c.loadConfig(!1),!c.startupAutoRun))return;let e=(c.startupItems||[]).filter(e=>e?.enabled!==!1);if(e.length!==0)for(let t of e)t.type===`workflow`?await Pe(t.refId):await Ne(t.refId)}let Ie=e=>Math.min(85,Math.max(15,e)),Le=F({get:()=>Ie(c.ui.commandConsole.splitPercent),set:e=>{c.ui.commandConsole.splitPercent=Ie(e)}}),Y=U(null),ze=()=>{let e=Y.value?.$el??Y.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},Be=()=>{let e=Y.value?.$el??Y.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=ze();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!==Le.value&&(Le.value=e)}},Ve=F({get(){return`${Ie(Le.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=ze();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=ze();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(Le.value=Ie(t))}});async function He(e=!0){if(Ce.value.length!==0)try{let t=await(await fetch(`/api/terminal-sessions/status?cleanup=${e?`true`:`false`}`)).json();t?.success&&(Ce.value=Array.isArray(t.sessions)?t.sessions:[])}catch{}}let Ue=null;function Ke(){Ue!==null&&(clearInterval(Ue),Ue=null)}function X(){Ue===null&&(Ue=setInterval(()=>{He(!0)},Cy))}We(Oe,e=>{e>0?X():Ke()},{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 Ye=U(!1),Xe=U(!1);async function Qe(){let e=b.value.trim();e&&!S.value&&(b.value=``,await $e(e,v.value))}async function $e(e,t=v.value){if(S.value=!0,G.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?(V.success(Q(`@CF05E:已在新终端中执行命令`)),n?.session?Ee(n.session):await K()):V.error(n?.error||Q(`@CF05E:执行失败`))}catch(e){V.error(e?.message||Q(`@CF05E:执行失败`))}finally{S.value=!1}return}let n={id:++T,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0};w.value.unshift(n),b.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(`
116
116
 
117
117
  `);a=c.pop()||``,console.log(`[前端-控制台] 分割出 ${c.length} 条消息`);for(let e of c){let t=e.split(`
118
118
  `);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),w.value=[...w.value]):t.type===`stdout`?(n.stdout=(n.stdout||``)+W(t.data),console.log(`[前端-控制台] 当前stdout总长度:`,n.stdout.length),S.value&&n.stdout.length<200&&(S.value=!1),w.value=[...w.value]):t.type===`stderr`?(n.stderr=(n.stderr||``)+W(t.data),console.log(`[前端-控制台] 当前stderr总长度:`,n.stderr.length),S.value&&n.stderr.length<200&&(S.value=!1),w.value=[...w.value]):t.type===`exit`?(n.success=t.data.success,n.running=!1,console.log(`[前端-控制台] 进程退出,成功:`,n.success),w.value=[...w.value]):t.type===`error`&&(n.stderr=(n.stderr||``)+`错误: ${t.data}\n`,w.value=[...w.value])}catch(t){console.warn(`解析SSE数据失败:`,e,t)}}}if(a.trim()){let e=a.split(`
@@ -128,7 +128,7 @@ import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{$ as n,$n as r,
128
128
  `);s=i.pop()||``,console.log(`[前端-自定义] 分割出 ${i.length} 条消息, buffer剩余: ${s.length} 字符`);for(let e of i){let t=e.split(`
129
129
  `);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),w.value=[...w.value]):t.type===`stdout`?(r.stdout=(r.stdout||``)+W(t.data),console.log(`[前端-自定义] 当前stdout总长度:`,r.stdout.length,`内容预览:`,r.stdout.substring(0,100)),S.value&&r.stdout.length<200&&(S.value=!1),w.value=[...w.value]):t.type===`stderr`?(r.stderr=(r.stderr||``)+W(t.data),console.log(`[前端-自定义] 当前stderr总长度:`,r.stderr.length),S.value&&r.stderr.length<200&&(S.value=!1),w.value=[...w.value]):t.type===`exit`?(r.success=t.data.success,r.running=!1,console.log(`[前端-自定义] 进程退出,成功:`,r.success),w.value=[...w.value]):t.type===`error`&&(r.stderr=(r.stderr||``)+`错误: ${t.data}\n`,w.value=[...w.value])}catch(t){console.warn(`[前端-自定义] 解析SSE数据失败:`,e,t)}}}if(s.trim()){let e=s.split(`
130
130
  `);for(let t of e)if(t.startsWith(`data: `))try{let e=JSON.parse(t.substring(6));e.type===`stdout`?r.stdout=(r.stdout||``)+W(e.data):e.type===`stderr`?r.stderr=(r.stderr||``)+W(e.data):e.type===`exit`&&(r.success=e.data.success,r.running=!1)}catch(e){console.warn(`解析剩余SSE数据失败:`,e)}w.value=[...w.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`),S.value=!1,st(n)&&(await u.fetchStatus(),await u.fetchLog())}}async function dt(){let e=b.value.trim();e&&!S.value&&(b.value=``,await ft(e))}async function ft(e,t=v.value){S.value=!0;let n=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,r={id:++T,command:e,directory:t,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:``,stderr:``,running:!0,sessionId:n,isInteractive:!0,stdinInput:``};if(w.value.unshift(r),!g.value||!g.value.connected){V.error(`Socket 连接未建立,无法执行交互式命令`),S.value=!1,r.running=!1,r.stderr=`Socket 连接未建立`;return}g.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),w.value=[...w.value])},a=e=>{e.sessionId===n&&(r.stdout=(r.stdout||``)+W(e.data),S.value=!1,w.value=[...w.value])},o=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+W(e.data),S.value=!1,w.value=[...w.value])},s=e=>{e.sessionId===n&&(r.success=e.success,r.running=!1,console.log(`[交互式] 进程退出,成功:`,r.success),w.value=[...w.value],g.value?.off(`interactive_process_id`,i),g.value?.off(`interactive_stdout`,a),g.value?.off(`interactive_stderr`,o),g.value?.off(`interactive_exit`,s),g.value?.off(`interactive_error`,c))},c=e=>{e.sessionId===n&&(r.stderr=(r.stderr||``)+`错误: ${e.error}\n`,r.running=!1,r.success=!1,w.value=[...w.value],g.value?.off(`interactive_process_id`,i),g.value?.off(`interactive_stdout`,a),g.value?.off(`interactive_stderr`,o),g.value?.off(`interactive_exit`,s),g.value?.off(`interactive_error`,c))};g.value.on(`interactive_process_id`,i),g.value.on(`interactive_stdout`,a),g.value.on(`interactive_stderr`,o),g.value.on(`interactive_exit`,s),g.value.on(`interactive_error`,c),S.value=!1}function pt(e){let t=e.stdinInput?.trim();if(t&&e.sessionId){if(!g.value||!g.value.connected){V.error(`Socket 连接未建立`);return}console.log(`[交互式] 发送 stdin 输入:`,t),g.value.emit(`interactive_stdin_${e.sessionId}`,{input:t}),e.stdinInput=``,w.value=[...w.value]}}function mt(e){if(!e.sessionId||!e.running){V.warning(`命令已经结束`);return}if(!g.value||!g.value.connected){V.error(`Socket 连接未建立`);return}console.log(`[交互式] 停止命令:`,e.sessionId),g.value.emit(`interactive_stop_${e.sessionId}`),e.running=!1,w.value=[...w.value]}We(De,e=>{e&&He(!0)});function ht(){let e=`http://localhost:${h}`;console.log(`[控制台] 连接到 Socket.IO:`,e),g.value=Nt(e,{transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1e3,reconnectionAttempts:5}),g.value.on(`connect`,()=>{console.log(`[控制台] Socket.IO 已连接`)}),g.value.on(`disconnect`,()=>{console.log(`[控制台] Socket.IO 已断开`)}),g.value.on(`connect_error`,e=>{console.error(`[控制台] Socket.IO 连接错误:`,e)})}let gt=()=>{De.value&&K()},_t=()=>{document.visibilityState===`visible`&&De.value&&(console.log(`[页面可见性] 标签页已激活,刷新终端会话状态`),He(!0))},vt=()=>{De.value&&(console.log(`[窗口焦点] 浏览器窗口已激活,刷新终端会话状态`),He(!0))};_e(async()=>{try{let e=await(await fetch(`/api/current_directory`)).json();v.value=e?.directory||``}catch{}ht(),await c.loadConfig(!1),await K(),await J(),document.addEventListener(`visibilitychange`,_t),window.addEventListener(`focus`,vt),window.addEventListener(`zen-gitsync:after-quick-push-success`,f),window.addEventListener(`zen-gitsync:terminal-session-created`,gt)}),me(()=>{document.removeEventListener(`visibilitychange`,_t),window.removeEventListener(`focus`,vt),window.removeEventListener(`zen-gitsync:after-quick-push-success`,f),window.removeEventListener(`zen-gitsync:terminal-session-created`,gt),g.value&&=(g.value.disconnect(),null),Ke()}),D(()=>{Ke()}),x(()=>{Oe.value>0&&(He(!0),X())});let yt={CustomCommandManager:n,ProjectStartupButton:r,FlowOrchestrationWorkspace:a,FlowExecutionViewer:s,configStore:c,gitStore:u,terminalSessionsStore:d,handleAfterQuickPushSuccessEvent:f,runWorkflow:p,executeFlow:m,backendPort:h,socket:g,currentDirectory:v,consoleInput:b,consoleRunning:S,orchestrationPaused:C,consoleHistory:w,get consoleIdCounter(){return T},set consoleIdCounter(e){T=e},clearConsoleHistory:ee,continueAfterTerminal:E,stopAfterTerminal:O,continueUserConfirm:te,stopUserConfirm:ne,orchestrationSteps:k,currentStepIndex:A,executionFlowData:j,showExecutionFlowPanel:M,currentExecutingNodeId:N,executedNodeIds:re,executedEdgeIds:P,failedNodeIds:ie,currentOrchestrationName:oe,currentOrchestrationId:se,waitingForTerminalConfirm:ce,waitingStepName:I,get terminalConfirmResolve(){return ue},set terminalConfirmResolve(e){ue=e},waitingForUserConfirm:de,waitingConfirmMessage:L,get userConfirmResolve(){return R},set userConfirmResolve(e){R=e},waitingForUserInput:he,waitingUserInputTitle:ve,userInputParams:z,userInputValues:ye,get userInputResolve(){return B},set userInputResolve(e){B=e},userInputDialogVisible:be,confirmUserInput:xe,cancelUserInput:H,ansiToHtml:W,isFullscreen:Se,useTerminal:G,terminalSessions:Ce,terminalSessionsLoading:we,loadTerminalSessions:K,restartTerminalSession:q,deleteTerminalSession:Te,upsertTerminalSession:Ee,showTerminalSessions:De,terminalSessionsCount:Oe,startupAutoRunTriggered:ke,sleep:Ae,waitForSocketConnected:je,runStartupCommandById:Ne,runStartupWorkflow:Pe,runAfterQuickPushAction:Fe,autoRunProjectStartupItems:J,clampPercent:Ie,splitPercent:Le,splitterRef:Y,getSplitterWidth:ze,updateSplitFromDom:Be,panelSize:Ve,loadTerminalSessionsStatus:He,TERMINAL_POLL_INTERVAL_MS:Cy,get terminalPollTimer(){return Ue},set terminalPollTimer(e){Ue=e},stopTerminalPolling:Ke,startTerminalPolling:X,getLastDirName:Je,commandManagerVisible:Ye,flowOrchestrationVisible:Xe,runConsoleCommand:Qe,runConsoleCommandWithCmd:$e,closeConsoleRecord:et,rerunConsoleRecord:tt,toggleCommandOutput:nt,stopCommand:rt,openCommandManager:it,openFlowOrchestrationWorkspace:at,scrollToCurrentStep:ot,isGitCommand:st,extractVersionFromOutput:lt,executeOrchestration:Z,executeCustomCommand:ut,runInteractiveCommand:dt,runInteractiveCommandWithCmd:ft,sendStdinInput:pt,stopInteractiveCommand:mt,initSocket:ht,handleExternalTerminalCreated:gt,handleVisibilityChange:_t,handleWindowFocus:vt,get ArrowDown(){return ge},get FullScreen(){return ct},get VideoPlay(){return Ze},get Loading(){return o},get Close(){return Ge},get Position(){return l},get Monitor(){return y},get Document(){return qe},get Timer(){return i},get Ticket(){return ae},get Delete(){return Re},get RefreshRight(){return pe},get Folder(){return le},SvgIcon:jt,IconButton:Mt,CommonDialog:Kt,get $t(){return Q}};return Object.defineProperty(yt,"__isScriptSetup",{enumerable:!1,value:!0}),yt}});c(),v(),K();var Ty={class:`console-header`},Ey={class:`header-left`},Dy={class:`console-title`},Oy={class:`header-actions`},ky={key:0,class:`execution-controls`},Ay={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},jy={class:`console-content`},My={class:`termial-session`},Ny={key:0,class:`terminal-sessions-panel`},Py={class:`terminal-sessions-header`},Fy={class:`terminal-sessions-title`},Iy={class:`terminal-sessions-count`},Ly={class:`terminal-sessions-actions`},Ry={class:`terminal-sessions-body`},zy={key:0,class:`terminal-sessions-empty`},By={key:1,class:`terminal-sessions-list`},Vy={class:`terminal-session-main`},Hy=[`title`],Uy={class:`terminal-session-pid`},Wy={class:`terminal-session-meta`},Gy={class:`terminal-session-dir`},Ky={class:`terminal-session-actions`},qy={key:1,class:`terminal-sessions-collapsed`},Jy={class:`console-content-main`},Yy={key:0,class:`orchestration-flow-panel`},Xy={class:`flow-panel-header`},Zy={class:`flow-panel-title`},Qy={key:1,class:`orchestration-steps-panel`},$y={class:`steps-header`},eb={class:`steps-title`},tb={key:0,class:`steps-orchestration`},nb={key:0,class:`steps-list`},rb={class:`step-indicator`},ib={key:4,class:`step-number`},ab={class:`step-content`},ob={class:`step-header`},sb={key:0,class:`step-terminal-tag`,title:`终端执行`},cb={key:1,class:`step-disabled-tag`},lb={class:`step-name`},ub={key:1,class:`terminal-waiting-panel`},db={class:`waiting-content`},fb={class:`waiting-text`},pb={class:`waiting-desc`},mb={class:`waiting-actions`},hb={key:2,class:`terminal-waiting-panel user-confirm-panel`},gb={class:`waiting-content`},_b={class:`waiting-text`},vb={class:`waiting-desc`},yb={class:`waiting-actions`},bb={class:`console-input-row`},xb=[`title`],Sb={key:2,class:`console-output`},Cb=[`onClick`],wb={class:`cmd-line`},Tb={class:`cmd-text`},Eb=[`title`],Db={class:`ts`},Ob={class:`cmd-actions`},kb={key:0,class:`output-content`},Ab=[`innerHTML`],jb=[`innerHTML`],Mb={key:0,class:`stdin-input-row`},Nb={class:`user-input-dialog-content`},Pb={key:0,class:`user-input-empty`},Fb={key:1,class:`user-input-form`},Ib={class:`user-input-label`},Lb={key:0,class:`required`};function Rb(e,t,n,i,a,o){let s=pt,c=L,l=E,u=Se,d=I,f=Qe,m=He;return z(),J(Z,null,[N(` 自定义指令执行控制台 `),h(`div`,{class:O([`command-console`,{fullscreen:i.isFullscreen}])},[N(` 标题栏 `),h(`div`,Ty,[h(`div`,Ey,[t[16]||=h(`span`,{class:`console-window-dots`},[h(`span`,{class:`dot dot-red`}),h(`span`,{class:`dot dot-yellow`}),h(`span`,{class:`dot dot-green`})],-1),h(`span`,Dy,q(i.$t(`@CF05E:自定义指令执行`)),1)]),h(`div`,Oy,[N(` 编排暂停/继续按钮 `),i.consoleRunning?(z(),J(`div`,ky,[P(c,{content:i.orchestrationPaused?`继续执行`:`暂停执行`,placement:`bottom`},{default:G(()=>[P(s,{type:i.orchestrationPaused?`success`:`warning`,size:`small`,onClick:t[0]||=e=>i.orchestrationPaused=!i.orchestrationPaused,class:`pause-btn`},{icon:G(()=>[i.orchestrationPaused?(z(),p(i.VideoPlay,{key:0})):(z(),p(i.Loading,{key:1}))]),default:G(()=>[M(` `+q(i.orchestrationPaused?`继续`:`暂停`),1)]),_:1},8,[`type`])]),_:1},8,[`content`]),P(c,{content:`停止执行`,placement:`bottom`},{default:G(()=>[P(s,{type:`danger`,size:`small`,onClick:t[1]||=e=>{i.consoleRunning=!1,i.orchestrationPaused=!1,i.currentStepIndex=-1,i.orchestrationSteps=[]},class:`stop-btn`},{icon:G(()=>[P(i.Close)]),default:G(()=>[t[17]||=M(` 停止 `,-1)]),_:1})]),_:1})])):N(`v-if`,!0),i.consoleHistory.length>0?(z(),p(i.IconButton,{key:1,tooltip:`清空执行历史`,"hover-color":`var(--color-danger)`,onClick:i.clearConsoleHistory,"custom-class":`clear-history-btn`},{default:G(()=>[P(l,{size:18},{default:G(()=>[P(i.Delete)]),_:1})]),_:1})):N(`v-if`,!0),P(i.IconButton,{tooltip:i.$t(`@CF05E:使用终端执行`),active:i.useTerminal,onClick:t[2]||=e=>i.useTerminal=!i.useTerminal,"custom-class":`terminal-toggle-btn`},{default:G(()=>[P(l,{size:20},{default:G(()=>[P(i.Monitor)]),_:1})]),_:1},8,[`tooltip`,`active`]),P(i.IconButton,{tooltip:i.$t(`@CF05E:自定义命令管理`),"hover-color":`var(--color-success)`,onClick:i.openCommandManager,"custom-class":`command-manager-btn`},{default:G(()=>[P(i.SvgIcon,{"icon-class":`command-list`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),P(i.ProjectStartupButton,{onExecuteCommand:i.executeCustomCommand,onExecuteWorkflow:t[3]||=e=>i.runWorkflow(e)}),P(i.IconButton,{tooltip:i.$t(`@ORCH:可视化编排`),"hover-color":`#9c27b0`,onClick:i.openFlowOrchestrationWorkspace,"custom-class":`flow-orchestrator-btn`},{default:G(()=>[P(i.SvgIcon,{"icon-class":`workflow`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),P(i.IconButton,{tooltip:i.isFullscreen?i.$t(`@CF05E:退出全屏`):i.$t(`@CF05E:全屏显示`),onClick:t[4]||=e=>i.isFullscreen=!i.isFullscreen},{default:G(()=>[i.isFullscreen?(z(),J(`svg`,Ay,[...t[18]||=[h(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])):(z(),p(l,{key:0},{default:G(()=>[P(i.FullScreen)]),_:1}))]),_:1},8,[`tooltip`])])]),N(` 内容区域 `),h(`div`,jy,[P(f,{ref:`splitterRef`,layout:`horizontal`,style:{height:`100%`},onResize:i.updateSplitFromDom,onResizeEnd:i.updateSplitFromDom},{default:G(()=>[P(u,{size:i.panelSize,"onUpdate:size":t[7]||=e=>i.panelSize=e,min:`15%`,max:`85%`},{default:G(()=>[h(`div`,My,[i.showTerminalSessions?(z(),J(`div`,Ny,[h(`div`,Py,[h(`div`,Fy,[h(`span`,null,q(i.$t(`@CMDCON:终端会话`)),1),h(`span`,Iy,`(`+q(i.terminalSessionsCount)+`)`,1)]),h(`div`,Ly,[P(c,{content:i.$t(`@CMDCON:刷新`),placement:`bottom`},{default:G(()=>[P(s,{text:``,size:`small`,onClick:i.loadTerminalSessions,disabled:i.terminalSessionsLoading},{default:G(()=>[P(l,null,{default:G(()=>[P(i.RefreshRight)]),_:1})]),_:1},8,[`onClick`,`disabled`])]),_:1},8,[`content`]),P(c,{content:i.$t(`@CMDCON:隐藏`),placement:`bottom`},{default:G(()=>[P(s,{text:``,size:`small`,onClick:t[5]||=e=>i.showTerminalSessions=!1},{default:G(()=>[P(l,null,{default:G(()=>[P(i.ArrowDown)]),_:1})]),_:1})]),_:1},8,[`content`])])]),Y((z(),J(`div`,Ry,[i.terminalSessions.length===0?(z(),J(`div`,zy,q(i.$t(`@CMDCON:暂无终端会话`)),1)):(z(),J(`div`,By,[(z(!0),J(Z,null,r(i.terminalSessions,e=>(z(),J(`div`,{key:e.id,class:`terminal-session-item`},[h(`div`,Vy,[h(`div`,{class:`terminal-session-command`,title:e.command},[M(q(e.command),1),h(`span`,Uy,` PID: `+q(e.pid??`-`),1)],8,Hy),h(`div`,Wy,[e.workingDirectory?(z(),p(c,{key:0,content:e.workingDirectory,placement:`top`},{default:G(()=>[h(`span`,Gy,[P(l,{class:`cmd-dir-icon`},{default:G(()=>[P(i.Folder)]),_:1}),M(` `+q(i.getLastDirName(e.workingDirectory)),1)])]),_:2},1032,[`content`])):N(`v-if`,!0)])]),h(`div`,Ky,[P(c,{content:i.$t(`@CMDCON:重新启动`),placement:`top`},{default:G(()=>[P(s,{text:``,size:`small`,onClick:t=>i.restartTerminalSession(e)},{default:G(()=>[P(l,null,{default:G(()=>[P(i.RefreshRight)]),_:1})]),_:1},8,[`onClick`])]),_:2},1032,[`content`]),P(c,{content:i.$t(`@CMDCON:删除`),placement:`top`},{default:G(()=>[P(s,{text:``,size:`small`,type:`danger`,onClick:t=>i.deleteTerminalSession(e)},{default:G(()=>[P(l,null,{default:G(()=>[P(i.Delete)]),_:1})]),_:1},8,[`onClick`])]),_:2},1032,[`content`])])]))),128))]))])),[[m,i.terminalSessionsLoading]])])):(z(),J(`div`,qy,[P(s,{text:``,size:`small`,onClick:t[6]||=e=>i.showTerminalSessions=!0},{default:G(()=>[M(q(i.$t(`@CMDCON:显示终端会话`,{count:i.terminalSessionsCount})),1)]),_:1})]))])]),_:1},8,[`size`]),P(u,{min:`15%`,max:`85%`},{default:G(()=>[h(`div`,Jy,[N(` 执行画布(只读,高亮执行路径) `),i.executionFlowData&&i.showExecutionFlowPanel?(z(),J(`div`,Yy,[h(`div`,Xy,[h(`div`,Zy,q(i.currentOrchestrationName||i.currentOrchestrationId),1),P(i.IconButton,{tooltip:i.$t(`@CMDCON:隐藏`),"hover-color":`var(--color-danger)`,"custom-class":`flow-panel-close-btn`,onClick:t[8]||=e=>i.showExecutionFlowPanel=!1},{default:G(()=>[P(l,{size:18},{default:G(()=>[P(i.Close)]),_:1})]),_:1},8,[`tooltip`])]),P(i.FlowExecutionViewer,{"flow-data":i.executionFlowData,"current-node-id":i.currentExecutingNodeId||void 0,"executed-node-ids":i.executedNodeIds,"failed-node-ids":i.failedNodeIds,"executed-edge-ids":i.executedEdgeIds},null,8,[`flow-data`,`current-node-id`,`executed-node-ids`,`failed-node-ids`,`executed-edge-ids`])])):N(`v-if`,!0),N(` 编排步骤列表 `),i.orchestrationSteps.length>0||i.waitingForTerminalConfirm||i.waitingForUserConfirm?(z(),J(`div`,Qy,[h(`div`,$y,[h(`span`,eb,[t[19]||=M(` 执行步骤 `,-1),i.currentOrchestrationName||i.currentOrchestrationId?(z(),J(`span`,tb,` - `+q(i.currentOrchestrationName||i.currentOrchestrationId),1)):N(`v-if`,!0),M(` (`+q(i.currentStepIndex+1)+`/`+q(i.orchestrationSteps.length)+`) `,1)])]),i.orchestrationSteps.length>0?(z(),J(`div`,nb,[(z(!0),J(Z,null,r(i.orchestrationSteps,(e,n)=>(z(),J(`div`,{key:n,class:O([`step-item`,{"step-current":n===i.currentStepIndex,"step-completed":n<i.currentStepIndex,"step-pending":n>i.currentStepIndex,"step-disabled":e.enabled===!1,[`step-type-${e.type}`]:!0}])},[h(`div`,rb,[n<i.currentStepIndex?(z(),p(l,{key:0,class:`step-icon-check`},{default:G(()=>[...t[20]||=[h(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[h(`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(),p(l,{key:1,class:`step-type-icon`},{default:G(()=>[P(i.Timer)]),_:1})):e.type===`version`?(z(),p(l,{key:2,class:`step-type-icon`},{default:G(()=>[P(i.Ticket)]),_:1})):e.type===`command`?(z(),p(l,{key:3,class:`step-type-icon`},{default:G(()=>[P(i.Document)]),_:1})):(z(),J(`span`,ib,q(n+1),1))]),h(`div`,ab,[h(`div`,ob,[h(`span`,{class:O([`step-type-tag`,`type-${e.type}`])},q(e.type===`command`?`命令`:e.type===`wait`?`等待`:e.type===`version`?`版本`:e.type===`user_input`?`输入`:e.type),3),e.useTerminal?(z(),J(`span`,sb,[P(l,{class:`step-terminal-icon`},{default:G(()=>[P(i.Monitor)]),_:1}),t[21]||=M(` 终端 `,-1)])):N(`v-if`,!0),e.enabled===!1?(z(),J(`span`,cb,`已禁用`)):N(`v-if`,!0)]),h(`span`,lb,q(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))])):N(`v-if`,!0),N(` 终端命令等待确认提示 `),i.waitingForTerminalConfirm?(z(),J(`div`,ub,[h(`div`,db,[P(l,{class:`waiting-icon`},{default:G(()=>[P(i.Monitor)]),_:1}),h(`div`,fb,[t[24]||=h(`div`,{class:`waiting-title`},`等待终端命令完成`,-1),h(`div`,pb,[t[22]||=M(` 终端命令 "`,-1),h(`strong`,null,q(i.waitingStepName),1),t[23]||=M(`" 已在新窗口中打开,请在终端中查看命令执行结果 `,-1)])])]),h(`div`,mb,[P(s,{type:`primary`,onClick:i.continueAfterTerminal},{default:G(()=>[P(l,null,{default:G(()=>[P(i.VideoPlay)]),_:1}),t[25]||=M(` 继续下一步 `,-1)]),_:1}),P(s,{type:`danger`,plain:``,onClick:i.stopAfterTerminal},{default:G(()=>[P(l,null,{default:G(()=>[P(i.Close)]),_:1}),t[26]||=M(` 停止执行 `,-1)]),_:1})])])):N(`v-if`,!0),N(` 用户确认节点等待提示 `),i.waitingForUserConfirm?(z(),J(`div`,hb,[h(`div`,gb,[P(l,{class:`waiting-icon`,style:{color:`#ff9800`}},{default:G(()=>[...t[27]||=[M(`✋`,-1)]]),_:1}),h(`div`,_b,[t[28]||=h(`div`,{class:`waiting-title`},`用户确认节点`,-1),h(`div`,vb,q(i.waitingConfirmMessage),1)])]),h(`div`,yb,[P(s,{type:`primary`,onClick:i.continueUserConfirm},{default:G(()=>[P(l,null,{default:G(()=>[P(i.VideoPlay)]),_:1}),t[29]||=M(` 继续执行 `,-1)]),_:1}),P(s,{type:`danger`,plain:``,onClick:i.stopUserConfirm},{default:G(()=>[P(l,null,{default:G(()=>[P(i.Close)]),_:1}),t[30]||=M(` 取消执行 `,-1)]),_:1})])])):N(`v-if`,!0)])):N(`v-if`,!0),N(` 输入区 `),h(`div`,bb,[h(`span`,{class:`prompt`,title:i.$t(`@CF05E:当前路径`)},q(i.currentDirectory)+` >`,9,xb),P(d,{modelValue:i.consoleInput,"onUpdate:modelValue":t[9]||=e=>i.consoleInput=e,class:`console-input`,placeholder:i.useTerminal?i.$t(`@CMDCON:在新终端执行`):i.$t(`@CMDCON:交互式模式`),onKeydown:t[10]||=dt(H(e=>i.useTerminal?i.runConsoleCommand():i.runInteractiveCommand(),[`prevent`]),[`enter`]),disabled:i.consoleRunning,clearable:``},null,8,[`modelValue`,`placeholder`,`disabled`]),P(i.IconButton,{disabled:i.consoleRunning,"hover-color":`var(--color-primary)`,onClick:t[11]||=e=>i.useTerminal?i.runConsoleCommand():i.runInteractiveCommand()},{default:G(()=>[i.consoleRunning?(z(),p(l,{key:0,class:`is-loading`},{default:G(()=>[P(i.Loading)]),_:1})):(z(),p(l,{key:1},{default:G(()=>[P(i.VideoPlay)]),_:1}))]),_:1},8,[`disabled`])]),N(` 命令历史输出 `),i.consoleHistory.length?(z(),J(`div`,Sb,[(z(!0),J(Z,null,r(i.consoleHistory,e=>(z(),J(`div`,{key:e.id,class:`console-record`},[h(`div`,{class:`cmd-header cursor-pointer`,onClick:t=>i.toggleCommandOutput(e)},[h(`div`,wb,[t[31]||=h(`span`,{class:`cmd-prefix`},`>`,-1),h(`span`,Tb,q(e.command),1),e.directory?(z(),J(`span`,{key:0,class:`cmd-dir`,title:e.directory},[P(l,{class:`cmd-dir-icon`},{default:G(()=>[P(i.Folder)]),_:1}),M(` `+q(e.directory),1)],8,Eb)):N(`v-if`,!0),e.running?(z(),p(l,{key:1,class:`running-icon is-loading`,color:`var(--color-primary)`},{default:G(()=>[P(i.Loading)]),_:1})):N(`v-if`,!0),h(`span`,Db,q(e.ts),1)]),h(`div`,Ob,[P(c,{content:`重新执行`,placement:`top`},{default:G(()=>[P(s,{text:``,size:`small`,onClick:H(t=>i.rerunConsoleRecord(e),[`stop`]),class:`rerun-btn`},{default:G(()=>[P(l,null,{default:G(()=>[P(i.RefreshRight)]),_:1})]),_:1},8,[`onClick`])]),_:2},1024),e.running?(z(),p(c,{key:0,content:`停止命令`,placement:`top`},{default:G(()=>[P(s,{text:``,size:`small`,onClick:H(t=>e.isInteractive?i.stopInteractiveCommand(e):i.stopCommand(e),[`stop`]),class:`stop-btn`,type:`danger`},{default:G(()=>[P(l,null,{default:G(()=>[P(i.Close)]),_:1})]),_:1},8,[`onClick`])]),_:2},1024)):N(`v-if`,!0),P(s,{text:``,size:`small`,onClick:H(t=>i.toggleCommandOutput(e),[`stop`]),disabled:!e.stdout&&!e.stderr,class:`toggle-output-btn`},{default:G(()=>[P(l,{class:O({"rotate-icon":!e.expanded})},{default:G(()=>[P(i.ArrowDown)]),_:1},8,[`class`])]),_:2},1032,[`onClick`,`disabled`])])],8,Cb),P(Le,{name:`output-slide`},{default:G(()=>[e.expanded&&(e.stdout||e.stderr)?(z(),J(`div`,kb,[e.stdout?(z(),J(`pre`,{key:0,class:`stdout`,innerHTML:e.stdout},null,8,Ab)):N(`v-if`,!0),e.stderr?(z(),J(`pre`,{key:1,class:`stderr`,innerHTML:e.stderr},null,8,jb)):N(`v-if`,!0)])):N(`v-if`,!0)]),_:2},1024),N(` 每个交互式命令独立的 stdin 输入框 `),e.isInteractive&&e.running?(z(),J(`div`,Mb,[P(l,{class:`stdin-icon`},{default:G(()=>[P(i.Position)]),_:1}),P(d,{modelValue:e.stdinInput,"onUpdate:modelValue":t=>e.stdinInput=t,class:`stdin-input`,placeholder:`输入响应内容(如密码、确认等),按回车发送`,onKeydown:dt(H(t=>i.sendStdinInput(e),[`prevent`]),[`enter`]),clearable:``,size:`small`},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),P(s,{type:`success`,onClick:t=>i.sendStdinInput(e),size:`small`},{default:G(()=>[...t[32]||=[M(`发送`,-1)]]),_:1},8,[`onClick`])])):N(`v-if`,!0)]))),128))])):N(`v-if`,!0)])]),_:1})]),_:1},512)])],2),N(` 自定义命令管理弹窗 `),P(i.CustomCommandManager,{visible:i.commandManagerVisible,"onUpdate:visible":t[12]||=e=>i.commandManagerVisible=e,fullscreen:!0,onExecuteCommand:i.executeCustomCommand},null,8,[`visible`]),N(` 可视化编排工作台(基于 vue-flow) `),P(i.FlowOrchestrationWorkspace,{visible:i.flowOrchestrationVisible,"onUpdate:visible":t[13]||=e=>i.flowOrchestrationVisible=e,onExecuteFlow:i.executeFlow,onOpenCommandManager:t[14]||=e=>i.commandManagerVisible=!0},null,8,[`visible`]),P(i.CommonDialog,{modelValue:i.userInputDialogVisible,"onUpdate:modelValue":t[15]||=e=>i.userInputDialogVisible=e,title:i.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":i.$t(`@803A9:确定`),"cancel-text":i.$t(`@803A9:取消`),onConfirm:i.confirmUserInput,onCancel:i.cancelUserInput},{default:G(()=>[h(`div`,Nb,[i.userInputParams.length===0?(z(),J(`div`,Pb,q(i.$t(`@UINPUT:暂无输入参数`)),1)):(z(),J(`div`,Fb,[(z(!0),J(Z,null,r(i.userInputParams,e=>(z(),J(`div`,{key:e.name,class:`user-input-row`},[h(`div`,Ib,[e.required?(z(),J(`span`,Lb,`*`)):N(`v-if`,!0),M(` `+q(e.name),1)]),P(d,{modelValue:i.userInputValues[e.name],"onUpdate:modelValue":t=>i.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 zb=$(wy,[[`render`,Rb],[`__scopeId`,`data-v-f56c993a`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/CommandConsole.vue`]]);c();var Bb=T({__name:`ConsoleView`,setup(e,{expose:t}){t();let n={CustomCommandsPanel:vy,CommandConsole:zb};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});c();var Vb={class:`console-view`},Hb={class:`console-view__sidebar`},Ub={class:`console-view__terminal`};function Wb(e,t,n,r,i,a){return z(),J(`div`,Vb,[N(` 左侧:自定义命令快捷面板(手风琴竖向列表,折叠后只留 header 竖条) `),h(`aside`,Hb,[P(r.CustomCommandsPanel)]),N(` 右侧:命令控制台(终端 + 自定义指令管理),占满剩余空间 `),h(`main`,Ub,[P(r.CommandConsole)])])}var Gb=$(Bb,[[`render`,Wb],[`__scopeId`,`data-v-862e14cf`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/views/ConsoleView.vue`]]),Kb=`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`;X(),c();var qb=3e3,Jb=ht(`monitor`,()=>{let e=U(null),t=U([]),n=U(!1),r=U(null),i=U(!0),a=U(qb),o=null,s=U(!1),c=F(()=>e.value!==null);async function l(){try{let t=await(await fetch(`/api/monitor/system`)).json();t.success?(e.value=t.data,r.value=null):r.value=t.error||`获取系统信息失败`}catch(e){r.value=e?.message||String(e)}}async function u(){try{let e=s.value?`/api/monitor/ports?all=1`:`/api/monitor/ports`,n=await(await fetch(e)).json();n.success?(t.value=n.data||[],r.value=null):r.value=n.error||`获取端口列表失败`}catch(e){r.value=e?.message||String(e)}}async function d(){if(!n.value){n.value=!0;try{await Promise.all([l(),u()])}finally{n.value=!1}}}async function f(e,t=!1){let n=await(await fetch(`/api/monitor/kill`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pid:e,force:t})})).json();if(!n.success)throw Error(n.error||`终止进程失败`);return await u(),n}function p(){m(),i.value&&(d().catch(()=>{}),o=window.setInterval(()=>{d().catch(()=>{})},a.value))}function m(){o!==null&&(window.clearInterval(o),o=null)}function h(e){i.value=e,e?p():m()}function g(e){s.value=e,i.value&&u().catch(()=>{})}return{overview:e,ports:t,loading:n,error:r,autoRefresh:i,refreshInterval:a,showAllPorts:s,hasData:c,fetchSystem:l,fetchPorts:u,refresh:d,killProcess:f,startAutoRefresh:p,stopAutoRefresh:m,setAutoRefresh:h,setShowAllPorts:g}}),Yb=[],Xb={git:null,console:null,editor:null,"source-map":null,workbench:[`tasks`],monitor:[`system`],mindmap:[`mindmap`],agent:Yb},Zb={current:[`git`],github:[`github`],gitee:[`gitee`]};function Qb(e){e!==null&&fetch(`/api/ai-context/refresh`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sections:e,force:!0})}).catch(()=>{})}function $b(e,t){Qb(e===`git`?Zb[t]??null:Xb[e]??null)}var ex={done:`/sounds/task-done.wav`,error:`/sounds/task-error.wav`,cancelled:``},tx=new Map;function nx(e){return ex[e]||``}function rx(e){if(typeof Audio>`u`)return null;let t=tx.get(e);if(t)return t;try{let t=new Audio(e);return t.preload=`auto`,tx.set(e,t),t}catch{return null}}function ix(e){let t=nx(e);if(!t)return!1;let n=rx(t);if(!n)return!1;try{n.currentTime=0}catch{}try{let e=n.play();e&&typeof e.catch==`function`&&e.catch(()=>{})}catch{}return!0}function ax(e){return e===`pending`||e===`running`}function ox(e){return e===`done`?`done`:e===`error`?`error`:e===`cancelled`?`cancelled`:null}function sx(e,t){return ax(e)&&ox(t)!==null}function cx(e){let t=String(e?.title??``).trim();if(!t)return Q(`@WORKBENCH:未命名任务`);let n=t.split(` / `);return n.length===2&&n[0]===n[1]?n[0]:t}function lx(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e}function ux(e){if(!e)return``;let t=typeof e.error==`string`?e.error.trim():``;if(t)return lx(t.replace(/\s+/g,` `),200);let n=(typeof e.output==`string`?e.output:``).split(`
131
- `).map(e=>e.trim()).filter(Boolean);return n.length?lx(n[n.length-1],200):``}function dx(){let e=null,t=!1,n=new Map;function r(e,t,n){let r=cx(t),i=ux(t),a=`zen-gitsync-job-${t.id||``}`;if(n&&ix(e),Rl()){let t=!1;if(t=zl(e===`done`?{title:Q(`@WORKBENCH:任务执行完成`),body:i?`${r}\n${i}`:r,tag:a}:e===`error`?{title:Q(`@WORKBENCH:任务执行出错`),body:i?`${r}\n${i}`:r,tag:a}:{title:Q(`@WORKBENCH:任务已停止`),body:r,tag:a}),t)return}e===`done`?V.success(Q(`@WORKBENCH:已完成:{name}`,{name:r})):e===`error`?V.error(Q(`@WORKBENCH:执行出错:{name}`,{name:r})):V.info(Q(`@WORKBENCH:已停止:{name}`,{name:r}))}function i(e){if(!e||typeof e.id!=`string`||!e.id)return;let t=n.get(e.id),i=String(e.status||``);if(n.set(e.id,i),!sx(t,i))return;let a=ox(i);if(!a)return;let o=!1,s=!1;try{let e=Lt();o=!!e.notifyOnTaskDone,s=!!e.notifySoundOnTaskDone}catch{o=!1,s=!1}o&&r(a,e,s)}function a(e,t){if(e===`hello`){for(let e of Array.isArray(t?.jobs)?t.jobs:[])e&&typeof e.id==`string`&&n.set(e.id,String(e.status||``));return}e===`job:update`&&i(t)}function o(){e||t||typeof EventSource>`u`||(e=new EventSource(`/api/workbench/events`),e.onmessage=e=>{try{let t=JSON.parse(e.data);a(t.event,t.payload)}catch{}},e.onerror=()=>{e?.close(),e=null,!t&&setTimeout(()=>{t||o()},3e3)})}function s(){t=!0,e?.close(),e=null}return{start:o,stop:s}}c(),X();var fx=5e3,px=T({__name:`App`,setup(e,{expose:t}){t();let n=_(()=>St(()=>import(`./CommitForm-CK9jLJOC.js`),__vite__mapDeps([28,2,1,3,4,5,6,7,13,14,15,16,10,29,30,17,18,31,32,33]))),r=_(()=>St(()=>import(`./LogList-DyQv-Yec.js`),__vite__mapDeps([34,2,1,3,4,7,5,6,35,13,14,15,16,10,29,30,36,37,38,39,40,41,42,8,17,18,43,44,45]))),i=_(()=>St(()=>import(`./RemoteRepoCard-yK90_VfS.js`),__vite__mapDeps([46,2,1,3,4,7,5,6,13,14,15,16,29,30,10,47]))),a=_(()=>St(()=>import(`./RemoteManagerDialog-BRQpjMSK.js`),__vite__mapDeps([48,2,1,3,4,7,5,6,13,14,15,16,29,30,10,17,18,49]))),o=_(()=>St(()=>import(`./AppVersionBadge-BEnoFzwh.js`),__vite__mapDeps([50,2,1,3,4,7,5,6,17,18,51]))),c=_(()=>St(()=>import(`./BranchSelector-C7eXeFif.js`),__vite__mapDeps([52,2,1,3,4,7,5,6,13,14,15,16,29,30,10,17,18,53]))),l={loadingComponent:z_,delay:200},u=_({loader:()=>St(()=>import(`./EditorView-D00zvntf.js`),__vite__mapDeps([54,2,1,3,4,5,6,7,13,14,10,36,37,38,39,40,41,42,8,9,55,44,56,57])),...l}),d=_({loader:()=>St(()=>import(`./SourceMapView-C55ixUwz.js`),__vite__mapDeps([58,2,1,3,4,7,5,6,10,36,41,42,8,21,22,59])),...l}),f=_({loader:()=>St(()=>import(`./WorkbenchView-CtJD3pz-.js`),__vite__mapDeps([60,2,1,3,4,5,6,7,13,14,10,44,8,17,18,9,55,56,61])),...l}),p=_({loader:()=>St(()=>import(`./MonitorView-Z5ZbGtaU.js`),__vite__mapDeps([62,2,1,3,4,7,5,6,63])),...l}),m=_({loader:()=>St(()=>import(`./MindmapView-EC2Wk_Qi.js`),__vite__mapDeps([64,2,1,3,4,5,6,7,10,38,39,65])),...l}),h=_({loader:()=>St(()=>import(`./AgentView-Blp40VRr.js`),__vite__mapDeps([66,2,1,3,4,5,6,7,10,17,18,9,55,13,14,44,56,67])),...l}),g=U(``),v=U(null),y=Bt(),b=Lt(),x=It(),S=Nm(),C=Ht(),w=Jb(),T=null;function D(){O(),w.fetchSystem().catch(()=>{}),T=window.setInterval(()=>{w.fetchSystem().catch(()=>{})},fx)}function O(){T!==null&&(window.clearInterval(T),T=null)}let ne=dx(),k=!0;function A(){if(!k)return;let e=Ll({loaded:b.isLoaded,enabled:b.notifyOnTaskDone,permission:Fl()});e!==`wait`&&(k=!1,e!==`skip`&&Il())}let j=U(!1),M=F(()=>b.currentDirectory),N=F(()=>{let e=b.models.find(e=>e.isDefault);return e?e.name||e.model:``});function re(){let e=Jt(M.value);document.title=`${e} - Zen GitSync`}We(M,()=>{re()},{immediate:!0});function P(){b.config&&(g.value=`${Q(`@F13B4:默认提交信息: `)}${b.config.defaultCommitMessage}`)}async function ie(){try{let e=await(await fetch(`/api/current_directory`)).json();return b.setCurrentDirectory(e.directory||Q(`@F13B4:未知目录`)),e}catch(e){return console.error(`获取当前目录失败:`,e),{directory:Q(`@F13B4:未知目录`),isGitRepo:!1}}}_e(async()=>{console.log(Q(`@F13B4:---------- 页面初始化开始 ----------`)),kh().start(),S.start(),C.startPolling(),D(),ne.start(),window.addEventListener(`pointerdown`,A,!0);try{let e=await ie();b.isLoaded||await b.loadConfig(),P(),y.isGitRepo=e.isGitRepo===!0,y.lastCheckedTime=Date.now(),y.getUserInfo(),y.isGitRepo&&(await Promise.all([y.getCurrentBranch(!0),y.getAllBranches(),y.getRemoteUrl(),y.fetchRemotes(),y.getBranchStatus(!0)]),setTimeout(()=>{y.bootFetch().catch(e=>{console.warn(`[App] 启动静默 fetch 异常(已忽略):`,e)})},3e3))}catch(e){console.error(`初始化失败:`,e)}finally{j.value=!0,console.log(Q(`@F13B4:---------- 页面初始化完成 ----------`)),setTimeout(()=>{Qb(Yb)},1e3),setTimeout(()=>{we()},100)}}),Ye(()=>{S.stop(),C.stopPolling(),O(),ne.stop(),window.removeEventListener(`pointerdown`,A,!0),kh().stop()});function ae(){we()}window.addEventListener(`ui-layout-reset`,ae),Ye(()=>{window.removeEventListener(`ui-layout-reset`,ae)}),We(()=>y.isGitRepo,()=>{fe(()=>we())});function oe(){v.value&&v.value.refreshStatus()}let se=U(`git`),ce=U(`current`),le=[{id:`current`,labelKey:`@F13B4:当前项目`},{id:`github`,labelKey:`@F13B4:GitHub 仓库`},{id:`gitee`,labelKey:`@F13B4:Gitee 仓库`}],I=U(null);We(se,e=>{e===`git`&&y.refreshStatusOnFocus()}),We([se,ce],([e,t])=>{$b(e,t)});let ue={value:null};function de(e){let t=e.detail;console.log(`[debug-open-in-editor] App.vue handleOpenFileInEditor fired, detail=`,t),t?.filePath&&(I.value=t.filePath,se.value=`editor`,console.log(`[debug-open-in-editor] App.vue set pendingEditorFilePath=`,t.filePath,`activeView=editor`),ue.value!==null&&clearTimeout(ue.value),ue.value=window.setTimeout(()=>{I.value=null,ue.value=null},500))}window.addEventListener(`zen-gitsync:open-file-in-editor`,de),Ye(()=>{window.removeEventListener(`zen-gitsync:open-file-in-editor`,de)});let pe=U(!1),me=U(void 0);function R(e){me.value=e??`general`,pe.value=!0}let{theme:he}=Gt();function ge(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${new Intl.NumberFormat(void 0,{maximumFractionDigits:r===0?0:1}).format(n)} ${t[r]}`}function ve(e){return e>=90?`var(--color-danger)`:e>=70?`var(--color-warning)`:`var(--color-success)`}let z=!1,B=!1,V=0,be=0,xe=``,H=``,W=null,Se=null,G=null;function Ce(){let e=document.querySelector(`.grid-layout`);if(!e||!y.isGitRepo)return;let t=getComputedStyle(e).gridTemplateColumns.split(` `),n=getComputedStyle(e).gridTemplateRows.split(` `);if(t.length>=3&&n.length>=3){let e=parseFloat(t[0]),r=e/(e+parseFloat(t[2])),i=parseFloat(n[0]),a=i/(i+parseFloat(n[2]));b.ui.layout={...b.ui.layout,leftRatio:r,topRatio:a},console.log(`${Q(`@F13B4:布局比例已保存 - 左侧: `)}${(r*100).toFixed(0)}${Q(`@F13B4:%, 上方: `)}${(a*100).toFixed(0)}%`)}}function we(){let e=document.querySelector(`.grid-layout`);if(!e)return;if(!y.isGitRepo){e.style.gridTemplateRows=``,Ee();return}let t=b.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=``;Ee()}function K(){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 q=U(25),Te=U(50);function Ee(){let e=K();q.value=e.left,Te.value=e.top}function De(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`,Ee(),Ce()}function Oe(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`,Ee(),Ce()}function ke(e){W=e,Se===null&&(Se=requestAnimationFrame(()=>{Se=null,je()}))}function Ae(e){z=!0,V=e.clientX;let t=document.querySelector(`.grid-layout`);xe=getComputedStyle(t).gridTemplateColumns,document.getElementById(`v-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,ke),document.addEventListener(`mouseup`,Me),e.preventDefault()}function je(){if(!z)return;let e=W;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientX-V,r=xe.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 0.92fr`:a>s?t.style.gridTemplateColumns=`${s}fr 4px 0.6fr`:t.style.gridTemplateColumns=`${a}fr 4px ${1-a}fr`}}function Me(){z=!1,document.getElementById(`v-resizer`)?.classList.remove(`active`),Se!==null&&(cancelAnimationFrame(Se),Se=null),document.removeEventListener(`mousemove`,ke),document.removeEventListener(`mouseup`,Me),Ce()}function Ne(e){B=!0,be=e.clientY;let t=document.querySelector(`.grid-layout`);H=getComputedStyle(t).gridTemplateRows,document.getElementById(`h-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,Pe),document.addEventListener(`mouseup`,J),e.preventDefault()}function Pe(e){W=e,G===null&&(G=requestAnimationFrame(()=>{G=null,Fe()}))}function Fe(){if(!B)return;let e=W;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientY-be,r=H.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 0.8fr`:a>c?t.style.gridTemplateRows=`${c}fr 4px 0.19999999999999996fr`:t.style.gridTemplateRows=`${a}fr 4px ${o}fr`}}function J(){B=!1,document.getElementById(`h-resizer`)?.classList.remove(`active`),G!==null&&(cancelAnimationFrame(G),G=null),document.removeEventListener(`mousemove`,Pe),document.removeEventListener(`mouseup`,J),Ce()}let Ie={CommitForm:n,LogList:r,RemoteRepoCard:i,RemoteManagerDialog:a,AppVersionBadge:o,BranchSelector:c,asyncOpts:l,EditorView:u,SourceMapView:d,WorkbenchView:f,MonitorView:p,MindmapView:m,AgentView:h,configInfo:g,gitStatusRef:v,gitStore:y,configStore:b,localeStore:x,instancesStore:S,toolsStore:C,monitorStore:w,MONITOR_INTERVAL:fx,get monitorTimer(){return T},set monitorTimer(e){T=e},startHeaderMonitor:D,stopHeaderMonitor:O,taskNotifier:ne,get notifyPermissionArmed(){return k},set notifyPermissionArmed(e){k=e},onUserGestureForNotifyPermission:A,initCompleted:j,currentDirectory:M,defaultModelName:N,updateDocumentTitle:re,updateConfigInfo:P,loadCurrentDirectory:ie,handleUiLayoutReset:ae,handleBranchChanged:oe,activeView:se,gitTab:ce,GIT_TABS:le,pendingEditorFilePath:I,pendingEditorTimer:ue,handleOpenFileInEditor:de,userSettingsDialogVisible:pe,userSettingsInitialTab:me,openUserSettingsDialog:R,isDarkTheme:he,formatBytes:ge,usageColor:ve,get isVResizing(){return z},set isVResizing(e){z=e},get isHResizing(){return B},set isHResizing(e){B=e},get initialX(){return V},set initialX(e){V=e},get initialY(){return be},set initialY(e){be=e},get initialGridTemplateColumns(){return xe},set initialGridTemplateColumns(e){xe=e},get initialGridTemplateRows(){return H},set initialGridTemplateRows(e){H=e},get lastMouseEvent(){return W},set lastMouseEvent(e){W=e},get vResizeRafId(){return Se},set vResizeRafId(e){Se=e},get hResizeRafId(){return G},set hResizeRafId(e){G=e},saveLayoutRatios:Ce,loadLayoutRatios:we,readGridPercents:K,gridLeftPercent:q,gridTopPercent:Te,refreshGridPercents:Ee,nudgeV:De,nudgeH:Oe,scheduleVResize:ke,startVResize:Ae,handleVResize:je,stopVResize:Me,startHResize:Ne,scheduleHResize:Pe,handleHResize:Fe,stopHResize:J,get $t(){return Q},GitStatus:vs,DirectorySelector:Pl,UserSettingsDialog:sm,ActivityBar:Am,InstanceSwitcher:mh,AppErrorBanner:Bh,RecentDirectoriesList:Sc,RemoteReposList:N_,ConsoleView:Gb,get ElConfigProvider(){return s},get ElButton(){return pt},get ElTooltip(){return L},get ElIcon(){return E},get Setting(){return te},get WarningFilled(){return Ue},get Sunny(){return ye},get Moon(){return ee},get logo(){return Kb}};return Object.defineProperty(Ie,"__isScriptSetup",{enumerable:!1,value:!0}),Ie}});c(),v(),K();var mx={class:`skip-link`,href:`#main-content`},hx={class:`main-header app-header`},gx={class:`header-left`},_x={href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,class:`header-brand-link`},vx=[`src`],yx={class:`header-center`},bx={class:`header-info`},xx={key:0,class:`header-actions`},Sx=[`aria-label`,`aria-pressed`],Cx={key:1,class:`header-monitor`},wx={class:`header-monitor__tooltip`},Tx={class:`header-monitor__content`},Ex={class:`header-monitor__item`},Dx={class:`header-monitor__bar`},Ox={class:`header-monitor__item`},kx={class:`header-monitor__bar`},Ax={id:`user-info`,class:`user-info-card`},jx={class:`user-name`},Mx={class:`user-label`},Nx={class:`user-warning`},Px=[`aria-label`],Fx={key:0,class:`config-broken-banner`,role:`alert`,"aria-live":`polite`},Ix={class:`banner-left`},Lx={class:`banner-text`},Rx={class:`banner-title`},zx={class:`banner-detail`},Bx={key:1,class:`banner-path`},Vx={class:`banner-actions`},Hx={key:0,class:`loading-container`},Ux={class:`loading-card`,role:`status`,"aria-live":`polite`},Wx={class:`loading-text`},Gx={class:`loading-text__label`},Kx={key:1,class:`app-body`},qx={class:`view-pane git-pane`},Jx=[`aria-label`],Yx=[`id`,`aria-selected`,`aria-controls`,`onClick`],Xx={class:`git-pane__body`},Zx={class:`git-status-panel`},Qx=[`aria-label`,`aria-valuenow`],$x={key:0,class:`commit-form-panel`},eS={key:0,class:`state-block state-block--warning user-unconfigured-card`},tS={class:`state-block__title user-unconfigured-title`},nS={class:`state-block__hint user-unconfigured-desc`},rS={class:`user-unconfigured-actions`},iS={class:`user-unconfigured-divider`},aS={class:`user-unconfigured-code`},oS={key:1,class:`commit-form-panel commit-form-panel--empty`},sS=[`aria-label`,`aria-valuenow`],cS={class:`log-list-panel`},lS={class:`view-pane console-pane`},uS={class:`view-pane editor-pane`},dS={class:`view-pane source-map-pane`},fS={class:`view-pane workbench-pane`},pS={class:`view-pane monitor-pane`},mS={class:`view-pane mindmap-pane`},hS={class:`view-pane agent-pane`},gS={class:`main-footer app-footer`},_S={class:`footer-left`},vS=[`aria-label`],yS={class:`footer-model-hint__label`},bS={class:`footer-model-hint__name`},xS={class:`footer-right`};function SS(e,t,n,i,a,o){return z(),p(i.ElConfigProvider,{locale:i.localeStore.elementPlusLocale},{default:G(()=>[N(` OPT-5: 全局网络错误横幅(header 下方置顶,不影响主区布局) `),N(` 跳过导航:键盘用户第一次 Tab 就能直达主内容(WCAG 2.4.1) `),h(`a`,mx,q(i.$t(`@F13B4:跳到主内容`)),1),P(i.AppErrorBanner),h(`header`,hx,[h(`div`,gx,[h(`a`,_x,[h(`img`,{src:i.logo,alt:`Zen GitSync Logo`,class:`logo`,width:`32`,height:`32`},null,8,vx),t[11]||=h(`h1`,null,`Zen GitSync`,-1)])]),h(`div`,yx,[P(i.DirectorySelector,{variant:`header`})]),h(`div`,bx,[N(` 顶部右侧动作 `),i.gitStore.isGitRepo?(z(),J(`div`,xx,[N(` <CommandHistory /> `)])):N(`v-if`,!0),N(` 实例切换器:显示所有运行中的 GUI 项目 `),P(i.InstanceSwitcher),N(` 主题切换快捷按钮(OPT-2:原本要进设置→通用→主题 4 次点击,现在 1 次) `),P(i.ElTooltip,{content:i.isDarkTheme?i.$t(`@F13B4:切换到浅色主题`):i.$t(`@F13B4:切换到深色主题`),placement:`bottom`,effect:`dark`,"show-after":200},{default:G(()=>[h(`button`,{class:`modern-btn btn-icon-32 theme-toggle-btn`,"aria-label":i.isDarkTheme?i.$t(`@F13B4:切换到浅色主题`):i.$t(`@F13B4:切换到深色主题`),"aria-pressed":i.isDarkTheme?`true`:`false`,onClick:t[0]||=e=>i.configStore.toggleTheme()},[P(i.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:G(()=>[N(` 显示「下一步动作」对应的图标,贴合主流操作系统托盘的直觉:
131
+ `).map(e=>e.trim()).filter(Boolean);return n.length?lx(n[n.length-1],200):``}function dx(){let e=null,t=!1,n=new Map;function r(e,t,n){let r=cx(t),i=ux(t),a=`zen-gitsync-job-${t.id||``}`;if(n&&ix(e),Rl()){let t=!1;if(t=zl(e===`done`?{title:Q(`@WORKBENCH:任务执行完成`),body:i?`${r}\n${i}`:r,tag:a}:e===`error`?{title:Q(`@WORKBENCH:任务执行出错`),body:i?`${r}\n${i}`:r,tag:a}:{title:Q(`@WORKBENCH:任务已停止`),body:r,tag:a}),t)return}e===`done`?V.success(Q(`@WORKBENCH:已完成:{name}`,{name:r})):e===`error`?V.error(Q(`@WORKBENCH:执行出错:{name}`,{name:r})):V.info(Q(`@WORKBENCH:已停止:{name}`,{name:r}))}function i(e){if(!e||typeof e.id!=`string`||!e.id)return;let t=n.get(e.id),i=String(e.status||``);if(n.set(e.id,i),!sx(t,i))return;let a=ox(i);if(!a)return;let o=!1,s=!1;try{let e=Lt();o=!!e.notifyOnTaskDone,s=!!e.notifySoundOnTaskDone}catch{o=!1,s=!1}o&&r(a,e,s)}function a(e,t){if(e===`hello`){for(let e of Array.isArray(t?.jobs)?t.jobs:[])e&&typeof e.id==`string`&&n.set(e.id,String(e.status||``));return}e===`job:update`&&i(t)}function o(){e||t||typeof EventSource>`u`||(e=new EventSource(`/api/workbench/events`),e.onmessage=e=>{try{let t=JSON.parse(e.data);a(t.event,t.payload)}catch{}},e.onerror=()=>{e?.close(),e=null,!t&&setTimeout(()=>{t||o()},3e3)})}function s(){t=!0,e?.close(),e=null}return{start:o,stop:s}}c(),X();var fx=5e3,px=T({__name:`App`,setup(e,{expose:t}){t();let n=_(()=>St(()=>import(`./CommitForm-BHwc5sEG.js`),__vite__mapDeps([28,2,1,3,4,5,6,7,13,14,15,16,10,29,30,17,18,31,32,33]))),r=_(()=>St(()=>import(`./LogList-BatjYplm.js`),__vite__mapDeps([34,2,1,3,4,7,5,6,35,13,14,15,16,10,29,30,36,37,38,39,40,41,42,8,17,18,43,44,45]))),i=_(()=>St(()=>import(`./RemoteRepoCard-kOIERvah.js`),__vite__mapDeps([46,2,1,3,4,7,5,6,13,14,15,16,29,30,10,47]))),a=_(()=>St(()=>import(`./RemoteManagerDialog-BxD0m5c-.js`),__vite__mapDeps([48,2,1,3,4,7,5,6,13,14,15,16,29,30,10,17,18,49]))),o=_(()=>St(()=>import(`./AppVersionBadge-DNG70v26.js`),__vite__mapDeps([50,2,1,3,4,7,5,6,17,18,51]))),c=_(()=>St(()=>import(`./BranchSelector-DBI8ieGq.js`),__vite__mapDeps([52,2,1,3,4,7,5,6,13,14,15,16,29,30,10,17,18,53]))),l={loadingComponent:z_,delay:200},u=_({loader:()=>St(()=>import(`./EditorView-B3EO-mxZ.js`),__vite__mapDeps([54,2,1,3,4,5,6,7,13,14,10,36,37,38,39,40,41,42,8,9,55,44,56,57])),...l}),d=_({loader:()=>St(()=>import(`./SourceMapView-Bs3DYqDP.js`),__vite__mapDeps([58,2,1,3,4,7,5,6,10,36,41,42,8,21,22,59])),...l}),f=_({loader:()=>St(()=>import(`./WorkbenchView-nHzg7gau.js`),__vite__mapDeps([60,2,1,3,4,5,6,7,13,14,10,44,8,17,18,9,55,56,61])),...l}),p=_({loader:()=>St(()=>import(`./MonitorView-BblFdPFM.js`),__vite__mapDeps([62,2,1,3,4,7,5,6,63])),...l}),m=_({loader:()=>St(()=>import(`./MindmapView-CTHfsYTC.js`),__vite__mapDeps([64,2,1,3,4,5,6,7,10,38,39,65])),...l}),h=_({loader:()=>St(()=>import(`./AgentView-BH5Ec4j1.js`),__vite__mapDeps([66,2,1,3,4,5,6,7,10,17,18,9,55,13,14,44,56,67])),...l}),g=U(``),v=U(null),y=Bt(),b=Lt(),x=It(),S=Nm(),C=Ht(),w=Jb(),T=null;function D(){O(),w.fetchSystem().catch(()=>{}),T=window.setInterval(()=>{w.fetchSystem().catch(()=>{})},fx)}function O(){T!==null&&(window.clearInterval(T),T=null)}let ne=dx(),k=!0;function A(){if(!k)return;let e=Ll({loaded:b.isLoaded,enabled:b.notifyOnTaskDone,permission:Fl()});e!==`wait`&&(k=!1,e!==`skip`&&Il())}let j=U(!1),M=F(()=>b.currentDirectory),N=F(()=>{let e=b.models.find(e=>e.isDefault);return e?e.name||e.model:``});function re(){let e=Jt(M.value);document.title=`${e} - Zen GitSync`}We(M,()=>{re()},{immediate:!0});function P(){b.config&&(g.value=`${Q(`@F13B4:默认提交信息: `)}${b.config.defaultCommitMessage}`)}async function ie(){try{let e=await(await fetch(`/api/current_directory`)).json();return b.setCurrentDirectory(e.directory||Q(`@F13B4:未知目录`)),e}catch(e){return console.error(`获取当前目录失败:`,e),{directory:Q(`@F13B4:未知目录`),isGitRepo:!1}}}_e(async()=>{console.log(Q(`@F13B4:---------- 页面初始化开始 ----------`)),kh().start(),S.start(),C.startPolling(),D(),ne.start(),window.addEventListener(`pointerdown`,A,!0);try{let e=await ie();b.isLoaded||await b.loadConfig(),P(),y.isGitRepo=e.isGitRepo===!0,y.lastCheckedTime=Date.now(),y.getUserInfo(),y.isGitRepo&&(await Promise.all([y.getCurrentBranch(!0),y.getAllBranches(),y.getRemoteUrl(),y.fetchRemotes(),y.getBranchStatus(!0)]),setTimeout(()=>{y.bootFetch().catch(e=>{console.warn(`[App] 启动静默 fetch 异常(已忽略):`,e)})},3e3))}catch(e){console.error(`初始化失败:`,e)}finally{j.value=!0,console.log(Q(`@F13B4:---------- 页面初始化完成 ----------`)),setTimeout(()=>{Qb(Yb)},1e3),setTimeout(()=>{we()},100)}}),Ye(()=>{S.stop(),C.stopPolling(),O(),ne.stop(),window.removeEventListener(`pointerdown`,A,!0),kh().stop()});function ae(){we()}window.addEventListener(`ui-layout-reset`,ae),Ye(()=>{window.removeEventListener(`ui-layout-reset`,ae)}),We(()=>y.isGitRepo,()=>{fe(()=>we())});function oe(){v.value&&v.value.refreshStatus()}let se=U(`git`),ce=U(`current`),le=[{id:`current`,labelKey:`@F13B4:当前项目`},{id:`github`,labelKey:`@F13B4:GitHub 仓库`},{id:`gitee`,labelKey:`@F13B4:Gitee 仓库`}],I=U(null);We(se,e=>{e===`git`&&y.refreshStatusOnFocus()}),We([se,ce],([e,t])=>{$b(e,t)});let ue={value:null};function de(e){let t=e.detail;console.log(`[debug-open-in-editor] App.vue handleOpenFileInEditor fired, detail=`,t),t?.filePath&&(I.value=t.filePath,se.value=`editor`,console.log(`[debug-open-in-editor] App.vue set pendingEditorFilePath=`,t.filePath,`activeView=editor`),ue.value!==null&&clearTimeout(ue.value),ue.value=window.setTimeout(()=>{I.value=null,ue.value=null},500))}window.addEventListener(`zen-gitsync:open-file-in-editor`,de),Ye(()=>{window.removeEventListener(`zen-gitsync:open-file-in-editor`,de)});let pe=U(!1),me=U(void 0);function R(e){me.value=e??`general`,pe.value=!0}let{theme:he}=Gt();function ge(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${new Intl.NumberFormat(void 0,{maximumFractionDigits:r===0?0:1}).format(n)} ${t[r]}`}function ve(e){return e>=90?`var(--color-danger)`:e>=70?`var(--color-warning)`:`var(--color-success)`}let z=!1,B=!1,V=0,be=0,xe=``,H=``,W=null,Se=null,G=null;function Ce(){let e=document.querySelector(`.grid-layout`);if(!e||!y.isGitRepo)return;let t=getComputedStyle(e).gridTemplateColumns.split(` `),n=getComputedStyle(e).gridTemplateRows.split(` `);if(t.length>=3&&n.length>=3){let e=parseFloat(t[0]),r=e/(e+parseFloat(t[2])),i=parseFloat(n[0]),a=i/(i+parseFloat(n[2]));b.ui.layout={...b.ui.layout,leftRatio:r,topRatio:a},console.log(`${Q(`@F13B4:布局比例已保存 - 左侧: `)}${(r*100).toFixed(0)}${Q(`@F13B4:%, 上方: `)}${(a*100).toFixed(0)}%`)}}function we(){let e=document.querySelector(`.grid-layout`);if(!e)return;if(!y.isGitRepo){e.style.gridTemplateRows=``,Ee();return}let t=b.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=``;Ee()}function K(){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 q=U(25),Te=U(50);function Ee(){let e=K();q.value=e.left,Te.value=e.top}function De(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`,Ee(),Ce()}function Oe(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`,Ee(),Ce()}function ke(e){W=e,Se===null&&(Se=requestAnimationFrame(()=>{Se=null,je()}))}function Ae(e){z=!0,V=e.clientX;let t=document.querySelector(`.grid-layout`);xe=getComputedStyle(t).gridTemplateColumns,document.getElementById(`v-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,ke),document.addEventListener(`mouseup`,Me),e.preventDefault()}function je(){if(!z)return;let e=W;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientX-V,r=xe.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 0.92fr`:a>s?t.style.gridTemplateColumns=`${s}fr 4px 0.6fr`:t.style.gridTemplateColumns=`${a}fr 4px ${1-a}fr`}}function Me(){z=!1,document.getElementById(`v-resizer`)?.classList.remove(`active`),Se!==null&&(cancelAnimationFrame(Se),Se=null),document.removeEventListener(`mousemove`,ke),document.removeEventListener(`mouseup`,Me),Ce()}function Ne(e){B=!0,be=e.clientY;let t=document.querySelector(`.grid-layout`);H=getComputedStyle(t).gridTemplateRows,document.getElementById(`h-resizer`)?.classList.add(`active`),document.addEventListener(`mousemove`,Pe),document.addEventListener(`mouseup`,J),e.preventDefault()}function Pe(e){W=e,G===null&&(G=requestAnimationFrame(()=>{G=null,Fe()}))}function Fe(){if(!B)return;let e=W;if(!e)return;let t=document.querySelector(`.grid-layout`),n=e.clientY-be,r=H.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 0.8fr`:a>c?t.style.gridTemplateRows=`${c}fr 4px 0.19999999999999996fr`:t.style.gridTemplateRows=`${a}fr 4px ${o}fr`}}function J(){B=!1,document.getElementById(`h-resizer`)?.classList.remove(`active`),G!==null&&(cancelAnimationFrame(G),G=null),document.removeEventListener(`mousemove`,Pe),document.removeEventListener(`mouseup`,J),Ce()}let Ie={CommitForm:n,LogList:r,RemoteRepoCard:i,RemoteManagerDialog:a,AppVersionBadge:o,BranchSelector:c,asyncOpts:l,EditorView:u,SourceMapView:d,WorkbenchView:f,MonitorView:p,MindmapView:m,AgentView:h,configInfo:g,gitStatusRef:v,gitStore:y,configStore:b,localeStore:x,instancesStore:S,toolsStore:C,monitorStore:w,MONITOR_INTERVAL:fx,get monitorTimer(){return T},set monitorTimer(e){T=e},startHeaderMonitor:D,stopHeaderMonitor:O,taskNotifier:ne,get notifyPermissionArmed(){return k},set notifyPermissionArmed(e){k=e},onUserGestureForNotifyPermission:A,initCompleted:j,currentDirectory:M,defaultModelName:N,updateDocumentTitle:re,updateConfigInfo:P,loadCurrentDirectory:ie,handleUiLayoutReset:ae,handleBranchChanged:oe,activeView:se,gitTab:ce,GIT_TABS:le,pendingEditorFilePath:I,pendingEditorTimer:ue,handleOpenFileInEditor:de,userSettingsDialogVisible:pe,userSettingsInitialTab:me,openUserSettingsDialog:R,isDarkTheme:he,formatBytes:ge,usageColor:ve,get isVResizing(){return z},set isVResizing(e){z=e},get isHResizing(){return B},set isHResizing(e){B=e},get initialX(){return V},set initialX(e){V=e},get initialY(){return be},set initialY(e){be=e},get initialGridTemplateColumns(){return xe},set initialGridTemplateColumns(e){xe=e},get initialGridTemplateRows(){return H},set initialGridTemplateRows(e){H=e},get lastMouseEvent(){return W},set lastMouseEvent(e){W=e},get vResizeRafId(){return Se},set vResizeRafId(e){Se=e},get hResizeRafId(){return G},set hResizeRafId(e){G=e},saveLayoutRatios:Ce,loadLayoutRatios:we,readGridPercents:K,gridLeftPercent:q,gridTopPercent:Te,refreshGridPercents:Ee,nudgeV:De,nudgeH:Oe,scheduleVResize:ke,startVResize:Ae,handleVResize:je,stopVResize:Me,startHResize:Ne,scheduleHResize:Pe,handleHResize:Fe,stopHResize:J,get $t(){return Q},GitStatus:vs,DirectorySelector:Pl,UserSettingsDialog:sm,ActivityBar:Am,InstanceSwitcher:mh,AppErrorBanner:Bh,RecentDirectoriesList:Sc,RemoteReposList:N_,ConsoleView:Gb,get ElConfigProvider(){return s},get ElButton(){return pt},get ElTooltip(){return L},get ElIcon(){return E},get Setting(){return te},get WarningFilled(){return Ue},get Sunny(){return ye},get Moon(){return ee},get logo(){return Kb}};return Object.defineProperty(Ie,"__isScriptSetup",{enumerable:!1,value:!0}),Ie}});c(),v(),K();var mx={class:`skip-link`,href:`#main-content`},hx={class:`main-header app-header`},gx={class:`header-left`},_x={href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,class:`header-brand-link`},vx=[`src`],yx={class:`header-center`},bx={class:`header-info`},xx={key:0,class:`header-actions`},Sx=[`aria-label`,`aria-pressed`],Cx={key:1,class:`header-monitor`},wx={class:`header-monitor__tooltip`},Tx={class:`header-monitor__content`},Ex={class:`header-monitor__item`},Dx={class:`header-monitor__bar`},Ox={class:`header-monitor__item`},kx={class:`header-monitor__bar`},Ax={id:`user-info`,class:`user-info-card`},jx={class:`user-name`},Mx={class:`user-label`},Nx={class:`user-warning`},Px=[`aria-label`],Fx={key:0,class:`config-broken-banner`,role:`alert`,"aria-live":`polite`},Ix={class:`banner-left`},Lx={class:`banner-text`},Rx={class:`banner-title`},zx={class:`banner-detail`},Bx={key:1,class:`banner-path`},Vx={class:`banner-actions`},Hx={key:0,class:`loading-container`},Ux={class:`loading-card`,role:`status`,"aria-live":`polite`},Wx={class:`loading-text`},Gx={class:`loading-text__label`},Kx={key:1,class:`app-body`},qx={class:`view-pane git-pane`},Jx=[`aria-label`],Yx=[`id`,`aria-selected`,`aria-controls`,`onClick`],Xx={class:`git-pane__body`},Zx={class:`git-status-panel`},Qx=[`aria-label`,`aria-valuenow`],$x={key:0,class:`commit-form-panel`},eS={key:0,class:`state-block state-block--warning user-unconfigured-card`},tS={class:`state-block__title user-unconfigured-title`},nS={class:`state-block__hint user-unconfigured-desc`},rS={class:`user-unconfigured-actions`},iS={class:`user-unconfigured-divider`},aS={class:`user-unconfigured-code`},oS={key:1,class:`commit-form-panel commit-form-panel--empty`},sS=[`aria-label`,`aria-valuenow`],cS={class:`log-list-panel`},lS={class:`view-pane console-pane`},uS={class:`view-pane editor-pane`},dS={class:`view-pane source-map-pane`},fS={class:`view-pane workbench-pane`},pS={class:`view-pane monitor-pane`},mS={class:`view-pane mindmap-pane`},hS={class:`view-pane agent-pane`},gS={class:`main-footer app-footer`},_S={class:`footer-left`},vS=[`aria-label`],yS={class:`footer-model-hint__label`},bS={class:`footer-model-hint__name`},xS={class:`footer-right`};function SS(e,t,n,i,a,o){return z(),p(i.ElConfigProvider,{locale:i.localeStore.elementPlusLocale},{default:G(()=>[N(` OPT-5: 全局网络错误横幅(header 下方置顶,不影响主区布局) `),N(` 跳过导航:键盘用户第一次 Tab 就能直达主内容(WCAG 2.4.1) `),h(`a`,mx,q(i.$t(`@F13B4:跳到主内容`)),1),P(i.AppErrorBanner),h(`header`,hx,[h(`div`,gx,[h(`a`,_x,[h(`img`,{src:i.logo,alt:`Zen GitSync Logo`,class:`logo`,width:`32`,height:`32`},null,8,vx),t[11]||=h(`h1`,null,`Zen GitSync`,-1)])]),h(`div`,yx,[P(i.DirectorySelector,{variant:`header`})]),h(`div`,bx,[N(` 顶部右侧动作 `),i.gitStore.isGitRepo?(z(),J(`div`,xx,[N(` <CommandHistory /> `)])):N(`v-if`,!0),N(` 实例切换器:显示所有运行中的 GUI 项目 `),P(i.InstanceSwitcher),N(` 主题切换快捷按钮(OPT-2:原本要进设置→通用→主题 4 次点击,现在 1 次) `),P(i.ElTooltip,{content:i.isDarkTheme?i.$t(`@F13B4:切换到浅色主题`):i.$t(`@F13B4:切换到深色主题`),placement:`bottom`,effect:`dark`,"show-after":200},{default:G(()=>[h(`button`,{class:`modern-btn btn-icon-32 theme-toggle-btn`,"aria-label":i.isDarkTheme?i.$t(`@F13B4:切换到浅色主题`):i.$t(`@F13B4:切换到深色主题`),"aria-pressed":i.isDarkTheme?`true`:`false`,onClick:t[0]||=e=>i.configStore.toggleTheme()},[P(i.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:G(()=>[N(` 显示「下一步动作」对应的图标,贴合主流操作系统托盘的直觉:
132
132
  当前 dark → 太阳(点了变亮);当前 light → 月亮(点了变暗)。
133
133
  之前 v-if/v-else 是「显示当前主题」,容易让人误点不下去。 `),i.isDarkTheme?(z(),p(i.Sunny,{key:0})):(z(),p(i.Moon,{key:1}))]),_:1})],8,Sx)]),_:1},8,[`content`]),N(` 系统监控指示器:header 右侧常驻展示 CPU/内存 `),i.monitorStore.overview?(z(),J(`div`,Cx,[P(i.ElTooltip,{placement:`bottom`,effect:`dark`,"show-after":200},{content:G(()=>[h(`div`,wx,[h(`div`,null,`CPU: `+q(i.monitorStore.overview.cpu.model),1),h(`div`,null,q(i.monitorStore.overview.cpu.cores)+` `+q(i.$t(`@MONITOR:核心`))+` · `+q(i.monitorStore.overview.cpu.usage.toFixed(1))+`%`,1),h(`div`,null,`内存: `+q(i.formatBytes(i.monitorStore.overview.memory.used))+` / `+q(i.formatBytes(i.monitorStore.overview.memory.total)),1),h(`div`,null,`空闲: `+q(i.formatBytes(i.monitorStore.overview.memory.free)),1)])]),default:G(()=>[h(`div`,Tx,[h(`div`,Ex,[t[12]||=h(`span`,{class:`header-monitor__label`},`CPU`,-1),h(`span`,{class:`header-monitor__value`,style:R({color:i.usageColor(i.monitorStore.overview.cpu.usage)})},q(i.monitorStore.overview.cpu.usage.toFixed(0))+`% `,5),h(`div`,Dx,[h(`div`,{class:`header-monitor__fill`,style:R({width:`${Math.min(i.monitorStore.overview.cpu.usage,100)}%`,background:i.usageColor(i.monitorStore.overview.cpu.usage)})},null,4)])]),t[14]||=h(`div`,{class:`header-monitor__divider`},null,-1),h(`div`,Ox,[t[13]||=h(`span`,{class:`header-monitor__label`},`MEM`,-1),h(`span`,{class:`header-monitor__value`,style:R({color:i.usageColor(i.monitorStore.overview.memory.usagePercent)})},q(i.monitorStore.overview.memory.usagePercent.toFixed(0))+`% `,5),h(`div`,kx,[h(`div`,{class:`header-monitor__fill`,style:R({width:`${Math.min(i.monitorStore.overview.memory.usagePercent,100)}%`,background:i.usageColor(i.monitorStore.overview.memory.usagePercent)})},null,4)])])])]),_:1})])):N(`v-if`,!0),N(` 用户信息 `),h(`div`,Ax,[i.gitStore.userName?(z(),p(i.ElTooltip,{key:0,content:i.gitStore.userEmail||i.gitStore.userName,placement:`bottom`,effect:`dark`,"show-after":200},{default:G(()=>[h(`span`,jx,q(i.gitStore.userName),1)]),_:1},8,[`content`])):(z(),J(Z,{key:1},[h(`span`,Mx,q(i.$t(`@F13B4:用户: `)),1),h(`span`,Nx,q(i.$t(`@F13B4:未配置`)),1)],64)),P(i.ElTooltip,{content:i.$t(`@F13B4:用户设置`),placement:`bottom`,effect:`dark`,"show-after":200},{default:G(()=>[h(`button`,{class:`modern-btn btn-icon-28`,"aria-label":i.$t(`@F13B4:用户设置`),onClick:t[1]||=e=>i.openUserSettingsDialog()},[P(i.ElIcon,{class:`btn-icon`,"aria-hidden":`true`},{default:G(()=>[P(i.Setting)]),_:1})],8,Px)]),_:1},8,[`content`])])])]),i.configStore.hasConfigLoadError?(z(),J(`div`,Fx,[h(`div`,Ix,[P(i.ElIcon,{class:`banner-icon`,"aria-hidden":`true`},{default:G(()=>[P(i.WarningFilled)]),_:1}),h(`div`,Lx,[h(`span`,Rx,q(i.$t(`@CFGERR:系统配置文件有问题`)),1),i.configStore.configLoadError?(z(),p(i.ElTooltip,{key:0,content:i.configStore.configLoadError,placement:`bottom`,effect:`dark`,"show-after":200},{default:G(()=>[h(`span`,zx,q(i.$t(`@CFGERR:查看原因`)),1)]),_:1},8,[`content`])):N(`v-if`,!0),i.configStore.configFilePath?(z(),J(`span`,Bx,q(i.configStore.configFilePath),1)):N(`v-if`,!0)])]),h(`div`,Vx,[P(i.ElButton,{size:`small`,type:`warning`,onClick:t[2]||=e=>i.configStore.openSystemConfigFile()},{default:G(()=>[M(q(i.$t(`@CFGERR:打开系统配置文件`)),1)]),_:1})])])):N(`v-if`,!0),h(`main`,{id:`main-content`,tabindex:`-1`,class:`main-container`,style:R({top:i.configStore.hasConfigLoadError?`104px`:`64px`})},[i.initCompleted?(z(),J(`div`,Kx,[N(` VS Code 风格活动栏 `),P(i.ActivityBar,{activeView:i.activeView,"onUpdate:activeView":t[3]||=e=>i.activeView=e},null,8,[`activeView`]),N(` Git 视图:2 列布局 — 左 GitStatus | 右(上 commit-form / h-resizer / 下 log-list)
134
134
  非 Git 仓库时:右上 RecentDirectoriesList 占满右侧整列,隐藏 h-resizer + log-list-panel,