zen-gitsync 2.17.45 → 2.17.47

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 (55) hide show
  1. package/package.json +1 -1
  2. package/src/cli/ai/agent.js +1342 -1338
  3. package/src/cli/ai/context.js +431 -179
  4. package/src/cli/ai/context.test.js +376 -195
  5. package/src/cli/ai/runtime.test.js +7 -4
  6. package/src/cli/ai/turn.js +166 -164
  7. package/src/config.js +906 -852
  8. package/src/ui/public/assets/{AgentEngineSelector-DklehAya.js → AgentEngineSelector-CKiVaqrY.js} +1 -1
  9. package/src/ui/public/assets/{AgentView-h2YnbB7J.css → AgentView-CRqQYAzh.css} +1 -1
  10. package/src/ui/public/assets/{AgentView-BB83G3x3.js → AgentView-c1frCBc3.js} +1 -1
  11. package/src/ui/public/assets/{AppVersionBadge-DD9jzd0T.js → AppVersionBadge-IWS9XBUV.js} +2 -2
  12. package/src/ui/public/assets/{BranchSelector-BNK9Sh9m.js → BranchSelector-C_mK2mkS.js} +1 -1
  13. package/src/ui/public/assets/{CommitForm-DhOR8SLd.js → CommitForm-C6I9rQXn.js} +1 -1
  14. package/src/ui/public/assets/{CommonDialog-DiiVswHL.js → CommonDialog-2zVHBuqT.js} +1 -1
  15. package/src/ui/public/assets/EditorView-DUJrWJgh.js +1 -0
  16. package/src/ui/public/assets/{EditorView-8Rb4n-Wh.css → EditorView-DqagGedH.css} +1 -1
  17. package/src/ui/public/assets/{FlowExecutionViewer-Bn4uBFZ9.js → FlowExecutionViewer-0Xw0oDen.js} +1 -1
  18. package/src/ui/public/assets/{FlowOrchestrationWorkspace-B91-BIvF.js → FlowOrchestrationWorkspace-BKUspY-s.js} +1 -1
  19. package/src/ui/public/assets/{LogList-kVdrFbaC.js → LogList-pbwn5n2S.js} +1 -1
  20. package/src/ui/public/assets/{MindmapView-C19009vK.js → MindmapView-DYh6nuuF.js} +1 -1
  21. package/src/ui/public/assets/{MonitorView-kcZy_KA1.js → MonitorView-CsJyUL9v.js} +1 -1
  22. package/src/ui/public/assets/{ProjectStartupButton-BA4CrfPz.js → ProjectStartupButton-BhFQfAX1.js} +1 -1
  23. package/src/ui/public/assets/{RecentDirectoriesChat-Qx78wLVb.js → RecentDirectoriesChat-DM6sRO9L.js} +1 -1
  24. package/src/ui/public/assets/{RemoteManagerDialog-DnRcxJ1E.js → RemoteManagerDialog-CIZagKkC.js} +1 -1
  25. package/src/ui/public/assets/{RemoteRepoCard-Tpm3yKuD.js → RemoteRepoCard-Dj-B-6WU.js} +1 -1
  26. package/src/ui/public/assets/{SourceMapView-DyS6VOG0.js → SourceMapView-pIlmQzYw.js} +1 -1
  27. package/src/ui/public/assets/{SvgIcon-CRCQbZ1H.js → SvgIcon-CaefOO1F.js} +1 -1
  28. package/src/ui/public/assets/{UserInputNode-CibAkKOU.js → UserInputNode-1--I25vm.js} +1 -1
  29. package/src/ui/public/assets/{WorkbenchView-CzKsiGr3.css → WorkbenchView-BLzcZqy0.css} +1 -1
  30. package/src/ui/public/assets/WorkbenchView-bpzL6m84.js +20 -0
  31. package/src/ui/public/assets/{_plugin-vue_export-helper-DO_hkLgw.js → _plugin-vue_export-helper-UTW98kcD.js} +5 -5
  32. package/src/ui/public/assets/agentConversations-B9LNft3v.js +8 -0
  33. package/src/ui/public/assets/configStore-H-n3ukZ_.js +1 -0
  34. package/src/ui/public/assets/{dagre-DyI0XLXY.js → dagre-Br4Eexe7.js} +3 -3
  35. package/src/ui/public/assets/{element-plus-DrCk0pcV.js → element-plus-CZdvD4lq.js} +1 -1
  36. package/src/ui/public/assets/{flow-mindmap-Cx5RNYN9.js → flow-mindmap-4kZ-2J2Y.js} +1 -1
  37. package/src/ui/public/assets/{index-DxRA_V28.css → index-BgN6Z2X9.css} +1 -1
  38. package/src/ui/public/assets/{index-Czdu1C9o.js → index-CD7otmb_.js} +12 -12
  39. package/src/ui/public/assets/{monaco-Dfcwm1aX.js → monaco-CoYCcK3Q.js} +1 -1
  40. package/src/ui/public/assets/{office-docx-C0unxEAm.js → office-docx-DndLP6GO.js} +1 -1
  41. package/src/ui/public/assets/{office-excel-DPdyr_DJ.js → office-excel-Jt5zzo6D.js} +1 -1
  42. package/src/ui/public/assets/{office-pptx-eojGAs9D.js → office-pptx-J8tzRTjU.js} +1 -1
  43. package/src/ui/public/assets/{vendor-yntih_em.js → vendor-BD09UDuP.js} +500 -500
  44. package/src/ui/public/assets/vendor-DNiTBOIX.css +1 -0
  45. package/src/ui/public/assets/{vue-flow-De8mr_Fv.js → vue-flow-CkM05TWt.js} +1 -1
  46. package/src/ui/public/index.html +13 -13
  47. package/src/ui/server/routes/config.js +1321 -1282
  48. package/src/ui/server/routes/workbench/agentChat.js +594 -566
  49. package/src/ui/server/routes/workbench/agentChatShared.test.js +302 -233
  50. package/src/ui/server/routes/workbench/agentRoutes.js +631 -621
  51. package/src/ui/public/assets/EditorView-Bujglhs9.js +0 -1
  52. package/src/ui/public/assets/WorkbenchView-CZoswfeC.js +0 -20
  53. package/src/ui/public/assets/agentConversations-gSbkMpVI.js +0 -7
  54. package/src/ui/public/assets/configStore-7LTPR6P8.js +0 -1
  55. package/src/ui/public/assets/vendor-CP-WuGZG.css +0 -1
@@ -1 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Cn as t,Dn as n,En as r,Gn as i,Gr as a,Hn as o,Mn as s,Mr as c,Pn as l,Rn as u,Tn as d,W as ee,Xr as f,Yn as p,Zn as te,_n as ne,dr as m,gn as re,hn as ie,i as h,ir as g,jn as _,ln as v,or as ae,qn as oe,qr as y,r as se,sr as b,vn as ce,vr as x,wn as S,wr as C,xn as le,yn as w,yr as ue}from"./element-plus-DrCk0pcV.js";import{a as de,r as T,t as fe}from"./vendor-yntih_em.js";import{n as E,t as D}from"./_plugin-vue_export-helper-DO_hkLgw.js";import{t as pe}from"./SvgIcon-CRCQbZ1H.js";import{t as me}from"./configStore-7LTPR6P8.js";import{a as he,c as ge,i as _e,n as ve,o as ye,r as be,s as xe}from"./monaco-Dfcwm1aX.js";import{n as Se,r as O}from"./flow-mindmap-Cx5RNYN9.js";import{A as Ce,F as we,I as Te,M as Ee,N as De,O as Oe,P as ke,d as Ae,i as je,j as Me,k}from"./index-Czdu1C9o.js";import{a as Ne,i as Pe,n as Fe,o as Ie,r as Le,s as Re,t as ze}from"./agentConversations-gSbkMpVI.js";import{n as Be,t as A}from"./AgentEngineSelector-DklehAya.js";function j(e){return{ts:`typescript`,tsx:`typescript`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,jsx:`javascript`,vue:`html`,html:`html`,htm:`html`,css:`css`,scss:`scss`,less:`less`,json:`json`,jsonc:`json`,md:`markdown`,markdown:`markdown`,yaml:`yaml`,yml:`yaml`,toml:`ini`,xml:`xml`,svg:`xml`,sh:`shell`,bash:`shell`,zsh:`shell`,fish:`shell`,ps1:`powershell`,py:`python`,go:`go`,rs:`rust`,java:`java`,kt:`kotlin`,rb:`ruby`,php:`php`,c:`c`,cpp:`cpp`,h:`cpp`,cs:`csharp`,sql:`sql`,graphql:`graphql`,gql:`graphql`,txt:`plaintext`,log:`plaintext`,ini:`ini`,env:`ini`,gitignore:`ini`,dockerfile:`dockerfile`}[e.toLowerCase()]??`plaintext`}u(),m();var M={class:`mindmap-preview`},N={class:`mindmap-preview-canvas`},P=D(l({__name:`MindmapPreview`,props:{content:{}},setup(e){let r=e,i=t(()=>O(r.content||``,`未命名文档`));return(e,t)=>(p(),n(`div`,M,[t[0]||=S(`div`,{class:`mindmap-preview-header`},[S(`span`,{class:`mindmap-preview-title`},`整篇导图`),S(`span`,{class:`mindmap-preview-hint`},`基于整篇 Markdown 自动生成 · 阅读模式`)],-1),S(`div`,N,[s(C(Se),{data:i.value,"preview-mode":``},null,8,[`data`])])]))}}),[[`__scopeId`,`data-v-d2fe328b`]]);u(),m(),c(),v();var Ve={class:`agent-panel-header`},He=[`title`,`aria-label`],Ue={class:`agent-panel-title`},We={key:1,class:`agent-panel-title`},Ge=[`title`,`aria-label`],Ke=[`title`],qe={class:`agent-panel-convs`},Je=[`data-theme`],F=[`title`],I={class:`agent-context-att-name`},L=[`title`,`aria-label`],Ye=D(l({__name:`EditorAgentPanel`,props:{activeFilePath:{},activeFileName:{},active:{type:Boolean}},emits:[`close`],setup(c,{emit:l}){let u=c,ee=l,{theme:te}=De(),ne=t(()=>te.value===`dark`?`dark`:`light`),{sessions:m,sessionsLoading:ie,currentSessionId:h,messages:_,isStreaming:v,pendingQuestion:ae,answeringQuestion:y,isSessionGenerating:se,currentEngine:ce,pendingEngine:ue,isEngineLocked:D,pickEngine:pe,loadSessions:me,loadSession:he,deleteSession:ge,renameSession:_e,newSession:ve,sendMessage:ye,answerQuestion:be,stop:xe}=Re(),Se=t(()=>D.value?ce.value:ue.value);function O(e){D.value||pe(e)}let Ce=t(()=>Ne(m.value,se)),we=Le(),Te=Pe(),Ee=x(null),Oe=x(null),ke=x(null),Ae=x(null),je=x(null),{width:Me,narrow:k}=Be(je),j=x(`chat`),M=x(null),N=x(!1),P=null,Ye=t(()=>!!u.activeFileName&&!N.value);function Xe(e){return Array.from(e.children).find(e=>e.classList?.contains(`acu-input-attachments`))??null}function Ze(){let e=Oe.value?.$el;if(!e)return;let t=e.querySelector(`.agent-context-slot`);if(!Ye.value){if(!t)return;M.value=null,o(()=>t.remove());return}let n=M.value&&e.contains(M.value)?M.value:t;n||(n=document.createElement(`div`),n.className=`agent-context-slot`);let r=Xe(e),i=r??e;n.parentElement!==i&&i.insertBefore(n,r?r.firstChild:e.firstChild),M.value=n}function Qe(e=!0){Ee.value?.scrollToBottom(e)}async function $e(e){let t=N.value?void 0:u.activeFilePath||void 0;await ye(e.text,e.files,{openFilePath:t}),await o(),Qe()}function et(e){he(e),j.value=`chat`}function tt(){ve(),j.value=`chat`}g(()=>_.value.length,()=>{o(()=>Qe(!1))});function nt(){let e=Ae.value;!e||typeof MutationObserver>`u`||(P?.disconnect(),P=new MutationObserver(()=>Ze()),P.observe(e,{childList:!0,subtree:!0}))}return g(()=>u.active,e=>{e&&(j.value=`chat`,me().catch(()=>{}),o(()=>{Ze(),Qe(!1)}))}),g(k,e=>{e||(j.value=`chat`)}),g(()=>u.activeFilePath,()=>{N.value=!1}),g(Ye,e=>{e&&o(Ze)}),oe(()=>{me().catch(()=>{}),o(()=>{Ze(),nt()})}),i(()=>{P?.disconnect(),P=null,M.value=null}),(t,i)=>(p(),n(`div`,{ref_key:`rootRef`,ref:je,class:`editor-agent-panel`},[S(`div`,Ve,[C(k)&&j.value===`list`?(p(),n(w,{key:0},[S(`button`,{class:`agent-panel-icon-btn agent-panel-back-btn`,title:C(E)(`@EDITOR:返回对话`),"aria-label":C(E)(`@EDITOR:返回对话`),onClick:i[0]||=e=>j.value=`chat`},[...i[4]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),S(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,He),S(`span`,Ue,f(C(E)(`@EDITOR:会话列表`)),1)],64)):(p(),n(`span`,We,f(C(E)(`@EDITOR:g ai 对话`)),1)),i[7]||=S(`div`,{class:`agent-panel-spacer`},null,-1),!C(k)||j.value===`chat`?(p(),d(A,{key:2,class:`agent-panel-engine`,engine:Se.value,locked:C(D),onSelect:O},null,8,[`engine`,`locked`])):r(``,!0),C(k)&&j.value===`chat`?(p(),n(`button`,{key:3,class:`agent-panel-icon-btn agent-panel-list-btn`,title:C(E)(`@EDITOR:会话列表`),"aria-label":C(E)(`@EDITOR:会话列表`),onClick:i[1]||=e=>j.value=`list`},[...i[5]||=[e(`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-1b43252d><line x1="8" y1="6" x2="21" y2="6" data-v-1b43252d></line><line x1="8" y1="12" x2="21" y2="12" data-v-1b43252d></line><line x1="8" y1="18" x2="21" y2="18" data-v-1b43252d></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-1b43252d></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-1b43252d></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-1b43252d></line></svg>`,1)]],8,Ge)):r(``,!0),S(`button`,{class:`agent-panel-icon-btn`,title:C(E)(`@EDITOR:关闭对话`),onClick:i[2]||=e=>ee(`close`)},[...i[6]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`},[S(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),S(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,Ke)]),S(`div`,{class:a([`agent-panel-body`,{"is-wide":!C(k)}])},[b(S(`div`,qe,[s(C(fe),{"show-search":!0,items:Ce.value,"active-id":C(h),loading:C(ie),labels:C(we),onSelect:et,onNew:tt,onRename:C(_e),onDelete:C(ge)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[re,!C(k)||j.value===`list`]]),b(S(`div`,{ref_key:`chatHostRef`,ref:ke,class:`agent-panel-chat`},[s(C(de),{ref_key:`chatRef`,ref:Ee,"show-input":!1,messages:C(_),"assistant-name":C(Fe),"assistant-avatar":C(ze),theme:ne.value,question:C(ae),"question-submitting":C(y),"question-labels":C(Te),"plan-config":{labels:{title:C(E)(`@AGENT:计划`),raw:C(E)(`@AGENT:原始参数`)}},onAnswer:C(be)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`onAnswer`])],512),[[re,!C(k)||j.value===`chat`]]),C(Me)>0?(p(),n(`div`,{key:0,ref_key:`composerRef`,ref:Ae,class:`agent-panel-composer acu-root`,"data-theme":ne.value},[s(C(T),{ref_key:`inputRef`,ref:Oe,disabled:C(v),generating:C(v),placeholder:C(v)?C(E)(`@AGENT:正在生成中...`):C(E)(`@AGENT:输入消息,Enter 发送`),"upload-config":{accept:C(Ie)},onSend:$e,onStop:C(xe)},null,8,[`disabled`,`generating`,`placeholder`,`upload-config`,`onStop`]),M.value?(p(),d(le,{key:0,to:M.value},[Ye.value?(p(),n(`div`,{key:0,class:`agent-context-att`,title:c.activeFilePath||``},[i[9]||=S(`svg`,{class:`agent-context-att-icon`,viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.7`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[S(`path`,{d:`M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z`}),S(`polyline`,{points:`14 3 14 8 19 8`})],-1),S(`span`,I,f(c.activeFileName),1),S(`button`,{type:`button`,class:`agent-context-att-remove`,title:C(E)(`@EDITOR:不引用当前文档`),"aria-label":C(E)(`@EDITOR:不引用当前文档`),onClick:i[3]||=e=>N.value=!0},[...i[8]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,"stroke-linecap":`round`,"aria-hidden":`true`},[S(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),S(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,L)],8,F)):r(``,!0)],8,[`to`])):r(``,!0)],8,Je)):r(``,!0)],2)],512))}}),[[`__scopeId`,`data-v-1b43252d`]]);u(),m(),c(),v();var Xe={class:`sidebar-header`},Ze={class:`sidebar-title`},Qe={class:`sidebar-actions`},$e={class:`sidebar-search`},et=[`placeholder`,`title`],tt=[`title`,`aria-label`],nt={key:0,class:`sidebar-tree`},rt={key:1,class:`tree-arrow-spacer`},it={class:`tree-icon mit-icon`,"aria-hidden":`true`},at=[`xlink:href`],ot=[`onClick`,`onContextmenu`],st={key:1,class:`tree-arrow-spacer`},ct={key:2,class:`tree-icon mit-icon`,"aria-hidden":`true`},lt=[`xlink:href`],ut={key:3,class:`tree-icon mit-icon`,"aria-hidden":`true`},dt=[`xlink:href`],ft=[`title`],pt={key:0,class:`tree-name-hit`},mt={key:4,class:`tree-loading`},ht={key:0,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{"flex-shrink":`0`,color:`var(--color-warning-dark)`}},gt={key:1,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{"flex-shrink":`0`,color:`var(--text-meta)`}},_t=[`placeholder`],vt={key:0,class:`tree-node tree-inline-input-row`,style:{paddingLeft:`12px`}},yt={key:0,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{"flex-shrink":`0`,color:`var(--color-warning-dark)`}},bt={key:1,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{"flex-shrink":`0`,color:`var(--text-meta)`}},xt=[`placeholder`],St={key:1,class:`tree-empty`},Ct={key:1,class:`sidebar-loading`},wt={class:`editor-main`},Tt={key:0,class:`editor-tabs`},Et=[`onClick`,`title`],Dt={class:`tab-name`},Ot={key:0,class:`tab-dirty-dot`},kt=[`onClick`],At=[`title`],jt=[`disabled`,`title`],Mt=[`title`],Nt={class:`editor-body`},Pt={key:0,class:`image-tab-placeholder`},Ft={viewBox:`0 0 24 24`,width:`56`,height:`56`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{opacity:`.35`}},It={class:`image-tab-placeholder-title`},Lt={class:`image-tab-placeholder-hint`},Rt={class:`preview-header`},zt={class:`preview-title`},Bt={class:`preview-ext-badge`},Vt=[`title`],Ht={class:`preview-body`},Ut=[`sandbox`,`srcdoc`],Wt=6e4,Gt=3e4,Kt=D(l({__name:`EditorView`,props:{pendingFilePath:{}},setup(c){self.MonacoEnvironment={getWorker(e,t){return t===`json`?new xe:t===`css`||t===`scss`||t===`less`?new ye:t===`html`||t===`handlebars`||t===`razor`?new he:t===`typescript`||t===`javascript`?new _e:new ge}};let l=c,u=me(),m=Ae(),v=x([]),de=x(!1),T=x(``),fe=x(``),D=null;function Se(){T.value=``,fe.value=``,D&&=(clearTimeout(D),null)}g(T,e=>{D&&clearTimeout(D),D=setTimeout(()=>{fe.value=e,D=null},180)}),i(()=>{D&&clearTimeout(D),Pe(),gn()});let O=null;function Ne(){Pe(),u.ui.fileTreeAutoRefresh&&(O=setInterval(()=>{document.hidden||u.currentDirectory&&(T.value.trim()||A())},Wt))}function Pe(){O&&=(clearInterval(O),null)}g(()=>u.currentDirectory,async()=>{if(Zt=!1,Ne(),await Ie(),F.value.some(e=>e.isDirty)){Zt=!0;return}F.value=[],I.value=null,rn(),await en()}),g(()=>u.ui.fileTreeAutoRefresh,()=>{Ne()});async function Fe(e,t=0){let n=await(await fetch(`/api/browse_directory?path=${encodeURIComponent(e)}`)).json();return n.success?n.items.map(e=>({...e,depth:t,expanded:!1,loading:!1,children:(e.type,void 0)})):[]}async function Ie(){let e=u.currentDirectory;if(e){de.value=!0;try{v.value=await Fe(e,0)}finally{de.value=!1}}}function Le(e,t=new Set){for(let n of e)n.type===`directory`&&n.expanded&&(t.add(n.path),n.children&&Le(n.children,t));return t}function Re(e,t=0){return(e||[]).map(e=>{let n={name:e.name,path:e.path,type:e.type,depth:t,expanded:!1,loading:!1};return n.type===`directory`&&Array.isArray(e.children)&&(n.children=Re(e.children,t+1),n.expanded=!0),n})}async function ze(e){let t=u.currentDirectory;if(!t)return null;try{let n=await(await fetch(`/api/browse_directory_tree`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:t,expand:e})})).json().catch(()=>null);return!n?.success||!Array.isArray(n.items)?null:Re(n.items,0)}catch{return null}}function Be(e,t){let n=new Map(e.map(e=>[e.path,e])),r=e.length!==t.length;if(!r){for(let n=0;n<t.length;n++)if(e[n].path!==t[n].path){r=!0;break}}for(let e=0;e<t.length;e++){let i=t[e],a=n.get(i.path);a&&(t[e]=a,a.name!==i.name&&(a.name=i.name,r=!0),a.type===`directory`&&a.expanded&&Array.isArray(i.children)&&(Array.isArray(a.children)?Be(a.children,i.children)&&(a.children=i.children,r=!0):(a.children=i.children,r=!0)))}return r}async function A(e={}){if(!u.currentDirectory)return;let t=await ze([...Le(v.value)]);if(!t){e.notifyOnError&&h.error(E(`@EDITOR:刷新失败`));return}if(v.value.length===0){v.value=t;return}Be(v.value,t)&&(v.value=t)}async function M(e){if(e.type===`directory`){if(e.expanded)e.expanded=!1;else{if(!e.children){e.loading=!0;try{e.children=await Fe(e.path,e.depth+1)}finally{e.loading=!1}}e.expanded=!0}}}function N(e){let t=[];for(let n of e)t.push(n),n.type===`directory`&&n.expanded&&n.children&&t.push(...N(n.children));return t}let Ve=t(()=>fe.value.trim().toLowerCase());function He(e,t){if(!t)return e;let n=[];for(let r of e){let e=r.children?He(r.children,t):[],i=r.name.toLowerCase().includes(t);r.type===`directory`?(i||e.length>0)&&(r.expanded=!0,r.children!==void 0&&(r.children=e),n.push(r)):i&&n.push(r)}return n}let Ue=t(()=>He(v.value,Ve.value)),We=t(()=>Ve.value.length>0&&Ue.value.length===0);function Ge(e){let t=fe.value.trim();if(!t)return[{text:e,hit:!1}];let n=e.toLowerCase(),r=t.toLowerCase(),i=[],a=0,o=n.indexOf(r,a);for(;o!==-1;)o>a&&i.push({text:e.slice(a,o),hit:!1}),i.push({text:e.slice(o,o+r.length),hit:!0}),a=o+r.length,o=n.indexOf(r,a);return a<e.length&&i.push({text:e.slice(a),hit:!1}),i}let Ke=x(null);function qe(){let e=Ke.value;e&&(e.focus(),e.select())}function Je(){T.value?(Se(),Ke.value?.focus()):(Ke.value?.blur(),R.value?.focus())}let F=x([]),I=x(null),L=x(null);async function Kt(e){if(L.value=e,e.type!==`file`){M(e);return}let t=F.value.find(t=>t.path===e.path);if(console.log(`[debug-open-in-editor] EditorView openFile existing tab check:`,{path:e.path,found:!!t,tabsCount:F.value.length}),t){I.value=e.path,o(()=>on());return}let n=e.name.split(`.`).pop()||``;if(q.has(n.toLowerCase())){let t={path:e.path,name:e.name,content:``,originalContent:``,isDirty:!1,language:`plaintext`,diskMtimeMs:null};F.value.push(t),I.value=e.path,J.value=!0;return}if(ke(e.name)){let t={path:e.path,name:e.name,content:``,originalContent:``,isDirty:!1,language:`office`,diskMtimeMs:null};F.value.push(t),I.value=e.path,Y.value=!1,J.value=!0;return}try{let t=await fetch(`/api/editor/file?path=${encodeURIComponent(e.path)}`),r=await t.json();if(console.log(`[debug-open-in-editor] EditorView fetch /api/editor/file response:`,{path:e.path,status:t.status,data:r}),!r.success){h.error(`${E(`@EDITOR:打开文件失败: `)}${r.error}`);return}let i=j(n),a=z.get(e.path);a&&!a.isDisposed()&&a.setValue(r.content);let o={path:e.path,name:e.name,content:r.content,originalContent:r.content,isDirty:!1,language:i,diskMtimeMs:typeof r.mtimeMs==`number`?r.mtimeMs:null};console.log(`[debug-open-in-editor] EditorView pushing tab:`,{path:o.path,name:o.name,contentLen:o.content.length,lang:o.language}),F.value.push(o),I.value=e.path,console.log(`[debug-open-in-editor] EditorView tabs after push:`,F.value.length,`activeTabPath=`,I.value)}catch(e){console.log(`[debug-open-in-editor] EditorView fetch threw:`,e),h.error(`${E(`@EDITOR:打开文件失败: `)}${e.message}`)}}g(()=>l.pendingFilePath,async e=>{if(console.log(`[debug-open-in-editor] EditorView watcher fired, filePath=`,e),!e)return;await o();let t=e.split(/[\\/]/).pop()||e;console.log(`[debug-open-in-editor] EditorView calling openFile, name=`,t,`path=`,e),await Kt({name:t,path:e,type:`file`,depth:0}),console.log(`[debug-open-in-editor] EditorView openFile returned`)},{immediate:!0});function qt(e,t){t.stopPropagation();let n=F.value.findIndex(t=>t.path===e);n!==-1&&(!F.value[n].isDirty||confirm(E(`@EDITOR:文件未保存,确认关闭?`)))&&(F.value.splice(n,1),I.value===e&&(I.value=F.value[Math.min(n,F.value.length-1)]?.path??null))}let Jt=()=>F.value.find(e=>e.path===I.value)??null,Yt=t(()=>({expandedDirs:[...Le(v.value)],tabs:F.value.map(e=>e.path),activeTab:I.value})),Xt=!1,Zt=!1;function Qt(){Zt&&!Xt&&u.isUiLoaded&&u.saveEditorWorkspace(Yt.value)}g(Yt,()=>Qt());async function $t(e){if(F.value.some(t=>t.path===e))return;let t=e.split(/[\\/]/).pop()||e,n=(t.split(`.`).pop()||``).toLowerCase();if(q.has(n)){F.value.push({path:e,name:t,content:``,originalContent:``,isDirty:!1,language:`plaintext`,diskMtimeMs:null});return}if(ke(t)){F.value.push({path:e,name:t,content:``,originalContent:``,isDirty:!1,language:`office`,diskMtimeMs:null});return}try{let r=await(await fetch(`/api/editor/file?path=${encodeURIComponent(e)}`)).json();if(!r.success)return;let i=z.get(e);i&&!i.isDisposed()&&R.value?.getModel()!==i&&(i.dispose(),z.delete(e)),F.value.push({path:e,name:t,content:r.content,originalContent:r.content,isDirty:!1,language:j(n),diskMtimeMs:typeof r.mtimeMs==`number`?r.mtimeMs:null})}catch{}}async function en(){try{for(let e=0;e<100&&!u.isUiLoaded;e++)await new Promise(e=>setTimeout(e,50));if(!u.isUiLoaded)return;V.value=u.ui.editorSidebarWidth;let e=u.getEditorWorkspace();if(!e)return;Xt=!0;try{if(e.expandedDirs.length>0){let t=await ze(e.expandedDirs);t&&(v.value=t)}for(let t of e.tabs)await $t(t);if(!l.pendingFilePath&&e.activeTab&&F.value.some(t=>t.path===e.activeTab)){I.value=e.activeTab;let t=Jt(),n=(t?.name.split(`.`).pop()||``).toLowerCase();t&&(q.has(n)||ke(t.name))&&(J.value=!0)}}finally{Xt=!1}}finally{Zt=!0,Qt()}}let tn=x(null),R=ue(null),z=new Map;function nn(e){let t=z.get(e.path);return(!t||t.isDisposed())&&(t=be.createModel(e.content,e.language,ve.file(e.path)),z.set(e.path,t)),t}function rn(){R.value?.setModel(null);for(let e of z.values())e.isDisposed()||e.dispose();z.clear()}function an(){if(!tn.value)return;let e=document.documentElement.getAttribute(`data-theme`)===`dark`;R.value=be.create(tn.value,{theme:e?`vs-dark`:`vs`,fontSize:13,lineHeight:20,fontFamily:`'JetBrains Mono', 'Fira Code', 'Cascadia Code', Consolas, monospace`,minimap:{enabled:!0},scrollBeyondLastLine:!1,renderWhitespace:`selection`,automaticLayout:!0,tabSize:2,wordWrap:`off`,smoothScrolling:!0,cursorBlinking:`smooth`,padding:{top:8,bottom:8},editContext:!1}),R.value.onDidChangeModelContent(()=>{let e=Jt();if(!e)return;let t=R.value.getValue();e.content=t,e.isDirty=t!==e.originalContent}),R.value.onDidBlurEditorText(()=>{u.ui.editorAutoSave&&Jt()?.isDirty&&yn(!1),requestAnimationFrame(()=>{if(!B.value||B.value.offsetParent===null)return;let e=document.activeElement;e&&(e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable||e.classList?.contains(`native-edit-context`)||e.classList?.contains(`monaco-editor`))||on()})})}g(I,e=>{if(!R.value||!e)return;let t=F.value.find(t=>t.path===e);if(!t)return;let n=nn(t);R.value.setModel(n),o(()=>on()),fn(e)});function on(){if(!R.value)return;R.value.focus();let e=document.querySelector(`.monaco-editor .native-edit-context`);e&&document.activeElement!==e&&requestAnimationFrame(()=>e.focus?.())}let sn=0,cn=new Map;async function ln(e){try{let t=await(await fetch(`/api/editor/file?path=${encodeURIComponent(e)}&meta=1`)).json();return!t?.success||typeof t.mtimeMs!=`number`?null:{mtimeMs:t.mtimeMs}}catch{return null}}async function un(e){try{let t=await(await fetch(`/api/editor/file?path=${encodeURIComponent(e)}`)).json();return t?.success?{content:t.content,mtimeMs:typeof t.mtimeMs==`number`?t.mtimeMs:null}:null}catch{return null}}function dn(e,t,n){e.content=t,e.originalContent=t,e.isDirty=!1,e.diskMtimeMs=n;let r=z.get(e.path);if(!r||r.isDisposed())return;let i=R.value;if(!i||i.getModel()!==r){r.setValue(t);return}let a=i.saveViewState();r.pushEditOperations([],[{range:r.getFullModelRange(),text:t}],()=>null),i.restoreViewState(a)}async function fn(e){if(!e)return;let t=F.value.find(t=>t.path===e);if(!t||t.diskMtimeMs===null)return;let n=++sn,r=await ln(e);if(n!==sn||F.value.find(t=>t.path===e)!==t||!r||r.mtimeMs===t.diskMtimeMs)return;if(t.isDirty){if(cn.get(e)===r.mtimeMs)return;cn.set(e,r.mtimeMs);try{await se.confirm(E(`@EDITOR:这个文件在磁盘上已被改动,你这边也有未保存的编辑。重新加载会丢弃你的改动。`),E(`@EDITOR:文件已被外部改动`),{confirmButtonText:E(`@EDITOR:重新加载`),cancelButtonText:E(`@EDITOR:保留我的`),type:`warning`})}catch{return}if(t.isDirty)return}let i=await un(e);i&&F.value.find(t=>t.path===e)===t&&dn(t,i.content,i.mtimeMs)}function pn(){document.hidden||fn(I.value)}let mn=null;function hn(){gn(),mn=setInterval(()=>{document.hidden||fn(I.value)},Gt)}function gn(){mn&&=(clearInterval(mn),null)}g(()=>F.value.filter(e=>e.isDirty).length,e=>{m.setDirtyCount(e)},{immediate:!0}),i(()=>m.setDirtyCount(0)),De(()=>{let e=document.documentElement.getAttribute(`data-theme`)===`dark`;be.setTheme(e?`vs-dark`:`vs`)});let _n=null;function vn(){if(_n||!B.value)return;let e=[B.value],t=B.value.parentElement;for(;t;){if(t.classList.contains(`view-pane`)||t.classList.contains(`editor-pane`)){e.push(t);break}t=t.parentElement}_n=new MutationObserver(()=>{B.value&&B.value.offsetParent!==null&&I.value&&R.value&&(fn(I.value),requestAnimationFrame(()=>{let e=document.activeElement;e&&(e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable||e.classList?.contains(`native-edit-context`)||e.classList?.contains(`monaco-editor`))||on()}))});let n=_n;e.forEach(e=>n.observe(e,{attributes:!0,attributeFilter:[`style`,`class`,`hidden`]}))}oe(async()=>{an(),await Ie(),await en(),vn(),Ne(),window.addEventListener(`focus`,pn),document.addEventListener(`visibilitychange`,pn),hn(),I.value&&o(()=>on())}),i(()=>{_n?.disconnect(),_n=null,window.removeEventListener(`focus`,pn),document.removeEventListener(`visibilitychange`,pn),R.value?.dispose(),z.forEach(e=>e.dispose()),z.clear()});async function yn(e=!1){let t=Jt();if(t)try{let n=await(await fetch(`/api/editor/file`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:t.path,content:t.content})})).json();if(!n.success){h.error(`${E(`@EDITOR:保存失败: `)}${n.error}`);return}t.originalContent=t.content,t.isDirty=!1,typeof n.mtimeMs==`number`&&(t.diskMtimeMs=n.mtimeMs),e||h.success(E(`@EDITOR:已保存`))}catch(e){h.error(`${E(`@EDITOR:保存失败: `)}${e.message}`)}}function bn(e){let t=e.ctrlKey||e.metaKey;if(t&&e.key.toLowerCase()===`f`){e.preventDefault(),qe();return}t&&e.key===`s`&&(e.preventDefault(),yn())}oe(()=>window.addEventListener(`keydown`,bn)),i(()=>window.removeEventListener(`keydown`,bn));let B=x(null),V=x(u.ui.editorSidebarWidth),xn=!1,Sn=0,Cn=0;function wn(e){xn=!0,Sn=e.clientX,Cn=V.value,document.addEventListener(`mousemove`,Tn),document.addEventListener(`mouseup`,En),e.preventDefault()}function Tn(e){if(!xn)return;let t=e.clientX-Sn;V.value=Math.max(140,Math.min(400,Cn+t))}function En(){xn=!1,document.removeEventListener(`mousemove`,Tn),document.removeEventListener(`mouseup`,En),V.value!==u.ui.editorSidebarWidth&&u.setEditorSidebarWidth(V.value)}function Dn(e){return e.type===`directory`?Te(e.name):we(e.name)}let H=x(null),U=x(null),W=x(null),On=x(null);function kn(){let e=L.value;return e?e.type===`directory`?{parentPath:e.path,afterNode:e,depth:e.depth+1}:{parentPath:e.path.includes(`/`)||e.path.includes(`\\`)?e.path.replace(/[\\/][^\\/]+$/,``):u.currentDirectory??``,afterNode:e,depth:e.depth}:{parentPath:u.currentDirectory??``,afterNode:null,depth:0}}async function An(){let e=kn();L.value?.type===`directory`&&!L.value.expanded&&await M(L.value),H.value={...e,kind:`file`,value:``},await o(),W.value?.focus()}async function jn(){let e=kn();L.value?.type===`directory`&&!L.value.expanded&&await M(L.value),H.value={...e,kind:`directory`,value:``},await o(),W.value?.focus()}function Mn(){H.value=null}async function Nn(){let e=H.value;if(!e||!e.value.trim()){H.value=null;return}let t=e.value.trim(),n=e.parentPath.replace(/[/\\]$/,``)+`/`+t;if(e.kind===`file`){let e=await(await fetch(`/api/editor/file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:n})})).json();if(!e.success){h.error(e.error);return}h.success(E(`@EDITOR:创建成功`))}else{let e=await(await fetch(`/api/editor/directory`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:n})})).json();if(!e.success){h.error(e.error);return}h.success(E(`@EDITOR:创建成功`))}H.value=null,await A()}function Pn(e){e.key===`Enter`&&(e.preventDefault(),Nn()),e.key===`Escape`&&(e.preventDefault(),Mn())}let G=x(null),Fn=x(null);function In(e,t){e.preventDefault(),G.value={x:e.clientX,y:e.clientY,node:t}}function K(){G.value=null}async function Ln(){let e=G.value?.node;K(),e&&(L.value=e),e?.type===`directory`&&!e.expanded&&await M(e);let t=kn();H.value={...t,kind:`file`,value:``},await o(),W.value?.focus()}async function Rn(){let e=G.value?.node;K(),e&&(L.value=e),e?.type===`directory`&&!e.expanded&&await M(e);let t=kn();H.value={...t,kind:`directory`,value:``},await o(),W.value?.focus()}async function zn(){let e=G.value?.node;K(),e&&(U.value={node:e,value:e.name},await o(),On.value?.focus(),On.value?.select())}async function Bn(){let e=U.value;if(!e||!e.value.trim()||e.value.trim()===e.node.name){U.value=null;return}let t=e.value.trim(),n=e.node.path.replace(/[\\/][^\\/]+$/,``).replace(/[/\\]$/,``)+`/`+t,r=await(await fetch(`/api/editor/rename`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldPath:e.node.path,newPath:n})})).json();if(!r.success){h.error(r.error);return}let i=F.value.find(t=>t.path===e.node.path);i&&(i.path=n,i.name=t,I.value===e.node.path&&(I.value=n)),U.value=null,await A()}function Vn(e){e.key===`Enter`&&(e.preventDefault(),Bn()),e.key===`Escape`&&(e.preventDefault(),U.value=null)}async function Hn(){let e=G.value?.node;if(K(),!e)return;let t=e.type===`directory`?E(`@EDITOR:文件夹`):E(`@EDITOR:文件`);if(!confirm(`${E(`@EDITOR:确认删除`)} ${t} "${e.name}"?`))return;let n=await(await fetch(`/api/editor/entry?path=${encodeURIComponent(e.path)}`,{method:`DELETE`})).json();if(!n.success){h.error(n.error);return}let r=F.value.findIndex(t=>t.path===e.path);r!==-1&&(F.value.splice(r,1),I.value===e.path&&(I.value=F.value[Math.max(0,r-1)]?.path??null)),h.success(E(`@EDITOR:已删除`)),await A()}async function Un(){let e=G.value?.node;if(K(),e)try{let t=await(await fetch(`/api/editor/reveal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e.path})})).json();t.success||h.error(t.error)}catch(e){h.error(e?.message||String(e))}}function Wn(e){let t=u.currentDirectory;if(!t)return e;let n=e=>e.replace(/\\/g,`/`).replace(/\/+$/,``),r=n(t),i=n(e);return i===r?`.`:i.startsWith(r+`/`)?i.slice(r.length+1):i}async function Gn(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}}async function Kn(){let e=G.value?.node;K(),e&&(await Gn(e.path)?h.success(E(`@EDITOR:已复制到剪贴板`)):h.error(E(`@EDITOR:复制失败`)))}async function qn(){let e=G.value?.node;K(),e&&(await Gn(Wn(e.path))?h.success(E(`@EDITOR:已复制到剪贴板`)):h.error(E(`@EDITOR:复制失败`)))}async function Jn(){let e=G.value?.node;if(K(),e)try{let t=await(await fetch(`/api/editor/open-in-vscode`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e.path})})).json();t.success||h.error(t.error||E(`@EDITOR:VSCode 未安装`))}catch(e){h.error(e?.message||String(e))}}let Yn=new Set([`html`,`htm`]),Xn=t(()=>{let e=G.value?.node;if(!e||e.type!==`file`)return!1;let t=e.name.slice(e.name.lastIndexOf(`.`)+1).toLowerCase();return Yn.has(t)});async function Zn(){let e=G.value?.node;if(K(),e)try{let t=await(await fetch(`/api/editor/open-in-browser`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e.path})})).json();t.success||h.error(t.error||E(`@EDITOR:浏览器打开失败`))}catch(e){h.error(e?.message||String(e))}}oe(()=>document.addEventListener(`click`,K)),i(()=>document.removeEventListener(`click`,K));let Qn=new Set([`md`,`html`,`htm`,`svg`]),q=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`ico`,`bmp`]),J=x(!1),Y=x(!1),X=x(!1),$n=x(!1),er=x(0),Z=t(()=>F.value.find(e=>e.path===I.value)??null),tr=t(()=>Z.value?.language===`plaintext`&&Z.value?.content===``),nr=t(()=>Z.value?.language===`office`),Q=t(()=>(Z.value?.name??``).split(`.`).pop()?.toLowerCase()??``),rr=t(()=>Qn.has(Q.value)||q.has(Q.value)||ke(Q.value)),ir=t(()=>((Z.value?.content??``).match(/^#{1,6}\s+/gm)||[]).length),$=t(()=>Q.value===`md`&&ir.value>0);g(I,()=>{J.value&&!rr.value&&(J.value=!1),Y.value&&!$.value&&(Y.value=!1)});function ar(){rr.value&&(J.value||(Y.value=!1,X.value=!1),J.value=!J.value)}function or(){$.value&&(Y.value||(J.value=!1,X.value=!1),Y.value=!Y.value)}function sr(){X.value||(J.value=!1,Y.value=!1),X.value=!X.value,$n.value=!0}let cr=t(()=>{let e=Z.value;if(!e)return``;let t=Q.value,n=document.documentElement.getAttribute(`data-theme`)===`light`?`#ffffff`:`#0d1117`;return t===`html`||t===`htm`?k(e.content):t===`svg`?`<!DOCTYPE html><html><head><meta charset="utf-8"><style>html,body{margin:0;padding:0;background:${n};display:flex;align-items:center;justify-content:center;min-height:100vh;}svg{max-width:100%;max-height:90vh;}</style></head><body>${e.content}</body></html>`:``}),lr=!1,ur=0,dr=0;function fr(e){lr=!0,ur=e.clientX,dr=er.value,document.addEventListener(`mousemove`,pr),document.addEventListener(`mouseup`,mr),e.preventDefault()}function pr(e){if(!lr)return;let t=e.clientX-ur;er.value=Math.max(200,Math.min(900,dr+t))}function mr(){lr=!1,document.removeEventListener(`mousemove`,pr),document.removeEventListener(`mouseup`,mr)}return(t,i)=>(p(),n(w,null,[S(`div`,{class:`editor-view`,ref_key:`containerRef`,ref:B},[S(`div`,{class:`editor-sidebar`,style:y({width:V.value+`px`})},[S(`div`,Xe,[S(`span`,Ze,f(C(E)(`@EDITOR:资源管理器`)),1),S(`div`,Qe,[s(C(ee),{content:C(E)(`@EDITOR:新建文件`),placement:`bottom`,"show-after":300},{default:ae(()=>[S(`button`,{class:`sidebar-action-btn`,onClick:An},[...i[11]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z`}),S(`polyline`,{points:`14 2 14 8 20 8`}),S(`line`,{x1:`12`,y1:`13`,x2:`12`,y2:`19`}),S(`line`,{x1:`9`,y1:`16`,x2:`15`,y2:`16`})],-1)]])]),_:1},8,[`content`]),s(C(ee),{content:C(E)(`@EDITOR:新建文件夹`),placement:`bottom`,"show-after":300},{default:ae(()=>[S(`button`,{class:`sidebar-action-btn`,onClick:jn},[...i[12]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`}),S(`line`,{x1:`12`,y1:`11`,x2:`12`,y2:`17`}),S(`line`,{x1:`9`,y1:`14`,x2:`15`,y2:`14`})],-1)]])]),_:1},8,[`content`]),s(C(ee),{content:C(E)(`@EDITOR:刷新`),placement:`bottom`,"show-after":300},{default:ae(()=>[S(`button`,{class:`sidebar-action-btn`,onClick:i[0]||=e=>A({notifyOnError:!0})},[...i[13]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`polyline`,{points:`1 4 1 10 7 10`}),S(`polyline`,{points:`23 20 23 14 17 14`}),S(`path`,{d:`M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15`})],-1)]])]),_:1},8,[`content`])])]),S(`div`,$e,[i[15]||=S(`svg`,{class:`sidebar-search-icon`,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[S(`circle`,{cx:`11`,cy:`11`,r:`7`}),S(`line`,{x1:`21`,y1:`21`,x2:`16.65`,y2:`16.65`})],-1),b(S(`input`,{ref_key:`searchInputRef`,ref:Ke,"onUpdate:modelValue":i[1]||=e=>T.value=e,type:`text`,class:`sidebar-search-input`,placeholder:C(E)(`@EDITOR:搜索文件...`),title:C(E)(`@EDITOR:搜索文件...`),spellcheck:`false`,autocomplete:`off`,onKeydown:ne(Je,[`escape`])},null,40,et),[[ie,T.value]]),T.value?(p(),n(`button`,{key:0,class:`sidebar-search-clear`,title:C(E)(`@EDITOR:清除搜索`),"aria-label":C(E)(`@EDITOR:清除搜索`),onClick:Se},[...i[14]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[S(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),S(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,tt)):r(``,!0)]),de.value?(p(),n(`div`,Ct,[...i[24]||=[S(`span`,{class:`spin-icon`},null,-1)]])):(p(),n(`div`,nt,[(p(!0),n(w,null,te(N(Ue.value),e=>(p(),n(w,{key:e.path},[U.value&&U.value.node.path===e.path?(p(),n(`div`,{key:0,class:`tree-node tree-inline-input-row`,style:y({paddingLeft:12+e.depth*14+`px`})},[e.type===`directory`?(p(),n(`span`,{key:0,class:a([`tree-arrow`,{expanded:e.expanded}])},[...i[16]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(p(),n(`span`,rt)),(p(),n(`svg`,it,[S(`use`,{"xlink:href":`#${Dn(e)}`},null,8,at)])),b(S(`input`,{ref_for:!0,ref_key:`renameInputRef`,ref:On,"onUpdate:modelValue":i[2]||=e=>U.value.value=e,onKeydown:Vn,onBlur:Bn,onClick:i[3]||=ce(()=>{},[`stop`])},null,544),[[ie,U.value.value]])],4)):(p(),n(`div`,{key:1,class:a([`tree-node`,{"tree-node--dir":e.type===`directory`,"tree-node--file":e.type===`file`,"tree-node--active":I.value===e.path,"tree-node--selected":L.value?.path===e.path&&I.value!==e.path}]),style:y({paddingLeft:12+e.depth*14+`px`}),onClick:t=>Kt(e),onContextmenu:t=>In(t,e)},[e.type===`directory`?(p(),n(`span`,{key:0,class:a([`tree-arrow`,{expanded:e.expanded}])},[...i[17]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(p(),n(`span`,st)),e.type===`directory`?(p(),n(`svg`,ct,[S(`use`,{"xlink:href":`#${Dn(e)}`},null,8,lt)])):(p(),n(`svg`,ut,[S(`use`,{"xlink:href":`#${Dn(e)}`},null,8,dt)])),S(`span`,{class:`tree-name`,title:e.path},[(p(!0),n(w,null,te(Ge(e.name),(e,t)=>(p(),n(w,{key:t},[e.hit?(p(),n(`span`,pt,f(e.text),1)):(p(),n(w,{key:1},[_(f(e.text),1)],64))],64))),128))],8,ft),e.loading?(p(),n(`span`,mt)):r(``,!0)],46,ot)),H.value&&H.value.afterNode?.path===e.path?(p(),n(`div`,{key:2,class:`tree-node tree-inline-input-row`,style:y({paddingLeft:12+H.value.depth*14+`px`})},[i[20]||=S(`span`,{class:`tree-arrow-spacer`},null,-1),H.value.kind===`directory`?(p(),n(`svg`,ht,[...i[18]||=[S(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`},null,-1)]])):(p(),n(`svg`,gt,[...i[19]||=[S(`path`,{d:`M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z`},null,-1),S(`polyline`,{points:`14 2 14 8 20 8`},null,-1)]])),b(S(`input`,{ref_for:!0,ref_key:`inlineInputRef`,ref:W,class:`tree-inline-input`,"onUpdate:modelValue":i[4]||=e=>H.value.value=e,placeholder:H.value.kind===`file`?C(E)(`@EDITOR:输入文件名`):C(E)(`@EDITOR:输入文件夹名`),onKeydown:Pn,onBlur:Mn,onClick:i[5]||=ce(()=>{},[`stop`])},null,40,_t),[[ie,H.value.value]])],4)):r(``,!0)],64))),128)),H.value&&H.value.afterNode===null?(p(),n(`div`,vt,[i[23]||=S(`span`,{class:`tree-arrow-spacer`},null,-1),H.value.kind===`directory`?(p(),n(`svg`,yt,[...i[21]||=[S(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`},null,-1)]])):(p(),n(`svg`,bt,[...i[22]||=[S(`path`,{d:`M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z`},null,-1),S(`polyline`,{points:`14 2 14 8 20 8`},null,-1)]])),b(S(`input`,{ref_key:`inlineInputRef`,ref:W,class:`tree-inline-input`,"onUpdate:modelValue":i[6]||=e=>H.value.value=e,placeholder:H.value.kind===`file`?C(E)(`@EDITOR:输入文件名`):C(E)(`@EDITOR:输入文件夹名`),onKeydown:Pn,onBlur:Mn,onClick:i[7]||=ce(()=>{},[`stop`])},null,40,xt),[[ie,H.value.value]])])):r(``,!0),!H.value&&(We.value||v.value.length===0)?(p(),n(`div`,St,f(We.value?C(E)(`@EDITOR:未找到匹配文件`):C(E)(`@EDITOR:暂无文件`)),1)):r(``,!0)]))],4),S(`div`,{class:`editor-resizer`,onMousedown:wn},null,32),S(`div`,wt,[F.value.length>0?(p(),n(`div`,Tt,[(p(!0),n(w,null,te(F.value,e=>(p(),n(`div`,{key:e.path,class:a([`editor-tab`,{active:I.value===e.path,dirty:e.isDirty}]),onClick:t=>I.value=e.path,title:e.path},[S(`span`,Dt,f(e.name),1),e.isDirty?(p(),n(`span`,Ot)):r(``,!0),S(`button`,{class:`tab-close`,onClick:t=>qt(e.path,t)},[...i[25]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`},[S(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),S(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,kt)],10,Et))),128)),i[29]||=S(`div`,{class:`editor-tabs-spacer`},null,-1),rr.value?(p(),n(`button`,{key:0,class:a([`preview-toggle-btn`,{active:J.value}]),title:J.value?C(E)(`@EDITOR:关闭预览`):C(E)(`@EDITOR:打开预览`),onClick:ar},[i[26]||=S(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z`}),S(`circle`,{cx:`12`,cy:`12`,r:`3`})],-1),S(`span`,null,f(C(E)(`@EDITOR:预览`)),1)],10,At)):r(``,!0),$.value?(p(),n(`button`,{key:1,class:a([`preview-toggle-btn mindmap-toggle-btn`,{active:Y.value,disabled:!$.value}]),disabled:!$.value,title:$.value?Y.value?C(E)(`@EDITOR:关闭思维导图`):C(E)(`@EDITOR:打开思维导图`):C(E)(`@EDITOR:需要至少一个 # 标题`),onClick:or},[i[27]||=e(`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-c65c2d3f><circle cx="12" cy="12" r="2" data-v-c65c2d3f></circle><circle cx="5" cy="6" r="1.6" data-v-c65c2d3f></circle><circle cx="19" cy="6" r="1.6" data-v-c65c2d3f></circle><circle cx="5" cy="18" r="1.6" data-v-c65c2d3f></circle><circle cx="19" cy="18" r="1.6" data-v-c65c2d3f></circle><line x1="11" y1="11" x2="6.4" y2="7" data-v-c65c2d3f></line><line x1="13" y1="11" x2="17.6" y2="7" data-v-c65c2d3f></line><line x1="11" y1="13" x2="6.4" y2="17" data-v-c65c2d3f></line><line x1="13" y1="13" x2="17.6" y2="17" data-v-c65c2d3f></line></svg>`,1),S(`span`,null,f(C(E)(`@EDITOR:思维导图`)),1)],10,jt)):r(``,!0),S(`button`,{class:a([`preview-toggle-btn agent-toggle-btn`,{active:X.value}]),title:X.value?C(E)(`@EDITOR:关闭 g ai 对话`):C(E)(`@EDITOR:打开 g ai 对话`),onClick:sr},[i[28]||=S(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M12 3l1.9 4.6L18.5 9.5l-4.6 1.9L12 16l-1.9-4.6L5.5 9.5l4.6-1.9z`}),S(`path`,{d:`M18 16.5l.9 2.1 2.1.9-2.1.9-.9 2.1-.9-2.1-2.1-.9 2.1-.9z`})],-1),S(`span`,null,f(C(E)(`@EDITOR:g ai 对话`)),1)],10,Mt)])):r(``,!0),F.value.length===0?(p(),d(je,{key:1,class:`editor-empty`,title:C(E)(`@EDITOR:从左侧选择文件打开`),hint:C(E)(`@EDITOR:Ctrl+S 保存`)},{icon:ae(()=>[...i[30]||=[S(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z`}),S(`polyline`,{points:`14 2 14 8 20 8`})],-1)]]),_:1},8,[`title`,`hint`])):r(``,!0),S(`div`,Nt,[S(`div`,{class:a([`monaco-container`,{hidden:F.value.length===0||tr.value||nr.value}]),ref_key:`editorContainerRef`,ref:tn},null,2),tr.value&&F.value.length>0&&!J.value&&!Y.value?(p(),n(`div`,Pt,[(p(),n(`svg`,Ft,[...i[31]||=[S(`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`},null,-1),S(`circle`,{cx:`9`,cy:`9`,r:`2`},null,-1),S(`path`,{d:`m21 15-5-5L5 21`},null,-1)]])),S(`p`,It,f(Z.value?.name),1),S(`p`,Lt,f(C(E)(`@EDITOR:这是图片文件,已在右侧预览面板中打开`)),1)])):r(``,!0),(J.value||Y.value||X.value)&&F.value.length>0?(p(),n(`div`,{key:1,class:`preview-resizer`,onMousedown:fr},null,32)):r(``,!0),$n.value?b((p(),d(Ye,{key:2,active:X.value&&F.value.length>0,"active-file-path":I.value,"active-file-name":Z.value?.name??``,style:y({flexBasis:er.value+`px`}),onClose:i[8]||=e=>X.value=!1},null,8,[`active`,`active-file-path`,`active-file-name`,`style`])),[[re,X.value&&F.value.length>0]]):r(``,!0),(J.value||Y.value)&&F.value.length>0?(p(),n(`div`,{key:3,class:`preview-panel`,style:y({flexBasis:er.value+`px`})},[S(`div`,Rt,[S(`span`,zt,f(Y.value?C(E)(`@EDITOR:思维导图`):C(E)(`@EDITOR:预览`)),1),S(`span`,Bt,f(Q.value.toUpperCase()),1),i[33]||=S(`div`,{class:`preview-header-spacer`},null,-1),S(`button`,{class:`preview-close-btn`,title:Y.value?C(E)(`@EDITOR:关闭思维导图`):C(E)(`@EDITOR:关闭预览`),onClick:i[9]||=e=>Y.value?Y.value=!1:J.value=!1},[...i[32]||=[S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`},[S(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),S(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,Vt)]),S(`div`,Ht,[Y.value&&Q.value===`md`&&Z.value?(p(),d(P,{key:0,content:Z.value.content,class:`preview-mindmap`},null,8,[`content`])):J.value&&Q.value===`md`&&Z.value?(p(),d(Me,{key:Z.value.path,content:Z.value.content,class:`preview-markdown`},null,8,[`content`])):J.value&&[`html`,`htm`,`svg`].includes(Q.value)?(p(),n(`iframe`,{key:2,class:`preview-iframe`,sandbox:C(Oe),srcdoc:cr.value},null,8,Ut)):J.value&&C(q).has(Q.value)&&Z.value?(p(),d(Ee,{key:3,"file-path":Z.value.path,"file-name":Z.value.name},null,8,[`file-path`,`file-name`])):J.value&&nr.value&&Z.value?(p(),d(Ce,{key:4,"file-path":Z.value.path},null,8,[`file-path`])):r(``,!0)])],4)):r(``,!0)])])],512),(p(),d(le,{to:`body`},[G.value?(p(),n(`div`,{key:0,ref_key:`ctxMenuRef`,ref:Fn,class:`ctx-menu`,style:y({left:G.value.x+`px`,top:G.value.y+`px`}),onClick:i[10]||=ce(()=>{},[`stop`])},[S(`button`,{class:`ctx-menu-item`,onClick:Ln},[i[34]||=S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z`}),S(`polyline`,{points:`14 2 14 8 20 8`}),S(`line`,{x1:`12`,y1:`13`,x2:`12`,y2:`19`}),S(`line`,{x1:`9`,y1:`16`,x2:`15`,y2:`16`})],-1),_(` `+f(C(E)(`@EDITOR:新建文件`)),1)]),S(`button`,{class:`ctx-menu-item`,onClick:Rn},[i[35]||=S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`}),S(`line`,{x1:`12`,y1:`11`,x2:`12`,y2:`17`}),S(`line`,{x1:`9`,y1:`14`,x2:`15`,y2:`14`})],-1),_(` `+f(C(E)(`@EDITOR:新建文件夹`)),1)]),i[42]||=S(`div`,{class:`ctx-menu-sep`},null,-1),S(`button`,{class:`ctx-menu-item`,onClick:Kn},[i[36]||=S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`rect`,{x:`9`,y:`9`,width:`13`,height:`13`,rx:`2`,ry:`2`}),S(`path`,{d:`M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1`})],-1),_(` `+f(C(E)(`@EDITOR:复制绝对路径`)),1)]),S(`button`,{class:`ctx-menu-item`,onClick:qn},[i[37]||=S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71`}),S(`path`,{d:`M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71`})],-1),_(` `+f(C(E)(`@EDITOR:复制相对路径`)),1)]),i[43]||=S(`div`,{class:`ctx-menu-sep`},null,-1),Xn.value?(p(),n(`button`,{key:0,class:`ctx-menu-item`,onClick:Zn},[i[38]||=S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`circle`,{cx:`12`,cy:`12`,r:`9`}),S(`line`,{x1:`3`,y1:`12`,x2:`21`,y2:`12`}),S(`path`,{d:`M12 3a13 13 0 0 1 3.5 9 13 13 0 0 1-3.5 9 13 13 0 0 1-3.5-9A13 13 0 0 1 12 3z`})],-1),_(` `+f(C(E)(`@EDITOR:在浏览器中打开`)),1)])):r(``,!0),S(`button`,{class:`ctx-menu-item`,onClick:Un},[i[39]||=S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`}),S(`path`,{d:`M3 7v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2`})],-1),_(` `+f(C(E)(`@EDITOR:在资源管理器中打开`)),1)]),S(`button`,{class:`ctx-menu-item`,onClick:Jn},[s(pe,{"icon-class":`vscode`,"class-name":`ctx-menu-icon`}),_(` `+f(C(E)(`@EDITOR:在 VSCode 中打开`)),1)]),S(`button`,{class:`ctx-menu-item`,onClick:zn},[i[40]||=S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`path`,{d:`M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`}),S(`path`,{d:`M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z`})],-1),_(` `+f(C(E)(`@EDITOR:重命名`)),1)]),S(`button`,{class:`ctx-menu-item ctx-menu-item--danger`,onClick:Hn},[i[41]||=S(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[S(`polyline`,{points:`3 6 5 6 21 6`}),S(`path`,{d:`M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6`}),S(`path`,{d:`M10 11v6`}),S(`path`,{d:`M14 11v6`}),S(`path`,{d:`M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2`})],-1),_(` `+f(C(E)(`@EDITOR:删除`)),1)])],4)):r(``,!0)]))],64))}}),[[`__scopeId`,`data-v-c65c2d3f`]]);export{Kt as default};
@@ -1,20 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Bt as t,C as n,Cn as r,Ct as i,Dn as a,En as o,Et as s,F as c,Ft as l,Gn as u,Gr as d,Hn as f,I as p,It as m,J as h,Lt as g,Mn as _,Mr as v,N as y,Pn as b,Rn as x,Rt as S,S as C,St as ee,Tn as w,U as T,Vt as te,Wt as ne,X as re,Xr as E,Y as D,Yn as O,Z as ie,Zn as k,_ as ae,_n as A,_t as oe,a as se,b as ce,ct as j,dr as M,dt as le,er as N,fn as P,gn as F,gr as I,hn as ue,i as L,ir as R,jn as z,ln as B,lt as de,mn as fe,or as V,ot as H,pt as pe,qn as me,qr as he,qt as ge,r as _e,rn as ve,sr as U,tt as W,v as ye,vn as G,vr as K,w as be,wn as q,wr as J,xn as xe,y as Se,yn as Y,yt as Ce,z as we}from"./element-plus-DrCk0pcV.js";import{a as Te,i as X,n as Ee,r as De,t as Oe}from"./vendor-yntih_em.js";import{n as Z,t as Q}from"./_plugin-vue_export-helper-DO_hkLgw.js";import{t as ke}from"./SvgIcon-CRCQbZ1H.js";import{a as Ae,i as je,o as Me,t as Ne}from"./configStore-7LTPR6P8.js";import{t as Pe}from"./CommonDialog-DiiVswHL.js";import{C as Fe,H as $,N as Ie,S as Le,T as Re,_ as ze,b as Be,m as Ve,p as He,v as Ue,w as We,x as Ge,y as Ke,z as qe}from"./index-Czdu1C9o.js";import{a as Je,i as Ye,n as Xe,o as Ze,r as Qe,s as $e,t as et,u as tt}from"./agentConversations-gSbkMpVI.js";import{n as nt,t as rt}from"./AgentEngineSelector-DklehAya.js";x(),M(),v(),B();var it={class:`wb-attachments__head`},at={class:`wb-attachments__label`},ot={class:`wb-attachments__count`},st=[`disabled`],ct={key:0,class:`wb-attachments__paste-hint`},lt={key:1,class:`wb-attachments__list`},ut=[`title`,`onClick`,`onContextmenu`],dt=[`src`,`alt`],ft={key:1},pt={class:`wb-attachment__meta`},mt=[`title`],ht=[`onClick`,`title`],gt=Q(b({__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 i(e){return`${n.rawBase||`/api/workbench/attachments`}/${e.id}/raw`}let s=t,c=r(()=>n.attachments.filter(e=>n.isImage(e))),l=r(()=>c.value.map(e=>i(e))),f=K(0),p=K(!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(i(e),`_blank`,`noopener`)}function h(){p.value=!1}let g=K({visible:!1,x:0,y:0,att:null}),_=K(!1);function v(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 y(){g.value.visible&&(g.value.visible=!1)}async function b(){let e=g.value.att;if(e&&!_.value){if(y(),!navigator.clipboard||typeof ClipboardItem>`u`){L({type:`warning`,message:Z(`@WORKBENCH:当前浏览器不支持复制图片`)});return}_.value=!0;try{let t=await fetch(i(e),{credentials:`same-origin`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.blob(),r=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`].includes(n.type)?n.type:`image/png`,a=new ClipboardItem({[r]:n});await navigator.clipboard.write([a]),L({type:`success`,message:Z(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){L({type:`error`,message:Z(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{_.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,y),window.addEventListener(`scroll`,y,!0),window.addEventListener(`blur`,y)),u(()=>{typeof window>`u`||(window.removeEventListener(`click`,y),window.removeEventListener(`scroll`,y,!0),window.removeEventListener(`blur`,y))}),(t,n)=>(O(),a(Y,null,[q(`div`,{class:d([`wb-attachments`,{"is-paste-hover":e.isPasteHover}]),onPaste:n[1]||=e=>s(`paste`,e),onDrop:n[2]||=G(e=>s(`drop`,e),[`prevent`]),onDragover:n[3]||=G(e=>s(`dragover`,e),[`prevent`]),onDragenter:n[4]||=G(e=>s(`dragenter`,e),[`prevent`]),onDragleave:n[5]||=e=>s(`dragleave`,e)},[q(`div`,it,[q(`span`,at,[z(E(J(Z)(`@WORKBENCH:附件`))+` `,1),q(`span`,ot,E(e.attachments.length),1)]),q(`button`,{class:`wb-attachments__add`,disabled:e.isUploading,onClick:n[0]||=(...t)=>e.onPick&&e.onPick(...t)},E(e.isUploading?J(Z)(`@WORKBENCH:上传中…`):J(Z)(`@WORKBENCH:添加附件`)),9,st)]),e.isPasteHover?(O(),a(`div`,ct,E(J(Z)(`@WORKBENCH:粘贴图片以快速添加`)),1)):o(``,!0),e.attachments.length>0?(O(),a(`ul`,lt,[(O(!0),a(Y,null,k(e.attachments,t=>(O(),a(`li`,{key:t.id,class:`wb-attachment`},[q(`button`,{type:`button`,class:`wb-attachment__preview`,title:J(Z)(`@WORKBENCH:点击预览`),onClick:e=>m(t),onContextmenu:e=>v(t,e)},[q(`div`,{class:d([`wb-attachment__icon`,{"wb-attachment__icon--img":e.isImage(t)}])},[e.isImage(t)?(O(),a(`img`,{key:0,src:i(t),alt:t.originalName,loading:`lazy`},null,8,dt)):(O(),a(`span`,ft,E(t.ext.toUpperCase()),1))],2),q(`div`,pt,[q(`div`,{class:`wb-attachment__name`,title:`${t.originalName} (${e.humanSize(t.size)})`},E(t.originalName),9,mt)])],40,ut),q(`button`,{class:`wb-attachment__del`,onClick:G(n=>e.onRemove(t),[`stop`]),title:J(Z)(`@WORKBENCH:删除`)},`×`,8,ht)]))),128))])):o(``,!0)],34),p.value&&l.value.length>0?(O(),w(J(ce),{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`])):o(``,!0),(O(),w(xe,{to:`body`},[g.value.visible&&g.value.att&&e.isImage(g.value.att)?(O(),a(`ul`,{key:0,class:`wb-ctx-menu`,style:he({top:g.value.y+`px`,left:g.value.x+`px`}),onContextmenu:n[6]||=G(()=>{},[`prevent`])},[q(`li`,{class:d([`wb-ctx-menu__item`,{"is-disabled":_.value}]),onClick:b},[n[7]||=q(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[q(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[q(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),q(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),q(`span`,null,E(J(Z)(`@WORKBENCH:复制图片`)),1)],2)],36)):o(``,!0)]))],64))}}),[[`__scopeId`,`data-v-e3e872cb`]]),_t=Ee(`claude`),vt=Ee(`opencode`),yt=Ee(`codex`);function bt(e){return e===`opencode`?vt:e===`codex`?yt:_t}function xt(e){switch(e){case`todo`:return Z(`@WORKBENCH:待执行`);case`running`:return Z(`@WORKBENCH:执行中`);case`done`:return Z(`@WORKBENCH:已完成`);case`error`:return Z(`@WORKBENCH:出错`);case`cancelled`:return Z(`@WORKBENCH:已取消`);case`pending`:return Z(`@WORKBENCH:排队中`);default:return e}}function St(e){switch(e){case`running`:return`var(--color-primary)`;case`done`:return`#22c55e`;case`error`:return`#ef4444`;case`cancelled`:return`#9ca3af`;case`pending`:return`#f59e0b`;default:return`var(--text-tertiary)`}}var Ct=8192;function wt(e,t){return e.length>t?`…(前文已截断)\n${e.slice(-t)}`:e}function Tt(e,t){let n=e||`done`;return n!==`pending`&&n!==`running`||t===`running`||t===`pending`?n:t===`cancelled`||t===`error`?`error`:`done`}function Et(e){let t=e?.toolCalls;if(!Array.isArray(t)||t.length===0)return[];let n=e?.status||`done`,r=[];for(let e=0;e<t.length;e++){let i=t[e];if(!i||typeof i!=`object`)continue;let a=Tt(i.status,n),o=typeof i.result==`string`?i.result:``;r.push({id:typeof i.id==`string`&&i.id?i.id:`tool-${e}`,name:typeof i.name==`string`?i.name:``,argsPreview:typeof i.argsPreview==`string`?i.argsPreview:``,arguments:typeof i.arguments==`string`?i.arguments:``,result:o?wt(o,Ct):``,status:a,error:typeof i.error==`string`&&i.error?i.error:void 0})}return r}var Dt=`
2
-
3
- ---
4
-
5
- `,Ot=`[运行环境 ·`,kt=`## 跨会话记忆库`,At=/\n\n---\n本任务包含 \d+ 个附件(请按文件路径读取[\s\S]*$/,jt=/\n\n续接 #\d+\s*$/;function Mt(e){let t=e.indexOf(Dt);return t===-1?0:t+7}function Nt(e){let t=typeof e==`string`?e:``;return t?(t.startsWith(Ot)&&(t=t.slice(Mt(t))),t.startsWith(kt)&&(t=t.slice(Mt(t))),t=t.replace(At,``).replace(jt,``),t.trim()):``}var Pt=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`],Ft=/!\[([^\]]*)\]\(\s*(?:<([^<>\n]+)>|([^()\s]+))(\s+["'][^"']*["'])?\s*\)/g,It=/^\s*(`{3,}|~{3,})/,Lt=/\.([a-z0-9]+)$/;function Rt(e){let t=e.trim().toLowerCase().match(Lt);return!!t&&Pt.includes(t[1])}function zt(e){let t=String(e||``).trim();if(!t)return!1;if(/^[a-zA-Z]:[\\/]/.test(t))return Rt(t);let n=t.match(/^([a-z][a-z0-9+.-]+):/i);return n&&n[1].toLowerCase()!==`file`||t.startsWith(`//`)||t.startsWith(`/`)?!1:Rt(t)}function Bt(e,t){return`/api/workbench/jobs/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function Vt(e,t){return e.includes(`![`)?e.replace(Ft,(e,n,r,i,a)=>{let o=(r??i??``).trim();return zt(o)?`![${n}](${Bt(t,o)}${a||``})`:e}):e}function Ht(e,t){let n=typeof e==`string`?e:``;if(!n||!t||!n.includes(`![`))return n;let r=n.split(`
6
- `),i=null,a=[];for(let e of r){let n=e.match(It);if(n){let t=n[1][0];i===null?i=t:i===t&&(i=null),a.push(e);continue}a.push(i===null?Vt(e,t):e)}return a.join(`
7
- `)}x(),M(),v(),B();var Ut=[`aria-expanded`],Wt={class:`wb-log-summary__left`},Gt={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},Kt={class:`wb-log-summary__label`},qt={key:0,class:`wb-log-summary__elapsed`},Jt={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},Yt={class:`wb-log-summary__label`},Xt={class:`wb-log-summary__icon`},Zt={class:`wb-log-summary__label`},Qt={key:0,class:`wb-log-summary__elapsed`},$t={key:3},en={class:`wb-log-summary__right`},tn={class:`wb-log-summary__meta`},nn=[`title`,`aria-label`],rn={class:`wb-log-details__body`},an={class:`wb-job-chat`},on={key:0,class:`wb-chat__foot`},sn=[`title`,`aria-label`],cn={key:1,class:`wb-log-fullscreen__empty`},ln=65536,un=Q(b({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(e,{emit:t}){let n=Ne(),i=e,s=t,c=K(!1);function l(){c.value=!c.value}let u=r(()=>i.job.status===`running`||i.job.status===`pending`);R(()=>i.job.status,(e,t)=>{t!==`running`&&t!==`pending`&&(e===`running`||e===`pending`)&&(c.value=!1)});function p(){let e=i.job.output||``;return e?Ht(e.length<=ln?e:`${Z(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`,i.job.id):``}function m(){let e=i.job.thinking||``;return e?e.length<=ln?e:`${Z(`@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(i.job.prompt&&e.push(`## ${Z(`@WORKBENCH:用户提示词`)}\n\n${i.job.prompt}`),i.job.thinking&&e.push(`## ${Z(`@WORKBENCH:Claude 思考`)}\n\n${i.job.thinking}`),i.job.output&&e.push(`## ${Z(`@WORKBENCH:模型返回`)}\n\n${i.job.output}`),!e.length){L.warning(Z(`@WORKBENCH:暂无内容可复制`));return}await h(e.join(`
8
-
9
- ---
10
-
11
- `))?L.success(Z(`@WORKBENCH:已复制到剪贴板`)):L.error(Z(`@WORKBENCH:复制失败`))}let v=r(()=>{let e=i.job.status;return e===`done`||e===`error`||e===`cancelled`}),y=r(()=>i.job.status===`cancelled`?`wb-log-summary__status--cancelled`:i.job.status===`error`?`wb-log-summary__status--error`:`wb-log-summary__status--done`),b=r(()=>i.job.status===`cancelled`?`⏹`:i.job.status===`error`?`✗`:`✓`),x=r(()=>i.job.status===`cancelled`?Z(`@WORKBENCH:已停止`):i.job.status===`error`?Z(`@WORKBENCH:执行出错`):Z(`@WORKBENCH:执行完成`)),S=r(()=>Me(i.job?.agent)),C=r(()=>bt(i.job?.agent));function ee(e,t){return e===`running`||e===`pending`?t?`streaming`:`pending`:e===`error`?`error`:`done`}let T=r(()=>{let e=i.job,t=[],n=e.startedAt?new Date(e.startedAt).getTime():Date.now();if(e.prompt){let r=Nt(e.prompt);r&&t.push({id:`${e.id}-u`,role:`user`,content:r,status:`done`,createdAt:n})}let r=p(),a=m(),o=!!r,s=!!a,c=Et(e),l=c.length>0,u=o||s||l,d=ee(e.status,u);return t.push({id:`${e.id}-a`,role:`assistant`,content:r,reasoning:s?a:void 0,reasoningStatus:s?o?`done`:d===`streaming`?`streaming`:`done`:void 0,toolCalls:l?c:void 0,status:d,error:d===`error`&&e.error||void 0,createdAt:n}),t}),te=K(null);R(()=>i.job.status,(e,t)=>{e===`running`&&t!==`running`&&(te.value=te.value??Date.now())});let ne=r(()=>{if(!te.value)return``;let e=te.value,t=i.job.endedAt?new Date(i.job.endedAt).getTime():Date.now(),n=Math.max(0,Math.floor((t-e)/1e3));return n<60?`${n}s`:`${Math.floor(n/60)}分${(n%60).toString().padStart(2,`0`)}秒`}),re=K(!1),D=r(()=>!!(i.job.output&&i.job.output.length)),ie=r(()=>Ht(i.job.output||``,i.job.id)),k=K(null);R(re,async e=>{e&&(await f(),k.value&&(k.value.scrollTop=k.value.scrollHeight))}),R(()=>(i.job.output||``).length,async()=>{re.value&&(await f(),k.value&&(k.value.scrollTop=k.value.scrollHeight))});function ae(){}let A=r(()=>v.value&&!!i.job.prompt);function oe(){s(`re-execute`,i.job)}return(t,r)=>(O(),a(`div`,{class:d([`wb-log-details`,{"is-running":u.value,"is-pending":e.job.status===`pending`,"is-finished":v.value}])},[q(`div`,{class:`wb-log-summary`,onClick:l,role:`button`,"aria-expanded":!c.value},[q(`span`,Wt,[e.job.status===`running`?(O(),a(`span`,Gt,[q(`span`,Kt,E(J(Z)(`@WORKBENCH:正在执行…`)),1),r[1]||=q(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[q(`span`,{class:`wb-log-dots__dot`}),q(`span`,{class:`wb-log-dots__dot`}),q(`span`,{class:`wb-log-dots__dot`})],-1),ne.value?(O(),a(`span`,qt,E(ne.value),1)):o(``,!0)])):e.job.status===`pending`?(O(),a(`span`,Jt,[q(`span`,Yt,E(J(Z)(`@WORKBENCH:排队中…`)),1),r[2]||=q(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[q(`span`,{class:`wb-log-dots__dot`}),q(`span`,{class:`wb-log-dots__dot`}),q(`span`,{class:`wb-log-dots__dot`})],-1)])):v.value?(O(),a(`span`,{key:2,class:d([`wb-log-summary__status`,y.value])},[q(`span`,Xt,E(b.value),1),q(`span`,Zt,E(x.value),1),ne.value?(O(),a(`span`,Qt,E(ne.value),1)):o(``,!0)],2)):(O(),a(`span`,$t,E(J(Z)(`@WORKBENCH:查看执行日志`)),1))]),q(`span`,en,[q(`span`,tn,E((e.job.output||``).length)+` `+E(J(Z)(`@WORKBENCH:字符`)),1),q(`button`,{type:`button`,class:`wb-log-copy`,title:J(Z)(`@WORKBENCH:复制全部(含提示词与输出)`),"aria-label":J(Z)(`@WORKBENCH:复制全部`),onClick:G(g,[`stop`])},` ⧉ `,8,nn)])],8,Ut),U(q(`div`,rn,[q(`div`,an,[_(J(Te),{messages:T.value,"assistant-name":S.value,"assistant-avatar":C.value,"show-avatar":!0,theme:J(n).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:J(Z)(`@AGENT:计划`),raw:J(Z)(`@AGENT:原始参数`)}},"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`])]),A.value?(O(),a(`footer`,on,[q(`button`,{type:`button`,class:`wb-chat__action`,title:J(Z)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":J(Z)(`@WORKBENCH:重新执行`),onClick:oe},` ↻ `,8,sn)])):o(``,!0),_(Pe,{modelValue:re.value,"onUpdate:modelValue":r[0]||=e=>re.value=e,title:J(Z)(`@WORKBENCH:模型返回 - 全屏查看`),size:`fullscreen`,type:`flex`,"close-on-click-modal":!1,"custom-class":`wb-log-fullscreen-dialog`,onClosed:ae},{default:V(()=>[q(`div`,{ref_key:`fullscreenContainerRef`,ref:k,class:`wb-log-fullscreen`},[D.value?(O(),w(J(X),{key:0,source:ie.value,class:`wb-log-fullscreen__render`},null,8,[`source`])):(O(),a(`div`,cn,E(J(Z)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[F,!c.value]])],2))}}),[[`__scopeId`,`data-v-4b1fd701`]]);x(),M(),v(),B();var dn={class:`exec-logs`},fn={class:`exec-logs__head`},pn={class:`exec-logs__title-block`},mn={class:`exec-logs__stats`},hn={class:`exec-logs__head-actions`},gn={class:`exec-logs__config`},_n={class:`exec-logs__config-label`},vn={class:`exec-logs__config-field`},yn={class:`exec-logs__config-name`},bn={class:`exec-logs__config-field`},xn={class:`exec-logs__config-name`},Sn={class:`exec-logs__filter`},Cn={key:0,class:`exec-logs__batch-meta`},wn={key:0,class:`exec-logs__batch`},Tn={class:`exec-logs__list`},En={key:0,class:`exec-logs__empty`},Dn={class:`exec-logs__empty-art`,"aria-hidden":`true`},On={class:`exec-logs__empty-title`},kn={class:`exec-logs__empty-hint`},An={class:`exec-card__head`},jn=[`title`],Mn={class:`exec-card__meta`},Nn={key:0,class:`exec-card__task`},Pn={key:1,class:`exec-card__time`},Fn={key:2,class:`exec-card__exit`},In=[`title`,`onClick`],Ln={key:0,class:`exec-card__error`},Rn={key:1,class:`exec-logs__pager`},zn=50,Bn=Q(b({__name:`ExecutionLogManager`,setup(e){function t(e){return e instanceof Error?e.message:String(e)}let n=K([]),i=K(0),s=I({count:0,sizeMB:0,byStatus:{}}),l=K(!1),u=K(new Set),f=I({q:``,status:``,page:1}),m=K({maxCount:500,maxSizeMB:256}),g=I({maxCount:500,maxSizeMB:256}),v=K(!1),b=[{value:`pending`,label:Z(`@WORKBENCH:排队中`)},{value:`running`,label:Z(`@WORKBENCH:执行中`)},{value:`done`,label:Z(`@WORKBENCH:已完成`)},{value:`error`,label:Z(`@WORKBENCH:出错`)},{value:`cancelled`,label:Z(`@WORKBENCH:已取消`)}],x=r(()=>n.value.length>0&&n.value.every(e=>u.value.has(e.id))),S=r(()=>n.value.some(e=>u.value.has(e.id))&&!x.value);async function C(){l.value=!0;try{let e=new URLSearchParams;f.q&&e.set(`q`,f.q),f.status&&e.set(`status`,f.status),e.set(`limit`,String(zn)),e.set(`offset`,String((f.page-1)*zn));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);n.value=t.jobs,i.value=t.total,s.count=t.stats.count,s.sizeMB=t.stats.sizeMB,s.byStatus=t.stats.byStatus;let r=new Set(n.value.map(e=>e.id));for(let e of Array.from(u.value))r.has(e)||u.value.delete(e)}catch(e){L.error(Z(`@WORKBENCH:加载失败`)+`: `+t(e))}finally{l.value=!1}}async function ee(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(m.value=e.config,g.maxCount=e.config.maxCount,g.maxSizeMB=e.config.maxSizeMB)}catch{}}async function w(){v.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,L.success(Z(`@WORKBENCH:已保存策略`)),await C()}catch(e){L.error(Z(`@WORKBENCH:保存失败`)+`: `+t(e))}finally{v.value=!1}}function ne(){f.page=1,C()}function re(){f.q=``,f.status=``,f.page=1,C()}function D(e,t){t?u.value.add(e):u.value.delete(e),u.value=new Set(u.value)}function ie(e){if(e)for(let e of n.value)u.value.add(e.id);else for(let e of n.value)u.value.delete(e.id);u.value=new Set(u.value)}function ae(e){L.info(Z(`@WORKBENCH:请到工作台主面板的对应任务上点击「重新执行」`))}async function oe(e){try{await _e.confirm(Z(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),Z(`@WORKBENCH:删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/${e}`,{method:`DELETE`}).then(e=>e.json());if(!t.success)throw Error(t.error||`delete failed`);u.value.delete(e),u.value=new Set(u.value),await C()}catch(e){L.error(Z(`@WORKBENCH:保存失败`)+`: `+t(e))}}async function ce(){let e=Array.from(u.value);if(e.length!==0){try{await _e.confirm(Z(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),Z(`@WORKBENCH:批量删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/batch-delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({ids:e})}).then(e=>e.json());if(!t.success)throw Error(t.error||`batch delete failed`);L.success(Z(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),u.value=new Set,await C()}catch(e){L.error(Z(`@WORKBENCH:保存失败`)+`: `+t(e))}}}async function j(){let e=s.count;if(e!==0){try{await _e.confirm(Z(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),Z(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:Z(`@WORKBENCH:清空全部`)})}catch{return}try{let t=await fetch(`/api/workbench/jobs/clear`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({confirm:!0})}).then(e=>e.json());if(!t.success)throw Error(t.error||`clear failed`);L.success(Z(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),u.value=new Set,await C()}catch(e){L.error(Z(`@WORKBENCH:保存失败`)+`: `+t(e))}}}function M(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 me(()=>{C(),ee()}),(e,t)=>{let r=we,m=Se,ee=T,le=c,N=p,P=y,F=h,I=ye,ue=se;return O(),a(`div`,dn,[q(`header`,fn,[q(`div`,pn,[q(`span`,mn,E(J(Z)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:s.count,size:s.sizeMB})),1)]),q(`div`,hn,[_(r,{icon:J(te),size:`small`,loading:l.value,onClick:C},{default:V(()=>[z(E(J(Z)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),_(r,{type:`danger`,plain:``,size:`small`,disabled:s.count===0,onClick:j},{default:V(()=>[z(E(J(Z)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),q(`div`,gn,[q(`span`,_n,E(J(Z)(`@WORKBENCH:保存策略`)),1),q(`span`,vn,[q(`span`,yn,E(J(Z)(`@WORKBENCH:最大条数`)),1),_(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`])]),q(`span`,bn,[q(`span`,xn,E(J(Z)(`@WORKBENCH:最大体积 (MB)`)),1),_(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`])]),_(r,{type:`primary`,size:`small`,loading:v.value,onClick:w},{default:V(()=>[z(E(J(Z)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),q(`div`,Sn,[_(ee,{modelValue:f.q,"onUpdate:modelValue":t[2]||=e=>f.q=e,placeholder:J(Z)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:A(ne,[`enter`]),onClear:ne},null,8,[`modelValue`,`placeholder`]),_(N,{modelValue:f.status,"onUpdate:modelValue":t[3]||=e=>f.status=e,placeholder:J(Z)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:ne},{default:V(()=>[(O(),a(Y,null,k(b,e=>_(le,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),_(r,{size:`small`,onClick:re},{default:V(()=>[z(E(J(Z)(`@WORKBENCH:重置`)),1)]),_:1}),t[5]||=q(`span`,{class:`exec-logs__filter-spacer`},null,-1),u.value.size>0?(O(),a(`span`,Cn,E(J(Z)(`@WORKBENCH:已选择 {count} 项`,{count:u.value.size})),1)):o(``,!0)]),u.value.size>0?(O(),a(`div`,wn,[_(P,{"model-value":x.value,indeterminate:S.value,onChange:ie},{default:V(()=>[z(E(x.value?J(Z)(`@WORKBENCH:取消全选`):J(Z)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),_(r,{type:`danger`,size:`small`,onClick:ce},{default:V(()=>[z(E(J(Z)(`@WORKBENCH:批量删除`)),1)]),_:1})])):o(``,!0),U((O(),a(`div`,Tn,[!l.value&&n.value.length===0?(O(),a(`div`,En,[q(`div`,Dn,[_(F,null,{default:V(()=>[_(J(pe))]),_:1})]),q(`div`,On,E(J(Z)(`@WORKBENCH:暂无执行日志`)),1),q(`div`,kn,E(J(Z)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):o(``,!0),(O(!0),a(Y,null,k(n.value,e=>(O(),a(`article`,{key:e.id,class:d([`exec-card`,{"is-selected":u.value.has(e.id)}])},[q(`header`,An,[_(P,{"model-value":u.value.has(e.id),onChange:t=>D(e.id,t)},null,8,[`model-value`,`onChange`]),q(`span`,{class:`exec-card__status`,style:he({color:J(St)(e.status),borderColor:J(St)(e.status)})},E(J(xt)(e.status)),5),q(`span`,{class:`exec-card__title`,title:e.title||J(Z)(`@WORKBENCH:无标题`)},E(e.title||J(Z)(`@WORKBENCH:无标题`)),9,jn),t[6]||=q(`span`,{class:`exec-card__spacer`},null,-1),q(`span`,Mn,[e.taskTitle?(O(),a(`span`,Nn,`📁 `+E(e.taskTitle),1)):o(``,!0),e.startedAt?(O(),a(`span`,Pn,`⏱ `+E(M(e.startedAt,e.endedAt)),1)):o(``,!0),e.exitCode===null?o(``,!0):(O(),a(`span`,Fn,`exit `+E(e.exitCode),1))]),q(`button`,{type:`button`,class:`exec-card__del`,title:J(Z)(`@WORKBENCH:删除`),onClick:t=>oe(e.id)},`×`,8,In)]),e.error?(O(),a(`p`,Ln,`⚠ `+E(e.error),1)):o(``,!0),_(un,{job:e,onReExecute:ae},null,8,[`job`])],2))),128))])),[[ue,l.value]]),i.value>zn?(O(),a(`footer`,Rn,[_(I,{"current-page":f.page,"onUpdate:currentPage":t[4]||=e=>f.page=e,"page-size":zn,total:i.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:C},null,8,[`current-page`,`total`])])):o(``,!0)])}}}),[[`__scopeId`,`data-v-dd1760f3`]]),Vn=6e4,Hn=60*Vn,Un=24*Hn;function Wn(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<Vn?Z(`@WORKBENCH:刚刚`):r<Hn?Z(`@WORKBENCH:N 分钟前`,{n:Math.floor(r/Vn)}):r<Un?Z(`@WORKBENCH:N 小时前`,{n:Math.floor(r/Hn)}):r<30*Un?Z(`@WORKBENCH:N 天前`,{n:Math.floor(r/Un)}):new Date(n).toLocaleDateString()}function Gn(e){if(typeof e!=`number`||!Number.isFinite(e)||e<0)return``;let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?Z(`@WORKBENCH:N 小时 M 分`,{n,m:r}):r>0?Z(`@WORKBENCH:N 分 M 秒`,{n:r,m:i}):Z(`@WORKBENCH:N 秒`,{n:i})}function Kn(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function qn(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(Kn(n,a))return i;if(Kn(n,new Date(a.getFullYear(),a.getMonth(),a.getDate()-1)))return Z(`@WORKBENCH:昨天 {time}`,{time:i});let o=`${n.getMonth()+1}/${n.getDate()}`;return n.getFullYear()===a.getFullYear()?`${o} ${i}`:`${n.getFullYear()}/${o} ${i}`}function Jn(e){return String(e.manualDoneAt||e.lastJobEndedAt||e.updatedAt||e.createdAt||``)}function Yn(e){return e.column===`done`?Jn(e):e.updatedAt||e.createdAt||``}function Xn(e){return e.live?``:Gn(e.lastDurationMs)}function Zn(e){let t=Xn(e);return t?Z(`@WORKBENCH:用时 {d}`,{d:t}):``}function Qn(e){return e.live?Z(`@WORKBENCH:已运行 {elapsed}`,{elapsed:Gn(e.live.elapsedMs)}):``}function $n(e){return Qn(e)||Zn(e)}function er(e){let t=Xn(e);if(!t)return``;let n=qn(e.lastJobStartedAt),r=qn(e.lastJobEndedAt);return!n||!r?t:`${t} · ${n} → ${r}`}M();var tr=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`]),nr=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,rr=20971520,ir=3840,ar=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/webp`,`image/bmp`]);function or(e){if(e.size<=3670016)return!1;let t=String(e.type||``).toLowerCase();return t?ar.has(t):/\.(png|jpe?g|webp|bmp)$/i.test(e.name)}function sr(e,t){return`${String(e||`attachment`).replace(/\.[^./\\]+$/,``)}.${t}`}async function cr(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 lr(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 ur(e){let t=await cr(e);if(!t)return null;try{let n=[{edge:ir,quality:.95},{edge:ir,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 lr(o,`image/webp`,e.quality)||await lr(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 dr(){let e=K({}),t=K(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(!tr.has(n.type)&&!n.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){L.error(`${Z(`@WORKBENCH:不支持的文件类型`)}(${n.name})`);return}if(a(t).find(e=>e.originalName===n.name&&e.size===n.size)){L.info(`${n.name} ${Z(`@WORKBENCH:已存在,已复用`)}`);return}let c=i(t);e.value[c]=!0;try{let e=n;if(or(n)){let t=await ur(n);t&&(e=r(t.blob,sr(n.name,t.ext)),L.info(Z(`@WORKBENCH:图片过大,已压缩后上传:{from} → {to}`,{from:g(n.size),to:g(e.size)})))}if(e.size>20971520){L.error(`「${n.name}」${Z(`@WORKBENCH:超过 {size} 限制`,{size:g(rr)})}`);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),L.success(`${Z(`@WORKBENCH:已添加:`)}${e.name}`)}else L.error(i.error||Z(`@WORKBENCH:上传失败`))}catch(e){L.error(Z(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{e.value[c]=!1}}async function f(e,t){try{await _e.confirm(Z(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),Z(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(c(e,t.id),{method:`DELETE`}).then(e=>e.json());n.success?(o(e,a(e).filter(e=>e.id!==t.id)),L.success(Z(`@WORKBENCH:已删除`))):L.error(n.error||Z(`@WORKBENCH:删除失败`))}function p(e){let t=document.createElement(`input`);t.type=`file`,t.accept=nr,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>d(e,t))},t.click()}let m=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function h(e){let t=String(e?.ext||``).toLowerCase();if(t&&m.has(t)||String(e?.mimeType||``).toLowerCase().startsWith(`image/`))return!0;let n=String(e?.originalName||``).toLowerCase();return/\.(png|jpe?g|gif|webp|bmp|svg)$/.test(n)}function g(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return{uploadingTargets:e,pasteHoverId:t,isUploading:n,ensureFile:r,isImageAttachment:h,humanSize:g,targetKey:i,targetAttachments:a,setTargetAttachments:o,targetUploadUrl:s,targetDeleteUrl:c,onAttachmentPaste:l,onAttachmentDrop:u,uploadAttachment:d,removeAttachment:f,pickAttachmentFile:p}}x();var fr=`__simple`,pr=65536;function mr(e,t){function n(t){if(!t)return[];let n=`${t.id}${fr}`;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 i(e){if(!e)return null;let t=n(e);return t.length>0?t[t.length-1]:null}function a(e){return e?e.status===`pending`||e.status===`running`?`running`:e.status===`done`?`done`:e.status===`cancelled`?`cancelled`:`error`:`idle`}return{simpleConversationMessages:r(()=>{if(!t.value)return[];let e=n(t.value);if(e.length===0)return[];let r=[];return e.forEach((t,n)=>{let i=n===e.length-1,a=t.startedAt?new Date(t.startedAt).getTime():Date.now();if(t.prompt){let e=Nt(t.prompt);e&&r.push({id:`${t.id}-u`,role:`user`,content:e,status:`done`,createdAt:a})}let o=t.output||``,s=t.thinking||``,c=o.length>pr?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>pr?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=Et(t),p=f.length>0,m=u||d||p,h;if(!i)h=`done`;else{let e=t.status;h=e===`running`||e===`pending`?m?`streaming`:`pending`:e===`error`?`error`:`done`}r.push({id:`${t.id}-a`,role:`assistant`,content:Ht(c,t.id),reasoning:d?l:void 0,reasoningStatus:d?!i&&u||u?`done`:h===`streaming`?`streaming`:`done`:void 0,toolCalls:p?f:void 0,status:h,error:h===`error`&&t.error||void 0,createdAt:a})}),r}),simpleAllJobsFor:n,simpleJobFor:i,simpleJobState:a,SIMPLE_SUB_ID_SUFFIX:fr,MAX_LOG_DISPLAY_SIMPLE:pr}}function hr(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 gr(e,t=120){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function _r(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 vr(e,t){return`### ${e}\n\n${t.trim()}`}function yr(e){let t=[];return e.forEach((e,n)=>{let r=e.name||Z(`@WORKBENCH:工具`),i=gr(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(``,_r(a.trim()))}),t.join(`
12
- `)}function br(e,t={}){let n=Array.isArray(e)?e.filter(Boolean):[],r=[];if(n.forEach((e,t)=>{let n=[],i=Nt(e.prompt);i&&n.push(vr(Z(`@WORKBENCH:用户提示词`),i));let a=(e.thinking||``).trim();a&&n.push(vr(Z(`@WORKBENCH:Claude 思考`),a));let o=yr(Et(e));o&&n.push(vr(Z(`@WORKBENCH:工具调用`),o));let s=(e.output||``).trim();s&&n.push(vr(Z(`@WORKBENCH:模型返回`),s));let c=(e.error||e.agentError||``).trim();if(c&&n.push(vr(Z(`@WORKBENCH:出错`),c)),n.length===0)return;let l=[Me(e.agent),xt(e.status),hr(e.startedAt)].filter(Boolean);r.push(`## ${Z(`@WORKBENCH:第 {n} 轮`,{n:t+1})}\n\n*${l.join(` · `)}*\n\n${n.join(`
13
-
14
- `)}`)}),r.length===0)return``;let i=[`# ${(t.title||``).trim()||Z(`@WORKBENCH:未命名任务`)}`],a=(t.projectName||``).trim();return a&&i.push(``,`- ${Z(`@WORKBENCH:项目:{name}`,{name:a})}`),i.push(`- ${Z(`@WORKBENCH:导出时间:{time}`,{time:hr((t.now||new Date).toISOString())})}`),`${i.join(`
15
- `)}\n\n---\n\n${r.join(`
16
-
17
- ---
18
-
19
- `)}\n`}function xr(e,t,n,r){function i(){return{executor:r.getExecutor()}}async function a(e){if(!n.value||n.value.id!==e.id)return!0;let i=t.value.find(t=>t.id===e.id);return i&&i.title===n.value.title&&i.desc===n.value.desc?!0:await r.persistTask(!1)}async function o(e){if(!await a(e))return;await r.clearJobsByTask(e.id);let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/run`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i())}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));t.success?L.success(t.message||Z(`@WORKBENCH:已加入执行队列`)):L.error(t.error||Z(`@WORKBENCH:执行失败`))}async function s(t,n){let r=e.value.filter(e=>e.taskId===t.id).slice(-1)[0];if(!r){L.error(Z(`@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?L.success(a.message||Z(`@WORKBENCH:已加入续接队列`)):L.error(a.error||Z(`@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){L.error(Z(`@WORKBENCH:找不到对应任务,无法重新执行`));return}await o(n)}async function u(e){try{await _e.confirm(Z(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),Z(`@WORKBENCH:停止执行`),{confirmButtonText:Z(`@WORKBENCH:停止`),cancelButtonText:Z(`@WORKBENCH:取消`),type:`warning`})}catch{return}let t=await fetch(`/api/workbench/jobs/${e.id}/cancel`,{method:`POST`}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));t.success?L.success(Z(`@WORKBENCH:已发送停止信号`)):L.error(t.error||Z(`@WORKBENCH:停止失败`))}async function d(){if(!n.value)return;let t=n.value,r=e.value.filter(e=>e.taskId===t.id),i=r.filter(e=>e.status===`running`||e.status===`pending`).length,a=r.length===0?Z(`@WORKBENCH:当前任务还没有执行内容,确认仍要清空?`):Z(`@WORKBENCH:将清空 {m} 条执行记录,任务描述/附件保留。`,{m:r.length});try{await _e.confirm(a,Z(`@WORKBENCH:清空执行内容`),{confirmButtonText:Z(`@WORKBENCH:清空`),cancelButtonText:Z(`@WORKBENCH:取消`),type:`warning`})}catch{return}if(i>0){L.warning(Z(`@WORKBENCH:任务正在执行,请先停止`));return}let o=await fetch(`/api/workbench/tasks/${encodeURIComponent(t.id)}/clear-execution`,{method:`POST`,headers:{"Content-Type":`application/json`}}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));o?.success?(e.value=e.value.filter(e=>e.taskId!==t.id),L.success(o.message||Z(`@WORKBENCH:已清空执行内容`))):L.error(o?.error||Z(`@WORKBENCH:清空失败`))}return{runTask:o,continueChat:s,onContinueSendFromChat:c,onReExecuteJob:l,cancelJob:u,clearExecutionForSelectedTask:d}}x();function Sr(){let e=Ne(),t=qe(),n=r({get:()=>e.resolvedTaskExecutor,set:t=>{Ae(t)&&e.setLastTaskExecutor(t)}}),i=r(()=>({claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable})),a=r(()=>je.some(e=>i.value[e.id])),o=r(()=>i.value[n.value]?n.value:Object.keys(i.value).find(e=>i.value[e])??n.value);function s(e){i.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:i,hasAnyExecutor:a,choose:s,executorModelText:c,executorModelTitle:l}}M();function Cr(){let e=K([]),t=K([]),n=K({path:``,name:``});function r(n,r){if(n===`hello`){t.value=r.jobs||[];return}if(n===`job:update`){let e=r,n=t.value.findIndex(t=>t.id===e.id);n>=0?t.value[n]=e:t.value.push(e);return}if(n===`job:thinking-delta`||n===`job:output-delta`){let e=n===`job:thinking-delta`?`thinking`:`output`,i=r?.delta||``;if(!i)return;let a=t.value.findIndex(e=>e.id===r.id);if(a<0)return;let o=t.value[a][e]||``;t.value[a][e]=o+i;return}if(n===`job:toolcalls`){let e=Array.isArray(r?.updates)?r.updates:[];if(!e.length)return;let n=t.value.findIndex(e=>e.id===r.id);if(n<0)return;let i=t.value[n];for(let t of e){if(!t||!t.id)continue;Array.isArray(i.toolCalls)||(i.toolCalls=[]);let e=i.toolCalls.findIndex(e=>e.id===t.id);e>=0?i.toolCalls[e]={...i.toolCalls[e],...t}:i.toolCalls.push(t)}return}if(n===`task:update`){let t=e.value.findIndex(e=>e.id===r.id);t>=0&&(e.value[t]=r)}if(n===`tasks:reordered`){if(Array.isArray(r?.tasks)){if(r.tasks.length<e.value.length){console.warn(`[SSE tasks:reordered] 数据丢失风险:当前 ${e.value.length} 个任务,服务端只返回 ${r.tasks.length} 个,拒绝覆盖`);return}e.value=r.tasks}return}n===`task:error`&&L.error(r.error||Z(`@WORKBENCH:执行出错`))}let i=null;function a(){i&&=(i.close(),null),i=new EventSource(`/api/workbench/events`),i.onmessage=e=>{try{let t=JSON.parse(e.data);r(t.event,t.payload)}catch{}},i.onerror=()=>{i&&=(i.close(),null),setTimeout(a,3e3)}}function o(){i&&=(i.close(),null)}async function s(t){let n=await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}));e.value=n.tasks||[],t?.()}async function c(){let e=await fetch(`/api/workbench/current-project`).then(e=>e.json()).catch(()=>({}));e&&typeof e.projectPath==`string`&&(n.value={path:e.projectPath,name:e.projectName||``})}async function l(){let e=await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}));t.value=e.jobs||[]}async function u(e){try{let n=await fetch(`/api/workbench/jobs/by-task/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());return n?.success?(t.value=t.value.filter(t=>t.taskId!==e),n.removed||0):(console.warn(`[clearJobsByTask] failed:`,n?.error),0)}catch(e){return console.warn(`[clearJobsByTask] error:`,e),0}}async function d(e){let t={title:``,desc:``};e&&(t.projectPath=e);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}).then(e=>e.json());return e.success?e.task||null:(L.error(e.error||Z(`@WORKBENCH:保存失败`)),null)}catch{return L.error(Z(`@WORKBENCH:保存失败`)),null}}return{tasks:e,jobs:t,currentProject:n,applyJobEvent:r,connectSSE:a,disconnectSSE:o,loadTasks:s,loadCurrentProject:c,loadJobs:l,clearJobsByTask:u,createTask:d}}M(),x();var wr=`__no_project__`,Tr=`wb.collapsedGroupPaths.v1`,Er=`wb.seenGroupPaths.v1`;function Dr(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 Or(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function kr(e,t){let n=K(Dr(Tr)),i=K(Dr(Er));R(n,e=>Or(Tr,e),{deep:!1}),R(i,e=>Or(Er,e),{deep:!1});function a(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(i.value);t.add(e),i.value=t}let s=r(()=>{let r=e.value,i=new Map;for(let e of r){let t=$(e.projectPath)||wr;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=$(t.value.path),o=Array.from(i.keys()).sort((e,t)=>e===a?-1:t===a||e===wr?1:t===wr?-1:e.localeCompare(t));return{groups:o.map(e=>({path:e,label:e===wr?Z(`@WORKBENCH:未关联项目`):e,tasks:i.get(e)})),hasMultiple:o.length>1||o.length===1&&n.value.has(o[0])}});function c(e){if(!e||e===wr)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}let l=r(()=>`${$(t.value.path)}|${s.value.groups.map(e=>e.path).join(`
20
- `)}`);return R(l,()=>{let e=$(t.value.path);if(!e)return;let r=new Set(n.value),a=new Set(i.value),o=!1;for(let t of s.value.groups)a.has(t.path)||(a.add(t.path),t.path!==e&&(r.add(t.path),o=!0));o&&(n.value=r),i.value=a},{immediate:!0}),{groupedTasksList:s,isGroupCollapsed:a,toggleGroupCollapsed:o,shortProjectLabel:c}}x(),M(),v(),B();var Ar={class:`wb-sidebar`},jr={class:`wb-section`},Mr=[`disabled`],Nr=[`aria-expanded`,`title`,`onClick`,`onKeydown`],Pr=[`title`],Fr={class:`wb-pill wb-task-group__count`},Ir=[`data-task-id`,`data-group-path`,`title`,`aria-pressed`,`onClick`,`onKeydown`,`onMousedown`],Lr={class:`wb-task-item__body`},Rr=[`title`],zr=[`title`],Br={class:`wb-task-item__action-group`},Vr=[`title`,`aria-label`,`onClick`],Hr=[`onClick`,`title`,`aria-label`],Ur={key:0,class:`wb-empty wb-empty--rich`},Wr={class:`wb-empty__art`,"aria-hidden":`true`},Gr={class:`wb-empty__title`},Kr={class:`wb-empty__hint`},qr={class:`wb-empty__cta`},Jr=5,Yr=Q(b({__name:`WorkbenchSidebar`,props:{tasks:{},selectedTaskId:{},currentProject:{},creatingTask:{type:Boolean},isTaskRunning:{type:Function}},emits:[`select-task`,`delete-task`,`copy-task`,`create-task`,`reorder-tasks`],setup(e,{emit:t}){let n=e,i=t,s=r(()=>n.currentProject),{groupedTasksList:c,isGroupCollapsed:l,toggleGroupCollapsed:u,shortProjectLabel:f}=kr(r(()=>n.tasks),s),p=r(()=>$(n.currentProject.path));function m(e){return!!e.projectPath&&$(e.projectPath)!==p.value}function g(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function v(e){let t=g(e),n=Z(`@WORKBENCH:拖动排序提示`);return t?`${t} · ${n}`:n}function y(e){return n.isTaskRunning(e)}let b=K(null),x=K(null),C=K(null),T=K(null),te=K(null),ne=null;function re(){b.value=null,x.value=null,C.value=null,T.value=null,te.value=null,ne=null}function ae(e,t,n,r){e.button===0&&(ne={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,oe),window.addEventListener(`mouseup`,se,{once:!0}))}function oe(e){if(!ne)return;if(b.value===null){if(Math.abs(e.clientY-ne.pointerY)<Jr)return;b.value=ne.taskId,x.value=ne.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){C.value=null,T.value=null,te.value=null;return}let r=n.getAttribute(`data-task-id`),i=n.getAttribute(`data-group-path`);if(!r||!i)return;if(i!==x.value){C.value=null,T.value=null,te.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;C.value=r,T.value=i,te.value=e.clientY<o?`before`:`after`}function se(e){if(window.removeEventListener(`mousemove`,oe),document.body.style.userSelect=``,!ne){re();return}let t=ne.groupPath,n=ne.taskId,r=C.value,a=te.value,o=T.value;if(re(),!r||!a||o!==t)return;let s=c.value.groups.find(e=>e.path===t);if(!s)return;let l=s.tasks.map(e=>e.id),u=l.indexOf(n);if(u<0)return;l.splice(u,1);let d=l.indexOf(r)+ +(a===`after`);l.splice(d,0,n),i(`reorder-tasks`,{groupPath:t,orderedIds:l})}return(t,n)=>{let r=h,s=we;return O(),a(`aside`,Ar,[q(`section`,jr,[q(`button`,{class:`wb-new-btn`,disabled:e.creatingTask,onClick:n[0]||=e=>i(`create-task`)},[_(r,{class:`wb-new-btn__icon`},{default:V(()=>[_(J(S))]),_:1}),q(`span`,null,E(J(Z)(`@WORKBENCH:新建任务`)),1),n[4]||=q(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,Mr),q(`ul`,{class:d([`wb-task-list`,{"is-grouped":J(c).hasMultiple}])},[(O(!0),a(Y,null,k(J(c).groups,t=>(O(),a(Y,{key:t.path},[J(c).hasMultiple?(O(),a(`li`,{key:0,class:d([`wb-task-group__head`,{"is-current":t.path===p.value,"is-collapsed":J(l)(t.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!J(l)(t.path),title:J(l)(t.path)?J(Z)(`@WORKBENCH:展开`):J(Z)(`@WORKBENCH:收起`),onClick:e=>J(u)(t.path),onKeydown:[A(G(e=>J(u)(t.path),[`prevent`]),[`enter`]),A(G(e=>J(u)(t.path),[`prevent`]),[`space`])]},[_(r,{class:`wb-task-group__caret`},{default:V(()=>[(O(),w(N(J(l)(t.path)?J(ie):J(D))))]),_:2},1024),_(r,{class:`wb-task-group__icon`},{default:V(()=>[_(J(ee))]),_:1}),q(`span`,{class:`wb-task-group__name`,title:t.path===p.value?e.currentProject.path:t.label},E(t.path===p.value?e.currentProject.name:J(f)(t.label)),9,Pr),q(`span`,Fr,E(t.tasks.length),1)],42,Nr)):o(``,!0),J(l)(t.path)?o(``,!0):(O(!0),a(Y,{key:1},k(t.tasks,s=>(O(),a(`li`,{key:s.id,class:d([`wb-task-item`,{active:s.id===e.selectedTaskId,"is-other-project":m(s),"is-running":y(s),"is-dragging":b.value===s.id,"is-drop-before":C.value===s.id&&te.value===`before`,"is-drop-after":C.value===s.id&&te.value===`after`}]),"data-task-id":s.id,"data-group-path":t.path,title:v(s),role:`button`,tabindex:`0`,"aria-pressed":s.id===e.selectedTaskId,onClick:e=>i(`select-task`,s),onKeydown:[A(G(e=>i(`select-task`,s),[`prevent`]),[`enter`]),A(G(e=>i(`select-task`,s),[`prevent`]),[`space`])],onMousedown:e=>ae(e,s,t.path,e.currentTarget)},[q(`div`,Lr,[q(`div`,{class:`wb-task-item__title`,title:g(s)},E(g(s)),9,Rr)]),y(s)?(O(),a(`span`,{key:0,class:`wb-task-item__running-dot`,title:J(Z)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,zr)):o(``,!0),q(`div`,Br,[q(`button`,{class:`wb-task-item__copy`,title:J(Z)(`@WORKBENCH:复制任务`),"aria-label":J(Z)(`@WORKBENCH:复制任务`),onClick:G(e=>i(`copy-task`,s),[`stop`]),onKeydown:n[1]||=G(()=>{},[`stop`])},[_(r,null,{default:V(()=>[_(J(j))]),_:1})],40,Vr),y(s)?o(``,!0):(O(),a(`button`,{key:0,class:`wb-task-item__del`,onClick:G(e=>i(`delete-task`,s),[`stop`]),onKeydown:n[2]||=G(()=>{},[`stop`]),title:J(Z)(`@WORKBENCH:删除`),"aria-label":J(Z)(`@WORKBENCH:删除`)},[_(r,null,{default:V(()=>[_(J(H))]),_:1})],40,Hr))])],42,Ir))),128))],64))),128)),e.tasks.length===0?(O(),a(`li`,Ur,[q(`div`,Wr,[_(r,null,{default:V(()=>[_(J(le))]),_:1})]),q(`div`,Gr,E(J(Z)(`@WORKBENCH:暂无任务`)),1),q(`div`,Kr,E(J(Z)(`@WORKBENCH:点击上方按钮新建`)),1),q(`div`,qr,[_(s,{type:`primary`,size:`small`,icon:J(S),loading:e.creatingTask,onClick:n[3]||=e=>i(`create-task`)},{default:V(()=>[z(E(J(Z)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])])])):o(``,!0)],2)])])}}}),[[`__scopeId`,`data-v-cb578d87`]]);M();function Xr(){let e=K([]),t=K([]),n=K(``),r=K(!1),i=K(!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||L.error(r?.error||Z(`@WORKBENCH:读取项目列表失败`)),!1)}catch(e){return a||L.error(Z(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}finally{r.value=!1}}async function o(e){if(!e)return{ok:!1,keptTasks:0};try{let t=await fetch(`/api/workbench/projects/remove`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}).then(e=>e.json()).catch(()=>null);return t?.success?{ok:!0,keptTasks:Number.isFinite(t.keptTasks)?t.keptTasks:0}:(L.error(t?.error||Z(`@WORKBENCH:移除项目失败`)),{ok:!1,keptTasks:0})}catch(e){return L.error(Z(`@WORKBENCH:网络错误: `)+(e?.message||e)),{ok:!1,keptTasks:0}}}return{projects:e,boardTasks:t,currentProjectPath:n,loading:r,loaded:i,loadProjects:a,removeProject:o}}var Zr=[0,5,10,15,30,60].map(e=>e*60*1e3),Qr=6e5;function $r(e){let t=Number(e);return Zr.includes(t)?t:Qr}function ei(e){return e?e>=36e5?`@WORKBENCH:每 {n} 小时报告`:`@WORKBENCH:每 {n} 分钟报告`:`@WORKBENCH:关闭自动报告`}function ti(e){return e?{n:Math.round(e>=36e5?e/36e5:e/6e4)}:{}}function ni(e){switch(e){case`NO_MODEL`:return`@WORKBENCH:没有可用的 AI 模型,只记录了任务事实`;case`LLM_TIMEOUT`:return`@WORKBENCH:生成超时,只记录了任务事实`;case`LLM_EMPTY`:return`@WORKBENCH:模型没有返回正文,只记录了任务事实`;case`LLM_FAILED`:return`@WORKBENCH:生成失败,只记录了任务事实`;default:return`@WORKBENCH:生成失败,只记录了任务事实`}}function ri(e){if(e==null||e===``)return null;let t=Number(e);if(!Number.isFinite(t))return null;let n=Math.round(t);return n>=0&&n<=100?n:null}function ii(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?null:Math.floor(e)}var ai=`@WORKBENCH:AI 估计`,oi=`@WORKBENCH:百分比是主 Agent 根据任务思考与工具调用推测的大致估计,不是精确进度`;M();var si=1e5;function ci(){let e=K(!0),t=K([]),n=K([]),r=K(si),i=K([]),a=K(null),o=K(!1),s=K(!1),c=K(!1),l=K(``),u=K({}),d=K([]),f=K(!1),p=K(!1),m=K(Qr);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:[],He().setRunning(i.value.length),a.value=c.updatedAt||null,l.value=typeof c.defaultPrompt==`string`?c.defaultPrompt:``,u.value=c.projectPrompts&&typeof c.projectPrompts==`object`?c.projectPrompts:{},m.value=$r(c.reportIntervalMs),o.value=!0,!0):(s||L.error(c?.error||Z(`@WORKBENCH:读取编排状态失败`)),!1)}catch(e){return s||L.error(Z(`@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||L.error(t?.error||Z(`@WORKBENCH:读取进度报告失败`)),!1)}catch(t){return e||L.error(Z(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{f.value=!1}}async function _(){if(p.value)return null;p.value=!0;try{let e=String(Ne().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):(L.info(Z(`@WORKBENCH:当前没有正在执行的任务,没有可汇报的进度`)),null):(L.error(t?.error||Z(`@WORKBENCH:生成进度报告失败`)),null)}catch(e){return L.error(Z(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{p.value=!1}}async function v(e){try{let t=await fetch(`/api/workbench/orchestrator/report-interval`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({intervalMs:e})}).then(e=>e.json());return t?.success?(m.value=$r(t.reportIntervalMs),!0):(L.error(t?.error||Z(`@WORKBENCH:保存失败`)),!1)}catch(e){return L.error(Z(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function y(e){try{let t=await fetch(`/api/workbench/orchestrator/default-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:e})}).then(e=>e.json());return t?.success?(l.value=typeof t.defaultPrompt==`string`?t.defaultPrompt:``,L.success(Z(`@WORKBENCH:已保存全局预设提示词`)),!0):(L.error(t?.error||Z(`@WORKBENCH:保存失败`)),!1)}catch(e){return L.error(Z(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function b(e,t){try{let n=await fetch(`/api/workbench/orchestrator/project-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({projectPath:e,prompt:t})}).then(e=>e.json());return n?.success?(u.value=n.projectPrompts&&typeof n.projectPrompts==`object`?n.projectPrompts:{},L.success(Z(`@WORKBENCH:已保存项目预设提示词`)),!0):(L.error(n?.error||Z(`@WORKBENCH:保存失败`)),!1)}catch(e){return L.error(Z(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function x(t){if(s.value)return!1;let n=e.value;e.value=t,s.value=!0;try{let r=await fetch(`/api/workbench/orchestrator/state`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({active:t})}).then(e=>e.json());return r?.success?(e.value=r.active!==!1,L.success(e.value?Z(`@WORKBENCH:已恢复调度`):Z(`@WORKBENCH:已暂停调度,派发将只建任务不执行`)),!0):(e.value=n,L.error(r?.error||Z(`@WORKBENCH:切换调度状态失败`)),!1)}catch(t){return e.value=n,L.error(Z(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{s.value=!1}}async function S(e){if(c.value)return null;c.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/dispatch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e.text,projectPath:e.projectPath||``,autoRun:e.autoRun!==!1,useDefaultPrompt:e.useDefaultPrompt!==!1,executor:e.executor,attachments:(e.attachments||[]).map(e=>({id:e.id,ext:e.ext,originalName:e.originalName}))})}).then(e=>e.json());return t?.success?(await h(!0),{task:t.task||null,ran:!!t.ran}):(L.error(t?.error||Z(`@WORKBENCH:派发失败`)),null)}catch(e){return L.error(Z(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{c.value=!1}}return{active:e,instructions:t,activity:n,running:i,updatedAt:a,loaded:o,togglingSchedule:s,dispatching:c,maxInstructionChars:r,defaultPrompt:l,projectPrompts:u,reports:d,loadingReports:f,generatingReport:p,reportIntervalMs:m,loadOrchestrator:h,setSchedulingActive:x,dispatch:S,saveDefaultPrompt:y,saveProjectPrompt:b,loadReports:g,generateReport:_,setReportInterval:v}}x(),M(),v(),B();var li={class:`proj`},ui={class:`proj__head`},di={class:`proj__title`},fi={class:`proj__count`},pi={key:0,class:`proj__tools`},mi={class:`proj__search`},hi=[`placeholder`,`aria-label`],gi={class:`proj__toggles`},_i=[`aria-pressed`,`title`],vi=[`aria-pressed`,`title`],yi={class:`proj__list`},bi=[`title`],xi={class:`proj-item__row1`},Si={class:`proj-item__name`},Ci={key:0,class:`proj-item__running`,"aria-hidden":`true`},wi={class:`proj-item__num`},Ti={key:0,class:`proj-item__row2`},Ei={class:`proj-item__running-text`},Di=[`title`],Oi={class:`proj-item__bar`,"aria-hidden":`true`},ki={class:`proj-item__progress-text`},Ai=[`title`,`onClick`,`onKeydown`],ji={class:`proj-item__row1`},Mi={class:`proj-item__name`},Ni={class:`proj-item__signals`},Pi={key:0,class:`proj-item__running`,"aria-hidden":`true`},Fi={key:1,class:`proj-item__badge`},Ii={class:`proj-item__row2`},Li={key:0,class:`proj-chip proj-chip--missing`},Ri={key:0,class:`proj-item__branch`},zi={class:`proj-item__branch-name`},Bi={key:1,class:`proj-chip proj-chip--ahead`},Vi={key:2,class:`proj-chip proj-chip--behind`},Hi={key:3,class:`proj-chip proj-chip--dirty`},Ui={class:`proj-item__time`},Wi={key:0,class:`proj-item__row3`},Gi={class:`proj-item__bar`,"aria-hidden":`true`},Ki={class:`proj-item__progress-text`},qi={class:`proj-item__actions`},Ji=[`title`,`aria-label`,`onClick`],Yi=[`title`,`aria-label`,`onClick`],Xi=[`title`,`aria-label`,`aria-expanded`,`onClick`],Zi=[`aria-label`],Qi=[`onClick`,`onKeydown`],$i={class:`proj-menu__icon`},ea={class:`proj-menu__label`},ta=[`onClick`,`onKeydown`],na={class:`proj-menu__icon`},ra={class:`proj-menu__label`},ia=[`onClick`,`onKeydown`],aa={class:`proj-menu__icon`},oa={class:`proj-menu__label`},sa=[`onClick`,`onKeydown`],ca={class:`proj-menu__icon`},la={class:`proj-menu__label`},ua={class:`proj-menu__title`,role:`presentation`},da=[`onClick`,`onKeydown`],fa={class:`proj-menu__icon`},pa={class:`proj-menu__label`},ma={key:0,class:`proj-menu__hint`},ha=[`onClick`,`onKeydown`],ga={class:`proj-menu__icon`},_a=[`src`],va={class:`proj-menu__label`},ya={class:`proj-menu__hint`},ba=[`onClick`,`onKeydown`],xa={class:`proj-menu__icon`},Sa=[`src`],Ca={class:`proj-menu__label`},wa=[`onClick`,`onKeydown`],Ta={class:`proj-menu__icon`},Ea={class:`proj-menu__label`},Da=[`onClick`,`onKeydown`],Oa={class:`proj-menu__icon`},ka={class:`proj-menu__label`},Aa={key:0,class:`proj-menu__hint`},ja={key:1,class:`proj-menu__hint`},Ma=[`onClick`,`onKeydown`],Na={class:`proj-menu__icon`},Pa={class:`proj-menu__label`},Fa={key:0,class:`proj-empty`},Ia={class:`proj-empty__title`},La={class:`proj-empty__hint`},Ra={key:1,class:`proj-empty`},za={class:`proj-empty__title`},Ba=Q(b({__name:`WorkbenchProjectPanel`,props:{projects:{},selectedKey:{},loading:{type:Boolean}},emits:[`select`,`remove`],setup(e,{emit:n}){let c=e,f=n,p=r(()=>[...c.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)})),g=K(``),v=K(!1),y=K(!1),b=r(()=>!!g.value.trim()||v.value||y.value),x=r(()=>{let e=g.value.trim().toLowerCase();return p.value.filter(t=>v.value&&t.stats.total===0||y.value&&t.git&&t.git.isGitRepo===!1?!1:!e||t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))});function S(){g.value=``,v.value=!1,y.value=!1}let C=r(()=>c.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})),T=r(()=>C.value.total>0?Math.round(C.value.done/C.value.total*100):0);function te(e){return e.git?e.git.isGitRepo===null?Z(`@WORKBENCH:未知`):e.git.isGitRepo?e.git.detached?Z(`@WORKBENCH:游离 HEAD`):e.git.branch||Z(`@WORKBENCH:未知`):``:``}function re(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}let D=K(null),ie=K(null);function oe(e,t){if(D.value===e.key){D.value=null;return}ie.value=t.currentTarget,D.value=e.key}function se(){D.value=null}function ce(e){if(!D.value)return;let t=e.target;if(t&&!ie.value?.contains(t)){for(let e of Array.from(document.querySelectorAll(`.proj-open-menu`)))if(e.contains(t))return;D.value=null}}me(()=>document.addEventListener(`mousedown`,ce,!0)),u(()=>document.removeEventListener(`mousedown`,ce,!0));let M=qe(),le=K(!1),N=K(null);function P(e){return M.lastCheckedAt!==null&&!M.isToolAvailable(e)}async function F(e){se();let t=await Ge(e.path);t.success?L.success(t.message||Z(`@WORKBENCH:已在文件管理器中打开文件夹`)):L.error(t.error||Z(`@WORKBENCH:打开文件夹失败`))}async function I(e){se();let t=await Le(e.path);t.success?L.success(t.message||Z(`@67CE7:已在终端中打开目录`)):L.error(t.error||Z(`@WORKBENCH:打开终端失败`))}async function R(e){se();let t=await Be(e.path);t.success?L.success(Z(`@WORKBENCH:已在新标签页启动 g ui`)):L.error(t.error||Z(`@WORKBENCH:启动 g ui 失败`))}async function B(e){if(se(),e.name)try{await navigator.clipboard.writeText(e.name),L.success(Z(`@67CE7:已复制文件夹名称`))}catch{L.error(Z(`@67CE7:复制失败`))}}async function fe(e){let t=e.name||e.path,n=e.stats.total>0?Z(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。该项目的 {n} 条任务不会被删除,仍可在「全部项目」下查看。`,{name:t,n:e.stats.total}):Z(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。`,{name:t});try{await _e.confirm(n,Z(`@WORKBENCH:移除项目`),{confirmButtonText:Z(`@WORKBENCH:移除`),cancelButtonText:Z(`@WORKBENCH:取消`),type:`warning`})}catch{return}f(`remove`,e)}async function H(e,t,n){if(se(),!await Ke()){L.warning(Z(`@67CE7:工具检测失败,请稍后重试`));return}if(!M.isToolAvailable(t)){N.value=t,le.value=!0;return}let r=await Fe(t,e.path,n);r.success?L.success(r.message||Z(`@67CE7:已用 {tool} 打开目录`,{tool:Ue[t]})):L.error(`${Z(`@67CE7:打开失败: `)}${r.error??``}`)}return(n,r)=>{let c=h,u=ae;return O(),a(`section`,li,[q(`header`,ui,[q(`h3`,di,E(J(Z)(`@WORKBENCH:项目列表`)),1),q(`span`,fi,[b.value?(O(),a(Y,{key:0},[z(E(J(Z)(`@WORKBENCH:匹配 {n}/{total} 个项目`,{n:x.value.length,total:e.projects.length})),1)],64)):(O(),a(Y,{key:1},[z(E(e.projects.length),1)],64))])]),e.projects.length>0?(O(),a(`div`,pi,[q(`div`,mi,[_(c,{class:`proj__search-icon`,"aria-hidden":`true`},{default:V(()=>[_(J(ne))]),_:1}),U(q(`input`,{"onUpdate:modelValue":r[0]||=e=>g.value=e,class:`proj__search-input`,type:`search`,placeholder:J(Z)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":J(Z)(`@WORKBENCH:搜索项目名称或路径`),onKeydown:r[1]||=A(e=>g.value=``,[`esc`])},null,40,hi),[[ue,g.value]])]),q(`div`,gi,[q(`button`,{type:`button`,class:d([`proj__toggle`,{"is-on":v.value}]),"aria-pressed":v.value,title:J(Z)(`@WORKBENCH:只显示有任务的项目`),onClick:r[2]||=e=>v.value=!v.value},[q(`span`,null,E(J(Z)(`@WORKBENCH:只看有任务`)),1)],10,_i),q(`button`,{type:`button`,class:d([`proj__toggle`,{"is-on":y.value}]),"aria-pressed":y.value,title:J(Z)(`@WORKBENCH:只显示 Git 仓库`),onClick:r[3]||=e=>y.value=!y.value},[q(`span`,null,E(J(Z)(`@WORKBENCH:隐藏非 Git`)),1)],10,vi)])])):o(``,!0),q(`ul`,yi,[q(`li`,{class:d([`proj-item proj-item--all`,{"is-active":e.selectedKey===``,"is-running":C.value.running>0,"is-complete":C.value.total>0&&C.value.done>=C.value.total}]),role:`button`,tabindex:`0`,title:J(Z)(`@WORKBENCH:全部项目`),onClick:r[4]||=e=>f(`select`,null),onKeydown:[r[5]||=A(G(e=>f(`select`,null),[`prevent`]),[`enter`]),r[6]||=A(G(e=>f(`select`,null),[`prevent`]),[`space`])]},[q(`div`,xi,[_(c,{class:`proj-item__icon`},{default:V(()=>[_(J(s))]),_:1}),q(`span`,Si,E(J(Z)(`@WORKBENCH:全部项目`)),1),C.value.running>0?(O(),a(`span`,Ci)):o(``,!0),q(`span`,wi,E(e.projects.length),1)]),C.value.running>0?(O(),a(`div`,Ti,[q(`span`,Ei,E(J(Z)(`@WORKBENCH:{n} 个执行中`,{n:C.value.running})),1)])):o(``,!0),C.value.total>0?(O(),a(`div`,{key:1,class:`proj-item__row3`,title:J(Z)(`@WORKBENCH:只统计项目列表里这些项目名下的任务`)},[q(`span`,Oi,[q(`i`,{class:`proj-item__bar-fill`,style:he({width:T.value+`%`})},null,4)]),q(`span`,ki,E(J(Z)(`@WORKBENCH:{done}/{total} 任务完成`,{done:C.value.done,total:C.value.total})),1)],8,Di)):o(``,!0)],42,bi),(O(!0),a(Y,null,k(x.value,n=>(O(),a(`li`,{key:n.key,class:d([`proj-item`,{"is-active":n.key===e.selectedKey,"is-running":n.stats.runningJobs>0,"is-complete":n.stats.total>0&&n.stats.done>=n.stats.total&&n.stats.runningJobs===0,"is-missing":n.exists===!1}]),role:`button`,tabindex:`0`,title:n.path,onClick:e=>f(`select`,n),onKeydown:[A(G(e=>f(`select`,n),[`self`,`prevent`]),[`enter`]),A(G(e=>f(`select`,n),[`self`,`prevent`]),[`space`])]},[q(`div`,ji,[_(c,{class:`proj-item__icon`},{default:V(()=>[_(J(ee))]),_:1}),q(`span`,Mi,E(n.name),1),q(`span`,Ni,[n.stats.runningJobs>0?(O(),a(`span`,Pi)):o(``,!0),n.isCurrent?(O(),a(`span`,Fi,E(J(Z)(`@WORKBENCH:当前`)),1)):o(``,!0)])]),q(`div`,Ii,[n.exists===!1?(O(),a(`span`,Li,E(J(Z)(`@WORKBENCH:目录不存在`)),1)):(O(),a(Y,{key:1},[te(n)?(O(),a(`span`,Ri,[re(n)?(O(),w(ke,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):o(``,!0),q(`span`,zi,E(te(n)),1)])):o(``,!0),n.git&&n.git.ahead>0?(O(),a(`span`,Bi,`↑`+E(n.git.ahead),1)):o(``,!0),n.git&&n.git.behind>0?(O(),a(`span`,Vi,`↓`+E(n.git.behind),1)):o(``,!0),n.git&&n.git.changed>0?(O(),a(`span`,Hi,`●`+E(n.git.changed),1)):o(``,!0)],64)),q(`span`,Ui,E(J(Wn)(n.stats.lastActiveAt)),1)]),n.stats.total>0?(O(),a(`div`,Wi,[q(`span`,Gi,[q(`i`,{class:`proj-item__bar-fill`,style:he({width:n.stats.progress+`%`})},null,4)]),q(`span`,Ki,E(J(Z)(`@WORKBENCH:{done}/{total} 任务完成`,{done:n.stats.done,total:n.stats.total})),1)])):o(``,!0),q(`div`,qi,[n.exists===!1?(O(),a(`button`,{key:0,type:`button`,class:`proj-item__action proj-item__action--danger`,title:J(Z)(`@WORKBENCH:从清单移除`),"aria-label":`${J(Z)(`@WORKBENCH:从清单移除`)} ${n.name}`,onClick:G(e=>fe(n),[`stop`])},[_(c,{"aria-hidden":`true`},{default:V(()=>[_(J(de))]),_:1})],8,Ji)):(O(),a(`button`,{key:1,type:`button`,class:`proj-item__action`,title:J(Z)(`@WORKBENCH:打开文件夹`),"aria-label":`${J(Z)(`@WORKBENCH:打开文件夹`)} ${n.name}`,onClick:G(e=>F(n),[`stop`])},[_(c,{"aria-hidden":`true`},{default:V(()=>[_(J(i))]),_:1})],8,Yi)),n.exists===!1?o(``,!0):(O(),w(u,{key:2,visible:D.value===n.key,trigger:`manual`,placement:`right-start`,width:272,"show-arrow":!1,offset:6,"popper-class":`proj-open-menu`},{reference:V(()=>[q(`button`,{type:`button`,class:d([`proj-item__action`,{"is-open":D.value===n.key}]),title:J(Z)(`@WORKBENCH:打开方式`),"aria-label":`${J(Z)(`@WORKBENCH:打开方式`)} ${n.name}`,"aria-expanded":D.value===n.key,"aria-haspopup":`menu`,onClick:G(e=>oe(n,e),[`stop`])},[_(c,{"aria-hidden":`true`},{default:V(()=>[_(J(m))]),_:1})],10,Xi)]),default:V(()=>[D.value===n.key?(O(),a(`ul`,{key:0,class:`proj-menu`,role:`menu`,"aria-label":J(Z)(`@WORKBENCH:打开方式`)},[q(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>F(n),onKeydown:[A(G(e=>F(n),[`prevent`]),[`enter`]),A(G(e=>F(n),[`prevent`]),[`space`])]},[q(`span`,$i,[_(c,{"aria-hidden":`true`},{default:V(()=>[_(J(i))]),_:1})]),q(`span`,ea,E(J(Z)(`@WORKBENCH:在文件管理器中打开`)),1)],40,Qi),q(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>I(n),onKeydown:[A(G(e=>I(n),[`prevent`]),[`enter`]),A(G(e=>I(n),[`prevent`]),[`space`])]},[q(`span`,na,[_(c,{"aria-hidden":`true`},{default:V(()=>[_(J(l))]),_:1})]),q(`span`,ra,E(J(Z)(`@WORKBENCH:在终端中打开`)),1)],40,ta),q(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>R(n),onKeydown:[A(G(e=>R(n),[`prevent`]),[`enter`]),A(G(e=>R(n),[`prevent`]),[`space`])]},[q(`span`,aa,[_(c,{"aria-hidden":`true`},{default:V(()=>[_(J(t))]),_:1})]),q(`span`,oa,E(J(Z)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,ia),q(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>B(n),onKeydown:[A(G(e=>B(n),[`prevent`]),[`enter`]),A(G(e=>B(n),[`prevent`]),[`space`])]},[q(`span`,ca,[_(c,{"aria-hidden":`true`},{default:V(()=>[_(J(j))]),_:1})]),q(`span`,la,E(J(Z)(`@67CE7:复制文件夹名称`)),1)],40,sa),r[8]||=q(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),q(`li`,ua,E(J(Z)(`@WORKBENCH:用工具打开`)),1),(O(!0),a(Y,null,k(J(ze),e=>(O(),a(`li`,{key:e.id,class:d([`proj-menu__item`,{"is-missing":P(e.id)}]),role:`menuitem`,tabindex:`-1`,onClick:t=>H(n,e.id),onKeydown:[A(G(t=>H(n,e.id),[`prevent`]),[`enter`]),A(G(t=>H(n,e.id),[`prevent`]),[`space`])]},[q(`span`,fa,[_(ke,{"icon-class":e.icon,class:d({"icon-invert-dark":e.id===`codex`})},null,8,[`icon-class`,`class`])]),q(`span`,pa,E(J(Z)(e.labelKey)),1),P(e.id)?(O(),a(`span`,ma,E(J(Z)(`@67CE7:未安装`)),1)):o(``,!0)],42,da))),128)),q(`li`,{class:d([`proj-menu__item`,{"is-missing":P(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>H(n,`claude`),onKeydown:[A(G(e=>H(n,`claude`),[`prevent`]),[`enter`]),A(G(e=>H(n,`claude`),[`prevent`]),[`space`])]},[q(`span`,ga,[q(`img`,{src:J(We),alt:``,class:`proj-menu__img`},null,8,_a)]),q(`span`,va,E(J(Z)(`@67CE7:用 Claude Code 打开`)),1),q(`span`,ya,E(P(`claude`)?J(Z)(`@67CE7:未安装`):J(Z)(`@67CE7:默认权限`)),1)],42,ha),q(`li`,{class:d([`proj-menu__item proj-menu__item--danger`,{"is-missing":P(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>H(n,`claude`,`bypassPermissions`),onKeydown:[A(G(e=>H(n,`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),A(G(e=>H(n,`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[q(`span`,xa,[q(`img`,{src:J(We),alt:``,class:`proj-menu__img`},null,8,Sa)]),q(`span`,Ca,E(J(Z)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],42,ba),q(`li`,{class:d([`proj-menu__item proj-menu__item--danger`,{"is-missing":P(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>H(n,`opencode`,`auto`),onKeydown:[A(G(e=>H(n,`opencode`,`auto`),[`prevent`]),[`enter`]),A(G(e=>H(n,`opencode`,`auto`),[`prevent`]),[`space`])]},[q(`span`,Ta,[_(ke,{"icon-class":`opencode`})]),q(`span`,Ea,E(J(Z)(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],42,wa),q(`li`,{class:d([`proj-menu__item`,{"is-missing":P(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>H(n,`codex`,`sandboxed`),onKeydown:[A(G(e=>H(n,`codex`,`sandboxed`),[`prevent`]),[`enter`]),A(G(e=>H(n,`codex`,`sandboxed`),[`prevent`]),[`space`])]},[q(`span`,Oa,[_(ke,{"icon-class":`codex`,class:`icon-invert-dark`})]),q(`span`,ka,E(J(Z)(`@67CE7:用 Codex 打开(自动批准)`)),1),P(`codex`)?(O(),a(`span`,ja,E(J(Z)(`@67CE7:未安装`)),1)):(O(),a(`span`,Aa,E(J(Z)(`@67CE7:沙箱内`)),1))],42,Da),q(`li`,{class:d([`proj-menu__item proj-menu__item--danger`,{"is-missing":P(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>H(n,`codex`,`bypass`),onKeydown:[A(G(e=>H(n,`codex`,`bypass`),[`prevent`]),[`enter`]),A(G(e=>H(n,`codex`,`bypass`),[`prevent`]),[`space`])]},[q(`span`,Na,[_(ke,{"icon-class":`codex`,class:`icon-invert-dark`})]),q(`span`,Pa,E(J(Z)(`@67CE7:用 Codex 打开(完全批准)`)),1)],42,Ma)],8,Zi)):o(``,!0)]),_:2},1032,[`visible`]))])],42,Ai))),128)),!e.loading&&e.projects.length===0?(O(),a(`li`,Fa,[q(`p`,Ia,E(J(Z)(`@WORKBENCH:尚无项目`)),1),q(`p`,La,E(J(Z)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):o(``,!0),!e.loading&&e.projects.length>0&&x.value.length===0?(O(),a(`li`,Ra,[q(`p`,za,E(J(Z)(`@WORKBENCH:没有匹配的项目`)),1),q(`button`,{type:`button`,class:`proj-empty__clear`,onClick:S},E(J(Z)(`@WORKBENCH:清除筛选`)),1)])):o(``,!0)]),_(Re,{modelValue:le.value,"onUpdate:modelValue":r[7]||=e=>le.value=e,tool:N.value},null,8,[`modelValue`,`tool`])])}}}),[[`__scopeId`,`data-v-79e992c7`]]),Va=[140,170,200,230,260,290,320,350];function Ha(e){return(e||``).replace(/\\/g,`/`).trim().toLowerCase()}function Ua(e){let t=Ha(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,Va[(n>>>0)%Va.length]}function Wa(e){return{"--tag-hue":String(Ua(e))}}x(),M(),v(),B();var Ga={class:`kb`},Ka={class:`kb__toolbar`},qa={class:`kb__views`,role:`tablist`},Ja=[`aria-selected`],Ya=[`aria-selected`],Xa={class:`kb__filters`},Za={class:`kb__search`},Qa=[`placeholder`,`aria-label`],$a=[`aria-hidden`],eo={class:`kb-col__head`},to={class:`kb-col__title`},no={class:`kb-col__count`},ro={class:`kb-col__list`},io=[`data-task-id`,`aria-current`,`onClick`,`onKeydown`],ao=[`title`,`aria-label`,`onClick`],oo=[`src`,`alt`,`onError`],so={key:0,class:`kb-card__cover-more`,"aria-hidden":`true`},co={class:`kb-card__row1`},lo=[`title`],uo=[`title`],fo={class:`kb-card__time`},po=[`title`],mo=[`title`],ho={key:3,class:`kb-card__live`},go={class:`kb-card__live-meta`},_o=[`title`],vo=[`title`],yo={key:2,class:`kb-card__live-pid`},bo={key:3,class:`kb-card__live-silent`},xo=[`title`],So=[`title`],Co={class:`kb-card__live-tag`},wo=[`title`],To={class:`kb-card__live-tag`},Eo=[`title`],Do=[`title`],Oo={class:`kb-card__reply-text`},ko=[`title`,`onClick`],Ao={class:`kb-card__actions`},jo=[`title`,`onClick`],Mo=[`title`,`aria-label`,`onClick`],No=[`title`,`aria-label`,`onClick`],Po=[`title`,`aria-label`,`onClick`],Fo=[`title`,`aria-label`,`onClick`],Io={key:0,class:`kb-col__add`},Lo={key:1,class:`kb-col__empty`},Ro={key:2,class:`kb-col__more`},zo={key:1,class:`kb__table-wrap`},Bo={class:`kb-table`},Vo={class:`kb-table__th`},Ho={class:`kb-table__th kb-table__th--narrow`},Uo={class:`kb-table__th kb-table__th--time`},Wo=[`onClick`,`onKeydown`],Go={class:`kb-table__td`},Ko=[`title`,`onClick`],qo={class:`kb-table__name`},Jo=[`title`],Yo={key:2,class:`kb-table__live`},Xo=[`title`],Zo={key:1,class:`kb-table__live-silent`},Qo={key:3,class:`kb-table__live kb-table__live--reply`},$o=[`title`],es={class:`kb-table__td`},ts={class:`kb-table__td kb-table__td--num`},ns=[`title`],rs={class:`kb-table__dur`},is=[`title`],as={key:0},os={class:`kb-table__td kb-table__empty`,colspan:`3`},ss=`wb.boardView.v1`,cs=30,ls=Q(b({__name:`WorkbenchKanban`,props:{tasks:{},projectLabels:{},showProjectLabel:{type:Boolean},openedTaskId:{}},emits:[`open-task`,`run-task`,`stop-task`,`complete-task`,`reopen-task`,`delete-task`,`create-task`],setup(e,{emit:t}){let n=e,i=t,s=K((()=>{try{return localStorage.getItem(ss)===`list`?`list`:`kanban`}catch{return`kanban`}})());R(s,e=>{try{localStorage.setItem(ss,e)}catch{}});let c=K(``),l=[{key:`todo`,labelKey:`@WORKBENCH:待处理`},{key:`doing`,labelKey:`@WORKBENCH:进行中`},{key:`done`,labelKey:`@WORKBENCH:已完成`}],u=r(()=>{let e=c.value.trim().toLowerCase();return n.tasks.filter(t=>!e||(t.title||``).toLowerCase().includes(e)||(t.desc||``).toLowerCase().includes(e))}),f=K(cs);R(c,()=>{f.value=cs});let p=r(()=>{let e=l.map(e=>{let t=e.key===`done`?u.value.filter(t=>t.column===e.key).sort(y):u.value.filter(t=>t.column===e.key);return{...e,all:t}}),t=e.some(e=>e.all.length>0);return e.map(e=>({key:e.key,labelKey:e.labelKey,total:e.all.length,hidden:e.key===`done`?Math.max(0,e.all.length-f.value):0,tasks:e.key===`done`?e.all.slice(0,f.value):e.all,collapsed:t&&e.all.length===0&&e.key!==`todo`}))}),m=r(()=>({gridTemplateColumns:p.value.map(e=>e.collapsed?`minmax(0, 0fr)`:`minmax(0, 1fr)`).join(` `)})),g=K(!1);me(()=>{requestAnimationFrame(()=>requestAnimationFrame(()=>{g.value=!0}))});function v(e){return Jn(e)}function y(e,t){return v(t).localeCompare(v(e))}function b(e){return Yn(e)}function x(e){return Xn(e)}function S(e){return er(e)}function C(e){let t=(e.autoCompleted?.reason||``).trim(),n=Z(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`);return t?`${n}\n${t}`:n}let ee=r(()=>[...u.value].sort((e,t)=>b(t).localeCompare(b(e))));function T(e){let t=(e.title||``).trim();if(t)return t;let n=(e.desc||``).replace(/\s+/g,` `).trim();return(/^[a-zA-Z]:[\\/]/.test(n)||n.startsWith(`\\\\`))&&n.split(/[\\/]/).filter(Boolean).pop()||n}function te(e){return n.projectLabels[e.projectPath]||``}function re(e){return e.lastJobStatus===`error`}function D(e){return e.live?.agent||e.lastJobAgent||``}function ie(e){let t=e.live;if(!t)return``;let n=Qn(e),r=t.lastLine||t.lastThought||t.lastTool;return r?`${n} · ${r}`:n}function ae(e){return Array.isArray(e.images)?e.images:[]}let oe=K(new Set);function se(e){oe.value=new Set(oe.value).add(e)}function j(e){let t=ae(e);return oe.value.size===0?t:t.filter(e=>!oe.value.has(e.id))}function M(e){return`/api/workbench/attachments/${e}/raw`}let le=K(null);function N(e,t=0){let n=j(e);n.length!==0&&(le.value={urls:n.map(e=>M(e.id)),index:t})}function P(){le.value=null}function F(e){return e.originalName?`${Z(`@WORKBENCH:查看图片`)} · ${e.originalName}`:Z(`@WORKBENCH:查看图片`)}return(t,n)=>{let r=h,u=ce;return O(),a(`div`,Ga,[q(`div`,Ka,[q(`div`,qa,[q(`button`,{type:`button`,role:`tab`,class:d([`kb__view-btn`,{"is-active":s.value===`kanban`}]),"aria-selected":s.value===`kanban`,onClick:n[0]||=e=>s.value=`kanban`},E(J(Z)(`@WORKBENCH:看板视图`)),11,Ja),q(`button`,{type:`button`,role:`tab`,class:d([`kb__view-btn`,{"is-active":s.value===`list`}]),"aria-selected":s.value===`list`,onClick:n[1]||=e=>s.value=`list`},E(J(Z)(`@WORKBENCH:列表视图`)),11,Ya)]),q(`div`,Xa,[q(`div`,Za,[_(r,{class:`kb__search-icon`},{default:V(()=>[_(J(ne))]),_:1}),U(q(`input`,{class:`kb__search-input`,type:`search`,"onUpdate:modelValue":n[2]||=e=>c.value=e,placeholder:J(Z)(`@WORKBENCH:搜索任务标题或描述`),"aria-label":J(Z)(`@WORKBENCH:搜索任务标题或描述`)},null,8,Qa),[[ue,c.value]])])])]),s.value===`kanban`?(O(),a(`div`,{key:0,class:d([`kb__columns`,{"is-animated":g.value}]),style:he(m.value)},[(O(!0),a(Y,null,k(p.value,t=>(O(),a(`section`,{key:t.key,class:d([`kb-col`,[`kb-col--`+t.key,{"is-collapsed":t.collapsed}]]),"aria-hidden":t.collapsed?`true`:void 0},[q(`header`,eo,[q(`span`,{class:d([`kb-col__dot`,{"is-live":t.total>0}]),"aria-hidden":`true`},null,2),q(`h3`,to,E(J(Z)(t.labelKey)),1),q(`span`,no,E(t.total),1)]),q(`ul`,ro,[(O(!0),a(Y,null,k(t.tasks,t=>(O(),a(`li`,{key:t.id,class:d([`kb-card`,{"is-running":t.runningJobs>0,"has-error":re(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=>i(`open-task`,t),onKeydown:[A(G(e=>i(`open-task`,t),[`prevent`]),[`enter`]),A(G(e=>i(`open-task`,t),[`prevent`]),[`space`])]},[j(t).length>0?(O(),a(`button`,{key:0,type:`button`,class:`kb-card__cover`,title:F(j(t)[0]),"aria-label":F(j(t)[0]),onClick:G(e=>N(t),[`stop`]),onKeydown:n[3]||=G(()=>{},[`stop`])},[q(`img`,{class:`kb-card__cover-img`,src:M(j(t)[0].id),alt:j(t)[0].originalName,loading:`lazy`,decoding:`async`,onError:e=>se(j(t)[0].id)},null,40,oo),j(t).length>1?(O(),a(`span`,so,` +`+E(j(t).length-1),1)):o(``,!0)],40,ao)):o(``,!0),q(`div`,co,[e.showProjectLabel&&te(t)?(O(),a(`span`,{key:0,class:`kb-card__project-chip`,style:he(J(Wa)(t.projectPath)),title:t.projectPath},E(te(t)),13,lo)):o(``,!0),q(`p`,{class:`kb-card__title`,title:T(t)},E(T(t)||J(Z)(`@WORKBENCH:未命名任务`)),9,uo),q(`span`,fo,E(J(Wn)(b(t))),1)]),x(t)?(O(),a(`p`,{key:1,class:`kb-card__spent`,title:S(t)},E(J(Zn)(t)),9,po)):o(``,!0),t.autoCompleted?(O(),a(`p`,{key:2,class:`kb-card__auto-done`,title:C(t)},E(J(Z)(`@WORKBENCH:AI 判定完成`)),9,mo)):o(``,!0),t.live?(O(),a(`div`,ho,[q(`p`,go,[D(t)?(O(),a(`span`,{key:0,class:`kb-card__live-agent`,title:J(Me)(D(t))},[_(Ve,{executor:D(t),class:`kb-card__live-agent-icon`},null,8,[`executor`])],8,_o)):o(``,!0),q(`span`,null,E(J(Qn)(t)),1),t.live.toolCallCount?(O(),a(`span`,{key:1,title:t.live.toolMix||``},E(J(Z)(`@WORKBENCH:工具 {n} 次`,{n:t.live.toolCallCount})),9,vo)):o(``,!0),t.live.pid?(O(),a(`span`,yo,`PID `+E(t.live.pid),1)):o(``,!0),J(ii)(t.live.silentMs)===null?o(``,!0):(O(),a(`span`,bo,E(J(Z)(`@WORKBENCH:静默 {elapsed}`,{elapsed:J(Gn)(J(ii)(t.live.silentMs))})),1))]),t.live.lastTool?(O(),a(`p`,{key:0,class:`kb-card__live-line is-tool`,title:t.live.lastTool},E(t.live.lastTool),9,xo)):o(``,!0),t.live.lastThought?(O(),a(`p`,{key:1,class:`kb-card__live-line is-thought`,title:t.live.lastThought},[q(`span`,Co,E(J(Z)(`@WORKBENCH:最近思考`)),1),z(E(t.live.lastThought),1)],8,So)):o(``,!0),t.live.lastLine?(O(),a(`p`,{key:2,class:`kb-card__live-line`,title:t.live.lastLine},[q(`span`,To,E(J(Z)(`@WORKBENCH:最新回复`)),1),z(E(t.live.lastLine),1)],8,wo)):o(``,!0)])):t.lastReply?(O(),a(`p`,{key:4,class:`kb-card__reply`,title:t.lastReply},[D(t)?(O(),a(`span`,{key:0,class:`kb-card__quote-agent`,title:J(Me)(D(t))},[_(Ve,{executor:D(t),class:`kb-card__quote-agent-icon`},null,8,[`executor`])],8,Do)):o(``,!0),q(`span`,Oo,E(t.lastReply),1)],8,Eo)):o(``,!0),re(t)&&t.runningJobs===0?(O(),a(`button`,{key:5,type:`button`,class:`kb-card__retry`,title:J(Z)(`@WORKBENCH:重新执行这条任务`),onClick:G(e=>i(`run-task`,t),[`stop`]),onKeydown:n[4]||=G(()=>{},[`stop`])},E(J(Z)(`@WORKBENCH:重试`)),41,ko)):o(``,!0),q(`div`,Ao,[t.runningJobs===0?(O(),a(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:J(Z)(`@WORKBENCH:执行`),onClick:G(e=>i(`run-task`,t),[`stop`]),onKeydown:n[5]||=G(()=>{},[`stop`])},E(J(Z)(`@WORKBENCH:执行`)),41,jo)):(O(),a(`button`,{key:1,type:`button`,class:`kb-card__btn kb-card__btn--stop`,title:J(Z)(`@WORKBENCH:停止`),"aria-label":J(Z)(`@WORKBENCH:停止`),onClick:G(e=>i(`stop-task`,t),[`stop`]),onKeydown:n[6]||=G(()=>{},[`stop`])},E(J(Z)(`@WORKBENCH:停止`)),41,Mo)),t.column===`done`?t.manualDoneAt?(O(),a(`button`,{key:3,type:`button`,class:`kb-card__btn`,title:J(Z)(`@WORKBENCH:撤销完成标记,退回待处理`),"aria-label":J(Z)(`@WORKBENCH:撤销完成标记`),onClick:G(e=>i(`reopen-task`,t),[`stop`]),onKeydown:n[8]||=G(()=>{},[`stop`])},E(J(Z)(`@WORKBENCH:撤销`)),41,Po)):o(``,!0):(O(),a(`button`,{key:2,type:`button`,class:`kb-card__btn kb-card__btn--done`,title:J(Z)(`@WORKBENCH:标记为已完成`),"aria-label":J(Z)(`@WORKBENCH:标记为已完成`),onClick:G(e=>i(`complete-task`,t),[`stop`]),onKeydown:n[7]||=G(()=>{},[`stop`])},E(J(Z)(`@WORKBENCH:完成`)),41,No)),q(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:J(Z)(`@WORKBENCH:删除`),"aria-label":J(Z)(`@WORKBENCH:删除`),onClick:G(e=>i(`delete-task`,t),[`stop`]),onKeydown:n[9]||=G(()=>{},[`stop`])},`×`,40,Fo)])],42,io))),128)),t.key===`todo`?(O(),a(`li`,Io,[q(`button`,{type:`button`,class:d([`kb-col__add-btn`,{"kb-col__add-btn--solo":t.tasks.length===0}]),onClick:n[10]||=e=>i(`create-task`)},[n[13]||=q(`span`,{class:`kb-col__add-plus`,"aria-hidden":`true`},`+`,-1),q(`span`,null,E(J(Z)(`@WORKBENCH:新建任务`)),1)],2)])):t.tasks.length===0?(O(),a(`li`,Lo,[q(`span`,null,E(J(Z)(`@WORKBENCH:暂无任务`)),1)])):o(``,!0),t.hidden>0?(O(),a(`li`,Ro,[q(`button`,{type:`button`,class:`kb-col__more-btn`,onClick:n[11]||=e=>f.value+=cs},E(J(Z)(`@WORKBENCH:显示更早的 {n} 条`,{n:Math.min(cs,t.hidden)})),1)])):o(``,!0)])],10,$a))),128))],6)):(O(),a(`div`,zo,[q(`table`,Bo,[q(`thead`,null,[q(`tr`,null,[q(`th`,Vo,E(J(Z)(`@WORKBENCH:任务`)),1),q(`th`,Ho,E(J(Z)(`@WORKBENCH:状态`)),1),q(`th`,Uo,E(J(Z)(`@WORKBENCH:时间`)),1)])]),q(`tbody`,null,[(O(!0),a(Y,null,k(ee.value,t=>(O(),a(`tr`,{key:t.id,class:`kb-table__row`,tabindex:`0`,onClick:e=>i(`open-task`,t),onKeydown:[A(G(e=>i(`open-task`,t),[`prevent`]),[`enter`]),A(G(e=>i(`open-task`,t),[`prevent`]),[`space`])]},[q(`td`,Go,[j(t).length>0?(O(),a(`button`,{key:0,type:`button`,class:`kb-table__shots`,title:F(j(t)[0]),onClick:G(e=>N(t),[`stop`]),onKeydown:n[12]||=G(()=>{},[`stop`])},E(J(Z)(`@WORKBENCH:{n} 张图`,{n:j(t).length})),41,Ko)):o(``,!0),q(`span`,qo,E(T(t)||J(Z)(`@WORKBENCH:未命名任务`)),1),e.showProjectLabel&&te(t)?(O(),a(`span`,{key:1,class:`kb-table__project`,style:he(J(Wa)(t.projectPath)),title:t.projectPath},E(te(t)),13,Jo)):o(``,!0),t.live?(O(),a(`span`,Yo,[D(t)?(O(),a(`span`,{key:0,class:`kb-table__agent`,title:J(Me)(D(t))},[_(Ve,{executor:D(t),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Xo)):o(``,!0),z(` `+E(ie(t))+` `,1),J(ii)(t.live.silentMs)===null?o(``,!0):(O(),a(`span`,Zo,E(J(Z)(`@WORKBENCH:静默 {elapsed}`,{elapsed:J(Gn)(J(ii)(t.live.silentMs))})),1))])):t.lastReply?(O(),a(`span`,Qo,[D(t)?(O(),a(`span`,{key:0,class:`kb-table__agent`,title:J(Me)(D(t))},[_(Ve,{executor:D(t),class:`kb-table__agent-icon`},null,8,[`executor`])],8,$o)):o(``,!0),z(E(t.lastReply),1)])):o(``,!0)]),q(`td`,es,[q(`span`,{class:d([`kb-table__status`,`is-`+t.column])},E(J(Z)(l.find(e=>e.key===t.column).labelKey)),3)]),q(`td`,ts,[q(`span`,{class:`kb-table__time`,title:S(t)},[x(t)?(O(),a(Y,{key:0},[q(`span`,rs,E(J(Zn)(t)),1),n[14]||=q(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):o(``,!0),t.autoCompleted?(O(),a(Y,{key:1},[q(`span`,{class:`kb-table__auto-done`,title:C(t)},E(J(Z)(`@WORKBENCH:AI 判定完成`)),9,is),n[15]||=q(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):o(``,!0),q(`span`,null,E(J(Wn)(b(t))),1)],8,ns)])],40,Wo))),128)),ee.value.length===0?(O(),a(`tr`,as,[q(`td`,os,E(J(Z)(`@WORKBENCH:暂无任务`)),1)])):o(``,!0)])])])),le.value?(O(),w(u,{key:2,"url-list":le.value.urls,"initial-index":le.value.index,"hide-on-click-modal":!0,teleported:!0,onClose:P},null,8,[`url-list`,`initial-index`])):o(``,!0)])}}}),[[`__scopeId`,`data-v-efc67236`]]);x(),M(),v();var us=[`title`,`aria-label`],ds={class:`tep__btn-name`},fs={class:`tep__item`},ps={class:`tep__item-name`},ms=[`title`],hs={key:2,class:`tep__item-missing`},gs=Q(b({__name:`TaskExecutorPicker`,props:{title:{}},setup(e){let t=e,{active:r,availability:i,choose:s,executorModelText:c,executorModelTitle:l}=Sr(),u=qe();me(()=>{u.fetchExecutorModels()});function d(){return[t.title,l(r.value)].filter(Boolean).join(` · `)}return(e,t)=>{let u=h,f=n,p=be,m=C;return O(),w(m,{trigger:`click`,class:`tep`,onCommand:J(s)},{dropdown:V(()=>[_(p,null,{default:V(()=>[(O(!0),a(Y,null,k(J(je),e=>(O(),w(f,{key:e.id,command:e.id,disabled:!J(i)[e.id]},{default:V(()=>[q(`span`,fs,[_(Ve,{executor:e.id,class:`tep__item-icon`},null,8,[`executor`]),q(`span`,ps,E(e.name),1),J(c)(e.id)?(O(),a(`span`,{key:0,class:`tep__item-model`,title:J(l)(e.id)},E(J(c)(e.id)),9,ms)):o(``,!0),J(r)===e.id?(O(),w(u,{key:1,class:`tep__item-check`},{default:V(()=>[_(J(W))]),_:1})):J(i)[e.id]?o(``,!0):(O(),a(`span`,hs,E(J(Z)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:V(()=>[q(`button`,{type:`button`,class:`tep__btn`,title:d(),"aria-label":J(Z)(`@WORKBENCH:任务执行器`)},[_(Ve,{executor:J(r),class:`tep__btn-icon`},null,8,[`executor`]),q(`span`,ds,E(J(Me)(J(r))),1),_(u,{class:`tep__btn-caret`},{default:V(()=>[_(J(D))]),_:1})],8,us)]),_:1},8,[`onCommand`])}}}),[[`__scopeId`,`data-v-beca42f2`]]);x(),M(),v(),B();var _s={class:`acs__head`},vs=[`title`,`aria-label`],ys={class:`acs__title`},bs=[`title`,`aria-label`],xs={class:`acs__convs`},Ss={class:`acs__chat`},Cs=[`data-theme`],ws={key:0,class:`acs__foot`},Ts={key:0,class:`acs__notice`},Es={class:`acs__foot-label`},Ds={class:`acs__foot-hint`},Os=Q(b({__name:`AgentChatSurface`,props:{title:{},active:{type:Boolean},allowDispatch:{type:Boolean},dispatchUseDefaultPrompt:{type:Boolean},placeholder:{}},setup(t){let n=t,{active:i}=Sr(),{theme:s}=Ie(),c=r(()=>s.value===`dark`?`dark`:`light`),{sessions:l,sessionsLoading:u,currentSessionId:p,messages:m,isStreaming:h,pendingQuestion:g,answeringQuestion:v,isSessionGenerating:y,currentEngine:b,pendingEngine:x,isEngineLocked:S,pickEngine:C,loadSessions:ee,loadSession:T,deleteSession:te,renameSession:ne,newSession:re,sendMessage:D,answerQuestion:ie,stop:k}=$e(),ae=r(()=>S.value?b.value:x.value);function A(e){S.value||C(e)}let oe=r(()=>n.allowDispatch!==!1&&ae.value!==`gai`),se=r(()=>Je(l.value,y)),ce=Qe(),j=Ye(),M=K(null),{width:le,narrow:N}=nt(M),P=K(`chat`),I=K(null);function ue(e=!0){I.value?.scrollToBottom?.(e)}async function L(e){await D(e.text,e.files,{allowDispatch:n.allowDispatch===!0,dispatchExecutor:i.value,dispatchUseDefaultPrompt:n.dispatchUseDefaultPrompt!==!1}),await f(),ue()}function z(e){T(e),P.value=`chat`}function B(){re(),P.value=`chat`}return R(()=>m.value.length,()=>{f(()=>ue(!1))}),R(()=>n.active,e=>{e&&(ee().catch(()=>{}),f(()=>ue(!1)))}),R(N,e=>{e||(P.value=`chat`)}),me(()=>{ee().catch(()=>{}),f(()=>ue(!1))}),(n,r)=>(O(),a(`div`,{ref_key:`rootRef`,ref:M,class:`acs`},[q(`div`,_s,[J(N)&&P.value===`list`?(O(),a(`button`,{key:0,type:`button`,class:`acs__icon-btn`,title:J(Z)(`@EDITOR:返回对话`),"aria-label":J(Z)(`@EDITOR:返回对话`),onClick:r[0]||=e=>P.value=`chat`},[...r[2]||=[q(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[q(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),q(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,vs)):o(``,!0),q(`span`,ys,E(t.title||J(Z)(`@WORKBENCH:g ai 对话`)),1),r[4]||=q(`span`,{class:`acs__spacer`},null,-1),!J(N)||P.value===`chat`?(O(),w(rt,{key:1,class:`acs__engine`,engine:ae.value,locked:J(S),onSelect:A},null,8,[`engine`,`locked`])):o(``,!0),J(N)&&P.value===`chat`?(O(),a(`button`,{key:2,type:`button`,class:`acs__icon-btn`,title:J(Z)(`@EDITOR:会话列表`),"aria-label":J(Z)(`@EDITOR:会话列表`),onClick:r[1]||=e=>P.value=`list`},[...r[3]||=[e(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-373ecde3><line x1="8" y1="6" x2="21" y2="6" data-v-373ecde3></line><line x1="8" y1="12" x2="21" y2="12" data-v-373ecde3></line><line x1="8" y1="18" x2="21" y2="18" data-v-373ecde3></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-373ecde3></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-373ecde3></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-373ecde3></line></svg>`,1)]],8,bs)):o(``,!0)]),q(`div`,{class:d([`acs__body`,{"is-wide":!J(N)}])},[U(q(`div`,xs,[_(J(Oe),{"show-search":!0,items:se.value,"active-id":J(p),loading:J(u),labels:J(ce),onSelect:z,onNew:B,onRename:J(ne),onDelete:J(te)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[F,!J(N)||P.value===`list`]]),U(q(`div`,Ss,[_(J(Te),{ref_key:`chatRef`,ref:I,"show-input":!1,messages:J(m),"assistant-name":J(Xe),"assistant-avatar":J(et),theme:c.value,question:J(g),"question-submitting":J(v),"question-labels":J(j),"plan-config":{labels:{title:J(Z)(`@AGENT:计划`),raw:J(Z)(`@AGENT:原始参数`)}},onAnswer:J(ie)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`onAnswer`])],512),[[F,!J(N)||P.value===`chat`]]),J(le)>0?(O(),a(`div`,{key:0,class:`acs__composer acu-root`,"data-theme":c.value},[_(J(De),{disabled:J(h),generating:J(h),placeholder:t.placeholder||(J(h)?J(Z)(`@AGENT:正在生成中...`):J(Z)(`@AGENT:输入消息,Enter 发送`)),"upload-config":{accept:J(Ze)},onSend:L,onStop:J(k)},null,8,[`disabled`,`generating`,`placeholder`,`upload-config`,`onStop`])],8,Cs)):o(``,!0)],2),t.allowDispatch&&P.value===`chat`?(O(),a(`div`,ws,[oe.value?(O(),a(`p`,Ts,E(J(Z)(`@WORKBENCH:当前引擎「{name}」只能对话,不能派发任务 —— 切到内置 g ai 才能派活`,{name:J(tt)(ae.value)})),1)):(O(),a(Y,{key:1},[q(`span`,Es,E(J(Z)(`@WORKBENCH:派发执行器`)),1),_(gs,{title:J(Z)(`@WORKBENCH:它派出去的任务由这个执行器跑(与执行按钮的临时切换共用)`)},null,8,[`title`]),q(`span`,Ds,E(J(Z)(`@WORKBENCH:任务会落到看板,跑完有完成提示`)),1)],64))])):o(``,!0)],512))}}),[[`__scopeId`,`data-v-373ecde3`]]);x(),M(),v(),B();var ks=[`title`,`aria-label`],As={class:`oc__rail-text`},js={class:`oc__head`},Ms={class:`oc__title`},Ns=[`disabled`,`title`],Ps=[`title`,`aria-label`],Fs={class:`oc__state-label`},Is={class:`oc__state-value`},Ls={class:`oc__state-meta`},Rs=[`aria-label`],zs=[`aria-selected`],Bs=[`aria-selected`],Vs={class:`oc__report-head`},Hs={class:`oc__panel-title`},Us=[`value`,`title`,`aria-label`],Ws=[`value`],Gs=[`disabled`,`title`],Ks={class:`oc__report-list`},qs={key:0,class:`rp`},Js={class:`rp__head`},Ys=[`title`],Xs={class:`rp__count`},Zs={class:`rp__time`},Qs=[`title`],$s=[`aria-valuenow`,`aria-label`],ec={class:`rp__percent`},tc={class:`rp__percent-tag`},nc={key:1,class:`rp__body`},rc=[`title`],ic={key:3,class:`rp__facts`},ac=[`title`],oc={class:`rp__tasks`},sc={class:`rpt__title`},cc={class:`rpt__meta`},lc={key:0,class:`rpt__project`},uc={key:1,class:`rpt__agent`},dc=[`title`],fc={key:3,class:`rpt__silent`},pc=[`title`],mc=[`aria-valuenow`,`aria-label`],hc={class:`rpt__percent`},gc=[`title`],_c={class:`rpt__tag`},vc=[`title`],yc={class:`rpt__tag`},bc=[`title`],xc={class:`rpt__tag`},Sc=[`title`],Cc=[`aria-expanded`,`title`],wc={class:`oc__sect-title`},Tc={class:`oc__sect-meta`},Ec={class:`oc__sect-brief`},Dc={class:`oc__history-list`},Oc=[`onClick`],kc={class:`oc__history-time`},Ac={class:`oc__history-pct`},jc={class:`oc__history-sum`},Mc=[`aria-expanded`,`title`],Nc={class:`oc__sect-title`},Pc={class:`oc__sect-meta`},Fc={class:`oc__git-name`},Ic={key:0,class:`oc__sect-brief`},Lc={class:`oc__git-list`},Rc={class:`oc__git-label`},zc={class:`oc__git-label`},Bc={class:`oc__git-value`},Vc={class:`oc__git-label`},Hc={class:`oc__git-value`},Uc=[`placeholder`],Wc={key:0},Gc={key:1},Kc={class:`oc__compose-foot`},qc=[`disabled`,`title`,`aria-label`],Jc=[`title`,`aria-label`],Yc=[`title`],Xc=[`title`],Zc=[`disabled`],Qc={class:`oc__hint`},$c=`wb.ocMode.v2`,el=`/api/workbench/orchestrator/attachments`,tl=`wb.ocInputHeight.v1`,nl=76,rl=20,il=Q(b({__name:`OrchestratorConsole`,props:{active:{type:Boolean},running:{},selectedProject:{},dispatching:{type:Boolean},togglingSchedule:{type:Boolean},todayDone:{},collapsed:{type:Boolean},defaultPrompt:{},projectPrompts:{},reports:{},reportIntervalMs:{},generatingReport:{type:Boolean},maxInstructionChars:{}},emits:[`toggle-schedule`,`toggle-collapse`,`open-prompt-settings`,`generate-report`,`set-report-interval`,`dispatch`],setup(e,{expose:n,emit:i}){let s=e,c=i,l=K(``),p=K(!0),m=K(!0),{active:v}=Sr(),y=K((()=>{try{return localStorage.getItem($c)===`chat`?`chat`:`command`}catch{return`command`}})());function b(e){y.value=e;try{localStorage.setItem($c,e)}catch{}}let x=K([]),S=r(()=>({kind:`draft`,list:x.value,replace:e=>{x.value=e}})),{isUploading:C,isImageAttachment:ee,humanSize:T,onAttachmentPaste:ne,onAttachmentDrop:re,removeAttachment:ae,pickAttachmentFile:A}=dr(),se=r(()=>C(`draft`)),ce=K(!1);function j(e){e.stopPropagation(),ne(e,S.value)}function M(e){ce.value=!1,re(e,S.value)}function le(){A(S.value)}function I(e){ae(S.value,e)}function L(){x.value=[]}function B(){l.value=``}n({clearAttachments:L,clearDraft:B});let de=r(()=>s.selectedProject?.key||``),fe=r(()=>(s.defaultPrompt||``).trim()),H=r(()=>{let e=de.value;return e?(s.projectPrompts?.[e]?.prompt||``).trim():``}),pe=r(()=>Object.values(s.projectPrompts||{}).some(e=>(e?.prompt||``).trim().length>0)),_e=r(()=>!!fe.value||pe.value),ve=r(()=>{let e=!!fe.value,t=de.value?H.value?`project`:`none`:pe.value?`target`:`none`;return Z(e&&t===`project`?`@WORKBENCH:全局 + 本项目`:e&&t===`target`?`@WORKBENCH:全局 + 落点项目`:e?`@WORKBENCH:全局`:t===`project`?`@WORKBENCH:本项目`:t===`target`?`@WORKBENCH:落点项目`:`@WORKBENCH:未设置`)}),W=r(()=>l.value.trim().length),ye=r(()=>s.maxInstructionChars||1e5),be=r(()=>W.value>ye.value),xe=r(()=>!be.value&&W.value>=ye.value*.9),Se=r(()=>l.value.trim().length>0&&!s.dispatching&&!se.value&&!be.value);function we(){Se.value&&c(`dispatch`,{text:l.value.trim(),autoRun:p.value,attachments:x.value,projectPath:s.selectedProject?s.selectedProject.path:``,useDefaultPrompt:m.value,executor:v.value})}function Te(e){e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||(e.preventDefault(),we())}function X(){try{let e=localStorage.getItem(tl);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=nl?Math.round(t):null}catch{return null}}let Ee=K(null),De=K(X()),Oe=r(()=>{let e={};return De.value&&(e.height=`${De.value}px`),e}),Q=null,ke=!1,Ae=!0;function je(e){let t=Ee.value;if(!t)return;let n=t.getBoundingClientRect();ke=n.right-e.clientX<=rl&&n.bottom-e.clientY<=rl}function Me(){ke=!1}function Ne(e){let t=Math.round(e.offsetHeight);if(!(t<nl||t===De.value)){De.value=t;try{localStorage.setItem(tl,String(t))}catch{}}}me(()=>{let e=Ee.value;e&&(window.addEventListener(`mouseup`,Me),!(typeof ResizeObserver>`u`)&&(Q=new ResizeObserver(()=>{if(Ae){Ae=!1;return}let t=parseFloat(getComputedStyle(e).maxHeight),n=Number.isFinite(t)&&e.offsetHeight>=t-1;(ke||!n)&&Ne(e)}),Q.observe(e)))}),u(()=>{window.removeEventListener(`mouseup`,Me),Q?.disconnect(),Q=null});let Pe=K(null),Fe=r(()=>(s.running||[]).length),$=r(()=>{let e=s.running||[];return{job:new Set(e.map(e=>e.jobId).filter(Boolean)),task:new Set(e.map(e=>e.taskId).filter(Boolean))}});function Ie(e){if(!e)return!1;let t=$.value;return(e.tasks||[]).some(e=>e.jobId&&t.job.has(e.jobId)||!e.jobId&&!!e.taskId&&t.task.has(e.taskId))}let Le=r(()=>(s.reports||[]).find(Ie)||null),Re=r(()=>{let e=s.reports||[];if(!e.length)return null;if(Pe.value){let t=e.find(e=>e.id===Pe.value);if(t)return t}return Le.value}),ze=r(()=>!!Re.value&&!Ie(Re.value)),Be=r(()=>(s.reports||[]).length?Fe.value>0?Z(`@WORKBENCH:这批任务还没有进度报告`):Z(`@WORKBENCH:当前没有正在执行的任务`):Z(`@WORKBENCH:暂无进度报告`)),Ve=r(()=>(s.reports||[]).length?Z(`@WORKBENCH:最新那份报告讲的任务已经跑完了,要回看可以从历史报告里点开`):``);function He(e){Pe.value=e.id}let Ue=K(null),We=K(!1),Ge=K(!1);function Ke(){let e=Ue.value;e&&!We.value&&(Ge.value=e.scrollHeight-e.clientHeight>2)}function qe(){We.value=!We.value,We.value||f(Ke)}let Je=null;R(Ue,e=>{Je?.disconnect(),Je=null,e&&(Je=new ResizeObserver(()=>Ke()),Je.observe(e))}),u(()=>{Je?.disconnect(),Je=null}),R(()=>Re.value?.id,()=>{We.value=!1,Ge.value=!1,f(Ke)});function Ye(e){let t=ri(e.percent);return t===null?``:t+`%`}let Xe=r(()=>ri(Re.value?.percent)),Ze=r(()=>(Re.value?.tasks||[]).map(e=>({...e,pct:ri(e.percent),silent:ii(e.silentMs)})));function Qe(e){let t=String(e.text||``).replace(/\s+/g,` `).trim();return t?t.length>42?t.slice(0,42)+`…`:t:e.errorCode?Z(ni(e.errorCode)):Z(`@WORKBENCH:当时没有任务在执行`)}function $e(e){return e.errorCode?Z(ni(e.errorCode)):e.tasks.length?Z(`@WORKBENCH:模型没有返回内容`):Z(`@WORKBENCH:生成这份报告时没有任务在执行`)}function et(e){let t=e.target,n=Number(t.value);Zr.includes(n)&&c(`set-report-interval`,n)}let tt=r(()=>{let e=s.selectedProject;if(!e)return[];let t=[];if(e.exists===!1)return t.push({label:Z(`@WORKBENCH:工作区`),value:Z(`@WORKBENCH:目录不存在`),tone:`danger`}),t;let n=e.git;return!n||n.isGitRepo===null?(t.push({label:Z(`@WORKBENCH:Git 状态`),value:Z(`@WORKBENCH:未知`),tone:``}),t):n.isGitRepo?(t.push({label:Z(`@WORKBENCH:分支`),value:n.detached?Z(`@WORKBENCH:游离 HEAD`):n.branch||Z(`@WORKBENCH:未知`),tone:``}),t.push({label:Z(`@WORKBENCH:工作区`),value:n.changed>0?Z(`@WORKBENCH:未提交 {n} 项`,{n:n.changed}):Z(`@WORKBENCH:干净`),tone:n.changed>0?`warn`:``}),n.hasUpstream&&(n.ahead>0||n.behind>0)&&t.push({label:Z(`@WORKBENCH:与上游`),value:Z(`@WORKBENCH:领先 {ahead} / 落后 {behind}`,{ahead:n.ahead,behind:n.behind}),tone:n.behind>0?`warn`:``}),t):(t.push({label:Z(`@WORKBENCH:Git 状态`),value:Z(`@WORKBENCH:不是 Git 仓库`),tone:``}),t)}),nt={history:`wb.ocHistoryOpen.v1`,git:`wb.ocGitOpen.v1`};function rt(e){try{return localStorage.getItem(e)===`1`}catch{return!1}}let it=K(rt(nt.history)),at=K(rt(nt.git));function ot(e){let t=e===`history`?it:at;t.value=!t.value;try{localStorage.setItem(nt[e],t.value?`1`:`0`)}catch{}}let st=r(()=>tt.value.slice(0,2).map(e=>e.value).join(` · `));return(n,r)=>{let i=h;return O(),a(`aside`,{class:d([`oc`,{"is-collapsed":e.collapsed,"is-report-empty":y.value===`command`&&!e.collapsed&&!Re.value}])},[e.collapsed?(O(),a(`button`,{key:0,type:`button`,class:`oc__rail`,title:J(Z)(`@WORKBENCH:展开主 Agent 控制台`),"aria-label":J(Z)(`@WORKBENCH:展开主 Agent 控制台`),"aria-expanded":!1,onClick:r[0]||=e=>c(`toggle-collapse`)},[_(i,{class:`oc__rail-icon`},{default:V(()=>[_(J(Ce))]),_:1}),q(`span`,{class:d([`oc__rail-live`,{"is-off":!e.active}]),"aria-hidden":`true`},null,2),q(`span`,As,E(J(Z)(`@WORKBENCH:主 Agent 控制台`)),1)],8,ks)):o(``,!0),U(q(`header`,js,[q(`span`,{class:d([`oc__live`,{"is-off":!e.active}]),"aria-hidden":`true`},null,2),q(`h3`,Ms,E(J(Z)(`@WORKBENCH:主 Agent 控制台`)),1),q(`button`,{type:`button`,class:d([`oc__toggle`,{"is-off":!e.active}]),disabled:e.togglingSchedule,title:e.active?J(Z)(`@WORKBENCH:暂停后派发只建任务,不会自动执行`):J(Z)(`@WORKBENCH:恢复后派发会自动执行`),onClick:r[1]||=t=>c(`toggle-schedule`,!e.active)},E(e.active?J(Z)(`@WORKBENCH:暂停调度`):J(Z)(`@WORKBENCH:恢复调度`)),11,Ns),q(`button`,{type:`button`,class:`oc__collapse`,title:J(Z)(`@WORKBENCH:收起主 Agent 控制台`),"aria-label":J(Z)(`@WORKBENCH:收起主 Agent 控制台`),"aria-expanded":!0,onClick:r[2]||=e=>c(`toggle-collapse`)},[_(i,null,{default:V(()=>[_(J(oe))]),_:1})],8,Ps)],512),[[F,!e.collapsed]]),U(q(`div`,{class:d([`oc__state`,{"is-paused":!e.active}])},[q(`span`,Fs,E(J(Z)(`@WORKBENCH:调度状态`)),1),q(`span`,Is,E(e.active?J(Z)(`@WORKBENCH:调度中`):J(Z)(`@WORKBENCH:已暂停`)),1),q(`span`,Ls,E(J(Z)(`@WORKBENCH:{n} 个执行中`,{n:Fe.value})),1)],2),[[F,!e.collapsed]]),U(q(`div`,{class:`oc__mode`,role:`tablist`,"aria-label":J(Z)(`@WORKBENCH:切换主 Agent 控制台的工作方式`)},[q(`button`,{type:`button`,role:`tab`,class:d([`oc__mode-btn`,{"is-active":y.value===`chat`}]),"aria-selected":y.value===`chat`,onClick:r[3]||=e=>b(`chat`)},E(J(Z)(`@WORKBENCH:对话`)),11,zs),q(`button`,{type:`button`,role:`tab`,class:d([`oc__mode-btn`,{"is-active":y.value===`command`}]),"aria-selected":y.value===`command`,onClick:r[4]||=e=>b(`command`)},E(J(Z)(`@WORKBENCH:指令`)),11,Bs)],8,Rs),[[F,!e.collapsed]]),U(_(Os,{class:`oc__chat`,active:!e.collapsed&&y.value===`chat`,"allow-dispatch":``,"dispatch-use-default-prompt":m.value,title:J(Z)(`@WORKBENCH:g ai 对话`)},null,8,[`active`,`dispatch-use-default-prompt`,`title`]),[[F,!e.collapsed&&y.value===`chat`]]),U(q(`div`,{class:d([`oc__report`,{"is-empty":!Re.value}])},[q(`div`,Vs,[q(`p`,Hs,E(J(Z)(`@WORKBENCH:进度报告`)),1),q(`select`,{class:`oc__interval`,value:String(e.reportIntervalMs??0),title:J(Z)(`@WORKBENCH:自动报告的间隔(关掉后仍可随时点「立即报告」)`),"aria-label":J(Z)(`@WORKBENCH:自动报告间隔`),onChange:et},[(O(!0),a(Y,null,k(J(Zr),e=>(O(),a(`option`,{key:e,value:String(e)},E(J(Z)(J(ei)(e),J(ti)(e))),9,Ws))),128))],40,Us),q(`button`,{type:`button`,class:`oc__report-run`,disabled:e.generatingReport,title:J(Z)(`@WORKBENCH:让主 Agent 现在汇报一次正在执行的任务进度`),onClick:r[5]||=e=>c(`generate-report`)},[_(i,{class:d([`oc__report-run-icon`,{"is-spin":e.generatingReport}])},{default:V(()=>[_(J(te))]),_:1},8,[`class`]),q(`span`,null,E(e.generatingReport?J(Z)(`@WORKBENCH:生成中…`):J(Z)(`@WORKBENCH:立即报告`)),1)],8,Gs)]),q(`ul`,Ks,[Re.value?(O(),a(`li`,qs,[q(`div`,Js,[q(`span`,{class:d([`rp__trigger`,{"is-auto":Re.value.trigger===`auto`}])},E(Re.value.trigger===`auto`?J(Z)(`@WORKBENCH:自动`):J(Z)(`@WORKBENCH:手动`)),3),ze.value?(O(),a(`span`,{key:0,class:`rp__stale`,title:J(Z)(`@WORKBENCH:这份报告讲的任务已经跑完了,内容只反映生成那一刻的情况`)},E(J(Z)(`@WORKBENCH:已结束`)),9,Ys)):o(``,!0),q(`span`,Xs,E(J(Z)(`@WORKBENCH:{n} 个任务进行中`,{n:Re.value.tasks.length})),1),q(`span`,Zs,E(J(qn)(Re.value.at)),1)]),Xe.value===null?o(``,!0):(O(),a(`div`,{key:0,class:`rp__progress`,title:J(Z)(J(oi))},[q(`span`,{class:`rp__bar`,role:`progressbar`,"aria-valuenow":Xe.value,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":J(Z)(J(ai))},[q(`i`,{class:`rp__bar-fill`,style:he({width:Xe.value+`%`})},null,4)],8,$s),q(`span`,ec,[q(`span`,tc,E(J(Z)(J(ai))),1),z(E(Xe.value)+`% `,1)])],8,Qs)),Re.value.text?(O(),a(`div`,nc,[q(`p`,{ref_key:`textEl`,ref:Ue,class:d([`rp__text`,{"is-clamped":Ge.value&&!We.value,"is-expanded":We.value}])},E(Re.value.text),3),Ge.value||We.value?(O(),a(`button`,{key:0,type:`button`,class:`rp__more`,onClick:qe},E(We.value?J(Z)(`@WORKBENCH:收起`):J(Z)(`@WORKBENCH:展开全文`)),1)):o(``,!0)])):(O(),a(`p`,{key:2,class:`rp__notice`,title:Re.value.errorDetail},E($e(Re.value)),9,rc)),Ze.value.length?(O(),a(`div`,ic,[q(`p`,{class:`rp__facts-cap`,title:J(Z)(`@WORKBENCH:上面是主 Agent 的判断,下面这些是从正在跑的任务里抄出来的事实`)},E(J(Z)(`@WORKBENCH:任务事实`)),9,ac),q(`ul`,oc,[(O(!0),a(Y,null,k(Ze.value,(e,t)=>(O(),a(`li`,{key:e.taskId||t,class:d([`rpt`,{"is-silent":e.silent!==null}])},[q(`p`,sc,E(e.taskTitle||J(Z)(`@WORKBENCH:未命名任务`)),1),q(`p`,cc,[e.projectName?(O(),a(`span`,lc,E(e.projectName),1)):o(``,!0),q(`span`,null,E(J(Z)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:J(Gn)(e.elapsedMs)})),1),e.agent?(O(),a(`span`,uc,E(e.agent),1)):o(``,!0),e.toolCallCount?(O(),a(`span`,{key:2,title:e.toolMix||``},E(J(Z)(`@WORKBENCH:工具 {n} 次`,{n:e.toolCallCount})),9,dc)):o(``,!0),e.silent===null?o(``,!0):(O(),a(`span`,fc,E(J(Z)(`@WORKBENCH:静默 {elapsed}`,{elapsed:J(Gn)(e.silent)})),1))]),e.pct===null?o(``,!0):(O(),a(`p`,{key:0,class:`rpt__progress`,title:J(Z)(J(oi))},[q(`span`,{class:`rpt__bar`,role:`progressbar`,"aria-valuenow":e.pct,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":e.taskTitle||J(Z)(`@WORKBENCH:未命名任务`)},[q(`i`,{class:`rpt__bar-fill`,style:he({width:e.pct+`%`})},null,4)],8,mc),q(`span`,hc,E(e.pct)+`%`,1)],8,pc)),e.lastTool?(O(),a(`p`,{key:1,class:`rpt__line is-tool`,title:e.lastTool},[q(`span`,_c,E(J(Z)(`@WORKBENCH:工具`)),1),z(E(e.lastTool),1)],8,gc)):o(``,!0),e.lastThought?(O(),a(`p`,{key:2,class:`rpt__line is-thought`,title:e.lastThought},[q(`span`,yc,E(J(Z)(`@WORKBENCH:最近思考`)),1),z(E(e.lastThought),1)],8,vc)):o(``,!0),e.lastLine?(O(),a(`p`,{key:3,class:`rpt__line`,title:e.lastLine},[q(`span`,xc,E(J(Z)(`@WORKBENCH:最新回复`)),1),z(E(e.lastLine),1)],8,bc)):o(``,!0)],2))),128))])])):o(``,!0)])):(O(),a(`li`,{key:1,class:`oc-empty`,title:Ve.value},E(Be.value),9,Sc))]),(e.reports||[]).length>1?(O(),a(`div`,{key:0,class:d([`oc__history`,{"is-collapsed":!it.value}])},[q(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":it.value,title:it.value?J(Z)(`@WORKBENCH:收起`):J(Z)(`@WORKBENCH:展开`),onClick:r[6]||=e=>ot(`history`)},[_(i,{class:`oc__sect-caret`},{default:V(()=>[(O(),w(N(it.value?J(D):J(ie))))]),_:1}),q(`span`,wc,E(J(Z)(`@WORKBENCH:历史报告`)),1),q(`span`,Tc,[q(`span`,Ec,E(J(Z)(`@WORKBENCH:共 {n} 份`,{n:(e.reports||[]).length})),1)])],8,Cc),U(q(`ul`,Dc,[(O(!0),a(Y,null,k(e.reports,e=>(O(),a(`li`,{key:e.id},[q(`button`,{type:`button`,class:d([`oc__history-item`,{"is-active":e.id===Re.value?.id}]),onClick:t=>He(e)},[q(`span`,kc,E(J(qn)(e.at)),1),q(`span`,Ac,E(Ye(e)),1),q(`span`,jc,E(Qe(e)),1)],10,Oc)]))),128))],512),[[F,it.value]])],2)):o(``,!0)],2),[[F,!e.collapsed&&y.value===`command`]]),U(q(`div`,{class:d([`oc__git`,{"is-collapsed":!at.value}])},[q(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":at.value,title:at.value?J(Z)(`@WORKBENCH:收起`):J(Z)(`@WORKBENCH:展开`),onClick:r[7]||=e=>ot(`git`)},[_(i,{class:`oc__sect-caret`},{default:V(()=>[(O(),w(N(at.value?J(D):J(ie))))]),_:1}),q(`span`,Nc,E(J(Z)(`@WORKBENCH:项目概览`)),1),q(`span`,Pc,[q(`span`,Fc,E(e.selectedProject?e.selectedProject.name:J(Z)(`@WORKBENCH:全部项目`)),1),!at.value&&st.value?(O(),a(`span`,Ic,E(st.value),1)):o(``,!0)])],8,Mc),U(q(`dl`,Lc,[(O(!0),a(Y,null,k(tt.value,e=>(O(),a(Y,{key:e.label},[q(`dt`,Rc,E(e.label),1),q(`dd`,{class:d([`oc__git-value`,{"is-warn":e.tone===`warn`,"is-danger":e.tone===`danger`}])},E(e.value),3)],64))),128)),q(`dt`,zc,E(J(Z)(`@WORKBENCH:今日完成`)),1),q(`dd`,Bc,E(e.todayDone),1),q(`dt`,Vc,E(J(Z)(`@WORKBENCH:最后活跃`)),1),q(`dd`,Hc,E(e.selectedProject&&J(Wn)(e.selectedProject.stats.lastActiveAt)||`—`),1)],512),[[F,at.value]])],2),[[F,!e.collapsed&&y.value===`command`]]),U(q(`div`,{class:`oc__compose`,onPaste:j,onDrop:G(M,[`prevent`]),onDragover:r[15]||=G(e=>ce.value=!0,[`prevent`]),onDragleave:r[16]||=e=>ce.value=!1},[U(q(`textarea`,{ref_key:`inputRef`,ref:Ee,class:d([`oc__input`,{"is-over":be.value}]),"onUpdate:modelValue":r[8]||=e=>l.value=e,style:he(Oe.value),rows:`4`,placeholder:J(Z)(`@WORKBENCH:给主 Agent 下一条指令,例如:把登录模块的错误处理重构一遍`),onKeydown:Te,onPaste:j,onMousedown:je},null,46,Uc),[[ue,l.value]]),x.value.length>0||se.value?(O(),w(gt,{key:0,attachments:x.value,"is-image":J(ee),"human-size":J(T),"is-uploading":se.value,"is-paste-hover":ce.value,"on-pick":le,"on-remove":I,"raw-base":el,onPaste:j,onDrop:M,onDragover:r[9]||=G(e=>ce.value=!0,[`prevent`]),onDragenter:r[10]||=G(e=>ce.value=!0,[`prevent`]),onDragleave:r[11]||=e=>ce.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`])):o(``,!0),W.value>0?(O(),a(`p`,{key:1,class:d([`oc__count`,{"is-warn":xe.value,"is-over":be.value}])},[be.value?(O(),a(`span`,Wc,E(J(Z)(`@WORKBENCH:超出上限 {max} 字,请精简后再派发(超出的部分不会被发出)`,{max:ye.value})),1)):(O(),a(`span`,Gc,E(W.value)+` / `+E(ye.value),1))],2)):o(``,!0),q(`div`,Kc,[q(`button`,{type:`button`,class:`oc__attach`,disabled:se.value,title:J(Z)(`@WORKBENCH:添加附件(也可直接粘贴或拖入文件)`),"aria-label":J(Z)(`@WORKBENCH:添加附件`),onClick:le},[_(i,null,{default:V(()=>[_(J(g))]),_:1})],8,qc),q(`button`,{type:`button`,class:d([`oc__attach`,{"is-on":_e.value}]),title:J(Z)(`@WORKBENCH:设置派发时自动附加的预设提示词(全局 / 各项目)`),"aria-label":J(Z)(`@WORKBENCH:预设提示词设置`),onClick:r[12]||=e=>c(`open-prompt-settings`)},[_(i,null,{default:V(()=>[_(J(ge))]),_:1})],10,Jc),q(`label`,{class:`oc__autorn`,title:J(Z)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[U(q(`input`,{type:`checkbox`,"onUpdate:modelValue":r[13]||=e=>p.value=e},null,512),[[P,p.value]]),q(`span`,null,E(J(Z)(`@WORKBENCH:立即执行`)),1)],8,Yc),_e.value?(O(),a(`label`,{key:0,class:`oc__autorn`,title:J(Z)(`@WORKBENCH:取消勾选则本次派发的任务不带预设提示词(设置本身不受影响)`)},[U(q(`input`,{type:`checkbox`,"onUpdate:modelValue":r[14]||=e=>m.value=e},null,512),[[P,m.value]]),q(`span`,null,E(J(Z)(`@WORKBENCH:预设提示词({state})`,{state:ve.value})),1)],8,Xc)):o(``,!0),_(gs,{title:J(Z)(`@WORKBENCH:本次派发使用的执行器(与执行按钮的临时切换共用)`)},null,8,[`title`]),q(`button`,{type:`button`,class:`oc__send`,disabled:!Se.value,onClick:we},[_(i,{class:`oc__send-icon`},{default:V(()=>[_(J(t))]),_:1}),q(`span`,null,E(e.dispatching?J(Z)(`@WORKBENCH:派发中…`):J(Z)(`@WORKBENCH:派发`)),1)],8,Zc)]),q(`p`,Qc,[e.selectedProject?(O(),a(Y,{key:0},[z(E(J(Z)(`@WORKBENCH:指令会在「{name}」下新建一个任务;Enter 派发,Shift+Enter 换行`,{name:e.selectedProject.name})),1)],64)):(O(),a(Y,{key:1},[z(E(J(Z)(`@WORKBENCH:指令落到哪个项目由主 Agent 判断;Enter 派发,Shift+Enter 换行`)),1)],64))])],544),[[F,!e.collapsed&&y.value===`command`]])],2)}}}),[[`__scopeId`,`data-v-da57685d`]]);x(),M(),v(),B();var al={class:`pd`},ol={class:`pd__intro`},sl={class:`pd__field`},cl={class:`pd__head`},ll={class:`pd__label`,for:`pd-global`},ul={class:`pd__count`},dl=[`placeholder`],fl={class:`pd__field`},pl={class:`pd__head`},ml={class:`pd__label`,for:`pd-project`},hl={key:0,class:`pd__count`},gl=[`disabled`,`placeholder`],_l={class:`pd__hint`},vl={class:`pd__foot`},yl=[`disabled`],bl=4e3,xl=Q(b({__name:`WorkbenchDefaultPromptDialog`,props:{modelValue:{type:Boolean},defaultPrompt:{},projectPath:{},projectName:{},projectPrompt:{},saving:{type:Boolean}},emits:[`update:modelValue`,`save`],setup(e,{emit:t}){let n=e,i=t,s=K(``),c=K(``);R(()=>n.modelValue,e=>{e&&(s.value=n.defaultPrompt||``,c.value=n.projectPrompt||``)});let l=r(()=>!!n.projectPath),u=r(()=>s.value.trim()!==(n.defaultPrompt||``).trim()||l.value&&c.value.trim()!==(n.projectPrompt||``).trim());function d(){n.saving||i(`save`,{globalPrompt:s.value,projectPrompt:c.value})}function f(){i(`update:modelValue`,!1)}return(t,n)=>(O(),w(Pe,{"model-value":e.modelValue,title:J(Z)(`@WORKBENCH:预设提示词`),width:`min(640px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[2]||=e=>i(`update:modelValue`,e)},{footer:V(()=>[q(`div`,vl,[q(`button`,{type:`button`,class:`pd__btn`,onClick:f},E(J(Z)(`@WORKBENCH:取消`)),1),n[3]||=q(`span`,{class:`pd__foot-spacer`},null,-1),q(`button`,{type:`button`,class:`pd__btn pd__btn--primary`,disabled:e.saving||!u.value,onClick:d},E(e.saving?J(Z)(`@WORKBENCH:保存中…`):J(Z)(`@WORKBENCH:保存`)),9,yl)])]),default:V(()=>[q(`div`,al,[q(`p`,ol,E(J(Z)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),q(`div`,sl,[q(`div`,cl,[q(`label`,ll,E(J(Z)(`@WORKBENCH:全局提示词`)),1),q(`span`,ul,E(s.value.length)+` / `+E(bl),1)]),U(q(`textarea`,{id:`pd-global`,"onUpdate:modelValue":n[0]||=e=>s.value=e,class:`pd__area`,rows:`5`,maxlength:bl,placeholder:J(Z)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,dl),[[ue,s.value]])]),q(`div`,fl,[q(`div`,pl,[q(`label`,ml,E(l.value?J(Z)(`@WORKBENCH:「{name}」的项目提示词`,{name:e.projectName}):J(Z)(`@WORKBENCH:项目提示词`)),1),l.value?(O(),a(`span`,hl,E(c.value.length)+` / `+E(bl),1)):o(``,!0)]),U(q(`textarea`,{id:`pd-project`,"onUpdate:modelValue":n[1]||=e=>c.value=e,class:`pd__area`,rows:`5`,maxlength:bl,disabled:!l.value,placeholder:l.value?J(Z)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):J(Z)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,gl),[[ue,c.value]]),q(`p`,_l,E(l.value?J(Z)(`@WORKBENCH:项目提示词追加在全局提示词之后(不覆盖全局),派发到「{name}」时一起带上`,{name:e.projectName}):J(Z)(`@WORKBENCH:选中的是「全部项目」,落点由主 Agent 判断 —— 想给某个项目单设提示词,先选中它`)),1)])])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-5d14f0f1`]]);x(),M(),v(),B();var Sl={class:`nc`},Cl={class:`nc__field`},wl={class:`nc__label`,for:`nc-project`},Tl={value:``},El=[`value`],Dl=[`title`],Ol={class:`nc__field`},kl={class:`nc__label`,for:`nc-title`},Al=[`placeholder`],jl={class:`nc__field`},Ml={class:`nc__label`,for:`nc-desc`},Nl=[`placeholder`],Pl={key:0,class:`nc__error`},Fl={class:`nc__foot`},Il=[`disabled`],Ll=[`disabled`],Rl=Q(b({__name:`WorkbenchTaskCreateDialog`,props:{modelValue:{type:Boolean},projects:{},defaultProjectPath:{}},emits:[`update:modelValue`,`created`],setup(e,{emit:t}){let n=e,i=t,s=K(``),c=K(``),l=K(``),u=K(!1),d=K(``);function f(e){let t=$(e);if(!t)return``;let r=n.projects.find(e=>$(e.path)===t);return r?r.path:``}R(()=>n.modelValue,e=>{e&&(s.value=``,c.value=``,l.value=f(n.defaultProjectPath),d.value=``,u.value=!1)});let p=r(()=>n.projects),m=r(()=>!u.value&&(s.value.trim().length>0||c.value.trim().length>0)),h=r(()=>{let e=$(l.value);if(!e)return``;let t=p.value.find(t=>$(t.path)===e);return t?t.name:``});async function g(e){if(m.value){u.value=!0,d.value=``;try{let t={title:s.value.trim(),desc:c.value};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||Z(`@WORKBENCH:保存失败`);return}i(`update:modelValue`,!1),i(`created`,{task:n.task,openEditor:e})}finally{u.value=!1}}}return(t,n)=>(O(),w(Pe,{"model-value":e.modelValue,title:J(Z)(`@WORKBENCH:新建开发任务`),width:`min(600px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[9]||=e=>i(`update:modelValue`,e)},{footer:V(()=>[q(`div`,Fl,[q(`button`,{type:`button`,class:`nc__btn`,onClick:n[6]||=e=>i(`update:modelValue`,!1)},E(J(Z)(`@WORKBENCH:取消`)),1),n[10]||=q(`span`,{class:`nc__foot-spacer`},null,-1),q(`button`,{type:`button`,class:`nc__btn`,disabled:!m.value,onClick:n[7]||=e=>g(!0)},E(J(Z)(`@WORKBENCH:创建并打开编辑器`)),9,Il),q(`button`,{type:`button`,class:`nc__btn nc__btn--primary`,disabled:!m.value,onClick:n[8]||=e=>g(!1)},E(u.value?J(Z)(`@WORKBENCH:创建中…`):J(Z)(`@WORKBENCH:创建`)),9,Ll)])]),default:V(()=>[q(`div`,Sl,[q(`div`,Cl,[q(`label`,wl,E(J(Z)(`@WORKBENCH:项目`)),1),U(q(`select`,{id:`nc-project`,"onUpdate:modelValue":n[0]||=e=>l.value=e,class:`nc__select`},[q(`option`,Tl,E(J(Z)(`@WORKBENCH:跟随当前项目`)),1),(O(!0),a(Y,null,k(p.value,e=>(O(),a(`option`,{key:e.key,value:e.path},E(e.name)+E(e.exists===!1?` · ${J(Z)(`@WORKBENCH:目录不存在`)}`:``),9,El))),128))],512),[[fe,l.value]]),q(`p`,{class:`nc__hint`,title:l.value},E(h.value?J(Z)(`@WORKBENCH:任务会在「{name}」目录下执行`,{name:h.value}):J(Z)(`@WORKBENCH:任务会跟随应用当前的工作目录`)),9,Dl)]),q(`div`,Ol,[q(`label`,kl,E(J(Z)(`@WORKBENCH:标题`)),1),U(q(`input`,{id:`nc-title`,"onUpdate:modelValue":n[1]||=e=>s.value=e,class:`nc__input`,type:`text`,maxlength:`200`,placeholder:J(Z)(`@WORKBENCH:一句话说清要做什么`),onKeydown:n[2]||=A(G(e=>g(!1),[`prevent`]),[`enter`])},null,40,Al),[[ue,s.value]])]),q(`div`,jl,[q(`label`,Ml,E(J(Z)(`@WORKBENCH:描述`)),1),U(q(`textarea`,{id:`nc-desc`,"onUpdate:modelValue":n[3]||=e=>c.value=e,class:`nc__input nc__input--area`,rows:`6`,placeholder:J(Z)(`@WORKBENCH:把背景、验收标准、相关文件路径写进来,执行时用它当上下文`),onKeydown:[n[4]||=A(G(e=>g(!1),[`ctrl`,`prevent`]),[`enter`]),n[5]||=A(G(e=>g(!1),[`meta`,`prevent`]),[`enter`])]},null,40,Nl),[[ue,c.value]])]),d.value?(O(),a(`p`,Pl,E(d.value),1)):o(``,!0)])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-dc7778da`]]);x(),M(),v(),B();var zl={class:`board__top`},Bl=[`title`,`aria-label`,`aria-expanded`],Vl={class:`board__brand`},Hl={class:`board__brand-text`},Ul={class:`board__title`},Wl={class:`board__subtitle`},Gl={class:`board__stats`},Kl={class:`board__stat`},ql={class:`board__stat-label`},Jl={class:`board__stat-value`},Yl=[`title`],Xl={class:`board__stat-label`},Zl={class:`board__stat-value`},Ql={class:`board__stat`},$l={class:`board__stat-label`},eu={class:`board__stat`},tu={class:`board__stat-label`},nu={class:`board__stat-value`},ru=[`title`],iu={class:`board__main`},au={class:`board__main-head`},ou={class:`board__main-title`},su={class:`board__project-name`},cu=[`title`],lu={key:1,class:`board__project-path`},uu={key:0,class:`board__project-meta`},du=[`title`],fu=`wb.boardProject.v1`,pu=5e3,mu=3e4,hu=`wb.boardLayout.v1`,gu=180,_u=420,vu=260,yu=900,bu=.26,xu=.46,Su=Q(b({__name:`WorkbenchBoard`,props:{openedTaskId:{}},emits:[`open-task`,`board-tasks`],setup(e,{emit:t}){let n=e,i=t,{projects:s,boardTasks:c,currentProjectPath:l,loading:f,loadProjects:p,removeProject:m}=Xr();R(c,e=>i(`board-tasks`,e),{immediate:!0});let{active:g,activity:v,running:y,dispatching:b,togglingSchedule:x,maxInstructionChars:S,defaultPrompt:C,projectPrompts:ee,reports:T,generatingReport:te,reportIntervalMs:ne,loadOrchestrator:re,setSchedulingActive:D,dispatch:ie,saveDefaultPrompt:k,saveProjectPrompt:ae,loadReports:se,generateReport:ce,setReportInterval:j}=ci(),{active:M}=Sr(),le=(()=>{try{return localStorage.getItem(fu)}catch{return null}})(),N=K(le||``);R(N,e=>{try{localStorage.setItem(fu,e)}catch{}});let P=r(()=>N.value&&s.value.find(e=>e.key===N.value)||null);R(s,e=>{N.value&&(e.some(e=>e.key===N.value)||(N.value=``))});let F=!1;function ue(){if(F||(F=!0,le!==null))return;let e=l.value?$(l.value):``;e&&s.value.some(t=>t.key===e)&&(N.value=e)}let z=r(()=>{let e=new Map(s.value.map(e=>[e.key,e.name])),t={};for(let n of c.value)n.projectPath&&(t[n.projectPath]=e.get($(n.projectPath))||``);return t}),B=r(()=>{if(!N.value)return c.value;let e=N.value;return c.value.filter(t=>$(t.projectPath)===e)}),de=r(()=>{let e=new Date;e.setHours(0,0,0,0);let t=e.getTime();return{projects:s.value.length,tasks:c.value.length,running:y.value.length,todayDone:v.value.filter(e=>e.kind===`done`&&e.at&&new Date(e.at).getTime()>=t).length}});function fe(e){i(`open-task`,{taskId:e.id,projectPath:e.projectPath})}let H=null,pe=!1,ge=null;async function ve(e=!0){if(!pe){pe=!0;try{await Promise.all([p(e),re(e)])}finally{pe=!1}}}function U(){document.hidden||(ve(!0),se(!0))}me(async()=>{window.addEventListener(`resize`,xe),await ve(!1),se(!0),ue(),H=setInterval(()=>{document.hidden||ve(!0)},pu),ge=setInterval(()=>{document.hidden||se(!0)},mu),document.addEventListener(`visibilitychange`,U)}),u(()=>{window.removeEventListener(`resize`,xe),H&&=(clearInterval(H),null),ge&&=(clearInterval(ge),null),document.removeEventListener(`visibilitychange`,U)});let W=I({left:null,right:null,leftCollapsed:!1,rightCollapsed:!1});function ye(){try{let e=localStorage.getItem(hu);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(W.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(W.right=t.right),W.leftCollapsed=t.leftCollapsed===!0,W.rightCollapsed=t.rightCollapsed===!0}catch{}}ye();function G(){try{localStorage.setItem(hu,JSON.stringify(W))}catch{}}let be=K(typeof window>`u`?1920:window.innerWidth);function xe(){be.value=window.innerWidth}let Se=r(()=>be.value<=1024),Y=r(()=>be.value<=860);function we(e,t){let n=e===`left`?gu:vu,r=Math.min(e===`left`?_u:yu,be.value*(e===`left`?bu:xu));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}let Te=r(()=>{let e={};return W.left!=null&&(e[`--wb-left-w`]=we(`left`,W.left)+`px`),W.right!=null&&!Y.value&&(e[`--wb-right-w`]=we(`right`,W.right)+`px`),e}),X=K(null),Ee=K(null);function De(e){return X.value?.querySelector(e===`left`?`.board__left`:`.oc`)}function Oe(e){window.removeEventListener(`mousemove`,e),document.body.style.userSelect=``,document.body.style.cursor=``,Ee.value=null,G()}function Q(e,t){if(e===`left`?Se.value:Y.value)return;let n=De(e);if(!n)return;t.preventDefault();let r=t.clientX,i=n.getBoundingClientRect().width;Ee.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);W[e]=we(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>Oe(a),{once:!0})}function ke(e){W[e]=null,G()}let Ae=K(!1),je=r(()=>Se.value?!Ae.value:W.leftCollapsed);function Me(){if(Se.value){Ae.value=!Ae.value;return}W.leftCollapsed=!W.leftCollapsed,G()}function Ne(){Se.value&&(Ae.value=!1)}let Pe=r(()=>W.rightCollapsed&&!Y.value);function Fe(){W.rightCollapsed=!W.rightCollapsed,G()}function Ie(e){N.value=e?e.key:``,Ae.value=!1}let Le=K(!1);function Re(){Le.value=!0}async function ze(e){if(await ve(!0),e.openEditor){i(`open-task`,{taskId:e.task.id,projectPath:e.task.projectPath||``});return}L.success(Z(`@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:M.value})}).then(e=>e.json()).catch(()=>null);if(!n?.success){L.error(n?.error||Z(`@WORKBENCH:执行失败`));return}L.success(Z(`@WORKBENCH:已开始执行`)),await ve(!0)}let Ve=new Set;async function He(e){if(Ve.has(e.id))return;let t=e.live?.jobId;if(!t){L.error(Z(`@WORKBENCH:停止失败`));return}try{await _e.confirm(Z(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),Z(`@WORKBENCH:停止执行`),{confirmButtonText:Z(`@WORKBENCH:停止`),cancelButtonText:Z(`@WORKBENCH:取消`),type:`warning`})}catch{return}Ve.add(e.id);try{let e=await fetch(`/api/workbench/jobs/${encodeURIComponent(t)}/cancel`,{method:`POST`}).then(e=>e.json()).catch(()=>null);if(!e?.success){L.error(e?.error||Z(`@WORKBENCH:停止失败`));return}L.success(Z(`@WORKBENCH:已发送停止信号`)),await ve(!0)}finally{Ve.delete(e.id)}}let Ue=new Set;async function We(e){if(!Ue.has(e.id)){if(e.runningJobs>0)try{await _e.confirm(Z(`@WORKBENCH:这条任务还在执行,标记完成会同时把它停掉。已输出的内容会保留。`),Z(`@WORKBENCH:标记为已完成`),{confirmButtonText:Z(`@WORKBENCH:标记完成`),cancelButtonText:Z(`@WORKBENCH:取消`),type:`warning`})}catch{return}Ue.add(e.id);try{let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/done`,{method:`POST`}).then(e=>e.json()).catch(()=>null);if(!t?.success){L.error(t?.error||Z(`@WORKBENCH:标记失败`));return}L.success(Z(`@WORKBENCH:已标记为已完成`)),await ve(!0)}finally{Ue.delete(e.id)}}}async function Ge(e){if(!Ue.has(e.id)){Ue.add(e.id);try{let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/done`,{method:`DELETE`}).then(e=>e.json()).catch(()=>null);if(!t?.success){L.error(t?.error||Z(`@WORKBENCH:撤销失败`));return}L.success(Z(`@WORKBENCH:已撤销完成标记`)),await ve(!0)}finally{Ue.delete(e.id)}}}async function Ke(e){let{ok:t,keptTasks:n}=await m(e.path);t&&(L.success(n>0?Z(`@WORKBENCH:已移除项目,{n} 条任务仍保留在「全部项目」下`,{n}):Z(`@WORKBENCH:已移除项目`)),await ve(!0))}async function qe(e){let t=(e.title||``).trim()||Z(`@WORKBENCH:未命名任务`);try{await _e.confirm(Z(`@WORKBENCH:删除任务「{title}」?`,{title:t}),Z(`@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){L.error(n.error||Z(`@WORKBENCH:删除失败`));return}await ve(!0)}let Je=K(null),Ye=r(()=>P.value?.path||l.value);async function Xe(e){let t=await ie({text:e.text,projectPath:e.projectPath,autoRun:e.autoRun,attachments:e.attachments,useDefaultPrompt:e.useDefaultPrompt,executor:e.executor});t&&(Je.value?.clearAttachments(),Je.value?.clearDraft(),L.success(t.ran?Z(`@WORKBENCH:已派发并开始执行`):Z(`@WORKBENCH:已派发(只建任务未执行)`)),await ve(!0))}async function Ze(e){await D(e)}let Qe=K(!1),$e=K(!1),et=r(()=>{let e=P.value?.key;return e&&ee.value?.[e]?.prompt||``});async function tt(e){if($e.value)return;let t=e.globalPrompt.trim(),n=e.projectPrompt.trim(),r=P.value;$e.value=!0;try{let e=!0;t!==(C.value||``).trim()&&(e=await k(t)),e&&r&&n!==et.value.trim()&&(e=await ae(r.path,n)),e&&(Qe.value=!1)}finally{$e.value=!1}}return(e,t)=>{let r=h;return O(),a(`div`,{class:`board`,style:he(Te.value)},[q(`header`,zl,[q(`button`,{type:`button`,class:d([`board__icon-btn board__fold-btn`,{"is-on":!je.value}]),title:je.value?J(Z)(`@WORKBENCH:展开项目列表`):J(Z)(`@WORKBENCH:收起项目列表`),"aria-label":je.value?J(Z)(`@WORKBENCH:展开项目列表`):J(Z)(`@WORKBENCH:收起项目列表`),"aria-expanded":!je.value,onClick:Me},[je.value?(O(),w(r,{key:1},{default:V(()=>[_(J(oe))]),_:1})):(O(),w(r,{key:0},{default:V(()=>[_(J(Ce))]),_:1}))],10,Bl),q(`div`,Vl,[q(`span`,{class:d([`board__live`,{"is-off":!J(g)}]),"aria-hidden":`true`},null,2),q(`div`,Hl,[q(`h1`,Ul,E(J(Z)(`@WORKBENCH:多项目编排台`)),1),q(`p`,Wl,E(J(g)?J(Z)(`@WORKBENCH:主 Agent 调度中`):J(Z)(`@WORKBENCH:主 Agent 已暂停`)),1)])]),q(`div`,Gl,[q(`span`,Kl,[q(`span`,ql,E(J(Z)(`@WORKBENCH:项目`)),1),q(`strong`,Jl,E(de.value.projects),1)]),q(`span`,{class:`board__stat`,title:J(Z)(`@WORKBENCH:看板上全部任务(含已从项目列表移除的项目)`)},[q(`span`,Xl,E(J(Z)(`@WORKBENCH:全部任务`)),1),q(`strong`,Zl,E(de.value.tasks),1)],8,Yl),q(`span`,Ql,[q(`span`,$l,E(J(Z)(`@WORKBENCH:活跃执行`)),1),q(`strong`,{class:d([`board__stat-value`,{"is-live":de.value.running>0}])},E(de.value.running),3)]),q(`span`,eu,[q(`span`,tu,E(J(Z)(`@WORKBENCH:今日完成`)),1),q(`strong`,nu,E(de.value.todayDone),1)])])]),q(`div`,{ref_key:`colsRef`,ref:X,class:d([`board__cols`,{"is-resizing":Ee.value!==null}])},[q(`div`,{class:d([`board__scrim`,{"is-on":Ae.value}]),"aria-hidden":`true`,onClick:t[0]||=e=>Ae.value=!1},null,2),q(`aside`,{class:d([`board__left`,{"is-collapsed":je.value}]),onKeydown:A(Ne,[`esc`])},[_(Ba,{projects:J(s),"selected-key":N.value,loading:J(f),onSelect:Ie,onRemove:Ke},null,8,[`projects`,`selected-key`,`loading`])],34),je.value?o(``,!0):(O(),a(`div`,{key:0,class:`board__splitter board__splitter--left`,role:`separator`,"aria-orientation":`vertical`,title:J(Z)(`@WORKBENCH:拖动调整项目列表宽度,双击恢复默认`),onMousedown:t[1]||=e=>Q(`left`,e),onDblclick:t[2]||=e=>ke(`left`)},null,40,ru)),q(`main`,iu,[q(`div`,au,[q(`div`,ou,[q(`h2`,su,E(P.value?P.value.name:J(Z)(`@WORKBENCH:全部项目`)),1),P.value?(O(),a(`span`,{key:0,class:`board__project-path`,title:P.value.path},E(P.value.path),9,cu)):(O(),a(`span`,lu,E(J(Z)(`@WORKBENCH:共 {n} 个项目的任务`,{n:J(s).length})),1))]),P.value?(O(),a(`span`,uu,E(J(Z)(`@WORKBENCH:{done}/{total} 任务完成`,{done:P.value.stats.done,total:P.value.stats.total})),1)):o(``,!0)]),_(ls,{tasks:B.value,"project-labels":z.value,"show-project-label":!P.value,"opened-task-id":n.openedTaskId,onOpenTask:fe,onRunTask:Be,onStopTask:He,onCompleteTask:We,onReopenTask:Ge,onDeleteTask:qe,onCreateTask:Re},null,8,[`tasks`,`project-labels`,`show-project-label`,`opened-task-id`])]),!Pe.value&&!Y.value?(O(),a(`div`,{key:1,class:`board__splitter board__splitter--right`,role:`separator`,"aria-orientation":`vertical`,title:J(Z)(`@WORKBENCH:拖动调整主 Agent 控制台宽度,双击恢复默认`),onMousedown:t[3]||=e=>Q(`right`,e),onDblclick:t[4]||=e=>ke(`right`)},null,40,du)):o(``,!0),_(il,{ref_key:`consoleRef`,ref:Je,active:J(g),running:J(y),"selected-project":P.value,dispatching:J(b),"toggling-schedule":J(x),"today-done":de.value.todayDone,collapsed:Pe.value,"default-prompt":J(C),"project-prompts":J(ee),reports:J(T),"report-interval-ms":J(ne),"generating-report":J(te),"max-instruction-chars":J(S),onToggleCollapse:Fe,onToggleSchedule:Ze,onDispatch:Xe,onGenerateReport:J(ce),onSetReportInterval:J(j),onOpenPromptSettings:t[5]||=e=>Qe.value=!0},null,8,[`active`,`running`,`selected-project`,`dispatching`,`toggling-schedule`,`today-done`,`collapsed`,`default-prompt`,`project-prompts`,`reports`,`report-interval-ms`,`generating-report`,`max-instruction-chars`,`onGenerateReport`,`onSetReportInterval`])],2),_(xl,{modelValue:Qe.value,"onUpdate:modelValue":t[6]||=e=>Qe.value=e,"default-prompt":J(C),"project-path":P.value?.path||``,"project-name":P.value?.name||``,"project-prompt":et.value,saving:$e.value,onSave:tt},null,8,[`modelValue`,`default-prompt`,`project-path`,`project-name`,`project-prompt`,`saving`]),_(Rl,{modelValue:Le.value,"onUpdate:modelValue":t[7]||=e=>Le.value=e,projects:J(s),"default-project-path":Ye.value,onCreated:ze},null,8,[`modelValue`,`projects`,`default-project-path`])],4)}}}),[[`__scopeId`,`data-v-5da69428`]]);x(),M(),v(),B();var Cu={class:`workbench`},wu={class:`wb-editor`},Tu={class:`wb-editor-bar`},Eu=[`title`],Du=[`title`],Ou=[`title`],ku={key:1,class:`wb-editor-bar__time`},Au=[`title`],ju={key:1,class:`wb-editor-bar__sep`,"aria-hidden":`true`},Mu={key:2,class:`wb-editor-bar__spent`},Nu={class:`wb-editor-bar__hint`},Pu={class:`workbench__editor-row`},Fu=[`aria-label`,`aria-valuenow`,`title`],Iu={class:`wb-split`},Lu={key:0,class:`wb-placeholder`},Ru={class:`wb-split__header`},zu={class:`wb-split__title-wrap`},Bu=[`placeholder`,`aria-label`],Vu=[`title`,`aria-label`],Hu=[`title`],Uu={key:0,class:`wb-meta-save__dot`},Wu={key:1,class:`wb-meta-save__check`},Gu={key:2,class:`wb-meta-save__bang`},Ku={key:3,class:`wb-meta-save__dot`},qu=[`title`],Ju={class:`wb-executor-item`},Yu={class:`wb-executor-item__name`},Xu=[`title`],Zu={key:2,class:`wb-executor-item__missing`},Qu={key:2,class:`wb-no-claude-hint`,role:`status`},$u={class:`wb-no-claude-hint__text`},ed={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},td=[`title`,`aria-label`],nd=[`title`,`aria-label`],rd=[`title`,`aria-label`],id=[`open`],ad={class:`wb-task-desc__summary`},od={class:`wb-task-desc__label`},sd=[`title`,`aria-label`],cd={key:0,class:`wb-task-desc__tag`},ld={key:0},ud={key:1,class:`wb-task-desc__tag-attachment`},dd=[`placeholder`,`aria-label`],fd={class:`wb-execution-body`},pd={class:`wb-exec-detail`},md={class:`wb-form-item__label wb-task-prompt__summary`},hd={key:0,class:`wb-task-prompt__tag`},gd={key:0,class:`wb-task-prompt__parts`},_d={class:`wb-task-prompt__label`},vd={class:`wb-task-prompt__text`},yd={key:1,class:`wb-task-prompt__empty`},bd={class:`wb-simple-chat`},xd={key:0,class:`wb-simple-chat__footer`},Sd=`wb.lastTaskByProject.v1`,Cd=`__no_project__`,wd=`wb.sidebarWidth.v1`,Td=200,Ed=480,Dd=268,Od=3e3,kd=52,Ad=320,jd=500,Md=Q(b({__name:`WorkbenchView`,setup(e){let t=Ne(),i=qe(),s=K((()=>{try{let e=parseInt(localStorage.getItem(wd)||``,10);return Number.isFinite(e)?Math.min(Ed,Math.max(Td,e)):Dd}catch{return Dd}})());function c(e){e.preventDefault();let t=e.clientX,n=s.value;document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let r=e=>{s.value=Math.min(Ed,Math.max(Td,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(wd,String(s.value))}catch{}},{once:!0})}function l(e){s.value=Math.min(Ed,Math.max(Td,s.value+e));try{localStorage.setItem(wd,String(s.value))}catch{}}function p(){try{let e=localStorage.getItem(Sd),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function m(e){try{localStorage.setItem(Sd,JSON.stringify(e))}catch{}}function g(e,t){let n=p();n[e||Cd]=t,m(n)}let v=K(!1);function y(){v.value=!1}let b=K(null);async function x(e){await ce(),I.value=e.taskId,b.value=e.taskId,we(),B.value&&g($(T.value.path),e.taskId),v.value=!0}let{tasks:S,jobs:ee,currentProject:T,connectSSE:te,disconnectSSE:ne,loadCurrentProject:ae,loadJobs:oe,clearJobsByTask:se,loadTasks:ce}=Cr();function M(){let e=$(T.value.path),t=S.value.filter(t=>!t.projectPath||$(t.projectPath)===e),n=p(),r=e&&n[e]||!e&&n[Cd]||``,i=r?S.value.find(e=>e.id===r):null,a=t[0]||S.value[0]||null,o=i&&i.projectPath&&$(i.projectPath)!==e?null:i?i.id:a?a.id:null;I.value=o,we()}async function le(){let e=I.value;if(await ce(),e&&S.value.some(t=>t.id===e)){we();return}M()}async function P(){await ce(),M()}let F=K(!1),I=K(null),B=r(()=>S.value.find(e=>e.id===I.value)||null),fe=K([]),H=r(()=>fe.value.find(e=>e.id===I.value)||null),ge=r(()=>H.value?Wn(Yn(H.value)):``),ye=r(()=>H.value?$n(H.value):``),xe=r(()=>H.value?er(H.value):``),Se=r(()=>{let e=B.value?.projectPath||``;return!e||$(e)===$(T.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),Ce=K({title:``,desc:``});function we(){B.value?Ce.value={title:B.value.title,desc:B.value.desc}:Ce.value={title:``,desc:``}}let X=K(`idle`),Ee=K(0),Oe=null,Q=r(()=>{if(!B.value)return!1;let e=B.value;return Ce.value.title!==e.title||Ce.value.desc!==e.desc});function ke(){Oe!==null&&(clearTimeout(Oe),Oe=null)}function Ae(e){return!(!e||(e.title||``).trim()||(e.desc||``).trim()||(e.simpleOverride||``).trim()||Array.isArray(e.attachments)&&e.attachments.length>0)}async function Fe(e){try{await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`})}catch{}let t=S.value.findIndex(t=>t.id===e.id);t!==-1&&S.value.splice(t,1)}async function Ie(){let e=S.value.filter(e=>e.id!==I.value&&Ae(e));for(let t of e)await Fe(t)}async function Le(){if(!B.value)return!1;if(!Q.value)return!0;if(X.value=`saving`,await Dt(!1))return Ee.value=Date.now(),X.value=`saved`,setTimeout(()=>{X.value===`saved`&&Date.now()-Ee.value>=4e3&&(X.value=`idle`)},4e3),!0;X.value=`error`;let e=Date.now();return setTimeout(()=>{X.value===`error`&&Date.now()-e>=4e3&&(X.value=`idle`)},4e3),!1}R(()=>B.value?{id:B.value.id,title:B.value.title,desc:B.value.desc}:null,(e,t)=>{e&&t&&e.id===t.id&&(Oe!==null&&clearTimeout(Oe),Oe=window.setTimeout(()=>{Le()},1500))},{deep:!0}),R(I,async(e,t)=>{ke(),B.value&&Q.value&&await Le()}),R(T,async e=>{if(!e.path)return;let t=$(e.path),n=B.value;n&&n.projectPath&&$(n.projectPath)!==t&&await P()});function Re(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function ze(){B.value&&Q.value&&!Ae(B.value)&&Re(B.value)}let Be=K(!1);async function He(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 Ue=K(null),We=K(null);async function Ge(e){if(e){if(!await He((e.title||``).trim()||Z(`@WORKBENCH:未命名任务`))){L.error(Z(`@WORKBENCH:复制失败`));return}Ue.value=e.id,L.success(Z(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{Ue.value===e.id&&(Ue.value=null)},1500)}}async function Ke(e){if(!e)return;let t=(e.desc||``).trim();if(!t){L.warning(Z(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await He(t)){L.error(Z(`@WORKBENCH:复制失败`));return}We.value=e.id,L.success(Z(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{We.value===e.id&&(We.value=null)},1500)}let{simpleConversationMessages:Je,simpleAllJobsFor:Ye,simpleJobFor:Xe,simpleJobState:Ze}=mr(ee,B),Qe=K(null);function $e(e){let t=(e?.projectPath||``).trim().replace(/[\\/]+$/,``);return t?t.split(/[\\/]/).pop()||t:T.value.name||``}async function et(e){if(!e)return;let t=br(Ye(e),{title:e.title,projectName:$e(e)});if(!t){L.warning(Z(`@WORKBENCH:暂无执行内容可复制`));return}if(!await He(t)){L.error(Z(`@WORKBENCH:复制失败`));return}Qe.value=e.id,L.success(Z(`@WORKBENCH:已复制执行内容`)),window.setTimeout(()=>{Qe.value===e.id&&(Qe.value=null)},1500)}let tt=[`wheel`,`touchstart`,`pointerdown`,`keydown`],nt=K(null),rt=K(null),it=null,at=null,ot=null;function st(){if(it&&=(it.disconnect(),null),at!==null&&(clearTimeout(at),at=null),ot){for(let e of tt)ot.removeEventListener(e,st);ot=null}}function ct(){st();let e=nt.value;if(!e)return;e.scrollToBottom?.(!1);let t=rt.value?.querySelector(`.acu-message-list`);if(!(!t||typeof ResizeObserver>`u`)){ot=t;for(let e of tt)t.addEventListener(e,st,{passive:!0});it=new ResizeObserver(()=>nt.value?.scrollToBottom?.(!1)),it.observe(t),t.firstElementChild&&it.observe(t.firstElementChild),at=setTimeout(st,Od)}}let lt=r(()=>v.value&&B.value&&Ye(B.value).length>0?B.value.id:``);R(lt,async e=>{st(),e&&(await f(),ct())}),u(st);function ut(e){if(!e)return!1;let t=Xe(e);return!!t&&(t.status===`running`||t.status===`pending`)}let dt=r(()=>Ye(B.value).length>0),ft=r(()=>ut(B.value)),pt=r(()=>B.value?ft.value?Z(`@WORKBENCH:正在执行中,请先「停止」再重新执行`):dt.value?Z(`@WORKBENCH:重新跑一轮:上一轮的执行记录会被清空`):``:``),mt=r(()=>{let e=B.value;if(!e)return[];let t=e.promptParts;if(t&&(t.global||t.project)){let e=[];return t.global&&e.push({key:`global`,label:Z(`@WORKBENCH:全局提示词`),text:t.global}),t.project&&e.push({key:`project`,label:Z(`@WORKBENCH:项目提示词`),text:t.project}),e}let n=(e.simpleOverride||``).trim();return n?[{key:`legacy`,label:Z(`@WORKBENCH:提示词`),text:n}]:[]}),ht=K(!1),_t=K(null),vt=K(null);function yt(e){let t=e?.currentTarget||vt.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?jd:Ad,r=Math.min(Math.max(t.scrollHeight,kd),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}R(Be,async e=>{e&&(await f(),yt())}),R(()=>B.value?.id,async()=>{Be.value&&(await f(),yt())});async function xt(){if(ht.value)return;ht.value=!0;let e={title:``,desc:``};T.value.path&&(e.projectPath=T.value.path);try{let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());if(!t.success){L.error(t.error||Z(`@WORKBENCH:保存失败`));return}ke(),B.value&&Ae(B.value)?await Fe(B.value):B.value&&Q.value&&await Le(),await P(),t.task?.id&&(I.value=t.task.id,we(),L.success(Z(`@WORKBENCH:已新建任务`)),await f(),_t.value?.focus())}finally{ht.value=!1}}async function St(e){await _e.confirm(Z(`@WORKBENCH:删除任务「{title}」?`,{title:e.title}),Z(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),I.value===e.id&&(I.value=null),P()}async function Ct(e){let t=(e.title||Z(`@WORKBENCH:未命名任务`)).trim(),n={title:Z(`@WORKBENCH:{title} (副本)`,{title:t}),desc:e.desc||``,simpleOverride:e.simpleOverride||``};e.promptParts&&(e.promptParts.global||e.promptParts.project)&&(n.promptParts=e.promptParts),T.value.path&&(n.projectPath=T.value.path);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)}).then(e=>e.json());if(!e.success){L.error(e.error||Z(`@WORKBENCH:复制失败`));return}await P(),e.task?.id&&(I.value=e.task.id,we()),L.success(Z(`@WORKBENCH:已复制任务`))}catch(e){L.error(Z(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function wt(e){if(I.value===e.id)return;ke();let t=B.value;t&&Ae(t)?await Fe(t):t&&Q.value&&await Le(),I.value=e.id,we(),g($(T.value.path),e.id)}async function Tt(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=S.value.slice(),i=Et(S.value,t,n);if(i!==S.value){S.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:Z(`@WORKBENCH:排序保存失败`)}));e?.success||(S.value=r,L.error(e?.error||Z(`@WORKBENCH:排序保存失败`)))}catch(e){S.value=r,L.error(Z(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function Et(e,t,n){let r=e=>$(e)||Cd,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 Dt(e){if(!B.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(B.value)}).then(e=>e.json());return t.success?(e&&L.success(Z(`@WORKBENCH:已保存`)),await le(),!0):(L.error(t.error||Z(`@WORKBENCH:保存失败`)),!1)}me(async()=>{await Promise.all([P(),ae(),oe()]),await Ie(),te(),window.addEventListener(`beforeunload`,ze),i.fetchExecutorModels()}),u(()=>{ne(),window.removeEventListener(`beforeunload`,ze),B.value&&Q.value&&!Ae(B.value)&&Re(B.value)});let{pasteHoverId:Ot,isUploading:kt,isImageAttachment:At,humanSize:jt,onAttachmentPaste:Mt,onAttachmentDrop:Nt,uploadAttachment:Pt,removeAttachment:Ft,pickAttachmentFile:It}=dr(),{runTask:Lt,onContinueSendFromChat:Rt,cancelJob:zt,clearExecutionForSelectedTask:Bt}=xr(ee,S,B,{clearJobsByTask:se,persistTask:Dt,uploadAttachment:Pt,getExecutor:()=>Vt.value}),{active:Vt,availability:Ht,hasAnyExecutor:Ut,choose:Wt,executorModelText:Gt,executorModelTitle:Kt}=Sr();function qt(e){return Me(e)}let Jt=r(()=>Ye(B.value).slice(-1)[0]),Yt=r(()=>Me(Jt.value?.agent)),Xt=r(()=>bt(Jt.value?.agent));return(e,r)=>{let i=h,u=n,f=be,p=C;return O(),a(`div`,Cu,[_(Su,{"opened-task-id":b.value,onOpenTask:x,onBoardTasks:r[0]||=e=>fe.value=e},null,8,[`opened-task-id`]),_(Pe,{modelValue:v.value,"onUpdate:modelValue":r[23]||=e=>v.value=e,title:J(Z)(`@WORKBENCH:任务执行`),type:`flex`,"height-mode":`fixed`,"height-offset":`88px`,top:`2vh`,width:`min(1520px, 96vw)`},{default:V(()=>[q(`div`,wu,[q(`div`,Tu,[q(`button`,{type:`button`,class:`wb-back-btn`,title:J(Z)(`@WORKBENCH:返回看板`),onClick:y},[_(i,{class:`wb-back-btn__icon`},{default:V(()=>[_(J(re))]),_:1}),q(`span`,null,E(J(Z)(`@WORKBENCH:返回看板`)),1)],8,Eu),q(`span`,{class:`wb-editor-bar__project`,title:J(T).path},E(J(T).name),9,Du),Se.value?(O(),a(`span`,{key:0,class:`wb-editor-bar__repo`,title:Se.value.path},E(J(Z)(`@WORKBENCH:执行于 {name}`,{name:Se.value.name})),9,Ou)):o(``,!0),ge.value||ye.value?(O(),a(`span`,ku,[ge.value?(O(),a(`span`,{key:0,class:`wb-editor-bar__ago`,title:xe.value},E(ge.value),9,Au)):o(``,!0),ge.value&&ye.value?(O(),a(`span`,ju,`·`)):o(``,!0),ye.value?(O(),a(`span`,Mu,E(ye.value),1)):o(``,!0)])):o(``,!0),q(`span`,Nu,E(J(Z)(`@WORKBENCH:任务执行`)),1)]),q(`div`,Pu,[_(Yr,{style:he({width:s.value+`px`}),tasks:J(S),"selected-task-id":I.value,"current-project":J(T),"creating-task":ht.value,"is-task-running":ut,onSelectTask:wt,onDeleteTask:St,onCopyTask:Ct,onCreateTask:xt,onReorderTasks:Tt},null,8,[`style`,`tasks`,`selected-task-id`,`current-project`,`creating-task`]),q(`div`,{class:`wb-splitter`,role:`separator`,tabindex:`0`,"aria-orientation":`vertical`,"aria-label":J(Z)(`@WORKBENCH:拖动调整侧边栏宽度`),"aria-valuenow":s.value,"aria-valuemin":Td,"aria-valuemax":Ed,title:J(Z)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:c,onKeydown:[r[1]||=A(G(e=>l(-16),[`prevent`]),[`left`]),r[2]||=A(G(e=>l(16),[`prevent`]),[`right`])]},null,40,Fu),q(`section`,Iu,[B.value?(O(),a(Y,{key:1},[q(`div`,Ru,[q(`div`,zu,[U(q(`input`,{ref_key:`titleInputRef`,ref:_t,class:`wb-input wb-input--title`,"onUpdate:modelValue":r[3]||=e=>B.value.title=e,placeholder:J(Z)(`@WORKBENCH:任务标题`),"aria-label":J(Z)(`@WORKBENCH:任务标题`)},null,8,Bu),[[ue,B.value.title]]),q(`button`,{type:`button`,class:d([`wb-copy-btn`,{"is-flash":Ue.value===B.value.id}]),title:J(Z)(`@WORKBENCH:复制任务标题`),"aria-label":J(Z)(`@WORKBENCH:复制任务标题`),onClick:r[4]||=e=>Ge(B.value)},[Ue.value===B.value.id?(O(),w(i,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:V(()=>[...r[25]||=[z(`✓`,-1)]]),_:1})):(O(),w(i,{key:0,class:`wb-copy-btn__icon`},{default:V(()=>[_(J(j))]),_:1}))],10,Vu)]),X.value!==`idle`||Q.value?(O(),a(`span`,{key:0,class:d([`wb-meta-save`,{"is-saving":X.value===`saving`,"is-saved":X.value===`saved`,"is-error":X.value===`error`,"is-dirty":Q.value&&X.value===`idle`}]),title:X.value===`saving`?J(Z)(`@WORKBENCH:保存中…`):X.value===`error`?J(Z)(`@WORKBENCH:保存失败`):X.value===`saved`?J(Z)(`@WORKBENCH:已保存`):``},[X.value===`saving`?(O(),a(`span`,Uu)):X.value===`saved`?(O(),a(`span`,Wu,`✓`)):X.value===`error`?(O(),a(`span`,Gu,`!`)):(O(),a(`span`,Ku)),z(` `+E(X.value===`saving`?J(Z)(`@WORKBENCH:保存中…`):X.value===`saved`?J(Z)(`@WORKBENCH:已保存`):X.value===`error`?J(Z)(`@WORKBENCH:保存失败`):J(Z)(`@WORKBENCH:有未保存的更改`)),1)],10,Hu)):o(``,!0),J(Ut)?(O(),w(p,{key:1,"split-button":``,type:`primary`,class:`wb-executor-split`,trigger:`click`,disabled:ft.value,title:pt.value,onClick:r[5]||=e=>J(Lt)(B.value),onCommand:J(Wt)},{dropdown:V(()=>[_(f,null,{default:V(()=>[(O(!0),a(Y,null,k(J(je),e=>(O(),w(u,{key:e.id,command:e.id,disabled:!J(Ht)[e.id]},{default:V(()=>[q(`span`,Ju,[_(Ve,{executor:e.id,class:`wb-executor-item__icon`},null,8,[`executor`]),q(`span`,Yu,E(e.name),1),J(Gt)(e.id)?(O(),a(`span`,{key:0,class:`wb-executor-item__model`,title:J(Kt)(e.id)},E(J(Gt)(e.id)),9,Xu)):o(``,!0),J(Vt)===e.id?(O(),w(i,{key:1,class:`wb-executor-item__check`},{default:V(()=>[_(J(W))]),_:1})):J(Ht)[e.id]?o(``,!0):(O(),a(`span`,Zu,E(J(Z)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:V(()=>[z(E(dt.value?J(Z)(`@WORKBENCH:重新执行任务`):J(Z)(`@WORKBENCH:执行任务`))+` `,1),q(`span`,{class:`wb-executor-split__hint`,title:J(Kt)(J(Vt))},[_(Ve,{executor:J(Vt),class:`wb-executor-split__hint-icon`},null,8,[`executor`]),z(` `+E(qt(J(Vt))),1)],8,qu)]),_:1},8,[`disabled`,`title`,`onCommand`])):(O(),a(`div`,Qu,[_(i,{class:`wb-no-claude-hint__icon`},{default:V(()=>[_(J(ve))]),_:1}),q(`span`,$u,E(J(Z)(`@WORKBENCH:未检测到本地 claude / opencode,无法执行任务`)),1),q(`a`,ed,E(J(Z)(`@WORKBENCH:查看安装指引`)),1)])),q(`button`,{type:`button`,class:d([`wb-logs-inline-btn wb-logs-inline-btn--copy`,{"is-flash":Qe.value===B.value.id}]),title:J(Z)(`@WORKBENCH:复制本任务的全部执行对话(提示词 / 思考 / 工具调用 / 模型返回)`),"aria-label":J(Z)(`@WORKBENCH:复制执行内容`),onClick:r[6]||=e=>et(B.value)},[Qe.value===B.value.id?(O(),w(i,{key:1,class:`wb-logs-inline-btn__icon`},{default:V(()=>[...r[26]||=[z(`✓`,-1)]]),_:1})):(O(),w(i,{key:0,class:`wb-logs-inline-btn__icon`},{default:V(()=>[_(J(j))]),_:1})),q(`span`,null,E(J(Z)(`@WORKBENCH:复制执行内容`)),1)],10,td),q(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:J(Z)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":J(Z)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:r[7]||=(...e)=>J(Bt)&&J(Bt)(...e)},[_(i,{class:`wb-logs-inline-btn__icon`},{default:V(()=>[_(J(de))]),_:1}),q(`span`,null,E(J(Z)(`@WORKBENCH:清空执行`)),1)],8,nd),q(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:J(Z)(`@WORKBENCH:执行日志`),"aria-label":J(Z)(`@WORKBENCH:执行日志`),onClick:r[8]||=e=>F.value=!0},[_(i,{class:`wb-logs-inline-btn__icon`},{default:V(()=>[_(J(pe))]),_:1}),q(`span`,null,E(J(Z)(`@WORKBENCH:执行日志`)),1)],8,rd)]),q(`details`,{class:`wb-task-desc`,open:Be.value,onToggle:r[20]||=e=>Be.value=e.target.open},[q(`summary`,ad,[_(i,{class:`wb-task-desc__caret`},{default:V(()=>[(O(),w(N(Be.value?J(D):J(ie))))]),_:1}),q(`span`,od,E(J(Z)(`@WORKBENCH:任务描述(可选)`)),1),q(`button`,{type:`button`,class:d([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":We.value===B.value.id}]),title:B.value.desc&&B.value.desc.trim()?J(Z)(`@WORKBENCH:复制任务描述`):J(Z)(`@WORKBENCH:任务描述为空,无需复制`),"aria-label":J(Z)(`@WORKBENCH:复制任务描述`),onClick:r[9]||=G(e=>Ke(B.value),[`stop`,`prevent`])},[We.value===B.value.id?(O(),w(i,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:V(()=>[...r[27]||=[z(`✓`,-1)]]),_:1})):(O(),w(i,{key:0,class:`wb-copy-btn__icon`},{default:V(()=>[_(J(j))]),_:1}))],10,sd),B.value.desc&&B.value.desc.length>0||B.value.attachments&&B.value.attachments.length>0?(O(),a(`span`,cd,[B.value.desc&&B.value.desc.length>0?(O(),a(`span`,ld,E(J(Z)(`@WORKBENCH:已填写`)),1)):o(``,!0),B.value.attachments&&B.value.attachments.length>0?(O(),a(`span`,ud,E(B.value.attachments.length),1)):o(``,!0)])):o(``,!0)]),U(q(`textarea`,{ref_key:`taskDescTextareaRef`,ref:vt,class:`wb-textarea wb-textarea--autogrow`,"onUpdate:modelValue":r[10]||=e=>B.value.desc=e,placeholder:J(Z)(`@WORKBENCH:任务描述(可选)`),"aria-label":J(Z)(`@WORKBENCH:任务描述(可选)`),onInput:r[11]||=e=>yt(e),onFocus:r[12]||=e=>yt(e),onBlur:r[13]||=e=>yt(e),onPaste:r[14]||=e=>J(Mt)(e,{kind:`task`,task:B.value})},null,40,dd),[[ue,B.value.desc]]),_(gt,{attachments:B.value.attachments||[],"is-image":J(At),"human-size":J(jt),"is-uploading":J(kt)(`task-`+B.value.id),"is-paste-hover":J(Ot)===`task-`+B.value.id,"on-pick":()=>J(It)({kind:`task`,task:B.value}),"on-remove":e=>J(Ft)({kind:`task`,task:B.value},e),onPaste:r[15]||=e=>J(Mt)(e,{kind:`task`,task:B.value}),onDrop:r[16]||=G(e=>J(Nt)(e,{kind:`task`,task:B.value}),[`prevent`]),onDragover:r[17]||=G(e=>Ot.value=`task-`+B.value.id,[`prevent`]),onDragenter:r[18]||=G(e=>Ot.value=`task-`+B.value.id,[`prevent`]),onDragleave:r[19]||=e=>Ot.value=J(Ot)===`task-`+B.value.id?null:J(Ot)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,id),q(`div`,fd,[q(`div`,pd,[q(`details`,{class:d([`wb-task-prompt`,{"has-content":mt.value.length>0}])},[q(`summary`,md,[_(i,{class:`wb-task-prompt__caret`},{default:V(()=>[_(J(ie))]),_:1}),q(`span`,null,E(J(Z)(`@WORKBENCH:提示词`)),1),mt.value.length>0?(O(),a(`span`,hd,E(J(Z)(`@WORKBENCH:已填写`)),1)):o(``,!0),J(Ze)(J(Xe)(B.value))===`running`&&J(Xe)(B.value)?(O(),a(`button`,{key:1,class:`wb-simple__stop`,onClick:r[21]||=G(e=>J(zt)(J(Xe)(B.value)),[`stop`])},E(J(Z)(`@WORKBENCH:停止`)),1)):o(``,!0)]),mt.value.length>0?(O(),a(`div`,gd,[(O(!0),a(Y,null,k(mt.value,e=>(O(),a(`div`,{key:e.key,class:`wb-task-prompt__part`},[q(`div`,_d,E(e.label),1),q(`pre`,vd,E(e.text),1)]))),128))])):(O(),a(`p`,yd,E(J(Z)(`@WORKBENCH:这条任务没有附加提示词`)),1))],2),J(Ye)(B.value).length>0?(O(),a(`div`,{key:0,class:`wb-simple-chat-wrap`,ref_key:`chatWrapRef`,ref:rt},[q(`div`,bd,[(O(),w(J(Te),{ref_key:`chatRef`,ref:nt,key:B.value.id,messages:J(Je),"assistant-name":Yt.value,"assistant-avatar":Xt.value,"show-avatar":!0,theme:J(t).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:J(Z)(`@AGENT:计划`),raw:J(Z)(`@AGENT:原始参数`)}},"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`]))]),J(Xe)(B.value)&&[`done`,`error`,`cancelled`].includes(J(Ze)(J(Xe)(B.value)))?(O(),a(`div`,xd,[(O(),w(J(De),{key:`input-`+B.value.id,placeholder:J(Z)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:J(nr),multiple:!0,maxCount:0,maxSize:J(rr)},class:`wb-simple-chat__input`,onSend:r[22]||=e=>J(Rt)(B.value,e)},null,8,[`placeholder`,`upload-config`]))])):o(``,!0)],512)):o(``,!0)])])],64)):(O(),a(`div`,Lu,[q(`p`,null,E(J(Z)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])])]),_:1},8,[`modelValue`,`title`]),_(Pe,{modelValue:F.value,"onUpdate:modelValue":r[24]||=e=>F.value=e,title:J(Z)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,type:`flex`,"custom-class":`wb-logs-dialog`,"append-to-body":``},{default:V(()=>[_(Bn)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-b06be1b7`]]);export{Md as default};
@@ -1,7 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Rn as t,dr as n,gr as r,i,r as a,vr as o}from"./element-plus-DrCk0pcV.js";import{c as s,l as c,o as l,s as u}from"./vendor-yntih_em.js";import{n as d}from"./_plugin-vue_export-helper-DO_hkLgw.js";import{a as f,i as p,t as m}from"./configStore-7LTPR6P8.js";import{f as h,g,h as _,n as v,t as y}from"./index-Czdu1C9o.js";function b(e,t=200){let n=typeof e==`string`?e:``;if(!n.trim())return``;let r=n.split(`
2
- `).map(e=>e.trim()).filter(Boolean),i=(r.length?r[r.length-1]:``).replace(/\s+/g,` `);return i.length>t?`${i.slice(0,t-1)}…`:i}function x(e){return d(e===`done`?`@AGENT:对话已完成`:`@AGENT:对话出错`)}function S(e){let t={page:!1,browser:!1,sound:!1};try{let e=m();t.page=!!e.notifyPageOnTaskDone,t.browser=!!e.notifyBrowserOnTaskDone,t.sound=!!e.notifySoundOnTaskDone}catch{}if(!y(t))return!1;let n=String(e.title||``).trim()||d(`@AGENT:无标题`),r=b(e.detail),a=e.tag||`zen-gitsync-agent`,o=r?`${n}\n${r}`:n;return t.sound&&v(e.kind),g(t)&&_({title:x(e.kind),body:o,tag:a})||!t.page||e.alreadyToast||(e.kind===`done`?i.success(d(`@AGENT:对话完成:{name}`,{name:n})):i.error(d(`@AGENT:对话出错:{name}`,{name:n}))),!0}var C=`g ai`,w=`g-ai`,T=[{id:`gai`,name:C},...p.map(e=>({id:e.id,name:e.name}))],E=`zen-gitsync-agent-engine`;function D(e){return e===`gai`||f(e)}function O(e){return T.find(t=>t.id===e)?.name||`g ai`}function k(e){return f(e)}function A(){try{let e=localStorage.getItem(E);if(D(e))return e}catch{}return`gai`}function j(e){try{localStorage.setItem(E,e)}catch{}}t(),n();var M=[`image/*`,`.pdf`,`.txt`,`.md`,`.json`,`.csv`,`.log`,`.yml`,`.yaml`,`.xml`,`.toml`,`.ini`,`.html`,`.css`,`.js`,`.ts`,`.tsx`,`.vue`,`.py`,`.java`,`.go`,`.rs`,`.sql`,`.sh`].join(`,`),N=65536,P=`local-`,F=0;function I(e){if(!e||!Array.isArray(e.messages))return[];let t=[],n=e.messages.length;for(let r=0;r<n;r++){let i=e.messages[r];if(i.role!==`system`){if(i.role===`user`){let e=``,n;if(typeof i.content==`string`)e=i.content;else if(Array.isArray(i.content)){e=i.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(` `);let t=i.content.filter(e=>e?.type===`image_url`&&typeof e.image_url?.url==`string`).map((e,t)=>({id:`att-${r}-${t}`,name:`image`,size:0,type:z(e.image_url?.url||``)||`image/*`,preview:e.image_url?.url}));t.length>0&&(n=t)}(e||n)&&t.push({id:`msg-${r}`,role:`user`,content:e,attachments:n,status:`done`,createdAt:Date.now()})}else if(i.role===`assistant`){let i=`msg-${r}`,a=``,o=[],c=r;for(;c<n;){let t=e.messages[c];if(t.role!==`assistant`&&t.role!==`tool`)break;if(t.role===`assistant`){if(typeof t.content==`string`&&(a+=t.content),t.tool_calls&&t.tool_calls.length>0)for(let e of t.tool_calls)o.push({id:e.id||e.function?.name||s(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:L(e.function?.name||``,e.function?.arguments||``),status:`done`,result:``})}else{let e=t.tool_call_id||t.name||``,n=o.find(t=>t.id===e);if(n){let e;e=typeof t.content==`string`?t.content:Array.isArray(t.content)&&t.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(`
3
- `)||`(non-text result)`,e.length>N&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}c++}r=c-1,a.length>N&&(a=`…(前文已截断)\n${a.slice(-65536)}`);let l=!!a,u=o.length>0;(l||u)&&t.push({id:i,role:`assistant`,content:a,toolCalls:u?o:void 0,status:`done`,createdAt:Date.now()})}}}return t}function L(e,t){try{let n=JSON.parse(t);switch(e){case`run_command`:return String(n.command||``).slice(0,200);case`read_file`:case`write_file`:case`edit_file`:return String(n.path||``);case`list_files`:return String(n.path||`.`);case`search_text`:return String(n.pattern||``);case`update_plan`:{let e=l(t,`update_plan`);if(!e)return``;let{total:r,done:i}=c(e),a=String(n.explanation||``).replace(/\s+/g,` `).trim();return[`${i}/${r}`,a].filter(Boolean).join(` — `).slice(0,200)}default:return JSON.stringify(n).slice(0,200)}}catch{return t.slice(0,200)}}function R(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result||``)),r.onerror=()=>n(r.error||Error(`FileReader failed`)),r.readAsDataURL(e)})}function z(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function B(){let t=m(),n=h(),c=++F,l=o([]),f=o(!1),p=o(A());function g(e){D(e)&&(p.value=e,j(e))}let _=r(new Map),v=o(null),y=o(!1),b=0,x=0,C=new Set;function w(e){return{key:e,sessionId:e.startsWith(P)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1}}function T(e){let t=_.get(e);return t||=(_.set(e,w(e)),_.get(e)),t}let E=e(()=>v.value?_.get(v.value)??null:null),O=e(()=>E.value?.messages??[]),k=e(()=>E.value?.isStreaming??!1),M=e(()=>{let e=l.value.find(e=>e.sessionId===v.value);return D(e?.engine)?e.engine:p.value}),L=e(()=>l.value.some(e=>e.sessionId===v.value)),z=e(()=>E.value?.pendingQuestion??null),B=e(()=>E.value?.answeringQuestion??!1);function V(e){return!!_.get(e)?.isStreaming}function H(e){let n=[...e];for(let e of _.values()){if(!e.sessionId)continue;let r=n.findIndex(t=>t.sessionId===e.sessionId);if(r!==-1){C.delete(e.sessionId),e.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!e.isStreaming&&!C.has(e.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:e.sessionId,title:e.title||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:p.value,createdAt:i,updatedAt:i,messageCount:e.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:e.isStreaming})}return n}async function U(){let e=++b,n=t.currentDirectory||``;if(!n){l.value=[],f.value=!1;return}f.value=!0;try{let t=`/api/agent/sessions?cwd=${encodeURIComponent(n)}`,r=await fetch(t).then(e=>e.json());if(e!==b)return;if(!r.success){i.error(r.error||d(`@AGENT:加载会话列表失败`));return}let a=Array.isArray(r.sessions)?r.sessions:[];l.value=H(a)}catch(t){if(e!==b)return;i.error(d(`@AGENT:加载会话列表失败`)+`: `+(t?.message||t))}finally{e===b&&(f.value=!1)}}function W(e,n){let r=new Date().toISOString(),i=l.value.find(t=>t.sessionId===e);if(i){i.isGenerating=!0,i.updatedAt=r;return}l.value=[{sessionId:e,title:n||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:p.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...l.value]}function G(e){let t=l.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function K(e){if(_.get(e)?.isStreaming){v.value=e;return}y.value=!0,v.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){i.error(t.error||d(`@AGENT:加载会话失败`));return}let n=T(e);n.sessionId=e,n.messages=I(t.session),t.session?.title&&(n.title=t.session.title)}catch(e){i.error(d(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{y.value=!1}}async function q(e){try{await a.confirm(d(`@AGENT:确认删除该会话`),d(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=_.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}_.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){i.error(t.error||d(`@AGENT:删除失败`));return}l.value=l.value.filter(t=>t.sessionId!==e),v.value===e&&(v.value=null),i.success(d(`@AGENT:已删除`))}catch(e){i.error(d(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function J(e,t){try{let n=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})}).then(e=>e.json());if(!n.success){i.error(n.error||d(`@AGENT:重命名失败`));return}let r=l.value.find(t=>t.sessionId===e);r&&(r.title=t);let a=_.get(e);a&&(a.title=t),i.success(d(`@AGENT:已重命名`))}catch(e){i.error(d(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function Y(){v.value=null}async function X(e,a=[],o={}){let l=a.filter(e=>e?.file?.type?.startsWith(`image/`)),f=a.filter(e=>!e?.file?.type?.startsWith(`image/`)),p=[],m=0;for(let e of f){let t=e.file.size||0;if(!(t>10485760)){if(p.length>=10||m+t>20971520)break;m+=t,p.push(e)}}let h=f.filter(e=>!p.includes(e));h.length>0&&i.warning(`${d(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${h.map(e=>e.file.name).join(`、`)}`);let g=v.value||`${P}${Date.now()}-${++x}`,y=T(g);if(!e.trim()&&l.length===0&&p.length===0||y.isStreaming)return;let b=(await Promise.allSettled(l.map(e=>R(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),w=(await Promise.allSettled(p.map(async e=>({name:e.file.name||`file`,dataUrl:await R(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));v.value=y.key,y.nonce+=1;let E=y.nonce;y.abortController=new AbortController;let D=y.abortController;y.pendingQuestion=null,y.answeringQuestion=!1;let O={id:s(),role:`user`,content:e,status:`done`,createdAt:Date.now()},k=[...l,...p];k.length>0&&(O.attachments=k.map(e=>({id:e.id,name:e.file.name||`image`,size:e.file.size||0,type:e.file.type||``,preview:e.preview}))),y.messages.push(O);let A=r({id:s(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});y.messages.push(A),y.isStreaming=!0;let j=`${c}:${g}:${E}`;n.begin(j);let F=[],I=y.sessionId,L=!1;try{let n=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({sessionId:y.sessionId||``,userMessage:e,cwd:t.currentDirectory||``,engine:o.engine??M.value,...b.length>0?{images:b}:{},...w.length>0?{attachments:w}:{},...o.openFilePath?{openFilePath:o.openFilePath}:{},...o.dirStatus?.length?{dirStatus:o.dirStatus}:{},...o.dirSummary?{dirSummary:o.dirSummary}:{},...o.allowDispatch?{allowDispatch:!0,dispatchExecutor:o.dispatchExecutor||``,dispatchUseDefaultPrompt:o.dispatchUseDefaultPrompt!==!1}:{}}),signal:D.signal});if(E!==y.nonce)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let i=n.body.getReader(),a=new TextDecoder(`utf-8`),c=``;for(;;){let{value:t,done:n}=await i.read();if(E!==y.nonce)return;if(n)break;c+=a.decode(t,{stream:!0});let o=c.split(`
4
- `);c=o.pop()??``;for(let t of o){let n=t.trim();if(!n.startsWith(`data:`))continue;let i=n.slice(5).trim();if(!i)continue;let a;try{a=JSON.parse(i)}catch{continue}switch(a.type){case`meta`:if(a.sessionId){let t=String(a.sessionId);if(I=t,y.sessionId!==t){let e=y.key;y.sessionId=t,y.key=t,e!==t&&(_.delete(e),_.set(t,y),v.value===e&&(v.value=t))}let n=String(a.title||``).trim()||e.trim().split(`
5
- `)[0].trim().slice(0,40)||d(`@AGENT:无标题`);y.title||=n,W(t,n)}break;case`thinking`:A.reasoning||(A.reasoning=``,A.reasoningStatus=`streaming`),A.reasoning+=String(a.delta||``),A.status=`streaming`;break;case`content`:A.status===`pending`&&(A.status=`streaming`);{let e=String(a.delta||``);A.content+=e;let t=u(A.content);t.reasoning&&(A.reasoning||(A.reasoning=``,A.reasoningStatus=`streaming`),A.reasoning=t.reasoning,A.content=t.content)}break;case`tool_call_start`:{let e=r({id:a.toolCallId||s(),name:a.name||``,argsPreview:a.argsPreview||``,arguments:a.arguments||a.argsPreview||``,status:`running`,result:``});F.push(e),A.toolCalls||=[],A.toolCalls.push(e),A.status===`pending`&&(A.status=`streaming`);break}case`tool_output`:{let e=F.find(e=>e.id===a.toolCallId);if(e){let t=`${e.result||``}${String(a.chunk||``)}`;e.result=t.length>N?`…(前文已截断)\n${t.slice(-65536)}`:t}break}case`tool_result`:{let e=F.find(e=>e.id===a.toolCallId);e&&(e.result=String(a.result||``),e.status=`done`,e.name===`ask_user`&&(y.pendingQuestion=null));break}case`ask_user`:y.pendingQuestion={interactionId:String(a.interactionId||``),question:String(a.question||``),options:Array.isArray(a.options)?a.options.map(e=>String(e)):[],allowFreeText:a.allowFreeText!==!1,multiple:a.multiple===!0};break;case`done`:{let e=a.content||A.content,t=u(e);t.reasoning&&!A.reasoning&&(A.reasoning=t.reasoning),A.content=t.content,A.status=`done`,A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`);break}case`error`:A.status=`error`,A.error=String(a.error||d(`@AGENT:未知错误`)),A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`)}}}if(E!==y.nonce)return;A.status===`pending`&&(A.status=`done`)}catch(e){if(E!==y.nonce)return;e?.name===`AbortError`||D.signal.aborted?(L=!0,A.content=(A.content||``)+`
6
-
7
- [`+d(`@AGENT:已停止`)+`]`,A.status=`done`,A.reasoningStatus===`streaming`&&(A.reasoningStatus=`done`)):(A.status=`error`,A.error=e?.message||String(e),i.error(A.error||d(`@AGENT:对话失败`)))}finally{let e=!!y.pendingQuestion,t=A.status===`error`?`error`:`done`;n.end(j),E===y.nonce&&(y.isStreaming=!1,y.pendingQuestion=null,y.answeringQuestion=!1,y.abortController=null,!L&&!e&&S({kind:t,title:y.title,detail:t===`error`&&A.error||A.content,tag:`zen-gitsync-agent-${I||y.key}`,alreadyToast:t===`error`})),I&&(L&&C.add(I),G(I)),U().catch(()=>{})}}async function Z(e){let t=E.value,n=t?.pendingQuestion,r=t?.sessionId,a=(Array.isArray(e)?e:[e]).map(e=>String(e??``).trim()).filter(Boolean);if(!t||!n||!r||!a.length||t.answeringQuestion)return!1;t.answeringQuestion=!0;try{let e=await fetch(`/api/agent/respond`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:r,interactionId:n.interactionId,answer:n.multiple?a:a[0]})}).then(e=>e.json());if(!e.success)throw Error(e.error||d(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return i.error(e?.message||d(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function Q(){let e=E.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:l,sessionsLoading:f,currentSessionId:v,messages:O,isStreaming:k,sessionLoading:y,pendingQuestion:z,answeringQuestion:B,isSessionGenerating:V,currentEngine:M,pendingEngine:p,isEngineLocked:L,pickEngine:g,loadSessions:U,loadSession:K,deleteSession:q,renameSession:J,newSession:Y,sendMessage:X,answerQuestion:Z,stop:Q}}var V=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20fill='none'%3e%3crect%20x='2'%20y='6'%20width='27'%20height='23'%20rx='6'%20fill='%235364E8'/%3e%3cpath%20d='M9.419%2012.581a1.3%201.3%200%200%200-1.838%201.838L11.162%2018l-3.581%203.581a1.3%201.3%200%200%200%201.838%201.838l4.5-4.5a1.3%201.3%200%200%200%200-1.838Z'%20fill='%23FFFFFF'/%3e%3crect%20x='15.7'%20y='21.2'%20width='7.6'%20height='2.6'%20rx='1.3'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%20.4%2027.115%204.885%2031.6%207l-4.485%202.115L25%2013.6l-2.115-4.485L18.4%207l4.485-2.115Z'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%202.5%2026.22%205.78%2029.5%207l-3.28%201.22L25%2011.5l-1.22-3.28L20.5%207l3.28-1.22Z'%20fill='%2339D7B5'/%3e%3c/svg%3e`;function H(e){if(!e)return``;try{let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=new Date,r=n.getTime()-t.getTime(),i=e=>String(e).padStart(2,`0`);if(t.toDateString()===n.toDateString())return`${i(t.getHours())}:${i(t.getMinutes())}`;if(r<6048e5){let e=Math.floor(r/864e5);return e===0?d(`@AGENT:今天`):`${e}${d(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function U(e,t){return e.map(e=>({id:e.sessionId,title:e.title||d(`@AGENT:无标题`),meta:`${H(e.updatedAt)} · ${e.messageCount??0} ${d(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?d(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function W(){return{newConversation:d(`@AGENT:新建会话`),searchPlaceholder:d(`@AGENT:搜索会话...`),empty:d(`@AGENT:暂无会话`),emptyHint:d(`@AGENT:点击上方按钮开始对话`),noResult:d(`@AGENT:未找到匹配的会话`),loading:d(`@AGENT:加载会话中...`),rename:d(`@AGENT:重命名`),delete:d(`@AGENT:删除`),untitled:d(`@AGENT:无标题`)}}var G=`g ai`,K=V;function q(){return{title:d(`@AGENT:等待你的回答`),placeholder:d(`@AGENT:输入回答`),submit:d(`@AGENT:提交回答`)}}export{U as a,T as c,k as d,q as i,w as l,G as n,M as o,W as r,B as s,K as t,O as u};