zen-gitsync 2.17.29 → 2.17.30

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