zen-gitsync 2.17.40 → 2.17.41
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 +6 -6
- package/package.json +7 -2
- package/src/config.js +69 -44
- package/src/ui/public/assets/{AgentEngineSelector-BXRU9N3n.js → AgentEngineSelector-CSHgQmBZ.js} +1 -1
- package/src/ui/public/assets/AgentEngineSelector-D7DmG6PU.css +1 -0
- package/src/ui/public/assets/{AgentView-YQuKBxoC.js → AgentView-I_fQFLKK.js} +1 -1
- package/src/ui/public/assets/AgentView-h2YnbB7J.css +1 -0
- package/src/ui/public/assets/{AppVersionBadge-CSOyKuxL.js → AppVersionBadge-CBSMyORM.js} +2 -2
- package/src/ui/public/assets/AppVersionBadge-XszX3cSC.css +1 -0
- package/src/ui/public/assets/{BranchSelector-mcQyh4sc.js → BranchSelector-Dus0Co03.js} +1 -1
- package/src/ui/public/assets/CommitForm-C7ydqzWG.css +1 -0
- package/src/ui/public/assets/{CommitForm-DcVysfJZ.js → CommitForm-DZfqHlWx.js} +3 -3
- package/src/ui/public/assets/{CommonDialog-CFLZuomi.js → CommonDialog-BaaWQMm0.js} +1 -1
- package/src/ui/public/assets/EditorView-4yWirn4A.js +1 -0
- package/src/ui/public/assets/EditorView-CzrwLEbB.css +1 -0
- package/src/ui/public/assets/FileDiffViewer-CtP7u1L7.css +1 -0
- package/src/ui/public/assets/{FileDiffViewer-BrrqMLh8.js → FileDiffViewer-qC3HjA4L.js} +4 -4
- package/src/ui/public/assets/{FlowExecutionViewer-BucjKlcc.js → FlowExecutionViewer-Baabatxd.js} +1 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-DLt_i4gs.css +1 -0
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-yUPhhUL9.js → FlowOrchestrationWorkspace-teHyeO3I.js} +2 -2
- package/src/ui/public/assets/{IconButton-BSJ5FhS5.js → IconButton-8QwNIEIr.js} +1 -1
- package/src/ui/public/assets/IconButton-DmetnIEM.css +1 -0
- package/src/ui/public/assets/{LogList-6iOkdR0p.js → LogList-BMm64HIx.js} +2 -2
- package/src/ui/public/assets/LogList-DViWAYe9.css +1 -0
- package/src/ui/public/assets/{MindmapView-Dc7VRSLk.js → MindmapView-CemLoVSh.js} +1 -1
- package/src/ui/public/assets/MindmapView-D_tEBhMg.css +1 -0
- package/src/ui/public/assets/{MonitorView-B8tcPtiX.js → MonitorView-DolfvhpN.js} +1 -1
- package/src/ui/public/assets/MonitorView-nh6LB-oh.css +1 -0
- package/src/ui/public/assets/ProjectStartupButton-BWGIWiPF.css +1 -0
- package/src/ui/public/assets/{ProjectStartupButton-CPGw8eiW.js → ProjectStartupButton-DzzIon_u.js} +1 -1
- package/src/ui/public/assets/RecentDirectoriesChat-BxbpKrXc.css +1 -0
- package/src/ui/public/assets/{RecentDirectoriesChat-C0lQ_zmQ.js → RecentDirectoriesChat-ciDAbG1B.js} +1 -1
- package/src/ui/public/assets/RemoteManagerDialog-DecRuME6.css +1 -0
- package/src/ui/public/assets/{RemoteManagerDialog-CGuGZSse.js → RemoteManagerDialog-DydRnKaP.js} +1 -1
- package/src/ui/public/assets/RemoteRepoCard-DJkEGjRM.css +1 -0
- package/src/ui/public/assets/RemoteRepoCard-i-0LnQMD.js +1 -0
- package/src/ui/public/assets/{SourceMapView-OwBvsqME.js → SourceMapView-BV5r3wZE.js} +3 -3
- package/src/ui/public/assets/SourceMapView-W3kEDGi8.css +1 -0
- package/src/ui/public/assets/{SvgIcon-CevyX7lX.js → SvgIcon-7IDEgoQx.js} +1 -1
- package/src/ui/public/assets/{TemplateManager-BtpsyfbK.js → TemplateManager-6FX2EdMq.js} +1 -1
- package/src/ui/public/assets/TemplateManager-6liTCBpW.css +1 -0
- package/src/ui/public/assets/{UserInputNode-BPTWXh5G.js → UserInputNode-Dajnb5r1.js} +1 -1
- package/src/ui/public/assets/UserInputNode-wfqZIucW.css +1 -0
- package/src/ui/public/assets/WorkbenchView-DfHNBWS0.css +1 -0
- package/src/ui/public/assets/WorkbenchView-trn3xPiX.js +20 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-DF39dMex.js → _plugin-vue_export-helper-Dp1lG95_.js} +4 -4
- package/src/ui/public/assets/agentConversations-FiD_iarB.js +6 -0
- package/src/ui/public/assets/configStore-wR8LDvKB.js +1 -0
- package/src/ui/public/assets/{gitStore-1o5Sp0mh.js → gitStore-D4L9bpMp.js} +1 -1
- package/src/ui/public/assets/index-Bu08kcaz.js +29 -0
- package/src/ui/public/assets/index-DdSWvL8M.css +1 -0
- package/src/ui/public/assets/{previewSandbox-BioBqkiI.js → previewSandbox-BHijazEq.js} +1 -1
- package/src/ui/public/assets/previewSandbox-BeiZ2CBl.css +1 -0
- package/src/ui/public/assets/{toolsStore-DozQNwtU.js → toolsStore-BGwhTEUD.js} +1 -1
- package/src/ui/public/index.html +16 -16
- package/src/ui/server/routes/config.js +13 -16
- package/src/ui/server/routes/workbench/projectRegistry.js +39 -0
- package/src/ui/server/routes/workbench/projectRegistry.test.js +48 -0
- package/src/ui/public/assets/AgentEngineSelector-DR3r5eQE.css +0 -1
- package/src/ui/public/assets/AgentView-D87GB-H9.css +0 -1
- package/src/ui/public/assets/AppVersionBadge--5If494j.css +0 -1
- package/src/ui/public/assets/CommitForm-94maYxfo.css +0 -1
- package/src/ui/public/assets/EditorView-BS4GfwaQ.js +0 -1
- package/src/ui/public/assets/EditorView-BsuQfcO4.css +0 -1
- package/src/ui/public/assets/FileDiffViewer-B6zy6NiA.css +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CM2_9TW3.css +0 -1
- package/src/ui/public/assets/IconButton-W2X09OKH.css +0 -1
- package/src/ui/public/assets/LogList-DLxxk9NX.css +0 -1
- package/src/ui/public/assets/MindmapView-C4xg3TwX.css +0 -1
- package/src/ui/public/assets/MonitorView-BWOQfPtI.css +0 -1
- package/src/ui/public/assets/ProjectStartupButton-VoQqFee4.css +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-o4xK1Koc.css +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-BSOph2h2.css +0 -1
- package/src/ui/public/assets/RemoteRepoCard-CG9WPcA_.css +0 -1
- package/src/ui/public/assets/RemoteRepoCard-DbflPz65.js +0 -1
- package/src/ui/public/assets/SourceMapView-CO_BZJKu.css +0 -1
- package/src/ui/public/assets/TemplateManager-DiM3vrbf.css +0 -1
- package/src/ui/public/assets/UserInputNode-d-oRXM_J.css +0 -1
- package/src/ui/public/assets/WorkbenchView-CSRMrK-l.js +0 -20
- package/src/ui/public/assets/WorkbenchView-fCu0K8e3.css +0 -1
- package/src/ui/public/assets/agentConversations-CPWL3WOC.js +0 -6
- package/src/ui/public/assets/configStore-CZhbJNkw.js +0 -1
- package/src/ui/public/assets/index-CM4UxQfy.css +0 -1
- package/src/ui/public/assets/index-Cw-KBQo_.js +0 -29
- package/src/ui/public/assets/previewSandbox-SqNQvuHv.css +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$n as e,Bn as t,C as n,Cn as r,Ct as i,Dn as a,En as o,Er as s,Et as c,F as l,Ft as u,Gt as d,Ht as f,I as p,In as m,J as h,Jt as g,Lt as _,Mn as v,N as y,Nn as b,On as x,Pn as S,Pr as C,Qr as w,Rt as T,S as E,St as ee,Tn as D,U as O,Vt as k,Wn as A,X as te,Y as j,Yn as ne,Yr as re,Z as ie,Zn as M,_n as ae,_t as oe,a as N,an as se,b as ce,bn as P,br as F,cr as I,ct as L,dn as R,dt as le,gn as ue,i as de,kn as z,lr as B,lt as fe,mn as pe,nr as me,o as he,or as V,ot as H,pr as U,pt as ge,qn as _e,qr as W,r as ve,tt as G,v as ye,vn as K,vr as q,w as be,xn as J,y as xe,yn as Y,yt as Se,z as Ce,zt as we}from"./element-plus-CgEuJBlB.js";import{a as Te,i as Ee,n as De,r as Oe,t as ke}from"./vendor-CDZ64WVU.js";import{n as X,t as Z}from"./_plugin-vue_export-helper-Dp1lG95_.js";import{t as Ae}from"./SvgIcon-7IDEgoQx.js";import{a as je,i as Me,o as Ne,t as Pe}from"./configStore-wR8LDvKB.js";import{t as Fe}from"./toolsStore-BGwhTEUD.js";import{t as Ie}from"./useThemeObserver-DAyxqy9l.js";import{t as Le}from"./CommonDialog-BaaWQMm0.js";import{D as Q,_ as Re,c as $,d as ze,f as Be,g as Ve,h as He,m as Ue,p as We,s as Ge,v as Ke,y as qe}from"./index-Bu08kcaz.js";import{a as Je,i as Ye,n as Xe,o as Ze,r as Qe,s as $e,t as et,u as tt}from"./agentConversations-FiD_iarB.js";import{n as nt,t as rt}from"./AgentEngineSelector-CSHgQmBZ.js";t(),U(),C(),R();var it={class:`wb-attachments__head`},at={class:`wb-attachments__label`},ot={class:`wb-attachments__count`},st=[`disabled`],ct={key:0,class:`wb-attachments__paste-hint`},lt={key:1,class:`wb-attachments__list`},ut=[`title`,`onClick`,`onContextmenu`],dt=[`src`,`alt`],ft={key:1},pt={class:`wb-attachment__meta`},mt=[`title`],ht=[`onClick`,`title`],gt=Z(m({__name:`AttachmentZone`,props:{attachments:{},isImage:{type:Function},humanSize:{type:Function},isUploading:{type:Boolean},isPasteHover:{type:Boolean},onPick:{type:Function},onRemove:{type:Function},rawBase:{}},emits:[`paste`,`drop`,`dragover`,`dragenter`,`dragleave`],setup(t,{emit:n}){let i=t;function c(e){return`${i.rawBase||`/api/workbench/attachments`}/${e.id}/raw`}let l=n,u=D(()=>i.attachments.filter(e=>i.isImage(e))),d=D(()=>u.value.map(e=>c(e))),f=F(0),p=F(!1);function m(e){if(i.isImage(e)){let t=u.value.findIndex(t=>t.id===e.id);f.value=t>=0?t:0,p.value=!0}else window.open(c(e),`_blank`,`noopener`)}function h(){p.value=!1}let g=F({visible:!1,x:0,y:0,att:null}),_=F(!1);function v(e,t){if(!i.isImage(e))return;t.preventDefault();let n=window.innerWidth-180,r=window.innerHeight-120;g.value={visible:!0,x:Math.min(t.clientX,n),y:Math.min(t.clientY,r),att:e}}function y(){g.value.visible&&(g.value.visible=!1)}async function S(){let e=g.value.att;if(e&&!_.value){if(y(),!navigator.clipboard||typeof ClipboardItem>`u`){N({type:`warning`,message:X(`@WORKBENCH:当前浏览器不支持复制图片`)});return}_.value=!0;try{let t=await fetch(c(e),{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]),N({type:`success`,message:X(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){N({type:`error`,message:X(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{_.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,y),window.addEventListener(`scroll`,y,!0),window.addEventListener(`blur`,y)),_e(()=>{typeof window<`u`&&(window.removeEventListener(`click`,y),window.removeEventListener(`scroll`,y,!0),window.removeEventListener(`blur`,y))}),(n,i)=>(M(),z(J,null,[o(`div`,{class:W([`wb-attachments`,{"is-paste-hover":t.isPasteHover}]),onPaste:i[1]||=e=>l(`paste`,e),onDrop:i[2]||=P(e=>l(`drop`,e),[`prevent`]),onDragover:i[3]||=P(e=>l(`dragover`,e),[`prevent`]),onDragenter:i[4]||=P(e=>l(`dragenter`,e),[`prevent`]),onDragleave:i[5]||=e=>l(`dragleave`,e)},[o(`div`,it,[o(`span`,at,[b(w(s(X)(`@WORKBENCH:附件`))+` `,1),o(`span`,ot,w(t.attachments.length),1)]),o(`button`,{class:`wb-attachments__add`,disabled:t.isUploading,onClick:i[0]||=(...e)=>t.onPick&&t.onPick(...e)},w(t.isUploading?s(X)(`@WORKBENCH:上传中…`):s(X)(`@WORKBENCH:添加附件`)),9,st)]),t.isPasteHover?(M(),z(`div`,ct,w(s(X)(`@WORKBENCH:粘贴图片以快速添加`)),1)):x(``,!0),t.attachments.length>0?(M(),z(`ul`,lt,[(M(!0),z(J,null,e(t.attachments,e=>(M(),z(`li`,{key:e.id,class:`wb-attachment`},[o(`button`,{type:`button`,class:`wb-attachment__preview`,title:s(X)(`@WORKBENCH:点击预览`),onClick:t=>m(e),onContextmenu:t=>v(e,t)},[o(`div`,{class:W([`wb-attachment__icon`,{"wb-attachment__icon--img":t.isImage(e)}])},[t.isImage(e)?(M(),z(`img`,{key:0,src:c(e),alt:e.originalName,loading:`lazy`},null,8,dt)):(M(),z(`span`,ft,w(e.ext.toUpperCase()),1))],2),o(`div`,pt,[o(`div`,{class:`wb-attachment__name`,title:`${e.originalName} (${t.humanSize(e.size)})`},w(e.originalName),9,mt)])],40,ut),o(`button`,{class:`wb-attachment__del`,onClick:P(n=>t.onRemove(e),[`stop`]),title:s(X)(`@WORKBENCH:删除`)},`×`,8,ht)]))),128))])):x(``,!0)],34),p.value&&d.value.length>0?(M(),a(s(ce),{key:0,"url-list":d.value,"initial-index":f.value,"hide-on-click-modal":!0,teleported:!0,onClose:h},null,8,[`url-list`,`initial-index`])):x(``,!0),(M(),a(r,{to:`body`},[g.value.visible&&g.value.att&&t.isImage(g.value.att)?(M(),z(`ul`,{key:0,class:`wb-ctx-menu`,style:re({top:g.value.y+`px`,left:g.value.x+`px`}),onContextmenu:i[6]||=P(()=>{},[`prevent`])},[o(`li`,{class:W([`wb-ctx-menu__item`,{"is-disabled":_.value}]),onClick:S},[i[7]||=o(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[o(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[o(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),o(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),o(`span`,null,w(s(X)(`@WORKBENCH:复制图片`)),1)],2)],36)):x(``,!0)]))],64))}}),[[`__scopeId`,`data-v-e3e872cb`]]),_t=De(`claude`),vt=De(`opencode`),yt=De(`codex`);function bt(e){return e===`opencode`?vt:e===`codex`?yt:_t}function xt(e){switch(e){case`todo`:return X(`@WORKBENCH:待执行`);case`running`:return X(`@WORKBENCH:执行中`);case`done`:return X(`@WORKBENCH:已完成`);case`error`:return X(`@WORKBENCH:出错`);case`cancelled`:return X(`@WORKBENCH:已取消`);case`pending`:return X(`@WORKBENCH:排队中`);default:return e}}function St(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 Ct=8192;function wt(e,t){return e.length>t?`…(前文已截断)\n${e.slice(-t)}`:e}function Tt(e,t){let n=e||`done`;return n!==`pending`&&n!==`running`||t===`running`||t===`pending`?n:t===`cancelled`||t===`error`?`error`:`done`}function Et(e){let t=e?.toolCalls;if(!Array.isArray(t)||t.length===0)return[];let n=e?.status||`done`,r=[];for(let e=0;e<t.length;e++){let i=t[e];if(!i||typeof i!=`object`)continue;let a=Tt(i.status,n),o=typeof i.result==`string`?i.result:``;r.push({id:typeof i.id==`string`&&i.id?i.id:`tool-${e}`,name:typeof i.name==`string`?i.name:``,argsPreview:typeof i.argsPreview==`string`?i.argsPreview:``,arguments:typeof i.arguments==`string`?i.arguments:``,result:o?wt(o,Ct):``,status:a,error:typeof i.error==`string`&&i.error?i.error:void 0})}return r}var Dt=`
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`,Ot=`[运行环境 ·`,kt=`## 跨会话记忆库`,At=/\n\n---\n本任务包含 \d+ 个附件(请按文件路径读取[\s\S]*$/,jt=/\n\n续接 #\d+\s*$/;function Mt(e){let t=e.indexOf(Dt);return t===-1?0:t+7}function Nt(e){let t=typeof e==`string`?e:``;return t?(t.startsWith(Ot)&&(t=t.slice(Mt(t))),t.startsWith(kt)&&(t=t.slice(Mt(t))),t=t.replace(At,``).replace(jt,``),t.trim()):``}var Pt=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`],Ft=/!\[([^\]]*)\]\(\s*(?:<([^<>\n]+)>|([^()\s]+))(\s+["'][^"']*["'])?\s*\)/g,It=/^\s*(`{3,}|~{3,})/,Lt=/\.([a-z0-9]+)$/;function Rt(e){let t=e.trim().toLowerCase().match(Lt);return!!t&&Pt.includes(t[1])}function zt(e){let t=String(e||``).trim();if(!t)return!1;if(/^[a-zA-Z]:[\\/]/.test(t))return Rt(t);let n=t.match(/^([a-z][a-z0-9+.-]+):/i);return n&&n[1].toLowerCase()!==`file`||t.startsWith(`//`)||t.startsWith(`/`)?!1:Rt(t)}function Bt(e,t){return`/api/workbench/jobs/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function Vt(e,t){return e.includes(`}${a||``})`:e}):e}function Ht(e,t){let n=typeof e==`string`?e:``;if(!n||!t||!n.includes(`![`))return n;let r=n.split(`
|
|
6
|
+
`),i=null,a=[];for(let e of r){let n=e.match(It);if(n){let t=n[1][0];i===null?i=t:i===t&&(i=null),a.push(e);continue}a.push(i===null?Vt(e,t):e)}return a.join(`
|
|
7
|
+
`)}t(),U(),C(),R();var Ut=[`aria-expanded`],Wt={class:`wb-log-summary__left`},Gt={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},Kt={class:`wb-log-summary__label`},qt={key:0,class:`wb-log-summary__elapsed`},Jt={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},Yt={class:`wb-log-summary__label`},Xt={class:`wb-log-summary__icon`},Zt={class:`wb-log-summary__label`},Qt={key:0,class:`wb-log-summary__elapsed`},$t={key:3},en={class:`wb-log-summary__right`},tn={class:`wb-log-summary__meta`},nn=[`title`,`aria-label`],rn={class:`wb-log-details__body`},an={class:`wb-job-chat`},on={key:0,class:`wb-chat__foot`},sn=[`title`,`aria-label`],cn={key:1,class:`wb-log-fullscreen__empty`},ln=65536,un=Z(m({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(e,{emit:t}){let n=Pe(),r=e,i=t,c=F(!1);function l(){c.value=!c.value}let u=D(()=>r.job.status===`running`||r.job.status===`pending`);V(()=>r.job.status,(e,t)=>{t!==`running`&&t!==`pending`&&(e===`running`||e===`pending`)&&(c.value=!1)});function d(){let e=r.job.output||``;return e?Ht(e.length<=ln?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`,r.job.id):``}function f(){let e=r.job.thinking||``;return e?e.length<=ln?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function p(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 m(){let e=[];if(r.job.prompt&&e.push(`## ${X(`@WORKBENCH:用户提示词`)}\n\n${r.job.prompt}`),r.job.thinking&&e.push(`## ${X(`@WORKBENCH:Claude 思考`)}\n\n${r.job.thinking}`),r.job.output&&e.push(`## ${X(`@WORKBENCH:模型返回`)}\n\n${r.job.output}`),!e.length){N.warning(X(`@WORKBENCH:暂无内容可复制`));return}await p(e.join(`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
`))?N.success(X(`@WORKBENCH:已复制到剪贴板`)):N.error(X(`@WORKBENCH:复制失败`))}let h=D(()=>{let e=r.job.status;return e===`done`||e===`error`||e===`cancelled`}),g=D(()=>r.job.status===`cancelled`?`wb-log-summary__status--cancelled`:r.job.status===`error`?`wb-log-summary__status--error`:`wb-log-summary__status--done`),_=D(()=>r.job.status===`cancelled`?`⏹`:r.job.status===`error`?`✗`:`✓`),v=D(()=>r.job.status===`cancelled`?X(`@WORKBENCH:已停止`):r.job.status===`error`?X(`@WORKBENCH:执行出错`):X(`@WORKBENCH:执行完成`)),y=D(()=>Ne(r.job?.agent)),b=D(()=>bt(r.job?.agent));function C(e,t){return e===`running`||e===`pending`?t?`streaming`:`pending`:e===`error`?`error`:`done`}let T=D(()=>{let e=r.job,t=[],n=e.startedAt?new Date(e.startedAt).getTime():Date.now();if(e.prompt){let r=Nt(e.prompt);r&&t.push({id:`${e.id}-u`,role:`user`,content:r,status:`done`,createdAt:n})}let i=d(),a=f(),o=!!i,s=!!a,c=Et(e),l=c.length>0,u=o||s||l,p=C(e.status,u);return t.push({id:`${e.id}-a`,role:`assistant`,content:i,reasoning:s?a:void 0,reasoningStatus:s?o?`done`:p===`streaming`?`streaming`:`done`:void 0,toolCalls:l?c:void 0,status:p,error:p===`error`&&e.error||void 0,createdAt:n}),t}),E=F(null);V(()=>r.job.status,(e,t)=>{e===`running`&&t!==`running`&&(E.value=E.value??Date.now())});let ee=D(()=>{if(!E.value)return``;let e=E.value,t=r.job.endedAt?new Date(r.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`)}秒`}),O=F(!1),k=D(()=>!!(r.job.output&&r.job.output.length)),te=D(()=>Ht(r.job.output||``,r.job.id)),j=F(null);V(O,async e=>{e&&(await A(),j.value&&(j.value.scrollTop=j.value.scrollHeight))}),V(()=>(r.job.output||``).length,async()=>{O.value&&(await A(),j.value&&(j.value.scrollTop=j.value.scrollHeight))});function ne(){}let re=D(()=>h.value&&!!r.job.prompt);function ie(){i(`re-execute`,r.job)}return(t,r)=>(M(),z(`div`,{class:W([`wb-log-details`,{"is-running":u.value,"is-pending":e.job.status===`pending`,"is-finished":h.value}])},[o(`div`,{class:`wb-log-summary`,onClick:l,role:`button`,"aria-expanded":!c.value},[o(`span`,Wt,[e.job.status===`running`?(M(),z(`span`,Gt,[o(`span`,Kt,w(s(X)(`@WORKBENCH:正在执行…`)),1),r[1]||=o(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[o(`span`,{class:`wb-log-dots__dot`}),o(`span`,{class:`wb-log-dots__dot`}),o(`span`,{class:`wb-log-dots__dot`})],-1),ee.value?(M(),z(`span`,qt,w(ee.value),1)):x(``,!0)])):e.job.status===`pending`?(M(),z(`span`,Jt,[o(`span`,Yt,w(s(X)(`@WORKBENCH:排队中…`)),1),r[2]||=o(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[o(`span`,{class:`wb-log-dots__dot`}),o(`span`,{class:`wb-log-dots__dot`}),o(`span`,{class:`wb-log-dots__dot`})],-1)])):h.value?(M(),z(`span`,{key:2,class:W([`wb-log-summary__status`,g.value])},[o(`span`,Xt,w(_.value),1),o(`span`,Zt,w(v.value),1),ee.value?(M(),z(`span`,Qt,w(ee.value),1)):x(``,!0)],2)):(M(),z(`span`,$t,w(s(X)(`@WORKBENCH:查看执行日志`)),1))]),o(`span`,en,[o(`span`,tn,w((e.job.output||``).length)+` `+w(s(X)(`@WORKBENCH:字符`)),1),o(`button`,{type:`button`,class:`wb-log-copy`,title:s(X)(`@WORKBENCH:复制全部(含提示词与输出)`),"aria-label":s(X)(`@WORKBENCH:复制全部`),onClick:P(m,[`stop`])},` ⧉ `,8,nn)])],8,Ut),B(o(`div`,rn,[o(`div`,an,[S(s(Te),{messages:T.value,"assistant-name":y.value,"assistant-avatar":b.value,"show-avatar":!0,theme:s(n).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:s(X)(`@AGENT:计划`),raw:s(X)(`@AGENT:原始参数`)}},"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`])]),re.value?(M(),z(`footer`,on,[o(`button`,{type:`button`,class:`wb-chat__action`,title:s(X)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":s(X)(`@WORKBENCH:重新执行`),onClick:ie},` ↻ `,8,sn)])):x(``,!0),S(Le,{modelValue:O.value,"onUpdate:modelValue":r[0]||=e=>O.value=e,title:s(X)(`@WORKBENCH:模型返回 - 全屏查看`),size:`fullscreen`,type:`flex`,"close-on-click-modal":!1,"custom-class":`wb-log-fullscreen-dialog`,onClosed:ne},{default:I(()=>[o(`div`,{ref_key:`fullscreenContainerRef`,ref:j,class:`wb-log-fullscreen`},[k.value?(M(),a(s(Ee),{key:0,source:te.value,class:`wb-log-fullscreen__render`},null,8,[`source`])):(M(),z(`div`,cn,w(s(X)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[K,!c.value]])],2))}}),[[`__scopeId`,`data-v-4b1fd701`]]);t(),U(),C(),R();var dn={class:`exec-logs`},fn={class:`exec-logs__head`},pn={class:`exec-logs__title-block`},mn={class:`exec-logs__stats`},hn={class:`exec-logs__head-actions`},gn={class:`exec-logs__config`},_n={class:`exec-logs__config-label`},vn={class:`exec-logs__config-field`},yn={class:`exec-logs__config-name`},bn={class:`exec-logs__config-field`},xn={class:`exec-logs__config-name`},Sn={class:`exec-logs__filter`},Cn={key:0,class:`exec-logs__batch-meta`},wn={key:0,class:`exec-logs__batch`},Tn={class:`exec-logs__list`},En={key:0,class:`exec-logs__empty`},Dn={class:`exec-logs__empty-art`,"aria-hidden":`true`},On={class:`exec-logs__empty-title`},kn={class:`exec-logs__empty-hint`},An={class:`exec-card__head`},jn=[`title`],Mn={class:`exec-card__meta`},Nn={key:0,class:`exec-card__task`},Pn={key:1,class:`exec-card__time`},Fn={key:2,class:`exec-card__exit`},In=[`title`,`onClick`],Ln={key:0,class:`exec-card__error`},Rn={key:1,class:`exec-logs__pager`},zn=50,Bn=Z(m({__name:`ExecutionLogManager`,setup(t){function n(e){return e instanceof Error?e.message:String(e)}let r=F([]),i=F(0),a=q({count:0,sizeMB:0,byStatus:{}}),c=F(!1),u=F(new Set),d=q({q:``,status:``,page:1}),m=F({maxCount:500,maxSizeMB:256}),g=q({maxCount:500,maxSizeMB:256}),_=F(!1),v=[{value:`pending`,label:X(`@WORKBENCH:排队中`)},{value:`running`,label:X(`@WORKBENCH:执行中`)},{value:`done`,label:X(`@WORKBENCH:已完成`)},{value:`error`,label:X(`@WORKBENCH:出错`)},{value:`cancelled`,label:X(`@WORKBENCH:已取消`)}],C=D(()=>r.value.length>0&&r.value.every(e=>u.value.has(e.id))),T=D(()=>r.value.some(e=>u.value.has(e.id))&&!C.value);async function E(){c.value=!0;try{let e=new URLSearchParams;d.q&&e.set(`q`,d.q),d.status&&e.set(`status`,d.status),e.set(`limit`,String(zn)),e.set(`offset`,String((d.page-1)*zn));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);r.value=t.jobs,i.value=t.total,a.count=t.stats.count,a.sizeMB=t.stats.sizeMB,a.byStatus=t.stats.byStatus;let n=new Set(r.value.map(e=>e.id));for(let e of Array.from(u.value))n.has(e)||u.value.delete(e)}catch(e){N.error(X(`@WORKBENCH:加载失败`)+`: `+n(e))}finally{c.value=!1}}async function ee(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(m.value=e.config,g.maxCount=e.config.maxCount,g.maxSizeMB=e.config.maxSizeMB)}catch{}}async function k(){_.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:g.maxCount,maxSizeMB:g.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);m.value=e.config,N.success(X(`@WORKBENCH:已保存策略`)),await E()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+n(e))}finally{_.value=!1}}function A(){d.page=1,E()}function te(){d.q=``,d.status=``,d.page=1,E()}function j(e,t){t?u.value.add(e):u.value.delete(e),u.value=new Set(u.value)}function ie(e){if(e)for(let e of r.value)u.value.add(e.id);else for(let e of r.value)u.value.delete(e.id);u.value=new Set(u.value)}function ae(e){N.info(X(`@WORKBENCH:请到工作台主面板的对应任务上点击「重新执行」`))}async function oe(e){try{await de.confirm(X(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),X(`@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`);u.value.delete(e),u.value=new Set(u.value),await E()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+n(e))}}async function se(){let e=Array.from(u.value);if(e.length!==0){try{await de.confirm(X(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),X(`@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`);N.success(X(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),u.value=new Set,await E()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+n(e))}}}async function ce(){let e=a.count;if(e!==0){try{await de.confirm(X(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),X(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:X(`@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`);N.success(X(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),u.value=new Set,await E()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+n(e))}}}function P(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 ne(()=>{E(),ee()}),(t,n)=>{let m=Ce,ee=xe,D=O,ne=l,N=p,F=y,L=h,R=ye,le=he;return M(),z(`div`,dn,[o(`header`,fn,[o(`div`,pn,[o(`span`,mn,w(s(X)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:a.count,size:a.sizeMB})),1)]),o(`div`,hn,[S(m,{icon:s(f),size:`small`,loading:c.value,onClick:E},{default:I(()=>[b(w(s(X)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),S(m,{type:`danger`,plain:``,size:`small`,disabled:a.count===0,onClick:ce},{default:I(()=>[b(w(s(X)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),o(`div`,gn,[o(`span`,_n,w(s(X)(`@WORKBENCH:保存策略`)),1),o(`span`,vn,[o(`span`,yn,w(s(X)(`@WORKBENCH:最大条数`)),1),S(ee,{modelValue:g.maxCount,"onUpdate:modelValue":n[0]||=e=>g.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),o(`span`,bn,[o(`span`,xn,w(s(X)(`@WORKBENCH:最大体积 (MB)`)),1),S(ee,{modelValue:g.maxSizeMB,"onUpdate:modelValue":n[1]||=e=>g.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),S(m,{type:`primary`,size:`small`,loading:_.value,onClick:k},{default:I(()=>[b(w(s(X)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),o(`div`,Sn,[S(D,{modelValue:d.q,"onUpdate:modelValue":n[2]||=e=>d.q=e,placeholder:s(X)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:Y(A,[`enter`]),onClear:A},null,8,[`modelValue`,`placeholder`]),S(N,{modelValue:d.status,"onUpdate:modelValue":n[3]||=e=>d.status=e,placeholder:s(X)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:A},{default:I(()=>[(M(),z(J,null,e(v,e=>S(ne,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),S(m,{size:`small`,onClick:te},{default:I(()=>[b(w(s(X)(`@WORKBENCH:重置`)),1)]),_:1}),n[5]||=o(`span`,{class:`exec-logs__filter-spacer`},null,-1),u.value.size>0?(M(),z(`span`,Cn,w(s(X)(`@WORKBENCH:已选择 {count} 项`,{count:u.value.size})),1)):x(``,!0)]),u.value.size>0?(M(),z(`div`,wn,[S(F,{"model-value":C.value,indeterminate:T.value,onChange:ie},{default:I(()=>[b(w(C.value?s(X)(`@WORKBENCH:取消全选`):s(X)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),S(m,{type:`danger`,size:`small`,onClick:se},{default:I(()=>[b(w(s(X)(`@WORKBENCH:批量删除`)),1)]),_:1})])):x(``,!0),B((M(),z(`div`,Tn,[!c.value&&r.value.length===0?(M(),z(`div`,En,[o(`div`,Dn,[S(L,null,{default:I(()=>[S(s(ge))]),_:1})]),o(`div`,On,w(s(X)(`@WORKBENCH:暂无执行日志`)),1),o(`div`,kn,w(s(X)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):x(``,!0),(M(!0),z(J,null,e(r.value,e=>(M(),z(`article`,{key:e.id,class:W([`exec-card`,{"is-selected":u.value.has(e.id)}])},[o(`header`,An,[S(F,{"model-value":u.value.has(e.id),onChange:t=>j(e.id,t)},null,8,[`model-value`,`onChange`]),o(`span`,{class:`exec-card__status`,style:re({color:s(St)(e.status),borderColor:s(St)(e.status)})},w(s(xt)(e.status)),5),o(`span`,{class:`exec-card__title`,title:e.title||s(X)(`@WORKBENCH:无标题`)},w(e.title||s(X)(`@WORKBENCH:无标题`)),9,jn),n[6]||=o(`span`,{class:`exec-card__spacer`},null,-1),o(`span`,Mn,[e.taskTitle?(M(),z(`span`,Nn,`📁 `+w(e.taskTitle),1)):x(``,!0),e.startedAt?(M(),z(`span`,Pn,`⏱ `+w(P(e.startedAt,e.endedAt)),1)):x(``,!0),e.exitCode===null?x(``,!0):(M(),z(`span`,Fn,`exit `+w(e.exitCode),1))]),o(`button`,{type:`button`,class:`exec-card__del`,title:s(X)(`@WORKBENCH:删除`),onClick:t=>oe(e.id)},`×`,8,In)]),e.error?(M(),z(`p`,Ln,`⚠ `+w(e.error),1)):x(``,!0),S(un,{job:e,onReExecute:ae},null,8,[`job`])],2))),128))])),[[le,c.value]]),i.value>zn?(M(),z(`footer`,Rn,[S(R,{"current-page":d.page,"onUpdate:currentPage":n[4]||=e=>d.page=e,"page-size":zn,total:i.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:E},null,8,[`current-page`,`total`])])):x(``,!0)])}}}),[[`__scopeId`,`data-v-dd1760f3`]]);U();var Vn=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`]),Hn=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,Un=20971520,Wn=3840,Gn=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/webp`,`image/bmp`]);function Kn(e){if(e.size<=3670016)return!1;let t=String(e.type||``).toLowerCase();return t?Gn.has(t):/\.(png|jpe?g|webp|bmp)$/i.test(e.name)}function qn(e,t){return`${String(e||`attachment`).replace(/\.[^./\\]+$/,``)}.${t}`}async function Jn(e){if(typeof createImageBitmap==`function`)try{let t=await createImageBitmap(e);return{source:t,width:t.width,height:t.height,release:()=>t.close()}}catch{}return await new Promise(t=>{let n=URL.createObjectURL(e),r=new Image;r.onload=()=>t({source:r,width:r.naturalWidth,height:r.naturalHeight,release:()=>URL.revokeObjectURL(n)}),r.onerror=()=>{URL.revokeObjectURL(n),t(null)},r.src=n})}function Yn(e,t,n){return new Promise(r=>{try{e.toBlob(e=>r(e&&e.type===t?e:null),t,n)}catch{r(null)}})}async function Xn(e){let t=await Jn(e);if(!t)return null;try{let n=[{edge:Wn,quality:.95},{edge:Wn,quality:.85},{edge:2560,quality:.85},{edge:1920,quality:.8}],r=null;for(let e of n){let n=Math.min(1,e.edge/Math.max(t.width,t.height)),i=Math.max(1,Math.round(t.width*n)),a=Math.max(1,Math.round(t.height*n)),o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)return null;s.drawImage(t.source,0,0,i,a);let c=await Yn(o,`image/webp`,e.quality)||await Yn(o,`image/jpeg`,e.quality);if(!c)return null;if((!r||c.size<r.size)&&(r=c),c.size<=3670016)break}return!r||r.size>=e.size?null:{blob:r,ext:r.type===`image/webp`?`webp`:`jpg`}}catch{return null}finally{t.release()}}function Zn(){let e=F({}),t=F(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===`draft`?`draft`:`task-${e.task?.id??``}`}function a(e){if(e.kind===`draft`)return e.list;let t=e.task?.attachments;return Array.isArray(t)?t:[]}function o(e,t){if(e.kind===`draft`){e.replace(t);return}e.task&&(e.task.attachments=t)}function s(e){return e.kind===`draft`?`/api/workbench/orchestrator/attachments`:`/api/workbench/tasks/${e.task?.id??``}/attachments`}function c(e,t){return e.kind===`draft`?`/api/workbench/orchestrator/attachments/${t}`:`/api/workbench/tasks/${e.task?.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(!Vn.has(n.type)&&!n.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){N.error(`${X(`@WORKBENCH:不支持的文件类型`)}(${n.name})`);return}if(a(t).find(e=>e.originalName===n.name&&e.size===n.size)){N.info(`${n.name} ${X(`@WORKBENCH:已存在,已复用`)}`);return}let c=i(t);e.value[c]=!0;try{let e=n;if(Kn(n)){let t=await Xn(n);t&&(e=r(t.blob,qn(n.name,t.ext)),N.info(X(`@WORKBENCH:图片过大,已压缩后上传:{from} → {to}`,{from:g(n.size),to:g(e.size)})))}if(e.size>20971520){N.error(`「${n.name}」${X(`@WORKBENCH:超过 {size} 限制`,{size:g(Un)})}`);return}let i=await fetch(s(t),{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":e.name,"X-Mime-Type":e.type||`application/octet-stream`},body:e}).then(e=>e.json());if(i.success){let n=a(t);n.push(i.attachment),o(t,n),N.success(`${X(`@WORKBENCH:已添加:`)}${e.name}`)}else N.error(i.error||X(`@WORKBENCH:上传失败`))}catch(e){N.error(X(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{e.value[c]=!1}}async function f(e,t){try{await de.confirm(X(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),X(`@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)),N.success(X(`@WORKBENCH:已删除`))):N.error(n.error||X(`@WORKBENCH:删除失败`))}function p(e){let t=document.createElement(`input`);t.type=`file`,t.accept=Hn,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<1048576?`${(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}}t();var Qn=`__simple`,$n=65536;function er(e,t){function n(t){if(!t)return[];let n=`${t.id}${Qn}`;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:D(()=>{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();if(t.prompt){let e=Nt(t.prompt);e&&r.push({id:`${t.id}-u`,role:`user`,content:e,status:`done`,createdAt:a})}let o=t.output||``,s=t.thinking||``,c=o.length>$n?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>$n?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=Et(t),p=f.length>0,m=u||d||p,h;if(!i)h=`done`;else{let e=t.status;h=e===`running`||e===`pending`?m?`streaming`:`pending`:e===`error`?`error`:`done`}r.push({id:`${t.id}-a`,role:`assistant`,content:Ht(c,t.id),reasoning:d?l:void 0,reasoningStatus:d?!i&&u||u?`done`:h===`streaming`?`streaming`:`done`:void 0,toolCalls:p?f:void 0,status:h,error:h===`error`&&t.error||void 0,createdAt:a})}),r}),simpleAllJobsFor:n,simpleJobFor:r,simpleJobState:i,SIMPLE_SUB_ID_SUFFIX:Qn,MAX_LOG_DISPLAY_SIMPLE:$n}}function tr(e){let t=e?new Date(e):new Date;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())}`}function nr(e,t=120){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function rr(e){let t=(e.match(/`+/g)||[]).reduce((e,t)=>Math.max(e,t.length),0),n="`".repeat(Math.max(3,t+1));return`${n}\n${e}\n${n}`}function ir(e,t){return`### ${e}\n\n${t.trim()}`}function ar(e){let t=[];return e.forEach((e,n)=>{let r=e.name||X(`@WORKBENCH:工具`),i=nr(e.argsPreview||``);t.push(`${n+1}. **${r}**${i?` — \`${i}\``:``}`);let a=(e.status===`error`?e.error:e.result)||e.result||e.error||``;a.trim()&&t.push(``,rr(a.trim()))}),t.join(`
|
|
12
|
+
`)}function or(e,t={}){let n=Array.isArray(e)?e.filter(Boolean):[],r=[];if(n.forEach((e,t)=>{let n=[],i=Nt(e.prompt);i&&n.push(ir(X(`@WORKBENCH:用户提示词`),i));let a=(e.thinking||``).trim();a&&n.push(ir(X(`@WORKBENCH:Claude 思考`),a));let o=ar(Et(e));o&&n.push(ir(X(`@WORKBENCH:工具调用`),o));let s=(e.output||``).trim();s&&n.push(ir(X(`@WORKBENCH:模型返回`),s));let c=(e.error||e.agentError||``).trim();if(c&&n.push(ir(X(`@WORKBENCH:出错`),c)),n.length===0)return;let l=[Ne(e.agent),xt(e.status),tr(e.startedAt)].filter(Boolean);r.push(`## ${X(`@WORKBENCH:第 {n} 轮`,{n:t+1})}\n\n*${l.join(` · `)}*\n\n${n.join(`
|
|
13
|
+
|
|
14
|
+
`)}`)}),r.length===0)return``;let i=[`# ${(t.title||``).trim()||X(`@WORKBENCH:未命名任务`)}`],a=(t.projectName||``).trim();return a&&i.push(``,`- ${X(`@WORKBENCH:项目:{name}`,{name:a})}`),i.push(`- ${X(`@WORKBENCH:导出时间:{time}`,{time:tr((t.now||new Date).toISOString())})}`),`${i.join(`
|
|
15
|
+
`)}\n\n---\n\n${r.join(`
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
`)}\n`}function sr(e,t,n,r){function i(){return{executor:r.getExecutor()}}async function a(e){if(!n.value||n.value.id!==e.id)return!0;let i=t.value.find(t=>t.id===e.id);return i&&i.title===n.value.title&&i.desc===n.value.desc?!0:await r.persistTask(!1)}async function o(e){if(!await a(e))return;await r.clearJobsByTask(e.id);let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/run`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i())}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));t.success?N.success(t.message||X(`@WORKBENCH:已加入执行队列`)):N.error(t.error||X(`@WORKBENCH:执行失败`))}async function s(t,n){let r=e.value.filter(e=>e.taskId===t.id).slice(-1)[0];if(!r){N.error(X(`@WORKBENCH:没有可续接的会话`));return}let i=Array.isArray(t.attachments)?t.attachments:[],a=await fetch(`/api/workbench/jobs/${r.id}/continue`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({userMessage:n,attachments:i})}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));a.success?N.success(a.message||X(`@WORKBENCH:已加入续接队列`)):N.error(a.error||X(`@WORKBENCH:续接失败`))}async function c(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 s(e,n)}}async function l(e){let n=t.value.find(t=>t.id===e.taskId)||t.value.find(t=>t.id===String(e.subId||``).replace(/__simple(?:__r\d+)?$/,``));if(!n){N.error(X(`@WORKBENCH:找不到对应任务,无法重新执行`));return}await o(n)}async function u(e){try{await de.confirm(X(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),X(`@WORKBENCH:停止执行`),{confirmButtonText:X(`@WORKBENCH:停止`),cancelButtonText:X(`@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?N.success(X(`@WORKBENCH:已发送停止信号`)):N.error(t.error||X(`@WORKBENCH:停止失败`))}async function d(){if(!n.value)return;let t=n.value,r=e.value.filter(e=>e.taskId===t.id),i=r.filter(e=>e.status===`running`||e.status===`pending`).length,a=r.length===0?X(`@WORKBENCH:当前任务还没有执行内容,确认仍要清空?`):X(`@WORKBENCH:将清空 {m} 条执行记录,任务描述/附件保留。`,{m:r.length});try{await de.confirm(a,X(`@WORKBENCH:清空执行内容`),{confirmButtonText:X(`@WORKBENCH:清空`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}if(i>0){N.warning(X(`@WORKBENCH:任务正在执行,请先停止`));return}let o=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)}));o?.success?(e.value=e.value.filter(e=>e.taskId!==t.id),N.success(o.message||X(`@WORKBENCH:已清空执行内容`))):N.error(o?.error||X(`@WORKBENCH:清空失败`))}return{runTask:o,continueChat:s,onContinueSendFromChat:c,onReExecuteJob:l,cancelJob:u,clearExecutionForSelectedTask:d}}t();function cr(){let e=Pe(),t=Fe(),n=D({get:()=>e.resolvedTaskExecutor,set:t=>{je(t)&&e.setLastTaskExecutor(t)}}),r=D(()=>({claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable})),i=D(()=>Me.some(e=>r.value[e.id])),a=D(()=>r.value[n.value]?n.value:Object.keys(r.value).find(e=>r.value[e])??n.value);function o(e){r.value[e]&&(n.value=e)}function s(e){return t.executorModelText(e)}function c(e){return[s(e),t.executorModelDetail(e)].filter(Boolean).join(` · `)}return{selected:n,active:a,availability:r,hasAnyExecutor:i,choose:o,executorModelText:s,executorModelTitle:c}}U();function lr(){let e=F([]),t=F([]),n=F({path:``,name:``});function r(n,r){if(n===`hello`){t.value=r.jobs||[];return}if(n===`job:update`){let e=r,n=t.value.findIndex(t=>t.id===e.id);n>=0?t.value[n]=e:t.value.push(e);return}if(n===`job:thinking-delta`||n===`job:output-delta`){let e=n===`job:thinking-delta`?`thinking`:`output`,i=r?.delta||``;if(!i)return;let a=t.value.findIndex(e=>e.id===r.id);if(a<0)return;let o=t.value[a][e]||``;t.value[a][e]=o+i;return}if(n===`job:toolcalls`){let e=Array.isArray(r?.updates)?r.updates:[];if(!e.length)return;let n=t.value.findIndex(e=>e.id===r.id);if(n<0)return;let i=t.value[n];for(let t of e){if(!t||!t.id)continue;Array.isArray(i.toolCalls)||(i.toolCalls=[]);let e=i.toolCalls.findIndex(e=>e.id===t.id);e>=0?i.toolCalls[e]={...i.toolCalls[e],...t}:i.toolCalls.push(t)}return}if(n===`task:update`){let t=e.value.findIndex(e=>e.id===r.id);t>=0&&(e.value[t]=r)}if(n===`tasks:reordered`){if(Array.isArray(r?.tasks)){if(r.tasks.length<e.value.length){console.warn(`[SSE tasks:reordered] 数据丢失风险:当前 ${e.value.length} 个任务,服务端只返回 ${r.tasks.length} 个,拒绝覆盖`);return}e.value=r.tasks}return}n===`task:error`&&N.error(r.error||X(`@WORKBENCH:执行出错`))}let i=null;function a(){i&&=(i.close(),null),i=new EventSource(`/api/workbench/events`),i.onmessage=e=>{try{let t=JSON.parse(e.data);r(t.event,t.payload)}catch{}},i.onerror=()=>{i&&=(i.close(),null),setTimeout(a,3e3)}}function o(){i&&=(i.close(),null)}async function s(t){let n=await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}));e.value=n.tasks||[],t?.()}async function c(){let e=await fetch(`/api/workbench/current-project`).then(e=>e.json()).catch(()=>({}));e&&typeof e.projectPath==`string`&&(n.value={path:e.projectPath,name:e.projectName||``})}async function l(){let e=await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}));t.value=e.jobs||[]}async function u(e){try{let n=await fetch(`/api/workbench/jobs/by-task/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());return n?.success?(t.value=t.value.filter(t=>t.taskId!==e),n.removed||0):(console.warn(`[clearJobsByTask] failed:`,n?.error),0)}catch(e){return console.warn(`[clearJobsByTask] error:`,e),0}}async function d(e){let t={title:``,desc:``};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:(N.error(e.error||X(`@WORKBENCH:保存失败`)),null)}catch{return N.error(X(`@WORKBENCH:保存失败`)),null}}return{tasks:e,jobs:t,currentProject:n,applyJobEvent:r,connectSSE:a,disconnectSSE:o,loadTasks:s,loadCurrentProject:c,loadJobs:l,clearJobsByTask:u,createTask:d}}U(),t();var ur=`__no_project__`,dr=`wb.collapsedGroupPaths.v1`,fr=`wb.seenGroupPaths.v1`;function pr(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 mr(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function hr(e,t){let n=F(pr(dr)),r=F(pr(fr));V(n,e=>mr(dr,e),{deep:!1}),V(r,e=>mr(fr,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=D(()=>{let r=e.value,i=new Map;for(let e of r){let t=Q(e.projectPath)||ur;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=Q(t.value.path),o=Array.from(i.keys()).sort((e,t)=>e===a?-1:t===a||e===ur?1:t===ur?-1:e.localeCompare(t));return{groups:o.map(e=>({path:e,label:e===ur?X(`@WORKBENCH:未关联项目`):e,tasks:i.get(e)})),hasMultiple:o.length>1||o.length===1&&n.value.has(o[0])}});function s(e){if(!e||e===ur)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}let c=D(()=>`${Q(t.value.path)}|${o.value.groups.map(e=>e.path).join(`
|
|
20
|
+
`)}`);return V(c,()=>{let e=Q(t.value.path);if(!e)return;let i=new Set(n.value),a=new Set(r.value),s=!1;for(let t of o.value.groups)a.has(t.path)||(a.add(t.path),t.path!==e&&(i.add(t.path),s=!0));s&&(n.value=i),r.value=a},{immediate:!0}),{groupedTasksList:o,isGroupCollapsed:i,toggleGroupCollapsed:a,shortProjectLabel:s}}t(),U(),C(),R();var gr={class:`wb-sidebar`},_r={class:`wb-section`},vr=[`disabled`],yr=[`aria-expanded`,`title`,`onClick`,`onKeydown`],br=[`title`],xr={class:`wb-pill wb-task-group__count`},Sr=[`data-task-id`,`data-group-path`,`title`,`aria-pressed`,`onClick`,`onKeydown`,`onMousedown`],Cr={class:`wb-task-item__body`},wr=[`title`],Tr=[`title`],Er={class:`wb-task-item__action-group`},Dr=[`title`,`aria-label`,`onClick`],Or=[`onClick`,`title`,`aria-label`],kr={key:0,class:`wb-empty wb-empty--rich`},Ar={class:`wb-empty__art`,"aria-hidden":`true`},jr={class:`wb-empty__title`},Mr={class:`wb-empty__hint`},Nr={class:`wb-empty__cta`},Pr=5,Fr=Z(m({__name:`WorkbenchSidebar`,props:{tasks:{},selectedTaskId:{},currentProject:{},creatingTask:{type:Boolean},isTaskRunning:{type:Function}},emits:[`select-task`,`delete-task`,`copy-task`,`create-task`,`reorder-tasks`],setup(t,{emit:n}){let r=t,i=n,c=D(()=>r.currentProject),{groupedTasksList:l,isGroupCollapsed:u,toggleGroupCollapsed:d,shortProjectLabel:f}=hr(D(()=>r.tasks),c),p=D(()=>Q(r.currentProject.path));function m(e){return!!e.projectPath&&Q(e.projectPath)!==p.value}function g(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function _(e){let t=g(e),n=X(`@WORKBENCH:拖动排序提示`);return t?`${t} · ${n}`:n}function v(e){return r.isTaskRunning(e)}let y=F(null),C=F(null),T=F(null),E=F(null),O=F(null),k=null;function A(){y.value=null,C.value=null,T.value=null,E.value=null,O.value=null,k=null}function te(e,t,n,r){e.button===0&&(k={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,ne),window.addEventListener(`mouseup`,re,{once:!0}))}function ne(e){if(!k)return;if(y.value===null){if(Math.abs(e.clientY-k.pointerY)<Pr)return;y.value=k.taskId,C.value=k.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){T.value=null,E.value=null,O.value=null;return}let r=n.getAttribute(`data-task-id`),i=n.getAttribute(`data-group-path`);if(!r||!i)return;if(i!==C.value){T.value=null,E.value=null,O.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;T.value=r,E.value=i,O.value=e.clientY<o?`before`:`after`}function re(e){if(window.removeEventListener(`mousemove`,ne),document.body.style.userSelect=``,!k){A();return}let t=k.groupPath,n=k.taskId,r=T.value,a=O.value,o=E.value;if(A(),!r||!a||o!==t)return;let s=l.value.groups.find(e=>e.path===t);if(!s)return;let c=s.tasks.map(e=>e.id),u=c.indexOf(n);if(u<0)return;c.splice(u,1);let d=c.indexOf(r)+ +(a===`after`);c.splice(d,0,n),i(`reorder-tasks`,{groupPath:t,orderedIds:c})}return(n,r)=>{let c=h,C=Ce;return M(),z(`aside`,gr,[o(`section`,_r,[o(`button`,{class:`wb-new-btn`,disabled:t.creatingTask,onClick:r[0]||=e=>i(`create-task`)},[S(c,{class:`wb-new-btn__icon`},{default:I(()=>[S(s(we))]),_:1}),o(`span`,null,w(s(X)(`@WORKBENCH:新建任务`)),1),r[4]||=o(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,vr),o(`ul`,{class:W([`wb-task-list`,{"is-grouped":s(l).hasMultiple}])},[(M(!0),z(J,null,e(s(l).groups,n=>(M(),z(J,{key:n.path},[s(l).hasMultiple?(M(),z(`li`,{key:0,class:W([`wb-task-group__head`,{"is-current":n.path===p.value,"is-collapsed":s(u)(n.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!s(u)(n.path),title:s(u)(n.path)?s(X)(`@WORKBENCH:展开`):s(X)(`@WORKBENCH:收起`),onClick:e=>s(d)(n.path),onKeydown:[Y(P(e=>s(d)(n.path),[`prevent`]),[`enter`]),Y(P(e=>s(d)(n.path),[`prevent`]),[`space`])]},[S(c,{class:`wb-task-group__caret`},{default:I(()=>[(M(),a(me(s(u)(n.path)?s(ie):s(j))))]),_:2},1024),S(c,{class:`wb-task-group__icon`},{default:I(()=>[S(s(ee))]),_:1}),o(`span`,{class:`wb-task-group__name`,title:n.path===p.value?t.currentProject.path:n.label},w(n.path===p.value?t.currentProject.name:s(f)(n.label)),9,br),o(`span`,xr,w(n.tasks.length),1)],42,yr)):x(``,!0),s(u)(n.path)?x(``,!0):(M(!0),z(J,{key:1},e(n.tasks,e=>(M(),z(`li`,{key:e.id,class:W([`wb-task-item`,{active:e.id===t.selectedTaskId,"is-other-project":m(e),"is-running":v(e),"is-dragging":y.value===e.id,"is-drop-before":T.value===e.id&&O.value===`before`,"is-drop-after":T.value===e.id&&O.value===`after`}]),"data-task-id":e.id,"data-group-path":n.path,title:_(e),role:`button`,tabindex:`0`,"aria-pressed":e.id===t.selectedTaskId,onClick:t=>i(`select-task`,e),onKeydown:[Y(P(t=>i(`select-task`,e),[`prevent`]),[`enter`]),Y(P(t=>i(`select-task`,e),[`prevent`]),[`space`])],onMousedown:t=>te(t,e,n.path,t.currentTarget)},[o(`div`,Cr,[o(`div`,{class:`wb-task-item__title`,title:g(e)},w(g(e)),9,wr)]),v(e)?(M(),z(`span`,{key:0,class:`wb-task-item__running-dot`,title:s(X)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,Tr)):x(``,!0),o(`div`,Er,[o(`button`,{class:`wb-task-item__copy`,title:s(X)(`@WORKBENCH:复制任务`),"aria-label":s(X)(`@WORKBENCH:复制任务`),onClick:P(t=>i(`copy-task`,e),[`stop`]),onKeydown:r[1]||=P(()=>{},[`stop`])},[S(c,null,{default:I(()=>[S(s(L))]),_:1})],40,Dr),v(e)?x(``,!0):(M(),z(`button`,{key:0,class:`wb-task-item__del`,onClick:P(t=>i(`delete-task`,e),[`stop`]),onKeydown:r[2]||=P(()=>{},[`stop`]),title:s(X)(`@WORKBENCH:删除`),"aria-label":s(X)(`@WORKBENCH:删除`)},[S(c,null,{default:I(()=>[S(s(H))]),_:1})],40,Or))])],42,Sr))),128))],64))),128)),t.tasks.length===0?(M(),z(`li`,kr,[o(`div`,Ar,[S(c,null,{default:I(()=>[S(s(le))]),_:1})]),o(`div`,jr,w(s(X)(`@WORKBENCH:暂无任务`)),1),o(`div`,Mr,w(s(X)(`@WORKBENCH:点击上方按钮新建`)),1),o(`div`,Nr,[S(C,{type:`primary`,size:`small`,icon:s(we),loading:t.creatingTask,onClick:r[3]||=e=>i(`create-task`)},{default:I(()=>[b(w(s(X)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])])])):x(``,!0)],2)])])}}}),[[`__scopeId`,`data-v-cb578d87`]]);U();function Ir(){let e=F([]),t=F([]),n=F(``),r=F(!1),i=F(!1);async function a(a=!1){a||(r.value=!0);try{let r=await fetch(`/api/workbench/projects`,{cache:`no-store`}).then(e=>e.json());return r?.success?(e.value=Array.isArray(r.projects)?r.projects:[],t.value=Array.isArray(r.tasks)?r.tasks:[],n.value=r.currentProjectPath||``,i.value=!0,!0):(a||N.error(r?.error||X(`@WORKBENCH:读取项目列表失败`)),!1)}catch(e){return a||N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}finally{r.value=!1}}async function o(e){if(!e)return{ok:!1,keptTasks:0};try{let t=await fetch(`/api/workbench/projects/remove`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}).then(e=>e.json()).catch(()=>null);return t?.success?{ok:!0,keptTasks:Number.isFinite(t.keptTasks)?t.keptTasks:0}:(N.error(t?.error||X(`@WORKBENCH:移除项目失败`)),{ok:!1,keptTasks:0})}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),{ok:!1,keptTasks:0}}}return{projects:e,boardTasks:t,currentProjectPath:n,loading:r,loaded:i,loadProjects:a,removeProject:o}}var Lr=[0,5,10,15,30,60].map(e=>e*60*1e3),Rr=6e5;function zr(e){let t=Number(e);return Lr.includes(t)?t:Rr}function Br(e){return e?e>=36e5?`@WORKBENCH:每 {n} 小时报告`:`@WORKBENCH:每 {n} 分钟报告`:`@WORKBENCH:关闭自动报告`}function Vr(e){return e?{n:Math.round(e>=36e5?e/36e5:e/6e4)}:{}}function Hr(e){switch(e){case`NO_MODEL`:return`@WORKBENCH:没有可用的 AI 模型,只记录了任务事实`;case`LLM_TIMEOUT`:return`@WORKBENCH:生成超时,只记录了任务事实`;case`LLM_EMPTY`:return`@WORKBENCH:模型没有返回正文,只记录了任务事实`;case`LLM_FAILED`:return`@WORKBENCH:生成失败,只记录了任务事实`;default:return`@WORKBENCH:生成失败,只记录了任务事实`}}function Ur(e){if(e==null||e===``)return null;let t=Number(e);if(!Number.isFinite(t))return null;let n=Math.round(t);return n>=0&&n<=100?n:null}function Wr(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?null:Math.floor(e)}var Gr=`@WORKBENCH:AI 估计`,Kr=`@WORKBENCH:百分比是主 Agent 根据任务思考与工具调用推测的大致估计,不是精确进度`;U();var qr=1e5;function Jr(){let e=F(!0),t=F([]),n=F([]),r=F(qr),i=F([]),a=F(null),o=F(!1),s=F(!1),c=F(!1),l=F(``),u=F({}),d=F([]),f=F(!1),p=F(!1),m=F(Rr);async function h(s=!1){try{let c=await fetch(`/api/workbench/orchestrator`,{cache:`no-store`}).then(e=>e.json());return c?.success?(e.value=c.active!==!1,Number.isInteger(c.maxInstructionChars)&&c.maxInstructionChars>0&&(r.value=c.maxInstructionChars),t.value=Array.isArray(c.instructions)?c.instructions:[],n.value=Array.isArray(c.activity)?c.activity:[],i.value=Array.isArray(c.running)?c.running:[],Ge().setRunning(i.value.length),a.value=c.updatedAt||null,l.value=typeof c.defaultPrompt==`string`?c.defaultPrompt:``,u.value=c.projectPrompts&&typeof c.projectPrompts==`object`?c.projectPrompts:{},m.value=zr(c.reportIntervalMs),o.value=!0,!0):(s||N.error(c?.error||X(`@WORKBENCH:读取编排状态失败`)),!1)}catch(e){return s||N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function g(e=!1){if(f.value)return!1;f.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/reports`,{cache:`no-store`}).then(e=>e.json());return t?.success?(d.value=Array.isArray(t.reports)?t.reports:[],!0):(e||N.error(t?.error||X(`@WORKBENCH:读取进度报告失败`)),!1)}catch(t){return e||N.error(X(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{f.value=!1}}async function _(){if(p.value)return null;p.value=!0;try{let e=String(Pe().locale||``).startsWith(`en`)?`en`:`zh`,t=await fetch(`/api/workbench/orchestrator/report`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({locale:e})}).then(e=>e.json());return t?.success?t.report?(d.value=[t.report,...d.value].slice(0,20),t.report):(N.info(X(`@WORKBENCH:当前没有正在执行的任务,没有可汇报的进度`)),null):(N.error(t?.error||X(`@WORKBENCH:生成进度报告失败`)),null)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{p.value=!1}}async function v(e){try{let t=await fetch(`/api/workbench/orchestrator/report-interval`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({intervalMs:e})}).then(e=>e.json());return t?.success?(m.value=zr(t.reportIntervalMs),!0):(N.error(t?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function y(e){try{let t=await fetch(`/api/workbench/orchestrator/default-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:e})}).then(e=>e.json());return t?.success?(l.value=typeof t.defaultPrompt==`string`?t.defaultPrompt:``,N.success(X(`@WORKBENCH:已保存全局预设提示词`)),!0):(N.error(t?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function b(e,t){try{let n=await fetch(`/api/workbench/orchestrator/project-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({projectPath:e,prompt:t})}).then(e=>e.json());return n?.success?(u.value=n.projectPrompts&&typeof n.projectPrompts==`object`?n.projectPrompts:{},N.success(X(`@WORKBENCH:已保存项目预设提示词`)),!0):(N.error(n?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function x(t){if(s.value)return!1;let n=e.value;e.value=t,s.value=!0;try{let r=await fetch(`/api/workbench/orchestrator/state`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({active:t})}).then(e=>e.json());return r?.success?(e.value=r.active!==!1,N.success(e.value?X(`@WORKBENCH:已恢复调度`):X(`@WORKBENCH:已暂停调度,派发将只建任务不执行`)),!0):(e.value=n,N.error(r?.error||X(`@WORKBENCH:切换调度状态失败`)),!1)}catch(t){return e.value=n,N.error(X(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{s.value=!1}}async function S(e){if(c.value)return null;c.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/dispatch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e.text,projectPath:e.projectPath||``,autoRun:e.autoRun!==!1,useDefaultPrompt:e.useDefaultPrompt!==!1,executor:e.executor,attachments:(e.attachments||[]).map(e=>({id:e.id,ext:e.ext,originalName:e.originalName}))})}).then(e=>e.json());return t?.success?(await h(!0),{task:t.task||null,ran:!!t.ran}):(N.error(t?.error||X(`@WORKBENCH:派发失败`)),null)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{c.value=!1}}return{active:e,instructions:t,activity:n,running:i,updatedAt:a,loaded:o,togglingSchedule:s,dispatching:c,maxInstructionChars:r,defaultPrompt:l,projectPrompts:u,reports:d,loadingReports:f,generatingReport:p,reportIntervalMs:m,loadOrchestrator:h,setSchedulingActive:x,dispatch:S,saveDefaultPrompt:y,saveProjectPrompt:b,loadReports:g,generateReport:_,setReportInterval:v}}var Yr=6e4,Xr=60*Yr,Zr=24*Xr;function Qr(e,t=Date.now()){if(!e)return``;let n=new Date(e).getTime();if(Number.isNaN(n))return``;let r=Math.max(0,t-n);return r<Yr?X(`@WORKBENCH:刚刚`):r<Xr?X(`@WORKBENCH:N 分钟前`,{n:Math.floor(r/Yr)}):r<Zr?X(`@WORKBENCH:N 小时前`,{n:Math.floor(r/Xr)}):r<30*Zr?X(`@WORKBENCH:N 天前`,{n:Math.floor(r/Zr)}):new Date(n).toLocaleDateString()}function $r(e){if(typeof e!=`number`||!Number.isFinite(e)||e<0)return``;let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?X(`@WORKBENCH:N 小时 M 分`,{n,m:r}):r>0?X(`@WORKBENCH:N 分 M 秒`,{n:r,m:i}):X(`@WORKBENCH:N 秒`,{n:i})}function ei(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function ti(e,t=Date.now()){if(!e)return``;let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=e=>String(e).padStart(2,`0`),i=`${r(n.getHours())}:${r(n.getMinutes())}:${r(n.getSeconds())}`,a=new Date(t);if(ei(n,a))return i;if(ei(n,new Date(a.getFullYear(),a.getMonth(),a.getDate()-1)))return X(`@WORKBENCH:昨天 {time}`,{time:i});let o=`${n.getMonth()+1}/${n.getDate()}`;return n.getFullYear()===a.getFullYear()?`${o} ${i}`:`${n.getFullYear()}/${o} ${i}`}t(),U(),C(),R();var ni={class:`proj`},ri={class:`proj__head`},ii={class:`proj__title`},ai={class:`proj__count`},oi={key:0,class:`proj__tools`},si={class:`proj__search`},ci=[`placeholder`,`aria-label`],li={class:`proj__toggles`},ui=[`aria-pressed`,`title`],di=[`aria-pressed`,`title`],fi={class:`proj__list`},pi=[`title`],mi={class:`proj-item__row1`},hi={class:`proj-item__name`},gi={key:0,class:`proj-item__running`,"aria-hidden":`true`},_i={class:`proj-item__num`},vi={key:0,class:`proj-item__row2`},yi={class:`proj-item__running-text`},bi=[`title`],xi={class:`proj-item__bar`,"aria-hidden":`true`},Si={class:`proj-item__progress-text`},Ci=[`title`,`onClick`,`onKeydown`],wi={class:`proj-item__row1`},Ti={class:`proj-item__name`},Ei={class:`proj-item__signals`},Di={key:0,class:`proj-item__running`,"aria-hidden":`true`},Oi={key:1,class:`proj-item__badge`},ki={class:`proj-item__row2`},Ai={key:0,class:`proj-chip proj-chip--missing`},ji={key:0,class:`proj-item__branch`},Mi={class:`proj-item__branch-name`},Ni={key:1,class:`proj-chip proj-chip--ahead`},Pi={key:2,class:`proj-chip proj-chip--behind`},Fi={key:3,class:`proj-chip proj-chip--dirty`},Ii={class:`proj-item__time`},Li={key:0,class:`proj-item__row3`},Ri={class:`proj-item__bar`,"aria-hidden":`true`},zi={class:`proj-item__progress-text`},Bi={class:`proj-item__actions`},Vi=[`title`,`aria-label`,`onClick`],Hi=[`title`,`aria-label`,`onClick`],Ui=[`title`,`aria-label`,`aria-expanded`,`onClick`],Wi=[`aria-label`],Gi=[`onClick`,`onKeydown`],Ki={class:`proj-menu__icon`},qi={class:`proj-menu__label`},Ji=[`onClick`,`onKeydown`],Yi={class:`proj-menu__icon`},Xi={class:`proj-menu__label`},Zi=[`onClick`,`onKeydown`],Qi={class:`proj-menu__icon`},$i={class:`proj-menu__label`},ea=[`onClick`,`onKeydown`],ta={class:`proj-menu__icon`},na={class:`proj-menu__label`},ra={class:`proj-menu__title`,role:`presentation`},ia=[`onClick`,`onKeydown`],aa={class:`proj-menu__icon`},oa={class:`proj-menu__label`},sa={key:0,class:`proj-menu__hint`},ca=[`onClick`,`onKeydown`],la={class:`proj-menu__icon`},ua=[`src`],da={class:`proj-menu__label`},fa={class:`proj-menu__hint`},pa=[`onClick`,`onKeydown`],ma={class:`proj-menu__icon`},ha=[`src`],ga={class:`proj-menu__label`},_a=[`onClick`,`onKeydown`],va={class:`proj-menu__icon`},ya={class:`proj-menu__label`},ba=[`onClick`,`onKeydown`],xa={class:`proj-menu__icon`},Sa={class:`proj-menu__label`},Ca={key:0,class:`proj-menu__hint`},wa={key:1,class:`proj-menu__hint`},Ta=[`onClick`,`onKeydown`],Ea={class:`proj-menu__icon`},Da={class:`proj-menu__label`},Oa={key:0,class:`proj-empty`},ka={class:`proj-empty__title`},Aa={class:`proj-empty__hint`},ja={key:1,class:`proj-empty`},Ma={class:`proj-empty__title`},Na=Z(m({__name:`WorkbenchProjectPanel`,props:{projects:{},selectedKey:{},loading:{type:Boolean}},emits:[`select`,`remove`],setup(t,{emit:n}){let r=t,l=n,f=D(()=>[...r.projects].sort((e,t)=>{if(e.stats.runningJobs>0!=t.stats.runningJobs>0)return e.stats.runningJobs>0?-1:1;let n=e.stats.lastActiveAt||``,r=t.stats.lastActiveAt||``;return n===r?e.name.localeCompare(t.name):r.localeCompare(n)})),p=F(``),m=F(!1),g=F(!1),v=D(()=>!!p.value.trim()||m.value||g.value),y=D(()=>{let e=p.value.trim().toLowerCase();return f.value.filter(t=>m.value&&t.stats.total===0||g.value&&t.git&&t.git.isGitRepo===!1?!1:!e||t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))});function C(){p.value=``,m.value=!1,g.value=!1}let T=D(()=>r.projects.reduce((e,t)=>({running:e.running+t.stats.runningJobs,done:e.done+t.stats.done,total:e.total+t.stats.total}),{running:0,done:0,total:0})),E=D(()=>T.value.total>0?Math.round(T.value.done/T.value.total*100):0);function O(e){return e.git?e.git.isGitRepo===null?X(`@WORKBENCH:未知`):e.git.isGitRepo?e.git.detached?X(`@WORKBENCH:游离 HEAD`):e.git.branch||X(`@WORKBENCH:未知`):``:``}function A(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}let te=F(null),j=F(null);function ie(e,t){if(te.value===e.key){te.value=null;return}j.value=t.currentTarget,te.value=e.key}function oe(){te.value=null}function se(e){if(!te.value)return;let t=e.target;if(t&&!j.value?.contains(t)){for(let e of Array.from(document.querySelectorAll(`.proj-open-menu`)))if(e.contains(t))return;te.value=null}}ne(()=>document.addEventListener(`mousedown`,se,!0)),_e(()=>document.removeEventListener(`mousedown`,se,!0));let ce=Fe(),R=F(!1),le=F(null);function ue(e){return ce.lastCheckedAt!==null&&!ce.isToolAvailable(e)}async function pe(e){oe();let t=await He(e.path);t.success?N.success(t.message||X(`@WORKBENCH:已在文件管理器中打开文件夹`)):N.error(t.error||X(`@WORKBENCH:打开文件夹失败`))}async function me(e){oe();let t=await Ve(e.path);t.success?N.success(t.message||X(`@67CE7:已在终端中打开目录`)):N.error(t.error||X(`@WORKBENCH:打开终端失败`))}async function he(e){oe();let t=await Ue(e.path);t.success?N.success(X(`@WORKBENCH:已在新标签页启动 g ui`)):N.error(t.error||X(`@WORKBENCH:启动 g ui 失败`))}async function V(e){if(oe(),e.name)try{await navigator.clipboard.writeText(e.name),N.success(X(`@67CE7:已复制文件夹名称`))}catch{N.error(X(`@67CE7:复制失败`))}}async function H(e){let t=e.name||e.path,n=e.stats.total>0?X(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。该项目的 {n} 条任务不会被删除,仍可在「全部项目」下查看。`,{name:t,n:e.stats.total}):X(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。`,{name:t});try{await de.confirm(n,X(`@WORKBENCH:移除项目`),{confirmButtonText:X(`@WORKBENCH:移除`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}l(`remove`,e)}async function U(e,t,n){if(oe(),!await We()){N.warning(X(`@67CE7:工具检测失败,请稍后重试`));return}if(!ce.isToolAvailable(t)){le.value=t,R.value=!0;return}let r=await Re(t,e.path,n);r.success?N.success(r.message||X(`@67CE7:已用 {tool} 打开目录`,{tool:Be[t]})):N.error(`${X(`@67CE7:打开失败: `)}${r.error??``}`)}return(n,r)=>{let f=h,D=ve;return M(),z(`section`,ni,[o(`header`,ri,[o(`h3`,ii,w(s(X)(`@WORKBENCH:项目列表`)),1),o(`span`,ai,[v.value?(M(),z(J,{key:0},[b(w(s(X)(`@WORKBENCH:匹配 {n}/{total} 个项目`,{n:y.value.length,total:t.projects.length})),1)],64)):(M(),z(J,{key:1},[b(w(t.projects.length),1)],64))])]),t.projects.length>0?(M(),z(`div`,oi,[o(`div`,si,[S(f,{class:`proj__search-icon`,"aria-hidden":`true`},{default:I(()=>[S(s(d))]),_:1}),B(o(`input`,{"onUpdate:modelValue":r[0]||=e=>p.value=e,class:`proj__search-input`,type:`search`,placeholder:s(X)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":s(X)(`@WORKBENCH:搜索项目名称或路径`),onKeydown:r[1]||=Y(e=>p.value=``,[`esc`])},null,40,ci),[[ae,p.value]])]),o(`div`,li,[o(`button`,{type:`button`,class:W([`proj__toggle`,{"is-on":m.value}]),"aria-pressed":m.value,title:s(X)(`@WORKBENCH:只显示有任务的项目`),onClick:r[2]||=e=>m.value=!m.value},[o(`span`,null,w(s(X)(`@WORKBENCH:只看有任务`)),1)],10,ui),o(`button`,{type:`button`,class:W([`proj__toggle`,{"is-on":g.value}]),"aria-pressed":g.value,title:s(X)(`@WORKBENCH:只显示 Git 仓库`),onClick:r[3]||=e=>g.value=!g.value},[o(`span`,null,w(s(X)(`@WORKBENCH:隐藏非 Git`)),1)],10,di)])])):x(``,!0),o(`ul`,fi,[o(`li`,{class:W([`proj-item proj-item--all`,{"is-active":t.selectedKey===``,"is-running":T.value.running>0,"is-complete":T.value.total>0&&T.value.done>=T.value.total}]),role:`button`,tabindex:`0`,title:s(X)(`@WORKBENCH:全部项目`),onClick:r[4]||=e=>l(`select`,null),onKeydown:[r[5]||=Y(P(e=>l(`select`,null),[`prevent`]),[`enter`]),r[6]||=Y(P(e=>l(`select`,null),[`prevent`]),[`space`])]},[o(`div`,mi,[S(f,{class:`proj-item__icon`},{default:I(()=>[S(s(c))]),_:1}),o(`span`,hi,w(s(X)(`@WORKBENCH:全部项目`)),1),T.value.running>0?(M(),z(`span`,gi)):x(``,!0),o(`span`,_i,w(t.projects.length),1)]),T.value.running>0?(M(),z(`div`,vi,[o(`span`,yi,w(s(X)(`@WORKBENCH:{n} 个执行中`,{n:T.value.running})),1)])):x(``,!0),T.value.total>0?(M(),z(`div`,{key:1,class:`proj-item__row3`,title:s(X)(`@WORKBENCH:只统计项目列表里这些项目名下的任务`)},[o(`span`,xi,[o(`i`,{class:`proj-item__bar-fill`,style:re({width:E.value+`%`})},null,4)]),o(`span`,Si,w(s(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:T.value.done,total:T.value.total})),1)],8,bi)):x(``,!0)],42,pi),(M(!0),z(J,null,e(y.value,n=>(M(),z(`li`,{key:n.key,class:W([`proj-item`,{"is-active":n.key===t.selectedKey,"is-running":n.stats.runningJobs>0,"is-complete":n.stats.total>0&&n.stats.done>=n.stats.total&&n.stats.runningJobs===0,"is-missing":n.exists===!1}]),role:`button`,tabindex:`0`,title:n.path,onClick:e=>l(`select`,n),onKeydown:[Y(P(e=>l(`select`,n),[`self`,`prevent`]),[`enter`]),Y(P(e=>l(`select`,n),[`self`,`prevent`]),[`space`])]},[o(`div`,wi,[S(f,{class:`proj-item__icon`},{default:I(()=>[S(s(ee))]),_:1}),o(`span`,Ti,w(n.name),1),o(`span`,Ei,[n.stats.runningJobs>0?(M(),z(`span`,Di)):x(``,!0),n.isCurrent?(M(),z(`span`,Oi,w(s(X)(`@WORKBENCH:当前`)),1)):x(``,!0)])]),o(`div`,ki,[n.exists===!1?(M(),z(`span`,Ai,w(s(X)(`@WORKBENCH:目录不存在`)),1)):(M(),z(J,{key:1},[O(n)?(M(),z(`span`,ji,[A(n)?(M(),a(Ae,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):x(``,!0),o(`span`,Mi,w(O(n)),1)])):x(``,!0),n.git&&n.git.ahead>0?(M(),z(`span`,Ni,`↑`+w(n.git.ahead),1)):x(``,!0),n.git&&n.git.behind>0?(M(),z(`span`,Pi,`↓`+w(n.git.behind),1)):x(``,!0),n.git&&n.git.changed>0?(M(),z(`span`,Fi,`●`+w(n.git.changed),1)):x(``,!0)],64)),o(`span`,Ii,w(s(Qr)(n.stats.lastActiveAt)),1)]),n.stats.total>0?(M(),z(`div`,Li,[o(`span`,Ri,[o(`i`,{class:`proj-item__bar-fill`,style:re({width:n.stats.progress+`%`})},null,4)]),o(`span`,zi,w(s(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:n.stats.done,total:n.stats.total})),1)])):x(``,!0),o(`div`,Bi,[n.exists===!1?(M(),z(`button`,{key:0,type:`button`,class:`proj-item__action proj-item__action--danger`,title:s(X)(`@WORKBENCH:从清单移除`),"aria-label":`${s(X)(`@WORKBENCH:从清单移除`)} ${n.name}`,onClick:P(e=>H(n),[`stop`])},[S(f,{"aria-hidden":`true`},{default:I(()=>[S(s(fe))]),_:1})],8,Vi)):(M(),z(`button`,{key:1,type:`button`,class:`proj-item__action`,title:s(X)(`@WORKBENCH:打开文件夹`),"aria-label":`${s(X)(`@WORKBENCH:打开文件夹`)} ${n.name}`,onClick:P(e=>pe(n),[`stop`])},[S(f,{"aria-hidden":`true`},{default:I(()=>[S(s(i))]),_:1})],8,Hi)),n.exists===!1?x(``,!0):(M(),a(D,{key:2,visible:te.value===n.key,trigger:`manual`,placement:`right-start`,width:272,"show-arrow":!1,offset:6,"popper-class":`proj-open-menu`},{reference:I(()=>[o(`button`,{type:`button`,class:W([`proj-item__action`,{"is-open":te.value===n.key}]),title:s(X)(`@WORKBENCH:打开方式`),"aria-label":`${s(X)(`@WORKBENCH:打开方式`)} ${n.name}`,"aria-expanded":te.value===n.key,"aria-haspopup":`menu`,onClick:P(e=>ie(n,e),[`stop`])},[S(f,{"aria-hidden":`true`},{default:I(()=>[S(s(_))]),_:1})],10,Ui)]),default:I(()=>[te.value===n.key?(M(),z(`ul`,{key:0,class:`proj-menu`,role:`menu`,"aria-label":s(X)(`@WORKBENCH:打开方式`)},[o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>pe(n),onKeydown:[Y(P(e=>pe(n),[`prevent`]),[`enter`]),Y(P(e=>pe(n),[`prevent`]),[`space`])]},[o(`span`,Ki,[S(f,{"aria-hidden":`true`},{default:I(()=>[S(s(i))]),_:1})]),o(`span`,qi,w(s(X)(`@WORKBENCH:在文件管理器中打开`)),1)],40,Gi),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>me(n),onKeydown:[Y(P(e=>me(n),[`prevent`]),[`enter`]),Y(P(e=>me(n),[`prevent`]),[`space`])]},[o(`span`,Yi,[S(f,{"aria-hidden":`true`},{default:I(()=>[S(s(u))]),_:1})]),o(`span`,Xi,w(s(X)(`@WORKBENCH:在终端中打开`)),1)],40,Ji),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>he(n),onKeydown:[Y(P(e=>he(n),[`prevent`]),[`enter`]),Y(P(e=>he(n),[`prevent`]),[`space`])]},[o(`span`,Qi,[S(f,{"aria-hidden":`true`},{default:I(()=>[S(s(k))]),_:1})]),o(`span`,$i,w(s(X)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,Zi),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>V(n),onKeydown:[Y(P(e=>V(n),[`prevent`]),[`enter`]),Y(P(e=>V(n),[`prevent`]),[`space`])]},[o(`span`,ta,[S(f,{"aria-hidden":`true`},{default:I(()=>[S(s(L))]),_:1})]),o(`span`,na,w(s(X)(`@67CE7:复制文件夹名称`)),1)],40,ea),r[8]||=o(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),o(`li`,ra,w(s(X)(`@WORKBENCH:用工具打开`)),1),(M(!0),z(J,null,e(s(ze),e=>(M(),z(`li`,{key:e.id,class:W([`proj-menu__item`,{"is-missing":ue(e.id)}]),role:`menuitem`,tabindex:`-1`,onClick:t=>U(n,e.id),onKeydown:[Y(P(t=>U(n,e.id),[`prevent`]),[`enter`]),Y(P(t=>U(n,e.id),[`prevent`]),[`space`])]},[o(`span`,aa,[S(Ae,{"icon-class":e.icon},null,8,[`icon-class`])]),o(`span`,oa,w(s(X)(e.labelKey)),1),ue(e.id)?(M(),z(`span`,sa,w(s(X)(`@67CE7:未安装`)),1)):x(``,!0)],42,ia))),128)),o(`li`,{class:W([`proj-menu__item`,{"is-missing":ue(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(n,`claude`),onKeydown:[Y(P(e=>U(n,`claude`),[`prevent`]),[`enter`]),Y(P(e=>U(n,`claude`),[`prevent`]),[`space`])]},[o(`span`,la,[o(`img`,{src:s(Ke),alt:``,class:`proj-menu__img`},null,8,ua)]),o(`span`,da,w(s(X)(`@67CE7:用 Claude Code 打开`)),1),o(`span`,fa,w(ue(`claude`)?s(X)(`@67CE7:未安装`):s(X)(`@67CE7:默认权限`)),1)],42,ca),o(`li`,{class:W([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(n,`claude`,`bypassPermissions`),onKeydown:[Y(P(e=>U(n,`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),Y(P(e=>U(n,`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[o(`span`,ma,[o(`img`,{src:s(Ke),alt:``,class:`proj-menu__img`},null,8,ha)]),o(`span`,ga,w(s(X)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],42,pa),o(`li`,{class:W([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(n,`opencode`,`auto`),onKeydown:[Y(P(e=>U(n,`opencode`,`auto`),[`prevent`]),[`enter`]),Y(P(e=>U(n,`opencode`,`auto`),[`prevent`]),[`space`])]},[o(`span`,va,[S(Ae,{"icon-class":`opencode`})]),o(`span`,ya,w(s(X)(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],42,_a),o(`li`,{class:W([`proj-menu__item`,{"is-missing":ue(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(n,`codex`,`sandboxed`),onKeydown:[Y(P(e=>U(n,`codex`,`sandboxed`),[`prevent`]),[`enter`]),Y(P(e=>U(n,`codex`,`sandboxed`),[`prevent`]),[`space`])]},[o(`span`,xa,[S(Ae,{"icon-class":`codex`})]),o(`span`,Sa,w(s(X)(`@67CE7:用 Codex 打开(自动批准)`)),1),ue(`codex`)?(M(),z(`span`,wa,w(s(X)(`@67CE7:未安装`)),1)):(M(),z(`span`,Ca,w(s(X)(`@67CE7:沙箱内`)),1))],42,ba),o(`li`,{class:W([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(n,`codex`,`bypass`),onKeydown:[Y(P(e=>U(n,`codex`,`bypass`),[`prevent`]),[`enter`]),Y(P(e=>U(n,`codex`,`bypass`),[`prevent`]),[`space`])]},[o(`span`,Ea,[S(Ae,{"icon-class":`codex`})]),o(`span`,Da,w(s(X)(`@67CE7:用 Codex 打开(完全批准)`)),1)],42,Ta)],8,Wi)):x(``,!0)]),_:2},1032,[`visible`]))])],42,Ci))),128)),!t.loading&&t.projects.length===0?(M(),z(`li`,Oa,[o(`p`,ka,w(s(X)(`@WORKBENCH:尚无项目`)),1),o(`p`,Aa,w(s(X)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):x(``,!0),!t.loading&&t.projects.length>0&&y.value.length===0?(M(),z(`li`,ja,[o(`p`,Ma,w(s(X)(`@WORKBENCH:没有匹配的项目`)),1),o(`button`,{type:`button`,class:`proj-empty__clear`,onClick:C},w(s(X)(`@WORKBENCH:清除筛选`)),1)])):x(``,!0)]),S(qe,{modelValue:R.value,"onUpdate:modelValue":r[7]||=e=>R.value=e,tool:le.value},null,8,[`modelValue`,`tool`])])}}}),[[`__scopeId`,`data-v-4d8e3270`]]),Pa=[140,170,200,230,260,290,320,350];function Fa(e){return(e||``).replace(/\\/g,`/`).trim().toLowerCase()}function Ia(e){let t=Fa(e),n=2166136261;for(let e=0;e<t.length;e++)n^=t.charCodeAt(e),n=Math.imul(n,16777619);return n^=n>>>16,n=Math.imul(n,2246822507),n^=n>>>13,n=Math.imul(n,3266489909),n^=n>>>16,Pa[(n>>>0)%Pa.length]}function La(e){return{"--tag-hue":String(Ia(e))}}t(),U(),C(),R();var Ra={class:`kb`},za={class:`kb__toolbar`},Ba={class:`kb__views`,role:`tablist`},Va=[`aria-selected`],Ha=[`aria-selected`],Ua={class:`kb__filters`},Wa={class:`kb__search`},Ga=[`placeholder`,`aria-label`],Ka=[`aria-hidden`],qa={class:`kb-col__head`},Ja={class:`kb-col__title`},Ya={class:`kb-col__count`},Xa={class:`kb-col__list`},Za=[`data-task-id`,`aria-current`,`onClick`,`onKeydown`],Qa=[`title`,`aria-label`,`onClick`],$a=[`src`,`alt`,`onError`],eo={key:0,class:`kb-card__cover-more`,"aria-hidden":`true`},to={class:`kb-card__row1`},no=[`title`],ro=[`title`],io={class:`kb-card__time`},ao=[`title`],oo=[`title`],so={key:3,class:`kb-card__live`},co={class:`kb-card__live-meta`},lo=[`title`],uo=[`title`],fo={key:2,class:`kb-card__live-pid`},po={key:3,class:`kb-card__live-silent`},mo=[`title`],ho=[`title`],go={class:`kb-card__live-tag`},_o=[`title`],vo={class:`kb-card__live-tag`},yo=[`title`],bo=[`title`],xo={class:`kb-card__reply-text`},So=[`title`,`onClick`],Co={class:`kb-card__actions`},wo=[`title`,`onClick`],To=[`title`,`aria-label`,`onClick`],Eo=[`title`,`aria-label`,`onClick`],Do=[`title`,`aria-label`,`onClick`],Oo=[`title`,`aria-label`,`onClick`],ko={key:0,class:`kb-col__add`},Ao={key:1,class:`kb-col__empty`},jo={key:2,class:`kb-col__more`},Mo={key:1,class:`kb__table-wrap`},No={class:`kb-table`},Po={class:`kb-table__th`},Fo={class:`kb-table__th kb-table__th--narrow`},Io={class:`kb-table__th kb-table__th--time`},Lo=[`onClick`,`onKeydown`],Ro={class:`kb-table__td`},zo=[`title`,`onClick`],Bo={class:`kb-table__name`},Vo=[`title`],Ho={key:2,class:`kb-table__live`},Uo=[`title`],Wo={key:1,class:`kb-table__live-silent`},Go={key:3,class:`kb-table__live kb-table__live--reply`},Ko=[`title`],qo={class:`kb-table__td`},Jo={class:`kb-table__td kb-table__td--num`},Yo=[`title`],Xo={class:`kb-table__dur`},Zo=[`title`],Qo={key:0},$o={class:`kb-table__td kb-table__empty`,colspan:`3`},es=`wb.boardView.v1`,ts=30,ns=Z(m({__name:`WorkbenchKanban`,props:{tasks:{},projectLabels:{},showProjectLabel:{type:Boolean},openedTaskId:{}},emits:[`open-task`,`run-task`,`stop-task`,`complete-task`,`reopen-task`,`delete-task`,`create-task`],setup(t,{emit:n}){let r=t,i=n,c=F((()=>{try{return localStorage.getItem(es)===`list`?`list`:`kanban`}catch{return`kanban`}})());V(c,e=>{try{localStorage.setItem(es,e)}catch{}});let l=F(``),u=[{key:`todo`,labelKey:`@WORKBENCH:待处理`},{key:`doing`,labelKey:`@WORKBENCH:进行中`},{key:`done`,labelKey:`@WORKBENCH:已完成`}],f=D(()=>{let e=l.value.trim().toLowerCase();return r.tasks.filter(t=>!e||(t.title||``).toLowerCase().includes(e)||(t.desc||``).toLowerCase().includes(e))}),p=F(ts);V(l,()=>{p.value=ts});let m=D(()=>{let e=u.map(e=>{let t=e.key===`done`?f.value.filter(t=>t.column===e.key).sort(y):f.value.filter(t=>t.column===e.key);return{...e,all:t}}),t=e.some(e=>e.all.length>0);return e.map(e=>({key:e.key,labelKey:e.labelKey,total:e.all.length,hidden:e.key===`done`?Math.max(0,e.all.length-p.value):0,tasks:e.key===`done`?e.all.slice(0,p.value):e.all,collapsed:t&&e.all.length===0&&e.key!==`todo`}))}),g=D(()=>({gridTemplateColumns:m.value.map(e=>e.collapsed?`minmax(0, 0fr)`:`minmax(0, 1fr)`).join(` `)})),_=F(!1);ne(()=>{requestAnimationFrame(()=>requestAnimationFrame(()=>{_.value=!0}))});function v(e){return String(e.manualDoneAt||e.lastJobEndedAt||e.updatedAt||e.createdAt||``)}function y(e,t){return v(t).localeCompare(v(e))}function C(e){return e.column===`done`?v(e):e.updatedAt||e.createdAt||``}function T(e){return e.live?``:$r(e.lastDurationMs)}function E(e){let t=T(e);if(!t)return``;let n=ti(e.lastJobStartedAt),r=ti(e.lastJobEndedAt);return!n||!r?t:`${t} · ${n} → ${r}`}function ee(e){let t=(e.autoCompleted?.reason||``).trim(),n=X(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`);return t?`${n}\n${t}`:n}let O=D(()=>[...f.value].sort((e,t)=>C(t).localeCompare(C(e))));function k(e){let t=(e.title||``).trim();if(t)return t;let n=(e.desc||``).replace(/\s+/g,` `).trim();return(/^[a-zA-Z]:[\\/]/.test(n)||n.startsWith(`\\\\`))&&n.split(/[\\/]/).filter(Boolean).pop()||n}function A(e){return r.projectLabels[e.projectPath]||``}function te(e){return e.lastJobStatus===`error`}function j(e){return e.live?.agent||e.lastJobAgent||``}function ie(e){let t=X(`@WORKBENCH:已运行 {elapsed}`,{elapsed:$r(e.elapsedMs)}),n=e.lastLine||e.lastThought||e.lastTool;return n?`${t} · ${n}`:t}function oe(e){return Array.isArray(e.images)?e.images:[]}let N=F(new Set);function se(e){N.value=new Set(N.value).add(e)}function L(e){let t=oe(e);return N.value.size===0?t:t.filter(e=>!N.value.has(e.id))}function R(e){return`/api/workbench/attachments/${e}/raw`}let le=F(null);function ue(e,t=0){let n=L(e);n.length!==0&&(le.value={urls:n.map(e=>R(e.id)),index:t})}function de(){le.value=null}function fe(e){return e.originalName?`${X(`@WORKBENCH:查看图片`)} · ${e.originalName}`:X(`@WORKBENCH:查看图片`)}return(n,r)=>{let f=h,v=ce;return M(),z(`div`,Ra,[o(`div`,za,[o(`div`,Ba,[o(`button`,{type:`button`,role:`tab`,class:W([`kb__view-btn`,{"is-active":c.value===`kanban`}]),"aria-selected":c.value===`kanban`,onClick:r[0]||=e=>c.value=`kanban`},w(s(X)(`@WORKBENCH:看板视图`)),11,Va),o(`button`,{type:`button`,role:`tab`,class:W([`kb__view-btn`,{"is-active":c.value===`list`}]),"aria-selected":c.value===`list`,onClick:r[1]||=e=>c.value=`list`},w(s(X)(`@WORKBENCH:列表视图`)),11,Ha)]),o(`div`,Ua,[o(`div`,Wa,[S(f,{class:`kb__search-icon`},{default:I(()=>[S(s(d))]),_:1}),B(o(`input`,{class:`kb__search-input`,type:`search`,"onUpdate:modelValue":r[2]||=e=>l.value=e,placeholder:s(X)(`@WORKBENCH:搜索任务标题或描述`),"aria-label":s(X)(`@WORKBENCH:搜索任务标题或描述`)},null,8,Ga),[[ae,l.value]])])])]),c.value===`kanban`?(M(),z(`div`,{key:0,class:W([`kb__columns`,{"is-animated":_.value}]),style:re(g.value)},[(M(!0),z(J,null,e(m.value,n=>(M(),z(`section`,{key:n.key,class:W([`kb-col`,[`kb-col--`+n.key,{"is-collapsed":n.collapsed}]]),"aria-hidden":n.collapsed?`true`:void 0},[o(`header`,qa,[o(`span`,{class:W([`kb-col__dot`,{"is-live":n.total>0}]),"aria-hidden":`true`},null,2),o(`h3`,Ja,w(s(X)(n.labelKey)),1),o(`span`,Ya,w(n.total),1)]),o(`ul`,Xa,[(M(!0),z(J,null,e(n.tasks,e=>(M(),z(`li`,{key:e.id,class:W([`kb-card`,{"is-running":e.runningJobs>0,"has-error":te(e),"is-opened":e.id===t.openedTaskId}]),"data-task-id":e.id,"aria-current":e.id===t.openedTaskId?`true`:void 0,role:`button`,tabindex:`0`,onClick:t=>i(`open-task`,e),onKeydown:[Y(P(t=>i(`open-task`,e),[`prevent`]),[`enter`]),Y(P(t=>i(`open-task`,e),[`prevent`]),[`space`])]},[L(e).length>0?(M(),z(`button`,{key:0,type:`button`,class:`kb-card__cover`,title:fe(L(e)[0]),"aria-label":fe(L(e)[0]),onClick:P(t=>ue(e),[`stop`]),onKeydown:r[3]||=P(()=>{},[`stop`])},[o(`img`,{class:`kb-card__cover-img`,src:R(L(e)[0].id),alt:L(e)[0].originalName,loading:`lazy`,decoding:`async`,onError:t=>se(L(e)[0].id)},null,40,$a),L(e).length>1?(M(),z(`span`,eo,` +`+w(L(e).length-1),1)):x(``,!0)],40,Qa)):x(``,!0),o(`div`,to,[t.showProjectLabel&&A(e)?(M(),z(`span`,{key:0,class:`kb-card__project-chip`,style:re(s(La)(e.projectPath)),title:e.projectPath},w(A(e)),13,no)):x(``,!0),o(`p`,{class:`kb-card__title`,title:k(e)},w(k(e)||s(X)(`@WORKBENCH:未命名任务`)),9,ro),o(`span`,io,w(s(Qr)(C(e))),1)]),T(e)?(M(),z(`p`,{key:1,class:`kb-card__spent`,title:E(e)},w(s(X)(`@WORKBENCH:用时 {d}`,{d:T(e)})),9,ao)):x(``,!0),e.autoCompleted?(M(),z(`p`,{key:2,class:`kb-card__auto-done`,title:ee(e)},w(s(X)(`@WORKBENCH:AI 判定完成`)),9,oo)):x(``,!0),e.live?(M(),z(`div`,so,[o(`p`,co,[j(e)?(M(),z(`span`,{key:0,class:`kb-card__live-agent`,title:s(Ne)(j(e))},[S($,{executor:j(e),class:`kb-card__live-agent-icon`},null,8,[`executor`])],8,lo)):x(``,!0),o(`span`,null,w(s(X)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:s($r)(e.live.elapsedMs)})),1),e.live.toolCallCount?(M(),z(`span`,{key:1,title:e.live.toolMix||``},w(s(X)(`@WORKBENCH:工具 {n} 次`,{n:e.live.toolCallCount})),9,uo)):x(``,!0),e.live.pid?(M(),z(`span`,fo,`PID `+w(e.live.pid),1)):x(``,!0),s(Wr)(e.live.silentMs)===null?x(``,!0):(M(),z(`span`,po,w(s(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:s($r)(s(Wr)(e.live.silentMs))})),1))]),e.live.lastTool?(M(),z(`p`,{key:0,class:`kb-card__live-line is-tool`,title:e.live.lastTool},w(e.live.lastTool),9,mo)):x(``,!0),e.live.lastThought?(M(),z(`p`,{key:1,class:`kb-card__live-line is-thought`,title:e.live.lastThought},[o(`span`,go,w(s(X)(`@WORKBENCH:最近思考`)),1),b(w(e.live.lastThought),1)],8,ho)):x(``,!0),e.live.lastLine?(M(),z(`p`,{key:2,class:`kb-card__live-line`,title:e.live.lastLine},[o(`span`,vo,w(s(X)(`@WORKBENCH:最新回复`)),1),b(w(e.live.lastLine),1)],8,_o)):x(``,!0)])):e.lastReply?(M(),z(`p`,{key:4,class:`kb-card__reply`,title:e.lastReply},[j(e)?(M(),z(`span`,{key:0,class:`kb-card__quote-agent`,title:s(Ne)(j(e))},[S($,{executor:j(e),class:`kb-card__quote-agent-icon`},null,8,[`executor`])],8,bo)):x(``,!0),o(`span`,xo,w(e.lastReply),1)],8,yo)):x(``,!0),te(e)&&e.runningJobs===0?(M(),z(`button`,{key:5,type:`button`,class:`kb-card__retry`,title:s(X)(`@WORKBENCH:重新执行这条任务`),onClick:P(t=>i(`run-task`,e),[`stop`]),onKeydown:r[4]||=P(()=>{},[`stop`])},w(s(X)(`@WORKBENCH:重试`)),41,So)):x(``,!0),o(`div`,Co,[e.runningJobs===0?(M(),z(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:s(X)(`@WORKBENCH:执行`),onClick:P(t=>i(`run-task`,e),[`stop`]),onKeydown:r[5]||=P(()=>{},[`stop`])},w(s(X)(`@WORKBENCH:执行`)),41,wo)):(M(),z(`button`,{key:1,type:`button`,class:`kb-card__btn kb-card__btn--stop`,title:s(X)(`@WORKBENCH:停止`),"aria-label":s(X)(`@WORKBENCH:停止`),onClick:P(t=>i(`stop-task`,e),[`stop`]),onKeydown:r[6]||=P(()=>{},[`stop`])},w(s(X)(`@WORKBENCH:停止`)),41,To)),e.column===`done`?e.manualDoneAt?(M(),z(`button`,{key:3,type:`button`,class:`kb-card__btn`,title:s(X)(`@WORKBENCH:撤销完成标记,退回待处理`),"aria-label":s(X)(`@WORKBENCH:撤销完成标记`),onClick:P(t=>i(`reopen-task`,e),[`stop`]),onKeydown:r[8]||=P(()=>{},[`stop`])},w(s(X)(`@WORKBENCH:撤销`)),41,Do)):x(``,!0):(M(),z(`button`,{key:2,type:`button`,class:`kb-card__btn kb-card__btn--done`,title:s(X)(`@WORKBENCH:标记为已完成`),"aria-label":s(X)(`@WORKBENCH:标记为已完成`),onClick:P(t=>i(`complete-task`,e),[`stop`]),onKeydown:r[7]||=P(()=>{},[`stop`])},w(s(X)(`@WORKBENCH:完成`)),41,Eo)),o(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:s(X)(`@WORKBENCH:删除`),"aria-label":s(X)(`@WORKBENCH:删除`),onClick:P(t=>i(`delete-task`,e),[`stop`]),onKeydown:r[9]||=P(()=>{},[`stop`])},`×`,40,Oo)])],42,Za))),128)),n.key===`todo`?(M(),z(`li`,ko,[o(`button`,{type:`button`,class:W([`kb-col__add-btn`,{"kb-col__add-btn--solo":n.tasks.length===0}]),onClick:r[10]||=e=>i(`create-task`)},[r[13]||=o(`span`,{class:`kb-col__add-plus`,"aria-hidden":`true`},`+`,-1),o(`span`,null,w(s(X)(`@WORKBENCH:新建任务`)),1)],2)])):n.tasks.length===0?(M(),z(`li`,Ao,[o(`span`,null,w(s(X)(`@WORKBENCH:暂无任务`)),1)])):x(``,!0),n.hidden>0?(M(),z(`li`,jo,[o(`button`,{type:`button`,class:`kb-col__more-btn`,onClick:r[11]||=e=>p.value+=ts},w(s(X)(`@WORKBENCH:显示更早的 {n} 条`,{n:Math.min(ts,n.hidden)})),1)])):x(``,!0)])],10,Ka))),128))],6)):(M(),z(`div`,Mo,[o(`table`,No,[o(`thead`,null,[o(`tr`,null,[o(`th`,Po,w(s(X)(`@WORKBENCH:任务`)),1),o(`th`,Fo,w(s(X)(`@WORKBENCH:状态`)),1),o(`th`,Io,w(s(X)(`@WORKBENCH:时间`)),1)])]),o(`tbody`,null,[(M(!0),z(J,null,e(O.value,e=>(M(),z(`tr`,{key:e.id,class:`kb-table__row`,tabindex:`0`,onClick:t=>i(`open-task`,e),onKeydown:[Y(P(t=>i(`open-task`,e),[`prevent`]),[`enter`]),Y(P(t=>i(`open-task`,e),[`prevent`]),[`space`])]},[o(`td`,Ro,[L(e).length>0?(M(),z(`button`,{key:0,type:`button`,class:`kb-table__shots`,title:fe(L(e)[0]),onClick:P(t=>ue(e),[`stop`]),onKeydown:r[12]||=P(()=>{},[`stop`])},w(s(X)(`@WORKBENCH:{n} 张图`,{n:L(e).length})),41,zo)):x(``,!0),o(`span`,Bo,w(k(e)||s(X)(`@WORKBENCH:未命名任务`)),1),t.showProjectLabel&&A(e)?(M(),z(`span`,{key:1,class:`kb-table__project`,style:re(s(La)(e.projectPath)),title:e.projectPath},w(A(e)),13,Vo)):x(``,!0),e.live?(M(),z(`span`,Ho,[j(e)?(M(),z(`span`,{key:0,class:`kb-table__agent`,title:s(Ne)(j(e))},[S($,{executor:j(e),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Uo)):x(``,!0),b(` `+w(ie(e.live))+` `,1),s(Wr)(e.live.silentMs)===null?x(``,!0):(M(),z(`span`,Wo,w(s(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:s($r)(s(Wr)(e.live.silentMs))})),1))])):e.lastReply?(M(),z(`span`,Go,[j(e)?(M(),z(`span`,{key:0,class:`kb-table__agent`,title:s(Ne)(j(e))},[S($,{executor:j(e),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Ko)):x(``,!0),b(w(e.lastReply),1)])):x(``,!0)]),o(`td`,qo,[o(`span`,{class:W([`kb-table__status`,`is-`+e.column])},w(s(X)(u.find(t=>t.key===e.column).labelKey)),3)]),o(`td`,Jo,[o(`span`,{class:`kb-table__time`,title:E(e)},[T(e)?(M(),z(J,{key:0},[o(`span`,Xo,w(s(X)(`@WORKBENCH:用时 {d}`,{d:T(e)})),1),r[14]||=o(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):x(``,!0),e.autoCompleted?(M(),z(J,{key:1},[o(`span`,{class:`kb-table__auto-done`,title:ee(e)},w(s(X)(`@WORKBENCH:AI 判定完成`)),9,Zo),r[15]||=o(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):x(``,!0),o(`span`,null,w(s(Qr)(C(e))),1)],8,Yo)])],40,Lo))),128)),O.value.length===0?(M(),z(`tr`,Qo,[o(`td`,$o,w(s(X)(`@WORKBENCH:暂无任务`)),1)])):x(``,!0)])])])),le.value?(M(),a(v,{key:2,"url-list":le.value.urls,"initial-index":le.value.index,"hide-on-click-modal":!0,teleported:!0,onClose:de},null,8,[`url-list`,`initial-index`])):x(``,!0)])}}}),[[`__scopeId`,`data-v-eda4f687`]]);t(),U(),C();var rs=[`title`,`aria-label`],is={class:`tep__btn-name`},as={class:`tep__item`},os={class:`tep__item-name`},ss=[`title`],cs={key:2,class:`tep__item-missing`},ls=Z(m({__name:`TaskExecutorPicker`,props:{title:{}},setup(t){let r=t,{active:i,availability:c,choose:l,executorModelText:u,executorModelTitle:d}=cr(),f=Fe();ne(()=>{f.fetchExecutorModels()});function p(){return[r.title,d(i.value)].filter(Boolean).join(` · `)}return(t,r)=>{let f=h,m=n,g=be,_=E;return M(),a(_,{trigger:`click`,class:`tep`,onCommand:s(l)},{dropdown:I(()=>[S(g,null,{default:I(()=>[(M(!0),z(J,null,e(s(Me),e=>(M(),a(m,{key:e.id,command:e.id,disabled:!s(c)[e.id]},{default:I(()=>[o(`span`,as,[S($,{executor:e.id,class:`tep__item-icon`},null,8,[`executor`]),o(`span`,os,w(e.name),1),s(u)(e.id)?(M(),z(`span`,{key:0,class:`tep__item-model`,title:s(d)(e.id)},w(s(u)(e.id)),9,ss)):x(``,!0),s(i)===e.id?(M(),a(f,{key:1,class:`tep__item-check`},{default:I(()=>[S(s(G))]),_:1})):s(c)[e.id]?x(``,!0):(M(),z(`span`,cs,w(s(X)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:I(()=>[o(`button`,{type:`button`,class:`tep__btn`,title:p(),"aria-label":s(X)(`@WORKBENCH:任务执行器`)},[S($,{executor:s(i),class:`tep__btn-icon`},null,8,[`executor`]),o(`span`,is,w(s(Ne)(s(i))),1),S(f,{class:`tep__btn-caret`},{default:I(()=>[S(s(j))]),_:1})],8,rs)]),_:1},8,[`onCommand`])}}}),[[`__scopeId`,`data-v-beca42f2`]]);t(),U(),C(),R();var us={class:`acs__head`},ds=[`title`,`aria-label`],fs={class:`acs__title`},ps=[`title`,`aria-label`],ms={class:`acs__convs`},hs={class:`acs__chat`},gs=[`data-theme`],_s={key:0,class:`acs__foot`},vs={key:0,class:`acs__notice`},ys={class:`acs__foot-label`},bs={class:`acs__foot-hint`},xs=Z(m({__name:`AgentChatSurface`,props:{title:{},active:{type:Boolean},allowDispatch:{type:Boolean},dispatchUseDefaultPrompt:{type:Boolean},placeholder:{}},setup(e){let t=e,{active:n}=cr(),{theme:r}=Ie(),i=D(()=>r.value===`dark`?`dark`:`light`),{sessions:c,sessionsLoading:l,currentSessionId:u,messages:d,isStreaming:f,pendingQuestion:p,answeringQuestion:m,isSessionGenerating:h,currentEngine:g,pendingEngine:_,isEngineLocked:y,pickEngine:b,loadSessions:C,loadSession:T,deleteSession:E,renameSession:ee,newSession:O,sendMessage:k,answerQuestion:te,stop:j}=$e(),re=D(()=>y.value?g.value:_.value);function ie(e){y.value||b(e)}let ae=D(()=>t.allowDispatch!==!1&&re.value!==`gai`),oe=D(()=>Je(c.value,h)),N=Qe(),se=Ye(),ce=F(null),{width:P,narrow:I}=nt(ce),L=F(`chat`),R=F(null);function le(e=!0){R.value?.scrollToBottom?.(e)}async function ue(e){await k(e.text,e.files,{allowDispatch:t.allowDispatch===!0,dispatchExecutor:n.value,dispatchUseDefaultPrompt:t.dispatchUseDefaultPrompt!==!1}),await A(),le()}function de(e){T(e),L.value=`chat`}function fe(){O(),L.value=`chat`}return V(()=>d.value.length,()=>{A(()=>le(!1))}),V(()=>t.active,e=>{e&&(C().catch(()=>{}),A(()=>le(!1)))}),V(I,e=>{e||(L.value=`chat`)}),ne(()=>{C().catch(()=>{}),A(()=>le(!1))}),(t,n)=>(M(),z(`div`,{ref_key:`rootRef`,ref:ce,class:`acs`},[o(`div`,us,[s(I)&&L.value===`list`?(M(),z(`button`,{key:0,type:`button`,class:`acs__icon-btn`,title:s(X)(`@EDITOR:返回对话`),"aria-label":s(X)(`@EDITOR:返回对话`),onClick:n[0]||=e=>L.value=`chat`},[...n[2]||=[o(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[o(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),o(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,ds)):x(``,!0),o(`span`,fs,w(e.title||s(X)(`@WORKBENCH:g ai 对话`)),1),n[4]||=o(`span`,{class:`acs__spacer`},null,-1),!s(I)||L.value===`chat`?(M(),a(rt,{key:1,class:`acs__engine`,engine:re.value,locked:s(y),onSelect:ie},null,8,[`engine`,`locked`])):x(``,!0),s(I)&&L.value===`chat`?(M(),z(`button`,{key:2,type:`button`,class:`acs__icon-btn`,title:s(X)(`@EDITOR:会话列表`),"aria-label":s(X)(`@EDITOR:会话列表`),onClick:n[1]||=e=>L.value=`list`},[...n[3]||=[v(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-373ecde3><line x1="8" y1="6" x2="21" y2="6" data-v-373ecde3></line><line x1="8" y1="12" x2="21" y2="12" data-v-373ecde3></line><line x1="8" y1="18" x2="21" y2="18" data-v-373ecde3></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-373ecde3></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-373ecde3></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-373ecde3></line></svg>`,1)]],8,ps)):x(``,!0)]),o(`div`,{class:W([`acs__body`,{"is-wide":!s(I)}])},[B(o(`div`,ms,[S(s(ke),{"show-search":!0,items:oe.value,"active-id":s(u),loading:s(l),labels:s(N),onSelect:de,onNew:fe,onRename:s(ee),onDelete:s(E)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[K,!s(I)||L.value===`list`]]),B(o(`div`,hs,[S(s(Te),{ref_key:`chatRef`,ref:R,"show-input":!1,messages:s(d),"assistant-name":s(Xe),"assistant-avatar":s(et),theme:i.value,question:s(p),"question-submitting":s(m),"question-labels":s(se),"plan-config":{labels:{title:s(X)(`@AGENT:计划`),raw:s(X)(`@AGENT:原始参数`)}},onAnswer:s(te)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`onAnswer`])],512),[[K,!s(I)||L.value===`chat`]]),s(P)>0?(M(),z(`div`,{key:0,class:`acs__composer acu-root`,"data-theme":i.value},[S(s(Oe),{disabled:s(f),generating:s(f),placeholder:e.placeholder||(s(f)?s(X)(`@AGENT:正在生成中...`):s(X)(`@AGENT:输入消息,Enter 发送`)),"upload-config":{accept:s(Ze)},onSend:ue,onStop:s(j)},null,8,[`disabled`,`generating`,`placeholder`,`upload-config`,`onStop`])],8,gs)):x(``,!0)],2),e.allowDispatch&&L.value===`chat`?(M(),z(`div`,_s,[ae.value?(M(),z(`p`,vs,w(s(X)(`@WORKBENCH:当前引擎「{name}」只能对话,不能派发任务 —— 切到内置 g ai 才能派活`,{name:s(tt)(re.value)})),1)):(M(),z(J,{key:1},[o(`span`,ys,w(s(X)(`@WORKBENCH:派发执行器`)),1),S(ls,{title:s(X)(`@WORKBENCH:它派出去的任务由这个执行器跑(与执行按钮的临时切换共用)`)},null,8,[`title`]),o(`span`,bs,w(s(X)(`@WORKBENCH:任务会落到看板,跑完有完成提示`)),1)],64))])):x(``,!0)],512))}}),[[`__scopeId`,`data-v-373ecde3`]]);t(),U(),C(),R();var Ss=[`title`,`aria-label`],Cs={class:`oc__rail-text`},ws={class:`oc__head`},Ts={class:`oc__title`},Es=[`disabled`,`title`],Ds=[`title`,`aria-label`],Os={class:`oc__state-label`},ks={class:`oc__state-value`},As={class:`oc__state-meta`},js=[`aria-label`],Ms=[`aria-selected`],Ns=[`aria-selected`],Ps={class:`oc__report-head`},Fs={class:`oc__panel-title`},Is=[`value`,`title`,`aria-label`],Ls=[`value`],Rs=[`disabled`,`title`],zs={class:`oc__report-list`},Bs={key:0,class:`rp`},Vs={class:`rp__head`},Hs=[`title`],Us={class:`rp__count`},Ws={class:`rp__time`},Gs=[`title`],Ks=[`aria-valuenow`,`aria-label`],qs={class:`rp__percent`},Js={class:`rp__percent-tag`},Ys={key:1,class:`rp__body`},Xs=[`title`],Zs={key:3,class:`rp__facts`},Qs=[`title`],$s={class:`rp__tasks`},ec={class:`rpt__title`},tc={class:`rpt__meta`},nc={key:0,class:`rpt__project`},rc={key:1,class:`rpt__agent`},ic=[`title`],ac={key:3,class:`rpt__silent`},oc=[`title`],sc=[`aria-valuenow`,`aria-label`],cc={class:`rpt__percent`},lc=[`title`],uc={class:`rpt__tag`},dc=[`title`],fc={class:`rpt__tag`},pc=[`title`],mc={class:`rpt__tag`},hc=[`title`],gc=[`aria-expanded`,`title`],_c={class:`oc__sect-title`},vc={class:`oc__sect-meta`},yc={class:`oc__sect-brief`},bc={class:`oc__history-list`},xc=[`onClick`],Sc={class:`oc__history-time`},Cc={class:`oc__history-pct`},wc={class:`oc__history-sum`},Tc=[`aria-expanded`,`title`],Ec={class:`oc__sect-title`},Dc={class:`oc__sect-meta`},Oc={class:`oc__git-name`},kc={key:0,class:`oc__sect-brief`},Ac={class:`oc__git-list`},jc={class:`oc__git-label`},Mc={class:`oc__git-label`},Nc={class:`oc__git-value`},Pc={class:`oc__git-label`},Fc={class:`oc__git-value`},Ic=[`placeholder`],Lc={key:0},Rc={key:1},zc={class:`oc__compose-foot`},Bc=[`disabled`,`title`,`aria-label`],Vc=[`title`,`aria-label`],Hc=[`title`],Uc=[`title`],Wc=[`disabled`],Gc={class:`oc__hint`},Kc=`wb.ocMode.v2`,qc=`/api/workbench/orchestrator/attachments`,Jc=`wb.ocInputHeight.v1`,Yc=76,Xc=20,Zc=Z(m({__name:`OrchestratorConsole`,props:{active:{type:Boolean},running:{},selectedProject:{},dispatching:{type:Boolean},togglingSchedule:{type:Boolean},todayDone:{},collapsed:{type:Boolean},defaultPrompt:{},projectPrompts:{},reports:{},reportIntervalMs:{},generatingReport:{type:Boolean},maxInstructionChars:{}},emits:[`toggle-schedule`,`toggle-collapse`,`open-prompt-settings`,`generate-report`,`set-report-interval`,`dispatch`],setup(t,{expose:n,emit:r}){let i=t,c=r,l=F(``),u=F(!0),d=F(!0),{active:p}=cr(),m=F((()=>{try{return localStorage.getItem(Kc)===`chat`?`chat`:`command`}catch{return`command`}})());function _(e){m.value=e;try{localStorage.setItem(Kc,e)}catch{}}let v=F([]),y=D(()=>({kind:`draft`,list:v.value,replace:e=>{v.value=e}})),{isUploading:C,isImageAttachment:E,humanSize:ee,onAttachmentPaste:O,onAttachmentDrop:te,removeAttachment:N,pickAttachmentFile:se}=Zn(),ce=D(()=>C(`draft`)),L=F(!1);function R(e){e.stopPropagation(),O(e,y.value)}function le(e){L.value=!1,te(e,y.value)}function ue(){se(y.value)}function de(e){N(y.value,e)}function fe(){v.value=[]}function he(){l.value=``}n({clearAttachments:fe,clearDraft:he});let H=D(()=>i.selectedProject?.key||``),U=D(()=>(i.defaultPrompt||``).trim()),ge=D(()=>{let e=H.value;return e?(i.projectPrompts?.[e]?.prompt||``).trim():``}),ve=D(()=>Object.values(i.projectPrompts||{}).some(e=>(e?.prompt||``).trim().length>0)),G=D(()=>!!U.value||ve.value),ye=D(()=>{let e=!!U.value,t=H.value?ge.value?`project`:`none`:ve.value?`target`:`none`;return X(e&&t===`project`?`@WORKBENCH:全局 + 本项目`:e&&t===`target`?`@WORKBENCH:全局 + 落点项目`:e?`@WORKBENCH:全局`:t===`project`?`@WORKBENCH:本项目`:t===`target`?`@WORKBENCH:落点项目`:`@WORKBENCH:未设置`)}),q=D(()=>l.value.trim().length),be=D(()=>i.maxInstructionChars||1e5),xe=D(()=>q.value>be.value),Y=D(()=>!xe.value&&q.value>=be.value*.9),Ce=D(()=>l.value.trim().length>0&&!i.dispatching&&!ce.value&&!xe.value);function we(){Ce.value&&c(`dispatch`,{text:l.value.trim(),autoRun:u.value,attachments:v.value,projectPath:i.selectedProject?i.selectedProject.path:``,useDefaultPrompt:d.value,executor:p.value})}function Te(e){e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||(e.preventDefault(),we())}function Ee(){try{let e=localStorage.getItem(Jc);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=Yc?Math.round(t):null}catch{return null}}let De=F(null),Oe=F(Ee()),ke=D(()=>{let e={};return Oe.value&&(e.height=`${Oe.value}px`),e}),Z=null,Ae=!1,je=!0;function Me(e){let t=De.value;if(!t)return;let n=t.getBoundingClientRect();Ae=n.right-e.clientX<=Xc&&n.bottom-e.clientY<=Xc}function Ne(){Ae=!1}function Pe(e){let t=Math.round(e.offsetHeight);if(!(t<Yc||t===Oe.value)){Oe.value=t;try{localStorage.setItem(Jc,String(t))}catch{}}}ne(()=>{let e=De.value;e&&(window.addEventListener(`mouseup`,Ne),typeof ResizeObserver<`u`&&(Z=new ResizeObserver(()=>{if(je){je=!1;return}let t=parseFloat(getComputedStyle(e).maxHeight),n=Number.isFinite(t)&&e.offsetHeight>=t-1;(Ae||!n)&&Pe(e)}),Z.observe(e)))}),_e(()=>{window.removeEventListener(`mouseup`,Ne),Z?.disconnect(),Z=null});let Fe=F(null),Ie=D(()=>(i.running||[]).length),Le=D(()=>{let e=i.running||[];return{job:new Set(e.map(e=>e.jobId).filter(Boolean)),task:new Set(e.map(e=>e.taskId).filter(Boolean))}});function Q(e){if(!e)return!1;let t=Le.value;return(e.tasks||[]).some(e=>e.jobId&&t.job.has(e.jobId)||!e.jobId&&!!e.taskId&&t.task.has(e.taskId))}let Re=D(()=>(i.reports||[]).find(Q)||null),$=D(()=>{let e=i.reports||[];if(!e.length)return null;if(Fe.value){let t=e.find(e=>e.id===Fe.value);if(t)return t}return Re.value}),ze=D(()=>!!$.value&&!Q($.value)),Be=D(()=>(i.reports||[]).length?Ie.value>0?X(`@WORKBENCH:这批任务还没有进度报告`):X(`@WORKBENCH:当前没有正在执行的任务`):X(`@WORKBENCH:暂无进度报告`)),Ve=D(()=>(i.reports||[]).length?X(`@WORKBENCH:最新那份报告讲的任务已经跑完了,要回看可以从历史报告里点开`):``);function He(e){Fe.value=e.id}let Ue=F(null),We=F(!1),Ge=F(!1);function Ke(){let e=Ue.value;e&&!We.value&&(Ge.value=e.scrollHeight-e.clientHeight>2)}function qe(){We.value=!We.value,We.value||A(Ke)}let Je=null;V(Ue,e=>{Je?.disconnect(),Je=null,e&&(Je=new ResizeObserver(()=>Ke()),Je.observe(e))}),_e(()=>{Je?.disconnect(),Je=null}),V(()=>$.value?.id,()=>{We.value=!1,Ge.value=!1,A(Ke)});function Ye(e){let t=Ur(e.percent);return t===null?``:t+`%`}let Xe=D(()=>Ur($.value?.percent)),Ze=D(()=>($.value?.tasks||[]).map(e=>({...e,pct:Ur(e.percent),silent:Wr(e.silentMs)})));function Qe(e){let t=String(e.text||``).replace(/\s+/g,` `).trim();return t?t.length>42?t.slice(0,42)+`…`:t:e.errorCode?X(Hr(e.errorCode)):X(`@WORKBENCH:当时没有任务在执行`)}function $e(e){return e.errorCode?X(Hr(e.errorCode)):e.tasks.length?X(`@WORKBENCH:模型没有返回内容`):X(`@WORKBENCH:生成这份报告时没有任务在执行`)}function et(e){let t=e.target,n=Number(t.value);Lr.includes(n)&&c(`set-report-interval`,n)}let tt=D(()=>{let e=i.selectedProject;if(!e)return[];let t=[];if(e.exists===!1)return t.push({label:X(`@WORKBENCH:工作区`),value:X(`@WORKBENCH:目录不存在`),tone:`danger`}),t;let n=e.git;return!n||n.isGitRepo===null?(t.push({label:X(`@WORKBENCH:Git 状态`),value:X(`@WORKBENCH:未知`),tone:``}),t):n.isGitRepo?(t.push({label:X(`@WORKBENCH:分支`),value:n.detached?X(`@WORKBENCH:游离 HEAD`):n.branch||X(`@WORKBENCH:未知`),tone:``}),t.push({label:X(`@WORKBENCH:工作区`),value:n.changed>0?X(`@WORKBENCH:未提交 {n} 项`,{n:n.changed}):X(`@WORKBENCH:干净`),tone:n.changed>0?`warn`:``}),n.hasUpstream&&(n.ahead>0||n.behind>0)&&t.push({label:X(`@WORKBENCH:与上游`),value:X(`@WORKBENCH:领先 {ahead} / 落后 {behind}`,{ahead:n.ahead,behind:n.behind}),tone:n.behind>0?`warn`:``}),t):(t.push({label:X(`@WORKBENCH:Git 状态`),value:X(`@WORKBENCH:不是 Git 仓库`),tone:``}),t)}),nt={history:`wb.ocHistoryOpen.v1`,git:`wb.ocGitOpen.v1`};function rt(e){try{return localStorage.getItem(e)===`1`}catch{return!1}}let it=F(rt(nt.history)),at=F(rt(nt.git));function ot(e){let t=e===`history`?it:at;t.value=!t.value;try{localStorage.setItem(nt[e],t.value?`1`:`0`)}catch{}}let st=D(()=>tt.value.slice(0,2).map(e=>e.value).join(` · `));return(n,r)=>{let i=h;return M(),z(`aside`,{class:W([`oc`,{"is-collapsed":t.collapsed,"is-report-empty":m.value===`command`&&!t.collapsed&&!$.value}])},[t.collapsed?(M(),z(`button`,{key:0,type:`button`,class:`oc__rail`,title:s(X)(`@WORKBENCH:展开主 Agent 控制台`),"aria-label":s(X)(`@WORKBENCH:展开主 Agent 控制台`),"aria-expanded":!1,onClick:r[0]||=e=>c(`toggle-collapse`)},[S(i,{class:`oc__rail-icon`},{default:I(()=>[S(s(Se))]),_:1}),o(`span`,{class:W([`oc__rail-live`,{"is-off":!t.active}]),"aria-hidden":`true`},null,2),o(`span`,Cs,w(s(X)(`@WORKBENCH:主 Agent 控制台`)),1)],8,Ss)):x(``,!0),B(o(`header`,ws,[o(`span`,{class:W([`oc__live`,{"is-off":!t.active}]),"aria-hidden":`true`},null,2),o(`h3`,Ts,w(s(X)(`@WORKBENCH:主 Agent 控制台`)),1),o(`button`,{type:`button`,class:`oc__toggle`,disabled:t.togglingSchedule,title:t.active?s(X)(`@WORKBENCH:暂停后派发只建任务,不会自动执行`):s(X)(`@WORKBENCH:恢复后派发会自动执行`),onClick:r[1]||=e=>c(`toggle-schedule`,!t.active)},w(t.active?s(X)(`@WORKBENCH:暂停调度`):s(X)(`@WORKBENCH:恢复调度`)),9,Es),o(`button`,{type:`button`,class:`oc__collapse`,title:s(X)(`@WORKBENCH:收起主 Agent 控制台`),"aria-label":s(X)(`@WORKBENCH:收起主 Agent 控制台`),"aria-expanded":!0,onClick:r[2]||=e=>c(`toggle-collapse`)},[S(i,null,{default:I(()=>[S(s(oe))]),_:1})],8,Ds)],512),[[K,!t.collapsed]]),B(o(`div`,{class:W([`oc__state`,{"is-paused":!t.active}])},[o(`span`,Os,w(s(X)(`@WORKBENCH:调度状态`)),1),o(`span`,ks,w(t.active?s(X)(`@WORKBENCH:调度中`):s(X)(`@WORKBENCH:已暂停`)),1),o(`span`,As,w(s(X)(`@WORKBENCH:{n} 个执行中`,{n:Ie.value})),1)],2),[[K,!t.collapsed]]),B(o(`div`,{class:`oc__mode`,role:`tablist`,"aria-label":s(X)(`@WORKBENCH:切换主 Agent 控制台的工作方式`)},[o(`button`,{type:`button`,role:`tab`,class:W([`oc__mode-btn`,{"is-active":m.value===`chat`}]),"aria-selected":m.value===`chat`,onClick:r[3]||=e=>_(`chat`)},w(s(X)(`@WORKBENCH:对话`)),11,Ms),o(`button`,{type:`button`,role:`tab`,class:W([`oc__mode-btn`,{"is-active":m.value===`command`}]),"aria-selected":m.value===`command`,onClick:r[4]||=e=>_(`command`)},w(s(X)(`@WORKBENCH:指令`)),11,Ns)],8,js),[[K,!t.collapsed]]),B(S(xs,{class:`oc__chat`,active:!t.collapsed&&m.value===`chat`,"allow-dispatch":``,"dispatch-use-default-prompt":d.value,title:s(X)(`@WORKBENCH:g ai 对话`)},null,8,[`active`,`dispatch-use-default-prompt`,`title`]),[[K,!t.collapsed&&m.value===`chat`]]),B(o(`div`,{class:W([`oc__report`,{"is-empty":!$.value}])},[o(`div`,Ps,[o(`p`,Fs,w(s(X)(`@WORKBENCH:进度报告`)),1),o(`select`,{class:`oc__interval`,value:String(t.reportIntervalMs??0),title:s(X)(`@WORKBENCH:自动报告的间隔(关掉后仍可随时点「立即报告」)`),"aria-label":s(X)(`@WORKBENCH:自动报告间隔`),onChange:et},[(M(!0),z(J,null,e(s(Lr),e=>(M(),z(`option`,{key:e,value:String(e)},w(s(X)(s(Br)(e),s(Vr)(e))),9,Ls))),128))],40,Is),o(`button`,{type:`button`,class:`oc__report-run`,disabled:t.generatingReport,title:s(X)(`@WORKBENCH:让主 Agent 现在汇报一次正在执行的任务进度`),onClick:r[5]||=e=>c(`generate-report`)},[S(i,{class:W([`oc__report-run-icon`,{"is-spin":t.generatingReport}])},{default:I(()=>[S(s(f))]),_:1},8,[`class`]),o(`span`,null,w(t.generatingReport?s(X)(`@WORKBENCH:生成中…`):s(X)(`@WORKBENCH:立即报告`)),1)],8,Rs)]),o(`ul`,zs,[$.value?(M(),z(`li`,Bs,[o(`div`,Vs,[o(`span`,{class:W([`rp__trigger`,{"is-auto":$.value.trigger===`auto`}])},w($.value.trigger===`auto`?s(X)(`@WORKBENCH:自动`):s(X)(`@WORKBENCH:手动`)),3),ze.value?(M(),z(`span`,{key:0,class:`rp__stale`,title:s(X)(`@WORKBENCH:这份报告讲的任务已经跑完了,内容只反映生成那一刻的情况`)},w(s(X)(`@WORKBENCH:已结束`)),9,Hs)):x(``,!0),o(`span`,Us,w(s(X)(`@WORKBENCH:{n} 个任务进行中`,{n:$.value.tasks.length})),1),o(`span`,Ws,w(s(ti)($.value.at)),1)]),Xe.value===null?x(``,!0):(M(),z(`div`,{key:0,class:`rp__progress`,title:s(X)(s(Kr))},[o(`span`,{class:`rp__bar`,role:`progressbar`,"aria-valuenow":Xe.value,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":s(X)(s(Gr))},[o(`i`,{class:`rp__bar-fill`,style:re({width:Xe.value+`%`})},null,4)],8,Ks),o(`span`,qs,[o(`span`,Js,w(s(X)(s(Gr))),1),b(w(Xe.value)+`% `,1)])],8,Gs)),$.value.text?(M(),z(`div`,Ys,[o(`p`,{ref_key:`textEl`,ref:Ue,class:W([`rp__text`,{"is-clamped":Ge.value&&!We.value,"is-expanded":We.value}])},w($.value.text),3),Ge.value||We.value?(M(),z(`button`,{key:0,type:`button`,class:`rp__more`,onClick:qe},w(We.value?s(X)(`@WORKBENCH:收起`):s(X)(`@WORKBENCH:展开全文`)),1)):x(``,!0)])):(M(),z(`p`,{key:2,class:`rp__notice`,title:$.value.errorDetail},w($e($.value)),9,Xs)),Ze.value.length?(M(),z(`div`,Zs,[o(`p`,{class:`rp__facts-cap`,title:s(X)(`@WORKBENCH:上面是主 Agent 的判断,下面这些是从正在跑的任务里抄出来的事实`)},w(s(X)(`@WORKBENCH:任务事实`)),9,Qs),o(`ul`,$s,[(M(!0),z(J,null,e(Ze.value,(e,t)=>(M(),z(`li`,{key:e.taskId||t,class:W([`rpt`,{"is-silent":e.silent!==null}])},[o(`p`,ec,w(e.taskTitle||s(X)(`@WORKBENCH:未命名任务`)),1),o(`p`,tc,[e.projectName?(M(),z(`span`,nc,w(e.projectName),1)):x(``,!0),o(`span`,null,w(s(X)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:s($r)(e.elapsedMs)})),1),e.agent?(M(),z(`span`,rc,w(e.agent),1)):x(``,!0),e.toolCallCount?(M(),z(`span`,{key:2,title:e.toolMix||``},w(s(X)(`@WORKBENCH:工具 {n} 次`,{n:e.toolCallCount})),9,ic)):x(``,!0),e.silent===null?x(``,!0):(M(),z(`span`,ac,w(s(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:s($r)(e.silent)})),1))]),e.pct===null?x(``,!0):(M(),z(`p`,{key:0,class:`rpt__progress`,title:s(X)(s(Kr))},[o(`span`,{class:`rpt__bar`,role:`progressbar`,"aria-valuenow":e.pct,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":e.taskTitle||s(X)(`@WORKBENCH:未命名任务`)},[o(`i`,{class:`rpt__bar-fill`,style:re({width:e.pct+`%`})},null,4)],8,sc),o(`span`,cc,w(e.pct)+`%`,1)],8,oc)),e.lastTool?(M(),z(`p`,{key:1,class:`rpt__line is-tool`,title:e.lastTool},[o(`span`,uc,w(s(X)(`@WORKBENCH:工具`)),1),b(w(e.lastTool),1)],8,lc)):x(``,!0),e.lastThought?(M(),z(`p`,{key:2,class:`rpt__line is-thought`,title:e.lastThought},[o(`span`,fc,w(s(X)(`@WORKBENCH:最近思考`)),1),b(w(e.lastThought),1)],8,dc)):x(``,!0),e.lastLine?(M(),z(`p`,{key:3,class:`rpt__line`,title:e.lastLine},[o(`span`,mc,w(s(X)(`@WORKBENCH:最新回复`)),1),b(w(e.lastLine),1)],8,pc)):x(``,!0)],2))),128))])])):x(``,!0)])):(M(),z(`li`,{key:1,class:`oc-empty`,title:Ve.value},w(Be.value),9,hc))]),(t.reports||[]).length>1?(M(),z(`div`,{key:0,class:W([`oc__history`,{"is-collapsed":!it.value}])},[o(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":it.value,title:it.value?s(X)(`@WORKBENCH:收起`):s(X)(`@WORKBENCH:展开`),onClick:r[6]||=e=>ot(`history`)},[S(i,{class:`oc__sect-caret`},{default:I(()=>[(M(),a(me(it.value?s(j):s(ie))))]),_:1}),o(`span`,_c,w(s(X)(`@WORKBENCH:历史报告`)),1),o(`span`,vc,[o(`span`,yc,w(s(X)(`@WORKBENCH:共 {n} 份`,{n:(t.reports||[]).length})),1)])],8,gc),B(o(`ul`,bc,[(M(!0),z(J,null,e(t.reports,e=>(M(),z(`li`,{key:e.id},[o(`button`,{type:`button`,class:W([`oc__history-item`,{"is-active":e.id===$.value?.id}]),onClick:t=>He(e)},[o(`span`,Sc,w(s(ti)(e.at)),1),o(`span`,Cc,w(Ye(e)),1),o(`span`,wc,w(Qe(e)),1)],10,xc)]))),128))],512),[[K,it.value]])],2)):x(``,!0)],2),[[K,!t.collapsed&&m.value===`command`]]),B(o(`div`,{class:W([`oc__git`,{"is-collapsed":!at.value}])},[o(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":at.value,title:at.value?s(X)(`@WORKBENCH:收起`):s(X)(`@WORKBENCH:展开`),onClick:r[7]||=e=>ot(`git`)},[S(i,{class:`oc__sect-caret`},{default:I(()=>[(M(),a(me(at.value?s(j):s(ie))))]),_:1}),o(`span`,Ec,w(s(X)(`@WORKBENCH:项目概览`)),1),o(`span`,Dc,[o(`span`,Oc,w(t.selectedProject?t.selectedProject.name:s(X)(`@WORKBENCH:全部项目`)),1),!at.value&&st.value?(M(),z(`span`,kc,w(st.value),1)):x(``,!0)])],8,Tc),B(o(`dl`,Ac,[(M(!0),z(J,null,e(tt.value,e=>(M(),z(J,{key:e.label},[o(`dt`,jc,w(e.label),1),o(`dd`,{class:W([`oc__git-value`,{"is-warn":e.tone===`warn`,"is-danger":e.tone===`danger`}])},w(e.value),3)],64))),128)),o(`dt`,Mc,w(s(X)(`@WORKBENCH:今日完成`)),1),o(`dd`,Nc,w(t.todayDone),1),o(`dt`,Pc,w(s(X)(`@WORKBENCH:最后活跃`)),1),o(`dd`,Fc,w(t.selectedProject&&s(Qr)(t.selectedProject.stats.lastActiveAt)||`—`),1)],512),[[K,at.value]])],2),[[K,!t.collapsed&&m.value===`command`]]),B(o(`div`,{class:`oc__compose`,onPaste:R,onDrop:P(le,[`prevent`]),onDragover:r[15]||=P(e=>L.value=!0,[`prevent`]),onDragleave:r[16]||=e=>L.value=!1},[B(o(`textarea`,{ref_key:`inputRef`,ref:De,class:W([`oc__input`,{"is-over":xe.value}]),"onUpdate:modelValue":r[8]||=e=>l.value=e,style:re(ke.value),rows:`4`,placeholder:s(X)(`@WORKBENCH:给主 Agent 下一条指令,例如:把登录模块的错误处理重构一遍`),onKeydown:Te,onPaste:R,onMousedown:Me},null,46,Ic),[[ae,l.value]]),v.value.length>0||ce.value?(M(),a(gt,{key:0,attachments:v.value,"is-image":s(E),"human-size":s(ee),"is-uploading":ce.value,"is-paste-hover":L.value,"on-pick":ue,"on-remove":de,"raw-base":qc,onPaste:R,onDrop:le,onDragover:r[9]||=P(e=>L.value=!0,[`prevent`]),onDragenter:r[10]||=P(e=>L.value=!0,[`prevent`]),onDragleave:r[11]||=e=>L.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`])):x(``,!0),q.value>0?(M(),z(`p`,{key:1,class:W([`oc__count`,{"is-warn":Y.value,"is-over":xe.value}])},[xe.value?(M(),z(`span`,Lc,w(s(X)(`@WORKBENCH:超出上限 {max} 字,请精简后再派发(超出的部分不会被发出)`,{max:be.value})),1)):(M(),z(`span`,Rc,w(q.value)+` / `+w(be.value),1))],2)):x(``,!0),o(`div`,zc,[o(`button`,{type:`button`,class:`oc__attach`,disabled:ce.value,title:s(X)(`@WORKBENCH:添加附件(也可直接粘贴或拖入文件)`),"aria-label":s(X)(`@WORKBENCH:添加附件`),onClick:ue},[S(i,null,{default:I(()=>[S(s(T))]),_:1})],8,Bc),o(`button`,{type:`button`,class:W([`oc__attach`,{"is-on":G.value}]),title:s(X)(`@WORKBENCH:设置派发时自动附加的预设提示词(全局 / 各项目)`),"aria-label":s(X)(`@WORKBENCH:预设提示词设置`),onClick:r[12]||=e=>c(`open-prompt-settings`)},[S(i,null,{default:I(()=>[S(s(g))]),_:1})],10,Vc),o(`label`,{class:`oc__autorn`,title:s(X)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[B(o(`input`,{type:`checkbox`,"onUpdate:modelValue":r[13]||=e=>u.value=e},null,512),[[pe,u.value]]),o(`span`,null,w(s(X)(`@WORKBENCH:立即执行`)),1)],8,Hc),G.value?(M(),z(`label`,{key:0,class:`oc__autorn`,title:s(X)(`@WORKBENCH:取消勾选则本次派发的任务不带预设提示词(设置本身不受影响)`)},[B(o(`input`,{type:`checkbox`,"onUpdate:modelValue":r[14]||=e=>d.value=e},null,512),[[pe,d.value]]),o(`span`,null,w(s(X)(`@WORKBENCH:预设提示词({state})`,{state:ye.value})),1)],8,Uc)):x(``,!0),S(ls,{title:s(X)(`@WORKBENCH:本次派发使用的执行器(与执行按钮的临时切换共用)`)},null,8,[`title`]),o(`button`,{type:`button`,class:`oc__send`,disabled:!Ce.value,onClick:we},[S(i,{class:`oc__send-icon`},{default:I(()=>[S(s(k))]),_:1}),o(`span`,null,w(t.dispatching?s(X)(`@WORKBENCH:派发中…`):s(X)(`@WORKBENCH:派发`)),1)],8,Wc)]),o(`p`,Gc,[t.selectedProject?(M(),z(J,{key:0},[b(w(s(X)(`@WORKBENCH:指令会在「{name}」下新建一个任务;Enter 派发,Shift+Enter 换行`,{name:t.selectedProject.name})),1)],64)):(M(),z(J,{key:1},[b(w(s(X)(`@WORKBENCH:指令落到哪个项目由主 Agent 判断;Enter 派发,Shift+Enter 换行`)),1)],64))])],544),[[K,!t.collapsed&&m.value===`command`]])],2)}}}),[[`__scopeId`,`data-v-97f1e719`]]);t(),U(),C(),R();var Qc={class:`pd`},$c={class:`pd__intro`},el={class:`pd__field`},tl={class:`pd__head`},nl={class:`pd__label`,for:`pd-global`},rl={class:`pd__count`},il=[`placeholder`],al={class:`pd__field`},ol={class:`pd__head`},sl={class:`pd__label`,for:`pd-project`},cl={key:0,class:`pd__count`},ll=[`disabled`,`placeholder`],ul={class:`pd__hint`},dl={class:`pd__foot`},fl=[`disabled`],pl=4e3,ml=Z(m({__name:`WorkbenchDefaultPromptDialog`,props:{modelValue:{type:Boolean},defaultPrompt:{},projectPath:{},projectName:{},projectPrompt:{},saving:{type:Boolean}},emits:[`update:modelValue`,`save`],setup(e,{emit:t}){let n=e,r=t,i=F(``),c=F(``);V(()=>n.modelValue,e=>{e&&(i.value=n.defaultPrompt||``,c.value=n.projectPrompt||``)});let l=D(()=>!!n.projectPath),u=D(()=>i.value.trim()!==(n.defaultPrompt||``).trim()||l.value&&c.value.trim()!==(n.projectPrompt||``).trim());function d(){n.saving||r(`save`,{globalPrompt:i.value,projectPrompt:c.value})}function f(){r(`update:modelValue`,!1)}return(t,n)=>(M(),a(Le,{"model-value":e.modelValue,title:s(X)(`@WORKBENCH:预设提示词`),width:`min(640px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[2]||=e=>r(`update:modelValue`,e)},{footer:I(()=>[o(`div`,dl,[o(`button`,{type:`button`,class:`pd__btn`,onClick:f},w(s(X)(`@WORKBENCH:取消`)),1),n[3]||=o(`span`,{class:`pd__foot-spacer`},null,-1),o(`button`,{type:`button`,class:`pd__btn pd__btn--primary`,disabled:e.saving||!u.value,onClick:d},w(e.saving?s(X)(`@WORKBENCH:保存中…`):s(X)(`@WORKBENCH:保存`)),9,fl)])]),default:I(()=>[o(`div`,Qc,[o(`p`,$c,w(s(X)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),o(`div`,el,[o(`div`,tl,[o(`label`,nl,w(s(X)(`@WORKBENCH:全局提示词`)),1),o(`span`,rl,w(i.value.length)+` / `+w(pl),1)]),B(o(`textarea`,{id:`pd-global`,"onUpdate:modelValue":n[0]||=e=>i.value=e,class:`pd__area`,rows:`5`,maxlength:pl,placeholder:s(X)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,il),[[ae,i.value]])]),o(`div`,al,[o(`div`,ol,[o(`label`,sl,w(l.value?s(X)(`@WORKBENCH:「{name}」的项目提示词`,{name:e.projectName}):s(X)(`@WORKBENCH:项目提示词`)),1),l.value?(M(),z(`span`,cl,w(c.value.length)+` / `+w(pl),1)):x(``,!0)]),B(o(`textarea`,{id:`pd-project`,"onUpdate:modelValue":n[1]||=e=>c.value=e,class:`pd__area`,rows:`5`,maxlength:pl,disabled:!l.value,placeholder:l.value?s(X)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):s(X)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,ll),[[ae,c.value]]),o(`p`,ul,w(l.value?s(X)(`@WORKBENCH:项目提示词追加在全局提示词之后(不覆盖全局),派发到「{name}」时一起带上`,{name:e.projectName}):s(X)(`@WORKBENCH:选中的是「全部项目」,落点由主 Agent 判断 —— 想给某个项目单设提示词,先选中它`)),1)])])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-5d14f0f1`]]);t(),U(),C(),R();var hl={class:`nc`},gl={class:`nc__field`},_l={class:`nc__label`,for:`nc-project`},vl={value:``},yl=[`value`],bl=[`title`],xl={class:`nc__field`},Sl={class:`nc__label`,for:`nc-title`},Cl=[`placeholder`],wl={class:`nc__field`},Tl={class:`nc__label`,for:`nc-desc`},El=[`placeholder`],Dl={key:0,class:`nc__error`},Ol={class:`nc__foot`},kl=[`disabled`],Al=[`disabled`],jl=Z(m({__name:`WorkbenchTaskCreateDialog`,props:{modelValue:{type:Boolean},projects:{},defaultProjectPath:{}},emits:[`update:modelValue`,`created`],setup(t,{emit:n}){let r=t,i=n,c=F(``),l=F(``),u=F(``),d=F(!1),f=F(``);function p(e){let t=Q(e);if(!t)return``;let n=r.projects.find(e=>Q(e.path)===t);return n?n.path:``}V(()=>r.modelValue,e=>{e&&(c.value=``,l.value=``,u.value=p(r.defaultProjectPath),f.value=``,d.value=!1)});let m=D(()=>r.projects),h=D(()=>!d.value&&(c.value.trim().length>0||l.value.trim().length>0)),g=D(()=>{let e=Q(u.value);if(!e)return``;let t=m.value.find(t=>Q(t.path)===e);return t?t.name:``});async function _(e){if(h.value){d.value=!0,f.value=``;try{let t={title:c.value.trim(),desc:l.value};u.value&&(t.projectPath=u.value);let n=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}).then(e=>e.json()).catch(()=>null);if(!n?.success){f.value=n?.error||X(`@WORKBENCH:保存失败`);return}i(`update:modelValue`,!1),i(`created`,{task:n.task,openEditor:e})}finally{d.value=!1}}}return(n,r)=>(M(),a(Le,{"model-value":t.modelValue,title:s(X)(`@WORKBENCH:新建开发任务`),width:`min(600px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":r[9]||=e=>i(`update:modelValue`,e)},{footer:I(()=>[o(`div`,Ol,[o(`button`,{type:`button`,class:`nc__btn`,onClick:r[6]||=e=>i(`update:modelValue`,!1)},w(s(X)(`@WORKBENCH:取消`)),1),r[10]||=o(`span`,{class:`nc__foot-spacer`},null,-1),o(`button`,{type:`button`,class:`nc__btn`,disabled:!h.value,onClick:r[7]||=e=>_(!0)},w(s(X)(`@WORKBENCH:创建并打开编辑器`)),9,kl),o(`button`,{type:`button`,class:`nc__btn nc__btn--primary`,disabled:!h.value,onClick:r[8]||=e=>_(!1)},w(d.value?s(X)(`@WORKBENCH:创建中…`):s(X)(`@WORKBENCH:创建`)),9,Al)])]),default:I(()=>[o(`div`,hl,[o(`div`,gl,[o(`label`,_l,w(s(X)(`@WORKBENCH:项目`)),1),B(o(`select`,{id:`nc-project`,"onUpdate:modelValue":r[0]||=e=>u.value=e,class:`nc__select`},[o(`option`,vl,w(s(X)(`@WORKBENCH:跟随当前项目`)),1),(M(!0),z(J,null,e(m.value,e=>(M(),z(`option`,{key:e.key,value:e.path},w(e.name)+w(e.exists===!1?` · ${s(X)(`@WORKBENCH:目录不存在`)}`:``),9,yl))),128))],512),[[ue,u.value]]),o(`p`,{class:`nc__hint`,title:u.value},w(g.value?s(X)(`@WORKBENCH:任务会在「{name}」目录下执行`,{name:g.value}):s(X)(`@WORKBENCH:任务会跟随应用当前的工作目录`)),9,bl)]),o(`div`,xl,[o(`label`,Sl,w(s(X)(`@WORKBENCH:标题`)),1),B(o(`input`,{id:`nc-title`,"onUpdate:modelValue":r[1]||=e=>c.value=e,class:`nc__input`,type:`text`,maxlength:`200`,placeholder:s(X)(`@WORKBENCH:一句话说清要做什么`),onKeydown:r[2]||=Y(P(e=>_(!1),[`prevent`]),[`enter`])},null,40,Cl),[[ae,c.value]])]),o(`div`,wl,[o(`label`,Tl,w(s(X)(`@WORKBENCH:描述`)),1),B(o(`textarea`,{id:`nc-desc`,"onUpdate:modelValue":r[3]||=e=>l.value=e,class:`nc__input nc__input--area`,rows:`6`,placeholder:s(X)(`@WORKBENCH:把背景、验收标准、相关文件路径写进来,执行时用它当上下文`),onKeydown:[r[4]||=Y(P(e=>_(!1),[`ctrl`,`prevent`]),[`enter`]),r[5]||=Y(P(e=>_(!1),[`meta`,`prevent`]),[`enter`])]},null,40,El),[[ae,l.value]])]),f.value?(M(),z(`p`,Dl,w(f.value),1)):x(``,!0)])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-dc7778da`]]);t(),U(),C(),R();var Ml={class:`board__top`},Nl=[`title`,`aria-label`,`aria-expanded`],Pl={class:`board__brand`},Fl={class:`board__brand-text`},Il={class:`board__title`},Ll={class:`board__subtitle`},Rl={class:`board__stats`},zl={class:`board__stat`},Bl={class:`board__stat-label`},Vl={class:`board__stat-value`},Hl=[`title`],Ul={class:`board__stat-label`},Wl={class:`board__stat-value`},Gl={class:`board__stat`},Kl={class:`board__stat-label`},ql={class:`board__stat`},Jl={class:`board__stat-label`},Yl={class:`board__stat-value`},Xl=[`title`],Zl={class:`board__main`},Ql={class:`board__main-head`},$l={class:`board__main-title`},eu={class:`board__project-name`},tu=[`title`],nu={key:1,class:`board__project-path`},ru={key:0,class:`board__project-meta`},iu=[`title`],au=`wb.boardProject.v1`,ou=5e3,su=3e4,cu=`wb.boardLayout.v1`,lu=180,uu=420,du=260,fu=900,pu=.26,mu=.46,hu=Z(m({__name:`WorkbenchBoard`,props:{openedTaskId:{}},emits:[`open-task`],setup(e,{emit:t}){let n=e,r=t,{projects:i,boardTasks:c,currentProjectPath:l,loading:u,loadProjects:d,removeProject:f}=Ir(),{active:p,activity:m,running:g,dispatching:_,togglingSchedule:v,maxInstructionChars:y,defaultPrompt:b,projectPrompts:C,reports:T,generatingReport:E,reportIntervalMs:ee,loadOrchestrator:O,setSchedulingActive:k,dispatch:A,saveDefaultPrompt:te,saveProjectPrompt:j,loadReports:ie,generateReport:ae,setReportInterval:se}=Jr(),{active:ce}=cr(),P=(()=>{try{return localStorage.getItem(au)}catch{return null}})(),L=F(P||``);V(L,e=>{try{localStorage.setItem(au,e)}catch{}});let R=D(()=>L.value&&i.value.find(e=>e.key===L.value)||null);V(i,e=>{L.value&&(e.some(e=>e.key===L.value)||(L.value=``))});let le=!1;function ue(){if(le||(le=!0,P!==null))return;let e=l.value?Q(l.value):``;e&&i.value.some(t=>t.key===e)&&(L.value=e)}let B=D(()=>{let e=new Map(i.value.map(e=>[e.key,e.name])),t={};for(let n of c.value)n.projectPath&&(t[n.projectPath]=e.get(Q(n.projectPath))||``);return t}),fe=D(()=>{if(!L.value)return c.value;let e=L.value;return c.value.filter(t=>Q(t.projectPath)===e)}),pe=D(()=>{let e=new Date;e.setHours(0,0,0,0);let t=e.getTime();return{projects:i.value.length,tasks:c.value.length,running:g.value.length,todayDone:m.value.filter(e=>e.kind===`done`&&e.at&&new Date(e.at).getTime()>=t).length}});function me(e){r(`open-task`,{taskId:e.id,projectPath:e.projectPath})}let he=null,H=!1,U=null;async function ge(e=!0){if(!H){H=!0;try{await Promise.all([d(e),O(e)])}finally{H=!1}}}function ve(){document.hidden||(ge(!0),ie(!0))}ne(async()=>{window.addEventListener(`resize`,J),await ge(!1),ie(!0),ue(),he=setInterval(()=>{document.hidden||ge(!0)},ou),U=setInterval(()=>{document.hidden||ie(!0)},su),document.addEventListener(`visibilitychange`,ve)}),_e(()=>{window.removeEventListener(`resize`,J),he&&=(clearInterval(he),null),U&&=(clearInterval(U),null),document.removeEventListener(`visibilitychange`,ve)});let G=q({left:null,right:null,leftCollapsed:!1,rightCollapsed:!1});function ye(){try{let e=localStorage.getItem(cu);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(G.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(G.right=t.right),G.leftCollapsed=t.leftCollapsed===!0,G.rightCollapsed=t.rightCollapsed===!0}catch{}}ye();function K(){try{localStorage.setItem(cu,JSON.stringify(G))}catch{}}let be=F(typeof window>`u`?1920:window.innerWidth);function J(){be.value=window.innerWidth}let xe=D(()=>be.value<=1024),Ce=D(()=>be.value<=860);function we(e,t){let n=e===`left`?lu:du,r=Math.min(e===`left`?uu:fu,be.value*(e===`left`?pu:mu));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}let Te=D(()=>{let e={};return G.left!=null&&(e[`--wb-left-w`]=we(`left`,G.left)+`px`),G.right!=null&&!Ce.value&&(e[`--wb-right-w`]=we(`right`,G.right)+`px`),e}),Ee=F(null),De=F(null);function Oe(e){return Ee.value?.querySelector(e===`left`?`.board__left`:`.oc`)}function ke(e){window.removeEventListener(`mousemove`,e),document.body.style.userSelect=``,document.body.style.cursor=``,De.value=null,K()}function Z(e,t){if(e===`left`?xe.value:Ce.value)return;let n=Oe(e);if(!n)return;t.preventDefault();let r=t.clientX,i=n.getBoundingClientRect().width;De.value=e,document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let a=t=>{let n=(t.clientX-r)*(e===`left`?1:-1);G[e]=we(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>ke(a),{once:!0})}function Ae(e){G[e]=null,K()}let je=F(!1),Me=D(()=>xe.value?!je.value:G.leftCollapsed);function Ne(){if(xe.value){je.value=!je.value;return}G.leftCollapsed=!G.leftCollapsed,K()}function Pe(){xe.value&&(je.value=!1)}let Fe=D(()=>G.rightCollapsed&&!Ce.value);function Ie(){G.rightCollapsed=!G.rightCollapsed,K()}function Le(e){L.value=e?e.key:``,je.value=!1}let Re=F(!1);function $(){Re.value=!0}async function ze(e){if(await ge(!0),e.openEditor){r(`open-task`,{taskId:e.task.id,projectPath:e.task.projectPath||``});return}N.success(X(`@WORKBENCH:已创建任务`))}async function Be(e){if(e.runningJobs>0)return;let t=`/api/workbench/tasks/${encodeURIComponent(e.id)}/run`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({executor:ce.value})}).then(e=>e.json()).catch(()=>null);if(!n?.success){N.error(n?.error||X(`@WORKBENCH:执行失败`));return}N.success(X(`@WORKBENCH:已开始执行`)),await ge(!0)}let Ve=new Set;async function He(e){if(Ve.has(e.id))return;let t=e.live?.jobId;if(!t){N.error(X(`@WORKBENCH:停止失败`));return}try{await de.confirm(X(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),X(`@WORKBENCH:停止执行`),{confirmButtonText:X(`@WORKBENCH:停止`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}Ve.add(e.id);try{let e=await fetch(`/api/workbench/jobs/${encodeURIComponent(t)}/cancel`,{method:`POST`}).then(e=>e.json()).catch(()=>null);if(!e?.success){N.error(e?.error||X(`@WORKBENCH:停止失败`));return}N.success(X(`@WORKBENCH:已发送停止信号`)),await ge(!0)}finally{Ve.delete(e.id)}}let Ue=new Set;async function We(e){if(!Ue.has(e.id)){if(e.runningJobs>0)try{await de.confirm(X(`@WORKBENCH:这条任务还在执行,标记完成会同时把它停掉。已输出的内容会保留。`),X(`@WORKBENCH:标记为已完成`),{confirmButtonText:X(`@WORKBENCH:标记完成`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}Ue.add(e.id);try{let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/done`,{method:`POST`}).then(e=>e.json()).catch(()=>null);if(!t?.success){N.error(t?.error||X(`@WORKBENCH:标记失败`));return}N.success(X(`@WORKBENCH:已标记为已完成`)),await ge(!0)}finally{Ue.delete(e.id)}}}async function Ge(e){if(!Ue.has(e.id)){Ue.add(e.id);try{let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/done`,{method:`DELETE`}).then(e=>e.json()).catch(()=>null);if(!t?.success){N.error(t?.error||X(`@WORKBENCH:撤销失败`));return}N.success(X(`@WORKBENCH:已撤销完成标记`)),await ge(!0)}finally{Ue.delete(e.id)}}}async function Ke(e){let{ok:t,keptTasks:n}=await f(e.path);t&&(N.success(n>0?X(`@WORKBENCH:已移除项目,{n} 条任务仍保留在「全部项目」下`,{n}):X(`@WORKBENCH:已移除项目`)),await ge(!0))}async function qe(e){let t=(e.title||``).trim()||X(`@WORKBENCH:未命名任务`);try{await de.confirm(X(`@WORKBENCH:删除任务「{title}」?`,{title:t}),X(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}`,{method:`DELETE`}).then(e=>e.json()).catch(()=>null);if(n&&n.success===!1){N.error(n.error||X(`@WORKBENCH:删除失败`));return}await ge(!0)}let Je=F(null),Ye=D(()=>R.value?.path||l.value);async function Xe(e){let t=await A({text:e.text,projectPath:e.projectPath,autoRun:e.autoRun,attachments:e.attachments,useDefaultPrompt:e.useDefaultPrompt,executor:e.executor});t&&(Je.value?.clearAttachments(),Je.value?.clearDraft(),N.success(t.ran?X(`@WORKBENCH:已派发并开始执行`):X(`@WORKBENCH:已派发(只建任务未执行)`)),await ge(!0))}async function Ze(e){await k(e)}let Qe=F(!1),$e=F(!1),et=D(()=>{let e=R.value?.key;return e&&C.value?.[e]?.prompt||``});async function tt(e){if($e.value)return;let t=e.globalPrompt.trim(),n=e.projectPrompt.trim(),r=R.value;$e.value=!0;try{let e=!0;t!==(b.value||``).trim()&&(e=await te(t)),e&&r&&n!==et.value.trim()&&(e=await j(r.path,n)),e&&(Qe.value=!1)}finally{$e.value=!1}}return(e,t)=>{let r=h;return M(),z(`div`,{class:`board`,style:re(Te.value)},[o(`header`,Ml,[o(`button`,{type:`button`,class:W([`board__icon-btn board__fold-btn`,{"is-on":!Me.value}]),title:Me.value?s(X)(`@WORKBENCH:展开项目列表`):s(X)(`@WORKBENCH:收起项目列表`),"aria-label":Me.value?s(X)(`@WORKBENCH:展开项目列表`):s(X)(`@WORKBENCH:收起项目列表`),"aria-expanded":!Me.value,onClick:Ne},[Me.value?(M(),a(r,{key:1},{default:I(()=>[S(s(oe))]),_:1})):(M(),a(r,{key:0},{default:I(()=>[S(s(Se))]),_:1}))],10,Nl),o(`div`,Pl,[o(`span`,{class:W([`board__live`,{"is-off":!s(p)}]),"aria-hidden":`true`},null,2),o(`div`,Fl,[o(`h1`,Il,w(s(X)(`@WORKBENCH:多项目编排台`)),1),o(`p`,Ll,w(s(p)?s(X)(`@WORKBENCH:主 Agent 调度中`):s(X)(`@WORKBENCH:主 Agent 已暂停`)),1)])]),o(`div`,Rl,[o(`span`,zl,[o(`span`,Bl,w(s(X)(`@WORKBENCH:项目`)),1),o(`strong`,Vl,w(pe.value.projects),1)]),o(`span`,{class:`board__stat`,title:s(X)(`@WORKBENCH:看板上全部任务(含已从项目列表移除的项目)`)},[o(`span`,Ul,w(s(X)(`@WORKBENCH:全部任务`)),1),o(`strong`,Wl,w(pe.value.tasks),1)],8,Hl),o(`span`,Gl,[o(`span`,Kl,w(s(X)(`@WORKBENCH:活跃执行`)),1),o(`strong`,{class:W([`board__stat-value`,{"is-live":pe.value.running>0}])},w(pe.value.running),3)]),o(`span`,ql,[o(`span`,Jl,w(s(X)(`@WORKBENCH:今日完成`)),1),o(`strong`,Yl,w(pe.value.todayDone),1)])])]),o(`div`,{ref_key:`colsRef`,ref:Ee,class:W([`board__cols`,{"is-resizing":De.value!==null}])},[o(`div`,{class:W([`board__scrim`,{"is-on":je.value}]),"aria-hidden":`true`,onClick:t[0]||=e=>je.value=!1},null,2),o(`aside`,{class:W([`board__left`,{"is-collapsed":Me.value}]),onKeydown:Y(Pe,[`esc`])},[S(Na,{projects:s(i),"selected-key":L.value,loading:s(u),onSelect:Le,onRemove:Ke},null,8,[`projects`,`selected-key`,`loading`])],34),Me.value?x(``,!0):(M(),z(`div`,{key:0,class:`board__splitter board__splitter--left`,role:`separator`,"aria-orientation":`vertical`,title:s(X)(`@WORKBENCH:拖动调整项目列表宽度,双击恢复默认`),onMousedown:t[1]||=e=>Z(`left`,e),onDblclick:t[2]||=e=>Ae(`left`)},null,40,Xl)),o(`main`,Zl,[o(`div`,Ql,[o(`div`,$l,[o(`h2`,eu,w(R.value?R.value.name:s(X)(`@WORKBENCH:全部项目`)),1),R.value?(M(),z(`span`,{key:0,class:`board__project-path`,title:R.value.path},w(R.value.path),9,tu)):(M(),z(`span`,nu,w(s(X)(`@WORKBENCH:共 {n} 个项目的任务`,{n:s(i).length})),1))]),R.value?(M(),z(`span`,ru,w(s(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:R.value.stats.done,total:R.value.stats.total})),1)):x(``,!0)]),S(ns,{tasks:fe.value,"project-labels":B.value,"show-project-label":!R.value,"opened-task-id":n.openedTaskId,onOpenTask:me,onRunTask:Be,onStopTask:He,onCompleteTask:We,onReopenTask:Ge,onDeleteTask:qe,onCreateTask:$},null,8,[`tasks`,`project-labels`,`show-project-label`,`opened-task-id`])]),!Fe.value&&!Ce.value?(M(),z(`div`,{key:1,class:`board__splitter board__splitter--right`,role:`separator`,"aria-orientation":`vertical`,title:s(X)(`@WORKBENCH:拖动调整主 Agent 控制台宽度,双击恢复默认`),onMousedown:t[3]||=e=>Z(`right`,e),onDblclick:t[4]||=e=>Ae(`right`)},null,40,iu)):x(``,!0),S(Zc,{ref_key:`consoleRef`,ref:Je,active:s(p),running:s(g),"selected-project":R.value,dispatching:s(_),"toggling-schedule":s(v),"today-done":pe.value.todayDone,collapsed:Fe.value,"default-prompt":s(b),"project-prompts":s(C),reports:s(T),"report-interval-ms":s(ee),"generating-report":s(E),"max-instruction-chars":s(y),onToggleCollapse:Ie,onToggleSchedule:Ze,onDispatch:Xe,onGenerateReport:s(ae),onSetReportInterval:s(se),onOpenPromptSettings:t[5]||=e=>Qe.value=!0},null,8,[`active`,`running`,`selected-project`,`dispatching`,`toggling-schedule`,`today-done`,`collapsed`,`default-prompt`,`project-prompts`,`reports`,`report-interval-ms`,`generating-report`,`max-instruction-chars`,`onGenerateReport`,`onSetReportInterval`])],2),S(ml,{modelValue:Qe.value,"onUpdate:modelValue":t[6]||=e=>Qe.value=e,"default-prompt":s(b),"project-path":R.value?.path||``,"project-name":R.value?.name||``,"project-prompt":et.value,saving:$e.value,onSave:tt},null,8,[`modelValue`,`default-prompt`,`project-path`,`project-name`,`project-prompt`,`saving`]),S(jl,{modelValue:Re.value,"onUpdate:modelValue":t[7]||=e=>Re.value=e,projects:s(i),"default-project-path":Ye.value,onCreated:ze},null,8,[`modelValue`,`projects`,`default-project-path`])],4)}}}),[[`__scopeId`,`data-v-da7f1234`]]);t(),U(),C(),R();var gu={class:`workbench`},_u={class:`wb-editor`},vu={class:`wb-editor-bar`},yu=[`title`],bu=[`title`],xu=[`title`],Su={class:`wb-editor-bar__hint`},Cu={class:`workbench__editor-row`},wu=[`aria-label`,`aria-valuenow`,`title`],Tu={class:`wb-split`},Eu={key:0,class:`wb-placeholder`},Du={class:`wb-split__header`},Ou={class:`wb-split__title-wrap`},ku=[`placeholder`,`aria-label`],Au=[`title`,`aria-label`],ju=[`title`],Mu={key:0,class:`wb-meta-save__dot`},Nu={key:1,class:`wb-meta-save__check`},Pu={key:2,class:`wb-meta-save__bang`},Fu={key:3,class:`wb-meta-save__dot`},Iu=[`title`],Lu={class:`wb-executor-item`},Ru={class:`wb-executor-item__name`},zu=[`title`],Bu={key:2,class:`wb-executor-item__missing`},Vu={key:2,class:`wb-no-claude-hint`,role:`status`},Hu={class:`wb-no-claude-hint__text`},Uu={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},Wu=[`title`,`aria-label`],Gu=[`title`,`aria-label`],Ku=[`title`,`aria-label`],qu=[`open`],Ju={class:`wb-task-desc__summary`},Yu={class:`wb-task-desc__label`},Xu=[`title`,`aria-label`],Zu={key:0,class:`wb-task-desc__tag`},Qu={key:0},$u={key:1,class:`wb-task-desc__tag-attachment`},ed=[`placeholder`,`aria-label`],td={class:`wb-execution-body`},nd={class:`wb-exec-detail`},rd={class:`wb-form-item__label wb-task-prompt__summary`},id={key:0,class:`wb-task-prompt__tag`},ad={key:0,class:`wb-task-prompt__parts`},od={class:`wb-task-prompt__label`},sd={class:`wb-task-prompt__text`},cd={key:1,class:`wb-task-prompt__empty`},ld={class:`wb-simple-chat`},ud={key:0,class:`wb-simple-chat__footer`},dd=`wb.lastTaskByProject.v1`,fd=`__no_project__`,pd=`wb.sidebarWidth.v1`,md=200,hd=480,gd=268,_d=3e3,vd=52,yd=320,bd=500,xd=Z(m({__name:`WorkbenchView`,setup(t){let r=Pe(),i=Fe(),c=F((()=>{try{let e=parseInt(localStorage.getItem(pd)||``,10);return Number.isFinite(e)?Math.min(hd,Math.max(md,e)):gd}catch{return gd}})());function l(e){e.preventDefault();let t=e.clientX,n=c.value;document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let r=e=>{c.value=Math.min(hd,Math.max(md,n+e.clientX-t))};window.addEventListener(`mousemove`,r),window.addEventListener(`mouseup`,()=>{window.removeEventListener(`mousemove`,r),document.body.style.userSelect=``,document.body.style.cursor=``;try{localStorage.setItem(pd,String(c.value))}catch{}},{once:!0})}function u(e){c.value=Math.min(hd,Math.max(md,c.value+e));try{localStorage.setItem(pd,String(c.value))}catch{}}function d(){try{let e=localStorage.getItem(dd),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function f(e){try{localStorage.setItem(dd,JSON.stringify(e))}catch{}}function p(e,t){let n=d();n[e||fd]=t,f(n)}let m=F(!1);function g(){m.value=!1}let _=F(null);async function v(e){await R(),H.value=e.taskId,_.value=e.taskId,K(),U.value&&p(Q(T.value.path),e.taskId),m.value=!0}let{tasks:y,jobs:C,currentProject:T,connectSSE:ee,disconnectSSE:O,loadCurrentProject:k,loadJobs:oe,clearJobsByTask:ce,loadTasks:R}=lr();function le(){let e=Q(T.value.path),t=y.value.filter(t=>!t.projectPath||Q(t.projectPath)===e),n=d(),r=e&&n[e]||!e&&n[fd]||``,i=r?y.value.find(e=>e.id===r):null,a=t[0]||y.value[0]||null,o=i&&i.projectPath&&Q(i.projectPath)!==e?null:i?i.id:a?a.id:null;H.value=o,K()}async function ue(){let e=H.value;if(await R(),e&&y.value.some(t=>t.id===e)){K();return}le()}async function pe(){await R(),le()}let he=F(!1),H=F(null),U=D(()=>y.value.find(e=>e.id===H.value)||null),ve=D(()=>{let e=U.value?.projectPath||``;return!e||Q(e)===Q(T.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),ye=F({title:``,desc:``});function K(){U.value?ye.value={title:U.value.title,desc:U.value.desc}:ye.value={title:``,desc:``}}let q=F(`idle`),xe=F(0),Se=null,Ce=D(()=>{if(!U.value)return!1;let e=U.value;return ye.value.title!==e.title||ye.value.desc!==e.desc});function we(){Se!==null&&(clearTimeout(Se),Se=null)}function Ee(e){return!(!e||(e.title||``).trim()||(e.desc||``).trim()||(e.simpleOverride||``).trim()||Array.isArray(e.attachments)&&e.attachments.length>0)}async function De(e){try{await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`})}catch{}let t=y.value.findIndex(t=>t.id===e.id);t!==-1&&y.value.splice(t,1)}async function ke(){let e=y.value.filter(e=>e.id!==H.value&&Ee(e));for(let t of e)await De(t)}async function Z(){if(!U.value)return!1;if(!Ce.value)return!0;if(q.value=`saving`,await St(!1))return xe.value=Date.now(),q.value=`saved`,setTimeout(()=>{q.value===`saved`&&Date.now()-xe.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}V(()=>U.value?{id:U.value.id,title:U.value.title,desc:U.value.desc}:null,(e,t)=>{e&&t&&e.id===t.id&&(Se!==null&&clearTimeout(Se),Se=window.setTimeout(()=>{Z()},1500))},{deep:!0}),V(H,async(e,t)=>{we(),U.value&&Ce.value&&await Z()}),V(T,async e=>{if(!e.path)return;let t=Q(e.path),n=U.value;n&&n.projectPath&&Q(n.projectPath)!==t&&await pe()});function Ae(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function je(){U.value&&Ce.value&&!Ee(U.value)&&Ae(U.value)}let Ie=F(!1);async function Re(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}}let ze=F(null),Be=F(null);async function Ve(e){if(e){if(!await Re((e.title||``).trim()||X(`@WORKBENCH:未命名任务`))){N.error(X(`@WORKBENCH:复制失败`));return}ze.value=e.id,N.success(X(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{ze.value===e.id&&(ze.value=null)},1500)}}async function He(e){if(!e)return;let t=(e.desc||``).trim();if(!t){N.warning(X(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await Re(t)){N.error(X(`@WORKBENCH:复制失败`));return}Be.value=e.id,N.success(X(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{Be.value===e.id&&(Be.value=null)},1500)}let{simpleConversationMessages:Ue,simpleAllJobsFor:We,simpleJobFor:Ge,simpleJobState:Ke}=er(C,U),qe=F(null);function Je(e){let t=(e?.projectPath||``).trim().replace(/[\\/]+$/,``);return t?t.split(/[\\/]/).pop()||t:T.value.name||``}async function Ye(e){if(!e)return;let t=or(We(e),{title:e.title,projectName:Je(e)});if(!t){N.warning(X(`@WORKBENCH:暂无执行内容可复制`));return}if(!await Re(t)){N.error(X(`@WORKBENCH:复制失败`));return}qe.value=e.id,N.success(X(`@WORKBENCH:已复制执行内容`)),window.setTimeout(()=>{qe.value===e.id&&(qe.value=null)},1500)}let Xe=[`wheel`,`touchstart`,`pointerdown`,`keydown`],Ze=F(null),Qe=F(null),$e=null,et=null,tt=null;function nt(){if($e&&=($e.disconnect(),null),et!==null&&(clearTimeout(et),et=null),tt){for(let e of Xe)tt.removeEventListener(e,nt);tt=null}}function rt(){nt();let e=Ze.value;if(!e)return;e.scrollToBottom?.(!1);let t=Qe.value?.querySelector(`.acu-message-list`);if(t&&typeof ResizeObserver<`u`){tt=t;for(let e of Xe)t.addEventListener(e,nt,{passive:!0});$e=new ResizeObserver(()=>Ze.value?.scrollToBottom?.(!1)),$e.observe(t),t.firstElementChild&&$e.observe(t.firstElementChild),et=setTimeout(nt,_d)}}let it=D(()=>m.value&&U.value&&We(U.value).length>0?U.value.id:``);V(it,async e=>{nt(),e&&(await A(),rt())}),_e(nt);function at(e){if(!e)return!1;let t=Ge(e);return!!t&&(t.status===`running`||t.status===`pending`)}let ot=D(()=>We(U.value).length>0),st=D(()=>at(U.value)),ct=D(()=>U.value?st.value?X(`@WORKBENCH:正在执行中,请先「停止」再重新执行`):ot.value?X(`@WORKBENCH:重新跑一轮:上一轮的执行记录会被清空`):``:``),lt=D(()=>{let e=U.value;if(!e)return[];let t=e.promptParts;if(t&&(t.global||t.project)){let e=[];return t.global&&e.push({key:`global`,label:X(`@WORKBENCH:全局提示词`),text:t.global}),t.project&&e.push({key:`project`,label:X(`@WORKBENCH:项目提示词`),text:t.project}),e}let n=(e.simpleOverride||``).trim();return n?[{key:`legacy`,label:X(`@WORKBENCH:提示词`),text:n}]:[]}),ut=F(!1),dt=F(null),ft=F(null);function pt(e){let t=e?.currentTarget||ft.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?bd:yd,r=Math.min(Math.max(t.scrollHeight,vd),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}V(Ie,async e=>{e&&(await A(),pt())}),V(()=>U.value?.id,async()=>{Ie.value&&(await A(),pt())});async function mt(){if(ut.value)return;ut.value=!0;let e={title:``,desc:``};T.value.path&&(e.projectPath=T.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){N.error(t.error||X(`@WORKBENCH:保存失败`));return}we(),U.value&&Ee(U.value)?await De(U.value):U.value&&Ce.value&&await Z(),await pe(),t.task?.id&&(H.value=t.task.id,K(),N.success(X(`@WORKBENCH:已新建任务`)),await A(),dt.value?.focus())}finally{ut.value=!1}}async function ht(e){await de.confirm(X(`@WORKBENCH:删除任务「{title}」?`,{title:e.title}),X(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),H.value===e.id&&(H.value=null),pe()}async function _t(e){let t=(e.title||X(`@WORKBENCH:未命名任务`)).trim(),n={title:X(`@WORKBENCH:{title} (副本)`,{title:t}),desc:e.desc||``,simpleOverride:e.simpleOverride||``};e.promptParts&&(e.promptParts.global||e.promptParts.project)&&(n.promptParts=e.promptParts),T.value.path&&(n.projectPath=T.value.path);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)}).then(e=>e.json());if(!e.success){N.error(e.error||X(`@WORKBENCH:复制失败`));return}await pe(),e.task?.id&&(H.value=e.task.id,K()),N.success(X(`@WORKBENCH:已复制任务`))}catch(e){N.error(X(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function vt(e){if(H.value===e.id)return;we();let t=U.value;t&&Ee(t)?await De(t):t&&Ce.value&&await Z(),H.value=e.id,K(),p(Q(T.value.path),e.id)}async function yt(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=y.value.slice(),i=xt(y.value,t,n);if(i!==y.value){y.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:X(`@WORKBENCH:排序保存失败`)}));e?.success||(y.value=r,N.error(e?.error||X(`@WORKBENCH:排序保存失败`)))}catch(e){y.value=r,N.error(X(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function xt(e,t,n){let r=e=>Q(e)||fd,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}async function St(e){if(!U.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(U.value)}).then(e=>e.json());return t.success?(e&&N.success(X(`@WORKBENCH:已保存`)),await ue(),!0):(N.error(t.error||X(`@WORKBENCH:保存失败`)),!1)}ne(async()=>{await Promise.all([pe(),k(),oe()]),await ke(),ee(),window.addEventListener(`beforeunload`,je),i.fetchExecutorModels()}),_e(()=>{O(),window.removeEventListener(`beforeunload`,je),U.value&&Ce.value&&!Ee(U.value)&&Ae(U.value)});let{pasteHoverId:Ct,isUploading:wt,isImageAttachment:Tt,humanSize:Et,onAttachmentPaste:Dt,onAttachmentDrop:Ot,uploadAttachment:kt,removeAttachment:At,pickAttachmentFile:jt}=Zn(),{runTask:Mt,onContinueSendFromChat:Nt,cancelJob:Pt,clearExecutionForSelectedTask:Ft}=sr(C,y,U,{clearJobsByTask:ce,persistTask:St,uploadAttachment:kt,getExecutor:()=>It.value}),{active:It,availability:Lt,hasAnyExecutor:Rt,choose:zt,executorModelText:Bt,executorModelTitle:Vt}=cr();function Ht(e){return Ne(e)}let Ut=D(()=>We(U.value).slice(-1)[0]),Wt=D(()=>Ne(Ut.value?.agent)),Gt=D(()=>bt(Ut.value?.agent));return(t,i)=>{let d=h,f=n,p=be,C=E;return M(),z(`div`,gu,[S(hu,{"opened-task-id":_.value,onOpenTask:v},null,8,[`opened-task-id`]),S(Le,{modelValue:m.value,"onUpdate:modelValue":i[22]||=e=>m.value=e,title:s(X)(`@WORKBENCH:任务执行`),type:`flex`,"height-mode":`fixed`,"height-offset":`88px`,top:`2vh`,width:`min(1520px, 96vw)`},{default:I(()=>[o(`div`,_u,[o(`div`,vu,[o(`button`,{type:`button`,class:`wb-back-btn`,title:s(X)(`@WORKBENCH:返回看板`),onClick:g},[S(d,{class:`wb-back-btn__icon`},{default:I(()=>[S(s(te))]),_:1}),o(`span`,null,w(s(X)(`@WORKBENCH:返回看板`)),1)],8,yu),o(`span`,{class:`wb-editor-bar__project`,title:s(T).path},w(s(T).name),9,bu),ve.value?(M(),z(`span`,{key:0,class:`wb-editor-bar__repo`,title:ve.value.path},w(s(X)(`@WORKBENCH:执行于 {name}`,{name:ve.value.name})),9,xu)):x(``,!0),o(`span`,Su,w(s(X)(`@WORKBENCH:任务执行`)),1)]),o(`div`,Cu,[S(Fr,{style:re({width:c.value+`px`}),tasks:s(y),"selected-task-id":H.value,"current-project":s(T),"creating-task":ut.value,"is-task-running":at,onSelectTask:vt,onDeleteTask:ht,onCopyTask:_t,onCreateTask:mt,onReorderTasks:yt},null,8,[`style`,`tasks`,`selected-task-id`,`current-project`,`creating-task`]),o(`div`,{class:`wb-splitter`,role:`separator`,tabindex:`0`,"aria-orientation":`vertical`,"aria-label":s(X)(`@WORKBENCH:拖动调整侧边栏宽度`),"aria-valuenow":c.value,"aria-valuemin":md,"aria-valuemax":hd,title:s(X)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:l,onKeydown:[i[0]||=Y(P(e=>u(-16),[`prevent`]),[`left`]),i[1]||=Y(P(e=>u(16),[`prevent`]),[`right`])]},null,40,wu),o(`section`,Tu,[U.value?(M(),z(J,{key:1},[o(`div`,Du,[o(`div`,Ou,[B(o(`input`,{ref_key:`titleInputRef`,ref:dt,class:`wb-input wb-input--title`,"onUpdate:modelValue":i[2]||=e=>U.value.title=e,placeholder:s(X)(`@WORKBENCH:任务标题`),"aria-label":s(X)(`@WORKBENCH:任务标题`)},null,8,ku),[[ae,U.value.title]]),o(`button`,{type:`button`,class:W([`wb-copy-btn`,{"is-flash":ze.value===U.value.id}]),title:s(X)(`@WORKBENCH:复制任务标题`),"aria-label":s(X)(`@WORKBENCH:复制任务标题`),onClick:i[3]||=e=>Ve(U.value)},[ze.value===U.value.id?(M(),a(d,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:I(()=>[...i[24]||=[b(`✓`,-1)]]),_:1})):(M(),a(d,{key:0,class:`wb-copy-btn__icon`},{default:I(()=>[S(s(L))]),_:1}))],10,Au)]),q.value!==`idle`||Ce.value?(M(),z(`span`,{key:0,class:W([`wb-meta-save`,{"is-saving":q.value===`saving`,"is-saved":q.value===`saved`,"is-error":q.value===`error`,"is-dirty":Ce.value&&q.value===`idle`}]),title:q.value===`saving`?s(X)(`@WORKBENCH:保存中…`):q.value===`error`?s(X)(`@WORKBENCH:保存失败`):q.value===`saved`?s(X)(`@WORKBENCH:已保存`):``},[q.value===`saving`?(M(),z(`span`,Mu)):q.value===`saved`?(M(),z(`span`,Nu,`✓`)):q.value===`error`?(M(),z(`span`,Pu,`!`)):(M(),z(`span`,Fu)),b(` `+w(q.value===`saving`?s(X)(`@WORKBENCH:保存中…`):q.value===`saved`?s(X)(`@WORKBENCH:已保存`):q.value===`error`?s(X)(`@WORKBENCH:保存失败`):s(X)(`@WORKBENCH:有未保存的更改`)),1)],10,ju)):x(``,!0),s(Rt)?(M(),a(C,{key:1,"split-button":``,type:`primary`,class:`wb-executor-split`,trigger:`click`,disabled:st.value,title:ct.value,onClick:i[4]||=e=>s(Mt)(U.value),onCommand:s(zt)},{dropdown:I(()=>[S(p,null,{default:I(()=>[(M(!0),z(J,null,e(s(Me),e=>(M(),a(f,{key:e.id,command:e.id,disabled:!s(Lt)[e.id]},{default:I(()=>[o(`span`,Lu,[S($,{executor:e.id,class:`wb-executor-item__icon`},null,8,[`executor`]),o(`span`,Ru,w(e.name),1),s(Bt)(e.id)?(M(),z(`span`,{key:0,class:`wb-executor-item__model`,title:s(Vt)(e.id)},w(s(Bt)(e.id)),9,zu)):x(``,!0),s(It)===e.id?(M(),a(d,{key:1,class:`wb-executor-item__check`},{default:I(()=>[S(s(G))]),_:1})):s(Lt)[e.id]?x(``,!0):(M(),z(`span`,Bu,w(s(X)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:I(()=>[b(w(ot.value?s(X)(`@WORKBENCH:重新执行任务`):s(X)(`@WORKBENCH:执行任务`))+` `,1),o(`span`,{class:`wb-executor-split__hint`,title:s(Vt)(s(It))},[S($,{executor:s(It),class:`wb-executor-split__hint-icon`},null,8,[`executor`]),b(` `+w(Ht(s(It))),1)],8,Iu)]),_:1},8,[`disabled`,`title`,`onCommand`])):(M(),z(`div`,Vu,[S(d,{class:`wb-no-claude-hint__icon`},{default:I(()=>[S(s(se))]),_:1}),o(`span`,Hu,w(s(X)(`@WORKBENCH:未检测到本地 claude / opencode,无法执行任务`)),1),o(`a`,Uu,w(s(X)(`@WORKBENCH:查看安装指引`)),1)])),o(`button`,{type:`button`,class:W([`wb-logs-inline-btn wb-logs-inline-btn--copy`,{"is-flash":qe.value===U.value.id}]),title:s(X)(`@WORKBENCH:复制本任务的全部执行对话(提示词 / 思考 / 工具调用 / 模型返回)`),"aria-label":s(X)(`@WORKBENCH:复制执行内容`),onClick:i[5]||=e=>Ye(U.value)},[qe.value===U.value.id?(M(),a(d,{key:1,class:`wb-logs-inline-btn__icon`},{default:I(()=>[...i[25]||=[b(`✓`,-1)]]),_:1})):(M(),a(d,{key:0,class:`wb-logs-inline-btn__icon`},{default:I(()=>[S(s(L))]),_:1})),o(`span`,null,w(s(X)(`@WORKBENCH:复制执行内容`)),1)],10,Wu),o(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:s(X)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":s(X)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:i[6]||=(...e)=>s(Ft)&&s(Ft)(...e)},[S(d,{class:`wb-logs-inline-btn__icon`},{default:I(()=>[S(s(fe))]),_:1}),o(`span`,null,w(s(X)(`@WORKBENCH:清空执行`)),1)],8,Gu),o(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:s(X)(`@WORKBENCH:执行日志`),"aria-label":s(X)(`@WORKBENCH:执行日志`),onClick:i[7]||=e=>he.value=!0},[S(d,{class:`wb-logs-inline-btn__icon`},{default:I(()=>[S(s(ge))]),_:1}),o(`span`,null,w(s(X)(`@WORKBENCH:执行日志`)),1)],8,Ku)]),o(`details`,{class:`wb-task-desc`,open:Ie.value,onToggle:i[19]||=e=>Ie.value=e.target.open},[o(`summary`,Ju,[S(d,{class:`wb-task-desc__caret`},{default:I(()=>[(M(),a(me(Ie.value?s(j):s(ie))))]),_:1}),o(`span`,Yu,w(s(X)(`@WORKBENCH:任务描述(可选)`)),1),o(`button`,{type:`button`,class:W([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":Be.value===U.value.id}]),title:U.value.desc&&U.value.desc.trim()?s(X)(`@WORKBENCH:复制任务描述`):s(X)(`@WORKBENCH:任务描述为空,无需复制`),"aria-label":s(X)(`@WORKBENCH:复制任务描述`),onClick:i[8]||=P(e=>He(U.value),[`stop`,`prevent`])},[Be.value===U.value.id?(M(),a(d,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:I(()=>[...i[26]||=[b(`✓`,-1)]]),_:1})):(M(),a(d,{key:0,class:`wb-copy-btn__icon`},{default:I(()=>[S(s(L))]),_:1}))],10,Xu),U.value.desc&&U.value.desc.length>0||U.value.attachments&&U.value.attachments.length>0?(M(),z(`span`,Zu,[U.value.desc&&U.value.desc.length>0?(M(),z(`span`,Qu,w(s(X)(`@WORKBENCH:已填写`)),1)):x(``,!0),U.value.attachments&&U.value.attachments.length>0?(M(),z(`span`,$u,w(U.value.attachments.length),1)):x(``,!0)])):x(``,!0)]),B(o(`textarea`,{ref_key:`taskDescTextareaRef`,ref:ft,class:`wb-textarea wb-textarea--autogrow`,"onUpdate:modelValue":i[9]||=e=>U.value.desc=e,placeholder:s(X)(`@WORKBENCH:任务描述(可选)`),"aria-label":s(X)(`@WORKBENCH:任务描述(可选)`),onInput:i[10]||=e=>pt(e),onFocus:i[11]||=e=>pt(e),onBlur:i[12]||=e=>pt(e),onPaste:i[13]||=e=>s(Dt)(e,{kind:`task`,task:U.value})},null,40,ed),[[ae,U.value.desc]]),S(gt,{attachments:U.value.attachments||[],"is-image":s(Tt),"human-size":s(Et),"is-uploading":s(wt)(`task-`+U.value.id),"is-paste-hover":s(Ct)===`task-`+U.value.id,"on-pick":()=>s(jt)({kind:`task`,task:U.value}),"on-remove":e=>s(At)({kind:`task`,task:U.value},e),onPaste:i[14]||=e=>s(Dt)(e,{kind:`task`,task:U.value}),onDrop:i[15]||=P(e=>s(Ot)(e,{kind:`task`,task:U.value}),[`prevent`]),onDragover:i[16]||=P(e=>Ct.value=`task-`+U.value.id,[`prevent`]),onDragenter:i[17]||=P(e=>Ct.value=`task-`+U.value.id,[`prevent`]),onDragleave:i[18]||=e=>Ct.value=s(Ct)===`task-`+U.value.id?null:s(Ct)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,qu),o(`div`,td,[o(`div`,nd,[o(`details`,{class:W([`wb-task-prompt`,{"has-content":lt.value.length>0}])},[o(`summary`,rd,[S(d,{class:`wb-task-prompt__caret`},{default:I(()=>[S(s(ie))]),_:1}),o(`span`,null,w(s(X)(`@WORKBENCH:提示词`)),1),lt.value.length>0?(M(),z(`span`,id,w(s(X)(`@WORKBENCH:已填写`)),1)):x(``,!0),s(Ke)(s(Ge)(U.value))===`running`&&s(Ge)(U.value)?(M(),z(`button`,{key:1,class:`wb-simple__stop`,onClick:i[20]||=P(e=>s(Pt)(s(Ge)(U.value)),[`stop`])},w(s(X)(`@WORKBENCH:停止`)),1)):x(``,!0)]),lt.value.length>0?(M(),z(`div`,ad,[(M(!0),z(J,null,e(lt.value,e=>(M(),z(`div`,{key:e.key,class:`wb-task-prompt__part`},[o(`div`,od,w(e.label),1),o(`pre`,sd,w(e.text),1)]))),128))])):(M(),z(`p`,cd,w(s(X)(`@WORKBENCH:这条任务没有附加提示词`)),1))],2),s(We)(U.value).length>0?(M(),z(`div`,{key:0,class:`wb-simple-chat-wrap`,ref_key:`chatWrapRef`,ref:Qe},[o(`div`,ld,[(M(),a(s(Te),{ref_key:`chatRef`,ref:Ze,key:U.value.id,messages:s(Ue),"assistant-name":Wt.value,"assistant-avatar":Gt.value,"show-avatar":!0,theme:s(r).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:s(X)(`@AGENT:计划`),raw:s(X)(`@AGENT:原始参数`)}},"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`]))]),s(Ge)(U.value)&&[`done`,`error`,`cancelled`].includes(s(Ke)(s(Ge)(U.value)))?(M(),z(`div`,ud,[(M(),a(s(Oe),{key:`input-`+U.value.id,placeholder:s(X)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:s(Hn),multiple:!0,maxCount:0,maxSize:s(Un)},class:`wb-simple-chat__input`,onSend:i[21]||=e=>s(Nt)(U.value,e)},null,8,[`placeholder`,`upload-config`]))])):x(``,!0)],512)):x(``,!0)])])],64)):(M(),z(`div`,Eu,[o(`p`,null,w(s(X)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])])]),_:1},8,[`modelValue`,`title`]),S(Le,{modelValue:he.value,"onUpdate:modelValue":i[23]||=e=>he.value=e,title:s(X)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,type:`flex`,"custom-class":`wb-logs-dialog`,"append-to-body":``},{default:I(()=>[S(Bn)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-4f992732`]]);export{xd as default};
|