zen-gitsync 2.19.3 → 2.19.5

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 (71) hide show
  1. package/package.json +1 -1
  2. package/src/aiCommit.js +1 -28
  3. package/src/cli/ai/tools.js +35 -2
  4. package/src/cli/ai/tools.test.js +30 -0
  5. package/src/config.js +35 -3
  6. package/src/peer/store.js +17 -2
  7. package/src/ui/public/assets/AgentView-B4p1C7vE.js +15 -0
  8. package/src/ui/public/assets/{AgentView-DzYcmZ80.css → AgentView-BIehoDwa.css} +1 -1
  9. package/src/ui/public/assets/{AppVersionBadge-Clw0AO_V.js → AppVersionBadge-B-6BT87B.js} +2 -2
  10. package/src/ui/public/assets/{BranchSelector-WG_dzJ1z.js → BranchSelector-C1Kct7NG.js} +1 -1
  11. package/src/ui/public/assets/{CommitForm-Bai-xBwV.js → CommitForm-DoC-6rft.js} +2 -2
  12. package/src/ui/public/assets/{CommonDialog-DTWEVQih.js → CommonDialog-D8XaOcNX.js} +1 -1
  13. package/src/ui/public/assets/{EditorView-6KTavOcm.css → EditorView-B666I1pz.css} +1 -1
  14. package/src/ui/public/assets/EditorView-DrhO2YSI.js +1 -0
  15. package/src/ui/public/assets/{FlowExecutionViewer-D_rQjstg.js → FlowExecutionViewer-CKMH34Br.js} +1 -1
  16. package/src/ui/public/assets/{FlowOrchestrationWorkspace-B982yExF.js → FlowOrchestrationWorkspace-CAFDGDim.js} +1 -1
  17. package/src/ui/public/assets/{LogList-BG9RlR5V.js → LogList-DB6A2R6o.js} +3 -3
  18. package/src/ui/public/assets/{MindmapView-CfF3dnO9.js → MindmapView-C4L5u3S9.js} +1 -1
  19. package/src/ui/public/assets/{MonitorView-C6NkhaTu.js → MonitorView-BjUS__Ze.js} +1 -1
  20. package/src/ui/public/assets/ProjectManagerView-CWX1sSgn.js +1 -0
  21. package/src/ui/public/assets/{ProjectStartupButton-PZDHhzaY.js → ProjectStartupButton-DdMFVPYI.js} +1 -1
  22. package/src/ui/public/assets/{RemoteManagerDialog-CGbTl8Nf.js → RemoteManagerDialog-fSp9IiCs.js} +1 -1
  23. package/src/ui/public/assets/{RemoteRepoCard-DIbrkSSq.js → RemoteRepoCard-Bs01mtmx.js} +1 -1
  24. package/src/ui/public/assets/{SourceMapView-dmFzB7XF.js → SourceMapView-tdQu2qjL.js} +2 -2
  25. package/src/ui/public/assets/{SvgIcon-DqzYKNo_.js → SvgIcon-D5bT7QEj.js} +1 -1
  26. package/src/ui/public/assets/{UserInputNode-DzWmUMwd.js → UserInputNode-DbP3PjQX.js} +1 -1
  27. package/src/ui/public/assets/WorkbenchView-Ahoq6RyI.js +6 -0
  28. package/src/ui/public/assets/{WorkbenchView-sHes69m3.css → WorkbenchView-BcG-GrWp.css} +1 -1
  29. package/src/ui/public/assets/{_plugin-vue_export-helper-DlU9e1mk.js → _plugin-vue_export-helper-BRUY9DoQ.js} +3 -3
  30. package/src/ui/public/assets/clipboard-DTy2aO_N.js +1 -0
  31. package/src/ui/public/assets/{configStore-BNFH8Gjg.js → configStore-1qv5tdrb.js} +1 -1
  32. package/src/ui/public/assets/{dagre-DYyfV0Dg.js → dagre-DcqvOjeb.js} +3 -3
  33. package/src/ui/public/assets/{element-plus-CkMnLwcU.js → element-plus-D8LubGQe.js} +1 -1
  34. package/src/ui/public/assets/{flow-mindmap-DCYEzp78.js → flow-mindmap-DwG2RDXe.js} +1 -1
  35. package/src/ui/public/assets/index-C4masR7z.js +58 -0
  36. package/src/ui/public/assets/index-D9Bza0ac.css +1 -0
  37. package/src/ui/public/assets/{monaco-DpvA3Mh0.js → monaco-CuYd4DgX.js} +1 -1
  38. package/src/ui/public/assets/{office-docx-DoXwhA36.js → office-docx-C4TeE_9M.js} +1 -1
  39. package/src/ui/public/assets/{office-excel-B7HFZyu_.js → office-excel-C7zhprUF.js} +1 -1
  40. package/src/ui/public/assets/{office-pptx-3hKSBbWe.js → office-pptx-DYLwEk0L.js} +1 -1
  41. package/src/ui/public/assets/{relativeTime-DVKGdz_G.js → relativeTime-nh6F0rop.js} +1 -1
  42. package/src/ui/public/assets/taskExecutionExport-PEcuZQo1.js +15 -0
  43. package/src/ui/public/assets/useWorkbenchProjects-CDT0eWCI.js +1 -0
  44. package/src/ui/public/assets/{vendor-2SbNafIY.css → vendor-CHUY5AXG.css} +1 -1
  45. package/src/ui/public/assets/{vendor-LCbsk86d.js → vendor-CUQALT_x.js} +5 -5
  46. package/src/ui/public/assets/{vue-flow-D7nVv56X.js → vue-flow-BEVz6_7M.js} +1 -1
  47. package/src/ui/public/index.html +13 -13
  48. package/src/ui/server/routes/codeAnalysis.js +4 -2
  49. package/src/ui/server/routes/config.js +20 -27
  50. package/src/ui/server/routes/git/aiDiffSummary.js +3 -1
  51. package/src/ui/server/routes/npm.js +4 -44
  52. package/src/ui/server/routes/peerSettings.js +21 -2
  53. package/src/ui/server/routes/projectStartupAi.js +3 -1
  54. package/src/ui/server/routes/projectStartupAi.test.js +7 -4
  55. package/src/ui/server/routes/recentDirectoriesAiSummary.js +3 -1
  56. package/src/ui/server/routes/recentDirectoriesAiSummary.test.js +4 -2
  57. package/src/ui/server/routes/workbench/agentRoutes.js +6 -1
  58. package/src/ui/server/routes/workbench/agentRoutes.test.js +57 -0
  59. package/src/ui/server/routes/workbench/dispatchInstruction.js +4 -2
  60. package/src/ui/server/routes/workbench/imageDescribe.js +4 -2
  61. package/src/ui/server/routes/workbench/index.js +3 -1
  62. package/src/ui/server/routes/workbench/scheduler.js +3 -1
  63. package/src/utils/skipPatterns.js +74 -0
  64. package/src/ui/public/assets/AgentView-DdZB5M3K.js +0 -15
  65. package/src/ui/public/assets/EditorView-DYznT1et.js +0 -1
  66. package/src/ui/public/assets/ProjectManagerView-DfFtI8I9.js +0 -1
  67. package/src/ui/public/assets/WorkbenchView-oGjBJIT6.js +0 -6
  68. package/src/ui/public/assets/index-BVe9erMn.css +0 -1
  69. package/src/ui/public/assets/index-Bz3MwUuu.js +0 -58
  70. package/src/ui/public/assets/taskExecutionExport-0qwbiZRh.js +0 -15
  71. package/src/ui/public/assets/useWorkbenchProjects-flU0ll2K.js +0 -1
@@ -1 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Ar as t,Bn as n,Cn as r,Gn as i,Gr as a,In as o,Jr as s,Mn as c,On as ee,Sn as l,Sr as u,Tn as d,Un as f,Ur as p,W as m,Yn as h,_n as g,_r as te,ar as _,gn as ne,gr as v,hn as re,i as y,ir as ie,kn as b,ln as ae,lr as x,nr as S,on as C,pn as oe,qn as w,r as se,wn as T,xn as E,yn as ce}from"./element-plus-CkMnLwcU.js";import{n as D,t as O}from"./_plugin-vue_export-helper-DlU9e1mk.js";import{t as le}from"./SvgIcon-DqzYKNo_.js";import{t as ue}from"./configStore-BNFH8Gjg.js";import{a as de,c as fe,i as pe,n as me,o as he,r as ge,s as _e}from"./monaco-DpvA3Mh0.js";import{r as k,t as A}from"./flow-mindmap-DCYEzp78.js";import{_t as ve,ct as ye,dt as be,ft as xe,gt as j,ht as Se,lt as Ce,mt as we,pt as Te,s as Ee,st as De,ut as Oe,vt as ke,w as Ae}from"./index-Bz3MwUuu.js";function je(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`}o(),x(),t();var M=[`data-media-kind`,`data-media-path`],Me={class:`media-preview-stage`},Ne={key:0,class:`media-preview-error`},N={class:`media-preview-error-title`},Pe={class:`media-preview-error-path`},Fe=[`src`],P={key:1,class:`media-preview-audio`},Ie=[`title`],Le=[`src`],Re={key:2,class:`media-preview-loading`},ze={class:`media-preview-footer`},Be={class:`media-preview-meta`},Ve=[`title`],He=O(c({__name:`MediaPreview`,props:{filePath:{},fileName:{}},setup(e){let t=e,n=E(()=>Se(t.filePath)??`audio`),r=E(()=>j(t.filePath)),i=E(()=>t.fileName||t.filePath.split(/[\\/]/).pop()||``),a=v(!0),o=v(!1),c=v(0),f=v(0),p=v(0),m=v(0);async function h(){try{let e=await(await fetch(`/api/editor/file?path=${encodeURIComponent(t.filePath)}&meta=1`)).json();e?.success&&typeof e.size==`number`&&(f.value=e.size)}catch{}}S(()=>t.filePath,()=>{a.value=!0,o.value=!1,c.value=0,f.value=0,p.value=0,m.value=0,h()},{immediate:!0});function te(e){let t=e.target;Number.isFinite(t.duration)&&t.duration>0&&(c.value=t.duration),t instanceof HTMLVideoElement&&(p.value=t.videoWidth,m.value=t.videoHeight),a.value=!1}function _(){a.value=!1}function ne(){a.value=!1,o.value=!0}function re(e){if(!Number.isFinite(e)||e<=0)return`--:--`;let t=Math.floor(e),n=t%60,r=Math.floor(t/60)%60,i=Math.floor(t/3600),a=String(r).padStart(2,`0`);return i>0?`${i}:${a}:${String(n).padStart(2,`0`)}`:`${r}:${String(n).padStart(2,`0`)}`}function y(e){return!e||e<0?``:e>=1073741824?`${(e/1024/1024/1024).toFixed(2)} GB`:e>=1048576?`${(e/1024/1024).toFixed(1)} MB`:e>=1024?`${Math.round(e/1024)} KB`:`${e} B`}let ie=E(()=>{let e=[n.value===`video`?D(`@EDITOR:视频`):D(`@EDITOR:音频`)];c.value>0&&e.push(re(c.value)),p.value>0&&m.value>0&&e.push(`${p.value} × ${m.value}`);let t=y(f.value);return t&&e.push(t),e.join(` · `)});return(e,c)=>(w(),d(`div`,{class:`media-preview`,"data-media-kind":n.value,"data-media-path":t.filePath},[l(`div`,Me,[o.value?(w(),d(`div`,Ne,[c[0]||=l(`svg`,{viewBox:`0 0 24 24`,width:`40`,height:`40`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[l(`circle`,{cx:`12`,cy:`12`,r:`9`}),l(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`13`}),l(`line`,{x1:`12`,y1:`16.5`,x2:`12`,y2:`16.6`})],-1),l(`p`,N,s(u(D)(`@EDITOR:无法播放该文件,可能是编码或格式不受支持`)),1),l(`p`,Pe,s(t.filePath),1)])):(w(),d(g,{key:1},[n.value===`video`?(w(),d(`video`,{key:t.filePath,class:`media-preview-video`,src:r.value,controls:``,playsinline:``,preload:`metadata`,onLoadedmetadata:te,onCanplay:_,onError:ne},null,40,Fe)):(w(),d(`div`,P,[c[1]||=ee(`<div class="media-preview-glyph" aria-hidden="true" data-v-f05d705f><svg viewBox="0 0 24 24" width="46" height="46" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-v-f05d705f><path d="M3 17a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" data-v-f05d705f></path><path d="M9 17v-13h10v13" data-v-f05d705f></path><path d="M9 8h10" data-v-f05d705f></path></svg></div>`,1),l(`p`,{class:`media-preview-title`,title:t.filePath},s(i.value),9,Ie),(w(),d(`audio`,{key:t.filePath,class:`media-preview-audio-el`,src:r.value,controls:``,preload:`metadata`,onLoadedmetadata:te,onCanplay:_,onError:ne},null,40,Le))])),a.value?(w(),d(`div`,Re,[c[2]||=l(`span`,{class:`media-preview-spinner`},null,-1),l(`span`,null,s(u(D)(`@EDITOR:正在载入媒体文件…`)),1)])):T(``,!0)],64))]),l(`div`,ze,[l(`span`,Be,s(ie.value),1),n.value===`video`?(w(),d(`span`,{key:0,class:`media-preview-name`,title:t.filePath},s(i.value),9,Ve)):T(``,!0)])],8,M))}}),[[`__scopeId`,`data-v-f05d705f`]]);o(),x();var Ue={class:`mindmap-preview`},We={class:`mindmap-preview-canvas`},Ge=O(c({__name:`MindmapPreview`,props:{content:{}},setup(t){let n=t,r=E(()=>A(n.content||``,`未命名文档`));return(t,n)=>(w(),d(`div`,Ue,[n[0]||=l(`div`,{class:`mindmap-preview-header`},[l(`span`,{class:`mindmap-preview-title`},`整篇导图`),l(`span`,{class:`mindmap-preview-hint`},`基于整篇 Markdown 自动生成 · 阅读模式`)],-1),l(`div`,We,[e(u(k),{data:r.value,"preview-mode":``},null,8,[`data`])])]))}}),[[`__scopeId`,`data-v-d2fe328b`]]),Ke=1080,qe=6e5,Je=.86;function F(e){if(!e||e.startsWith(`data:`))return!1;if(e.startsWith(`blob:`)||e.startsWith(`/`))return!0;try{return new URL(e,location.href).origin===location.origin}catch{return!1}}async function I(e){try{let t=await fetch(e);if(!t.ok)return null;let n=await t.blob();return await new Promise(e=>{let t=new FileReader;t.onload=()=>e(t.result||``),t.onerror=()=>e(``),t.readAsDataURL(n)})}catch{return null}}function Ye(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,t(e))};if(typeof Image>`u`){r(e);return}let i=new Image,a=setTimeout(()=>r(e),4e3);i.onload=()=>{if(clearTimeout(a),!(i.naturalWidth>Ke||e.length>qe)){r(e);return}try{let t=Math.min(1,Ke/i.naturalWidth),n=Math.max(1,Math.round(i.naturalWidth*t)),a=Math.max(1,Math.round(i.naturalHeight*t)),o=document.createElement(`canvas`);o.width=n,o.height=a;let s=o.getContext(`2d`);if(!s){r(e);return}s.fillStyle=`#ffffff`,s.fillRect(0,0,n,a),s.drawImage(i,0,0,n,a),r(o.toDataURL(`image/jpeg`,Je))}catch{r(e)}},i.onerror=()=>{clearTimeout(a),r(e)},i.src=e})}async function Xe(e){let t=await I(e);return t?Ye(t):null}async function Ze(e){let t=Array.from(e.querySelectorAll(`img`)).filter(e=>F(e.getAttribute(`src`)||``)),n=0;return await Promise.all(t.map(async e=>{let t=await Xe(e.getAttribute(`src`)||``);t?e.setAttribute(`src`,t):n+=1})),n}function Qe(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}var $e={h1:`font-size:26px;font-weight:700;line-height:1.35;margin:28px 0 16px;color:#111;`,h2:`font-size:22px;font-weight:700;line-height:1.4;margin:26px 0 14px;color:#111;`,h3:`font-size:19px;font-weight:700;line-height:1.45;margin:22px 0 12px;color:#222;`,h4:`font-size:17px;font-weight:600;line-height:1.5;margin:20px 0 10px;color:#333;`,h5:`font-size:16px;font-weight:600;line-height:1.5;margin:18px 0 8px;color:#333;`,h6:`font-size:15px;font-weight:600;line-height:1.5;margin:18px 0 8px;color:#555;`,p:`font-size:16px;line-height:1.8;margin:16px 0;color:#333;`,li:`font-size:16px;line-height:1.8;margin:0 0 6px;color:#333;`,ul:`margin:16px 0;padding-left:24px;`,ol:`margin:16px 0;padding-left:24px;`,blockquote:`margin:16px 0;padding:8px 16px;border-left:4px solid #e2e2e2;background:#f7f7f7;color:#666;font-size:15px;line-height:1.8;`,hr:`border:none;border-top:1px solid #e5e5e5;margin:26px 0;`,a:`color:#576b95;text-decoration:none;`,strong:`font-weight:700;color:#111;`,em:`font-style:italic;color:#555;`,code:`font-family:Menlo,Consolas,Monaco,monospace;font-size:0.92em;background:#f2f3f5;color:#c7254e;padding:1px 5px;border-radius:3px;`,pre:`font-family:Menlo,Consolas,Monaco,monospace;font-size:13px;line-height:1.6;background:#f6f8fa;color:#24292f;padding:12px 14px;border-radius:6px;overflow-x:auto;margin:16px 0;`,table:`border-collapse:collapse;width:100%;margin:16px 0;font-size:14px;`,th:`border:1px solid #e0e0e0;padding:8px 10px;background:#f6f8fa;font-weight:600;text-align:left;color:#333;`,td:`border:1px solid #e0e0e0;padding:8px 10px;color:#333;`,img:`max-width:100%;height:auto;display:block;margin:16px auto;border-radius:6px;`};function et(e){e.querySelectorAll(`*`).forEach(e=>{let t=$e[e.tagName.toLowerCase()];t&&e.setAttribute(`style`,t)}),e.querySelectorAll(`pre code`).forEach(e=>e.setAttribute(`style`,`background:none;padding:0;color:inherit;font-size:inherit;`))}async function tt(e,t){let n=e.cloneNode(!0),r=t?await Ze(n):0;return{html:n.innerHTML,leftover:r}}async function nt(e,t){let n=e.cloneNode(!0),r=t.inline?await Ze(n):0;et(n);let i=(t.title||``).trim();return{html:`<section style="font-size:16px;line-height:1.8;color:#333;word-break:break-word;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;">${i?`<h1 style="font-size:26px;font-weight:700;line-height:1.35;margin:0 0 22px;color:#111;">${Qe(i)}</h1>`:``}${n.innerHTML}</section>`,leftover:r}}o(),x(),t(),C();var rt={class:`sidebar-header`},it={class:`sidebar-title`},at={class:`sidebar-actions`},ot={class:`sidebar-search`},st=[`placeholder`,`title`],ct=[`title`,`aria-label`],lt={key:0,class:`sidebar-tree`},ut={key:0,class:`search-section-head`},dt={key:1,class:`tree-arrow-spacer`},ft={class:`tree-icon mit-icon`,"aria-hidden":`true`},pt=[`xlink:href`],mt=[`onClick`,`onContextmenu`],ht={key:1,class:`tree-arrow-spacer`},gt={key:2,class:`tree-icon mit-icon`,"aria-hidden":`true`},_t=[`xlink:href`],vt={key:3,class:`tree-icon mit-icon`,"aria-hidden":`true`},yt=[`xlink:href`],bt=[`title`],xt={key:0,class:`tree-name-hit`},St={key:4,class:`tree-loading`},Ct={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)`}},wt={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)`}},Tt=[`placeholder`],Et={key:1,class:`tree-node tree-inline-input-row`,style:{paddingLeft:`12px`}},Dt={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)`}},Ot={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)`}},kt=[`placeholder`],At=[`data-query`],jt={key:0,class:`content-results-status`},Mt={class:`search-section-head`},Nt={class:`search-section-count`},Pt={key:0,class:`search-section-note`},Ft=[`title`,`onClick`],It={class:`tree-icon mit-icon`,"aria-hidden":`true`},Lt=[`xlink:href`],Rt={class:`content-hit-name`},zt={class:`content-hit-dir`},Bt={class:`content-hit-total`},Vt=[`title`,`onClick`],Ht={class:`content-hit-ln`},Ut={class:`content-hit-text`},Wt={key:0,class:`content-hit-mark`},Gt={key:3,class:`tree-empty`},Kt={key:1,class:`sidebar-loading`},qt={class:`editor-main`},Jt={class:`editor-tabs`},Yt=[`onClick`,`title`],Xt={class:`tab-name`},Zt={key:0,class:`tab-dirty-dot`},Qt=[`onClick`],$t=[`title`],en=[`disabled`,`title`],tn={class:`editor-body`},nn={key:1,class:`image-tab-placeholder`},rn={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`}},an={class:`image-tab-placeholder-title`},on={class:`image-tab-placeholder-hint`},sn={class:`preview-header`},cn={class:`preview-title`},ln={class:`preview-ext-badge`},un=[`title`],dn={class:`preview-body`},fn={key:0,class:`preview-copybar`},pn=[`disabled`,`title`],mn=[`disabled`,`title`],hn=[`disabled`,`title`],gn=[`title`],_n=[`sandbox`,`srcdoc`],vn=2,yn=6e4,bn=3e4,xn=300,Sn=320,Cn=O(c({__name:`EditorView`,props:{pendingFilePath:{}},setup(t){self.MonacoEnvironment={getWorker(e,t){return t===`json`?new _e:t===`css`||t===`scss`||t===`less`?new he:t===`html`||t===`handlebars`||t===`razor`?new de:t===`typescript`||t===`javascript`?new pe:new fe}};let o=t,c=ue(),x=Ae(),C=v([]),O=v(!1),k=v(``),A=v(``),j=null;function Se(){k.value=``,A.value=``,j&&=(clearTimeout(j),null)}S(k,e=>{j&&clearTimeout(j),j=setTimeout(()=>{A.value=e,j=null},180)});let M=v([]),Me=v(0),Ne=v(``),N=v(!1),Pe=v(!1),Fe=null,P=0;function Ie(){Fe?.abort(),Fe=null,P+=1,M.value=[],Me.value=0,Ne.value=``,N.value=!1,Pe.value=!1}async function Le(e){let t=e.trim(),n=c.currentDirectory;if(!n||t.length<vn){Ie();return}if(t===Ne.value&&N.value)return;Fe?.abort();let r=++P,i=new AbortController;Fe=i,N.value=!0,Ne.value=t;try{let e=await(await fetch(`/api/search_content`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:n,query:t}),signal:i.signal})).json().catch(()=>null);if(r!==P)return;if(!e?.success){M.value=[],Me.value=0,Pe.value=!1;return}M.value=Array.isArray(e.files)?e.files:[],Me.value=typeof e.totalMatches==`number`?e.totalMatches:0,Pe.value=!!e.truncated}catch(e){if(e?.name===`AbortError`||r!==P)return;M.value=[],Me.value=0,Pe.value=!1}finally{r===P&&(N.value=!1)}}S(A,e=>{Le(e)}),f(()=>{j&&clearTimeout(j),Fe?.abort(),Be(),Qn()});let Re=null;function ze(){Be(),c.ui.fileTreeAutoRefresh&&(Re=setInterval(()=>{document.hidden||c.currentDirectory&&(k.value.trim()||F())},yn))}function Be(){Re&&=(clearInterval(Re),null)}S(()=>c.currentDirectory,async()=>{if(Pn=!1,Ie(),ze(),await Ue(),L.value.some(e=>e.isDirty)){Pn=!0;return}L.value=[],R.value=null,Bn(),await Ln()}),S(()=>c.ui.fileTreeAutoRefresh,()=>{ze()});async function Ve(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 Ue(){let e=c.currentDirectory;if(e){O.value=!0;try{C.value=await Ve(e,0)}finally{O.value=!1}}}function We(e,t=new Set){for(let n of e)n.type===`directory`&&n.expanded&&(t.add(n.path),n.children&&We(n.children,t));return t}function Ke(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=Ke(e.children,t+1),n.expanded=!0),n})}async function qe(e){let t=c.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:Ke(n.items,0)}catch{return null}}function Je(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)?Je(a.children,i.children)&&(a.children=i.children,r=!0):(a.children=i.children,r=!0)))}return r}async function F(e={}){if(!c.currentDirectory)return;let t=await qe([...We(C.value)]);if(!t){e.notifyOnError&&y.error(D(`@EDITOR:刷新失败`));return}if(C.value.length===0){C.value=t;return}Je(C.value,t)&&(C.value=t)}async function I(e){if(e.type===`directory`){if(e.expanded)e.expanded=!1;else{if(!e.children){e.loading=!0;try{e.children=await Ve(e.path,e.depth+1)}finally{e.loading=!1}}e.expanded=!0}}}function Ye(e){let t=[];for(let n of e)t.push(n),n.type===`directory`&&n.expanded&&n.children&&t.push(...Ye(n.children));return t}let Xe=E(()=>A.value.trim().toLowerCase());function Ze(e,t){if(!t)return e;let n=[];for(let r of e){let e=r.name.toLowerCase().includes(t);if(r.type===`directory`){let i=r.children?Ze(r.children,t):[];if(!e&&i.length===0)continue;n.push({...r,expanded:!0,children:r.children===void 0?void 0:i})}else e&&n.push(r)}return n}function Qe(e,t){for(let n of e){if(n.path===t)return n;if(n.children){let e=Qe(n.children,t);if(e)return e}}return null}let $e=E(()=>Ze(C.value,Xe.value)),et=E(()=>Xe.value.length>0&&$e.value.length===0),Cn=E(()=>et.value&&M.value.length===0&&!N.value);function wn(e){let t=A.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}async function Tn(e,t){if(await kn({name:e.name,path:e.path,type:`file`,depth:0}),!t||t<1)return;await n();let r=B.value;r&&r.getModel()&&jn()?.path===e.path&&(r.revealLineInCenter(t,ge.ScrollType.Smooth),r.setPosition({lineNumber:t,column:1}),r.focus())}let En=v(null);function Dn(){let e=En.value;e&&(e.focus(),e.select())}function On(){k.value?(Se(),En.value?.focus()):(En.value?.blur(),B.value?.focus())}let L=v([]),R=v(null),z=v(null);async function kn(e){if(z.value=e,e.type!==`file`){I(Qe(C.value,e.path)??e);return}let t=L.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:L.value.length}),t){R.value=e.path,n(()=>Hn());return}let r=e.name.split(`.`).pop()||``;if(we.has(r.toLowerCase())){let t={path:e.path,name:e.name,content:``,originalContent:``,isDirty:!1,language:`media`,diskMtimeMs:null};L.value.push(t),R.value=e.path;return}if(Ir.has(r.toLowerCase())){let t={path:e.path,name:e.name,content:``,originalContent:``,isDirty:!1,language:`plaintext`,diskMtimeMs:null};L.value.push(t),R.value=e.path,J.value=!0;return}if(Te(e.name)){let t={path:e.path,name:e.name,content:``,originalContent:``,isDirty:!1,language:`office`,diskMtimeMs:null};L.value.push(t),R.value=e.path,Y.value=!1,J.value=!0;return}try{let t=await fetch(`/api/editor/file?path=${encodeURIComponent(e.path)}`),n=await t.json();if(console.log(`[debug-open-in-editor] EditorView fetch /api/editor/file response:`,{path:e.path,status:t.status,data:n}),!n.success){y.error(`${D(`@EDITOR:打开文件失败: `)}${n.error}`);return}let i=je(r),a=V.get(e.path);a&&!a.isDisposed()&&a.setValue(n.content);let o={path:e.path,name:e.name,content:n.content,originalContent:n.content,isDirty:!1,language:i,diskMtimeMs:typeof n.mtimeMs==`number`?n.mtimeMs:null};console.log(`[debug-open-in-editor] EditorView pushing tab:`,{path:o.path,name:o.name,contentLen:o.content.length,lang:o.language}),L.value.push(o),R.value=e.path,console.log(`[debug-open-in-editor] EditorView tabs after push:`,L.value.length,`activeTabPath=`,R.value)}catch(e){console.log(`[debug-open-in-editor] EditorView fetch threw:`,e),y.error(`${D(`@EDITOR:打开文件失败: `)}${e.message}`)}}S(()=>o.pendingFilePath,async e=>{if(console.log(`[debug-open-in-editor] EditorView watcher fired, filePath=`,e),!e)return;await n();let t=e.split(/[\\/]/).pop()||e;console.log(`[debug-open-in-editor] EditorView calling openFile, name=`,t,`path=`,e),await kn({name:t,path:e,type:`file`,depth:0}),console.log(`[debug-open-in-editor] EditorView openFile returned`)},{immediate:!0});function An(e,t){t.stopPropagation();let n=L.value.findIndex(t=>t.path===e);n!==-1&&(!L.value[n].isDirty||confirm(D(`@EDITOR:文件未保存,确认关闭?`)))&&(L.value.splice(n,1),R.value===e&&(R.value=L.value[Math.min(n,L.value.length-1)]?.path??null))}let jn=()=>L.value.find(e=>e.path===R.value)??null,Mn=E(()=>({expandedDirs:[...We(C.value)],tabs:L.value.map(e=>e.path),activeTab:R.value})),Nn=!1,Pn=!1;function Fn(){Pn&&!Nn&&c.isUiLoaded&&c.saveEditorWorkspace(Mn.value)}S(Mn,()=>Fn());async function In(e){if(L.value.some(t=>t.path===e))return;let t=e.split(/[\\/]/).pop()||e,n=(t.split(`.`).pop()||``).toLowerCase();if(we.has(n)){L.value.push({path:e,name:t,content:``,originalContent:``,isDirty:!1,language:`media`,diskMtimeMs:null});return}if(Ir.has(n)){L.value.push({path:e,name:t,content:``,originalContent:``,isDirty:!1,language:`plaintext`,diskMtimeMs:null});return}if(Te(t)){L.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=V.get(e);i&&!i.isDisposed()&&B.value?.getModel()!==i&&(i.dispose(),V.delete(e)),L.value.push({path:e,name:t,content:r.content,originalContent:r.content,isDirty:!1,language:je(n),diskMtimeMs:typeof r.mtimeMs==`number`?r.mtimeMs:null})}catch{}}async function Ln(){try{for(let e=0;e<100&&!c.isUiLoaded;e++)await new Promise(e=>setTimeout(e,50));if(!c.isUiLoaded)return;rr.value=c.ui.editorSidebarWidth;let e=c.getEditorWorkspace();if(!e)return;Nn=!0;try{if(e.expandedDirs.length>0){let t=await qe(e.expandedDirs);t&&(C.value=t)}for(let t of e.tabs)await In(t);if(!o.pendingFilePath&&e.activeTab&&L.value.some(t=>t.path===e.activeTab)){R.value=e.activeTab;let t=jn(),n=(t?.name.split(`.`).pop()||``).toLowerCase();t&&(Ir.has(n)||Te(t.name))&&(J.value=!0)}}finally{Nn=!1}}finally{Pn=!0,Fn()}}let Rn=v(null),B=te(null),V=new Map;function zn(e){let t=V.get(e.path);return(!t||t.isDisposed())&&(t=ge.createModel(e.content,e.language,me.file(e.path)),V.set(e.path,t)),t}function Bn(){B.value?.setModel(null);for(let e of V.values())e.isDisposed()||e.dispose();V.clear()}function Vn(){if(!Rn.value)return;let e=document.documentElement.getAttribute(`data-theme`)===`dark`;B.value=ge.create(Rn.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}),B.value.onDidChangeModelContent(()=>{let e=jn();if(!e)return;let t=B.value.getValue();e.content=t,e.isDirty=t!==e.originalContent}),B.value.onDidBlurEditorText(()=>{c.ui.editorAutoSave&&jn()?.isDirty&&tr(!1),requestAnimationFrame(()=>{if(!H.value||H.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`))||Hn()})})}S(R,e=>{if(!B.value||!e)return;let t=L.value.find(t=>t.path===e);if(!t)return;let r=zn(t);B.value.setModel(r),n(()=>Hn()),Jn(e)});function Hn(){if(!B.value)return;B.value.focus();let e=document.querySelector(`.monaco-editor .native-edit-context`);e&&document.activeElement!==e&&requestAnimationFrame(()=>e.focus?.())}let Un=0,Wn=new Map;async function Gn(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 Kn(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 qn(e,t,n){e.content=t,e.originalContent=t,e.isDirty=!1,e.diskMtimeMs=n;let r=V.get(e.path);if(!r||r.isDisposed())return;let i=B.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 Jn(e){if(!e)return;let t=L.value.find(t=>t.path===e);if(!t||t.diskMtimeMs===null)return;let n=++Un,r=await Gn(e);if(n!==Un||L.value.find(t=>t.path===e)!==t||!r||r.mtimeMs===t.diskMtimeMs)return;if(t.isDirty){if(Wn.get(e)===r.mtimeMs)return;Wn.set(e,r.mtimeMs);try{await se.confirm(D(`@EDITOR:这个文件在磁盘上已被改动,你这边也有未保存的编辑。重新加载会丢弃你的改动。`),D(`@EDITOR:文件已被外部改动`),{confirmButtonText:D(`@EDITOR:重新加载`),cancelButtonText:D(`@EDITOR:保留我的`),type:`warning`})}catch{return}if(t.isDirty)return}let i=await Kn(e);i&&L.value.find(t=>t.path===e)===t&&qn(t,i.content,i.mtimeMs)}function Yn(){document.hidden||Jn(R.value)}let Xn=null;function Zn(){Qn(),Xn=setInterval(()=>{document.hidden||Jn(R.value)},bn)}function Qn(){Xn&&=(clearInterval(Xn),null)}S(()=>L.value.filter(e=>e.isDirty).length,e=>{x.setDirtyCount(e)},{immediate:!0}),S(R,e=>{let t=L.value.find(t=>t.path===e)??null;x.setActiveFile(t?.path??``,t?.name??``)},{immediate:!0}),f(()=>x.setDirtyCount(0)),xe(()=>{let e=document.documentElement.getAttribute(`data-theme`)===`dark`;ge.setTheme(e?`vs-dark`:`vs`)});let $n=null;function er(){if($n||!H.value)return;let e=[H.value],t=H.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(()=>{H.value&&H.value.offsetParent!==null&&R.value&&B.value&&(Jn(R.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`))||Hn()}))});let n=$n;e.forEach(e=>n.observe(e,{attributes:!0,attributeFilter:[`style`,`class`,`hidden`]}))}i(async()=>{Vn(),await Ue(),await Ln(),er(),ze(),window.addEventListener(`focus`,Yn),document.addEventListener(`visibilitychange`,Yn),Zn(),R.value&&n(()=>Hn())}),f(()=>{$n?.disconnect(),$n=null,window.removeEventListener(`focus`,Yn),document.removeEventListener(`visibilitychange`,Yn),B.value?.dispose(),V.forEach(e=>e.dispose()),V.clear()});async function tr(e=!1){let t=jn();if(t&&!(Rr.value||zr.value||Br.value))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){y.error(`${D(`@EDITOR:保存失败: `)}${n.error}`);return}t.originalContent=t.content,t.isDirty=!1,typeof n.mtimeMs==`number`&&(t.diskMtimeMs=n.mtimeMs),e||y.success(D(`@EDITOR:已保存`))}catch(e){y.error(`${D(`@EDITOR:保存失败: `)}${e.message}`)}}function nr(e){let t=e.ctrlKey||e.metaKey;if(t&&e.key.toLowerCase()===`f`){e.preventDefault(),Dn();return}t&&e.key===`s`&&(e.preventDefault(),tr())}i(()=>window.addEventListener(`keydown`,nr)),f(()=>window.removeEventListener(`keydown`,nr));let H=v(null),rr=v(c.ui.editorSidebarWidth),ir=!1,ar=0,or=0;function sr(e){ir=!0,ar=e.clientX,or=rr.value,document.addEventListener(`mousemove`,cr),document.addEventListener(`mouseup`,lr),e.preventDefault()}function cr(e){if(!ir)return;let t=e.clientX-ar;rr.value=Math.max(140,Math.min(400,or+t))}function lr(){ir=!1,document.removeEventListener(`mousemove`,cr),document.removeEventListener(`mouseup`,lr),rr.value!==c.ui.editorSidebarWidth&&c.setEditorSidebarWidth(rr.value)}function ur(e){return e.type===`directory`?ke(e.name):ve(e.name)}let U=v(null),W=v(null),G=v(null),dr=v(null);function fr(){let e=z.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(/[\\/][^\\/]+$/,``):c.currentDirectory??``,afterNode:e,depth:e.depth}:{parentPath:c.currentDirectory??``,afterNode:null,depth:0}}async function pr(){let e=fr();z.value?.type===`directory`&&!z.value.expanded&&await I(z.value),U.value={...e,kind:`file`,value:``},await n(),G.value?.focus()}async function mr(){let e=fr();z.value?.type===`directory`&&!z.value.expanded&&await I(z.value),U.value={...e,kind:`directory`,value:``},await n(),G.value?.focus()}function hr(){U.value=null}async function gr(){let e=U.value;if(!e||!e.value.trim()){U.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){y.error(e.error);return}y.success(D(`@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){y.error(e.error);return}y.success(D(`@EDITOR:创建成功`))}U.value=null,await F()}function _r(e){e.key===`Enter`&&(e.preventDefault(),gr()),e.key===`Escape`&&(e.preventDefault(),hr())}let K=v(null),vr=v(null);function yr(e,t){e.preventDefault(),K.value={x:e.clientX,y:e.clientY,node:t}}function q(){K.value=null}async function br(){let e=K.value?.node;q(),e&&(z.value=e),e?.type===`directory`&&!e.expanded&&await I(e);let t=fr();U.value={...t,kind:`file`,value:``},await n(),G.value?.focus()}async function xr(){let e=K.value?.node;q(),e&&(z.value=e),e?.type===`directory`&&!e.expanded&&await I(e);let t=fr();U.value={...t,kind:`directory`,value:``},await n(),G.value?.focus()}async function Sr(){let e=K.value?.node;q(),e&&(W.value={node:e,value:e.name},await n(),dr.value?.focus(),dr.value?.select())}async function Cr(){let e=W.value;if(!e||!e.value.trim()||e.value.trim()===e.node.name){W.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){y.error(r.error);return}let i=L.value.find(t=>t.path===e.node.path);i&&(i.path=n,i.name=t,R.value===e.node.path&&(R.value=n)),W.value=null,await F()}function wr(e){e.key===`Enter`&&(e.preventDefault(),Cr()),e.key===`Escape`&&(e.preventDefault(),W.value=null)}async function Tr(){let e=K.value?.node;if(q(),!e)return;let t=e.type===`directory`?D(`@EDITOR:文件夹`):D(`@EDITOR:文件`);if(!confirm(`${D(`@EDITOR:确认删除`)} ${t} "${e.name}"?`))return;let n=await(await fetch(`/api/editor/entry?path=${encodeURIComponent(e.path)}`,{method:`DELETE`})).json();if(!n.success){y.error(n.error);return}let r=L.value.findIndex(t=>t.path===e.path);r!==-1&&(L.value.splice(r,1),R.value===e.path&&(R.value=L.value[Math.max(0,r-1)]?.path??null)),y.success(D(`@EDITOR:已删除`)),await F()}async function Er(){let e=K.value?.node;if(q(),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||y.error(t.error)}catch(e){y.error(e?.message||String(e))}}function Dr(e){let t=c.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 Or(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 kr(){let e=K.value?.node;q(),e&&(await Or(e.path)?y.success(D(`@EDITOR:已复制到剪贴板`)):y.error(D(`@EDITOR:复制失败`)))}async function Ar(){let e=K.value?.node;q(),e&&(await Or(Dr(e.path))?y.success(D(`@EDITOR:已复制到剪贴板`)):y.error(D(`@EDITOR:复制失败`)))}async function jr(){let e=K.value?.node;if(q(),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||y.error(t.error||D(`@EDITOR:VSCode 未安装`))}catch(e){y.error(e?.message||String(e))}}let Mr=new Set([`html`,`htm`]),Nr=E(()=>{let e=K.value?.node;if(!e||e.type!==`file`)return!1;let t=e.name.slice(e.name.lastIndexOf(`.`)+1).toLowerCase();return Mr.has(t)});async function Pr(){let e=K.value?.node;if(q(),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||y.error(t.error||D(`@EDITOR:浏览器打开失败`))}catch(e){y.error(e?.message||String(e))}}i(()=>{document.addEventListener(`click`,q)}),f(()=>{document.removeEventListener(`click`,q)});let Fr=new Set([`md`,`html`,`htm`,`svg`]),Ir=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`ico`,`bmp`]),J=v(!1),Y=v(!1),Lr=v(0),X=E(()=>L.value.find(e=>e.path===R.value)??null),Rr=E(()=>X.value?.language===`plaintext`&&X.value?.content===``),zr=E(()=>X.value?.language===`office`),Br=E(()=>X.value?.language===`media`),Z=E(()=>(X.value?.name??``).split(`.`).pop()?.toLowerCase()??``),Vr=E(()=>Fr.has(Z.value)||Ir.has(Z.value)||Te(Z.value)),Hr=E(()=>((X.value?.content??``).match(/^#{1,6}\s+/gm)||[]).length),Ur=E(()=>Z.value===`md`&&Hr.value>0);S(R,()=>{J.value&&!Vr.value&&(J.value=!1),Y.value&&!Ur.value&&(Y.value=!1)});function Wr(){Vr.value&&(J.value||(Y.value=!1),J.value=!J.value)}function Gr(){Ur.value&&(Y.value||(J.value=!1),Y.value=!Y.value)}let Kr=E(()=>Lr.value<=0||L.value.length===0?{flexBasis:`0px`}:{flex:`0 0 ${Lr.value}px`,maxWidth:`calc(100% - 320px)`}),qr=v(null),Q=v(!1),$=v(``),Jr=v(!0),Yr=null,Xr=E(()=>!Y.value&&J.value&&Z.value===`md`&&!!X.value);function Zr(){return X.value?.content??``}function Qr(){return Zr().match(/^\s*#\s+(.+?)\s*(?:\r?\n|$)/)?.[1]?.trim()??``}function $r(e,t,n){if(!e){y.error(D(`@EDITOR:复制失败`));return}$.value=n,Yr&&clearTimeout(Yr),Yr=setTimeout(()=>{$.value=``},1800),t>0?y.warning(D(`@EDITOR:{n} 张图片未能转成 Base64,已保留原地址`,{n:t})):y.success(D(`@EDITOR:已复制`))}async function ei(){$r(await Or(Zr()),0,`md`)}async function ti(){let e=qr.value?.getRenderedElement();if(e){Q.value=!0;try{let{html:t,leftover:n}=await tt(e,Jr.value);$r(await Or(t),n,`html`)}finally{Q.value=!1}}}function ni(e){let t=document.createElement(`div`);t.style.cssText=`position:fixed;top:-9999px;left:-9999px;opacity:0;`,t.innerHTML=e,document.body.appendChild(t);try{let e=window.getSelection(),n=document.createRange();n.selectNodeContents(t),e?.removeAllRanges(),e?.addRange(n);let r=document.execCommand(`copy`);return e?.removeAllRanges(),r}catch{return!1}finally{document.body.removeChild(t)}}async function ri(){let e=qr.value?.getRenderedElement();if(e){Q.value=!0;try{let{html:t,leftover:n}=await nt(e,{inline:Jr.value,title:Qr()}),r=Zr(),i=!1;try{navigator.clipboard?.write&&typeof ClipboardItem<`u`&&(await navigator.clipboard.write([new ClipboardItem({"text/html":new Blob([t],{type:`text/html`}),"text/plain":new Blob([r],{type:`text/plain`})})]),i=!0)}catch{i=!1}i||=ni(t),$r(i,n,`rich`)}finally{Q.value=!1}}}let ii=E(()=>{let e=X.value;if(!e)return``;let t=Z.value,n=document.documentElement.getAttribute(`data-theme`)===`light`?`#ffffff`:`#0d1117`;return t===`html`||t===`htm`?ye(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>`:``}),ai=!1,oi=0,si=0,ci=0;function li(e){let t=e.currentTarget,n=t.parentElement;if(!n)return;let r=n.getBoundingClientRect(),i=t.getBoundingClientRect();ai=!0,oi=e.clientX,si=r.right-i.right,ci=Math.max(xn,r.width-Sn),document.addEventListener(`mousemove`,ui),document.addEventListener(`mouseup`,di),document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,e.preventDefault()}function ui(e){if(!ai)return;let t=oi-e.clientX;Lr.value=Math.round(Math.max(xn,Math.min(ci,si+t)))}function di(){ai=!1,document.removeEventListener(`mousemove`,ui),document.removeEventListener(`mouseup`,di),document.body.style.cursor=``,document.body.style.userSelect=``}return(t,n)=>(w(),d(g,null,[l(`div`,{class:`editor-view`,ref_key:`containerRef`,ref:H},[l(`div`,{class:`editor-sidebar`,style:a({width:rr.value+`px`})},[l(`div`,rt,[l(`span`,it,s(u(D)(`@EDITOR:资源管理器`)),1),l(`div`,at,[e(u(m),{content:u(D)(`@EDITOR:新建文件`),placement:`bottom`,"show-after":300},{default:ie(()=>[l(`button`,{class:`sidebar-action-btn`,onClick:pr},[...n[11]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M14 3v4a1 1 0 0 0 1 1h4`}),l(`path`,{d:`M17 21h-10a2 2 0 0 1-2-2v-14a2 2 0 0 1 2-2h7l5 5v11a2 2 0 0 1-2 2`}),l(`path`,{d:`M12 11l0 6`}),l(`path`,{d:`M9 14l6 0`})],-1)]])]),_:1},8,[`content`]),e(u(m),{content:u(D)(`@EDITOR:新建文件夹`),placement:`bottom`,"show-after":300},{default:ie(()=>[l(`button`,{class:`sidebar-action-btn`,onClick:mr},[...n[12]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M12 19h-7a2 2 0 0 1-2-2v-11a2 2 0 0 1 2-2h4l3 3h7a2 2 0 0 1 2 2v3.5`}),l(`path`,{d:`M16 19h6`}),l(`path`,{d:`M19 16v6`})],-1)]])]),_:1},8,[`content`]),e(u(m),{content:u(D)(`@EDITOR:刷新`),placement:`bottom`,"show-after":300},{default:ie(()=>[l(`button`,{class:`sidebar-action-btn`,onClick:n[0]||=e=>F({notifyOnError:!0})},[...n[13]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M20 11a8.1 8.1 0 0 0-15.5-2m-.5-4v4h4`}),l(`path`,{d:`M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4`})],-1)]])]),_:1},8,[`content`])])]),l(`div`,ot,[n[15]||=l(`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`},[l(`circle`,{cx:`11`,cy:`11`,r:`7`}),l(`line`,{x1:`21`,y1:`21`,x2:`16.65`,y2:`16.65`})],-1),_(l(`input`,{ref_key:`searchInputRef`,ref:En,"onUpdate:modelValue":n[1]||=e=>k.value=e,type:`text`,class:`sidebar-search-input`,placeholder:u(D)(`@EDITOR:搜索文件名或内容...`),title:u(D)(`@EDITOR:搜索文件名或内容...`),spellcheck:`false`,autocomplete:`off`,onKeydown:re(On,[`escape`])},null,40,st),[[oe,k.value]]),k.value?(w(),d(`button`,{key:0,class:`sidebar-search-clear`,title:u(D)(`@EDITOR:清除搜索`),"aria-label":u(D)(`@EDITOR:清除搜索`),onClick:Se},[...n[14]||=[l(`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`},[l(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),l(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,ct)):T(``,!0)]),O.value?(w(),d(`div`,Kt,[...n[25]||=[l(`span`,{class:`spin-icon`},null,-1)]])):(w(),d(`div`,lt,[Xe.value&&$e.value.length>0?(w(),d(`div`,ut,s(u(D)(`@EDITOR:名称匹配`)),1)):T(``,!0),(w(!0),d(g,null,h(Ye($e.value),e=>(w(),d(g,{key:e.path},[W.value&&W.value.node.path===e.path?(w(),d(`div`,{key:0,class:`tree-node tree-inline-input-row`,style:a({paddingLeft:12+e.depth*14+`px`})},[e.type===`directory`?(w(),d(`span`,{key:0,class:p([`tree-arrow`,{expanded:e.expanded}])},[...n[16]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[l(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(w(),d(`span`,dt)),(w(),d(`svg`,ft,[l(`use`,{"xlink:href":`#${ur(e)}`},null,8,pt)])),_(l(`input`,{ref_for:!0,ref_key:`renameInputRef`,ref:dr,"onUpdate:modelValue":n[2]||=e=>W.value.value=e,onKeydown:wr,onBlur:Cr,onClick:n[3]||=ne(()=>{},[`stop`])},null,544),[[oe,W.value.value]])],4)):(w(),d(`div`,{key:1,class:p([`tree-node`,{"tree-node--dir":e.type===`directory`,"tree-node--file":e.type===`file`,"tree-node--active":R.value===e.path,"tree-node--selected":z.value?.path===e.path&&R.value!==e.path}]),style:a({paddingLeft:12+e.depth*14+`px`}),onClick:t=>kn(e),onContextmenu:t=>yr(t,e)},[e.type===`directory`?(w(),d(`span`,{key:0,class:p([`tree-arrow`,{expanded:e.expanded}])},[...n[17]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[l(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(w(),d(`span`,ht)),e.type===`directory`?(w(),d(`svg`,gt,[l(`use`,{"xlink:href":`#${ur(e)}`},null,8,_t)])):(w(),d(`svg`,vt,[l(`use`,{"xlink:href":`#${ur(e)}`},null,8,yt)])),l(`span`,{class:`tree-name`,title:e.path},[(w(!0),d(g,null,h(wn(e.name),(e,t)=>(w(),d(g,{key:t},[e.hit?(w(),d(`span`,xt,s(e.text),1)):(w(),d(g,{key:1},[b(s(e.text),1)],64))],64))),128))],8,bt),e.loading?(w(),d(`span`,St)):T(``,!0)],46,mt)),U.value&&U.value.afterNode?.path===e.path?(w(),d(`div`,{key:2,class:`tree-node tree-inline-input-row`,style:a({paddingLeft:12+U.value.depth*14+`px`})},[n[20]||=l(`span`,{class:`tree-arrow-spacer`},null,-1),U.value.kind===`directory`?(w(),d(`svg`,Ct,[...n[18]||=[l(`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)]])):(w(),d(`svg`,wt,[...n[19]||=[l(`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),l(`polyline`,{points:`14 2 14 8 20 8`},null,-1)]])),_(l(`input`,{ref_for:!0,ref_key:`inlineInputRef`,ref:G,class:`tree-inline-input`,"onUpdate:modelValue":n[4]||=e=>U.value.value=e,placeholder:U.value.kind===`file`?u(D)(`@EDITOR:输入文件名`):u(D)(`@EDITOR:输入文件夹名`),onKeydown:_r,onBlur:hr,onClick:n[5]||=ne(()=>{},[`stop`])},null,40,Tt),[[oe,U.value.value]])],4)):T(``,!0)],64))),128)),U.value&&U.value.afterNode===null?(w(),d(`div`,Et,[n[23]||=l(`span`,{class:`tree-arrow-spacer`},null,-1),U.value.kind===`directory`?(w(),d(`svg`,Dt,[...n[21]||=[l(`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)]])):(w(),d(`svg`,Ot,[...n[22]||=[l(`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),l(`polyline`,{points:`14 2 14 8 20 8`},null,-1)]])),_(l(`input`,{ref_key:`inlineInputRef`,ref:G,class:`tree-inline-input`,"onUpdate:modelValue":n[6]||=e=>U.value.value=e,placeholder:U.value.kind===`file`?u(D)(`@EDITOR:输入文件名`):u(D)(`@EDITOR:输入文件夹名`),onKeydown:_r,onBlur:hr,onClick:n[7]||=ne(()=>{},[`stop`])},null,40,kt),[[oe,U.value.value]])])):T(``,!0),Xe.value?(w(),d(`div`,{key:2,class:`content-results`,"data-query":Ne.value},[N.value?(w(),d(`div`,jt,[n[24]||=l(`span`,{class:`content-search-spin`},null,-1),l(`span`,null,s(u(D)(`@EDITOR:正在搜索文件内容...`)),1)])):M.value.length>0?(w(),d(g,{key:1},[l(`div`,Mt,[l(`span`,null,s(u(D)(`@EDITOR:内容匹配`)),1),l(`span`,Nt,s(Me.value),1),Pe.value?(w(),d(`span`,Pt,s(u(D)(`@EDITOR:结果过多,已截断`)),1)):T(``,!0)]),(w(!0),d(g,null,h(M.value,e=>(w(),d(`div`,{key:e.path,class:`content-hit`},[l(`div`,{class:`content-hit-file`,title:e.relPath,onClick:t=>Tn(e,e.matches[0]?.line)},[(w(),d(`svg`,It,[l(`use`,{"xlink:href":`#${u(ve)(e.name)}`},null,8,Lt)])),l(`span`,Rt,s(e.name),1),l(`span`,zt,s(e.dir),1),l(`span`,Bt,s(e.total),1)],8,Ft),(w(!0),d(g,null,h(e.matches,t=>(w(),d(`div`,{key:`${e.path}:${t.line}`,class:`content-hit-line`,title:u(D)(`@EDITOR:点击跳到该行`),onClick:n=>Tn(e,t.line)},[l(`span`,Ht,s(t.line),1),l(`span`,Ut,[(w(!0),d(g,null,h(wn(t.text),(e,t)=>(w(),d(g,{key:t},[e.hit?(w(),d(`span`,Wt,s(e.text),1)):(w(),d(g,{key:1},[b(s(e.text),1)],64))],64))),128))])],8,Vt))),128))]))),128))],64)):T(``,!0)],8,At)):T(``,!0),!U.value&&(Cn.value||C.value.length===0)?(w(),d(`div`,Gt,s(Cn.value?u(D)(`@EDITOR:未找到匹配文件`):u(D)(`@EDITOR:暂无文件`)),1)):T(``,!0)]))],4),l(`div`,{class:`editor-resizer`,onMousedown:sr},null,32),l(`div`,qt,[l(`div`,Jt,[(w(!0),d(g,null,h(L.value,e=>(w(),d(`div`,{key:e.path,class:p([`editor-tab`,{active:R.value===e.path,dirty:e.isDirty}]),onClick:t=>R.value=e.path,title:e.path},[l(`span`,Xt,s(e.name),1),e.isDirty?(w(),d(`span`,Zt)):T(``,!0),l(`button`,{class:`tab-close`,onClick:t=>An(e.path,t)},[...n[26]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`},[l(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),l(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,Qt)],10,Yt))),128)),n[29]||=l(`div`,{class:`editor-tabs-spacer`},null,-1),Vr.value?(w(),d(`button`,{key:0,class:p([`preview-toggle-btn`,{active:J.value}]),title:J.value?u(D)(`@EDITOR:关闭预览`):u(D)(`@EDITOR:打开预览`),onClick:Wr},[n[27]||=l(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M10 12a2 2 0 1 0 4 0a2 2 0 0 0-4 0`}),l(`path`,{d:`M21 12c-2.4 4-5.4 6-9 6c-3.6 0-6.6-2-9-6c2.4-4 5.4-6 9-6c3.6 0 6.6 2 9 6`})],-1),l(`span`,null,s(u(D)(`@EDITOR:预览`)),1)],10,$t)):T(``,!0),Ur.value?(w(),d(`button`,{key:1,class:p([`preview-toggle-btn mindmap-toggle-btn`,{active:Y.value,disabled:!Ur.value}]),disabled:!Ur.value,title:Ur.value?Y.value?u(D)(`@EDITOR:关闭思维导图`):u(D)(`@EDITOR:打开思维导图`):u(D)(`@EDITOR:需要至少一个 # 标题`),onClick:Gr},[n[28]||=ee(`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" data-v-2b76e179><path d="M8 18a2 2 0 1 0-4 0a2 2 0 0 0 4 0" data-v-2b76e179></path><path d="M20 6a2 2 0 1 0-4 0a2 2 0 0 0 4 0" data-v-2b76e179></path><path d="M8 6a2 2 0 1 0-4 0a2 2 0 0 0 4 0" data-v-2b76e179></path><path d="M20 18a2 2 0 1 0-4 0a2 2 0 0 0 4 0" data-v-2b76e179></path><path d="M14 12a2 2 0 1 0-4 0a2 2 0 0 0 4 0" data-v-2b76e179></path><path d="M7.5 7.5l3 3" data-v-2b76e179></path><path d="M7.5 16.5l3-3" data-v-2b76e179></path><path d="M13.5 13.5l3 3" data-v-2b76e179></path><path d="M16.5 7.5l-3 3" data-v-2b76e179></path></svg>`,1),l(`span`,null,s(u(D)(`@EDITOR:思维导图`)),1)],10,en)):T(``,!0)]),L.value.length===0?(w(),r(Ee,{key:0,class:`editor-empty`,title:u(D)(`@EDITOR:从左侧选择文件打开`),hint:u(D)(`@EDITOR:Ctrl+S 保存`)},{icon:ie(()=>[...n[30]||=[l(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[l(`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`}),l(`polyline`,{points:`14 2 14 8 20 8`})],-1)]]),_:1},8,[`title`,`hint`])):T(``,!0),l(`div`,tn,[l(`div`,{class:p([`monaco-container`,{hidden:L.value.length===0||Rr.value||zr.value||Br.value}]),ref_key:`editorContainerRef`,ref:Rn},null,2),Br.value&&X.value?(w(),r(He,{key:X.value.path,"file-path":X.value.path,"file-name":X.value.name},null,8,[`file-path`,`file-name`])):T(``,!0),Rr.value&&L.value.length>0&&!J.value&&!Y.value?(w(),d(`div`,nn,[(w(),d(`svg`,rn,[...n[31]||=[l(`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`},null,-1),l(`circle`,{cx:`9`,cy:`9`,r:`2`},null,-1),l(`path`,{d:`m21 15-5-5L5 21`},null,-1)]])),l(`p`,an,s(X.value?.name),1),l(`p`,on,s(u(D)(`@EDITOR:这是图片文件,已在右侧预览面板中打开`)),1)])):T(``,!0),(J.value||Y.value)&&L.value.length>0?(w(),d(`div`,{key:2,class:`preview-resizer`,onMousedown:li},null,32)):T(``,!0),(J.value||Y.value)&&L.value.length>0?(w(),d(`div`,{key:3,class:`preview-panel`,style:a(Kr.value)},[l(`div`,sn,[l(`span`,cn,s(Y.value?u(D)(`@EDITOR:思维导图`):u(D)(`@EDITOR:预览`)),1),l(`span`,ln,s(Z.value.toUpperCase()),1),n[33]||=l(`div`,{class:`preview-header-spacer`},null,-1),l(`button`,{class:`preview-close-btn`,title:Y.value?u(D)(`@EDITOR:关闭思维导图`):u(D)(`@EDITOR:关闭预览`),onClick:n[8]||=e=>Y.value?Y.value=!1:J.value=!1},[...n[32]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`},[l(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),l(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,un)]),l(`div`,dn,[Xr.value?(w(),d(`div`,fn,[l(`button`,{class:p([`preview-copy-btn`,{done:$.value===`md`}]),disabled:Q.value,title:u(D)(`@EDITOR:复制 Markdown 源码`),onClick:ei},[n[34]||=l(`span`,{class:`preview-copy-btn-icon`},`{ }`,-1),l(`span`,null,s($.value===`md`?u(D)(`@EDITOR:已复制`):`Markdown`),1)],10,pn),l(`button`,{class:p([`preview-copy-btn`,{done:$.value===`html`}]),disabled:Q.value,title:u(D)(`@EDITOR:复制渲染后的 HTML(图片按开关内嵌)`),onClick:ti},[n[35]||=l(`span`,{class:`preview-copy-btn-icon`},`</>`,-1),l(`span`,null,s($.value===`html`?u(D)(`@EDITOR:已复制`):`HTML`),1)],10,mn),l(`button`,{class:p([`preview-copy-btn preview-copy-btn--primary`,{done:$.value===`rich`}]),disabled:Q.value,title:u(D)(`@EDITOR:复制为富文本,可直接粘贴到公众号编辑器`),onClick:ri},[n[36]||=l(`span`,{class:`preview-copy-btn-icon`},`⊞`,-1),l(`span`,null,s(Q.value?u(D)(`@EDITOR:转换图片中…`):$.value===`rich`?u(D)(`@EDITOR:已复制`):u(D)(`@EDITOR:复制富文本`)),1)],10,hn),l(`label`,{class:`preview-copy-embed`,title:u(D)(`@EDITOR:复制时把本地图片转成 Base64 内嵌,关闭后保留原图地址`)},[_(l(`input`,{"onUpdate:modelValue":n[9]||=e=>Jr.value=e,type:`checkbox`},null,512),[[ae,Jr.value]]),l(`span`,null,s(u(D)(`@EDITOR:图片转 Base64`)),1)],8,gn)])):T(``,!0),Y.value&&Z.value===`md`&&X.value?(w(),r(Ge,{key:1,content:X.value.content,class:`preview-mindmap`},null,8,[`content`])):J.value&&Z.value===`md`&&X.value?(w(),r(Oe,{ref_key:`mdPreviewRef`,ref:qr,key:X.value.path,content:X.value.content,"base-path":X.value.path,class:`preview-markdown`},null,8,[`content`,`base-path`])):J.value&&[`html`,`htm`,`svg`].includes(Z.value)?(w(),d(`iframe`,{key:3,class:`preview-iframe`,sandbox:u(De),srcdoc:ii.value},null,8,_n)):J.value&&u(Ir).has(Z.value)&&X.value?(w(),r(be,{key:4,"file-path":X.value.path,"file-name":X.value.name},null,8,[`file-path`,`file-name`])):J.value&&zr.value&&X.value?(w(),r(Ce,{key:5,"file-path":X.value.path},null,8,[`file-path`])):T(``,!0)])],4)):T(``,!0)])])],512),(w(),r(ce,{to:`body`},[K.value?(w(),d(`div`,{key:0,ref_key:`ctxMenuRef`,ref:vr,class:`ctx-menu`,style:a({left:K.value.x+`px`,top:K.value.y+`px`}),onClick:n[10]||=ne(()=>{},[`stop`])},[l(`button`,{class:`ctx-menu-item`,onClick:br},[n[37]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M14 3v4a1 1 0 0 0 1 1h4`}),l(`path`,{d:`M17 21h-10a2 2 0 0 1-2-2v-14a2 2 0 0 1 2-2h7l5 5v11a2 2 0 0 1-2 2`}),l(`path`,{d:`M12 11l0 6`}),l(`path`,{d:`M9 14l6 0`})],-1),b(` `+s(u(D)(`@EDITOR:新建文件`)),1)]),l(`button`,{class:`ctx-menu-item`,onClick:xr},[n[38]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M12 19h-7a2 2 0 0 1-2-2v-11a2 2 0 0 1 2-2h4l3 3h7a2 2 0 0 1 2 2v3.5`}),l(`path`,{d:`M16 19h6`}),l(`path`,{d:`M19 16v6`})],-1),b(` `+s(u(D)(`@EDITOR:新建文件夹`)),1)]),n[45]||=l(`div`,{class:`ctx-menu-sep`},null,-1),l(`button`,{class:`ctx-menu-item`,onClick:kr},[n[39]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M7 9.667a2.667 2.667 0 0 1 2.667-2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1-2.667 2.667h-8.666a2.667 2.667 0 0 1-2.667-2.667l0-8.666`}),l(`path`,{d:`M4.012 16.737a2.005 2.005 0 0 1-1.012-1.737v-10c0-1.1.9-2 2-2h10c.75 0 1.158.385 1.5 1`})],-1),b(` `+s(u(D)(`@EDITOR:复制绝对路径`)),1)]),l(`button`,{class:`ctx-menu-item`,onClick:Ar},[n[40]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M9 15l6-6`}),l(`path`,{d:`M11 6l.463-.536a5 5 0 0 1 7.071 7.072l-.534.464`}),l(`path`,{d:`M13 18l-.397.534a5.068 5.068 0 0 1-7.127 0a4.972 4.972 0 0 1 0-7.071l.524-.463`})],-1),b(` `+s(u(D)(`@EDITOR:复制相对路径`)),1)]),n[46]||=l(`div`,{class:`ctx-menu-sep`},null,-1),Nr.value?(w(),d(`button`,{key:0,class:`ctx-menu-item`,onClick:Pr},[n[41]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0`}),l(`path`,{d:`M3.6 9h16.8`}),l(`path`,{d:`M3.6 15h16.8`}),l(`path`,{d:`M11.5 3a17 17 0 0 0 0 18`}),l(`path`,{d:`M12.5 3a17 17 0 0 1 0 18`})],-1),b(` `+s(u(D)(`@EDITOR:在浏览器中打开`)),1)])):T(``,!0),l(`button`,{class:`ctx-menu-item`,onClick:Er},[n[42]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M5 19l2.757-7.351a1 1 0 0 1 .936-.649h12.307a1 1 0 0 1 .986 1.164l-.996 5.211a2 2 0 0 1-1.964 1.625h-14.026a2 2 0 0 1-2-2v-11a2 2 0 0 1 2-2h4l3 3h7a2 2 0 0 1 2 2v2`})],-1),b(` `+s(u(D)(`@EDITOR:在资源管理器中打开`)),1)]),l(`button`,{class:`ctx-menu-item`,onClick:jr},[e(le,{"icon-class":`vscode`,"class-name":`ctx-menu-icon`}),b(` `+s(u(D)(`@EDITOR:在 VSCode 中打开`)),1)]),l(`button`,{class:`ctx-menu-item`,onClick:Sr},[n[43]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M7 7h-1a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-1`}),l(`path`,{d:`M20.385 6.585a2.1 2.1 0 0 0-2.97-2.97l-8.415 8.385v3h3l8.385-8.415`}),l(`path`,{d:`M16 5l3 3`})],-1),b(` `+s(u(D)(`@EDITOR:重命名`)),1)]),l(`button`,{class:`ctx-menu-item ctx-menu-item--danger`,onClick:Tr},[n[44]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[l(`path`,{d:`M4 7l16 0`}),l(`path`,{d:`M10 11l0 6`}),l(`path`,{d:`M14 11l0 6`}),l(`path`,{d:`M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-12`}),l(`path`,{d:`M9 7v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3`})],-1),b(` `+s(u(D)(`@EDITOR:删除`)),1)])],4)):T(``,!0)]))],64))}}),[[`__scopeId`,`data-v-2b76e179`]]);export{Cn as default};
@@ -1 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Ar as t,Cn as n,Ft as r,Gn as i,In as a,J as o,Jr as s,Mn as c,Rt as l,Sn as u,Sr as d,Tn as f,U as p,Un as m,Ur as h,Vt as g,Yn as _,_ as v,_n as y,gn as b,gr as x,hn as S,i as C,ir as w,lr as T,nr as E,on as D,qn as O,r as ee,wn as k,xn as A,xt as j}from"./element-plus-CkMnLwcU.js";import{C as M,m as N}from"./vendor-LCbsk86d.js";import{n as P,t as F}from"./_plugin-vue_export-helper-DlU9e1mk.js";import{t as te}from"./SvgIcon-DqzYKNo_.js";import{o as I,t as L}from"./configStore-BNFH8Gjg.js";import{t as R}from"./CommonDialog-DTWEVQih.js";import{Ct as z,at as B,rt as V}from"./index-Bz3MwUuu.js";import{r as H}from"./relativeTime-DVKGdz_G.js";import{n as U,t as W}from"./useWorkbenchProjects-flU0ll2K.js";a(),T(),t(),D();var G=[`aria-expanded`,`title`,`onKeydown`],K={class:`pm-item__icon-slot`},q=[`src`],J={class:`pm-item__meta`},Y={class:`pm-item__row1`},X={class:`pm-item__name`},Z={key:0,class:`pm-item__running`,"aria-hidden":`true`},Q={key:1,class:`pm-chip pm-chip--current`},ne={class:`pm-item__row2`},re={key:0,class:`pm-chip pm-chip--missing`},ie={key:0,class:`pm-item__branch`},ae={class:`pm-item__branch-name`},oe={key:1,class:`pm-chip pm-chip--ahead`},se={key:2,class:`pm-chip pm-chip--behind`},ce={key:3,class:`pm-chip pm-chip--dirty`},le={key:4,class:`pm-item__progress`},ue={class:`pm-item__path`},de={class:`pm-item__time`},fe={class:`pm-item__actions`},pe=[`title`,`aria-label`,`aria-expanded`],me=[`title`,`aria-label`,`aria-expanded`],he=[`disabled`,`title`,`aria-label`],ge={key:0,class:`pm-item__startup`},_e=F(c({__name:`ProjectManageItem`,props:{project:{},removing:{type:Boolean}},emits:[`remove`],setup(t,{emit:r}){let i=t,a=r,c=A(()=>i.project.exists!==!1),{isIconBroken:l,markIconFailed:p}=V(),g=x(!1);function _(){c.value&&(g.value=!g.value)}let C=x(!1),T=x(null);function D(e){if(C.value){C.value=!1;return}T.value=e.currentTarget||null,C.value=!0}function j(e){let t=e.target;if(t&&!T.value?.contains(t)){for(let e of Array.from(document.querySelectorAll(`.pm-open-menu`)))if(e.contains(t))return;C.value=!1}}E(C,e=>{e?document.addEventListener(`mousedown`,j,!0):document.removeEventListener(`mousedown`,j,!0)}),m(()=>document.removeEventListener(`mousedown`,j,!0));function M(e){return e.git?e.git.isGitRepo===null?P(`@WORKBENCH:未知`):e.git.isGitRepo?e.git.detached?P(`@WORKBENCH:游离 HEAD`):e.git.branch||P(`@WORKBENCH:未知`):``:``}function N(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}async function F(){let e=i.project,t=e.name||e.path,n=e.stats.total>0?P(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。该项目的 {n} 条任务不会被删除,仍可在「全部项目」下查看。`,{name:t,n:e.stats.total}):P(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。`,{name:t});try{await ee.confirm(n,P(`@WORKBENCH:移除项目`),{confirmButtonText:P(`@WORKBENCH:移除`),cancelButtonText:P(`@WORKBENCH:取消`),type:`warning`})}catch{return}a(`remove`,e)}return(r,i)=>{let a=o,m=v;return O(),f(`li`,{class:h([`pm-item`,{"is-missing":t.project.exists===!1,"is-open":g.value,"is-current":t.project.isCurrent}])},[u(`div`,{class:`pm-item__head`,role:`button`,tabindex:`0`,"aria-expanded":g.value,title:t.project.path,onClick:_,onKeydown:[S(b(_,[`self`,`prevent`]),[`enter`]),S(b(_,[`self`,`prevent`]),[`space`])]},[u(`span`,K,[t.project.iconUrl&&!d(l)(t.project.iconUrl)?(O(),f(`img`,{key:0,class:`pm-item__icon pm-item__icon--img`,src:t.project.iconUrl,alt:``,onError:i[0]||=e=>d(p)(t.project.iconUrl)},null,40,q)):(O(),n(a,{key:1,class:`pm-item__icon pm-item__icon--folder`,"aria-hidden":`true`},{default:w(()=>[...i[2]||=[u(`svg`,{viewBox:`0 0 24 24`,width:`32`,height:`32`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M9 3a1 1 0 0 1 .608 .206l.1 .087l2.706 2.707h6.586a3 3 0 0 1 2.995 2.824l.005 .176v8a3 3 0 0 1 -2.824 2.995l-.176 .005h-14a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-11a3 3 0 0 1 2.824 -2.995l.176 -.005h4z`})],-1)]]),_:1}))]),u(`div`,J,[u(`div`,Y,[u(`span`,X,s(t.project.name),1),t.project.stats.runningJobs>0?(O(),f(`span`,Z)):k(``,!0),t.project.isCurrent?(O(),f(`span`,Q,s(d(P)(`@WORKBENCH:当前`)),1)):k(``,!0)]),u(`div`,ne,[t.project.exists===!1?(O(),f(`span`,re,s(d(P)(`@WORKBENCH:目录不存在`)),1)):(O(),f(y,{key:1},[M(t.project)?(O(),f(`span`,ie,[N(t.project)?(O(),n(te,{key:0,"icon-class":`git-branch`,"class-name":`pm-item__branch-icon`})):k(``,!0),u(`span`,ae,s(M(t.project)),1)])):k(``,!0),t.project.git&&t.project.git.ahead>0?(O(),f(`span`,oe,`↑`+s(t.project.git.ahead),1)):k(``,!0),t.project.git&&t.project.git.behind>0?(O(),f(`span`,se,`↓`+s(t.project.git.behind),1)):k(``,!0),t.project.git&&t.project.git.changed>0?(O(),f(`span`,ce,`●`+s(t.project.git.changed),1)):k(``,!0),t.project.stats.total>0?(O(),f(`span`,le,s(d(P)(`@WORKBENCH:{done}/{total} 任务完成`,{done:t.project.stats.done,total:t.project.stats.total})),1)):k(``,!0)],64))]),u(`div`,ue,s(t.project.path),1)]),u(`span`,de,s(d(H)(t.project.stats.lastActiveAt)),1),u(`div`,fe,[c.value?(O(),f(`button`,{key:0,type:`button`,class:h([`pm-item__action pm-item__action--caret`,{"is-on":g.value}]),title:g.value?d(P)(`@PROJM:收起启动方式`):d(P)(`@PROJM:展开启动方式`),"aria-label":`${g.value?d(P)(`@PROJM:收起启动方式`):d(P)(`@PROJM:展开启动方式`)} ${t.project.name}`,"aria-expanded":g.value,onClick:b(_,[`stop`])},[...i[3]||=[u(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M6 9l6 6l6-6`})],-1)]],10,pe)):k(``,!0),c.value?(O(),n(m,{key:1,visible:C.value,trigger:`manual`,placement:`bottom-end`,width:272,"show-arrow":!1,offset:6,teleported:!0,"popper-class":`pm-open-menu`},{reference:w(()=>[u(`button`,{type:`button`,class:h([`pm-item__action`,{"is-on":C.value}]),title:d(P)(`@WORKBENCH:打开方式`),"aria-label":`${d(P)(`@WORKBENCH:打开方式`)} ${t.project.name}`,"aria-expanded":C.value,"aria-haspopup":`menu`,onClick:b(D,[`stop`])},[e(a,{"aria-hidden":`true`},{default:w(()=>[...i[4]||=[u(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M4 12a1 1 0 1 0 2 0a1 1 0 1 0-2 0`}),u(`path`,{d:`M11 12a1 1 0 1 0 2 0a1 1 0 1 0-2 0`}),u(`path`,{d:`M18 12a1 1 0 1 0 2 0a1 1 0 1 0-2 0`})],-1)]]),_:1})],10,me)]),default:w(()=>[C.value?(O(),n(U,{key:0,path:t.project.path,name:t.project.name,onDone:i[1]||=e=>C.value=!1},null,8,[`path`,`name`])):k(``,!0)]),_:1},8,[`visible`])):k(``,!0),u(`button`,{type:`button`,class:`pm-item__action pm-item__action--danger`,disabled:t.removing,title:d(P)(`@WORKBENCH:从清单移除`),"aria-label":`${d(P)(`@WORKBENCH:从清单移除`)} ${t.project.name}`,onClick:b(F,[`stop`])},[e(a,{"aria-hidden":`true`,class:h({"is-rotating":t.removing})},{default:w(()=>[...i[5]||=[u(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{d:`M4 7l16 0`}),u(`path`,{d:`M10 11l0 6`}),u(`path`,{d:`M14 11l0 6`}),u(`path`,{d:`M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-12`}),u(`path`,{d:`M9 7v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3`})],-1)]]),_:1},8,[`class`])],8,he)])],40,G),g.value&&c.value?(O(),f(`div`,ge,[e(B,{"project-path":t.project.path},null,8,[`project-path`])])):k(``,!0)],2)}}}),[[`__scopeId`,`data-v-d3da8765`]]);a(),T(),t();var ve={class:`pm-list`},ye={key:0,class:`pm-list__state`},be={class:`pm-list__state-text`},xe={key:1,class:`pm-list__state`},Se={class:`pm-list__state-title`},Ce={class:`pm-list__state-text`},we={key:2,class:`pm-list__items`},Te=F(c({__name:`ProjectManagePanel`,props:{projects:{},loading:{type:Boolean},removingKey:{}},emits:[`remove`],setup(t,{emit:r}){let i=t,a=r,c=A(()=>[...i.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)}));return(r,i)=>{let l=o;return O(),f(`div`,ve,[t.loading&&t.projects.length===0?(O(),f(`div`,ye,[e(l,{class:`is-loading pm-list__spinner`},{default:w(()=>[...i[1]||=[u(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[u(`path`,{fill:`currentColor`,d:`M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z`})],-1)]]),_:1}),u(`p`,be,s(d(P)(`@PROJM:正在读取项目列表…`)),1)])):t.projects.length===0?(O(),f(`div`,xe,[u(`p`,Se,s(d(P)(`@PROJM:尚无项目`)),1),u(`p`,Ce,s(d(P)(`@PROJM:用「添加项目」把仓库加进来,或看看上面的推荐列表`)),1)])):(O(),f(`ul`,we,[(O(!0),f(y,null,_(c.value,e=>(O(),n(_e,{key:e.key,project:e,removing:e.key===t.removingKey,onRemove:i[0]||=e=>a(`remove`,e)},null,8,[`project`,`removing`]))),128))]))])}}}),[[`__scopeId`,`data-v-5f6d29be`]]);a(),T(),t();var Ee={class:`pm-rec`},De={class:`pm-rec__head`},Oe={class:`pm-rec__title`},ke={key:0,class:`pm-rec__count`},Ae={class:`pm-rec__hint`},je={key:0,class:`pm-rec__state`},Me={class:`pm-rec__state-text`},Ne={key:1,class:`pm-rec__state pm-rec__state--error`},Pe={class:`pm-rec__state-text`},Fe={key:2,class:`pm-rec__state`},Ie={class:`pm-rec__state-text`},Le={key:3,class:`pm-rec__items`},Re={class:`pm-rec__info`},ze={class:`pm-rec__name`},Be=[`title`],Ve={key:0,class:`pm-rec__added`},He=[`disabled`,`aria-label`,`onClick`],Ue={key:4,class:`pm-rec__state`},We={class:`pm-rec__state-text`},Ge=F(c({__name:`RecommendedProjects`,props:{onAdd:{type:Function}},setup(t,{expose:r}){let a=t,c=x(`idle`),m=x([]),v=x(``),b=x(``),S=x(new Set),C=x(``),T=A(()=>{let e=C.value.trim().toLowerCase();return e?m.value.filter(t=>t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e)):m.value});async function E(){c.value=`loading`,v.value=``;try{let e=await fetch(`/api/workbench/projects/recommended`,{cache:`no-store`}).then(e=>e.json()).catch(()=>null);if(!e?.success){c.value=`error`,v.value=e?.error||P(`@PROJM:读取推荐列表失败`);return}m.value=Array.isArray(e.recommendations)?e.recommendations:[],c.value=m.value.length?`done`:`empty`}catch(e){c.value=`error`,v.value=e?.message||P(`@PROJM:读取推荐列表失败`)}}async function D(e){b.value=e.path;try{if(!(await a.onAdd(e.path)).ok)return;let t=new Set(S.value);t.add(e.path),S.value=t}finally{b.value=``}}return i(E),r({reload:E}),(t,r)=>{let i=o,a=p;return O(),f(`section`,Ee,[u(`header`,De,[u(`h3`,Oe,s(d(P)(`@PROJM:推荐添加`)),1),c.value===`done`?(O(),f(`span`,ke,s(T.value.length),1)):k(``,!0),c.value===`done`?(O(),n(a,{key:1,modelValue:C.value,"onUpdate:modelValue":r[0]||=e=>C.value=e,class:`pm-rec__search`,size:`small`,clearable:``,placeholder:d(P)(`@PROJM:搜索推荐仓库...`)},{prefix:w(()=>[e(i,null,{default:w(()=>[e(d(g))]),_:1})]),_:1},8,[`modelValue`,`placeholder`])):k(``,!0),e(z,{size:`small`,disabled:c.value===`loading`,tooltip:d(P)(`@PROJM:重新扫描`),onClick:E},{default:w(()=>[e(i,{class:h({"is-rotating":c.value===`loading`})},{default:w(()=>[e(d(l))]),_:1},8,[`class`])]),_:1},8,[`disabled`,`tooltip`])]),u(`p`,Ae,s(d(P)(`@PROJM:扫描已有项目所在的目录,列出还没加进来、且含 .git 的仓库`)),1),c.value===`loading`&&m.value.length===0?(O(),f(`div`,je,[u(`p`,Me,s(d(P)(`@PROJM:正在扫描…`)),1)])):c.value===`error`?(O(),f(`div`,Ne,[u(`p`,Pe,s(v.value),1)])):c.value===`empty`?(O(),f(`div`,Fe,[u(`p`,Ie,s(d(P)(`@PROJM:没有发现可以添加的仓库,可以直接用「添加项目」指定路径`)),1)])):T.value.length?(O(),f(`ul`,Le,[(O(!0),f(y,null,_(T.value,e=>(O(),f(`li`,{key:e.path,class:`pm-rec__item`},[u(`div`,Re,[u(`span`,ze,s(e.name),1),u(`span`,{class:`pm-rec__path`,title:e.path},s(e.path),9,Be)]),S.value.has(e.path)?(O(),f(`span`,Ve,s(d(P)(`@PROJM:已添加`)),1)):(O(),f(`button`,{key:1,type:`button`,class:`pm-rec__add`,disabled:b.value===e.path,"aria-label":`${d(P)(`@PROJM:添加`)} ${e.name}`,onClick:t=>D(e)},s(b.value===e.path?d(P)(`@PROJM:添加中…`):d(P)(`@PROJM:添加`)),9,He))]))),128))])):m.value.length?(O(),f(`div`,Ue,[u(`p`,We,s(d(P)(`@PROJM:没有匹配的仓库,换个关键词试试`)),1)])):k(``,!0)])}}}),[[`__scopeId`,`data-v-febb1070`]]);a(),T(),t(),D();var Ke={class:`pm-add`},qe={class:`pm-add__hint`},Je={class:`pm-add__row`},$=[`title`,`aria-label`],Ye={class:`pm-add__note`},Xe=F(c({__name:`AddProjectDialog`,props:{visible:{type:Boolean},submitting:{type:Boolean}},emits:[`update:visible`,`submit`],setup(t,{emit:r}){let i=t,a=r,c=L(),{currentLocale:l}=M(I()),f=A(()=>{let e=c.theme;return e===`dark`?!0:e===`light`?!1:window.matchMedia?.(`(prefers-color-scheme: dark)`).matches??!1}),m=x(``),h=x(!1);E(()=>i.visible,e=>{e&&(m.value=``)});function g(e){let t=e&&e[0]||``;h.value=!1,t&&(m.value=t,_())}function _(){let e=m.value.trim();e&&a(`submit`,e)}return(r,i)=>{let c=p,v=o;return O(),n(R,{"model-value":t.visible,title:d(P)(`@PROJM:添加项目`),size:`medium`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":d(P)(`@PROJM:添加`),"cancel-text":d(P)(`@WORKBENCH:取消`),"confirm-loading":!!t.submitting,"custom-class":`pm-add-dialog`,"onUpdate:modelValue":i[3]||=e=>a(`update:visible`,e),onConfirm:_},{default:w(()=>[u(`div`,Ke,[u(`p`,qe,s(d(P)(`@PROJM:选择或粘贴一个项目目录(绝对路径),它会加进项目列表与常用目录`)),1),u(`div`,Je,[e(c,{modelValue:m.value,"onUpdate:modelValue":i[0]||=e=>m.value=e,class:`pm-add__input`,placeholder:d(P)(`@PROJM:粘贴项目目录的绝对路径`),clearable:``,onKeydown:S(_,[`enter`])},null,8,[`modelValue`,`placeholder`]),u(`button`,{type:`button`,class:`pm-add__browse`,title:d(P)(`@PROJM:浏览目录`),"aria-label":d(P)(`@PROJM:浏览目录`),onClick:i[1]||=e=>h.value=!0},[e(v,{"aria-hidden":`true`},{default:w(()=>[e(d(j))]),_:1}),u(`span`,null,s(d(P)(`@PROJM:浏览`)),1)],8,$)]),u(`p`,Ye,s(d(P)(`@PROJM:目录必须已经存在(克隆、创建完之后再来添加)`)),1)]),e(d(N),{visible:h.value,mode:`directory`,theme:f.value?`dark`:`light`,locale:d(l),onClose:i[2]||=e=>h.value=!1,onConfirm:g},null,8,[`visible`,`theme`,`locale`])]),_:1},8,[`model-value`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])}}}),[[`__scopeId`,`data-v-bff3397e`]]);a(),T(),t();var Ze={class:`pm`},Qe={class:`pm__head`},$e={class:`pm__title`},et={class:`pm__count`},tt=[`aria-label`],nt={class:`pm__body`},rt=F(c({__name:`ProjectManagerView`,setup(t){let{projects:n,loading:a,loadProjects:c,removeProject:l,addProject:p}=W(),h=x(``),g=x(!1),_=x(!1),v=x(null),y=null;i(()=>{c(),y=window.setInterval(()=>{c(!0)},1e4)}),m(()=>{y!==null&&window.clearInterval(y)});async function b(e){let t=await p(e);return t.ok?(C.success(t.alreadyKnown?P(`@PROJM:该目录已在项目列表中`):P(`@PROJM:已添加到项目列表`)),await c(!0),t):t}async function S(e){_.value=!0;try{if(!(await b(e)).ok)return;g.value=!1,v.value?.reload()}finally{_.value=!1}}function T(e){return b(e)}async function E(e){h.value=e.key;try{let t=await l(e.path);if(!t.ok)return;let n=e.name||e.path;C.success(t.keptTasks>0?P(`@PROJM:已移除「{name}」,它的 {n} 条任务仍保留`,{name:n,n:t.keptTasks}):P(`@PROJM:已移除「{name}」`,{name:n})),await c(!0)}finally{h.value=``}}return(t,i)=>{let c=o;return O(),f(`section`,Ze,[u(`header`,Qe,[u(`h2`,$e,s(d(P)(`@PROJM:项目管理`)),1),u(`span`,et,s(d(P)(`@PROJM:共 {n} 个项目`,{n:d(n).length})),1),u(`button`,{type:`button`,class:`pm__add`,"aria-label":d(P)(`@PROJM:添加项目`),onClick:i[0]||=e=>g.value=!0},[e(c,{"aria-hidden":`true`},{default:w(()=>[e(d(r))]),_:1}),u(`span`,null,s(d(P)(`@PROJM:添加项目`)),1)],8,tt)]),e(Ge,{ref_key:`recommendedRef`,ref:v,"on-add":T},null,512),u(`div`,nt,[e(Te,{projects:d(n),loading:d(a),"removing-key":h.value,onRemove:E},null,8,[`projects`,`loading`,`removing-key`])]),e(Xe,{visible:g.value,"onUpdate:visible":i[1]||=e=>g.value=e,submitting:_.value,onSubmit:S},null,8,[`visible`,`submitting`])])}}}),[[`__scopeId`,`data-v-016aee68`]]);export{rt as default};
@@ -1,6 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{An as e,Ar as t,Bn as n,C as r,Cn as i,F as a,Ft as o,Gn as s,Gr as c,I as l,In as u,J as d,Jr as f,Lt as p,Mn as m,N as h,Ot as g,Pt as _,Qn as ee,Qt as v,Rt as te,S as y,Sn as b,Sr as x,Tn as S,U as ne,Un as C,Ur as w,X as T,Y as re,Yn as E,Z as ie,_ as D,_n as O,a as k,ar as A,at as ae,b as j,bt as oe,ct as se,en as ce,et as le,ft as M,gn as N,gr as P,gt as ue,hn as F,i as I,ir as L,kn as R,ln as de,lr as z,mn as fe,mr as B,nr as V,on as pe,pn as me,qn as H,r as he,st as U,ut as ge,v as _e,vt as ve,w as ye,wn as W,xn as G,xt as be,y as xe,yn as Se,z as Ce}from"./element-plus-CkMnLwcU.js";import{i as we,l as Te,n as Ee,r as De}from"./vendor-LCbsk86d.js";import{n as K,t as q}from"./_plugin-vue_export-helper-DlU9e1mk.js";import{t as J}from"./SvgIcon-DqzYKNo_.js";import{d as Y,f as Oe,m as ke,t as Ae}from"./configStore-BNFH8Gjg.js";import{t as je}from"./CommonDialog-DTWEVQih.js";import{B as X,D as Me,F as Ne,I as Pe,L as Fe,M as Ie,N as Le,O as Re,P as ze,Q as Be,R as Z,h as Ve,j as He,k as Ue,p as We,rt as Ge,s as Ke,wt as Q,xt as qe,z as Je}from"./index-Bz3MwUuu.js";import{a as $,c as Ye,d as Xe,i as Ze,l as Qe,o as $e,r as et,s as tt,t as nt}from"./taskExecutionExport-0qwbiZRh.js";import{n as rt,r as it,t as at}from"./relativeTime-DVKGdz_G.js";import{n as ot,t as st}from"./useWorkbenchProjects-flU0ll2K.js";u(),z(),t(),pe();var ct={class:`wb-attachments__head`},lt={class:`wb-attachments__label`},ut={class:`wb-attachments__count`},dt=[`disabled`],ft={key:0,class:`wb-attachments__paste-hint`},pt={key:1,class:`wb-attachments__list`},mt=[`title`,`onClick`,`onContextmenu`],ht=[`src`,`alt`],gt={key:1},_t={class:`wb-attachment__meta`},vt=[`title`],yt=[`onClick`,`title`],bt=q(m({__name:`AttachmentZone`,props:{attachments:{},isImage:{type:Function},humanSize:{type:Function},isUploading:{type:Boolean},isPasteHover:{type:Boolean},onPick:{type:Function},onRemove:{type:Function},rawBase:{}},emits:[`paste`,`drop`,`dragover`,`dragenter`,`dragleave`],setup(e,{emit:t}){let n=e;function r(e){return`${n.rawBase||`/api/workbench/attachments`}/${e.id}/raw`}let a=t,o=G(()=>n.attachments.filter(e=>n.isImage(e))),s=G(()=>o.value.map(e=>r(e))),l=P(0),u=P(!1);function d(e){if(n.isImage(e)){let t=o.value.findIndex(t=>t.id===e.id);l.value=t>=0?t:0,u.value=!0}else window.open(r(e),`_blank`,`noopener`)}function p(){u.value=!1}let m=P({visible:!1,x:0,y:0,att:null}),h=P(!1);function g(e,t){if(!n.isImage(e))return;t.preventDefault();let r=window.innerWidth-180,i=window.innerHeight-120;m.value={visible:!0,x:Math.min(t.clientX,r),y:Math.min(t.clientY,i),att:e}}function _(){m.value.visible&&(m.value.visible=!1)}async function ee(){let e=m.value.att;if(e&&!h.value){if(_(),!navigator.clipboard||typeof ClipboardItem>`u`){I({type:`warning`,message:K(`@WORKBENCH:当前浏览器不支持复制图片`)});return}h.value=!0;try{let t=await fetch(r(e),{credentials:`same-origin`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.blob(),i=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`].includes(n.type)?n.type:`image/png`,a=new ClipboardItem({[i]:n});await navigator.clipboard.write([a]),I({type:`success`,message:K(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){I({type:`error`,message:K(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{h.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,_),window.addEventListener(`scroll`,_,!0),window.addEventListener(`blur`,_)),C(()=>{typeof window>`u`||(window.removeEventListener(`click`,_),window.removeEventListener(`scroll`,_,!0),window.removeEventListener(`blur`,_))}),(t,n)=>(H(),S(O,null,[b(`div`,{class:w([`wb-attachments`,{"is-paste-hover":e.isPasteHover}]),onPaste:n[1]||=e=>a(`paste`,e),onDrop:n[2]||=N(e=>a(`drop`,e),[`prevent`]),onDragover:n[3]||=N(e=>a(`dragover`,e),[`prevent`]),onDragenter:n[4]||=N(e=>a(`dragenter`,e),[`prevent`]),onDragleave:n[5]||=e=>a(`dragleave`,e)},[b(`div`,ct,[b(`span`,lt,[R(f(x(K)(`@WORKBENCH:附件`))+` `,1),b(`span`,ut,f(e.attachments.length),1)]),b(`button`,{class:`wb-attachments__add`,disabled:e.isUploading,onClick:n[0]||=(...t)=>e.onPick&&e.onPick(...t)},f(e.isUploading?x(K)(`@WORKBENCH:上传中…`):x(K)(`@WORKBENCH:添加附件`)),9,dt)]),e.isPasteHover?(H(),S(`div`,ft,f(x(K)(`@WORKBENCH:粘贴图片以快速添加`)),1)):W(``,!0),e.attachments.length>0?(H(),S(`ul`,pt,[(H(!0),S(O,null,E(e.attachments,t=>(H(),S(`li`,{key:t.id,class:`wb-attachment`},[b(`button`,{type:`button`,class:`wb-attachment__preview`,title:x(K)(`@WORKBENCH:点击预览`),onClick:e=>d(t),onContextmenu:e=>g(t,e)},[b(`div`,{class:w([`wb-attachment__icon`,{"wb-attachment__icon--img":e.isImage(t)}])},[e.isImage(t)?(H(),S(`img`,{key:0,src:r(t),alt:t.originalName,loading:`lazy`},null,8,ht)):(H(),S(`span`,gt,f(t.ext.toUpperCase()),1))],2),b(`div`,_t,[b(`div`,{class:`wb-attachment__name`,title:`${t.originalName} (${e.humanSize(t.size)})`},f(t.originalName),9,vt)])],40,mt),b(`button`,{class:`wb-attachment__del`,onClick:N(n=>e.onRemove(t),[`stop`]),title:x(K)(`@WORKBENCH:删除`)},`×`,8,yt)]))),128))])):W(``,!0)],34),u.value&&s.value.length>0?(H(),i(x(j),{key:0,"url-list":s.value,"initial-index":l.value,"hide-on-click-modal":!0,teleported:!0,onClose:p},null,8,[`url-list`,`initial-index`])):W(``,!0),(H(),i(Se,{to:`body`},[m.value.visible&&m.value.att&&e.isImage(m.value.att)?(H(),S(`ul`,{key:0,class:`wb-ctx-menu`,style:c({top:m.value.y+`px`,left:m.value.x+`px`}),onContextmenu:n[6]||=N(()=>{},[`prevent`])},[b(`li`,{class:w([`wb-ctx-menu__item`,{"is-disabled":h.value}]),onClick:ee},[n[7]||=b(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[b(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[b(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),b(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),b(`span`,null,f(x(K)(`@WORKBENCH:复制图片`)),1)],2)],36)):W(``,!0)]))],64))}}),[[`__scopeId`,`data-v-e3e872cb`]]),xt=we(`claude`),St=we(`opencode`),Ct=we(`codex`),wt=X,Tt=Je,Et=Z;function Dt(e){return e===`opencode`?St:e===`codex`?Ct:e===`codebuddy`?wt:e===`pi`?Tt:e===`codearts`?Et:xt}function Ot(e){if(typeof e!=`string`||!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function kt(e){let t=Ot(e?.thinkingStartedAt);return t===void 0?{}:{reasoningStartedAt:t,reasoningEndedAt:Ot(e?.thinkingEndedAt)}}u(),z(),t(),pe();var At=[`aria-expanded`],jt={class:`wb-log-summary__left`},Mt={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},Nt={class:`wb-log-summary__label`},Pt={key:0,class:`wb-log-summary__elapsed`},Ft={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},It={class:`wb-log-summary__label`},Lt={class:`wb-log-summary__icon`},Rt={class:`wb-log-summary__label`},zt={key:0,class:`wb-log-summary__elapsed`},Bt={key:3},Vt={class:`wb-log-summary__right`},Ht={class:`wb-log-summary__meta`},Ut=[`title`,`aria-label`],Wt={class:`wb-log-details__body`},Gt={class:`wb-job-chat`},Kt={key:0,class:`wb-chat__foot`},qt=[`title`,`aria-label`],Jt={key:1,class:`wb-log-fullscreen__empty`},Yt=65536,Xt=q(m({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(t,{emit:r}){let a=Ae(),o=t,s=r,c=P(!1);function l(){c.value=!c.value}let u=G(()=>o.job.status===`running`||o.job.status===`pending`);V(()=>o.job.status,(e,t)=>{t!==`running`&&t!==`pending`&&(e===`running`||e===`pending`)&&(c.value=!1)});function d(){let e=o.job.output||``;if(!e)return``;let t=e.length<=Yt?e:`${K(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`;return Xe(t,o.job.id)}function p(){let e=o.job.thinking||``;return e?e.length<=Yt?e:`${K(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function m(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 h(){let e=[];if(o.job.prompt&&e.push(`## ${K(`@WORKBENCH:用户提示词`)}\n\n${o.job.prompt}`),o.job.thinking&&e.push(`## ${K(`@WORKBENCH:Claude 思考`)}\n\n${o.job.thinking}`),o.job.output&&e.push(`## ${K(`@WORKBENCH:模型返回`)}\n\n${o.job.output}`),!e.length){I.warning(K(`@WORKBENCH:暂无内容可复制`));return}await m(e.join(`
2
-
3
- ---
4
-
5
- `))?I.success(K(`@WORKBENCH:已复制到剪贴板`)):I.error(K(`@WORKBENCH:复制失败`))}let g=G(()=>{let e=o.job.status;return e===`done`||e===`error`||e===`cancelled`}),_=G(()=>o.job.status===`cancelled`?`wb-log-summary__status--cancelled`:o.job.status===`error`?`wb-log-summary__status--error`:`wb-log-summary__status--done`),ee=G(()=>o.job.status===`cancelled`?`⏹`:o.job.status===`error`?`✗`:`✓`),v=G(()=>o.job.status===`cancelled`?K(`@WORKBENCH:已停止`):o.job.status===`error`?K(`@WORKBENCH:执行出错`):K(`@WORKBENCH:执行完成`)),te=G(()=>ke(o.job?.agent)),y=Ve(),ne=G(()=>Dt(o.job?.agent));function C(e,t){return e===`running`||e===`pending`?t?`streaming`:`pending`:e===`error`?`error`:`done`}let T=G(()=>{let e=o.job,t=[],n=e.startedAt?new Date(e.startedAt).getTime():Date.now();if(e.prompt){let r=$(e.prompt);r&&t.push({id:`${e.id}-u`,role:`user`,content:r,status:`done`,createdAt:n})}let r=d(),i=p(),a=!!r,s=!!i,c=$e(e),l=c.length>0,u=a||s||l,f=C(e.status,u);return t.push({id:`${e.id}-a`,role:`assistant`,content:r,reasoning:s?i:void 0,reasoningStatus:s?a?`done`:f===`streaming`?`streaming`:`done`:void 0,...kt(e),toolCalls:l?c:void 0,status:f,error:f===`error`&&e.error||void 0,createdAt:n}),t}),re=P(null);V(()=>o.job.status,(e,t)=>{e===`running`&&t!==`running`&&(re.value=re.value??Date.now())});let E=G(()=>{if(!re.value)return``;let e=re.value,t=o.job.endedAt?new Date(o.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`)}秒`}),ie=P(!1),D=G(()=>!!(o.job.output&&o.job.output.length)),O=G(()=>Xe(o.job.output||``,o.job.id)),k=P(null);V(ie,async e=>{e&&(await n(),k.value&&(k.value.scrollTop=k.value.scrollHeight))}),V(()=>(o.job.output||``).length,async()=>{ie.value&&(await n(),k.value&&(k.value.scrollTop=k.value.scrollHeight))});function ae(){}let j=G(()=>g.value&&!!o.job.prompt);function oe(){s(`re-execute`,o.job)}return(n,r)=>(H(),S(`div`,{class:w([`wb-log-details`,{"is-running":u.value,"is-pending":t.job.status===`pending`,"is-finished":g.value}])},[b(`div`,{class:`wb-log-summary`,onClick:l,role:`button`,"aria-expanded":!c.value},[b(`span`,jt,[t.job.status===`running`?(H(),S(`span`,Mt,[b(`span`,Nt,f(x(K)(`@WORKBENCH:正在执行…`)),1),r[1]||=b(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[b(`span`,{class:`wb-log-dots__dot`}),b(`span`,{class:`wb-log-dots__dot`}),b(`span`,{class:`wb-log-dots__dot`})],-1),E.value?(H(),S(`span`,Pt,f(E.value),1)):W(``,!0)])):t.job.status===`pending`?(H(),S(`span`,Ft,[b(`span`,It,f(x(K)(`@WORKBENCH:排队中…`)),1),r[2]||=b(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[b(`span`,{class:`wb-log-dots__dot`}),b(`span`,{class:`wb-log-dots__dot`}),b(`span`,{class:`wb-log-dots__dot`})],-1)])):g.value?(H(),S(`span`,{key:2,class:w([`wb-log-summary__status`,_.value])},[b(`span`,Lt,f(ee.value),1),b(`span`,Rt,f(v.value),1),E.value?(H(),S(`span`,zt,f(E.value),1)):W(``,!0)],2)):(H(),S(`span`,Bt,f(x(K)(`@WORKBENCH:查看执行日志`)),1))]),b(`span`,Vt,[b(`span`,Ht,f((t.job.output||``).length)+` `+f(x(K)(`@WORKBENCH:字符`)),1),b(`button`,{type:`button`,class:`wb-log-copy`,title:x(K)(`@WORKBENCH:复制全部(含提示词与输出)`),"aria-label":x(K)(`@WORKBENCH:复制全部`),onClick:N(h,[`stop`])},` ⧉ `,8,Ut)])],8,At),A(b(`div`,Wt,[b(`div`,Gt,[e(x(Ee),{messages:T.value,"assistant-name":te.value,"assistant-avatar":ne.value,"show-avatar":!0,theme:x(a).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:x(K)(`@AGENT:计划`),raw:x(K)(`@AGENT:原始参数`)}},"file-changes-labels":x(y),"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`,`file-changes-labels`])]),j.value?(H(),S(`footer`,Kt,[b(`button`,{type:`button`,class:`wb-chat__action`,title:x(K)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":x(K)(`@WORKBENCH:重新执行`),onClick:oe},` ↻ `,8,qt)])):W(``,!0),e(je,{modelValue:ie.value,"onUpdate:modelValue":r[0]||=e=>ie.value=e,title:x(K)(`@WORKBENCH:模型返回 - 全屏查看`),size:`fullscreen`,type:`flex`,"close-on-click-modal":!1,"custom-class":`wb-log-fullscreen-dialog`,onClosed:ae},{default:L(()=>[b(`div`,{ref_key:`fullscreenContainerRef`,ref:k,class:`wb-log-fullscreen`},[D.value?(H(),i(x(Te),{key:0,source:O.value,class:`wb-log-fullscreen__render`},null,8,[`source`])):(H(),S(`div`,Jt,f(x(K)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[fe,!c.value]])],2))}}),[[`__scopeId`,`data-v-ad20c468`]]);u(),z(),t(),pe();var Zt={class:`exec-logs`},Qt={class:`exec-logs__head`},$t={class:`exec-logs__title-block`},en={class:`exec-logs__stats`},tn={class:`exec-logs__head-actions`},nn={class:`exec-logs__config`},rn={class:`exec-logs__config-label`},an={class:`exec-logs__config-field`},on={class:`exec-logs__config-name`},sn={class:`exec-logs__config-field`},cn={class:`exec-logs__config-name`},ln={class:`exec-logs__filter`},un={key:0,class:`exec-logs__batch-meta`},dn={key:0,class:`exec-logs__batch`},fn={class:`exec-logs__list`},pn={key:0,class:`exec-logs__empty`},mn={class:`exec-logs__empty-art`,"aria-hidden":`true`},hn={class:`exec-logs__empty-title`},gn={class:`exec-logs__empty-hint`},_n={class:`exec-card__head`},vn=[`title`],yn={class:`exec-card__meta`},bn={key:0,class:`exec-card__task`},xn={key:1,class:`exec-card__time`},Sn={key:2,class:`exec-card__exit`},Cn=[`title`,`onClick`],wn={key:0,class:`exec-card__error`},Tn={key:1,class:`exec-logs__pager`},En=50,Dn=q(m({__name:`ExecutionLogManager`,setup(t){function n(e){return e instanceof Error?e.message:String(e)}let r=P([]),i=P(0),o=B({count:0,sizeMB:0,byStatus:{}}),u=P(!1),p=P(new Set),m=B({q:``,status:``,page:1}),g=P({maxCount:500,maxSizeMB:256}),_=B({maxCount:500,maxSizeMB:256}),ee=P(!1),v=[{value:`pending`,label:K(`@WORKBENCH:排队中`)},{value:`running`,label:K(`@WORKBENCH:执行中`)},{value:`done`,label:K(`@WORKBENCH:已完成`)},{value:`error`,label:K(`@WORKBENCH:出错`)},{value:`cancelled`,label:K(`@WORKBENCH:已取消`)}],y=G(()=>r.value.length>0&&r.value.every(e=>p.value.has(e.id))),C=G(()=>r.value.some(e=>p.value.has(e.id))&&!y.value);async function T(){u.value=!0;try{let e=new URLSearchParams;m.q&&e.set(`q`,m.q),m.status&&e.set(`status`,m.status),e.set(`limit`,String(En)),e.set(`offset`,String((m.page-1)*En));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);r.value=t.jobs,i.value=t.total,o.count=t.stats.count,o.sizeMB=t.stats.sizeMB,o.byStatus=t.stats.byStatus;let n=new Set(r.value.map(e=>e.id));for(let e of Array.from(p.value))n.has(e)||p.value.delete(e)}catch(e){I.error(K(`@WORKBENCH:加载失败`)+`: `+n(e))}finally{u.value=!1}}async function re(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(g.value=e.config,_.maxCount=e.config.maxCount,_.maxSizeMB=e.config.maxSizeMB)}catch{}}async function ie(){ee.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:_.maxCount,maxSizeMB:_.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);g.value=e.config,I.success(K(`@WORKBENCH:已保存策略`)),await T()}catch(e){I.error(K(`@WORKBENCH:保存失败`)+`: `+n(e))}finally{ee.value=!1}}function D(){m.page=1,T()}function ae(){m.q=``,m.status=``,m.page=1,T()}function j(e,t){t?p.value.add(e):p.value.delete(e),p.value=new Set(p.value)}function oe(e){if(e)for(let e of r.value)p.value.add(e.id);else for(let e of r.value)p.value.delete(e.id);p.value=new Set(p.value)}function se(e){I.info(K(`@WORKBENCH:请到工作台主面板的对应任务上点击「重新执行」`))}async function ce(e){try{await he.confirm(K(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),K(`@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`);p.value.delete(e),p.value=new Set(p.value),await T()}catch(e){I.error(K(`@WORKBENCH:保存失败`)+`: `+n(e))}}async function le(){let e=Array.from(p.value);if(e.length!==0){try{await he.confirm(K(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),K(`@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`);I.success(K(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),p.value=new Set,await T()}catch(e){I.error(K(`@WORKBENCH:保存失败`)+`: `+n(e))}}}async function N(){let e=o.count;if(e!==0){try{await he.confirm(K(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),K(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:K(`@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`);I.success(K(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),p.value=new Set,await T()}catch(e){I.error(K(`@WORKBENCH:保存失败`)+`: `+n(e))}}}function ue(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 s(()=>{T(),re()}),(t,n)=>{let s=Ce,g=xe,re=ne,P=a,I=l,de=h,z=d,fe=_e,B=k;return H(),S(`div`,Zt,[b(`header`,Qt,[b(`div`,$t,[b(`span`,en,f(x(K)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:o.count,size:o.sizeMB})),1)]),b(`div`,tn,[e(s,{icon:x(te),size:`small`,loading:u.value,onClick:T},{default:L(()=>[R(f(x(K)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),e(s,{type:`danger`,plain:``,size:`small`,disabled:o.count===0,onClick:N},{default:L(()=>[R(f(x(K)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),b(`div`,nn,[b(`span`,rn,f(x(K)(`@WORKBENCH:保存策略`)),1),b(`span`,an,[b(`span`,on,f(x(K)(`@WORKBENCH:最大条数`)),1),e(g,{modelValue:_.maxCount,"onUpdate:modelValue":n[0]||=e=>_.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),b(`span`,sn,[b(`span`,cn,f(x(K)(`@WORKBENCH:最大体积 (MB)`)),1),e(g,{modelValue:_.maxSizeMB,"onUpdate:modelValue":n[1]||=e=>_.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),e(s,{type:`primary`,size:`small`,loading:ee.value,onClick:ie},{default:L(()=>[R(f(x(K)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),b(`div`,ln,[e(re,{modelValue:m.q,"onUpdate:modelValue":n[2]||=e=>m.q=e,placeholder:x(K)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:F(D,[`enter`]),onClear:D},null,8,[`modelValue`,`placeholder`]),e(I,{modelValue:m.status,"onUpdate:modelValue":n[3]||=e=>m.status=e,placeholder:x(K)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:D},{default:L(()=>[(H(),S(O,null,E(v,t=>e(P,{key:t.value,label:t.label,value:t.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),e(s,{size:`small`,onClick:ae},{default:L(()=>[R(f(x(K)(`@WORKBENCH:重置`)),1)]),_:1}),n[5]||=b(`span`,{class:`exec-logs__filter-spacer`},null,-1),p.value.size>0?(H(),S(`span`,un,f(x(K)(`@WORKBENCH:已选择 {count} 项`,{count:p.value.size})),1)):W(``,!0)]),p.value.size>0?(H(),S(`div`,dn,[e(de,{"model-value":y.value,indeterminate:C.value,onChange:oe},{default:L(()=>[R(f(y.value?x(K)(`@WORKBENCH:取消全选`):x(K)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),e(s,{type:`danger`,size:`small`,onClick:le},{default:L(()=>[R(f(x(K)(`@WORKBENCH:批量删除`)),1)]),_:1})])):W(``,!0),A((H(),S(`div`,fn,[!u.value&&r.value.length===0?(H(),S(`div`,pn,[b(`div`,mn,[e(z,null,{default:L(()=>[e(x(M))]),_:1})]),b(`div`,hn,f(x(K)(`@WORKBENCH:暂无执行日志`)),1),b(`div`,gn,f(x(K)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):W(``,!0),(H(!0),S(O,null,E(r.value,t=>(H(),S(`article`,{key:t.id,class:w([`exec-card`,{"is-selected":p.value.has(t.id)}])},[b(`header`,_n,[e(de,{"model-value":p.value.has(t.id),onChange:e=>j(t.id,e)},null,8,[`model-value`,`onChange`]),b(`span`,{class:`exec-card__status`,style:c({color:x(et)(t.status),borderColor:x(et)(t.status)})},f(x(Ze)(t.status)),5),b(`span`,{class:`exec-card__title`,title:t.title||x(K)(`@WORKBENCH:无标题`)},f(t.title||x(K)(`@WORKBENCH:无标题`)),9,vn),n[6]||=b(`span`,{class:`exec-card__spacer`},null,-1),b(`span`,yn,[t.taskTitle?(H(),S(`span`,bn,`📁 `+f(t.taskTitle),1)):W(``,!0),t.startedAt?(H(),S(`span`,xn,`⏱ `+f(ue(t.startedAt,t.endedAt)),1)):W(``,!0),t.exitCode===null?W(``,!0):(H(),S(`span`,Sn,`exit `+f(t.exitCode),1))]),b(`button`,{type:`button`,class:`exec-card__del`,title:x(K)(`@WORKBENCH:删除`),onClick:e=>ce(t.id)},`×`,8,Cn)]),t.error?(H(),S(`p`,wn,`⚠ `+f(t.error),1)):W(``,!0),e(Xt,{job:t,onReExecute:se},null,8,[`job`])],2))),128))])),[[B,u.value]]),i.value>En?(H(),S(`footer`,Tn,[e(fe,{"current-page":m.page,"onUpdate:currentPage":n[4]||=e=>m.page=e,"page-size":En,total:i.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:T},null,8,[`current-page`,`total`])])):W(``,!0)])}}}),[[`__scopeId`,`data-v-80e93b04`]]);function On(e){return String(e.manualDoneAt||e.lastJobEndedAt||e.updatedAt||e.createdAt||``)}function kn(e){return e.column===`done`?On(e):e.updatedAt||e.createdAt||``}function An(e){return e.live?``:rt(e.lastDurationMs)}function jn(e){let t=An(e);return t?K(`@WORKBENCH:用时 {d}`,{d:t}):``}function Mn(e){return e.live?K(`@WORKBENCH:已运行 {elapsed}`,{elapsed:rt(e.live.elapsedMs)}):``}function Nn(e){return Mn(e)||jn(e)}function Pn(e){let t=An(e);if(!t)return``;let n=at(e.lastJobStartedAt),r=at(e.lastJobEndedAt);return!n||!r?t:`${t} · ${n} → ${r}`}z();var Fn=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`]),In=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,Ln=20971520,Rn=3840,zn=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/webp`,`image/bmp`]);function Bn(e){if(e.size<=3670016)return!1;let t=String(e.type||``).toLowerCase();return t?zn.has(t):/\.(png|jpe?g|webp|bmp)$/i.test(e.name)}function Vn(e,t){return`${String(e||`attachment`).replace(/\.[^./\\]+$/,``)}.${t}`}async function Hn(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 Un(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 Wn(e){let t=await Hn(e);if(!t)return null;try{let n=[{edge:Rn,quality:.95},{edge:Rn,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 Un(o,`image/webp`,e.quality)||await Un(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 Gn(){let e=P({}),t=P(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(!Fn.has(n.type)&&!n.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){I.error(`${K(`@WORKBENCH:不支持的文件类型`)}(${n.name})`);return}if(a(t).find(e=>e.originalName===n.name&&e.size===n.size)){I.info(`${n.name} ${K(`@WORKBENCH:已存在,已复用`)}`);return}let c=i(t);e.value[c]=!0;try{let e=n;if(Bn(n)){let t=await Wn(n);t&&(e=r(t.blob,Vn(n.name,t.ext)),I.info(K(`@WORKBENCH:图片过大,已压缩后上传:{from} → {to}`,{from:g(n.size),to:g(e.size)})))}if(e.size>20971520){I.error(`「${n.name}」${K(`@WORKBENCH:超过 {size} 限制`,{size:g(Ln)})}`);return}let i=await fetch(s(t),{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":encodeURIComponent(e.name),"X-Mime-Type":e.type||`application/octet-stream`},body:e}).then(e=>e.json());if(i.success){let n=a(t);n.push(i.attachment),o(t,n),I.success(`${K(`@WORKBENCH:已添加:`)}${e.name}`)}else I.error(i.error||K(`@WORKBENCH:上传失败`))}catch(e){I.error(K(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{e.value[c]=!1}}async function f(e,t){try{await he.confirm(K(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),K(`@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)),I.success(K(`@WORKBENCH:已删除`))):I.error(n.error||K(`@WORKBENCH:删除失败`))}function p(e){let t=document.createElement(`input`);t.type=`file`,t.accept=In,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}}u();var Kn=`__simple`,qn=65536;function Jn(e,t){function n(t){if(!t)return[];let n=`${t.id}${Kn}`;return e.value.filter(e=>e.subId===n||e.subId.startsWith(`${n}__r`)).sort((e,t)=>{let n=e.startedAt||``,r=t.startedAt||``;return n&&r?n.localeCompare(r):n?-1:+!!r})}function r(e){if(!e)return null;let t=n(e);return t.length>0?t[t.length-1]:null}function i(e){return e?e.status===`pending`||e.status===`running`?`running`:e.status===`done`?`done`:e.status===`cancelled`?`cancelled`:`error`:`idle`}return{simpleConversationMessages:G(()=>{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=$(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>qn?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>qn?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=$e(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:Xe(c,t.id),reasoning:d?l:void 0,reasoningStatus:d?!i&&u||u?`done`:h===`streaming`?`streaming`:`done`:void 0,...kt(t),toolCalls:p?f:void 0,status:h,error:h===`error`&&t.error||void 0,createdAt:a})}),r}),simpleAllJobsFor:n,simpleJobFor:r,simpleJobState:i,SIMPLE_SUB_ID_SUFFIX:Kn,MAX_LOG_DISPLAY_SIMPLE:qn}}u(),z();function Yn(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?I.success(t.message||K(`@WORKBENCH:已加入执行队列`)):I.error(t.error||K(`@WORKBENCH:执行失败`))}async function s(t,n,r){let i=r??e.value.filter(e=>e.taskId===t.id).slice(-1)[0];if(!i)return I.error(K(`@WORKBENCH:没有可续接的会话`)),!1;let a=Array.isArray(t.attachments)?t.attachments:[],o=await fetch(`/api/workbench/jobs/${i.id}/continue`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({userMessage:n,attachments:a})}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));return o.success?(I.success(o.message||K(`@WORKBENCH:已加入续接队列`)),!0):(I.error(o.error||K(`@WORKBENCH:续接失败`)),!1)}async function c(t,n,r){if(!r.claudeSessionId)return I.error(K(`@WORKBENCH:上一轮没有会话标识,无法重试这一轮,请重新发送`)),!1;let i=$(n.prompt);if(!i)return I.error(K(`@WORKBENCH:这一轮没有可重发的消息`)),!1;let a=await fetch(`/api/workbench/jobs/${encodeURIComponent(n.id)}`,{method:`DELETE`}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));return a?.success?(e.value=e.value.filter(e=>e.id!==n.id),await s(t,i,r)):(I.error(a?.error||K(`@WORKBENCH:重试失败,请稍后再试`)),!1)}let l=B({}),u=new Set,d=0;function f(t){return e.value.some(e=>e.taskId===t&&(e.status===`running`||e.status===`pending`))}function p(e){return l[e]??[]}function m(e,t,n=[]){(l[e.id]??(l[e.id]=[])).push({id:`q-${Date.now()}-${++d}`,text:t,files:n})}function h(e,t){let n=l[e];if(!n)return;let r=n.findIndex(e=>e.id===t);r<0||(n.splice(r,1),n.length||delete l[e])}async function g(e,t){for(let n of t.files)await r.uploadAttachment({kind:`task`,task:e},n.file);return await s(e,t.text)}async function _(e){if(u.has(e))return;let n=l[e];if(!n||n.length===0||f(e))return;let r=t.value.find(t=>t.id===e);if(!r){delete l[e];return}let i=n[0];u.add(e);try{await g(r,i)&&h(e,i.id)}finally{u.delete(e)}}let ee=G(()=>{let t=new Set;for(let n of e.value)(n.status===`running`||n.status===`pending`)&&t.add(n.taskId);return t});V(ee,(t,n)=>{if(n)for(let r of n)t.has(r)||l[r]?.length&&e.value.some(e=>e.taskId===r)&&_(r)});async function v(e,t){let n=t.text.trim();if(n){if(f(e.id)){m(e,n,t.files);return}await g(e,{text:n,files:t.files})}}async function te(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){I.error(K(`@WORKBENCH:找不到对应任务,无法重新执行`));return}await o(n)}async function y(e){try{await he.confirm(K(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),K(`@WORKBENCH:停止执行`),{confirmButtonText:K(`@WORKBENCH:停止`),cancelButtonText:K(`@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?I.success(K(`@WORKBENCH:已发送停止信号`)):I.error(t.error||K(`@WORKBENCH:停止失败`))}async function b(){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?K(`@WORKBENCH:当前任务还没有执行内容,确认仍要清空?`):K(`@WORKBENCH:将清空 {m} 条执行记录,任务描述/附件保留。`,{m:r.length});try{await he.confirm(a,K(`@WORKBENCH:清空执行内容`),{confirmButtonText:K(`@WORKBENCH:清空`),cancelButtonText:K(`@WORKBENCH:取消`),type:`warning`})}catch{return}if(i>0){I.warning(K(`@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),I.success(o.message||K(`@WORKBENCH:已清空执行内容`))):I.error(o?.error||K(`@WORKBENCH:清空失败`))}return{runTask:o,continueChat:s,onContinueSendFromChat:v,onReExecuteJob:te,retryRound:c,cancelJob:y,clearExecutionForSelectedTask:b,isTaskRunning:f,queuedChatsOf:p,removeQueuedChat:h,flushNextQueued:_}}z();function Xn(){let e=P([]),t=P([]),n=P({path:``,name:``});function r(n,r){if(n===`hello`){t.value=r.jobs||[];return}if(n===`job:update`){let e=r,n=t.value.findIndex(t=>t.id===e.id);if(n>=0){let r=t.value[n];!e.thinkingStartedAt&&r.thinkingStartedAt&&(e.thinkingStartedAt=r.thinkingStartedAt),!e.thinkingEndedAt&&r.thinkingEndedAt&&(e.thinkingEndedAt=r.thinkingEndedAt),t.value[n]=e}else t.value.push(e);return}if(n===`job:thinking-delta`||n===`job:output-delta`){let e=n===`job:thinking-delta`?`thinking`:`output`,i=r?.delta||``;if(!i)return;let a=t.value.findIndex(e=>e.id===r.id);if(a<0)return;let o=t.value[a];if(o[e]=(o[e]||``)+i,n===`job:thinking-delta`){let e=new Date().toISOString();o.thinkingStartedAt||=e,o.thinkingEndedAt=e}return}if(n===`job:toolcalls`){let e=Array.isArray(r?.updates)?r.updates:[];if(!e.length)return;let n=t.value.findIndex(e=>e.id===r.id);if(n<0)return;let i=t.value[n];for(let t of e){if(!t||!t.id)continue;Array.isArray(i.toolCalls)||(i.toolCalls=[]);let e=i.toolCalls.findIndex(e=>e.id===t.id);e>=0?i.toolCalls[e]={...i.toolCalls[e],...t}:i.toolCalls.push(t)}return}if(n===`task:update`){let t=e.value.findIndex(e=>e.id===r.id);t>=0&&(e.value[t]=r)}if(n===`tasks:reordered`){if(Array.isArray(r?.tasks)){if(r.tasks.length<e.value.length){console.warn(`[SSE tasks:reordered] 数据丢失风险:当前 ${e.value.length} 个任务,服务端只返回 ${r.tasks.length} 个,拒绝覆盖`);return}e.value=r.tasks}return}n===`task:error`&&I.error(r.error||K(`@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:(I.error(e.error||K(`@WORKBENCH:保存失败`)),null)}catch{return I.error(K(`@WORKBENCH:保存失败`)),null}}return{tasks:e,jobs:t,currentProject:n,applyJobEvent:r,connectSSE:a,disconnectSSE:o,loadTasks:s,loadCurrentProject:c,loadJobs:l,clearJobsByTask:u,createTask:d}}z(),u();var Zn=`__no_project__`,Qn=`wb.collapsedGroupPaths.v1`,$n=`wb.seenGroupPaths.v1`;function er(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 tr(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function nr(e,t){let n=P(er(Qn)),r=P(er($n));V(n,e=>tr(Qn,e),{deep:!1}),V(r,e=>tr($n,e),{deep:!1});function i(e){return n.value.has(e)}function a(e){n.value.has(e)?n.value.delete(e):n.value.add(e),n.value=new Set(n.value);let t=new Set(r.value);t.add(e),r.value=t}let o=G(()=>{let r=e.value,i=new Map;for(let e of r){let t=Q(e.projectPath)||Zn;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=Q(t.value.path),o=Array.from(i.keys()).sort((e,t)=>e===a?-1:t===a||e===Zn?1:t===Zn?-1:e.localeCompare(t));return{groups:o.map(e=>({path:e,label:e===Zn?K(`@WORKBENCH:未关联项目`):e,tasks:i.get(e)})),hasMultiple:o.length>1||o.length===1&&n.value.has(o[0])}});function s(e){if(!e||e===Zn)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}let c=G(()=>`${Q(t.value.path)}|${o.value.groups.map(e=>e.path).join(`
6
- `)}`);return V(c,()=>{let e=Q(t.value.path);if(!e)return;let i=new Set(n.value),a=new Set(r.value),s=!1;for(let t of o.value.groups)a.has(t.path)||(a.add(t.path),t.path!==e&&(i.add(t.path),s=!0));s&&(n.value=i),r.value=a},{immediate:!0}),{groupedTasksList:o,isGroupCollapsed:i,toggleGroupCollapsed:a,shortProjectLabel:s}}u(),z(),t(),pe();var rr={class:`wb-sidebar`},ir={class:`wb-section`},ar=[`disabled`],or=[`aria-expanded`,`title`,`onClick`,`onKeydown`],sr=[`title`],cr={class:`wb-pill wb-task-group__count`},lr={key:1,class:`wb-task-group__list`},ur=[`data-task-id`,`data-group-path`,`title`,`aria-pressed`,`onClick`,`onKeydown`,`onMousedown`],dr={class:`wb-task-item__body`},fr=[`title`],pr=[`title`],mr={class:`wb-task-item__action-group`},hr=[`title`,`aria-label`,`onClick`],gr=[`onClick`,`title`,`aria-label`],_r={key:0,class:`wb-empty`},vr=5,yr=q(m({__name:`WorkbenchSidebar`,props:{tasks:{},selectedTaskId:{},currentProject:{},creatingTask:{type:Boolean},isTaskRunning:{type:Function}},emits:[`select-task`,`delete-task`,`copy-task`,`create-task`,`reorder-tasks`],setup(t,{emit:r}){let a=t,s=r,c=G(()=>a.currentProject),{groupedTasksList:l,isGroupCollapsed:u,toggleGroupCollapsed:p,shortProjectLabel:m}=nr(G(()=>a.tasks),c),h=G(()=>Q(a.currentProject.path));function g(e){return!!e.projectPath&&Q(e.projectPath)!==h.value}V(()=>a.selectedTaskId,async e=>{e&&(await n(),document.querySelector(`.wb-task-item[data-task-id="${e}"]`)?.scrollIntoView({block:`nearest`}))},{immediate:!0});function _(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()||K(`@WORKBENCH:未命名任务`)}function v(e){let t=_(e),n=K(`@WORKBENCH:拖动排序提示`);return t?`${t} · ${n}`:n}function te(e){return a.isTaskRunning(e)}let y=P(null),ne=P(null),C=P(null),T=P(null),D=P(null),k=null;function A(){y.value=null,ne.value=null,C.value=null,T.value=null,D.value=null,k=null}function j(e,t,n,r){e.button===0&&(k={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,se),window.addEventListener(`mouseup`,ce,{once:!0}))}function se(e){if(!k)return;if(y.value===null){if(Math.abs(e.clientY-k.pointerY)<vr)return;y.value=k.taskId,ne.value=k.groupPath,window.getSelection()?.removeAllRanges(),document.body.style.userSelect=`none`}let t=document.elementFromPoint(e.clientX,e.clientY);if(!t)return;let n=t.closest(`.wb-task-item`);if(!n){C.value=null,T.value=null,D.value=null;return}let r=n.getAttribute(`data-task-id`),i=n.getAttribute(`data-group-path`);if(!r||!i)return;if(i!==ne.value){C.value=null,T.value=null,D.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;C.value=r,T.value=i,D.value=e.clientY<o?`before`:`after`}function ce(e){if(window.removeEventListener(`mousemove`,se),document.body.style.userSelect=``,!k){A();return}let t=k.groupPath,n=k.taskId,r=C.value,i=D.value,a=T.value;if(A(),!r||!i||a!==t)return;let o=l.value.groups.find(e=>e.path===t);if(!o)return;let c=o.tasks.map(e=>e.id),u=c.indexOf(n);if(u<0)return;c.splice(u,1);let d=c.indexOf(r)+ +(i===`after`);c.splice(d,0,n),s(`reorder-tasks`,{groupPath:t,orderedIds:c})}return(n,r)=>{let a=d,c=Ce;return H(),S(`aside`,rr,[b(`section`,ir,[b(`button`,{class:`wb-new-btn`,disabled:t.creatingTask,onClick:r[0]||=e=>s(`create-task`)},[e(a,{class:`wb-new-btn__icon`},{default:L(()=>[e(x(o))]),_:1}),b(`span`,null,f(x(K)(`@WORKBENCH:新建任务`)),1),r[4]||=b(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,ar),b(`ul`,{class:w([`wb-task-list`,{"is-grouped":x(l).hasMultiple}])},[(H(!0),S(O,null,E(x(l).groups,n=>(H(),S(`li`,{key:n.path,class:`wb-task-group`},[x(l).hasMultiple?(H(),S(`div`,{key:0,class:w([`wb-task-group__head`,{"is-current":n.path===h.value,"is-collapsed":x(u)(n.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!x(u)(n.path),title:x(u)(n.path)?x(K)(`@WORKBENCH:展开`):x(K)(`@WORKBENCH:收起`),onClick:e=>x(p)(n.path),onKeydown:[F(N(e=>x(p)(n.path),[`prevent`]),[`enter`]),F(N(e=>x(p)(n.path),[`prevent`]),[`space`])]},[e(a,{class:`wb-task-group__caret`},{default:L(()=>[(H(),i(ee(x(u)(n.path)?x(ie):x(re))))]),_:2},1024),e(a,{class:`wb-task-group__icon`},{default:L(()=>[e(x(oe))]),_:1}),b(`span`,{class:`wb-task-group__name`,title:n.path===h.value?t.currentProject.path:n.label},f(n.path===h.value?t.currentProject.name:x(m)(n.label)),9,sr),b(`span`,cr,f(n.tasks.length),1)],42,or)):W(``,!0),x(u)(n.path)?W(``,!0):(H(),S(`ul`,lr,[(H(!0),S(O,null,E(n.tasks,i=>(H(),S(`li`,{key:i.id,class:w([`wb-task-item`,{active:i.id===t.selectedTaskId,"is-other-project":g(i),"is-running":te(i),"is-dragging":y.value===i.id,"is-drop-before":C.value===i.id&&D.value===`before`,"is-drop-after":C.value===i.id&&D.value===`after`}]),"data-task-id":i.id,"data-group-path":n.path,title:v(i),role:`button`,tabindex:`0`,"aria-pressed":i.id===t.selectedTaskId,onClick:e=>s(`select-task`,i),onKeydown:[F(N(e=>s(`select-task`,i),[`prevent`]),[`enter`]),F(N(e=>s(`select-task`,i),[`prevent`]),[`space`])],onMousedown:e=>j(e,i,n.path,e.currentTarget)},[b(`div`,dr,[b(`div`,{class:`wb-task-item__title`,title:_(i)},f(_(i)),9,fr)]),te(i)?(H(),S(`span`,{key:0,class:`wb-task-item__running-dot`,title:x(K)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,pr)):W(``,!0),b(`div`,mr,[b(`button`,{class:`wb-task-item__copy`,title:x(K)(`@WORKBENCH:复制任务`),"aria-label":x(K)(`@WORKBENCH:复制任务`),onClick:N(e=>s(`copy-task`,i),[`stop`]),onKeydown:r[1]||=N(()=>{},[`stop`])},[e(a,null,{default:L(()=>[e(x(U))]),_:1})],40,hr),te(i)?W(``,!0):(H(),S(`button`,{key:0,class:`wb-task-item__del`,onClick:N(e=>s(`delete-task`,i),[`stop`]),onKeydown:r[2]||=N(()=>{},[`stop`]),title:x(K)(`@WORKBENCH:删除`),"aria-label":x(K)(`@WORKBENCH:删除`)},[e(a,null,{default:L(()=>[e(x(ae))]),_:1})],40,gr))])],42,ur))),128))]))]))),128)),t.tasks.length===0?(H(),S(`li`,_r,[e(Ke,{size:`inline`,title:x(K)(`@WORKBENCH:暂无任务`),hint:x(K)(`@WORKBENCH:点击上方按钮新建`)},{icon:L(()=>[e(a,null,{default:L(()=>[e(x(ge))]),_:1})]),default:L(()=>[e(c,{type:`primary`,size:`small`,icon:x(o),loading:t.creatingTask,onClick:r[3]||=e=>s(`create-task`)},{default:L(()=>[R(f(x(K)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])]),_:1},8,[`title`,`hint`])])):W(``,!0)],2)])])}}}),[[`__scopeId`,`data-v-a4d3a53b`]]);u(),z(),t(),pe();var br={class:`proj`},xr={class:`proj__head`},Sr=[`title`,`aria-label`],Cr={class:`proj__title`},wr=[`aria-label`,`title`],Tr={class:`proj__toggles`},Er=[`aria-pressed`],Dr={key:0,class:`proj__toggle-check`,viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},Or=[`aria-pressed`],kr={key:0,class:`proj__toggle-check`,viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},Ar=[`placeholder`,`aria-label`],jr={key:0,class:`proj__search-meta`},Mr=[`title`,`aria-label`],Nr={class:`proj__list`},Pr=[`title`],Fr={class:`proj-item__body`},Ir={class:`proj-item__icon-slot`},Lr={class:`proj-item__row1`},Rr={class:`proj-item__name`},zr={key:0,class:`proj-item__running`,"aria-hidden":`true`},Br={class:`proj-item__num`},Vr={key:0,class:`proj-item__row2`},Hr={class:`proj-item__running-text`},Ur=[`title`],Wr={class:`proj-item__progress-text`},Gr=[`title`,`onClick`,`onKeydown`],Kr={class:`proj-item__body`},qr={class:`proj-item__icon-slot`},Jr=[`src`,`onError`],Yr={class:`proj-item__row1`},Xr={class:`proj-item__name`},Zr={class:`proj-item__signals`},Qr={key:0,class:`proj-item__running`,"aria-hidden":`true`},$r={key:1,class:`proj-item__badge`},ei={class:`proj-item__row2`},ti={key:0,class:`proj-chip proj-chip--missing`},ni={key:0,class:`proj-item__branch`},ri={class:`proj-item__branch-name`},ii={key:1,class:`proj-chip proj-chip--ahead`},ai={key:2,class:`proj-chip proj-chip--behind`},oi={key:3,class:`proj-chip proj-chip--dirty`},si={class:`proj-item__time`},ci={key:0,class:`proj-item__row3`},li={class:`proj-item__progress-text`},ui={class:`proj-item__actions`},di=[`title`,`aria-label`,`onClick`],fi=[`title`,`aria-label`,`onClick`],pi=[`title`,`aria-label`,`aria-expanded`,`onClick`],mi={key:0,class:`proj-empty`},hi={class:`proj-empty__title`},gi={class:`proj-empty__hint`},_i={key:1,class:`proj-empty`},vi={class:`proj-empty__title`},yi=q(m({__name:`WorkbenchProjectPanel`,props:{projects:{},selectedKey:{},loading:{type:Boolean},collapsible:{type:Boolean}},emits:[`select`,`remove`,`collapse`],setup(t,{emit:r}){let a=t,o=r,c=G(()=>[...a.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)})),l=P(``),u=P(!1),p=P(!1),m=G(()=>!!l.value.trim()||u.value||p.value),h=G(()=>u.value||p.value),g=G(()=>{let e=l.value.trim().toLowerCase();return c.value.filter(t=>u.value&&t.stats.total===0||p.value&&t.git&&t.git.isGitRepo===!1?!1:!e||t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))});function ee(){l.value=``,u.value=!1,p.value=!1}let v=P(!1),te=P(null);function y(){v.value=!v.value,v.value&&n(()=>te.value?.focus())}function ne(){l.value.trim()||(v.value=!1)}let T=G(()=>a.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}));function re(e){return e.git?e.git.isGitRepo===null?K(`@WORKBENCH:未知`):e.git.isGitRepo?e.git.detached?K(`@WORKBENCH:游离 HEAD`):e.git.branch||K(`@WORKBENCH:未知`):``:``}function ie(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}let{isIconBroken:k,markIconFailed:ae}=Ge(),j=P(null),oe=P(null);function ce(e,t){if(j.value===e.key){j.value=null;return}oe.value=t.currentTarget,j.value=e.key}function le(){j.value=null}function M(e){if(!j.value)return;let t=e.target;if(t&&!oe.value?.contains(t)){for(let e of Array.from(document.querySelectorAll(`.proj-open-menu`)))if(e.contains(t))return;j.value=null}}s(()=>document.addEventListener(`mousedown`,M,!0)),C(()=>document.removeEventListener(`mousedown`,M,!0));async function ue(e){le();let t=await Be(e.path);t.success?I.success(t.message||K(`@WORKBENCH:已在文件管理器中打开文件夹`)):I.error(t.error||K(`@WORKBENCH:打开文件夹失败`))}async function R(e){let t=e.name||e.path,n=e.stats.total>0?K(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。该项目的 {n} 条任务不会被删除,仍可在「全部项目」下查看。`,{name:t,n:e.stats.total}):K(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。`,{name:t});try{await he.confirm(n,K(`@WORKBENCH:移除项目`),{confirmButtonText:K(`@WORKBENCH:移除`),cancelButtonText:K(`@WORKBENCH:取消`),type:`warning`})}catch{return}o(`remove`,e)}return(n,r)=>{let a=D,s=d;return H(),S(`section`,br,[b(`header`,xr,[t.collapsible?(H(),S(`button`,{key:0,type:`button`,class:`proj__fold-btn board__fold-btn`,title:x(K)(`@WORKBENCH:收起项目列表`),"aria-label":x(K)(`@WORKBENCH:收起项目列表`),"aria-expanded":`true`,onClick:r[0]||=e=>o(`collapse`)},[...r[9]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[b(`path`,{d:`M11 7l-5 5l5 5`}),b(`path`,{d:`M17 7l-5 5l5 5`})],-1)]],8,Sr)):W(``,!0),b(`h3`,Cr,f(x(K)(`@WORKBENCH:项目列表`)),1),t.projects.length>0?(H(),i(a,{key:1,trigger:`click`,placement:`bottom-end`,width:168,"show-arrow":!1,offset:6,teleported:!0,"popper-class":`proj-filter-popper`},{reference:L(()=>[b(`button`,{type:`button`,class:w([`proj__filter-btn`,{"is-on":h.value}]),"aria-label":x(K)(`@WORKBENCH:筛选项目`),title:x(K)(`@WORKBENCH:筛选项目`)},[...r[10]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[b(`path`,{d:`M4 4h16v2.172a2 2 0 0 1-.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48-4.928a2 2 0 0 1-.52-1.345v-2.227`})],-1)]],10,wr)]),default:L(()=>[b(`div`,Tr,[b(`button`,{type:`button`,class:w([`proj__toggle`,{"is-on":u.value}]),"aria-pressed":u.value,onClick:r[1]||=e=>u.value=!u.value},[b(`span`,null,f(x(K)(`@WORKBENCH:只看有任务`)),1),u.value?(H(),S(`svg`,Dr,[...r[11]||=[b(`path`,{d:`M5 12l5 5l10-10`},null,-1)]])):W(``,!0)],10,Er),b(`button`,{type:`button`,class:w([`proj__toggle`,{"is-on":p.value}]),"aria-pressed":p.value,onClick:r[2]||=e=>p.value=!p.value},[b(`span`,null,f(x(K)(`@WORKBENCH:隐藏非 Git`)),1),p.value?(H(),S(`svg`,kr,[...r[12]||=[b(`path`,{d:`M5 12l5 5l10-10`},null,-1)]])):W(``,!0)],10,Or)])]),_:1})):W(``,!0),t.projects.length>0?(H(),S(`div`,{key:2,class:w([`proj__search`,{"is-open":v.value}])},[A(b(`input`,{ref_key:`searchInputRef`,ref:te,"onUpdate:modelValue":r[3]||=e=>l.value=e,class:`proj__search-input`,type:`search`,placeholder:x(K)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":x(K)(`@WORKBENCH:搜索项目名称或路径`),onKeydown:r[4]||=F(e=>l.value=``,[`esc`]),onBlur:ne},null,40,Ar),[[fe,v.value],[me,l.value]]),m.value&&v.value?(H(),S(`span`,jr,f(g.value.length)+`/`+f(t.projects.length),1)):W(``,!0),b(`button`,{type:`button`,class:`proj__search-btn`,title:x(K)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":x(K)(`@WORKBENCH:搜索项目名称或路径`),onMousedown:r[5]||=N(()=>{},[`prevent`]),onClick:y},[...r[13]||=[b(`svg`,{class:`proj__search-icon`,viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[b(`path`,{d:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0`}),b(`path`,{d:`M21 21l-6 -6`})],-1)]],40,Mr)],2)):W(``,!0)]),b(`ul`,Nr,[b(`li`,{class:w([`proj-item proj-item--all`,{"is-active":t.selectedKey===``,"is-running":T.value.running>0,"is-complete":T.value.total>0&&T.value.done>=T.value.total}]),role:`button`,tabindex:`0`,title:x(K)(`@WORKBENCH:全部项目`),onClick:r[6]||=e=>o(`select`,null),onKeydown:[r[7]||=F(N(e=>o(`select`,null),[`prevent`]),[`enter`]),r[8]||=F(N(e=>o(`select`,null),[`prevent`]),[`space`])]},[b(`div`,Fr,[b(`span`,Ir,[e(s,{class:`proj-item__icon`},{default:L(()=>[...r[14]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[b(`path`,{d:`M4 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`}),b(`path`,{d:`M14 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`}),b(`path`,{d:`M4 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`}),b(`path`,{d:`M14 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`})],-1)]]),_:1})]),b(`div`,Lr,[b(`span`,Rr,f(x(K)(`@WORKBENCH:全部项目`)),1),T.value.running>0?(H(),S(`span`,zr)):W(``,!0),b(`span`,Br,f(t.projects.length),1)]),T.value.running>0?(H(),S(`div`,Vr,[b(`span`,Hr,f(x(K)(`@WORKBENCH:{n} 个执行中`,{n:T.value.running})),1)])):W(``,!0),T.value.total>0?(H(),S(`div`,{key:1,class:`proj-item__row3`,title:x(K)(`@WORKBENCH:只统计项目列表里这些项目名下的任务`)},[b(`span`,Wr,f(x(K)(`@WORKBENCH:{done}/{total} 任务完成`,{done:T.value.done,total:T.value.total})),1)],8,Ur)):W(``,!0)])],42,Pr),(H(!0),S(O,null,E(g.value,n=>(H(),S(`li`,{key:n.key,class:w([`proj-item`,{"is-active":n.key===t.selectedKey,"is-running":n.stats.runningJobs>0,"is-complete":n.stats.total>0&&n.stats.done>=n.stats.total&&n.stats.runningJobs===0,"is-missing":n.exists===!1}]),role:`button`,tabindex:`0`,title:n.path,onClick:e=>o(`select`,n),onKeydown:[F(N(e=>o(`select`,n),[`self`,`prevent`]),[`enter`]),F(N(e=>o(`select`,n),[`self`,`prevent`]),[`space`])]},[b(`div`,Kr,[b(`span`,qr,[n.iconUrl&&!x(k)(n.iconUrl)?(H(),S(`img`,{key:0,class:`proj-item__icon proj-item__icon--img`,src:n.iconUrl,alt:``,onError:e=>x(ae)(n.iconUrl)},null,40,Jr)):(H(),i(s,{key:1,class:`proj-item__icon proj-item__icon--folder`,"aria-hidden":`true`},{default:L(()=>[...r[15]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`32`,height:`32`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[b(`path`,{d:`M9 3a1 1 0 0 1 .608 .206l.1 .087l2.706 2.707h6.586a3 3 0 0 1 2.995 2.824l.005 .176v8a3 3 0 0 1 -2.824 2.995l-.176 .005h-14a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-11a3 3 0 0 1 2.824 -2.995l.176 -.005h4z`})],-1)]]),_:1}))]),b(`div`,Yr,[b(`span`,Xr,f(n.name),1),b(`span`,Zr,[n.stats.runningJobs>0?(H(),S(`span`,Qr)):W(``,!0),n.isCurrent?(H(),S(`span`,$r,f(x(K)(`@WORKBENCH:当前`)),1)):W(``,!0)])]),b(`div`,ei,[n.exists===!1?(H(),S(`span`,ti,f(x(K)(`@WORKBENCH:目录不存在`)),1)):(H(),S(O,{key:1},[re(n)?(H(),S(`span`,ni,[ie(n)?(H(),i(J,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):W(``,!0),b(`span`,ri,f(re(n)),1)])):W(``,!0),n.git&&n.git.ahead>0?(H(),S(`span`,ii,`↑`+f(n.git.ahead),1)):W(``,!0),n.git&&n.git.behind>0?(H(),S(`span`,ai,`↓`+f(n.git.behind),1)):W(``,!0),n.git&&n.git.changed>0?(H(),S(`span`,oi,`●`+f(n.git.changed),1)):W(``,!0)],64)),b(`span`,si,f(x(it)(n.stats.lastActiveAt)),1)]),n.stats.total>0?(H(),S(`div`,ci,[b(`span`,li,f(x(K)(`@WORKBENCH:{done}/{total} 任务完成`,{done:n.stats.done,total:n.stats.total})),1)])):W(``,!0)]),b(`div`,ui,[n.exists===!1?(H(),S(`button`,{key:0,type:`button`,class:`proj-item__action proj-item__action--danger`,title:x(K)(`@WORKBENCH:从清单移除`),"aria-label":`${x(K)(`@WORKBENCH:从清单移除`)} ${n.name}`,onClick:N(e=>R(n),[`stop`])},[e(s,{"aria-hidden":`true`},{default:L(()=>[e(x(se))]),_:1})],8,di)):(H(),S(`button`,{key:1,type:`button`,class:`proj-item__action`,title:x(K)(`@WORKBENCH:打开文件夹`),"aria-label":`${x(K)(`@WORKBENCH:打开文件夹`)} ${n.name}`,onClick:N(e=>ue(n),[`stop`])},[e(s,{"aria-hidden":`true`},{default:L(()=>[e(x(be))]),_:1})],8,fi)),n.exists===!1?W(``,!0):(H(),i(a,{key:2,visible:j.value===n.key,trigger:`manual`,placement:`right-start`,width:272,"show-arrow":!1,offset:6,"popper-class":`proj-open-menu`},{reference:L(()=>[b(`button`,{type:`button`,class:w([`proj-item__action`,{"is-open":j.value===n.key}]),title:x(K)(`@WORKBENCH:打开方式`),"aria-label":`${x(K)(`@WORKBENCH:打开方式`)} ${n.name}`,"aria-expanded":j.value===n.key,"aria-haspopup":`menu`,onClick:N(e=>ce(n,e),[`stop`])},[e(s,{"aria-hidden":`true`},{default:L(()=>[e(x(_))]),_:1})],10,pi)]),default:L(()=>[j.value===n.key?(H(),i(ot,{key:0,path:n.path,name:n.name,onDone:le},null,8,[`path`,`name`])):W(``,!0)]),_:2},1032,[`visible`]))])],42,Gr))),128)),!t.loading&&t.projects.length===0?(H(),S(`li`,mi,[b(`p`,hi,f(x(K)(`@WORKBENCH:尚无项目`)),1),b(`p`,gi,f(x(K)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):W(``,!0),!t.loading&&t.projects.length>0&&g.value.length===0?(H(),S(`li`,_i,[b(`p`,vi,f(x(K)(`@WORKBENCH:没有匹配的项目`)),1),b(`button`,{type:`button`,class:`proj-empty__clear`,onClick:ee},f(x(K)(`@WORKBENCH:清除筛选`)),1)])):W(``,!0)])])}}}),[[`__scopeId`,`data-v-981cc6bd`]]);u(),z(),t(),pe();var bi={class:`kb-move-menu__head`},xi={class:`kb-move-menu__list`},Si=[`title`,`onClick`],Ci={class:`kb-move-menu__name`},wi={key:0,class:`kb-move-menu__warn`},Ti={key:0,class:`kb-move-menu__empty`},Ei=q(m({__name:`WorkbenchTaskMoveMenu`,props:{visible:{type:Boolean},x:{},y:{},task:{},projects:{}},emits:[`move`,`close`],setup(e,{emit:t}){let r=e,a=t,o=G(()=>{let e=Q(r.task?.projectPath);return r.projects.filter(t=>Q(t.path)!==e)}),s=P(null),l=P({x:0,y:0});V(()=>r.visible,async e=>{if(!e)return;await n();let t=s.value;if(!t)return;let i=t.getBoundingClientRect();l.value={x:Math.min(Math.max(8,r.x),Math.max(8,window.innerWidth-i.width-8)),y:Math.min(Math.max(8,r.y),Math.max(8,window.innerHeight-i.height-8))}});function u(e){let t=s.value;t&&e.target instanceof Node&&t.contains(e.target)||a(`close`)}function d(){a(`close`)}function p(e){e.key===`Escape`&&(e.stopPropagation(),a(`close`))}V(()=>r.visible,e=>{e&&(window.addEventListener(`pointerdown`,u,!0),window.addEventListener(`scroll`,d,!0),window.addEventListener(`keydown`,p,!0))},{immediate:!0}),V(()=>r.visible,e=>{e||(window.removeEventListener(`pointerdown`,u,!0),window.removeEventListener(`scroll`,d,!0),window.removeEventListener(`keydown`,p,!0))}),C(()=>{window.removeEventListener(`pointerdown`,u,!0),window.removeEventListener(`scroll`,d,!0),window.removeEventListener(`keydown`,p,!0)});function m(e){a(`move`,e.path)}return(t,n)=>(H(),i(Se,{to:`body`},[e.visible&&e.task?(H(),S(`div`,{key:0,ref_key:`menuRef`,ref:s,class:`kb-move-menu`,role:`menu`,style:c({top:l.value.y+`px`,left:l.value.x+`px`}),onContextmenu:n[0]||=N(()=>{},[`prevent`])},[b(`p`,bi,f(x(K)(`@WORKBENCH:移动到其他项目`)),1),b(`div`,xi,[(H(!0),S(O,null,E(o.value,e=>(H(),S(`button`,{key:e.key,type:`button`,class:`kb-move-menu__item`,role:`menuitem`,title:e.path,onClick:t=>m(e)},[b(`span`,Ci,f(e.name),1),e.exists===!1?(H(),S(`span`,wi,f(x(K)(`@WORKBENCH:目录不存在`)),1)):W(``,!0)],8,Si))),128)),o.value.length===0?(H(),S(`p`,Ti,f(x(K)(`@WORKBENCH:没有其他项目`)),1)):W(``,!0)])],36)):W(``,!0)]))}}),[[`__scopeId`,`data-v-d7536f7f`]]),Di=[140,170,200,230,260,290,320,350];function Oi(e){return(e||``).replace(/\\/g,`/`).trim().toLowerCase()}function ki(e){let t=Oi(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,Di[(n>>>0)%Di.length]}function Ai(e){return{"--tag-hue":String(ki(e))}}u(),t(),z(),pe();var ji={class:`kb`},Mi=[`aria-hidden`],Ni={class:`kb-col__head`},Pi={class:`kb-col__title`},Fi={class:`kb-col__count`},Ii={class:`kb-col__list`},Li=[`data-task-id`,`aria-current`,`onClick`,`onKeydown`,`onContextmenu`],Ri=[`title`,`aria-label`,`onClick`],zi=[`src`,`alt`,`onError`],Bi={key:0,class:`kb-card__cover-more`,"aria-hidden":`true`},Vi={class:`kb-card__row1`},Hi=[`title`],Ui=[`title`],Wi={class:`kb-card__time`},Gi=[`title`],Ki=[`title`],qi={key:3,class:`kb-card__live`},Ji={class:`kb-card__live-meta`},Yi=[`title`],Xi=[`title`],Zi={key:2,class:`kb-card__live-pid`},Qi={key:3,class:`kb-card__live-silent`},$i=[`title`],ea=[`aria-valuenow`,`aria-label`],ta={class:`kb-card__live-pct`},na={class:`kb-card__live-pct-tag`},ra=[`title`],ia=[`title`],aa={class:`kb-card__live-tag`},oa=[`title`],sa={class:`kb-card__live-tag`},ca=[`title`],la=[`title`],ua={class:`kb-card__reply-text`},da=[`title`,`onClick`],fa={class:`kb-card__actions`},pa=[`title`,`onClick`],ma=[`title`,`aria-label`,`onClick`],ha=[`title`,`aria-label`,`onClick`],ga=[`title`,`aria-label`,`onClick`],_a=[`title`,`aria-label`,`onClick`],va={key:0,class:`kb-col__add`},ya={key:1,class:`kb-col__empty`},ba={key:2,class:`kb-col__more`},xa={key:1,class:`kb__table-wrap`},Sa={class:`kb-table`},Ca={class:`kb-table__th`},wa={class:`kb-table__th kb-table__th--narrow`},Ta={class:`kb-table__th kb-table__th--time`},Ea=[`onClick`,`onKeydown`],Da={class:`kb-table__td`},Oa=[`title`,`onClick`],ka={class:`kb-table__name`},Aa=[`title`],ja={key:2,class:`kb-table__live`},Ma=[`title`],Na=[`title`],Pa={key:2,class:`kb-table__live-silent`},Fa={key:3,class:`kb-table__live kb-table__live--reply`},Ia=[`title`],La={class:`kb-table__td`},Ra={class:`kb-table__td kb-table__td--num`},za=[`title`],Ba={class:`kb-table__dur`},Va=[`title`],Ha={key:0},Ua={class:`kb-table__td kb-table__empty`,colspan:`3`},Wa=30,Ga=q(m({__name:`WorkbenchKanban`,props:{tasks:{},projectLabels:{},projects:{},taskPercents:{},showProjectLabel:{type:Boolean},view:{},search:{},openedTaskId:{}},emits:[`open-task`,`run-task`,`stop-task`,`complete-task`,`reopen-task`,`delete-task`,`move-task`,`create-task`,`update:view`,`update:search`],setup(t,{emit:r}){let a=t,o=r,l=[{key:`todo`,labelKey:`@WORKBENCH:待处理`},{key:`doing`,labelKey:`@WORKBENCH:进行中`},{key:`done`,labelKey:`@WORKBENCH:已完成`}],u=P({visible:!1,x:0,y:0,task:null});function d(e,t,n){t===`todo`&&(n.preventDefault(),u.value={visible:!0,x:n.clientX,y:n.clientY,task:e})}function p(e){let t=u.value.task;u.value={...u.value,visible:!1},t&&o(`move-task`,t,e)}let m=G(()=>{let e=a.search.trim().toLowerCase();return a.tasks.filter(t=>!e||(t.title||``).toLowerCase().includes(e)||(t.desc||``).toLowerCase().includes(e))}),h=P(Wa);V(()=>a.search,()=>{h.value=Wa});let g=G(()=>{let e=l.map(e=>{let t=e.key===`done`?m.value.filter(t=>t.column===e.key).sort(te):m.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-h.value):0,tasks:e.key===`done`?e.all.slice(0,h.value):e.all,collapsed:t&&e.all.length===0&&e.key!==`todo`}))}),_=G(()=>({gridTemplateColumns:g.value.map(e=>e.collapsed?`minmax(0, 0fr)`:`minmax(0, 1fr)`).join(` `)})),ee=P(!1);s(()=>{requestAnimationFrame(()=>requestAnimationFrame(()=>{ee.value=!0}))}),V(()=>a.openedTaskId,e=>{e&&n(()=>{document.querySelector(`.kb-card[data-task-id="${e}"]`)?.scrollIntoView({block:`nearest`,inline:`nearest`})})});function v(e){return On(e)}function te(e,t){return v(t).localeCompare(v(e))}function y(e){return kn(e)}function ne(e){return An(e)}function C(e){return Pn(e)}function T(e){let t=(e.autoCompleted?.reason||``).trim(),n=K(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`);return t?`${n}\n${t}`:n}let re=G(()=>[...m.value].sort((e,t)=>y(t).localeCompare(y(e))));function ie(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 D(e){return a.projectLabels[e.projectPath]||``}function k(e){return e.lastJobStatus===`error`}function A(e){return e.live?.agent||e.lastJobAgent||``}function ae(e){if(!e.live)return null;let t=a.taskPercents?.[e.id];return typeof t==`number`?t:null}function oe(e){let t=e.live;if(!t)return``;let n=Mn(e),r=t.lastLine||t.lastThought||t.lastTool;return r?`${n} · ${r}`:n}function se(e){return Array.isArray(e.images)?e.images:[]}let ce=P(new Set);function le(e){ce.value=new Set(ce.value).add(e)}function M(e){let t=se(e);return ce.value.size===0?t:t.filter(e=>!ce.value.has(e.id))}function ue(e){return`/api/workbench/attachments/${e}/raw`}let I=P(null);function L(e,t=0){let n=M(e);n.length!==0&&(I.value={urls:n.map(e=>ue(e.id)),index:t})}function de(){I.value=null}function z(e){return e.originalName?`${K(`@WORKBENCH:查看图片`)} · ${e.originalName}`:K(`@WORKBENCH:查看图片`)}return(n,r)=>{let a=j;return H(),S(`div`,ji,[t.view===`kanban`?(H(),S(`div`,{key:0,class:w([`kb__columns`,{"is-animated":ee.value}]),style:c(_.value)},[(H(!0),S(O,null,E(g.value,n=>(H(),S(`section`,{key:n.key,class:w([`kb-col`,[`kb-col--`+n.key,{"is-collapsed":n.collapsed}]]),"aria-hidden":n.collapsed?`true`:void 0},[b(`header`,Ni,[b(`span`,{class:w([`kb-col__dot`,{"is-live":n.total>0}]),"aria-hidden":`true`},null,2),b(`h3`,Pi,f(x(K)(n.labelKey)),1),b(`span`,Fi,f(n.total),1)]),b(`ul`,Ii,[(H(!0),S(O,null,E(n.tasks,i=>(H(),S(`li`,{key:i.id,class:w([`kb-card`,{"is-running":i.runningJobs>0,"has-error":k(i),"is-opened":i.id===t.openedTaskId}]),"data-task-id":i.id,"aria-current":i.id===t.openedTaskId?`true`:void 0,role:`button`,tabindex:`0`,onClick:e=>o(`open-task`,i),onKeydown:[F(N(e=>o(`open-task`,i),[`prevent`]),[`enter`]),F(N(e=>o(`open-task`,i),[`prevent`]),[`space`])],onContextmenu:e=>d(i,n.key,e)},[M(i).length>0?(H(),S(`button`,{key:0,type:`button`,class:`kb-card__cover`,title:z(M(i)[0]),"aria-label":z(M(i)[0]),onClick:N(e=>L(i),[`stop`]),onKeydown:r[0]||=N(()=>{},[`stop`])},[b(`img`,{class:`kb-card__cover-img`,src:ue(M(i)[0].id),alt:M(i)[0].originalName,loading:`lazy`,decoding:`async`,onError:e=>le(M(i)[0].id)},null,40,zi),M(i).length>1?(H(),S(`span`,Bi,` +`+f(M(i).length-1),1)):W(``,!0)],40,Ri)):W(``,!0),b(`div`,Vi,[t.showProjectLabel&&D(i)?(H(),S(`span`,{key:0,class:`kb-card__project-chip`,style:c(x(Ai)(i.projectPath)),title:i.projectPath},f(D(i)),13,Hi)):W(``,!0),b(`p`,{class:`kb-card__title`,title:ie(i)},f(ie(i)||x(K)(`@WORKBENCH:未命名任务`)),9,Ui),b(`span`,Wi,f(x(it)(y(i))),1)]),ne(i)?(H(),S(`p`,{key:1,class:`kb-card__spent`,title:C(i)},f(x(jn)(i)),9,Gi)):W(``,!0),i.autoCompleted?(H(),S(`p`,{key:2,class:`kb-card__auto-done`,title:T(i)},f(x(K)(`@WORKBENCH:AI 判定完成`)),9,Ki)):W(``,!0),i.live?(H(),S(`div`,qi,[b(`p`,Ji,[A(i)?(H(),S(`span`,{key:0,class:`kb-card__live-agent`,title:x(ke)(A(i))},[e(Fe,{executor:A(i),class:`kb-card__live-agent-icon`},null,8,[`executor`])],8,Yi)):W(``,!0),b(`span`,null,f(x(Mn)(i)),1),i.live.toolCallCount?(H(),S(`span`,{key:1,title:i.live.toolMix||``},f(x(K)(`@WORKBENCH:工具 {n} 次`,{n:i.live.toolCallCount})),9,Xi)):W(``,!0),i.live.pid?(H(),S(`span`,Zi,`PID `+f(i.live.pid),1)):W(``,!0),x(Ne)(i.live.silentMs)===null?W(``,!0):(H(),S(`span`,Qi,f(x(K)(`@WORKBENCH:静默 {elapsed}`,{elapsed:x(rt)(x(Ne)(i.live.silentMs))})),1))]),ae(i)===null?W(``,!0):(H(),S(`p`,{key:0,class:`kb-card__live-progress`,title:x(K)(x(Re))},[b(`span`,{class:`kb-card__live-bar`,role:`progressbar`,"aria-valuenow":ae(i),"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":ie(i)||x(K)(`@WORKBENCH:未命名任务`)},[b(`i`,{class:`kb-card__live-bar-fill`,style:c({width:ae(i)+`%`})},null,4)],8,ea),b(`span`,ta,[b(`span`,na,f(x(K)(x(Ue))),1),R(f(ae(i))+`% `,1)])],8,$i)),i.live.lastTool?(H(),S(`p`,{key:1,class:`kb-card__live-line is-tool`,title:i.live.lastTool},f(i.live.lastTool),9,ra)):W(``,!0),i.live.lastThought?(H(),S(`p`,{key:2,class:`kb-card__live-line is-thought`,title:i.live.lastThought},[b(`span`,aa,f(x(K)(`@WORKBENCH:最近思考`)),1),R(f(i.live.lastThought),1)],8,ia)):W(``,!0),i.live.lastLine?(H(),S(`p`,{key:3,class:`kb-card__live-line`,title:i.live.lastLine},[b(`span`,sa,f(x(K)(`@WORKBENCH:最新回复`)),1),R(f(i.live.lastLine),1)],8,oa)):W(``,!0)])):i.lastReply?(H(),S(`p`,{key:4,class:`kb-card__reply`,title:i.lastReply},[A(i)?(H(),S(`span`,{key:0,class:`kb-card__quote-agent`,title:x(ke)(A(i))},[e(Fe,{executor:A(i),class:`kb-card__quote-agent-icon`},null,8,[`executor`])],8,la)):W(``,!0),b(`span`,ua,f(i.lastReply),1)],8,ca)):W(``,!0),k(i)&&i.runningJobs===0?(H(),S(`button`,{key:5,type:`button`,class:`kb-card__retry`,title:x(K)(`@WORKBENCH:重新执行这条任务`),onClick:N(e=>o(`run-task`,i),[`stop`]),onKeydown:r[1]||=N(()=>{},[`stop`])},f(x(K)(`@WORKBENCH:重试`)),41,da)):W(``,!0),b(`div`,fa,[i.runningJobs===0?(H(),S(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:x(K)(`@WORKBENCH:执行`),onClick:N(e=>o(`run-task`,i),[`stop`]),onKeydown:r[2]||=N(()=>{},[`stop`])},f(x(K)(`@WORKBENCH:执行`)),41,pa)):(H(),S(`button`,{key:1,type:`button`,class:`kb-card__btn kb-card__btn--stop`,title:x(K)(`@WORKBENCH:停止`),"aria-label":x(K)(`@WORKBENCH:停止`),onClick:N(e=>o(`stop-task`,i),[`stop`]),onKeydown:r[3]||=N(()=>{},[`stop`])},f(x(K)(`@WORKBENCH:停止`)),41,ma)),i.column===`done`?i.manualDoneAt?(H(),S(`button`,{key:3,type:`button`,class:`kb-card__btn`,title:x(K)(`@WORKBENCH:撤销完成标记,退回待处理`),"aria-label":x(K)(`@WORKBENCH:撤销完成标记`),onClick:N(e=>o(`reopen-task`,i),[`stop`]),onKeydown:r[5]||=N(()=>{},[`stop`])},f(x(K)(`@WORKBENCH:撤销`)),41,ga)):W(``,!0):(H(),S(`button`,{key:2,type:`button`,class:`kb-card__btn kb-card__btn--done`,title:x(K)(`@WORKBENCH:标记为已完成`),"aria-label":x(K)(`@WORKBENCH:标记为已完成`),onClick:N(e=>o(`complete-task`,i),[`stop`]),onKeydown:r[4]||=N(()=>{},[`stop`])},f(x(K)(`@WORKBENCH:完成`)),41,ha)),b(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:x(K)(`@WORKBENCH:删除`),"aria-label":x(K)(`@WORKBENCH:删除`),onClick:N(e=>o(`delete-task`,i),[`stop`]),onKeydown:r[6]||=N(()=>{},[`stop`])},`×`,40,_a)])],42,Li))),128)),n.key===`todo`?(H(),S(`li`,va,[b(`button`,{type:`button`,class:w([`kb-col__add-btn`,{"kb-col__add-btn--solo":n.tasks.length===0}]),onClick:r[7]||=e=>o(`create-task`)},[r[11]||=b(`span`,{class:`kb-col__add-plus`,"aria-hidden":`true`},`+`,-1),b(`span`,null,f(x(K)(`@WORKBENCH:新建任务`)),1)],2)])):n.tasks.length===0?(H(),S(`li`,ya,[b(`span`,null,f(x(K)(`@WORKBENCH:暂无任务`)),1)])):W(``,!0),n.hidden>0?(H(),S(`li`,ba,[b(`button`,{type:`button`,class:`kb-col__more-btn`,onClick:r[8]||=e=>h.value+=Wa},f(x(K)(`@WORKBENCH:显示更早的 {n} 条`,{n:Math.min(Wa,n.hidden)})),1)])):W(``,!0)])],10,Mi))),128))],6)):(H(),S(`div`,xa,[b(`table`,Sa,[b(`thead`,null,[b(`tr`,null,[b(`th`,Ca,f(x(K)(`@WORKBENCH:任务`)),1),b(`th`,wa,f(x(K)(`@WORKBENCH:状态`)),1),b(`th`,Ta,f(x(K)(`@WORKBENCH:时间`)),1)])]),b(`tbody`,null,[(H(!0),S(O,null,E(re.value,n=>(H(),S(`tr`,{key:n.id,class:`kb-table__row`,tabindex:`0`,onClick:e=>o(`open-task`,n),onKeydown:[F(N(e=>o(`open-task`,n),[`prevent`]),[`enter`]),F(N(e=>o(`open-task`,n),[`prevent`]),[`space`])]},[b(`td`,Da,[M(n).length>0?(H(),S(`button`,{key:0,type:`button`,class:`kb-table__shots`,title:z(M(n)[0]),onClick:N(e=>L(n),[`stop`]),onKeydown:r[9]||=N(()=>{},[`stop`])},f(x(K)(`@WORKBENCH:{n} 张图`,{n:M(n).length})),41,Oa)):W(``,!0),b(`span`,ka,f(ie(n)||x(K)(`@WORKBENCH:未命名任务`)),1),t.showProjectLabel&&D(n)?(H(),S(`span`,{key:1,class:`kb-table__project`,style:c(x(Ai)(n.projectPath)),title:n.projectPath},f(D(n)),13,Aa)):W(``,!0),n.live?(H(),S(`span`,ja,[A(n)?(H(),S(`span`,{key:0,class:`kb-table__agent`,title:x(ke)(A(n))},[e(Fe,{executor:A(n),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Ma)):W(``,!0),R(` `+f(oe(n))+` `,1),ae(n)===null?W(``,!0):(H(),S(`span`,{key:1,class:`kb-table__pct`,title:x(K)(x(Re))},f(x(K)(x(Ue)))+` `+f(ae(n))+`% `,9,Na)),x(Ne)(n.live.silentMs)===null?W(``,!0):(H(),S(`span`,Pa,f(x(K)(`@WORKBENCH:静默 {elapsed}`,{elapsed:x(rt)(x(Ne)(n.live.silentMs))})),1))])):n.lastReply?(H(),S(`span`,Fa,[A(n)?(H(),S(`span`,{key:0,class:`kb-table__agent`,title:x(ke)(A(n))},[e(Fe,{executor:A(n),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Ia)):W(``,!0),R(f(n.lastReply),1)])):W(``,!0)]),b(`td`,La,[b(`span`,{class:w([`kb-table__status`,`is-`+n.column])},f(x(K)(l.find(e=>e.key===n.column).labelKey)),3)]),b(`td`,Ra,[b(`span`,{class:`kb-table__time`,title:C(n)},[ne(n)?(H(),S(O,{key:0},[b(`span`,Ba,f(x(jn)(n)),1),r[12]||=b(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):W(``,!0),n.autoCompleted?(H(),S(O,{key:1},[b(`span`,{class:`kb-table__auto-done`,title:T(n)},f(x(K)(`@WORKBENCH:AI 判定完成`)),9,Va),r[13]||=b(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):W(``,!0),b(`span`,null,f(x(it)(y(n))),1)],8,za)])],40,Ea))),128)),re.value.length===0?(H(),S(`tr`,Ha,[b(`td`,Ua,f(x(K)(`@WORKBENCH:暂无任务`)),1)])):W(``,!0)])])])),I.value?(H(),i(a,{key:2,"url-list":I.value.urls,"initial-index":I.value.index,"hide-on-click-modal":!0,teleported:!0,onClose:de},null,8,[`url-list`,`initial-index`])):W(``,!0),e(Ei,{visible:u.value.visible,x:u.value.x,y:u.value.y,task:u.value.task,projects:t.projects,onMove:p,onClose:r[10]||=e=>u.value.visible=!1},null,8,[`visible`,`x`,`y`,`task`,`projects`])])}}}),[[`__scopeId`,`data-v-a42d7c37`]]);u(),z(),t(),pe();var Ka=[`title`,`aria-label`],qa={class:`oc__rail-text`},Ja={class:`oc__head`},Ya={class:`oc__title`},Xa=[`title`,`aria-label`],Za={class:`oc__report-head`},Qa={class:`oc__panel-title`},$a=[`value`,`title`,`aria-label`],eo=[`value`],to=[`disabled`,`title`],no={class:`oc__report-list`},ro={key:0,class:`rp`},io={class:`rp__head`},ao=[`title`],oo={class:`rp__count`},so={class:`rp__time`},co=[`title`,`aria-label`],lo=[`title`],uo=[`aria-valuenow`,`aria-label`],fo={class:`rp__percent`},po={class:`rp__percent-tag`},mo={key:1,class:`rp__body`},ho=[`title`],go=[`title`],_o={class:`oc-empty__text`},vo=[`aria-expanded`,`title`],yo={class:`oc__sect-title`},bo={class:`oc__sect-meta`},xo={class:`oc__sect-brief`},So={class:`oc__history-list`},Co=[`onClick`],wo={class:`oc__history-time`},To={class:`oc__history-pct`},Eo={class:`oc__history-sum`},Do=[`aria-expanded`,`title`],Oo={class:`oc__sect-title`},ko={class:`oc__sect-meta`},Ao={class:`oc__git-name`},jo={key:0,class:`oc__sect-brief`},Mo={class:`oc__git-list`},No={class:`oc__git-label`},Po={class:`oc__git-label`},Fo={class:`oc__git-value`},Io={class:`oc__git-label`},Lo={class:`oc__git-value`},Ro=[`placeholder`],zo={key:0},Bo={key:1},Vo={class:`oc__compose-foot`},Ho=[`disabled`,`title`,`aria-label`],Uo=[`title`,`aria-label`],Wo=[`title`],Go=[`title`],Ko=[`title`],qo=[`checked`],Jo={class:`oc__foot-label`},Yo=[`disabled`],Xo={class:`oc__hint`},Zo=`/api/workbench/orchestrator/attachments`,Qo=`wb.ocInputHeight.v2`,$o=76,es=20,ts=q(m({__name:`OrchestratorConsole`,props:{running:{},selectedProject:{},dispatching:{type:Boolean},todayDone:{},collapsed:{type:Boolean},defaultPrompt:{},projectPrompts:{},reports:{},reportIntervalMs:{},generatingReport:{type:Boolean},maxInstructionChars:{}},emits:[`toggle-collapse`,`open-prompt-settings`,`generate-report`,`set-report-interval`,`locate-task`,`dispatch`],setup(t,{expose:r,emit:a}){let o=t,l=a,u=P(``),m=P(!0),h=P(!0),{active:_}=Ye(),v=P([]),y=G(()=>({kind:`draft`,list:v.value,replace:e=>{v.value=e}})),{isUploading:ne,isImageAttachment:T,humanSize:D,onAttachmentPaste:k,onAttachmentDrop:ae,removeAttachment:j,pickAttachmentFile:oe}=Gn(),se=G(()=>ne(`draft`)),ce=P(!1),le=P(null),M=G(()=>_.value===`codearts`),F=G(()=>le.value??M.value),I=G(()=>v.value.some(e=>T(e)));function z(e){le.value=e.target.checked}function B(e){e.stopPropagation(),k(e,y.value)}function pe(e){ce.value=!1,ae(e,y.value)}function he(){oe(y.value)}function U(e){j(y.value,e)}function ge(){v.value=[]}function _e(){u.value=``}r({clearAttachments:ge,clearDraft:_e});let ye=G(()=>o.selectedProject?.key||``),be=G(()=>(o.defaultPrompt||``).trim()),xe=G(()=>{let e=ye.value;return e?(o.projectPrompts?.[e]?.prompt||``).trim():``}),Se=G(()=>Object.values(o.projectPrompts||{}).some(e=>(e?.prompt||``).trim().length>0)),Ce=G(()=>!!be.value||Se.value),we=G(()=>{let e=!!be.value,t=ye.value?xe.value?`project`:`none`:Se.value?`target`:`none`;return K(e&&t===`project`?`@WORKBENCH:全局 + 本项目`:e&&t===`target`?`@WORKBENCH:全局 + 落点项目`:e?`@WORKBENCH:全局`:t===`project`?`@WORKBENCH:本项目`:t===`target`?`@WORKBENCH:落点项目`:`@WORKBENCH:未设置`)}),Te=G(()=>u.value.trim().length),Ee=G(()=>o.maxInstructionChars||1e5),De=G(()=>Te.value>Ee.value),q=G(()=>!De.value&&Te.value>=Ee.value*.9),J=G(()=>u.value.trim().length>0&&!o.dispatching&&!se.value&&!De.value);function Y(){J.value&&l(`dispatch`,{text:u.value.trim(),autoRun:m.value,attachments:v.value,projectPath:o.selectedProject?o.selectedProject.path:``,useDefaultPrompt:h.value,executor:_.value,imageText:F.value})}function Oe(e){e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||(e.preventDefault(),Y())}function ke(){try{let e=localStorage.getItem(Qo);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=$o?Math.round(t):null}catch{return null}}let Ae=P(null),je=P(ke()),X=G(()=>{let e={};return je.value&&(e.height=`${je.value}px`),e}),Ne=null,Pe=!1,Fe=!0;function Be(e){let t=Ae.value;if(!t)return;let n=t.getBoundingClientRect();Pe=n.right-e.clientX<=es&&n.bottom-e.clientY<=es}function Z(){Pe=!1}function Ve(e){let t=Math.round(e.offsetHeight);if(!(t<$o||t===je.value)){je.value=t;try{localStorage.setItem(Qo,String(t))}catch{}}}s(()=>{let e=Ae.value;e&&(window.addEventListener(`mouseup`,Z),!(typeof ResizeObserver>`u`)&&(Ne=new ResizeObserver(()=>{if(Fe){Fe=!1;return}let t=parseFloat(getComputedStyle(e).maxHeight),n=Number.isFinite(t)&&e.offsetHeight>=t-1;(Pe||!n)&&Ve(e)}),Ne.observe(e)))}),C(()=>{window.removeEventListener(`mouseup`,Z),Ne?.disconnect(),Ne=null});let We=P(null),Ge=G(()=>(o.running||[]).length),Ke=G(()=>{let e=o.running||[];return{job:new Set(e.map(e=>e.jobId).filter(Boolean)),task:new Set(e.map(e=>e.taskId).filter(Boolean))}});function Q(e){if(!e)return!1;let t=Ke.value;return(e.tasks||[]).some(e=>e.jobId&&t.job.has(e.jobId)||!e.jobId&&!!e.taskId&&t.task.has(e.taskId))}let qe=G(()=>(o.reports||[]).find(Q)||null),Je=G(()=>{let e=$.value;if(!e)return null;let t=e.tasks||[],n=Ke.value;return(t.find(e=>e.jobId&&n.job.has(e.jobId)||!e.jobId&&!!e.taskId&&n.task.has(e.taskId))||t.find(e=>!!e.taskId))?.taskId||null}),$=G(()=>{let e=o.reports||[];if(!e.length)return null;if(We.value){let t=e.find(e=>e.id===We.value);if(t)return t}return qe.value}),Xe=G(()=>!!$.value&&!Q($.value)),Ze=G(()=>(o.reports||[]).length?Ge.value>0?K(`@WORKBENCH:这批任务还没有进度报告`):K(`@WORKBENCH:当前没有正在执行的任务`):K(`@WORKBENCH:暂无进度报告`)),Qe=G(()=>(o.reports||[]).length?K(`@WORKBENCH:最新那份报告讲的任务已经跑完了,要回看可以从历史报告里点开`):``);function $e(e){We.value=e.id}let et=P(null),nt=P(!0),rt=P(!1);function ot(){let e=et.value;e&&!nt.value&&(rt.value=e.scrollHeight-e.clientHeight>2)}function st(){nt.value=!nt.value,nt.value||n(ot)}let ct=null;V(et,e=>{ct?.disconnect(),ct=null,e&&(ct=new ResizeObserver(()=>ot()),ct.observe(e))}),C(()=>{ct?.disconnect(),ct=null}),V(()=>$.value?.id,()=>{nt.value=!0,rt.value=!1,n(ot)});function lt(e){let t=ze(e.percent);return t===null?``:t+`%`}let ut=G(()=>ze($.value?.percent));function dt(e){let t=String(e.text||``).replace(/\s+/g,` `).trim();return t?t.length>42?t.slice(0,42)+`…`:t:e.errorCode?K(He(e.errorCode)):K(`@WORKBENCH:当时没有任务在执行`)}function ft(e){return e.errorCode?K(He(e.errorCode)):e.tasks.length?K(`@WORKBENCH:模型没有返回内容`):K(`@WORKBENCH:生成这份报告时没有任务在执行`)}function pt(e){let t=e.target,n=Number(t.value);Me.includes(n)&&l(`set-report-interval`,n)}let mt=G(()=>{let e=o.selectedProject;if(!e)return[];let t=[];if(e.exists===!1)return t.push({label:K(`@WORKBENCH:工作区`),value:K(`@WORKBENCH:目录不存在`),tone:`danger`}),t;let n=e.git;return!n||n.isGitRepo===null?(t.push({label:K(`@WORKBENCH:Git 状态`),value:K(`@WORKBENCH:未知`),tone:``}),t):n.isGitRepo?(t.push({label:K(`@WORKBENCH:分支`),value:n.detached?K(`@WORKBENCH:游离 HEAD`):n.branch||K(`@WORKBENCH:未知`),tone:``}),t.push({label:K(`@WORKBENCH:工作区`),value:n.changed>0?K(`@WORKBENCH:未提交 {n} 项`,{n:n.changed}):K(`@WORKBENCH:干净`),tone:n.changed>0?`warn`:``}),n.hasUpstream&&(n.ahead>0||n.behind>0)&&t.push({label:K(`@WORKBENCH:与上游`),value:K(`@WORKBENCH:领先 {ahead} / 落后 {behind}`,{ahead:n.ahead,behind:n.behind}),tone:n.behind>0?`warn`:``}),t):(t.push({label:K(`@WORKBENCH:Git 状态`),value:K(`@WORKBENCH:不是 Git 仓库`),tone:``}),t)}),ht={history:`wb.ocHistoryOpen.v1`,git:`wb.ocGitOpen.v1`};function gt(e){try{return localStorage.getItem(e)===`1`}catch{return!1}}let _t=P(gt(ht.history)),vt=P(gt(ht.git));function yt(e){let t=e===`history`?_t:vt;t.value=!t.value;try{localStorage.setItem(ht[e],t.value?`1`:`0`)}catch{}}function xt(){_t.value||yt(`history`)}let St=G(()=>mt.value.slice(0,2).map(e=>e.value).join(` · `));return(n,r)=>{let a=d;return H(),S(`aside`,{class:w([`oc`,{"is-collapsed":t.collapsed,"is-report-empty":!t.collapsed&&!$.value}])},[t.collapsed?(H(),S(`button`,{key:0,type:`button`,class:`oc__rail`,title:x(K)(`@WORKBENCH:展开主 Agent 控制台`),"aria-label":x(K)(`@WORKBENCH:展开主 Agent 控制台`),"aria-expanded":!1,onClick:r[0]||=e=>l(`toggle-collapse`)},[e(a,{class:`oc__rail-icon`},{default:L(()=>[e(x(ve))]),_:1}),b(`span`,qa,f(x(K)(`@WORKBENCH:主 Agent 控制台`)),1)],8,Ka)):W(``,!0),A(b(`header`,Ja,[b(`h3`,Ya,f(x(K)(`@WORKBENCH:主 Agent 控制台`)),1),b(`button`,{type:`button`,class:`oc__collapse`,title:x(K)(`@WORKBENCH:收起主 Agent 控制台`),"aria-label":x(K)(`@WORKBENCH:收起主 Agent 控制台`),"aria-expanded":!0,onClick:r[1]||=e=>l(`toggle-collapse`)},[e(a,null,{default:L(()=>[e(x(ue))]),_:1})],8,Xa)],512),[[fe,!t.collapsed]]),A(b(`div`,{class:w([`oc__report`,{"is-empty":!$.value}])},[b(`div`,Za,[b(`p`,Qa,f(x(K)(`@WORKBENCH:进度报告`)),1),b(`select`,{class:`oc__interval`,value:String(t.reportIntervalMs??0),title:x(K)(`@WORKBENCH:自动报告的间隔(关掉后仍可随时点「立即报告」)`),"aria-label":x(K)(`@WORKBENCH:自动报告间隔`),onChange:pt},[(H(!0),S(O,null,E(x(Me),e=>(H(),S(`option`,{key:e,value:String(e)},f(x(K)(x(Ie)(e),x(Le)(e))),9,eo))),128))],40,$a),b(`button`,{type:`button`,class:`oc__report-run`,disabled:t.generatingReport,title:x(K)(`@WORKBENCH:让主 Agent 现在汇报一次正在执行的任务进度`),onClick:r[2]||=e=>l(`generate-report`)},[e(a,{class:w([`oc__report-run-icon`,{"is-spin":t.generatingReport}])},{default:L(()=>[e(x(te))]),_:1},8,[`class`]),b(`span`,null,f(t.generatingReport?x(K)(`@WORKBENCH:生成中…`):x(K)(`@WORKBENCH:立即报告`)),1)],8,to)]),b(`ul`,no,[$.value?(H(),S(`li`,ro,[b(`div`,io,[b(`span`,{class:w([`rp__trigger`,{"is-auto":$.value.trigger===`auto`}])},f($.value.trigger===`auto`?x(K)(`@WORKBENCH:自动`):x(K)(`@WORKBENCH:手动`)),3),Xe.value?(H(),S(`span`,{key:0,class:`rp__stale`,title:x(K)(`@WORKBENCH:这份报告讲的任务已经跑完了,内容只反映生成那一刻的情况`)},f(x(K)(`@WORKBENCH:已结束`)),9,ao)):W(``,!0),b(`span`,oo,f(x(K)(`@WORKBENCH:{n} 个任务进行中`,{n:$.value.tasks.length})),1),b(`span`,so,f(x(at)($.value.at)),1),Je.value?(H(),S(`button`,{key:1,type:`button`,class:`rp__locate`,title:x(K)(`@WORKBENCH:在面板中定位这份报告讲的任务`),"aria-label":x(K)(`@WORKBENCH:在面板中定位这份报告讲的任务`),onClick:r[3]||=e=>l(`locate-task`,Je.value)},[e(a,null,{default:L(()=>[e(x(g))]),_:1})],8,co)):W(``,!0)]),ut.value===null?W(``,!0):(H(),S(`div`,{key:0,class:`rp__progress`,title:x(K)(x(Re))},[b(`span`,{class:`rp__bar`,role:`progressbar`,"aria-valuenow":ut.value,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":x(K)(x(Ue))},[b(`i`,{class:`rp__bar-fill`,style:c({width:ut.value+`%`})},null,4)],8,uo),b(`span`,fo,[b(`span`,po,f(x(K)(x(Ue))),1),R(f(ut.value)+`% `,1)])],8,lo)),$.value.text?(H(),S(`div`,mo,[b(`p`,{ref_key:`textEl`,ref:et,class:w([`rp__text`,{"is-clamped":rt.value&&!nt.value,"is-expanded":nt.value}])},f($.value.text),3),rt.value||nt.value?(H(),S(`button`,{key:0,type:`button`,class:`rp__more`,onClick:st},f(nt.value?x(K)(`@WORKBENCH:收起`):x(K)(`@WORKBENCH:展开全文`)),1)):W(``,!0)])):(H(),S(`p`,{key:2,class:`rp__notice`,title:$.value.errorDetail},f(ft($.value)),9,ho))])):(H(),S(`li`,{key:1,class:`oc-empty`,title:Qe.value},[b(`span`,_o,f(Ze.value),1),(t.reports||[]).length>1?(H(),S(`button`,{key:0,type:`button`,class:`oc-empty__action`,onClick:xt},f(x(K)(`@WORKBENCH:回看历史报告`)),1)):W(``,!0)],8,go))]),(t.reports||[]).length>1?(H(),S(`div`,{key:0,class:w([`oc__history`,{"is-collapsed":!_t.value}])},[b(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":_t.value,title:_t.value?x(K)(`@WORKBENCH:收起`):x(K)(`@WORKBENCH:展开`),onClick:r[4]||=e=>yt(`history`)},[e(a,{class:`oc__sect-caret`},{default:L(()=>[(H(),i(ee(_t.value?x(re):x(ie))))]),_:1}),b(`span`,yo,f(x(K)(`@WORKBENCH:历史报告`)),1),b(`span`,bo,[b(`span`,xo,f(x(K)(`@WORKBENCH:共 {n} 份`,{n:(t.reports||[]).length})),1)])],8,vo),A(b(`ul`,So,[(H(!0),S(O,null,E(t.reports,e=>(H(),S(`li`,{key:e.id},[b(`button`,{type:`button`,class:w([`oc__history-item`,{"is-active":e.id===$.value?.id}]),onClick:t=>$e(e)},[b(`span`,wo,f(x(at)(e.at)),1),b(`span`,To,f(lt(e)),1),b(`span`,Eo,f(dt(e)),1)],10,Co)]))),128))],512),[[fe,_t.value]])],2)):W(``,!0)],2),[[fe,!t.collapsed]]),A(b(`div`,{class:w([`oc__git`,{"is-collapsed":!vt.value}])},[b(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":vt.value,title:vt.value?x(K)(`@WORKBENCH:收起`):x(K)(`@WORKBENCH:展开`),onClick:r[5]||=e=>yt(`git`)},[e(a,{class:`oc__sect-caret`},{default:L(()=>[(H(),i(ee(vt.value?x(re):x(ie))))]),_:1}),b(`span`,Oo,f(x(K)(`@WORKBENCH:项目概览`)),1),b(`span`,ko,[b(`span`,Ao,f(t.selectedProject?t.selectedProject.name:x(K)(`@WORKBENCH:全部项目`)),1),!vt.value&&St.value?(H(),S(`span`,jo,f(St.value),1)):W(``,!0)])],8,Do),A(b(`dl`,Mo,[(H(!0),S(O,null,E(mt.value,e=>(H(),S(O,{key:e.label},[b(`dt`,No,f(e.label),1),b(`dd`,{class:w([`oc__git-value`,{"is-warn":e.tone===`warn`,"is-danger":e.tone===`danger`}])},f(e.value),3)],64))),128)),b(`dt`,Po,f(x(K)(`@WORKBENCH:今日完成`)),1),b(`dd`,Fo,f(t.todayDone),1),b(`dt`,Io,f(x(K)(`@WORKBENCH:最后活跃`)),1),b(`dd`,Lo,f(t.selectedProject&&x(it)(t.selectedProject.stats.lastActiveAt)||`—`),1)],512),[[fe,vt.value]])],2),[[fe,!t.collapsed]]),A(b(`div`,{class:`oc__compose`,onPaste:B,onDrop:N(pe,[`prevent`]),onDragover:r[13]||=N(e=>ce.value=!0,[`prevent`]),onDragleave:r[14]||=e=>ce.value=!1},[A(b(`textarea`,{ref_key:`inputRef`,ref:Ae,class:w([`oc__input`,{"is-over":De.value}]),"onUpdate:modelValue":r[6]||=e=>u.value=e,style:c(X.value),rows:`3`,placeholder:x(K)(`@WORKBENCH:给主 Agent 下一条指令,例如:把登录模块的错误处理重构一遍`),onKeydown:Oe,onPaste:B,onMousedown:Be},null,46,Ro),[[me,u.value]]),v.value.length>0||se.value?(H(),i(bt,{key:0,attachments:v.value,"is-image":x(T),"human-size":x(D),"is-uploading":se.value,"is-paste-hover":ce.value,"on-pick":he,"on-remove":U,"raw-base":Zo,onPaste:B,onDrop:pe,onDragover:r[7]||=N(e=>ce.value=!0,[`prevent`]),onDragenter:r[8]||=N(e=>ce.value=!0,[`prevent`]),onDragleave:r[9]||=e=>ce.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`])):W(``,!0),Te.value>0?(H(),S(`p`,{key:1,class:w([`oc__count`,{"is-warn":q.value,"is-over":De.value}])},[De.value?(H(),S(`span`,zo,f(x(K)(`@WORKBENCH:超出上限 {max} 字,请精简后再派发(超出的部分不会被发出)`,{max:Ee.value})),1)):(H(),S(`span`,Bo,f(Te.value)+` / `+f(Ee.value),1))],2)):W(``,!0),b(`div`,Vo,[b(`button`,{type:`button`,class:`oc__attach`,disabled:se.value,title:x(K)(`@WORKBENCH:添加附件(也可直接粘贴或拖入文件)`),"aria-label":x(K)(`@WORKBENCH:添加附件`),onClick:he},[e(a,null,{default:L(()=>[...r[15]||=[b(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[b(`path`,{d:`M15 7l-6.5 6.5a1.5 1.5 0 0 0 3 3l6.5-6.5a3 3 0 0 0-6-6l-6.5 6.5a4.5 4.5 0 0 0 9 9l6.5-6.5`})],-1)]]),_:1})],8,Ho),b(`button`,{type:`button`,class:w([`oc__attach`,{"is-on":Ce.value}]),title:x(K)(`@WORKBENCH:设置派发时自动附加的预设提示词(全局 / 各项目)`),"aria-label":x(K)(`@WORKBENCH:预设提示词设置`),onClick:r[10]||=e=>l(`open-prompt-settings`)},[e(a,null,{default:L(()=>[...r[16]||=[b(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`},[b(`path`,{d:`M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 0 0-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 0 0-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 0 0-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 0 0-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 0 0 1.066-2.573c-.94-1.543.826-3.31 2.37-2.37c1 .608 2.296.07 2.572-1.065`}),b(`path`,{d:`M9 12a3 3 0 1 0 6 0a3 3 0 0 0-6 0`})],-1)]]),_:1})],10,Uo),b(`label`,{class:`oc__autorn`,title:x(K)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[A(b(`input`,{type:`checkbox`,"onUpdate:modelValue":r[11]||=e=>m.value=e},null,512),[[de,m.value]]),b(`span`,null,f(x(K)(`@WORKBENCH:立即执行`)),1)],8,Wo),Ce.value?(H(),S(`label`,{key:0,class:`oc__autorn`,title:x(K)(`@WORKBENCH:取消勾选则本次派发的任务不带预设提示词(设置本身不受影响)`)},[A(b(`input`,{type:`checkbox`,"onUpdate:modelValue":r[12]||=e=>h.value=e},null,512),[[de,h.value]]),b(`span`,null,f(x(K)(`@WORKBENCH:附带预设提示词({state})`,{state:we.value})),1)],8,Go)):W(``,!0),I.value?(H(),S(`label`,{key:1,class:`oc__autorn`,title:x(K)(`@WORKBENCH:先用 AI 把图片描述成文字再派发(codearts 读不了图时必开)`)},[b(`input`,{type:`checkbox`,checked:F.value,onChange:z},null,40,qo),b(`span`,null,f(x(K)(`@WORKBENCH:图片转文字`)),1)],8,Ko)):W(``,!0),b(`span`,Jo,f(x(K)(`@WORKBENCH:任务执行器`)),1),e(tt,{title:x(K)(`@WORKBENCH:本次派发使用的执行器(与执行按钮的临时切换共用)`)},null,8,[`title`]),b(`button`,{type:`button`,class:`oc__send`,disabled:!J.value,onClick:Y},[e(a,{class:`oc__send-icon`},{default:L(()=>[e(x(p))]),_:1}),b(`span`,null,f(t.dispatching?x(K)(`@WORKBENCH:派发中…`):x(K)(`@WORKBENCH:派发`)),1)],8,Yo)]),b(`p`,Xo,[t.selectedProject?(H(),S(O,{key:0},[R(f(x(K)(`@WORKBENCH:指令会在「{name}」下新建一个任务;Enter 派发,Shift+Enter 换行`,{name:t.selectedProject.name})),1)],64)):(H(),S(O,{key:1},[R(f(x(K)(`@WORKBENCH:指令落到哪个项目由主 Agent 判断;Enter 派发,Shift+Enter 换行`)),1)],64))])],544),[[fe,!t.collapsed]])],2)}}}),[[`__scopeId`,`data-v-f7973fc1`]]);u(),z(),t(),pe();var ns={class:`pd`},rs={class:`pd__intro`},is={class:`pd__field`},as={class:`pd__head`},os={class:`pd__label`,for:`pd-global`},ss={class:`pd__count`},cs=[`placeholder`],ls={class:`pd__field`},us={class:`pd__head`},ds={class:`pd__label`,for:`pd-project`},fs={key:0,class:`pd__count`},ps=[`disabled`,`placeholder`],ms={class:`pd__hint`},hs={class:`pd__foot`},gs=[`disabled`],_s=4e3,vs=q(m({__name:`WorkbenchDefaultPromptDialog`,props:{modelValue:{type:Boolean},defaultPrompt:{},projectPath:{},projectName:{},projectPrompt:{},saving:{type:Boolean}},emits:[`update:modelValue`,`save`],setup(e,{emit:t}){let n=e,r=t,a=P(``),o=P(``);V(()=>n.modelValue,e=>{e&&(a.value=n.defaultPrompt||``,o.value=n.projectPrompt||``)});let s=G(()=>!!n.projectPath),c=G(()=>a.value.trim()!==(n.defaultPrompt||``).trim()||s.value&&o.value.trim()!==(n.projectPrompt||``).trim());function l(){n.saving||r(`save`,{globalPrompt:a.value,projectPrompt:o.value})}function u(){r(`update:modelValue`,!1)}return(t,n)=>(H(),i(je,{"model-value":e.modelValue,title:x(K)(`@WORKBENCH:预设提示词`),width:`min(640px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[2]||=e=>r(`update:modelValue`,e)},{footer:L(()=>[b(`div`,hs,[b(`button`,{type:`button`,class:`pd__btn`,onClick:u},f(x(K)(`@WORKBENCH:取消`)),1),n[3]||=b(`span`,{class:`pd__foot-spacer`},null,-1),b(`button`,{type:`button`,class:`pd__btn pd__btn--primary`,disabled:e.saving||!c.value,onClick:l},f(e.saving?x(K)(`@WORKBENCH:保存中…`):x(K)(`@WORKBENCH:保存`)),9,gs)])]),default:L(()=>[b(`div`,ns,[b(`p`,rs,f(x(K)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),b(`div`,is,[b(`div`,as,[b(`label`,os,f(x(K)(`@WORKBENCH:全局提示词`)),1),b(`span`,ss,f(a.value.length)+` / `+f(_s),1)]),A(b(`textarea`,{id:`pd-global`,"onUpdate:modelValue":n[0]||=e=>a.value=e,class:`pd__area`,rows:`5`,maxlength:_s,placeholder:x(K)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,cs),[[me,a.value]])]),b(`div`,ls,[b(`div`,us,[b(`label`,ds,f(s.value?x(K)(`@WORKBENCH:「{name}」的项目提示词`,{name:e.projectName}):x(K)(`@WORKBENCH:项目提示词`)),1),s.value?(H(),S(`span`,fs,f(o.value.length)+` / `+f(_s),1)):W(``,!0)]),A(b(`textarea`,{id:`pd-project`,"onUpdate:modelValue":n[1]||=e=>o.value=e,class:`pd__area`,rows:`5`,maxlength:_s,disabled:!s.value,placeholder:s.value?x(K)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):x(K)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,ps),[[me,o.value]]),b(`p`,ms,f(s.value?x(K)(`@WORKBENCH:项目提示词追加在全局提示词之后(不覆盖全局),派发到「{name}」时一起带上`,{name:e.projectName}):x(K)(`@WORKBENCH:选中的是「全部项目」,落点由主 Agent 判断 —— 想给某个项目单设提示词,先选中它`)),1)])])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-5d14f0f1`]]);u(),t(),z(),pe();var ys=[`title`],bs={class:`board__main`},xs={class:`board__main-head`},Ss=[`title`,`aria-label`],Cs={class:`board__project-icon-slot`,"aria-hidden":`true`},ws=[`src`],Ts={key:0,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},Es={key:1,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},Ds={class:`board__main-title`},Os={class:`board__project-name`},ks=[`title`],As={key:1,class:`board__project-path`},js={class:`board__head-actions`},Ms={class:`board__view-switch`,role:`tablist`},Ns=[`aria-selected`,`aria-label`,`title`],Ps=[`aria-selected`,`aria-label`,`title`],Fs=[`placeholder`,`aria-label`],Is=[`aria-label`,`title`],Ls=[`title`],Rs=`wb.boardProject.v1`,zs=`wb.boardView.v1`,Bs=5e3,Vs=3e4,Hs=`wb.boardLayout.v1`,Us=180,Ws=420,Gs=260,Ks=900,qs=.26,Js=.46,Ys=q(m({__name:`WorkbenchBoard`,props:{openedTaskId:{}},emits:[`open-task`,`create-task`,`board-tasks`,`locate-task`],setup(t,{emit:r}){let a=t,o=r,{projects:l,boardTasks:u,currentProjectPath:p,loading:m,loadProjects:h,removeProject:g}=st();V(u,e=>o(`board-tasks`,e),{immediate:!0});let{activity:_,running:ee,dispatching:v,maxInstructionChars:te,defaultPrompt:y,projectPrompts:ne,reports:T,generatingReport:re,reportIntervalMs:E,loadOrchestrator:ie,dispatch:D,saveDefaultPrompt:O,saveProjectPrompt:k,loadReports:ae,generateReport:j,setReportInterval:oe}=Qe(),{active:se}=Ye(),ce=(()=>{try{return localStorage.getItem(Rs)}catch{return null}})(),le=P(ce||``);V(le,e=>{try{localStorage.setItem(Rs,e)}catch{}});let M=P((()=>{try{return localStorage.getItem(zs)===`list`?`list`:`kanban`}catch{return`kanban`}})());V(M,e=>{try{localStorage.setItem(zs,e)}catch{}});let ue=P(``),R=P(!1),de=P(null);function z(){R.value=!R.value,R.value&&n(()=>de.value?.focus())}function fe(){R.value=!1}function pe(){ue.value.trim()||(R.value=!1)}let U=G(()=>le.value&&l.value.find(e=>e.key===le.value)||null),{isIconBroken:ge,markIconFailed:_e}=Ge();V(l,e=>{le.value&&(e.some(e=>e.key===le.value)||(le.value=``))});let ve=!1;function ye(){if(ve||(ve=!0,ce!==null))return;let e=p.value?Q(p.value):``;e&&l.value.some(t=>t.key===e)&&(le.value=e)}let be=G(()=>{let e=new Map(l.value.map(e=>[e.key,e.name])),t={};for(let n of u.value)n.projectPath&&(t[n.projectPath]=e.get(Q(n.projectPath))||``);return t}),xe=G(()=>{if(!le.value)return u.value;let e=le.value;return u.value.filter(t=>Q(t.projectPath)===e)}),Se=G(()=>Pe(T.value,u.value)),Ce=G(()=>{let e=new Date;e.setHours(0,0,0,0);let t=e.getTime();return{projects:l.value.length,tasks:u.value.length,running:ee.value.length,todayDone:_.value.filter(e=>e.kind===`done`&&e.at&&new Date(e.at).getTime()>=t).length}});function we(e){o(`open-task`,{taskId:e.id,projectPath:e.projectPath})}let Te=null,Ee=!1,De=null;async function q(e=!0){if(!Ee){Ee=!0;try{await Promise.all([h(e),ie(e)])}finally{Ee=!1}}}function J(){document.hidden||(q(!0),ae(!0))}s(async()=>{window.addEventListener(`resize`,je),await q(!1),ae(!0),ye(),Te=setInterval(()=>{document.hidden||q(!0)},Bs),De=setInterval(()=>{document.hidden||ae(!0)},Vs),document.addEventListener(`visibilitychange`,J)}),C(()=>{window.removeEventListener(`resize`,je),Te&&=(clearInterval(Te),null),De&&=(clearInterval(De),null),document.removeEventListener(`visibilitychange`,J)});let Y=B({left:null,right:null,leftCollapsed:!1,rightCollapsed:!1});function Oe(){try{let e=localStorage.getItem(Hs);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(Y.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(Y.right=t.right),Y.leftCollapsed=t.leftCollapsed===!0,Y.rightCollapsed=t.rightCollapsed===!0}catch{}}Oe();function ke(){try{localStorage.setItem(Hs,JSON.stringify(Y))}catch{}}let Ae=P(typeof window>`u`?1920:window.innerWidth);function je(){Ae.value=window.innerWidth}let X=G(()=>Ae.value<=1024),Me=G(()=>Ae.value<=860);function Ne(e,t){let n=e===`left`?Us:Gs,r=Math.min(e===`left`?Ws:Ks,Ae.value*(e===`left`?qs:Js));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}let Fe=G(()=>{let e={};return Y.left!=null&&(e[`--wb-left-w`]=Ne(`left`,Y.left)+`px`),Y.right!=null&&!Me.value&&(e[`--wb-right-w`]=Ne(`right`,Y.right)+`px`),e}),Ie=P(null),Le=P(null);function Re(e){return Ie.value?.querySelector(e===`left`?`.board__left`:`.oc`)}function ze(e){window.removeEventListener(`mousemove`,e),document.body.style.userSelect=``,document.body.style.cursor=``,Le.value=null,ke()}function Be(e,t){if(e===`left`?X.value:Me.value)return;let n=Re(e);if(!n)return;t.preventDefault();let r=t.clientX,i=n.getBoundingClientRect().width;Le.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);Y[e]=Ne(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>ze(a),{once:!0})}function Z(e){Y[e]=null,ke()}let Ve=P(!1),He=G(()=>X.value?!Ve.value:Y.leftCollapsed);function Ue(){if(X.value){Ve.value=!Ve.value;return}Y.leftCollapsed=!Y.leftCollapsed,ke()}function We(){X.value&&(Ve.value=!1)}let Ke=G(()=>Y.rightCollapsed&&!Me.value);function qe(){Y.rightCollapsed=!Y.rightCollapsed,ke()}function Je(e){le.value=e?e.key:``,Ve.value=!1}function $(){o(`create-task`,{projectPath:ct.value||``})}async function Xe(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:se.value})}).then(e=>e.json()).catch(()=>null);if(!n?.success){I.error(n?.error||K(`@WORKBENCH:执行失败`));return}I.success(K(`@WORKBENCH:已开始执行`)),await q(!0)}let Ze=new Set;async function $e(e){if(Ze.has(e.id))return;let t=e.live?.jobId;if(!t){I.error(K(`@WORKBENCH:停止失败`));return}try{await he.confirm(K(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),K(`@WORKBENCH:停止执行`),{confirmButtonText:K(`@WORKBENCH:停止`),cancelButtonText:K(`@WORKBENCH:取消`),type:`warning`})}catch{return}Ze.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){I.error(e?.error||K(`@WORKBENCH:停止失败`));return}I.success(K(`@WORKBENCH:已发送停止信号`)),await q(!0)}finally{Ze.delete(e.id)}}let et=new Set;async function tt(e){if(!et.has(e.id)){if(e.runningJobs>0)try{await he.confirm(K(`@WORKBENCH:这条任务还在执行,标记完成会同时把它停掉。已输出的内容会保留。`),K(`@WORKBENCH:标记为已完成`),{confirmButtonText:K(`@WORKBENCH:标记完成`),cancelButtonText:K(`@WORKBENCH:取消`),type:`warning`})}catch{return}et.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){I.error(t?.error||K(`@WORKBENCH:标记失败`));return}I.success(K(`@WORKBENCH:已标记为已完成`)),await q(!0)}finally{et.delete(e.id)}}}async function nt(e){if(!et.has(e.id)){et.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){I.error(t?.error||K(`@WORKBENCH:撤销失败`));return}I.success(K(`@WORKBENCH:已撤销完成标记`)),await q(!0)}finally{et.delete(e.id)}}}async function rt(e){let{ok:t,keptTasks:n}=await g(e.path);t&&(I.success(n>0?K(`@WORKBENCH:已移除项目,{n} 条任务仍保留在「全部项目」下`,{n}):K(`@WORKBENCH:已移除项目`)),await q(!0))}async function it(e){let t=(e.title||``).trim()||K(`@WORKBENCH:未命名任务`);try{await he.confirm(K(`@WORKBENCH:删除任务「{title}」?`,{title:t}),K(`@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){I.error(n.error||K(`@WORKBENCH:删除失败`));return}await q(!0)}async function at(e,t){let n=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/move`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({projectPath:t})}).then(e=>e.json()).catch(()=>null);if(!n?.success){I.error(n?.error||K(`@WORKBENCH:移动失败`));return}let r=l.value.find(e=>Q(e.path)===Q(t))?.name||t;I.success(K(`@WORKBENCH:已移动到「{name}」`,{name:r})),await q(!0)}let ot=P(null),ct=G(()=>U.value?.path||p.value);async function lt(e){let t=await D({text:e.text,projectPath:e.projectPath,autoRun:e.autoRun,attachments:e.attachments,useDefaultPrompt:e.useDefaultPrompt,executor:e.executor,imageText:e.imageText});t&&(ot.value?.clearAttachments(),ot.value?.clearDraft(),I.success(t.ran?K(`@WORKBENCH:已派发并开始执行`):K(`@WORKBENCH:已派发(只建任务未执行)`)),await q(!0))}let ut=P(!1),dt=P(!1),ft=G(()=>{let e=U.value?.key;return e&&ne.value?.[e]?.prompt||``});async function pt(e){if(dt.value)return;let t=e.globalPrompt.trim(),n=e.projectPrompt.trim(),r=U.value;dt.value=!0;try{let e=!0;t!==(y.value||``).trim()&&(e=await O(t)),e&&r&&n!==ft.value.trim()&&(e=await k(r.path,n)),e&&(ut.value=!1)}finally{dt.value=!1}}return(t,n)=>{let r=d;return H(),S(`div`,{class:`board`,style:c(Fe.value)},[b(`div`,{ref_key:`colsRef`,ref:Ie,class:w([`board__cols`,{"is-resizing":Le.value!==null}])},[b(`div`,{class:w([`board__scrim`,{"is-on":Ve.value}]),"aria-hidden":`true`,onClick:n[0]||=e=>Ve.value=!1},null,2),b(`aside`,{class:w([`board__left`,{"is-collapsed":He.value}]),onKeydown:F(We,[`esc`])},[e(yi,{projects:x(l),"selected-key":le.value,loading:x(m),collapsible:!He.value,onSelect:Je,onRemove:rt,onCollapse:Ue},null,8,[`projects`,`selected-key`,`loading`,`collapsible`])],34),He.value?W(``,!0):(H(),S(`div`,{key:0,class:`board__splitter board__splitter--left`,role:`separator`,"aria-orientation":`vertical`,title:x(K)(`@WORKBENCH:拖动调整项目列表宽度,双击恢复默认`),onMousedown:n[1]||=e=>Be(`left`,e),onDblclick:n[2]||=e=>Z(`left`)},null,40,ys)),b(`main`,bs,[b(`div`,xs,[He.value?(H(),S(`button`,{key:0,type:`button`,class:`board__icon-btn board__fold-btn`,title:x(K)(`@WORKBENCH:展开项目列表`),"aria-label":x(K)(`@WORKBENCH:展开项目列表`),"aria-expanded":!1,onClick:Ue},[...n[15]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[b(`path`,{d:`M7 7l5 5l-5 5`}),b(`path`,{d:`M13 7l5 5l-5 5`})],-1)]],8,Ss)):W(``,!0),b(`span`,Cs,[U.value&&U.value.iconUrl&&!x(ge)(U.value.iconUrl)?(H(),S(`img`,{key:0,class:`board__project-icon-img`,src:U.value.iconUrl,alt:``,onError:n[3]||=e=>x(_e)(U.value.iconUrl)},null,40,ws)):(H(),i(r,{key:1,class:`board__project-icon-glyph`},{default:L(()=>[U.value?(H(),S(`svg`,Ts,[...n[16]||=[b(`path`,{d:`M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2`},null,-1)]])):(H(),S(`svg`,Es,[...n[17]||=[b(`path`,{d:`M4 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`},null,-1),b(`path`,{d:`M14 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`},null,-1),b(`path`,{d:`M4 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`},null,-1),b(`path`,{d:`M14 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`},null,-1)]]))]),_:1}))]),b(`div`,Ds,[b(`h2`,Os,f(U.value?U.value.name:x(K)(`@WORKBENCH:全部项目`)),1),U.value?(H(),S(`span`,{key:0,class:`board__project-path`,title:U.value.path},f(U.value.path),9,ks)):(H(),S(`span`,As,f(x(K)(`@WORKBENCH:共 {n} 个项目的任务`,{n:x(l).length})),1))]),b(`div`,js,[b(`div`,Ms,[b(`button`,{type:`button`,role:`tab`,class:w([`board__view-btn`,{"is-active":M.value===`kanban`}]),"aria-selected":M.value===`kanban`,"aria-label":x(K)(`@WORKBENCH:看板视图`),title:x(K)(`@WORKBENCH:看板视图`),onClick:n[4]||=e=>M.value=`kanban`},[e(r,null,{default:L(()=>[...n[18]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[b(`path`,{d:`M4 4l6 0`}),b(`path`,{d:`M14 4l6 0`}),b(`path`,{d:`M4 10a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2l0 -8`}),b(`path`,{d:`M14 10a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2l0 -2`})],-1)]]),_:1})],10,Ns),b(`button`,{type:`button`,role:`tab`,class:w([`board__view-btn`,{"is-active":M.value===`list`}]),"aria-selected":M.value===`list`,"aria-label":x(K)(`@WORKBENCH:列表视图`),title:x(K)(`@WORKBENCH:列表视图`),onClick:n[5]||=e=>M.value=`list`},[e(r,null,{default:L(()=>[...n[19]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[b(`path`,{d:`M9 6l11 0`}),b(`path`,{d:`M9 12l11 0`}),b(`path`,{d:`M9 18l11 0`}),b(`path`,{d:`M5 6l0 .01`}),b(`path`,{d:`M5 12l0 .01`}),b(`path`,{d:`M5 18l0 .01`})],-1)]]),_:1})],10,Ps)]),b(`div`,{class:w([`board__head-search`,{"is-open":R.value}])},[A(b(`input`,{ref_key:`searchInputRef`,ref:de,class:`board__search-input`,type:`search`,"onUpdate:modelValue":n[6]||=e=>ue.value=e,placeholder:x(K)(`@WORKBENCH:搜索任务标题或描述`),"aria-label":x(K)(`@WORKBENCH:搜索任务标题或描述`),onBlur:pe,onKeydown:F(fe,[`esc`])},null,40,Fs),[[me,ue.value]]),b(`button`,{type:`button`,class:`board__search-btn`,"aria-label":x(K)(`@WORKBENCH:搜索任务标题或描述`),title:x(K)(`@WORKBENCH:搜索任务标题或描述`),onMousedown:n[7]||=N(()=>{},[`prevent`]),onClick:z},[e(r,null,{default:L(()=>[...n[20]||=[b(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[b(`path`,{d:`M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0`}),b(`path`,{d:`M21 21l-6 -6`})],-1)]]),_:1})],40,Is)],2)])]),e(Ga,{tasks:xe.value,"project-labels":be.value,projects:x(l),"task-percents":Se.value,"show-project-label":!U.value,"opened-task-id":a.openedTaskId,view:M.value,"onUpdate:view":n[8]||=e=>M.value=e,search:ue.value,"onUpdate:search":n[9]||=e=>ue.value=e,onOpenTask:we,onRunTask:Xe,onStopTask:$e,onCompleteTask:tt,onReopenTask:nt,onDeleteTask:it,onMoveTask:at,onCreateTask:$},null,8,[`tasks`,`project-labels`,`projects`,`task-percents`,`show-project-label`,`opened-task-id`,`view`,`search`])]),!Ke.value&&!Me.value?(H(),S(`div`,{key:1,class:`board__splitter board__splitter--right`,role:`separator`,"aria-orientation":`vertical`,title:x(K)(`@WORKBENCH:拖动调整主 Agent 控制台宽度,双击恢复默认`),onMousedown:n[10]||=e=>Be(`right`,e),onDblclick:n[11]||=e=>Z(`right`)},null,40,Ls)):W(``,!0),e(ts,{ref_key:`consoleRef`,ref:ot,running:x(ee),"selected-project":U.value,dispatching:x(v),"today-done":Ce.value.todayDone,collapsed:Ke.value,"default-prompt":x(y),"project-prompts":x(ne),reports:x(T),"report-interval-ms":x(E),"generating-report":x(re),"max-instruction-chars":x(te),onToggleCollapse:qe,onDispatch:lt,onGenerateReport:x(j),onSetReportInterval:x(oe),onOpenPromptSettings:n[12]||=e=>ut.value=!0,onLocateTask:n[13]||=e=>o(`locate-task`,e)},null,8,[`running`,`selected-project`,`dispatching`,`today-done`,`collapsed`,`default-prompt`,`project-prompts`,`reports`,`report-interval-ms`,`generating-report`,`max-instruction-chars`,`onGenerateReport`,`onSetReportInterval`])],2),e(vs,{modelValue:ut.value,"onUpdate:modelValue":n[14]||=e=>ut.value=e,"default-prompt":x(y),"project-path":U.value?.path||``,"project-name":U.value?.name||``,"project-prompt":ft.value,saving:dt.value,onSave:pt},null,8,[`modelValue`,`default-prompt`,`project-path`,`project-name`,`project-prompt`,`saving`])],4)}}}),[[`__scopeId`,`data-v-1b045ef8`]]);u(),z(),t(),pe();var Xs={class:`workbench`},Zs={class:`wb-editor`},Qs={class:`wb-editor-bar`},$s=[`title`],ec=[`aria-pressed`,`title`,`aria-label`],tc=[`title`],nc=[`data-status`,`title`],rc={class:`wb-editor-bar__status-pill`},ic={class:`wb-editor-bar__status-label`},ac=[`title`],oc={key:2,class:`wb-editor-bar__time`},sc=[`title`],cc={key:1,class:`wb-editor-bar__sep`,"aria-hidden":`true`},lc={key:2,class:`wb-editor-bar__spent`},uc={class:`wb-editor-bar__hint`},dc={class:`workbench__editor-row`},fc=[`aria-label`,`aria-valuenow`,`title`],pc={class:`wb-split`},mc={key:0,class:`wb-placeholder`},hc={class:`wb-split__header`},gc={class:`wb-split__title-wrap`},_c=[`placeholder`,`aria-label`],vc=[`title`,`aria-label`],yc=[`title`],bc={key:0,class:`wb-meta-save__dot`},xc={key:1,class:`wb-meta-save__check`},Sc={key:2,class:`wb-meta-save__bang`},Cc={key:3,class:`wb-meta-save__dot`},wc=[`data-executor`,`title`],Tc={class:`wb-run-executor__text`},Ec=[`title`],Dc={class:`sr-only`},Oc={class:`sr-only`},kc={class:`wb-executor-item`},Ac={class:`wb-executor-item__name`},jc=[`title`],Mc={key:2,class:`wb-executor-item__missing`},Nc={key:3,class:`wb-no-claude-hint`,role:`status`},Pc={class:`wb-no-claude-hint__text`},Fc={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},Ic={class:`wb-copy-exec`},Lc=[`title`,`aria-label`],Rc={class:`sr-only`},zc=[`title`,`aria-label`],Bc=[`title`,`aria-label`],Vc={class:`sr-only`},Hc=[`title`,`aria-label`],Uc={class:`sr-only`},Wc=[`open`],Gc={class:`wb-task-desc__summary`},Kc={class:`wb-task-desc__label`},qc=[`title`,`aria-label`],Jc={key:0,class:`wb-task-desc__tag`},Yc={key:0},Xc={key:1,class:`wb-task-desc__tag-attachment`},Zc=[`placeholder`,`aria-label`],Qc={class:`wb-execution-body`},$c={class:`wb-exec-detail`},el={class:`wb-form-item__label wb-task-prompt__summary`},tl={key:0,class:`wb-task-prompt__tag`},nl={key:0,class:`wb-task-prompt__parts`},rl={class:`wb-task-prompt__label`},il={class:`wb-task-prompt__text`},al={key:1,class:`wb-task-prompt__empty`},ol={class:`wb-simple-chat`},sl={class:`wb-simple-chat__footer`},cl={key:0,class:`wb-chat-queue`},ll={class:`wb-chat-queue__head`},ul={class:`wb-chat-queue__label`},dl={class:`wb-chat-queue__count`},fl={class:`wb-chat-queue__hint`},pl={class:`wb-chat-queue__index`},ml=[`title`],hl={key:0,class:`wb-chat-queue__atts`},gl=[`title`,`aria-label`,`onClick`],_l=`wb.lastTaskByProject.v1`,vl=`__no_project__`,yl=`wb.sidebarWidth.v1`,bl=200,xl=480,Sl=268,Cl=`wb.sidebarCollapsed.v1`,wl=3e3,Tl=52,El=320,Dl=500,Ol=q(m({__name:`WorkbenchView`,setup(t){let a=Ae(),o=qe(),l=P((()=>{try{let e=parseInt(localStorage.getItem(yl)||``,10);return Number.isFinite(e)?Math.min(xl,Math.max(bl,e)):Sl}catch{return Sl}})()),u=P((()=>{try{let e=localStorage.getItem(Cl);return e===null||e===`1`}catch{return!0}})());function p(){u.value=!u.value;try{localStorage.setItem(Cl,u.value?`1`:`0`)}catch{}}function m(e){e.preventDefault();let t=e.clientX,n=l.value;document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let r=e=>{l.value=Math.min(xl,Math.max(bl,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(yl,String(l.value))}catch{}},{once:!0})}function h(e){l.value=Math.min(xl,Math.max(bl,l.value+e));try{localStorage.setItem(yl,String(l.value))}catch{}}function g(){try{let e=localStorage.getItem(_l),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function _(e){try{localStorage.setItem(_l,JSON.stringify(e))}catch{}}function te(e,t){let n=g();n[e||vl]=t,_(n)}let ne=P(!1);function D(e){zt(e.projectPath)}async function k(){let e=X.value&&Je(X.value)?X.value:null;if(Ke(),e){ne.value=!1,await $(e);return}X.value&&Ge.value&&await Ze(),ne.value=!1}function ae(){X.value&&Je(X.value)&&window.setTimeout(()=>It.value?.focus(),80)}let j=P(null);async function oe(e){await Se(),J.value=e.taskId,j.value=e.taskId,Be(),X.value&&te(Q(B.value.path),e.taskId),ne.value=!0}function de(e){if(!Me.value.some(t=>t.id===e)){I.info(K(`@WORKBENCH:该任务不在当前视图(可能在别的项目下)`));return}j.value=e}let{tasks:z,jobs:fe,currentProject:B,connectSSE:pe,disconnectSSE:ge,loadCurrentProject:_e,loadJobs:be,clearJobsByTask:xe,loadTasks:Se}=Xn();function Ce(){let e=Q(B.value.path),t=z.value.filter(t=>!t.projectPath||Q(t.projectPath)===e),n=g(),r=e&&n[e]||!e&&n[vl]||``,i=r?z.value.find(e=>e.id===r):null,a=t[0]||z.value[0]||null,o=i&&i.projectPath&&Q(i.projectPath)!==e?null:i?i.id:a?a.id:null;J.value=o,Be()}async function we(){let e=J.value;if(await Se(),e&&z.value.some(t=>t.id===e)){Be();return}Ce()}async function Te(){await Se(),Ce()}let q=P(!1),J=P(null),X=G(()=>z.value.find(e=>e.id===J.value)||null),Me=P([]),Ne=G(()=>Me.value.find(e=>e.id===J.value)||null),Pe=G(()=>Ne.value?it(kn(Ne.value)):``),Ie=G(()=>Ne.value?Nn(Ne.value):``),Le=G(()=>Ne.value?Pn(Ne.value):``),Re=G(()=>{let e=X.value?.projectPath||``;return!e||Q(e)===Q(B.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),ze=P({title:``,desc:``});function Be(){X.value?ze.value={title:X.value.title,desc:X.value.desc}:ze.value={title:``,desc:``}}let Z=P(`idle`),He=P(0),Ue=null,Ge=G(()=>{if(!X.value)return!1;let e=X.value;return ze.value.title!==e.title||ze.value.desc!==e.desc});function Ke(){Ue!==null&&(clearTimeout(Ue),Ue=null)}function Je(e){return!(!e||(e.title||``).trim()||(e.desc||``).trim()||(e.simpleOverride||``).trim()||Array.isArray(e.attachments)&&e.attachments.length>0)}async function $(e){try{await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`})}catch{}let t=z.value.findIndex(t=>t.id===e.id);t!==-1&&z.value.splice(t,1)}async function Xe(){let e=z.value.filter(e=>e.id!==J.value&&Je(e));for(let t of e)await $(t)}async function Ze(){if(!X.value)return!1;if(!Ge.value)return!0;if(Z.value=`saving`,await Gt(!1))return He.value=Date.now(),Z.value=`saved`,setTimeout(()=>{Z.value===`saved`&&Date.now()-He.value>=4e3&&(Z.value=`idle`)},4e3),!0;Z.value=`error`;let e=Date.now();return setTimeout(()=>{Z.value===`error`&&Date.now()-e>=4e3&&(Z.value=`idle`)},4e3),!1}V(()=>X.value?{id:X.value.id,title:X.value.title,desc:X.value.desc}:null,(e,t)=>{e&&t&&e.id===t.id&&(Ue!==null&&clearTimeout(Ue),Ue=window.setTimeout(()=>{Ze()},1500))},{deep:!0}),V(J,async(e,t)=>{Ke(),X.value&&Ge.value&&await Ze()}),V(B,async e=>{if(!e.path)return;let t=Q(e.path),n=X.value;n&&n.projectPath&&Q(n.projectPath)!==t&&await Te()});function Qe(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function $e(){X.value&&Ge.value&&!Je(X.value)&&Qe(X.value)}let et=P(!0);async function tt(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 rt=P(null),at=P(null);async function ot(e){if(e){if(!await tt((e.title||``).trim()||K(`@WORKBENCH:未命名任务`))){I.error(K(`@WORKBENCH:复制失败`));return}rt.value=e.id,I.success(K(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{rt.value===e.id&&(rt.value=null)},1500)}}async function st(e){if(!e)return;let t=(e.desc||``).trim();if(!t){I.warning(K(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await tt(t)){I.error(K(`@WORKBENCH:复制失败`));return}at.value=e.id,I.success(K(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{at.value===e.id&&(at.value=null)},1500)}let{simpleConversationMessages:ct,simpleAllJobsFor:lt,simpleJobFor:ut,simpleJobState:dt}=Jn(fe,X);function ft(e){let t=X.value;if(!t)return!1;let n=lt(t);if(!n.length)return!1;let r=String(e?.id||``).replace(/-a$/,``),i=r?n.findIndex(e=>e.id===r):n.length-1;if(i<0)return!1;if(i!==n.length-1)return I.warning(K(`@WORKBENCH:只能重试最后一轮`)),!1;let a=n[i];return i===0?on(a):sn(t,a,n[i-1])}let pt=P(null);function mt(e){let t=(e?.projectPath||``).trim().replace(/[\\/]+$/,``);return t?t.split(/[\\/]/).pop()||t:B.value.name||``}async function ht(e,t=`brief`){if(!e)return;let n=nt(lt(e),{title:e.title,projectName:mt(e)},{scope:t});if(!n){I.warning(K(`@WORKBENCH:暂无执行内容可复制`));return}if(!await tt(n)){I.error(K(`@WORKBENCH:复制失败`));return}pt.value=e.id,I.success(K(`@WORKBENCH:已复制执行内容`)),window.setTimeout(()=>{pt.value===e.id&&(pt.value=null)},1500)}function gt(e){ht(X.value,e===`full`?`full`:`brief`)}let _t=[`wheel`,`touchstart`,`pointerdown`,`keydown`],vt=P(null),yt=Ve(),xt=P(null),St=null,Ct=null,wt=null;function Tt(){if(St&&=(St.disconnect(),null),Ct!==null&&(clearTimeout(Ct),Ct=null),wt){for(let e of _t)wt.removeEventListener(e,Tt);wt=null}}function Et(){Tt();let e=vt.value;if(!e)return;e.scrollToBottom?.(!1);let t=xt.value?.querySelector(`.acu-message-list`);if(!(!t||typeof ResizeObserver>`u`)){wt=t;for(let e of _t)t.addEventListener(e,Tt,{passive:!0});St=new ResizeObserver(()=>vt.value?.scrollToBottom?.(!1)),St.observe(t),t.firstElementChild&&St.observe(t.firstElementChild),Ct=setTimeout(Tt,wl)}}let Ot=G(()=>ne.value&&X.value&&lt(X.value).length>0?X.value.id:``);V(Ot,async e=>{Tt(),e&&(await n(),Et())}),C(Tt);function kt(e){return e?cn(e.id):!1}let At=G(()=>lt(X.value).length>0),jt=G(()=>kt(X.value)),Mt=G(()=>X.value?jt.value?K(`@WORKBENCH:正在执行中,请先「停止」再重新执行`):At.value?K(`@WORKBENCH:重新跑一轮:上一轮的执行记录会被清空`):``:``),Nt=G(()=>{if(!X.value)return null;let e=Ne.value;if(jt.value||e&&e.runningJobs>0)return{key:`running`,label:K(`@WORKBENCH:执行中`),title:K(`@WORKBENCH:这条任务正在执行`)};if(e)return e.column===`done`?{key:`done`,label:K(`@WORKBENCH:已完成`),title:e.autoCompleted?K(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`):e.manualDoneAt?K(`@WORKBENCH:已标记为已完成`):``}:e.lastJobStatus===`error`?{key:`error`,label:K(`@WORKBENCH:执行失败`),title:K(`@WORKBENCH:上一次执行报错,点开对话流查看原因`)}:{key:`todo`,label:K(`@WORKBENCH:待处理`),title:``};switch(dt(ut(X.value))){case`done`:return{key:`done`,label:K(`@WORKBENCH:已完成`),title:``};case`error`:return{key:`error`,label:K(`@WORKBENCH:执行失败`),title:``};case`cancelled`:return{key:`todo`,label:K(`@WORKBENCH:已取消`),title:``};default:return{key:`todo`,label:K(`@WORKBENCH:待处理`),title:``}}}),Pt=G(()=>{let e=X.value;if(!e)return[];let t=e.promptParts;if(t&&(t.global||t.project)){let e=[];return t.global&&e.push({key:`global`,label:K(`@WORKBENCH:全局提示词`),text:t.global}),t.project&&e.push({key:`project`,label:K(`@WORKBENCH:项目提示词`),text:t.project}),e}let n=(e.simpleOverride||``).trim();return n?[{key:`legacy`,label:K(`@WORKBENCH:提示词`),text:n}]:[]}),Ft=P(!1),It=P(null),Lt=P(null);function Rt(e){let t=e?.currentTarget||Lt.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?Dl:El,r=Math.min(Math.max(t.scrollHeight,Tl),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}V(et,async e=>{e&&(await n(),Rt())}),V(()=>X.value?.id,async()=>{et.value&&(await n(),Rt())});async function zt(e){if(Ft.value)return;Ft.value=!0;let t={title:``,desc:``},r=(e||B.value.path||``).trim();r&&(t.projectPath=r);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}).then(e=>e.json());if(!e.success){I.error(e.error||K(`@WORKBENCH:保存失败`));return}Ke(),X.value&&Je(X.value)?await $(X.value):X.value&&Ge.value&&await Ze(),await Te(),e.task?.id&&(J.value=e.task.id,Be(),ne.value=!0,I.success(K(`@WORKBENCH:已新建任务`)),await n(),It.value?.focus())}finally{Ft.value=!1}}async function Bt(e){await he.confirm(K(`@WORKBENCH:删除任务「{title}」?`,{title:e.title}),K(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),J.value===e.id&&(J.value=null),Te()}async function Vt(e){let t=(e.title||K(`@WORKBENCH:未命名任务`)).trim(),n={title:K(`@WORKBENCH:{title} (副本)`,{title:t}),desc:e.desc||``,simpleOverride:e.simpleOverride||``};e.promptParts&&(e.promptParts.global||e.promptParts.project)&&(n.promptParts=e.promptParts),B.value.path&&(n.projectPath=B.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){I.error(e.error||K(`@WORKBENCH:复制失败`));return}await Te(),e.task?.id&&(J.value=e.task.id,Be()),I.success(K(`@WORKBENCH:已复制任务`))}catch(e){I.error(K(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function Ht(e){if(J.value===e.id)return;Ke();let t=X.value;t&&Je(t)?await $(t):t&&Ge.value&&await Ze(),J.value=e.id,Be(),te(Q(B.value.path),e.id)}async function Ut(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=z.value.slice(),i=Wt(z.value,t,n);if(i!==z.value){z.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:K(`@WORKBENCH:排序保存失败`)}));e?.success||(z.value=r,I.error(e?.error||K(`@WORKBENCH:排序保存失败`)))}catch(e){z.value=r,I.error(K(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function Wt(e,t,n){let r=e=>Q(e)||vl,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 Gt(e){if(!X.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(X.value)}).then(e=>e.json());return t.success?(e&&I.success(K(`@WORKBENCH:已保存`)),await we(),!0):(I.error(t.error||K(`@WORKBENCH:保存失败`)),!1)}s(async()=>{await Promise.all([Te(),_e(),be()]),await Xe(),pe(),window.addEventListener(`beforeunload`,$e),o.fetchExecutorModels()}),C(()=>{ge(),window.removeEventListener(`beforeunload`,$e),X.value&&Ge.value&&!Je(X.value)&&Qe(X.value)});let{pasteHoverId:Kt,isUploading:qt,isImageAttachment:Jt,humanSize:Yt,onAttachmentPaste:Xt,onAttachmentDrop:Zt,uploadAttachment:Qt,removeAttachment:$t,pickAttachmentFile:en}=Gn(),{runTask:tn,onContinueSendFromChat:nn,cancelJob:rn,clearExecutionForSelectedTask:an,onReExecuteJob:on,retryRound:sn,isTaskRunning:cn,queuedChatsOf:ln,removeQueuedChat:un,flushNextQueued:dn}=Yn(fe,z,X,{clearJobsByTask:xe,persistTask:Gt,uploadAttachment:Qt,getExecutor:()=>fn.value}),{active:fn,availability:pn,hasAnyExecutor:mn,choose:hn,executorModelText:gn,executorModelTitle:_n}=Ye();function vn(e){return ke(e)}let yn=G(()=>lt(X.value).slice(-1)[0]),bn=G(()=>ke(yn.value?.agent)),xn=G(()=>Dt(yn.value?.agent)),Sn=G(()=>Oe(yn.value?.agent)?yn.value.agent:`claude`),Cn=G(()=>dt(yn.value)===`running`),wn=G(()=>{let e=_n(Sn.value),t=K(`@WORKBENCH:本轮实际使用的执行器;上方按钮选的是下一次执行用谁`);return e?`${e} · ${t}`:t}),Tn=G(()=>X.value?ln(X.value.id):[]);return(t,n)=>{let o=d,s=r,g=ye,_=y;return H(),S(`div`,Xs,[e(Ys,{"opened-task-id":j.value,onOpenTask:oe,onCreateTask:D,onBoardTasks:n[0]||=e=>Me.value=e,onLocateTask:de},null,8,[`opened-task-id`]),e(je,{modelValue:ne.value,"onUpdate:modelValue":n[24]||=e=>ne.value=e,title:x(K)(`@WORKBENCH:任务执行`),size:`fullscreen`,type:`flex`,"custom-class":`wb-task-dialog`,onOpened:ae},{default:L(()=>[b(`div`,Zs,[b(`div`,Qs,[b(`button`,{type:`button`,class:`wb-back-btn`,title:x(K)(`@WORKBENCH:返回看板`),onClick:k},[e(o,{class:`wb-back-btn__icon`},{default:L(()=>[e(x(T))]),_:1}),b(`span`,null,f(x(K)(`@WORKBENCH:返回看板`)),1)],8,$s),b(`button`,{type:`button`,class:w([`wb-sidebar-toggle`,{"is-active":!u.value}]),"aria-pressed":!u.value,title:u.value?x(K)(`@WORKBENCH:展开任务列表`):x(K)(`@WORKBENCH:收起任务列表`),"aria-label":u.value?x(K)(`@WORKBENCH:展开任务列表`):x(K)(`@WORKBENCH:收起任务列表`),onClick:p},[e(o,{class:`wb-sidebar-toggle__icon`},{default:L(()=>[(H(),i(ee(u.value?x(ue):x(ve))))]),_:1}),b(`span`,null,f(x(K)(`@WORKBENCH:任务列表`)),1)],10,ec),b(`span`,{class:`wb-editor-bar__project`,title:x(B).path},f(x(B).name),9,tc),Nt.value?(H(),S(`span`,{key:0,class:w([`wb-editor-bar__status`,`is-`+Nt.value.key]),"data-status":Nt.value.key,title:Nt.value.title||void 0},[b(`span`,rc,[n[26]||=b(`span`,{class:`wb-editor-bar__status-dot`,"aria-hidden":`true`},null,-1),b(`span`,ic,f(Nt.value.label),1)])],10,nc)):W(``,!0),Re.value?(H(),S(`span`,{key:1,class:`wb-editor-bar__repo`,title:Re.value.path},f(x(K)(`@WORKBENCH:执行于 {name}`,{name:Re.value.name})),9,ac)):W(``,!0),Pe.value||Ie.value?(H(),S(`span`,oc,[Pe.value?(H(),S(`span`,{key:0,class:`wb-editor-bar__ago`,title:Le.value},f(Pe.value),9,sc)):W(``,!0),Pe.value&&Ie.value?(H(),S(`span`,cc,`·`)):W(``,!0),Ie.value?(H(),S(`span`,lc,f(Ie.value),1)):W(``,!0)])):W(``,!0),b(`span`,uc,f(x(K)(`@WORKBENCH:任务执行`)),1)]),b(`div`,dc,[u.value?W(``,!0):(H(),i(yr,{key:0,style:c({width:l.value+`px`}),tasks:x(z),"selected-task-id":J.value,"current-project":x(B),"creating-task":Ft.value,"is-task-running":kt,onSelectTask:Ht,onDeleteTask:Bt,onCopyTask:Vt,onCreateTask:zt,onReorderTasks:Ut},null,8,[`style`,`tasks`,`selected-task-id`,`current-project`,`creating-task`])),u.value?W(``,!0):(H(),S(`div`,{key:1,class:`wb-splitter`,role:`separator`,tabindex:`0`,"aria-orientation":`vertical`,"aria-label":x(K)(`@WORKBENCH:拖动调整侧边栏宽度`),"aria-valuenow":l.value,"aria-valuemin":bl,"aria-valuemax":xl,title:x(K)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:m,onKeydown:[n[1]||=F(N(e=>h(-16),[`prevent`]),[`left`]),n[2]||=F(N(e=>h(16),[`prevent`]),[`right`])]},null,40,fc)),b(`section`,pc,[X.value?(H(),S(O,{key:1},[b(`div`,hc,[b(`div`,gc,[A(b(`input`,{ref_key:`titleInputRef`,ref:It,class:`wb-input wb-input--title`,"onUpdate:modelValue":n[3]||=e=>X.value.title=e,placeholder:x(K)(`@WORKBENCH:任务标题`),"aria-label":x(K)(`@WORKBENCH:任务标题`)},null,8,_c),[[me,X.value.title]]),b(`button`,{type:`button`,class:w([`wb-copy-btn`,{"is-flash":rt.value===X.value.id}]),title:x(K)(`@WORKBENCH:复制任务标题`),"aria-label":x(K)(`@WORKBENCH:复制任务标题`),onClick:n[4]||=e=>ot(X.value)},[rt.value===X.value.id?(H(),i(o,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:L(()=>[...n[27]||=[R(`✓`,-1)]]),_:1})):(H(),i(o,{key:0,class:`wb-copy-btn__icon`},{default:L(()=>[e(x(U))]),_:1}))],10,vc)]),Z.value!==`idle`||Ge.value?(H(),S(`span`,{key:0,class:w([`wb-meta-save`,{"is-saving":Z.value===`saving`,"is-saved":Z.value===`saved`,"is-error":Z.value===`error`,"is-dirty":Ge.value&&Z.value===`idle`}]),title:Z.value===`saving`?x(K)(`@WORKBENCH:保存中…`):Z.value===`error`?x(K)(`@WORKBENCH:保存失败`):Z.value===`saved`?x(K)(`@WORKBENCH:已保存`):``},[Z.value===`saving`?(H(),S(`span`,bc)):Z.value===`saved`?(H(),S(`span`,xc,`✓`)):Z.value===`error`?(H(),S(`span`,Sc,`!`)):(H(),S(`span`,Cc)),R(` `+f(Z.value===`saving`?x(K)(`@WORKBENCH:保存中…`):Z.value===`saved`?x(K)(`@WORKBENCH:已保存`):Z.value===`error`?x(K)(`@WORKBENCH:保存失败`):x(K)(`@WORKBENCH:有未保存的更改`)),1)],10,yc)):W(``,!0),yn.value?(H(),S(`span`,{key:1,class:w([`wb-run-executor`,{"is-running":Cn.value}]),"data-executor":Sn.value,title:wn.value},[e(Fe,{executor:Sn.value,class:`wb-run-executor__icon`},null,8,[`executor`]),b(`span`,Tc,f(Cn.value?x(K)(`@WORKBENCH:正在由 {name} 执行`,{name:bn.value}):x(K)(`@WORKBENCH:本轮由 {name} 执行`,{name:bn.value})),1)],10,wc)):W(``,!0),x(mn)?(H(),i(_,{key:2,"split-button":``,type:`primary`,class:`wb-executor-split`,trigger:`click`,disabled:jt.value,title:Mt.value,onClick:n[5]||=e=>x(tn)(X.value),onCommand:x(hn)},{dropdown:L(()=>[e(g,null,{default:L(()=>[(H(!0),S(O,null,E(x(Y),t=>(H(),i(s,{key:t.id,command:t.id,disabled:!x(pn)[t.id]},{default:L(()=>[b(`span`,kc,[e(Fe,{executor:t.id,class:`wb-executor-item__icon`},null,8,[`executor`]),b(`span`,Ac,f(t.name),1),x(gn)(t.id)?(H(),S(`span`,{key:0,class:`wb-executor-item__model`,title:x(_n)(t.id)},f(x(gn)(t.id)),9,jc)):W(``,!0),x(fn)===t.id?(H(),i(o,{key:1,class:`wb-executor-item__check`},{default:L(()=>[e(x(le))]),_:1})):x(pn)[t.id]?W(``,!0):(H(),S(`span`,Mc,f(x(K)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:L(()=>[e(o,{class:`wb-executor-split__play`,"aria-hidden":`true`},{default:L(()=>[e(x(v))]),_:1}),b(`span`,{class:`wb-executor-split__hint`,title:x(_n)(x(fn))},[e(Fe,{executor:x(fn),class:`wb-executor-split__hint-icon`},null,8,[`executor`]),b(`span`,Dc,f(vn(x(fn))),1)],8,Ec),b(`span`,Oc,f(At.value?x(K)(`@WORKBENCH:重新执行任务`):x(K)(`@WORKBENCH:执行任务`)),1)]),_:1},8,[`disabled`,`title`,`onCommand`])):(H(),S(`div`,Nc,[e(o,{class:`wb-no-claude-hint__icon`},{default:L(()=>[e(x(ce))]),_:1}),b(`span`,Pc,f(x(K)(`@WORKBENCH:未检测到本地可用的 CLI 执行器,无法执行任务`)),1),b(`a`,Fc,f(x(K)(`@WORKBENCH:查看安装指引`)),1)])),b(`div`,Ic,[b(`button`,{type:`button`,class:w([`wb-logs-inline-btn wb-logs-inline-btn--copy wb-copy-exec__main`,{"is-flash":pt.value===X.value.id}]),title:x(K)(`@WORKBENCH:复制本任务的对话流(默认精简:仅提示词 + 模型回复)`),"aria-label":x(K)(`@WORKBENCH:复制执行内容`),onClick:n[6]||=e=>ht(X.value,`brief`)},[pt.value===X.value.id?(H(),i(o,{key:1,class:`wb-logs-inline-btn__icon`},{default:L(()=>[...n[28]||=[R(`✓`,-1)]]),_:1})):(H(),i(o,{key:0,class:`wb-logs-inline-btn__icon`},{default:L(()=>[e(x(U))]),_:1})),b(`span`,Rc,f(x(K)(`@WORKBENCH:复制执行内容`)),1)],10,Lc),e(_,{trigger:`click`,placement:`bottom-end`,onCommand:gt},{dropdown:L(()=>[e(g,null,{default:L(()=>[e(s,{command:`brief`},{default:L(()=>[R(f(x(K)(`@WORKBENCH:精简:提示词 + 模型回复`)),1)]),_:1}),e(s,{command:`full`},{default:L(()=>[R(f(x(K)(`@WORKBENCH:全量:提示词 / 思考 / 工具调用 / 模型回复`)),1)]),_:1})]),_:1})]),default:L(()=>[b(`button`,{type:`button`,class:`wb-logs-inline-btn wb-copy-exec__caret`,title:x(K)(`@WORKBENCH:选择复制范围`),"aria-label":x(K)(`@WORKBENCH:选择复制范围`)},[e(o,{class:`wb-logs-inline-btn__icon`},{default:L(()=>[e(x(re))]),_:1})],8,zc)]),_:1})]),b(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:x(K)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":x(K)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:n[7]||=(...e)=>x(an)&&x(an)(...e)},[e(o,{class:`wb-logs-inline-btn__icon`},{default:L(()=>[e(x(se))]),_:1}),b(`span`,Vc,f(x(K)(`@WORKBENCH:清空执行`)),1)],8,Bc),b(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:x(K)(`@WORKBENCH:执行日志`),"aria-label":x(K)(`@WORKBENCH:执行日志`),onClick:n[8]||=e=>q.value=!0},[e(o,{class:`wb-logs-inline-btn__icon`},{default:L(()=>[e(x(M))]),_:1}),b(`span`,Uc,f(x(K)(`@WORKBENCH:执行日志`)),1)],8,Hc)]),b(`details`,{class:`wb-task-desc`,open:et.value,onToggle:n[20]||=e=>et.value=e.target.open},[b(`summary`,Gc,[e(o,{class:`wb-task-desc__caret`},{default:L(()=>[(H(),i(ee(et.value?x(re):x(ie))))]),_:1}),b(`span`,Kc,f(x(K)(`@WORKBENCH:任务描述(可选)`)),1),b(`button`,{type:`button`,class:w([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":at.value===X.value.id}]),title:X.value.desc&&X.value.desc.trim()?x(K)(`@WORKBENCH:复制任务描述`):x(K)(`@WORKBENCH:任务描述为空,无需复制`),"aria-label":x(K)(`@WORKBENCH:复制任务描述`),onClick:n[9]||=N(e=>st(X.value),[`stop`,`prevent`])},[at.value===X.value.id?(H(),i(o,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:L(()=>[...n[29]||=[R(`✓`,-1)]]),_:1})):(H(),i(o,{key:0,class:`wb-copy-btn__icon`},{default:L(()=>[e(x(U))]),_:1}))],10,qc),X.value.desc&&X.value.desc.length>0||X.value.attachments&&X.value.attachments.length>0?(H(),S(`span`,Jc,[X.value.desc&&X.value.desc.length>0?(H(),S(`span`,Yc,f(x(K)(`@WORKBENCH:已填写`)),1)):W(``,!0),X.value.attachments&&X.value.attachments.length>0?(H(),S(`span`,Xc,f(X.value.attachments.length),1)):W(``,!0)])):W(``,!0)]),A(b(`textarea`,{ref_key:`taskDescTextareaRef`,ref:Lt,class:`wb-textarea wb-textarea--autogrow`,"onUpdate:modelValue":n[10]||=e=>X.value.desc=e,placeholder:x(K)(`@WORKBENCH:任务描述(可选)`),"aria-label":x(K)(`@WORKBENCH:任务描述(可选)`),onInput:n[11]||=e=>Rt(e),onFocus:n[12]||=e=>Rt(e),onBlur:n[13]||=e=>Rt(e),onPaste:n[14]||=e=>x(Xt)(e,{kind:`task`,task:X.value})},null,40,Zc),[[me,X.value.desc]]),e(bt,{attachments:X.value.attachments||[],"is-image":x(Jt),"human-size":x(Yt),"is-uploading":x(qt)(`task-`+X.value.id),"is-paste-hover":x(Kt)===`task-`+X.value.id,"on-pick":()=>x(en)({kind:`task`,task:X.value}),"on-remove":e=>x($t)({kind:`task`,task:X.value},e),onPaste:n[15]||=e=>x(Xt)(e,{kind:`task`,task:X.value}),onDrop:n[16]||=N(e=>x(Zt)(e,{kind:`task`,task:X.value}),[`prevent`]),onDragover:n[17]||=N(e=>Kt.value=`task-`+X.value.id,[`prevent`]),onDragenter:n[18]||=N(e=>Kt.value=`task-`+X.value.id,[`prevent`]),onDragleave:n[19]||=e=>Kt.value=x(Kt)===`task-`+X.value.id?null:x(Kt)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,Wc),b(`div`,Qc,[b(`div`,$c,[b(`details`,{class:w([`wb-task-prompt`,{"has-content":Pt.value.length>0}])},[b(`summary`,el,[e(o,{class:`wb-task-prompt__caret`},{default:L(()=>[e(x(ie))]),_:1}),b(`span`,null,f(x(K)(`@WORKBENCH:提示词`)),1),Pt.value.length>0?(H(),S(`span`,tl,f(x(K)(`@WORKBENCH:已填写`)),1)):W(``,!0),x(dt)(x(ut)(X.value))===`running`&&x(ut)(X.value)?(H(),S(`button`,{key:1,class:`wb-simple__stop`,onClick:n[21]||=N(e=>x(rn)(x(ut)(X.value)),[`stop`])},f(x(K)(`@WORKBENCH:停止`)),1)):W(``,!0)]),Pt.value.length>0?(H(),S(`div`,nl,[(H(!0),S(O,null,E(Pt.value,e=>(H(),S(`div`,{key:e.key,class:`wb-task-prompt__part`},[b(`div`,rl,f(e.label),1),b(`pre`,il,f(e.text),1)]))),128))])):(H(),S(`p`,al,f(x(K)(`@WORKBENCH:这条任务没有附加提示词`)),1))],2),x(lt)(X.value).length>0?(H(),S(`div`,{key:0,class:`wb-simple-chat-wrap`,ref_key:`chatWrapRef`,ref:xt},[b(`div`,ol,[(H(),i(x(Ee),{ref_key:`chatRef`,ref:vt,key:X.value.id,messages:x(ct),"assistant-name":bn.value,"assistant-avatar":xn.value,"show-avatar":!0,theme:x(a).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:x(K)(`@AGENT:计划`),raw:x(K)(`@AGENT:原始参数`)}},"file-changes-labels":x(yt),"message-rail-config":x(We),"show-input":!1,onRetry:ft},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`,`file-changes-labels`,`message-rail-config`]))]),b(`div`,sl,[Tn.value.length?(H(),S(`div`,cl,[b(`div`,ll,[b(`span`,ul,f(x(K)(`@WORKBENCH:排队中`)),1),b(`span`,dl,f(Tn.value.length),1),b(`span`,fl,f(jt.value?x(K)(`@WORKBENCH:等这一轮跑完自动发送`):x(K)(`@WORKBENCH:当前没有在跑的轮次`)),1)]),(H(!0),S(O,null,E(Tn.value,(e,t)=>(H(),S(`div`,{key:e.id,class:`wb-chat-queue__item`},[b(`span`,pl,f(t+1),1),b(`span`,{class:`wb-chat-queue__text`,title:e.text},f(e.text),9,ml),e.files.length?(H(),S(`span`,hl,[n[30]||=b(`span`,{"aria-hidden":`true`},`📎`,-1),R(` `+f(e.files.map(e=>e.file.name).join(`、`)),1)])):W(``,!0),t===0&&!jt.value?(H(),S(`button`,{key:1,type:`button`,class:`wb-chat-queue__btn`,onClick:n[22]||=e=>x(dn)(X.value.id)},f(x(K)(`@WORKBENCH:立即发送`)),1)):W(``,!0),b(`button`,{type:`button`,class:`wb-chat-queue__btn is-remove`,title:x(K)(`@WORKBENCH:移出队列`),"aria-label":x(K)(`@WORKBENCH:移出队列`),onClick:t=>x(un)(X.value.id,e.id)},`✕`,8,gl)]))),128))])):W(``,!0),(H(),i(x(De),{key:`input-`+X.value.id,placeholder:jt.value?x(K)(`@WORKBENCH:执行中,发送后会排队,等这一轮跑完自动接上…`):x(K)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:x(In),multiple:!0,maxCount:0,maxSize:x(Ln)},class:`wb-simple-chat__input`,onSend:n[23]||=e=>x(nn)(X.value,e)},null,8,[`placeholder`,`upload-config`]))])],512)):W(``,!0)])])],64)):(H(),S(`div`,mc,[b(`p`,null,f(x(K)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])])]),_:1},8,[`modelValue`,`title`]),e(je,{modelValue:q.value,"onUpdate:modelValue":n[25]||=e=>q.value=e,title:x(K)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,type:`flex`,"custom-class":`wb-logs-dialog`,"append-to-body":``},{default:L(()=>[e(Dn)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-8a259515`]]);export{Ol as default};