zen-gitsync 2.18.3 → 2.18.4

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.
Files changed (45) hide show
  1. package/README.md +6 -6
  2. package/package.json +3 -2
  3. package/src/cli/ai/modelSetup.js +120 -7
  4. package/src/cli/ai/modelSetup.test.js +157 -0
  5. package/src/ui/public/assets/{AgentView-juB5wmpE.js → AgentView-0eP_Qb7Z.js} +1 -1
  6. package/src/ui/public/assets/{AppVersionBadge-BDi3TXTG.js → AppVersionBadge-sYoxE7hr.js} +2 -2
  7. package/src/ui/public/assets/{BranchSelector-B8hW4D64.js → BranchSelector-BJyAmmrt.js} +1 -1
  8. package/src/ui/public/assets/{CommitForm-epNRsZc3.js → CommitForm-DY6P1_B2.js} +1 -1
  9. package/src/ui/public/assets/{CommonDialog-CTbNV8Wg.js → CommonDialog-9td95UkD.js} +1 -1
  10. package/src/ui/public/assets/{CopySessionButton-DEFGS3YY.js → CopySessionButton-De46dtzF.js} +1 -1
  11. package/src/ui/public/assets/EditorView-B2uGxtRE.js +1 -0
  12. package/src/ui/public/assets/{EditorView-Cf9u2vkM.css → EditorView-C4eN80vi.css} +1 -1
  13. package/src/ui/public/assets/{FlowExecutionViewer-BEip7kmz.js → FlowExecutionViewer-BhgFKaIR.js} +1 -1
  14. package/src/ui/public/assets/{FlowOrchestrationWorkspace-Bsszwf6-.js → FlowOrchestrationWorkspace-DQpWyRai.js} +1 -1
  15. package/src/ui/public/assets/{LogList-EfGFN896.js → LogList-uk1cDDEM.js} +1 -1
  16. package/src/ui/public/assets/{MindmapView-BM81SZBC.js → MindmapView-Cjk4g62c.js} +1 -1
  17. package/src/ui/public/assets/{MonitorView-D6yTQA3g.js → MonitorView-BzjrUh7I.js} +1 -1
  18. package/src/ui/public/assets/{ProjectStartupButton-DFgM7Pgz.js → ProjectStartupButton-C0nPW6ku.js} +1 -1
  19. package/src/ui/public/assets/{RecentDirectoriesChat-CeAb-DSk.js → RecentDirectoriesChat-DN7CtUV6.js} +1 -1
  20. package/src/ui/public/assets/{RemoteManagerDialog-C7pqRpzl.js → RemoteManagerDialog-5JJITbBA.js} +1 -1
  21. package/src/ui/public/assets/{RemoteRepoCard-BZcV9S8Z.js → RemoteRepoCard-BAksLs0D.js} +1 -1
  22. package/src/ui/public/assets/{SourceMapView-Bo7xTfCi.js → SourceMapView-IGoZ_15F.js} +1 -1
  23. package/src/ui/public/assets/{SvgIcon-_bACg8fN.js → SvgIcon-BPexLObf.js} +1 -1
  24. package/src/ui/public/assets/{UserInputNode-Cfzi_G75.js → UserInputNode-Bi7sIefa.js} +1 -1
  25. package/src/ui/public/assets/{WorkbenchView-Ifx4f8MG.js → WorkbenchView-CMsyIBYe.js} +2 -2
  26. package/src/ui/public/assets/{WorkbenchView-5tjrtuRX.css → WorkbenchView-PaqqcDj9.css} +1 -1
  27. package/src/ui/public/assets/{_plugin-vue_export-helper-BXpA-5RR.js → _plugin-vue_export-helper-BO6qa5C3.js} +5 -5
  28. package/src/ui/public/assets/{agentConversations-vfZW1S6H.js → agentConversations-mDAcOgXq.js} +1 -1
  29. package/src/ui/public/assets/{configStore-BpKN8VOg.js → configStore-D_CFFOs9.js} +1 -1
  30. package/src/ui/public/assets/{dagre-56EqSb7a.js → dagre-Cnlh8k5K.js} +3 -3
  31. package/src/ui/public/assets/{element-plus-DAeQkmsV.js → element-plus-CNJIhPSG.js} +1 -1
  32. package/src/ui/public/assets/{flow-mindmap-DSMXo-RP.js → flow-mindmap-DdKeBM_G.js} +1 -1
  33. package/src/ui/public/assets/index-BsHc5Rxd.js +57 -0
  34. package/src/ui/public/assets/index-CUvENjYd.css +1 -0
  35. package/src/ui/public/assets/{monaco-iQW4tGZA.js → monaco-Cs1I4pfm.js} +1 -1
  36. package/src/ui/public/assets/{office-docx-CX5czsEV.js → office-docx-DmRJb9rE.js} +1 -1
  37. package/src/ui/public/assets/{office-excel-D4925wfu.js → office-excel-DavLx3AP.js} +1 -1
  38. package/src/ui/public/assets/{office-pptx-92XfuytY.js → office-pptx-DYg4i8gh.js} +1 -1
  39. package/src/ui/public/assets/{vendor-DpIR4Sxg.css → vendor-B3_-csNx.css} +1 -1
  40. package/src/ui/public/assets/{vendor-ytAMhfHM.js → vendor-Dtqsc1If.js} +4 -4
  41. package/src/ui/public/assets/{vue-flow-COq_ygQX.js → vue-flow-3t3hqiSq.js} +1 -1
  42. package/src/ui/public/index.html +13 -13
  43. package/src/ui/public/assets/EditorView-BFAjQLzT.js +0 -1
  44. package/src/ui/public/assets/index-DDofdm66.js +0 -57
  45. package/src/ui/public/assets/index-DnNE9KX8.css +0 -1
@@ -1,8 +1,8 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{Bt as e,C as t,Ct as n,Dn as r,En as i,Et as a,F as o,Fn as s,Ft as c,I as l,It as u,J as d,Jn as f,Jr as p,Kn as m,Kr as h,Lt as g,Mn as _,N as v,Nn as y,Nr as b,On as x,Qn as S,Rt as ee,S as C,Sn as w,St as T,Tn as E,Tr as D,U as te,Un as O,Vt as k,Wt as ne,X as re,Xn as A,Y as ie,Z as j,Zr as M,_ as ae,_n as N,_r as oe,_t as se,a as ce,ar as P,b as le,bn as F,cr as I,ct as L,dt as R,fn as ue,fr as z,gn as de,hn as B,i as V,jn as H,ln as fe,lt as pe,ot as me,pt as U,qt as he,r as W,rn as ge,sr as G,tr as _e,tt as ve,v as ye,vn as K,w as be,wn as q,y as xe,yn as J,yr as Y,yt as Se,z as Ce,zn as X}from"./element-plus-DAeQkmsV.js";import{i as we,l as Z,n as Te,o as Ee,t as De}from"./vendor-ytAMhfHM.js";import{n as Q,t as $}from"./_plugin-vue_export-helper-BXpA-5RR.js";import{t as Oe}from"./SvgIcon-_bACg8fN.js";import{a as ke,i as Ae,o as je,t as Me}from"./configStore-BpKN8VOg.js";import{t as Ne}from"./CommonDialog-CTbNV8Wg.js";import{B as Pe,C as Fe,E as Ie,P as Le,S as Re,T as ze,U as Be,b as Ve,m as He,p as Ue,v as We,w as Ge,x as Ke,y as qe}from"./index-DDofdm66.js";import{a as Je,c as Ye,i as Xe,l as Ze,n as Qe,o as $e,p as et,r as tt,s as nt,t as rt,u as it}from"./agentConversations-vfZW1S6H.js";import{a as at,c as ot,i as st,n as ct,o as lt,r as ut,s as dt,t as ft}from"./CopySessionButton-DEFGS3YY.js";X(),z(),b(),fe();var pt={class:`wb-attachments__head`},mt={class:`wb-attachments__label`},ht={class:`wb-attachments__count`},gt=[`disabled`],_t={key:0,class:`wb-attachments__paste-hint`},vt={key:1,class:`wb-attachments__list`},yt=[`title`,`onClick`,`onContextmenu`],bt=[`src`,`alt`],xt={key:1},St={class:`wb-attachment__meta`},Ct=[`title`],wt=[`onClick`,`title`],Tt=$(s({__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(e,{emit:t}){let n=e;function a(e){return`${n.rawBase||`/api/workbench/attachments`}/${e.id}/raw`}let o=t,s=q(()=>n.attachments.filter(e=>n.isImage(e))),c=q(()=>s.value.map(e=>a(e))),l=Y(0),u=Y(!1);function d(e){if(n.isImage(e)){let t=s.value.findIndex(t=>t.id===e.id);l.value=t>=0?t:0,u.value=!0}else window.open(a(e),`_blank`,`noopener`)}function f(){u.value=!1}let g=Y({visible:!1,x:0,y:0,att:null}),v=Y(!1);function y(e,t){if(!n.isImage(e))return;t.preventDefault();let r=window.innerWidth-180,i=window.innerHeight-120;g.value={visible:!0,x:Math.min(t.clientX,r),y:Math.min(t.clientY,i),att:e}}function b(){g.value.visible&&(g.value.visible=!1)}async function ee(){let e=g.value.att;if(e&&!v.value){if(b(),!navigator.clipboard||typeof ClipboardItem>`u`){V({type:`warning`,message:Q(`@WORKBENCH:当前浏览器不支持复制图片`)});return}v.value=!0;try{let t=await fetch(a(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]),V({type:`success`,message:Q(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){V({type:`error`,message:Q(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{v.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,b),window.addEventListener(`scroll`,b,!0),window.addEventListener(`blur`,b)),m(()=>{typeof window>`u`||(window.removeEventListener(`click`,b),window.removeEventListener(`scroll`,b,!0),window.removeEventListener(`blur`,b))}),(t,n)=>(A(),x(F,null,[E(`div`,{class:h([`wb-attachments`,{"is-paste-hover":e.isPasteHover}]),onPaste:n[1]||=e=>o(`paste`,e),onDrop:n[2]||=J(e=>o(`drop`,e),[`prevent`]),onDragover:n[3]||=J(e=>o(`dragover`,e),[`prevent`]),onDragenter:n[4]||=J(e=>o(`dragenter`,e),[`prevent`]),onDragleave:n[5]||=e=>o(`dragleave`,e)},[E(`div`,pt,[E(`span`,mt,[_(M(D(Q)(`@WORKBENCH:附件`))+` `,1),E(`span`,ht,M(e.attachments.length),1)]),E(`button`,{class:`wb-attachments__add`,disabled:e.isUploading,onClick:n[0]||=(...t)=>e.onPick&&e.onPick(...t)},M(e.isUploading?D(Q)(`@WORKBENCH:上传中…`):D(Q)(`@WORKBENCH:添加附件`)),9,gt)]),e.isPasteHover?(A(),x(`div`,_t,M(D(Q)(`@WORKBENCH:粘贴图片以快速添加`)),1)):r(``,!0),e.attachments.length>0?(A(),x(`ul`,vt,[(A(!0),x(F,null,S(e.attachments,t=>(A(),x(`li`,{key:t.id,class:`wb-attachment`},[E(`button`,{type:`button`,class:`wb-attachment__preview`,title:D(Q)(`@WORKBENCH:点击预览`),onClick:e=>d(t),onContextmenu:e=>y(t,e)},[E(`div`,{class:h([`wb-attachment__icon`,{"wb-attachment__icon--img":e.isImage(t)}])},[e.isImage(t)?(A(),x(`img`,{key:0,src:a(t),alt:t.originalName,loading:`lazy`},null,8,bt)):(A(),x(`span`,xt,M(t.ext.toUpperCase()),1))],2),E(`div`,St,[E(`div`,{class:`wb-attachment__name`,title:`${t.originalName} (${e.humanSize(t.size)})`},M(t.originalName),9,Ct)])],40,yt),E(`button`,{class:`wb-attachment__del`,onClick:J(n=>e.onRemove(t),[`stop`]),title:D(Q)(`@WORKBENCH:删除`)},`×`,8,wt)]))),128))])):r(``,!0)],34),u.value&&c.value.length>0?(A(),i(D(le),{key:0,"url-list":c.value,"initial-index":l.value,"hide-on-click-modal":!0,teleported:!0,onClose:f},null,8,[`url-list`,`initial-index`])):r(``,!0),(A(),i(w,{to:`body`},[g.value.visible&&g.value.att&&e.isImage(g.value.att)?(A(),x(`ul`,{key:0,class:`wb-ctx-menu`,style:p({top:g.value.y+`px`,left:g.value.x+`px`}),onContextmenu:n[6]||=J(()=>{},[`prevent`])},[E(`li`,{class:h([`wb-ctx-menu__item`,{"is-disabled":v.value}]),onClick:ee},[n[7]||=E(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[E(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[E(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),E(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),E(`span`,null,M(D(Q)(`@WORKBENCH:复制图片`)),1)],2)],36)):r(``,!0)]))],64))}}),[[`__scopeId`,`data-v-e3e872cb`]]),Et=De(`claude`),Dt=De(`opencode`),Ot=De(`codex`);function kt(e){return e===`opencode`?Dt:e===`codex`?Ot:Et}function At(e){if(typeof e!=`string`||!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function jt(e){let t=At(e?.thinkingStartedAt);return t===void 0?{}:{reasoningStartedAt:t,reasoningEndedAt:At(e?.thinkingEndedAt)}}var Mt=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`],Nt=/!\[([^\]]*)\]\(\s*(?:<([^<>\n]+)>|([^()\s]+))(\s+["'][^"']*["'])?\s*\)/g,Pt=/^\s*(`{3,}|~{3,})/,Ft=/\.([a-z0-9]+)$/;function It(e){let t=e.trim().toLowerCase().match(Ft);return!!t&&Mt.includes(t[1])}function Lt(e){let t=String(e||``).trim();if(!t)return!1;if(/^[a-zA-Z]:[\\/]/.test(t))return It(t);let n=t.match(/^([a-z][a-z0-9+.-]+):/i);return n&&n[1].toLowerCase()!==`file`||t.startsWith(`//`)||t.startsWith(`/`)?!1:It(t)}function Rt(e,t){return`/api/workbench/jobs/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function zt(e,t){return e.includes(`![`)?e.replace(Nt,(e,n,r,i,a)=>{let o=(r??i??``).trim();return Lt(o)?`![${n}](${Rt(t,o)}${a||``})`:e}):e}function Bt(e,t){let n=typeof e==`string`?e:``;if(!n||!t||!n.includes(`![`))return n;let r=n.split(`
1
+ import"./rolldown-runtime-C0FnF6B9.js";import{Bt as e,C as t,Ct as n,Dn as r,En as i,Et as a,F as o,Fn as s,Ft as c,I as l,It as u,J as d,Jn as f,Jr as p,Kn as m,Kr as h,Lt as g,Mn as _,N as v,Nn as y,Nr as b,On as x,Qn as S,Rt as ee,S as C,Sn as w,St as T,Tn as E,Tr as D,U as te,Un as O,Vt as k,Wt as ne,X as re,Xn as A,Y as ie,Z as j,Zr as M,_ as ae,_n as N,_r as oe,_t as se,a as ce,ar as P,b as le,bn as F,cr as I,ct as L,dt as R,fn as ue,fr as z,gn as de,hn as B,i as V,jn as H,ln as fe,lt as pe,ot as me,pt as U,qt as he,r as W,rn as ge,sr as G,tr as _e,tt as ve,v as ye,vn as K,w as be,wn as q,y as xe,yn as J,yr as Y,yt as Se,z as Ce,zn as X}from"./element-plus-CNJIhPSG.js";import{i as we,l as Z,n as Te,o as Ee,t as De}from"./vendor-Dtqsc1If.js";import{n as Q,t as $}from"./_plugin-vue_export-helper-BO6qa5C3.js";import{t as Oe}from"./SvgIcon-BPexLObf.js";import{a as ke,i as Ae,o as je,t as Me}from"./configStore-D_CFFOs9.js";import{t as Ne}from"./CommonDialog-9td95UkD.js";import{B as Pe,C as Fe,E as Ie,P as Le,S as Re,T as ze,U as Be,b as Ve,m as He,p as Ue,v as We,w as Ge,x as Ke,y as qe}from"./index-BsHc5Rxd.js";import{a as Je,c as Ye,i as Xe,l as Ze,n as Qe,o as $e,p as et,r as tt,s as nt,t as rt,u as it}from"./agentConversations-mDAcOgXq.js";import{a as at,c as ot,i as st,n as ct,o as lt,r as ut,s as dt,t as ft}from"./CopySessionButton-De46dtzF.js";X(),z(),b(),fe();var pt={class:`wb-attachments__head`},mt={class:`wb-attachments__label`},ht={class:`wb-attachments__count`},gt=[`disabled`],_t={key:0,class:`wb-attachments__paste-hint`},vt={key:1,class:`wb-attachments__list`},yt=[`title`,`onClick`,`onContextmenu`],bt=[`src`,`alt`],xt={key:1},St={class:`wb-attachment__meta`},Ct=[`title`],wt=[`onClick`,`title`],Tt=$(s({__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(e,{emit:t}){let n=e;function a(e){return`${n.rawBase||`/api/workbench/attachments`}/${e.id}/raw`}let o=t,s=q(()=>n.attachments.filter(e=>n.isImage(e))),c=q(()=>s.value.map(e=>a(e))),l=Y(0),u=Y(!1);function d(e){if(n.isImage(e)){let t=s.value.findIndex(t=>t.id===e.id);l.value=t>=0?t:0,u.value=!0}else window.open(a(e),`_blank`,`noopener`)}function f(){u.value=!1}let g=Y({visible:!1,x:0,y:0,att:null}),v=Y(!1);function y(e,t){if(!n.isImage(e))return;t.preventDefault();let r=window.innerWidth-180,i=window.innerHeight-120;g.value={visible:!0,x:Math.min(t.clientX,r),y:Math.min(t.clientY,i),att:e}}function b(){g.value.visible&&(g.value.visible=!1)}async function ee(){let e=g.value.att;if(e&&!v.value){if(b(),!navigator.clipboard||typeof ClipboardItem>`u`){V({type:`warning`,message:Q(`@WORKBENCH:当前浏览器不支持复制图片`)});return}v.value=!0;try{let t=await fetch(a(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]),V({type:`success`,message:Q(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){V({type:`error`,message:Q(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{v.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,b),window.addEventListener(`scroll`,b,!0),window.addEventListener(`blur`,b)),m(()=>{typeof window>`u`||(window.removeEventListener(`click`,b),window.removeEventListener(`scroll`,b,!0),window.removeEventListener(`blur`,b))}),(t,n)=>(A(),x(F,null,[E(`div`,{class:h([`wb-attachments`,{"is-paste-hover":e.isPasteHover}]),onPaste:n[1]||=e=>o(`paste`,e),onDrop:n[2]||=J(e=>o(`drop`,e),[`prevent`]),onDragover:n[3]||=J(e=>o(`dragover`,e),[`prevent`]),onDragenter:n[4]||=J(e=>o(`dragenter`,e),[`prevent`]),onDragleave:n[5]||=e=>o(`dragleave`,e)},[E(`div`,pt,[E(`span`,mt,[_(M(D(Q)(`@WORKBENCH:附件`))+` `,1),E(`span`,ht,M(e.attachments.length),1)]),E(`button`,{class:`wb-attachments__add`,disabled:e.isUploading,onClick:n[0]||=(...t)=>e.onPick&&e.onPick(...t)},M(e.isUploading?D(Q)(`@WORKBENCH:上传中…`):D(Q)(`@WORKBENCH:添加附件`)),9,gt)]),e.isPasteHover?(A(),x(`div`,_t,M(D(Q)(`@WORKBENCH:粘贴图片以快速添加`)),1)):r(``,!0),e.attachments.length>0?(A(),x(`ul`,vt,[(A(!0),x(F,null,S(e.attachments,t=>(A(),x(`li`,{key:t.id,class:`wb-attachment`},[E(`button`,{type:`button`,class:`wb-attachment__preview`,title:D(Q)(`@WORKBENCH:点击预览`),onClick:e=>d(t),onContextmenu:e=>y(t,e)},[E(`div`,{class:h([`wb-attachment__icon`,{"wb-attachment__icon--img":e.isImage(t)}])},[e.isImage(t)?(A(),x(`img`,{key:0,src:a(t),alt:t.originalName,loading:`lazy`},null,8,bt)):(A(),x(`span`,xt,M(t.ext.toUpperCase()),1))],2),E(`div`,St,[E(`div`,{class:`wb-attachment__name`,title:`${t.originalName} (${e.humanSize(t.size)})`},M(t.originalName),9,Ct)])],40,yt),E(`button`,{class:`wb-attachment__del`,onClick:J(n=>e.onRemove(t),[`stop`]),title:D(Q)(`@WORKBENCH:删除`)},`×`,8,wt)]))),128))])):r(``,!0)],34),u.value&&c.value.length>0?(A(),i(D(le),{key:0,"url-list":c.value,"initial-index":l.value,"hide-on-click-modal":!0,teleported:!0,onClose:f},null,8,[`url-list`,`initial-index`])):r(``,!0),(A(),i(w,{to:`body`},[g.value.visible&&g.value.att&&e.isImage(g.value.att)?(A(),x(`ul`,{key:0,class:`wb-ctx-menu`,style:p({top:g.value.y+`px`,left:g.value.x+`px`}),onContextmenu:n[6]||=J(()=>{},[`prevent`])},[E(`li`,{class:h([`wb-ctx-menu__item`,{"is-disabled":v.value}]),onClick:ee},[n[7]||=E(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[E(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[E(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),E(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),E(`span`,null,M(D(Q)(`@WORKBENCH:复制图片`)),1)],2)],36)):r(``,!0)]))],64))}}),[[`__scopeId`,`data-v-e3e872cb`]]),Et=De(`claude`),Dt=De(`opencode`),Ot=De(`codex`);function kt(e){return e===`opencode`?Dt:e===`codex`?Ot:Et}function At(e){if(typeof e!=`string`||!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function jt(e){let t=At(e?.thinkingStartedAt);return t===void 0?{}:{reasoningStartedAt:t,reasoningEndedAt:At(e?.thinkingEndedAt)}}var Mt=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`],Nt=/!\[([^\]]*)\]\(\s*(?:<([^<>\n]+)>|([^()\s]+))(\s+["'][^"']*["'])?\s*\)/g,Pt=/^\s*(`{3,}|~{3,})/,Ft=/\.([a-z0-9]+)$/;function It(e){let t=e.trim().toLowerCase().match(Ft);return!!t&&Mt.includes(t[1])}function Lt(e){let t=String(e||``).trim();if(!t)return!1;if(/^[a-zA-Z]:[\\/]/.test(t))return It(t);let n=t.match(/^([a-z][a-z0-9+.-]+):/i);return n&&n[1].toLowerCase()!==`file`||t.startsWith(`//`)||t.startsWith(`/`)?!1:It(t)}function Rt(e,t){return`/api/workbench/jobs/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function zt(e,t){return e.includes(`![`)?e.replace(Nt,(e,n,r,i,a)=>{let o=(r??i??``).trim();return Lt(o)?`![${n}](${Rt(t,o)}${a||``})`:e}):e}function Bt(e,t){let n=typeof e==`string`?e:``;if(!n||!t||!n.includes(`![`))return n;let r=n.split(`
2
2
  `),i=null,a=[];for(let e of r){let n=e.match(Pt);if(n){let t=n[1][0];i===null?i=t:i===t&&(i=null),a.push(e);continue}a.push(i===null?zt(e,t):e)}return a.join(`
3
3
  `)}X(),z(),b(),fe();var Vt=[`aria-expanded`],Ht={class:`wb-log-summary__left`},Ut={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},Wt={class:`wb-log-summary__label`},Gt={key:0,class:`wb-log-summary__elapsed`},Kt={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},qt={class:`wb-log-summary__label`},Jt={class:`wb-log-summary__icon`},Yt={class:`wb-log-summary__label`},Xt={key:0,class:`wb-log-summary__elapsed`},Zt={key:3},Qt={class:`wb-log-summary__right`},$t={class:`wb-log-summary__meta`},en=[`title`,`aria-label`],tn={class:`wb-log-details__body`},nn={class:`wb-job-chat`},rn={key:0,class:`wb-chat__foot`},an=[`title`,`aria-label`],on={key:1,class:`wb-log-fullscreen__empty`},sn=65536,cn=$(s({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(e,{emit:t}){let n=Me(),a=e,o=t,s=Y(!1);function c(){s.value=!s.value}let l=q(()=>a.job.status===`running`||a.job.status===`pending`);P(()=>a.job.status,(e,t)=>{t!==`running`&&t!==`pending`&&(e===`running`||e===`pending`)&&(s.value=!1)});function u(){let e=a.job.output||``;return e?Bt(e.length<=sn?e:`${Q(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`,a.job.id):``}function d(){let e=a.job.thinking||``;return e?e.length<=sn?e:`${Q(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function f(e){try{if(navigator?.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}async function p(){let e=[];if(a.job.prompt&&e.push(`## ${Q(`@WORKBENCH:用户提示词`)}\n\n${a.job.prompt}`),a.job.thinking&&e.push(`## ${Q(`@WORKBENCH:Claude 思考`)}\n\n${a.job.thinking}`),a.job.output&&e.push(`## ${Q(`@WORKBENCH:模型返回`)}\n\n${a.job.output}`),!e.length){V.warning(Q(`@WORKBENCH:暂无内容可复制`));return}await f(e.join(`
4
4
 
5
5
  ---
6
6
 
7
7
  `))?V.success(Q(`@WORKBENCH:已复制到剪贴板`)):V.error(Q(`@WORKBENCH:复制失败`))}let m=q(()=>{let e=a.job.status;return e===`done`||e===`error`||e===`cancelled`}),g=q(()=>a.job.status===`cancelled`?`wb-log-summary__status--cancelled`:a.job.status===`error`?`wb-log-summary__status--error`:`wb-log-summary__status--done`),_=q(()=>a.job.status===`cancelled`?`⏹`:a.job.status===`error`?`✗`:`✓`),v=q(()=>a.job.status===`cancelled`?Q(`@WORKBENCH:已停止`):a.job.status===`error`?Q(`@WORKBENCH:执行出错`):Q(`@WORKBENCH:执行完成`)),b=q(()=>je(a.job?.agent)),S=q(()=>kt(a.job?.agent));function ee(e,t){return e===`running`||e===`pending`?t?`streaming`:`pending`:e===`error`?`error`:`done`}let C=q(()=>{let e=a.job,t=[],n=e.startedAt?new Date(e.startedAt).getTime():Date.now();if(e.prompt){let r=at(e.prompt);r&&t.push({id:`${e.id}-u`,role:`user`,content:r,status:`done`,createdAt:n})}let r=u(),i=d(),o=!!r,s=!!i,c=lt(e),l=c.length>0,f=o||s||l,p=ee(e.status,f);return t.push({id:`${e.id}-a`,role:`assistant`,content:r,reasoning:s?i:void 0,reasoningStatus:s?o?`done`:p===`streaming`?`streaming`:`done`:void 0,...jt(e),toolCalls:l?c:void 0,status:p,error:p===`error`&&e.error||void 0,createdAt:n}),t}),w=Y(null);P(()=>a.job.status,(e,t)=>{e===`running`&&t!==`running`&&(w.value=w.value??Date.now())});let T=q(()=>{if(!w.value)return``;let e=w.value,t=a.job.endedAt?new Date(a.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`)}秒`}),te=Y(!1),k=q(()=>!!(a.job.output&&a.job.output.length)),ne=q(()=>Bt(a.job.output||``,a.job.id)),re=Y(null);P(te,async e=>{e&&(await O(),re.value&&(re.value.scrollTop=re.value.scrollHeight))}),P(()=>(a.job.output||``).length,async()=>{te.value&&(await O(),re.value&&(re.value.scrollTop=re.value.scrollHeight))});function ie(){}let j=q(()=>m.value&&!!a.job.prompt);function ae(){o(`re-execute`,a.job)}return(t,a)=>(A(),x(`div`,{class:h([`wb-log-details`,{"is-running":l.value,"is-pending":e.job.status===`pending`,"is-finished":m.value}])},[E(`div`,{class:`wb-log-summary`,onClick:c,role:`button`,"aria-expanded":!s.value},[E(`span`,Ht,[e.job.status===`running`?(A(),x(`span`,Ut,[E(`span`,Wt,M(D(Q)(`@WORKBENCH:正在执行…`)),1),a[1]||=E(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[E(`span`,{class:`wb-log-dots__dot`}),E(`span`,{class:`wb-log-dots__dot`}),E(`span`,{class:`wb-log-dots__dot`})],-1),T.value?(A(),x(`span`,Gt,M(T.value),1)):r(``,!0)])):e.job.status===`pending`?(A(),x(`span`,Kt,[E(`span`,qt,M(D(Q)(`@WORKBENCH:排队中…`)),1),a[2]||=E(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[E(`span`,{class:`wb-log-dots__dot`}),E(`span`,{class:`wb-log-dots__dot`}),E(`span`,{class:`wb-log-dots__dot`})],-1)])):m.value?(A(),x(`span`,{key:2,class:h([`wb-log-summary__status`,g.value])},[E(`span`,Jt,M(_.value),1),E(`span`,Yt,M(v.value),1),T.value?(A(),x(`span`,Xt,M(T.value),1)):r(``,!0)],2)):(A(),x(`span`,Zt,M(D(Q)(`@WORKBENCH:查看执行日志`)),1))]),E(`span`,Qt,[E(`span`,$t,M((e.job.output||``).length)+` `+M(D(Q)(`@WORKBENCH:字符`)),1),E(`button`,{type:`button`,class:`wb-log-copy`,title:D(Q)(`@WORKBENCH:复制全部(含提示词与输出)`),"aria-label":D(Q)(`@WORKBENCH:复制全部`),onClick:J(p,[`stop`])},` ⧉ `,8,en)])],8,Vt),I(E(`div`,tn,[E(`div`,nn,[y(D(we),{messages:C.value,"assistant-name":b.value,"assistant-avatar":S.value,"show-avatar":!0,theme:D(n).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:D(Q)(`@AGENT:计划`),raw:D(Q)(`@AGENT:原始参数`)}},"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`])]),j.value?(A(),x(`footer`,rn,[E(`button`,{type:`button`,class:`wb-chat__action`,title:D(Q)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":D(Q)(`@WORKBENCH:重新执行`),onClick:ae},` ↻ `,8,an)])):r(``,!0),y(Ne,{modelValue:te.value,"onUpdate:modelValue":a[0]||=e=>te.value=e,title:D(Q)(`@WORKBENCH:模型返回 - 全屏查看`),size:`fullscreen`,type:`flex`,"close-on-click-modal":!1,"custom-class":`wb-log-fullscreen-dialog`,onClosed:ie},{default:G(()=>[E(`div`,{ref_key:`fullscreenContainerRef`,ref:re,class:`wb-log-fullscreen`},[k.value?(A(),i(D(Z),{key:0,source:ne.value,class:`wb-log-fullscreen__render`},null,8,[`source`])):(A(),x(`div`,on,M(D(Q)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[N,!s.value]])],2))}}),[[`__scopeId`,`data-v-9c103bcc`]]);X(),z(),b(),fe();var ln={class:`exec-logs`},un={class:`exec-logs__head`},dn={class:`exec-logs__title-block`},fn={class:`exec-logs__stats`},pn={class:`exec-logs__head-actions`},mn={class:`exec-logs__config`},hn={class:`exec-logs__config-label`},gn={class:`exec-logs__config-field`},_n={class:`exec-logs__config-name`},vn={class:`exec-logs__config-field`},yn={class:`exec-logs__config-name`},bn={class:`exec-logs__filter`},xn={key:0,class:`exec-logs__batch-meta`},Sn={key:0,class:`exec-logs__batch`},Cn={class:`exec-logs__list`},wn={key:0,class:`exec-logs__empty`},Tn={class:`exec-logs__empty-art`,"aria-hidden":`true`},En={class:`exec-logs__empty-title`},Dn={class:`exec-logs__empty-hint`},On={class:`exec-card__head`},kn=[`title`],An={class:`exec-card__meta`},jn={key:0,class:`exec-card__task`},Mn={key:1,class:`exec-card__time`},Nn={key:2,class:`exec-card__exit`},Pn=[`title`,`onClick`],Fn={key:0,class:`exec-card__error`},In={key:1,class:`exec-logs__pager`},Ln=50,Rn=$(s({__name:`ExecutionLogManager`,setup(e){function t(e){return e instanceof Error?e.message:String(e)}let n=Y([]),i=Y(0),a=oe({count:0,sizeMB:0,byStatus:{}}),s=Y(!1),c=Y(new Set),u=oe({q:``,status:``,page:1}),m=Y({maxCount:500,maxSizeMB:256}),g=oe({maxCount:500,maxSizeMB:256}),b=Y(!1),ee=[{value:`pending`,label:Q(`@WORKBENCH:排队中`)},{value:`running`,label:Q(`@WORKBENCH:执行中`)},{value:`done`,label:Q(`@WORKBENCH:已完成`)},{value:`error`,label:Q(`@WORKBENCH:出错`)},{value:`cancelled`,label:Q(`@WORKBENCH:已取消`)}],C=q(()=>n.value.length>0&&n.value.every(e=>c.value.has(e.id))),w=q(()=>n.value.some(e=>c.value.has(e.id))&&!C.value);async function T(){s.value=!0;try{let e=new URLSearchParams;u.q&&e.set(`q`,u.q),u.status&&e.set(`status`,u.status),e.set(`limit`,String(Ln)),e.set(`offset`,String((u.page-1)*Ln));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);n.value=t.jobs,i.value=t.total,a.count=t.stats.count,a.sizeMB=t.stats.sizeMB,a.byStatus=t.stats.byStatus;let r=new Set(n.value.map(e=>e.id));for(let e of Array.from(c.value))r.has(e)||c.value.delete(e)}catch(e){V.error(Q(`@WORKBENCH:加载失败`)+`: `+t(e))}finally{s.value=!1}}async function O(){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 ne(){b.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,V.success(Q(`@WORKBENCH:已保存策略`)),await T()}catch(e){V.error(Q(`@WORKBENCH:保存失败`)+`: `+t(e))}finally{b.value=!1}}function re(){u.page=1,T()}function ie(){u.q=``,u.status=``,u.page=1,T()}function j(e,t){t?c.value.add(e):c.value.delete(e),c.value=new Set(c.value)}function ae(e){if(e)for(let e of n.value)c.value.add(e.id);else for(let e of n.value)c.value.delete(e.id);c.value=new Set(c.value)}function N(e){V.info(Q(`@WORKBENCH:请到工作台主面板的对应任务上点击「重新执行」`))}async function se(e){try{await W.confirm(Q(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),Q(`@WORKBENCH:删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/${e}`,{method:`DELETE`}).then(e=>e.json());if(!t.success)throw Error(t.error||`delete failed`);c.value.delete(e),c.value=new Set(c.value),await T()}catch(e){V.error(Q(`@WORKBENCH:保存失败`)+`: `+t(e))}}async function P(){let e=Array.from(c.value);if(e.length!==0){try{await W.confirm(Q(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),Q(`@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`);V.success(Q(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),c.value=new Set,await T()}catch(e){V.error(Q(`@WORKBENCH:保存失败`)+`: `+t(e))}}}async function le(){let e=a.count;if(e!==0){try{await W.confirm(Q(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),Q(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:Q(`@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`);V.success(Q(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),c.value=new Set,await T()}catch(e){V.error(Q(`@WORKBENCH:保存失败`)+`: `+t(e))}}}function L(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 f(()=>{T(),O()}),(e,t)=>{let f=Ce,m=xe,O=te,oe=o,R=l,ue=v,z=d,de=ye,B=ce;return A(),x(`div`,ln,[E(`header`,un,[E(`div`,dn,[E(`span`,fn,M(D(Q)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:a.count,size:a.sizeMB})),1)]),E(`div`,pn,[y(f,{icon:D(k),size:`small`,loading:s.value,onClick:T},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),y(f,{type:`danger`,plain:``,size:`small`,disabled:a.count===0,onClick:le},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),E(`div`,mn,[E(`span`,hn,M(D(Q)(`@WORKBENCH:保存策略`)),1),E(`span`,gn,[E(`span`,_n,M(D(Q)(`@WORKBENCH:最大条数`)),1),y(m,{modelValue:g.maxCount,"onUpdate:modelValue":t[0]||=e=>g.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),E(`span`,vn,[E(`span`,yn,M(D(Q)(`@WORKBENCH:最大体积 (MB)`)),1),y(m,{modelValue:g.maxSizeMB,"onUpdate:modelValue":t[1]||=e=>g.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),y(f,{type:`primary`,size:`small`,loading:b.value,onClick:ne},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),E(`div`,bn,[y(O,{modelValue:u.q,"onUpdate:modelValue":t[2]||=e=>u.q=e,placeholder:D(Q)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:K(re,[`enter`]),onClear:re},null,8,[`modelValue`,`placeholder`]),y(R,{modelValue:u.status,"onUpdate:modelValue":t[3]||=e=>u.status=e,placeholder:D(Q)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:re},{default:G(()=>[(A(),x(F,null,S(ee,e=>y(oe,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),y(f,{size:`small`,onClick:ie},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:重置`)),1)]),_:1}),t[5]||=E(`span`,{class:`exec-logs__filter-spacer`},null,-1),c.value.size>0?(A(),x(`span`,xn,M(D(Q)(`@WORKBENCH:已选择 {count} 项`,{count:c.value.size})),1)):r(``,!0)]),c.value.size>0?(A(),x(`div`,Sn,[y(ue,{"model-value":C.value,indeterminate:w.value,onChange:ae},{default:G(()=>[_(M(C.value?D(Q)(`@WORKBENCH:取消全选`):D(Q)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),y(f,{type:`danger`,size:`small`,onClick:P},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:批量删除`)),1)]),_:1})])):r(``,!0),I((A(),x(`div`,Cn,[!s.value&&n.value.length===0?(A(),x(`div`,wn,[E(`div`,Tn,[y(z,null,{default:G(()=>[y(D(U))]),_:1})]),E(`div`,En,M(D(Q)(`@WORKBENCH:暂无执行日志`)),1),E(`div`,Dn,M(D(Q)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):r(``,!0),(A(!0),x(F,null,S(n.value,e=>(A(),x(`article`,{key:e.id,class:h([`exec-card`,{"is-selected":c.value.has(e.id)}])},[E(`header`,On,[y(ue,{"model-value":c.value.has(e.id),onChange:t=>j(e.id,t)},null,8,[`model-value`,`onChange`]),E(`span`,{class:`exec-card__status`,style:p({color:D(ut)(e.status),borderColor:D(ut)(e.status)})},M(D(st)(e.status)),5),E(`span`,{class:`exec-card__title`,title:e.title||D(Q)(`@WORKBENCH:无标题`)},M(e.title||D(Q)(`@WORKBENCH:无标题`)),9,kn),t[6]||=E(`span`,{class:`exec-card__spacer`},null,-1),E(`span`,An,[e.taskTitle?(A(),x(`span`,jn,`📁 `+M(e.taskTitle),1)):r(``,!0),e.startedAt?(A(),x(`span`,Mn,`⏱ `+M(L(e.startedAt,e.endedAt)),1)):r(``,!0),e.exitCode===null?r(``,!0):(A(),x(`span`,Nn,`exit `+M(e.exitCode),1))]),E(`button`,{type:`button`,class:`exec-card__del`,title:D(Q)(`@WORKBENCH:删除`),onClick:t=>se(e.id)},`×`,8,Pn)]),e.error?(A(),x(`p`,Fn,`⚠ `+M(e.error),1)):r(``,!0),y(cn,{job:e,onReExecute:N},null,8,[`job`])],2))),128))])),[[B,s.value]]),i.value>Ln?(A(),x(`footer`,In,[y(de,{"current-page":u.page,"onUpdate:currentPage":t[4]||=e=>u.page=e,"page-size":Ln,total:i.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:T},null,8,[`current-page`,`total`])])):r(``,!0)])}}}),[[`__scopeId`,`data-v-dd1760f3`]]),zn=6e4,Bn=60*zn,Vn=24*Bn;function Hn(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<zn?Q(`@WORKBENCH:刚刚`):r<Bn?Q(`@WORKBENCH:N 分钟前`,{n:Math.floor(r/zn)}):r<Vn?Q(`@WORKBENCH:N 小时前`,{n:Math.floor(r/Bn)}):r<30*Vn?Q(`@WORKBENCH:N 天前`,{n:Math.floor(r/Vn)}):new Date(n).toLocaleDateString()}function Un(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?Q(`@WORKBENCH:N 小时 M 分`,{n,m:r}):r>0?Q(`@WORKBENCH:N 分 M 秒`,{n:r,m:i}):Q(`@WORKBENCH:N 秒`,{n:i})}function Wn(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function Gn(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(Wn(n,a))return i;if(Wn(n,new Date(a.getFullYear(),a.getMonth(),a.getDate()-1)))return Q(`@WORKBENCH:昨天 {time}`,{time:i});let o=`${n.getMonth()+1}/${n.getDate()}`;return n.getFullYear()===a.getFullYear()?`${o} ${i}`:`${n.getFullYear()}/${o} ${i}`}function Kn(e){return String(e.manualDoneAt||e.lastJobEndedAt||e.updatedAt||e.createdAt||``)}function qn(e){return e.column===`done`?Kn(e):e.updatedAt||e.createdAt||``}function Jn(e){return e.live?``:Un(e.lastDurationMs)}function Yn(e){let t=Jn(e);return t?Q(`@WORKBENCH:用时 {d}`,{d:t}):``}function Xn(e){return e.live?Q(`@WORKBENCH:已运行 {elapsed}`,{elapsed:Un(e.live.elapsedMs)}):``}function Zn(e){return Xn(e)||Yn(e)}function Qn(e){let t=Jn(e);if(!t)return``;let n=Gn(e.lastJobStartedAt),r=Gn(e.lastJobEndedAt);return!n||!r?t:`${t} · ${n} → ${r}`}z();var $n=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`]),er=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,tr=20971520,nr=3840,rr=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/webp`,`image/bmp`]);function ir(e){if(e.size<=3670016)return!1;let t=String(e.type||``).toLowerCase();return t?rr.has(t):/\.(png|jpe?g|webp|bmp)$/i.test(e.name)}function ar(e,t){return`${String(e||`attachment`).replace(/\.[^./\\]+$/,``)}.${t}`}async function or(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 sr(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 cr(e){let t=await or(e);if(!t)return null;try{let n=[{edge:nr,quality:.95},{edge:nr,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 sr(o,`image/webp`,e.quality)||await sr(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 lr(){let e=Y({}),t=Y(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(!$n.has(n.type)&&!n.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){V.error(`${Q(`@WORKBENCH:不支持的文件类型`)}(${n.name})`);return}if(a(t).find(e=>e.originalName===n.name&&e.size===n.size)){V.info(`${n.name} ${Q(`@WORKBENCH:已存在,已复用`)}`);return}let c=i(t);e.value[c]=!0;try{let e=n;if(ir(n)){let t=await cr(n);t&&(e=r(t.blob,ar(n.name,t.ext)),V.info(Q(`@WORKBENCH:图片过大,已压缩后上传:{from} → {to}`,{from:g(n.size),to:g(e.size)})))}if(e.size>20971520){V.error(`「${n.name}」${Q(`@WORKBENCH:超过 {size} 限制`,{size:g(tr)})}`);return}let i=await fetch(s(t),{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":encodeURIComponent(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),V.success(`${Q(`@WORKBENCH:已添加:`)}${e.name}`)}else V.error(i.error||Q(`@WORKBENCH:上传失败`))}catch(e){V.error(Q(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{e.value[c]=!1}}async function f(e,t){try{await W.confirm(Q(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),Q(`@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)),V.success(Q(`@WORKBENCH:已删除`))):V.error(n.error||Q(`@WORKBENCH:删除失败`))}function p(e){let t=document.createElement(`input`);t.type=`file`,t.accept=er,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}}X();var ur=`__simple`,dr=65536;function fr(e,t){function n(t){if(!t)return[];let n=`${t.id}${ur}`;return e.value.filter(e=>e.subId===n||e.subId.startsWith(`${n}__r`)).sort((e,t)=>{let n=e.startedAt||``,r=t.startedAt||``;return n&&r?n.localeCompare(r):n?-1:+!!r})}function r(e){if(!e)return null;let t=n(e);return t.length>0?t[t.length-1]:null}function i(e){return e?e.status===`pending`||e.status===`running`?`running`:e.status===`done`?`done`:e.status===`cancelled`?`cancelled`:`error`:`idle`}return{simpleConversationMessages:q(()=>{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=at(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>dr?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>dr?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=lt(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:Bt(c,t.id),reasoning:d?l:void 0,reasoningStatus:d?!i&&u||u?`done`:h===`streaming`?`streaming`:`done`:void 0,...jt(t),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:ur,MAX_LOG_DISPLAY_SIMPLE:dr}}X(),z();function pr(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?V.success(t.message||Q(`@WORKBENCH:已加入执行队列`)):V.error(t.error||Q(`@WORKBENCH:执行失败`))}async function s(t,n){let r=e.value.filter(e=>e.taskId===t.id).slice(-1)[0];if(!r)return V.error(Q(`@WORKBENCH:没有可续接的会话`)),!1;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)}));return a.success?(V.success(a.message||Q(`@WORKBENCH:已加入续接队列`)),!0):(V.error(a.error||Q(`@WORKBENCH:续接失败`)),!1)}let c=oe({}),l=new Set,u=0;function d(t){return e.value.some(e=>e.taskId===t&&(e.status===`running`||e.status===`pending`))}function f(e){return c[e]??[]}function p(e,t,n=[]){(c[e.id]??(c[e.id]=[])).push({id:`q-${Date.now()}-${++u}`,text:t,files:n})}function m(e,t){let n=c[e];if(!n)return;let r=n.findIndex(e=>e.id===t);r<0||(n.splice(r,1),n.length||delete c[e])}async function h(e,t){for(let n of t.files)await r.uploadAttachment({kind:`task`,task:e},n.file);return await s(e,t.text)}async function g(e){if(l.has(e))return;let n=c[e];if(!n||n.length===0||d(e))return;let r=t.value.find(t=>t.id===e);if(!r){delete c[e];return}let i=n[0];l.add(e);try{await h(r,i)&&m(e,i.id)}finally{l.delete(e)}}let _=q(()=>{let t=new Set;for(let n of e.value)(n.status===`running`||n.status===`pending`)&&t.add(n.taskId);return t});P(_,(t,n)=>{if(n)for(let r of n)t.has(r)||c[r]?.length&&e.value.some(e=>e.taskId===r)&&g(r)});async function v(e,t){let n=t.text.trim();if(n){if(d(e.id)){p(e,n,t.files);return}await h(e,{text:n,files:t.files})}}async function y(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){V.error(Q(`@WORKBENCH:找不到对应任务,无法重新执行`));return}await o(n)}async function b(e){try{await W.confirm(Q(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),Q(`@WORKBENCH:停止执行`),{confirmButtonText:Q(`@WORKBENCH:停止`),cancelButtonText:Q(`@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?V.success(Q(`@WORKBENCH:已发送停止信号`)):V.error(t.error||Q(`@WORKBENCH:停止失败`))}async function x(){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?Q(`@WORKBENCH:当前任务还没有执行内容,确认仍要清空?`):Q(`@WORKBENCH:将清空 {m} 条执行记录,任务描述/附件保留。`,{m:r.length});try{await W.confirm(a,Q(`@WORKBENCH:清空执行内容`),{confirmButtonText:Q(`@WORKBENCH:清空`),cancelButtonText:Q(`@WORKBENCH:取消`),type:`warning`})}catch{return}if(i>0){V.warning(Q(`@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),V.success(o.message||Q(`@WORKBENCH:已清空执行内容`))):V.error(o?.error||Q(`@WORKBENCH:清空失败`))}return{runTask:o,continueChat:s,onContinueSendFromChat:v,onReExecuteJob:y,cancelJob:b,clearExecutionForSelectedTask:x,isTaskRunning:d,queuedChatsOf:f,removeQueuedChat:m,flushNextQueued:g}}X();function mr(){let e=Me(),t=Pe(),n=q({get:()=>e.resolvedTaskExecutor,set:t=>{ke(t)&&e.setLastTaskExecutor(t)}}),r=q(()=>({claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable})),i=q(()=>Ae.some(e=>r.value[e.id])),a=q(()=>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}}z();function hr(){let e=Y([]),t=Y([]),n=Y({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);if(n>=0){let r=t.value[n];!e.thinkingStartedAt&&r.thinkingStartedAt&&(e.thinkingStartedAt=r.thinkingStartedAt),!e.thinkingEndedAt&&r.thinkingEndedAt&&(e.thinkingEndedAt=r.thinkingEndedAt),t.value[n]=e}else 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];if(o[e]=(o[e]||``)+i,n===`job:thinking-delta`){let e=new Date().toISOString();o.thinkingStartedAt||=e,o.thinkingEndedAt=e}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`&&V.error(r.error||Q(`@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:(V.error(e.error||Q(`@WORKBENCH:保存失败`)),null)}catch{return V.error(Q(`@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}}z(),X();var gr=`__no_project__`,_r=`wb.collapsedGroupPaths.v1`,vr=`wb.seenGroupPaths.v1`;function yr(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 br(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function xr(e,t){let n=Y(yr(_r)),r=Y(yr(vr));P(n,e=>br(_r,e),{deep:!1}),P(r,e=>br(vr,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=q(()=>{let r=e.value,i=new Map;for(let e of r){let t=Be(e.projectPath)||gr;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=Be(t.value.path),o=Array.from(i.keys()).sort((e,t)=>e===a?-1:t===a||e===gr?1:t===gr?-1:e.localeCompare(t));return{groups:o.map(e=>({path:e,label:e===gr?Q(`@WORKBENCH:未关联项目`):e,tasks:i.get(e)})),hasMultiple:o.length>1||o.length===1&&n.value.has(o[0])}});function s(e){if(!e||e===gr)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}let c=q(()=>`${Be(t.value.path)}|${o.value.groups.map(e=>e.path).join(`
8
- `)}`);return P(c,()=>{let e=Be(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}}X(),z(),b(),fe();var Sr={class:`wb-sidebar`},Cr={class:`wb-section`},wr=[`disabled`],Tr=[`aria-expanded`,`title`,`onClick`,`onKeydown`],Er=[`title`],Dr={class:`wb-pill wb-task-group__count`},Or=[`data-task-id`,`data-group-path`,`title`,`aria-pressed`,`onClick`,`onKeydown`,`onMousedown`],kr={class:`wb-task-item__body`},Ar=[`title`],jr=[`title`],Mr={class:`wb-task-item__action-group`},Nr=[`title`,`aria-label`,`onClick`],Pr=[`onClick`,`title`,`aria-label`],Fr={key:0,class:`wb-empty wb-empty--rich`},Ir={class:`wb-empty__art`,"aria-hidden":`true`},Lr={class:`wb-empty__title`},Rr={class:`wb-empty__hint`},zr={class:`wb-empty__cta`},Br=5,Vr=$(s({__name:`WorkbenchSidebar`,props:{tasks:{},selectedTaskId:{},currentProject:{},creatingTask:{type:Boolean},isTaskRunning:{type:Function}},emits:[`select-task`,`delete-task`,`copy-task`,`create-task`,`reorder-tasks`],setup(e,{emit:t}){let n=e,a=t,o=q(()=>n.currentProject),{groupedTasksList:s,isGroupCollapsed:c,toggleGroupCollapsed:l,shortProjectLabel:u}=xr(q(()=>n.tasks),o),f=q(()=>Be(n.currentProject.path));function p(e){return!!e.projectPath&&Be(e.projectPath)!==f.value}function m(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function g(e){let t=m(e),n=Q(`@WORKBENCH:拖动排序提示`);return t?`${t} · ${n}`:n}function v(e){return n.isTaskRunning(e)}let b=Y(null),C=Y(null),w=Y(null),te=Y(null),O=Y(null),k=null;function ne(){b.value=null,C.value=null,w.value=null,te.value=null,O.value=null,k=null}function re(e,t,n,r){e.button===0&&(k={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,ae),window.addEventListener(`mouseup`,N,{once:!0}))}function ae(e){if(!k)return;if(b.value===null){if(Math.abs(e.clientY-k.pointerY)<Br)return;b.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){w.value=null,te.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){w.value=null,te.value=null,O.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;w.value=r,te.value=i,O.value=e.clientY<o?`before`:`after`}function N(e){if(window.removeEventListener(`mousemove`,ae),document.body.style.userSelect=``,!k){ne();return}let t=k.groupPath,n=k.taskId,r=w.value,i=O.value,o=te.value;if(ne(),!r||!i||o!==t)return;let c=s.value.groups.find(e=>e.path===t);if(!c)return;let l=c.tasks.map(e=>e.id),u=l.indexOf(n);if(u<0)return;l.splice(u,1);let d=l.indexOf(r)+ +(i===`after`);l.splice(d,0,n),a(`reorder-tasks`,{groupPath:t,orderedIds:l})}return(t,n)=>{let o=d,C=Ce;return A(),x(`aside`,Sr,[E(`section`,Cr,[E(`button`,{class:`wb-new-btn`,disabled:e.creatingTask,onClick:n[0]||=e=>a(`create-task`)},[y(o,{class:`wb-new-btn__icon`},{default:G(()=>[y(D(ee))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:新建任务`)),1),n[4]||=E(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,wr),E(`ul`,{class:h([`wb-task-list`,{"is-grouped":D(s).hasMultiple}])},[(A(!0),x(F,null,S(D(s).groups,t=>(A(),x(F,{key:t.path},[D(s).hasMultiple?(A(),x(`li`,{key:0,class:h([`wb-task-group__head`,{"is-current":t.path===f.value,"is-collapsed":D(c)(t.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!D(c)(t.path),title:D(c)(t.path)?D(Q)(`@WORKBENCH:展开`):D(Q)(`@WORKBENCH:收起`),onClick:e=>D(l)(t.path),onKeydown:[K(J(e=>D(l)(t.path),[`prevent`]),[`enter`]),K(J(e=>D(l)(t.path),[`prevent`]),[`space`])]},[y(o,{class:`wb-task-group__caret`},{default:G(()=>[(A(),i(_e(D(c)(t.path)?D(j):D(ie))))]),_:2},1024),y(o,{class:`wb-task-group__icon`},{default:G(()=>[y(D(T))]),_:1}),E(`span`,{class:`wb-task-group__name`,title:t.path===f.value?e.currentProject.path:t.label},M(t.path===f.value?e.currentProject.name:D(u)(t.label)),9,Er),E(`span`,Dr,M(t.tasks.length),1)],42,Tr)):r(``,!0),D(c)(t.path)?r(``,!0):(A(!0),x(F,{key:1},S(t.tasks,i=>(A(),x(`li`,{key:i.id,class:h([`wb-task-item`,{active:i.id===e.selectedTaskId,"is-other-project":p(i),"is-running":v(i),"is-dragging":b.value===i.id,"is-drop-before":w.value===i.id&&O.value===`before`,"is-drop-after":w.value===i.id&&O.value===`after`}]),"data-task-id":i.id,"data-group-path":t.path,title:g(i),role:`button`,tabindex:`0`,"aria-pressed":i.id===e.selectedTaskId,onClick:e=>a(`select-task`,i),onKeydown:[K(J(e=>a(`select-task`,i),[`prevent`]),[`enter`]),K(J(e=>a(`select-task`,i),[`prevent`]),[`space`])],onMousedown:e=>re(e,i,t.path,e.currentTarget)},[E(`div`,kr,[E(`div`,{class:`wb-task-item__title`,title:m(i)},M(m(i)),9,Ar)]),v(i)?(A(),x(`span`,{key:0,class:`wb-task-item__running-dot`,title:D(Q)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,jr)):r(``,!0),E(`div`,Mr,[E(`button`,{class:`wb-task-item__copy`,title:D(Q)(`@WORKBENCH:复制任务`),"aria-label":D(Q)(`@WORKBENCH:复制任务`),onClick:J(e=>a(`copy-task`,i),[`stop`]),onKeydown:n[1]||=J(()=>{},[`stop`])},[y(o,null,{default:G(()=>[y(D(L))]),_:1})],40,Nr),v(i)?r(``,!0):(A(),x(`button`,{key:0,class:`wb-task-item__del`,onClick:J(e=>a(`delete-task`,i),[`stop`]),onKeydown:n[2]||=J(()=>{},[`stop`]),title:D(Q)(`@WORKBENCH:删除`),"aria-label":D(Q)(`@WORKBENCH:删除`)},[y(o,null,{default:G(()=>[y(D(me))]),_:1})],40,Pr))])],42,Or))),128))],64))),128)),e.tasks.length===0?(A(),x(`li`,Fr,[E(`div`,Ir,[y(o,null,{default:G(()=>[y(D(R))]),_:1})]),E(`div`,Lr,M(D(Q)(`@WORKBENCH:暂无任务`)),1),E(`div`,Rr,M(D(Q)(`@WORKBENCH:点击上方按钮新建`)),1),E(`div`,zr,[y(C,{type:`primary`,size:`small`,icon:D(ee),loading:e.creatingTask,onClick:n[3]||=e=>a(`create-task`)},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])])])):r(``,!0)],2)])])}}}),[[`__scopeId`,`data-v-cb578d87`]]);z();function Hr(){let e=Y([]),t=Y([]),n=Y(``),r=Y(!1),i=Y(!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||V.error(r?.error||Q(`@WORKBENCH:读取项目列表失败`)),!1)}catch(e){return a||V.error(Q(`@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}:(V.error(t?.error||Q(`@WORKBENCH:移除项目失败`)),{ok:!1,keptTasks:0})}catch(e){return V.error(Q(`@WORKBENCH:网络错误: `)+(e?.message||e)),{ok:!1,keptTasks:0}}}return{projects:e,boardTasks:t,currentProjectPath:n,loading:r,loaded:i,loadProjects:a,removeProject:o}}var Ur=[0,5,10,15,30,60].map(e=>e*60*1e3),Wr=6e5;function Gr(e){let t=Number(e);return Ur.includes(t)?t:Wr}function Kr(e){return e?e>=36e5?`@WORKBENCH:每 {n} 小时报告`:`@WORKBENCH:每 {n} 分钟报告`:`@WORKBENCH:关闭自动报告`}function qr(e){return e?{n:Math.round(e>=36e5?e/36e5:e/6e4)}:{}}function Jr(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 Yr(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 Xr(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?null:Math.floor(e)}var Zr=`@WORKBENCH:AI 估计`,Qr=`@WORKBENCH:百分比是主 Agent 根据任务思考与工具调用推测的大致估计,不是精确进度`;z();var $r=1e5;function ei(){let e=Y(!0),t=Y([]),n=Y([]),r=Y($r),i=Y([]),a=Y(null),o=Y(!1),s=Y(!1),c=Y(!1),l=Y(``),u=Y({}),d=Y([]),f=Y(!1),p=Y(!1),m=Y(Wr);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:[],Ue().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=Gr(c.reportIntervalMs),o.value=!0,!0):(s||V.error(c?.error||Q(`@WORKBENCH:读取编排状态失败`)),!1)}catch(e){return s||V.error(Q(`@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||V.error(t?.error||Q(`@WORKBENCH:读取进度报告失败`)),!1)}catch(t){return e||V.error(Q(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{f.value=!1}}async function _(){if(p.value)return null;p.value=!0;try{let e=String(Me().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):(V.info(Q(`@WORKBENCH:当前没有正在执行的任务,没有可汇报的进度`)),null):(V.error(t?.error||Q(`@WORKBENCH:生成进度报告失败`)),null)}catch(e){return V.error(Q(`@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=Gr(t.reportIntervalMs),!0):(V.error(t?.error||Q(`@WORKBENCH:保存失败`)),!1)}catch(e){return V.error(Q(`@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:``,V.success(Q(`@WORKBENCH:已保存全局预设提示词`)),!0):(V.error(t?.error||Q(`@WORKBENCH:保存失败`)),!1)}catch(e){return V.error(Q(`@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:{},V.success(Q(`@WORKBENCH:已保存项目预设提示词`)),!0):(V.error(n?.error||Q(`@WORKBENCH:保存失败`)),!1)}catch(e){return V.error(Q(`@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,V.success(e.value?Q(`@WORKBENCH:已恢复调度`):Q(`@WORKBENCH:已暂停调度,派发将只建任务不执行`)),!0):(e.value=n,V.error(r?.error||Q(`@WORKBENCH:切换调度状态失败`)),!1)}catch(t){return e.value=n,V.error(Q(`@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}):(V.error(t?.error||Q(`@WORKBENCH:派发失败`)),null)}catch(e){return V.error(Q(`@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}}X(),z(),b(),fe();var ti={class:`proj`},ni={class:`proj__head`},ri={class:`proj__title`},ii={class:`proj__count`},ai={key:0,class:`proj__tools`},oi={class:`proj__search`},si=[`placeholder`,`aria-label`],ci={class:`proj__toggles`},li=[`aria-pressed`,`title`],ui=[`aria-pressed`,`title`],di={class:`proj__list`},fi=[`title`],pi={class:`proj-item__row1`},mi={class:`proj-item__name`},hi={key:0,class:`proj-item__running`,"aria-hidden":`true`},gi={class:`proj-item__num`},_i={key:0,class:`proj-item__row2`},vi={class:`proj-item__running-text`},yi=[`title`],bi={class:`proj-item__bar`,"aria-hidden":`true`},xi={class:`proj-item__progress-text`},Si=[`title`,`onClick`,`onKeydown`],Ci={class:`proj-item__row1`},wi={class:`proj-item__name`},Ti={class:`proj-item__signals`},Ei={key:0,class:`proj-item__running`,"aria-hidden":`true`},Di={key:1,class:`proj-item__badge`},Oi={class:`proj-item__row2`},ki={key:0,class:`proj-chip proj-chip--missing`},Ai={key:0,class:`proj-item__branch`},ji={class:`proj-item__branch-name`},Mi={key:1,class:`proj-chip proj-chip--ahead`},Ni={key:2,class:`proj-chip proj-chip--behind`},Pi={key:3,class:`proj-chip proj-chip--dirty`},Fi={class:`proj-item__time`},Ii={key:0,class:`proj-item__row3`},Li={class:`proj-item__bar`,"aria-hidden":`true`},Ri={class:`proj-item__progress-text`},zi={class:`proj-item__actions`},Bi=[`title`,`aria-label`,`onClick`],Vi=[`title`,`aria-label`,`onClick`],Hi=[`title`,`aria-label`,`aria-expanded`,`onClick`],Ui=[`aria-label`],Wi=[`onClick`,`onKeydown`],Gi={class:`proj-menu__icon`},Ki={class:`proj-menu__label`},qi=[`onClick`,`onKeydown`],Ji={class:`proj-menu__icon`},Yi={class:`proj-menu__label`},Xi=[`onClick`,`onKeydown`],Zi={class:`proj-menu__icon`},Qi={class:`proj-menu__label`},$i=[`onClick`,`onKeydown`],ea={class:`proj-menu__icon`},ta={class:`proj-menu__label`},na={class:`proj-menu__title`,role:`presentation`},ra=[`onClick`,`onKeydown`],ia={class:`proj-menu__icon`},aa={class:`proj-menu__label`},oa={key:0,class:`proj-menu__hint`},sa=[`onClick`,`onKeydown`],ca={class:`proj-menu__icon`},la=[`src`],ua={class:`proj-menu__label`},da={class:`proj-menu__hint`},fa=[`onClick`,`onKeydown`],pa={class:`proj-menu__icon`},ma=[`src`],ha={class:`proj-menu__label`},ga=[`onClick`,`onKeydown`],_a={class:`proj-menu__icon`},va={class:`proj-menu__label`},ya=[`onClick`,`onKeydown`],ba={class:`proj-menu__icon`},xa={class:`proj-menu__label`},Sa={key:0,class:`proj-menu__hint`},Ca={key:1,class:`proj-menu__hint`},wa=[`onClick`,`onKeydown`],Ta={class:`proj-menu__icon`},Ea={class:`proj-menu__label`},Da={key:0,class:`proj-empty`},Oa={class:`proj-empty__title`},ka={class:`proj-empty__hint`},Aa={key:1,class:`proj-empty`},ja={class:`proj-empty__title`},Ma=$(s({__name:`WorkbenchProjectPanel`,props:{projects:{},selectedKey:{},loading:{type:Boolean}},emits:[`select`,`remove`],setup(t,{emit:o}){let s=t,l=o,g=q(()=>[...s.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)})),v=Y(``),b=Y(!1),ee=Y(!1),C=q(()=>!!v.value.trim()||b.value||ee.value),w=q(()=>{let e=v.value.trim().toLowerCase();return g.value.filter(t=>b.value&&t.stats.total===0||ee.value&&t.git&&t.git.isGitRepo===!1?!1:!e||t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))});function te(){v.value=``,b.value=!1,ee.value=!1}let O=q(()=>s.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})),k=q(()=>O.value.total>0?Math.round(O.value.done/O.value.total*100):0);function re(e){return e.git?e.git.isGitRepo===null?Q(`@WORKBENCH:未知`):e.git.isGitRepo?e.git.detached?Q(`@WORKBENCH:游离 HEAD`):e.git.branch||Q(`@WORKBENCH:未知`):``:``}function ie(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}let j=Y(null),N=Y(null);function oe(e,t){if(j.value===e.key){j.value=null;return}N.value=t.currentTarget,j.value=e.key}function se(){j.value=null}function ce(e){if(!j.value)return;let t=e.target;if(t&&!N.value?.contains(t)){for(let e of Array.from(document.querySelectorAll(`.proj-open-menu`)))if(e.contains(t))return;j.value=null}}f(()=>document.addEventListener(`mousedown`,ce,!0)),m(()=>document.removeEventListener(`mousedown`,ce,!0));let P=Pe(),le=Y(!1),R=Y(null);function ue(e){return P.lastCheckedAt!==null&&!P.isToolAvailable(e)}async function z(e){se();let t=await Re(e.path);t.success?V.success(t.message||Q(`@WORKBENCH:已在文件管理器中打开文件夹`)):V.error(t.error||Q(`@WORKBENCH:打开文件夹失败`))}async function B(e){se();let t=await Fe(e.path);t.success?V.success(t.message||Q(`@67CE7:已在终端中打开目录`)):V.error(t.error||Q(`@WORKBENCH:打开终端失败`))}async function H(e){se();let t=await Ke(e.path);t.success?V.success(Q(`@WORKBENCH:已在新标签页启动 g ui`)):V.error(t.error||Q(`@WORKBENCH:启动 g ui 失败`))}async function fe(e){if(se(),e.name)try{await navigator.clipboard.writeText(e.name),V.success(Q(`@67CE7:已复制文件夹名称`))}catch{V.error(Q(`@67CE7:复制失败`))}}async function me(e){let t=e.name||e.path,n=e.stats.total>0?Q(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。该项目的 {n} 条任务不会被删除,仍可在「全部项目」下查看。`,{name:t,n:e.stats.total}):Q(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。`,{name:t});try{await W.confirm(n,Q(`@WORKBENCH:移除项目`),{confirmButtonText:Q(`@WORKBENCH:移除`),cancelButtonText:Q(`@WORKBENCH:取消`),type:`warning`})}catch{return}l(`remove`,e)}async function U(e,t,n){if(se(),!await Ve()){V.warning(Q(`@67CE7:工具检测失败,请稍后重试`));return}if(!P.isToolAvailable(t)){R.value=t,le.value=!0;return}let r=await Ge(t,e.path,n);r.success?V.success(r.message||Q(`@67CE7:已用 {tool} 打开目录`,{tool:qe[t]})):V.error(`${Q(`@67CE7:打开失败: `)}${r.error??``}`)}return(o,s)=>{let f=d,m=ae;return A(),x(`section`,ti,[E(`header`,ni,[E(`h3`,ri,M(D(Q)(`@WORKBENCH:项目列表`)),1),E(`span`,ii,[C.value?(A(),x(F,{key:0},[_(M(D(Q)(`@WORKBENCH:匹配 {n}/{total} 个项目`,{n:w.value.length,total:t.projects.length})),1)],64)):(A(),x(F,{key:1},[_(M(t.projects.length),1)],64))])]),t.projects.length>0?(A(),x(`div`,ai,[E(`div`,oi,[y(f,{class:`proj__search-icon`,"aria-hidden":`true`},{default:G(()=>[y(D(ne))]),_:1}),I(E(`input`,{"onUpdate:modelValue":s[0]||=e=>v.value=e,class:`proj__search-input`,type:`search`,placeholder:D(Q)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":D(Q)(`@WORKBENCH:搜索项目名称或路径`),onKeydown:s[1]||=K(e=>v.value=``,[`esc`])},null,40,si),[[de,v.value]])]),E(`div`,ci,[E(`button`,{type:`button`,class:h([`proj__toggle`,{"is-on":b.value}]),"aria-pressed":b.value,title:D(Q)(`@WORKBENCH:只显示有任务的项目`),onClick:s[2]||=e=>b.value=!b.value},[E(`span`,null,M(D(Q)(`@WORKBENCH:只看有任务`)),1)],10,li),E(`button`,{type:`button`,class:h([`proj__toggle`,{"is-on":ee.value}]),"aria-pressed":ee.value,title:D(Q)(`@WORKBENCH:只显示 Git 仓库`),onClick:s[3]||=e=>ee.value=!ee.value},[E(`span`,null,M(D(Q)(`@WORKBENCH:隐藏非 Git`)),1)],10,ui)])])):r(``,!0),E(`ul`,di,[E(`li`,{class:h([`proj-item proj-item--all`,{"is-active":t.selectedKey===``,"is-running":O.value.running>0,"is-complete":O.value.total>0&&O.value.done>=O.value.total}]),role:`button`,tabindex:`0`,title:D(Q)(`@WORKBENCH:全部项目`),onClick:s[4]||=e=>l(`select`,null),onKeydown:[s[5]||=K(J(e=>l(`select`,null),[`prevent`]),[`enter`]),s[6]||=K(J(e=>l(`select`,null),[`prevent`]),[`space`])]},[E(`div`,pi,[y(f,{class:`proj-item__icon`},{default:G(()=>[y(D(a))]),_:1}),E(`span`,mi,M(D(Q)(`@WORKBENCH:全部项目`)),1),O.value.running>0?(A(),x(`span`,hi)):r(``,!0),E(`span`,gi,M(t.projects.length),1)]),O.value.running>0?(A(),x(`div`,_i,[E(`span`,vi,M(D(Q)(`@WORKBENCH:{n} 个执行中`,{n:O.value.running})),1)])):r(``,!0),O.value.total>0?(A(),x(`div`,{key:1,class:`proj-item__row3`,title:D(Q)(`@WORKBENCH:只统计项目列表里这些项目名下的任务`)},[E(`span`,bi,[E(`i`,{class:`proj-item__bar-fill`,style:p({width:k.value+`%`})},null,4)]),E(`span`,xi,M(D(Q)(`@WORKBENCH:{done}/{total} 任务完成`,{done:O.value.done,total:O.value.total})),1)],8,yi)):r(``,!0)],42,fi),(A(!0),x(F,null,S(w.value,a=>(A(),x(`li`,{key:a.key,class:h([`proj-item`,{"is-active":a.key===t.selectedKey,"is-running":a.stats.runningJobs>0,"is-complete":a.stats.total>0&&a.stats.done>=a.stats.total&&a.stats.runningJobs===0,"is-missing":a.exists===!1}]),role:`button`,tabindex:`0`,title:a.path,onClick:e=>l(`select`,a),onKeydown:[K(J(e=>l(`select`,a),[`self`,`prevent`]),[`enter`]),K(J(e=>l(`select`,a),[`self`,`prevent`]),[`space`])]},[E(`div`,Ci,[y(f,{class:`proj-item__icon`},{default:G(()=>[y(D(T))]),_:1}),E(`span`,wi,M(a.name),1),E(`span`,Ti,[a.stats.runningJobs>0?(A(),x(`span`,Ei)):r(``,!0),a.isCurrent?(A(),x(`span`,Di,M(D(Q)(`@WORKBENCH:当前`)),1)):r(``,!0)])]),E(`div`,Oi,[a.exists===!1?(A(),x(`span`,ki,M(D(Q)(`@WORKBENCH:目录不存在`)),1)):(A(),x(F,{key:1},[re(a)?(A(),x(`span`,Ai,[ie(a)?(A(),i(Oe,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):r(``,!0),E(`span`,ji,M(re(a)),1)])):r(``,!0),a.git&&a.git.ahead>0?(A(),x(`span`,Mi,`↑`+M(a.git.ahead),1)):r(``,!0),a.git&&a.git.behind>0?(A(),x(`span`,Ni,`↓`+M(a.git.behind),1)):r(``,!0),a.git&&a.git.changed>0?(A(),x(`span`,Pi,`●`+M(a.git.changed),1)):r(``,!0)],64)),E(`span`,Fi,M(D(Hn)(a.stats.lastActiveAt)),1)]),a.stats.total>0?(A(),x(`div`,Ii,[E(`span`,Li,[E(`i`,{class:`proj-item__bar-fill`,style:p({width:a.stats.progress+`%`})},null,4)]),E(`span`,Ri,M(D(Q)(`@WORKBENCH:{done}/{total} 任务完成`,{done:a.stats.done,total:a.stats.total})),1)])):r(``,!0),E(`div`,zi,[a.exists===!1?(A(),x(`button`,{key:0,type:`button`,class:`proj-item__action proj-item__action--danger`,title:D(Q)(`@WORKBENCH:从清单移除`),"aria-label":`${D(Q)(`@WORKBENCH:从清单移除`)} ${a.name}`,onClick:J(e=>me(a),[`stop`])},[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(pe))]),_:1})],8,Bi)):(A(),x(`button`,{key:1,type:`button`,class:`proj-item__action`,title:D(Q)(`@WORKBENCH:打开文件夹`),"aria-label":`${D(Q)(`@WORKBENCH:打开文件夹`)} ${a.name}`,onClick:J(e=>z(a),[`stop`])},[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(n))]),_:1})],8,Vi)),a.exists===!1?r(``,!0):(A(),i(m,{key:2,visible:j.value===a.key,trigger:`manual`,placement:`right-start`,width:272,"show-arrow":!1,offset:6,"popper-class":`proj-open-menu`},{reference:G(()=>[E(`button`,{type:`button`,class:h([`proj-item__action`,{"is-open":j.value===a.key}]),title:D(Q)(`@WORKBENCH:打开方式`),"aria-label":`${D(Q)(`@WORKBENCH:打开方式`)} ${a.name}`,"aria-expanded":j.value===a.key,"aria-haspopup":`menu`,onClick:J(e=>oe(a,e),[`stop`])},[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(u))]),_:1})],10,Hi)]),default:G(()=>[j.value===a.key?(A(),x(`ul`,{key:0,class:`proj-menu`,role:`menu`,"aria-label":D(Q)(`@WORKBENCH:打开方式`)},[E(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>z(a),onKeydown:[K(J(e=>z(a),[`prevent`]),[`enter`]),K(J(e=>z(a),[`prevent`]),[`space`])]},[E(`span`,Gi,[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(n))]),_:1})]),E(`span`,Ki,M(D(Q)(`@WORKBENCH:在文件管理器中打开`)),1)],40,Wi),E(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>B(a),onKeydown:[K(J(e=>B(a),[`prevent`]),[`enter`]),K(J(e=>B(a),[`prevent`]),[`space`])]},[E(`span`,Ji,[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(c))]),_:1})]),E(`span`,Yi,M(D(Q)(`@WORKBENCH:在终端中打开`)),1)],40,qi),E(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>H(a),onKeydown:[K(J(e=>H(a),[`prevent`]),[`enter`]),K(J(e=>H(a),[`prevent`]),[`space`])]},[E(`span`,Zi,[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(e))]),_:1})]),E(`span`,Qi,M(D(Q)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,Xi),E(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>fe(a),onKeydown:[K(J(e=>fe(a),[`prevent`]),[`enter`]),K(J(e=>fe(a),[`prevent`]),[`space`])]},[E(`span`,ea,[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(L))]),_:1})]),E(`span`,ta,M(D(Q)(`@67CE7:复制文件夹名称`)),1)],40,$i),s[8]||=E(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),E(`li`,na,M(D(Q)(`@WORKBENCH:用工具打开`)),1),(A(!0),x(F,null,S(D(We),e=>(A(),x(`li`,{key:e.id,class:h([`proj-menu__item`,{"is-missing":ue(e.id)}]),role:`menuitem`,tabindex:`-1`,onClick:t=>U(a,e.id),onKeydown:[K(J(t=>U(a,e.id),[`prevent`]),[`enter`]),K(J(t=>U(a,e.id),[`prevent`]),[`space`])]},[E(`span`,ia,[y(Oe,{"icon-class":e.icon,class:h({"icon-invert-dark":e.id===`codex`})},null,8,[`icon-class`,`class`])]),E(`span`,aa,M(D(Q)(e.labelKey)),1),ue(e.id)?(A(),x(`span`,oa,M(D(Q)(`@67CE7:未安装`)),1)):r(``,!0)],42,ra))),128)),E(`li`,{class:h([`proj-menu__item`,{"is-missing":ue(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`claude`),onKeydown:[K(J(e=>U(a,`claude`),[`prevent`]),[`enter`]),K(J(e=>U(a,`claude`),[`prevent`]),[`space`])]},[E(`span`,ca,[E(`img`,{src:D(ze),alt:``,class:`proj-menu__img`},null,8,la)]),E(`span`,ua,M(D(Q)(`@67CE7:用 Claude Code 打开`)),1),E(`span`,da,M(ue(`claude`)?D(Q)(`@67CE7:未安装`):D(Q)(`@67CE7:默认权限`)),1)],42,sa),E(`li`,{class:h([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`claude`,`bypassPermissions`),onKeydown:[K(J(e=>U(a,`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),K(J(e=>U(a,`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[E(`span`,pa,[E(`img`,{src:D(ze),alt:``,class:`proj-menu__img`},null,8,ma)]),E(`span`,ha,M(D(Q)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],42,fa),E(`li`,{class:h([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`opencode`,`auto`),onKeydown:[K(J(e=>U(a,`opencode`,`auto`),[`prevent`]),[`enter`]),K(J(e=>U(a,`opencode`,`auto`),[`prevent`]),[`space`])]},[E(`span`,_a,[y(Oe,{"icon-class":`opencode`})]),E(`span`,va,M(D(Q)(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],42,ga),E(`li`,{class:h([`proj-menu__item`,{"is-missing":ue(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`codex`,`sandboxed`),onKeydown:[K(J(e=>U(a,`codex`,`sandboxed`),[`prevent`]),[`enter`]),K(J(e=>U(a,`codex`,`sandboxed`),[`prevent`]),[`space`])]},[E(`span`,ba,[y(Oe,{"icon-class":`codex`,class:`icon-invert-dark`})]),E(`span`,xa,M(D(Q)(`@67CE7:用 Codex 打开(自动批准)`)),1),ue(`codex`)?(A(),x(`span`,Ca,M(D(Q)(`@67CE7:未安装`)),1)):(A(),x(`span`,Sa,M(D(Q)(`@67CE7:沙箱内`)),1))],42,ya),E(`li`,{class:h([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`codex`,`bypass`),onKeydown:[K(J(e=>U(a,`codex`,`bypass`),[`prevent`]),[`enter`]),K(J(e=>U(a,`codex`,`bypass`),[`prevent`]),[`space`])]},[E(`span`,Ta,[y(Oe,{"icon-class":`codex`,class:`icon-invert-dark`})]),E(`span`,Ea,M(D(Q)(`@67CE7:用 Codex 打开(完全批准)`)),1)],42,wa)],8,Ui)):r(``,!0)]),_:2},1032,[`visible`]))])],42,Si))),128)),!t.loading&&t.projects.length===0?(A(),x(`li`,Da,[E(`p`,Oa,M(D(Q)(`@WORKBENCH:尚无项目`)),1),E(`p`,ka,M(D(Q)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):r(``,!0),!t.loading&&t.projects.length>0&&w.value.length===0?(A(),x(`li`,Aa,[E(`p`,ja,M(D(Q)(`@WORKBENCH:没有匹配的项目`)),1),E(`button`,{type:`button`,class:`proj-empty__clear`,onClick:te},M(D(Q)(`@WORKBENCH:清除筛选`)),1)])):r(``,!0)]),y(Ie,{modelValue:le.value,"onUpdate:modelValue":s[7]||=e=>le.value=e,tool:R.value},null,8,[`modelValue`,`tool`])])}}}),[[`__scopeId`,`data-v-79e992c7`]]),Na=[140,170,200,230,260,290,320,350];function Pa(e){return(e||``).replace(/\\/g,`/`).trim().toLowerCase()}function Fa(e){let t=Pa(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,Na[(n>>>0)%Na.length]}function Ia(e){return{"--tag-hue":String(Fa(e))}}X(),z(),b(),fe();var La={class:`kb`},Ra={class:`kb__toolbar`},za={class:`kb__views`,role:`tablist`},Ba=[`aria-selected`],Va=[`aria-selected`],Ha={class:`kb__filters`},Ua={class:`kb__search`},Wa=[`placeholder`,`aria-label`],Ga=[`aria-hidden`],Ka={class:`kb-col__head`},qa={class:`kb-col__title`},Ja={class:`kb-col__count`},Ya={class:`kb-col__list`},Xa=[`data-task-id`,`aria-current`,`onClick`,`onKeydown`],Za=[`title`,`aria-label`,`onClick`],Qa=[`src`,`alt`,`onError`],$a={key:0,class:`kb-card__cover-more`,"aria-hidden":`true`},eo={class:`kb-card__row1`},to=[`title`],no=[`title`],ro={class:`kb-card__time`},io=[`title`],ao=[`title`],oo={key:3,class:`kb-card__live`},so={class:`kb-card__live-meta`},co=[`title`],lo=[`title`],uo={key:2,class:`kb-card__live-pid`},fo={key:3,class:`kb-card__live-silent`},po=[`title`],mo=[`title`],ho={class:`kb-card__live-tag`},go=[`title`],_o={class:`kb-card__live-tag`},vo=[`title`],yo=[`title`],bo={class:`kb-card__reply-text`},xo=[`title`,`onClick`],So={class:`kb-card__actions`},Co=[`title`,`onClick`],wo=[`title`,`aria-label`,`onClick`],To=[`title`,`aria-label`,`onClick`],Eo=[`title`,`aria-label`,`onClick`],Do=[`title`,`aria-label`,`onClick`],Oo={key:0,class:`kb-col__add`},ko={key:1,class:`kb-col__empty`},Ao={key:2,class:`kb-col__more`},jo={key:1,class:`kb__table-wrap`},Mo={class:`kb-table`},No={class:`kb-table__th`},Po={class:`kb-table__th kb-table__th--narrow`},Fo={class:`kb-table__th kb-table__th--time`},Io=[`onClick`,`onKeydown`],Lo={class:`kb-table__td`},Ro=[`title`,`onClick`],zo={class:`kb-table__name`},Bo=[`title`],Vo={key:2,class:`kb-table__live`},Ho=[`title`],Uo={key:1,class:`kb-table__live-silent`},Wo={key:3,class:`kb-table__live kb-table__live--reply`},Go=[`title`],Ko={class:`kb-table__td`},qo={class:`kb-table__td kb-table__td--num`},Jo=[`title`],Yo={class:`kb-table__dur`},Xo=[`title`],Zo={key:0},Qo={class:`kb-table__td kb-table__empty`,colspan:`3`},$o=`wb.boardView.v1`,es=30,ts=$(s({__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(e,{emit:t}){let n=e,a=t,o=Y((()=>{try{return localStorage.getItem($o)===`list`?`list`:`kanban`}catch{return`kanban`}})());P(o,e=>{try{localStorage.setItem($o,e)}catch{}});let s=Y(``),c=[{key:`todo`,labelKey:`@WORKBENCH:待处理`},{key:`doing`,labelKey:`@WORKBENCH:进行中`},{key:`done`,labelKey:`@WORKBENCH:已完成`}],l=q(()=>{let e=s.value.trim().toLowerCase();return n.tasks.filter(t=>!e||(t.title||``).toLowerCase().includes(e)||(t.desc||``).toLowerCase().includes(e))}),u=Y(es);P(s,()=>{u.value=es});let m=q(()=>{let e=c.map(e=>{let t=e.key===`done`?l.value.filter(t=>t.column===e.key).sort(ee):l.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-u.value):0,tasks:e.key===`done`?e.all.slice(0,u.value):e.all,collapsed:t&&e.all.length===0&&e.key!==`todo`}))}),g=q(()=>({gridTemplateColumns:m.value.map(e=>e.collapsed?`minmax(0, 0fr)`:`minmax(0, 1fr)`).join(` `)})),v=Y(!1);f(()=>{requestAnimationFrame(()=>requestAnimationFrame(()=>{v.value=!0}))});function b(e){return Kn(e)}function ee(e,t){return b(t).localeCompare(b(e))}function C(e){return qn(e)}function w(e){return Jn(e)}function T(e){return Qn(e)}function te(e){let t=(e.autoCompleted?.reason||``).trim(),n=Q(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`);return t?`${n}\n${t}`:n}let O=q(()=>[...l.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 re(e){return n.projectLabels[e.projectPath]||``}function ie(e){return e.lastJobStatus===`error`}function j(e){return e.live?.agent||e.lastJobAgent||``}function ae(e){let t=e.live;if(!t)return``;let n=Xn(e),r=t.lastLine||t.lastThought||t.lastTool;return r?`${n} · ${r}`:n}function N(e){return Array.isArray(e.images)?e.images:[]}let oe=Y(new Set);function se(e){oe.value=new Set(oe.value).add(e)}function ce(e){let t=N(e);return oe.value.size===0?t:t.filter(e=>!oe.value.has(e.id))}function L(e){return`/api/workbench/attachments/${e}/raw`}let R=Y(null);function ue(e,t=0){let n=ce(e);n.length!==0&&(R.value={urls:n.map(e=>L(e.id)),index:t})}function z(){R.value=null}function B(e){return e.originalName?`${Q(`@WORKBENCH:查看图片`)} · ${e.originalName}`:Q(`@WORKBENCH:查看图片`)}return(t,n)=>{let l=d,f=le;return A(),x(`div`,La,[E(`div`,Ra,[E(`div`,za,[E(`button`,{type:`button`,role:`tab`,class:h([`kb__view-btn`,{"is-active":o.value===`kanban`}]),"aria-selected":o.value===`kanban`,onClick:n[0]||=e=>o.value=`kanban`},M(D(Q)(`@WORKBENCH:看板视图`)),11,Ba),E(`button`,{type:`button`,role:`tab`,class:h([`kb__view-btn`,{"is-active":o.value===`list`}]),"aria-selected":o.value===`list`,onClick:n[1]||=e=>o.value=`list`},M(D(Q)(`@WORKBENCH:列表视图`)),11,Va)]),E(`div`,Ha,[E(`div`,Ua,[y(l,{class:`kb__search-icon`},{default:G(()=>[y(D(ne))]),_:1}),I(E(`input`,{class:`kb__search-input`,type:`search`,"onUpdate:modelValue":n[2]||=e=>s.value=e,placeholder:D(Q)(`@WORKBENCH:搜索任务标题或描述`),"aria-label":D(Q)(`@WORKBENCH:搜索任务标题或描述`)},null,8,Wa),[[de,s.value]])])])]),o.value===`kanban`?(A(),x(`div`,{key:0,class:h([`kb__columns`,{"is-animated":v.value}]),style:p(g.value)},[(A(!0),x(F,null,S(m.value,t=>(A(),x(`section`,{key:t.key,class:h([`kb-col`,[`kb-col--`+t.key,{"is-collapsed":t.collapsed}]]),"aria-hidden":t.collapsed?`true`:void 0},[E(`header`,Ka,[E(`span`,{class:h([`kb-col__dot`,{"is-live":t.total>0}]),"aria-hidden":`true`},null,2),E(`h3`,qa,M(D(Q)(t.labelKey)),1),E(`span`,Ja,M(t.total),1)]),E(`ul`,Ya,[(A(!0),x(F,null,S(t.tasks,t=>(A(),x(`li`,{key:t.id,class:h([`kb-card`,{"is-running":t.runningJobs>0,"has-error":ie(t),"is-opened":t.id===e.openedTaskId}]),"data-task-id":t.id,"aria-current":t.id===e.openedTaskId?`true`:void 0,role:`button`,tabindex:`0`,onClick:e=>a(`open-task`,t),onKeydown:[K(J(e=>a(`open-task`,t),[`prevent`]),[`enter`]),K(J(e=>a(`open-task`,t),[`prevent`]),[`space`])]},[ce(t).length>0?(A(),x(`button`,{key:0,type:`button`,class:`kb-card__cover`,title:B(ce(t)[0]),"aria-label":B(ce(t)[0]),onClick:J(e=>ue(t),[`stop`]),onKeydown:n[3]||=J(()=>{},[`stop`])},[E(`img`,{class:`kb-card__cover-img`,src:L(ce(t)[0].id),alt:ce(t)[0].originalName,loading:`lazy`,decoding:`async`,onError:e=>se(ce(t)[0].id)},null,40,Qa),ce(t).length>1?(A(),x(`span`,$a,` +`+M(ce(t).length-1),1)):r(``,!0)],40,Za)):r(``,!0),E(`div`,eo,[e.showProjectLabel&&re(t)?(A(),x(`span`,{key:0,class:`kb-card__project-chip`,style:p(D(Ia)(t.projectPath)),title:t.projectPath},M(re(t)),13,to)):r(``,!0),E(`p`,{class:`kb-card__title`,title:k(t)},M(k(t)||D(Q)(`@WORKBENCH:未命名任务`)),9,no),E(`span`,ro,M(D(Hn)(C(t))),1)]),w(t)?(A(),x(`p`,{key:1,class:`kb-card__spent`,title:T(t)},M(D(Yn)(t)),9,io)):r(``,!0),t.autoCompleted?(A(),x(`p`,{key:2,class:`kb-card__auto-done`,title:te(t)},M(D(Q)(`@WORKBENCH:AI 判定完成`)),9,ao)):r(``,!0),t.live?(A(),x(`div`,oo,[E(`p`,so,[j(t)?(A(),x(`span`,{key:0,class:`kb-card__live-agent`,title:D(je)(j(t))},[y(He,{executor:j(t),class:`kb-card__live-agent-icon`},null,8,[`executor`])],8,co)):r(``,!0),E(`span`,null,M(D(Xn)(t)),1),t.live.toolCallCount?(A(),x(`span`,{key:1,title:t.live.toolMix||``},M(D(Q)(`@WORKBENCH:工具 {n} 次`,{n:t.live.toolCallCount})),9,lo)):r(``,!0),t.live.pid?(A(),x(`span`,uo,`PID `+M(t.live.pid),1)):r(``,!0),D(Xr)(t.live.silentMs)===null?r(``,!0):(A(),x(`span`,fo,M(D(Q)(`@WORKBENCH:静默 {elapsed}`,{elapsed:D(Un)(D(Xr)(t.live.silentMs))})),1))]),t.live.lastTool?(A(),x(`p`,{key:0,class:`kb-card__live-line is-tool`,title:t.live.lastTool},M(t.live.lastTool),9,po)):r(``,!0),t.live.lastThought?(A(),x(`p`,{key:1,class:`kb-card__live-line is-thought`,title:t.live.lastThought},[E(`span`,ho,M(D(Q)(`@WORKBENCH:最近思考`)),1),_(M(t.live.lastThought),1)],8,mo)):r(``,!0),t.live.lastLine?(A(),x(`p`,{key:2,class:`kb-card__live-line`,title:t.live.lastLine},[E(`span`,_o,M(D(Q)(`@WORKBENCH:最新回复`)),1),_(M(t.live.lastLine),1)],8,go)):r(``,!0)])):t.lastReply?(A(),x(`p`,{key:4,class:`kb-card__reply`,title:t.lastReply},[j(t)?(A(),x(`span`,{key:0,class:`kb-card__quote-agent`,title:D(je)(j(t))},[y(He,{executor:j(t),class:`kb-card__quote-agent-icon`},null,8,[`executor`])],8,yo)):r(``,!0),E(`span`,bo,M(t.lastReply),1)],8,vo)):r(``,!0),ie(t)&&t.runningJobs===0?(A(),x(`button`,{key:5,type:`button`,class:`kb-card__retry`,title:D(Q)(`@WORKBENCH:重新执行这条任务`),onClick:J(e=>a(`run-task`,t),[`stop`]),onKeydown:n[4]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:重试`)),41,xo)):r(``,!0),E(`div`,So,[t.runningJobs===0?(A(),x(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:D(Q)(`@WORKBENCH:执行`),onClick:J(e=>a(`run-task`,t),[`stop`]),onKeydown:n[5]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:执行`)),41,Co)):(A(),x(`button`,{key:1,type:`button`,class:`kb-card__btn kb-card__btn--stop`,title:D(Q)(`@WORKBENCH:停止`),"aria-label":D(Q)(`@WORKBENCH:停止`),onClick:J(e=>a(`stop-task`,t),[`stop`]),onKeydown:n[6]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:停止`)),41,wo)),t.column===`done`?t.manualDoneAt?(A(),x(`button`,{key:3,type:`button`,class:`kb-card__btn`,title:D(Q)(`@WORKBENCH:撤销完成标记,退回待处理`),"aria-label":D(Q)(`@WORKBENCH:撤销完成标记`),onClick:J(e=>a(`reopen-task`,t),[`stop`]),onKeydown:n[8]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:撤销`)),41,Eo)):r(``,!0):(A(),x(`button`,{key:2,type:`button`,class:`kb-card__btn kb-card__btn--done`,title:D(Q)(`@WORKBENCH:标记为已完成`),"aria-label":D(Q)(`@WORKBENCH:标记为已完成`),onClick:J(e=>a(`complete-task`,t),[`stop`]),onKeydown:n[7]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:完成`)),41,To)),E(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:D(Q)(`@WORKBENCH:删除`),"aria-label":D(Q)(`@WORKBENCH:删除`),onClick:J(e=>a(`delete-task`,t),[`stop`]),onKeydown:n[9]||=J(()=>{},[`stop`])},`×`,40,Do)])],42,Xa))),128)),t.key===`todo`?(A(),x(`li`,Oo,[E(`button`,{type:`button`,class:h([`kb-col__add-btn`,{"kb-col__add-btn--solo":t.tasks.length===0}]),onClick:n[10]||=e=>a(`create-task`)},[n[13]||=E(`span`,{class:`kb-col__add-plus`,"aria-hidden":`true`},`+`,-1),E(`span`,null,M(D(Q)(`@WORKBENCH:新建任务`)),1)],2)])):t.tasks.length===0?(A(),x(`li`,ko,[E(`span`,null,M(D(Q)(`@WORKBENCH:暂无任务`)),1)])):r(``,!0),t.hidden>0?(A(),x(`li`,Ao,[E(`button`,{type:`button`,class:`kb-col__more-btn`,onClick:n[11]||=e=>u.value+=es},M(D(Q)(`@WORKBENCH:显示更早的 {n} 条`,{n:Math.min(es,t.hidden)})),1)])):r(``,!0)])],10,Ga))),128))],6)):(A(),x(`div`,jo,[E(`table`,Mo,[E(`thead`,null,[E(`tr`,null,[E(`th`,No,M(D(Q)(`@WORKBENCH:任务`)),1),E(`th`,Po,M(D(Q)(`@WORKBENCH:状态`)),1),E(`th`,Fo,M(D(Q)(`@WORKBENCH:时间`)),1)])]),E(`tbody`,null,[(A(!0),x(F,null,S(O.value,t=>(A(),x(`tr`,{key:t.id,class:`kb-table__row`,tabindex:`0`,onClick:e=>a(`open-task`,t),onKeydown:[K(J(e=>a(`open-task`,t),[`prevent`]),[`enter`]),K(J(e=>a(`open-task`,t),[`prevent`]),[`space`])]},[E(`td`,Lo,[ce(t).length>0?(A(),x(`button`,{key:0,type:`button`,class:`kb-table__shots`,title:B(ce(t)[0]),onClick:J(e=>ue(t),[`stop`]),onKeydown:n[12]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:{n} 张图`,{n:ce(t).length})),41,Ro)):r(``,!0),E(`span`,zo,M(k(t)||D(Q)(`@WORKBENCH:未命名任务`)),1),e.showProjectLabel&&re(t)?(A(),x(`span`,{key:1,class:`kb-table__project`,style:p(D(Ia)(t.projectPath)),title:t.projectPath},M(re(t)),13,Bo)):r(``,!0),t.live?(A(),x(`span`,Vo,[j(t)?(A(),x(`span`,{key:0,class:`kb-table__agent`,title:D(je)(j(t))},[y(He,{executor:j(t),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Ho)):r(``,!0),_(` `+M(ae(t))+` `,1),D(Xr)(t.live.silentMs)===null?r(``,!0):(A(),x(`span`,Uo,M(D(Q)(`@WORKBENCH:静默 {elapsed}`,{elapsed:D(Un)(D(Xr)(t.live.silentMs))})),1))])):t.lastReply?(A(),x(`span`,Wo,[j(t)?(A(),x(`span`,{key:0,class:`kb-table__agent`,title:D(je)(j(t))},[y(He,{executor:j(t),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Go)):r(``,!0),_(M(t.lastReply),1)])):r(``,!0)]),E(`td`,Ko,[E(`span`,{class:h([`kb-table__status`,`is-`+t.column])},M(D(Q)(c.find(e=>e.key===t.column).labelKey)),3)]),E(`td`,qo,[E(`span`,{class:`kb-table__time`,title:T(t)},[w(t)?(A(),x(F,{key:0},[E(`span`,Yo,M(D(Yn)(t)),1),n[14]||=E(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):r(``,!0),t.autoCompleted?(A(),x(F,{key:1},[E(`span`,{class:`kb-table__auto-done`,title:te(t)},M(D(Q)(`@WORKBENCH:AI 判定完成`)),9,Xo),n[15]||=E(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):r(``,!0),E(`span`,null,M(D(Hn)(C(t))),1)],8,Jo)])],40,Io))),128)),O.value.length===0?(A(),x(`tr`,Zo,[E(`td`,Qo,M(D(Q)(`@WORKBENCH:暂无任务`)),1)])):r(``,!0)])])])),R.value?(A(),i(f,{key:2,"url-list":R.value.urls,"initial-index":R.value.index,"hide-on-click-modal":!0,teleported:!0,onClose:z},null,8,[`url-list`,`initial-index`])):r(``,!0)])}}}),[[`__scopeId`,`data-v-efc67236`]]);X(),z(),b();var ns=[`title`,`aria-label`],rs={class:`tep__btn-name`},is={class:`tep__item`},as={class:`tep__item-name`},os=[`title`],ss={key:2,class:`tep__item-missing`},cs=$(s({__name:`TaskExecutorPicker`,props:{title:{}},setup(e){let n=e,{active:a,availability:o,choose:s,executorModelText:c,executorModelTitle:l}=mr(),u=Pe();f(()=>{u.fetchExecutorModels()});function p(){return[n.title,l(a.value)].filter(Boolean).join(` · `)}return(e,n)=>{let u=d,f=t,m=be,h=C;return A(),i(h,{trigger:`click`,class:`tep`,onCommand:D(s)},{dropdown:G(()=>[y(m,null,{default:G(()=>[(A(!0),x(F,null,S(D(Ae),e=>(A(),i(f,{key:e.id,command:e.id,disabled:!D(o)[e.id]},{default:G(()=>[E(`span`,is,[y(He,{executor:e.id,class:`tep__item-icon`},null,8,[`executor`]),E(`span`,as,M(e.name),1),D(c)(e.id)?(A(),x(`span`,{key:0,class:`tep__item-model`,title:D(l)(e.id)},M(D(c)(e.id)),9,os)):r(``,!0),D(a)===e.id?(A(),i(u,{key:1,class:`tep__item-check`},{default:G(()=>[y(D(ve))]),_:1})):D(o)[e.id]?r(``,!0):(A(),x(`span`,ss,M(D(Q)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:G(()=>[E(`button`,{type:`button`,class:`tep__btn`,title:p(),"aria-label":D(Q)(`@WORKBENCH:任务执行器`)},[y(He,{executor:D(a),class:`tep__btn-icon`},null,8,[`executor`]),E(`span`,rs,M(D(je)(D(a))),1),y(u,{class:`tep__btn-caret`},{default:G(()=>[y(D(ie))]),_:1})],8,ns)]),_:1},8,[`onCommand`])}}}),[[`__scopeId`,`data-v-beca42f2`]]);X(),z(),b(),fe();var ls={class:`acs__head`},us=[`title`,`aria-label`],ds={class:`acs__title`},fs=[`title`,`aria-label`],ps={class:`acs__convs`},ms={class:`acs__chat`},hs=[`data-theme`],gs={key:0,class:`acs__foot`},_s={key:0,class:`acs__notice`},vs={class:`acs__foot-label`},ys={class:`acs__foot-hint`},bs=$(s({__name:`AgentChatSurface`,props:{title:{},active:{type:Boolean},allowDispatch:{type:Boolean},dispatchUseDefaultPrompt:{type:Boolean},placeholder:{}},setup(e){let t=e,{active:n}=mr(),a=Me(),{theme:o}=Le(),s=q(()=>o.value===`dark`?`dark`:`light`),{sessions:c,sessionsLoading:l,currentSessionId:u,messages:d,isStreaming:p,pendingQuestion:m,answeringQuestion:g,isSessionGenerating:_,currentEngine:v,pendingEngine:b,isEngineLocked:S,pickEngine:ee,loadSessions:C,loadSession:w,deleteSession:T,renameSession:te,newSession:k,sendMessage:ne,retryTurn:re,answerQuestion:ie,stop:j,inputContextUsage:ae,queuedMessages:oe,queuePaused:se,removeQueuedMessage:ce,flushQueued:le}=it(),L=q(()=>S.value?v.value:b.value);function R(e){S.value||ee(e)}let ue=q(()=>t.allowDispatch!==!1&&L.value!==`gai`),z=q(()=>Ye(c.value,_)),de=Je(),B=$e(),fe=nt(),pe=q(()=>z.value.find(e=>e.id===u.value)?.title||``),me=Y(null),{width:U,narrow:he}=ot(me),W=Y(`chat`),ge=Y(null);function G(e=!0){ge.value?.scrollToBottom?.(e)}async function _e(e){let r=a.aiRequestBudget?.maxUserChars||0;r>0&&e.text.length>r&&V.warning(Q(`@WORKBENCH:消息较长({n} 字符),超出部分会被省略后进入上下文 —— 大材料建议存成文件,在消息里给出文件路径`,{n:e.text.length.toLocaleString()})),await ne(e.text,e.files,{allowDispatch:t.allowDispatch===!0,dispatchExecutor:n.value,dispatchUseDefaultPrompt:t.dispatchUseDefaultPrompt!==!1}),await O(),G()}function ve(e){w(e),W.value=`chat`}function ye(){k(),W.value=`chat`}return P(()=>d.value.length,()=>{O(()=>G(!1))}),P(()=>t.active,e=>{e&&(C().catch(()=>{}),O(()=>G(!1)))}),P(he,e=>{e||(W.value=`chat`)}),f(()=>{C().catch(()=>{}),O(()=>G(!1))}),(t,n)=>(A(),x(`div`,{ref_key:`rootRef`,ref:me,class:`acs`},[E(`div`,ls,[D(he)&&W.value===`list`?(A(),x(`button`,{key:0,type:`button`,class:`acs__icon-btn`,title:D(Q)(`@EDITOR:返回对话`),"aria-label":D(Q)(`@EDITOR:返回对话`),onClick:n[0]||=e=>W.value=`chat`},[...n[2]||=[E(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[E(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),E(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,us)):r(``,!0),E(`span`,ds,M(e.title||D(Q)(`@WORKBENCH:g ai 对话`)),1),n[4]||=E(`span`,{class:`acs__spacer`},null,-1),!D(he)||W.value===`chat`?(A(),i(dt,{key:1,class:`acs__engine`,engine:L.value,locked:D(S),onSelect:R},null,8,[`engine`,`locked`])):r(``,!0),!D(he)||W.value===`chat`?(A(),i(ft,{key:2,class:`acs__copy`,messages:D(d),title:pe.value,engine:D(et)(L.value)},null,8,[`messages`,`title`,`engine`])):r(``,!0),D(he)&&W.value===`chat`?(A(),x(`button`,{key:3,type:`button`,class:`acs__icon-btn`,title:D(Q)(`@EDITOR:会话列表`),"aria-label":D(Q)(`@EDITOR:会话列表`),onClick:n[1]||=e=>W.value=`list`},[...n[3]||=[H(`<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-b06c9f52><line x1="8" y1="6" x2="21" y2="6" data-v-b06c9f52></line><line x1="8" y1="12" x2="21" y2="12" data-v-b06c9f52></line><line x1="8" y1="18" x2="21" y2="18" data-v-b06c9f52></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-b06c9f52></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-b06c9f52></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-b06c9f52></line></svg>`,1)]],8,fs)):r(``,!0)]),E(`div`,{class:h([`acs__body`,{"is-wide":!D(he)}])},[I(E(`div`,ps,[y(D(Ee),{"show-search":!0,items:z.value,"active-id":D(u),loading:D(l),labels:D(de),onSelect:ve,onNew:ye,onRename:D(te),onDelete:D(T)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[N,!D(he)||W.value===`list`]]),I(E(`div`,ms,[y(D(we),{ref_key:`chatRef`,ref:ge,"show-input":!1,messages:D(d),"assistant-name":D(Qe),"assistant-avatar":D(rt),theme:s.value,question:D(m),"question-submitting":D(g),"question-labels":D(B),"plan-config":{labels:{title:D(Q)(`@AGENT:计划`),raw:D(Q)(`@AGENT:原始参数`)}},"message-rail-config":D(Xe),"message-meta-config":D(tt),onAnswer:D(ie),onRetry:D(re)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`message-rail-config`,`message-meta-config`,`onAnswer`,`onRetry`])],512),[[N,!D(he)||W.value===`chat`]]),D(U)>0?(A(),x(`div`,{key:0,class:`acs__composer acu-root`,"data-theme":s.value},[y(D(Te),{generating:D(p),"allow-queue":!0,queued:D(oe),"queue-paused":D(se),"queue-labels":D(fe),placeholder:e.placeholder||(D(p)?D(Q)(`@AGENT:生成中,发送后会排队,等本轮跑完自动接上…`):D(Q)(`@AGENT:输入消息,Enter 发送`)),"upload-config":{accept:D(Ze)},"context-usage":D(ae),onSend:_e,onStop:D(j),onUnqueue:D(ce),onFlushQueued:D(le)},null,8,[`generating`,`queued`,`queue-paused`,`queue-labels`,`placeholder`,`upload-config`,`context-usage`,`onStop`,`onUnqueue`,`onFlushQueued`])],8,hs)):r(``,!0)],2),e.allowDispatch&&W.value===`chat`?(A(),x(`div`,gs,[ue.value?(A(),x(`p`,_s,M(D(Q)(`@WORKBENCH:当前引擎「{name}」只能对话,不能派发任务 —— 切到内置 g ai 才能派活`,{name:D(et)(L.value)})),1)):(A(),x(F,{key:1},[E(`span`,vs,M(D(Q)(`@WORKBENCH:派发执行器`)),1),y(cs,{title:D(Q)(`@WORKBENCH:它派出去的任务由这个执行器跑(与执行按钮的临时切换共用)`)},null,8,[`title`]),E(`span`,ys,M(D(Q)(`@WORKBENCH:任务会落到看板,跑完有完成提示`)),1)],64))])):r(``,!0)],512))}}),[[`__scopeId`,`data-v-b06c9f52`]]);X(),z(),b(),fe();var xs=[`title`,`aria-label`],Ss={class:`oc__rail-text`},Cs={class:`oc__head`},ws={class:`oc__title`},Ts=[`disabled`,`title`],Es=[`title`,`aria-label`],Ds={class:`oc__state-label`},Os={class:`oc__state-value`},ks={class:`oc__state-meta`},As=[`aria-label`],js=[`aria-selected`],Ms=[`aria-selected`],Ns={class:`oc__report-head`},Ps={class:`oc__panel-title`},Fs=[`value`,`title`,`aria-label`],Is=[`value`],Ls=[`disabled`,`title`],Rs={class:`oc__report-list`},zs={key:0,class:`rp`},Bs={class:`rp__head`},Vs=[`title`],Hs={class:`rp__count`},Us={class:`rp__time`},Ws=[`title`],Gs=[`aria-valuenow`,`aria-label`],Ks={class:`rp__percent`},qs={class:`rp__percent-tag`},Js={key:1,class:`rp__body`},Ys=[`title`],Xs={key:3,class:`rp__facts`},Zs=[`title`],Qs={class:`rp__tasks`},$s={class:`rpt__title`},ec={class:`rpt__meta`},tc={key:0,class:`rpt__project`},nc={key:1,class:`rpt__agent`},rc=[`title`],ic={key:3,class:`rpt__silent`},ac=[`title`],oc=[`aria-valuenow`,`aria-label`],sc={class:`rpt__percent`},cc=[`title`],lc={class:`rpt__tag`},uc=[`title`],dc={class:`rpt__tag`},fc=[`title`],pc={class:`rpt__tag`},mc=[`title`],hc=[`aria-expanded`,`title`],gc={class:`oc__sect-title`},_c={class:`oc__sect-meta`},vc={class:`oc__sect-brief`},yc={class:`oc__history-list`},bc=[`onClick`],xc={class:`oc__history-time`},Sc={class:`oc__history-pct`},Cc={class:`oc__history-sum`},wc=[`aria-expanded`,`title`],Tc={class:`oc__sect-title`},Ec={class:`oc__sect-meta`},Dc={class:`oc__git-name`},Oc={key:0,class:`oc__sect-brief`},kc={class:`oc__git-list`},Ac={class:`oc__git-label`},jc={class:`oc__git-label`},Mc={class:`oc__git-value`},Nc={class:`oc__git-label`},Pc={class:`oc__git-value`},Fc=[`placeholder`],Ic={key:0},Lc={key:1},Rc={class:`oc__compose-foot`},zc=[`disabled`,`title`,`aria-label`],Bc=[`title`,`aria-label`],Vc=[`title`],Hc=[`title`],Uc=[`disabled`],Wc={class:`oc__hint`},Gc=`wb.ocMode.v2`,Kc=`/api/workbench/orchestrator/attachments`,qc=`wb.ocInputHeight.v1`,Jc=76,Yc=20,Xc=$(s({__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:a}){let o=t,s=a,c=Y(``),l=Y(!0),u=Y(!0),{active:v}=mr(),b=Y((()=>{try{return localStorage.getItem(Gc)===`chat`?`chat`:`command`}catch{return`command`}})());function ee(e){b.value=e;try{localStorage.setItem(Gc,e)}catch{}}let C=Y([]),w=q(()=>({kind:`draft`,list:C.value,replace:e=>{C.value=e}})),{isUploading:T,isImageAttachment:te,humanSize:ne,onAttachmentPaste:re,onAttachmentDrop:ae,removeAttachment:oe,pickAttachmentFile:ce}=lr(),le=q(()=>T(`draft`)),L=Y(!1);function R(e){e.stopPropagation(),re(e,w.value)}function z(e){L.value=!1,ae(e,w.value)}function B(){ce(w.value)}function V(e){oe(w.value,e)}function H(){C.value=[]}function fe(){c.value=``}n({clearAttachments:H,clearDraft:fe});let pe=q(()=>o.selectedProject?.key||``),me=q(()=>(o.defaultPrompt||``).trim()),U=q(()=>{let e=pe.value;return e?(o.projectPrompts?.[e]?.prompt||``).trim():``}),W=q(()=>Object.values(o.projectPrompts||{}).some(e=>(e?.prompt||``).trim().length>0)),ge=q(()=>!!me.value||W.value),ve=q(()=>{let e=!!me.value,t=pe.value?U.value?`project`:`none`:W.value?`target`:`none`;return Q(e&&t===`project`?`@WORKBENCH:全局 + 本项目`:e&&t===`target`?`@WORKBENCH:全局 + 落点项目`:e?`@WORKBENCH:全局`:t===`project`?`@WORKBENCH:本项目`:t===`target`?`@WORKBENCH:落点项目`:`@WORKBENCH:未设置`)}),ye=q(()=>c.value.trim().length),K=q(()=>o.maxInstructionChars||1e5),be=q(()=>ye.value>K.value),xe=q(()=>!be.value&&ye.value>=K.value*.9),Ce=q(()=>c.value.trim().length>0&&!o.dispatching&&!le.value&&!be.value);function X(){Ce.value&&s(`dispatch`,{text:c.value.trim(),autoRun:l.value,attachments:C.value,projectPath:o.selectedProject?o.selectedProject.path:``,useDefaultPrompt:u.value,executor:v.value})}function we(e){e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||(e.preventDefault(),X())}function Z(){try{let e=localStorage.getItem(qc);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=Jc?Math.round(t):null}catch{return null}}let Te=Y(null),Ee=Y(Z()),De=q(()=>{let e={};return Ee.value&&(e.height=`${Ee.value}px`),e}),$=null,Oe=!1,ke=!0;function Ae(e){let t=Te.value;if(!t)return;let n=t.getBoundingClientRect();Oe=n.right-e.clientX<=Yc&&n.bottom-e.clientY<=Yc}function je(){Oe=!1}function Me(e){let t=Math.round(e.offsetHeight);if(!(t<Jc||t===Ee.value)){Ee.value=t;try{localStorage.setItem(qc,String(t))}catch{}}}f(()=>{let e=Te.value;e&&(window.addEventListener(`mouseup`,je),!(typeof ResizeObserver>`u`)&&($=new ResizeObserver(()=>{if(ke){ke=!1;return}let t=parseFloat(getComputedStyle(e).maxHeight),n=Number.isFinite(t)&&e.offsetHeight>=t-1;(Oe||!n)&&Me(e)}),$.observe(e)))}),m(()=>{window.removeEventListener(`mouseup`,je),$?.disconnect(),$=null});let Ne=Y(null),Pe=q(()=>(o.running||[]).length),Fe=q(()=>{let e=o.running||[];return{job:new Set(e.map(e=>e.jobId).filter(Boolean)),task:new Set(e.map(e=>e.taskId).filter(Boolean))}});function Ie(e){if(!e)return!1;let t=Fe.value;return(e.tasks||[]).some(e=>e.jobId&&t.job.has(e.jobId)||!e.jobId&&!!e.taskId&&t.task.has(e.taskId))}let Le=q(()=>(o.reports||[]).find(Ie)||null),Re=q(()=>{let e=o.reports||[];if(!e.length)return null;if(Ne.value){let t=e.find(e=>e.id===Ne.value);if(t)return t}return Le.value}),ze=q(()=>!!Re.value&&!Ie(Re.value)),Be=q(()=>(o.reports||[]).length?Pe.value>0?Q(`@WORKBENCH:这批任务还没有进度报告`):Q(`@WORKBENCH:当前没有正在执行的任务`):Q(`@WORKBENCH:暂无进度报告`)),Ve=q(()=>(o.reports||[]).length?Q(`@WORKBENCH:最新那份报告讲的任务已经跑完了,要回看可以从历史报告里点开`):``);function He(e){Ne.value=e.id}let Ue=Y(null),We=Y(!1),Ge=Y(!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||O(Ke)}let Je=null;P(Ue,e=>{Je?.disconnect(),Je=null,e&&(Je=new ResizeObserver(()=>Ke()),Je.observe(e))}),m(()=>{Je?.disconnect(),Je=null}),P(()=>Re.value?.id,()=>{We.value=!1,Ge.value=!1,O(Ke)});function Ye(e){let t=Yr(e.percent);return t===null?``:t+`%`}let Xe=q(()=>Yr(Re.value?.percent)),Ze=q(()=>(Re.value?.tasks||[]).map(e=>({...e,pct:Yr(e.percent),silent:Xr(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?Q(Jr(e.errorCode)):Q(`@WORKBENCH:当时没有任务在执行`)}function $e(e){return e.errorCode?Q(Jr(e.errorCode)):e.tasks.length?Q(`@WORKBENCH:模型没有返回内容`):Q(`@WORKBENCH:生成这份报告时没有任务在执行`)}function et(e){let t=e.target,n=Number(t.value);Ur.includes(n)&&s(`set-report-interval`,n)}let tt=q(()=>{let e=o.selectedProject;if(!e)return[];let t=[];if(e.exists===!1)return t.push({label:Q(`@WORKBENCH:工作区`),value:Q(`@WORKBENCH:目录不存在`),tone:`danger`}),t;let n=e.git;return!n||n.isGitRepo===null?(t.push({label:Q(`@WORKBENCH:Git 状态`),value:Q(`@WORKBENCH:未知`),tone:``}),t):n.isGitRepo?(t.push({label:Q(`@WORKBENCH:分支`),value:n.detached?Q(`@WORKBENCH:游离 HEAD`):n.branch||Q(`@WORKBENCH:未知`),tone:``}),t.push({label:Q(`@WORKBENCH:工作区`),value:n.changed>0?Q(`@WORKBENCH:未提交 {n} 项`,{n:n.changed}):Q(`@WORKBENCH:干净`),tone:n.changed>0?`warn`:``}),n.hasUpstream&&(n.ahead>0||n.behind>0)&&t.push({label:Q(`@WORKBENCH:与上游`),value:Q(`@WORKBENCH:领先 {ahead} / 落后 {behind}`,{ahead:n.ahead,behind:n.behind}),tone:n.behind>0?`warn`:``}),t):(t.push({label:Q(`@WORKBENCH:Git 状态`),value:Q(`@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=Y(rt(nt.history)),at=Y(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=q(()=>tt.value.slice(0,2).map(e=>e.value).join(` · `));return(n,a)=>{let o=d;return A(),x(`aside`,{class:h([`oc`,{"is-collapsed":t.collapsed,"is-report-empty":b.value===`command`&&!t.collapsed&&!Re.value}])},[t.collapsed?(A(),x(`button`,{key:0,type:`button`,class:`oc__rail`,title:D(Q)(`@WORKBENCH:展开主 Agent 控制台`),"aria-label":D(Q)(`@WORKBENCH:展开主 Agent 控制台`),"aria-expanded":!1,onClick:a[0]||=e=>s(`toggle-collapse`)},[y(o,{class:`oc__rail-icon`},{default:G(()=>[y(D(Se))]),_:1}),E(`span`,{class:h([`oc__rail-live`,{"is-off":!t.active}]),"aria-hidden":`true`},null,2),E(`span`,Ss,M(D(Q)(`@WORKBENCH:主 Agent 控制台`)),1)],8,xs)):r(``,!0),I(E(`header`,Cs,[E(`span`,{class:h([`oc__live`,{"is-off":!t.active}]),"aria-hidden":`true`},null,2),E(`h3`,ws,M(D(Q)(`@WORKBENCH:主 Agent 控制台`)),1),E(`button`,{type:`button`,class:h([`oc__toggle`,{"is-off":!t.active}]),disabled:t.togglingSchedule,title:t.active?D(Q)(`@WORKBENCH:暂停后派发只建任务,不会自动执行`):D(Q)(`@WORKBENCH:恢复后派发会自动执行`),onClick:a[1]||=e=>s(`toggle-schedule`,!t.active)},M(t.active?D(Q)(`@WORKBENCH:暂停调度`):D(Q)(`@WORKBENCH:恢复调度`)),11,Ts),E(`button`,{type:`button`,class:`oc__collapse`,title:D(Q)(`@WORKBENCH:收起主 Agent 控制台`),"aria-label":D(Q)(`@WORKBENCH:收起主 Agent 控制台`),"aria-expanded":!0,onClick:a[2]||=e=>s(`toggle-collapse`)},[y(o,null,{default:G(()=>[y(D(se))]),_:1})],8,Es)],512),[[N,!t.collapsed]]),I(E(`div`,{class:h([`oc__state`,{"is-paused":!t.active}])},[E(`span`,Ds,M(D(Q)(`@WORKBENCH:调度状态`)),1),E(`span`,Os,M(t.active?D(Q)(`@WORKBENCH:调度中`):D(Q)(`@WORKBENCH:已暂停`)),1),E(`span`,ks,M(D(Q)(`@WORKBENCH:{n} 个执行中`,{n:Pe.value})),1)],2),[[N,!t.collapsed]]),I(E(`div`,{class:`oc__mode`,role:`tablist`,"aria-label":D(Q)(`@WORKBENCH:切换主 Agent 控制台的工作方式`)},[E(`button`,{type:`button`,role:`tab`,class:h([`oc__mode-btn`,{"is-active":b.value===`chat`}]),"aria-selected":b.value===`chat`,onClick:a[3]||=e=>ee(`chat`)},M(D(Q)(`@WORKBENCH:对话`)),11,js),E(`button`,{type:`button`,role:`tab`,class:h([`oc__mode-btn`,{"is-active":b.value===`command`}]),"aria-selected":b.value===`command`,onClick:a[4]||=e=>ee(`command`)},M(D(Q)(`@WORKBENCH:指令`)),11,Ms)],8,As),[[N,!t.collapsed]]),I(y(bs,{class:`oc__chat`,active:!t.collapsed&&b.value===`chat`,"allow-dispatch":``,"dispatch-use-default-prompt":u.value,title:D(Q)(`@WORKBENCH:g ai 对话`)},null,8,[`active`,`dispatch-use-default-prompt`,`title`]),[[N,!t.collapsed&&b.value===`chat`]]),I(E(`div`,{class:h([`oc__report`,{"is-empty":!Re.value}])},[E(`div`,Ns,[E(`p`,Ps,M(D(Q)(`@WORKBENCH:进度报告`)),1),E(`select`,{class:`oc__interval`,value:String(t.reportIntervalMs??0),title:D(Q)(`@WORKBENCH:自动报告的间隔(关掉后仍可随时点「立即报告」)`),"aria-label":D(Q)(`@WORKBENCH:自动报告间隔`),onChange:et},[(A(!0),x(F,null,S(D(Ur),e=>(A(),x(`option`,{key:e,value:String(e)},M(D(Q)(D(Kr)(e),D(qr)(e))),9,Is))),128))],40,Fs),E(`button`,{type:`button`,class:`oc__report-run`,disabled:t.generatingReport,title:D(Q)(`@WORKBENCH:让主 Agent 现在汇报一次正在执行的任务进度`),onClick:a[5]||=e=>s(`generate-report`)},[y(o,{class:h([`oc__report-run-icon`,{"is-spin":t.generatingReport}])},{default:G(()=>[y(D(k))]),_:1},8,[`class`]),E(`span`,null,M(t.generatingReport?D(Q)(`@WORKBENCH:生成中…`):D(Q)(`@WORKBENCH:立即报告`)),1)],8,Ls)]),E(`ul`,Rs,[Re.value?(A(),x(`li`,zs,[E(`div`,Bs,[E(`span`,{class:h([`rp__trigger`,{"is-auto":Re.value.trigger===`auto`}])},M(Re.value.trigger===`auto`?D(Q)(`@WORKBENCH:自动`):D(Q)(`@WORKBENCH:手动`)),3),ze.value?(A(),x(`span`,{key:0,class:`rp__stale`,title:D(Q)(`@WORKBENCH:这份报告讲的任务已经跑完了,内容只反映生成那一刻的情况`)},M(D(Q)(`@WORKBENCH:已结束`)),9,Vs)):r(``,!0),E(`span`,Hs,M(D(Q)(`@WORKBENCH:{n} 个任务进行中`,{n:Re.value.tasks.length})),1),E(`span`,Us,M(D(Gn)(Re.value.at)),1)]),Xe.value===null?r(``,!0):(A(),x(`div`,{key:0,class:`rp__progress`,title:D(Q)(D(Qr))},[E(`span`,{class:`rp__bar`,role:`progressbar`,"aria-valuenow":Xe.value,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":D(Q)(D(Zr))},[E(`i`,{class:`rp__bar-fill`,style:p({width:Xe.value+`%`})},null,4)],8,Gs),E(`span`,Ks,[E(`span`,qs,M(D(Q)(D(Zr))),1),_(M(Xe.value)+`% `,1)])],8,Ws)),Re.value.text?(A(),x(`div`,Js,[E(`p`,{ref_key:`textEl`,ref:Ue,class:h([`rp__text`,{"is-clamped":Ge.value&&!We.value,"is-expanded":We.value}])},M(Re.value.text),3),Ge.value||We.value?(A(),x(`button`,{key:0,type:`button`,class:`rp__more`,onClick:qe},M(We.value?D(Q)(`@WORKBENCH:收起`):D(Q)(`@WORKBENCH:展开全文`)),1)):r(``,!0)])):(A(),x(`p`,{key:2,class:`rp__notice`,title:Re.value.errorDetail},M($e(Re.value)),9,Ys)),Ze.value.length?(A(),x(`div`,Xs,[E(`p`,{class:`rp__facts-cap`,title:D(Q)(`@WORKBENCH:上面是主 Agent 的判断,下面这些是从正在跑的任务里抄出来的事实`)},M(D(Q)(`@WORKBENCH:任务事实`)),9,Zs),E(`ul`,Qs,[(A(!0),x(F,null,S(Ze.value,(e,t)=>(A(),x(`li`,{key:e.taskId||t,class:h([`rpt`,{"is-silent":e.silent!==null}])},[E(`p`,$s,M(e.taskTitle||D(Q)(`@WORKBENCH:未命名任务`)),1),E(`p`,ec,[e.projectName?(A(),x(`span`,tc,M(e.projectName),1)):r(``,!0),E(`span`,null,M(D(Q)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:D(Un)(e.elapsedMs)})),1),e.agent?(A(),x(`span`,nc,M(e.agent),1)):r(``,!0),e.toolCallCount?(A(),x(`span`,{key:2,title:e.toolMix||``},M(D(Q)(`@WORKBENCH:工具 {n} 次`,{n:e.toolCallCount})),9,rc)):r(``,!0),e.silent===null?r(``,!0):(A(),x(`span`,ic,M(D(Q)(`@WORKBENCH:静默 {elapsed}`,{elapsed:D(Un)(e.silent)})),1))]),e.pct===null?r(``,!0):(A(),x(`p`,{key:0,class:`rpt__progress`,title:D(Q)(D(Qr))},[E(`span`,{class:`rpt__bar`,role:`progressbar`,"aria-valuenow":e.pct,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":e.taskTitle||D(Q)(`@WORKBENCH:未命名任务`)},[E(`i`,{class:`rpt__bar-fill`,style:p({width:e.pct+`%`})},null,4)],8,oc),E(`span`,sc,M(e.pct)+`%`,1)],8,ac)),e.lastTool?(A(),x(`p`,{key:1,class:`rpt__line is-tool`,title:e.lastTool},[E(`span`,lc,M(D(Q)(`@WORKBENCH:工具`)),1),_(M(e.lastTool),1)],8,cc)):r(``,!0),e.lastThought?(A(),x(`p`,{key:2,class:`rpt__line is-thought`,title:e.lastThought},[E(`span`,dc,M(D(Q)(`@WORKBENCH:最近思考`)),1),_(M(e.lastThought),1)],8,uc)):r(``,!0),e.lastLine?(A(),x(`p`,{key:3,class:`rpt__line`,title:e.lastLine},[E(`span`,pc,M(D(Q)(`@WORKBENCH:最新回复`)),1),_(M(e.lastLine),1)],8,fc)):r(``,!0)],2))),128))])])):r(``,!0)])):(A(),x(`li`,{key:1,class:`oc-empty`,title:Ve.value},M(Be.value),9,mc))]),(t.reports||[]).length>1?(A(),x(`div`,{key:0,class:h([`oc__history`,{"is-collapsed":!it.value}])},[E(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":it.value,title:it.value?D(Q)(`@WORKBENCH:收起`):D(Q)(`@WORKBENCH:展开`),onClick:a[6]||=e=>ot(`history`)},[y(o,{class:`oc__sect-caret`},{default:G(()=>[(A(),i(_e(it.value?D(ie):D(j))))]),_:1}),E(`span`,gc,M(D(Q)(`@WORKBENCH:历史报告`)),1),E(`span`,_c,[E(`span`,vc,M(D(Q)(`@WORKBENCH:共 {n} 份`,{n:(t.reports||[]).length})),1)])],8,hc),I(E(`ul`,yc,[(A(!0),x(F,null,S(t.reports,e=>(A(),x(`li`,{key:e.id},[E(`button`,{type:`button`,class:h([`oc__history-item`,{"is-active":e.id===Re.value?.id}]),onClick:t=>He(e)},[E(`span`,xc,M(D(Gn)(e.at)),1),E(`span`,Sc,M(Ye(e)),1),E(`span`,Cc,M(Qe(e)),1)],10,bc)]))),128))],512),[[N,it.value]])],2)):r(``,!0)],2),[[N,!t.collapsed&&b.value===`command`]]),I(E(`div`,{class:h([`oc__git`,{"is-collapsed":!at.value}])},[E(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":at.value,title:at.value?D(Q)(`@WORKBENCH:收起`):D(Q)(`@WORKBENCH:展开`),onClick:a[7]||=e=>ot(`git`)},[y(o,{class:`oc__sect-caret`},{default:G(()=>[(A(),i(_e(at.value?D(ie):D(j))))]),_:1}),E(`span`,Tc,M(D(Q)(`@WORKBENCH:项目概览`)),1),E(`span`,Ec,[E(`span`,Dc,M(t.selectedProject?t.selectedProject.name:D(Q)(`@WORKBENCH:全部项目`)),1),!at.value&&st.value?(A(),x(`span`,Oc,M(st.value),1)):r(``,!0)])],8,wc),I(E(`dl`,kc,[(A(!0),x(F,null,S(tt.value,e=>(A(),x(F,{key:e.label},[E(`dt`,Ac,M(e.label),1),E(`dd`,{class:h([`oc__git-value`,{"is-warn":e.tone===`warn`,"is-danger":e.tone===`danger`}])},M(e.value),3)],64))),128)),E(`dt`,jc,M(D(Q)(`@WORKBENCH:今日完成`)),1),E(`dd`,Mc,M(t.todayDone),1),E(`dt`,Nc,M(D(Q)(`@WORKBENCH:最后活跃`)),1),E(`dd`,Pc,M(t.selectedProject&&D(Hn)(t.selectedProject.stats.lastActiveAt)||`—`),1)],512),[[N,at.value]])],2),[[N,!t.collapsed&&b.value===`command`]]),I(E(`div`,{class:`oc__compose`,onPaste:R,onDrop:J(z,[`prevent`]),onDragover:a[15]||=J(e=>L.value=!0,[`prevent`]),onDragleave:a[16]||=e=>L.value=!1},[I(E(`textarea`,{ref_key:`inputRef`,ref:Te,class:h([`oc__input`,{"is-over":be.value}]),"onUpdate:modelValue":a[8]||=e=>c.value=e,style:p(De.value),rows:`4`,placeholder:D(Q)(`@WORKBENCH:给主 Agent 下一条指令,例如:把登录模块的错误处理重构一遍`),onKeydown:we,onPaste:R,onMousedown:Ae},null,46,Fc),[[de,c.value]]),C.value.length>0||le.value?(A(),i(Tt,{key:0,attachments:C.value,"is-image":D(te),"human-size":D(ne),"is-uploading":le.value,"is-paste-hover":L.value,"on-pick":B,"on-remove":V,"raw-base":Kc,onPaste:R,onDrop:z,onDragover:a[9]||=J(e=>L.value=!0,[`prevent`]),onDragenter:a[10]||=J(e=>L.value=!0,[`prevent`]),onDragleave:a[11]||=e=>L.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`])):r(``,!0),ye.value>0?(A(),x(`p`,{key:1,class:h([`oc__count`,{"is-warn":xe.value,"is-over":be.value}])},[be.value?(A(),x(`span`,Ic,M(D(Q)(`@WORKBENCH:超出上限 {max} 字,请精简后再派发(超出的部分不会被发出)`,{max:K.value})),1)):(A(),x(`span`,Lc,M(ye.value)+` / `+M(K.value),1))],2)):r(``,!0),E(`div`,Rc,[E(`button`,{type:`button`,class:`oc__attach`,disabled:le.value,title:D(Q)(`@WORKBENCH:添加附件(也可直接粘贴或拖入文件)`),"aria-label":D(Q)(`@WORKBENCH:添加附件`),onClick:B},[y(o,null,{default:G(()=>[y(D(g))]),_:1})],8,zc),E(`button`,{type:`button`,class:h([`oc__attach`,{"is-on":ge.value}]),title:D(Q)(`@WORKBENCH:设置派发时自动附加的预设提示词(全局 / 各项目)`),"aria-label":D(Q)(`@WORKBENCH:预设提示词设置`),onClick:a[12]||=e=>s(`open-prompt-settings`)},[y(o,null,{default:G(()=>[y(D(he))]),_:1})],10,Bc),E(`label`,{class:`oc__autorn`,title:D(Q)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[I(E(`input`,{type:`checkbox`,"onUpdate:modelValue":a[13]||=e=>l.value=e},null,512),[[ue,l.value]]),E(`span`,null,M(D(Q)(`@WORKBENCH:立即执行`)),1)],8,Vc),ge.value?(A(),x(`label`,{key:0,class:`oc__autorn`,title:D(Q)(`@WORKBENCH:取消勾选则本次派发的任务不带预设提示词(设置本身不受影响)`)},[I(E(`input`,{type:`checkbox`,"onUpdate:modelValue":a[14]||=e=>u.value=e},null,512),[[ue,u.value]]),E(`span`,null,M(D(Q)(`@WORKBENCH:预设提示词({state})`,{state:ve.value})),1)],8,Hc)):r(``,!0),y(cs,{title:D(Q)(`@WORKBENCH:本次派发使用的执行器(与执行按钮的临时切换共用)`)},null,8,[`title`]),E(`button`,{type:`button`,class:`oc__send`,disabled:!Ce.value,onClick:X},[y(o,{class:`oc__send-icon`},{default:G(()=>[y(D(e))]),_:1}),E(`span`,null,M(t.dispatching?D(Q)(`@WORKBENCH:派发中…`):D(Q)(`@WORKBENCH:派发`)),1)],8,Uc)]),E(`p`,Wc,[t.selectedProject?(A(),x(F,{key:0},[_(M(D(Q)(`@WORKBENCH:指令会在「{name}」下新建一个任务;Enter 派发,Shift+Enter 换行`,{name:t.selectedProject.name})),1)],64)):(A(),x(F,{key:1},[_(M(D(Q)(`@WORKBENCH:指令落到哪个项目由主 Agent 判断;Enter 派发,Shift+Enter 换行`)),1)],64))])],544),[[N,!t.collapsed&&b.value===`command`]])],2)}}}),[[`__scopeId`,`data-v-da57685d`]]);X(),z(),b(),fe();var Zc={class:`pd`},Qc={class:`pd__intro`},$c={class:`pd__field`},el={class:`pd__head`},tl={class:`pd__label`,for:`pd-global`},nl={class:`pd__count`},rl=[`placeholder`],il={class:`pd__field`},al={class:`pd__head`},ol={class:`pd__label`,for:`pd-project`},sl={key:0,class:`pd__count`},cl=[`disabled`,`placeholder`],ll={class:`pd__hint`},ul={class:`pd__foot`},dl=[`disabled`],fl=4e3,pl=$(s({__name:`WorkbenchDefaultPromptDialog`,props:{modelValue:{type:Boolean},defaultPrompt:{},projectPath:{},projectName:{},projectPrompt:{},saving:{type:Boolean}},emits:[`update:modelValue`,`save`],setup(e,{emit:t}){let n=e,a=t,o=Y(``),s=Y(``);P(()=>n.modelValue,e=>{e&&(o.value=n.defaultPrompt||``,s.value=n.projectPrompt||``)});let c=q(()=>!!n.projectPath),l=q(()=>o.value.trim()!==(n.defaultPrompt||``).trim()||c.value&&s.value.trim()!==(n.projectPrompt||``).trim());function u(){n.saving||a(`save`,{globalPrompt:o.value,projectPrompt:s.value})}function d(){a(`update:modelValue`,!1)}return(t,n)=>(A(),i(Ne,{"model-value":e.modelValue,title:D(Q)(`@WORKBENCH:预设提示词`),width:`min(640px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[2]||=e=>a(`update:modelValue`,e)},{footer:G(()=>[E(`div`,ul,[E(`button`,{type:`button`,class:`pd__btn`,onClick:d},M(D(Q)(`@WORKBENCH:取消`)),1),n[3]||=E(`span`,{class:`pd__foot-spacer`},null,-1),E(`button`,{type:`button`,class:`pd__btn pd__btn--primary`,disabled:e.saving||!l.value,onClick:u},M(e.saving?D(Q)(`@WORKBENCH:保存中…`):D(Q)(`@WORKBENCH:保存`)),9,dl)])]),default:G(()=>[E(`div`,Zc,[E(`p`,Qc,M(D(Q)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),E(`div`,$c,[E(`div`,el,[E(`label`,tl,M(D(Q)(`@WORKBENCH:全局提示词`)),1),E(`span`,nl,M(o.value.length)+` / `+M(fl),1)]),I(E(`textarea`,{id:`pd-global`,"onUpdate:modelValue":n[0]||=e=>o.value=e,class:`pd__area`,rows:`5`,maxlength:fl,placeholder:D(Q)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,rl),[[de,o.value]])]),E(`div`,il,[E(`div`,al,[E(`label`,ol,M(c.value?D(Q)(`@WORKBENCH:「{name}」的项目提示词`,{name:e.projectName}):D(Q)(`@WORKBENCH:项目提示词`)),1),c.value?(A(),x(`span`,sl,M(s.value.length)+` / `+M(fl),1)):r(``,!0)]),I(E(`textarea`,{id:`pd-project`,"onUpdate:modelValue":n[1]||=e=>s.value=e,class:`pd__area`,rows:`5`,maxlength:fl,disabled:!c.value,placeholder:c.value?D(Q)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):D(Q)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,cl),[[de,s.value]]),E(`p`,ll,M(c.value?D(Q)(`@WORKBENCH:项目提示词追加在全局提示词之后(不覆盖全局),派发到「{name}」时一起带上`,{name:e.projectName}):D(Q)(`@WORKBENCH:选中的是「全部项目」,落点由主 Agent 判断 —— 想给某个项目单设提示词,先选中它`)),1)])])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-5d14f0f1`]]);X(),z(),b(),fe();var ml={class:`nc__field`},hl={class:`nc__label`,for:`nc-project`},gl={value:``},_l=[`value`],vl=[`title`],yl={class:`nc__field`},bl={class:`nc__label`,for:`nc-title`},xl=[`placeholder`],Sl={class:`nc__field`},Cl={class:`nc__label`,for:`nc-desc`},wl=[`placeholder`],Tl={class:`nc__field`},El={class:`nc__hint`},Dl={key:0,class:`nc__error`},Ol={class:`nc__foot`},kl=[`disabled`],Al=[`disabled`],jl=`/api/workbench/orchestrator/attachments`,Ml=$(s({__name:`WorkbenchTaskCreateDialog`,props:{modelValue:{type:Boolean},projects:{},defaultProjectPath:{}},emits:[`update:modelValue`,`created`],setup(e,{emit:t}){let n=e,a=t,o=Y(``),s=Y(``),c=Y(``),l=Y(!1),u=Y(``),d=Y([]),f=Y(!1),p=!1,m=q(()=>({kind:`draft`,list:d.value,replace:e=>{d.value=e}})),{isUploading:h,isImageAttachment:g,humanSize:_,onAttachmentPaste:v,onAttachmentDrop:b,removeAttachment:ee,pickAttachmentFile:C}=lr(),w=q(()=>h(`draft`));function T(e){e.stopPropagation(),v(e,m.value)}function te(e){f.value=!1,b(e,m.value)}function O(){C(m.value)}function k(e){ee(m.value,e)}function ne(){let e=d.value;if(d.value=[],!(p||e.length===0))for(let t of e)fetch(`${jl}/${encodeURIComponent(t.id)}`,{method:`DELETE`}).catch(()=>{})}function re(e){let t=Be(e);if(!t)return``;let r=n.projects.find(e=>Be(e.path)===t);return r?r.path:``}P(()=>n.modelValue,e=>{if(!e){ne();return}o.value=``,s.value=``,d.value=[],f.value=!1,p=!1,c.value=re(n.defaultProjectPath),u.value=``,l.value=!1});let ie=q(()=>n.projects),j=q(()=>!l.value&&!w.value&&(o.value.trim().length>0||s.value.trim().length>0)),ae=q(()=>{let e=Be(c.value);if(!e)return``;let t=ie.value.find(t=>Be(t.path)===e);return t?t.name:``});async function N(e){if(j.value){l.value=!0,u.value=``;try{let t={title:o.value.trim(),desc:s.value};c.value&&(t.projectPath=c.value),d.value.length>0&&(t.stagedAttachments=d.value.map(e=>({id:e.id,ext:e.ext,originalName:e.originalName})));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){u.value=n?.error||Q(`@WORKBENCH:保存失败`);return}p=!0,a(`update:modelValue`,!1),a(`created`,{task:n.task,openEditor:e})}finally{l.value=!1}}}return(t,n)=>(A(),i(Ne,{"model-value":e.modelValue,title:D(Q)(`@WORKBENCH:新建开发任务`),width:`min(600px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[15]||=e=>a(`update:modelValue`,e)},{footer:G(()=>[E(`div`,Ol,[E(`button`,{type:`button`,class:`nc__btn`,onClick:n[12]||=e=>a(`update:modelValue`,!1)},M(D(Q)(`@WORKBENCH:取消`)),1),n[16]||=E(`span`,{class:`nc__foot-spacer`},null,-1),E(`button`,{type:`button`,class:`nc__btn`,disabled:!j.value,onClick:n[13]||=e=>N(!0)},M(D(Q)(`@WORKBENCH:创建并打开编辑器`)),9,kl),E(`button`,{type:`button`,class:`nc__btn nc__btn--primary`,disabled:!j.value,onClick:n[14]||=e=>N(!1)},M(l.value?D(Q)(`@WORKBENCH:创建中…`):D(Q)(`@WORKBENCH:创建`)),9,Al)])]),default:G(()=>[E(`div`,{class:`nc`,onPaste:T,onDrop:J(te,[`prevent`]),onDragover:n[9]||=J(e=>f.value=!0,[`prevent`]),onDragenter:n[10]||=J(e=>f.value=!0,[`prevent`]),onDragleave:n[11]||=e=>f.value=!1},[E(`div`,ml,[E(`label`,hl,M(D(Q)(`@WORKBENCH:项目`)),1),I(E(`select`,{id:`nc-project`,"onUpdate:modelValue":n[0]||=e=>c.value=e,class:`nc__select`},[E(`option`,gl,M(D(Q)(`@WORKBENCH:跟随当前项目`)),1),(A(!0),x(F,null,S(ie.value,e=>(A(),x(`option`,{key:e.key,value:e.path},M(e.name)+M(e.exists===!1?` · ${D(Q)(`@WORKBENCH:目录不存在`)}`:``),9,_l))),128))],512),[[B,c.value]]),E(`p`,{class:`nc__hint`,title:c.value},M(ae.value?D(Q)(`@WORKBENCH:任务会在「{name}」目录下执行`,{name:ae.value}):D(Q)(`@WORKBENCH:任务会跟随应用当前的工作目录`)),9,vl)]),E(`div`,yl,[E(`label`,bl,M(D(Q)(`@WORKBENCH:标题`)),1),I(E(`input`,{id:`nc-title`,"onUpdate:modelValue":n[1]||=e=>o.value=e,class:`nc__input`,type:`text`,maxlength:`200`,placeholder:D(Q)(`@WORKBENCH:一句话说清要做什么`),onKeydown:n[2]||=K(J(e=>N(!1),[`prevent`]),[`enter`])},null,40,xl),[[de,o.value]])]),E(`div`,Sl,[E(`label`,Cl,M(D(Q)(`@WORKBENCH:描述`)),1),I(E(`textarea`,{id:`nc-desc`,"onUpdate:modelValue":n[3]||=e=>s.value=e,class:`nc__input nc__input--area`,rows:`6`,placeholder:D(Q)(`@WORKBENCH:把背景、验收标准、相关文件路径写进来,执行时用它当上下文`),onKeydown:[n[4]||=K(J(e=>N(!1),[`ctrl`,`prevent`]),[`enter`]),n[5]||=K(J(e=>N(!1),[`meta`,`prevent`]),[`enter`])]},null,40,wl),[[de,s.value]])]),E(`div`,Tl,[y(Tt,{attachments:d.value,"is-image":D(g),"human-size":D(_),"is-uploading":w.value,"is-paste-hover":f.value,"on-pick":O,"on-remove":k,"raw-base":jl,onDragover:n[6]||=J(e=>f.value=!0,[`prevent`]),onDragenter:n[7]||=J(e=>f.value=!0,[`prevent`]),onDragleave:n[8]||=e=>f.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`]),E(`p`,El,M(D(Q)(`@WORKBENCH:粘贴图片以快速添加`)),1)]),u.value?(A(),x(`p`,Dl,M(u.value),1)):r(``,!0)],32)]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-40a1a81b`]]);X(),z(),b(),fe();var Nl={class:`board__top`},Pl=[`title`,`aria-label`,`aria-expanded`],Fl={class:`board__brand`},Il={class:`board__brand-text`},Ll={class:`board__title`},Rl={class:`board__subtitle`},zl={class:`board__stats`},Bl={class:`board__stat`},Vl={class:`board__stat-label`},Hl={class:`board__stat-value`},Ul=[`title`],Wl={class:`board__stat-label`},Gl={class:`board__stat-value`},Kl={class:`board__stat`},ql={class:`board__stat-label`},Jl={class:`board__stat`},Yl={class:`board__stat-label`},Xl={class:`board__stat-value`},Zl=[`title`],Ql={class:`board__main`},$l={class:`board__main-head`},eu={class:`board__main-title`},tu={class:`board__project-name`},nu=[`title`],ru={key:1,class:`board__project-path`},iu={key:0,class:`board__project-meta`},au=[`title`],ou=`wb.boardProject.v1`,su=5e3,cu=3e4,lu=`wb.boardLayout.v1`,uu=180,du=420,fu=260,pu=900,mu=.26,hu=.46,gu=$(s({__name:`WorkbenchBoard`,props:{openedTaskId:{}},emits:[`open-task`,`board-tasks`],setup(e,{emit:t}){let n=e,a=t,{projects:o,boardTasks:s,currentProjectPath:c,loading:l,loadProjects:u,removeProject:g}=Hr();P(s,e=>a(`board-tasks`,e),{immediate:!0});let{active:_,activity:v,running:b,dispatching:S,togglingSchedule:ee,maxInstructionChars:C,defaultPrompt:w,projectPrompts:T,reports:te,generatingReport:O,reportIntervalMs:k,loadOrchestrator:ne,setSchedulingActive:re,dispatch:ie,saveDefaultPrompt:j,saveProjectPrompt:ae,loadReports:N,generateReport:ce,setReportInterval:le}=ei(),{active:F}=mr(),I=(()=>{try{return localStorage.getItem(ou)}catch{return null}})(),L=Y(I||``);P(L,e=>{try{localStorage.setItem(ou,e)}catch{}});let R=q(()=>L.value&&o.value.find(e=>e.key===L.value)||null);P(o,e=>{L.value&&(e.some(e=>e.key===L.value)||(L.value=``))});let ue=!1;function z(){if(ue||(ue=!0,I!==null))return;let e=c.value?Be(c.value):``;e&&o.value.some(t=>t.key===e)&&(L.value=e)}let de=q(()=>{let e=new Map(o.value.map(e=>[e.key,e.name])),t={};for(let n of s.value)n.projectPath&&(t[n.projectPath]=e.get(Be(n.projectPath))||``);return t}),B=q(()=>{if(!L.value)return s.value;let e=L.value;return s.value.filter(t=>Be(t.projectPath)===e)}),H=q(()=>{let e=new Date;e.setHours(0,0,0,0);let t=e.getTime();return{projects:o.value.length,tasks:s.value.length,running:b.value.length,todayDone:v.value.filter(e=>e.kind===`done`&&e.at&&new Date(e.at).getTime()>=t).length}});function fe(e){a(`open-task`,{taskId:e.id,projectPath:e.projectPath})}let pe=null,me=!1,U=null;async function he(e=!0){if(!me){me=!0;try{await Promise.all([u(e),ne(e)])}finally{me=!1}}}function ge(){document.hidden||(he(!0),N(!0))}f(async()=>{window.addEventListener(`resize`,xe),await he(!1),N(!0),z(),pe=setInterval(()=>{document.hidden||he(!0)},su),U=setInterval(()=>{document.hidden||N(!0)},cu),document.addEventListener(`visibilitychange`,ge)}),m(()=>{window.removeEventListener(`resize`,xe),pe&&=(clearInterval(pe),null),U&&=(clearInterval(U),null),document.removeEventListener(`visibilitychange`,ge)});let _e=oe({left:null,right:null,leftCollapsed:!1,rightCollapsed:!1});function ve(){try{let e=localStorage.getItem(lu);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(_e.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(_e.right=t.right),_e.leftCollapsed=t.leftCollapsed===!0,_e.rightCollapsed=t.rightCollapsed===!0}catch{}}ve();function ye(){try{localStorage.setItem(lu,JSON.stringify(_e))}catch{}}let be=Y(typeof window>`u`?1920:window.innerWidth);function xe(){be.value=window.innerWidth}let J=q(()=>be.value<=1024),Ce=q(()=>be.value<=860);function X(e,t){let n=e===`left`?uu:fu,r=Math.min(e===`left`?du:pu,be.value*(e===`left`?mu:hu));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}let we=q(()=>{let e={};return _e.left!=null&&(e[`--wb-left-w`]=X(`left`,_e.left)+`px`),_e.right!=null&&!Ce.value&&(e[`--wb-right-w`]=X(`right`,_e.right)+`px`),e}),Z=Y(null),Te=Y(null);function Ee(e){return Z.value?.querySelector(e===`left`?`.board__left`:`.oc`)}function De(e){window.removeEventListener(`mousemove`,e),document.body.style.userSelect=``,document.body.style.cursor=``,Te.value=null,ye()}function $(e,t){if(e===`left`?J.value:Ce.value)return;let n=Ee(e);if(!n)return;t.preventDefault();let r=t.clientX,i=n.getBoundingClientRect().width;Te.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);_e[e]=X(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>De(a),{once:!0})}function Oe(e){_e[e]=null,ye()}let ke=Y(!1),Ae=q(()=>J.value?!ke.value:_e.leftCollapsed);function je(){if(J.value){ke.value=!ke.value;return}_e.leftCollapsed=!_e.leftCollapsed,ye()}function Me(){J.value&&(ke.value=!1)}let Ne=q(()=>_e.rightCollapsed&&!Ce.value);function Pe(){_e.rightCollapsed=!_e.rightCollapsed,ye()}function Fe(e){L.value=e?e.key:``,ke.value=!1}let Ie=Y(!1);function Le(){Ie.value=!0}async function Re(e){if(await he(!0),e.openEditor){a(`open-task`,{taskId:e.task.id,projectPath:e.task.projectPath||``});return}V.success(Q(`@WORKBENCH:已创建任务`))}async function ze(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:F.value})}).then(e=>e.json()).catch(()=>null);if(!n?.success){V.error(n?.error||Q(`@WORKBENCH:执行失败`));return}V.success(Q(`@WORKBENCH:已开始执行`)),await he(!0)}let Ve=new Set;async function He(e){if(Ve.has(e.id))return;let t=e.live?.jobId;if(!t){V.error(Q(`@WORKBENCH:停止失败`));return}try{await W.confirm(Q(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),Q(`@WORKBENCH:停止执行`),{confirmButtonText:Q(`@WORKBENCH:停止`),cancelButtonText:Q(`@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){V.error(e?.error||Q(`@WORKBENCH:停止失败`));return}V.success(Q(`@WORKBENCH:已发送停止信号`)),await he(!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 W.confirm(Q(`@WORKBENCH:这条任务还在执行,标记完成会同时把它停掉。已输出的内容会保留。`),Q(`@WORKBENCH:标记为已完成`),{confirmButtonText:Q(`@WORKBENCH:标记完成`),cancelButtonText:Q(`@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){V.error(t?.error||Q(`@WORKBENCH:标记失败`));return}V.success(Q(`@WORKBENCH:已标记为已完成`)),await he(!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){V.error(t?.error||Q(`@WORKBENCH:撤销失败`));return}V.success(Q(`@WORKBENCH:已撤销完成标记`)),await he(!0)}finally{Ue.delete(e.id)}}}async function Ke(e){let{ok:t,keptTasks:n}=await g(e.path);t&&(V.success(n>0?Q(`@WORKBENCH:已移除项目,{n} 条任务仍保留在「全部项目」下`,{n}):Q(`@WORKBENCH:已移除项目`)),await he(!0))}async function qe(e){let t=(e.title||``).trim()||Q(`@WORKBENCH:未命名任务`);try{await W.confirm(Q(`@WORKBENCH:删除任务「{title}」?`,{title:t}),Q(`@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){V.error(n.error||Q(`@WORKBENCH:删除失败`));return}await he(!0)}let Je=Y(null),Ye=q(()=>R.value?.path||c.value);async function Xe(e){let t=await ie({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(),V.success(t.ran?Q(`@WORKBENCH:已派发并开始执行`):Q(`@WORKBENCH:已派发(只建任务未执行)`)),await he(!0))}async function Ze(e){await re(e)}let Qe=Y(!1),$e=Y(!1),et=q(()=>{let e=R.value?.key;return e&&T.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!==(w.value||``).trim()&&(e=await j(t)),e&&r&&n!==et.value.trim()&&(e=await ae(r.path,n)),e&&(Qe.value=!1)}finally{$e.value=!1}}return(e,t)=>{let a=d;return A(),x(`div`,{class:`board`,style:p(we.value)},[E(`header`,Nl,[E(`button`,{type:`button`,class:h([`board__icon-btn board__fold-btn`,{"is-on":!Ae.value}]),title:Ae.value?D(Q)(`@WORKBENCH:展开项目列表`):D(Q)(`@WORKBENCH:收起项目列表`),"aria-label":Ae.value?D(Q)(`@WORKBENCH:展开项目列表`):D(Q)(`@WORKBENCH:收起项目列表`),"aria-expanded":!Ae.value,onClick:je},[Ae.value?(A(),i(a,{key:1},{default:G(()=>[y(D(se))]),_:1})):(A(),i(a,{key:0},{default:G(()=>[y(D(Se))]),_:1}))],10,Pl),E(`div`,Fl,[E(`span`,{class:h([`board__live`,{"is-off":!D(_)}]),"aria-hidden":`true`},null,2),E(`div`,Il,[E(`h1`,Ll,M(D(Q)(`@WORKBENCH:多项目编排台`)),1),E(`p`,Rl,M(D(_)?D(Q)(`@WORKBENCH:主 Agent 调度中`):D(Q)(`@WORKBENCH:主 Agent 已暂停`)),1)])]),E(`div`,zl,[E(`span`,Bl,[E(`span`,Vl,M(D(Q)(`@WORKBENCH:项目`)),1),E(`strong`,Hl,M(H.value.projects),1)]),E(`span`,{class:`board__stat`,title:D(Q)(`@WORKBENCH:看板上全部任务(含已从项目列表移除的项目)`)},[E(`span`,Wl,M(D(Q)(`@WORKBENCH:全部任务`)),1),E(`strong`,Gl,M(H.value.tasks),1)],8,Ul),E(`span`,Kl,[E(`span`,ql,M(D(Q)(`@WORKBENCH:活跃执行`)),1),E(`strong`,{class:h([`board__stat-value`,{"is-live":H.value.running>0}])},M(H.value.running),3)]),E(`span`,Jl,[E(`span`,Yl,M(D(Q)(`@WORKBENCH:今日完成`)),1),E(`strong`,Xl,M(H.value.todayDone),1)])])]),E(`div`,{ref_key:`colsRef`,ref:Z,class:h([`board__cols`,{"is-resizing":Te.value!==null}])},[E(`div`,{class:h([`board__scrim`,{"is-on":ke.value}]),"aria-hidden":`true`,onClick:t[0]||=e=>ke.value=!1},null,2),E(`aside`,{class:h([`board__left`,{"is-collapsed":Ae.value}]),onKeydown:K(Me,[`esc`])},[y(Ma,{projects:D(o),"selected-key":L.value,loading:D(l),onSelect:Fe,onRemove:Ke},null,8,[`projects`,`selected-key`,`loading`])],34),Ae.value?r(``,!0):(A(),x(`div`,{key:0,class:`board__splitter board__splitter--left`,role:`separator`,"aria-orientation":`vertical`,title:D(Q)(`@WORKBENCH:拖动调整项目列表宽度,双击恢复默认`),onMousedown:t[1]||=e=>$(`left`,e),onDblclick:t[2]||=e=>Oe(`left`)},null,40,Zl)),E(`main`,Ql,[E(`div`,$l,[E(`div`,eu,[E(`h2`,tu,M(R.value?R.value.name:D(Q)(`@WORKBENCH:全部项目`)),1),R.value?(A(),x(`span`,{key:0,class:`board__project-path`,title:R.value.path},M(R.value.path),9,nu)):(A(),x(`span`,ru,M(D(Q)(`@WORKBENCH:共 {n} 个项目的任务`,{n:D(o).length})),1))]),R.value?(A(),x(`span`,iu,M(D(Q)(`@WORKBENCH:{done}/{total} 任务完成`,{done:R.value.stats.done,total:R.value.stats.total})),1)):r(``,!0)]),y(ts,{tasks:B.value,"project-labels":de.value,"show-project-label":!R.value,"opened-task-id":n.openedTaskId,onOpenTask:fe,onRunTask:ze,onStopTask:He,onCompleteTask:We,onReopenTask:Ge,onDeleteTask:qe,onCreateTask:Le},null,8,[`tasks`,`project-labels`,`show-project-label`,`opened-task-id`])]),!Ne.value&&!Ce.value?(A(),x(`div`,{key:1,class:`board__splitter board__splitter--right`,role:`separator`,"aria-orientation":`vertical`,title:D(Q)(`@WORKBENCH:拖动调整主 Agent 控制台宽度,双击恢复默认`),onMousedown:t[3]||=e=>$(`right`,e),onDblclick:t[4]||=e=>Oe(`right`)},null,40,au)):r(``,!0),y(Xc,{ref_key:`consoleRef`,ref:Je,active:D(_),running:D(b),"selected-project":R.value,dispatching:D(S),"toggling-schedule":D(ee),"today-done":H.value.todayDone,collapsed:Ne.value,"default-prompt":D(w),"project-prompts":D(T),reports:D(te),"report-interval-ms":D(k),"generating-report":D(O),"max-instruction-chars":D(C),onToggleCollapse:Pe,onToggleSchedule:Ze,onDispatch:Xe,onGenerateReport:D(ce),onSetReportInterval:D(le),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),y(pl,{modelValue:Qe.value,"onUpdate:modelValue":t[6]||=e=>Qe.value=e,"default-prompt":D(w),"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`]),y(Ml,{modelValue:Ie.value,"onUpdate:modelValue":t[7]||=e=>Ie.value=e,projects:D(o),"default-project-path":Ye.value,onCreated:Re},null,8,[`modelValue`,`projects`,`default-project-path`])],4)}}}),[[`__scopeId`,`data-v-5da69428`]]);X(),z(),b(),fe();var _u={class:`workbench`},vu={class:`wb-editor`},yu={class:`wb-editor-bar`},bu=[`title`],xu=[`title`],Su=[`title`],Cu={key:1,class:`wb-editor-bar__time`},wu=[`title`],Tu={key:1,class:`wb-editor-bar__sep`,"aria-hidden":`true`},Eu={key:2,class:`wb-editor-bar__spent`},Du={class:`wb-editor-bar__hint`},Ou={class:`workbench__editor-row`},ku=[`aria-label`,`aria-valuenow`,`title`],Au={class:`wb-split`},ju={key:0,class:`wb-placeholder`},Mu={class:`wb-split__header`},Nu={class:`wb-split__title-wrap`},Pu=[`placeholder`,`aria-label`],Fu=[`title`,`aria-label`],Iu=[`title`],Lu={key:0,class:`wb-meta-save__dot`},Ru={key:1,class:`wb-meta-save__check`},zu={key:2,class:`wb-meta-save__bang`},Bu={key:3,class:`wb-meta-save__dot`},Vu=[`title`],Hu={class:`wb-executor-item`},Uu={class:`wb-executor-item__name`},Wu=[`title`],Gu={key:2,class:`wb-executor-item__missing`},Ku={key:2,class:`wb-no-claude-hint`,role:`status`},qu={class:`wb-no-claude-hint__text`},Ju={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},Yu={class:`wb-copy-exec`},Xu=[`title`,`aria-label`],Zu=[`title`,`aria-label`],Qu=[`title`,`aria-label`],$u=[`title`,`aria-label`],ed=[`open`],td={class:`wb-task-desc__summary`},nd={class:`wb-task-desc__label`},rd=[`title`,`aria-label`],id={key:0,class:`wb-task-desc__tag`},ad={key:0},od={key:1,class:`wb-task-desc__tag-attachment`},sd=[`placeholder`,`aria-label`],cd={class:`wb-execution-body`},ld={class:`wb-exec-detail`},ud={class:`wb-form-item__label wb-task-prompt__summary`},dd={key:0,class:`wb-task-prompt__tag`},fd={key:0,class:`wb-task-prompt__parts`},pd={class:`wb-task-prompt__label`},md={class:`wb-task-prompt__text`},hd={key:1,class:`wb-task-prompt__empty`},gd={class:`wb-simple-chat`},_d={class:`wb-simple-chat__footer`},vd={key:0,class:`wb-chat-queue`},yd={class:`wb-chat-queue__head`},bd={class:`wb-chat-queue__label`},xd={class:`wb-chat-queue__count`},Sd={class:`wb-chat-queue__hint`},Cd={class:`wb-chat-queue__index`},wd=[`title`],Td={key:0,class:`wb-chat-queue__atts`},Ed=[`title`,`aria-label`,`onClick`],Dd=`wb.lastTaskByProject.v1`,Od=`__no_project__`,kd=`wb.sidebarWidth.v1`,Ad=200,jd=480,Md=268,Nd=3e3,Pd=52,Fd=320,Id=500,Ld=$(s({__name:`WorkbenchView`,setup(e){let n=Me(),a=Pe(),o=Y((()=>{try{let e=parseInt(localStorage.getItem(kd)||``,10);return Number.isFinite(e)?Math.min(jd,Math.max(Ad,e)):Md}catch{return Md}})());function s(e){e.preventDefault();let t=e.clientX,n=o.value;document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let r=e=>{o.value=Math.min(jd,Math.max(Ad,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(kd,String(o.value))}catch{}},{once:!0})}function c(e){o.value=Math.min(jd,Math.max(Ad,o.value+e));try{localStorage.setItem(kd,String(o.value))}catch{}}function l(){try{let e=localStorage.getItem(Dd),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function u(e){try{localStorage.setItem(Dd,JSON.stringify(e))}catch{}}function g(e,t){let n=l();n[e||Od]=t,u(n)}let v=Y(!1);function b(){v.value=!1}let ee=Y(null);async function w(e){await ce(),B.value=e.taskId,ee.value=e.taskId,X(),H.value&&g(Be(k.value.path),e.taskId),v.value=!0}let{tasks:T,jobs:te,currentProject:k,connectSSE:ne,disconnectSSE:ae,loadCurrentProject:N,loadJobs:oe,clearJobsByTask:se,loadTasks:ce}=hr();function le(){let e=Be(k.value.path),t=T.value.filter(t=>!t.projectPath||Be(t.projectPath)===e),n=l(),r=e&&n[e]||!e&&n[Od]||``,i=r?T.value.find(e=>e.id===r):null,a=t[0]||T.value[0]||null,o=i&&i.projectPath&&Be(i.projectPath)!==e?null:i?i.id:a?a.id:null;B.value=o,X()}async function R(){let e=B.value;if(await ce(),e&&T.value.some(t=>t.id===e)){X();return}le()}async function ue(){await ce(),le()}let z=Y(!1),B=Y(null),H=q(()=>T.value.find(e=>e.id===B.value)||null),fe=Y([]),me=q(()=>fe.value.find(e=>e.id===B.value)||null),he=q(()=>me.value?Hn(qn(me.value)):``),ye=q(()=>me.value?Zn(me.value):``),xe=q(()=>me.value?Qn(me.value):``),Se=q(()=>{let e=H.value?.projectPath||``;return!e||Be(e)===Be(k.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),Ce=Y({title:``,desc:``});function X(){H.value?Ce.value={title:H.value.title,desc:H.value.desc}:Ce.value={title:``,desc:``}}let Z=Y(`idle`),Ee=Y(0),De=null,$=q(()=>{if(!H.value)return!1;let e=H.value;return Ce.value.title!==e.title||Ce.value.desc!==e.desc});function Oe(){De!==null&&(clearTimeout(De),De=null)}function ke(e){return!(!e||(e.title||``).trim()||(e.desc||``).trim()||(e.simpleOverride||``).trim()||Array.isArray(e.attachments)&&e.attachments.length>0)}async function Fe(e){try{await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`})}catch{}let t=T.value.findIndex(t=>t.id===e.id);t!==-1&&T.value.splice(t,1)}async function Ie(){let e=T.value.filter(e=>e.id!==B.value&&ke(e));for(let t of e)await Fe(t)}async function Le(){if(!H.value)return!1;if(!$.value)return!0;if(Z.value=`saving`,await jt(!1))return Ee.value=Date.now(),Z.value=`saved`,setTimeout(()=>{Z.value===`saved`&&Date.now()-Ee.value>=4e3&&(Z.value=`idle`)},4e3),!0;Z.value=`error`;let e=Date.now();return setTimeout(()=>{Z.value===`error`&&Date.now()-e>=4e3&&(Z.value=`idle`)},4e3),!1}P(()=>H.value?{id:H.value.id,title:H.value.title,desc:H.value.desc}:null,(e,t)=>{e&&t&&e.id===t.id&&(De!==null&&clearTimeout(De),De=window.setTimeout(()=>{Le()},1500))},{deep:!0}),P(B,async(e,t)=>{Oe(),H.value&&$.value&&await Le()}),P(k,async e=>{if(!e.path)return;let t=Be(e.path),n=H.value;n&&n.projectPath&&Be(n.projectPath)!==t&&await ue()});function Re(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function ze(){H.value&&$.value&&!ke(H.value)&&Re(H.value)}let Ve=Y(!1);async function Ue(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 We=Y(null),Ge=Y(null);async function Ke(e){if(e){if(!await Ue((e.title||``).trim()||Q(`@WORKBENCH:未命名任务`))){V.error(Q(`@WORKBENCH:复制失败`));return}We.value=e.id,V.success(Q(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{We.value===e.id&&(We.value=null)},1500)}}async function qe(e){if(!e)return;let t=(e.desc||``).trim();if(!t){V.warning(Q(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await Ue(t)){V.error(Q(`@WORKBENCH:复制失败`));return}Ge.value=e.id,V.success(Q(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{Ge.value===e.id&&(Ge.value=null)},1500)}let{simpleConversationMessages:Je,simpleAllJobsFor:Ye,simpleJobFor:Ze,simpleJobState:Qe}=fr(te,H);function $e(e){let t=String(e?.id||``).replace(/-a$/,``),n=te.value.find(e=>e.id===t);return n?Gt(n):!1}let et=Y(null);function tt(e){let t=(e?.projectPath||``).trim().replace(/[\\/]+$/,``);return t?t.split(/[\\/]/).pop()||t:k.value.name||``}async function nt(e,t=`brief`){if(!e)return;let n=ct(Ye(e),{title:e.title,projectName:tt(e)},{scope:t});if(!n){V.warning(Q(`@WORKBENCH:暂无执行内容可复制`));return}if(!await Ue(n)){V.error(Q(`@WORKBENCH:复制失败`));return}et.value=e.id,V.success(Q(`@WORKBENCH:已复制执行内容`)),window.setTimeout(()=>{et.value===e.id&&(et.value=null)},1500)}function rt(e){nt(H.value,e===`full`?`full`:`brief`)}let it=[`wheel`,`touchstart`,`pointerdown`,`keydown`],at=Y(null),ot=Y(null),st=null,lt=null,ut=null;function dt(){if(st&&=(st.disconnect(),null),lt!==null&&(clearTimeout(lt),lt=null),ut){for(let e of it)ut.removeEventListener(e,dt);ut=null}}function ft(){dt();let e=at.value;if(!e)return;e.scrollToBottom?.(!1);let t=ot.value?.querySelector(`.acu-message-list`);if(!(!t||typeof ResizeObserver>`u`)){ut=t;for(let e of it)t.addEventListener(e,dt,{passive:!0});st=new ResizeObserver(()=>at.value?.scrollToBottom?.(!1)),st.observe(t),t.firstElementChild&&st.observe(t.firstElementChild),lt=setTimeout(dt,Nd)}}let pt=q(()=>v.value&&H.value&&Ye(H.value).length>0?H.value.id:``);P(pt,async e=>{dt(),e&&(await O(),ft())}),m(dt);function mt(e){return e?Kt(e.id):!1}let ht=q(()=>Ye(H.value).length>0),gt=q(()=>mt(H.value)),_t=q(()=>H.value?gt.value?Q(`@WORKBENCH:正在执行中,请先「停止」再重新执行`):ht.value?Q(`@WORKBENCH:重新跑一轮:上一轮的执行记录会被清空`):``:``),vt=q(()=>{let e=H.value;if(!e)return[];let t=e.promptParts;if(t&&(t.global||t.project)){let e=[];return t.global&&e.push({key:`global`,label:Q(`@WORKBENCH:全局提示词`),text:t.global}),t.project&&e.push({key:`project`,label:Q(`@WORKBENCH:项目提示词`),text:t.project}),e}let n=(e.simpleOverride||``).trim();return n?[{key:`legacy`,label:Q(`@WORKBENCH:提示词`),text:n}]:[]}),yt=Y(!1),bt=Y(null),xt=Y(null);function St(e){let t=e?.currentTarget||xt.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?Id:Fd,r=Math.min(Math.max(t.scrollHeight,Pd),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}P(Ve,async e=>{e&&(await O(),St())}),P(()=>H.value?.id,async()=>{Ve.value&&(await O(),St())});async function Ct(){if(yt.value)return;yt.value=!0;let e={title:``,desc:``};k.value.path&&(e.projectPath=k.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){V.error(t.error||Q(`@WORKBENCH:保存失败`));return}Oe(),H.value&&ke(H.value)?await Fe(H.value):H.value&&$.value&&await Le(),await ue(),t.task?.id&&(B.value=t.task.id,X(),V.success(Q(`@WORKBENCH:已新建任务`)),await O(),bt.value?.focus())}finally{yt.value=!1}}async function wt(e){await W.confirm(Q(`@WORKBENCH:删除任务「{title}」?`,{title:e.title}),Q(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),B.value===e.id&&(B.value=null),ue()}async function Et(e){let t=(e.title||Q(`@WORKBENCH:未命名任务`)).trim(),n={title:Q(`@WORKBENCH:{title} (副本)`,{title:t}),desc:e.desc||``,simpleOverride:e.simpleOverride||``};e.promptParts&&(e.promptParts.global||e.promptParts.project)&&(n.promptParts=e.promptParts),k.value.path&&(n.projectPath=k.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){V.error(e.error||Q(`@WORKBENCH:复制失败`));return}await ue(),e.task?.id&&(B.value=e.task.id,X()),V.success(Q(`@WORKBENCH:已复制任务`))}catch(e){V.error(Q(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function Dt(e){if(B.value===e.id)return;Oe();let t=H.value;t&&ke(t)?await Fe(t):t&&$.value&&await Le(),B.value=e.id,X(),g(Be(k.value.path),e.id)}async function Ot(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=T.value.slice(),i=At(T.value,t,n);if(i!==T.value){T.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:Q(`@WORKBENCH:排序保存失败`)}));e?.success||(T.value=r,V.error(e?.error||Q(`@WORKBENCH:排序保存失败`)))}catch(e){T.value=r,V.error(Q(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function At(e,t,n){let r=e=>Be(e)||Od,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 jt(e){if(!H.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(H.value)}).then(e=>e.json());return t.success?(e&&V.success(Q(`@WORKBENCH:已保存`)),await R(),!0):(V.error(t.error||Q(`@WORKBENCH:保存失败`)),!1)}f(async()=>{await Promise.all([ue(),N(),oe()]),await Ie(),ne(),window.addEventListener(`beforeunload`,ze),a.fetchExecutorModels()}),m(()=>{ae(),window.removeEventListener(`beforeunload`,ze),H.value&&$.value&&!ke(H.value)&&Re(H.value)});let{pasteHoverId:Mt,isUploading:Nt,isImageAttachment:Pt,humanSize:Ft,onAttachmentPaste:It,onAttachmentDrop:Lt,uploadAttachment:Rt,removeAttachment:zt,pickAttachmentFile:Bt}=lr(),{runTask:Vt,onContinueSendFromChat:Ht,cancelJob:Ut,clearExecutionForSelectedTask:Wt,onReExecuteJob:Gt,isTaskRunning:Kt,queuedChatsOf:qt,removeQueuedChat:Jt,flushNextQueued:Yt}=pr(te,T,H,{clearJobsByTask:se,persistTask:jt,uploadAttachment:Rt,getExecutor:()=>Xt.value}),{active:Xt,availability:Zt,hasAnyExecutor:Qt,choose:$t,executorModelText:en,executorModelTitle:tn}=mr();function nn(e){return je(e)}let rn=q(()=>Ye(H.value).slice(-1)[0]),an=q(()=>je(rn.value?.agent)),on=q(()=>kt(rn.value?.agent)),sn=q(()=>H.value?qt(H.value.id):[]);return(e,a)=>{let l=d,u=t,f=be,m=C;return A(),x(`div`,_u,[y(gu,{"opened-task-id":ee.value,onOpenTask:w,onBoardTasks:a[0]||=e=>fe.value=e},null,8,[`opened-task-id`]),y(Ne,{modelValue:v.value,"onUpdate:modelValue":a[24]||=e=>v.value=e,title:D(Q)(`@WORKBENCH:任务执行`),type:`flex`,"height-mode":`fixed`,"height-offset":`88px`,top:`2vh`,width:`min(1520px, 96vw)`},{default:G(()=>[E(`div`,vu,[E(`div`,yu,[E(`button`,{type:`button`,class:`wb-back-btn`,title:D(Q)(`@WORKBENCH:返回看板`),onClick:b},[y(l,{class:`wb-back-btn__icon`},{default:G(()=>[y(D(re))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:返回看板`)),1)],8,bu),E(`span`,{class:`wb-editor-bar__project`,title:D(k).path},M(D(k).name),9,xu),Se.value?(A(),x(`span`,{key:0,class:`wb-editor-bar__repo`,title:Se.value.path},M(D(Q)(`@WORKBENCH:执行于 {name}`,{name:Se.value.name})),9,Su)):r(``,!0),he.value||ye.value?(A(),x(`span`,Cu,[he.value?(A(),x(`span`,{key:0,class:`wb-editor-bar__ago`,title:xe.value},M(he.value),9,wu)):r(``,!0),he.value&&ye.value?(A(),x(`span`,Tu,`·`)):r(``,!0),ye.value?(A(),x(`span`,Eu,M(ye.value),1)):r(``,!0)])):r(``,!0),E(`span`,Du,M(D(Q)(`@WORKBENCH:任务执行`)),1)]),E(`div`,Ou,[y(Vr,{style:p({width:o.value+`px`}),tasks:D(T),"selected-task-id":B.value,"current-project":D(k),"creating-task":yt.value,"is-task-running":mt,onSelectTask:Dt,onDeleteTask:wt,onCopyTask:Et,onCreateTask:Ct,onReorderTasks:Ot},null,8,[`style`,`tasks`,`selected-task-id`,`current-project`,`creating-task`]),E(`div`,{class:`wb-splitter`,role:`separator`,tabindex:`0`,"aria-orientation":`vertical`,"aria-label":D(Q)(`@WORKBENCH:拖动调整侧边栏宽度`),"aria-valuenow":o.value,"aria-valuemin":Ad,"aria-valuemax":jd,title:D(Q)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:s,onKeydown:[a[1]||=K(J(e=>c(-16),[`prevent`]),[`left`]),a[2]||=K(J(e=>c(16),[`prevent`]),[`right`])]},null,40,ku),E(`section`,Au,[H.value?(A(),x(F,{key:1},[E(`div`,Mu,[E(`div`,Nu,[I(E(`input`,{ref_key:`titleInputRef`,ref:bt,class:`wb-input wb-input--title`,"onUpdate:modelValue":a[3]||=e=>H.value.title=e,placeholder:D(Q)(`@WORKBENCH:任务标题`),"aria-label":D(Q)(`@WORKBENCH:任务标题`)},null,8,Pu),[[de,H.value.title]]),E(`button`,{type:`button`,class:h([`wb-copy-btn`,{"is-flash":We.value===H.value.id}]),title:D(Q)(`@WORKBENCH:复制任务标题`),"aria-label":D(Q)(`@WORKBENCH:复制任务标题`),onClick:a[4]||=e=>Ke(H.value)},[We.value===H.value.id?(A(),i(l,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:G(()=>[...a[26]||=[_(`✓`,-1)]]),_:1})):(A(),i(l,{key:0,class:`wb-copy-btn__icon`},{default:G(()=>[y(D(L))]),_:1}))],10,Fu)]),Z.value!==`idle`||$.value?(A(),x(`span`,{key:0,class:h([`wb-meta-save`,{"is-saving":Z.value===`saving`,"is-saved":Z.value===`saved`,"is-error":Z.value===`error`,"is-dirty":$.value&&Z.value===`idle`}]),title:Z.value===`saving`?D(Q)(`@WORKBENCH:保存中…`):Z.value===`error`?D(Q)(`@WORKBENCH:保存失败`):Z.value===`saved`?D(Q)(`@WORKBENCH:已保存`):``},[Z.value===`saving`?(A(),x(`span`,Lu)):Z.value===`saved`?(A(),x(`span`,Ru,`✓`)):Z.value===`error`?(A(),x(`span`,zu,`!`)):(A(),x(`span`,Bu)),_(` `+M(Z.value===`saving`?D(Q)(`@WORKBENCH:保存中…`):Z.value===`saved`?D(Q)(`@WORKBENCH:已保存`):Z.value===`error`?D(Q)(`@WORKBENCH:保存失败`):D(Q)(`@WORKBENCH:有未保存的更改`)),1)],10,Iu)):r(``,!0),D(Qt)?(A(),i(m,{key:1,"split-button":``,type:`primary`,class:`wb-executor-split`,trigger:`click`,disabled:gt.value,title:_t.value,onClick:a[5]||=e=>D(Vt)(H.value),onCommand:D($t)},{dropdown:G(()=>[y(f,null,{default:G(()=>[(A(!0),x(F,null,S(D(Ae),e=>(A(),i(u,{key:e.id,command:e.id,disabled:!D(Zt)[e.id]},{default:G(()=>[E(`span`,Hu,[y(He,{executor:e.id,class:`wb-executor-item__icon`},null,8,[`executor`]),E(`span`,Uu,M(e.name),1),D(en)(e.id)?(A(),x(`span`,{key:0,class:`wb-executor-item__model`,title:D(tn)(e.id)},M(D(en)(e.id)),9,Wu)):r(``,!0),D(Xt)===e.id?(A(),i(l,{key:1,class:`wb-executor-item__check`},{default:G(()=>[y(D(ve))]),_:1})):D(Zt)[e.id]?r(``,!0):(A(),x(`span`,Gu,M(D(Q)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:G(()=>[_(M(ht.value?D(Q)(`@WORKBENCH:重新执行任务`):D(Q)(`@WORKBENCH:执行任务`))+` `,1),E(`span`,{class:`wb-executor-split__hint`,title:D(tn)(D(Xt))},[y(He,{executor:D(Xt),class:`wb-executor-split__hint-icon`},null,8,[`executor`]),_(` `+M(nn(D(Xt))),1)],8,Vu)]),_:1},8,[`disabled`,`title`,`onCommand`])):(A(),x(`div`,Ku,[y(l,{class:`wb-no-claude-hint__icon`},{default:G(()=>[y(D(ge))]),_:1}),E(`span`,qu,M(D(Q)(`@WORKBENCH:未检测到本地 claude / opencode,无法执行任务`)),1),E(`a`,Ju,M(D(Q)(`@WORKBENCH:查看安装指引`)),1)])),E(`div`,Yu,[E(`button`,{type:`button`,class:h([`wb-logs-inline-btn wb-logs-inline-btn--copy wb-copy-exec__main`,{"is-flash":et.value===H.value.id}]),title:D(Q)(`@WORKBENCH:复制本任务的对话流(默认精简:仅提示词 + 模型回复)`),"aria-label":D(Q)(`@WORKBENCH:复制执行内容`),onClick:a[6]||=e=>nt(H.value,`brief`)},[et.value===H.value.id?(A(),i(l,{key:1,class:`wb-logs-inline-btn__icon`},{default:G(()=>[...a[27]||=[_(`✓`,-1)]]),_:1})):(A(),i(l,{key:0,class:`wb-logs-inline-btn__icon`},{default:G(()=>[y(D(L))]),_:1})),E(`span`,null,M(D(Q)(`@WORKBENCH:复制执行内容`)),1)],10,Xu),y(m,{trigger:`click`,placement:`bottom-end`,onCommand:rt},{dropdown:G(()=>[y(f,null,{default:G(()=>[y(u,{command:`brief`},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:精简:提示词 + 模型回复`)),1)]),_:1}),y(u,{command:`full`},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:全量:提示词 / 思考 / 工具调用 / 模型回复`)),1)]),_:1})]),_:1})]),default:G(()=>[E(`button`,{type:`button`,class:`wb-logs-inline-btn wb-copy-exec__caret`,title:D(Q)(`@WORKBENCH:选择复制范围`),"aria-label":D(Q)(`@WORKBENCH:选择复制范围`)},[y(l,{class:`wb-logs-inline-btn__icon`},{default:G(()=>[y(D(ie))]),_:1})],8,Zu)]),_:1})]),E(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:D(Q)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":D(Q)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:a[7]||=(...e)=>D(Wt)&&D(Wt)(...e)},[y(l,{class:`wb-logs-inline-btn__icon`},{default:G(()=>[y(D(pe))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:清空执行`)),1)],8,Qu),E(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:D(Q)(`@WORKBENCH:执行日志`),"aria-label":D(Q)(`@WORKBENCH:执行日志`),onClick:a[8]||=e=>z.value=!0},[y(l,{class:`wb-logs-inline-btn__icon`},{default:G(()=>[y(D(U))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:执行日志`)),1)],8,$u)]),E(`details`,{class:`wb-task-desc`,open:Ve.value,onToggle:a[20]||=e=>Ve.value=e.target.open},[E(`summary`,td,[y(l,{class:`wb-task-desc__caret`},{default:G(()=>[(A(),i(_e(Ve.value?D(ie):D(j))))]),_:1}),E(`span`,nd,M(D(Q)(`@WORKBENCH:任务描述(可选)`)),1),E(`button`,{type:`button`,class:h([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":Ge.value===H.value.id}]),title:H.value.desc&&H.value.desc.trim()?D(Q)(`@WORKBENCH:复制任务描述`):D(Q)(`@WORKBENCH:任务描述为空,无需复制`),"aria-label":D(Q)(`@WORKBENCH:复制任务描述`),onClick:a[9]||=J(e=>qe(H.value),[`stop`,`prevent`])},[Ge.value===H.value.id?(A(),i(l,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:G(()=>[...a[28]||=[_(`✓`,-1)]]),_:1})):(A(),i(l,{key:0,class:`wb-copy-btn__icon`},{default:G(()=>[y(D(L))]),_:1}))],10,rd),H.value.desc&&H.value.desc.length>0||H.value.attachments&&H.value.attachments.length>0?(A(),x(`span`,id,[H.value.desc&&H.value.desc.length>0?(A(),x(`span`,ad,M(D(Q)(`@WORKBENCH:已填写`)),1)):r(``,!0),H.value.attachments&&H.value.attachments.length>0?(A(),x(`span`,od,M(H.value.attachments.length),1)):r(``,!0)])):r(``,!0)]),I(E(`textarea`,{ref_key:`taskDescTextareaRef`,ref:xt,class:`wb-textarea wb-textarea--autogrow`,"onUpdate:modelValue":a[10]||=e=>H.value.desc=e,placeholder:D(Q)(`@WORKBENCH:任务描述(可选)`),"aria-label":D(Q)(`@WORKBENCH:任务描述(可选)`),onInput:a[11]||=e=>St(e),onFocus:a[12]||=e=>St(e),onBlur:a[13]||=e=>St(e),onPaste:a[14]||=e=>D(It)(e,{kind:`task`,task:H.value})},null,40,sd),[[de,H.value.desc]]),y(Tt,{attachments:H.value.attachments||[],"is-image":D(Pt),"human-size":D(Ft),"is-uploading":D(Nt)(`task-`+H.value.id),"is-paste-hover":D(Mt)===`task-`+H.value.id,"on-pick":()=>D(Bt)({kind:`task`,task:H.value}),"on-remove":e=>D(zt)({kind:`task`,task:H.value},e),onPaste:a[15]||=e=>D(It)(e,{kind:`task`,task:H.value}),onDrop:a[16]||=J(e=>D(Lt)(e,{kind:`task`,task:H.value}),[`prevent`]),onDragover:a[17]||=J(e=>Mt.value=`task-`+H.value.id,[`prevent`]),onDragenter:a[18]||=J(e=>Mt.value=`task-`+H.value.id,[`prevent`]),onDragleave:a[19]||=e=>Mt.value=D(Mt)===`task-`+H.value.id?null:D(Mt)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,ed),E(`div`,cd,[E(`div`,ld,[E(`details`,{class:h([`wb-task-prompt`,{"has-content":vt.value.length>0}])},[E(`summary`,ud,[y(l,{class:`wb-task-prompt__caret`},{default:G(()=>[y(D(j))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:提示词`)),1),vt.value.length>0?(A(),x(`span`,dd,M(D(Q)(`@WORKBENCH:已填写`)),1)):r(``,!0),D(Qe)(D(Ze)(H.value))===`running`&&D(Ze)(H.value)?(A(),x(`button`,{key:1,class:`wb-simple__stop`,onClick:a[21]||=J(e=>D(Ut)(D(Ze)(H.value)),[`stop`])},M(D(Q)(`@WORKBENCH:停止`)),1)):r(``,!0)]),vt.value.length>0?(A(),x(`div`,fd,[(A(!0),x(F,null,S(vt.value,e=>(A(),x(`div`,{key:e.key,class:`wb-task-prompt__part`},[E(`div`,pd,M(e.label),1),E(`pre`,md,M(e.text),1)]))),128))])):(A(),x(`p`,hd,M(D(Q)(`@WORKBENCH:这条任务没有附加提示词`)),1))],2),D(Ye)(H.value).length>0?(A(),x(`div`,{key:0,class:`wb-simple-chat-wrap`,ref_key:`chatWrapRef`,ref:ot},[E(`div`,gd,[(A(),i(D(we),{ref_key:`chatRef`,ref:at,key:H.value.id,messages:D(Je),"assistant-name":an.value,"assistant-avatar":on.value,"show-avatar":!0,theme:D(n).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:D(Q)(`@AGENT:计划`),raw:D(Q)(`@AGENT:原始参数`)}},"message-rail-config":D(Xe),"show-input":!1,onRetry:$e},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`,`message-rail-config`]))]),E(`div`,_d,[sn.value.length?(A(),x(`div`,vd,[E(`div`,yd,[E(`span`,bd,M(D(Q)(`@WORKBENCH:排队中`)),1),E(`span`,xd,M(sn.value.length),1),E(`span`,Sd,M(gt.value?D(Q)(`@WORKBENCH:等这一轮跑完自动发送`):D(Q)(`@WORKBENCH:当前没有在跑的轮次`)),1)]),(A(!0),x(F,null,S(sn.value,(e,t)=>(A(),x(`div`,{key:e.id,class:`wb-chat-queue__item`},[E(`span`,Cd,M(t+1),1),E(`span`,{class:`wb-chat-queue__text`,title:e.text},M(e.text),9,wd),e.files.length?(A(),x(`span`,Td,[a[29]||=E(`span`,{"aria-hidden":`true`},`📎`,-1),_(` `+M(e.files.map(e=>e.file.name).join(`、`)),1)])):r(``,!0),t===0&&!gt.value?(A(),x(`button`,{key:1,type:`button`,class:`wb-chat-queue__btn`,onClick:a[22]||=e=>D(Yt)(H.value.id)},M(D(Q)(`@WORKBENCH:立即发送`)),1)):r(``,!0),E(`button`,{type:`button`,class:`wb-chat-queue__btn is-remove`,title:D(Q)(`@WORKBENCH:移出队列`),"aria-label":D(Q)(`@WORKBENCH:移出队列`),onClick:t=>D(Jt)(H.value.id,e.id)},`✕`,8,Ed)]))),128))])):r(``,!0),(A(),i(D(Te),{key:`input-`+H.value.id,placeholder:gt.value?D(Q)(`@WORKBENCH:执行中,发送后会排队,等这一轮跑完自动接上…`):D(Q)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:D(er),multiple:!0,maxCount:0,maxSize:D(tr)},class:`wb-simple-chat__input`,onSend:a[23]||=e=>D(Ht)(H.value,e)},null,8,[`placeholder`,`upload-config`]))])],512)):r(``,!0)])])],64)):(A(),x(`div`,ju,[E(`p`,null,M(D(Q)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])])]),_:1},8,[`modelValue`,`title`]),y(Ne,{modelValue:z.value,"onUpdate:modelValue":a[25]||=e=>z.value=e,title:D(Q)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,type:`flex`,"custom-class":`wb-logs-dialog`,"append-to-body":``},{default:G(()=>[y(Rn)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-9dadb16c`]]);export{Ld as default};
8
+ `)}`);return P(c,()=>{let e=Be(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}}X(),z(),b(),fe();var Sr={class:`wb-sidebar`},Cr={class:`wb-section`},wr=[`disabled`],Tr=[`aria-expanded`,`title`,`onClick`,`onKeydown`],Er=[`title`],Dr={class:`wb-pill wb-task-group__count`},Or=[`data-task-id`,`data-group-path`,`title`,`aria-pressed`,`onClick`,`onKeydown`,`onMousedown`],kr={class:`wb-task-item__body`},Ar=[`title`],jr=[`title`],Mr={class:`wb-task-item__action-group`},Nr=[`title`,`aria-label`,`onClick`],Pr=[`onClick`,`title`,`aria-label`],Fr={key:0,class:`wb-empty wb-empty--rich`},Ir={class:`wb-empty__art`,"aria-hidden":`true`},Lr={class:`wb-empty__title`},Rr={class:`wb-empty__hint`},zr={class:`wb-empty__cta`},Br=5,Vr=$(s({__name:`WorkbenchSidebar`,props:{tasks:{},selectedTaskId:{},currentProject:{},creatingTask:{type:Boolean},isTaskRunning:{type:Function}},emits:[`select-task`,`delete-task`,`copy-task`,`create-task`,`reorder-tasks`],setup(e,{emit:t}){let n=e,a=t,o=q(()=>n.currentProject),{groupedTasksList:s,isGroupCollapsed:c,toggleGroupCollapsed:l,shortProjectLabel:u}=xr(q(()=>n.tasks),o),f=q(()=>Be(n.currentProject.path));function p(e){return!!e.projectPath&&Be(e.projectPath)!==f.value}function m(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function g(e){let t=m(e),n=Q(`@WORKBENCH:拖动排序提示`);return t?`${t} · ${n}`:n}function v(e){return n.isTaskRunning(e)}let b=Y(null),C=Y(null),w=Y(null),te=Y(null),O=Y(null),k=null;function ne(){b.value=null,C.value=null,w.value=null,te.value=null,O.value=null,k=null}function re(e,t,n,r){e.button===0&&(k={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,ae),window.addEventListener(`mouseup`,N,{once:!0}))}function ae(e){if(!k)return;if(b.value===null){if(Math.abs(e.clientY-k.pointerY)<Br)return;b.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){w.value=null,te.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){w.value=null,te.value=null,O.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;w.value=r,te.value=i,O.value=e.clientY<o?`before`:`after`}function N(e){if(window.removeEventListener(`mousemove`,ae),document.body.style.userSelect=``,!k){ne();return}let t=k.groupPath,n=k.taskId,r=w.value,i=O.value,o=te.value;if(ne(),!r||!i||o!==t)return;let c=s.value.groups.find(e=>e.path===t);if(!c)return;let l=c.tasks.map(e=>e.id),u=l.indexOf(n);if(u<0)return;l.splice(u,1);let d=l.indexOf(r)+ +(i===`after`);l.splice(d,0,n),a(`reorder-tasks`,{groupPath:t,orderedIds:l})}return(t,n)=>{let o=d,C=Ce;return A(),x(`aside`,Sr,[E(`section`,Cr,[E(`button`,{class:`wb-new-btn`,disabled:e.creatingTask,onClick:n[0]||=e=>a(`create-task`)},[y(o,{class:`wb-new-btn__icon`},{default:G(()=>[y(D(ee))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:新建任务`)),1),n[4]||=E(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,wr),E(`ul`,{class:h([`wb-task-list`,{"is-grouped":D(s).hasMultiple}])},[(A(!0),x(F,null,S(D(s).groups,t=>(A(),x(F,{key:t.path},[D(s).hasMultiple?(A(),x(`li`,{key:0,class:h([`wb-task-group__head`,{"is-current":t.path===f.value,"is-collapsed":D(c)(t.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!D(c)(t.path),title:D(c)(t.path)?D(Q)(`@WORKBENCH:展开`):D(Q)(`@WORKBENCH:收起`),onClick:e=>D(l)(t.path),onKeydown:[K(J(e=>D(l)(t.path),[`prevent`]),[`enter`]),K(J(e=>D(l)(t.path),[`prevent`]),[`space`])]},[y(o,{class:`wb-task-group__caret`},{default:G(()=>[(A(),i(_e(D(c)(t.path)?D(j):D(ie))))]),_:2},1024),y(o,{class:`wb-task-group__icon`},{default:G(()=>[y(D(T))]),_:1}),E(`span`,{class:`wb-task-group__name`,title:t.path===f.value?e.currentProject.path:t.label},M(t.path===f.value?e.currentProject.name:D(u)(t.label)),9,Er),E(`span`,Dr,M(t.tasks.length),1)],42,Tr)):r(``,!0),D(c)(t.path)?r(``,!0):(A(!0),x(F,{key:1},S(t.tasks,i=>(A(),x(`li`,{key:i.id,class:h([`wb-task-item`,{active:i.id===e.selectedTaskId,"is-other-project":p(i),"is-running":v(i),"is-dragging":b.value===i.id,"is-drop-before":w.value===i.id&&O.value===`before`,"is-drop-after":w.value===i.id&&O.value===`after`}]),"data-task-id":i.id,"data-group-path":t.path,title:g(i),role:`button`,tabindex:`0`,"aria-pressed":i.id===e.selectedTaskId,onClick:e=>a(`select-task`,i),onKeydown:[K(J(e=>a(`select-task`,i),[`prevent`]),[`enter`]),K(J(e=>a(`select-task`,i),[`prevent`]),[`space`])],onMousedown:e=>re(e,i,t.path,e.currentTarget)},[E(`div`,kr,[E(`div`,{class:`wb-task-item__title`,title:m(i)},M(m(i)),9,Ar)]),v(i)?(A(),x(`span`,{key:0,class:`wb-task-item__running-dot`,title:D(Q)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,jr)):r(``,!0),E(`div`,Mr,[E(`button`,{class:`wb-task-item__copy`,title:D(Q)(`@WORKBENCH:复制任务`),"aria-label":D(Q)(`@WORKBENCH:复制任务`),onClick:J(e=>a(`copy-task`,i),[`stop`]),onKeydown:n[1]||=J(()=>{},[`stop`])},[y(o,null,{default:G(()=>[y(D(L))]),_:1})],40,Nr),v(i)?r(``,!0):(A(),x(`button`,{key:0,class:`wb-task-item__del`,onClick:J(e=>a(`delete-task`,i),[`stop`]),onKeydown:n[2]||=J(()=>{},[`stop`]),title:D(Q)(`@WORKBENCH:删除`),"aria-label":D(Q)(`@WORKBENCH:删除`)},[y(o,null,{default:G(()=>[y(D(me))]),_:1})],40,Pr))])],42,Or))),128))],64))),128)),e.tasks.length===0?(A(),x(`li`,Fr,[E(`div`,Ir,[y(o,null,{default:G(()=>[y(D(R))]),_:1})]),E(`div`,Lr,M(D(Q)(`@WORKBENCH:暂无任务`)),1),E(`div`,Rr,M(D(Q)(`@WORKBENCH:点击上方按钮新建`)),1),E(`div`,zr,[y(C,{type:`primary`,size:`small`,icon:D(ee),loading:e.creatingTask,onClick:n[3]||=e=>a(`create-task`)},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])])])):r(``,!0)],2)])])}}}),[[`__scopeId`,`data-v-cb578d87`]]);z();function Hr(){let e=Y([]),t=Y([]),n=Y(``),r=Y(!1),i=Y(!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||V.error(r?.error||Q(`@WORKBENCH:读取项目列表失败`)),!1)}catch(e){return a||V.error(Q(`@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}:(V.error(t?.error||Q(`@WORKBENCH:移除项目失败`)),{ok:!1,keptTasks:0})}catch(e){return V.error(Q(`@WORKBENCH:网络错误: `)+(e?.message||e)),{ok:!1,keptTasks:0}}}return{projects:e,boardTasks:t,currentProjectPath:n,loading:r,loaded:i,loadProjects:a,removeProject:o}}var Ur=[0,5,10,15,30,60].map(e=>e*60*1e3),Wr=6e5;function Gr(e){let t=Number(e);return Ur.includes(t)?t:Wr}function Kr(e){return e?e>=36e5?`@WORKBENCH:每 {n} 小时报告`:`@WORKBENCH:每 {n} 分钟报告`:`@WORKBENCH:关闭自动报告`}function qr(e){return e?{n:Math.round(e>=36e5?e/36e5:e/6e4)}:{}}function Jr(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 Yr(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 Xr(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?null:Math.floor(e)}var Zr=`@WORKBENCH:AI 估计`,Qr=`@WORKBENCH:百分比是主 Agent 根据任务思考与工具调用推测的大致估计,不是精确进度`;z();var $r=1e5;function ei(){let e=Y(!0),t=Y([]),n=Y([]),r=Y($r),i=Y([]),a=Y(null),o=Y(!1),s=Y(!1),c=Y(!1),l=Y(``),u=Y({}),d=Y([]),f=Y(!1),p=Y(!1),m=Y(Wr);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:[],Ue().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=Gr(c.reportIntervalMs),o.value=!0,!0):(s||V.error(c?.error||Q(`@WORKBENCH:读取编排状态失败`)),!1)}catch(e){return s||V.error(Q(`@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||V.error(t?.error||Q(`@WORKBENCH:读取进度报告失败`)),!1)}catch(t){return e||V.error(Q(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{f.value=!1}}async function _(){if(p.value)return null;p.value=!0;try{let e=String(Me().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):(V.info(Q(`@WORKBENCH:当前没有正在执行的任务,没有可汇报的进度`)),null):(V.error(t?.error||Q(`@WORKBENCH:生成进度报告失败`)),null)}catch(e){return V.error(Q(`@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=Gr(t.reportIntervalMs),!0):(V.error(t?.error||Q(`@WORKBENCH:保存失败`)),!1)}catch(e){return V.error(Q(`@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:``,V.success(Q(`@WORKBENCH:已保存全局预设提示词`)),!0):(V.error(t?.error||Q(`@WORKBENCH:保存失败`)),!1)}catch(e){return V.error(Q(`@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:{},V.success(Q(`@WORKBENCH:已保存项目预设提示词`)),!0):(V.error(n?.error||Q(`@WORKBENCH:保存失败`)),!1)}catch(e){return V.error(Q(`@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,V.success(e.value?Q(`@WORKBENCH:已恢复调度`):Q(`@WORKBENCH:已暂停调度,派发将只建任务不执行`)),!0):(e.value=n,V.error(r?.error||Q(`@WORKBENCH:切换调度状态失败`)),!1)}catch(t){return e.value=n,V.error(Q(`@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}):(V.error(t?.error||Q(`@WORKBENCH:派发失败`)),null)}catch(e){return V.error(Q(`@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}}X(),z(),b(),fe();var ti={class:`proj`},ni={class:`proj__head`},ri={class:`proj__title`},ii={class:`proj__count`},ai={key:0,class:`proj__tools`},oi={class:`proj__search`},si=[`placeholder`,`aria-label`],ci={class:`proj__toggles`},li=[`aria-pressed`,`title`],ui=[`aria-pressed`,`title`],di={class:`proj__list`},fi=[`title`],pi={class:`proj-item__row1`},mi={class:`proj-item__name`},hi={key:0,class:`proj-item__running`,"aria-hidden":`true`},gi={class:`proj-item__num`},_i={key:0,class:`proj-item__row2`},vi={class:`proj-item__running-text`},yi=[`title`],bi={class:`proj-item__bar`,"aria-hidden":`true`},xi={class:`proj-item__progress-text`},Si=[`title`,`onClick`,`onKeydown`],Ci={class:`proj-item__row1`},wi={class:`proj-item__name`},Ti={class:`proj-item__signals`},Ei={key:0,class:`proj-item__running`,"aria-hidden":`true`},Di={key:1,class:`proj-item__badge`},Oi={class:`proj-item__row2`},ki={key:0,class:`proj-chip proj-chip--missing`},Ai={key:0,class:`proj-item__branch`},ji={class:`proj-item__branch-name`},Mi={key:1,class:`proj-chip proj-chip--ahead`},Ni={key:2,class:`proj-chip proj-chip--behind`},Pi={key:3,class:`proj-chip proj-chip--dirty`},Fi={class:`proj-item__time`},Ii={key:0,class:`proj-item__row3`},Li={class:`proj-item__bar`,"aria-hidden":`true`},Ri={class:`proj-item__progress-text`},zi={class:`proj-item__actions`},Bi=[`title`,`aria-label`,`onClick`],Vi=[`title`,`aria-label`,`onClick`],Hi=[`title`,`aria-label`,`aria-expanded`,`onClick`],Ui=[`aria-label`],Wi=[`onClick`,`onKeydown`],Gi={class:`proj-menu__icon`},Ki={class:`proj-menu__label`},qi=[`onClick`,`onKeydown`],Ji={class:`proj-menu__icon`},Yi={class:`proj-menu__label`},Xi=[`onClick`,`onKeydown`],Zi={class:`proj-menu__icon`},Qi={class:`proj-menu__label`},$i=[`onClick`,`onKeydown`],ea={class:`proj-menu__icon`},ta={class:`proj-menu__label`},na={class:`proj-menu__title`,role:`presentation`},ra=[`onClick`,`onKeydown`],ia={class:`proj-menu__icon`},aa={class:`proj-menu__label`},oa={key:0,class:`proj-menu__hint`},sa=[`onClick`,`onKeydown`],ca={class:`proj-menu__icon`},la=[`src`],ua={class:`proj-menu__label`},da={class:`proj-menu__hint`},fa=[`onClick`,`onKeydown`],pa={class:`proj-menu__icon`},ma=[`src`],ha={class:`proj-menu__label`},ga=[`onClick`,`onKeydown`],_a={class:`proj-menu__icon`},va={class:`proj-menu__label`},ya=[`onClick`,`onKeydown`],ba={class:`proj-menu__icon`},xa={class:`proj-menu__label`},Sa={key:0,class:`proj-menu__hint`},Ca={key:1,class:`proj-menu__hint`},wa=[`onClick`,`onKeydown`],Ta={class:`proj-menu__icon`},Ea={class:`proj-menu__label`},Da={key:0,class:`proj-empty`},Oa={class:`proj-empty__title`},ka={class:`proj-empty__hint`},Aa={key:1,class:`proj-empty`},ja={class:`proj-empty__title`},Ma=$(s({__name:`WorkbenchProjectPanel`,props:{projects:{},selectedKey:{},loading:{type:Boolean}},emits:[`select`,`remove`],setup(t,{emit:o}){let s=t,l=o,g=q(()=>[...s.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)})),v=Y(``),b=Y(!1),ee=Y(!1),C=q(()=>!!v.value.trim()||b.value||ee.value),w=q(()=>{let e=v.value.trim().toLowerCase();return g.value.filter(t=>b.value&&t.stats.total===0||ee.value&&t.git&&t.git.isGitRepo===!1?!1:!e||t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))});function te(){v.value=``,b.value=!1,ee.value=!1}let O=q(()=>s.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})),k=q(()=>O.value.total>0?Math.round(O.value.done/O.value.total*100):0);function re(e){return e.git?e.git.isGitRepo===null?Q(`@WORKBENCH:未知`):e.git.isGitRepo?e.git.detached?Q(`@WORKBENCH:游离 HEAD`):e.git.branch||Q(`@WORKBENCH:未知`):``:``}function ie(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}let j=Y(null),N=Y(null);function oe(e,t){if(j.value===e.key){j.value=null;return}N.value=t.currentTarget,j.value=e.key}function se(){j.value=null}function ce(e){if(!j.value)return;let t=e.target;if(t&&!N.value?.contains(t)){for(let e of Array.from(document.querySelectorAll(`.proj-open-menu`)))if(e.contains(t))return;j.value=null}}f(()=>document.addEventListener(`mousedown`,ce,!0)),m(()=>document.removeEventListener(`mousedown`,ce,!0));let P=Pe(),le=Y(!1),R=Y(null);function ue(e){return P.lastCheckedAt!==null&&!P.isToolAvailable(e)}async function z(e){se();let t=await Re(e.path);t.success?V.success(t.message||Q(`@WORKBENCH:已在文件管理器中打开文件夹`)):V.error(t.error||Q(`@WORKBENCH:打开文件夹失败`))}async function B(e){se();let t=await Fe(e.path);t.success?V.success(t.message||Q(`@67CE7:已在终端中打开目录`)):V.error(t.error||Q(`@WORKBENCH:打开终端失败`))}async function H(e){se();let t=await Ke(e.path);t.success?V.success(Q(`@WORKBENCH:已在新标签页启动 g ui`)):V.error(t.error||Q(`@WORKBENCH:启动 g ui 失败`))}async function fe(e){if(se(),e.name)try{await navigator.clipboard.writeText(e.name),V.success(Q(`@67CE7:已复制文件夹名称`))}catch{V.error(Q(`@67CE7:复制失败`))}}async function me(e){let t=e.name||e.path,n=e.stats.total>0?Q(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。该项目的 {n} 条任务不会被删除,仍可在「全部项目」下查看。`,{name:t,n:e.stats.total}):Q(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。`,{name:t});try{await W.confirm(n,Q(`@WORKBENCH:移除项目`),{confirmButtonText:Q(`@WORKBENCH:移除`),cancelButtonText:Q(`@WORKBENCH:取消`),type:`warning`})}catch{return}l(`remove`,e)}async function U(e,t,n){if(se(),!await Ve()){V.warning(Q(`@67CE7:工具检测失败,请稍后重试`));return}if(!P.isToolAvailable(t)){R.value=t,le.value=!0;return}let r=await Ge(t,e.path,n);r.success?V.success(r.message||Q(`@67CE7:已用 {tool} 打开目录`,{tool:qe[t]})):V.error(`${Q(`@67CE7:打开失败: `)}${r.error??``}`)}return(o,s)=>{let f=d,m=ae;return A(),x(`section`,ti,[E(`header`,ni,[E(`h3`,ri,M(D(Q)(`@WORKBENCH:项目列表`)),1),E(`span`,ii,[C.value?(A(),x(F,{key:0},[_(M(D(Q)(`@WORKBENCH:匹配 {n}/{total} 个项目`,{n:w.value.length,total:t.projects.length})),1)],64)):(A(),x(F,{key:1},[_(M(t.projects.length),1)],64))])]),t.projects.length>0?(A(),x(`div`,ai,[E(`div`,oi,[y(f,{class:`proj__search-icon`,"aria-hidden":`true`},{default:G(()=>[y(D(ne))]),_:1}),I(E(`input`,{"onUpdate:modelValue":s[0]||=e=>v.value=e,class:`proj__search-input`,type:`search`,placeholder:D(Q)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":D(Q)(`@WORKBENCH:搜索项目名称或路径`),onKeydown:s[1]||=K(e=>v.value=``,[`esc`])},null,40,si),[[de,v.value]])]),E(`div`,ci,[E(`button`,{type:`button`,class:h([`proj__toggle`,{"is-on":b.value}]),"aria-pressed":b.value,title:D(Q)(`@WORKBENCH:只显示有任务的项目`),onClick:s[2]||=e=>b.value=!b.value},[E(`span`,null,M(D(Q)(`@WORKBENCH:只看有任务`)),1)],10,li),E(`button`,{type:`button`,class:h([`proj__toggle`,{"is-on":ee.value}]),"aria-pressed":ee.value,title:D(Q)(`@WORKBENCH:只显示 Git 仓库`),onClick:s[3]||=e=>ee.value=!ee.value},[E(`span`,null,M(D(Q)(`@WORKBENCH:隐藏非 Git`)),1)],10,ui)])])):r(``,!0),E(`ul`,di,[E(`li`,{class:h([`proj-item proj-item--all`,{"is-active":t.selectedKey===``,"is-running":O.value.running>0,"is-complete":O.value.total>0&&O.value.done>=O.value.total}]),role:`button`,tabindex:`0`,title:D(Q)(`@WORKBENCH:全部项目`),onClick:s[4]||=e=>l(`select`,null),onKeydown:[s[5]||=K(J(e=>l(`select`,null),[`prevent`]),[`enter`]),s[6]||=K(J(e=>l(`select`,null),[`prevent`]),[`space`])]},[E(`div`,pi,[y(f,{class:`proj-item__icon`},{default:G(()=>[y(D(a))]),_:1}),E(`span`,mi,M(D(Q)(`@WORKBENCH:全部项目`)),1),O.value.running>0?(A(),x(`span`,hi)):r(``,!0),E(`span`,gi,M(t.projects.length),1)]),O.value.running>0?(A(),x(`div`,_i,[E(`span`,vi,M(D(Q)(`@WORKBENCH:{n} 个执行中`,{n:O.value.running})),1)])):r(``,!0),O.value.total>0?(A(),x(`div`,{key:1,class:`proj-item__row3`,title:D(Q)(`@WORKBENCH:只统计项目列表里这些项目名下的任务`)},[E(`span`,bi,[E(`i`,{class:`proj-item__bar-fill`,style:p({width:k.value+`%`})},null,4)]),E(`span`,xi,M(D(Q)(`@WORKBENCH:{done}/{total} 任务完成`,{done:O.value.done,total:O.value.total})),1)],8,yi)):r(``,!0)],42,fi),(A(!0),x(F,null,S(w.value,a=>(A(),x(`li`,{key:a.key,class:h([`proj-item`,{"is-active":a.key===t.selectedKey,"is-running":a.stats.runningJobs>0,"is-complete":a.stats.total>0&&a.stats.done>=a.stats.total&&a.stats.runningJobs===0,"is-missing":a.exists===!1}]),role:`button`,tabindex:`0`,title:a.path,onClick:e=>l(`select`,a),onKeydown:[K(J(e=>l(`select`,a),[`self`,`prevent`]),[`enter`]),K(J(e=>l(`select`,a),[`self`,`prevent`]),[`space`])]},[E(`div`,Ci,[y(f,{class:`proj-item__icon`},{default:G(()=>[y(D(T))]),_:1}),E(`span`,wi,M(a.name),1),E(`span`,Ti,[a.stats.runningJobs>0?(A(),x(`span`,Ei)):r(``,!0),a.isCurrent?(A(),x(`span`,Di,M(D(Q)(`@WORKBENCH:当前`)),1)):r(``,!0)])]),E(`div`,Oi,[a.exists===!1?(A(),x(`span`,ki,M(D(Q)(`@WORKBENCH:目录不存在`)),1)):(A(),x(F,{key:1},[re(a)?(A(),x(`span`,Ai,[ie(a)?(A(),i(Oe,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):r(``,!0),E(`span`,ji,M(re(a)),1)])):r(``,!0),a.git&&a.git.ahead>0?(A(),x(`span`,Mi,`↑`+M(a.git.ahead),1)):r(``,!0),a.git&&a.git.behind>0?(A(),x(`span`,Ni,`↓`+M(a.git.behind),1)):r(``,!0),a.git&&a.git.changed>0?(A(),x(`span`,Pi,`●`+M(a.git.changed),1)):r(``,!0)],64)),E(`span`,Fi,M(D(Hn)(a.stats.lastActiveAt)),1)]),a.stats.total>0?(A(),x(`div`,Ii,[E(`span`,Li,[E(`i`,{class:`proj-item__bar-fill`,style:p({width:a.stats.progress+`%`})},null,4)]),E(`span`,Ri,M(D(Q)(`@WORKBENCH:{done}/{total} 任务完成`,{done:a.stats.done,total:a.stats.total})),1)])):r(``,!0),E(`div`,zi,[a.exists===!1?(A(),x(`button`,{key:0,type:`button`,class:`proj-item__action proj-item__action--danger`,title:D(Q)(`@WORKBENCH:从清单移除`),"aria-label":`${D(Q)(`@WORKBENCH:从清单移除`)} ${a.name}`,onClick:J(e=>me(a),[`stop`])},[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(pe))]),_:1})],8,Bi)):(A(),x(`button`,{key:1,type:`button`,class:`proj-item__action`,title:D(Q)(`@WORKBENCH:打开文件夹`),"aria-label":`${D(Q)(`@WORKBENCH:打开文件夹`)} ${a.name}`,onClick:J(e=>z(a),[`stop`])},[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(n))]),_:1})],8,Vi)),a.exists===!1?r(``,!0):(A(),i(m,{key:2,visible:j.value===a.key,trigger:`manual`,placement:`right-start`,width:272,"show-arrow":!1,offset:6,"popper-class":`proj-open-menu`},{reference:G(()=>[E(`button`,{type:`button`,class:h([`proj-item__action`,{"is-open":j.value===a.key}]),title:D(Q)(`@WORKBENCH:打开方式`),"aria-label":`${D(Q)(`@WORKBENCH:打开方式`)} ${a.name}`,"aria-expanded":j.value===a.key,"aria-haspopup":`menu`,onClick:J(e=>oe(a,e),[`stop`])},[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(u))]),_:1})],10,Hi)]),default:G(()=>[j.value===a.key?(A(),x(`ul`,{key:0,class:`proj-menu`,role:`menu`,"aria-label":D(Q)(`@WORKBENCH:打开方式`)},[E(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>z(a),onKeydown:[K(J(e=>z(a),[`prevent`]),[`enter`]),K(J(e=>z(a),[`prevent`]),[`space`])]},[E(`span`,Gi,[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(n))]),_:1})]),E(`span`,Ki,M(D(Q)(`@WORKBENCH:在文件管理器中打开`)),1)],40,Wi),E(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>B(a),onKeydown:[K(J(e=>B(a),[`prevent`]),[`enter`]),K(J(e=>B(a),[`prevent`]),[`space`])]},[E(`span`,Ji,[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(c))]),_:1})]),E(`span`,Yi,M(D(Q)(`@WORKBENCH:在终端中打开`)),1)],40,qi),E(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>H(a),onKeydown:[K(J(e=>H(a),[`prevent`]),[`enter`]),K(J(e=>H(a),[`prevent`]),[`space`])]},[E(`span`,Zi,[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(e))]),_:1})]),E(`span`,Qi,M(D(Q)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,Xi),E(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>fe(a),onKeydown:[K(J(e=>fe(a),[`prevent`]),[`enter`]),K(J(e=>fe(a),[`prevent`]),[`space`])]},[E(`span`,ea,[y(f,{"aria-hidden":`true`},{default:G(()=>[y(D(L))]),_:1})]),E(`span`,ta,M(D(Q)(`@67CE7:复制文件夹名称`)),1)],40,$i),s[8]||=E(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),E(`li`,na,M(D(Q)(`@WORKBENCH:用工具打开`)),1),(A(!0),x(F,null,S(D(We),e=>(A(),x(`li`,{key:e.id,class:h([`proj-menu__item`,{"is-missing":ue(e.id)}]),role:`menuitem`,tabindex:`-1`,onClick:t=>U(a,e.id),onKeydown:[K(J(t=>U(a,e.id),[`prevent`]),[`enter`]),K(J(t=>U(a,e.id),[`prevent`]),[`space`])]},[E(`span`,ia,[y(Oe,{"icon-class":e.icon,class:h({"icon-invert-dark":e.id===`codex`})},null,8,[`icon-class`,`class`])]),E(`span`,aa,M(D(Q)(e.labelKey)),1),ue(e.id)?(A(),x(`span`,oa,M(D(Q)(`@67CE7:未安装`)),1)):r(``,!0)],42,ra))),128)),E(`li`,{class:h([`proj-menu__item`,{"is-missing":ue(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`claude`),onKeydown:[K(J(e=>U(a,`claude`),[`prevent`]),[`enter`]),K(J(e=>U(a,`claude`),[`prevent`]),[`space`])]},[E(`span`,ca,[E(`img`,{src:D(ze),alt:``,class:`proj-menu__img`},null,8,la)]),E(`span`,ua,M(D(Q)(`@67CE7:用 Claude Code 打开`)),1),E(`span`,da,M(ue(`claude`)?D(Q)(`@67CE7:未安装`):D(Q)(`@67CE7:默认权限`)),1)],42,sa),E(`li`,{class:h([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`claude`,`bypassPermissions`),onKeydown:[K(J(e=>U(a,`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),K(J(e=>U(a,`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[E(`span`,pa,[E(`img`,{src:D(ze),alt:``,class:`proj-menu__img`},null,8,ma)]),E(`span`,ha,M(D(Q)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],42,fa),E(`li`,{class:h([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`opencode`,`auto`),onKeydown:[K(J(e=>U(a,`opencode`,`auto`),[`prevent`]),[`enter`]),K(J(e=>U(a,`opencode`,`auto`),[`prevent`]),[`space`])]},[E(`span`,_a,[y(Oe,{"icon-class":`opencode`})]),E(`span`,va,M(D(Q)(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],42,ga),E(`li`,{class:h([`proj-menu__item`,{"is-missing":ue(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`codex`,`sandboxed`),onKeydown:[K(J(e=>U(a,`codex`,`sandboxed`),[`prevent`]),[`enter`]),K(J(e=>U(a,`codex`,`sandboxed`),[`prevent`]),[`space`])]},[E(`span`,ba,[y(Oe,{"icon-class":`codex`,class:`icon-invert-dark`})]),E(`span`,xa,M(D(Q)(`@67CE7:用 Codex 打开(自动批准)`)),1),ue(`codex`)?(A(),x(`span`,Ca,M(D(Q)(`@67CE7:未安装`)),1)):(A(),x(`span`,Sa,M(D(Q)(`@67CE7:沙箱内`)),1))],42,ya),E(`li`,{class:h([`proj-menu__item proj-menu__item--danger`,{"is-missing":ue(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(a,`codex`,`bypass`),onKeydown:[K(J(e=>U(a,`codex`,`bypass`),[`prevent`]),[`enter`]),K(J(e=>U(a,`codex`,`bypass`),[`prevent`]),[`space`])]},[E(`span`,Ta,[y(Oe,{"icon-class":`codex`,class:`icon-invert-dark`})]),E(`span`,Ea,M(D(Q)(`@67CE7:用 Codex 打开(完全批准)`)),1)],42,wa)],8,Ui)):r(``,!0)]),_:2},1032,[`visible`]))])],42,Si))),128)),!t.loading&&t.projects.length===0?(A(),x(`li`,Da,[E(`p`,Oa,M(D(Q)(`@WORKBENCH:尚无项目`)),1),E(`p`,ka,M(D(Q)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):r(``,!0),!t.loading&&t.projects.length>0&&w.value.length===0?(A(),x(`li`,Aa,[E(`p`,ja,M(D(Q)(`@WORKBENCH:没有匹配的项目`)),1),E(`button`,{type:`button`,class:`proj-empty__clear`,onClick:te},M(D(Q)(`@WORKBENCH:清除筛选`)),1)])):r(``,!0)]),y(Ie,{modelValue:le.value,"onUpdate:modelValue":s[7]||=e=>le.value=e,tool:R.value},null,8,[`modelValue`,`tool`])])}}}),[[`__scopeId`,`data-v-79e992c7`]]),Na=[140,170,200,230,260,290,320,350];function Pa(e){return(e||``).replace(/\\/g,`/`).trim().toLowerCase()}function Fa(e){let t=Pa(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,Na[(n>>>0)%Na.length]}function Ia(e){return{"--tag-hue":String(Fa(e))}}X(),z(),b(),fe();var La={class:`kb`},Ra={class:`kb__toolbar`},za={class:`kb__views`,role:`tablist`},Ba=[`aria-selected`],Va=[`aria-selected`],Ha={class:`kb__filters`},Ua={class:`kb__search`},Wa=[`placeholder`,`aria-label`],Ga=[`aria-hidden`],Ka={class:`kb-col__head`},qa={class:`kb-col__title`},Ja={class:`kb-col__count`},Ya={class:`kb-col__list`},Xa=[`data-task-id`,`aria-current`,`onClick`,`onKeydown`],Za=[`title`,`aria-label`,`onClick`],Qa=[`src`,`alt`,`onError`],$a={key:0,class:`kb-card__cover-more`,"aria-hidden":`true`},eo={class:`kb-card__row1`},to=[`title`],no=[`title`],ro={class:`kb-card__time`},io=[`title`],ao=[`title`],oo={key:3,class:`kb-card__live`},so={class:`kb-card__live-meta`},co=[`title`],lo=[`title`],uo={key:2,class:`kb-card__live-pid`},fo={key:3,class:`kb-card__live-silent`},po=[`title`],mo=[`title`],ho={class:`kb-card__live-tag`},go=[`title`],_o={class:`kb-card__live-tag`},vo=[`title`],yo=[`title`],bo={class:`kb-card__reply-text`},xo=[`title`,`onClick`],So={class:`kb-card__actions`},Co=[`title`,`onClick`],wo=[`title`,`aria-label`,`onClick`],To=[`title`,`aria-label`,`onClick`],Eo=[`title`,`aria-label`,`onClick`],Do=[`title`,`aria-label`,`onClick`],Oo={key:0,class:`kb-col__add`},ko={key:1,class:`kb-col__empty`},Ao={key:2,class:`kb-col__more`},jo={key:1,class:`kb__table-wrap`},Mo={class:`kb-table`},No={class:`kb-table__th`},Po={class:`kb-table__th kb-table__th--narrow`},Fo={class:`kb-table__th kb-table__th--time`},Io=[`onClick`,`onKeydown`],Lo={class:`kb-table__td`},Ro=[`title`,`onClick`],zo={class:`kb-table__name`},Bo=[`title`],Vo={key:2,class:`kb-table__live`},Ho=[`title`],Uo={key:1,class:`kb-table__live-silent`},Wo={key:3,class:`kb-table__live kb-table__live--reply`},Go=[`title`],Ko={class:`kb-table__td`},qo={class:`kb-table__td kb-table__td--num`},Jo=[`title`],Yo={class:`kb-table__dur`},Xo=[`title`],Zo={key:0},Qo={class:`kb-table__td kb-table__empty`,colspan:`3`},$o=`wb.boardView.v1`,es=30,ts=$(s({__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(e,{emit:t}){let n=e,a=t,o=Y((()=>{try{return localStorage.getItem($o)===`list`?`list`:`kanban`}catch{return`kanban`}})());P(o,e=>{try{localStorage.setItem($o,e)}catch{}});let s=Y(``),c=[{key:`todo`,labelKey:`@WORKBENCH:待处理`},{key:`doing`,labelKey:`@WORKBENCH:进行中`},{key:`done`,labelKey:`@WORKBENCH:已完成`}],l=q(()=>{let e=s.value.trim().toLowerCase();return n.tasks.filter(t=>!e||(t.title||``).toLowerCase().includes(e)||(t.desc||``).toLowerCase().includes(e))}),u=Y(es);P(s,()=>{u.value=es});let m=q(()=>{let e=c.map(e=>{let t=e.key===`done`?l.value.filter(t=>t.column===e.key).sort(ee):l.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-u.value):0,tasks:e.key===`done`?e.all.slice(0,u.value):e.all,collapsed:t&&e.all.length===0&&e.key!==`todo`}))}),g=q(()=>({gridTemplateColumns:m.value.map(e=>e.collapsed?`minmax(0, 0fr)`:`minmax(0, 1fr)`).join(` `)})),v=Y(!1);f(()=>{requestAnimationFrame(()=>requestAnimationFrame(()=>{v.value=!0}))});function b(e){return Kn(e)}function ee(e,t){return b(t).localeCompare(b(e))}function C(e){return qn(e)}function w(e){return Jn(e)}function T(e){return Qn(e)}function te(e){let t=(e.autoCompleted?.reason||``).trim(),n=Q(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`);return t?`${n}\n${t}`:n}let O=q(()=>[...l.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 re(e){return n.projectLabels[e.projectPath]||``}function ie(e){return e.lastJobStatus===`error`}function j(e){return e.live?.agent||e.lastJobAgent||``}function ae(e){let t=e.live;if(!t)return``;let n=Xn(e),r=t.lastLine||t.lastThought||t.lastTool;return r?`${n} · ${r}`:n}function N(e){return Array.isArray(e.images)?e.images:[]}let oe=Y(new Set);function se(e){oe.value=new Set(oe.value).add(e)}function ce(e){let t=N(e);return oe.value.size===0?t:t.filter(e=>!oe.value.has(e.id))}function L(e){return`/api/workbench/attachments/${e}/raw`}let R=Y(null);function ue(e,t=0){let n=ce(e);n.length!==0&&(R.value={urls:n.map(e=>L(e.id)),index:t})}function z(){R.value=null}function B(e){return e.originalName?`${Q(`@WORKBENCH:查看图片`)} · ${e.originalName}`:Q(`@WORKBENCH:查看图片`)}return(t,n)=>{let l=d,f=le;return A(),x(`div`,La,[E(`div`,Ra,[E(`div`,za,[E(`button`,{type:`button`,role:`tab`,class:h([`kb__view-btn`,{"is-active":o.value===`kanban`}]),"aria-selected":o.value===`kanban`,onClick:n[0]||=e=>o.value=`kanban`},M(D(Q)(`@WORKBENCH:看板视图`)),11,Ba),E(`button`,{type:`button`,role:`tab`,class:h([`kb__view-btn`,{"is-active":o.value===`list`}]),"aria-selected":o.value===`list`,onClick:n[1]||=e=>o.value=`list`},M(D(Q)(`@WORKBENCH:列表视图`)),11,Va)]),E(`div`,Ha,[E(`div`,Ua,[y(l,{class:`kb__search-icon`},{default:G(()=>[y(D(ne))]),_:1}),I(E(`input`,{class:`kb__search-input`,type:`search`,"onUpdate:modelValue":n[2]||=e=>s.value=e,placeholder:D(Q)(`@WORKBENCH:搜索任务标题或描述`),"aria-label":D(Q)(`@WORKBENCH:搜索任务标题或描述`)},null,8,Wa),[[de,s.value]])])])]),o.value===`kanban`?(A(),x(`div`,{key:0,class:h([`kb__columns`,{"is-animated":v.value}]),style:p(g.value)},[(A(!0),x(F,null,S(m.value,t=>(A(),x(`section`,{key:t.key,class:h([`kb-col`,[`kb-col--`+t.key,{"is-collapsed":t.collapsed}]]),"aria-hidden":t.collapsed?`true`:void 0},[E(`header`,Ka,[E(`span`,{class:h([`kb-col__dot`,{"is-live":t.total>0}]),"aria-hidden":`true`},null,2),E(`h3`,qa,M(D(Q)(t.labelKey)),1),E(`span`,Ja,M(t.total),1)]),E(`ul`,Ya,[(A(!0),x(F,null,S(t.tasks,t=>(A(),x(`li`,{key:t.id,class:h([`kb-card`,{"is-running":t.runningJobs>0,"has-error":ie(t),"is-opened":t.id===e.openedTaskId}]),"data-task-id":t.id,"aria-current":t.id===e.openedTaskId?`true`:void 0,role:`button`,tabindex:`0`,onClick:e=>a(`open-task`,t),onKeydown:[K(J(e=>a(`open-task`,t),[`prevent`]),[`enter`]),K(J(e=>a(`open-task`,t),[`prevent`]),[`space`])]},[ce(t).length>0?(A(),x(`button`,{key:0,type:`button`,class:`kb-card__cover`,title:B(ce(t)[0]),"aria-label":B(ce(t)[0]),onClick:J(e=>ue(t),[`stop`]),onKeydown:n[3]||=J(()=>{},[`stop`])},[E(`img`,{class:`kb-card__cover-img`,src:L(ce(t)[0].id),alt:ce(t)[0].originalName,loading:`lazy`,decoding:`async`,onError:e=>se(ce(t)[0].id)},null,40,Qa),ce(t).length>1?(A(),x(`span`,$a,` +`+M(ce(t).length-1),1)):r(``,!0)],40,Za)):r(``,!0),E(`div`,eo,[e.showProjectLabel&&re(t)?(A(),x(`span`,{key:0,class:`kb-card__project-chip`,style:p(D(Ia)(t.projectPath)),title:t.projectPath},M(re(t)),13,to)):r(``,!0),E(`p`,{class:`kb-card__title`,title:k(t)},M(k(t)||D(Q)(`@WORKBENCH:未命名任务`)),9,no),E(`span`,ro,M(D(Hn)(C(t))),1)]),w(t)?(A(),x(`p`,{key:1,class:`kb-card__spent`,title:T(t)},M(D(Yn)(t)),9,io)):r(``,!0),t.autoCompleted?(A(),x(`p`,{key:2,class:`kb-card__auto-done`,title:te(t)},M(D(Q)(`@WORKBENCH:AI 判定完成`)),9,ao)):r(``,!0),t.live?(A(),x(`div`,oo,[E(`p`,so,[j(t)?(A(),x(`span`,{key:0,class:`kb-card__live-agent`,title:D(je)(j(t))},[y(He,{executor:j(t),class:`kb-card__live-agent-icon`},null,8,[`executor`])],8,co)):r(``,!0),E(`span`,null,M(D(Xn)(t)),1),t.live.toolCallCount?(A(),x(`span`,{key:1,title:t.live.toolMix||``},M(D(Q)(`@WORKBENCH:工具 {n} 次`,{n:t.live.toolCallCount})),9,lo)):r(``,!0),t.live.pid?(A(),x(`span`,uo,`PID `+M(t.live.pid),1)):r(``,!0),D(Xr)(t.live.silentMs)===null?r(``,!0):(A(),x(`span`,fo,M(D(Q)(`@WORKBENCH:静默 {elapsed}`,{elapsed:D(Un)(D(Xr)(t.live.silentMs))})),1))]),t.live.lastTool?(A(),x(`p`,{key:0,class:`kb-card__live-line is-tool`,title:t.live.lastTool},M(t.live.lastTool),9,po)):r(``,!0),t.live.lastThought?(A(),x(`p`,{key:1,class:`kb-card__live-line is-thought`,title:t.live.lastThought},[E(`span`,ho,M(D(Q)(`@WORKBENCH:最近思考`)),1),_(M(t.live.lastThought),1)],8,mo)):r(``,!0),t.live.lastLine?(A(),x(`p`,{key:2,class:`kb-card__live-line`,title:t.live.lastLine},[E(`span`,_o,M(D(Q)(`@WORKBENCH:最新回复`)),1),_(M(t.live.lastLine),1)],8,go)):r(``,!0)])):t.lastReply?(A(),x(`p`,{key:4,class:`kb-card__reply`,title:t.lastReply},[j(t)?(A(),x(`span`,{key:0,class:`kb-card__quote-agent`,title:D(je)(j(t))},[y(He,{executor:j(t),class:`kb-card__quote-agent-icon`},null,8,[`executor`])],8,yo)):r(``,!0),E(`span`,bo,M(t.lastReply),1)],8,vo)):r(``,!0),ie(t)&&t.runningJobs===0?(A(),x(`button`,{key:5,type:`button`,class:`kb-card__retry`,title:D(Q)(`@WORKBENCH:重新执行这条任务`),onClick:J(e=>a(`run-task`,t),[`stop`]),onKeydown:n[4]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:重试`)),41,xo)):r(``,!0),E(`div`,So,[t.runningJobs===0?(A(),x(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:D(Q)(`@WORKBENCH:执行`),onClick:J(e=>a(`run-task`,t),[`stop`]),onKeydown:n[5]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:执行`)),41,Co)):(A(),x(`button`,{key:1,type:`button`,class:`kb-card__btn kb-card__btn--stop`,title:D(Q)(`@WORKBENCH:停止`),"aria-label":D(Q)(`@WORKBENCH:停止`),onClick:J(e=>a(`stop-task`,t),[`stop`]),onKeydown:n[6]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:停止`)),41,wo)),t.column===`done`?t.manualDoneAt?(A(),x(`button`,{key:3,type:`button`,class:`kb-card__btn`,title:D(Q)(`@WORKBENCH:撤销完成标记,退回待处理`),"aria-label":D(Q)(`@WORKBENCH:撤销完成标记`),onClick:J(e=>a(`reopen-task`,t),[`stop`]),onKeydown:n[8]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:撤销`)),41,Eo)):r(``,!0):(A(),x(`button`,{key:2,type:`button`,class:`kb-card__btn kb-card__btn--done`,title:D(Q)(`@WORKBENCH:标记为已完成`),"aria-label":D(Q)(`@WORKBENCH:标记为已完成`),onClick:J(e=>a(`complete-task`,t),[`stop`]),onKeydown:n[7]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:完成`)),41,To)),E(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:D(Q)(`@WORKBENCH:删除`),"aria-label":D(Q)(`@WORKBENCH:删除`),onClick:J(e=>a(`delete-task`,t),[`stop`]),onKeydown:n[9]||=J(()=>{},[`stop`])},`×`,40,Do)])],42,Xa))),128)),t.key===`todo`?(A(),x(`li`,Oo,[E(`button`,{type:`button`,class:h([`kb-col__add-btn`,{"kb-col__add-btn--solo":t.tasks.length===0}]),onClick:n[10]||=e=>a(`create-task`)},[n[13]||=E(`span`,{class:`kb-col__add-plus`,"aria-hidden":`true`},`+`,-1),E(`span`,null,M(D(Q)(`@WORKBENCH:新建任务`)),1)],2)])):t.tasks.length===0?(A(),x(`li`,ko,[E(`span`,null,M(D(Q)(`@WORKBENCH:暂无任务`)),1)])):r(``,!0),t.hidden>0?(A(),x(`li`,Ao,[E(`button`,{type:`button`,class:`kb-col__more-btn`,onClick:n[11]||=e=>u.value+=es},M(D(Q)(`@WORKBENCH:显示更早的 {n} 条`,{n:Math.min(es,t.hidden)})),1)])):r(``,!0)])],10,Ga))),128))],6)):(A(),x(`div`,jo,[E(`table`,Mo,[E(`thead`,null,[E(`tr`,null,[E(`th`,No,M(D(Q)(`@WORKBENCH:任务`)),1),E(`th`,Po,M(D(Q)(`@WORKBENCH:状态`)),1),E(`th`,Fo,M(D(Q)(`@WORKBENCH:时间`)),1)])]),E(`tbody`,null,[(A(!0),x(F,null,S(O.value,t=>(A(),x(`tr`,{key:t.id,class:`kb-table__row`,tabindex:`0`,onClick:e=>a(`open-task`,t),onKeydown:[K(J(e=>a(`open-task`,t),[`prevent`]),[`enter`]),K(J(e=>a(`open-task`,t),[`prevent`]),[`space`])]},[E(`td`,Lo,[ce(t).length>0?(A(),x(`button`,{key:0,type:`button`,class:`kb-table__shots`,title:B(ce(t)[0]),onClick:J(e=>ue(t),[`stop`]),onKeydown:n[12]||=J(()=>{},[`stop`])},M(D(Q)(`@WORKBENCH:{n} 张图`,{n:ce(t).length})),41,Ro)):r(``,!0),E(`span`,zo,M(k(t)||D(Q)(`@WORKBENCH:未命名任务`)),1),e.showProjectLabel&&re(t)?(A(),x(`span`,{key:1,class:`kb-table__project`,style:p(D(Ia)(t.projectPath)),title:t.projectPath},M(re(t)),13,Bo)):r(``,!0),t.live?(A(),x(`span`,Vo,[j(t)?(A(),x(`span`,{key:0,class:`kb-table__agent`,title:D(je)(j(t))},[y(He,{executor:j(t),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Ho)):r(``,!0),_(` `+M(ae(t))+` `,1),D(Xr)(t.live.silentMs)===null?r(``,!0):(A(),x(`span`,Uo,M(D(Q)(`@WORKBENCH:静默 {elapsed}`,{elapsed:D(Un)(D(Xr)(t.live.silentMs))})),1))])):t.lastReply?(A(),x(`span`,Wo,[j(t)?(A(),x(`span`,{key:0,class:`kb-table__agent`,title:D(je)(j(t))},[y(He,{executor:j(t),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Go)):r(``,!0),_(M(t.lastReply),1)])):r(``,!0)]),E(`td`,Ko,[E(`span`,{class:h([`kb-table__status`,`is-`+t.column])},M(D(Q)(c.find(e=>e.key===t.column).labelKey)),3)]),E(`td`,qo,[E(`span`,{class:`kb-table__time`,title:T(t)},[w(t)?(A(),x(F,{key:0},[E(`span`,Yo,M(D(Yn)(t)),1),n[14]||=E(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):r(``,!0),t.autoCompleted?(A(),x(F,{key:1},[E(`span`,{class:`kb-table__auto-done`,title:te(t)},M(D(Q)(`@WORKBENCH:AI 判定完成`)),9,Xo),n[15]||=E(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):r(``,!0),E(`span`,null,M(D(Hn)(C(t))),1)],8,Jo)])],40,Io))),128)),O.value.length===0?(A(),x(`tr`,Zo,[E(`td`,Qo,M(D(Q)(`@WORKBENCH:暂无任务`)),1)])):r(``,!0)])])])),R.value?(A(),i(f,{key:2,"url-list":R.value.urls,"initial-index":R.value.index,"hide-on-click-modal":!0,teleported:!0,onClose:z},null,8,[`url-list`,`initial-index`])):r(``,!0)])}}}),[[`__scopeId`,`data-v-efc67236`]]);X(),z(),b();var ns=[`title`,`aria-label`],rs={class:`tep__btn-name`},is={class:`tep__item`},as={class:`tep__item-name`},os=[`title`],ss={key:2,class:`tep__item-missing`},cs=$(s({__name:`TaskExecutorPicker`,props:{title:{}},setup(e){let n=e,{active:a,availability:o,choose:s,executorModelText:c,executorModelTitle:l}=mr(),u=Pe();f(()=>{u.fetchExecutorModels()});function p(){return[n.title,l(a.value)].filter(Boolean).join(` · `)}return(e,n)=>{let u=d,f=t,m=be,h=C;return A(),i(h,{trigger:`click`,class:`tep`,onCommand:D(s)},{dropdown:G(()=>[y(m,null,{default:G(()=>[(A(!0),x(F,null,S(D(Ae),e=>(A(),i(f,{key:e.id,command:e.id,disabled:!D(o)[e.id]},{default:G(()=>[E(`span`,is,[y(He,{executor:e.id,class:`tep__item-icon`},null,8,[`executor`]),E(`span`,as,M(e.name),1),D(c)(e.id)?(A(),x(`span`,{key:0,class:`tep__item-model`,title:D(l)(e.id)},M(D(c)(e.id)),9,os)):r(``,!0),D(a)===e.id?(A(),i(u,{key:1,class:`tep__item-check`},{default:G(()=>[y(D(ve))]),_:1})):D(o)[e.id]?r(``,!0):(A(),x(`span`,ss,M(D(Q)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:G(()=>[E(`button`,{type:`button`,class:`tep__btn`,title:p(),"aria-label":D(Q)(`@WORKBENCH:任务执行器`)},[y(He,{executor:D(a),class:`tep__btn-icon`},null,8,[`executor`]),E(`span`,rs,M(D(je)(D(a))),1),y(u,{class:`tep__btn-caret`},{default:G(()=>[y(D(ie))]),_:1})],8,ns)]),_:1},8,[`onCommand`])}}}),[[`__scopeId`,`data-v-beca42f2`]]);X(),z(),b(),fe();var ls={class:`acs__head`},us=[`title`,`aria-label`],ds={class:`acs__title`},fs=[`title`,`aria-label`],ps={class:`acs__convs`},ms={class:`acs__chat`},hs=[`data-theme`],gs={key:0,class:`acs__foot`},_s={key:0,class:`acs__notice`},vs={class:`acs__foot-label`},ys={class:`acs__foot-hint`},bs=$(s({__name:`AgentChatSurface`,props:{title:{},active:{type:Boolean},allowDispatch:{type:Boolean},dispatchUseDefaultPrompt:{type:Boolean},placeholder:{}},setup(e){let t=e,{active:n}=mr(),a=Me(),{theme:o}=Le(),s=q(()=>o.value===`dark`?`dark`:`light`),{sessions:c,sessionsLoading:l,currentSessionId:u,messages:d,isStreaming:p,pendingQuestion:m,answeringQuestion:g,isSessionGenerating:_,currentEngine:v,pendingEngine:b,isEngineLocked:S,pickEngine:ee,loadSessions:C,loadSession:w,deleteSession:T,renameSession:te,newSession:k,sendMessage:ne,retryTurn:re,answerQuestion:ie,stop:j,inputContextUsage:ae,queuedMessages:oe,queuePaused:se,removeQueuedMessage:ce,flushQueued:le}=it(),L=q(()=>S.value?v.value:b.value);function R(e){S.value||ee(e)}let ue=q(()=>t.allowDispatch!==!1&&L.value!==`gai`),z=q(()=>Ye(c.value,_)),de=Je(),B=$e(),fe=nt(),pe=q(()=>z.value.find(e=>e.id===u.value)?.title||``),me=Y(null),{width:U,narrow:he}=ot(me),W=Y(`chat`),ge=Y(null);function G(e=!0){ge.value?.scrollToBottom?.(e)}async function _e(e){let r=a.aiRequestBudget?.maxUserChars||0;r>0&&e.text.length>r&&V.warning(Q(`@WORKBENCH:消息较长({n} 字符),超出部分会被省略后进入上下文 —— 大材料建议存成文件,在消息里给出文件路径`,{n:e.text.length.toLocaleString()})),await ne(e.text,e.files,{allowDispatch:t.allowDispatch===!0,dispatchExecutor:n.value,dispatchUseDefaultPrompt:t.dispatchUseDefaultPrompt!==!1}),await O(),G()}function ve(e){w(e),W.value=`chat`}function ye(){k(),W.value=`chat`}return P(()=>d.value.length,()=>{O(()=>G(!1))}),P(()=>t.active,e=>{e&&(C().catch(()=>{}),O(()=>G(!1)))}),P(he,e=>{e||(W.value=`chat`)}),f(()=>{C().catch(()=>{}),O(()=>G(!1))}),(t,n)=>(A(),x(`div`,{ref_key:`rootRef`,ref:me,class:`acs`},[E(`div`,ls,[D(he)&&W.value===`list`?(A(),x(`button`,{key:0,type:`button`,class:`acs__icon-btn`,title:D(Q)(`@EDITOR:返回对话`),"aria-label":D(Q)(`@EDITOR:返回对话`),onClick:n[0]||=e=>W.value=`chat`},[...n[2]||=[E(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[E(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),E(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,us)):r(``,!0),E(`span`,ds,M(e.title||D(Q)(`@WORKBENCH:g ai 对话`)),1),n[4]||=E(`span`,{class:`acs__spacer`},null,-1),!D(he)||W.value===`chat`?(A(),i(dt,{key:1,class:`acs__engine`,engine:L.value,locked:D(S),onSelect:R},null,8,[`engine`,`locked`])):r(``,!0),!D(he)||W.value===`chat`?(A(),i(ft,{key:2,class:`acs__copy`,messages:D(d),title:pe.value,engine:D(et)(L.value)},null,8,[`messages`,`title`,`engine`])):r(``,!0),D(he)&&W.value===`chat`?(A(),x(`button`,{key:3,type:`button`,class:`acs__icon-btn`,title:D(Q)(`@EDITOR:会话列表`),"aria-label":D(Q)(`@EDITOR:会话列表`),onClick:n[1]||=e=>W.value=`list`},[...n[3]||=[H(`<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-b06c9f52><line x1="8" y1="6" x2="21" y2="6" data-v-b06c9f52></line><line x1="8" y1="12" x2="21" y2="12" data-v-b06c9f52></line><line x1="8" y1="18" x2="21" y2="18" data-v-b06c9f52></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-b06c9f52></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-b06c9f52></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-b06c9f52></line></svg>`,1)]],8,fs)):r(``,!0)]),E(`div`,{class:h([`acs__body`,{"is-wide":!D(he)}])},[I(E(`div`,ps,[y(D(Ee),{"show-search":!0,items:z.value,"active-id":D(u),loading:D(l),labels:D(de),onSelect:ve,onNew:ye,onRename:D(te),onDelete:D(T)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[N,!D(he)||W.value===`list`]]),I(E(`div`,ms,[y(D(we),{ref_key:`chatRef`,ref:ge,"show-input":!1,messages:D(d),"assistant-name":D(Qe),"assistant-avatar":D(rt),theme:s.value,question:D(m),"question-submitting":D(g),"question-labels":D(B),"plan-config":{labels:{title:D(Q)(`@AGENT:计划`),raw:D(Q)(`@AGENT:原始参数`)}},"message-rail-config":D(Xe),"message-meta-config":D(tt),onAnswer:D(ie),onRetry:D(re)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`message-rail-config`,`message-meta-config`,`onAnswer`,`onRetry`])],512),[[N,!D(he)||W.value===`chat`]]),D(U)>0?(A(),x(`div`,{key:0,class:`acs__composer acu-root`,"data-theme":s.value},[y(D(Te),{generating:D(p),"allow-queue":!0,queued:D(oe),"queue-paused":D(se),"queue-labels":D(fe),placeholder:e.placeholder||(D(p)?D(Q)(`@AGENT:生成中,发送后会排队,等本轮跑完自动接上…`):D(Q)(`@AGENT:输入消息,Enter 发送`)),"upload-config":{accept:D(Ze)},"context-usage":D(ae),onSend:_e,onStop:D(j),onUnqueue:D(ce),onFlushQueued:D(le)},null,8,[`generating`,`queued`,`queue-paused`,`queue-labels`,`placeholder`,`upload-config`,`context-usage`,`onStop`,`onUnqueue`,`onFlushQueued`])],8,hs)):r(``,!0)],2),e.allowDispatch&&W.value===`chat`?(A(),x(`div`,gs,[ue.value?(A(),x(`p`,_s,M(D(Q)(`@WORKBENCH:当前引擎「{name}」只能对话,不能派发任务 —— 切到内置 g ai 才能派活`,{name:D(et)(L.value)})),1)):(A(),x(F,{key:1},[E(`span`,vs,M(D(Q)(`@WORKBENCH:派发执行器`)),1),y(cs,{title:D(Q)(`@WORKBENCH:它派出去的任务由这个执行器跑(与执行按钮的临时切换共用)`)},null,8,[`title`]),E(`span`,ys,M(D(Q)(`@WORKBENCH:任务会落到看板,跑完有完成提示`)),1)],64))])):r(``,!0)],512))}}),[[`__scopeId`,`data-v-b06c9f52`]]);X(),z(),b(),fe();var xs=[`title`,`aria-label`],Ss={class:`oc__rail-text`},Cs={class:`oc__head`},ws={class:`oc__title`},Ts=[`disabled`,`title`],Es=[`title`,`aria-label`],Ds={class:`oc__state-label`},Os={class:`oc__state-value`},ks={class:`oc__state-meta`},As=[`aria-label`],js=[`aria-selected`],Ms=[`aria-selected`],Ns={class:`oc__report-head`},Ps={class:`oc__panel-title`},Fs=[`value`,`title`,`aria-label`],Is=[`value`],Ls=[`disabled`,`title`],Rs={class:`oc__report-list`},zs={key:0,class:`rp`},Bs={class:`rp__head`},Vs=[`title`],Hs={class:`rp__count`},Us={class:`rp__time`},Ws=[`title`],Gs=[`aria-valuenow`,`aria-label`],Ks={class:`rp__percent`},qs={class:`rp__percent-tag`},Js={key:1,class:`rp__body`},Ys=[`title`],Xs={key:3,class:`rp__facts`},Zs=[`title`],Qs={class:`rp__tasks`},$s={class:`rpt__title`},ec={class:`rpt__meta`},tc={key:0,class:`rpt__project`},nc={key:1,class:`rpt__agent`},rc=[`title`],ic={key:3,class:`rpt__silent`},ac=[`title`],oc=[`aria-valuenow`,`aria-label`],sc={class:`rpt__percent`},cc=[`title`],lc={class:`rpt__tag`},uc=[`title`],dc={class:`rpt__tag`},fc=[`title`],pc={class:`rpt__tag`},mc=[`title`],hc=[`aria-expanded`,`title`],gc={class:`oc__sect-title`},_c={class:`oc__sect-meta`},vc={class:`oc__sect-brief`},yc={class:`oc__history-list`},bc=[`onClick`],xc={class:`oc__history-time`},Sc={class:`oc__history-pct`},Cc={class:`oc__history-sum`},wc=[`aria-expanded`,`title`],Tc={class:`oc__sect-title`},Ec={class:`oc__sect-meta`},Dc={class:`oc__git-name`},Oc={key:0,class:`oc__sect-brief`},kc={class:`oc__git-list`},Ac={class:`oc__git-label`},jc={class:`oc__git-label`},Mc={class:`oc__git-value`},Nc={class:`oc__git-label`},Pc={class:`oc__git-value`},Fc=[`placeholder`],Ic={key:0},Lc={key:1},Rc={class:`oc__compose-foot`},zc=[`disabled`,`title`,`aria-label`],Bc=[`title`,`aria-label`],Vc=[`title`],Hc=[`title`],Uc=[`disabled`],Wc={class:`oc__hint`},Gc=`wb.ocMode.v2`,Kc=`/api/workbench/orchestrator/attachments`,qc=`wb.ocInputHeight.v1`,Jc=76,Yc=20,Xc=$(s({__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:a}){let o=t,s=a,c=Y(``),l=Y(!0),u=Y(!0),{active:v}=mr(),b=Y((()=>{try{return localStorage.getItem(Gc)===`chat`?`chat`:`command`}catch{return`command`}})());function ee(e){b.value=e;try{localStorage.setItem(Gc,e)}catch{}}let C=Y([]),w=q(()=>({kind:`draft`,list:C.value,replace:e=>{C.value=e}})),{isUploading:T,isImageAttachment:te,humanSize:ne,onAttachmentPaste:re,onAttachmentDrop:ae,removeAttachment:oe,pickAttachmentFile:ce}=lr(),le=q(()=>T(`draft`)),L=Y(!1);function R(e){e.stopPropagation(),re(e,w.value)}function z(e){L.value=!1,ae(e,w.value)}function B(){ce(w.value)}function V(e){oe(w.value,e)}function H(){C.value=[]}function fe(){c.value=``}n({clearAttachments:H,clearDraft:fe});let pe=q(()=>o.selectedProject?.key||``),me=q(()=>(o.defaultPrompt||``).trim()),U=q(()=>{let e=pe.value;return e?(o.projectPrompts?.[e]?.prompt||``).trim():``}),W=q(()=>Object.values(o.projectPrompts||{}).some(e=>(e?.prompt||``).trim().length>0)),ge=q(()=>!!me.value||W.value),ve=q(()=>{let e=!!me.value,t=pe.value?U.value?`project`:`none`:W.value?`target`:`none`;return Q(e&&t===`project`?`@WORKBENCH:全局 + 本项目`:e&&t===`target`?`@WORKBENCH:全局 + 落点项目`:e?`@WORKBENCH:全局`:t===`project`?`@WORKBENCH:本项目`:t===`target`?`@WORKBENCH:落点项目`:`@WORKBENCH:未设置`)}),ye=q(()=>c.value.trim().length),K=q(()=>o.maxInstructionChars||1e5),be=q(()=>ye.value>K.value),xe=q(()=>!be.value&&ye.value>=K.value*.9),Ce=q(()=>c.value.trim().length>0&&!o.dispatching&&!le.value&&!be.value);function X(){Ce.value&&s(`dispatch`,{text:c.value.trim(),autoRun:l.value,attachments:C.value,projectPath:o.selectedProject?o.selectedProject.path:``,useDefaultPrompt:u.value,executor:v.value})}function we(e){e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||(e.preventDefault(),X())}function Z(){try{let e=localStorage.getItem(qc);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=Jc?Math.round(t):null}catch{return null}}let Te=Y(null),Ee=Y(Z()),De=q(()=>{let e={};return Ee.value&&(e.height=`${Ee.value}px`),e}),$=null,Oe=!1,ke=!0;function Ae(e){let t=Te.value;if(!t)return;let n=t.getBoundingClientRect();Oe=n.right-e.clientX<=Yc&&n.bottom-e.clientY<=Yc}function je(){Oe=!1}function Me(e){let t=Math.round(e.offsetHeight);if(!(t<Jc||t===Ee.value)){Ee.value=t;try{localStorage.setItem(qc,String(t))}catch{}}}f(()=>{let e=Te.value;e&&(window.addEventListener(`mouseup`,je),!(typeof ResizeObserver>`u`)&&($=new ResizeObserver(()=>{if(ke){ke=!1;return}let t=parseFloat(getComputedStyle(e).maxHeight),n=Number.isFinite(t)&&e.offsetHeight>=t-1;(Oe||!n)&&Me(e)}),$.observe(e)))}),m(()=>{window.removeEventListener(`mouseup`,je),$?.disconnect(),$=null});let Ne=Y(null),Pe=q(()=>(o.running||[]).length),Fe=q(()=>{let e=o.running||[];return{job:new Set(e.map(e=>e.jobId).filter(Boolean)),task:new Set(e.map(e=>e.taskId).filter(Boolean))}});function Ie(e){if(!e)return!1;let t=Fe.value;return(e.tasks||[]).some(e=>e.jobId&&t.job.has(e.jobId)||!e.jobId&&!!e.taskId&&t.task.has(e.taskId))}let Le=q(()=>(o.reports||[]).find(Ie)||null),Re=q(()=>{let e=o.reports||[];if(!e.length)return null;if(Ne.value){let t=e.find(e=>e.id===Ne.value);if(t)return t}return Le.value}),ze=q(()=>!!Re.value&&!Ie(Re.value)),Be=q(()=>(o.reports||[]).length?Pe.value>0?Q(`@WORKBENCH:这批任务还没有进度报告`):Q(`@WORKBENCH:当前没有正在执行的任务`):Q(`@WORKBENCH:暂无进度报告`)),Ve=q(()=>(o.reports||[]).length?Q(`@WORKBENCH:最新那份报告讲的任务已经跑完了,要回看可以从历史报告里点开`):``);function He(e){Ne.value=e.id}let Ue=Y(null),We=Y(!1),Ge=Y(!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||O(Ke)}let Je=null;P(Ue,e=>{Je?.disconnect(),Je=null,e&&(Je=new ResizeObserver(()=>Ke()),Je.observe(e))}),m(()=>{Je?.disconnect(),Je=null}),P(()=>Re.value?.id,()=>{We.value=!1,Ge.value=!1,O(Ke)});function Ye(e){let t=Yr(e.percent);return t===null?``:t+`%`}let Xe=q(()=>Yr(Re.value?.percent)),Ze=q(()=>(Re.value?.tasks||[]).map(e=>({...e,pct:Yr(e.percent),silent:Xr(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?Q(Jr(e.errorCode)):Q(`@WORKBENCH:当时没有任务在执行`)}function $e(e){return e.errorCode?Q(Jr(e.errorCode)):e.tasks.length?Q(`@WORKBENCH:模型没有返回内容`):Q(`@WORKBENCH:生成这份报告时没有任务在执行`)}function et(e){let t=e.target,n=Number(t.value);Ur.includes(n)&&s(`set-report-interval`,n)}let tt=q(()=>{let e=o.selectedProject;if(!e)return[];let t=[];if(e.exists===!1)return t.push({label:Q(`@WORKBENCH:工作区`),value:Q(`@WORKBENCH:目录不存在`),tone:`danger`}),t;let n=e.git;return!n||n.isGitRepo===null?(t.push({label:Q(`@WORKBENCH:Git 状态`),value:Q(`@WORKBENCH:未知`),tone:``}),t):n.isGitRepo?(t.push({label:Q(`@WORKBENCH:分支`),value:n.detached?Q(`@WORKBENCH:游离 HEAD`):n.branch||Q(`@WORKBENCH:未知`),tone:``}),t.push({label:Q(`@WORKBENCH:工作区`),value:n.changed>0?Q(`@WORKBENCH:未提交 {n} 项`,{n:n.changed}):Q(`@WORKBENCH:干净`),tone:n.changed>0?`warn`:``}),n.hasUpstream&&(n.ahead>0||n.behind>0)&&t.push({label:Q(`@WORKBENCH:与上游`),value:Q(`@WORKBENCH:领先 {ahead} / 落后 {behind}`,{ahead:n.ahead,behind:n.behind}),tone:n.behind>0?`warn`:``}),t):(t.push({label:Q(`@WORKBENCH:Git 状态`),value:Q(`@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=Y(rt(nt.history)),at=Y(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=q(()=>tt.value.slice(0,2).map(e=>e.value).join(` · `));return(n,a)=>{let o=d;return A(),x(`aside`,{class:h([`oc`,{"is-collapsed":t.collapsed,"is-report-empty":b.value===`command`&&!t.collapsed&&!Re.value}])},[t.collapsed?(A(),x(`button`,{key:0,type:`button`,class:`oc__rail`,title:D(Q)(`@WORKBENCH:展开主 Agent 控制台`),"aria-label":D(Q)(`@WORKBENCH:展开主 Agent 控制台`),"aria-expanded":!1,onClick:a[0]||=e=>s(`toggle-collapse`)},[y(o,{class:`oc__rail-icon`},{default:G(()=>[y(D(Se))]),_:1}),E(`span`,{class:h([`oc__rail-live`,{"is-off":!t.active}]),"aria-hidden":`true`},null,2),E(`span`,Ss,M(D(Q)(`@WORKBENCH:主 Agent 控制台`)),1)],8,xs)):r(``,!0),I(E(`header`,Cs,[E(`span`,{class:h([`oc__live`,{"is-off":!t.active}]),"aria-hidden":`true`},null,2),E(`h3`,ws,M(D(Q)(`@WORKBENCH:主 Agent 控制台`)),1),E(`button`,{type:`button`,class:h([`oc__toggle`,{"is-off":!t.active}]),disabled:t.togglingSchedule,title:t.active?D(Q)(`@WORKBENCH:暂停后派发只建任务,不会自动执行`):D(Q)(`@WORKBENCH:恢复后派发会自动执行`),onClick:a[1]||=e=>s(`toggle-schedule`,!t.active)},M(t.active?D(Q)(`@WORKBENCH:暂停调度`):D(Q)(`@WORKBENCH:恢复调度`)),11,Ts),E(`button`,{type:`button`,class:`oc__collapse`,title:D(Q)(`@WORKBENCH:收起主 Agent 控制台`),"aria-label":D(Q)(`@WORKBENCH:收起主 Agent 控制台`),"aria-expanded":!0,onClick:a[2]||=e=>s(`toggle-collapse`)},[y(o,null,{default:G(()=>[y(D(se))]),_:1})],8,Es)],512),[[N,!t.collapsed]]),I(E(`div`,{class:h([`oc__state`,{"is-paused":!t.active}])},[E(`span`,Ds,M(D(Q)(`@WORKBENCH:调度状态`)),1),E(`span`,Os,M(t.active?D(Q)(`@WORKBENCH:调度中`):D(Q)(`@WORKBENCH:已暂停`)),1),E(`span`,ks,M(D(Q)(`@WORKBENCH:{n} 个执行中`,{n:Pe.value})),1)],2),[[N,!t.collapsed]]),I(E(`div`,{class:`oc__mode`,role:`tablist`,"aria-label":D(Q)(`@WORKBENCH:切换主 Agent 控制台的工作方式`)},[E(`button`,{type:`button`,role:`tab`,class:h([`oc__mode-btn`,{"is-active":b.value===`chat`}]),"aria-selected":b.value===`chat`,onClick:a[3]||=e=>ee(`chat`)},M(D(Q)(`@WORKBENCH:对话`)),11,js),E(`button`,{type:`button`,role:`tab`,class:h([`oc__mode-btn`,{"is-active":b.value===`command`}]),"aria-selected":b.value===`command`,onClick:a[4]||=e=>ee(`command`)},M(D(Q)(`@WORKBENCH:指令`)),11,Ms)],8,As),[[N,!t.collapsed]]),I(y(bs,{class:`oc__chat`,active:!t.collapsed&&b.value===`chat`,"allow-dispatch":``,"dispatch-use-default-prompt":u.value,title:D(Q)(`@WORKBENCH:g ai 对话`)},null,8,[`active`,`dispatch-use-default-prompt`,`title`]),[[N,!t.collapsed&&b.value===`chat`]]),I(E(`div`,{class:h([`oc__report`,{"is-empty":!Re.value}])},[E(`div`,Ns,[E(`p`,Ps,M(D(Q)(`@WORKBENCH:进度报告`)),1),E(`select`,{class:`oc__interval`,value:String(t.reportIntervalMs??0),title:D(Q)(`@WORKBENCH:自动报告的间隔(关掉后仍可随时点「立即报告」)`),"aria-label":D(Q)(`@WORKBENCH:自动报告间隔`),onChange:et},[(A(!0),x(F,null,S(D(Ur),e=>(A(),x(`option`,{key:e,value:String(e)},M(D(Q)(D(Kr)(e),D(qr)(e))),9,Is))),128))],40,Fs),E(`button`,{type:`button`,class:`oc__report-run`,disabled:t.generatingReport,title:D(Q)(`@WORKBENCH:让主 Agent 现在汇报一次正在执行的任务进度`),onClick:a[5]||=e=>s(`generate-report`)},[y(o,{class:h([`oc__report-run-icon`,{"is-spin":t.generatingReport}])},{default:G(()=>[y(D(k))]),_:1},8,[`class`]),E(`span`,null,M(t.generatingReport?D(Q)(`@WORKBENCH:生成中…`):D(Q)(`@WORKBENCH:立即报告`)),1)],8,Ls)]),E(`ul`,Rs,[Re.value?(A(),x(`li`,zs,[E(`div`,Bs,[E(`span`,{class:h([`rp__trigger`,{"is-auto":Re.value.trigger===`auto`}])},M(Re.value.trigger===`auto`?D(Q)(`@WORKBENCH:自动`):D(Q)(`@WORKBENCH:手动`)),3),ze.value?(A(),x(`span`,{key:0,class:`rp__stale`,title:D(Q)(`@WORKBENCH:这份报告讲的任务已经跑完了,内容只反映生成那一刻的情况`)},M(D(Q)(`@WORKBENCH:已结束`)),9,Vs)):r(``,!0),E(`span`,Hs,M(D(Q)(`@WORKBENCH:{n} 个任务进行中`,{n:Re.value.tasks.length})),1),E(`span`,Us,M(D(Gn)(Re.value.at)),1)]),Xe.value===null?r(``,!0):(A(),x(`div`,{key:0,class:`rp__progress`,title:D(Q)(D(Qr))},[E(`span`,{class:`rp__bar`,role:`progressbar`,"aria-valuenow":Xe.value,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":D(Q)(D(Zr))},[E(`i`,{class:`rp__bar-fill`,style:p({width:Xe.value+`%`})},null,4)],8,Gs),E(`span`,Ks,[E(`span`,qs,M(D(Q)(D(Zr))),1),_(M(Xe.value)+`% `,1)])],8,Ws)),Re.value.text?(A(),x(`div`,Js,[E(`p`,{ref_key:`textEl`,ref:Ue,class:h([`rp__text`,{"is-clamped":Ge.value&&!We.value,"is-expanded":We.value}])},M(Re.value.text),3),Ge.value||We.value?(A(),x(`button`,{key:0,type:`button`,class:`rp__more`,onClick:qe},M(We.value?D(Q)(`@WORKBENCH:收起`):D(Q)(`@WORKBENCH:展开全文`)),1)):r(``,!0)])):(A(),x(`p`,{key:2,class:`rp__notice`,title:Re.value.errorDetail},M($e(Re.value)),9,Ys)),Ze.value.length?(A(),x(`div`,Xs,[E(`p`,{class:`rp__facts-cap`,title:D(Q)(`@WORKBENCH:上面是主 Agent 的判断,下面这些是从正在跑的任务里抄出来的事实`)},M(D(Q)(`@WORKBENCH:任务事实`)),9,Zs),E(`ul`,Qs,[(A(!0),x(F,null,S(Ze.value,(e,t)=>(A(),x(`li`,{key:e.taskId||t,class:h([`rpt`,{"is-silent":e.silent!==null}])},[E(`p`,$s,M(e.taskTitle||D(Q)(`@WORKBENCH:未命名任务`)),1),E(`p`,ec,[e.projectName?(A(),x(`span`,tc,M(e.projectName),1)):r(``,!0),E(`span`,null,M(D(Q)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:D(Un)(e.elapsedMs)})),1),e.agent?(A(),x(`span`,nc,M(e.agent),1)):r(``,!0),e.toolCallCount?(A(),x(`span`,{key:2,title:e.toolMix||``},M(D(Q)(`@WORKBENCH:工具 {n} 次`,{n:e.toolCallCount})),9,rc)):r(``,!0),e.silent===null?r(``,!0):(A(),x(`span`,ic,M(D(Q)(`@WORKBENCH:静默 {elapsed}`,{elapsed:D(Un)(e.silent)})),1))]),e.pct===null?r(``,!0):(A(),x(`p`,{key:0,class:`rpt__progress`,title:D(Q)(D(Qr))},[E(`span`,{class:`rpt__bar`,role:`progressbar`,"aria-valuenow":e.pct,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":e.taskTitle||D(Q)(`@WORKBENCH:未命名任务`)},[E(`i`,{class:`rpt__bar-fill`,style:p({width:e.pct+`%`})},null,4)],8,oc),E(`span`,sc,M(e.pct)+`%`,1)],8,ac)),e.lastTool?(A(),x(`p`,{key:1,class:`rpt__line is-tool`,title:e.lastTool},[E(`span`,lc,M(D(Q)(`@WORKBENCH:工具`)),1),_(M(e.lastTool),1)],8,cc)):r(``,!0),e.lastThought?(A(),x(`p`,{key:2,class:`rpt__line is-thought`,title:e.lastThought},[E(`span`,dc,M(D(Q)(`@WORKBENCH:最近思考`)),1),_(M(e.lastThought),1)],8,uc)):r(``,!0),e.lastLine?(A(),x(`p`,{key:3,class:`rpt__line`,title:e.lastLine},[E(`span`,pc,M(D(Q)(`@WORKBENCH:最新回复`)),1),_(M(e.lastLine),1)],8,fc)):r(``,!0)],2))),128))])])):r(``,!0)])):(A(),x(`li`,{key:1,class:`oc-empty`,title:Ve.value},M(Be.value),9,mc))]),(t.reports||[]).length>1?(A(),x(`div`,{key:0,class:h([`oc__history`,{"is-collapsed":!it.value}])},[E(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":it.value,title:it.value?D(Q)(`@WORKBENCH:收起`):D(Q)(`@WORKBENCH:展开`),onClick:a[6]||=e=>ot(`history`)},[y(o,{class:`oc__sect-caret`},{default:G(()=>[(A(),i(_e(it.value?D(ie):D(j))))]),_:1}),E(`span`,gc,M(D(Q)(`@WORKBENCH:历史报告`)),1),E(`span`,_c,[E(`span`,vc,M(D(Q)(`@WORKBENCH:共 {n} 份`,{n:(t.reports||[]).length})),1)])],8,hc),I(E(`ul`,yc,[(A(!0),x(F,null,S(t.reports,e=>(A(),x(`li`,{key:e.id},[E(`button`,{type:`button`,class:h([`oc__history-item`,{"is-active":e.id===Re.value?.id}]),onClick:t=>He(e)},[E(`span`,xc,M(D(Gn)(e.at)),1),E(`span`,Sc,M(Ye(e)),1),E(`span`,Cc,M(Qe(e)),1)],10,bc)]))),128))],512),[[N,it.value]])],2)):r(``,!0)],2),[[N,!t.collapsed&&b.value===`command`]]),I(E(`div`,{class:h([`oc__git`,{"is-collapsed":!at.value}])},[E(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":at.value,title:at.value?D(Q)(`@WORKBENCH:收起`):D(Q)(`@WORKBENCH:展开`),onClick:a[7]||=e=>ot(`git`)},[y(o,{class:`oc__sect-caret`},{default:G(()=>[(A(),i(_e(at.value?D(ie):D(j))))]),_:1}),E(`span`,Tc,M(D(Q)(`@WORKBENCH:项目概览`)),1),E(`span`,Ec,[E(`span`,Dc,M(t.selectedProject?t.selectedProject.name:D(Q)(`@WORKBENCH:全部项目`)),1),!at.value&&st.value?(A(),x(`span`,Oc,M(st.value),1)):r(``,!0)])],8,wc),I(E(`dl`,kc,[(A(!0),x(F,null,S(tt.value,e=>(A(),x(F,{key:e.label},[E(`dt`,Ac,M(e.label),1),E(`dd`,{class:h([`oc__git-value`,{"is-warn":e.tone===`warn`,"is-danger":e.tone===`danger`}])},M(e.value),3)],64))),128)),E(`dt`,jc,M(D(Q)(`@WORKBENCH:今日完成`)),1),E(`dd`,Mc,M(t.todayDone),1),E(`dt`,Nc,M(D(Q)(`@WORKBENCH:最后活跃`)),1),E(`dd`,Pc,M(t.selectedProject&&D(Hn)(t.selectedProject.stats.lastActiveAt)||`—`),1)],512),[[N,at.value]])],2),[[N,!t.collapsed&&b.value===`command`]]),I(E(`div`,{class:`oc__compose`,onPaste:R,onDrop:J(z,[`prevent`]),onDragover:a[15]||=J(e=>L.value=!0,[`prevent`]),onDragleave:a[16]||=e=>L.value=!1},[I(E(`textarea`,{ref_key:`inputRef`,ref:Te,class:h([`oc__input`,{"is-over":be.value}]),"onUpdate:modelValue":a[8]||=e=>c.value=e,style:p(De.value),rows:`4`,placeholder:D(Q)(`@WORKBENCH:给主 Agent 下一条指令,例如:把登录模块的错误处理重构一遍`),onKeydown:we,onPaste:R,onMousedown:Ae},null,46,Fc),[[de,c.value]]),C.value.length>0||le.value?(A(),i(Tt,{key:0,attachments:C.value,"is-image":D(te),"human-size":D(ne),"is-uploading":le.value,"is-paste-hover":L.value,"on-pick":B,"on-remove":V,"raw-base":Kc,onPaste:R,onDrop:z,onDragover:a[9]||=J(e=>L.value=!0,[`prevent`]),onDragenter:a[10]||=J(e=>L.value=!0,[`prevent`]),onDragleave:a[11]||=e=>L.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`])):r(``,!0),ye.value>0?(A(),x(`p`,{key:1,class:h([`oc__count`,{"is-warn":xe.value,"is-over":be.value}])},[be.value?(A(),x(`span`,Ic,M(D(Q)(`@WORKBENCH:超出上限 {max} 字,请精简后再派发(超出的部分不会被发出)`,{max:K.value})),1)):(A(),x(`span`,Lc,M(ye.value)+` / `+M(K.value),1))],2)):r(``,!0),E(`div`,Rc,[E(`button`,{type:`button`,class:`oc__attach`,disabled:le.value,title:D(Q)(`@WORKBENCH:添加附件(也可直接粘贴或拖入文件)`),"aria-label":D(Q)(`@WORKBENCH:添加附件`),onClick:B},[y(o,null,{default:G(()=>[y(D(g))]),_:1})],8,zc),E(`button`,{type:`button`,class:h([`oc__attach`,{"is-on":ge.value}]),title:D(Q)(`@WORKBENCH:设置派发时自动附加的预设提示词(全局 / 各项目)`),"aria-label":D(Q)(`@WORKBENCH:预设提示词设置`),onClick:a[12]||=e=>s(`open-prompt-settings`)},[y(o,null,{default:G(()=>[y(D(he))]),_:1})],10,Bc),E(`label`,{class:`oc__autorn`,title:D(Q)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[I(E(`input`,{type:`checkbox`,"onUpdate:modelValue":a[13]||=e=>l.value=e},null,512),[[ue,l.value]]),E(`span`,null,M(D(Q)(`@WORKBENCH:立即执行`)),1)],8,Vc),ge.value?(A(),x(`label`,{key:0,class:`oc__autorn`,title:D(Q)(`@WORKBENCH:取消勾选则本次派发的任务不带预设提示词(设置本身不受影响)`)},[I(E(`input`,{type:`checkbox`,"onUpdate:modelValue":a[14]||=e=>u.value=e},null,512),[[ue,u.value]]),E(`span`,null,M(D(Q)(`@WORKBENCH:预设提示词({state})`,{state:ve.value})),1)],8,Hc)):r(``,!0),y(cs,{title:D(Q)(`@WORKBENCH:本次派发使用的执行器(与执行按钮的临时切换共用)`)},null,8,[`title`]),E(`button`,{type:`button`,class:`oc__send`,disabled:!Ce.value,onClick:X},[y(o,{class:`oc__send-icon`},{default:G(()=>[y(D(e))]),_:1}),E(`span`,null,M(t.dispatching?D(Q)(`@WORKBENCH:派发中…`):D(Q)(`@WORKBENCH:派发`)),1)],8,Uc)]),E(`p`,Wc,[t.selectedProject?(A(),x(F,{key:0},[_(M(D(Q)(`@WORKBENCH:指令会在「{name}」下新建一个任务;Enter 派发,Shift+Enter 换行`,{name:t.selectedProject.name})),1)],64)):(A(),x(F,{key:1},[_(M(D(Q)(`@WORKBENCH:指令落到哪个项目由主 Agent 判断;Enter 派发,Shift+Enter 换行`)),1)],64))])],544),[[N,!t.collapsed&&b.value===`command`]])],2)}}}),[[`__scopeId`,`data-v-da57685d`]]);X(),z(),b(),fe();var Zc={class:`pd`},Qc={class:`pd__intro`},$c={class:`pd__field`},el={class:`pd__head`},tl={class:`pd__label`,for:`pd-global`},nl={class:`pd__count`},rl=[`placeholder`],il={class:`pd__field`},al={class:`pd__head`},ol={class:`pd__label`,for:`pd-project`},sl={key:0,class:`pd__count`},cl=[`disabled`,`placeholder`],ll={class:`pd__hint`},ul={class:`pd__foot`},dl=[`disabled`],fl=4e3,pl=$(s({__name:`WorkbenchDefaultPromptDialog`,props:{modelValue:{type:Boolean},defaultPrompt:{},projectPath:{},projectName:{},projectPrompt:{},saving:{type:Boolean}},emits:[`update:modelValue`,`save`],setup(e,{emit:t}){let n=e,a=t,o=Y(``),s=Y(``);P(()=>n.modelValue,e=>{e&&(o.value=n.defaultPrompt||``,s.value=n.projectPrompt||``)});let c=q(()=>!!n.projectPath),l=q(()=>o.value.trim()!==(n.defaultPrompt||``).trim()||c.value&&s.value.trim()!==(n.projectPrompt||``).trim());function u(){n.saving||a(`save`,{globalPrompt:o.value,projectPrompt:s.value})}function d(){a(`update:modelValue`,!1)}return(t,n)=>(A(),i(Ne,{"model-value":e.modelValue,title:D(Q)(`@WORKBENCH:预设提示词`),width:`min(640px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[2]||=e=>a(`update:modelValue`,e)},{footer:G(()=>[E(`div`,ul,[E(`button`,{type:`button`,class:`pd__btn`,onClick:d},M(D(Q)(`@WORKBENCH:取消`)),1),n[3]||=E(`span`,{class:`pd__foot-spacer`},null,-1),E(`button`,{type:`button`,class:`pd__btn pd__btn--primary`,disabled:e.saving||!l.value,onClick:u},M(e.saving?D(Q)(`@WORKBENCH:保存中…`):D(Q)(`@WORKBENCH:保存`)),9,dl)])]),default:G(()=>[E(`div`,Zc,[E(`p`,Qc,M(D(Q)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),E(`div`,$c,[E(`div`,el,[E(`label`,tl,M(D(Q)(`@WORKBENCH:全局提示词`)),1),E(`span`,nl,M(o.value.length)+` / `+M(fl),1)]),I(E(`textarea`,{id:`pd-global`,"onUpdate:modelValue":n[0]||=e=>o.value=e,class:`pd__area`,rows:`5`,maxlength:fl,placeholder:D(Q)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,rl),[[de,o.value]])]),E(`div`,il,[E(`div`,al,[E(`label`,ol,M(c.value?D(Q)(`@WORKBENCH:「{name}」的项目提示词`,{name:e.projectName}):D(Q)(`@WORKBENCH:项目提示词`)),1),c.value?(A(),x(`span`,sl,M(s.value.length)+` / `+M(fl),1)):r(``,!0)]),I(E(`textarea`,{id:`pd-project`,"onUpdate:modelValue":n[1]||=e=>s.value=e,class:`pd__area`,rows:`5`,maxlength:fl,disabled:!c.value,placeholder:c.value?D(Q)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):D(Q)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,cl),[[de,s.value]]),E(`p`,ll,M(c.value?D(Q)(`@WORKBENCH:项目提示词追加在全局提示词之后(不覆盖全局),派发到「{name}」时一起带上`,{name:e.projectName}):D(Q)(`@WORKBENCH:选中的是「全部项目」,落点由主 Agent 判断 —— 想给某个项目单设提示词,先选中它`)),1)])])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-5d14f0f1`]]);X(),z(),b(),fe();var ml={class:`nc__field`},hl={class:`nc__label`,for:`nc-project`},gl={value:``},_l=[`value`],vl=[`title`],yl={class:`nc__field`},bl={class:`nc__label`,for:`nc-title`},xl=[`placeholder`],Sl={class:`nc__field`},Cl={class:`nc__label`,for:`nc-desc`},wl=[`placeholder`],Tl={class:`nc__field`},El={class:`nc__hint`},Dl={key:0,class:`nc__error`},Ol={class:`nc__foot`},kl=[`disabled`],Al=[`disabled`],jl=`/api/workbench/orchestrator/attachments`,Ml=$(s({__name:`WorkbenchTaskCreateDialog`,props:{modelValue:{type:Boolean},projects:{},defaultProjectPath:{}},emits:[`update:modelValue`,`created`],setup(e,{emit:t}){let n=e,a=t,o=Y(``),s=Y(``),c=Y(``),l=Y(!1),u=Y(``),d=Y([]),f=Y(!1),p=!1,m=q(()=>({kind:`draft`,list:d.value,replace:e=>{d.value=e}})),{isUploading:h,isImageAttachment:g,humanSize:_,onAttachmentPaste:v,onAttachmentDrop:b,removeAttachment:ee,pickAttachmentFile:C}=lr(),w=q(()=>h(`draft`));function T(e){e.stopPropagation(),v(e,m.value)}function te(e){f.value=!1,b(e,m.value)}function O(){C(m.value)}function k(e){ee(m.value,e)}function ne(){let e=d.value;if(d.value=[],!(p||e.length===0))for(let t of e)fetch(`${jl}/${encodeURIComponent(t.id)}`,{method:`DELETE`}).catch(()=>{})}function re(e){let t=Be(e);if(!t)return``;let r=n.projects.find(e=>Be(e.path)===t);return r?r.path:``}P(()=>n.modelValue,e=>{if(!e){ne();return}o.value=``,s.value=``,d.value=[],f.value=!1,p=!1,c.value=re(n.defaultProjectPath),u.value=``,l.value=!1});let ie=q(()=>n.projects),j=q(()=>!l.value&&!w.value&&(o.value.trim().length>0||s.value.trim().length>0)),ae=q(()=>{let e=Be(c.value);if(!e)return``;let t=ie.value.find(t=>Be(t.path)===e);return t?t.name:``});async function N(e){if(j.value){l.value=!0,u.value=``;try{let t={title:o.value.trim(),desc:s.value};c.value&&(t.projectPath=c.value),d.value.length>0&&(t.stagedAttachments=d.value.map(e=>({id:e.id,ext:e.ext,originalName:e.originalName})));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){u.value=n?.error||Q(`@WORKBENCH:保存失败`);return}p=!0,a(`update:modelValue`,!1),a(`created`,{task:n.task,openEditor:e})}finally{l.value=!1}}}return(t,n)=>(A(),i(Ne,{"model-value":e.modelValue,title:D(Q)(`@WORKBENCH:新建开发任务`),width:`min(600px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[15]||=e=>a(`update:modelValue`,e)},{footer:G(()=>[E(`div`,Ol,[E(`button`,{type:`button`,class:`nc__btn`,onClick:n[12]||=e=>a(`update:modelValue`,!1)},M(D(Q)(`@WORKBENCH:取消`)),1),n[16]||=E(`span`,{class:`nc__foot-spacer`},null,-1),E(`button`,{type:`button`,class:`nc__btn`,disabled:!j.value,onClick:n[13]||=e=>N(!0)},M(D(Q)(`@WORKBENCH:创建并打开编辑器`)),9,kl),E(`button`,{type:`button`,class:`nc__btn nc__btn--primary`,disabled:!j.value,onClick:n[14]||=e=>N(!1)},M(l.value?D(Q)(`@WORKBENCH:创建中…`):D(Q)(`@WORKBENCH:创建`)),9,Al)])]),default:G(()=>[E(`div`,{class:`nc`,onPaste:T,onDrop:J(te,[`prevent`]),onDragover:n[9]||=J(e=>f.value=!0,[`prevent`]),onDragenter:n[10]||=J(e=>f.value=!0,[`prevent`]),onDragleave:n[11]||=e=>f.value=!1},[E(`div`,ml,[E(`label`,hl,M(D(Q)(`@WORKBENCH:项目`)),1),I(E(`select`,{id:`nc-project`,"onUpdate:modelValue":n[0]||=e=>c.value=e,class:`nc__select`},[E(`option`,gl,M(D(Q)(`@WORKBENCH:跟随当前项目`)),1),(A(!0),x(F,null,S(ie.value,e=>(A(),x(`option`,{key:e.key,value:e.path},M(e.name)+M(e.exists===!1?` · ${D(Q)(`@WORKBENCH:目录不存在`)}`:``),9,_l))),128))],512),[[B,c.value]]),E(`p`,{class:`nc__hint`,title:c.value},M(ae.value?D(Q)(`@WORKBENCH:任务会在「{name}」目录下执行`,{name:ae.value}):D(Q)(`@WORKBENCH:任务会跟随应用当前的工作目录`)),9,vl)]),E(`div`,yl,[E(`label`,bl,M(D(Q)(`@WORKBENCH:标题`)),1),I(E(`input`,{id:`nc-title`,"onUpdate:modelValue":n[1]||=e=>o.value=e,class:`nc__input`,type:`text`,maxlength:`200`,placeholder:D(Q)(`@WORKBENCH:一句话说清要做什么`),onKeydown:n[2]||=K(J(e=>N(!1),[`prevent`]),[`enter`])},null,40,xl),[[de,o.value]])]),E(`div`,Sl,[E(`label`,Cl,M(D(Q)(`@WORKBENCH:描述`)),1),I(E(`textarea`,{id:`nc-desc`,"onUpdate:modelValue":n[3]||=e=>s.value=e,class:`nc__input nc__input--area`,rows:`6`,placeholder:D(Q)(`@WORKBENCH:把背景、验收标准、相关文件路径写进来,执行时用它当上下文`),onKeydown:[n[4]||=K(J(e=>N(!1),[`ctrl`,`prevent`]),[`enter`]),n[5]||=K(J(e=>N(!1),[`meta`,`prevent`]),[`enter`])]},null,40,wl),[[de,s.value]])]),E(`div`,Tl,[y(Tt,{attachments:d.value,"is-image":D(g),"human-size":D(_),"is-uploading":w.value,"is-paste-hover":f.value,"on-pick":O,"on-remove":k,"raw-base":jl,onDragover:n[6]||=J(e=>f.value=!0,[`prevent`]),onDragenter:n[7]||=J(e=>f.value=!0,[`prevent`]),onDragleave:n[8]||=e=>f.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`]),E(`p`,El,M(D(Q)(`@WORKBENCH:粘贴图片以快速添加`)),1)]),u.value?(A(),x(`p`,Dl,M(u.value),1)):r(``,!0)],32)]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-40a1a81b`]]);X(),z(),b(),fe();var Nl={class:`board__top`},Pl=[`title`,`aria-label`,`aria-expanded`],Fl={class:`board__brand`},Il={class:`board__brand-text`},Ll={class:`board__title`},Rl={class:`board__subtitle`},zl={class:`board__stats`},Bl={class:`board__stat`},Vl={class:`board__stat-label`},Hl={class:`board__stat-value`},Ul=[`title`],Wl={class:`board__stat-label`},Gl={class:`board__stat-value`},Kl={class:`board__stat`},ql={class:`board__stat-label`},Jl={class:`board__stat`},Yl={class:`board__stat-label`},Xl={class:`board__stat-value`},Zl=[`title`],Ql={class:`board__main`},$l={class:`board__main-head`},eu={class:`board__main-title`},tu={class:`board__project-name`},nu=[`title`],ru={key:1,class:`board__project-path`},iu={key:0,class:`board__project-meta`},au=[`title`],ou=`wb.boardProject.v1`,su=5e3,cu=3e4,lu=`wb.boardLayout.v1`,uu=180,du=420,fu=260,pu=900,mu=.26,hu=.46,gu=$(s({__name:`WorkbenchBoard`,props:{openedTaskId:{}},emits:[`open-task`,`board-tasks`],setup(e,{emit:t}){let n=e,a=t,{projects:o,boardTasks:s,currentProjectPath:c,loading:l,loadProjects:u,removeProject:g}=Hr();P(s,e=>a(`board-tasks`,e),{immediate:!0});let{active:_,activity:v,running:b,dispatching:S,togglingSchedule:ee,maxInstructionChars:C,defaultPrompt:w,projectPrompts:T,reports:te,generatingReport:O,reportIntervalMs:k,loadOrchestrator:ne,setSchedulingActive:re,dispatch:ie,saveDefaultPrompt:j,saveProjectPrompt:ae,loadReports:N,generateReport:ce,setReportInterval:le}=ei(),{active:F}=mr(),I=(()=>{try{return localStorage.getItem(ou)}catch{return null}})(),L=Y(I||``);P(L,e=>{try{localStorage.setItem(ou,e)}catch{}});let R=q(()=>L.value&&o.value.find(e=>e.key===L.value)||null);P(o,e=>{L.value&&(e.some(e=>e.key===L.value)||(L.value=``))});let ue=!1;function z(){if(ue||(ue=!0,I!==null))return;let e=c.value?Be(c.value):``;e&&o.value.some(t=>t.key===e)&&(L.value=e)}let de=q(()=>{let e=new Map(o.value.map(e=>[e.key,e.name])),t={};for(let n of s.value)n.projectPath&&(t[n.projectPath]=e.get(Be(n.projectPath))||``);return t}),B=q(()=>{if(!L.value)return s.value;let e=L.value;return s.value.filter(t=>Be(t.projectPath)===e)}),H=q(()=>{let e=new Date;e.setHours(0,0,0,0);let t=e.getTime();return{projects:o.value.length,tasks:s.value.length,running:b.value.length,todayDone:v.value.filter(e=>e.kind===`done`&&e.at&&new Date(e.at).getTime()>=t).length}});function fe(e){a(`open-task`,{taskId:e.id,projectPath:e.projectPath})}let pe=null,me=!1,U=null;async function he(e=!0){if(!me){me=!0;try{await Promise.all([u(e),ne(e)])}finally{me=!1}}}function ge(){document.hidden||(he(!0),N(!0))}f(async()=>{window.addEventListener(`resize`,xe),await he(!1),N(!0),z(),pe=setInterval(()=>{document.hidden||he(!0)},su),U=setInterval(()=>{document.hidden||N(!0)},cu),document.addEventListener(`visibilitychange`,ge)}),m(()=>{window.removeEventListener(`resize`,xe),pe&&=(clearInterval(pe),null),U&&=(clearInterval(U),null),document.removeEventListener(`visibilitychange`,ge)});let _e=oe({left:null,right:null,leftCollapsed:!1,rightCollapsed:!1});function ve(){try{let e=localStorage.getItem(lu);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(_e.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(_e.right=t.right),_e.leftCollapsed=t.leftCollapsed===!0,_e.rightCollapsed=t.rightCollapsed===!0}catch{}}ve();function ye(){try{localStorage.setItem(lu,JSON.stringify(_e))}catch{}}let be=Y(typeof window>`u`?1920:window.innerWidth);function xe(){be.value=window.innerWidth}let J=q(()=>be.value<=1024),Ce=q(()=>be.value<=860);function X(e,t){let n=e===`left`?uu:fu,r=Math.min(e===`left`?du:pu,be.value*(e===`left`?mu:hu));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}let we=q(()=>{let e={};return _e.left!=null&&(e[`--wb-left-w`]=X(`left`,_e.left)+`px`),_e.right!=null&&!Ce.value&&(e[`--wb-right-w`]=X(`right`,_e.right)+`px`),e}),Z=Y(null),Te=Y(null);function Ee(e){return Z.value?.querySelector(e===`left`?`.board__left`:`.oc`)}function De(e){window.removeEventListener(`mousemove`,e),document.body.style.userSelect=``,document.body.style.cursor=``,Te.value=null,ye()}function $(e,t){if(e===`left`?J.value:Ce.value)return;let n=Ee(e);if(!n)return;t.preventDefault();let r=t.clientX,i=n.getBoundingClientRect().width;Te.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);_e[e]=X(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>De(a),{once:!0})}function Oe(e){_e[e]=null,ye()}let ke=Y(!1),Ae=q(()=>J.value?!ke.value:_e.leftCollapsed);function je(){if(J.value){ke.value=!ke.value;return}_e.leftCollapsed=!_e.leftCollapsed,ye()}function Me(){J.value&&(ke.value=!1)}let Ne=q(()=>_e.rightCollapsed&&!Ce.value);function Pe(){_e.rightCollapsed=!_e.rightCollapsed,ye()}function Fe(e){L.value=e?e.key:``,ke.value=!1}let Ie=Y(!1);function Le(){Ie.value=!0}async function Re(e){if(await he(!0),e.openEditor){a(`open-task`,{taskId:e.task.id,projectPath:e.task.projectPath||``});return}V.success(Q(`@WORKBENCH:已创建任务`))}async function ze(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:F.value})}).then(e=>e.json()).catch(()=>null);if(!n?.success){V.error(n?.error||Q(`@WORKBENCH:执行失败`));return}V.success(Q(`@WORKBENCH:已开始执行`)),await he(!0)}let Ve=new Set;async function He(e){if(Ve.has(e.id))return;let t=e.live?.jobId;if(!t){V.error(Q(`@WORKBENCH:停止失败`));return}try{await W.confirm(Q(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),Q(`@WORKBENCH:停止执行`),{confirmButtonText:Q(`@WORKBENCH:停止`),cancelButtonText:Q(`@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){V.error(e?.error||Q(`@WORKBENCH:停止失败`));return}V.success(Q(`@WORKBENCH:已发送停止信号`)),await he(!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 W.confirm(Q(`@WORKBENCH:这条任务还在执行,标记完成会同时把它停掉。已输出的内容会保留。`),Q(`@WORKBENCH:标记为已完成`),{confirmButtonText:Q(`@WORKBENCH:标记完成`),cancelButtonText:Q(`@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){V.error(t?.error||Q(`@WORKBENCH:标记失败`));return}V.success(Q(`@WORKBENCH:已标记为已完成`)),await he(!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){V.error(t?.error||Q(`@WORKBENCH:撤销失败`));return}V.success(Q(`@WORKBENCH:已撤销完成标记`)),await he(!0)}finally{Ue.delete(e.id)}}}async function Ke(e){let{ok:t,keptTasks:n}=await g(e.path);t&&(V.success(n>0?Q(`@WORKBENCH:已移除项目,{n} 条任务仍保留在「全部项目」下`,{n}):Q(`@WORKBENCH:已移除项目`)),await he(!0))}async function qe(e){let t=(e.title||``).trim()||Q(`@WORKBENCH:未命名任务`);try{await W.confirm(Q(`@WORKBENCH:删除任务「{title}」?`,{title:t}),Q(`@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){V.error(n.error||Q(`@WORKBENCH:删除失败`));return}await he(!0)}let Je=Y(null),Ye=q(()=>R.value?.path||c.value);async function Xe(e){let t=await ie({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(),V.success(t.ran?Q(`@WORKBENCH:已派发并开始执行`):Q(`@WORKBENCH:已派发(只建任务未执行)`)),await he(!0))}async function Ze(e){await re(e)}let Qe=Y(!1),$e=Y(!1),et=q(()=>{let e=R.value?.key;return e&&T.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!==(w.value||``).trim()&&(e=await j(t)),e&&r&&n!==et.value.trim()&&(e=await ae(r.path,n)),e&&(Qe.value=!1)}finally{$e.value=!1}}return(e,t)=>{let a=d;return A(),x(`div`,{class:`board`,style:p(we.value)},[E(`header`,Nl,[E(`button`,{type:`button`,class:h([`board__icon-btn board__fold-btn`,{"is-on":!Ae.value}]),title:Ae.value?D(Q)(`@WORKBENCH:展开项目列表`):D(Q)(`@WORKBENCH:收起项目列表`),"aria-label":Ae.value?D(Q)(`@WORKBENCH:展开项目列表`):D(Q)(`@WORKBENCH:收起项目列表`),"aria-expanded":!Ae.value,onClick:je},[Ae.value?(A(),i(a,{key:1},{default:G(()=>[y(D(se))]),_:1})):(A(),i(a,{key:0},{default:G(()=>[y(D(Se))]),_:1}))],10,Pl),E(`div`,Fl,[E(`span`,{class:h([`board__live`,{"is-off":!D(_)}]),"aria-hidden":`true`},null,2),E(`div`,Il,[E(`h1`,Ll,M(D(Q)(`@WORKBENCH:多项目编排台`)),1),E(`p`,Rl,M(D(_)?D(Q)(`@WORKBENCH:主 Agent 调度中`):D(Q)(`@WORKBENCH:主 Agent 已暂停`)),1)])]),E(`div`,zl,[E(`span`,Bl,[E(`span`,Vl,M(D(Q)(`@WORKBENCH:项目`)),1),E(`strong`,Hl,M(H.value.projects),1)]),E(`span`,{class:`board__stat`,title:D(Q)(`@WORKBENCH:看板上全部任务(含已从项目列表移除的项目)`)},[E(`span`,Wl,M(D(Q)(`@WORKBENCH:全部任务`)),1),E(`strong`,Gl,M(H.value.tasks),1)],8,Ul),E(`span`,Kl,[E(`span`,ql,M(D(Q)(`@WORKBENCH:活跃执行`)),1),E(`strong`,{class:h([`board__stat-value`,{"is-live":H.value.running>0}])},M(H.value.running),3)]),E(`span`,Jl,[E(`span`,Yl,M(D(Q)(`@WORKBENCH:今日完成`)),1),E(`strong`,Xl,M(H.value.todayDone),1)])])]),E(`div`,{ref_key:`colsRef`,ref:Z,class:h([`board__cols`,{"is-resizing":Te.value!==null}])},[E(`div`,{class:h([`board__scrim`,{"is-on":ke.value}]),"aria-hidden":`true`,onClick:t[0]||=e=>ke.value=!1},null,2),E(`aside`,{class:h([`board__left`,{"is-collapsed":Ae.value}]),onKeydown:K(Me,[`esc`])},[y(Ma,{projects:D(o),"selected-key":L.value,loading:D(l),onSelect:Fe,onRemove:Ke},null,8,[`projects`,`selected-key`,`loading`])],34),Ae.value?r(``,!0):(A(),x(`div`,{key:0,class:`board__splitter board__splitter--left`,role:`separator`,"aria-orientation":`vertical`,title:D(Q)(`@WORKBENCH:拖动调整项目列表宽度,双击恢复默认`),onMousedown:t[1]||=e=>$(`left`,e),onDblclick:t[2]||=e=>Oe(`left`)},null,40,Zl)),E(`main`,Ql,[E(`div`,$l,[E(`div`,eu,[E(`h2`,tu,M(R.value?R.value.name:D(Q)(`@WORKBENCH:全部项目`)),1),R.value?(A(),x(`span`,{key:0,class:`board__project-path`,title:R.value.path},M(R.value.path),9,nu)):(A(),x(`span`,ru,M(D(Q)(`@WORKBENCH:共 {n} 个项目的任务`,{n:D(o).length})),1))]),R.value?(A(),x(`span`,iu,M(D(Q)(`@WORKBENCH:{done}/{total} 任务完成`,{done:R.value.stats.done,total:R.value.stats.total})),1)):r(``,!0)]),y(ts,{tasks:B.value,"project-labels":de.value,"show-project-label":!R.value,"opened-task-id":n.openedTaskId,onOpenTask:fe,onRunTask:ze,onStopTask:He,onCompleteTask:We,onReopenTask:Ge,onDeleteTask:qe,onCreateTask:Le},null,8,[`tasks`,`project-labels`,`show-project-label`,`opened-task-id`])]),!Ne.value&&!Ce.value?(A(),x(`div`,{key:1,class:`board__splitter board__splitter--right`,role:`separator`,"aria-orientation":`vertical`,title:D(Q)(`@WORKBENCH:拖动调整主 Agent 控制台宽度,双击恢复默认`),onMousedown:t[3]||=e=>$(`right`,e),onDblclick:t[4]||=e=>Oe(`right`)},null,40,au)):r(``,!0),y(Xc,{ref_key:`consoleRef`,ref:Je,active:D(_),running:D(b),"selected-project":R.value,dispatching:D(S),"toggling-schedule":D(ee),"today-done":H.value.todayDone,collapsed:Ne.value,"default-prompt":D(w),"project-prompts":D(T),reports:D(te),"report-interval-ms":D(k),"generating-report":D(O),"max-instruction-chars":D(C),onToggleCollapse:Pe,onToggleSchedule:Ze,onDispatch:Xe,onGenerateReport:D(ce),onSetReportInterval:D(le),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),y(pl,{modelValue:Qe.value,"onUpdate:modelValue":t[6]||=e=>Qe.value=e,"default-prompt":D(w),"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`]),y(Ml,{modelValue:Ie.value,"onUpdate:modelValue":t[7]||=e=>Ie.value=e,projects:D(o),"default-project-path":Ye.value,onCreated:Re},null,8,[`modelValue`,`projects`,`default-project-path`])],4)}}}),[[`__scopeId`,`data-v-5da69428`]]);X(),z(),b(),fe();var _u={class:`workbench`},vu={class:`wb-editor`},yu={class:`wb-editor-bar`},bu=[`title`],xu=[`title`],Su=[`data-status`,`title`],Cu={class:`wb-editor-bar__status-pill`},wu={class:`wb-editor-bar__status-label`},Tu=[`title`],Eu={key:2,class:`wb-editor-bar__time`},Du=[`title`],Ou={key:1,class:`wb-editor-bar__sep`,"aria-hidden":`true`},ku={key:2,class:`wb-editor-bar__spent`},Au={class:`wb-editor-bar__hint`},ju={class:`workbench__editor-row`},Mu=[`aria-label`,`aria-valuenow`,`title`],Nu={class:`wb-split`},Pu={key:0,class:`wb-placeholder`},Fu={class:`wb-split__header`},Iu={class:`wb-split__title-wrap`},Lu=[`placeholder`,`aria-label`],Ru=[`title`,`aria-label`],zu=[`title`],Bu={key:0,class:`wb-meta-save__dot`},Vu={key:1,class:`wb-meta-save__check`},Hu={key:2,class:`wb-meta-save__bang`},Uu={key:3,class:`wb-meta-save__dot`},Wu=[`title`],Gu={class:`wb-executor-item`},Ku={class:`wb-executor-item__name`},qu=[`title`],Ju={key:2,class:`wb-executor-item__missing`},Yu={key:2,class:`wb-no-claude-hint`,role:`status`},Xu={class:`wb-no-claude-hint__text`},Zu={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},Qu={class:`wb-copy-exec`},$u=[`title`,`aria-label`],ed=[`title`,`aria-label`],td=[`title`,`aria-label`],nd=[`title`,`aria-label`],rd=[`open`],id={class:`wb-task-desc__summary`},ad={class:`wb-task-desc__label`},od=[`title`,`aria-label`],sd={key:0,class:`wb-task-desc__tag`},cd={key:0},ld={key:1,class:`wb-task-desc__tag-attachment`},ud=[`placeholder`,`aria-label`],dd={class:`wb-execution-body`},fd={class:`wb-exec-detail`},pd={class:`wb-form-item__label wb-task-prompt__summary`},md={key:0,class:`wb-task-prompt__tag`},hd={key:0,class:`wb-task-prompt__parts`},gd={class:`wb-task-prompt__label`},_d={class:`wb-task-prompt__text`},vd={key:1,class:`wb-task-prompt__empty`},yd={class:`wb-simple-chat`},bd={class:`wb-simple-chat__footer`},xd={key:0,class:`wb-chat-queue`},Sd={class:`wb-chat-queue__head`},Cd={class:`wb-chat-queue__label`},wd={class:`wb-chat-queue__count`},Td={class:`wb-chat-queue__hint`},Ed={class:`wb-chat-queue__index`},Dd=[`title`],Od={key:0,class:`wb-chat-queue__atts`},kd=[`title`,`aria-label`,`onClick`],Ad=`wb.lastTaskByProject.v1`,jd=`__no_project__`,Md=`wb.sidebarWidth.v1`,Nd=200,Pd=480,Fd=268,Id=3e3,Ld=52,Rd=320,zd=500,Bd=$(s({__name:`WorkbenchView`,setup(e){let n=Me(),a=Pe(),o=Y((()=>{try{let e=parseInt(localStorage.getItem(Md)||``,10);return Number.isFinite(e)?Math.min(Pd,Math.max(Nd,e)):Fd}catch{return Fd}})());function s(e){e.preventDefault();let t=e.clientX,n=o.value;document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let r=e=>{o.value=Math.min(Pd,Math.max(Nd,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(Md,String(o.value))}catch{}},{once:!0})}function c(e){o.value=Math.min(Pd,Math.max(Nd,o.value+e));try{localStorage.setItem(Md,String(o.value))}catch{}}function l(){try{let e=localStorage.getItem(Ad),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function u(e){try{localStorage.setItem(Ad,JSON.stringify(e))}catch{}}function g(e,t){let n=l();n[e||jd]=t,u(n)}let v=Y(!1);function b(){v.value=!1}let ee=Y(null);async function w(e){await ce(),B.value=e.taskId,ee.value=e.taskId,X(),H.value&&g(Be(k.value.path),e.taskId),v.value=!0}let{tasks:T,jobs:te,currentProject:k,connectSSE:ne,disconnectSSE:ae,loadCurrentProject:N,loadJobs:oe,clearJobsByTask:se,loadTasks:ce}=hr();function le(){let e=Be(k.value.path),t=T.value.filter(t=>!t.projectPath||Be(t.projectPath)===e),n=l(),r=e&&n[e]||!e&&n[jd]||``,i=r?T.value.find(e=>e.id===r):null,a=t[0]||T.value[0]||null,o=i&&i.projectPath&&Be(i.projectPath)!==e?null:i?i.id:a?a.id:null;B.value=o,X()}async function R(){let e=B.value;if(await ce(),e&&T.value.some(t=>t.id===e)){X();return}le()}async function ue(){await ce(),le()}let z=Y(!1),B=Y(null),H=q(()=>T.value.find(e=>e.id===B.value)||null),fe=Y([]),me=q(()=>fe.value.find(e=>e.id===B.value)||null),he=q(()=>me.value?Hn(qn(me.value)):``),ye=q(()=>me.value?Zn(me.value):``),xe=q(()=>me.value?Qn(me.value):``),Se=q(()=>{let e=H.value?.projectPath||``;return!e||Be(e)===Be(k.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),Ce=Y({title:``,desc:``});function X(){H.value?Ce.value={title:H.value.title,desc:H.value.desc}:Ce.value={title:``,desc:``}}let Z=Y(`idle`),Ee=Y(0),De=null,$=q(()=>{if(!H.value)return!1;let e=H.value;return Ce.value.title!==e.title||Ce.value.desc!==e.desc});function Oe(){De!==null&&(clearTimeout(De),De=null)}function ke(e){return!(!e||(e.title||``).trim()||(e.desc||``).trim()||(e.simpleOverride||``).trim()||Array.isArray(e.attachments)&&e.attachments.length>0)}async function Fe(e){try{await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`})}catch{}let t=T.value.findIndex(t=>t.id===e.id);t!==-1&&T.value.splice(t,1)}async function Ie(){let e=T.value.filter(e=>e.id!==B.value&&ke(e));for(let t of e)await Fe(t)}async function Le(){if(!H.value)return!1;if(!$.value)return!0;if(Z.value=`saving`,await Mt(!1))return Ee.value=Date.now(),Z.value=`saved`,setTimeout(()=>{Z.value===`saved`&&Date.now()-Ee.value>=4e3&&(Z.value=`idle`)},4e3),!0;Z.value=`error`;let e=Date.now();return setTimeout(()=>{Z.value===`error`&&Date.now()-e>=4e3&&(Z.value=`idle`)},4e3),!1}P(()=>H.value?{id:H.value.id,title:H.value.title,desc:H.value.desc}:null,(e,t)=>{e&&t&&e.id===t.id&&(De!==null&&clearTimeout(De),De=window.setTimeout(()=>{Le()},1500))},{deep:!0}),P(B,async(e,t)=>{Oe(),H.value&&$.value&&await Le()}),P(k,async e=>{if(!e.path)return;let t=Be(e.path),n=H.value;n&&n.projectPath&&Be(n.projectPath)!==t&&await ue()});function Re(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function ze(){H.value&&$.value&&!ke(H.value)&&Re(H.value)}let Ve=Y(!1);async function Ue(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 We=Y(null),Ge=Y(null);async function Ke(e){if(e){if(!await Ue((e.title||``).trim()||Q(`@WORKBENCH:未命名任务`))){V.error(Q(`@WORKBENCH:复制失败`));return}We.value=e.id,V.success(Q(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{We.value===e.id&&(We.value=null)},1500)}}async function qe(e){if(!e)return;let t=(e.desc||``).trim();if(!t){V.warning(Q(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await Ue(t)){V.error(Q(`@WORKBENCH:复制失败`));return}Ge.value=e.id,V.success(Q(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{Ge.value===e.id&&(Ge.value=null)},1500)}let{simpleConversationMessages:Je,simpleAllJobsFor:Ye,simpleJobFor:Ze,simpleJobState:Qe}=fr(te,H);function $e(e){let t=String(e?.id||``).replace(/-a$/,``),n=te.value.find(e=>e.id===t);return n?Kt(n):!1}let et=Y(null);function tt(e){let t=(e?.projectPath||``).trim().replace(/[\\/]+$/,``);return t?t.split(/[\\/]/).pop()||t:k.value.name||``}async function nt(e,t=`brief`){if(!e)return;let n=ct(Ye(e),{title:e.title,projectName:tt(e)},{scope:t});if(!n){V.warning(Q(`@WORKBENCH:暂无执行内容可复制`));return}if(!await Ue(n)){V.error(Q(`@WORKBENCH:复制失败`));return}et.value=e.id,V.success(Q(`@WORKBENCH:已复制执行内容`)),window.setTimeout(()=>{et.value===e.id&&(et.value=null)},1500)}function rt(e){nt(H.value,e===`full`?`full`:`brief`)}let it=[`wheel`,`touchstart`,`pointerdown`,`keydown`],at=Y(null),ot=Y(null),st=null,lt=null,ut=null;function dt(){if(st&&=(st.disconnect(),null),lt!==null&&(clearTimeout(lt),lt=null),ut){for(let e of it)ut.removeEventListener(e,dt);ut=null}}function ft(){dt();let e=at.value;if(!e)return;e.scrollToBottom?.(!1);let t=ot.value?.querySelector(`.acu-message-list`);if(!(!t||typeof ResizeObserver>`u`)){ut=t;for(let e of it)t.addEventListener(e,dt,{passive:!0});st=new ResizeObserver(()=>at.value?.scrollToBottom?.(!1)),st.observe(t),t.firstElementChild&&st.observe(t.firstElementChild),lt=setTimeout(dt,Id)}}let pt=q(()=>v.value&&H.value&&Ye(H.value).length>0?H.value.id:``);P(pt,async e=>{dt(),e&&(await O(),ft())}),m(dt);function mt(e){return e?qt(e.id):!1}let ht=q(()=>Ye(H.value).length>0),gt=q(()=>mt(H.value)),_t=q(()=>H.value?gt.value?Q(`@WORKBENCH:正在执行中,请先「停止」再重新执行`):ht.value?Q(`@WORKBENCH:重新跑一轮:上一轮的执行记录会被清空`):``:``),vt=q(()=>{if(!H.value)return null;let e=me.value;if(gt.value||e&&e.runningJobs>0)return{key:`running`,label:Q(`@WORKBENCH:执行中`),title:Q(`@WORKBENCH:这条任务正在执行`)};if(e)return e.column===`done`?{key:`done`,label:Q(`@WORKBENCH:已完成`),title:e.autoCompleted?Q(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`):e.manualDoneAt?Q(`@WORKBENCH:已标记为已完成`):``}:e.lastJobStatus===`error`?{key:`error`,label:Q(`@WORKBENCH:执行失败`),title:Q(`@WORKBENCH:上一次执行报错,点开对话流查看原因`)}:{key:`todo`,label:Q(`@WORKBENCH:待处理`),title:``};switch(Qe(Ze(H.value))){case`done`:return{key:`done`,label:Q(`@WORKBENCH:已完成`),title:``};case`error`:return{key:`error`,label:Q(`@WORKBENCH:执行失败`),title:``};case`cancelled`:return{key:`todo`,label:Q(`@WORKBENCH:已取消`),title:``};default:return{key:`todo`,label:Q(`@WORKBENCH:待处理`),title:``}}}),yt=q(()=>{let e=H.value;if(!e)return[];let t=e.promptParts;if(t&&(t.global||t.project)){let e=[];return t.global&&e.push({key:`global`,label:Q(`@WORKBENCH:全局提示词`),text:t.global}),t.project&&e.push({key:`project`,label:Q(`@WORKBENCH:项目提示词`),text:t.project}),e}let n=(e.simpleOverride||``).trim();return n?[{key:`legacy`,label:Q(`@WORKBENCH:提示词`),text:n}]:[]}),bt=Y(!1),xt=Y(null),St=Y(null);function Ct(e){let t=e?.currentTarget||St.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?zd:Rd,r=Math.min(Math.max(t.scrollHeight,Ld),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}P(Ve,async e=>{e&&(await O(),Ct())}),P(()=>H.value?.id,async()=>{Ve.value&&(await O(),Ct())});async function wt(){if(bt.value)return;bt.value=!0;let e={title:``,desc:``};k.value.path&&(e.projectPath=k.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){V.error(t.error||Q(`@WORKBENCH:保存失败`));return}Oe(),H.value&&ke(H.value)?await Fe(H.value):H.value&&$.value&&await Le(),await ue(),t.task?.id&&(B.value=t.task.id,X(),V.success(Q(`@WORKBENCH:已新建任务`)),await O(),xt.value?.focus())}finally{bt.value=!1}}async function Et(e){await W.confirm(Q(`@WORKBENCH:删除任务「{title}」?`,{title:e.title}),Q(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),B.value===e.id&&(B.value=null),ue()}async function Dt(e){let t=(e.title||Q(`@WORKBENCH:未命名任务`)).trim(),n={title:Q(`@WORKBENCH:{title} (副本)`,{title:t}),desc:e.desc||``,simpleOverride:e.simpleOverride||``};e.promptParts&&(e.promptParts.global||e.promptParts.project)&&(n.promptParts=e.promptParts),k.value.path&&(n.projectPath=k.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){V.error(e.error||Q(`@WORKBENCH:复制失败`));return}await ue(),e.task?.id&&(B.value=e.task.id,X()),V.success(Q(`@WORKBENCH:已复制任务`))}catch(e){V.error(Q(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function Ot(e){if(B.value===e.id)return;Oe();let t=H.value;t&&ke(t)?await Fe(t):t&&$.value&&await Le(),B.value=e.id,X(),g(Be(k.value.path),e.id)}async function At(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=T.value.slice(),i=jt(T.value,t,n);if(i!==T.value){T.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:Q(`@WORKBENCH:排序保存失败`)}));e?.success||(T.value=r,V.error(e?.error||Q(`@WORKBENCH:排序保存失败`)))}catch(e){T.value=r,V.error(Q(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function jt(e,t,n){let r=e=>Be(e)||jd,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 Mt(e){if(!H.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(H.value)}).then(e=>e.json());return t.success?(e&&V.success(Q(`@WORKBENCH:已保存`)),await R(),!0):(V.error(t.error||Q(`@WORKBENCH:保存失败`)),!1)}f(async()=>{await Promise.all([ue(),N(),oe()]),await Ie(),ne(),window.addEventListener(`beforeunload`,ze),a.fetchExecutorModels()}),m(()=>{ae(),window.removeEventListener(`beforeunload`,ze),H.value&&$.value&&!ke(H.value)&&Re(H.value)});let{pasteHoverId:Nt,isUploading:Pt,isImageAttachment:Ft,humanSize:It,onAttachmentPaste:Lt,onAttachmentDrop:Rt,uploadAttachment:zt,removeAttachment:Bt,pickAttachmentFile:Vt}=lr(),{runTask:Ht,onContinueSendFromChat:Ut,cancelJob:Wt,clearExecutionForSelectedTask:Gt,onReExecuteJob:Kt,isTaskRunning:qt,queuedChatsOf:Jt,removeQueuedChat:Yt,flushNextQueued:Xt}=pr(te,T,H,{clearJobsByTask:se,persistTask:Mt,uploadAttachment:zt,getExecutor:()=>Zt.value}),{active:Zt,availability:Qt,hasAnyExecutor:$t,choose:en,executorModelText:tn,executorModelTitle:nn}=mr();function rn(e){return je(e)}let an=q(()=>Ye(H.value).slice(-1)[0]),on=q(()=>je(an.value?.agent)),sn=q(()=>kt(an.value?.agent)),cn=q(()=>H.value?Jt(H.value.id):[]);return(e,a)=>{let l=d,u=t,f=be,m=C;return A(),x(`div`,_u,[y(gu,{"opened-task-id":ee.value,onOpenTask:w,onBoardTasks:a[0]||=e=>fe.value=e},null,8,[`opened-task-id`]),y(Ne,{modelValue:v.value,"onUpdate:modelValue":a[24]||=e=>v.value=e,title:D(Q)(`@WORKBENCH:任务执行`),type:`flex`,"height-mode":`fixed`,"height-offset":`88px`,top:`2vh`,width:`min(1520px, 96vw)`},{default:G(()=>[E(`div`,vu,[E(`div`,yu,[E(`button`,{type:`button`,class:`wb-back-btn`,title:D(Q)(`@WORKBENCH:返回看板`),onClick:b},[y(l,{class:`wb-back-btn__icon`},{default:G(()=>[y(D(re))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:返回看板`)),1)],8,bu),E(`span`,{class:`wb-editor-bar__project`,title:D(k).path},M(D(k).name),9,xu),vt.value?(A(),x(`span`,{key:0,class:h([`wb-editor-bar__status`,`is-`+vt.value.key]),"data-status":vt.value.key,title:vt.value.title||void 0},[E(`span`,Cu,[a[26]||=E(`span`,{class:`wb-editor-bar__status-dot`,"aria-hidden":`true`},null,-1),E(`span`,wu,M(vt.value.label),1)])],10,Su)):r(``,!0),Se.value?(A(),x(`span`,{key:1,class:`wb-editor-bar__repo`,title:Se.value.path},M(D(Q)(`@WORKBENCH:执行于 {name}`,{name:Se.value.name})),9,Tu)):r(``,!0),he.value||ye.value?(A(),x(`span`,Eu,[he.value?(A(),x(`span`,{key:0,class:`wb-editor-bar__ago`,title:xe.value},M(he.value),9,Du)):r(``,!0),he.value&&ye.value?(A(),x(`span`,Ou,`·`)):r(``,!0),ye.value?(A(),x(`span`,ku,M(ye.value),1)):r(``,!0)])):r(``,!0),E(`span`,Au,M(D(Q)(`@WORKBENCH:任务执行`)),1)]),E(`div`,ju,[y(Vr,{style:p({width:o.value+`px`}),tasks:D(T),"selected-task-id":B.value,"current-project":D(k),"creating-task":bt.value,"is-task-running":mt,onSelectTask:Ot,onDeleteTask:Et,onCopyTask:Dt,onCreateTask:wt,onReorderTasks:At},null,8,[`style`,`tasks`,`selected-task-id`,`current-project`,`creating-task`]),E(`div`,{class:`wb-splitter`,role:`separator`,tabindex:`0`,"aria-orientation":`vertical`,"aria-label":D(Q)(`@WORKBENCH:拖动调整侧边栏宽度`),"aria-valuenow":o.value,"aria-valuemin":Nd,"aria-valuemax":Pd,title:D(Q)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:s,onKeydown:[a[1]||=K(J(e=>c(-16),[`prevent`]),[`left`]),a[2]||=K(J(e=>c(16),[`prevent`]),[`right`])]},null,40,Mu),E(`section`,Nu,[H.value?(A(),x(F,{key:1},[E(`div`,Fu,[E(`div`,Iu,[I(E(`input`,{ref_key:`titleInputRef`,ref:xt,class:`wb-input wb-input--title`,"onUpdate:modelValue":a[3]||=e=>H.value.title=e,placeholder:D(Q)(`@WORKBENCH:任务标题`),"aria-label":D(Q)(`@WORKBENCH:任务标题`)},null,8,Lu),[[de,H.value.title]]),E(`button`,{type:`button`,class:h([`wb-copy-btn`,{"is-flash":We.value===H.value.id}]),title:D(Q)(`@WORKBENCH:复制任务标题`),"aria-label":D(Q)(`@WORKBENCH:复制任务标题`),onClick:a[4]||=e=>Ke(H.value)},[We.value===H.value.id?(A(),i(l,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:G(()=>[...a[27]||=[_(`✓`,-1)]]),_:1})):(A(),i(l,{key:0,class:`wb-copy-btn__icon`},{default:G(()=>[y(D(L))]),_:1}))],10,Ru)]),Z.value!==`idle`||$.value?(A(),x(`span`,{key:0,class:h([`wb-meta-save`,{"is-saving":Z.value===`saving`,"is-saved":Z.value===`saved`,"is-error":Z.value===`error`,"is-dirty":$.value&&Z.value===`idle`}]),title:Z.value===`saving`?D(Q)(`@WORKBENCH:保存中…`):Z.value===`error`?D(Q)(`@WORKBENCH:保存失败`):Z.value===`saved`?D(Q)(`@WORKBENCH:已保存`):``},[Z.value===`saving`?(A(),x(`span`,Bu)):Z.value===`saved`?(A(),x(`span`,Vu,`✓`)):Z.value===`error`?(A(),x(`span`,Hu,`!`)):(A(),x(`span`,Uu)),_(` `+M(Z.value===`saving`?D(Q)(`@WORKBENCH:保存中…`):Z.value===`saved`?D(Q)(`@WORKBENCH:已保存`):Z.value===`error`?D(Q)(`@WORKBENCH:保存失败`):D(Q)(`@WORKBENCH:有未保存的更改`)),1)],10,zu)):r(``,!0),D($t)?(A(),i(m,{key:1,"split-button":``,type:`primary`,class:`wb-executor-split`,trigger:`click`,disabled:gt.value,title:_t.value,onClick:a[5]||=e=>D(Ht)(H.value),onCommand:D(en)},{dropdown:G(()=>[y(f,null,{default:G(()=>[(A(!0),x(F,null,S(D(Ae),e=>(A(),i(u,{key:e.id,command:e.id,disabled:!D(Qt)[e.id]},{default:G(()=>[E(`span`,Gu,[y(He,{executor:e.id,class:`wb-executor-item__icon`},null,8,[`executor`]),E(`span`,Ku,M(e.name),1),D(tn)(e.id)?(A(),x(`span`,{key:0,class:`wb-executor-item__model`,title:D(nn)(e.id)},M(D(tn)(e.id)),9,qu)):r(``,!0),D(Zt)===e.id?(A(),i(l,{key:1,class:`wb-executor-item__check`},{default:G(()=>[y(D(ve))]),_:1})):D(Qt)[e.id]?r(``,!0):(A(),x(`span`,Ju,M(D(Q)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:G(()=>[_(M(ht.value?D(Q)(`@WORKBENCH:重新执行任务`):D(Q)(`@WORKBENCH:执行任务`))+` `,1),E(`span`,{class:`wb-executor-split__hint`,title:D(nn)(D(Zt))},[y(He,{executor:D(Zt),class:`wb-executor-split__hint-icon`},null,8,[`executor`]),_(` `+M(rn(D(Zt))),1)],8,Wu)]),_:1},8,[`disabled`,`title`,`onCommand`])):(A(),x(`div`,Yu,[y(l,{class:`wb-no-claude-hint__icon`},{default:G(()=>[y(D(ge))]),_:1}),E(`span`,Xu,M(D(Q)(`@WORKBENCH:未检测到本地 claude / opencode,无法执行任务`)),1),E(`a`,Zu,M(D(Q)(`@WORKBENCH:查看安装指引`)),1)])),E(`div`,Qu,[E(`button`,{type:`button`,class:h([`wb-logs-inline-btn wb-logs-inline-btn--copy wb-copy-exec__main`,{"is-flash":et.value===H.value.id}]),title:D(Q)(`@WORKBENCH:复制本任务的对话流(默认精简:仅提示词 + 模型回复)`),"aria-label":D(Q)(`@WORKBENCH:复制执行内容`),onClick:a[6]||=e=>nt(H.value,`brief`)},[et.value===H.value.id?(A(),i(l,{key:1,class:`wb-logs-inline-btn__icon`},{default:G(()=>[...a[28]||=[_(`✓`,-1)]]),_:1})):(A(),i(l,{key:0,class:`wb-logs-inline-btn__icon`},{default:G(()=>[y(D(L))]),_:1})),E(`span`,null,M(D(Q)(`@WORKBENCH:复制执行内容`)),1)],10,$u),y(m,{trigger:`click`,placement:`bottom-end`,onCommand:rt},{dropdown:G(()=>[y(f,null,{default:G(()=>[y(u,{command:`brief`},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:精简:提示词 + 模型回复`)),1)]),_:1}),y(u,{command:`full`},{default:G(()=>[_(M(D(Q)(`@WORKBENCH:全量:提示词 / 思考 / 工具调用 / 模型回复`)),1)]),_:1})]),_:1})]),default:G(()=>[E(`button`,{type:`button`,class:`wb-logs-inline-btn wb-copy-exec__caret`,title:D(Q)(`@WORKBENCH:选择复制范围`),"aria-label":D(Q)(`@WORKBENCH:选择复制范围`)},[y(l,{class:`wb-logs-inline-btn__icon`},{default:G(()=>[y(D(ie))]),_:1})],8,ed)]),_:1})]),E(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:D(Q)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":D(Q)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:a[7]||=(...e)=>D(Gt)&&D(Gt)(...e)},[y(l,{class:`wb-logs-inline-btn__icon`},{default:G(()=>[y(D(pe))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:清空执行`)),1)],8,td),E(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:D(Q)(`@WORKBENCH:执行日志`),"aria-label":D(Q)(`@WORKBENCH:执行日志`),onClick:a[8]||=e=>z.value=!0},[y(l,{class:`wb-logs-inline-btn__icon`},{default:G(()=>[y(D(U))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:执行日志`)),1)],8,nd)]),E(`details`,{class:`wb-task-desc`,open:Ve.value,onToggle:a[20]||=e=>Ve.value=e.target.open},[E(`summary`,id,[y(l,{class:`wb-task-desc__caret`},{default:G(()=>[(A(),i(_e(Ve.value?D(ie):D(j))))]),_:1}),E(`span`,ad,M(D(Q)(`@WORKBENCH:任务描述(可选)`)),1),E(`button`,{type:`button`,class:h([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":Ge.value===H.value.id}]),title:H.value.desc&&H.value.desc.trim()?D(Q)(`@WORKBENCH:复制任务描述`):D(Q)(`@WORKBENCH:任务描述为空,无需复制`),"aria-label":D(Q)(`@WORKBENCH:复制任务描述`),onClick:a[9]||=J(e=>qe(H.value),[`stop`,`prevent`])},[Ge.value===H.value.id?(A(),i(l,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:G(()=>[...a[29]||=[_(`✓`,-1)]]),_:1})):(A(),i(l,{key:0,class:`wb-copy-btn__icon`},{default:G(()=>[y(D(L))]),_:1}))],10,od),H.value.desc&&H.value.desc.length>0||H.value.attachments&&H.value.attachments.length>0?(A(),x(`span`,sd,[H.value.desc&&H.value.desc.length>0?(A(),x(`span`,cd,M(D(Q)(`@WORKBENCH:已填写`)),1)):r(``,!0),H.value.attachments&&H.value.attachments.length>0?(A(),x(`span`,ld,M(H.value.attachments.length),1)):r(``,!0)])):r(``,!0)]),I(E(`textarea`,{ref_key:`taskDescTextareaRef`,ref:St,class:`wb-textarea wb-textarea--autogrow`,"onUpdate:modelValue":a[10]||=e=>H.value.desc=e,placeholder:D(Q)(`@WORKBENCH:任务描述(可选)`),"aria-label":D(Q)(`@WORKBENCH:任务描述(可选)`),onInput:a[11]||=e=>Ct(e),onFocus:a[12]||=e=>Ct(e),onBlur:a[13]||=e=>Ct(e),onPaste:a[14]||=e=>D(Lt)(e,{kind:`task`,task:H.value})},null,40,ud),[[de,H.value.desc]]),y(Tt,{attachments:H.value.attachments||[],"is-image":D(Ft),"human-size":D(It),"is-uploading":D(Pt)(`task-`+H.value.id),"is-paste-hover":D(Nt)===`task-`+H.value.id,"on-pick":()=>D(Vt)({kind:`task`,task:H.value}),"on-remove":e=>D(Bt)({kind:`task`,task:H.value},e),onPaste:a[15]||=e=>D(Lt)(e,{kind:`task`,task:H.value}),onDrop:a[16]||=J(e=>D(Rt)(e,{kind:`task`,task:H.value}),[`prevent`]),onDragover:a[17]||=J(e=>Nt.value=`task-`+H.value.id,[`prevent`]),onDragenter:a[18]||=J(e=>Nt.value=`task-`+H.value.id,[`prevent`]),onDragleave:a[19]||=e=>Nt.value=D(Nt)===`task-`+H.value.id?null:D(Nt)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,rd),E(`div`,dd,[E(`div`,fd,[E(`details`,{class:h([`wb-task-prompt`,{"has-content":yt.value.length>0}])},[E(`summary`,pd,[y(l,{class:`wb-task-prompt__caret`},{default:G(()=>[y(D(j))]),_:1}),E(`span`,null,M(D(Q)(`@WORKBENCH:提示词`)),1),yt.value.length>0?(A(),x(`span`,md,M(D(Q)(`@WORKBENCH:已填写`)),1)):r(``,!0),D(Qe)(D(Ze)(H.value))===`running`&&D(Ze)(H.value)?(A(),x(`button`,{key:1,class:`wb-simple__stop`,onClick:a[21]||=J(e=>D(Wt)(D(Ze)(H.value)),[`stop`])},M(D(Q)(`@WORKBENCH:停止`)),1)):r(``,!0)]),yt.value.length>0?(A(),x(`div`,hd,[(A(!0),x(F,null,S(yt.value,e=>(A(),x(`div`,{key:e.key,class:`wb-task-prompt__part`},[E(`div`,gd,M(e.label),1),E(`pre`,_d,M(e.text),1)]))),128))])):(A(),x(`p`,vd,M(D(Q)(`@WORKBENCH:这条任务没有附加提示词`)),1))],2),D(Ye)(H.value).length>0?(A(),x(`div`,{key:0,class:`wb-simple-chat-wrap`,ref_key:`chatWrapRef`,ref:ot},[E(`div`,yd,[(A(),i(D(we),{ref_key:`chatRef`,ref:at,key:H.value.id,messages:D(Je),"assistant-name":on.value,"assistant-avatar":sn.value,"show-avatar":!0,theme:D(n).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:D(Q)(`@AGENT:计划`),raw:D(Q)(`@AGENT:原始参数`)}},"message-rail-config":D(Xe),"show-input":!1,onRetry:$e},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`,`message-rail-config`]))]),E(`div`,bd,[cn.value.length?(A(),x(`div`,xd,[E(`div`,Sd,[E(`span`,Cd,M(D(Q)(`@WORKBENCH:排队中`)),1),E(`span`,wd,M(cn.value.length),1),E(`span`,Td,M(gt.value?D(Q)(`@WORKBENCH:等这一轮跑完自动发送`):D(Q)(`@WORKBENCH:当前没有在跑的轮次`)),1)]),(A(!0),x(F,null,S(cn.value,(e,t)=>(A(),x(`div`,{key:e.id,class:`wb-chat-queue__item`},[E(`span`,Ed,M(t+1),1),E(`span`,{class:`wb-chat-queue__text`,title:e.text},M(e.text),9,Dd),e.files.length?(A(),x(`span`,Od,[a[30]||=E(`span`,{"aria-hidden":`true`},`📎`,-1),_(` `+M(e.files.map(e=>e.file.name).join(`、`)),1)])):r(``,!0),t===0&&!gt.value?(A(),x(`button`,{key:1,type:`button`,class:`wb-chat-queue__btn`,onClick:a[22]||=e=>D(Xt)(H.value.id)},M(D(Q)(`@WORKBENCH:立即发送`)),1)):r(``,!0),E(`button`,{type:`button`,class:`wb-chat-queue__btn is-remove`,title:D(Q)(`@WORKBENCH:移出队列`),"aria-label":D(Q)(`@WORKBENCH:移出队列`),onClick:t=>D(Yt)(H.value.id,e.id)},`✕`,8,kd)]))),128))])):r(``,!0),(A(),i(D(Te),{key:`input-`+H.value.id,placeholder:gt.value?D(Q)(`@WORKBENCH:执行中,发送后会排队,等这一轮跑完自动接上…`):D(Q)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:D(er),multiple:!0,maxCount:0,maxSize:D(tr)},class:`wb-simple-chat__input`,onSend:a[23]||=e=>D(Ut)(H.value,e)},null,8,[`placeholder`,`upload-config`]))])],512)):r(``,!0)])])],64)):(A(),x(`div`,Pu,[E(`p`,null,M(D(Q)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])])]),_:1},8,[`modelValue`,`title`]),y(Ne,{modelValue:z.value,"onUpdate:modelValue":a[25]||=e=>z.value=e,title:D(Q)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,type:`flex`,"custom-class":`wb-logs-dialog`,"append-to-body":``},{default:G(()=>[y(Rn)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-94990db7`]]);export{Bd as default};