zen-gitsync 2.18.8 → 2.18.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/package.json +2 -1
- package/src/cli/ai/agent.js +7 -0
- package/src/cli/ai/runtime.test.js +22 -1
- package/src/cli/ai/tools.js +153 -2
- package/src/cli/ai/tools.test.js +71 -2
- package/src/cli/ai/transport.js +8 -3
- package/src/config.js +7 -5
- package/src/mcp/tools/workbench.js +1 -1
- package/src/ui/public/assets/{AgentView-DZx3n-So.css → AgentView-BnEgu3NT.css} +1 -1
- package/src/ui/public/assets/AgentView-DQQe_ivW.js +1 -0
- package/src/ui/public/assets/{AppVersionBadge-Bg5lrtKb.js → AppVersionBadge-D7PiBP0p.js} +2 -2
- package/src/ui/public/assets/{BranchSelector-CxjTqAkl.js → BranchSelector-BzHoMBOc.js} +1 -1
- package/src/ui/public/assets/{CommitForm-BWWrOvj5.js → CommitForm-CNTjLYTR.js} +2 -2
- package/src/ui/public/assets/{CommonDialog-x5jfL4Lq.js → CommonDialog-j_53ORvj.js} +1 -1
- package/src/ui/public/assets/CopySessionButton-Dy5t8Mjy.js +20 -0
- package/src/ui/public/assets/EditorView-CwcdA0Ei.js +1 -0
- package/src/ui/public/assets/{EditorView-BUiVsBv7.css → EditorView-Ims2BUK_.css} +1 -1
- package/src/ui/public/assets/{FlowExecutionViewer-BkZ20jxN.js → FlowExecutionViewer-CQ-TPhwF.js} +1 -1
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-aZBYu29g.js → FlowOrchestrationWorkspace-CJHpEBCw.js} +1 -1
- package/src/ui/public/assets/{LogList-CSIbmUMK.js → LogList-KUePBjAt.js} +4 -4
- package/src/ui/public/assets/{MindmapView-JYLp185X.js → MindmapView-CwdvsuEK.js} +1 -1
- package/src/ui/public/assets/{MonitorView-BS2Mh-I7.js → MonitorView-CjEnnrTL.js} +1 -1
- package/src/ui/public/assets/{ProjectStartupButton-DAEP6ZU5.js → ProjectStartupButton-B36lRb6-.js} +1 -1
- package/src/ui/public/assets/RecentDirectoriesChat-7fzSkSmc.css +1 -0
- package/src/ui/public/assets/RecentDirectoriesChat-DNiji9Pr.js +1 -0
- package/src/ui/public/assets/{RemoteManagerDialog-aaNmsKpy.js → RemoteManagerDialog-Dj_GpA-c.js} +1 -1
- package/src/ui/public/assets/{RemoteRepoCard-DndI8rNZ.js → RemoteRepoCard-C8u9M6dn.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-BTD9-R8t.js → SourceMapView-eng0B9U2.js} +1 -1
- package/src/ui/public/assets/{SvgIcon-0n6uuKFm.js → SvgIcon-5AlG3IfR.js} +1 -1
- package/src/ui/public/assets/{UserInputNode-B-mDg9Wy.js → UserInputNode-BKP869D6.js} +1 -1
- package/src/ui/public/assets/WorkbenchView-CZO18THH.js +6 -0
- package/src/ui/public/assets/WorkbenchView-DogERhHQ.css +1 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-C3o7kvRL.js → _plugin-vue_export-helper-Csn085FF.js} +4 -4
- package/src/ui/public/assets/agentConversations-De3wKTsN.js +10 -0
- package/src/ui/public/assets/configStore-DOaPZ6Mq.js +1 -0
- package/src/ui/public/assets/index-DQ82h1aq.js +57 -0
- package/src/ui/public/assets/index-NYzaTfbS.css +1 -0
- package/src/ui/public/assets/{useOrchestrator-CS9sn7nV.js → useOrchestrator-BjC7oHpt.js} +1 -1
- package/src/ui/public/index.html +6 -6
- package/src/ui/server/index.js +8 -0
- package/src/ui/server/routes/fileOpen.js +57 -1
- package/src/ui/server/routes/fileOpen.test.js +1 -1
- package/src/ui/server/routes/git/clone.js +5 -13
- package/src/ui/server/routes/workbench/agentChat.js +75 -10
- package/src/ui/server/routes/workbench/agentChatExtensions.test.js +290 -0
- package/src/ui/server/routes/workbench/agentEngines.js +8 -4
- package/src/ui/server/routes/workbench/agentExtensions.js +157 -0
- package/src/ui/server/routes/workbench/agentMarketplace.js +12 -0
- package/src/ui/server/routes/workbench/agentParity.test.js +16 -0
- package/src/ui/server/routes/workbench/agentRoutes.js +99 -7
- package/src/ui/server/routes/workbench/agentRoutes.test.js +141 -1
- package/src/ui/server/routes/workbench/executorModels.js +30 -5
- package/src/ui/server/routes/workbench/executorModels.test.js +16 -4
- package/src/ui/server/routes/workbench/index.js +17 -5
- package/src/ui/server/routes/workbench/jobActivity.js +3 -3
- package/src/ui/server/routes/workbench/jobActivity.test.js +1 -0
- package/src/ui/server/routes/workbench/runExternalTurn.js +22 -25
- package/src/ui/server/routes/workbench/runExternalTurn.test.js +34 -0
- package/src/ui/server/routes/workbench/scheduler.js +3 -0
- package/src/ui/server/routes/workbench/taskRunner.codebuddy.test.js +275 -0
- package/src/ui/server/routes/workbench/taskRunner.js +311 -24
- package/src/ui/server/routes/workbench/taskRunner.opencode.test.js +2 -1
- package/src/utils/gitRepoName.js +33 -0
- package/src/ui/public/assets/AgentView-BRAUZCtA.js +0 -1
- package/src/ui/public/assets/CopySessionButton-D0wFpk8a.js +0 -20
- package/src/ui/public/assets/EditorView-DmaGiI-z.js +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-B19uAf8k.css +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-CVFTShrU.js +0 -1
- package/src/ui/public/assets/WorkbenchView-CfSrCIbp.js +0 -8
- package/src/ui/public/assets/WorkbenchView-D6NRqZ5W.css +0 -1
- package/src/ui/public/assets/agentConversations-DpiGplZB.js +0 -8
- package/src/ui/public/assets/configStore-BdL3uW2E.js +0 -1
- package/src/ui/public/assets/index-BS7BDFG4.js +0 -57
- package/src/ui/public/assets/index-DwJWiCiN.css +0 -1
package/src/ui/public/assets/{RemoteManagerDialog-aaNmsKpy.js → RemoteManagerDialog-Dj_GpA-c.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,At as n,Dn as r,Dr as i,En as a,Fn as o,Fr as s,G as ee,J as te,Jr as ne,Jt as re,K as ie,L as ae,Ln as c,On as l,Pn as u,Qn as d,Sn as f,U as oe,Vn as p,W as se,bn as m,dn as h,er as g,gt as ce,i as _,kn as v,lr as y,lt as b,mr as x,nn as S,nt as le,r as C,rt as ue,sr as w,st as de,xr as T,z as fe,zt as E}from"./element-plus-J45pKUrE.js";import{n as D,t as O}from"./_plugin-vue_export-helper-C3o7kvRL.js";import{t as pe}from"./SvgIcon-0n6uuKFm.js";import{t as k}from"./CommonDialog-x5jfL4Lq.js";import{H as A,O as j,U as M}from"./index-BS7BDFG4.js";p(),x(),s(),h();var me={class:`remote-manager`},he={class:`rm-hero`},ge={class:`rm-hero__icon`},_e={class:`rm-hero__text`},ve={class:`rm-section`},ye={class:`rm-section__title`},be={class:`rm-add`},xe={class:`rm-field rm-field--name`},Se={for:`rm-add-name`},Ce={class:`rm-field rm-field--url`},we={for:`rm-add-url`},Te={class:`rm-section rm-section--list`},Ee={class:`rm-section__title`},De={class:`rm-count`},Oe={key:0,class:`rm-empty`},ke={key:1,class:`rm-empty`},Ae={key:2,class:`rm-rows`},je={class:`rm-row__head`},Me={class:`rm-row__name`},Ne={class:`rm-row__actions`},Pe={class:`rm-row__urls`},Fe={class:`rm-url`},Ie={class:`rm-url__label`},Le=[`onClick`],Re={key:0,class:`rm-url`},ze={class:`rm-url__label`},Be={key:1,class:`rm-url`},Ve={class:`rm-url__hint`},He={class:`rm-footer`},Ue={key:0,class:`rm-push-results`},We={class:`rm-push-results__title`},Ge=[`title`],Ke={class:`rm-footer__actions`},qe={class:`rm-tip`},N={key:0,class:`rm-tip rm-tip--warn`},Je={class:`rm-pushurls`},Ye={class:`rm-tip`},P=O(c({__name:`RemoteManagerDialog`,setup(s){let c=A(),p=a({get:()=>c.isRemoteManagerVisible,set:e=>{c.isRemoteManagerVisible=e}}),h=T({name:`origin`,url:``}),x=T(!1),O=a(()=>`git remote add ${h.value.name.trim()||D(`@RMT01:<名称>`)} ${h.value.url.trim()||D(`@RMT01:<地址>`)}`);async function P(){let e=h.value.name.trim(),t=h.value.url.trim();if(!e){_.warning(D(`@RMT01:请输入远程名称`));return}if(!t){_.warning(D(`@RMT01:请输入远程地址`));return}if(c.remotes.some(t=>t.name===e)){_.warning(D(`@RMT01:远程名称已存在`));return}x.value=!0;try{await c.addRemote(t,e)&&(_.success(D(`@RMT01:远程添加成功`)),h.value={name:``,url:``})}finally{x.value=!1}}let F=T(!1),I=T(null),L=T(``),R=T(!1),Xe=a(()=>`git remote rename ${I.value?.name||D(`@RMT01:<原名称>`)} ${L.value.trim()||D(`@RMT01:<新名称>`)}`);function Ze(e){I.value=e,L.value=e.name,F.value=!0}async function z(){let e=I.value;if(!e)return;let t=L.value.trim();if(!t){_.warning(D(`@RMT01:请输入新名称`));return}if(t===e.name){_.warning(D(`@RMT01:新名称与原名称相同`));return}if(c.remotes.some(e=>e.name===t)){_.warning(D(`@RMT01:远程名称已存在`));return}R.value=!0;try{await c.renameRemote(e.name,t)&&(F.value=!1)}finally{R.value=!1}}let B=T(!1),V=T(null),H=T(``),U=T(!1),Qe=a(()=>`git remote set-url ${V.value?.name||D(`@RMT01:<名称>`)} ${H.value.trim()||D(`@RMT01:<地址>`)}`);function $e(e){V.value=e,H.value=e.fetchUrl,B.value=!0}async function W(){let e=V.value;if(!e)return;let t=H.value.trim();if(!t){_.warning(D(`@RMT01:请输入远程地址`));return}U.value=!0;try{await c.setRemoteUrl(e.name,t)&&(B.value=!1)}finally{U.value=!1}}let G=T(!1),K=T(null),q=T([{url:``}]),J=T(!1),et=a(()=>{let e=K.value?.name||D(`@RMT01:<名称>`),t=q.value.map(e=>e.url.trim()).filter(Boolean),n=[`git config --unset-all remote.${e}.pushurl`];for(let r of t)n.push(`git remote set-url --push --add ${e} ${r}`);return n.join(` && `)});function tt(e){K.value=e,q.value=e.hasExplicitPushUrls&&e.pushUrls.length>0?e.pushUrls.map(e=>({url:e})):[{url:``}],G.value=!0}function nt(){if(q.value.length>=10){_.warning(D(`@RMT01:推送地址最多 10 条`));return}q.value.push({url:``})}function rt(e){q.value.splice(e,1),q.value.length===0&&q.value.push({url:``})}async function Y(){let e=K.value;if(!e)return;let t=q.value.map(e=>e.url.trim()).filter(Boolean);J.value=!0;try{await c.setRemotePushUrls(e.name,t)&&(G.value=!1)}finally{J.value=!1}}async function it(e){try{await C.confirm(e.isUpstream?D(`@RMT01:当前分支上游指向该远程,删除后将解除上游跟踪`):D(`@RMT01:删除后本地配置将移除,远程仓库本身不受影响`),`${D(`@RMT01:确认删除远程`)} "${e.name}"`,{type:`warning`,confirmButtonText:D(`@RMT01:删除`),cancelButtonText:D(`@RMT01:取消`)})}catch{return}await c.removeRemote(e.name)}let X=T(``),Z=T(!1);async function at(e){X.value=e.name;try{await c.pushToRemoteWithProgress(void 0,e.name)&&_.success(`${D(`@RMT01:已推送到`)} ${e.name}`)}finally{X.value=``}}async function ot(){Z.value=!0;try{await c.pushAllRemotes()}finally{Z.value=!1}}async function Q(e){if(e)try{await navigator.clipboard.writeText(e),_.success(D(`@RMT01:地址已复制`))}catch{_.error(D(`@RMT01:复制失败`))}}return w(p,e=>{e&&(c.fetchRemotes(),c.lastPushAllResults=[])}),(a,s)=>{let _=pe,C=te,w=oe,T=fe,A=ae,I=se,K=ie,$=ee;return d(),t(f,null,[o(k,{modelValue:p.value,"onUpdate:modelValue":s[3]||=e=>p.value=e,title:i(D)(`@RMT01:远程仓库管理`),size:`large`,type:`flex`,"close-on-click-modal":!1,"custom-class":`remote-manager-dialog`},{footer:y(()=>[r(`div`,He,[i(c).lastPushAllResults.length?(d(),t(`div`,Ue,[r(`span`,We,e(i(D)(`@RMT01:上次推送结果`)),1),(d(!0),t(f,null,g(i(c).lastPushAllResults,n=>(d(),t(`span`,{key:n.name,class:ne([`rm-push-result`,n.ok?`is-ok`:`is-fail`]),title:n.error||``},[o(C,null,{default:y(()=>[n.ok?(d(),l(i(le),{key:0})):(d(),l(i(ue),{key:1}))]),_:2},1024),u(` `+e(n.name),1)],10,Ge))),128))])):v(``,!0),r(`div`,Ke,[i(c).hasMultipleRemotes?(d(),l(T,{key:0,type:`primary`,icon:i(S),loading:Z.value,onClick:ot},{default:y(()=>[u(e(i(D)(`@RMT01:推送到全部远程`)),1)]),_:1},8,[`icon`,`loading`])):v(``,!0),o(T,{onClick:s[2]||=e=>p.value=!1},{default:y(()=>[u(e(i(D)(`@RMT01:关闭`)),1)]),_:1})])])]),default:y(()=>[r(`div`,me,[r(`div`,he,[r(`div`,ge,[o(_,{"icon-class":`remote-repo`})]),r(`div`,_e,[r(`h4`,null,e(i(D)(`@RMT01:管理多个远程仓库`)),1),r(`p`,null,e(i(D)(`@RMT01:一个仓库可配置多个远程(如 origin / upstream / backup),推送时按名称选择目标。`)),1)])]),r(`section`,ve,[r(`h4`,ye,[o(C,null,{default:y(()=>[o(i(E))]),_:1}),r(`span`,null,e(i(D)(`@RMT01:添加远程`)),1)]),r(`div`,be,[r(`div`,xe,[r(`label`,Se,e(i(D)(`@RMT01:远程名称`)),1),o(w,{id:`rm-add-name`,modelValue:h.value.name,"onUpdate:modelValue":s[0]||=e=>h.value.name=e,placeholder:i(D)(`@RMT01:例如 origin、upstream、backup`),clearable:``,onKeyup:m(P,[`enter`])},null,8,[`modelValue`,`placeholder`])]),r(`div`,Ce,[r(`label`,we,e(i(D)(`@RMT01:远程地址`)),1),o(w,{id:`rm-add-url`,modelValue:h.value.url,"onUpdate:modelValue":s[1]||=e=>h.value.url=e,placeholder:`git@github.com:user/project.git`,clearable:``,onKeyup:m(P,[`enter`])},null,8,[`modelValue`])]),o(T,{type:`primary`,loading:x.value,class:`rm-add__btn`,onClick:P},{default:y(()=>[u(e(i(D)(`@RMT01:添加`)),1)]),_:1},8,[`loading`])]),o(j,{command:O.value,title:i(D)(`@RMT01:命令预览:`),placeholder:i(D)(`@RMT01:填写名称与地址后显示命令`)},null,8,[`command`,`title`,`placeholder`])]),r(`section`,Te,[r(`h4`,Ee,[o(C,null,{default:y(()=>[o(i(de))]),_:1}),r(`span`,null,e(i(D)(`@RMT01:远程仓库列表`)),1),r(`span`,De,e(i(c).remotes.length),1)]),i(c).isLoadingRemotes&&i(c).remotes.length===0?(d(),t(`div`,Oe,[o(C,{class:`is-loading`},{default:y(()=>[o(i(n))]),_:1}),r(`span`,null,e(i(D)(`@RMT01:加载中…`)),1)])):i(c).remotes.length===0?(d(),t(`div`,ke,[r(`span`,null,e(i(D)(`@RMT01:暂无远程仓库`)),1)])):(d(),t(`div`,Ae,[(d(!0),t(f,null,g(i(c).remotes,n=>(d(),t(`div`,{key:n.name,class:`rm-row`},[r(`div`,je,[r(`span`,Me,e(n.name),1),n.isUpstream?(d(),l(A,{key:0,size:`small`,type:`success`,effect:`light`},{default:y(()=>[u(e(i(D)(`@RMT01:上游`)),1)]),_:1})):v(``,!0),n.isPushDefault?(d(),l(A,{key:1,size:`small`,type:`warning`,effect:`light`},{default:y(()=>[u(e(i(D)(`@RMT01:默认推送`)),1)]),_:1})):v(``,!0),s[9]||=r(`span`,{class:`rm-row__spacer`},null,-1),r(`div`,Ne,[o(T,{size:`small`,type:`primary`,icon:i(S),loading:X.value===n.name,disabled:i(c).isPushing,onClick:e=>at(n)},{default:y(()=>[u(e(i(D)(`@RMT01:推送`)),1)]),_:1},8,[`icon`,`loading`,`disabled`,`onClick`]),o(M,{tooltip:i(D)(`@RMT01:编辑地址`),size:`small`,onClick:e=>$e(n)},{default:y(()=>[o(C,null,{default:y(()=>[o(i(ce))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),o(M,{tooltip:i(D)(`@RMT01:管理推送地址`),size:`small`,onClick:e=>tt(n)},{default:y(()=>[o(C,null,{default:y(()=>[o(i(re))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),o(M,{tooltip:i(D)(`@RMT01:重命名`),size:`small`,onClick:e=>Ze(n)},{default:y(()=>[o(_,{"icon-class":`git-branch`})]),_:1},8,[`tooltip`,`onClick`]),o(M,{tooltip:i(D)(`@RMT01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:e=>it(n)},{default:y(()=>[o(C,null,{default:y(()=>[o(i(b))]),_:1})]),_:1},8,[`tooltip`,`onClick`])])]),r(`div`,Pe,[r(`div`,Fe,[r(`span`,Ie,e(i(D)(`@RMT01:拉取地址`)),1),o(I,{content:i(D)(`@RMT01:点击复制`),placement:`top`,"show-after":300},{default:y(()=>[r(`span`,{class:`rm-url__value`,onClick:e=>Q(n.fetchUrl)},e(n.fetchUrl),9,Le)]),_:2},1032,[`content`])]),n.hasExplicitPushUrls?(d(),t(`div`,Re,[r(`span`,ze,e(i(D)(`@RMT01:推送地址`)),1),(d(!0),t(f,null,g(n.pushUrls,(t,n)=>(d(),l(I,{key:n,content:i(D)(`@RMT01:点击复制`),placement:`top`,"show-after":300},{default:y(()=>[o(A,{size:`small`,class:`rm-pushurl`,onClick:e=>Q(t)},{default:y(()=>[u(e(t),1)]),_:2},1032,[`onClick`])]),_:2},1032,[`content`]))),128))])):(d(),t(`div`,Be,[r(`span`,Ve,e(i(D)(`@RMT01:推送地址与拉取地址一致`)),1)]))])]))),128))]))])])]),_:1},8,[`modelValue`,`title`]),o(k,{modelValue:F.value,"onUpdate:modelValue":s[5]||=e=>F.value=e,title:i(D)(`@RMT01:重命名远程仓库`),width:`min(660px, 92vw)`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":i(D)(`@RMT01:保存`),"cancel-text":i(D)(`@RMT01:取消`),"confirm-loading":R.value,onConfirm:z},{default:y(()=>[o($,{"label-position":`top`},{default:y(()=>[o(K,{label:i(D)(`@RMT01:新名称`)},{default:y(()=>[o(w,{modelValue:L.value,"onUpdate:modelValue":s[4]||=e=>L.value=e,placeholder:i(D)(`@RMT01:请输入新名称`),clearable:``,onKeyup:m(z,[`enter`])},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),r(`p`,qe,e(i(D)(`@RMT01:重命名后当前分支的上游跟踪会自动跟随,无需手动调整。`)),1),o(j,{command:Xe.value,title:i(D)(`@RMT01:命令预览:`)},null,8,[`command`,`title`])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`]),o(k,{modelValue:B.value,"onUpdate:modelValue":s[7]||=e=>B.value=e,title:i(D)(`@RMT01:编辑远程地址`),width:`min(660px, 92vw)`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":i(D)(`@RMT01:保存`),"cancel-text":i(D)(`@RMT01:取消`),"confirm-loading":U.value,onConfirm:W},{default:y(()=>[o($,{"label-position":`top`},{default:y(()=>[o(K,{label:i(D)(`@RMT01:远程地址`)},{default:y(()=>[o(w,{modelValue:H.value,"onUpdate:modelValue":s[6]||=e=>H.value=e,placeholder:`git@github.com:user/project.git`,clearable:``,onKeyup:m(W,[`enter`])},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1}),V.value?.hasExplicitPushUrls?(d(),t(`p`,N,e(i(D)(`@RMT01:该远程配置了独立的推送地址,不受本次修改影响`)),1)):v(``,!0),o(j,{command:Qe.value,title:i(D)(`@RMT01:命令预览:`)},null,8,[`command`,`title`])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`]),o(k,{modelValue:G.value,"onUpdate:modelValue":s[8]||=e=>G.value=e,title:i(D)(`@RMT01:管理推送地址`),width:`min(660px, 92vw)`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":i(D)(`@RMT01:保存`),"cancel-text":i(D)(`@RMT01:取消`),"confirm-loading":J.value,onConfirm:Y},{default:y(()=>[r(`div`,Je,[(d(!0),t(f,null,g(q.value,(e,n)=>(d(),t(`div`,{key:n,class:`rm-pushurl-row`},[o(w,{modelValue:e.url,"onUpdate:modelValue":t=>e.url=t,placeholder:i(D)(`@RMT01:推送地址`),clearable:``,onKeyup:m(Y,[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),o(M,{tooltip:i(D)(`@RMT01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:e=>rt(n)},{default:y(()=>[o(C,null,{default:y(()=>[o(i(b))]),_:1})]),_:1},8,[`tooltip`,`onClick`])]))),128)),o(T,{link:``,type:`primary`,icon:i(E),onClick:nt},{default:y(()=>[u(e(i(D)(`@RMT01:添加一行`)),1)]),_:1},8,[`icon`]),r(`p`,Ye,e(i(D)(`@RMT01:留空则推送地址与拉取地址一致;配置多个推送地址后可一次推送到多处。`)),1)]),o(j,{command:et.value,title:i(D)(`@RMT01:命令预览:`)},null,8,[`command`,`title`])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])],64)}}}),[[`__scopeId`,`data-v-6b4b7931`]]);export{P as default};
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,At as n,Dn as r,Dr as i,En as a,Fn as o,Fr as s,G as ee,J as te,Jr as ne,Jt as re,K as ie,L as ae,Ln as c,On as l,Pn as u,Qn as d,Sn as f,U as oe,Vn as p,W as se,bn as m,dn as h,er as g,gt as ce,i as _,kn as v,lr as y,lt as b,mr as x,nn as S,nt as le,r as C,rt as ue,sr as w,st as de,xr as T,z as fe,zt as E}from"./element-plus-J45pKUrE.js";import{n as D,t as O}from"./_plugin-vue_export-helper-Csn085FF.js";import{t as pe}from"./SvgIcon-5AlG3IfR.js";import{t as k}from"./CommonDialog-j_53ORvj.js";import{U as A,W as j,k as M}from"./index-DQ82h1aq.js";p(),x(),s(),h();var me={class:`remote-manager`},he={class:`rm-hero`},ge={class:`rm-hero__icon`},_e={class:`rm-hero__text`},ve={class:`rm-section`},ye={class:`rm-section__title`},be={class:`rm-add`},xe={class:`rm-field rm-field--name`},Se={for:`rm-add-name`},Ce={class:`rm-field rm-field--url`},we={for:`rm-add-url`},Te={class:`rm-section rm-section--list`},Ee={class:`rm-section__title`},De={class:`rm-count`},Oe={key:0,class:`rm-empty`},ke={key:1,class:`rm-empty`},Ae={key:2,class:`rm-rows`},je={class:`rm-row__head`},Me={class:`rm-row__name`},Ne={class:`rm-row__actions`},Pe={class:`rm-row__urls`},Fe={class:`rm-url`},Ie={class:`rm-url__label`},Le=[`onClick`],Re={key:0,class:`rm-url`},ze={class:`rm-url__label`},Be={key:1,class:`rm-url`},Ve={class:`rm-url__hint`},He={class:`rm-footer`},Ue={key:0,class:`rm-push-results`},We={class:`rm-push-results__title`},Ge=[`title`],Ke={class:`rm-footer__actions`},qe={class:`rm-tip`},N={key:0,class:`rm-tip rm-tip--warn`},Je={class:`rm-pushurls`},Ye={class:`rm-tip`},P=O(c({__name:`RemoteManagerDialog`,setup(s){let c=A(),p=a({get:()=>c.isRemoteManagerVisible,set:e=>{c.isRemoteManagerVisible=e}}),h=T({name:`origin`,url:``}),x=T(!1),O=a(()=>`git remote add ${h.value.name.trim()||D(`@RMT01:<名称>`)} ${h.value.url.trim()||D(`@RMT01:<地址>`)}`);async function P(){let e=h.value.name.trim(),t=h.value.url.trim();if(!e){_.warning(D(`@RMT01:请输入远程名称`));return}if(!t){_.warning(D(`@RMT01:请输入远程地址`));return}if(c.remotes.some(t=>t.name===e)){_.warning(D(`@RMT01:远程名称已存在`));return}x.value=!0;try{await c.addRemote(t,e)&&(_.success(D(`@RMT01:远程添加成功`)),h.value={name:``,url:``})}finally{x.value=!1}}let F=T(!1),I=T(null),L=T(``),R=T(!1),Xe=a(()=>`git remote rename ${I.value?.name||D(`@RMT01:<原名称>`)} ${L.value.trim()||D(`@RMT01:<新名称>`)}`);function Ze(e){I.value=e,L.value=e.name,F.value=!0}async function z(){let e=I.value;if(!e)return;let t=L.value.trim();if(!t){_.warning(D(`@RMT01:请输入新名称`));return}if(t===e.name){_.warning(D(`@RMT01:新名称与原名称相同`));return}if(c.remotes.some(e=>e.name===t)){_.warning(D(`@RMT01:远程名称已存在`));return}R.value=!0;try{await c.renameRemote(e.name,t)&&(F.value=!1)}finally{R.value=!1}}let B=T(!1),V=T(null),H=T(``),U=T(!1),Qe=a(()=>`git remote set-url ${V.value?.name||D(`@RMT01:<名称>`)} ${H.value.trim()||D(`@RMT01:<地址>`)}`);function $e(e){V.value=e,H.value=e.fetchUrl,B.value=!0}async function W(){let e=V.value;if(!e)return;let t=H.value.trim();if(!t){_.warning(D(`@RMT01:请输入远程地址`));return}U.value=!0;try{await c.setRemoteUrl(e.name,t)&&(B.value=!1)}finally{U.value=!1}}let G=T(!1),K=T(null),q=T([{url:``}]),J=T(!1),et=a(()=>{let e=K.value?.name||D(`@RMT01:<名称>`),t=q.value.map(e=>e.url.trim()).filter(Boolean),n=[`git config --unset-all remote.${e}.pushurl`];for(let r of t)n.push(`git remote set-url --push --add ${e} ${r}`);return n.join(` && `)});function tt(e){K.value=e,q.value=e.hasExplicitPushUrls&&e.pushUrls.length>0?e.pushUrls.map(e=>({url:e})):[{url:``}],G.value=!0}function nt(){if(q.value.length>=10){_.warning(D(`@RMT01:推送地址最多 10 条`));return}q.value.push({url:``})}function rt(e){q.value.splice(e,1),q.value.length===0&&q.value.push({url:``})}async function Y(){let e=K.value;if(!e)return;let t=q.value.map(e=>e.url.trim()).filter(Boolean);J.value=!0;try{await c.setRemotePushUrls(e.name,t)&&(G.value=!1)}finally{J.value=!1}}async function it(e){try{await C.confirm(e.isUpstream?D(`@RMT01:当前分支上游指向该远程,删除后将解除上游跟踪`):D(`@RMT01:删除后本地配置将移除,远程仓库本身不受影响`),`${D(`@RMT01:确认删除远程`)} "${e.name}"`,{type:`warning`,confirmButtonText:D(`@RMT01:删除`),cancelButtonText:D(`@RMT01:取消`)})}catch{return}await c.removeRemote(e.name)}let X=T(``),Z=T(!1);async function at(e){X.value=e.name;try{await c.pushToRemoteWithProgress(void 0,e.name)&&_.success(`${D(`@RMT01:已推送到`)} ${e.name}`)}finally{X.value=``}}async function ot(){Z.value=!0;try{await c.pushAllRemotes()}finally{Z.value=!1}}async function Q(e){if(e)try{await navigator.clipboard.writeText(e),_.success(D(`@RMT01:地址已复制`))}catch{_.error(D(`@RMT01:复制失败`))}}return w(p,e=>{e&&(c.fetchRemotes(),c.lastPushAllResults=[])}),(a,s)=>{let _=pe,C=te,w=oe,T=fe,A=ae,I=se,K=ie,$=ee;return d(),t(f,null,[o(k,{modelValue:p.value,"onUpdate:modelValue":s[3]||=e=>p.value=e,title:i(D)(`@RMT01:远程仓库管理`),size:`large`,type:`flex`,"close-on-click-modal":!1,"custom-class":`remote-manager-dialog`},{footer:y(()=>[r(`div`,He,[i(c).lastPushAllResults.length?(d(),t(`div`,Ue,[r(`span`,We,e(i(D)(`@RMT01:上次推送结果`)),1),(d(!0),t(f,null,g(i(c).lastPushAllResults,n=>(d(),t(`span`,{key:n.name,class:ne([`rm-push-result`,n.ok?`is-ok`:`is-fail`]),title:n.error||``},[o(C,null,{default:y(()=>[n.ok?(d(),l(i(le),{key:0})):(d(),l(i(ue),{key:1}))]),_:2},1024),u(` `+e(n.name),1)],10,Ge))),128))])):v(``,!0),r(`div`,Ke,[i(c).hasMultipleRemotes?(d(),l(T,{key:0,type:`primary`,icon:i(S),loading:Z.value,onClick:ot},{default:y(()=>[u(e(i(D)(`@RMT01:推送到全部远程`)),1)]),_:1},8,[`icon`,`loading`])):v(``,!0),o(T,{onClick:s[2]||=e=>p.value=!1},{default:y(()=>[u(e(i(D)(`@RMT01:关闭`)),1)]),_:1})])])]),default:y(()=>[r(`div`,me,[r(`div`,he,[r(`div`,ge,[o(_,{"icon-class":`remote-repo`})]),r(`div`,_e,[r(`h4`,null,e(i(D)(`@RMT01:管理多个远程仓库`)),1),r(`p`,null,e(i(D)(`@RMT01:一个仓库可配置多个远程(如 origin / upstream / backup),推送时按名称选择目标。`)),1)])]),r(`section`,ve,[r(`h4`,ye,[o(C,null,{default:y(()=>[o(i(E))]),_:1}),r(`span`,null,e(i(D)(`@RMT01:添加远程`)),1)]),r(`div`,be,[r(`div`,xe,[r(`label`,Se,e(i(D)(`@RMT01:远程名称`)),1),o(w,{id:`rm-add-name`,modelValue:h.value.name,"onUpdate:modelValue":s[0]||=e=>h.value.name=e,placeholder:i(D)(`@RMT01:例如 origin、upstream、backup`),clearable:``,onKeyup:m(P,[`enter`])},null,8,[`modelValue`,`placeholder`])]),r(`div`,Ce,[r(`label`,we,e(i(D)(`@RMT01:远程地址`)),1),o(w,{id:`rm-add-url`,modelValue:h.value.url,"onUpdate:modelValue":s[1]||=e=>h.value.url=e,placeholder:`git@github.com:user/project.git`,clearable:``,onKeyup:m(P,[`enter`])},null,8,[`modelValue`])]),o(T,{type:`primary`,loading:x.value,class:`rm-add__btn`,onClick:P},{default:y(()=>[u(e(i(D)(`@RMT01:添加`)),1)]),_:1},8,[`loading`])]),o(M,{command:O.value,title:i(D)(`@RMT01:命令预览:`),placeholder:i(D)(`@RMT01:填写名称与地址后显示命令`)},null,8,[`command`,`title`,`placeholder`])]),r(`section`,Te,[r(`h4`,Ee,[o(C,null,{default:y(()=>[o(i(de))]),_:1}),r(`span`,null,e(i(D)(`@RMT01:远程仓库列表`)),1),r(`span`,De,e(i(c).remotes.length),1)]),i(c).isLoadingRemotes&&i(c).remotes.length===0?(d(),t(`div`,Oe,[o(C,{class:`is-loading`},{default:y(()=>[o(i(n))]),_:1}),r(`span`,null,e(i(D)(`@RMT01:加载中…`)),1)])):i(c).remotes.length===0?(d(),t(`div`,ke,[r(`span`,null,e(i(D)(`@RMT01:暂无远程仓库`)),1)])):(d(),t(`div`,Ae,[(d(!0),t(f,null,g(i(c).remotes,n=>(d(),t(`div`,{key:n.name,class:`rm-row`},[r(`div`,je,[r(`span`,Me,e(n.name),1),n.isUpstream?(d(),l(A,{key:0,size:`small`,type:`success`,effect:`light`},{default:y(()=>[u(e(i(D)(`@RMT01:上游`)),1)]),_:1})):v(``,!0),n.isPushDefault?(d(),l(A,{key:1,size:`small`,type:`warning`,effect:`light`},{default:y(()=>[u(e(i(D)(`@RMT01:默认推送`)),1)]),_:1})):v(``,!0),s[9]||=r(`span`,{class:`rm-row__spacer`},null,-1),r(`div`,Ne,[o(T,{size:`small`,type:`primary`,icon:i(S),loading:X.value===n.name,disabled:i(c).isPushing,onClick:e=>at(n)},{default:y(()=>[u(e(i(D)(`@RMT01:推送`)),1)]),_:1},8,[`icon`,`loading`,`disabled`,`onClick`]),o(j,{tooltip:i(D)(`@RMT01:编辑地址`),size:`small`,onClick:e=>$e(n)},{default:y(()=>[o(C,null,{default:y(()=>[o(i(ce))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),o(j,{tooltip:i(D)(`@RMT01:管理推送地址`),size:`small`,onClick:e=>tt(n)},{default:y(()=>[o(C,null,{default:y(()=>[o(i(re))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),o(j,{tooltip:i(D)(`@RMT01:重命名`),size:`small`,onClick:e=>Ze(n)},{default:y(()=>[o(_,{"icon-class":`git-branch`})]),_:1},8,[`tooltip`,`onClick`]),o(j,{tooltip:i(D)(`@RMT01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:e=>it(n)},{default:y(()=>[o(C,null,{default:y(()=>[o(i(b))]),_:1})]),_:1},8,[`tooltip`,`onClick`])])]),r(`div`,Pe,[r(`div`,Fe,[r(`span`,Ie,e(i(D)(`@RMT01:拉取地址`)),1),o(I,{content:i(D)(`@RMT01:点击复制`),placement:`top`,"show-after":300},{default:y(()=>[r(`span`,{class:`rm-url__value`,onClick:e=>Q(n.fetchUrl)},e(n.fetchUrl),9,Le)]),_:2},1032,[`content`])]),n.hasExplicitPushUrls?(d(),t(`div`,Re,[r(`span`,ze,e(i(D)(`@RMT01:推送地址`)),1),(d(!0),t(f,null,g(n.pushUrls,(t,n)=>(d(),l(I,{key:n,content:i(D)(`@RMT01:点击复制`),placement:`top`,"show-after":300},{default:y(()=>[o(A,{size:`small`,class:`rm-pushurl`,onClick:e=>Q(t)},{default:y(()=>[u(e(t),1)]),_:2},1032,[`onClick`])]),_:2},1032,[`content`]))),128))])):(d(),t(`div`,Be,[r(`span`,Ve,e(i(D)(`@RMT01:推送地址与拉取地址一致`)),1)]))])]))),128))]))])])]),_:1},8,[`modelValue`,`title`]),o(k,{modelValue:F.value,"onUpdate:modelValue":s[5]||=e=>F.value=e,title:i(D)(`@RMT01:重命名远程仓库`),width:`min(660px, 92vw)`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":i(D)(`@RMT01:保存`),"cancel-text":i(D)(`@RMT01:取消`),"confirm-loading":R.value,onConfirm:z},{default:y(()=>[o($,{"label-position":`top`},{default:y(()=>[o(K,{label:i(D)(`@RMT01:新名称`)},{default:y(()=>[o(w,{modelValue:L.value,"onUpdate:modelValue":s[4]||=e=>L.value=e,placeholder:i(D)(`@RMT01:请输入新名称`),clearable:``,onKeyup:m(z,[`enter`])},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),r(`p`,qe,e(i(D)(`@RMT01:重命名后当前分支的上游跟踪会自动跟随,无需手动调整。`)),1),o(M,{command:Xe.value,title:i(D)(`@RMT01:命令预览:`)},null,8,[`command`,`title`])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`]),o(k,{modelValue:B.value,"onUpdate:modelValue":s[7]||=e=>B.value=e,title:i(D)(`@RMT01:编辑远程地址`),width:`min(660px, 92vw)`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":i(D)(`@RMT01:保存`),"cancel-text":i(D)(`@RMT01:取消`),"confirm-loading":U.value,onConfirm:W},{default:y(()=>[o($,{"label-position":`top`},{default:y(()=>[o(K,{label:i(D)(`@RMT01:远程地址`)},{default:y(()=>[o(w,{modelValue:H.value,"onUpdate:modelValue":s[6]||=e=>H.value=e,placeholder:`git@github.com:user/project.git`,clearable:``,onKeyup:m(W,[`enter`])},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1}),V.value?.hasExplicitPushUrls?(d(),t(`p`,N,e(i(D)(`@RMT01:该远程配置了独立的推送地址,不受本次修改影响`)),1)):v(``,!0),o(M,{command:Qe.value,title:i(D)(`@RMT01:命令预览:`)},null,8,[`command`,`title`])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`]),o(k,{modelValue:G.value,"onUpdate:modelValue":s[8]||=e=>G.value=e,title:i(D)(`@RMT01:管理推送地址`),width:`min(660px, 92vw)`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":i(D)(`@RMT01:保存`),"cancel-text":i(D)(`@RMT01:取消`),"confirm-loading":J.value,onConfirm:Y},{default:y(()=>[r(`div`,Je,[(d(!0),t(f,null,g(q.value,(e,n)=>(d(),t(`div`,{key:n,class:`rm-pushurl-row`},[o(w,{modelValue:e.url,"onUpdate:modelValue":t=>e.url=t,placeholder:i(D)(`@RMT01:推送地址`),clearable:``,onKeyup:m(Y,[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),o(j,{tooltip:i(D)(`@RMT01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:e=>rt(n)},{default:y(()=>[o(C,null,{default:y(()=>[o(i(b))]),_:1})]),_:1},8,[`tooltip`,`onClick`])]))),128)),o(T,{link:``,type:`primary`,icon:i(E),onClick:nt},{default:y(()=>[u(e(i(D)(`@RMT01:添加一行`)),1)]),_:1},8,[`icon`]),r(`p`,Ye,e(i(D)(`@RMT01:留空则推送地址与拉取地址一致;配置多个推送地址后可一次推送到多处。`)),1)]),o(M,{command:et.value,title:i(D)(`@RMT01:命令预览:`)},null,8,[`command`,`title`])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])],64)}}}),[[`__scopeId`,`data-v-6b4b7931`]]);export{P as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,Dn as n,Dr as r,En as i,Fn as a,Fr as o,J as s,Jt as c,Ln as l,Qn as u,Sn as d,Vn as f,W as p,dn as m,lr as h,mr as g,xn as _}from"./element-plus-J45pKUrE.js";import{n as v,t as y}from"./_plugin-vue_export-helper-
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,Dn as n,Dr as r,En as i,Fn as a,Fr as o,J as s,Jt as c,Ln as l,Qn as u,Sn as d,Vn as f,W as p,dn as m,lr as h,mr as g,xn as _}from"./element-plus-J45pKUrE.js";import{n as v,t as y}from"./_plugin-vue_export-helper-Csn085FF.js";import{t as b}from"./SvgIcon-5AlG3IfR.js";import{U as x,W as S}from"./index-DQ82h1aq.js";f(),g(),m(),o();var C={class:`remote-wrapper`},w=[`href`,`aria-label`],T=[`aria-label`],E={key:1,class:`repo-url repo-url--empty`},D=y(l({__name:`RemoteRepoCard`,setup(o){let l=x(),f=i(()=>{let e=l.remoteUrl||``,t=e.replace(/\.git$/,``).replace(/\/+$/,``).split(/[\\/:]+/).filter(Boolean);return t.length>=2?t.slice(-2).join(`/`):e});return(i,o)=>{let m=s,g=b,y=p;return u(),t(`div`,C,[a(S,{size:`small`,tooltip:r(v)(`@F13B4:管理远程仓库`),onClick:o[0]||=e=>r(l).isRemoteManagerVisible=!0},{default:h(()=>[a(m,null,{default:h(()=>[a(r(c))]),_:1})]),_:1},8,[`tooltip`]),r(l).remoteUrl?(u(),t(d,{key:0},[a(y,{content:r(l).isRemoteBrowsable?r(v)(`@F13B4:在浏览器中打开仓库主页`):r(v)(`@F13B4:无法识别该远程仓库的网页地址`),placement:`top`,effect:`dark`,"show-after":300},{default:h(()=>[r(l).isRemoteBrowsable?(u(),t(`a`,{key:0,href:r(l).remoteWebUrl,target:`_blank`,rel:`noopener noreferrer`,class:`remote-repo-link`,"aria-label":r(v)(`@F13B4:在浏览器中打开仓库主页`),onClick:o[1]||=_(()=>{},[`stop`])},[a(g,{"icon-class":`remote-repo`,"class-name":`remote-repo-icon`})],8,w)):(u(),t(`span`,{key:1,class:`remote-repo-link remote-repo-link--disabled`,"aria-label":r(v)(`@F13B4:无法识别该远程仓库的网页地址`)},[a(g,{"icon-class":`remote-repo`,"class-name":`remote-repo-icon`})],8,T))]),_:1},8,[`content`]),a(y,{content:`${r(v)(`@F13B4:复制仓库地址`)} · ${r(l).remoteUrl}`,placement:`top`,effect:`dark`,"show-after":300},{default:h(()=>[n(`span`,{class:`repo-url clickable`,onClick:o[2]||=e=>r(l).copyRemoteUrl()},e(f.value),1)]),_:1},8,[`content`])],64)):(u(),t(`span`,E,e(r(v)(`@F13B4:未配置远程仓库`)),1))])}}}),[[`__scopeId`,`data-v-a4f3fbeb`]]);export{D as default};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{$r as t,An as n,Dn as r,Dr as i,En as a,Fn as o,Fr as s,Gn as c,Jn as ee,Jr as l,Ln as u,Nn as te,Pn as d,Qn as f,Sn as p,Sr as ne,Vn as m,W as re,Xn as ie,Xr as h,bn as ae,dn as g,er as _,i as oe,kn as v,lr as y,mr as b,sr as x,ur as S,vn as se,xr as C,yn as w}from"./element-plus-J45pKUrE.js";import{n as T,t as ce}from"./_plugin-vue_export-helper-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{$r as t,An as n,Dn as r,Dr as i,En as a,Fn as o,Fr as s,Gn as c,Jn as ee,Jr as l,Ln as u,Nn as te,Pn as d,Qn as f,Sn as p,Sr as ne,Vn as m,W as re,Xn as ie,Xr as h,bn as ae,dn as g,er as _,i as oe,kn as v,lr as y,mr as b,sr as x,ur as S,vn as se,xr as C,yn as w}from"./element-plus-J45pKUrE.js";import{n as T,t as ce}from"./_plugin-vue_export-helper-Csn085FF.js";import{t as E}from"./dagre-DPkLmI0C.js";import{t as le}from"./configStore-DOaPZ6Mq.js";import{r as D}from"./monaco-ChZ0d0qB.js";import{a as ue,c as de,i as fe,l as pe,n as me,o as he,r as ge,s as _e,t as ve}from"./vue-flow-8aIpM5CU.js";import{I as ye,R as be}from"./index-DQ82h1aq.js";m(),b(),s(),g();var xe=e(E(),1),Se={class:`source-map-view`},Ce={class:`sm-toolbar`},we={class:`sm-toolbar-left`},Te={class:`sm-title`},Ee={class:`sm-toolbar-center`},De=[`placeholder`,`disabled`],Oe=[`disabled`],ke={class:`sm-toolbar-right`},Ae={class:`sm-body`},je={class:`sm-panel-header sm-panel-header--tabs`},Me={key:0,class:`sm-badge`},Ne={class:`sm-panel-body sm-file-tree`},Pe=[`onClick`],Fe={key:1,class:`sm-tree-arrow-spacer`},Ie={key:2,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Le=[`xlink:href`],Re={key:3,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},ze=[`xlink:href`],Be=[`title`],Ve={key:1,class:`sm-tree-empty`},He={class:`sm-panel-body sm-outline-body`},Ue={class:`sm-badge`,style:{"margin-left":`auto`}},We=[`onClick`],Ge=[`title`],Ke={key:0,class:`sm-outline-desc`},qe={key:1,class:`sm-tree-empty`},Je={class:`sm-panel sm-panel-graph`},Ye={key:0,class:`sm-project-info`},Xe={class:`sm-lang-badge`},Ze={class:`sm-summary-text`},Qe={class:`sm-graph-container`},$e={class:`sm-layout-btn-wrap`},et=[`disabled`],tt=[`title`],nt={class:`sm-fn-label`},rt={key:0,class:`sm-fn-desc`},it={key:0,class:`sm-graph-empty`},at={viewBox:`0 0 24 24`,width:`48`,height:`48`,fill:`none`,stroke:`currentColor`,"stroke-width":`1`,style:{opacity:`0.3`}},ot={key:1,class:`sm-graph-loading`},st={class:`sm-log-header`},ct={key:0,class:`sm-log-indicator`},lt={class:`sm-log-body`,ref:`logBodyRef`},ut={key:0,class:`sm-empty`},dt={class:`sm-panel-header`},ft={key:0,class:`sm-badge sm-badge-amber`},pt={key:0,class:`sm-node-detail`},mt={class:`sm-node-name`},ht={class:`sm-node-file`},gt={key:0},_t={key:0,class:`sm-node-desc`},vt={class:`sm-panel-body sm-source-body`},yt={key:0,class:`sm-source-overlay`},bt={key:1,class:`sm-source-overlay sm-source-placeholder`},O=ce(u({__name:`SourceMapView`,setup(e){let{theme:s}=ye(),u=le(),m=C(u.currentDirectory||``),g=C(`idle`),b=C([]),ce=0,E=C(null),O=C(null),k=C(`files`),A=C(``),j=C(``),M=C(!1),N=C([]),P=C(new Set),F=C({files:!0,graph:!0,source:!0}),I=C(!1),L=C(220),R=C(360),z=C(140),B=null,V=0,xt=0,H=0;function U(e,t){B=e,V=t.clientX,xt=t.clientY,H=e===`files`?L.value:e===`source`?R.value:z.value,document.addEventListener(`mousemove`,St),document.addEventListener(`mouseup`,W),t.preventDefault()}function St(e){B&&(B===`files`?L.value=Math.max(120,Math.min(480,H+e.clientX-V)):B===`source`?R.value=Math.max(200,Math.min(700,H+V-e.clientX)):z.value=Math.max(60,Math.min(500,H+xt-e.clientY)))}function W(){B=null,document.removeEventListener(`mousemove`,St),document.removeEventListener(`mouseup`,W)}let G=C(null),K=ne(null),{fitView:Ct,setNodes:q,setEdges:J,getNodes:wt,getEdges:Tt,updateNodeInternals:Et}=pe(),Y=a(()=>g.value===`scanning`||g.value===`analyzing`),Dt=a(()=>s.value===`dark`?`#334155`:`#cbd5e1`),X=a(()=>E.value?.nodes.find(e=>e.id===O.value)??null),Ot=a(()=>{if(!E.value)return[];let e=new Map;for(let t of E.value.nodes){let n=t.subsystem??`__default__`;if(!e.has(n)){let r=E.value.subsystems?.find(e=>e.name===n);e.set(n,{displayName:r?.displayName||t.subsystem||T(`@SRCMAP:默认`),color:t.subsystemColor||Q[0],nodes:[]})}e.get(n).nodes.push(t)}return[...e.entries()].map(([,e])=>e)});function Z(e,t=`info`){b.value.push({id:++ce,message:e,type:t,timestamp:Date.now()}),b.value.length>200&&b.value.splice(0,b.value.length-200)}function kt(e){let t={name:``,path:``,kind:`dir`,children:[],childMap:new Map};for(let n of e){let e=n.trim().split(`/`).filter(Boolean),r=t,i=``;for(let t=0;t<e.length;t++){let n=e[t];i=i?`${i}/${n}`:n;let a=t===e.length-1,o=r.childMap.get(n);o||(o={name:n,path:i,kind:a?`file`:`dir`,children:[],childMap:new Map},r.childMap.set(n,o),r.children.push(o)),r=o}}let n=e=>{e.sort((e,t)=>e.kind===t.kind?e.name.localeCompare(t.name):e.kind===`dir`?-1:1),e.forEach(e=>{e.kind===`dir`&&n(e.children)})};return n(t.children),t.children}let Q=[`var(--color-warning-light)`,`var(--color-primary)`,`var(--color-success-light)`,`var(--color-think)`];function At(e){return e.subsystemColor?e.subsystemColor:e.subsystemIndex===void 0?e.importance===`high`?`var(--color-warning-light)`:e.importance===`low`?`#94a3b8`:`var(--color-primary)`:Q[e.subsystemIndex%Q.length]}function jt(e){return{ts:`typescript`,tsx:`typescript`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,jsx:`javascript`,vue:`html`,svelte:`html`,html:`html`,py:`python`,java:`java`,go:`go`,rs:`rust`,cpp:`cpp`,cc:`cpp`,cxx:`cpp`,c:`c`,h:`c`,hpp:`cpp`,cs:`csharp`,rb:`ruby`,php:`php`,swift:`swift`,kt:`kotlin`,sh:`shell`,bash:`shell`,json:`json`,yaml:`yaml`,yml:`yaml`,md:`markdown`,css:`css`,scss:`scss`,less:`less`,sql:`sql`}[e.split(`.`).pop()?.toLowerCase()||``]||`plaintext`}function Mt(){G.value&&!K.value&&(K.value=D.create(G.value,{value:``,language:`plaintext`,theme:s.value===`dark`?`vs-dark`:`vs`,readOnly:!0,fontSize:12,lineHeight:19,fontFamily:`'JetBrains Mono', 'Fira Code', Consolas, monospace`,minimap:{enabled:!1},scrollBeyondLastLine:!1,automaticLayout:!0,wordWrap:`off`,padding:{top:8,bottom:8},scrollbar:{verticalScrollbarSize:6,horizontalScrollbarSize:6}}))}x(s,e=>{K.value&&D.setTheme(e===`dark`?`vs-dark`:`vs`)});function Nt(e,t){let n={};t.forEach(e=>{n[e.source]||(n[e.source]=[]),n[e.source].push(e.target)});let r=new Map;e.forEach(e=>{let t=e.subsystem??`__default`;r.has(t)||r.set(t,[]),r.get(t).push(e)});let i=[],a=0;for(let[,e]of r){let t=new Set(e.map(e=>e.id)),r={},o=e.length?[e[0].id]:[];for(o[0]&&(r[o[0]]=0);o.length;){let e=o.shift();(n[e]||[]).filter(e=>t.has(e)).forEach(t=>{r[t]===void 0&&(r[t]=(r[e]??0)+1,o.push(t))})}let s={};e.forEach(e=>{let t=r[e.id]??0;s[t]=(s[t]||0)+1});let c={};e.forEach(e=>{let t=r[e.id]??0;c[t]=(c[t]??-1)+1;let n=c[t],o=s[t]??1,ee=a*600+n*220-(o-1)*220/2,l=t*110,u=At(e);i.push({id:e.id,type:`default`,position:{x:ee,y:l},label:e.label,class:`sm-fn-node`,data:{...e,_accentColor:u},style:{"--node-accent":u}})}),a++}return{flowNodes:i,flowEdges:t.map((e,t)=>({id:`e_${t}_${e.source}_${e.target}`,source:e.source,target:e.target,type:`smoothstep`,animated:!1,class:`sm-fn-edge`,markerEnd:{type:ue.ArrowClosed}}))}}async function Pt(){let e=wt.value,t=Tt.value;if(e.length!==0){I.value=!0;try{await c(),await new Promise(e=>requestAnimationFrame(()=>e())),Et(e.map(e=>e.id)),await new Promise(e=>requestAnimationFrame(()=>e()));let n=new Map;e.forEach(e=>{let t=e.data?.subsystem??`__default__`;n.has(t)||n.set(t,[]),n.get(t).push(e)});let r=new Map,i=0;for(let[,e]of n){let n=new xe.default.graphlib.Graph;n.setDefaultEdgeLabel(()=>({})),n.setGraph({rankdir:`TB`,nodesep:55,ranksep:75,marginx:40,marginy:40});let a=new Set(e.map(e=>e.id));e.forEach(e=>{let t=190,r=e.data?.description?68:48,i=document.querySelector(`.vue-flow__node[data-id="${e.id}"]`);i&&i.offsetWidth>0&&(t=i.offsetWidth,r=i.offsetHeight),n.setNode(e.id,{width:t,height:r})}),t.forEach(e=>{a.has(e.source)&&a.has(e.target)&&n.setEdge(e.source,e.target)}),xe.default.layout(n);let o=0;e.forEach(e=>{let t=n.node(e.id);t&&(r.set(e.id,{x:i+t.x-t.width/2,y:t.y-t.height/2}),o=Math.max(o,t.x+t.width/2))}),i+=o+120}let a=e.map(e=>({...e,position:r.get(e.id)??e.position}));q(a),await c(),Ct({padding:.18})}finally{I.value=!1}}}async function Ft(){if(!m.value.trim()){oe.warning(T(`@SRCMAP:请先输入项目路径`));return}if(!Y.value){b.value=[],E.value=null,O.value=null,A.value=``,j.value=``,q([]),J([]),g.value=`scanning`,Z(T(`@SRCMAP:开始分析项目...`),`info`);try{let e=await fetch(`/api/code-analysis/analyze`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:m.value})});if(!e.ok){let t=await e.json().catch(()=>({error:`请求失败`}));throw Error(t.error||`HTTP ${e.status}`)}let t=e.body.getReader(),n=new TextDecoder,r=``;g.value=`analyzing`;let i=``,a=[];for(;;){let{done:e,value:o}=await t.read();if(e)break;r+=n.decode(o,{stream:!0});let s=r.split(`
|
|
2
2
|
`);r=s.pop()??``;for(let e of s)if(e.startsWith(`event:`))i=e.slice(6).trim(),a=[];else if(e.startsWith(`data:`))a.push(e.slice(5).trim());else if(e===``){if(i&&a.length){let e=a.join(``);try{let t=JSON.parse(e);It(i,t)}catch{}}i=``,a=[]}}}catch(e){Z(`${T(`@SRCMAP:分析失败`)}: ${e.message}`,`error`),g.value=`error`}}}function It(e,t){if(e===`log`)Z(t.message,t.type||`info`);else if(e===`files`){let e=t.files||[];N.value=kt(e),N.value.forEach(e=>{e.kind===`dir`&&P.value.add(e.path)})}else if(e===`result`){E.value={language:t.language||``,entryFile:t.entryFile||``,entryFunction:t.entryFunction||``,nodes:Array.isArray(t.nodes)?t.nodes:[],edges:Array.isArray(t.edges)?t.edges:[],techStack:Array.isArray(t.techStack)?t.techStack:[],summary:t.summary||``,allFiles:Array.isArray(t.allFiles)?t.allFiles:[],codeFiles:Array.isArray(t.codeFiles)?t.codeFiles:[],subsystems:Array.isArray(t.subsystems)?t.subsystems:void 0};let{flowNodes:e,flowEdges:n}=Nt(E.value.nodes,E.value.edges);q(e),J(n),c(()=>Pt())}else e===`done`&&(t.error?(Z(`${T(`@SRCMAP:分析失败`)}: ${t.error}`,`error`),g.value=`error`):g.value=`done`)}async function $(e){if(e&&!M.value&&j.value!==e){M.value=!0,j.value=e,A.value=``;try{let t=await(await fetch(`/api/code-analysis/file-content?path=${encodeURIComponent(m.value)}&file=${encodeURIComponent(e)}`)).json();if(t.error)throw Error(t.error);A.value=t.content||``}catch(e){A.value=`// ${T(`@SRCMAP:加载失败`)}: ${e.message}`}finally{M.value=!1}}}function Lt(e){let t=e.node.data;O.value=t.id,t.file&&$(t.file)}function Rt(e){P.value.has(e)?P.value.delete(e):P.value.add(e)}let zt=a(()=>{let e=[];function t(n,r){for(let i of n){let n=P.value.has(i.path);e.push({name:i.name,path:i.path,kind:i.kind,depth:r,expanded:n}),i.kind===`dir`&&n&&t(i.children,r+1)}}return t(N.value,0),e});return x(()=>u.currentDirectory,e=>{e&&!m.value&&(m.value=e)}),x([A,j],([e,t])=>{let n=K.value;if(!n)return;let r=jt(t||``),i=n.getModel(),a=D.createModel(e||``,r);n.setModel(a),i?.dispose(),n.setScrollPosition({scrollTop:0,scrollLeft:0})}),ie(()=>{Mt(),!m.value&&u.currentDirectory&&(m.value=u.currentDirectory)}),ee(()=>{K.value?.getModel()?.dispose(),K.value?.dispose(),W()}),(e,a)=>{let c=re;return f(),n(`div`,Se,[r(`div`,Ce,[r(`div`,we,[a[9]||=r(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,class:`sm-icon-map`},[r(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`}),r(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`}),r(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`})],-1),r(`span`,Te,t(i(T)(`@SRCMAP:源码地图`)),1)]),r(`div`,Ee,[S(r(`input`,{"onUpdate:modelValue":a[0]||=e=>m.value=e,class:`sm-path-input`,placeholder:i(T)(`@SRCMAP:输入项目目录路径`),disabled:Y.value,onKeydown:ae(Ft,[`enter`])},null,40,De),[[se,m.value]]),r(`button`,{class:`sm-btn sm-btn-primary`,disabled:Y.value,onClick:Ft},[Y.value?(f(),n(p,{key:0},[a[10]||=r(`span`,{class:`sm-spinner`},null,-1),d(` `+t(i(T)(`@SRCMAP:分析中...`)),1)],64)):(f(),n(p,{key:1},[d(t(g.value===`done`?i(T)(`@SRCMAP:重新分析`):i(T)(`@SRCMAP:开始分析`)),1)],64))],8,Oe)]),r(`div`,ke,[o(c,{content:i(T)(`@SRCMAP:文件列表`),placement:`bottom`},{default:y(()=>[r(`button`,{class:l([`sm-panel-btn`,{active:F.value.files}]),onClick:a[1]||=e=>F.value.files=!F.value.files},[...a[11]||=[r(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[r(`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`})],-1)]],2)]),_:1},8,[`content`]),o(c,{content:i(T)(`@SRCMAP:调用图`),placement:`bottom`},{default:y(()=>[r(`button`,{class:l([`sm-panel-btn`,{active:F.value.graph}]),onClick:a[2]||=e=>F.value.graph=!F.value.graph},[...a[12]||=[r(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[r(`circle`,{cx:`12`,cy:`12`,r:`3`}),r(`circle`,{cx:`3`,cy:`6`,r:`2`}),r(`circle`,{cx:`21`,cy:`6`,r:`2`}),r(`circle`,{cx:`3`,cy:`18`,r:`2`}),r(`circle`,{cx:`21`,cy:`18`,r:`2`}),r(`line`,{x1:`5`,y1:`6`,x2:`9`,y2:`11`}),r(`line`,{x1:`19`,y1:`6`,x2:`15`,y2:`11`}),r(`line`,{x1:`5`,y1:`18`,x2:`9`,y2:`13`}),r(`line`,{x1:`19`,y1:`18`,x2:`15`,y2:`13`})],-1)]],2)]),_:1},8,[`content`]),o(c,{content:i(T)(`@SRCMAP:源码面板`),placement:`bottom`},{default:y(()=>[r(`button`,{class:l([`sm-panel-btn`,{active:F.value.source}]),onClick:a[3]||=e=>F.value.source=!F.value.source},[...a[13]||=[r(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[r(`polyline`,{points:`16 18 22 12 16 6`}),r(`polyline`,{points:`8 6 2 12 8 18`})],-1)]],2)]),_:1},8,[`content`])])]),r(`div`,Ae,[S(r(`div`,{class:`sm-panel sm-panel-files`,style:h({width:L.value+`px`})},[r(`div`,je,[r(`button`,{class:l([`sm-tab-btn`,{active:k.value===`files`}]),onClick:a[4]||=e=>k.value=`files`},[a[14]||=r(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[r(`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`})],-1),d(` `+t(i(T)(`@SRCMAP:文件列表`))+` `,1),E.value?(f(),n(`span`,Me,t(E.value.allFiles.length),1)):v(``,!0)],2),r(`button`,{class:l([`sm-tab-btn`,{active:k.value===`outline`}]),onClick:a[5]||=e=>k.value=`outline`},[a[15]||=te(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" data-v-8d465389><line x1="8" y1="6" x2="21" y2="6" data-v-8d465389></line><line x1="8" y1="12" x2="21" y2="12" data-v-8d465389></line><line x1="8" y1="18" x2="21" y2="18" data-v-8d465389></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-8d465389></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-8d465389></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-8d465389></line></svg>`,1),d(` `+t(i(T)(`@SRCMAP:大纲`)),1)],2)]),S(r(`div`,Ne,[zt.value.length>0?(f(!0),n(p,{key:0},_(zt.value,e=>(f(),n(`div`,{key:e.path,class:l([`sm-tree-node`,{"sm-tree-node--dir":e.kind===`dir`,"sm-tree-node--active":e.kind===`file`&&j.value===e.path}]),style:h({paddingLeft:10+e.depth*14+`px`}),onClick:t=>e.kind===`dir`?Rt(e.path):$(e.path)},[e.kind===`dir`?(f(),n(`span`,{key:0,class:l([`sm-tree-arrow`,{expanded:e.expanded}])},[...a[16]||=[r(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[r(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(f(),n(`span`,Fe)),e.kind===`dir`?(f(),n(`svg`,Ie,[r(`use`,{"xlink:href":`#${i(be)(e.name)||`icon-folder`}`},null,8,Le)])):(f(),n(`svg`,Re,[r(`use`,{"xlink:href":`#${i(be)(e.name)}`},null,8,ze)])),r(`span`,{class:`sm-tree-name`,title:e.path},t(e.name),9,Be)],14,Pe))),128)):(f(),n(`div`,Ve,t(i(T)(`@SRCMAP:暂无文件,请先开始分析`)),1))],512),[[w,k.value===`files`]]),S(r(`div`,He,[Ot.value.length>0?(f(!0),n(p,{key:0},_(Ot.value,e=>(f(),n(`div`,{key:e.displayName,class:`sm-outline-group`},[r(`div`,{class:`sm-outline-group-header`,style:h({color:e.color})},[a[17]||=r(`svg`,{viewBox:`0 0 24 24`,width:`8`,height:`8`,fill:`currentColor`},[r(`circle`,{cx:`12`,cy:`12`,r:`6`})],-1),d(` `+t(e.displayName)+` `,1),r(`span`,Ue,t(e.nodes.length),1)],4),(f(!0),n(p,null,_(e.nodes,i=>(f(),n(`div`,{key:i.id,class:l([`sm-outline-node`,{"sm-outline-node--active":O.value===i.id}]),onClick:e=>{O.value=i.id,i.file&&$(i.file)}},[r(`span`,{class:`sm-outline-dot`,style:h({background:e.color})},null,4),r(`span`,{class:`sm-outline-label`,title:i.file||i.label},t(i.label),9,Ge),i.description?(f(),n(`span`,Ke,t(i.description.length>18?i.description.slice(0,18)+`…`:i.description),1)):v(``,!0)],10,We))),128))]))),128)):(f(),n(`div`,qe,t(i(T)(`@SRCMAP:暂无分析结果`)),1))],512),[[w,k.value===`outline`]])],4),[[w,F.value.files]]),S(r(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:a[6]||=e=>U(`files`,e)},null,544),[[w,F.value.files&&F.value.graph]]),S(r(`div`,Je,[E.value?(f(),n(`div`,Ye,[r(`span`,Xe,t(E.value.language),1),E.value.subsystems&&E.value.subsystems.length>1?(f(!0),n(p,{key:0},_(E.value.subsystems,e=>(f(),n(`span`,{key:e.name,class:`sm-subsystem-tag`,style:h({borderColor:e.color,color:e.color})},`● `+t(e.displayName||e.name),5))),128)):(f(!0),n(p,{key:1},_(E.value.techStack.slice(0,4),e=>(f(),n(`span`,{key:e,class:`sm-tech-tag`},t(e),1))),128)),r(`span`,Ze,t(E.value.summary),1)])):v(``,!0),r(`div`,Qe,[r(`div`,$e,[r(`button`,{class:`sm-layout-btn`,disabled:I.value||!E.value,onClick:Pt},[a[18]||=te(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" data-v-8d465389><rect x="3" y="3" width="7" height="7" rx="1" data-v-8d465389></rect><rect x="14" y="3" width="7" height="7" rx="1" data-v-8d465389></rect><rect x="3" y="14" width="7" height="7" rx="1" data-v-8d465389></rect><rect x="14" y="14" width="7" height="7" rx="1" data-v-8d465389></rect></svg>`,1),d(` `+t(I.value?i(T)(`@SRCMAP:布局中...`):i(T)(`@SRCMAP:优化布局`)),1)],8,et)]),o(i(_e),{class:`sm-vue-flow`,"default-viewport":{zoom:1},"min-zoom":.2,"max-zoom":4,"fit-view-on-init":``,onNodeClick:Lt},{"node-default":y(({data:e,label:a})=>[o(i(de),{type:`target`,position:i(he).Top},null,8,[`position`]),r(`div`,{class:`sm-fn-inner`,title:`${a}${e?.description?`
|
|
3
3
|
`+e.description:``}`},[r(`div`,nt,t(a),1),e?.description?(f(),n(`div`,rt,t(e.description.length>22?e.description.slice(0,22)+`…`:e.description),1)):v(``,!0)],8,tt),o(i(de),{type:`source`,position:i(he).Bottom},null,8,[`position`])]),default:y(()=>[o(i(fe),{variant:i(ge).Dots,gap:20,size:1,"pattern-color":Dt.value},null,8,[`variant`,`pattern-color`]),o(i(me)),o(i(ve),{"node-color":`var(--color-primary)`,"mask-color":i(s)===`dark`?`rgba(0,0,0,0.55)`:`rgba(15,23,42,0.06)`},null,8,[`mask-color`])]),_:1}),!E.value&&!Y.value?(f(),n(`div`,it,[(f(),n(`svg`,at,[...a[19]||=[r(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`},null,-1),r(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`},null,-1),r(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`},null,-1)]])),r(`p`,null,t(i(T)(`@SRCMAP:输入项目路径后点击开始分析`)),1)])):v(``,!0),Y.value&&!E.value?(f(),n(`div`,ot,[a[20]||=r(`span`,{class:`sm-spinner sm-spinner-lg`},null,-1),r(`p`,null,t(i(T)(`@SRCMAP:AI 正在分析项目结构...`)),1)])):v(``,!0)]),r(`div`,{class:`sm-resizer sm-resizer-h`,onMousedown:a[7]||=e=>U(`log`,e)},null,32),r(`div`,{class:`sm-log-panel`,style:h({height:z.value+`px`})},[r(`div`,st,[a[21]||=r(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[r(`polyline`,{points:`4 17 10 11 4 5`}),r(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})],-1),d(` `+t(i(T)(`@SRCMAP:Agent 日志`))+` `,1),Y.value?(f(),n(`span`,ct)):v(``,!0)]),r(`div`,lt,[(f(!0),n(p,null,_(b.value.slice(-50),e=>(f(),n(`div`,{key:e.id,class:l([`sm-log-entry`,`sm-log-entry--${e.type}`])},t(e.message),3))),128)),b.value.length===0?(f(),n(`div`,ut,t(i(T)(`@SRCMAP:等待开始分析`)),1)):v(``,!0)],512)],4)],512),[[w,F.value.graph]]),S(r(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:a[8]||=e=>U(`source`,e)},null,544),[[w,F.value.graph&&F.value.source]]),S(r(`div`,{class:`sm-panel sm-panel-source`,style:h({width:R.value+`px`})},[r(`div`,dt,[a[22]||=r(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[r(`polyline`,{points:`16 18 22 12 16 6`}),r(`polyline`,{points:`8 6 2 12 8 18`})],-1),d(` `+t(j.value||i(T)(`@SRCMAP:源码面板`))+` `,1),X.value?(f(),n(`span`,ft,t(X.value.label),1)):v(``,!0)]),X.value?(f(),n(`div`,pt,[r(`div`,mt,t(X.value.label),1),r(`div`,ht,[d(t(X.value.file),1),X.value.line?(f(),n(`span`,gt,` :`+t(X.value.line),1)):v(``,!0)]),X.value.description?(f(),n(`div`,_t,t(X.value.description),1)):v(``,!0)])):v(``,!0),r(`div`,vt,[M.value?(f(),n(`div`,yt,[...a[23]||=[r(`span`,{class:`sm-spinner`},null,-1)]])):v(``,!0),!M.value&&!A.value?(f(),n(`div`,bt,t(i(T)(`@SRCMAP:点击调用图中的节点查看源码`)),1)):v(``,!0),r(`div`,{ref_key:`monacoContainerRef`,ref:G,class:`sm-monaco-container`},null,512)])],4),[[w,F.value.source]])])])}}}),[[`__scopeId`,`data-v-8d465389`]]);export{O as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{An as e,Dn as t,En as n,Fr as r,Jr as i,Ln as a,Qn as o,Vn as s}from"./element-plus-J45pKUrE.js";import{t as c}from"./_plugin-vue_export-helper-
|
|
1
|
+
import{An as e,Dn as t,En as n,Fr as r,Jr as i,Ln as a,Qn as o,Vn as s}from"./element-plus-J45pKUrE.js";import{t as c}from"./_plugin-vue_export-helper-Csn085FF.js";s(),r();var l=[`aria-hidden`,`role`,`aria-label`,`focusable`],u=[`xlink:href`],d=c(a({__name:`index`,props:{iconClass:{type:String,required:!0},className:{type:String,default:``},decorative:{type:Boolean,default:!0},ariaLabel:{type:String,default:``}},setup(r){let a=r,s=n(()=>`#icon-${a.iconClass}`),c=n(()=>a.className?`svg-icon ${a.className}`:`svg-icon`);return(n,a)=>(o(),e(`svg`,{class:i(c.value),"aria-hidden":r.decorative?`true`:void 0,role:r.decorative?void 0:`img`,"aria-label":r.decorative?void 0:r.ariaLabel||void 0,focusable:r.decorative?`false`:void 0},[t(`use`,{"xlink:href":s.value},null,8,u)],10,l))}}),[[`__scopeId`,`data-v-7665e9bc`]]);export{d as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,Dn as n,Dr as r,En as i,Fn as a,Fr as o,Ft as s,J as c,Jr as l,Ln as u,On as d,Pn as f,Qn as p,Sn as m,St as h,Vn as g,Xr as ee,dn as _,er as v,it as te,kn as y,lr as b,mr as x,tr as S,xn as C}from"./element-plus-J45pKUrE.js";import{n as w,t as T}from"./_plugin-vue_export-helper-
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,Dn as n,Dr as r,En as i,Fn as a,Fr as o,Ft as s,J as c,Jr as l,Ln as u,On as d,Pn as f,Qn as p,Sn as m,St as h,Vn as g,Xr as ee,dn as _,er as v,it as te,kn as y,lr as b,mr as x,tr as S,xn as C}from"./element-plus-J45pKUrE.js";import{n as w,t as T}from"./_plugin-vue_export-helper-Csn085FF.js";import{t as E}from"./configStore-DOaPZ6Mq.js";import{c as D,o as O}from"./vue-flow-8aIpM5CU.js";g(),x(),_(),o();var k={key:0},A={key:1},j={key:2},M={key:3,class:`node-header`},N={class:`flow-node-icon`},P={class:`node-title`},F={class:`node-body`},I={key:4,class:`disabled-overlay`},L=T(u({__name:`BaseNode`,props:{id:{},nodeId:{},nodeType:{default:`command`},title:{},icon:{},enabled:{type:Boolean,default:!0},selected:{type:Boolean,default:!1},deletable:{type:Boolean,default:!0},showDeleteOnSelected:{type:Boolean,default:!1},sourceHandleIds:{},execStatus:{}},emits:[`delete`],setup(o,{emit:s}){let u=o,f=i(()=>!!(u.title&&String(u.title).trim()||u.icon&&String(u.icon).trim())),h=i(()=>f.value?16:0),g=i(()=>u.sourceHandleIds&&u.sourceHandleIds.length?u.sourceHandleIds:[`source`]),_=s;return(i,s)=>{let u=c;return p(),t(`div`,{class:l([`flow-node-wrapper`,[{disabled:!o.enabled,"is-selected":o.selected,"show-delete-on-selected":o.showDeleteOnSelected},o.nodeType?`node-type-${o.nodeType}`:``]])},[o.nodeType===`start`?y(``,!0):(p(),d(r(D),{key:0,id:`target`,type:`target`,position:r(O).Left,class:`flow-node-handle handle-left`},null,8,[`position`])),o.deletable===!1?y(``,!0):(p(),d(u,{key:1,class:`flow-node-delete-btn`,onClick:s[0]||=C(e=>_(`delete`,o.nodeId),[`stop`]),title:`删除节点`,role:`button`,tabindex:`0`},{default:b(()=>[a(r(te))]),_:1})),o.execStatus?(p(),t(`div`,{key:2,class:l([`flow-node-status`,[`status-${o.execStatus}`]])},[o.execStatus===`running`?(p(),t(`span`,k,`执行中`)):o.execStatus===`success`?(p(),t(`span`,A,`成功`)):(p(),t(`span`,j,`失败`))],2)):y(``,!0),o.title||o.icon?(p(),t(`div`,M,[n(`div`,N,e(o.icon),1),n(`div`,P,e(o.title),1)])):y(``,!0),n(`div`,F,[S(i.$slots,`default`,{},void 0,!0)]),o.enabled?y(``,!0):(p(),t(`div`,I,`已禁用`)),o.nodeType===`condition`?(p(!0),t(m,{key:5},v(g.value,e=>(p(),d(r(D),{key:e,id:e,type:`source`,position:r(O).Right,class:`flow-node-handle handle-right`,style:ee({top:`calc(50% + ${h.value}px + ${(g.value.indexOf(e)-(g.value.length-1)/2)*18}px)`})},null,8,[`id`,`position`,`style`]))),128)):(p(),d(r(D),{key:6,id:`source`,type:`source`,position:r(O).Right,class:`flow-node-handle handle-right`},null,8,[`position`]))],2)}}}),[[`__scopeId`,`data-v-0b0b9de2`]]);g(),x(),o();var R={class:`command-node-content`},z={class:`node-badges`},B={key:0,class:`node-badge terminal`},V={key:0,class:`node-warning`},H={key:1,class:`command-details`},U={class:`command-code`},W={key:0,class:`command-dir`},G=T(u({__name:`CommandNode`,props:{data:{},id:{}},setup(o){let l=o,u=E(),d=i(()=>!l.data.config||!l.data.config.commandId?null:u.customCommands.find(e=>e.id===l.data.config.commandId)||null),f=i(()=>l.data.config?{name:l.data.config.commandName||w(`@FLOWNODE:未配置`),terminal:l.data.config.useTerminal||!1,command:d.value?.command||``,directory:d.value?.directory||``}:null);return(i,l)=>{let u=c;return p(),t(`div`,R,[n(`div`,z,[f.value?.terminal?(p(),t(`div`,B,[a(u,null,{default:b(()=>[a(r(s))]),_:1}),n(`span`,null,e(r(w)(`@FLOWNODE:终端`)),1)])):y(``,!0)]),o.data.config?y(``,!0):(p(),t(`div`,V,e(r(w)(`@FLOWNODE:未配置`)),1)),f.value?.command?(p(),t(`div`,H,[n(`div`,U,[n(`code`,null,e(f.value.command),1)]),f.value.directory?(p(),t(`div`,W,[a(u,null,{default:b(()=>[a(r(h))]),_:1}),n(`span`,null,e(f.value.directory),1)])):y(``,!0)])):y(``,!0)])}}}),[[`__scopeId`,`data-v-e51dadd3`]]);g(),x(),o();var K={class:`wait-node-content`},q={key:0,class:`node-warning`},J={key:1,class:`wait-seconds`},Y=T(u({__name:`WaitNode`,props:{data:{},id:{}},setup(n){return(i,a)=>(p(),t(`div`,K,[n.data.config?(p(),t(`div`,J,e(r(w)(`@FLOWNODE:等待 {seconds} 秒`,{seconds:n.data.config?.waitSeconds??0})),1)):(p(),t(`div`,q,e(r(w)(`@FLOWNODE:未配置`)),1))]))}}),[[`__scopeId`,`data-v-04b8ee53`]]);g(),x(),o();var X={class:`version-node-content`},Z={key:0,class:`node-badge`},Q={key:1,class:`info-grid`},ne={class:`info-label`},re=[`title`],ie={key:2,class:`node-warning`},ae=T(u({__name:`VersionNode`,props:{data:{},id:{}},setup(a){let o=a,s=i(()=>{if(!o.data.config)return null;let e=o.data.config,t=String(e?.versionTarget||`version`),n=String(e?.versionSource||`bump`),r=[];r.push({label:w(`@FLOWNODE:目标`),value:w(t===`dependency`?`@FLOWNODE:依赖版本`:`@FLOWNODE:version字段`)}),r.push({label:w(`@FLOWNODE:来源`),value:w(n===`reference`?`@FLOWNODE:引用输出`:n===`input`?`@FLOWNODE:引用输入`:n===`manual`?`@FLOWNODE:手动输入`:`@FLOWNODE:自动递增`)});let i=String(e?.packageJsonPath||``).trim();if(r.push({label:w(`@FLOWNODE:package.json`),value:i||w(`@FLOWNODE:当前目录`)}),t===`dependency`){let t=String(e?.dependencyType||`dependencies`),i=String(e?.dependencyName||``).trim();if(i&&r.push({label:w(`@FLOWNODE:依赖`),value:`${t}::${i}`}),n===`manual`){let t=String(e?.dependencyVersion||``).trim();t&&r.push({label:w(`@FLOWNODE:版本号`),value:t})}else if(n===`bump`){let t=String(e?.dependencyVersionBump||e?.versionBump||`patch`);r.push({label:w(`@FLOWNODE:递增`),value:t})}else if(n===`reference`){let t=String(e?.inputRef?.nodeId||``).trim(),n=String(e?.inputRef?.outputKey||``).trim(),i=t&&n?`${t}::${n}`:``;i&&r.push({label:w(`@FLOWNODE:引用`),value:i})}else if(n===`input`){let t=String(e?.dependencyVersionInputKey||e?.versionInputKey||``).trim();t&&r.push({label:w(`@FLOWNODE:引用`),value:t})}}else{let t=String(e?.versionBump||`patch`);r.push({label:w(`@FLOWNODE:递增`),value:t})}return{target:t,rows:r}});return(i,o)=>(p(),t(`div`,X,[s.value?.target===`dependency`?(p(),t(`div`,Z,e(r(w)(`@FLOWNODE:依赖`)),1)):y(``,!0),s.value?.rows?.length?(p(),t(`div`,Q,[(p(!0),t(m,null,v(s.value.rows,(r,i)=>(p(),t(`div`,{key:i,class:`info-row`},[n(`div`,ne,e(r.label),1),n(`div`,{class:`info-value`,title:r.value},e(r.value),9,re)]))),128))])):y(``,!0),a.data.config?y(``,!0):(p(),t(`div`,ie,e(r(w)(`@FLOWNODE:未配置`)),1))]))}}),[[`__scopeId`,`data-v-6091a498`]]);g(),x(),o();var oe={key:0,class:`confirm-node-content`},se={class:`node-warning`},ce=T(u({__name:`ConfirmNode`,props:{data:{},id:{}},setup(i){return(a,o)=>i.data.config?y(``,!0):(p(),t(`div`,oe,[n(`div`,se,e(r(w)(`@FLOWNODE:未配置`)),1)]))}}),[[`__scopeId`,`data-v-57d5e863`]]);g(),x(),o();var le={class:`code-node-content`},ue={key:0,class:`node-warning`},de={key:1,class:`code-details`},fe={class:`code-meta`},pe={class:`meta-item`},me={class:`meta-item`},he=T(u({__name:`CodeNode`,props:{data:{},id:{}},setup(a){let o=a,s=i(()=>{let e=o.data.config||{};return{hasScript:!!(e.codeScript&&String(e.codeScript).trim()),outputKeys:Array.isArray(e.codeOutputKeys)?e.codeOutputKeys:[]}});return(i,o)=>(p(),t(`div`,le,[a.data.config?(p(),t(`div`,de,[n(`div`,fe,[n(`span`,pe,e(r(w)(`@NODECFG:脚本`))+`: `+e(s.value.hasScript?r(w)(`@FLOWNODE:已添加`):r(w)(`@FLOWNODE:未配置`)),1),n(`span`,me,e(r(w)(`@NODECFG:输出键列表`))+`: `+e(s.value.outputKeys.length?s.value.outputKeys.join(`, `):r(w)(`@FLOWNODE:未配置`)),1)])])):(p(),t(`div`,ue,e(r(w)(`@FLOWNODE:未配置`)),1))]))}}),[[`__scopeId`,`data-v-2f260bdf`]]);g(),o();var ge={class:`condition-node`},_e={key:0,class:`condition-empty`},ve={key:1,class:`condition-branches`},ye={class:`branch-name`},be={class:`branch-meta`},$=T(u({__name:`ConditionNode`,props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(r){let a=r,o=i(()=>{let e=a.data?.config;return[...Array.isArray(e?.conditionBranches)?e.conditionBranches:[]].sort((e,t)=>(e.priority??0)-(t.priority??0))});return(r,i)=>(p(),t(`div`,ge,[o.value.length===0?(p(),t(`div`,_e,`未配置条件分支`)):(p(),t(`div`,ve,[(p(!0),t(m,null,v(o.value,r=>(p(),t(`div`,{key:r.id,class:`condition-branch`},[n(`span`,ye,e(r.isDefault?`DEFAULT`:r.name),1),n(`span`,be,`(`+e(r.combine.toUpperCase())+` / `+e(r.rules.length)+`)`,1)]))),128))]))]))}}),[[`__scopeId`,`data-v-c1d4e61f`]]);g(),x(),o();var xe={class:`user-input-node-content`},Se={key:0,class:`node-warning`},Ce={key:0,class:`node-warning`},we={key:1,class:`param-summary`},Te={class:`param-count`},Ee={class:`param-list`},De={key:0,class:`star`},Oe={key:0,class:`more`},ke=T(u({__name:`UserInputNode`,props:{data:{},id:{}},setup(a){let o=a,s=i(()=>{let e=o.data?.config;return(Array.isArray(e?.userInputParams)?e.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e)}),c=i(()=>{let e=o.data?.config,t=Array.isArray(e?.userInputParams)?e.userInputParams:[],n=new Set;for(let e of t){let t=String(e?.name||``).trim();t&&e?.required&&n.add(t)}return n}),u=i(()=>s.value.slice(0,3)),d=i(()=>s.value.length>3);return(i,o)=>(p(),t(`div`,xe,[a.data.config?(p(),t(m,{key:1},[s.value.length===0?(p(),t(`div`,Ce,e(r(w)(`@UINPUT:暂无输入参数`)),1)):(p(),t(`div`,we,[n(`div`,Te,e(r(w)(`@UINPUT:参数名`))+` (`+e(s.value.length)+`)`,1),n(`div`,Ee,[(p(!0),t(m,null,v(u.value,n=>(p(),t(`span`,{key:n,class:l([`param-chip`,{required:c.value.has(n)}])},[c.value.has(n)?(p(),t(`span`,De,`*`)):y(``,!0),f(` `+e(n),1)],2))),128)),d.value?(p(),t(`span`,Oe,`+`+e(s.value.length-3),1)):y(``,!0)])]))],64)):(p(),t(`div`,Se,e(r(w)(`@FLOWNODE:未配置`)),1))]))}}),[[`__scopeId`,`data-v-ed37275f`]]);export{ae as a,L as c,ce as i,$ as n,Y as o,he as r,G as s,ke as t};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,C as n,Ct as r,Dn as i,Dr as a,En as o,Et as s,F as c,Fn as l,Fr as u,Ft as d,Gn as f,Gt as p,Ht as m,I as h,J as g,Jn as _,Jr as v,Jt as y,Ln as b,Lt as x,N as ee,Nn as S,On as C,Pn as w,Qn as T,Rt as E,S as D,Sn as O,St as te,U as k,Vn as A,Vt as ne,X as re,Xn as ie,Xr as ae,Y as j,Z as oe,_ as se,_n as ce,_t as le,a as M,an as ue,b as de,bn as N,ct as P,dn as F,dt as fe,er as I,i as L,kn as R,lr as z,lt as pe,mn as me,mr as B,ot as V,pt as he,r as H,rr as U,sr as W,tt as ge,ur as G,v as _e,vn as K,w as ve,wn as ye,xn as q,xr as J,y as be,yn as xe,yr as Se,yt as Ce,z as we,zt as Te}from"./element-plus-J45pKUrE.js";import{a as Ee,i as Y,l as De,n as Oe,r as ke}from"./vendor-B3NyhlYR.js";import{n as X,t as Z}from"./_plugin-vue_export-helper-Csn085FF.js";import{t as Ae}from"./SvgIcon-5AlG3IfR.js";import{c as je,l as Me,s as Ne,t as Pe}from"./configStore-DOaPZ6Mq.js";import{t as Fe}from"./CommonDialog-j_53ORvj.js";import{C as Ie,D as Le,E as Re,G as Q,H as $,I as ze,O as Be,S as Ve,T as He,b as Ue,g as We,h as Ge,w as Ke,x as qe}from"./index-DQ82h1aq.js";import{a as Je,c as Ye,d as Xe,i as Ze,l as Qe,m as $e,n as et,o as tt,r as nt,s as rt,t as it,u as at}from"./agentConversations-De3wKTsN.js";import{a as ot,c as st,i as ct,n as lt,o as ut,r as dt,s as ft,t as pt}from"./CopySessionButton-Dy5t8Mjy.js";import{a as mt,c as ht,i as gt,l as _t,n as vt,o as yt,r as bt,s as xt,t as St}from"./useOrchestrator-BjC7oHpt.js";A(),B(),u(),F();var Ct={class:`wb-attachments__head`},wt={class:`wb-attachments__label`},Tt={class:`wb-attachments__count`},Et=[`disabled`],Dt={key:0,class:`wb-attachments__paste-hint`},Ot={key:1,class:`wb-attachments__list`},kt=[`title`,`onClick`,`onContextmenu`],At=[`src`,`alt`],jt={key:1},Mt={class:`wb-attachment__meta`},Nt=[`title`],Pt=[`onClick`,`title`],Ft=Z(b({__name:`AttachmentZone`,props:{attachments:{},isImage:{type:Function},humanSize:{type:Function},isUploading:{type:Boolean},isPasteHover:{type:Boolean},onPick:{type:Function},onRemove:{type:Function},rawBase:{}},emits:[`paste`,`drop`,`dragover`,`dragenter`,`dragleave`],setup(n,{emit:r}){let s=n;function c(e){return`${s.rawBase||`/api/workbench/attachments`}/${e.id}/raw`}let l=r,u=o(()=>s.attachments.filter(e=>s.isImage(e))),d=o(()=>u.value.map(e=>c(e))),f=J(0),p=J(!1);function m(e){if(s.isImage(e)){let t=u.value.findIndex(t=>t.id===e.id);f.value=t>=0?t:0,p.value=!0}else window.open(c(e),`_blank`,`noopener`)}function h(){p.value=!1}let g=J({visible:!1,x:0,y:0,att:null}),y=J(!1);function b(e,t){if(!s.isImage(e))return;t.preventDefault();let n=window.innerWidth-180,r=window.innerHeight-120;g.value={visible:!0,x:Math.min(t.clientX,n),y:Math.min(t.clientY,r),att:e}}function x(){g.value.visible&&(g.value.visible=!1)}async function ee(){let e=g.value.att;if(e&&!y.value){if(x(),!navigator.clipboard||typeof ClipboardItem>`u`){L({type:`warning`,message:X(`@WORKBENCH:当前浏览器不支持复制图片`)});return}y.value=!0;try{let t=await fetch(c(e),{credentials:`same-origin`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.blob(),r=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`].includes(n.type)?n.type:`image/png`,i=new ClipboardItem({[r]:n});await navigator.clipboard.write([i]),L({type:`success`,message:X(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){L({type:`error`,message:X(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{y.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,x),window.addEventListener(`scroll`,x,!0),window.addEventListener(`blur`,x)),_(()=>{typeof window>`u`||(window.removeEventListener(`click`,x),window.removeEventListener(`scroll`,x,!0),window.removeEventListener(`blur`,x))}),(r,o)=>(T(),t(O,null,[i(`div`,{class:v([`wb-attachments`,{"is-paste-hover":n.isPasteHover}]),onPaste:o[1]||=e=>l(`paste`,e),onDrop:o[2]||=q(e=>l(`drop`,e),[`prevent`]),onDragover:o[3]||=q(e=>l(`dragover`,e),[`prevent`]),onDragenter:o[4]||=q(e=>l(`dragenter`,e),[`prevent`]),onDragleave:o[5]||=e=>l(`dragleave`,e)},[i(`div`,Ct,[i(`span`,wt,[w(e(a(X)(`@WORKBENCH:附件`))+` `,1),i(`span`,Tt,e(n.attachments.length),1)]),i(`button`,{class:`wb-attachments__add`,disabled:n.isUploading,onClick:o[0]||=(...e)=>n.onPick&&n.onPick(...e)},e(n.isUploading?a(X)(`@WORKBENCH:上传中…`):a(X)(`@WORKBENCH:添加附件`)),9,Et)]),n.isPasteHover?(T(),t(`div`,Dt,e(a(X)(`@WORKBENCH:粘贴图片以快速添加`)),1)):R(``,!0),n.attachments.length>0?(T(),t(`ul`,Ot,[(T(!0),t(O,null,I(n.attachments,r=>(T(),t(`li`,{key:r.id,class:`wb-attachment`},[i(`button`,{type:`button`,class:`wb-attachment__preview`,title:a(X)(`@WORKBENCH:点击预览`),onClick:e=>m(r),onContextmenu:e=>b(r,e)},[i(`div`,{class:v([`wb-attachment__icon`,{"wb-attachment__icon--img":n.isImage(r)}])},[n.isImage(r)?(T(),t(`img`,{key:0,src:c(r),alt:r.originalName,loading:`lazy`},null,8,At)):(T(),t(`span`,jt,e(r.ext.toUpperCase()),1))],2),i(`div`,Mt,[i(`div`,{class:`wb-attachment__name`,title:`${r.originalName} (${n.humanSize(r.size)})`},e(r.originalName),9,Nt)])],40,kt),i(`button`,{class:`wb-attachment__del`,onClick:q(e=>n.onRemove(r),[`stop`]),title:a(X)(`@WORKBENCH:删除`)},`×`,8,Pt)]))),128))])):R(``,!0)],34),p.value&&d.value.length>0?(T(),C(a(de),{key:0,"url-list":d.value,"initial-index":f.value,"hide-on-click-modal":!0,teleported:!0,onClose:h},null,8,[`url-list`,`initial-index`])):R(``,!0),(T(),C(ye,{to:`body`},[g.value.visible&&g.value.att&&n.isImage(g.value.att)?(T(),t(`ul`,{key:0,class:`wb-ctx-menu`,style:ae({top:g.value.y+`px`,left:g.value.x+`px`}),onContextmenu:o[6]||=q(()=>{},[`prevent`])},[i(`li`,{class:v([`wb-ctx-menu__item`,{"is-disabled":y.value}]),onClick:ee},[o[7]||=i(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[i(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[i(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),i(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),i(`span`,null,e(a(X)(`@WORKBENCH:复制图片`)),1)],2)],36)):R(``,!0)]))],64))}}),[[`__scopeId`,`data-v-e3e872cb`]]),It=Y(`claude`),Lt=Y(`opencode`),Rt=Y(`codex`),zt=We;function Bt(e){return e===`opencode`?Lt:e===`codex`?Rt:e===`codebuddy`?zt:It}function Vt(e){if(typeof e!=`string`||!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function Ht(e){let t=Vt(e?.thinkingStartedAt);return t===void 0?{}:{reasoningStartedAt:t,reasoningEndedAt:Vt(e?.thinkingEndedAt)}}A(),B(),u(),F();var Ut=[`aria-expanded`],Wt={class:`wb-log-summary__left`},Gt={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},Kt={class:`wb-log-summary__label`},qt={key:0,class:`wb-log-summary__elapsed`},Jt={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},Yt={class:`wb-log-summary__label`},Xt={class:`wb-log-summary__icon`},Zt={class:`wb-log-summary__label`},Qt={key:0,class:`wb-log-summary__elapsed`},$t={key:3},en={class:`wb-log-summary__right`},tn={class:`wb-log-summary__meta`},nn=[`title`,`aria-label`],rn={class:`wb-log-details__body`},an={class:`wb-job-chat`},on={key:0,class:`wb-chat__foot`},sn=[`title`,`aria-label`],cn={key:1,class:`wb-log-fullscreen__empty`},ln=65536,un=Z(b({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(n,{emit:r}){let s=Pe(),c=n,u=r,d=J(!1);function p(){d.value=!d.value}let m=o(()=>c.job.status===`running`||c.job.status===`pending`);W(()=>c.job.status,(e,t)=>{t!==`running`&&t!==`pending`&&(e===`running`||e===`pending`)&&(d.value=!1)});function h(){let e=c.job.output||``;if(!e)return``;let t=e.length<=ln?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`;return Xe(t,c.job.id)}function g(){let e=c.job.thinking||``;return e?e.length<=ln?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function _(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 y(){let e=[];if(c.job.prompt&&e.push(`## ${X(`@WORKBENCH:用户提示词`)}\n\n${c.job.prompt}`),c.job.thinking&&e.push(`## ${X(`@WORKBENCH:Claude 思考`)}\n\n${c.job.thinking}`),c.job.output&&e.push(`## ${X(`@WORKBENCH:模型返回`)}\n\n${c.job.output}`),!e.length){L.warning(X(`@WORKBENCH:暂无内容可复制`));return}await _(e.join(`
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`))?L.success(X(`@WORKBENCH:已复制到剪贴板`)):L.error(X(`@WORKBENCH:复制失败`))}let b=o(()=>{let e=c.job.status;return e===`done`||e===`error`||e===`cancelled`}),x=o(()=>c.job.status===`cancelled`?`wb-log-summary__status--cancelled`:c.job.status===`error`?`wb-log-summary__status--error`:`wb-log-summary__status--done`),ee=o(()=>c.job.status===`cancelled`?`⏹`:c.job.status===`error`?`✗`:`✓`),S=o(()=>c.job.status===`cancelled`?X(`@WORKBENCH:已停止`):c.job.status===`error`?X(`@WORKBENCH:执行出错`):X(`@WORKBENCH:执行完成`)),w=o(()=>Me(c.job?.agent)),E=o(()=>Bt(c.job?.agent));function D(e,t){return e===`running`||e===`pending`?t?`streaming`:`pending`:e===`error`?`error`:`done`}let O=o(()=>{let e=c.job,t=[],n=e.startedAt?new Date(e.startedAt).getTime():Date.now();if(e.prompt){let r=ot(e.prompt);r&&t.push({id:`${e.id}-u`,role:`user`,content:r,status:`done`,createdAt:n})}let r=h(),i=g(),a=!!r,o=!!i,s=ut(e),l=s.length>0,u=a||o||l,d=D(e.status,u);return t.push({id:`${e.id}-a`,role:`assistant`,content:r,reasoning:o?i:void 0,reasoningStatus:o?a?`done`:d===`streaming`?`streaming`:`done`:void 0,...Ht(e),toolCalls:l?s:void 0,status:d,error:d===`error`&&e.error||void 0,createdAt:n}),t}),te=J(null);W(()=>c.job.status,(e,t)=>{e===`running`&&t!==`running`&&(te.value=te.value??Date.now())});let k=o(()=>{if(!te.value)return``;let e=te.value,t=c.job.endedAt?new Date(c.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`)}秒`}),A=J(!1),ne=o(()=>!!(c.job.output&&c.job.output.length)),re=o(()=>Xe(c.job.output||``,c.job.id)),ie=J(null);W(A,async e=>{e&&(await f(),ie.value&&(ie.value.scrollTop=ie.value.scrollHeight))}),W(()=>(c.job.output||``).length,async()=>{A.value&&(await f(),ie.value&&(ie.value.scrollTop=ie.value.scrollHeight))});function ae(){}let j=o(()=>b.value&&!!c.job.prompt);function oe(){u(`re-execute`,c.job)}return(r,o)=>(T(),t(`div`,{class:v([`wb-log-details`,{"is-running":m.value,"is-pending":n.job.status===`pending`,"is-finished":b.value}])},[i(`div`,{class:`wb-log-summary`,onClick:p,role:`button`,"aria-expanded":!d.value},[i(`span`,Wt,[n.job.status===`running`?(T(),t(`span`,Gt,[i(`span`,Kt,e(a(X)(`@WORKBENCH:正在执行…`)),1),o[1]||=i(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[i(`span`,{class:`wb-log-dots__dot`}),i(`span`,{class:`wb-log-dots__dot`}),i(`span`,{class:`wb-log-dots__dot`})],-1),k.value?(T(),t(`span`,qt,e(k.value),1)):R(``,!0)])):n.job.status===`pending`?(T(),t(`span`,Jt,[i(`span`,Yt,e(a(X)(`@WORKBENCH:排队中…`)),1),o[2]||=i(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[i(`span`,{class:`wb-log-dots__dot`}),i(`span`,{class:`wb-log-dots__dot`}),i(`span`,{class:`wb-log-dots__dot`})],-1)])):b.value?(T(),t(`span`,{key:2,class:v([`wb-log-summary__status`,x.value])},[i(`span`,Xt,e(ee.value),1),i(`span`,Zt,e(S.value),1),k.value?(T(),t(`span`,Qt,e(k.value),1)):R(``,!0)],2)):(T(),t(`span`,$t,e(a(X)(`@WORKBENCH:查看执行日志`)),1))]),i(`span`,en,[i(`span`,tn,e((n.job.output||``).length)+` `+e(a(X)(`@WORKBENCH:字符`)),1),i(`button`,{type:`button`,class:`wb-log-copy`,title:a(X)(`@WORKBENCH:复制全部(含提示词与输出)`),"aria-label":a(X)(`@WORKBENCH:复制全部`),onClick:q(y,[`stop`])},` ⧉ `,8,nn)])],8,Ut),G(i(`div`,rn,[i(`div`,an,[l(a(Ee),{messages:O.value,"assistant-name":w.value,"assistant-avatar":E.value,"show-avatar":!0,theme:a(s).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:a(X)(`@AGENT:计划`),raw:a(X)(`@AGENT:原始参数`)}},"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`])]),j.value?(T(),t(`footer`,on,[i(`button`,{type:`button`,class:`wb-chat__action`,title:a(X)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":a(X)(`@WORKBENCH:重新执行`),onClick:oe},` ↻ `,8,sn)])):R(``,!0),l(Fe,{modelValue:A.value,"onUpdate:modelValue":o[0]||=e=>A.value=e,title:a(X)(`@WORKBENCH:模型返回 - 全屏查看`),size:`fullscreen`,type:`flex`,"close-on-click-modal":!1,"custom-class":`wb-log-fullscreen-dialog`,onClosed:ae},{default:z(()=>[i(`div`,{ref_key:`fullscreenContainerRef`,ref:ie,class:`wb-log-fullscreen`},[ne.value?(T(),C(a(De),{key:0,source:re.value,class:`wb-log-fullscreen__render`},null,8,[`source`])):(T(),t(`div`,cn,e(a(X)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[xe,!d.value]])],2))}}),[[`__scopeId`,`data-v-9c103bcc`]]);A(),B(),u(),F();var dn={class:`exec-logs`},fn={class:`exec-logs__head`},pn={class:`exec-logs__title-block`},mn={class:`exec-logs__stats`},hn={class:`exec-logs__head-actions`},gn={class:`exec-logs__config`},_n={class:`exec-logs__config-label`},vn={class:`exec-logs__config-field`},yn={class:`exec-logs__config-name`},bn={class:`exec-logs__config-field`},xn={class:`exec-logs__config-name`},Sn={class:`exec-logs__filter`},Cn={key:0,class:`exec-logs__batch-meta`},wn={key:0,class:`exec-logs__batch`},Tn={class:`exec-logs__list`},En={key:0,class:`exec-logs__empty`},Dn={class:`exec-logs__empty-art`,"aria-hidden":`true`},On={class:`exec-logs__empty-title`},kn={class:`exec-logs__empty-hint`},An={class:`exec-card__head`},jn=[`title`],Mn={class:`exec-card__meta`},Nn={key:0,class:`exec-card__task`},Pn={key:1,class:`exec-card__time`},Fn={key:2,class:`exec-card__exit`},In=[`title`,`onClick`],Ln={key:0,class:`exec-card__error`},Rn={key:1,class:`exec-logs__pager`},zn=50,Bn=Z(b({__name:`ExecutionLogManager`,setup(n){function r(e){return e instanceof Error?e.message:String(e)}let s=J([]),u=J(0),d=Se({count:0,sizeMB:0,byStatus:{}}),f=J(!1),p=J(new Set),_=Se({q:``,status:``,page:1}),y=J({maxCount:500,maxSizeMB:256}),b=Se({maxCount:500,maxSizeMB:256}),x=J(!1),S=[{value:`pending`,label:X(`@WORKBENCH:排队中`)},{value:`running`,label:X(`@WORKBENCH:执行中`)},{value:`done`,label:X(`@WORKBENCH:已完成`)},{value:`error`,label:X(`@WORKBENCH:出错`)},{value:`cancelled`,label:X(`@WORKBENCH:已取消`)}],C=o(()=>s.value.length>0&&s.value.every(e=>p.value.has(e.id))),E=o(()=>s.value.some(e=>p.value.has(e.id))&&!C.value);async function D(){f.value=!0;try{let e=new URLSearchParams;_.q&&e.set(`q`,_.q),_.status&&e.set(`status`,_.status),e.set(`limit`,String(zn)),e.set(`offset`,String((_.page-1)*zn));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);s.value=t.jobs,u.value=t.total,d.count=t.stats.count,d.sizeMB=t.stats.sizeMB,d.byStatus=t.stats.byStatus;let n=new Set(s.value.map(e=>e.id));for(let e of Array.from(p.value))n.has(e)||p.value.delete(e)}catch(e){L.error(X(`@WORKBENCH:加载失败`)+`: `+r(e))}finally{f.value=!1}}async function te(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(y.value=e.config,b.maxCount=e.config.maxCount,b.maxSizeMB=e.config.maxSizeMB)}catch{}}async function A(){x.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:b.maxCount,maxSizeMB:b.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);y.value=e.config,L.success(X(`@WORKBENCH:已保存策略`)),await D()}catch(e){L.error(X(`@WORKBENCH:保存失败`)+`: `+r(e))}finally{x.value=!1}}function ne(){_.page=1,D()}function re(){_.q=``,_.status=``,_.page=1,D()}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 s.value)p.value.add(e.id);else for(let e of s.value)p.value.delete(e.id);p.value=new Set(p.value)}function se(e){L.info(X(`@WORKBENCH:请到工作台主面板的对应任务上点击「重新执行」`))}async function ce(e){try{await H.confirm(X(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),X(`@WORKBENCH:删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/${e}`,{method:`DELETE`}).then(e=>e.json());if(!t.success)throw Error(t.error||`delete failed`);p.value.delete(e),p.value=new Set(p.value),await D()}catch(e){L.error(X(`@WORKBENCH:保存失败`)+`: `+r(e))}}async function le(){let e=Array.from(p.value);if(e.length!==0){try{await H.confirm(X(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),X(`@WORKBENCH:批量删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/batch-delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({ids:e})}).then(e=>e.json());if(!t.success)throw Error(t.error||`batch delete failed`);L.success(X(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),p.value=new Set,await D()}catch(e){L.error(X(`@WORKBENCH:保存失败`)+`: `+r(e))}}}async function ue(){let e=d.count;if(e!==0){try{await H.confirm(X(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),X(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:X(`@WORKBENCH:清空全部`)})}catch{return}try{let t=await fetch(`/api/workbench/jobs/clear`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({confirm:!0})}).then(e=>e.json());if(!t.success)throw Error(t.error||`clear failed`);L.success(X(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),p.value=new Set,await D()}catch(e){L.error(X(`@WORKBENCH:保存失败`)+`: `+r(e))}}}function de(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 ie(()=>{D(),te()}),(n,r)=>{let o=we,y=be,te=k,ie=c,P=h,F=ee,fe=g,L=_e,pe=M;return T(),t(`div`,dn,[i(`header`,fn,[i(`div`,pn,[i(`span`,mn,e(a(X)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:d.count,size:d.sizeMB})),1)]),i(`div`,hn,[l(o,{icon:a(m),size:`small`,loading:f.value,onClick:D},{default:z(()=>[w(e(a(X)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),l(o,{type:`danger`,plain:``,size:`small`,disabled:d.count===0,onClick:ue},{default:z(()=>[w(e(a(X)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),i(`div`,gn,[i(`span`,_n,e(a(X)(`@WORKBENCH:保存策略`)),1),i(`span`,vn,[i(`span`,yn,e(a(X)(`@WORKBENCH:最大条数`)),1),l(y,{modelValue:b.maxCount,"onUpdate:modelValue":r[0]||=e=>b.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),i(`span`,bn,[i(`span`,xn,e(a(X)(`@WORKBENCH:最大体积 (MB)`)),1),l(y,{modelValue:b.maxSizeMB,"onUpdate:modelValue":r[1]||=e=>b.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),l(o,{type:`primary`,size:`small`,loading:x.value,onClick:A},{default:z(()=>[w(e(a(X)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),i(`div`,Sn,[l(te,{modelValue:_.q,"onUpdate:modelValue":r[2]||=e=>_.q=e,placeholder:a(X)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:N(ne,[`enter`]),onClear:ne},null,8,[`modelValue`,`placeholder`]),l(P,{modelValue:_.status,"onUpdate:modelValue":r[3]||=e=>_.status=e,placeholder:a(X)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:ne},{default:z(()=>[(T(),t(O,null,I(S,e=>l(ie,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),l(o,{size:`small`,onClick:re},{default:z(()=>[w(e(a(X)(`@WORKBENCH:重置`)),1)]),_:1}),r[5]||=i(`span`,{class:`exec-logs__filter-spacer`},null,-1),p.value.size>0?(T(),t(`span`,Cn,e(a(X)(`@WORKBENCH:已选择 {count} 项`,{count:p.value.size})),1)):R(``,!0)]),p.value.size>0?(T(),t(`div`,wn,[l(F,{"model-value":C.value,indeterminate:E.value,onChange:oe},{default:z(()=>[w(e(C.value?a(X)(`@WORKBENCH:取消全选`):a(X)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),l(o,{type:`danger`,size:`small`,onClick:le},{default:z(()=>[w(e(a(X)(`@WORKBENCH:批量删除`)),1)]),_:1})])):R(``,!0),G((T(),t(`div`,Tn,[!f.value&&s.value.length===0?(T(),t(`div`,En,[i(`div`,Dn,[l(fe,null,{default:z(()=>[l(a(he))]),_:1})]),i(`div`,On,e(a(X)(`@WORKBENCH:暂无执行日志`)),1),i(`div`,kn,e(a(X)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):R(``,!0),(T(!0),t(O,null,I(s.value,n=>(T(),t(`article`,{key:n.id,class:v([`exec-card`,{"is-selected":p.value.has(n.id)}])},[i(`header`,An,[l(F,{"model-value":p.value.has(n.id),onChange:e=>j(n.id,e)},null,8,[`model-value`,`onChange`]),i(`span`,{class:`exec-card__status`,style:ae({color:a(dt)(n.status),borderColor:a(dt)(n.status)})},e(a(ct)(n.status)),5),i(`span`,{class:`exec-card__title`,title:n.title||a(X)(`@WORKBENCH:无标题`)},e(n.title||a(X)(`@WORKBENCH:无标题`)),9,jn),r[6]||=i(`span`,{class:`exec-card__spacer`},null,-1),i(`span`,Mn,[n.taskTitle?(T(),t(`span`,Nn,`📁 `+e(n.taskTitle),1)):R(``,!0),n.startedAt?(T(),t(`span`,Pn,`⏱ `+e(de(n.startedAt,n.endedAt)),1)):R(``,!0),n.exitCode===null?R(``,!0):(T(),t(`span`,Fn,`exit `+e(n.exitCode),1))]),i(`button`,{type:`button`,class:`exec-card__del`,title:a(X)(`@WORKBENCH:删除`),onClick:e=>ce(n.id)},`×`,8,In)]),n.error?(T(),t(`p`,Ln,`⚠ `+e(n.error),1)):R(``,!0),l(un,{job:n,onReExecute:se},null,8,[`job`])],2))),128))])),[[pe,f.value]]),u.value>zn?(T(),t(`footer`,Rn,[l(L,{"current-page":_.page,"onUpdate:currentPage":r[4]||=e=>_.page=e,"page-size":zn,total:u.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:D},null,8,[`current-page`,`total`])])):R(``,!0)])}}}),[[`__scopeId`,`data-v-dd1760f3`]]),Vn=6e4,Hn=60*Vn,Un=24*Hn;function Wn(e,t=Date.now()){if(!e)return``;let n=new Date(e).getTime();if(Number.isNaN(n))return``;let r=Math.max(0,t-n);return r<Vn?X(`@WORKBENCH:刚刚`):r<Hn?X(`@WORKBENCH:N 分钟前`,{n:Math.floor(r/Vn)}):r<Un?X(`@WORKBENCH:N 小时前`,{n:Math.floor(r/Hn)}):r<30*Un?X(`@WORKBENCH:N 天前`,{n:Math.floor(r/Un)}):new Date(n).toLocaleDateString()}function Gn(e){if(typeof e!=`number`||!Number.isFinite(e)||e<0)return``;let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?X(`@WORKBENCH:N 小时 M 分`,{n,m:r}):r>0?X(`@WORKBENCH:N 分 M 秒`,{n:r,m:i}):X(`@WORKBENCH:N 秒`,{n:i})}function Kn(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function qn(e,t=Date.now()){if(!e)return``;let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=e=>String(e).padStart(2,`0`),i=`${r(n.getHours())}:${r(n.getMinutes())}:${r(n.getSeconds())}`,a=new Date(t);if(Kn(n,a))return i;if(Kn(n,new Date(a.getFullYear(),a.getMonth(),a.getDate()-1)))return X(`@WORKBENCH:昨天 {time}`,{time:i});let o=`${n.getMonth()+1}/${n.getDate()}`;return n.getFullYear()===a.getFullYear()?`${o} ${i}`:`${n.getFullYear()}/${o} ${i}`}function Jn(e){return String(e.manualDoneAt||e.lastJobEndedAt||e.updatedAt||e.createdAt||``)}function Yn(e){return e.column===`done`?Jn(e):e.updatedAt||e.createdAt||``}function Xn(e){return e.live?``:Gn(e.lastDurationMs)}function Zn(e){let t=Xn(e);return t?X(`@WORKBENCH:用时 {d}`,{d:t}):``}function Qn(e){return e.live?X(`@WORKBENCH:已运行 {elapsed}`,{elapsed:Gn(e.live.elapsedMs)}):``}function $n(e){return Qn(e)||Zn(e)}function er(e){let t=Xn(e);if(!t)return``;let n=qn(e.lastJobStartedAt),r=qn(e.lastJobEndedAt);return!n||!r?t:`${t} · ${n} → ${r}`}B();var tr=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/gif`,`image/webp`,`image/bmp`,`image/svg+xml`,`application/pdf`,`text/plain`,`text/markdown`,`text/x-markdown`,`text/csv`,`application/json`,`text/json`,`text/x-log`]),nr=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,rr=20971520,ir=3840,ar=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/webp`,`image/bmp`]);function or(e){if(e.size<=3670016)return!1;let t=String(e.type||``).toLowerCase();return t?ar.has(t):/\.(png|jpe?g|webp|bmp)$/i.test(e.name)}function sr(e,t){return`${String(e||`attachment`).replace(/\.[^./\\]+$/,``)}.${t}`}async function cr(e){if(typeof createImageBitmap==`function`)try{let t=await createImageBitmap(e);return{source:t,width:t.width,height:t.height,release:()=>t.close()}}catch{}return await new Promise(t=>{let n=URL.createObjectURL(e),r=new Image;r.onload=()=>t({source:r,width:r.naturalWidth,height:r.naturalHeight,release:()=>URL.revokeObjectURL(n)}),r.onerror=()=>{URL.revokeObjectURL(n),t(null)},r.src=n})}function lr(e,t,n){return new Promise(r=>{try{e.toBlob(e=>r(e&&e.type===t?e:null),t,n)}catch{r(null)}})}async function ur(e){let t=await cr(e);if(!t)return null;try{let n=[{edge:ir,quality:.95},{edge:ir,quality:.85},{edge:2560,quality:.85},{edge:1920,quality:.8}],r=null;for(let e of n){let n=Math.min(1,e.edge/Math.max(t.width,t.height)),i=Math.max(1,Math.round(t.width*n)),a=Math.max(1,Math.round(t.height*n)),o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)return null;s.drawImage(t.source,0,0,i,a);let c=await lr(o,`image/webp`,e.quality)||await lr(o,`image/jpeg`,e.quality);if(!c)return null;if((!r||c.size<r.size)&&(r=c),c.size<=3670016)break}return!r||r.size>=e.size?null:{blob:r,ext:r.type===`image/webp`?`webp`:`jpg`}}catch{return null}finally{t.release()}}function dr(){let e=J({}),t=J(null);function n(t){return!!e.value[t]}function r(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function i(e){return e.kind===`draft`?`draft`:`task-${e.task?.id??``}`}function a(e){if(e.kind===`draft`)return e.list;let t=e.task?.attachments;return Array.isArray(t)?t:[]}function o(e,t){if(e.kind===`draft`){e.replace(t);return}e.task&&(e.task.attachments=t)}function s(e){return e.kind===`draft`?`/api/workbench/orchestrator/attachments`:`/api/workbench/tasks/${e.task?.id??``}/attachments`}function c(e,t){return e.kind===`draft`?`/api/workbench/orchestrator/attachments/${t}`:`/api/workbench/tasks/${e.task?.id??``}/attachments/${t}`}function l(e,t){if(!e.clipboardData)return;let n=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`));if(n.length>0){e.preventDefault();for(let e of n){let n=e.getAsFile();if(!n)continue;let i=(n.type.split(`/`)[1]||`png`).replace(`jpeg`,`jpg`);d(t,r(n,`paste-${new Date().toISOString().replace(/[:.]/g,`-`)}.${i}`))}return}let i=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&!e.type.startsWith(`image/`));if(i.length>0){e.preventDefault();for(let e of i){let n=e.getAsFile();n&&d(t,r(n,n.name||`pasted-file`))}}}function u(e,n){t.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>d(n,e))}async function d(t,n){if(!tr.has(n.type)&&!n.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){L.error(`${X(`@WORKBENCH:不支持的文件类型`)}(${n.name})`);return}if(a(t).find(e=>e.originalName===n.name&&e.size===n.size)){L.info(`${n.name} ${X(`@WORKBENCH:已存在,已复用`)}`);return}let c=i(t);e.value[c]=!0;try{let e=n;if(or(n)){let t=await ur(n);t&&(e=r(t.blob,sr(n.name,t.ext)),L.info(X(`@WORKBENCH:图片过大,已压缩后上传:{from} → {to}`,{from:g(n.size),to:g(e.size)})))}if(e.size>20971520){L.error(`「${n.name}」${X(`@WORKBENCH:超过 {size} 限制`,{size:g(rr)})}`);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),L.success(`${X(`@WORKBENCH:已添加:`)}${e.name}`)}else L.error(i.error||X(`@WORKBENCH:上传失败`))}catch(e){L.error(X(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{e.value[c]=!1}}async function f(e,t){try{await H.confirm(X(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),X(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(c(e,t.id),{method:`DELETE`}).then(e=>e.json());n.success?(o(e,a(e).filter(e=>e.id!==t.id)),L.success(X(`@WORKBENCH:已删除`))):L.error(n.error||X(`@WORKBENCH:删除失败`))}function p(e){let t=document.createElement(`input`);t.type=`file`,t.accept=nr,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>d(e,t))},t.click()}let m=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function h(e){let t=String(e?.ext||``).toLowerCase();if(t&&m.has(t)||String(e?.mimeType||``).toLowerCase().startsWith(`image/`))return!0;let n=String(e?.originalName||``).toLowerCase();return/\.(png|jpe?g|gif|webp|bmp|svg)$/.test(n)}function g(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return{uploadingTargets:e,pasteHoverId:t,isUploading:n,ensureFile:r,isImageAttachment:h,humanSize:g,targetKey:i,targetAttachments:a,setTargetAttachments:o,targetUploadUrl:s,targetDeleteUrl:c,onAttachmentPaste:l,onAttachmentDrop:u,uploadAttachment:d,removeAttachment:f,pickAttachmentFile:p}}A();var fr=`__simple`,pr=65536;function mr(e,t){function n(t){if(!t)return[];let n=`${t.id}${fr}`;return e.value.filter(e=>e.subId===n||e.subId.startsWith(`${n}__r`)).sort((e,t)=>{let n=e.startedAt||``,r=t.startedAt||``;return n&&r?n.localeCompare(r):n?-1:+!!r})}function 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:o(()=>{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=ot(t.prompt);e&&r.push({id:`${t.id}-u`,role:`user`,content:e,status:`done`,createdAt:a})}let o=t.output||``,s=t.thinking||``,c=o.length>pr?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>pr?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=ut(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,...Ht(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:fr,MAX_LOG_DISPLAY_SIMPLE:pr}}A(),B();function hr(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 s(e){if(!await a(e))return;await r.clearJobsByTask(e.id);let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/run`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i())}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));t.success?L.success(t.message||X(`@WORKBENCH:已加入执行队列`)):L.error(t.error||X(`@WORKBENCH:执行失败`))}async function c(t,n){let r=e.value.filter(e=>e.taskId===t.id).slice(-1)[0];if(!r)return L.error(X(`@WORKBENCH:没有可续接的会话`)),!1;let i=Array.isArray(t.attachments)?t.attachments:[],a=await fetch(`/api/workbench/jobs/${r.id}/continue`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({userMessage:n,attachments:i})}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));return a.success?(L.success(a.message||X(`@WORKBENCH:已加入续接队列`)),!0):(L.error(a.error||X(`@WORKBENCH:续接失败`)),!1)}let l=Se({}),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 c(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 v=o(()=>{let t=new Set;for(let n of e.value)(n.status===`running`||n.status===`pending`)&&t.add(n.taskId);return t});W(v,(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 y(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 b(e){let n=t.value.find(t=>t.id===e.taskId)||t.value.find(t=>t.id===String(e.subId||``).replace(/__simple(?:__r\d+)?$/,``));if(!n){L.error(X(`@WORKBENCH:找不到对应任务,无法重新执行`));return}await s(n)}async function x(e){try{await H.confirm(X(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),X(`@WORKBENCH:停止执行`),{confirmButtonText:X(`@WORKBENCH:停止`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}let t=await fetch(`/api/workbench/jobs/${e.id}/cancel`,{method:`POST`}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));t.success?L.success(X(`@WORKBENCH:已发送停止信号`)):L.error(t.error||X(`@WORKBENCH:停止失败`))}async function ee(){if(!n.value)return;let t=n.value,r=e.value.filter(e=>e.taskId===t.id),i=r.filter(e=>e.status===`running`||e.status===`pending`).length,a=r.length===0?X(`@WORKBENCH:当前任务还没有执行内容,确认仍要清空?`):X(`@WORKBENCH:将清空 {m} 条执行记录,任务描述/附件保留。`,{m:r.length});try{await H.confirm(a,X(`@WORKBENCH:清空执行内容`),{confirmButtonText:X(`@WORKBENCH:清空`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}if(i>0){L.warning(X(`@WORKBENCH:任务正在执行,请先停止`));return}let o=await fetch(`/api/workbench/tasks/${encodeURIComponent(t.id)}/clear-execution`,{method:`POST`,headers:{"Content-Type":`application/json`}}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));o?.success?(e.value=e.value.filter(e=>e.taskId!==t.id),L.success(o.message||X(`@WORKBENCH:已清空执行内容`))):L.error(o?.error||X(`@WORKBENCH:清空失败`))}return{runTask:s,continueChat:c,onContinueSendFromChat:y,onReExecuteJob:b,cancelJob:x,clearExecutionForSelectedTask:ee,isTaskRunning:f,queuedChatsOf:p,removeQueuedChat:h,flushNextQueued:_}}A();function gr(){let e=Pe(),t=$(),n=o({get:()=>e.resolvedTaskExecutor,set:t=>{je(t)&&e.setLastTaskExecutor(t)}}),r=o(()=>({claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable,codebuddy:t.codebuddyAvailable})),i=o(()=>Ne.some(e=>r.value[e.id])),a=o(()=>r.value[n.value]?n.value:Object.keys(r.value).find(e=>r.value[e])??n.value);function s(e){r.value[e]&&(n.value=e)}function c(e){return t.executorModelText(e)}function l(e){return[c(e),t.executorModelDetail(e)].filter(Boolean).join(` · `)}return{selected:n,active:a,availability:r,hasAnyExecutor:i,choose:s,executorModelText:c,executorModelTitle:l}}B();function _r(){let e=J([]),t=J([]),n=J({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`&&L.error(r.error||X(`@WORKBENCH:执行出错`))}let i=null;function a(){i&&=(i.close(),null),i=new EventSource(`/api/workbench/events`),i.onmessage=e=>{try{let t=JSON.parse(e.data);r(t.event,t.payload)}catch{}},i.onerror=()=>{i&&=(i.close(),null),setTimeout(a,3e3)}}function o(){i&&=(i.close(),null)}async function s(t){let n=await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}));e.value=n.tasks||[],t?.()}async function c(){let e=await fetch(`/api/workbench/current-project`).then(e=>e.json()).catch(()=>({}));e&&typeof e.projectPath==`string`&&(n.value={path:e.projectPath,name:e.projectName||``})}async function l(){let e=await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}));t.value=e.jobs||[]}async function u(e){try{let n=await fetch(`/api/workbench/jobs/by-task/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());return n?.success?(t.value=t.value.filter(t=>t.taskId!==e),n.removed||0):(console.warn(`[clearJobsByTask] failed:`,n?.error),0)}catch(e){return console.warn(`[clearJobsByTask] error:`,e),0}}async function d(e){let t={title:``,desc:``};e&&(t.projectPath=e);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}).then(e=>e.json());return e.success?e.task||null:(L.error(e.error||X(`@WORKBENCH:保存失败`)),null)}catch{return L.error(X(`@WORKBENCH:保存失败`)),null}}return{tasks:e,jobs:t,currentProject:n,applyJobEvent:r,connectSSE:a,disconnectSSE:o,loadTasks:s,loadCurrentProject:c,loadJobs:l,clearJobsByTask:u,createTask:d}}B(),A();var vr=`__no_project__`,yr=`wb.collapsedGroupPaths.v1`,br=`wb.seenGroupPaths.v1`;function xr(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 Sr(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function Cr(e,t){let n=J(xr(yr)),r=J(xr(br));W(n,e=>Sr(yr,e),{deep:!1}),W(r,e=>Sr(br,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 s=o(()=>{let r=e.value,i=new Map;for(let e of r){let t=Q(e.projectPath)||vr;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===vr?1:t===vr?-1:e.localeCompare(t));return{groups:o.map(e=>({path:e,label:e===vr?X(`@WORKBENCH:未关联项目`):e,tasks:i.get(e)})),hasMultiple:o.length>1||o.length===1&&n.value.has(o[0])}});function c(e){if(!e||e===vr)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}let l=o(()=>`${Q(t.value.path)}|${s.value.groups.map(e=>e.path).join(`
|
|
6
|
+
`)}`);return W(l,()=>{let e=Q(t.value.path);if(!e)return;let i=new Set(n.value),a=new Set(r.value),o=!1;for(let t of s.value.groups)a.has(t.path)||(a.add(t.path),t.path!==e&&(i.add(t.path),o=!0));o&&(n.value=i),r.value=a},{immediate:!0}),{groupedTasksList:s,isGroupCollapsed:i,toggleGroupCollapsed:a,shortProjectLabel:c}}A(),B(),u(),F();var wr={class:`wb-sidebar`},Tr={class:`wb-section`},Er=[`disabled`],Dr=[`aria-expanded`,`title`,`onClick`,`onKeydown`],Or=[`title`],kr={class:`wb-pill wb-task-group__count`},Ar=[`data-task-id`,`data-group-path`,`title`,`aria-pressed`,`onClick`,`onKeydown`,`onMousedown`],jr={class:`wb-task-item__body`},Mr=[`title`],Nr=[`title`],Pr={class:`wb-task-item__action-group`},Fr=[`title`,`aria-label`,`onClick`],Ir=[`onClick`,`title`,`aria-label`],Lr={key:0,class:`wb-empty wb-empty--rich`},Rr={class:`wb-empty__art`,"aria-hidden":`true`},zr={class:`wb-empty__title`},Br={class:`wb-empty__hint`},Vr={class:`wb-empty__cta`},Hr=5,Ur=Z(b({__name:`WorkbenchSidebar`,props:{tasks:{},selectedTaskId:{},currentProject:{},creatingTask:{type:Boolean},isTaskRunning:{type:Function}},emits:[`select-task`,`delete-task`,`copy-task`,`create-task`,`reorder-tasks`],setup(n,{emit:r}){let s=n,c=r,u=o(()=>s.currentProject),{groupedTasksList:d,isGroupCollapsed:f,toggleGroupCollapsed:p,shortProjectLabel:m}=Cr(o(()=>s.tasks),u),h=o(()=>Q(s.currentProject.path));function _(e){return!!e.projectPath&&Q(e.projectPath)!==h.value}function y(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function b(e){let t=y(e),n=X(`@WORKBENCH:拖动排序提示`);return t?`${t} · ${n}`:n}function x(e){return s.isTaskRunning(e)}let ee=J(null),S=J(null),E=J(null),D=J(null),k=J(null),A=null;function ne(){ee.value=null,S.value=null,E.value=null,D.value=null,k.value=null,A=null}function re(e,t,n,r){e.button===0&&(A={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,ie),window.addEventListener(`mouseup`,ae,{once:!0}))}function ie(e){if(!A)return;if(ee.value===null){if(Math.abs(e.clientY-A.pointerY)<Hr)return;ee.value=A.taskId,S.value=A.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){E.value=null,D.value=null,k.value=null;return}let r=n.getAttribute(`data-task-id`),i=n.getAttribute(`data-group-path`);if(!r||!i)return;if(i!==S.value){E.value=null,D.value=null,k.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;E.value=r,D.value=i,k.value=e.clientY<o?`before`:`after`}function ae(e){if(window.removeEventListener(`mousemove`,ie),document.body.style.userSelect=``,!A){ne();return}let t=A.groupPath,n=A.taskId,r=E.value,i=k.value,a=D.value;if(ne(),!r||!i||a!==t)return;let o=d.value.groups.find(e=>e.path===t);if(!o)return;let s=o.tasks.map(e=>e.id),l=s.indexOf(n);if(l<0)return;s.splice(l,1);let u=s.indexOf(r)+ +(i===`after`);s.splice(u,0,n),c(`reorder-tasks`,{groupPath:t,orderedIds:s})}return(r,o)=>{let s=g,u=we;return T(),t(`aside`,wr,[i(`section`,Tr,[i(`button`,{class:`wb-new-btn`,disabled:n.creatingTask,onClick:o[0]||=e=>c(`create-task`)},[l(s,{class:`wb-new-btn__icon`},{default:z(()=>[l(a(Te))]),_:1}),i(`span`,null,e(a(X)(`@WORKBENCH:新建任务`)),1),o[4]||=i(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,Er),i(`ul`,{class:v([`wb-task-list`,{"is-grouped":a(d).hasMultiple}])},[(T(!0),t(O,null,I(a(d).groups,r=>(T(),t(O,{key:r.path},[a(d).hasMultiple?(T(),t(`li`,{key:0,class:v([`wb-task-group__head`,{"is-current":r.path===h.value,"is-collapsed":a(f)(r.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!a(f)(r.path),title:a(f)(r.path)?a(X)(`@WORKBENCH:展开`):a(X)(`@WORKBENCH:收起`),onClick:e=>a(p)(r.path),onKeydown:[N(q(e=>a(p)(r.path),[`prevent`]),[`enter`]),N(q(e=>a(p)(r.path),[`prevent`]),[`space`])]},[l(s,{class:`wb-task-group__caret`},{default:z(()=>[(T(),C(U(a(f)(r.path)?a(oe):a(j))))]),_:2},1024),l(s,{class:`wb-task-group__icon`},{default:z(()=>[l(a(te))]),_:1}),i(`span`,{class:`wb-task-group__name`,title:r.path===h.value?n.currentProject.path:r.label},e(r.path===h.value?n.currentProject.name:a(m)(r.label)),9,Or),i(`span`,kr,e(r.tasks.length),1)],42,Dr)):R(``,!0),a(f)(r.path)?R(``,!0):(T(!0),t(O,{key:1},I(r.tasks,u=>(T(),t(`li`,{key:u.id,class:v([`wb-task-item`,{active:u.id===n.selectedTaskId,"is-other-project":_(u),"is-running":x(u),"is-dragging":ee.value===u.id,"is-drop-before":E.value===u.id&&k.value===`before`,"is-drop-after":E.value===u.id&&k.value===`after`}]),"data-task-id":u.id,"data-group-path":r.path,title:b(u),role:`button`,tabindex:`0`,"aria-pressed":u.id===n.selectedTaskId,onClick:e=>c(`select-task`,u),onKeydown:[N(q(e=>c(`select-task`,u),[`prevent`]),[`enter`]),N(q(e=>c(`select-task`,u),[`prevent`]),[`space`])],onMousedown:e=>re(e,u,r.path,e.currentTarget)},[i(`div`,jr,[i(`div`,{class:`wb-task-item__title`,title:y(u)},e(y(u)),9,Mr)]),x(u)?(T(),t(`span`,{key:0,class:`wb-task-item__running-dot`,title:a(X)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,Nr)):R(``,!0),i(`div`,Pr,[i(`button`,{class:`wb-task-item__copy`,title:a(X)(`@WORKBENCH:复制任务`),"aria-label":a(X)(`@WORKBENCH:复制任务`),onClick:q(e=>c(`copy-task`,u),[`stop`]),onKeydown:o[1]||=q(()=>{},[`stop`])},[l(s,null,{default:z(()=>[l(a(P))]),_:1})],40,Fr),x(u)?R(``,!0):(T(),t(`button`,{key:0,class:`wb-task-item__del`,onClick:q(e=>c(`delete-task`,u),[`stop`]),onKeydown:o[2]||=q(()=>{},[`stop`]),title:a(X)(`@WORKBENCH:删除`),"aria-label":a(X)(`@WORKBENCH:删除`)},[l(s,null,{default:z(()=>[l(a(V))]),_:1})],40,Ir))])],42,Ar))),128))],64))),128)),n.tasks.length===0?(T(),t(`li`,Lr,[i(`div`,Rr,[l(s,null,{default:z(()=>[l(a(fe))]),_:1})]),i(`div`,zr,e(a(X)(`@WORKBENCH:暂无任务`)),1),i(`div`,Br,e(a(X)(`@WORKBENCH:点击上方按钮新建`)),1),i(`div`,Vr,[l(u,{type:`primary`,size:`small`,icon:a(Te),loading:n.creatingTask,onClick:o[3]||=e=>c(`create-task`)},{default:z(()=>[w(e(a(X)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])])])):R(``,!0)],2)])])}}}),[[`__scopeId`,`data-v-cb578d87`]]);B();function Wr(){let e=J([]),t=J([]),n=J(``),r=J(!1),i=J(!1);async function a(a=!1){a||(r.value=!0);try{let r=await fetch(`/api/workbench/projects`,{cache:`no-store`}).then(e=>e.json());return r?.success?(e.value=Array.isArray(r.projects)?r.projects:[],t.value=Array.isArray(r.tasks)?r.tasks:[],n.value=r.currentProjectPath||``,i.value=!0,!0):(a||L.error(r?.error||X(`@WORKBENCH:读取项目列表失败`)),!1)}catch(e){return a||L.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}finally{r.value=!1}}async function o(e){if(!e)return{ok:!1,keptTasks:0};try{let t=await fetch(`/api/workbench/projects/remove`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}).then(e=>e.json()).catch(()=>null);return t?.success?{ok:!0,keptTasks:Number.isFinite(t.keptTasks)?t.keptTasks:0}:(L.error(t?.error||X(`@WORKBENCH:移除项目失败`)),{ok:!1,keptTasks:0})}catch(e){return L.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),{ok:!1,keptTasks:0}}}return{projects:e,boardTasks:t,currentProjectPath:n,loading:r,loaded:i,loadProjects:a,removeProject:o}}A(),B(),u(),F();var Gr={class:`proj`},Kr={class:`proj__head`},qr={class:`proj__title`},Jr={class:`proj__count`},Yr={key:0,class:`proj__tools`},Xr={class:`proj__search`},Zr=[`placeholder`,`aria-label`],Qr={class:`proj__toggles`},$r=[`aria-pressed`,`title`],ei=[`aria-pressed`,`title`],ti={class:`proj__list`},ni=[`title`],ri={class:`proj-item__row1`},ii={class:`proj-item__name`},ai={key:0,class:`proj-item__running`,"aria-hidden":`true`},oi={class:`proj-item__num`},si={key:0,class:`proj-item__row2`},ci={class:`proj-item__running-text`},li=[`title`],ui={class:`proj-item__bar`,"aria-hidden":`true`},di={class:`proj-item__progress-text`},fi=[`title`,`onClick`,`onKeydown`],pi={class:`proj-item__row1`},mi={class:`proj-item__name`},hi={class:`proj-item__signals`},gi={key:0,class:`proj-item__running`,"aria-hidden":`true`},_i={key:1,class:`proj-item__badge`},vi={class:`proj-item__row2`},yi={key:0,class:`proj-chip proj-chip--missing`},bi={key:0,class:`proj-item__branch`},xi={class:`proj-item__branch-name`},Si={key:1,class:`proj-chip proj-chip--ahead`},Ci={key:2,class:`proj-chip proj-chip--behind`},wi={key:3,class:`proj-chip proj-chip--dirty`},Ti={class:`proj-item__time`},Ei={key:0,class:`proj-item__row3`},Di={class:`proj-item__bar`,"aria-hidden":`true`},Oi={class:`proj-item__progress-text`},ki={class:`proj-item__actions`},Ai=[`title`,`aria-label`,`onClick`],ji=[`title`,`aria-label`,`onClick`],Mi=[`title`,`aria-label`,`aria-expanded`,`onClick`],Ni=[`aria-label`],Pi=[`onClick`,`onKeydown`],Fi={class:`proj-menu__icon`},Ii={class:`proj-menu__label`},Li=[`onClick`,`onKeydown`],Ri={class:`proj-menu__icon`},zi={class:`proj-menu__label`},Bi=[`onClick`,`onKeydown`],Vi={class:`proj-menu__icon`},Hi={class:`proj-menu__label`},Ui=[`onClick`,`onKeydown`],Wi={class:`proj-menu__icon`},Gi={class:`proj-menu__label`},Ki={class:`proj-menu__title`,role:`presentation`},qi=[`onClick`,`onKeydown`],Ji={class:`proj-menu__icon`},Yi={class:`proj-menu__label`},Xi={key:0,class:`proj-menu__hint`},Zi=[`onClick`,`onKeydown`],Qi={class:`proj-menu__icon`},$i=[`src`],ea={class:`proj-menu__label`},ta={class:`proj-menu__hint`},na=[`onClick`,`onKeydown`],ra={class:`proj-menu__icon`},ia=[`src`],aa={class:`proj-menu__label`},oa=[`onClick`,`onKeydown`],sa={class:`proj-menu__icon`},ca={class:`proj-menu__label`},la=[`onClick`,`onKeydown`],ua={class:`proj-menu__icon`},da={class:`proj-menu__label`},fa={key:0,class:`proj-menu__hint`},pa={key:1,class:`proj-menu__hint`},ma=[`onClick`,`onKeydown`],ha={class:`proj-menu__icon`},ga={class:`proj-menu__label`},_a={key:0,class:`proj-empty`},va={class:`proj-empty__title`},ya={class:`proj-empty__hint`},ba={key:1,class:`proj-empty`},xa={class:`proj-empty__title`},Sa=Z(b({__name:`WorkbenchProjectPanel`,props:{projects:{},selectedKey:{},loading:{type:Boolean}},emits:[`select`,`remove`],setup(n,{emit:c}){let u=n,f=c,m=o(()=>[...u.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)})),h=J(``),y=J(!1),b=J(!1),ee=o(()=>!!h.value.trim()||y.value||b.value),S=o(()=>{let e=h.value.trim().toLowerCase();return m.value.filter(t=>y.value&&t.stats.total===0||b.value&&t.git&&t.git.isGitRepo===!1?!1:!e||t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))});function E(){h.value=``,y.value=!1,b.value=!1}let D=o(()=>u.projects.reduce((e,t)=>({running:e.running+t.stats.runningJobs,done:e.done+t.stats.done,total:e.total+t.stats.total}),{running:0,done:0,total:0})),k=o(()=>D.value.total>0?Math.round(D.value.done/D.value.total*100):0);function A(e){return e.git?e.git.isGitRepo===null?X(`@WORKBENCH:未知`):e.git.isGitRepo?e.git.detached?X(`@WORKBENCH:游离 HEAD`):e.git.branch||X(`@WORKBENCH:未知`):``:``}function re(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}let j=J(null),oe=J(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}}ie(()=>document.addEventListener(`mousedown`,M,!0)),_(()=>document.removeEventListener(`mousedown`,M,!0));let ue=$(),de=J(!1),F=J(null);function fe(e){return ue.lastCheckedAt!==null&&!ue.isToolAvailable(e)}async function me(e){le();let t=await Ke(e.path);t.success?L.success(t.message||X(`@WORKBENCH:已在文件管理器中打开文件夹`)):L.error(t.error||X(`@WORKBENCH:打开文件夹失败`))}async function B(e){le();let t=await He(e.path);t.success?L.success(t.message||X(`@67CE7:已在终端中打开目录`)):L.error(t.error||X(`@WORKBENCH:打开终端失败`))}async function V(e){le();let t=await Ie(e.path);t.success?L.success(X(`@WORKBENCH:已在新标签页启动 g ui`)):L.error(t.error||X(`@WORKBENCH:启动 g ui 失败`))}async function he(e){if(le(),e.name)try{await navigator.clipboard.writeText(e.name),L.success(X(`@67CE7:已复制文件夹名称`))}catch{L.error(X(`@67CE7:复制失败`))}}async function U(e){let t=e.name||e.path,n=e.stats.total>0?X(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。该项目的 {n} 条任务不会被删除,仍可在「全部项目」下查看。`,{name:t,n:e.stats.total}):X(`@WORKBENCH:移除项目「{name}」?会从常用目录和项目列表中去掉它。`,{name:t});try{await H.confirm(n,X(`@WORKBENCH:移除项目`),{confirmButtonText:X(`@WORKBENCH:移除`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}f(`remove`,e)}async function W(e,t,n){if(le(),!await Ve()){L.warning(X(`@67CE7:工具检测失败,请稍后重试`));return}if(!ue.isToolAvailable(t)){F.value=t,de.value=!0;return}let r=await Re(t,e.path,n);r.success?L.success(r.message||X(`@67CE7:已用 {tool} 打开目录`,{tool:qe[t]})):L.error(`${X(`@67CE7:打开失败: `)}${r.error??``}`)}return(o,c)=>{let u=g,m=se;return T(),t(`section`,Gr,[i(`header`,Kr,[i(`h3`,qr,e(a(X)(`@WORKBENCH:项目列表`)),1),i(`span`,Jr,[ee.value?(T(),t(O,{key:0},[w(e(a(X)(`@WORKBENCH:匹配 {n}/{total} 个项目`,{n:S.value.length,total:n.projects.length})),1)],64)):(T(),t(O,{key:1},[w(e(n.projects.length),1)],64))])]),n.projects.length>0?(T(),t(`div`,Yr,[i(`div`,Xr,[l(u,{class:`proj__search-icon`,"aria-hidden":`true`},{default:z(()=>[l(a(p))]),_:1}),G(i(`input`,{"onUpdate:modelValue":c[0]||=e=>h.value=e,class:`proj__search-input`,type:`search`,placeholder:a(X)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":a(X)(`@WORKBENCH:搜索项目名称或路径`),onKeydown:c[1]||=N(e=>h.value=``,[`esc`])},null,40,Zr),[[K,h.value]])]),i(`div`,Qr,[i(`button`,{type:`button`,class:v([`proj__toggle`,{"is-on":y.value}]),"aria-pressed":y.value,title:a(X)(`@WORKBENCH:只显示有任务的项目`),onClick:c[2]||=e=>y.value=!y.value},[i(`span`,null,e(a(X)(`@WORKBENCH:只看有任务`)),1)],10,$r),i(`button`,{type:`button`,class:v([`proj__toggle`,{"is-on":b.value}]),"aria-pressed":b.value,title:a(X)(`@WORKBENCH:只显示 Git 仓库`),onClick:c[3]||=e=>b.value=!b.value},[i(`span`,null,e(a(X)(`@WORKBENCH:隐藏非 Git`)),1)],10,ei)])])):R(``,!0),i(`ul`,ti,[i(`li`,{class:v([`proj-item proj-item--all`,{"is-active":n.selectedKey===``,"is-running":D.value.running>0,"is-complete":D.value.total>0&&D.value.done>=D.value.total}]),role:`button`,tabindex:`0`,title:a(X)(`@WORKBENCH:全部项目`),onClick:c[4]||=e=>f(`select`,null),onKeydown:[c[5]||=N(q(e=>f(`select`,null),[`prevent`]),[`enter`]),c[6]||=N(q(e=>f(`select`,null),[`prevent`]),[`space`])]},[i(`div`,ri,[l(u,{class:`proj-item__icon`},{default:z(()=>[l(a(s))]),_:1}),i(`span`,ii,e(a(X)(`@WORKBENCH:全部项目`)),1),D.value.running>0?(T(),t(`span`,ai)):R(``,!0),i(`span`,oi,e(n.projects.length),1)]),D.value.running>0?(T(),t(`div`,si,[i(`span`,ci,e(a(X)(`@WORKBENCH:{n} 个执行中`,{n:D.value.running})),1)])):R(``,!0),D.value.total>0?(T(),t(`div`,{key:1,class:`proj-item__row3`,title:a(X)(`@WORKBENCH:只统计项目列表里这些项目名下的任务`)},[i(`span`,ui,[i(`i`,{class:`proj-item__bar-fill`,style:ae({width:k.value+`%`})},null,4)]),i(`span`,di,e(a(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:D.value.done,total:D.value.total})),1)],8,li)):R(``,!0)],42,ni),(T(!0),t(O,null,I(S.value,o=>(T(),t(`li`,{key:o.key,class:v([`proj-item`,{"is-active":o.key===n.selectedKey,"is-running":o.stats.runningJobs>0,"is-complete":o.stats.total>0&&o.stats.done>=o.stats.total&&o.stats.runningJobs===0,"is-missing":o.exists===!1}]),role:`button`,tabindex:`0`,title:o.path,onClick:e=>f(`select`,o),onKeydown:[N(q(e=>f(`select`,o),[`self`,`prevent`]),[`enter`]),N(q(e=>f(`select`,o),[`self`,`prevent`]),[`space`])]},[i(`div`,pi,[l(u,{class:`proj-item__icon`},{default:z(()=>[l(a(te))]),_:1}),i(`span`,mi,e(o.name),1),i(`span`,hi,[o.stats.runningJobs>0?(T(),t(`span`,gi)):R(``,!0),o.isCurrent?(T(),t(`span`,_i,e(a(X)(`@WORKBENCH:当前`)),1)):R(``,!0)])]),i(`div`,vi,[o.exists===!1?(T(),t(`span`,yi,e(a(X)(`@WORKBENCH:目录不存在`)),1)):(T(),t(O,{key:1},[A(o)?(T(),t(`span`,bi,[re(o)?(T(),C(Ae,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):R(``,!0),i(`span`,xi,e(A(o)),1)])):R(``,!0),o.git&&o.git.ahead>0?(T(),t(`span`,Si,`↑`+e(o.git.ahead),1)):R(``,!0),o.git&&o.git.behind>0?(T(),t(`span`,Ci,`↓`+e(o.git.behind),1)):R(``,!0),o.git&&o.git.changed>0?(T(),t(`span`,wi,`●`+e(o.git.changed),1)):R(``,!0)],64)),i(`span`,Ti,e(a(Wn)(o.stats.lastActiveAt)),1)]),o.stats.total>0?(T(),t(`div`,Ei,[i(`span`,Di,[i(`i`,{class:`proj-item__bar-fill`,style:ae({width:o.stats.progress+`%`})},null,4)]),i(`span`,Oi,e(a(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:o.stats.done,total:o.stats.total})),1)])):R(``,!0),i(`div`,ki,[o.exists===!1?(T(),t(`button`,{key:0,type:`button`,class:`proj-item__action proj-item__action--danger`,title:a(X)(`@WORKBENCH:从清单移除`),"aria-label":`${a(X)(`@WORKBENCH:从清单移除`)} ${o.name}`,onClick:q(e=>U(o),[`stop`])},[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(pe))]),_:1})],8,Ai)):(T(),t(`button`,{key:1,type:`button`,class:`proj-item__action`,title:a(X)(`@WORKBENCH:打开文件夹`),"aria-label":`${a(X)(`@WORKBENCH:打开文件夹`)} ${o.name}`,onClick:q(e=>me(o),[`stop`])},[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(r))]),_:1})],8,ji)),o.exists===!1?R(``,!0):(T(),C(m,{key:2,visible:j.value===o.key,trigger:`manual`,placement:`right-start`,width:272,"show-arrow":!1,offset:6,"popper-class":`proj-open-menu`},{reference:z(()=>[i(`button`,{type:`button`,class:v([`proj-item__action`,{"is-open":j.value===o.key}]),title:a(X)(`@WORKBENCH:打开方式`),"aria-label":`${a(X)(`@WORKBENCH:打开方式`)} ${o.name}`,"aria-expanded":j.value===o.key,"aria-haspopup":`menu`,onClick:q(e=>ce(o,e),[`stop`])},[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(x))]),_:1})],10,Mi)]),default:z(()=>[j.value===o.key?(T(),t(`ul`,{key:0,class:`proj-menu`,role:`menu`,"aria-label":a(X)(`@WORKBENCH:打开方式`)},[i(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>me(o),onKeydown:[N(q(e=>me(o),[`prevent`]),[`enter`]),N(q(e=>me(o),[`prevent`]),[`space`])]},[i(`span`,Fi,[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(r))]),_:1})]),i(`span`,Ii,e(a(X)(`@WORKBENCH:在文件管理器中打开`)),1)],40,Pi),i(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>B(o),onKeydown:[N(q(e=>B(o),[`prevent`]),[`enter`]),N(q(e=>B(o),[`prevent`]),[`space`])]},[i(`span`,Ri,[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(d))]),_:1})]),i(`span`,zi,e(a(X)(`@WORKBENCH:在终端中打开`)),1)],40,Li),i(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>V(o),onKeydown:[N(q(e=>V(o),[`prevent`]),[`enter`]),N(q(e=>V(o),[`prevent`]),[`space`])]},[i(`span`,Vi,[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(ne))]),_:1})]),i(`span`,Hi,e(a(X)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,Bi),i(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>he(o),onKeydown:[N(q(e=>he(o),[`prevent`]),[`enter`]),N(q(e=>he(o),[`prevent`]),[`space`])]},[i(`span`,Wi,[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(P))]),_:1})]),i(`span`,Gi,e(a(X)(`@67CE7:复制文件夹名称`)),1)],40,Ui),c[8]||=i(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),i(`li`,Ki,e(a(X)(`@WORKBENCH:用工具打开`)),1),(T(!0),t(O,null,I(a(Ue),n=>(T(),t(`li`,{key:n.id,class:v([`proj-menu__item`,{"is-missing":fe(n.id)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>W(o,n.id),onKeydown:[N(q(e=>W(o,n.id),[`prevent`]),[`enter`]),N(q(e=>W(o,n.id),[`prevent`]),[`space`])]},[i(`span`,Ji,[l(Ae,{"icon-class":n.icon,class:v({"icon-invert-dark":n.id===`codex`})},null,8,[`icon-class`,`class`])]),i(`span`,Yi,e(a(X)(n.labelKey)),1),fe(n.id)?(T(),t(`span`,Xi,e(a(X)(`@67CE7:未安装`)),1)):R(``,!0)],42,qi))),128)),i(`li`,{class:v([`proj-menu__item`,{"is-missing":fe(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>W(o,`claude`),onKeydown:[N(q(e=>W(o,`claude`),[`prevent`]),[`enter`]),N(q(e=>W(o,`claude`),[`prevent`]),[`space`])]},[i(`span`,Qi,[i(`img`,{src:a(Le),alt:``,class:`proj-menu__img`},null,8,$i)]),i(`span`,ea,e(a(X)(`@67CE7:用 Claude Code 打开`)),1),i(`span`,ta,e(fe(`claude`)?a(X)(`@67CE7:未安装`):a(X)(`@67CE7:默认权限`)),1)],42,Zi),i(`li`,{class:v([`proj-menu__item proj-menu__item--danger`,{"is-missing":fe(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>W(o,`claude`,`bypassPermissions`),onKeydown:[N(q(e=>W(o,`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),N(q(e=>W(o,`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[i(`span`,ra,[i(`img`,{src:a(Le),alt:``,class:`proj-menu__img`},null,8,ia)]),i(`span`,aa,e(a(X)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],42,na),i(`li`,{class:v([`proj-menu__item proj-menu__item--danger`,{"is-missing":fe(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>W(o,`opencode`,`auto`),onKeydown:[N(q(e=>W(o,`opencode`,`auto`),[`prevent`]),[`enter`]),N(q(e=>W(o,`opencode`,`auto`),[`prevent`]),[`space`])]},[i(`span`,sa,[l(Ae,{"icon-class":`opencode`})]),i(`span`,ca,e(a(X)(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],42,oa),i(`li`,{class:v([`proj-menu__item`,{"is-missing":fe(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>W(o,`codex`,`sandboxed`),onKeydown:[N(q(e=>W(o,`codex`,`sandboxed`),[`prevent`]),[`enter`]),N(q(e=>W(o,`codex`,`sandboxed`),[`prevent`]),[`space`])]},[i(`span`,ua,[l(Ae,{"icon-class":`codex`,class:`icon-invert-dark`})]),i(`span`,da,e(a(X)(`@67CE7:用 Codex 打开(自动批准)`)),1),fe(`codex`)?(T(),t(`span`,pa,e(a(X)(`@67CE7:未安装`)),1)):(T(),t(`span`,fa,e(a(X)(`@67CE7:沙箱内`)),1))],42,la),i(`li`,{class:v([`proj-menu__item proj-menu__item--danger`,{"is-missing":fe(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>W(o,`codex`,`bypass`),onKeydown:[N(q(e=>W(o,`codex`,`bypass`),[`prevent`]),[`enter`]),N(q(e=>W(o,`codex`,`bypass`),[`prevent`]),[`space`])]},[i(`span`,ha,[l(Ae,{"icon-class":`codex`,class:`icon-invert-dark`})]),i(`span`,ga,e(a(X)(`@67CE7:用 Codex 打开(完全批准)`)),1)],42,ma)],8,Ni)):R(``,!0)]),_:2},1032,[`visible`]))])],42,fi))),128)),!n.loading&&n.projects.length===0?(T(),t(`li`,_a,[i(`p`,va,e(a(X)(`@WORKBENCH:尚无项目`)),1),i(`p`,ya,e(a(X)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):R(``,!0),!n.loading&&n.projects.length>0&&S.value.length===0?(T(),t(`li`,ba,[i(`p`,xa,e(a(X)(`@WORKBENCH:没有匹配的项目`)),1),i(`button`,{type:`button`,class:`proj-empty__clear`,onClick:E},e(a(X)(`@WORKBENCH:清除筛选`)),1)])):R(``,!0)]),l(Be,{modelValue:de.value,"onUpdate:modelValue":c[7]||=e=>de.value=e,tool:F.value},null,8,[`modelValue`,`tool`])])}}}),[[`__scopeId`,`data-v-4f1136db`]]),Ca=[140,170,200,230,260,290,320,350];function wa(e){return(e||``).replace(/\\/g,`/`).trim().toLowerCase()}function Ta(e){let t=wa(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,Ca[(n>>>0)%Ca.length]}function Ea(e){return{"--tag-hue":String(Ta(e))}}A(),B(),u(),F();var Da={class:`kb`},Oa={class:`kb__toolbar`},ka={class:`kb__views`,role:`tablist`},Aa=[`aria-selected`],ja=[`aria-selected`],Ma={class:`kb__filters`},Na={class:`kb__search`},Pa=[`placeholder`,`aria-label`],Fa=[`aria-hidden`],Ia={class:`kb-col__head`},La={class:`kb-col__title`},Ra={class:`kb-col__count`},za={class:`kb-col__list`},Ba=[`data-task-id`,`aria-current`,`onClick`,`onKeydown`],Va=[`title`,`aria-label`,`onClick`],Ha=[`src`,`alt`,`onError`],Ua={key:0,class:`kb-card__cover-more`,"aria-hidden":`true`},Wa={class:`kb-card__row1`},Ga=[`title`],Ka=[`title`],qa={class:`kb-card__time`},Ja=[`title`],Ya=[`title`],Xa={key:3,class:`kb-card__live`},Za={class:`kb-card__live-meta`},Qa=[`title`],$a=[`title`],eo={key:2,class:`kb-card__live-pid`},to={key:3,class:`kb-card__live-silent`},no=[`title`],ro=[`title`],io={class:`kb-card__live-tag`},ao=[`title`],oo={class:`kb-card__live-tag`},so=[`title`],co=[`title`],lo={class:`kb-card__reply-text`},uo=[`title`,`onClick`],fo={class:`kb-card__actions`},po=[`title`,`onClick`],mo=[`title`,`aria-label`,`onClick`],ho=[`title`,`aria-label`,`onClick`],go=[`title`,`aria-label`,`onClick`],_o=[`title`,`aria-label`,`onClick`],vo={key:0,class:`kb-col__add`},yo={key:1,class:`kb-col__empty`},bo={key:2,class:`kb-col__more`},xo={key:1,class:`kb__table-wrap`},So={class:`kb-table`},Co={class:`kb-table__th`},wo={class:`kb-table__th kb-table__th--narrow`},To={class:`kb-table__th kb-table__th--time`},Eo=[`onClick`,`onKeydown`],Do={class:`kb-table__td`},Oo=[`title`,`onClick`],ko={class:`kb-table__name`},Ao=[`title`],jo={key:2,class:`kb-table__live`},Mo=[`title`],No={key:1,class:`kb-table__live-silent`},Po={key:3,class:`kb-table__live kb-table__live--reply`},Fo=[`title`],Io={class:`kb-table__td`},Lo={class:`kb-table__td kb-table__td--num`},Ro=[`title`],zo={class:`kb-table__dur`},Bo=[`title`],Vo={key:0},Ho={class:`kb-table__td kb-table__empty`,colspan:`3`},Uo=`wb.boardView.v1`,Wo=30,Go=Z(b({__name:`WorkbenchKanban`,props:{tasks:{},projectLabels:{},showProjectLabel:{type:Boolean},openedTaskId:{}},emits:[`open-task`,`run-task`,`stop-task`,`complete-task`,`reopen-task`,`delete-task`,`create-task`],setup(n,{emit:r}){let s=n,c=r,u=J((()=>{try{return localStorage.getItem(Uo)===`list`?`list`:`kanban`}catch{return`kanban`}})());W(u,e=>{try{localStorage.setItem(Uo,e)}catch{}});let d=J(``),f=[{key:`todo`,labelKey:`@WORKBENCH:待处理`},{key:`doing`,labelKey:`@WORKBENCH:进行中`},{key:`done`,labelKey:`@WORKBENCH:已完成`}],m=o(()=>{let e=d.value.trim().toLowerCase();return s.tasks.filter(t=>!e||(t.title||``).toLowerCase().includes(e)||(t.desc||``).toLowerCase().includes(e))}),h=J(Wo);W(d,()=>{h.value=Wo});let _=o(()=>{let e=f.map(e=>{let t=e.key===`done`?m.value.filter(t=>t.column===e.key).sort(ee):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`}))}),y=o(()=>({gridTemplateColumns:_.value.map(e=>e.collapsed?`minmax(0, 0fr)`:`minmax(0, 1fr)`).join(` `)})),b=J(!1);ie(()=>{requestAnimationFrame(()=>requestAnimationFrame(()=>{b.value=!0}))});function x(e){return Jn(e)}function ee(e,t){return x(t).localeCompare(x(e))}function S(e){return Yn(e)}function E(e){return Xn(e)}function D(e){return er(e)}function te(e){let t=(e.autoCompleted?.reason||``).trim(),n=X(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`);return t?`${n}\n${t}`:n}let k=o(()=>[...m.value].sort((e,t)=>S(t).localeCompare(S(e))));function A(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 ne(e){return s.projectLabels[e.projectPath]||``}function re(e){return e.lastJobStatus===`error`}function j(e){return e.live?.agent||e.lastJobAgent||``}function oe(e){let t=e.live;if(!t)return``;let n=Qn(e),r=t.lastLine||t.lastThought||t.lastTool;return r?`${n} · ${r}`:n}function se(e){return Array.isArray(e.images)?e.images:[]}let ce=J(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 P=J(null);function F(e,t=0){let n=M(e);n.length!==0&&(P.value={urls:n.map(e=>ue(e.id)),index:t})}function fe(){P.value=null}function L(e){return e.originalName?`${X(`@WORKBENCH:查看图片`)} · ${e.originalName}`:X(`@WORKBENCH:查看图片`)}return(r,o)=>{let s=g,m=de;return T(),t(`div`,Da,[i(`div`,Oa,[i(`div`,ka,[i(`button`,{type:`button`,role:`tab`,class:v([`kb__view-btn`,{"is-active":u.value===`kanban`}]),"aria-selected":u.value===`kanban`,onClick:o[0]||=e=>u.value=`kanban`},e(a(X)(`@WORKBENCH:看板视图`)),11,Aa),i(`button`,{type:`button`,role:`tab`,class:v([`kb__view-btn`,{"is-active":u.value===`list`}]),"aria-selected":u.value===`list`,onClick:o[1]||=e=>u.value=`list`},e(a(X)(`@WORKBENCH:列表视图`)),11,ja)]),i(`div`,Ma,[i(`div`,Na,[l(s,{class:`kb__search-icon`},{default:z(()=>[l(a(p))]),_:1}),G(i(`input`,{class:`kb__search-input`,type:`search`,"onUpdate:modelValue":o[2]||=e=>d.value=e,placeholder:a(X)(`@WORKBENCH:搜索任务标题或描述`),"aria-label":a(X)(`@WORKBENCH:搜索任务标题或描述`)},null,8,Pa),[[K,d.value]])])])]),u.value===`kanban`?(T(),t(`div`,{key:0,class:v([`kb__columns`,{"is-animated":b.value}]),style:ae(y.value)},[(T(!0),t(O,null,I(_.value,r=>(T(),t(`section`,{key:r.key,class:v([`kb-col`,[`kb-col--`+r.key,{"is-collapsed":r.collapsed}]]),"aria-hidden":r.collapsed?`true`:void 0},[i(`header`,Ia,[i(`span`,{class:v([`kb-col__dot`,{"is-live":r.total>0}]),"aria-hidden":`true`},null,2),i(`h3`,La,e(a(X)(r.labelKey)),1),i(`span`,Ra,e(r.total),1)]),i(`ul`,za,[(T(!0),t(O,null,I(r.tasks,r=>(T(),t(`li`,{key:r.id,class:v([`kb-card`,{"is-running":r.runningJobs>0,"has-error":re(r),"is-opened":r.id===n.openedTaskId}]),"data-task-id":r.id,"aria-current":r.id===n.openedTaskId?`true`:void 0,role:`button`,tabindex:`0`,onClick:e=>c(`open-task`,r),onKeydown:[N(q(e=>c(`open-task`,r),[`prevent`]),[`enter`]),N(q(e=>c(`open-task`,r),[`prevent`]),[`space`])]},[M(r).length>0?(T(),t(`button`,{key:0,type:`button`,class:`kb-card__cover`,title:L(M(r)[0]),"aria-label":L(M(r)[0]),onClick:q(e=>F(r),[`stop`]),onKeydown:o[3]||=q(()=>{},[`stop`])},[i(`img`,{class:`kb-card__cover-img`,src:ue(M(r)[0].id),alt:M(r)[0].originalName,loading:`lazy`,decoding:`async`,onError:e=>le(M(r)[0].id)},null,40,Ha),M(r).length>1?(T(),t(`span`,Ua,` +`+e(M(r).length-1),1)):R(``,!0)],40,Va)):R(``,!0),i(`div`,Wa,[n.showProjectLabel&&ne(r)?(T(),t(`span`,{key:0,class:`kb-card__project-chip`,style:ae(a(Ea)(r.projectPath)),title:r.projectPath},e(ne(r)),13,Ga)):R(``,!0),i(`p`,{class:`kb-card__title`,title:A(r)},e(A(r)||a(X)(`@WORKBENCH:未命名任务`)),9,Ka),i(`span`,qa,e(a(Wn)(S(r))),1)]),E(r)?(T(),t(`p`,{key:1,class:`kb-card__spent`,title:D(r)},e(a(Zn)(r)),9,Ja)):R(``,!0),r.autoCompleted?(T(),t(`p`,{key:2,class:`kb-card__auto-done`,title:te(r)},e(a(X)(`@WORKBENCH:AI 判定完成`)),9,Ya)):R(``,!0),r.live?(T(),t(`div`,Xa,[i(`p`,Za,[j(r)?(T(),t(`span`,{key:0,class:`kb-card__live-agent`,title:a(Me)(j(r))},[l(Ge,{executor:j(r),class:`kb-card__live-agent-icon`},null,8,[`executor`])],8,Qa)):R(``,!0),i(`span`,null,e(a(Qn)(r)),1),r.live.toolCallCount?(T(),t(`span`,{key:1,title:r.live.toolMix||``},e(a(X)(`@WORKBENCH:工具 {n} 次`,{n:r.live.toolCallCount})),9,$a)):R(``,!0),r.live.pid?(T(),t(`span`,eo,`PID `+e(r.live.pid),1)):R(``,!0),a(_t)(r.live.silentMs)===null?R(``,!0):(T(),t(`span`,to,e(a(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:a(Gn)(a(_t)(r.live.silentMs))})),1))]),r.live.lastTool?(T(),t(`p`,{key:0,class:`kb-card__live-line is-tool`,title:r.live.lastTool},e(r.live.lastTool),9,no)):R(``,!0),r.live.lastThought?(T(),t(`p`,{key:1,class:`kb-card__live-line is-thought`,title:r.live.lastThought},[i(`span`,io,e(a(X)(`@WORKBENCH:最近思考`)),1),w(e(r.live.lastThought),1)],8,ro)):R(``,!0),r.live.lastLine?(T(),t(`p`,{key:2,class:`kb-card__live-line`,title:r.live.lastLine},[i(`span`,oo,e(a(X)(`@WORKBENCH:最新回复`)),1),w(e(r.live.lastLine),1)],8,ao)):R(``,!0)])):r.lastReply?(T(),t(`p`,{key:4,class:`kb-card__reply`,title:r.lastReply},[j(r)?(T(),t(`span`,{key:0,class:`kb-card__quote-agent`,title:a(Me)(j(r))},[l(Ge,{executor:j(r),class:`kb-card__quote-agent-icon`},null,8,[`executor`])],8,co)):R(``,!0),i(`span`,lo,e(r.lastReply),1)],8,so)):R(``,!0),re(r)&&r.runningJobs===0?(T(),t(`button`,{key:5,type:`button`,class:`kb-card__retry`,title:a(X)(`@WORKBENCH:重新执行这条任务`),onClick:q(e=>c(`run-task`,r),[`stop`]),onKeydown:o[4]||=q(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:重试`)),41,uo)):R(``,!0),i(`div`,fo,[r.runningJobs===0?(T(),t(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:a(X)(`@WORKBENCH:执行`),onClick:q(e=>c(`run-task`,r),[`stop`]),onKeydown:o[5]||=q(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:执行`)),41,po)):(T(),t(`button`,{key:1,type:`button`,class:`kb-card__btn kb-card__btn--stop`,title:a(X)(`@WORKBENCH:停止`),"aria-label":a(X)(`@WORKBENCH:停止`),onClick:q(e=>c(`stop-task`,r),[`stop`]),onKeydown:o[6]||=q(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:停止`)),41,mo)),r.column===`done`?r.manualDoneAt?(T(),t(`button`,{key:3,type:`button`,class:`kb-card__btn`,title:a(X)(`@WORKBENCH:撤销完成标记,退回待处理`),"aria-label":a(X)(`@WORKBENCH:撤销完成标记`),onClick:q(e=>c(`reopen-task`,r),[`stop`]),onKeydown:o[8]||=q(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:撤销`)),41,go)):R(``,!0):(T(),t(`button`,{key:2,type:`button`,class:`kb-card__btn kb-card__btn--done`,title:a(X)(`@WORKBENCH:标记为已完成`),"aria-label":a(X)(`@WORKBENCH:标记为已完成`),onClick:q(e=>c(`complete-task`,r),[`stop`]),onKeydown:o[7]||=q(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:完成`)),41,ho)),i(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:a(X)(`@WORKBENCH:删除`),"aria-label":a(X)(`@WORKBENCH:删除`),onClick:q(e=>c(`delete-task`,r),[`stop`]),onKeydown:o[9]||=q(()=>{},[`stop`])},`×`,40,_o)])],42,Ba))),128)),r.key===`todo`?(T(),t(`li`,vo,[i(`button`,{type:`button`,class:v([`kb-col__add-btn`,{"kb-col__add-btn--solo":r.tasks.length===0}]),onClick:o[10]||=e=>c(`create-task`)},[o[13]||=i(`span`,{class:`kb-col__add-plus`,"aria-hidden":`true`},`+`,-1),i(`span`,null,e(a(X)(`@WORKBENCH:新建任务`)),1)],2)])):r.tasks.length===0?(T(),t(`li`,yo,[i(`span`,null,e(a(X)(`@WORKBENCH:暂无任务`)),1)])):R(``,!0),r.hidden>0?(T(),t(`li`,bo,[i(`button`,{type:`button`,class:`kb-col__more-btn`,onClick:o[11]||=e=>h.value+=Wo},e(a(X)(`@WORKBENCH:显示更早的 {n} 条`,{n:Math.min(Wo,r.hidden)})),1)])):R(``,!0)])],10,Fa))),128))],6)):(T(),t(`div`,xo,[i(`table`,So,[i(`thead`,null,[i(`tr`,null,[i(`th`,Co,e(a(X)(`@WORKBENCH:任务`)),1),i(`th`,wo,e(a(X)(`@WORKBENCH:状态`)),1),i(`th`,To,e(a(X)(`@WORKBENCH:时间`)),1)])]),i(`tbody`,null,[(T(!0),t(O,null,I(k.value,r=>(T(),t(`tr`,{key:r.id,class:`kb-table__row`,tabindex:`0`,onClick:e=>c(`open-task`,r),onKeydown:[N(q(e=>c(`open-task`,r),[`prevent`]),[`enter`]),N(q(e=>c(`open-task`,r),[`prevent`]),[`space`])]},[i(`td`,Do,[M(r).length>0?(T(),t(`button`,{key:0,type:`button`,class:`kb-table__shots`,title:L(M(r)[0]),onClick:q(e=>F(r),[`stop`]),onKeydown:o[12]||=q(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:{n} 张图`,{n:M(r).length})),41,Oo)):R(``,!0),i(`span`,ko,e(A(r)||a(X)(`@WORKBENCH:未命名任务`)),1),n.showProjectLabel&&ne(r)?(T(),t(`span`,{key:1,class:`kb-table__project`,style:ae(a(Ea)(r.projectPath)),title:r.projectPath},e(ne(r)),13,Ao)):R(``,!0),r.live?(T(),t(`span`,jo,[j(r)?(T(),t(`span`,{key:0,class:`kb-table__agent`,title:a(Me)(j(r))},[l(Ge,{executor:j(r),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Mo)):R(``,!0),w(` `+e(oe(r))+` `,1),a(_t)(r.live.silentMs)===null?R(``,!0):(T(),t(`span`,No,e(a(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:a(Gn)(a(_t)(r.live.silentMs))})),1))])):r.lastReply?(T(),t(`span`,Po,[j(r)?(T(),t(`span`,{key:0,class:`kb-table__agent`,title:a(Me)(j(r))},[l(Ge,{executor:j(r),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Fo)):R(``,!0),w(e(r.lastReply),1)])):R(``,!0)]),i(`td`,Io,[i(`span`,{class:v([`kb-table__status`,`is-`+r.column])},e(a(X)(f.find(e=>e.key===r.column).labelKey)),3)]),i(`td`,Lo,[i(`span`,{class:`kb-table__time`,title:D(r)},[E(r)?(T(),t(O,{key:0},[i(`span`,zo,e(a(Zn)(r)),1),o[14]||=i(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):R(``,!0),r.autoCompleted?(T(),t(O,{key:1},[i(`span`,{class:`kb-table__auto-done`,title:te(r)},e(a(X)(`@WORKBENCH:AI 判定完成`)),9,Bo),o[15]||=i(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):R(``,!0),i(`span`,null,e(a(Wn)(S(r))),1)],8,Ro)])],40,Eo))),128)),k.value.length===0?(T(),t(`tr`,Vo,[i(`td`,Ho,e(a(X)(`@WORKBENCH:暂无任务`)),1)])):R(``,!0)])])])),P.value?(T(),C(m,{key:2,"url-list":P.value.urls,"initial-index":P.value.index,"hide-on-click-modal":!0,teleported:!0,onClose:fe},null,8,[`url-list`,`initial-index`])):R(``,!0)])}}}),[[`__scopeId`,`data-v-efc67236`]]);A(),B(),u();var Ko=[`title`,`aria-label`],qo={class:`tep__btn-name`},Jo={class:`tep__item`},Yo={class:`tep__item-name`},Xo=[`title`],Zo={key:2,class:`tep__item-missing`},Qo=Z(b({__name:`TaskExecutorPicker`,props:{title:{}},setup(r){let o=r,{active:s,availability:c,choose:u,executorModelText:d,executorModelTitle:f}=gr(),p=$();ie(()=>{p.fetchExecutorModels()});function m(){return[o.title,f(s.value)].filter(Boolean).join(` · `)}return(r,o)=>{let p=g,h=n,_=ve,v=D;return T(),C(v,{trigger:`click`,class:`tep`,onCommand:a(u)},{dropdown:z(()=>[l(_,null,{default:z(()=>[(T(!0),t(O,null,I(a(Ne),n=>(T(),C(h,{key:n.id,command:n.id,disabled:!a(c)[n.id]},{default:z(()=>[i(`span`,Jo,[l(Ge,{executor:n.id,class:`tep__item-icon`},null,8,[`executor`]),i(`span`,Yo,e(n.name),1),a(d)(n.id)?(T(),t(`span`,{key:0,class:`tep__item-model`,title:a(f)(n.id)},e(a(d)(n.id)),9,Xo)):R(``,!0),a(s)===n.id?(T(),C(p,{key:1,class:`tep__item-check`},{default:z(()=>[l(a(ge))]),_:1})):a(c)[n.id]?R(``,!0):(T(),t(`span`,Zo,e(a(X)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:z(()=>[i(`button`,{type:`button`,class:`tep__btn`,title:m(),"aria-label":a(X)(`@WORKBENCH:任务执行器`)},[l(Ge,{executor:a(s),class:`tep__btn-icon`},null,8,[`executor`]),i(`span`,qo,e(a(Me)(a(s))),1),l(p,{class:`tep__btn-caret`},{default:z(()=>[l(a(j))]),_:1})],8,Ko)]),_:1},8,[`onCommand`])}}}),[[`__scopeId`,`data-v-beca42f2`]]);A(),B(),u(),F();var $o={class:`acs__head`},es=[`title`,`aria-label`],ts={class:`acs__title`},ns=[`title`,`aria-label`],rs={class:`acs__convs`},is={class:`acs__chat`},as=[`data-theme`],os={key:0,class:`acs__foot`},ss={key:0,class:`acs__notice`},cs={class:`acs__foot-label`},ls={class:`acs__foot-hint`},us=Z(b({__name:`AgentChatSurface`,props:{title:{},active:{type:Boolean},allowDispatch:{type:Boolean},dispatchUseDefaultPrompt:{type:Boolean},placeholder:{}},setup(n){let r=n,{active:s}=gr(),c=Pe(),{theme:u}=ze(),d=o(()=>u.value===`dark`?`dark`:`light`),{sessions:p,sessionsLoading:m,currentSessionId:h,messages:g,displayMessages:_,isStreaming:y,questionPanel:b,answeringQuestion:x,isSessionGenerating:ee,currentEngine:w,pendingEngine:E,isEngineLocked:D,pickEngine:te,loadSessions:k,loadSession:A,deleteSession:ne,renameSession:re,newSession:ae,sendMessage:j,retryTurn:oe,answerQuestion:se,stop:ce,inputContextUsage:le,queuedMessages:M,queuePaused:ue,removeQueuedMessage:de,flushQueued:N}=at(),P=o(()=>D.value?w.value:E.value);function F(e){D.value||te(e)}let fe=o(()=>r.allowDispatch!==!1&&P.value!==`gai`),I=o(()=>Ye(p.value,ee)),z=Je(),pe=tt(),me=rt(),B=o(()=>I.value.find(e=>e.id===h.value)?.title||``),V=J(null),{width:he,narrow:H}=st(V),U=J(`chat`),ge=J(null);function _e(e=!0){ge.value?.scrollToBottom?.(e)}async function K(e){let t=c.aiRequestBudget?.maxUserChars||0;t>0&&e.text.length>t&&L.warning(X(`@WORKBENCH:消息较长({n} 字符),超出部分会被省略后进入上下文 —— 大材料建议存成文件,在消息里给出文件路径`,{n:e.text.length.toLocaleString()})),await j(e.text,e.files,{allowDispatch:r.allowDispatch===!0,dispatchExecutor:s.value,dispatchUseDefaultPrompt:r.dispatchUseDefaultPrompt!==!1}),await f(),_e()}function ve(e){A(e),U.value=`chat`}function ye(){ae(),U.value=`chat`}return W(()=>g.value.length,()=>{f(()=>_e(!1))}),W(()=>r.active,e=>{e&&(k().catch(()=>{}),f(()=>_e(!1)))}),W(H,e=>{e||(U.value=`chat`)}),ie(()=>{k().catch(()=>{}),f(()=>_e(!1))}),(r,o)=>(T(),t(`div`,{ref_key:`rootRef`,ref:V,class:`acs`},[i(`div`,$o,[a(H)&&U.value===`list`?(T(),t(`button`,{key:0,type:`button`,class:`acs__icon-btn`,title:a(X)(`@EDITOR:返回对话`),"aria-label":a(X)(`@EDITOR:返回对话`),onClick:o[0]||=e=>U.value=`chat`},[...o[2]||=[i(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[i(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),i(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,es)):R(``,!0),i(`span`,ts,e(n.title||a(X)(`@WORKBENCH:g ai 对话`)),1),o[4]||=i(`span`,{class:`acs__spacer`},null,-1),!a(H)||U.value===`chat`?(T(),C(ft,{key:1,class:`acs__engine`,engine:P.value,locked:a(D),onSelect:F},null,8,[`engine`,`locked`])):R(``,!0),!a(H)||U.value===`chat`?(T(),C(pt,{key:2,class:`acs__copy`,messages:a(g),title:B.value,engine:a($e)(P.value)},null,8,[`messages`,`title`,`engine`])):R(``,!0),a(H)&&U.value===`chat`?(T(),t(`button`,{key:3,type:`button`,class:`acs__icon-btn`,title:a(X)(`@EDITOR:会话列表`),"aria-label":a(X)(`@EDITOR:会话列表`),onClick:o[1]||=e=>U.value=`list`},[...o[3]||=[S(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-3888130b><line x1="8" y1="6" x2="21" y2="6" data-v-3888130b></line><line x1="8" y1="12" x2="21" y2="12" data-v-3888130b></line><line x1="8" y1="18" x2="21" y2="18" data-v-3888130b></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-3888130b></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-3888130b></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-3888130b></line></svg>`,1)]],8,ns)):R(``,!0)]),i(`div`,{class:v([`acs__body`,{"is-wide":!a(H)}])},[G(i(`div`,rs,[l(a(ke),{"show-search":!0,items:I.value,"active-id":a(h),loading:a(m),labels:a(z),onSelect:ve,onNew:ye,onRename:a(re),onDelete:a(ne)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[xe,!a(H)||U.value===`list`]]),G(i(`div`,is,[l(a(Ee),{ref_key:`chatRef`,ref:ge,"show-input":!1,messages:a(_),"assistant-name":a(et),"assistant-avatar":a(it),theme:d.value,question:a(b),"question-submitting":a(x),"question-labels":a(pe),"plan-config":{labels:{title:a(X)(`@AGENT:计划`),raw:a(X)(`@AGENT:原始参数`)}},"message-rail-config":a(Ze),"message-meta-config":a(nt),onAnswer:a(se),onRetry:a(oe)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`message-rail-config`,`message-meta-config`,`onAnswer`,`onRetry`])],512),[[xe,!a(H)||U.value===`chat`]]),a(he)>0?(T(),t(`div`,{key:0,class:`acs__composer acu-root`,"data-theme":d.value},[l(a(Oe),{generating:a(y),"allow-queue":!0,queued:a(M),"queue-paused":a(ue),"queue-labels":a(me),placeholder:n.placeholder||(a(y)?a(X)(`@AGENT:生成中,发送后会排队,等本轮跑完自动接上…`):a(X)(`@AGENT:输入消息,Enter 发送`)),"upload-config":{accept:a(Qe)},"context-usage":a(le),onSend:K,onStop:a(ce),onUnqueue:a(de),onFlushQueued:a(N)},null,8,[`generating`,`queued`,`queue-paused`,`queue-labels`,`placeholder`,`upload-config`,`context-usage`,`onStop`,`onUnqueue`,`onFlushQueued`])],8,as)):R(``,!0)],2),n.allowDispatch&&U.value===`chat`?(T(),t(`div`,os,[fe.value?(T(),t(`p`,ss,e(a(X)(`@WORKBENCH:当前引擎「{name}」只能对话,不能派发任务 —— 切到内置 g ai 才能派活`,{name:a($e)(P.value)})),1)):(T(),t(O,{key:1},[i(`span`,cs,e(a(X)(`@WORKBENCH:派发执行器`)),1),l(Qo,{title:a(X)(`@WORKBENCH:它派出去的任务由这个执行器跑(与执行按钮的临时切换共用)`)},null,8,[`title`]),i(`span`,ls,e(a(X)(`@WORKBENCH:任务会落到看板,跑完有完成提示`)),1)],64))])):R(``,!0)],512))}}),[[`__scopeId`,`data-v-3888130b`]]);A(),B(),u(),F();var ds=[`title`,`aria-label`],fs={class:`oc__rail-text`},ps={class:`oc__head`},ms={class:`oc__title`},hs=[`disabled`,`title`],gs=[`title`,`aria-label`],_s={class:`oc__state-label`},vs={class:`oc__state-value`},ys={class:`oc__state-meta`},bs=[`aria-label`],xs=[`aria-selected`],Ss=[`aria-selected`],Cs={class:`oc__report-head`},ws={class:`oc__panel-title`},Ts=[`value`,`title`,`aria-label`],Es=[`value`],Ds=[`disabled`,`title`],Os={class:`oc__report-list`},ks={key:0,class:`rp`},As={class:`rp__head`},js=[`title`],Ms={class:`rp__count`},Ns={class:`rp__time`},Ps=[`title`],Fs=[`aria-valuenow`,`aria-label`],Is={class:`rp__percent`},Ls={class:`rp__percent-tag`},Rs={key:1,class:`rp__body`},zs=[`title`],Bs=[`aria-expanded`,`title`],Vs=[`title`],Hs={class:`oc__sect-meta`},Us={class:`oc__sect-brief`},Ws={class:`rp__tasks`},Gs={class:`rpt__title`},Ks={class:`rpt__meta`},qs={key:0,class:`rpt__project`},Js={key:1,class:`rpt__agent`},Ys=[`title`],Xs={key:3,class:`rpt__silent`},Zs=[`title`],Qs=[`aria-valuenow`,`aria-label`],$s={class:`rpt__percent`},ec=[`title`],tc={class:`rpt__tag`},nc=[`title`],rc={class:`rpt__tag`},ic=[`title`],ac={class:`rpt__tag`},oc=[`title`],sc=[`aria-expanded`,`title`],cc={class:`oc__sect-title`},lc={class:`oc__sect-meta`},uc={class:`oc__sect-brief`},dc={class:`oc__history-list`},fc=[`onClick`],pc={class:`oc__history-time`},mc={class:`oc__history-pct`},hc={class:`oc__history-sum`},gc=[`aria-expanded`,`title`],_c={class:`oc__sect-title`},vc={class:`oc__sect-meta`},yc={class:`oc__git-name`},bc={key:0,class:`oc__sect-brief`},xc={class:`oc__git-list`},Sc={class:`oc__git-label`},Cc={class:`oc__git-label`},wc={class:`oc__git-value`},Tc={class:`oc__git-label`},Ec={class:`oc__git-value`},Dc=[`placeholder`],Oc={key:0},kc={key:1},Ac={class:`oc__compose-foot`},jc=[`disabled`,`title`,`aria-label`],Mc=[`title`,`aria-label`],Nc=[`title`],Pc=[`title`],Fc=[`disabled`],Ic={class:`oc__hint`},Lc=`wb.ocMode.v2`,Rc=`/api/workbench/orchestrator/attachments`,zc=`wb.ocInputHeight.v1`,Bc=76,Vc=20,Hc=Z(b({__name:`OrchestratorConsole`,props:{active:{type:Boolean},running:{},selectedProject:{},dispatching:{type:Boolean},togglingSchedule:{type:Boolean},todayDone:{},collapsed:{type:Boolean},defaultPrompt:{},projectPrompts:{},reports:{},reportIntervalMs:{},generatingReport:{type:Boolean},maxInstructionChars:{}},emits:[`toggle-schedule`,`toggle-collapse`,`open-prompt-settings`,`generate-report`,`set-report-interval`,`dispatch`],setup(n,{expose:r,emit:s}){let c=n,u=s,d=J(``),p=J(!0),h=J(!0),{active:b}=gr(),x=J((()=>{try{return localStorage.getItem(Lc)===`chat`?`chat`:`command`}catch{return`command`}})());function ee(e){x.value=e;try{localStorage.setItem(Lc,e)}catch{}}let S=J([]),D=o(()=>({kind:`draft`,list:S.value,replace:e=>{S.value=e}})),{isUploading:te,isImageAttachment:k,humanSize:A,onAttachmentPaste:re,onAttachmentDrop:se,removeAttachment:ce,pickAttachmentFile:M}=dr(),ue=o(()=>te(`draft`)),de=J(!1);function N(e){e.stopPropagation(),re(e,D.value)}function P(e){de.value=!1,se(e,D.value)}function F(){M(D.value)}function fe(e){ce(D.value,e)}function L(){S.value=[]}function pe(){d.value=``}r({clearAttachments:L,clearDraft:pe});let B=o(()=>c.selectedProject?.key||``),V=o(()=>(c.defaultPrompt||``).trim()),he=o(()=>{let e=B.value;return e?(c.projectPrompts?.[e]?.prompt||``).trim():``}),H=o(()=>Object.values(c.projectPrompts||{}).some(e=>(e?.prompt||``).trim().length>0)),ge=o(()=>!!V.value||H.value),_e=o(()=>{let e=!!V.value,t=B.value?he.value?`project`:`none`:H.value?`target`:`none`;return X(e&&t===`project`?`@WORKBENCH:全局 + 本项目`:e&&t===`target`?`@WORKBENCH:全局 + 落点项目`:e?`@WORKBENCH:全局`:t===`project`?`@WORKBENCH:本项目`:t===`target`?`@WORKBENCH:落点项目`:`@WORKBENCH:未设置`)}),ve=o(()=>d.value.trim().length),ye=o(()=>c.maxInstructionChars||1e5),be=o(()=>ve.value>ye.value),Se=o(()=>!be.value&&ve.value>=ye.value*.9),we=o(()=>d.value.trim().length>0&&!c.dispatching&&!ue.value&&!be.value);function Te(){we.value&&u(`dispatch`,{text:d.value.trim(),autoRun:p.value,attachments:S.value,projectPath:c.selectedProject?c.selectedProject.path:``,useDefaultPrompt:h.value,executor:b.value})}function Ee(e){e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||(e.preventDefault(),Te())}function Y(){try{let e=localStorage.getItem(zc);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=Bc?Math.round(t):null}catch{return null}}let De=J(null),Oe=J(Y()),ke=o(()=>{let e={};return Oe.value&&(e.height=`${Oe.value}px`),e}),Z=null,Ae=!1,je=!0;function Me(e){let t=De.value;if(!t)return;let n=t.getBoundingClientRect();Ae=n.right-e.clientX<=Vc&&n.bottom-e.clientY<=Vc}function Ne(){Ae=!1}function Pe(e){let t=Math.round(e.offsetHeight);if(!(t<Bc||t===Oe.value)){Oe.value=t;try{localStorage.setItem(zc,String(t))}catch{}}}ie(()=>{let e=De.value;e&&(window.addEventListener(`mouseup`,Ne),!(typeof ResizeObserver>`u`)&&(Z=new ResizeObserver(()=>{if(je){je=!1;return}let t=parseFloat(getComputedStyle(e).maxHeight),n=Number.isFinite(t)&&e.offsetHeight>=t-1;(Ae||!n)&&Pe(e)}),Z.observe(e)))}),_(()=>{window.removeEventListener(`mouseup`,Ne),Z?.disconnect(),Z=null});let Fe=J(null),Ie=o(()=>(c.running||[]).length),Le=o(()=>{let e=c.running||[];return{job:new Set(e.map(e=>e.jobId).filter(Boolean)),task:new Set(e.map(e=>e.taskId).filter(Boolean))}});function Re(e){if(!e)return!1;let t=Le.value;return(e.tasks||[]).some(e=>e.jobId&&t.job.has(e.jobId)||!e.jobId&&!!e.taskId&&t.task.has(e.taskId))}let Q=o(()=>(c.reports||[]).find(Re)||null),$=o(()=>{let e=c.reports||[];if(!e.length)return null;if(Fe.value){let t=e.find(e=>e.id===Fe.value);if(t)return t}return Q.value}),ze=o(()=>!!$.value&&!Re($.value)),Be=o(()=>(c.reports||[]).length?Ie.value>0?X(`@WORKBENCH:这批任务还没有进度报告`):X(`@WORKBENCH:当前没有正在执行的任务`):X(`@WORKBENCH:暂无进度报告`)),Ve=o(()=>(c.reports||[]).length?X(`@WORKBENCH:最新那份报告讲的任务已经跑完了,要回看可以从历史报告里点开`):``);function He(e){Fe.value=e.id}let Ue=J(null),We=J(!1),Ge=J(!1);function Ke(){let e=Ue.value;e&&!We.value&&(Ge.value=e.scrollHeight-e.clientHeight>2)}function qe(){We.value=!We.value,We.value||f(Ke)}let Je=null;W(Ue,e=>{Je?.disconnect(),Je=null,e&&(Je=new ResizeObserver(()=>Ke()),Je.observe(e))}),_(()=>{Je?.disconnect(),Je=null}),W(()=>$.value?.id,()=>{We.value=!1,Ge.value=!1,f(Ke)});function Ye(e){let t=ht(e.percent);return t===null?``:t+`%`}let Xe=o(()=>ht($.value?.percent)),Ze=o(()=>($.value?.tasks||[]).map(e=>({...e,pct:ht(e.percent),silent:_t(e.silentMs)})));function Qe(e){let t=String(e.text||``).replace(/\s+/g,` `).trim();return t?t.length>42?t.slice(0,42)+`…`:t:e.errorCode?X(mt(e.errorCode)):X(`@WORKBENCH:当时没有任务在执行`)}function $e(e){return e.errorCode?X(mt(e.errorCode)):e.tasks.length?X(`@WORKBENCH:模型没有返回内容`):X(`@WORKBENCH:生成这份报告时没有任务在执行`)}function et(e){let t=e.target,n=Number(t.value);vt.includes(n)&&u(`set-report-interval`,n)}let tt=o(()=>{let e=c.selectedProject;if(!e)return[];let t=[];if(e.exists===!1)return t.push({label:X(`@WORKBENCH:工作区`),value:X(`@WORKBENCH:目录不存在`),tone:`danger`}),t;let n=e.git;return!n||n.isGitRepo===null?(t.push({label:X(`@WORKBENCH:Git 状态`),value:X(`@WORKBENCH:未知`),tone:``}),t):n.isGitRepo?(t.push({label:X(`@WORKBENCH:分支`),value:n.detached?X(`@WORKBENCH:游离 HEAD`):n.branch||X(`@WORKBENCH:未知`),tone:``}),t.push({label:X(`@WORKBENCH:工作区`),value:n.changed>0?X(`@WORKBENCH:未提交 {n} 项`,{n:n.changed}):X(`@WORKBENCH:干净`),tone:n.changed>0?`warn`:``}),n.hasUpstream&&(n.ahead>0||n.behind>0)&&t.push({label:X(`@WORKBENCH:与上游`),value:X(`@WORKBENCH:领先 {ahead} / 落后 {behind}`,{ahead:n.ahead,behind:n.behind}),tone:n.behind>0?`warn`:``}),t):(t.push({label:X(`@WORKBENCH:Git 状态`),value:X(`@WORKBENCH:不是 Git 仓库`),tone:``}),t)}),nt={history:`wb.ocHistoryOpen.v1`,git:`wb.ocGitOpen.v1`,facts:`wb.ocFactsOpen.v1`};function rt(e){try{return localStorage.getItem(e)===`1`}catch{return!1}}let it=J(rt(nt.history)),at=J(rt(nt.git)),ot=J(rt(nt.facts));function st(e){let t=e===`history`?it:e===`git`?at:ot;t.value=!t.value;try{localStorage.setItem(nt[e],t.value?`1`:`0`)}catch{}}let ct=o(()=>tt.value.slice(0,2).map(e=>e.value).join(` · `));return(r,o)=>{let s=g;return T(),t(`aside`,{class:v([`oc`,{"is-collapsed":n.collapsed,"is-report-empty":x.value===`command`&&!n.collapsed&&!$.value}])},[n.collapsed?(T(),t(`button`,{key:0,type:`button`,class:`oc__rail`,title:a(X)(`@WORKBENCH:展开主 Agent 控制台`),"aria-label":a(X)(`@WORKBENCH:展开主 Agent 控制台`),"aria-expanded":!1,onClick:o[0]||=e=>u(`toggle-collapse`)},[l(s,{class:`oc__rail-icon`},{default:z(()=>[l(a(Ce))]),_:1}),i(`span`,{class:v([`oc__rail-live`,{"is-off":!n.active}]),"aria-hidden":`true`},null,2),i(`span`,fs,e(a(X)(`@WORKBENCH:主 Agent 控制台`)),1)],8,ds)):R(``,!0),G(i(`header`,ps,[i(`span`,{class:v([`oc__live`,{"is-off":!n.active}]),"aria-hidden":`true`},null,2),i(`h3`,ms,e(a(X)(`@WORKBENCH:主 Agent 控制台`)),1),i(`button`,{type:`button`,class:v([`oc__toggle`,{"is-off":!n.active}]),disabled:n.togglingSchedule,title:n.active?a(X)(`@WORKBENCH:暂停后派发只建任务,不会自动执行`):a(X)(`@WORKBENCH:恢复后派发会自动执行`),onClick:o[1]||=e=>u(`toggle-schedule`,!n.active)},e(n.active?a(X)(`@WORKBENCH:暂停调度`):a(X)(`@WORKBENCH:恢复调度`)),11,hs),i(`button`,{type:`button`,class:`oc__collapse`,title:a(X)(`@WORKBENCH:收起主 Agent 控制台`),"aria-label":a(X)(`@WORKBENCH:收起主 Agent 控制台`),"aria-expanded":!0,onClick:o[2]||=e=>u(`toggle-collapse`)},[l(s,null,{default:z(()=>[l(a(le))]),_:1})],8,gs)],512),[[xe,!n.collapsed]]),G(i(`div`,{class:v([`oc__state`,{"is-paused":!n.active}])},[i(`span`,_s,e(a(X)(`@WORKBENCH:调度状态`)),1),i(`span`,vs,e(n.active?a(X)(`@WORKBENCH:调度中`):a(X)(`@WORKBENCH:已暂停`)),1),i(`span`,ys,e(a(X)(`@WORKBENCH:{n} 个执行中`,{n:Ie.value})),1)],2),[[xe,!n.collapsed]]),G(i(`div`,{class:`oc__mode`,role:`tablist`,"aria-label":a(X)(`@WORKBENCH:切换主 Agent 控制台的工作方式`)},[i(`button`,{type:`button`,role:`tab`,class:v([`oc__mode-btn`,{"is-active":x.value===`chat`}]),"aria-selected":x.value===`chat`,onClick:o[3]||=e=>ee(`chat`)},e(a(X)(`@WORKBENCH:对话`)),11,xs),i(`button`,{type:`button`,role:`tab`,class:v([`oc__mode-btn`,{"is-active":x.value===`command`}]),"aria-selected":x.value===`command`,onClick:o[4]||=e=>ee(`command`)},e(a(X)(`@WORKBENCH:指令`)),11,Ss)],8,bs),[[xe,!n.collapsed]]),G(l(us,{class:`oc__chat`,active:!n.collapsed&&x.value===`chat`,"allow-dispatch":``,"dispatch-use-default-prompt":h.value,title:a(X)(`@WORKBENCH:g ai 对话`)},null,8,[`active`,`dispatch-use-default-prompt`,`title`]),[[xe,!n.collapsed&&x.value===`chat`]]),G(i(`div`,{class:v([`oc__report`,{"is-empty":!$.value}])},[i(`div`,Cs,[i(`p`,ws,e(a(X)(`@WORKBENCH:进度报告`)),1),i(`select`,{class:`oc__interval`,value:String(n.reportIntervalMs??0),title:a(X)(`@WORKBENCH:自动报告的间隔(关掉后仍可随时点「立即报告」)`),"aria-label":a(X)(`@WORKBENCH:自动报告间隔`),onChange:et},[(T(!0),t(O,null,I(a(vt),n=>(T(),t(`option`,{key:n,value:String(n)},e(a(X)(a(yt)(n),a(xt)(n))),9,Es))),128))],40,Ts),i(`button`,{type:`button`,class:`oc__report-run`,disabled:n.generatingReport,title:a(X)(`@WORKBENCH:让主 Agent 现在汇报一次正在执行的任务进度`),onClick:o[5]||=e=>u(`generate-report`)},[l(s,{class:v([`oc__report-run-icon`,{"is-spin":n.generatingReport}])},{default:z(()=>[l(a(m))]),_:1},8,[`class`]),i(`span`,null,e(n.generatingReport?a(X)(`@WORKBENCH:生成中…`):a(X)(`@WORKBENCH:立即报告`)),1)],8,Ds)]),i(`ul`,Os,[$.value?(T(),t(`li`,ks,[i(`div`,As,[i(`span`,{class:v([`rp__trigger`,{"is-auto":$.value.trigger===`auto`}])},e($.value.trigger===`auto`?a(X)(`@WORKBENCH:自动`):a(X)(`@WORKBENCH:手动`)),3),ze.value?(T(),t(`span`,{key:0,class:`rp__stale`,title:a(X)(`@WORKBENCH:这份报告讲的任务已经跑完了,内容只反映生成那一刻的情况`)},e(a(X)(`@WORKBENCH:已结束`)),9,js)):R(``,!0),i(`span`,Ms,e(a(X)(`@WORKBENCH:{n} 个任务进行中`,{n:$.value.tasks.length})),1),i(`span`,Ns,e(a(qn)($.value.at)),1)]),Xe.value===null?R(``,!0):(T(),t(`div`,{key:0,class:`rp__progress`,title:a(X)(a(bt))},[i(`span`,{class:`rp__bar`,role:`progressbar`,"aria-valuenow":Xe.value,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":a(X)(a(gt))},[i(`i`,{class:`rp__bar-fill`,style:ae({width:Xe.value+`%`})},null,4)],8,Fs),i(`span`,Is,[i(`span`,Ls,e(a(X)(a(gt))),1),w(e(Xe.value)+`% `,1)])],8,Ps)),$.value.text?(T(),t(`div`,Rs,[i(`p`,{ref_key:`textEl`,ref:Ue,class:v([`rp__text`,{"is-clamped":Ge.value&&!We.value,"is-expanded":We.value}])},e($.value.text),3),Ge.value||We.value?(T(),t(`button`,{key:0,type:`button`,class:`rp__more`,onClick:qe},e(We.value?a(X)(`@WORKBENCH:收起`):a(X)(`@WORKBENCH:展开全文`)),1)):R(``,!0)])):(T(),t(`p`,{key:2,class:`rp__notice`,title:$.value.errorDetail},e($e($.value)),9,zs)),Ze.value.length?(T(),t(`div`,{key:3,class:v([`rp__facts`,{"is-collapsed":!ot.value}])},[i(`button`,{type:`button`,class:`oc__sect rp__facts-toggle`,"aria-expanded":ot.value,title:ot.value?a(X)(`@WORKBENCH:收起`):a(X)(`@WORKBENCH:展开`),onClick:o[6]||=e=>st(`facts`)},[l(s,{class:`oc__sect-caret`},{default:z(()=>[(T(),C(U(ot.value?a(j):a(oe))))]),_:1}),i(`span`,{class:`oc__sect-title`,title:a(X)(`@WORKBENCH:上面是主 Agent 的判断,下面这些是从正在跑的任务里抄出来的事实`)},e(a(X)(`@WORKBENCH:任务事实`)),9,Vs),i(`span`,Hs,[i(`span`,Us,e(a(X)(`@WORKBENCH:{n} 个任务`,{n:Ze.value.length})),1)])],8,Bs),G(i(`ul`,Ws,[(T(!0),t(O,null,I(Ze.value,(n,r)=>(T(),t(`li`,{key:n.taskId||r,class:v([`rpt`,{"is-silent":n.silent!==null}])},[i(`p`,Gs,e(n.taskTitle||a(X)(`@WORKBENCH:未命名任务`)),1),i(`p`,Ks,[n.projectName?(T(),t(`span`,qs,e(n.projectName),1)):R(``,!0),i(`span`,null,e(a(X)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:a(Gn)(n.elapsedMs)})),1),n.agent?(T(),t(`span`,Js,e(n.agent),1)):R(``,!0),n.toolCallCount?(T(),t(`span`,{key:2,title:n.toolMix||``},e(a(X)(`@WORKBENCH:工具 {n} 次`,{n:n.toolCallCount})),9,Ys)):R(``,!0),n.silent===null?R(``,!0):(T(),t(`span`,Xs,e(a(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:a(Gn)(n.silent)})),1))]),n.pct===null?R(``,!0):(T(),t(`p`,{key:0,class:`rpt__progress`,title:a(X)(a(bt))},[i(`span`,{class:`rpt__bar`,role:`progressbar`,"aria-valuenow":n.pct,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":n.taskTitle||a(X)(`@WORKBENCH:未命名任务`)},[i(`i`,{class:`rpt__bar-fill`,style:ae({width:n.pct+`%`})},null,4)],8,Qs),i(`span`,$s,e(n.pct)+`%`,1)],8,Zs)),n.lastTool?(T(),t(`p`,{key:1,class:`rpt__line is-tool`,title:n.lastTool},[i(`span`,tc,e(a(X)(`@WORKBENCH:工具`)),1),w(e(n.lastTool),1)],8,ec)):R(``,!0),n.lastThought?(T(),t(`p`,{key:2,class:`rpt__line is-thought`,title:n.lastThought},[i(`span`,rc,e(a(X)(`@WORKBENCH:最近思考`)),1),w(e(n.lastThought),1)],8,nc)):R(``,!0),n.lastLine?(T(),t(`p`,{key:3,class:`rpt__line`,title:n.lastLine},[i(`span`,ac,e(a(X)(`@WORKBENCH:最新回复`)),1),w(e(n.lastLine),1)],8,ic)):R(``,!0)],2))),128))],512),[[xe,ot.value]])],2)):R(``,!0)])):(T(),t(`li`,{key:1,class:`oc-empty`,title:Ve.value},e(Be.value),9,oc))]),(n.reports||[]).length>1?(T(),t(`div`,{key:0,class:v([`oc__history`,{"is-collapsed":!it.value}])},[i(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":it.value,title:it.value?a(X)(`@WORKBENCH:收起`):a(X)(`@WORKBENCH:展开`),onClick:o[7]||=e=>st(`history`)},[l(s,{class:`oc__sect-caret`},{default:z(()=>[(T(),C(U(it.value?a(j):a(oe))))]),_:1}),i(`span`,cc,e(a(X)(`@WORKBENCH:历史报告`)),1),i(`span`,lc,[i(`span`,uc,e(a(X)(`@WORKBENCH:共 {n} 份`,{n:(n.reports||[]).length})),1)])],8,sc),G(i(`ul`,dc,[(T(!0),t(O,null,I(n.reports,n=>(T(),t(`li`,{key:n.id},[i(`button`,{type:`button`,class:v([`oc__history-item`,{"is-active":n.id===$.value?.id}]),onClick:e=>He(n)},[i(`span`,pc,e(a(qn)(n.at)),1),i(`span`,mc,e(Ye(n)),1),i(`span`,hc,e(Qe(n)),1)],10,fc)]))),128))],512),[[xe,it.value]])],2)):R(``,!0)],2),[[xe,!n.collapsed&&x.value===`command`]]),G(i(`div`,{class:v([`oc__git`,{"is-collapsed":!at.value}])},[i(`button`,{type:`button`,class:`oc__sect`,"aria-expanded":at.value,title:at.value?a(X)(`@WORKBENCH:收起`):a(X)(`@WORKBENCH:展开`),onClick:o[8]||=e=>st(`git`)},[l(s,{class:`oc__sect-caret`},{default:z(()=>[(T(),C(U(at.value?a(j):a(oe))))]),_:1}),i(`span`,_c,e(a(X)(`@WORKBENCH:项目概览`)),1),i(`span`,vc,[i(`span`,yc,e(n.selectedProject?n.selectedProject.name:a(X)(`@WORKBENCH:全部项目`)),1),!at.value&&ct.value?(T(),t(`span`,bc,e(ct.value),1)):R(``,!0)])],8,gc),G(i(`dl`,xc,[(T(!0),t(O,null,I(tt.value,n=>(T(),t(O,{key:n.label},[i(`dt`,Sc,e(n.label),1),i(`dd`,{class:v([`oc__git-value`,{"is-warn":n.tone===`warn`,"is-danger":n.tone===`danger`}])},e(n.value),3)],64))),128)),i(`dt`,Cc,e(a(X)(`@WORKBENCH:今日完成`)),1),i(`dd`,wc,e(n.todayDone),1),i(`dt`,Tc,e(a(X)(`@WORKBENCH:最后活跃`)),1),i(`dd`,Ec,e(n.selectedProject&&a(Wn)(n.selectedProject.stats.lastActiveAt)||`—`),1)],512),[[xe,at.value]])],2),[[xe,!n.collapsed&&x.value===`command`]]),G(i(`div`,{class:`oc__compose`,onPaste:N,onDrop:q(P,[`prevent`]),onDragover:o[16]||=q(e=>de.value=!0,[`prevent`]),onDragleave:o[17]||=e=>de.value=!1},[G(i(`textarea`,{ref_key:`inputRef`,ref:De,class:v([`oc__input`,{"is-over":be.value}]),"onUpdate:modelValue":o[9]||=e=>d.value=e,style:ae(ke.value),rows:`4`,placeholder:a(X)(`@WORKBENCH:给主 Agent 下一条指令,例如:把登录模块的错误处理重构一遍`),onKeydown:Ee,onPaste:N,onMousedown:Me},null,46,Dc),[[K,d.value]]),S.value.length>0||ue.value?(T(),C(Ft,{key:0,attachments:S.value,"is-image":a(k),"human-size":a(A),"is-uploading":ue.value,"is-paste-hover":de.value,"on-pick":F,"on-remove":fe,"raw-base":Rc,onPaste:N,onDrop:P,onDragover:o[10]||=q(e=>de.value=!0,[`prevent`]),onDragenter:o[11]||=q(e=>de.value=!0,[`prevent`]),onDragleave:o[12]||=e=>de.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`])):R(``,!0),ve.value>0?(T(),t(`p`,{key:1,class:v([`oc__count`,{"is-warn":Se.value,"is-over":be.value}])},[be.value?(T(),t(`span`,Oc,e(a(X)(`@WORKBENCH:超出上限 {max} 字,请精简后再派发(超出的部分不会被发出)`,{max:ye.value})),1)):(T(),t(`span`,kc,e(ve.value)+` / `+e(ye.value),1))],2)):R(``,!0),i(`div`,Ac,[i(`button`,{type:`button`,class:`oc__attach`,disabled:ue.value,title:a(X)(`@WORKBENCH:添加附件(也可直接粘贴或拖入文件)`),"aria-label":a(X)(`@WORKBENCH:添加附件`),onClick:F},[l(s,null,{default:z(()=>[l(a(E))]),_:1})],8,jc),i(`button`,{type:`button`,class:v([`oc__attach`,{"is-on":ge.value}]),title:a(X)(`@WORKBENCH:设置派发时自动附加的预设提示词(全局 / 各项目)`),"aria-label":a(X)(`@WORKBENCH:预设提示词设置`),onClick:o[13]||=e=>u(`open-prompt-settings`)},[l(s,null,{default:z(()=>[l(a(y))]),_:1})],10,Mc),i(`label`,{class:`oc__autorn`,title:a(X)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[G(i(`input`,{type:`checkbox`,"onUpdate:modelValue":o[14]||=e=>p.value=e},null,512),[[me,p.value]]),i(`span`,null,e(a(X)(`@WORKBENCH:立即执行`)),1)],8,Nc),ge.value?(T(),t(`label`,{key:0,class:`oc__autorn`,title:a(X)(`@WORKBENCH:取消勾选则本次派发的任务不带预设提示词(设置本身不受影响)`)},[G(i(`input`,{type:`checkbox`,"onUpdate:modelValue":o[15]||=e=>h.value=e},null,512),[[me,h.value]]),i(`span`,null,e(a(X)(`@WORKBENCH:预设提示词({state})`,{state:_e.value})),1)],8,Pc)):R(``,!0),l(Qo,{title:a(X)(`@WORKBENCH:本次派发使用的执行器(与执行按钮的临时切换共用)`)},null,8,[`title`]),i(`button`,{type:`button`,class:`oc__send`,disabled:!we.value,onClick:Te},[l(s,{class:`oc__send-icon`},{default:z(()=>[l(a(ne))]),_:1}),i(`span`,null,e(n.dispatching?a(X)(`@WORKBENCH:派发中…`):a(X)(`@WORKBENCH:派发`)),1)],8,Fc)]),i(`p`,Ic,[n.selectedProject?(T(),t(O,{key:0},[w(e(a(X)(`@WORKBENCH:指令会在「{name}」下新建一个任务;Enter 派发,Shift+Enter 换行`,{name:n.selectedProject.name})),1)],64)):(T(),t(O,{key:1},[w(e(a(X)(`@WORKBENCH:指令落到哪个项目由主 Agent 判断;Enter 派发,Shift+Enter 换行`)),1)],64))])],544),[[xe,!n.collapsed&&x.value===`command`]])],2)}}}),[[`__scopeId`,`data-v-f60d86d3`]]);A(),B(),u(),F();var Uc={class:`pd`},Wc={class:`pd__intro`},Gc={class:`pd__field`},Kc={class:`pd__head`},qc={class:`pd__label`,for:`pd-global`},Jc={class:`pd__count`},Yc=[`placeholder`],Xc={class:`pd__field`},Zc={class:`pd__head`},Qc={class:`pd__label`,for:`pd-project`},$c={key:0,class:`pd__count`},el=[`disabled`,`placeholder`],tl={class:`pd__hint`},nl={class:`pd__foot`},rl=[`disabled`],il=4e3,al=Z(b({__name:`WorkbenchDefaultPromptDialog`,props:{modelValue:{type:Boolean},defaultPrompt:{},projectPath:{},projectName:{},projectPrompt:{},saving:{type:Boolean}},emits:[`update:modelValue`,`save`],setup(n,{emit:r}){let s=n,c=r,l=J(``),u=J(``);W(()=>s.modelValue,e=>{e&&(l.value=s.defaultPrompt||``,u.value=s.projectPrompt||``)});let d=o(()=>!!s.projectPath),f=o(()=>l.value.trim()!==(s.defaultPrompt||``).trim()||d.value&&u.value.trim()!==(s.projectPrompt||``).trim());function p(){s.saving||c(`save`,{globalPrompt:l.value,projectPrompt:u.value})}function m(){c(`update:modelValue`,!1)}return(r,o)=>(T(),C(Fe,{"model-value":n.modelValue,title:a(X)(`@WORKBENCH:预设提示词`),width:`min(640px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":o[2]||=e=>c(`update:modelValue`,e)},{footer:z(()=>[i(`div`,nl,[i(`button`,{type:`button`,class:`pd__btn`,onClick:m},e(a(X)(`@WORKBENCH:取消`)),1),o[3]||=i(`span`,{class:`pd__foot-spacer`},null,-1),i(`button`,{type:`button`,class:`pd__btn pd__btn--primary`,disabled:n.saving||!f.value,onClick:p},e(n.saving?a(X)(`@WORKBENCH:保存中…`):a(X)(`@WORKBENCH:保存`)),9,rl)])]),default:z(()=>[i(`div`,Uc,[i(`p`,Wc,e(a(X)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),i(`div`,Gc,[i(`div`,Kc,[i(`label`,qc,e(a(X)(`@WORKBENCH:全局提示词`)),1),i(`span`,Jc,e(l.value.length)+` / `+e(il),1)]),G(i(`textarea`,{id:`pd-global`,"onUpdate:modelValue":o[0]||=e=>l.value=e,class:`pd__area`,rows:`5`,maxlength:il,placeholder:a(X)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,Yc),[[K,l.value]])]),i(`div`,Xc,[i(`div`,Zc,[i(`label`,Qc,e(d.value?a(X)(`@WORKBENCH:「{name}」的项目提示词`,{name:n.projectName}):a(X)(`@WORKBENCH:项目提示词`)),1),d.value?(T(),t(`span`,$c,e(u.value.length)+` / `+e(il),1)):R(``,!0)]),G(i(`textarea`,{id:`pd-project`,"onUpdate:modelValue":o[1]||=e=>u.value=e,class:`pd__area`,rows:`5`,maxlength:il,disabled:!d.value,placeholder:d.value?a(X)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):a(X)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,el),[[K,u.value]]),i(`p`,tl,e(d.value?a(X)(`@WORKBENCH:项目提示词追加在全局提示词之后(不覆盖全局),派发到「{name}」时一起带上`,{name:n.projectName}):a(X)(`@WORKBENCH:选中的是「全部项目」,落点由主 Agent 判断 —— 想给某个项目单设提示词,先选中它`)),1)])])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-5d14f0f1`]]);A(),B(),u(),F();var ol={class:`nc__field`},sl={class:`nc__label`,for:`nc-project`},cl={value:``},ll=[`value`],ul=[`title`],dl={class:`nc__field`},fl={class:`nc__label`,for:`nc-title`},pl=[`placeholder`],ml={class:`nc__field`},hl={class:`nc__label`,for:`nc-desc`},gl=[`placeholder`],_l={class:`nc__field`},vl={class:`nc__hint`},yl={key:0,class:`nc__error`},bl={class:`nc__foot`},xl=[`disabled`],Sl=[`disabled`],Cl=`/api/workbench/orchestrator/attachments`,wl=Z(b({__name:`WorkbenchTaskCreateDialog`,props:{modelValue:{type:Boolean},projects:{},defaultProjectPath:{}},emits:[`update:modelValue`,`created`],setup(n,{emit:r}){let s=n,c=r,u=J(``),d=J(``),f=J(``),p=J(!1),m=J(``),h=J([]),g=J(!1),_=!1,v=o(()=>({kind:`draft`,list:h.value,replace:e=>{h.value=e}})),{isUploading:y,isImageAttachment:b,humanSize:x,onAttachmentPaste:ee,onAttachmentDrop:S,removeAttachment:w,pickAttachmentFile:E}=dr(),D=o(()=>y(`draft`));function te(e){e.stopPropagation(),ee(e,v.value)}function k(e){g.value=!1,S(e,v.value)}function A(){E(v.value)}function ne(e){w(v.value,e)}function re(){let e=h.value;if(h.value=[],!(_||e.length===0))for(let t of e)fetch(`${Cl}/${encodeURIComponent(t.id)}`,{method:`DELETE`}).catch(()=>{})}function ie(e){let t=Q(e);if(!t)return``;let n=s.projects.find(e=>Q(e.path)===t);return n?n.path:``}W(()=>s.modelValue,e=>{if(!e){re();return}u.value=``,d.value=``,h.value=[],g.value=!1,_=!1,f.value=ie(s.defaultProjectPath),m.value=``,p.value=!1});let ae=o(()=>s.projects),j=o(()=>!p.value&&!D.value&&(u.value.trim().length>0||d.value.trim().length>0)),oe=o(()=>{let e=Q(f.value);if(!e)return``;let t=ae.value.find(t=>Q(t.path)===e);return t?t.name:``});async function se(e){if(j.value){p.value=!0,m.value=``;try{let t={title:u.value.trim(),desc:d.value};f.value&&(t.projectPath=f.value),h.value.length>0&&(t.stagedAttachments=h.value.map(e=>({id:e.id,ext:e.ext,originalName:e.originalName})));let n=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}).then(e=>e.json()).catch(()=>null);if(!n?.success){m.value=n?.error||X(`@WORKBENCH:保存失败`);return}_=!0,c(`update:modelValue`,!1),c(`created`,{task:n.task,openEditor:e})}finally{p.value=!1}}}return(r,o)=>(T(),C(Fe,{"model-value":n.modelValue,title:a(X)(`@WORKBENCH:新建开发任务`),width:`min(600px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":o[15]||=e=>c(`update:modelValue`,e)},{footer:z(()=>[i(`div`,bl,[i(`button`,{type:`button`,class:`nc__btn`,onClick:o[12]||=e=>c(`update:modelValue`,!1)},e(a(X)(`@WORKBENCH:取消`)),1),o[16]||=i(`span`,{class:`nc__foot-spacer`},null,-1),i(`button`,{type:`button`,class:`nc__btn`,disabled:!j.value,onClick:o[13]||=e=>se(!0)},e(a(X)(`@WORKBENCH:创建并打开编辑器`)),9,xl),i(`button`,{type:`button`,class:`nc__btn nc__btn--primary`,disabled:!j.value,onClick:o[14]||=e=>se(!1)},e(p.value?a(X)(`@WORKBENCH:创建中…`):a(X)(`@WORKBENCH:创建`)),9,Sl)])]),default:z(()=>[i(`div`,{class:`nc`,onPaste:te,onDrop:q(k,[`prevent`]),onDragover:o[9]||=q(e=>g.value=!0,[`prevent`]),onDragenter:o[10]||=q(e=>g.value=!0,[`prevent`]),onDragleave:o[11]||=e=>g.value=!1},[i(`div`,ol,[i(`label`,sl,e(a(X)(`@WORKBENCH:项目`)),1),G(i(`select`,{id:`nc-project`,"onUpdate:modelValue":o[0]||=e=>f.value=e,class:`nc__select`},[i(`option`,cl,e(a(X)(`@WORKBENCH:跟随当前项目`)),1),(T(!0),t(O,null,I(ae.value,n=>(T(),t(`option`,{key:n.key,value:n.path},e(n.name)+e(n.exists===!1?` · ${a(X)(`@WORKBENCH:目录不存在`)}`:``),9,ll))),128))],512),[[ce,f.value]]),i(`p`,{class:`nc__hint`,title:f.value},e(oe.value?a(X)(`@WORKBENCH:任务会在「{name}」目录下执行`,{name:oe.value}):a(X)(`@WORKBENCH:任务会跟随应用当前的工作目录`)),9,ul)]),i(`div`,dl,[i(`label`,fl,e(a(X)(`@WORKBENCH:标题`)),1),G(i(`input`,{id:`nc-title`,"onUpdate:modelValue":o[1]||=e=>u.value=e,class:`nc__input`,type:`text`,maxlength:`200`,placeholder:a(X)(`@WORKBENCH:一句话说清要做什么`),onKeydown:o[2]||=N(q(e=>se(!1),[`prevent`]),[`enter`])},null,40,pl),[[K,u.value]])]),i(`div`,ml,[i(`label`,hl,e(a(X)(`@WORKBENCH:描述`)),1),G(i(`textarea`,{id:`nc-desc`,"onUpdate:modelValue":o[3]||=e=>d.value=e,class:`nc__input nc__input--area`,rows:`6`,placeholder:a(X)(`@WORKBENCH:把背景、验收标准、相关文件路径写进来,执行时用它当上下文`),onKeydown:[o[4]||=N(q(e=>se(!1),[`ctrl`,`prevent`]),[`enter`]),o[5]||=N(q(e=>se(!1),[`meta`,`prevent`]),[`enter`])]},null,40,gl),[[K,d.value]])]),i(`div`,_l,[l(Ft,{attachments:h.value,"is-image":a(b),"human-size":a(x),"is-uploading":D.value,"is-paste-hover":g.value,"on-pick":A,"on-remove":ne,"raw-base":Cl,onDragover:o[6]||=q(e=>g.value=!0,[`prevent`]),onDragenter:o[7]||=q(e=>g.value=!0,[`prevent`]),onDragleave:o[8]||=e=>g.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`]),i(`p`,vl,e(a(X)(`@WORKBENCH:粘贴图片以快速添加`)),1)]),m.value?(T(),t(`p`,yl,e(m.value),1)):R(``,!0)],32)]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-40a1a81b`]]);A(),B(),u(),F();var Tl={class:`board__top`},El=[`title`,`aria-label`,`aria-expanded`],Dl={class:`board__brand`},Ol={class:`board__brand-text`},kl={class:`board__title`},Al={class:`board__subtitle`},jl={class:`board__stats`},Ml={class:`board__stat`},Nl={class:`board__stat-label`},Pl={class:`board__stat-value`},Fl=[`title`],Il={class:`board__stat-label`},Ll={class:`board__stat-value`},Rl={class:`board__stat`},zl={class:`board__stat-label`},Bl={class:`board__stat`},Vl={class:`board__stat-label`},Hl={class:`board__stat-value`},Ul=[`title`],Wl={class:`board__main`},Gl={class:`board__main-head`},Kl={class:`board__main-title`},ql={class:`board__project-name`},Jl=[`title`],Yl={key:1,class:`board__project-path`},Xl={key:0,class:`board__project-meta`},Zl=[`title`],Ql=`wb.boardProject.v1`,$l=5e3,eu=3e4,tu=`wb.boardLayout.v1`,nu=180,ru=420,iu=260,au=900,ou=.26,su=.46,cu=Z(b({__name:`WorkbenchBoard`,props:{openedTaskId:{}},emits:[`open-task`,`board-tasks`],setup(n,{emit:r}){let s=n,c=r,{projects:u,boardTasks:d,currentProjectPath:f,loading:p,loadProjects:m,removeProject:h}=Wr();W(d,e=>c(`board-tasks`,e),{immediate:!0});let{active:y,activity:b,running:x,dispatching:ee,togglingSchedule:S,maxInstructionChars:w,defaultPrompt:E,projectPrompts:D,reports:O,generatingReport:te,reportIntervalMs:k,loadOrchestrator:A,setSchedulingActive:ne,dispatch:re,saveDefaultPrompt:j,saveProjectPrompt:oe,loadReports:se,generateReport:ce,setReportInterval:M}=St(),{active:ue}=gr(),de=(()=>{try{return localStorage.getItem(Ql)}catch{return null}})(),P=J(de||``);W(P,e=>{try{localStorage.setItem(Ql,e)}catch{}});let F=o(()=>P.value&&u.value.find(e=>e.key===P.value)||null);W(u,e=>{P.value&&(e.some(e=>e.key===P.value)||(P.value=``))});let fe=!1;function I(){if(fe||(fe=!0,de!==null))return;let e=f.value?Q(f.value):``;e&&u.value.some(t=>t.key===e)&&(P.value=e)}let pe=o(()=>{let e=new Map(u.value.map(e=>[e.key,e.name])),t={};for(let n of d.value)n.projectPath&&(t[n.projectPath]=e.get(Q(n.projectPath))||``);return t}),me=o(()=>{if(!P.value)return d.value;let e=P.value;return d.value.filter(t=>Q(t.projectPath)===e)}),B=o(()=>{let e=new Date;e.setHours(0,0,0,0);let t=e.getTime();return{projects:u.value.length,tasks:d.value.length,running:x.value.length,todayDone:b.value.filter(e=>e.kind===`done`&&e.at&&new Date(e.at).getTime()>=t).length}});function V(e){c(`open-task`,{taskId:e.id,projectPath:e.projectPath})}let he=null,U=!1,ge=null;async function G(e=!0){if(!U){U=!0;try{await Promise.all([m(e),A(e)])}finally{U=!1}}}function _e(){document.hidden||(G(!0),se(!0))}ie(async()=>{window.addEventListener(`resize`,be),await G(!1),se(!0),I(),he=setInterval(()=>{document.hidden||G(!0)},$l),ge=setInterval(()=>{document.hidden||se(!0)},eu),document.addEventListener(`visibilitychange`,_e)}),_(()=>{window.removeEventListener(`resize`,be),he&&=(clearInterval(he),null),ge&&=(clearInterval(ge),null),document.removeEventListener(`visibilitychange`,_e)});let K=Se({left:null,right:null,leftCollapsed:!1,rightCollapsed:!1});function ve(){try{let e=localStorage.getItem(tu);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(K.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(K.right=t.right),K.leftCollapsed=t.leftCollapsed===!0,K.rightCollapsed=t.rightCollapsed===!0}catch{}}ve();function ye(){try{localStorage.setItem(tu,JSON.stringify(K))}catch{}}let q=J(typeof window>`u`?1920:window.innerWidth);function be(){q.value=window.innerWidth}let xe=o(()=>q.value<=1024),we=o(()=>q.value<=860);function Te(e,t){let n=e===`left`?nu:iu,r=Math.min(e===`left`?ru:au,q.value*(e===`left`?ou:su));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}let Ee=o(()=>{let e={};return K.left!=null&&(e[`--wb-left-w`]=Te(`left`,K.left)+`px`),K.right!=null&&!we.value&&(e[`--wb-right-w`]=Te(`right`,K.right)+`px`),e}),Y=J(null),De=J(null);function Oe(e){return Y.value?.querySelector(e===`left`?`.board__left`:`.oc`)}function ke(e){window.removeEventListener(`mousemove`,e),document.body.style.userSelect=``,document.body.style.cursor=``,De.value=null,ye()}function Z(e,t){if(e===`left`?xe.value:we.value)return;let n=Oe(e);if(!n)return;t.preventDefault();let r=t.clientX,i=n.getBoundingClientRect().width;De.value=e,document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let a=t=>{let n=(t.clientX-r)*(e===`left`?1:-1);K[e]=Te(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>ke(a),{once:!0})}function Ae(e){K[e]=null,ye()}let je=J(!1),Me=o(()=>xe.value?!je.value:K.leftCollapsed);function Ne(){if(xe.value){je.value=!je.value;return}K.leftCollapsed=!K.leftCollapsed,ye()}function Pe(){xe.value&&(je.value=!1)}let Fe=o(()=>K.rightCollapsed&&!we.value);function Ie(){K.rightCollapsed=!K.rightCollapsed,ye()}function Le(e){P.value=e?e.key:``,je.value=!1}let Re=J(!1);function $(){Re.value=!0}async function ze(e){if(await G(!0),e.openEditor){c(`open-task`,{taskId:e.task.id,projectPath:e.task.projectPath||``});return}L.success(X(`@WORKBENCH:已创建任务`))}async function Be(e){if(e.runningJobs>0)return;let t=`/api/workbench/tasks/${encodeURIComponent(e.id)}/run`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({executor:ue.value})}).then(e=>e.json()).catch(()=>null);if(!n?.success){L.error(n?.error||X(`@WORKBENCH:执行失败`));return}L.success(X(`@WORKBENCH:已开始执行`)),await G(!0)}let Ve=new Set;async function He(e){if(Ve.has(e.id))return;let t=e.live?.jobId;if(!t){L.error(X(`@WORKBENCH:停止失败`));return}try{await H.confirm(X(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),X(`@WORKBENCH:停止执行`),{confirmButtonText:X(`@WORKBENCH:停止`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}Ve.add(e.id);try{let e=await fetch(`/api/workbench/jobs/${encodeURIComponent(t)}/cancel`,{method:`POST`}).then(e=>e.json()).catch(()=>null);if(!e?.success){L.error(e?.error||X(`@WORKBENCH:停止失败`));return}L.success(X(`@WORKBENCH:已发送停止信号`)),await G(!0)}finally{Ve.delete(e.id)}}let Ue=new Set;async function We(e){if(!Ue.has(e.id)){if(e.runningJobs>0)try{await H.confirm(X(`@WORKBENCH:这条任务还在执行,标记完成会同时把它停掉。已输出的内容会保留。`),X(`@WORKBENCH:标记为已完成`),{confirmButtonText:X(`@WORKBENCH:标记完成`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}Ue.add(e.id);try{let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/done`,{method:`POST`}).then(e=>e.json()).catch(()=>null);if(!t?.success){L.error(t?.error||X(`@WORKBENCH:标记失败`));return}L.success(X(`@WORKBENCH:已标记为已完成`)),await G(!0)}finally{Ue.delete(e.id)}}}async function Ge(e){if(!Ue.has(e.id)){Ue.add(e.id);try{let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/done`,{method:`DELETE`}).then(e=>e.json()).catch(()=>null);if(!t?.success){L.error(t?.error||X(`@WORKBENCH:撤销失败`));return}L.success(X(`@WORKBENCH:已撤销完成标记`)),await G(!0)}finally{Ue.delete(e.id)}}}async function Ke(e){let{ok:t,keptTasks:n}=await h(e.path);t&&(L.success(n>0?X(`@WORKBENCH:已移除项目,{n} 条任务仍保留在「全部项目」下`,{n}):X(`@WORKBENCH:已移除项目`)),await G(!0))}async function qe(e){let t=(e.title||``).trim()||X(`@WORKBENCH:未命名任务`);try{await H.confirm(X(`@WORKBENCH:删除任务「{title}」?`,{title:t}),X(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}`,{method:`DELETE`}).then(e=>e.json()).catch(()=>null);if(n&&n.success===!1){L.error(n.error||X(`@WORKBENCH:删除失败`));return}await G(!0)}let Je=J(null),Ye=o(()=>F.value?.path||f.value);async function Xe(e){let t=await re({text:e.text,projectPath:e.projectPath,autoRun:e.autoRun,attachments:e.attachments,useDefaultPrompt:e.useDefaultPrompt,executor:e.executor});t&&(Je.value?.clearAttachments(),Je.value?.clearDraft(),L.success(t.ran?X(`@WORKBENCH:已派发并开始执行`):X(`@WORKBENCH:已派发(只建任务未执行)`)),await G(!0))}async function Ze(e){await ne(e)}let Qe=J(!1),$e=J(!1),et=o(()=>{let e=F.value?.key;return e&&D.value?.[e]?.prompt||``});async function tt(e){if($e.value)return;let t=e.globalPrompt.trim(),n=e.projectPrompt.trim(),r=F.value;$e.value=!0;try{let e=!0;t!==(E.value||``).trim()&&(e=await j(t)),e&&r&&n!==et.value.trim()&&(e=await oe(r.path,n)),e&&(Qe.value=!1)}finally{$e.value=!1}}return(n,r)=>{let o=g;return T(),t(`div`,{class:`board`,style:ae(Ee.value)},[i(`header`,Tl,[i(`button`,{type:`button`,class:v([`board__icon-btn board__fold-btn`,{"is-on":!Me.value}]),title:Me.value?a(X)(`@WORKBENCH:展开项目列表`):a(X)(`@WORKBENCH:收起项目列表`),"aria-label":Me.value?a(X)(`@WORKBENCH:展开项目列表`):a(X)(`@WORKBENCH:收起项目列表`),"aria-expanded":!Me.value,onClick:Ne},[Me.value?(T(),C(o,{key:1},{default:z(()=>[l(a(le))]),_:1})):(T(),C(o,{key:0},{default:z(()=>[l(a(Ce))]),_:1}))],10,El),i(`div`,Dl,[i(`span`,{class:v([`board__live`,{"is-off":!a(y)}]),"aria-hidden":`true`},null,2),i(`div`,Ol,[i(`h1`,kl,e(a(X)(`@WORKBENCH:多项目编排台`)),1),i(`p`,Al,e(a(y)?a(X)(`@WORKBENCH:主 Agent 调度中`):a(X)(`@WORKBENCH:主 Agent 已暂停`)),1)])]),i(`div`,jl,[i(`span`,Ml,[i(`span`,Nl,e(a(X)(`@WORKBENCH:项目`)),1),i(`strong`,Pl,e(B.value.projects),1)]),i(`span`,{class:`board__stat`,title:a(X)(`@WORKBENCH:看板上全部任务(含已从项目列表移除的项目)`)},[i(`span`,Il,e(a(X)(`@WORKBENCH:全部任务`)),1),i(`strong`,Ll,e(B.value.tasks),1)],8,Fl),i(`span`,Rl,[i(`span`,zl,e(a(X)(`@WORKBENCH:活跃执行`)),1),i(`strong`,{class:v([`board__stat-value`,{"is-live":B.value.running>0}])},e(B.value.running),3)]),i(`span`,Bl,[i(`span`,Vl,e(a(X)(`@WORKBENCH:今日完成`)),1),i(`strong`,Hl,e(B.value.todayDone),1)])])]),i(`div`,{ref_key:`colsRef`,ref:Y,class:v([`board__cols`,{"is-resizing":De.value!==null}])},[i(`div`,{class:v([`board__scrim`,{"is-on":je.value}]),"aria-hidden":`true`,onClick:r[0]||=e=>je.value=!1},null,2),i(`aside`,{class:v([`board__left`,{"is-collapsed":Me.value}]),onKeydown:N(Pe,[`esc`])},[l(Sa,{projects:a(u),"selected-key":P.value,loading:a(p),onSelect:Le,onRemove:Ke},null,8,[`projects`,`selected-key`,`loading`])],34),Me.value?R(``,!0):(T(),t(`div`,{key:0,class:`board__splitter board__splitter--left`,role:`separator`,"aria-orientation":`vertical`,title:a(X)(`@WORKBENCH:拖动调整项目列表宽度,双击恢复默认`),onMousedown:r[1]||=e=>Z(`left`,e),onDblclick:r[2]||=e=>Ae(`left`)},null,40,Ul)),i(`main`,Wl,[i(`div`,Gl,[i(`div`,Kl,[i(`h2`,ql,e(F.value?F.value.name:a(X)(`@WORKBENCH:全部项目`)),1),F.value?(T(),t(`span`,{key:0,class:`board__project-path`,title:F.value.path},e(F.value.path),9,Jl)):(T(),t(`span`,Yl,e(a(X)(`@WORKBENCH:共 {n} 个项目的任务`,{n:a(u).length})),1))]),F.value?(T(),t(`span`,Xl,e(a(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:F.value.stats.done,total:F.value.stats.total})),1)):R(``,!0)]),l(Go,{tasks:me.value,"project-labels":pe.value,"show-project-label":!F.value,"opened-task-id":s.openedTaskId,onOpenTask:V,onRunTask:Be,onStopTask:He,onCompleteTask:We,onReopenTask:Ge,onDeleteTask:qe,onCreateTask:$},null,8,[`tasks`,`project-labels`,`show-project-label`,`opened-task-id`])]),!Fe.value&&!we.value?(T(),t(`div`,{key:1,class:`board__splitter board__splitter--right`,role:`separator`,"aria-orientation":`vertical`,title:a(X)(`@WORKBENCH:拖动调整主 Agent 控制台宽度,双击恢复默认`),onMousedown:r[3]||=e=>Z(`right`,e),onDblclick:r[4]||=e=>Ae(`right`)},null,40,Zl)):R(``,!0),l(Hc,{ref_key:`consoleRef`,ref:Je,active:a(y),running:a(x),"selected-project":F.value,dispatching:a(ee),"toggling-schedule":a(S),"today-done":B.value.todayDone,collapsed:Fe.value,"default-prompt":a(E),"project-prompts":a(D),reports:a(O),"report-interval-ms":a(k),"generating-report":a(te),"max-instruction-chars":a(w),onToggleCollapse:Ie,onToggleSchedule:Ze,onDispatch:Xe,onGenerateReport:a(ce),onSetReportInterval:a(M),onOpenPromptSettings:r[5]||=e=>Qe.value=!0},null,8,[`active`,`running`,`selected-project`,`dispatching`,`toggling-schedule`,`today-done`,`collapsed`,`default-prompt`,`project-prompts`,`reports`,`report-interval-ms`,`generating-report`,`max-instruction-chars`,`onGenerateReport`,`onSetReportInterval`])],2),l(al,{modelValue:Qe.value,"onUpdate:modelValue":r[6]||=e=>Qe.value=e,"default-prompt":a(E),"project-path":F.value?.path||``,"project-name":F.value?.name||``,"project-prompt":et.value,saving:$e.value,onSave:tt},null,8,[`modelValue`,`default-prompt`,`project-path`,`project-name`,`project-prompt`,`saving`]),l(wl,{modelValue:Re.value,"onUpdate:modelValue":r[7]||=e=>Re.value=e,projects:a(u),"default-project-path":Ye.value,onCreated:ze},null,8,[`modelValue`,`projects`,`default-project-path`])],4)}}}),[[`__scopeId`,`data-v-5da69428`]]);A(),B(),u(),F();var lu={class:`workbench`},uu={class:`wb-editor`},du={class:`wb-editor-bar`},fu=[`title`],pu=[`title`],mu=[`data-status`,`title`],hu={class:`wb-editor-bar__status-pill`},gu={class:`wb-editor-bar__status-label`},_u=[`title`],vu={key:2,class:`wb-editor-bar__time`},yu=[`title`],bu={key:1,class:`wb-editor-bar__sep`,"aria-hidden":`true`},xu={key:2,class:`wb-editor-bar__spent`},Su={class:`wb-editor-bar__hint`},Cu={class:`workbench__editor-row`},wu=[`aria-label`,`aria-valuenow`,`title`],Tu={class:`wb-split`},Eu={key:0,class:`wb-placeholder`},Du={class:`wb-split__header`},Ou={class:`wb-split__title-wrap`},ku=[`placeholder`,`aria-label`],Au=[`title`,`aria-label`],ju=[`title`],Mu={key:0,class:`wb-meta-save__dot`},Nu={key:1,class:`wb-meta-save__check`},Pu={key:2,class:`wb-meta-save__bang`},Fu={key:3,class:`wb-meta-save__dot`},Iu=[`title`],Lu={class:`wb-executor-item`},Ru={class:`wb-executor-item__name`},zu=[`title`],Bu={key:2,class:`wb-executor-item__missing`},Vu={key:2,class:`wb-no-claude-hint`,role:`status`},Hu={class:`wb-no-claude-hint__text`},Uu={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},Wu={class:`wb-copy-exec`},Gu=[`title`,`aria-label`],Ku=[`title`,`aria-label`],qu=[`title`,`aria-label`],Ju=[`title`,`aria-label`],Yu=[`open`],Xu={class:`wb-task-desc__summary`},Zu={class:`wb-task-desc__label`},Qu=[`title`,`aria-label`],$u={key:0,class:`wb-task-desc__tag`},ed={key:0},td={key:1,class:`wb-task-desc__tag-attachment`},nd=[`placeholder`,`aria-label`],rd={class:`wb-execution-body`},id={class:`wb-exec-detail`},ad={class:`wb-form-item__label wb-task-prompt__summary`},od={key:0,class:`wb-task-prompt__tag`},sd={key:0,class:`wb-task-prompt__parts`},cd={class:`wb-task-prompt__label`},ld={class:`wb-task-prompt__text`},ud={key:1,class:`wb-task-prompt__empty`},dd={class:`wb-simple-chat`},fd={class:`wb-simple-chat__footer`},pd={key:0,class:`wb-chat-queue`},md={class:`wb-chat-queue__head`},hd={class:`wb-chat-queue__label`},gd={class:`wb-chat-queue__count`},_d={class:`wb-chat-queue__hint`},vd={class:`wb-chat-queue__index`},yd=[`title`],bd={key:0,class:`wb-chat-queue__atts`},xd=[`title`,`aria-label`,`onClick`],Sd=`wb.lastTaskByProject.v1`,Cd=`__no_project__`,wd=`wb.sidebarWidth.v1`,Td=200,Ed=480,Dd=268,Od=3e3,kd=52,Ad=320,jd=500,Md=Z(b({__name:`WorkbenchView`,setup(r){let s=Pe(),c=$(),u=J((()=>{try{let e=parseInt(localStorage.getItem(wd)||``,10);return Number.isFinite(e)?Math.min(Ed,Math.max(Td,e)):Dd}catch{return Dd}})());function d(e){e.preventDefault();let t=e.clientX,n=u.value;document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let r=e=>{u.value=Math.min(Ed,Math.max(Td,n+e.clientX-t))};window.addEventListener(`mousemove`,r),window.addEventListener(`mouseup`,()=>{window.removeEventListener(`mousemove`,r),document.body.style.userSelect=``,document.body.style.cursor=``;try{localStorage.setItem(wd,String(u.value))}catch{}},{once:!0})}function p(e){u.value=Math.min(Ed,Math.max(Td,u.value+e));try{localStorage.setItem(wd,String(u.value))}catch{}}function m(){try{let e=localStorage.getItem(Sd),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function h(e){try{localStorage.setItem(Sd,JSON.stringify(e))}catch{}}function y(e,t){let n=m();n[e||Cd]=t,h(n)}let b=J(!1);function x(){b.value=!1}let ee=J(null);async function S(e){await M(),B.value=e.taskId,ee.value=e.taskId,Te(),V.value&&y(Q(k.value.path),e.taskId),b.value=!0}let{tasks:E,jobs:te,currentProject:k,connectSSE:A,disconnectSSE:ne,loadCurrentProject:se,loadJobs:ce,clearJobsByTask:le,loadTasks:M}=_r();function de(){let e=Q(k.value.path),t=E.value.filter(t=>!t.projectPath||Q(t.projectPath)===e),n=m(),r=e&&n[e]||!e&&n[Cd]||``,i=r?E.value.find(e=>e.id===r):null,a=t[0]||E.value[0]||null,o=i&&i.projectPath&&Q(i.projectPath)!==e?null:i?i.id:a?a.id:null;B.value=o,Te()}async function F(){let e=B.value;if(await M(),e&&E.value.some(t=>t.id===e)){Te();return}de()}async function fe(){await M(),de()}let me=J(!1),B=J(null),V=o(()=>E.value.find(e=>e.id===B.value)||null),_e=J([]),ye=o(()=>_e.value.find(e=>e.id===B.value)||null),be=o(()=>ye.value?Wn(Yn(ye.value)):``),xe=o(()=>ye.value?$n(ye.value):``),Se=o(()=>ye.value?er(ye.value):``),Ce=o(()=>{let e=V.value?.projectPath||``;return!e||Q(e)===Q(k.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),we=J({title:``,desc:``});function Te(){V.value?we.value={title:V.value.title,desc:V.value.desc}:we.value={title:``,desc:``}}let Y=J(`idle`),De=J(0),ke=null,Z=o(()=>{if(!V.value)return!1;let e=V.value;return we.value.title!==e.title||we.value.desc!==e.desc});function Ae(){ke!==null&&(clearTimeout(ke),ke=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 Ie(e){try{await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`})}catch{}let t=E.value.findIndex(t=>t.id===e.id);t!==-1&&E.value.splice(t,1)}async function Le(){let e=E.value.filter(e=>e.id!==B.value&&je(e));for(let t of e)await Ie(t)}async function Re(){if(!V.value)return!1;if(!Z.value)return!0;if(Y.value=`saving`,await At(!1))return De.value=Date.now(),Y.value=`saved`,setTimeout(()=>{Y.value===`saved`&&Date.now()-De.value>=4e3&&(Y.value=`idle`)},4e3),!0;Y.value=`error`;let e=Date.now();return setTimeout(()=>{Y.value===`error`&&Date.now()-e>=4e3&&(Y.value=`idle`)},4e3),!1}W(()=>V.value?{id:V.value.id,title:V.value.title,desc:V.value.desc}:null,(e,t)=>{e&&t&&e.id===t.id&&(ke!==null&&clearTimeout(ke),ke=window.setTimeout(()=>{Re()},1500))},{deep:!0}),W(B,async(e,t)=>{Ae(),V.value&&Z.value&&await Re()}),W(k,async e=>{if(!e.path)return;let t=Q(e.path),n=V.value;n&&n.projectPath&&Q(n.projectPath)!==t&&await fe()});function ze(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function Be(){V.value&&Z.value&&!je(V.value)&&ze(V.value)}let Ve=J(!1);async function He(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}let Ue=J(null),We=J(null);async function Ke(e){if(e){if(!await He((e.title||``).trim()||X(`@WORKBENCH:未命名任务`))){L.error(X(`@WORKBENCH:复制失败`));return}Ue.value=e.id,L.success(X(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{Ue.value===e.id&&(Ue.value=null)},1500)}}async function qe(e){if(!e)return;let t=(e.desc||``).trim();if(!t){L.warning(X(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await He(t)){L.error(X(`@WORKBENCH:复制失败`));return}We.value=e.id,L.success(X(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{We.value===e.id&&(We.value=null)},1500)}let{simpleConversationMessages:Je,simpleAllJobsFor:Ye,simpleJobFor:Xe,simpleJobState:Qe}=mr(te,V);function $e(e){let t=String(e?.id||``).replace(/-a$/,``),n=te.value.find(e=>e.id===t);return n?Kt(n):!1}let et=J(null);function tt(e){let t=(e?.projectPath||``).trim().replace(/[\\/]+$/,``);return t?t.split(/[\\/]/).pop()||t:k.value.name||``}async function nt(e,t=`brief`){if(!e)return;let n=lt(Ye(e),{title:e.title,projectName:tt(e)},{scope:t});if(!n){L.warning(X(`@WORKBENCH:暂无执行内容可复制`));return}if(!await He(n)){L.error(X(`@WORKBENCH:复制失败`));return}et.value=e.id,L.success(X(`@WORKBENCH:已复制执行内容`)),window.setTimeout(()=>{et.value===e.id&&(et.value=null)},1500)}function rt(e){nt(V.value,e===`full`?`full`:`brief`)}let it=[`wheel`,`touchstart`,`pointerdown`,`keydown`],at=J(null),ot=J(null),st=null,ct=null,ut=null;function dt(){if(st&&=(st.disconnect(),null),ct!==null&&(clearTimeout(ct),ct=null),ut){for(let e of it)ut.removeEventListener(e,dt);ut=null}}function ft(){dt();let e=at.value;if(!e)return;e.scrollToBottom?.(!1);let t=ot.value?.querySelector(`.acu-message-list`);if(!(!t||typeof ResizeObserver>`u`)){ut=t;for(let e of it)t.addEventListener(e,dt,{passive:!0});st=new ResizeObserver(()=>at.value?.scrollToBottom?.(!1)),st.observe(t),t.firstElementChild&&st.observe(t.firstElementChild),ct=setTimeout(dt,Od)}}let pt=o(()=>b.value&&V.value&&Ye(V.value).length>0?V.value.id:``);W(pt,async e=>{dt(),e&&(await f(),ft())}),_(dt);function mt(e){return e?qt(e.id):!1}let ht=o(()=>Ye(V.value).length>0),gt=o(()=>mt(V.value)),_t=o(()=>V.value?gt.value?X(`@WORKBENCH:正在执行中,请先「停止」再重新执行`):ht.value?X(`@WORKBENCH:重新跑一轮:上一轮的执行记录会被清空`):``:``),vt=o(()=>{if(!V.value)return null;let e=ye.value;if(gt.value||e&&e.runningJobs>0)return{key:`running`,label:X(`@WORKBENCH:执行中`),title:X(`@WORKBENCH:这条任务正在执行`)};if(e)return e.column===`done`?{key:`done`,label:X(`@WORKBENCH:已完成`),title:e.autoCompleted?X(`@WORKBENCH:静默超时后由 AI 核对,判定这条任务已经完成`):e.manualDoneAt?X(`@WORKBENCH:已标记为已完成`):``}:e.lastJobStatus===`error`?{key:`error`,label:X(`@WORKBENCH:执行失败`),title:X(`@WORKBENCH:上一次执行报错,点开对话流查看原因`)}:{key:`todo`,label:X(`@WORKBENCH:待处理`),title:``};switch(Qe(Xe(V.value))){case`done`:return{key:`done`,label:X(`@WORKBENCH:已完成`),title:``};case`error`:return{key:`error`,label:X(`@WORKBENCH:执行失败`),title:``};case`cancelled`:return{key:`todo`,label:X(`@WORKBENCH:已取消`),title:``};default:return{key:`todo`,label:X(`@WORKBENCH:待处理`),title:``}}}),yt=o(()=>{let e=V.value;if(!e)return[];let t=e.promptParts;if(t&&(t.global||t.project)){let e=[];return t.global&&e.push({key:`global`,label:X(`@WORKBENCH:全局提示词`),text:t.global}),t.project&&e.push({key:`project`,label:X(`@WORKBENCH:项目提示词`),text:t.project}),e}let n=(e.simpleOverride||``).trim();return n?[{key:`legacy`,label:X(`@WORKBENCH:提示词`),text:n}]:[]}),bt=J(!1),xt=J(null),St=J(null);function Ct(e){let t=e?.currentTarget||St.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?jd:Ad,r=Math.min(Math.max(t.scrollHeight,kd),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}W(Ve,async e=>{e&&(await f(),Ct())}),W(()=>V.value?.id,async()=>{Ve.value&&(await f(),Ct())});async function wt(){if(bt.value)return;bt.value=!0;let e={title:``,desc:``};k.value.path&&(e.projectPath=k.value.path);try{let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());if(!t.success){L.error(t.error||X(`@WORKBENCH:保存失败`));return}Ae(),V.value&&je(V.value)?await Ie(V.value):V.value&&Z.value&&await Re(),await fe(),t.task?.id&&(B.value=t.task.id,Te(),L.success(X(`@WORKBENCH:已新建任务`)),await f(),xt.value?.focus())}finally{bt.value=!1}}async function Tt(e){await H.confirm(X(`@WORKBENCH:删除任务「{title}」?`,{title:e.title}),X(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),B.value===e.id&&(B.value=null),fe()}async function Et(e){let t=(e.title||X(`@WORKBENCH:未命名任务`)).trim(),n={title:X(`@WORKBENCH:{title} (副本)`,{title:t}),desc:e.desc||``,simpleOverride:e.simpleOverride||``};e.promptParts&&(e.promptParts.global||e.promptParts.project)&&(n.promptParts=e.promptParts),k.value.path&&(n.projectPath=k.value.path);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)}).then(e=>e.json());if(!e.success){L.error(e.error||X(`@WORKBENCH:复制失败`));return}await fe(),e.task?.id&&(B.value=e.task.id,Te()),L.success(X(`@WORKBENCH:已复制任务`))}catch(e){L.error(X(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function Dt(e){if(B.value===e.id)return;Ae();let t=V.value;t&&je(t)?await Ie(t):t&&Z.value&&await Re(),B.value=e.id,Te(),y(Q(k.value.path),e.id)}async function Ot(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=E.value.slice(),i=kt(E.value,t,n);if(i!==E.value){E.value=i;try{let e=await fetch(`/api/workbench/tasks/reorder`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orderedIds:n,groupPath:t})}).then(e=>e.json()).catch(()=>({success:!1,error:X(`@WORKBENCH:排序保存失败`)}));e?.success||(E.value=r,L.error(e?.error||X(`@WORKBENCH:排序保存失败`)))}catch(e){E.value=r,L.error(X(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function kt(e,t,n){let r=e=>Q(e)||Cd,i=e.filter(e=>r(e.projectPath)===t).map(e=>e.id),a=new Set(i);if(n.length!==a.size||n.some(e=>!a.has(e)))return e;let o=new Map(e.map(e=>[e.id,e])),s=n.map(e=>o.get(e)).filter(Boolean),c=[],l=0;for(let n of e)r(n.projectPath)===t?c.push(s[l++]):c.push(n);return c}async function At(e){if(!V.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(V.value)}).then(e=>e.json());return t.success?(e&&L.success(X(`@WORKBENCH:已保存`)),await F(),!0):(L.error(t.error||X(`@WORKBENCH:保存失败`)),!1)}ie(async()=>{await Promise.all([fe(),se(),ce()]),await Le(),A(),window.addEventListener(`beforeunload`,Be),c.fetchExecutorModels()}),_(()=>{ne(),window.removeEventListener(`beforeunload`,Be),V.value&&Z.value&&!je(V.value)&&ze(V.value)});let{pasteHoverId:jt,isUploading:Mt,isImageAttachment:Nt,humanSize:Pt,onAttachmentPaste:It,onAttachmentDrop:Lt,uploadAttachment:Rt,removeAttachment:zt,pickAttachmentFile:Vt}=dr(),{runTask:Ht,onContinueSendFromChat:Ut,cancelJob:Wt,clearExecutionForSelectedTask:Gt,onReExecuteJob:Kt,isTaskRunning:qt,queuedChatsOf:Jt,removeQueuedChat:Yt,flushNextQueued:Xt}=hr(te,E,V,{clearJobsByTask:le,persistTask:At,uploadAttachment:Rt,getExecutor:()=>Zt.value}),{active:Zt,availability:Qt,hasAnyExecutor:$t,choose:en,executorModelText:tn,executorModelTitle:nn}=gr();function rn(e){return Me(e)}let an=o(()=>Ye(V.value).slice(-1)[0]),on=o(()=>Me(an.value?.agent)),sn=o(()=>Bt(an.value?.agent)),cn=o(()=>V.value?Jt(V.value.id):[]);return(r,o)=>{let c=g,f=n,m=ve,h=D;return T(),t(`div`,lu,[l(cu,{"opened-task-id":ee.value,onOpenTask:S,onBoardTasks:o[0]||=e=>_e.value=e},null,8,[`opened-task-id`]),l(Fe,{modelValue:b.value,"onUpdate:modelValue":o[24]||=e=>b.value=e,title:a(X)(`@WORKBENCH:任务执行`),type:`flex`,"height-mode":`fixed`,"height-offset":`88px`,top:`2vh`,width:`min(1520px, 96vw)`},{default:z(()=>[i(`div`,uu,[i(`div`,du,[i(`button`,{type:`button`,class:`wb-back-btn`,title:a(X)(`@WORKBENCH:返回看板`),onClick:x},[l(c,{class:`wb-back-btn__icon`},{default:z(()=>[l(a(re))]),_:1}),i(`span`,null,e(a(X)(`@WORKBENCH:返回看板`)),1)],8,fu),i(`span`,{class:`wb-editor-bar__project`,title:a(k).path},e(a(k).name),9,pu),vt.value?(T(),t(`span`,{key:0,class:v([`wb-editor-bar__status`,`is-`+vt.value.key]),"data-status":vt.value.key,title:vt.value.title||void 0},[i(`span`,hu,[o[26]||=i(`span`,{class:`wb-editor-bar__status-dot`,"aria-hidden":`true`},null,-1),i(`span`,gu,e(vt.value.label),1)])],10,mu)):R(``,!0),Ce.value?(T(),t(`span`,{key:1,class:`wb-editor-bar__repo`,title:Ce.value.path},e(a(X)(`@WORKBENCH:执行于 {name}`,{name:Ce.value.name})),9,_u)):R(``,!0),be.value||xe.value?(T(),t(`span`,vu,[be.value?(T(),t(`span`,{key:0,class:`wb-editor-bar__ago`,title:Se.value},e(be.value),9,yu)):R(``,!0),be.value&&xe.value?(T(),t(`span`,bu,`·`)):R(``,!0),xe.value?(T(),t(`span`,xu,e(xe.value),1)):R(``,!0)])):R(``,!0),i(`span`,Su,e(a(X)(`@WORKBENCH:任务执行`)),1)]),i(`div`,Cu,[l(Ur,{style:ae({width:u.value+`px`}),tasks:a(E),"selected-task-id":B.value,"current-project":a(k),"creating-task":bt.value,"is-task-running":mt,onSelectTask:Dt,onDeleteTask:Tt,onCopyTask:Et,onCreateTask:wt,onReorderTasks:Ot},null,8,[`style`,`tasks`,`selected-task-id`,`current-project`,`creating-task`]),i(`div`,{class:`wb-splitter`,role:`separator`,tabindex:`0`,"aria-orientation":`vertical`,"aria-label":a(X)(`@WORKBENCH:拖动调整侧边栏宽度`),"aria-valuenow":u.value,"aria-valuemin":Td,"aria-valuemax":Ed,title:a(X)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:d,onKeydown:[o[1]||=N(q(e=>p(-16),[`prevent`]),[`left`]),o[2]||=N(q(e=>p(16),[`prevent`]),[`right`])]},null,40,wu),i(`section`,Tu,[V.value?(T(),t(O,{key:1},[i(`div`,Du,[i(`div`,Ou,[G(i(`input`,{ref_key:`titleInputRef`,ref:xt,class:`wb-input wb-input--title`,"onUpdate:modelValue":o[3]||=e=>V.value.title=e,placeholder:a(X)(`@WORKBENCH:任务标题`),"aria-label":a(X)(`@WORKBENCH:任务标题`)},null,8,ku),[[K,V.value.title]]),i(`button`,{type:`button`,class:v([`wb-copy-btn`,{"is-flash":Ue.value===V.value.id}]),title:a(X)(`@WORKBENCH:复制任务标题`),"aria-label":a(X)(`@WORKBENCH:复制任务标题`),onClick:o[4]||=e=>Ke(V.value)},[Ue.value===V.value.id?(T(),C(c,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:z(()=>[...o[27]||=[w(`✓`,-1)]]),_:1})):(T(),C(c,{key:0,class:`wb-copy-btn__icon`},{default:z(()=>[l(a(P))]),_:1}))],10,Au)]),Y.value!==`idle`||Z.value?(T(),t(`span`,{key:0,class:v([`wb-meta-save`,{"is-saving":Y.value===`saving`,"is-saved":Y.value===`saved`,"is-error":Y.value===`error`,"is-dirty":Z.value&&Y.value===`idle`}]),title:Y.value===`saving`?a(X)(`@WORKBENCH:保存中…`):Y.value===`error`?a(X)(`@WORKBENCH:保存失败`):Y.value===`saved`?a(X)(`@WORKBENCH:已保存`):``},[Y.value===`saving`?(T(),t(`span`,Mu)):Y.value===`saved`?(T(),t(`span`,Nu,`✓`)):Y.value===`error`?(T(),t(`span`,Pu,`!`)):(T(),t(`span`,Fu)),w(` `+e(Y.value===`saving`?a(X)(`@WORKBENCH:保存中…`):Y.value===`saved`?a(X)(`@WORKBENCH:已保存`):Y.value===`error`?a(X)(`@WORKBENCH:保存失败`):a(X)(`@WORKBENCH:有未保存的更改`)),1)],10,ju)):R(``,!0),a($t)?(T(),C(h,{key:1,"split-button":``,type:`primary`,class:`wb-executor-split`,trigger:`click`,disabled:gt.value,title:_t.value,onClick:o[5]||=e=>a(Ht)(V.value),onCommand:a(en)},{dropdown:z(()=>[l(m,null,{default:z(()=>[(T(!0),t(O,null,I(a(Ne),n=>(T(),C(f,{key:n.id,command:n.id,disabled:!a(Qt)[n.id]},{default:z(()=>[i(`span`,Lu,[l(Ge,{executor:n.id,class:`wb-executor-item__icon`},null,8,[`executor`]),i(`span`,Ru,e(n.name),1),a(tn)(n.id)?(T(),t(`span`,{key:0,class:`wb-executor-item__model`,title:a(nn)(n.id)},e(a(tn)(n.id)),9,zu)):R(``,!0),a(Zt)===n.id?(T(),C(c,{key:1,class:`wb-executor-item__check`},{default:z(()=>[l(a(ge))]),_:1})):a(Qt)[n.id]?R(``,!0):(T(),t(`span`,Bu,e(a(X)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:z(()=>[w(e(ht.value?a(X)(`@WORKBENCH:重新执行任务`):a(X)(`@WORKBENCH:执行任务`))+` `,1),i(`span`,{class:`wb-executor-split__hint`,title:a(nn)(a(Zt))},[l(Ge,{executor:a(Zt),class:`wb-executor-split__hint-icon`},null,8,[`executor`]),w(` `+e(rn(a(Zt))),1)],8,Iu)]),_:1},8,[`disabled`,`title`,`onCommand`])):(T(),t(`div`,Vu,[l(c,{class:`wb-no-claude-hint__icon`},{default:z(()=>[l(a(ue))]),_:1}),i(`span`,Hu,e(a(X)(`@WORKBENCH:未检测到本地可用的 CLI 执行器,无法执行任务`)),1),i(`a`,Uu,e(a(X)(`@WORKBENCH:查看安装指引`)),1)])),i(`div`,Wu,[i(`button`,{type:`button`,class:v([`wb-logs-inline-btn wb-logs-inline-btn--copy wb-copy-exec__main`,{"is-flash":et.value===V.value.id}]),title:a(X)(`@WORKBENCH:复制本任务的对话流(默认精简:仅提示词 + 模型回复)`),"aria-label":a(X)(`@WORKBENCH:复制执行内容`),onClick:o[6]||=e=>nt(V.value,`brief`)},[et.value===V.value.id?(T(),C(c,{key:1,class:`wb-logs-inline-btn__icon`},{default:z(()=>[...o[28]||=[w(`✓`,-1)]]),_:1})):(T(),C(c,{key:0,class:`wb-logs-inline-btn__icon`},{default:z(()=>[l(a(P))]),_:1})),i(`span`,null,e(a(X)(`@WORKBENCH:复制执行内容`)),1)],10,Gu),l(h,{trigger:`click`,placement:`bottom-end`,onCommand:rt},{dropdown:z(()=>[l(m,null,{default:z(()=>[l(f,{command:`brief`},{default:z(()=>[w(e(a(X)(`@WORKBENCH:精简:提示词 + 模型回复`)),1)]),_:1}),l(f,{command:`full`},{default:z(()=>[w(e(a(X)(`@WORKBENCH:全量:提示词 / 思考 / 工具调用 / 模型回复`)),1)]),_:1})]),_:1})]),default:z(()=>[i(`button`,{type:`button`,class:`wb-logs-inline-btn wb-copy-exec__caret`,title:a(X)(`@WORKBENCH:选择复制范围`),"aria-label":a(X)(`@WORKBENCH:选择复制范围`)},[l(c,{class:`wb-logs-inline-btn__icon`},{default:z(()=>[l(a(j))]),_:1})],8,Ku)]),_:1})]),i(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:a(X)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":a(X)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:o[7]||=(...e)=>a(Gt)&&a(Gt)(...e)},[l(c,{class:`wb-logs-inline-btn__icon`},{default:z(()=>[l(a(pe))]),_:1}),i(`span`,null,e(a(X)(`@WORKBENCH:清空执行`)),1)],8,qu),i(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:a(X)(`@WORKBENCH:执行日志`),"aria-label":a(X)(`@WORKBENCH:执行日志`),onClick:o[8]||=e=>me.value=!0},[l(c,{class:`wb-logs-inline-btn__icon`},{default:z(()=>[l(a(he))]),_:1}),i(`span`,null,e(a(X)(`@WORKBENCH:执行日志`)),1)],8,Ju)]),i(`details`,{class:`wb-task-desc`,open:Ve.value,onToggle:o[20]||=e=>Ve.value=e.target.open},[i(`summary`,Xu,[l(c,{class:`wb-task-desc__caret`},{default:z(()=>[(T(),C(U(Ve.value?a(j):a(oe))))]),_:1}),i(`span`,Zu,e(a(X)(`@WORKBENCH:任务描述(可选)`)),1),i(`button`,{type:`button`,class:v([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":We.value===V.value.id}]),title:V.value.desc&&V.value.desc.trim()?a(X)(`@WORKBENCH:复制任务描述`):a(X)(`@WORKBENCH:任务描述为空,无需复制`),"aria-label":a(X)(`@WORKBENCH:复制任务描述`),onClick:o[9]||=q(e=>qe(V.value),[`stop`,`prevent`])},[We.value===V.value.id?(T(),C(c,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:z(()=>[...o[29]||=[w(`✓`,-1)]]),_:1})):(T(),C(c,{key:0,class:`wb-copy-btn__icon`},{default:z(()=>[l(a(P))]),_:1}))],10,Qu),V.value.desc&&V.value.desc.length>0||V.value.attachments&&V.value.attachments.length>0?(T(),t(`span`,$u,[V.value.desc&&V.value.desc.length>0?(T(),t(`span`,ed,e(a(X)(`@WORKBENCH:已填写`)),1)):R(``,!0),V.value.attachments&&V.value.attachments.length>0?(T(),t(`span`,td,e(V.value.attachments.length),1)):R(``,!0)])):R(``,!0)]),G(i(`textarea`,{ref_key:`taskDescTextareaRef`,ref:St,class:`wb-textarea wb-textarea--autogrow`,"onUpdate:modelValue":o[10]||=e=>V.value.desc=e,placeholder:a(X)(`@WORKBENCH:任务描述(可选)`),"aria-label":a(X)(`@WORKBENCH:任务描述(可选)`),onInput:o[11]||=e=>Ct(e),onFocus:o[12]||=e=>Ct(e),onBlur:o[13]||=e=>Ct(e),onPaste:o[14]||=e=>a(It)(e,{kind:`task`,task:V.value})},null,40,nd),[[K,V.value.desc]]),l(Ft,{attachments:V.value.attachments||[],"is-image":a(Nt),"human-size":a(Pt),"is-uploading":a(Mt)(`task-`+V.value.id),"is-paste-hover":a(jt)===`task-`+V.value.id,"on-pick":()=>a(Vt)({kind:`task`,task:V.value}),"on-remove":e=>a(zt)({kind:`task`,task:V.value},e),onPaste:o[15]||=e=>a(It)(e,{kind:`task`,task:V.value}),onDrop:o[16]||=q(e=>a(Lt)(e,{kind:`task`,task:V.value}),[`prevent`]),onDragover:o[17]||=q(e=>jt.value=`task-`+V.value.id,[`prevent`]),onDragenter:o[18]||=q(e=>jt.value=`task-`+V.value.id,[`prevent`]),onDragleave:o[19]||=e=>jt.value=a(jt)===`task-`+V.value.id?null:a(jt)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,Yu),i(`div`,rd,[i(`div`,id,[i(`details`,{class:v([`wb-task-prompt`,{"has-content":yt.value.length>0}])},[i(`summary`,ad,[l(c,{class:`wb-task-prompt__caret`},{default:z(()=>[l(a(oe))]),_:1}),i(`span`,null,e(a(X)(`@WORKBENCH:提示词`)),1),yt.value.length>0?(T(),t(`span`,od,e(a(X)(`@WORKBENCH:已填写`)),1)):R(``,!0),a(Qe)(a(Xe)(V.value))===`running`&&a(Xe)(V.value)?(T(),t(`button`,{key:1,class:`wb-simple__stop`,onClick:o[21]||=q(e=>a(Wt)(a(Xe)(V.value)),[`stop`])},e(a(X)(`@WORKBENCH:停止`)),1)):R(``,!0)]),yt.value.length>0?(T(),t(`div`,sd,[(T(!0),t(O,null,I(yt.value,n=>(T(),t(`div`,{key:n.key,class:`wb-task-prompt__part`},[i(`div`,cd,e(n.label),1),i(`pre`,ld,e(n.text),1)]))),128))])):(T(),t(`p`,ud,e(a(X)(`@WORKBENCH:这条任务没有附加提示词`)),1))],2),a(Ye)(V.value).length>0?(T(),t(`div`,{key:0,class:`wb-simple-chat-wrap`,ref_key:`chatWrapRef`,ref:ot},[i(`div`,dd,[(T(),C(a(Ee),{ref_key:`chatRef`,ref:at,key:V.value.id,messages:a(Je),"assistant-name":on.value,"assistant-avatar":sn.value,"show-avatar":!0,theme:a(s).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:a(X)(`@AGENT:计划`),raw:a(X)(`@AGENT:原始参数`)}},"message-rail-config":a(Ze),"show-input":!1,onRetry:$e},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`,`message-rail-config`]))]),i(`div`,fd,[cn.value.length?(T(),t(`div`,pd,[i(`div`,md,[i(`span`,hd,e(a(X)(`@WORKBENCH:排队中`)),1),i(`span`,gd,e(cn.value.length),1),i(`span`,_d,e(gt.value?a(X)(`@WORKBENCH:等这一轮跑完自动发送`):a(X)(`@WORKBENCH:当前没有在跑的轮次`)),1)]),(T(!0),t(O,null,I(cn.value,(n,r)=>(T(),t(`div`,{key:n.id,class:`wb-chat-queue__item`},[i(`span`,vd,e(r+1),1),i(`span`,{class:`wb-chat-queue__text`,title:n.text},e(n.text),9,yd),n.files.length?(T(),t(`span`,bd,[o[30]||=i(`span`,{"aria-hidden":`true`},`📎`,-1),w(` `+e(n.files.map(e=>e.file.name).join(`、`)),1)])):R(``,!0),r===0&&!gt.value?(T(),t(`button`,{key:1,type:`button`,class:`wb-chat-queue__btn`,onClick:o[22]||=e=>a(Xt)(V.value.id)},e(a(X)(`@WORKBENCH:立即发送`)),1)):R(``,!0),i(`button`,{type:`button`,class:`wb-chat-queue__btn is-remove`,title:a(X)(`@WORKBENCH:移出队列`),"aria-label":a(X)(`@WORKBENCH:移出队列`),onClick:e=>a(Yt)(V.value.id,n.id)},`✕`,8,xd)]))),128))])):R(``,!0),(T(),C(a(Oe),{key:`input-`+V.value.id,placeholder:gt.value?a(X)(`@WORKBENCH:执行中,发送后会排队,等这一轮跑完自动接上…`):a(X)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:a(nr),multiple:!0,maxCount:0,maxSize:a(rr)},class:`wb-simple-chat__input`,onSend:o[23]||=e=>a(Ut)(V.value,e)},null,8,[`placeholder`,`upload-config`]))])],512)):R(``,!0)])])],64)):(T(),t(`div`,Eu,[i(`p`,null,e(a(X)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])])]),_:1},8,[`modelValue`,`title`]),l(Fe,{modelValue:me.value,"onUpdate:modelValue":o[25]||=e=>me.value=e,title:a(X)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,type:`flex`,"custom-class":`wb-logs-dialog`,"append-to-body":``},{default:z(()=>[l(Bn)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-0e2e8a7b`]]);export{Md as default};
|