zen-gitsync 2.15.26 → 2.15.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/ui/public/assets/{AppVersionBadge-BeH1vNS1.js → AppVersionBadge-C7U6UeHC.js} +2 -2
- package/src/ui/public/assets/{BranchSelector-td71VPCT.js → BranchSelector-CKNLazv_.js} +1 -1
- package/src/ui/public/assets/{CommitForm-Co2pAqvZ.js → CommitForm-CpRD6hA6.js} +1 -1
- package/src/ui/public/assets/{CommonDialog-BxxtrdKI.js → CommonDialog-BadQ_nZk.js} +1 -1
- package/src/ui/public/assets/{ConsoleView-BhbZStde.js → ConsoleView-ebExvSRG.js} +2 -2
- package/src/ui/public/assets/{CustomCommandManager-CggDqzk5.js → CustomCommandManager-DC0fsCX_.js} +1 -1
- package/src/ui/public/assets/{EditorView-D5Mq9oY1.js → EditorView-CIq-OIpz.js} +0 -0
- package/src/ui/public/assets/{FileDiffViewer-BWVy6WEV.js → FileDiffViewer-33eMc6dq.js} +1 -1
- package/src/ui/public/assets/{FlowExecutionViewer-D0ZoF0cO.js → FlowExecutionViewer-BF4jVN0x.js} +1 -1
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-Bdjd2omK.js → FlowOrchestrationWorkspace-aXgYKooy.js} +1 -1
- package/src/ui/public/assets/{ImagePreview-OUOPkrzj.js → ImagePreview-lFX2LeId.js} +1 -1
- package/src/ui/public/assets/{LogList-B8-TveZI.js → LogList-Dxamn9Fg.js} +1 -1
- package/src/ui/public/assets/{MindmapView-lv2j6Ow3.js → MindmapView-Lq9qpPJ_.js} +1 -1
- package/src/ui/public/assets/{MonitorView-a66FSm5j.js → MonitorView-RD1qTcJ-.js} +1 -1
- package/src/ui/public/assets/{ProjectStartupButton-DiG6Vhoz.js → ProjectStartupButton-DNtwXC7_.js} +1 -1
- package/src/ui/public/assets/{RemoteRepoCard-DRJGH2Fs.js → RemoteRepoCard-BBQdPHy-.js} +1 -1
- package/src/ui/public/assets/{ResetToRemoteButton-DNKvPvlZ.js → ResetToRemoteButton-CLs_tAWC.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-DLpq5XIT.js → SourceMapView-1lOm5CH0.js} +1 -1
- package/src/ui/public/assets/{SvgIcon-C3AADPEM.js → SvgIcon-CwxPHX0Y.js} +1 -1
- package/src/ui/public/assets/{TemplateManager-Sih2OA7J.js → TemplateManager-BeRHPYAH.js} +1 -1
- package/src/ui/public/assets/{UserInputNode-DprKrpeX.js → UserInputNode-Di0G_ndM.js} +1 -1
- package/src/ui/public/assets/WorkbenchView-C3BTjSU7.js +12 -0
- package/src/ui/public/assets/WorkbenchView-Xn_QixjM.css +1 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-DEeiACve.js → _plugin-vue_export-helper-DiP9hhza.js} +2 -2
- package/src/ui/public/assets/{configStore-DPrLgVO3.js → configStore-rGvG6jYS.js} +1 -1
- package/src/ui/public/assets/{gitStore-BhqvGBkh.js → gitStore-DziAOYX1.js} +1 -1
- package/src/ui/public/assets/{index-MSgsqlHo.js → index-BGDSJ4Fi.js} +3 -3
- package/src/ui/public/assets/index-Bmv2Ce3b.css +1 -0
- package/src/ui/public/index.html +10 -10
- package/src/ui/public/assets/WorkbenchView-CiJohIJ5.js +0 -12
- package/src/ui/public/assets/WorkbenchView-DMoulJCG.css +0 -1
- package/src/ui/public/assets/index-BRlG3Fp_.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-DAXXjFlN.js";import{Jn as e,a as t,mn as n,n as r,sr as i,t as a}from"./element-plus-BuYhyYxZ.js";import{d as o}from"./vendor-Cp3OS8BA.js";import{a as s,n as c,r as l}from"./_plugin-vue_export-helper-DEeiACve.js";var u={"zh-CN":r,"en-US":a};function d(e){return u[e]||r}var f=o(`locale`,()=>{let e=i(l()),t=n(()=>d(e.value));async function r(t){s(t),e.value=t;let n=p();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:t,changeLocale:r}}),p=o(`config`,()=>{let r=i(``),a=i([]),o=i([]),l=i([]),u=i([]),d=i([]),p=i([]),m=i([]),h=i([]),g=i(!1),_=i({enabled:!1,type:`command`,refId:``}),v=i(!1),y=i(!1),b=i(``),x=i(``),S=i(``),C=i(!0),w=i(!1),T=i(!0),E=i(!1),D=i(!1),O=i(!0),k=i(`light`),A=i(`zh-CN`),j=i([]),M={layout:{leftRatio:.25,midRatio:.375,rightRatio:.375,topRatio:.5},layoutsByProject:{},fileListViewMode:`list`,fileDiffSplitPercent:35,commandConsole:{expanded:!0,useTerminal:!0,showTerminalSessions:!0,splitPercent:25},editorAutoSave:!1,mindmapDir:``},N=i(JSON.parse(JSON.stringify(M))),P=i(!1);function F(e){S.value=e||``}function I(){let e=S.value;if(e&&N.value.layoutsByProject?.[e]){N.value.layout={...N.value.layoutsByProject[e]};return}}function L(e){let t=document.documentElement;e===`dark`?t.setAttribute(`data-theme`,`dark`):e===`light`?t.removeAttribute(`data-theme`):window.matchMedia(`(prefers-color-scheme: dark)`).matches?t.setAttribute(`data-theme`,`dark`):t.removeAttribute(`data-theme`)}function R(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return k.value=e,L(e),$({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}L(k.value);let z=n(()=>({defaultCommitMessage:r.value,descriptionTemplates:a.value,scopeTemplates:o.value,messageTemplates:l.value,commandTemplates:u.value,lockedFiles:d.value,customCommands:p.value,orchestrations:m.value,startupItems:h.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:S.value})),B=n(()=>!!(b.value&&b.value.trim()));async function V(){try{let e=await fetch(`/api/config/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`}}),n=await e.json().catch(()=>({}));return e.ok&&n?.success?(t.success(c(`@D50BB:已打开系统配置文件`)),!0):(t.error(`${c(`@D50BB:打开系统配置文件失败: `)}${n?.error||``}`),!1)}catch(e){return t.error(`${c(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function H(e=!1){if(!e&&y.value&&!v.value)return console.log(c(`@D50BB:使用缓存的配置信息`)),z.value;v.value=!0;try{v.value=!0,console.log(c(`@D50BB:加载配置信息...`));let e=await fetch(`/api/config/getConfig`),n=await e.json().catch(()=>({}));if(!e.ok||n&&n.success===!1){let e=String(n?.error||c(`@D50BB:加载配置失败`)),r=String(n?.configPath||``),i=r?`\n${c(`@D50BB:配置文件`)}: ${r}`:``;return t.error(`${c(`@D50BB:加载配置失败: `)}${e}${i}`),b.value=e,x.value=r,null}if(b.value=``,x.value=``,r.value=n.defaultCommitMessage||``,a.value=n.descriptionTemplates||[],o.value=n.scopeTemplates||[],l.value=n.messageTemplates||[],u.value=n.commandTemplates||[],d.value=n.lockedFiles||[],p.value=n.customCommands||[],m.value=n.orchestrations||[],h.value=(n.startupItems||[]).map(e=>({id:String(e?.id??``),type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId??e?.commandId??``),createdAt:Number(e?.createdAt??Date.now()),enabled:typeof e?.enabled!=`boolean`||e.enabled})).filter(e=>e.id&&e.refId),g.value=n.startupAutoRun||!1,_.value={enabled:!!n?.afterQuickPushAction?.enabled,type:n?.afterQuickPushAction?.type===`workflow`?`workflow`:`command`,refId:String(n?.afterQuickPushAction?.refId||``).trim()},n.isStandardCommit!==void 0&&(T.value=!!n.isStandardCommit),n.skipHooks!==void 0&&(E.value=!!n.skipHooks),n.autoQuickPushOnEnter!==void 0&&(D.value=!!n.autoQuickPushOnEnter),n.autoSetDefaultMessage!==void 0&&(w.value=!!n.autoSetDefaultMessage),n.autoClosePushModal!==void 0&&(C.value=!!n.autoClosePushModal),n.pullBeforePush!==void 0&&(O.value=!!n.pullBeforePush),Array.isArray(n.models)&&(j.value=n.models),n.theme&&[`light`,`dark`,`auto`].includes(n.theme)&&(k.value=n.theme,L(n.theme)),n.locale&&[`zh-CN`,`en-US`].includes(n.locale)){A.value=n.locale,s(n.locale);let e=f();e.currentLocale=n.locale}if(n.currentDirectory&&(S.value=n.currentDirectory),n.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,M.layout.leftRatio),midRatio:e(r,M.layout.midRatio),rightRatio:e(i,M.layout.rightRatio),topRatio:e(a,M.layout.topRatio)}}let o=e(`zen-gitsync-file-list-view-mode`);(o===`list`||o===`tree`)&&(t.fileListViewMode=o);let s=e(`zen-gitsync-filediff-ratio`)??e(`fileDiff.splitPercent`);if(s!=null){let e=parseFloat(s);Number.isFinite(e)&&(t.fileDiffSplitPercent=Math.min(85,Math.max(15,e)))}let c=e(`useTerminal`),l=e(`isConsoleExpanded`),u=e(`showTerminalSessions`),d=e(`zen-gitsync-commandconsole-ratio`);if(c!==null||l!==null||u!==null||d!=null){let e=d==null?NaN:parseFloat(d);t.commandConsole={useTerminal:c!==`false`,expanded:l!==`false`,showTerminalSessions:u==null||u===`true`,splitPercent:Number.isFinite(e)?Math.min(85,Math.max(15,e)):M.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(N.value={...N.value,...t}),Object.keys(t).length>0&&q(t,{immediate:!0}).catch(e=>{console.error(`迁移 UI 设置到文件失败:`,e)});try{[`zen-gitsync-theme`,`zen-gitsync-locale`,`zen-gitsync-editor-auto-save`,`zen-gitsync-file-list-view-mode`,`zen-gitsync-filediff-ratio`,`fileDiff.splitPercent`,`isConsoleExpanded`,`useTerminal`,`showTerminalSessions`,`zen-gitsync-commandconsole-ratio`,`zen-gitsync-layout-left-ratio`,`zen-gitsync-layout-mid-ratio`,`zen-gitsync-layout-right-ratio`,`zen-gitsync-layout-top-ratio`,`locale`].forEach(e=>localStorage.removeItem(e))}catch{}}else{let e=n.ui.layoutsByProject&&typeof n.ui.layoutsByProject==`object`&&!Array.isArray(n.ui.layoutsByProject)?n.ui.layoutsByProject:{},t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r;t[n]={leftRatio:Number.isFinite(Number(e.leftRatio))?Number(e.leftRatio):M.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):M.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):M.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):M.layout.topRatio}}let r={...M.layout,...n.ui.layout||{}};N.value={layout:r,layoutsByProject:t,fileListViewMode:n.ui.fileListViewMode===`tree`?`tree`:`list`,fileDiffSplitPercent:Number.isFinite(Number(n.ui.fileDiffSplitPercent))?Math.min(85,Math.max(15,Number(n.ui.fileDiffSplitPercent))):M.fileDiffSplitPercent,commandConsole:{expanded:typeof n.ui.commandConsole?.expanded==`boolean`?n.ui.commandConsole.expanded:M.commandConsole.expanded,useTerminal:typeof n.ui.commandConsole?.useTerminal==`boolean`?n.ui.commandConsole.useTerminal:M.commandConsole.useTerminal,showTerminalSessions:typeof n.ui.commandConsole?.showTerminalSessions==`boolean`?n.ui.commandConsole.showTerminalSessions:M.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(n.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(n.ui.commandConsole.splitPercent))):M.commandConsole.splitPercent},editorAutoSave:typeof n.ui.editorAutoSave==`boolean`?n.ui.editorAutoSave:M.editorAutoSave,mindmapDir:typeof n.ui.mindmapDir==`string`?n.ui.mindmapDir:M.mindmapDir}}return I(),P.value=!0,y.value=!0,console.log(c(`@D50BB:配置信息加载完成`)),z.value}catch(e){return console.error(`加载配置失败:`,e),t.error(`${c(`@D50BB:加载配置失败: `)}${e.message}`),b.value=e.message,null}finally{v.value=!1}}async function U(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:T.value,skipHooks:E.value,autoQuickPushOnEnter:D.value,autoSetDefaultMessage:w.value,autoClosePushModal:C.value,pullBeforePush:O.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}e([T,E,D,w,C,O],()=>{y.value&&U()});let W=null,G={};async function K(){if(W&&=(clearTimeout(W),null),Object.keys(G).length===0)return;let e=G;G={};try{await fetch(`/api/config/save-ui-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}catch(e){console.error(`保存 UI 设置失败:`,e)}}async function q(e,t={}){if(P.value){if(t.immediate){Object.assign(G,e),await K();return}Object.assign(G,e),W&&clearTimeout(W),W=setTimeout(()=>{K()},300)}}async function J(){N.value.layout={...M.layout};let e=S.value;return e&&(N.value.layoutsByProject={...N.value.layoutsByProject,[e]:{...N.value.layout}}),await q({layoutsByProject:N.value.layoutsByProject},{immediate:!0}),N.value.layout}e(()=>N.value.fileListViewMode,e=>{P.value&&q({fileListViewMode:e})}),e(()=>N.value.fileDiffSplitPercent,e=>{P.value&&q({fileDiffSplitPercent:e})}),e(()=>N.value.editorAutoSave,e=>{P.value&&q({editorAutoSave:e})}),e(()=>N.value.layout,e=>{if(!P.value)return;let t=S.value;t&&(N.value.layoutsByProject={...N.value.layoutsByProject,[t]:e},q({layoutsByProject:N.value.layoutsByProject}))},{deep:!0}),e(()=>N.value.commandConsole,e=>{P.value&&q({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{K()});async function Y(e){try{let n=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:e})})).json();return n.success?(r.value=e,t.success(c(`@D50BB:默认提交信息已保存`)),!0):(t.error(`${c(`@D50BB:保存失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存失败: `)}${e.message}`),!1}}async function X(e){try{let n=await(await fetch(`/api/config/save-after-quick-push-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({afterQuickPushAction:{enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()}})})).json();return n.success?(_.value={enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()},!0):(t.error(`保存提交后启动项失败: ${n.error}`),!1)}catch(e){return t.error(`保存提交后启动项失败: ${e.message}`),!1}}async function Z(e,n){try{let r=await(await fetch(`/api/config/save-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?a.value.includes(e)||a.value.push(e):n===`scope`?o.value.includes(e)||o.value.push(e):n===`message`?l.value.includes(e)||l.value.push(e):n===`command`&&(u.value.includes(e)||u.value.push(e)),t.success(c(`@D50BB:模板已保存`)),!0):(t.error(`${c(`@D50BB:保存模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function ee(e,n){try{let r=await(await fetch(`/api/config/delete-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?a.value=a.value.filter(t=>t!==e):n===`scope`?o.value=o.value.filter(t=>t!==e):n===`message`?l.value=l.value.filter(t=>t!==e):n===`command`&&(u.value=u.value.filter(t=>t!==e)),t.success(c(`@D50BB:模板已删除`)),!0):(t.error(`${c(`@D50BB:删除模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function te(e,n,r){try{let i=await(await fetch(`/api/config/update-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldTemplate:e,newTemplate:n,type:r})})).json();if(i.success){if(r===`description`){let t=a.value.indexOf(e);t!==-1&&(a.value[t]=n)}else if(r===`scope`){let t=o.value.indexOf(e);t!==-1&&(o.value[t]=n)}else if(r===`message`){let t=l.value.indexOf(e);t!==-1&&(l.value[t]=n)}else if(r===`command`){let t=u.value.indexOf(e);t!==-1&&(u.value[t]=n)}return t.success(c(`@D50BB:模板已更新`)),!0}else return t.error(`${c(`@D50BB:更新模板失败: `)}${i.error}`),!1}catch(e){return t.error(`${c(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function ne(e,n){try{let r=await(await fetch(`/api/config/pin-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?(a.value=a.value.filter(t=>t!==e),a.value.unshift(e)):n===`scope`?(o.value=o.value.filter(t=>t!==e),o.value.unshift(e)):n===`message`?(l.value=l.value.filter(t=>t!==e),l.value.unshift(e)):n===`command`&&(u.value=u.value.filter(t=>t!==e),u.value.unshift(e)),t.success(c(`@D50BB:模板已置顶`)),!0):(t.error(`${c(`@D50BB:置顶模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function Q(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(d.value=e.lockedFiles||[],e.lockedFiles):(t.error(`${c(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),t.error(`${c(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function re(e){try{let n=await(await fetch(`/api/lock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return n.success?(await Q(),t.success(`${c(`@D50BB:文件已锁定: `)}${e}`),!0):(t.error(`${c(`@D50BB:锁定文件失败: `)}${n.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),t.error(`${c(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function ie(e){try{let n=await(await fetch(`/api/unlock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return n.success?(await Q(),t.success(`${c(`@D50BB:文件已解锁: `)}${e}`),!0):(t.error(`${c(`@D50BB:解锁文件失败: `)}${n.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),t.error(`${c(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function ae(e){try{let t=await(await fetch(`/api/check-file-lock`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?t.isLocked:(console.error(`检查文件锁定状态失败:`,t.error),!1)}catch(e){return console.error(`检查文件锁定状态失败:`,e),!1}}async function oe(e){try{let n=await(await fetch(`/api/config/save-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e})})).json();return n.success?(await H(!0),t.success(c(`@CMD01:命令已保存`)),!0):(t.error(`${c(`@CMD01:保存命令失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function se(e){try{let n=await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),t.success(c(`@CMD01:命令已删除`)),!0):(t.error(`${c(`@CMD01:删除命令失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function ce(e,n){try{let r=await(await fetch(`/api/config/update-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,command:n})})).json();return r.success?(await H(!0),t.success(c(`@CMD01:命令已更新`)),!0):(t.error(`${c(`@CMD01:更新命令失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function le(e){try{let n=await(await fetch(`/api/config/pin-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),!0):(t.error(n.error),!1)}catch(e){return t.error(e.message),!1}}async function ue(e){try{let n=await(await fetch(`/api/config/save-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orchestration:e})})).json();return n.success?(await H(!0),t.success(c(`@ORCH:编排已保存`)),n.orchestration||null):(t.error(`${c(`@ORCH:保存编排失败: `)}${n.error}`),null)}catch(e){return t.error(`${c(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function de(e){try{let n=await(await fetch(`/api/config/delete-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),t.success(c(`@ORCH:编排已删除`)),!0):(t.error(`${c(`@ORCH:删除编排失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function fe(e,n){try{let r=await(await fetch(`/api/config/update-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,orchestration:n})})).json();return r.success?(await H(!0),t.success(c(`@ORCH:编排已更新`)),!0):(t.error(`${c(`@ORCH:更新编排失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function pe(e,n){try{let r=await(await fetch(`/api/config/save-startup-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({startupItems:e,startupAutoRun:n===void 0?g.value:n})})).json();return r.success?(h.value=e,n!==void 0&&(g.value=n),!0):(t.error(`保存启动项失败: ${r.error}`),!1)}catch(e){return t.error(`保存启动项失败: ${e.message}`),!1}}async function me(e){try{let n=await(await fetch(`/api/config/save-models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:e})})).json();return n.success?(j.value=e,!0):(t.error(`${c(`@D50BB:保存模型失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function $(e){try{let n=await(await fetch(`/api/config/save-general-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();if(n.success){if(e.theme&&(k.value=e.theme,L(e.theme)),e.locale){A.value=e.locale,s(e.locale);let t=f();t.currentLocale=e.locale}return!0}else return t.error(`保存通用设置失败: ${n.error}`),!1}catch(e){return t.error(`保存通用设置失败: ${e.message}`),!1}}return{models:j,defaultCommitMessage:r,descriptionTemplates:a,scopeTemplates:o,messageTemplates:l,commandTemplates:u,lockedFiles:d,customCommands:p,orchestrations:m,startupItems:h,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:y,configLoadError:b,configFilePath:x,hasConfigLoadError:B,currentDirectory:S,config:z,autoClosePushModal:C,autoSetDefaultMessage:w,isStandardCommit:T,skipHooks:E,autoQuickPushOnEnter:D,pullBeforePush:O,theme:k,locale:A,ui:N,isUiLoaded:P,loadConfig:H,setCurrentDirectory:F,openSystemConfigFile:V,saveTemplate:Z,saveModels:me,saveGeneralSettings:$,saveUiSettings:q,resetUiLayout:J,applyTheme:L,toggleTheme:R,saveDefaultMessage:Y,deleteTemplate:ee,updateTemplate:te,pinTemplate:ne,loadLockedFiles:Q,lockFile:re,unlockFile:ie,isFileLocked:ae,saveCustomCommand:oe,deleteCustomCommand:se,updateCustomCommand:ce,pinCustomCommand:le,saveOrchestration:ue,deleteOrchestration:de,updateOrchestration:fe,saveStartupItems:pe,saveAfterQuickPushAction:X,saveCommitSettings:U}});export{f as n,p as t};
|
|
1
|
+
import"./rolldown-runtime-DAXXjFlN.js";import{Jn as e,a as t,mn as n,n as r,sr as i,t as a}from"./element-plus-BuYhyYxZ.js";import{d as o}from"./vendor-Cp3OS8BA.js";import{a as s,n as c,r as l}from"./_plugin-vue_export-helper-DiP9hhza.js";var u={"zh-CN":r,"en-US":a};function d(e){return u[e]||r}var f=o(`locale`,()=>{let e=i(l()),t=n(()=>d(e.value));async function r(t){s(t),e.value=t;let n=p();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:t,changeLocale:r}}),p=o(`config`,()=>{let r=i(``),a=i([]),o=i([]),l=i([]),u=i([]),d=i([]),p=i([]),m=i([]),h=i([]),g=i(!1),_=i({enabled:!1,type:`command`,refId:``}),v=i(!1),y=i(!1),b=i(``),x=i(``),S=i(``),C=i(!0),w=i(!1),T=i(!0),E=i(!1),D=i(!1),O=i(!0),k=i(`light`),A=i(`zh-CN`),j=i([]),M={layout:{leftRatio:.25,midRatio:.375,rightRatio:.375,topRatio:.5},layoutsByProject:{},fileListViewMode:`list`,fileDiffSplitPercent:35,commandConsole:{expanded:!0,useTerminal:!0,showTerminalSessions:!0,splitPercent:25},editorAutoSave:!1,mindmapDir:``},N=i(JSON.parse(JSON.stringify(M))),P=i(!1);function F(e){S.value=e||``}function I(){let e=S.value;if(e&&N.value.layoutsByProject?.[e]){N.value.layout={...N.value.layoutsByProject[e]};return}}function L(e){let t=document.documentElement;e===`dark`?t.setAttribute(`data-theme`,`dark`):e===`light`?t.removeAttribute(`data-theme`):window.matchMedia(`(prefers-color-scheme: dark)`).matches?t.setAttribute(`data-theme`,`dark`):t.removeAttribute(`data-theme`)}function R(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return k.value=e,L(e),$({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}L(k.value);let z=n(()=>({defaultCommitMessage:r.value,descriptionTemplates:a.value,scopeTemplates:o.value,messageTemplates:l.value,commandTemplates:u.value,lockedFiles:d.value,customCommands:p.value,orchestrations:m.value,startupItems:h.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:S.value})),B=n(()=>!!(b.value&&b.value.trim()));async function V(){try{let e=await fetch(`/api/config/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`}}),n=await e.json().catch(()=>({}));return e.ok&&n?.success?(t.success(c(`@D50BB:已打开系统配置文件`)),!0):(t.error(`${c(`@D50BB:打开系统配置文件失败: `)}${n?.error||``}`),!1)}catch(e){return t.error(`${c(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function H(e=!1){if(!e&&y.value&&!v.value)return console.log(c(`@D50BB:使用缓存的配置信息`)),z.value;v.value=!0;try{v.value=!0,console.log(c(`@D50BB:加载配置信息...`));let e=await fetch(`/api/config/getConfig`),n=await e.json().catch(()=>({}));if(!e.ok||n&&n.success===!1){let e=String(n?.error||c(`@D50BB:加载配置失败`)),r=String(n?.configPath||``),i=r?`\n${c(`@D50BB:配置文件`)}: ${r}`:``;return t.error(`${c(`@D50BB:加载配置失败: `)}${e}${i}`),b.value=e,x.value=r,null}if(b.value=``,x.value=``,r.value=n.defaultCommitMessage||``,a.value=n.descriptionTemplates||[],o.value=n.scopeTemplates||[],l.value=n.messageTemplates||[],u.value=n.commandTemplates||[],d.value=n.lockedFiles||[],p.value=n.customCommands||[],m.value=n.orchestrations||[],h.value=(n.startupItems||[]).map(e=>({id:String(e?.id??``),type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId??e?.commandId??``),createdAt:Number(e?.createdAt??Date.now()),enabled:typeof e?.enabled!=`boolean`||e.enabled})).filter(e=>e.id&&e.refId),g.value=n.startupAutoRun||!1,_.value={enabled:!!n?.afterQuickPushAction?.enabled,type:n?.afterQuickPushAction?.type===`workflow`?`workflow`:`command`,refId:String(n?.afterQuickPushAction?.refId||``).trim()},n.isStandardCommit!==void 0&&(T.value=!!n.isStandardCommit),n.skipHooks!==void 0&&(E.value=!!n.skipHooks),n.autoQuickPushOnEnter!==void 0&&(D.value=!!n.autoQuickPushOnEnter),n.autoSetDefaultMessage!==void 0&&(w.value=!!n.autoSetDefaultMessage),n.autoClosePushModal!==void 0&&(C.value=!!n.autoClosePushModal),n.pullBeforePush!==void 0&&(O.value=!!n.pullBeforePush),Array.isArray(n.models)&&(j.value=n.models),n.theme&&[`light`,`dark`,`auto`].includes(n.theme)&&(k.value=n.theme,L(n.theme)),n.locale&&[`zh-CN`,`en-US`].includes(n.locale)){A.value=n.locale,s(n.locale);let e=f();e.currentLocale=n.locale}if(n.currentDirectory&&(S.value=n.currentDirectory),n.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,M.layout.leftRatio),midRatio:e(r,M.layout.midRatio),rightRatio:e(i,M.layout.rightRatio),topRatio:e(a,M.layout.topRatio)}}let o=e(`zen-gitsync-file-list-view-mode`);(o===`list`||o===`tree`)&&(t.fileListViewMode=o);let s=e(`zen-gitsync-filediff-ratio`)??e(`fileDiff.splitPercent`);if(s!=null){let e=parseFloat(s);Number.isFinite(e)&&(t.fileDiffSplitPercent=Math.min(85,Math.max(15,e)))}let c=e(`useTerminal`),l=e(`isConsoleExpanded`),u=e(`showTerminalSessions`),d=e(`zen-gitsync-commandconsole-ratio`);if(c!==null||l!==null||u!==null||d!=null){let e=d==null?NaN:parseFloat(d);t.commandConsole={useTerminal:c!==`false`,expanded:l!==`false`,showTerminalSessions:u==null||u===`true`,splitPercent:Number.isFinite(e)?Math.min(85,Math.max(15,e)):M.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(N.value={...N.value,...t}),Object.keys(t).length>0&&q(t,{immediate:!0}).catch(e=>{console.error(`迁移 UI 设置到文件失败:`,e)});try{[`zen-gitsync-theme`,`zen-gitsync-locale`,`zen-gitsync-editor-auto-save`,`zen-gitsync-file-list-view-mode`,`zen-gitsync-filediff-ratio`,`fileDiff.splitPercent`,`isConsoleExpanded`,`useTerminal`,`showTerminalSessions`,`zen-gitsync-commandconsole-ratio`,`zen-gitsync-layout-left-ratio`,`zen-gitsync-layout-mid-ratio`,`zen-gitsync-layout-right-ratio`,`zen-gitsync-layout-top-ratio`,`locale`].forEach(e=>localStorage.removeItem(e))}catch{}}else{let e=n.ui.layoutsByProject&&typeof n.ui.layoutsByProject==`object`&&!Array.isArray(n.ui.layoutsByProject)?n.ui.layoutsByProject:{},t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r;t[n]={leftRatio:Number.isFinite(Number(e.leftRatio))?Number(e.leftRatio):M.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):M.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):M.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):M.layout.topRatio}}let r={...M.layout,...n.ui.layout||{}};N.value={layout:r,layoutsByProject:t,fileListViewMode:n.ui.fileListViewMode===`tree`?`tree`:`list`,fileDiffSplitPercent:Number.isFinite(Number(n.ui.fileDiffSplitPercent))?Math.min(85,Math.max(15,Number(n.ui.fileDiffSplitPercent))):M.fileDiffSplitPercent,commandConsole:{expanded:typeof n.ui.commandConsole?.expanded==`boolean`?n.ui.commandConsole.expanded:M.commandConsole.expanded,useTerminal:typeof n.ui.commandConsole?.useTerminal==`boolean`?n.ui.commandConsole.useTerminal:M.commandConsole.useTerminal,showTerminalSessions:typeof n.ui.commandConsole?.showTerminalSessions==`boolean`?n.ui.commandConsole.showTerminalSessions:M.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(n.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(n.ui.commandConsole.splitPercent))):M.commandConsole.splitPercent},editorAutoSave:typeof n.ui.editorAutoSave==`boolean`?n.ui.editorAutoSave:M.editorAutoSave,mindmapDir:typeof n.ui.mindmapDir==`string`?n.ui.mindmapDir:M.mindmapDir}}return I(),P.value=!0,y.value=!0,console.log(c(`@D50BB:配置信息加载完成`)),z.value}catch(e){return console.error(`加载配置失败:`,e),t.error(`${c(`@D50BB:加载配置失败: `)}${e.message}`),b.value=e.message,null}finally{v.value=!1}}async function U(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:T.value,skipHooks:E.value,autoQuickPushOnEnter:D.value,autoSetDefaultMessage:w.value,autoClosePushModal:C.value,pullBeforePush:O.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}e([T,E,D,w,C,O],()=>{y.value&&U()});let W=null,G={};async function K(){if(W&&=(clearTimeout(W),null),Object.keys(G).length===0)return;let e=G;G={};try{await fetch(`/api/config/save-ui-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}catch(e){console.error(`保存 UI 设置失败:`,e)}}async function q(e,t={}){if(P.value){if(t.immediate){Object.assign(G,e),await K();return}Object.assign(G,e),W&&clearTimeout(W),W=setTimeout(()=>{K()},300)}}async function J(){N.value.layout={...M.layout};let e=S.value;return e&&(N.value.layoutsByProject={...N.value.layoutsByProject,[e]:{...N.value.layout}}),await q({layoutsByProject:N.value.layoutsByProject},{immediate:!0}),N.value.layout}e(()=>N.value.fileListViewMode,e=>{P.value&&q({fileListViewMode:e})}),e(()=>N.value.fileDiffSplitPercent,e=>{P.value&&q({fileDiffSplitPercent:e})}),e(()=>N.value.editorAutoSave,e=>{P.value&&q({editorAutoSave:e})}),e(()=>N.value.layout,e=>{if(!P.value)return;let t=S.value;t&&(N.value.layoutsByProject={...N.value.layoutsByProject,[t]:e},q({layoutsByProject:N.value.layoutsByProject}))},{deep:!0}),e(()=>N.value.commandConsole,e=>{P.value&&q({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{K()});async function Y(e){try{let n=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:e})})).json();return n.success?(r.value=e,t.success(c(`@D50BB:默认提交信息已保存`)),!0):(t.error(`${c(`@D50BB:保存失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存失败: `)}${e.message}`),!1}}async function X(e){try{let n=await(await fetch(`/api/config/save-after-quick-push-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({afterQuickPushAction:{enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()}})})).json();return n.success?(_.value={enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()},!0):(t.error(`保存提交后启动项失败: ${n.error}`),!1)}catch(e){return t.error(`保存提交后启动项失败: ${e.message}`),!1}}async function Z(e,n){try{let r=await(await fetch(`/api/config/save-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?a.value.includes(e)||a.value.push(e):n===`scope`?o.value.includes(e)||o.value.push(e):n===`message`?l.value.includes(e)||l.value.push(e):n===`command`&&(u.value.includes(e)||u.value.push(e)),t.success(c(`@D50BB:模板已保存`)),!0):(t.error(`${c(`@D50BB:保存模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function ee(e,n){try{let r=await(await fetch(`/api/config/delete-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?a.value=a.value.filter(t=>t!==e):n===`scope`?o.value=o.value.filter(t=>t!==e):n===`message`?l.value=l.value.filter(t=>t!==e):n===`command`&&(u.value=u.value.filter(t=>t!==e)),t.success(c(`@D50BB:模板已删除`)),!0):(t.error(`${c(`@D50BB:删除模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function te(e,n,r){try{let i=await(await fetch(`/api/config/update-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldTemplate:e,newTemplate:n,type:r})})).json();if(i.success){if(r===`description`){let t=a.value.indexOf(e);t!==-1&&(a.value[t]=n)}else if(r===`scope`){let t=o.value.indexOf(e);t!==-1&&(o.value[t]=n)}else if(r===`message`){let t=l.value.indexOf(e);t!==-1&&(l.value[t]=n)}else if(r===`command`){let t=u.value.indexOf(e);t!==-1&&(u.value[t]=n)}return t.success(c(`@D50BB:模板已更新`)),!0}else return t.error(`${c(`@D50BB:更新模板失败: `)}${i.error}`),!1}catch(e){return t.error(`${c(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function ne(e,n){try{let r=await(await fetch(`/api/config/pin-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?(a.value=a.value.filter(t=>t!==e),a.value.unshift(e)):n===`scope`?(o.value=o.value.filter(t=>t!==e),o.value.unshift(e)):n===`message`?(l.value=l.value.filter(t=>t!==e),l.value.unshift(e)):n===`command`&&(u.value=u.value.filter(t=>t!==e),u.value.unshift(e)),t.success(c(`@D50BB:模板已置顶`)),!0):(t.error(`${c(`@D50BB:置顶模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function Q(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(d.value=e.lockedFiles||[],e.lockedFiles):(t.error(`${c(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),t.error(`${c(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function re(e){try{let n=await(await fetch(`/api/lock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return n.success?(await Q(),t.success(`${c(`@D50BB:文件已锁定: `)}${e}`),!0):(t.error(`${c(`@D50BB:锁定文件失败: `)}${n.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),t.error(`${c(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function ie(e){try{let n=await(await fetch(`/api/unlock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return n.success?(await Q(),t.success(`${c(`@D50BB:文件已解锁: `)}${e}`),!0):(t.error(`${c(`@D50BB:解锁文件失败: `)}${n.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),t.error(`${c(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function ae(e){try{let t=await(await fetch(`/api/check-file-lock`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?t.isLocked:(console.error(`检查文件锁定状态失败:`,t.error),!1)}catch(e){return console.error(`检查文件锁定状态失败:`,e),!1}}async function oe(e){try{let n=await(await fetch(`/api/config/save-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e})})).json();return n.success?(await H(!0),t.success(c(`@CMD01:命令已保存`)),!0):(t.error(`${c(`@CMD01:保存命令失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function se(e){try{let n=await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),t.success(c(`@CMD01:命令已删除`)),!0):(t.error(`${c(`@CMD01:删除命令失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function ce(e,n){try{let r=await(await fetch(`/api/config/update-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,command:n})})).json();return r.success?(await H(!0),t.success(c(`@CMD01:命令已更新`)),!0):(t.error(`${c(`@CMD01:更新命令失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function le(e){try{let n=await(await fetch(`/api/config/pin-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),!0):(t.error(n.error),!1)}catch(e){return t.error(e.message),!1}}async function ue(e){try{let n=await(await fetch(`/api/config/save-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orchestration:e})})).json();return n.success?(await H(!0),t.success(c(`@ORCH:编排已保存`)),n.orchestration||null):(t.error(`${c(`@ORCH:保存编排失败: `)}${n.error}`),null)}catch(e){return t.error(`${c(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function de(e){try{let n=await(await fetch(`/api/config/delete-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),t.success(c(`@ORCH:编排已删除`)),!0):(t.error(`${c(`@ORCH:删除编排失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function fe(e,n){try{let r=await(await fetch(`/api/config/update-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,orchestration:n})})).json();return r.success?(await H(!0),t.success(c(`@ORCH:编排已更新`)),!0):(t.error(`${c(`@ORCH:更新编排失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function pe(e,n){try{let r=await(await fetch(`/api/config/save-startup-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({startupItems:e,startupAutoRun:n===void 0?g.value:n})})).json();return r.success?(h.value=e,n!==void 0&&(g.value=n),!0):(t.error(`保存启动项失败: ${r.error}`),!1)}catch(e){return t.error(`保存启动项失败: ${e.message}`),!1}}async function me(e){try{let n=await(await fetch(`/api/config/save-models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:e})})).json();return n.success?(j.value=e,!0):(t.error(`${c(`@D50BB:保存模型失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function $(e){try{let n=await(await fetch(`/api/config/save-general-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();if(n.success){if(e.theme&&(k.value=e.theme,L(e.theme)),e.locale){A.value=e.locale,s(e.locale);let t=f();t.currentLocale=e.locale}return!0}else return t.error(`保存通用设置失败: ${n.error}`),!1}catch(e){return t.error(`保存通用设置失败: ${e.message}`),!1}}return{models:j,defaultCommitMessage:r,descriptionTemplates:a,scopeTemplates:o,messageTemplates:l,commandTemplates:u,lockedFiles:d,customCommands:p,orchestrations:m,startupItems:h,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:y,configLoadError:b,configFilePath:x,hasConfigLoadError:B,currentDirectory:S,config:z,autoClosePushModal:C,autoSetDefaultMessage:w,isStandardCommit:T,skipHooks:E,autoQuickPushOnEnter:D,pullBeforePush:O,theme:k,locale:A,ui:N,isUiLoaded:P,loadConfig:H,setCurrentDirectory:F,openSystemConfigFile:V,saveTemplate:Z,saveModels:me,saveGeneralSettings:$,saveUiSettings:q,resetUiLayout:J,applyTheme:L,toggleTheme:R,saveDefaultMessage:Y,deleteTemplate:ee,updateTemplate:te,pinTemplate:ne,loadLockedFiles:Q,lockFile:re,unlockFile:ie,isFileLocked:ae,saveCustomCommand:oe,deleteCustomCommand:se,updateCustomCommand:ce,pinCustomCommand:le,saveOrchestration:ue,deleteOrchestration:de,updateOrchestration:fe,saveStartupItems:pe,saveAfterQuickPushAction:X,saveCommitSettings:U}});export{f as n,p as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./rolldown-runtime-DAXXjFlN.js";import{Ln as e,Rn as t,a as n,mn as r,sr as i}from"./element-plus-BuYhyYxZ.js";import{d as a}from"./vendor-Cp3OS8BA.js";import{n as o}from"./_plugin-vue_export-helper-
|
|
1
|
+
import"./rolldown-runtime-DAXXjFlN.js";import{Ln as e,Rn as t,a as n,mn as r,sr as i}from"./element-plus-BuYhyYxZ.js";import{d as a}from"./vendor-Cp3OS8BA.js";import{n as o}from"./_plugin-vue_export-helper-DiP9hhza.js";import{t as ee}from"./socket-io-BC2cap_-.js";import{t as te}from"./configStore-rGvG6jYS.js";var s=new Set([`5173`,`4173`,`5544`]),c=3e3;function l(){if(typeof window>`u`)return c;let e=window.location.port||`80`;if(s.has(e)){{let e=5545;if(!Number.isNaN(e))return e}return c}let t=parseInt(e,10);return Number.isNaN(t)?c:t}var u=800,ne=l(),d=a(`git`,()=>{let a=te(),s=i(``),c=i([]),l=i(``),d=i(``),f=i(!1),p=i(!1),m=i(!1),h=i(0),g=i(``),_=i(!1),v=i(!1),y=i(!1),b=i(!1),x=i(!1),re=i(!1),S=i(0),C=i(0),w=i(!1),T=i(``),ie=i(0),E=i(``),D=i(null),O=i(``),ae=i(``),k=i([]),oe=i({staged:[],unstaged:[],untracked:[]}),A=i([]),j=i(!1),M=i(!1),N=i(!1),P=i(!1),F=i(!1),I=i(1),L=i(!0),R=i(0),z=i([]),B=i(!1),se=i(!1),V=i(!1),H=i(!1);function ce(){s.value=``,c.value=[],l.value=``,d.value=``,f.value=!1,p.value=!1,m.value=!1,h.value=0,S.value=0,C.value=0,w.value=!1,T.value=``,ie.value=0,v.value=!1,y.value=!1,b.value=!1,x.value=!1,g.value=``,_.value=!1,k.value=[],oe.value={staged:[],unstaged:[],untracked:[]},A.value=[],j.value=!1,M.value=!1,N.value=!1,P.value=!1,F.value=!1,I.value=1,L.value=!0,R.value=0}async function U(e=!1,t=!1){if(m.value)try{console.log(o(`@C298B:获取分支状态...`));let n=`/api/branch-status`,r=[];e&&r.push(`force=true`),t&&r.push(`countOnly=true`),r.length>0&&(n+=`?`+r.join(`&`));let i=await(await fetch(n)).json();i&&(S.value=i.ahead||0,C.value=i.behind||0,w.value=i.hasUpstream||!1,T.value=i.upstreamBranch||``,console.log(`${o(`@C298B:分支状态更新:领先 `)}${S.value}${o(`@C298B: 个提交,落后 `)}${C.value}${o(`@C298B: 个提交,上游分支:`)}${w.value?T.value:o(`@C298B:无`)}`))}catch(e){console.error(`获取分支状态失败:`,e),S.value=0,C.value=0,w.value=!1,T.value=``}}async function le(){let e=Date.now();if(e-h.value<1e3)return console.log(`使用缓存的Git仓库状态:`,m.value?`是`:o(`@C298B:不是`)),m.value;try{let t=await(await fetch(`/api/current_directory`)).json();return m.value=t.isGitRepo===!0,h.value=e,console.log(`${o(`@C298B:当前目录`)}${m.value?o(`@C298B:是`):o(`@C298B:不是`)}${o(`@C298B:Git仓库`)}`),m.value}catch(t){return console.error(`检查Git仓库状态失败:`,t),m.value=!1,h.value=e,!1}}async function W(e=!1){try{let t=await(await fetch(e?`/api/branch?force=true`:`/api/branch`)).json();t.branch&&(s.value=t.branch,console.log(`${o(`@C298B:当前分支更新为: `)}${t.branch}${e?o(`@C298B: (强制刷新)`):``}`))}catch(e){console.error(`获取分支信息失败:`,e)}}async function ue(){if(m.value)try{console.log(o(`@C298B:获取所有分支...`));let e=await(await fetch(`/api/branches`)).json();e.branches&&Array.isArray(e.branches)&&(c.value=e.branches,ie.value=Date.now(),console.log(`${o(`@C298B:获取到`)}${e.branches.length}${o(`@C298B:个分支`)}`))}catch(e){console.error(`获取所有分支信息失败:`,e)}}async function de(e){console.log(`切换到分支:`,e);try{f.value=!0;let t=await(await fetch(`/api/checkout`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({branch:e})})).json();return t.success?(n({message:`${o(`@C298B:已切换到分支: `)}${e}`,type:`success`}),await W(!0),await U(!0),!0):(n({message:`${o(`@C298B:切换分支失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:切换分支失败: `)}${e.message}`,type:`error`}),!1}finally{f.value=!1}}async function fe(){try{let e=await(await fetch(`/api/user-info`)).json();e.name&&e.email&&(l.value=e.name,d.value=e.email)}catch(e){console.error(`获取用户信息失败:`,e)}}async function pe(e,t){if(!e.trim())return n({message:o(`@C298B:分支名称不能为空`),type:`warning`}),!1;try{p.value=!0;let r=await(await fetch(`/api/create-branch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newBranchName:e,baseBranch:t||s.value})})).json();return r.success?(n({message:`${o(`@C298B:已创建并切换到分支: `)}${e}`,type:`success`}),await W(!0),await U(!0),await ue(),!0):(n({message:`${o(`@C298B:创建分支失败: `)}${r.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:创建分支失败: `)}${e.message}`,type:`error`}),!1}finally{p.value=!1}}async function me(){try{let e=await(await fetch(`/api/clear-user-config`,{method:`POST`})).json();return e.success?(l.value=``,d.value=``,n({message:o(`@C298B:已清除Git用户配置`),type:`success`}),!0):(n({message:`${o(`@C298B:清除配置失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:清除配置失败: `)}${e.message}`,type:`error`}),!1}}async function he(e,t){try{let r=await(await fetch(`/api/restore-user-config`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e,email:t})})).json();return r.success?(l.value=e,d.value=t,n({message:o(`@C298B:已恢复Git用户配置`),type:`success`}),!0):(n({message:`${o(`@C298B:恢复配置失败: `)}${r.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:恢复配置失败: `)}${e.message}`,type:`error`}),!1}}async function ge(){if(!m.value)return n({message:o(`@C298B:当前目录不是Git仓库`),type:`warning`}),{success:!1,needsMerge:!1,error:o(`@C298B:当前目录不是Git仓库`),fullError:``,pullOutput:``};try{y.value=!0;let e=await(await fetch(`/api/pull`,{method:`POST`})).json();if(e.success){n({message:o(`@C298B:拉取成功`),type:`success`}),await U(!0);let t=(e.message||``).toString(),r=!/already up to date|已经是最新的|already up-to-date/i.test(t);return r&&await xe(),{success:!0,hadChanges:r}}else return{success:!1,needsMerge:e.needsMerge||!1,error:e.error||``,fullError:e.fullError||e.error||``,pullOutput:e.pullOutput||``}}catch(e){return{success:!1,needsMerge:!1,error:e.message,fullError:e.message,pullOutput:``}}finally{y.value=!1}}async function _e(){if(!m.value)return!1;if(!w.value)return console.log(`[bootFetch] no upstream, skip`),!1;try{b.value=!0;let e=C.value;console.log(`[bootFetch] start silent fetch --all, beforeBehind=${e}`);let t=await(await fetch(`/api/fetch-all`,{method:`POST`})).json();if(!t.success)return console.warn(`[bootFetch] fetch --all failed:`,t.error),!1;await U(!0);let n=C.value,r=n<e;return console.log(`[bootFetch] afterBehind=${n}, hasNewRemoteCommits=${r}`),r?(await G(!0),!0):!1}catch(e){return console.warn(`[bootFetch] silent fetch error (ignored):`,e.message),!1}finally{b.value=!1}}async function ve(){if(!m.value)return n({message:o(`@C298B:当前目录不是Git仓库`),type:`warning`}),!1;try{b.value=!0;let e=await(await fetch(`/api/fetch-all`,{method:`POST`})).json();return e.success?(n({message:o(`@C298B:获取所有远程分支信息成功`),type:`success`}),await U(),!0):(n({message:`${o(`@C298B:获取远程分支信息失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:获取远程分支信息失败: `)}${e.message}`,type:`error`}),!1}finally{b.value=!1}}async function ye(){D.value&&(Je(),D.value.disconnect());try{let e=`http://localhost:${ne}`;if(console.log(`尝试连接Socket.IO服务器:`,e),D.value=ee(e,{reconnectionDelayMax:1e4,reconnection:!0,reconnectionAttempts:10,reconnectionDelay:1e3,timeout:2e4,autoConnect:!0,forceNew:!0,transports:[`websocket`,`polling`]}),!D.value){console.error(`Socket.IO初始化失败: socket为null`);return}console.log(o(`@C298B:Socket.IO客户端已创建,开始注册事件监听器...`)),D.value.on(`connect`,()=>{console.log(`✅ Socket.IO连接成功,事件监听器已生效,Socket ID:`,D.value?.id)}),D.value.on(`project_info`,e=>{O.value=e.projectPath,ae.value=e.projectRoomId,console.log(`${o(`@C298B:当前项目: `)}${e.projectPath}`),console.log(`${o(`@C298B:房间ID: `)}${e.projectRoomId}`)}),D.value.on(`project_changed`,e=>{console.log(`${o(`@C298B:项目已切换: `)}${e.oldProjectPath} -> ${e.newProjectPath}`),O.value=e.newProjectPath,ae.value=e.newProjectRoomId,D.value&&D.value.emit(`join_room`,e.newProjectRoomId),console.log(`${o(`@C298B:已加入新项目房间: `)}${e.newProjectRoomId}`)}),D.value.on(`disconnect`,e=>{console.log(`与Socket.IO服务器断开连接:`,e)}),D.value.on(`git_status_update`,e=>{if(console.log(`✅ 成功监听到 git_status_update 事件:`,new Date().toLocaleTimeString()),console.log(`git_status_update data ==>`,e),console.log(`currentProjectPath.value ==>`,O.value),console.log(`data.projectPath ==>`,e.projectPath),e.projectPath&&O.value&&e.projectPath!==O.value){console.log(`${o(`@C298B:忽略不同项目的状态更新: `)}${e.projectPath}`);return}console.log(o(`@C298B:正在更新 Git 文件状态...`)),e.porcelain!==void 0&&be(e.porcelain)}),D.value.on(`connect_error`,e=>{console.error(`Socket连接错误:`,e.message)}),D.value.on(`connect_timeout`,()=>{console.error(o(`@C298B:Socket连接超时`))}),D.value.on(`reconnect`,e=>{console.log(`${o(`@C298B:Socket重连成功,尝试次数: `)}${e}`)}),D.value.on(`reconnect_attempt`,e=>{console.log(`${o(`@C298B:Socket尝试重连,第 `)}${e}${o(`@C298B: 次尝试`)}`)}),D.value.on(`reconnect_error`,e=>{console.error(`Socket重连错误:`,e.message)}),D.value.on(`reconnect_failed`,()=>{console.error(o(`@C298B:Socket重连失败,已达到最大重试次数`))}),console.log(o(`@C298B:Socket.IO事件监听器注册完成:connect, project_info, project_changed, git_status_update, monitoring_status`)),D.value&&!D.value.connected&&(console.log(o(`@C298B:Socket未连接,尝试手动连接...`)),D.value.connect())}catch(e){console.error(`Socket.IO连接初始化失败:`,e)}}function be(e){if(e===void 0||e===``){A.value=[];return}let t=e.split(`
|
|
2
2
|
`),n=[];for(let e of t){let t=e.match(/^([ MADRCU\?]{2})\s+(.+)$/);if(t){let e=``,r=t[1],i=r.charAt(0),a=r.charAt(1);e=r===`UU`||r===`AA`||r===`DD`||r===`AU`||r===`UA`||r===`DU`||r===`UD`?`conflicted`:i===`A`||i===`M`||i===`D`||i===`R`?`added`:i===` `&&a===`M`?`modified`:i===` `&&a===`D`?`deleted`:i===` `&&a===`A`?`added`:r===`??`?`untracked`:`other`,n.push({path:t[2],type:e})}}A.value=n}async function G(e=!0){if(!m.value){console.log(o(`@C298B:当前目录不是Git仓库,跳过加载提交历史`));return}try{j.value=!0,console.log(o(`@C298B:开始加载提交历史...`));let e=new Date().getTime(),t=await(await fetch(`/api/log?page=1&_t=${e}`)).json();t&&t.data&&Array.isArray(t.data)?(k.value=[...t.data],console.log(`${o(`@C298B:提交历史加载完成,共 `)}${k.value.length}${o(`@C298B: 条记录`)}`)):(console.warn(`API返回的提交历史格式不正确:`,t),k.value=[])}catch(t){console.error(`获取提交历史失败:`,t),e&&n({message:`${o(`@C298B:获取提交历史失败: `)}${t.message}`,type:`error`})}finally{j.value=!1}}async function xe(){console.log(o(`@C298B:刷新提交历史...`)),I.value=1,L.value=!1,await G(!0),R.value=k.value.length,console.log(o(`@C298B:提交历史刷新完成`))}async function K(){if(!m.value){console.log(o(`@C298B:当前目录不是Git仓库,跳过加载Git状态`));return}try{M.value=!0,await q()}catch(e){console.error(`获取Git状态失败:`,e),n({message:`${o(`@C298B:获取Git状态失败: `)}${e.message}`,type:`error`})}finally{M.value=!1}}async function q(){if(console.log(o(`@C298B:开始获取Git状态(porcelain格式)...`)),!m.value){console.log(o(`@C298B:当前目录不是Git仓库,跳过加载Git状态`));return}try{let e=await(await fetch(`/api/status_porcelain`)).json();e.status===void 0?A.value=[]:be(e.status),re.value=!!e.isMergeInProgress,e.isMergeInProgress&&e.mergeMessage&&!E.value&&(E.value=String(e.mergeMessage))}catch(e){console.error(`获取Git状态(porcelain)失败:`,e),n({message:`${o(`@C298B:获取Git状态(porcelain)失败: `)}${e.message}`,type:`error`}),A.value=[]}}async function Se(){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{N.value=!0;let e=A.value.filter(e=>{let t=e.path.replace(/\\/g,`/`);return!a.lockedFiles.some(e=>{let n=e.replace(/\\/g,`/`);return t===n})});if(e.length===0)return n({message:o(`@C298B:没有需要暂存的文件(所有文件都被锁定)`),type:`warning`}),!1;if(e.length===A.value.length){let e=await(await fetch(`/api/add`,{method:`POST`})).json();return e.success?(n({message:o(`@C298B:文件已添加到暂存区`),type:`success`}),await q(),!0):(n({message:`${o(`@C298B:添加文件失败: `)}${e.error}`,type:`error`}),!1)}else{let t=await(await fetch(`/api/add-filtered`,{method:`POST`})).json();if(t.success){let t=A.value.length-e.length,r=`${o(`@C298B:已添加 `)}${e.length}${o(`@C298B: 个文件到暂存区`)}`;return t>0&&(r+=`${o(`@C298B:,跳过 `)}${t}${o(`@C298B: 个锁定文件`)}`),n({message:r,type:`success`}),await q(),!0}else return n({message:`${o(`@C298B:添加文件失败: `)}${t.error}`,type:`error`}),!1}}catch(e){return n({message:`${o(`@C298B:添加文件失败: `)}${e.message}`,type:`error`}),!1}finally{N.value=!1}}async function Ce(){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{N.value=!0;let e=await(await fetch(`/api/add-all`,{method:`POST`})).json();return e.success?(n({message:o(`@C298B:所有文件已添加到暂存区`),type:`success`}),await q(),!0):(n({message:`${o(`@C298B:添加文件失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:添加文件失败: `)}${e.message}`,type:`error`}),!1}finally{N.value=!1}}async function we(e){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{N.value=!0;let t=await(await fetch(`/api/add-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(n({message:o(`@C298B:文件已暂存`),type:`success`}),K(),!0):(n({message:`${o(`@C298B:暂存文件失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:暂存文件失败: `)}${e.message}`,type:`error`}),!1}finally{N.value=!1}}async function Te(e){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{F.value=!0;let t=await(await fetch(`/api/unstage-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(n({message:o(`@C298B:已取消暂存文件`),type:`success`}),K(),!0):(n({message:`${o(`@C298B:取消暂存失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:取消暂存失败: `)}${e.message}`,type:`error`}),!1}finally{F.value=!1}}function J(e){return new Promise(t=>setTimeout(t,e))}async function Y(e,t=!1,r={}){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;let{autoRefresh:i=!0}=r;try{P.value=!0;let r=await(await fetch(`/api/commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:e,hasNewlines:e.includes(`
|
|
3
3
|
`),noVerify:t})})).json();return r.success?(n({message:o(`@C298B:提交成功`),type:`success`}),i&&(await q(),await G(!1),U(!0)),!0):(n({message:`${o(`@C298B:commitChanges 提交失败: `)}${r.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:提交失败: `)}${e.message}`,type:`error`}),!1}finally{P.value=!1}}async function Ee(){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{v.value=!0;let e=await(await fetch(`/api/push`,{method:`POST`})).json();return e.success?(S.value=0,C.value=0,await Promise.all([K(),G()]),console.log(`推送成功,分支状态已设置为同步 (ahead=0, behind=0)`),!0):(n({message:`${o(`@C298B:推送失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:推送失败: `)}${e.message}`,type:`error`}),!1}finally{v.value=!1}}async function De(e){return m.value?new Promise(t=>{try{v.value=!0,fetch(`/api/push-with-progress`,{method:`POST`}).then(r=>{let i=r.body?.getReader(),a=new TextDecoder;if(!i)throw Error(`无法读取响应流`);(async()=>{try{for(;;){let{done:r,value:ee}=await i.read();if(r)break;let te=a.decode(ee,{stream:!0}).split(`
|
|
4
4
|
`);for(let r of te)if(r.startsWith(`data: `))try{let i=JSON.parse(r.slice(6));e&&e(i),i.type===`complete`&&(v.value=!1,i.success?(S.value=0,C.value=0,Promise.all([K(),G()]),t(!0)):(n({message:`${o(`@C298B:推送失败: `)}${i.error}`,type:`error`}),t(!1)))}catch(e){console.error(`解析SSE数据失败:`,e)}}}catch(e){console.error(`读取流失败:`,e),v.value=!1,n({message:`${o(`@C298B:推送失败: `)}${e.message}`,type:`error`}),t(!1)}})()}).catch(e=>{v.value=!1,n({message:`${o(`@C298B:推送失败: `)}${e.message}`,type:`error`}),t(!1)})}catch(e){v.value=!1,n({message:`${o(`@C298B:推送失败: `)}${e.message}`,type:`error`}),t(!1)}}):(n.warning(o(`@C298B:当前目录不是Git仓库`)),!1)}async function Oe(e,t={}){if(!m.value)return n({message:o(`@C298B:当前目录不是Git仓库`),type:`warning`}),!1;if(!e)return n({message:o(`@C298B:请选择要合并的分支`),type:`warning`}),!1;if(e===s.value)return n({message:o(`@C298B:不能合并当前分支到自身`),type:`warning`}),!1;let r=`Merge branch '${e}' into ${s.value}`;try{x.value=!0;let i=await fetch(`/api/merge`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({branch:e,...t})}),a=await i.json();return i.status===409?(E.value=t.message||r,n({message:o(`@C298B:合并分支时发生冲突,请手动解决`),type:`warning`,duration:5e3}),!1):(E.value=``,a.success?(n({message:`${o(`@C298B:成功合并分支 `)}${e}${o(`@C298B: 到 `)}${s.value}`,type:`success`}),await K(),await U(),!0):(n({message:`${o(`@C298B:合并分支失败: `)}${a.error}`,type:`error`}),!1))}catch(e){return n({message:`${o(`@C298B:合并分支失败: `)}${e.message}`,type:`error`}),!1}finally{x.value=!1}}async function ke(e,t=!1){if(console.log(o(`@C298B:开始暂存并提交操作...`)),!await Se())return!1;console.log(o(`@C298B:暂存完成,等待Git操作完成...`)),await J(u),console.log(o(`@C298B:开始提交更改...`));let n=await Y(e,t);return console.log(o(`@C298B:暂存并提交操作完成`)),n}async function Ae(e,t=!1){try{if(console.log(o(`@C298B:开始暂存文件...`)),!await Se()||(console.log(o(`@C298B:暂存完成,等待Git操作完成...`)),await J(u),console.log(o(`@C298B:开始提交更改...`)),!await Y(e,t)))return!1;console.log(o(`@C298B:提交完成,等待Git操作完成...`)),await J(u),console.log(o(`@C298B:开始推送到远程...`));let n=await Ee();return console.log(o(`@C298B:一键推送操作完成,状态已统一刷新`)),n}catch(e){console.error(`一键推送操作失败:`,e);try{(await(await fetch(`/api/remove-lock`,{method:`POST`})).json()).success&&n({message:o(`@C298B:检测到Git锁定文件冲突,已自动清理,请重试操作`),type:`warning`})}catch(e){console.error(`清理锁定文件失败:`,e)}n({message:`${o(`@C298B:操作失败: `)}${e.message}`,type:`error`});try{await Promise.all([K(),G(),U()])}catch(e){console.error(`刷新状态失败:`,e)}return!1}}async function je(e,t=!1){if(!Z.value||Q.value.size===0)return ke(e,t);let r=$.value;return r.length===0?(n.warning(o(`@C298B:请选择要暂存的文件`)),!1):(console.log(o(`@C298B:开始暂存所选文件并提交...`,{n:r.length})),await ct(r)?(await J(u),Y(e,t)):!1)}async function Me(e,t=!1){if(!Z.value||Q.value.size===0)return Ae(e,t);let r=$.value;return r.length===0?(n.warning(o(`@C298B:请选择要暂存的文件`)),!1):!await ct(r)||(await J(u),!await Y(e,t))?!1:(await J(u),Ee())}async function Ne(){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{F.value=!0;let e=await(await fetch(`/api/reset-head`,{method:`POST`})).json();return e.success?(n({message:o(`@C298B:已重置暂存区`),type:`success`}),K(),!0):(n({message:`${o(`@C298B:重置暂存区失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:重置暂存区失败: `)}${e.message}`,type:`error`}),!1}finally{F.value=!1}}async function Pe(e){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{F.value=!0;let t=await(await fetch(`/api/reset-to-remote`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({branch:e})})).json();return t.success?(n({message:`${o(`@C298B:已重置分支 `)}${e}${o(`@C298B: 到远程状态`)}`,type:`success`}),K(),G(),await W(!0),await ue(),!0):(n({message:`${o(`@C298B:重置分支失败: `)}${t.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:重置分支失败: `)}${e.message}`,type:`error`}),!1}finally{F.value=!1}}async function Fe(){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{F.value=!0;let e=await(await fetch(`/api/discard-all-changes`,{method:`POST`})).json();return e.success?(n.success(o(`@C298B:已清除所有本地更改`)),K(),G(),!0):(n.error(`${o(`@C298B:操作失败: `)}${e.error}`),!1)}catch(e){return n.error(`${o(`@C298B:操作失败: `)}${e.message}`),!1}finally{F.value=!1}}async function Ie(e){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;if(!Array.isArray(e)||e.length===0)return n.warning(o(`@C298B:未选择任何文件`)),!1;try{F.value=!0;let t=await(await fetch(`/api/revert_files`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePaths:e})})).json();if(t.success){let r=Number(t?.count??e.length),i=Array.isArray(t?.results)?t.results.filter(e=>!e?.success).map(e=>String(e?.path||``)):[];return i.length>0?n.warning(`${o(`@C298B:已清除 `)}${r-i.length}${o(`@C298B: 个文件,失败 `)}${i.length}${o(`@C298B: 个`)}`):n.success(`${o(`@C298B:已清除 `)}${r}${o(`@C298B: 个所选文件`)}`),K(),G(),!0}else return n.error(`${o(`@C298B:操作失败: `)}${t.error}`),!1}catch(e){return n.error(`${o(`@C298B:操作失败: `)}${e.message}`),!1}finally{F.value=!1}}async function Le(){if(m.value)try{_.value=!0,console.log(o(`@C298B:获取远程仓库地址...`));let e=await(await fetch(`/api/remote-url`)).json();e.success?(g.value=e.url||``,console.log(`${o(`@C298B:获取到远程仓库地址: `)}${g.value}`)):(console.warn(`获取远程仓库地址失败:`,e.error),g.value=``)}catch(e){console.error(`获取远程仓库地址失败:`,e),g.value=``}finally{_.value=!1}}async function Re(){try{let e=await(await fetch(`/api/git-init`,{method:`POST`})).json();return e.success?(await le(),!0):(n.error(e.error||o(`@C298B:Git仓库初始化失败`)),!1)}catch(e){return n.error(`${o(`@C298B:Git仓库初始化失败: `)}${e.message}`),!1}}async function ze(e,t=`origin`){try{let r=await(await fetch(`/api/add-remote`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t,url:e})})).json();return r.success?(await Le(),!0):(n.error(r.error||o(`@C298B:添加远程仓库失败`)),!1)}catch(e){return n.error(`${o(`@C298B:添加远程仓库失败: `)}${e.message}`),!1}}async function Be(){try{let e=await(await fetch(`/api/diff-head`)).json();return e.success?e.diff?(await navigator.clipboard.writeText(e.diff),n({message:o(`@C298B:已复制全量 Diff`),type:`success`}),!0):(n({message:o(`@C298B:没有可复制的 Diff`),type:`warning`}),!1):(n({message:`${o(`@C298B:复制失败: `)}${e.error}`,type:`error`}),!1)}catch(e){return n({message:`${o(`@C298B:复制失败: `)}${e.message}`,type:`error`}),!1}}let Ve=[`github.com`,`gitlab.com`,`bitbucket.org`,`gitee.com`,`coding.net`,`codeup.aliyun.com`],He=r(()=>{let e=g.value.trim();if(!e)return null;if(/^https?:\/\//i.test(e))return e.replace(/\.git$/i,``);let t=e.match(/^[\w.-]+@([^:]+):(.+?)(?:\.git)?$/i);if(t){let e=t[1],n=t[2];return Ve.includes(e.toLowerCase())?`https://${e}/${n}`:null}let n=e.match(/^ssh:\/\/(?:[\w.-]+@)?([^/:]+)(?::\d+)?\/(.+?)(?:\.git)?$/i);if(n){let e=n[1],t=n[2];return Ve.includes(e.toLowerCase())?`https://${e}/${t}`:null}return null}),Ue=r(()=>He.value!==null);function We(){let e=He.value;return e?(window.open(e,`_blank`,`noopener,noreferrer`),!0):(n({message:o(`@C298B:该远程仓库地址无法识别为可访问的网页地址`),type:`warning`}),!1)}async function Ge(){if(!g.value)return n({message:o(`@C298B:没有可复制的远程仓库地址`),type:`warning`}),!1;try{return await navigator.clipboard.writeText(g.value),n({message:o(`@C298B:已复制远程仓库地址`),type:`success`}),!0}catch(e){return console.error(`复制远程仓库地址失败:`,e),n({message:`${o(`@C298B:复制失败: `)}${e.message}`,type:`error`}),!1}}async function Ke(){if(!g.value)return n({message:o(`@C298B:没有可复制的远程仓库地址`),type:`warning`}),!1;try{let e=`git clone ${g.value}`;return await navigator.clipboard.writeText(e),n({message:o(`@F13B4:已复制克隆命令`),type:`success`}),!0}catch(e){return console.error(`复制克隆命令失败:`,e),n({message:`${o(`@C298B:复制失败: `)}${e.message}`,type:`error`}),!1}}e(()=>{ye()});function qe(){D.value&&=(Je(),D.value.disconnect(),null)}function Je(){if(D.value)for(let e of[`connect`,`project_info`,`project_changed`,`disconnect`,`git_status_update`,`connect_error`,`connect_timeout`,`reconnect`,`reconnect_attempt`,`reconnect_error`,`reconnect_failed`])try{D.value.off(e)}catch{}}t(()=>{qe()});async function X(){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),[];try{B.value=!0;let e=await(await fetch(`/api/stash-list`)).json();return e.success?(z.value=e.stashes,e.stashes):(n.error(`${o(`@C298B:获取stash列表失败: `)}${e.error}`),[])}catch(e){return console.error(`获取stash列表失败:`,e),n.error(`${o(`@C298B:获取stash列表失败: `)}${e.message}`),[]}finally{B.value=!1}}async function Ye(e,t=!1,r=!0){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{H.value=!0;let i=await(await fetch(`/api/stash-save`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:e,includeUntracked:t,excludeLocked:r})})).json();return i.success?(n.success(i.message),await X(),await K(),!0):(n.warning(i.message),!1)}catch(e){return console.error(`保存stash失败:`,e),n.error(`${o(`@C298B:保存stash失败: `)}${e.message}`),!1}finally{H.value=!1}}async function Xe(e,t,r=!1){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;if(!e||e.length===0)return n.warning(o(`@C298B:请选择要储藏的文件`)),!1;try{H.value=!0;let i=await(await fetch(`/api/stash-save-partial`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({files:e,message:t,includeUntracked:r})})).json();return i.success?(n.success(i.message),await X(),await K(),!0):(n.warning(i.message),!1)}catch(e){return console.error(`保存部分stash失败:`,e),n.error(`${o(`@C298B:保存stash失败: `)}${e.message}`),!1}finally{H.value=!1}}async function Ze(e,t=!1){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{se.value=!0;let r=await fetch(`/api/stash-apply`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({stashId:e,pop:t})}),i=await r.json();return r.status===409?(n.warning(o(`@C298B:应用stash时发生冲突,请手动解决`)),!1):i.success?(n.success(i.message),await X(),await K(),!0):(n.error(`${o(`@C298B:应用stash失败: `)}${i.error}`),!1)}catch(e){return console.error(`应用stash失败:`,e),n.error(`${o(`@C298B:应用stash失败: `)}${e.message}`),!1}finally{se.value=!1}}async function Qe(e){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{V.value=!0;let t=await(await fetch(`/api/stash-drop`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({stashId:e})})).json();return t.success?(n.success(t.message),await X(),!0):(n.error(`${o(`@C298B:删除stash失败: `)}${t.error}`),!1)}catch(e){return console.error(`删除stash失败:`,e),n.error(`${o(`@C298B:删除stash失败: `)}${e.message}`),!1}finally{V.value=!1}}async function $e(){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;try{V.value=!0;let e=await(await fetch(`/api/stash-clear`,{method:`POST`})).json();return e.success?(n.success(e.message),z.value=[],!0):(n.error(`${o(`@C298B:清空stash失败: `)}${e.error}`),!1)}catch(e){return console.error(`清空stash失败:`,e),n.error(`${o(`@C298B:清空stash失败: `)}${e.message}`),!1}finally{V.value=!1}}let et=r(()=>A.value.some(e=>e.type===`conflicted`)),Z=i(!1),Q=i(new Set);function tt(){Z.value=!Z.value,Z.value||(Q.value=new Set)}function nt(){Z.value=!0}function rt(){Z.value=!1,Q.value=new Set}function it(e){let t=new Set(Q.value);t.has(e)?t.delete(e):t.add(e),Q.value=t}function at(){Q.value=new Set(A.value.map(e=>e.path))}function ot(){Q.value=new Set}let $=r(()=>{if(!Z.value)return[];let e=new Set(a.lockedFiles.map(e=>e.replace(/\\/g,`/`))),t=[];for(let n of Q.value){let r=n.replace(/\\/g,`/`);if(e.has(r))continue;let i=A.value.find(e=>e.path===n);i&&[`modified`,`deleted`,`untracked`].includes(i.type)&&t.push(n)}return t}),st=r(()=>$.value.length>0);async function ct(e){if(!m.value)return n.warning(o(`@C298B:当前目录不是Git仓库`)),!1;let t=[...new Set(e.filter(e=>typeof e==`string`&&e.length>0))];if(t.length===0)return n.warning(o(`@C298B:请选择要暂存的文件`)),!1;try{N.value=!0;let e=await(await fetch(`/api/add-files`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePaths:t})})).json();if(e.success){let r=e.successCount??t.length;n.success(r>0?`${o(`@C298B:已暂存 `)}${r}${o(`@C298B: 个所选文件`)}`:o(`@C298B:文件已添加到暂存区`));let i=new Set(Q.value);for(let e of t)i.delete(e);return Q.value=i,await q(),!0}else return n.error(`${o(`@C298B:暂存失败: `)}${e.error||``}`),!1}catch(e){return n.error(`${o(`@C298B:暂存失败: `)}${e.message}`),!1}finally{N.value=!1}}return{currentBranch:s,allBranches:c,userName:l,userEmail:d,isChangingBranch:f,isCreatingBranch:p,isGitRepo:m,lastCheckedTime:h,branchAhead:S,branchBehind:C,hasUpstream:w,upstreamBranch:T,lastBranchesTime:ie,remoteUrl:g,isLoadingRemoteUrl:_,remoteWebUrl:He,isRemoteBrowsable:Ue,openRemoteWebUrl:We,hasConflictedFiles:et,stashes:z,isLoadingStashes:B,isApplyingStash:se,isDroppingStash:V,isSavingStash:H,log:k,status:oe,fileList:A,isLoadingLog:j,isLoadingStatus:M,isAddingFiles:N,isCommiting:P,isResetting:F,currentPage:I,hasMoreData:L,totalCommits:R,isPushing:v,isGitPulling:y,isGitFetching:b,isGitMerging:x,isMergeInProgress:re,pendingMergeMessage:E,isSelectionMode:Z,selectedFiles:Q,selectedUnstagedPaths:$,hasSelectableFiles:st,toggleSelectionMode:tt,enterSelectionMode:nt,exitSelectionMode:rt,toggleFileSelection:it,selectAllFiles:at,clearSelection:ot,$reset:ce,checkGitRepo:le,getCurrentBranch:W,getAllBranches:ue,changeBranch:de,getUserInfo:fe,createBranch:pe,clearUserConfig:me,restoreUserConfig:he,getBranchStatus:U,gitPull:ge,gitFetchAll:ve,bootFetch:_e,initSocketConnection:ye,parseStatusPorcelain:be,fetchLog:G,refreshLog:xe,fetchStatus:K,fetchStatusPorcelain:q,addToStage:Se,addAllToStage:Ce,addFileToStage:we,stageFiles:ct,unstageFile:Te,commitChanges:Y,pushToRemote:Ee,pushToRemoteWithProgress:De,addAndCommit:ke,addCommitAndPush:Ae,stageSelectedAndCommit:je,stageSelectedAndCommitAndPush:Me,resetHead:Ne,resetToRemote:Pe,discardAllChanges:Fe,discardSelectedFiles:Ie,getRemoteUrl:Le,addRemote:ze,gitInit:Re,copyRemoteUrl:Ge,copyCloneCommand:Ke,copyCurrentDiff:Be,mergeBranch:Oe,getStashList:X,saveStash:Ye,savePartialStash:Xe,applyStash:Ze,dropStash:Qe,clearAllStashes:$e,socket:D,disconnectSocket:qe}});export{l as n,d as t};
|