zen-gitsync 2.15.11 → 2.15.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/gitCommit.js +475 -475
- package/src/ui/public/assets/AppVersionBadge-BaXEI9Aq.js +2 -0
- package/src/ui/public/assets/BranchSelector-DJhEF0y9.js +1 -0
- package/src/ui/public/assets/CommitForm-BfpcK-bz.js +6 -0
- package/src/ui/public/assets/ConsoleView-D838O0O6.js +17 -0
- package/src/ui/public/assets/CustomCommandManager-BcCK46df.js +1 -0
- package/src/ui/public/assets/EditorView-DnnqYNGF.js +0 -0
- package/src/ui/public/assets/{FlowExecutionViewer-CJgoxffE.js → FlowExecutionViewer-CSlMmcDS.js} +1 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-UgHpZ3FR.js +21 -0
- package/src/ui/public/assets/LogList-uUgskwwp.js +7 -0
- package/src/ui/public/assets/MindmapView-CCmFMiHR.js +1 -0
- package/src/ui/public/assets/MonitorView-BxoqeX70.js +1 -0
- package/src/ui/public/assets/ProjectStartupButton-C3AwivIB.js +1 -0
- package/src/ui/public/assets/{RemoteRepoCard-CKQguRWi.js → RemoteRepoCard-BbxeVpje.js} +1 -1
- package/src/ui/public/assets/SourceMapView-DKv-Y6t_.js +3 -0
- package/src/ui/public/assets/{SvgIcon-DOkE0Qie.js → SvgIcon-sMM8XFgm.js} +1 -1
- package/src/ui/public/assets/TemplateManager-Dzj8rXVw.js +1 -0
- package/src/ui/public/assets/UserInputNode-BU7Trzq-.js +1 -0
- package/src/ui/public/assets/WorkbenchView-DTgRoOkv.js +12 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-DvV-QrsM.js → _plugin-vue_export-helper-8ryIYVvs.js} +1 -1
- package/src/ui/public/assets/{configStore-BRR4SloR.js → configStore-D77uNk8X.js} +1 -1
- package/src/ui/public/assets/element-plus-D8SQiesr.js +17 -0
- package/src/ui/public/assets/element-plus-DB_sOyH_.css +1 -0
- package/src/ui/public/assets/{flow-mindmap-BMvnvRl8.js → flow-mindmap-BLa-kSA7.js} +1 -1
- package/src/ui/public/assets/index-CpFreGqX.js +23 -0
- package/src/ui/public/assets/{socket-io-C2w3MxRu.js → socket-io-B1foIbJS.js} +1 -1
- package/src/ui/public/assets/{vendor--LaaJk9m.js → vendor-B9orL8iU.js} +37 -37
- package/src/ui/public/assets/vendor-Dm_yd-By.css +1 -0
- package/src/ui/public/assets/{vue-flow-MtbKS8yD.js → vue-flow-BY7LODit.js} +1 -1
- package/src/ui/public/favicon.svg +75 -75
- package/src/ui/public/index.html +27 -27
- package/src/ui/public/logo.svg +74 -74
- package/src/ui/server/middleware/requestLogger.js +53 -53
- package/src/ui/server/routes/branchStatus.js +105 -105
- package/src/ui/server/routes/fileOpen.js +309 -309
- package/src/ui/server/routes/fs.js +791 -791
- package/src/ui/server/routes/git/diff.js +426 -426
- package/src/ui/server/routes/git/diffUtils.js +149 -149
- package/src/ui/server/routes/git/stash.js +550 -550
- package/src/ui/server/routes/git/tags.js +176 -176
- package/src/ui/server/routes/git.js +181 -181
- package/src/ui/server/routes/gitOps.js +1211 -1211
- package/src/ui/server/routes/process.js +86 -86
- package/src/ui/server/routes/status.js +67 -67
- package/src/ui/server/utils/createSavePortToFile.js +48 -48
- package/src/ui/server/utils/instanceRegistry.js +282 -282
- package/src/ui/server/utils/startServerOnAvailablePort.js +116 -116
- package/src/utils/index.js +1168 -1168
- package/src/ui/public/assets/AppVersionBadge-CEhrATQo.js +0 -2
- package/src/ui/public/assets/BranchSelector-xLl3O-4I.js +0 -1
- package/src/ui/public/assets/CommitForm--izGtr_x.js +0 -6
- package/src/ui/public/assets/ConsoleView-BLYfnXAy.js +0 -17
- package/src/ui/public/assets/CustomCommandManager-D8Qd3b9m.js +0 -1
- package/src/ui/public/assets/EditorView-DG8tqp3L.js +0 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-BAIqeASp.js +0 -21
- package/src/ui/public/assets/LogList-DjuL8nWB.js +0 -7
- package/src/ui/public/assets/MindmapView-DPomtQsu.js +0 -1
- package/src/ui/public/assets/MonitorView-gZhz528u.js +0 -1
- package/src/ui/public/assets/ProjectStartupButton-C8nDEd8N.js +0 -1
- package/src/ui/public/assets/SourceMapView-DfSRy6lc.js +0 -3
- package/src/ui/public/assets/TemplateManager-BJZloJIO.js +0 -1
- package/src/ui/public/assets/UserInputNode-DpRNQzrz.js +0 -1
- package/src/ui/public/assets/WorkbenchView-vaZsec5Z.js +0 -12
- package/src/ui/public/assets/element-plus-CL7fBdM_.js +0 -24
- package/src/ui/public/assets/element-plus-Cu9Y2raX.css +0 -1
- package/src/ui/public/assets/index-BAFCDhj2.js +0 -23
- package/src/ui/public/assets/vendor-CCbwTgrE.css +0 -1
- package/src/ui/server/.claude/codediff.txt +0 -8
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import"./rolldown-runtime-CMxvf4Kt.js";import{$ as e,B as t,C as n,Cn as r,Dt as i,E as a,F as o,Fn as s,Ft as c,I as l,It as u,J as d,Jn as f,Jt as p,Ln as m,M as h,Mn as g,Mt as _,Nt as v,R as y,S as b,Sn as x,T as S,Tn as C,Tt as w,U as ee,V as T,Vn as E,Wn as te,X as ne,Xn as D,Xt as O,Y as re,Zn as k,_n as A,_r as j,a as ie,an as ae,ar as oe,at as se,b as ce,c as le,cn as ue,ct as de,d as M,en as fe,f as N,fn as P,ft as pe,gn as F,gr as me,h as he,hn as I,i as L,it as R,j as z,ln as B,mn as V,mr as H,nt as ge,on as _e,pr as U,q as ve,r as ye,rt as be,sn as xe,sr as W,st as Se,un as G,ut as Ce,vn as K,vt as we,w as Te,wt as Ee,x as De,xn as q,y as Oe,zn as J}from"./element-plus-D8SQiesr.js";import{n as ke,r as Ae,t as je}from"./vendor-B9orL8iU.js";import{n as Y,t as X}from"./_plugin-vue_export-helper-8ryIYVvs.js";import{t as Me}from"./configStore-D77uNk8X.js";import{r as Ne,v as Pe}from"./index-CpFreGqX.js";var Fe={class:`ai-split-direct-pane`},Ie={key:0,class:`ai-split-status`},Le={key:1,class:`ai-split-status`},Re={key:1},Z={key:2},Q={key:2,class:`ai-split-status is-error`},ze={key:3,class:`ai-split-idle`},Be={class:`ai-split-idle__title`},Ve={class:`ai-split-idle__desc`},He={class:`ai-split-prompt-actions`},Ue={key:0,class:`ai-split-prompt-editor`},We={class:`ai-split-prompt-editor__actions`},Ge={key:1,class:`ai-split-pre`},Ke={class:`ai-split-subhead`},qe={class:`ai-split-user-actions`},Je={key:3,class:`ai-split-pre`},Ye={key:0,class:`ai-split-tab-count`},Xe={class:`ai-split-pre ai-split-pre--think`},Ze={key:0,class:`ai-split-tab-count`},Qe={class:`ai-split-parse-error__detail`},$e={class:`ai-split-parse-error__hint`},et={class:`ai-split-parse-error__actions`},tt={key:1,class:`ai-split-raw-toolbar`},nt={class:`ai-split-raw-tip`},rt={key:0,class:`ai-split-tab-count`},it={key:0,class:`ai-split-empty`},at={key:1,class:`ai-split-list`},ot={class:`ai-split-list__no`},st={class:`ai-split-list__body`},ct={class:`ai-split-list__title`},lt={class:`ai-split-list__desc`},ut={key:5,class:`ai-split-footer-hint`},dt={class:`ai-split-direct-footer`},ft=X(C({__name:`AISplitDirectPane`,props:{title:{},desc:{},taskId:{},promptId:{}},emits:[`confirm`],setup(e,{emit:t}){let n=e,i=t,a=W(`idle`),o=W(`prompt`),s=W(``),l=W(``),u=W(``),p=W(``),m=W(``),h=W([]),g=W(``),_=W(``),v=W(``),y=null,b=0,S=V(()=>u.value.length),C=V(()=>p.value.length),T=V(()=>a.value===`result`&&h.value.length>0),te=V(()=>a.value===`running`),ne=V(()=>a.value===`preview`),O=W(``),re=W(!1);function k(){y&&=(y.abort(),null)}function ie(){k(),a.value=`idle`,o.value=`prompt`,s.value=``,l.value=``,O.value=``,u.value=``,p.value=``,m.value=``,h.value=[],g.value=``,_.value=``,v.value=``}async function ae(){if(!n.title.trim()){L.warning(Y(`@WORKBENCH:请先填写任务标题`));return}ie(),a.value=`preview`,o.value=`prompt`,re.value=!0;try{let e=await fetch(`/api/workbench/tasks/ai-split-preview`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:n.title,desc:n.desc,taskId:n.taskId||``,promptId:n.promptId||``})}).then(e=>e.json());if(!e.success){a.value=`error`,g.value=e.error||Y(`@WORKBENCH:生成预览失败`);return}s.value=e.system||``,l.value=e.user||``,O.value=e.user||``}catch(e){a.value=`error`,g.value=e?.message||String(e)}finally{re.value=!1}}async function oe(){if(!O.value.trim()){L.warning(Y(`@WORKBENCH:提示词不能为空`));return}let e=++b;k(),u.value=``,p.value=``,m.value=``,h.value=[],_.value=``,v.value=``,g.value=``,a.value=`running`,o.value=`thinking`,l.value=O.value,y=new AbortController;let t=y;try{let r=await fetch(`/api/workbench/tasks/ai-split-subtasks`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({title:n.title,desc:n.desc,taskId:n.taskId||``,promptId:n.promptId||``,customUserBlock:O.value}),signal:t.signal});if(e!==b)return;if(!r.ok||!r.body){let e=await r.text().catch(()=>``);throw Error(e||`HTTP ${r.status}`)}let i=r.body.getReader(),c=new TextDecoder(`utf-8`),l=``,d=null;for(;;){let{value:t,done:n}=await i.read();if(e!==b)return;if(n)break;l+=c.decode(t,{stream:!0});let r=l.split(`
|
|
2
|
+
`);l=r.pop()??``;for(let e of r){let t=e.trim();if(!t.startsWith(`data:`))continue;let n=t.slice(5).trim();if(!n)continue;let r;try{r=JSON.parse(n)}catch{continue}switch(r.type){case`meta`:s.value=r.prompt?.system||s.value;break;case`thinking`:u.value+=String(r.delta||``);break;case`content`:p.value+=String(r.delta||``);break;case`done`:d=r;break;case`error`:throw Error(r.error||`AI 拆分失败`)}}}if(e!==b)return;if(!d)throw Error(Y(`@WORKBENCH:AI 未返回结果`));h.value=Array.isArray(d.subtasks)?d.subtasks:[],m.value=d.raw||p.value,_.value=String(d.parseError||``),v.value=String(d.parseStage||``),u.value||=Y(`@WORKBENCH:(当前模型未返回独立的思考内容,可切换到「原始结果」查看完整输出)`),a.value=`result`,o.value=h.value.length>0?`confirm`:`raw`}catch(n){if(e!==b)return;if(n?.name===`AbortError`||t.signal.aborted){a.value=`preview`,o.value=`prompt`;return}a.value=`error`,g.value=n?.message||String(n)}finally{e===b&&(y=null)}}function se(){T.value&&i(`confirm`,h.value.slice())}function ce(){O.value.trim()?oe():ae()}function le(){y&&(y.abort(),y=null,L.info(Y(`@WORKBENCH:已停止拆分`)))}let ue=W(!1);async function de(){if(!p.value.trim()){L.warning(Y(`@WORKBENCH:原始结果为空,无法解析`));return}ue.value=!0;try{let e=await fetch(`/api/workbench/tasks/parse-subtasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({raw:p.value})}).then(e=>e.json());if(!e.success){L.error(e.error||Y(`@WORKBENCH:解析失败`));return}h.value=Array.isArray(e.subtasks)?e.subtasks:[],_.value=String(e.parseError||``),v.value=String(e.parseStage||``),m.value=p.value,h.value.length>0?(L.success(Y(`@WORKBENCH:解析成功,已识别 {n} 个子任务`,{n:h.value.length})),o.value=`confirm`):L.warning(Y(`@WORKBENCH:仍未解析到子任务,请继续修改原始结果`))}catch(e){L.error(Y(`@WORKBENCH:解析失败: `)+(e?.message||e))}finally{ue.value=!1}}f(()=>n.taskId,()=>{ie()});let P=W(!1),pe=W(``),me=W(!1);function he(){pe.value=s.value,P.value=!0}async function R(){if(!pe.value.trim()){L.warning(Y(`@WORKBENCH:指令内容不能为空`));return}me.value=!0;try{let e=await fetch(`/api/workbench/tasks/ai-subtask-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:pe.value})}).then(e=>e.json());e.success?(L.success(Y(`@WORKBENCH:已保存指令`)),P.value=!1,ae()):L.error(e.error||Y(`@WORKBENCH:保存失败`))}catch(e){L.error(Y(`@WORKBENCH:保存失败: `)+(e?.message||e))}finally{me.value=!1}}function z(){P.value=!1}return(e,t)=>{let n=fe,i=ee,f=ve,m=M,v=d,y=N;return J(),K(`div`,Fe,[te.value?(J(),K(`div`,Ie,[r(n,{class:`is-loading`},{default:D(()=>[r(U(w))]),_:1}),I(`span`,null,j(U(Y)(`@WORKBENCH:AI 正在拆分…`)),1),r(i,{size:`small`,link:``,type:`danger`,class:`ai-split-status__stop`,onClick:le},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:停止拆分`)),1)]),_:1})])):ne.value?(J(),K(`div`,Le,[re.value?(J(),F(n,{key:0,class:`is-loading`},{default:D(()=>[r(U(w))]),_:1})):A(``,!0),re.value?(J(),K(`span`,Re,j(U(Y)(`@WORKBENCH:正在生成提示词预览…`)),1)):(J(),K(`span`,Z,j(U(Y)(`@WORKBENCH:提示词已就绪,可在下方编辑后点「发送给 AI」开始拆分`)),1))])):a.value===`error`?(J(),K(`div`,Q,[r(n,{color:`var(--color-danger)`},{default:D(()=>[r(U(ge))]),_:1}),I(`span`,null,j(g.value),1)])):a.value===`idle`?(J(),K(`div`,ze,[t[5]||=q(`<div class="ai-split-idle__icon" aria-hidden="true" data-v-bff9eaf1><svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-v-bff9eaf1><path d="M12 3v3" data-v-bff9eaf1></path><path d="M12 18v3" data-v-bff9eaf1></path><path d="M3 12h3" data-v-bff9eaf1></path><path d="M18 12h3" data-v-bff9eaf1></path><path d="M5.6 5.6l2.1 2.1" data-v-bff9eaf1></path><path d="M16.3 16.3l2.1 2.1" data-v-bff9eaf1></path><path d="M5.6 18.4l2.1-2.1" data-v-bff9eaf1></path><path d="M16.3 7.7l2.1-2.1" data-v-bff9eaf1></path><circle cx="12" cy="12" r="4" data-v-bff9eaf1></circle></svg></div>`,1),I(`div`,Be,j(U(Y)(`@WORKBENCH:准备用 AI 拆分任务`)),1),I(`div`,Ve,j(U(Y)(`@WORKBENCH:点击下方按钮开始生成。生成期间可切换到「思考 / 原始结果」实时查看模型输出。`)),1),r(i,{type:`primary`,icon:U(c),onClick:ae},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:开始拆分`)),1)]),_:1},8,[`icon`])])):A(``,!0),a.value===`idle`?A(``,!0):(J(),F(y,{key:4,modelValue:o.value,"onUpdate:modelValue":t[4]||=e=>o.value=e,class:`ai-split-tabs`},{default:D(()=>[r(m,{label:U(Y)(`@WORKBENCH:提示词`),name:`prompt`},{default:D(()=>[I(`div`,He,[r(i,{size:`small`,disabled:te.value,onClick:he},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:编辑指令`)),1)]),_:1},8,[`disabled`])]),P.value?(J(),K(`div`,Ue,[r(f,{modelValue:pe.value,"onUpdate:modelValue":t[0]||=e=>pe.value=e,type:`textarea`,rows:12,placeholder:U(Y)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`]),I(`div`,We,[r(i,{size:`small`,onClick:z},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:取消`)),1)]),_:1}),r(i,{size:`small`,type:`primary`,loading:me.value,onClick:R},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:保存并重跑`)),1)]),_:1},8,[`loading`])])])):(J(),K(`pre`,Ge,j(s.value||`(等待 LLM 启动…)`),1)),I(`h4`,Ke,j(U(Y)(`@WORKBENCH:用户提示词(拼装后)`)),1),ne.value?(J(),K(G,{key:2},[r(f,{modelValue:O.value,"onUpdate:modelValue":t[1]||=e=>O.value=e,type:`textarea`,rows:16,placeholder:U(Y)(`@WORKBENCH:正在生成预览…`),readonly:re.value,class:`ai-split-user-editor`,resize:`none`},null,8,[`modelValue`,`placeholder`,`readonly`]),I(`div`,qe,[r(i,{size:`small`,disabled:re.value,onClick:ie},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:取消`)),1)]),_:1},8,[`disabled`]),r(i,{type:`primary`,icon:U(c),disabled:re.value||!O.value.trim(),onClick:oe},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:发送给 AI`)),1)]),_:1},8,[`icon`,`disabled`])])],64)):(J(),K(`pre`,Je,j(l.value||`(等待 LLM 启动…)`),1))]),_:1},8,[`label`]),r(m,{name:`thinking`},{label:D(()=>[I(`span`,null,[x(j(U(Y)(`@WORKBENCH:思考`))+` `,1),S.value>0?(J(),K(`span`,Ye,`(`+j(S.value)+`)`,1)):A(``,!0)])]),default:D(()=>[I(`pre`,Xe,j(u.value||U(Y)(`@WORKBENCH:(暂无输出)`)),1)]),_:1}),r(m,{name:`raw`},{label:D(()=>[I(`span`,null,[x(j(U(Y)(`@WORKBENCH:原始结果`))+` `,1),C.value>0?(J(),K(`span`,Ze,`(`+j(C.value)+`)`,1)):A(``,!0)])]),default:D(()=>[_.value&&a.value===`result`?(J(),F(v,{key:0,type:`warning`,"show-icon":``,closable:!1,class:`ai-split-parse-error`},{title:D(()=>[x(j(U(Y)(`@WORKBENCH:模型返回内容解析失败,无法识别为有效的子任务 JSON`)),1)]),default:D(()=>[I(`div`,Qe,j(_.value),1),I(`div`,$e,j(U(Y)(`@WORKBENCH:常见原因:desc 内夹杂了 ASCII 双引号、出现尾随逗号,或输出被截断。可在下方文本框中手动修改后点「重新解析」,或重新生成。`)),1),I(`div`,et,[r(i,{size:`small`,type:`primary`,loading:ue.value,onClick:de},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:重新解析`)),1)]),_:1},8,[`loading`]),r(i,{size:`small`,onClick:ce},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:重新生成`)),1)]),_:1}),r(i,{size:`small`,onClick:t[2]||=e=>o.value=`prompt`},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:去编辑指令`)),1)]),_:1})])]),_:1})):A(``,!0),a.value===`result`||p.value?(J(),K(`div`,tt,[I(`span`,nt,j(U(Y)(`@WORKBENCH:可直接编辑下方文本,修正后点「重新解析」即可入库`)),1),r(i,{size:`small`,type:`primary`,loading:ue.value,disabled:!p.value.trim(),onClick:de},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:重新解析`)),1)]),_:1},8,[`loading`,`disabled`])])):A(``,!0),r(f,{modelValue:p.value,"onUpdate:modelValue":t[3]||=e=>p.value=e,type:`textarea`,rows:14,placeholder:U(Y)(`@WORKBENCH:(暂无输出)`),readonly:te.value,class:`ai-split-raw-editor`,resize:`none`},null,8,[`modelValue`,`placeholder`,`readonly`])]),_:1}),r(m,{name:`confirm`,disabled:h.value.length===0},{label:D(()=>[I(`span`,null,[x(j(U(Y)(`@WORKBENCH:确认入库`))+` `,1),h.value.length>0?(J(),K(`span`,rt,`(`+j(h.value.length)+`)`,1)):A(``,!0)])]),default:D(()=>[h.value.length===0?(J(),K(`div`,it,j(U(Y)(`@WORKBENCH:(暂无子任务)`)),1)):(J(),K(`ul`,at,[(J(!0),K(G,null,E(h.value,(e,t)=>(J(),K(`li`,{key:t,class:`ai-split-list__item`},[I(`div`,ot,j(t+1),1),I(`div`,st,[I(`div`,ct,j(e.title),1),I(`div`,lt,j(e.desc),1)])]))),128))]))]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`])),_.value&&a.value===`result`&&h.value.length===0?(J(),K(`div`,ut,[r(n,{color:`var(--color-warning)`},{default:D(()=>[r(U(ge))]),_:1}),I(`span`,null,j(U(Y)(`@WORKBENCH:解析失败,未能从模型输出中提取出子任务 — 请查看「原始结果」`)),1)])):A(``,!0),I(`div`,dt,[a.value===`error`||a.value===`result`&&_.value&&h.value.length===0?(J(),F(i,{key:0,onClick:ce},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:重新生成`)),1)]),_:1})):A(``,!0),a.value===`result`&&h.value.length>0?(J(),F(i,{key:1,onClick:ce},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:重新拆分`)),1)]),_:1})):A(``,!0),r(i,{type:`primary`,disabled:!T.value,onClick:se},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:确认入库`))+` (`+j(h.value.length)+`) `,1)]),_:1},8,[`disabled`])])])}}}),[[`__scopeId`,`data-v-bff9eaf1`]]),pt={class:`ai-chat-pane`},mt={key:0,class:`ai-chat-streaming-banner`},ht={key:1,class:`ai-chat-empty`},gt={class:`ai-chat-empty__title`},_t={class:`ai-chat-empty__desc`},vt={key:0,class:`ai-chat-bubble user`},yt={class:`ai-chat-content`},bt={key:1,class:`ai-chat-bubble assistant`},xt={class:`ai-chat-pre ai-chat-pre--think`},St={key:1,class:`ai-chat-content-text`},Ct={key:2,class:`ai-chat-subtasks`},wt={class:`ai-chat-subtasks__head`},Tt={class:`ai-chat-subtasks__count`},Et={class:`ai-chat-list`},$={class:`ai-chat-list__no`},Dt={class:`ai-chat-list__body`},Ot={class:`ai-chat-list__title`},kt={class:`ai-chat-list__desc`},At={class:`ai-chat-parse-error__detail`},jt={class:`ai-chat-pre`},Mt={key:5,class:`ai-chat-turn__actions`},Nt={class:`ai-chat-input`},Pt={class:`ai-chat-input__actions`},Ft={key:0,class:`ai-chat-history__loading`},It={key:1,class:`ai-chat-history__empty`},Lt={key:2,class:`ai-chat-history__list`},Rt={class:`ai-chat-history__title`},zt={class:`ai-chat-history__meta`},Bt={class:`ai-chat-history__actions`},Vt=X(C({__name:`AISplitChatPane`,props:{title:{},desc:{},taskId:{},promptId:{},initialSessionId:{}},emits:[`confirm`],setup(t,{emit:n}){let i=t,a=n,s=W(`idle`),d=W(``),f=W([]),p=W(``),m=W(``),h=null,_=0,v=W(null),y=V(()=>s.value===`streaming`),b=V(()=>{if(!y.value)return``;let e=[...f.value].reverse().find(e=>e.role===`assistant`);return e?e.content?Y(`@WORKBENCH:AI 正在输出…`):e.thinking?Y(`@WORKBENCH:AI 正在思考… (已思考 {n} 字)`,{n:e.thinking.length}):Y(`@WORKBENCH:AI 正在思考…`):Y(`@WORKBENCH:AI 正在思考…`)}),S=W(!1),C=W(!1),T=W([]);function te(){v.value&&(v.value.scrollTop=v.value.scrollHeight)}async function ne(){let e=p.value.trim();if(!e||y.value)return;if(!d.value&&!i.title.trim()){L.warning(Y(`@WORKBENCH:请先填写任务标题`));return}let t=++_;h=new AbortController;let n=h,r={role:`user`,content:e};f.value.push(r),p.value=``;let a={role:`assistant`,content:``,thinking:``};f.value.push(a),s.value=`streaming`,await g(),te();try{let r=await fetch(`/api/workbench/tasks/ai-chat-split`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({sessionId:d.value,title:i.title,desc:i.desc,taskId:i.taskId||``,promptId:i.promptId||``,userMessage:e}),signal:n.signal});if(t!==_)return;if(!r.ok||!r.body){let e=await r.text().catch(()=>``);throw Error(e||`HTTP ${r.status}`)}let o=r.body.getReader(),c=new TextDecoder(`utf-8`),l=``,u=null,p=!1;for(;;){let{value:e,done:n}=await o.read();if(t!==_)return;if(n)break;l+=c.decode(e,{stream:!0});let r=l.split(`
|
|
3
|
+
`);l=r.pop()??``;for(let e of r){let t=e.trim();if(!t.startsWith(`data:`))continue;let n=t.slice(5).trim();if(!n)continue;let r;try{r=JSON.parse(n)}catch{continue}switch(r.type){case`meta`:r.sessionId&&(d.value=r.sessionId);break;case`user_echo`:p=!0;break;case`thinking`:a.thinking=(a.thinking||``)+String(r.delta||``);break;case`content`:a.content+=String(r.delta||``);break;case`done`:u=r;break;case`error`:throw Error(r.error||`对话拆分失败`)}}f.value=[...f.value],await g(),te()}if(t!==_)return;if(!p&&!u)throw Error(Y(`@WORKBENCH:AI 未返回结果`));u&&(a.subtasks=Array.isArray(u.subtasks)?u.subtasks:[],a.raw=String(u.raw||a.content),a.parseError=String(u.parseError||``),a.parseStage=String(u.parseStage||``)),f.value=[...f.value],await g(),te(),s.value=`idle`}catch(e){if(t!==_)return;if(e?.name===`AbortError`||n.signal.aborted){a.content=(a.content||``)+`
|
|
4
|
+
|
|
5
|
+
[已停止]`,f.value=[...f.value],s.value=`idle`;return}s.value=`error`,m.value=e?.message||String(e),L.error(m.value)}finally{t===_&&(h=null)}}function O(){h&&=(h.abort(),null)}function re(){if(y.value){L.warning(Y(`@WORKBENCH:请先停止当前生成`));return}f.value=[],d.value=``,m.value=``,s.value=`idle`}function k(e){if(!e.subtasks||e.subtasks.length===0){L.warning(Y(`@WORKBENCH:当前没有可应用的子任务`));return}a(`confirm`,e.subtasks.slice())}async function ie(){S.value=!0,C.value=!0;try{let e=await fetch(`/api/workbench/tasks/ai-chat-sessions`).then(e=>e.json());if(!e.success){L.error(e.error||Y(`@WORKBENCH:加载历史会话失败`));return}T.value=Array.isArray(e.sessions)?e.sessions:[]}catch(e){L.error(Y(`@WORKBENCH:加载历史会话失败: `)+(e?.message||e))}finally{C.value=!1}}async function ae(e){if(S.value=!1,y.value){L.warning(Y(`@WORKBENCH:请先停止当前生成`));return}try{let t=await fetch(`/api/workbench/tasks/ai-chat-sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){L.error(t.error||Y(`@WORKBENCH:加载历史会话失败`));return}let n=t.session;d.value=n.sessionId;let r=(n.messages||[]).filter(e=>e.role===`user`||e.role===`assistant`).map(e=>({role:e.role,content:e.content||``,thinking:``,subtasks:void 0,raw:void 0,parseError:``,parseStage:``})),i=[...r].reverse().find(e=>e.role===`assistant`);i&&Array.isArray(n.latestSubtasks)&&(i.subtasks=n.latestSubtasks,i.raw=n.latestRaw,i.parseStage=n.latestParseStage),f.value=r,s.value=`idle`,L.success(Y(`@WORKBENCH:已恢复历史会话`)),await g(),te()}catch(e){L.error(Y(`@WORKBENCH:加载历史会话失败: `)+(e?.message||e))}}async function oe(e){try{await ye.confirm(Y(`@WORKBENCH:确认删除该会话`),Y(`@WORKBENCH:删除后无法恢复`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/tasks/ai-chat-sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){L.error(t.error||Y(`@WORKBENCH:删除失败`));return}T.value=T.value.filter(t=>t.sessionId!==e),L.success(Y(`@WORKBENCH:已删除`))}catch(e){L.error(Y(`@WORKBENCH:删除失败: `)+(e?.message||e))}}function se(e){if(!e)return``;try{let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}catch{return e}}function ce(e){return e?e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`:`0 B`}return i.initialSessionId&&ae(i.initialSessionId),(t,n)=>{let i=fe,a=l,s=o,d=ee,m=ve,h=z;return J(),K(`div`,pt,[I(`div`,{ref_key:`streamEl`,ref:v,class:`ai-chat-stream`},[y.value?(J(),K(`div`,mt,[r(i,{class:`is-loading`},{default:D(()=>[r(U(w))]),_:1}),I(`span`,null,j(b.value),1)])):A(``,!0),f.value.length===0&&!y.value?(J(),K(`div`,ht,[r(i,{size:32,color:`var(--text-tertiary)`},{default:D(()=>[r(U(e))]),_:1}),I(`div`,gt,j(U(Y)(`@WORKBENCH:开始与 AI 对话拆分`)),1),I(`div`,_t,j(U(Y)(`@WORKBENCH:输入你想让 AI 怎么拆分或调整(Enter 发送,Shift+Enter 换行)`)),1)])):A(``,!0),(J(!0),K(G,null,E(f.value,(e,t)=>(J(),K(`div`,{key:t,class:H([`ai-chat-turn`,`ai-chat-turn--${e.role}`])},[e.role===`user`?(J(),K(`div`,vt,[I(`pre`,yt,j(e.content),1)])):(J(),K(`div`,bt,[e.thinking?(J(),F(s,{key:0,class:`ai-chat-collapse`},{default:D(()=>[r(a,{title:U(Y)(`@WORKBENCH:思考过程`)+` (${e.thinking.length})`,name:`think`},{default:D(()=>[I(`pre`,xt,j(e.thinking),1)]),_:2},1032,[`title`])]),_:2},1024)):A(``,!0),e.content?(J(),K(`div`,St,j(e.content),1)):A(``,!0),e.subtasks&&e.subtasks.length>0?(J(),K(`div`,Ct,[I(`div`,wt,[I(`span`,Tt,j(U(Y)(`@WORKBENCH:识别到 {n} 个子任务`,{n:e.subtasks.length})),1)]),I(`ul`,Et,[(J(!0),K(G,null,E(e.subtasks,(e,t)=>(J(),K(`li`,{key:t,class:`ai-chat-list__item`},[I(`div`,$,j(t+1),1),I(`div`,Dt,[I(`div`,Ot,j(e.title),1),I(`div`,kt,j(e.desc),1)])]))),128))])])):A(``,!0),e.parseError&&(!e.subtasks||e.subtasks.length===0)?(J(),F(s,{key:3,class:`ai-chat-collapse`},{default:D(()=>[r(a,{title:U(Y)(`@WORKBENCH:查看解析详情`),name:`diag`},{default:D(()=>[I(`div`,At,j(e.parseError),1)]),_:2},1032,[`title`])]),_:2},1024)):A(``,!0),e.raw&&e.raw!==e.content?(J(),F(s,{key:4,class:`ai-chat-collapse`},{default:D(()=>[r(a,{title:U(Y)(`@WORKBENCH:查看原始 LLM 输出`),name:`raw`},{default:D(()=>[I(`pre`,jt,j(e.raw),1)]),_:2},1032,[`title`])]),_:2},1024)):A(``,!0),e.subtasks&&e.subtasks.length>0?(J(),K(`div`,Mt,[r(d,{type:`primary`,size:`small`,icon:U(c),onClick:t=>k(e)},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:应用本轮`))+` (`+j(e.subtasks.length)+`) `,1)]),_:2},1032,[`icon`,`onClick`])])):A(``,!0)]))],2))),128))],512),I(`div`,Nt,[r(m,{modelValue:p.value,"onUpdate:modelValue":n[0]||=e=>p.value=e,type:`textarea`,rows:3,disabled:y.value,placeholder:U(Y)(`@WORKBENCH:输入你想让 AI 怎么拆分或调整(Enter 发送,Shift+Enter 换行)`),onKeydown:ue(B(ne,[`exact`,`prevent`]),[`enter`])},null,8,[`modelValue`,`disabled`,`placeholder`,`onKeydown`]),I(`div`,Pt,[y.value?(J(),F(d,{key:0,type:`danger`,icon:U(ge),onClick:O},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:停止`)),1)]),_:1},8,[`icon`])):(J(),F(d,{key:1,type:`primary`,icon:U(c),disabled:!p.value.trim(),onClick:ne},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:发送`)),1)]),_:1},8,[`icon`,`disabled`])),r(d,{disabled:y.value,icon:U(u),onClick:re},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:清空对话`)),1)]),_:1},8,[`disabled`,`icon`]),r(d,{disabled:y.value,icon:U(R),onClick:ie},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:历史会话`)),1)]),_:1},8,[`disabled`,`icon`])])]),r(h,{modelValue:S.value,"onUpdate:modelValue":n[1]||=e=>S.value=e,title:U(Y)(`@WORKBENCH:历史会话`),direction:`rtl`,size:`420px`},{default:D(()=>[C.value?(J(),K(`div`,Ft,[r(i,{class:`is-loading`},{default:D(()=>[r(U(w))]),_:1})])):T.value.length===0?(J(),K(`div`,It,j(U(Y)(`@WORKBENCH:暂无历史会话`)),1)):(J(),K(`ul`,Lt,[(J(!0),K(G,null,E(T.value,e=>(J(),K(`li`,{key:e.sessionId,class:`ai-chat-history__item`},[I(`div`,Rt,j(e.title||`(无标题)`),1),I(`div`,zt,[I(`span`,null,j(se(e.updatedAt)),1),n[2]||=I(`span`,null,`·`,-1),I(`span`,null,j(e.messageCount)+` 条消息`,1),n[3]||=I(`span`,null,`·`,-1),I(`span`,null,j(e.latestSubtaskCount)+` 个子任务`,1),n[4]||=I(`span`,null,`·`,-1),I(`span`,null,j(ce(e.size)),1)]),I(`div`,Bt,[r(d,{size:`small`,type:`primary`,onClick:t=>ae(e.sessionId)},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:恢复`)),1)]),_:1},8,[`onClick`]),r(d,{size:`small`,type:`danger`,onClick:t=>oe(e.sessionId)},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:删除`)),1)]),_:1},8,[`onClick`])])]))),128))]))]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-69824510`]]),Ht={class:`ai-split-mode-bar`},Ut=X(C({__name:`AISplitDialog`,props:{modelValue:{type:Boolean},title:{},desc:{},taskId:{},promptId:{}},emits:[`update:modelValue`,`confirm`],setup(e,{emit:t}){let n=e,i=t,a=W(`direct`),o=V(()=>[{label:Y(`@WORKBENCH:直接拆分`),value:`direct`},{label:Y(`@WORKBENCH:对话拆分`),value:`chat`}]);function s(e){i(`confirm`,e),i(`update:modelValue`,!1)}return f(()=>n.modelValue,e=>{e&&(a.value=`direct`)}),(t,n)=>{let c=le,l=h;return J(),F(l,{"model-value":e.modelValue,"onUpdate:modelValue":n[1]||=e=>i(`update:modelValue`,e),title:U(Y)(`@WORKBENCH:AI 拆分任务`),width:`800px`,"close-on-click-modal":!1,"close-on-press-escape":!0,"show-close":!0},{default:D(()=>[I(`div`,Ht,[r(c,{modelValue:a.value,"onUpdate:modelValue":n[0]||=e=>a.value=e,options:o.value,block:!1},null,8,[`modelValue`,`options`])]),a.value===`direct`?(J(),F(ft,{key:0,title:e.title,desc:e.desc,"task-id":e.taskId,"prompt-id":e.promptId,onConfirm:s},null,8,[`title`,`desc`,`task-id`,`prompt-id`])):(J(),F(Vt,{key:1,title:e.title,desc:e.desc,"task-id":e.taskId,"prompt-id":e.promptId,onConfirm:s},null,8,[`title`,`desc`,`task-id`,`prompt-id`]))]),_:1},8,[`model-value`,`title`])}}}),[[`__scopeId`,`data-v-2732cf4b`]]),Wt={class:`import-split__strategy`},Gt={class:`import-split__preview`},Kt=X(C({__name:`ImportSplitDialog`,props:{modelValue:{type:Boolean},existingCount:{}},emits:[`update:modelValue`,`confirm`],setup(e,{emit:n}){let i=e,a=n,o=W(`append`),s=W(``);f(()=>i.modelValue,e=>{e&&(s.value=``,o.value=i.existingCount>0?`append`:`replace`)});function c(e){let t=[],n=0;for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e||e.startsWith(`#`)){n++;continue}let i=e.replace(/^[-*+•·]\s+/,``).replace(/^\[\s*[xX ]?\s*\]\s+/,``).replace(/^\d+[.)、]\s+/,``);t.push(i)}return{titles:t,skipped:n}}let l=V(()=>c(s.value)),u=V(()=>l.value.titles.length>0);function d(){a(`update:modelValue`,!1)}function p(){u.value&&(a(`confirm`,{strategy:o.value,titles:l.value.titles}),a(`update:modelValue`,!1))}return(n,i)=>{let c=y,f=t,m=ve,g=ee,_=h;return J(),F(_,{"model-value":e.modelValue,"onUpdate:modelValue":i[2]||=e=>a(`update:modelValue`,e),title:U(Y)(`@WORKBENCH:导入拆分对话框`),width:`720px`,"close-on-click-modal":!1,"close-on-press-escape":!0,"show-close":!0},{footer:D(()=>[r(g,{onClick:d},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:取消`)),1)]),_:1}),r(g,{type:`primary`,disabled:!u.value,onClick:p},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:导入`)),1)]),_:1},8,[`disabled`])]),default:D(()=>[I(`div`,Wt,[r(f,{modelValue:o.value,"onUpdate:modelValue":i[0]||=e=>o.value=e},{default:D(()=>[r(c,{value:`append`},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:追加`)),1)]),_:1}),r(c,{value:`replace`,disabled:e.existingCount===0},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:替换`)),1)]),_:1},8,[`disabled`]),r(c,{value:`merge`,disabled:e.existingCount===0},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:合并(跳过已存在)`)),1)]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`])]),r(m,{modelValue:s.value,"onUpdate:modelValue":i[1]||=e=>s.value=e,type:`textarea`,rows:12,placeholder:U(Y)(`@WORKBENCH:每行一个子任务,以 # 开头视为注释,空行忽略`),resize:`vertical`},null,8,[`modelValue`,`placeholder`]),I(`div`,Gt,j(U(Y)(`@WORKBENCH:已解析 N 个子任务,M 行被跳过`,{n:l.value.titles.length,m:l.value.skipped})),1)]),_:1},8,[`model-value`,`title`])}}}),[[`__scopeId`,`data-v-0fe76a16`]]),qt={class:`wb-attachments__head`},Jt={class:`wb-attachments__label`},Yt={class:`wb-attachments__count`},Xt=[`disabled`],Zt={key:0,class:`wb-attachments__paste-hint`},Qt={key:1,class:`wb-attachments__list`},$t=[`title`,`onClick`,`onContextmenu`],en=[`src`,`alt`],tn={key:1},nn={class:`wb-attachment__meta`},rn=[`title`],an=[`onClick`,`title`],on=X(C({__name:`AttachmentZone`,props:{attachments:{},isImage:{type:Function},humanSize:{type:Function},isUploading:{type:Boolean},isPasteHover:{type:Boolean},maxCount:{},onPick:{type:Function},onRemove:{type:Function}},emits:[`paste`,`drop`,`dragover`,`dragenter`,`dragleave`],setup(e,{emit:t}){let n=e,r=t,i=V(()=>n.attachments.filter(e=>n.isImage(e))),a=V(()=>i.value.map(e=>`/api/workbench/attachments/${e.id}/raw`)),o=W(0),c=W(!1);function l(e){if(n.isImage(e)){let t=i.value.findIndex(t=>t.id===e.id);o.value=t>=0?t:0,c.value=!0}else window.open(`/api/workbench/attachments/${e.id}/raw`,`_blank`,`noopener`)}function u(){c.value=!1}let d=W({visible:!1,x:0,y:0,att:null}),f=W(!1);function p(e,t){if(!n.isImage(e))return;t.preventDefault();let r=window.innerWidth-180,i=window.innerHeight-120;d.value={visible:!0,x:Math.min(t.clientX,r),y:Math.min(t.clientY,i),att:e}}function m(){d.value.visible&&(d.value.visible=!1)}async function h(){let e=d.value.att;if(!(!e||f.value)){if(m(),!navigator.clipboard||typeof ClipboardItem>`u`){L({type:`warning`,message:Y(`@WORKBENCH:当前浏览器不支持复制图片`)});return}f.value=!0;try{let t=await fetch(`/api/workbench/attachments/${e.id}/raw`,{credentials:`same-origin`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.blob(),r=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`].includes(n.type)?n.type:`image/png`,i=new ClipboardItem({[r]:n});await navigator.clipboard.write([i]),L({type:`success`,message:Y(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){L({type:`error`,message:Y(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{f.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,m),window.addEventListener(`scroll`,m,!0),window.addEventListener(`blur`,m)),s(()=>{typeof window>`u`||(window.removeEventListener(`click`,m),window.removeEventListener(`scroll`,m,!0),window.removeEventListener(`blur`,m))}),(t,n)=>(J(),K(G,null,[I(`div`,{class:H([`wb-attachments`,{"is-paste-hover":e.isPasteHover}]),onPaste:n[1]||=e=>r(`paste`,e),onDrop:n[2]||=B(e=>r(`drop`,e),[`prevent`]),onDragover:n[3]||=B(e=>r(`dragover`,e),[`prevent`]),onDragenter:n[4]||=B(e=>r(`dragenter`,e),[`prevent`]),onDragleave:n[5]||=e=>r(`dragleave`,e)},[I(`div`,qt,[I(`span`,Jt,[x(j(U(Y)(`@WORKBENCH:附件`))+` `,1),I(`span`,Yt,j(e.attachments.length)+` / `+j(e.maxCount),1)]),I(`button`,{class:`wb-attachments__add wb-soft-btn`,disabled:e.isUploading||e.attachments.length>=e.maxCount,onClick:n[0]||=(...t)=>e.onPick&&e.onPick(...t)},j(e.isUploading?U(Y)(`@WORKBENCH:上传中…`):U(Y)(`@WORKBENCH:添加附件`)),9,Xt)]),e.isPasteHover?(J(),K(`div`,Zt,j(U(Y)(`@WORKBENCH:粘贴图片以快速添加`)),1)):A(``,!0),e.attachments.length>0?(J(),K(`ul`,Qt,[(J(!0),K(G,null,E(e.attachments,t=>(J(),K(`li`,{key:t.id,class:`wb-attachment`},[I(`button`,{type:`button`,class:`wb-attachment__preview`,title:U(Y)(`@WORKBENCH:点击预览`),onClick:e=>l(t),onContextmenu:e=>p(t,e)},[I(`div`,{class:H([`wb-attachment__icon`,{"wb-attachment__icon--img":e.isImage(t)}])},[e.isImage(t)?(J(),K(`img`,{key:0,src:`/api/workbench/attachments/${t.id}/raw`,alt:t.originalName,loading:`lazy`},null,8,en)):(J(),K(`span`,tn,j(t.ext.toUpperCase()),1))],2),I(`div`,nn,[I(`div`,{class:`wb-attachment__name`,title:`${t.originalName} (${e.humanSize(t.size)})`},j(t.originalName),9,rn)])],40,$t),I(`button`,{class:`wb-attachment__del`,onClick:B(n=>e.onRemove(t),[`stop`]),title:U(Y)(`@WORKBENCH:删除`)},`×`,8,an)]))),128))])):A(``,!0)],34),c.value&&a.value.length>0?(J(),F(U(Te),{key:0,"url-list":a.value,"initial-index":o.value,"hide-on-click-modal":!0,teleported:!0,onClose:u},null,8,[`url-list`,`initial-index`])):A(``,!0),(J(),F(P,{to:`body`},[d.value.visible&&d.value.att&&e.isImage(d.value.att)?(J(),K(`ul`,{key:0,class:`wb-ctx-menu`,style:me({top:d.value.y+`px`,left:d.value.x+`px`}),onContextmenu:n[6]||=B(()=>{},[`prevent`])},[I(`li`,{class:H([`wb-ctx-menu__item`,{"is-disabled":f.value}]),onClick:h},[n[7]||=I(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[I(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[I(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),I(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),I(`span`,null,j(U(Y)(`@WORKBENCH:复制图片`)),1)],2)],36)):A(``,!0)]))],64))}}),[[`__scopeId`,`data-v-a91dbb19`]]),sn=[`aria-expanded`],cn={class:`wb-log-summary__left`},ln={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},un={class:`wb-log-summary__label`},dn={key:0,class:`wb-log-summary__elapsed`},fn={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},pn={class:`wb-log-summary__label`},mn={class:`wb-log-summary__icon`},hn={class:`wb-log-summary__label`},gn={key:0,class:`wb-log-summary__elapsed`},_n={key:3},vn={class:`wb-log-summary__right`},yn={class:`wb-log-summary__meta`},bn=[`title`,`aria-label`],xn={class:`wb-log-details__body`},Sn={key:0,class:`wb-chat__foot`},Cn=[`title`,`aria-label`],wn={key:1,class:`wb-log-fullscreen__empty`},Tn=64*1024,En=`Claude`,Dn=X(C({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(e,{emit:t}){let n=Me(),i=e,a=t,o=W(!1);function s(){o.value=!o.value}let c=V(()=>i.job.status===`running`||i.job.status===`pending`);f(()=>i.job.status,(e,t)=>{!(t===`running`||t===`pending`)&&(e===`running`||e===`pending`)&&(o.value=!1)});function l(){let e=i.job.output||``;return e?e.length<=Tn?e:`${Y(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}function u(){let e=i.job.thinking||``;return e?e.length<=Tn?e:`${Y(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function d(e){try{if(navigator?.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}async function p(){let e=[];if(i.job.prompt&&e.push(`## ${Y(`@WORKBENCH:用户提示词`)}\n\n${i.job.prompt}`),i.job.thinking&&e.push(`## ${Y(`@WORKBENCH:Claude 思考`)}\n\n${i.job.thinking}`),i.job.output&&e.push(`## ${Y(`@WORKBENCH:模型返回`)}\n\n${i.job.output}`),!e.length){L.warning(Y(`@WORKBENCH:暂无内容可复制`));return}await d(e.join(`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
`))?L.success(Y(`@WORKBENCH:已复制到剪贴板`)):L.error(Y(`@WORKBENCH:复制失败`))}let m=V(()=>{let e=i.job.status;return e===`done`||e===`error`||e===`cancelled`}),_=V(()=>i.job.status===`cancelled`?`wb-log-summary__status--cancelled`:i.job.status===`error`?`wb-log-summary__status--error`:`wb-log-summary__status--done`),v=V(()=>i.job.status===`cancelled`?`⏹`:i.job.status===`error`?`✗`:`✓`),y=V(()=>i.job.status===`cancelled`?Y(`@WORKBENCH:已停止`):i.job.status===`error`?Y(`@WORKBENCH:执行出错`):Y(`@WORKBENCH:执行完成`));function b(e,t){return e===`running`||e===`pending`?t?`streaming`:`pending`:e===`error`?`error`:`done`}let x=V(()=>{let e=i.job,t=[],n=e.startedAt?new Date(e.startedAt).getTime():Date.now();e.prompt&&t.push({id:`${e.id}-u`,role:`user`,content:e.prompt,status:`done`,createdAt:n});let r=l(),a=u(),o=!!r,s=!!a,c=o||s,d=b(e.status,c);return t.push({id:`${e.id}-a`,role:`assistant`,content:r,reasoning:s?a:void 0,reasoningStatus:s?o?`done`:d===`streaming`?`streaming`:`done`:void 0,status:d,error:d===`error`&&e.error||void 0,createdAt:n}),t}),S=W(null);f(()=>i.job.status,(e,t)=>{e===`running`&&t!==`running`&&(S.value=S.value??Date.now())});let C=V(()=>{if(!S.value)return``;let e=S.value,t=i.job.endedAt?new Date(i.job.endedAt).getTime():Date.now(),n=Math.max(0,Math.floor((t-e)/1e3));return n<60?`${n}s`:`${Math.floor(n/60)}分${(n%60).toString().padStart(2,`0`)}秒`}),w=W(!1),ee=V(()=>!!(i.job.output&&i.job.output.length)),T=V(()=>i.job.output||``),E=W(null);f(w,async e=>{e&&(await g(),E.value&&(E.value.scrollTop=E.value.scrollHeight))}),f(()=>(i.job.output||``).length,async()=>{w.value&&(await g(),E.value&&(E.value.scrollTop=E.value.scrollHeight))});function te(){}let ne=V(()=>m.value&&!!i.job.prompt);function O(){a(`re-execute`,i.job)}return(t,i)=>{let a=h;return J(),K(`div`,{class:H([`wb-log-details`,{"is-running":c.value,"is-pending":e.job.status===`pending`,"is-finished":m.value}])},[I(`div`,{class:`wb-log-summary`,onClick:s,role:`button`,"aria-expanded":!o.value},[I(`span`,cn,[e.job.status===`running`?(J(),K(`span`,ln,[I(`span`,un,j(U(Y)(`@WORKBENCH:正在执行…`)),1),i[1]||=I(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[I(`span`,{class:`wb-log-dots__dot`}),I(`span`,{class:`wb-log-dots__dot`}),I(`span`,{class:`wb-log-dots__dot`})],-1),C.value?(J(),K(`span`,dn,j(C.value),1)):A(``,!0)])):e.job.status===`pending`?(J(),K(`span`,fn,[I(`span`,pn,j(U(Y)(`@WORKBENCH:排队中…`)),1),i[2]||=I(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[I(`span`,{class:`wb-log-dots__dot`}),I(`span`,{class:`wb-log-dots__dot`}),I(`span`,{class:`wb-log-dots__dot`})],-1)])):m.value?(J(),K(`span`,{key:2,class:H([`wb-log-summary__status`,_.value])},[I(`span`,mn,j(v.value),1),I(`span`,hn,j(y.value),1),C.value?(J(),K(`span`,gn,j(C.value),1)):A(``,!0)],2)):(J(),K(`span`,_n,j(U(Y)(`@WORKBENCH:查看执行日志`)),1))]),I(`span`,vn,[I(`span`,yn,j((e.job.output||``).length)+` `+j(U(Y)(`@WORKBENCH:字符`)),1),I(`button`,{type:`button`,class:`wb-log-copy`,title:U(Y)(`@WORKBENCH:复制全部(含提示词与输出)`),"aria-label":U(Y)(`@WORKBENCH:复制全部`),onClick:B(p,[`stop`])},` ⧉ `,8,bn)])],8,sn),k(I(`div`,xn,[r(U(je),{messages:x.value,"assistant-name":En,"show-avatar":!1,theme:U(n).theme,class:`wb-job-chat`},null,8,[`messages`,`theme`]),ne.value?(J(),K(`footer`,Sn,[I(`button`,{type:`button`,class:`wb-chat__action`,title:U(Y)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":U(Y)(`@WORKBENCH:重新执行`),onClick:O},` ↻ `,8,Cn)])):A(``,!0),r(a,{modelValue:w.value,"onUpdate:modelValue":i[0]||=e=>w.value=e,title:U(Y)(`@WORKBENCH:模型返回 - 全屏查看`),fullscreen:``,"close-on-click-modal":!1,class:`wb-log-fullscreen-dialog`,onClosed:te},{default:D(()=>[I(`div`,{ref_key:`fullscreenContainerRef`,ref:E,class:`wb-log-fullscreen`},[ee.value?(J(),F(U(ke),{key:0,source:T.value,class:`wb-log-fullscreen__render`},null,8,[`source`])):(J(),K(`div`,wn,j(U(Y)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[xe,!o.value]])],2)}}}),[[`__scopeId`,`data-v-7875cbc5`]]);function On(e){switch(e){case`todo`:return Y(`@WORKBENCH:待执行`);case`running`:return Y(`@WORKBENCH:执行中`);case`done`:return Y(`@WORKBENCH:已完成`);case`error`:return Y(`@WORKBENCH:出错`);case`cancelled`:return Y(`@WORKBENCH:已取消`);case`pending`:return Y(`@WORKBENCH:排队中`);default:return e}}function kn(e){switch(e){case`running`:return`var(--color-primary)`;case`done`:return`#22c55e`;case`error`:return`#ef4444`;case`cancelled`:return`#9ca3af`;case`pending`:return`#f59e0b`;default:return`var(--text-tertiary)`}}var An={class:`exec-logs`},jn={class:`exec-logs__head`},Mn={class:`exec-logs__title-block`},Nn={class:`exec-logs__stats`},Pn={class:`exec-logs__head-actions`},Fn={class:`exec-logs__config`},In={class:`exec-logs__config-label`},Ln={class:`exec-logs__config-field`},Rn={class:`exec-logs__config-name`},zn={class:`exec-logs__config-field`},Bn={class:`exec-logs__config-name`},Vn={class:`exec-logs__filter`},Hn={key:0,class:`exec-logs__batch-meta`},Un={key:0,class:`exec-logs__batch`},Wn={class:`exec-logs__list`},Gn={key:0,class:`exec-logs__empty`},Kn={class:`exec-logs__empty-art`,"aria-hidden":`true`},qn={class:`exec-logs__empty-title`},Jn={class:`exec-logs__empty-hint`},Yn={class:`exec-card__head`},Xn=[`title`],Zn={class:`exec-card__meta`},Qn={key:0,class:`exec-card__task`},$n={key:1,class:`exec-card__time`},er={key:2,class:`exec-card__exit`},tr=[`title`,`onClick`],nr={key:0,class:`exec-card__error`},rr={key:1,class:`exec-logs__pager`},ir=50,ar=X(C({__name:`ExecutionLogManager`,setup(e){function t(e){return e instanceof Error?e.message:String(e)}let i=W([]),a=W(0),o=oe({count:0,sizeMB:0,byStatus:{}}),s=W(!1),c=W(new Set),l=oe({q:``,status:``,page:1}),d=W({maxCount:500,maxSizeMB:256}),f=oe({maxCount:500,maxSizeMB:256}),p=W(!1),h=[{value:`pending`,label:Y(`@WORKBENCH:排队中`)},{value:`running`,label:Y(`@WORKBENCH:执行中`)},{value:`done`,label:Y(`@WORKBENCH:已完成`)},{value:`error`,label:Y(`@WORKBENCH:出错`)},{value:`cancelled`,label:Y(`@WORKBENCH:已取消`)}],g=V(()=>i.value.length>0&&i.value.every(e=>c.value.has(e.id))),_=V(()=>i.value.some(e=>c.value.has(e.id))&&!g.value);async function v(){s.value=!0;try{let e=new URLSearchParams;l.q&&e.set(`q`,l.q),l.status&&e.set(`status`,l.status),e.set(`limit`,String(ir)),e.set(`offset`,String((l.page-1)*ir));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);i.value=t.jobs,a.value=t.total,o.count=t.stats.count,o.sizeMB=t.stats.sizeMB,o.byStatus=t.stats.byStatus;let n=new Set(i.value.map(e=>e.id));for(let e of Array.from(c.value))n.has(e)||c.value.delete(e)}catch(e){L.error(Y(`@WORKBENCH:加载失败`)+`: `+t(e))}finally{s.value=!1}}async function y(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(d.value=e.config,f.maxCount=e.config.maxCount,f.maxSizeMB=e.config.maxSizeMB)}catch{}}async function S(){p.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:f.maxCount,maxSizeMB:f.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);d.value=e.config,L.success(Y(`@WORKBENCH:已保存策略`)),await v()}catch(e){L.error(Y(`@WORKBENCH:保存失败`)+`: `+t(e))}finally{p.value=!1}}function C(){l.page=1,v()}function w(){l.q=``,l.status=``,l.page=1,v()}function te(e,t){t?c.value.add(e):c.value.delete(e),c.value=new Set(c.value)}function ne(e){if(e)for(let e of i.value)c.value.add(e.id);else for(let e of i.value)c.value.delete(e.id);c.value=new Set(c.value)}function O(e){L.info(Y(`@WORKBENCH:请到工作台主面板的对应任务上点击「重新执行」`))}async function re(e){try{await ye.confirm(Y(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),Y(`@WORKBENCH:删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/${e}`,{method:`DELETE`}).then(e=>e.json());if(!t.success)throw Error(t.error||`delete failed`);c.value.delete(e),c.value=new Set(c.value),await v()}catch(e){L.error(Y(`@WORKBENCH:保存失败`)+`: `+t(e))}}async function ae(){let e=Array.from(c.value);if(e.length!==0){try{await ye.confirm(Y(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),Y(`@WORKBENCH:批量删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/batch-delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({ids:e})}).then(e=>e.json());if(!t.success)throw Error(t.error||`batch delete failed`);L.success(Y(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),c.value=new Set,await v()}catch(e){L.error(Y(`@WORKBENCH:保存失败`)+`: `+t(e))}}}async function se(){let e=o.count;if(e!==0){try{await ye.confirm(Y(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),Y(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:Y(`@WORKBENCH:清空全部`)})}catch{return}try{let t=await fetch(`/api/workbench/jobs/clear`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({confirm:!0})}).then(e=>e.json());if(!t.success)throw Error(t.error||`clear failed`);L.success(Y(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),c.value=new Set,await v()}catch(e){L.error(Y(`@WORKBENCH:保存失败`)+`: `+t(e))}}}function le(e,t){if(!e)return``;let n=new Date(e).getTime(),r=t?new Date(t).getTime():Date.now(),i=Math.max(0,r-n);return i<1e3?`${i}ms`:i<6e4?`${(i/1e3).toFixed(1)}s`:i<36e5?`${Math.floor(i/6e4)}m ${Math.floor(i%6e4/1e3)}s`:`${Math.floor(i/36e5)}h ${Math.floor(i%36e5/6e4)}m`}return m(()=>{v(),y()}),(e,t)=>{let d=ee,m=n,y=ve,oe=De,de=b,M=T,N=fe,P=ce,F=ie;return J(),K(`div`,An,[I(`header`,jn,[I(`div`,Mn,[I(`span`,Nn,j(U(Y)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:o.count,size:o.sizeMB})),1)]),I(`div`,Pn,[r(d,{icon:U(u),size:`small`,loading:s.value,onClick:v},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),r(d,{type:`danger`,plain:``,size:`small`,disabled:o.count===0,onClick:se},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),I(`div`,Fn,[I(`span`,In,j(U(Y)(`@WORKBENCH:保存策略`)),1),I(`span`,Ln,[I(`span`,Rn,j(U(Y)(`@WORKBENCH:最大条数`)),1),r(m,{modelValue:f.maxCount,"onUpdate:modelValue":t[0]||=e=>f.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),I(`span`,zn,[I(`span`,Bn,j(U(Y)(`@WORKBENCH:最大体积 (MB)`)),1),r(m,{modelValue:f.maxSizeMB,"onUpdate:modelValue":t[1]||=e=>f.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),r(d,{type:`primary`,size:`small`,loading:p.value,onClick:S},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),I(`div`,Vn,[r(y,{modelValue:l.q,"onUpdate:modelValue":t[2]||=e=>l.q=e,placeholder:U(Y)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:ue(C,[`enter`]),onClear:C},null,8,[`modelValue`,`placeholder`]),r(de,{modelValue:l.status,"onUpdate:modelValue":t[3]||=e=>l.status=e,placeholder:U(Y)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:C},{default:D(()=>[(J(),K(G,null,E(h,e=>r(oe,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),r(d,{size:`small`,onClick:w},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:重置`)),1)]),_:1}),t[5]||=I(`span`,{class:`exec-logs__filter-spacer`},null,-1),c.value.size>0?(J(),K(`span`,Hn,j(U(Y)(`@WORKBENCH:已选择 {count} 项`,{count:c.value.size})),1)):A(``,!0)]),c.value.size>0?(J(),K(`div`,Un,[r(M,{"model-value":g.value,indeterminate:_.value,onChange:ne},{default:D(()=>[x(j(g.value?U(Y)(`@WORKBENCH:取消全选`):U(Y)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),r(d,{type:`danger`,size:`small`,onClick:ae},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:批量删除`)),1)]),_:1})])):A(``,!0),k((J(),K(`div`,Wn,[!s.value&&i.value.length===0?(J(),K(`div`,Gn,[I(`div`,Kn,[r(N,null,{default:D(()=>[r(U(pe))]),_:1})]),I(`div`,qn,j(U(Y)(`@WORKBENCH:暂无执行日志`)),1),I(`div`,Jn,j(U(Y)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):A(``,!0),(J(!0),K(G,null,E(i.value,e=>(J(),K(`article`,{key:e.id,class:H([`exec-card`,{"is-selected":c.value.has(e.id)}])},[I(`header`,Yn,[r(M,{"model-value":c.value.has(e.id),onChange:t=>te(e.id,t)},null,8,[`model-value`,`onChange`]),I(`span`,{class:`exec-card__status`,style:me({color:U(kn)(e.status),borderColor:U(kn)(e.status)})},j(U(On)(e.status)),5),I(`span`,{class:`exec-card__title`,title:e.title||U(Y)(`@WORKBENCH:无标题`)},j(e.title||U(Y)(`@WORKBENCH:无标题`)),9,Xn),t[6]||=I(`span`,{class:`exec-card__spacer`},null,-1),I(`span`,Zn,[e.taskTitle?(J(),K(`span`,Qn,`📁 `+j(e.taskTitle),1)):A(``,!0),e.startedAt?(J(),K(`span`,$n,`⏱ `+j(le(e.startedAt,e.endedAt)),1)):A(``,!0),e.exitCode===null?A(``,!0):(J(),K(`span`,er,`exit `+j(e.exitCode),1))]),I(`button`,{type:`button`,class:`exec-card__del`,title:U(Y)(`@WORKBENCH:删除`),onClick:t=>re(e.id)},`×`,8,tr)]),e.error?(J(),K(`p`,nr,`⚠ `+j(e.error),1)):A(``,!0),r(Dn,{job:e,onReExecute:O},null,8,[`job`])],2))),128))])),[[F,s.value]]),a.value>ir?(J(),K(`footer`,rr,[r(P,{"current-page":l.page,"onUpdate:currentPage":t[4]||=e=>l.page=e,"page-size":ir,total:a.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:v},null,8,[`current-page`,`total`])])):A(``,!0)])}}}),[[`__scopeId`,`data-v-b9c0dae0`]]),or=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/gif`,`image/webp`,`image/bmp`,`image/svg+xml`,`application/pdf`,`text/plain`,`text/markdown`,`text/x-markdown`,`text/csv`,`application/json`,`text/json`,`text/x-log`]),sr=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,cr=5*1024*1024;function lr(){let e=W({}),t=W(null);function n(t){return!!e.value[t]}function r(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function i(e){return e.kind===`task`?`task-${e.task?.id??``}`:`sub-${e.sub.id}`}function a(e){let t=e.kind===`task`?e.task?.attachments:e.sub.attachments;return Array.isArray(t)?t:[]}function o(e,t){e.kind===`task`?e.task&&(e.task.attachments=t):e.sub.attachments=t}function s(e){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments`:`/api/workbench/subtasks/${e.sub.id}/attachments`}function c(e,t){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments/${t}`:`/api/workbench/subtasks/${e.sub.id}/attachments/${t}`}function l(e,t){if(!e.clipboardData)return;let n=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`));if(n.length>0){e.preventDefault();for(let e of n){let n=e.getAsFile();if(!n)continue;let i=(n.type.split(`/`)[1]||`png`).replace(`jpeg`,`jpg`);d(t,r(n,`paste-${new Date().toISOString().replace(/[:.]/g,`-`)}.${i}`))}return}let i=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&!e.type.startsWith(`image/`));if(i.length>0){e.preventDefault();for(let e of i){let n=e.getAsFile();n&&d(t,r(n,n.name||`pasted-file`))}}}function u(e,n){t.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>d(n,e))}async function d(t,n){if(n.size>5242880){L.error(`「${n.name}」${Y(`@WORKBENCH:超过 5MB 限制`)}`);return}if(!or.has(n.type)&&!n.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){L.error(`${Y(`@WORKBENCH:不支持的文件类型`)}(${n.name})`);return}let r=a(t);if(r.length>=9){L.error(Y(`@WORKBENCH:单个任务最多 9 个附件`));return}if(r.find(e=>e.originalName===n.name&&e.size===n.size)){L.info(`${n.name} ${Y(`@WORKBENCH:已存在,已复用`)}`);return}let c=i(t);e.value[c]=!0;try{let e=await fetch(s(t),{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":n.name,"X-Mime-Type":n.type||`application/octet-stream`},body:n}).then(e=>e.json());if(e.success){let r=a(t);r.push(e.attachment),o(t,r),L.success(`${Y(`@WORKBENCH:已添加:`)}${n.name}`)}else L.error(e.error||Y(`@WORKBENCH:上传失败`))}catch(e){L.error(Y(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{e.value[c]=!1}}async function f(e,t){try{await ye.confirm(Y(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),Y(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(c(e,t.id),{method:`DELETE`}).then(e=>e.json());n.success?(o(e,a(e).filter(e=>e.id!==t.id)),L.success(Y(`@WORKBENCH:已删除`))):L.error(n.error||Y(`@WORKBENCH:删除失败`))}function p(e){let t=document.createElement(`input`);t.type=`file`,t.accept=sr,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>d(e,t))},t.click()}let m=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function h(e){let t=String(e?.ext||``).toLowerCase();if(t&&m.has(t)||String(e?.mimeType||``).toLowerCase().startsWith(`image/`))return!0;let n=String(e?.originalName||``).toLowerCase();return/\.(png|jpe?g|gif|webp|bmp|svg)$/.test(n)}function g(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return{uploadingTargets:e,pasteHoverId:t,isUploading:n,ensureFile:r,isImageAttachment:h,humanSize:g,targetKey:i,targetAttachments:a,setTargetAttachments:o,targetUploadUrl:s,targetDeleteUrl:c,onAttachmentPaste:l,onAttachmentDrop:u,uploadAttachment:d,removeAttachment:f,pickAttachmentFile:p}}var ur=`__simple`,dr=64*1024;function fr(e,t){function n(t){if(!t)return[];let n=`${t.id}${ur}`;return e.value.filter(e=>e.subId===n||e.subId.startsWith(`${n}__r`)).sort((e,t)=>{let n=e.startedAt||``,r=t.startedAt||``;return n&&r?n.localeCompare(r):n?-1:+!!r})}function r(e){if(!e)return null;let t=n(e);return t.length>0?t[t.length-1]:null}function i(e){return e?e.status===`pending`||e.status===`running`?`running`:e.status===`done`?`done`:e.status===`cancelled`?`cancelled`:`error`:`idle`}return{simpleConversationMessages:V(()=>{if(!t.value)return[];let e=n(t.value);if(e.length===0)return[];let r=[];return e.forEach((t,n)=>{let i=n===e.length-1,a=t.startedAt?new Date(t.startedAt).getTime():Date.now();t.prompt&&r.push({id:`${t.id}-u`,role:`user`,content:t.prompt,status:`done`,createdAt:a});let o=t.output||``,s=t.thinking||``,c=o.length>dr?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>dr?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=u||d,p;if(!i)p=`done`;else{let e=t.status;p=e===`running`||e===`pending`?f?`streaming`:`pending`:e===`error`?`error`:`done`}r.push({id:`${t.id}-a`,role:`assistant`,content:c,reasoning:d?l:void 0,reasoningStatus:d?!i&&u||u?`done`:p===`streaming`?`streaming`:`done`:void 0,status:p,error:p===`error`&&t.error||void 0,createdAt:a})}),r}),simpleAllJobsFor:n,simpleJobFor:r,simpleJobState:i,SIMPLE_SUB_ID_SUFFIX:ur,MAX_LOG_DISPLAY_SIMPLE:dr}}function pr(e,t,n,r){async function i(i){if(i.type===`simple`)return a(i);if(!i.subtasks||i.subtasks.length===0){L.warning(Y(`@WORKBENCH:请先拆分任务`));return}if(n.value&&n.value.id===i.id){let e=t.value.find(e=>e.id===i.id);if((!e||e.title!==n.value.title||e.desc!==n.value.desc||JSON.stringify(e.subtasks)!==JSON.stringify(n.value.subtasks)||e.promptId!==n.value.promptId)&&!await r.persistTask(!1))return}let o=i.subtasks.filter(e=>e.status===`done`);if(o.length>0){let t=`close`;try{await ye.confirm(Y(`@WORKBENCH:该任务有 {n} 个子任务已 done,如何处理?`,{n:o.length})+`
|
|
10
|
+
|
|
11
|
+
`+Y(`@WORKBENCH:点"确定"将重置全部 done 为 todo,从头跑一遍(会消耗 token)`)+`
|
|
12
|
+
`+Y(`@WORKBENCH:点"取消"将保留 done 状态,只跑未完成的 sub`),Y(`@WORKBENCH:检测到已完成子任务`),{confirmButtonText:Y(`@WORKBENCH:重置全部并重跑`),cancelButtonText:Y(`@WORKBENCH:只跑未完成`),type:`warning`,distinguishCancelAndClose:!0,showClose:!0}),t=`confirm`}catch(e){t=e===`cancel`?`cancel`:`close`}if(t===`close`)return;if(t===`confirm`){let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(i.id)}/clear-execution`,{method:`POST`,headers:{"Content-Type":`application/json`}}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));if(!t?.success){L.error(t?.error||Y(`@WORKBENCH:清空失败`));return}if(Array.isArray(i.subtasks))for(let e of i.subtasks)e.status=`todo`,e.error&&delete e.error;e.value=e.value.filter(e=>e.taskId!==i.id),r.syncRunningCount(),L.success(t.message||Y(`@WORKBENCH:已重置,准备从头执行`))}}await r.clearNonDoneJobsByTask(i.id);let s=await fetch(`/api/workbench/tasks/${i.id}/run`,{method:`POST`}).then(e=>e.json());s.success?L.success(s.message||Y(`@WORKBENCH:已加入执行队列`)):L.error(s.error||Y(`@WORKBENCH:执行失败`))}async function a(e){if(n.value&&n.value.id===e.id){let i=t.value.find(t=>t.id===e.id);if((!i||i.title!==n.value.title||i.desc!==n.value.desc||i.promptId!==n.value.promptId||(i.simpleOverride||``)!==(n.value.simpleOverride||``))&&!await r.persistTask(!1))return}await r.clearJobsByTask(e.id);let i=await fetch(`/api/workbench/tasks/${e.id}/run-simple`,{method:`POST`}).then(e=>e.json());i.success?L.success(i.message||Y(`@WORKBENCH:已加入执行队列`)):L.error(i.error||Y(`@WORKBENCH:执行失败`))}async function o(e,t){let n=r.simpleAllJobsFor(e).slice(-1)[0];if(!n){L.error(Y(`@WORKBENCH:没有可续接的会话`));return}let i=Array.isArray(e.attachments)?e.attachments:[],a=await fetch(`/api/workbench/jobs/${n.id}/continue`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({userMessage:t,attachments:i})}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));a.success?L.success(a.message||Y(`@WORKBENCH:已加入续接队列`)):L.error(a.error||Y(`@WORKBENCH:续接失败`))}async function s(e,t){let n=t.text.trim();if(n){for(let n of t.files)await r.uploadAttachment({kind:`task`,task:e},n.file);await o(e,n)}}async function c(e){let n=e.subId||``,i=n.match(/^(.+)__simple(?:__r\d+)?$/);if(i){let e=i[1],n=t.value.find(t=>t.id===e);if(!n){L.error(Y(`@WORKBENCH:任务不存在,无法重新执行`));return}await a(n);return}for(let e of t.value){let t=(e.subtasks||[]).find(e=>e.id===n);if(t){let e=r.jobOf(t.id);if(e&&(e.status===`running`||e.status===`pending`)){L.warning(Y(`@WORKBENCH:该子任务正在执行中`));return}let n=await fetch(`/api/workbench/subtasks/${t.id}/run`,{method:`POST`}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));n.success?L.success(n.message||Y(`@WORKBENCH:已开始执行子任务`)):L.error(n.error||Y(`@WORKBENCH:执行失败`));return}}L.error(Y(`@WORKBENCH:找不到对应任务,无法重新执行`))}async function l(e){if(!n.value)return;let i=n.value,a=r.jobOf(e.id);if(a&&(a.status===`running`||a.status===`pending`)){L.warning(Y(`@WORKBENCH:该子任务正在执行中`));return}let o=t.value.find(e=>e.id===i.id);if((!o||o.title!==i.title||o.desc!==i.desc||JSON.stringify(o.subtasks)!==JSON.stringify(i.subtasks)||o.promptId!==i.promptId)&&!await r.persistTask(!1))return;let s=await fetch(`/api/workbench/subtasks/${e.id}/run`,{method:`POST`}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));s.success?L.success(s.message||Y(`@WORKBENCH:已开始执行子任务`)):L.error(s.error||Y(`@WORKBENCH:执行失败`))}function u(e){if(e.status===`done`)return!1;let t=r.jobOf(e.id);return!(t&&(t.status===`running`||t.status===`pending`))}function d(e){if(!u(e)||!n.value)return!1;let t=n.value.subtasks||[],r=t.findIndex(t=>t.id===e.id);return!(r<0||r===t.length-1)}async function f(e){if(!n.value)return;let i=n.value,a=(i.subtasks||[]).findIndex(t=>t.id===e.id);if(a<0)return;let o=t.value.find(e=>e.id===i.id);if((!o||o.title!==i.title||o.desc!==i.desc||JSON.stringify(o.subtasks)!==JSON.stringify(i.subtasks)||o.promptId!==i.promptId)&&!await r.persistTask(!1))return;let s=await fetch(`/api/workbench/tasks/${i.id}/run-from`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({startSubIndex:a})}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));s.success?L.success(s.message||Y(`@WORKBENCH:已从此处开始执行`)):L.error(s.error||Y(`@WORKBENCH:执行失败`))}async function p(e){try{await ye.confirm(Y(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),Y(`@WORKBENCH:停止执行`),{confirmButtonText:Y(`@WORKBENCH:停止`),cancelButtonText:Y(`@WORKBENCH:取消`),type:`warning`})}catch{return}let t=await fetch(`/api/workbench/jobs/${e.id}/cancel`,{method:`POST`}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));t.success?L.success(Y(`@WORKBENCH:已发送停止信号`)):L.error(t.error||Y(`@WORKBENCH:停止失败`))}async function m(e,t){n.value&&(e.status=`todo`,await t(!1))}async function h(){if(!n.value)return;let t=n.value,i=Array.isArray(t.subtasks)?t.subtasks:[],a=i.filter(e=>e.status===`done`).length,o=i.filter(e=>e.status===`error`).length,s=i.filter(e=>e.status===`running`).length,c=e.value.filter(e=>e.taskId===t.id),l=a+o===0?Y(`@WORKBENCH:当前任务还没有执行内容,确认仍要清空?`):Y(`@WORKBENCH:将清空 {n} 个已执行/失败的子任务和 {m} 条执行记录,任务拆分/描述/附件保留。`,{n:a+o,m:c.length});try{await ye.confirm(l,Y(`@WORKBENCH:清空执行内容`),{confirmButtonText:Y(`@WORKBENCH:清空`),cancelButtonText:Y(`@WORKBENCH:取消`),type:`warning`})}catch{return}if(s>0){L.warning(Y(`@WORKBENCH:有 {n} 个子任务正在执行,请先停止`,{n:s}));return}let u=await fetch(`/api/workbench/tasks/${encodeURIComponent(t.id)}/clear-execution`,{method:`POST`,headers:{"Content-Type":`application/json`}}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));if(u?.success){if(Array.isArray(t.subtasks))for(let e of t.subtasks)e.status=`todo`,e.error&&delete e.error;e.value=e.value.filter(e=>e.taskId!==t.id),r.syncRunningCount(),L.success(u.message||Y(`@WORKBENCH:已清空执行内容`))}else L.error(u?.error||Y(`@WORKBENCH:清空失败`))}async function g(t){if(!n.value)return;let i=n.value,a=Array.isArray(i.subtasks)?i.subtasks.length:0;if(a===0){L.warning(Y(`@WORKBENCH:当前任务没有子任务`));return}if(e.value.find(e=>e.taskId===i.id&&(e.status===`running`||e.status===`pending`))){L.warning(Y(`@WORKBENCH:有子任务正在执行,请先停止`));return}try{await ye.confirm(Y(`@WORKBENCH:将删除 {n} 个子任务,任务描述/附件/标题保留,确认?`,{n:a}),Y(`@WORKBENCH:清空子任务`),{confirmButtonText:Y(`@WORKBENCH:清空`),cancelButtonText:Y(`@WORKBENCH:取消`),type:`warning`})}catch{return}let o=await fetch(`/api/workbench/tasks/${encodeURIComponent(i.id)}/clear-subtasks`,{method:`POST`,headers:{"Content-Type":`application/json`}}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));o?.success?(i.subtasks=[],t(),e.value=e.value.filter(e=>e.taskId!==i.id),r.syncRunningCount(),L.success(o.message||Y(`@WORKBENCH:已清空子任务`))):L.error(o?.error||Y(`@WORKBENCH:清空失败`))}return{runTask:i,runSimpleTask:a,continueChat:o,onContinueSendFromChat:s,onReExecuteJob:c,runSubtask:l,canRunSubtask:u,canRunFromHere:d,runFromHere:f,cancelJob:p,cancelDone:m,clearExecutionForSelectedTask:h,clearSubtasksForSelectedTask:g}}function mr(){let e=W([]),t=W([]),n=W([]),r=W({path:``,name:``}),i=Ne();function a(){i.setRunning(n.value.filter(e=>e.status===`running`).length)}function o(e){return n.value.find(t=>t.subId===e)||null}function s(e,r){if(e===`hello`){n.value=r.jobs||[],a();return}if(e===`job:update`){let e=r,t=n.value.findIndex(t=>t.id===e.id);t>=0?n.value[t]=e:n.value.push(e),a();return}if(e===`job:thinking-delta`||e===`job:output-delta`){let t=e===`job:thinking-delta`?`thinking`:`output`,i=r?.delta||``;if(!i)return;let a=n.value.findIndex(e=>e.id===r.id);if(a<0)return;let o=n.value[a][t]||``;n.value[a][t]=o+i;return}if(e===`sub:update`){let e=t.value.find(e=>e.id===r.taskId);if(e){let t=e.subtasks.findIndex(e=>e.id===r.sub.id);t>=0&&(e.subtasks[t]=r.sub)}}if(e===`task:update`){let e=t.value.findIndex(e=>e.id===r.id);e>=0&&(t.value[e]=r)}if(e===`tasks:reordered`){if(Array.isArray(r?.tasks)){if(r.tasks.length<t.value.length){console.warn(`[SSE tasks:reordered] 数据丢失风险:当前 ${t.value.length} 个任务,服务端只返回 ${r.tasks.length} 个,拒绝覆盖`);return}t.value=r.tasks}return}e===`task:error`&&L.error(r.error||Y(`@WORKBENCH:执行出错`))}let c=null;function l(){c&&=(c.close(),null),c=new EventSource(`/api/workbench/events`),c.onmessage=e=>{try{let t=JSON.parse(e.data);s(t.event,t.payload)}catch{}},c.onerror=()=>{c&&=(c.close(),null),setTimeout(l,3e3)}}function u(){c&&=(c.close(),null)}async function d(){e.value=(await fetch(`/api/workbench/prompts`).then(e=>e.json()).catch(()=>({prompts:[]}))).prompts||[]}async function f(e){t.value=(await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}))).tasks||[],e?.()}async function p(){let e=await fetch(`/api/workbench/current-project`).then(e=>e.json()).catch(()=>({}));e&&typeof e.projectPath==`string`&&(r.value={path:e.projectPath,name:e.projectName||``})}async function m(){n.value=(await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}))).jobs||[],a()}async function h(e){try{let t=await fetch(`/api/workbench/jobs/by-task/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());return t?.success?(n.value=n.value.filter(t=>t.taskId!==e),a(),t.removed||0):(console.warn(`[clearJobsByTask] failed:`,t?.error),0)}catch(e){return console.warn(`[clearJobsByTask] error:`,e),0}}async function g(e){try{let t=await fetch(`/api/workbench/jobs/by-task/${encodeURIComponent(e)}?keepDone=true`,{method:`DELETE`}).then(e=>e.json());if(!t?.success)return console.warn(`[clearNonDoneJobsByTask] failed:`,t?.error),0;let r=new Set(t.ids||[]);return n.value=n.value.filter(t=>!(t.taskId===e&&r.has(t.id))),a(),t.removed||0}catch(e){return console.warn(`[clearNonDoneJobsByTask] error:`,e),0}}async function _(e){let t={title:``,desc:``,promptId:null,type:`simple`,simpleOverride:``,subtasks:[]};e&&(t.projectPath=e);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}).then(e=>e.json());return e.success?e.task||null:(L.error(e.error||Y(`@WORKBENCH:保存失败`)),null)}catch{return L.error(Y(`@WORKBENCH:保存失败`)),null}}return{prompts:e,tasks:t,jobs:n,currentProject:r,syncRunningCount:a,jobOf:o,applyJobEvent:s,connectSSE:l,disconnectSSE:u,loadPrompts:d,loadTasks:f,loadCurrentProject:p,loadJobs:m,clearJobsByTask:h,clearNonDoneJobsByTask:g,createTask:_}}var hr=`__no_project__`,gr=`wb.collapsedGroupPaths.v1`,_r=`wb.seenGroupPaths.v1`;function vr(e){try{let t=localStorage.getItem(e);if(!t)return new Set;let n=JSON.parse(t);return new Set(Array.isArray(n)?n.filter(e=>typeof e==`string`):[])}catch{return new Set}}function yr(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function br(e,t){let n=W(vr(gr)),r=W(vr(_r));f(n,e=>yr(gr,e),{deep:!1}),f(r,e=>yr(_r,e),{deep:!1});function i(e){return n.value.has(e)}function a(e){n.value.has(e)?n.value.delete(e):n.value.add(e),n.value=new Set(n.value);let t=new Set(r.value);t.add(e),r.value=t}let o=V(()=>{let n=e.value,r=new Map;for(let e of n){let t=(e.projectPath||``).trim()||hr;r.has(t)||r.set(t,[]),r.get(t).push(e)}let i=t.value.path,a=Array.from(r.keys()).sort((e,t)=>e===i?-1:t===i||e===hr?1:t===hr?-1:e.localeCompare(t));return{groups:a.map(e=>({path:e,label:e===hr?Y(`@WORKBENCH:未关联项目`):e,tasks:r.get(e)})),hasMultiple:a.length>1}});function s(e){if(!e||e===hr)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}return f(()=>o.value.groups.map(e=>e.path),e=>{let i=t.value.path,a=new Set(n.value),o=new Set(r.value),s=!1;for(let t of e)o.has(t)||(o.add(t),t!==i&&(a.add(t),s=!0));s&&(n.value=a),r.value=o},{immediate:!0}),{groupedTasksList:o,isGroupCollapsed:i,toggleGroupCollapsed:a,shortProjectLabel:s}}var xr={class:`wb-sidebar`},Sr={class:`wb-section`},Cr=[`disabled`],wr={class:`wb-task-list`},Tr=[`aria-expanded`,`title`,`onClick`,`onKeydown`],Er=[`title`],Dr={class:`wb-pill wb-task-group__count`},Or=[`data-task-id`,`data-group-path`,`title`,`onClick`,`onMousedown`],kr={class:`wb-task-item__body`},Ar=[`title`],jr={class:`wb-task-item__meta`},Mr=[`title`],Nr={class:`wb-pill wb-task-item__num`},Pr=[`title`],Fr={class:`wb-pill wb-task-item__num`},Ir=[`title`],Lr=[`title`,`aria-label`,`onClick`],Rr=[`title`],zr=[`title`],Br={class:`wb-task-item__action-group`},Vr=[`title`,`aria-label`,`onClick`],Hr=[`onClick`,`title`,`aria-label`],Ur={key:0,class:`wb-empty wb-empty--rich`},Wr={class:`wb-empty__art`,"aria-hidden":`true`},Gr={class:`wb-empty__title`},Kr={class:`wb-empty__hint`},qr={class:`wb-empty__cta`},Jr={class:`wb-section`},Yr={class:`wb-section__head`},Xr={class:`wb-section__tag wb-section__tag--accent`},Zr={class:`wb-section__title`},Qr={class:`wb-pill wb-section__count`},$r=[`title`,`aria-label`],ei={class:`wb-prompt-list`},ti={class:`wb-prompt-item__icon`},ni=[`onClick`,`title`],ri=[`title`],ii=[`title`],ai=[`onClick`,`title`,`aria-label`],oi={key:0,class:`wb-empty wb-empty--compact`},si=5,ci=X(C({__name:`WorkbenchSidebar`,props:{tasks:{},prompts:{},selectedTaskId:{},currentProject:{},creatingTask:{type:Boolean},isTaskRunning:{type:Function}},emits:[`select-task`,`delete-task`,`copy-task`,`set-task-type`,`create-task`,`open-create-prompt`,`open-edit-prompt`,`delete-prompt`,`reorder-tasks`],setup(e,{emit:t}){let n=e,a=t,o=V(()=>n.currentProject),{groupedTasksList:s,isGroupCollapsed:c,toggleGroupCollapsed:l,shortProjectLabel:u}=br(V(()=>n.tasks),o),d=V(()=>{let e=(n.currentProject.path||``).trim();return n.prompts.filter(t=>!t.projectPath||t.projectPath===e)});function f(e){return Array.isArray(e.attachments)?e.attachments.length:0}function p(e){return Array.isArray(e.subtasks)?e.subtasks.length:0}function m(e){return Array.isArray(e.subtasks)?e.subtasks.filter(e=>e&&e.status===`done`).length:0}function h(e){return n.isTaskRunning(e)}let g=W(null),y=W(null),b=W(null),S=W(null),C=W(null),w=null;function T(){g.value=null,y.value=null,b.value=null,S.value=null,C.value=null,w=null}function O(e,t,n,r){e.button===0&&(w={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,k),window.addEventListener(`mouseup`,ie,{once:!0}))}function k(e){if(!w)return;if(g.value===null){if(Math.abs(e.clientY-w.pointerY)<si)return;g.value=w.taskId,y.value=w.groupPath,window.getSelection()?.removeAllRanges(),document.body.style.userSelect=`none`}let t=document.elementFromPoint(e.clientX,e.clientY);if(!t)return;let n=t.closest(`.wb-task-item`);if(!n){b.value=null,S.value=null,C.value=null;return}let r=n.getAttribute(`data-task-id`),i=n.getAttribute(`data-group-path`);if(!r||!i)return;if(i!==y.value){b.value=null,S.value=null,C.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;b.value=r,S.value=i,C.value=e.clientY<o?`before`:`after`}function ie(e){if(window.removeEventListener(`mousemove`,k),document.body.style.userSelect=``,!w){T();return}let t=w.groupPath,n=w.taskId,r=b.value,i=C.value,o=S.value;if(T(),!r||!i||o!==t)return;let c=s.value.groups.find(e=>e.path===t);if(!c)return;let l=c.tasks.map(e=>e.id),u=l.indexOf(n);if(u<0)return;l.splice(u,1);let d=l.indexOf(r)+ +(i===`after`);l.splice(d,0,n),a(`reorder-tasks`,{groupPath:t,orderedIds:l})}return(t,n)=>{let o=fe,y=ee;return J(),K(`aside`,xr,[I(`section`,Sr,[I(`button`,{class:`wb-new-btn`,disabled:e.creatingTask,onClick:n[0]||=e=>a(`create-task`)},[r(o,{class:`wb-new-btn__icon`},{default:D(()=>[r(U(v))]),_:1}),I(`span`,null,j(U(Y)(`@WORKBENCH:新建任务`)),1),n[3]||=I(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,Cr),I(`ul`,wr,[(J(!0),K(G,null,E(U(s).groups,t=>(J(),K(G,{key:t.path},[U(s).hasMultiple?(J(),K(`li`,{key:0,class:H([`wb-task-group__head`,{"is-current":t.path===e.currentProject.path,"is-collapsed":U(c)(t.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!U(c)(t.path),title:U(c)(t.path)?U(Y)(`@WORKBENCH:展开`):U(Y)(`@WORKBENCH:收起`),onClick:e=>U(l)(t.path),onKeydown:[ue(B(e=>U(l)(t.path),[`prevent`]),[`enter`]),ue(B(e=>U(l)(t.path),[`prevent`]),[`space`])]},[r(o,{class:`wb-task-group__caret`},{default:D(()=>[(J(),F(te(U(c)(t.path)?U(ne):U(re))))]),_:2},1024),r(o,{class:`wb-task-group__icon`},{default:D(()=>[r(U(we))]),_:1}),I(`span`,{class:`wb-task-group__name`,title:t.path===e.currentProject.path?e.currentProject.path:t.label},j(t.path===e.currentProject.path?e.currentProject.name:U(u)(t.label)),9,Er),I(`span`,Dr,j(t.tasks.length),1)],42,Tr)):A(``,!0),U(c)(t.path)?A(``,!0):(J(!0),K(G,{key:1},E(t.tasks,n=>(J(),K(`li`,{key:n.id,class:H([`wb-task-item`,{active:n.id===e.selectedTaskId,"has-attachment":f(n)>0,"is-other-project":n.projectPath&&n.projectPath!==e.currentProject.path,"is-running":h(n),"is-dragging":g.value===n.id,"is-drop-before":b.value===n.id&&C.value===`before`,"is-drop-after":b.value===n.id&&C.value===`after`}]),"data-task-id":n.id,"data-group-path":t.path,title:`${n.title||U(Y)(`@WORKBENCH:未命名任务`)} · ${U(Y)(`@WORKBENCH:拖动排序提示`)}`,onClick:e=>a(`select-task`,n),onMousedown:e=>O(e,n,t.path,e.currentTarget)},[I(`div`,kr,[I(`div`,{class:`wb-task-item__title`,title:n.title},j(n.title||U(Y)(`@WORKBENCH:未命名任务`)),9,Ar),I(`div`,jr,[p(n)>0?(J(),K(`span`,{key:0,class:H([`wb-task-item__meta-item`,{"wb-task-item__meta-item--running":h(n)}]),title:U(Y)(`@WORKBENCH:个子任务`)},[r(o,{class:`wb-task-item__meta-icon`},{default:D(()=>[r(U(Ee))]),_:1}),I(`span`,Nr,j(m(n))+`/`+j(p(n)),1)],10,Mr)):A(``,!0),f(n)>0?(J(),K(`span`,{key:1,class:`wb-task-item__meta-item`,title:U(Y)(`@WORKBENCH:附件`)},[r(o,{class:`wb-task-item__meta-icon`},{default:D(()=>[r(U(_))]),_:1}),I(`span`,Fr,j(f(n)),1)],8,Pr)):A(``,!0),n.promptId?(J(),K(`span`,{key:2,class:`wb-task-item__meta-item wb-task-item__meta-item--accent`,title:U(Y)(`@WORKBENCH:已绑定预置提示词`)},[r(o,{class:`wb-task-item__meta-icon`},{default:D(()=>[r(U(i))]),_:1})],8,Ir)):A(``,!0),I(`button`,{type:`button`,class:H([`wb-task-item__meta-item wb-task-item__type-toggle`,n.type===`simple`?`wb-task-item__meta-item--simple`:`wb-task-item__meta-item--complex`]),title:n.type===`simple`?U(Y)(`@WORKBENCH:简单任务 - 点击切换为复杂任务`):U(Y)(`@WORKBENCH:复杂任务 - 点击切换为简单任务`),"aria-label":n.type===`simple`?U(Y)(`@WORKBENCH:切换为复杂任务`):U(Y)(`@WORKBENCH:切换为简单任务`),onClick:B(e=>a(`set-task-type`,n,n.type===`simple`?`complex`:`simple`),[`stop`])},j(n.type===`simple`?U(Y)(`@WORKBENCH:简单`):U(Y)(`@WORKBENCH:复杂`)),11,Lr),n.projectPath&&n.projectPath!==e.currentProject.path?(J(),K(`span`,{key:3,class:`wb-task-item__meta-item wb-task-item__meta-item--project`,title:n.projectPath},j(U(u)(n.projectPath)),9,Rr)):A(``,!0)])]),h(n)?(J(),K(`span`,{key:0,class:`wb-task-item__running-dot`,title:U(Y)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,zr)):A(``,!0),I(`div`,Br,[I(`button`,{class:`wb-task-item__copy`,title:U(Y)(`@WORKBENCH:复制任务`),"aria-label":U(Y)(`@WORKBENCH:复制任务`),onClick:B(e=>a(`copy-task`,n),[`stop`])},[r(o,null,{default:D(()=>[r(U(Se))]),_:1})],8,Vr),h(n)?A(``,!0):(J(),K(`button`,{key:0,class:`wb-task-item__del`,onClick:B(e=>a(`delete-task`,n),[`stop`]),title:U(Y)(`@WORKBENCH:删除`),"aria-label":U(Y)(`@WORKBENCH:删除`)},[r(o,null,{default:D(()=>[r(U(se))]),_:1})],8,Hr))])],42,Or))),128))],64))),128)),e.tasks.length===0?(J(),K(`li`,Ur,[I(`div`,Wr,[r(o,null,{default:D(()=>[r(U(Ce))]),_:1})]),I(`div`,Gr,j(U(Y)(`@WORKBENCH:暂无任务`)),1),I(`div`,Kr,j(U(Y)(`@WORKBENCH:点击上方按钮新建`)),1),I(`div`,qr,[r(y,{type:`primary`,size:`small`,icon:U(v),loading:e.creatingTask,onClick:n[1]||=e=>a(`create-task`)},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])])])):A(``,!0)])]),I(`section`,Jr,[I(`header`,Yr,[I(`span`,Xr,j(U(Y)(`@WORKBENCH:提示`)),1),I(`h3`,Zr,j(U(Y)(`@WORKBENCH:预置提示词`)),1),I(`span`,Qr,j(d.value.length),1),I(`button`,{class:`wb-section__action`,onClick:n[2]||=e=>a(`open-create-prompt`),title:U(Y)(`@WORKBENCH:新建提示词`),"aria-label":U(Y)(`@WORKBENCH:新建提示词`)},[r(o,null,{default:D(()=>[r(U(v))]),_:1})],8,$r)]),I(`ul`,ei,[(J(!0),K(G,null,E(d.value,e=>(J(),K(`li`,{key:e.id,class:`wb-prompt-item`},[I(`div`,ti,[r(o,null,{default:D(()=>[r(U(i))]),_:1})]),I(`span`,{class:`wb-prompt-item__name`,onClick:t=>a(`open-edit-prompt`,e),title:e.content},j(e.name),9,ni),e.projectPath?(J(),K(`span`,{key:1,class:`wb-prompt-item__tag wb-prompt-item__tag--project`,title:e.projectPath},j(U(u)(e.projectPath)),9,ii)):(J(),K(`span`,{key:0,class:`wb-prompt-item__tag`,title:U(Y)(`@WORKBENCH:全局(所有项目可用)`)},j(U(Y)(`@WORKBENCH:全局(所有项目可用)`)),9,ri)),I(`button`,{class:`wb-prompt-item__del`,onClick:t=>a(`delete-prompt`,e),title:U(Y)(`@WORKBENCH:删除`),"aria-label":U(Y)(`@WORKBENCH:删除`)},[r(o,null,{default:D(()=>[r(U(se))]),_:1})],8,ai)]))),128)),d.value.length===0?(J(),K(`li`,oi,j(U(Y)(`@WORKBENCH:暂无提示词`)),1)):A(``,!0)])])])}}}),[[`__scopeId`,`data-v-514150dd`]]),li={class:`workbench`},ui={class:`workbench__editor-row`},di={class:`wb-split`},fi={key:0,class:`wb-placeholder`},pi={class:`wb-split__header`},mi=[`placeholder`],hi=[`title`],gi={key:0,class:`wb-meta-save__dot`},_i={key:1,class:`wb-meta-save__check`},vi={key:2,class:`wb-meta-save__bang`},yi={key:3,class:`wb-meta-save__dot`},bi={value:null},xi=[`value`],Si=[`aria-label`],Ci=[`aria-selected`],wi=[`aria-selected`],Ti=[`disabled`,`title`],Ei={key:3,class:`wb-no-claude-hint`,role:`status`},Di={class:`wb-no-claude-hint__text`},Oi={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},ki=[`title`,`aria-label`],Ai=[`title`,`aria-label`],ji=[`open`],Mi={class:`wb-task-desc__summary`},Ni={class:`wb-task-desc__label`},Pi={key:0,class:`wb-task-desc__tag`},Fi={key:0},Ii={key:1,class:`wb-task-desc__tag-attachment`},Li=[`placeholder`],Ri={key:0,class:`wb-exec-list`},zi={class:`wb-exec-list__header`},Bi={class:`wb-exec-list__title`},Vi={class:`wb-split__sub-actions`},Hi={key:0,class:`wb-dirty-badge`},Ui={class:`wb-exec-sub-list`},Wi=[`onClick`],Gi={class:`wb-exec-sub-item__row1`},Ki=[`title`],qi={class:`wb-sub-error`},Ji={class:`wb-sub-error__head`},Yi={class:`wb-sub-error__title`},Xi={key:0,class:`wb-sub-error__time`},Zi={class:`wb-sub-error__msg`},Qi={class:`wb-sub-error__actions`},$i=[`title`],ea=[`title`],ta={key:2,class:`wb-exec-sub-item__dirty-dot`,title:`未保存`},na={class:`wb-exec-sub-item__row2`},ra={key:0,class:`wb-sub-item__pid`},ia={class:`wb-exec-sub-item__actions`},aa=[`title`,`onClick`],oa=[`title`,`onClick`],sa=[`title`,`onClick`],ca=[`title`,`disabled`,`onClick`],la=[`title`,`disabled`,`onClick`],ua={class:`wb-exec-detail`},da={key:0,class:`wb-empty wb-empty--rich wb-empty--full`},fa={class:`wb-empty__art`,"aria-hidden":`true`},pa={class:`wb-empty__title`},ma={class:`wb-empty__hint`},ha={class:`wb-empty__cta`},ga={key:1,class:`wb-placeholder`},_a={class:`wb-exec-detail__head`},va=[`placeholder`],ya=[`title`],ba=[`placeholder`],xa={class:`wb-form-item__label wb-simple__override-summary`},Sa=[`title`],Ca=[`disabled`],wa=[`placeholder`],Ta={key:0,class:`wb-simple-chat-wrap`},Ea={key:0,class:`wb-simple-chat__footer`},Da={style:{display:`flex`,gap:`8px`,"align-items":`center`}},Oa=X(C({__name:`WorkbenchView`,setup(e){let t=Me(),n=Pe(),{prompts:i,tasks:o,jobs:c,currentProject:l,syncRunningCount:u,jobOf:d,connectSSE:_,disconnectSSE:y,loadPrompts:C,loadCurrentProject:w,loadJobs:T,clearJobsByTask:ie,clearNonDoneJobsByTask:se,loadTasks:ce}=mr();async function le(){await ce(),!M.value&&o.value.length>0&&(M.value=o.value[0].id),Ce()}let ue=W(!1),M=W(null),N=V(()=>o.value.find(e=>e.id===M.value)||null),P=V(()=>N.value?.type===`simple`),R=W(null),z=V(()=>!N.value||P.value||!R.value?null:N.value.subtasks.find(e=>e.id===R.value)||null),ge=W(new Map),xe=W({title:``,desc:``,promptId:null,simpleOverride:``});function Ce(){let e=new Map;if(N.value)for(let t of N.value.subtasks)e.set(t.id,{id:t.id,title:t.title,desc:t.desc,promptOverride:t.promptOverride});ge.value=e,N.value?xe.value={title:N.value.title,desc:N.value.desc,promptId:N.value.promptId,simpleOverride:N.value.simpleOverride||``}:xe.value={title:``,desc:``,promptId:null,simpleOverride:``}}let we=V(()=>{let e=new Set;if(!N.value)return e;for(let t of N.value.subtasks){let n=ge.value.get(t.id);if(!n){e.add(t.id);continue}(n.title!==t.title||n.desc!==t.desc||n.promptOverride!==t.promptOverride)&&e.add(t.id)}return e}),Te=V(()=>we.value.size>0),q=W(`idle`),ke=W(0),X=null,Ne=V(()=>{if(!N.value)return!1;let e=N.value;return xe.value.title!==e.title||xe.value.desc!==e.desc||xe.value.promptId!==e.promptId||xe.value.simpleOverride!==(e.simpleOverride||``)});function Fe(){X!==null&&(clearTimeout(X),X=null)}async function Ie(){if(!N.value)return!1;if(!Ne.value)return!0;if(q.value=`saving`,await yt(!1))return ke.value=Date.now(),q.value=`saved`,setTimeout(()=>{q.value===`saved`&&Date.now()-ke.value>=4e3&&(q.value=`idle`)},4e3),!0;q.value=`error`;let e=Date.now();return setTimeout(()=>{q.value===`error`&&Date.now()-e>=4e3&&(q.value=`idle`)},4e3),!1}f(()=>N.value?{id:N.value.id,title:N.value.title,desc:N.value.desc,promptId:N.value.promptId,simpleOverride:N.value.simpleOverride||``,sequential:N.value.sequential!==!1}:null,(e,t)=>{!e||!t||e.id!==t.id||(X!==null&&clearTimeout(X),X=window.setTimeout(()=>{Ie()},1500))},{deep:!0}),f(M,async(e,t)=>{Fe(),N.value&&Ne.value&&await Ie()}),f(M,()=>{Ct.value=!1});function Le(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function Re(){N.value&&Ne.value&&Le(N.value)}let Z=oe({visible:!1,editing:null,name:``,content:``,aiLoading:!1,projectPath:``}),Q=oe({visible:!1,text:``,loading:!1,saving:!1}),ze=W(!1),Be=V(()=>{let e=(l.value.path||``).trim();return i.value.filter(t=>!t.projectPath||t.projectPath===e)});async function Ve(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}function He(e){if(!e)return``;let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}async function Ue(e){let t=await Ve(`[${e.title||Y(`@WORKBENCH:未命名子任务`)}]\n${e.error||``}`);L[t?`success`:`error`](Y(t?`@WORKBENCH:已复制错误信息`:`@WORKBENCH:复制失败`))}function We(e){R.value=e.id,ue.value=!0}let{simpleConversationMessages:Ge,simpleAllJobsFor:Ke,simpleJobFor:qe,simpleJobState:Je}=fr(c,N);function Ye(e){if(!e)return!1;if(e.type!==`simple`)return Array.isArray(e.subtasks)&&e.subtasks.some(e=>e&&e.status===`running`);let t=qe(e);return!!t&&(t.status===`running`||t.status===`pending`)}async function Xe(){if(!N.value)return;let e=N.value,t=Array.isArray(e.subtasks)?e.subtasks.length:0;if(t===0){L.warning(Y(`@WORKBENCH:当前任务没有子任务`));return}if(c.value.find(t=>t.taskId===e.id&&(t.status===`running`||t.status===`pending`))){L.warning(Y(`@WORKBENCH:有子任务正在执行,请先停止`));return}try{await ye.confirm(Y(`@WORKBENCH:将删除 {n} 个子任务,任务描述/附件/标题保留,确认?`,{n:t}),Y(`@WORKBENCH:清空子任务`),{confirmButtonText:Y(`@WORKBENCH:清空`),cancelButtonText:Y(`@WORKBENCH:取消`),type:`warning`})}catch{return}let n=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/clear-subtasks`,{method:`POST`,headers:{"Content-Type":`application/json`}}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));n?.success?(e.subtasks=[],R.value=null,we.value.clear(),ge.value.clear(),c.value=c.value.filter(t=>t.taskId!==e.id),u(),L.success(n.message||Y(`@WORKBENCH:已清空子任务`))):L.error(n?.error||Y(`@WORKBENCH:清空失败`))}function Ze(){Z.editing=null,Z.name=``,Z.content=``,Z.aiLoading=!1,Z.projectPath=(l.value.path||``).trim(),Z.visible=!0}function Qe(e){Z.editing=e,Z.name=e.name,Z.content=e.content,Z.aiLoading=!1,Z.projectPath=(e.projectPath||``).trim(),Z.visible=!0}async function $e(){if(!Z.aiLoading){Z.aiLoading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-generate`,{method:`POST`}).then(e=>e.json());e.success?(Z.name=e.name||Z.name,Z.content=e.result||``,L.success(Y(`@WORKBENCH:已生成,可继续编辑`))):L.error(e.error||Y(`@WORKBENCH:生成失败`))}catch(e){L.error(Y(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{Z.aiLoading=!1}}}async function et(){Q.visible=!0,Q.loading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`).then(e=>e.json());e.success?Q.text=e.instruction||``:L.error(e.error||Y(`@WORKBENCH:读取指令失败`))}catch(e){L.error(Y(`@WORKBENCH:读取指令失败`)+`: `+(e&&e.message||e))}finally{Q.loading=!1}}async function tt(){if(!Q.text.trim()){L.warning(Y(`@WORKBENCH:指令内容不能为空`));return}Q.saving=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:Q.text})}).then(e=>e.json());e.success?(L.success(Y(`@WORKBENCH:已保存指令`)),Q.visible=!1):L.error(e.error||Y(`@WORKBENCH:保存失败`))}catch(e){L.error(Y(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{Q.saving=!1}}async function nt(){if(!Z.name.trim()||!Z.content.trim()){L.warning(Y(`@WORKBENCH:名称和内容不能为空`));return}let e={id:Z.editing?.id,name:Z.name.trim(),content:Z.content,projectPath:(Z.projectPath||``).trim()},t=await fetch(`/api/workbench/prompts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(L.success(Y(`@WORKBENCH:已保存`)),Z.visible=!1,C()):L.error(t.error||Y(`@WORKBENCH:保存失败`))}async function rt(e){await ye.confirm(Y(`@WORKBENCH:删除提示词「{name}」?`,{name:e.name}),Y(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/prompts/${e.id}`,{method:`DELETE`}),C();for(let t of o.value)t.promptId===e.id&&(t.promptId=null,await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}));le()}let it=W(!1),at=W(null);async function ot(){if(it.value)return;it.value=!0;let e={title:``,desc:``,promptId:null,type:`simple`,simpleOverride:``,subtasks:[]};l.value.path&&(e.projectPath=l.value.path);try{let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());if(!t.success){L.error(t.error||Y(`@WORKBENCH:保存失败`));return}Fe(),N.value&&Ne.value&&await Ie(),await le(),t.task?.id&&(M.value=t.task.id,Ce(),L.success(Y(`@WORKBENCH:已新建任务`)),await g(),at.value?.focus())}finally{it.value=!1}}async function st(e,t){if(e.type===t)return;let n=e.type===`complex`&&t===`simple`&&(e.subtasks?.length??0)>0;if(n)try{await ye.confirm(Y(`@WORKBENCH:任务「{title}」当前有 {n} 个子任务,切换为简单任务后会清空这些子任务,确认继续?`,{title:e.title,n:e.subtasks.length}),Y(`@WORKBENCH:切换任务类型`),{type:`warning`,confirmButtonText:Y(`@WORKBENCH:切换并清空`),cancelButtonText:Y(`@WORKBENCH:取消`)})}catch{return}let r={id:e.id,title:e.title,desc:e.desc,promptId:e.promptId,type:t,simpleOverride:e.simpleOverride||``,sequential:e.sequential!==!1,subtasks:n?[]:e.subtasks||[]},i=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r)}).then(e=>e.json());if(!i.success){L.error(i.error||Y(`@WORKBENCH:保存失败`));return}await le(),L.success(Y(t===`simple`?`@WORKBENCH:已切换为简单任务`:`@WORKBENCH:已切换为复杂任务`))}async function ct(e){N.value&&await st(N.value,e)}async function lt(e){await ye.confirm(Y(`@WORKBENCH:删除任务「{title}」及其所有子任务?`,{title:e.title}),Y(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),M.value===e.id&&(M.value=null),le()}async function ut(e){let t=Y(`@WORKBENCH:{title} (副本)`,{title:(e.title||Y(`@WORKBENCH:未命名任务`)).trim()}),n=Array.isArray(e.subtasks)?e.subtasks.map(e=>({id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:e.title,desc:e.desc||``,status:`todo`,promptOverride:e.promptOverride||``,attachments:[]})):[],r={title:t,desc:e.desc||``,promptId:e.promptId||null,type:e.type||`complex`,simpleOverride:e.simpleOverride||``,subtasks:n};l.value.path&&(r.projectPath=l.value.path);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r)}).then(e=>e.json());if(!e.success){L.error(e.error||Y(`@WORKBENCH:复制失败`));return}await le(),e.task?.id&&(M.value=e.task.id,Ce()),L.success(Y(`@WORKBENCH:已复制任务`))}catch(e){L.error(Y(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function dt(e){M.value!==e.id&&(Fe(),N.value&&Ne.value&&await Ie(),M.value=e.id,Ce())}async function ft(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=o.value.slice(),i=pt(o.value,t,n);if(i!==o.value){o.value=i;try{let e=await fetch(`/api/workbench/tasks/reorder`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orderedIds:n,groupPath:t})}).then(e=>e.json()).catch(()=>({success:!1,error:Y(`@WORKBENCH:排序保存失败`)}));e?.success||(o.value=r,L.error(e?.error||Y(`@WORKBENCH:排序保存失败`)))}catch(e){o.value=r,L.error(Y(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function pt(e,t,n){let r=e=>(e||``).trim()||`__no_project__`,i=e.filter(e=>r(e.projectPath)===t).map(e=>e.id),a=new Set(i);if(n.length!==a.size||n.some(e=>!a.has(e)))return e;let o=new Map(e.map(e=>[e.id,e])),s=n.map(e=>o.get(e)).filter(Boolean),c=[],l=0;for(let n of e)r(n.projectPath)===t?c.push(s[l++]):c.push(n);return c}f(()=>N.value,e=>{if(!e||e.type===`simple`){R.value=null;return}R.value=e.subtasks.find(e=>e.status===`running`)?.id||e.subtasks[0]?.id||null},{immediate:!0}),f(()=>N.value?.subtasks?.length,()=>{!N.value||P.value||(!R.value||!N.value.subtasks.find(e=>e.id===R.value))&&(R.value=N.value.subtasks[0]?.id||null)}),f(()=>N.value?.subtasks?.map(e=>({id:e.id,status:e.status}))||[],()=>{if(!N.value||P.value)return;let e=N.value.subtasks,t=e.find(e=>e.id===R.value);if(!t||t.status!==`running`){let t=e.find(e=>e.status===`running`);t&&t.id!==R.value&&(R.value=t.id)}});let mt=W(new Set);function ht(e){return mt.value.has(e)}function gt(e,t){t?mt.value.add(e):mt.value.delete(e),mt.value=new Set(mt.value)}async function _t(){if(!N.value)return;let e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:Y(`@WORKBENCH:新子任务`),desc:``,status:`todo`,promptOverride:``};N.value.subtasks.push(e),gt(e.id,!0);try{await yt(!1)}finally{gt(e.id,!1)}}async function vt(e){if(N.value){N.value.subtasks=N.value.subtasks.filter(t=>t.id!==e.id),gt(e.id,!0);try{await yt(!1)}finally{gt(e.id,!1)}}}async function yt(e){if(!N.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(N.value)}).then(e=>e.json());return t.success?(e&&L.success(Y(`@WORKBENCH:已保存拆分`)),await le(),!0):(L.error(t.error||Y(`@WORKBENCH:保存失败`)),!1)}async function bt(){await yt(!0)}let xt=W(!1);async function St(e){if(!N.value||!e.titles.length)return;let{strategy:t,titles:n}=e;t===`replace`&&(N.value.subtasks=[]);let r=n.map(e=>({id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:e,desc:``,status:`todo`,promptOverride:``}));if(t===`append`||t===`replace`)N.value.subtasks.push(...r);else if(t===`merge`){let e=new Set(N.value.subtasks.map(e=>e.title.trim())),t=r.filter(t=>!e.has(t.title.trim()));N.value.subtasks.push(...t);let n=r.length-t.length;n>0&&L.info(Y(`@WORKBENCH:跳过 N 个已存在的子任务`,{n}))}await yt(!0),L.success(Y(`@WORKBENCH:已导入 N 个子任务`,{n:r.length}))}let Ct=W(!1);function wt(){if(N.value){if(!(N.value.title||``).trim()){L.warning(Y(`@WORKBENCH:请先填写任务标题`));return}Ct.value=!0}}function Tt(e){if(N.value){for(let t of e)N.value.subtasks.push({id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:t.title,desc:t.desc||``,status:`todo`,promptOverride:``,attachments:[]});L.success(Y(`@WORKBENCH:已生成 {n} 个子任务,请审阅后保存`,{n:e.length}))}}async function Et(e){if(N.value&&!ht(e.id)){gt(e.id,!0);try{let t=ge.value.get(e.id);t&&ge.value.set(e.id,{...t,status:`todo`}),e.status=`todo`,await yt(!1)}finally{gt(e.id,!1)}}}m(async()=>{await Promise.all([C(),le(),w(),T()]),_(),window.addEventListener(`beforeunload`,Re)}),s(()=>{y(),window.removeEventListener(`beforeunload`,Re),N.value&&Ne.value&&Le(N.value)});let{pasteHoverId:$,isUploading:Dt,isImageAttachment:Ot,humanSize:kt,onAttachmentPaste:At,onAttachmentDrop:jt,uploadAttachment:Mt,removeAttachment:Nt,pickAttachmentFile:Pt}=lr(),{runTask:Ft,onContinueSendFromChat:It,onReExecuteJob:Lt,runSubtask:Rt,canRunSubtask:zt,canRunFromHere:Bt,runFromHere:Vt,cancelJob:Ht,clearExecutionForSelectedTask:Wt}=pr(c,o,N,{syncRunningCount:u,jobOf:d,simpleAllJobsFor:Ke,clearJobsByTask:ie,clearNonDoneJobsByTask:se,persistTask:yt,loadTasks:ce,uploadAttachment:Mt});return(e,s)=>{let c=ee,u=fe,f=he,m=Oe,g=h,_=ve,y=a,C=De,w=b,T=S;return J(),K(`div`,li,[I(`div`,ui,[r(ci,{tasks:U(o),prompts:U(i),"selected-task-id":M.value,"current-project":U(l),"creating-task":it.value,"is-task-running":Ye,onSelectTask:dt,onDeleteTask:lt,onCopyTask:ut,onSetTaskType:st,onCreateTask:ot,onOpenCreatePrompt:Ze,onOpenEditPrompt:Qe,onDeletePrompt:rt,onReorderTasks:ft},null,8,[`tasks`,`prompts`,`selected-task-id`,`current-project`,`creating-task`]),I(`section`,di,[N.value?(J(),K(G,{key:1},[I(`div`,pi,[k(I(`input`,{ref_key:`titleInputRef`,ref:at,class:`wb-input wb-input--title`,"onUpdate:modelValue":s[0]||=e=>N.value.title=e,placeholder:U(Y)(`@WORKBENCH:任务标题`)},null,8,mi),[[_e,N.value.title]]),q.value!==`idle`||Ne.value?(J(),K(`span`,{key:0,class:H([`wb-meta-save`,{"is-saving":q.value===`saving`,"is-saved":q.value===`saved`,"is-error":q.value===`error`,"is-dirty":Ne.value&&q.value===`idle`}]),title:q.value===`saving`?U(Y)(`@WORKBENCH:保存中…`):q.value===`error`?U(Y)(`@WORKBENCH:保存失败`):q.value===`saved`?U(Y)(`@WORKBENCH:已保存`):``},[q.value===`saving`?(J(),K(`span`,gi)):q.value===`saved`?(J(),K(`span`,_i,`✓`)):q.value===`error`?(J(),K(`span`,vi,`!`)):(J(),K(`span`,yi)),x(` `+j(q.value===`saving`?U(Y)(`@WORKBENCH:保存中…`):q.value===`saved`?U(Y)(`@WORKBENCH:已保存`):q.value===`error`?U(Y)(`@WORKBENCH:保存失败`):U(Y)(`@WORKBENCH:有未保存的更改`)),1)],10,hi)):A(``,!0),k(I(`select`,{class:`wb-select`,"onUpdate:modelValue":s[1]||=e=>N.value.promptId=e},[I(`option`,bi,j(U(Y)(`@WORKBENCH:不绑定预置提示词`)),1),(J(!0),K(G,null,E(Be.value,e=>(J(),K(`option`,{key:e.id,value:e.id},j(e.name),9,xi))),128))],512),[[ae,N.value.promptId]]),I(`div`,{class:`wb-mode-switch`,role:`tablist`,"aria-label":U(Y)(`@WORKBENCH:任务类型`)},[I(`button`,{type:`button`,role:`tab`,class:H([`wb-mode-switch__btn`,{"is-active":!P.value}]),"aria-selected":!P.value,onClick:s[2]||=e=>ct(`complex`)},j(U(Y)(`@WORKBENCH:复杂`)),11,Ci),I(`button`,{type:`button`,role:`tab`,class:H([`wb-mode-switch__btn`,{"is-active":P.value}]),"aria-selected":P.value,onClick:s[3]||=e=>ct(`simple`)},j(U(Y)(`@WORKBENCH:简单`)),11,wi),I(`span`,{class:H([`wb-mode-switch__indicator`,{"is-right":P.value}]),"aria-hidden":`true`},null,2)],8,Si),P.value?A(``,!0):(J(),K(`button`,{key:1,type:`button`,class:`wb-ai-split-btn`,disabled:!N.value.title||!N.value.title.trim(),title:U(Y)(`@WORKBENCH:AI 拆分`),onClick:wt},[s[42]||=I(`svg`,{class:`wb-ai-split-btn__icon`,viewBox:`0 0 16 16`,width:`14`,height:`14`,"aria-hidden":`true`},[I(`path`,{d:`M8 1.5l1.6 3.4 3.4 1.6-3.4 1.6L8 11.5 6.4 8.1 3 6.5l3.4-1.6L8 1.5zM2.5 9.5l.8 1.6 1.6.8-1.6.8-.8 1.6-.8-1.6L.1 11.9l1.6-.8.8-1.6zm11 0l.8 1.6 1.6.8-1.6.8-.8 1.6-.8-1.6-1.6-.8 1.6-.8.8-1.6z`,fill:`currentColor`})],-1),I(`span`,null,j(U(Y)(`@WORKBENCH:AI 拆分`)),1)],8,Ti)),U(n).claudeAvailable?(J(),F(c,{key:2,type:`primary`,loading:!1,onClick:s[4]||=e=>U(Ft)(N.value)},{default:D(()=>[x(j(P.value?U(Y)(`@WORKBENCH:执行`):U(Y)(`@WORKBENCH:执行任务`)),1)]),_:1})):(J(),K(`div`,Ei,[r(u,{class:`wb-no-claude-hint__icon`},{default:D(()=>[r(U(O))]),_:1}),I(`span`,Di,j(U(Y)(`@WORKBENCH:未检测到本地 claude,无法执行任务`)),1),I(`a`,Oi,j(U(Y)(`@WORKBENCH:查看安装指引`)),1)])),I(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:U(Y)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":U(Y)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:s[5]||=(...e)=>U(Wt)&&U(Wt)(...e)},[r(u,{class:`wb-logs-inline-btn__icon`},{default:D(()=>[r(U(de))]),_:1}),I(`span`,null,j(U(Y)(`@WORKBENCH:清空执行`)),1)],8,ki),I(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:U(Y)(`@WORKBENCH:执行日志`),"aria-label":U(Y)(`@WORKBENCH:执行日志`),onClick:s[6]||=e=>ue.value=!0},[r(u,{class:`wb-logs-inline-btn__icon`},{default:D(()=>[r(U(pe))]),_:1}),I(`span`,null,j(U(Y)(`@WORKBENCH:执行日志`)),1)],8,Ai)]),I(`details`,{class:`wb-task-desc`,open:ze.value,onToggle:s[14]||=e=>ze.value=e.target.open},[I(`summary`,Mi,[r(u,{class:`wb-task-desc__caret`},{default:D(()=>[(J(),F(te(ze.value?U(re):U(ne))))]),_:1}),I(`span`,Ni,j(U(Y)(`@WORKBENCH:任务描述(可选)`)),1),N.value.desc&&N.value.desc.length>0||N.value.attachments&&N.value.attachments.length>0?(J(),K(`span`,Pi,[N.value.desc&&N.value.desc.length>0?(J(),K(`span`,Fi,j(U(Y)(`@WORKBENCH:已填写`)),1)):A(``,!0),N.value.attachments&&N.value.attachments.length>0?(J(),K(`span`,Ii,j(N.value.attachments.length),1)):A(``,!0)])):A(``,!0)]),k(I(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":s[7]||=e=>N.value.desc=e,placeholder:U(Y)(`@WORKBENCH:任务描述(可选)`),rows:`2`,onPaste:s[8]||=e=>U(At)(e,{kind:`task`,task:N.value})},null,40,Li),[[_e,N.value.desc]]),r(on,{attachments:N.value.attachments||[],"is-image":U(Ot),"human-size":U(kt),"is-uploading":U(Dt)(`task-`+N.value.id),"is-paste-hover":U($)===`task-`+N.value.id,"max-count":9,"on-pick":()=>U(Pt)({kind:`task`,task:N.value}),"on-remove":e=>U(Nt)({kind:`task`,task:N.value},e),onPaste:s[9]||=e=>U(At)(e,{kind:`task`,task:N.value}),onDrop:s[10]||=B(e=>U(jt)(e,{kind:`task`,task:N.value}),[`prevent`]),onDragover:s[11]||=B(e=>$.value=`task-`+N.value.id,[`prevent`]),onDragenter:s[12]||=B(e=>$.value=`task-`+N.value.id,[`prevent`]),onDragleave:s[13]||=e=>$.value=U($)===`task-`+N.value.id?null:U($)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,ji),I(`div`,{class:H([`wb-execution-body`,{"wb-execution-body--simple":P.value,"wb-execution-body--no-subs":!P.value&&N.value.subtasks.length===0}])},[P.value?A(``,!0):(J(),K(`div`,Ri,[I(`div`,zi,[I(`h4`,Bi,j(U(Y)(`@WORKBENCH:子任务拆分`)),1),r(f,{class:`wb-exec-list__mode-switch`,modelValue:N.value.sequential,"onUpdate:modelValue":s[15]||=e=>N.value.sequential=e,"active-text":U(Y)(`@WORKBENCH:连续`),"inactive-text":U(Y)(`@WORKBENCH:并行`),"inline-prompt":``,title:U(Y)(`@WORKBENCH:连续模式下,任意子任务出错或被手动停止都会终止后续子任务`)},null,8,[`modelValue`,`active-text`,`inactive-text`,`title`]),I(`div`,Vi,[r(c,{size:`small`,plain:``,icon:U(v),disabled:N.value.subtasks.length===0,onClick:_t},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:添加子任务`)),1)]),_:1},8,[`icon`,`disabled`]),r(c,{size:`small`,type:Te.value?`primary`:`default`,disabled:N.value.subtasks.length===0,onClick:bt},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:保存拆分`))+` `,1),Te.value?(J(),K(`span`,Hi,j(we.value.size),1)):A(``,!0)]),_:1},8,[`type`,`disabled`]),r(c,{size:`small`,plain:``,icon:U(p),onClick:s[16]||=e=>xt.value=!0},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:导入拆分`)),1)]),_:1},8,[`icon`]),r(c,{size:`small`,type:`danger`,plain:``,icon:U(de),disabled:!N.value.subtasks||N.value.subtasks.length===0,title:U(Y)(`@WORKBENCH:只清空子任务,任务描述/附件/标题保留`),onClick:Xe},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:清空子任务`)),1)]),_:1},8,[`icon`,`disabled`,`title`])])]),I(`ul`,Ui,[(J(!0),K(G,null,E(N.value.subtasks,e=>(J(),K(`li`,{key:e.id,class:H([`wb-exec-sub-item`,{"is-selected":R.value===e.id,"is-running":e.status===`running`,"is-done":e.status===`done`,"is-dirty":we.value.has(e.id),"is-persisting":ht(e.id)}]),onClick:t=>R.value=e.id},[I(`div`,Gi,[e.status===`error`&&e.error?(J(),F(m,{key:0,placement:`right-start`,width:420,trigger:`hover`,"show-after":120,"popper-class":`wb-sub-error-popover`},{reference:D(()=>[I(`span`,{class:`wb-sub-item__status wb-sub-item__status--dot wb-sub-item__status--clickable`,style:me({background:U(kn)(e.status)}),title:U(Y)(`@WORKBENCH:点击查看错误详情`)},[...s[43]||=[I(`span`,{class:`wb-simple__status-dot`,"aria-hidden":`true`},null,-1)]],12,Ki)]),default:D(()=>[I(`div`,qi,[I(`div`,Ji,[r(u,{class:`wb-sub-error__icon`},{default:D(()=>[r(U(be))]),_:1}),I(`span`,Yi,j(U(Y)(`@WORKBENCH:执行出错`)),1),e.errorAt?(J(),K(`span`,Xi,j(He(e.errorAt)),1)):A(``,!0)]),I(`pre`,Zi,j(e.error),1),I(`div`,Qi,[r(c,{size:`small`,icon:U(Se),onClick:t=>Ue(e)},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:复制错误信息`)),1)]),_:1},8,[`icon`,`onClick`]),r(c,{size:`small`,type:`primary`,onClick:t=>We(e)},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:查看执行日志`)),1)]),_:1},8,[`onClick`])])])]),_:2},1024)):(J(),K(`span`,{key:1,class:`wb-sub-item__status wb-sub-item__status--dot`,style:me({background:U(kn)(e.status)}),title:U(Y)(`@WORKBENCH:任务完成状态`)},[...s[44]||=[I(`span`,{class:`wb-simple__status-dot`,"aria-hidden":`true`},null,-1)]],12,$i)),I(`span`,{class:`wb-exec-sub-item__title`,title:e.title},j(e.title||U(Y)(`@WORKBENCH:未命名子任务`)),9,ea),we.value.has(e.id)?(J(),K(`span`,ta)):A(``,!0)]),I(`div`,na,[U(d)(e.id)?(J(),K(`span`,ra,`PID: `+j(U(d)(e.id)?.pid),1)):A(``,!0),I(`span`,ia,[U(zt)(e)?(J(),K(`button`,{key:0,class:`wb-exec-sub-btn wb-exec-sub-btn--run`,title:U(Y)(`@WORKBENCH:单独执行此子任务`),onClick:B(t=>U(Rt)(e),[`stop`])},j(U(Y)(`@WORKBENCH:执行`)),9,aa)):A(``,!0),U(Bt)(e)?(J(),K(`button`,{key:1,class:`wb-exec-sub-btn wb-exec-sub-btn--run-from`,title:U(Y)(`@WORKBENCH:从此处执行后续子任务`),onClick:B(t=>U(Vt)(e),[`stop`])},j(U(Y)(`@WORKBENCH:从此处开始`)),9,oa)):A(``,!0),U(d)(e.id)&&(U(d)(e.id)?.status===`running`||U(d)(e.id)?.status===`pending`)?(J(),K(`button`,{key:2,class:`wb-exec-sub-btn wb-exec-sub-btn--stop`,title:U(Y)(`@WORKBENCH:停止执行`),onClick:B(t=>U(Ht)(U(d)(e.id)),[`stop`])},j(U(Y)(`@WORKBENCH:停止`)),9,sa)):A(``,!0),e.status===`done`?(J(),K(`button`,{key:3,class:`wb-exec-sub-btn wb-exec-sub-btn--undo`,title:U(Y)(`@WORKBENCH:取消完成`),disabled:ht(e.id),onClick:B(t=>Et(e),[`stop`])},j(U(Y)(`@WORKBENCH:取消完成`)),9,ca)):A(``,!0),I(`button`,{class:`wb-exec-sub-btn wb-exec-sub-btn--del`,title:U(Y)(`@WORKBENCH:删除`),disabled:ht(e.id),onClick:B(t=>vt(e),[`stop`])},`×`,8,la)])])],10,Wi))),128))])])),I(`div`,ua,[P.value?(J(),K(G,{key:1},[I(`details`,{class:H([`wb-simple__override`,{"has-content":!!(N.value.simpleOverride&&N.value.simpleOverride.trim())}])},[I(`summary`,xa,[r(u,{class:`wb-simple__override-caret`},{default:D(()=>[r(U(ne))]),_:1}),I(`span`,null,j(U(Y)(`@WORKBENCH:覆盖预置提示词(可选)`)),1),N.value.simpleOverride&&N.value.simpleOverride.trim()?(J(),K(`span`,{key:0,class:`wb-simple__override-tag`,title:U(Y)(`@WORKBENCH:已填写覆盖内容`)},j(U(Y)(`@WORKBENCH:已填写`)),9,Sa)):A(``,!0),U(Je)(U(qe)(N.value))===`running`&&U(qe)(N.value)?(J(),K(`button`,{key:1,class:`wb-simple__stop`,disabled:ht(U(qe)(N.value).id),onClick:s[28]||=B(e=>U(Ht)(U(qe)(N.value)),[`stop`])},j(U(Y)(`@WORKBENCH:停止`)),9,Ca)):A(``,!0)]),k(I(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":s[29]||=e=>N.value.simpleOverride=e,placeholder:U(Y)(`@WORKBENCH:留空则使用上方选定的「预置提示词」模板;可用变量同子任务:{{task.title}} {{task.desc}} {{repo.path}} {{branch}}`),rows:`6`},null,8,wa),[[_e,N.value.simpleOverride]])],2),U(Ke)(N.value).length>0?(J(),K(`div`,Ta,[(J(),F(U(je),{key:N.value.id,messages:U(Ge),"assistant-name":`Claude`,"show-avatar":!1,theme:U(t).theme,class:`wb-simple-chat`},null,8,[`messages`,`theme`])),U(qe)(N.value)&&[`done`,`error`,`cancelled`].includes(U(Je)(U(qe)(N.value)))?(J(),K(`div`,Ea,[(J(),F(U(Ae),{key:`input-`+N.value.id,placeholder:U(Y)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:U(sr),multiple:!0,maxCount:Math.max(0,9-(N.value.attachments?.length??0)),maxSize:U(cr)},class:`wb-simple-chat__input`,onSend:s[30]||=e=>U(It)(N.value,e)},null,8,[`placeholder`,`upload-config`]))])):A(``,!0)])):A(``,!0)],64)):(J(),K(G,{key:0},[N.value.subtasks.length===0?(J(),K(`div`,da,[I(`div`,fa,[r(u,null,{default:D(()=>[r(U(Ee))]),_:1})]),I(`div`,pa,j(U(Y)(`@WORKBENCH:拆分任务,逐项执行`)),1),I(`div`,ma,j(U(Y)(`@WORKBENCH:手动添加子任务,或让 AI 帮你自动拆分`)),1),I(`div`,ha,[r(c,{type:`primary`,icon:U(v),onClick:_t},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:添加子任务`)),1)]),_:1},8,[`icon`]),r(c,{icon:U(p),onClick:s[17]||=e=>xt.value=!0},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:导入拆分`)),1)]),_:1},8,[`icon`])])])):z.value?(J(),K(G,{key:2},[I(`div`,_a,[k(I(`input`,{class:`wb-input`,"onUpdate:modelValue":s[18]||=e=>z.value.title=e,placeholder:U(Y)(`@WORKBENCH:子任务标题`),onClick:s[19]||=B(()=>{},[`stop`]),onPaste:s[20]||=e=>U(At)(e,{kind:`sub`,task:N.value,sub:z.value})},null,40,va),[[_e,z.value.title]]),we.value.has(z.value.id)?(J(),K(`span`,{key:0,class:`wb-sub-item__dirty`,title:U(Y)(`@WORKBENCH:有未保存的更改`)},j(U(Y)(`@WORKBENCH:未保存`)),9,ya)):A(``,!0)]),k(I(`textarea`,{class:`wb-textarea wb-textarea--sm`,"onUpdate:modelValue":s[21]||=e=>z.value.desc=e,placeholder:U(Y)(`@WORKBENCH:子任务描述 / 独立提示词覆盖`),rows:`3`,onPaste:s[22]||=e=>U(At)(e,{kind:`sub`,task:N.value,sub:z.value})},null,40,ba),[[_e,z.value.desc]]),U(d)(z.value.id)?(J(),F(Dn,{key:0,job:U(d)(z.value.id),onReExecute:U(Lt)},null,8,[`job`,`onReExecute`])):A(``,!0),r(on,{attachments:z.value.attachments||[],"is-image":U(Ot),"human-size":U(kt),"is-uploading":U(Dt)(`sub-`+z.value.id),"is-paste-hover":U($)===z.value.id,"max-count":9,"on-pick":()=>U(Pt)({kind:`sub`,task:N.value,sub:z.value}),"on-remove":e=>U(Nt)({kind:`sub`,task:N.value,sub:z.value},e),onPaste:s[23]||=e=>U(At)(e,{kind:`sub`,task:N.value,sub:z.value}),onDrop:s[24]||=B(e=>U(jt)(e,{kind:`sub`,task:N.value,sub:z.value}),[`prevent`]),onDragover:s[25]||=B(e=>$.value=z.value.id,[`prevent`]),onDragenter:s[26]||=B(e=>$.value=z.value.id,[`prevent`]),onDragleave:s[27]||=e=>$.value=U($)===z.value.id?null:U($)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],64)):(J(),K(`div`,ga,[I(`p`,null,j(U(Y)(`@WORKBENCH:左侧选择子任务查看详情`)),1)]))],64))])],2)],64)):(J(),K(`div`,fi,[I(`p`,null,j(U(Y)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])]),r(g,{modelValue:ue.value,"onUpdate:modelValue":s[31]||=e=>ue.value=e,title:U(Y)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,class:`wb-logs-dialog`},{default:D(()=>[r(ar)]),_:1},8,[`modelValue`,`title`]),r(g,{modelValue:Z.visible,"onUpdate:modelValue":s[36]||=e=>Z.visible=e,title:Z.editing?U(Y)(`@WORKBENCH:编辑提示词`):U(Y)(`@WORKBENCH:新建提示词`),width:`640px`},{footer:D(()=>[r(c,{onClick:s[35]||=e=>Z.visible=!1},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:取消`)),1)]),_:1}),r(c,{type:`primary`,onClick:nt},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:保存`)),1)]),_:1})]),default:D(()=>[r(T,{"label-position":`top`},{default:D(()=>[r(y,{label:U(Y)(`@WORKBENCH:名称`)},{default:D(()=>[r(_,{modelValue:Z.name,"onUpdate:modelValue":s[32]||=e=>Z.name=e,placeholder:U(Y)(`@WORKBENCH:如:代码审查 / 写测试`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),r(y,{label:U(Y)(`@WORKBENCH:所属项目`)},{default:D(()=>[r(w,{modelValue:Z.projectPath,"onUpdate:modelValue":s[33]||=e=>Z.projectPath=e,placeholder:U(Y)(`@WORKBENCH:所属项目`),style:{width:`100%`},disabled:!U(l).path},{default:D(()=>[r(C,{label:U(Y)(`@WORKBENCH:全局(所有项目可用)`),value:``},null,8,[`label`]),U(l).path?(J(),F(C,{key:U(l).path,label:U(l).name||U(l).path,value:U(l).path},null,8,[`label`,`value`])):A(``,!0)]),_:1},8,[`modelValue`,`placeholder`,`disabled`])]),_:1},8,[`label`]),r(y,null,{default:D(()=>[I(`div`,Da,[r(c,{type:`primary`,plain:``,loading:Z.aiLoading,onClick:$e},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:AI 生成项目架构说明`)),1)]),_:1},8,[`loading`]),r(c,{onClick:et},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:编辑指令`)),1)]),_:1})])]),_:1}),r(y,{label:U(Y)(`@WORKBENCH:内容`)},{default:D(()=>[r(_,{modelValue:Z.content,"onUpdate:modelValue":s[34]||=e=>Z.content=e,type:`textarea`,rows:10,placeholder:U(Y)(`@WORKBENCH:可用变量:`)+`{{task.title}} {{task.desc}} {{sub.title}} {{sub.desc}} {{repo.path}} {{branch}}`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),r(g,{modelValue:Q.visible,"onUpdate:modelValue":s[39]||=e=>Q.visible=e,title:U(Y)(`@WORKBENCH:编辑生成指令`),width:`720px`,"append-to-body":``},{footer:D(()=>[r(c,{onClick:s[38]||=e=>Q.visible=!1},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:取消`)),1)]),_:1}),r(c,{type:`primary`,loading:Q.saving,onClick:tt},{default:D(()=>[x(j(U(Y)(`@WORKBENCH:保存`)),1)]),_:1},8,[`loading`])]),default:D(()=>[r(T,{"label-position":`top`},{default:D(()=>[r(y,{label:U(Y)(`@WORKBENCH:指令内容`)},{default:D(()=>[r(_,{modelValue:Q.text,"onUpdate:modelValue":s[37]||=e=>Q.text=e,type:`textarea`,rows:18,placeholder:U(Y)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),N.value?(J(),F(Ut,{key:0,modelValue:Ct.value,"onUpdate:modelValue":s[40]||=e=>Ct.value=e,title:N.value.title,desc:N.value.desc,"task-id":N.value.id,"prompt-id":N.value.promptId,onConfirm:Tt},null,8,[`modelValue`,`title`,`desc`,`task-id`,`prompt-id`])):A(``,!0),N.value?(J(),F(Kt,{key:1,modelValue:xt.value,"onUpdate:modelValue":s[41]||=e=>xt.value=e,"existing-count":N.value.subtasks.length,onConfirm:St},null,8,[`modelValue`,`existing-count`])):A(``,!0)])}}}),[[`__scopeId`,`data-v-5813053f`]]);export{Oa as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as e}from"./vendor--LaaJk9m.js";var t={"@F13B4:编辑项目配置":`编辑项目配置`,"@F13B4:国际化测试":`国际化测试`,"@F13B4:Git 操作":`Git 操作`,"@F13B4:用户设置":`用户设置`,"@F13B4:创建新分支":`创建新分支`,"@F13B4:搜索或签出分支":`搜索或签出分支`,"@F13B4:没有匹配的分支":`没有匹配的分支`,"@F13B4:请输入新分支名称":`请输入新分支名称`,"@F13B4:选择基础分支":`选择基础分支`,"@F13B4:当前分支":`当前分支`,"@F13B4:复制仓库地址":`复制仓库地址`,"@F13B4:查看更新":`查看更新`,"@F13B4:在 GitHub 上查看源码":`在 GitHub 上查看源码`,"@F13B4:在 npm 上查看包":`在 npm 上查看包`,"@F13B4:在浏览器中打开仓库主页":`在浏览器中打开仓库主页`,"@F13B4:无法识别该远程仓库的网页地址":`无法识别该远程仓库的网页地址`,"@F13B4:升级":`升级`,"@F13B4:升级中":`升级中`,"@F13B4:升级完成":`升级完成`,"@F13B4:升级失败":`升级失败`,"@F13B4:重试":`重试`,"@F13B4:完成":`完成`,"@F13B4:立即重启并刷新":`立即重启并刷新`,"@F13B4:稍后手动重启":`稍后手动重启`,"@F13B4:新版本已全局安装,需要重启服务才能生效":`新版本已全局安装,需要重启服务才能生效`,"@F13B4:{seconds} 秒后自动刷新":`{seconds} 秒后自动刷新`,"@F13B4:重启失败 {error}":`重启失败 {error}`,"@F13B4:重启超时":`重启超时:子进程未在 8 秒内就绪`,"@F13B4:重启失败,请刷新页面重试":`重启失败,请刷新页面重试`,"@F13B4:重启失败":`重启失败`,"@F13B4:确定升级":`确定升级`,"@F13B4:取消":`取消`,"@F13B4:确定要从 {current} 升级到 {latest} 吗?":`确定要从 {current} 升级到 {latest} 吗?`,"@F13B4:发现新版本 {version}":`发现新版本 {version}`,"@F13B4:发现新版本 {version},点击升级":`发现新版本 {version},点击升级`,"@F13B4:检查更新失败 {error}":`检查更新失败 {error}`,"@F13B4:等待日志输出":`等待日志输出...`,"@F13B4:复制克隆命令":`复制克隆命令`,"@F13B4:已复制克隆命令":`已复制克隆命令`,"@F13B4:切换到浅色主题":`切换到浅色主题`,"@F13B4:切换到深色主题":`切换到深色主题`,"@NET:无法连接到本地服务,请检查后端进程":`无法连接到本地服务,请检查后端进程`,"@NET:重试":`重试`,"@NET:关闭":`关闭`,"@NET:刚刚":`刚刚`,"@NET:网络连接失败":`网络连接失败`,"@NET:浏览器报告离线":`浏览器报告离线`,"@F13B4:未知目录":`未知目录`,"@F13B4:---------- 页面初始化开始 ----------":`---------- 页面初始化开始 ----------`,"@F13B4:当前目录不是Git仓库,部分功能将不可用":`当前目录不是Git仓库,部分功能将不可用`,"@F13B4:---------- 页面初始化完成 ----------":`---------- 页面初始化完成 ----------`,"@F13B4:默认提交信息: ":`默认提交信息: `,"@F13B4:默认模型":`默认模型`,"@F13B4:布局比例已保存 - 左侧: ":`布局比例已保存 - 左侧: `,"@F13B4:%, 中间: ":`%, 中间: `,"@F13B4:%, 右侧: ":`%, 右侧: `,"@F13B4:调整左侧与中间面板宽度(左右方向键)":`调整左侧与中间面板宽度(左右方向键)`,"@F13B4:调整左侧与右侧面板宽度(左右方向键)":`调整左侧与右侧面板宽度(左右方向键)`,"@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:基于分支":`基于分支`,"@F13B4:取消":`取消`,"@F13B4:创建":`创建`,"@F13B4:远程仓库:":`远程仓库:`,"@76A11:没有已暂存的更改":`没有已暂存的更改`,"@76A11:请输入提交信息":`请输入提交信息`,"@76A11:提交":`提交`,"@76A11:个已暂存文件":`个已暂存文件`,"@76A11:存在冲突文件,请先解决冲突":`存在冲突文件,请先解决冲突`,"@76A11:提交并完成合并":`提交并完成合并`,"@76A11:提交中…":`提交中…`,"@76A11:正在提交中…":`正在提交中…`,"@F4137:当前分支没有上游分支":`当前分支没有上游分支`,"@F4137:没有需要推送的提交":`没有需要推送的提交`,"@F4137:有未提交的暂存更改,请先提交":`有未提交的暂存更改,请先提交`,"@F4137:推送":`推送`,"@F4137:个本地提交":`个本地提交`,"@F4137:存在冲突文件,请先解决冲突":`存在冲突文件,请先解决冲突`,"@2E184:一键推送所有":`一键推送所有`,"@2E184:一键提交":`一键提交`,"@2E184:一键提交所选":`一键提交所选`,"@2E184:一键推送所选":`一键推送所选`,"@2E184:暂存 + 提交 + 推送":`暂存 + 提交 + 推送`,"@2E184:暂存所选 + 提交 + 推送":`暂存所选 + 提交 + 推送`,"@2E184:暂存 + 提交":`暂存 + 提交`,"@2E184:暂存所选 + 提交":`暂存所选 + 提交`,"@2E184:拉取远程更新失败,已停止推送":`拉取远程更新失败,已停止推送`,"@2E184:没有需要提交的更改":`没有需要提交的更改`,"@2E184:请输入提交信息":`请输入提交信息`,"@2E184:当前分支没有上游分支":`当前分支没有上游分支`,"@2E184:没有需要提交或推送的更改":`没有需要提交或推送的更改`,"@2E184:没有需要提交的更改":`没有需要提交的更改`,"@2E184:本地已提交,一键推送到远程仓库":`本地已提交,一键推送到远程仓库`,"@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库":`一键完成:暂存所有更改 → 提交 → 推送到远程仓库`,"@2E184:一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库":`一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库`,"@2E184:一键完成:暂存所有更改 → 提交":`一键完成:暂存所有更改 → 提交`,"@2E184:一键完成:仅暂存所选文件 → 提交":`一键完成:仅暂存所选文件 → 提交`,"@2E184:请先勾选要提交的文件":`请先勾选要提交的文件`,"@2E184:请先勾选要推送的文件":`请先勾选要推送的文件`,"@2E184:所选文件无需暂存或被锁定":`所选文件无需暂存或被锁定`,"@PSTART:一键推送成功后执行":`一键推送成功后执行`,"@PSTART:启用":`启用`,"@PSTART:仅在一键推送成功后触发,不影响主流程":`仅在一键推送成功后触发,不影响主流程`,"@29974:没有需要暂存的更改":`没有需要暂存的更改`,"@29974:暂存":`暂存`,"@29974:暂存所选":`暂存所选`,"@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:展开控制台":`展开控制台`,"@CF05E:提交后启动项执行失败":`提交后启动项执行失败`,"@CF05E:该编排缺少流程数据,无法执行":`该编排缺少流程数据,无法执行`,"@CF05E:未找到 start 节点":`未找到 start 节点`,"@CF05E:用户停止执行":`用户停止执行`,"@CF05E:确定要清空所有执行历史吗?此操作不可撤销。":`确定要清空所有执行历史吗?此操作不可撤销。`,"@CF05E:清空历史":`清空历史`,"@CF05E:清空":`清空`,"@CF05E:取消":`取消`,"@CF05E:执行历史已清空":`执行历史已清空`,"@CF05E:启动项命令执行失败":`启动项命令执行失败`,"@CF05E:Socket 连接未就绪,无法自动执行交互式启动项":`Socket 连接未就绪,无法自动执行交互式启动项`,"@CF05E:已在新终端中执行命令":`已在新终端中执行命令`,"@CF05E:执行失败":`执行失败`,"@CF05E:无法停止:进程ID不存在":`无法停止:进程ID不存在`,"@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:命令":`命令`,"@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}`,"@CMD01:同步NPM命令":`同步NPM命令`,"@CMD01:正在同步NPM命令...":`正在同步NPM命令...`,"@CMD01:NPM命令同步完成":`NPM命令同步完成,共添加 {count} 个命令(跳过 {skip} 个重复)`,"@CMD01:NPM命令同步失败: ":`NPM命令同步失败: `,"@CMD01:未找到任何NPM脚本":`未找到任何NPM脚本`,"@CMD01:批量删除":`批量删除`,"@CMD01:已选择":`已选择 {count} 项`,"@CMD01:确定要删除所选命令吗":`确定要删除所选的 {count} 个命令吗?`,"@CMD01:批量删除成功":`成功删除 {count} 个命令`,"@CMD01:选择NPM命令":`选择要同步的NPM命令`,"@CMD01:全选":`全选`,"@CMD01:NPM脚本列表":`NPM脚本列表`,"@CMD01:开始同步":`开始同步`,"@CMD01:包名":`包名`,"@CMD01:脚本名":`脚本名`,"@CMD01:状态":`状态`,"@CMD01:已存在":`已存在`,"@CMD01:新增":`新增`,"@CMD01:请至少选择一项":`请至少选择一个命令`,"@CMD01:NPM命令同步完成2":`NPM命令同步完成,共添加 {count} 个命令(跳过 {skip} 个重复)`,"@CMDPANEL:自定义命令":`自定义命令`,"@CMDPANEL:管理命令":`管理命令`,"@CMDPANEL:暂无自定义命令":`暂无自定义命令`,"@CMDPANEL:调整自定义命令面板高度(上下方向键)":`调整自定义命令面板高度(上下方向键)`,"@CMDPANEL:去添加":`去添加`,"@CMDPANEL:已在新终端中执行":`已在新终端中执行: {name}`,"@CMDPANEL:执行失败":`执行失败`,"@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) {
|
|
1
|
+
import{c as e}from"./vendor-B9orL8iU.js";var t={"@F13B4:编辑项目配置":`编辑项目配置`,"@F13B4:国际化测试":`国际化测试`,"@F13B4:Git 操作":`Git 操作`,"@F13B4:用户设置":`用户设置`,"@F13B4:创建新分支":`创建新分支`,"@F13B4:搜索或签出分支":`搜索或签出分支`,"@F13B4:没有匹配的分支":`没有匹配的分支`,"@F13B4:请输入新分支名称":`请输入新分支名称`,"@F13B4:选择基础分支":`选择基础分支`,"@F13B4:当前分支":`当前分支`,"@F13B4:复制仓库地址":`复制仓库地址`,"@F13B4:查看更新":`查看更新`,"@F13B4:在 GitHub 上查看源码":`在 GitHub 上查看源码`,"@F13B4:在 npm 上查看包":`在 npm 上查看包`,"@F13B4:在浏览器中打开仓库主页":`在浏览器中打开仓库主页`,"@F13B4:无法识别该远程仓库的网页地址":`无法识别该远程仓库的网页地址`,"@F13B4:升级":`升级`,"@F13B4:升级中":`升级中`,"@F13B4:升级完成":`升级完成`,"@F13B4:升级失败":`升级失败`,"@F13B4:重试":`重试`,"@F13B4:完成":`完成`,"@F13B4:立即重启并刷新":`立即重启并刷新`,"@F13B4:稍后手动重启":`稍后手动重启`,"@F13B4:新版本已全局安装,需要重启服务才能生效":`新版本已全局安装,需要重启服务才能生效`,"@F13B4:{seconds} 秒后自动刷新":`{seconds} 秒后自动刷新`,"@F13B4:重启失败 {error}":`重启失败 {error}`,"@F13B4:重启超时":`重启超时:子进程未在 8 秒内就绪`,"@F13B4:重启失败,请刷新页面重试":`重启失败,请刷新页面重试`,"@F13B4:重启失败":`重启失败`,"@F13B4:确定升级":`确定升级`,"@F13B4:取消":`取消`,"@F13B4:确定要从 {current} 升级到 {latest} 吗?":`确定要从 {current} 升级到 {latest} 吗?`,"@F13B4:发现新版本 {version}":`发现新版本 {version}`,"@F13B4:发现新版本 {version},点击升级":`发现新版本 {version},点击升级`,"@F13B4:检查更新失败 {error}":`检查更新失败 {error}`,"@F13B4:等待日志输出":`等待日志输出...`,"@F13B4:复制克隆命令":`复制克隆命令`,"@F13B4:已复制克隆命令":`已复制克隆命令`,"@F13B4:切换到浅色主题":`切换到浅色主题`,"@F13B4:切换到深色主题":`切换到深色主题`,"@NET:无法连接到本地服务,请检查后端进程":`无法连接到本地服务,请检查后端进程`,"@NET:重试":`重试`,"@NET:关闭":`关闭`,"@NET:刚刚":`刚刚`,"@NET:网络连接失败":`网络连接失败`,"@NET:浏览器报告离线":`浏览器报告离线`,"@F13B4:未知目录":`未知目录`,"@F13B4:---------- 页面初始化开始 ----------":`---------- 页面初始化开始 ----------`,"@F13B4:当前目录不是Git仓库,部分功能将不可用":`当前目录不是Git仓库,部分功能将不可用`,"@F13B4:---------- 页面初始化完成 ----------":`---------- 页面初始化完成 ----------`,"@F13B4:默认提交信息: ":`默认提交信息: `,"@F13B4:默认模型":`默认模型`,"@F13B4:布局比例已保存 - 左侧: ":`布局比例已保存 - 左侧: `,"@F13B4:%, 中间: ":`%, 中间: `,"@F13B4:%, 右侧: ":`%, 右侧: `,"@F13B4:调整左侧与中间面板宽度(左右方向键)":`调整左侧与中间面板宽度(左右方向键)`,"@F13B4:调整左侧与右侧面板宽度(左右方向键)":`调整左侧与右侧面板宽度(左右方向键)`,"@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:基于分支":`基于分支`,"@F13B4:取消":`取消`,"@F13B4:创建":`创建`,"@F13B4:远程仓库:":`远程仓库:`,"@76A11:没有已暂存的更改":`没有已暂存的更改`,"@76A11:请输入提交信息":`请输入提交信息`,"@76A11:提交":`提交`,"@76A11:个已暂存文件":`个已暂存文件`,"@76A11:存在冲突文件,请先解决冲突":`存在冲突文件,请先解决冲突`,"@76A11:提交并完成合并":`提交并完成合并`,"@76A11:提交中…":`提交中…`,"@76A11:正在提交中…":`正在提交中…`,"@F4137:当前分支没有上游分支":`当前分支没有上游分支`,"@F4137:没有需要推送的提交":`没有需要推送的提交`,"@F4137:有未提交的暂存更改,请先提交":`有未提交的暂存更改,请先提交`,"@F4137:推送":`推送`,"@F4137:个本地提交":`个本地提交`,"@F4137:存在冲突文件,请先解决冲突":`存在冲突文件,请先解决冲突`,"@2E184:一键推送所有":`一键推送所有`,"@2E184:一键提交":`一键提交`,"@2E184:一键提交所选":`一键提交所选`,"@2E184:一键推送所选":`一键推送所选`,"@2E184:暂存 + 提交 + 推送":`暂存 + 提交 + 推送`,"@2E184:暂存所选 + 提交 + 推送":`暂存所选 + 提交 + 推送`,"@2E184:暂存 + 提交":`暂存 + 提交`,"@2E184:暂存所选 + 提交":`暂存所选 + 提交`,"@2E184:拉取远程更新失败,已停止推送":`拉取远程更新失败,已停止推送`,"@2E184:没有需要提交的更改":`没有需要提交的更改`,"@2E184:请输入提交信息":`请输入提交信息`,"@2E184:当前分支没有上游分支":`当前分支没有上游分支`,"@2E184:没有需要提交或推送的更改":`没有需要提交或推送的更改`,"@2E184:没有需要提交的更改":`没有需要提交的更改`,"@2E184:本地已提交,一键推送到远程仓库":`本地已提交,一键推送到远程仓库`,"@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库":`一键完成:暂存所有更改 → 提交 → 推送到远程仓库`,"@2E184:一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库":`一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库`,"@2E184:一键完成:暂存所有更改 → 提交":`一键完成:暂存所有更改 → 提交`,"@2E184:一键完成:仅暂存所选文件 → 提交":`一键完成:仅暂存所选文件 → 提交`,"@2E184:请先勾选要提交的文件":`请先勾选要提交的文件`,"@2E184:请先勾选要推送的文件":`请先勾选要推送的文件`,"@2E184:所选文件无需暂存或被锁定":`所选文件无需暂存或被锁定`,"@PSTART:一键推送成功后执行":`一键推送成功后执行`,"@PSTART:启用":`启用`,"@PSTART:仅在一键推送成功后触发,不影响主流程":`仅在一键推送成功后触发,不影响主流程`,"@29974:没有需要暂存的更改":`没有需要暂存的更改`,"@29974:暂存":`暂存`,"@29974:暂存所选":`暂存所选`,"@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:展开控制台":`展开控制台`,"@CF05E:提交后启动项执行失败":`提交后启动项执行失败`,"@CF05E:该编排缺少流程数据,无法执行":`该编排缺少流程数据,无法执行`,"@CF05E:未找到 start 节点":`未找到 start 节点`,"@CF05E:用户停止执行":`用户停止执行`,"@CF05E:确定要清空所有执行历史吗?此操作不可撤销。":`确定要清空所有执行历史吗?此操作不可撤销。`,"@CF05E:清空历史":`清空历史`,"@CF05E:清空":`清空`,"@CF05E:取消":`取消`,"@CF05E:执行历史已清空":`执行历史已清空`,"@CF05E:启动项命令执行失败":`启动项命令执行失败`,"@CF05E:Socket 连接未就绪,无法自动执行交互式启动项":`Socket 连接未就绪,无法自动执行交互式启动项`,"@CF05E:已在新终端中执行命令":`已在新终端中执行命令`,"@CF05E:执行失败":`执行失败`,"@CF05E:无法停止:进程ID不存在":`无法停止:进程ID不存在`,"@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:命令":`命令`,"@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}`,"@CMD01:同步NPM命令":`同步NPM命令`,"@CMD01:正在同步NPM命令...":`正在同步NPM命令...`,"@CMD01:NPM命令同步完成":`NPM命令同步完成,共添加 {count} 个命令(跳过 {skip} 个重复)`,"@CMD01:NPM命令同步失败: ":`NPM命令同步失败: `,"@CMD01:未找到任何NPM脚本":`未找到任何NPM脚本`,"@CMD01:批量删除":`批量删除`,"@CMD01:已选择":`已选择 {count} 项`,"@CMD01:确定要删除所选命令吗":`确定要删除所选的 {count} 个命令吗?`,"@CMD01:批量删除成功":`成功删除 {count} 个命令`,"@CMD01:选择NPM命令":`选择要同步的NPM命令`,"@CMD01:全选":`全选`,"@CMD01:NPM脚本列表":`NPM脚本列表`,"@CMD01:开始同步":`开始同步`,"@CMD01:包名":`包名`,"@CMD01:脚本名":`脚本名`,"@CMD01:状态":`状态`,"@CMD01:已存在":`已存在`,"@CMD01:新增":`新增`,"@CMD01:请至少选择一项":`请至少选择一个命令`,"@CMD01:NPM命令同步完成2":`NPM命令同步完成,共添加 {count} 个命令(跳过 {skip} 个重复)`,"@CMDPANEL:自定义命令":`自定义命令`,"@CMDPANEL:管理命令":`管理命令`,"@CMDPANEL:暂无自定义命令":`暂无自定义命令`,"@CMDPANEL:调整自定义命令面板高度(上下方向键)":`调整自定义命令面板高度(上下方向键)`,"@CMDPANEL:去添加":`去添加`,"@CMDPANEL:已在新终端中执行":`已在新终端中执行: {name}`,"@CMDPANEL:执行失败":`执行失败`,"@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) {
|
|
2
2
|
const out = new Object()
|
|
3
3
|
out.key0 = param.input
|
|
4
4
|
return out
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-CMxvf4Kt.js";import{Jn as e,a as t,mn as n,n as r,sr as i,t as a}from"./element-plus-CL7fBdM_.js";import{d as o}from"./vendor--LaaJk9m.js";import{a as s,n as c,r as l}from"./_plugin-vue_export-helper-DvV-QrsM.js";var u={"zh-CN":r,"en-US":a};function d(e){return u[e]||r}var f=o(`locale`,()=>{let e=i(l()),t=n(()=>d(e.value));async function r(t){s(t),e.value=t;let n=p();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:t,changeLocale:r}}),p=o(`config`,()=>{let r=i(``),a=i([]),o=i([]),l=i([]),u=i([]),d=i([]),p=i([]),m=i([]),h=i([]),g=i(!1),_=i({enabled:!1,type:`command`,refId:``}),v=i(!1),y=i(!1),b=i(``),x=i(``),S=i(``),C=i(!0),w=i(!1),T=i(!0),E=i(!1),D=i(!1),O=i(!0),k=i(`light`),A=i(`zh-CN`),j=i([]),M={layout:{leftRatio:.25,midRatio:.375,rightRatio:.375,topRatio:.5},layoutsByProject:{},fileListViewMode:`list`,fileDiffSplitPercent:35,commandConsole:{expanded:!0,useTerminal:!0,showTerminalSessions:!0,splitPercent:25},editorAutoSave:!1,mindmapDir:``},N=i(JSON.parse(JSON.stringify(M))),P=i(!1);function F(e){S.value=e||``}function I(){let e=S.value;if(e&&N.value.layoutsByProject?.[e]){N.value.layout={...N.value.layoutsByProject[e]};return}}function L(e){let t=document.documentElement;e===`dark`?t.setAttribute(`data-theme`,`dark`):e===`light`?t.removeAttribute(`data-theme`):window.matchMedia(`(prefers-color-scheme: dark)`).matches?t.setAttribute(`data-theme`,`dark`):t.removeAttribute(`data-theme`)}function R(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return k.value=e,L(e),$({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}L(k.value);let z=n(()=>({defaultCommitMessage:r.value,descriptionTemplates:a.value,scopeTemplates:o.value,messageTemplates:l.value,commandTemplates:u.value,lockedFiles:d.value,customCommands:p.value,orchestrations:m.value,startupItems:h.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:S.value})),B=n(()=>!!(b.value&&b.value.trim()));async function V(){try{let e=await fetch(`/api/config/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`}}),n=await e.json().catch(()=>({}));return e.ok&&n?.success?(t.success(c(`@D50BB:已打开系统配置文件`)),!0):(t.error(`${c(`@D50BB:打开系统配置文件失败: `)}${n?.error||``}`),!1)}catch(e){return t.error(`${c(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function H(e=!1){if(!e&&y.value&&!v.value)return console.log(c(`@D50BB:使用缓存的配置信息`)),z.value;v.value=!0;try{v.value=!0,console.log(c(`@D50BB:加载配置信息...`));let e=await fetch(`/api/config/getConfig`),n=await e.json().catch(()=>({}));if(!e.ok||n&&n.success===!1){let e=String(n?.error||c(`@D50BB:加载配置失败`)),r=String(n?.configPath||``),i=r?`\n${c(`@D50BB:配置文件`)}: ${r}`:``;return t.error(`${c(`@D50BB:加载配置失败: `)}${e}${i}`),b.value=e,x.value=r,null}if(b.value=``,x.value=``,r.value=n.defaultCommitMessage||``,a.value=n.descriptionTemplates||[],o.value=n.scopeTemplates||[],l.value=n.messageTemplates||[],u.value=n.commandTemplates||[],d.value=n.lockedFiles||[],p.value=n.customCommands||[],m.value=n.orchestrations||[],h.value=(n.startupItems||[]).map(e=>({id:String(e?.id??``),type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId??e?.commandId??``),createdAt:Number(e?.createdAt??Date.now()),enabled:typeof e?.enabled==`boolean`?e.enabled:!0})).filter(e=>e.id&&e.refId),g.value=n.startupAutoRun||!1,_.value={enabled:!!n?.afterQuickPushAction?.enabled,type:n?.afterQuickPushAction?.type===`workflow`?`workflow`:`command`,refId:String(n?.afterQuickPushAction?.refId||``).trim()},n.isStandardCommit!==void 0&&(T.value=!!n.isStandardCommit),n.skipHooks!==void 0&&(E.value=!!n.skipHooks),n.autoQuickPushOnEnter!==void 0&&(D.value=!!n.autoQuickPushOnEnter),n.autoSetDefaultMessage!==void 0&&(w.value=!!n.autoSetDefaultMessage),n.autoClosePushModal!==void 0&&(C.value=!!n.autoClosePushModal),n.pullBeforePush!==void 0&&(O.value=!!n.pullBeforePush),Array.isArray(n.models)&&(j.value=n.models),n.theme&&[`light`,`dark`,`auto`].includes(n.theme)&&(k.value=n.theme,L(n.theme)),n.locale&&[`zh-CN`,`en-US`].includes(n.locale)){A.value=n.locale,s(n.locale);let e=f();e.currentLocale=n.locale}if(n.currentDirectory&&(S.value=n.currentDirectory),n.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,M.layout.leftRatio),midRatio:e(r,M.layout.midRatio),rightRatio:e(i,M.layout.rightRatio),topRatio:e(a,M.layout.topRatio)}}let o=e(`zen-gitsync-file-list-view-mode`);(o===`list`||o===`tree`)&&(t.fileListViewMode=o);let s=e(`zen-gitsync-filediff-ratio`)??e(`fileDiff.splitPercent`);if(s!=null){let e=parseFloat(s);Number.isFinite(e)&&(t.fileDiffSplitPercent=Math.min(85,Math.max(15,e)))}let c=e(`useTerminal`),l=e(`isConsoleExpanded`),u=e(`showTerminalSessions`),d=e(`zen-gitsync-commandconsole-ratio`);if(c!==null||l!==null||u!==null||d!=null){let e=d==null?NaN:parseFloat(d);t.commandConsole={useTerminal:c!==`false`,expanded:l!==`false`,showTerminalSessions:u==null?!0:u===`true`,splitPercent:Number.isFinite(e)?Math.min(85,Math.max(15,e)):M.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(N.value={...N.value,...t}),Object.keys(t).length>0&&q(t,{immediate:!0}).catch(e=>{console.error(`迁移 UI 设置到文件失败:`,e)});try{[`zen-gitsync-theme`,`zen-gitsync-locale`,`zen-gitsync-editor-auto-save`,`zen-gitsync-file-list-view-mode`,`zen-gitsync-filediff-ratio`,`fileDiff.splitPercent`,`isConsoleExpanded`,`useTerminal`,`showTerminalSessions`,`zen-gitsync-commandconsole-ratio`,`zen-gitsync-layout-left-ratio`,`zen-gitsync-layout-mid-ratio`,`zen-gitsync-layout-right-ratio`,`zen-gitsync-layout-top-ratio`,`locale`].forEach(e=>localStorage.removeItem(e))}catch{}}else{let e=n.ui.layoutsByProject&&typeof n.ui.layoutsByProject==`object`&&!Array.isArray(n.ui.layoutsByProject)?n.ui.layoutsByProject:{},t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r;t[n]={leftRatio:Number.isFinite(Number(e.leftRatio))?Number(e.leftRatio):M.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):M.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):M.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):M.layout.topRatio}}N.value={layout:{...M.layout,...n.ui.layout||{}},layoutsByProject:t,fileListViewMode:n.ui.fileListViewMode===`tree`?`tree`:`list`,fileDiffSplitPercent:Number.isFinite(Number(n.ui.fileDiffSplitPercent))?Math.min(85,Math.max(15,Number(n.ui.fileDiffSplitPercent))):M.fileDiffSplitPercent,commandConsole:{expanded:typeof n.ui.commandConsole?.expanded==`boolean`?n.ui.commandConsole.expanded:M.commandConsole.expanded,useTerminal:typeof n.ui.commandConsole?.useTerminal==`boolean`?n.ui.commandConsole.useTerminal:M.commandConsole.useTerminal,showTerminalSessions:typeof n.ui.commandConsole?.showTerminalSessions==`boolean`?n.ui.commandConsole.showTerminalSessions:M.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(n.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(n.ui.commandConsole.splitPercent))):M.commandConsole.splitPercent},editorAutoSave:typeof n.ui.editorAutoSave==`boolean`?n.ui.editorAutoSave:M.editorAutoSave,mindmapDir:typeof n.ui.mindmapDir==`string`?n.ui.mindmapDir:M.mindmapDir}}return I(),P.value=!0,y.value=!0,console.log(c(`@D50BB:配置信息加载完成`)),z.value}catch(e){return console.error(`加载配置失败:`,e),t.error(`${c(`@D50BB:加载配置失败: `)}${e.message}`),b.value=e.message,null}finally{v.value=!1}}async function U(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:T.value,skipHooks:E.value,autoQuickPushOnEnter:D.value,autoSetDefaultMessage:w.value,autoClosePushModal:C.value,pullBeforePush:O.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}e([T,E,D,w,C,O],()=>{y.value&&U()});let W=null,G={};async function K(){if(W&&=(clearTimeout(W),null),Object.keys(G).length===0)return;let e=G;G={};try{await fetch(`/api/config/save-ui-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}catch(e){console.error(`保存 UI 设置失败:`,e)}}async function q(e,t={}){if(P.value){if(t.immediate){Object.assign(G,e),await K();return}Object.assign(G,e),W&&clearTimeout(W),W=setTimeout(()=>{K()},300)}}async function J(){N.value.layout={...M.layout};let e=S.value;return e&&(N.value.layoutsByProject={...N.value.layoutsByProject,[e]:{...N.value.layout}}),await q({layoutsByProject:N.value.layoutsByProject},{immediate:!0}),N.value.layout}e(()=>N.value.fileListViewMode,e=>{P.value&&q({fileListViewMode:e})}),e(()=>N.value.fileDiffSplitPercent,e=>{P.value&&q({fileDiffSplitPercent:e})}),e(()=>N.value.editorAutoSave,e=>{P.value&&q({editorAutoSave:e})}),e(()=>N.value.layout,e=>{if(!P.value)return;let t=S.value;t&&(N.value.layoutsByProject={...N.value.layoutsByProject,[t]:e},q({layoutsByProject:N.value.layoutsByProject}))},{deep:!0}),e(()=>N.value.commandConsole,e=>{P.value&&q({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{K()});async function Y(e){try{let n=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:e})})).json();return n.success?(r.value=e,t.success(c(`@D50BB:默认提交信息已保存`)),!0):(t.error(`${c(`@D50BB:保存失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存失败: `)}${e.message}`),!1}}async function X(e){try{let n=await(await fetch(`/api/config/save-after-quick-push-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({afterQuickPushAction:{enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()}})})).json();return n.success?(_.value={enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()},!0):(t.error(`保存提交后启动项失败: ${n.error}`),!1)}catch(e){return t.error(`保存提交后启动项失败: ${e.message}`),!1}}async function Z(e,n){try{let r=await(await fetch(`/api/config/save-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?a.value.includes(e)||a.value.push(e):n===`scope`?o.value.includes(e)||o.value.push(e):n===`message`?l.value.includes(e)||l.value.push(e):n===`command`&&(u.value.includes(e)||u.value.push(e)),t.success(c(`@D50BB:模板已保存`)),!0):(t.error(`${c(`@D50BB:保存模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function ee(e,n){try{let r=await(await fetch(`/api/config/delete-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?a.value=a.value.filter(t=>t!==e):n===`scope`?o.value=o.value.filter(t=>t!==e):n===`message`?l.value=l.value.filter(t=>t!==e):n===`command`&&(u.value=u.value.filter(t=>t!==e)),t.success(c(`@D50BB:模板已删除`)),!0):(t.error(`${c(`@D50BB:删除模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function te(e,n,r){try{let i=await(await fetch(`/api/config/update-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldTemplate:e,newTemplate:n,type:r})})).json();if(i.success){if(r===`description`){let t=a.value.indexOf(e);t!==-1&&(a.value[t]=n)}else if(r===`scope`){let t=o.value.indexOf(e);t!==-1&&(o.value[t]=n)}else if(r===`message`){let t=l.value.indexOf(e);t!==-1&&(l.value[t]=n)}else if(r===`command`){let t=u.value.indexOf(e);t!==-1&&(u.value[t]=n)}return t.success(c(`@D50BB:模板已更新`)),!0}else return t.error(`${c(`@D50BB:更新模板失败: `)}${i.error}`),!1}catch(e){return t.error(`${c(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function ne(e,n){try{let r=await(await fetch(`/api/config/pin-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?(a.value=a.value.filter(t=>t!==e),a.value.unshift(e)):n===`scope`?(o.value=o.value.filter(t=>t!==e),o.value.unshift(e)):n===`message`?(l.value=l.value.filter(t=>t!==e),l.value.unshift(e)):n===`command`&&(u.value=u.value.filter(t=>t!==e),u.value.unshift(e)),t.success(c(`@D50BB:模板已置顶`)),!0):(t.error(`${c(`@D50BB:置顶模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function Q(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(d.value=e.lockedFiles||[],e.lockedFiles):(t.error(`${c(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),t.error(`${c(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function re(e){try{let n=await(await fetch(`/api/lock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return n.success?(await Q(),t.success(`${c(`@D50BB:文件已锁定: `)}${e}`),!0):(t.error(`${c(`@D50BB:锁定文件失败: `)}${n.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),t.error(`${c(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function ie(e){try{let n=await(await fetch(`/api/unlock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return n.success?(await Q(),t.success(`${c(`@D50BB:文件已解锁: `)}${e}`),!0):(t.error(`${c(`@D50BB:解锁文件失败: `)}${n.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),t.error(`${c(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function ae(e){try{let t=await(await fetch(`/api/check-file-lock`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?t.isLocked:(console.error(`检查文件锁定状态失败:`,t.error),!1)}catch(e){return console.error(`检查文件锁定状态失败:`,e),!1}}async function oe(e){try{let n=await(await fetch(`/api/config/save-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e})})).json();return n.success?(await H(!0),t.success(c(`@CMD01:命令已保存`)),!0):(t.error(`${c(`@CMD01:保存命令失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function se(e){try{let n=await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),t.success(c(`@CMD01:命令已删除`)),!0):(t.error(`${c(`@CMD01:删除命令失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function ce(e,n){try{let r=await(await fetch(`/api/config/update-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,command:n})})).json();return r.success?(await H(!0),t.success(c(`@CMD01:命令已更新`)),!0):(t.error(`${c(`@CMD01:更新命令失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function le(e){try{let n=await(await fetch(`/api/config/pin-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),!0):(t.error(n.error),!1)}catch(e){return t.error(e.message),!1}}async function ue(e){try{let n=await(await fetch(`/api/config/save-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orchestration:e})})).json();return n.success?(await H(!0),t.success(c(`@ORCH:编排已保存`)),n.orchestration||null):(t.error(`${c(`@ORCH:保存编排失败: `)}${n.error}`),null)}catch(e){return t.error(`${c(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function de(e){try{let n=await(await fetch(`/api/config/delete-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),t.success(c(`@ORCH:编排已删除`)),!0):(t.error(`${c(`@ORCH:删除编排失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function fe(e,n){try{let r=await(await fetch(`/api/config/update-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,orchestration:n})})).json();return r.success?(await H(!0),t.success(c(`@ORCH:编排已更新`)),!0):(t.error(`${c(`@ORCH:更新编排失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function pe(e,n){try{let r=await(await fetch(`/api/config/save-startup-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({startupItems:e,startupAutoRun:n===void 0?g.value:n})})).json();return r.success?(h.value=e,n!==void 0&&(g.value=n),!0):(t.error(`保存启动项失败: ${r.error}`),!1)}catch(e){return t.error(`保存启动项失败: ${e.message}`),!1}}async function me(e){try{let n=await(await fetch(`/api/config/save-models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:e})})).json();return n.success?(j.value=e,!0):(t.error(`${c(`@D50BB:保存模型失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function $(e){try{let n=await(await fetch(`/api/config/save-general-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();if(n.success){if(e.theme&&(k.value=e.theme,L(e.theme)),e.locale){A.value=e.locale,s(e.locale);let t=f();t.currentLocale=e.locale}return!0}else return t.error(`保存通用设置失败: ${n.error}`),!1}catch(e){return t.error(`保存通用设置失败: ${e.message}`),!1}}return{models:j,defaultCommitMessage:r,descriptionTemplates:a,scopeTemplates:o,messageTemplates:l,commandTemplates:u,lockedFiles:d,customCommands:p,orchestrations:m,startupItems:h,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:y,configLoadError:b,configFilePath:x,hasConfigLoadError:B,currentDirectory:S,config:z,autoClosePushModal:C,autoSetDefaultMessage:w,isStandardCommit:T,skipHooks:E,autoQuickPushOnEnter:D,pullBeforePush:O,theme:k,locale:A,ui:N,isUiLoaded:P,loadConfig:H,setCurrentDirectory:F,openSystemConfigFile:V,saveTemplate:Z,saveModels:me,saveGeneralSettings:$,saveUiSettings:q,resetUiLayout:J,applyTheme:L,toggleTheme:R,saveDefaultMessage:Y,deleteTemplate:ee,updateTemplate:te,pinTemplate:ne,loadLockedFiles:Q,lockFile:re,unlockFile:ie,isFileLocked:ae,saveCustomCommand:oe,deleteCustomCommand:se,updateCustomCommand:ce,pinCustomCommand:le,saveOrchestration:ue,deleteOrchestration:de,updateOrchestration:fe,saveStartupItems:pe,saveAfterQuickPushAction:X,saveCommitSettings:U}});export{f as n,p as t};
|
|
1
|
+
import"./rolldown-runtime-CMxvf4Kt.js";import{Jn as e,i as t,mn as n,n as r,sr as i,t as a}from"./element-plus-D8SQiesr.js";import{d as o}from"./vendor-B9orL8iU.js";import{a as s,n as c,r as l}from"./_plugin-vue_export-helper-8ryIYVvs.js";var u={"zh-CN":r,"en-US":a};function d(e){return u[e]||r}var f=o(`locale`,()=>{let e=i(l()),t=n(()=>d(e.value));async function r(t){s(t),e.value=t;let n=p();n.locale!==t&&await n.saveGeneralSettings({locale:t})}return{currentLocale:e,elementPlusLocale:t,changeLocale:r}}),p=o(`config`,()=>{let r=i(``),a=i([]),o=i([]),l=i([]),u=i([]),d=i([]),p=i([]),m=i([]),h=i([]),g=i(!1),_=i({enabled:!1,type:`command`,refId:``}),v=i(!1),y=i(!1),b=i(``),x=i(``),S=i(``),C=i(!0),w=i(!1),T=i(!0),E=i(!1),D=i(!1),O=i(!0),k=i(`light`),A=i(`zh-CN`),j=i([]),M={layout:{leftRatio:.25,midRatio:.375,rightRatio:.375,topRatio:.5},layoutsByProject:{},fileListViewMode:`list`,fileDiffSplitPercent:35,commandConsole:{expanded:!0,useTerminal:!0,showTerminalSessions:!0,splitPercent:25},editorAutoSave:!1,mindmapDir:``},N=i(JSON.parse(JSON.stringify(M))),P=i(!1);function F(e){S.value=e||``}function I(){let e=S.value;if(e&&N.value.layoutsByProject?.[e]){N.value.layout={...N.value.layoutsByProject[e]};return}}function L(e){let t=document.documentElement;e===`dark`?t.setAttribute(`data-theme`,`dark`):e===`light`?t.removeAttribute(`data-theme`):window.matchMedia(`(prefers-color-scheme: dark)`).matches?t.setAttribute(`data-theme`,`dark`):t.removeAttribute(`data-theme`)}function R(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return k.value=e,L(e),$({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}L(k.value);let z=n(()=>({defaultCommitMessage:r.value,descriptionTemplates:a.value,scopeTemplates:o.value,messageTemplates:l.value,commandTemplates:u.value,lockedFiles:d.value,customCommands:p.value,orchestrations:m.value,startupItems:h.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:S.value})),B=n(()=>!!(b.value&&b.value.trim()));async function V(){try{let e=await fetch(`/api/config/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`}}),n=await e.json().catch(()=>({}));return e.ok&&n?.success?(t.success(c(`@D50BB:已打开系统配置文件`)),!0):(t.error(`${c(`@D50BB:打开系统配置文件失败: `)}${n?.error||``}`),!1)}catch(e){return t.error(`${c(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function H(e=!1){if(!e&&y.value&&!v.value)return console.log(c(`@D50BB:使用缓存的配置信息`)),z.value;v.value=!0;try{v.value=!0,console.log(c(`@D50BB:加载配置信息...`));let e=await fetch(`/api/config/getConfig`),n=await e.json().catch(()=>({}));if(!e.ok||n&&n.success===!1){let e=String(n?.error||c(`@D50BB:加载配置失败`)),r=String(n?.configPath||``),i=r?`\n${c(`@D50BB:配置文件`)}: ${r}`:``;return t.error(`${c(`@D50BB:加载配置失败: `)}${e}${i}`),b.value=e,x.value=r,null}if(b.value=``,x.value=``,r.value=n.defaultCommitMessage||``,a.value=n.descriptionTemplates||[],o.value=n.scopeTemplates||[],l.value=n.messageTemplates||[],u.value=n.commandTemplates||[],d.value=n.lockedFiles||[],p.value=n.customCommands||[],m.value=n.orchestrations||[],h.value=(n.startupItems||[]).map(e=>({id:String(e?.id??``),type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId??e?.commandId??``),createdAt:Number(e?.createdAt??Date.now()),enabled:typeof e?.enabled==`boolean`?e.enabled:!0})).filter(e=>e.id&&e.refId),g.value=n.startupAutoRun||!1,_.value={enabled:!!n?.afterQuickPushAction?.enabled,type:n?.afterQuickPushAction?.type===`workflow`?`workflow`:`command`,refId:String(n?.afterQuickPushAction?.refId||``).trim()},n.isStandardCommit!==void 0&&(T.value=!!n.isStandardCommit),n.skipHooks!==void 0&&(E.value=!!n.skipHooks),n.autoQuickPushOnEnter!==void 0&&(D.value=!!n.autoQuickPushOnEnter),n.autoSetDefaultMessage!==void 0&&(w.value=!!n.autoSetDefaultMessage),n.autoClosePushModal!==void 0&&(C.value=!!n.autoClosePushModal),n.pullBeforePush!==void 0&&(O.value=!!n.pullBeforePush),Array.isArray(n.models)&&(j.value=n.models),n.theme&&[`light`,`dark`,`auto`].includes(n.theme)&&(k.value=n.theme,L(n.theme)),n.locale&&[`zh-CN`,`en-US`].includes(n.locale)){A.value=n.locale,s(n.locale);let e=f();e.currentLocale=n.locale}if(n.currentDirectory&&(S.value=n.currentDirectory),n.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,M.layout.leftRatio),midRatio:e(r,M.layout.midRatio),rightRatio:e(i,M.layout.rightRatio),topRatio:e(a,M.layout.topRatio)}}let o=e(`zen-gitsync-file-list-view-mode`);(o===`list`||o===`tree`)&&(t.fileListViewMode=o);let s=e(`zen-gitsync-filediff-ratio`)??e(`fileDiff.splitPercent`);if(s!=null){let e=parseFloat(s);Number.isFinite(e)&&(t.fileDiffSplitPercent=Math.min(85,Math.max(15,e)))}let c=e(`useTerminal`),l=e(`isConsoleExpanded`),u=e(`showTerminalSessions`),d=e(`zen-gitsync-commandconsole-ratio`);if(c!==null||l!==null||u!==null||d!=null){let e=d==null?NaN:parseFloat(d);t.commandConsole={useTerminal:c!==`false`,expanded:l!==`false`,showTerminalSessions:u==null?!0:u===`true`,splitPercent:Number.isFinite(e)?Math.min(85,Math.max(15,e)):M.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(N.value={...N.value,...t}),Object.keys(t).length>0&&q(t,{immediate:!0}).catch(e=>{console.error(`迁移 UI 设置到文件失败:`,e)});try{[`zen-gitsync-theme`,`zen-gitsync-locale`,`zen-gitsync-editor-auto-save`,`zen-gitsync-file-list-view-mode`,`zen-gitsync-filediff-ratio`,`fileDiff.splitPercent`,`isConsoleExpanded`,`useTerminal`,`showTerminalSessions`,`zen-gitsync-commandconsole-ratio`,`zen-gitsync-layout-left-ratio`,`zen-gitsync-layout-mid-ratio`,`zen-gitsync-layout-right-ratio`,`zen-gitsync-layout-top-ratio`,`locale`].forEach(e=>localStorage.removeItem(e))}catch{}}else{let e=n.ui.layoutsByProject&&typeof n.ui.layoutsByProject==`object`&&!Array.isArray(n.ui.layoutsByProject)?n.ui.layoutsByProject:{},t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r;t[n]={leftRatio:Number.isFinite(Number(e.leftRatio))?Number(e.leftRatio):M.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):M.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):M.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):M.layout.topRatio}}N.value={layout:{...M.layout,...n.ui.layout||{}},layoutsByProject:t,fileListViewMode:n.ui.fileListViewMode===`tree`?`tree`:`list`,fileDiffSplitPercent:Number.isFinite(Number(n.ui.fileDiffSplitPercent))?Math.min(85,Math.max(15,Number(n.ui.fileDiffSplitPercent))):M.fileDiffSplitPercent,commandConsole:{expanded:typeof n.ui.commandConsole?.expanded==`boolean`?n.ui.commandConsole.expanded:M.commandConsole.expanded,useTerminal:typeof n.ui.commandConsole?.useTerminal==`boolean`?n.ui.commandConsole.useTerminal:M.commandConsole.useTerminal,showTerminalSessions:typeof n.ui.commandConsole?.showTerminalSessions==`boolean`?n.ui.commandConsole.showTerminalSessions:M.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(n.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(n.ui.commandConsole.splitPercent))):M.commandConsole.splitPercent},editorAutoSave:typeof n.ui.editorAutoSave==`boolean`?n.ui.editorAutoSave:M.editorAutoSave,mindmapDir:typeof n.ui.mindmapDir==`string`?n.ui.mindmapDir:M.mindmapDir}}return I(),P.value=!0,y.value=!0,console.log(c(`@D50BB:配置信息加载完成`)),z.value}catch(e){return console.error(`加载配置失败:`,e),t.error(`${c(`@D50BB:加载配置失败: `)}${e.message}`),b.value=e.message,null}finally{v.value=!1}}async function U(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:T.value,skipHooks:E.value,autoQuickPushOnEnter:D.value,autoSetDefaultMessage:w.value,autoClosePushModal:C.value,pullBeforePush:O.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}e([T,E,D,w,C,O],()=>{y.value&&U()});let W=null,G={};async function K(){if(W&&=(clearTimeout(W),null),Object.keys(G).length===0)return;let e=G;G={};try{await fetch(`/api/config/save-ui-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}catch(e){console.error(`保存 UI 设置失败:`,e)}}async function q(e,t={}){if(P.value){if(t.immediate){Object.assign(G,e),await K();return}Object.assign(G,e),W&&clearTimeout(W),W=setTimeout(()=>{K()},300)}}async function J(){N.value.layout={...M.layout};let e=S.value;return e&&(N.value.layoutsByProject={...N.value.layoutsByProject,[e]:{...N.value.layout}}),await q({layoutsByProject:N.value.layoutsByProject},{immediate:!0}),N.value.layout}e(()=>N.value.fileListViewMode,e=>{P.value&&q({fileListViewMode:e})}),e(()=>N.value.fileDiffSplitPercent,e=>{P.value&&q({fileDiffSplitPercent:e})}),e(()=>N.value.editorAutoSave,e=>{P.value&&q({editorAutoSave:e})}),e(()=>N.value.layout,e=>{if(!P.value)return;let t=S.value;t&&(N.value.layoutsByProject={...N.value.layoutsByProject,[t]:e},q({layoutsByProject:N.value.layoutsByProject}))},{deep:!0}),e(()=>N.value.commandConsole,e=>{P.value&&q({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{K()});async function Y(e){try{let n=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:e})})).json();return n.success?(r.value=e,t.success(c(`@D50BB:默认提交信息已保存`)),!0):(t.error(`${c(`@D50BB:保存失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存失败: `)}${e.message}`),!1}}async function X(e){try{let n=await(await fetch(`/api/config/save-after-quick-push-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({afterQuickPushAction:{enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()}})})).json();return n.success?(_.value={enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()},!0):(t.error(`保存提交后启动项失败: ${n.error}`),!1)}catch(e){return t.error(`保存提交后启动项失败: ${e.message}`),!1}}async function Z(e,n){try{let r=await(await fetch(`/api/config/save-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?a.value.includes(e)||a.value.push(e):n===`scope`?o.value.includes(e)||o.value.push(e):n===`message`?l.value.includes(e)||l.value.push(e):n===`command`&&(u.value.includes(e)||u.value.push(e)),t.success(c(`@D50BB:模板已保存`)),!0):(t.error(`${c(`@D50BB:保存模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function ee(e,n){try{let r=await(await fetch(`/api/config/delete-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?a.value=a.value.filter(t=>t!==e):n===`scope`?o.value=o.value.filter(t=>t!==e):n===`message`?l.value=l.value.filter(t=>t!==e):n===`command`&&(u.value=u.value.filter(t=>t!==e)),t.success(c(`@D50BB:模板已删除`)),!0):(t.error(`${c(`@D50BB:删除模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function te(e,n,r){try{let i=await(await fetch(`/api/config/update-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldTemplate:e,newTemplate:n,type:r})})).json();if(i.success){if(r===`description`){let t=a.value.indexOf(e);t!==-1&&(a.value[t]=n)}else if(r===`scope`){let t=o.value.indexOf(e);t!==-1&&(o.value[t]=n)}else if(r===`message`){let t=l.value.indexOf(e);t!==-1&&(l.value[t]=n)}else if(r===`command`){let t=u.value.indexOf(e);t!==-1&&(u.value[t]=n)}return t.success(c(`@D50BB:模板已更新`)),!0}else return t.error(`${c(`@D50BB:更新模板失败: `)}${i.error}`),!1}catch(e){return t.error(`${c(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function ne(e,n){try{let r=await(await fetch(`/api/config/pin-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:n})})).json();return r.success?(n===`description`?(a.value=a.value.filter(t=>t!==e),a.value.unshift(e)):n===`scope`?(o.value=o.value.filter(t=>t!==e),o.value.unshift(e)):n===`message`?(l.value=l.value.filter(t=>t!==e),l.value.unshift(e)):n===`command`&&(u.value=u.value.filter(t=>t!==e),u.value.unshift(e)),t.success(c(`@D50BB:模板已置顶`)),!0):(t.error(`${c(`@D50BB:置顶模板失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function Q(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(d.value=e.lockedFiles||[],e.lockedFiles):(t.error(`${c(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),t.error(`${c(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function re(e){try{let n=await(await fetch(`/api/lock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return n.success?(await Q(),t.success(`${c(`@D50BB:文件已锁定: `)}${e}`),!0):(t.error(`${c(`@D50BB:锁定文件失败: `)}${n.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),t.error(`${c(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function ie(e){try{let n=await(await fetch(`/api/unlock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return n.success?(await Q(),t.success(`${c(`@D50BB:文件已解锁: `)}${e}`),!0):(t.error(`${c(`@D50BB:解锁文件失败: `)}${n.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),t.error(`${c(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function ae(e){try{let t=await(await fetch(`/api/check-file-lock`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?t.isLocked:(console.error(`检查文件锁定状态失败:`,t.error),!1)}catch(e){return console.error(`检查文件锁定状态失败:`,e),!1}}async function oe(e){try{let n=await(await fetch(`/api/config/save-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e})})).json();return n.success?(await H(!0),t.success(c(`@CMD01:命令已保存`)),!0):(t.error(`${c(`@CMD01:保存命令失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function se(e){try{let n=await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),t.success(c(`@CMD01:命令已删除`)),!0):(t.error(`${c(`@CMD01:删除命令失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function ce(e,n){try{let r=await(await fetch(`/api/config/update-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,command:n})})).json();return r.success?(await H(!0),t.success(c(`@CMD01:命令已更新`)),!0):(t.error(`${c(`@CMD01:更新命令失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function le(e){try{let n=await(await fetch(`/api/config/pin-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),!0):(t.error(n.error),!1)}catch(e){return t.error(e.message),!1}}async function ue(e){try{let n=await(await fetch(`/api/config/save-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orchestration:e})})).json();return n.success?(await H(!0),t.success(c(`@ORCH:编排已保存`)),n.orchestration||null):(t.error(`${c(`@ORCH:保存编排失败: `)}${n.error}`),null)}catch(e){return t.error(`${c(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function de(e){try{let n=await(await fetch(`/api/config/delete-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return n.success?(await H(!0),t.success(c(`@ORCH:编排已删除`)),!0):(t.error(`${c(`@ORCH:删除编排失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function fe(e,n){try{let r=await(await fetch(`/api/config/update-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,orchestration:n})})).json();return r.success?(await H(!0),t.success(c(`@ORCH:编排已更新`)),!0):(t.error(`${c(`@ORCH:更新编排失败: `)}${r.error}`),!1)}catch(e){return t.error(`${c(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function pe(e,n){try{let r=await(await fetch(`/api/config/save-startup-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({startupItems:e,startupAutoRun:n===void 0?g.value:n})})).json();return r.success?(h.value=e,n!==void 0&&(g.value=n),!0):(t.error(`保存启动项失败: ${r.error}`),!1)}catch(e){return t.error(`保存启动项失败: ${e.message}`),!1}}async function me(e){try{let n=await(await fetch(`/api/config/save-models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:e})})).json();return n.success?(j.value=e,!0):(t.error(`${c(`@D50BB:保存模型失败: `)}${n.error}`),!1)}catch(e){return t.error(`${c(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function $(e){try{let n=await(await fetch(`/api/config/save-general-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();if(n.success){if(e.theme&&(k.value=e.theme,L(e.theme)),e.locale){A.value=e.locale,s(e.locale);let t=f();t.currentLocale=e.locale}return!0}else return t.error(`保存通用设置失败: ${n.error}`),!1}catch(e){return t.error(`保存通用设置失败: ${e.message}`),!1}}return{models:j,defaultCommitMessage:r,descriptionTemplates:a,scopeTemplates:o,messageTemplates:l,commandTemplates:u,lockedFiles:d,customCommands:p,orchestrations:m,startupItems:h,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:y,configLoadError:b,configFilePath:x,hasConfigLoadError:B,currentDirectory:S,config:z,autoClosePushModal:C,autoSetDefaultMessage:w,isStandardCommit:T,skipHooks:E,autoQuickPushOnEnter:D,pullBeforePush:O,theme:k,locale:A,ui:N,isUiLoaded:P,loadConfig:H,setCurrentDirectory:F,openSystemConfigFile:V,saveTemplate:Z,saveModels:me,saveGeneralSettings:$,saveUiSettings:q,resetUiLayout:J,applyTheme:L,toggleTheme:R,saveDefaultMessage:Y,deleteTemplate:ee,updateTemplate:te,pinTemplate:ne,loadLockedFiles:Q,lockFile:re,unlockFile:ie,isFileLocked:ae,saveCustomCommand:oe,deleteCustomCommand:se,updateCustomCommand:ce,pinCustomCommand:le,saveOrchestration:ue,deleteOrchestration:de,updateOrchestration:fe,saveStartupItems:pe,saveAfterQuickPushAction:X,saveCommitSettings:U}});export{f as n,p as t};
|