zen-gitsync 2.10.20 → 2.10.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-BpNfZzQX.js","assets/vendor-DpSHka1A.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as Qo,d as ze,a as v,o as r,b as Zo,e as ie,n as Xe,f as a,u as Xo,g as x,w as o,r as Yt,h as ls,E as yt,i as wa,j as _,k as Ze,l as u,m as ts,p as Hs,q as Ja,s as ms,t as Ds,v as I,x as t,y as s,z as ct,A as st,B as ga,C as ta,D as Ka,F as Ue,G as tt,H as l,I as en,J as ya,K as rs,L as ka,W as Ya,M as Qa,N as Za,O as Xa,P as eo,_ as to,Q as jt,R as Fs,S as so,T as Et,U as tn,V as sn,X as Qt,Y as Ca,Z as Xs,$ as L,a0 as _a,a1 as ao,a2 as oo,a3 as an,a4 as sa,a5 as is,a6 as Ws,a7 as qt,a8 as aa,a9 as Cs,aa as vs,ab as Os,ac as Us,ad as _s,ae as bs,af as $a,ag as Dt,ah as Ye,ai as on,aj as nn,ak as js,al as no,am as zt,an as As,ao as Sa,ap as Js,aq as Zt,ar as Da,as as ys,at as Fa,au as os,av as ns,aw as ln,ax as as,ay as oa,az as na,aA as rn,aB as ba,aC as lo,aD as Ss,aE as cs,aF as la,aG as io,aH as cn,aI as un,aJ as ro,aK as zs,aL as co,aM as Bs,aN as uo,aO as dn,aP as ws,aQ as po,aR as fo,aS as Qs,aT as ps,aU as da,aV as pa,aW as pn,aX as mo,aY as vo,aZ as ho,a_ as fn,a$ as mn,b0 as ia,b1 as Ht,b2 as Is,b3 as vn,b4 as hn,b5 as La,b6 as Wt,b7 as go,b8 as yo,b9 as Co,ba as _o,bb as gn,bc as yn,bd as gs,be as xa,bf as Cn,bg as _n,bh as bo,bi as bn,bj as wn,bk as wo,bl as kn,bm as $n,bn as Sn,bo as Dn,bp as ko,bq as Fn,br as On,bs as Nn,bt as Tn,bu as Bn,bv as An}from"./vendor-BpNfZzQX.js";(function(){const k=document.createElement("link").relList;if(k&&k.supports&&k.supports("modulepreload"))return;for(const f of document.querySelectorAll('link[rel="modulepreload"]'))c(f);new MutationObserver(f=>{for(const p of f)if(p.type==="childList")for(const h of p.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&c(h)}).observe(document,{childList:!0,subtree:!0});function i(f){const p={};return f.integrity&&(p.integrity=f.integrity),f.referrerPolicy&&(p.referrerPolicy=f.referrerPolicy),f.crossOrigin==="use-credentials"?p.credentials="include":f.crossOrigin==="anonymous"?p.credentials="omit":p.credentials="same-origin",p}function c(f){if(f.ep)return;f.ep=!0;const p=i(f);fetch(f.href,p)}})();const En={"@F13B4:编辑项目配置":"编辑项目配置","@F13B4:国际化测试":"国际化测试","@F13B4:Git 操作":"Git 操作","@F13B4:用户设置":"用户设置","@F13B4:创建新分支":"创建新分支","@F13B4:请输入新分支名称":"请输入新分支名称","@F13B4:选择基础分支":"选择基础分支","@F13B4:当前分支":"当前分支","@F13B4:复制仓库地址":"复制仓库地址","@F13B4:复制克隆命令":"复制克隆命令","@F13B4:已复制克隆命令":"已复制克隆命令","@F13B4:切换到浅色主题":"切换到浅色主题","@F13B4:切换到深色主题":"切换到深色主题","@F13B4:未知目录":"未知目录","@F13B4:---------- 页面初始化开始 ----------":"---------- 页面初始化开始 ----------","@F13B4:当前目录不是Git仓库,部分功能将不可用":"当前目录不是Git仓库,部分功能将不可用","@F13B4:---------- 页面初始化完成 ----------":"---------- 页面初始化完成 ----------","@F13B4:默认提交信息: ":"默认提交信息: ","@F13B4:布局比例已保存 - 左侧: ":"布局比例已保存 - 左侧: ","@F13B4:%, 上方: ":"%, 上方: ","@F13B4:底部布局比例已保存 - 左侧: ":"底部布局比例已保存 - 左侧: ","@F13B4:已恢复左侧比例: ":"已恢复左侧比例: ","@F13B4:已恢复上方比例: ":"已恢复上方比例: ","@F13B4:用户: ":"用户: ","@F13B4:未配置":"未配置","@F13B4:关闭测试":"关闭测试","@F13B4:加载中...":"加载中...","@F13B4:用户未配置":"用户未配置","@F13B4:请先配置Git用户信息才能进行提交操作。":"请先配置Git用户信息才能进行提交操作。","@F13B4:您可以通过以下方式配置:":"您可以通过以下方式配置:","@F13B4:点击右上角的设置按钮,配置用户名和邮箱":"点击右上角的设置按钮,配置用户名和邮箱","@F13B4:或者使用命令行配置:":"或者使用命令行配置:",'@F13B4:--global user.name "您的用户名"':'--global user.name "您的用户名"','@F13B4:--global user.email "您的邮箱"':'--global user.email "您的邮箱"',"@F13B4:立即配置":"立即配置","@F13B4:仓库初始化":"仓库初始化","@F13B4:当前目录不是Git仓库,请先初始化Git仓库或切换到Git仓库目录。":"当前目录不是Git仓库,请先初始化Git仓库或切换到Git仓库目录。","@F13B4:可以使用以下命令初始化仓库:":"可以使用以下命令初始化仓库:","@F13B4:新分支名称":"新分支名称","@F13B4:基于分支":"基于分支","@F13B4:取消":"取消","@F13B4:创建":"创建","@F13B4:远程仓库:":"远程仓库:","@76A11:没有已暂存的更改":"没有已暂存的更改","@76A11:请输入提交信息":"请输入提交信息","@76A11:提交":"提交","@76A11:个已暂存文件":"个已暂存文件","@76A11:存在冲突文件,请先解决冲突":"存在冲突文件,请先解决冲突","@F4137:当前分支没有上游分支":"当前分支没有上游分支","@F4137:没有需要推送的提交":"没有需要推送的提交","@F4137:有未提交的暂存更改,请先提交":"有未提交的暂存更改,请先提交","@F4137:推送":"推送","@F4137:个本地提交":"个本地提交","@F4137:存在冲突文件,请先解决冲突":"存在冲突文件,请先解决冲突","@2E184:一键推送所有":"一键推送所有","@2E184:暂存 + 提交 + 推送":"暂存 + 提交 + 推送","@2E184:存在冲突文件,请先解决冲突":"存在冲突文件,请先解决冲突","@2E184:没有需要提交的更改":"没有需要提交的更改","@2E184:请输入提交信息":"请输入提交信息","@2E184:当前分支没有上游分支":"当前分支没有上游分支","@2E184:没有需要提交或推送的更改":"没有需要提交或推送的更改","@2E184:本地已提交,一键推送到远程仓库":"本地已提交,一键推送到远程仓库","@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库":"一键完成:暂存所有更改 → 提交 → 推送到远程仓库","@PSTART:一键推送成功后执行":"一键推送成功后执行","@PSTART:启用":"启用","@PSTART:仅在一键推送成功后触发,不影响主流程":"仅在一键推送成功后触发,不影响主流程","@29974:没有需要暂存的更改":"没有需要暂存的更改","@29974:暂存":"暂存","@29974:个未暂存文件(逐个添加)":"个未暂存文件(逐个添加)","@29974:暂存所有更改(git add .)":"暂存所有更改(git add .)","@29974:暂存更改":"暂存更改","@CF05E:当前路径":"当前路径","@CF05E:退出全屏":"退出全屏","@CF05E:全屏显示":"全屏显示","@CF05E:收起":"收起","@CF05E:展开":"展开","@CF05E:收起输出":"收起输出","@CF05E:展开输出":"展开输出","@CF05E:无输出内容":"无输出内容","@CF05E:自定义指令执行":"自定义指令执行","@CF05E:执行":"执行","@CF05E:使用终端执行":"使用终端执行","@CF05E:开启":"开启","@CF05E:关闭":"关闭","@CF05E:自定义命令管理":"自定义命令管理","@CF05E:指令编排":"指令编排","@CF05E:全屏":"全屏","@CF05E:收起控制台":"收起控制台","@CF05E:展开控制台":"展开控制台","@FLOWNODE:条件":"条件","@ORCH:条件分支":"条件分支","@COND:条件配置":"条件配置","@COND:分支列表":"分支列表","@COND:添加分支":"添加分支","@COND:默认分支":"默认分支","@COND:分支名称":"分支名称","@COND:优先级":"优先级","@COND:规则组合":"规则组合","@COND:且(ALL)":"且(ALL)","@COND:或(ANY)":"或(ANY)","@COND:规则":"规则","@COND:添加规则":"添加规则","@COND:左值(引用输出)":"左值(引用输出)","@COND:操作符":"操作符","@COND:右值":"右值","@COND:删除分支":"删除分支","@COND:删除规则":"删除规则","@COND:请至少保留一个默认分支":"请至少保留一个默认分支","@COND:默认分支必须使用handleId=default":"默认分支必须使用handleId=default","@NODEINPUT:必填":"必填","@NODECFG:必填参数未选择引用输出":"必填参数「{name}」未选择引用输出","@NODECFG:请输入必填参数的值":"请输入必填参数「{name}」的值","@CMD01:命令名称不能为空":"命令名称不能为空","@CMD01:命令内容不能为空":"命令内容不能为空","@CMD01:命令已保存":"命令已保存","@CMD01:保存命令失败: ":"保存命令失败: ","@CMD01:命令已删除":"命令已删除","@CMD01:删除命令失败: ":"删除命令失败: ","@CMD01:命令已更新":"命令已更新","@CMD01:更新命令失败: ":"更新命令失败: ","@CMD01:命令保存失败: ":"命令保存失败: ","@CMD01:确定要删除这个自定义命令吗?":"确定要删除这个自定义命令吗?","@CMD01:删除确认":"删除确认","@CMD01:确定":"确定","@CMD01:取消":"取消","@CMD01:自定义命令管理":"自定义命令管理","@CMD01:命令名称":"命令名称","@CMD01:输入命令名称,例如: 拉取代码":"输入命令名称,例如: 拉取代码","@CMD01:描述":"描述","@CMD01:可选,简要描述命令用途":"可选,简要描述命令用途","@CMD01:执行目录":"执行目录","@CMD01:留空使用当前目录":"留空使用当前目录","@CMD01:确定":"确定","@CMD01:命令":"命令","@CMD01:输入要执行的命令,例如: npm run build":"输入要执行的命令,例如: npm run build","@CMD01:更新命令":"更新命令","@CMD01:添加命令":"添加命令","@CMD01:已保存的命令":"已保存的命令","@CMD01:暂无保存的命令":"暂无保存的命令","@CMD01:当前目录":"当前目录","@CMD01:操作":"操作","@CMD01:执行命令":"执行命令","@CMD01:编辑":"编辑","@CMD01:复制命令":"复制命令","@CMD01:删除":"删除","@CMD01:选择目录":"选择目录","@CMD01:浏览目录失败: ":"浏览目录失败: ","@CMD01:浏览并选择目录":"浏览并选择目录","@CMD01:当前路径: ":"当前路径: ","@CMD01:返回上级目录":"返回上级目录","@CMD01:处理目录选择时出错: ":"处理目录选择时出错: ","@CMD01:当前目录":"当前目录","@CMD01:使用当前目录":"使用当前目录","@CMD01:添加命令":"添加命令","@CMD01:编辑命令":"编辑命令","@CMD01:更新命令":"更新命令","@CMD01:命令模板":"命令模板","@CMD01:命令模板管理":"命令模板管理","@CMD01:输入命令模板,例如: npm run build":"输入命令模板,例如: npm run build","@CMD01:编辑命令模板":"编辑命令模板","@CMD01:暂无保存的命令模板":"暂无保存的命令模板","@CMD01:执行参数":"执行参数","@CMD01:请输入变量值":"请输入 {var} 的值","@CMD01:变量配置":"变量配置","@CMD01:变量名":"变量名","@CMD01:默认值":"默认值","@CMD01:必填":"必填","@CMD01:请输入必填变量: ":"请输入必填变量: {var}","@CMD02:指令编排":"指令编排","@CMD02:可用命令":"可用命令","@CMD02:暂无可用命令,请先创建命令":"暂无可用命令,请先创建命令","@CMD02:添加":"添加","@CMD02:执行顺序":"执行顺序","@CMD02:清空":"清空","@CMD02:请从左侧选择要执行的命令":"请从左侧选择要执行的命令","@CMD02:移除":"移除","@CMD02:开始执行":"开始执行","@CMD02:个命令":"个命令","@ORCH:编排已保存":"编排已保存","@ORCH:保存编排失败: ":"保存编排失败: ","@ORCH:编排已删除":"编排已删除","@ORCH:删除编排失败: ":"删除编排失败: ","@ORCH:编排已更新":"编排已更新","@ORCH:更新编排失败: ":"更新编排失败: ","@ORCHWS:编排工作台":"编排工作台","@ORCHWS:已保存的编排":"已保存的编排","@ORCHWS:新建":"新建","@ORCHWS:暂无编排":"暂无编排","@ORCHWS:执行":"执行","@ORCHWS:删除":"删除","@ORCHWS:编辑编排":"编辑编排","@ORCHWS:新建编排":"新建编排","@ORCHWS:保存":"保存","@ORCHWS:保存编排":"保存编排","@ORCHWS:执行编排":"执行编排","@ORCHWS:编排名称(必填)":"编排名称(必填)","@ORCHWS:编排描述(选填)":"编排描述(选填)","@ORCHWS:执行步骤":"执行步骤","@ORCHWS:添加步骤":"添加步骤","@ORCHWS:清空所有步骤":"清空所有步骤","@ORCHWS:步骤":"步骤","@ORCHWS:请添加执行步骤":"请添加执行步骤","@ORCHWS:启用":"启用","@ORCHWS:终端执行":"终端执行","@ORCHWS:普通执行":"普通执行","@ORCHWS:置顶":"置顶","@ORCHWS:移动到顶部":"移动到顶部","@ORCHWS:上移":"上移","@ORCHWS:下移":"下移","@ORCHWS:置底":"置底","@ORCHWS:移动到底部":"移动到底部","@ORCHWS:移除":"移除","@ORCHWS:可用命令":"可用命令","@ORCHWS:暂无可用命令":"暂无可用命令","@ORCHWS:等待时长(秒)":"等待时长(秒)","@ORCHWS:版本号修改":"版本号修改","@ORCHWS:修改目标":"修改目标","@ORCHWS:package.json版本号":"package.json版本号","@ORCHWS:依赖包版本号":"依赖包版本号","@ORCHWS:版本递增":"版本递增","@ORCHWS:主版本":"主版本","@ORCHWS:次版本":"次版本","@ORCHWS:补丁版本":"补丁版本","@ORCHWS:依赖包名称":"依赖包名称","@ORCHWS:请输入依赖包名称":"请输入依赖包名称","@ORCHWS:依赖类型":"依赖类型","@ORCHWS:生产依赖":"生产依赖","@ORCHWS:开发依赖":"开发依赖","@ORCHWS:版本号设置":"版本号设置","@ORCHWS:自动递增":"自动递增","@ORCHWS:手动输入":"手动输入","@ORCHWS:请输入版本号":"请输入版本号","@ORCHWS:添加":"添加","@ORCHWS:确认删除":"确认删除","@ORCHWS:取消":"取消","@ORCHWS:确定要删除编排":'确定要删除编排 "{name}" 吗?',"@ORCHWS:请输入编排名称":"请输入编排名称","@ORCHWS:请至少添加一个步骤":"请至少添加一个步骤","@ORCHWS:请选择依赖包名称":"请选择依赖包名称","@ORCHWS:请输入依赖包版本号":"请输入依赖包版本号","@ORCHWS:未知命令":"未知命令","@ORCHWS:等待 {seconds} 秒":"等待 {seconds} 秒","@ORCHWS:主版本号":"主版本","@ORCHWS:次版本号":"次版本","@ORCHWS:补丁版本号":"补丁版本","@ORCHWS:修改依赖":"修改依赖 [{depType}] {depName} 版本+1 ({bumpText})","@ORCHWS:修改依赖手动":"修改依赖 [{depType}] {depName} → {version}","@ORCHWS:版本号+1":"版本号+1 ({bumpText})","@ORCHWS:未知步骤":"未知步骤","@ORCHWS:命令已删除":"命令已删除","@ORCHWS:暂停执行":"暂停执行 {seconds} 秒","@ORCHWS:已禁用":"[已禁用] ","@ORCHWS:终端":"[终端] ","@ORCHWS:从此处开始执行":"从此处开始执行","@ORCHWS:版本号来源":"版本号来源","@ORCHWS:引用输出":"引用输出","@ORCHWS:无可用的前置命令节点":"无可用的前置命令节点","@ORCHWS:引用节点":"引用节点","@ORCHWS:选择要引用的前置节点":"选择要引用的前置节点","@ORCHWS:输出字段":"输出字段","@ORCHWS:选择要引用的输出字段":"选择要引用的输出字段","@ORCHWS:版本号将使用所选节点的输出结果":"版本号将使用所选节点的输出结果","@ORCHWS:请选择要引用的节点输出":"请选择要引用的节点输出","@ORCHWS:输出键名":"输出键名","@ORCHWS:可选输出键名提示":"可选,用于其他节点引用此命令的输出","@ORCHWS:设置后其他节点可以引用此命令的输出结果":"设置后,其他节点可以引用此命令的输出结果","@ORCHWS:标准输出":"标准输出 (stdout)","@ORCHWS:提取的版本号":"提取的版本号","@NODECFG:节点配置":"节点配置","@NODECFG:通用设置":"通用设置","@NODECFG:节点名称":"节点名称","@NODECFG:请输入节点名称":"请输入节点名称","@NODECFG:启用节点":"启用节点","@NODECFG:执行方式":"执行方式","@NODECFG:普通执行":"普通执行","@NODECFG:终端执行":"终端执行","@NODECFG:终端选项":"终端选项","@NODECFG:重启现存终端命令":"重启现存终端命令","@NODECFG:输出配置":"输出配置","@NODECFG:参数名":"参数名","@NODECFG:参数描述":"参数描述","@NODECFG:运行时生成":"运行时生成","@NODECFG:添加输出参数":"添加输出参数","@NODECFG:输入配置":"输入配置","@NODECFG:命令配置":"命令配置","@NODECFG:选择命令":"选择命令","@NODECFG:暂无可用命令请先创建命令":"暂无可用命令,请先创建命令","@NODECFG:当前目录":"当前目录","@NODECFG:等待配置":"等待配置","@NODECFG:管理命令":"管理命令","@NODECFG:等待时间":"等待时间","@NODECFG:秒":"秒","@NODECFG:代码配置":"代码配置","@NODECFG:输入":"输入","@NODECFG:代码":"代码","@NODECFG:输出":"输出","@NODECFG:参数值":"参数值","@NODECFG:引用":"引用","@NODECFG:手动":"手动","@NODECFG:请输入":"请输入","@NODECFG:值":"值","@NODECFG:暂无输入参数":"暂无输入参数","@NODECFG:暂无输出参数":"暂无输出参数","@NODECFG:参数类型":"参数类型","@NODECFG:示例代码":"示例代码","@NODECFG:提取版本号":"提取版本号","@NODECFG:生成提交信息":"生成提交信息","@NODECFG:已应用示例":"已应用示例","@NODECFG:代码脚本示例":`function main(param) {
|
|
3
|
-
const out = new Object()
|
|
4
|
-
out.key0 = param.input
|
|
5
|
-
return out
|
|
6
|
-
}`,"@NODECFG:引用节点输出":"引用节点输出","@NODECFG:脚本":"脚本","@NODECFG:请输入脚本":"请输入脚本","@NODECFG:脚本示例":"脚本示例","@NODECFG:输出键列表":"输出键列表","@NODECFG:一行一个输出键":"一行一个输出键","@NODECFG:请配置输出键":"请配置输出键","@NODECFG:版本配置":"版本配置","@NODECFG:package.json":"package.json","@NODECFG:留空则使用当前目录的package.json":"留空则使用当前目录的 package.json","@NODECFG:修改目标":"修改目标","@NODECFG:version字段":"version 字段","@NODECFG:dependencies中的依赖":"dependencies 中的依赖","@NODECFG:版本增量类型":"版本增量类型","@NODECFG:补丁版本x.x.+1":"补丁版本 (x.x.+1)","@NODECFG:次版本x.+1.0":"次版本 (x.+1.0)","@NODECFG:主版本+1.0.0":"主版本 (+1.0.0)","@NODECFG:依赖类型":"依赖类型","@NODECFG:依赖包名称":"依赖包名称","@NODECFG:请先选择package.json":"请先选择 package.json","@NODECFG:版本号来源":"版本号来源","@NODECFG:自动递增":"自动递增","@NODECFG:手动输入":"手动输入","@NODECFG:引用输出":"引用输出","@NODECFG:引用输入":"引用输入","@NODECFG:选择要引用的输入字段":"选择要引用的输入字段","@NODECFG:无可用的前置命令节点":"无可用的前置命令节点","@NODECFG:递增类型":"递增类型","@NODECFG:补丁版本":"补丁版本","@NODECFG:次版本":"次版本","@NODECFG:主版本":"主版本","@NODECFG:版本号":"版本号","@NODECFG:例如1.2.3":"例如: 1.2.3","@NODECFG:引用节点":"引用节点","@NODECFG:选择要引用的前置节点":"选择要引用的前置节点","@NODECFG:输出字段":"输出字段","@NODECFG:选择要引用的输出字段":"选择要引用的输出字段","@NODECFG:版本号将使用所选节点的输出结果":"版本号将使用所选节点的输出结果","@NODECFG:版本号将使用本节点输入参数的值":"版本号将使用本节点输入参数的值","@NODECFG:标准输出(stdout)":"标准输出 (stdout)","@NODECFG:标准错误(stderr)":"标准错误 (stderr)","@NODECFG:错误(error)":"错误 (error)","@NODECFG:提取的版本号":"提取的版本号","@NODECFG:命令节点":"命令节点","@NODECFG:请选择要执行的命令":"请选择要执行的命令","@NODECFG:等待时间必须大于0秒":"等待时间必须大于0秒","@NODECFG:请选择依赖包名称":"请选择依赖包名称","@NODECFG:请输入依赖包版本号":"请输入依赖包版本号","@NODECFG:请选择要引用的节点输出":"请选择要引用的节点输出","@NODECFG:节点配置已保存":"节点配置已保存","@NODECFG:取消":"取消","@NODECFG:保存配置":"保存配置","@NODECFG:读取依赖列表失败":"读取依赖列表失败","@NODECFG:ID":"ID","@FLOWNODE:开始":"开始","@FLOWNODE:命令节点":"命令节点","@FLOWNODE:等待节点":"等待节点","@FLOWNODE:版本管理":"版本管理","@FLOWNODE:用户确认":"用户确认","@FLOWNODE:代码节点":"代码节点","@FLOWNODE:用户输入":"用户输入","@FLOWNODE:终端":"终端","@FLOWNODE:未配置":"未配置","@FLOWNODE:依赖":"依赖","@UINPUT:参数名":"参数名","@UINPUT:类型":"类型","@UINPUT:手动输入":"手动输入","@UINPUT:引用":"引用","@UINPUT:默认值":"默认值","@UINPUT:引用输出":"引用输出","@UINPUT:添加参数":"添加参数","@UINPUT:暂无输入参数":"暂无输入参数","@UINPUT:用户输入节点":"用户输入节点","@UINPUT:等待用户输入...":"等待用户输入...","@UINPUT:请输入必填参数的值":"请输入必填参数「{name}」的值","@UINPUT:用户取消执行":"用户取消执行","@UINPUT:无输入":"无输入","@UINPUT:执行到该节点暂停并等待输入":"执行到该节点暂停并等待输入","@FLOWNODE:目标":"目标","@FLOWNODE:来源":"来源","@FLOWNODE:依赖版本":"依赖版本","@FLOWNODE:version字段":"version 字段","@FLOWNODE:引用输出":"引用输出","@FLOWNODE:引用输入":"引用输入","@FLOWNODE:手动输入":"手动输入","@FLOWNODE:自动递增":"自动递增","@FLOWNODE:package.json":"package.json","@FLOWNODE:当前目录":"当前目录","@FLOWNODE:版本号":"版本号","@FLOWNODE:递增":"递增","@FLOWNODE:引用":"引用","@FLOWNODE:未知命令":"未知命令","@FLOWNODE:等待 {seconds} 秒":"等待 {seconds} 秒","@FLOWNODE:修改依赖: {name}":"修改依赖: {name}","@FLOWNODE:版本号 +1 ({bump})":"版本号 +1 ({bump})","@FLOWNODE:已添加":"已添加","@FLOWNODE:不能删除起始节点":"不能删除起始节点","@FLOWNODE:节点已删除":"节点已删除","@NODEINPUT:命令中未检测到变量参数":"命令中未检测到变量参数","@NODEINPUT:参数名":"参数名","@NODEINPUT:类型":"类型","@NODEINPUT:选择类型":"选择类型","@NODEINPUT:手动输入":"手动输入","@NODEINPUT:引用节点":"引用节点","@NODEINPUT:值":"值","@NODEINPUT:输入参数值":"输入参数值","@NODEINPUT:选择节点输出":"选择节点输出","@NODEINPUT:标准输出(stdout)":"标准输出 (stdout)","@NODEINPUT:标准错误(stderr)":"标准错误 (stderr)","@NODEINPUT:错误(error)":"错误 (error)","@803A9:确定":"确定","@803A9:取消":"取消","@67CE7:在资源管理器中打开":"在资源管理器中打开","@67CE7:切换工作目录":"切换工作目录","@67CE7:请输入目录路径":"请输入目录路径","@67CE7:当前目录不是Git仓库,部分功能将不可用":"当前目录不是Git仓库,部分功能将不可用","@67CE7:打开目录失败: ":"打开目录失败: ","@67CE7:切换目录失败: ":"切换目录失败: ","@67CE7:浏览目录失败: ":"浏览目录失败: ","@67CE7:处理目录选择时出错: ":"处理目录选择时出错: ","@67CE7:目录路径":"目录路径","@67CE7:浏览":"浏览","@67CE7:常用目录":"常用目录","@67CE7:取消":"取消","@67CE7:切换":"切换","@67CE7:打开终端失败: ":"打开终端失败: ","@NPM01:NPM 脚本":"NPM 脚本","@NPM01:个包":"个包","@NPM01:正在扫描项目中的 npm 脚本...":"正在扫描项目中的 npm 脚本...","@NPM01:当前项目中未找到包含 scripts 的 package.json":"当前项目中未找到包含 scripts 的 package.json","@NPM01:个脚本":"个脚本","@NPM01:已在新终端中执行":"已在新终端中执行","@NPM01:加载npm脚本失败":"加载npm脚本失败","@NPM01:执行脚本失败":"执行脚本失败","@NPM01:设置":"设置","@NPM01:刷新":"刷新","@NPM01:关闭":"关闭","@NPM01:NPM 设置":"NPM 设置","@NPM01:包名称":"包名称","@NPM01:选择 package.json":"选择 package.json","@NPM01:请选择一个 package.json":"请选择一个 package.json","@NPM01:版本号管理":"版本号管理","@NPM01:脚本管理":"脚本管理","@NPM01:添加脚本":"添加脚本","@NPM01:当前脚本列表":"当前脚本列表","@NPM01:暂无脚本":"暂无脚本","@NPM01:编辑":"编辑","@NPM01:删除":"删除","@NPM01:置顶":"置顶","@NPM01:编辑脚本":"编辑脚本","@NPM01:添加新脚本":"添加新脚本","@NPM01:取消编辑":"取消编辑","@NPM01:更新脚本":"更新脚本","@NPM01:确定要删除脚本":"确定要删除脚本","@NPM01:吗?":"吗?","@NPM01:删除脚本":"删除脚本","@NPM01:确定":"确定","@NPM01:取消":"取消","@NPM01:脚本已更新":"脚本已更新","@NPM01:脚本已删除":"脚本已删除","@NPM01:脚本已置顶":"脚本已置顶","@NPM01:更新脚本失败":"更新脚本失败","@NPM01:删除脚本失败":"删除脚本失败","@NPM01:置顶脚本失败":"置顶脚本失败","@NPM01:当前版本":"当前版本","@NPM01:选择要增加的版本号类型":"选择要增加的版本号类型","@NPM01:主版本号 (major)":"主版本号 (major)","@NPM01:次版本号 (minor)":"次版本号 (minor)","@NPM01:修订号 (patch)":"修订号 (patch)","@NPM01:更新版本号":"更新版本号","@NPM01:脚本名称":"脚本名称","@NPM01:例如: build, dev, test":"例如: build, dev, test","@NPM01:脚本命令":"脚本命令","@NPM01:例如: vite build, vite dev":"例如: vite build, vite dev","@NPM01:版本号已更新":"版本号已更新","@NPM01:更新版本号失败":"更新版本号失败","@NPM01:脚本已添加":"脚本已添加","@NPM01:添加脚本失败":"添加脚本失败","@NPM01:请输入脚本名称":"请输入脚本名称","@NPM01:请输入脚本命令":"请输入脚本命令","@NPM01:脚本名称不能包含空格":"脚本名称不能包含空格","@NPM01:脚本名称只能包含字母、数字、连字符、冒号、下划线和点号,且不能以数字开头":"脚本名称只能包含字母、数字、连字符、冒号、下划线和点号,且不能以数字开头","@NPM01:脚本名称格式正确":"脚本名称格式正确","@NPM01:脚本名称格式不正确":"脚本名称格式不正确","@NPM01:个脚本":"个脚本","@0883F:处理中...":"处理中...","@0883F:解锁文件":"解锁文件","@0883F:锁定文件":"锁定文件","@0883F:取消暂存":"取消暂存","@0883F:添加到暂存区":"添加到暂存区","@0883F:撤回修改":"撤回修改","@0883F:删除文件":"删除文件","@E80AC:搜索文件名或路径...":"搜索文件名或路径...","@E80AC:没有找到匹配的文件":"没有找到匹配的文件","@E80AC:该文件已被锁定,提交时会被跳过":"该文件已被锁定,提交时会被跳过","@E80AC:复制文件路径":"复制文件路径","@E80AC:用VSCode打开文件":"用VSCode打开文件","@E80AC:该文件没有差异内容":"该文件没有差异内容","@E80AC:请选择文件查看差异":"请选择文件查看差异","@E80AC:没有找到变更文件":"没有找到变更文件","@E80AC:请先选择一个文件":"请先选择一个文件","@E80AC:文件路径已复制到剪贴板":"文件路径已复制到剪贴板","@E80AC:复制失败":"复制失败","@E80AC:在系统默认编辑器中打开文件":"在系统默认编辑器中打开文件","@E80AC:打开该提交时的文件版本":"打开该提交时的文件版本","@E80AC:打开该stash中的文件版本":"打开该stash中的文件版本","@E80AC:打开文件":"打开文件","@E80AC:变更文件":"变更文件","@E80AC:文件差异":"文件差异","@E80AC:列表视图":"列表视图","@E80AC:树状视图":"树状视图","@E80AC:检测到冲突,请选择解决方式":"检测到冲突,请选择解决方式","@E80AC:接受当前版本":"接受当前版本","@E80AC:接受传入版本":"接受传入版本","@E80AC:接受两者":"接受两者","@E80AC:冲突已解决,文件已更新":"冲突已解决,文件已更新","@E80AC:解决冲突失败: ":"解决冲突失败: ","@E80AC:冲突解决进度":"冲突解决进度","@E80AC:请为每个冲突块选择解决方式":"请为每个冲突块选择解决方式","@E80AC:所有冲突块已解决,请点击下方保存按钮":"所有冲突块已解决,请点击下方保存按钮","@E80AC:冲突块":"冲突块","@E80AC:已解决":"已解决","@E80AC:当前更改":"当前更改","@E80AC:采用当前更改":"采用当前更改","@E80AC:冲突分隔符":"冲突分隔符","@E80AC:保留双方更改":"保留双方更改","@E80AC:传入的更改":"传入的更改","@E80AC:采用传入更改":"采用传入更改","@E80AC:将采用当前更改":"将采用当前更改","@E80AC:将采用传入更改":"将采用传入更改","@E80AC:将保留双方更改":"将保留双方更改","@E80AC:冲突块已标记为已解决":"冲突块已标记为已解决","@E80AC:操作失败: ":"操作失败: ","@E80AC:请先解决所有冲突块":"请先解决所有冲突块","@E80AC:保存所有解决方案":"保存所有解决方案","@E80AC:无法读取文件内容":"无法读取文件内容","@E80AC:保存失败":"保存失败","@E80AC:保存失败: ":"保存失败: ","@E80AC:最终内容":"最终内容","@E80AC:重新选择":"重新选择","@E80AC:逐块解决":"逐块解决","@E80AC:全局解决":"全局解决","@E80AC:合并结果":"合并结果","@E80AC:可直接编辑合并结果(整文件)":"可直接编辑合并结果(整文件)","@E80AC:保留双方":"保留双方","@E80AC:点击左右两侧的":"点击左右两侧的","@E80AC:或":"或","@E80AC:按钮":"按钮","@E80AC:选择要保留的内容":"选择要保留的内容","@E80AC:冲突已解决,可以添加到暂存区":"冲突已解决,可以添加到暂存区","@E80AC:添加到暂存区":"添加到暂存区","@34292:Git命令预览:":"Git命令预览:","@34292:复制命令":"复制命令","@34292:没有可复制的命令内容":"没有可复制的命令内容","@34292:命令已复制到剪贴板":"命令已复制到剪贴板","@34292:复制失败: ":"复制失败: ","@42BB9:Git 全局设置":"Git 全局设置","@42BB9:正在加载配置...":"正在加载配置...","@42BB9:用户名":"用户名","@42BB9:请输入 Git 用户名":"请输入 Git 用户名","@42BB9:邮箱地址":"邮箱地址","@42BB9:请输入 Git 邮箱地址":"请输入 Git 邮箱地址","@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。":"首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。","@42BB9:merge (默认)":"merge (默认)","@42BB9:rebase(保留合并)":"rebase(保留合并)","@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。":"在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。","@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。":"新建仓库时(git init)默认创建的分支名,常见为 main 或 master。","@42BB9:例如: main":"例如: main","@42BB9:已保存变更的 Git 配置":"已保存变更的 Git 配置","@42BB9:用户名和邮箱不能为空":"用户名和邮箱不能为空","@42BB9:没有需要保存的变更":"没有需要保存的变更","@42BB9:设置 ":"设置 ","@42BB9: 失败":" 失败","@42BB9:全局配置":"全局配置","@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效":"这些设置将影响全局 Git 配置,对所有 Git 仓库生效","@42BB9:高级配置":"高级配置","@42BB9:自动设置上游":"自动设置上游","@42BB9:拉取策略":"拉取策略","@42BB9:自动清理远程分支":"自动清理远程分支","@42BB9:换行符处理":"换行符处理","@42BB9:默认初始化分支":"默认初始化分支","@42BB9:取消":"取消","@42BB9:保存设置":"保存设置","@2AEBA:加载中...":"加载中...","@1D6A1:已取消":"已取消","@1D6A1:- 国际化测试":"- 国际化测试","@1D6A1:基础翻译测试":"基础翻译测试","@1D6A1:模块翻译":"模块翻译","@1D6A1:动态参数测试":"动态参数测试","@1D6A1:组件国际化":"组件国际化","@1D6A1:表单国际化":"表单国际化","@1D6A1:操作翻译":"操作翻译","@1D6A1:提交历史翻译":"提交历史翻译","@1D6A1:错误信息翻译":"错误信息翻译","@1D6A1:脚本中使用 t() 函数":"脚本中使用 t() 函数","@1D6A1:在 script 中使用: ":"在 script 中使用: ","@1D6A1:结果: ":"结果: ","@1D6A1:带参数: ":"带参数: ","@71545:操作成功!":"操作成功!","@60CAC:尚未设置默认提交信息":"尚未设置默认提交信息","@60CAC:模板":"模板","@60CAC:作用域":"作用域","@60CAC:输入新模板内容":"输入新模板内容","@60CAC:编辑模板内容":"编辑模板内容","@60CAC:暂无保存的模板":"暂无保存的模板","@60CAC:更新模板":"更新模板","@60CAC:添加模板":"添加模板","@60CAC:模板内容不能为空":"模板内容不能为空","@60CAC:模板保存失败: ":"模板保存失败: ","@60CAC:模板删除失败: ":"模板删除失败: ","@60CAC:置顶模板失败: ":"置顶模板失败: ","@60CAC:设置默认提交信息失败: ":"设置默认提交信息失败: ","@60CAC:取消":"取消","@60CAC:设为默认提交信息":"设为默认提交信息","@60CAC:已保存":"已保存","@60CAC:使用":"使用","@60CAC:编辑":"编辑","@60CAC:删除":"删除","@60CAC:已保存模板":"已保存模板","@60CAC:当前默认提交信息":"当前默认提交信息","@60CAC:关于默认提交信息":"关于默认提交信息","@60CAC:默认提交信息将在未输入提交信息时自动使用。":"默认提交信息将在未输入提交信息时自动使用。","@60CAC:你可以通过点击左侧模板的":"你可以通过点击左侧模板的","@60CAC:按钮先选择喜欢的模板,然后点击上方":"按钮先选择喜欢的模板,然后点击上方","@60CAC:按钮保存。":"按钮保存。","@F2A3A:加载中...":"加载中...","@B8591:操作成功!":"操作成功!","@D50BB:使用缓存的配置信息":"使用缓存的配置信息","@D50BB:加载配置信息...":"加载配置信息...","@D50BB:配置信息加载完成":"配置信息加载完成","@D50BB:默认提交信息已保存":"默认提交信息已保存","@D50BB:模板已保存":"模板已保存","@D50BB:模板已删除":"模板已删除","@D50BB:模板已更新":"模板已更新","@D50BB:模板已置顶":"模板已置顶","@D50BB:置顶模板失败: ":"置顶模板失败: ","@D50BB:加载配置失败: ":"加载配置失败: ","@D50BB:配置文件":"配置文件","@D50BB:已打开系统配置文件":"已打开系统配置文件","@D50BB:打开系统配置文件失败: ":"打开系统配置文件失败: ","@D50BB:保存失败: ":"保存失败: ","@D50BB:保存模板失败: ":"保存模板失败: ","@D50BB:删除模板失败: ":"删除模板失败: ","@D50BB:更新模板失败: ":"更新模板失败: ","@D50BB:加载锁定文件列表失败: ":"加载锁定文件列表失败: ","@D50BB:文件已锁定: ":"文件已锁定: ","@D50BB:锁定文件失败: ":"锁定文件失败: ","@D50BB:文件已解锁: ":"文件已解锁: ","@D50BB:解锁文件失败: ":"解锁文件失败: ","@CFGERR:系统配置文件有问题":"系统配置文件有问题","@CFGERR:查看原因":"查看原因","@CFGERR:打开系统配置文件":"打开系统配置文件","@C298B:开发环境:使用默认后端端口 3000":"开发环境:使用默认后端端口 3000","@C298B:使用缓存的分支状态":"使用缓存的分支状态","@C298B:获取分支状态...":"获取分支状态...","@C298B:无":"无","@C298B:不是":"不是","@C298B:是":"是","@C298B: (强制刷新)":" (强制刷新)","@C298B:获取所有分支...":"获取所有分支...","@C298B:分支名称不能为空":"分支名称不能为空","@C298B:已清除Git用户配置":"已清除Git用户配置","@C298B:已恢复Git用户配置":"已恢复Git用户配置","@C298B:当前目录不是Git仓库":"当前目录不是Git仓库","@C298B:拉取成功":"拉取成功","@C298B:存在冲突需要手动解决":"存在冲突需要手动解决","@C298B:获取所有远程分支信息成功":"获取所有远程分支信息成功","@C298B:Socket.IO客户端已创建,开始注册事件监听器...":"Socket.IO客户端已创建,开始注册事件监听器...","@C298B:正在更新 Git 文件状态...":"正在更新 Git 文件状态...","@C298B:已停止":"已停止","@C298B:Socket连接超时":"Socket连接超时","@C298B:重连后重新发送start_monitoring请求":"重连后重新发送start_monitoring请求","@C298B:Socket重连失败,已达到最大重试次数":"Socket重连失败,已达到最大重试次数","@C298B:Socket.IO事件监听器注册完成:connect, project_info, project_changed, git_status_update, monitoring_status":"Socket.IO事件监听器注册完成:connect, project_info, project_changed, git_status_update, monitoring_status","@C298B:Socket未连接,尝试手动连接...":"Socket未连接,尝试手动连接...","@C298B:无法连接到服务器,自动更新可能不会生效":"无法连接到服务器,自动更新可能不会生效","@C298B:尝试重新建立socket连接...":"尝试重新建立socket连接...","@C298B:发送start_monitoring命令...":"发送start_monitoring命令...","@C298B:自动更新已启用":"自动更新已启用","@C298B:发送stop_monitoring命令...":"发送stop_monitoring命令...","@C298B:自动更新已禁用":"自动更新已禁用","@C298B:当前目录不是Git仓库,跳过加载提交历史":"当前目录不是Git仓库,跳过加载提交历史","@C298B:开始加载提交历史...":"开始加载提交历史...","@C298B:刷新提交历史...":"刷新提交历史...","@C298B:提交历史刷新完成":"提交历史刷新完成","@C298B:当前目录不是Git仓库,跳过加载Git状态":"当前目录不是Git仓库,跳过加载Git状态","@C298B:开始获取Git状态(porcelain格式)...":"开始获取Git状态(porcelain格式)...","@C298B:没有需要暂存的文件(所有文件都被锁定)":"没有需要暂存的文件(所有文件都被锁定)","@C298B:文件已添加到暂存区":"文件已添加到暂存区","@C298B:所有文件已添加到暂存区":"所有文件已添加到暂存区","@C298B:文件已暂存":"文件已暂存","@C298B:已取消暂存文件":"已取消暂存文件","@C298B:提交成功":"提交成功","@C298B:请选择要合并的分支":"请选择要合并的分支","@C298B:不能合并当前分支到自身":"不能合并当前分支到自身","@C298B:合并分支时发生冲突,请手动解决":"合并分支时发生冲突,请手动解决","@C298B:开始暂存并提交操作...":"开始暂存并提交操作...","@C298B:暂存完成,等待Git操作完成...":"暂存完成,等待Git操作完成...","@C298B:开始提交更改...":"开始提交更改...","@C298B:暂存并提交操作完成":"暂存并提交操作完成","@C298B:开始暂存文件...":"开始暂存文件...","@C298B:提交完成,等待Git操作完成...":"提交完成,等待Git操作完成...","@C298B:开始推送到远程...":"开始推送到远程...","@C298B:一键推送操作完成,状态已统一刷新":"一键推送操作完成,状态已统一刷新","@C298B:检测到Git锁定文件冲突,已自动清理,请重试操作":"检测到Git锁定文件冲突,已自动清理,请重试操作","@C298B:已重置暂存区":"已重置暂存区","@C298B:获取远程仓库地址...":"获取远程仓库地址...","@C298B:没有可复制的远程仓库地址":"没有可复制的远程仓库地址","@C298B:已复制远程仓库地址":"已复制远程仓库地址","@C298B:应用stash时发生冲突,请手动解决":"应用stash时发生冲突,请手动解决","@C298B:开发环境:从环境变量读取后端端口 ":"开发环境:从环境变量读取后端端口 ","@C298B:生产环境:使用当前页面端口 ":"生产环境:使用当前页面端口 ","@C298B:分支状态更新:领先 ":"分支状态更新:领先 ","@C298B: 个提交,落后 ":" 个提交,落后 ","@C298B: 个提交,上游分支:":" 个提交,上游分支:","@C298B:当前目录":"当前目录","@C298B:Git仓库":"Git仓库","@C298B:当前分支更新为: ":"当前分支更新为: ","@C298B:获取到":"获取到","@C298B:个分支":"个分支","@C298B:已切换到分支: ":"已切换到分支: ","@C298B:切换分支失败: ":"切换分支失败: ","@C298B:已创建并切换到分支: ":"已创建并切换到分支: ","@C298B:创建分支失败: ":"创建分支失败: ","@C298B:清除配置失败: ":"清除配置失败: ","@C298B:恢复配置失败: ":"恢复配置失败: ","@C298B:需要合并更改: ":"需要合并更改: ","@C298B:拉取失败: ":"拉取失败: ","@C298B:获取远程分支信息失败: ":"获取远程分支信息失败: ","@C298B:当前项目: ":"当前项目: ","@C298B:房间ID: ":"房间ID: ","@C298B:项目已切换: ":"项目已切换: ","@C298B:已加入新项目房间: ":"已加入新项目房间: ","@C298B:忽略不同项目的状态更新: ":"忽略不同项目的状态更新: ","@C298B:Socket重连成功,尝试次数: ":"Socket重连成功,尝试次数: ","@C298B:Socket尝试重连,第 ":"Socket尝试重连,第 ","@C298B: 次尝试":" 次尝试","@C298B:切换自动更新失败: ":"切换自动更新失败: ","@C298B:提交历史加载完成,共 ":"提交历史加载完成,共 ","@C298B: 条记录":" 条记录","@C298B:获取提交历史失败: ":"获取提交历史失败: ","@C298B:获取Git状态失败: ":"获取Git状态失败: ","@C298B:获取Git状态(porcelain)失败: ":"获取Git状态(porcelain)失败: ","@C298B:添加文件失败: ":"添加文件失败: ","@C298B:已添加 ":"已添加 ","@C298B: 个文件到暂存区":" 个文件到暂存区","@C298B:,跳过 ":",跳过 ","@C298B: 个锁定文件":" 个锁定文件","@C298B:暂存文件失败: ":"暂存文件失败: ","@C298B:取消暂存失败: ":"取消暂存失败: ","@C298B:commitChanges 提交失败: ":"commitChanges 提交失败: ","@C298B:提交失败: ":"提交失败: ","@C298B:推送失败: ":"推送失败: ","@C298B:成功合并分支 ":"成功合并分支 ","@C298B: 到 ":" 到 ","@C298B:合并分支失败: ":"合并分支失败: ","@C298B:操作失败: ":"操作失败: ","@C298B:重置暂存区失败: ":"重置暂存区失败: ","@C298B:已重置分支 ":"已重置分支 ","@C298B: 到远程状态":" 到远程状态","@C298B:重置分支失败: ":"重置分支失败: ","@C298B:获取到远程仓库地址: ":"获取到远程仓库地址: ","@C298B:复制失败: ":"复制失败: ","@C298B:获取stash列表失败: ":"获取stash列表失败: ","@C298B:保存stash失败: ":"保存stash失败: ","@C298B:应用stash失败: ":"应用stash失败: ","@C298B:删除stash失败: ":"删除stash失败: ","@C298B:清空stash失败: ":"清空stash失败: ","@5C735:刚刚":"刚刚","@5C735:天前":"天前","@5C735:小时前":"小时前","@5C735:分钟前":"分钟前","@81F0F:查看Git命令历史":"查看Git命令历史","@81F0F:Git 命令历史":"Git 命令历史","@81F0F:只复制命令列表(不含输出)":"只复制命令列表(不含输出)","@81F0F:复制完整命令历史(含输出)":"复制完整命令历史(含输出)","@81F0F:清空命令历史":"清空命令历史","@81F0F:暂无命令历史":"暂无命令历史","@81F0F:复制命令":"复制命令","@81F0F:展开/收起":"展开/收起","@81F0F:复制输出":"复制输出","@81F0F:实时更新":"实时更新","@81F0F:未连接":"未连接","@81F0F:成功":"成功","@81F0F:失败":"失败","@81F0F:输出信息":"输出信息","@81F0F:错误输出":"错误输出","@81F0F:没有可复制的命令历史":"没有可复制的命令历史","@81F0F:命令历史已复制到剪贴板":"命令历史已复制到剪贴板","@81F0F:没有可复制的命令":"没有可复制的命令","@81F0F:命令列表已复制到剪贴板":"命令列表已复制到剪贴板","@81F0F:确定要清空所有命令历史记录吗?此操作不可恢复。":"确定要清空所有命令历史记录吗?此操作不可恢复。","@81F0F:确定":"确定","@81F0F:取消":"取消","@81F0F:命令历史已清空":"命令历史已清空","@81F0F:命令已复制到剪贴板":"命令已复制到剪贴板","@81F0F:输出已复制到剪贴板":"输出已复制到剪贴板","@81F0F:Socket实例不可用":"Socket实例不可用","@81F0F:已连接到实时命令历史":"已连接到实时命令历史","@81F0F:实时命令历史连接已断开":"实时命令历史连接已断开","@81F0F:尝试初始化Socket连接":"尝试初始化Socket连接","@81F0F:加载命令历史失败: ":"加载命令历史失败: ","@81F0F: (耗时: ":" (耗时: ","@81F0F:复制失败: ":"复制失败: ","@81F0F:清空命令历史失败: ":"清空命令历史失败: ","@81F0F:命令":"命令","@81F0F:全部":"全部","@81F0F:清空":"清空","@81F0F:加载命令历史...":"加载命令历史...","@81F0F:耗时: ":"耗时: ","@81F0F:标准输出":"标准输出","@81F0F:输出内容过长已被截断,请直接执行命令查看完整输出":"输出内容过长已被截断,请直接执行命令查看完整输出","@81F0F:内容过长已被截断,请直接执行命令查看完整输出":"内容过长已被截断,请直接执行命令查看完整输出","@81F0F:错误信息":"错误信息","@76872:Git用户信息未配置":"Git用户信息未配置","@76872:提交命令预览:":"提交命令预览:","@76872:提交类型":"提交类型","@76872:作用域(可选)":"作用域(可选)","@76872:正文(可选):详细描述本次提交的内容和原因":"正文(可选):详细描述本次提交的内容和原因","@76872:页脚(可选):如 Closes #123":"页脚(可选):如 Closes #123","@76872:Git 操作":"Git 操作","@76872:合并其他分支到当前分支":"合并其他分支到当前分支","@76872:将工作区更改储藏起来":"将工作区更改储藏起来","@76872:查看和管理所有储藏记录":"查看和管理所有储藏记录","@76872:编辑配置 JSON":"编辑配置 JSON","@76872:在此编辑当前项目配置的 JSON...":"在此编辑当前项目配置的 JSON...","@76872:配置文件格式提示":"配置文件格式提示","@76872:简短描述模板设置":"简短描述模板设置","@76872:输入新模板内容":"输入新模板内容","@76872:编辑模板内容":"编辑模板内容","@76872:暂无保存的模板":"暂无保存的模板","@76872:作用域模板设置":"作用域模板设置","@76872:输入新作用域模板":"输入新作用域模板","@76872:编辑作用域模板内容":"编辑作用域模板内容","@76872:暂无保存的作用域":"暂无保存的作用域","@76872:默认提交信息设置":"默认提交信息设置","@76872:储藏更改 (Git Stash)":"储藏更改 (Git Stash)","@76872:储藏":"储藏","@76872:取消":"取消","@76872:储藏说明":"储藏说明","@76872:为这次储藏添加描述信息(可选)":"为这次储藏添加描述信息(可选)","@76872:合并分支":"合并分支","@76872:合并分支到当前分支":"合并分支到当前分支","@76872:将选择的分支合并到":"将选择的分支合并到","@76872:分支类型":"分支类型","@76872:所有分支":"所有分支","@76872:本地分支":"本地分支","@76872:远程分支":"远程分支","@76872:选择分支":"选择分支","@76872:选择要合并的分支":"选择要合并的分支","@76872:合并命令预览:":"合并命令预览:","@76872:请先选择要合并的分支":"请先选择要合并的分支","@76872:合并选项":"合并选项","@76872:禁用快进合并":"禁用快进合并","@76872:始终创建合并提交,即使可以快进 (--no-ff)":"始终创建合并提交,即使可以快进 (--no-ff)","@76872:压缩合并":"压缩合并","@76872:将所有提交压缩成一个提交 (--squash)":"将所有提交压缩成一个提交 (--squash)","@76872:不自动提交":"不自动提交","@76872:执行合并但不自动提交,可以手动检查后提交 (--no-commit)":"执行合并但不自动提交,可以手动检查后提交 (--no-commit)","@76872:合并消息(可选)":"合并消息(可选)","@76872:自定义合并提交消息":"自定义合并提交消息","@76872:默认消息:":"默认消息:","@76872:复制":"复制","@76872:默认合并消息已复制":"默认合并消息已复制","@76872:复制失败":"复制失败","@76872:已自动填充合并提交信息":"已自动填充合并提交信息","@76872:合并":"合并","@76872:创建合并提交,即使可以使用快进合并":"创建合并提交,即使可以使用快进合并","@76872:将多个提交压缩为一个提交":"将多个提交压缩为一个提交","@76872:执行合并但不自动创建提交":"执行合并但不自动创建提交","@76872:合并提交信息 (可选)":"合并提交信息 (可选)","@76872:输入自定义合并提交信息":"输入自定义合并提交信息","@76872:储藏列表 (Git Stash)":"储藏列表 (Git Stash)","@76872:暂无储藏记录":"暂无储藏记录","@76872:储藏详情":"储藏详情","@76872:该stash没有变更文件":"该stash没有变更文件","@76872:提交设置":"提交设置","@76872:提交模式":"提交模式","@76872:选择传统或标准化提交格式":"选择传统或标准化提交格式","@76872:标准化":"标准化","@76872:普通":"普通","@76872:跳过钩子检查":"跳过钩子检查","@76872:添加 --no-verify 参数":"添加 --no-verify 参数","@76872:回车自动提交":"回车自动提交","@76872:输入提交信息后按回车直接执行一键推送":"输入提交信息后按回车直接执行一键推送","@76872:Push完成自动关闭":"Push完成自动关闭","@76872:推送成功后自动关闭进度弹窗":"推送成功后自动关闭进度弹窗","@76872:自动填充默认提交信息":"自动填充默认提交信息","@76872:打开页面或提交完成后自动填充默认提交信息":"打开页面或提交完成后自动填充默认提交信息","@76872:收起":"收起","@76872:正文及页脚":"正文及页脚","@76872:拉取":"拉取","@76872:个远程提交":"个远程提交","@76872:撤销":"撤销","@76872:个已暂存文件":"个已暂存文件","@76872:系统配置文件不存在,将使用默认配置。":"系统配置文件不存在,将使用默认配置。","@76872:加载配置失败":"加载配置失败","@76872:保存失败":"保存失败","@76872:配置已保存":"配置已保存","@76872:打开失败":"打开失败","@76872:已用系统程序打开配置文件":"已用系统程序打开配置文件","@76872:确定要删除此储藏吗?此操作不可恢复。":"确定要删除此储藏吗?此操作不可恢复。","@76872:删除储藏":"删除储藏","@76872:确定":"确定","@76872:确定要清空所有储藏吗?此操作不可恢复。":"确定要清空所有储藏吗?此操作不可恢复。","@76872:清空所有储藏":"清空所有储藏","@76872:无效的stash ID":"无效的stash ID","@76872:未知错误":"未知错误","@76872:没有变更内容":"没有变更内容","@76872:打开文件失败":"打开文件失败","@76872:用VSCode打开文件失败":"用VSCode打开文件失败","@76872:简短描述(必填)":"简短描述(必填)","@76872:简短描述(必填,按回车一键推送)":"简短描述(必填,按回车一键推送)","@76872:操作成功!":"操作成功!","@76872:已完成操作":"已完成操作","@76872:重置到远程分支":"重置到远程分支","@76872:正在暂存文件...":"正在暂存文件...","@76872:推送成功,状态已更新":"推送成功,状态已更新","@76872:默认提交信息设置成功":"默认提交信息设置成功","@76872:正在提交更改...":"正在提交更改...","@76872:正在推送...":"正在推送...","@76872:请选择要合并的分支":"请选择要合并的分支","@76872:系统配置文件格式有误:":"系统配置文件格式有误:","@76872:JSON 解析失败: ":"JSON 解析失败: ","@76872:保存配置失败: ":"保存配置失败: ","@76872:打开配置文件失败: ":"打开配置文件失败: ","@76872:获取文件列表失败: ":"获取文件列表失败: ","@76872:获取stash详情失败: ":"获取stash详情失败: ","@76872:获取差异失败: ":"获取差异失败: ","@76872:打开文件失败: ":"打开文件失败: ","@76872:用VSCode打开文件失败: ":"用VSCode打开文件失败: ","@76872:输入提交信息 (默认: ":"输入提交信息 (默认: ","@76872:(按回车一键推送)":"(按回车一键推送)","@76872:暂存并提交失败: ":"暂存并提交失败: ",'@76872:确定要重置当前分支 "':'确定要重置当前分支 "','@76872:" 到远程状态吗?这将丢失所有未推送的提交和本地更改。':'" 到远程状态吗?这将丢失所有未推送的提交和本地更改。',"@76872:重置到远程分支失败: ":"重置到远程分支失败: ","@76872:设置默认提交信息失败: ":"设置默认提交信息失败: ","@76872:提交更改":"提交更改","@76872:您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:":"您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:","@76872:基础操作":"基础操作","@76872:获取所有远程分支":"获取所有远程分支","@76872:组合操作":"组合操作","@76872:暂存并提交":"暂存并提交","@76872:重置操作":"重置操作","@76872:重置暂存区":"重置暂存区","@76872:重置到远程":"重置到远程","@76872:存在冲突文件,请先解决冲突":"存在冲突文件,请先解决冲突","@76872:分支操作":"分支操作","@76872:储藏操作":"储藏操作","@76872:储藏更改":"储藏更改","@76872:储藏列表":"储藏列表","@TAG01:标签操作":"标签操作","@TAG01:创建标签":"创建标签","@TAG01:标签列表":"标签列表","@TAG01:为当前提交创建标签":"为当前提交创建标签","@TAG01:查看和管理所有标签":"查看和管理所有标签","@TAG01:创建 Git 标签":"创建 Git 标签","@TAG01:创建":"创建","@TAG01:取消":"取消","@TAG01:Git 标签":"Git 标签","@TAG01:标签用于标记项目的重要版本点,如发布版本 v1.0.0":"标签用于标记项目的重要版本点,如发布版本 v1.0.0","@TAG01:标签名称":"标签名称","@TAG01:例如: v1.0.0 或 release-2024":"例如: v1.0.0 或 release-2024","@TAG01:建议使用语义化版本号,如 v1.0.0":"建议使用语义化版本号,如 v1.0.0","@TAG01:标签类型":"标签类型","@TAG01:轻量标签":"轻量标签","@TAG01:附注标签":"附注标签","@TAG01:轻量标签是指向提交对象的引用,不包含额外信息":"轻量标签是指向提交对象的引用,不包含额外信息","@TAG01:附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名":"附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名","@TAG01:标签说明":"标签说明","@TAG01:为此标签添加说明信息":"为此标签添加说明信息","@TAG01:目标提交(可选)":"目标提交(可选)","@TAG01:留空则为当前HEAD,或输入commit SHA":"留空则为当前HEAD,或输入commit SHA","@TAG01:默认为当前HEAD提交,也可以指定历史提交":"默认为当前HEAD提交,也可以指定历史提交","@TAG01:请输入标签名称":"请输入标签名称","@TAG01:标签名称只能包含字母、数字、点、下划线、斜杠和连字符":"标签名称只能包含字母、数字、点、下划线、斜杠和连字符","@TAG01:标签创建成功":"标签创建成功","@TAG01:创建标签失败":"创建标签失败","@TAG01:Git 标签列表":"Git 标签列表","@TAG01:个标签":"个标签","@TAG01:刷新":"刷新","@TAG01:推送所有标签":"推送所有标签","@TAG01:暂无标签":"暂无标签","@TAG01:还没有创建任何标签":"还没有创建任何标签","@TAG01:使用创建标签功能为项目添加版本标记":"使用创建标签功能为项目添加版本标记","@TAG01:附注":"附注","@TAG01:轻量":"轻量","@TAG01:查看":"查看","@TAG01:推送":"推送","@TAG01:删除":"删除","@TAG01:确定要推送此标签到远程仓库吗?":"确定要推送此标签到远程仓库吗?","@TAG01:推送标签":"推送标签","@TAG01:确定要推送所有标签到远程仓库吗?":"确定要推送所有标签到远程仓库吗?","@TAG01:标签推送成功":"标签推送成功","@TAG01:推送标签失败":"推送标签失败","@TAG01:所有标签推送成功":"所有标签推送成功","@TAG01:确定要删除此标签吗?此操作不可恢复。":"确定要删除此标签吗?此操作不可恢复。","@TAG01:删除标签":"删除标签","@TAG01:标签删除成功":"标签删除成功","@TAG01:删除标签失败":"删除标签失败","@TAG01:获取标签列表失败":"获取标签列表失败","@TAG01:标签详情":"标签详情","@TAG01:标签名称:":"标签名称:","@TAG01:提交SHA:":"提交SHA:","@TAG01:创建时间:":"创建时间:","@TAG01:类型:":"类型:","@TAG01:标签说明:":"标签说明:","@76872:编辑当前项目的配置文件":"编辑当前项目的配置文件","@76872:支持JSON格式":"支持JSON格式","@76872:打开系统配置文件":"打开系统配置文件","@76872:保存配置":"保存配置","@76872:继续编辑":"继续编辑","@76872:储藏工作区更改":"储藏工作区更改","@76872:将当前工作区的更改临时保存,稍后可以重新应用到任何分支":"将当前工作区的更改临时保存,稍后可以重新应用到任何分支","@76872:储藏选项":"储藏选项","@76872:包含未跟踪文件":"包含未跟踪文件","@76872:同时储藏新建但未添加到Git的文件 (--include-untracked)":"同时储藏新建但未添加到Git的文件 (--include-untracked)","@76872:排除锁定文件":"排除锁定文件","@76872:不储藏被锁定的文件,保持其当前状态":"不储藏被锁定的文件,保持其当前状态","@76872:将要储藏的文件":"将要储藏的文件","@76872:已暂存: ":"已暂存: ","@76872:个文件":"个文件","@76872:未暂存: ":"未暂存: ","@76872:选择要合并到当前分支 (":"选择要合并到当前分支 (","@76872:) 的分支:":") 的分支:","@76872:所有分支":"所有分支","@76872:本地分支":"本地分支","@76872:远程分支":"远程分支","@76872:禁用快进合并 (--no-ff)":"禁用快进合并 (--no-ff)","@76872:压缩提交 (--squash)":"压缩提交 (--squash)","@76872:不自动提交 (--no-commit)":"不自动提交 (--no-commit)","@76872:合并":"合并","@76872:个储藏":"个储藏","@76872:还没有任何储藏记录":"还没有任何储藏记录","@76872:使用 git stash 可以临时保存工作进度":"使用 git stash 可以临时保存工作进度","@76872:最新":"最新","@76872:查看":"查看","@76872:应用":"应用","@76872:应用并删除":"应用并删除","@76872:删除":"删除","@76872:描述:":"描述:","@76872:更新状态中...":"更新状态中...","@76872:新功能":"新功能","@76872:修复bug":"修复bug","@76872:文档修改":"文档修改","@76872:样式修改":"样式修改","@76872:代码重构":"代码重构","@76872:测试代码":"测试代码","@76872:构建/工具修改":"构建/工具修改","@76872:请先选择要储藏的文件":"请先选择要储藏的文件","@76872:储藏选中的文件":"储藏选中的文件","@76872:储藏选中文件":"储藏选中文件","@76872:储藏":"储藏","@76872:取消":"取消","@76872:将选中的文件更改临时保存,稍后可以重新应用":"将选中的文件更改临时保存,稍后可以重新应用","@76872:储藏说明":"储藏说明","@76872:为这次储藏添加描述信息(可选)":"为这次储藏添加描述信息(可选)","@76872:储藏选项":"储藏选项","@76872:包含未跟踪文件":"包含未跟踪文件","@76872:对于未跟踪的文件,同时储藏 (--include-untracked)":"对于未跟踪的文件,同时储藏 (--include-untracked)","@76872:将要储藏的文件":"将要储藏的文件","@76872:已选中: ":"已选中: ","@76872:个文件":"个文件","@76872:...还有":"...还有","@76872:排除锁定文件":"排除锁定文件","@76872:不储藏被锁定的文件,保持其当前状态":"不储藏被锁定的文件,保持其当前状态","@76872:选中":"选中","@76872:个锁定文件":"个锁定文件","@76872:所有选中的文件都是锁定文件,无法储藏":"所有选中的文件都是锁定文件,无法储藏","@13D1C:Git Pull (拉取远程更新)":"Git Pull (拉取远程更新)","@13D1C:Git Fetch All (获取所有远程分支)":"Git Fetch All (获取所有远程分支)","@13D1C:管理锁定文件":"管理锁定文件","@13D1C:刷新状态":"刷新状态","@13D1C:本地分支与远程分支的状态对比":"本地分支与远程分支的状态对比","@13D1C:冲突文件":"冲突文件","@13D1C:已暂存的更改":"已暂存的更改","@13D1C:未暂存的更改":"未暂存的更改","@13D1C:未跟踪的文件":"未跟踪的文件","@13D1C:文件差异":"文件差异","@13D1C:仅显示差异":"仅显示差异","@13D1C:显示完整对比":"显示完整对比","@13D1C:选择文件查看差异":"选择文件查看差异","@13D1C:锁定文件管理":"锁定文件管理","@13D1C:这些文件在提交时会被自动跳过":"这些文件在提交时会被自动跳过","@13D1C:解锁文件":"解锁文件","@13D1C:解锁":"解锁","@13D1C:自动更新文件状态":"自动更新文件状态","@13D1C:正在拉取代码...":"正在拉取代码...","@13D1C:正在获取远程分支信息...":"正在获取远程分支信息...","@13D1C:加载中...":"加载中...","@13D1C:打开文件失败":"打开文件失败","@13D1C:用VSCode打开文件失败":"用VSCode打开文件失败","@13D1C:未知目录":"未知目录","@13D1C:Git 状态已刷新":"Git 状态已刷新","@13D1C:确认解锁":"确认解锁","@13D1C:取消":"取消","@13D1C:清空全部锁定":"清空全部锁定","@13D1C:全部解锁":"全部解锁","@13D1C:已清空所有文件锁定":"已清空所有文件锁定","@13D1C:没有变更":"没有变更","@13D1C:目录浏览功能未启用":"目录浏览功能未启用","@13D1C:获取目录内容失败":"获取目录内容失败","@13D1C:目录路径不能为空":"目录路径不能为空","@13D1C:已切换工作目录":"已切换工作目录","@13D1C:当前目录不是一个Git仓库":"当前目录不是一个Git仓库","@13D1C:切换目录失败":"切换目录失败","@13D1C:未知当前分支":"未知当前分支","@13D1C:已推送并设置上游分支":"已推送并设置上游分支","@13D1C:设置上游失败":"设置上游失败","@13D1C:撤回修改":"撤回修改","@13D1C:确定":"确定","@13D1C:已撤回文件修改":"已撤回文件修改","@13D1C:撤回文件修改失败,请重试":"撤回文件修改失败,请重试","@13D1C:未知错误":"未知错误","@13D1C:打开文件失败: ":"打开文件失败: ","@13D1C:用VSCode打开文件失败: ":"用VSCode打开文件失败: ","@13D1C:确认解锁所有已锁定文件?共 ":"确认解锁所有已锁定文件?共 ","@13D1C: 个。":" 个。","@13D1C:新文件: ":"新文件: ","@13D1C:获取目录内容失败: ":"获取目录内容失败: ","@13D1C:切换目录失败: ":"切换目录失败: ","@13D1C:设置上游失败: ":"设置上游失败: ",'@13D1C:确定要撤回文件 "':'确定要撤回文件 "','@13D1C:" 的所有修改吗?此操作无法撤销。':'" 的所有修改吗?此操作无法撤销。',"@13D1C:撤回失败: ":"撤回失败: ","@13D1C:撤回文件修改失败: ":"撤回文件修改失败: ","@13D1C:自动更新状态变更: ":"自动更新状态变更: ","@13D1C:状态":"状态","@13D1C:当前目录不是Git仓库":"当前目录不是Git仓库","@13D1C:当前分支未设置上游分支":"当前分支未设置上游分支","@13D1C:首次推送后即可建立与远程的跟踪关系,后续可直接 pull/push。":"首次推送后即可建立与远程的跟踪关系,后续可直接 pull/push。","@13D1C:设置上游并推送":"设置上游并推送","@13D1C:个提交":"个提交","@13D1C:没有检测到任何更改":"没有检测到任何更改","@13D1C:工作区是干净的":"工作区是干净的","@13D1C:文件锁定功能说明":"文件锁定功能说明","@13D1C:锁定的文件在执行 Git 提交时会被自动跳过,不会被添加到暂存区":"锁定的文件在本系统内执行提交时会被自动跳过,不会被添加到暂存区(手动执行 git 命令不受影响)","@13D1C:当前没有锁定的文件":"当前没有锁定的文件","@13D1C:您可以在文件列表中点击锁定按钮来锁定文件":"您可以在文件列表中点击锁定按钮来锁定文件","@13D1C:个文件":"个文件","@13D1C:文件列表":"文件列表","@13D1C:已选中":"已选中","@13D1C:全选":"全选","@13D1C:取消全选":"取消全选","@13D1C:退出选择模式":"退出选择模式","@13D1C:选择文件进行储藏":"选择文件进行储藏","@A1833:选择作者":"选择作者","@A1833:选择分支":"选择分支","@A1833:提交信息关键词":"提交信息关键词","@A1833:至":"至","@A1833:开始日期":"开始日期","@A1833:结束日期":"结束日期","@A1833:哈希":"哈希","@A1833:提交信息":"提交信息","@A1833:复制纯净提交信息(不含类型前缀)":"复制纯净提交信息(不含类型前缀)","@A1833:日期":"日期","@A1833:作者":"作者","@A1833:没有找到变更文件":"没有找到变更文件","@A1833:加载中...":"加载中...","@A1833:没有匹配的提交记录":"没有匹配的提交记录","@A1833:未知":"未知","@A1833:提交详情: ":"提交详情: ","@A1833:仅显示差异":"仅显示差异","@A1833:显示完整对比":"显示完整对比","@A1833:打开文件失败":"打开文件失败","@A1833:用VSCode打开文件失败":"用VSCode打开文件失败","@A1833:提交信息已复制到剪贴板":"提交信息已复制到剪贴板","@A1833:复制失败":"复制失败","@A1833:获取文件列表失败: ":"获取文件列表失败: ","@A1833:获取提交详情失败: ":"获取提交详情失败: ","@A1833:获取差异失败: ":"获取差异失败: ","@A1833:打开文件失败: ":"打开文件失败: ","@A1833:用VSCode打开文件失败: ":"用VSCode打开文件失败: ","@A1833:确定要撤销提交 ":"确定要撤销提交 ","@A1833: 吗?这将创建一个新的提交来撤销这次提交的更改。":" 吗?这将创建一个新的提交来撤销这次提交的更改。","@A1833:确定要将提交 ":"确定要将提交 ","@A1833: Cherry-Pick 到当前分支吗?":" Cherry-Pick 到当前分支吗?","@A1833:已复制提交哈希: ":"已复制提交哈希: ","@A1833:复制提交哈希失败: ":"复制提交哈希失败: ","@A1833:确定要将当前分支重置(hard)到提交 ":"确定要将当前分支重置(hard)到提交 ","@A1833:提交历史":"提交历史","@A1833:分支":"分支","@A1833:信息":"信息","@A1833:应用":"搜索","@A1833:重置":"重置","@A1833:查看详情":"查看详情","@A1833:复制提交哈希":"复制提交哈希","@A1833:重置到该提交(hard)":"重置到该提交(hard)","@A1833:撤销提交 (Revert)":"撤销提交 (Revert)","@A1833:-Pick 到当前分支":"-Pick 到当前分支","@A1833:隐藏筛选":"隐藏筛选","@A1833:显示筛选":"显示筛选","@A1833:退出全屏":"退出全屏","@A1833:全屏显示":"全屏显示","@A1833:刷新日志":"刷新日志","@PSTART:项目启动项":"项目启动项","@PSTART:启动项列表":"启动项列表","@PSTART:有N项已失效":"有 {count} 项已失效","@PSTART:刷新页面自动执行":"启动时自动执行","@PSTART:清理失效启动项":"清理失效启动项","@PSTART:清理":"清理","@PSTART:暂无启动项":"暂无启动项","@PSTART:工作流":"工作流","@PSTART:命令":"命令","@PSTART:目录":"目录","@PSTART:步骤":"步骤","@PSTART:删除":"删除","@PSTART:添加启动项":"添加启动项","@PSTART:选择一个工作流":"选择一个工作流","@PSTART:选择一个自定义命令":"选择一个自定义命令","@PSTART:添加":"添加","@PSTART:请选择一个工作流":"请选择一个工作流","@PSTART:请选择一个命令":"请选择一个命令","@PSTART:该启动项已存在":"该启动项已存在","@PSTART:已添加启动项":"已添加启动项","@PSTART:已删除启动项":"已删除启动项","@PSTART:删除确认":"确定要删除此启动项吗?","@PSTART:删除启动项":"删除启动项","@PSTART:取消":"取消","@PSTART:已清理N个失效启动项":"已清理 {count} 个失效启动项","@PSTART:没有需要清理的启动项":"没有需要清理的启动项","@PSTART:执行":"执行","@PSTART:命令不存在":"命令不存在","@PSTART:工作流不存在":"工作流不存在","@PSTART:已触发命令执行":"已触发命令执行","@PSTART:已触发工作流执行":"已触发工作流执行","@ORCH:可视化编排":"可视化编排","@ORCH:可视化编排工作台":"可视化编排工作台","@ORCH:已保存的编排":"已保存的编排","@ORCH:新建编排":"新建编排","@ORCH:暂无编排":"暂无编排","@ORCH:执行":"执行","@ORCH:删除":"删除","@ORCH:复制":"复制","@ORCH:已复制":"已复制","@ORCH:未命名":"未命名","@ORCH:编排名称(必填)":"编排名称(必填)","@ORCH:编排描述(选填)":"编排描述(选填)","@ORCH:保存编排":"保存编排","@ORCH:节点工具箱":"节点工具箱","@ORCH:命令节点":"命令节点","@ORCH:执行自定义命令":"执行自定义命令","@ORCH:等待节点":"等待节点","@ORCH:暂停指定时间":"暂停指定时间","@ORCH:版本管理":"版本管理","@ORCH:修改版本号或依赖":"修改版本号或依赖","@ORCH:执行自定义代码":"执行自定义代码","@ORCH:用户确认":"用户确认","@ORCH:等待用户确认后继续":"等待用户确认后继续","@CMDCON:终端会话":"终端会话","@CMDCON:暂无终端会话":"暂无终端会话","@CMDCON:显示终端会话":"显示终端会话 ({count})","@CMDCON:刷新":"刷新","@CMDCON:隐藏":"隐藏","@CMDCON:重新启动":"重新启动","@CMDCON:删除":"删除","@CMDCON:在新终端执行":"在新终端执行","@CMDCON:交互式模式":"交互式模式: 支持需要输入的命令","@PUSH:正在推送":"正在推送...","@PUSH:推送成功":"推送成功","@PUSH:推送失败":"推送失败","@PUSH:计数对象":"计数对象","@PUSH:压缩对象":"压缩对象","@PUSH:写入对象":"写入对象","@PUSH:解析增量":"解析增量","@PUSH:详细信息":"详细信息","@PUSH:错误详情":"错误详情","@PUSH:先拉取更新":"先拉取更新","@PUSH:检测到远程有新提交,请先拉取更新后再推送。":"检测到远程有新提交,请先拉取更新后再推送。","@13D1C:你的分支领先":"你的分支领先 '{branch}' {count} 个提交","@13D1C:你的分支落后":"你的分支落后 '{branch}' {count} 个提交"},Pn={"@F13B4:编辑项目配置":"Edit project configuration","@F13B4:国际化测试":"Internationalization testing","@F13B4:Git 操作":"Git operation","@F13B4:用户设置":"User Settings","@F13B4:创建新分支":"Create a new branch","@F13B4:请输入新分支名称":"Please enter the new branch name","@F13B4:选择基础分支":"Select the basic branch","@F13B4:当前分支":"Current branch","@F13B4:复制仓库地址":"Copy repository URL","@F13B4:复制克隆命令":"Copy clone command","@F13B4:已复制克隆命令":"Clone command copied","@F13B4:切换到浅色主题":"Switch to light theme","@F13B4:切换到深色主题":"Switch to dark theme","@F13B4:未知目录":"Unknown directory","@F13B4:---------- 页面初始化开始 ----------":"----------Page initialization begins----------","@F13B4:当前目录不是Git仓库,部分功能将不可用":"The current directory is not a Git repository, some features will be unavailable","@F13B4:---------- 页面初始化完成 ----------":"----------Page initialization completed----------","@F13B4:默认提交信息: ":"Default commit message: ","@F13B4:布局比例已保存 - 左侧: ":"Layout ratio saved - Left: ","@F13B4:%, 上方: ":"%, Top: ","@F13B4:底部布局比例已保存 - 左侧: ":"Bottom layout ratio saved - Left: ","@F13B4:已恢复左侧比例: ":"Left aspect ratio restored:","@F13B4:已恢复上方比例: ":"The proportion above has been restored:","@F13B4:用户: ":"User:","@F13B4:未配置":"Not configured","@F13B4:关闭测试":"Close testing","@F13B4:加载中...":"Loading...","@F13B4:用户未配置":"User not configured","@F13B4:请先配置Git用户信息才能进行提交操作。":"Please configure Git user information before performing the commit operation.","@F13B4:您可以通过以下方式配置:":"You can configure it in the following ways:","@F13B4:点击右上角的设置按钮,配置用户名和邮箱":"Click the settings button in the upper right corner to configure the username and email","@F13B4:或者使用命令行配置:":"Or use the command line to configure:",'@F13B4:--global user.name "您的用户名"':'--Globaluser.name "Your username"','@F13B4:--global user.email "您的邮箱"':'--Globaluser.email "Your email"',"@F13B4:立即配置":"Configure now","@F13B4:仓库初始化":"Repository initialization","@F13B4:当前目录不是Git仓库,请先初始化Git仓库或切换到Git仓库目录。":"The current directory is not a Git repository. Please initialize the Git repository or switch to the Git repository directory first.","@F13B4:可以使用以下命令初始化仓库:":"You can use the following command to initialize the repository:","@F13B4:新分支名称":"New branch name","@F13B4:基于分支":"Based on branches","@F13B4:取消":"Cancel","@F13B4:创建":"Create","@F13B4:远程仓库:":"Remote repository:","@76A11:没有已暂存的更改":"There are no staged changes","@76A11:请输入提交信息":"Please enter the commit information","@76A11:提交":"Commit","@76A11:个已暂存文件":"A staged file","@76A11:存在冲突文件,请先解决冲突":"Conflicted files exist, please resolve conflicts first","@F4137:当前分支没有上游分支":"There is no upstream branch in the current branch","@F4137:没有需要推送的提交":"There are no commits that need to be pushed","@F4137:有未提交的暂存更改,请先提交":"There are pending temporary changes that have not been submitted. Please submit them first","@F4137:推送":"Push","@F4137:个本地提交":"Local commit","@F4137:存在冲突文件,请先解决冲突":"Conflicted files exist, please resolve conflicts first","@2E184:一键推送所有":"One click push to all","@2E184:暂存 + 提交 + 推送":"Stage + Commit + Push","@2E184:存在冲突文件,请先解决冲突":"Conflicted files exist, please resolve conflicts first","@2E184:没有需要提交的更改":"No changes to commit","@2E184:请输入提交信息":"Please enter commit message","@2E184:当前分支没有上游分支":"Current branch has no upstream branch","@2E184:没有需要提交或推送的更改":"No changes to commit or push","@2E184:本地已提交,一键推送到远程仓库":"Local changes committed, push to remote","@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库":"One-click: Stage all changes → Commit → Push to remote","@PSTART:一键推送成功后执行":"Run after one-click push succeeds","@PSTART:启用":"Enable","@PSTART:仅在一键推送成功后触发,不影响主流程":"Only triggers after one-click push succeeds and does not affect the main flow","@29974:没有需要暂存的更改":"There are no changes that need to be staged","@29974:暂存":"Stage","@29974:个未暂存文件(逐个添加)":"Unstaged files (added one by one)","@29974:暂存所有更改(git add .)":"Stage all changes (git add .)","@29974:暂存更改":"Stage changes","@CF05E:当前路径":"Current path","@CF05E:退出全屏":"Exit fullscreen","@CF05E:全屏显示":"Full screen display","@CF05E:收起":"Fold up","@CF05E:展开":"Expand","@CF05E:收起输出":"Retract output","@CF05E:展开输出":"Expand output","@CF05E:无输出内容":"No output content","@CF05E:自定义指令执行":"Custom instruction execution","@CF05E:执行":"Execute","@CF05E:使用终端执行":"Execute in Terminal","@CF05E:开启":"On","@CF05E:关闭":"Off","@CF05E:自定义命令管理":"Custom Command Manager","@CF05E:指令编排":"Command Orchestration","@CF05E:全屏":"Fullscreen","@CF05E:收起控制台":"Collapse Console","@CF05E:展开控制台":"Expand Console","@FLOWNODE:条件":"Condition","@ORCH:条件分支":"Conditional branching","@COND:条件配置":"Condition Config","@COND:分支列表":"Branches","@COND:添加分支":"Add branch","@COND:默认分支":"Default branch","@COND:分支名称":"Branch name","@COND:优先级":"Priority","@COND:规则组合":"Combine","@COND:且(ALL)":"ALL","@COND:或(ANY)":"ANY","@COND:规则":"Rules","@COND:添加规则":"Add rule","@COND:左值(引用输出)":"Left (output ref)","@COND:操作符":"Operator","@COND:右值":"Right","@COND:删除分支":"Delete branch","@COND:删除规则":"Delete rule","@COND:请至少保留一个默认分支":"At least one default branch is required","@COND:默认分支必须使用handleId=default":"Default branch must use handleId=default","@NODEINPUT:必填":"Required","@NODECFG:必填参数未选择引用输出":'Required parameter "{name}" has no output reference selected',"@NODECFG:请输入必填参数的值":'Please enter a value for required parameter "{name}"',"@CMD01:命令名称不能为空":"Command name cannot be empty","@CMD01:命令内容不能为空":"Command content cannot be empty","@CMD01:命令已保存":"Command saved","@CMD01:保存命令失败: ":"Failed to save command: ","@CMD01:命令已删除":"Command deleted","@CMD01:删除命令失败: ":"Failed to delete command: ","@CMD01:命令已更新":"Command updated","@CMD01:更新命令失败: ":"Failed to update command: ","@CMD01:命令保存失败: ":"Failed to save command: ","@CMD01:确定要删除这个自定义命令吗?":"Are you sure you want to delete this custom command?","@CMD01:删除确认":"Delete Confirmation","@CMD01:确定":"Confirm","@CMD01:取消":"Cancel","@CMD01:自定义命令管理":"Custom Command Manager","@CMD01:命令名称":"Command Name","@CMD01:输入命令名称,例如: 拉取代码":"Enter command name, e.g.: Pull Code","@CMD01:描述":"Description","@CMD01:可选,简要描述命令用途":"Optional, briefly describe command purpose","@CMD01:执行目录":"Execution Directory","@CMD01:留空使用当前目录":"Leave blank to use current directory","@CMD01:确定":"OK","@CMD01:命令":"Command","@CMD01:输入要执行的命令,例如: npm run build":"Enter command to execute, e.g.: npm run build","@CMD01:更新命令":"Update Command","@CMD01:添加命令":"Add Command","@CMD01:已保存的命令":"Saved Commands","@CMD01:暂无保存的命令":"No saved commands yet","@CMD01:当前目录":"Current Directory","@CMD01:使用当前目录":"Use Current Directory","@CMD01:操作":"Actions","@CMD01:执行命令":"Execute Command","@CMD01:编辑":"Edit","@CMD01:复制命令":"Duplicate Command","@CMD01:删除":"Delete","@CMD01:选择目录":"Browse","@CMD01:浏览目录失败: ":"Failed to browse directory: ","@CMD01:浏览并选择目录":"Browse and Select Directory","@CMD01:当前路径: ":"Current path: ","@CMD01:返回上级目录":"Go to parent directory","@CMD01:处理目录选择时出错: ":"Error handling directory selection: ","@CMD01:命令模板":"Command templates","@CMD01:命令模板管理":"Command Template Manager","@CMD01:输入命令模板,例如: npm run build":"Enter a command template, e.g.: npm run build","@CMD01:编辑命令模板":"Edit command template","@CMD01:暂无保存的命令模板":"No saved command templates yet","@CMD01:执行参数":"Execution parameters","@CMD01:请输入变量值":"Please enter a value for {var}","@CMD01:变量配置":"Variables","@CMD01:变量名":"Variable","@CMD01:默认值":"Default value","@CMD01:必填":"Required","@CMD01:请输入必填变量: ":"Please enter required variable: {var}","@CMD02:指令编排":"Command Orchestration","@CMD02:可用命令":"Available Commands","@CMD02:暂无可用命令,请先创建命令":"No available commands, please create commands first","@CMD02:添加":"Add","@CMD02:执行顺序":"Execution Order","@CMD02:清空":"Clear","@CMD02:请从左侧选择要执行的命令":"Please select commands to execute from the left","@CMD02:移除":"Remove","@CMD02:开始执行":"Start Execution","@CMD02:个命令":"command(s)","@ORCH:编排已保存":"Orchestration saved","@ORCH:保存编排失败: ":"Failed to save orchestration: ","@ORCH:编排已删除":"Orchestration deleted","@ORCH:删除编排失败: ":"Failed to delete orchestration: ","@ORCH:编排已更新":"Orchestration updated","@ORCH:更新编排失败: ":"Failed to update orchestration: ","@ORCHWS:编排工作台":"Orchestration Workspace","@ORCHWS:已保存的编排":"Saved Orchestrations","@ORCHWS:新建":"New","@ORCHWS:暂无编排":"No orchestrations","@ORCHWS:执行":"Execute","@ORCHWS:删除":"Delete","@ORCHWS:编辑编排":"Edit Orchestration","@ORCHWS:新建编排":"New Orchestration","@ORCHWS:保存":"Save","@ORCHWS:保存编排":"Save Orchestration","@ORCHWS:执行编排":"Execute Orchestration","@ORCHWS:编排名称(必填)":"Orchestration name (required)","@ORCHWS:编排描述(选填)":"Description (optional)","@ORCHWS:执行步骤":"Execution Steps","@ORCHWS:添加步骤":"Add Step","@ORCHWS:清空所有步骤":"Clear All Steps","@ORCHWS:步骤":"steps","@ORCHWS:请添加执行步骤":"Please add execution steps","@ORCHWS:启用":"Enabled","@ORCHWS:终端执行":"Terminal execution","@ORCHWS:普通执行":"Normal execution","@ORCHWS:置顶":"Pin to top","@ORCHWS:移动到顶部":"Move to top","@ORCHWS:上移":"Move up","@ORCHWS:下移":"Move down","@ORCHWS:置底":"Pin to bottom","@ORCHWS:移动到底部":"Move to bottom","@ORCHWS:移除":"Remove","@ORCHWS:可用命令":"Available Commands","@ORCHWS:暂无可用命令":"No available commands","@ORCHWS:等待时长(秒)":"Wait duration (seconds)","@ORCHWS:版本号修改":"Version Modification","@ORCHWS:修改目标":"Modification target","@ORCHWS:package.json版本号":"package.json version","@ORCHWS:依赖包版本号":"Dependency version","@ORCHWS:版本递增":"Version bump","@ORCHWS:主版本":"Major","@ORCHWS:次版本":"Minor","@ORCHWS:补丁版本":"Patch","@ORCHWS:依赖包名称":"Dependency name","@ORCHWS:请输入依赖包名称":"Please enter dependency name","@ORCHWS:依赖类型":"Dependency type","@ORCHWS:生产依赖":"Dependencies","@ORCHWS:开发依赖":"Dev Dependencies","@ORCHWS:版本号设置":"Version setting","@ORCHWS:自动递增":"Auto increment","@ORCHWS:手动输入":"Manual input","@ORCHWS:请输入版本号":"Please enter version","@ORCHWS:添加":"Add","@ORCHWS:确认删除":"Confirm deletion","@ORCHWS:取消":"Cancel","@ORCHWS:确定要删除编排":'Are you sure to delete orchestration "{name}"?',"@ORCHWS:请输入编排名称":"Please enter orchestration name","@ORCHWS:请至少添加一个步骤":"Please add at least one step","@ORCHWS:请选择依赖包名称":"Please select dependency name","@ORCHWS:请输入依赖包版本号":"Please enter dependency version","@ORCHWS:未知命令":"Unknown command","@ORCHWS:等待 {seconds} 秒":"Wait {seconds} seconds","@ORCHWS:主版本号":"Major","@ORCHWS:次版本号":"Minor","@ORCHWS:补丁版本号":"Patch","@ORCHWS:修改依赖":"Modify [{depType}] {depName} version+1 ({bumpText})","@ORCHWS:修改依赖手动":"Modify [{depType}] {depName} → {version}","@ORCHWS:版本号+1":"Version+1 ({bumpText})","@ORCHWS:未知步骤":"Unknown step","@ORCHWS:命令已删除":"Command deleted","@ORCHWS:暂停执行":"Pause execution {seconds} seconds","@ORCHWS:已禁用":"[Disabled] ","@ORCHWS:终端":"[Terminal] ","@ORCHWS:从此处开始执行":"Execute from here","@ORCHWS:版本号来源":"Version source","@ORCHWS:引用输出":"Reference output","@ORCHWS:无可用的前置命令节点":"No available predecessor command nodes","@ORCHWS:引用节点":"Reference node","@ORCHWS:选择要引用的前置节点":"Select predecessor node to reference","@ORCHWS:输出字段":"Output field","@ORCHWS:选择要引用的输出字段":"Select output field to reference","@ORCHWS:版本号将使用所选节点的输出结果":"Version will use the output of selected node","@ORCHWS:请选择要引用的节点输出":"Please select node output to reference","@ORCHWS:输出键名":"Output key","@ORCHWS:可选输出键名提示":"Optional, for other nodes to reference this output","@ORCHWS:设置后其他节点可以引用此命令的输出结果":"Once set, other nodes can reference this command's output","@ORCHWS:标准输出":"Standard output (stdout)","@ORCHWS:提取的版本号":"Extracted version","@NODECFG:节点配置":"Node Configuration","@NODECFG:通用设置":"General","@NODECFG:节点名称":"Node name","@NODECFG:请输入节点名称":"Please enter node name","@NODECFG:启用节点":"Enable node","@NODECFG:执行方式":"Execution mode","@NODECFG:普通执行":"Normal","@NODECFG:终端执行":"Terminal","@NODECFG:终端选项":"Terminal options","@NODECFG:重启现存终端命令":"Restart existing terminal command","@NODECFG:输出配置":"Output configuration","@NODECFG:参数名":"Parameter name","@NODECFG:参数描述":"Parameter description","@NODECFG:运行时生成":"Generated at runtime","@NODECFG:添加输出参数":"Add output parameter","@NODECFG:输入配置":"Input configuration","@NODECFG:命令配置":"Command configuration","@NODECFG:选择命令":"Select command","@NODECFG:暂无可用命令请先创建命令":"No available commands, please create one first","@NODECFG:当前目录":"Current directory","@NODECFG:等待配置":"Wait configuration","@NODECFG:管理命令":"Manage Commands","@NODECFG:等待时间":"Wait time","@NODECFG:秒":"Seconds","@NODECFG:代码配置":"Code configuration","@NODECFG:输入":"Input","@NODECFG:代码":"Code","@NODECFG:输出":"Output","@NODECFG:参数值":"Parameter value","@NODECFG:引用":"Reference","@NODECFG:手动":"Manual","@NODECFG:请输入":"Please enter","@NODECFG:值":"Value","@NODECFG:暂无输入参数":"No input parameters","@NODECFG:暂无输出参数":"No output parameters","@NODECFG:参数类型":"Type","@NODECFG:示例代码":"Examples","@NODECFG:提取版本号":"Extract version","@NODECFG:生成提交信息":"Generate commit message","@NODECFG:已应用示例":"Example applied","@NODECFG:代码脚本示例":`function main(param) {
|
|
7
|
-
const out = new Object()
|
|
8
|
-
out.key0 = param.input
|
|
9
|
-
return out
|
|
10
|
-
}`,"@NODECFG:引用节点输出":"Reference node output","@NODECFG:脚本":"Script","@NODECFG:请输入脚本":"Please enter script","@NODECFG:脚本示例":"Script example","@NODECFG:输出键列表":"Output keys","@NODECFG:一行一个输出键":"One key per line","@NODECFG:请配置输出键":"Please configure output keys","@NODECFG:版本配置":"Version configuration","@NODECFG:package.json":"package.json","@NODECFG:留空则使用当前目录的package.json":"Leave empty to use package.json in current directory","@NODECFG:修改目标":"Target","@NODECFG:version字段":"version field","@NODECFG:dependencies中的依赖":"dependency in dependencies","@NODECFG:版本增量类型":"Bump type","@NODECFG:补丁版本x.x.+1":"Patch (x.x.+1)","@NODECFG:次版本x.+1.0":"Minor (x.+1.0)","@NODECFG:主版本+1.0.0":"Major (+1.0.0)","@NODECFG:依赖类型":"Dependency type","@NODECFG:依赖包名称":"Dependency name","@NODECFG:请先选择package.json":"Please select package.json first","@NODECFG:版本号来源":"Version source","@NODECFG:自动递增":"Auto bump","@NODECFG:手动输入":"Manual input","@NODECFG:引用输出":"Reference output","@NODECFG:引用输入":"Reference input","@NODECFG:选择要引用的输入字段":"Select input field to reference","@NODECFG:无可用的前置命令节点":"No available predecessor command nodes","@NODECFG:递增类型":"Bump type","@NODECFG:补丁版本":"Patch","@NODECFG:次版本":"Minor","@NODECFG:主版本":"Major","@NODECFG:版本号":"Version","@NODECFG:例如1.2.3":"e.g. 1.2.3","@NODECFG:引用节点":"Reference node","@NODECFG:选择要引用的前置节点":"Select predecessor node to reference","@NODECFG:输出字段":"Output field","@NODECFG:选择要引用的输出字段":"Select output field to reference","@NODECFG:版本号将使用所选节点的输出结果":"Version will use the output of selected node","@NODECFG:版本号将使用本节点输入参数的值":"Version will use this node's input value","@NODECFG:标准输出(stdout)":"Standard output (stdout)","@NODECFG:标准错误(stderr)":"Standard error (stderr)","@NODECFG:错误(error)":"Error (error)","@NODECFG:提取的版本号":"Extracted version","@NODECFG:命令节点":"Command node","@NODECFG:请选择要执行的命令":"Please select a command to execute","@NODECFG:等待时间必须大于0秒":"Wait time must be greater than 0","@NODECFG:请选择依赖包名称":"Please select dependency name","@NODECFG:请输入依赖包版本号":"Please enter dependency version","@NODECFG:请选择要引用的节点输出":"Please select node output to reference","@NODECFG:节点配置已保存":"Node configuration saved","@NODECFG:取消":"Cancel","@NODECFG:保存配置":"Save","@NODECFG:读取依赖列表失败":"Failed to load dependency list","@NODECFG:ID":"ID","@FLOWNODE:开始":"Start","@FLOWNODE:命令节点":"Command Node","@FLOWNODE:等待节点":"Wait Node","@FLOWNODE:版本管理":"Version Management","@FLOWNODE:用户确认":"User Confirmation","@FLOWNODE:代码节点":"Code Node","@FLOWNODE:用户输入":"User Input","@FLOWNODE:终端":"Terminal","@FLOWNODE:未配置":"Not configured","@FLOWNODE:依赖":"Dependency","@UINPUT:参数名":"Name","@UINPUT:类型":"Type","@UINPUT:手动输入":"Manual","@UINPUT:引用":"Reference","@UINPUT:默认值":"Default value","@UINPUT:引用输出":"Output ref","@UINPUT:添加参数":"Add param","@UINPUT:暂无输入参数":"No params","@UINPUT:用户输入节点":"User Input Node","@UINPUT:等待用户输入...":"Waiting for user input...","@UINPUT:请输入必填参数的值":'Please enter a value for required parameter "{name}"',"@UINPUT:用户取消执行":"Execution canceled by user","@UINPUT:无输入":"No input","@UINPUT:执行到该节点暂停并等待输入":"Pause workflow and wait for input at this node","@FLOWNODE:目标":"Target","@FLOWNODE:来源":"Source","@FLOWNODE:依赖版本":"Dependency version","@FLOWNODE:version字段":"version field","@FLOWNODE:引用输出":"Reference output","@FLOWNODE:引用输入":"Reference input","@FLOWNODE:手动输入":"Manual input","@FLOWNODE:自动递增":"Auto bump","@FLOWNODE:package.json":"package.json","@FLOWNODE:当前目录":"Current directory","@FLOWNODE:版本号":"Version","@FLOWNODE:递增":"Bump","@FLOWNODE:引用":"Reference","@FLOWNODE:未知命令":"Unknown command","@FLOWNODE:等待 {seconds} 秒":"Wait {seconds}s","@FLOWNODE:修改依赖: {name}":"Update dependency: {name}","@FLOWNODE:版本号 +1 ({bump})":"Version +1 ({bump})","@FLOWNODE:已添加":"Added ","@FLOWNODE:不能删除起始节点":"Start node cannot be deleted","@FLOWNODE:节点已删除":"Node deleted","@NODEINPUT:命令中未检测到变量参数":"No variable parameters detected in command","@NODEINPUT:参数名":"Parameter","@NODEINPUT:类型":"Type","@NODEINPUT:选择类型":"Select type","@NODEINPUT:手动输入":"Manual","@NODEINPUT:引用节点":"Reference","@NODEINPUT:值":"Value","@NODEINPUT:输入参数值":"Enter value","@NODEINPUT:选择节点输出":"Select node output","@NODEINPUT:标准输出(stdout)":"Standard output (stdout)","@NODEINPUT:标准错误(stderr)":"Standard error (stderr)","@NODEINPUT:错误(error)":"Error (error)","@803A9:确定":"Confirm","@803A9:取消":"Cancel","@67CE7:在资源管理器中打开":"Open in File Explorer","@67CE7:切换工作目录":"Switch working directory","@67CE7:请输入目录路径":"Please enter the directory path","@67CE7:当前目录不是Git仓库,部分功能将不可用":"The current directory is not a Git repository, some features will be unavailable","@67CE7:打开目录失败: ":"Failed to open directory:","@67CE7:切换目录失败: ":"Failed to switch directory:","@67CE7:浏览目录失败: ":"Browse directory failed:","@67CE7:处理目录选择时出错: ":"Error processing directory selection:","@67CE7:目录路径":"Directory path","@67CE7:浏览":"Browse","@67CE7:常用目录":"Common Directories","@67CE7:取消":"Cancel","@67CE7:切换":"Switch","@NPM01:NPM 脚本":"NPM Scripts","@NPM01:个包":"packages","@NPM01:正在扫描项目中的 npm 脚本...":"Scanning npm scripts in project...","@NPM01:当前项目中未找到包含 scripts 的 package.json":"No package.json with scripts found in current project","@NPM01:个脚本":"scripts","@NPM01:已在新终端中执行":"Executed in new terminal","@NPM01:加载npm脚本失败":"Failed to load npm scripts","@NPM01:执行脚本失败":"Failed to execute script","@NPM01:设置":"Settings","@NPM01:刷新":"Refresh","@NPM01:关闭":"Close","@NPM01:NPM 设置":"NPM Settings","@NPM01:包名称":"Package Name","@NPM01:选择 package.json":"Select package.json","@NPM01:请选择一个 package.json":"Please select a package.json","@NPM01:版本号管理":"Version Management","@NPM01:脚本管理":"Script Management","@NPM01:添加脚本":"Add Script","@NPM01:当前脚本列表":"Current Scripts","@NPM01:暂无脚本":"No scripts","@NPM01:编辑":"Edit","@NPM01:删除":"Delete","@NPM01:置顶":"Pin to Top","@NPM01:编辑脚本":"Edit Script","@NPM01:添加新脚本":"Add New Script","@NPM01:取消编辑":"Cancel Edit","@NPM01:更新脚本":"Update Script","@NPM01:确定要删除脚本":"Are you sure to delete script","@NPM01:吗?":"?","@NPM01:删除脚本":"Delete Script","@NPM01:确定":"Confirm","@NPM01:取消":"Cancel","@NPM01:脚本已更新":"Script updated","@NPM01:脚本已删除":"Script deleted","@NPM01:脚本已置顶":"Script pinned to top","@NPM01:更新脚本失败":"Failed to update script","@NPM01:删除脚本失败":"Failed to delete script","@NPM01:置顶脚本失败":"Failed to pin script","@NPM01:当前版本":"Current Version","@NPM01:选择要增加的版本号类型":"Select version type to increment","@NPM01:主版本号 (major)":"Major Version","@NPM01:次版本号 (minor)":"Minor Version","@NPM01:修订号 (patch)":"Patch Version","@NPM01:更新版本号":"Update Version","@NPM01:脚本名称":"Script Name","@NPM01:例如: build, dev, test":"e.g., build, dev, test","@NPM01:脚本命令":"Script Command","@NPM01:例如: vite build, vite dev":"e.g., vite build, vite dev","@NPM01:版本号已更新":"Version updated","@NPM01:更新版本号失败":"Failed to update version","@NPM01:脚本已添加":"Script added","@NPM01:添加脚本失败":"Failed to add script","@NPM01:请输入脚本名称":"Please enter script name","@NPM01:请输入脚本命令":"Please enter script command","@NPM01:脚本名称不能包含空格":"Script name cannot contain spaces","@NPM01:脚本名称只能包含字母、数字、连字符、冒号、下划线和点号,且不能以数字开头":"Script name can only contain letters, numbers, hyphens, colons, underscores and dots, and cannot start with a number","@NPM01:脚本名称格式正确":"Script name format is correct","@NPM01:脚本名称格式不正确":"Invalid script name format","@NPM01:个脚本":"scripts","@0883F:处理中...":"Processing...","@0883F:解锁文件":"Unlock files","@0883F:锁定文件":"Lock file","@0883F:取消暂存":"Cancel staging","@0883F:添加到暂存区":"Add to staging area","@0883F:撤回修改":"Discard changes","@0883F:删除文件":"Delete file","@E80AC:搜索文件名或路径...":"Search for file name or path ..","@E80AC:没有找到匹配的文件":"No matching files found","@E80AC:该文件已被锁定,提交时会被跳过":"This file has been locked and will be skipped during commit","@E80AC:复制文件路径":"Copy file path","@E80AC:用VSCode打开文件":"Open the file with VSCode","@E80AC:该文件没有差异内容":"This file has no differential content","@E80AC:请选择文件查看差异":"Please select a file to view differences","@E80AC:没有找到变更文件":"No change file found","@E80AC:请先选择一个文件":"Please select a file first","@E80AC:文件路径已复制到剪贴板":"The file path has been copied to the clipboard","@E80AC:复制失败":"Copy failed","@E80AC:在系统默认编辑器中打开文件":"Open the file in the default editor of the system","@E80AC:打开该提交时的文件版本":"Open the file version at the time of commit","@E80AC:打开该stash中的文件版本":"Open the file version in this stash","@E80AC:打开文件":"Open the file","@E80AC:变更文件":"Changed Files","@E80AC:文件差异":"File Diff","@E80AC:列表视图":"List View","@E80AC:树状视图":"Tree View","@E80AC:文件列表":"File List","@E80AC:检测到冲突,请选择解决方式":"Conflict detected, please choose resolution method","@E80AC:接受当前版本":"Accept Current","@E80AC:接受传入版本":"Accept Incoming","@E80AC:接受两者":"Accept Both","@E80AC:冲突已解决,文件已更新":"Conflict resolved, file updated","@E80AC:解决冲突失败: ":"Failed to resolve conflict: ","@E80AC:无法读取文件内容":"Unable to read file content","@E80AC:冲突解决进度":"Conflict Resolution Progress","@E80AC:请为每个冲突块选择解决方式":"Please choose resolution for each conflict block","@E80AC:所有冲突块已解决,请点击下方保存按钮":"All conflicts resolved, click save button below","@E80AC:冲突块":"Conflict Block","@E80AC:已解决":"Resolved","@E80AC:当前更改":"Current Changes","@E80AC:采用当前更改":"Accept Current Changes","@E80AC:冲突分隔符":"Conflict Separator","@E80AC:保留双方更改":"Accept Both Changes","@E80AC:传入的更改":"Incoming Changes","@E80AC:采用传入更改":"Accept Incoming Changes","@E80AC:将采用当前更改":"Will accept current changes","@E80AC:将采用传入更改":"Will accept incoming changes","@E80AC:将保留双方更改":"Will keep both changes","@E80AC:冲突块已标记为已解决":"Conflict block marked as resolved","@E80AC:操作失败: ":"Operation failed: ","@E80AC:请先解决所有冲突块":"Please resolve all conflict blocks first","@E80AC:保存所有解决方案":"Save All Resolutions","@E80AC:保存失败":"Save failed","@E80AC:保存失败: ":"Save failed: ","@E80AC:最终内容":"Final Content","@E80AC:重新选择":"Re-select","@E80AC:逐块解决":"Block-by-Block","@E80AC:全局解决":"Global Resolution","@E80AC:合并结果":"Merge Result","@E80AC:可直接编辑合并结果(整文件)":"Editable merged result (whole file)","@E80AC:保留双方":"Keep Both","@E80AC:点击左右两侧的":"Click the","@E80AC:或":"or","@E80AC:按钮":"buttons on both sides","@E80AC:选择要保留的内容":"to choose which content to keep","@E80AC:冲突已解决,可以添加到暂存区":"Conflict resolved, ready to stage","@E80AC:添加到暂存区":"Stage File","@34292:Git命令预览:":"Git command preview:","@34292:复制命令":"Copy command","@34292:没有可复制的命令内容":"There is no command content that can be copied","@34292:命令已复制到剪贴板":"Command copied to clipboard","@34292:复制失败: ":"Copy failed:","@42BB9:Git 全局设置":"Git Global Settings","@42BB9:正在加载配置...":"Loading configuration ..","@42BB9:用户名":"Username","@42BB9:请输入 Git 用户名":"Please enter Git username","@42BB9:邮箱地址":"Email address","@42BB9:请输入 Git 邮箱地址":"Please enter your Git email address","@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。":"When Git pushes for the first time, it automatically creates a remote branch with the same name for the current branch and establishes a tracking relationship (equivalent to push-u).","@42BB9:merge (默认)":"Merge (default)","@42BB9:rebase(保留合并)":"Rebase (retain merge)","@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。":"Automatically prune during git fetch to remove remote branch references that have been deleted remotely but are still retained locally.","@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。":"When creating a new repository (gitinit), the default branch name created is' main 'or' master '.","@42BB9:例如: main":"For example: main","@42BB9:已保存变更的 Git 配置":"Git configuration with saved changes","@42BB9:用户名和邮箱不能为空":"Username and email cannot be empty","@42BB9:没有需要保存的变更":"There are no changes that need to be saved","@42BB9:设置 ":"Settings","@42BB9: 失败":"Failure","@42BB9:全局配置":"Global Configuration","@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效":"These settings will affect the global Git configuration and take effect for all Git repositories","@42BB9:高级配置":"Advanced Configuration","@42BB9:自动设置上游":"Automatically set upstream","@42BB9:拉取策略":"Pull strategy","@42BB9:自动清理远程分支":"Automatically clean up remote branches","@42BB9:换行符处理":"Line break processing","@42BB9:默认初始化分支":"Default initialization branch","@42BB9:取消":"Cancel","@42BB9:保存设置":"Save Settings","@2AEBA:加载中...":"Loading...","@1D6A1:已取消":"Canceled","@1D6A1:- 国际化测试":"-Internationalization testing","@1D6A1:基础翻译测试":"Basic Translation Test","@1D6A1:模块翻译":"Module translation","@1D6A1:动态参数测试":"Dynamic parameter testing","@1D6A1:组件国际化":"Internationalization of Components","@1D6A1:表单国际化":"Internationalization of Forms","@1D6A1:操作翻译":"Operation translation","@1D6A1:提交历史翻译":"Commit historical translation","@1D6A1:错误信息翻译":"Translation of incorrect information","@1D6A1:脚本中使用 t() 函数":"Using the t() function in the script","@1D6A1:在 script 中使用: ":"Use in script:","@1D6A1:结果: ":"Result:","@1D6A1:带参数: ":"With parameters:","@71545:操作成功!":"Operation successful!","@60CAC:尚未设置默认提交信息":"Default commit information has not been set yet","@60CAC:模板":"Template","@60CAC:作用域":"Scope","@60CAC:输入新模板内容":"Enter new template content","@60CAC:编辑模板内容":"Edit template content","@60CAC:暂无保存的模板":"There are currently no saved templates available","@60CAC:更新模板":"Update template","@60CAC:添加模板":"Add template","@60CAC:模板内容不能为空":"Template content cannot be empty","@60CAC:模板保存失败: ":"Template save failed:","@60CAC:模板删除失败: ":"Template deletion failed:","@60CAC:置顶模板失败: ":"Failed to pin template:","@60CAC:设置默认提交信息失败: ":"Failed to set default commit information:","@60CAC:取消":"Cancel","@60CAC:设为默认提交信息":"Set as default commit information","@60CAC:已保存":"Saved","@60CAC:使用":"Use","@60CAC:编辑":"Edit","@60CAC:删除":"Delete","@60CAC:已保存模板":"Template saved","@60CAC:当前默认提交信息":"Current default commit information","@60CAC:关于默认提交信息":"About default commit information","@60CAC:默认提交信息将在未输入提交信息时自动使用。":"The default commit information will be automatically used when no commit information is entered.","@60CAC:你可以通过点击左侧模板的":"You can click on the template on the left","@60CAC:按钮先选择喜欢的模板,然后点击上方":"Select your favorite template first, and then click on the button above","@60CAC:按钮保存。":"Button to save.","@F2A3A:加载中...":"Loading...","@B8591:操作成功!":"Operation successful!","@D50BB:使用缓存的配置信息":"Use cached configuration information","@D50BB:加载配置信息...":"Load configuration information ..","@D50BB:配置信息加载完成":"Configuration information loading completed","@D50BB:默认提交信息已保存":"Default commit information has been saved","@D50BB:模板已保存":"Template saved","@D50BB:模板已删除":"Template deleted","@D50BB:模板已更新":"Template updated","@D50BB:模板已置顶":"Template pinned to top","@D50BB:置顶模板失败: ":"Failed to pin template:","@D50BB:加载配置失败: ":"Loading configuration failed:","@D50BB:配置文件":"Config file","@D50BB:已打开系统配置文件":"System config file opened","@D50BB:打开系统配置文件失败: ":"Failed to open system config file: ","@D50BB:保存失败: ":"Save failed:","@D50BB:保存模板失败: ":"Failed to save template:","@D50BB:删除模板失败: ":"Template deletion failed:","@D50BB:更新模板失败: ":"Template update failed:","@D50BB:加载锁定文件列表失败: ":"Failed to load lock file list:","@D50BB:文件已锁定: ":"File locked:","@D50BB:锁定文件失败: ":"Failed to lock file:","@D50BB:文件已解锁: ":"File unlocked:","@D50BB:解锁文件失败: ":"Unlocking file failed:","@CFGERR:系统配置文件有问题":"System config file has an issue","@CFGERR:查看原因":"View reason","@CFGERR:打开系统配置文件":"Open system config file","@C298B:开发环境:使用默认后端端口 3000":"Development environment: Use default backend port 3000","@C298B:使用缓存的分支状态":"Using cached branch states","@C298B:获取分支状态...":"Get branch status ..","@C298B:无":"None","@C298B:不是":"Not","@C298B:是":"Yes","@C298B: (强制刷新)":"(Force refresh)","@C298B:获取所有分支...":"Get all branches ..","@C298B:分支名称不能为空":"Branch name cannot be empty","@C298B:已清除Git用户配置":"Git user configuration cleared","@C298B:已恢复Git用户配置":"Git user configuration has been restored","@C298B:当前目录不是Git仓库":"The current directory is not a Git repository","@C298B:拉取成功":"Pull successful","@C298B:存在冲突需要手动解决":"There is a conflict that needs to be manually resolved","@C298B:获取所有远程分支信息成功":"Successfully obtained all remote branch information","@C298B:Socket.IO客户端已创建,开始注册事件监听器...":"The Socket.IO client has been created and registration for event listeners has begun ..","@C298B:正在更新 Git 文件状态...":"Updating Git file status ..","@C298B:已停止":"Stopped","@C298B:Socket连接超时":"Socket connection timeout","@C298B:重连后重新发送start_monitoring请求":"Reconnect and resend start_manitoring request","@C298B:Socket重连失败,已达到最大重试次数":"Socket reconnection failed, maximum retry count reached","@C298B:Socket.IO事件监听器注册完成:connect, project_info, project_changed, git_status_update, monitoring_status":"Socket.IO event listener registration completed: connect, project_info, project_changed, git_datus_uUpdate, self-moniting_status","@C298B:Socket未连接,尝试手动连接...":"Socket not connected, attempt to manually connect ..","@C298B:无法连接到服务器,自动更新可能不会生效":"Unable to connect to the server, automatic updates may not take effect","@C298B:尝试重新建立socket连接...":"Attempt to re-establish the socket connection ..","@C298B:发送start_monitoring命令...":"Send the start_manitoring command ..","@C298B:自动更新已启用":"Automatic update enabled","@C298B:发送stop_monitoring命令...":"Send the stop_manitoring command ..","@C298B:自动更新已禁用":"Automatic updates disabled","@C298B:当前目录不是Git仓库,跳过加载提交历史":"The current directory is not a Git repository, skip loading commit history","@C298B:开始加载提交历史...":"Start loading commit history ..","@C298B:刷新提交历史...":"Refresh commit history ..","@C298B:提交历史刷新完成":"Submission history refresh completed","@C298B:当前目录不是Git仓库,跳过加载Git状态":"The current directory is not a Git repository, skip loading Git status","@C298B:开始获取Git状态(porcelain格式)...":"Start obtaining Git status (in porcelain format) ..","@C298B:没有需要暂存的文件(所有文件都被锁定)":"There are no files that need to be staged (all files are locked)","@C298B:文件已添加到暂存区":"The file has been added to the staging area","@C298B:所有文件已添加到暂存区":"All files have been added to the staging area","@C298B:文件已暂存":"The file has been staged","@C298B:已取消暂存文件":"The temporary file has been cancelled","@C298B:提交成功":"Submission successful","@C298B:请选择要合并的分支":"Please select the branch to merge","@C298B:不能合并当前分支到自身":"Cannot merge the current branch into itself","@C298B:合并分支时发生冲突,请手动解决":"Conflict occurred during branch merging, please manually resolve it","@C298B:开始暂存并提交操作...":"Starting stage and commit operation...","@C298B:暂存完成,等待Git操作完成...":"Staging completed, waiting for Git operation to complete...","@C298B:开始提交更改...":"Start submitting changes ..","@C298B:暂存并提交操作完成":"Stage and commit operation completed","@C298B:开始暂存文件...":"Starting to stage files...","@C298B:提交完成,等待Git操作完成...":"Submission completed, waiting for Git operation to complete ..","@C298B:开始推送到远程...":"Start pushing to remote ..","@C298B:一键推送操作完成,状态已统一刷新":"One click push operation completed, status has been uniformly refreshed","@C298B:检测到Git锁定文件冲突,已自动清理,请重试操作":"Detected Git lock file conflict, automatically cleared, please retry operation","@C298B:已重置暂存区":"Reset staging area","@C298B:获取远程仓库地址...":"Obtain the remote repository address ..","@C298B:没有可复制的远程仓库地址":"There are no replicable remote repository addresses available","@C298B:已复制远程仓库地址":"The remote repository address has been copied","@C298B:应用stash时发生冲突,请手动解决":"There was a conflict while applying 'stash', please manually resolve it","@C298B:开发环境:从环境变量读取后端端口 ":"Development environment: Read backend ports from environment variables","@C298B:生产环境:使用当前页面端口 ":"Production environment: Use the current page port","@C298B:分支状态更新:领先 ":"Branch status update: Leading","@C298B: 个提交,落后 ":"A commit, lagging behind","@C298B: 个提交,上游分支:":"Submission, upstream branch:","@C298B:当前目录":"Current directory","@C298B:Git仓库":"Git repository","@C298B:当前分支更新为: ":"The current branch update is:","@C298B:获取到":"Obtained","@C298B:个分支":"A branch","@C298B:已切换到分支: ":"Switch to branch:","@C298B:切换分支失败: ":"Switching branches failed:","@C298B:已创建并切换到分支: ":"Created and switched to branch:","@C298B:创建分支失败: ":"Branch creation failed:","@C298B:清除配置失败: ":"Clearing configuration failed:","@C298B:恢复配置失败: ":"Failed to restore configuration:","@C298B:需要合并更改: ":"Need to merge changes:","@C298B:拉取失败: ":"Pull failed:","@C298B:获取远程分支信息失败: ":"Failed to obtain remote branch information:","@C298B:当前项目: ":"Current project:","@C298B:房间ID: ":"Room ID:","@C298B:项目已切换: ":"Project switched:","@C298B:已加入新项目房间: ":"New project room added:","@C298B:忽略不同项目的状态更新: ":"Ignore status updates for different projects:","@C298B:Socket重连成功,尝试次数: ":"Socket reconnection successful, attempts:","@C298B:Socket尝试重连,第 ":"Socket attempts to reconnect, step","@C298B: 次尝试":"Try again","@C298B:切换自动更新失败: ":"Switching to automatic update failed:","@C298B:提交历史加载完成,共 ":"Submission history loading completed, total","@C298B: 条记录":"Record","@C298B:获取提交历史失败: ":"Failed to retrieve commit history:","@C298B:获取Git状态失败: ":"Failed to retrieve Git status:","@C298B:获取Git状态(porcelain)失败: ":"Failed to retrieve Git status (porcelain):","@C298B:添加文件失败: ":"Failed to add file:","@C298B:已添加 ":"Added","@C298B: 个文件到暂存区":"Transfer a file to the staging area","@C298B:,跳过 ":"Skip it","@C298B: 个锁定文件":"A locked file","@C298B:暂存文件失败: ":"Temporary file stash failed:","@C298B:取消暂存失败: ":"Cancel staging failed:","@C298B:commitChanges 提交失败: ":"CommitChanges failed to commit:","@C298B:提交失败: ":"Submission failed:","@C298B:推送失败: ":"Push failed:","@C298B:成功合并分支 ":"Successfully merged branches","@C298B: 到 ":"To","@C298B:合并分支失败: ":"Merge branch failed:","@C298B:操作失败: ":"Operation failed:","@C298B:重置暂存区失败: ":"Reset staging area failed:","@C298B:已重置分支 ":"Branch has been reset","@C298B: 到远程状态":"To remote status","@C298B:重置分支失败: ":"Reset branch failed:","@C298B:获取到远程仓库地址: ":"Obtained remote repository address:","@C298B:复制失败: ":"Copy failed:","@C298B:获取stash列表失败: ":"Failed to retrieve the stash list:","@C298B:保存stash失败: ":"Save stash failed:","@C298B:应用stash失败: ":"Application stash failed:","@C298B:删除stash失败: ":"Failed to delete stash:","@C298B:清空stash失败: ":"Clearing stash failed:","@5C735:刚刚":"Just now","@5C735:天前":"Days ago","@5C735:小时前":"Hours ago","@5C735:分钟前":"Minutes ago","@81F0F:查看Git命令历史":"View Git Command History","@81F0F:Git 命令历史":"Git Command History","@81F0F:只复制命令列表(不含输出)":"Copy only command list (excluding output)","@81F0F:复制完整命令历史(含输出)":"Copy the complete command history (including output)","@81F0F:清空命令历史":"Clear command history","@81F0F:暂无命令历史":"No command history available at the moment","@81F0F:复制命令":"Copy command","@81F0F:展开/收起":"Expand","@81F0F:复制输出":"Copy output","@81F0F:实时更新":"Real-time update","@81F0F:未连接":"Not connected","@81F0F:成功":"Success","@81F0F:失败":"Failure","@81F0F:输出信息":"Output information","@81F0F:错误输出":"Error output","@81F0F:没有可复制的命令历史":"There is no replicable command history","@81F0F:命令历史已复制到剪贴板":"Command history copied to clipboard","@81F0F:没有可复制的命令":"There are no replicable commands","@81F0F:命令列表已复制到剪贴板":"The command list has been copied to the clipboard","@81F0F:确定要清空所有命令历史记录吗?此操作不可恢复。":"Are you sure you want to clear all command history records? This operation is irreversible.","@81F0F:确定":"Confirm","@81F0F:取消":"Cancel","@81F0F:命令历史已清空":"Command history cleared","@81F0F:命令已复制到剪贴板":"Command copied to clipboard","@81F0F:输出已复制到剪贴板":"Output copied to clipboard","@81F0F:Socket实例不可用":"Socket instance unavailable","@81F0F:已连接到实时命令历史":"Connected to real-time command history","@81F0F:实时命令历史连接已断开":"Real time command history connection disconnected","@81F0F:尝试初始化Socket连接":"Attempt to initialize Socket connection","@81F0F:加载命令历史失败: ":"Failed to load command history:","@81F0F: (耗时: ":"(Time consumption:","@81F0F:复制失败: ":"Copy failed:","@81F0F:清空命令历史失败: ":"Failed to clear command history:","@81F0F:命令":"Command","@81F0F:全部":"All","@81F0F:清空":"Clear","@81F0F:加载命令历史...":"Load command history ..","@81F0F:耗时: ":"Time-consuming","@81F0F:标准输出":"Standard output","@81F0F:输出内容过长已被截断,请直接执行命令查看完整输出":"The output content is too long and has been truncated. Please execute the command directly to view the complete output","@81F0F:内容过长已被截断,请直接执行命令查看完整输出":"The content is too long and has been truncated. Please execute the command directly to view the complete output","@81F0F:错误信息":"Error message","@76872:Git用户信息未配置":"Git user information not configured","@76872:提交命令预览:":"Commit command preview:","@76872:提交类型":"Submission Type","@76872:作用域(可选)":"Scope (optional)","@76872:正文(可选):详细描述本次提交的内容和原因":"Text (optional): Provide a detailed description of the content and reasons for this commit","@76872:页脚(可选):如 Closes #123":"Footer (optional): such as Close # 123","@76872:Git 操作":"Git operation","@76872:合并其他分支到当前分支":"Merge other branches into the current branch","@76872:将工作区更改储藏起来":"Store changes to the workspace","@76872:查看和管理所有储藏记录":"View and manage all stash records","@76872:编辑配置 JSON":"Edit configuration JSON","@76872:在此编辑当前项目配置的 JSON...":"Edit the JSON of the current project configuration here","@76872:配置文件格式提示":"Format prompt for configuration file","@76872:简短描述模板设置":"Short description of template settings","@76872:输入新模板内容":"Enter new template content","@76872:编辑模板内容":"Edit template content","@76872:暂无保存的模板":"There are currently no saved templates available","@76872:作用域模板设置":"Scope Template Settings","@76872:输入新作用域模板":"Enter new scope template","@76872:编辑作用域模板内容":"Edit Scope Template Content","@76872:暂无保存的作用域":"There are currently no saved scopes available","@76872:默认提交信息设置":"Default commit information settings","@76872:储藏更改 (Git Stash)":"Store changes (Git Stash)","@76872:储藏":"Stash","@76872:取消":"Cancel","@76872:储藏说明":"Stash Instructions","@76872:为这次储藏添加描述信息(可选)":"Add descriptive information for this stash (optional)","@76872:合并分支":"Merge branch","@76872:合并分支到当前分支":"Merge branch to current branch","@76872:将选择的分支合并到":"Merge selected branch to","@76872:分支类型":"Branch type","@76872:所有分支":"All branches","@76872:本地分支":"Local branches","@76872:远程分支":"Remote branches","@76872:选择分支":"Select branch","@76872:选择要合并的分支":"Select the branch to merge","@76872:合并命令预览:":"Merge command preview:","@76872:请先选择要合并的分支":"Please select a branch to merge first","@76872:合并选项":"Merge options","@76872:禁用快进合并":"Disable fast-forward merge","@76872:始终创建合并提交,即使可以快进 (--no-ff)":"Always create merge commit, even if fast-forward is possible (--no-ff)","@76872:压缩合并":"Squash merge","@76872:将所有提交压缩成一个提交 (--squash)":"Squash all commits into one (--squash)","@76872:不自动提交":"No auto commit","@76872:执行合并但不自动提交,可以手动检查后提交 (--no-commit)":"Merge but do not auto commit, manually review before committing (--no-commit)","@76872:合并消息(可选)":"Merge message (optional)","@76872:自定义合并提交消息":"Custom merge commit message","@76872:默认消息:":"Default message: ","@76872:合并":"Merge","@76872:创建合并提交,即使可以使用快进合并":"Create merge commit, even if fast forward merge can be used","@76872:将多个提交压缩为一个提交":"Compress multiple commits into one commit","@76872:执行合并但不自动创建提交":"Perform merge but do not automatically create commit","@76872:合并提交信息 (可选)":"Merge commit information (optional)","@76872:输入自定义合并提交信息":"Enter custom merge commit information","@76872:储藏列表 (Git Stash)":"Stash List (Git Stash)","@76872:暂无储藏记录":"No stash records available at the moment","@76872:储藏详情":"Stash Details","@76872:该stash没有变更文件":"The stash has not changed the file","@76872:提交设置":"Commit Settings","@76872:提交模式":"Submission mode","@76872:选择传统或标准化提交格式":"Choose traditional or standardized commit format","@76872:标准化":"Standardization","@76872:普通":"Ordinary","@76872:跳过钩子检查":"Skip hook check","@76872:添加 --no-verify 参数":"Add -- no verify parameter","@76872:回车自动提交":"Enter and submit automatically","@76872:输入提交信息后按回车直接执行一键推送":"After entering the commit information, press Enter to directly execute the one click push","@76872:Push完成自动关闭":"Auto-close after push","@76872:推送成功后自动关闭进度弹窗":"Automatically close the progress dialog after successful push","@76872:自动填充默认提交信息":"Auto-fill default commit message","@76872:打开页面或提交完成后自动填充默认提交信息":"Automatically fill in default commit message when opening page or after committing","@76872:收起":"Fold up","@76872:正文及页脚":"Main text and footer","@76872:拉取":"Pull","@76872:个远程提交":"Remote commit","@76872:撤销":"Revoke","@76872:个已暂存文件":"A staged file","@76872:系统配置文件不存在,将使用默认配置。":"The system configuration file does not exist, the default configuration will be used.","@76872:加载配置失败":"Loading configuration failed","@76872:保存失败":"Save failed","@76872:配置已保存":"Configuration saved","@76872:打开失败":"Failed to open","@76872:已用系统程序打开配置文件":"The configuration file has been opened using the system program","@76872:确定要删除此储藏吗?此操作不可恢复。":"Are you sure you want to delete this stash? This operation is irreversible.","@76872:删除储藏":"Delete stash","@76872:确定":"Confirm","@76872:确定要清空所有储藏吗?此操作不可恢复。":"Are you sure you want to clear all stash? This operation is irreversible.","@76872:清空所有储藏":"Clear all stash","@76872:无效的stash ID":"Invalid stashID","@76872:未知错误":"Unknown error","@76872:没有变更内容":"No changes made","@76872:打开文件失败":"Fail to open file","@76872:用VSCode打开文件失败":"Failed to open file using VSCode","@76872:简短描述(必填)":"Short description (required)","@76872:简短描述(必填,按回车一键推送)":"Short description (required, press enter to push)","@76872:操作成功!":"Operation successful!","@76872:已完成操作":"Operation completed","@76872:重置到远程分支":"Reset to remote branch","@76872:正在暂存文件...":"Staging files...","@76872:推送成功,状态已更新":"Push successful, status updated","@76872:默认提交信息设置成功":"Default commit information setting successful","@76872:正在提交更改...":"Committing changes ..","@76872:正在推送...":"Pushing ..","@76872:请选择要合并的分支":"Please select the branch to merge","@76872:系统配置文件格式有误:":"The format of the system configuration file is incorrect:","@76872:JSON 解析失败: ":"JSON parsing failed:","@76872:保存配置失败: ":"Failed to save configuration:","@76872:打开配置文件失败: ":"Failed to open configuration file:","@76872:获取文件列表失败: ":"Failed to retrieve file list:","@76872:获取stash详情失败: ":"Failed to retrieve the details of stash:","@76872:获取差异失败: ":"Failed to obtain differences:","@76872:打开文件失败: ":"Failed to open file:","@76872:用VSCode打开文件失败: ":"Failed to open file using VSCode:","@76872:输入提交信息 (默认: ":"Enter commit information (default:","@76872:(按回车一键推送)":"(Press Enter to push)","@76872:暂存并提交失败: ":"Temporary stash and commit failed:",'@76872:确定要重置当前分支 "':"Confirm to reset the current branch“",'@76872:" 到远程状态吗?这将丢失所有未推送的提交和本地更改。':"Going to remote mode? This will result in the loss of all non pushed commits and local changes.","@76872:重置到远程分支失败: ":"Reset to remote branch failed:","@76872:设置默认提交信息失败: ":"Failed to set default commit information:","@76872:提交更改":"Commit changes","@76872:您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:":"You need to configure a Git username and email to submit code. Please use the following command to configure:","@76872:基础操作":"Basic Operations","@76872:获取所有远程分支":"Get all remote branches","@76872:组合操作":"Combination operation","@76872:暂存并提交":"Stage and Commit","@76872:重置操作":"Reset operation","@76872:重置暂存区":"Reset staging area","@76872:重置到远程":"Reset to remote","@76872:存在冲突文件,请先解决冲突":"Conflicted files exist, please resolve conflicts first","@76872:分支操作":"Branch operation","@76872:储藏操作":"Stash operation","@76872:储藏更改":"Stash changes","@76872:储藏列表":"Stash List","@TAG01:标签操作":"Tag Operations","@TAG01:创建标签":"Create Tag","@TAG01:标签列表":"Tag List","@TAG01:为当前提交创建标签":"Create tag for current commit","@TAG01:查看和管理所有标签":"View and manage all tags","@TAG01:创建 Git 标签":"Create Git Tag","@TAG01:创建":"Create","@TAG01:取消":"Cancel","@TAG01:Git 标签":"Git Tag","@TAG01:标签用于标记项目的重要版本点,如发布版本 v1.0.0":"Tags are used to mark important version points such as release v1.0.0","@TAG01:标签名称":"Tag Name","@TAG01:例如: v1.0.0 或 release-2024":"e.g.: v1.0.0 or release-2024","@TAG01:建议使用语义化版本号,如 v1.0.0":"Recommend semantic versioning like v1.0.0","@TAG01:标签类型":"Tag Type","@TAG01:轻量标签":"Lightweight","@TAG01:附注标签":"Annotated","@TAG01:轻量标签是指向提交对象的引用,不包含额外信息":"Lightweight tag is a reference to a commit without extra information","@TAG01:附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名":"Annotated tag is a full Git object with tag info, date, tagger and optional signature","@TAG01:标签说明":"Tag Message","@TAG01:为此标签添加说明信息":"Add description for this tag","@TAG01:目标提交(可选)":"Target Commit (Optional)","@TAG01:留空则为当前HEAD,或输入commit SHA":"Leave blank for current HEAD, or enter commit SHA","@TAG01:默认为当前HEAD提交,也可以指定历史提交":"Default to current HEAD commit, or specify a historical commit","@TAG01:请输入标签名称":"Please enter tag name","@TAG01:标签名称只能包含字母、数字、点、下划线、斜杠和连字符":"Tag name can only contain letters, numbers, dots, underscores, slashes and hyphens","@TAG01:标签创建成功":"Tag created successfully","@TAG01:创建标签失败":"Failed to create tag","@TAG01:Git 标签列表":"Git Tag List","@TAG01:个标签":"tags","@TAG01:刷新":"Refresh","@TAG01:推送所有标签":"Push All Tags","@TAG01:暂无标签":"No tags","@TAG01:还没有创建任何标签":"No tags have been created yet","@TAG01:使用创建标签功能为项目添加版本标记":"Use create tag feature to add version markers","@TAG01:附注":"Annotated","@TAG01:轻量":"Lightweight","@TAG01:查看":"View","@TAG01:推送":"Push","@TAG01:删除":"Delete","@TAG01:确定要推送此标签到远程仓库吗?":"Are you sure to push this tag to remote repository?","@TAG01:推送标签":"Push Tag","@TAG01:确定要推送所有标签到远程仓库吗?":"Are you sure to push all tags to remote repository?","@TAG01:标签推送成功":"Tag pushed successfully","@TAG01:推送标签失败":"Failed to push tag","@TAG01:所有标签推送成功":"All tags pushed successfully","@TAG01:确定要删除此标签吗?此操作不可恢复。":"Are you sure to delete this tag? This cannot be undone.","@TAG01:删除标签":"Delete Tag","@TAG01:标签删除成功":"Tag deleted successfully","@TAG01:删除标签失败":"Failed to delete tag","@TAG01:获取标签列表失败":"Failed to get tag list","@TAG01:标签详情":"Tag Details","@TAG01:标签名称:":"Tag Name:","@TAG01:提交SHA:":"Commit SHA:","@TAG01:创建时间:":"Created At:","@TAG01:类型:":"Type:","@TAG01:标签说明:":"Tag Message:","@76872:编辑当前项目的配置文件":"Edit the configuration file of the current project","@76872:支持JSON格式":"Supports JSON format","@76872:打开系统配置文件":"Open the system configuration file","@76872:保存配置":"Save Configuration","@76872:继续编辑":"Continue editing","@76872:储藏工作区更改":"Stash workspace change","@76872:将当前工作区的更改临时保存,稍后可以重新应用到任何分支":"Save the changes in the current workspace temporarily and reapply them to any branch later","@76872:储藏选项":"Stash options","@76872:包含未跟踪文件":"Include untracked files","@76872:同时储藏新建但未添加到Git的文件 (--include-untracked)":"Simultaneously store newly created files that have not been added to Git (-- include untacked)","@76872:排除锁定文件":"Exclude locked files","@76872:不储藏被锁定的文件,保持其当前状态":"Do not store locked files and maintain their current state","@76872:将要储藏的文件":"The files to be stored","@76872:已暂存: ":"Temporarily stored:","@76872:个文件":"A file","@76872:未暂存: ":"Not staged:","@76872:选择要合并到当前分支 (":"Select to merge into the current branch(","@76872:) 的分支:":")The branch:","@76872:所有分支":"All branches","@76872:本地分支":"Local branch","@76872:远程分支":"Remote branch","@76872:禁用快进合并 (--no-ff)":"Disable fast forward merge (-- no ff)","@76872:压缩提交 (--squash)":"Compressed commit (-- squash)","@76872:不自动提交 (--no-commit)":"Do not submit automatically (-- no commit)","@76872:合并":"Merge","@76872:个储藏":"A stash","@76872:还没有任何储藏记录":"There are no stash records yet","@76872:使用 git stash 可以临时保存工作进度":"Use git stash to temporarily save work progress","@76872:最新":"Latest","@76872:查看":"View","@76872:应用":"Application","@76872:应用并删除":"Apply and delete","@76872:删除":"Delete","@76872:描述:":"Description:","@76872:更新状态中...":"Updating status ..","@76872:新功能":"New feature","@76872:修复bug":"Bug fix","@76872:文档修改":"Documentation","@76872:样式修改":"Code style","@76872:代码重构":"Refactoring","@76872:测试代码":"Testing","@76872:构建/工具修改":"Build/Tools","@76872:请先选择要储藏的文件":"Please select files to stash first","@76872:储藏选中的文件":"Stash Selected Files","@76872:储藏选中文件":"Stash Selected Files","@76872:储藏":"Stash","@76872:取消":"Cancel","@76872:将选中的文件更改临时保存,稍后可以重新应用":"Temporarily save changes to selected files, can be reapplied later","@76872:储藏说明":"Stash Message","@76872:为这次储藏添加描述信息(可选)":"Add a description for this stash (optional)","@76872:储藏选项":"Stash Options","@76872:包含未跟踪文件":"Include Untracked Files","@76872:对于未跟踪的文件,同时储藏 (--include-untracked)":"Also stash untracked files (--include-untracked)","@76872:将要储藏的文件":"Files to be Stashed","@76872:已选中: ":"Selected: ","@76872:个文件":"file(s)","@76872:...还有":"...and","@76872:排除锁定文件":"Exclude Locked Files","@76872:不储藏被锁定的文件,保持其当前状态":"Do not stash locked files, keep their current state","@76872:选中":"Selected","@76872:个锁定文件":"locked file(s)","@76872:所有选中的文件都是锁定文件,无法储藏":"All selected files are locked and cannot be stashed","@13D1C:Git Pull (拉取远程更新)":"GitPull (Pull Remote Updates)","@13D1C:Git Fetch All (获取所有远程分支)":"Gitfetch All (Get all remote branches)","@13D1C:管理锁定文件":"Manage Locked Files","@13D1C:刷新状态":"Refresh status","@13D1C:本地分支与远程分支的状态对比":"Comparison of Status between Local and Remote Branches","@13D1C:冲突文件":"Conflicted files","@13D1C:已暂存的更改":"Temporarily stored changes","@13D1C:未暂存的更改":"Untreated changes","@13D1C:未跟踪的文件":"Untracked files","@13D1C:文件差异":"File differences","@13D1C:仅显示差异":"Show differences only","@13D1C:显示完整对比":"Show full comparison","@13D1C:选择文件查看差异":"Select file to view differences","@13D1C:锁定文件管理":"Lock file management","@13D1C:这些文件在提交时会被自动跳过":"These files will be automatically skipped when submitted","@13D1C:解锁文件":"Unlock files","@13D1C:解锁":"Unlock","@13D1C:自动更新文件状态":"Automatically update file status","@13D1C:正在拉取代码...":"Pulling code ..","@13D1C:正在获取远程分支信息...":"Getting remote branch information ..","@13D1C:加载中...":"Loading...","@13D1C:打开文件失败":"Fail to open file","@13D1C:用VSCode打开文件失败":"Failed to open file using VSCode","@13D1C:未知目录":"Unknown directory","@13D1C:Git 状态已刷新":"Git status refreshed","@13D1C:确认解锁":"Confirm unlocking","@13D1C:取消":"Cancel","@13D1C:清空全部锁定":"Clear all locks","@13D1C:全部解锁":"Fully unlocked","@13D1C:已清空所有文件锁定":"Cleared all file locks","@13D1C:没有变更":"No changes","@13D1C:目录浏览功能未启用":"The directory browsing function is not enabled","@13D1C:获取目录内容失败":"Failed to retrieve directory contents","@13D1C:目录路径不能为空":"The directory path cannot be empty","@13D1C:已切换工作目录":"Changed working directory","@13D1C:当前目录不是一个Git仓库":"The current directory is not a Git repository","@13D1C:切换目录失败":"Failed to switch directory","@13D1C:未知当前分支":"Unknown current branch","@13D1C:已推送并设置上游分支":"Promoted and set up upstream branch","@13D1C:设置上游失败":"Setting upstream failed","@13D1C:撤回修改":"Discard changes","@13D1C:确定":"Confirm","@13D1C:已撤回文件修改":"File modifications have been withdrawn","@13D1C:撤回文件修改失败,请重试":"Withdrawal of file modification failed, please try again","@13D1C:未知错误":"Unknown error","@13D1C:打开文件失败: ":"Failed to open file:","@13D1C:用VSCode打开文件失败: ":"Failed to open file using VSCode:","@13D1C:确认解锁所有已锁定文件?共 ":"Confirm unlocking all locked files? together","@13D1C: 个。":"One.","@13D1C:新文件: ":"New file:","@13D1C:获取目录内容失败: ":"Failed to retrieve directory contents:","@13D1C:切换目录失败: ":"Failed to switch directory:","@13D1C:设置上游失败: ":"Setting upstream failed:",'@13D1C:确定要撤回文件 "':"Confirm to withdraw the file“",'@13D1C:" 的所有修改吗?此操作无法撤销。':"All modifications made? This operation cannot be undone.","@13D1C:撤回失败: ":"Withdrawal failed:","@13D1C:撤回文件修改失败: ":"Withdrawal of file modification failed:","@13D1C:自动更新状态变更: ":"Automatic update status change:","@13D1C:状态":"Status","@13D1C:当前目录不是Git仓库":"The current directory is not a Git repository","@13D1C:当前分支未设置上游分支":"The current branch has not set an upstream branch","@13D1C:首次推送后即可建立与远程的跟踪关系,后续可直接 pull/push。":"After the first push, a tracking relationship with the remote can be established, and subsequent pulls/pushes can be made directly.","@13D1C:设置上游并推送":"Set up upstream and push","@13D1C:个提交":"A commit","@13D1C:没有检测到任何更改":"No changes detected","@13D1C:工作区是干净的":"The workspace is clean","@13D1C:文件锁定功能说明":"File Lock Feature Explanation","@13D1C:锁定的文件在执行 Git 提交时会被自动跳过,不会被添加到暂存区":"Locked files will be automatically skipped when committing through this system and will not be added to the staging area (manual git commands are not affected)","@13D1C:当前没有锁定的文件":"There are currently no locked files","@13D1C:您可以在文件列表中点击锁定按钮来锁定文件":"You can click the lock button in the file list to lock the file","@13D1C:个文件":"A file","@13D1C:文件列表":"File List","@13D1C:已选中":"Selected","@13D1C:全选":"Select All","@13D1C:取消全选":"Deselect All","@13D1C:退出选择模式":"Exit Selection Mode","@13D1C:选择文件进行储藏":"Select Files to Stash","@A1833:选择作者":"Select author","@A1833:选择分支":"Select branch","@A1833:提交信息关键词":"Commit information keywords","@A1833:至":"To","@A1833:开始日期":"Start date","@A1833:结束日期":"End Date","@A1833:哈希":"Hash","@A1833:提交信息":"Commit message","@A1833:复制纯净提交信息(不含类型前缀)":"Copy pure commit information (excluding type prefix)","@A1833:日期":"Date","@A1833:作者":"Author","@A1833:没有找到变更文件":"No change file found","@A1833:加载中...":"Loading...","@A1833:没有匹配的提交记录":"There are no matching commit records","@A1833:未知":"Unknown","@A1833:提交详情: ":"Submission details:","@A1833:仅显示差异":"Diff only","@A1833:显示完整对比":"Full comparison","@A1833:打开文件失败":"Fail to open file","@A1833:用VSCode打开文件失败":"Failed to open file using VSCode","@A1833:提交信息已复制到剪贴板":"The submitted information has been copied to the clipboard","@A1833:复制失败":"Copy failed","@A1833:获取文件列表失败: ":"Failed to retrieve file list:","@A1833:获取提交详情失败: ":"Failed to obtain commit details:","@A1833:获取差异失败: ":"Failed to obtain differences:","@A1833:打开文件失败: ":"Failed to open file:","@A1833:用VSCode打开文件失败: ":"Failed to open file using VSCode:","@A1833:确定要撤销提交 ":"Confirm to withdraw commit","@A1833: 吗?这将创建一个新的提交来撤销这次提交的更改。":"Is that okay? This will create a new commit to undo the changes made in this commit.","@A1833:确定要将提交 ":"Confirm to submit","@A1833: Cherry-Pick 到当前分支吗?":"Is Cherry Pick going to the current branch?","@A1833:已复制提交哈希: ":"Copy submitted hash:","@A1833:复制提交哈希失败: ":"Copy commit hash failed:","@A1833:确定要将当前分支重置(hard)到提交 ":"Confirm to hard reset the current branch to commit","@A1833:提交历史":"Commit History","@A1833:分支":"Branch","@A1833:信息":"Information","@A1833:应用":"Search","@A1833:重置":"Reset","@A1833:查看详情":"View details","@A1833:复制提交哈希":"Copy and submit hash","@A1833:重置到该提交(hard)":"Reset to this commit (hard)","@A1833:撤销提交 (Revert)":"Revert Submission","@A1833:-Pick 到当前分支":"-Pick to the current branch","@A1833:隐藏筛选":"Hide Filter","@A1833:显示筛选":"Show Filter","@A1833:退出全屏":"Exit Fullscreen","@A1833:全屏显示":"Fullscreen","@A1833:刷新日志":"Refresh Log","@PSTART:项目启动项":"Project Startup Items","@PSTART:启动项列表":"Startup Items","@PSTART:有N项已失效":"{count} item(s) invalid","@PSTART:刷新页面自动执行":"Auto-run on startup","@PSTART:清理失效启动项":"Clean up invalid items","@PSTART:清理":"Clean","@PSTART:暂无启动项":"No startup items","@PSTART:工作流":"Workflow","@PSTART:命令":"Command","@PSTART:目录":"Directory","@PSTART:步骤":"Steps","@PSTART:删除":"Delete","@PSTART:添加启动项":"Add Startup Item","@PSTART:选择一个工作流":"Select a workflow","@PSTART:选择一个自定义命令":"Select a custom command","@PSTART:添加":"Add","@PSTART:请选择一个工作流":"Please select a workflow","@PSTART:请选择一个命令":"Please select a command","@PSTART:该启动项已存在":"This startup item already exists","@PSTART:已添加启动项":"Startup item added","@PSTART:已删除启动项":"Startup item deleted","@PSTART:删除确认":"Are you sure you want to delete this startup item?","@PSTART:删除启动项":"Delete Startup Item","@PSTART:取消":"Cancel","@PSTART:已清理N个失效启动项":"Cleaned up {count} invalid item(s)","@PSTART:没有需要清理的启动项":"No items to clean up","@PSTART:执行":"Execute","@PSTART:命令不存在":"Command does not exist","@PSTART:工作流不存在":"Workflow does not exist","@PSTART:已触发命令执行":"Command execution triggered","@PSTART:已触发工作流执行":"Workflow execution triggered","@ORCH:可视化编排":"Visual Orchestration","@ORCH:可视化编排工作台":"Visual Orchestration Workspace","@ORCH:已保存的编排":"Saved Orchestrations","@ORCH:新建编排":"New Orchestration","@ORCH:暂无编排":"No orchestrations","@ORCH:执行":"Execute","@ORCH:删除":"Delete","@ORCH:复制":"Duplicate","@ORCH:已复制":"Duplicated","@ORCH:未命名":"Untitled","@ORCH:编排名称(必填)":"Orchestration Name (Required)","@ORCH:编排描述(选填)":"Description (Optional)","@ORCH:保存编排":"Save Orchestration","@ORCH:节点工具箱":"Node Toolbox","@ORCH:代码节点":"Code Node","@ORCH:执行自定义代码":"Execute custom code","@ORCH:等待节点":"Wait Node","@ORCH:暂停指定时间":"Pause for specified time","@ORCH:版本管理":"Version Management","@ORCH:修改版本号或依赖":"Modify version or dependency","@ORCH:用户确认":"User Confirmation","@ORCH:等待用户确认后继续":"Wait for confirmation to continue","@ORCH:错误":"Error","@CMDCON:终端会话":"Terminal Sessions","@CMDCON:暂无终端会话":"No terminal sessions","@CMDCON:显示终端会话":"Show terminal sessions ({count})","@CMDCON:刷新":"Refresh","@CMDCON:隐藏":"Hide","@CMDCON:重新启动":"Restart","@CMDCON:删除":"Delete","@CMDCON:在新终端执行":"Execute in new terminal","@CMDCON:交互式模式":"Interactive mode: supports commands requiring input","@PUSH:正在推送":"Pushing...","@PUSH:推送成功":"Push successful","@PUSH:推送失败":"Push failed","@PUSH:计数对象":"Counting objects","@PUSH:压缩对象":"Compressing objects","@PUSH:写入对象":"Writing objects","@PUSH:解析增量":"Resolving deltas","@PUSH:详细信息":"Details","@PUSH:错误详情":"Error details","@PUSH:先拉取更新":"Pull first","@PUSH:检测到远程有新提交,请先拉取更新后再推送。":"Remote changes detected. Please pull updates before pushing.","@13D1C:你的分支领先":"Your branch is ahead of '{branch}' by {count} commit(s)","@13D1C:你的分支落后":"Your branch is behind '{branch}' by {count} commit(s)"},$o=["zh-CN","en-US"],Ua={"zh-CN":"简体中文","en-US":"English"},Vn=()=>{const j=localStorage.getItem("locale");return j&&$o.includes(j)?j:(navigator.language.startsWith("zh"),"zh-CN")},ra=Qo({legacy:!1,locale:Vn(),fallbackLocale:"zh-CN",messages:{"zh-CN":En,"en-US":Pn},globalInjection:!0});function Mn(j){var k;ra.global.locale.value=j,localStorage.setItem("locale",j),(k=document.querySelector("html"))==null||k.setAttribute("lang",j)}function Gn(){return ra.global.locale.value}const e=(j,k)=>ra.global.t(j,k);function So(j){if(!j)return"Zen GitSync";const i=j.replace(/\\/g,"/").split("/").filter(c=>c);return i.length>0?i[i.length-1]:"Zen GitSync"}const In=["width","height"],Do=ze({__name:"TreeIcon",props:{size:{default:"1em"}},setup(j){return(k,i)=>(r(),v("svg",{viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",width:k.size,height:k.size,fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"},i[0]||(i[0]=[Zo('<line x1="3" y1="2" x2="3" y2="14"></line><line x1="3" y1="4" x2="6" y2="4"></line><rect x="2" y="3" width="8" height="2" rx="0.5" fill="currentColor" stroke="none"></rect><line x1="3" y1="8" x2="6" y2="8"></line><rect x="4" y="7" width="8" height="2" rx="0.5" fill="currentColor" stroke="none"></rect><line x1="3" y1="12" x2="6" y2="12"></line><rect x="6" y="11" width="8" height="2" rx="0.5" fill="currentColor" stroke="none"></rect>',7)]),8,In))}}),Rn=["xlink:href"],Ln=ze({__name:"index",props:{iconClass:{type:String,required:!0},className:{type:String,default:""}},setup(j){const k=j,i=ie(()=>`#icon-${k.iconClass}`),c=ie(()=>k.className?`svg-icon ${k.className}`:"svg-icon");return(f,p)=>(r(),v("svg",{class:Xe(c.value),"aria-hidden":"true"},[a("use",{"xlink:href":i.value},null,8,Rn)],2))}}),Je=(j,k)=>{const i=j.__vccOpts||j;for(const[c,f]of k)i[c]=f;return i},Lt=Je(Ln,[["__scopeId","data-v-cd6b9497"]]),xn=["disabled"],Un=["src"],zn=ze({__name:"IconButton",props:{iconClass:{},imageUrl:{},size:{default:"medium"},disabled:{type:Boolean,default:!1},active:{type:Boolean,default:!1},tooltip:{default:""},customClass:{default:""},color:{default:""},hoverColor:{default:"var(--color-primary)"}},emits:["click"],setup(j,{emit:k}){Xo(h=>({eaeeb648:h.hoverColor}));const i=j,c=k,f=ie(()=>`icon-button--${i.size}`),p=h=>{i.disabled||c("click",h)};return(h,C)=>{const m=yt;return r(),x(m,{content:h.tooltip,disabled:!h.tooltip,placement:"bottom","show-after":300},{default:o(()=>[a("button",{class:Xe(["icon-button",[f.value,h.customClass,{"is-disabled":h.disabled,"is-active":h.active}]]),disabled:h.disabled,onClick:p},[h.iconClass?(r(),x(Lt,{key:0,"icon-class":h.iconClass,style:ls({color:h.color||void 0})},null,8,["icon-class","style"])):h.imageUrl?(r(),v("img",{key:1,src:h.imageUrl,alt:"icon",class:"icon-image"},null,8,Un)):Yt(h.$slots,"default",{key:2},void 0,!0)],10,xn)]),_:3},8,["content","disabled"])}}}),nt=Je(zn,[["__scopeId","data-v-f5ad545c"]]),Hn=["width","height"],Fo=ze({__name:"ListIcon",props:{size:{default:"1em"}},setup(j){return(k,i)=>(r(),v("svg",{viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",width:k.size,height:k.size,fill:"currentColor",stroke:"none"},i[0]||(i[0]=[a("rect",{x:"2",y:"3",width:"12",height:"2",rx:"0.5"},null,-1),a("rect",{x:"2",y:"7",width:"12",height:"2",rx:"0.5"},null,-1),a("rect",{x:"2",y:"11",width:"12",height:"2",rx:"0.5"},null,-1)]),8,Hn))}}),Ut=wa("config",()=>{const j=_(""),k=_([]),i=_([]),c=_([]),f=_([]),p=_([]),h=_([]),C=_([]),m=_([]),S=_(!1),M=_({enabled:!1,type:"command",refId:""}),b=_(!1),P=_(!1),n=_(""),d=_(""),F=_(""),w=_(!0),E=_(!1);function H(J){F.value=J||""}const z=localStorage.getItem("zen-gitsync-auto-close-push-modal");z!==null&&(w.value=z==="true"),Ze(w,J=>{localStorage.setItem("zen-gitsync-auto-close-push-modal",J.toString())});const A=localStorage.getItem("zen-gitsync-auto-set-default-message");A!==null&&(E.value=A==="true"),Ze(E,J=>{localStorage.setItem("zen-gitsync-auto-set-default-message",J.toString())});const O=ie(()=>({defaultCommitMessage:j.value,descriptionTemplates:k.value,scopeTemplates:i.value,messageTemplates:c.value,commandTemplates:f.value,lockedFiles:p.value,customCommands:h.value,orchestrations:C.value,startupItems:m.value,startupAutoRun:S.value,afterQuickPushAction:M.value,currentDirectory:F.value})),Y=ie(()=>!!(n.value&&n.value.trim()));async function ce(){try{const J=await fetch("/api/config/open-file",{method:"POST",headers:{"Content-Type":"application/json"}}),Ce=await J.json().catch(()=>({}));return J.ok&&(Ce!=null&&Ce.success)?(u.success(e("@D50BB:已打开系统配置文件")),!0):(u.error(`${e("@D50BB:打开系统配置文件失败: ")}${(Ce==null?void 0:Ce.error)||""}`),!1)}catch(J){return u.error(`${e("@D50BB:打开系统配置文件失败: ")}${J.message}`),!1}}async function X(J=!1){var Ce,Oe,lt;if(!J&&P.value&&!b.value)return console.log(e("@D50BB:使用缓存的配置信息")),O.value;b.value=!0;try{b.value=!0,console.log(e("@D50BB:加载配置信息..."));const V=await fetch("/api/config/getConfig"),y=await V.json().catch(()=>({}));if(!V.ok||y&&y.success===!1){const ae=String((y==null?void 0:y.error)||e("@D50BB:加载配置失败")),Fe=String((y==null?void 0:y.configPath)||""),ye=Fe?`
|
|
11
|
-
${e("@D50BB:配置文件")}: ${Fe}`:"";return u.error(`${e("@D50BB:加载配置失败: ")}${ae}${ye}`),n.value=ae,d.value=Fe,null}return n.value="",d.value="",j.value=y.defaultCommitMessage||"",k.value=y.descriptionTemplates||[],i.value=y.scopeTemplates||[],c.value=y.messageTemplates||[],f.value=y.commandTemplates||[],p.value=y.lockedFiles||[],h.value=y.customCommands||[],C.value=y.orchestrations||[],m.value=(y.startupItems||[]).map(ae=>({id:String((ae==null?void 0:ae.id)??""),type:(ae==null?void 0:ae.type)==="workflow"?"workflow":"command",refId:String((ae==null?void 0:ae.refId)??(ae==null?void 0:ae.commandId)??""),createdAt:Number((ae==null?void 0:ae.createdAt)??Date.now()),enabled:typeof(ae==null?void 0:ae.enabled)=="boolean"?ae.enabled:!0})).filter(ae=>ae.id&&ae.refId),S.value=y.startupAutoRun||!1,M.value={enabled:!!((Ce=y==null?void 0:y.afterQuickPushAction)!=null&&Ce.enabled),type:((Oe=y==null?void 0:y.afterQuickPushAction)==null?void 0:Oe.type)==="workflow"?"workflow":"command",refId:String(((lt=y==null?void 0:y.afterQuickPushAction)==null?void 0:lt.refId)||"").trim()},y.currentDirectory&&(F.value=y.currentDirectory),P.value=!0,console.log(e("@D50BB:配置信息加载完成")),O.value}catch(V){return console.error("加载配置失败:",V),u.error(`${e("@D50BB:加载配置失败: ")}${V.message}`),n.value=V.message,null}finally{b.value=!1}}async function T(J){try{const Oe=await(await fetch("/api/config/saveDefaultMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({defaultCommitMessage:J})})).json();return Oe.success?(j.value=J,u.success(e("@D50BB:默认提交信息已保存")),!0):(u.error(`${e("@D50BB:保存失败: ")}${Oe.error}`),!1)}catch(Ce){return u.error(`${e("@D50BB:保存失败: ")}${Ce.message}`),!1}}async function B(J){try{const Oe=await(await fetch("/api/config/save-after-quick-push-action",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({afterQuickPushAction:{enabled:!!(J!=null&&J.enabled),type:(J==null?void 0:J.type)==="workflow"?"workflow":"command",refId:String((J==null?void 0:J.refId)||"").trim()}})})).json();return Oe.success?(M.value={enabled:!!(J!=null&&J.enabled),type:(J==null?void 0:J.type)==="workflow"?"workflow":"command",refId:String((J==null?void 0:J.refId)||"").trim()},!0):(u.error(`保存提交后启动项失败: ${Oe.error}`),!1)}catch(Ce){return u.error(`保存提交后启动项失败: ${Ce.message}`),!1}}async function se(J,Ce){try{const lt=await(await fetch("/api/config/save-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({template:J,type:Ce})})).json();return lt.success?(Ce==="description"?k.value.includes(J)||k.value.push(J):Ce==="scope"?i.value.includes(J)||i.value.push(J):Ce==="message"?c.value.includes(J)||c.value.push(J):Ce==="command"&&(f.value.includes(J)||f.value.push(J)),u.success(e("@D50BB:模板已保存")),!0):(u.error(`${e("@D50BB:保存模板失败: ")}${lt.error}`),!1)}catch(Oe){return u.error(`${e("@D50BB:保存模板失败: ")}${Oe.message}`),!1}}async function _e(J,Ce){try{const lt=await(await fetch("/api/config/delete-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({template:J,type:Ce})})).json();return lt.success?(Ce==="description"?k.value=k.value.filter(V=>V!==J):Ce==="scope"?i.value=i.value.filter(V=>V!==J):Ce==="message"?c.value=c.value.filter(V=>V!==J):Ce==="command"&&(f.value=f.value.filter(V=>V!==J)),u.success(e("@D50BB:模板已删除")),!0):(u.error(`${e("@D50BB:删除模板失败: ")}${lt.error}`),!1)}catch(Oe){return u.error(`${e("@D50BB:删除模板失败: ")}${Oe.message}`),!1}}async function De(J,Ce,Oe){try{const V=await(await fetch("/api/config/update-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldTemplate:J,newTemplate:Ce,type:Oe})})).json();if(V.success){if(Oe==="description"){const y=k.value.indexOf(J);y!==-1&&(k.value[y]=Ce)}else if(Oe==="scope"){const y=i.value.indexOf(J);y!==-1&&(i.value[y]=Ce)}else if(Oe==="message"){const y=c.value.indexOf(J);y!==-1&&(c.value[y]=Ce)}else if(Oe==="command"){const y=f.value.indexOf(J);y!==-1&&(f.value[y]=Ce)}return u.success(e("@D50BB:模板已更新")),!0}else return u.error(`${e("@D50BB:更新模板失败: ")}${V.error}`),!1}catch(lt){return u.error(`${e("@D50BB:更新模板失败: ")}${lt.message}`),!1}}async function ue(J,Ce){try{const lt=await(await fetch("/api/config/pin-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({template:J,type:Ce})})).json();return lt.success?(Ce==="description"?(k.value=k.value.filter(V=>V!==J),k.value.unshift(J)):Ce==="scope"?(i.value=i.value.filter(V=>V!==J),i.value.unshift(J)):Ce==="message"?(c.value=c.value.filter(V=>V!==J),c.value.unshift(J)):Ce==="command"&&(f.value=f.value.filter(V=>V!==J),f.value.unshift(J)),u.success(e("@D50BB:模板已置顶")),!0):(u.error(`${e("@D50BB:置顶模板失败: ")}${lt.error}`),!1)}catch(Oe){return u.error(`${e("@D50BB:置顶模板失败: ")}${Oe.message}`),!1}}async function be(){try{const Ce=await(await fetch("/api/locked-files")).json();return Ce.success?(p.value=Ce.lockedFiles||[],Ce.lockedFiles):(u.error(`${e("@D50BB:加载锁定文件列表失败: ")}${Ce.error}`),[])}catch(J){return console.error("加载锁定文件列表失败:",J),u.error(`${e("@D50BB:加载锁定文件列表失败: ")}${J.message}`),[]}}async function G(J){try{const Oe=await(await fetch("/api/lock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:J})})).json();return Oe.success?(await be(),u.success(`${e("@D50BB:文件已锁定: ")}${J}`),!0):(u.error(`${e("@D50BB:锁定文件失败: ")}${Oe.error}`),!1)}catch(Ce){return console.error("锁定文件失败:",Ce),u.error(`${e("@D50BB:锁定文件失败: ")}${Ce.message}`),!1}}async function q(J){try{const Oe=await(await fetch("/api/unlock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:J})})).json();return Oe.success?(await be(),u.success(`${e("@D50BB:文件已解锁: ")}${J}`),!0):(u.error(`${e("@D50BB:解锁文件失败: ")}${Oe.error}`),!1)}catch(Ce){return console.error("解锁文件失败:",Ce),u.error(`${e("@D50BB:解锁文件失败: ")}${Ce.message}`),!1}}async function ge(J){try{const Oe=await(await fetch("/api/check-file-lock",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:J})})).json();return Oe.success?Oe.isLocked:(console.error("检查文件锁定状态失败:",Oe.error),!1)}catch(Ce){return console.error("检查文件锁定状态失败:",Ce),!1}}async function Q(J){try{const Oe=await(await fetch("/api/config/save-custom-command",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:J})})).json();return Oe.success?(await X(!0),u.success(e("@CMD01:命令已保存")),!0):(u.error(`${e("@CMD01:保存命令失败: ")}${Oe.error}`),!1)}catch(Ce){return u.error(`${e("@CMD01:保存命令失败: ")}${Ce.message}`),!1}}async function re(J){try{const Oe=await(await fetch("/api/config/delete-custom-command",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:J})})).json();return Oe.success?(await X(!0),u.success(e("@CMD01:命令已删除")),!0):(u.error(`${e("@CMD01:删除命令失败: ")}${Oe.error}`),!1)}catch(Ce){return u.error(`${e("@CMD01:删除命令失败: ")}${Ce.message}`),!1}}async function ne(J,Ce){try{const lt=await(await fetch("/api/config/update-custom-command",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:J,command:Ce})})).json();return lt.success?(await X(!0),u.success(e("@CMD01:命令已更新")),!0):(u.error(`${e("@CMD01:更新命令失败: ")}${lt.error}`),!1)}catch(Oe){return u.error(`${e("@CMD01:更新命令失败: ")}${Oe.message}`),!1}}async function te(J){try{const Oe=await(await fetch("/api/config/save-orchestration",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({orchestration:J})})).json();return Oe.success?(await X(!0),u.success(e("@ORCH:编排已保存")),Oe.orchestration||null):(u.error(`${e("@ORCH:保存编排失败: ")}${Oe.error}`),null)}catch(Ce){return u.error(`${e("@ORCH:保存编排失败: ")}${Ce.message}`),null}}async function Ge(J){try{const Oe=await(await fetch("/api/config/delete-orchestration",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:J})})).json();return Oe.success?(await X(!0),u.success(e("@ORCH:编排已删除")),!0):(u.error(`${e("@ORCH:删除编排失败: ")}${Oe.error}`),!1)}catch(Ce){return u.error(`${e("@ORCH:删除编排失败: ")}${Ce.message}`),!1}}async function fe(J,Ce){try{const lt=await(await fetch("/api/config/update-orchestration",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:J,orchestration:Ce})})).json();return lt.success?(await X(!0),u.success(e("@ORCH:编排已更新")),!0):(u.error(`${e("@ORCH:更新编排失败: ")}${lt.error}`),!1)}catch(Oe){return u.error(`${e("@ORCH:更新编排失败: ")}${Oe.message}`),!1}}async function We(J,Ce){try{const lt=await(await fetch("/api/config/save-startup-items",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({startupItems:J,startupAutoRun:Ce!==void 0?Ce:S.value})})).json();return lt.success?(m.value=J,Ce!==void 0&&(S.value=Ce),!0):(u.error(`保存启动项失败: ${lt.error}`),!1)}catch(Oe){return u.error(`保存启动项失败: ${Oe.message}`),!1}}return{defaultCommitMessage:j,descriptionTemplates:k,scopeTemplates:i,messageTemplates:c,commandTemplates:f,lockedFiles:p,customCommands:h,orchestrations:C,startupItems:m,startupAutoRun:S,afterQuickPushAction:M,isLoading:b,isLoaded:P,configLoadError:n,configFilePath:d,hasConfigLoadError:Y,currentDirectory:F,config:O,autoClosePushModal:w,autoSetDefaultMessage:E,loadConfig:X,setCurrentDirectory:H,openSystemConfigFile:ce,saveTemplate:se,saveDefaultMessage:T,deleteTemplate:_e,updateTemplate:De,pinTemplate:ue,loadLockedFiles:be,lockFile:G,unlockFile:q,isFileLocked:ge,saveCustomCommand:Q,deleteCustomCommand:re,updateCustomCommand:ne,saveOrchestration:te,deleteOrchestration:Ge,updateOrchestration:fe,saveStartupItems:We,saveAfterQuickPushAction:B}}),fa=800;function Wn(){const j=window.location.port||"80";if(j==="5173"||j==="4173"||j==="5544"){const i="3002";return console.log(`${e("@C298B:开发环境:从环境变量读取后端端口 ")}${i}`),parseInt(i,10)}const k=parseInt(j,10);return console.log(`${e("@C298B:生产环境:使用当前页面端口 ")}${k}`),k}const jn=Wn(),Tt=wa("git",()=>{const j=Ut(),k=_(""),i=_([]),c=_(""),f=_(""),p=_(!1),h=_(!1),C=_(!1),m=_(0),S=_(""),M=_(!1),b=_(!1),P=_(!1),n=_(!1),d=_(!1),F=_(0),w=_(0),E=_(!1),H=_(""),z=_(0),A=_(""),O=_(null),Y=_(""),ce=_(""),X=_([]),T=_({staged:[],unstaged:[],untracked:[]}),B=_([]),se=_(!1),_e=_(!1),De=_(!1),ue=_(!1),be=_(!1),G=_(1),q=_(!0),ge=_(0),Q=_([]),re=_(!1),ne=_(!1),te=_(!1),Ge=_(!1);function fe(){k.value="",i.value=[],c.value="",f.value="",p.value=!1,h.value=!1,C.value=!1,m.value=0,F.value=0,w.value=0,E.value=!1,H.value="",z.value=0,b.value=!1,P.value=!1,n.value=!1,d.value=!1,S.value="",M.value=!1,X.value=[],T.value={staged:[],unstaged:[],untracked:[]},B.value=[],se.value=!1,_e.value=!1,De.value=!1,ue.value=!1,be.value=!1,G.value=1,q.value=!0,ge.value=0}async function We(pe=!1,le=!1){if(C.value)try{console.log(e("@C298B:获取分支状态..."));let Re="/api/branch-status";const Qe=[];pe&&Qe.push("force=true"),le&&Qe.push("countOnly=true"),Qe.length>0&&(Re+="?"+Qe.join("&"));const Ot=await(await fetch(Re)).json();Ot&&(F.value=Ot.ahead||0,w.value=Ot.behind||0,E.value=Ot.hasUpstream||!1,H.value=Ot.upstreamBranch||"",console.log(`${e("@C298B:分支状态更新:领先 ")}${F.value}${e("@C298B: 个提交,落后 ")}${w.value}${e("@C298B: 个提交,上游分支:")}${E.value?H.value:e("@C298B:无")}`))}catch(Re){console.error("获取分支状态失败:",Re),F.value=0,w.value=0,E.value=!1,H.value=""}}async function J(){const pe=Date.now();if(pe-m.value<1e3)return console.log("使用缓存的Git仓库状态:",C.value?"是":e("@C298B:不是")),C.value;try{const Re=await(await fetch("/api/current_directory")).json();return C.value=Re.isGitRepo===!0,m.value=pe,console.log(`${e("@C298B:当前目录")}${C.value?e("@C298B:是"):e("@C298B:不是")}${e("@C298B:Git仓库")}`),C.value}catch(le){return console.error("检查Git仓库状态失败:",le),C.value=!1,m.value=pe,!1}}async function Ce(pe=!1){try{const Qe=await(await fetch(pe?"/api/branch?force=true":"/api/branch")).json();Qe.branch&&(k.value=Qe.branch,console.log(`${e("@C298B:当前分支更新为: ")}${Qe.branch}${pe?e("@C298B: (强制刷新)"):""}`))}catch(le){console.error("获取分支信息失败:",le)}}async function Oe(){if(C.value)try{console.log(e("@C298B:获取所有分支..."));const le=await(await fetch("/api/branches")).json();le.branches&&Array.isArray(le.branches)&&(i.value=le.branches,z.value=Date.now(),console.log(`${e("@C298B:获取到")}${le.branches.length}${e("@C298B:个分支")}`))}catch(pe){console.error("获取所有分支信息失败:",pe)}}async function lt(pe){console.log("切换到分支:",pe);try{p.value=!0;const Re=await(await fetch("/api/checkout",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({branch:pe})})).json();return Re.success?(u({message:`${e("@C298B:已切换到分支: ")}${pe}`,type:"success"}),await Ce(!0),await We(!0),!0):(u({message:`${e("@C298B:切换分支失败: ")}${Re.error}`,type:"error"}),!1)}catch(le){return u({message:`${e("@C298B:切换分支失败: ")}${le.message}`,type:"error"}),!1}finally{p.value=!1}}async function V(){try{const le=await(await fetch("/api/user-info")).json();le.name&&le.email&&(c.value=le.name,f.value=le.email)}catch(pe){console.error("获取用户信息失败:",pe)}}async function y(pe,le){if(!pe.trim())return u({message:e("@C298B:分支名称不能为空"),type:"warning"}),!1;try{h.value=!0;const Qe=await(await fetch("/api/create-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newBranchName:pe,baseBranch:le||k.value})})).json();return Qe.success?(u({message:`${e("@C298B:已创建并切换到分支: ")}${pe}`,type:"success"}),await Ce(!0),await We(!0),await Oe(),!0):(u({message:`${e("@C298B:创建分支失败: ")}${Qe.error}`,type:"error"}),!1)}catch(Re){return u({message:`${e("@C298B:创建分支失败: ")}${Re.message}`,type:"error"}),!1}finally{h.value=!1}}async function ae(){try{const le=await(await fetch("/api/clear-user-config",{method:"POST"})).json();return le.success?(c.value="",f.value="",u({message:e("@C298B:已清除Git用户配置"),type:"success"}),!0):(u({message:`${e("@C298B:清除配置失败: ")}${le.error}`,type:"error"}),!1)}catch(pe){return u({message:`${e("@C298B:清除配置失败: ")}${pe.message}`,type:"error"}),!1}}async function Fe(pe,le){try{const Qe=await(await fetch("/api/restore-user-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:pe,email:le})})).json();return Qe.success?(c.value=pe,f.value=le,u({message:e("@C298B:已恢复Git用户配置"),type:"success"}),!0):(u({message:`${e("@C298B:恢复配置失败: ")}${Qe.error}`,type:"error"}),!1)}catch(Re){return u({message:`${e("@C298B:恢复配置失败: ")}${Re.message}`,type:"error"}),!1}}async function ye(){if(!C.value)return u({message:e("@C298B:当前目录不是Git仓库"),type:"warning"}),!1;try{P.value=!0;const le=await(await fetch("/api/pull",{method:"POST"})).json();return le.success?(u({message:e("@C298B:拉取成功"),type:"success"}),await We(),!0):(le.needsMerge?u({message:`${e("@C298B:需要合并更改: ")}${le.pullOutput||e("@C298B:存在冲突需要手动解决")}`,type:"warning",duration:5e3}):u({message:`${e("@C298B:拉取失败: ")}${le.error}`,type:"error"}),!1)}catch(pe){return u({message:`${e("@C298B:拉取失败: ")}${pe.message}`,type:"error"}),!1}finally{P.value=!1}}async function Ne(){if(!C.value)return u({message:e("@C298B:当前目录不是Git仓库"),type:"warning"}),!1;try{n.value=!0;const le=await(await fetch("/api/fetch-all",{method:"POST"})).json();return le.success?(u({message:e("@C298B:获取所有远程分支信息成功"),type:"success"}),await We(),!0):(u({message:`${e("@C298B:获取远程分支信息失败: ")}${le.error}`,type:"error"}),!1)}catch(pe){return u({message:`${e("@C298B:获取远程分支信息失败: ")}${pe.message}`,type:"error"}),!1}finally{n.value=!1}}async function ut(){O.value&&O.value.disconnect();try{const pe=`http://localhost:${jn}`;if(console.log("尝试连接Socket.IO服务器:",pe),O.value=Ja(pe,{reconnectionDelayMax:1e4,reconnection:!0,reconnectionAttempts:10,reconnectionDelay:1e3,timeout:2e4,autoConnect:!0,forceNew:!0,transports:["websocket","polling"]}),!O.value){console.error("Socket.IO初始化失败: socket为null");return}console.log(e("@C298B:Socket.IO客户端已创建,开始注册事件监听器...")),O.value.on("connect",()=>{var le;console.log("✅ Socket.IO连接成功,事件监听器已生效,Socket ID:",(le=O.value)==null?void 0:le.id)}),O.value.on("project_info",le=>{Y.value=le.projectPath,ce.value=le.projectRoomId,console.log(`${e("@C298B:当前项目: ")}${le.projectPath}`),console.log(`${e("@C298B:房间ID: ")}${le.projectRoomId}`)}),O.value.on("project_changed",le=>{console.log(`${e("@C298B:项目已切换: ")}${le.oldProjectPath} -> ${le.newProjectPath}`),Y.value=le.newProjectPath,ce.value=le.newProjectRoomId,O.value&&O.value.emit("join_room",le.newProjectRoomId),console.log(`${e("@C298B:已加入新项目房间: ")}${le.newProjectRoomId}`)}),O.value.on("disconnect",le=>{console.log("与Socket.IO服务器断开连接:",le)}),O.value.on("git_status_update",le=>{if(console.log("✅ 成功监听到 git_status_update 事件:",new Date().toLocaleTimeString()),console.log("git_status_update data ==>",le),console.log("currentProjectPath.value ==>",Y.value),console.log("data.projectPath ==>",le.projectPath),le.projectPath&&Y.value&&le.projectPath!==Y.value){console.log(`${e("@C298B:忽略不同项目的状态更新: ")}${le.projectPath}`);return}console.log(e("@C298B:正在更新 Git 文件状态...")),le.porcelain!==void 0&&me(le.porcelain)}),O.value.on("connect_error",le=>{console.error("Socket连接错误:",le.message)}),O.value.on("connect_timeout",()=>{console.error(e("@C298B:Socket连接超时"))}),O.value.on("reconnect",le=>{console.log(`${e("@C298B:Socket重连成功,尝试次数: ")}${le}`)}),O.value.on("reconnect_attempt",le=>{console.log(`${e("@C298B:Socket尝试重连,第 ")}${le}${e("@C298B: 次尝试")}`)}),O.value.on("reconnect_error",le=>{console.error("Socket重连错误:",le.message)}),O.value.on("reconnect_failed",()=>{console.error(e("@C298B:Socket重连失败,已达到最大重试次数"))}),console.log(e("@C298B:Socket.IO事件监听器注册完成:connect, project_info, project_changed, git_status_update, monitoring_status")),O.value&&!O.value.connected&&(console.log(e("@C298B:Socket未连接,尝试手动连接...")),O.value.connect())}catch(pe){console.error("Socket.IO连接初始化失败:",pe)}}function me(pe){if(pe===void 0||pe===""){B.value=[];return}const le=pe.split(`
|
|
12
|
-
`),Re=[];for(const Qe of le){const kt=Qe.match(/^([ MADRCU\?]{2})\s+(.+)$/);if(kt){let Ot="";const Jt=kt[1],Xt=Jt.charAt(0),$s=Jt.charAt(1);Jt==="UU"||Jt==="AA"||Jt==="DD"||Jt==="AU"||Jt==="UA"||Jt==="DU"||Jt==="UD"?Ot="conflicted":Xt==="A"||Xt==="M"||Xt==="D"||Xt==="R"?Ot="added":Xt===" "&&$s==="M"?Ot="modified":Xt===" "&&$s==="D"?Ot="deleted":Jt==="??"?Ot="untracked":Ot="other",Re.push({path:kt[2],type:Ot})}}B.value=Re}async function $e(pe=!0){if(!C.value){console.log(e("@C298B:当前目录不是Git仓库,跳过加载提交历史"));return}try{se.value=!0,console.log(e("@C298B:开始加载提交历史..."));const le=new Date().getTime(),Qe=await(await fetch(`/api/log?page=1&_t=${le}`)).json();Qe&&Qe.data&&Array.isArray(Qe.data)?(X.value=[...Qe.data],console.log(`${e("@C298B:提交历史加载完成,共 ")}${X.value.length}${e("@C298B: 条记录")}`)):(console.warn("API返回的提交历史格式不正确:",Qe),X.value=[])}catch(le){console.error("获取提交历史失败:",le),pe&&u({message:`${e("@C298B:获取提交历史失败: ")}${le.message}`,type:"error"})}finally{se.value=!1}}async function He(){console.log(e("@C298B:刷新提交历史...")),G.value=1,q.value=!1,await $e(!0),ge.value=X.value.length,console.log(e("@C298B:提交历史刷新完成"))}async function je(){if(!C.value){console.log(e("@C298B:当前目录不是Git仓库,跳过加载Git状态"));return}try{_e.value=!0,await Ae()}catch(pe){console.error("获取Git状态失败:",pe),u({message:`${e("@C298B:获取Git状态失败: ")}${pe.message}`,type:"error"})}finally{_e.value=!1}}async function Ae(){if(console.log(e("@C298B:开始获取Git状态(porcelain格式)...")),!C.value){console.log(e("@C298B:当前目录不是Git仓库,跳过加载Git状态"));return}try{const le=await(await fetch("/api/status_porcelain")).json();le.status!==void 0?me(le.status):B.value=[]}catch(pe){console.error("获取Git状态(porcelain)失败:",pe),u({message:`${e("@C298B:获取Git状态(porcelain)失败: ")}${pe.message}`,type:"error"}),B.value=[]}}async function ht(){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{De.value=!0;const pe=B.value.filter(le=>{const Re=le.path.replace(/\\/g,"/");return!j.lockedFiles.some(kt=>{const Ot=kt.replace(/\\/g,"/");return Re===Ot})});if(pe.length===0)return u({message:e("@C298B:没有需要暂存的文件(所有文件都被锁定)"),type:"warning"}),!1;if(pe.length===B.value.length){const Re=await(await fetch("/api/add",{method:"POST"})).json();return Re.success?(u({message:e("@C298B:文件已添加到暂存区"),type:"success"}),await Ae(),!0):(u({message:`${e("@C298B:添加文件失败: ")}${Re.error}`,type:"error"}),!1)}else{const Re=await(await fetch("/api/add-filtered",{method:"POST"})).json();if(Re.success){const Qe=B.value.length-pe.length;let kt=`${e("@C298B:已添加 ")}${pe.length}${e("@C298B: 个文件到暂存区")}`;return Qe>0&&(kt+=`${e("@C298B:,跳过 ")}${Qe}${e("@C298B: 个锁定文件")}`),u({message:kt,type:"success"}),await Ae(),!0}else return u({message:`${e("@C298B:添加文件失败: ")}${Re.error}`,type:"error"}),!1}}catch(pe){return u({message:`${e("@C298B:添加文件失败: ")}${pe.message}`,type:"error"}),!1}finally{De.value=!1}}async function Pt(){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{De.value=!0;const le=await(await fetch("/api/add-all",{method:"POST"})).json();return le.success?(u({message:e("@C298B:所有文件已添加到暂存区"),type:"success"}),await Ae(),!0):(u({message:`${e("@C298B:添加文件失败: ")}${le.error}`,type:"error"}),!1)}catch(pe){return u({message:`${e("@C298B:添加文件失败: ")}${pe.message}`,type:"error"}),!1}finally{De.value=!1}}async function Ft(pe){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{De.value=!0;const Re=await(await fetch("/api/add-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:pe})})).json();return Re.success?(u({message:e("@C298B:文件已暂存"),type:"success"}),je(),!0):(u({message:`${e("@C298B:暂存文件失败: ")}${Re.error}`,type:"error"}),!1)}catch(le){return u({message:`${e("@C298B:暂存文件失败: ")}${le.message}`,type:"error"}),!1}finally{De.value=!1}}async function Bt(pe){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{be.value=!0;const Re=await(await fetch("/api/unstage-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:pe})})).json();return Re.success?(u({message:e("@C298B:已取消暂存文件"),type:"success"}),je(),!0):(u({message:`${e("@C298B:取消暂存失败: ")}${Re.error}`,type:"error"}),!1)}catch(le){return u({message:`${e("@C298B:取消暂存失败: ")}${le.message}`,type:"error"}),!1}finally{be.value=!1}}function $(pe){return new Promise(le=>setTimeout(le,pe))}async function N(pe,le=!1,Re={}){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;const{autoRefresh:Qe=!0}=Re;try{ue.value=!0;const Ot=await(await fetch("/api/commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:pe,hasNewlines:pe.includes(`
|
|
13
|
-
`),noVerify:le})})).json();return Ot.success?(u({message:e("@C298B:提交成功"),type:"success"}),Qe&&(await Ae(),await $e(!1),We(!0)),!0):(u({message:`${e("@C298B:commitChanges 提交失败: ")}${Ot.error}`,type:"error"}),!1)}catch(kt){return u({message:`${e("@C298B:提交失败: ")}${kt.message}`,type:"error"}),!1}finally{ue.value=!1}}async function Z(){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{b.value=!0;const le=await(await fetch("/api/push",{method:"POST"})).json();return le.success?(F.value=0,w.value=0,await Promise.all([je(),$e()]),console.log("推送成功,分支状态已设置为同步 (ahead=0, behind=0)"),!0):(u({message:`${e("@C298B:推送失败: ")}${le.error}`,type:"error"}),!1)}catch(pe){return u({message:`${e("@C298B:推送失败: ")}${pe.message}`,type:"error"}),!1}finally{b.value=!1}}async function Se(pe){return C.value?new Promise(le=>{try{b.value=!0,fetch("/api/push-with-progress",{method:"POST"}).then(Re=>{var Jt;const Qe=(Jt=Re.body)==null?void 0:Jt.getReader(),kt=new TextDecoder;if(!Qe)throw new Error("无法读取响应流");(async()=>{try{for(;;){const{done:Xt,value:$s}=await Qe.read();if(Xt)break;const Es=kt.decode($s,{stream:!0}).split(`
|
|
14
|
-
`);for(const Ps of Es)if(Ps.startsWith("data: "))try{const fs=JSON.parse(Ps.slice(6));pe&&pe(fs),fs.type==="complete"&&(b.value=!1,fs.success?(F.value=0,w.value=0,Promise.all([je(),$e()]),le(!0)):(u({message:`${e("@C298B:推送失败: ")}${fs.error}`,type:"error"}),le(!1)))}catch(fs){console.error("解析SSE数据失败:",fs)}}}catch(Xt){console.error("读取流失败:",Xt),b.value=!1,u({message:`${e("@C298B:推送失败: ")}${Xt.message}`,type:"error"}),le(!1)}})()}).catch(Re=>{b.value=!1,u({message:`${e("@C298B:推送失败: ")}${Re.message}`,type:"error"}),le(!1)})}catch(Re){b.value=!1,u({message:`${e("@C298B:推送失败: ")}${Re.message}`,type:"error"}),le(!1)}}):(u.warning(e("@C298B:当前目录不是Git仓库")),!1)}async function Pe(pe,le={}){if(!C.value)return u({message:e("@C298B:当前目录不是Git仓库"),type:"warning"}),!1;if(!pe)return u({message:e("@C298B:请选择要合并的分支"),type:"warning"}),!1;if(pe===k.value)return u({message:e("@C298B:不能合并当前分支到自身"),type:"warning"}),!1;const Re=`Merge branch '${pe}' into ${k.value}`;try{d.value=!0;const Qe=await fetch("/api/merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({branch:pe,...le})}),kt=await Qe.json();return Qe.status===409?(A.value=le.message||Re,u({message:e("@C298B:合并分支时发生冲突,请手动解决"),type:"warning",duration:5e3}),!1):(A.value="",kt.success?(u({message:`${e("@C298B:成功合并分支 ")}${pe}${e("@C298B: 到 ")}${k.value}`,type:"success"}),await je(),await We(),!0):(u({message:`${e("@C298B:合并分支失败: ")}${kt.error}`,type:"error"}),!1))}catch(Qe){return u({message:`${e("@C298B:合并分支失败: ")}${Qe.message}`,type:"error"}),!1}finally{d.value=!1}}async function xe(pe,le=!1){if(console.log(e("@C298B:开始暂存并提交操作...")),!await ht())return!1;console.log(e("@C298B:暂存完成,等待Git操作完成...")),await $(fa),console.log(e("@C298B:开始提交更改..."));const Qe=await N(pe,le);return console.log(e("@C298B:暂存并提交操作完成")),Qe}async function de(pe,le=!1){try{if(console.log(e("@C298B:开始暂存文件...")),!await ht()||(console.log(e("@C298B:暂存完成,等待Git操作完成...")),await $(fa),console.log(e("@C298B:开始提交更改...")),!await N(pe,le)))return!1;console.log(e("@C298B:提交完成,等待Git操作完成...")),await $(fa),console.log(e("@C298B:开始推送到远程..."));const kt=await Z();return console.log(e("@C298B:一键推送操作完成,状态已统一刷新")),kt}catch(Re){console.error("一键推送操作失败:",Re);try{(await(await fetch("/api/remove-lock",{method:"POST"})).json()).success&&u({message:e("@C298B:检测到Git锁定文件冲突,已自动清理,请重试操作"),type:"warning"})}catch(Qe){console.error("清理锁定文件失败:",Qe)}u({message:`${e("@C298B:操作失败: ")}${Re.message}`,type:"error"});try{await Promise.all([je(),$e(),We()])}catch(Qe){console.error("刷新状态失败:",Qe)}return!1}}async function g(){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{be.value=!0;const le=await(await fetch("/api/reset-head",{method:"POST"})).json();return le.success?(u({message:e("@C298B:已重置暂存区"),type:"success"}),je(),!0):(u({message:`${e("@C298B:重置暂存区失败: ")}${le.error}`,type:"error"}),!1)}catch(pe){return u({message:`${e("@C298B:重置暂存区失败: ")}${pe.message}`,type:"error"}),!1}finally{be.value=!1}}async function D(pe){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{be.value=!0;const Re=await(await fetch("/api/reset-to-remote",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({branch:pe})})).json();return Re.success?(u({message:`${e("@C298B:已重置分支 ")}${pe}${e("@C298B: 到远程状态")}`,type:"success"}),je(),$e(),!0):(u({message:`${e("@C298B:重置分支失败: ")}${Re.error}`,type:"error"}),!1)}catch(le){return u({message:`${e("@C298B:重置分支失败: ")}${le.message}`,type:"error"}),!1}finally{be.value=!1}}async function ee(){if(C.value)try{M.value=!0,console.log(e("@C298B:获取远程仓库地址..."));const le=await(await fetch("/api/remote-url")).json();le.success?(S.value=le.url||"",console.log(`${e("@C298B:获取到远程仓库地址: ")}${S.value}`)):(console.warn("获取远程仓库地址失败:",le.error),S.value="")}catch(pe){console.error("获取远程仓库地址失败:",pe),S.value=""}finally{M.value=!1}}async function ke(){if(!S.value)return u({message:e("@C298B:没有可复制的远程仓库地址"),type:"warning"}),!1;try{return await navigator.clipboard.writeText(S.value),u({message:e("@C298B:已复制远程仓库地址"),type:"success"}),!0}catch(pe){return console.error("复制远程仓库地址失败:",pe),u({message:`${e("@C298B:复制失败: ")}${pe.message}`,type:"error"}),!1}}async function K(){if(!S.value)return u({message:e("@C298B:没有可复制的远程仓库地址"),type:"warning"}),!1;try{const pe=`git clone ${S.value}`;return await navigator.clipboard.writeText(pe),u({message:e("@F13B4:已复制克隆命令"),type:"success"}),!0}catch(pe){return console.error("复制克隆命令失败:",pe),u({message:`${e("@C298B:复制失败: ")}${pe.message}`,type:"error"}),!1}}ts(()=>{ut()});function oe(){O.value&&(O.value.disconnect(),O.value=null)}Hs(()=>{oe()});async function W(){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),[];try{re.value=!0;const le=await(await fetch("/api/stash-list")).json();return le.success?(Q.value=le.stashes,le.stashes):(u.error(`${e("@C298B:获取stash列表失败: ")}${le.error}`),[])}catch(pe){return console.error("获取stash列表失败:",pe),u.error(`${e("@C298B:获取stash列表失败: ")}${pe.message}`),[]}finally{re.value=!1}}async function Ve(pe,le=!1,Re=!0){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{Ge.value=!0;const kt=await(await fetch("/api/stash-save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:pe,includeUntracked:le,excludeLocked:Re})})).json();return kt.success?(u.success(kt.message),await W(),await je(),!0):(u.warning(kt.message),!1)}catch(Qe){return console.error("保存stash失败:",Qe),u.error(`${e("@C298B:保存stash失败: ")}${Qe.message}`),!1}finally{Ge.value=!1}}async function wt(pe,le,Re=!1){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;if(!pe||pe.length===0)return u.warning(e("@C298B:请选择要储藏的文件")),!1;try{Ge.value=!0;const kt=await(await fetch("/api/stash-save-partial",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({files:pe,message:le,includeUntracked:Re})})).json();return kt.success?(u.success(kt.message),await W(),await je(),!0):(u.warning(kt.message),!1)}catch(Qe){return console.error("保存部分stash失败:",Qe),u.error(`${e("@C298B:保存stash失败: ")}${Qe.message}`),!1}finally{Ge.value=!1}}async function _t(pe,le=!1){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{ne.value=!0;const Re=await fetch("/api/stash-apply",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({stashId:pe,pop:le})}),Qe=await Re.json();return Re.status===409?(u.warning(e("@C298B:应用stash时发生冲突,请手动解决")),!1):Qe.success?(u.success(Qe.message),await W(),await je(),!0):(u.error(`${e("@C298B:应用stash失败: ")}${Qe.error}`),!1)}catch(Re){return console.error("应用stash失败:",Re),u.error(`${e("@C298B:应用stash失败: ")}${Re.message}`),!1}finally{ne.value=!1}}async function us(pe){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{te.value=!0;const Re=await(await fetch("/api/stash-drop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({stashId:pe})})).json();return Re.success?(u.success(Re.message),await W(),!0):(u.error(`${e("@C298B:删除stash失败: ")}${Re.error}`),!1)}catch(le){return console.error("删除stash失败:",le),u.error(`${e("@C298B:删除stash失败: ")}${le.message}`),!1}finally{te.value=!1}}async function ks(){if(!C.value)return u.warning(e("@C298B:当前目录不是Git仓库")),!1;try{te.value=!0;const le=await(await fetch("/api/stash-clear",{method:"POST"})).json();return le.success?(u.success(le.message),Q.value=[],!0):(u.error(`${e("@C298B:清空stash失败: ")}${le.error}`),!1)}catch(pe){return console.error("清空stash失败:",pe),u.error(`${e("@C298B:清空stash失败: ")}${pe.message}`),!1}finally{te.value=!1}}const hs=ie(()=>B.value.some(pe=>pe.type==="conflicted"));return{currentBranch:k,allBranches:i,userName:c,userEmail:f,isChangingBranch:p,isCreatingBranch:h,isGitRepo:C,lastCheckedTime:m,branchAhead:F,branchBehind:w,hasUpstream:E,upstreamBranch:H,lastBranchesTime:z,remoteUrl:S,isLoadingRemoteUrl:M,hasConflictedFiles:hs,stashes:Q,isLoadingStashes:re,isApplyingStash:ne,isDroppingStash:te,isSavingStash:Ge,log:X,status:T,fileList:B,isLoadingLog:se,isLoadingStatus:_e,isAddingFiles:De,isCommiting:ue,isResetting:be,currentPage:G,hasMoreData:q,totalCommits:ge,isPushing:b,isGitPulling:P,isGitFetching:n,isGitMerging:d,pendingMergeMessage:A,$reset:fe,checkGitRepo:J,getCurrentBranch:Ce,getAllBranches:Oe,changeBranch:lt,getUserInfo:V,createBranch:y,clearUserConfig:ae,restoreUserConfig:Fe,getBranchStatus:We,gitPull:ye,gitFetchAll:Ne,initSocketConnection:ut,parseStatusPorcelain:me,fetchLog:$e,refreshLog:He,fetchStatus:je,fetchStatusPorcelain:Ae,addToStage:ht,addAllToStage:Pt,addFileToStage:Ft,unstageFile:Bt,commitChanges:N,pushToRemote:Z,pushToRemoteWithProgress:Se,addAndCommit:xe,addCommitAndPush:de,resetHead:g,resetToRemote:D,getRemoteUrl:ee,copyRemoteUrl:ke,copyCloneCommand:K,mergeBranch:Pe,getStashList:W,saveStash:Ve,savePartialStash:wt,applyStash:_t,dropStash:us,clearAllStashes:ks,socket:O,disconnectSocket:oe}});function qn(j){return j.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Vs(j){if(!j)return"";const k=j.split(`
|
|
15
|
-
`);let i=!1,c=null;return k.map(f=>{const p=qn(f);return f.startsWith("diff --git")||f.startsWith("diff --cc")||f.startsWith("diff --combined")?`<div class="diff-header">${p}</div>`:f.startsWith("---")?`<div class="diff-old-file">${p}</div>`:f.startsWith("+++")?`<div class="diff-new-file">${p}</div>`:f.startsWith("@@")?`<div class="diff-hunk-header">${p}</div>`:f.match(/^[+\-\s]*<{7,}\s+(HEAD|.*)/)?(i=!0,c="current",`<div class="diff-conflict-start">${p}</div>`):f.match(/^[+\-\s]*={7,}\s*$/)?(c="incoming",`<div class="diff-conflict-separator">${p}</div>`):f.match(/^[+\-\s]*>{7,}\s+.*/)?(i=!1,c=null,`<div class="diff-conflict-end">${p}</div>`):i&&c?c==="current"?`<div class="diff-conflict-current">${p}</div>`:`<div class="diff-conflict-incoming">${p}</div>`:f.startsWith("+")?`<div class="diff-added">${" "+p.substring(1)}</div>`:f.startsWith("-")?`<div class="diff-removed">${" "+p.substring(1)}</div>`:`<div class="diff-context">${p}</div>`}).join("")}function Jn(j){return j?j.trim():"(无提交信息)"}function Kn(j){if(!j)return"";const k=/^(feat|fix|docs|style|refactor|perf|test|chore|build|ci|revert)(\([^)]+\))?\s*:\s*(.+)$/s,i=j.match(k);return i?i[3].trim():j.trim()}const Yn={class:"file-action-buttons"},Qn={key:1,style:{"font-size":"var(--font-size-md)","font-weight":"bold"}},Zn=ze({__name:"FileActionButtons",props:{filePath:{},fileType:{},isLocked:{type:Boolean,default:!1},isLocking:{type:Boolean,default:!1},showLockButton:{type:Boolean,default:!0}},emits:["toggleLock","stage","unstage","revert","manageLockedFiles"],setup(j,{emit:k}){const i=j,c=k,f=ie(()=>{switch(i.fileType){case"added":return[{type:"unstage",tooltip:e("@0883F:取消暂存"),buttonType:"warning",icon:"-",handler:()=>c("unstage",i.filePath)}];case"modified":case"deleted":return[{type:"stage",tooltip:e("@0883F:添加到暂存区"),buttonType:"success",icon:"+",handler:()=>c("stage",i.filePath)},{type:"revert",tooltip:e("@0883F:撤回修改"),buttonType:"danger",icon:Ds,handler:()=>c("revert",i.filePath)}];case"untracked":return[{type:"stage",tooltip:e("@0883F:添加到暂存区"),buttonType:"success",icon:"+",handler:()=>c("stage",i.filePath)},{type:"delete",tooltip:e("@0883F:删除文件"),buttonType:"danger",icon:ms,handler:()=>c("revert",i.filePath)}];default:return[]}});function p(m){m.stopPropagation(),c("toggleLock",i.filePath)}function h(m,S){S.stopPropagation(),m()}function C(m){m.stopPropagation(),c("manageLockedFiles")}return(m,S)=>{const M=st,b=ct,P=yt;return r(),v("div",Yn,[m.showLockButton?(r(),x(P,{key:0,content:m.isLocking?t(e)("@0883F:处理中..."):m.isLocked?t(e)("@0883F:解锁文件"):t(e)("@0883F:锁定文件"),placement:"top",disabled:m.isLocking,"show-after":200},{default:o(()=>[s(b,{type:m.isLocked?"danger":"info",size:"small",text:"",loading:m.isLocking,disabled:m.isLocking,onClick:p,class:"file-action-btn"},{default:o(()=>[m.isLocking?I("",!0):(r(),x(M,{key:0,size:"16"},{default:o(()=>[(r(),x(ga(m.isLocked?t(ta):t(Ka))))]),_:1}))]),_:1},8,["type","loading","disabled"])]),_:1},8,["content","disabled"])):I("",!0),m.isLocked?(r(),x(P,{key:1,content:t(e)("@13D1C:管理锁定文件"),placement:"top","show-after":200},{default:o(()=>[s(b,{type:"warning",size:"small",text:"",onClick:C,class:"file-action-btn"},{default:o(()=>[s(M,{size:"16"},{default:o(()=>S[0]||(S[0]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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})]),_:1},8,["content"])):I("",!0),m.isLocked?I("",!0):(r(!0),v(Ue,{key:2},tt(f.value,n=>(r(),x(P,{key:n.type,content:n.tooltip,placement:"top","show-after":200},{default:o(()=>[s(b,{type:n.buttonType,size:"small",text:"",onClick:d=>h(n.handler,d),class:"file-action-btn"},{default:o(()=>[typeof n.icon!="string"?(r(),x(M,{key:0,size:"16"},{default:o(()=>[(r(),x(ga(n.icon)))]),_:2},1024)):(r(),v("span",Qn,l(n.icon),1))]),_:2},1032,["type","onClick"])]),_:2},1032,["content"]))),128))])}}}),Oa=Je(Zn,[["__scopeId","data-v-b905c553"]]);function Rs(j){const k=[],i=new Map;return[...j].sort((f,p)=>f.path.localeCompare(p.path)).forEach(f=>{const p=f.path.split("/").filter(m=>m);let h="",C=k;p.forEach((m,S)=>{const M=S===p.length-1;h=h?`${h}/${m}`:m;let b=i.get(h);b||(b={name:m,path:h,isDirectory:!M,expanded:!0},M?(b.file=f,b.type=f.type,b.locked=f.locked):b.children=[],i.set(h,b),C.push(b)),!M&&b.children&&(C=b.children)})}),k}function Xn(j){j.expanded=!j.expanded}function Ls(j,k){const i=new Map,c=p=>{p.forEach(h=>{h.isDirectory&&(i.set(h.path,h.expanded||!1),h.children&&c(h.children))})},f=p=>{p.forEach(h=>{if(h.isDirectory){const C=i.get(h.path);C!==void 0&&(h.expanded=C),h.children&&f(h.children)}})};c(k),f(j)}function Na(j){if(!j)return"";try{return en(j)||""}catch(k){return console.warn("Failed to get file icon class:",k),""}}const el={class:"tree-node-wrapper"},tl={class:"node-name"},sl={key:2,class:"file-type-tag"},al={key:4,class:"file-actions"},ol={key:0,class:"tree-children"},nl=ze({__name:"TreeNodeItem",props:{node:{},level:{},selectedFile:{default:""},showActionButtons:{type:Boolean,default:!1},isFileLocked:{type:Function,default:()=>!1},isLocking:{type:Function,default:()=>!1}},emits:["file-select","toggle-lock","stage","unstage","revert","node-click"],setup(j,{emit:k}){const i=j,c=k;function f(m){return`${m*20+10}px`}function p(m){return m.isDirectory?"icon-file-directory":Na(m.name)}function h(m){return!m.isDirectory&&m.path===i.selectedFile}function C(){c("node-click",i.node)}return(m,S)=>{const M=ya("TreeNodeItem",!0);return r(),v("div",el,[a("div",{class:Xe(["tree-node",{"is-directory":m.node.isDirectory,"is-file":!m.node.isDirectory,"is-selected":h(m.node),"is-locked":m.node.locked,[`file-type-${m.node.type}`]:m.node.type}]),style:ls({paddingLeft:f(m.level)}),onClick:C},[m.node.isDirectory?(r(),x(t(st),{key:0,class:"folder-icon"},{default:o(()=>[s(t(rs))]),_:1})):(r(),v("span",{key:1,class:Xe(["node-icon","file-icon",p(m.node)])},null,2)),s(t(yt),{content:m.node.path,placement:"top",disabled:m.node.name.length<=35,"show-after":200},{default:o(()=>[a("span",tl,l(m.node.name),1)]),_:1},8,["content","disabled"]),m.node.isDirectory?I("",!0):(r(),v("span",sl,l(m.node.type||"modified"),1)),m.node.locked?(r(),x(t(yt),{key:3,content:t(e)("@E80AC:该文件已被锁定,提交时会被跳过"),placement:"top","show-after":200},{default:o(()=>[s(t(st),{class:"lock-icon",color:"var(--color-warning)"},{default:o(()=>[s(t(ta))]),_:1})]),_:1},8,["content"])):I("",!0),m.showActionButtons&&!m.node.isDirectory&&m.node.file?(r(),v("div",al,[s(Oa,{"file-path":m.node.path,"file-type":m.node.type||"modified","is-locked":m.isFileLocked(m.node.path),"is-locking":m.isLocking(m.node.path),onToggleLock:S[0]||(S[0]=b=>c("toggle-lock",b)),onStage:S[1]||(S[1]=b=>c("stage",b)),onUnstage:S[2]||(S[2]=b=>c("unstage",b)),onRevert:S[3]||(S[3]=b=>c("revert",b))},null,8,["file-path","file-type","is-locked","is-locking"])])):I("",!0)],6),m.node.isDirectory&&m.node.expanded&&m.node.children&&m.node.children.length>0?(r(),v("div",ol,[(r(!0),v(Ue,null,tt(m.node.children,b=>(r(),x(M,{key:b.path+"-"+(b.expanded?"open":"closed"),node:b,level:m.level+1,"selected-file":m.selectedFile,"show-action-buttons":m.showActionButtons,"is-file-locked":m.isFileLocked,"is-locking":m.isLocking,onFileSelect:S[4]||(S[4]=P=>c("file-select",P)),onToggleLock:S[5]||(S[5]=P=>c("toggle-lock",P)),onStage:S[6]||(S[6]=P=>c("stage",P)),onUnstage:S[7]||(S[7]=P=>c("unstage",P)),onRevert:S[8]||(S[8]=P=>c("revert",P)),onNodeClick:S[9]||(S[9]=P=>c("node-click",P))},null,8,["node","level","selected-file","show-action-buttons","is-file-locked","is-locking"]))),128))])):I("",!0)])}}}),ll=Je(nl,[["__scopeId","data-v-edd80534"]]),il={class:"file-tree-view"},rl=ze({__name:"FileTreeView",props:{treeData:{},selectedFile:{default:""},showActionButtons:{type:Boolean,default:!1},isFileLocked:{type:Function,default:()=>!1},isLocking:{type:Function,default:()=>!1}},emits:["file-select","toggle-lock","stage","unstage","revert"],setup(j,{emit:k}){const i=k,c=_(0);function f(p){p.isDirectory?(Xn(p),c.value++):p.file&&i("file-select",p.path)}return(p,h)=>(r(),v("div",il,[(r(!0),v(Ue,null,tt(p.treeData,C=>(r(),x(ll,{key:C.path+"-"+(C.expanded?"open":"closed"),node:C,level:0,"selected-file":p.selectedFile,"show-action-buttons":p.showActionButtons,"is-file-locked":p.isFileLocked,"is-locking":p.isLocking,onFileSelect:h[0]||(h[0]=m=>i("file-select",m)),onToggleLock:h[1]||(h[1]=m=>i("toggle-lock",m)),onStage:h[2]||(h[2]=m=>i("stage",m)),onUnstage:h[3]||(h[3]=m=>i("unstage",m)),onRevert:h[4]||(h[4]=m=>i("revert",m)),onNodeClick:f},null,8,["node","selected-file","show-action-buttons","is-file-locked","is-locking"]))),128))]))}}),xs=Je(rl,[["__scopeId","data-v-1112330c"]]),cl=ze({__name:"MonacoDiffViewer",props:{original:{},modified:{},language:{default:"plaintext"},filePath:{default:""},theme:{default:"auto"},readOnly:{type:Boolean,default:!0}},setup(j){const k=j,i=_(null);let c=null,f=null,p=null,h=null,C=null,m=null;async function S(){return c||m||(m=(async()=>{const E=self;return E.MonacoEnvironment||(E.MonacoEnvironment={getWorker(z,A){return A==="json"?new Ya:A==="css"||A==="scss"||A==="less"?new Qa:A==="html"||A==="handlebars"||A==="razor"?new Za:A==="typescript"||A==="javascript"?new Xa:new eo}}),c=await to(()=>import("./vendor-BpNfZzQX.js").then(z=>z.bw),__vite__mapDeps([0,1])),c})(),m)}function M(E){const z=(E||"").toLowerCase().match(/\.([a-z0-9]+)$/),A=z?z[1]:"";return A==="ts"||A==="tsx"?"typescript":A==="js"||A==="jsx"||A==="cjs"||A==="mjs"?"javascript":A==="json"?"json":A==="html"||A==="htm"||A==="vue"?"html":A==="css"?"css":A==="scss"?"scss":A==="less"?"less":A==="md"||A==="markdown"?"markdown":A==="yml"||A==="yaml"?"yaml":A==="xml"?"xml":A==="sh"?"shell":A==="ps1"?"powershell":A==="go"?"go":A==="rs"?"rust":A==="py"?"python":A==="java"?"java":A==="cpp"||A==="cc"||A==="cxx"||A==="hpp"||A==="h"?"cpp":A==="cs"?"csharp":"plaintext"}function b(){return k.language==="auto"?M(k.filePath||""):k.language||"plaintext"}function P(){return k.theme&&k.theme!=="auto"?k.theme:document.documentElement.getAttribute("data-theme")==="dark"?"vs-dark":"vs"}function n(){if(!c)return;const E=P();c.editor.setTheme(E)}function d(){if(!c)return;p==null||p.dispose(),h==null||h.dispose();const E=b();p=c.editor.createModel(k.original||"",E),h=c.editor.createModel(k.modified||"",E)}function F(){!f||!p||!h||f.setModel({original:p,modified:h})}function w(){p&&p.getValue()!==(k.original||"")&&p.setValue(k.original||""),h&&h.getValue()!==(k.modified||"")&&h.setValue(k.modified||"")}return ts(async()=>{i.value&&(c=await S(),n(),d(),f=c.editor.createDiffEditor(i.value,{automaticLayout:!0,readOnly:k.readOnly,renderSideBySide:!0,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,renderWhitespace:"selection",originalEditable:!k.readOnly}),F(),C=new MutationObserver(()=>{n()}),C.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}))}),Ze(()=>k.language,()=>{if(!c)return;const E=b();p&&c.editor.setModelLanguage(p,E),h&&c.editor.setModelLanguage(h,E)}),Ze(()=>k.filePath,()=>{if(!c||k.language!=="auto")return;const E=b();p&&c.editor.setModelLanguage(p,E),h&&c.editor.setModelLanguage(h,E)}),Ze(()=>k.theme,()=>{n()}),Ze(()=>[k.original,k.modified],()=>{w()}),ka(()=>{C==null||C.disconnect(),C=null,f==null||f.dispose(),f=null,p==null||p.dispose(),h==null||h.dispose(),p=null,h=null}),(E,H)=>(r(),v("div",{ref_key:"containerRef",ref:i,class:"monaco-diff-container"},null,512))}}),za=Je(cl,[["__scopeId","data-v-f68251b2"]]),ul=ze({__name:"MonacoEditor",props:{modelValue:{},language:{default:"plaintext"},filePath:{default:""},theme:{default:"auto"},readOnly:{type:Boolean,default:!1},minHeight:{default:"360px"},revealLine:{default:null},highlightRange:{default:null},dimHighlightRanges:{default:null},highlightKind:{default:""},gutterPlacement:{default:"glyph"},gutterItems:{default:()=>[]},rightActions:{default:()=>[]},appliedBlocks:{default:()=>[]},syncGroup:{default:null},syncScrollTop:{default:null}},emits:["update:modelValue","gutter-click","scroll-change"],setup(j,{emit:k}){const i=j,c=k,f=_(null);let p=null,h=null,C=null,m=null,S=null,M=!1,b=[],P=[],n=[],d=null,F=null,w=new Map,E=null,H=null;function z(){if(!h)return;const Q=i.gutterItems||[],re=i.gutterPlacement==="glyph"&&Q.length>0;try{h.updateOptions({glyphMargin:re})}catch{}}function A(){var re;if(!h||F)return;const Q=(re=h.getDomNode)==null?void 0:re.call(h);Q&&(F=document.createElement("div"),F.className="merge-right-actions",Q.appendChild(F))}function O(){F&&(F.innerHTML="",w.clear())}function Y(){var fe,We,J;if(!h||!p||!F)return;const Q=i.rightActions||[];if(!Q.length)return;const re=(fe=h.getLayoutInfo)==null?void 0:fe.call(h),ne=(re==null?void 0:re.contentLeft)??0,te=(re==null?void 0:re.contentWidth)??0,Ge=Math.max(0,ne+te-22);for(const Ce of Q){const Oe=w.get(Ce.blockId);if(!Oe)continue;const lt=((We=C==null?void 0:C.getLineMaxColumn)==null?void 0:We.call(C,Ce.line))??1,V=(J=h.getScrolledVisiblePosition)==null?void 0:J.call(h,{lineNumber:Ce.line,column:lt});if(!V){Oe.style.display="none";continue}Oe.style.display="",Oe.style.top=`${V.top}px`,Oe.style.left=`${Ge}px`,Oe.style.height=`${V.height}px`,Oe.style.lineHeight=`${V.height}px`}}function ce(Q,re){const te=(i.appliedBlocks||[]).find(Ge=>Ge.blockId===Q);return te?re==="current"?te.choice==="current"||te.choice==="both":te.choice==="incoming"||te.choice==="both":!1}function X(){if(!h||(A(),!F))return;const Q=(i.rightActions||[]).filter(re=>re&&re.line&&re.line>0);if(!Q.length){O();return}O();for(const re of Q){const ne=ce(re.blockId,re.kind),te=document.createElement("div");te.className=re.kind==="incoming"?`merge-right-action merge-right-action-incoming${ne?" is-applied":""}`:`merge-right-action merge-right-action-current${ne?" is-applied":""}`,te.textContent=ne?"✓":re.kind==="incoming"?"←":"→",te.title=ne?re.kind==="incoming"?"已采用传入更改":"已采用当前更改":re.kind==="incoming"?"采用传入更改":"采用当前更改",te.addEventListener("mousedown",Ge=>{Ge.preventDefault(),Ge.stopPropagation()}),te.addEventListener("click",Ge=>{Ge.preventDefault(),Ge.stopPropagation(),c("gutter-click",re.blockId)}),F.appendChild(te),w.set(re.blockId,te)}Y()}async function T(){return p||S||(S=(async()=>{const Q=self;return Q.MonacoEnvironment||(Q.MonacoEnvironment={getWorker(ne,te){return te==="json"?new Ya:te==="css"||te==="scss"||te==="less"?new Qa:te==="html"||te==="handlebars"||te==="razor"?new Za:te==="typescript"||te==="javascript"?new Xa:new eo}}),p=await to(()=>import("./vendor-BpNfZzQX.js").then(ne=>ne.bw),__vite__mapDeps([0,1])),p})(),S)}function B(Q){const ne=(Q||"").toLowerCase().match(/\.([a-z0-9]+)$/),te=ne?ne[1]:"";return te==="ts"||te==="tsx"?"typescript":te==="js"||te==="jsx"||te==="cjs"||te==="mjs"?"javascript":te==="json"?"json":te==="html"||te==="htm"||te==="vue"?"html":te==="css"?"css":te==="scss"?"scss":te==="less"?"less":te==="md"||te==="markdown"?"markdown":te==="yml"||te==="yaml"?"yaml":te==="xml"?"xml":te==="sh"?"shell":te==="ps1"?"powershell":te==="go"?"go":te==="rs"?"rust":te==="py"?"python":te==="java"?"java":te==="cpp"||te==="cc"||te==="cxx"||te==="hpp"||te==="h"?"cpp":te==="cs"?"csharp":"plaintext"}function se(){return i.language==="auto"?B(i.filePath||""):i.language||"plaintext"}function _e(){return i.theme&&i.theme!=="auto"?i.theme:document.documentElement.getAttribute("data-theme")==="dark"?"vs-dark":"vs"}function De(){p&&p.editor.setTheme(_e())}function ue(){if(!p)return;const Q=se();if(!C){C=p.editor.createModel(i.modelValue||"",Q);return}try{p.editor.setModelLanguage(C,Q)}catch{}}function be(){if(!C)return;const Q=i.modelValue||"";C.getValue()!==Q&&(M=!0,C.setValue(Q),M=!1)}function G(){if(!h)return;const Q=i.revealLine;if(!(!Q||Q<=0))try{h.revealLineInCenter(Q)}catch{}}function q(){if(!p||!h)return;if(!i.dimHighlightRanges||!i.dimHighlightRanges.length||!i.highlightKind)P=h.deltaDecorations(P,[]);else{const te=i.highlightKind==="current"?"merge-highlight-current-dim":i.highlightKind==="incoming"?"merge-highlight-incoming-dim":"merge-highlight-merged-dim";P=h.deltaDecorations(P,i.dimHighlightRanges.filter(Ge=>Ge&&Ge.startLine>0&&Ge.endLine>0).map(Ge=>{const fe=Math.max(1,Ge.startLine),We=Math.max(fe,Ge.endLine);return{range:new p.Range(fe,1,We,1),options:{isWholeLine:!0,className:te,linesDecorationsClassName:te}}}))}if(!i.highlightRange||!i.highlightKind){b=h.deltaDecorations(b,[]);return}const Q=Math.max(1,i.highlightRange.startLine),re=Math.max(Q,i.highlightRange.endLine),ne=i.highlightKind==="current"?"merge-highlight-current":i.highlightKind==="incoming"?"merge-highlight-incoming":"merge-highlight-merged";b=h.deltaDecorations(b,[{range:new p.Range(Q,1,re,1),options:{isWholeLine:!0,className:ne,linesDecorationsClassName:ne}}])}function ge(){if(!p||!h)return;const Q=i.gutterItems||[];if(!Q.length){n=h.deltaDecorations(n,[]),z();return}z();const re=i.gutterPlacement==="line";n=h.deltaDecorations(n,Q.filter(ne=>ne&&ne.line&&ne.line>0).map(ne=>{const te=ce(ne.blockId,ne.kind),Ge=ne.kind==="current"?te?"merge-glyph-current is-applied":"merge-glyph-current":te?"merge-glyph-incoming is-applied":"merge-glyph-incoming";return{range:new p.Range(ne.line,1,ne.line,1),options:{isWholeLine:!0,...re?{linesDecorationsClassName:Ge}:{glyphMarginClassName:Ge}}}}))}return ts(async()=>{f.value&&(p=await T(),De(),ue(),h=p.editor.create(f.value,{automaticLayout:!0,readOnly:i.readOnly,glyphMargin:!1,minimap:{enabled:!1},fontSize:13,wordWrap:"on",scrollBeyondLastLine:!1,renderWhitespace:"selection",scrollbar:{verticalScrollbarSize:10,horizontalScrollbarSize:10}}),h.setModel(C),h.onDidChangeModelContent(()=>{var re;if(M)return;const Q=((re=C==null?void 0:C.getValue)==null?void 0:re.call(C))??"";c("update:modelValue",Q)}),m=new MutationObserver(()=>{De()}),m.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),G(),q(),ge(),X(),E=h.onDidScrollChange(Q=>{Y(),i.syncGroup&&Q.scrollTopChanged&&c("scroll-change",Q.scrollTop)}),H=h.onDidLayoutChange(()=>{Y()}),d=h.onMouseDown(Q=>{try{const re=Q==null?void 0:Q.target,ne=re==null?void 0:re.position;if(!(ne!=null&&ne.lineNumber))return;const te=re==null?void 0:re.type;if(te!==p.editor.MouseTargetType.GUTTER_GLYPH_MARGIN&&te!==p.editor.MouseTargetType.GUTTER_LINE_DECORATIONS)return;const Ge=ne.lineNumber,fe=(i.gutterItems||[]).find(We=>We.line===Ge);if(!fe)return;c("gutter-click",fe.blockId)}catch{}}))}),Ze(()=>i.modelValue,()=>{be()}),Ze(()=>i.revealLine,()=>{G()}),Ze(()=>[i.highlightRange,i.highlightKind],()=>{q()},{deep:!0}),Ze(()=>i.dimHighlightRanges,()=>{q()},{deep:!0}),Ze(()=>i.gutterItems,()=>{ge()},{deep:!0}),Ze(()=>i.rightActions,()=>{X()},{deep:!0}),Ze(()=>i.appliedBlocks,()=>{X(),ge()},{deep:!0}),Ze(()=>i.syncScrollTop,Q=>{if(Q!=null&&h){const re=h.getScrollTop();Math.abs(re-Q)>5&&h.setScrollTop(Q)}}),Ze(()=>i.gutterPlacement,()=>{ge()}),Ze(()=>[i.language,i.filePath],()=>{p&&ue()}),Ze(()=>i.theme,()=>{De()}),Ze(()=>i.readOnly,Q=>{h&&h.updateOptions({readOnly:Q})}),ka(()=>{var Q,re,ne,te;m==null||m.disconnect(),m=null;try{(Q=d==null?void 0:d.dispose)==null||Q.call(d)}catch{}d=null;try{(re=E==null?void 0:E.dispose)==null||re.call(E)}catch{}E=null;try{(ne=H==null?void 0:H.dispose)==null||ne.call(H)}catch{}H=null;try{(te=F==null?void 0:F.remove)==null||te.call(F)}catch{}F=null,w.clear(),h==null||h.dispose(),h=null,P=[],C==null||C.dispose(),C=null}),(Q,re)=>(r(),v("div",{ref_key:"containerRef",ref:f,class:"monaco-editor-container",style:ls(Q.minHeight?{minHeight:Q.minHeight}:{flex:1,minHeight:"200px"})},null,4))}}),Ns=Je(ul,[["__scopeId","data-v-042d71e8"]]),dl={class:"files-panel"},pl={class:"panel-header"},fl={class:"header-left"},ml={key:0,class:"file-count"},vl={class:"view-mode-toggle"},hl={class:"search-box"},gl={class:"files-list"},yl=["onClick"],Cl={key:0,class:"conflict-marker",title:"冲突文件"},_l={class:"file-name"},bl=["title"],wl={class:"file-directory path-badge"},kl={key:2,class:"file-actions"},$l={class:"diff-panel"},Sl={class:"panel-header"},Dl={class:"header-right"},Fl={class:"selected-file"},Ol={class:"path-dir"},Nl={class:"path-name"},Tl={key:1,class:"diff-stats-badge"},Bl={class:"stats-added"},Al={class:"stats-deleted"},El={key:2,class:"action-buttons"},Pl={key:0,class:"conflict-resolution-container"},Vl={key:0,class:"resolution-mode-switch"},Ml={key:1,class:"block-conflict-resolution"},Gl={class:"merge-three-pane"},Il={class:"pane"},Rl={class:"pane-header"},Ll={class:"pane-title"},xl={class:"pane-body"},Ul={class:"pane pane-merged"},zl={class:"pane-header"},Hl={class:"pane-title"},Wl={class:"pane-subhint"},jl={class:"pane-body"},ql={class:"pane"},Jl={class:"pane-header"},Kl={class:"pane-title"},Yl={class:"pane-body"},Ql={class:"save-resolution-bar"},Zl={key:2,class:"global-conflict-wrapper"},Xl={class:"global-conflict-resolution"},ei={class:"conflict-warning"},ti={class:"conflict-buttons"},si={class:"diff-content"},ai=["textContent"],oi=["innerHTML"],ni={key:1,class:"conflict-resolved-container"},li={class:"resolved-notice"},ii={class:"notice-text"},ri={class:"diff-content"},ci=["textContent"],ui=["innerHTML"],di={key:2,class:"diff-content"},pi={key:1,class:"compare-view"},fi=["textContent"],mi=["innerHTML"],vi={key:1,class:"diff-panel full-width"},hi={class:"panel-header"},gi={class:"header-right"},yi={class:"selected-file"},Ci={class:"path-dir"},_i={class:"path-name"},bi={key:1,class:"action-buttons"},wi={key:0,class:"conflict-resolution-container"},ki={key:0,class:"resolution-mode-switch"},$i={key:1,class:"block-conflict-resolution"},Si={class:"merge-three-pane"},Di={class:"pane"},Fi={class:"pane-header"},Oi={class:"pane-title"},Ni={class:"pane-body"},Ti={class:"pane pane-merged"},Bi={class:"pane-header"},Ai={class:"pane-title"},Ei={class:"pane-subhint"},Pi={class:"pane-body"},Vi={class:"pane"},Mi={class:"pane-header"},Gi={class:"pane-title"},Ii={class:"pane-body"},Ri={class:"save-resolution-bar"},Li={key:2,class:"global-conflict-wrapper"},xi={class:"global-conflict-resolution"},Ui={class:"conflict-warning"},zi={class:"conflict-buttons"},Hi={class:"diff-content"},Wi=["textContent"],ji=["innerHTML"],qi={key:1,class:"diff-content"},Ji={key:1,class:"compare-view"},Ki=["textContent"],Yi=["innerHTML"],Ha="zen-gitsync-file-list-view-mode",ma="fileDiff.splitPercent",va="zen-gitsync-filediff-ratio",ha="merge-three-pane",Qi=ze({__name:"FileDiffViewer",props:{files:{},emptyText:{default:e("@E80AC:没有找到变更文件")},diffContent:{default:""},diffStats:{default:null},selectedFile:{default:""},isLoading:{type:Boolean,default:!1},plainText:{type:Boolean,default:!1},compareMode:{type:Boolean,default:!1},compareOriginal:{default:""},compareModified:{default:""},height:{default:"100%"},showFileList:{type:Boolean,default:!0},context:{default:"git-status"},showOpenButton:{type:Boolean,default:!0},showActionButtons:{type:Boolean,default:!1},isFileLocked:{type:Function,default:()=>!1},isLocking:{type:Function,default:()=>!1}},emits:["file-select","open-file","open-with-vscode","toggle-lock","stage","unstage","revert"],setup(j,{emit:k}){const i=j,c=k,f=_(""),p=_(""),h=localStorage.getItem(Ha),C=_(h||"list"),m=localStorage.getItem(va)??localStorage.getItem(ma),S=(()=>{const g=m?parseFloat(m):35;return isNaN(g)?35:Math.min(85,Math.max(15,g))})(),M=_(S),b=ie(()=>i.selectedFile||f.value),P=ie(()=>{if(!b.value)return!1;const g=i.files.find(D=>D.path===b.value);return(g==null?void 0:g.type)==="conflicted"}),n=ie(()=>T.value.length>0),d=ie(()=>i.files.map(g=>{const D=g.name||g.path.split("/").pop()||g.path;return{...g,displayName:D,dirPath:(()=>{const ee=(g.path||"").split("/");return ee.length>1?ee.slice(0,-1).join("/"):""})(),iconClass:Na(D)}})),F=ie(()=>{if(!p.value.trim())return d.value;const g=p.value.toLowerCase().trim();return d.value.filter(D=>D.displayName.toLowerCase().includes(g)||D.path.toLowerCase().includes(g))}),w=_([]);function E(){const g=Rs(F.value);w.value.length>0&&Ls(g,w.value),w.value=g}Ze(F,()=>{C.value==="tree"&&E()},{deep:!0}),Ze(C,g=>{g==="tree"&&E(),localStorage.setItem(Ha,g),window.dispatchEvent(new CustomEvent("file-list-view-mode-change",{detail:{mode:g}}))});const H=ie(()=>i.compareMode?!0:i.diffContent&&i.diffContent.trim()!==""),z=ie(()=>{if(!b.value)return"";const g=b.value.split("/");return g.slice(0,-1).join("/")+(g.length>1?"/":"")}),A=ie(()=>{if(!b.value)return"";const g=b.value.split("/");return g[g.length-1]||b.value});function O(g){f.value=g,c("file-select",g)}function Y(){if(!b.value){u.warning(e("@E80AC:请先选择一个文件"));return}c("open-file",b.value,i.context)}function ce(){if(!b.value){u.warning(e("@E80AC:请先选择一个文件"));return}navigator.clipboard.writeText(b.value).then(()=>{u.success(e("@E80AC:文件路径已复制到剪贴板"))}).catch(()=>{u.error(e("@E80AC:复制失败"))})}function X(){if(!b.value){u.warning(e("@E80AC:请先选择一个文件"));return}c("open-with-vscode",b.value,i.context)}const T=_([]),B=_(!0),se=_(""),_e=_(!1),De=_(""),ue=_(""),be=_(""),G=_(""),q=_(new Map),ge=_(null),Q=_(null),re=_(new Map),ne=_(new Map),te=_(new Map);async function Ge(g){const ee=await(await fetch(`/api/file-content?file=${encodeURIComponent(g)}`)).json();if(!ee.success)throw new Error(ee.error||e("@E80AC:无法读取文件内容"));return String(ee.content??"")}function fe(g,D){const ee=g.split(`
|
|
16
|
-
`),ke=[],K=new Map;let oe=0,W=0;for(;oe<ee.length;){const Ve=ee[oe];if(Ve.includes("<<<<<<<")){W++;const wt=[],_t=[];for(oe++;oe<ee.length&&!ee[oe].includes("=======");)wt.push(ee[oe]),oe++;for(oe++;oe<ee.length&&!ee[oe].includes(">>>>>>>");)_t.push(ee[oe]),oe++;oe<ee.length&&ee[oe].includes(">>>>>>>")&&oe++;const us=D(W),ks=us==="incoming"?_t:us==="both"?[...wt,..._t]:wt,hs=ke.length+1;ke.push(...ks);const pe=Math.max(hs,ke.length);K.set(W,{startLine:hs,endLine:pe});continue}ke.push(Ve),oe++}return{text:ke.join(`
|
|
17
|
-
`),anchors:K}}const We=ie(()=>ge.value&&re.value.get(ge.value)||null),J=ie(()=>ge.value&&ne.value.get(ge.value)||null),Ce=ie(()=>ge.value&&te.value.get(ge.value)||null),Oe=ie(()=>{const g=ge.value;return T.value.filter(D=>D.id!==g).map(D=>re.value.get(D.id)).filter(Boolean)}),lt=ie(()=>{const g=ge.value;return T.value.filter(D=>D.id!==g).map(D=>ne.value.get(D.id)).filter(Boolean)}),V=ie(()=>{const g=ge.value;return T.value.filter(D=>D.id!==g).map(D=>te.value.get(D.id)).filter(Boolean)}),y=ie(()=>{var g;return((g=We.value)==null?void 0:g.startLine)??null}),ae=ie(()=>{var g;return((g=J.value)==null?void 0:g.startLine)??null}),Fe=ie(()=>{var g;return((g=Ce.value)==null?void 0:g.startLine)??null}),ye=ie(()=>T.value.map(g=>{const D=re.value.get(g.id);return D?{blockId:g.id,line:D.startLine,kind:"current"}:null}).filter(Boolean)),Ne=ie(()=>T.value.map(g=>{const D=ne.value.get(g.id);return D?{blockId:g.id,line:D.startLine,kind:"incoming"}:null}).filter(Boolean)),ut=ie(()=>{const g=[];return q.value.forEach((D,ee)=>{g.push({blockId:ee,choice:D})}),g});function me(){if(!G.value)return;const{text:g,anchors:D}=fe(G.value,ee=>q.value.get(ee)||"current");se.value=g,te.value=D,_e.value=!0}function $e(g,D){const ee=q.value.get(g);let ke=D;D==="current"?ee==="current"?ke=null:ee==="incoming"?ke="both":ee==="both"?ke="incoming":ke="current":D==="incoming"&&(ee==="incoming"?ke=null:ee==="current"?ke="both":ee==="both"?ke="current":ke="incoming"),ke===null?q.value.delete(g):q.value.set(g,ke),ge.value=g,me()}function He(g){const D=[],ee=g.split(`
|
|
18
|
-
`);let ke=0,K=0;for(;K<ee.length;){const oe=ee[K];if(oe.includes("<<<<<<<")){ke++;const W=oe.replace(/^<<<<<<< /,"").trim()||"HEAD",Ve=[],wt=[],_t=[],us=[],ks=Math.max(0,K-3);for(let Re=ks;Re<K;Re++)Ve.push(ee[Re]);const hs=K+1;for(K++;K<ee.length&&!ee[K].includes("=======");)wt.push(ee[K]),K++;K++;let pe="";for(;K<ee.length&&!ee[K].includes(">>>>>>>");)_t.push(ee[K]),K++;K<ee.length&&ee[K].includes(">>>>>>>")&&(pe=ee[K].replace(/^>>>>>>> /,"").trim()||"incoming",K++);const le=Math.min(ee.length,K+3);for(let Re=K;Re<le&&Re<ee.length;Re++)us.push(ee[Re]);D.push({id:ke,startLine:hs,currentLines:wt,incomingLines:_t,beforeLines:Ve,afterLines:us,currentLabel:W,incomingLabel:pe})}else K++}return D}function je(g){const D=[],ee=g.split(`
|
|
19
|
-
`);let ke="common",K=[];for(let oe=0;oe<ee.length;oe++){const W=ee[oe];W.includes("<<<<<<<")?(K.length>0&&(D.push({type:"common",lines:[...K]}),K=[]),ke="current"):W.includes("=======")?(K.length>0&&(D.push({type:"current",lines:[...K]}),K=[]),D.push({type:"separator",lines:[W]}),ke="incoming"):W.includes(">>>>>>>")?(K.length>0&&(D.push({type:"incoming",lines:[...K]}),K=[]),ke="common"):K.push(W)}return K.length>0&&D.push({type:ke,lines:[...K]}),D}async function Ae(){if(b.value)try{const D=await(await fetch(`/api/file-content?file=${encodeURIComponent(b.value)}`)).json();if(!D.success||!D.content){u.error(e("@E80AC:无法读取文件内容"));return}const ee=D.content,ke=je(ee);let K="";for(const oe of ke)if(oe.type==="current"||oe.type==="common")K+=oe.lines.join(`
|
|
20
|
-
`)+`
|
|
21
|
-
`;else if(oe.type==="separator"||oe.type==="incoming")continue;await Ft(K.trim())}catch(g){u.error(`${e("@E80AC:解决冲突失败: ")}${g.message}`)}}async function ht(){if(b.value)try{const D=await(await fetch(`/api/file-content?file=${encodeURIComponent(b.value)}`)).json();if(!D.success||!D.content){u.error(e("@E80AC:无法读取文件内容"));return}const ee=D.content,ke=je(ee);let K="";for(const oe of ke)if(oe.type==="incoming"||oe.type==="common")K+=oe.lines.join(`
|
|
22
|
-
`)+`
|
|
23
|
-
`;else if(oe.type==="separator"||oe.type==="current")continue;await Ft(K.trim())}catch(g){u.error(`${e("@E80AC:解决冲突失败: ")}${g.message}`)}}async function Pt(){if(b.value)try{const D=await(await fetch(`/api/file-content?file=${encodeURIComponent(b.value)}`)).json();if(!D.success||!D.content){u.error(e("@E80AC:无法读取文件内容"));return}const ee=D.content,ke=je(ee);let K="";for(const oe of ke)(oe.type==="common"||oe.type==="current"||oe.type==="incoming")&&(K+=oe.lines.join(`
|
|
24
|
-
`)+`
|
|
25
|
-
`);await Ft(K.trim())}catch(g){u.error(`${e("@E80AC:解决冲突失败: ")}${g.message}`)}}async function Ft(g){if(b.value)try{const ee=await(await fetch("/api/resolve-conflict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:b.value,content:g})})).json();ee.success?(u.success(e("@E80AC:冲突已解决,文件已更新")),window.dispatchEvent(new CustomEvent("git-status-refresh")),setTimeout(()=>{c("file-select",b.value)},500)):u.error(ee.error||e("@E80AC:保存失败"))}catch(D){u.error(`${e("@E80AC:保存失败: ")}${D.message}`)}}const Bt=ie(()=>{switch(i.context){case"git-status":return e("@E80AC:在系统默认编辑器中打开文件");case"commit-detail":return e("@E80AC:打开该提交时的文件版本");case"stash-detail":return e("@E80AC:打开该stash中的文件版本");default:return e("@E80AC:打开文件")}});async function $(){if(b.value&&B.value){if(se.value.trim().length===0){u.warning(e("@E80AC:保存失败"));return}await Ft(se.value),_e.value=!1;return}}Ze(()=>i.selectedFile,g=>{g!==void 0&&(f.value=g)}),Ze([()=>i.diffContent,b,P],async([g,D,ee])=>{if(T.value=[],se.value="",_e.value=!1,De.value="",ue.value="",be.value="",G.value="",q.value.clear(),ge.value=null,re.value=new Map,ne.value=new Map,te.value=new Map,ee&&D)try{console.log("[ConflictParse] Fetching content for conflicted file:",D);const ke=await Ge(D);if(ke){console.log("[ConflictParse] File content loaded, parsing blocks..."),G.value=ke;const K=He(ke);console.log("[ConflictParse] Parsed blocks:",K.length),T.value=K,ge.value=K.length>0?K[0].id:null;const oe=fe(ke,()=>"current"),W=fe(ke,()=>"incoming"),Ve=fe(ke,()=>"both"),wt=fe(ke,_t=>q.value.get(_t)||"current");De.value=oe.text,ue.value=W.text,be.value=Ve.text,se.value=wt.text,re.value=oe.anchors,ne.value=W.anchors,te.value=wt.anchors}else console.error("[ConflictParse] Failed to load file content")}catch(ke){console.error("[ConflictParse] Error fetching file content:",ke)}else console.log("[ConflictParse] File is not conflicted or no file selected")},{immediate:!0}),Ze(()=>i.files,g=>{if(g.length>0&&!b.value){const D=g[0];O(D.path)}},{immediate:!0});const N=g=>Math.min(85,Math.max(15,g)),Z=g=>{try{const D=String(N(g));localStorage.setItem(va,D),localStorage.setItem(ma,D)}catch{}};Ze(M,g=>{Z(g)}),ts(()=>{try{const D=localStorage.getItem(va)??localStorage.getItem(ma);if(D!=null){const ee=parseFloat(D);isNaN(ee)||(M.value=N(ee))}}catch{}C.value==="tree"&&E();const g=D=>{const ke=D.detail.mode;C.value!==ke&&(C.value=ke)};return window.addEventListener("file-list-view-mode-change",g),()=>{window.removeEventListener("file-list-view-mode-change",g)}});const Se=_(null),Pe=()=>{var D,ee;const g=((D=Se.value)==null?void 0:D.$el)??Se.value;if(g&&g.clientWidth)return g.clientWidth;try{return((ee=g==null?void 0:g.getBoundingClientRect)==null?void 0:ee.call(g).width)??0}catch{return 0}},xe=()=>{var K,oe,W,Ve;const g=((K=Se.value)==null?void 0:K.$el)??Se.value;if(!g)return;const D=(oe=g.querySelectorAll)==null?void 0:oe.call(g,".el-splitter__panel"),ee=Pe();if(!D||D.length<1||ee<=0)return;const ke=((Ve=(W=D[0])==null?void 0:W.getBoundingClientRect)==null?void 0:Ve.call(W).width)??0;if(ke>0){const wt=N(ke/ee*100);wt!==M.value&&(M.value=wt,Z(wt))}},de=ie({get(){return`${N(M.value)}%`},set(g){let D=NaN;if(typeof g=="number"){const ee=g,ke=Pe();ke>0&&!isNaN(ee)&&(D=ee/ke*100)}else if(typeof g=="string"){if(g.endsWith("%"))D=parseFloat(g);else if(g.endsWith("px")){const ee=parseFloat(g),ke=Pe();ke>0&&!isNaN(ee)&&(D=ee/ke*100)}}isNaN(D)||(M.value=N(D),Z(M.value))}});return(g,D)=>{const ee=so,ke=Fs;return r(),v("div",{class:"file-diff-viewer",style:ls({height:g.height})},[g.showFileList?(r(),x(t(oo),{key:0,ref_key:"splitterRef",ref:Se,layout:"horizontal",style:{height:"100%"},onResize:xe,onResizeEnd:xe},{default:o(()=>[s(ee,{size:de.value,"onUpdate:size":D[11]||(D[11]=K=>de.value=K),min:"15%",max:"85%"},{default:o(()=>[a("div",dl,[a("div",pl,[a("div",fl,[a("h4",null,l(t(e)("@E80AC:变更文件")),1),g.files.length>0?(r(),v("span",ml,"("+l(g.files.length)+")",1)):I("",!0)]),a("div",vl,[s(nt,{tooltip:t(e)("@E80AC:列表视图"),size:"small",active:C.value==="list",onClick:D[0]||(D[0]=K=>C.value="list")},{default:o(()=>[s(Fo,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"]),s(nt,{tooltip:t(e)("@E80AC:树状视图"),size:"small",active:C.value==="tree",onClick:D[1]||(D[1]=K=>C.value="tree")},{default:o(()=>[s(Do,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"])])]),a("div",hl,[s(t(Et),{modelValue:p.value,"onUpdate:modelValue":D[2]||(D[2]=K=>p.value=K),placeholder:t(e)("@E80AC:搜索文件名或路径..."),"prefix-icon":t(tn),clearable:"",size:"small"},null,8,["modelValue","placeholder","prefix-icon"])]),a("div",gl,[s(t(sn),{height:"100%"},{default:o(()=>[g.files.length===0?(r(),x(t(Qt),{key:0,description:g.emptyText,"image-size":60},null,8,["description"])):F.value.length===0?(r(),x(t(Qt),{key:1,description:t(e)("@E80AC:没有找到匹配的文件"),"image-size":60},null,8,["description"])):C.value==="list"?(r(!0),v(Ue,{key:2},tt(F.value,K=>(r(),v("div",{key:K.path,class:Xe(["file-item",{active:K.path===b.value,[`file-type-${K.type}`]:K.type,"is-locked":K.locked}]),onClick:oe=>O(K.path)},[a("span",{class:Xe(["file-icon",K.iconClass])},null,2),K.type==="conflicted"?(r(),v("span",Cl,"⚠")):I("",!0),s(t(yt),{content:K.path,placement:"top",disabled:K.displayName.length<=35,"show-after":200},{default:o(()=>[a("span",_l,l(K.displayName),1)]),_:2},1032,["content","disabled"]),K.dirPath?(r(),v("div",{key:1,class:"file-path-section",title:K.dirPath},[s(t(yt),{content:K.dirPath,placement:"top",disabled:K.dirPath.length<=30,"show-after":200},{default:o(()=>[a("div",wl,l(K.dirPath),1)]),_:2},1032,["content","disabled"])],8,bl)):I("",!0),g.showActionButtons?(r(),v("div",kl,[s(Oa,{"file-path":K.path,"file-type":K.type||"modified","is-locked":g.isFileLocked(K.path),"is-locking":g.isLocking(K.path),onToggleLock:D[3]||(D[3]=oe=>c("toggle-lock",oe)),onStage:D[4]||(D[4]=oe=>c("stage",oe)),onUnstage:D[5]||(D[5]=oe=>c("unstage",oe)),onRevert:D[6]||(D[6]=oe=>c("revert",oe))},null,8,["file-path","file-type","is-locked","is-locking"])])):I("",!0)],10,yl))),128)):(r(),x(xs,{key:3,"tree-data":w.value,"selected-file":b.value,"show-action-buttons":g.showActionButtons,"is-file-locked":g.isFileLocked,"is-locking":g.isLocking,onFileSelect:O,onToggleLock:D[7]||(D[7]=K=>c("toggle-lock",K)),onStage:D[8]||(D[8]=K=>c("stage",K)),onUnstage:D[9]||(D[9]=K=>c("unstage",K)),onRevert:D[10]||(D[10]=K=>c("revert",K))},null,8,["tree-data","selected-file","show-action-buttons","is-file-locked","is-locking"]))]),_:1})])])]),_:1},8,["size"]),s(ee,{min:"15%",max:"85%"},{default:o(()=>[a("div",$l,[a("div",Sl,[a("h4",null,l(t(e)("@E80AC:文件差异")),1),a("div",Dl,[Yt(g.$slots,"header-extra",{},void 0,!0),b.value?(r(),x(t(yt),{key:0,content:b.value,placement:"top",effect:"light","show-after":200},{default:o(()=>[a("span",Fl,[a("span",Ol,l(z.value),1),a("span",Nl,l(A.value),1)])]),_:1},8,["content"])):I("",!0),g.diffStats?(r(),v("div",Tl,[a("span",Bl,"+"+l(g.diffStats.added),1),a("span",Al,"-"+l(g.diffStats.deleted),1)])):I("",!0),g.showOpenButton&&b.value?(r(),v("div",El,[s(t(yt),{content:t(e)("@E80AC:复制文件路径"),placement:"top",effect:"light"},{default:o(()=>[a("button",{class:"modern-btn btn-icon-24",onClick:ce},[s(t(st),{class:"btn-icon"},{default:o(()=>[s(t(Ca))]),_:1})])]),_:1},8,["content"]),s(t(yt),{content:Bt.value,placement:"top",effect:"light"},{default:o(()=>[a("button",{class:"modern-btn btn-icon-24",onClick:Y},[s(t(st),{class:"btn-icon"},{default:o(()=>[s(t(Xs))]),_:1})])]),_:1},8,["content"]),s(t(yt),{content:t(e)("@E80AC:用VSCode打开文件"),placement:"top",effect:"light"},{default:o(()=>[a("button",{class:"modern-btn btn-icon-24",onClick:X},[s(Lt,{"icon-class":"vscode",class:"btn-icon"})])]),_:1},8,["content"])])):I("",!0)])]),P.value&&n.value?(r(),v("div",Pl,[T.value.length>0?(r(),v("div",Vl,[s(t(ct),{type:B.value?"primary":"default",size:"small",onClick:D[12]||(D[12]=K=>B.value=!0)},{default:o(()=>[L(l(t(e)("@E80AC:逐块解决")),1)]),_:1},8,["type"]),s(t(ct),{type:B.value?"default":"primary",size:"small",onClick:D[13]||(D[13]=K=>B.value=!1)},{default:o(()=>[L(l(t(e)("@E80AC:全局解决")),1)]),_:1},8,["type"])])):I("",!0),T.value.length>0&&B.value?(r(),v("div",Ml,[a("div",Gl,[a("div",Il,[a("div",Rl,[a("div",Ll,l(t(e)("@E80AC:当前更改")),1)]),D[30]||(D[30]=a("div",{class:"pane-subhint placeholder"},null,-1)),a("div",xl,[s(Ns,{"model-value":De.value,language:"auto","file-path":b.value,theme:"auto","read-only":!0,"min-height":"280px","reveal-line":y.value,"highlight-range":We.value,"dim-highlight-ranges":Oe.value,"highlight-kind":"current",onGutterClick:D[14]||(D[14]=K=>$e(K,"current")),"right-actions":ye.value,"applied-blocks":ut.value,"sync-group":ha,"sync-scroll-top":Q.value,onScrollChange:D[15]||(D[15]=K=>Q.value=K),"onUpdate:modelValue":()=>{}},null,8,["model-value","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks","sync-scroll-top"])])]),a("div",Ul,[a("div",zl,[a("div",Hl,l(t(e)("@E80AC:合并结果")),1)]),a("div",Wl,l(t(e)("@E80AC:可直接编辑合并结果(整文件)")),1),a("div",jl,[s(Ns,{modelValue:se.value,"onUpdate:modelValue":[D[16]||(D[16]=K=>se.value=K),D[18]||(D[18]=()=>_e.value=!0)],language:"auto","file-path":b.value,theme:"auto","read-only":!1,"min-height":"280px","reveal-line":Fe.value,"highlight-range":Ce.value,"dim-highlight-ranges":V.value,"highlight-kind":"merged","sync-group":ha,"sync-scroll-top":Q.value,onScrollChange:D[17]||(D[17]=K=>Q.value=K)},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","sync-scroll-top"])])]),a("div",ql,[a("div",Jl,[a("div",Kl,l(t(e)("@E80AC:传入的更改")),1)]),D[31]||(D[31]=a("div",{class:"pane-subhint placeholder"},null,-1)),a("div",Yl,[s(Ns,{"model-value":ue.value,language:"auto","file-path":b.value,theme:"auto","read-only":!0,"min-height":"280px","reveal-line":ae.value,"highlight-range":J.value,"dim-highlight-ranges":lt.value,"highlight-kind":"incoming","gutter-items":Ne.value,"applied-blocks":ut.value,"sync-group":ha,"sync-scroll-top":Q.value,onScrollChange:D[19]||(D[19]=K=>Q.value=K),onGutterClick:D[20]||(D[20]=K=>$e(K,"incoming")),"onUpdate:modelValue":()=>{}},null,8,["model-value","file-path","reveal-line","highlight-range","dim-highlight-ranges","gutter-items","applied-blocks","sync-scroll-top"])])])]),a("div",Ql,[s(t(ct),{type:"primary",size:"large",onClick:$},{default:o(()=>[L(l(t(e)("@E80AC:保存所有解决方案")),1)]),_:1})])])):I("",!0),!B.value||T.value.length===0?(r(),v("div",Zl,[a("div",Xl,[a("div",ei,[s(t(st),{class:"warning-icon"},{default:o(()=>[s(t(_a))]),_:1}),a("span",null,l(t(e)("@E80AC:检测到冲突,请选择解决方式")),1)]),a("div",ti,[s(t(ct),{type:"primary",size:"small",onClick:Ae},{default:o(()=>[L(l(t(e)("@E80AC:接受当前版本")),1)]),_:1}),s(t(ct),{type:"success",size:"small",onClick:ht},{default:o(()=>[L(l(t(e)("@E80AC:接受传入版本")),1)]),_:1}),s(t(ct),{type:"warning",size:"small",onClick:Pt},{default:o(()=>[L(l(t(e)("@E80AC:接受两者")),1)]),_:1})])]),jt((r(),v("div",si,[!H.value&&!g.isLoading?(r(),x(t(Qt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):H.value&&g.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(g.diffContent)},null,8,ai)):H.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(g.diffContent)},null,8,oi)):I("",!0)])),[[ke,g.isLoading]])])):I("",!0)])):P.value&&!n.value?(r(),v("div",ni,[a("div",li,[s(t(st),{class:"success-icon",style:{color:"var(--color-success)","font-size":"var(--font-size-xl)"}},{default:o(()=>[s(t(ao))]),_:1}),a("span",ii,l(t(e)("@E80AC:冲突已解决,可以添加到暂存区")),1),s(t(ct),{type:"success",size:"default",onClick:D[21]||(D[21]=K=>c("stage",b.value))},{default:o(()=>[L(l(t(e)("@E80AC:添加到暂存区")),1)]),_:1})]),jt((r(),v("div",ri,[!H.value&&!g.isLoading?(r(),x(t(Qt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):H.value&&g.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(g.diffContent)},null,8,ci)):H.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(g.diffContent)},null,8,ui)):I("",!0)])),[[ke,g.isLoading]])])):P.value?I("",!0):jt((r(),v("div",di,[!H.value&&!g.isLoading?(r(),x(t(Qt),{key:0,description:b.value?t(e)("@E80AC:该文件没有差异内容"):t(e)("@E80AC:请选择文件查看差异"),"image-size":80},null,8,["description"])):g.compareMode?(r(),v("div",pi,[s(za,{original:g.compareOriginal,modified:g.compareModified,language:"auto","file-path":b.value,theme:"auto","read-only":!0},null,8,["original","modified","file-path"])])):H.value&&g.plainText?(r(),v("pre",{key:2,class:"diff-text plain-text",textContent:l(g.diffContent)},null,8,fi)):H.value?(r(),v("div",{key:3,class:"diff-text",innerHTML:t(Vs)(g.diffContent)},null,8,mi)):I("",!0)])),[[ke,g.isLoading]])])]),_:3})]),_:3},512)):(r(),v("div",vi,[a("div",hi,[a("h4",null,l(t(e)("@E80AC:文件差异")),1),a("div",gi,[Yt(g.$slots,"header-extra",{},void 0,!0),b.value?(r(),x(t(yt),{key:0,content:b.value,placement:"top",effect:"light","show-after":200},{default:o(()=>[a("span",yi,[a("span",Ci,l(z.value),1),a("span",_i,l(A.value),1)])]),_:1},8,["content"])):I("",!0),g.showOpenButton&&b.value?(r(),v("div",bi,[s(t(yt),{content:t(e)("@E80AC:复制文件路径"),placement:"top",effect:"light"},{default:o(()=>[a("button",{class:"modern-btn btn-icon-24",onClick:ce},[s(t(st),{class:"btn-icon"},{default:o(()=>[s(t(Ca))]),_:1})])]),_:1},8,["content"]),s(t(yt),{content:Bt.value,placement:"top",effect:"light"},{default:o(()=>[a("button",{class:"modern-btn btn-icon-24 btn-primary",onClick:Y},[s(t(st),{class:"btn-icon"},{default:o(()=>[s(t(Xs))]),_:1})])]),_:1},8,["content"]),s(t(yt),{content:t(e)("@E80AC:用VSCode打开文件"),placement:"top",effect:"light"},{default:o(()=>[a("button",{class:"modern-btn btn-icon-24 btn-success",onClick:X},[s(Lt,{"icon-class":"vscode",class:"btn-icon"})])]),_:1},8,["content"])])):I("",!0)])]),P.value?(r(),v("div",wi,[T.value.length>0?(r(),v("div",ki,[s(t(ct),{type:B.value?"primary":"default",size:"small",onClick:D[22]||(D[22]=K=>B.value=!0)},{default:o(()=>[L(l(t(e)("@E80AC:逐块解决")),1)]),_:1},8,["type"]),s(t(ct),{type:B.value?"default":"primary",size:"small",onClick:D[23]||(D[23]=K=>B.value=!1)},{default:o(()=>[L(l(t(e)("@E80AC:全局解决")),1)]),_:1},8,["type"])])):I("",!0),T.value.length>0&&B.value?(r(),v("div",$i,[a("div",Si,[a("div",Di,[a("div",Fi,[a("div",Oi,l(t(e)("@E80AC:当前更改")),1)]),a("div",Ni,[s(Ns,{modelValue:De.value,"onUpdate:modelValue":[D[24]||(D[24]=K=>De.value=K),()=>{}],language:"auto","file-path":b.value,theme:"auto","read-only":!0,"min-height":"360px","reveal-line":y.value,"highlight-range":We.value,"dim-highlight-ranges":Oe.value,"highlight-kind":"current","right-actions":ye.value,"applied-blocks":ut.value,onGutterClick:D[25]||(D[25]=K=>$e(K,"current"))},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks"])])]),a("div",Ti,[a("div",Bi,[a("div",Ai,l(t(e)("@E80AC:合并结果")),1)]),a("div",Ei,l(t(e)("@E80AC:可直接编辑合并结果(整文件)")),1),a("div",Pi,[s(Ns,{modelValue:se.value,"onUpdate:modelValue":[D[26]||(D[26]=K=>se.value=K),D[27]||(D[27]=()=>_e.value=!0)],language:"auto","file-path":b.value,theme:"auto","read-only":!1,"min-height":"360px","reveal-line":Fe.value,"highlight-range":Ce.value,"dim-highlight-ranges":V.value,"highlight-kind":"merged"},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges"])])]),a("div",Vi,[a("div",Mi,[a("div",Gi,l(t(e)("@E80AC:传入的更改")),1)]),a("div",Ii,[s(Ns,{modelValue:ue.value,"onUpdate:modelValue":[D[28]||(D[28]=K=>ue.value=K),()=>{}],language:"auto","file-path":b.value,theme:"auto","read-only":!0,"min-height":"360px","reveal-line":ae.value,"highlight-range":J.value,"dim-highlight-ranges":lt.value,"highlight-kind":"incoming","gutter-items":Ne.value,"applied-blocks":ut.value,onGutterClick:D[29]||(D[29]=K=>$e(K,"incoming"))},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","gutter-items","applied-blocks"])])])]),a("div",Ri,[s(t(ct),{type:"primary",size:"large",onClick:$},{default:o(()=>[L(l(t(e)("@E80AC:保存所有解决方案")),1)]),_:1})])])):I("",!0),!B.value||T.value.length===0?(r(),v("div",Li,[a("div",xi,[a("div",Ui,[s(t(st),{class:"warning-icon"},{default:o(()=>[s(t(_a))]),_:1}),a("span",null,l(t(e)("@E80AC:检测到冲突,请选择解决方式")),1)]),a("div",zi,[s(t(ct),{type:"primary",size:"small",onClick:Ae},{default:o(()=>[L(l(t(e)("@E80AC:接受当前版本")),1)]),_:1}),s(t(ct),{type:"success",size:"small",onClick:ht},{default:o(()=>[L(l(t(e)("@E80AC:接受传入版本")),1)]),_:1}),s(t(ct),{type:"warning",size:"small",onClick:Pt},{default:o(()=>[L(l(t(e)("@E80AC:接受两者")),1)]),_:1})])]),jt((r(),v("div",Hi,[!H.value&&!g.isLoading?(r(),x(t(Qt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):H.value&&g.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(g.diffContent)},null,8,Wi)):H.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(g.diffContent)},null,8,ji)):I("",!0)])),[[ke,g.isLoading]])])):I("",!0)])):P.value?I("",!0):jt((r(),v("div",qi,[!H.value&&!g.isLoading?(r(),x(t(Qt),{key:0,description:b.value?t(e)("@E80AC:该文件没有差异内容"):t(e)("@E80AC:请选择文件查看差异"),"image-size":80},null,8,["description"])):g.compareMode?(r(),v("div",Ji,[s(za,{original:g.compareOriginal,modified:g.compareModified,language:"auto","file-path":b.value,theme:"auto","read-only":!0},null,8,["original","modified","file-path"])])):H.value&&g.plainText?(r(),v("pre",{key:2,class:"diff-text plain-text",textContent:l(g.diffContent)},null,8,Ki)):H.value?(r(),v("div",{key:3,class:"diff-text",innerHTML:t(Vs)(g.diffContent)},null,8,Yi)):I("",!0)])),[[ke,g.isLoading]])]))],4)}}}),Ta=Je(Qi,[["__scopeId","data-v-cfeefac7"]]),Zi={class:"common-dialog__footer"},Xi=ze({__name:"CommonDialog",props:{modelValue:{type:Boolean},title:{},size:{default:"medium"},type:{default:"default"},width:{},height:{},top:{default:"50px"},closeOnClickModal:{type:Boolean,default:!1},closeOnPressEscape:{type:Boolean,default:!0},destroyOnClose:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},customClass:{},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},zIndex:{},heightMode:{default:"max"},heightOffset:{default:"100px"},showFooter:{type:Boolean,default:!1},confirmText:{default:e("@803A9:确定")},cancelText:{default:e("@803A9:取消")},showCancel:{type:Boolean,default:!0},confirmLoading:{type:Boolean,default:!1}},emits:["update:modelValue","confirm","cancel","close","opened","closed"],setup(j,{emit:k}){const i=j,c=k,f=ie(()=>{if(i.width)return i.width;switch(i.size){case"small":return"30%";case"medium":return"50%";case"large":return"80%";case"extra-large":return"90%";case"fullscreen":return"100vw";default:return"50%"}}),p=ie(()=>i.size==="fullscreen"?"0":i.top),h=ie(()=>{const n=[];return i.customClass&&n.push(i.customClass),i.type==="flex"&&n.push("common-dialog--flex"),i.type==="full-height"&&n.push("common-dialog--full-height"),i.size==="fullscreen"&&n.push("common-dialog--fullscreen"),n.join(" ")}),C=ie(()=>{if(i.size==="fullscreen")return{height:"100vh",maxHeight:"100vh"};const n=`calc(100% - ${i.heightOffset})`;return i.heightMode==="fixed"?{height:n}:{maxHeight:n}});function m(){c("update:modelValue",!1),c("close")}function S(){c("confirm")}function M(){c("cancel"),m()}function b(){c("opened")}function P(){c("closed")}return(n,d)=>{const F=ct;return r(),x(t(sa),{"model-value":n.modelValue,title:n.title,width:f.value,top:p.value,style:ls(C.value),"z-index":n.zIndex,fullscreen:n.size==="fullscreen","close-on-click-modal":n.closeOnClickModal,"close-on-press-escape":n.closeOnPressEscape,"destroy-on-close":n.destroyOnClose,draggable:n.draggable,class:Xe(h.value),"append-to-body":n.appendToBody,"lock-scroll":n.lockScroll,onClose:m,onOpened:b,onClosed:P},an({default:o(()=>[Yt(n.$slots,"default",{},void 0,!0)]),_:2},[n.showFooter||n.$slots.footer?{name:"footer",fn:o(()=>[Yt(n.$slots,"footer",{},()=>[a("div",Zi,[n.showCancel?(r(),x(F,{key:0,onClick:M},{default:o(()=>[L(l(n.cancelText),1)]),_:1})):I("",!0),s(F,{type:"primary",loading:n.confirmLoading,onClick:S},{default:o(()=>[L(l(n.confirmText),1)]),_:1},8,["loading"])])],!0)]),key:"0"}:void 0]),1032,["model-value","title","width","top","style","z-index","fullscreen","close-on-click-modal","close-on-press-escape","destroy-on-close","draggable","class","append-to-body","lock-scroll"])}}}),Gt=Je(Xi,[["__scopeId","data-v-cc3b4a5b"]]),er={key:0,class:"file-group"},tr={class:"file-count"},sr={class:"file-list"},ar=["onClick"],or={class:"file-info"},nr={class:"file-name-section"},lr=["title"],ir={class:"file-directory"},rr={key:0,class:"file-actions"},cr=ze({__name:"FileGroup",props:{files:{},title:{},groupKey:{},collapsedGroups:{},isFileLocked:{type:Function},isLocking:{type:Function},getFileName:{type:Function},getFileDirectory:{type:Function},isSelectionMode:{type:Boolean},isFileSelected:{type:Function}},emits:["toggleCollapse","fileClick","toggleFileLock","stageFile","unstageFile","revertFileChanges","manageLockedFiles","toggleFileSelection"],setup(j,{emit:k}){const i=j,c=k,f=ie(()=>i.files.length>0),p=ie(()=>i.collapsedGroups[i.groupKey]);function h(){c("toggleCollapse",i.groupKey)}function C(w,E){i.isSelectionMode?(E==null||E.stopPropagation(),c("toggleFileSelection",w.path)):c("fileClick",w)}function m(w){c("toggleFileSelection",w)}function S(w){c("toggleFileLock",w)}function M(){c("manageLockedFiles")}function b(w){c("stageFile",w)}function P(w){c("unstageFile",w)}function n(w){c("revertFileChanges",w)}function d(w){switch(w){case"added":return"A";case"modified":return"M";case"deleted":return"D";case"conflicted":return"!";case"untracked":return"U";default:return""}}const F=w=>{const E=i.getFileName(w);return Na(E)};return(w,E)=>{const H=st,z=Ws,A=yt;return f.value?(r(),v("div",er,[a("div",{class:"file-group-header",onClick:h},[s(H,{class:Xe(["collapse-icon",{collapsed:p.value}])},{default:o(()=>[s(t(is))]),_:1},8,["class"]),a("span",null,l(w.title),1),a("span",tr,"("+l(w.files.length)+")",1)]),jt(a("div",sr,[(r(!0),v(Ue,null,tt(w.files,O=>{var Y,ce;return r(),v("div",{key:O.path,class:Xe(["file-item file-group-item",{"is-loading":i.isLocking(O.path),locked:i.isFileLocked(O.path),selected:i.isSelectionMode&&((Y=i.isFileSelected)==null?void 0:Y.call(i,O.path)),[`file-type-${O.type}`]:O.type}]),onClick:X=>C(O,X)},[a("div",or,[i.isSelectionMode?(r(),x(z,{key:0,"model-value":(ce=i.isFileSelected)==null?void 0:ce.call(i,O.path),onChange:X=>m(O.path),onClick:E[0]||(E[0]=qt(()=>{},["stop"])),class:"file-checkbox"},null,8,["model-value","onChange"])):I("",!0),a("span",{class:Xe(["file-type-icon",F(O.path)])},null,2),a("div",nr,[s(A,{content:i.getFileName(O.path),placement:"top",disabled:i.getFileName(O.path).length<=25,"show-after":200},{default:o(()=>[a("div",{class:Xe(["file-name",{"locked-file-name":i.isFileLocked(O.path),"deleted-file-name":O.type==="deleted"}])},[L(l(i.getFileName(O.path))+" ",1),i.isFileLocked(O.path)?(r(),x(H,{key:0,class:"lock-indicator"},{default:o(()=>[s(t(ta))]),_:1})):I("",!0)],2)]),_:2},1032,["content","disabled"])]),a("div",{class:"file-path-section",title:i.getFileDirectory(O.path)},[s(A,{content:i.getFileDirectory(O.path),placement:"top",disabled:i.getFileDirectory(O.path).length<=30,"show-after":200},{default:o(()=>[a("span",ir,l(i.getFileDirectory(O.path)),1)]),_:2},1032,["content","disabled"])],8,lr),a("div",{class:Xe(["file-status-indicator",[O.type,{locked:i.isFileLocked(O.path)}]])},l(d(O.type)),3)]),i.isSelectionMode?I("",!0):(r(),v("div",rr,[s(Oa,{"file-path":O.path,"file-type":O.type,"is-locked":i.isFileLocked(O.path),"is-locking":i.isLocking(O.path),onToggleLock:S,onStage:b,onUnstage:P,onRevert:n,onManageLockedFiles:M},null,8,["file-path","file-type","is-locked","is-locking"])]))],10,ar)}),128))],512),[[aa,!p.value]])])):I("",!0)}}}),Ks=Je(cr,[["__scopeId","data-v-55c32850"]]),ur={class:"config-editor-button"},dr={class:"editor-header"},pr={class:"editor-info"},fr={class:"info-text"},mr={class:"editor-tips"},vr={class:"json-editor-wrapper"},hr={class:"editor-footer"},gr={class:"footer-actions"},yr=["disabled"],Cr={class:"config-warning-content"},_r={class:"warning-message"},br={class:"dialog-footer"},wr=ze({__name:"ConfigEditorButton",props:{variant:{default:"icon"}},setup(j,{expose:k}){const i=j,c=Ut(),f=_(!1),p=_(""),h=_(!1),C=_(!1),m=_("");async function S(){try{const d=await(await fetch("/api/config/check-file-format")).json();let F="";d.success||(F=d.message||e("@76872:配置文件格式可能有问题"));const w=c.config;if(p.value=JSON.stringify(w,null,2),F){m.value=F,C.value=!0;return}f.value=!0}catch{u.error(e("@76872:加载配置失败"))}}async function M(){try{h.value=!0;let n;try{n=JSON.parse(p.value)}catch(w){u.error(`${e("@76872:JSON 解析失败: ")}${w.message||w}`);return}const F=await(await fetch("/api/config/saveAll",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:n})})).json();if(!F.success){u.error(`${e("@76872:保存失败: ")}${F.error||e("@76872:未知错误")}`);return}await c.loadConfig();try{const w=Tt();w.fetchStatus&&await w.fetchStatus()}catch{}u.success(e("@76872:配置已保存")),f.value=!1}catch(n){u.error(`${e("@76872:保存配置失败: ")}${n.message||n}`)}finally{h.value=!1}}async function b(){try{const d=await(await fetch("/api/config/open-file",{method:"POST"})).json();d.success?u.success(e("@76872:已用系统程序打开配置文件")):u.error(d.error||e("@76872:打开文件失败"))}catch(n){u.error(`${e("@76872:打开文件失败: ")}${n.message||n}`)}}function P(n){C.value=!1,n==="continue"?f.value=!0:n==="open"&&b()}return k({openConfigEditor:S}),(n,d)=>{const F=st,w=vs,E=Et,H=ct,z=sa;return r(),v("div",ur,[i.variant==="icon"?(r(),x(nt,{key:0,tooltip:t(e)("@F13B4:编辑项目配置"),size:"large",onClick:S},{default:o(()=>[s(F,null,{default:o(()=>[s(t(Cs))]),_:1})]),_:1},8,["tooltip"])):(r(),v("button",{key:1,class:"action-button",onClick:S},[s(F,null,{default:o(()=>[s(t(Cs))]),_:1}),L(" "+l(t(e)("@F13B4:编辑项目配置")),1)])),s(Gt,{modelValue:f.value,"onUpdate:modelValue":d[2]||(d[2]=A=>f.value=A),title:t(e)("@76872:编辑配置 JSON"),size:"large","height-mode":"fixed","custom-class":"config-editor-dialog","append-to-body":""},{footer:o(()=>[a("div",hr,[a("button",{type:"button",class:"dialog-cancel-btn system-config-btn",onClick:b},[a("span",null,l(t(e)("@76872:打开系统配置文件")),1)]),a("div",gr,[a("button",{type:"button",class:"dialog-cancel-btn",onClick:d[1]||(d[1]=A=>f.value=!1)},l(t(e)("@76872:取消")),1),a("button",{type:"button",class:"dialog-confirm-btn",disabled:h.value,onClick:M},[h.value?(r(),x(F,{key:1,class:"is-loading"},{default:o(()=>d[7]||(d[7]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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})):(r(),x(F,{key:0},{default:o(()=>[s(t(Os))]),_:1})),a("span",null,l(t(e)("@76872:保存配置")),1)],8,yr)])])]),default:o(()=>[a("div",dr,[a("div",pr,[s(F,{class:"info-icon"},{default:o(()=>[s(t(Cs))]),_:1}),a("span",fr,l(t(e)("@76872:编辑当前项目的配置文件")),1)]),a("div",mr,[s(w,{size:"small",type:"info"},{default:o(()=>[L(l(t(e)("@76872:支持JSON格式")),1)]),_:1})])]),a("div",vr,[s(E,{modelValue:p.value,"onUpdate:modelValue":d[0]||(d[0]=A=>p.value=A),type:"textarea",spellcheck:"false",autocomplete:"off",placeholder:t(e)("@76872:在此编辑当前项目配置的 JSON..."),class:"json-editor"},null,8,["modelValue","placeholder"])])]),_:1},8,["modelValue","title"]),s(z,{modelValue:C.value,"onUpdate:modelValue":d[6]||(d[6]=A=>C.value=A),title:t(e)("@76872:配置文件格式提示"),width:"500px","close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":!1},{footer:o(()=>[a("span",br,[s(H,{onClick:d[3]||(d[3]=A=>P("cancel"))},{default:o(()=>[L(l(t(e)("@76872:取消")),1)]),_:1}),s(H,{type:"info",onClick:d[4]||(d[4]=A=>P("open"))},{default:o(()=>[L(l(t(e)("@76872:打开系统配置文件")),1)]),_:1}),s(H,{type:"primary",onClick:d[5]||(d[5]=A=>P("continue"))},{default:o(()=>[L(l(t(e)("@76872:继续编辑")),1)]),_:1})])]),default:o(()=>[a("div",Cr,[s(F,{class:"warning-icon",color:"var(--color-danger)",size:"24"},{default:o(()=>[s(t(_a))]),_:1}),a("p",_r,l(m.value),1)])]),_:1},8,["modelValue","title"])])}}}),kr=Je(wr,[["__scopeId","data-v-58bf30eb"]]),$r={id:"directory-selector",class:"directory-selector"},Sr=["title"],Dr={class:"directory-actions flex"},Fr={class:"directory-content"},Or={class:"form-label"},Nr={class:"directory-input-group"},Tr={class:"form-label"},Br={class:"recent-directories"},Ar=["onClick"],Er=["title"],Pr={class:"dialog-footer"},Vr={class:"footer-actions"},Mr=["disabled"],Gr=ze({__name:"DirectorySelector",emits:["toggleNpmPanel"],setup(j,{emit:k}){const i=Ut(),c=Tt(),f=ie(()=>i.currentDirectory),p=ie(()=>So(f.value)),h=_(!1),C=_(""),m=_(!1),S=_([]),M=_(!1);let b=null;const P=k;function n(){C.value=f.value,h.value=!0,E()}async function d(){try{if(!f.value){u.warning("当前目录路径为空");return}const T=await(await fetch("/api/open_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:f.value})})).json();T.success?u.success("已在文件管理器中打开目录"):T.error&&u.error(T.error)}catch(X){u.error(`${e("@67CE7:打开目录失败: ")}${X.message}`)}}async function F(){try{if(!f.value){u.warning("当前目录路径为空");return}const T=await(await fetch("/api/open_terminal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:f.value})})).json();T.success?u.success("已在终端中打开目录"):T.error&&u.error(T.error)}catch(X){u.error(`${e("@67CE7:打开终端失败: ")}${X.message}`)}}function w(){P("toggleNpmPanel")}async function E(){try{const T=await(await fetch("/api/recent_directories")).json();T.success&&Array.isArray(T.directories)&&(S.value=T.directories)}catch(X){console.error("获取最近目录失败:",X)}}async function H(X){try{await fetch("/api/save_recent_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:X})})}catch(T){console.error("保存最近目录失败:",T)}}async function z(){if(!C.value){u.warning("目录路径不能为空");return}try{m.value=!0;const T=await(await fetch("/api/change_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:C.value})})).json();T.success?(u.success("已切换工作目录"),h.value=!1,await H(T.directory),await E(),c.log=[],c.fileList=[],c.status={staged:[],unstaged:[],untracked:[]},c.currentPage=1,c.totalCommits=0,M.value=!1,i.setCurrentDirectory(T.directory),c.isGitRepo=T.isGitRepo,await i.loadConfig(!0),T.isGitRepo?(await Promise.all([c.getCurrentBranch(),c.getAllBranches(),c.getUserInfo(),c.getRemoteUrl()]),Promise.all([c.refreshLog(),c.fetchStatus()])):(u.warning(e("@67CE7:当前目录不是Git仓库,部分功能将不可用")),c.$reset())):u.error(T.error||"切换目录失败")}catch(X){u.error(`${e("@67CE7:切换目录失败: ")}${X.message}`)}finally{m.value=!1}}async function A(){b&&clearTimeout(b),b=setTimeout(async()=>{if(f.value)try{const X=new AbortController,T=setTimeout(()=>X.abort(),3e4),B=await fetch("/api/scan-npm-scripts",{signal:X.signal});if(clearTimeout(T),!B.ok)throw new Error("扫描NPM脚本失败");const se=await B.json();M.value=se&&se.packages&&se.packages.length>0}catch(X){X.name==="AbortError"?console.log("NPM脚本扫描超时"):console.error("检查NPM脚本失败:",X),M.value=!1}},500)}Ze(f,()=>{A()}),ts(()=>{A()});async function O(){try{const T=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:C.value||f.value})})).json();T.success?Y(T):T.error&&u.error(T.error)}catch(X){u.error(`${e("@67CE7:浏览目录失败: ")}${X.message}`)}}function Y(X){!X||!X.items||Dt.alert(Ye("div",{class:"directory-browser"},[Ye("div",{class:"current-path"},[Ye("span",{class:"path-label"},"当前路径: "),Ye("span",{class:"path-value"},X.path)]),Ye("div",{class:"directory-list"},[X.parentPath?Ye("div",{class:"directory-item parent-dir",onClick:()=>ce(X.parentPath)},[Ye("span",{class:"dir-icon"},Ye("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-warning)"}},[Ye("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ye("span",{class:"dir-name"},"返回上级目录")]):null,...X.items.map(T=>Ye("div",{class:"directory-item",onClick:()=>ce(T.path)},[Ye("span",{class:"dir-icon"},Ye("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-primary)"}},[Ye("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ye("span",{class:"dir-name"},T.name)]))])]),"浏览并选择目录",{confirmButtonText:e("@CMD01:确定"),customClass:"directory-browser-dialog",callback:T=>{T==="confirm"&&(C.value=X.path)}})}async function ce(X){try{Dt.close(),setTimeout(async()=>{try{const B=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:X})})).json();B.success?Y(B):B.error&&u.error(B.error)}catch(T){u.error(`${e("@67CE7:浏览目录失败: ")}${T.message}`)}},100)}catch(T){u.error(`${e("@67CE7:处理目录选择时出错: ")}${T.message}`)}}return(X,T)=>{const B=st,se=Et,_e=bs,De=_s;return r(),v(Ue,null,[a("div",$r,[a("div",{class:"directory-display cursor-pointer",title:f.value,onClick:n},l(p.value),9,Sr),a("div",Dr,[s(kr,{variant:"icon"}),s(nt,{tooltip:t(e)("@67CE7:在资源管理器中打开"),size:"large",onClick:d},{default:o(()=>[s(B,null,{default:o(()=>[s(t(Xs))]),_:1})]),_:1},8,["tooltip"]),s(nt,{tooltip:"在终端中打开",size:"large",onClick:F},{default:o(()=>[s(B,null,{default:o(()=>[s(t(Us))]),_:1})]),_:1}),M.value?(r(),x(nt,{key:0,tooltip:"NPM 脚本",size:"large","custom-class":"npm-btn",onClick:w},{default:o(()=>[s(Lt,{"icon-class":"npm"})]),_:1})):I("",!0)])]),s(Gt,{modelValue:h.value,"onUpdate:modelValue":T[3]||(T[3]=ue=>h.value=ue),title:t(e)("@67CE7:切换工作目录"),size:"medium","destroy-on-close":!0,"append-to-body":!0,"custom-class":"directory-dialog"},{footer:o(()=>[a("div",Pr,[a("div",Vr,[a("button",{type:"button",class:"dialog-cancel-btn",onClick:T[1]||(T[1]=ue=>h.value=!1)},l(t(e)("@67CE7:取消")),1),a("button",{type:"button",class:"dialog-confirm-btn",onClick:T[2]||(T[2]=ue=>z()),disabled:m.value},[m.value?(r(),x(B,{key:1,class:"is-loading"},{default:o(()=>T[4]||(T[4]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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})):(r(),x(B,{key:0},{default:o(()=>[s(t(rs))]),_:1})),a("span",null,l(t(e)("@67CE7:切换")),1)],8,Mr)])])]),default:o(()=>[a("div",Fr,[s(De,{"label-position":"top"},{default:o(()=>[s(_e,null,{label:o(()=>[a("div",Or,[s(B,{class:"label-icon"},{default:o(()=>[s(t(rs))]),_:1}),a("span",null,l(t(e)("@67CE7:目录路径")),1)])]),default:o(()=>[a("div",Nr,[s(se,{modelValue:C.value,"onUpdate:modelValue":T[0]||(T[0]=ue=>C.value=ue),placeholder:t(e)("@67CE7:请输入目录路径"),class:"modern-input",size:"large"},null,8,["modelValue","placeholder"]),a("button",{type:"button",class:"browse-btn",onClick:O},[s(B,null,{default:o(()=>[s(t(rs))]),_:1}),a("span",null,l(t(e)("@67CE7:浏览")),1)])])]),_:1}),S.value.length>0?(r(),x(_e,{key:0},{label:o(()=>[a("div",Tr,[s(B,{class:"label-icon"},{default:o(()=>[s(t($a))]),_:1}),a("span",null,l(t(e)("@67CE7:常用目录")),1)])]),default:o(()=>[a("div",Br,[(r(!0),v(Ue,null,tt(S.value,(ue,be)=>(r(),v("div",{key:be,class:"recent-dir-item",onClick:G=>C.value=ue},[s(B,{class:"dir-icon"},{default:o(()=>[s(t(rs))]),_:1}),a("span",{class:"dir-path",title:ue},l(ue),9,Er)],8,Ar))),128))])]),_:1})):I("",!0)]),_:1})])]),_:1},8,["modelValue","title"])],64)}}}),Ir=Je(Gr,[["__scopeId","data-v-3c54720b"]]),Rr={class:"settings-content"},Lr={class:"package-info-bar"},xr={class:"info-label"},Ur={class:"info-value"},zr={class:"info-path"},Hr={class:"tab-content"},Wr={class:"current-version"},jr={class:"version-label"},qr={class:"version-value"},Jr={class:"version-options"},Kr={class:"option-label"},Yr={class:"radio-content"},Qr={class:"radio-label"},Zr={class:"radio-desc"},Xr={class:"tab-content script-management"},ec={class:"scripts-list-section"},tc={class:"section-header"},sc={class:"section-title"},ac={class:"script-count"},oc={key:0,class:"empty-scripts"},nc={key:1,class:"script-items"},lc={class:"script-item-content"},ic={class:"script-name-tag"},rc={class:"name-text"},cc={class:"script-command"},uc={class:"script-item-actions"},dc={class:"script-form-section"},pc={class:"section-header"},fc={class:"section-title"},mc={class:"form-group"},vc={class:"form-item"},hc={class:"form-label"},gc={key:0,class:"error-tip"},yc={key:1,class:"success-tip"},Cc={class:"form-item"},_c={class:"form-label"},bc=ze({__name:"NpmSettingsDialog",props:{visible:{type:Boolean},packageInfo:{}},emits:["close","complete"],setup(j,{emit:k}){const i=j,c=k,f=_("version"),p=_("patch"),h=_(!1),C=_(""),m=_(""),S=_(!1),M=_(""),b=_(!1),P=_(!1),n=_(!1),d=_("");function F(T){if(!T.trim())return d.value="",!1;const B=/^[a-zA-Z_:][a-zA-Z0-9_:.-]*$/;return T.includes(" ")?(d.value=e("@NPM01:脚本名称不能包含空格"),!1):B.test(T)?(d.value="",!0):(d.value=e("@NPM01:脚本名称只能包含字母、数字、连字符、冒号、下划线和点号,且不能以数字开头"),!1)}function w(){C.value.trim()?F(C.value):d.value=""}const E=[{label:e("@NPM01:主版本号 (major)"),value:"major",desc:"1.0.0 → 2.0.0"},{label:e("@NPM01:次版本号 (minor)"),value:"minor",desc:"1.0.0 → 1.1.0"},{label:e("@NPM01:修订号 (patch)"),value:"patch",desc:"1.0.0 → 1.0.1"}];async function H(){try{h.value=!0;const B=await(await fetch("/api/update-npm-version",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,versionType:p.value})})).json();B.success?(u.success(`${e("@NPM01:版本号已更新")}: ${B.oldVersion} → ${B.newVersion}`),c("complete")):u.error(B.error||e("@NPM01:更新版本号失败"))}catch(T){console.error("更新版本号失败:",T),u.error(e("@NPM01:更新版本号失败"))}finally{h.value=!1}}async function z(){if(!C.value.trim()){u.warning(e("@NPM01:请输入脚本名称"));return}if(!F(C.value)){u.warning(d.value||e("@NPM01:脚本名称格式不正确"));return}if(!m.value.trim()){u.warning(e("@NPM01:请输入脚本命令"));return}try{S.value=!0;const T=n.value?"/api/update-npm-script":"/api/add-npm-script",se=await(await fetch(T,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:C.value.trim(),scriptCommand:m.value.trim(),oldScriptName:n.value?M.value:void 0})})).json();se.success?(u.success(n.value?e("@NPM01:脚本已更新"):e("@NPM01:脚本已添加")),O(),c("complete")):u.error(se.error||(n.value?e("@NPM01:更新脚本失败"):e("@NPM01:添加脚本失败")))}catch(T){console.error("保存脚本失败:",T),u.error(n.value?e("@NPM01:更新脚本失败"):e("@NPM01:添加脚本失败"))}finally{S.value=!1}}function A(T,B){n.value=!0,M.value=T,C.value=T,m.value=B,d.value=""}function O(){n.value=!1,M.value="",C.value="",m.value="",d.value=""}async function Y(T){try{P.value=!0;const se=await(await fetch("/api/pin-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:T})})).json();se.success?(u.success(e("@NPM01:脚本已置顶")),c("complete")):u.error(se.error||e("@NPM01:置顶脚本失败"))}catch(B){console.error("置顶脚本失败:",B),u.error(e("@NPM01:置顶脚本失败"))}finally{P.value=!1}}async function ce(T){try{await Dt.confirm(e("@NPM01:确定要删除脚本")+` "${T}" `+e("@NPM01:吗?"),e("@NPM01:删除脚本"),{confirmButtonText:e("@NPM01:确定"),cancelButtonText:e("@NPM01:取消"),type:"warning"}),b.value=!0;const se=await(await fetch("/api/delete-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:T})})).json();se.success?(u.success(e("@NPM01:脚本已删除")),c("complete")):u.error(se.error||e("@NPM01:删除脚本失败"))}catch(B){B!=="cancel"&&(console.error("删除脚本失败:",B),u.error(e("@NPM01:删除脚本失败")))}finally{b.value=!1}}function X(){f.value="version",p.value="patch",O(),c("close")}return(T,B)=>{const se=no,_e=js,De=ct,ue=nn,be=Qt,G=st,q=Lt,ge=Et,Q=on;return r(),x(Gt,{"model-value":T.visible,title:T.packageInfo.name+" - "+t(e)("@NPM01:NPM 设置"),size:"medium",onClose:X},{default:o(()=>[a("div",Rr,[a("div",Lr,[a("span",xr,l(t(e)("@NPM01:包名称"))+":",1),a("span",Ur,l(T.packageInfo.name),1),a("span",zr,l(T.packageInfo.relativePath),1)]),s(Q,{modelValue:f.value,"onUpdate:modelValue":B[3]||(B[3]=re=>f.value=re),class:"settings-tabs"},{default:o(()=>[s(ue,{label:t(e)("@NPM01:版本号管理"),name:"version"},{default:o(()=>[a("div",Hr,[a("div",Wr,[a("span",jr,l(t(e)("@NPM01:当前版本"))+":",1),a("span",qr,l(T.packageInfo.version),1)]),a("div",Jr,[a("label",Kr,l(t(e)("@NPM01:选择要增加的版本号类型"))+":",1),s(_e,{modelValue:p.value,"onUpdate:modelValue":B[0]||(B[0]=re=>p.value=re),class:"version-radio-group"},{default:o(()=>[(r(),v(Ue,null,tt(E,re=>s(se,{key:re.value,value:re.value,border:"",class:"version-radio"},{default:o(()=>[a("div",Yr,[a("span",Qr,l(re.label),1),a("span",Zr,l(re.desc),1)])]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"])]),s(De,{type:"primary",loading:h.value,onClick:H,class:"action-button"},{default:o(()=>[L(l(t(e)("@NPM01:更新版本号")),1)]),_:1},8,["loading"])])]),_:1},8,["label"]),s(ue,{label:t(e)("@NPM01:脚本管理"),name:"script"},{default:o(()=>[a("div",Xr,[a("div",ec,[a("div",tc,[a("span",sc,l(t(e)("@NPM01:当前脚本列表")),1),a("span",ac,l(Object.keys(T.packageInfo.scripts||{}).length)+" "+l(t(e)("@NPM01:个脚本")),1)]),Object.keys(T.packageInfo.scripts||{}).length===0?(r(),v("div",oc,[s(be,{description:t(e)("@NPM01:暂无脚本"),"image-size":80},null,8,["description"])])):(r(),v("div",nc,[(r(!0),v(Ue,null,tt(T.packageInfo.scripts,(re,ne)=>(r(),v("div",{key:ne,class:"script-item-card"},[a("div",lc,[a("div",ic,[s(G,{class:"script-icon"},{default:o(()=>B[4]||(B[4]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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"}),a("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}),a("span",rc,l(ne),1)]),a("div",cc,[a("code",null,l(re),1)])]),a("div",uc,[s(De,{size:"small",text:"",class:"pin-button",onClick:te=>Y(ne),loading:P.value,title:"置顶"},{default:o(()=>[s(q,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading"]),s(De,{size:"small",type:"primary",text:"",onClick:te=>A(ne,re),disabled:n.value&&M.value===ne,title:t(e)("@NPM01:编辑")},{default:o(()=>[s(G,null,{default:o(()=>B[5]||(B[5]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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"}),a("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})]),_:2},1032,["onClick","disabled","title"]),s(De,{size:"small",type:"danger",text:"",onClick:te=>ce(ne),loading:b.value,title:t(e)("@NPM01:删除")},{default:o(()=>[s(G,null,{default:o(()=>B[6]||(B[6]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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})]),_:2},1032,["onClick","loading","title"])])]))),128))]))]),a("div",dc,[a("div",pc,[a("span",fc,l(n.value?t(e)("@NPM01:编辑脚本"):t(e)("@NPM01:添加新脚本")),1),n.value?(r(),x(De,{key:0,size:"small",text:"",onClick:O},{default:o(()=>[L(l(t(e)("@NPM01:取消编辑")),1)]),_:1})):I("",!0)]),a("div",mc,[a("div",vc,[a("label",hc,l(t(e)("@NPM01:脚本名称"))+":",1),s(ge,{modelValue:C.value,"onUpdate:modelValue":B[1]||(B[1]=re=>C.value=re),placeholder:t(e)("@NPM01:例如: build, dev, test"),disabled:n.value,clearable:"",onInput:w},null,8,["modelValue","placeholder","disabled"]),d.value?(r(),v("div",gc,[s(G,null,{default:o(()=>B[7]||(B[7]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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}),a("span",null,l(d.value),1)])):C.value.trim()&&!n.value?(r(),v("div",yc,[s(G,null,{default:o(()=>B[8]||(B[8]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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}),a("span",null,l(t(e)("@NPM01:脚本名称格式正确")),1)])):I("",!0)]),a("div",Cc,[a("label",_c,l(t(e)("@NPM01:脚本命令"))+":",1),s(ge,{modelValue:m.value,"onUpdate:modelValue":B[2]||(B[2]=re=>m.value=re),placeholder:t(e)("@NPM01:例如: vite build, vite dev"),clearable:""},null,8,["modelValue","placeholder"])])]),s(De,{type:"primary",loading:S.value,disabled:!C.value.trim()||!m.value.trim(),onClick:z,class:"action-button"},{default:o(()=>[L(l(n.value?t(e)("@NPM01:更新脚本"):t(e)("@NPM01:添加脚本")),1)]),_:1},8,["loading","disabled"])])])]),_:1},8,["label"])]),_:1},8,["modelValue"])])]),_:1},8,["model-value","title"])}}}),wc=Je(bc,[["__scopeId","data-v-6cc6f7d7"]]),kc={key:0,class:"npm-scripts-panel"},$c={class:"panel-header"},Sc={class:"header-left"},Dc={class:"panel-title"},Fc={class:"header-right"},Oc={key:0,class:"loading-container"},Nc={class:"loading-text"},Tc={key:1,class:"empty-container"},Bc={class:"empty-text"},Ac=["onClick"],Ec={class:"package-info"},Pc={class:"package-name"},Vc={class:"package-path"},Mc={key:0,class:"scripts-list"},Gc=["onClick"],Ic={class:"script-left"},Rc={class:"script-name"},Lc={class:"script-command"},xc=ze({__name:"NpmScriptsPanel",props:{visible:{type:Boolean}},emits:["close"],setup(j,{emit:k}){const i=j,c=k,f=_([]),p=_(!1),h=_(new Set),C=_(!1),m=_(""),S=_(null);function M(T){m.value=T.path,S.value=T,C.value=!0}function b(){C.value=!1,m.value="",S.value=null}function P(){b(),Y()}function n(T){if(!T)return null;if(typeof T=="string")return T;if(typeof T=="object"&&T.url){let B=T.url;return B=B.replace(/^git\+/,""),B=B.replace(/\.git$/,""),B}return null}function d(T){const B=n(T.repository);B&&window.open(B,"_blank")}const F=_(300),w=_(!1),E=_(0),H=_(0);function z(T){w.value=!0,E.value=T.clientY,H.value=F.value,document.addEventListener("mousemove",A),document.addEventListener("mouseup",O),T.preventDefault()}function A(T){if(!w.value)return;const B=E.value-T.clientY,se=Math.max(200,Math.min(600,H.value+B));F.value=se}function O(){w.value=!1,document.removeEventListener("mousemove",A),document.removeEventListener("mouseup",O)}async function Y(){const T=Date.now();console.log("[NPM面板] 开始加载npm脚本...");try{p.value=!0;const B=new AbortController,se=3e4,_e=setTimeout(()=>{B.abort(),console.warn(`[NPM面板] 超时${se}ms,中断请求`)},se);console.log(`[NPM面板] 发起请求到后端(超时${se}ms)...`);const De=Date.now(),ue=await fetch("/api/scan-npm-scripts",{signal:B.signal});clearTimeout(_e);const be=Date.now()-De;console.log(`[NPM面板] 后端响应完成,耗时${be}ms`);const G=Date.now(),q=await ue.json(),ge=Date.now()-G;if(console.log(`[NPM面板] JSON解析完成,耗时${ge}ms`),q.success){if(q.cancelled){console.log(`[NPM面板] 扫描被取消,总耗时${Date.now()-T}ms`);return}f.value=q.packages,console.log(`[NPM面板] 加载完成,找到${f.value.length}个package.json,共${q.totalScripts}个脚本,总耗时${Date.now()-T}ms`),f.value.length===0&&console.log("[NPM面板] 未找到包含scripts的package.json")}else console.error(`[NPM面板] 加载失败,耗时${Date.now()-T}ms`),u.error(e("@NPM01:加载npm脚本失败"))}catch(B){B.name==="AbortError"?(console.warn(`[NPM面板] 请求超时被中断,耗时${Date.now()-T}ms`),u.warning("NPM脚本扫描超时,请稍后重试")):console.error(`[NPM面板] 加载失败,耗时${Date.now()-T}ms,错误:`,B)}finally{p.value=!1}}function ce(T){h.value.has(T)?h.value.delete(T):h.value.add(T)}async function X(T,B){try{const _e=await(await fetch("/api/run-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:T,scriptName:B})})).json();_e.success?u.success(`${e("@NPM01:已在新终端中执行")}: ${B}`):u.error(_e.error||e("@NPM01:执行脚本失败"))}catch(se){console.error("执行npm脚本失败:",se),u.error(`${e("@NPM01:执行脚本失败")}: ${se.message}`)}}return Ze(()=>i.visible,T=>{T&&Y()},{immediate:!0}),(T,B)=>{const se=st,_e=yt;return T.visible?(r(),v("div",kc,[a("div",{class:"resize-handle",onMousedown:z},null,32),a("div",$c,[a("div",Sc,[s(Lt,{"icon-class":"npm","class-name":"npm-icon"}),a("span",Dc,l(t(e)("@NPM01:NPM 脚本")),1)]),a("div",Fc,[s(nt,{size:"small",disabled:p.value,onClick:Y},{default:o(()=>[s(se,{class:Xe({"is-rotating":p.value})},{default:o(()=>B[1]||(B[1]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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"]),s(nt,{size:"small",onClick:B[0]||(B[0]=De=>c("close"))},{default:o(()=>[s(se,null,{default:o(()=>B[2]||(B[2]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})],-1)])),_:1})]),_:1})])]),p.value?(r(),v("div",Oc,[s(se,{class:"is-loading loading-icon"},{default:o(()=>B[3]||(B[3]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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}),a("p",Nc,l(t(e)("@NPM01:正在扫描项目中的 npm 脚本...")),1)])):f.value.length===0?(r(),v("div",Tc,[B[4]||(B[4]=a("svg",{class:"empty-icon",viewBox:"0 0 1024 1024",width:"64",height:"64"},[a("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)),a("p",Bc,l(t(e)("@NPM01:当前项目中未找到包含 scripts 的 package.json")),1)])):(r(),v("div",{key:2,class:"packages-container",style:ls({maxHeight:F.value+"px"})},[(r(!0),v(Ue,null,tt(f.value,De=>(r(),v("div",{key:De.path,class:"package-item"},[a("div",{class:"package-header",onClick:ue=>ce(De.path)},[s(se,{class:Xe(["expand-icon",{expanded:h.value.has(De.path)}])},{default:o(()=>B[5]||(B[5]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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)])),_:2},1032,["class"]),s(se,{class:"folder-icon"},{default:o(()=>[s(t(Xs))]),_:1}),a("div",Ec,[a("span",Pc,l(De.name),1),a("span",Vc,l(De.relativePath),1)]),n(De.repository)?(r(),x(_e,{key:0,content:n(De.repository),placement:"bottom","show-after":300},{default:o(()=>[s(se,{class:"repo-icon",onClick:qt(ue=>d(De),["stop"])},{default:o(()=>B[6]||(B[6]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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)])),_:2},1032,["onClick"])]),_:2},1032,["content"])):I("",!0),s(se,{class:"settings-icon",onClick:qt(ue=>M(De),["stop"])},{default:o(()=>B[7]||(B[7]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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)])),_:2},1032,["onClick"])],8,Ac),h.value.has(De.path)?(r(),v("div",Mc,[(r(!0),v(Ue,null,tt(De.scripts,(ue,be)=>(r(),v("div",{key:be,class:"script-item",onClick:G=>X(De.path,be)},[a("div",Ic,[s(se,{class:"play-icon"},{default:o(()=>B[8]||(B[8]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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"}),a("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}),a("span",Rc,l(be),1)]),a("span",Lc,l(ue),1)],8,Gc))),128))])):I("",!0)]))),128))],4)),S.value?(r(),x(wc,{key:3,visible:C.value,"package-info":S.value,onClose:b,onComplete:P},null,8,["visible","package-info"])):I("",!0)])):I("",!0)}}}),Uc=Je(xc,[["__scopeId","data-v-42a82c9d"]]),zc={key:0,class:"stash-changes-button"},Hc={class:"stash-dialog-content"},Wc={class:"stash-info-card"},jc={class:"info-icon"},qc={class:"info-content"},Jc={class:"stash-options"},Kc={class:"options-title"},Yc={class:"option-item"},Qc={class:"option-label"},Zc={class:"option-desc"},Xc={class:"option-item"},eu={class:"option-label"},tu={key:0,class:"stash-preview"},su={class:"preview-title"},au={class:"file-count-info"},ou={class:"dialog-footer"},nu={class:"footer-actions"},lu=["disabled"],iu=ze({__name:"StashChangesButton",props:{variant:{default:"icon"}},setup(j){const k=j,i=Tt(),c=Ut(),f=_(!1),p=_(""),h=_(!0),C=_(!1),m=ie(()=>i.fileList.some(n=>n.type==="modified"||n.type==="added"||n.type==="deleted"||n.type==="untracked")),S=ie(()=>{if(!m.value)return!1;const n=i.fileList.filter(d=>d.type==="modified"||d.type==="added"||d.type==="deleted"||d.type==="untracked");return n.length===0?!1:n.every(d=>{const F=d.path.replace(/\\/g,"/");return c.lockedFiles.some(w=>{const E=w.replace(/\\/g,"/");return F===E})})});function M(){p.value="",S.value||(C.value=!1),f.value=!0}async function b(){try{await i.saveStash(p.value,h.value,C.value),f.value=!1}catch(n){console.error("储藏失败:",n)}}function P(n){if(!(n.isComposing||n.keyCode===229)&&n.key==="Enter"&&!n.shiftKey){if(n.preventDefault(),i.isSavingStash||i.hasConflictedFiles)return;b()}}return(n,d)=>{const F=st,w=ct,E=Et,H=bs,z=Ws,A=vs,O=_s;return m.value?(r(),v("div",zc,[k.variant==="icon"?(r(),x(nt,{key:0,tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:将工作区更改储藏起来"),size:"large",disabled:t(i).hasConflictedFiles||t(i).isSavingStash,"hover-color":"var(--color-warning)",onClick:M},{default:o(()=>[t(i).isSavingStash?(r(),x(F,{key:0,class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(Lt,{key:1,"icon-class":"git-stash"}))]),_:1},8,["tooltip","disabled"])):(r(),x(w,{key:1,type:"warning",class:"action-button",onClick:M,loading:t(i).isSavingStash,disabled:t(i).hasConflictedFiles},{default:o(()=>[L(l(t(e)("@76872:储藏更改")),1)]),_:1},8,["loading","disabled"])),s(Gt,{modelValue:f.value,"onUpdate:modelValue":d[4]||(d[4]=Y=>f.value=Y),title:t(e)("@76872:储藏更改 (Git Stash)"),size:"medium","close-on-click-modal":!1,"custom-class":"stash-dialog"},{footer:o(()=>[a("div",ou,[a("div",nu,[a("button",{type:"button",class:"dialog-cancel-btn",onClick:d[3]||(d[3]=Y=>f.value=!1)},l(t(e)("@76872:取消")),1),a("button",{type:"button",class:"dialog-confirm-btn",onClick:b,disabled:t(i).isSavingStash||t(i).hasConflictedFiles},[t(i).isSavingStash?(r(),x(F,{key:1,class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(F,{key:0},{default:o(()=>[s(t(Os))]),_:1})),a("span",null,l(t(e)("@76872:储藏")),1)],8,lu)])])]),default:o(()=>[a("div",Hc,[a("div",Wc,[a("div",jc,[s(Lt,{"icon-class":"git-stash"})]),a("div",qc,[a("h4",null,l(t(e)("@76872:储藏工作区更改")),1),a("p",null,l(t(e)("@76872:将当前工作区的更改临时保存,稍后可以重新应用到任何分支")),1)])]),s(O,{"label-position":"top",class:"stash-form"},{default:o(()=>[s(H,{label:t(e)("@76872:储藏说明")},{default:o(()=>[s(E,{modelValue:p.value,"onUpdate:modelValue":d[0]||(d[0]=Y=>p.value=Y),placeholder:t(e)("@76872:为这次储藏添加描述信息(可选)"),clearable:"",onKeydown:P,rows:2,type:"textarea",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),a("div",Jc,[a("h5",Kc,[s(F,null,{default:o(()=>[s(t(As))]),_:1}),L(" "+l(t(e)("@76872:储藏选项")),1)]),a("div",Yc,[s(z,{modelValue:h.value,"onUpdate:modelValue":d[1]||(d[1]=Y=>h.value=Y),size:"large"},{default:o(()=>[a("span",Qc,l(t(e)("@76872:包含未跟踪文件")),1)]),_:1},8,["modelValue"]),a("p",Zc,l(t(e)("@76872:同时储藏新建但未添加到Git的文件 (--include-untracked)")),1)]),a("div",Xc,[s(z,{modelValue:C.value,"onUpdate:modelValue":d[2]||(d[2]=Y=>C.value=Y),disabled:S.value,size:"large"},{default:o(()=>[a("span",eu,l(t(e)("@76872:排除锁定文件")),1)]),_:1},8,["modelValue","disabled"]),a("p",{class:Xe(["option-desc",{disabled:S.value}])},l(t(e)("@76872:不储藏被锁定的文件,保持其当前状态")),3)])]),t(i).status.staged.length>0||t(i).status.unstaged.length>0?(r(),v("div",tu,[a("h5",su,[s(F,null,{default:o(()=>[s(t(Sa))]),_:1}),L(" "+l(t(e)("@76872:将要储藏的文件")),1)]),a("div",au,[t(i).status.staged.length>0?(r(),x(A,{key:0,type:"success"},{default:o(()=>[L(l(t(e)("@76872:已暂存: "))+l(t(i).status.staged.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})):I("",!0),t(i).status.unstaged.length>0?(r(),x(A,{key:1,type:"warning"},{default:o(()=>[L(l(t(e)("@76872:未暂存: "))+l(t(i).status.unstaged.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})):I("",!0)])])):I("",!0)]),_:1})])]),_:1},8,["modelValue","title"])])):I("",!0)}}}),Oo=Je(iu,[["__scopeId","data-v-6c41a159"]]),ru={class:"stash-list-button"},cu={class:"stash-list-content"},uu={key:0,class:"stash-header"},du={class:"stash-stats"},pu={class:"stat-item"},fu={class:"stat-number"},mu={class:"stat-label"},vu={key:0,class:"stash-actions-header"},hu={class:"stash-list-container"},gu={key:0,class:"empty-state"},yu={class:"empty-text"},Cu={class:"empty-hint"},_u={key:1,class:"stash-cards"},bu={class:"stash-card-content"},wu={class:"stash-info"},ku={class:"stash-main-info"},$u={class:"stash-id-badge"},Su={class:"stash-id-text"},Du={class:"stash-description"},Fu={class:"description-text"},Ou={class:"stash-card-actions"},Nu={class:"stash-content"},Tu={key:0,class:"stash-info-row"},Bu={class:"stash-id"},Au={class:"stash-id-value"},Eu={class:"stash-description"},Pu={class:"info-label"},Vu={class:"stash-description-value"},Mu={class:"stash-main-content"},Gu=ze({__name:"StashListButton",props:{variant:{default:"icon"}},setup(j){const k=j,i=Tt(),c=_(!1),f=_(!1),p=_(null),h=_([]),C=_(""),m=_(!1),S=_(""),M=ie(()=>h.value.map(A=>({path:A,name:A.split("/").pop()||A})));function b(){i.getStashList(),c.value=!0}async function P(A,O=!1){try{await i.applyStash(A,O),O&&await i.getStashList()}catch(Y){console.error("应用储藏失败:",Y)}}async function n(A){Dt.confirm(e("@76872:确定要删除此储藏吗?此操作不可恢复。"),e("@76872:删除储藏"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),type:"warning"}).then(async()=>{await i.dropStash(A),await i.getStashList()}).catch(()=>{})}async function d(){Dt.confirm(e("@76872:确定要清空所有储藏吗?此操作不可恢复。"),e("@76872:清空所有储藏"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),type:"warning"}).then(async()=>{await i.clearAllStashes(),await i.getStashList()}).catch(()=>{})}async function F(A){if(A){p.value=A,f.value=!0,m.value=!0,h.value=[],C.value="",S.value="";try{if(!A.id||A.id.length<7){C.value=e("@76872:无效的stash ID"),m.value=!1;return}const Y=await(await fetch(`/api/stash-files?stashId=${encodeURIComponent(A.id)}`)).json();Y.success&&Array.isArray(Y.files)?(h.value=Y.files,h.value.length>0?await w(A.id,h.value[0]):C.value=e("@76872:该stash没有变更文件")):C.value=`${e("@76872:获取文件列表失败: ")}${Y.error||e("@76872:未知错误")}`}catch(O){C.value=`${e("@76872:获取stash详情失败: ")}${O.message}`}finally{m.value=!1}}}async function w(A,O){m.value=!0,S.value=O;try{const ce=await(await fetch(`/api/stash-file-diff?stashId=${encodeURIComponent(A)}&file=${encodeURIComponent(O)}`)).json();ce.success?C.value=ce.diff||e("@76872:没有变更内容"):C.value=`${e("@76872:获取差异失败: ")}${ce.error||e("@76872:未知错误")}`}catch(Y){C.value=`${e("@76872:获取差异失败: ")}${Y.message}`}finally{m.value=!1}}function E(A){p.value&&w(p.value.id,A)}async function H(A,O){try{const ce=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:A,context:O})})).json();ce.success?u.success(ce.message):u.error(ce.error||e("@76872:打开文件失败"))}catch(Y){u.error(`${e("@76872:打开文件失败: ")}${Y.message}`)}}async function z(A,O){try{const ce=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:A,context:O})})).json();ce.success?u.success(ce.message):u.error(ce.error||e("@76872:用VSCode打开文件失败"))}catch(Y){u.error(`${e("@76872:用VSCode打开文件失败: ")}${Y.message}`)}}return(A,O)=>{const Y=st,ce=ct,X=Qt,T=vs,B=Fs;return r(),v("div",ru,[k.variant==="icon"?(r(),x(nt,{key:0,tooltip:t(e)("@76872:查看和管理所有储藏记录"),size:"large","hover-color":"var(--color-info)",onClick:b},{default:o(()=>[s(Y,null,{default:o(()=>[s(t(Js))]),_:1})]),_:1},8,["tooltip"])):(r(),x(ce,{key:1,type:"info",class:"action-button",onClick:b},{default:o(()=>[L(l(t(e)("@76872:储藏列表")),1)]),_:1})),s(Gt,{modelValue:c.value,"onUpdate:modelValue":O[0]||(O[0]=se=>c.value=se),title:t(e)("@76872:储藏列表 (Git Stash)"),size:"large","show-footer":!1,"custom-class":"stash-list-dialog"},{default:o(()=>[a("div",cu,[t(i).isLoadingStashes?I("",!0):(r(),v("div",uu,[a("div",du,[a("div",pu,[s(Y,{class:"stat-icon"},{default:o(()=>[s(t(Js))]),_:1}),a("span",fu,l(t(i).stashes.length),1),a("span",mu,l(t(e)("@76872:个储藏")),1)])]),t(i).stashes.length>0?(r(),v("div",vu,[s(ce,{type:"danger",size:"small",icon:t(Zt),onClick:d,loading:t(i).isDroppingStash,class:"clear-all-btn"},{default:o(()=>[L(l(t(e)("@76872:清空所有储藏")),1)]),_:1},8,["icon","loading"])])):I("",!0)])),jt((r(),v("div",hu,[t(i).stashes.length===0&&!t(i).isLoadingStashes?(r(),v("div",gu,[s(X,{description:t(e)("@76872:暂无储藏记录"),"image-size":120},{image:o(()=>[s(Y,{class:"empty-icon"},{default:o(()=>[s(t(Js))]),_:1})]),description:o(()=>[a("p",yu,l(t(e)("@76872:还没有任何储藏记录")),1),a("p",Cu,l(t(e)("@76872:使用 git stash 可以临时保存工作进度")),1)]),_:1},8,["description"])])):(r(),v("div",_u,[(r(!0),v(Ue,null,tt(t(i).stashes,(se,_e)=>(r(),v("div",{key:se.id,class:Xe(["stash-card",{"stash-card-latest":_e===0}])},[a("div",bu,[a("div",wu,[a("div",ku,[a("div",$u,[s(Y,{class:"badge-icon"},{default:o(()=>[s(t(Js))]),_:1}),a("span",Su,l(se.id),1),_e===0?(r(),x(T,{key:0,size:"small",type:"success",class:"latest-tag"},{default:o(()=>[L(l(t(e)("@76872:最新")),1)]),_:1})):I("",!0)]),a("div",Du,[a("span",Fu,l(se.description),1)])])]),a("div",Ou,[s(ce,{size:"small",type:"info",icon:t(Cs),onClick:De=>F(se),loading:m.value,class:"action-btn view-btn"},{default:o(()=>[L(l(t(e)("@76872:查看")),1)]),_:2},1032,["icon","onClick","loading"]),s(ce,{size:"small",type:"success",icon:t(Da),onClick:De=>P(se.id,!1),loading:t(i).isApplyingStash,class:"action-btn apply-btn"},{default:o(()=>[L(l(t(e)("@76872:应用")),1)]),_:2},1032,["icon","onClick","loading"]),s(ce,{size:"small",type:"primary",icon:t(Os),onClick:De=>P(se.id,!0),loading:t(i).isApplyingStash,class:"action-btn apply-pop-btn"},{default:o(()=>[L(l(t(e)("@76872:应用并删除")),1)]),_:2},1032,["icon","onClick","loading"]),s(ce,{size:"small",type:"danger",icon:t(Zt),onClick:De=>n(se.id),loading:t(i).isDroppingStash,class:"action-btn delete-btn"},{default:o(()=>[L(l(t(e)("@76872:删除")),1)]),_:2},1032,["icon","onClick","loading"])])])],2))),128))]))])),[[B,t(i).isLoadingStashes]])])]),_:1},8,["modelValue","title"]),s(Gt,{modelValue:f.value,"onUpdate:modelValue":O[1]||(O[1]=se=>f.value=se),title:t(e)("@76872:储藏详情"),"custom-class":"stash-detail-dialog",size:"extra-large",type:"flex",heightMode:"fixed","close-on-click-modal":!1},{default:o(()=>[a("div",Nu,[p.value?(r(),v("div",Tu,[a("div",Bu,[O[2]||(O[2]=a("span",{class:"info-label"},"Stash ID:",-1)),a("code",Au,l(p.value.id),1)]),a("div",Eu,[a("span",Pu,l(t(e)("@76872:描述:")),1),a("span",Vu,l(p.value.description),1)])])):I("",!0),a("div",Mu,[s(Ta,{files:M.value,diffContent:C.value,selectedFile:S.value,context:"stash-detail",emptyText:t(e)("@76872:该stash没有变更文件"),onFileSelect:E,onOpenFile:H,onOpenWithVscode:z},null,8,["files","diffContent","selectedFile","emptyText"])])])]),_:1},8,["modelValue","title"])])}}}),No=Je(Gu,[["__scopeId","data-v-dcdf46ae"]]),Iu={key:0,class:"stash-selected-files-button"},Ru={class:"stash-dialog-content"},Lu={class:"stash-info-card"},xu={class:"info-icon"},Uu={class:"info-content"},zu={class:"stash-options"},Hu={class:"options-title"},Wu={class:"option-item"},ju={class:"option-label"},qu={class:"option-desc"},Ju={class:"option-item"},Ku={class:"option-label"},Yu={class:"option-desc"},Qu={key:0,class:"locked-count"},Zu={class:"stash-preview"},Xu={class:"preview-title"},ed={class:"file-count-info"},td={class:"file-list-preview"},sd={key:0,class:"more-files"},ad={class:"dialog-footer"},od={class:"footer-actions"},nd=["disabled"],ld=ze({__name:"StashSelectedFilesButton",props:{selectedFiles:{},variant:{default:"icon"}},emits:["success"],setup(j,{emit:k}){const i=j,c=k,f=Tt(),p=Ut(),h=_(!1),C=_(""),m=_(!0),S=_(!1),M=ie(()=>i.selectedFiles.length>0),b=ie(()=>i.selectedFiles.filter(F=>{const w=F.replace(/\\/g,"/");return p.lockedFiles.some(E=>{const H=E.replace(/\\/g,"/");return w===H})}));function P(){if(!M.value){u.warning(e("@76872:请先选择要储藏的文件"));return}C.value="",S.value=!1,h.value=!0}async function n(){try{let F=i.selectedFiles;if(S.value&&b.value.length>0&&(F=i.selectedFiles.filter(w=>{const E=w.replace(/\\/g,"/");return!p.lockedFiles.some(H=>{const z=H.replace(/\\/g,"/");return E===z})}),F.length===0)){u.warning(e("@76872:所有选中的文件都是锁定文件,无法储藏"));return}await f.savePartialStash(F,C.value,m.value),h.value=!1,c("success")}catch(F){console.error("储藏选中文件失败:",F)}}function d(F){if(!(F.isComposing||F.keyCode===229)&&F.key==="Enter"&&!F.shiftKey){if(F.preventDefault(),f.isSavingStash)return;n()}}return(F,w)=>{const E=st,H=ct,z=Et,A=bs,O=Ws,Y=vs,ce=_s;return M.value?(r(),v("div",Iu,[i.variant==="icon"?(r(),x(nt,{key:0,tooltip:t(e)("@76872:储藏选中的文件"),size:"large",disabled:t(f).isSavingStash||!M.value,"hover-color":"var(--color-warning)",onClick:P},{default:o(()=>[t(f).isSavingStash?(r(),x(E,{key:0,class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(Lt,{key:1,"icon-class":"git-stash"}))]),_:1},8,["tooltip","disabled"])):(r(),x(H,{key:1,type:"warning",class:"action-button",onClick:P,loading:t(f).isSavingStash,disabled:!M.value},{default:o(()=>[L(l(t(e)("@76872:储藏选中文件"))+" ("+l(i.selectedFiles.length)+") ",1)]),_:1},8,["loading","disabled"])),s(Gt,{modelValue:h.value,"onUpdate:modelValue":w[4]||(w[4]=X=>h.value=X),title:t(e)("@76872:储藏选中的文件"),size:"medium","close-on-click-modal":!1,"custom-class":"stash-dialog"},{footer:o(()=>[a("div",ad,[a("div",od,[a("button",{type:"button",class:"dialog-cancel-btn",onClick:w[3]||(w[3]=X=>h.value=!1)},l(t(e)("@76872:取消")),1),a("button",{type:"button",class:"dialog-confirm-btn",onClick:n,disabled:t(f).isSavingStash},[t(f).isSavingStash?(r(),x(E,{key:1,class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(E,{key:0},{default:o(()=>[s(t(Os))]),_:1})),a("span",null,l(t(e)("@76872:储藏")),1)],8,nd)])])]),default:o(()=>[a("div",Ru,[a("div",Lu,[a("div",xu,[s(Lt,{"icon-class":"git-stash"})]),a("div",Uu,[a("h4",null,l(t(e)("@76872:储藏选中的文件")),1),a("p",null,l(t(e)("@76872:将选中的文件更改临时保存,稍后可以重新应用")),1)])]),s(ce,{"label-position":"top",class:"stash-form"},{default:o(()=>[s(A,{label:t(e)("@76872:储藏说明")},{default:o(()=>[s(z,{modelValue:C.value,"onUpdate:modelValue":w[0]||(w[0]=X=>C.value=X),placeholder:t(e)("@76872:为这次储藏添加描述信息(可选)"),clearable:"",onKeydown:d,rows:2,type:"textarea",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),a("div",zu,[a("h5",Hu,[s(E,null,{default:o(()=>[s(t(As))]),_:1}),L(" "+l(t(e)("@76872:储藏选项")),1)]),a("div",Wu,[s(O,{modelValue:m.value,"onUpdate:modelValue":w[1]||(w[1]=X=>m.value=X),size:"large"},{default:o(()=>[a("span",ju,l(t(e)("@76872:包含未跟踪文件")),1)]),_:1},8,["modelValue"]),a("p",qu,l(t(e)("@76872:对于未跟踪的文件,同时储藏 (--include-untracked)")),1)]),a("div",Ju,[s(O,{modelValue:S.value,"onUpdate:modelValue":w[2]||(w[2]=X=>S.value=X),size:"large"},{default:o(()=>[a("span",Ku,l(t(e)("@76872:排除锁定文件")),1)]),_:1},8,["modelValue"]),a("p",Yu,[L(l(t(e)("@76872:不储藏被锁定的文件,保持其当前状态"))+" ",1),b.value.length>0?(r(),v("span",Qu," ("+l(t(e)("@76872:选中"))+" "+l(b.value.length)+" "+l(t(e)("@76872:个锁定文件"))+") ",1)):I("",!0)])])]),a("div",Zu,[a("h5",Xu,[s(Lt,{"icon-class":"git-stash",style:{"font-size":"16px"}}),L(" "+l(t(e)("@76872:将要储藏的文件")),1)]),a("div",ed,[s(Y,{type:"warning"},{default:o(()=>[L(l(t(e)("@76872:已选中: "))+l(i.selectedFiles.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})]),a("div",td,[(r(!0),v(Ue,null,tt(i.selectedFiles.slice(0,10),X=>(r(),v("div",{key:X,class:"file-preview-item"},l(X),1))),128)),i.selectedFiles.length>10?(r(),v("div",sd,l(t(e)("@76872:...还有"))+" "+l(i.selectedFiles.length-10)+" "+l(t(e)("@76872:个文件")),1)):I("",!0)])])]),_:1})])]),_:1},8,["modelValue","title"])])):I("",!0)}}}),id=Je(ld,[["__scopeId","data-v-5f28bee7"]]),rd={class:"git-command-preview"},cd={class:"preview-container"},ud={class:"preview-title"},dd={class:"preview-content code-command"},pd=ze({__name:"GitCommandPreview",props:{command:{},title:{default:e("@34292:Git命令预览:")},copyButtonText:{default:e("@34292:复制命令")},placeholder:{default:"<命令内容>"}},setup(j){const k=j,i=ie(()=>k.command||k.placeholder);async function c(){if(!k.command){u.warning(e("@34292:没有可复制的命令内容"));return}try{await navigator.clipboard.writeText(k.command),u.success(e("@34292:命令已复制到剪贴板"))}catch(f){u.error(`${e("@34292:复制失败: ")}${f.message}`)}}return(f,p)=>{const h=st;return r(),v("div",rd,[a("div",cd,[a("div",ud,l(f.title),1),a("div",dd,l(i.value),1),s(nt,{tooltip:f.copyButtonText,size:"small","custom-class":"copy-command-btn",onClick:c},{default:o(()=>[s(h,null,{default:o(()=>[s(t(ys))]),_:1})]),_:1},8,["tooltip"])])])}}}),To=Je(pd,[["__scopeId","data-v-1f0cf0e4"]]),fd={class:"merge-branch-button"},md={class:"merge-dialog-content"},vd={class:"merge-info-card"},hd={class:"info-icon"},gd={class:"info-content"},yd={class:"merge-options"},Cd={class:"options-title"},_d={class:"options-horizontal"},bd={key:0,class:"default-message-hint"},wd={class:"hint-content"},kd=ze({__name:"MergeBranchButton",props:{variant:{default:"icon"}},setup(j){const k=j,i=Tt(),c=_(!1),f=_(""),p=_({noCommit:!1,noFf:!1,squash:!1,message:""}),h=_("all"),C=ie(()=>{const n=i.allBranches.filter(d=>d!==i.currentBranch);return h.value==="local"?n.filter(d=>!d.includes("origin/")):h.value==="remote"?n.filter(d=>d.includes("origin/")):n});function m(){f.value="",p.value={noFf:!1,squash:!1,noCommit:!1,message:""},h.value="all",c.value=!0,i.allBranches.length===0&&i.getAllBranches();const n=i.allBranches.filter(d=>d!==i.currentBranch);n.includes("origin/master")?f.value="origin/master":n.includes("origin/main")&&(f.value="origin/main")}async function S(){if(M.value)try{await navigator.clipboard.writeText(M.value),u.success(e("@76872:默认合并消息已复制"))}catch{u.error(e("@76872:复制失败"))}}Ze(h,()=>{f.value&&!C.value.includes(f.value)&&(f.value="")});const M=ie(()=>{if(!f.value)return"";const n=i.currentBranch||"current";return`Merge branch '${f.value}' into ${n}`}),b=ie(()=>{if(!f.value)return"";let n=`git merge ${f.value}`;if(p.value.noFf&&(n+=" --no-ff"),p.value.squash&&(n+=" --squash"),p.value.noCommit&&(n+=" --no-commit"),!p.value.noCommit){const d=p.value.message||M.value;d&&(n+=` -m "${d}"`)}return n});async function P(){if(!f.value){u({message:e("@76872:请选择要合并的分支"),type:"warning"});return}try{await i.mergeBranch(f.value,p.value)&&(c.value=!1,await Promise.all([i.fetchStatus(),i.fetchLog(!1),i.getBranchStatus(!0)]))}catch(n){console.error("合并分支操作发生错误:",n)}}return(n,d)=>{const F=st,w=ct,E=Fa,H=js,z=bs,A=ns,O=os,Y=Ws,ce=yt,X=Et,T=ya("Info-Filled"),B=ya("Document-Copy"),se=_s;return r(),v("div",fd,[k.variant==="icon"?(r(),x(nt,{key:0,tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:合并其他分支到当前分支"),size:"large",disabled:t(i).hasConflictedFiles||t(i).isGitMerging,"hover-color":"var(--color-primary)",onClick:m},{default:o(()=>[t(i).isGitMerging?(r(),x(F,{key:0,class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(Lt,{key:1,"icon-class":"git-merge"}))]),_:1},8,["tooltip","disabled"])):(r(),x(w,{key:1,type:"primary",class:"action-button",onClick:m,loading:t(i).isGitMerging,disabled:t(i).hasConflictedFiles},{default:o(()=>[L(l(t(e)("@76872:合并分支")),1)]),_:1},8,["loading","disabled"])),s(Gt,{modelValue:c.value,"onUpdate:modelValue":d[6]||(d[6]=_e=>c.value=_e),title:t(e)("@76872:合并分支"),size:"medium","close-on-click-modal":!1,"show-footer":"","confirm-text":t(e)("@76872:合并"),"cancel-text":t(e)("@76872:取消"),"confirm-loading":t(i).isGitMerging,"custom-class":"merge-dialog",onConfirm:P},{default:o(()=>[a("div",md,[a("div",vd,[a("div",hd,[s(Lt,{"icon-class":"git-merge"})]),a("div",gd,[a("h4",null,l(t(e)("@76872:合并分支到当前分支")),1),a("p",null,[L(l(t(e)("@76872:将选择的分支合并到"))+" ",1),a("code",null,l(t(i).currentBranch),1)])])]),s(se,{"label-position":"top",class:"merge-form"},{default:o(()=>[s(z,{label:t(e)("@76872:分支类型")},{default:o(()=>[s(H,{modelValue:h.value,"onUpdate:modelValue":d[0]||(d[0]=_e=>h.value=_e),size:"default"},{default:o(()=>[s(E,{value:"all"},{default:o(()=>[L(l(t(e)("@76872:所有分支")),1)]),_:1}),s(E,{value:"local"},{default:o(()=>[L(l(t(e)("@76872:本地分支")),1)]),_:1}),s(E,{value:"remote"},{default:o(()=>[L(l(t(e)("@76872:远程分支")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),s(z,{label:t(e)("@76872:选择分支")},{default:o(()=>[s(O,{modelValue:f.value,"onUpdate:modelValue":d[1]||(d[1]=_e=>f.value=_e),placeholder:t(e)("@76872:选择要合并的分支"),filterable:"",clearable:"",style:{width:"100%"}},{default:o(()=>[(r(!0),v(Ue,null,tt(C.value,_e=>(r(),x(A,{key:_e,label:_e,value:_e},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),s(To,{command:b.value,title:t(e)("@76872:合并命令预览:"),placeholder:t(e)("@76872:请先选择要合并的分支")},null,8,["command","title","placeholder"]),a("div",yd,[a("h5",Cd,[s(F,null,{default:o(()=>[s(t(As))]),_:1}),L(" "+l(t(e)("@76872:合并选项")),1)]),a("div",_d,[s(ce,{content:t(e)("@76872:始终创建合并提交,即使可以快进 (--no-ff)"),placement:"top","show-after":200},{default:o(()=>[s(Y,{modelValue:p.value.noFf,"onUpdate:modelValue":d[2]||(d[2]=_e=>p.value.noFf=_e),size:"large"},{default:o(()=>[L(l(t(e)("@76872:禁用快进合并")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"]),s(ce,{content:t(e)("@76872:将所有提交压缩成一个提交 (--squash)"),placement:"top","show-after":200},{default:o(()=>[s(Y,{modelValue:p.value.squash,"onUpdate:modelValue":d[3]||(d[3]=_e=>p.value.squash=_e),size:"large"},{default:o(()=>[L(l(t(e)("@76872:压缩合并")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"]),s(ce,{content:t(e)("@76872:执行合并但不自动提交,可以手动检查后提交 (--no-commit)"),placement:"top","show-after":200},{default:o(()=>[s(Y,{modelValue:p.value.noCommit,"onUpdate:modelValue":d[4]||(d[4]=_e=>p.value.noCommit=_e),size:"large"},{default:o(()=>[L(l(t(e)("@76872:不自动提交")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"])])]),p.value.noCommit?I("",!0):(r(),x(z,{key:0,label:t(e)("@76872:合并消息(可选)")},{default:o(()=>[s(X,{modelValue:p.value.message,"onUpdate:modelValue":d[5]||(d[5]=_e=>p.value.message=_e),type:"textarea",rows:2,placeholder:t(e)("@76872:自定义合并提交消息"),clearable:"",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"]),f.value&&!p.value.message?(r(),v("div",bd,[a("div",wd,[s(F,null,{default:o(()=>[s(T)]),_:1}),a("span",null,l(t(e)("@76872:默认消息:"))+l(M.value),1)]),s(w,{type:"primary",link:"",size:"small",onClick:S,class:"copy-btn"},{default:o(()=>[s(F,null,{default:o(()=>[s(B)]),_:1})]),_:1})])):I("",!0)]),_:1},8,["label"]))]),_:1})])]),_:1},8,["modelValue","title","confirm-text","cancel-text","confirm-loading"])])}}}),Bo=Je(kd,[["__scopeId","data-v-47ead366"]]),$d={key:0,class:"unstage-all-button"},Sd={key:0},Dd=ze({__name:"UnstageAllButton",props:{from:{default:"form"}},emits:["click"],setup(j,{emit:k}){const i=j,c=k,f=Tt(),p=ie(()=>f.fileList.filter(M=>["staged","renamed","added"].includes(M.type)).length),h=ie(()=>p.value>0),C=ie(()=>!h.value),m=ie(()=>h.value?"取消暂存所有文件(git reset HEAD)":"没有已暂存的更改");async function S(){c("click");try{await f.resetHead()&&f.fetchStatus()}catch(M){console.error("取消暂存失败:",M)}}return(M,b)=>{const P=st,n=ct,d=yt;return h.value?(r(),v("div",$d,[i.from==="status"?(r(),x(nt,{key:0,tooltip:m.value,size:"large",disabled:C.value,loading:t(f).isResetting,"hover-color":"var(--color-warning)",onClick:S},{default:o(()=>[s(P,null,{default:o(()=>[s(t(ln))]),_:1})]),_:1},8,["tooltip","disabled","loading"])):(r(),x(d,{key:1,content:m.value,placement:"top","show-after":200},{default:o(()=>[s(n,{type:"warning",onClick:S,loading:t(f).isResetting,disabled:C.value,class:Xe(`from-${i.from}`)},{default:o(()=>[b[0]||(b[0]=L(" 取消暂存所有 ")),p.value>0?(r(),v("span",Sd,"("+l(p.value)+")",1)):I("",!0)]),_:1},8,["loading","disabled","class"])]),_:1},8,["content"]))])):I("",!0)}}}),Ao=Je(Dd,[["__scopeId","data-v-4acda07f"]]),Eo=ze({__name:"ResetToRemoteButton",props:{variant:{default:"icon"}},setup(j){const k=j,i=Tt(),c=ie(()=>i.fileList.length>0||i.branchAhead>0);async function f(){try{await Dt.confirm(`${e('@76872:确定要重置当前分支 "')}${i.currentBranch}${e('@76872:" 到远程状态吗?这将丢失所有未推送的提交和本地更改。')}`,e("@76872:重置到远程分支"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),type:"warning"}),await i.resetToRemote(i.currentBranch)&&(i.fetchStatus(),i.fetchLog())}catch(p){p!=="cancel"&&console.error("重置到远程失败:",p)}}return(p,h)=>{const C=st,m=ct,S=yt;return c.value?(r(),v(Ue,{key:0},[k.variant==="icon"?(r(),x(nt,{key:0,tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:重置到远程"),size:"large","hover-color":"#f56c6c",disabled:!t(i).hasUpstream||t(i).hasConflictedFiles||t(i).isResetting,onClick:f},{default:o(()=>[s(C,null,{default:o(()=>[s(t(Zt))]),_:1})]),_:1},8,["tooltip","disabled"])):(r(),x(S,{key:1,content:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):"git reset --hard origin/branch",placement:"top"},{default:o(()=>[s(m,{type:"danger",icon:t(Zt),onClick:f,loading:t(i).isResetting,disabled:!t(i).hasUpstream||t(i).hasConflictedFiles,class:"action-button danger-button"},{default:o(()=>[L(l(t(e)("@76872:重置到远程")),1)]),_:1},8,["icon","loading","disabled"])]),_:1},8,["content"]))],64)):I("",!0)}}}),Fd={key:0},Od=ze({__name:"StageButton",props:{from:{default:"form"}},emits:["click"],setup(j,{emit:k}){const i=k,c=Tt(),f=Ut();function p(P){const n=P.replace(/\\/g,"/");return f.lockedFiles.some(d=>{const F=d.replace(/\\/g,"/");return n===F})}function h(){return f.lockedFiles.length===0?!1:c.fileList.some(P=>["modified","deleted","untracked"].includes(P.type)?p(P.path):!1)}const C=ie(()=>c.fileList.filter(P=>["modified","deleted","untracked"].includes(P.type)&&!p(P.path)).length),m=ie(()=>c.fileList.some(P=>["modified","deleted","untracked"].includes(P.type)&&!p(P.path))),S=ie(()=>!m.value),M=ie(()=>m.value?h()?`${e("@29974:暂存")}${C.value}${e("@29974:个未暂存文件(逐个添加)")}`:`${e("@29974:暂存所有更改(git add .)")}`:e("@29974:没有需要暂存的更改"));async function b(){i("click");try{h()?await c.addToStage():await c.addAllToStage()}catch(P){console.error("添加文件失败:",P)}}return(P,n)=>{const d=ct,F=yt;return r(),x(F,{content:M.value,placement:"top"},{default:o(()=>[s(d,{type:"primary",icon:t(as),onClick:b,loading:t(c).isAddingFiles,disabled:S.value,class:Xe(["stage-button",`from-${P.from}`])},{default:o(()=>[L(l(t(e)("@29974:暂存更改"))+" ",1),C.value>0?(r(),v("span",Fd,"("+l(C.value)+")",1)):I("",!0)]),_:1},8,["icon","loading","disabled","class"])]),_:1},8,["content"])}}}),Po=Je(Od,[["__scopeId","data-v-aacf475e"]]),Nd={key:0},Td=ze({__name:"CommitButton",props:{from:{default:"form"},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:""},skipHooks:{type:Boolean,default:!1}},emits:["click","beforeCommit","afterCommit"],setup(j,{emit:k}){const i=j,c=k,f=Tt(),p=Ut();function h(P){const n=P.replace(/\\/g,"/");return p.lockedFiles.some(d=>{const F=d.replace(/\\/g,"/");return n===F})}const C=ie(()=>f.fileList.filter(P=>P.type==="added"&&!h(P.path)).length),m=ie(()=>C.value>0),S=ie(()=>f.hasConflictedFiles||f.isCommiting?!0:!m.value||!i.hasUserCommitMessage),M=ie(()=>f.hasConflictedFiles?e("@76A11:存在冲突文件,请先解决冲突"):m.value?i.hasUserCommitMessage?`${e("@76A11:提交")}${C.value}${e("@76A11:个已暂存文件")}`:e("@76A11:请输入提交信息"):e("@76A11:没有已暂存的更改"));async function b(){if(i.finalCommitMessage.trim()){c("beforeCommit"),c("click");try{const P=await f.commitChanges(i.finalCommitMessage,i.skipHooks);c("afterCommit",P)}catch(P){console.error("提交失败:",P),c("afterCommit",!1)}}}return(P,n)=>{const d=ct,F=yt;return r(),x(F,{content:M.value,placement:"top"},{default:o(()=>[s(d,{type:"primary",onClick:b,icon:t(Os),loading:t(f).isCommiting,disabled:S.value,class:Xe(["commit-button",`from-${P.from}`])},{default:o(()=>[L(l(t(e)("@76A11:提交"))+" ",1),C.value>0?(r(),v("span",Nd,"("+l(C.value)+")",1)):I("",!0)]),_:1},8,["icon","loading","disabled","class"])]),_:1},8,["content"])}}}),Vo=Je(Td,[["__scopeId","data-v-ef192f80"]]),Bd={class:"push-progress-container"},Ad={class:"stage-header"},Ed={class:"stage-icon"},Pd={class:"stage-info"},Vd={class:"stage-label"},Md={key:0,class:"stage-percent"},Gd={key:0,class:"stage-progress"},Id={key:0,class:"error-section"},Rd={class:"error-header"},Ld={class:"error-title"},xd={class:"error-content"},Ud={key:0,class:"error-suggestion"},zd={key:1,class:"messages-section"},Hd={class:"messages-title"},Wd=ze({__name:"PushProgressModal",props:{modelValue:{type:Boolean}},emits:["update:modelValue","complete","pull-requested"],setup(j,{expose:k,emit:i}){const{t:c}=oa(),f=j,p=i,h=Ut(),C=Tt(),m=_("progress"),S=_([]),M=_(""),b=ie(()=>M.value.includes("non-fast-forward")||M.value.includes("rejected")&&M.value.includes("fetch first")),P=_(!1);async function n(){P.value=!0;try{await C.gitPull()&&(E.value=!1,p("pull-requested"))}finally{P.value=!1}}const d=na([{name:"counting",label:c("@PUSH:计数对象"),status:"wait",percent:0},{name:"compressing",label:c("@PUSH:压缩对象"),status:"wait",percent:0},{name:"writing",label:c("@PUSH:写入对象"),status:"wait",percent:0},{name:"resolving",label:c("@PUSH:解析增量"),status:"wait",percent:0}]),F=_(0),w=_(null),E=ie({get:()=>f.modelValue,set:O=>p("update:modelValue",O)}),H=ie(()=>{switch(m.value){case"progress":return c("@PUSH:正在推送");case"success":return c("@PUSH:推送成功");case"error":return c("@PUSH:推送失败");default:return""}});function z(O){switch(O.type){case"progress":O.message&&(S.value.push(O.message),setTimeout(()=>{w.value&&(w.value.scrollTop=w.value.scrollHeight)},0));break;case"stage-progress":if(O.stage&&typeof O.percent=="number"){const Y=d.findIndex(ce=>ce.name===O.stage);Y!==-1&&(d[Y].percent=O.percent,d[Y].status=O.percent===100?"finish":"process",F.value=Y,O.percent===100&&Y<d.length-1&&(d[Y+1].status="wait"))}break;case"complete":O.success?(m.value="success",d.forEach(Y=>{(Y.status==="process"||Y.status==="wait")&&(Y.status="finish",Y.percent=100)}),F.value=-1,h.autoClosePushModal?setTimeout(()=>{E.value=!1,p("complete",!0)},2e3):p("complete",!0)):(m.value="error",M.value=O.error||"未知错误",F.value<d.length&&(d[F.value].status="error"),F.value=-1,p("complete",!1));break}}function A(){m.value="progress",S.value=[],M.value="",F.value=0,d.forEach(O=>{O.status="wait",O.percent=0})}return k({handleProgress:z,reset:A}),(O,Y)=>{const ce=ct;return r(),x(t(sa),{modelValue:E.value,"onUpdate:modelValue":Y[0]||(Y[0]=X=>E.value=X),title:H.value,width:"650px","close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":m.value!=="progress","append-to-body":!0,"lock-scroll":!1,"destroy-on-close":"",class:Xe(["push-progress-dialog",`status-${m.value}`])},{default:o(()=>[a("div",Bd,[a("div",{class:Xe(["stages-section",{"is-loading":m.value==="progress","is-success":m.value==="success"}])},[(r(!0),v(Ue,null,tt(d,(X,T)=>(r(),v("div",{key:X.name,class:Xe(["stage-item",{active:F.value===T,finished:X.status==="finish",error:X.status==="error"}])},[a("div",Ad,[a("div",Ed,[X.status==="finish"?(r(),x(t(st),{key:0,class:"icon-finish"},{default:o(()=>[s(t(ao))]),_:1})):X.status==="error"?(r(),x(t(st),{key:1,class:"icon-error"},{default:o(()=>[s(t(ms))]),_:1})):X.status==="process"?(r(),x(t(st),{key:2,class:"icon-process rotating"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(t(st),{key:3,class:"icon-wait"},{default:o(()=>[s(t(zt))]),_:1}))]),a("div",Pd,[a("div",Vd,l(X.label),1),X.status==="process"||X.status==="finish"?(r(),v("div",Md,l(X.percent)+"% ",1)):I("",!0)])]),X.status==="process"||X.status==="finish"?(r(),v("div",Gd,[s(t(rn),{percentage:X.percent,"stroke-width":6,"show-text":!1,color:X.status==="finish"?"var(--color-success)":"var(--color-primary)"},null,8,["percentage","color"])])):I("",!0)],2))),128))],2),m.value==="error"&&M.value?(r(),v("div",Id,[a("div",Rd,[a("div",Ld,l(t(c)("@PUSH:错误详情"))+":",1),b.value?(r(),x(ce,{key:0,type:"primary",size:"small",loading:P.value,onClick:n,class:"pull-button"},{default:o(()=>[s(t(st),null,{default:o(()=>[s(t(Da))]),_:1}),L(" "+l(t(c)("@PUSH:先拉取更新")),1)]),_:1},8,["loading"])):I("",!0)]),a("div",xd,l(M.value),1),b.value?(r(),v("div",Ud,l(t(c)("@PUSH:检测到远程有新提交,请先拉取更新后再推送。")),1)):I("",!0)])):I("",!0),S.value.length>0?(r(),v("div",zd,[a("div",Hd,l(t(c)("@PUSH:详细信息"))+":",1),a("div",{ref_key:"messagesContainerRef",ref:w,class:"progress-messages"},[(r(!0),v(Ue,null,tt(S.value,(X,T)=>(r(),v("div",{key:T,class:"message-item"},l(X),1))),128))],512)])):I("",!0)])]),_:1},8,["modelValue","title","show-close","class"])}}}),Mo=Je(Wd,[["__scopeId","data-v-c5877769"]]),jd={key:0},qd=ze({__name:"PushButton",props:{from:{default:"form"}},emits:["click","beforePush","afterPush"],setup(j,{emit:k}){const i=k,c=Tt(),f=_(!1),p=_(null),h=ie(()=>c.branchAhead>0),C=ie(()=>c.fileList.some(d=>d.type==="added")),m=ie(()=>c.hasConflictedFiles?!1:c.hasUpstream&&h.value&&!C.value),S=ie(()=>!m.value),M=ie(()=>c.hasConflictedFiles?e("@F4137:存在冲突文件,请先解决冲突"):c.hasUpstream?h.value?C.value?e("@F4137:有未提交的暂存更改,请先提交"):`${e("@F4137:推送")}${c.branchAhead}${e("@F4137:个本地提交")}`:e("@F4137:没有需要推送的提交"):e("@F4137:当前分支没有上游分支")),b=ie(()=>m.value?{backgroundColor:"var(--color-success)",borderColor:"var(--color-success)"}:{});async function P(){i("beforePush"),i("click");try{f.value=!0,p.value&&p.value.reset();const d=await c.pushToRemoteWithProgress(F=>{p.value&&p.value.handleProgress(F)});d&&await new Promise(F=>setTimeout(F,200)),i("afterPush",d)}catch(d){console.error("推送失败:",d),i("afterPush",!1)}}function n(d){}return(d,F)=>{const w=ct,E=yt;return r(),v("div",null,[s(E,{content:M.value,placement:"top"},{default:o(()=>[s(w,{type:"primary",icon:t(ba),onClick:P,loading:t(c).isPushing,disabled:S.value,style:ls(b.value),class:Xe(["push-button",`from-${d.from}`])},{default:o(()=>[L(l(t(e)("@F4137:推送"))+" ",1),h.value?(r(),v("span",jd,"("+l(t(c).branchAhead)+")",1)):I("",!0)]),_:1},8,["icon","loading","disabled","style","class"])]),_:1},8,["content"]),s(Mo,{ref_key:"progressModalRef",ref:p,modelValue:f.value,"onUpdate:modelValue":F[0]||(F[0]=H=>f.value=H),onComplete:n},null,8,["modelValue"])])}}}),Go=Je(qd,[["__scopeId","data-v-d6595e95"]]),Jd={class:"one-push-content"},Kd={class:"one-push-text"},Yd={class:"one-push-title"},Qd={key:0,class:"one-push-desc"},Zd=ze({__name:"QuickPushButton",props:{from:{default:"form"},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:""},skipHooks:{type:Boolean,default:!1}},emits:["beforePush","afterPush","clearFields"],setup(j,{expose:k,emit:i}){const c=Tt(),f=Ut(),p=_(!1),h=_(null),C=j,m=i;function S(w){const E=w.replace(/\\/g,"/");return f.lockedFiles.some(H=>{const z=H.replace(/\\/g,"/");return E===z})}const M=ie(()=>c.fileList.some(w=>!S(w.path))),b=ie(()=>c.hasConflictedFiles?!0:!M.value&&c.branchAhead===0||!C.hasUserCommitMessage||!c.hasUpstream),P=ie(()=>c.isAddingFiles||c.isCommiting||c.isPushing),n=ie(()=>{if(c.hasConflictedFiles)return e("@2E184:存在冲突文件,请先解决冲突");const w=c.branchAhead>0;return!M.value&&!w?e("@2E184:没有需要提交或推送的更改"):C.hasUserCommitMessage?c.hasUpstream?M.value?e("@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库"):e("@2E184:本地已提交,一键推送到远程仓库"):e("@2E184:当前分支没有上游分支"):e("@2E184:请输入提交信息")});async function d(){m("beforePush");try{if(M.value&&!await c.addAndCommit(C.finalCommitMessage,C.skipHooks)){m("afterPush",!1);return}p.value=!0,h.value&&h.value.reset();const w=await c.pushToRemoteWithProgress(E=>{h.value&&h.value.handleProgress(E)});if(w){try{window.dispatchEvent(new CustomEvent("zen-gitsync:after-quick-push-success"))}catch{}m("clearFields")}m("afterPush",w)}catch(w){console.error("一键推送失败:",w),m("afterPush",!1)}}k({triggerQuickPush:d});function F(w){}return(w,E)=>{const H=st,z=ct;return r(),v("div",null,[s(t(yt),{content:n.value,placement:"top","show-after":200},{default:o(()=>[s(z,{type:"success",onClick:d,loading:P.value,disabled:b.value,class:Xe([w.from,"one-push-button"])},{default:o(()=>[a("div",Jd,[s(H,{class:"one-push-icon"},{default:o(()=>[s(t(lo))]),_:1}),a("div",Kd,[a("span",Yd,l(t(e)("@2E184:一键推送所有")),1),w.from==="form"?(r(),v("span",Qd,l(t(e)("@2E184:暂存 + 提交 + 推送")),1)):I("",!0)])])]),_:1},8,["loading","disabled","class"])]),_:1},8,["content"]),s(Mo,{ref_key:"progressModalRef",ref:h,modelValue:p.value,"onUpdate:modelValue":E[0]||(E[0]=A=>p.value=A),onComplete:F,onPullRequested:d},null,8,["modelValue"])])}}}),Io=Je(Zd,[["__scopeId","data-v-909f7c54"]]),Xd={class:"create-tag-button"},ep={class:"tag-dialog-content"},tp={class:"tag-info-card"},sp={class:"info-icon"},ap={class:"info-content"},op={class:"form-tip"},np={class:"form-tip"},lp={class:"form-tip"},ip=ze({__name:"CreateTagButton",props:{variant:{default:"icon"}},setup(j){const k=j,i=Tt(),c=_(!1),f=_(""),p=_(""),h=_("lightweight"),C=_(""),m=_(!1);function S(){f.value="",p.value="",h.value="lightweight",C.value="",c.value=!0}async function M(){if(!f.value.trim()){u.warning(e("@TAG01:请输入标签名称"));return}if(!/^[a-zA-Z0-9._\/-]+$/.test(f.value)){u.warning(e("@TAG01:标签名称只能包含字母、数字、点、下划线、斜杠和连字符"));return}try{m.value=!0;const d=await(await fetch("/api/create-tag",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tagName:f.value.trim(),message:p.value.trim(),type:h.value,commit:C.value.trim()})})).json();d.success?(u.success(e("@TAG01:标签创建成功")),c.value=!1):u.error(d.error||e("@TAG01:创建标签失败"))}catch(n){console.error("创建标签失败:",n),u.error(e("@TAG01:创建标签失败"))}finally{m.value=!1}}const b=ie(()=>h.value==="lightweight"?e("@TAG01:轻量标签是指向提交对象的引用,不包含额外信息"):e("@TAG01:附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名"));return(P,n)=>{const d=st,F=ct,w=yt,E=Et,H=bs,z=Fa,A=js,O=_s;return r(),v("div",Xd,[s(w,{content:t(e)("@TAG01:为当前提交创建标签"),placement:"top","show-after":200,disabled:k.variant==="text"},{default:o(()=>[s(F,{type:"success",onClick:S,disabled:!t(i).isGitRepo,circle:k.variant==="icon",size:k.variant==="icon"?"small":"default",class:Xe(k.variant==="text"?"action-button":"")},{default:o(()=>[k.variant==="icon"?(r(),x(d,{key:0},{default:o(()=>[s(t(Ss))]),_:1})):(r(),v(Ue,{key:1},[L(l(t(e)("@TAG01:创建标签")),1)],64))]),_:1},8,["disabled","circle","size","class"])]),_:1},8,["content","disabled"]),s(Gt,{modelValue:c.value,"onUpdate:modelValue":n[4]||(n[4]=Y=>c.value=Y),title:t(e)("@TAG01:创建 Git 标签"),size:"medium","close-on-click-modal":!1,"show-footer":"","confirm-text":t(e)("@TAG01:创建"),"cancel-text":t(e)("@TAG01:取消"),"confirm-loading":m.value,"custom-class":"tag-dialog",onConfirm:M},{default:o(()=>[a("div",ep,[a("div",tp,[a("div",sp,[s(d,null,{default:o(()=>[s(t(Ss))]),_:1})]),a("div",ap,[a("h4",null,l(t(e)("@TAG01:Git 标签")),1),a("p",null,l(t(e)("@TAG01:标签用于标记项目的重要版本点,如发布版本 v1.0.0")),1)])]),s(O,{"label-position":"top",class:"tag-form"},{default:o(()=>[s(H,{label:t(e)("@TAG01:标签名称"),required:""},{default:o(()=>[s(E,{modelValue:f.value,"onUpdate:modelValue":n[0]||(n[0]=Y=>f.value=Y),placeholder:t(e)("@TAG01:例如: v1.0.0 或 release-2024"),clearable:"",maxlength:"100"},{prefix:o(()=>[s(d,null,{default:o(()=>[s(t(Ss))]),_:1})]),_:1},8,["modelValue","placeholder"]),a("div",op,[s(d,null,{default:o(()=>[s(t(cs))]),_:1}),a("span",null,l(t(e)("@TAG01:建议使用语义化版本号,如 v1.0.0")),1)])]),_:1},8,["label"]),s(H,{label:t(e)("@TAG01:标签类型")},{default:o(()=>[s(A,{modelValue:h.value,"onUpdate:modelValue":n[1]||(n[1]=Y=>h.value=Y),size:"default"},{default:o(()=>[s(z,{value:"lightweight"},{default:o(()=>[L(l(t(e)("@TAG01:轻量标签")),1)]),_:1}),s(z,{value:"annotated"},{default:o(()=>[L(l(t(e)("@TAG01:附注标签")),1)]),_:1})]),_:1},8,["modelValue"]),a("div",np,[s(d,null,{default:o(()=>[s(t(cs))]),_:1}),a("span",null,l(b.value),1)])]),_:1},8,["label"]),h.value==="annotated"?(r(),x(H,{key:0,label:t(e)("@TAG01:标签说明"),required:h.value==="annotated"},{default:o(()=>[s(E,{modelValue:p.value,"onUpdate:modelValue":n[2]||(n[2]=Y=>p.value=Y),placeholder:t(e)("@TAG01:为此标签添加说明信息"),clearable:"",rows:3,type:"textarea",resize:"none",maxlength:"500","show-word-limit":""},null,8,["modelValue","placeholder"])]),_:1},8,["label","required"])):I("",!0),s(H,{label:t(e)("@TAG01:目标提交(可选)")},{default:o(()=>[s(E,{modelValue:C.value,"onUpdate:modelValue":n[3]||(n[3]=Y=>C.value=Y),placeholder:t(e)("@TAG01:留空则为当前HEAD,或输入commit SHA"),clearable:"",maxlength:"40"},{prefix:o(()=>n[5]||(n[5]=[a("span",{class:"commit-prefix"},"commit:",-1)])),_:1},8,["modelValue","placeholder"]),a("div",lp,[s(d,null,{default:o(()=>[s(t(cs))]),_:1}),a("span",null,l(t(e)("@TAG01:默认为当前HEAD提交,也可以指定历史提交")),1)])]),_:1},8,["label"])]),_:1})])]),_:1},8,["modelValue","title","confirm-text","cancel-text","confirm-loading"])])}}}),rp=Je(ip,[["__scopeId","data-v-34f26b13"]]),cp={class:"tag-list-button"},up={class:"tag-list-content"},dp={key:0,class:"tag-header"},pp={class:"tag-stats"},fp={class:"stat-item"},mp={class:"stat-number"},vp={class:"stat-label"},hp={class:"tag-actions-header"},gp={class:"tag-list-container"},yp={key:0,class:"empty-state"},Cp={class:"empty-text"},_p={class:"empty-hint"},bp={key:1,class:"tag-cards"},wp={class:"tag-card-content"},kp={class:"tag-info"},$p={class:"tag-main-info"},Sp={class:"tag-name-badge"},Dp={class:"tag-name-text"},Fp={class:"tag-meta"},Op={class:"tag-commit"},Np={class:"tag-date"},Tp={key:0,class:"tag-message"},Bp={class:"tag-card-actions"},Ap={key:0,class:"tag-detail-content"},Ep={class:"detail-row"},Pp={class:"detail-label"},Vp={class:"detail-value"},Mp={class:"detail-row"},Gp={class:"detail-label"},Ip={class:"detail-value"},Rp={class:"detail-row"},Lp={class:"detail-label"},xp={class:"detail-value"},Up={class:"detail-row"},zp={class:"detail-label"},Hp={key:0,class:"detail-row detail-message"},Wp={class:"detail-label"},jp={class:"message-content"},qp=ze({__name:"TagListButton",props:{variant:{default:"icon"}},setup(j){const k=j,i=Tt(),c=_(!1),f=_([]),p=_(!1),h=_(!1),C=_(!1),m=_(!1),S=_(null);async function M(){c.value=!0,await b()}async function b(){try{p.value=!0;const z=await(await fetch("/api/list-tags")).json();z.success?f.value=z.tags||[]:u.error(z.error||e("@TAG01:获取标签列表失败"))}catch(H){console.error("获取标签列表失败:",H),u.error(e("@TAG01:获取标签列表失败"))}finally{p.value=!1}}function P(H){S.value=H,m.value=!0}async function n(H){Dt.confirm(e("@TAG01:确定要推送此标签到远程仓库吗?"),e("@TAG01:推送标签"),{confirmButtonText:e("@TAG01:推送"),cancelButtonText:e("@TAG01:取消"),type:"info"}).then(async()=>{try{C.value=!0;const A=await(await fetch("/api/push-tag",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tagName:H})})).json();A.success?u.success(e("@TAG01:标签推送成功")):u.error(A.error||e("@TAG01:推送标签失败"))}catch(z){console.error("推送标签失败:",z),u.error(e("@TAG01:推送标签失败"))}finally{C.value=!1}}).catch(()=>{})}async function d(){Dt.confirm(e("@TAG01:确定要推送所有标签到远程仓库吗?"),e("@TAG01:推送所有标签"),{confirmButtonText:e("@TAG01:推送"),cancelButtonText:e("@TAG01:取消"),type:"info"}).then(async()=>{try{C.value=!0;const z=await(await fetch("/api/push-all-tags",{method:"POST"})).json();z.success?u.success(e("@TAG01:所有标签推送成功")):u.error(z.error||e("@TAG01:推送标签失败"))}catch(H){console.error("推送标签失败:",H),u.error(e("@TAG01:推送标签失败"))}finally{C.value=!1}}).catch(()=>{})}async function F(H){Dt.confirm(e("@TAG01:确定要删除此标签吗?此操作不可恢复。"),e("@TAG01:删除标签"),{confirmButtonText:e("@TAG01:删除"),cancelButtonText:e("@TAG01:取消"),type:"warning"}).then(async()=>{await w(H)}).catch(()=>{})}async function w(H){try{h.value=!0;const A=await(await fetch("/api/delete-tag",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tagName:H})})).json();A.success?(u.success(e("@TAG01:标签删除成功")),await b()):u.error(A.error||e("@TAG01:删除标签失败"))}catch(z){console.error("删除标签失败:",z),u.error(e("@TAG01:删除标签失败"))}finally{h.value=!1}}function E(H){if(!H)return"-";try{return new Date(H).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return H}}return(H,z)=>{const A=st,O=ct,Y=yt,ce=Qt,X=vs,T=Fs;return r(),v("div",cp,[s(Y,{content:t(e)("@TAG01:查看和管理所有标签"),placement:"top","show-after":200,disabled:k.variant==="text"},{default:o(()=>[s(O,{type:"info",onClick:M,disabled:!t(i).isGitRepo,circle:k.variant==="icon",size:k.variant==="icon"?"small":"default",class:Xe(k.variant==="text"?"action-button":"")},{default:o(()=>[k.variant==="icon"?(r(),x(A,{key:0},{default:o(()=>[s(t(Ss))]),_:1})):(r(),v(Ue,{key:1},[L(l(t(e)("@TAG01:标签列表")),1)],64))]),_:1},8,["disabled","circle","size","class"])]),_:1},8,["content","disabled"]),s(Gt,{modelValue:c.value,"onUpdate:modelValue":z[0]||(z[0]=B=>c.value=B),title:t(e)("@TAG01:Git 标签列表"),size:"large","show-footer":!1,"custom-class":"tag-list-dialog"},{default:o(()=>[a("div",up,[p.value?I("",!0):(r(),v("div",dp,[a("div",pp,[a("div",fp,[s(A,{class:"stat-icon"},{default:o(()=>[s(t(Ss))]),_:1}),a("span",mp,l(f.value.length),1),a("span",vp,l(t(e)("@TAG01:个标签")),1)])]),a("div",hp,[s(O,{type:"primary",size:"small",icon:t(la),onClick:b,loading:p.value,class:"refresh-btn"},{default:o(()=>[L(l(t(e)("@TAG01:刷新")),1)]),_:1},8,["icon","loading"]),f.value.length>0?(r(),x(O,{key:0,type:"success",size:"small",icon:t(ba),onClick:d,loading:C.value,class:"push-all-btn"},{default:o(()=>[L(l(t(e)("@TAG01:推送所有标签")),1)]),_:1},8,["icon","loading"])):I("",!0)])])),jt((r(),v("div",gp,[f.value.length===0&&!p.value?(r(),v("div",yp,[s(ce,{description:t(e)("@TAG01:暂无标签"),"image-size":120},{image:o(()=>[s(A,{class:"empty-icon"},{default:o(()=>[s(t(Ss))]),_:1})]),description:o(()=>[a("p",Cp,l(t(e)("@TAG01:还没有创建任何标签")),1),a("p",_p,l(t(e)("@TAG01:使用创建标签功能为项目添加版本标记")),1)]),_:1},8,["description"])])):(r(),v("div",bp,[(r(!0),v(Ue,null,tt(f.value,B=>(r(),v("div",{key:B.name,class:"tag-card"},[a("div",wp,[a("div",kp,[a("div",$p,[a("div",Sp,[s(A,{class:"badge-icon"},{default:o(()=>[s(t(Ss))]),_:1}),a("span",Dp,l(B.name),1),s(X,{size:"small",type:B.type==="annotated"?"warning":"info",class:"type-tag"},{default:o(()=>[L(l(B.type==="annotated"?t(e)("@TAG01:附注"):t(e)("@TAG01:轻量")),1)]),_:2},1032,["type"])]),a("div",Fp,[a("span",Op,[s(A,null,{default:o(()=>[s(t(cs))]),_:1}),L(" "+l(B.commit.substring(0,8)),1)]),a("span",Np,l(E(B.date)),1)]),B.message?(r(),v("div",Tp,l(B.message),1)):I("",!0)])]),a("div",Bp,[B.message?(r(),x(O,{key:0,size:"small",type:"info",onClick:se=>P(B),class:"action-btn view-btn"},{default:o(()=>[L(l(t(e)("@TAG01:查看")),1)]),_:2},1032,["onClick"])):I("",!0),s(O,{size:"small",type:"success",icon:t(ba),onClick:se=>n(B.name),loading:C.value,class:"action-btn push-btn"},{default:o(()=>[L(l(t(e)("@TAG01:推送")),1)]),_:2},1032,["icon","onClick","loading"]),s(O,{size:"small",type:"danger",icon:t(Zt),onClick:se=>F(B.name),loading:h.value,class:"action-btn delete-btn"},{default:o(()=>[L(l(t(e)("@TAG01:删除")),1)]),_:2},1032,["icon","onClick","loading"])])])]))),128))]))])),[[T,p.value]])])]),_:1},8,["modelValue","title"]),s(Gt,{modelValue:m.value,"onUpdate:modelValue":z[1]||(z[1]=B=>m.value=B),title:t(e)("@TAG01:标签详情"),size:"medium","show-footer":!1,"custom-class":"tag-detail-dialog"},{default:o(()=>[S.value?(r(),v("div",Ap,[a("div",Ep,[a("span",Pp,l(t(e)("@TAG01:标签名称:")),1),a("code",Vp,l(S.value.name),1)]),a("div",Mp,[a("span",Gp,l(t(e)("@TAG01:提交SHA:")),1),a("code",Ip,l(S.value.commit),1)]),a("div",Rp,[a("span",Lp,l(t(e)("@TAG01:创建时间:")),1),a("span",xp,l(E(S.value.date)),1)]),a("div",Up,[a("span",zp,l(t(e)("@TAG01:类型:")),1),s(X,{type:S.value.type==="annotated"?"warning":"info",size:"small"},{default:o(()=>[L(l(S.value.type==="annotated"?t(e)("@TAG01:附注标签"):t(e)("@TAG01:轻量标签")),1)]),_:1},8,["type"])]),S.value.message?(r(),v("div",Hp,[a("span",Wp,l(t(e)("@TAG01:标签说明:")),1),a("div",jp,l(S.value.message),1)])):I("",!0)])):I("",!0)]),_:1},8,["modelValue","title"])])}}}),Jp=Je(qp,[["__scopeId","data-v-42db1bd9"]]),Kp={class:"git-operations-button"},Yp={class:"actions-section"},Qp={class:"action-groups"},Zp={class:"action-group"},Xp={class:"group-title"},ef={class:"group-buttons"},tf={key:0},sf={class:"action-group"},af={class:"group-title"},of={class:"group-buttons"},nf={class:"action-group"},lf={class:"group-title"},rf={class:"group-buttons"},cf={key:0},uf={class:"action-group"},df={class:"group-title"},pf={class:"group-buttons"},ff={class:"action-group"},mf={class:"group-title"},vf={class:"group-buttons"},hf={class:"action-group"},gf={class:"group-title"},yf={class:"group-buttons"},Cf=ze({__name:"GitOperationsButton",props:{variant:{default:"icon"},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:""},skipHooks:{type:Boolean,default:!1}},emits:["afterCommit","afterPush","beforePush","clearFields"],setup(j,{expose:k,emit:i}){const c=j,f=i,p=Tt(),h=_(!1);function C(){h.value=!0}const m=ie(()=>p.fileList.filter(E=>E.type==="added").length),S=ie(()=>p.branchBehind>0),M=ie(()=>p.fileList.some(E=>["modified","deleted","untracked"].includes(E.type)));async function b(){try{await p.gitPull(),await p.fetchStatus(),await p.fetchLog(!1)}catch(E){console.error("拉取失败:",E)}}async function P(){try{await p.gitFetchAll(),await p.fetchStatus(),await p.fetchLog(!1)}catch(E){console.error("获取远程分支失败:",E)}}async function n(){if(c.hasUserCommitMessage)try{await p.addAndCommit(c.finalCommitMessage,c.skipHooks),p.fetchStatus(),p.fetchLog(),f("afterCommit",!0),f("clearFields")}catch(E){console.error("暂存并提交失败:",E)}}function d(){f("beforePush")}function F(E){f("afterPush",E)}function w(){f("clearFields")}return k({openGitOperationsDrawer:C}),(E,H)=>{const z=st,A=ct,O=yt,Y=cn;return r(),v("div",Kp,[c.variant==="icon"?(r(),x(nt,{key:0,tooltip:t(e)("@F13B4:Git 操作"),size:"large","custom-class":"btn-rotate-on-hover",onClick:C},{default:o(()=>[s(z,null,{default:o(()=>[s(t(io))]),_:1})]),_:1},8,["tooltip"])):(r(),x(A,{key:1,type:"primary",class:"action-button",onClick:C},{default:o(()=>[L(l(t(e)("@F13B4:Git 操作")),1)]),_:1})),s(Y,{modelValue:h.value,"onUpdate:modelValue":H[2]||(H[2]=ce=>h.value=ce),title:t(e)("@76872:Git 操作"),direction:"rtl",size:"362px","with-header":!0,"show-close":!0,"destroy-on-close":!1,"append-to-body":!0,class:"git-operations-drawer"},{default:o(()=>[a("div",Yp,[a("div",Qp,[a("div",Zp,[a("div",Xp,l(t(e)("@76872:基础操作")),1),a("div",ef,[s(Po,{onClick:()=>{},from:"drawer"}),s(Ao,{onClick:()=>{},from:"drawer"}),s(Vo,{"has-user-commit-message":E.hasUserCommitMessage,"final-commit-message":E.finalCommitMessage,"skip-hooks":E.skipHooks,onBeforeCommit:()=>{},onAfterCommit:H[0]||(H[0]=ce=>f("afterCommit",ce)),onClick:()=>{},from:"drawer"},null,8,["has-user-commit-message","final-commit-message","skip-hooks"]),s(Go,{onBeforePush:()=>{},onAfterPush:H[1]||(H[1]=ce=>f("afterPush",ce)),onClick:()=>{},from:"drawer"}),s(O,{content:t(p).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):S.value?`${t(e)("@76872:拉取")}${t(p).branchBehind}${t(e)("@76872:个远程提交")}`:"git pull",placement:"top"},{default:o(()=>[s(A,{type:"primary",icon:t(Da),onClick:b,loading:t(p).isGitPulling,disabled:!t(p).hasUpstream||t(p).hasConflictedFiles,class:"action-button",style:ls(t(p).hasUpstream&&!t(p).hasConflictedFiles?{color:"white",backgroundColor:"#1e90ff",borderColor:"#1e90ff"}:{})},{default:o(()=>[L(l(t(e)("@76872:拉取"))+" ",1),S.value?(r(),v("span",tf,"("+l(t(p).branchBehind)+")",1)):I("",!0)]),_:1},8,["icon","loading","disabled","style"])]),_:1},8,["content"]),s(O,{content:"git fetch --all",placement:"top"},{default:o(()=>[s(A,{type:"info",icon:t(un),onClick:P,loading:t(p).isGitFetching,class:"action-button",style:{color:"white","background-color":"#1e90ff","border-color":"#1e90ff"}},{default:o(()=>[L(l(t(e)("@76872:获取所有远程分支")),1)]),_:1},8,["icon","loading"])]),_:1})])]),a("div",sf,[a("div",af,l(t(e)("@76872:组合操作")),1),a("div",of,[s(O,{content:t(p).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):"git add + git commit",placement:"top"},{default:o(()=>[s(A,{type:"primary",icon:t(Cs),onClick:n,loading:t(p).isAddingFiles||t(p).isCommiting,disabled:!M.value||!E.hasUserCommitMessage||t(p).hasConflictedFiles,class:"action-button"},{default:o(()=>[L(l(t(e)("@76872:暂存并提交")),1)]),_:1},8,["icon","loading","disabled"])]),_:1},8,["content"]),s(Io,{from:"drawer","has-user-commit-message":E.hasUserCommitMessage,"final-commit-message":E.finalCommitMessage,"skip-hooks":E.skipHooks,onBeforePush:d,onAfterPush:F,onClearFields:w},null,8,["has-user-commit-message","final-commit-message","skip-hooks"])])]),a("div",nf,[a("div",lf,l(t(e)("@76872:重置操作")),1),a("div",rf,[s(O,{content:m.value>0?`${t(e)("@76872:撤销")}${m.value}${t(e)("@76872:个已暂存文件")}`:"git reset HEAD",placement:"top"},{default:o(()=>[s(A,{type:"warning",icon:t(Ds),onClick:t(p).resetHead,loading:t(p).isResetting,disabled:m.value===0||t(p).hasConflictedFiles,class:"action-button reset-button"},{default:o(()=>[L(l(t(e)("@76872:重置暂存区"))+" ",1),m.value>0?(r(),v("span",cf,"("+l(m.value)+")",1)):I("",!0)]),_:1},8,["icon","onClick","loading","disabled"])]),_:1},8,["content"]),s(Eo,{variant:"text"})])]),a("div",uf,[a("div",df,l(t(e)("@76872:分支操作")),1),a("div",pf,[s(Bo,{variant:"text"})])]),a("div",ff,[a("div",mf,l(t(e)("@76872:储藏操作")),1),a("div",vf,[s(Oo,{variant:"text"}),s(No,{variant:"text"})])]),a("div",hf,[a("div",gf,l(t(e)("@TAG01:标签操作")),1),a("div",yf,[s(rp,{variant:"text"}),s(Jp,{variant:"text"})])])])])]),_:1},8,["modelValue","title"])])}}}),_f=Je(Cf,[["__scopeId","data-v-ee3ba424"]]),bf={class:"card git-status-card flex flex-col"},wf={class:"status-header"},kf={class:"title-row"},$f={class:"header-actions"},Sf={class:"flex items-center"},Df=["element-loading-text"],Ff={key:0,class:"status-box"},Of={class:"empty-status"},Nf={key:1,class:"status-box-wrap"},Tf={key:0,class:"upstream-tip"},Bf={class:"tip-header"},Af={class:"tip-title"},Ef={class:"tip-body"},Pf={class:"tip-text"},Vf={class:"tip-actions"},Mf={key:1,class:"branch-status-info"},Gf={class:"branch-sync-status"},If={class:"sync-status-content"},Rf={class:"status-badges"},Lf={class:"badge-content"},xf={class:"badge-content"},Uf={key:2,class:"file-list-wrapper"},zf={class:"file-list-header"},Hf={class:"header-left"},Wf={key:0,class:"file-count"},jf={class:"view-mode-toggle"},qf={key:0,class:"selection-mode-banner"},Jf={class:"banner-content"},Kf={class:"banner-text"},Yf={class:"banner-actions"},Qf={class:"file-list-container"},Zf={key:0,class:"tree-group"},Xf={class:"file-count"},em={key:1,class:"tree-group"},tm={class:"file-count"},sm={key:2,class:"tree-group"},am={class:"file-count"},om={key:3,class:"tree-group"},nm={class:"file-count"},lm={key:3,class:"empty-status"},im={class:"empty-icon"},rm={class:"empty-text"},cm={class:"empty-subtext"},um={class:"lock-feature-description"},dm={class:"description-header"},pm={class:"description-title"},fm={class:"description-content"},mm={key:0,class:"empty-locked-files"},vm={class:"empty-icon"},hm={class:"empty-tip"},gm={key:1,class:"locked-files-list"},ym={class:"locked-files-header"},Cm={class:"locked-file-items"},_m={class:"file-info"},bm={class:"file-path-container"},wm={class:"file-name"},km={class:"file-directory"},$m={class:"file-actions"},Wa="zen-gitsync-file-list-view-mode",Sm=ze({__name:"GitStatus",props:{initialDirectory:{type:String,default:""}},setup(j,{expose:k}){const i=j,c=Tt(),f=Ut(),p=ie(()=>c.isLoadingStatus),h=_(""),C=_(""),m=_(null),S=_(!1),M=_(!1),b=_(-1),P=_("compare"),n=_(""),d=_(""),F=_({});function w($){return!!F.value[$]}const E=_(!0);function H(){E.value=!E.value}const z=_(new Set),A=_(!1);function O(){A.value=!A.value,A.value||z.value.clear()}function Y($){z.value.has($)?z.value.delete($):z.value.add($)}function ce(){z.value.size===c.fileList.length?z.value.clear():z.value=new Set(c.fileList.map($=>$.path))}function X($){return z.value.has($)}const T=ie(()=>Array.from(z.value)),B=ie(()=>c.fileList.map($=>({path:$.path,name:$.path.split("/").pop()||$.path,type:$.type,locked:$e($.path)})));async function se($){P.value==="compare"?await We($):await te($)}async function _e($,N){try{const Se=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:$,context:N})})).json();Se.success?u.success(Se.message):u.error(Se.error||e("@13D1C:打开文件失败"))}catch(Z){u.error(`${e("@13D1C:打开文件失败: ")}${Z.message}`)}}async function De($,N){try{const Se=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:$,context:N})})).json();Se.success?u.success(Se.message):u.error(Se.error||e("@13D1C:用VSCode打开文件失败"))}catch(Z){u.error(`${e("@13D1C:用VSCode打开文件失败: ")}${Z.message}`)}}const ue=_(!1),be=_({staged:!1,unstaged:!1,untracked:!1,conflicted:!1}),G=localStorage.getItem(Wa),q=_(G||"list"),ge=_(i.initialDirectory||"");async function Q(){try{if(!ge.value){const N=await(await fetch("/api/current_directory")).json();ge.value=N.directory||e("@13D1C:未知目录")}if(!c.isGitRepo)return;await c.fetchStatus(),await c.getBranchStatus(),u({message:e("@13D1C:Git 状态已刷新"),type:"success"})}catch($){u({message:"刷新失败: "+$.message,type:"error"})}}async function re($){try{await Dt.confirm(`确认解锁该文件?
|
|
26
|
-
${$}`,e("@13D1C:确认解锁"),{type:"warning",confirmButtonText:e("@13D1C:解锁"),cancelButtonText:e("@13D1C:取消")}),await f.unlockFile($)}catch{}}async function ne(){if(f.lockedFiles.length)try{await Dt.confirm(`${e("@13D1C:确认解锁所有已锁定文件?共 ")}${f.lockedFiles.length}${e("@13D1C: 个。")}`,e("@13D1C:清空全部锁定"),{type:"warning",confirmButtonText:e("@13D1C:全部解锁"),cancelButtonText:e("@13D1C:取消")});const $=[...f.lockedFiles];await Promise.all($.map(N=>f.unlockFile(N))),await f.loadLockedFiles(),u.success(e("@13D1C:已清空所有文件锁定"))}catch{}}async function te($){try{M.value=!0,C.value="",n.value="",d.value="",m.value=null,h.value=$,b.value=c.fileList.findIndex(Z=>Z.path===$);const N=c.fileList[b.value];if(N&&N.type==="untracked")try{const Se=await(await fetch(`/api/file-content?file=${encodeURIComponent($)}`)).json();Se.success&&Se.content?C.value=`diff --git a/${$} b/${$}
|
|
27
|
-
${e("@13D1C:新文件: ")}${$}
|
|
28
|
-
--- /dev/null
|
|
29
|
-
+++ b/${$}
|
|
30
|
-
@@ -0,0 +1,${Se.content.split(`
|
|
31
|
-
`).length} @@
|
|
32
|
-
`+Se.content.split(`
|
|
33
|
-
`).map(Pe=>`+${Pe}`).join(`
|
|
34
|
-
`):C.value=`这是一个新文件,尚未被Git跟踪。
|
|
35
|
-
添加到暂存区后可以提交该文件。`}catch(Z){console.error("获取未跟踪文件内容失败:",Z),C.value=`这是一个新文件,尚未被Git跟踪。
|
|
36
|
-
添加到暂存区后可以提交该文件。`}else if(N&&N.type==="added"){const Se=await(await fetch(`/api/diff-cached?file=${encodeURIComponent($)}`)).json();C.value=Se.diff||e("@13D1C:没有变更"),m.value=Se.stats||null}else{const Se=await(await fetch(`/api/diff?file=${encodeURIComponent($)}`)).json();C.value=Se.diff||e("@13D1C:没有变更"),m.value=Se.stats||null}}catch(N){u({message:"获取文件差异失败: "+N.message,type:"error"}),C.value="获取差异失败: "+N.message}finally{M.value=!1}}async function Ge($,N){const Se=await(await fetch(`/api/git-file-content?rev=${encodeURIComponent(N)}&file=${encodeURIComponent($)}`)).json();return Se&&Se.success?Se.content||"":Se!=null&&Se.error?`⚠️ ${Se.error}`:""}async function fe($){const Z=await(await fetch(`/api/file-content?file=${encodeURIComponent($)}`)).json();return Z&&Z.success?Z.content||"":Z!=null&&Z.error?`⚠️ ${Z.error}`:""}async function We($){try{M.value=!0,C.value="",m.value=null,h.value=$,b.value=c.fileList.findIndex(Se=>Se.path===$);const N=c.fileList[b.value];if(N&&N.type==="untracked"){n.value="",d.value=await fe($);return}if(N&&N.type==="deleted"){n.value=await Ge($,"HEAD"),d.value="";return}if(N&&N.type==="added"){const Se=await Ge($,"HEAD");n.value=Se,d.value=await Ge($,":");return}const Z=N&&(N.type==="staged"||N.type==="modified-staged"||N.type==="added");n.value=await Ge($,"HEAD"),d.value=Z?await Ge($,":"):await fe($)}finally{M.value=!1}}function J($){if(S.value=!0,P.value="compare",c.fileList.length>0){const N=c.fileList.find(Z=>Z.path===$.path)||c.fileList[0];We(N.path)}}function Ce(){P.value="diff",h.value&&te(h.value)}function Oe(){P.value="compare",h.value&&We(h.value)}async function lt($){await c.addFileToStage($)}async function V($){await c.unstageFile($)}async function y(){try{if(!c.isGitRepo)return;await c.fetchStatus(),await c.getBranchStatus(!0),u.success(e("@13D1C:Git 状态已刷新"))}catch($){u.error("刷新失败: "+$.message)}}async function ae(){try{await c.gitPull(),await Q()}catch($){console.error("拉取操作发生错误:",$)}}const Fe=_(!1);async function ye(){if(!c.currentBranch){u.warning(e("@13D1C:未知当前分支"));return}try{Fe.value=!0;const $=`git push -u origin ${c.currentBranch}`,Z=await(await fetch("/api/exec",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:$})})).json();Z.success?(u.success(e("@13D1C:已推送并设置上游分支")),await c.getAllBranches(),await c.getCurrentBranch(!0),await c.getBranchStatus(!0)):u.error(Z.error||e("@13D1C:设置上游失败"))}catch($){u.error(`${e("@13D1C:设置上游失败: ")}${$.message}`)}finally{Fe.value=!1}}async function Ne($){try{await Dt.confirm(`${e('@13D1C:确定要撤回文件 "')}${$}${e('@13D1C:" 的所有修改吗?此操作无法撤销。')}`,e("@13D1C:撤回修改"),{confirmButtonText:e("@13D1C:确定"),cancelButtonText:e("@13D1C:取消"),type:"warning"});const Z=await(await fetch("/api/revert_file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:$})})).json();Z.success?(u.success(e("@13D1C:已撤回文件修改")),await Q()):u.error(Z.error?`${e("@13D1C:撤回失败: ")}${Z.error}`:e("@13D1C:撤回文件修改失败,请重试"))}catch(N){if(N==="cancel"||N.message==="cancel")return;const Z=N.message||e("@13D1C:未知错误");Z!=="undefined"?u.error(`${e("@13D1C:撤回文件修改失败: ")}${Z}`):u.error(e("@13D1C:撤回文件修改失败,请重试"))}}function ut($){const N=$.split("/");return N[N.length-1]}function me($){const N=$.split("/");return N.length<=1?"":N.slice(0,-1).join("/")}function $e($){const N=$.replace(/\\/g,"/");return f.lockedFiles.some(Se=>{const Pe=Se.replace(/\\/g,"/");return N===Pe})}async function He($){if(!F.value[$]){F.value[$]=!0;try{$e($)?await f.unlockFile($):await f.lockFile($)}finally{delete F.value[$]}}}function je($){be.value[$]=!be.value[$]}const Ae=_([]),ht=_([]),Pt=_([]),Ft=_([]);function Bt(){const $=c.fileList.filter(D=>D.type==="conflicted").map(D=>({path:D.path,type:D.type,locked:$e(D.path)})),N=Rs($);Ae.value.length>0&&Ls(N,Ae.value),Ae.value=N;const Z=c.fileList.filter(D=>D.type==="added").map(D=>({path:D.path,type:D.type,locked:$e(D.path)})),Se=Rs(Z);ht.value.length>0&&Ls(Se,ht.value),ht.value=Se;const Pe=c.fileList.filter(D=>D.type==="modified"||D.type==="deleted").map(D=>({path:D.path,type:D.type,locked:$e(D.path)})),xe=Rs(Pe);Pt.value.length>0&&Ls(xe,Pt.value),Pt.value=xe;const de=c.fileList.filter(D=>D.type==="untracked").map(D=>({path:D.path,type:D.type,locked:$e(D.path)})),g=Rs(de);Ft.value.length>0&&Ls(g,Ft.value),Ft.value=g}return Ze(()=>c.fileList,()=>{q.value==="tree"&&Bt()},{deep:!0}),Ze(q,$=>{$==="tree"&&Bt(),localStorage.setItem(Wa,$),window.dispatchEvent(new CustomEvent("file-list-view-mode-change",{detail:{mode:$}}))}),ts(()=>{Q(),f.loadConfig(),f.loadLockedFiles(),q.value==="tree"&&Bt();const $=Pe=>{const de=Pe.detail.mode;q.value!==de&&(q.value=de)},N=()=>{Q(),h.value&&te(h.value)};window.addEventListener("file-list-view-mode-change",$),window.addEventListener("git-status-refresh",N);const Z=()=>{document.visibilityState==="visible"&&c.isGitRepo&&(console.log("[页面可见性] 标签页已激活,刷新Git状态和分支信息"),Promise.all([c.fetchStatus(),c.getBranchStatus()]).catch(Pe=>console.error("刷新失败:",Pe)))},Se=()=>{c.isGitRepo&&(console.log("[窗口焦点] 浏览器窗口已激活,刷新Git状态和分支信息"),Promise.all([c.fetchStatus(),c.getBranchStatus()]).catch(Pe=>console.error("刷新失败:",Pe)))};return document.addEventListener("visibilitychange",Z),window.addEventListener("focus",Se),()=>{window.removeEventListener("file-list-view-mode-change",$),window.removeEventListener("git-status-refresh",N),document.removeEventListener("visibilitychange",Z),window.removeEventListener("focus",Se)}}),k({refreshStatus:y}),($,N)=>{const Z=st,Se=ct,Pe=vs,xe=yt,de=Fs;return r(),v(Ue,null,[a("div",bf,[a("div",wf,[s(Ir,{onToggleNpmPanel:H}),a("div",kf,[a("div",$f,[s(nt,{tooltip:t(e)("@13D1C:Git Pull (拉取远程更新)"),size:"large","hover-color":"var(--color-primary)",disabled:!t(c).hasUpstream||t(c).isGitPulling,onClick:ae},{default:o(()=>[t(c).isGitPulling?(r(),x(Z,{key:0,class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(Lt,{key:1,"icon-class":"git-pull-request"}))]),_:1},8,["tooltip","disabled"]),s(Bo),s(Ao,{from:"status"}),t(c).fileList.length>0?(r(),x(nt,{key:0,tooltip:A.value?t(e)("@13D1C:退出选择模式"):t(e)("@13D1C:选择文件进行储藏"),size:"large",active:A.value,"hover-color":"var(--color-primary)",onClick:O},{default:o(()=>[s(Lt,{"icon-class":"muti-choose"})]),_:1},8,["tooltip","active"])):I("",!0),A.value&&z.value.size>0?(r(),x(id,{key:1,"selected-files":T.value,onSuccess:O},null,8,["selected-files"])):I("",!0),A.value?I("",!0):(r(),x(Oo,{key:2})),s(No),A.value?I("",!0):(r(),x(Eo,{key:3}))]),a("div",Sf,[s(_f,{variant:"icon"}),s(nt,{tooltip:t(e)("@13D1C:刷新状态"),size:"large",disabled:p.value,onClick:y},{default:o(()=>[p.value?(r(),x(Z,{key:0,class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(Z,{key:1},{default:o(()=>[s(t(la))]),_:1}))]),_:1},8,["tooltip","disabled"])])])]),jt((r(),v("div",{class:"card-content","element-loading-text":t(c).isGitPulling?t(e)("@13D1C:正在拉取代码..."):t(e)("@13D1C:正在获取远程分支信息...")},[t(c).isGitRepo?(r(),v("div",Nf,[t(c).hasUpstream?I("",!0):(r(),v("div",Tf,[a("div",Bf,[s(Z,{class:"tip-icon"},{default:o(()=>[s(t(cs))]),_:1}),a("span",Af,l(t(e)("@13D1C:当前分支未设置上游分支")),1)]),a("div",Ef,[a("div",Pf,l(t(e)("@13D1C:首次推送后即可建立与远程的跟踪关系,后续可直接 pull/push。")),1),a("div",Vf,[s(Se,{size:"small",type:"primary",plain:"",loading:Fe.value,disabled:Fe.value,onClick:ye},{default:o(()=>[L(l(t(e)("@13D1C:设置上游并推送")),1)]),_:1},8,["loading","disabled"])])])])),t(c).hasUpstream&&(t(c).branchAhead>0||t(c).branchBehind>0)?(r(),v("div",Mf,[a("div",Gf,[a("div",If,[s(xe,{content:t(e)("@13D1C:本地分支与远程分支的状态对比"),placement:"top","show-after":200},{default:o(()=>[a("div",Rf,[t(c).branchAhead>0?(r(),x(Pe,{key:0,size:"small",type:"warning",class:"status-badge"},{default:o(()=>[a("span",Lf,[s(Z,null,{default:o(()=>[s(t(ro))]),_:1}),L(" "+l(t(e)("@13D1C:你的分支领先",{branch:`origin/${t(c).currentBranch}`,count:t(c).branchAhead})),1)])]),_:1})):I("",!0),t(c).branchBehind>0?(r(),x(Pe,{key:1,size:"small",type:"info",class:"status-badge"},{default:o(()=>[a("span",xf,[s(Z,null,{default:o(()=>[s(t(is))]),_:1}),L(" "+l(t(e)("@13D1C:你的分支落后",{branch:`origin/${t(c).currentBranch}`,count:t(c).branchBehind})),1)])]),_:1})):I("",!0)])]),_:1},8,["content"])])])])):I("",!0),t(c).fileList.length?(r(),v("div",Uf,[a("div",zf,[a("div",Hf,[a("h4",null,l(t(e)("@13D1C:文件列表")),1),t(c).fileList.length>0?(r(),v("span",Wf,"("+l(t(c).fileList.length)+")",1)):I("",!0)]),a("div",jf,[s(nt,{tooltip:t(e)("@E80AC:列表视图"),size:"small",active:q.value==="list",onClick:N[0]||(N[0]=g=>q.value="list")},{default:o(()=>[s(Fo,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"]),s(nt,{tooltip:t(e)("@E80AC:树状视图"),size:"small",active:q.value==="tree",onClick:N[1]||(N[1]=g=>q.value="tree")},{default:o(()=>[s(Do,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"])])]),A.value?(r(),v("div",qf,[a("div",Jf,[a("span",Kf,[L(l(t(e)("@13D1C:已选中"))+" ",1),a("strong",null,l(z.value.size),1),L(" "+l(t(e)("@13D1C:个文件")),1)])]),a("div",Yf,[s(Se,{size:"small",type:"primary",plain:"",onClick:ce},{default:o(()=>[L(l(z.value.size===t(c).fileList.length?t(e)("@13D1C:取消全选"):t(e)("@13D1C:全选")),1)]),_:1})])])):I("",!0),a("div",Qf,[q.value==="list"?(r(),v(Ue,{key:0},[s(Ks,{files:t(c).fileList.filter(g=>g.type==="conflicted"),title:t(e)("@13D1C:冲突文件"),"group-key":"conflicted","collapsed-groups":be.value,"is-file-locked":$e,"is-locking":w,"get-file-name":ut,"get-file-directory":me,"is-selection-mode":A.value,"is-file-selected":X,onToggleCollapse:je,onFileClick:J,onToggleFileLock:He,onToggleFileSelection:Y,onStageFile:lt,onRevertFileChanges:Ne},null,8,["files","title","collapsed-groups","is-selection-mode"]),s(Ks,{files:t(c).fileList.filter(g=>g.type==="added"),title:t(e)("@13D1C:已暂存的更改"),"group-key":"staged","collapsed-groups":be.value,"is-file-locked":$e,"is-locking":w,"get-file-name":ut,"get-file-directory":me,"is-selection-mode":A.value,"is-file-selected":X,onToggleCollapse:je,onFileClick:J,onToggleFileLock:He,onToggleFileSelection:Y,onUnstageFile:V},null,8,["files","title","collapsed-groups","is-selection-mode"]),s(Ks,{files:t(c).fileList.filter(g=>g.type==="modified"||g.type==="deleted"),title:t(e)("@13D1C:未暂存的更改"),"group-key":"unstaged","collapsed-groups":be.value,"is-file-locked":$e,"is-locking":w,"get-file-name":ut,"get-file-directory":me,"is-selection-mode":A.value,"is-file-selected":X,onToggleCollapse:je,onFileClick:J,onToggleFileLock:He,onToggleFileSelection:Y,onStageFile:lt,onRevertFileChanges:Ne,onManageLockedFiles:N[2]||(N[2]=g=>ue.value=!0)},null,8,["files","title","collapsed-groups","is-selection-mode"]),s(Ks,{files:t(c).fileList.filter(g=>g.type==="untracked"),title:t(e)("@13D1C:未跟踪的文件"),"group-key":"untracked","collapsed-groups":be.value,"is-file-locked":$e,"is-locking":w,"get-file-name":ut,"get-file-directory":me,"is-selection-mode":A.value,"is-file-selected":X,onToggleCollapse:je,onFileClick:J,onToggleFileLock:He,onToggleFileSelection:Y,onStageFile:lt,onRevertFileChanges:Ne,onManageLockedFiles:N[3]||(N[3]=g=>ue.value=!0)},null,8,["files","title","collapsed-groups","is-selection-mode"])],64)):(r(),v(Ue,{key:1},[t(c).fileList.filter(g=>g.type==="conflicted").length?(r(),v("div",Zf,[a("div",{class:"tree-group-header",onClick:N[4]||(N[4]=g=>je("conflicted"))},[s(Z,{class:Xe(["collapse-icon",{collapsed:be.value.conflicted}])},{default:o(()=>[s(t(is))]),_:1},8,["class"]),a("h5",null,l(t(e)("@13D1C:冲突文件")),1),a("span",Xf,l(t(c).fileList.filter(g=>g.type==="conflicted").length),1)]),be.value.conflicted?I("",!0):(r(),x(xs,{key:0,"tree-data":Ae.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":$e,"is-locking":w,onFileSelect:N[5]||(N[5]=g=>J({path:g})),onToggleLock:He,onStage:lt,onRevert:Ne},null,8,["tree-data"]))])):I("",!0),t(c).fileList.filter(g=>g.type==="added").length?(r(),v("div",em,[a("div",{class:"tree-group-header",onClick:N[6]||(N[6]=g=>je("staged"))},[s(Z,{class:Xe(["collapse-icon",{collapsed:be.value.staged}])},{default:o(()=>[s(t(is))]),_:1},8,["class"]),a("h5",null,l(t(e)("@13D1C:已暂存的更改")),1),a("span",tm,l(t(c).fileList.filter(g=>g.type==="added").length),1)]),be.value.staged?I("",!0):(r(),x(xs,{key:0,"tree-data":ht.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":$e,"is-locking":w,onFileSelect:N[7]||(N[7]=g=>J({path:g})),onToggleLock:He,onUnstage:V},null,8,["tree-data"]))])):I("",!0),t(c).fileList.filter(g=>g.type==="modified"||g.type==="deleted").length?(r(),v("div",sm,[a("div",{class:"tree-group-header",onClick:N[8]||(N[8]=g=>je("unstaged"))},[s(Z,{class:Xe(["collapse-icon",{collapsed:be.value.unstaged}])},{default:o(()=>[s(t(is))]),_:1},8,["class"]),a("h5",null,l(t(e)("@13D1C:未暂存的更改")),1),a("span",am,l(t(c).fileList.filter(g=>g.type==="modified"||g.type==="deleted").length),1)]),be.value.unstaged?I("",!0):(r(),x(xs,{key:0,"tree-data":Pt.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":$e,"is-locking":w,onFileSelect:N[9]||(N[9]=g=>J({path:g})),onToggleLock:He,onStage:lt,onRevert:Ne},null,8,["tree-data"]))])):I("",!0),t(c).fileList.filter(g=>g.type==="untracked").length?(r(),v("div",om,[a("div",{class:"tree-group-header",onClick:N[10]||(N[10]=g=>je("untracked"))},[s(Z,{class:Xe(["collapse-icon",{collapsed:be.value.untracked}])},{default:o(()=>[s(t(is))]),_:1},8,["class"]),a("h5",null,l(t(e)("@13D1C:未跟踪的文件")),1),a("span",nm,l(t(c).fileList.filter(g=>g.type==="untracked").length),1)]),be.value.untracked?I("",!0):(r(),x(xs,{key:0,"tree-data":Ft.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":$e,"is-locking":w,onFileSelect:N[11]||(N[11]=g=>J({path:g})),onToggleLock:He,onStage:lt,onRevert:Ne},null,8,["tree-data"]))])):I("",!0)],64))])])):t(c).isGitRepo?(r(),v("div",lm,[a("div",im,[s(Z,null,{default:o(()=>[s(t(Sa))]),_:1})]),a("div",rm,l(t(e)("@13D1C:没有检测到任何更改")),1),a("div",cm,l(t(e)("@13D1C:工作区是干净的")),1)])):I("",!0)])):(r(),v("div",Ff,[a("div",Of,[a("p",null,l(t(e)("@13D1C:当前目录不是Git仓库")),1)])]))],8,Df)),[[de,t(c).isGitPulling||t(c).isGitFetching]]),s(Uc,{visible:E.value,onClose:N[12]||(N[12]=g=>E.value=!1)},null,8,["visible"])]),s(Gt,{modelValue:S.value,"onUpdate:modelValue":N[13]||(N[13]=g=>S.value=g),title:t(e)("@13D1C:文件差异"),"custom-class":"file-diff-dialog",size:"fullscreen",type:"flex","destroy-on-close":"",heightMode:"fixed"},{default:o(()=>[s(Ta,{files:B.value,diffContent:C.value,diffStats:m.value,selectedFile:h.value,isLoading:M.value,compareMode:P.value==="compare",compareOriginal:n.value,compareModified:d.value,context:"git-status",showOpenButton:!0,showActionButtons:!0,isFileLocked:$e,isLocking:w,onFileSelect:se,onOpenFile:_e,onOpenWithVscode:De,onToggleLock:He,onStage:lt,onUnstage:V,onRevert:Ne},{"header-extra":o(()=>[s(Se,{size:"small",type:P.value==="diff"?"primary":"default",onClick:Ce},{default:o(()=>[L(l(t(e)("@13D1C:仅显示差异")),1)]),_:1},8,["type"]),s(Se,{size:"small",type:P.value==="compare"?"primary":"default",onClick:Oe},{default:o(()=>[L(l(t(e)("@13D1C:显示完整对比")),1)]),_:1},8,["type"])]),_:1},8,["files","diffContent","diffStats","selectedFile","isLoading","compareMode","compareOriginal","compareModified"])]),_:1},8,["modelValue","title"]),s(Gt,{modelValue:ue.value,"onUpdate:modelValue":N[14]||(N[14]=g=>ue.value=g),title:t(e)("@13D1C:锁定文件管理"),size:"large","destroy-on-close":""},{default:o(()=>[a("div",um,[a("div",dm,[s(Z,{class:"description-icon"},{default:o(()=>[s(t(cs))]),_:1}),a("span",pm,l(t(e)("@13D1C:文件锁定功能说明")),1)]),a("div",fm,[a("ul",null,[a("li",null,l(t(e)("@13D1C:锁定的文件在执行 Git 提交时会被自动跳过,不会被添加到暂存区")),1)])])]),t(f).lockedFiles.length===0?(r(),v("div",mm,[a("div",vm,[s(Z,null,{default:o(()=>[s(t(ta))]),_:1})]),a("p",null,l(t(e)("@13D1C:当前没有锁定的文件")),1),a("p",hm,l(t(e)("@13D1C:您可以在文件列表中点击锁定按钮来锁定文件")),1)])):(r(),v("div",gm,[a("div",ym,[a("span",null,"🔒 已锁定 "+l(t(f).lockedFiles.length)+" "+l(t(e)("@13D1C:个文件")),1),s(xe,{content:t(e)("@13D1C:这些文件在提交时会被自动跳过"),placement:"top"},{default:o(()=>[s(Z,{class:"info-icon"},{default:o(()=>[s(t(cs))]),_:1})]),_:1},8,["content"]),N[15]||(N[15]=a("div",{style:{flex:"1"}},null,-1)),s(Se,{type:"danger",size:"small",plain:"",disabled:!t(f).lockedFiles.length,onClick:ne},{default:o(()=>[L(l(t(e)("@13D1C:清空全部锁定")),1)]),_:1},8,["disabled"])]),a("div",Cm,[(r(!0),v(Ue,null,tt(t(f).lockedFiles,g=>(r(),v("div",{key:g,class:"locked-file-item"},[a("div",_m,[N[16]||(N[16]=a("div",{class:"file-status-indicator locked"},null,-1)),a("div",bm,[a("span",wm,l(ut(g)),1),a("span",km,l(me(g)),1)])]),a("div",$m,[s(nt,{tooltip:t(e)("@13D1C:解锁文件"),size:"small","hover-color":"var(--color-danger)","custom-class":"file-action-btn",onClick:D=>re(g)},{default:o(()=>[s(Z,null,{default:o(()=>[s(t(Ka))]),_:1})]),_:2},1032,["tooltip","onClick"])])]))),128))])]))]),_:1},8,["modelValue","title"])],64)}}}),Dm=Je(Sm,[["__scopeId","data-v-c3aa6268"]]),Fm={class:"loading-container"},Om={class:"loading-text"},Nm={key:0,class:"loading-progress"},Tm=ze({__name:"GlobalLoading",props:{visible:{type:Boolean,default:!1},text:{default:e("@2AEBA:加载中...")},showProgress:{type:Boolean,default:!1},progress:{default:0},mock:{type:Boolean,default:!1}},setup(j){return(k,i)=>(r(),x(co,{to:"body"},[s(zs,{name:"loading-fade"},{default:o(()=>[k.visible||k.mock?(r(),v("div",{key:0,class:"global-loading-overlay",onClick:i[0]||(i[0]=qt(()=>{},["stop"]))},[a("div",Fm,[i[1]||(i[1]=a("div",{class:"loading-spinner"},[a("div",{class:"spinner-ring"}),a("div",{class:"spinner-ring"}),a("div",{class:"spinner-ring"})],-1)),a("div",Om,l(k.text),1),k.showProgress||k.mock?(r(),v("div",Nm,[a("div",{class:Xe(["progress-bar",{"is-mock":k.mock&&!k.showProgress}]),style:ls(k.showProgress?{width:k.progress+"%"}:void 0)},null,6)])):I("",!0)])])):I("",!0)]),_:1})]))}}),Bm=Je(Tm,[["__scopeId","data-v-8b7cb8f0"]]),Am={class:"success-container"},Em={class:"success-text"},Pm={key:0,class:"success-description"},Vm=ze({__name:"SuccessModal",props:{visible:{type:Boolean,default:!1},text:{default:e("@71545:操作成功!")},description:{default:""}},setup(j){return(k,i)=>(r(),x(co,{to:"body"},[s(zs,{name:"success-fade"},{default:o(()=>[k.visible?(r(),v("div",{key:0,class:"success-overlay",onClick:i[0]||(i[0]=qt(()=>{},["stop"]))},[a("div",Am,[i[1]||(i[1]=a("div",{class:"success-icon"},[a("svg",{viewBox:"0 0 52 52",class:"success-svg"},[a("circle",{class:"success-circle",cx:"26",cy:"26",r:"25",fill:"none"}),a("path",{class:"success-check",fill:"none",d:"m14.1 27.2l7.1 7.2 16.7-16.8"})])],-1)),a("div",Em,l(k.text),1),k.description?(r(),v("div",Pm,l(k.description),1)):I("",!0)])])):I("",!0)]),_:1})]))}}),Mm=Je(Vm,[["__scopeId","data-v-b10e1ad6"]]),ds=na({visible:!1,text:e("@F2A3A:加载中..."),showProgress:!1,progress:0});function Gm(){return{loadingState:ds,show:p=>{ds.visible=!0,ds.text=(p==null?void 0:p.text)||e("@F2A3A:加载中..."),ds.showProgress=(p==null?void 0:p.showProgress)||!1,ds.progress=(p==null?void 0:p.progress)||0},hide:()=>{ds.visible=!1},updateProgress:p=>{ds.progress=Math.max(0,Math.min(100,p))},updateText:p=>{ds.text=p},setText:p=>{ds.visible&&(ds.text=p)}}}const Ms=na({visible:!1,text:e("@B8591:操作成功!"),description:""});function Im(){const j=i=>{Ms.visible=!0,Ms.text=(i==null?void 0:i.text)||e("@B8591:操作成功!"),Ms.description=(i==null?void 0:i.description)||"";const c=(i==null?void 0:i.duration)||2e3;setTimeout(()=>{k()},c)},k=()=>{Ms.visible=!1};return{successState:Ms,show:j,hide:k}}const Rm={class:"template-form"},Lm={class:"template-form-buttons"},xm={key:0,class:"template-list"},Um={key:1,class:"template-list-scroll"},zm={class:"template-content"},Hm={class:"template-actions"},Wm={key:1,class:"templates-container"},jm={class:"message-templates-list"},qm={class:"templates-scroll-area"},Jm={class:"template-content"},Km={class:"template-actions"},Ym={key:0,class:"current-default-message"},Qm={class:"default-message-content"},Zm={key:2,class:"message-help-text"},Xm=ze({__name:"TemplateManager",props:{visible:{type:Boolean},type:{},title:{},placeholder:{default:e("@60CAC:输入新模板内容")},editPlaceholder:{default:e("@60CAC:编辑模板内容")},emptyDescription:{default:e("@60CAC:暂无保存的模板")},showDefaultSection:{type:Boolean,default:!1},showHelpText:{type:Boolean,default:!1}},emits:["update:visible","use-template","set-default"],setup(j,{expose:k,emit:i}){const c=j,f=i,p=Ut(),h=_(""),C=_(!1),m=_(""),S=_(-1),M=_(!1),b=_(!1),P=_(!1),n=ie(()=>{switch(c.type){case"description":return p.descriptionTemplates||[];case"scope":return p.scopeTemplates||[];case"message":return p.messageTemplates||[];case"command":return p.commandTemplates||[];default:return[]}}),d=ie(()=>c.type==="message"?p.defaultCommitMessage:""),F=ie(()=>C.value?c.editPlaceholder:c.placeholder),w=ie(()=>C.value?e("@60CAC:更新模板"):e("@60CAC:添加模板")),E=ie({get:()=>c.visible,set:B=>f("update:visible",B)});Ze(E,B=>{B||H()});function H(){h.value="",C.value=!1,m.value="",S.value=-1}async function z(){if(!h.value.trim()){u.warning(e("@60CAC:模板内容不能为空"));return}try{M.value=!0,C.value?await p.updateTemplate(m.value,h.value,c.type)&&H():await p.saveTemplate(h.value,c.type)&&(h.value="")}catch(B){u.error(`${e("@60CAC:模板保存失败: ")}${B.message}`)}finally{M.value=!1}}function A(B){f("use-template",B),c.type!=="message"&&(E.value=!1)}function O(B,se){C.value=!0,m.value=B,h.value=B,S.value=se}function Y(){H()}async function ce(B){try{P.value=!0;const se=await p.pinTemplate(B,c.type)}catch(se){u.error(`${e("@60CAC:置顶模板失败: ")}${se.message}`)}finally{P.value=!1}}async function X(B){try{const se=await p.deleteTemplate(B,c.type)}catch(se){u.error(`${e("@60CAC:模板删除失败: ")}${se.message}`)}}async function T(){if(!(c.type!=="message"||!h.value.trim()))try{b.value=!0,await p.saveDefaultMessage(h.value)&&f("set-default",h.value)}catch(B){u.error(`${e("@60CAC:设置默认提交信息失败: ")}${B.message}`)}finally{b.value=!1}}return k({resetForm:H}),(B,se)=>{const _e=Et,De=ct,ue=Qt,be=Lt,G=dn,q=uo,ge=vs;return r(),x(Gt,{modelValue:E.value,"onUpdate:modelValue":se[1]||(se[1]=Q=>E.value=Q),title:B.title,"close-on-click-modal":!1,"append-to-body":!0,"custom-class":B.type==="message"?"message-template-dialog":"template-dialog"},{default:o(()=>[a("div",{class:Xe(["template-container",{"message-template-container":B.type==="message"}])},[a("div",Rm,[s(_e,{modelValue:h.value,"onUpdate:modelValue":se[0]||(se[0]=Q=>h.value=Q),placeholder:F.value,class:"template-input",clearable:"",onKeyup:Bs(z,["enter"])},null,8,["modelValue","placeholder"]),a("div",Lm,[C.value?(r(),x(De,{key:0,onClick:Y},{default:o(()=>[L(l(t(e)("@60CAC:取消")),1)]),_:1})):I("",!0),s(De,{type:"primary",onClick:z,disabled:!h.value.trim()||M.value,loading:M.value},{default:o(()=>[L(l(w.value),1)]),_:1},8,["disabled","loading"]),B.type==="message"?(r(),x(De,{key:1,type:"success",onClick:T,disabled:!h.value.trim()||b.value,loading:b.value,plain:""},{default:o(()=>[L(l(t(e)("@60CAC:设为默认提交信息")),1)]),_:1},8,["disabled","loading"])):I("",!0)])]),B.type!=="message"?(r(),v("div",xm,[a("h3",null,l(t(e)("@60CAC:已保存"))+" "+l(B.type==="description"?t(e)("@60CAC:模板"):B.type==="scope"?t(e)("@60CAC:作用域"):B.type==="command"?t(e)("@CMD01:命令模板"):""),1),n.value.length===0?(r(),x(ue,{key:0,description:B.emptyDescription},null,8,["description"])):(r(),v("div",Um,[(r(!0),v(Ue,null,tt(n.value,(Q,re)=>(r(),x(q,{key:re,class:"template-item"},{default:o(()=>[s(G,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:o(()=>[a("div",zm,l(Q),1),a("div",Hm,[s(De,{size:"small",class:"pin-button",onClick:ne=>ce(Q),loading:P.value,disabled:re===0,title:"置顶"},{default:o(()=>[s(be,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading","disabled"]),s(De,{type:"primary",size:"small",onClick:ne=>A(Q)},{default:o(()=>[L(l(t(e)("@60CAC:使用")),1)]),_:2},1032,["onClick"]),s(De,{type:"warning",size:"small",icon:t(Cs),onClick:ne=>O(Q,Number(re))},{default:o(()=>[L(l(t(e)("@60CAC:编辑")),1)]),_:2},1032,["icon","onClick"]),s(De,{type:"danger",size:"small",onClick:ne=>X(Q)},{default:o(()=>[L(l(t(e)("@60CAC:删除")),1)]),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]))])):(r(),v("div",Wm,[a("div",jm,[a("h3",null,l(t(e)("@60CAC:已保存模板")),1),a("div",qm,[n.value.length===0?(r(),x(ue,{key:0,description:B.emptyDescription},null,8,["description"])):I("",!0),(r(!0),v(Ue,null,tt(n.value,(Q,re)=>(r(),x(q,{key:re,class:"template-item"},{default:o(()=>[s(G,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:o(()=>[a("div",Jm,l(Q),1),a("div",Km,[s(De,{size:"small",class:"pin-button",onClick:ne=>ce(Q),loading:P.value,disabled:re===0,title:"置顶"},{default:o(()=>[s(be,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading","disabled"]),s(De,{type:"primary",size:"small",onClick:ne=>A(Q)},{default:o(()=>[L(l(t(e)("@60CAC:使用")),1)]),_:2},1032,["onClick"]),s(De,{type:"warning",size:"small",icon:t(Cs),onClick:ne=>O(Q,Number(re))},{default:o(()=>[L(l(t(e)("@60CAC:编辑")),1)]),_:2},1032,["icon","onClick"]),s(De,{type:"danger",size:"small",onClick:ne=>X(Q)},{default:o(()=>[L(l(t(e)("@60CAC:删除")),1)]),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))])]),B.showDefaultSection?(r(),v("div",Ym,[a("h3",null,l(t(e)("@60CAC:当前默认提交信息")),1),d.value?(r(),x(q,{key:0,class:"default-message-card"},{default:o(()=>[a("div",Qm,l(d.value),1)]),_:1})):(r(),x(ue,{key:1,description:t(e)("@60CAC:尚未设置默认提交信息"),"image-size":100},null,8,["description"])),B.showHelpText?(r(),v("div",Zm,[a("h4",null,l(t(e)("@60CAC:关于默认提交信息")),1),a("p",null,l(t(e)("@60CAC:默认提交信息将在未输入提交信息时自动使用。")),1),a("p",null,[L(l(t(e)("@60CAC:你可以通过点击左侧模板的")),1),s(ge,{size:"small",type:"primary"},{default:o(()=>[L(l(t(e)("@60CAC:使用")),1)]),_:1}),L(l(t(e)("@60CAC:按钮先选择喜欢的模板,然后点击上方")),1),s(ge,{size:"small",type:"success"},{default:o(()=>[L(l(t(e)("@60CAC:设为默认提交信息")),1)]),_:1}),L(l(t(e)("@60CAC:按钮保存。")),1)])])):I("",!0)])):I("",!0)]))],2)]),_:1},8,["modelValue","title","custom-class"])}}}),Zs=Je(Xm,[["__scopeId","data-v-41f3f353"]]),e1={class:"form-bottom-actions"},t1={class:"actions-flex-container"},s1={class:"left-actions"},a1={class:"button-grid"},o1={class:"right-actions"},n1=ze({__name:"GitActionButtons",props:{hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:""},skipHooks:{type:Boolean,default:!1},from:{default:"form"}},emits:["afterCommit","afterPush","beforePush","clearFields"],setup(j,{expose:k,emit:i}){const c=i,f=_(null);function p(M){c("afterCommit",M)}function h(M){c("afterPush",M)}function C(){c("beforePush")}function m(){c("clearFields")}async function S(){var M;return(M=f.value)==null?void 0:M.triggerQuickPush()}return k({triggerQuickPush:S}),(M,b)=>(r(),v("div",e1,[a("div",t1,[a("div",s1,[a("div",a1,[s(Po,{onClick:()=>{},from:M.from},null,8,["from"]),s(Vo,{"has-user-commit-message":M.hasUserCommitMessage,"final-commit-message":M.finalCommitMessage,"skip-hooks":M.skipHooks,onBeforeCommit:()=>{},onAfterCommit:p,onClick:()=>{},from:M.from},null,8,["has-user-commit-message","final-commit-message","skip-hooks","from"]),s(Go,{onBeforePush:()=>{},onAfterPush:h,onClick:()=>{},from:M.from},null,8,["from"])])]),a("div",o1,[s(Io,{ref_key:"quickPushRef",ref:f,from:M.from,"has-user-commit-message":M.hasUserCommitMessage,"final-commit-message":M.finalCommitMessage,"skip-hooks":M.skipHooks,onBeforePush:C,onAfterPush:h,onClearFields:m},null,8,["from","has-user-commit-message","final-commit-message","skip-hooks"])])])]))}}),l1=Je(n1,[["__scopeId","data-v-495f5dbc"]]),i1={class:"option-header"},r1={class:"option-info"},c1={class:"option-title"},u1=ze({__name:"OptionSwitchCard",props:{modelValue:{type:Boolean},title:{},tooltip:{},activeText:{},inactiveText:{},activeColor:{},iconClass:{},compact:{type:Boolean}},emits:["update:modelValue"],setup(j,{emit:k}){const i=j,c=k;function f(p){c("update:modelValue",p)}return(p,h)=>{const C=ws,m=yt;return r(),v("div",{class:Xe(["option-card",{compact:i.compact}])},[s(m,{content:p.tooltip,placement:"top","show-after":200},{default:o(()=>[a("div",i1,[a("div",{class:Xe(["option-icon",p.iconClass])},[Yt(p.$slots,"icon",{},void 0,!0)],2),a("div",r1,[a("h4",c1,l(p.title),1)]),s(C,{class:"option-switch","model-value":p.modelValue,"onUpdate:modelValue":f,"active-text":p.activeText,"inactive-text":p.inactiveText,"active-color":p.activeColor,size:"small"},null,8,["model-value","active-text","inactive-text","active-color"])])]),_:3},8,["content"])],2)}}}),Gs=Je(u1,[["__scopeId","data-v-7af4d883"]]),d1={class:"command-container"},p1={class:"left-panel"},f1={class:"command-form"},m1={class:"form-header"},v1={class:"left-title"},h1={class:"form-content"},g1={class:"form-row"},y1={class:"form-field"},C1={class:"required"},_1={class:"form-row"},b1={class:"form-field"},w1={class:"form-row"},k1={class:"form-field"},$1={class:"directory-input-group"},S1={class:"form-row"},D1={class:"form-field"},F1={class:"required"},O1={key:0,class:"command-params"},N1={class:"params-title"},T1={class:"form-actions"},B1={class:"right-panel"},A1={class:"command-list"},E1={class:"list-header"},P1={class:"list-content"},V1={key:1,class:"command-list-scroll"},M1={class:"name-cell"},G1={class:"name-text"},I1={key:0,class:"description-text"},R1={class:"command-text"},L1={class:"directory-text"},x1={class:"action-buttons"},U1=ze({__name:"CustomCommandManager",props:{visible:{type:Boolean},fullscreen:{type:Boolean}},emits:["update:visible","execute-command"],setup(j,{expose:k,emit:i}){function c(G){const q=`${G}(copy)`,ge=Array.isArray(A.value)?A.value:[],Q=ne=>ge.some(te=>String((te==null?void 0:te.name)||"")===ne);if(!Q(q))return q;let re=2;for(;re<1e3;){const ne=`${G}(copy${re})`;if(!Q(ne))return ne;re++}return`${q}-${Date.now()}`}async function f(G){try{const q=F(G),ge={name:c(String((G==null?void 0:G.name)||"").trim()||e("@CMD01:命令名称")),description:String((G==null?void 0:G.description)||""),directory:String((G==null?void 0:G.directory)||""),command:String((G==null?void 0:G.command)||""),params:JSON.parse(JSON.stringify(q||[]))};(!ge.directory||!ge.directory.trim())&&(ge.directory=C.currentDirectory||"");const Q=await C.saveCustomCommand(ge)}catch(q){u.error(`${e("@CMD01:保存命令失败: ")}${q.message}`)}}const p=j,h=i,C=Ut(),m=ie(()=>C.commandTemplates||[]),S=_(!1);function M(G,q){const ge=Array.isArray(m.value)?m.value:[],re=[...G?ge.filter(ne=>ne.toLowerCase().includes(G.toLowerCase())).map(ne=>({value:ne})):ge.map(ne=>({value:ne})),{value:"⚙️ 管理模板...",isSettings:!0}];q(re)}function b(G){if(G.isSettings){S.value=!0,w.value.command="";return}w.value.command=G.value}function P(G){const q=[],ge=/{{\s*([a-zA-Z0-9_]+)\s*}}/g;let Q;for(;Q=ge.exec(G);){const re=String(Q[1]||"").trim();re&&!q.includes(re)&&q.push(re)}return q}function n(G,q){return G.replace(/{{\s*([a-zA-Z0-9_]+)\s*}}/g,(ge,Q)=>{const re=String(Q||"").trim();return Object.prototype.hasOwnProperty.call(q,re)?String(q[re]??""):""})}const d=ze({name:"CmdParamForm",props:{vars:{type:Array,required:!0},values:{type:Object,required:!0},params:{type:Array,required:!1}},setup(G){function q(ge){const re=(Array.isArray(G.params)?G.params:[]).find(ne=>String((ne==null?void 0:ne.name)||"")===ge);return re?String((re==null?void 0:re.description)||"").trim():""}return()=>Ye("div",{class:"cmd-param-form"},G.vars.map(ge=>Ye("div",{class:"cmd-param-row"},[Ye("div",{class:"cmd-param-label"},ge),Ye(Et,{modelValue:G.values[ge],"onUpdate:modelValue":Q=>{G.values[ge]=String(Q??"")},placeholder:e("@CMD01:请输入变量值",{var:ge}),clearable:!0}),q(ge)?Ye("div",{class:"cmd-param-desc"},q(ge)):null])))}});function F(G){const q=String((G==null?void 0:G.command)||""),ge=P(q),Q=Array.isArray(G==null?void 0:G.params)?G.params:[],re=new Map;for(const ne of Q){const te=String((ne==null?void 0:ne.name)||"").trim();te&&re.set(te,{name:te,defaultValue:String((ne==null?void 0:ne.defaultValue)??""),required:!!(ne!=null&&ne.required),description:String((ne==null?void 0:ne.description)??"")})}return ge.map(ne=>re.has(ne)?re.get(ne):{name:ne,defaultValue:"",required:!1,description:""})}const w=_({name:"",description:"",directory:"",command:"",params:[]}),E=_(!1),H=_(""),z=_(!1),A=ie(()=>C.customCommands||[]),O=ie({get:()=>p.visible,set:G=>h("update:visible",G)});Ze(O,G=>{G||Y()});function Y(){w.value={name:"",description:"",directory:"",command:"",params:[]},E.value=!1,H.value=""}Ze(()=>w.value.command,G=>{const q=String(G||""),ge=P(q);if(!ge.length){w.value.params=[];return}const Q=Array.isArray(w.value.params)?w.value.params:[],re=new Map(Q.map(ne=>[String((ne==null?void 0:ne.name)||""),ne]));w.value.params=ge.map(ne=>{const te=re.get(ne);return{name:ne,defaultValue:te?String(te.defaultValue??""):"",required:te?!!te.required:!1,description:te?String(te.description??""):""}})},{immediate:!0});async function ce(){if(!w.value.name.trim()){u.warning(e("@CMD01:命令名称不能为空"));return}if(!w.value.command.trim()){u.warning(e("@CMD01:命令内容不能为空"));return}try{z.value=!0,E.value?await C.updateCustomCommand(H.value,w.value)&&Y():((!w.value.directory||!w.value.directory.trim())&&(w.value.directory=C.currentDirectory||""),await C.saveCustomCommand(w.value)&&Y())}catch(G){u.error(`${e("@CMD01:命令保存失败: ")}${G.message}`)}finally{z.value=!1}}function X(G){E.value=!0,H.value=G.id||"",w.value={name:G.name,description:G.description||"",directory:G.directory,command:G.command,params:F(G)}}function T(){Y()}async function B(G){try{await Dt.confirm(e("@CMD01:确定要删除这个自定义命令吗?"),e("@CMD01:删除确认"),{confirmButtonText:e("@CMD01:确定"),cancelButtonText:e("@CMD01:取消"),type:"warning"}),await C.deleteCustomCommand(G)}catch{}}async function se(G){const q=String((G==null?void 0:G.command)||""),ge=P(q);if(!ge.length){h("execute-command",G);return}const Q=na({});try{const re=F(G),ne=new Map(re.map(fe=>[String(fe.name),fe]));for(const fe of ge){const We=ne.get(fe);Q[fe]=We?String(We.defaultValue??""):""}await Dt({title:e("@CMD01:执行参数"),message:Ye(d,{vars:ge,values:Q,params:re}),showCancelButton:!0,confirmButtonText:e("@CMD01:确定"),cancelButtonText:e("@CMD01:取消"),closeOnClickModal:!1,customClass:"cmd-param-message-box"});const te=(Array.isArray(G==null?void 0:G.params)?G.params:[]).map(fe=>({name:String((fe==null?void 0:fe.name)||"").trim(),required:!!(fe!=null&&fe.required)})).filter(fe=>fe.name);for(const fe of te){if(!fe.required)continue;const We=Q[fe.name];if(We==null||String(We).trim()===""){u.warning(e("@CMD01:请输入必填变量: ",{var:fe.name}));return}}const Ge=n(q,Q);h("execute-command",{...G,command:Ge})}catch{}}function _e(){w.value.directory=C.currentDirectory||""}async function De(){try{const q=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:w.value.directory||C.currentDirectory})})).json();q.success?ue(q):q.error&&u.error(q.error)}catch(G){u.error(`${e("@CMD01:浏览目录失败: ")}${G.message}`)}}function ue(G){!G||!G.items||Dt.alert(Ye("div",{class:"directory-browser"},[Ye("div",{class:"current-path"},[Ye("span",{class:"path-label"},e("@CMD01:当前路径: ")),Ye("span",{class:"path-value"},G.path)]),Ye("div",{class:"directory-list"},[G.parentPath?Ye("div",{class:"directory-item parent-dir",onClick:()=>be(G.parentPath)},[Ye("span",{class:"dir-icon"},Ye("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-warning)"}},[Ye("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ye("span",{class:"dir-name"},e("@CMD01:返回上级目录"))]):null,...G.items.map(q=>Ye("div",{class:"directory-item",onClick:()=>be(q.path)},[Ye("span",{class:"dir-icon"},Ye("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-primary)"}},[Ye("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ye("span",{class:"dir-name"},q.name)]))])]),{title:e("@CMD01:浏览并选择目录"),confirmButtonText:e("@CMD01:确定"),customClass:"directory-browser-dialog",modalClass:"directory-browser-overlay",callback:q=>{q==="confirm"&&(w.value.directory=G.path)}})}async function be(G){try{Dt.close(),setTimeout(async()=>{try{const ge=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:G})})).json();ge.success?ue(ge):ge.error&&u.error(ge.error)}catch(q){u.error(`${e("@CMD01:浏览目录失败: ")}${q.message}`)}},100)}catch(q){u.error(`${e("@CMD01:处理目录选择时出错: ")}${q.message}`)}}return k({resetForm:Y}),(G,q)=>{const ge=ct,Q=st,re=po,ne=Qs,te=ws,Ge=fo,fe=Qt,We=sa;return r(),v(Ue,null,[s(We,{modelValue:O.value,"onUpdate:modelValue":q[4]||(q[4]=J=>O.value=J),title:t(e)("@CMD01:自定义命令管理"),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,fullscreen:!!G.fullscreen,width:G.fullscreen?"100vw":"90%",top:G.fullscreen?"0":"50px","z-index":3e6,"modal-class":"custom-command-overlay",class:"custom-command-dialog"},{default:o(()=>[a("div",d1,[a("div",p1,[a("div",f1,[a("div",m1,[a("div",v1,l(E.value?t(e)("@CMD01:编辑命令"):t(e)("@CMD01:添加命令")),1)]),a("div",h1,[a("div",g1,[a("div",y1,[a("label",C1,l(t(e)("@CMD01:命令名称")),1),s(t(Et),{modelValue:w.value.name,"onUpdate:modelValue":q[0]||(q[0]=J=>w.value.name=J),placeholder:t(e)("@CMD01:输入命令名称,例如: 拉取代码"),clearable:"",size:"large"},null,8,["modelValue","placeholder"])])]),a("div",_1,[a("div",b1,[a("label",null,l(t(e)("@CMD01:描述")),1),s(t(Et),{modelValue:w.value.description,"onUpdate:modelValue":q[1]||(q[1]=J=>w.value.description=J),placeholder:t(e)("@CMD01:可选,简要描述命令用途"),clearable:"",size:"large"},null,8,["modelValue","placeholder"])])]),a("div",w1,[a("div",k1,[a("label",null,l(t(e)("@CMD01:执行目录")),1),a("div",$1,[s(t(Et),{modelValue:w.value.directory,"onUpdate:modelValue":q[2]||(q[2]=J=>w.value.directory=J),placeholder:t(e)("@CMD01:留空使用当前目录"),clearable:"",size:"large"},null,8,["modelValue","placeholder"]),s(ge,{onClick:_e,type:"primary",plain:"",size:"default"},{default:o(()=>[L(l(t(e)("@CMD01:使用当前目录")),1)]),_:1}),s(ge,{onClick:De,type:"info",plain:"",size:"default"},{default:o(()=>[s(Q,null,{default:o(()=>[s(t(rs))]),_:1}),L(" "+l(t(e)("@CMD01:选择目录")),1)]),_:1})])])]),a("div",S1,[a("div",D1,[a("label",F1,l(t(e)("@CMD01:命令")),1),s(re,{modelValue:w.value.command,"onUpdate:modelValue":q[3]||(q[3]=J=>w.value.command=J),"fetch-suggestions":M,placeholder:t(e)("@CMD01:输入要执行的命令,例如: npm run build"),clearable:"",size:"large","trigger-on-focus":"","popper-class":"custom-command-popper",onSelect:b,onKeyup:Bs(ce,["enter"]),style:{width:"100%"}},null,8,["modelValue","placeholder"]),w.value.params&&w.value.params.length>0?(r(),v("div",O1,[a("div",N1,l(t(e)("@CMD01:变量配置")),1),s(Ge,{data:w.value.params,style:{width:"100%"},size:"small",stripe:""},{default:o(()=>[s(ne,{prop:"name",label:t(e)("@CMD01:变量名"),width:"160"},null,8,["label"]),s(ne,{label:t(e)("@CMD01:默认值"),"min-width":"180"},{default:o(J=>[s(t(Et),{modelValue:J.row.defaultValue,"onUpdate:modelValue":Ce=>J.row.defaultValue=Ce,size:"small",clearable:"",placeholder:t(e)("@CMD01:默认值")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),_:1},8,["label"]),s(ne,{label:t(e)("@CMD01:必填"),width:"90",align:"center"},{default:o(J=>[s(te,{modelValue:J.row.required,"onUpdate:modelValue":Ce=>J.row.required=Ce},null,8,["modelValue","onUpdate:modelValue"])]),_:1},8,["label"]),s(ne,{label:t(e)("@CMD01:描述"),"min-width":"220"},{default:o(J=>[s(t(Et),{modelValue:J.row.description,"onUpdate:modelValue":Ce=>J.row.description=Ce,size:"small",clearable:"",placeholder:t(e)("@CMD01:描述")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),_:1},8,["label"])]),_:1},8,["data"])])):I("",!0)])]),a("div",T1,[E.value?(r(),x(ge,{key:0,onClick:T,size:"large"},{default:o(()=>[L(l(t(e)("@CMD01:取消")),1)]),_:1})):I("",!0),s(ge,{type:"primary",onClick:ce,disabled:!w.value.name.trim()||!w.value.command.trim()||z.value,loading:z.value,size:"large",class:"save-btn"},{default:o(()=>[L(l(E.value?t(e)("@CMD01:更新命令"):t(e)("@CMD01:添加命令")),1)]),_:1},8,["disabled","loading"])])])])]),a("div",B1,[a("div",A1,[a("div",E1,[a("h3",null,l(t(e)("@CMD01:已保存的命令")),1)]),a("div",P1,[A.value.length===0?(r(),x(fe,{key:0,description:t(e)("@CMD01:暂无保存的命令")},null,8,["description"])):(r(),v("div",V1,[s(Ge,{data:A.value,style:{width:"100%",height:"100%"},stripe:""},{default:o(()=>[s(ne,{prop:"name",label:t(e)("@CMD01:命令名称"),"min-width":"80"},{default:o(J=>[a("div",M1,[a("span",G1,l(J.row.name),1),J.row.description?(r(),v("span",I1,l(J.row.description),1)):I("",!0)])]),_:1},8,["label"]),s(ne,{prop:"command",label:t(e)("@CMD01:命令"),"min-width":"200"},{default:o(J=>[a("code",R1,l(J.row.command),1)]),_:1},8,["label"]),s(ne,{prop:"directory",label:t(e)("@CMD01:执行目录"),"min-width":"200"},{default:o(J=>[a("span",L1,l(J.row.directory),1)]),_:1},8,["label"]),s(ne,{label:t(e)("@CMD01:操作"),width:"110",fixed:"right"},{default:o(J=>[a("div",x1,[s(nt,{tooltip:t(e)("@CMD01:执行命令"),size:"small","hover-color":"var(--color-success)",onClick:Ce=>se(J.row)},{default:o(()=>[s(Q,null,{default:o(()=>[s(t(ps))]),_:1})]),_:2},1032,["tooltip","onClick"]),s(nt,{tooltip:t(e)("@CMD01:编辑"),size:"small","hover-color":"var(--color-primary)",onClick:Ce=>X(J.row)},{default:o(()=>[s(Q,null,{default:o(()=>[s(t(Cs))]),_:1})]),_:2},1032,["tooltip","onClick"]),s(nt,{tooltip:t(e)("@CMD01:复制命令"),size:"small","hover-color":"var(--color-warning)",onClick:Ce=>f(J.row)},{default:o(()=>[s(Q,null,{default:o(()=>[s(t(ys))]),_:1})]),_:2},1032,["tooltip","onClick"]),s(nt,{tooltip:t(e)("@CMD01:删除"),size:"small","hover-color":"var(--color-danger)",onClick:Ce=>B(J.row.id)},{default:o(()=>[s(Q,null,{default:o(()=>[s(t(Zt))]),_:1})]),_:2},1032,["tooltip","onClick"])])]),_:1},8,["label"])]),_:1},8,["data"])]))])])])])]),_:1},8,["modelValue","title","fullscreen","width","top"]),s(Zs,{visible:S.value,"onUpdate:visible":q[5]||(q[5]=J=>S.value=J),type:"command",title:t(e)("@CMD01:命令模板管理"),placeholder:t(e)("@CMD01:输入命令模板,例如: npm run build"),"edit-placeholder":t(e)("@CMD01:编辑命令模板"),"empty-description":t(e)("@CMD01:暂无保存的命令模板")},null,8,["visible","title","placeholder","edit-placeholder","empty-description"])],64)}}}),z1=Je(U1,[["__scopeId","data-v-6bc2dca7"]]),H1={class:"project-startup-dialog"},W1={class:"after-quick-push"},j1={class:"after-quick-push__header"},q1={class:"after-quick-push__title"},J1={class:"after-quick-push__switch"},K1={class:"after-quick-push__label"},Y1={class:"after-quick-push__row"},Q1={class:"after-quick-push__hint"},Z1={class:"startup-toolbar"},X1={class:"startup-toolbar__left"},ev={class:"startup-toolbar__title"},tv={class:"startup-toolbar__meta"},sv={key:0,class:"startup-toolbar__warn"},av={class:"startup-toolbar__right"},ov={class:"startup-auto-run"},nv={class:"startup-auto-run__label"},lv={key:0,class:"startup-empty"},iv={key:1,class:"startup-list"},rv={class:"startup-item__main"},cv=["title"],uv=["title"],dv=["title"],pv=["title"],fv=["title"],mv={class:"startup-item__actions"},vv={class:"startup-add"},hv={class:"startup-add__title"},gv={class:"startup-add__type"},yv={class:"startup-add__row"},Cv={class:"startup-option"},_v={class:"startup-option__name"},bv={class:"startup-option__cmd"},wv={class:"startup-option"},kv={class:"startup-option__name"},$v={class:"startup-option__cmd"},Sv=ze({__name:"ProjectStartupDialog",props:{visible:{type:Boolean}},emits:["update:visible","execute-command","execute-workflow"],setup(j,{emit:k}){const{t:i}=oa(),c=j,f=k,p=Ut(),h=ie({get:()=>c.visible,set:ue=>f("update:visible",ue)}),C=ie({get:()=>p.startupAutoRun,set:async ue=>{ce.value=!0;try{await p.saveStartupItems(m.value,ue)}finally{ce.value=!1}}}),m=ie({get:()=>p.startupItems,set:ue=>{p.saveStartupItems(ue,C.value)}}),S=ie(()=>p.customCommands||[]),M=ie(()=>{const ue=new Map;for(const be of S.value)be!=null&&be.id&&ue.set(String(be.id),be);return ue}),b=ie(()=>p.orchestrations||[]),P=ie(()=>{const ue=new Map;for(const be of b.value)be!=null&&be.id&&ue.set(String(be.id),be);return ue}),n=ie({get:()=>p.afterQuickPushAction,set:ue=>{p.saveAfterQuickPushAction(ue)}}),d=ie({get:()=>{var ue;return!!((ue=n.value)!=null&&ue.enabled)},set:async ue=>{E.value=!0;try{await p.saveAfterQuickPushAction({enabled:ue,type:F.value,refId:w.value})}finally{E.value=!1}}}),F=ie({get:()=>{var ue;return((ue=n.value)==null?void 0:ue.type)==="workflow"?"workflow":"command"},set:async ue=>{E.value=!0;try{w.value="",await p.saveAfterQuickPushAction({enabled:d.value,type:ue,refId:""})}finally{E.value=!1}}}),w=_(""),E=_(!1);Ze(()=>p.afterQuickPushAction,ue=>{w.value=String((ue==null?void 0:ue.refId)||"")},{immediate:!0});async function H(ue){E.value=!0;try{await p.saveAfterQuickPushAction({enabled:d.value,type:F.value,refId:ue})}finally{E.value=!1}}const z=ie(()=>m.value.map(ue=>({...ue,cmd:ue.type==="command"?M.value.get(ue.refId):null,wf:ue.type==="workflow"?P.value.get(ue.refId):null})).filter(ue=>ue.type==="command"?!!ue.cmd:!!ue.wf)),A=ie(()=>m.value.filter(ue=>ue.type==="workflow"?!P.value.get(ue.refId):!M.value.get(ue.refId)).length),O=_("command"),Y=_(""),ce=_(!1),X=_({});async function T(ue,be){X.value={...X.value,[ue]:!0};try{const G=m.value.map(q=>q.id===ue?{...q,enabled:be}:q);await p.saveStartupItems(G,C.value)}finally{const{[ue]:G,...q}=X.value;X.value=q}}function B(){if(!Y.value){O.value==="workflow"?u.warning(i("@PSTART:请选择一个工作流")):u.warning(i("@PSTART:请选择一个命令"));return}if(m.value.some(q=>q.type===O.value&&q.refId===Y.value)){u.info(i("@PSTART:该启动项已存在"));return}const be={id:`startup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:O.value,refId:Y.value,createdAt:Date.now(),enabled:!0},G=[...m.value,be];p.saveStartupItems(G,C.value),Y.value="",u.success(i("@PSTART:已添加启动项"))}async function se(ue){try{await Dt.confirm(i("@PSTART:删除确认"),i("@PSTART:删除启动项"),{confirmButtonText:i("@PSTART:确定"),cancelButtonText:i("@PSTART:取消"),type:"warning"});const be=m.value.filter(G=>G.id!==ue.id);p.saveStartupItems(be,C.value),u.success(i("@PSTART:已删除启动项"))}catch{}}function _e(){const ue=m.value.length,be=m.value.filter(q=>q.type==="workflow"?!!P.value.get(q.refId):!!M.value.get(q.refId)),G=be.length;G!==ue?(p.saveStartupItems(be,C.value),u.success(i("@PSTART:已清理N个失效启动项",{count:ue-G}))):u.info(i("@PSTART:没有需要清理的启动项"))}function De(ue){if(ue.type==="command"){const be=ue.cmd;if(!be){u.warning(i("@PSTART:命令不存在"));return}f("execute-command",be),u.success(i("@PSTART:已触发命令执行"))}else if(ue.type==="workflow"){const be=ue.wf;if(!be){u.warning(i("@PSTART:工作流不存在"));return}f("execute-workflow",be),u.success(i("@PSTART:已触发工作流执行"))}}return(ue,be)=>{const G=ws,q=Fa,ge=js,Q=ns,re=os,ne=st,te=ct,Ge=yt;return r(),x(Gt,{modelValue:h.value,"onUpdate:modelValue":be[8]||(be[8]=fe=>h.value=fe),title:t(i)("@PSTART:项目启动项"),size:"medium",type:"flex","height-mode":"max","height-offset":"140px"},{default:o(()=>[a("div",H1,[a("div",W1,[a("div",j1,[a("div",q1,l(t(i)("@PSTART:一键推送成功后执行")),1),a("div",J1,[a("span",K1,l(t(i)("@PSTART:启用")),1),s(G,{modelValue:d.value,"onUpdate:modelValue":be[0]||(be[0]=fe=>d.value=fe),size:"small",loading:E.value},null,8,["modelValue","loading"])])]),a("div",Y1,[s(ge,{modelValue:F.value,"onUpdate:modelValue":be[1]||(be[1]=fe=>F.value=fe),size:"small",disabled:E.value},{default:o(()=>[s(q,{label:"command"},{default:o(()=>[L(l(t(i)("@PSTART:命令")),1)]),_:1}),s(q,{label:"workflow"},{default:o(()=>[L(l(t(i)("@PSTART:工作流")),1)]),_:1})]),_:1},8,["modelValue","disabled"]),s(re,{modelValue:w.value,"onUpdate:modelValue":be[2]||(be[2]=fe=>w.value=fe),class:"after-quick-push__select",placeholder:F.value==="workflow"?t(i)("@PSTART:选择一个工作流"):t(i)("@PSTART:选择一个自定义命令"),filterable:"",clearable:"",disabled:E.value,onChange:be[3]||(be[3]=fe=>H(String(fe||"")))},{default:o(()=>[F.value==="workflow"?(r(!0),v(Ue,{key:0},tt(b.value,fe=>(r(),x(Q,{key:fe.id,label:fe.name,value:fe.id},null,8,["label","value"]))),128)):(r(!0),v(Ue,{key:1},tt(S.value,fe=>(r(),x(Q,{key:fe.id,label:fe.name,value:fe.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","disabled"])]),a("div",Q1,l(t(i)("@PSTART:仅在一键推送成功后触发,不影响主流程")),1)]),a("div",Z1,[a("div",X1,[a("div",ev,l(t(i)("@PSTART:启动项列表")),1),a("div",tv,"("+l(z.value.length)+")",1),A.value>0?(r(),v("div",sv,l(t(i)("@PSTART:有N项已失效",{count:A.value})),1)):I("",!0)]),a("div",av,[a("div",ov,[a("span",nv,l(t(i)("@PSTART:刷新页面自动执行")),1),s(G,{modelValue:C.value,"onUpdate:modelValue":be[4]||(be[4]=fe=>C.value=fe),size:"small",loading:ce.value},null,8,["modelValue","loading"])]),s(Ge,{content:t(i)("@PSTART:清理失效启动项"),placement:"bottom"},{default:o(()=>[s(te,{size:"small",onClick:_e,disabled:A.value===0},{default:o(()=>[s(ne,null,{default:o(()=>[s(t(Ds))]),_:1}),L(" "+l(t(i)("@PSTART:清理")),1)]),_:1},8,["disabled"])]),_:1},8,["content"])])]),z.value.length===0?(r(),v("div",lv,l(t(i)("@PSTART:暂无启动项")),1)):(r(),v("div",iv,[(r(!0),v(Ue,null,tt(z.value,fe=>{var We,J,Ce,Oe,lt,V,y,ae,Fe,ye,Ne,ut,me,$e,He,je,Ae;return r(),v("div",{key:fe.id,class:"startup-item"},[a("div",rv,[a("div",{class:"startup-item__name",title:fe.type==="workflow"?(We=fe.wf)==null?void 0:We.name:(J=fe.cmd)==null?void 0:J.name},[a("span",{class:Xe(["startup-item__type",fe.type==="workflow"?"is-workflow":"is-command"])},l(fe.type==="workflow"?t(i)("@PSTART:工作流"):t(i)("@PSTART:命令")),3),L(" "+l(fe.type==="workflow"?(Ce=fe.wf)==null?void 0:Ce.name:(Oe=fe.cmd)==null?void 0:Oe.name),1)],8,cv),fe.type==="command"?(r(),v("div",{key:0,class:"startup-item__desc",title:(lt=fe.cmd)==null?void 0:lt.command},l((V=fe.cmd)==null?void 0:V.command),9,uv)):(r(),v("div",{key:1,class:"startup-item__desc",title:((y=fe.wf)==null?void 0:y.description)||((ae=fe.wf)==null?void 0:ae.name)},l(((Fe=fe.wf)==null?void 0:Fe.description)||t(i)("@PSTART:工作流")),9,dv)),fe.type==="command"?(r(),v("div",{key:2,class:"startup-item__dir",title:(ye=fe.cmd)==null?void 0:ye.directory},l(t(i)("@PSTART:目录"))+":"+l(((Ne=fe.cmd)==null?void 0:Ne.directory)||"-"),9,pv)):(r(),v("div",{key:3,class:"startup-item__dir",title:String((($e=(me=(ut=fe.wf)==null?void 0:ut.flowData)==null?void 0:me.nodes)==null?void 0:$e.length)||0)},l(t(i)("@PSTART:步骤"))+":"+l(((Ae=(je=(He=fe.wf)==null?void 0:He.flowData)==null?void 0:je.nodes)==null?void 0:Ae.length)||0),9,fv))]),a("div",mv,[s(Ge,{content:t(i)("@PSTART:刷新页面自动执行"),placement:"top"},{default:o(()=>[s(G,{"model-value":fe.enabled!==!1,size:"small",loading:!!X.value[fe.id],"onUpdate:modelValue":ht=>T(fe.id,!!ht)},null,8,["model-value","loading","onUpdate:modelValue"])]),_:2},1032,["content"]),s(Ge,{content:t(i)("@PSTART:执行"),placement:"top"},{default:o(()=>[s(te,{text:"",type:"primary",size:"small",onClick:ht=>De(fe)},{default:o(()=>[s(ne,null,{default:o(()=>[s(t(ps))]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["content"]),s(Ge,{content:t(i)("@PSTART:删除"),placement:"top"},{default:o(()=>[s(te,{text:"",type:"danger",size:"small",onClick:ht=>se(fe)},{default:o(()=>[s(ne,null,{default:o(()=>[s(t(Zt))]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["content"])])])}),128))])),a("div",vv,[a("div",hv,l(t(i)("@PSTART:添加启动项")),1),a("div",gv,[s(ge,{modelValue:O.value,"onUpdate:modelValue":be[5]||(be[5]=fe=>O.value=fe),size:"small",onChange:be[6]||(be[6]=fe=>Y.value="")},{default:o(()=>[s(q,{label:"command"},{default:o(()=>[L(l(t(i)("@PSTART:命令")),1)]),_:1}),s(q,{label:"workflow"},{default:o(()=>[L(l(t(i)("@PSTART:工作流")),1)]),_:1})]),_:1},8,["modelValue"])]),a("div",yv,[s(re,{modelValue:Y.value,"onUpdate:modelValue":be[7]||(be[7]=fe=>Y.value=fe),class:"startup-add__select",placeholder:O.value==="workflow"?t(i)("@PSTART:选择一个工作流"):t(i)("@PSTART:选择一个自定义命令"),filterable:"",clearable:""},{default:o(()=>[O.value==="workflow"?(r(!0),v(Ue,{key:0},tt(b.value,fe=>(r(),x(Q,{key:fe.id,label:fe.name,value:fe.id},{default:o(()=>{var We,J;return[a("div",Cv,[a("div",_v,l(fe.name),1),a("div",bv,l(fe.description||`步骤: ${((J=(We=fe.flowData)==null?void 0:We.nodes)==null?void 0:J.length)||0}`),1)])]}),_:2},1032,["label","value"]))),128)):(r(!0),v(Ue,{key:1},tt(S.value,fe=>(r(),x(Q,{key:fe.id,label:fe.name,value:fe.id},{default:o(()=>[a("div",wv,[a("div",kv,l(fe.name),1),a("div",$v,l(fe.command),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"]),s(te,{type:"primary",onClick:B},{default:o(()=>[s(ne,null,{default:o(()=>[s(t(as))]),_:1}),L(" "+l(t(i)("@PSTART:添加")),1)]),_:1})])])])]),_:1},8,["modelValue","title"])}}}),Dv=Je(Sv,[["__scopeId","data-v-11d7f88a"]]),Fv=ze({__name:"ProjectStartupButton",emits:["execute-command","execute-workflow"],setup(j,{emit:k}){const{t:i}=oa(),c=k,f=_(!1);function p(){f.value=!0}function h(m){c("execute-command",m)}function C(m){c("execute-workflow",m)}return(m,S)=>(r(),v("div",null,[s(nt,{tooltip:t(i)("@PSTART:项目启动项"),"hover-color":"#409EFF",onClick:p,"custom-class":"project-startup-btn"},{default:o(()=>[s(Lt,{"icon-class":"start-run-command","class-name":"icon-btn"})]),_:1},8,["tooltip"]),s(Dv,{visible:f.value,"onUpdate:visible":S[0]||(S[0]=M=>f.value=M),onExecuteCommand:h,onExecuteWorkflow:C},null,8,["visible"])]))}}),Ov=Je(Fv,[["__scopeId","data-v-914b5529"]]),Nv={key:0},Tv={key:1},Bv={key:2},Av={key:3,class:"node-header"},Ev={class:"flow-node-icon"},Pv={class:"node-title"},Vv={class:"node-body"},Mv={key:4,class:"disabled-overlay"},Gv=ze({__name:"BaseNode",props:{id:{},nodeId:{},nodeType:{default:"command"},title:{},icon:{},enabled:{type:Boolean,default:!0},selected:{type:Boolean,default:!1},deletable:{type:Boolean,default:!0},showDeleteOnSelected:{type:Boolean,default:!1},sourceHandleIds:{},execStatus:{}},emits:["delete"],setup(j,{emit:k}){const i=j,c=ie(()=>!!(i.title&&String(i.title).trim()||i.icon&&String(i.icon).trim())),f=ie(()=>c.value?16:0),p=ie(()=>i.sourceHandleIds&&i.sourceHandleIds.length?i.sourceHandleIds:["source"]),h=k;return(C,m)=>{const S=st;return r(),v("div",{class:Xe(["flow-node-wrapper",[{disabled:!C.enabled,"is-selected":C.selected,"show-delete-on-selected":C.showDeleteOnSelected},C.nodeType?`node-type-${C.nodeType}`:""]])},[C.nodeType!=="start"?(r(),x(t(pa),{key:0,id:"target",type:"target",position:t(da).Left,class:"flow-node-handle handle-left"},null,8,["position"])):I("",!0),C.deletable!==!1?(r(),x(S,{key:1,class:"flow-node-delete-btn",onClick:m[0]||(m[0]=qt(M=>h("delete",C.nodeId),["stop"])),title:"删除节点",role:"button",tabindex:"0"},{default:o(()=>[s(t(pn))]),_:1})):I("",!0),C.execStatus?(r(),v("div",{key:2,class:Xe(["flow-node-status",[`status-${C.execStatus}`]])},[C.execStatus==="running"?(r(),v("span",Nv,"执行中")):C.execStatus==="success"?(r(),v("span",Tv,"成功")):(r(),v("span",Bv,"失败"))],2)):I("",!0),C.title||C.icon?(r(),v("div",Av,[a("div",Ev,l(C.icon),1),a("div",Pv,l(C.title),1)])):I("",!0),a("div",Vv,[Yt(C.$slots,"default",{},void 0,!0)]),C.enabled?I("",!0):(r(),v("div",Mv,"已禁用")),C.nodeType==="condition"?(r(!0),v(Ue,{key:5},tt(p.value,M=>(r(),x(t(pa),{key:M,id:M,type:"source",position:t(da).Right,class:"flow-node-handle handle-right",style:ls({top:`calc(50% + ${f.value}px + ${(p.value.indexOf(M)-(p.value.length-1)/2)*18}px)`})},null,8,["id","position","style"]))),128)):(r(),x(t(pa),{key:6,id:"source",type:"source",position:t(da).Right,class:"flow-node-handle handle-right"},null,8,["position"]))],2)}}}),ea=Je(Gv,[["__scopeId","data-v-4b97322b"]]),Iv={class:"command-node-content"},Rv={class:"node-badges"},Lv={key:0,class:"node-badge terminal"},xv={key:0,class:"node-warning"},Uv={key:1,class:"command-details"},zv={class:"command-code"},Hv={key:0,class:"command-dir"},Wv=ze({__name:"CommandNode",props:{data:{},id:{}},setup(j){const k=j,i=Ut(),c=ie(()=>!k.data.config||!k.data.config.commandId?null:i.customCommands.find(h=>h.id===k.data.config.commandId)||null),f=ie(()=>{var p,h;return k.data.config?{name:k.data.config.commandName||e("@FLOWNODE:未配置"),terminal:k.data.config.useTerminal||!1,command:((p=c.value)==null?void 0:p.command)||"",directory:((h=c.value)==null?void 0:h.directory)||""}:null});return(p,h)=>{var m,S;const C=st;return r(),v("div",Iv,[a("div",Rv,[(m=f.value)!=null&&m.terminal?(r(),v("div",Lv,[s(C,null,{default:o(()=>[s(t(Us))]),_:1}),a("span",null,l(t(e)("@FLOWNODE:终端")),1)])):I("",!0)]),p.data.config?I("",!0):(r(),v("div",xv,l(t(e)("@FLOWNODE:未配置")),1)),(S=f.value)!=null&&S.command?(r(),v("div",Uv,[a("div",zv,[a("code",null,l(f.value.command),1)]),f.value.directory?(r(),v("div",Hv,[s(C,null,{default:o(()=>[s(t(rs))]),_:1}),a("span",null,l(f.value.directory),1)])):I("",!0)])):I("",!0)])}}}),Ro=Je(Wv,[["__scopeId","data-v-c64b7099"]]),jv={class:"wait-node-content"},qv={key:0,class:"node-warning"},Jv={key:1,class:"wait-seconds"},Kv=ze({__name:"WaitNode",props:{data:{},id:{}},setup(j){return(k,i)=>{var c;return r(),v("div",jv,[k.data.config?(r(),v("div",Jv,l(t(e)("@FLOWNODE:等待 {seconds} 秒",{seconds:((c=k.data.config)==null?void 0:c.waitSeconds)??0})),1)):(r(),v("div",qv,l(t(e)("@FLOWNODE:未配置")),1))])}}}),Lo=Je(Kv,[["__scopeId","data-v-5c0bacde"]]),Yv={class:"version-node-content"},Qv={key:0,class:"node-badge"},Zv={key:1,class:"info-grid"},Xv={class:"info-label"},eh=["title"],th={key:2,class:"node-warning"},sh=ze({__name:"VersionNode",props:{data:{},id:{}},setup(j){const k=j,i=ie(()=>{var m,S;if(!k.data.config)return null;const c=k.data.config,f=String((c==null?void 0:c.versionTarget)||"version"),p=String((c==null?void 0:c.versionSource)||"bump"),h=[];h.push({label:e("@FLOWNODE:目标"),value:e(f==="dependency"?"@FLOWNODE:依赖版本":"@FLOWNODE:version字段")}),h.push({label:e("@FLOWNODE:来源"),value:e(p==="reference"?"@FLOWNODE:引用输出":p==="input"?"@FLOWNODE:引用输入":p==="manual"?"@FLOWNODE:手动输入":"@FLOWNODE:自动递增")});const C=String((c==null?void 0:c.packageJsonPath)||"").trim();if(h.push({label:e("@FLOWNODE:package.json"),value:C||e("@FLOWNODE:当前目录")}),f==="dependency"){const M=String((c==null?void 0:c.dependencyType)||"dependencies"),b=String((c==null?void 0:c.dependencyName)||"").trim();if(b&&h.push({label:e("@FLOWNODE:依赖"),value:`${M}::${b}`}),p==="manual"){const P=String((c==null?void 0:c.dependencyVersion)||"").trim();P&&h.push({label:e("@FLOWNODE:版本号"),value:P})}else if(p==="bump"){const P=String((c==null?void 0:c.dependencyVersionBump)||(c==null?void 0:c.versionBump)||"patch");h.push({label:e("@FLOWNODE:递增"),value:P})}else if(p==="reference"){const P=String(((m=c==null?void 0:c.inputRef)==null?void 0:m.nodeId)||"").trim(),n=String(((S=c==null?void 0:c.inputRef)==null?void 0:S.outputKey)||"").trim(),d=P&&n?`${P}::${n}`:"";d&&h.push({label:e("@FLOWNODE:引用"),value:d})}else if(p==="input"){const P=String((c==null?void 0:c.dependencyVersionInputKey)||(c==null?void 0:c.versionInputKey)||"").trim();P&&h.push({label:e("@FLOWNODE:引用"),value:P})}}else{const M=String((c==null?void 0:c.versionBump)||"patch");h.push({label:e("@FLOWNODE:递增"),value:M})}return{target:f,rows:h}});return(c,f)=>{var p,h,C;return r(),v("div",Yv,[((p=i.value)==null?void 0:p.target)==="dependency"?(r(),v("div",Qv,l(t(e)("@FLOWNODE:依赖")),1)):I("",!0),(C=(h=i.value)==null?void 0:h.rows)!=null&&C.length?(r(),v("div",Zv,[(r(!0),v(Ue,null,tt(i.value.rows,(m,S)=>(r(),v("div",{key:S,class:"info-row"},[a("div",Xv,l(m.label),1),a("div",{class:"info-value",title:m.value},l(m.value),9,eh)]))),128))])):I("",!0),c.data.config?I("",!0):(r(),v("div",th,l(t(e)("@FLOWNODE:未配置")),1))])}}}),xo=Je(sh,[["__scopeId","data-v-8b45244f"]]),ah={key:0,class:"confirm-node-content"},oh={class:"node-warning"},nh=ze({__name:"ConfirmNode",props:{data:{},id:{}},setup(j){return(k,i)=>k.data.config?I("",!0):(r(),v("div",ah,[a("div",oh,l(t(e)("@FLOWNODE:未配置")),1)]))}}),Uo=Je(nh,[["__scopeId","data-v-230ca263"]]),lh={class:"code-node-content"},ih={key:0,class:"node-warning"},rh={key:1,class:"code-details"},ch={class:"code-meta"},uh={class:"meta-item"},dh={class:"meta-item"},ph=ze({__name:"CodeNode",props:{data:{},id:{}},setup(j){const k=j,i=ie(()=>{const c=k.data.config||{};return{hasScript:!!(c.codeScript&&String(c.codeScript).trim()),outputKeys:Array.isArray(c.codeOutputKeys)?c.codeOutputKeys:[]}});return(c,f)=>(r(),v("div",lh,[c.data.config?(r(),v("div",rh,[a("div",ch,[a("span",uh,l(t(e)("@NODECFG:脚本"))+": "+l(i.value.hasScript?t(e)("@FLOWNODE:已添加"):t(e)("@FLOWNODE:未配置")),1),a("span",dh,l(t(e)("@NODECFG:输出键列表"))+": "+l(i.value.outputKeys.length?i.value.outputKeys.join(", "):t(e)("@FLOWNODE:未配置")),1)])])):(r(),v("div",ih,l(t(e)("@FLOWNODE:未配置")),1))]))}}),zo=Je(ph,[["__scopeId","data-v-dd521e2d"]]),fh={class:"condition-node"},mh={key:0,class:"condition-empty"},vh={key:1,class:"condition-branches"},hh={class:"branch-name"},gh={class:"branch-meta"},yh=ze({__name:"ConditionNode",props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(j){const k=j,i=ie(()=>{var h;const c=(h=k.data)==null?void 0:h.config;return[...Array.isArray(c==null?void 0:c.conditionBranches)?c.conditionBranches:[]].sort((C,m)=>(C.priority??0)-(m.priority??0))});return(c,f)=>(r(),v("div",fh,[i.value.length===0?(r(),v("div",mh,"未配置条件分支")):(r(),v("div",vh,[(r(!0),v(Ue,null,tt(i.value,p=>(r(),v("div",{key:p.id,class:"condition-branch"},[a("span",hh,l(p.isDefault?"DEFAULT":p.name),1),a("span",gh,"("+l(p.combine.toUpperCase())+" / "+l(p.rules.length)+")",1)]))),128))]))]))}}),Ho=Je(yh,[["__scopeId","data-v-7fbdbc3f"]]),Ch={class:"user-input-node-content"},_h={key:0,class:"node-warning"},bh={key:0,class:"node-warning"},wh={key:1,class:"param-summary"},kh={class:"param-count"},$h={class:"param-list"},Sh={key:0,class:"star"},Dh={key:0,class:"more"},Fh=ze({__name:"UserInputNode",props:{data:{},id:{}},setup(j){const k=j,i=ie(()=>{var m;const h=(m=k.data)==null?void 0:m.config;return(Array.isArray(h==null?void 0:h.userInputParams)?h.userInputParams:[]).map(S=>String((S==null?void 0:S.name)||"").trim()).filter(S=>!!S)}),c=ie(()=>{var S;const h=(S=k.data)==null?void 0:S.config,C=Array.isArray(h==null?void 0:h.userInputParams)?h.userInputParams:[],m=new Set;for(const M of C){const b=String((M==null?void 0:M.name)||"").trim();b&&M!=null&&M.required&&m.add(b)}return m}),f=ie(()=>i.value.slice(0,3)),p=ie(()=>i.value.length>3);return(h,C)=>(r(),v("div",Ch,[h.data.config?(r(),v(Ue,{key:1},[i.value.length===0?(r(),v("div",bh,l(t(e)("@UINPUT:暂无输入参数")),1)):(r(),v("div",wh,[a("div",kh,l(t(e)("@UINPUT:参数名"))+" ("+l(i.value.length)+")",1),a("div",$h,[(r(!0),v(Ue,null,tt(f.value,m=>(r(),v("span",{key:m,class:Xe(["param-chip",{required:c.value.has(m)}])},[c.value.has(m)?(r(),v("span",Sh,"*")):I("",!0),L(" "+l(m),1)],2))),128)),p.value?(r(),v("span",Dh,"+"+l(i.value.length-3),1)):I("",!0)])]))],64)):(r(),v("div",_h,l(t(e)("@FLOWNODE:未配置")),1))]))}}),Wo=Je(Fh,[["__scopeId","data-v-f55e1923"]]),Oh=ze({__name:"NodeContextMenu",props:{nodeId:{}},emits:["execute-from-node","execute-single-node"],setup(j,{emit:k}){const i=j,c=k,f=_(!1);function p(h){h==="executeFrom"?c("execute-from-node",i.nodeId):h==="executeSingle"&&c("execute-single-node",i.nodeId)}return(h,C)=>{const m=st,S=vo,M=mo,b=ho;return r(),x(b,{trigger:"contextmenu",onCommand:p,onVisibleChange:C[0]||(C[0]=P=>f.value=P),"popper-class":"flow-node-dropdown"},{dropdown:o(()=>[s(M,null,{default:o(()=>[s(S,{command:"executeFrom"},{default:o(()=>[s(m,null,{default:o(()=>[s(t(ps))]),_:1}),C[1]||(C[1]=L(" 从此处开始执行 "))]),_:1}),s(S,{command:"executeSingle"},{default:o(()=>[s(m,null,{default:o(()=>[s(t(ps))]),_:1}),C[2]||(C[2]=L(" 只执行此节点 "))]),_:1})]),_:1})]),default:o(()=>[Yt(h.$slots,"default",{dropdownVisible:f.value})]),_:3})}}}),Nh={class:"package-json-selector"},Th={class:"selector-container"},Bh={class:"option-content"},Ah={class:"option-main"},Eh={class:"package-name"},Ph={class:"option-path"},Vh={key:0,class:"empty-hint"},Mh=ze({__name:"PackageJsonSelector",props:{modelValue:{},placeholder:{},clearable:{type:Boolean},disabled:{type:Boolean}},emits:["update:modelValue","change"],setup(j,{emit:k}){const i=j,c=k,f=_(!1),p=_([]),h=_(""),C=ie({get:()=>i.modelValue,set:n=>{h.value=n,c("update:modelValue",n);const d=p.value.find(F=>F.fullPath===n);c("change",d||null)}}),m=ie(()=>p.value.map(n=>({label:n.displayName,value:n.fullPath,relativePath:n.relativePath,version:n.version})));async function S(n){f.value=!0;try{const d=n?`/api/scan-package-files?directory=${encodeURIComponent(n)}`:"/api/scan-package-files",F=await fetch(d);if(!F.ok)throw new Error(`HTTP ${F.status}: ${F.statusText}`);const w=await F.json();if(w.success){p.value=w.packages||[],C.value&&!p.value.some(H=>H.fullPath===C.value)&&(C.value="");const E=n?`目录 ${n}`:"当前项目";u.success(`扫描 ${E} 完成,找到 ${p.value.length} 个 package.json 文件`)}else throw new Error(w.error||"扫描失败")}catch(d){console.error("扫描package.json文件失败:",d),u.error(`扫描失败: ${d.message}`),p.value=[]}finally{f.value=!1}}async function M(){try{const d=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:""})})).json();d.success?b(d):d.error&&u.error(d.error)}catch(n){u.error(`浏览目录失败: ${n.message}`)}}function b(n){if(!n||!n.items)return;let d=String(n.path||"");const F=()=>{const w=String(d||"").trim();if(!w){u.warning("请输入目录路径");return}P(w)};Dt.alert(Ye("div",{class:"directory-browser"},[Ye("div",{class:"current-path"},[Ye("span",{class:"path-label"},"当前路径:"),Ye("input",{class:"path-value",value:d,onInput:w=>{d=w.target.value},onKeydown:w=>{w.key==="Enter"&&(w.preventDefault(),F())}}),Ye("button",{type:"button",class:"path-jump-btn",onClick:F},"跳转")]),Ye("div",{class:"directory-list"},[n.parentPath?Ye("div",{class:"directory-item parent-dir",onClick:()=>P(n.parentPath)},[Ye("span",{class:"dir-icon"},Ye("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-warning)"}},[Ye("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ye("span",{class:"dir-name"},"返回上级目录")]):null,...n.items.map(w=>Ye("div",{class:"directory-item",onClick:()=>P(w.path)},[Ye("span",{class:"dir-icon"},Ye("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-primary)"}},[Ye("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ye("span",{class:"dir-name"},w.name)]))])]),"浏览并选择目录",{confirmButtonText:"确定",cancelButtonText:"取消",showCancelButton:!0,customClass:"directory-browser-dialog",callback:w=>{if(w==="confirm"){const E=String(d||n.path||"").trim();if(!E){u.warning("请输入目录路径");return}S(E)}}})}async function P(n){try{Dt.close(),setTimeout(async()=>{try{const F=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:n})})).json();F.success?b(F):F.error&&u.error(F.error)}catch(d){u.error(`浏览目录失败: ${d.message}`)}},100)}catch(d){u.error(`处理目录选择时出错: ${d.message}`)}}return S(),Ze(()=>i.modelValue,n=>{h.value=n},{immediate:!0}),(n,d)=>{const F=st,w=ns,E=os,H=ct,z=mn;return r(),v("div",Nh,[a("div",Th,[s(E,{modelValue:C.value,"onUpdate:modelValue":d[0]||(d[0]=A=>C.value=A),placeholder:n.placeholder||"选择 package.json 文件",clearable:n.clearable,disabled:n.disabled||f.value,filterable:"",class:"package-select"},{default:o(()=>[(r(!0),v(Ue,null,tt(m.value,A=>(r(),x(w,{key:A.value,label:A.label,value:A.value},{default:o(()=>[a("div",Bh,[a("div",Ah,[s(F,{class:"folder-icon"},{default:o(()=>[s(t(rs))]),_:1}),a("span",Eh,l(A.label),1)]),a("div",Ph,l(A.relativePath),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","clearable","disabled"]),s(H,{icon:f.value?t(zt):t(la),loading:f.value,disabled:n.disabled,size:"default",onClick:d[1]||(d[1]=A=>S()),class:"refresh-btn",title:"刷新当前项目"},{default:o(()=>[L(l(f.value?"扫描中...":"刷新"),1)]),_:1},8,["icon","loading","disabled"]),s(H,{icon:t(fn),disabled:n.disabled||f.value,size:"default",onClick:M,class:"custom-dir-btn",title:"浏览并选择其他目录"},{default:o(()=>d[2]||(d[2]=[L(" 其他目录 ")])),_:1},8,["icon","disabled"])]),p.value.length===0&&!f.value?(r(),v("div",Vh,[s(z,{type:"info",size:"small"},{default:o(()=>d[3]||(d[3]=[L(" 未找到 package.json 文件,请确保项目包含有效的 package.json ")])),_:1})])):I("",!0)])}}}),Gh=Je(Mh,[["__scopeId","data-v-d84ec8a7"]]),Ih={class:"param-list"},Rh={key:0,class:"param-list__title"},Lh={key:0,class:"param-list__title-text"},xh={class:"param-list__title-actions"},Uh={key:1,class:"param-list__empty"},zh={key:2,class:"param-list__body"},Hh={class:"param-list__row-content"},Wh={key:0,class:"param-list__row-actions"},jh=ze({__name:"ParamListContainer",props:{modelValue:{},title:{},addable:{type:Boolean},removable:{type:Boolean},minItems:{},createItem:{type:Function},itemKey:{type:Function},disableAdd:{type:Boolean},disableRemove:{type:Function}},emits:["update:modelValue","add","remove"],setup(j,{emit:k}){const i=j,c=k,f=ie(()=>Array.isArray(i.modelValue)?i.modelValue:[]);function p(){if(!i.addable||i.disableAdd)return;const m=i.createItem;if(!m)return;const S=[...f.value,m()];c("update:modelValue",S),c("add")}function h(m){if(!i.removable)return;const S=typeof i.minItems=="number"?i.minItems:0;if(f.value.length<=S)return;const M=f.value[m];if(i.disableRemove&&i.disableRemove(M,m))return;const b=[...f.value];b.splice(m,1),c("update:modelValue",b),c("remove",m)}function C(m,S){return i.itemKey?i.itemKey(m,S):S}return(m,S)=>{const M=ct;return r(),v("div",Ih,[m.title!==void 0||m.addable?(r(),v("div",Rh,[m.title?(r(),v("span",Lh,l(m.title),1)):I("",!0),a("div",xh,[Yt(m.$slots,"title-actions",{},void 0,!0),m.addable?(r(),x(M,{key:0,type:"primary",plain:"",icon:t(as),disabled:m.disableAdd||!m.createItem,onClick:p},null,8,["icon","disabled"])):I("",!0)])])):I("",!0),f.value.length===0?(r(),v("div",Uh,[Yt(m.$slots,"empty",{},void 0,!0)])):(r(),v("div",zh,[(r(!0),v(Ue,null,tt(f.value,(b,P)=>(r(),v("div",{key:C(b,P),class:Xe(["param-list__row",{"param-list__row--no-actions":!m.removable}])},[a("div",Hh,[Yt(m.$slots,"row",{item:b,index:P},void 0,!0)]),m.removable?(r(),v("div",Wh,[s(M,{type:"danger",plain:"",icon:t(Zt),disabled:typeof m.minItems=="number"&&f.value.length<=m.minItems||(m.disableRemove?m.disableRemove(b,P):!1),onClick:n=>h(P)},null,8,["icon","disabled","onClick"])])):I("",!0)],2))),128))]))])}}}),Ts=Je(jh,[["__scopeId","data-v-dd70d4bc"]]),qh={class:"node-input-config"},Jh={class:"input-row"},Kh={class:"input-field param-name-field"},Yh={class:"field-label"},Qh={class:"input-field type-field"},Zh={class:"field-label"},Xh={class:"input-field value-field"},e2={class:"field-label"},t2={class:"tree-node-label"},s2={class:"input-field required-field"},a2={class:"field-label"},o2=ze({__name:"NodeInputConfig",props:{modelValue:{},paramNames:{},disableParamNameEdit:{type:Boolean},predecessorNodes:{}},emits:["update:modelValue"],setup(j,{emit:k}){const i=j,c=k,f=_([]);Ze(()=>i.modelValue,b=>{f.value=b?[...b]:[]},{immediate:!0,deep:!0}),Ze(()=>i.paramNames,b=>{if(!b||b.length===0){f.value=[],c("update:modelValue",[]);return}const P=new Map(f.value.map(d=>[d.paramName,d])),n=[];for(const d of b)P.has(d)?n.push(P.get(d)):n.push({paramName:d,inputType:"manual",required:!1,manualValue:""});f.value=n,c("update:modelValue",n)},{immediate:!0});function p(b,P,n){if(!f.value[b])return;const d=[...f.value];d[b]={...d[b],[P]:n},P==="inputType"&&(n==="manual"?(d[b].referenceNodeId=void 0,d[b].referenceOutputKey=void 0):d[b].manualValue=void 0),f.value=d,c("update:modelValue",d)}function h(b){var P,n,d;return b.type==="command"?((P=b.data.config)==null?void 0:P.displayName)||((n=b.data.config)==null?void 0:n.commandName)||b.data.label||e("@FLOWNODE:命令节点"):b.type==="code"?((d=b.data.config)==null?void 0:d.displayName)||b.data.label||e("@FLOWNODE:代码节点"):b.data.label||b.id}function C(b){var P,n;if(b.type==="command")return[{key:"stdout",label:e("@NODEINPUT:标准输出(stdout)")},{key:"stderr",label:e("@NODEINPUT:标准错误(stderr)")},{key:"error",label:e("@NODEINPUT:错误(error)")}];if(b.type==="code"){const d=(P=b.data)==null?void 0:P.config,F=Array.isArray(d==null?void 0:d.codeOutputParams)?d.codeOutputParams:[];if(F.length>0)return F.map(H=>String((H==null?void 0:H.key)||"").trim()).filter(H=>!!H).map(H=>({key:H,label:H}));const w=d==null?void 0:d.codeOutputKeys;return(Array.isArray(w)?w:[]).map(H=>String(H||"").trim()).filter(H=>!!H).map(H=>({key:H,label:H}))}if(b.type==="user_input"){const d=(n=b.data)==null?void 0:n.config;return(Array.isArray(d==null?void 0:d.userInputParams)?d.userInputParams:[]).map(w=>String((w==null?void 0:w.name)||"").trim()).filter(w=>!!w).map(w=>({key:w,label:w}))}return[]}const m=ie(()=>!i.predecessorNodes||i.predecessorNodes.length===0?[]:i.predecessorNodes.map(b=>({value:b.id,label:h(b),children:C(b).map(P=>({value:`${b.id}::${P.key}`,label:P.label}))})));function S(b,P){if(!P)return;const[n,d]=P.split("::"),F=[...f.value];F[b]={...F[b],referenceNodeId:n,referenceOutputKey:d},f.value=F,c("update:modelValue",F)}function M(b){return b.referenceNodeId&&b.referenceOutputKey?`${b.referenceNodeId}::${b.referenceOutputKey}`:""}return(b,P)=>{const n=Et,d=ns,F=os,w=st,E=ia,H=ws;return r(),v("div",qh,[s(Ts,{"model-value":f.value,title:void 0,addable:!1,removable:!1},{empty:o(()=>[L(l(t(e)("@NODEINPUT:命令中未检测到变量参数")),1)]),row:o(({item:z,index:A})=>[a("div",Jh,[a("div",Kh,[a("label",Yh,l(t(e)("@NODEINPUT:参数名")),1),s(n,{"model-value":z.paramName,disabled:b.disableParamNameEdit,placeholder:t(e)("@NODEINPUT:参数名"),size:"default","onUpdate:modelValue":O=>p(A,"paramName",O)},null,8,["model-value","disabled","placeholder","onUpdate:modelValue"])]),a("div",Qh,[a("label",Zh,l(t(e)("@NODEINPUT:类型")),1),s(F,{"model-value":z.inputType,placeholder:t(e)("@NODEINPUT:选择类型"),size:"default","onUpdate:modelValue":O=>p(A,"inputType",O)},{default:o(()=>[s(d,{value:"manual",label:t(e)("@NODEINPUT:手动输入")},null,8,["label"]),s(d,{value:"reference",label:t(e)("@NODEINPUT:引用节点"),disabled:!b.predecessorNodes||b.predecessorNodes.length===0},null,8,["label","disabled"])]),_:2},1032,["model-value","placeholder","onUpdate:modelValue"])]),a("div",Xh,[a("label",e2,l(t(e)("@NODEINPUT:值")),1),z.inputType==="manual"?(r(),x(n,{key:0,"model-value":z.manualValue,placeholder:t(e)("@NODEINPUT:输入参数值"),size:"default",clearable:"","onUpdate:modelValue":O=>p(A,"manualValue",O)},null,8,["model-value","placeholder","onUpdate:modelValue"])):(r(),x(E,{key:1,"model-value":M(z),data:m.value,placeholder:t(e)("@NODEINPUT:选择节点输出"),size:"default",clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":O=>S(A,O)},{default:o(({data:O})=>[a("span",t2,[O.children?I("",!0):(r(),x(w,{key:0},{default:o(()=>[s(t(Ht))]),_:1})),L(" "+l(O.label),1)])]),_:2},1032,["model-value","data","placeholder","onUpdate:modelValue"]))]),a("div",s2,[a("label",a2,l(t(e)("@NODEINPUT:必填")),1),s(H,{"model-value":!!z.required,"onUpdate:modelValue":O=>p(A,"required",O)},null,8,["model-value","onUpdate:modelValue"])])])]),_:1},8,["model-value"])])}}}),n2=Je(o2,[["__scopeId","data-v-c29deac4"]]),l2={class:"code-node-input-config"},i2={class:"input-row"},r2={class:"input-field name-field"},c2={class:"field-label"},u2={class:"input-field type-field"},d2={class:"field-label"},p2={class:"input-field value-field"},f2={class:"field-label"},m2={class:"input-field action-field"},v2={class:"field-label"},h2=ze({__name:"CodeNodeInputConfig",props:{modelValue:{},predecessorNodes:{},title:{},addable:{type:Boolean}},emits:["update:modelValue"],setup(j,{expose:k,emit:i}){const c=j,f=i,p=_([]);Ze(()=>c.modelValue,d=>{p.value=Array.isArray(d)?[...d]:[]},{immediate:!0,deep:!0});function h(d){var F,w,E;return d.type==="command"?((F=d.data.config)==null?void 0:F.displayName)||((w=d.data.config)==null?void 0:w.commandName)||d.data.label||e("@FLOWNODE:命令节点"):d.type==="code"?((E=d.data.config)==null?void 0:E.displayName)||d.data.label||e("@FLOWNODE:代码节点"):d.data.label||d.id}function C(d){var F,w;if(!d)return[];if(d.type==="command")return[{key:"stdout",label:e("@NODEINPUT:标准输出(stdout)")},{key:"stderr",label:e("@NODEINPUT:标准错误(stderr)")},{key:"error",label:e("@NODEINPUT:错误(error)")}];if(d.type==="code"){const E=(F=d.data)==null?void 0:F.config;return(Array.isArray(E==null?void 0:E.codeOutputParams)?E.codeOutputParams:[]).map(z=>String((z==null?void 0:z.key)||"").trim()).filter(z=>!!z).map(z=>({key:z,label:z}))}if(d.type==="user_input"){const E=(w=d.data)==null?void 0:w.config;return(Array.isArray(E==null?void 0:E.userInputParams)?E.userInputParams:[]).map(z=>String((z==null?void 0:z.name)||"").trim()).filter(z=>!!z).map(z=>({key:z,label:z}))}return[]}const m=ie(()=>!c.predecessorNodes||c.predecessorNodes.length===0?[]:c.predecessorNodes.map(d=>({value:d.id,label:h(d),children:C(d).map(F=>({value:`${d.id}::${F.key}`,label:F.label}))})));function S(){return{name:"",source:"reference",required:!1,ref:{nodeId:"",outputKey:"stdout"}}}function M(){const d=[...p.value,S()];p.value=d,f("update:modelValue",d)}k({addRow:M});function b(d,F){if(!p.value[d])return;const w=[...p.value];w[d]={...w[d],...F},F.source&&(F.source==="manual"?(w[d].ref=void 0,w[d].manualValue===void 0&&(w[d].manualValue="")):(w[d].manualValue=void 0,w[d].ref||(w[d].ref={nodeId:"",outputKey:"stdout"}))),p.value=w,f("update:modelValue",w)}function P(d,F){if(!F)return;const[w,E]=F.split("::");b(d,{ref:{nodeId:w,outputKey:E}})}function n(d){var F,w;return(F=d.ref)!=null&&F.nodeId&&((w=d.ref)!=null&&w.outputKey)?`${d.ref.nodeId}::${d.ref.outputKey}`:""}return(d,F)=>{const w=Et,E=ns,H=os,z=ia,A=ws;return r(),v("div",l2,[s(Ts,{"model-value":p.value,title:d.title,addable:d.addable!==!1,removable:!0,"min-items":0,"create-item":S,"onUpdate:modelValue":F[0]||(F[0]=O=>f("update:modelValue",O))},{empty:o(()=>[L(l(t(e)("@NODECFG:暂无输入参数")),1)]),row:o(({item:O,index:Y})=>[a("div",i2,[a("div",r2,[a("label",c2,l(t(e)("@NODECFG:参数名")),1),s(w,{modelValue:O.name,"onUpdate:modelValue":[ce=>O.name=ce,ce=>b(Y,{name:ce})],placeholder:t(e)("@NODECFG:参数名")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),a("div",u2,[a("label",d2,l(t(e)("@NODECFG:参数值")),1),s(H,{modelValue:O.source,"onUpdate:modelValue":[ce=>O.source=ce,ce=>b(Y,{source:ce})],style:{width:"110px"}},{default:o(()=>[s(E,{label:t(e)("@NODECFG:引用"),value:"reference",disabled:!d.predecessorNodes||d.predecessorNodes.length===0},null,8,["label","disabled"]),s(E,{label:t(e)("@NODECFG:手动"),value:"manual"},null,8,["label"])]),_:2},1032,["modelValue","onUpdate:modelValue"])]),a("div",p2,[a("label",f2,l(t(e)("@NODECFG:值")),1),O.source==="manual"?(r(),x(w,{key:0,modelValue:O.manualValue,"onUpdate:modelValue":[ce=>O.manualValue=ce,ce=>b(Y,{manualValue:ce})],placeholder:t(e)("@NODECFG:请输入")},null,8,["modelValue","onUpdate:modelValue","placeholder"])):(r(),x(z,{key:1,"model-value":n(O),data:m.value,placeholder:t(e)("@NODEINPUT:选择节点输出"),clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":ce=>P(Y,ce)},null,8,["model-value","data","placeholder","onUpdate:modelValue"]))]),a("div",m2,[a("label",v2,l(t(e)("@NODEINPUT:必填")),1),s(A,{"model-value":!!O.required,"onUpdate:modelValue":ce=>b(Y,{required:ce})},null,8,["model-value","onUpdate:modelValue"])])])]),_:1},8,["model-value","title","addable"])])}}}),ja=Je(h2,[["__scopeId","data-v-f1422931"]]),g2={class:"user-input-param-config"},y2={class:"input-row"},C2={class:"input-field name-field"},_2={class:"field-label"},b2={class:"input-field type-field"},w2={class:"field-label"},k2={class:"input-field value-field"},$2={class:"field-label"},S2={class:"tree-node-label"},D2={class:"input-field action-field"},F2={class:"field-label"},O2=ze({__name:"UserInputParamConfig",props:{modelValue:{},predecessorNodes:{},title:{},addable:{type:Boolean}},emits:["update:modelValue"],setup(j,{expose:k,emit:i}){const c=j,f=i,p=_([]);Ze(()=>c.modelValue,d=>{p.value=Array.isArray(d)?[...d]:[]},{immediate:!0,deep:!0});function h(){return{name:"",source:"manual",defaultValue:"",required:!1}}function C(){const d=[...p.value,h()];p.value=d,f("update:modelValue",d)}k({addRow:C});function m(d,F){if(!p.value[d])return;const w=[...p.value];w[d]={...w[d],...F},F.source&&(F.source==="manual"?(w[d].ref=void 0,w[d].defaultValue===void 0&&(w[d].defaultValue="")):(w[d].defaultValue=void 0,w[d].ref||(w[d].ref={nodeId:"",outputKey:"stdout"}))),p.value=w,f("update:modelValue",w)}function S(d){var F,w,E,H;return d.type==="command"?((F=d.data.config)==null?void 0:F.displayName)||((w=d.data.config)==null?void 0:w.commandName)||d.data.label||e("@FLOWNODE:命令节点"):d.type==="code"?((E=d.data.config)==null?void 0:E.displayName)||d.data.label||e("@FLOWNODE:代码节点"):d.type==="user_input"?((H=d.data.config)==null?void 0:H.displayName)||d.data.label||e("@FLOWNODE:用户输入"):d.data.label||d.id}function M(d){var F,w;if(!d)return[];if(d.type==="command")return[{key:"stdout",label:e("@NODEINPUT:标准输出(stdout)")},{key:"stderr",label:e("@NODEINPUT:标准错误(stderr)")},{key:"error",label:e("@NODEINPUT:错误(error)")}];if(d.type==="code"){const E=(F=d.data)==null?void 0:F.config;return(Array.isArray(E==null?void 0:E.codeOutputParams)?E.codeOutputParams:[]).map(z=>String((z==null?void 0:z.key)||"").trim()).filter(z=>!!z).map(z=>({key:z,label:z}))}if(d.type==="user_input"){const E=(w=d.data)==null?void 0:w.config;return(Array.isArray(E==null?void 0:E.userInputParams)?E.userInputParams:[]).map(z=>String((z==null?void 0:z.name)||"").trim()).filter(z=>!!z).map(z=>({key:z,label:z}))}return[]}const b=ie(()=>!c.predecessorNodes||c.predecessorNodes.length===0?[]:c.predecessorNodes.map(d=>({value:d.id,label:S(d),children:M(d).map(F=>({value:`${d.id}::${F.key}`,label:F.label}))})));function P(d,F){if(!F)return;const[w,E]=F.split("::");m(d,{ref:{nodeId:w,outputKey:E}})}function n(d){var F,w;return(F=d.ref)!=null&&F.nodeId&&((w=d.ref)!=null&&w.outputKey)?`${d.ref.nodeId}::${d.ref.outputKey}`:""}return(d,F)=>{const w=Et,E=ns,H=os,z=st,A=ia,O=ws,Y=ct;return r(),v("div",g2,[s(Ts,{"model-value":p.value,title:d.title,addable:d.addable!==!1,removable:!0,"min-items":0,"create-item":h,"onUpdate:modelValue":F[0]||(F[0]=ce=>f("update:modelValue",ce))},{empty:o(()=>[L(l(t(e)("@UINPUT:暂无输入参数")),1)]),row:o(({item:ce,index:X})=>[a("div",y2,[a("div",C2,[a("label",_2,l(t(e)("@UINPUT:参数名")),1),s(w,{modelValue:ce.name,"onUpdate:modelValue":[T=>ce.name=T,T=>m(X,{name:T})],placeholder:t(e)("@UINPUT:参数名")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),a("div",b2,[a("label",w2,l(t(e)("@UINPUT:类型")),1),s(H,{modelValue:ce.source,"onUpdate:modelValue":[T=>ce.source=T,T=>m(X,{source:T})],style:{width:"130px"}},{default:o(()=>[s(E,{label:t(e)("@UINPUT:手动输入"),value:"manual"},null,8,["label"]),s(E,{label:t(e)("@UINPUT:引用"),value:"reference",disabled:!c.predecessorNodes||c.predecessorNodes.length===0},null,8,["label","disabled"])]),_:2},1032,["modelValue","onUpdate:modelValue"])]),a("div",k2,[a("label",$2,l(ce.source==="manual"?t(e)("@UINPUT:默认值"):t(e)("@UINPUT:引用输出")),1),ce.source==="manual"?(r(),x(w,{key:0,modelValue:ce.defaultValue,"onUpdate:modelValue":[T=>ce.defaultValue=T,T=>m(X,{defaultValue:T})],placeholder:t(e)("@UINPUT:默认值"),clearable:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):(r(),x(A,{key:1,"model-value":n(ce),data:b.value,placeholder:t(e)("@NODEINPUT:选择节点输出"),clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":T=>P(X,T)},{default:o(({data:T})=>[a("span",S2,[T.children?I("",!0):(r(),x(z,{key:0},{default:o(()=>[s(t(Ht))]),_:1})),L(" "+l(T.label),1)])]),_:2},1032,["model-value","data","placeholder","onUpdate:modelValue"]))]),a("div",D2,[a("label",F2,l(t(e)("@NODEINPUT:必填")),1),s(O,{"model-value":!!ce.required,"onUpdate:modelValue":T=>m(X,{required:T})},null,8,["model-value","onUpdate:modelValue"])])])]),actions:o(()=>[d.addable!==!1?(r(),x(Y,{key:0,type:"primary",plain:"",size:"small",onClick:C},{default:o(()=>[L(l(t(e)("@UINPUT:添加参数")),1)]),_:1})):I("",!0)]),_:1},8,["model-value","title","addable"])])}}}),N2=Je(O2,[["__scopeId","data-v-1f668177"]]);function T2(j){if(!j)return[];const k=/\{\{(\w+)\}\}/g,i=[];let c;for(;(c=k.exec(j))!==null;){const f=c[1];i.includes(f)||i.push(f)}return i}function B2(j,k){if(!j)return"";let i=j;for(const[c,f]of Object.entries(k)){const p=new RegExp(`\\{\\{${c}\\}\\}`,"g");i=i.replace(p,f||"")}return i}const A2={key:0,class:"config-content"},E2={class:"config-section"},P2={class:"section-title"},V2={key:0,class:"config-section"},M2={class:"section-title"},G2={key:1,class:"config-section"},I2={class:"section-title"},R2={class:"sub-section"},L2={class:"sub-title"},x2={key:0,class:"empty-tip"},U2={key:1,class:"condition-branch-list"},z2={class:"branch-main"},H2={class:"branch-header"},W2={class:"branch-title"},j2={key:0,class:"branch-badge"},q2={class:"branch-meta"},J2={key:0,class:"branch-rules"},K2={class:"rules-header"},Y2={class:"rule-col"},Q2={class:"field-label"},Z2={class:"rule-col"},X2={class:"field-label"},e0={class:"rule-col"},t0={class:"field-label"},s0={class:"rule-col",style:{"align-self":"flex-end"}},a0={key:1,class:"branch-default-tip"},o0={key:0,class:"branch-actions"},n0={key:2,class:"config-section"},l0={class:"section-title"},i0={key:3,class:"config-section"},r0={class:"section-title"},c0={key:4,class:"config-section"},u0={class:"section-title"},d0={key:5,class:"config-section"},p0={class:"section-title"},f0={key:6,class:"config-section"},m0={class:"section-title"},v0={class:"output-param-row"},h0={class:"output-param-field"},g0={class:"field-label"},y0={key:7,class:"config-section"},C0={class:"section-title"},_0={key:0,class:"empty-tip"},b0={key:1,class:"command-list"},w0=["onClick"],k0={class:"command-info"},$0={class:"command-header"},S0={class:"command-name"},D0={key:0,class:"command-desc"},F0={class:"command-code"},O0={class:"command-dir"},N0={key:8,class:"config-section"},T0={class:"section-title"},B0={style:{"margin-left":"var(--spacing-md)"}},A0={key:9,class:"config-section"},E0={class:"section-title"},P0={class:"sub-section"},V0={class:"sub-title"},M0={class:"code-examples"},G0={class:"examples-title"},I0={class:"examples-actions"},R0={key:10,class:"config-section"},L0={class:"section-title"},x0={class:"reference-tip"},U0={class:"reference-tip"},z0={class:"node-option"},H0={class:"node-name"},W0={class:"node-id"},j0={class:"reference-tip"},q0={class:"reference-tip"},J0={key:11,class:"config-section"},K0={class:"section-title"},Y0={class:"output-param-row"},Q0={class:"output-param-field"},Z0={class:"field-label"},X0={class:"output-param-field"},eg={class:"field-label"},tg={key:12,class:"config-section"},sg={class:"section-title"},ag={class:"output-param-row"},og={class:"output-param-field"},ng={class:"field-label"},lg={class:"output-param-field"},ig={class:"field-label"},rg={class:"dialog-footer"},cg={class:"footer-actions"},ug=`function main(param) {
|
|
37
|
-
const out = new Object()
|
|
38
|
-
out.key0 = param.input
|
|
39
|
-
return out
|
|
40
|
-
}`,dg=ze({__name:"NodeConfigPanel",props:{modelValue:{type:Boolean},node:{},allNodes:{},edges:{}},emits:["update:modelValue","update-config","open-command-manager"],setup(j,{emit:k}){const i=[{key:"extractVersion",title:e("@NODECFG:提取版本号"),script:`function main(param) {
|
|
41
|
-
const text = String((param && param.input) ?? "")
|
|
42
|
-
// 匹配形如 2.10.73 / v2.10.73 的版本号
|
|
43
|
-
const m = text.match(/\\bv?(\\d+\\.\\d+\\.\\d+)\\b/)
|
|
44
|
-
const out = new Object()
|
|
45
|
-
out.version = m ? m[1] : ""
|
|
46
|
-
return out
|
|
47
|
-
}`},{key:"commitMessage",title:e("@NODECFG:生成提交信息"),script:`function main(param) {
|
|
48
|
-
const text = String((param && param.input) ?? "")
|
|
49
|
-
// 兼容:@scope/workflow@2.10.73 或 workflow@2.10.73 或 workflow 2.10.73
|
|
50
|
-
const m = text.match(/(?:@[^\\/\\s]+\\/)?([A-Za-z0-9._-]+)(?:@|\\s+)(v?\\d+\\.\\d+\\.\\d+)/)
|
|
51
|
-
const name = m ? m[1] : ""
|
|
52
|
-
const ver = m ? m[2].replace(/^v/, "") : ""
|
|
53
|
-
const out = new Object()
|
|
54
|
-
out.message = (name && ver) ? \`【\${name}】更新版本到\${ver}\` : ""
|
|
55
|
-
return out
|
|
56
|
-
}`}];function c(V){n.value.codeScript=V,u.success(e("@NODECFG:已应用示例"))}const f=j,p=k;function h(){p("open-command-manager")}const C=Ut(),m=ie(()=>{const V=e("@NODECFG:节点配置");if(!f.node)return V;const ae={command:e("@FLOWNODE:命令节点"),wait:e("@FLOWNODE:等待节点"),version:e("@FLOWNODE:版本管理"),confirm:e("@FLOWNODE:用户确认"),code:e("@FLOWNODE:代码节点"),condition:e("@FLOWNODE:条件"),user_input:e("@FLOWNODE:用户输入")}[f.node.type]||f.node.type;return`${V} - ${ae}`}),S=ie({get:()=>f.modelValue,set:V=>p("update:modelValue",V)}),M=_(null),b=_(null),P=_(null),n=_({}),d=ie(()=>{const y=(Array.isArray(n.value.userInputParams)?n.value.userInputParams:[]).map(Fe=>String((Fe==null?void 0:Fe.name)||"").trim()).filter(Fe=>!!Fe);return Array.from(new Set(y)).map(Fe=>({key:Fe}))}),F=ie(()=>{const y=(Array.isArray(n.value.versionInputs)?n.value.versionInputs:[]).map(ae=>String((ae==null?void 0:ae.name)||"").trim()).filter(ae=>!!ae);return Array.from(new Set(y))});function w(){const V=F.value;if(V.length===0){n.value.versionInputKey="";return}const y=String(n.value.versionInputKey||"").trim();y&&V.includes(y)||(n.value.versionInputKey=V.includes("version")?"version":V[0])}function E(){const V=F.value;if(V.length===0){n.value.dependencyVersionInputKey="";return}const y=String(n.value.dependencyVersionInputKey||"").trim();if(!(y&&V.includes(y))){if(V.includes("dependencyVersion")){n.value.dependencyVersionInputKey="dependencyVersion";return}n.value.dependencyVersionInputKey=V.includes("version")?"version":V[0]}}function H(){return{id:`branch-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,name:e("@COND:默认分支"),handleId:"default",priority:999,combine:"all",rules:[],isDefault:!0}}function z(V){const ae=(Array.isArray(V)?V:[]).map(ye=>({id:String((ye==null?void 0:ye.id)||`branch-${Date.now()}-${Math.random().toString(36).slice(2,6)}`),name:String((ye==null?void 0:ye.name)||"").trim()||e("@COND:分支名称"),handleId:String((ye==null?void 0:ye.handleId)||"").trim()||"branch",priority:Number.isFinite(Number(ye==null?void 0:ye.priority))?Number(ye==null?void 0:ye.priority):0,combine:(ye==null?void 0:ye.combine)==="any"?"any":"all",rules:Array.isArray(ye==null?void 0:ye.rules)?ye.rules:[],isDefault:!!(ye!=null&&ye.isDefault)}));ae.some(ye=>ye.handleId==="default"||ye.isDefault)||ae.push(H());for(const ye of ae)ye.handleId==="default"&&(ye.isDefault=!0,ye.name||(ye.name=e("@COND:默认分支")));return ae}function A(){return{left:{nodeId:"",outputKey:"stdout"},op:"contains",right:""}}function O(){const V=z(n.value.conditionBranches);V.push({id:`branch-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,name:e("@COND:分支名称"),handleId:`branch-${V.length}`,priority:V.length,combine:"all",rules:[A()],isDefault:!1}),n.value.conditionBranches=V}function Y(V){const y=z(n.value.conditionBranches),ae=y.find(Fe=>Fe.id===V);if((ae==null?void 0:ae.handleId)==="default"||ae!=null&&ae.isDefault){u.warning(e("@COND:请至少保留一个默认分支"));return}n.value.conditionBranches=y.filter(Fe=>Fe.id!==V)}function ce(V){const y=z(n.value.conditionBranches),ae=y.find(Fe=>Fe.id===V);ae&&(ae.rules=Array.isArray(ae.rules)?[...ae.rules,A()]:[A()],n.value.conditionBranches=y)}function X(V,y){const ae=z(n.value.conditionBranches),Fe=ae.find(ye=>ye.id===V);Fe&&(Fe.rules=(Array.isArray(Fe.rules)?Fe.rules:[]).filter((ye,Ne)=>Ne!==y),n.value.conditionBranches=ae)}function T(V){const ae=(Array.isArray(V)?V:[]).map(Ne=>({name:String((Ne==null?void 0:Ne.name)||"").trim(),source:(Ne==null?void 0:Ne.source)==="manual"?"manual":"reference",manualValue:(Ne==null?void 0:Ne.manualValue)===void 0||(Ne==null?void 0:Ne.manualValue)===null?"":String(Ne.manualValue),ref:Ne!=null&&Ne.ref?{nodeId:String(Ne.ref.nodeId||""),outputKey:String(Ne.ref.outputKey||"stdout")}:void 0})).filter(Ne=>{var ut;return!!Ne.name||!!Ne.manualValue||!!((ut=Ne.ref)!=null&&ut.nodeId)}),Fe=new Set,ye=[];for(const Ne of ae)Fe.has(Ne.name)||(Fe.add(Ne.name),ye.push(Ne));return ye.slice(0,30)}function B(V){return(Array.isArray(V)?V:[]).find(ae=>String((ae==null?void 0:ae.name)||"").trim()==="version")}function se(V){const y=Array.isArray(n.value.versionInputs)?[...n.value.versionInputs]:[],ae=y.findIndex(Ne=>String((Ne==null?void 0:Ne.name)||"").trim()==="version"),ye={...ae>=0?y[ae]:{name:"version",source:"manual",manualValue:"",ref:{nodeId:"",outputKey:"stdout"}},...V,name:"version"};V.source&&(V.source==="manual"?(ye.ref=void 0,ye.manualValue===void 0&&(ye.manualValue="")):(ye.manualValue=void 0,ye.ref||(ye.ref={nodeId:"",outputKey:"stdout"}))),ae>=0?y[ae]=ye:y.push(ye),n.value.versionInputs=T(y)}function _e(){const V=Array.isArray(n.value.versionInputs)?n.value.versionInputs:[];n.value.versionInputs=V.filter(y=>String((y==null?void 0:y.name)||"").trim()!=="version")}function De(V){var y,ae;return!((y=V==null?void 0:V.ref)!=null&&y.nodeId)||!((ae=V==null?void 0:V.ref)!=null&&ae.outputKey)?"":`${V.ref.nodeId}::${V.ref.outputKey}`}function ue(V){if(!V)return;const[y,ae]=V.split("::");se({source:"reference",ref:{nodeId:y,outputKey:ae}})}function be(V){const ae=(Array.isArray(V)?V:[]).map(Ne=>({key:String((Ne==null?void 0:Ne.key)||"").trim(),type:(Ne==null?void 0:Ne.type)||"String",desc:String((Ne==null?void 0:Ne.desc)||"").trim()})).filter(Ne=>!!Ne.key),Fe=new Set,ye=[];for(const Ne of ae)Fe.has(Ne.key)||(Fe.add(Ne.key),ye.push(Ne));return ye.slice(0,30)}function G(){return{key:"",type:"String"}}function q(){const V=Array.isArray(n.value.codeOutputParams)?[...n.value.codeOutputParams]:[];V.push(G()),n.value.codeOutputParams=V}const ge=_([]),Q=ie(()=>C.customCommands||[]),re=ie(()=>{if(!n.value.commandId)return[];const V=Q.value.find(y=>y.id===n.value.commandId);return V?T2(V.command):[]}),ne=ie(()=>{var me;if(!f.node||!f.allNodes||!f.edges)return[];const V=f.node.id,y=f.edges,ae=f.allNodes,Fe=[],ye=new Set,Ne=[V];function ut($e){return y.filter(He=>He.target===$e).map(He=>He.source)}for(;Ne.length>0;){const $e=Ne.shift(),He=ut($e);for(const je of He)if(!ye.has(je)){ye.add(je),Ne.push(je);const Ae=ae.find(ht=>ht.id===je);if(Ae&&(Ae.type==="command"||Ae.type==="code"||Ae.type==="user_input")&&Ae.data.config){if(Ae.type==="command"&&((me=Ae.data.config)==null?void 0:me.useTerminal)===!0)continue;Fe.push(Ae)}}}return Fe});function te(V){var y,ae;if(!V)return[];if(V.type==="command")return[{key:"stdout",label:e("@NODECFG:标准输出(stdout)")},{key:"stderr",label:e("@NODECFG:标准错误(stderr)")},{key:"error",label:e("@NODECFG:错误(error)")}];if(V.type==="code"){const Fe=(y=V.data)==null?void 0:y.config,ye=Array.isArray(Fe==null?void 0:Fe.codeOutputParams)?Fe.codeOutputParams:[];if(ye.length>0)return ye.map(me=>String((me==null?void 0:me.key)||"").trim()).filter(me=>!!me).map(me=>({key:me,label:me}));const Ne=Fe==null?void 0:Fe.codeOutputKeys;return(Array.isArray(Ne)?Ne:[]).map(me=>String(me||"").trim()).filter(me=>!!me).map(me=>({key:me,label:me}))}if(V.type==="user_input"){const Fe=(ae=V.data)==null?void 0:ae.config;return(Array.isArray(Fe==null?void 0:Fe.userInputParams)?Fe.userInputParams:[]).map(Ne=>String((Ne==null?void 0:Ne.name)||"").trim()).filter(Ne=>!!Ne).map(Ne=>({key:Ne,label:Ne}))}return[]}function Ge(V){var y;return V.type==="command"?((y=V.data.config)==null?void 0:y.commandName)||V.data.label||e("@NODECFG:命令节点"):V.type==="code"?V.data.label||e("@FLOWNODE:代码节点"):V.type==="user_input"?V.data.label||e("@FLOWNODE:用户输入"):V.data.label||V.id}function fe(V){const y=new Map;for(const ae of Array.isArray(V)?V:[]){const Fe=String((ae==null?void 0:ae.key)||"").trim();Fe&&y.set(Fe,String((ae==null?void 0:ae.desc)||"").trim())}return[{key:"stdout",desc:y.get("stdout")||""},{key:"stderr",desc:y.get("stderr")||""},{key:"error",desc:y.get("error")||""}]}Ze(()=>f.node,V=>{if(!V)return;const y=V.data.config;if(V.type==="command")n.value={commandId:y==null?void 0:y.commandId,commandName:y==null?void 0:y.commandName,useTerminal:(y==null?void 0:y.useTerminal)||!1,restartExistingTerminal:(y==null?void 0:y.restartExistingTerminal)||!1,inputs:Array.isArray(y==null?void 0:y.inputs)?y.inputs:[],commandOutputParams:fe(y==null?void 0:y.commandOutputParams),nodeName:(y==null?void 0:y.displayName)||V.data.label||"",enabled:V.data.enabled??!0};else if(V.type==="wait")n.value={waitSeconds:(y==null?void 0:y.waitSeconds)||5,nodeName:(y==null?void 0:y.displayName)||V.data.label||"",enabled:V.data.enabled??!0};else if(V.type==="version"){let ae="bump";(y==null?void 0:y.versionSource)==="input"&&(ae="input");const ye=B(y==null?void 0:y.versionInputs);ae!=="input"&&((y==null?void 0:y.versionTarget)!=="dependency"&&ye?ae=ye.source==="manual"?"manual":"reference":y!=null&&y.inputRef?ae="reference":y!=null&&y.dependencyVersion||(y==null?void 0:y.versionTarget)!=="dependency"&&!(y!=null&&y.versionBump)?ae="manual":(y!=null&&y.dependencyVersionBump||y!=null&&y.versionBump)&&(ae="bump")),n.value={versionTarget:(y==null?void 0:y.versionTarget)||"version",versionBump:(y==null?void 0:y.versionBump)||"patch",packageJsonPath:(y==null?void 0:y.packageJsonPath)||"",dependencyName:(y==null?void 0:y.dependencyName)||"",dependencyVersion:(y==null?void 0:y.dependencyVersion)||"",dependencyType:(y==null?void 0:y.dependencyType)||"dependencies",dependencyVersionMode:y!=null&&y.dependencyVersionBump?"bump":"manual",dependencyVersionBump:(y==null?void 0:y.dependencyVersionBump)||"patch",versionInputs:T(y==null?void 0:y.versionInputs),versionSource:ae,inputRef:y==null?void 0:y.inputRef,extractVersionFromRefOutput:(y==null?void 0:y.extractVersionFromRefOutput)??!0,versionInputKey:String((y==null?void 0:y.versionInputKey)||"").trim()||void 0,dependencyVersionInputKey:String((y==null?void 0:y.dependencyVersionInputKey)||"").trim()||void 0,nodeName:(y==null?void 0:y.displayName)||V.data.label||"",enabled:V.data.enabled??!0},ae==="input"&&(n.value.versionTarget==="dependency"?E():w()),y!=null&&y.packageJsonPath&&We(y.packageJsonPath)}else if(V.type==="code"){const ae=Array.isArray(y==null?void 0:y.codeInputs)?y.codeInputs:[],Fe=Array.isArray(y==null?void 0:y.codeOutputParams)?y.codeOutputParams:[];n.value={codeScript:(y==null?void 0:y.codeScript)||"",codeInputs:ae,codeOutputParams:Fe,nodeName:(y==null?void 0:y.displayName)||V.data.label||"",enabled:V.data.enabled??!0}}else if(V.type==="confirm")n.value={nodeName:(y==null?void 0:y.displayName)||V.data.label||"",enabled:V.data.enabled??!0};else if(V.type==="condition"){const ae=z(y==null?void 0:y.conditionBranches);n.value={conditionBranches:ae,nodeName:(y==null?void 0:y.displayName)||V.data.label||"",enabled:V.data.enabled??!0}}else V.type==="user_input"&&(n.value={userInputParams:Array.isArray(y==null?void 0:y.userInputParams)?y.userInputParams:[],nodeName:(y==null?void 0:y.displayName)||V.data.label||"",enabled:V.data.enabled??!0})},{immediate:!0});async function We(V){try{const y=await fetch("/api/read-package-json",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageJsonPath:V})});if(!y.ok)throw new Error(`HTTP ${y.status}`);const ae=await y.json();if(ae.success){const Fe=[],ye=n.value.dependencyType||"dependencies";if(ye==="dependencies"&&ae.dependencies)Fe.push(...Object.keys(ae.dependencies));else if(ye==="devDependencies"&&ae.devDependencies)Fe.push(...Object.keys(ae.devDependencies));else if(ye==="peerDependencies"){const Ne=ae.peerDependencies&&Object.keys(ae.peerDependencies).length>0?ae.peerDependencies:ae.peerDependenciesMeta;Ne&&Fe.push(...Object.keys(Ne))}ge.value=Fe.sort()}}catch(y){console.error(e("@NODECFG:读取依赖列表失败"),y),ge.value=[]}}Ze(()=>n.value.dependencyType,()=>{n.value.packageJsonPath&&We(n.value.packageJsonPath)});function J(V){n.value.selectedPackageFile=V,V?(n.value.packageJsonPath=V.fullPath,We(V.fullPath)):ge.value=[]}function Ce(V){n.value.commandId=V.id,n.value.commandName=V.name}function Oe(){return`step-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function lt(){var y,ae,Fe,ye,Ne,ut,me,$e,He,je,Ae,ht,Pt,Ft,Bt,$,N,Z,Se,Pe,xe,de,g;if(!f.node)return;let V=null;if(f.node.type==="command"){if(!n.value.commandId){u.warning(e("@NODECFG:请选择要执行的命令"));return}const D=Array.isArray(n.value.inputs)?n.value.inputs:[];for(const ee of D){if(!ee||!ee.required)continue;const ke=String(ee.paramName||"").trim()||e("@NODEINPUT:参数名");if(ee.inputType==="reference"){const oe=String(ee.referenceNodeId||"").trim(),W=String(ee.referenceOutputKey||"").trim();if(!oe||!W){u.warning(e("@NODECFG:必填参数未选择引用输出",{name:ke}));return}}else{const oe=ee.manualValue;if(oe==null||String(oe).trim()===""){u.warning(e("@NODECFG:请输入必填参数的值",{name:ke}));return}}}V={id:((y=f.node.data.config)==null?void 0:y.id)||Oe(),nodeId:f.node.id,type:"command",displayName:((ae=n.value.nodeName)==null?void 0:ae.trim())||void 0,commandId:n.value.commandId,commandName:n.value.commandName||"",useTerminal:n.value.useTerminal||!1,restartExistingTerminal:n.value.useTerminal&&n.value.restartExistingTerminal||!1,inputs:n.value.inputs||[],commandOutputParams:fe(n.value.commandOutputParams),enabled:n.value.enabled??!0}}else if(f.node.type==="wait"){if(!n.value.waitSeconds||n.value.waitSeconds<=0){u.warning(e("@NODECFG:等待时间必须大于0秒"));return}V={id:((Fe=f.node.data.config)==null?void 0:Fe.id)||Oe(),nodeId:f.node.id,type:"wait",displayName:((ye=n.value.nodeName)==null?void 0:ye.trim())||void 0,waitSeconds:n.value.waitSeconds,enabled:n.value.enabled??!0}}else if(f.node.type==="version"){if(n.value.versionTarget==="dependency"){if(!((Ne=n.value.dependencyName)!=null&&Ne.trim())){u.warning(e("@NODECFG:请选择依赖包名称"));return}if(n.value.versionSource==="manual"&&!((ut=n.value.dependencyVersion)!=null&&ut.trim())){u.warning(e("@NODECFG:请输入依赖包版本号"));return}if(n.value.versionSource==="reference"&&!n.value.inputRef){u.warning(e("@NODECFG:请选择要引用的节点输出"));return}if(n.value.versionSource==="input"&&!String(n.value.dependencyVersionInputKey||"").trim()){u.warning(e("@NODECFG:请选择要引用的输入字段"));return}}else if(n.value.versionSource==="input"&&!String(n.value.versionInputKey||"").trim()){u.warning(e("@NODECFG:请选择要引用的输入字段"));return}V={id:((me=f.node.data.config)==null?void 0:me.id)||Oe(),nodeId:f.node.id,type:"version",displayName:(($e=n.value.nodeName)==null?void 0:$e.trim())||void 0,versionTarget:n.value.versionTarget||"version",versionBump:n.value.versionSource==="bump"?n.value.versionBump||"patch":void 0,packageJsonPath:((He=n.value.packageJsonPath)==null?void 0:He.trim())||void 0,dependencyName:n.value.versionTarget==="dependency"?(je=n.value.dependencyName)==null?void 0:je.trim():void 0,dependencyVersion:n.value.versionTarget==="dependency"&&n.value.versionSource==="manual"?(Ae=n.value.dependencyVersion)==null?void 0:Ae.trim():void 0,dependencyVersionBump:n.value.versionTarget==="dependency"&&n.value.versionSource==="bump"?n.value.dependencyVersionBump:void 0,dependencyType:n.value.versionTarget==="dependency"?n.value.dependencyType:void 0,versionInputs:T(n.value.versionInputs),versionSource:n.value.versionSource,inputRef:n.value.versionSource==="reference"?n.value.inputRef:void 0,extractVersionFromRefOutput:n.value.versionSource==="reference"?n.value.extractVersionFromRefOutput??!0:void 0,versionInputKey:n.value.versionSource==="input"&&n.value.versionTarget!=="dependency"&&String(n.value.versionInputKey||"").trim()||void 0,dependencyVersionInputKey:n.value.versionSource==="input"&&n.value.versionTarget==="dependency"&&String(n.value.dependencyVersionInputKey||"").trim()||void 0,enabled:n.value.enabled??!0}}else if(f.node.type==="code"){if(!n.value.codeScript||!String(n.value.codeScript).trim()){u.warning(e("@NODECFG:请输入脚本"));return}const D=T(n.value.codeInputs);for(const K of Array.isArray(D)?D:[]){if(!K||!K.required)continue;const oe=String(K.name||"").trim()||e("@NODECFG:参数名");if(K.source==="reference"){const Ve=String(((ht=K.ref)==null?void 0:ht.nodeId)||"").trim(),wt=String(((Pt=K.ref)==null?void 0:Pt.outputKey)||"").trim();if(!Ve||!wt){u.warning(e("@NODECFG:必填参数未选择引用输出",{name:oe}));return}}else{const Ve=K.manualValue;if(Ve==null||String(Ve).trim()===""){u.warning(e("@NODECFG:请输入必填参数的值",{name:oe}));return}}}const ee=be(n.value.codeOutputParams);if(ee.length===0){u.warning(e("@NODECFG:请配置输出键"));return}const ke=ee.map(K=>K.key);V={id:((Ft=f.node.data.config)==null?void 0:Ft.id)||Oe(),nodeId:f.node.id,type:"code",displayName:((Bt=n.value.nodeName)==null?void 0:Bt.trim())||void 0,codeScript:n.value.codeScript,codeInputs:D,codeOutputParams:ee,codeOutputKeys:ke,enabled:n.value.enabled??!0}}else if(f.node.type==="confirm")V={id:(($=f.node.data.config)==null?void 0:$.id)||Oe(),nodeId:f.node.id,type:"confirm",displayName:((N=n.value.nodeName)==null?void 0:N.trim())||void 0,enabled:n.value.enabled??!0};else if(f.node.type==="condition"){const D=z(n.value.conditionBranches);if(!D.some(ke=>ke.handleId==="default"||ke.isDefault)){u.warning(e("@COND:请至少保留一个默认分支"));return}for(const ke of D)if(ke.isDefault&&ke.handleId!=="default"){u.warning(e("@COND:默认分支必须使用handleId=default"));return}V={id:((Z=f.node.data.config)==null?void 0:Z.id)||Oe(),nodeId:f.node.id,type:"condition",displayName:((Se=n.value.nodeName)==null?void 0:Se.trim())||void 0,conditionBranches:D,enabled:n.value.enabled??!0}}else if(f.node.type==="user_input"){const ee=(Array.isArray(n.value.userInputParams)?n.value.userInputParams:[]).map(oe=>({name:String((oe==null?void 0:oe.name)||"").trim(),source:(oe==null?void 0:oe.source)==="reference"?"reference":"manual",required:!!(oe!=null&&oe.required),defaultValue:(oe==null?void 0:oe.defaultValue)===void 0||(oe==null?void 0:oe.defaultValue)===null?"":String(oe.defaultValue),ref:oe!=null&&oe.ref?{nodeId:String(oe.ref.nodeId||""),outputKey:String(oe.ref.outputKey||"stdout")}:void 0})).filter(oe=>!!oe.name),ke=new Set,K=[];for(const oe of ee)oe.name&&(ke.has(oe.name)||(ke.add(oe.name),K.push(oe)));for(const oe of K)if(oe.required&&oe.source==="reference"){const W=String(((Pe=oe==null?void 0:oe.ref)==null?void 0:Pe.nodeId)||"").trim(),Ve=String(((xe=oe==null?void 0:oe.ref)==null?void 0:xe.outputKey)||"").trim();if(!W||!Ve){u.warning(e("@NODECFG:必填参数未选择引用输出",{name:oe.name}));return}}V={id:((de=f.node.data.config)==null?void 0:de.id)||Oe(),nodeId:f.node.id,type:"user_input",displayName:((g=n.value.nodeName)==null?void 0:g.trim())||void 0,userInputParams:K,enabled:n.value.enabled??!0}}V&&(p("update-config",f.node.id,V),u.success(e("@NODECFG:节点配置已保存")),S.value=!1)}return(V,y)=>{const ae=st,Fe=Et,ye=bs,Ne=ws,ut=_s,me=ct,$e=vn,He=no,je=js,Ae=ns,ht=os,Pt=Ws,Ft=yt,Bt=ia;return r(),x(Gt,{modelValue:S.value,"onUpdate:modelValue":y[35]||(y[35]=$=>S.value=$),title:m.value,size:"extra-large","append-to-body":!0,"z-index":8e5,"custom-class":"node-config-dialog"},{footer:o(()=>[a("div",rg,[a("div",cg,[a("button",{type:"button",class:"dialog-cancel-btn",onClick:y[34]||(y[34]=$=>S.value=!1)},l(t(e)("@NODECFG:取消")),1),a("button",{type:"button",class:"dialog-confirm-btn",onClick:lt},[s(ae,null,{default:o(()=>[s(t(Is))]),_:1}),a("span",null,l(t(e)("@NODECFG:保存配置")),1)])])])]),default:o(()=>{var $,N,Z,Se,Pe,xe,de,g,D,ee,ke,K,oe;return[V.node?(r(),v("div",A2,[a("div",E2,[a("div",P2,[s(ae,null,{default:o(()=>[s(t(Is))]),_:1}),L(" "+l(t(e)("@NODECFG:通用设置")),1)]),s(ut,{"label-width":"120px"},{default:o(()=>[s(ye,{label:t(e)("@NODECFG:节点名称")},{default:o(()=>[s(Fe,{modelValue:n.value.nodeName,"onUpdate:modelValue":y[0]||(y[0]=W=>n.value.nodeName=W),placeholder:t(e)("@NODECFG:请输入节点名称")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(ye,{label:t(e)("@NODECFG:启用节点")},{default:o(()=>[s(Ne,{modelValue:n.value.enabled,"onUpdate:modelValue":y[1]||(y[1]=W=>n.value.enabled=W)},null,8,["modelValue"])]),_:1},8,["label"])]),_:1})]),(($=V.node)==null?void 0:$.type)==="version"?(r(),v("div",V2,[a("div",M2,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),L(" "+l(t(e)("@NODECFG:输入配置"))+" ",1),s(me,{type:"primary",plain:"",icon:t(as),style:{"margin-left":"auto"},onClick:y[2]||(y[2]=W=>{var Ve;return(Ve=b.value)==null?void 0:Ve.addRow()})},null,8,["icon"])]),s(ja,{ref_key:"versionInputRef",ref:b,"model-value":n.value.versionInputs||[],"onUpdate:modelValue":y[3]||(y[3]=W=>n.value.versionInputs=W),"predecessor-nodes":ne.value,title:void 0,addable:!1},null,8,["model-value","predecessor-nodes"])])):I("",!0),((N=V.node)==null?void 0:N.type)==="condition"?(r(),v("div",G2,[a("div",I2,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),L(" "+l(t(e)("@COND:条件配置"))+" ",1),s(me,{class:"icon-btn",type:"primary",plain:"",circle:"",icon:t(as),style:{"margin-left":"auto"},title:t(e)("@COND:添加分支"),onClick:O},null,8,["icon","title"])]),a("div",R2,[a("div",L2,[a("span",null,l(t(e)("@COND:分支列表")),1)]),!n.value.conditionBranches||n.value.conditionBranches.length===0?(r(),v("div",x2,l(t(e)("@COND:请至少保留一个默认分支")),1)):(r(),v("div",U2,[(r(!0),v(Ue,null,tt(n.value.conditionBranches,W=>(r(),v("div",{key:W.id,class:"condition-branch-card"},[a("div",z2,[a("div",H2,[a("div",W2,[W.handleId==="default"||W.isDefault?(r(),v("span",j2,l(t(e)("@COND:默认分支")),1)):I("",!0),s(Fe,{modelValue:W.name,"onUpdate:modelValue":Ve=>W.name=Ve,size:"small",disabled:W.handleId==="default"||W.isDefault,placeholder:t(e)("@COND:分支名称")},null,8,["modelValue","onUpdate:modelValue","disabled","placeholder"])])]),a("div",q2,[s(ut,{"label-width":"80px"},{default:o(()=>[s(ye,{label:t(e)("@COND:优先级")},{default:o(()=>[s($e,{modelValue:W.priority,"onUpdate:modelValue":Ve=>W.priority=Ve,min:0,max:9999,size:"small"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1032,["label"]),s(ye,{label:t(e)("@COND:规则组合")},{default:o(()=>[s(je,{modelValue:W.combine,"onUpdate:modelValue":Ve=>W.combine=Ve,size:"small"},{default:o(()=>[s(He,{value:"all"},{default:o(()=>[L(l(t(e)("@COND:且(ALL)")),1)]),_:1}),s(He,{value:"any"},{default:o(()=>[L(l(t(e)("@COND:或(ANY)")),1)]),_:1})]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1032,["label"])]),_:2},1024)]),W.handleId!=="default"&&!W.isDefault?(r(),v("div",J2,[a("div",K2,[a("span",null,l(t(e)("@COND:规则")),1),s(me,{class:"icon-btn",type:"primary",plain:"",circle:"",icon:t(as),title:t(e)("@COND:添加规则"),onClick:Ve=>ce(W.id)},null,8,["icon","title","onClick"])]),(r(!0),v(Ue,null,tt(W.rules,(Ve,wt)=>(r(),v("div",{key:wt,class:"rule-row"},[a("div",Y2,[a("div",Q2,l(t(e)("@COND:左值(引用输出)")),1),s(ht,{modelValue:Ve.left.nodeId,"onUpdate:modelValue":_t=>Ve.left.nodeId=_t,filterable:"",clearable:"",size:"small",style:{width:"100%"},placeholder:t(e)("@NODECFG:引用节点")},{default:o(()=>[(r(!0),v(Ue,null,tt(ne.value,_t=>(r(),x(Ae,{key:_t.id,label:Ge(_t),value:_t.id},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue","placeholder"]),s(ht,{modelValue:Ve.left.outputKey,"onUpdate:modelValue":_t=>Ve.left.outputKey=_t,filterable:"",size:"small",style:{width:"100%","margin-top":"6px"},placeholder:t(e)("@NODECFG:输出")},{default:o(()=>[(r(!0),v(Ue,null,tt(te(ne.value.find(_t=>_t.id===Ve.left.nodeId)),_t=>(r(),x(Ae,{key:_t.key,label:_t.label,value:_t.key},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue","placeholder"])]),a("div",Z2,[a("div",X2,l(t(e)("@COND:操作符")),1),s(ht,{modelValue:Ve.op,"onUpdate:modelValue":_t=>Ve.op=_t,size:"small",style:{width:"100%"}},{default:o(()=>[s(Ae,{label:"==",value:"=="}),s(Ae,{label:"!=",value:"!="}),s(Ae,{label:">",value:">"}),s(Ae,{label:">=",value:">="}),s(Ae,{label:"<",value:"<"}),s(Ae,{label:"<=",value:"<="}),s(Ae,{label:"contains",value:"contains"}),s(Ae,{label:"not_contains",value:"not_contains"}),s(Ae,{label:"isEmpty",value:"isEmpty"}),s(Ae,{label:"isNotEmpty",value:"isNotEmpty"})]),_:2},1032,["modelValue","onUpdate:modelValue"])]),a("div",e0,[a("div",t0,l(t(e)("@COND:右值")),1),s(Fe,{modelValue:Ve.right,"onUpdate:modelValue":_t=>Ve.right=_t,size:"small",disabled:Ve.op==="isEmpty"||Ve.op==="isNotEmpty"},null,8,["modelValue","onUpdate:modelValue","disabled"])]),a("div",s0,[s(me,{class:"icon-btn",type:"danger",plain:"",circle:"",icon:t(hn),title:t(e)("@COND:删除规则"),onClick:_t=>X(W.id,wt)},null,8,["icon","title","onClick"])])]))),128))])):(r(),v("div",a0,l(t(e)("@COND:默认分支"))+":不配置规则,未命中其它分支时走这里 ",1))]),W.handleId==="default"||W.isDefault?I("",!0):(r(),v("div",o0,[s(me,{class:"icon-btn",type:"danger",plain:"",circle:"",icon:t(Zt),title:t(e)("@COND:删除分支"),onClick:Ve=>Y(W.id)},null,8,["icon","title","onClick"])]))]))),128))]))])])):I("",!0),((Z=V.node)==null?void 0:Z.type)==="command"?(r(),v("div",n0,[a("div",l0,[s(ae,null,{default:o(()=>[s(t(Is))]),_:1}),L(" "+l(t(e)("@NODECFG:执行方式")),1)]),s(ut,{"label-width":"120px"},{default:o(()=>[s(ye,{label:t(e)("@NODECFG:执行方式")},{default:o(()=>[s(je,{modelValue:n.value.useTerminal,"onUpdate:modelValue":y[4]||(y[4]=W=>n.value.useTerminal=W)},{default:o(()=>[s(He,{value:!1},{default:o(()=>[L(l(t(e)("@NODECFG:普通执行")),1)]),_:1}),s(He,{value:!0},{default:o(()=>[L(l(t(e)("@NODECFG:终端执行")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),n.value.useTerminal?(r(),x(ye,{key:0,label:t(e)("@NODECFG:终端选项")},{default:o(()=>[s(Pt,{modelValue:n.value.restartExistingTerminal,"onUpdate:modelValue":y[5]||(y[5]=W=>n.value.restartExistingTerminal=W)},{default:o(()=>[L(l(t(e)("@NODECFG:重启现存终端命令")),1)]),_:1},8,["modelValue"])]),_:1},8,["label"])):I("",!0)]),_:1})])):I("",!0),((Se=V.node)==null?void 0:Se.type)==="command"&&n.value.commandId&&n.value.inputs?(r(),v("div",i0,[a("div",r0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),L(" "+l(t(e)("@NODECFG:输入配置")),1)]),s(n2,{modelValue:n.value.inputs,"onUpdate:modelValue":y[6]||(y[6]=W=>n.value.inputs=W),"param-names":re.value,"disable-param-name-edit":!0,"predecessor-nodes":ne.value},null,8,["modelValue","param-names","predecessor-nodes"])])):I("",!0),((Pe=V.node)==null?void 0:Pe.type)==="code"?(r(),v("div",c0,[a("div",u0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),L(" "+l(t(e)("@NODECFG:输入配置"))+" ",1),s(me,{type:"primary",plain:"",icon:t(as),style:{"margin-left":"auto"},onClick:y[7]||(y[7]=W=>{var Ve;return(Ve=M.value)==null?void 0:Ve.addRow()})},null,8,["icon"])]),s(ja,{ref_key:"codeInputRef",ref:M,"model-value":n.value.codeInputs||[],"onUpdate:modelValue":y[8]||(y[8]=W=>n.value.codeInputs=W),"predecessor-nodes":ne.value,title:void 0,addable:!1},null,8,["model-value","predecessor-nodes"])])):I("",!0),((xe=V.node)==null?void 0:xe.type)==="user_input"?(r(),v("div",d0,[a("div",p0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),L(" "+l(t(e)("@NODECFG:输入配置"))+" ",1),s(me,{type:"primary",plain:"",icon:t(as),style:{"margin-left":"auto"},onClick:y[9]||(y[9]=W=>{var Ve;return(Ve=P.value)==null?void 0:Ve.addRow()})},null,8,["icon"])]),s(N2,{ref_key:"userInputRef",ref:P,"model-value":n.value.userInputParams||[],"onUpdate:modelValue":y[10]||(y[10]=W=>n.value.userInputParams=W),"predecessor-nodes":ne.value,title:void 0,addable:!1},null,8,["model-value","predecessor-nodes"])])):I("",!0),((de=V.node)==null?void 0:de.type)==="user_input"?(r(),v("div",f0,[a("div",m0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),L(" "+l(t(e)("@NODECFG:输出配置")),1)]),s(Ts,{"model-value":d.value,title:void 0,addable:!1,removable:!1},{empty:o(()=>[L(l(t(e)("@NODECFG:暂无输出参数")||""),1)]),row:o(({item:W})=>[a("div",v0,[a("div",h0,[a("label",g0,l(t(e)("@NODECFG:参数名")),1),s(Fe,{"model-value":W.key,disabled:""},null,8,["model-value"])])])]),_:1},8,["model-value"])])):I("",!0),((g=V.node)==null?void 0:g.type)==="command"?(r(),v("div",y0,[a("div",C0,[s(ae,null,{default:o(()=>[s(Lt,{"icon-class":"custom-cmd"})]),_:1}),L(" "+l(t(e)("@NODECFG:命令配置"))+" ",1),s(me,{type:"primary",plain:"",size:"small",style:{"margin-left":"auto"},onClick:h},{default:o(()=>[L(l(t(e)("@NODECFG:管理命令")),1)]),_:1})]),s(ut,{"label-width":"100px"},{default:o(()=>[s(ye,{label:t(e)("@NODECFG:选择命令"),required:""},{default:o(()=>[Q.value.length===0?(r(),v("div",_0,l(t(e)("@NODECFG:暂无可用命令请先创建命令")),1)):(r(),v("div",b0,[(r(!0),v(Ue,null,tt(Q.value,W=>(r(),v("div",{key:W.id,class:Xe(["command-item",{selected:n.value.commandId===W.id}]),onClick:Ve=>Ce(W)},[a("div",k0,[a("div",$0,[a("span",S0,l(W.name),1),W.description?(r(),v("span",D0,l(W.description),1)):I("",!0)]),a("code",F0,l(W.command),1),a("div",O0,[s(ae,null,{default:o(()=>[s(t(rs))]),_:1}),a("span",null,l(W.directory?W.directory.replace(/\\/g,"/"):t(e)("@NODECFG:当前目录")),1)])]),n.value.commandId===W.id?(r(),x(ae,{key:0,class:"check-icon"},{default:o(()=>[s(t(Is))]),_:1})):I("",!0)],10,w0))),128))]))]),_:1},8,["label"])]),_:1})])):I("",!0),((D=V.node)==null?void 0:D.type)==="wait"?(r(),v("div",N0,[a("div",T0,[s(ae,null,{default:o(()=>[s(t($a))]),_:1}),L(" "+l(t(e)("@NODECFG:等待配置")),1)]),s(ut,{"label-width":"100px"},{default:o(()=>[s(ye,{label:t(e)("@NODECFG:等待时间"),required:""},{default:o(()=>[s($e,{modelValue:n.value.waitSeconds,"onUpdate:modelValue":y[11]||(y[11]=W=>n.value.waitSeconds=W),min:1,max:3600,step:1},null,8,["modelValue"]),a("span",B0,l(t(e)("@NODECFG:秒")),1)]),_:1},8,["label"])]),_:1})])):I("",!0),((ee=V.node)==null?void 0:ee.type)==="code"?(r(),v("div",A0,[a("div",E0,[s(ae,null,{default:o(()=>[s(t(La))]),_:1}),L(" "+l(t(e)("@NODECFG:代码配置")),1)]),a("div",P0,[a("div",V0,[a("span",null,l(t(e)("@NODECFG:代码")),1)]),s(Fe,{modelValue:n.value.codeScript,"onUpdate:modelValue":y[12]||(y[12]=W=>n.value.codeScript=W),type:"textarea",rows:10,placeholder:ug},null,8,["modelValue"]),a("div",M0,[a("div",G0,l(t(e)("@NODECFG:示例代码")),1),a("div",I0,[(r(),v(Ue,null,tt(i,W=>s(me,{key:W.key,type:"primary",plain:"",onClick:Ve=>c(W.script)},{default:o(()=>[L(l(W.title),1)]),_:2},1032,["onClick"])),64))])])])])):I("",!0),((ke=V.node)==null?void 0:ke.type)==="version"?(r(),v("div",R0,[a("div",L0,[s(ae,null,{default:o(()=>[s(t(La))]),_:1}),L(" "+l(t(e)("@NODECFG:版本配置")),1)]),s(ut,{"label-width":"120px"},{default:o(()=>[s(ye,{label:t(e)("@NODECFG:package.json")},{default:o(()=>[s(Gh,{modelValue:n.value.packageJsonPath,"onUpdate:modelValue":y[13]||(y[13]=W=>n.value.packageJsonPath=W),placeholder:t(e)("@NODECFG:留空则使用当前目录的package.json"),clearable:"",onChange:J},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(ye,{label:t(e)("@NODECFG:修改目标"),required:""},{default:o(()=>[s(je,{modelValue:n.value.versionTarget,"onUpdate:modelValue":y[14]||(y[14]=W=>n.value.versionTarget=W)},{default:o(()=>[s(He,{value:"version"},{default:o(()=>[L(l(t(e)("@NODECFG:version字段")),1)]),_:1}),s(He,{value:"dependency"},{default:o(()=>[L(l(t(e)("@NODECFG:dependencies中的依赖")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),n.value.versionTarget==="version"?(r(),v(Ue,{key:0},[s(ye,{label:t(e)("@NODECFG:版本号来源"),required:""},{default:o(()=>[s(je,{modelValue:n.value.versionSource,"onUpdate:modelValue":y[15]||(y[15]=W=>n.value.versionSource=W),onChange:y[16]||(y[16]=W=>{var Ve,wt;W==="bump"?_e():W==="manual"?se({source:"manual",manualValue:((Ve=B(n.value.versionInputs))==null?void 0:Ve.manualValue)??""}):W==="reference"?se({source:"reference",ref:((wt=B(n.value.versionInputs))==null?void 0:wt.ref)||{nodeId:"",outputKey:"stdout"}}):W==="input"&&w()})},{default:o(()=>[s(He,{value:"bump"},{default:o(()=>[L(l(t(e)("@NODECFG:自动递增")),1)]),_:1}),s(He,{value:"manual"},{default:o(()=>[L(l(t(e)("@NODECFG:手动输入")),1)]),_:1}),s(He,{value:"reference",disabled:ne.value.length===0},{default:o(()=>[L(l(t(e)("@NODECFG:引用输出"))+" ",1),ne.value.length===0?(r(),x(Ft,{key:0,content:t(e)("@NODECFG:无可用的前置命令节点"),placement:"top"},{default:o(()=>[s(ae,{style:{"margin-left":"4px"}},{default:o(()=>[s(t(Ht))]),_:1})]),_:1},8,["content"])):I("",!0)]),_:1},8,["disabled"]),s(He,{value:"input",disabled:F.value.length===0},{default:o(()=>[L(l(t(e)("@NODECFG:引用输入")),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue"])]),_:1},8,["label"]),n.value.versionSource==="bump"?(r(),x(ye,{key:0,label:t(e)("@NODECFG:版本增量类型"),required:""},{default:o(()=>[s(je,{modelValue:n.value.versionBump,"onUpdate:modelValue":y[17]||(y[17]=W=>n.value.versionBump=W)},{default:o(()=>[s(He,{value:"patch"},{default:o(()=>[L(l(t(e)("@NODECFG:补丁版本x.x.+1")),1)]),_:1}),s(He,{value:"minor"},{default:o(()=>[L(l(t(e)("@NODECFG:次版本x.+1.0")),1)]),_:1}),s(He,{value:"major"},{default:o(()=>[L(l(t(e)("@NODECFG:主版本+1.0.0")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"])):I("",!0),n.value.versionSource==="manual"?(r(),x(ye,{key:1,label:t(e)("@NODECFG:版本号"),required:""},{default:o(()=>{var W;return[s(Fe,{"model-value":(W=B(n.value.versionInputs))==null?void 0:W.manualValue,placeholder:t(e)("@NODECFG:例如1.2.3"),"onUpdate:modelValue":y[18]||(y[18]=Ve=>se({source:"manual",manualValue:Ve}))},null,8,["model-value","placeholder"])]}),_:1},8,["label"])):I("",!0),n.value.versionSource==="reference"?(r(),v(Ue,{key:2},[s(ye,{label:t(e)("@NODECFG:引用节点"),required:""},{default:o(()=>[s(Bt,{"model-value":De(B(n.value.versionInputs)),data:ne.value.map(W=>({value:W.id,label:Ge(W),children:te(W).map(Ve=>({value:`${W.id}::${Ve.key}`,label:Ve.label}))})),placeholder:t(e)("@NODECFG:选择要引用的前置节点"),clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":y[19]||(y[19]=W=>ue(W))},null,8,["model-value","data","placeholder"])]),_:1},8,["label"]),s(ye,{label:t(e)("@NODECFG:提取版本号")},{default:o(()=>[s(Ne,{modelValue:n.value.extractVersionFromRefOutput,"onUpdate:modelValue":y[20]||(y[20]=W=>n.value.extractVersionFromRefOutput=W)},null,8,["modelValue"])]),_:1},8,["label"]),a("div",x0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),a("span",null,l(t(e)("@NODECFG:版本号将使用所选节点的输出结果")),1)])],64)):I("",!0),n.value.versionSource==="input"?(r(),v(Ue,{key:3},[s(ye,{label:t(e)("@NODECFG:引用输入"),required:""},{default:o(()=>[s(ht,{modelValue:n.value.versionInputKey,"onUpdate:modelValue":y[21]||(y[21]=W=>n.value.versionInputKey=W),filterable:"",clearable:"",style:{width:"100%"},placeholder:t(e)("@NODECFG:选择要引用的输入字段"),onChange:w},{default:o(()=>[(r(!0),v(Ue,null,tt(F.value,W=>(r(),x(Ae,{key:W,label:W,value:W},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),a("div",U0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),a("span",null,l(t(e)("@NODECFG:版本号将使用本节点输入参数的值")),1)])],64)):I("",!0)],64)):I("",!0),n.value.versionTarget==="dependency"?(r(),v(Ue,{key:1},[s(ye,{label:t(e)("@NODECFG:依赖类型"),required:""},{default:o(()=>[s(je,{modelValue:n.value.dependencyType,"onUpdate:modelValue":y[22]||(y[22]=W=>n.value.dependencyType=W)},{default:o(()=>[s(He,{value:"dependencies"},{default:o(()=>y[36]||(y[36]=[L("dependencies")])),_:1}),s(He,{value:"devDependencies"},{default:o(()=>y[37]||(y[37]=[L("devDependencies")])),_:1}),s(He,{value:"peerDependencies"},{default:o(()=>y[38]||(y[38]=[L("peerDependencies")])),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),s(ye,{label:t(e)("@NODECFG:依赖包名称"),required:""},{default:o(()=>[s(ht,{modelValue:n.value.dependencyName,"onUpdate:modelValue":y[23]||(y[23]=W=>n.value.dependencyName=W),placeholder:t(e)("@NODECFG:请先选择package.json"),clearable:"",filterable:"","allow-create":"",style:{width:"100%"}},{default:o(()=>[(r(!0),v(Ue,null,tt(ge.value,W=>(r(),x(Ae,{key:W,label:W,value:W},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),s(ye,{label:t(e)("@NODECFG:版本号来源"),required:""},{default:o(()=>[s(je,{modelValue:n.value.versionSource,"onUpdate:modelValue":y[24]||(y[24]=W=>n.value.versionSource=W),onChange:y[25]||(y[25]=W=>{W==="input"&&E()})},{default:o(()=>[s(He,{value:"bump"},{default:o(()=>[L(l(t(e)("@NODECFG:自动递增")),1)]),_:1}),s(He,{value:"manual"},{default:o(()=>[L(l(t(e)("@NODECFG:手动输入")),1)]),_:1}),s(He,{value:"reference",disabled:ne.value.length===0},{default:o(()=>[L(l(t(e)("@NODECFG:引用输出"))+" ",1),ne.value.length===0?(r(),x(Ft,{key:0,content:t(e)("@NODECFG:无可用的前置命令节点"),placement:"top"},{default:o(()=>[s(ae,{style:{"margin-left":"4px"}},{default:o(()=>[s(t(Ht))]),_:1})]),_:1},8,["content"])):I("",!0)]),_:1},8,["disabled"]),s(He,{value:"input",disabled:F.value.length===0},{default:o(()=>[L(l(t(e)("@NODECFG:引用输入")),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue"])]),_:1},8,["label"]),n.value.versionSource==="bump"?(r(),x(ye,{key:0,label:t(e)("@NODECFG:递增类型"),required:""},{default:o(()=>[s(je,{modelValue:n.value.dependencyVersionBump,"onUpdate:modelValue":y[26]||(y[26]=W=>n.value.dependencyVersionBump=W)},{default:o(()=>[s(He,{value:"patch"},{default:o(()=>[L(l(t(e)("@NODECFG:补丁版本")),1)]),_:1}),s(He,{value:"minor"},{default:o(()=>[L(l(t(e)("@NODECFG:次版本")),1)]),_:1}),s(He,{value:"major"},{default:o(()=>[L(l(t(e)("@NODECFG:主版本")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"])):I("",!0),n.value.versionSource==="manual"?(r(),x(ye,{key:1,label:t(e)("@NODECFG:版本号"),required:""},{default:o(()=>[s(Fe,{modelValue:n.value.dependencyVersion,"onUpdate:modelValue":y[27]||(y[27]=W=>n.value.dependencyVersion=W),placeholder:t(e)("@NODECFG:例如1.2.3")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])):I("",!0),n.value.versionSource==="reference"?(r(),v(Ue,{key:2},[s(ye,{label:t(e)("@NODECFG:引用节点"),required:""},{default:o(()=>[s(ht,{modelValue:n.value.inputRef,"onUpdate:modelValue":y[28]||(y[28]=W=>n.value.inputRef=W),"value-key":"nodeId",placeholder:t(e)("@NODECFG:选择要引用的前置节点"),style:{width:"100%"}},{default:o(()=>[(r(!0),v(Ue,null,tt(ne.value,W=>(r(),x(Ae,{key:W.id,label:Ge(W),value:{nodeId:W.id,outputKey:"stdout"}},{default:o(()=>[a("div",z0,[a("span",H0,l(Ge(W)),1),a("span",W0,l(t(e)("@NODECFG:ID"))+": "+l(W.id.substring(0,15))+"...",1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),n.value.inputRef?(r(),x(ye,{key:0,label:t(e)("@NODECFG:输出字段"),required:""},{default:o(()=>[s(ht,{modelValue:n.value.inputRef.outputKey,"onUpdate:modelValue":y[29]||(y[29]=W=>n.value.inputRef.outputKey=W),placeholder:t(e)("@NODECFG:选择要引用的输出字段"),style:{width:"100%"}},{default:o(()=>[(r(!0),v(Ue,null,tt(te(ne.value.find(W=>{var Ve;return W.id===((Ve=n.value.inputRef)==null?void 0:Ve.nodeId)})),W=>(r(),x(Ae,{key:W.key,label:W.label,value:W.key},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"])):I("",!0),n.value.inputRef?(r(),x(ye,{key:1,label:t(e)("@NODECFG:提取版本号")},{default:o(()=>[s(Ne,{modelValue:n.value.extractVersionFromRefOutput,"onUpdate:modelValue":y[30]||(y[30]=W=>n.value.extractVersionFromRefOutput=W)},null,8,["modelValue"])]),_:1},8,["label"])):I("",!0),a("div",j0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),a("span",null,l(t(e)("@NODECFG:版本号将使用所选节点的输出结果")),1)])],64)):I("",!0),n.value.versionSource==="input"?(r(),v(Ue,{key:3},[s(ye,{label:t(e)("@NODECFG:引用输入"),required:""},{default:o(()=>[s(ht,{modelValue:n.value.dependencyVersionInputKey,"onUpdate:modelValue":y[31]||(y[31]=W=>n.value.dependencyVersionInputKey=W),filterable:"",clearable:"",style:{width:"100%"},placeholder:t(e)("@NODECFG:选择要引用的输入字段"),onChange:E},{default:o(()=>[(r(!0),v(Ue,null,tt(F.value,W=>(r(),x(Ae,{key:W,label:W,value:W},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),a("div",q0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),a("span",null,l(t(e)("@NODECFG:版本号将使用本节点输入参数的值")),1)])],64)):I("",!0)],64)):I("",!0)]),_:1})])):I("",!0),((K=V.node)==null?void 0:K.type)==="code"?(r(),v("div",J0,[a("div",K0,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),L(" "+l(t(e)("@NODECFG:输出"))+" ",1),s(me,{type:"primary",plain:"",icon:t(as),style:{"margin-left":"auto"},onClick:q},null,8,["icon"])]),s(Ts,{"model-value":n.value.codeOutputParams||[],title:void 0,addable:!1,removable:!0,"min-items":0,"create-item":G,"onUpdate:modelValue":y[32]||(y[32]=W=>n.value.codeOutputParams=W)},{empty:o(()=>[L(l(t(e)("@NODECFG:暂无输出参数")||""),1)]),row:o(({item:W})=>[a("div",Y0,[a("div",Q0,[a("label",Z0,l(t(e)("@NODECFG:参数名")),1),s(Fe,{modelValue:W.key,"onUpdate:modelValue":Ve=>W.key=Ve,placeholder:t(e)("@NODECFG:参数名")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),a("div",X0,[a("label",eg,l(t(e)("@NODECFG:参数类型")),1),s(ht,{modelValue:W.type,"onUpdate:modelValue":Ve=>W.type=Ve,style:{width:"180px"}},{default:o(()=>[s(Ae,{label:"String",value:"String"}),s(Ae,{label:"Number",value:"Number"}),s(Ae,{label:"Boolean",value:"Boolean"}),s(Ae,{label:"JSON",value:"JSON"})]),_:2},1032,["modelValue","onUpdate:modelValue"])])])]),_:1},8,["model-value"])])):I("",!0),((oe=V.node)==null?void 0:oe.type)==="command"?(r(),v("div",tg,[a("div",sg,[s(ae,null,{default:o(()=>[s(t(Ht))]),_:1}),L(" "+l(t(e)("@NODECFG:输出配置")),1)]),s(Ts,{"model-value":n.value.commandOutputParams||[],title:void 0,addable:!1,removable:!1,"onUpdate:modelValue":y[33]||(y[33]=W=>n.value.commandOutputParams=W)},{empty:o(()=>[L(l(t(e)("@NODECFG:暂无输出参数")||""),1)]),row:o(({item:W})=>[a("div",ag,[a("div",og,[a("label",ng,l(t(e)("@NODECFG:参数名")),1),s(Fe,{modelValue:W.key,"onUpdate:modelValue":Ve=>W.key=Ve,disabled:""},null,8,["modelValue","onUpdate:modelValue"])]),a("div",lg,[a("label",ig,l(t(e)("@NODECFG:参数描述")),1),s(Fe,{modelValue:W.desc,"onUpdate:modelValue":Ve=>W.desc=Ve,placeholder:t(e)("@NODECFG:参数描述")},null,8,["modelValue","onUpdate:modelValue","placeholder"])])])]),_:1},8,["model-value"])])):I("",!0)])):I("",!0)]}),_:1},8,["modelValue","title"])}}}),pg=Je(dg,[["__scopeId","data-v-f78b2fd8"]]),fg={class:"flow-workspace-container"},mg={class:"left-sidebar"},vg={class:"sidebar-header"},hg={class:"orchestration-list"},gg=["onClick"],yg={class:"item-content"},Cg={key:0,class:"description"},_g={class:"item-actions"},bg={class:"flow-canvas"},wg={class:"canvas-header"},kg={class:"flow-header-info"},$g={class:"header-actions"},Sg={class:"right-sidebar"},Dg={class:"sidebar-header"},Fg={class:"node-toolbox"},Og={class:"tool-label"},Ng={class:"tool-desc"},Tg={class:"tool-label"},Bg={class:"tool-desc"},Ag={class:"tool-label"},Eg={class:"tool-desc"},Pg={class:"tool-label"},Vg={class:"tool-desc"},Mg={class:"tool-label"},Gg={class:"tool-desc"},Ig={class:"tool-label"},Rg={class:"tool-desc"},Lg={class:"tool-label"},xg={class:"tool-desc"},Ug=ze({__name:"FlowOrchestrationWorkspace",props:{visible:{type:Boolean}},emits:["update:visible","execute-flow","open-command-manager"],setup(j,{emit:k}){const i=Symbol("FLOW_NODE_ACTIONS");function c($){switch($){case"command":return"📋";case"wait":return"⏰";case"version":return"📦";case"confirm":return"✋";case"code":return"🧩";case"start":return"🚀";case"condition":return"🔀";case"user_input":return"⌨️";default:return""}}function f($){return ze({name:"FlowWrappedNode",props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(N){const Z=yn(i,null),Se=ie(()=>{var D;const Pe=(D=N.data)==null?void 0:D.config,g=[...Array.isArray(Pe==null?void 0:Pe.conditionBranches)?Pe.conditionBranches:[]].sort((ee,ke)=>{const K=(ee==null?void 0:ee.handleId)==="default"||(ee==null?void 0:ee.isDefault),oe=(ke==null?void 0:ke.handleId)==="default"||(ke==null?void 0:ke.isDefault);return K&&!oe?1:!K&&oe?-1:Number((ee==null?void 0:ee.priority)??0)-Number((ke==null?void 0:ke.priority)??0)}).map(ee=>String((ee==null?void 0:ee.handleId)||"").trim()).filter(ee=>!!ee);return g.includes("default")||g.push("default"),g.length?g:["default"]});return()=>Ye(Oh,{nodeId:N.id,onExecuteFromNode:Pe=>Z==null?void 0:Z.executeFromNode(Pe),onExecuteSingleNode:Pe=>Z==null?void 0:Z.executeSingleNode(Pe)},{default:()=>{var Pe,xe,de,g,D,ee;return Ye(ea,{id:N.id,nodeId:N.id,nodeType:(Pe=N.data)==null?void 0:Pe.type,title:(xe=N.data)==null?void 0:xe.label,icon:c((de=N.data)==null?void 0:de.type),enabled:((g=N.data)==null?void 0:g.enabled)??!0,selected:((D=N.data)==null?void 0:D.selected)??!1,sourceHandleIds:((ee=N.data)==null?void 0:ee.type)==="condition"?Se.value:void 0,onDelete:ke=>Z==null?void 0:Z.deleteNode(ke)},{default:()=>Ye($,{data:N.data,id:N.id})})}})}})}const p=ze({name:"FlowStartNodeRenderer",props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup($){return()=>{var N,Z;return Ye(ea,{id:$.id,nodeId:$.id,nodeType:"start",title:e("@FLOWNODE:开始"),icon:c("start"),enabled:(N=$.data)==null?void 0:N.enabled,selected:(Z=$.data)==null?void 0:Z.selected,deletable:!1},{})}}}),h={start:Wt(p),command:Wt(f(Ro)),wait:Wt(f(Lo)),version:Wt(f(xo)),confirm:Wt(f(Uo)),code:Wt(f(zo)),condition:Wt(f(Ho)),user_input:Wt(f(Wo))},C=j,m=k,{t:S}=oa(),M=Ut(),b=ie({get:()=>C.visible,set:$=>m("update:visible",$)}),{onConnect:P,addEdges:n,getViewport:d,setViewport:F,onNodeDragStart:w,onNodeDragStop:E,getSelectedEdges:H,updateNodeInternals:z}=go(),A=_([]),O=_([]),Y=_(""),ce=_(""),X=_(null),T=_(!1),B=_(null);let se=null;const _e=ie(()=>M.orchestrations||[]),De=_(null);let ue=1;function be($){return`${$}-${Date.now()}-${ue++}`}function G($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function q($){const N=String($||"").trim()||S("@ORCH:未命名"),Z=new Set((Array.isArray(_e.value)?_e.value:[]).map(xe=>String((xe==null?void 0:xe.name)||"").trim())),Se=`${N}(复制)`;if(!Z.has(Se))return Se;let Pe=2;for(;Pe<1e3;){const xe=`${N}(复制${Pe})`;if(!Z.has(xe))return xe;Pe+=1}return`${N}(复制${Date.now()})`}async function ge($){try{const Z={name:q($==null?void 0:$.name),description:($==null?void 0:$.description)||"",flowData:$!=null&&$.flowData?JSON.parse(JSON.stringify($.flowData)):null},Se=await M.saveOrchestration(Z);Se&&typeof Se=="object"&&"id"in Se&&(De.value=Se.id,X.value=Se.id,ht(Se),u.success(S("@ORCH:已复制")))}catch(N){u.error(`${S("@ORCH:错误")}: ${(N==null?void 0:N.message)||N}`)}}function Q(){return A.value.filter($=>{var N;return $.type!=="start"&&((N=$.data)==null?void 0:N.config)})}function re($){return $==="version"?{w:250,h:120}:$==="wait"||$==="confirm"||$==="user_input"?{w:200,h:120}:$==="condition"?{w:260,h:160}:{w:220,h:120}}function ne($){const N=d(),Z=document.querySelector(".vue-flow-container"),Se=Z==null?void 0:Z.getBoundingClientRect(),Pe=Se?Se.width/2:500,xe=Se?Se.height/2:300,de=N.zoom||1,g=(Pe-N.x)/de,D=(xe-N.y)/de,{w:ee,h:ke}=re($);return{x:g-ee/2,y:D-ke/2}}function te($,N){const Se=A.value.filter(g=>g.type===$).map(g=>{var D;return String(((D=g==null?void 0:g.data)==null?void 0:D.label)||"").trim()}).filter(g=>!!g),Pe=String(N||"").trim();if(!Pe)return Pe;const xe=new RegExp(`^${G(Pe)}(\\d+)?$`);let de=-1;for(const g of Se){const D=g.match(xe);if(!D)continue;const ee=D[1]?Number(D[1]):0;Number.isFinite(ee)&&(de=Math.max(de,ee))}return de<0?Pe:`${Pe}${de+1}`}function Ge($){return $.map(N=>({id:N.id,type:N.type,position:N.position,data:N.data}))}function fe($){return $.map(N=>({id:N.id,source:N.source,target:N.target,sourceHandle:N.sourceHandle,targetHandle:N.targetHandle}))}async function We($){await gs();const N=$&&$.length?$:A.value.map(Z=>Z.id);requestAnimationFrame(()=>{z(N)})}function J(){X.value&&Y.value.trim()&&(se&&clearTimeout(se),se=window.setTimeout(()=>{$e()},1e3))}function Ce(){A.value=[{id:"start-node",type:"start",position:{x:50,y:200},data:{id:"start-node",type:"start",label:S("@FLOWNODE:开始"),enabled:!0}}],O.value=[],ue=1}function Oe($){const N=be($),Se={command:S("@FLOWNODE:命令节点"),wait:S("@FLOWNODE:等待节点"),version:S("@FLOWNODE:版本管理"),confirm:S("@FLOWNODE:用户确认"),code:S("@FLOWNODE:代码节点"),condition:S("@FLOWNODE:条件"),user_input:S("@FLOWNODE:用户输入")}[$],Pe=te($,Se),xe=ne($),de={id:N,type:$,position:{x:xe.x,y:xe.y},data:{id:N,type:$,label:Pe,enabled:!0,config:$==="confirm"?{id:N,type:"confirm"}:$==="condition"?{id:N,type:"condition",conditionBranches:[{id:`branch-${Date.now()}`,name:e("@COND:默认分支"),handleId:"default",priority:999,combine:"all",rules:[],isDefault:!0}]}:$==="user_input"?{id:N,type:"user_input",userInputParams:[]}:void 0}};A.value.push(de),A.value.forEach(g=>{g.data&&(g.data.selected=!1)}),de.data&&(de.data.selected=!0),B.value=de,T.value=!1,u.success(`${S("@FLOWNODE:已添加")}${de.data.label}`),J()}P($=>{n([$]),J()}),w($=>{A.value.forEach(Z=>{Z.data&&(Z.data.selected=!1)});const N=A.value.find(Z=>Z.id===$.node.id);N&&N.data&&(N.data.selected=!0)}),E(()=>{J()});function lt($){A.value.forEach(Z=>{Z.data&&(Z.data.selected=!1)});const N=A.value.find(Z=>Z.id===$.node.id);N&&(N.data.selected=!0,N.type!=="start"&&(B.value=N,T.value=!0)),We([$.node.id])}function V(){A.value.forEach($=>{$.data&&($.data.selected=!1)}),We()}function y($,N){const Z=A.value.find(Se=>Se.id===$);Z&&(Z.data.config=N,Z.data.label=ae(N),J())}function ae($){return $.displayName&&String($.displayName).trim()?String($.displayName).trim():$.type==="command"?$.commandName||S("@FLOWNODE:未知命令"):$.type==="wait"?S("@FLOWNODE:等待 {seconds} 秒",{seconds:$.waitSeconds}):$.type==="version"?$.versionTarget==="dependency"?S("@FLOWNODE:修改依赖: {name}",{name:$.dependencyName}):S("@FLOWNODE:版本号 +1 ({bump})",{bump:$.versionBump}):$.type==="confirm"?S("@FLOWNODE:用户确认"):$.type==="user_input"?S("@FLOWNODE:用户输入"):$.type==="code"?S("@FLOWNODE:代码节点"):S("@FLOWNODE:未配置")}function Fe($){var N;if(console.log("nodeId ==>",$),$==="start-node"){u.warning(S("@FLOWNODE:不能删除起始节点"));return}console.log("nodes ==>",A),A.value=A.value.filter(Z=>Z.id!==$),O.value=O.value.filter(Z=>Z.source!==$&&Z.target!==$),((N=B.value)==null?void 0:N.id)===$&&(B.value=null,T.value=!1),u.success(S("@FLOWNODE:节点已删除")),J()}function ye($){for(const N of $)N.type==="remove"&&(O.value=O.value.filter(Z=>Z.id!==N.id));J()}function Ne($){if($.key==="Delete"||$.key==="Backspace"){const N=H.value;if(N&&N.length>0){const Z=N.map(Se=>Se.id);O.value=O.value.filter(Se=>!Z.includes(Se.id)),J(),$.preventDefault()}}}function ut(){Dt.confirm("确定要清空整个流程吗?","确认清空",{confirmButtonText:"清空",cancelButtonText:"取消",type:"warning"}).then(()=>{Ce(),u.success("流程已清空"),J()}).catch(()=>{})}async function me(){if(A.value.length<=1){u.info("节点太少,无需优化布局");return}await We(),await new Promise(N=>requestAnimationFrame(()=>N()));const $=new xa.graphlib.Graph;$.setDefaultEdgeLabel(()=>({})),$.setGraph({rankdir:"LR",nodesep:80,ranksep:80,marginx:50,marginy:50}),A.value.forEach(N=>{let Z=220,Se=100;N.type==="start"?(Z=100,Se=100):N.type==="wait"||N.type==="confirm"?(Z=200,Se=120):N.type==="version"&&(Z=250,Se=120);const Pe=document.querySelector(`.vue-flow__node[data-id="${N.id}"]`);if(Pe){const xe=Pe.offsetWidth,de=Pe.offsetHeight;xe>0&&de>0&&(Z=xe,Se=de)}$.setNode(N.id,{width:Z,height:Se})}),O.value.forEach(N=>{$.setEdge(N.source,N.target)}),xa.layout($),A.value.forEach(N=>{const Z=$.node(N.id);Z&&(N.position={x:Z.x-Z.width/2,y:Z.y-Z.height/2})}),u.success("布局优化完成(dagre)"),J()}async function $e(){if(!Y.value.trim()){u.warning("请输入编排名称");return}const $=A.value.filter(Pe=>Pe.type!=="start"&&!Pe.data.config);if($.length>0){const Pe=$.map(xe=>xe.data.label).join("、");u.warning(`以下节点还未配置:${Pe}。未配置的节点不会被保存。`)}if(Q().length===0){u.warning("请至少添加一个执行步骤");return}const Z=d(),Se={name:Y.value.trim(),description:ce.value.trim(),flowData:{nodes:Ge(A.value),edges:fe(O.value),viewport:{x:Z.x,y:Z.y,zoom:Z.zoom}}};if(X.value)await M.updateOrchestration(X.value,Se);else{const Pe=await M.saveOrchestration(Se);u.success("编排已保存"),Pe&&typeof Pe=="object"&&"id"in Pe&&(De.value=Pe.id,X.value=Pe.id)}}function He(){if(Q().length===0){u.warning("请至少添加一个执行步骤");return}b.value=!1;const $=d(),N=A.value.find(Z=>Z.type==="start");m("execute-flow",{flowData:{nodes:JSON.parse(JSON.stringify(A.value)),edges:JSON.parse(JSON.stringify(O.value)),viewport:{x:$.x,y:$.y,zoom:$.zoom}},startNodeId:N==null?void 0:N.id,isSingleExecution:!1,orchestrationMeta:{id:X.value||void 0,name:Y.value||void 0}})}function je($){const N=A.value.find(Se=>Se.id===$);if(!N||N.type==="start"||!N.data.config){u.warning("该节点无法执行");return}b.value=!1;const Z=d();m("execute-flow",{flowData:{nodes:JSON.parse(JSON.stringify(A.value)),edges:JSON.parse(JSON.stringify(O.value)),viewport:{x:Z.x,y:Z.y,zoom:Z.zoom}},startNodeId:$,isSingleExecution:!1,orchestrationMeta:{id:X.value||void 0,name:Y.value||void 0}})}function Ae($){const N=A.value.find(Se=>Se.id===$);if(!N||N.type==="start"||!N.data.config){u.warning("该节点无法执行");return}b.value=!1;const Z=d();m("execute-flow",{flowData:{nodes:JSON.parse(JSON.stringify(A.value)),edges:JSON.parse(JSON.stringify(O.value)),viewport:{x:Z.x,y:Z.y,zoom:Z.zoom}},startNodeId:$,isSingleExecution:!0,orchestrationMeta:{id:X.value||void 0,name:Y.value||void 0}})}Cn(i,{deleteNode:Fe,executeFromNode:je,executeSingleNode:Ae});function ht($){De.value=$.id,X.value=$.id,Y.value=$.name,ce.value=$.description||"",$.flowData?(A.value=JSON.parse(JSON.stringify($.flowData.nodes)),O.value=JSON.parse(JSON.stringify($.flowData.edges)),We(),$.flowData.viewport&&setTimeout(()=>{F($.flowData.viewport)},100)):Ce()}function Pt(){De.value=null,X.value=null,Y.value="",ce.value="",Ce()}async function Ft($){try{await Dt.confirm(`确定要删除编排 "${$.name}" 吗?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}),await M.deleteOrchestration($.id),X.value===$.id&&Pt()}catch(N){N!=="cancel"&&u.error(`删除编排失败: ${N.message||N}`)}}function Bt($){if(b.value=!1,$!=null&&$.flowData){const N=Array.isArray($.flowData.nodes)?$.flowData.nodes.find(Z=>(Z==null?void 0:Z.type)==="start"):void 0;m("execute-flow",{flowData:$.flowData,startNodeId:N==null?void 0:N.id,isSingleExecution:!1,orchestrationMeta:{id:$==null?void 0:$.id,name:$==null?void 0:$.name}});return}u.warning("该编排缺少流程数据,无法执行")}return ts(()=>{Ce(),window.addEventListener("keydown",Ne),We()}),Hs(()=>{window.removeEventListener("keydown",Ne)}),($,N)=>{const Z=st,Se=Qt,Pe=Et;return r(),x(Gt,{modelValue:b.value,"onUpdate:modelValue":N[13]||(N[13]=xe=>b.value=xe),title:t(S)("@ORCH:可视化编排工作台"),"close-on-click-modal":!1,"append-to-body":!0,size:"fullscreen",type:"flex",heightMode:"fixed","custom-class":"flow-orchestration-dialog"},{default:o(()=>[a("div",fg,[a("div",mg,[a("div",vg,[a("h3",null,l(t(S)("@ORCH:已保存的编排")),1),s(nt,{tooltip:t(S)("@ORCH:新建编排"),size:"small","hover-color":"var(--color-primary)",onClick:Pt},{default:o(()=>[s(Z,null,{default:o(()=>[s(t(as))]),_:1})]),_:1},8,["tooltip"])]),a("div",hg,[_e.value.length===0?(r(),x(Se,{key:0,description:t(S)("@ORCH:暂无编排"),"image-size":80},null,8,["description"])):I("",!0),(r(!0),v(Ue,null,tt(_e.value,xe=>(r(),v("div",{key:xe.id,class:Xe(["orchestration-item",{active:De.value===xe.id}]),onClick:de=>ht(xe)},[a("div",yg,[a("h4",null,l(xe.name),1),xe.description?(r(),v("p",Cg,l(xe.description),1)):I("",!0),a("div",_g,[s(nt,{tooltip:t(S)("@ORCH:执行"),size:"small","hover-color":"var(--color-primary)",onClick:qt(de=>Bt(xe),["stop"])},{default:o(()=>[s(Z,null,{default:o(()=>[s(t(ps))]),_:1})]),_:2},1032,["tooltip","onClick"]),s(nt,{tooltip:t(S)("@ORCH:复制"),size:"small","hover-color":"var(--color-primary)",onClick:qt(de=>ge(xe),["stop"])},{default:o(()=>[s(Z,null,{default:o(()=>[s(t(ys))]),_:1})]),_:2},1032,["tooltip","onClick"]),s(nt,{tooltip:t(S)("@ORCH:删除"),size:"small","hover-color":"var(--color-danger)",onClick:qt(de=>Ft(xe),["stop"])},{default:o(()=>[s(Z,null,{default:o(()=>[s(t(Zt))]),_:1})]),_:2},1032,["tooltip","onClick"])])])],10,gg))),128))])]),a("div",bg,[a("div",wg,[a("div",kg,[s(Pe,{modelValue:Y.value,"onUpdate:modelValue":N[0]||(N[0]=xe=>Y.value=xe),placeholder:t(S)("@ORCH:编排名称(必填)"),size:"large",style:{width:"300px","margin-right":"10px"}},null,8,["modelValue","placeholder"]),s(Pe,{modelValue:ce.value,"onUpdate:modelValue":N[1]||(N[1]=xe=>ce.value=xe),placeholder:t(S)("@ORCH:编排描述(选填)"),size:"large",style:{width:"400px"}},null,8,["modelValue","placeholder"])]),a("div",$g,[s(nt,{tooltip:t(S)("@ORCH:保存编排"),size:"large","hover-color":"var(--color-success)",onClick:$e},{default:o(()=>[s(Z,null,{default:o(()=>[s(t(Is))]),_:1})]),_:1},8,["tooltip"]),s(nt,{tooltip:"执行流程",size:"large","hover-color":"var(--color-primary)",onClick:He},{default:o(()=>[s(Z,null,{default:o(()=>[s(t(ps))]),_:1})]),_:1}),s(nt,{tooltip:"清空流程",size:"large","hover-color":"var(--color-danger)",onClick:ut},{default:o(()=>[s(Z,null,{default:o(()=>[s(t(Zt))]),_:1})]),_:1})])]),s(t(yo),{nodes:A.value,"onUpdate:nodes":N[2]||(N[2]=xe=>A.value=xe),edges:O.value,"onUpdate:edges":N[3]||(N[3]=xe=>O.value=xe),class:"vue-flow-container","default-zoom":1,"min-zoom":.2,"max-zoom":4,"node-types":h,onNodeClick:lt,onPaneClick:V,onEdgesChange:ye},{default:o(()=>[s(t(Co),{"pattern-color":"#aaa",gap:16}),s(t(_o),{showInteractive:!1},{default:o(()=>[a("button",{class:"vue-flow__controls-button",onClick:me,title:"优化布局"},[s(Z,null,{default:o(()=>[s(t(gn))]),_:1})])]),_:1})]),_:1},8,["nodes","edges"])]),a("div",Sg,[a("div",Dg,[a("h3",null,l(t(S)("@ORCH:节点工具箱")),1)]),a("div",Fg,[a("div",{class:"tool-item",onClick:N[4]||(N[4]=xe=>Oe("command"))},[N[14]||(N[14]=a("div",{class:"tool-icon command"},"📋",-1)),a("div",Og,l(t(S)("@ORCH:命令节点")),1),a("div",Ng,l(t(S)("@ORCH:执行自定义命令")),1)]),a("div",{class:"tool-item",onClick:N[5]||(N[5]=xe=>Oe("wait"))},[N[15]||(N[15]=a("div",{class:"tool-icon wait"},"⏰",-1)),a("div",Tg,l(t(S)("@ORCH:等待节点")),1),a("div",Bg,l(t(S)("@ORCH:暂停指定时间")),1)]),a("div",{class:"tool-item",onClick:N[6]||(N[6]=xe=>Oe("version"))},[N[16]||(N[16]=a("div",{class:"tool-icon version"},"📦",-1)),a("div",Ag,l(t(S)("@ORCH:版本管理")),1),a("div",Eg,l(t(S)("@ORCH:修改版本号或依赖")),1)]),a("div",{class:"tool-item",onClick:N[7]||(N[7]=xe=>Oe("condition"))},[N[17]||(N[17]=a("div",{class:"tool-icon condition"},"🔀",-1)),a("div",Pg,l(t(S)("@FLOWNODE:条件")),1),a("div",Vg,l(t(S)("@ORCH:条件分支")),1)]),a("div",{class:"tool-item",onClick:N[8]||(N[8]=xe=>Oe("code"))},[N[18]||(N[18]=a("div",{class:"tool-icon code"},"🧩",-1)),a("div",Mg,l(t(S)("@FLOWNODE:代码节点")),1),a("div",Gg,l(t(S)("@ORCH:执行自定义代码")),1)]),a("div",{class:"tool-item",onClick:N[9]||(N[9]=xe=>Oe("confirm"))},[N[19]||(N[19]=a("div",{class:"tool-icon confirm"},"✋",-1)),a("div",Ig,l(t(S)("@ORCH:用户确认")),1),a("div",Rg,l(t(S)("@ORCH:等待用户确认后继续")),1)]),a("div",{class:"tool-item",onClick:N[10]||(N[10]=xe=>Oe("user_input"))},[N[20]||(N[20]=a("div",{class:"tool-icon confirm"},"⌨️",-1)),a("div",Lg,l(t(S)("@FLOWNODE:用户输入")),1),a("div",xg,l(t(S)("@UINPUT:执行到该节点暂停并等待输入")),1)])])])]),s(pg,{modelValue:T.value,"onUpdate:modelValue":N[11]||(N[11]=xe=>T.value=xe),node:B.value,"all-nodes":A.value,edges:O.value,onUpdateConfig:y,onOpenCommandManager:N[12]||(N[12]=()=>m("open-command-manager"))},null,8,["modelValue","node","all-nodes","edges"])]),_:1},8,["modelValue","title"])}}}),zg=Je(Ug,[["__scopeId","data-v-637cc142"]]),Hg={class:"flow-exec-viewer"},Ys="flow-execution-viewer",Wg=ze({__name:"FlowExecutionViewer",props:{flowData:{type:Object,required:!0},currentNodeId:{type:String,default:void 0},executedNodeIds:{type:Array,default:()=>[]},failedNodeIds:{type:Array,default:()=>[]},executedEdgeIds:{type:Array,default:()=>[]}},setup(j){function k(n){switch(n){case"command":return"📋";case"wait":return"⏰";case"version":return"📦";case"confirm":return"✋";case"code":return"🧩";case"start":return"🚀";case"condition":return"🔀";case"user_input":return"⌨️";default:return""}}const i=ze({name:"FlowExecStartNodeRenderer",props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(n){return()=>{var d,F,w;return Ye(ea,{id:n.id,nodeId:n.id,nodeType:"start",title:e("@FLOWNODE:开始"),icon:k("start"),enabled:(d=n.data)==null?void 0:d.enabled,selected:(F=n.data)==null?void 0:F.selected,execStatus:(w=n.data)==null?void 0:w.execStatus,deletable:!1},{})}}});function c(n){return ze({name:"FlowExecWrappedNode",props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(d){const F=ie(()=>{var A;const w=(A=d.data)==null?void 0:A.config,z=[...Array.isArray(w==null?void 0:w.conditionBranches)?w.conditionBranches:[]].sort((O,Y)=>{const ce=(O==null?void 0:O.handleId)==="default"||(O==null?void 0:O.isDefault),X=(Y==null?void 0:Y.handleId)==="default"||(Y==null?void 0:Y.isDefault);return ce&&!X?1:!ce&&X?-1:Number((O==null?void 0:O.priority)??0)-Number((Y==null?void 0:Y.priority)??0)}).map(O=>String((O==null?void 0:O.handleId)||"").trim()).filter(O=>!!O);return z.includes("default")||z.push("default"),z.length?z:["default"]});return()=>{var w,E,H,z,A,O,Y;return Ye(ea,{id:d.id,nodeId:d.id,nodeType:(w=d.data)==null?void 0:w.type,title:(E=d.data)==null?void 0:E.label,icon:k((H=d.data)==null?void 0:H.type),enabled:(z=d.data)==null?void 0:z.enabled,selected:(A=d.data)==null?void 0:A.selected,execStatus:(O=d.data)==null?void 0:O.execStatus,sourceHandleIds:((Y=d.data)==null?void 0:Y.type)==="condition"?F.value:void 0,deletable:!1},{default:()=>Ye(n,{data:d.data,id:d.id})})}}})}const f={start:Wt(i),command:Wt(c(Ro)),wait:Wt(c(Lo)),version:Wt(c(xo)),confirm:Wt(c(Uo)),code:Wt(c(zo)),condition:Wt(c(Ho)),user_input:Wt(c(Wo))},p=j,{onPaneReady:h}=go({id:Ys});let C=null,m=null;async function S(n){if(n){if(!C){m=n;return}for(let d=0;d<6;d+=1){if(await gs(),await new Promise(w=>requestAnimationFrame(()=>w())),!(typeof(C==null?void 0:C.findNode)=="function"?C.findNode(n):null)){await new Promise(w=>window.setTimeout(()=>w(),60));continue}try{await C.fitView({nodes:[n],padding:.35,includeHiddenNodes:!0,minZoom:.35,maxZoom:1.2,duration:200})}catch{}break}}}h(n=>{C=n,console.log("[FlowExecutionViewer] onPaneReady, flowId=",Ys),console.log("[FlowExecutionViewer] instance keys=",Object.keys(n||{}));try{C.fitView({padding:.2,includeHiddenNodes:!0,duration:0})}catch{}const d=(p.currentNodeId||m||"").trim();d&&(m=null,S(d))});let M=null;Ze(()=>p.currentNodeId,async n=>{n&&(M&&(window.clearTimeout(M),M=null),M=window.setTimeout(async()=>{if(console.log("[FlowExecutionViewer] focus request, flowId=",Ys,"nodeId=",n),!C){m=n,console.log("[FlowExecutionViewer] flowInstance not ready, pendingFocusNodeId=",m);return}S(n)},150))}),Hs(()=>{M&&(window.clearTimeout(M),M=null)});const b=ie(()=>{var E;const n=Array.isArray((E=p.flowData)==null?void 0:E.nodes)?p.flowData.nodes:[],d=new Set(p.executedNodeIds),F=new Set(p.failedNodeIds),w=p.currentNodeId;return n.map(H=>{let z;w&&H.id===w?z="running":F.has(H.id)?z="failed":d.has(H.id)&&(z="success");const A=[];return d.has(H.id)&&A.push("exec-node-done"),{...H,data:{...H.data,execStatus:z},class:A.join(" ")}})}),P=ie(()=>{var F;const n=Array.isArray((F=p.flowData)==null?void 0:F.edges)?p.flowData.edges:[],d=new Set(p.executedEdgeIds);return n.map(w=>{const E=[];return d.has(w.id)&&E.push("exec-edge-done"),{...w,class:E.join(" ")}})});return(n,d)=>(r(),v("div",Hg,[s(t(yo),{id:Ys,nodes:b.value,edges:P.value,"node-types":f,"nodes-draggable":!1,"nodes-connectable":!1,"elements-selectable":!1,"zoom-on-scroll":!0,"zoom-on-double-click":!1,"pan-on-drag":!0,"min-zoom":.2,"max-zoom":1.5},{default:o(()=>[s(t(Co)),s(t(_o))]),_:1},8,["nodes","edges"])]))}}),jg=Je(Wg,[["__scopeId","data-v-bd01a956"]]),qg={class:"console-header"},Jg={class:"header-left"},Kg={class:"console-title"},Yg={class:"header-actions"},Qg={key:0,class:"execution-controls"},Zg={class:"console-content"},Xg={class:"termial-session"},e8={key:0,class:"terminal-sessions-panel"},t8={class:"terminal-sessions-header"},s8={class:"terminal-sessions-title"},a8={class:"terminal-sessions-count"},o8={class:"terminal-sessions-actions"},n8={class:"terminal-sessions-body"},l8={key:0,class:"terminal-sessions-empty"},i8={key:1,class:"terminal-sessions-list"},r8={class:"terminal-session-main"},c8=["title"],u8={class:"terminal-session-pid"},d8={class:"terminal-session-meta"},p8={class:"terminal-session-dir"},f8={class:"terminal-session-actions"},m8={key:1,class:"terminal-sessions-collapsed"},v8={class:"console-content-main"},h8={key:0,class:"orchestration-flow-panel"},g8={class:"flow-panel-header"},y8={class:"flow-panel-title"},C8={key:1,class:"orchestration-steps-panel"},_8={class:"steps-header"},b8={class:"steps-title"},w8={key:0,class:"steps-orchestration"},k8={key:0,class:"steps-list"},$8={class:"step-indicator"},S8={key:4,class:"step-number"},D8={class:"step-content"},F8={class:"step-header"},O8={key:0,class:"step-terminal-tag",title:"终端执行"},N8={key:1,class:"step-disabled-tag"},T8={class:"step-name"},B8={key:1,class:"terminal-waiting-panel"},A8={class:"waiting-content"},E8={class:"waiting-text"},P8={class:"waiting-desc"},V8={class:"waiting-actions"},M8={key:2,class:"terminal-waiting-panel user-confirm-panel"},G8={class:"waiting-content"},I8={class:"waiting-text"},R8={class:"waiting-desc"},L8={class:"waiting-actions"},x8={class:"console-input-row"},U8=["title"],z8={key:2,class:"console-output"},H8=["onClick"],W8={class:"cmd-line"},j8={class:"cmd-text"},q8=["title"],J8={class:"ts"},K8={class:"cmd-actions"},Y8={key:0,class:"output-content"},Q8=["innerHTML"],Z8=["innerHTML"],X8={key:0,class:"stdin-input-row"},ey={class:"user-input-dialog-content"},ty={key:0,class:"user-input-empty"},sy={key:1,class:"user-input-form"},ay={class:"user-input-label"},oy={key:0,class:"required"},qa="zen-gitsync-commandconsole-ratio",ny=ze({__name:"CommandConsole",setup(j){const k=Ut(),i=Tt();function c(){const R=window.location.port||"80";return parseInt(R==="5173"||R==="4173"||R==="5544"?"3002":R,10)}function f(){Pt().catch(R=>{u.error((R==null?void 0:R.message)||"提交后启动项执行失败")})}async function p(R){const U=R==null?void 0:R.flowData,ve={id:String((R==null?void 0:R.id)||"").trim(),name:String((R==null?void 0:R.name)||"").trim()};if(U&&Array.isArray(U==null?void 0:U.nodes)&&Array.isArray(U==null?void 0:U.edges)){await h({flowData:U,orchestrationMeta:ve});return}u.warning("该编排缺少流程数据,无法执行")}async function h(R){var Vt,Kt,Mt,pt,we,bt,es,dt,Ct,it,rt,gt,Ee;const U=R==null?void 0:R.flowData;if(!U||!Array.isArray(U.nodes)||!Array.isArray(U.edges))return;const ve=U.nodes,Te=U.edges;y.value=!0,b.value=!0,P.value=!1,A.value=[],O.value=-1,Y.value=U,ce.value=!0,X.value=null,T.value=[],B.value=[],se.value=[],_e.value=(((Vt=R==null?void 0:R.orchestrationMeta)==null?void 0:Vt.name)||"").trim(),De.value=(((Kt=R==null?void 0:R.orchestrationMeta)==null?void 0:Kt.id)||"").trim();const qe={},Ke=new Map(ve.map(Le=>[Le.id,Le])),Ie=((R==null?void 0:R.startNodeId)||"").trim()||((Mt=ve.find(Le=>Le.type==="start"))==null?void 0:Mt.id);if(!Ie){u.error("未找到 start 节点");return}const et=new Map;for(const Le of Te)et.has(Le.source)||et.set(Le.source,[]),et.get(Le.source).push(Le);for(const[Le,Be]of et.entries()){const Me=Ke.get(Le);if(Me&&Me.type!=="start"&&Me.type!=="condition"&&Be.length>1){u.error(`节点 ${((pt=Me.data)==null?void 0:pt.label)||Me.id} 出边超过 1 条,当前版本不支持`);return}}const $t=Math.max(100,ve.length*10),he=new Map,mt=(Le,Be,Me)=>{const at=Le??"",It=Me??"";switch(Be){case"contains":return at.includes(It);case"not_contains":return!at.includes(It);case"isEmpty":return String(at).trim().length===0;case"isNotEmpty":return String(at).trim().length>0;case"==":return at===It;case"!=":return at!==It;case">":case">=":case"<":case"<=":{const xt=Number(at),Rt=Number(It);return Number.isNaN(xt)||Number.isNaN(Rt)?!1:Be===">"?xt>Rt:Be===">="?xt>=Rt:Be==="<"?xt<Rt:xt<=Rt}default:return!1}},St=(Le,Be)=>{const Me=et.get(Le)||[],It=(Array.isArray(Be==null?void 0:Be.conditionBranches)?Be.conditionBranches:[]).map(ot=>({id:String((ot==null?void 0:ot.id)||""),name:String((ot==null?void 0:ot.name)||""),handleId:String((ot==null?void 0:ot.handleId)||""),priority:typeof(ot==null?void 0:ot.priority)=="number"?ot.priority:Number((ot==null?void 0:ot.priority)??0),combine:(ot==null?void 0:ot.combine)==="any"?"any":"all",rules:Array.isArray(ot==null?void 0:ot.rules)?ot.rules:[],isDefault:!!(ot!=null&&ot.isDefault)||String((ot==null?void 0:ot.handleId)||"")==="default"})).filter(ot=>!!ot.handleId),xt=It.find(ot=>ot.isDefault)||It.find(ot=>ot.handleId==="default"),Rt=It.filter(ot=>!ot.isDefault&&ot.handleId!=="default").sort((ot,qs)=>(ot.priority??0)-(qs.priority??0)),Nt=ot=>{const qs=Array.isArray(ot.rules)?ot.rules:[];if(qs.length===0)return!1;const Va=qs.map(ss=>{var Ga,Ia,Ra;const Ma=String(((Ga=ss==null?void 0:ss.left)==null?void 0:Ga.nodeId)||"").trim(),Ko=String(((Ia=ss==null?void 0:ss.left)==null?void 0:Ia.outputKey)||"stdout").trim()||"stdout",Yo=Ma&&((Ra=qe==null?void 0:qe[Ma])==null?void 0:Ra[Ko])||"";return mt(String(Yo??""),String((ss==null?void 0:ss.op)||""),ss==null?void 0:ss.right)});return ot.combine==="any"?Va.some(Boolean):Va.every(Boolean)};let At=Rt.find(ot=>Nt(ot));!At&&xt&&(At=xt);const Pa=String((At==null?void 0:At.handleId)||""),Jo=Pa?Me.find(ot=>String(ot.sourceHandle||"").trim()===Pa):void 0;return console.log("[FLOW][condition]",{nodeId:Le,chosen:At?{name:At.name,handleId:At.handleId,priority:At.priority,isDefault:At.isDefault}:null,outs:Me.map(ot=>({id:ot.id,sourceHandle:ot.sourceHandle,target:ot.target})),nodeOutputsKeys:Object.keys(qe||{})}),Jo};let ft=Ie,vt=0;try{for(;ft;){if(!b.value)throw new Error("用户停止执行");if(vt++>$t)throw new Error(`执行步数超过上限(${$t}),可能存在循环`);const Le=he.get(ft)||0;if(he.set(ft,Le+1),Le>=10)throw new Error(`检测到节点 ${ft} 被重复执行过多次,可能存在循环`);const Be=Ke.get(ft);if(!Be)throw new Error(`节点不存在: ${ft}`);if(X.value=Be.id,Be.type==="start"){const At=et.get(Be.id)||[];T.value=T.value.includes(Be.id)?T.value:[...T.value,Be.id],(we=At[0])!=null&&we.id&&(B.value=B.value.includes(At[0].id)?B.value:[...B.value,At[0].id]),ft=(bt=At[0])==null?void 0:bt.target;continue}const Me=(es=Be.data)==null?void 0:es.config;if(!Me)throw new Error(`节点未配置: ${((dt=Be.data)==null?void 0:dt.label)||Be.id}`);Me.enabled===void 0&&(Me.enabled=((Ct=Be.data)==null?void 0:Ct.enabled)??!0);const at=(R==null?void 0:R.isSingleExecution)===!0;if(Me.enabled===!1&&!at){ft=(it=(et.get(Be.id)||[])[0])==null?void 0:it.target;continue}if(Be.type==="condition"){const At=St(Be.id,Me);if(T.value=T.value.includes(Be.id)?T.value:[...T.value,Be.id],At!=null&&At.id&&(B.value=B.value.includes(At.id)?B.value:[...B.value,At.id]),ft=At==null?void 0:At.target,at)break;continue}const It=et.get(Be.id)||[],xt=(R==null?void 0:R.isSingleExecution)!==!0&&!!((rt=It[0])!=null&&rt.target);if(!await Xt([{...Me,nodeId:Be.id,enabled:Me.enabled}],0,!0,R==null?void 0:R.orchestrationMeta,{nodeOutputs:qe,skipUiSetup:!0,skipUiTeardown:!0,forceTerminalConfirm:xt})){Be.id&&!se.value.includes(Be.id)&&(se.value=[...se.value,Be.id]);break}if(!b.value)break;T.value=T.value.includes(Be.id)?T.value:[...T.value,Be.id];const Nt=et.get(Be.id)||[];if((gt=Nt[0])!=null&>.id&&(B.value=B.value.includes(Nt[0].id)?B.value:[...B.value,Nt[0].id]),ft=(Ee=Nt[0])==null?void 0:Ee.target,at)break}}catch(Le){String((Le==null?void 0:Le.message)||Le)!=="用户停止执行"&&(X.value&&!se.value.includes(X.value)&&(se.value=[...se.value,X.value]),u.error((Le==null?void 0:Le.message)||String(Le)))}finally{b.value=!1,P.value=!1,O.value=-1,A.value=[],X.value=null}}const C=c(),m=_(null),S=_(""),M=_(""),b=_(!1),P=_(!1),n=_([]);let d=0;function F(){Dt.confirm("确定要清空所有执行历史吗?此操作不可撤销。","清空历史",{confirmButtonText:"清空",cancelButtonText:"取消",type:"warning"}).then(()=>{n.value=[],u.success("执行历史已清空")}).catch(()=>{})}function w(){G&&G(!0)}function E(){G&&G(!1),b.value=!1,P.value=!1}function H(){Q&&Q(!0)}function z(){Q&&Q(!1),b.value=!1,P.value=!1}const A=_([]),O=_(-1),Y=_(null),ce=_(!0),X=_(null),T=_([]),B=_([]),se=_([]),_e=_(""),De=_(""),ue=_(!1),be=_("");let G=null;const q=_(!1),ge=_("");let Q=null;const re=_(!1),ne=_(""),te=_([]),Ge=_({});let fe=null;const We=ie({get:()=>re.value,set:R=>{re.value=R}});function J(){var U;const R=Array.isArray(te.value)?te.value:[];for(const ve of R){if(!(ve!=null&&ve.required))continue;const Te=(U=Ge.value)==null?void 0:U[ve.name];if(Te==null||String(Te).trim()===""){u.warning(e("@UINPUT:请输入必填参数的值",{name:ve.name}));return}}fe&&fe(!0)}function Ce(){fe&&fe(!1),b.value=!1,P.value=!1}const Oe=_(localStorage.getItem("isConsoleExpanded")!=="false"),lt=new _n({fg:"#e5e5e5",bg:"transparent",newline:!1,escapeXML:!1,stream:!1,colors:{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 V(R){return lt.toHtml(R)}const y=_(!1),ae=_(localStorage.getItem("useTerminal")==="true"),Fe=_([]),ye=_(!1),Ne=localStorage.getItem("showTerminalSessions"),ut=_(Ne==null?!0:Ne==="true"),me=ie(()=>Fe.value.length),$e=_(!1);function He(R){return new Promise(U=>setTimeout(U,R))}async function je(R=8e3){const U=Date.now();for(;Date.now()-U<R;){if(m.value&&m.value.connected)return!0;await He(100)}return!1}async function Ae(R){const U=k.customCommands.find(Ke=>String(Ke.id)===String(R));if(!U){u.warning(`启动项命令不存在: ${R}`);return}const ve=U.directory||S.value,Te=U.command;if(ae.value){try{const Ie=await(await fetch("/api/exec-in-terminal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:Te,workingDirectory:ve})})).json();Ie!=null&&Ie.success?Ie!=null&&Ie.session?ee(Ie.session):await K():u.error((Ie==null?void 0:Ie.error)||"启动项命令执行失败")}catch(Ke){u.error((Ke==null?void 0:Ke.message)||"启动项命令执行失败")}return}if(!await je()){u.error("Socket 连接未就绪,无法自动执行交互式启动项");return}await Es(Te,ve)}async function ht(R){const U=k.orchestrations.find(ve=>ve.id===R);if(!U){u.warning(`启动项工作流不存在: ${R}`);return}await p(U)}async function Pt(){await k.loadConfig(!1);const R=k.afterQuickPushAction;R!=null&&R.enabled&&R!=null&&R.refId&&(R.type==="workflow"?await ht(R.refId):await Ae(R.refId))}async function Ft(){if($e.value||($e.value=!0,await k.loadConfig(!1),!k.startupAutoRun))return;const ve=(k.startupItems||[]).filter(Te=>(Te==null?void 0:Te.enabled)!==!1);if(ve.length!==0)for(const Te of ve)Te.type==="workflow"?await ht(Te.refId):await Ae(Te.refId)}const Bt=R=>Math.min(85,Math.max(15,R)),$=localStorage.getItem(qa),N=(()=>{const R=$?parseFloat($):25;return isNaN(R)?25:Bt(R)})(),Z=_(N),Se=_(null),Pe=()=>{var U,ve;const R=((U=Se.value)==null?void 0:U.$el)??Se.value;if(R&&R.clientWidth)return R.clientWidth;try{return((ve=R==null?void 0:R.getBoundingClientRect)==null?void 0:ve.call(R).width)??0}catch{return 0}},xe=R=>{try{localStorage.setItem(qa,String(Bt(R)))}catch{}},de=()=>{var qe,Ke,Ie,et;const R=((qe=Se.value)==null?void 0:qe.$el)??Se.value;if(!R)return;const U=(Ke=R.querySelectorAll)==null?void 0:Ke.call(R,".el-splitter__panel"),ve=Pe();if(!U||U.length<1||ve<=0)return;const Te=((et=(Ie=U[0])==null?void 0:Ie.getBoundingClientRect)==null?void 0:et.call(Ie).width)??0;if(Te>0){const $t=Bt(Te/ve*100);$t!==Z.value&&(Z.value=$t,xe($t))}},g=ie({get(){return`${Bt(Z.value)}%`},set(R){let U=NaN;if(typeof R=="number"){const ve=Pe();ve>0&&!isNaN(R)&&(U=R/ve*100)}else if(typeof R=="string"){if(R.endsWith("%"))U=parseFloat(R);else if(R.endsWith("px")){const ve=parseFloat(R),Te=Pe();Te>0&&!isNaN(ve)&&(U=ve/Te*100)}}isNaN(U)||(Z.value=Bt(U),xe(Z.value))}});async function D(R=!0){if(Fe.value.length!==0)try{const ve=await(await fetch(`/api/terminal-sessions/status?cleanup=${R?"true":"false"}`)).json();ve!=null&&ve.success&&(Fe.value=Array.isArray(ve.sessions)?ve.sessions:[])}catch{}}function ee(R){if(!R||typeof R.id!="number")return;const U=Fe.value.findIndex(ve=>ve.id===R.id);U!==-1?Fe.value[U]=R:Fe.value.unshift(R),Fe.value=[...Fe.value]}function ke(R){const U=String(R||"").trim();if(!U)return"";const ve=U.replace(/\/+$/g,"").replace(/\+$/g,""),Te=ve.split(/[\\/]+/).filter(Boolean);return Te[Te.length-1]||ve}async function K(){try{ye.value=!0;const U=await(await fetch("/api/terminal-sessions")).json();U!=null&&U.success?Fe.value=Array.isArray(U.sessions)?U.sessions:[]:u.error((U==null?void 0:U.error)||"获取终端会话失败")}catch(R){u.error((R==null?void 0:R.message)||"获取终端会话失败")}finally{ye.value=!1}}async function oe(R){try{ye.value=!0;const ve=await(await fetch(`/api/terminal-sessions/${R.id}/restart`,{method:"POST"})).json();ve!=null&&ve.success?(u.success("已重新启动终端"),await K()):u.error((ve==null?void 0:ve.error)||"重新启动失败")}catch(U){u.error((U==null?void 0:U.message)||"重新启动失败")}finally{ye.value=!1}}async function W(R){try{await Dt.confirm("确定要删除该终端会话记录吗?如果该终端仍在运行,将尝试结束进程。","删除终端会话",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}),ye.value=!0;const ve=await(await fetch(`/api/terminal-sessions/${R.id}`,{method:"DELETE"})).json();ve!=null&&ve.success?(u.success("已删除"),await K()):u.error((ve==null?void 0:ve.error)||"删除失败")}catch(U){U!=="cancel"&&u.error((U==null?void 0:U.message)||"删除失败")}finally{ye.value=!1}}const Ve=_(!1),wt=_(!1);async function _t(){const R=M.value.trim();!R||b.value||(M.value="",await us(R,S.value))}async function us(R,U=S.value){var Te,qe;if(b.value=!0,ae.value){try{const Ie=await(await fetch("/api/exec-in-terminal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:R,workingDirectory:U})})).json();Ie!=null&&Ie.success?(u.success("已在新终端中执行命令"),Ie!=null&&Ie.session?ee(Ie.session):await K()):u.error((Ie==null?void 0:Ie.error)||"执行失败")}catch(Ke){u.error((Ke==null?void 0:Ke.message)||"执行失败")}finally{b.value=!1}return}const ve={id:++d,command:R,directory:U,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:"",running:!0};n.value.unshift(ve),M.value="";try{console.log("[前端-控制台] 开始发送流式请求:",R);const Ke=await fetch("/api/exec-stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:R,directory:ve.directory})});if(console.log("[前端-控制台] 收到响应,状态:",Ke.status,Ke.statusText),!Ke.ok)throw new Error(`HTTP ${Ke.status}: ${Ke.statusText}`);const Ie=(Te=Ke.body)==null?void 0:Te.getReader(),et=new TextDecoder;if(!Ie)throw new Error("无法读取响应流");console.log("[前端-控制台] 开始读取流数据");let $t="",he=0;for(;;){const{done:mt,value:St}=await Ie.read();if(he++,console.log(`[前端-控制台] 读取数据块 #${he}, done:`,mt,"size:",(St==null?void 0:St.length)||0),mt)break;const ft=et.decode(St,{stream:!0});console.log("[前端-控制台] 解码数据块:",ft.substring(0,200)),$t+=ft;const vt=$t.split(`
|
|
57
|
-
|
|
58
|
-
`);$t=vt.pop()||"",console.log(`[前端-控制台] 分割出 ${vt.length} 条消息`);for(const Vt of vt){const Kt=Vt.split(`
|
|
59
|
-
`);for(const Mt of Kt)if(Mt.startsWith("data: "))try{const pt=JSON.parse(Mt.substring(6));console.log("[前端-控制台] 解析到数据:",pt.type,"长度:",((qe=pt.data)==null?void 0:qe.length)||0),pt.type==="process_id"?(ve.processId=pt.data,console.log("[前端-控制台] 收到进程ID:",ve.processId),n.value=[...n.value]):pt.type==="stdout"?(ve.stdout=(ve.stdout||"")+V(pt.data),console.log("[前端-控制台] 当前stdout总长度:",ve.stdout.length),b.value&&ve.stdout.length<200&&(b.value=!1),n.value=[...n.value]):pt.type==="stderr"?(ve.stderr=(ve.stderr||"")+V(pt.data),console.log("[前端-控制台] 当前stderr总长度:",ve.stderr.length),b.value&&ve.stderr.length<200&&(b.value=!1),n.value=[...n.value]):pt.type==="exit"?(ve.success=pt.data.success,ve.running=!1,console.log("[前端-控制台] 进程退出,成功:",ve.success),n.value=[...n.value]):pt.type==="error"&&(ve.stderr=(ve.stderr||"")+`错误: ${pt.data}
|
|
60
|
-
`,n.value=[...n.value])}catch(pt){console.warn("解析SSE数据失败:",Mt,pt)}}}if($t.trim()){const mt=$t.split(`
|
|
61
|
-
`);for(const St of mt)if(St.startsWith("data: "))try{const ft=JSON.parse(St.substring(6));ft.type==="stdout"?ve.stdout=(ve.stdout||"")+V(ft.data):ft.type==="stderr"?ve.stderr=(ve.stderr||"")+V(ft.data):ft.type==="exit"&&(ve.success=ft.data.success,ve.running=!1)}catch(ft){console.warn("解析剩余SSE数据失败:",ft)}n.value=[...n.value]}console.log("[前端-控制台] 流读取完成,正常退出")}catch(Ke){console.error("[前端-控制台] 捕获异常:",Ke),ve.success=!1,ve.running=!1,ve.stderr=(Ke==null?void 0:Ke.message)||String(Ke)}finally{console.log("[前端-控制台] finally块执行,设置consoleRunning=false"),b.value=!1}}function ks(R){n.value=n.value.filter(U=>U.id!==R.id)}async function hs(R){const U=(R.command||"").trim();if(!U)return;const ve=R.directory||S.value;R.running&&(R.isInteractive?fs(R):await le(R)),ks(R),R.isInteractive?await Es(U,ve):await us(U,ve)}function pe(R){const U=n.value.findIndex(ve=>ve.id===R.id);U!==-1&&(n.value[U].expanded=!n.value[U].expanded)}async function le(R){if(!R.processId){u.warning("无法停止:进程ID不存在");return}if(!R.running){u.info("命令已经结束");return}try{console.log(`[停止命令] 尝试停止进程 #${R.processId}: ${R.command}`);const ve=await(await fetch("/api/kill-process",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({processId:R.processId})})).json();ve.success?(u.success(`已停止命令: ${R.command}`),R.running=!1,n.value=[...n.value]):u.error(`停止失败: ${ve.error}`)}catch(U){console.error("[停止命令] 失败:",U),u.error(`停止失败: ${U.message||"未知错误"}`)}}function Re(){Ve.value=!0}function Qe(){wt.value=!0}function kt(){gs(()=>{const R=document.querySelector(".step-item.step-current");R&&R.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})})}function Ot(R){if(!R)return!1;const U=R.trim().toLowerCase();return U.startsWith("git ")||U==="git"||U.startsWith("git.exe ")||U.startsWith("g ")||U.includes("git add")||U.includes("git commit")||U.includes("git push")||U.includes("git pull")||U.includes("git checkout")||U.includes("git merge")||U.includes("git rebase")||U.includes("git reset")||U.includes("git stash")||U.includes("git branch")||U.includes("git tag")||U.includes("git fetch")}function Jt(R){var Te;if(!R)return;const U=[/\bv?(\d+\.\d+\.\d+(?:-[\w.]+)?)\b/,/["']?\^?(\d+\.\d+\.\d+)["']?/,/version["']?:\s*["']?v?(\d+\.\d+\.\d+)/i];for(const qe of U){const Ke=R.match(qe);if(Ke&&Ke[1])return Ke[1]}return((Te=R.split(`
|
|
62
|
-
`)[0])==null?void 0:Te.trim())||void 0}async function Xt(R,U=0,ve=!1,Te,qe){var et,$t,he,mt,St,ft,vt,Vt,Kt;if(R.length===0)return!0;const Ke=(qe==null?void 0:qe.nodeOutputs)||{};let Ie=!1;try{for(let pt=U;pt<R.length;pt++){if(!b.value)throw new Error("用户停止执行");const we=R[pt];if(qe!=null&&qe.skipUiSetup,we.enabled===void 0&&(we.enabled=!0),we.enabled===!1&&!ve){const dt=we.commandName||we.type;u.info(`[${pt+1}/${R.length}] 跳过已禁用的步骤: ${dt}`);continue}let bt="",es=!0;if(we.type==="command"){const dt=k.customCommands.find(rt=>rt.id===we.commandId);if(!dt){u.error(`命令已删除: ${we.commandName}`),Ie=!0;break}bt=we.commandName||dt.name;let Ct=dt.command;if(we.inputs&&we.inputs.length>0){const rt={};for(const gt of we.inputs)if(gt.inputType==="manual")rt[gt.paramName]=gt.manualValue||"";else if(gt.inputType==="reference"&>.referenceNodeId&>.referenceOutputKey){const Ee=Ke[gt.referenceNodeId];Ee?rt[gt.paramName]=Ee[gt.referenceOutputKey]||"":(console.warn(`[变量替换] 未找到节点 ${gt.referenceNodeId} 的输出`),rt[gt.paramName]="")}Ct=B2(Ct,rt),console.log(`[变量替换] 原命令: ${dt.command}`),console.log("[变量替换] 变量值:",rt),console.log(`[变量替换] 替换后: ${Ct}`)}if(u.info(`[${pt+1}/${R.length}] 执行: ${bt}${we.useTerminal?" (终端)":""}`),we.useTerminal){try{const rt=dt.directory,gt=we.restartExistingTerminal===!0;if(gt){await D(!1);const Ee=Fe.value.find(Le=>{const Be=((Le==null?void 0:Le.command)||"").trim()===String(Ct).trim(),Me=((Le==null?void 0:Le.workingDirectory)||"")===(rt||"");return Be&&Me});if(Ee){const Be=await(await fetch(`/api/terminal-sessions/${Ee.id}/restart`,{method:"POST"})).json();if(Be!=null&&Be.success)u.success(`${bt} 已重启现存终端命令`),await K();else throw new Error((Be==null?void 0:Be.error)||"重启失败")}}if(!gt||!Fe.value.some(Ee=>((Ee==null?void 0:Ee.command)||"").trim()===String(Ct).trim()&&((Ee==null?void 0:Ee.workingDirectory)||"")===(rt||""))){const Le=await(await fetch("/api/exec-in-terminal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:Ct,workingDirectory:rt})})).json();if(Le!=null&&Le.success)u.success(`${bt} 已在新终端中执行`),Le!=null&&Le.session?ee(Le.session):await K();else throw new Error((Le==null?void 0:Le.error)||"执行失败")}if((pt<R.length-1||qe!=null&&qe.forceTerminalConfirm)&&es){ue.value=!0,be.value=bt;const Ee=await new Promise(Le=>{G=Le});if(ue.value=!1,be.value="",G=null,!Ee)throw es=!1,b.value=!1,new Error("用户取消执行")}}catch(rt){(rt==null?void 0:rt.message)!=="用户取消执行"&&u.error(`${bt} 执行失败: ${rt==null?void 0:rt.message}`),es=!1,Ie=!0;break}continue}const it={id:++d,command:`[${bt}] ${Ct}`,directory:dt.directory||"",success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:"",running:!0};n.value.unshift(it);try{const rt=await fetch("/api/exec-stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:Ct,directory:dt.directory||""})});if(!rt.ok)throw new Error(`HTTP ${rt.status}: ${rt.statusText}`);const gt=(et=rt.body)==null?void 0:et.getReader(),Ee=new TextDecoder;if(!gt)throw new Error("无法读取响应流");let Le="";for(;;){const{done:Be,value:Me}=await gt.read();if(Be)break;Le+=Ee.decode(Me,{stream:!0});const at=Le.split(`
|
|
63
|
-
|
|
64
|
-
`);Le=at.pop()||"";for(const It of at){const xt=It.split(`
|
|
65
|
-
`);for(const Rt of xt)if(Rt.startsWith("data: "))try{const Nt=JSON.parse(Rt.substring(6));Nt.type==="process_id"?(it.processId=Nt.data,n.value=[...n.value]):Nt.type==="stdout"?it.stdout+=V(Nt.data):Nt.type==="stderr"?it.stderr+=V(Nt.data):Nt.type==="exit"?(it.success=Nt.data.success,it.running=!1,n.value=[...n.value]):Nt.type==="error"&&(it.stderr+=V(`错误: ${Nt.data}
|
|
66
|
-
`))}catch(Nt){console.warn("解析SSE数据失败:",Rt,Nt)}}}if(Le.trim()){const Be=Le.split(`
|
|
67
|
-
`);for(const Me of Be)if(Me.startsWith("data: "))try{const at=JSON.parse(Me.substring(6));at.type==="stdout"?it.stdout+=V(at.data):at.type==="stderr"&&(it.stderr+=V(at.data))}catch{}}if(!it.success)u.error(`命令 ${bt} 执行失败,停止后续步骤`),es=!1,Ie=!0;else{const Be=(it.stdout||"").replace(/<[^>]*>/g,"").trim(),Me=(it.stderr||"").replace(/<[^>]*>/g,"").trim(),at={stdout:Be,stderr:Me,error:""};Ke[we.id]=at,we.nodeId&&(Ke[we.nodeId]=at),console.log(`[DEBUG] 存储输出 - step.id: ${we.id}, step.nodeId: ${we.nodeId}`),console.log("[DEBUG] nodeOutputs keys:",Object.keys(Ke))}}catch(rt){it.success=!1,it.stderr=(rt==null?void 0:rt.message)||String(rt),u.error(`命令 ${bt} 执行出错: ${rt==null?void 0:rt.message}`),es=!1,Ie=!0}}else if(we.type==="wait"){const dt=we.waitSeconds||0;bt=`等待 ${dt} 秒`,u.info(`[${pt+1}/${R.length}] ${bt}`);const Ct={id:++d,command:bt,success:!0,ts:new Date().toLocaleString(),expanded:!0,stdout:`等待 ${dt} 秒...`,stderr:""};n.value.unshift(Ct);for(let it=dt;it>0;it--){if(!b.value)throw Ct.stdout=`等待已中断(剩余 ${it} 秒)`,u.warning("等待已中断"),new Error("用户停止执行");Ct.stdout=`等待中... 还剩 ${it} 秒`,await new Promise(rt=>setTimeout(rt,1e3))}Ct.stdout="等待完成"}else if(we.type==="code"){bt="代码节点",u.info(`[${pt+1}/${R.length}] ${bt}`);const dt={id:++d,command:bt,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:""};n.value.unshift(dt);try{if(!we.codeScript||!String(we.codeScript).trim())throw new Error("未配置脚本");const Ct={},it=Array.isArray(we.codeInputs)?we.codeInputs:[];for(const Be of it){const Me=String((Be==null?void 0:Be.name)||"").trim();if(!Me)continue;if(((Be==null?void 0:Be.source)==="manual"?"manual":"reference")==="manual"){Ct[Me]=(Be==null?void 0:Be.manualValue)===void 0||(Be==null?void 0:Be.manualValue)===null?"":String(Be.manualValue);continue}const It=($t=Be==null?void 0:Be.ref)==null?void 0:$t.nodeId,xt=(he=Be==null?void 0:Be.ref)==null?void 0:he.outputKey;if(!It||!xt)throw new Error(`输入参数 ${Me} 未配置引用来源`);const Rt=Ke[It],Nt=Rt&&Rt[xt]||"";if(!Nt)throw new Error(`无法获取输入:${It}::${xt}`);Ct[Me]=Nt}const rt=await fetch("/api/execute-code-node",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({script:we.codeScript,param:Ct})});if(!rt.ok)throw new Error(`HTTP ${rt.status}: ${rt.statusText}`);const gt=await rt.json();if(!(gt!=null&>.success))throw new Error((gt==null?void 0:gt.error)||"代码节点执行失败");const Ee=gt!=null&>.outputs&&typeof gt.outputs=="object"?gt.outputs:{},Le=Object.keys(Ee);if(Le.length===0)throw new Error("代码节点未返回任何输出");Ke[we.id]={...Ee},we.nodeId&&(Ke[we.nodeId]={...Ee}),dt.success=!0,dt.stdout=Le.map(Be=>`${Be}=${Ee[Be]??""}`).join(`
|
|
68
|
-
`)}catch(Ct){dt.success=!1,dt.stderr=(Ct==null?void 0:Ct.message)||String(Ct),u.error(`${bt} 失败: ${(Ct==null?void 0:Ct.message)||Ct}`),es=!1,Ie=!0}}else if(we.type==="version"){const dt={},Ct=Array.isArray(we.versionInputs)?we.versionInputs:[];if(Ct.length>0)for(const Me of Ct){const at=String((Me==null?void 0:Me.name)||"").trim();if(!at)continue;if((Me==null?void 0:Me.source)==="manual"){dt[at]=String((Me==null?void 0:Me.manualValue)??"");continue}const It=String(((mt=Me==null?void 0:Me.ref)==null?void 0:mt.nodeId)||"").trim(),xt=String(((St=Me==null?void 0:Me.ref)==null?void 0:St.outputKey)||"stdout").trim()||"stdout",Rt=It?Ke==null?void 0:Ke[It]:void 0,Nt=Rt?Rt[xt]:void 0;dt[at]=typeof Nt=="string"?Nt:String(Nt??"")}const it=(we==null?void 0:we.versionSource)==="manual"||(we==null?void 0:we.versionSource)==="reference"||(we==null?void 0:we.versionSource)==="input"?we.versionSource:"bump",rt=(we==null?void 0:we.extractVersionFromRefOutput)!==!1,gt=Me=>rt&&Jt(Me)||Me;let Ee="";if(we.versionTarget!=="dependency")if(it==="input"){const Me=String((we==null?void 0:we.versionInputKey)||"version").trim()||"version";Ee=String(dt[Me]??"").trim(),Ee&&(Ee=gt(Ee))}else Ee=String(dt.version??"").trim(),Ee&&(Ee=gt(Ee));let Le=we.dependencyVersion;if(we.versionTarget==="dependency")if(it==="input"){const Me=String((we==null?void 0:we.dependencyVersionInputKey)||"dependencyVersion").trim()||"dependencyVersion",at=String(dt[Me]??"").trim();Le=at?gt(at):""}else{const Me=String(dt.dependencyVersion??"").trim();if(Me&&(Le=gt(Me)),!dt.dependencyVersion&&it==="reference"&&we.inputRef){const at=we.inputRef.nodeId,It=we.inputRef.outputKey,xt=Ke[at];if(xt){const Rt=xt[It];typeof Rt=="string"&&Rt&&(Le=gt(Rt))}if(!Le){u.error(`无法从节点 ${at} 获取输出,请检查前置节点是否执行成功`),Ie=!0;break}}}if(we.versionTarget==="dependency"){if(it==="manual"&&!String(we.dependencyVersion||"").trim()&&!String(dt.dependencyVersion||"").trim()){u.error("依赖版本号为空,请检查输入/手动输入配置"),Ie=!0;break}if((it==="reference"||it==="input")&&!String(Le||"").trim()){u.error("依赖版本号为空,请检查引用配置"),Ie=!0;break}}else if((it==="manual"||it==="reference"||it==="input")&&!String(Ee||"").trim()){u.error("版本号为空,请检查输入/引用配置"),Ie=!0;break}if(we.versionTarget==="dependency"){const Me=we.dependencyType==="devDependencies"?"devDep":we.dependencyType==="peerDependencies"?"peerDep":"dep";it==="reference"?bt=`修改依赖 [${Me}] ${we.dependencyName} → ${Le} (引用输出)`:it==="input"?bt=`修改依赖 [${Me}] ${we.dependencyName} → ${Le} (引用输入)`:bt=`修改依赖 [${Me}] ${we.dependencyName} → ${Le||"(自动递增)"}`}else if(Ee)bt=it==="input"?`设置版本号 → ${Ee} (引用输入)`:`设置版本号 → ${Ee}`;else{const Me=we.versionBump||"patch";bt=`版本号+1 (${Me==="major"?"主版本":Me==="minor"?"次版本":"补丁版本"})`}u.info(`[${pt+1}/${R.length}] ${bt}`);const Be={id:++d,command:bt,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:""};n.value.unshift(Be);try{const Me=await fetch("/api/version-bump",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({versionTarget:we.versionTarget||"version",bumpType:we.versionTarget!=="dependency"&&!Ee&&it==="bump"?we.versionBump||"patch":void 0,versionValue:we.versionTarget!=="dependency"?Ee:void 0,packageJsonPath:we.packageJsonPath||"",dependencyName:we.dependencyName,dependencyVersion:Le,dependencyVersionBump:it==="bump"?we.dependencyVersionBump:void 0,dependencyType:we.dependencyType||"dependencies"})});if(!Me.ok)throw new Error(`HTTP ${Me.status}: ${Me.statusText}`);const at=await Me.json();if(at.success)Be.success=!0,we.versionTarget==="dependency"?(Be.stdout=`依赖版本已更新: ${at.dependencyName} ${at.oldVersion} → ${at.newVersion}
|
|
69
|
-
`,Be.stdout+=`依赖类型: ${at.dependencyType}
|
|
70
|
-
`,Be.stdout+=`文件路径: ${at.filePath}`,u.success(`依赖 ${at.dependencyName} 版本已更新: ${at.oldVersion} → ${at.newVersion}`)):(Be.stdout=`版本号已更新: ${at.oldVersion} → ${at.newVersion}
|
|
71
|
-
`,Be.stdout+=`文件路径: ${at.filePath}`,u.success(`版本号已更新: ${at.oldVersion} → ${at.newVersion}`));else throw new Error(at.error||"版本更新失败")}catch(Me){Be.success=!1,Be.stderr=(Me==null?void 0:Me.message)||String(Me),u.error(`${bt} 失败: ${Me==null?void 0:Me.message}`),es=!1}}else if(we.type==="confirm"){bt="用户确认",u.info(`[${pt+1}/${R.length}] ${bt}`);const dt={id:++d,command:bt,success:!0,ts:new Date().toLocaleString(),expanded:!0,stdout:"等待用户确认...",stderr:""};n.value.unshift(dt),q.value=!0,ge.value=`执行到确认节点(第 ${pt+1}/${R.length} 步),是否继续执行后续步骤?`;const Ct=await new Promise(it=>{Q=it});q.value=!1,ge.value="",Q=null,Ct?(dt.stdout="用户已确认,继续执行",u.success("已确认,继续执行")):(dt.success=!1,dt.stdout="用户取消执行",u.warning("用户取消执行"),es=!1,Ie=!0,b.value=!1)}else if(we.type==="user_input"){bt="用户输入",u.info(`[${pt+1}/${R.length}] ${bt}`);const dt={id:++d,command:bt,success:!0,ts:new Date().toLocaleString(),expanded:!0,stdout:e("@UINPUT:等待用户输入..."),stderr:""};n.value.unshift(dt);const it=(Array.isArray(we==null?void 0:we.userInputParams)?we.userInputParams:[]).map(Ee=>({name:String((Ee==null?void 0:Ee.name)||"").trim(),required:!!(Ee!=null&&Ee.required),source:(Ee==null?void 0:Ee.source)==="reference"?"reference":"manual",defaultValue:(Ee==null?void 0:Ee.defaultValue)===void 0||(Ee==null?void 0:Ee.defaultValue)===null?"":String(Ee.defaultValue),ref:Ee==null?void 0:Ee.ref})).filter(Ee=>!!Ee.name),rt={};for(const Ee of it)if(Ee.source==="reference"){const Le=String(((ft=Ee==null?void 0:Ee.ref)==null?void 0:ft.nodeId)||"").trim(),Be=String(((vt=Ee==null?void 0:Ee.ref)==null?void 0:vt.outputKey)||"").trim(),Me=Le&&Be&&((Vt=Ke==null?void 0:Ke[Le])==null?void 0:Vt[Be])||"";rt[Ee.name]=String(Me??"")}else rt[Ee.name]=String(Ee.defaultValue??"");ne.value=(we.displayName||"").trim()||e("@UINPUT:用户输入节点"),te.value=it.map(Ee=>({name:Ee.name,required:Ee.required})),Ge.value=rt,re.value=!0;const gt=await new Promise(Ee=>{fe=Ee});if(re.value=!1,fe=null,!gt)dt.success=!1,dt.stdout=e("@UINPUT:用户取消执行"),u.warning(e("@UINPUT:用户取消执行")),es=!1,Ie=!0,b.value=!1;else{const Ee={};for(const Le of it)Ee[Le.name]=String(((Kt=Ge.value)==null?void 0:Kt[Le.name])??"");Ke[we.id]={...Ee},we.nodeId&&(Ke[we.nodeId]={...Ee}),dt.stdout=Object.keys(Ee).length?Object.keys(Ee).map(Le=>`${Le}=${Ee[Le]??""}`).join(`
|
|
72
|
-
`):e("@UINPUT:无输入")}}if(!es)break;pt<R.length-1&&(await new Promise(dt=>setTimeout(dt,500)),!ve&&P.value&&(u.warning("编排已暂停"),await new Promise((dt,Ct)=>{const it=setInterval(()=>{P.value||(clearInterval(it),u.success("继续执行"),dt()),b.value||(clearInterval(it),Ct(new Error("用户停止执行")))},100)}).catch(()=>{throw new Error("用户停止执行")})))}return qe!=null&&qe.skipUiTeardown,R.some(pt=>{if(pt.type==="command"){const we=k.customCommands.find(bt=>bt.id===pt.commandId);if(we)return Ot(we.command)}return!1})&&(await i.fetchStatus(),await i.fetchLog()),!Ie}catch(Mt){return(Mt==null?void 0:Mt.message)==="用户停止执行"?u.info("编排执行已停止"):u.error(`编排执行异常: ${(Mt==null?void 0:Mt.message)||String(Mt)}`),!1}}async function $s(R){var qe,Ke;const U=R.directory||S.value,ve=R.command;if(b.value=!0,ae.value){try{const et=await(await fetch("/api/exec-in-terminal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:ve,workingDirectory:U})})).json();et!=null&&et.success?(u.success("已在新终端中执行命令"),et!=null&&et.session?ee(et.session):await K(),Ve.value=!1):u.error((et==null?void 0:et.error)||"执行失败")}catch(Ie){u.error((Ie==null?void 0:Ie.message)||"执行失败")}finally{b.value=!1}return}if(!ae.value){const Ie=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,et={id:++d,command:ve,directory:U,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:"",running:!0,sessionId:Ie,isInteractive:!0,stdinInput:""};if(n.value.unshift(et),Ve.value=!1,!m.value||!m.value.connected){u.error("Socket 连接未建立,无法执行交互式命令"),b.value=!1,et.running=!1,et.stderr="Socket 连接未建立";return}m.value.emit("exec_interactive",{command:ve,directory:U,sessionId:Ie});const $t=vt=>{vt.sessionId===Ie&&(et.processId=vt.processId,console.log("[交互式-自定义] 收到进程ID:",et.processId),n.value=[...n.value])},he=vt=>{vt.sessionId===Ie&&(et.stdout=(et.stdout||"")+V(vt.data),b.value=!1,n.value=[...n.value])},mt=vt=>{vt.sessionId===Ie&&(et.stderr=(et.stderr||"")+V(vt.data),b.value=!1,n.value=[...n.value])},St=async vt=>{var Vt,Kt,Mt,pt,we;vt.sessionId===Ie&&(et.success=vt.success,et.running=!1,console.log("[交互式-自定义] 进程退出,成功:",et.success),n.value=[...n.value],Ot(ve)&&(await i.fetchStatus(),await i.fetchLog()),(Vt=m.value)==null||Vt.off("interactive_process_id",$t),(Kt=m.value)==null||Kt.off("interactive_stdout",he),(Mt=m.value)==null||Mt.off("interactive_stderr",mt),(pt=m.value)==null||pt.off("interactive_exit",St),(we=m.value)==null||we.off("interactive_error",ft))},ft=vt=>{var Vt,Kt,Mt,pt,we;vt.sessionId===Ie&&(et.stderr=(et.stderr||"")+`错误: ${vt.error}
|
|
73
|
-
`,et.running=!1,et.success=!1,n.value=[...n.value],(Vt=m.value)==null||Vt.off("interactive_process_id",$t),(Kt=m.value)==null||Kt.off("interactive_stdout",he),(Mt=m.value)==null||Mt.off("interactive_stderr",mt),(pt=m.value)==null||pt.off("interactive_exit",St),(we=m.value)==null||we.off("interactive_error",ft))};m.value.on("interactive_process_id",$t),m.value.on("interactive_stdout",he),m.value.on("interactive_stderr",mt),m.value.on("interactive_exit",St),m.value.on("interactive_error",ft),b.value=!1;return}const Te={id:++d,command:ve,directory:U,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:"",running:!0};n.value.unshift(Te),Ve.value=!1;try{console.log("[前端-自定义] 开始发送流式请求:",ve,"目录:",R.directory);const Ie=await fetch("/api/exec-stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:ve,directory:U})});if(console.log("[前端-自定义] 收到响应,状态:",Ie.status,Ie.statusText),!Ie.ok)throw new Error(`HTTP ${Ie.status}: ${Ie.statusText}`);const et=(qe=Ie.body)==null?void 0:qe.getReader(),$t=new TextDecoder;if(!et)throw new Error("无法读取响应流");console.log("[前端-自定义] 开始读取流数据");let he="",mt=0;for(;;){const{done:St,value:ft}=await et.read();if(mt++,console.log(`[前端-自定义] 读取数据块 #${mt}, done:`,St,"size:",(ft==null?void 0:ft.length)||0),St)break;const vt=$t.decode(ft,{stream:!0});console.log("[前端-自定义] 解码数据块:",vt.substring(0,200)),he+=vt;const Vt=he.split(`
|
|
74
|
-
|
|
75
|
-
`);he=Vt.pop()||"",console.log(`[前端-自定义] 分割出 ${Vt.length} 条消息, buffer剩余: ${he.length} 字符`);for(const Kt of Vt){const Mt=Kt.split(`
|
|
76
|
-
`);for(const pt of Mt)if(pt.startsWith("data: "))try{const we=JSON.parse(pt.substring(6));console.log("[前端-自定义] 解析到数据:",we.type,"内容长度:",((Ke=we.data)==null?void 0:Ke.length)||0),we.type==="process_id"?(Te.processId=we.data,console.log("[前端-自定义] 收到进程ID:",Te.processId),n.value=[...n.value]):we.type==="stdout"?(Te.stdout=(Te.stdout||"")+V(we.data),console.log("[前端-自定义] 当前stdout总长度:",Te.stdout.length,"内容预览:",Te.stdout.substring(0,100)),b.value&&Te.stdout.length<200&&(b.value=!1),n.value=[...n.value]):we.type==="stderr"?(Te.stderr=(Te.stderr||"")+V(we.data),console.log("[前端-自定义] 当前stderr总长度:",Te.stderr.length),b.value&&Te.stderr.length<200&&(b.value=!1),n.value=[...n.value]):we.type==="exit"?(Te.success=we.data.success,Te.running=!1,console.log("[前端-自定义] 进程退出,成功:",Te.success),n.value=[...n.value]):we.type==="error"&&(Te.stderr=(Te.stderr||"")+`错误: ${we.data}
|
|
77
|
-
`,n.value=[...n.value])}catch(we){console.warn("[前端-自定义] 解析SSE数据失败:",pt,we)}}}if(he.trim()){const St=he.split(`
|
|
78
|
-
`);for(const ft of St)if(ft.startsWith("data: "))try{const vt=JSON.parse(ft.substring(6));vt.type==="stdout"?Te.stdout=(Te.stdout||"")+V(vt.data):vt.type==="stderr"?Te.stderr=(Te.stderr||"")+V(vt.data):vt.type==="exit"&&(Te.success=vt.data.success,Te.running=!1)}catch(vt){console.warn("解析剩余SSE数据失败:",vt)}n.value=[...n.value]}console.log("[前端-自定义] 流读取完成,正常退出")}catch(Ie){console.error("[前端-自定义] 捕获异常:",Ie),Te.success=!1,Te.running=!1,Te.stderr=(Ie==null?void 0:Ie.message)||String(Ie)}finally{console.log("[前端-自定义] finally块执行,设置consoleRunning=false"),b.value=!1,Ot(ve)&&(await i.fetchStatus(),await i.fetchLog())}}async function ua(){const R=M.value.trim();!R||b.value||(M.value="",await Es(R))}async function Es(R,U=S.value){b.value=!0;const ve=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,Te={id:++d,command:R,directory:U,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:"",running:!0,sessionId:ve,isInteractive:!0,stdinInput:""};if(n.value.unshift(Te),!m.value||!m.value.connected){u.error("Socket 连接未建立,无法执行交互式命令"),b.value=!1,Te.running=!1,Te.stderr="Socket 连接未建立";return}m.value.emit("exec_interactive",{command:R,directory:U,sessionId:ve});const qe=he=>{he.sessionId===ve&&(Te.processId=he.processId,console.log("[交互式] 收到进程ID:",Te.processId),n.value=[...n.value])},Ke=he=>{he.sessionId===ve&&(Te.stdout=(Te.stdout||"")+V(he.data),b.value=!1,n.value=[...n.value])},Ie=he=>{he.sessionId===ve&&(Te.stderr=(Te.stderr||"")+V(he.data),b.value=!1,n.value=[...n.value])},et=he=>{var mt,St,ft,vt,Vt;he.sessionId===ve&&(Te.success=he.success,Te.running=!1,console.log("[交互式] 进程退出,成功:",Te.success),n.value=[...n.value],(mt=m.value)==null||mt.off("interactive_process_id",qe),(St=m.value)==null||St.off("interactive_stdout",Ke),(ft=m.value)==null||ft.off("interactive_stderr",Ie),(vt=m.value)==null||vt.off("interactive_exit",et),(Vt=m.value)==null||Vt.off("interactive_error",$t))},$t=he=>{var mt,St,ft,vt,Vt;he.sessionId===ve&&(Te.stderr=(Te.stderr||"")+`错误: ${he.error}
|
|
79
|
-
`,Te.running=!1,Te.success=!1,n.value=[...n.value],(mt=m.value)==null||mt.off("interactive_process_id",qe),(St=m.value)==null||St.off("interactive_stdout",Ke),(ft=m.value)==null||ft.off("interactive_stderr",Ie),(vt=m.value)==null||vt.off("interactive_exit",et),(Vt=m.value)==null||Vt.off("interactive_error",$t))};m.value.on("interactive_process_id",qe),m.value.on("interactive_stdout",Ke),m.value.on("interactive_stderr",Ie),m.value.on("interactive_exit",et),m.value.on("interactive_error",$t),b.value=!1}function Ps(R){var ve;const U=(ve=R.stdinInput)==null?void 0:ve.trim();if(!(!U||!R.sessionId)){if(!m.value||!m.value.connected){u.error("Socket 连接未建立");return}console.log("[交互式] 发送 stdin 输入:",U),m.value.emit(`interactive_stdin_${R.sessionId}`,{input:U}),R.stdinInput="",n.value=[...n.value]}}function fs(R){if(!R.sessionId||!R.running){u.warning("命令已经结束");return}if(!m.value||!m.value.connected){u.error("Socket 连接未建立");return}console.log("[交互式] 停止命令:",R.sessionId),m.value.emit(`interactive_stop_${R.sessionId}`),R.running=!1,n.value=[...n.value]}Ze(ae,R=>{localStorage.setItem("useTerminal",String(R))}),Ze(ut,R=>{localStorage.setItem("showTerminalSessions",String(R)),R&&D(!0)}),Ze(Z,R=>{xe(R)}),Ze(Oe,R=>{localStorage.setItem("isConsoleExpanded",String(R))});function qo(){const R=`http://localhost:${C}`;console.log("[控制台] 连接到 Socket.IO:",R),m.value=Ja(R,{transports:["websocket","polling"],reconnection:!0,reconnectionDelay:1e3,reconnectionAttempts:5}),m.value.on("connect",()=>{console.log("[控制台] Socket.IO 已连接")}),m.value.on("disconnect",()=>{console.log("[控制台] Socket.IO 已断开")}),m.value.on("connect_error",U=>{console.error("[控制台] Socket.IO 连接错误:",U)})}const Aa=()=>{document.visibilityState==="visible"&&ut.value&&(console.log("[页面可见性] 标签页已激活,刷新终端会话状态"),D(!0))},Ea=()=>{ut.value&&(console.log("[窗口焦点] 浏览器窗口已激活,刷新终端会话状态"),D(!0))};return ts(async()=>{try{const U=await(await fetch("/api/current_directory")).json();S.value=(U==null?void 0:U.directory)||""}catch{}qo(),await k.loadConfig(!1),await K(),await Ft(),document.addEventListener("visibilitychange",Aa),window.addEventListener("focus",Ea),window.addEventListener("zen-gitsync:after-quick-push-success",f)}),Hs(()=>{document.removeEventListener("visibilitychange",Aa),window.removeEventListener("focus",Ea),window.removeEventListener("zen-gitsync:after-quick-push-success",f),m.value&&(m.value.disconnect(),m.value=null)}),(R,U)=>{const ve=ct,Te=yt,qe=st,Ke=so,Ie=Et,et=oo,$t=Fs;return r(),v(Ue,null,[a("div",{class:Xe(["command-console",{fullscreen:y.value}])},[a("div",qg,[a("div",Jg,[a("span",Kg,l(t(e)("@CF05E:自定义指令执行")),1)]),a("div",Yg,[b.value?(r(),v("div",Qg,[s(Te,{content:P.value?"继续执行":"暂停执行",placement:"bottom"},{default:o(()=>[s(ve,{type:P.value?"success":"warning",size:"small",onClick:U[0]||(U[0]=he=>P.value=!P.value),class:"pause-btn"},{icon:o(()=>[P.value?(r(),x(t(ps),{key:0})):(r(),x(t(zt),{key:1}))]),default:o(()=>[L(" "+l(P.value?"继续":"暂停"),1)]),_:1},8,["type"])]),_:1},8,["content"]),s(Te,{content:"停止执行",placement:"bottom"},{default:o(()=>[s(ve,{type:"danger",size:"small",onClick:U[1]||(U[1]=he=>{b.value=!1,P.value=!1,O.value=-1,A.value=[]}),class:"stop-btn"},{icon:o(()=>[s(t(ms))]),default:o(()=>[U[17]||(U[17]=L(" 停止 "))]),_:1})]),_:1})])):I("",!0),n.value.length>0?(r(),x(nt,{key:1,tooltip:"清空执行历史","hover-color":"var(--color-danger)",onClick:F,"custom-class":"clear-history-btn"},{default:o(()=>[s(qe,{size:18},{default:o(()=>[s(t(Zt))]),_:1})]),_:1})):I("",!0),s(nt,{tooltip:t(e)("@CF05E:使用终端执行"),active:ae.value,onClick:U[2]||(U[2]=he=>ae.value=!ae.value),"custom-class":"terminal-toggle-btn"},{default:o(()=>[s(qe,{size:20},{default:o(()=>[s(t(Us))]),_:1})]),_:1},8,["tooltip","active"]),s(nt,{tooltip:t(e)("@CF05E:自定义命令管理"),"hover-color":"var(--color-success)",onClick:Re,"custom-class":"command-manager-btn"},{default:o(()=>[s(Lt,{"icon-class":"command-list","class-name":"icon-btn"})]),_:1},8,["tooltip"]),s(Ov,{onExecuteCommand:$s,onExecuteWorkflow:U[3]||(U[3]=he=>p(he))}),s(nt,{tooltip:t(e)("@ORCH:可视化编排"),"hover-color":"#9c27b0",onClick:Qe,"custom-class":"flow-orchestrator-btn"},{default:o(()=>[s(Lt,{"icon-class":"workflow","class-name":"icon-btn"})]),_:1},8,["tooltip"]),s(nt,{tooltip:y.value?t(e)("@CF05E:退出全屏"):t(e)("@CF05E:全屏显示"),onClick:U[4]||(U[4]=he=>y.value=!y.value)},{default:o(()=>[s(qe,null,{default:o(()=>[y.value?(r(),x(t(ms),{key:0})):(r(),x(t(bo),{key:1}))]),_:1})]),_:1},8,["tooltip"]),s(nt,{tooltip:Oe.value?t(e)("@CF05E:收起控制台"):t(e)("@CF05E:展开控制台"),onClick:U[5]||(U[5]=he=>Oe.value=!Oe.value)},{default:o(()=>[s(qe,{class:Xe({"rotate-icon":!Oe.value})},{default:o(()=>[s(t(is))]),_:1},8,["class"])]),_:1},8,["tooltip"])])]),s(zs,{name:"console-content-slide"},{default:o(()=>[jt(a("div",Zg,[s(et,{ref_key:"splitterRef",ref:Se,layout:"horizontal",style:{height:"100%"},onResize:de,onResizeEnd:de},{default:o(()=>[s(Ke,{size:g.value,"onUpdate:size":U[8]||(U[8]=he=>g.value=he),min:"15%",max:"85%"},{default:o(()=>[a("div",Xg,[ut.value?(r(),v("div",e8,[a("div",t8,[a("div",s8,[a("span",null,l(t(e)("@CMDCON:终端会话")),1),a("span",a8,"("+l(me.value)+")",1)]),a("div",o8,[s(Te,{content:t(e)("@CMDCON:刷新"),placement:"bottom"},{default:o(()=>[s(ve,{text:"",size:"small",onClick:K,disabled:ye.value},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(Ds))]),_:1})]),_:1},8,["disabled"])]),_:1},8,["content"]),s(Te,{content:t(e)("@CMDCON:隐藏"),placement:"bottom"},{default:o(()=>[s(ve,{text:"",size:"small",onClick:U[6]||(U[6]=he=>ut.value=!1)},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(is))]),_:1})]),_:1})]),_:1},8,["content"])])]),jt((r(),v("div",n8,[Fe.value.length===0?(r(),v("div",l8,l(t(e)("@CMDCON:暂无终端会话")),1)):(r(),v("div",i8,[(r(!0),v(Ue,null,tt(Fe.value,he=>(r(),v("div",{key:he.id,class:"terminal-session-item"},[a("div",r8,[a("div",{class:"terminal-session-command",title:he.command},[L(l(he.command),1),a("span",u8," PID: "+l(he.pid??"-"),1)],8,c8),a("div",d8,[he.workingDirectory?(r(),x(Te,{key:0,content:he.workingDirectory,placement:"top"},{default:o(()=>[a("span",p8,[s(qe,{class:"cmd-dir-icon"},{default:o(()=>[s(t(rs))]),_:1}),L(" "+l(ke(he.workingDirectory)),1)])]),_:2},1032,["content"])):I("",!0)])]),a("div",f8,[s(Te,{content:t(e)("@CMDCON:重新启动"),placement:"top"},{default:o(()=>[s(ve,{text:"",size:"small",onClick:mt=>oe(he)},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(Ds))]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["content"]),s(Te,{content:t(e)("@CMDCON:删除"),placement:"top"},{default:o(()=>[s(ve,{text:"",size:"small",type:"danger",onClick:mt=>W(he)},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(Zt))]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["content"])])]))),128))]))])),[[$t,ye.value]])])):(r(),v("div",m8,[s(ve,{text:"",size:"small",onClick:U[7]||(U[7]=he=>ut.value=!0)},{default:o(()=>[L(l(t(e)("@CMDCON:显示终端会话",{count:me.value})),1)]),_:1})]))])]),_:1},8,["size"]),s(Ke,{min:"15%",max:"85%"},{default:o(()=>[a("div",v8,[Y.value&&ce.value?(r(),v("div",h8,[a("div",g8,[a("div",y8,l(_e.value||De.value),1),s(nt,{tooltip:t(e)("@CMDCON:隐藏"),"hover-color":"var(--color-danger)","custom-class":"flow-panel-close-btn",onClick:U[9]||(U[9]=he=>ce.value=!1)},{default:o(()=>[s(qe,{size:18},{default:o(()=>[s(t(ms))]),_:1})]),_:1},8,["tooltip"])]),s(jg,{"flow-data":Y.value,"current-node-id":X.value||void 0,"executed-node-ids":T.value,"failed-node-ids":se.value,"executed-edge-ids":B.value},null,8,["flow-data","current-node-id","executed-node-ids","failed-node-ids","executed-edge-ids"])])):I("",!0),A.value.length>0||ue.value||q.value?(r(),v("div",C8,[a("div",_8,[a("span",b8,[U[18]||(U[18]=L(" 执行步骤 ")),_e.value||De.value?(r(),v("span",w8," - "+l(_e.value||De.value),1)):I("",!0),L(" ("+l(O.value+1)+"/"+l(A.value.length)+") ",1)])]),A.value.length>0?(r(),v("div",k8,[(r(!0),v(Ue,null,tt(A.value,(he,mt)=>(r(),v("div",{key:mt,class:Xe(["step-item",{"step-current":mt===O.value,"step-completed":mt<O.value,"step-pending":mt>O.value,"step-disabled":he.enabled===!1,[`step-type-${he.type}`]:!0}])},[a("div",$8,[mt<O.value?(r(),x(qe,{key:0,class:"step-icon-check"},{default:o(()=>U[19]||(U[19]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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})):he.type==="wait"?(r(),x(qe,{key:1,class:"step-type-icon"},{default:o(()=>[s(t(bn))]),_:1})):he.type==="version"?(r(),x(qe,{key:2,class:"step-type-icon"},{default:o(()=>[s(t(wn))]),_:1})):he.type==="command"?(r(),x(qe,{key:3,class:"step-type-icon"},{default:o(()=>[s(t(Sa))]),_:1})):(r(),v("span",S8,l(mt+1),1))]),a("div",D8,[a("div",F8,[a("span",{class:Xe(["step-type-tag",`type-${he.type}`])},l(he.type==="command"?"命令":he.type==="wait"?"等待":he.type==="version"?"版本":he.type==="user_input"?"输入":he.type),3),he.useTerminal?(r(),v("span",O8,[s(qe,{class:"step-terminal-icon"},{default:o(()=>[s(t(Us))]),_:1}),U[20]||(U[20]=L(" 终端 "))])):I("",!0),he.enabled===!1?(r(),v("span",N8,"已禁用")):I("",!0)]),a("span",T8,l(he.type==="command"?he.commandName:he.type==="wait"?`${he.waitSeconds} 秒`:he.type==="version"?he.versionTarget==="dependency"?`${he.dependencyName}`:`${he.versionBump||"patch"}`:he.type==="user_input"?he.displayName||"用户输入":he.type),1)])],2))),128))])):I("",!0),ue.value?(r(),v("div",B8,[a("div",A8,[s(qe,{class:"waiting-icon"},{default:o(()=>[s(t(Us))]),_:1}),a("div",E8,[U[23]||(U[23]=a("div",{class:"waiting-title"},"等待终端命令完成",-1)),a("div",P8,[U[21]||(U[21]=L(' 终端命令 "')),a("strong",null,l(be.value),1),U[22]||(U[22]=L('" 已在新窗口中打开,请在终端中查看命令执行结果 '))])])]),a("div",V8,[s(ve,{type:"primary",onClick:w},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(ps))]),_:1}),U[24]||(U[24]=L(" 继续下一步 "))]),_:1}),s(ve,{type:"danger",plain:"",onClick:E},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(ms))]),_:1}),U[25]||(U[25]=L(" 停止执行 "))]),_:1})])])):I("",!0),q.value?(r(),v("div",M8,[a("div",G8,[s(qe,{class:"waiting-icon",style:{color:"#ff9800"}},{default:o(()=>U[26]||(U[26]=[L("✋")])),_:1}),a("div",I8,[U[27]||(U[27]=a("div",{class:"waiting-title"},"用户确认节点",-1)),a("div",R8,l(ge.value),1)])]),a("div",L8,[s(ve,{type:"primary",onClick:H},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(ps))]),_:1}),U[28]||(U[28]=L(" 继续执行 "))]),_:1}),s(ve,{type:"danger",plain:"",onClick:z},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(ms))]),_:1}),U[29]||(U[29]=L(" 取消执行 "))]),_:1})])])):I("",!0)])):I("",!0),a("div",x8,[a("span",{class:"prompt",title:t(e)("@CF05E:当前路径")},l(S.value)+" >",9,U8),s(Ie,{modelValue:M.value,"onUpdate:modelValue":U[10]||(U[10]=he=>M.value=he),class:"console-input",placeholder:ae.value?t(e)("@CMDCON:在新终端执行"):t(e)("@CMDCON:交互式模式"),onKeydown:U[11]||(U[11]=Bs(qt(he=>ae.value?_t():ua(),["prevent"]),["enter"])),disabled:b.value,clearable:""},null,8,["modelValue","placeholder","disabled"]),s(nt,{disabled:b.value,"hover-color":"var(--color-primary)",onClick:U[12]||(U[12]=he=>ae.value?_t():ua())},{default:o(()=>[b.value?(r(),x(qe,{key:0,class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(qe,{key:1},{default:o(()=>[s(t(ps))]),_:1}))]),_:1},8,["disabled"])]),n.value.length?(r(),v("div",z8,[(r(!0),v(Ue,null,tt(n.value,he=>(r(),v("div",{key:he.id,class:"console-record"},[a("div",{class:"cmd-header cursor-pointer",onClick:mt=>pe(he)},[a("div",W8,[U[30]||(U[30]=a("span",{class:"cmd-prefix"},">",-1)),a("span",j8,l(he.command),1),he.directory?(r(),v("span",{key:0,class:"cmd-dir",title:he.directory},[s(qe,{class:"cmd-dir-icon"},{default:o(()=>[s(t(rs))]),_:1}),L(" "+l(he.directory),1)],8,q8)):I("",!0),he.running?(r(),x(qe,{key:1,class:"running-icon is-loading",color:"var(--color-primary)"},{default:o(()=>[s(t(zt))]),_:1})):I("",!0),a("span",J8,l(he.ts),1)]),a("div",K8,[s(Te,{content:"重新执行",placement:"top"},{default:o(()=>[s(ve,{text:"",size:"small",onClick:qt(mt=>hs(he),["stop"]),class:"rerun-btn"},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(Ds))]),_:1})]),_:2},1032,["onClick"])]),_:2},1024),he.running?(r(),x(Te,{key:0,content:"停止命令",placement:"top"},{default:o(()=>[s(ve,{text:"",size:"small",onClick:qt(mt=>he.isInteractive?fs(he):le(he),["stop"]),class:"stop-btn",type:"danger"},{default:o(()=>[s(qe,null,{default:o(()=>[s(t(ms))]),_:1})]),_:2},1032,["onClick"])]),_:2},1024)):I("",!0),s(ve,{text:"",size:"small",onClick:qt(mt=>pe(he),["stop"]),disabled:!he.stdout&&!he.stderr,class:"toggle-output-btn"},{default:o(()=>[s(qe,{class:Xe({"rotate-icon":!he.expanded})},{default:o(()=>[s(t(is))]),_:2},1032,["class"])]),_:2},1032,["onClick","disabled"])])],8,H8),s(zs,{name:"output-slide"},{default:o(()=>[he.expanded&&(he.stdout||he.stderr)?(r(),v("div",Y8,[he.stdout?(r(),v("pre",{key:0,class:"stdout",innerHTML:he.stdout},null,8,Q8)):I("",!0),he.stderr?(r(),v("pre",{key:1,class:"stderr",innerHTML:he.stderr},null,8,Z8)):I("",!0)])):I("",!0)]),_:2},1024),he.isInteractive&&he.running?(r(),v("div",X8,[s(qe,{class:"stdin-icon"},{default:o(()=>[s(t(lo))]),_:1}),s(Ie,{modelValue:he.stdinInput,"onUpdate:modelValue":mt=>he.stdinInput=mt,class:"stdin-input",placeholder:"输入响应内容(如密码、确认等),按回车发送",onKeydown:Bs(qt(mt=>Ps(he),["prevent"]),["enter"]),clearable:"",size:"small"},null,8,["modelValue","onUpdate:modelValue","onKeydown"]),s(ve,{type:"success",onClick:mt=>Ps(he),size:"small"},{default:o(()=>U[31]||(U[31]=[L("发送")])),_:2},1032,["onClick"])])):I("",!0)]))),128))])):I("",!0)])]),_:1})]),_:1},512)],512),[[aa,Oe.value]])]),_:1})],2),s(z1,{visible:Ve.value,"onUpdate:visible":U[13]||(U[13]=he=>Ve.value=he),fullscreen:!0,onExecuteCommand:$s},null,8,["visible"]),s(zg,{visible:wt.value,"onUpdate:visible":U[14]||(U[14]=he=>wt.value=he),onExecuteFlow:h,onOpenCommandManager:U[15]||(U[15]=he=>Ve.value=!0)},null,8,["visible"]),s(Gt,{modelValue:We.value,"onUpdate:modelValue":U[16]||(U[16]=he=>We.value=he),title:ne.value,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":t(e)("@803A9:确定"),"cancel-text":t(e)("@803A9:取消"),onConfirm:J,onCancel:Ce},{default:o(()=>[a("div",ey,[te.value.length===0?(r(),v("div",ty,l(t(e)("@UINPUT:暂无输入参数")),1)):(r(),v("div",sy,[(r(!0),v(Ue,null,tt(te.value,he=>(r(),v("div",{key:he.name,class:"user-input-row"},[a("div",ay,[he.required?(r(),v("span",oy,"*")):I("",!0),L(" "+l(he.name),1)]),s(Ie,{modelValue:Ge.value[he.name],"onUpdate:modelValue":mt=>Ge.value[he.name]=mt,placeholder:he.name,clearable:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])]))),128))]))])]),_:1},8,["modelValue","title","confirm-text","cancel-text"])],64)}}}),ly=Je(ny,[["__scopeId","data-v-64b0d5e3"]]),iy={class:"card-header app-card-header"},ry={class:"header-left"},cy={key:0,class:"header-actions"},uy={class:"card-content app-card-content"},dy={class:"layout-container"},py={key:0,class:"git-config-warning"},fy={key:1,class:"commit-section"},my={key:0,class:"commit-form"},vy={class:"description-container"},hy={key:1,class:"standard-commit-form"},gy={class:"standard-commit-header"},yy={class:"type-scope-container"},Cy={class:"scope-wrapper"},_y={class:"description-container description-inline"},by={class:"advanced-fields"},wy={key:0,class:"status-updating-indicator"},ky={class:"commit-settings-content"},$y=ze({__name:"CommitForm",setup(j){const k=Tt(),i=Ut(),c=_(""),{loadingState:f,show:p,hide:h,setText:C}=Gm(),{successState:m}=Im(),S=_(!1),M=_("输入提交信息..."),b=_(""),P=_(!1),n=_("feat"),d=_(""),F=_(""),w=_(""),E=_(""),H=_([]),z=_(!1),A=_([]),O=_(!1),Y=_(!1),ce=_(!1),X=_(!1),T=_(null),B=_(!1),se=ie(()=>[{value:"feat",label:`feat: ${e("@76872:新功能")}`},{value:"fix",label:`fix: ${e("@76872:修复bug")}`},{value:"docs",label:`docs: ${e("@76872:文档修改")}`},{value:"style",label:`style: ${e("@76872:样式修改")}`},{value:"refactor",label:`refactor: ${e("@76872:代码重构")}`},{value:"test",label:`test: ${e("@76872:测试代码")}`},{value:"chore",label:`chore: ${e("@76872:构建/工具修改")}`}]),_e=_([]);Ze(P,me=>{localStorage.setItem("zen-gitsync-standard-commit",me.toString())}),Ze(ce,me=>{localStorage.setItem("zen-gitsync-skip-hooks",me.toString())}),Ze(X,me=>{localStorage.setItem("zen-gitsync-auto-quick-push",me.toString())});const De=ie(()=>{if(!P.value)return c.value||b.value;let me=`${n.value||""}`;return d.value&&(me+=`(${d.value})`),me+=`: ${F.value}`,w.value&&(me+=`
|
|
80
|
-
|
|
81
|
-
${w.value}`),E.value&&(me+=`
|
|
82
|
-
|
|
83
|
-
${E.value}`),me}),ue=ie(()=>P.value?n.value.trim()!==""&&F.value.trim()!=="":c.value.trim()!==""),be=ie(()=>{const me=`${e("@76872:输入提交信息 (默认: ")}${b.value})`;return X.value?`${me}${e("@76872:(按回车一键推送)")}`:me}),G=ie(()=>{const me=e("@76872:简短描述(必填)");return X.value?e("@76872:简短描述(必填,按回车一键推送)"):me}),q=ie(()=>{let me=`git commit -m "${De.value}"`;return ce.value&&(me+=" --no-verify"),me});function ge(){const me=i.config;me&&(M.value=`${e("@76872:输入提交信息 (默认: ")}${me.defaultCommitMessage})`,b.value=me.defaultCommitMessage||"",me.descriptionTemplates&&Array.isArray(me.descriptionTemplates)&&(H.value=me.descriptionTemplates),me.scopeTemplates&&Array.isArray(me.scopeTemplates)&&(A.value=me.scopeTemplates),me.messageTemplates&&Array.isArray(me.messageTemplates)&&(_e.value=me.messageTemplates))}function Q(me){F.value=me,z.value=!1}function re(me){d.value=me,O.value=!1}function ne(){z.value=!0}function te(){O.value=!0}function Ge(){c.value="",F.value="",w.value="",E.value="",n.value="feat",i.autoSetDefaultMessage&&i.defaultCommitMessage&&(c.value=i.defaultCommitMessage)}function fe(){p({text:e("@76872:正在暂存文件..."),showProgress:!1})}function We(me){if(h(),me){S.value=!0;try{setTimeout(async()=>{try{console.log(e("@76872:推送成功,状态已更新"))}catch($e){console.error("一键推送后处理失败:",$e)}finally{S.value=!1}},1e3)}catch($e){console.error("一键推送后处理失败:",$e),S.value=!1}}}function J(me){const $e=me.replace(/\\/g,"/");return i.lockedFiles.some(He=>{const je=He.replace(/\\/g,"/");return $e===je})}function Ce(me){c.value=me,Y.value=!1}async function Oe(me){var je;if(!X.value||!ue.value)return;const $e=k.fileList.some(Ae=>!J(Ae.path)),He=k.hasConflictedFiles;if(!(!$e||!ue.value||!k.hasUpstream||He)&&me.key==="Enter"&&!me.shiftKey){me.preventDefault();try{await((je=T.value)==null?void 0:je.triggerQuickPush())}catch(Ae){console.error("回车自动一键提交失败:",Ae)}}}async function lt(me){try{await i.saveDefaultMessage(me)&&u.success(e("@76872:默认提交信息设置成功"))}catch($e){u.error(`${e("@76872:设置默认提交信息失败: ")}${$e.message}`)}}Ze(()=>k.isAddingFiles,me=>{me&&f.visible&&C(e("@76872:正在暂存文件..."))}),Ze(()=>k.isCommiting,me=>{me&&f.visible&&C(e("@76872:正在提交更改..."))}),Ze(()=>k.isPushing,me=>{me&&f.visible&&h()}),ts(async()=>{const me=localStorage.getItem("zen-gitsync-standard-commit");me!==null&&(P.value=me==="true");const $e=localStorage.getItem("zen-gitsync-skip-hooks");$e!==null&&(ce.value=$e==="true");const He=localStorage.getItem("zen-gitsync-auto-quick-push");He!==null&&(X.value=He==="true"),Ze(()=>i.config,ge,{immediate:!0}),i.config||await i.loadConfig(),i.autoSetDefaultMessage&&i.defaultCommitMessage&&!c.value&&(c.value=i.defaultCommitMessage),k.pendingMergeMessage&&(P.value?F.value=k.pendingMergeMessage:c.value=k.pendingMergeMessage,k.pendingMergeMessage="",u.info(e("@76872:已自动填充合并提交信息")))});const V=_(!1);function y(me,$e){const je=[...me?H.value.filter(Ae=>Ae.toLowerCase().includes(me.toLowerCase())).map(Ae=>({value:Ae})):H.value.map(Ae=>({value:Ae})),{value:"⚙️ 管理模板...",isSettings:!0}];$e(je)}function ae(me,$e){const je=[...me?A.value.filter(Ae=>Ae.toLowerCase().includes(me.toLowerCase())).map(Ae=>({value:Ae})):A.value.map(Ae=>({value:Ae})),{value:"⚙️ 管理模板...",isSettings:!0}];$e(je)}function Fe(me){me.isSettings?(ne(),F.value=""):F.value=me.value}function ye(me){me.isSettings?(te(),d.value=""):d.value=me.value}function Ne(me,$e){const je=[...me?_e.value.filter(Ae=>Ae.toLowerCase().includes(me.toLowerCase())).map(Ae=>({value:Ae})):_e.value.map(Ae=>({value:Ae})),{value:"⚙️ 管理模板...",isSettings:!0}];$e(je)}function ut(me){me.isSettings?(Y.value=!0,c.value=""):c.value=me.value}return(me,$e)=>{const He=st,je=wo,Ae=po,ht=ns,Pt=os,Ft=Et,Bt=Gt;return r(),v(Ue,null,[a("div",{class:Xe(["card app-card",{"is-pushing":t(k).isPushing}])},[a("div",iy,[a("div",ry,[s(Gs,{modelValue:P.value,"onUpdate:modelValue":$e[0]||($e[0]=$=>P.value=$),title:t(e)("@76872:提交模式"),tooltip:t(e)("@76872:选择传统或标准化提交格式"),"active-text":t(e)("@76872:标准化"),"inactive-text":t(e)("@76872:普通"),"active-color":"var(--color-primary)"},null,8,["modelValue","title","tooltip","active-text","inactive-text"]),t(k).userName!==""&&t(k).userEmail!==""?(r(),x(nt,{key:0,tooltip:t(e)("@76872:提交设置"),size:"small",onClick:$e[1]||($e[1]=$=>V.value=!0)},{default:o(()=>[s(He,null,{default:o(()=>[s(t(As))]),_:1})]),_:1},8,["tooltip"])):I("",!0)]),t(k).userName!==""&&t(k).userEmail!==""?(r(),v("div",cy,[s(l1,{ref_key:"gitActionButtonsRef",ref:T,"has-user-commit-message":ue.value,"final-commit-message":De.value,"skip-hooks":ce.value,onAfterCommit:$e[2]||($e[2]=$=>{$&&Ge()}),onAfterPush:We,onBeforePush:fe,onClearFields:Ge},null,8,["has-user-commit-message","final-commit-message","skip-hooks"])])):I("",!0)]),a("div",uy,[a("div",dy,[t(k).userName===""||t(k).userEmail===""?(r(),v("div",py,[s(je,{title:t(e)("@76872:Git用户信息未配置"),type:"warning",closable:!1,"show-icon":""},{default:o(()=>[a("p",null,l(t(e)("@76872:您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:")),1),$e[18]||($e[18]=a("pre",{class:"config-command"},`git config --global user.name "Your Name"
|
|
84
|
-
git config --global user.email "your.email@example.com"`,-1))]),_:1},8,["title"])])):(r(),v("div",fy,[s(To,{command:q.value,title:t(e)("@76872:提交命令预览:"),placeholder:'git commit -m "<提交信息>"'},null,8,["command","title"]),P.value?(r(),v("div",hy,[a("div",gy,[a("div",yy,[s(Pt,{modelValue:n.value,"onUpdate:modelValue":$e[4]||($e[4]=$=>n.value=$),placeholder:t(e)("@76872:提交类型"),class:"type-select",clearable:""},{default:o(()=>[(r(!0),v(Ue,null,tt(se.value,$=>(r(),x(ht,{key:$.value,label:$.label,value:$.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"]),a("div",Cy,[s(Ae,{modelValue:d.value,"onUpdate:modelValue":$e[5]||($e[5]=$=>d.value=$),"fetch-suggestions":ae,placeholder:t(e)("@76872:作用域(可选)"),class:"scope-input",clearable:"",onSelect:ye},null,8,["modelValue","placeholder"])]),a("div",_y,[s(Ae,{modelValue:F.value,"onUpdate:modelValue":$e[6]||($e[6]=$=>F.value=$),"fetch-suggestions":y,placeholder:G.value,class:"description-input",clearable:"",onSelect:Fe,onKeydown:Oe},null,8,["modelValue","placeholder"])])])]),a("div",{class:"advanced-options-toggle",onClick:$e[7]||($e[7]=$=>B.value=!B.value)},[a("span",null,l(B.value?t(e)("@76872:收起"):t(e)("@76872:正文及页脚")),1),s(He,{class:Xe(["toggle-icon",{"is-active":B.value}])},{default:o(()=>[s(t(is))]),_:1},8,["class"])]),jt(a("div",by,[s(Ft,{modelValue:w.value,"onUpdate:modelValue":$e[8]||($e[8]=$=>w.value=$),type:"textarea",rows:4,placeholder:t(e)("@76872:正文(可选):详细描述本次提交的内容和原因"),class:"body-input",clearable:""},null,8,["modelValue","placeholder"]),s(Ft,{modelValue:E.value,"onUpdate:modelValue":$e[9]||($e[9]=$=>E.value=$),placeholder:t(e)("@76872:页脚(可选):如 Closes #123"),class:"footer-input",clearable:""},null,8,["modelValue","placeholder"])],512),[[aa,B.value]])])):(r(),v("div",my,[a("div",vy,[s(Ae,{modelValue:c.value,"onUpdate:modelValue":$e[3]||($e[3]=$=>c.value=$),"fetch-suggestions":Ne,placeholder:be.value,type:"textarea",rows:3,resize:"none",class:"commit-message-input",onSelect:ut,onKeydown:Oe},null,8,["modelValue","placeholder"])])])),s(ly)]))])])],2),s(Zs,{visible:z.value,"onUpdate:visible":$e[10]||($e[10]=$=>z.value=$),type:"description",title:t(e)("@76872:简短描述模板设置"),placeholder:t(e)("@76872:输入新模板内容"),"edit-placeholder":t(e)("@76872:编辑模板内容"),"empty-description":t(e)("@76872:暂无保存的模板"),onUseTemplate:Q},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),s(Zs,{visible:O.value,"onUpdate:visible":$e[11]||($e[11]=$=>O.value=$),type:"scope",title:t(e)("@76872:作用域模板设置"),placeholder:t(e)("@76872:输入新作用域模板"),"edit-placeholder":t(e)("@76872:编辑作用域模板内容"),"empty-description":t(e)("@76872:暂无保存的作用域"),onUseTemplate:re},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),s(Zs,{visible:Y.value,"onUpdate:visible":$e[12]||($e[12]=$=>Y.value=$),type:"message",title:t(e)("@76872:默认提交信息设置"),placeholder:t(e)("@76872:输入新模板内容"),"edit-placeholder":t(e)("@76872:编辑模板内容"),"empty-description":t(e)("@76872:暂无保存的模板"),"show-default-section":!0,"show-help-text":!0,onUseTemplate:Ce,onSetDefault:lt},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),s(zs,{name:"el-fade-in-linear"},{default:o(()=>[S.value?(r(),v("div",wy,[s(He,{class:"is-loading"},{default:o(()=>[s(t(zt))]),_:1}),a("span",null,l(t(e)("@76872:更新状态中...")),1)])):I("",!0)]),_:1}),s(Bm,{visible:t(f).visible,text:t(f).text,"show-progress":t(f).showProgress,progress:t(f).progress},null,8,["visible","text","show-progress","progress"]),s(Mm,{visible:t(m).visible,text:t(m).text,description:t(m).description},null,8,["visible","text","description"]),s(Bt,{modelValue:V.value,"onUpdate:modelValue":$e[17]||($e[17]=$=>V.value=$),title:t(e)("@76872:提交设置"),size:"medium","show-footer":!1,"custom-class":"commit-settings-dialog"},{default:o(()=>[a("div",ky,[s(Gs,{modelValue:ce.value,"onUpdate:modelValue":$e[13]||($e[13]=$=>ce.value=$),title:t(e)("@76872:跳过钩子检查"),tooltip:t(e)("@76872:添加 --no-verify 参数"),"active-color":"var(--color-danger)","icon-class":"warning"},null,8,["modelValue","title","tooltip"]),s(Gs,{modelValue:X.value,"onUpdate:modelValue":$e[14]||($e[14]=$=>X.value=$),title:t(e)("@76872:回车自动提交"),tooltip:t(e)("@76872:输入提交信息后按回车直接执行一键推送"),"active-color":"var(--color-success)","icon-class":"success"},null,8,["modelValue","title","tooltip"]),s(Gs,{modelValue:t(i).autoClosePushModal,"onUpdate:modelValue":$e[15]||($e[15]=$=>t(i).autoClosePushModal=$),title:t(e)("@76872:Push完成自动关闭"),tooltip:t(e)("@76872:推送成功后自动关闭进度弹窗"),"active-color":"var(--color-primary)","icon-class":"info"},null,8,["modelValue","title","tooltip"]),s(Gs,{modelValue:t(i).autoSetDefaultMessage,"onUpdate:modelValue":$e[16]||($e[16]=$=>t(i).autoSetDefaultMessage=$),title:t(e)("@76872:自动填充默认提交信息"),tooltip:t(e)("@76872:打开页面或提交完成后自动填充默认提交信息"),"active-color":"var(--color-success)","icon-class":"success"},null,8,["modelValue","title","tooltip"])])]),_:1},8,["modelValue","title"])],64)}}}),Sy=Je($y,[["__scopeId","data-v-34d5090b"]]),Dy={class:"log-header"},Fy={class:"header-left"},Oy={class:"log-actions"},Ny={key:0,class:"filter-panel-header"},Ty={class:"filter-form"},By={class:"filter-item"},Ay={class:"compact-label"},Ey={class:"filter-item"},Py={class:"compact-label"},Vy={class:"filter-item"},My={class:"compact-label"},Gy={class:"filter-item"},Iy={class:"compact-label"},Ry={class:"filter-actions"},Ly={key:0},xy={key:1,class:"content-area-content"},Uy={class:"table-view-container"},zy={class:"commit-message-cell"},Hy={class:"message-content"},Wy={key:0,class:"branch-container"},jy={class:"message-text"},qy={class:"author-name"},Jy={class:"commit-detail-container"},Ky={key:0,class:"commit-info"},Yy={class:"commit-info-row"},Qy={class:"info-item date-item"},Zy={class:"info-label"},Xy={class:"info-value"},eC={class:"info-item message-item"},tC={class:"info-label"},sC=["innerHTML"],aC=ze({__name:"LogList",setup(j,{expose:k}){const i=Tt();let c=[];const f=_(c),p=_(""),h=_(!1),C=ie(()=>i.isLoadingLog||h.value),m=_(!1),S=_(!1),M=_(null),b=_(!1),P=_(null),n=_([]),d=_(""),F=_(!1),w=_(""),E=_("full-new"),H=_(""),z=_(""),A=_(!1),O=_([]),Y=_(""),ce=_(null),X=_([]),T=_([]),B=_([]),se=_(!1),_e=_(0),De=_(0),ue=_(null),be=_(null),G=ie(()=>f.value),q=ie(()=>n.value.map(de=>({path:de,name:de.split("/").pop()||de})));async function ge(de=!1,g=1){const D=Tt();if(!D.isGitRepo){p.value="当前目录不是Git仓库";return}try{g>1?S.value=!0:h.value=!0;const ee=new URLSearchParams;ee.append("page",g.toString()),ee.append("all",de.toString()),ee.append("with_parents","true"),O.value.length>0&&ee.append("author",O.value.join(",")),T.value.length>0&&ee.append("branch",T.value.join(",")),Y.value&&ee.append("message",Y.value),ce.value&&Array.isArray(ce.value)&&ce.value.length===2&&(ee.append("dateFrom",ce.value[0]),ee.append("dateTo",ce.value[1])),ee.append("_t",Date.now().toString());const K=await(await fetch(`/api/log?${ee.toString()}`)).json();if(!K||!K.data||!Array.isArray(K.data)){p.value="加载提交历史失败: 服务器返回数据格式不正确";return}const oe=g>1;oe?K.data.forEach(W=>c.push(W)):(c.length=0,K.data.forEach(W=>c.push(W))),f.value=[...c],D.currentPage=g,D.totalCommits=K.total||c.length,D.hasMoreData=K.hasMore===!0,!oe&&!de&&gs(()=>{fe(),setTimeout(Se,200)}),p.value=""}catch(ee){p.value="加载提交历史失败: "+(ee instanceof Error?ee.message:String(ee)),g>1&&(D.hasMoreData=!1)}finally{g>1?S.value=!1:h.value=!1}}function Q(de){return de.includes("HEAD -> ")?de.replace("HEAD -> ",""):de.includes("origin/")?de:de.trim()}function re(de){return de.includes("HEAD")?"success":de.includes("origin/")?"warning":"info"}const ne=_(null),te=_(null);function Ge(de){if(!i.hasMoreData||S.value||C.value)return;const g=de.target,{scrollTop:D,scrollHeight:ee,clientHeight:ke}=g;ee-D-ke<=20&&He()}function fe(){if(!ne.value)return;const de=ne.value.$el.querySelector(".el-table__body-wrapper");de&&(te.value=de,te.value&&(te.value.removeEventListener("scroll",Ge,!0),te.value.addEventListener("scroll",Ge,!0)))}function We(){te.value&&(te.value.removeEventListener("scroll",Ge,!0),te.value=null)}function J(de){de.key==="Escape"&&Pe.value&&(Pe.value=!1)}ts(()=>{i.isGitRepo?(i.log.length>0?(c.length=0,i.log.forEach(de=>c.push(de)),i.totalCommits=i.log.length):ge(),ht()):p.value="当前目录不是Git仓库",gs(()=>{setTimeout(()=>{fe()},500)}),Ze(()=>ne.value,de=>{de&&!m.value&&gs(()=>{fe()})}),window.addEventListener("keydown",J)}),Ze(()=>i.allBranches,de=>{de&&de.length>0?B.value=[...de].sort():B.value=[]},{immediate:!0}),ka(()=>{We(),M.value!==null&&(window.clearInterval(M.value),M.value=null),window.removeEventListener("keydown",J)});async function Ce(){i.currentPage=1,i.hasMoreData=!0,await ge(m.value,1),gs(()=>{if(ne.value){const de=ne.value.$el.querySelector(".el-scrollbar__wrap");de&&(de.scrollTop=0)}})}Ze(()=>i.log,de=>{try{c.length=0,Array.isArray(de)&&de.forEach(g=>g&&c.push(g)),i.totalCommits=c.length,i.currentPage=1,i.hasMoreData=!1,f.value=[...c]}catch{}},{immediate:!0}),k({refreshLog:Ce});async function Oe(de){if(de){P.value=de,b.value=!0,F.value=!0,n.value=[],d.value="",w.value="",E.value="full-new",H.value="",z.value="";try{if(!de.hash||de.hash.length<7){d.value="无效的提交哈希值",F.value=!1;return}const D=await(await fetch(`/api/commit-files?hash=${de.hash}`)).json();D.success&&Array.isArray(D.files)?(n.value=D.files,n.value.length>0?await y(de.hash,n.value[0]):d.value="该提交没有变更文件"):d.value=`${e("@A1833:获取文件列表失败: ")}${D.error||"未知错误"}`}catch(g){d.value=`${e("@A1833:获取提交详情失败: ")}${g.message}`}finally{F.value=!1}}}async function lt(de,g){F.value=!0,w.value=g;try{const[D,ee]=await Promise.all([fetch(`/api/commit-file-content?hash=${de}&file=${encodeURIComponent(g)}&version=old`),fetch(`/api/commit-file-content?hash=${de}&file=${encodeURIComponent(g)}&version=new`)]),[ke,K]=await Promise.all([D.json(),ee.json()]);H.value=ke!=null&&ke.success?ke.content||"":`${e("@A1833:获取文件内容失败: ")}${(ke==null?void 0:ke.error)||"未知错误"}`,z.value=K!=null&&K.success?K.content||"":`${e("@A1833:获取文件内容失败: ")}${(K==null?void 0:K.error)||"未知错误"}`,d.value=""}catch(D){const ee=`${e("@A1833:获取文件内容失败: ")}${D.message}`;H.value=ee,z.value=ee,d.value=""}finally{F.value=!1}}async function V(de,g,D){E.value=D,H.value="",z.value="",await ae(de,g)}async function y(de,g){E.value="full-new",await lt(de,g)}async function ae(de,g){F.value=!0,w.value=g;try{const ee=await(await fetch(`/api/commit-file-diff?hash=${de}&file=${encodeURIComponent(g)}`)).json();ee.success?d.value=ee.diff||"没有变更内容":d.value=`${e("@A1833:获取差异失败: ")}${ee.error||"未知错误"}`}catch(D){d.value=`${e("@A1833:获取差异失败: ")}${D.message}`}finally{F.value=!1}}function Fe(de){P.value&&(E.value==="diff"?V(P.value.hash,de,"diff"):y(P.value.hash,de))}function ye(){if(!P.value||!w.value){E.value="diff";return}V(P.value.hash,w.value,"diff")}function Ne(){if(!P.value||!w.value){E.value="full-new";return}y(P.value.hash,w.value)}async function ut(de,g){try{const ee=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:de,context:g})})).json();ee.success?u.success(ee.message):u.error(ee.error||e("@A1833:打开文件失败"))}catch(D){u.error(`${e("@A1833:打开文件失败: ")}${D.message}`)}}async function me(de,g){try{const ee=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:de,context:g})})).json();ee.success?u.success(ee.message):u.error(ee.error||e("@A1833:用VSCode打开文件失败"))}catch(D){u.error(`${e("@A1833:用VSCode打开文件失败: ")}${D.message}`)}}async function $e(de){try{const g=Kn(de);await navigator.clipboard.writeText(g),u.success(e("@A1833:提交信息已复制到剪贴板"))}catch{u.error(e("@A1833:复制失败"))}}function He(){!i.hasMoreData||S.value||C.value||ge(m.value,i.currentPage+1)}function je(){O.value=[],T.value=[],Y.value="",ce.value=null,i.currentPage=1,ge(m.value,1)}function Ae(){i.currentPage=1,ge(m.value,1)}async function ht(){try{const g=await(await fetch("/api/authors")).json();g.success&&Array.isArray(g.authors)?X.value=g.authors.sort():Pt()}catch{Pt()}}function Pt(){const de=new Set;f.value.forEach(g=>{g.author&&de.add(g.author)}),X.value=Array.from(de).sort()}Ze(()=>f.value,()=>{},{deep:!0});function Ft(de,g,D){D.preventDefault(),_e.value=D.clientY,De.value=D.clientX,ue.value=de,se.value=!0,gs(()=>{const ke=be.value;if(ke){const K=ke.getBoundingClientRect(),oe=window.innerWidth,W=window.innerHeight,Ve=8;let wt=D.clientX,_t=D.clientY;wt+K.width>oe&&(wt=Math.max(Ve,D.clientX-K.width)),_t+K.height>W&&(_t=Math.max(Ve,D.clientY-K.height)),De.value=wt,_e.value=_t}});const ee=()=>{se.value=!1,document.removeEventListener("click",ee)};setTimeout(()=>{document.addEventListener("click",ee)},0)}async function Bt(de){if(de)try{await Dt.confirm(`${e("@A1833:确定要撤销提交 ")}${de.hash.substring(0,7)}${e("@A1833: 吗?这将创建一个新的提交来撤销这次提交的更改。")}`,"撤销提交确认",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"});const D=await(await fetch("/api/revert-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:de.hash})})).json();D.success?(u.success(D.message||"已成功撤销提交"),Ce(),i.fetchStatus(),i.getBranchStatus()):u.error(D.error||"撤销提交失败")}catch(g){g!=="cancel"&&u.error("撤销提交失败: "+(g.message||g))}}async function $(de){if(de)try{await Dt.confirm(`${e("@A1833:确定要将提交 ")}${de.hash.substring(0,7)}${e("@A1833: Cherry-Pick 到当前分支吗?")}`,"Cherry-Pick确认",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"});const D=await(await fetch("/api/cherry-pick-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:de.hash})})).json();D.success?(u.success(D.message||"已成功Cherry-Pick提交"),Ce(),i.fetchStatus(),i.getBranchStatus()):u.error(D.error||"Cherry-Pick提交失败")}catch(g){g!=="cancel"&&u.error("Cherry-Pick提交失败: "+(g.message||g))}}async function N(de){if(de)try{await navigator.clipboard.writeText(de.hash),u.success(`${e("@A1833:已复制提交哈希: ")}${de.hash.substring(0,7)}`)}catch(g){u.error(`${e("@A1833:复制提交哈希失败: ")}${g.message}`)}}async function Z(de){if(de)try{await Dt.confirm(`${e("@A1833:确定要将当前分支重置(hard)到提交 ")}${de.hash.substring(0,7)} 吗?
|
|
85
|
-
|
|
86
|
-
警告:这将丢失该提交之后的所有更改!`,"重置确认",{confirmButtonText:"确认重置",cancelButtonText:"取消",type:"warning",dangerouslyUseHTMLString:!0});const D=await(await fetch("/api/reset-to-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:de.hash})})).json();D.success?(u.success(D.message||"已成功重置到指定提交"),Ce(),i.fetchStatus(),i.getBranchStatus()):u.error(D.error||"重置到指定提交失败")}catch(g){g!=="cancel"&&u.error("重置到指定提交失败: "+(g.message||g))}}function Se(){if(!i.hasMoreData||S.value||C.value||m.value)return;if(!te.value){fe();return}const{scrollTop:de,scrollHeight:g,clientHeight:D}=te.value;g-de-D<=50&&He()}const Pe=_(!1);function xe(){Pe.value=!Pe.value}return(de,g)=>{var K;const D=st,ee=yt,ke=Fs;return r(),v(Ue,null,[a("div",{class:Xe(["card",{"fullscreen-mode":Pe.value}])},[a("div",Dy,[a("div",Fy,[a("h2",null,l(t(e)("@A1833:提交历史")),1)]),a("div",Oy,[s(nt,{tooltip:A.value?t(e)("@A1833:隐藏筛选"):t(e)("@A1833:显示筛选"),active:A.value,"custom-class":"filter-button",onClick:g[0]||(g[0]=oe=>A.value=!A.value)},{default:o(()=>[s(D,null,{default:o(()=>[s(t(kn))]),_:1})]),_:1},8,["tooltip","active"]),s(nt,{tooltip:Pe.value?t(e)("@A1833:退出全屏"):t(e)("@A1833:全屏显示"),active:Pe.value,"custom-class":"fullscreen-button",onClick:xe},{default:o(()=>[s(D,null,{default:o(()=>[(r(),x(ga(Pe.value?t(ms):t(bo))))]),_:1})]),_:1},8,["tooltip","active"]),s(nt,{tooltip:t(e)("@A1833:刷新日志"),"custom-class":"refresh-button",onClick:g[1]||(g[1]=oe=>Ce())},{default:o(()=>[s(D,null,{default:o(()=>[s(t(Ds))]),_:1})]),_:1},8,["tooltip"])])]),A.value?(r(),v("div",Ny,[a("div",Ty,[a("div",By,[s(t(os),{modelValue:O.value,"onUpdate:modelValue":g[2]||(g[2]=oe=>O.value=oe),placeholder:t(e)("@A1833:选择作者"),multiple:"",clearable:"",filterable:"",class:"filter-input",size:"small"},{prefix:o(()=>[a("span",Ay,l(t(e)("@A1833:作者")),1)]),default:o(()=>[(r(!0),v(Ue,null,tt(X.value,oe=>(r(),x(t(ns),{key:oe,label:oe,value:oe},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),a("div",Ey,[s(t(os),{modelValue:T.value,"onUpdate:modelValue":g[3]||(g[3]=oe=>T.value=oe),placeholder:t(e)("@A1833:选择分支"),multiple:"",clearable:"",filterable:"",class:"filter-input",size:"small"},{prefix:o(()=>[a("span",Py,l(t(e)("@A1833:分支")),1)]),default:o(()=>[(r(!0),v(Ue,null,tt(B.value,oe=>(r(),x(t(ns),{key:oe,label:oe,value:oe},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),a("div",Vy,[s(t(Et),{modelValue:Y.value,"onUpdate:modelValue":g[4]||(g[4]=oe=>Y.value=oe),placeholder:t(e)("@A1833:提交信息关键词"),clearable:"",class:"filter-input",size:"small",onKeyup:Bs(Ae,["enter"])},{prefix:o(()=>[a("span",My,l(t(e)("@A1833:信息")),1)]),_:1},8,["modelValue","placeholder"])]),a("div",Gy,[s(t($n),{modelValue:ce.value,"onUpdate:modelValue":g[5]||(g[5]=oe=>ce.value=oe),type:"daterange","range-separator":t(e)("@A1833:至"),"start-placeholder":t(e)("@A1833:开始日期"),"end-placeholder":t(e)("@A1833:结束日期"),format:"YYYY-MM-DD","value-format":"YYYY-MM-DD",class:"filter-input date-range",size:"small"},{prefix:o(()=>[a("span",Iy,l(t(e)("@A1833:日期")),1)]),_:1},8,["modelValue","range-separator","start-placeholder","end-placeholder"])]),a("div",Ry,[s(t(ct),{type:"primary",size:"small",onClick:Ae,class:"filter-action-button"},{default:o(()=>[L(l(t(e)("@A1833:应用")),1)]),_:1}),s(t(ct),{type:"info",size:"small",onClick:je,class:"filter-action-button"},{default:o(()=>[L(l(t(e)("@A1833:重置")),1)]),_:1})])])])):I("",!0),a("div",{class:Xe(["content-area",{"with-filter":A.value}])},[p.value?(r(),v("div",Ly,l(p.value),1)):(r(),v("div",xy,[a("div",Uy,[jt((r(),x(t(fo),{ref_key:"tableRef",ref:ne,data:G.value,stripe:"",border:"",class:"log-table","empty-text":C.value?t(e)("@A1833:加载中..."):t(e)("@A1833:没有匹配的提交记录"),height:"450",onRowContextmenu:Ft,onRowClick:g[6]||(g[6]=oe=>Oe(oe))},{default:o(()=>[s(t(Qs),{label:t(e)("@A1833:提交信息"),"min-width":"300"},{default:o(oe=>[a("div",zy,[a("div",Hy,[oe.row.branch?(r(),v("div",Wy,[(r(!0),v(Ue,null,tt(oe.row.branch.split(","),(W,Ve)=>(r(),x(t(vs),{key:Ve,size:"small",type:re(W),class:"branch-tag"},{default:o(()=>[L(l(Q(W)),1)]),_:2},1032,["type"]))),128))])):I("",!0),a("span",jy,l(oe.row.message),1),s(t(ct),{icon:t(ys),size:"small",onClick:qt(W=>$e(oe.row.message),["stop"]),class:"copy-message-btn",title:t(e)("@A1833:复制纯净提交信息(不含类型前缀)")},null,8,["icon","onClick","title"])])])]),_:1},8,["label"]),s(t(Qs),{prop:"date",label:t(e)("@A1833:日期"),width:"150",resizable:""},null,8,["label"]),s(t(Qs),{label:t(e)("@A1833:作者"),width:"100",resizable:""},{default:o(oe=>[s(ee,{content:oe.row.email,placement:"top","show-after":200},{default:o(()=>[a("span",qy,l(oe.row.author),1)]),_:2},1032,["content"])]),_:1},8,["label"])]),_:1},8,["data","empty-text"])),[[ke,C.value]])])]))],2),s(Gt,{modelValue:b.value,"onUpdate:modelValue":g[7]||(g[7]=oe=>b.value=oe),title:`${t(e)("@A1833:提交详情: ")}${(K=P.value)!=null&&K.hash?P.value.hash:t(e)("@A1833:未知")}`,size:"fullscreen",type:"flex",heightMode:"fixed","destroy-on-close":"","custom-class":"commit-detail-dialog"},{default:o(()=>[jt((r(),v("div",Jy,[P.value?(r(),v("div",Ky,[a("div",Yy,[a("div",Qy,[a("span",Zy,l(t(e)("@A1833:日期")),1),a("span",Xy,l(P.value.date),1)]),a("div",eC,[a("span",tC,l(t(e)("@A1833:提交信息")),1),a("div",{class:"info-message",innerHTML:t(Jn)(P.value.message).replace(/\n/g,"<br>")},null,8,sC)])])])):I("",!0),s(Ta,{files:q.value,loading:F.value,diffContent:d.value,selectedFile:w.value,plainText:!1,compareMode:E.value!=="diff",compareOriginal:H.value,compareModified:z.value,context:"commit-detail",emptyText:t(e)("@A1833:没有找到变更文件"),onFileSelect:Fe,onOpenFile:ut,onOpenWithVscode:me},{"header-extra":o(()=>[s(t(ct),{size:"small",type:E.value==="diff"?"primary":"default",onClick:ye},{default:o(()=>[L(l(t(e)("@A1833:仅显示差异")),1)]),_:1},8,["type"]),s(t(ct),{size:"small",type:E.value!=="diff"?"primary":"default",onClick:Ne},{default:o(()=>[L(l(t(e)("@A1833:显示完整对比")),1)]),_:1},8,["type"])]),_:1},8,["files","loading","diffContent","selectedFile","compareMode","compareOriginal","compareModified","emptyText"])])),[[ke,F.value]])]),_:1},8,["modelValue","title"])],2),jt(a("div",{class:Xe(["context-menu",{"fullscreen-context-menu":Pe.value}]),style:ls({top:_e.value+"px",left:De.value+"px"}),ref_key:"contextMenuRef",ref:be},[a("div",{class:"context-menu-item",onClick:g[8]||(g[8]=oe=>Oe(ue.value))},[g[13]||(g[13]=a("i",{class:"el-icon-view"},null,-1)),L(" "+l(t(e)("@A1833:查看详情")),1)]),a("div",{class:"context-menu-item",onClick:g[9]||(g[9]=oe=>N(ue.value))},[g[14]||(g[14]=a("i",{class:"el-icon-document-copy"},null,-1)),L(" "+l(t(e)("@A1833:复制提交哈希")),1)]),a("div",{class:"context-menu-item",onClick:g[10]||(g[10]=oe=>Z(ue.value))},[g[15]||(g[15]=a("i",{class:"el-icon-refresh-right"},null,-1)),L(" "+l(t(e)("@A1833:重置到该提交(hard)")),1)]),a("div",{class:"context-menu-item",onClick:g[11]||(g[11]=oe=>Bt(ue.value))},[g[16]||(g[16]=a("i",{class:"el-icon-delete"},null,-1)),L(" "+l(t(e)("@A1833:撤销提交 (Revert)")),1)]),a("div",{class:"context-menu-item",onClick:g[12]||(g[12]=oe=>$(ue.value))},[g[17]||(g[17]=a("i",{class:"el-icon-edit"},null,-1)),L(" Cherry"+l(t(e)("@A1833:-Pick 到当前分支")),1)])],6),[[aa,se.value]])],64)}}}),oC=Je(aC,[["__scopeId","data-v-2e26ac7e"]]),nC={class:"dialog-toolbar"},lC=["disabled"],iC={class:"btn-text"},rC=["disabled"],cC={class:"btn-text"},uC=["disabled"],dC={class:"btn-text"},pC={class:"history-scroll"},fC={key:0,class:"loading-state"},mC={class:"loading-text"},vC={key:2,class:"history-list"},hC=["onClick"],gC={class:"command-info"},yC={class:"command-text"},CC={class:"command-meta"},_C={class:"timestamp"},bC={class:"duration"},wC={class:"item-actions"},kC={key:0,class:"item-details"},$C={key:0,class:"output-section"},SC={class:"output-header"},DC=["onClick"],FC={class:"output-content"},OC={key:0,class:"truncation-notice"},NC={class:"output-header"},TC={class:"output-content"},BC={key:0,class:"truncation-notice"},AC={key:2,class:"output-section error"},EC={class:"output-header"},PC={class:"output-content"},VC=ze({__name:"CommandHistory",setup(j){const k=Tt(),i=_([]),c=_(!1),f=_(!1),p=_(!1),h=_(!1),C=_(new Set),m=_(!1),S=_(!1);function M(){S.value=!0,i.value.length===0&&b()}async function b(){try{if(c.value=!0,k.socket&&k.socket.connected)k.socket.emit("request_full_history");else{const B=await(await fetch("/api/command-history")).json();B.success?i.value=B.history:u.error(`${e("@81F0F:加载命令历史失败: ")}${B.error}`)}}catch(T){u.error(`${e("@81F0F:加载命令历史失败: ")}${T.message}`)}finally{c.value=!1}}async function P(){if(i.value.length===0){u.warning(e("@81F0F:没有可复制的命令历史"));return}try{p.value=!0;const T=i.value.map(B=>{let se=`# ${F(B.timestamp)}${e("@81F0F: (耗时: ")}${w(B.executionTime)}) - ${B.success?e("@81F0F:成功"):e("@81F0F:失败")}
|
|
87
|
-
`;if(se+=`${B.command}
|
|
88
|
-
`,B.stdout&&(se+=`
|
|
89
|
-
# 输出:
|
|
90
|
-
${B.stdout}
|
|
91
|
-
`),B.stderr){const _e=O(B.command)?e("@81F0F:输出信息"):e("@81F0F:错误输出");se+=`
|
|
92
|
-
# ${_e}:
|
|
93
|
-
${B.stderr}
|
|
94
|
-
`}return B.error&&(se+=`
|
|
95
|
-
# 错误信息:
|
|
96
|
-
${B.error}
|
|
97
|
-
`),se}).join(`
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
`);await navigator.clipboard.writeText(T),u({message:e("@81F0F:命令历史已复制到剪贴板"),type:"success",zIndex:1e5})}catch(T){u.error(`${e("@81F0F:复制失败: ")}${T.message}`)}finally{p.value=!1}}async function n(){if(i.value.length===0){u.warning(e("@81F0F:没有可复制的命令"));return}try{m.value=!0;const T=i.value.map(B=>B.command).join(`
|
|
101
|
-
`);await navigator.clipboard.writeText(T),u({message:e("@81F0F:命令列表已复制到剪贴板"),type:"success",zIndex:1e5})}catch(T){u.error(`${e("@81F0F:复制失败: ")}${T.message}`)}finally{m.value=!1}}async function d(){try{if(await Dt.confirm(e("@81F0F:确定要清空所有命令历史记录吗?此操作不可恢复。"),e("@81F0F:清空命令历史"),{confirmButtonText:e("@81F0F:确定"),cancelButtonText:e("@81F0F:取消"),type:"warning"}),f.value=!0,k.socket&&k.socket.connected)k.socket.emit("clear_command_history");else{const B=await(await fetch("/api/clear-command-history",{method:"POST",headers:{"Content-Type":"application/json"}})).json();B.success?(i.value=[],u.success(e("@81F0F:命令历史已清空"))):u.error(`${e("@81F0F:清空命令历史失败: ")}${B.error}`)}}catch(T){T!=="cancel"&&T.toString()!=="Error: cancel"&&u.error(`${e("@81F0F:清空命令历史失败: ")}${T.message}`)}finally{f.value=!1}}function F(T){return new Date(T).toLocaleString()}function w(T){return T<1e3?`${T}ms`:`${(T/1e3).toFixed(2)}s`}function E(T){C.value.has(T)?C.value.delete(T):C.value.add(T)}function H(T){return C.value.has(T)}async function z(T){try{await navigator.clipboard.writeText(T),u({message:e("@81F0F:命令已复制到剪贴板"),type:"success",zIndex:1e5})}catch(B){u.error(`${e("@81F0F:复制失败: ")}${B.message}`)}}function A(T){return T.includes("git push")||T.includes("git-push")}function O(T){return!!A(T)}async function Y(T){try{let B="";if(T.stdout&&(B+=`标准输出:
|
|
102
|
-
${T.stdout}
|
|
103
|
-
|
|
104
|
-
`),T.stderr){const se=O(T.command)?e("@81F0F:输出信息"):e("@81F0F:错误输出");B+=`${se}:
|
|
105
|
-
${T.stderr}
|
|
106
|
-
|
|
107
|
-
`}T.error&&(B+=`错误信息:
|
|
108
|
-
${T.error}`),await navigator.clipboard.writeText(B.trim()),u({message:e("@81F0F:输出已复制到剪贴板"),type:"success",zIndex:1e5})}catch(B){u.error(`${e("@81F0F:复制失败: ")}${B.message}`)}}function ce(){if(!k.socket){console.error(e("@81F0F:Socket实例不可用"));return}k.socket.on("initial_command_history",T=>{i.value=T.history,h.value=!0}),k.socket.on("command_history_update",T=>{i.value.unshift(T.newCommand),i.value.length>100&&i.value.pop(),h.value=!0}),k.socket.on("full_command_history",T=>{i.value=T.history,c.value=!1,h.value=!0}),k.socket.on("command_history_cleared",T=>{T.success&&(i.value=[],u.success(e("@81F0F:命令历史已清空"))),f.value=!1}),k.socket.on("connect",()=>{h.value=!0,u.success(e("@81F0F:已连接到实时命令历史"))}),k.socket.on("disconnect",()=>{h.value=!1,u.warning(e("@81F0F:实时命令历史连接已断开"))})}function X(){k.socket&&(k.socket.off("initial_command_history"),k.socket.off("command_history_update"),k.socket.off("full_command_history"),k.socket.off("command_history_cleared"))}return ts(()=>{ce(),k.socket||(console.log(e("@81F0F:尝试初始化Socket连接")),k.initSocketConnection())}),Hs(()=>{X()}),(T,B)=>{const se=st,_e=vs,De=yt,ue=Qt,be=wo;return r(),v(Ue,null,[s(nt,{tooltip:t(e)("@81F0F:查看Git命令历史"),size:"medium",onClick:M},{default:o(()=>[s(se,null,{default:o(()=>[s(t($a))]),_:1})]),_:1},8,["tooltip"]),s(Gt,{modelValue:S.value,"onUpdate:modelValue":B[0]||(B[0]=G=>S.value=G),title:t(e)("@81F0F:Git 命令历史"),"destroy-on-close":"","custom-class":"command-history-dialog","append-to-body":!0},{default:o(()=>[a("div",nC,[s(_e,{type:h.value?"success":"danger",size:"small",effect:"dark",class:"socket-status"},{default:o(()=>[L(l(h.value?t(e)("@81F0F:实时更新"):t(e)("@81F0F:未连接")),1)]),_:1},8,["type"]),s(De,{content:t(e)("@81F0F:只复制命令列表(不含输出)"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[a("button",{class:"modern-btn copy-commands-button enhanced-btn",onClick:n,disabled:i.value.length===0||m.value},[m.value?(r(),x(se,{key:1,class:"btn-icon is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(se,{key:0,class:"btn-icon"},{default:o(()=>[s(t(ys))]),_:1})),a("span",iC,l(t(e)("@81F0F:命令")),1)],8,lC)]),_:1},8,["content"]),s(De,{content:t(e)("@81F0F:复制完整命令历史(含输出)"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[a("button",{class:"modern-btn copy-all-button enhanced-btn",onClick:P,disabled:i.value.length===0||p.value},[p.value?(r(),x(se,{key:1,class:"btn-icon is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(se,{key:0,class:"btn-icon"},{default:o(()=>[s(t(ys))]),_:1})),a("span",cC,l(t(e)("@81F0F:全部")),1)],8,rC)]),_:1},8,["content"]),s(De,{content:t(e)("@81F0F:清空命令历史"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[a("button",{class:"modern-btn clear-button enhanced-btn danger-btn",onClick:d,disabled:i.value.length===0||f.value},[f.value?(r(),x(se,{key:1,class:"btn-icon is-loading"},{default:o(()=>[s(t(zt))]),_:1})):(r(),x(se,{key:0,class:"btn-icon"},{default:o(()=>[s(t(Zt))]),_:1})),a("span",dC,l(t(e)("@81F0F:清空")),1)],8,uC)]),_:1},8,["content"])]),a("div",pC,[c.value&&i.value.length===0?(r(),v("div",fC,[s(se,{class:"loading-icon is-loading"},{default:o(()=>[s(t(zt))]),_:1}),a("div",mC,l(t(e)("@81F0F:加载命令历史...")),1)])):i.value.length===0?(r(),x(ue,{key:1,description:t(e)("@81F0F:暂无命令历史")},null,8,["description"])):(r(),v("div",vC,[(r(!0),v(Ue,null,tt(i.value,(G,q)=>(r(),v("div",{key:q,class:Xe(["history-item",{"is-error":!G.success}])},[a("div",{class:"item-header",onClick:ge=>E(q)},[a("div",gC,[a("div",yC,[s(_e,{size:"small",type:G.success?"success":"danger",effect:"dark",class:"status-tag"},{default:o(()=>[L(l(G.success?t(e)("@81F0F:成功"):t(e)("@81F0F:失败")),1)]),_:2},1032,["type"]),a("code",null,l(G.command),1)]),a("div",CC,[a("span",_C,l(F(G.timestamp)),1),a("span",bC,l(t(e)("@81F0F:耗时: "))+l(w(G.executionTime)),1)])]),a("div",wC,[s(nt,{tooltip:t(e)("@81F0F:复制命令"),"custom-class":"item-copy-button",onClick:qt(ge=>z(G.command),["stop"])},{default:o(()=>[s(se,null,{default:o(()=>[s(t(ys))]),_:1})]),_:2},1032,["tooltip","onClick"]),a("div",{class:Xe(["expand-button",{"is-expanded":H(q)}])},[s(se,{class:"btn-icon"},{default:o(()=>[H(q)?(r(),x(t(ro),{key:0})):(r(),x(t(is),{key:1}))]),_:2},1024)],2)])],8,hC),H(q)?(r(),v("div",kC,[G.stdout?(r(),v("div",$C,[a("div",SC,[a("h4",null,l(t(e)("@81F0F:标准输出")),1),s(De,{content:t(e)("@81F0F:复制输出"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[a("button",{class:"modern-btn output-copy-button enhanced-btn",onClick:ge=>Y(G)},[s(se,{class:"btn-icon"},{default:o(()=>[s(t(ys))]),_:1})],8,DC)]),_:2},1032,["content"])]),a("pre",FC,l(G.stdout),1),G.isStdoutTruncated?(r(),v("div",OC,[s(be,{type:"info",closable:!1,"show-icon":""},{default:o(()=>[L(l(t(e)("@81F0F:输出内容过长已被截断,请直接执行命令查看完整输出")),1)]),_:1})])):I("",!0)])):I("",!0),G.stderr?(r(),v("div",{key:1,class:Xe(["output-section",O(G.command)?"":"error"])},[a("div",NC,[a("h4",null,l(O(G.command)?t(e)("@81F0F:输出信息"):t(e)("@81F0F:错误输出")),1)]),a("pre",TC,l(G.stderr),1),G.isStderrTruncated?(r(),v("div",BC,[s(be,{type:"info",closable:!1,"show-icon":""},{default:o(()=>[L(l(O(G.command)?t(e)("@81F0F:输出信息"):t(e)("@81F0F:错误输出"))+l(t(e)("@81F0F:内容过长已被截断,请直接执行命令查看完整输出")),1)]),_:2},1024)])):I("",!0)],2)):I("",!0),G.error?(r(),v("div",AC,[a("div",EC,[a("h4",null,l(t(e)("@81F0F:错误信息")),1)]),a("pre",PC,l(G.error),1)])):I("",!0)])):I("",!0)],2))),128))]))])]),_:1},8,["modelValue","title"])],64)}}}),MC=Je(VC,[["__scopeId","data-v-807a0511"]]),GC={class:"inline-card"},IC={key:0,class:"inline-card__icon"},RC={class:"inline-card__content"},LC={class:"inline-card__actions"},xC=ze({__name:"InlineCard",setup(j){const k=Sn(),i=ie(()=>{var f;const c=(f=k.icon)==null?void 0:f.call(k);return Array.isArray(c)?c.length>0:!!c});return(c,f)=>(r(),v("div",GC,[i.value?(r(),v("div",IC,[Yt(c.$slots,"icon",{},void 0,!0)])):I("",!0),a("div",RC,[Yt(c.$slots,"content",{},()=>[Yt(c.$slots,"default",{},void 0,!0)],!0)]),a("div",LC,[Yt(c.$slots,"actions",{},void 0,!0)])]))}}),Ba=Je(xC,[["__scopeId","data-v-ccf4913a"]]),UC={key:0},zC=ze({__name:"RemoteRepoCard",setup(j){const k=Tt();return(i,c)=>{const f=Lt,p=yt,h=st;return t(k).remoteUrl?(r(),v("div",UC,[s(Ba,{class:"footer-right",compact:""},{content:o(()=>[s(f,{"icon-class":"remote-repo","class-name":"remote-repo-icon"}),s(p,{content:t(e)("@F13B4:复制克隆命令"),placement:"top",effect:"dark","show-after":300},{default:o(()=>[a("span",{class:"repo-url clickable",onClick:c[0]||(c[0]=C=>t(k).copyCloneCommand())},l(t(k).remoteUrl),1)]),_:1},8,["content"])]),actions:o(()=>[s(nt,{size:"small",tooltip:t(e)("@F13B4:复制仓库地址"),onClick:c[1]||(c[1]=C=>t(k).copyRemoteUrl())},{default:o(()=>[s(h,null,{default:o(()=>[s(t(Ca))]),_:1})]),_:1},8,["tooltip"])]),_:1})])):I("",!0)}}}),HC=Je(zC,[["__scopeId","data-v-bdb2d4de"]]),WC={key:0,class:"branch-info"},jC=["aria-label","title"],qC={class:"create-branch-content"},JC={class:"form-label"},KC={class:"form-label"},YC={class:"dialog-footer"},QC={class:"footer-actions"},ZC=["disabled"],XC=ze({__name:"BranchSelector",emits:["branchChanged"],setup(j,{emit:k}){const i=Tt(),c=k,f=_(!1),p=_(""),h=_("");function C(){h.value=i.currentBranch,f.value=!0}async function m(){await i.createBranch(p.value,h.value)&&(f.value=!1,p.value="",c("branchChanged"))}async function S(P){await i.changeBranch(P)&&(c("branchChanged"),i.refreshLog())}const M=_(!1);async function b(){if(!M.value){M.value=!0;try{await Promise.all([i.getCurrentBranch(!0),i.getBranchStatus(!0),i.getAllBranches()]),c("branchChanged"),i.refreshLog()}finally{M.value=!1}}}return(P,n)=>{const d=st,F=yt,w=ns,E=os,H=Et,z=bs,A=_s;return t(i).currentBranch?(r(),v("div",WC,[s(Ba,{class:"branch-wrapper",compact:""},{content:o(()=>[s(F,{content:t(e)("@F13B4:当前分支"),placement:"top",effect:"dark","show-after":200},{default:o(()=>[a("span",{class:"branch-label","aria-label":t(e)("@F13B4:当前分支"),title:t(e)("@F13B4:当前分支")},[s(d,{class:"branch-icon"},{default:o(()=>n[5]||(n[5]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("path",{fill:"currentColor",d:"M256 160a96 96 0 1 1 0 192 96 96 0 0 1 0-192zm0 512a96 96 0 1 1 0 192 96 96 0 0 1 0-192zm512-480a96 96 0 1 1 0 192 96 96 0 0 1 0-192zM352 256h288a128 128 0 0 1 128 128v48a144 144 0 0 1-144 144H368a16 16 0 0 0-16 16v64h-96v-64a112 112 0 0 1 112-112h256a80 80 0 0 0 80-80v-16a64 64 0 0 0-64-64H352v-64z"})],-1)])),_:1})],8,jC)]),_:1},8,["content"]),s(E,{modelValue:t(i).currentBranch,"onUpdate:modelValue":n[0]||(n[0]=O=>t(i).currentBranch=O),onChange:S,loading:t(i).isChangingBranch,class:"branch-select"},{default:o(()=>[(r(!0),v(Ue,null,tt(t(i).allBranches,O=>(r(),x(w,{key:O,label:O,value:O},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"])]),actions:o(()=>[s(nt,{tooltip:t(e)("@F13B4:创建新分支"),onClick:C},{default:o(()=>[s(d,null,{default:o(()=>[s(t(as))]),_:1})]),_:1},8,["tooltip"]),s(nt,{tooltip:t(e)("@CMDCON:刷新"),onClick:b},{default:o(()=>[s(d,{class:Xe({"is-loading":M.value})},{default:o(()=>[s(t(la))]),_:1},8,["class"])]),_:1},8,["tooltip"])]),_:1}),s(Gt,{modelValue:f.value,"onUpdate:modelValue":n[4]||(n[4]=O=>f.value=O),title:t(e)("@F13B4:创建新分支"),size:"small","destroy-on-close":!0,"append-to-body":!0,"custom-class":"create-branch-dialog"},{footer:o(()=>[a("div",YC,[a("div",QC,[a("button",{type:"button",class:"dialog-cancel-btn",onClick:n[3]||(n[3]=O=>f.value=!1)},l(t(e)("@F13B4:取消")),1),a("button",{type:"button",class:"dialog-confirm-btn",onClick:m,disabled:t(i).isCreatingBranch},[t(i).isCreatingBranch?(r(),x(d,{key:1,class:"is-loading"},{default:o(()=>n[6]||(n[6]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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})):(r(),x(d,{key:0},{default:o(()=>[s(t(Os))]),_:1})),a("span",null,l(t(e)("@F13B4:创建")),1)],8,ZC)])])]),default:o(()=>[a("div",qC,[s(A,{model:{newBranchName:p.value,selectedBaseBranch:h.value},"label-position":"top"},{default:o(()=>[s(z,null,{label:o(()=>[a("div",JC,[s(d,{class:"label-icon"},{default:o(()=>[s(t(as))]),_:1}),a("span",null,l(t(e)("@F13B4:新分支名称")),1)])]),default:o(()=>[s(H,{modelValue:p.value,"onUpdate:modelValue":n[1]||(n[1]=O=>p.value=O),placeholder:t(e)("@F13B4:请输入新分支名称"),class:"modern-input",size:"large",onKeyup:Bs(m,["enter"])},null,8,["modelValue","placeholder"])]),_:1}),s(z,null,{label:o(()=>[a("div",KC,[s(d,{class:"label-icon"},{default:o(()=>[s(t(io))]),_:1}),a("span",null,l(t(e)("@F13B4:基于分支")),1)])]),default:o(()=>[s(E,{modelValue:h.value,"onUpdate:modelValue":n[2]||(n[2]=O=>h.value=O),placeholder:t(e)("@F13B4:选择基础分支"),class:"modern-select",size:"large",style:{width:"100%"}},{default:o(()=>[(r(!0),v(Ue,null,tt(t(i).allBranches,O=>(r(),x(w,{key:O,label:O,value:O},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["modelValue","title"])])):I("",!0)}}}),e_=Je(XC,[["__scopeId","data-v-a25ce449"]]),t_=["element-loading-text"],s_={class:"info-section"},a_={class:"info-card"},o_={class:"info-icon"},n_={class:"info-content"},l_={class:"info-title"},i_={class:"info-desc"},r_={class:"basic-info-section"},c_={class:"basic-info-grid"},u_={class:"settings-section"},d_={class:"section-title"},p_={class:"settings-grid"},f_={class:"setting-row"},m_={class:"setting-label"},v_={class:"setting-row"},h_={class:"setting-label"},g_={class:"setting-row"},y_={class:"setting-label"},C_={class:"setting-row"},__={class:"setting-label"},b_={class:"setting-row"},w_={class:"setting-label"},k_={class:"user-settings-footer"},$_={class:"footer-actions"},S_=["disabled"],D_=["disabled"],F_=ze({__name:"GitGlobalSettingsDialog",props:{modelValue:{type:Boolean}},emits:["update:modelValue"],setup(j,{emit:k}){const i=Tt(),c=j,f=k,p=_(!1),h=_(!1),C=_(""),m=_(""),S=_(!1),M=_("false"),b=_(!1),P=_("true"),n=_("main");let d="",F="",w=!1,E="false",H=!1,z="true",A="main";Ze(()=>c.modelValue,async se=>{if(p.value=se,se){C.value=i.userName,m.value=i.userEmail;try{h.value=!0,await X()}finally{h.value=!1}d=C.value,F=m.value,w=S.value,E=M.value,H=b.value,z=P.value,A=n.value}},{immediate:!0});function O(se){f("update:modelValue",se)}async function Y(se){try{const De=await(await fetch("/api/exec",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:`git config --global --get ${se}`})})).json();if(De.success)return String(De.stdout||"").trim()}catch{}return""}async function ce(se,_e){const ue=await(await fetch("/api/exec",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:`git config --global ${se} ${_e}`})})).json();if(!ue.success)throw new Error(ue.error||`${e("@42BB9:设置 ")}${se}${e("@42BB9: 失败")}`)}async function X(){const[se,_e,De,ue,be]=await Promise.all([Y("push.autoSetupRemote"),Y("pull.rebase"),Y("fetch.prune"),Y("core.autocrlf"),Y("init.defaultBranch")]);S.value=(se||"false").toLowerCase()==="true";const G=(_e||"false").toLowerCase();M.value=G==="true"||G==="merges"?G:"false",b.value=(De||"false").toLowerCase()==="true";const q=(ue||"true").toLowerCase();P.value=q==="true"||q==="input"?q:"false",n.value=be||"main"}async function T(){const se=[];try{S.value!==w&&se.push(ce("push.autoSetupRemote",S.value?"true":"false")),M.value!==E&&se.push(ce("pull.rebase",M.value)),b.value!==H&&se.push(ce("fetch.prune",b.value?"true":"false")),P.value!==z&&se.push(ce("core.autocrlf",P.value));const _e=(n.value||"").trim();return _e&&_e!==A&&se.push(ce("init.defaultBranch",_e)),se.length===0||(await Promise.all(se),u.success(e("@42BB9:已保存变更的 Git 配置")),w=S.value,E=M.value,H=b.value,z=P.value,A=_e||A),!0}catch(_e){return u.error(_e.message),!1}}async function B(){if(!C.value||!m.value){u.warning(e("@42BB9:用户名和邮箱不能为空"));return}let se=!0;(C.value!==d||m.value!==F)&&(se=await i.restoreUserConfig(C.value,m.value),se&&(d=C.value,F=m.value));const _e=await T();se&&_e&&(C.value===d&&m.value,p.value=!1)}return(se,_e)=>{const De=st,ue=Et,be=bs,G=yt,q=ws,ge=ns,Q=os,re=_s,ne=Fs;return r(),x(Gt,{modelValue:p.value,"onUpdate:modelValue":[_e[8]||(_e[8]=te=>p.value=te),O],title:t(e)("@42BB9:Git 全局设置"),size:"large","destroy-on-close":!0,"custom-class":"user-settings-dialog"},{footer:o(()=>[a("div",k_,[_e[9]||(_e[9]=a("div",null,null,-1)),a("div",$_,[a("button",{type:"button",class:"dialog-cancel-btn",onClick:_e[7]||(_e[7]=te=>p.value=!1),disabled:h.value},l(t(e)("@42BB9:取消")),9,S_),a("button",{type:"button",class:"dialog-confirm-btn",onClick:B,disabled:h.value},[s(De,null,{default:o(()=>[s(t(Os))]),_:1}),a("span",null,l(t(e)("@42BB9:保存设置")),1)],8,D_)])])]),default:o(()=>[jt((r(),v("div",{class:"user-settings-content","element-loading-text":t(e)("@42BB9:正在加载配置..."),"element-loading-background":"rgba(0, 0, 0, 0.15)"},[a("div",s_,[a("div",a_,[a("div",o_,[s(De,null,{default:o(()=>[s(t(cs))]),_:1})]),a("div",n_,[a("p",l_,l(t(e)("@42BB9:全局配置")),1),a("p",i_,l(t(e)("@42BB9:这些设置将影响全局 Git 配置,对所有 Git 仓库生效")),1)])])]),s(re,{class:"user-form","label-width":"auto",model:{tempUserName:C.value,tempUserEmail:m.value}},{default:o(()=>[a("div",r_,[a("div",c_,[s(be,{class:"form-item",label:t(e)("@42BB9:用户名")},{default:o(()=>[s(ue,{modelValue:C.value,"onUpdate:modelValue":_e[0]||(_e[0]=te=>C.value=te),placeholder:t(e)("@42BB9:请输入 Git 用户名"),class:"modern-input"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(be,{class:"form-item",label:t(e)("@42BB9:邮箱地址")},{default:o(()=>[s(ue,{modelValue:m.value,"onUpdate:modelValue":_e[1]||(_e[1]=te=>m.value=te),placeholder:t(e)("@42BB9:请输入 Git 邮箱地址"),class:"modern-input"},null,8,["modelValue","placeholder"])]),_:1},8,["label"])])]),a("div",u_,[a("div",d_,[s(De,{class:"title-icon"},{default:o(()=>[s(t(As))]),_:1}),a("span",null,l(t(e)("@42BB9:高级配置")),1)]),a("div",p_,[a("div",f_,[a("label",m_,[L(l(t(e)("@42BB9:自动设置上游"))+" ",1),s(G,{content:t(e)("@42BB9:首次 git push 时,自动为当前分支创建远程同名分支并建立跟踪关系(等同于 push -u)。"),placement:"top","show-after":200},{default:o(()=>[s(De,{class:"qmark"},{default:o(()=>[s(t(cs))]),_:1})]),_:1},8,["content"])]),s(q,{modelValue:S.value,"onUpdate:modelValue":_e[2]||(_e[2]=te=>S.value=te)},null,8,["modelValue"])]),a("div",v_,[a("label",h_,l(t(e)("@42BB9:拉取策略")),1),s(Q,{modelValue:M.value,"onUpdate:modelValue":_e[3]||(_e[3]=te=>M.value=te),class:"modern-input",size:"default"},{default:o(()=>[s(ge,{label:t(e)("@42BB9:merge (默认)"),value:"false"},null,8,["label"]),s(ge,{label:"rebase",value:"true"}),s(ge,{label:t(e)("@42BB9:rebase(保留合并)"),value:"merges"},null,8,["label"])]),_:1},8,["modelValue"])]),a("div",g_,[a("label",y_,[L(l(t(e)("@42BB9:自动清理远程分支"))+" ",1),s(G,{content:t(e)("@42BB9:在 git fetch 时自动 prune,移除已在远程删除但本地仍保留的远程分支引用。"),placement:"top","show-after":200},{default:o(()=>[s(De,{class:"qmark"},{default:o(()=>[s(t(cs))]),_:1})]),_:1},8,["content"])]),s(q,{modelValue:b.value,"onUpdate:modelValue":_e[4]||(_e[4]=te=>b.value=te)},null,8,["modelValue"])]),a("div",C_,[a("label",__,l(t(e)("@42BB9:换行符处理")),1),s(Q,{modelValue:P.value,"onUpdate:modelValue":_e[5]||(_e[5]=te=>P.value=te),class:"modern-input",size:"default"},{default:o(()=>[s(ge,{label:"true (Windows)",value:"true"}),s(ge,{label:"input",value:"input"}),s(ge,{label:"false",value:"false"})]),_:1},8,["modelValue"])]),a("div",b_,[a("label",w_,[L(l(t(e)("@42BB9:默认初始化分支"))+" ",1),s(G,{content:t(e)("@42BB9:新建仓库时(git init)默认创建的分支名,常见为 main 或 master。"),placement:"top","show-after":200},{default:o(()=>[s(De,{class:"qmark"},{default:o(()=>[s(t(cs))]),_:1})]),_:1},8,["content"])]),s(ue,{modelValue:n.value,"onUpdate:modelValue":_e[6]||(_e[6]=te=>n.value=te),placeholder:t(e)("@42BB9:例如: main"),class:"modern-input",size:"default"},null,8,["modelValue","placeholder"])])])])]),_:1},8,["model"])],8,t_)),[[ne,h.value]])]),_:1},8,["modelValue","title"])}}}),O_=Je(F_,[["__scopeId","data-v-d6a50ef5"]]),N_={"zh-CN":ko,"en-US":Dn};function T_(j){return N_[j]||ko}const jo=wa("locale",()=>{const j=_(Gn()),k=ie(()=>T_(j.value));function i(c){Mn(c),j.value=c}return{currentLocale:j,elementPlusLocale:k,changeLocale:i}}),B_={class:"language-switcher"},A_={class:"language-text"},E_=ze({__name:"LanguageSwitcher",setup(j){const k=jo(),i=ie(()=>Ua[k.currentLocale]),c=f=>{k.changeLocale(f)};return(f,p)=>(r(),x(t(ho),{onCommand:c,trigger:"click"},{dropdown:o(()=>[s(t(mo),null,{default:o(()=>[(r(!0),v(Ue,null,tt(t($o),h=>(r(),x(t(vo),{key:h,command:h,disabled:h===t(k).currentLocale},{default:o(()=>[L(l(t(Ua)[h]),1)]),_:2},1032,["command","disabled"]))),128))]),_:1})]),default:o(()=>[a("span",B_,[s(t(st),{class:"language-icon"},{default:o(()=>p[0]||(p[0]=[a("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"},[a("circle",{cx:"12",cy:"12",r:"10"}),a("line",{x1:"2",y1:"12",x2:"22",y2:"12"}),a("path",{d:"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"})],-1)])),_:1}),a("span",A_,l(i.value),1)])]),_:1}))}}),P_=Je(E_,[["__scopeId","data-v-f171f8a8"]]),V_=ze({__name:"ThemeSwitcher",setup(j){const k=_(!1);function i(){k.value=!k.value;const f=document.documentElement;k.value?(f.setAttribute("data-theme","dark"),localStorage.setItem("theme","dark")):(f.removeAttribute("data-theme"),localStorage.setItem("theme","light"))}function c(){const f=localStorage.getItem("theme"),p=window.matchMedia("(prefers-color-scheme: dark)").matches;(f==="dark"||!f&&p)&&(k.value=!0,document.documentElement.setAttribute("data-theme","dark"))}return ts(()=>{c()}),(f,p)=>{const h=st;return r(),x(nt,{tooltip:k.value?t(e)("@F13B4:切换到浅色主题"):t(e)("@F13B4:切换到深色主题"),size:"large",onClick:i},{default:o(()=>[s(h,null,{default:o(()=>[k.value?(r(),x(t(Fn),{key:0})):(r(),x(t(On),{key:1}))]),_:1})]),_:1},8,["tooltip"])}}}),M_=Je(V_,[["__scopeId","data-v-8feb4f7e"]]),G_="data:image/svg+xml,%3csvg%20width='200'%20height='200'%20viewBox='0%200%20200%20200'%20xmlns='http://www.w3.org/2000/svg'%3e%3c!--%20主分支%20--%3e%3cline%20x1='40'%20y1='40'%20x2='40'%20y2='160'%20stroke='%2334495e'%20stroke-width='8'%20stroke-linecap='round'%20/%3e%3c!--%20特性分支%20--%3e%3cpath%20d='M40,70%20C60,70%2080,90%2080,110%20L80,130'%20stroke='%233498db'%20stroke-width='8'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%20/%3e%3c!--%20开发分支%20--%3e%3cpath%20d='M40,100%20C60,100%20100,110%20100,130%20L100,160'%20stroke='%232ecc71'%20stroke-width='8'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%20/%3e%3c!--%20修复分支%20--%3e%3cpath%20d='M40,130%20C60,130%20120,140%20120,160'%20stroke='%23e74c3c'%20stroke-width='8'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%20/%3e%3c!--%20合并点%20--%3e%3cpath%20d='M80,130%20C80,145%2060,145%2040,145'%20stroke='%233498db'%20stroke-width='8'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%20/%3e%3c!--%20节点%20--%3e%3ccircle%20cx='40'%20cy='40'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='70'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='100'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='130'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='145'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='160'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='80'%20cy='130'%20r='10'%20fill='%233498db'%20/%3e%3ccircle%20cx='100'%20cy='160'%20r='10'%20fill='%232ecc71'%20/%3e%3ccircle%20cx='120'%20cy='160'%20r='10'%20fill='%23e74c3c'%20/%3e%3c/svg%3e",I_={class:"main-header app-header"},R_={class:"header-left"},L_=["src"],x_={class:"header-info"},U_={key:0,class:"header-actions"},z_={class:"user-name"},H_={class:"user-label"},W_={class:"user-warning"},j_={key:0,class:"config-broken-banner"},q_={class:"banner-left"},J_={class:"banner-text"},K_={class:"banner-title"},Y_={class:"banner-detail"},Q_={key:1,class:"banner-path"},Z_={class:"banner-actions"},X_={key:0,class:"loading-container"},e3={class:"loading-spinner"},t3={class:"loading-text"},s3={key:1,class:"grid-layout"},a3={class:"git-status-panel"},o3={key:0,class:"commit-form-panel"},n3={class:"tips"},l3={class:"code-block"},i3={key:1,class:"commit-form-panel"},r3={class:"tips"},c3={key:2,class:"log-list-panel"},u3={class:"main-footer app-footer p-4"},d3=ze({__name:"App",setup(j){const k=_(""),i=_(null),c=_(null),f=_(null),p=Tt(),h=Ut(),C=jo(),m=_(!1),S=ie(()=>h.currentDirectory);function M(){const G=So(S.value);document.title=`${G} - Zen GitSync`}Ze(S,()=>{M()},{immediate:!0});function b(){h.config&&(k.value=`${e("@F13B4:默认提交信息: ")}${h.config.defaultCommitMessage}`)}async function P(){try{const q=await(await fetch("/api/current_directory")).json();return h.setCurrentDirectory(q.directory||e("@F13B4:未知目录")),q}catch(G){return console.error("获取当前目录失败:",G),{directory:e("@F13B4:未知目录"),isGitRepo:!1}}}ts(async()=>{console.log(e("@F13B4:---------- 页面初始化开始 ----------"));try{const G=await P();h.isLoaded||await h.loadConfig(),b(),p.isGitRepo=G.isGitRepo===!0,p.lastCheckedTime=Date.now(),p.isGitRepo?await Promise.all([p.getCurrentBranch(!0),p.getAllBranches(),p.getUserInfo(),p.getRemoteUrl(),p.getBranchStatus(!0)]):u.warning(e("@F13B4:当前目录不是Git仓库,部分功能将不可用"))}catch(G){console.error("初始化失败:",G)}finally{m.value=!0,console.log(e("@F13B4:---------- 页面初始化完成 ----------")),setTimeout(()=>{T()},100)}});function n(){c.value&&c.value.refreshStatus()}const d=_(!1);function F(){d.value=!0}let w=!1,E=!1,H=!1,z=0,A=0,O="",Y="",ce=null;function X(){const G=document.querySelector(".grid-layout");if(!G)return;const q=getComputedStyle(G).gridTemplateColumns.split(" "),ge=getComputedStyle(G).gridTemplateRows.split(" ");if(q.length>=3&&ge.length>=3){const Q=parseFloat(q[0]),re=parseFloat(q[2]),ne=Q+re,te=Q/ne,Ge=parseFloat(ge[0]),fe=parseFloat(ge[2]),We=Ge+fe,J=Ge/We;localStorage.setItem("zen-gitsync-layout-left-ratio",te.toString()),localStorage.setItem("zen-gitsync-layout-top-ratio",J.toString()),console.log(`${e("@F13B4:布局比例已保存 - 左侧: ")}${(te*100).toFixed(0)}${e("@F13B4:%, 上方: ")}${(J*100).toFixed(0)}%`),localStorage.setItem("zen-gitsync-layout-bottom-left-ratio",te.toString()),console.log(`${e("@F13B4:底部布局比例已保存 - 左侧: ")}${(te*100).toFixed(0)}%`)}}function T(){const G=document.querySelector(".grid-layout");if(!G)return;const q=localStorage.getItem("zen-gitsync-layout-left-ratio"),ge=localStorage.getItem("zen-gitsync-layout-top-ratio");if(q){const Q=parseFloat(q),re=1-Q;G.style.gridTemplateColumns=`${Q}fr 8px ${re}fr`,console.log(`${e("@F13B4:已恢复左侧比例: ")}${(Q*100).toFixed(0)}%`)}else G.style.gridTemplateColumns="1fr 8px 3fr";if(ge){const Q=parseFloat(ge),re=1-Q;G.style.gridTemplateRows=`${Q}fr 8px ${re}fr`,console.log(`${e("@F13B4:已恢复上方比例: ")}${(Q*100).toFixed(0)}%`)}}function B(G){var Q;const q=G.currentTarget;if(!q||!q.id)return;ce=q.id,ce==="v-resizer"?w=!0:ce==="v-resizer-bottom"&&(E=!0),z=G.clientX;const ge=document.querySelector(".grid-layout");O=getComputedStyle(ge).gridTemplateColumns,(Q=document.getElementById(ce))==null||Q.classList.add("active"),document.addEventListener("mousemove",se),document.addEventListener("mouseup",_e),G.preventDefault()}function se(G){if(!w&&!E)return;const q=document.querySelector(".grid-layout"),ge=G.clientX-z,Q=O.split(" ");if(Q.length>=3){const re=parseFloat(Q[0]),ne=parseFloat(Q[2]),te=re+ne,Ge=(re+ge/q.clientWidth*te)/te,fe=1-Ge,We=.1,J=.5;Ge<We?q.style.gridTemplateColumns=`${We}fr 8px ${1-We}fr`:Ge>J?q.style.gridTemplateColumns=`${J}fr 8px ${1-J}fr`:q.style.gridTemplateColumns=`${Ge}fr 8px ${fe}fr`}}function _e(){var G,q;w=!1,E=!1,(G=document.getElementById("v-resizer"))==null||G.classList.remove("active"),(q=document.getElementById("v-resizer-bottom"))==null||q.classList.remove("active"),document.removeEventListener("mousemove",se),document.removeEventListener("mouseup",_e),X()}function De(G){var ge;H=!0,A=G.clientY;const q=document.querySelector(".grid-layout");Y=getComputedStyle(q).gridTemplateRows,(ge=document.getElementById("h-resizer"))==null||ge.classList.add("active"),document.addEventListener("mousemove",ue),document.addEventListener("mouseup",be),G.preventDefault()}function ue(G){if(!H)return;const q=document.querySelector(".grid-layout"),ge=G.clientY-A,Q=Y.split(" ");if(Q.length>=3){const re=parseFloat(Q[0]),ne=parseFloat(Q[2]),te=re+ne,Ge=(re+ge/q.clientHeight*te)/te,fe=1-Ge,We=.2,J=.8;Ge<We?q.style.gridTemplateRows=`${We}fr 8px ${1-We}fr`:Ge>J?q.style.gridTemplateRows=`${J}fr 8px ${1-J}fr`:q.style.gridTemplateRows=`${Ge}fr 8px ${fe}fr`}}function be(){var G;H=!1,(G=document.getElementById("h-resizer"))==null||G.classList.remove("active"),document.removeEventListener("mousemove",ue),document.removeEventListener("mouseup",be),X()}return(G,q)=>{const ge=uo;return r(),x(t(Tn),{locale:t(C).elementPlusLocale},{default:o(()=>[a("header",I_,[a("div",R_,[a("img",{src:t(G_),alt:"Zen GitSync Logo",class:"logo"},null,8,L_),q[2]||(q[2]=a("h1",null,"Zen GitSync",-1))]),a("div",x_,[t(p).isGitRepo?(r(),v("div",U_,[s(M_),s(MC)])):I("",!0),s(P_),s(Ba,{id:"user-info",class:"user-info-card",compact:""},{content:o(()=>[t(p).userName&&t(p).userEmail?(r(),x(t(yt),{key:0,content:t(p).userEmail,placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[a("span",z_,l(t(p).userName),1)]),_:1},8,["content"])):(r(),v(Ue,{key:1},[a("span",H_,l(t(e)("@F13B4:用户: ")),1),a("span",W_,l(t(e)("@F13B4:未配置")),1)],64))]),actions:o(()=>[s(t(yt),{content:t(e)("@F13B4:用户设置"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[a("button",{class:"modern-btn btn-icon-28",onClick:F},[s(t(st),{class:"btn-icon"},{default:o(()=>[s(t(As))]),_:1})])]),_:1},8,["content"])]),_:1})])]),t(h).hasConfigLoadError?(r(),v("div",j_,[a("div",q_,[s(t(st),{class:"banner-icon"},{default:o(()=>[s(t(Nn))]),_:1}),a("div",J_,[a("span",K_,l(t(e)("@CFGERR:系统配置文件有问题")),1),t(h).configLoadError?(r(),x(t(yt),{key:0,content:t(h).configLoadError,placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[a("span",Y_,l(t(e)("@CFGERR:查看原因")),1)]),_:1},8,["content"])):I("",!0),t(h).configFilePath?(r(),v("span",Q_,l(t(h).configFilePath),1)):I("",!0)])]),a("div",Z_,[s(t(ct),{size:"small",type:"warning",onClick:q[0]||(q[0]=Q=>t(h).openSystemConfigFile())},{default:o(()=>[L(l(t(e)("@CFGERR:打开系统配置文件")),1)]),_:1})])])):I("",!0),a("main",{class:"main-container",style:ls({top:t(h).hasConfigLoadError?"104px":"64px"})},[m.value?(r(),v("div",s3,[a("div",a3,[s(Dm,{ref_key:"gitStatusRef",ref:c,"initial-directory":S.value},null,8,["initial-directory"])]),a("div",{class:"vertical-resizer",id:"v-resizer",onMousedown:B},null,32),t(p).isGitRepo?(r(),v("div",o3,[!t(p).userName||!t(p).userEmail?(r(),x(ge,{key:0,shadow:"hover"},{header:o(()=>[a("h2",null,"Git"+l(t(e)("@F13B4:用户未配置")),1)]),default:o(()=>[a("p",null,l(t(e)("@F13B4:请先配置Git用户信息才能进行提交操作。")),1),a("div",n3,[a("h3",null,l(t(e)("@F13B4:您可以通过以下方式配置:")),1),a("ol",null,[a("li",null,l(t(e)("@F13B4:点击右上角的设置按钮,配置用户名和邮箱")),1),a("li",null,l(t(e)("@F13B4:或者使用命令行配置:")),1),a("div",l3,[L(" git config "+l(t(e)('@F13B4:--global user.name "您的用户名"')),1),q[4]||(q[4]=a("br",null,null,-1)),L(" git config "+l(t(e)('@F13B4:--global user.email "您的邮箱"')),1)])]),s(t(ct),{type:"primary",onClick:F},{default:o(()=>[L(l(t(e)("@F13B4:立即配置")),1)]),_:1})])]),_:1})):(r(),x(Sy,{key:1,ref_key:"commitFormRef",ref:f},null,512))])):(r(),v("div",i3,[s(ge,{shadow:"hover"},{header:o(()=>[a("h2",null,"Git"+l(t(e)("@F13B4:仓库初始化")),1)]),default:o(()=>[a("p",null,l(t(e)("@F13B4:当前目录不是Git仓库,请先初始化Git仓库或切换到Git仓库目录。")),1),a("div",r3,[a("h3",null,l(t(e)("@F13B4:可以使用以下命令初始化仓库:")),1),q[5]||(q[5]=a("div",{class:"code-block"},"git init",-1))])]),_:1})])),a("div",{class:"horizontal-resizer",id:"h-resizer",onMousedown:De},null,32),t(p).isGitRepo?(r(),v("div",c3,[s(oC,{ref_key:"logListRef",ref:i},null,512)])):I("",!0)])):(r(),v("div",X_,[s(ge,{class:"loading-card"},{default:o(()=>[a("div",e3,[s(t(st),{class:"is-loading"},{default:o(()=>q[3]||(q[3]=[a("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[a("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 32zM195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0zm-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})],-1)])),_:1})]),a("div",t3,l(t(e)("@F13B4:加载中...")),1)]),_:1})]))],4),a("footer",u3,[s(e_,{onBranchChanged:n}),s(HC)]),s(O_,{modelValue:d.value,"onUpdate:modelValue":q[1]||(q[1]=Q=>d.value=Q)},null,8,["modelValue"])]),_:1},8,["locale"])}}}),p3=Je(d3,[["__scopeId","data-v-b5e1997d"]]);if(typeof window<"u"){let j=function(){var k=document.body,i=document.getElementById("__svg__icons__dom__");i||(i=document.createElementNS("http://www.w3.org/2000/svg","svg"),i.style.position="absolute",i.style.width="0",i.style.height="0",i.id="__svg__icons__dom__",i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("xmlns:link","http://www.w3.org/1999/xlink")),i.innerHTML='<symbol class="icon" viewBox="0 0 1024 1024" id="icon-command-grid"><path d="m860.6 319-109.2-49.8-341.9 155.4 103.1 47.8z" fill="#FFD524" /><path d="m81.1 336.4 419 194.1c3.9 1.8 8 2.7 12.2 2.7 4 0 8-.8 11.7-2.5L943 346c10.4-4.6 17.2-14.9 17.3-26.3.1-11.4-6.6-21.8-16.9-26.6L515.1 97.5c-7.6-3.5-16.4-3.5-24 0l-66.4 30.2c-14.6 6.6-21 23.8-14.4 38.4 6.6 14.6 23.8 21 38.4 14.4l54.4-24.7 248.4 113.5L860.6 319l-348 153.4-103.1-47.8-246.7-114.3 104.8-47.7c14.6-6.6 21-23.8 14.4-38.4-6.6-14.6-23.8-21-38.4-14.4L81.3 283.7c-10.3 4.7-17 15-17 26.3s6.6 21.6 16.8 26.4z" fill="currentColor" /><path d="M343.8 225.2c4 0 8.1-.8 12-2.6l9.9-4.5c14.6-6.6 21-23.8 14.4-38.4-6.6-14.6-23.8-21-38.4-14.4l-9.9 4.5c-14.6 6.6-21 23.8-14.4 38.4 4.8 10.7 15.3 17 26.4 17zm575.5 288.4L512.6 699.8 105.9 504.4c-14.4-6.9-31.7-.9-38.7 13.6-6.9 14.4-.9 31.7 13.6 38.7l419 201.3c4 1.9 8.3 2.9 12.6 2.9 4.1 0 8.2-.9 12.1-2.6l419-191.9c14.6-6.7 21-23.9 14.3-38.4-6.8-14.7-24-21.1-38.5-14.4z" fill="currentColor" /><path d="M919.3 685.4 512.6 871.7 105.9 676.2c-14.4-6.9-31.7-.9-38.7 13.6-6.9 14.4-.9 31.7 13.6 38.7l419 201.3c4 1.9 8.3 2.9 12.6 2.9 4.1 0 8.2-.9 12.1-2.6l419-191.9c14.6-6.7 21-23.9 14.3-38.4-6.8-14.6-24-21-38.5-14.4z" fill="currentColor" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-command-list"><path d="M909.061 185.47H585.143c-11.494 0-20.898-9.405-20.898-20.899s9.404-20.898 20.898-20.898H909.06c11.494 0 20.898 9.405 20.898 20.898s-9.404 20.898-20.898 20.898zm0 229.877H585.143c-11.494 0-20.898-9.404-20.898-20.898s9.404-20.898 20.898-20.898H909.06c11.494 0 20.898 9.404 20.898 20.898s-9.404 20.898-20.898 20.898zM909.061 640H585.143c-11.494 0-20.898-9.404-20.898-20.898s9.404-20.898 20.898-20.898H909.06c11.494 0 20.898 9.404 20.898 20.898S920.555 640 909.061 640zm0 229.878H585.143c-11.494 0-20.898-9.405-20.898-20.898s9.404-20.898 20.898-20.898H909.06c11.494 0 20.898 9.404 20.898 20.898s-9.404 20.898-20.898 20.898zM391.837 470.204H177.633c-45.976 0-83.592-37.616-83.592-83.592V172.408c0-45.975 37.616-83.592 83.592-83.592h214.204c45.975 0 83.592 37.617 83.592 83.592v214.204c0 45.976-37.617 83.592-83.592 83.592zM177.633 130.612c-22.988 0-41.796 18.808-41.796 41.796v214.204c0 22.988 18.808 41.796 41.796 41.796h214.204c22.987 0 41.796-18.808 41.796-41.796V172.408c0-22.988-18.809-41.796-41.796-41.796H177.633z" fill="currentColor" class="custom-cursor-on-hover" /><path d="M391.837 924.735H177.633c-45.976 0-83.592-37.617-83.592-83.592V626.939c0-45.976 37.616-83.592 83.592-83.592h214.204c45.975 0 83.592 37.616 83.592 83.592v214.204c0 45.975-37.617 83.592-83.592 83.592zM177.633 585.143c-22.988 0-41.796 18.808-41.796 41.796v214.204c0 22.988 18.808 41.796 41.796 41.796h214.204c22.987 0 41.796-18.808 41.796-41.796V626.939c0-22.988-18.809-41.796-41.796-41.796H177.633z" fill="currentColor" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-command-orchestrate"><path d="M102.4 243.2c0-21.197 12.288-38.4 27.443-38.4h457.114c15.155 0 27.443 17.203 27.443 38.4s-12.288 38.4-27.443 38.4H129.843c-15.155 0-27.443-17.203-27.443-38.4zm0 256c0-21.197 12.288-38.4 27.443-38.4h457.114c15.155 0 27.443 17.203 27.443 38.4s-12.288 38.4-27.443 38.4H129.843c-15.155 0-27.443-17.203-27.443-38.4zm0 256c0-21.197 12.288-38.4 27.443-38.4h457.114c15.155 0 27.443 17.203 27.443 38.4s-12.288 38.4-27.443 38.4H129.843c-15.155 0-27.443-17.203-27.443-38.4zM793.6 237.722c0-18.176-17.203-32.922-38.4-32.922s-38.4 14.746-38.4 32.922v548.556c0 18.176 17.203 32.922 38.4 32.922a44.544 44.544 0 0 0 6.86-.512 38.246 38.246 0 0 0 23.758-11.11l162.918-162.919a38.4 38.4 0 0 0-54.272-54.272L793.6 691.2V237.722z" fill="currentColor" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-custom-cmd"><path d="M785.7 163.4c-10.8-21.7-33-35.4-57.2-35.4H295.6c-24.2 0-46.4 13.7-57.2 35.4L128 384v448c0 35.3 28.7 64 64 64h640c35.3 0 64-28.7 64-64V384L785.7 163.4zM728.4 192l96 192H544V192h184.4zm-432.8 0H480v192H199.6l96-192zM832 832H192V448h640v384z" /><path d="M512 704h192v64H512zm-192 21.3 42.7 42.7 85.3-85.3 42.7-42.7-42.7-42.7-85.3-85.3-42.7 42.7 85.3 85.3z" /></symbol><symbol class="icon" viewBox="0 0 1305 1024" id="icon-git-fetch"><path d="M960.795 911.159H942.21V809.744h18.585a192.352 192.352 0 1 0 0-384.704h-76.481l-.46-50.248a242.218 242.218 0 0 0-484.512 0l-.459 50.248h-73.422a192.352 192.352 0 1 0 0 384.704h28.451v101.415h-28.451a293.843 293.843 0 0 1-23.48-586.616 343.786 343.786 0 0 1 679.388 0 293.767 293.767 0 0 1-20.65 586.845zm0 0" fill="currentColor" /><path d="M590.623 486.073h101.415v432.199H590.623z" fill="currentColor" /><path d="M641.101 990.394 414.103 803.166l64.55-78.24 162.984 134.149 164.589-134.838 64.244 78.47zm0 0" fill="currentColor" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-git-merge"><path d="M234.667 192a64 64 0 1 0 0 128 64 64 0 0 0 0-128zM85.333 256A149.333 149.333 0 1 1 284.46 396.8a85.333 85.333 0 0 0 78.208 51.2h298.666A170.667 170.667 0 0 1 832 618.667v6.186a149.419 149.419 0 0 1-42.667 292.48 149.333 149.333 0 0 1-42.666-292.48v-6.186a85.333 85.333 0 0 0-85.334-85.334H362.667a169.899 169.899 0 0 1-85.334-22.826v114.346a149.419 149.419 0 0 1-42.666 292.48A149.333 149.333 0 0 1 192 624.853V399.147A149.419 149.419 0 0 1 85.333 256zm704 448a64 64 0 1 0 0 128 64 64 0 0 0 0-128zm-554.666 0a64 64 0 1 0 0 128 64 64 0 0 0 0-128z" fill="currentColor" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-git-pull-request"><path d="M367.431 296.877c16.998-23.373 25.497-50.995 25.497-82.867 2.125-42.496-12.218-78.617-43.027-108.364s-66.4-43.558-106.771-41.433c-31.872 0-60.025 8.499-84.46 25.498s-42.496 39.309-54.182 66.931-14.874 56.307-9.562 86.054c5.312 29.747 18.592 55.245 39.84 76.493s46.745 35.059 76.493 41.433v302.783c-29.747 6.374-55.245 20.185-76.493 41.433-21.248 21.248-34.528 46.745-39.84 76.493-5.312 29.747-2.125 58.432 9.562 86.054s29.747 49.933 54.182 66.931c24.435 16.998 52.057 25.497 82.867 25.497s58.963-8.499 84.46-25.497c25.498-16.998 44.621-39.309 57.369-66.931 6.374-19.123 9.562-39.309 9.562-60.557 0-29.747-8.499-57.369-25.497-82.867-21.248-33.997-52.057-55.245-92.428-63.744V360.621l25.497-6.374c27.622-12.749 49.933-31.872 66.931-57.37zM322.81 768.581c8.499 14.873 12.218 30.278 11.155 46.214-1.062 15.936-6.374 31.341-15.936 46.214-9.562 14.874-22.842 25.498-39.84 31.872-16.998 6.374-33.997 7.968-50.995 4.781s-32.403-11.155-46.214-23.904-21.779-27.622-23.904-44.621c-6.374-27.622-.531-52.589 17.53-74.899 18.061-22.31 40.902-33.465 68.525-33.465 16.998 0 32.403 4.25 46.214 12.749s24.966 20.186 33.465 35.059zM195.323 287.316c-14.874-10.624-26.029-24.435-33.465-41.433s-9.562-33.997-6.374-50.995 11.155-31.872 23.904-44.621c12.749-12.749 28.154-21.248 46.214-25.498 18.061-4.25 35.59-2.656 52.589 4.781 16.998 7.437 30.278 18.061 39.84 31.872 9.562 13.811 14.874 29.216 15.936 46.214s-2.656 32.934-11.155 47.808c-8.499 14.874-19.654 26.56-33.465 35.059s-29.216 12.749-46.214 12.749-32.937-5.312-47.81-15.936zm615.127 44.62c2.125-19.123-1.062-38.246-9.562-57.369-10.624-27.622-28.685-49.933-54.182-66.931-25.497-16.998-53.12-25.498-82.867-25.498H552.288l76.492-76.493-44.62-41.433L456.672 191.7v41.433L584.16 360.621l44.621-41.433-76.492-76.493H663.84c23.373 0 44.089 8.499 62.15 25.498 18.061 16.998 27.091 38.246 27.091 63.744v331.468c-19.123 4.25-37.184 11.686-54.182 22.31-25.497 16.998-44.089 39.309-55.776 66.931-11.686 27.622-14.342 56.307-7.968 86.054s20.185 55.245 41.433 76.493c21.248 21.248 46.745 35.059 76.492 41.433 29.747 6.374 58.432 3.718 86.054-7.968s49.933-30.278 66.931-55.776c16.998-25.498 25.498-53.12 25.498-82.867 0-40.371-14.874-75.43-44.621-105.177-21.248-21.248-46.745-35.059-76.493-41.433l.001-331.469zm35.059 541.822c-10.624 10.624-23.373 18.061-38.246 22.31-14.874 4.25-29.216 4.781-43.027 1.594-13.811-3.187-26.56-9.562-38.246-19.123-11.686-9.562-20.717-21.779-27.091-36.653-6.374-14.874-7.968-31.341-4.781-49.401 3.187-18.061 11.155-33.465 23.904-46.214 12.749-12.749 28.154-20.717 46.214-23.904 18.061-3.187 35.59-1.594 52.589 4.781 16.998 6.374 30.81 18.061 41.433 35.059 10.624 16.998 14.874 36.121 12.749 57.369-2.125 21.248-10.624 39.309-25.498 54.182z" fill="currentColor" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-git-stash"><path d="m310.229 265.771-47.878 44.458 225.71 225.71h44.458l225.71-225.71-44.458-44.458-170.992 167.573V64h-64.977v369.344L310.229 265.771zm44.458 311.206c6.84 36.478 25.079 66.687 54.718 90.626 29.639 23.939 63.267 35.908 100.885 35.908s71.247-11.969 100.886-35.908c29.639-23.939 49.018-54.148 58.137-90.626h225.71l34.198 30.779v321.466L895.023 960H125.557l-30.779-30.779V607.756l30.779-30.779h229.13zm359.084 61.557c-18.239 38.758-45.598 70.107-82.076 94.046-36.478 23.939-76.947 35.908-121.405 35.908s-84.926-11.969-121.405-35.908c-36.478-23.939-63.837-55.288-82.076-94.046H159.756v256.489h704.489V638.534H713.771z" fill="currentColor" /></symbol><symbol class="icon" viewBox="0 0 1117 1024" id="icon-muti-choose"><path d="M390.23799999999994 68.402h677.328q49.97 0 49.97 49.97v-.136q0 49.97-49.97 49.97H390.238q-49.97 0-49.97-49.97v.136q0-49.97 49.97-49.97ZM390.23799999999994 474.854h677.328q49.97 0 49.97 49.97v-.137q0 49.97-49.97 49.97H390.238q-49.97 0-49.97-49.97v.137q0-49.97 49.97-49.97ZM390.23799999999994 881.442h677.328q49.97 0 49.97 49.97v-.137q0 49.97-49.97 49.97H390.238q-49.97 0-49.97-49.97v.137q0-49.97 49.97-49.97ZM301.22 10.65A36.044 36.044 0 0 0 275.689 0a35.908 35.908 0 0 0-25.532 10.65l-127.11 127.382-61.302-61.848a36.044 36.044 0 0 0-25.531-10.65 36.18 36.18 0 0 0-25.531 61.713l87.106 87.516a35.771 35.771 0 0 0 25.258 10.513 35.225 35.225 0 0 0 25.395-10.65L301.22 61.576a36.317 36.317 0 0 0 0-50.927zm0 412.595a35.908 35.908 0 0 0-25.531-10.513 35.771 35.771 0 0 0-25.532 10.513l-127.11 127.247-61.302-61.849a36.044 36.044 0 0 0-25.531-10.786 36.18 36.18 0 0 0-25.531 61.849l87.106 87.38a35.771 35.771 0 0 0 50.926 0L301.22 474.033a36.454 36.454 0 0 0 0-50.789zm0 386.109a36.044 36.044 0 0 0-25.531-10.65 35.908 35.908 0 0 0-25.532 10.65L123.047 936.6l-61.302-61.712a36.044 36.044 0 0 0-25.531-10.65 36.18 36.18 0 0 0-25.531 61.85l87.106 87.379a35.771 35.771 0 0 0 50.926 0L301.22 860.553a36.317 36.317 0 0 0 0-50.926z" fill="currentColor" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-npm"><path d="M128 128v768h768V128H128m128 128h512v512H640V384H512v384H256V256z" fill="#D14748" /></symbol><symbol viewBox="0 0 1024 1024" id="icon-pin"><path fill="currentColor" d="M128 256h768v64H128zM512 384 256 640l45.248 45.248L480 506.496V896h64V506.496l178.752 178.752L768 640z" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-remote-repo"><path d="M458.64 119.072a84.176 84.176 0 0 1 106.72 0l366.912 300.4a32 32 0 0 1-40.544 49.52l-366.912-300.4a20.176 20.176 0 0 0-25.632 0l-366.912 300.4a32 32 0 1 1-40.544-49.52l366.912-300.4zM304.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.552h-96.08a49.504 49.504 0 0 1-49.472-49.552V415.2zm64 14.432v67.68h66.976v-67.68H368.32zm-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.2C848.56 862.08 803.12 908 746.704 908H275.2c-56.4 0-101.856-45.92-101.856-102.224v-307.2a32 32 0 0 1 32-32zm98.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.552h-96.08a49.504 49.504 0 0 1-49.472-49.552v-96.544zm64 14.432v67.68h66.976v-67.68H368.32zm154.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.552H572.08a49.504 49.504 0 0 1-49.472-49.552v-96.544zm64 14.432v67.68h66.976v-67.68h-66.976z" fill="currentColor" class="custom-cursor-on-hover" /></symbol><symbol class="icon" viewBox="140 110 780 780" id="icon-start-run-command"><path d="M700.568 151.704c48.014 0 86.926 38.684 86.926 86.395v294.95c0 1.574-.152 3.129-.455 4.608 51.219 32.104 85.257 88.822 85.257 153.43 0 100.086-81.635 181.21-182.329 181.21-2.616 0-5.233-.058-7.831-.171l-.38.057-2.389.113H276.556c-48.014 0-86.926-38.684-86.926-86.395V238.099c0-47.71 38.912-86.395 86.926-86.395zm0 46.345H276.556a40.164 40.164 0 0 0-40.277 40.05v547.802c0 22.11 18.014 40.05 40.277 40.05h291.631a180.262 180.262 0 0 1-60.548-134.865c0-100.067 81.635-181.19 182.328-181.19 17.655 0 34.74 2.483 50.878 7.148V238.1a40.164 40.164 0 0 0-40.277-40.05zm-10.6 358.21c-74.942 0-135.68 60.36-135.68 134.827 0 74.487 60.738 134.865 135.68 134.865 74.941 0 135.68-60.378 135.68-134.865 0-74.467-60.739-134.826-135.68-134.826zm-10.563 63.394c7.832 0 15.53 2.086 22.3 6.068l63.526 37.281a44.677 44.677 0 0 1 17.56 57.818l-1.63 3.072-2.068 3.224a44.354 44.354 0 0 1-13.862 12.8l-63.526 37.3a44.089 44.089 0 0 1-60.53-16.024 44.734 44.734 0 0 1-6.01-22.433v-74.581a44.373 44.373 0 0 1 44.24-44.525zm2.105 48.204v67.204l57.25-33.602-57.25-33.602zM509.762 446.692c12.895 0 23.325 10.372 23.325 23.172s-10.43 23.173-23.325 23.173H340.158c-12.895 0-23.325-10.373-23.325-23.173 0-12.8 10.43-23.172 23.325-23.172zm127.204-126.427c12.895 0 23.324 10.373 23.324 23.173 0 12.8-10.43 23.173-23.324 23.173H340.158c-12.895 0-23.325-10.373-23.325-23.173 0-12.8 10.43-23.173 23.325-23.173z" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-vscode"><path d="m746.223 102.24-359.8 330.82-201.076-151.562-83.1 48.367 198.205 182.132-198.206 182.132 83.101 48.51L386.423 591.08l359.8 330.677 175.527-85.251V187.494zm0 217.58v384.34l-255.04-192.177z" fill="#2196F3" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-workflow"><path d="M352 128a96 96 0 0 1 0 192H224a96 96 0 0 1 0-192h128zm0 64H224a32 32 0 0 0 0 64h128a32 32 0 0 0 0-64zm448 512a96 96 0 0 1 0 192H672a96 96 0 0 1 0-192h128zm0 64H672a32 32 0 1 0 0 64h128a32 32 0 1 0 0-64z" /><path d="M699.584 192a164.416 164.416 0 1 1 0 328.768H340.48a116.416 116.416 0 1 0 0 232.832H512a32 32 0 1 1 0 64H340.416a180.416 180.416 0 0 1 0-360.832h359.168a100.416 100.416 0 0 0 0-200.768H512a32 32 0 0 1 0-64h187.584z" /><path d="M448 753.792v74.624a32 32 0 0 0 52.288 24.704l45.504-37.248a32 32 0 0 0 0-49.536l-45.504-37.312A32 32 0 0 0 448 753.792z" /></symbol>',k.insertBefore(i,k.lastChild)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",j):j()}const f3=Object.assign({});for(const j in f3)j.split("svg/")[1].split(".svg")[0];function m3(j){j.component("svg-icon",Lt)}const ca=Bn(p3);ca.use(An());ca.use(ra);m3(ca);ca.mount("#app");
|