zen-gitsync 2.13.7 → 2.13.9
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/README.md +2 -0
- package/package.json +1 -1
- package/scripts/README_COLOR_CONVERTER.md +196 -196
- package/scripts/README_FONTSIZE_CONVERTER.md +278 -278
- package/scripts/README_SPACING_CONVERTER.md +126 -126
- package/scripts/README_STYLE_VARS.md +180 -180
- package/scripts/verify-file-search.mjs +281 -0
- package/scripts/verify-subtask-row.mjs +284 -0
- package/src/ui/public/assets/EditorView-Dvg7sMyU.css +1 -0
- package/src/ui/public/assets/EditorView-eQBqgBEd.js +0 -0
- package/src/ui/public/assets/SourceMapView-BLkrjBFW.js +3 -0
- package/src/ui/public/assets/WorkbenchView-BMtAZx07.css +1 -0
- package/src/ui/public/assets/WorkbenchView-D2eEOP1R.js +6 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-CSyhX3vt.js → _plugin-vue_export-helper-BMDM_R2D.js} +3 -3
- package/src/ui/public/assets/{css.worker-CvXBzhp8.js → css.worker-Wv5dxAWO.js} +1 -1
- package/src/ui/public/assets/{html.worker-BO6WuOEO.js → html.worker-CQP8QQsS.js} +1 -1
- package/src/ui/public/assets/index-BaFDF44N.js +66 -0
- package/src/ui/public/assets/index-BvzxdkDp.css +1 -0
- package/src/ui/public/assets/{json.worker-BkJRGcCJ.js → json.worker-DzV-CpCQ.js} +1 -1
- package/src/ui/public/assets/{ts.worker-B0J26iPs.js → ts.worker-Dth06zuC.js} +15 -15
- package/src/ui/public/assets/{vendor-C30huq-U.js → vendor-CDAfMQIV.js} +240 -247
- package/src/ui/public/assets/vendor-CIeR0bF6.css +1 -0
- package/src/ui/public/favicon.svg +75 -75
- package/src/ui/public/index.html +23 -23
- package/src/ui/public/logo.svg +74 -74
- package/src/ui/public/assets/EditorView-CbfYBgbJ.js +0 -0
- package/src/ui/public/assets/EditorView-DEd8QuPp.css +0 -1
- package/src/ui/public/assets/SourceMapView-CyGL7mqz.js +0 -3
- package/src/ui/public/assets/WorkbenchView-B6BA_Qbo.css +0 -1
- package/src/ui/public/assets/WorkbenchView-Bu9HDEKs.js +0 -6
- package/src/ui/public/assets/index-BTlhS8hO.js +0 -66
- package/src/ui/public/assets/index-p1e3YDoA.css +0 -1
- package/src/ui/public/assets/vendor-Bq2rS2vY.css +0 -1
- /package/src/ui/public/assets/{editor.worker-Cn2oRESe.js → editor.worker-Bd9IXS8d.js} +0 -0
- /package/src/ui/public/assets/{rolldown-runtime-CMxvf4Kt.js → rolldown-runtime-BM3Ffeng.js} +0 -0
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-CMxvf4Kt.js";import{$t as e,An as t,B as n,Bn as r,Ct as i,F as a,Gn as o,In as s,It as c,J as l,Ln as u,Mn as ee,N as d,Nn as f,Ot as p,P as m,Pn as h,Qn as g,Rn as _,Rt as v,St as y,V as b,Vn as x,Vt as S,Wn as C,Wt as w,Xn as T,Xt as E,Y as D,Zn as O,Zt as te,ar as ne,at as re,bt as k,cr as A,dr as j,er as M,ft as ie,gr as N,gt as ae,hr as oe,in as se,jt as ce,kn as le,lr as P,lt as ue,mr as F,nr as I,on as L,or as de,ot as fe,pr as R,q as z,qn as B,rn as pe,sr as V,st as H,tt as me,ur as he,ut as ge,vt as _e,wt as ve,xt as ye,yt as be,zn as U}from"./vendor-C30huq-U.js";import{n as W,t as xe}from"./_plugin-vue_export-helper-CSyhX3vt.js";import{t as Se}from"./index-BTlhS8hO.js";var Ce={key:0,class:`ai-split-status`},we={key:1,class:`ai-split-status is-error`},Te={class:`ai-split-prompt-actions`},Ee={key:0,class:`ai-split-prompt-editor`},De={class:`ai-split-prompt-editor__actions`},Oe={key:1,class:`ai-split-pre`},ke={class:`ai-split-subhead`},G={class:`ai-split-pre`},K={key:0,class:`ai-split-tab-count`},q={class:`ai-split-pre ai-split-pre--think`},J={key:0,class:`ai-split-tab-count`},Ae={class:`ai-split-parse-error__detail`},je={class:`ai-split-parse-error__hint`},Y={class:`ai-split-parse-error__actions`},Me={key:1,class:`ai-split-raw-toolbar`},Ne={class:`ai-split-raw-tip`},Pe={key:0,class:`ai-split-tab-count`},Fe={key:0,class:`ai-split-empty`},Ie={key:1,class:`ai-split-list`},Le={class:`ai-split-list__no`},Re={class:`ai-split-list__body`},ze={class:`ai-split-list__title`},Be={class:`ai-split-list__desc`},X={key:2,class:`ai-split-footer-hint`},Ve=xe(B({__name:`AISplitDialog`,props:{modelValue:{type:Boolean},title:{},desc:{},taskId:{},promptId:{}},emits:[`update:modelValue`,`confirm`],setup(e,{emit:t}){let i=e,a=t,s=j(`idle`),c=j(`prompt`),l=j(``),ee=j(``),d=j(``),f=j(``),g=j(``),v=j([]),y=j(``),S=j(``),w=j(``),T=null,E=0,D=u(()=>d.value.length),O=u(()=>f.value.length),ne=u(()=>s.value===`result`&&v.value.length>0),re=u(()=>s.value===`running`);function A(){oe(),a(`update:modelValue`,!1)}function oe(){T&&=(T.abort(),null)}function se(){oe(),s.value=`idle`,c.value=`prompt`,l.value=``,ee.value=``,d.value=``,f.value=``,g.value=``,v.value=[],y.value=``,S.value=``,w.value=``}async function ce(){if(!i.title.trim()){m.warning(W(`@WORKBENCH:请先填写任务标题`));return}se();let e=++E;s.value=`running`,c.value=`thinking`,T=new AbortController;let t=T;try{let n=await fetch(`/api/workbench/tasks/ai-split-subtasks`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({title:i.title,desc:i.desc,taskId:i.taskId||``,promptId:i.promptId||``}),signal:t.signal});if(e!==E)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let r=n.body.getReader(),a=new TextDecoder(`utf-8`),o=``,u=null;for(;;){let{value:t,done:n}=await r.read();if(e!==E)return;if(n)break;o+=a.decode(t,{stream:!0});let i=o.split(`
|
|
2
|
-
`);o=i.pop()??``;for(let e of i){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`:l.value=r.prompt?.system||``,ee.value=r.prompt?.user||``;break;case`thinking`:d.value+=String(r.delta||``);break;case`content`:f.value+=String(r.delta||``);break;case`done`:u=r;break;case`error`:throw Error(r.error||`AI 拆分失败`)}}}if(e!==E)return;if(!u)throw Error(W(`@WORKBENCH:AI 未返回结果`));v.value=Array.isArray(u.subtasks)?u.subtasks:[],g.value=u.raw||f.value,S.value=String(u.parseError||``),w.value=String(u.parseStage||``),d.value||=W(`@WORKBENCH:(当前模型未返回独立的思考内容,可切换到「原始结果」查看完整输出)`),s.value=`result`,c.value=v.value.length>0?`confirm`:(S.value,`raw`)}catch(n){if(console.log(`[AI Split] catch err:`,{name:n?.name,msg:n?.message,aborted:t.signal.aborted,nonce:{mine:e,cur:E}}),e!==E||n?.name===`AbortError`||t.signal.aborted)return;s.value=`error`,y.value=n?.message||String(n)}finally{e===E&&(T=null)}}function le(){ne.value&&(a(`confirm`,v.value.slice()),a(`update:modelValue`,!1))}function P(){ce()}let ue=j(!1);async function F(){if(!f.value.trim()){m.warning(W(`@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:f.value})}).then(e=>e.json());if(!e.success){m.error(e.error||W(`@WORKBENCH:解析失败`));return}v.value=Array.isArray(e.subtasks)?e.subtasks:[],S.value=String(e.parseError||``),w.value=String(e.parseStage||``),g.value=f.value,v.value.length>0?(m.success(W(`@WORKBENCH:解析成功,已识别 {n} 个子任务`,{n:v.value.length})),c.value=`confirm`):m.warning(W(`@WORKBENCH:仍未解析到子任务,请继续修改原始结果`))}catch(e){m.error(W(`@WORKBENCH:解析失败: `)+(e?.message||e))}finally{ue.value=!1}}de(()=>i.modelValue,e=>{e&&s.value===`idle`&&ce()});let L=j(!1),fe=j(``),z=j(!1);function B(){fe.value=l.value,L.value=!0}async function pe(){if(!fe.value.trim()){m.warning(W(`@WORKBENCH:指令内容不能为空`));return}z.value=!0;try{let e=await fetch(`/api/workbench/tasks/ai-subtask-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:fe.value})}).then(e=>e.json());e.success?(m.success(W(`@WORKBENCH:已保存指令`)),L.value=!1,P()):m.error(e.error||W(`@WORKBENCH:保存失败`))}catch(e){m.error(W(`@WORKBENCH:保存失败: `)+(e?.message||e))}finally{z.value=!1}}function H(){L.value=!1}return(t,i)=>{let u=ye,m=ie,g=ae,w=n,T=k,E=b,j=me;return M(),U(j,{"model-value":e.modelValue,"onUpdate:modelValue":i[4]||=e=>a(`update:modelValue`,e),title:R(W)(`@WORKBENCH:AI 拆分任务`),width:`800px`,"close-on-click-modal":!1,"close-on-press-escape":!re.value,"show-close":!re.value,onClose:A},{footer:V(()=>[s.value===`error`||s.value===`result`&&S.value&&v.value.length===0?(M(),U(m,{key:0,onClick:P},{default:V(()=>[C(N(R(W)(`@WORKBENCH:重新生成`)),1)]),_:1})):r(``,!0),o(m,{onClick:A},{default:V(()=>[C(N(R(W)(`@WORKBENCH:取消`)),1)]),_:1}),o(m,{type:`primary`,disabled:!ne.value,onClick:le},{default:V(()=>[C(N(R(W)(`@WORKBENCH:确认入库`))+` (`+N(v.value.length)+`) `,1)]),_:1},8,[`disabled`])]),default:V(()=>[re.value?(M(),x(`div`,Ce,[o(u,{class:`is-loading`},{default:V(()=>[o(R(te))]),_:1}),_(`span`,null,N(R(W)(`@WORKBENCH:AI 正在拆分…`)),1)])):s.value===`error`?(M(),x(`div`,we,[o(u,{color:`#f56c6c`},{default:V(()=>[o(R(p))]),_:1}),_(`span`,null,N(y.value),1)])):r(``,!0),o(E,{modelValue:c.value,"onUpdate:modelValue":i[3]||=e=>c.value=e,class:`ai-split-tabs`},{default:V(()=>[o(w,{label:R(W)(`@WORKBENCH:提示词`),name:`prompt`},{default:V(()=>[_(`div`,Te,[o(m,{size:`small`,disabled:re.value,onClick:B},{default:V(()=>[C(N(R(W)(`@WORKBENCH:编辑指令`)),1)]),_:1},8,[`disabled`])]),L.value?(M(),x(`div`,Ee,[o(g,{modelValue:fe.value,"onUpdate:modelValue":i[0]||=e=>fe.value=e,type:`textarea`,rows:12,placeholder:R(W)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`]),_(`div`,De,[o(m,{size:`small`,onClick:H},{default:V(()=>[C(N(R(W)(`@WORKBENCH:取消`)),1)]),_:1}),o(m,{size:`small`,type:`primary`,loading:z.value,onClick:pe},{default:V(()=>[C(N(R(W)(`@WORKBENCH:保存并重跑`)),1)]),_:1},8,[`loading`])])])):(M(),x(`pre`,Oe,N(l.value||`(等待 LLM 启动…)`),1)),_(`h4`,ke,N(R(W)(`@WORKBENCH:用户提示词(拼装后)`)),1),_(`pre`,G,N(ee.value||`(等待 LLM 启动…)`),1)]),_:1},8,[`label`]),o(w,{name:`thinking`},{label:V(()=>[_(`span`,null,[C(N(R(W)(`@WORKBENCH:思考`))+` `,1),D.value>0?(M(),x(`span`,K,`(`+N(D.value)+`)`,1)):r(``,!0)])]),default:V(()=>[_(`pre`,q,N(d.value||R(W)(`@WORKBENCH:(暂无输出)`)),1)]),_:1}),o(w,{name:`raw`},{label:V(()=>[_(`span`,null,[C(N(R(W)(`@WORKBENCH:原始结果`))+` `,1),O.value>0?(M(),x(`span`,J,`(`+N(O.value)+`)`,1)):r(``,!0)])]),default:V(()=>[S.value&&s.value===`result`?(M(),U(T,{key:0,type:`warning`,"show-icon":``,closable:!1,class:`ai-split-parse-error`},{title:V(()=>[C(N(R(W)(`@WORKBENCH:模型返回内容解析失败,无法识别为有效的子任务 JSON`)),1)]),default:V(()=>[_(`div`,Ae,N(S.value),1),_(`div`,je,N(R(W)(`@WORKBENCH:常见原因:desc 内夹杂了 ASCII 双引号、出现尾随逗号,或输出被截断。可在下方文本框中手动修改后点「重新解析」,或重新生成。`)),1),_(`div`,Y,[o(m,{size:`small`,type:`primary`,loading:ue.value,onClick:F},{default:V(()=>[C(N(R(W)(`@WORKBENCH:重新解析`)),1)]),_:1},8,[`loading`]),o(m,{size:`small`,onClick:P},{default:V(()=>[C(N(R(W)(`@WORKBENCH:重新生成`)),1)]),_:1}),o(m,{size:`small`,onClick:i[1]||=e=>c.value=`prompt`},{default:V(()=>[C(N(R(W)(`@WORKBENCH:去编辑指令`)),1)]),_:1})])]),_:1})):r(``,!0),s.value===`result`||f.value?(M(),x(`div`,Me,[_(`span`,Ne,N(R(W)(`@WORKBENCH:可直接编辑下方文本,修正后点「重新解析」即可入库`)),1),o(m,{size:`small`,type:`primary`,loading:ue.value,disabled:!f.value.trim(),onClick:F},{default:V(()=>[C(N(R(W)(`@WORKBENCH:重新解析`)),1)]),_:1},8,[`loading`,`disabled`])])):r(``,!0),o(g,{modelValue:f.value,"onUpdate:modelValue":i[2]||=e=>f.value=e,type:`textarea`,rows:14,placeholder:R(W)(`@WORKBENCH:(暂无输出)`),readonly:re.value,class:`ai-split-raw-editor`,resize:`none`},null,8,[`modelValue`,`placeholder`,`readonly`])]),_:1}),o(w,{name:`confirm`,disabled:v.value.length===0},{label:V(()=>[_(`span`,null,[C(N(R(W)(`@WORKBENCH:确认入库`))+` `,1),v.value.length>0?(M(),x(`span`,Pe,`(`+N(v.value.length)+`)`,1)):r(``,!0)])]),default:V(()=>[v.value.length===0?(M(),x(`div`,Fe,N(R(W)(`@WORKBENCH:(暂无子任务)`)),1)):(M(),x(`ul`,Ie,[(M(!0),x(h,null,I(v.value,(e,t)=>(M(),x(`li`,{key:t,class:`ai-split-list__item`},[_(`div`,Le,N(t+1),1),_(`div`,Re,[_(`div`,ze,N(e.title),1),_(`div`,Be,N(e.desc),1)])]))),128))]))]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`]),S.value&&s.value===`result`&&v.value.length===0?(M(),x(`div`,X,[o(u,{color:`#e6a23c`},{default:V(()=>[o(R(p))]),_:1}),_(`span`,null,N(R(W)(`@WORKBENCH:解析失败,未能从模型输出中提取出子任务 — 请查看「原始结果」`)),1)])):r(``,!0)]),_:1},8,[`model-value`,`title`,`close-on-press-escape`,`show-close`])}}}),[[`__scopeId`,`data-v-fa5bf380`]]),He={class:`wb-attachments__head`},Z={class:`wb-attachments__label`},Ue={class:`wb-attachments__count`},We=[`disabled`],Ge={key:0,class:`wb-attachments__paste-hint`},Ke={key:1,class:`wb-attachments__list`},qe=[`title`,`onClick`],Je=[`src`,`alt`],Ye={key:1},Xe={class:`wb-attachment__meta`},Ze=[`title`],Qe={class:`wb-attachment__sub`},$e=[`onClick`,`title`],et=B({__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,i=t,a=u(()=>n.attachments.filter(e=>n.isImage(e))),o=u(()=>a.value.map(e=>`/api/workbench/attachments/${e.id}/raw`)),c=j(0),l=j(!1);function ee(e){if(n.isImage(e)){let t=a.value.findIndex(t=>t.id===e.id);c.value=t>=0?t:0,l.value=!0}else window.open(`/api/workbench/attachments/${e.id}/raw`,`_blank`,`noopener`)}function d(){l.value=!1}return(t,n)=>(M(),x(h,null,[_(`div`,{class:F([`wb-attachments`,{"is-paste-hover":e.isPasteHover}]),onPaste:n[1]||=e=>i(`paste`,e),onDrop:n[2]||=f(e=>i(`drop`,e),[`prevent`]),onDragover:n[3]||=f(e=>i(`dragover`,e),[`prevent`]),onDragenter:n[4]||=f(e=>i(`dragenter`,e),[`prevent`]),onDragleave:n[5]||=e=>i(`dragleave`,e)},[_(`div`,He,[_(`span`,Z,[C(N(R(W)(`@WORKBENCH:附件`))+` `,1),_(`span`,Ue,N(e.attachments.length)+` / `+N(e.maxCount),1)]),_(`button`,{class:`wb-attachments__add`,disabled:e.isUploading||e.attachments.length>=e.maxCount,onClick:n[0]||=(...t)=>e.onPick&&e.onPick(...t)},N(e.isUploading?R(W)(`@WORKBENCH:上传中…`):R(W)(`@WORKBENCH:添加附件`)),9,We)]),e.isPasteHover?(M(),x(`div`,Ge,N(R(W)(`@WORKBENCH:粘贴图片以快速添加`)),1)):r(``,!0),e.attachments.length>0?(M(),x(`ul`,Ke,[(M(!0),x(h,null,I(e.attachments,t=>(M(),x(`li`,{key:t.id,class:`wb-attachment`},[_(`button`,{type:`button`,class:`wb-attachment__preview`,title:R(W)(`@WORKBENCH:点击预览`),onClick:e=>ee(t)},[_(`div`,{class:F([`wb-attachment__icon`,{"wb-attachment__icon--img":e.isImage(t)}])},[e.isImage(t)?(M(),x(`img`,{key:0,src:`/api/workbench/attachments/${t.id}/raw`,alt:t.originalName,loading:`lazy`},null,8,Je)):(M(),x(`span`,Ye,N(t.ext.toUpperCase()),1))],2),_(`div`,Xe,[_(`div`,{class:`wb-attachment__name`,title:t.originalName},N(t.originalName),9,Ze),_(`div`,Qe,N(e.humanSize(t.size))+` · `+N(t.mimeType),1)])],8,qe),_(`button`,{class:`wb-attachment__del`,onClick:f(n=>e.onRemove(t),[`stop`]),title:R(W)(`@WORKBENCH:删除`)},`×`,8,$e)]))),128))])):r(``,!0)],34),(M(),U(s,{to:`body`},[l.value&&o.value.length>0?(M(),U(R(D),{key:0,"url-list":o.value,"initial-index":c.value,"hide-on-click-modal":!0,onClose:d},null,8,[`url-list`,`initial-index`])):r(``,!0)]))],64))}}),tt=[`open`],nt={class:`wb-log-summary`},rt={class:`wb-log-summary__left`},it={key:0},at={key:1},ot={key:2},st={class:`wb-log-summary__right`},ct={class:`wb-log-summary__meta`},Q=[`title`],lt={key:0,class:`wb-log-section`},ut={class:`wb-log-section__summary`},dt={class:`wb-log-section__tag wb-log-section__tag--user`},ft={class:`wb-log-section__count`},pt=[`title`],mt={class:`wb-log-section__pre wb-log-section__pre--user`},ht={key:1,class:`wb-log-section`},gt={class:`wb-log-section__summary`},_t={class:`wb-log-section__tag wb-log-section__tag--think`},vt={class:`wb-log-section__count`},yt=[`title`],bt={class:`wb-log-section__pre wb-log-section__pre--think`},xt={class:`wb-log-pre__head`},St={class:`wb-log-pre__label`},Ct={class:`wb-log-pre__meta`},$=[`title`],wt=64*1024,Tt=xe(B({__name:`JobLogDetails`,props:{job:{}},setup(e){let t=e,n=u(()=>t.job.status===`running`||t.job.status===`pending`);function i(){let e=t.job.output||``;return e?e.length<=wt?e:`${W(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function a(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 o(e){let n=t.job[e]||``;if(!n){m.warning(W(`@WORKBENCH:暂无内容可复制`));return}await a(n)?m.success(W(`@WORKBENCH:已复制到剪贴板`)):m.error(W(`@WORKBENCH:复制失败`))}async function s(){let e=[];if(t.job.prompt&&e.push(`## ${W(`@WORKBENCH:用户提示词`)}\n\n${t.job.prompt}`),t.job.thinking&&e.push(`## ${W(`@WORKBENCH:Claude 思考`)}\n\n${t.job.thinking}`),t.job.output&&e.push(`## ${W(`@WORKBENCH:模型返回`)}\n\n${t.job.output}`),!e.length){m.warning(W(`@WORKBENCH:暂无内容可复制`));return}await a(e.join(`
|
|
3
|
-
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
`))?m.success(W(`@WORKBENCH:已复制到剪贴板`)):m.error(W(`@WORKBENCH:复制失败`))}let c=j(null);return de(()=>(t.job.output||``).length,async()=>{n.value&&(await T(),c.value&&(c.value.scrollTop=c.value.scrollHeight))}),(t,a)=>(M(),x(`details`,{class:`wb-log-details`,open:n.value},[_(`summary`,nt,[_(`span`,rt,[e.job.status===`running`?(M(),x(`span`,it,`● `+N(R(W)(`@WORKBENCH:正在执行…`)),1)):e.job.status===`pending`?(M(),x(`span`,at,N(R(W)(`@WORKBENCH:排队中…`)),1)):(M(),x(`span`,ot,N(R(W)(`@WORKBENCH:查看执行日志`)),1))]),_(`span`,st,[_(`span`,ct,N((e.job.output||``).length)+` `+N(R(W)(`@WORKBENCH:字符`)),1),_(`button`,{type:`button`,class:`wb-log-copy`,title:R(W)(`@WORKBENCH:复制全部(含提示词与输出)`),onClick:f(s,[`stop`])},` ⧉ `+N(R(W)(`@WORKBENCH:复制全部`)),9,Q)])]),e.job.prompt?(M(),x(`details`,lt,[_(`summary`,ut,[_(`span`,dt,N(R(W)(`@WORKBENCH:用户提示词`)),1),_(`span`,ft,N((e.job.prompt||``).length)+` `+N(R(W)(`@WORKBENCH:字符`)),1),_(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:R(W)(`@WORKBENCH:复制用户提示词`),onClick:a[0]||=f(e=>o(`prompt`),[`stop`])},` ⧉ `+N(R(W)(`@WORKBENCH:复制`)),9,pt)]),_(`pre`,mt,N(e.job.prompt),1)])):r(``,!0),e.job.thinking?(M(),x(`details`,ht,[_(`summary`,gt,[_(`span`,_t,N(R(W)(`@WORKBENCH:Claude 思考`)),1),_(`span`,vt,N((e.job.thinking||``).length)+` `+N(R(W)(`@WORKBENCH:字符`)),1),_(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:R(W)(`@WORKBENCH:复制思考内容`),onClick:a[1]||=f(e=>o(`thinking`),[`stop`])},` ⧉ `+N(R(W)(`@WORKBENCH:复制`)),9,yt)]),_(`pre`,bt,N(e.job.thinking),1)])):r(``,!0),_(`div`,xt,[_(`span`,St,N(R(W)(`@WORKBENCH:模型返回`)),1),_(`span`,Ct,N((e.job.output||``).length)+` `+N(R(W)(`@WORKBENCH:字符`)),1),_(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:R(W)(`@WORKBENCH:复制模型返回`),onClick:a[2]||=f(e=>o(`output`),[`stop`])},` ⧉ `+N(R(W)(`@WORKBENCH:复制`)),9,$)]),_(`pre`,{ref_key:`preRef`,ref:c,class:`wb-log-pre`},N(i()||R(W)(`@WORKBENCH:(暂无输出)`)),513)],8,tt))}}),[[`__scopeId`,`data-v-ae32f993`]]);function Et(e){switch(e){case`todo`:return W(`@WORKBENCH:待执行`);case`running`:return W(`@WORKBENCH:执行中`);case`done`:return W(`@WORKBENCH:已完成`);case`error`:return W(`@WORKBENCH:出错`);case`cancelled`:return W(`@WORKBENCH:已取消`);case`pending`:return W(`@WORKBENCH:排队中`);default:return e}}function Dt(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 Ot={class:`exec-logs`},kt={class:`exec-logs__head`},At={class:`exec-logs__title-block`},jt={class:`exec-logs__title`},Mt={class:`exec-logs__stats`},Nt={class:`exec-logs__head-actions`},Pt={class:`exec-logs__config`},Ft={class:`exec-logs__config-label`},It={class:`exec-logs__config-field`},Lt={class:`exec-logs__config-name`},Rt={class:`exec-logs__config-field`},zt={class:`exec-logs__config-name`},Bt={class:`exec-logs__filter`},Vt={key:0,class:`exec-logs__batch-meta`},Ht={key:0,class:`exec-logs__batch`},Ut={class:`exec-logs__list`},Wt={key:0,class:`exec-logs__empty`},Gt={class:`exec-logs__empty-art`,"aria-hidden":`true`},Kt={class:`exec-logs__empty-title`},qt={class:`exec-logs__empty-hint`},Jt={class:`exec-card__head`},Yt=[`title`],Xt={class:`exec-card__meta`},Zt={key:0,class:`exec-card__task`},Qt={key:1,class:`exec-card__time`},$t={key:2,class:`exec-card__exit`},en=[`title`,`onClick`],tn={key:0,class:`exec-card__error`},nn={key:1,class:`exec-logs__pager`},rn=50,an=xe(B({__name:`ExecutionLogManager`,setup(e){function t(e){return e instanceof Error?e.message:String(e)}let n=j([]),i=j(0),s=he({count:0,sizeMB:0,byStatus:{}}),c=j(!1),f=j(new Set),p=he({q:``,status:``,page:1}),y=j({maxCount:500,maxSizeMB:256}),b=he({maxCount:500,maxSizeMB:256}),S=j(!1),w=[{value:`pending`,label:W(`@WORKBENCH:排队中`)},{value:`running`,label:W(`@WORKBENCH:执行中`)},{value:`done`,label:W(`@WORKBENCH:已完成`)},{value:`error`,label:W(`@WORKBENCH:出错`)},{value:`cancelled`,label:W(`@WORKBENCH:已取消`)}],T=u(()=>n.value.length>0&&n.value.every(e=>f.value.has(e.id))),E=u(()=>n.value.some(e=>f.value.has(e.id))&&!T.value);async function D(){c.value=!0;try{let e=new URLSearchParams;p.q&&e.set(`q`,p.q),p.status&&e.set(`status`,p.status),e.set(`limit`,String(rn)),e.set(`offset`,String((p.page-1)*rn));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);n.value=t.jobs,i.value=t.total,s.count=t.stats.count,s.sizeMB=t.stats.sizeMB,s.byStatus=t.stats.byStatus;let r=new Set(n.value.map(e=>e.id));for(let e of Array.from(f.value))r.has(e)||f.value.delete(e)}catch(e){m.error(W(`@WORKBENCH:加载失败`)+`: `+t(e))}finally{c.value=!1}}async function O(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(y.value=e.config,b.maxCount=e.config.maxCount,b.maxSizeMB=e.config.maxSizeMB)}catch{}}async function te(){S.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:b.maxCount,maxSizeMB:b.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);y.value=e.config,m.success(W(`@WORKBENCH:已保存策略`)),await D()}catch(e){m.error(W(`@WORKBENCH:保存失败`)+`: `+t(e))}finally{S.value=!1}}function ne(){p.page=1,D()}function re(){p.q=``,p.status=``,p.page=1,D()}function k(e,t){t?f.value.add(e):f.value.delete(e),f.value=new Set(f.value)}function se(e){if(e)for(let e of n.value)f.value.add(e.id);else for(let e of n.value)f.value.delete(e.id);f.value=new Set(f.value)}async function ce(e){try{await d.confirm(W(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),W(`@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`);f.value.delete(e),f.value=new Set(f.value),await D()}catch(e){m.error(W(`@WORKBENCH:保存失败`)+`: `+t(e))}}async function le(){let e=Array.from(f.value);if(e.length!==0){try{await d.confirm(W(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),W(`@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`);m.success(W(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),f.value=new Set,await D()}catch(e){m.error(W(`@WORKBENCH:保存失败`)+`: `+t(e))}}}async function P(){let e=s.count;if(e!==0){try{await d.confirm(W(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),W(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:W(`@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`);m.success(W(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),f.value=new Set,await D()}catch(e){m.error(W(`@WORKBENCH:保存失败`)+`: `+t(e))}}}function de(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 g(()=>{D(),O()}),(e,t)=>{let u=ie,d=l,m=ae,g=ue,y=ge,O=H,j=ye,fe=z,B=a;return M(),x(`div`,Ot,[_(`header`,kt,[_(`div`,At,[_(`h2`,jt,N(R(W)(`@WORKBENCH:执行日志`)),1),_(`span`,Mt,N(R(W)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:s.count,size:s.sizeMB})),1)]),_(`div`,Nt,[o(u,{icon:R(L),size:`small`,loading:c.value,onClick:D},{default:V(()=>[C(N(R(W)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),o(u,{type:`danger`,plain:``,size:`small`,disabled:s.count===0,onClick:P},{default:V(()=>[C(N(R(W)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),_(`div`,Pt,[_(`span`,Ft,N(R(W)(`@WORKBENCH:保存策略`)),1),_(`span`,It,[_(`span`,Lt,N(R(W)(`@WORKBENCH:最大条数`)),1),o(d,{modelValue:b.maxCount,"onUpdate:modelValue":t[0]||=e=>b.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),_(`span`,Rt,[_(`span`,zt,N(R(W)(`@WORKBENCH:最大体积 (MB)`)),1),o(d,{modelValue:b.maxSizeMB,"onUpdate:modelValue":t[1]||=e=>b.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),o(u,{type:`primary`,size:`small`,loading:S.value,onClick:te},{default:V(()=>[C(N(R(W)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),_(`div`,Bt,[o(m,{modelValue:p.q,"onUpdate:modelValue":t[2]||=e=>p.q=e,placeholder:R(W)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:ee(ne,[`enter`]),onClear:ne},null,8,[`modelValue`,`placeholder`]),o(y,{modelValue:p.status,"onUpdate:modelValue":t[3]||=e=>p.status=e,placeholder:R(W)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:ne},{default:V(()=>[(M(),x(h,null,I(w,e=>o(g,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),o(u,{size:`small`,onClick:re},{default:V(()=>[C(N(R(W)(`@WORKBENCH:重置`)),1)]),_:1}),t[5]||=_(`span`,{class:`exec-logs__filter-spacer`},null,-1),f.value.size>0?(M(),x(`span`,Vt,N(R(W)(`@WORKBENCH:已选择 {count} 项`,{count:f.value.size})),1)):r(``,!0)]),f.value.size>0?(M(),x(`div`,Ht,[o(O,{"model-value":T.value,indeterminate:E.value,onChange:se},{default:V(()=>[C(N(T.value?R(W)(`@WORKBENCH:取消全选`):R(W)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),o(u,{type:`danger`,size:`small`,onClick:le},{default:V(()=>[C(N(R(W)(`@WORKBENCH:批量删除`)),1)]),_:1})])):r(``,!0),A((M(),x(`div`,Ut,[!c.value&&n.value.length===0?(M(),x(`div`,Wt,[_(`div`,Gt,[o(j,null,{default:V(()=>[o(R(v))]),_:1})]),_(`div`,Kt,N(R(W)(`@WORKBENCH:暂无执行日志`)),1),_(`div`,qt,N(R(W)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):r(``,!0),(M(!0),x(h,null,I(n.value,e=>(M(),x(`article`,{key:e.id,class:F([`exec-card`,{"is-selected":f.value.has(e.id)}])},[_(`header`,Jt,[o(O,{"model-value":f.value.has(e.id),onChange:t=>k(e.id,t)},null,8,[`model-value`,`onChange`]),_(`span`,{class:`exec-card__status`,style:oe({color:R(Dt)(e.status),borderColor:R(Dt)(e.status)})},N(R(Et)(e.status)),5),_(`span`,{class:`exec-card__title`,title:e.title||R(W)(`@WORKBENCH:无标题`)},N(e.title||R(W)(`@WORKBENCH:无标题`)),9,Yt),t[6]||=_(`span`,{class:`exec-card__spacer`},null,-1),_(`span`,Xt,[e.taskTitle?(M(),x(`span`,Zt,`📁 `+N(e.taskTitle),1)):r(``,!0),e.startedAt?(M(),x(`span`,Qt,`⏱ `+N(de(e.startedAt,e.endedAt)),1)):r(``,!0),e.exitCode===null?r(``,!0):(M(),x(`span`,$t,`exit `+N(e.exitCode),1))]),_(`button`,{type:`button`,class:`exec-card__del`,title:R(W)(`@WORKBENCH:删除`),onClick:t=>ce(e.id)},`×`,8,en)]),e.error?(M(),x(`p`,tn,`⚠ `+N(e.error),1)):r(``,!0),o(Tt,{job:e},null,8,[`job`])],2))),128))])),[[B,c.value]]),i.value>rn?(M(),x(`footer`,nn,[o(fe,{"current-page":p.page,"onUpdate:currentPage":t[4]||=e=>p.page=e,"page-size":rn,total:i.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:D},null,8,[`current-page`,`total`])])):r(``,!0)])}}}),[[`__scopeId`,`data-v-13ab606e`]]),on={class:`workbench`},sn={class:`wb-tabs`},cn={key:0,class:`workbench__editor-row`},ln={class:`wb-sidebar`},un={class:`wb-section`},dn={class:`wb-section__head`},fn={class:`wb-section__tag`},pn={class:`wb-section__title`},mn={class:`wb-section__count`},hn={key:0,class:`wb-current-project`},gn={class:`wb-current-project__label`},_n=[`title`],vn={class:`wb-task-list`},yn=[`aria-expanded`,`title`,`onClick`,`onKeydown`],bn=[`title`],xn={class:`wb-task-group__count`},Sn=[`data-icon`,`onClick`],Cn=[`data-icon`],wn={class:`wb-task-item__body`},Tn=[`title`],En={class:`wb-task-item__meta`},Dn=[`title`],On={class:`wb-task-item__num`},kn=[`title`],An={class:`wb-task-item__num`},jn=[`title`],Mn=[`title`],Nn=[`title`],Pn=[`onClick`,`title`,`aria-label`],Fn={key:0,class:`wb-empty`},In={class:`wb-empty__icon`},Ln={class:`wb-empty__text`},Rn={class:`wb-empty__hint`},zn={class:`wb-section`},Bn={class:`wb-section__head`},Vn={class:`wb-section__tag wb-section__tag--accent`},Hn={class:`wb-section__title`},Un={class:`wb-section__count`},Wn=[`title`,`aria-label`],Gn={class:`wb-prompt-list`},Kn={class:`wb-prompt-item__icon`},qn=[`onClick`,`title`],Jn=[`title`],Yn=[`onClick`,`title`,`aria-label`],Xn={key:0,class:`wb-empty wb-empty--compact`},Zn={class:`wb-split`},Qn={key:0,class:`wb-placeholder`},$n={class:`wb-split__header`},er=[`placeholder`],tr=[`title`],nr={key:0,class:`wb-meta-save__dot`},rr={key:1,class:`wb-meta-save__check`},ir={key:2,class:`wb-meta-save__bang`},ar={key:3,class:`wb-meta-save__dot`},or={value:null},sr=[`value`],cr=[`placeholder`],lr={class:`wb-split__sub-header`},ur={class:`wb-split__sub-actions`},dr={key:0,class:`wb-dirty-badge`},fr={class:`wb-sub-list`},pr=[`onClick`],mr={key:0,class:`wb-sub-item__row wb-sub-item__row--compact`},hr=[`title`],gr=[`title`],_r=[`title`,`aria-label`,`onClick`],vr=[`title`,`aria-label`,`onClick`],yr=[`title`,`aria-label`,`onClick`],br=[`title`,`aria-label`,`onClick`],xr={class:`wb-sub-item__row`},Sr=[`onUpdate:modelValue`,`placeholder`,`onPaste`],Cr=[`title`],wr=[`title`],Tr=[`title`,`aria-label`,`onClick`],Er=[`title`,`onClick`],Dr=[`title`,`aria-label`,`onClick`],Or=[`title`,`aria-label`,`onClick`],kr=[`onClick`],Ar=[`onUpdate:modelValue`,`placeholder`,`onPaste`],jr={key:0,class:`wb-empty wb-empty--rich`},Mr={class:`wb-empty__art`,"aria-hidden":`true`},Nr={class:`wb-empty__title`},Pr={class:`wb-empty__hint`},Fr={class:`wb-empty__cta`},Ir=[`disabled`],Lr={class:`wb-simple__header`},Rr={class:`wb-simple__hint`},zr={class:`wb-form-item`},Br={class:`wb-form-item__label`},Vr=[`placeholder`],Hr={style:{display:`flex`,gap:`8px`,"align-items":`center`}},Ur=`__no_project__`,Wr=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,Gr=5*1024*1024,Kr=xe(B({__name:`WorkbenchView`,setup(n){let a=j([]),s=j([]),l=j([]),p=j(`editor`),b=j(null),T=u(()=>s.value.find(e=>e.id===b.value)||null),D=u(()=>T.value?.type===`simple`),te=j(new Map),k=j({title:``,desc:``,promptId:null,simpleOverride:``});function L(){let e=new Map;if(T.value)for(let t of T.value.subtasks)e.set(t.id,{id:t.id,title:t.title,desc:t.desc,promptOverride:t.promptOverride});te.value=e,T.value?k.value={title:T.value.title,desc:T.value.desc,promptId:T.value.promptId,simpleOverride:T.value.simpleOverride||``}:k.value={title:``,desc:``,promptId:null,simpleOverride:``}}let z=u(()=>{let e=new Set;if(!T.value)return e;for(let t of T.value.subtasks){let n=te.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}),B=u(()=>z.value.size>0),H=j(`idle`),xe=j(0),Ce=null,we=null,Te=u(()=>{if(!T.value)return!1;let e=T.value;return k.value.title!==e.title||k.value.desc!==e.desc||k.value.promptId!==e.promptId||k.value.simpleOverride!==(e.simpleOverride||``)});function Ee(){Ce!==null&&(clearTimeout(Ce),Ce=null),we!==null&&(clearTimeout(we),we=null)}async function De(){return T.value?Te.value?(H.value=`saving`,await Q(!1)?(xe.value=Date.now(),H.value=`saved`,setTimeout(()=>{H.value===`saved`&&Date.now()-xe.value>=4e3&&(H.value=`idle`)},4e3),!0):(H.value=`error`,!1)):!0:!1}de(()=>T.value?{id:T.value.id,title:T.value.title,desc:T.value.desc,promptId:T.value.promptId,simpleOverride:T.value.simpleOverride||``}:null,(e,t)=>{!e||!t||e.id!==t.id||(Ce!==null&&clearTimeout(Ce),Ce=window.setTimeout(()=>{De()},1500))},{deep:!0}),de(b,async(e,t)=>{Ee()});function Oe(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function ke(){T.value&&Te.value&&Oe(T.value)}let G=he({visible:!1,editing:null,name:``,content:``,aiLoading:!1}),K=he({visible:!1,text:``,loading:!1,saving:!1}),q=he({visible:!1,editing:null,title:``,desc:``,promptId:null,type:`complex`,simpleOverride:``}),J=null,Ae=Se();function je(){Ae.setRunning(l.value.filter(e=>e.status===`running`).length)}function Y(e){return l.value.find(t=>t.subId===e)||null}function Me(e,t){if(e===`hello`){l.value=t.jobs||[],je();return}if(e===`job:update`){let e=t,n=l.value.findIndex(t=>t.id===e.id);n>=0?l.value[n]=e:l.value.push(e),je();return}if(e===`job:thinking-delta`||e===`job:output-delta`){let n=e===`job:thinking-delta`?`thinking`:`output`,r=t?.delta||``;if(!r)return;let i=l.value.findIndex(e=>e.id===t.id);if(i<0)return;let a=l.value[i][n]||``;l.value[i][n]=a+r;return}if(e===`sub:update`){let e=s.value.find(e=>e.id===t.taskId);if(e){let n=e.subtasks.findIndex(e=>e.id===t.sub.id);n>=0&&(e.subtasks[n]=t.sub)}}if(e===`task:update`){let e=s.value.findIndex(e=>e.id===t.id);e>=0&&(s.value[e]=t)}e===`task:error`&&m.error(t.error||W(`@WORKBENCH:执行出错`))}let Ne=[{key:`image`,patterns:[/图\s*片/,/上\s*传/,/upload/i,/image/i,/screenshot/i,/截图/,/附件/,/attachment/i]},{key:`icon`,patterns:[/图\s*标/,/icon/i,/svg/i]},{key:`test`,patterns:[/测\s*试/,/test/i,/spec/i,/\bqa\b/i]},{key:`ui`,patterns:[/ui\s*优\s*化/,/样\s*式/,/style/i,/css/i,/界面/,/视\s*觉/,/design/i]}];function Pe(e){let t=(e||``).trim();if(!t)return`doc`;for(let e of Ne)if(e.patterns.some(e=>e.test(t)))return e.key;return`doc`}let Fe={icon:P(v),image:P(pe),test:P(S),ui:P(e),doc:P(v),idea:P(e)};function Ie(e){return Fe[Pe(e.title)]}function Le(e){return Array.isArray(e.attachments)?e.attachments.length:0}function Re(e){return Array.isArray(e.subtasks)?e.subtasks.length:0}async function ze(){a.value=(await fetch(`/api/workbench/prompts`).then(e=>e.json()).catch(()=>({prompts:[]}))).prompts||[]}async function Be(){s.value=(await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}))).tasks||[],!b.value&&s.value.length>0&&(b.value=s.value[0].id),L()}let X=j({path:``,name:``});async function He(){let e=await fetch(`/api/workbench/current-project`).then(e=>e.json()).catch(()=>({}));e&&typeof e.projectPath==`string`&&(X.value={path:e.projectPath,name:e.projectName||``})}let Z=j(new Set);function Ue(e){return Z.value.has(e)}function We(e){Z.value.has(e)?Z.value.delete(e):Z.value.add(e),Z.value=new Set(Z.value)}let Ge=u(()=>{let e=s.value,t=new Map;for(let n of e){let e=(n.projectPath||``).trim()||Ur;t.has(e)||t.set(e,[]),t.get(e).push(n)}let n=X.value.path,r=Array.from(t.keys()).sort((e,t)=>e===n?-1:t===n||e===Ur?1:t===Ur?-1:e.localeCompare(t));return{groups:r.map(e=>({path:e,label:e===Ur?W(`@WORKBENCH:未关联项目`):e,tasks:t.get(e)})),hasMultiple:r.length>1}});function Ke(e){if(!e||e===Ur)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}de(()=>Ge.value.groups.map(e=>e.path),e=>{let t=X.value.path,n=new Set(Z.value),r=!1;for(let i of e)i!==t&&!n.has(i)&&(n.add(i),r=!0);r&&(Z.value=n)},{immediate:!0});async function qe(){l.value=(await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}))).jobs||[],je()}function Je(){J&&=(J.close(),null),J=new EventSource(`/api/workbench/events`),J.onmessage=e=>{try{let t=JSON.parse(e.data);Me(t.event,t.payload)}catch{}},J.onerror=()=>{J&&=(J.close(),null),setTimeout(Je,3e3)}}function Ye(){G.editing=null,G.name=``,G.content=``,G.aiLoading=!1,G.visible=!0}function Xe(e){G.editing=e,G.name=e.name,G.content=e.content,G.aiLoading=!1,G.visible=!0}async function Ze(){if(!G.aiLoading){G.aiLoading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-generate`,{method:`POST`}).then(e=>e.json());e.success?(G.name=e.name||G.name,G.content=e.result||``,m.success(W(`@WORKBENCH:已生成,可继续编辑`))):m.error(e.error||W(`@WORKBENCH:生成失败`))}catch(e){m.error(W(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{G.aiLoading=!1}}}async function Qe(){K.visible=!0,K.loading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`).then(e=>e.json());e.success?K.text=e.instruction||``:m.error(e.error||W(`@WORKBENCH:读取指令失败`))}catch(e){m.error(W(`@WORKBENCH:读取指令失败`)+`: `+(e&&e.message||e))}finally{K.loading=!1}}async function $e(){if(!K.text.trim()){m.warning(W(`@WORKBENCH:指令内容不能为空`));return}K.saving=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:K.text})}).then(e=>e.json());e.success?(m.success(W(`@WORKBENCH:已保存指令`)),K.visible=!1):m.error(e.error||W(`@WORKBENCH:保存失败`))}catch(e){m.error(W(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{K.saving=!1}}async function tt(){if(!G.name.trim()||!G.content.trim()){m.warning(W(`@WORKBENCH:名称和内容不能为空`));return}let e={id:G.editing?.id,name:G.name.trim(),content:G.content},t=await fetch(`/api/workbench/prompts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(m.success(W(`@WORKBENCH:已保存`)),G.visible=!1,ze()):m.error(t.error||W(`@WORKBENCH:保存失败`))}async function nt(e){await d.confirm(W(`@WORKBENCH:删除提示词「{name}」?`,{name:e.name}),W(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/prompts/${e.id}`,{method:`DELETE`}),ze();for(let t of s.value)t.promptId===e.id&&(t.promptId=null,await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}));Be()}function rt(){q.editing=null,q.title=``,q.desc=``,q.promptId=null,q.type=`complex`,q.simpleOverride=``,q.visible=!0}async function it(){if(!q.title.trim()){m.warning(W(`@WORKBENCH:标题必填`));return}let e={id:q.editing?.id,title:q.title.trim(),desc:q.desc,promptId:q.promptId,type:q.type,simpleOverride:q.type===`simple`?q.simpleOverride:``,subtasks:q.editing?.subtasks||[]};!q.editing?.id&&X.value.path&&(e.projectPath=X.value.path);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){m.success(W(`@WORKBENCH:已保存`));let e=!q.editing?.id;q.visible=!1,await Be(),e&&t.task?.id?(b.value=t.task.id,L()):b.value||=t.task.id}else m.error(t.error||W(`@WORKBENCH:保存失败`))}async function at(e){await d.confirm(W(`@WORKBENCH:删除任务「{title}」及其所有子任务?`,{title:e.title}),W(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),b.value===e.id&&(b.value=null),Be()}async function ot(e){b.value!==e.id&&(Ee(),T.value&&Te.value&&await De(),b.value=e.id,L())}function st(){if(!T.value)return;let e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:W(`@WORKBENCH:新子任务`),desc:``,status:`todo`,promptOverride:``};T.value.subtasks.push(e),Q(!1)}function ct(e){T.value&&(T.value.subtasks=T.value.subtasks.filter(t=>t.id!==e.id),Q(!1))}async function Q(e){if(!T.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(T.value)}).then(e=>e.json());return t.success?(e&&m.success(W(`@WORKBENCH:已保存拆分`)),await Be(),!0):(m.error(t.error||W(`@WORKBENCH:保存失败`)),!1)}async function lt(){await Q(!0)}let ut=j(!1);function dt(){if(T.value){if(!(T.value.title||``).trim()){m.warning(W(`@WORKBENCH:请先填写任务标题`));return}ut.value=!0}}function ft(e){if(T.value){for(let t of e)T.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:[]});m.success(W(`@WORKBENCH:已生成 {n} 个子任务,请审阅后保存`,{n:e.length}))}}async function pt(e){if(e.type===`simple`)return mt(e);if(!e.subtasks||e.subtasks.length===0){m.warning(W(`@WORKBENCH:请先拆分任务`));return}if(T.value&&T.value.id===e.id){let t=s.value.find(t=>t.id===e.id);if((!t||t.title!==T.value.title||t.desc!==T.value.desc||JSON.stringify(t.subtasks)!==JSON.stringify(T.value.subtasks)||t.promptId!==T.value.promptId)&&!await Q(!1))return}let t=await fetch(`/api/workbench/tasks/${e.id}/run`,{method:`POST`}).then(e=>e.json());t.success?m.success(t.message||W(`@WORKBENCH:已加入执行队列`)):m.error(t.error||W(`@WORKBENCH:执行失败`))}async function mt(e){if(T.value&&T.value.id===e.id){let t=s.value.find(t=>t.id===e.id);if((!t||t.title!==T.value.title||t.desc!==T.value.desc||t.promptId!==T.value.promptId||(t.simpleOverride||``)!==(T.value.simpleOverride||``))&&!await Q(!1))return}let t=await fetch(`/api/workbench/tasks/${e.id}/run-simple`,{method:`POST`}).then(e=>e.json());t.success?m.success(t.message||W(`@WORKBENCH:已加入执行队列`)):m.error(t.error||W(`@WORKBENCH:执行失败`))}async function ht(e){if(!T.value)return;let t=T.value,n=Y(e.id);if(n&&(n.status===`running`||n.status===`pending`)){m.warning(W(`@WORKBENCH:该子任务正在执行中`));return}let r=s.value.find(e=>e.id===t.id);if((!r||r.title!==t.title||r.desc!==t.desc||JSON.stringify(r.subtasks)!==JSON.stringify(t.subtasks)||r.promptId!==t.promptId)&&!await Q(!1))return;let i=await fetch(`/api/workbench/subtasks/${e.id}/run`,{method:`POST`}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));i.success?m.success(i.message||W(`@WORKBENCH:已开始执行子任务`)):m.error(i.error||W(`@WORKBENCH:执行失败`))}function gt(e){if(e.status===`done`)return!1;let t=Y(e.id);return!(t&&(t.status===`running`||t.status===`pending`))}let _t=j(new Set);function vt(e){return e.status===`done`?!_t.value.has(e.id):!1}function yt(e){_t.value.has(e.id)?_t.value.delete(e.id):_t.value.add(e.id),_t.value=new Set(_t.value)}async function bt(e){if(!T.value)return;let t=te.value.get(e.id);t&&te.value.set(e.id,{...t,status:`todo`}),e.status=`todo`,await Q(!1)}async function xt(e){try{await d.confirm(W(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),W(`@WORKBENCH:停止执行`),{confirmButtonText:W(`@WORKBENCH:停止`),cancelButtonText:W(`@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?m.success(W(`@WORKBENCH:已发送停止信号`)):m.error(t.error||W(`@WORKBENCH:停止失败`))}g(async()=>{await Promise.all([ze(),Be(),He(),qe()]),Je(),window.addEventListener(`beforeunload`,ke)}),O(()=>{J&&=(J.close(),null),window.removeEventListener(`beforeunload`,ke),T.value&&Te.value&&Oe(T.value)});let St=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`]),Ct=j({}),$=j(null);function wt(e){return!!Ct.value[e]}function Ot(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function kt(e){return e.kind===`task`?`task-${e.task?.id??``}`:`sub-${e.sub.id}`}function At(e){let t=e.kind===`task`?e.task?.attachments:e.sub.attachments;return Array.isArray(t)?t:[]}function jt(e,t){e.kind===`task`?e.task&&(e.task.attachments=t):e.sub.attachments=t}function Mt(e){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments`:`/api/workbench/subtasks/${e.sub.id}/attachments`}function Nt(e,t){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments/${t}`:`/api/workbench/subtasks/${e.sub.id}/attachments/${t}`}function Pt(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 r=(n.type.split(`/`)[1]||`png`).replace(`jpeg`,`jpg`);It(t,Ot(n,`paste-${new Date().toISOString().replace(/[:.]/g,`-`)}.${r}`))}return}let r=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&!e.type.startsWith(`image/`));if(r.length>0){e.preventDefault();for(let e of r){let n=e.getAsFile();n&&It(t,Ot(n,n.name||`pasted-file`))}}}function Ft(e,t){$.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>It(t,e))}async function It(e,t){if(t.size>Gr){m.error(`「${t.name}」${W(`@WORKBENCH:超过 5MB 限制`)}`);return}if(!St.has(t.type)&&!t.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){m.error(`${W(`@WORKBENCH:不支持的文件类型`)}(${t.name})`);return}let n=At(e);if(n.length>=9){m.error(W(`@WORKBENCH:单个任务最多 9 个附件`));return}if(n.find(e=>e.originalName===t.name&&e.size===t.size)){m.info(`${t.name} ${W(`@WORKBENCH:已存在,已复用`)}`);return}let r=kt(e);Ct.value[r]=!0;try{let n=await fetch(Mt(e),{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":t.name,"X-Mime-Type":t.type||`application/octet-stream`},body:t}).then(e=>e.json());if(n.success){let r=At(e);r.push(n.attachment),jt(e,r),m.success(`${W(`@WORKBENCH:已添加:`)}${t.name}`)}else m.error(n.error||W(`@WORKBENCH:上传失败`))}catch(e){m.error(W(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{Ct.value[r]=!1}}async function Lt(e,t){try{await d.confirm(W(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),W(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(Nt(e,t.id),{method:`DELETE`}).then(e=>e.json());n.success?(jt(e,At(e).filter(e=>e.id!==t.id)),m.success(W(`@WORKBENCH:已删除`))):m.error(n.error||W(`@WORKBENCH:删除失败`))}function Rt(e){let t=document.createElement(`input`);t.type=`file`,t.accept=Wr,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>It(e,t))},t.click()}let zt=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function Bt(e){return zt.has(String(e.ext||``).toLowerCase())}function Vt(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return(n,l)=>{let u=ye,d=ie,m=ae,g=be,v=_e,S=me,O=re,te=fe,k=ue,j=ge;return M(),x(`div`,on,[_(`header`,sn,[_(`button`,{type:`button`,class:F([`wb-tab`,{"is-active":p.value===`editor`}]),onClick:l[0]||=e=>p.value=`editor`},N(R(W)(`@WORKBENCH:任务执行`)),3),_(`button`,{type:`button`,class:F([`wb-tab`,{"is-active":p.value===`logs`}]),onClick:l[1]||=e=>p.value=`logs`},N(R(W)(`@WORKBENCH:执行日志`)),3)]),p.value===`editor`?(M(),x(`div`,cn,[_(`aside`,ln,[_(`section`,un,[_(`header`,dn,[_(`span`,fn,N(R(W)(`@WORKBENCH:任务`)),1),_(`h3`,pn,N(R(W)(`@WORKBENCH:任务列表`)),1),_(`span`,mn,N(s.value.length),1)]),_(`button`,{class:`wb-new-btn`,onClick:rt},[o(u,{class:`wb-new-btn__icon`},{default:V(()=>[o(R(se))]),_:1}),_(`span`,null,N(R(W)(`@WORKBENCH:新建任务`)),1),l[29]||=_(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)]),s.value.length>0&&X.value.name?(M(),x(`div`,hn,[o(u,{class:`wb-current-project__icon`},{default:V(()=>[o(R(w))]),_:1}),_(`span`,gn,N(R(W)(`@WORKBENCH:当前项目`)),1),_(`span`,{class:`wb-current-project__name`,title:X.value.path},N(X.value.name),9,_n)])):r(``,!0),_(`ul`,vn,[(M(!0),x(h,null,I(Ge.value.groups,t=>(M(),x(h,{key:t.path},[Ge.value.hasMultiple?(M(),x(`li`,{key:0,class:F([`wb-task-group__head`,{"is-current":t.path===X.value.path,"is-collapsed":Ue(t.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!Ue(t.path),title:Ue(t.path)?R(W)(`@WORKBENCH:展开`):R(W)(`@WORKBENCH:收起`),onClick:e=>We(t.path),onKeydown:[ee(f(e=>We(t.path),[`prevent`]),[`enter`]),ee(f(e=>We(t.path),[`prevent`]),[`space`])]},[o(u,{class:`wb-task-group__caret`},{default:V(()=>[(M(),U(ne(Ue(t.path)?R(i):R(y))))]),_:2},1024),o(u,{class:`wb-task-group__icon`},{default:V(()=>[o(R(w))]),_:1}),_(`span`,{class:`wb-task-group__name`,title:t.path===X.value.path?X.value.path:t.label},N(t.path===X.value.path?X.value.name:Ke(t.label)),9,bn),_(`span`,xn,N(t.tasks.length),1)],42,yn)):r(``,!0),Ue(t.path)?r(``,!0):(M(!0),x(h,{key:1},I(t.tasks,t=>(M(),x(`li`,{key:t.id,class:F([`wb-task-item`,{active:t.id===b.value,"has-attachment":Le(t)>0,"is-other-project":t.projectPath&&t.projectPath!==X.value.path}]),"data-icon":Pe(t.title),onClick:e=>ot(t)},[_(`div`,{class:`wb-task-item__avatar`,"data-icon":Pe(t.title)},[o(u,null,{default:V(()=>[(M(),U(ne(Ie(t))))]),_:2},1024)],8,Cn),_(`div`,wn,[_(`div`,{class:`wb-task-item__title`,title:t.title},N(t.title||R(W)(`@WORKBENCH:未命名任务`)),9,Tn),_(`div`,En,[_(`span`,{class:`wb-task-item__meta-item`,title:R(W)(`@WORKBENCH:个子任务`)},[o(u,{class:`wb-task-item__meta-icon`},{default:V(()=>[o(R(E))]),_:1}),_(`span`,On,N(Re(t)),1)],8,Dn),Le(t)>0?(M(),x(`span`,{key:0,class:`wb-task-item__meta-item`,title:R(W)(`@WORKBENCH:附件`)},[o(u,{class:`wb-task-item__meta-icon`},{default:V(()=>[o(R(pe))]),_:1}),_(`span`,An,N(Le(t)),1)],8,kn)):r(``,!0),t.promptId?(M(),x(`span`,{key:1,class:`wb-task-item__meta-item wb-task-item__meta-item--accent`,title:R(W)(`@WORKBENCH:已绑定预置提示词`)},[o(u,{class:`wb-task-item__meta-icon`},{default:V(()=>[o(R(e))]),_:1})],8,jn)):r(``,!0),t.type===`simple`?(M(),x(`span`,{key:2,class:`wb-task-item__meta-item wb-task-item__meta-item--simple`,title:R(W)(`@WORKBENCH:简单任务 - 无需拆分直接执行`)},N(R(W)(`@WORKBENCH:简单`)),9,Mn)):r(``,!0),t.projectPath&&t.projectPath!==X.value.path?(M(),x(`span`,{key:3,class:`wb-task-item__meta-item wb-task-item__meta-item--project`,title:t.projectPath},N(Ke(t.projectPath)),9,Nn)):r(``,!0)])]),_(`button`,{class:`wb-task-item__del`,onClick:f(e=>at(t),[`stop`]),title:R(W)(`@WORKBENCH:删除`),"aria-label":R(W)(`@WORKBENCH:删除`)},[o(u,null,{default:V(()=>[o(R(ce))]),_:1})],8,Pn)],10,Sn))),128))],64))),128)),s.value.length===0?(M(),x(`li`,Fn,[_(`div`,In,[o(u,null,{default:V(()=>[o(R(c))]),_:1})]),_(`div`,Ln,N(R(W)(`@WORKBENCH:暂无任务`)),1),_(`div`,Rn,N(R(W)(`@WORKBENCH:点击上方按钮新建`)),1)])):r(``,!0)])]),_(`section`,zn,[_(`header`,Bn,[_(`span`,Vn,N(R(W)(`@WORKBENCH:提示`)),1),_(`h3`,Hn,N(R(W)(`@WORKBENCH:预置提示词`)),1),_(`span`,Un,N(a.value.length),1),_(`button`,{class:`wb-section__action`,onClick:Ye,title:R(W)(`@WORKBENCH:新建提示词`),"aria-label":R(W)(`@WORKBENCH:新建提示词`)},[o(u,null,{default:V(()=>[o(R(se))]),_:1})],8,Wn)]),_(`ul`,Gn,[(M(!0),x(h,null,I(a.value,t=>(M(),x(`li`,{key:t.id,class:`wb-prompt-item`},[_(`div`,Kn,[o(u,null,{default:V(()=>[o(R(e))]),_:1})]),_(`span`,{class:`wb-prompt-item__name`,onClick:e=>Xe(t),title:t.content},N(t.name),9,qn),X.value.name?(M(),x(`span`,{key:0,class:`wb-prompt-item__project`,title:R(W)(`@WORKBENCH:适用于当前项目`)+`:`+X.value.path},N(X.value.name),9,Jn)):r(``,!0),_(`button`,{class:`wb-prompt-item__del`,onClick:e=>nt(t),title:R(W)(`@WORKBENCH:删除`),"aria-label":R(W)(`@WORKBENCH:删除`)},[o(u,null,{default:V(()=>[o(R(ce))]),_:1})],8,Yn)]))),128)),a.value.length===0?(M(),x(`li`,Xn,N(R(W)(`@WORKBENCH:暂无提示词`)),1)):r(``,!0)])])]),_(`section`,Zn,[T.value?(M(),x(h,{key:1},[_(`div`,$n,[A(_(`input`,{class:`wb-input wb-input--title`,"onUpdate:modelValue":l[2]||=e=>T.value.title=e,placeholder:R(W)(`@WORKBENCH:任务标题`)},null,8,er),[[t,T.value.title]]),H.value!==`idle`||Te.value?(M(),x(`span`,{key:0,class:F([`wb-meta-save`,{"is-saving":H.value===`saving`,"is-saved":H.value===`saved`,"is-error":H.value===`error`,"is-dirty":Te.value&&H.value===`idle`}]),title:H.value===`saving`?R(W)(`@WORKBENCH:保存中…`):H.value===`error`?R(W)(`@WORKBENCH:保存失败`):H.value===`saved`?R(W)(`@WORKBENCH:已保存`):``},[H.value===`saving`?(M(),x(`span`,nr)):H.value===`saved`?(M(),x(`span`,rr,`✓`)):H.value===`error`?(M(),x(`span`,ir,`!`)):(M(),x(`span`,ar)),C(` `+N(H.value===`saving`?R(W)(`@WORKBENCH:保存中…`):H.value===`saved`?R(W)(`@WORKBENCH:已保存`):H.value===`error`?R(W)(`@WORKBENCH:保存失败`):R(W)(`@WORKBENCH:有未保存的更改`)),1)],10,tr)):r(``,!0),A(_(`select`,{class:`wb-select`,"onUpdate:modelValue":l[3]||=e=>T.value.promptId=e},[_(`option`,or,N(R(W)(`@WORKBENCH:不绑定预置提示词`)),1),(M(!0),x(h,null,I(a.value,e=>(M(),x(`option`,{key:e.id,value:e.id},N(e.name),9,sr))),128))],512),[[le,T.value.promptId]]),D.value?r(``,!0):(M(),U(d,{key:1,type:`info`,plain:``,disabled:!T.value.title||!T.value.title.trim(),onClick:dt},{default:V(()=>[C(N(R(W)(`@WORKBENCH:AI 拆分`)),1)]),_:1},8,[`disabled`])),o(d,{type:`primary`,loading:!1,onClick:l[4]||=e=>pt(T.value)},{default:V(()=>[C(N(D.value?R(W)(`@WORKBENCH:执行`):R(W)(`@WORKBENCH:执行任务`)),1)]),_:1})]),A(_(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":l[5]||=e=>T.value.desc=e,placeholder:R(W)(`@WORKBENCH:任务描述(可选)`),rows:`3`,onPaste:l[6]||=e=>Pt(e,{kind:`task`,task:T.value})},null,40,cr),[[t,T.value.desc]]),o(et,{attachments:T.value.attachments||[],"is-image":Bt,"human-size":Vt,"is-uploading":wt(`task-`+T.value.id),"is-paste-hover":$.value===`task-`+T.value.id,"max-count":9,"on-pick":()=>Rt({kind:`task`,task:T.value}),"on-remove":e=>Lt({kind:`task`,task:T.value},e),onPaste:l[7]||=e=>Pt(e,{kind:`task`,task:T.value}),onDrop:l[8]||=f(e=>Ft(e,{kind:`task`,task:T.value}),[`prevent`]),onDragover:l[9]||=f(e=>$.value=`task-`+T.value.id,[`prevent`]),onDragenter:l[10]||=f(e=>$.value=`task-`+T.value.id,[`prevent`]),onDragleave:l[11]||=e=>$.value=$.value===`task-`+T.value.id?null:$.value},null,8,[`attachments`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`]),D.value?(M(),x(h,{key:1},[_(`div`,Lr,[_(`h4`,null,N(R(W)(`@WORKBENCH:简单任务`)),1),_(`span`,Rr,N(R(W)(`@WORKBENCH:无需拆分子任务;点执行后直接用上方描述驱动 Claude`)),1)]),_(`div`,zr,[_(`label`,Br,N(R(W)(`@WORKBENCH:覆盖预置提示词(可选)`)),1),A(_(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":l[12]||=e=>T.value.simpleOverride=e,placeholder:R(W)(`@WORKBENCH:留空则使用上方选定的「预置提示词」模板;可用变量同子任务:{{task.title}} {{task.desc}} {{repo.path}} {{branch}}`),rows:`6`},null,8,Vr),[[t,T.value.simpleOverride]])]),Y(`${T.value.id}__simple`)?(M(),U(Tt,{key:0,job:Y(`${T.value.id}__simple`)},null,8,[`job`])):r(``,!0)],64)):(M(),x(h,{key:0},[_(`div`,lr,[_(`h4`,null,N(R(W)(`@WORKBENCH:子任务拆分`)),1),_(`div`,ur,[o(d,{size:`small`,plain:``,icon:R(se),disabled:T.value.subtasks.length===0,onClick:st},{default:V(()=>[C(N(R(W)(`@WORKBENCH:添加子任务`)),1)]),_:1},8,[`icon`,`disabled`]),o(d,{size:`small`,type:B.value?`primary`:`default`,disabled:T.value.subtasks.length===0,onClick:lt},{default:V(()=>[C(N(R(W)(`@WORKBENCH:保存拆分`))+` `,1),B.value?(M(),x(`span`,dr,N(z.value.size),1)):r(``,!0)]),_:1},8,[`type`,`disabled`])])]),_(`ul`,fr,[(M(!0),x(h,null,I(T.value.subtasks,e=>(M(),x(`li`,{key:e.id,class:F([`wb-sub-item`,{"is-dirty":z.value.has(e.id),"is-running":e.status===`running`,"is-done":e.status===`done`,"is-collapsed":vt(e),"is-clickable":vt(e)}]),onClick:t=>vt(e)&&yt(e)},[vt(e)?(M(),x(`div`,mr,[_(`span`,{class:`wb-sub-item__status`,style:oe({background:R(Dt)(e.status)})},N(R(Et)(e.status)),5),_(`span`,{class:`wb-sub-item__title-compact`,title:e.title},N(e.title||R(W)(`@WORKBENCH:未命名子任务`)),9,hr),Y(e.id)?(M(),x(`span`,{key:0,class:`wb-sub-item__pid`,title:R(W)(`@WORKBENCH:进程ID`)},` PID: `+N(Y(e.id)?.pid),9,gr)):r(``,!0),gt(e)?(M(),x(`button`,{key:1,class:`wb-sub-item__run`,title:R(W)(`@WORKBENCH:单独执行此子任务`),"aria-label":R(W)(`@WORKBENCH:单独执行此子任务`),onClick:f(t=>ht(e),[`stop`])},N(R(W)(`@WORKBENCH:执行`)),9,_r)):r(``,!0),_(`button`,{class:`wb-sub-item__toggle`,title:R(W)(`@WORKBENCH:展开`),"aria-label":R(W)(`@WORKBENCH:展开`),onClick:f(t=>yt(e),[`stop`])},[o(u,null,{default:V(()=>[o(R(y))]),_:1})],8,vr),_(`button`,{class:`wb-sub-item__undo`,title:R(W)(`@WORKBENCH:取消完成`),"aria-label":R(W)(`@WORKBENCH:取消完成`),onClick:f(t=>bt(e),[`stop`])},N(R(W)(`@WORKBENCH:取消完成`)),9,yr),_(`button`,{class:`wb-sub-item__del`,title:R(W)(`@WORKBENCH:删除`),"aria-label":R(W)(`@WORKBENCH:删除`),onClick:f(t=>ct(e),[`stop`])},`×`,8,br)])):(M(),x(h,{key:1},[_(`div`,xr,[_(`span`,{class:`wb-sub-item__status`,style:oe({background:R(Dt)(e.status)})},N(R(Et)(e.status)),5),A(_(`input`,{class:`wb-input`,"onUpdate:modelValue":t=>e.title=t,placeholder:R(W)(`@WORKBENCH:子任务标题`),onPaste:t=>Pt(t,{kind:`sub`,task:T.value,sub:e})},null,40,Sr),[[t,e.title]]),z.value.has(e.id)?(M(),x(`span`,{key:0,class:`wb-sub-item__dirty`,title:R(W)(`@WORKBENCH:有未保存的更改`)},N(R(W)(`@WORKBENCH:未保存`)),9,Cr)):r(``,!0),Y(e.id)?(M(),x(`span`,{key:1,class:`wb-sub-item__pid`,title:R(W)(`@WORKBENCH:进程ID`)},` PID: `+N(Y(e.id)?.pid),9,wr)):r(``,!0),gt(e)?(M(),x(`button`,{key:2,class:`wb-sub-item__run`,title:R(W)(`@WORKBENCH:单独执行此子任务`),"aria-label":R(W)(`@WORKBENCH:单独执行此子任务`),onClick:t=>ht(e)},N(R(W)(`@WORKBENCH:执行`)),9,Tr)):r(``,!0),Y(e.id)&&(Y(e.id)?.status===`running`||Y(e.id)?.status===`pending`)?(M(),x(`button`,{key:3,class:`wb-sub-item__stop`,title:R(W)(`@WORKBENCH:停止执行`),onClick:t=>xt(Y(e.id))},N(R(W)(`@WORKBENCH:停止`)),9,Er)):r(``,!0),e.status===`done`?(M(),x(`button`,{key:4,class:`wb-sub-item__toggle`,title:R(W)(`@WORKBENCH:收起`),"aria-label":R(W)(`@WORKBENCH:收起`),onClick:t=>yt(e)},[o(u,null,{default:V(()=>[o(R(ve))]),_:1})],8,Dr)):r(``,!0),e.status===`done`?(M(),x(`button`,{key:5,class:`wb-sub-item__undo`,title:R(W)(`@WORKBENCH:取消完成`),"aria-label":R(W)(`@WORKBENCH:取消完成`),onClick:t=>bt(e)},N(R(W)(`@WORKBENCH:取消完成`)),9,Or)):r(``,!0),_(`button`,{class:`wb-sub-item__del`,onClick:t=>ct(e)},`×`,8,kr)]),A(_(`textarea`,{class:`wb-textarea wb-textarea--sm`,"onUpdate:modelValue":t=>e.desc=t,placeholder:R(W)(`@WORKBENCH:子任务描述 / 独立提示词覆盖`),rows:`2`,onPaste:t=>Pt(t,{kind:`sub`,task:T.value,sub:e})},null,40,Ar),[[t,e.desc]]),Y(e.id)?(M(),U(Tt,{key:0,job:Y(e.id)},null,8,[`job`])):r(``,!0),o(et,{attachments:e.attachments||[],"is-image":Bt,"human-size":Vt,"is-uploading":wt(`sub-`+e.id),"is-paste-hover":$.value===e.id,"max-count":9,"on-pick":()=>Rt({kind:`sub`,task:T.value,sub:e}),"on-remove":t=>Lt({kind:`sub`,task:T.value,sub:e},t),onPaste:t=>Pt(t,{kind:`sub`,task:T.value,sub:e}),onDrop:f(t=>Ft(t,{kind:`sub`,task:T.value,sub:e}),[`prevent`]),onDragover:f(t=>$.value=e.id,[`prevent`]),onDragenter:f(t=>$.value=e.id,[`prevent`]),onDragleave:t=>$.value=$.value===e.id?null:$.value},null,8,[`attachments`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`,`onPaste`,`onDrop`,`onDragover`,`onDragenter`,`onDragleave`])],64))],10,pr))),128)),T.value.subtasks.length===0?(M(),x(`li`,jr,[_(`div`,Mr,[o(u,null,{default:V(()=>[o(R(E))]),_:1})]),_(`div`,Nr,N(R(W)(`@WORKBENCH:拆分任务,逐项执行`)),1),_(`div`,Pr,N(R(W)(`@WORKBENCH:手动添加子任务,或让 AI 帮你自动拆分`)),1),_(`div`,Fr,[o(d,{type:`primary`,size:`small`,icon:R(se),onClick:st},{default:V(()=>[C(N(R(W)(`@WORKBENCH:添加子任务`)),1)]),_:1},8,[`icon`]),_(`button`,{type:`button`,class:`wb-empty__link`,disabled:!T.value.title||!T.value.title.trim(),onClick:dt},N(R(W)(`@WORKBENCH:用 AI 自动拆分`)),9,Ir)])])):r(``,!0)])],64))],64)):(M(),x(`div`,Qn,[_(`p`,null,N(R(W)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])):(M(),U(an,{key:1})),o(S,{modelValue:G.visible,"onUpdate:modelValue":l[16]||=e=>G.visible=e,title:G.editing?R(W)(`@WORKBENCH:编辑提示词`):R(W)(`@WORKBENCH:新建提示词`),width:`640px`},{footer:V(()=>[o(d,{onClick:l[15]||=e=>G.visible=!1},{default:V(()=>[C(N(R(W)(`@WORKBENCH:取消`)),1)]),_:1}),o(d,{type:`primary`,onClick:tt},{default:V(()=>[C(N(R(W)(`@WORKBENCH:保存`)),1)]),_:1})]),default:V(()=>[o(v,{"label-position":`top`},{default:V(()=>[o(g,{label:R(W)(`@WORKBENCH:名称`)},{default:V(()=>[o(m,{modelValue:G.name,"onUpdate:modelValue":l[13]||=e=>G.name=e,placeholder:R(W)(`@WORKBENCH:如:代码审查 / 写测试`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),o(g,null,{default:V(()=>[_(`div`,Hr,[o(d,{type:`primary`,plain:``,loading:G.aiLoading,onClick:Ze},{default:V(()=>[C(N(R(W)(`@WORKBENCH:AI 生成项目架构说明`)),1)]),_:1},8,[`loading`]),o(d,{onClick:Qe},{default:V(()=>[C(N(R(W)(`@WORKBENCH:编辑指令`)),1)]),_:1})])]),_:1}),o(g,{label:R(W)(`@WORKBENCH:内容`)},{default:V(()=>[o(m,{modelValue:G.content,"onUpdate:modelValue":l[14]||=e=>G.content=e,type:`textarea`,rows:10,placeholder:R(W)(`@WORKBENCH:可用变量:`)+`{{task.title}} {{task.desc}} {{sub.title}} {{sub.desc}} {{repo.path}} {{branch}}`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),o(S,{modelValue:K.visible,"onUpdate:modelValue":l[19]||=e=>K.visible=e,title:R(W)(`@WORKBENCH:编辑生成指令`),width:`720px`,"append-to-body":``},{footer:V(()=>[o(d,{onClick:l[18]||=e=>K.visible=!1},{default:V(()=>[C(N(R(W)(`@WORKBENCH:取消`)),1)]),_:1}),o(d,{type:`primary`,loading:K.saving,onClick:$e},{default:V(()=>[C(N(R(W)(`@WORKBENCH:保存`)),1)]),_:1},8,[`loading`])]),default:V(()=>[o(v,{"label-position":`top`},{default:V(()=>[o(g,{label:R(W)(`@WORKBENCH:指令内容`)},{default:V(()=>[o(m,{modelValue:K.text,"onUpdate:modelValue":l[17]||=e=>K.text=e,type:`textarea`,rows:18,placeholder:R(W)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),o(S,{modelValue:q.visible,"onUpdate:modelValue":l[27]||=e=>q.visible=e,title:q.editing?R(W)(`@WORKBENCH:编辑任务`):R(W)(`@WORKBENCH:新建任务`),width:`600px`},{footer:V(()=>[o(d,{onClick:l[26]||=e=>q.visible=!1},{default:V(()=>[C(N(R(W)(`@WORKBENCH:取消`)),1)]),_:1}),o(d,{type:`primary`,onClick:it},{default:V(()=>[C(N(R(W)(`@WORKBENCH:保存`)),1)]),_:1})]),default:V(()=>[o(v,{"label-position":`top`},{default:V(()=>[o(g,{label:R(W)(`@WORKBENCH:标题`)},{default:V(()=>[o(m,{modelValue:q.title,"onUpdate:modelValue":l[20]||=e=>q.title=e},null,8,[`modelValue`])]),_:1},8,[`label`]),o(g,{label:R(W)(`@WORKBENCH:类型`)},{default:V(()=>[o(te,{modelValue:q.type,"onUpdate:modelValue":l[21]||=e=>q.type=e},{default:V(()=>[o(O,{value:`complex`},{default:V(()=>[C(N(R(W)(`@WORKBENCH:复杂任务(需要拆分子任务)`)),1)]),_:1}),o(O,{value:`simple`},{default:V(()=>[C(N(R(W)(`@WORKBENCH:简单任务(直接执行)`)),1)]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`label`]),q.type===`simple`?(M(),U(g,{key:0,label:R(W)(`@WORKBENCH:描述`)},{default:V(()=>[o(m,{modelValue:q.desc,"onUpdate:modelValue":l[22]||=e=>q.desc=e,type:`textarea`,rows:4,placeholder:R(W)(`@WORKBENCH:把要做的事直接写在这里,执行时会把这段描述作为 prompt 喂给 Claude`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):(M(),U(g,{key:1,label:R(W)(`@WORKBENCH:描述`)},{default:V(()=>[o(m,{modelValue:q.desc,"onUpdate:modelValue":l[23]||=e=>q.desc=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1},8,[`label`])),q.type===`simple`?(M(),U(g,{key:2,label:R(W)(`@WORKBENCH:覆盖预置提示词(可选)`)},{default:V(()=>[o(m,{modelValue:q.simpleOverride,"onUpdate:modelValue":l[24]||=e=>q.simpleOverride=e,type:`textarea`,rows:5,placeholder:R(W)(`@WORKBENCH:留空则使用「预置提示词」下拉里选定的模板;可用变量同子任务覆盖。`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):r(``,!0),o(g,{label:R(W)(`@WORKBENCH:预置提示词`)},{default:V(()=>[o(j,{modelValue:q.promptId,"onUpdate:modelValue":l[25]||=e=>q.promptId=e,clearable:``,placeholder:R(W)(`@WORKBENCH:不绑定`),style:{width:`100%`}},{default:V(()=>[(M(!0),x(h,null,I(a.value,e=>(M(),U(k,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),T.value?(M(),U(Ve,{key:2,modelValue:ut.value,"onUpdate:modelValue":l[28]||=e=>ut.value=e,title:T.value.title,desc:T.value.desc,"task-id":T.value.id,"prompt-id":T.value.promptId,onConfirm:ft},null,8,[`modelValue`,`title`,`desc`,`task-id`,`prompt-id`])):r(``,!0)])}}}),[[`__scopeId`,`data-v-c13de8d0`]]);export{Kr as default};
|