zen-gitsync 2.18.6 → 2.18.7
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/package.json +3 -1
- package/src/ui/public/assets/{AgentView-D-k_LYiJ.js → AgentView-BlG0PdkI.js} +1 -1
- package/src/ui/public/assets/{AppVersionBadge-D4YCHNS8.js → AppVersionBadge-D7X53Bf1.js} +1 -1
- package/src/ui/public/assets/{BranchSelector-CpYCgEuj.js → BranchSelector-yXxfIs57.js} +1 -1
- package/src/ui/public/assets/{CommitForm-CwOF_1gO.js → CommitForm-C8Ez91_c.js} +1 -1
- package/src/ui/public/assets/{CopySessionButton-SgJr0xOC.js → CopySessionButton-Do4vHJm6.js} +1 -1
- package/src/ui/public/assets/{EditorView-DwbVdSmS.js → EditorView-DK2dYRVb.js} +1 -1
- package/src/ui/public/assets/{FlowExecutionViewer-CKHp0Hfi.js → FlowExecutionViewer-BuU5kQG8.js} +1 -1
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-RgXtsQ7y.js → FlowOrchestrationWorkspace-CTBEooj5.js} +1 -1
- package/src/ui/public/assets/{LogList-DdbyFS8j.js → LogList-Bq5aLoA-.js} +1 -1
- package/src/ui/public/assets/{MindmapView-ep2o8uXg.js → MindmapView-CSysrruz.js} +1 -1
- package/src/ui/public/assets/{MonitorView-BTNWi4QG.js → MonitorView-Cgf5zRxT.js} +1 -1
- package/src/ui/public/assets/{ProjectStartupButton-DWTFof63.js → ProjectStartupButton-CrLWTK20.js} +1 -1
- package/src/ui/public/assets/{RecentDirectoriesChat-Do1spWVH.js → RecentDirectoriesChat-BlIG_9G4.js} +1 -1
- package/src/ui/public/assets/{RemoteManagerDialog-DjLVltnm.js → RemoteManagerDialog-CJZFzQPc.js} +1 -1
- package/src/ui/public/assets/{RemoteRepoCard-DpcEDqyo.js → RemoteRepoCard-aSx1ikZ8.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-Djj6QLgu.js → SourceMapView-DEljf14g.js} +1 -1
- package/src/ui/public/assets/{UserInputNode-CQWY6Jwx.js → UserInputNode-oOQwaadU.js} +1 -1
- package/src/ui/public/assets/WorkbenchView-DXzxg5_z.js +8 -0
- package/src/ui/public/assets/{agentConversations-BvuyjfgF.js → agentConversations-BKjyYn-u.js} +1 -1
- package/src/ui/public/assets/configStore-D0oycG71.js +1 -0
- package/src/ui/public/assets/index-DjaZpz97.js +57 -0
- package/src/ui/public/assets/index-DwJWiCiN.css +1 -0
- package/src/ui/public/index.html +3 -3
- package/src/ui/server/utils/directoryFetch.js +14 -1
- package/src/ui/server/utils/directoryFetch.test.js +5 -0
- package/src/ui/public/assets/WorkbenchView-CQ8qLTMM.js +0 -8
- package/src/ui/public/assets/configStore-DojhW1P7.js +0 -1
- package/src/ui/public/assets/index-BuFKNHju.css +0 -1
- package/src/ui/public/assets/index-Z7rlN9LU.js +0 -57
|
@@ -0,0 +1,8 @@
|
|
|
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 I,er as fe,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 ge,sr as U,tt as _e,ur as W,v as ve,vn as G,w as ye,wn as be,xn as K,xr as q,y as xe,yn as J,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-CDrhhAKC.js";import{t as Ae}from"./SvgIcon-Du5MOe8A.js";import{c as je,l as Me,s as Ne,t as Pe}from"./configStore-D0oycG71.js";import{t as Fe}from"./CommonDialog-BUuLsgNS.js";import{C as Ie,D as Le,E as Re,F as ze,S as Q,T as Be,V as Ve,W as $,b as He,h as Ue,m as We,w as Ge,x as Ke,y as qe}from"./index-DjaZpz97.js";import{a as Je,c as Ye,i as Xe,l as Ze,n as Qe,o as $e,p as et,r as tt,s as nt,t as rt,u as it}from"./agentConversations-BKjyYn-u.js";import{a as at,c as ot,i as st,n as ct,o as lt,r as ut,s as dt,t as ft}from"./CopySessionButton-Do4vHJm6.js";A(),B(),u(),F();var pt={class:`wb-attachments__head`},mt={class:`wb-attachments__label`},ht={class:`wb-attachments__count`},gt=[`disabled`],_t={key:0,class:`wb-attachments__paste-hint`},vt={key:1,class:`wb-attachments__list`},yt=[`title`,`onClick`,`onContextmenu`],bt=[`src`,`alt`],xt={key:1},St={class:`wb-attachment__meta`},Ct=[`title`],wt=[`onClick`,`title`],Tt=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=q(0),p=q(!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=q({visible:!1,x:0,y:0,att:null}),y=q(!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]||=K(e=>l(`drop`,e),[`prevent`]),onDragover:o[3]||=K(e=>l(`dragover`,e),[`prevent`]),onDragenter:o[4]||=K(e=>l(`dragenter`,e),[`prevent`]),onDragleave:o[5]||=e=>l(`dragleave`,e)},[i(`div`,pt,[i(`span`,mt,[w(e(a(X)(`@WORKBENCH:附件`))+` `,1),i(`span`,ht,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,gt)]),n.isPasteHover?(T(),t(`div`,_t,e(a(X)(`@WORKBENCH:粘贴图片以快速添加`)),1)):R(``,!0),n.attachments.length>0?(T(),t(`ul`,vt,[(T(!0),t(O,null,fe(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,bt)):(T(),t(`span`,xt,e(r.ext.toUpperCase()),1))],2),i(`div`,St,[i(`div`,{class:`wb-attachment__name`,title:`${r.originalName} (${n.humanSize(r.size)})`},e(r.originalName),9,Ct)])],40,yt),i(`button`,{class:`wb-attachment__del`,onClick:K(e=>n.onRemove(r),[`stop`]),title:a(X)(`@WORKBENCH:删除`)},`×`,8,wt)]))),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(be,{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]||=K(()=>{},[`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`]]),Et=Y(`claude`),Dt=Y(`opencode`),Ot=Y(`codex`);function kt(e){return e===`opencode`?Dt:e===`codex`?Ot:Et}function At(e){if(typeof e!=`string`||!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function jt(e){let t=At(e?.thinkingStartedAt);return t===void 0?{}:{reasoningStartedAt:t,reasoningEndedAt:At(e?.thinkingEndedAt)}}var Mt=[`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`],Nt=/!\[([^\]]*)\]\(\s*(?:<([^<>\n]+)>|([^()\s]+))(\s+["'][^"']*["'])?\s*\)/g,Pt=/^\s*(`{3,}|~{3,})/,Ft=/\.([a-z0-9]+)$/;function It(e){let t=e.trim().toLowerCase().match(Ft);return!!t&&Mt.includes(t[1])}function Lt(e){let t=String(e||``).trim();if(!t)return!1;if(/^[a-zA-Z]:[\\/]/.test(t))return It(t);let n=t.match(/^([a-z][a-z0-9+.-]+):/i);return n&&n[1].toLowerCase()!==`file`||t.startsWith(`//`)||t.startsWith(`/`)?!1:It(t)}function Rt(e,t){return`/api/workbench/jobs/${encodeURIComponent(e)}/image?path=${encodeURIComponent(t)}`}function zt(e,t){return e.includes(`}${a||``})`:e}):e}function Bt(e,t){let n=typeof e==`string`?e:``;if(!n||!t||!n.includes(`![`))return n;let r=n.split(`
|
|
2
|
+
`),i=null,a=[];for(let e of r){let n=e.match(Pt);if(n){let t=n[1][0];i===null?i=t:i===t&&(i=null),a.push(e);continue}a.push(i===null?zt(e,t):e)}return a.join(`
|
|
3
|
+
`)}A(),B(),u(),F();var Vt=[`aria-expanded`],Ht={class:`wb-log-summary__left`},Ut={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},Wt={class:`wb-log-summary__label`},Gt={key:0,class:`wb-log-summary__elapsed`},Kt={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},qt={class:`wb-log-summary__label`},Jt={class:`wb-log-summary__icon`},Yt={class:`wb-log-summary__label`},Xt={key:0,class:`wb-log-summary__elapsed`},Zt={key:3},Qt={class:`wb-log-summary__right`},$t={class:`wb-log-summary__meta`},en=[`title`,`aria-label`],tn={class:`wb-log-details__body`},nn={class:`wb-job-chat`},rn={key:0,class:`wb-chat__foot`},an=[`title`,`aria-label`],on={key:1,class:`wb-log-fullscreen__empty`},sn=65536,cn=Z(b({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(n,{emit:r}){let s=Pe(),c=n,u=r,d=q(!1);function p(){d.value=!d.value}let m=o(()=>c.job.status===`running`||c.job.status===`pending`);U(()=>c.job.status,(e,t)=>{t!==`running`&&t!==`pending`&&(e===`running`||e===`pending`)&&(d.value=!1)});function h(){let e=c.job.output||``;return e?Bt(e.length<=sn?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`,c.job.id):``}function g(){let e=c.job.thinking||``;return e?e.length<=sn?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(`
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`))?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(()=>kt(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=at(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=lt(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,...jt(e),toolCalls:l?s:void 0,status:d,error:d===`error`&&e.error||void 0,createdAt:n}),t}),te=q(null);U(()=>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=q(!1),ne=o(()=>!!(c.job.output&&c.job.output.length)),re=o(()=>Bt(c.job.output||``,c.job.id)),ie=q(null);U(A,async e=>{e&&(await f(),ie.value&&(ie.value.scrollTop=ie.value.scrollHeight))}),U(()=>(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`,Ht,[n.job.status===`running`?(T(),t(`span`,Ut,[i(`span`,Wt,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`,Gt,e(k.value),1)):R(``,!0)])):n.job.status===`pending`?(T(),t(`span`,Kt,[i(`span`,qt,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`,Jt,e(ee.value),1),i(`span`,Yt,e(S.value),1),k.value?(T(),t(`span`,Xt,e(k.value),1)):R(``,!0)],2)):(T(),t(`span`,Zt,e(a(X)(`@WORKBENCH:查看执行日志`)),1))]),i(`span`,Qt,[i(`span`,$t,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:K(y,[`stop`])},` ⧉ `,8,en)])],8,Vt),W(i(`div`,tn,[i(`div`,nn,[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`,rn,[i(`button`,{type:`button`,class:`wb-chat__action`,title:a(X)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":a(X)(`@WORKBENCH:重新执行`),onClick:oe},` ↻ `,8,an)])):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`,on,e(a(X)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[J,!d.value]])],2))}}),[[`__scopeId`,`data-v-9c103bcc`]]);A(),B(),u(),F();var ln={class:`exec-logs`},un={class:`exec-logs__head`},dn={class:`exec-logs__title-block`},fn={class:`exec-logs__stats`},pn={class:`exec-logs__head-actions`},mn={class:`exec-logs__config`},hn={class:`exec-logs__config-label`},gn={class:`exec-logs__config-field`},_n={class:`exec-logs__config-name`},vn={class:`exec-logs__config-field`},yn={class:`exec-logs__config-name`},bn={class:`exec-logs__filter`},xn={key:0,class:`exec-logs__batch-meta`},Sn={key:0,class:`exec-logs__batch`},Cn={class:`exec-logs__list`},wn={key:0,class:`exec-logs__empty`},Tn={class:`exec-logs__empty-art`,"aria-hidden":`true`},En={class:`exec-logs__empty-title`},Dn={class:`exec-logs__empty-hint`},On={class:`exec-card__head`},kn=[`title`],An={class:`exec-card__meta`},jn={key:0,class:`exec-card__task`},Mn={key:1,class:`exec-card__time`},Nn={key:2,class:`exec-card__exit`},Pn=[`title`,`onClick`],Fn={key:0,class:`exec-card__error`},In={key:1,class:`exec-logs__pager`},Ln=50,Rn=Z(b({__name:`ExecutionLogManager`,setup(n){function r(e){return e instanceof Error?e.message:String(e)}let s=q([]),u=q(0),d=Se({count:0,sizeMB:0,byStatus:{}}),f=q(!1),p=q(new Set),_=Se({q:``,status:``,page:1}),y=q({maxCount:500,maxSizeMB:256}),b=Se({maxCount:500,maxSizeMB:256}),x=q(!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(Ln)),e.set(`offset`,String((_.page-1)*Ln));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);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=xe,te=k,ie=c,P=h,F=ee,I=g,L=ve,pe=M;return T(),t(`div`,ln,[i(`header`,un,[i(`div`,dn,[i(`span`,fn,e(a(X)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:d.count,size:d.sizeMB})),1)]),i(`div`,pn,[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`,mn,[i(`span`,hn,e(a(X)(`@WORKBENCH:保存策略`)),1),i(`span`,gn,[i(`span`,_n,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`,vn,[i(`span`,yn,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`,bn,[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,fe(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`,xn,e(a(X)(`@WORKBENCH:已选择 {count} 项`,{count:p.value.size})),1)):R(``,!0)]),p.value.size>0?(T(),t(`div`,Sn,[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),W((T(),t(`div`,Cn,[!f.value&&s.value.length===0?(T(),t(`div`,wn,[i(`div`,Tn,[l(I,null,{default:z(()=>[l(a(he))]),_:1})]),i(`div`,En,e(a(X)(`@WORKBENCH:暂无执行日志`)),1),i(`div`,Dn,e(a(X)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):R(``,!0),(T(!0),t(O,null,fe(s.value,n=>(T(),t(`article`,{key:n.id,class:v([`exec-card`,{"is-selected":p.value.has(n.id)}])},[i(`header`,On,[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(ut)(n.status),borderColor:a(ut)(n.status)})},e(a(st)(n.status)),5),i(`span`,{class:`exec-card__title`,title:n.title||a(X)(`@WORKBENCH:无标题`)},e(n.title||a(X)(`@WORKBENCH:无标题`)),9,kn),r[6]||=i(`span`,{class:`exec-card__spacer`},null,-1),i(`span`,An,[n.taskTitle?(T(),t(`span`,jn,`📁 `+e(n.taskTitle),1)):R(``,!0),n.startedAt?(T(),t(`span`,Mn,`⏱ `+e(de(n.startedAt,n.endedAt)),1)):R(``,!0),n.exitCode===null?R(``,!0):(T(),t(`span`,Nn,`exit `+e(n.exitCode),1))]),i(`button`,{type:`button`,class:`exec-card__del`,title:a(X)(`@WORKBENCH:删除`),onClick:e=>ce(n.id)},`×`,8,Pn)]),n.error?(T(),t(`p`,Fn,`⚠ `+e(n.error),1)):R(``,!0),l(cn,{job:n,onReExecute:se},null,8,[`job`])],2))),128))])),[[pe,f.value]]),u.value>Ln?(T(),t(`footer`,In,[l(L,{"current-page":_.page,"onUpdate:currentPage":r[4]||=e=>_.page=e,"page-size":Ln,total:u.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:D},null,8,[`current-page`,`total`])])):R(``,!0)])}}}),[[`__scopeId`,`data-v-dd1760f3`]]),zn=6e4,Bn=60*zn,Vn=24*Bn;function Hn(e,t=Date.now()){if(!e)return``;let n=new Date(e).getTime();if(Number.isNaN(n))return``;let r=Math.max(0,t-n);return r<zn?X(`@WORKBENCH:刚刚`):r<Bn?X(`@WORKBENCH:N 分钟前`,{n:Math.floor(r/zn)}):r<Vn?X(`@WORKBENCH:N 小时前`,{n:Math.floor(r/Bn)}):r<30*Vn?X(`@WORKBENCH:N 天前`,{n:Math.floor(r/Vn)}):new Date(n).toLocaleDateString()}function Un(e){if(typeof e!=`number`||!Number.isFinite(e)||e<0)return``;let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?X(`@WORKBENCH:N 小时 M 分`,{n,m:r}):r>0?X(`@WORKBENCH:N 分 M 秒`,{n:r,m:i}):X(`@WORKBENCH:N 秒`,{n:i})}function Wn(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function Gn(e,t=Date.now()){if(!e)return``;let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=e=>String(e).padStart(2,`0`),i=`${r(n.getHours())}:${r(n.getMinutes())}:${r(n.getSeconds())}`,a=new Date(t);if(Wn(n,a))return i;if(Wn(n,new Date(a.getFullYear(),a.getMonth(),a.getDate()-1)))return X(`@WORKBENCH:昨天 {time}`,{time:i});let o=`${n.getMonth()+1}/${n.getDate()}`;return n.getFullYear()===a.getFullYear()?`${o} ${i}`:`${n.getFullYear()}/${o} ${i}`}function Kn(e){return String(e.manualDoneAt||e.lastJobEndedAt||e.updatedAt||e.createdAt||``)}function qn(e){return e.column===`done`?Kn(e):e.updatedAt||e.createdAt||``}function Jn(e){return e.live?``:Un(e.lastDurationMs)}function Yn(e){let t=Jn(e);return t?X(`@WORKBENCH:用时 {d}`,{d:t}):``}function Xn(e){return e.live?X(`@WORKBENCH:已运行 {elapsed}`,{elapsed:Un(e.live.elapsedMs)}):``}function Zn(e){return Xn(e)||Yn(e)}function Qn(e){let t=Jn(e);if(!t)return``;let n=Gn(e.lastJobStartedAt),r=Gn(e.lastJobEndedAt);return!n||!r?t:`${t} · ${n} → ${r}`}B();var $n=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/gif`,`image/webp`,`image/bmp`,`image/svg+xml`,`application/pdf`,`text/plain`,`text/markdown`,`text/x-markdown`,`text/csv`,`application/json`,`text/json`,`text/x-log`]),er=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,tr=20971520,nr=3840,rr=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/webp`,`image/bmp`]);function ir(e){if(e.size<=3670016)return!1;let t=String(e.type||``).toLowerCase();return t?rr.has(t):/\.(png|jpe?g|webp|bmp)$/i.test(e.name)}function ar(e,t){return`${String(e||`attachment`).replace(/\.[^./\\]+$/,``)}.${t}`}async function or(e){if(typeof createImageBitmap==`function`)try{let t=await createImageBitmap(e);return{source:t,width:t.width,height:t.height,release:()=>t.close()}}catch{}return await new Promise(t=>{let n=URL.createObjectURL(e),r=new Image;r.onload=()=>t({source:r,width:r.naturalWidth,height:r.naturalHeight,release:()=>URL.revokeObjectURL(n)}),r.onerror=()=>{URL.revokeObjectURL(n),t(null)},r.src=n})}function sr(e,t,n){return new Promise(r=>{try{e.toBlob(e=>r(e&&e.type===t?e:null),t,n)}catch{r(null)}})}async function cr(e){let t=await or(e);if(!t)return null;try{let n=[{edge:nr,quality:.95},{edge:nr,quality:.85},{edge:2560,quality:.85},{edge:1920,quality:.8}],r=null;for(let e of n){let n=Math.min(1,e.edge/Math.max(t.width,t.height)),i=Math.max(1,Math.round(t.width*n)),a=Math.max(1,Math.round(t.height*n)),o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)return null;s.drawImage(t.source,0,0,i,a);let c=await sr(o,`image/webp`,e.quality)||await sr(o,`image/jpeg`,e.quality);if(!c)return null;if((!r||c.size<r.size)&&(r=c),c.size<=3670016)break}return!r||r.size>=e.size?null:{blob:r,ext:r.type===`image/webp`?`webp`:`jpg`}}catch{return null}finally{t.release()}}function lr(){let e=q({}),t=q(null);function n(t){return!!e.value[t]}function r(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function i(e){return e.kind===`draft`?`draft`:`task-${e.task?.id??``}`}function a(e){if(e.kind===`draft`)return e.list;let t=e.task?.attachments;return Array.isArray(t)?t:[]}function o(e,t){if(e.kind===`draft`){e.replace(t);return}e.task&&(e.task.attachments=t)}function s(e){return e.kind===`draft`?`/api/workbench/orchestrator/attachments`:`/api/workbench/tasks/${e.task?.id??``}/attachments`}function c(e,t){return e.kind===`draft`?`/api/workbench/orchestrator/attachments/${t}`:`/api/workbench/tasks/${e.task?.id??``}/attachments/${t}`}function l(e,t){if(!e.clipboardData)return;let n=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`));if(n.length>0){e.preventDefault();for(let e of n){let n=e.getAsFile();if(!n)continue;let i=(n.type.split(`/`)[1]||`png`).replace(`jpeg`,`jpg`);d(t,r(n,`paste-${new Date().toISOString().replace(/[:.]/g,`-`)}.${i}`))}return}let i=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&!e.type.startsWith(`image/`));if(i.length>0){e.preventDefault();for(let e of i){let n=e.getAsFile();n&&d(t,r(n,n.name||`pasted-file`))}}}function u(e,n){t.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>d(n,e))}async function d(t,n){if(!$n.has(n.type)&&!n.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){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(ir(n)){let t=await cr(n);t&&(e=r(t.blob,ar(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(tr)})}`);return}let i=await fetch(s(t),{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":encodeURIComponent(e.name),"X-Mime-Type":e.type||`application/octet-stream`},body:e}).then(e=>e.json());if(i.success){let n=a(t);n.push(i.attachment),o(t,n),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=er,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>d(e,t))},t.click()}let m=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function h(e){let t=String(e?.ext||``).toLowerCase();if(t&&m.has(t)||String(e?.mimeType||``).toLowerCase().startsWith(`image/`))return!0;let n=String(e?.originalName||``).toLowerCase();return/\.(png|jpe?g|gif|webp|bmp|svg)$/.test(n)}function g(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return{uploadingTargets:e,pasteHoverId:t,isUploading:n,ensureFile:r,isImageAttachment:h,humanSize:g,targetKey:i,targetAttachments:a,setTargetAttachments:o,targetUploadUrl:s,targetDeleteUrl:c,onAttachmentPaste:l,onAttachmentDrop:u,uploadAttachment:d,removeAttachment:f,pickAttachmentFile:p}}A();var ur=`__simple`,dr=65536;function fr(e,t){function n(t){if(!t)return[];let n=`${t.id}${ur}`;return e.value.filter(e=>e.subId===n||e.subId.startsWith(`${n}__r`)).sort((e,t)=>{let n=e.startedAt||``,r=t.startedAt||``;return n&&r?n.localeCompare(r):n?-1:+!!r})}function r(e){if(!e)return null;let t=n(e);return t.length>0?t[t.length-1]:null}function i(e){return e?e.status===`pending`||e.status===`running`?`running`:e.status===`done`?`done`:e.status===`cancelled`?`cancelled`:`error`:`idle`}return{simpleConversationMessages: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=at(t.prompt);e&&r.push({id:`${t.id}-u`,role:`user`,content:e,status:`done`,createdAt:a})}let o=t.output||``,s=t.thinking||``,c=o.length>dr?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>dr?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=lt(t),p=f.length>0,m=u||d||p,h;if(!i)h=`done`;else{let e=t.status;h=e===`running`||e===`pending`?m?`streaming`:`pending`:e===`error`?`error`:`done`}r.push({id:`${t.id}-a`,role:`assistant`,content:Bt(c,t.id),reasoning:d?l:void 0,reasoningStatus:d?!i&&u||u?`done`:h===`streaming`?`streaming`:`done`:void 0,...jt(t),toolCalls:p?f:void 0,status:h,error:h===`error`&&t.error||void 0,createdAt:a})}),r}),simpleAllJobsFor:n,simpleJobFor:r,simpleJobState:i,SIMPLE_SUB_ID_SUFFIX:ur,MAX_LOG_DISPLAY_SIMPLE:dr}}A(),B();function pr(e,t,n,r){function i(){return{executor:r.getExecutor()}}async function a(e){if(!n.value||n.value.id!==e.id)return!0;let i=t.value.find(t=>t.id===e.id);return i&&i.title===n.value.title&&i.desc===n.value.desc?!0:await r.persistTask(!1)}async function 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});U(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 mr(){let e=Pe(),t=Ve(),n=o({get:()=>e.resolvedTaskExecutor,set:t=>{je(t)&&e.setLastTaskExecutor(t)}}),r=o(()=>({claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable})),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 hr(){let e=q([]),t=q([]),n=q({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 gr=`__no_project__`,_r=`wb.collapsedGroupPaths.v1`,vr=`wb.seenGroupPaths.v1`;function yr(e){try{let t=localStorage.getItem(e);if(!t)return new Set;let n=JSON.parse(t);return new Set(Array.isArray(n)?n.filter(e=>typeof e==`string`):[])}catch{return new Set}}function br(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function xr(e,t){let n=q(yr(_r)),r=q(yr(vr));U(n,e=>br(_r,e),{deep:!1}),U(r,e=>br(vr,e),{deep:!1});function i(e){return n.value.has(e)}function a(e){n.value.has(e)?n.value.delete(e):n.value.add(e),n.value=new Set(n.value);let t=new Set(r.value);t.add(e),r.value=t}let s=o(()=>{let r=e.value,i=new Map;for(let e of r){let t=$(e.projectPath)||gr;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=$(t.value.path),o=Array.from(i.keys()).sort((e,t)=>e===a?-1:t===a||e===gr?1:t===gr?-1:e.localeCompare(t));return{groups:o.map(e=>({path:e,label:e===gr?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===gr)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}let l=o(()=>`${$(t.value.path)}|${s.value.groups.map(e=>e.path).join(`
|
|
8
|
+
`)}`);return U(l,()=>{let e=$(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 Sr={class:`wb-sidebar`},Cr={class:`wb-section`},wr=[`disabled`],Tr=[`aria-expanded`,`title`,`onClick`,`onKeydown`],Er=[`title`],Dr={class:`wb-pill wb-task-group__count`},Or=[`data-task-id`,`data-group-path`,`title`,`aria-pressed`,`onClick`,`onKeydown`,`onMousedown`],kr={class:`wb-task-item__body`},Ar=[`title`],jr=[`title`],Mr={class:`wb-task-item__action-group`},Nr=[`title`,`aria-label`,`onClick`],Pr=[`onClick`,`title`,`aria-label`],Fr={key:0,class:`wb-empty wb-empty--rich`},Ir={class:`wb-empty__art`,"aria-hidden":`true`},Lr={class:`wb-empty__title`},Rr={class:`wb-empty__hint`},zr={class:`wb-empty__cta`},Br=5,Vr=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}=xr(o(()=>s.tasks),u),h=o(()=>$(s.currentProject.path));function _(e){return!!e.projectPath&&$(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=q(null),S=q(null),E=q(null),D=q(null),k=q(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)<Br)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`,Sr,[i(`section`,Cr,[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,wr),i(`ul`,{class:v([`wb-task-list`,{"is-grouped":a(d).hasMultiple}])},[(T(!0),t(O,null,fe(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(K(e=>a(p)(r.path),[`prevent`]),[`enter`]),N(K(e=>a(p)(r.path),[`prevent`]),[`space`])]},[l(s,{class:`wb-task-group__caret`},{default:z(()=>[(T(),C(ge(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,Er),i(`span`,Dr,e(r.tasks.length),1)],42,Tr)):R(``,!0),a(f)(r.path)?R(``,!0):(T(!0),t(O,{key:1},fe(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(K(e=>c(`select-task`,u),[`prevent`]),[`enter`]),N(K(e=>c(`select-task`,u),[`prevent`]),[`space`])],onMousedown:e=>re(e,u,r.path,e.currentTarget)},[i(`div`,kr,[i(`div`,{class:`wb-task-item__title`,title:y(u)},e(y(u)),9,Ar)]),x(u)?(T(),t(`span`,{key:0,class:`wb-task-item__running-dot`,title:a(X)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,jr)):R(``,!0),i(`div`,Mr,[i(`button`,{class:`wb-task-item__copy`,title:a(X)(`@WORKBENCH:复制任务`),"aria-label":a(X)(`@WORKBENCH:复制任务`),onClick:K(e=>c(`copy-task`,u),[`stop`]),onKeydown:o[1]||=K(()=>{},[`stop`])},[l(s,null,{default:z(()=>[l(a(P))]),_:1})],40,Nr),x(u)?R(``,!0):(T(),t(`button`,{key:0,class:`wb-task-item__del`,onClick:K(e=>c(`delete-task`,u),[`stop`]),onKeydown:o[2]||=K(()=>{},[`stop`]),title:a(X)(`@WORKBENCH:删除`),"aria-label":a(X)(`@WORKBENCH:删除`)},[l(s,null,{default:z(()=>[l(a(V))]),_:1})],40,Pr))])],42,Or))),128))],64))),128)),n.tasks.length===0?(T(),t(`li`,Fr,[i(`div`,Ir,[l(s,null,{default:z(()=>[l(a(I))]),_:1})]),i(`div`,Lr,e(a(X)(`@WORKBENCH:暂无任务`)),1),i(`div`,Rr,e(a(X)(`@WORKBENCH:点击上方按钮新建`)),1),i(`div`,zr,[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 Hr(){let e=q([]),t=q([]),n=q(``),r=q(!1),i=q(!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}}var Ur=[0,5,10,15,30,60].map(e=>e*60*1e3),Wr=6e5;function Gr(e){let t=Number(e);return Ur.includes(t)?t:Wr}function Kr(e){return e?e>=36e5?`@WORKBENCH:每 {n} 小时报告`:`@WORKBENCH:每 {n} 分钟报告`:`@WORKBENCH:关闭自动报告`}function qr(e){return e?{n:Math.round(e>=36e5?e/36e5:e/6e4)}:{}}function Jr(e){switch(e){case`NO_MODEL`:return`@WORKBENCH:没有可用的 AI 模型,只记录了任务事实`;case`LLM_TIMEOUT`:return`@WORKBENCH:生成超时,只记录了任务事实`;case`LLM_EMPTY`:return`@WORKBENCH:模型没有返回正文,只记录了任务事实`;case`LLM_FAILED`:return`@WORKBENCH:生成失败,只记录了任务事实`;default:return`@WORKBENCH:生成失败,只记录了任务事实`}}function Yr(e){if(e==null||e===``)return null;let t=Number(e);if(!Number.isFinite(t))return null;let n=Math.round(t);return n>=0&&n<=100?n:null}function Xr(e){return typeof e!=`number`||!Number.isFinite(e)||e<=0?null:Math.floor(e)}var Zr=`@WORKBENCH:AI 估计`,Qr=`@WORKBENCH:百分比是主 Agent 根据任务思考与工具调用推测的大致估计,不是精确进度`;B();var $r=1e5;function ei(){let e=q(!0),t=q([]),n=q([]),r=q($r),i=q([]),a=q(null),o=q(!1),s=q(!1),c=q(!1),l=q(``),u=q({}),d=q([]),f=q(!1),p=q(!1),m=q(Wr);async function h(s=!1){try{let c=await fetch(`/api/workbench/orchestrator`,{cache:`no-store`}).then(e=>e.json());return c?.success?(e.value=c.active!==!1,Number.isInteger(c.maxInstructionChars)&&c.maxInstructionChars>0&&(r.value=c.maxInstructionChars),t.value=Array.isArray(c.instructions)?c.instructions:[],n.value=Array.isArray(c.activity)?c.activity:[],i.value=Array.isArray(c.running)?c.running:[],We().setRunning(i.value.length),a.value=c.updatedAt||null,l.value=typeof c.defaultPrompt==`string`?c.defaultPrompt:``,u.value=c.projectPrompts&&typeof c.projectPrompts==`object`?c.projectPrompts:{},m.value=Gr(c.reportIntervalMs),o.value=!0,!0):(s||L.error(c?.error||X(`@WORKBENCH:读取编排状态失败`)),!1)}catch(e){return s||L.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function g(e=!1){if(f.value)return!1;f.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/reports`,{cache:`no-store`}).then(e=>e.json());return t?.success?(d.value=Array.isArray(t.reports)?t.reports:[],!0):(e||L.error(t?.error||X(`@WORKBENCH:读取进度报告失败`)),!1)}catch(t){return e||L.error(X(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{f.value=!1}}async function _(){if(p.value)return null;p.value=!0;try{let e=String(Pe().locale||``).startsWith(`en`)?`en`:`zh`,t=await fetch(`/api/workbench/orchestrator/report`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({locale:e})}).then(e=>e.json());return t?.success?t.report?(d.value=[t.report,...d.value].slice(0,20),t.report):(L.info(X(`@WORKBENCH:当前没有正在执行的任务,没有可汇报的进度`)),null):(L.error(t?.error||X(`@WORKBENCH:生成进度报告失败`)),null)}catch(e){return L.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{p.value=!1}}async function v(e){try{let t=await fetch(`/api/workbench/orchestrator/report-interval`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({intervalMs:e})}).then(e=>e.json());return t?.success?(m.value=Gr(t.reportIntervalMs),!0):(L.error(t?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return L.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function y(e){try{let t=await fetch(`/api/workbench/orchestrator/default-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:e})}).then(e=>e.json());return t?.success?(l.value=typeof t.defaultPrompt==`string`?t.defaultPrompt:``,L.success(X(`@WORKBENCH:已保存全局预设提示词`)),!0):(L.error(t?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return L.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function b(e,t){try{let n=await fetch(`/api/workbench/orchestrator/project-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({projectPath:e,prompt:t})}).then(e=>e.json());return n?.success?(u.value=n.projectPrompts&&typeof n.projectPrompts==`object`?n.projectPrompts:{},L.success(X(`@WORKBENCH:已保存项目预设提示词`)),!0):(L.error(n?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return L.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function x(t){if(s.value)return!1;let n=e.value;e.value=t,s.value=!0;try{let r=await fetch(`/api/workbench/orchestrator/state`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({active:t})}).then(e=>e.json());return r?.success?(e.value=r.active!==!1,L.success(e.value?X(`@WORKBENCH:已恢复调度`):X(`@WORKBENCH:已暂停调度,派发将只建任务不执行`)),!0):(e.value=n,L.error(r?.error||X(`@WORKBENCH:切换调度状态失败`)),!1)}catch(t){return e.value=n,L.error(X(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{s.value=!1}}async function ee(e){if(c.value)return null;c.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/dispatch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e.text,projectPath:e.projectPath||``,autoRun:e.autoRun!==!1,useDefaultPrompt:e.useDefaultPrompt!==!1,executor:e.executor,attachments:(e.attachments||[]).map(e=>({id:e.id,ext:e.ext,originalName:e.originalName}))})}).then(e=>e.json());return t?.success?(await h(!0),{task:t.task||null,ran:!!t.ran}):(L.error(t?.error||X(`@WORKBENCH:派发失败`)),null)}catch(e){return L.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{c.value=!1}}return{active:e,instructions:t,activity:n,running:i,updatedAt:a,loaded:o,togglingSchedule:s,dispatching:c,maxInstructionChars:r,defaultPrompt:l,projectPrompts:u,reports:d,loadingReports:f,generatingReport:p,reportIntervalMs:m,loadOrchestrator:h,setSchedulingActive:x,dispatch:ee,saveDefaultPrompt:y,saveProjectPrompt:b,loadReports:g,generateReport:_,setReportInterval:v}}A(),B(),u(),F();var ti={class:`proj`},ni={class:`proj__head`},ri={class:`proj__title`},ii={class:`proj__count`},ai={key:0,class:`proj__tools`},oi={class:`proj__search`},si=[`placeholder`,`aria-label`],ci={class:`proj__toggles`},li=[`aria-pressed`,`title`],ui=[`aria-pressed`,`title`],di={class:`proj__list`},fi=[`title`],pi={class:`proj-item__row1`},mi={class:`proj-item__name`},hi={key:0,class:`proj-item__running`,"aria-hidden":`true`},gi={class:`proj-item__num`},_i={key:0,class:`proj-item__row2`},vi={class:`proj-item__running-text`},yi=[`title`],bi={class:`proj-item__bar`,"aria-hidden":`true`},xi={class:`proj-item__progress-text`},Si=[`title`,`onClick`,`onKeydown`],Ci={class:`proj-item__row1`},wi={class:`proj-item__name`},Ti={class:`proj-item__signals`},Ei={key:0,class:`proj-item__running`,"aria-hidden":`true`},Di={key:1,class:`proj-item__badge`},Oi={class:`proj-item__row2`},ki={key:0,class:`proj-chip proj-chip--missing`},Ai={key:0,class:`proj-item__branch`},ji={class:`proj-item__branch-name`},Mi={key:1,class:`proj-chip proj-chip--ahead`},Ni={key:2,class:`proj-chip proj-chip--behind`},Pi={key:3,class:`proj-chip proj-chip--dirty`},Fi={class:`proj-item__time`},Ii={key:0,class:`proj-item__row3`},Li={class:`proj-item__bar`,"aria-hidden":`true`},Ri={class:`proj-item__progress-text`},zi={class:`proj-item__actions`},Bi=[`title`,`aria-label`,`onClick`],Vi=[`title`,`aria-label`,`onClick`],Hi=[`title`,`aria-label`,`aria-expanded`,`onClick`],Ui=[`aria-label`],Wi=[`onClick`,`onKeydown`],Gi={class:`proj-menu__icon`},Ki={class:`proj-menu__label`},qi=[`onClick`,`onKeydown`],Ji={class:`proj-menu__icon`},Yi={class:`proj-menu__label`},Xi=[`onClick`,`onKeydown`],Zi={class:`proj-menu__icon`},Qi={class:`proj-menu__label`},$i=[`onClick`,`onKeydown`],ea={class:`proj-menu__icon`},ta={class:`proj-menu__label`},na={class:`proj-menu__title`,role:`presentation`},ra=[`onClick`,`onKeydown`],ia={class:`proj-menu__icon`},aa={class:`proj-menu__label`},oa={key:0,class:`proj-menu__hint`},sa=[`onClick`,`onKeydown`],ca={class:`proj-menu__icon`},la=[`src`],ua={class:`proj-menu__label`},da={class:`proj-menu__hint`},fa=[`onClick`,`onKeydown`],pa={class:`proj-menu__icon`},ma=[`src`],ha={class:`proj-menu__label`},ga=[`onClick`,`onKeydown`],_a={class:`proj-menu__icon`},va={class:`proj-menu__label`},ya=[`onClick`,`onKeydown`],ba={class:`proj-menu__icon`},xa={class:`proj-menu__label`},Sa={key:0,class:`proj-menu__hint`},Ca={key:1,class:`proj-menu__hint`},wa=[`onClick`,`onKeydown`],Ta={class:`proj-menu__icon`},Ea={class:`proj-menu__label`},Da={key:0,class:`proj-empty`},Oa={class:`proj-empty__title`},ka={class:`proj-empty__hint`},Aa={key:1,class:`proj-empty`},ja={class:`proj-empty__title`},Ma=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=q(``),y=q(!1),b=q(!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=q(null),oe=q(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=Ve(),de=q(!1),F=q(null);function I(e){return ue.lastCheckedAt!==null&&!ue.isToolAvailable(e)}async function me(e){le();let t=await Ie(e.path);t.success?L.success(t.message||X(`@WORKBENCH:已在文件管理器中打开文件夹`)):L.error(t.error||X(`@WORKBENCH:打开文件夹失败`))}async function B(e){le();let t=await Ge(e.path);t.success?L.success(t.message||X(`@67CE7:已在终端中打开目录`)):L.error(t.error||X(`@WORKBENCH:打开终端失败`))}async function V(e){le();let t=await Q(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 ge(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 U(e,t,n){if(le(),!await Ke()){L.warning(X(`@67CE7:工具检测失败,请稍后重试`));return}if(!ue.isToolAvailable(t)){F.value=t,de.value=!0;return}let r=await Be(t,e.path,n);r.success?L.success(r.message||X(`@67CE7:已用 {tool} 打开目录`,{tool:He[t]})):L.error(`${X(`@67CE7:打开失败: `)}${r.error??``}`)}return(o,c)=>{let u=g,m=se;return T(),t(`section`,ti,[i(`header`,ni,[i(`h3`,ri,e(a(X)(`@WORKBENCH:项目列表`)),1),i(`span`,ii,[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`,ai,[i(`div`,oi,[l(u,{class:`proj__search-icon`,"aria-hidden":`true`},{default:z(()=>[l(a(p))]),_:1}),W(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,si),[[G,h.value]])]),i(`div`,ci,[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,li),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,ui)])])):R(``,!0),i(`ul`,di,[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(K(e=>f(`select`,null),[`prevent`]),[`enter`]),c[6]||=N(K(e=>f(`select`,null),[`prevent`]),[`space`])]},[i(`div`,pi,[l(u,{class:`proj-item__icon`},{default:z(()=>[l(a(s))]),_:1}),i(`span`,mi,e(a(X)(`@WORKBENCH:全部项目`)),1),D.value.running>0?(T(),t(`span`,hi)):R(``,!0),i(`span`,gi,e(n.projects.length),1)]),D.value.running>0?(T(),t(`div`,_i,[i(`span`,vi,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`,bi,[i(`i`,{class:`proj-item__bar-fill`,style:ae({width:k.value+`%`})},null,4)]),i(`span`,xi,e(a(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:D.value.done,total:D.value.total})),1)],8,yi)):R(``,!0)],42,fi),(T(!0),t(O,null,fe(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(K(e=>f(`select`,o),[`self`,`prevent`]),[`enter`]),N(K(e=>f(`select`,o),[`self`,`prevent`]),[`space`])]},[i(`div`,Ci,[l(u,{class:`proj-item__icon`},{default:z(()=>[l(a(te))]),_:1}),i(`span`,wi,e(o.name),1),i(`span`,Ti,[o.stats.runningJobs>0?(T(),t(`span`,Ei)):R(``,!0),o.isCurrent?(T(),t(`span`,Di,e(a(X)(`@WORKBENCH:当前`)),1)):R(``,!0)])]),i(`div`,Oi,[o.exists===!1?(T(),t(`span`,ki,e(a(X)(`@WORKBENCH:目录不存在`)),1)):(T(),t(O,{key:1},[A(o)?(T(),t(`span`,Ai,[re(o)?(T(),C(Ae,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):R(``,!0),i(`span`,ji,e(A(o)),1)])):R(``,!0),o.git&&o.git.ahead>0?(T(),t(`span`,Mi,`↑`+e(o.git.ahead),1)):R(``,!0),o.git&&o.git.behind>0?(T(),t(`span`,Ni,`↓`+e(o.git.behind),1)):R(``,!0),o.git&&o.git.changed>0?(T(),t(`span`,Pi,`●`+e(o.git.changed),1)):R(``,!0)],64)),i(`span`,Fi,e(a(Hn)(o.stats.lastActiveAt)),1)]),o.stats.total>0?(T(),t(`div`,Ii,[i(`span`,Li,[i(`i`,{class:`proj-item__bar-fill`,style:ae({width:o.stats.progress+`%`})},null,4)]),i(`span`,Ri,e(a(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:o.stats.done,total:o.stats.total})),1)])):R(``,!0),i(`div`,zi,[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:K(e=>ge(o),[`stop`])},[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(pe))]),_:1})],8,Bi)):(T(),t(`button`,{key:1,type:`button`,class:`proj-item__action`,title:a(X)(`@WORKBENCH:打开文件夹`),"aria-label":`${a(X)(`@WORKBENCH:打开文件夹`)} ${o.name}`,onClick:K(e=>me(o),[`stop`])},[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(r))]),_:1})],8,Vi)),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:K(e=>ce(o,e),[`stop`])},[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(x))]),_:1})],10,Hi)]),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(K(e=>me(o),[`prevent`]),[`enter`]),N(K(e=>me(o),[`prevent`]),[`space`])]},[i(`span`,Gi,[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(r))]),_:1})]),i(`span`,Ki,e(a(X)(`@WORKBENCH:在文件管理器中打开`)),1)],40,Wi),i(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>B(o),onKeydown:[N(K(e=>B(o),[`prevent`]),[`enter`]),N(K(e=>B(o),[`prevent`]),[`space`])]},[i(`span`,Ji,[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(d))]),_:1})]),i(`span`,Yi,e(a(X)(`@WORKBENCH:在终端中打开`)),1)],40,qi),i(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>V(o),onKeydown:[N(K(e=>V(o),[`prevent`]),[`enter`]),N(K(e=>V(o),[`prevent`]),[`space`])]},[i(`span`,Zi,[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(ne))]),_:1})]),i(`span`,Qi,e(a(X)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,Xi),i(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>he(o),onKeydown:[N(K(e=>he(o),[`prevent`]),[`enter`]),N(K(e=>he(o),[`prevent`]),[`space`])]},[i(`span`,ea,[l(u,{"aria-hidden":`true`},{default:z(()=>[l(a(P))]),_:1})]),i(`span`,ta,e(a(X)(`@67CE7:复制文件夹名称`)),1)],40,$i),c[8]||=i(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),i(`li`,na,e(a(X)(`@WORKBENCH:用工具打开`)),1),(T(!0),t(O,null,fe(a(qe),n=>(T(),t(`li`,{key:n.id,class:v([`proj-menu__item`,{"is-missing":I(n.id)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(o,n.id),onKeydown:[N(K(e=>U(o,n.id),[`prevent`]),[`enter`]),N(K(e=>U(o,n.id),[`prevent`]),[`space`])]},[i(`span`,ia,[l(Ae,{"icon-class":n.icon,class:v({"icon-invert-dark":n.id===`codex`})},null,8,[`icon-class`,`class`])]),i(`span`,aa,e(a(X)(n.labelKey)),1),I(n.id)?(T(),t(`span`,oa,e(a(X)(`@67CE7:未安装`)),1)):R(``,!0)],42,ra))),128)),i(`li`,{class:v([`proj-menu__item`,{"is-missing":I(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(o,`claude`),onKeydown:[N(K(e=>U(o,`claude`),[`prevent`]),[`enter`]),N(K(e=>U(o,`claude`),[`prevent`]),[`space`])]},[i(`span`,ca,[i(`img`,{src:a(Re),alt:``,class:`proj-menu__img`},null,8,la)]),i(`span`,ua,e(a(X)(`@67CE7:用 Claude Code 打开`)),1),i(`span`,da,e(I(`claude`)?a(X)(`@67CE7:未安装`):a(X)(`@67CE7:默认权限`)),1)],42,sa),i(`li`,{class:v([`proj-menu__item proj-menu__item--danger`,{"is-missing":I(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(o,`claude`,`bypassPermissions`),onKeydown:[N(K(e=>U(o,`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),N(K(e=>U(o,`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[i(`span`,pa,[i(`img`,{src:a(Re),alt:``,class:`proj-menu__img`},null,8,ma)]),i(`span`,ha,e(a(X)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],42,fa),i(`li`,{class:v([`proj-menu__item proj-menu__item--danger`,{"is-missing":I(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(o,`opencode`,`auto`),onKeydown:[N(K(e=>U(o,`opencode`,`auto`),[`prevent`]),[`enter`]),N(K(e=>U(o,`opencode`,`auto`),[`prevent`]),[`space`])]},[i(`span`,_a,[l(Ae,{"icon-class":`opencode`})]),i(`span`,va,e(a(X)(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],42,ga),i(`li`,{class:v([`proj-menu__item`,{"is-missing":I(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(o,`codex`,`sandboxed`),onKeydown:[N(K(e=>U(o,`codex`,`sandboxed`),[`prevent`]),[`enter`]),N(K(e=>U(o,`codex`,`sandboxed`),[`prevent`]),[`space`])]},[i(`span`,ba,[l(Ae,{"icon-class":`codex`,class:`icon-invert-dark`})]),i(`span`,xa,e(a(X)(`@67CE7:用 Codex 打开(自动批准)`)),1),I(`codex`)?(T(),t(`span`,Ca,e(a(X)(`@67CE7:未安装`)),1)):(T(),t(`span`,Sa,e(a(X)(`@67CE7:沙箱内`)),1))],42,ya),i(`li`,{class:v([`proj-menu__item proj-menu__item--danger`,{"is-missing":I(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>U(o,`codex`,`bypass`),onKeydown:[N(K(e=>U(o,`codex`,`bypass`),[`prevent`]),[`enter`]),N(K(e=>U(o,`codex`,`bypass`),[`prevent`]),[`space`])]},[i(`span`,Ta,[l(Ae,{"icon-class":`codex`,class:`icon-invert-dark`})]),i(`span`,Ea,e(a(X)(`@67CE7:用 Codex 打开(完全批准)`)),1)],42,wa)],8,Ui)):R(``,!0)]),_:2},1032,[`visible`]))])],42,Si))),128)),!n.loading&&n.projects.length===0?(T(),t(`li`,Da,[i(`p`,Oa,e(a(X)(`@WORKBENCH:尚无项目`)),1),i(`p`,ka,e(a(X)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):R(``,!0),!n.loading&&n.projects.length>0&&S.value.length===0?(T(),t(`li`,Aa,[i(`p`,ja,e(a(X)(`@WORKBENCH:没有匹配的项目`)),1),i(`button`,{type:`button`,class:`proj-empty__clear`,onClick:E},e(a(X)(`@WORKBENCH:清除筛选`)),1)])):R(``,!0)]),l(Le,{modelValue:de.value,"onUpdate:modelValue":c[7]||=e=>de.value=e,tool:F.value},null,8,[`modelValue`,`tool`])])}}}),[[`__scopeId`,`data-v-4f1136db`]]),Na=[140,170,200,230,260,290,320,350];function Pa(e){return(e||``).replace(/\\/g,`/`).trim().toLowerCase()}function Fa(e){let t=Pa(e),n=2166136261;for(let e=0;e<t.length;e++)n^=t.charCodeAt(e),n=Math.imul(n,16777619);return n^=n>>>16,n=Math.imul(n,2246822507),n^=n>>>13,n=Math.imul(n,3266489909),n^=n>>>16,Na[(n>>>0)%Na.length]}function Ia(e){return{"--tag-hue":String(Fa(e))}}A(),B(),u(),F();var La={class:`kb`},Ra={class:`kb__toolbar`},za={class:`kb__views`,role:`tablist`},Ba=[`aria-selected`],Va=[`aria-selected`],Ha={class:`kb__filters`},Ua={class:`kb__search`},Wa=[`placeholder`,`aria-label`],Ga=[`aria-hidden`],Ka={class:`kb-col__head`},qa={class:`kb-col__title`},Ja={class:`kb-col__count`},Ya={class:`kb-col__list`},Xa=[`data-task-id`,`aria-current`,`onClick`,`onKeydown`],Za=[`title`,`aria-label`,`onClick`],Qa=[`src`,`alt`,`onError`],$a={key:0,class:`kb-card__cover-more`,"aria-hidden":`true`},eo={class:`kb-card__row1`},to=[`title`],no=[`title`],ro={class:`kb-card__time`},io=[`title`],ao=[`title`],oo={key:3,class:`kb-card__live`},so={class:`kb-card__live-meta`},co=[`title`],lo=[`title`],uo={key:2,class:`kb-card__live-pid`},fo={key:3,class:`kb-card__live-silent`},po=[`title`],mo=[`title`],ho={class:`kb-card__live-tag`},go=[`title`],_o={class:`kb-card__live-tag`},vo=[`title`],yo=[`title`],bo={class:`kb-card__reply-text`},xo=[`title`,`onClick`],So={class:`kb-card__actions`},Co=[`title`,`onClick`],wo=[`title`,`aria-label`,`onClick`],To=[`title`,`aria-label`,`onClick`],Eo=[`title`,`aria-label`,`onClick`],Do=[`title`,`aria-label`,`onClick`],Oo={key:0,class:`kb-col__add`},ko={key:1,class:`kb-col__empty`},Ao={key:2,class:`kb-col__more`},jo={key:1,class:`kb__table-wrap`},Mo={class:`kb-table`},No={class:`kb-table__th`},Po={class:`kb-table__th kb-table__th--narrow`},Fo={class:`kb-table__th kb-table__th--time`},Io=[`onClick`,`onKeydown`],Lo={class:`kb-table__td`},Ro=[`title`,`onClick`],zo={class:`kb-table__name`},Bo=[`title`],Vo={key:2,class:`kb-table__live`},Ho=[`title`],Uo={key:1,class:`kb-table__live-silent`},Wo={key:3,class:`kb-table__live kb-table__live--reply`},Go=[`title`],Ko={class:`kb-table__td`},qo={class:`kb-table__td kb-table__td--num`},Jo=[`title`],Yo={class:`kb-table__dur`},Xo=[`title`],Zo={key:0},Qo={class:`kb-table__td kb-table__empty`,colspan:`3`},$o=`wb.boardView.v1`,es=30,ts=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=q((()=>{try{return localStorage.getItem($o)===`list`?`list`:`kanban`}catch{return`kanban`}})());U(u,e=>{try{localStorage.setItem($o,e)}catch{}});let d=q(``),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=q(es);U(d,()=>{h.value=es});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=q(!1);ie(()=>{requestAnimationFrame(()=>requestAnimationFrame(()=>{b.value=!0}))});function x(e){return Kn(e)}function ee(e,t){return x(t).localeCompare(x(e))}function S(e){return qn(e)}function E(e){return Jn(e)}function D(e){return Qn(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=Xn(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=q(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=q(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 I(){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`,La,[i(`div`,Ra,[i(`div`,za,[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,Ba),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,Va)]),i(`div`,Ha,[i(`div`,Ua,[l(s,{class:`kb__search-icon`},{default:z(()=>[l(a(p))]),_:1}),W(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,Wa),[[G,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,fe(_.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`,Ka,[i(`span`,{class:v([`kb-col__dot`,{"is-live":r.total>0}]),"aria-hidden":`true`},null,2),i(`h3`,qa,e(a(X)(r.labelKey)),1),i(`span`,Ja,e(r.total),1)]),i(`ul`,Ya,[(T(!0),t(O,null,fe(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(K(e=>c(`open-task`,r),[`prevent`]),[`enter`]),N(K(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:K(e=>F(r),[`stop`]),onKeydown:o[3]||=K(()=>{},[`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,Qa),M(r).length>1?(T(),t(`span`,$a,` +`+e(M(r).length-1),1)):R(``,!0)],40,Za)):R(``,!0),i(`div`,eo,[n.showProjectLabel&&ne(r)?(T(),t(`span`,{key:0,class:`kb-card__project-chip`,style:ae(a(Ia)(r.projectPath)),title:r.projectPath},e(ne(r)),13,to)):R(``,!0),i(`p`,{class:`kb-card__title`,title:A(r)},e(A(r)||a(X)(`@WORKBENCH:未命名任务`)),9,no),i(`span`,ro,e(a(Hn)(S(r))),1)]),E(r)?(T(),t(`p`,{key:1,class:`kb-card__spent`,title:D(r)},e(a(Yn)(r)),9,io)):R(``,!0),r.autoCompleted?(T(),t(`p`,{key:2,class:`kb-card__auto-done`,title:te(r)},e(a(X)(`@WORKBENCH:AI 判定完成`)),9,ao)):R(``,!0),r.live?(T(),t(`div`,oo,[i(`p`,so,[j(r)?(T(),t(`span`,{key:0,class:`kb-card__live-agent`,title:a(Me)(j(r))},[l(Ue,{executor:j(r),class:`kb-card__live-agent-icon`},null,8,[`executor`])],8,co)):R(``,!0),i(`span`,null,e(a(Xn)(r)),1),r.live.toolCallCount?(T(),t(`span`,{key:1,title:r.live.toolMix||``},e(a(X)(`@WORKBENCH:工具 {n} 次`,{n:r.live.toolCallCount})),9,lo)):R(``,!0),r.live.pid?(T(),t(`span`,uo,`PID `+e(r.live.pid),1)):R(``,!0),a(Xr)(r.live.silentMs)===null?R(``,!0):(T(),t(`span`,fo,e(a(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:a(Un)(a(Xr)(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,po)):R(``,!0),r.live.lastThought?(T(),t(`p`,{key:1,class:`kb-card__live-line is-thought`,title:r.live.lastThought},[i(`span`,ho,e(a(X)(`@WORKBENCH:最近思考`)),1),w(e(r.live.lastThought),1)],8,mo)):R(``,!0),r.live.lastLine?(T(),t(`p`,{key:2,class:`kb-card__live-line`,title:r.live.lastLine},[i(`span`,_o,e(a(X)(`@WORKBENCH:最新回复`)),1),w(e(r.live.lastLine),1)],8,go)):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(Ue,{executor:j(r),class:`kb-card__quote-agent-icon`},null,8,[`executor`])],8,yo)):R(``,!0),i(`span`,bo,e(r.lastReply),1)],8,vo)):R(``,!0),re(r)&&r.runningJobs===0?(T(),t(`button`,{key:5,type:`button`,class:`kb-card__retry`,title:a(X)(`@WORKBENCH:重新执行这条任务`),onClick:K(e=>c(`run-task`,r),[`stop`]),onKeydown:o[4]||=K(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:重试`)),41,xo)):R(``,!0),i(`div`,So,[r.runningJobs===0?(T(),t(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:a(X)(`@WORKBENCH:执行`),onClick:K(e=>c(`run-task`,r),[`stop`]),onKeydown:o[5]||=K(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:执行`)),41,Co)):(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:K(e=>c(`stop-task`,r),[`stop`]),onKeydown:o[6]||=K(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:停止`)),41,wo)),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:K(e=>c(`reopen-task`,r),[`stop`]),onKeydown:o[8]||=K(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:撤销`)),41,Eo)):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:K(e=>c(`complete-task`,r),[`stop`]),onKeydown:o[7]||=K(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:完成`)),41,To)),i(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:a(X)(`@WORKBENCH:删除`),"aria-label":a(X)(`@WORKBENCH:删除`),onClick:K(e=>c(`delete-task`,r),[`stop`]),onKeydown:o[9]||=K(()=>{},[`stop`])},`×`,40,Do)])],42,Xa))),128)),r.key===`todo`?(T(),t(`li`,Oo,[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`,ko,[i(`span`,null,e(a(X)(`@WORKBENCH:暂无任务`)),1)])):R(``,!0),r.hidden>0?(T(),t(`li`,Ao,[i(`button`,{type:`button`,class:`kb-col__more-btn`,onClick:o[11]||=e=>h.value+=es},e(a(X)(`@WORKBENCH:显示更早的 {n} 条`,{n:Math.min(es,r.hidden)})),1)])):R(``,!0)])],10,Ga))),128))],6)):(T(),t(`div`,jo,[i(`table`,Mo,[i(`thead`,null,[i(`tr`,null,[i(`th`,No,e(a(X)(`@WORKBENCH:任务`)),1),i(`th`,Po,e(a(X)(`@WORKBENCH:状态`)),1),i(`th`,Fo,e(a(X)(`@WORKBENCH:时间`)),1)])]),i(`tbody`,null,[(T(!0),t(O,null,fe(k.value,r=>(T(),t(`tr`,{key:r.id,class:`kb-table__row`,tabindex:`0`,onClick:e=>c(`open-task`,r),onKeydown:[N(K(e=>c(`open-task`,r),[`prevent`]),[`enter`]),N(K(e=>c(`open-task`,r),[`prevent`]),[`space`])]},[i(`td`,Lo,[M(r).length>0?(T(),t(`button`,{key:0,type:`button`,class:`kb-table__shots`,title:L(M(r)[0]),onClick:K(e=>F(r),[`stop`]),onKeydown:o[12]||=K(()=>{},[`stop`])},e(a(X)(`@WORKBENCH:{n} 张图`,{n:M(r).length})),41,Ro)):R(``,!0),i(`span`,zo,e(A(r)||a(X)(`@WORKBENCH:未命名任务`)),1),n.showProjectLabel&&ne(r)?(T(),t(`span`,{key:1,class:`kb-table__project`,style:ae(a(Ia)(r.projectPath)),title:r.projectPath},e(ne(r)),13,Bo)):R(``,!0),r.live?(T(),t(`span`,Vo,[j(r)?(T(),t(`span`,{key:0,class:`kb-table__agent`,title:a(Me)(j(r))},[l(Ue,{executor:j(r),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Ho)):R(``,!0),w(` `+e(oe(r))+` `,1),a(Xr)(r.live.silentMs)===null?R(``,!0):(T(),t(`span`,Uo,e(a(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:a(Un)(a(Xr)(r.live.silentMs))})),1))])):r.lastReply?(T(),t(`span`,Wo,[j(r)?(T(),t(`span`,{key:0,class:`kb-table__agent`,title:a(Me)(j(r))},[l(Ue,{executor:j(r),class:`kb-table__agent-icon`},null,8,[`executor`])],8,Go)):R(``,!0),w(e(r.lastReply),1)])):R(``,!0)]),i(`td`,Ko,[i(`span`,{class:v([`kb-table__status`,`is-`+r.column])},e(a(X)(f.find(e=>e.key===r.column).labelKey)),3)]),i(`td`,qo,[i(`span`,{class:`kb-table__time`,title:D(r)},[E(r)?(T(),t(O,{key:0},[i(`span`,Yo,e(a(Yn)(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,Xo),o[15]||=i(`span`,{class:`kb-table__time-sep`,"aria-hidden":`true`},`·`,-1)],64)):R(``,!0),i(`span`,null,e(a(Hn)(S(r))),1)],8,Jo)])],40,Io))),128)),k.value.length===0?(T(),t(`tr`,Zo,[i(`td`,Qo,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:I},null,8,[`url-list`,`initial-index`])):R(``,!0)])}}}),[[`__scopeId`,`data-v-efc67236`]]);A(),B(),u();var ns=[`title`,`aria-label`],rs={class:`tep__btn-name`},is={class:`tep__item`},as={class:`tep__item-name`},os=[`title`],ss={key:2,class:`tep__item-missing`},cs=Z(b({__name:`TaskExecutorPicker`,props:{title:{}},setup(r){let o=r,{active:s,availability:c,choose:u,executorModelText:d,executorModelTitle:f}=mr(),p=Ve();ie(()=>{p.fetchExecutorModels()});function m(){return[o.title,f(s.value)].filter(Boolean).join(` · `)}return(r,o)=>{let p=g,h=n,_=ye,v=D;return T(),C(v,{trigger:`click`,class:`tep`,onCommand:a(u)},{dropdown:z(()=>[l(_,null,{default:z(()=>[(T(!0),t(O,null,fe(a(Ne),n=>(T(),C(h,{key:n.id,command:n.id,disabled:!a(c)[n.id]},{default:z(()=>[i(`span`,is,[l(Ue,{executor:n.id,class:`tep__item-icon`},null,8,[`executor`]),i(`span`,as,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,os)):R(``,!0),a(s)===n.id?(T(),C(p,{key:1,class:`tep__item-check`},{default:z(()=>[l(a(_e))]),_:1})):a(c)[n.id]?R(``,!0):(T(),t(`span`,ss,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(Ue,{executor:a(s),class:`tep__btn-icon`},null,8,[`executor`]),i(`span`,rs,e(a(Me)(a(s))),1),l(p,{class:`tep__btn-caret`},{default:z(()=>[l(a(j))]),_:1})],8,ns)]),_:1},8,[`onCommand`])}}}),[[`__scopeId`,`data-v-beca42f2`]]);A(),B(),u(),F();var ls={class:`acs__head`},us=[`title`,`aria-label`],ds={class:`acs__title`},fs=[`title`,`aria-label`],ps={class:`acs__convs`},ms={class:`acs__chat`},hs=[`data-theme`],gs={key:0,class:`acs__foot`},_s={key:0,class:`acs__notice`},vs={class:`acs__foot-label`},ys={class:`acs__foot-hint`},bs=Z(b({__name:`AgentChatSurface`,props:{title:{},active:{type:Boolean},allowDispatch:{type:Boolean},dispatchUseDefaultPrompt:{type:Boolean},placeholder:{}},setup(n){let r=n,{active:s}=mr(),c=Pe(),{theme:u}=ze(),d=o(()=>u.value===`dark`?`dark`:`light`),{sessions:p,sessionsLoading:m,currentSessionId:h,messages:g,isStreaming:_,questionPanel:y,answeringQuestion:b,isSessionGenerating:x,currentEngine:ee,pendingEngine:w,isEngineLocked:E,pickEngine:D,loadSessions:te,loadSession:k,deleteSession:A,renameSession:ne,newSession:re,sendMessage:ae,retryTurn:j,answerQuestion:oe,stop:se,inputContextUsage:ce,queuedMessages:le,queuePaused:M,removeQueuedMessage:ue,flushQueued:de}=it(),N=o(()=>E.value?ee.value:w.value);function P(e){E.value||D(e)}let F=o(()=>r.allowDispatch!==!1&&N.value!==`gai`),I=o(()=>Ye(p.value,x)),fe=Je(),z=$e(),pe=nt(),me=o(()=>I.value.find(e=>e.id===h.value)?.title||``),B=q(null),{width:V,narrow:he}=ot(B),H=q(`chat`),ge=q(null);function _e(e=!0){ge.value?.scrollToBottom?.(e)}async function ve(e){let t=c.aiRequestBudget?.maxUserChars||0;t>0&&e.text.length>t&&L.warning(X(`@WORKBENCH:消息较长({n} 字符),超出部分会被省略后进入上下文 —— 大材料建议存成文件,在消息里给出文件路径`,{n:e.text.length.toLocaleString()})),await ae(e.text,e.files,{allowDispatch:r.allowDispatch===!0,dispatchExecutor:s.value,dispatchUseDefaultPrompt:r.dispatchUseDefaultPrompt!==!1}),await f(),_e()}function G(e){k(e),H.value=`chat`}function ye(){re(),H.value=`chat`}return U(()=>g.value.length,()=>{f(()=>_e(!1))}),U(()=>r.active,e=>{e&&(te().catch(()=>{}),f(()=>_e(!1)))}),U(he,e=>{e||(H.value=`chat`)}),ie(()=>{te().catch(()=>{}),f(()=>_e(!1))}),(r,o)=>(T(),t(`div`,{ref_key:`rootRef`,ref:B,class:`acs`},[i(`div`,ls,[a(he)&&H.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=>H.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,us)):R(``,!0),i(`span`,ds,e(n.title||a(X)(`@WORKBENCH:g ai 对话`)),1),o[4]||=i(`span`,{class:`acs__spacer`},null,-1),!a(he)||H.value===`chat`?(T(),C(dt,{key:1,class:`acs__engine`,engine:N.value,locked:a(E),onSelect:P},null,8,[`engine`,`locked`])):R(``,!0),!a(he)||H.value===`chat`?(T(),C(ft,{key:2,class:`acs__copy`,messages:a(g),title:me.value,engine:a(et)(N.value)},null,8,[`messages`,`title`,`engine`])):R(``,!0),a(he)&&H.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=>H.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-5aa33822><line x1="8" y1="6" x2="21" y2="6" data-v-5aa33822></line><line x1="8" y1="12" x2="21" y2="12" data-v-5aa33822></line><line x1="8" y1="18" x2="21" y2="18" data-v-5aa33822></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-5aa33822></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-5aa33822></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-5aa33822></line></svg>`,1)]],8,fs)):R(``,!0)]),i(`div`,{class:v([`acs__body`,{"is-wide":!a(he)}])},[W(i(`div`,ps,[l(a(ke),{"show-search":!0,items:I.value,"active-id":a(h),loading:a(m),labels:a(fe),onSelect:G,onNew:ye,onRename:a(ne),onDelete:a(A)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[J,!a(he)||H.value===`list`]]),W(i(`div`,ms,[l(a(Ee),{ref_key:`chatRef`,ref:ge,"show-input":!1,messages:a(g),"assistant-name":a(Qe),"assistant-avatar":a(rt),theme:d.value,question:a(y),"question-submitting":a(b),"question-labels":a(z),"plan-config":{labels:{title:a(X)(`@AGENT:计划`),raw:a(X)(`@AGENT:原始参数`)}},"message-rail-config":a(Xe),"message-meta-config":a(tt),onAnswer:a(oe),onRetry:a(j)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`message-rail-config`,`message-meta-config`,`onAnswer`,`onRetry`])],512),[[J,!a(he)||H.value===`chat`]]),a(V)>0?(T(),t(`div`,{key:0,class:`acs__composer acu-root`,"data-theme":d.value},[l(a(Oe),{generating:a(_),"allow-queue":!0,queued:a(le),"queue-paused":a(M),"queue-labels":a(pe),placeholder:n.placeholder||(a(_)?a(X)(`@AGENT:生成中,发送后会排队,等本轮跑完自动接上…`):a(X)(`@AGENT:输入消息,Enter 发送`)),"upload-config":{accept:a(Ze)},"context-usage":a(ce),onSend:ve,onStop:a(se),onUnqueue:a(ue),onFlushQueued:a(de)},null,8,[`generating`,`queued`,`queue-paused`,`queue-labels`,`placeholder`,`upload-config`,`context-usage`,`onStop`,`onUnqueue`,`onFlushQueued`])],8,hs)):R(``,!0)],2),n.allowDispatch&&H.value===`chat`?(T(),t(`div`,gs,[F.value?(T(),t(`p`,_s,e(a(X)(`@WORKBENCH:当前引擎「{name}」只能对话,不能派发任务 —— 切到内置 g ai 才能派活`,{name:a(et)(N.value)})),1)):(T(),t(O,{key:1},[i(`span`,vs,e(a(X)(`@WORKBENCH:派发执行器`)),1),l(cs,{title:a(X)(`@WORKBENCH:它派出去的任务由这个执行器跑(与执行按钮的临时切换共用)`)},null,8,[`title`]),i(`span`,ys,e(a(X)(`@WORKBENCH:任务会落到看板,跑完有完成提示`)),1)],64))])):R(``,!0)],512))}}),[[`__scopeId`,`data-v-5aa33822`]]);A(),B(),u(),F();var xs=[`title`,`aria-label`],Ss={class:`oc__rail-text`},Cs={class:`oc__head`},ws={class:`oc__title`},Ts=[`disabled`,`title`],Es=[`title`,`aria-label`],Ds={class:`oc__state-label`},Os={class:`oc__state-value`},ks={class:`oc__state-meta`},As=[`aria-label`],js=[`aria-selected`],Ms=[`aria-selected`],Ns={class:`oc__report-head`},Ps={class:`oc__panel-title`},Fs=[`value`,`title`,`aria-label`],Is=[`value`],Ls=[`disabled`,`title`],Rs={class:`oc__report-list`},zs={key:0,class:`rp`},Bs={class:`rp__head`},Vs=[`title`],Hs={class:`rp__count`},Us={class:`rp__time`},Ws=[`title`],Gs=[`aria-valuenow`,`aria-label`],Ks={class:`rp__percent`},qs={class:`rp__percent-tag`},Js={key:1,class:`rp__body`},Ys=[`title`],Xs=[`aria-expanded`,`title`],Zs=[`title`],Qs={class:`oc__sect-meta`},$s={class:`oc__sect-brief`},ec={class:`rp__tasks`},tc={class:`rpt__title`},nc={class:`rpt__meta`},rc={key:0,class:`rpt__project`},ic={key:1,class:`rpt__agent`},ac=[`title`],oc={key:3,class:`rpt__silent`},sc=[`title`],cc=[`aria-valuenow`,`aria-label`],lc={class:`rpt__percent`},uc=[`title`],dc={class:`rpt__tag`},fc=[`title`],pc={class:`rpt__tag`},mc=[`title`],hc={class:`rpt__tag`},gc=[`title`],_c=[`aria-expanded`,`title`],vc={class:`oc__sect-title`},yc={class:`oc__sect-meta`},bc={class:`oc__sect-brief`},xc={class:`oc__history-list`},Sc=[`onClick`],Cc={class:`oc__history-time`},wc={class:`oc__history-pct`},Tc={class:`oc__history-sum`},Ec=[`aria-expanded`,`title`],Dc={class:`oc__sect-title`},Oc={class:`oc__sect-meta`},kc={class:`oc__git-name`},Ac={key:0,class:`oc__sect-brief`},jc={class:`oc__git-list`},Mc={class:`oc__git-label`},Nc={class:`oc__git-label`},Pc={class:`oc__git-value`},Fc={class:`oc__git-label`},Ic={class:`oc__git-value`},Lc=[`placeholder`],Rc={key:0},zc={key:1},Bc={class:`oc__compose-foot`},Vc=[`disabled`,`title`,`aria-label`],Hc=[`title`,`aria-label`],Uc=[`title`],Wc=[`title`],Gc=[`disabled`],Kc={class:`oc__hint`},qc=`wb.ocMode.v2`,Jc=`/api/workbench/orchestrator/attachments`,Yc=`wb.ocInputHeight.v1`,Xc=76,Zc=20,Qc=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=q(``),p=q(!0),h=q(!0),{active:b}=mr(),x=q((()=>{try{return localStorage.getItem(qc)===`chat`?`chat`:`command`}catch{return`command`}})());function ee(e){x.value=e;try{localStorage.setItem(qc,e)}catch{}}let S=q([]),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}=lr(),ue=o(()=>te(`draft`)),de=q(!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 I(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)),_e=o(()=>!!V.value||H.value),ve=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:未设置`)}),ye=o(()=>d.value.trim().length),be=o(()=>c.maxInstructionChars||1e5),xe=o(()=>ye.value>be.value),Se=o(()=>!xe.value&&ye.value>=be.value*.9),we=o(()=>d.value.trim().length>0&&!c.dispatching&&!ue.value&&!xe.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(Yc);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=Xc?Math.round(t):null}catch{return null}}let De=q(null),Oe=q(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<=Zc&&n.bottom-e.clientY<=Zc}function Ne(){Ae=!1}function Pe(e){let t=Math.round(e.offsetHeight);if(!(t<Xc||t===Oe.value)){Oe.value=t;try{localStorage.setItem(Yc,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=q(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 ze=o(()=>(c.reports||[]).find(Re)||null),Q=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 ze.value}),Be=o(()=>!!Q.value&&!Re(Q.value)),Ve=o(()=>(c.reports||[]).length?Ie.value>0?X(`@WORKBENCH:这批任务还没有进度报告`):X(`@WORKBENCH:当前没有正在执行的任务`):X(`@WORKBENCH:暂无进度报告`)),$=o(()=>(c.reports||[]).length?X(`@WORKBENCH:最新那份报告讲的任务已经跑完了,要回看可以从历史报告里点开`):``);function He(e){Fe.value=e.id}let Ue=q(null),We=q(!1),Ge=q(!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;U(Ue,e=>{Je?.disconnect(),Je=null,e&&(Je=new ResizeObserver(()=>Ke()),Je.observe(e))}),_(()=>{Je?.disconnect(),Je=null}),U(()=>Q.value?.id,()=>{We.value=!1,Ge.value=!1,f(Ke)});function Ye(e){let t=Yr(e.percent);return t===null?``:t+`%`}let Xe=o(()=>Yr(Q.value?.percent)),Ze=o(()=>(Q.value?.tasks||[]).map(e=>({...e,pct:Yr(e.percent),silent:Xr(e.silentMs)})));function Qe(e){let t=String(e.text||``).replace(/\s+/g,` `).trim();return t?t.length>42?t.slice(0,42)+`…`:t:e.errorCode?X(Jr(e.errorCode)):X(`@WORKBENCH:当时没有任务在执行`)}function $e(e){return e.errorCode?X(Jr(e.errorCode)):e.tasks.length?X(`@WORKBENCH:模型没有返回内容`):X(`@WORKBENCH:生成这份报告时没有任务在执行`)}function et(e){let t=e.target,n=Number(t.value);Ur.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=q(rt(nt.history)),at=q(rt(nt.git)),ot=q(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&&!Q.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`,Ss,e(a(X)(`@WORKBENCH:主 Agent 控制台`)),1)],8,xs)):R(``,!0),W(i(`header`,Cs,[i(`span`,{class:v([`oc__live`,{"is-off":!n.active}]),"aria-hidden":`true`},null,2),i(`h3`,ws,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,Ts),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,Es)],512),[[J,!n.collapsed]]),W(i(`div`,{class:v([`oc__state`,{"is-paused":!n.active}])},[i(`span`,Ds,e(a(X)(`@WORKBENCH:调度状态`)),1),i(`span`,Os,e(n.active?a(X)(`@WORKBENCH:调度中`):a(X)(`@WORKBENCH:已暂停`)),1),i(`span`,ks,e(a(X)(`@WORKBENCH:{n} 个执行中`,{n:Ie.value})),1)],2),[[J,!n.collapsed]]),W(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,js),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,Ms)],8,As),[[J,!n.collapsed]]),W(l(bs,{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`]),[[J,!n.collapsed&&x.value===`chat`]]),W(i(`div`,{class:v([`oc__report`,{"is-empty":!Q.value}])},[i(`div`,Ns,[i(`p`,Ps,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,fe(a(Ur),n=>(T(),t(`option`,{key:n,value:String(n)},e(a(X)(a(Kr)(n),a(qr)(n))),9,Is))),128))],40,Fs),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,Ls)]),i(`ul`,Rs,[Q.value?(T(),t(`li`,zs,[i(`div`,Bs,[i(`span`,{class:v([`rp__trigger`,{"is-auto":Q.value.trigger===`auto`}])},e(Q.value.trigger===`auto`?a(X)(`@WORKBENCH:自动`):a(X)(`@WORKBENCH:手动`)),3),Be.value?(T(),t(`span`,{key:0,class:`rp__stale`,title:a(X)(`@WORKBENCH:这份报告讲的任务已经跑完了,内容只反映生成那一刻的情况`)},e(a(X)(`@WORKBENCH:已结束`)),9,Vs)):R(``,!0),i(`span`,Hs,e(a(X)(`@WORKBENCH:{n} 个任务进行中`,{n:Q.value.tasks.length})),1),i(`span`,Us,e(a(Gn)(Q.value.at)),1)]),Xe.value===null?R(``,!0):(T(),t(`div`,{key:0,class:`rp__progress`,title:a(X)(a(Qr))},[i(`span`,{class:`rp__bar`,role:`progressbar`,"aria-valuenow":Xe.value,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":a(X)(a(Zr))},[i(`i`,{class:`rp__bar-fill`,style:ae({width:Xe.value+`%`})},null,4)],8,Gs),i(`span`,Ks,[i(`span`,qs,e(a(X)(a(Zr))),1),w(e(Xe.value)+`% `,1)])],8,Ws)),Q.value.text?(T(),t(`div`,Js,[i(`p`,{ref_key:`textEl`,ref:Ue,class:v([`rp__text`,{"is-clamped":Ge.value&&!We.value,"is-expanded":We.value}])},e(Q.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:Q.value.errorDetail},e($e(Q.value)),9,Ys)),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(ge(ot.value?a(j):a(oe))))]),_:1}),i(`span`,{class:`oc__sect-title`,title:a(X)(`@WORKBENCH:上面是主 Agent 的判断,下面这些是从正在跑的任务里抄出来的事实`)},e(a(X)(`@WORKBENCH:任务事实`)),9,Zs),i(`span`,Qs,[i(`span`,$s,e(a(X)(`@WORKBENCH:{n} 个任务`,{n:Ze.value.length})),1)])],8,Xs),W(i(`ul`,ec,[(T(!0),t(O,null,fe(Ze.value,(n,r)=>(T(),t(`li`,{key:n.taskId||r,class:v([`rpt`,{"is-silent":n.silent!==null}])},[i(`p`,tc,e(n.taskTitle||a(X)(`@WORKBENCH:未命名任务`)),1),i(`p`,nc,[n.projectName?(T(),t(`span`,rc,e(n.projectName),1)):R(``,!0),i(`span`,null,e(a(X)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:a(Un)(n.elapsedMs)})),1),n.agent?(T(),t(`span`,ic,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,ac)):R(``,!0),n.silent===null?R(``,!0):(T(),t(`span`,oc,e(a(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:a(Un)(n.silent)})),1))]),n.pct===null?R(``,!0):(T(),t(`p`,{key:0,class:`rpt__progress`,title:a(X)(a(Qr))},[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,cc),i(`span`,lc,e(n.pct)+`%`,1)],8,sc)),n.lastTool?(T(),t(`p`,{key:1,class:`rpt__line is-tool`,title:n.lastTool},[i(`span`,dc,e(a(X)(`@WORKBENCH:工具`)),1),w(e(n.lastTool),1)],8,uc)):R(``,!0),n.lastThought?(T(),t(`p`,{key:2,class:`rpt__line is-thought`,title:n.lastThought},[i(`span`,pc,e(a(X)(`@WORKBENCH:最近思考`)),1),w(e(n.lastThought),1)],8,fc)):R(``,!0),n.lastLine?(T(),t(`p`,{key:3,class:`rpt__line`,title:n.lastLine},[i(`span`,hc,e(a(X)(`@WORKBENCH:最新回复`)),1),w(e(n.lastLine),1)],8,mc)):R(``,!0)],2))),128))],512),[[J,ot.value]])],2)):R(``,!0)])):(T(),t(`li`,{key:1,class:`oc-empty`,title:$.value},e(Ve.value),9,gc))]),(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(ge(it.value?a(j):a(oe))))]),_:1}),i(`span`,vc,e(a(X)(`@WORKBENCH:历史报告`)),1),i(`span`,yc,[i(`span`,bc,e(a(X)(`@WORKBENCH:共 {n} 份`,{n:(n.reports||[]).length})),1)])],8,_c),W(i(`ul`,xc,[(T(!0),t(O,null,fe(n.reports,n=>(T(),t(`li`,{key:n.id},[i(`button`,{type:`button`,class:v([`oc__history-item`,{"is-active":n.id===Q.value?.id}]),onClick:e=>He(n)},[i(`span`,Cc,e(a(Gn)(n.at)),1),i(`span`,wc,e(Ye(n)),1),i(`span`,Tc,e(Qe(n)),1)],10,Sc)]))),128))],512),[[J,it.value]])],2)):R(``,!0)],2),[[J,!n.collapsed&&x.value===`command`]]),W(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(ge(at.value?a(j):a(oe))))]),_:1}),i(`span`,Dc,e(a(X)(`@WORKBENCH:项目概览`)),1),i(`span`,Oc,[i(`span`,kc,e(n.selectedProject?n.selectedProject.name:a(X)(`@WORKBENCH:全部项目`)),1),!at.value&&ct.value?(T(),t(`span`,Ac,e(ct.value),1)):R(``,!0)])],8,Ec),W(i(`dl`,jc,[(T(!0),t(O,null,fe(tt.value,n=>(T(),t(O,{key:n.label},[i(`dt`,Mc,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`,Nc,e(a(X)(`@WORKBENCH:今日完成`)),1),i(`dd`,Pc,e(n.todayDone),1),i(`dt`,Fc,e(a(X)(`@WORKBENCH:最后活跃`)),1),i(`dd`,Ic,e(n.selectedProject&&a(Hn)(n.selectedProject.stats.lastActiveAt)||`—`),1)],512),[[J,at.value]])],2),[[J,!n.collapsed&&x.value===`command`]]),W(i(`div`,{class:`oc__compose`,onPaste:N,onDrop:K(P,[`prevent`]),onDragover:o[16]||=K(e=>de.value=!0,[`prevent`]),onDragleave:o[17]||=e=>de.value=!1},[W(i(`textarea`,{ref_key:`inputRef`,ref:De,class:v([`oc__input`,{"is-over":xe.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,Lc),[[G,d.value]]),S.value.length>0||ue.value?(T(),C(Tt,{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":I,"raw-base":Jc,onPaste:N,onDrop:P,onDragover:o[10]||=K(e=>de.value=!0,[`prevent`]),onDragenter:o[11]||=K(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),ye.value>0?(T(),t(`p`,{key:1,class:v([`oc__count`,{"is-warn":Se.value,"is-over":xe.value}])},[xe.value?(T(),t(`span`,Rc,e(a(X)(`@WORKBENCH:超出上限 {max} 字,请精简后再派发(超出的部分不会被发出)`,{max:be.value})),1)):(T(),t(`span`,zc,e(ye.value)+` / `+e(be.value),1))],2)):R(``,!0),i(`div`,Bc,[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,Vc),i(`button`,{type:`button`,class:v([`oc__attach`,{"is-on":_e.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,Hc),i(`label`,{class:`oc__autorn`,title:a(X)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[W(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,Uc),_e.value?(T(),t(`label`,{key:0,class:`oc__autorn`,title:a(X)(`@WORKBENCH:取消勾选则本次派发的任务不带预设提示词(设置本身不受影响)`)},[W(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:ve.value})),1)],8,Wc)):R(``,!0),l(cs,{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,Gc)]),i(`p`,Kc,[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),[[J,!n.collapsed&&x.value===`command`]])],2)}}}),[[`__scopeId`,`data-v-6516e4a1`]]);A(),B(),u(),F();var $c={class:`pd`},el={class:`pd__intro`},tl={class:`pd__field`},nl={class:`pd__head`},rl={class:`pd__label`,for:`pd-global`},il={class:`pd__count`},al=[`placeholder`],ol={class:`pd__field`},sl={class:`pd__head`},cl={class:`pd__label`,for:`pd-project`},ll={key:0,class:`pd__count`},ul=[`disabled`,`placeholder`],dl={class:`pd__hint`},fl={class:`pd__foot`},pl=[`disabled`],ml=4e3,hl=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=q(``),u=q(``);U(()=>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`,fl,[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,pl)])]),default:z(()=>[i(`div`,$c,[i(`p`,el,e(a(X)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),i(`div`,tl,[i(`div`,nl,[i(`label`,rl,e(a(X)(`@WORKBENCH:全局提示词`)),1),i(`span`,il,e(l.value.length)+` / `+e(ml),1)]),W(i(`textarea`,{id:`pd-global`,"onUpdate:modelValue":o[0]||=e=>l.value=e,class:`pd__area`,rows:`5`,maxlength:ml,placeholder:a(X)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,al),[[G,l.value]])]),i(`div`,ol,[i(`div`,sl,[i(`label`,cl,e(d.value?a(X)(`@WORKBENCH:「{name}」的项目提示词`,{name:n.projectName}):a(X)(`@WORKBENCH:项目提示词`)),1),d.value?(T(),t(`span`,ll,e(u.value.length)+` / `+e(ml),1)):R(``,!0)]),W(i(`textarea`,{id:`pd-project`,"onUpdate:modelValue":o[1]||=e=>u.value=e,class:`pd__area`,rows:`5`,maxlength:ml,disabled:!d.value,placeholder:d.value?a(X)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):a(X)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,ul),[[G,u.value]]),i(`p`,dl,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 gl={class:`nc__field`},_l={class:`nc__label`,for:`nc-project`},vl={value:``},yl=[`value`],bl=[`title`],xl={class:`nc__field`},Sl={class:`nc__label`,for:`nc-title`},Cl=[`placeholder`],wl={class:`nc__field`},Tl={class:`nc__label`,for:`nc-desc`},El=[`placeholder`],Dl={class:`nc__field`},Ol={class:`nc__hint`},kl={key:0,class:`nc__error`},Al={class:`nc__foot`},jl=[`disabled`],Ml=[`disabled`],Nl=`/api/workbench/orchestrator/attachments`,Pl=Z(b({__name:`WorkbenchTaskCreateDialog`,props:{modelValue:{type:Boolean},projects:{},defaultProjectPath:{}},emits:[`update:modelValue`,`created`],setup(n,{emit:r}){let s=n,c=r,u=q(``),d=q(``),f=q(``),p=q(!1),m=q(``),h=q([]),g=q(!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}=lr(),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(`${Nl}/${encodeURIComponent(t.id)}`,{method:`DELETE`}).catch(()=>{})}function ie(e){let t=$(e);if(!t)return``;let n=s.projects.find(e=>$(e.path)===t);return n?n.path:``}U(()=>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=$(f.value);if(!e)return``;let t=ae.value.find(t=>$(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`,Al,[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,jl),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,Ml)])]),default:z(()=>[i(`div`,{class:`nc`,onPaste:te,onDrop:K(k,[`prevent`]),onDragover:o[9]||=K(e=>g.value=!0,[`prevent`]),onDragenter:o[10]||=K(e=>g.value=!0,[`prevent`]),onDragleave:o[11]||=e=>g.value=!1},[i(`div`,gl,[i(`label`,_l,e(a(X)(`@WORKBENCH:项目`)),1),W(i(`select`,{id:`nc-project`,"onUpdate:modelValue":o[0]||=e=>f.value=e,class:`nc__select`},[i(`option`,vl,e(a(X)(`@WORKBENCH:跟随当前项目`)),1),(T(!0),t(O,null,fe(ae.value,n=>(T(),t(`option`,{key:n.key,value:n.path},e(n.name)+e(n.exists===!1?` · ${a(X)(`@WORKBENCH:目录不存在`)}`:``),9,yl))),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,bl)]),i(`div`,xl,[i(`label`,Sl,e(a(X)(`@WORKBENCH:标题`)),1),W(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(K(e=>se(!1),[`prevent`]),[`enter`])},null,40,Cl),[[G,u.value]])]),i(`div`,wl,[i(`label`,Tl,e(a(X)(`@WORKBENCH:描述`)),1),W(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(K(e=>se(!1),[`ctrl`,`prevent`]),[`enter`]),o[5]||=N(K(e=>se(!1),[`meta`,`prevent`]),[`enter`])]},null,40,El),[[G,d.value]])]),i(`div`,Dl,[l(Tt,{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":Nl,onDragover:o[6]||=K(e=>g.value=!0,[`prevent`]),onDragenter:o[7]||=K(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`,Ol,e(a(X)(`@WORKBENCH:粘贴图片以快速添加`)),1)]),m.value?(T(),t(`p`,kl,e(m.value),1)):R(``,!0)],32)]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-40a1a81b`]]);A(),B(),u(),F();var Fl={class:`board__top`},Il=[`title`,`aria-label`,`aria-expanded`],Ll={class:`board__brand`},Rl={class:`board__brand-text`},zl={class:`board__title`},Bl={class:`board__subtitle`},Vl={class:`board__stats`},Hl={class:`board__stat`},Ul={class:`board__stat-label`},Wl={class:`board__stat-value`},Gl=[`title`],Kl={class:`board__stat-label`},ql={class:`board__stat-value`},Jl={class:`board__stat`},Yl={class:`board__stat-label`},Xl={class:`board__stat`},Zl={class:`board__stat-label`},Ql={class:`board__stat-value`},$l=[`title`],eu={class:`board__main`},tu={class:`board__main-head`},nu={class:`board__main-title`},ru={class:`board__project-name`},iu=[`title`],au={key:1,class:`board__project-path`},ou={key:0,class:`board__project-meta`},su=[`title`],cu=`wb.boardProject.v1`,lu=5e3,uu=3e4,du=`wb.boardLayout.v1`,fu=180,pu=420,mu=260,hu=900,gu=.26,_u=.46,vu=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}=Hr();U(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}=ei(),{active:ue}=mr(),de=(()=>{try{return localStorage.getItem(cu)}catch{return null}})(),P=q(de||``);U(P,e=>{try{localStorage.setItem(cu,e)}catch{}});let F=o(()=>P.value&&u.value.find(e=>e.key===P.value)||null);U(u,e=>{P.value&&(e.some(e=>e.key===P.value)||(P.value=``))});let I=!1;function fe(){if(I||(I=!0,de!==null))return;let e=f.value?$(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($(n.projectPath))||``);return t}),me=o(()=>{if(!P.value)return d.value;let e=P.value;return d.value.filter(t=>$(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,ge=!1,_e=null;async function W(e=!0){if(!ge){ge=!0;try{await Promise.all([m(e),A(e)])}finally{ge=!1}}}function ve(){document.hidden||(W(!0),se(!0))}ie(async()=>{window.addEventListener(`resize`,xe),await W(!1),se(!0),fe(),he=setInterval(()=>{document.hidden||W(!0)},lu),_e=setInterval(()=>{document.hidden||se(!0)},uu),document.addEventListener(`visibilitychange`,ve)}),_(()=>{window.removeEventListener(`resize`,xe),he&&=(clearInterval(he),null),_e&&=(clearInterval(_e),null),document.removeEventListener(`visibilitychange`,ve)});let G=Se({left:null,right:null,leftCollapsed:!1,rightCollapsed:!1});function ye(){try{let e=localStorage.getItem(du);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(G.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(G.right=t.right),G.leftCollapsed=t.leftCollapsed===!0,G.rightCollapsed=t.rightCollapsed===!0}catch{}}ye();function be(){try{localStorage.setItem(du,JSON.stringify(G))}catch{}}let K=q(typeof window>`u`?1920:window.innerWidth);function xe(){K.value=window.innerWidth}let J=o(()=>K.value<=1024),we=o(()=>K.value<=860);function Te(e,t){let n=e===`left`?fu:mu,r=Math.min(e===`left`?pu:hu,K.value*(e===`left`?gu:_u));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}let Ee=o(()=>{let e={};return G.left!=null&&(e[`--wb-left-w`]=Te(`left`,G.left)+`px`),G.right!=null&&!we.value&&(e[`--wb-right-w`]=Te(`right`,G.right)+`px`),e}),Y=q(null),De=q(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,be()}function Z(e,t){if(e===`left`?J.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);G[e]=Te(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>ke(a),{once:!0})}function Ae(e){G[e]=null,be()}let je=q(!1),Me=o(()=>J.value?!je.value:G.leftCollapsed);function Ne(){if(J.value){je.value=!je.value;return}G.leftCollapsed=!G.leftCollapsed,be()}function Pe(){J.value&&(je.value=!1)}let Fe=o(()=>G.rightCollapsed&&!we.value);function Ie(){G.rightCollapsed=!G.rightCollapsed,be()}function Le(e){P.value=e?e.key:``,je.value=!1}let Re=q(!1);function ze(){Re.value=!0}async function Q(e){if(await W(!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 W(!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 W(!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 W(!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 W(!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 W(!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 W(!0)}let Je=q(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 W(!0))}async function Ze(e){await ne(e)}let Qe=q(!1),$e=q(!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`,Fl,[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,Il),i(`div`,Ll,[i(`span`,{class:v([`board__live`,{"is-off":!a(y)}]),"aria-hidden":`true`},null,2),i(`div`,Rl,[i(`h1`,zl,e(a(X)(`@WORKBENCH:多项目编排台`)),1),i(`p`,Bl,e(a(y)?a(X)(`@WORKBENCH:主 Agent 调度中`):a(X)(`@WORKBENCH:主 Agent 已暂停`)),1)])]),i(`div`,Vl,[i(`span`,Hl,[i(`span`,Ul,e(a(X)(`@WORKBENCH:项目`)),1),i(`strong`,Wl,e(B.value.projects),1)]),i(`span`,{class:`board__stat`,title:a(X)(`@WORKBENCH:看板上全部任务(含已从项目列表移除的项目)`)},[i(`span`,Kl,e(a(X)(`@WORKBENCH:全部任务`)),1),i(`strong`,ql,e(B.value.tasks),1)],8,Gl),i(`span`,Jl,[i(`span`,Yl,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`,Xl,[i(`span`,Zl,e(a(X)(`@WORKBENCH:今日完成`)),1),i(`strong`,Ql,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(Ma,{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,$l)),i(`main`,eu,[i(`div`,tu,[i(`div`,nu,[i(`h2`,ru,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,iu)):(T(),t(`span`,au,e(a(X)(`@WORKBENCH:共 {n} 个项目的任务`,{n:a(u).length})),1))]),F.value?(T(),t(`span`,ou,e(a(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:F.value.stats.done,total:F.value.stats.total})),1)):R(``,!0)]),l(ts,{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:ze},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,su)):R(``,!0),l(Qc,{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(hl,{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(Pl,{modelValue:Re.value,"onUpdate:modelValue":r[7]||=e=>Re.value=e,projects:a(u),"default-project-path":Ye.value,onCreated:Q},null,8,[`modelValue`,`projects`,`default-project-path`])],4)}}}),[[`__scopeId`,`data-v-5da69428`]]);A(),B(),u(),F();var yu={class:`workbench`},bu={class:`wb-editor`},xu={class:`wb-editor-bar`},Su=[`title`],Cu=[`title`],wu=[`data-status`,`title`],Tu={class:`wb-editor-bar__status-pill`},Eu={class:`wb-editor-bar__status-label`},Du=[`title`],Ou={key:2,class:`wb-editor-bar__time`},ku=[`title`],Au={key:1,class:`wb-editor-bar__sep`,"aria-hidden":`true`},ju={key:2,class:`wb-editor-bar__spent`},Mu={class:`wb-editor-bar__hint`},Nu={class:`workbench__editor-row`},Pu=[`aria-label`,`aria-valuenow`,`title`],Fu={class:`wb-split`},Iu={key:0,class:`wb-placeholder`},Lu={class:`wb-split__header`},Ru={class:`wb-split__title-wrap`},zu=[`placeholder`,`aria-label`],Bu=[`title`,`aria-label`],Vu=[`title`],Hu={key:0,class:`wb-meta-save__dot`},Uu={key:1,class:`wb-meta-save__check`},Wu={key:2,class:`wb-meta-save__bang`},Gu={key:3,class:`wb-meta-save__dot`},Ku=[`title`],qu={class:`wb-executor-item`},Ju={class:`wb-executor-item__name`},Yu=[`title`],Xu={key:2,class:`wb-executor-item__missing`},Zu={key:2,class:`wb-no-claude-hint`,role:`status`},Qu={class:`wb-no-claude-hint__text`},$u={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},ed={class:`wb-copy-exec`},td=[`title`,`aria-label`],nd=[`title`,`aria-label`],rd=[`title`,`aria-label`],id=[`title`,`aria-label`],ad=[`open`],od={class:`wb-task-desc__summary`},sd={class:`wb-task-desc__label`},cd=[`title`,`aria-label`],ld={key:0,class:`wb-task-desc__tag`},ud={key:0},dd={key:1,class:`wb-task-desc__tag-attachment`},fd=[`placeholder`,`aria-label`],pd={class:`wb-execution-body`},md={class:`wb-exec-detail`},hd={class:`wb-form-item__label wb-task-prompt__summary`},gd={key:0,class:`wb-task-prompt__tag`},_d={key:0,class:`wb-task-prompt__parts`},vd={class:`wb-task-prompt__label`},yd={class:`wb-task-prompt__text`},bd={key:1,class:`wb-task-prompt__empty`},xd={class:`wb-simple-chat`},Sd={class:`wb-simple-chat__footer`},Cd={key:0,class:`wb-chat-queue`},wd={class:`wb-chat-queue__head`},Td={class:`wb-chat-queue__label`},Ed={class:`wb-chat-queue__count`},Dd={class:`wb-chat-queue__hint`},Od={class:`wb-chat-queue__index`},kd=[`title`],Ad={key:0,class:`wb-chat-queue__atts`},jd=[`title`,`aria-label`,`onClick`],Md=`wb.lastTaskByProject.v1`,Nd=`__no_project__`,Pd=`wb.sidebarWidth.v1`,Fd=200,Id=480,Ld=268,Rd=3e3,zd=52,Bd=320,Vd=500,Hd=Z(b({__name:`WorkbenchView`,setup(r){let s=Pe(),c=Ve(),u=q((()=>{try{let e=parseInt(localStorage.getItem(Pd)||``,10);return Number.isFinite(e)?Math.min(Id,Math.max(Fd,e)):Ld}catch{return Ld}})());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(Id,Math.max(Fd,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(Pd,String(u.value))}catch{}},{once:!0})}function p(e){u.value=Math.min(Id,Math.max(Fd,u.value+e));try{localStorage.setItem(Pd,String(u.value))}catch{}}function m(){try{let e=localStorage.getItem(Md),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function h(e){try{localStorage.setItem(Md,JSON.stringify(e))}catch{}}function y(e,t){let n=m();n[e||Nd]=t,h(n)}let b=q(!1);function x(){b.value=!1}let ee=q(null);async function S(e){await M(),B.value=e.taskId,ee.value=e.taskId,Te(),V.value&&y($(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}=hr();function de(){let e=$(k.value.path),t=E.value.filter(t=>!t.projectPath||$(t.projectPath)===e),n=m(),r=e&&n[e]||!e&&n[Nd]||``,i=r?E.value.find(e=>e.id===r):null,a=t[0]||E.value[0]||null,o=i&&i.projectPath&&$(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 I(){await M(),de()}let me=q(!1),B=q(null),V=o(()=>E.value.find(e=>e.id===B.value)||null),ve=q([]),be=o(()=>ve.value.find(e=>e.id===B.value)||null),xe=o(()=>be.value?Hn(qn(be.value)):``),J=o(()=>be.value?Zn(be.value):``),Se=o(()=>be.value?Qn(be.value):``),Ce=o(()=>{let e=V.value?.projectPath||``;return!e||$(e)===$(k.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),we=q({title:``,desc:``});function Te(){V.value?we.value={title:V.value.title,desc:V.value.desc}:we.value={title:``,desc:``}}let Y=q(`idle`),De=q(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 Mt(!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}U(()=>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}),U(B,async(e,t)=>{Ae(),V.value&&Z.value&&await Re()}),U(k,async e=>{if(!e.path)return;let t=$(e.path),n=V.value;n&&n.projectPath&&$(n.projectPath)!==t&&await I()});function ze(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function Q(){V.value&&Z.value&&!je(V.value)&&ze(V.value)}let Be=q(!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 We=q(null),Ge=q(null);async function Ke(e){if(e){if(!await He((e.title||``).trim()||X(`@WORKBENCH:未命名任务`))){L.error(X(`@WORKBENCH:复制失败`));return}We.value=e.id,L.success(X(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{We.value===e.id&&(We.value=null)},1500)}}async function qe(e){if(!e)return;let t=(e.desc||``).trim();if(!t){L.warning(X(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await He(t)){L.error(X(`@WORKBENCH:复制失败`));return}Ge.value=e.id,L.success(X(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{Ge.value===e.id&&(Ge.value=null)},1500)}let{simpleConversationMessages:Je,simpleAllJobsFor:Ye,simpleJobFor:Ze,simpleJobState:Qe}=fr(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=q(null);function tt(e){let t=(e?.projectPath||``).trim().replace(/[\\/]+$/,``);return t?t.split(/[\\/]/).pop()||t:k.value.name||``}async function nt(e,t=`brief`){if(!e)return;let n=ct(Ye(e),{title:e.title,projectName:tt(e)},{scope:t});if(!n){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=q(null),ot=q(null),st=null,lt=null,ut=null;function dt(){if(st&&=(st.disconnect(),null),lt!==null&&(clearTimeout(lt),lt=null),ut){for(let e of it)ut.removeEventListener(e,dt);ut=null}}function ft(){dt();let e=at.value;if(!e)return;e.scrollToBottom?.(!1);let t=ot.value?.querySelector(`.acu-message-list`);if(!(!t||typeof ResizeObserver>`u`)){ut=t;for(let e of it)t.addEventListener(e,dt,{passive:!0});st=new ResizeObserver(()=>at.value?.scrollToBottom?.(!1)),st.observe(t),t.firstElementChild&&st.observe(t.firstElementChild),lt=setTimeout(dt,Rd)}}let pt=o(()=>b.value&&V.value&&Ye(V.value).length>0?V.value.id:``);U(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=be.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(Ze(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=q(!1),xt=q(null),St=q(null);function Ct(e){let t=e?.currentTarget||St.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?Vd:Bd,r=Math.min(Math.max(t.scrollHeight,zd),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}U(Be,async e=>{e&&(await f(),Ct())}),U(()=>V.value?.id,async()=>{Be.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 I(),t.task?.id&&(B.value=t.task.id,Te(),L.success(X(`@WORKBENCH:已新建任务`)),await f(),xt.value?.focus())}finally{bt.value=!1}}async function Et(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),I()}async function Dt(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 I(),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 Ot(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($(k.value.path),e.id)}async function At(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=E.value.slice(),i=jt(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 jt(e,t,n){let r=e=>$(e)||Nd,i=e.filter(e=>r(e.projectPath)===t).map(e=>e.id),a=new Set(i);if(n.length!==a.size||n.some(e=>!a.has(e)))return e;let o=new Map(e.map(e=>[e.id,e])),s=n.map(e=>o.get(e)).filter(Boolean),c=[],l=0;for(let n of e)r(n.projectPath)===t?c.push(s[l++]):c.push(n);return c}async function Mt(e){if(!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([I(),se(),ce()]),await Le(),A(),window.addEventListener(`beforeunload`,Q),c.fetchExecutorModels()}),_(()=>{ne(),window.removeEventListener(`beforeunload`,Q),V.value&&Z.value&&!je(V.value)&&ze(V.value)});let{pasteHoverId:Nt,isUploading:Pt,isImageAttachment:Ft,humanSize:It,onAttachmentPaste:Lt,onAttachmentDrop:Rt,uploadAttachment:zt,removeAttachment:Bt,pickAttachmentFile:Vt}=lr(),{runTask:Ht,onContinueSendFromChat:Ut,cancelJob:Wt,clearExecutionForSelectedTask:Gt,onReExecuteJob:Kt,isTaskRunning:qt,queuedChatsOf:Jt,removeQueuedChat:Yt,flushNextQueued:Xt}=pr(te,E,V,{clearJobsByTask:le,persistTask:Mt,uploadAttachment:zt,getExecutor:()=>Zt.value}),{active:Zt,availability:Qt,hasAnyExecutor:$t,choose:en,executorModelText:tn,executorModelTitle:nn}=mr();function rn(e){return Me(e)}let an=o(()=>Ye(V.value).slice(-1)[0]),on=o(()=>Me(an.value?.agent)),sn=o(()=>kt(an.value?.agent)),cn=o(()=>V.value?Jt(V.value.id):[]);return(r,o)=>{let c=g,f=n,m=ye,h=D;return T(),t(`div`,yu,[l(vu,{"opened-task-id":ee.value,onOpenTask:S,onBoardTasks:o[0]||=e=>ve.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`,bu,[i(`div`,xu,[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,Su),i(`span`,{class:`wb-editor-bar__project`,title:a(k).path},e(a(k).name),9,Cu),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`,Tu,[o[26]||=i(`span`,{class:`wb-editor-bar__status-dot`,"aria-hidden":`true`},null,-1),i(`span`,Eu,e(vt.value.label),1)])],10,wu)):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,Du)):R(``,!0),xe.value||J.value?(T(),t(`span`,Ou,[xe.value?(T(),t(`span`,{key:0,class:`wb-editor-bar__ago`,title:Se.value},e(xe.value),9,ku)):R(``,!0),xe.value&&J.value?(T(),t(`span`,Au,`·`)):R(``,!0),J.value?(T(),t(`span`,ju,e(J.value),1)):R(``,!0)])):R(``,!0),i(`span`,Mu,e(a(X)(`@WORKBENCH:任务执行`)),1)]),i(`div`,Nu,[l(Vr,{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:Ot,onDeleteTask:Et,onCopyTask:Dt,onCreateTask:wt,onReorderTasks:At},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":Fd,"aria-valuemax":Id,title:a(X)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:d,onKeydown:[o[1]||=N(K(e=>p(-16),[`prevent`]),[`left`]),o[2]||=N(K(e=>p(16),[`prevent`]),[`right`])]},null,40,Pu),i(`section`,Fu,[V.value?(T(),t(O,{key:1},[i(`div`,Lu,[i(`div`,Ru,[W(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,zu),[[G,V.value.title]]),i(`button`,{type:`button`,class:v([`wb-copy-btn`,{"is-flash":We.value===V.value.id}]),title:a(X)(`@WORKBENCH:复制任务标题`),"aria-label":a(X)(`@WORKBENCH:复制任务标题`),onClick:o[4]||=e=>Ke(V.value)},[We.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,Bu)]),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`,Hu)):Y.value===`saved`?(T(),t(`span`,Uu,`✓`)):Y.value===`error`?(T(),t(`span`,Wu,`!`)):(T(),t(`span`,Gu)),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,Vu)):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,fe(a(Ne),n=>(T(),C(f,{key:n.id,command:n.id,disabled:!a(Qt)[n.id]},{default:z(()=>[i(`span`,qu,[l(Ue,{executor:n.id,class:`wb-executor-item__icon`},null,8,[`executor`]),i(`span`,Ju,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,Yu)):R(``,!0),a(Zt)===n.id?(T(),C(c,{key:1,class:`wb-executor-item__check`},{default:z(()=>[l(a(_e))]),_:1})):a(Qt)[n.id]?R(``,!0):(T(),t(`span`,Xu,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(Ue,{executor:a(Zt),class:`wb-executor-split__hint-icon`},null,8,[`executor`]),w(` `+e(rn(a(Zt))),1)],8,Ku)]),_:1},8,[`disabled`,`title`,`onCommand`])):(T(),t(`div`,Zu,[l(c,{class:`wb-no-claude-hint__icon`},{default:z(()=>[l(a(ue))]),_:1}),i(`span`,Qu,e(a(X)(`@WORKBENCH:未检测到本地 claude / opencode,无法执行任务`)),1),i(`a`,$u,e(a(X)(`@WORKBENCH:查看安装指引`)),1)])),i(`div`,ed,[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,td),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,nd)]),_: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,rd),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,id)]),i(`details`,{class:`wb-task-desc`,open:Be.value,onToggle:o[20]||=e=>Be.value=e.target.open},[i(`summary`,od,[l(c,{class:`wb-task-desc__caret`},{default:z(()=>[(T(),C(ge(Be.value?a(j):a(oe))))]),_:1}),i(`span`,sd,e(a(X)(`@WORKBENCH:任务描述(可选)`)),1),i(`button`,{type:`button`,class:v([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":Ge.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]||=K(e=>qe(V.value),[`stop`,`prevent`])},[Ge.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,cd),V.value.desc&&V.value.desc.length>0||V.value.attachments&&V.value.attachments.length>0?(T(),t(`span`,ld,[V.value.desc&&V.value.desc.length>0?(T(),t(`span`,ud,e(a(X)(`@WORKBENCH:已填写`)),1)):R(``,!0),V.value.attachments&&V.value.attachments.length>0?(T(),t(`span`,dd,e(V.value.attachments.length),1)):R(``,!0)])):R(``,!0)]),W(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(Lt)(e,{kind:`task`,task:V.value})},null,40,fd),[[G,V.value.desc]]),l(Tt,{attachments:V.value.attachments||[],"is-image":a(Ft),"human-size":a(It),"is-uploading":a(Pt)(`task-`+V.value.id),"is-paste-hover":a(Nt)===`task-`+V.value.id,"on-pick":()=>a(Vt)({kind:`task`,task:V.value}),"on-remove":e=>a(Bt)({kind:`task`,task:V.value},e),onPaste:o[15]||=e=>a(Lt)(e,{kind:`task`,task:V.value}),onDrop:o[16]||=K(e=>a(Rt)(e,{kind:`task`,task:V.value}),[`prevent`]),onDragover:o[17]||=K(e=>Nt.value=`task-`+V.value.id,[`prevent`]),onDragenter:o[18]||=K(e=>Nt.value=`task-`+V.value.id,[`prevent`]),onDragleave:o[19]||=e=>Nt.value=a(Nt)===`task-`+V.value.id?null:a(Nt)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,ad),i(`div`,pd,[i(`div`,md,[i(`details`,{class:v([`wb-task-prompt`,{"has-content":yt.value.length>0}])},[i(`summary`,hd,[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`,gd,e(a(X)(`@WORKBENCH:已填写`)),1)):R(``,!0),a(Qe)(a(Ze)(V.value))===`running`&&a(Ze)(V.value)?(T(),t(`button`,{key:1,class:`wb-simple__stop`,onClick:o[21]||=K(e=>a(Wt)(a(Ze)(V.value)),[`stop`])},e(a(X)(`@WORKBENCH:停止`)),1)):R(``,!0)]),yt.value.length>0?(T(),t(`div`,_d,[(T(!0),t(O,null,fe(yt.value,n=>(T(),t(`div`,{key:n.key,class:`wb-task-prompt__part`},[i(`div`,vd,e(n.label),1),i(`pre`,yd,e(n.text),1)]))),128))])):(T(),t(`p`,bd,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`,xd,[(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(Xe),"show-input":!1,onRetry:$e},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`,`message-rail-config`]))]),i(`div`,Sd,[cn.value.length?(T(),t(`div`,Cd,[i(`div`,wd,[i(`span`,Td,e(a(X)(`@WORKBENCH:排队中`)),1),i(`span`,Ed,e(cn.value.length),1),i(`span`,Dd,e(gt.value?a(X)(`@WORKBENCH:等这一轮跑完自动发送`):a(X)(`@WORKBENCH:当前没有在跑的轮次`)),1)]),(T(!0),t(O,null,fe(cn.value,(n,r)=>(T(),t(`div`,{key:n.id,class:`wb-chat-queue__item`},[i(`span`,Od,e(r+1),1),i(`span`,{class:`wb-chat-queue__text`,title:n.text},e(n.text),9,kd),n.files.length?(T(),t(`span`,Ad,[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,jd)]))),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(er),multiple:!0,maxCount:0,maxSize:a(tr)},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`,Iu,[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(Rn)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-94990db7`]]);export{Hd as default};
|
package/src/ui/public/assets/{agentConversations-BvuyjfgF.js → agentConversations-BKjyYn-u.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{En as e,Vn as t,i as n,mr as r,r as i,xr as a,yr as o}from"./element-plus-J45pKUrE.js";import{c as s,o as c,s as l,t as u}from"./vendor-B3NyhlYR.js";import{n as d}from"./_plugin-vue_export-helper-CDrhhAKC.js";import{
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{En as e,Vn as t,i as n,mr as r,r as i,xr as a,yr as o}from"./element-plus-J45pKUrE.js";import{c as s,o as c,s as l,t as u}from"./vendor-B3NyhlYR.js";import{n as d}from"./_plugin-vue_export-helper-CDrhhAKC.js";import{c as f,s as p,t as m}from"./configStore-D0oycG71.js";import{_ as h,g,n as _,p as v,r as y,t as b}from"./index-DjaZpz97.js";function x(e,t=200){let n=typeof e==`string`?e:``;if(!n.trim())return``;let r=n.split(`
|
|
2
2
|
`).map(e=>e.trim()).filter(Boolean),i=(r.length?r[r.length-1]:``).replace(/\s+/g,` `);return i.length>t?`${i.slice(0,t-1)}…`:i}function S(e){return d(e===`done`?`@AGENT:对话已完成`:`@AGENT:对话出错`)}function C(){let e={page:!1,browser:!1,sound:!1};try{let t=m();e.page=!!t.notifyPageOnTaskDone,e.browser=!!t.notifyBrowserOnTaskDone,e.sound=!!t.notifySoundOnTaskDone}catch{}return e}function w(){return C().sound?y():!1}function T(e){let t=C();if(!b(t))return!1;let r=String(e.title||``).trim()||d(`@AGENT:无标题`),i=x(e.detail),a=e.tag||`zen-gitsync-agent`,o=i?`${r}\n${i}`:r;return t.sound&&_(e.kind),h(t)&&g({title:S(e.kind),body:o,tag:a})||!t.page||e.alreadyToast||(e.kind===`done`?n.success(d(`@AGENT:对话完成:{name}`,{name:r})):n.error(d(`@AGENT:对话出错:{name}`,{name:r}))),!0}var E=`g ai`,D=`g-ai`,O=[{id:`gai`,name:E},...p.map(e=>({id:e.id,name:e.name}))],k=`zen-gitsync-agent-engine`;function A(e){return e===`gai`||f(e)}function j(e){return O.find(t=>t.id===e)?.name||`g ai`}function M(e){return f(e)}function N(){try{let e=localStorage.getItem(k);if(A(e))return e}catch{}return`gai`}function ee(e){try{localStorage.setItem(k,e)}catch{}}t(),r();var P=[`image/*`,`.pdf`,`.txt`,`.md`,`.json`,`.csv`,`.log`,`.yml`,`.yaml`,`.xml`,`.toml`,`.ini`,`.html`,`.css`,`.js`,`.ts`,`.tsx`,`.vue`,`.py`,`.java`,`.go`,`.rs`,`.sql`,`.sh`].join(`,`),F=65536,I=`local-`,L=0;function te(e){if(!e||!Array.isArray(e.messages))return[];let t=[],n=e.messages.length,r=new Map;for(let t of e.turnTimings||[])typeof t?.turnIndex==`number`&&Number.isFinite(t?.durationMs)&&r.set(t.turnIndex,t);let i=-1;for(let a=0;a<n;a++){let o=e.messages[a];if(o.role!==`system`){if(o.role===`user`){i+=1;let e=``,n;if(typeof o.content==`string`)e=o.content;else if(Array.isArray(o.content)){e=o.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(` `);let t=o.content.filter(e=>e?.type===`image_url`&&typeof e.image_url?.url==`string`).map((e,t)=>({id:`att-${a}-${t}`,name:`image`,size:0,type:B(e.image_url?.url||``)||`image/*`,preview:e.image_url?.url}));t.length>0&&(n=t)}(e||n)&&t.push({id:`msg-${a}`,role:`user`,content:e,attachments:n,status:`done`,createdAt:Date.now()})}else if(o.role===`assistant`){let o=`msg-${a}`,s=``,l=[],u=a;for(;u<n;){let t=e.messages[u];if(t.role!==`assistant`&&t.role!==`tool`)break;if(t.role===`assistant`){if(typeof t.content==`string`&&(s+=t.content),t.tool_calls&&t.tool_calls.length>0)for(let e of t.tool_calls)l.push({id:e.id||e.function?.name||c(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:R(e.function?.name||``,e.function?.arguments||``),status:`done`,result:``})}else{let e=t.tool_call_id||t.name||``,n=l.find(t=>t.id===e);if(n){let e;e=typeof t.content==`string`?t.content:Array.isArray(t.content)&&t.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(`
|
|
3
3
|
`)||`(non-text result)`,e.length>F&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}u++}a=u-1,s.length>F&&(s=`…(前文已截断)\n${s.slice(-65536)}`);let d=!!s,f=l.length>0;if(d||f){let e=r.get(i),n=e?.finishedAt?Date.parse(e.finishedAt):NaN;t.push({id:o,role:`assistant`,content:s,toolCalls:f?l:void 0,status:`done`,createdAt:Number.isFinite(n)&&e?n-e.durationMs:Date.now(),finishedAt:Number.isFinite(n)?n:void 0,meta:e?{durationMs:e.durationMs}:void 0})}}}}return t}function R(e,t){try{let n=JSON.parse(t);switch(e){case`run_command`:return String(n.command||``).slice(0,200);case`read_file`:case`write_file`:case`edit_file`:return String(n.path||``);case`list_files`:return String(n.path||`.`);case`search_text`:return String(n.pattern||``);case`update_plan`:{let e=s(t,`update_plan`);if(!e)return``;let{total:r,done:i}=u(e),a=String(n.explanation||``).replace(/\s+/g,` `).trim();return[`${i}/${r}`,a].filter(Boolean).join(` — `).slice(0,200)}default:return JSON.stringify(n).slice(0,200)}}catch{return t.slice(0,200)}}function z(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result||``)),r.onerror=()=>n(r.error||Error(`FileReader failed`)),r.readAsDataURL(e)})}function B(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function V(){let t=m(),r=v(),s=++L,u=a([]),f=a(!1),p=a(N());function h(e){A(e)&&(p.value=e,ee(e))}let g=o(new Map),_=a(null),y=a(!1),b=0,x=0,S=new Set;function C(e){return{key:e,sessionId:e.startsWith(I)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1,contextUsage:null,queue:[],queuePaused:!1}}function E(e){let t=g.get(e);return t||=(g.set(e,C(e)),g.get(e)),t}let D=e(()=>_.value?g.get(_.value)??null:null),O=e(()=>D.value?.messages??[]),k=e(()=>D.value?.isStreaming??!1),j=e(()=>D.value?.contextUsage??null),M=e(()=>{let e=j.value;return e?{ratio:Math.min(Math.max(e.tokenRatio,e.messageRatio),1),current:e.tokens,total:e.maxTokens,unit:`K`,suffix:`上下文已使用`,detail:[`${e.messages} / ${e.maxMessages} 条消息`,typeof e.actualInputTokens==`number`&&e.actualInputTokens>0?`实测 ${e.actualInputTokens.toLocaleString()} token`:`估算 ${Math.round(e.estTokens).toLocaleString()} token`,e.droppedMessages>0?`会话共 ${e.transcriptMessages} 条,本次只带入 ${e.messages} 条(其余已摘成梗概)`:``].filter(Boolean).join(`
|
|
4
4
|
`)}:null}),P=e(()=>{let e=u.value.find(e=>e.sessionId===_.value);return A(e?.engine)?e.engine:p.value}),R=e(()=>u.value.some(e=>e.sessionId===_.value)),B=e(()=>D.value?.pendingQuestion??null),V=e(()=>D.value?.answeringQuestion??!1),H=e(()=>D.value?.pendingQuestion??null),U=e(()=>D.value?.queuePaused??!1),W=e(()=>(D.value?.queue??[]).map(e=>({id:e.id,text:e.text,attachmentNames:e.files.map(e=>e.file.name)})));function G(e){let t=D.value;if(!t)return;let n=t.queue.findIndex(t=>t.id===e);n<0||(t.queue.splice(n,1),t.queue.length===0&&(t.queuePaused=!1))}function K(e){if(e.isStreaming)return;let t=e.queue.shift();t&&Q(t.text,t.files,{...t.options,targetKey:e.key,background:!0})}function q(){let e=D.value;e&&!e.isStreaming&&e.queue.length!==0&&(e.queuePaused=!1,K(e))}function J(e){return!!g.get(e)?.isStreaming}function Y(e){let n=[...e];for(let e of g.values()){if(!e.sessionId)continue;let r=n.findIndex(t=>t.sessionId===e.sessionId);if(r!==-1){S.delete(e.sessionId),e.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!e.isStreaming&&!S.has(e.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:e.sessionId,title:e.title||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:p.value,createdAt:i,updatedAt:i,messageCount:e.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:e.isStreaming})}return n}async function X(){let e=++b,r=t.currentDirectory||``;if(!r){u.value=[],f.value=!1;return}f.value=!0;try{let t=`/api/agent/sessions?cwd=${encodeURIComponent(r)}`,i=await fetch(t).then(e=>e.json());if(e!==b)return;if(!i.success){n.error(i.error||d(`@AGENT:加载会话列表失败`));return}let a=Array.isArray(i.sessions)?i.sessions:[];u.value=Y(a)}catch(t){if(e!==b)return;n.error(d(`@AGENT:加载会话列表失败`)+`: `+(t?.message||t))}finally{e===b&&(f.value=!1)}}function Z(e,n){let r=new Date().toISOString(),i=u.value.find(t=>t.sessionId===e);if(i){i.isGenerating=!0,i.updatedAt=r;return}u.value=[{sessionId:e,title:n||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:p.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...u.value]}function ne(e){let t=u.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function re(e){if(g.get(e)?.isStreaming){_.value=e;return}y.value=!0,_.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){n.error(t.error||d(`@AGENT:加载会话失败`));return}let r=E(e);r.sessionId=e,r.messages=te(t.session),t.session?.title&&(r.title=t.session.title)}catch(e){n.error(d(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{y.value=!1}}async function ie(e){try{await i.confirm(d(`@AGENT:确认删除该会话`),d(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=g.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}g.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){n.error(t.error||d(`@AGENT:删除失败`));return}u.value=u.value.filter(t=>t.sessionId!==e),_.value===e&&(_.value=null),n.success(d(`@AGENT:已删除`))}catch(e){n.error(d(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function ae(e,t){try{let r=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})}).then(e=>e.json());if(!r.success){n.error(r.error||d(`@AGENT:重命名失败`));return}let i=u.value.find(t=>t.sessionId===e);i&&(i.title=t);let a=g.get(e);a&&(a.title=t),n.success(d(`@AGENT:已重命名`))}catch(e){n.error(d(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function oe(){_.value=null}async function Q(e,i=[],a={}){let l=i.filter(e=>e?.file?.type?.startsWith(`image/`)),u=i.filter(e=>!e?.file?.type?.startsWith(`image/`)),f=[],p=0;for(let e of u){let t=e.file.size||0;if(!(t>10485760)){if(f.length>=10||p+t>20971520)break;p+=t,f.push(e)}}let m=u.filter(e=>!f.includes(e));m.length>0&&n.warning(`${d(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${m.map(e=>e.file.name).join(`、`)}`);let h=a.targetKey||_.value||`${I}${Date.now()}-${++x}`,g=E(h);if(!e.trim()&&l.length===0&&f.length===0)return;if(g.isStreaming){g.queue.push({id:c(),text:e,files:[...l,...f],options:a});return}let v=(await Promise.allSettled(l.map(e=>z(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),y=(await Promise.allSettled(f.map(async e=>({name:e.file.name||`file`,dataUrl:await z(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));a.background||(_.value=g.key),g.nonce+=1;let b=g.nonce;g.abortController=new AbortController;let S=g.abortController;g.pendingQuestion=null,g.answeringQuestion=!1;let C={id:c(),role:`user`,content:e,status:`done`,createdAt:Date.now()},w=[...l,...f];w.length>0&&(C.attachments=w.map(e=>({id:e.id,name:e.file.name||`image`,size:e.file.size||0,type:e.file.type||``,preview:e.preview}))),g.messages.push(C);let T=o({id:c(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});g.messages.push(T),g.isStreaming=!0,g.lastSendOptions=a;let D=`${s}:${h}:${b}`;r.begin(D),await $(g,b,S,T,D,{sessionId:g.sessionId||``,userMessage:e,cwd:t.currentDirectory||``,engine:a.engine??P.value,...v.length>0?{images:v}:{},...y.length>0?{attachments:y}:{},...a.openFilePath?{openFilePath:a.openFilePath}:{},...a.dirStatus?.length?{dirStatus:a.dirStatus}:{},...a.dirSummary?{dirSummary:a.dirSummary}:{},...a.allowDispatch?{allowDispatch:!0,dispatchExecutor:a.dispatchExecutor||``,dispatchUseDefaultPrompt:a.dispatchUseDefaultPrompt!==!1}:{}})}async function $(e,t,i,a,s,u){let f=String(u.userMessage||``),p=[],m=e.sessionId,h=!1,v=null;try{let r=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify(u),signal:i.signal});if(t!==e.nonce)return;if(!r.ok||!r.body){let e=await r.text().catch(()=>``);throw Error(e||`HTTP ${r.status}`)}let s=r.body.getReader(),h=new TextDecoder(`utf-8`),y=``;for(;;){let{value:r,done:i}=await s.read();if(t!==e.nonce)return;if(i)break;y+=h.decode(r,{stream:!0});let u=y.split(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{En as e,Vn as t,i as n,mr as r,n as i,sr as a,t as o,xr as s}from"./element-plus-J45pKUrE.js";import{S as c,h as l,v as u}from"./vendor-B3NyhlYR.js";import{a as d,n as f,r as p}from"./_plugin-vue_export-helper-CDrhhAKC.js";var m=[{id:`claude`,name:`Claude Code`},{id:`opencode`,name:`OpenCode`},{id:`codex`,name:`Codex`}];function h(e){return m.some(t=>t.id===e)}function g(e){return m.find(t=>t.id===e)?.name||m[0].name}var _={"zh-CN":i,"en-US":o};function v(e){return _[e]||i}r(),t();var y=c(`locale`,()=>{let t=s(p()),n=e(()=>v(t.value));async function r(e){d(e),t.value=e;let n=M();n.locale!==e&&await n.saveGeneralSettings({locale:e})}return{currentLocale:t,elementPlusLocale:n,changeLocale:r}}),b=`flowdash-md-preview-theme`,x=`data-md-theme`,S=`github`,C={light:`github`,dark:`github-dark`},w=`md-preview--scoped-`,T=`flowdash-md-preview-scoped-`,E=new Set,D=Object.keys(l);function O(e,t){let n=RegExp(`(?:^|[;{\\n])\\s*${t}\\s*:\\s*([^;]+);`).exec(e);return n?n[1].trim():void 0}var k=D.map(e=>{let t=u(e)||``;return{value:e,bg:O(t,`background`),fg:O(t,`color`)}});function ee(e){if(typeof document>`u`)return;let t=typeof e==`string`&&e.trim()?e.trim():S,n=u(t)??u(`github`),r=document.getElementById(b);if(!n){r?.remove();return}r||(r=document.createElement(`style`),r.id=b,document.head.appendChild(r)),r.setAttribute(x,t),r.textContent!==n&&(r.textContent=n)}function A(e){let t=typeof e==`string`&&e.trim()?e.trim():S;return w+(u(t)?t:S).toLowerCase().replace(/[^a-z0-9_-]+/g,`-`)}function j(e){let t=A(e);if(typeof document>`u`||E.has(t))return t;let n=t.slice(19),r=u(n)??u(`github`);if(!r)return null;let i=document.createElement(`style`);return i.id=`${T}${n}`,i.setAttribute(x,n),i.textContent=r.replace(/\.md-preview(?![\w-])/g,`.md-preview.${t}`),document.head.appendChild(i),E.add(t),t}r(),t();var M=c(`config`,()=>{let t=s(``),r=s([]),i=s([]),o=s([]),c=s([]),l=s([]),u=s([]),p=s([]),m=s([]),g=s(!1),_=s({enabled:!1,type:`command`,refId:``}),v=s(!1),b=s(!1),x=s(``),C=s(``),w=s(``),T=s(!0),E=s(!1),O=s(!0),k=s(!1),A=s(!1),j=s(!0),M=s(`light`),N=s(`zh-CN`),P=s([]),F=s(1e3),I=s(8e5),L=s([]),R=s(null),z=s(`claude`),B=s(!0),V=s(!1),H=s(!0),U={layout:{leftRatio:.25,midRatio:.375,rightRatio:.375,topRatio:.5},layoutsByProject:{},aiDiffSummaryByProject:{},fileListViewMode:`list`,fileDiffSplitPercent:35,diffPreviewSplitPercent:55,commandConsole:{expanded:!0,useTerminal:!0,showTerminalSessions:!0,splitPercent:25},editorAutoSave:!0,fileTreeAutoRefresh:!0,editorSidebarWidth:220,mindmapDirs:[],mindmapDir:``,headerToolsHidden:[],lastTaskExecutor:null,pickerGlobalSearch:!1,markdownTheme:S,editorWorkspaceByProject:{}},W=s(JSON.parse(JSON.stringify(U))),G=s(!1);function te(e){w.value=e||``}let ne=e(()=>{let e=w.value;return e?W.value.aiDiffSummaryByProject[e]!==!1:!1});function re(){let e=w.value;if(e&&W.value.layoutsByProject?.[e]){W.value.layout={...W.value.layoutsByProject[e]};return}}function K(e){let t=document.documentElement;e===`dark`?t.setAttribute(`data-theme`,`dark`):e===`light`?t.removeAttribute(`data-theme`):window.matchMedia(`(prefers-color-scheme: dark)`).matches?t.setAttribute(`data-theme`,`dark`):t.removeAttribute(`data-theme`)}function ie(){let e=document.documentElement.getAttribute(`data-theme`)===`dark`?`light`:`dark`;return M.value=e,K(e),Ie({theme:e}).catch(e=>{console.error(`保存主题切换结果失败:`,e)}),e}K(M.value);let q=e(()=>({defaultCommitMessage:t.value,descriptionTemplates:r.value,scopeTemplates:i.value,messageTemplates:o.value,commandTemplates:c.value,lockedFiles:l.value,customCommands:u.value,orchestrations:p.value,startupItems:m.value,startupAutoRun:g.value,afterQuickPushAction:_.value,currentDirectory:w.value})),ae=e(()=>!!(x.value&&x.value.trim()));async function oe(){try{let e=await fetch(`/api/config/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`}}),t=await e.json().catch(()=>({}));return e.ok&&t?.success?(n.success(f(`@D50BB:已打开系统配置文件`)),!0):(n.error(`${f(`@D50BB:打开系统配置文件失败: `)}${t?.error||``}`),!1)}catch(e){return n.error(`${f(`@D50BB:打开系统配置文件失败: `)}${e.message}`),!1}}async function J(e=!1){if(!e&&b.value&&!v.value)return console.log(f(`@D50BB:使用缓存的配置信息`)),q.value;v.value=!0;try{v.value=!0,console.log(f(`@D50BB:加载配置信息...`));let e=await fetch(`/api/config/getConfig`),a=await e.json().catch(()=>({}));if(!e.ok||a&&a.success===!1){let e=String(a?.error||f(`@D50BB:加载配置失败`)),t=String(a?.configPath||``),r=t?`\n${f(`@D50BB:配置文件`)}: ${t}`:``;return n.error(`${f(`@D50BB:加载配置失败: `)}${e}${r}`),x.value=e,C.value=t,null}if(x.value=``,C.value=``,t.value=a.defaultCommitMessage||``,r.value=a.descriptionTemplates||[],i.value=a.scopeTemplates||[],o.value=a.messageTemplates||[],c.value=a.commandTemplates||[],l.value=a.lockedFiles||[],u.value=a.customCommands||[],p.value=a.orchestrations||[],m.value=(a.startupItems||[]).map(e=>({id:String(e?.id??``),type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId??e?.commandId??``),createdAt:Number(e?.createdAt??Date.now()),enabled:typeof e?.enabled!=`boolean`||e.enabled})).filter(e=>e.id&&e.refId),g.value=a.startupAutoRun||!1,_.value={enabled:!!a?.afterQuickPushAction?.enabled,type:a?.afterQuickPushAction?.type===`workflow`?`workflow`:`command`,refId:String(a?.afterQuickPushAction?.refId||``).trim()},a.isStandardCommit!==void 0&&(O.value=!!a.isStandardCommit),a.skipHooks!==void 0&&(k.value=!!a.skipHooks),a.autoQuickPushOnEnter!==void 0&&(A.value=!!a.autoQuickPushOnEnter),a.autoSetDefaultMessage!==void 0&&(E.value=!!a.autoSetDefaultMessage),a.autoClosePushModal!==void 0&&(T.value=!!a.autoClosePushModal),a.pullBeforePush!==void 0&&(j.value=!!a.pullBeforePush),Array.isArray(a.models)&&(P.value=a.models),Number.isFinite(Number(a.aiMaxToolIterations))&&Number(a.aiMaxToolIterations)>0&&(F.value=Math.floor(Number(a.aiMaxToolIterations))),Number.isFinite(Number(a.aiMaxRequestTokens))&&Number(a.aiMaxRequestTokens)>0&&(I.value=Math.floor(Number(a.aiMaxRequestTokens))),Number.isFinite(Number(a?.aiRequestBudget?.maxUserChars))&&Number(a.aiRequestBudget.maxUserChars)>0&&(R.value={maxTokens:Math.floor(Number(a.aiRequestBudget.maxTokens)||0),maxChars:Math.floor(Number(a.aiRequestBudget.maxChars)||0),maxMessages:Math.floor(Number(a.aiRequestBudget.maxMessages)||0),maxUserChars:Math.floor(Number(a.aiRequestBudget.maxUserChars))}),Array.isArray(a.agentPresetPrompts)&&(L.value=a.agentPresetPrompts.filter(e=>e&&typeof e.label==`string`&&typeof e.prompt==`string`).map(e=>({id:String(e.id??``),label:e.label,prompt:e.prompt}))),h(a.taskExecutor)&&(z.value=a.taskExecutor),typeof a.notifyPageOnTaskDone==`boolean`&&(B.value=a.notifyPageOnTaskDone),typeof a.notifyBrowserOnTaskDone==`boolean`&&(V.value=a.notifyBrowserOnTaskDone),typeof a.notifySoundOnTaskDone==`boolean`&&(H.value=a.notifySoundOnTaskDone),a.theme&&[`light`,`dark`,`auto`].includes(a.theme)&&(M.value=a.theme,K(a.theme)),a.locale&&[`zh-CN`,`en-US`].includes(a.locale)){N.value=a.locale,d(a.locale);let e=y();e.currentLocale=a.locale}if(a.currentDirectory&&(w.value=a.currentDirectory),a.ui==null){let e=e=>{try{return localStorage.getItem(e)}catch{return null}},t={},n=e(`zen-gitsync-layout-left-ratio`),r=e(`zen-gitsync-layout-mid-ratio`),i=e(`zen-gitsync-layout-right-ratio`),a=e(`zen-gitsync-layout-top-ratio`);if(n||r||i||a){let e=(e,t)=>{let n=e==null?NaN:parseFloat(e);return Number.isFinite(n)?n:t};t.layout={leftRatio:e(n,U.layout.leftRatio),midRatio:e(r,U.layout.midRatio),rightRatio:e(i,U.layout.rightRatio),topRatio:e(a,U.layout.topRatio)}}let o=e(`zen-gitsync-file-list-view-mode`);(o===`list`||o===`tree`)&&(t.fileListViewMode=o);let s=e(`zen-gitsync-filediff-ratio`)??e(`fileDiff.splitPercent`);if(s!=null){let e=parseFloat(s);Number.isFinite(e)&&(t.fileDiffSplitPercent=Math.min(85,Math.max(15,e)))}let c=e(`useTerminal`),l=e(`isConsoleExpanded`),u=e(`showTerminalSessions`),d=e(`zen-gitsync-commandconsole-ratio`);if(c!==null||l!==null||u!==null||d!=null){let e=d==null?NaN:parseFloat(d);t.commandConsole={useTerminal:c!==`false`,expanded:l!==`false`,showTerminalSessions:u==null||u===`true`,splitPercent:Number.isFinite(e)?Math.min(85,Math.max(15,e)):U.commandConsole.splitPercent}}let f=e(`zen-gitsync-editor-auto-save`);f!=null&&(t.editorAutoSave=f===`true`),Object.keys(t).length>0&&(W.value={...W.value,...t}),Object.keys(t).length>0&&Q(t,{immediate:!0}).catch(e=>{console.error(`迁移 UI 设置到文件失败:`,e)});try{[`zen-gitsync-theme`,`zen-gitsync-locale`,`zen-gitsync-editor-auto-save`,`zen-gitsync-file-list-view-mode`,`zen-gitsync-filediff-ratio`,`fileDiff.splitPercent`,`isConsoleExpanded`,`useTerminal`,`showTerminalSessions`,`zen-gitsync-commandconsole-ratio`,`zen-gitsync-layout-left-ratio`,`zen-gitsync-layout-mid-ratio`,`zen-gitsync-layout-right-ratio`,`zen-gitsync-layout-top-ratio`,`locale`].forEach(e=>localStorage.removeItem(e))}catch{}}else{let e=a.ui.layoutsByProject&&typeof a.ui.layoutsByProject==`object`&&!Array.isArray(a.ui.layoutsByProject)?a.ui.layoutsByProject:{},t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r;t[n]={leftRatio:Number.isFinite(Number(e.leftRatio))?Number(e.leftRatio):U.layout.leftRatio,midRatio:Number.isFinite(Number(e.midRatio))?Number(e.midRatio):U.layout.midRatio,rightRatio:Number.isFinite(Number(e.rightRatio))?Number(e.rightRatio):U.layout.rightRatio,topRatio:Number.isFinite(Number(e.topRatio))?Number(e.topRatio):U.layout.topRatio}}let n=a.ui.aiDiffSummaryByProject&&typeof a.ui.aiDiffSummaryByProject==`object`&&!Array.isArray(a.ui.aiDiffSummaryByProject)?a.ui.aiDiffSummaryByProject:{},r={};for(let[e,t]of Object.entries(n))typeof t==`boolean`&&(r[e]=t);let i=a.ui.editorWorkspaceByProject&&typeof a.ui.editorWorkspaceByProject==`object`&&!Array.isArray(a.ui.editorWorkspaceByProject)?a.ui.editorWorkspaceByProject:{},o={},s=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`&&e.length>0):[];for(let[e,t]of Object.entries(i)){if(!t||typeof t!=`object`||Array.isArray(t))continue;let n=t,r=s(n.tabs).slice(0,40);o[e]={expandedDirs:s(n.expandedDirs).slice(0,200),tabs:r,activeTab:typeof n.activeTab==`string`&&r.includes(n.activeTab)?n.activeTab:null}}let c=typeof a.ui.mindmapDir==`string`?a.ui.mindmapDir.trim():``,l=[],u=new Set,d=Array.isArray(a.ui.mindmapDirs)?a.ui.mindmapDirs:[];for(let e of d){if(typeof e!=`string`)continue;let t=e.trim();if(!t)continue;let n=t.toLowerCase();u.has(n)||(u.add(n),l.push(t))}l.length===0&&c&&l.push(c);let f={...U.layout,...a.ui.layout||{}};W.value={layout:f,layoutsByProject:t,aiDiffSummaryByProject:r,fileListViewMode:a.ui.fileListViewMode===`tree`?`tree`:`list`,fileDiffSplitPercent:Number.isFinite(Number(a.ui.fileDiffSplitPercent))?Math.min(85,Math.max(15,Number(a.ui.fileDiffSplitPercent))):U.fileDiffSplitPercent,diffPreviewSplitPercent:Number.isFinite(Number(a.ui.diffPreviewSplitPercent))?Math.min(85,Math.max(25,Number(a.ui.diffPreviewSplitPercent))):U.diffPreviewSplitPercent,commandConsole:{expanded:typeof a.ui.commandConsole?.expanded==`boolean`?a.ui.commandConsole.expanded:U.commandConsole.expanded,useTerminal:typeof a.ui.commandConsole?.useTerminal==`boolean`?a.ui.commandConsole.useTerminal:U.commandConsole.useTerminal,showTerminalSessions:typeof a.ui.commandConsole?.showTerminalSessions==`boolean`?a.ui.commandConsole.showTerminalSessions:U.commandConsole.showTerminalSessions,splitPercent:Number.isFinite(Number(a.ui.commandConsole?.splitPercent))?Math.min(85,Math.max(15,Number(a.ui.commandConsole.splitPercent))):U.commandConsole.splitPercent},editorAutoSave:typeof a.ui.editorAutoSave==`boolean`?a.ui.editorAutoSave:U.editorAutoSave,fileTreeAutoRefresh:typeof a.ui.fileTreeAutoRefresh==`boolean`?a.ui.fileTreeAutoRefresh:U.fileTreeAutoRefresh,editorSidebarWidth:Number.isFinite(Number(a.ui.editorSidebarWidth))?Math.min(400,Math.max(140,Number(a.ui.editorSidebarWidth))):U.editorSidebarWidth,mindmapDirs:l,mindmapDir:c,headerToolsHidden:Array.isArray(a.ui.headerToolsHidden)?a.ui.headerToolsHidden.filter(e=>typeof e==`string`):[],lastTaskExecutor:h(a.ui.lastTaskExecutor)?a.ui.lastTaskExecutor:U.lastTaskExecutor,pickerGlobalSearch:typeof a.ui.pickerGlobalSearch==`boolean`?a.ui.pickerGlobalSearch:U.pickerGlobalSearch,markdownTheme:typeof a.ui.markdownTheme==`string`&&D.includes(a.ui.markdownTheme)?a.ui.markdownTheme:U.markdownTheme,editorWorkspaceByProject:o}}return re(),ee(W.value.markdownTheme),G.value=!0,b.value=!0,console.log(f(`@D50BB:配置信息加载完成`)),q.value}catch(e){return console.error(`加载配置失败:`,e),n.error(`${f(`@D50BB:加载配置失败: `)}${e.message}`),x.value=e.message,null}finally{v.value=!1}}async function se(){try{await fetch(`/api/config/save-commit-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({isStandardCommit:O.value,skipHooks:k.value,autoQuickPushOnEnter:A.value,autoSetDefaultMessage:E.value,autoClosePushModal:T.value,pullBeforePush:j.value})})}catch(e){console.error(`保存提交设置失败:`,e)}}a([O,k,A,E,T,j],()=>{b.value&&se()});let Y=null,X={};async function Z(){if(Y&&=(clearTimeout(Y),null),Object.keys(X).length===0)return;let e=X;X={};try{await fetch(`/api/config/save-ui-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}catch(e){console.error(`保存 UI 设置失败:`,e)}}async function Q(e,t={}){if(G.value){if(t.immediate){Object.assign(X,e),await Z();return}Object.assign(X,e),Y&&clearTimeout(Y),Y=setTimeout(()=>{Z()},300)}}async function ce(e){h(e)&&W.value.lastTaskExecutor!==e&&(W.value.lastTaskExecutor=e,await Q({lastTaskExecutor:e},{immediate:!0}))}let le=e(()=>h(W.value.lastTaskExecutor)?W.value.lastTaskExecutor:z.value);async function ue(){W.value.layout={...U.layout};let e=w.value;return e&&(W.value.layoutsByProject={...W.value.layoutsByProject,[e]:{...W.value.layout}}),await Q({layoutsByProject:W.value.layoutsByProject},{immediate:!0}),W.value.layout}async function de(e){let t=w.value;t&&(W.value.aiDiffSummaryByProject={...W.value.aiDiffSummaryByProject,[t]:e},await Q({aiDiffSummaryByProject:{[t]:e}},{immediate:!0}))}async function fe(e){if(!Number.isFinite(e))return;let t=Math.min(400,Math.max(140,e));W.value.editorSidebarWidth=t,await Q({editorSidebarWidth:t})}function pe(e){let t=w.value;if(!t)return;let n=e.tabs.slice(0,40);W.value.editorWorkspaceByProject={...W.value.editorWorkspaceByProject,[t]:{expandedDirs:e.expandedDirs.slice(0,200),tabs:n,activeTab:e.activeTab&&n.includes(e.activeTab)?e.activeTab:null}},Q({editorWorkspaceByProject:W.value.editorWorkspaceByProject})}function me(e){let t=e??w.value;return t?W.value.editorWorkspaceByProject[t]??null:null}a(()=>W.value.fileListViewMode,e=>{G.value&&Q({fileListViewMode:e})}),a(()=>W.value.fileDiffSplitPercent,e=>{G.value&&Q({fileDiffSplitPercent:e})}),a(()=>W.value.diffPreviewSplitPercent,e=>{G.value&&e!=null&&Q({diffPreviewSplitPercent:e})}),a(()=>W.value.editorAutoSave,e=>{G.value&&Q({editorAutoSave:e})}),a(()=>W.value.fileTreeAutoRefresh,e=>{G.value&&Q({fileTreeAutoRefresh:e})}),a(()=>W.value.headerToolsHidden,e=>{G.value&&Array.isArray(e)&&Q({headerToolsHidden:e})}),a(()=>W.value.mindmapDirs,e=>{G.value&&Array.isArray(e)&&Q({mindmapDirs:e})}),a(()=>W.value.pickerGlobalSearch,e=>{G.value&&Q({pickerGlobalSearch:e})});let he=e(()=>W.value.markdownTheme);async function ge(e){let t=D.includes(e)?e:U.markdownTheme;return W.value.markdownTheme=t,ee(t),await Q({markdownTheme:t},{immediate:!0}),t}a(()=>W.value.markdownTheme,e=>{G.value&&typeof e==`string`&&e&&(ee(e),Q({markdownTheme:e}))}),a(()=>W.value.layout,e=>{if(!G.value)return;let t=w.value;t&&(W.value.layoutsByProject={...W.value.layoutsByProject,[t]:e},Q({layoutsByProject:W.value.layoutsByProject}))},{deep:!0}),a(()=>W.value.commandConsole,e=>{G.value&&Q({commandConsole:e})},{deep:!0}),typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{Z()});async function _e(e){try{let r=await(await fetch(`/api/config/saveDefaultMessage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({defaultCommitMessage:e})})).json();return r.success?(t.value=e,n.success(f(`@D50BB:默认提交信息已保存`)),!0):(n.error(`${f(`@D50BB:保存失败: `)}${r.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存失败: `)}${e.message}`),!1}}async function ve(e){try{let t=await(await fetch(`/api/config/save-after-quick-push-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({afterQuickPushAction:{enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()}})})).json();return t.success?(_.value={enabled:!!e?.enabled,type:e?.type===`workflow`?`workflow`:`command`,refId:String(e?.refId||``).trim()},!0):(n.error(`保存提交后启动项失败: ${t.error}`),!1)}catch(e){return n.error(`保存提交后启动项失败: ${e.message}`),!1}}async function ye(e,t){try{let a=await(await fetch(`/api/config/save-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return a.success?(t===`description`?r.value.includes(e)||r.value.push(e):t===`scope`?i.value.includes(e)||i.value.push(e):t===`message`?o.value.includes(e)||o.value.push(e):t===`command`&&(c.value.includes(e)||c.value.push(e)),n.success(f(`@D50BB:模板已保存`)),!0):(n.error(`${f(`@D50BB:保存模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模板失败: `)}${e.message}`),!1}}async function be(e,t){try{let a=await(await fetch(`/api/config/delete-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return a.success?(t===`description`?r.value=r.value.filter(t=>t!==e):t===`scope`?i.value=i.value.filter(t=>t!==e):t===`message`?o.value=o.value.filter(t=>t!==e):t===`command`&&(c.value=c.value.filter(t=>t!==e)),n.success(f(`@D50BB:模板已删除`)),!0):(n.error(`${f(`@D50BB:删除模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:删除模板失败: `)}${e.message}`),!1}}async function xe(e,t,a){try{let s=await(await fetch(`/api/config/update-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldTemplate:e,newTemplate:t,type:a})})).json();if(s.success){if(a===`description`){let n=r.value.indexOf(e);n!==-1&&(r.value[n]=t)}else if(a===`scope`){let n=i.value.indexOf(e);n!==-1&&(i.value[n]=t)}else if(a===`message`){let n=o.value.indexOf(e);n!==-1&&(o.value[n]=t)}else if(a===`command`){let n=c.value.indexOf(e);n!==-1&&(c.value[n]=t)}return n.success(f(`@D50BB:模板已更新`)),!0}return n.error(`${f(`@D50BB:更新模板失败: `)}${s.error}`),!1}catch(e){return n.error(`${f(`@D50BB:更新模板失败: `)}${e.message}`),!1}}async function Se(e,t){try{let a=await(await fetch(`/api/config/pin-template`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({template:e,type:t})})).json();return a.success?(t===`description`?(r.value=r.value.filter(t=>t!==e),r.value.unshift(e)):t===`scope`?(i.value=i.value.filter(t=>t!==e),i.value.unshift(e)):t===`message`?(o.value=o.value.filter(t=>t!==e),o.value.unshift(e)):t===`command`&&(c.value=c.value.filter(t=>t!==e),c.value.unshift(e)),n.success(f(`@D50BB:模板已置顶`)),!0):(n.error(`${f(`@D50BB:置顶模板失败: `)}${a.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:置顶模板失败: `)}${e.message}`),!1}}async function $(){try{let e=await(await fetch(`/api/locked-files`)).json();return e.success?(l.value=e.lockedFiles||[],e.lockedFiles):(n.error(`${f(`@D50BB:加载锁定文件列表失败: `)}${e.error}`),[])}catch(e){return console.error(`加载锁定文件列表失败:`,e),n.error(`${f(`@D50BB:加载锁定文件列表失败: `)}${e.message}`),[]}}async function Ce(e){try{let t=await(await fetch(`/api/lock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(await $(),n.success(`${f(`@D50BB:文件已锁定: `)}${e}`),!0):(n.error(`${f(`@D50BB:锁定文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`锁定文件失败:`,e),n.error(`${f(`@D50BB:锁定文件失败: `)}${e.message}`),!1}}async function we(e){try{let t=await(await fetch(`/api/unlock-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?(await $(),n.success(`${f(`@D50BB:文件已解锁: `)}${e}`),!0):(n.error(`${f(`@D50BB:解锁文件失败: `)}${t.error}`),!1)}catch(e){return console.error(`解锁文件失败:`,e),n.error(`${f(`@D50BB:解锁文件失败: `)}${e.message}`),!1}}async function Te(e){try{let t=await(await fetch(`/api/check-file-lock`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e})})).json();return t.success?t.isLocked:(console.error(`检查文件锁定状态失败:`,t.error),!1)}catch(e){return console.error(`检查文件锁定状态失败:`,e),!1}}async function Ee(e){try{let t=await(await fetch(`/api/config/save-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:e})})).json();return t.success?(await J(!0),n.success(f(`@CMD01:命令已保存`)),!0):(n.error(`${f(`@CMD01:保存命令失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@CMD01:保存命令失败: `)}${e.message}`),!1}}async function De(e){try{let t=await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await J(!0),n.success(f(`@CMD01:命令已删除`)),!0):(n.error(`${f(`@CMD01:删除命令失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@CMD01:删除命令失败: `)}${e.message}`),!1}}async function Oe(e,t){try{let r=await(await fetch(`/api/config/update-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,command:t})})).json();return r.success?(await J(!0),n.success(f(`@CMD01:命令已更新`)),!0):(n.error(`${f(`@CMD01:更新命令失败: `)}${r.error}`),!1)}catch(e){return n.error(`${f(`@CMD01:更新命令失败: `)}${e.message}`),!1}}async function ke(e){try{let t=await(await fetch(`/api/config/pin-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await J(!0),!0):(n.error(t.error),!1)}catch(e){return n.error(e.message),!1}}async function Ae(e){try{let t=await(await fetch(`/api/config/save-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orchestration:e})})).json();return t.success?(await J(!0),n.success(f(`@ORCH:编排已保存`)),t.orchestration||null):(n.error(`${f(`@ORCH:保存编排失败: `)}${t.error}`),null)}catch(e){return n.error(`${f(`@ORCH:保存编排失败: `)}${e.message}`),null}}async function je(e){try{let t=await(await fetch(`/api/config/delete-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e})})).json();return t.success?(await J(!0),n.success(f(`@ORCH:编排已删除`)),!0):(n.error(`${f(`@ORCH:删除编排失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@ORCH:删除编排失败: `)}${e.message}`),!1}}async function Me(e,t){try{let r=await(await fetch(`/api/config/update-orchestration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,orchestration:t})})).json();return r.success?(await J(!0),n.success(f(`@ORCH:编排已更新`)),!0):(n.error(`${f(`@ORCH:更新编排失败: `)}${r.error}`),!1)}catch(e){return n.error(`${f(`@ORCH:更新编排失败: `)}${e.message}`),!1}}async function Ne(e,t){try{let r=await(await fetch(`/api/config/save-startup-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({startupItems:e,startupAutoRun:t===void 0?g.value:t})})).json();return r.success?(m.value=e,t!==void 0&&(g.value=t),!0):(n.error(`保存启动项失败: ${r.error}`),!1)}catch(e){return n.error(`保存启动项失败: ${e.message}`),!1}}async function Pe(e){try{let t=await(await fetch(`/api/config/save-ai-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...e.aiMaxToolIterations===void 0?{}:{aiMaxToolIterations:e.aiMaxToolIterations},...e.aiMaxRequestTokens===void 0?{}:{aiMaxRequestTokens:e.aiMaxRequestTokens},...e.agentPresetPrompts===void 0?{}:{agentPresetPrompts:e.agentPresetPrompts}})})).json();return t.success?(t.aiMaxToolIterations!==void 0&&(F.value=Number(t.aiMaxToolIterations)||e.aiMaxToolIterations||F.value),t.aiMaxRequestTokens!==void 0&&(I.value=Number(t.aiMaxRequestTokens)||e.aiMaxRequestTokens||I.value),t.aiRequestBudget&&Number(t.aiRequestBudget.maxUserChars)>0&&(R.value={maxTokens:Math.floor(Number(t.aiRequestBudget.maxTokens)||0),maxChars:Math.floor(Number(t.aiRequestBudget.maxChars)||0),maxMessages:Math.floor(Number(t.aiRequestBudget.maxMessages)||0),maxUserChars:Math.floor(Number(t.aiRequestBudget.maxUserChars))}),Array.isArray(t.agentPresetPrompts)&&(L.value=t.agentPresetPrompts),!0):(n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存 AI 设置失败: `)}${e.message}`),!1}}async function Fe(e){try{let t=await(await fetch(`/api/config/save-models`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({models:e})})).json();return t.success?(P.value=e,!0):(n.error(`${f(`@D50BB:保存模型失败: `)}${t.error}`),!1)}catch(e){return n.error(`${f(`@D50BB:保存模型失败: `)}${e.message}`),!1}}async function Ie(e){try{let t=await(await fetch(`/api/config/save-general-settings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();if(t.success){if(e.theme&&(M.value=e.theme,K(e.theme)),e.locale){N.value=e.locale,d(e.locale);let t=y();t.currentLocale=e.locale}return h(e.taskExecutor)&&(z.value=e.taskExecutor),typeof e.notifyPageOnTaskDone==`boolean`&&(B.value=e.notifyPageOnTaskDone),typeof e.notifyBrowserOnTaskDone==`boolean`&&(V.value=e.notifyBrowserOnTaskDone),typeof e.notifySoundOnTaskDone==`boolean`&&(H.value=e.notifySoundOnTaskDone),!0}return n.error(`保存通用设置失败: ${t.error}`),!1}catch(e){return n.error(`保存通用设置失败: ${e.message}`),!1}}return{models:P,aiMaxToolIterations:F,aiMaxRequestTokens:I,agentPresetPrompts:L,aiRequestBudget:R,taskExecutor:z,resolvedTaskExecutor:le,setLastTaskExecutor:ce,notifyPageOnTaskDone:B,notifyBrowserOnTaskDone:V,notifySoundOnTaskDone:H,defaultCommitMessage:t,descriptionTemplates:r,scopeTemplates:i,messageTemplates:o,commandTemplates:c,lockedFiles:l,customCommands:u,orchestrations:p,startupItems:m,startupAutoRun:g,afterQuickPushAction:_,isLoading:v,isLoaded:b,configLoadError:x,configFilePath:C,hasConfigLoadError:ae,currentDirectory:w,config:q,autoClosePushModal:T,autoSetDefaultMessage:E,isStandardCommit:O,skipHooks:k,autoQuickPushOnEnter:A,pullBeforePush:j,theme:M,locale:N,ui:W,isUiLoaded:G,aiDiffSummaryEnabled:ne,markdownTheme:he,loadConfig:J,setCurrentDirectory:te,openSystemConfigFile:oe,saveTemplate:ye,saveModels:Fe,saveAiSettings:Pe,saveGeneralSettings:Ie,saveUiSettings:Q,setAiDiffSummaryEnabled:de,setEditorSidebarWidth:fe,saveEditorWorkspace:pe,getEditorWorkspace:me,setMarkdownTheme:ge,resetUiLayout:ue,applyTheme:K,toggleTheme:ie,saveDefaultMessage:_e,deleteTemplate:be,updateTemplate:xe,pinTemplate:Se,loadLockedFiles:$,lockFile:Ce,unlockFile:we,isFileLocked:Te,saveCustomCommand:Ee,deleteCustomCommand:De,updateCustomCommand:Oe,pinCustomCommand:ke,saveOrchestration:Ae,deleteOrchestration:je,updateOrchestration:Me,saveStartupItems:Ne,saveAfterQuickPushAction:ve,saveCommitSettings:se}});export{A as a,h as c,j as i,g as l,C as n,y as o,k as r,m as s,M as t};
|