zen-gitsync 2.13.4 → 2.13.6

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zen-gitsync",
3
- "version": "2.13.4",
3
+ "version": "2.13.6",
4
4
  "description": "Auto commit, scheduled sync, and visual GUI for Git. Run `g` in any repo for one-key commit & push, AI commit messages, scheduled background sync, and a drag-and-drop workflow builder.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -0,0 +1,3 @@
1
+ import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{An as t,Bn as n,Gn as r,Ln as i,Mn as a,P as o,Pn as s,Qn as c,Rn as l,Un as ee,Vn as u,Wn as d,Xn as f,Zn as te,_ as ne,_t as re,c as p,cr as m,d as h,dr as g,er as _,f as ie,fr as ae,g as oe,gr as v,h as se,hr as y,jn as b,m as ce,mr as x,nr as S,or as le,p as ue,pr as C,qn as de,sr as w,t as fe,v as pe,y as me}from"./vendor-C30huq-U.js";import{n as T,t as E}from"./_plugin-vue_export-helper-Dw3U5p9d.js";import{a as he,r as ge}from"./index-DyR_trSU.js";var _e=e(h(),1),ve={class:`source-map-view`},ye={class:`sm-toolbar`},be={class:`sm-toolbar-left`},xe={class:`sm-title`},Se={class:`sm-toolbar-center`},Ce=[`placeholder`,`disabled`],we=[`disabled`],Te={class:`sm-toolbar-right`},Ee={class:`sm-body`},De={class:`sm-panel-header sm-panel-header--tabs`},Oe={key:0,class:`sm-badge`},ke={class:`sm-panel-body sm-file-tree`},Ae=[`onClick`],je={key:1,class:`sm-tree-arrow-spacer`},Me={key:2,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Ne=[`xlink:href`],Pe={key:3,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Fe=[`xlink:href`],Ie=[`title`],Le={key:1,class:`sm-tree-empty`},Re={class:`sm-panel-body sm-outline-body`},ze={class:`sm-badge`,style:{"margin-left":`auto`}},Be=[`onClick`],Ve=[`title`],He={key:0,class:`sm-outline-desc`},Ue={key:1,class:`sm-tree-empty`},We={class:`sm-panel sm-panel-graph`},Ge={key:0,class:`sm-project-info`},Ke={class:`sm-lang-badge`},qe={class:`sm-summary-text`},Je={class:`sm-graph-container`},Ye={class:`sm-layout-btn-wrap`},Xe=[`disabled`],Ze=[`title`],Qe={class:`sm-fn-label`},$e={key:0,class:`sm-fn-desc`},et={key:0,class:`sm-graph-empty`},tt={viewBox:`0 0 24 24`,width:`48`,height:`48`,fill:`none`,stroke:`currentColor`,"stroke-width":`1`,style:{opacity:`0.3`}},nt={key:1,class:`sm-graph-loading`},rt={class:`sm-log-header`},it={key:0,class:`sm-log-indicator`},at={class:`sm-log-body`,ref:`logBodyRef`},ot={key:0,class:`sm-empty`},st={class:`sm-panel-header`},ct={key:0,class:`sm-badge sm-badge-amber`},lt={key:0,class:`sm-node-detail`},ut={class:`sm-node-name`},dt={class:`sm-node-file`},ft={key:0},pt={key:0,class:`sm-node-desc`},mt={class:`sm-panel-body sm-source-body`},ht={key:0,class:`sm-source-overlay`},gt={key:1,class:`sm-source-overlay sm-source-placeholder`},D=E(de({__name:`SourceMapView`,setup(e){let h=g(document.documentElement.getAttribute(`data-theme`)===`dark`?`dark`:`light`);function de(){h.value=document.documentElement.getAttribute(`data-theme`)===`dark`?`dark`:`light`}let E=null,D=he(),O=g(D.currentDirectory||``),k=g(`idle`),A=g([]),_t=0,j=g(null),M=g(null),N=g(`files`),P=g(``),F=g(``),I=g(!1),L=g([]),R=g(new Set),z=g({files:!0,graph:!0,source:!0}),B=g(!1),V=g(220),H=g(360),U=g(140),W=null,G=0,vt=0,K=0;function q(e,t){W=e,G=t.clientX,vt=t.clientY,K=e===`files`?V.value:e===`source`?H.value:U.value,document.addEventListener(`mousemove`,yt),document.addEventListener(`mouseup`,J),t.preventDefault()}function yt(e){W&&(W===`files`?V.value=Math.max(120,Math.min(480,K+e.clientX-G)):W===`source`?H.value=Math.max(200,Math.min(700,K+G-e.clientX)):U.value=Math.max(60,Math.min(500,K+vt-e.clientY)))}function J(){W=null,document.removeEventListener(`mousemove`,yt),document.removeEventListener(`mouseup`,J)}let Y=g(null),X=ae(null),{fitView:bt,setNodes:xt,setEdges:St,getNodes:Ct,getEdges:wt,updateNodeInternals:Tt}=me(),Z=i(()=>k.value===`scanning`||k.value===`analyzing`),Et=i(()=>h.value===`dark`?`#334155`:`#cbd5e1`),Q=i(()=>j.value?.nodes.find(e=>e.id===M.value)??null),Dt=i(()=>{if(!j.value)return[];let e=new Map;for(let t of j.value.nodes){let n=t.subsystem??`__default__`;if(!e.has(n)){let r=j.value.subsystems?.find(e=>e.name===n);e.set(n,{displayName:r?.displayName||t.subsystem||T(`@SRCMAP:默认`),color:t.subsystemColor||kt[0],nodes:[]})}e.get(n).nodes.push(t)}return[...e.entries()].map(([,e])=>e)});function $(e,t=`info`){A.value.push({id:++_t,message:e,type:t,timestamp:Date.now()}),A.value.length>200&&A.value.splice(0,A.value.length-200)}function Ot(e){let t={name:``,path:``,kind:`dir`,children:[],childMap:new Map};for(let n of e){let e=n.trim().split(`/`).filter(Boolean),r=t,i=``;for(let t=0;t<e.length;t++){let n=e[t];i=i?`${i}/${n}`:n;let a=t===e.length-1,o=r.childMap.get(n);o||(o={name:n,path:i,kind:a?`file`:`dir`,children:[],childMap:new Map},r.childMap.set(n,o),r.children.push(o)),r=o}}let n=e=>{e.sort((e,t)=>e.kind===t.kind?e.name.localeCompare(t.name):e.kind===`dir`?-1:1),e.forEach(e=>{e.kind===`dir`&&n(e.children)})};return n(t.children),t.children}let kt=[`#f59e0b`,`#3b82f6`,`#10b981`,`#8b5cf6`];function At(e){return e.subsystemColor?e.subsystemColor:e.subsystemIndex===void 0?e.importance===`high`?`#f59e0b`:e.importance===`low`?`#94a3b8`:`#3b82f6`:kt[e.subsystemIndex%kt.length]}function jt(e){return{ts:`typescript`,tsx:`typescript`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,jsx:`javascript`,vue:`html`,svelte:`html`,html:`html`,py:`python`,java:`java`,go:`go`,rs:`rust`,cpp:`cpp`,cc:`cpp`,cxx:`cpp`,c:`c`,h:`c`,hpp:`cpp`,cs:`csharp`,rb:`ruby`,php:`php`,swift:`swift`,kt:`kotlin`,sh:`shell`,bash:`shell`,json:`json`,yaml:`yaml`,yml:`yaml`,md:`markdown`,css:`css`,scss:`scss`,less:`less`,sql:`sql`}[e.split(`.`).pop()?.toLowerCase()||``]||`plaintext`}function Mt(){!Y.value||X.value||(X.value=p.create(Y.value,{value:``,language:`plaintext`,theme:h.value===`dark`?`vs-dark`:`vs`,readOnly:!0,fontSize:12,lineHeight:19,fontFamily:`'JetBrains Mono', 'Fira Code', Consolas, monospace`,minimap:{enabled:!1},scrollBeyondLastLine:!1,automaticLayout:!0,wordWrap:`off`,padding:{top:8,bottom:8},scrollbar:{verticalScrollbarSize:6,horizontalScrollbarSize:6}}))}le(h,e=>{X.value&&p.setTheme(e===`dark`?`vs-dark`:`vs`)});function Nt(e,t){let n={};t.forEach(e=>{n[e.source]||(n[e.source]=[]),n[e.source].push(e.target)});let r=new Map;e.forEach(e=>{let t=e.subsystem??`__default`;r.has(t)||r.set(t,[]),r.get(t).push(e)});let i=[],a=0;for(let[,e]of r){let t=new Set(e.map(e=>e.id)),r={},o=e.length?[e[0].id]:[];for(o[0]&&(r[o[0]]=0);o.length;){let e=o.shift();(n[e]||[]).filter(e=>t.has(e)).forEach(t=>{r[t]===void 0&&(r[t]=(r[e]??0)+1,o.push(t))})}let s={};e.forEach(e=>{let t=r[e.id]??0;s[t]=(s[t]||0)+1});let c={};e.forEach(e=>{let t=r[e.id]??0;c[t]=(c[t]??-1)+1;let n=c[t],o=s[t]??1,l=a*600+n*220-(o-1)*220/2,ee=t*110,u=At(e);i.push({id:e.id,type:`default`,position:{x:l,y:ee},label:e.label,class:`sm-fn-node`,data:{...e,_accentColor:u},style:{"--node-accent":u}})}),a++}return{flowNodes:i,flowEdges:t.map((e,t)=>({id:`e_${t}_${e.source}_${e.target}`,source:e.source,target:e.target,type:`smoothstep`,animated:!1,class:`sm-fn-edge`,markerEnd:{type:se.ArrowClosed}}))}}async function Pt(){let e=Ct.value,t=wt.value;if(e.length!==0){B.value=!0;try{await f(),await new Promise(e=>requestAnimationFrame(()=>e())),Tt(e.map(e=>e.id)),await new Promise(e=>requestAnimationFrame(()=>e()));let n=new Map;e.forEach(e=>{let t=e.data?.subsystem??`__default__`;n.has(t)||n.set(t,[]),n.get(t).push(e)});let r=new Map,i=0;for(let[,e]of n){let n=new _e.default.graphlib.Graph;n.setDefaultEdgeLabel(()=>({})),n.setGraph({rankdir:`TB`,nodesep:55,ranksep:75,marginx:40,marginy:40});let a=new Set(e.map(e=>e.id));e.forEach(e=>{let t=190,r=e.data?.description?68:48,i=document.querySelector(`.vue-flow__node[data-id="${e.id}"]`);i&&i.offsetWidth>0&&(t=i.offsetWidth,r=i.offsetHeight),n.setNode(e.id,{width:t,height:r})}),t.forEach(e=>{a.has(e.source)&&a.has(e.target)&&n.setEdge(e.source,e.target)}),_e.default.layout(n);let o=0;e.forEach(e=>{let t=n.node(e.id);t&&(r.set(e.id,{x:i+t.x-t.width/2,y:t.y-t.height/2}),o=Math.max(o,t.x+t.width/2))}),i+=o+120}xt(e.map(e=>({...e,position:r.get(e.id)??e.position}))),await f(),bt({padding:.18})}finally{B.value=!1}}}async function Ft(){if(!O.value.trim()){o.warning(T(`@SRCMAP:请先输入项目路径`));return}if(!Z.value){A.value=[],j.value=null,M.value=null,P.value=``,F.value=``,xt([]),St([]),k.value=`scanning`,$(T(`@SRCMAP:开始分析项目...`),`info`);try{let e=await fetch(`/api/code-analysis/analyze`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:O.value})});if(!e.ok){let t=await e.json().catch(()=>({error:`请求失败`}));throw Error(t.error||`HTTP ${e.status}`)}let t=e.body.getReader(),n=new TextDecoder,r=``;k.value=`analyzing`;let i=``,a=[];for(;;){let{done:e,value:o}=await t.read();if(e)break;r+=n.decode(o,{stream:!0});let s=r.split(`
2
+ `);r=s.pop()??``;for(let e of s)if(e.startsWith(`event:`))i=e.slice(6).trim(),a=[];else if(e.startsWith(`data:`))a.push(e.slice(5).trim());else if(e===``){if(i&&a.length){let e=a.join(``);try{let t=JSON.parse(e);It(i,t)}catch{}}i=``,a=[]}}}catch(e){$(`${T(`@SRCMAP:分析失败`)}: ${e.message}`,`error`),k.value=`error`}}}function It(e,t){if(e===`log`)$(t.message,t.type||`info`);else if(e===`files`)L.value=Ot(t.files||[]),L.value.forEach(e=>{e.kind===`dir`&&R.value.add(e.path)});else if(e===`result`){j.value={language:t.language||``,entryFile:t.entryFile||``,entryFunction:t.entryFunction||``,nodes:Array.isArray(t.nodes)?t.nodes:[],edges:Array.isArray(t.edges)?t.edges:[],techStack:Array.isArray(t.techStack)?t.techStack:[],summary:t.summary||``,allFiles:Array.isArray(t.allFiles)?t.allFiles:[],codeFiles:Array.isArray(t.codeFiles)?t.codeFiles:[],subsystems:Array.isArray(t.subsystems)?t.subsystems:void 0};let{flowNodes:e,flowEdges:n}=Nt(j.value.nodes,j.value.edges);xt(e),St(n),f(()=>Pt())}else e===`done`&&(t.error?($(`${T(`@SRCMAP:分析失败`)}: ${t.error}`,`error`),k.value=`error`):k.value=`done`)}async function Lt(e){if(!(!e||I.value)&&F.value!==e){I.value=!0,F.value=e,P.value=``;try{let t=await(await fetch(`/api/code-analysis/file-content?path=${encodeURIComponent(O.value)}&file=${encodeURIComponent(e)}`)).json();if(t.error)throw Error(t.error);P.value=t.content||``}catch(e){P.value=`// ${T(`@SRCMAP:加载失败`)}: ${e.message}`}finally{I.value=!1}}}function Rt(e){let t=e.node.data;M.value=t.id,t.file&&Lt(t.file)}function zt(e){R.value.has(e)?R.value.delete(e):R.value.add(e)}let Bt=i(()=>{let e=[];function t(n,r){for(let i of n){let n=R.value.has(i.path);e.push({name:i.name,path:i.path,kind:i.kind,depth:r,expanded:n}),i.kind===`dir`&&n&&t(i.children,r+1)}}return t(L.value,0),e});return le(()=>D.currentDirectory,e=>{e&&!O.value&&(O.value=e)}),le([P,F],([e,t])=>{let n=X.value;if(!n)return;let r=jt(t||``),i=n.getModel(),a=p.createModel(e||``,r);n.setModel(a),i?.dispose(),n.setScrollPosition({scrollTop:0,scrollLeft:0})}),c(()=>{Mt(),!O.value&&D.currentDirectory&&(O.value=D.currentDirectory),E=new MutationObserver(()=>de()),E.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]})}),te(()=>{X.value?.getModel()?.dispose(),X.value?.dispose(),J(),E?.disconnect(),E=null}),(e,i)=>{let o=re;return _(),u(`div`,ve,[l(`div`,ye,[l(`div`,be,[i[9]||=l(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,class:`sm-icon-map`},[l(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`}),l(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`}),l(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`})],-1),l(`span`,xe,v(C(T)(`@SRCMAP:源码地图`)),1)]),l(`div`,Se,[m(l(`input`,{"onUpdate:modelValue":i[0]||=e=>O.value=e,class:`sm-path-input`,placeholder:C(T)(`@SRCMAP:输入项目目录路径`),disabled:Z.value,onKeydown:a(Ft,[`enter`])},null,40,Ce),[[t,O.value]]),l(`button`,{class:`sm-btn sm-btn-primary`,disabled:Z.value,onClick:Ft},[Z.value?(_(),u(s,{key:0},[i[10]||=l(`span`,{class:`sm-spinner`},null,-1),d(` `+v(C(T)(`@SRCMAP:分析中...`)),1)],64)):(_(),u(s,{key:1},[d(v(k.value===`done`?C(T)(`@SRCMAP:重新分析`):C(T)(`@SRCMAP:开始分析`)),1)],64))],8,we)]),l(`div`,Te,[r(o,{content:C(T)(`@SRCMAP:文件列表`),placement:`bottom`},{default:w(()=>[l(`button`,{class:x([`sm-panel-btn`,{active:z.value.files}]),onClick:i[1]||=e=>z.value.files=!z.value.files},[...i[11]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[l(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`})],-1)]],2)]),_:1},8,[`content`]),r(o,{content:C(T)(`@SRCMAP:调用图`),placement:`bottom`},{default:w(()=>[l(`button`,{class:x([`sm-panel-btn`,{active:z.value.graph}]),onClick:i[2]||=e=>z.value.graph=!z.value.graph},[...i[12]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[l(`circle`,{cx:`12`,cy:`12`,r:`3`}),l(`circle`,{cx:`3`,cy:`6`,r:`2`}),l(`circle`,{cx:`21`,cy:`6`,r:`2`}),l(`circle`,{cx:`3`,cy:`18`,r:`2`}),l(`circle`,{cx:`21`,cy:`18`,r:`2`}),l(`line`,{x1:`5`,y1:`6`,x2:`9`,y2:`11`}),l(`line`,{x1:`19`,y1:`6`,x2:`15`,y2:`11`}),l(`line`,{x1:`5`,y1:`18`,x2:`9`,y2:`13`}),l(`line`,{x1:`19`,y1:`18`,x2:`15`,y2:`13`})],-1)]],2)]),_:1},8,[`content`]),r(o,{content:C(T)(`@SRCMAP:源码面板`),placement:`bottom`},{default:w(()=>[l(`button`,{class:x([`sm-panel-btn`,{active:z.value.source}]),onClick:i[3]||=e=>z.value.source=!z.value.source},[...i[13]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[l(`polyline`,{points:`16 18 22 12 16 6`}),l(`polyline`,{points:`8 6 2 12 8 18`})],-1)]],2)]),_:1},8,[`content`])])]),l(`div`,Ee,[m(l(`div`,{class:`sm-panel sm-panel-files`,style:y({width:V.value+`px`})},[l(`div`,De,[l(`button`,{class:x([`sm-tab-btn`,{active:N.value===`files`}]),onClick:i[4]||=e=>N.value=`files`},[i[14]||=l(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[l(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`})],-1),d(` `+v(C(T)(`@SRCMAP:文件列表`))+` `,1),j.value?(_(),u(`span`,Oe,v(j.value.allFiles.length),1)):n(``,!0)],2),l(`button`,{class:x([`sm-tab-btn`,{active:N.value===`outline`}]),onClick:i[5]||=e=>N.value=`outline`},[i[15]||=ee(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" data-v-71d3569e><line x1="8" y1="6" x2="21" y2="6" data-v-71d3569e></line><line x1="8" y1="12" x2="21" y2="12" data-v-71d3569e></line><line x1="8" y1="18" x2="21" y2="18" data-v-71d3569e></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-71d3569e></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-71d3569e></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-71d3569e></line></svg>`,1),d(` `+v(C(T)(`@SRCMAP:大纲`)),1)],2)]),m(l(`div`,ke,[Bt.value.length>0?(_(!0),u(s,{key:0},S(Bt.value,e=>(_(),u(`div`,{key:e.path,class:x([`sm-tree-node`,{"sm-tree-node--dir":e.kind===`dir`,"sm-tree-node--active":e.kind===`file`&&F.value===e.path}]),style:y({paddingLeft:10+e.depth*14+`px`}),onClick:t=>e.kind===`dir`?zt(e.path):Lt(e.path)},[e.kind===`dir`?(_(),u(`span`,{key:0,class:x([`sm-tree-arrow`,{expanded:e.expanded}])},[...i[16]||=[l(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[l(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(_(),u(`span`,je)),e.kind===`dir`?(_(),u(`svg`,Me,[l(`use`,{"xlink:href":`#${C(ge)(e.name)||`icon-folder`}`},null,8,Ne)])):(_(),u(`svg`,Pe,[l(`use`,{"xlink:href":`#${C(ge)(e.name)}`},null,8,Fe)])),l(`span`,{class:`sm-tree-name`,title:e.path},v(e.name),9,Ie)],14,Ae))),128)):(_(),u(`div`,Le,v(C(T)(`@SRCMAP:暂无文件,请先开始分析`)),1))],512),[[b,N.value===`files`]]),m(l(`div`,Re,[Dt.value.length>0?(_(!0),u(s,{key:0},S(Dt.value,e=>(_(),u(`div`,{key:e.displayName,class:`sm-outline-group`},[l(`div`,{class:`sm-outline-group-header`,style:y({color:e.color})},[i[17]||=l(`svg`,{viewBox:`0 0 24 24`,width:`8`,height:`8`,fill:`currentColor`},[l(`circle`,{cx:`12`,cy:`12`,r:`6`})],-1),d(` `+v(e.displayName)+` `,1),l(`span`,ze,v(e.nodes.length),1)],4),(_(!0),u(s,null,S(e.nodes,t=>(_(),u(`div`,{key:t.id,class:x([`sm-outline-node`,{"sm-outline-node--active":M.value===t.id}]),onClick:e=>{M.value=t.id,t.file&&Lt(t.file)}},[l(`span`,{class:`sm-outline-dot`,style:y({background:e.color})},null,4),l(`span`,{class:`sm-outline-label`,title:t.file||t.label},v(t.label),9,Ve),t.description?(_(),u(`span`,He,v(t.description.length>18?t.description.slice(0,18)+`…`:t.description),1)):n(``,!0)],10,Be))),128))]))),128)):(_(),u(`div`,Ue,v(C(T)(`@SRCMAP:暂无分析结果`)),1))],512),[[b,N.value===`outline`]])],4),[[b,z.value.files]]),m(l(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:i[6]||=e=>q(`files`,e)},null,544),[[b,z.value.files&&z.value.graph]]),m(l(`div`,We,[j.value?(_(),u(`div`,Ge,[l(`span`,Ke,v(j.value.language),1),j.value.subsystems&&j.value.subsystems.length>1?(_(!0),u(s,{key:0},S(j.value.subsystems,e=>(_(),u(`span`,{key:e.name,class:`sm-subsystem-tag`,style:y({borderColor:e.color,color:e.color})},`● `+v(e.displayName||e.name),5))),128)):(_(!0),u(s,{key:1},S(j.value.techStack.slice(0,4),e=>(_(),u(`span`,{key:e,class:`sm-tech-tag`},v(e),1))),128)),l(`span`,qe,v(j.value.summary),1)])):n(``,!0),l(`div`,Je,[l(`div`,Ye,[l(`button`,{class:`sm-layout-btn`,disabled:B.value||!j.value,onClick:Pt},[i[18]||=ee(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" data-v-71d3569e><rect x="3" y="3" width="7" height="7" rx="1" data-v-71d3569e></rect><rect x="14" y="3" width="7" height="7" rx="1" data-v-71d3569e></rect><rect x="3" y="14" width="7" height="7" rx="1" data-v-71d3569e></rect><rect x="14" y="14" width="7" height="7" rx="1" data-v-71d3569e></rect></svg>`,1),d(` `+v(B.value?C(T)(`@SRCMAP:布局中...`):C(T)(`@SRCMAP:优化布局`)),1)],8,Xe)]),r(C(ne),{class:`sm-vue-flow`,"default-viewport":{zoom:1},"min-zoom":.2,"max-zoom":4,"fit-view-on-init":``,onNodeClick:Rt},{"node-default":w(({data:e,label:t})=>[r(C(pe),{type:`target`,position:C(oe).Top},null,8,[`position`]),l(`div`,{class:`sm-fn-inner`,title:`${t}${e?.description?`
3
+ `+e.description:``}`},[l(`div`,Qe,v(t),1),e?.description?(_(),u(`div`,$e,v(e.description.length>22?e.description.slice(0,22)+`…`:e.description),1)):n(``,!0)],8,Ze),r(C(pe),{type:`source`,position:C(oe).Bottom},null,8,[`position`])]),default:w(()=>[r(C(ce),{variant:C(ue).Dots,gap:20,size:1,"pattern-color":Et.value},null,8,[`variant`,`pattern-color`]),r(C(ie)),r(C(fe),{"node-color":`#3b82f6`,"mask-color":h.value===`dark`?`rgba(0,0,0,0.55)`:`rgba(15,23,42,0.06)`},null,8,[`mask-color`])]),_:1}),!j.value&&!Z.value?(_(),u(`div`,et,[(_(),u(`svg`,tt,[...i[19]||=[l(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`},null,-1),l(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`},null,-1),l(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`},null,-1)]])),l(`p`,null,v(C(T)(`@SRCMAP:输入项目路径后点击开始分析`)),1)])):n(``,!0),Z.value&&!j.value?(_(),u(`div`,nt,[i[20]||=l(`span`,{class:`sm-spinner sm-spinner-lg`},null,-1),l(`p`,null,v(C(T)(`@SRCMAP:AI 正在分析项目结构...`)),1)])):n(``,!0)]),l(`div`,{class:`sm-resizer sm-resizer-h`,onMousedown:i[7]||=e=>q(`log`,e)},null,32),l(`div`,{class:`sm-log-panel`,style:y({height:U.value+`px`})},[l(`div`,rt,[i[21]||=l(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[l(`polyline`,{points:`4 17 10 11 4 5`}),l(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})],-1),d(` `+v(C(T)(`@SRCMAP:Agent 日志`))+` `,1),Z.value?(_(),u(`span`,it)):n(``,!0)]),l(`div`,at,[(_(!0),u(s,null,S(A.value.slice(-50),e=>(_(),u(`div`,{key:e.id,class:x([`sm-log-entry`,`sm-log-entry--${e.type}`])},v(e.message),3))),128)),A.value.length===0?(_(),u(`div`,ot,v(C(T)(`@SRCMAP:等待开始分析`)),1)):n(``,!0)],512)],4)],512),[[b,z.value.graph]]),m(l(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:i[8]||=e=>q(`source`,e)},null,544),[[b,z.value.graph&&z.value.source]]),m(l(`div`,{class:`sm-panel sm-panel-source`,style:y({width:H.value+`px`})},[l(`div`,st,[i[22]||=l(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[l(`polyline`,{points:`16 18 22 12 16 6`}),l(`polyline`,{points:`8 6 2 12 8 18`})],-1),d(` `+v(F.value||C(T)(`@SRCMAP:源码面板`))+` `,1),Q.value?(_(),u(`span`,ct,v(Q.value.label),1)):n(``,!0)]),Q.value?(_(),u(`div`,lt,[l(`div`,ut,v(Q.value.label),1),l(`div`,dt,[d(v(Q.value.file),1),Q.value.line?(_(),u(`span`,ft,` :`+v(Q.value.line),1)):n(``,!0)]),Q.value.description?(_(),u(`div`,pt,v(Q.value.description),1)):n(``,!0)])):n(``,!0),l(`div`,mt,[I.value?(_(),u(`div`,ht,[...i[23]||=[l(`span`,{class:`sm-spinner`},null,-1)]])):n(``,!0),!I.value&&!P.value?(_(),u(`div`,gt,v(C(T)(`@SRCMAP:点击调用图中的节点查看源码`)),1)):n(``,!0),l(`div`,{ref_key:`monacoContainerRef`,ref:Y,class:`sm-monaco-container`},null,512)])],4),[[b,z.value.source]])])])}}}),[[`__scopeId`,`data-v-71d3569e`]]);export{D as default};
@@ -0,0 +1 @@
1
+ .ai-split-status[data-v-fa5bf380]{align-items:center;gap:var(--spacing-base);margin-bottom:var(--spacing-md);color:var(--el-color-primary);font-size:13px;display:flex}.ai-split-status.is-error[data-v-fa5bf380]{color:var(--el-color-danger)}.ai-split-status .is-loading[data-v-fa5bf380]{animation:2s linear infinite rotating-fa5bf380}@keyframes rotating-fa5bf380{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ai-split-tabs[data-v-fa5bf380]{margin-top:-8px}.ai-split-tab-count[data-v-fa5bf380]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;margin-left:4px;font-size:11px}.ai-split-prompt-actions[data-v-fa5bf380]{justify-content:flex-end;margin-bottom:8px;display:flex}.ai-split-prompt-editor[data-v-fa5bf380]{flex-direction:column;gap:8px;margin-bottom:12px;display:flex}.ai-split-prompt-editor__actions[data-v-fa5bf380]{justify-content:flex-end;gap:8px;display:flex}.ai-split-subhead[data-v-fa5bf380]{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;margin:12px 0 4px;font-size:12px;font-weight:600}.ai-split-pre[data-v-fa5bf380]{background:var(--bg-code);color:var(--text-primary);max-height:280px;font-family:var(--font-mono,ui-monospace, monospace);white-space:pre-wrap;word-break:break-word;border-radius:4px;margin:0;padding:10px 12px;font-size:12px;line-height:1.6;overflow:auto}.ai-split-pre--think[data-v-fa5bf380]{color:var(--text-secondary);background:#8b5cf60f;border-left:2px solid #8b5cf673;font-style:italic}.ai-split-empty[data-v-fa5bf380]{text-align:center;color:var(--text-tertiary);padding:32px;font-size:13px}.ai-split-list[data-v-fa5bf380]{flex-direction:column;gap:8px;max-height:360px;margin:0;padding:0;list-style:none;display:flex;overflow:auto}.ai-split-list__item[data-v-fa5bf380]{background:var(--bg-surface);border:1px solid var(--border-color);border-radius:4px;gap:10px;padding:10px 12px;display:flex}.ai-split-list__no[data-v-fa5bf380]{background:var(--el-color-primary);color:#fff;border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;font-weight:600;display:flex}.ai-split-list__body[data-v-fa5bf380]{flex:1;min-width:0}.ai-split-list__title[data-v-fa5bf380]{color:var(--text-primary);margin-bottom:4px;font-size:13px;font-weight:600}.ai-split-list__desc[data-v-fa5bf380]{color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5}.ai-split-parse-error[data-v-fa5bf380]{margin-bottom:10px}.ai-split-parse-error__detail[data-v-fa5bf380]{font-family:var(--font-mono,ui-monospace, monospace);word-break:break-word;color:var(--text-primary);margin:4px 0 6px;font-size:12px}.ai-split-parse-error__hint[data-v-fa5bf380]{color:var(--text-secondary);margin-bottom:8px;font-size:12px;line-height:1.55}.ai-split-parse-error__actions[data-v-fa5bf380]{gap:8px;display:flex}.ai-split-footer-hint[data-v-fa5bf380]{color:var(--el-color-warning);background:#e6a23c1a;border-radius:4px;align-items:center;gap:6px;margin-top:8px;padding:8px 10px;font-size:12px;display:flex}.ai-split-raw-toolbar[data-v-fa5bf380]{background:#409eff0f;border-radius:4px;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;padding:6px 10px;font-size:12px;display:flex}.ai-split-raw-tip[data-v-fa5bf380]{color:var(--text-secondary)}.ai-split-raw-editor[data-v-fa5bf380] .el-textarea__inner{font-family:var(--font-mono,ui-monospace, monospace);max-height:360px;font-size:12px;line-height:1.6}.wb-attachments{border:1px solid var(--border-color-medium);border-radius:var(--radius-md);background:var(--bg-container);transition:border-color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom);flex-shrink:0;margin-top:8px;overflow:hidden}.wb-attachments.is-paste-hover{border-color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 6%, var(--bg-container));box-shadow:inset 0 0 0 1px var(--color-primary)}.wb-attachments__paste-hint{background:var(--color-primary);color:#fff;text-align:center;border-top:1px solid var(--border-color);letter-spacing:.2px;padding:6px 10px;font-size:12px;font-weight:500}.wb-attachments__head{color:var(--text-secondary);border-bottom:1px solid var(--border-color);box-sizing:border-box;justify-content:space-between;align-items:center;min-height:38px;padding:9px 12px;font-size:12.5px;display:flex}.wb-attachments__label{color:var(--text-primary);letter-spacing:-.1px;align-items:center;gap:8px;font-weight:600;display:inline-flex}.wb-attachments__count{font-variant-numeric:tabular-nums;color:var(--text-tertiary);background:var(--bg-subtle);border:1px solid var(--border-color);letter-spacing:.2px;border-radius:999px;padding:1px 7px;font-size:11px;font-weight:600;line-height:1.4}.wb-attachments__add{border:1px solid var(--border-color-medium);background:var(--bg-container);height:24px;color:var(--color-primary);letter-spacing:.1px;border-radius:var(--radius-sm,4px);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);align-items:center;gap:4px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.wb-attachments__add:hover:not(:disabled){background:color-mix(in srgb, var(--color-primary) 10%, var(--bg-container));border-color:color-mix(in srgb, var(--color-primary) 50%, transparent);color:var(--color-primary-dark);box-shadow:0 0 0 3px color-mix(in srgb, var(--color-primary) 12%, transparent)}.wb-attachments__add:active:not(:disabled){transform:translateY(.5px)}.wb-attachments__add:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-attachments__add:disabled{opacity:.5;cursor:not-allowed}.wb-attachments__list{flex-wrap:wrap;gap:4px;margin:0;padding:4px;list-style:none;display:flex}.wb-attachment{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-container);cursor:pointer;align-items:center;gap:6px;min-width:0;max-width:240px;padding:4px 6px 4px 4px;transition:border-color .15s,box-shadow .15s;display:flex}.wb-attachment:hover{border-color:var(--color-primary,#3b82f6);box-shadow:0 0 0 2px #3b82f61f}.wb-attachment__preview{min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;gap:6px;padding:0;display:flex}.wb-attachment__preview:focus-visible{outline:2px solid var(--color-primary,#3b82f6);outline-offset:2px;border-radius:3px}.wb-attachment__icon{background:var(--bg-code);width:32px;height:32px;color:var(--text-tertiary);letter-spacing:.5px;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;font-size:10px;font-weight:600;display:flex;overflow:hidden}.wb-attachment__icon--img{background:var(--bg-code)}.wb-attachment__icon img{object-fit:cover;width:100%;height:100%}.wb-attachment__meta{flex:1;min-width:0}.wb-attachment__name{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.wb-attachment__sub{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.wb-attachment__del{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;width:20px;height:20px;font-size:16px;line-height:1}.wb-attachment__del:hover{color:#ef4444;background:#ef444414}.wb-log-details[data-v-ae32f993]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-code);margin-top:6px;overflow:hidden}.wb-log-summary[data-v-ae32f993]{cursor:pointer;color:var(--text-secondary);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:12px;list-style:none;display:flex}.wb-log-summary[data-v-ae32f993]::-webkit-details-marker{display:none}.wb-log-summary[data-v-ae32f993]:hover{background:#3b82f60f}.wb-log-summary__left[data-v-ae32f993]{flex:1;align-items:center;gap:6px;min-width:0;display:inline-flex}.wb-log-summary__right[data-v-ae32f993]{flex-shrink:0;align-items:center;gap:8px;display:inline-flex}.wb-log-summary__meta[data-v-ae32f993]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.wb-log-copy[data-v-ae32f993]{color:var(--text-secondary);background:var(--bg-container);border:1px solid var(--border-color-medium);border-radius:var(--radius-sm,4px);cursor:pointer;-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:3px;padding:2px 7px;font-size:11px;font-weight:500;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.wb-log-copy[data-v-ae32f993]:hover{background:color-mix(in srgb, var(--color-primary) 10%, transparent);border-color:color-mix(in srgb, var(--color-primary) 35%, transparent);color:var(--color-primary)}.wb-log-copy[data-v-ae32f993]:active{background:color-mix(in srgb, var(--color-primary) 18%, transparent)}.wb-log-copy[data-v-ae32f993]:focus-visible{outline:2px solid color-mix(in srgb, var(--color-primary) 50%, transparent);outline-offset:1px}.wb-log-copy--sm[data-v-ae32f993]{padding:1px 6px;font-size:10px}.wb-log-pre__head[data-v-ae32f993]{border-top:1px solid var(--border-color);background:var(--bg-subtle,var(--bg-container));color:var(--text-secondary);align-items:center;gap:8px;padding:5px 10px;font-size:11px;display:flex}.wb-log-pre__label[data-v-ae32f993]{letter-spacing:.3px;text-transform:uppercase;flex:1;font-weight:600}.wb-log-pre__meta[data-v-ae32f993]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.wb-log-pre[data-v-ae32f993]{max-height:600px;font-family:var(--font-mono,ui-monospace, monospace);color:var(--text-primary);background:var(--bg-code);white-space:pre-wrap;word-break:break-word;margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow:auto}.wb-log-section[data-v-ae32f993]{border-top:1px solid var(--border-color)}.wb-log-section__summary[data-v-ae32f993]{cursor:pointer;color:var(--text-secondary);-webkit-user-select:none;user-select:none;background:var(--bg-subtle,var(--bg-container));justify-content:space-between;align-items:center;gap:8px;padding:5px 10px;font-size:11px;list-style:none;display:flex}.wb-log-section__summary[data-v-ae32f993]::-webkit-details-marker{display:none}.wb-log-section__summary[data-v-ae32f993]:hover{background:#3b82f60f}.wb-log-section__tag[data-v-ae32f993]{letter-spacing:.3px;text-transform:uppercase;border-radius:3px;padding:1px 6px;font-size:10px;font-weight:600;display:inline-block}.wb-log-section__tag--user[data-v-ae32f993]{color:#b45309;background:#f59e0b2e}.wb-log-section__tag--think[data-v-ae32f993]{color:#6d28d9;background:#8b5cf62e}.wb-log-section__count[data-v-ae32f993]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.wb-log-section__pre[data-v-ae32f993]{max-height:800px;font-family:var(--font-mono,ui-monospace, monospace);white-space:pre-wrap;word-break:break-word;margin:0;padding:8px 10px;font-size:11px;line-height:1.55;overflow:auto}.wb-log-section__pre--user[data-v-ae32f993]{color:var(--text-primary);background:#f59e0b0f;border-left:2px solid #f59e0b73}.wb-log-section__pre--think[data-v-ae32f993]{color:var(--text-secondary);background:#8b5cf60f;border-left:2px solid #8b5cf673;font-style:italic}.exec-logs[data-v-13ab606e]{flex-direction:column;gap:12px;height:100%;padding:16px 20px;display:flex;overflow:auto}.exec-logs__head[data-v-13ab606e]{align-items:center;gap:12px;display:flex}.exec-logs__title-block[data-v-13ab606e]{flex:1;align-items:baseline;gap:10px;min-width:0;display:flex}.exec-logs__title[data-v-13ab606e]{color:var(--text-primary);margin:0;font-size:18px;font-weight:600}.exec-logs__stats[data-v-13ab606e]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:12px}.exec-logs__head-actions[data-v-13ab606e]{flex-shrink:0;gap:8px;display:inline-flex}.exec-logs__config[data-v-13ab606e]{background:var(--bg-subtle,var(--bg-container));border:1px solid var(--border-color);border-radius:var(--radius-md,6px);flex-wrap:wrap;align-items:center;gap:16px;padding:10px 14px;display:flex}.exec-logs__config-label[data-v-13ab606e]{color:var(--text-secondary);font-size:12px;font-weight:600}.exec-logs__config-field[data-v-13ab606e]{align-items:center;gap:8px;display:inline-flex}.exec-logs__config-name[data-v-13ab606e]{color:var(--text-tertiary);font-size:12px}.exec-logs__filter[data-v-13ab606e]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.exec-logs__filter-spacer[data-v-13ab606e]{flex:1}.exec-logs__batch-meta[data-v-13ab606e]{color:var(--text-secondary);font-variant-numeric:tabular-nums;font-size:12px}.exec-logs__batch[data-v-13ab606e]{background:color-mix(in srgb, var(--color-primary) 6%, transparent);border:1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);border-radius:var(--radius-md,6px);align-items:center;gap:12px;padding:8px 14px;display:flex}.exec-logs__list[data-v-13ab606e]{flex-direction:column;flex:1;gap:10px;min-height:200px;display:flex}.exec-logs__empty[data-v-13ab606e]{border:1px dashed var(--border-color);border-radius:var(--radius-md,6px);color:var(--text-tertiary);text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:60px 20px;display:flex}.exec-logs__empty-art[data-v-13ab606e]{opacity:.5;margin-bottom:8px;font-size:36px}.exec-logs__empty-title[data-v-13ab606e]{color:var(--text-secondary);margin-bottom:4px;font-size:14px;font-weight:600}.exec-logs__empty-hint[data-v-13ab606e]{max-width:400px;font-size:12px}.exec-logs__pager[data-v-13ab606e]{justify-content:center;padding-top:8px;display:flex}.exec-card[data-v-13ab606e]{background:var(--bg-container);border:1px solid var(--border-color);border-radius:var(--radius-md,6px);flex-direction:column;gap:6px;padding:12px 14px;transition:border-color .15s,box-shadow .15s;display:flex}.exec-card[data-v-13ab606e]:hover{border-color:var(--color-primary)}.exec-card.is-selected[data-v-13ab606e]{border-color:var(--color-primary);box-shadow:0 0 0 1px var(--color-primary)}.exec-card__head[data-v-13ab606e]{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.exec-card__status[data-v-13ab606e]{border:1px solid;border-radius:999px;flex-shrink:0;padding:1px 8px;font-size:11px;font-weight:600;display:inline-block}.exec-card__title[data-v-13ab606e]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;min-width:0;max-width:360px;font-size:14px;font-weight:600;overflow:hidden}.exec-card__spacer[data-v-13ab606e]{flex:1}.exec-card__meta[data-v-13ab606e]{color:var(--text-tertiary);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:10px;font-size:11px;display:inline-flex}.exec-card__task[data-v-13ab606e]{white-space:nowrap;text-overflow:ellipsis;max-width:200px;overflow:hidden}.exec-card__time[data-v-13ab606e]{font-variant-numeric:tabular-nums}.exec-card__exit[data-v-13ab606e]{font-family:var(--font-mono,ui-monospace, monospace)}.exec-card__del[data-v-13ab606e]{width:22px;height:22px;color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;transition:background .15s,color .15s;display:inline-flex}.exec-card__del[data-v-13ab606e]:hover{color:#ef4444;background:#ef44441f}.exec-card__error[data-v-13ab606e]{color:#b91c1c;font-size:12px;font-family:var(--font-mono,ui-monospace, monospace);white-space:pre-wrap;word-break:break-word;background:#ef44440f;border-left:2px solid #ef4444;border-radius:3px;margin:0;padding:6px 10px}.workbench[data-v-a21f7fe3]{background:var(--bg-container);height:100%;color:var(--text-primary);flex-direction:column;display:flex}.wb-tabs[data-v-a21f7fe3]{border-bottom:1px solid var(--border-color);background:var(--bg-subtle,var(--bg-container));flex-shrink:0;align-items:stretch;gap:4px;min-height:40px;padding:0 16px;display:flex}.wb-tab[data-v-a21f7fe3]{appearance:none;color:var(--text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;padding:0 16px;font-size:13px;font-weight:500;transition:color .15s;position:relative}.wb-tab[data-v-a21f7fe3]:hover{color:var(--text-primary)}.wb-tab.is-active[data-v-a21f7fe3]{color:var(--color-primary);font-weight:600}.wb-tab.is-active[data-v-a21f7fe3]:after{content:"";background:var(--color-primary);border-radius:2px;height:2px;position:absolute;bottom:-1px;left:12px;right:12px}.workbench__editor-row[data-v-a21f7fe3]{flex:1;min-height:0;display:flex}.wb-sidebar[data-v-a21f7fe3]{border-right:1px solid var(--border-color);background:var(--bg-container);flex-direction:column;flex-shrink:0;gap:18px;width:268px;padding:14px 12px 18px;display:flex;overflow-y:auto}.wb-section[data-v-a21f7fe3]{flex-direction:column;flex-shrink:0;gap:8px;min-height:0;display:flex}.wb-section+.wb-section[data-v-a21f7fe3]{border-top:1px dashed var(--border-color);padding-top:16px}.wb-section__head[data-v-a21f7fe3]{align-items:center;gap:6px;padding:0 4px;display:flex}.wb-section__tag[data-v-a21f7fe3]{letter-spacing:.4px;height:18px;color:var(--text-tertiary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-sm);text-transform:uppercase;font-variant-numeric:tabular-nums;flex-shrink:0;align-items:center;padding:0 6px;font-size:10px;font-weight:600;display:inline-flex}.wb-section__tag--accent[data-v-a21f7fe3]{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 9%, transparent);border-color:color-mix(in srgb, var(--color-primary) 22%, transparent)}.wb-section__title[data-v-a21f7fe3]{color:var(--text-secondary);letter-spacing:.2px;flex:1;min-width:0;margin:0;font-size:12px;font-weight:600}.wb-section__count[data-v-a21f7fe3]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;background:var(--bg-subtle);border-radius:8px;flex-shrink:0;padding:1px 6px;font-size:10px;font-weight:600}.wb-section__action[data-v-a21f7fe3]{color:var(--text-tertiary);border-radius:var(--radius-sm);cursor:pointer;width:22px;height:22px;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;display:inline-flex}.wb-section__action[data-v-a21f7fe3]:hover{background:color-mix(in srgb, var(--color-primary) 12%, transparent);color:var(--color-primary)}.wb-new-btn[data-v-a21f7fe3]{border:1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);border-radius:var(--radius-md);background:color-mix(in srgb, var(--color-primary) 8%, var(--bg-container));width:100%;height:34px;color:var(--color-primary);letter-spacing:.1px;cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);align-items:center;gap:8px;padding:0 12px;font-size:13px;font-weight:600;display:flex}.wb-new-btn__icon[data-v-a21f7fe3]{transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0;font-size:14px}.wb-new-btn__shortcut[data-v-a21f7fe3]{letter-spacing:.5px;color:var(--text-tertiary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-xs);font-size:10px;font-weight:700;font-family:var(--font-mono);opacity:0;transition:opacity var(--transition-fast) var(--ease-custom);margin-left:auto;padding:1px 5px}.wb-new-btn[data-v-a21f7fe3]:hover{background:color-mix(in srgb, var(--color-primary) 14%, var(--bg-container));border-color:color-mix(in srgb, var(--color-primary) 50%, transparent);box-shadow:0 1px 2px #0f172a0a, 0 0 0 3px color-mix(in srgb, var(--color-primary) 10%, transparent)}.wb-new-btn:hover .wb-new-btn__icon[data-v-a21f7fe3]{transform:rotate(90deg)}.wb-new-btn:hover .wb-new-btn__shortcut[data-v-a21f7fe3]{opacity:1}.wb-new-btn[data-v-a21f7fe3]:active{transform:scale(.99)}.wb-new-btn[data-v-a21f7fe3]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.wb-task-list[data-v-a21f7fe3],.wb-prompt-list[data-v-a21f7fe3]{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.wb-task-item[data-v-a21f7fe3]{border:1px solid var(--border-color);border-radius:var(--radius-lg);background:var(--bg-container);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);align-items:center;gap:10px;padding:9px 10px;display:flex;position:relative}.wb-task-item[data-v-a21f7fe3]:hover{background:var(--bg-container-hover);border-color:var(--border-color-medium);box-shadow:0 1px 2px #0f172a0a}.wb-task-item:hover .wb-task-item__del[data-v-a21f7fe3]{opacity:1;transform:translate(0)}.wb-task-item.active[data-v-a21f7fe3]{background:color-mix(in srgb, var(--color-primary) 9%, var(--bg-container));border-color:color-mix(in srgb, var(--color-primary) 45%, transparent);box-shadow:0 1px 2px #0f172a0a}.wb-task-item.active .wb-task-item__title[data-v-a21f7fe3]{color:var(--color-primary)}.wb-task-item.active .wb-task-item__del[data-v-a21f7fe3]{opacity:1;color:var(--color-primary)}.wb-task-item__avatar[data-v-a21f7fe3]{border-radius:var(--radius-md);background:var(--bg-subtle);width:30px;height:30px;color:var(--text-tertiary);border:1px solid var(--border-color);transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom);flex-shrink:0;justify-content:center;align-items:center;font-size:15px;display:inline-flex}.wb-task-item__avatar[data-icon=image][data-v-a21f7fe3]{color:#6d28d9;background:#8b5cf61f;border-color:#8b5cf647}.wb-task-item__avatar[data-icon=icon][data-v-a21f7fe3]{color:#0369a1;background:#0ea5e91f;border-color:#0ea5e947}.wb-task-item__avatar[data-icon=test][data-v-a21f7fe3]{color:#047857;background:#10b9811f;border-color:#10b98147}.wb-task-item__avatar[data-icon=ui][data-v-a21f7fe3]{color:#b45309;background:#f59e0b1f;border-color:#f59e0b47}.wb-task-item.active .wb-task-item__avatar[data-v-a21f7fe3]{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.wb-task-item__body[data-v-a21f7fe3]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.wb-task-item__title[data-v-a21f7fe3]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;letter-spacing:-.1px;font-size:13px;font-weight:500;line-height:1.3;overflow:hidden}.wb-task-item__meta[data-v-a21f7fe3]{color:var(--text-tertiary);align-items:center;gap:8px;font-size:11px;line-height:1;display:flex}.wb-task-item__meta-item[data-v-a21f7fe3]{font-variant-numeric:tabular-nums;align-items:center;gap:3px;font-weight:500;display:inline-flex}.wb-task-item__meta-item--accent[data-v-a21f7fe3]{color:var(--color-primary)}.wb-task-item__meta-item--project[data-v-a21f7fe3]{background:color-mix(in srgb, var(--color-warning,#f59e0b) 14%, transparent);height:15px;color:color-mix(in srgb, var(--color-warning,#f59e0b) 80%, var(--text-primary));letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:7px;align-items:center;max-width:110px;padding:0 5px;font-size:10px;font-weight:600;display:inline-flex;overflow:hidden}.wb-task-item.is-other-project[data-v-a21f7fe3]{opacity:.78}.wb-task-item.is-other-project[data-v-a21f7fe3]:hover{opacity:1}.wb-task-item__meta-icon[data-v-a21f7fe3]{opacity:.85;font-size:11px}.wb-task-item__num[data-v-a21f7fe3]{color:var(--text-secondary);font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;text-align:center;background:var(--bg-subtle);min-width:14px;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);border-radius:4px;padding:0 4px;font-weight:600;line-height:1.4}.wb-task-item.active .wb-task-item__num[data-v-a21f7fe3]{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 14%, transparent)}.wb-task-item__del[data-v-a21f7fe3]{color:var(--text-tertiary);border-radius:var(--radius-sm);cursor:pointer;opacity:0;width:22px;height:22px;transition:opacity var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;display:inline-flex;transform:translate(-2px)}.wb-task-item__del[data-v-a21f7fe3]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger)}.wb-task-item__del[data-v-a21f7fe3]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px;opacity:1}.wb-task-item__del[data-v-a21f7fe3],.wb-prompt-item__del[data-v-a21f7fe3],.wb-sub-item__del[data-v-a21f7fe3]{font-size:13px}.wb-prompt-item[data-v-a21f7fe3]{border-radius:var(--radius-md);color:var(--text-primary);transition:background var(--transition-fast) var(--ease-custom);align-items:center;gap:8px;padding:7px 8px;font-size:12.5px;display:flex;position:relative}.wb-prompt-item[data-v-a21f7fe3]:hover{background:var(--bg-container-hover)}.wb-prompt-item:hover .wb-prompt-item__del[data-v-a21f7fe3]{opacity:1}.wb-prompt-item__icon[data-v-a21f7fe3]{border-radius:var(--radius-sm);background:color-mix(in srgb, var(--color-primary) 8%, transparent);width:22px;height:22px;color:var(--color-primary);flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-prompt-item__name[data-v-a21f7fe3]{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--text-primary);letter-spacing:-.05px;flex:1;font-weight:500;overflow:hidden}.wb-prompt-item__project[data-v-a21f7fe3]{background:color-mix(in srgb, var(--color-primary) 12%, transparent);height:16px;color:var(--color-primary);letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:8px;flex-shrink:0;align-items:center;max-width:110px;padding:0 6px;font-size:10px;font-weight:600;display:inline-flex;overflow:hidden}.wb-prompt-item__del[data-v-a21f7fe3]{color:var(--text-tertiary);border-radius:var(--radius-xs);cursor:pointer;opacity:0;width:20px;height:20px;transition:opacity var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-prompt-item__del[data-v-a21f7fe3]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger)}.wb-prompt-item__del[data-v-a21f7fe3]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px;opacity:1}.wb-empty[data-v-a21f7fe3]{text-align:center;color:var(--text-tertiary);border:1px dashed var(--border-color);border-radius:var(--radius-md);background:var(--bg-subtle);flex-direction:column;align-items:center;gap:4px;padding:22px 12px 18px;display:flex}.wb-empty--compact[data-v-a21f7fe3]{flex-direction:row;justify-content:center;gap:0;padding:10px 12px}.wb-empty__icon[data-v-a21f7fe3]{color:var(--text-tertiary);opacity:.65;margin-bottom:2px;font-size:22px}.wb-empty__text[data-v-a21f7fe3]{color:var(--text-secondary);font-size:12.5px;font-weight:500}.wb-empty__hint[data-v-a21f7fe3]{color:var(--text-tertiary);font-size:11px}.wb-empty--rich[data-v-a21f7fe3]{border-style:solid;border-color:var(--border-color);background:var(--bg-container);gap:10px;margin:4px 2px 2px;padding:32px 28px 28px}.wb-empty__art[data-v-a21f7fe3]{background:color-mix(in srgb, var(--color-primary) 12%, transparent);width:44px;height:44px;color:var(--color-primary);border-radius:12px;justify-content:center;align-items:center;margin-bottom:2px;font-size:22px;display:flex}.wb-empty__title[data-v-a21f7fe3]{letter-spacing:var(--letter-spacing-heading,-.25px);color:var(--text-secondary);font-size:14px;font-weight:600;line-height:1.4}.wb-empty--rich .wb-empty__hint[data-v-a21f7fe3]{color:var(--text-tertiary);max-width:280px;font-size:12px;line-height:1.55}.wb-empty__cta[data-v-a21f7fe3]{flex-wrap:wrap;justify-content:center;align-items:center;gap:14px;margin-top:6px;display:flex}.wb-empty__link[data-v-a21f7fe3]{appearance:none;min-height:32px;color:var(--color-primary);cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;padding:6px 10px;font-size:12px;font-weight:500;transition:color .15s ease-out,background-color .15s ease-out;display:inline-flex}.wb-empty__link[data-v-a21f7fe3]:hover:not(:disabled){color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 8%, transparent)}.wb-empty__link[data-v-a21f7fe3]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.wb-empty__link[data-v-a21f7fe3]:disabled{color:var(--text-tertiary);cursor:not-allowed;opacity:.6}@media (prefers-reduced-motion:reduce){.wb-empty__link[data-v-a21f7fe3]{transition:none}}.wb-split[data-v-a21f7fe3]{flex-direction:column;flex:1;gap:14px;min-height:0;padding:18px 22px 20px;display:flex;overflow:hidden}.wb-placeholder[data-v-a21f7fe3]{color:var(--text-tertiary);flex:1;justify-content:center;align-items:center;font-size:13px;display:flex}.wb-split__header[data-v-a21f7fe3]{flex-shrink:0;align-items:center;gap:10px;display:flex}.wb-input[data-v-a21f7fe3],.wb-select[data-v-a21f7fe3],.wb-textarea[data-v-a21f7fe3]{color:var(--text-primary);background:var(--bg-container);border:1px solid var(--border-color-medium);border-radius:var(--radius-md);transition:border-color var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);appearance:none;outline:none;font-family:inherit;box-shadow:inset 0 1px #0f172a04}.wb-input[data-v-a21f7fe3]::placeholder,.wb-textarea[data-v-a21f7fe3]::placeholder{color:var(--text-placeholder);font-weight:400}.wb-input[data-v-a21f7fe3]{letter-spacing:-.05px;height:36px;padding:0 12px;font-size:13.5px;line-height:1.2}.wb-input[data-v-a21f7fe3]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background:var(--bg-container-hover)}.wb-input[data-v-a21f7fe3]:focus{border-color:var(--color-primary);background:var(--bg-container);box-shadow:0 0 0 3px color-mix(in srgb, var(--color-primary) 18%, transparent), inset 0 1px 0 #0f172a04}.wb-input--title[data-v-a21f7fe3]{letter-spacing:-.4px;border-color:var(--border-color-medium);background:var(--bg-container);flex:1;height:42px;padding:0 14px;font-size:17px;font-weight:600}.wb-input--title[data-v-a21f7fe3]:hover:not(:focus){border-color:color-mix(in srgb, var(--color-primary) 30%, var(--border-color-medium))}.wb-input--title[data-v-a21f7fe3]:focus{border-color:var(--color-primary);box-shadow:0 0 0 4px color-mix(in srgb, var(--color-primary) 14%, transparent), inset 0 1px 0 #0f172a04}.wb-input--title[data-v-a21f7fe3]::placeholder{color:var(--text-placeholder);font-weight:500}.wb-select[data-v-a21f7fe3]{cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M3 4.5l3 3 3-3' fill='none' stroke='%236b7280' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/></svg>");background-position:right 10px center;background-repeat:no-repeat;background-size:12px 12px;flex-shrink:0;min-width:168px;height:36px;padding:0 32px 0 12px;font-size:13px;font-weight:500}.wb-select[data-v-a21f7fe3]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background-color:var(--bg-container-hover)}.wb-select[data-v-a21f7fe3]:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--color-primary) 18%, transparent)}.wb-textarea[data-v-a21f7fe3]{letter-spacing:-.05px;resize:vertical;box-sizing:border-box;flex-shrink:0;width:100%;min-height:72px;padding:12px 14px;font-size:13.5px;line-height:1.65;display:block}.wb-textarea[data-v-a21f7fe3]::placeholder{line-height:1.65}.wb-textarea[data-v-a21f7fe3]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background:var(--bg-container-hover)}.wb-textarea[data-v-a21f7fe3]:focus{border-color:var(--color-primary);background:var(--bg-container);box-shadow:0 0 0 3px color-mix(in srgb, var(--color-primary) 18%, transparent), inset 0 1px 0 #0f172a04}.wb-textarea--sm[data-v-a21f7fe3]{min-height:44px;padding:8px 12px;font-size:13px}.wb-split__sub-header[data-v-a21f7fe3]{flex-shrink:0;justify-content:space-between;align-items:center;margin-top:8px;display:flex}.wb-split__sub-header h4[data-v-a21f7fe3]{color:var(--text-secondary);margin:0;font-size:13px;font-weight:600}.wb-split__sub-actions[data-v-a21f7fe3]{align-items:center;gap:8px;display:inline-flex}.wb-sub-list[data-v-a21f7fe3]{flex-direction:column;flex:1;gap:8px;min-height:0;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.wb-sub-item[data-v-a21f7fe3]{background:var(--bg-surface);border:1px solid var(--border-color);border-radius:var(--radius-md);max-height:min(70vh,720px);padding:10px;transition:border-color .15s,box-shadow .15s;position:relative;overflow:auto}.wb-sub-item.is-dirty[data-v-a21f7fe3]{background:#f59e0b0a;border-color:#f59e0b8c}.wb-sub-item.is-running[data-v-a21f7fe3]{border-color:color-mix(in srgb, var(--color-primary) 55%, transparent);background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 6%, var(--bg-surface)) 0%, var(--bg-surface) 60%);box-shadow:0 0 0 1px color-mix(in srgb, var(--color-primary) 30%, transparent), 0 4px 18px -4px color-mix(in srgb, var(--color-primary) 25%, transparent);animation:2.4s ease-in-out infinite wb-card-glow-a21f7fe3}.wb-sub-item.is-running[data-v-a21f7fe3]:before{content:"";background:linear-gradient(90deg, transparent 0%, var(--color-primary) 50%, transparent 100%);pointer-events:none;z-index:1;background-repeat:no-repeat;background-size:50% 100%;height:2px;animation:1.6s ease-in-out infinite wb-progress-slide-a21f7fe3;position:absolute;top:0;left:0;right:0}.wb-sub-item.is-running[data-v-a21f7fe3]:after{content:"";border-radius:inherit;background:linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--color-primary) 10%, transparent) 50%, transparent 100%);pointer-events:none;opacity:.5;background-size:200% 100%;animation:3.2s linear infinite wb-card-sweep-a21f7fe3;position:absolute;inset:0}@keyframes wb-progress-slide-a21f7fe3{0%{background-position:-50% 0}to{background-position:150% 0}}@keyframes wb-card-glow-a21f7fe3{0%,to{box-shadow:0 0 0 1px color-mix(in srgb, var(--color-primary) 30%, transparent), 0 4px 18px -4px color-mix(in srgb, var(--color-primary) 25%, transparent)}50%{box-shadow:0 0 0 1px color-mix(in srgb, var(--color-primary) 50%, transparent), 0 6px 24px -2px color-mix(in srgb, var(--color-primary) 38%, transparent)}}@keyframes wb-card-sweep-a21f7fe3{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){.wb-sub-item.is-running[data-v-a21f7fe3],.wb-sub-item.is-running[data-v-a21f7fe3]:before,.wb-sub-item.is-running[data-v-a21f7fe3]:after{animation:none}}.wb-sub-item__dirty[data-v-a21f7fe3]{color:#b45309;letter-spacing:.2px;background:#f59e0b26;border-radius:8px;flex-shrink:0;align-items:center;gap:3px;padding:2px 7px;font-size:10px;font-weight:600;display:inline-flex}.wb-sub-item__dirty[data-v-a21f7fe3]:before{content:"";background:#f59e0b;border-radius:50%;width:5px;height:5px;display:inline-block}.wb-dirty-badge[data-v-a21f7fe3]{color:#fff;vertical-align:middle;background:#ef4444;border-radius:8px;justify-content:center;align-items:center;min-width:16px;height:16px;margin-left:6px;padding:0 5px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.wb-sub-item__row[data-v-a21f7fe3]{align-items:center;gap:8px;margin-bottom:6px;display:flex}.wb-sub-item__row--compact[data-v-a21f7fe3]{cursor:default;gap:6px;margin-bottom:0}.wb-sub-item__title-compact[data-v-a21f7fe3]{min-width:0;color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;letter-spacing:-.05px;text-decoration:line-through;-webkit-text-decoration-color:var(--border-color);text-decoration-color:var(--border-color);flex:1;font-size:13px;font-weight:500;line-height:1.3;text-decoration-thickness:1px;overflow:hidden}.wb-sub-item__toggle[data-v-a21f7fe3]{border:1px solid var(--border-color-medium);background:var(--bg-container);color:var(--text-tertiary);border-radius:var(--radius-sm,4px);cursor:pointer;width:24px;height:24px;transition:background var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-sub-item__toggle[data-v-a21f7fe3]:hover{background:var(--bg-container-hover);border-color:var(--color-primary);color:var(--color-primary)}.wb-sub-item__toggle[data-v-a21f7fe3]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-sub-item__undo[data-v-a21f7fe3]{border:1px solid color-mix(in srgb, var(--color-primary) 35%, transparent);background:color-mix(in srgb, var(--color-primary) 6%, var(--bg-container));color:var(--color-primary);letter-spacing:.1px;border-radius:var(--radius-sm,4px);cursor:pointer;height:24px;transition:background var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);flex-shrink:0;padding:0 8px;font-size:11px;font-weight:600}.wb-sub-item__undo[data-v-a21f7fe3]:hover{background:color-mix(in srgb, var(--color-primary) 14%, var(--bg-container));border-color:var(--color-primary);color:var(--color-primary-dark,var(--color-primary))}.wb-sub-item__undo[data-v-a21f7fe3]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-sub-item.is-done[data-v-a21f7fe3]:not(.is-running){background:color-mix(in srgb, #22c55e 4%, var(--bg-container));border-color:#22c55e4d}.wb-sub-item.is-done.is-collapsed[data-v-a21f7fe3]{padding:8px 10px}.wb-sub-item.is-clickable[data-v-a21f7fe3]{cursor:pointer}.wb-sub-item.is-clickable[data-v-a21f7fe3]:hover{background:color-mix(in srgb, var(--color-primary) 6%, var(--bg-surface));border-color:color-mix(in srgb, var(--color-primary) 35%, var(--border-color))}.wb-sub-item.is-clickable:hover .wb-sub-item__title-compact[data-v-a21f7fe3]{color:var(--color-primary)}.wb-sub-item__status[data-v-a21f7fe3]{color:#fff;letter-spacing:.2px;border-radius:10px;flex-shrink:0;align-items:center;gap:5px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex;position:relative;overflow:hidden}.wb-sub-item.is-running .wb-sub-item__status[data-v-a21f7fe3]{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-primary) 45%, transparent), 0 0 12px color-mix(in srgb, var(--color-primary) 35%, transparent);animation:2.4s ease-in-out infinite wb-status-pulse-a21f7fe3,2.4s linear infinite wb-status-shimmer-a21f7fe3;background:linear-gradient(90deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 70%, #fff) 50%, var(--color-primary) 100%)!important;background-size:200% 100%!important}.wb-sub-item.is-running .wb-sub-item__status[data-v-a21f7fe3]:before{content:"";background:#fff;border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite wb-status-dot-a21f7fe3;box-shadow:0 0 6px #ffffffe6}.wb-sub-item.is-running .wb-sub-item__status[data-v-a21f7fe3]:after{content:"";border-radius:inherit;pointer-events:none;background:linear-gradient(90deg,#0000 0%,#fff6 50%,#0000 100%);animation:2.4s ease-in-out infinite wb-status-sweep-a21f7fe3;position:absolute;inset:0}@keyframes wb-status-shimmer-a21f7fe3{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes wb-status-pulse-a21f7fe3{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-primary) 45%, transparent), 0 0 12px color-mix(in srgb, var(--color-primary) 35%, transparent)}50%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-primary) 0%, transparent), 0 0 18px color-mix(in srgb, var(--color-primary) 55%, transparent)}}@keyframes wb-status-dot-a21f7fe3{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.7)}}@keyframes wb-status-sweep-a21f7fe3{0%{transform:translate(-100%)}to{transform:translate(100%)}}@media (prefers-reduced-motion:reduce){.wb-sub-item.is-running .wb-sub-item__status[data-v-a21f7fe3],.wb-sub-item.is-running .wb-sub-item__status[data-v-a21f7fe3]:before,.wb-sub-item.is-running .wb-sub-item__status[data-v-a21f7fe3]:after{animation:none}}.wb-sub-item__pid[data-v-a21f7fe3]{color:var(--text-tertiary);flex-shrink:0;font-family:ui-monospace,monospace;font-size:11px}.wb-sub-item__stop[data-v-a21f7fe3]{color:#ef4444;cursor:pointer;background:#ef444414;border:1px solid #ef444480;border-radius:3px;flex-shrink:0;padding:2px 8px;font-size:11px;font-weight:600;transition:background .15s,color .15s}.wb-sub-item__stop[data-v-a21f7fe3]:hover{color:#fff;background:#ef4444;border-color:#ef4444}.wb-sub-item__row .wb-input[data-v-a21f7fe3]{flex:1}.wb-attachments[data-v-a21f7fe3]{border:1px solid var(--border-color-medium);border-radius:var(--radius-md);background:var(--bg-container);transition:border-color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom);flex-shrink:0;margin-top:8px;overflow:hidden}.wb-attachments.is-paste-hover[data-v-a21f7fe3]{border-color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 6%, var(--bg-container));box-shadow:inset 0 0 0 1px var(--color-primary)}.wb-attachments__paste-hint[data-v-a21f7fe3]{background:var(--color-primary);color:#fff;text-align:center;border-top:1px solid var(--border-color);letter-spacing:.2px;padding:6px 10px;font-size:12px;font-weight:500}.wb-attachments__head[data-v-a21f7fe3]{color:var(--text-secondary);border-bottom:1px solid var(--border-color);box-sizing:border-box;justify-content:space-between;align-items:center;min-height:38px;padding:9px 12px;font-size:12.5px;display:flex}.wb-attachments__label[data-v-a21f7fe3]{color:var(--text-primary);letter-spacing:-.1px;align-items:center;gap:8px;font-weight:600;display:inline-flex}.wb-attachments__count[data-v-a21f7fe3]{font-variant-numeric:tabular-nums;color:var(--text-tertiary);background:var(--bg-subtle);border:1px solid var(--border-color);letter-spacing:.2px;border-radius:999px;padding:1px 7px;font-size:11px;font-weight:600;line-height:1.4}.wb-attachments__add[data-v-a21f7fe3]{border:1px solid var(--border-color-medium);background:var(--bg-container);height:24px;color:var(--color-primary);letter-spacing:.1px;border-radius:var(--radius-sm,4px);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);align-items:center;gap:4px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.wb-attachments__add[data-v-a21f7fe3]:hover:not(:disabled){background:color-mix(in srgb, var(--color-primary) 10%, var(--bg-container));border-color:color-mix(in srgb, var(--color-primary) 50%, transparent);color:var(--color-primary-dark);box-shadow:0 0 0 3px color-mix(in srgb, var(--color-primary) 12%, transparent)}.wb-attachments__add[data-v-a21f7fe3]:active:not(:disabled){transform:translateY(.5px)}.wb-attachments__add[data-v-a21f7fe3]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-attachments__add[data-v-a21f7fe3]:disabled{opacity:.5;cursor:not-allowed}.wb-attachments__list[data-v-a21f7fe3]{flex-wrap:wrap;gap:4px;margin:0;padding:4px;list-style:none;display:flex}.wb-attachment[data-v-a21f7fe3]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-container);align-items:center;gap:6px;min-width:0;max-width:240px;padding:4px 6px 4px 4px;display:flex}.wb-attachment__icon[data-v-a21f7fe3]{background:var(--bg-code);width:32px;height:32px;color:var(--text-tertiary);letter-spacing:.5px;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;font-size:10px;font-weight:600;display:flex;overflow:hidden}.wb-attachment__icon--img[data-v-a21f7fe3]{background:var(--bg-code)}.wb-attachment__icon img[data-v-a21f7fe3]{object-fit:cover;width:100%;height:100%}.wb-attachment__meta[data-v-a21f7fe3]{flex:1;min-width:0}.wb-attachment__name[data-v-a21f7fe3]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.wb-attachment__sub[data-v-a21f7fe3]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.wb-attachment__del[data-v-a21f7fe3]{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;width:20px;height:20px;font-size:16px;line-height:1}.wb-attachment__del[data-v-a21f7fe3]:hover{color:#ef4444;background:#ef444414}.wb-current-project[data-v-a21f7fe3]{border-radius:var(--radius-md);background:color-mix(in srgb, var(--color-primary) 10%, transparent);border:1px solid color-mix(in srgb, var(--color-primary) 22%, transparent);color:var(--text-secondary);align-items:center;gap:6px;margin-bottom:8px;padding:6px 10px;font-size:12px;display:flex}.wb-current-project__icon[data-v-a21f7fe3]{color:var(--color-primary);flex-shrink:0;font-size:13px}.wb-current-project__label[data-v-a21f7fe3]{letter-spacing:.5px;color:var(--text-tertiary);text-transform:uppercase;font-size:10px;font-weight:600}.wb-current-project__name[data-v-a21f7fe3]{min-width:0;color:var(--color-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:600;overflow:hidden}.wb-task-group__head[data-v-a21f7fe3]{color:var(--text-tertiary);letter-spacing:.3px;text-transform:uppercase;border-top:1px dashed var(--border-color);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:var(--radius-sm);transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);align-items:center;gap:6px;margin-top:4px;padding:8px 6px 4px;font-size:11px;font-weight:600;display:flex}.wb-task-group__head[data-v-a21f7fe3]:first-child{border-top:none;margin-top:0;padding-top:4px}.wb-task-group__head[data-v-a21f7fe3]:hover{background:color-mix(in srgb, var(--color-primary) 8%, transparent);color:var(--text-secondary)}.wb-task-group__head[data-v-a21f7fe3]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-task-group__head.is-current[data-v-a21f7fe3]{color:var(--color-primary);border-top-color:color-mix(in srgb, var(--color-primary) 30%, transparent)}.wb-task-group__head.is-collapsed[data-v-a21f7fe3]{background:var(--bg-subtle);border-top-style:solid;margin-top:6px;padding-top:6px;padding-bottom:6px}.wb-task-group__head.is-collapsed.is-current[data-v-a21f7fe3]{background:color-mix(in srgb, var(--color-primary) 8%, var(--bg-subtle))}.wb-task-group__caret[data-v-a21f7fe3]{opacity:.75;transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0;font-size:11px}.wb-task-group__icon[data-v-a21f7fe3]{opacity:.8;flex-shrink:0;font-size:12px}.wb-task-group__name[data-v-a21f7fe3]{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.wb-task-group__count[data-v-a21f7fe3]{background:var(--bg-subtle);min-width:18px;height:16px;color:var(--text-tertiary);font-variant-numeric:tabular-nums;border-radius:8px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:600;display:inline-flex}.wb-task-group__head.is-current .wb-task-group__count[data-v-a21f7fe3]{background:color-mix(in srgb, var(--color-primary) 16%, transparent);color:var(--color-primary)}
@@ -0,0 +1,6 @@
1
+ import"./rolldown-runtime-CMxvf4Kt.js";import{$t as e,An as t,B as n,Bn as r,Ct as i,F as a,Gn as o,In as s,It as c,J as l,Ln as u,Mn as d,N as f,Nn as p,Ot as m,P as h,Pn as g,Qn as _,Rn as v,Rt as y,St as b,V as x,Vn as S,Vt as C,Wn as w,Wt as T,Xn as E,Xt as D,Y as O,Zn as k,Zt as ee,ar as A,bt as j,cr as M,dr as N,er as P,ft as te,gr as F,gt as ne,hr as re,in as I,jt as ie,kn as ae,lr as L,lt as oe,mr as R,nr as z,on as se,or as ce,pr as B,q as V,qn as H,rn as le,sr as U,st as W,tt as ue,ur as G,ut as de,vt as fe,wt as pe,xt as me,yt as he,zn as K}from"./vendor-C30huq-U.js";import{n as q,t as J}from"./_plugin-vue_export-helper-Dw3U5p9d.js";import{t as ge}from"./index-DyR_trSU.js";var _e={key:0,class:`ai-split-status`},ve={key:1,class:`ai-split-status is-error`},Y={class:`ai-split-prompt-actions`},ye={key:0,class:`ai-split-prompt-editor`},be={class:`ai-split-prompt-editor__actions`},xe={key:1,class:`ai-split-pre`},Se={class:`ai-split-subhead`},Ce={class:`ai-split-pre`},we={key:0,class:`ai-split-tab-count`},Te={class:`ai-split-pre ai-split-pre--think`},Ee={key:0,class:`ai-split-tab-count`},De={class:`ai-split-parse-error__detail`},X={class:`ai-split-parse-error__hint`},Oe={class:`ai-split-parse-error__actions`},Z={key:1,class:`ai-split-raw-toolbar`},ke={class:`ai-split-raw-tip`},Ae={key:0,class:`ai-split-tab-count`},je={key:0,class:`ai-split-empty`},Me={key:1,class:`ai-split-list`},Ne={class:`ai-split-list__no`},Pe={class:`ai-split-list__body`},Fe={class:`ai-split-list__title`},Ie={class:`ai-split-list__desc`},Le={key:2,class:`ai-split-footer-hint`},Re=J(H({__name:`AISplitDialog`,props:{modelValue:{type:Boolean},title:{},desc:{},taskId:{},promptId:{}},emits:[`update:modelValue`,`confirm`],setup(e,{emit:t}){let i=e,a=t,s=N(`idle`),c=N(`prompt`),l=N(``),d=N(``),f=N(``),p=N(``),_=N(``),y=N([]),b=N(``),C=N(``),T=N(``),E=null,D=0,O=u(()=>f.value.length),k=u(()=>p.value.length),A=u(()=>s.value===`result`&&y.value.length>0),M=u(()=>s.value===`running`);function re(){I(),a(`update:modelValue`,!1)}function I(){E&&=(E.abort(),null)}function ie(){I(),s.value=`idle`,c.value=`prompt`,l.value=``,d.value=``,f.value=``,p.value=``,_.value=``,y.value=[],b.value=``,C.value=``,T.value=``}async function ae(){if(!i.title.trim()){h.warning(q(`@WORKBENCH:请先填写任务标题`));return}ie();let e=++D;s.value=`running`,c.value=`thinking`,E=new AbortController;let t=E;try{let n=await fetch(`/api/workbench/tasks/ai-split-subtasks`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({title:i.title,desc:i.desc,taskId:i.taskId||``,promptId:i.promptId||``}),signal:t.signal});if(e!==D)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let r=n.body.getReader(),a=new TextDecoder(`utf-8`),o=``,u=null;for(;;){let{value:t,done:n}=await r.read();if(e!==D)return;if(n)break;o+=a.decode(t,{stream:!0});let i=o.split(`
2
+ `);o=i.pop()??``;for(let e of i){let t=e.trim();if(!t.startsWith(`data:`))continue;let n=t.slice(5).trim();if(!n)continue;let r;try{r=JSON.parse(n)}catch{continue}switch(r.type){case`meta`:l.value=r.prompt?.system||``,d.value=r.prompt?.user||``;break;case`thinking`:f.value+=String(r.delta||``);break;case`content`:p.value+=String(r.delta||``);break;case`done`:u=r;break;case`error`:throw Error(r.error||`AI 拆分失败`)}}}if(e!==D)return;if(!u)throw Error(q(`@WORKBENCH:AI 未返回结果`));y.value=Array.isArray(u.subtasks)?u.subtasks:[],_.value=u.raw||p.value,C.value=String(u.parseError||``),T.value=String(u.parseStage||``),f.value||=q(`@WORKBENCH:(当前模型未返回独立的思考内容,可切换到「原始结果」查看完整输出)`),s.value=`result`,c.value=y.value.length>0?`confirm`:(C.value,`raw`)}catch(n){if(console.log(`[AI Split] catch err:`,{name:n?.name,msg:n?.message,aborted:t.signal.aborted,nonce:{mine:e,cur:D}}),e!==D||n?.name===`AbortError`||t.signal.aborted)return;s.value=`error`,b.value=n?.message||String(n)}finally{e===D&&(E=null)}}function L(){A.value&&(a(`confirm`,y.value.slice()),a(`update:modelValue`,!1))}function oe(){ae()}let R=N(!1);async function se(){if(!p.value.trim()){h.warning(q(`@WORKBENCH:原始结果为空,无法解析`));return}R.value=!0;try{let e=await fetch(`/api/workbench/tasks/parse-subtasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({raw:p.value})}).then(e=>e.json());if(!e.success){h.error(e.error||q(`@WORKBENCH:解析失败`));return}y.value=Array.isArray(e.subtasks)?e.subtasks:[],C.value=String(e.parseError||``),T.value=String(e.parseStage||``),_.value=p.value,y.value.length>0?(h.success(q(`@WORKBENCH:解析成功,已识别 {n} 个子任务`,{n:y.value.length})),c.value=`confirm`):h.warning(q(`@WORKBENCH:仍未解析到子任务,请继续修改原始结果`))}catch(e){h.error(q(`@WORKBENCH:解析失败: `)+(e?.message||e))}finally{R.value=!1}}ce(()=>i.modelValue,e=>{e&&s.value===`idle`&&ae()});let V=N(!1),H=N(``),le=N(!1);function W(){H.value=l.value,V.value=!0}async function G(){if(!H.value.trim()){h.warning(q(`@WORKBENCH:指令内容不能为空`));return}le.value=!0;try{let e=await fetch(`/api/workbench/tasks/ai-subtask-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:H.value})}).then(e=>e.json());e.success?(h.success(q(`@WORKBENCH:已保存指令`)),V.value=!1,oe()):h.error(e.error||q(`@WORKBENCH:保存失败`))}catch(e){h.error(q(`@WORKBENCH:保存失败: `)+(e?.message||e))}finally{le.value=!1}}function de(){V.value=!1}return(t,i)=>{let u=me,h=te,_=ne,T=n,E=j,D=x,N=ue;return P(),K(N,{"model-value":e.modelValue,"onUpdate:modelValue":i[4]||=e=>a(`update:modelValue`,e),title:B(q)(`@WORKBENCH:AI 拆分任务`),width:`800px`,"close-on-click-modal":!1,"close-on-press-escape":!M.value,"show-close":!M.value,onClose:re},{footer:U(()=>[s.value===`error`||s.value===`result`&&C.value&&y.value.length===0?(P(),K(h,{key:0,onClick:oe},{default:U(()=>[w(F(B(q)(`@WORKBENCH:重新生成`)),1)]),_:1})):r(``,!0),o(h,{onClick:re},{default:U(()=>[w(F(B(q)(`@WORKBENCH:取消`)),1)]),_:1}),o(h,{type:`primary`,disabled:!A.value,onClick:L},{default:U(()=>[w(F(B(q)(`@WORKBENCH:确认入库`))+` (`+F(y.value.length)+`) `,1)]),_:1},8,[`disabled`])]),default:U(()=>[M.value?(P(),S(`div`,_e,[o(u,{class:`is-loading`},{default:U(()=>[o(B(ee))]),_:1}),v(`span`,null,F(B(q)(`@WORKBENCH:AI 正在拆分…`)),1)])):s.value===`error`?(P(),S(`div`,ve,[o(u,{color:`#f56c6c`},{default:U(()=>[o(B(m))]),_:1}),v(`span`,null,F(b.value),1)])):r(``,!0),o(D,{modelValue:c.value,"onUpdate:modelValue":i[3]||=e=>c.value=e,class:`ai-split-tabs`},{default:U(()=>[o(T,{label:B(q)(`@WORKBENCH:提示词`),name:`prompt`},{default:U(()=>[v(`div`,Y,[o(h,{size:`small`,disabled:M.value,onClick:W},{default:U(()=>[w(F(B(q)(`@WORKBENCH:编辑指令`)),1)]),_:1},8,[`disabled`])]),V.value?(P(),S(`div`,ye,[o(_,{modelValue:H.value,"onUpdate:modelValue":i[0]||=e=>H.value=e,type:`textarea`,rows:12,placeholder:B(q)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`]),v(`div`,be,[o(h,{size:`small`,onClick:de},{default:U(()=>[w(F(B(q)(`@WORKBENCH:取消`)),1)]),_:1}),o(h,{size:`small`,type:`primary`,loading:le.value,onClick:G},{default:U(()=>[w(F(B(q)(`@WORKBENCH:保存并重跑`)),1)]),_:1},8,[`loading`])])])):(P(),S(`pre`,xe,F(l.value||`(等待 LLM 启动…)`),1)),v(`h4`,Se,F(B(q)(`@WORKBENCH:用户提示词(拼装后)`)),1),v(`pre`,Ce,F(d.value||`(等待 LLM 启动…)`),1)]),_:1},8,[`label`]),o(T,{name:`thinking`},{label:U(()=>[v(`span`,null,[w(F(B(q)(`@WORKBENCH:思考`))+` `,1),O.value>0?(P(),S(`span`,we,`(`+F(O.value)+`)`,1)):r(``,!0)])]),default:U(()=>[v(`pre`,Te,F(f.value||B(q)(`@WORKBENCH:(暂无输出)`)),1)]),_:1}),o(T,{name:`raw`},{label:U(()=>[v(`span`,null,[w(F(B(q)(`@WORKBENCH:原始结果`))+` `,1),k.value>0?(P(),S(`span`,Ee,`(`+F(k.value)+`)`,1)):r(``,!0)])]),default:U(()=>[C.value&&s.value===`result`?(P(),K(E,{key:0,type:`warning`,"show-icon":``,closable:!1,class:`ai-split-parse-error`},{title:U(()=>[w(F(B(q)(`@WORKBENCH:模型返回内容解析失败,无法识别为有效的子任务 JSON`)),1)]),default:U(()=>[v(`div`,De,F(C.value),1),v(`div`,X,F(B(q)(`@WORKBENCH:常见原因:desc 内夹杂了 ASCII 双引号、出现尾随逗号,或输出被截断。可在下方文本框中手动修改后点「重新解析」,或重新生成。`)),1),v(`div`,Oe,[o(h,{size:`small`,type:`primary`,loading:R.value,onClick:se},{default:U(()=>[w(F(B(q)(`@WORKBENCH:重新解析`)),1)]),_:1},8,[`loading`]),o(h,{size:`small`,onClick:oe},{default:U(()=>[w(F(B(q)(`@WORKBENCH:重新生成`)),1)]),_:1}),o(h,{size:`small`,onClick:i[1]||=e=>c.value=`prompt`},{default:U(()=>[w(F(B(q)(`@WORKBENCH:去编辑指令`)),1)]),_:1})])]),_:1})):r(``,!0),s.value===`result`||p.value?(P(),S(`div`,Z,[v(`span`,ke,F(B(q)(`@WORKBENCH:可直接编辑下方文本,修正后点「重新解析」即可入库`)),1),o(h,{size:`small`,type:`primary`,loading:R.value,disabled:!p.value.trim(),onClick:se},{default:U(()=>[w(F(B(q)(`@WORKBENCH:重新解析`)),1)]),_:1},8,[`loading`,`disabled`])])):r(``,!0),o(_,{modelValue:p.value,"onUpdate:modelValue":i[2]||=e=>p.value=e,type:`textarea`,rows:14,placeholder:B(q)(`@WORKBENCH:(暂无输出)`),readonly:M.value,class:`ai-split-raw-editor`,resize:`none`},null,8,[`modelValue`,`placeholder`,`readonly`])]),_:1}),o(T,{name:`confirm`,disabled:y.value.length===0},{label:U(()=>[v(`span`,null,[w(F(B(q)(`@WORKBENCH:确认入库`))+` `,1),y.value.length>0?(P(),S(`span`,Ae,`(`+F(y.value.length)+`)`,1)):r(``,!0)])]),default:U(()=>[y.value.length===0?(P(),S(`div`,je,F(B(q)(`@WORKBENCH:(暂无子任务)`)),1)):(P(),S(`ul`,Me,[(P(!0),S(g,null,z(y.value,(e,t)=>(P(),S(`li`,{key:t,class:`ai-split-list__item`},[v(`div`,Ne,F(t+1),1),v(`div`,Pe,[v(`div`,Fe,F(e.title),1),v(`div`,Ie,F(e.desc),1)])]))),128))]))]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`]),C.value&&s.value===`result`&&y.value.length===0?(P(),S(`div`,Le,[o(u,{color:`#e6a23c`},{default:U(()=>[o(B(m))]),_:1}),v(`span`,null,F(B(q)(`@WORKBENCH:解析失败,未能从模型输出中提取出子任务 — 请查看「原始结果」`)),1)])):r(``,!0)]),_:1},8,[`model-value`,`title`,`close-on-press-escape`,`show-close`])}}}),[[`__scopeId`,`data-v-fa5bf380`]]),ze={class:`wb-attachments__head`},Be={class:`wb-attachments__label`},Ve={class:`wb-attachments__count`},He=[`disabled`],Ue={key:0,class:`wb-attachments__paste-hint`},We={key:1,class:`wb-attachments__list`},Ge=[`title`,`onClick`],Ke=[`src`,`alt`],qe={key:1},Je={class:`wb-attachment__meta`},Ye=[`title`],Xe={class:`wb-attachment__sub`},Ze=[`onClick`,`title`],Qe=H({__name:`AttachmentZone`,props:{attachments:{},isImage:{type:Function},humanSize:{type:Function},isUploading:{type:Boolean},isPasteHover:{type:Boolean},maxCount:{},onPick:{type:Function},onRemove:{type:Function}},emits:[`paste`,`drop`,`dragover`,`dragenter`,`dragleave`],setup(e,{emit:t}){let n=e,i=t,a=u(()=>n.attachments.filter(e=>n.isImage(e))),o=u(()=>a.value.map(e=>`/api/workbench/attachments/${e.id}/raw`)),c=N(0),l=N(!1);function d(e){if(n.isImage(e)){let t=a.value.findIndex(t=>t.id===e.id);c.value=t>=0?t:0,l.value=!0}else window.open(`/api/workbench/attachments/${e.id}/raw`,`_blank`,`noopener`)}function f(){l.value=!1}return(t,n)=>(P(),S(g,null,[v(`div`,{class:R([`wb-attachments`,{"is-paste-hover":e.isPasteHover}]),onPaste:n[1]||=e=>i(`paste`,e),onDrop:n[2]||=p(e=>i(`drop`,e),[`prevent`]),onDragover:n[3]||=p(e=>i(`dragover`,e),[`prevent`]),onDragenter:n[4]||=p(e=>i(`dragenter`,e),[`prevent`]),onDragleave:n[5]||=e=>i(`dragleave`,e)},[v(`div`,ze,[v(`span`,Be,[w(F(B(q)(`@WORKBENCH:附件`))+` `,1),v(`span`,Ve,F(e.attachments.length)+` / `+F(e.maxCount),1)]),v(`button`,{class:`wb-attachments__add`,disabled:e.isUploading||e.attachments.length>=e.maxCount,onClick:n[0]||=(...t)=>e.onPick&&e.onPick(...t)},F(e.isUploading?B(q)(`@WORKBENCH:上传中…`):B(q)(`@WORKBENCH:添加附件`)),9,He)]),e.isPasteHover?(P(),S(`div`,Ue,F(B(q)(`@WORKBENCH:粘贴图片以快速添加`)),1)):r(``,!0),e.attachments.length>0?(P(),S(`ul`,We,[(P(!0),S(g,null,z(e.attachments,t=>(P(),S(`li`,{key:t.id,class:`wb-attachment`},[v(`button`,{type:`button`,class:`wb-attachment__preview`,title:B(q)(`@WORKBENCH:点击预览`),onClick:e=>d(t)},[v(`div`,{class:R([`wb-attachment__icon`,{"wb-attachment__icon--img":e.isImage(t)}])},[e.isImage(t)?(P(),S(`img`,{key:0,src:`/api/workbench/attachments/${t.id}/raw`,alt:t.originalName,loading:`lazy`},null,8,Ke)):(P(),S(`span`,qe,F(t.ext.toUpperCase()),1))],2),v(`div`,Je,[v(`div`,{class:`wb-attachment__name`,title:t.originalName},F(t.originalName),9,Ye),v(`div`,Xe,F(e.humanSize(t.size))+` · `+F(t.mimeType),1)])],8,Ge),v(`button`,{class:`wb-attachment__del`,onClick:p(n=>e.onRemove(t),[`stop`]),title:B(q)(`@WORKBENCH:删除`)},`×`,8,Ze)]))),128))])):r(``,!0)],34),(P(),K(s,{to:`body`},[l.value&&o.value.length>0?(P(),K(B(O),{key:0,"url-list":o.value,"initial-index":c.value,"hide-on-click-modal":!0,onClose:f},null,8,[`url-list`,`initial-index`])):r(``,!0)]))],64))}}),$e=[`open`],et={class:`wb-log-summary`},tt={class:`wb-log-summary__left`},Q={key:0},nt={key:1},rt={key:2},it={class:`wb-log-summary__right`},at={class:`wb-log-summary__meta`},ot=[`title`],st={key:0,class:`wb-log-section`},$={class:`wb-log-section__summary`},ct={class:`wb-log-section__tag wb-log-section__tag--user`},lt={class:`wb-log-section__count`},ut=[`title`],dt={class:`wb-log-section__pre wb-log-section__pre--user`},ft={key:1,class:`wb-log-section`},pt={class:`wb-log-section__summary`},mt={class:`wb-log-section__tag wb-log-section__tag--think`},ht={class:`wb-log-section__count`},gt=[`title`],_t={class:`wb-log-section__pre wb-log-section__pre--think`},vt={class:`wb-log-pre__head`},yt={class:`wb-log-pre__label`},bt={class:`wb-log-pre__meta`},xt=[`title`],St=64*1024,Ct=J(H({__name:`JobLogDetails`,props:{job:{}},setup(e){let t=e,n=u(()=>t.job.status===`running`||t.job.status===`pending`);function i(){let e=t.job.output||``;return e?e.length<=St?e:`${q(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function a(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 o(e){let n=t.job[e]||``;if(!n){h.warning(q(`@WORKBENCH:暂无内容可复制`));return}await a(n)?h.success(q(`@WORKBENCH:已复制到剪贴板`)):h.error(q(`@WORKBENCH:复制失败`))}async function s(){let e=[];if(t.job.prompt&&e.push(`## ${q(`@WORKBENCH:用户提示词`)}\n\n${t.job.prompt}`),t.job.thinking&&e.push(`## ${q(`@WORKBENCH:Claude 思考`)}\n\n${t.job.thinking}`),t.job.output&&e.push(`## ${q(`@WORKBENCH:模型返回`)}\n\n${t.job.output}`),!e.length){h.warning(q(`@WORKBENCH:暂无内容可复制`));return}await a(e.join(`
3
+
4
+ ---
5
+
6
+ `))?h.success(q(`@WORKBENCH:已复制到剪贴板`)):h.error(q(`@WORKBENCH:复制失败`))}let c=N(null);return ce(()=>(t.job.output||``).length,async()=>{n.value&&(await E(),c.value&&(c.value.scrollTop=c.value.scrollHeight))}),(t,a)=>(P(),S(`details`,{class:`wb-log-details`,open:n.value},[v(`summary`,et,[v(`span`,tt,[e.job.status===`running`?(P(),S(`span`,Q,`● `+F(B(q)(`@WORKBENCH:正在执行…`)),1)):e.job.status===`pending`?(P(),S(`span`,nt,F(B(q)(`@WORKBENCH:排队中…`)),1)):(P(),S(`span`,rt,F(B(q)(`@WORKBENCH:查看执行日志`)),1))]),v(`span`,it,[v(`span`,at,F((e.job.output||``).length)+` `+F(B(q)(`@WORKBENCH:字符`)),1),v(`button`,{type:`button`,class:`wb-log-copy`,title:B(q)(`@WORKBENCH:复制全部(含提示词与输出)`),onClick:p(s,[`stop`])},` ⧉ `+F(B(q)(`@WORKBENCH:复制全部`)),9,ot)])]),e.job.prompt?(P(),S(`details`,st,[v(`summary`,$,[v(`span`,ct,F(B(q)(`@WORKBENCH:用户提示词`)),1),v(`span`,lt,F((e.job.prompt||``).length)+` `+F(B(q)(`@WORKBENCH:字符`)),1),v(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:B(q)(`@WORKBENCH:复制用户提示词`),onClick:a[0]||=p(e=>o(`prompt`),[`stop`])},` ⧉ `+F(B(q)(`@WORKBENCH:复制`)),9,ut)]),v(`pre`,dt,F(e.job.prompt),1)])):r(``,!0),e.job.thinking?(P(),S(`details`,ft,[v(`summary`,pt,[v(`span`,mt,F(B(q)(`@WORKBENCH:Claude 思考`)),1),v(`span`,ht,F((e.job.thinking||``).length)+` `+F(B(q)(`@WORKBENCH:字符`)),1),v(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:B(q)(`@WORKBENCH:复制思考内容`),onClick:a[1]||=p(e=>o(`thinking`),[`stop`])},` ⧉ `+F(B(q)(`@WORKBENCH:复制`)),9,gt)]),v(`pre`,_t,F(e.job.thinking),1)])):r(``,!0),v(`div`,vt,[v(`span`,yt,F(B(q)(`@WORKBENCH:模型返回`)),1),v(`span`,bt,F((e.job.output||``).length)+` `+F(B(q)(`@WORKBENCH:字符`)),1),v(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:B(q)(`@WORKBENCH:复制模型返回`),onClick:a[2]||=p(e=>o(`output`),[`stop`])},` ⧉ `+F(B(q)(`@WORKBENCH:复制`)),9,xt)]),v(`pre`,{ref_key:`preRef`,ref:c,class:`wb-log-pre`},F(i()||B(q)(`@WORKBENCH:(暂无输出)`)),513)],8,$e))}}),[[`__scopeId`,`data-v-ae32f993`]]);function wt(e){switch(e){case`todo`:return q(`@WORKBENCH:待执行`);case`running`:return q(`@WORKBENCH:执行中`);case`done`:return q(`@WORKBENCH:已完成`);case`error`:return q(`@WORKBENCH:出错`);case`cancelled`:return q(`@WORKBENCH:已取消`);case`pending`:return q(`@WORKBENCH:排队中`);default:return e}}function Tt(e){switch(e){case`running`:return`var(--color-primary)`;case`done`:return`#22c55e`;case`error`:return`#ef4444`;case`cancelled`:return`#9ca3af`;case`pending`:return`#f59e0b`;default:return`var(--text-tertiary)`}}var Et={class:`exec-logs`},Dt={class:`exec-logs__head`},Ot={class:`exec-logs__title-block`},kt={class:`exec-logs__title`},At={class:`exec-logs__stats`},jt={class:`exec-logs__head-actions`},Mt={class:`exec-logs__config`},Nt={class:`exec-logs__config-label`},Pt={class:`exec-logs__config-field`},Ft={class:`exec-logs__config-name`},It={class:`exec-logs__config-field`},Lt={class:`exec-logs__config-name`},Rt={class:`exec-logs__filter`},zt={key:0,class:`exec-logs__batch-meta`},Bt={key:0,class:`exec-logs__batch`},Vt={class:`exec-logs__list`},Ht={key:0,class:`exec-logs__empty`},Ut={class:`exec-logs__empty-art`,"aria-hidden":`true`},Wt={class:`exec-logs__empty-title`},Gt={class:`exec-logs__empty-hint`},Kt={class:`exec-card__head`},qt=[`title`],Jt={class:`exec-card__meta`},Yt={key:0,class:`exec-card__task`},Xt={key:1,class:`exec-card__time`},Zt={key:2,class:`exec-card__exit`},Qt=[`title`,`onClick`],$t={key:0,class:`exec-card__error`},en={key:1,class:`exec-logs__pager`},tn=50,nn=J(H({__name:`ExecutionLogManager`,setup(e){function t(e){return e instanceof Error?e.message:String(e)}let n=N([]),i=N(0),s=G({count:0,sizeMB:0,byStatus:{}}),c=N(!1),p=N(new Set),m=G({q:``,status:``,page:1}),b=N({maxCount:500,maxSizeMB:256}),x=G({maxCount:500,maxSizeMB:256}),C=N(!1),T=[{value:`pending`,label:q(`@WORKBENCH:排队中`)},{value:`running`,label:q(`@WORKBENCH:执行中`)},{value:`done`,label:q(`@WORKBENCH:已完成`)},{value:`error`,label:q(`@WORKBENCH:出错`)},{value:`cancelled`,label:q(`@WORKBENCH:已取消`)}],E=u(()=>n.value.length>0&&n.value.every(e=>p.value.has(e.id))),D=u(()=>n.value.some(e=>p.value.has(e.id))&&!E.value);async function O(){c.value=!0;try{let e=new URLSearchParams;m.q&&e.set(`q`,m.q),m.status&&e.set(`status`,m.status),e.set(`limit`,String(tn)),e.set(`offset`,String((m.page-1)*tn));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);n.value=t.jobs,i.value=t.total,s.count=t.stats.count,s.sizeMB=t.stats.sizeMB,s.byStatus=t.stats.byStatus;let r=new Set(n.value.map(e=>e.id));for(let e of Array.from(p.value))r.has(e)||p.value.delete(e)}catch(e){h.error(q(`@WORKBENCH:加载失败`)+`: `+t(e))}finally{c.value=!1}}async function k(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(b.value=e.config,x.maxCount=e.config.maxCount,x.maxSizeMB=e.config.maxSizeMB)}catch{}}async function ee(){C.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:x.maxCount,maxSizeMB:x.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);b.value=e.config,h.success(q(`@WORKBENCH:已保存策略`)),await O()}catch(e){h.error(q(`@WORKBENCH:保存失败`)+`: `+t(e))}finally{C.value=!1}}function A(){m.page=1,O()}function j(){m.q=``,m.status=``,m.page=1,O()}function I(e,t){t?p.value.add(e):p.value.delete(e),p.value=new Set(p.value)}function ie(e){if(e)for(let e of n.value)p.value.add(e.id);else for(let e of n.value)p.value.delete(e.id);p.value=new Set(p.value)}async function ae(e){try{await f.confirm(q(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),q(`@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 O()}catch(e){h.error(q(`@WORKBENCH:保存失败`)+`: `+t(e))}}async function L(){let e=Array.from(p.value);if(e.length!==0){try{await f.confirm(q(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),q(`@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`);h.success(q(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),p.value=new Set,await O()}catch(e){h.error(q(`@WORKBENCH:保存失败`)+`: `+t(e))}}}async function ce(){let e=s.count;if(e!==0){try{await f.confirm(q(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),q(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:q(`@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`);h.success(q(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),p.value=new Set,await O()}catch(e){h.error(q(`@WORKBENCH:保存失败`)+`: `+t(e))}}}function H(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 _(()=>{O(),k()}),(e,t)=>{let u=te,f=l,h=ne,_=oe,b=de,k=W,N=me,le=V,ue=a;return P(),S(`div`,Et,[v(`header`,Dt,[v(`div`,Ot,[v(`h2`,kt,F(B(q)(`@WORKBENCH:执行日志`)),1),v(`span`,At,F(B(q)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:s.count,size:s.sizeMB})),1)]),v(`div`,jt,[o(u,{icon:B(se),size:`small`,loading:c.value,onClick:O},{default:U(()=>[w(F(B(q)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),o(u,{type:`danger`,plain:``,size:`small`,disabled:s.count===0,onClick:ce},{default:U(()=>[w(F(B(q)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),v(`div`,Mt,[v(`span`,Nt,F(B(q)(`@WORKBENCH:保存策略`)),1),v(`span`,Pt,[v(`span`,Ft,F(B(q)(`@WORKBENCH:最大条数`)),1),o(f,{modelValue:x.maxCount,"onUpdate:modelValue":t[0]||=e=>x.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),v(`span`,It,[v(`span`,Lt,F(B(q)(`@WORKBENCH:最大体积 (MB)`)),1),o(f,{modelValue:x.maxSizeMB,"onUpdate:modelValue":t[1]||=e=>x.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),o(u,{type:`primary`,size:`small`,loading:C.value,onClick:ee},{default:U(()=>[w(F(B(q)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),v(`div`,Rt,[o(h,{modelValue:m.q,"onUpdate:modelValue":t[2]||=e=>m.q=e,placeholder:B(q)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:d(A,[`enter`]),onClear:A},null,8,[`modelValue`,`placeholder`]),o(b,{modelValue:m.status,"onUpdate:modelValue":t[3]||=e=>m.status=e,placeholder:B(q)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:A},{default:U(()=>[(P(),S(g,null,z(T,e=>o(_,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),o(u,{size:`small`,onClick:j},{default:U(()=>[w(F(B(q)(`@WORKBENCH:重置`)),1)]),_:1}),t[5]||=v(`span`,{class:`exec-logs__filter-spacer`},null,-1),p.value.size>0?(P(),S(`span`,zt,F(B(q)(`@WORKBENCH:已选择 {count} 项`,{count:p.value.size})),1)):r(``,!0)]),p.value.size>0?(P(),S(`div`,Bt,[o(k,{"model-value":E.value,indeterminate:D.value,onChange:ie},{default:U(()=>[w(F(E.value?B(q)(`@WORKBENCH:取消全选`):B(q)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),o(u,{type:`danger`,size:`small`,onClick:L},{default:U(()=>[w(F(B(q)(`@WORKBENCH:批量删除`)),1)]),_:1})])):r(``,!0),M((P(),S(`div`,Vt,[!c.value&&n.value.length===0?(P(),S(`div`,Ht,[v(`div`,Ut,[o(N,null,{default:U(()=>[o(B(y))]),_:1})]),v(`div`,Wt,F(B(q)(`@WORKBENCH:暂无执行日志`)),1),v(`div`,Gt,F(B(q)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):r(``,!0),(P(!0),S(g,null,z(n.value,e=>(P(),S(`article`,{key:e.id,class:R([`exec-card`,{"is-selected":p.value.has(e.id)}])},[v(`header`,Kt,[o(k,{"model-value":p.value.has(e.id),onChange:t=>I(e.id,t)},null,8,[`model-value`,`onChange`]),v(`span`,{class:`exec-card__status`,style:re({color:B(Tt)(e.status),borderColor:B(Tt)(e.status)})},F(B(wt)(e.status)),5),v(`span`,{class:`exec-card__title`,title:e.title||B(q)(`@WORKBENCH:无标题`)},F(e.title||B(q)(`@WORKBENCH:无标题`)),9,qt),t[6]||=v(`span`,{class:`exec-card__spacer`},null,-1),v(`span`,Jt,[e.taskTitle?(P(),S(`span`,Yt,`📁 `+F(e.taskTitle),1)):r(``,!0),e.startedAt?(P(),S(`span`,Xt,`⏱ `+F(H(e.startedAt,e.endedAt)),1)):r(``,!0),e.exitCode===null?r(``,!0):(P(),S(`span`,Zt,`exit `+F(e.exitCode),1))]),v(`button`,{type:`button`,class:`exec-card__del`,title:B(q)(`@WORKBENCH:删除`),onClick:t=>ae(e.id)},`×`,8,Qt)]),e.error?(P(),S(`p`,$t,`⚠ `+F(e.error),1)):r(``,!0),o(Ct,{job:e},null,8,[`job`])],2))),128))])),[[ue,c.value]]),i.value>tn?(P(),S(`footer`,en,[o(le,{"current-page":m.page,"onUpdate:currentPage":t[4]||=e=>m.page=e,"page-size":tn,total:i.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:O},null,8,[`current-page`,`total`])])):r(``,!0)])}}}),[[`__scopeId`,`data-v-13ab606e`]]),rn={class:`workbench`},an={class:`wb-tabs`},on={key:0,class:`workbench__editor-row`},sn={class:`wb-sidebar`},cn={class:`wb-section`},ln={class:`wb-section__head`},un={class:`wb-section__tag`},dn={class:`wb-section__title`},fn={class:`wb-section__count`},pn={key:0,class:`wb-current-project`},mn={class:`wb-current-project__label`},hn=[`title`],gn={class:`wb-task-list`},_n=[`aria-expanded`,`title`,`onClick`,`onKeydown`],vn=[`title`],yn={class:`wb-task-group__count`},bn=[`data-icon`,`onClick`],xn=[`data-icon`],Sn={class:`wb-task-item__body`},Cn=[`title`],wn={class:`wb-task-item__meta`},Tn=[`title`],En={class:`wb-task-item__num`},Dn=[`title`],On={class:`wb-task-item__num`},kn=[`title`],An=[`title`],jn=[`onClick`,`title`,`aria-label`],Mn={key:0,class:`wb-empty`},Nn={class:`wb-empty__icon`},Pn={class:`wb-empty__text`},Fn={class:`wb-empty__hint`},In={class:`wb-section`},Ln={class:`wb-section__head`},Rn={class:`wb-section__tag wb-section__tag--accent`},zn={class:`wb-section__title`},Bn={class:`wb-section__count`},Vn=[`title`,`aria-label`],Hn={class:`wb-prompt-list`},Un={class:`wb-prompt-item__icon`},Wn=[`onClick`,`title`],Gn=[`title`],Kn=[`onClick`,`title`,`aria-label`],qn={key:0,class:`wb-empty wb-empty--compact`},Jn={class:`wb-split`},Yn={key:0,class:`wb-placeholder`},Xn={class:`wb-split__header`},Zn=[`placeholder`],Qn={value:null},$n=[`value`],er=[`placeholder`],tr={class:`wb-split__sub-header`},nr={class:`wb-split__sub-actions`},rr={key:0,class:`wb-dirty-badge`},ir={class:`wb-sub-list`},ar=[`onClick`],or={key:0,class:`wb-sub-item__row wb-sub-item__row--compact`},sr=[`title`],cr=[`title`],lr=[`title`,`aria-label`,`onClick`],ur=[`title`,`aria-label`,`onClick`],dr=[`title`,`aria-label`,`onClick`],fr={class:`wb-sub-item__row`},pr=[`onUpdate:modelValue`,`placeholder`,`onPaste`],mr=[`title`],hr=[`title`],gr=[`title`,`onClick`],_r=[`title`,`aria-label`,`onClick`],vr=[`title`,`aria-label`,`onClick`],yr=[`onClick`],br=[`onUpdate:modelValue`,`placeholder`,`onPaste`],xr={key:0,class:`wb-empty wb-empty--rich`},Sr={class:`wb-empty__art`,"aria-hidden":`true`},Cr={class:`wb-empty__title`},wr={class:`wb-empty__hint`},Tr={class:`wb-empty__cta`},Er=[`disabled`],Dr={style:{display:`flex`,gap:`8px`,"align-items":`center`}},Or=`__no_project__`,kr=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,Ar=5*1024*1024,jr=J(H({__name:`WorkbenchView`,setup(n){let a=N([]),s=N([]),l=N([]),m=N(`editor`),x=N(null),E=u(()=>s.value.find(e=>e.id===x.value)||null),O=N(new Map);function ee(){let e=new Map;if(E.value)for(let t of E.value.subtasks)e.set(t.id,{id:t.id,title:t.title,desc:t.desc,promptOverride:t.promptOverride});O.value=e}let j=u(()=>{let e=new Set;if(!E.value)return e;for(let t of E.value.subtasks){let n=O.value.get(t.id);if(!n){e.add(t.id);continue}(n.title!==t.title||n.desc!==t.desc||n.promptOverride!==t.promptOverride)&&e.add(t.id)}return e}),se=u(()=>j.value.size>0),V=G({visible:!1,editing:null,name:``,content:``,aiLoading:!1}),H=G({visible:!1,text:``,loading:!1,saving:!1}),W=G({visible:!1,editing:null,title:``,desc:``,promptId:null}),J=null,_e=ge();function ve(){_e.setRunning(l.value.filter(e=>e.status===`running`).length)}function Y(e){return l.value.find(t=>t.subId===e)||null}function ye(e,t){if(e===`hello`){l.value=t.jobs||[],ve();return}if(e===`job:update`){let e=t,n=l.value.findIndex(t=>t.id===e.id);n>=0?l.value[n]=e:l.value.push(e),ve();return}if(e===`job:thinking-delta`||e===`job:output-delta`){let n=e===`job:thinking-delta`?`thinking`:`output`,r=t?.delta||``;if(!r)return;let i=l.value.findIndex(e=>e.id===t.id);if(i<0)return;let a=l.value[i][n]||``;l.value[i][n]=a+r;return}if(e===`sub:update`){let e=s.value.find(e=>e.id===t.taskId);if(e){let n=e.subtasks.findIndex(e=>e.id===t.sub.id);n>=0&&(e.subtasks[n]=t.sub)}}if(e===`task:update`){let e=s.value.findIndex(e=>e.id===t.id);e>=0&&(s.value[e]=t)}e===`task:error`&&h.error(t.error||q(`@WORKBENCH:执行出错`))}let be=[{key:`image`,patterns:[/图\s*片/,/上\s*传/,/upload/i,/image/i,/screenshot/i,/截图/,/附件/,/attachment/i]},{key:`icon`,patterns:[/图\s*标/,/icon/i,/svg/i]},{key:`test`,patterns:[/测\s*试/,/test/i,/spec/i,/\bqa\b/i]},{key:`ui`,patterns:[/ui\s*优\s*化/,/样\s*式/,/style/i,/css/i,/界面/,/视\s*觉/,/design/i]}];function xe(e){let t=(e||``).trim();if(!t)return`doc`;for(let e of be)if(e.patterns.some(e=>e.test(t)))return e.key;return`doc`}let Se={icon:L(y),image:L(le),test:L(C),ui:L(e),doc:L(y),idea:L(e)};function Ce(e){return Se[xe(e.title)]}function we(e){return Array.isArray(e.attachments)?e.attachments.length:0}function Te(e){return Array.isArray(e.subtasks)?e.subtasks.length:0}async function Ee(){a.value=(await fetch(`/api/workbench/prompts`).then(e=>e.json()).catch(()=>({prompts:[]}))).prompts||[]}async function De(){s.value=(await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}))).tasks||[],!x.value&&s.value.length>0&&(x.value=s.value[0].id),ee()}let X=N({path:``,name:``});async function Oe(){let e=await fetch(`/api/workbench/current-project`).then(e=>e.json()).catch(()=>({}));e&&typeof e.projectPath==`string`&&(X.value={path:e.projectPath,name:e.projectName||``})}let Z=N(new Set);function ke(e){return Z.value.has(e)}function Ae(e){Z.value.has(e)?Z.value.delete(e):Z.value.add(e),Z.value=new Set(Z.value)}let je=u(()=>{let e=s.value,t=new Map;for(let n of e){let e=(n.projectPath||``).trim()||Or;t.has(e)||t.set(e,[]),t.get(e).push(n)}let n=X.value.path,r=Array.from(t.keys()).sort((e,t)=>e===n?-1:t===n||e===Or?1:t===Or?-1:e.localeCompare(t));return{groups:r.map(e=>({path:e,label:e===Or?q(`@WORKBENCH:未关联项目`):e,tasks:t.get(e)})),hasMultiple:r.length>1}});function Me(e){if(!e||e===Or)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}ce(()=>je.value.groups.map(e=>e.path),e=>{let t=X.value.path,n=new Set(Z.value),r=!1;for(let i of e)i!==t&&!n.has(i)&&(n.add(i),r=!0);r&&(Z.value=n)},{immediate:!0});async function Ne(){l.value=(await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}))).jobs||[],ve()}function Pe(){J&&=(J.close(),null),J=new EventSource(`/api/workbench/events`),J.onmessage=e=>{try{let t=JSON.parse(e.data);ye(t.event,t.payload)}catch{}},J.onerror=()=>{J&&=(J.close(),null),setTimeout(Pe,3e3)}}function Fe(){V.editing=null,V.name=``,V.content=``,V.aiLoading=!1,V.visible=!0}function Ie(e){V.editing=e,V.name=e.name,V.content=e.content,V.aiLoading=!1,V.visible=!0}async function Le(){if(!V.aiLoading){V.aiLoading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-generate`,{method:`POST`}).then(e=>e.json());e.success?(V.name=e.name||V.name,V.content=e.result||``,h.success(q(`@WORKBENCH:已生成,可继续编辑`))):h.error(e.error||q(`@WORKBENCH:生成失败`))}catch(e){h.error(q(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{V.aiLoading=!1}}}async function ze(){H.visible=!0,H.loading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`).then(e=>e.json());e.success?H.text=e.instruction||``:h.error(e.error||q(`@WORKBENCH:读取指令失败`))}catch(e){h.error(q(`@WORKBENCH:读取指令失败`)+`: `+(e&&e.message||e))}finally{H.loading=!1}}async function Be(){if(!H.text.trim()){h.warning(q(`@WORKBENCH:指令内容不能为空`));return}H.saving=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:H.text})}).then(e=>e.json());e.success?(h.success(q(`@WORKBENCH:已保存指令`)),H.visible=!1):h.error(e.error||q(`@WORKBENCH:保存失败`))}catch(e){h.error(q(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{H.saving=!1}}async function Ve(){if(!V.name.trim()||!V.content.trim()){h.warning(q(`@WORKBENCH:名称和内容不能为空`));return}let e={id:V.editing?.id,name:V.name.trim(),content:V.content},t=await fetch(`/api/workbench/prompts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(h.success(q(`@WORKBENCH:已保存`)),V.visible=!1,Ee()):h.error(t.error||q(`@WORKBENCH:保存失败`))}async function He(e){await f.confirm(q(`@WORKBENCH:删除提示词「{name}」?`,{name:e.name}),q(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/prompts/${e.id}`,{method:`DELETE`}),Ee();for(let t of s.value)t.promptId===e.id&&(t.promptId=null,await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}));De()}function Ue(){W.editing=null,W.title=``,W.desc=``,W.promptId=null,W.visible=!0}async function We(){if(!W.title.trim()){h.warning(q(`@WORKBENCH:标题必填`));return}let e={id:W.editing?.id,title:W.title.trim(),desc:W.desc,promptId:W.promptId,subtasks:W.editing?.subtasks||[]};!W.editing?.id&&X.value.path&&(e.projectPath=X.value.path);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){h.success(q(`@WORKBENCH:已保存`));let e=!W.editing?.id;W.visible=!1,await De(),e&&t.task?.id?(x.value=t.task.id,ee()):x.value||=t.task.id}else h.error(t.error||q(`@WORKBENCH:保存失败`))}async function Ge(e){await f.confirm(q(`@WORKBENCH:删除任务「{title}」及其所有子任务?`,{title:e.title}),q(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),x.value===e.id&&(x.value=null),De()}function Ke(e){x.value!==e.id&&(x.value=e.id,ee())}function qe(){if(!E.value)return;let e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:q(`@WORKBENCH:新子任务`),desc:``,status:`todo`,promptOverride:``};E.value.subtasks.push(e),Ye(!1)}function Je(e){E.value&&(E.value.subtasks=E.value.subtasks.filter(t=>t.id!==e.id),Ye(!1))}async function Ye(e){if(!E.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(E.value)}).then(e=>e.json());return t.success?(e&&h.success(q(`@WORKBENCH:已保存拆分`)),await De(),!0):(h.error(t.error||q(`@WORKBENCH:保存失败`)),!1)}async function Xe(){await Ye(!0)}let Ze=N(!1);function $e(){if(E.value){if(!(E.value.title||``).trim()){h.warning(q(`@WORKBENCH:请先填写任务标题`));return}Ze.value=!0}}function et(e){if(E.value){for(let t of e)E.value.subtasks.push({id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:t.title,desc:t.desc||``,status:`todo`,promptOverride:``,attachments:[]});h.success(q(`@WORKBENCH:已生成 {n} 个子任务,请审阅后保存`,{n:e.length}))}}async function tt(e){if(!e.subtasks||e.subtasks.length===0){h.warning(q(`@WORKBENCH:请先拆分任务`));return}if(E.value&&E.value.id===e.id){let t=s.value.find(t=>t.id===e.id);if((!t||t.title!==E.value.title||t.desc!==E.value.desc||JSON.stringify(t.subtasks)!==JSON.stringify(E.value.subtasks)||t.promptId!==E.value.promptId)&&!await Ye(!1))return}let t=await fetch(`/api/workbench/tasks/${e.id}/run`,{method:`POST`}).then(e=>e.json());t.success?h.success(t.message||q(`@WORKBENCH:已加入执行队列`)):h.error(t.error||q(`@WORKBENCH:执行失败`))}let Q=N(new Set);function nt(e){return e.status===`done`?!Q.value.has(e.id):!1}function rt(e){Q.value.has(e.id)?Q.value.delete(e.id):Q.value.add(e.id),Q.value=new Set(Q.value)}async function it(e){if(!E.value)return;let t=O.value.get(e.id);t&&O.value.set(e.id,{...t,status:`todo`}),e.status=`todo`,await Ye(!1)}async function at(e){try{await f.confirm(q(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),q(`@WORKBENCH:停止执行`),{confirmButtonText:q(`@WORKBENCH:停止`),cancelButtonText:q(`@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?h.success(q(`@WORKBENCH:已发送停止信号`)):h.error(t.error||q(`@WORKBENCH:停止失败`))}_(async()=>{await Promise.all([Ee(),De(),Oe(),Ne()]),Pe()}),k(()=>{J&&=(J.close(),null)});let ot=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`]),st=N({}),$=N(null);function ct(e){return!!st.value[e]}function lt(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function ut(e){return e.kind===`task`?`task-${e.task?.id??``}`:`sub-${e.sub.id}`}function dt(e){let t=e.kind===`task`?e.task?.attachments:e.sub.attachments;return Array.isArray(t)?t:[]}function ft(e,t){e.kind===`task`?e.task&&(e.task.attachments=t):e.sub.attachments=t}function pt(e){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments`:`/api/workbench/subtasks/${e.sub.id}/attachments`}function mt(e,t){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments/${t}`:`/api/workbench/subtasks/${e.sub.id}/attachments/${t}`}function ht(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 r=(n.type.split(`/`)[1]||`png`).replace(`jpeg`,`jpg`);_t(t,lt(n,`paste-${new Date().toISOString().replace(/[:.]/g,`-`)}.${r}`))}return}let r=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&!e.type.startsWith(`image/`));if(r.length>0){e.preventDefault();for(let e of r){let n=e.getAsFile();n&&_t(t,lt(n,n.name||`pasted-file`))}}}function gt(e,t){$.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>_t(t,e))}async function _t(e,t){if(t.size>Ar){h.error(`「${t.name}」${q(`@WORKBENCH:超过 5MB 限制`)}`);return}if(!ot.has(t.type)&&!t.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){h.error(`${q(`@WORKBENCH:不支持的文件类型`)}(${t.name})`);return}if(dt(e).length>=9){h.error(q(`@WORKBENCH:单个任务最多 9 个附件`));return}let n=ut(e);st.value[n]=!0;try{let n=await fetch(pt(e),{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":t.name,"X-Mime-Type":t.type||`application/octet-stream`},body:t}).then(e=>e.json());if(n.success){let r=dt(e);r.push(n.attachment),ft(e,r),h.success(`${q(`@WORKBENCH:已添加:`)}${t.name}`)}else h.error(n.error||q(`@WORKBENCH:上传失败`))}catch(e){h.error(q(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{st.value[n]=!1}}async function vt(e,t){try{await f.confirm(q(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),q(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(mt(e,t.id),{method:`DELETE`}).then(e=>e.json());n.success?(ft(e,dt(e).filter(e=>e.id!==t.id)),h.success(q(`@WORKBENCH:已删除`))):h.error(n.error||q(`@WORKBENCH:删除失败`))}function yt(e){let t=document.createElement(`input`);t.type=`file`,t.accept=kr,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>_t(e,t))},t.click()}let bt=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function xt(e){return bt.has(String(e.ext||``).toLowerCase())}function St(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return(n,l)=>{let u=me,f=te,h=ne,_=he,y=fe,C=ue,O=oe,k=de;return P(),S(`div`,rn,[v(`header`,an,[v(`button`,{type:`button`,class:R([`wb-tab`,{"is-active":m.value===`editor`}]),onClick:l[0]||=e=>m.value=`editor`},F(B(q)(`@WORKBENCH:任务执行`)),3),v(`button`,{type:`button`,class:R([`wb-tab`,{"is-active":m.value===`logs`}]),onClick:l[1]||=e=>m.value=`logs`},F(B(q)(`@WORKBENCH:执行日志`)),3)]),m.value===`editor`?(P(),S(`div`,on,[v(`aside`,sn,[v(`section`,cn,[v(`header`,ln,[v(`span`,un,F(B(q)(`@WORKBENCH:任务`)),1),v(`h3`,dn,F(B(q)(`@WORKBENCH:任务列表`)),1),v(`span`,fn,F(s.value.length),1)]),v(`button`,{class:`wb-new-btn`,onClick:Ue},[o(u,{class:`wb-new-btn__icon`},{default:U(()=>[o(B(I))]),_:1}),v(`span`,null,F(B(q)(`@WORKBENCH:新建任务`)),1),l[25]||=v(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)]),s.value.length>0&&X.value.name?(P(),S(`div`,pn,[o(u,{class:`wb-current-project__icon`},{default:U(()=>[o(B(T))]),_:1}),v(`span`,mn,F(B(q)(`@WORKBENCH:当前项目`)),1),v(`span`,{class:`wb-current-project__name`,title:X.value.path},F(X.value.name),9,hn)])):r(``,!0),v(`ul`,gn,[(P(!0),S(g,null,z(je.value.groups,t=>(P(),S(g,{key:t.path},[je.value.hasMultiple?(P(),S(`li`,{key:0,class:R([`wb-task-group__head`,{"is-current":t.path===X.value.path,"is-collapsed":ke(t.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!ke(t.path),title:ke(t.path)?B(q)(`@WORKBENCH:展开`):B(q)(`@WORKBENCH:收起`),onClick:e=>Ae(t.path),onKeydown:[d(p(e=>Ae(t.path),[`prevent`]),[`enter`]),d(p(e=>Ae(t.path),[`prevent`]),[`space`])]},[o(u,{class:`wb-task-group__caret`},{default:U(()=>[(P(),K(A(ke(t.path)?B(i):B(b))))]),_:2},1024),o(u,{class:`wb-task-group__icon`},{default:U(()=>[o(B(T))]),_:1}),v(`span`,{class:`wb-task-group__name`,title:t.path===X.value.path?X.value.path:t.label},F(t.path===X.value.path?X.value.name:Me(t.label)),9,vn),v(`span`,yn,F(t.tasks.length),1)],42,_n)):r(``,!0),ke(t.path)?r(``,!0):(P(!0),S(g,{key:1},z(t.tasks,t=>(P(),S(`li`,{key:t.id,class:R([`wb-task-item`,{active:t.id===x.value,"has-attachment":we(t)>0,"is-other-project":t.projectPath&&t.projectPath!==X.value.path}]),"data-icon":xe(t.title),onClick:e=>Ke(t)},[v(`div`,{class:`wb-task-item__avatar`,"data-icon":xe(t.title)},[o(u,null,{default:U(()=>[(P(),K(A(Ce(t))))]),_:2},1024)],8,xn),v(`div`,Sn,[v(`div`,{class:`wb-task-item__title`,title:t.title},F(t.title||B(q)(`@WORKBENCH:未命名任务`)),9,Cn),v(`div`,wn,[v(`span`,{class:`wb-task-item__meta-item`,title:B(q)(`@WORKBENCH:个子任务`)},[o(u,{class:`wb-task-item__meta-icon`},{default:U(()=>[o(B(D))]),_:1}),v(`span`,En,F(Te(t)),1)],8,Tn),we(t)>0?(P(),S(`span`,{key:0,class:`wb-task-item__meta-item`,title:B(q)(`@WORKBENCH:附件`)},[o(u,{class:`wb-task-item__meta-icon`},{default:U(()=>[o(B(le))]),_:1}),v(`span`,On,F(we(t)),1)],8,Dn)):r(``,!0),t.promptId?(P(),S(`span`,{key:1,class:`wb-task-item__meta-item wb-task-item__meta-item--accent`,title:B(q)(`@WORKBENCH:已绑定预置提示词`)},[o(u,{class:`wb-task-item__meta-icon`},{default:U(()=>[o(B(e))]),_:1})],8,kn)):r(``,!0),t.projectPath&&t.projectPath!==X.value.path?(P(),S(`span`,{key:2,class:`wb-task-item__meta-item wb-task-item__meta-item--project`,title:t.projectPath},F(Me(t.projectPath)),9,An)):r(``,!0)])]),v(`button`,{class:`wb-task-item__del`,onClick:p(e=>Ge(t),[`stop`]),title:B(q)(`@WORKBENCH:删除`),"aria-label":B(q)(`@WORKBENCH:删除`)},[o(u,null,{default:U(()=>[o(B(ie))]),_:1})],8,jn)],10,bn))),128))],64))),128)),s.value.length===0?(P(),S(`li`,Mn,[v(`div`,Nn,[o(u,null,{default:U(()=>[o(B(c))]),_:1})]),v(`div`,Pn,F(B(q)(`@WORKBENCH:暂无任务`)),1),v(`div`,Fn,F(B(q)(`@WORKBENCH:点击上方按钮新建`)),1)])):r(``,!0)])]),v(`section`,In,[v(`header`,Ln,[v(`span`,Rn,F(B(q)(`@WORKBENCH:提示`)),1),v(`h3`,zn,F(B(q)(`@WORKBENCH:预置提示词`)),1),v(`span`,Bn,F(a.value.length),1),v(`button`,{class:`wb-section__action`,onClick:Fe,title:B(q)(`@WORKBENCH:新建提示词`),"aria-label":B(q)(`@WORKBENCH:新建提示词`)},[o(u,null,{default:U(()=>[o(B(I))]),_:1})],8,Vn)]),v(`ul`,Hn,[(P(!0),S(g,null,z(a.value,t=>(P(),S(`li`,{key:t.id,class:`wb-prompt-item`},[v(`div`,Un,[o(u,null,{default:U(()=>[o(B(e))]),_:1})]),v(`span`,{class:`wb-prompt-item__name`,onClick:e=>Ie(t),title:t.content},F(t.name),9,Wn),X.value.name?(P(),S(`span`,{key:0,class:`wb-prompt-item__project`,title:B(q)(`@WORKBENCH:适用于当前项目`)+`:`+X.value.path},F(X.value.name),9,Gn)):r(``,!0),v(`button`,{class:`wb-prompt-item__del`,onClick:e=>He(t),title:B(q)(`@WORKBENCH:删除`),"aria-label":B(q)(`@WORKBENCH:删除`)},[o(u,null,{default:U(()=>[o(B(ie))]),_:1})],8,Kn)]))),128)),a.value.length===0?(P(),S(`li`,qn,F(B(q)(`@WORKBENCH:暂无提示词`)),1)):r(``,!0)])])]),v(`section`,Jn,[E.value?(P(),S(g,{key:1},[v(`div`,Xn,[M(v(`input`,{class:`wb-input wb-input--title`,"onUpdate:modelValue":l[2]||=e=>E.value.title=e,placeholder:B(q)(`@WORKBENCH:任务标题`)},null,8,Zn),[[t,E.value.title]]),M(v(`select`,{class:`wb-select`,"onUpdate:modelValue":l[3]||=e=>E.value.promptId=e},[v(`option`,Qn,F(B(q)(`@WORKBENCH:不绑定预置提示词`)),1),(P(!0),S(g,null,z(a.value,e=>(P(),S(`option`,{key:e.id,value:e.id},F(e.name),9,$n))),128))],512),[[ae,E.value.promptId]]),o(f,{type:`info`,plain:``,disabled:!E.value.title||!E.value.title.trim(),onClick:$e},{default:U(()=>[w(F(B(q)(`@WORKBENCH:AI 拆分`)),1)]),_:1},8,[`disabled`]),o(f,{type:`primary`,loading:!1,onClick:l[4]||=e=>tt(E.value)},{default:U(()=>[w(F(B(q)(`@WORKBENCH:执行任务`)),1)]),_:1})]),M(v(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":l[5]||=e=>E.value.desc=e,placeholder:B(q)(`@WORKBENCH:任务描述(可选)`),rows:`3`,onPaste:l[6]||=e=>ht(e,{kind:`task`,task:E.value})},null,40,er),[[t,E.value.desc]]),o(Qe,{attachments:E.value.attachments||[],"is-image":xt,"human-size":St,"is-uploading":ct(`task-`+E.value.id),"is-paste-hover":$.value===`task-`+E.value.id,"max-count":9,"on-pick":()=>yt({kind:`task`,task:E.value}),"on-remove":e=>vt({kind:`task`,task:E.value},e),onPaste:l[7]||=e=>ht(e,{kind:`task`,task:E.value}),onDrop:l[8]||=p(e=>gt(e,{kind:`task`,task:E.value}),[`prevent`]),onDragover:l[9]||=p(e=>$.value=`task-`+E.value.id,[`prevent`]),onDragenter:l[10]||=p(e=>$.value=`task-`+E.value.id,[`prevent`]),onDragleave:l[11]||=e=>$.value=$.value===`task-`+E.value.id?null:$.value},null,8,[`attachments`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`]),v(`div`,tr,[v(`h4`,null,F(B(q)(`@WORKBENCH:子任务拆分`)),1),v(`div`,nr,[o(f,{size:`small`,plain:``,icon:B(I),disabled:E.value.subtasks.length===0,onClick:qe},{default:U(()=>[w(F(B(q)(`@WORKBENCH:添加子任务`)),1)]),_:1},8,[`icon`,`disabled`]),o(f,{size:`small`,type:se.value?`primary`:`default`,disabled:E.value.subtasks.length===0,onClick:Xe},{default:U(()=>[w(F(B(q)(`@WORKBENCH:保存拆分`))+` `,1),se.value?(P(),S(`span`,rr,F(j.value.size),1)):r(``,!0)]),_:1},8,[`type`,`disabled`])])]),v(`ul`,ir,[(P(!0),S(g,null,z(E.value.subtasks,e=>(P(),S(`li`,{key:e.id,class:R([`wb-sub-item`,{"is-dirty":j.value.has(e.id),"is-running":e.status===`running`,"is-done":e.status===`done`,"is-collapsed":nt(e),"is-clickable":nt(e)}]),onClick:t=>nt(e)&&rt(e)},[nt(e)?(P(),S(`div`,or,[v(`span`,{class:`wb-sub-item__status`,style:re({background:B(Tt)(e.status)})},F(B(wt)(e.status)),5),v(`span`,{class:`wb-sub-item__title-compact`,title:e.title},F(e.title||B(q)(`@WORKBENCH:未命名子任务`)),9,sr),Y(e.id)?(P(),S(`span`,{key:0,class:`wb-sub-item__pid`,title:B(q)(`@WORKBENCH:进程ID`)},` PID: `+F(Y(e.id)?.pid),9,cr)):r(``,!0),v(`button`,{class:`wb-sub-item__toggle`,title:B(q)(`@WORKBENCH:展开`),"aria-label":B(q)(`@WORKBENCH:展开`),onClick:p(t=>rt(e),[`stop`])},[o(u,null,{default:U(()=>[o(B(b))]),_:1})],8,lr),v(`button`,{class:`wb-sub-item__undo`,title:B(q)(`@WORKBENCH:取消完成`),"aria-label":B(q)(`@WORKBENCH:取消完成`),onClick:p(t=>it(e),[`stop`])},F(B(q)(`@WORKBENCH:取消完成`)),9,ur),v(`button`,{class:`wb-sub-item__del`,title:B(q)(`@WORKBENCH:删除`),"aria-label":B(q)(`@WORKBENCH:删除`),onClick:p(t=>Je(e),[`stop`])},`×`,8,dr)])):(P(),S(g,{key:1},[v(`div`,fr,[v(`span`,{class:`wb-sub-item__status`,style:re({background:B(Tt)(e.status)})},F(B(wt)(e.status)),5),M(v(`input`,{class:`wb-input`,"onUpdate:modelValue":t=>e.title=t,placeholder:B(q)(`@WORKBENCH:子任务标题`),onPaste:t=>ht(t,{kind:`sub`,task:E.value,sub:e})},null,40,pr),[[t,e.title]]),j.value.has(e.id)?(P(),S(`span`,{key:0,class:`wb-sub-item__dirty`,title:B(q)(`@WORKBENCH:有未保存的更改`)},F(B(q)(`@WORKBENCH:未保存`)),9,mr)):r(``,!0),Y(e.id)?(P(),S(`span`,{key:1,class:`wb-sub-item__pid`,title:B(q)(`@WORKBENCH:进程ID`)},` PID: `+F(Y(e.id)?.pid),9,hr)):r(``,!0),Y(e.id)&&(Y(e.id)?.status===`running`||Y(e.id)?.status===`pending`)?(P(),S(`button`,{key:2,class:`wb-sub-item__stop`,title:B(q)(`@WORKBENCH:停止执行`),onClick:t=>at(Y(e.id))},F(B(q)(`@WORKBENCH:停止`)),9,gr)):r(``,!0),e.status===`done`?(P(),S(`button`,{key:3,class:`wb-sub-item__toggle`,title:B(q)(`@WORKBENCH:收起`),"aria-label":B(q)(`@WORKBENCH:收起`),onClick:t=>rt(e)},[o(u,null,{default:U(()=>[o(B(pe))]),_:1})],8,_r)):r(``,!0),e.status===`done`?(P(),S(`button`,{key:4,class:`wb-sub-item__undo`,title:B(q)(`@WORKBENCH:取消完成`),"aria-label":B(q)(`@WORKBENCH:取消完成`),onClick:t=>it(e)},F(B(q)(`@WORKBENCH:取消完成`)),9,vr)):r(``,!0),v(`button`,{class:`wb-sub-item__del`,onClick:t=>Je(e)},`×`,8,yr)]),M(v(`textarea`,{class:`wb-textarea wb-textarea--sm`,"onUpdate:modelValue":t=>e.desc=t,placeholder:B(q)(`@WORKBENCH:子任务描述 / 独立提示词覆盖`),rows:`2`,onPaste:t=>ht(t,{kind:`sub`,task:E.value,sub:e})},null,40,br),[[t,e.desc]]),Y(e.id)?(P(),K(Ct,{key:0,job:Y(e.id)},null,8,[`job`])):r(``,!0),o(Qe,{attachments:e.attachments||[],"is-image":xt,"human-size":St,"is-uploading":ct(`sub-`+e.id),"is-paste-hover":$.value===e.id,"max-count":9,"on-pick":()=>yt({kind:`sub`,task:E.value,sub:e}),"on-remove":t=>vt({kind:`sub`,task:E.value,sub:e},t),onPaste:t=>ht(t,{kind:`sub`,task:E.value,sub:e}),onDrop:p(t=>gt(t,{kind:`sub`,task:E.value,sub:e}),[`prevent`]),onDragover:p(t=>$.value=e.id,[`prevent`]),onDragenter:p(t=>$.value=e.id,[`prevent`]),onDragleave:t=>$.value=$.value===e.id?null:$.value},null,8,[`attachments`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`,`onPaste`,`onDrop`,`onDragover`,`onDragenter`,`onDragleave`])],64))],10,ar))),128)),E.value.subtasks.length===0?(P(),S(`li`,xr,[v(`div`,Sr,[o(u,null,{default:U(()=>[o(B(D))]),_:1})]),v(`div`,Cr,F(B(q)(`@WORKBENCH:拆分任务,逐项执行`)),1),v(`div`,wr,F(B(q)(`@WORKBENCH:手动添加子任务,或让 AI 帮你自动拆分`)),1),v(`div`,Tr,[o(f,{type:`primary`,size:`small`,icon:B(I),onClick:qe},{default:U(()=>[w(F(B(q)(`@WORKBENCH:添加子任务`)),1)]),_:1},8,[`icon`]),v(`button`,{type:`button`,class:`wb-empty__link`,disabled:!E.value.title||!E.value.title.trim(),onClick:$e},F(B(q)(`@WORKBENCH:用 AI 自动拆分`)),9,Er)])])):r(``,!0)])],64)):(P(),S(`div`,Yn,[v(`p`,null,F(B(q)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])):(P(),K(nn,{key:1})),o(C,{modelValue:V.visible,"onUpdate:modelValue":l[15]||=e=>V.visible=e,title:V.editing?B(q)(`@WORKBENCH:编辑提示词`):B(q)(`@WORKBENCH:新建提示词`),width:`640px`},{footer:U(()=>[o(f,{onClick:l[14]||=e=>V.visible=!1},{default:U(()=>[w(F(B(q)(`@WORKBENCH:取消`)),1)]),_:1}),o(f,{type:`primary`,onClick:Ve},{default:U(()=>[w(F(B(q)(`@WORKBENCH:保存`)),1)]),_:1})]),default:U(()=>[o(y,{"label-position":`top`},{default:U(()=>[o(_,{label:B(q)(`@WORKBENCH:名称`)},{default:U(()=>[o(h,{modelValue:V.name,"onUpdate:modelValue":l[12]||=e=>V.name=e,placeholder:B(q)(`@WORKBENCH:如:代码审查 / 写测试`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),o(_,null,{default:U(()=>[v(`div`,Dr,[o(f,{type:`primary`,plain:``,loading:V.aiLoading,onClick:Le},{default:U(()=>[w(F(B(q)(`@WORKBENCH:AI 生成项目架构说明`)),1)]),_:1},8,[`loading`]),o(f,{onClick:ze},{default:U(()=>[w(F(B(q)(`@WORKBENCH:编辑指令`)),1)]),_:1})])]),_:1}),o(_,{label:B(q)(`@WORKBENCH:内容`)},{default:U(()=>[o(h,{modelValue:V.content,"onUpdate:modelValue":l[13]||=e=>V.content=e,type:`textarea`,rows:10,placeholder:B(q)(`@WORKBENCH:可用变量:`)+`{{task.title}} {{task.desc}} {{sub.title}} {{sub.desc}} {{repo.path}} {{branch}}`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),o(C,{modelValue:H.visible,"onUpdate:modelValue":l[18]||=e=>H.visible=e,title:B(q)(`@WORKBENCH:编辑生成指令`),width:`720px`,"append-to-body":``},{footer:U(()=>[o(f,{onClick:l[17]||=e=>H.visible=!1},{default:U(()=>[w(F(B(q)(`@WORKBENCH:取消`)),1)]),_:1}),o(f,{type:`primary`,loading:H.saving,onClick:Be},{default:U(()=>[w(F(B(q)(`@WORKBENCH:保存`)),1)]),_:1},8,[`loading`])]),default:U(()=>[o(y,{"label-position":`top`},{default:U(()=>[o(_,{label:B(q)(`@WORKBENCH:指令内容`)},{default:U(()=>[o(h,{modelValue:H.text,"onUpdate:modelValue":l[16]||=e=>H.text=e,type:`textarea`,rows:18,placeholder:B(q)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),o(C,{modelValue:W.visible,"onUpdate:modelValue":l[23]||=e=>W.visible=e,title:W.editing?B(q)(`@WORKBENCH:编辑任务`):B(q)(`@WORKBENCH:新建任务`),width:`560px`},{footer:U(()=>[o(f,{onClick:l[22]||=e=>W.visible=!1},{default:U(()=>[w(F(B(q)(`@WORKBENCH:取消`)),1)]),_:1}),o(f,{type:`primary`,onClick:We},{default:U(()=>[w(F(B(q)(`@WORKBENCH:保存`)),1)]),_:1})]),default:U(()=>[o(y,{"label-position":`top`},{default:U(()=>[o(_,{label:B(q)(`@WORKBENCH:标题`)},{default:U(()=>[o(h,{modelValue:W.title,"onUpdate:modelValue":l[19]||=e=>W.title=e},null,8,[`modelValue`])]),_:1},8,[`label`]),o(_,{label:B(q)(`@WORKBENCH:描述`)},{default:U(()=>[o(h,{modelValue:W.desc,"onUpdate:modelValue":l[20]||=e=>W.desc=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1},8,[`label`]),o(_,{label:B(q)(`@WORKBENCH:预置提示词`)},{default:U(()=>[o(k,{modelValue:W.promptId,"onUpdate:modelValue":l[21]||=e=>W.promptId=e,clearable:``,placeholder:B(q)(`@WORKBENCH:不绑定`),style:{width:`100%`}},{default:U(()=>[(P(!0),S(g,null,z(a.value,e=>(P(),K(O,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),E.value?(P(),K(Re,{key:2,modelValue:Ze.value,"onUpdate:modelValue":l[24]||=e=>Ze.value=e,title:E.value.title,desc:E.value.desc,"task-id":E.value.id,"prompt-id":E.value.promptId,onConfirm:et},null,8,[`modelValue`,`title`,`desc`,`task-id`,`prompt-id`])):r(``,!0)])}}}),[[`__scopeId`,`data-v-a21f7fe3`]]);export{jr as default};