zen-gitsync 2.13.1 → 2.13.3
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 +1 -1
- package/src/ui/public/assets/EditorView-9Q0gSlr6.js +0 -0
- package/src/ui/public/assets/SourceMapView-Dxmg8KPB.js +3 -0
- package/src/ui/public/assets/WorkbenchView-CYC_l23l.js +2 -0
- package/src/ui/public/assets/WorkbenchView-DauLIzog.css +1 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-CIzOKVnN.js → _plugin-vue_export-helper-K0RsuraF.js} +3 -3
- package/src/ui/public/assets/index-CGnU7zDA.js +66 -0
- package/src/ui/public/assets/{vendor-BfQR1Ql2.js → vendor-vsQ98rZk.js} +240 -240
- package/src/ui/public/index.html +3 -3
- package/src/ui/server/routes/workbench.js +1702 -1179
- package/src/ui/public/assets/EditorView-BbyNq-0-.js +0 -0
- package/src/ui/public/assets/SourceMapView-CEDJofhr.js +0 -3
- package/src/ui/public/assets/WorkbenchView-DEbOy4sA.js +0 -1
- package/src/ui/public/assets/WorkbenchView-DRh-K9ZG.css +0 -1
- package/src/ui/public/assets/index-DNP2rwmI.js +0 -66
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zen-gitsync",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.3",
|
|
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",
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{En as t,Fn as n,Gn as r,Jn as i,Kn as a,Ln as o,Mn as s,On as c,P as ee,Pn as l,Rn as u,Tn as d,Vn as f,Wn as p,Xn as m,_ as te,ar as h,c as g,cr as _,d as ne,er as re,f as ie,g as ae,gt as oe,h as se,jn as v,lr as y,m as ce,nr as b,or as le,p as ue,sr as x,t as de,tr as S,ur as C,v as fe,wn as pe,y as me,zn as w}from"./vendor-vsQ98rZk.js";import{n as T,t as E}from"./_plugin-vue_export-helper-K0RsuraF.js";import{a as he,r as ge}from"./index-CGnU7zDA.js";var _e=e(ne(),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(f({__name:`SourceMapView`,setup(e){let f=h(document.documentElement.getAttribute(`data-theme`)===`dark`?`dark`:`light`);function ne(){f.value=document.documentElement.getAttribute(`data-theme`)===`dark`?`dark`:`light`}let E=null,D=he(),O=h(D.currentDirectory||``),k=h(`idle`),A=h([]),_t=0,j=h(null),M=h(null),N=h(`files`),P=h(``),F=h(``),I=h(!1),L=h([]),R=h(new Set),z=h({files:!0,graph:!0,source:!0}),B=h(!1),V=h(220),H=h(360),U=h(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=h(null),X=le(null),{fitView:bt,setNodes:xt,setEdges:St,getNodes:Ct,getEdges:wt,updateNodeInternals:Tt}=me(),Z=v(()=>k.value===`scanning`||k.value===`analyzing`),Et=v(()=>f.value===`dark`?`#334155`:`#cbd5e1`),Q=v(()=>j.value?.nodes.find(e=>e.id===M.value)??null),Dt=v(()=>{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=g.create(Y.value,{value:``,language:`plaintext`,theme:f.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}}))}re(f,e=>{X.value&&g.setTheme(e===`dark`?`vs-dark`:`vs`)});function Nt(e,t){let n={};t.forEach(e=>{n[e.source]||(n[e.source]=[]),n[e.source].push(e.target)});let r=new Map;e.forEach(e=>{let t=e.subsystem??`__default`;r.has(t)||r.set(t,[]),r.get(t).push(e)});let i=[],a=0;for(let[,e]of r){let t=new Set(e.map(e=>e.id)),r={},o=e.length?[e[0].id]:[];for(o[0]&&(r[o[0]]=0);o.length;){let e=o.shift();(n[e]||[]).filter(e=>t.has(e)).forEach(t=>{r[t]===void 0&&(r[t]=(r[e]??0)+1,o.push(t))})}let s={};e.forEach(e=>{let t=r[e.id]??0;s[t]=(s[t]||0)+1});let c={};e.forEach(e=>{let t=r[e.id]??0;c[t]=(c[t]??-1)+1;let n=c[t],o=s[t]??1,ee=a*600+n*220-(o-1)*220/2,l=t*110,u=At(e);i.push({id:e.id,type:`default`,position:{x:ee,y:l},label:e.label,class:`sm-fn-node`,data:{...e,_accentColor:u},style:{"--node-accent":u}})}),a++}return{flowNodes:i,flowEdges:t.map((e,t)=>({id:`e_${t}_${e.source}_${e.target}`,source:e.source,target:e.target,type:`smoothstep`,animated:!1,class:`sm-fn-edge`,markerEnd:{type:se.ArrowClosed}}))}}async function Pt(){let e=Ct.value,t=wt.value;if(e.length!==0){B.value=!0;try{await p(),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 p(),bt({padding:.18})}finally{B.value=!1}}}async function Ft(){if(!O.value.trim()){ee.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),p(()=>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=v(()=>{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 re(()=>D.currentDirectory,e=>{e&&!O.value&&(O.value=e)}),re([P,F],([e,t])=>{let n=X.value;if(!n)return;let r=jt(t||``),i=n.getModel(),a=g.createModel(e||``,r);n.setModel(a),i?.dispose(),n.setScrollPosition({scrollTop:0,scrollLeft:0})}),a(()=>{Mt(),!O.value&&D.currentDirectory&&(O.value=D.currentDirectory),E=new MutationObserver(()=>ne()),E.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]})}),r(()=>{X.value?.getModel()?.dispose(),X.value?.dispose(),J(),E?.disconnect(),E=null}),(e,r)=>{let a=oe;return i(),n(`div`,ve,[s(`div`,ye,[s(`div`,be,[r[9]||=s(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,class:`sm-icon-map`},[s(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`}),s(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`}),s(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`})],-1),s(`span`,xe,C(x(T)(`@SRCMAP:源码地图`)),1)]),s(`div`,Se,[b(s(`input`,{"onUpdate:modelValue":r[0]||=e=>O.value=e,class:`sm-path-input`,placeholder:x(T)(`@SRCMAP:输入项目目录路径`),disabled:Z.value,onKeydown:t(Ft,[`enter`])},null,40,Ce),[[pe,O.value]]),s(`button`,{class:`sm-btn sm-btn-primary`,disabled:Z.value,onClick:Ft},[Z.value?(i(),n(c,{key:0},[r[10]||=s(`span`,{class:`sm-spinner`},null,-1),u(` `+C(x(T)(`@SRCMAP:分析中...`)),1)],64)):(i(),n(c,{key:1},[u(C(k.value===`done`?x(T)(`@SRCMAP:重新分析`):x(T)(`@SRCMAP:开始分析`)),1)],64))],8,we)]),s(`div`,Te,[w(a,{content:x(T)(`@SRCMAP:文件列表`),placement:`bottom`},{default:S(()=>[s(`button`,{class:_([`sm-panel-btn`,{active:z.value.files}]),onClick:r[1]||=e=>z.value.files=!z.value.files},[...r[11]||=[s(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[s(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`})],-1)]],2)]),_:1},8,[`content`]),w(a,{content:x(T)(`@SRCMAP:调用图`),placement:`bottom`},{default:S(()=>[s(`button`,{class:_([`sm-panel-btn`,{active:z.value.graph}]),onClick:r[2]||=e=>z.value.graph=!z.value.graph},[...r[12]||=[s(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[s(`circle`,{cx:`12`,cy:`12`,r:`3`}),s(`circle`,{cx:`3`,cy:`6`,r:`2`}),s(`circle`,{cx:`21`,cy:`6`,r:`2`}),s(`circle`,{cx:`3`,cy:`18`,r:`2`}),s(`circle`,{cx:`21`,cy:`18`,r:`2`}),s(`line`,{x1:`5`,y1:`6`,x2:`9`,y2:`11`}),s(`line`,{x1:`19`,y1:`6`,x2:`15`,y2:`11`}),s(`line`,{x1:`5`,y1:`18`,x2:`9`,y2:`13`}),s(`line`,{x1:`19`,y1:`18`,x2:`15`,y2:`13`})],-1)]],2)]),_:1},8,[`content`]),w(a,{content:x(T)(`@SRCMAP:源码面板`),placement:`bottom`},{default:S(()=>[s(`button`,{class:_([`sm-panel-btn`,{active:z.value.source}]),onClick:r[3]||=e=>z.value.source=!z.value.source},[...r[13]||=[s(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[s(`polyline`,{points:`16 18 22 12 16 6`}),s(`polyline`,{points:`8 6 2 12 8 18`})],-1)]],2)]),_:1},8,[`content`])])]),s(`div`,Ee,[b(s(`div`,{class:`sm-panel sm-panel-files`,style:y({width:V.value+`px`})},[s(`div`,De,[s(`button`,{class:_([`sm-tab-btn`,{active:N.value===`files`}]),onClick:r[4]||=e=>N.value=`files`},[r[14]||=s(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[s(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`})],-1),u(` `+C(x(T)(`@SRCMAP:文件列表`))+` `,1),j.value?(i(),n(`span`,Oe,C(j.value.allFiles.length),1)):l(``,!0)],2),s(`button`,{class:_([`sm-tab-btn`,{active:N.value===`outline`}]),onClick:r[5]||=e=>N.value=`outline`},[r[15]||=o(`<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),u(` `+C(x(T)(`@SRCMAP:大纲`)),1)],2)]),b(s(`div`,ke,[Bt.value.length>0?(i(!0),n(c,{key:0},m(Bt.value,e=>(i(),n(`div`,{key:e.path,class:_([`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`?(i(),n(`span`,{key:0,class:_([`sm-tree-arrow`,{expanded:e.expanded}])},[...r[16]||=[s(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[s(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(i(),n(`span`,je)),e.kind===`dir`?(i(),n(`svg`,Me,[s(`use`,{"xlink:href":`#${x(ge)(e.name)||`icon-folder`}`},null,8,Ne)])):(i(),n(`svg`,Pe,[s(`use`,{"xlink:href":`#${x(ge)(e.name)}`},null,8,Fe)])),s(`span`,{class:`sm-tree-name`,title:e.path},C(e.name),9,Ie)],14,Ae))),128)):(i(),n(`div`,Le,C(x(T)(`@SRCMAP:暂无文件,请先开始分析`)),1))],512),[[d,N.value===`files`]]),b(s(`div`,Re,[Dt.value.length>0?(i(!0),n(c,{key:0},m(Dt.value,e=>(i(),n(`div`,{key:e.displayName,class:`sm-outline-group`},[s(`div`,{class:`sm-outline-group-header`,style:y({color:e.color})},[r[17]||=s(`svg`,{viewBox:`0 0 24 24`,width:`8`,height:`8`,fill:`currentColor`},[s(`circle`,{cx:`12`,cy:`12`,r:`6`})],-1),u(` `+C(e.displayName)+` `,1),s(`span`,ze,C(e.nodes.length),1)],4),(i(!0),n(c,null,m(e.nodes,t=>(i(),n(`div`,{key:t.id,class:_([`sm-outline-node`,{"sm-outline-node--active":M.value===t.id}]),onClick:e=>{M.value=t.id,t.file&&Lt(t.file)}},[s(`span`,{class:`sm-outline-dot`,style:y({background:e.color})},null,4),s(`span`,{class:`sm-outline-label`,title:t.file||t.label},C(t.label),9,Ve),t.description?(i(),n(`span`,He,C(t.description.length>18?t.description.slice(0,18)+`…`:t.description),1)):l(``,!0)],10,Be))),128))]))),128)):(i(),n(`div`,Ue,C(x(T)(`@SRCMAP:暂无分析结果`)),1))],512),[[d,N.value===`outline`]])],4),[[d,z.value.files]]),b(s(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:r[6]||=e=>q(`files`,e)},null,544),[[d,z.value.files&&z.value.graph]]),b(s(`div`,We,[j.value?(i(),n(`div`,Ge,[s(`span`,Ke,C(j.value.language),1),j.value.subsystems&&j.value.subsystems.length>1?(i(!0),n(c,{key:0},m(j.value.subsystems,e=>(i(),n(`span`,{key:e.name,class:`sm-subsystem-tag`,style:y({borderColor:e.color,color:e.color})},`● `+C(e.displayName||e.name),5))),128)):(i(!0),n(c,{key:1},m(j.value.techStack.slice(0,4),e=>(i(),n(`span`,{key:e,class:`sm-tech-tag`},C(e),1))),128)),s(`span`,qe,C(j.value.summary),1)])):l(``,!0),s(`div`,Je,[s(`div`,Ye,[s(`button`,{class:`sm-layout-btn`,disabled:B.value||!j.value,onClick:Pt},[r[18]||=o(`<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),u(` `+C(B.value?x(T)(`@SRCMAP:布局中...`):x(T)(`@SRCMAP:优化布局`)),1)],8,Xe)]),w(x(te),{class:`sm-vue-flow`,"default-viewport":{zoom:1},"min-zoom":.2,"max-zoom":4,"fit-view-on-init":``,onNodeClick:Rt},{"node-default":S(({data:e,label:t})=>[w(x(fe),{type:`target`,position:x(ae).Top},null,8,[`position`]),s(`div`,{class:`sm-fn-inner`,title:`${t}${e?.description?`
|
|
3
|
+
`+e.description:``}`},[s(`div`,Qe,C(t),1),e?.description?(i(),n(`div`,$e,C(e.description.length>22?e.description.slice(0,22)+`…`:e.description),1)):l(``,!0)],8,Ze),w(x(fe),{type:`source`,position:x(ae).Bottom},null,8,[`position`])]),default:S(()=>[w(x(ce),{variant:x(ue).Dots,gap:20,size:1,"pattern-color":Et.value},null,8,[`variant`,`pattern-color`]),w(x(ie)),w(x(de),{"node-color":`#3b82f6`,"mask-color":f.value===`dark`?`rgba(0,0,0,0.55)`:`rgba(15,23,42,0.06)`},null,8,[`mask-color`])]),_:1}),!j.value&&!Z.value?(i(),n(`div`,et,[(i(),n(`svg`,tt,[...r[19]||=[s(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`},null,-1),s(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`},null,-1),s(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`},null,-1)]])),s(`p`,null,C(x(T)(`@SRCMAP:输入项目路径后点击开始分析`)),1)])):l(``,!0),Z.value&&!j.value?(i(),n(`div`,nt,[r[20]||=s(`span`,{class:`sm-spinner sm-spinner-lg`},null,-1),s(`p`,null,C(x(T)(`@SRCMAP:AI 正在分析项目结构...`)),1)])):l(``,!0)]),s(`div`,{class:`sm-resizer sm-resizer-h`,onMousedown:r[7]||=e=>q(`log`,e)},null,32),s(`div`,{class:`sm-log-panel`,style:y({height:U.value+`px`})},[s(`div`,rt,[r[21]||=s(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[s(`polyline`,{points:`4 17 10 11 4 5`}),s(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})],-1),u(` `+C(x(T)(`@SRCMAP:Agent 日志`))+` `,1),Z.value?(i(),n(`span`,it)):l(``,!0)]),s(`div`,at,[(i(!0),n(c,null,m(A.value.slice(-50),e=>(i(),n(`div`,{key:e.id,class:_([`sm-log-entry`,`sm-log-entry--${e.type}`])},C(e.message),3))),128)),A.value.length===0?(i(),n(`div`,ot,C(x(T)(`@SRCMAP:等待开始分析`)),1)):l(``,!0)],512)],4)],512),[[d,z.value.graph]]),b(s(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:r[8]||=e=>q(`source`,e)},null,544),[[d,z.value.graph&&z.value.source]]),b(s(`div`,{class:`sm-panel sm-panel-source`,style:y({width:H.value+`px`})},[s(`div`,st,[r[22]||=s(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[s(`polyline`,{points:`16 18 22 12 16 6`}),s(`polyline`,{points:`8 6 2 12 8 18`})],-1),u(` `+C(F.value||x(T)(`@SRCMAP:源码面板`))+` `,1),Q.value?(i(),n(`span`,ct,C(Q.value.label),1)):l(``,!0)]),Q.value?(i(),n(`div`,lt,[s(`div`,ut,C(Q.value.label),1),s(`div`,dt,[u(C(Q.value.file),1),Q.value.line?(i(),n(`span`,ft,` :`+C(Q.value.line),1)):l(``,!0)]),Q.value.description?(i(),n(`div`,pt,C(Q.value.description),1)):l(``,!0)])):l(``,!0),s(`div`,mt,[I.value?(i(),n(`div`,ht,[...r[23]||=[s(`span`,{class:`sm-spinner`},null,-1)]])):l(``,!0),!I.value&&!P.value?(i(),n(`div`,gt,C(x(T)(`@SRCMAP:点击调用图中的节点查看源码`)),1)):l(``,!0),s(`div`,{ref_key:`monacoContainerRef`,ref:Y,class:`sm-monaco-container`},null,512)])],4),[[d,z.value.source]])])])}}}),[[`__scopeId`,`data-v-71d3569e`]]);export{D as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./rolldown-runtime-CMxvf4Kt.js";import{An as e,B as t,Cn as n,Dn as r,Et as i,Fn as a,Gn as o,J as s,Jn as c,Kn as l,Mn as u,N as d,Nn as f,On as p,P as m,Pn as h,Rn as g,V as _,Vn as v,Wn as y,Xn as b,_t as x,ar as S,bt as ee,cr as C,ct as w,dt as te,er as T,et as ne,ht as re,ir as E,jn as D,lr as O,lt as k,nr as A,qt as ie,sr as j,tr as M,ur as N,vt as ae,wn as P,zn as F}from"./vendor-vsQ98rZk.js";import{n as I,t as L}from"./_plugin-vue_export-helper-K0RsuraF.js";import{t as oe}from"./index-CGnU7zDA.js";var se={key:0,class:`ai-split-status`},R={key:1,class:`ai-split-status is-error`},z={class:`ai-split-prompt-actions`},B={key:0,class:`ai-split-prompt-editor`},V={class:`ai-split-prompt-editor__actions`},ce={key:1,class:`ai-split-pre`},H={class:`ai-split-subhead`},U={class:`ai-split-pre`},le={key:0,class:`ai-split-tab-count`},ue={class:`ai-split-pre ai-split-pre--think`},W={key:0,class:`ai-split-tab-count`},de={class:`ai-split-pre`},fe={key:0,class:`ai-split-tab-count`},pe={key:0,class:`ai-split-empty`},me={key:1,class:`ai-split-list`},he={class:`ai-split-list__no`},ge={class:`ai-split-list__body`},_e={class:`ai-split-list__title`},ve={class:`ai-split-list__desc`},ye=L(v({__name:`AISplitDialog`,props:{modelValue:{type:Boolean},title:{},desc:{},taskId:{},promptId:{}},emits:[`update:modelValue`,`confirm`],setup(e,{emit:n}){let r=e,o=n,s=S(`idle`),l=S(`prompt`),d=S(``),v=S(``),y=S(``),x=S(``),C=S(``),w=S([]),E=S(``),O=null,k=0,A=D(()=>y.value.length),ae=D(()=>x.value.length),P=D(()=>s.value===`result`&&w.value.length>0),L=D(()=>s.value===`running`);function oe(){ye(),o(`update:modelValue`,!1)}function ye(){O&&=(O.abort(),null)}function be(){ye(),s.value=`idle`,l.value=`prompt`,d.value=``,v.value=``,y.value=``,x.value=``,C.value=``,w.value=[],E.value=``}async function G(){if(!r.title.trim()){m.warning(I(`@WORKBENCH:请先填写任务标题`));return}be();let e=++k;s.value=`running`,l.value=`thinking`,O=new AbortController;let t=O;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:r.title,desc:r.desc,taskId:r.taskId||``,promptId:r.promptId||``}),signal:t.signal});if(e!==k)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let i=n.body.getReader(),a=new TextDecoder(`utf-8`),o=``,c=null;for(;;){let{value:t,done:n}=await i.read();if(e!==k)return;if(n)break;o+=a.decode(t,{stream:!0});let r=o.split(`
|
|
2
|
+
`);o=r.pop()??``;for(let e of r){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`:d.value=r.prompt?.system||``,v.value=r.prompt?.user||``;break;case`thinking`:y.value+=String(r.delta||``);break;case`content`:x.value+=String(r.delta||``);break;case`done`:c=r;break;case`error`:throw Error(r.error||`AI 拆分失败`)}}}if(e!==k)return;if(!c)throw Error(I(`@WORKBENCH:AI 未返回结果`));w.value=Array.isArray(c.subtasks)?c.subtasks:[],C.value=c.raw||x.value,y.value||=I(`@WORKBENCH:(当前模型未返回独立的思考内容,可切换到「原始结果」查看完整输出)`),s.value=`result`,l.value=w.value.length>0?`confirm`:`raw`}catch(n){if(console.log(`[AI Split] catch err:`,{name:n?.name,msg:n?.message,aborted:t.signal.aborted,nonce:{mine:e,cur:k}}),e!==k||n?.name===`AbortError`||t.signal.aborted)return;s.value=`error`,E.value=n?.message||String(n)}finally{e===k&&(O=null)}}function xe(){P.value&&(o(`confirm`,w.value.slice()),o(`update:modelValue`,!1))}function K(){G()}T(()=>r.modelValue,e=>{e&&s.value===`idle`&&G()});let q=S(!1),J=S(``),Y=S(!1);function X(){J.value=d.value,q.value=!0}async function Se(){if(!J.value.trim()){m.warning(I(`@WORKBENCH:指令内容不能为空`));return}Y.value=!0;try{let e=await fetch(`/api/workbench/tasks/ai-subtask-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:J.value})}).then(e=>e.json());e.success?(m.success(I(`@WORKBENCH:已保存指令`)),q.value=!1,K()):m.error(e.error||I(`@WORKBENCH:保存失败`))}catch(e){m.error(I(`@WORKBENCH:保存失败: `)+(e?.message||e))}finally{Y.value=!1}}function Z(){q.value=!1}return(n,r)=>{let m=ee,S=te,C=re,T=t,D=_,O=ne;return c(),f(O,{"model-value":e.modelValue,"onUpdate:modelValue":r[2]||=e=>o(`update:modelValue`,e),title:j(I)(`@WORKBENCH:AI 拆分任务`),width:`800px`,"close-on-click-modal":!1,"close-on-press-escape":!L.value,"show-close":!L.value,onClose:oe},{footer:M(()=>[s.value===`error`?(c(),f(S,{key:0,onClick:K},{default:M(()=>[g(N(j(I)(`@WORKBENCH:重新生成`)),1)]),_:1})):h(``,!0),F(S,{onClick:oe},{default:M(()=>[g(N(j(I)(`@WORKBENCH:取消`)),1)]),_:1}),F(S,{type:`primary`,disabled:!P.value,onClick:xe},{default:M(()=>[g(N(j(I)(`@WORKBENCH:确认入库`))+` (`+N(w.value.length)+`) `,1)]),_:1},8,[`disabled`])]),default:M(()=>[L.value?(c(),a(`div`,se,[F(m,{class:`is-loading`},{default:M(()=>[F(j(ie))]),_:1}),u(`span`,null,N(j(I)(`@WORKBENCH:AI 正在拆分…`)),1)])):s.value===`error`?(c(),a(`div`,R,[F(m,{color:`#f56c6c`},{default:M(()=>[F(j(i))]),_:1}),u(`span`,null,N(E.value),1)])):h(``,!0),F(D,{modelValue:l.value,"onUpdate:modelValue":r[1]||=e=>l.value=e,class:`ai-split-tabs`},{default:M(()=>[F(T,{label:j(I)(`@WORKBENCH:提示词`),name:`prompt`},{default:M(()=>[u(`div`,z,[F(S,{size:`small`,disabled:L.value,onClick:X},{default:M(()=>[g(N(j(I)(`@WORKBENCH:编辑指令`)),1)]),_:1},8,[`disabled`])]),q.value?(c(),a(`div`,B,[F(C,{modelValue:J.value,"onUpdate:modelValue":r[0]||=e=>J.value=e,type:`textarea`,rows:12,placeholder:j(I)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`]),u(`div`,V,[F(S,{size:`small`,onClick:Z},{default:M(()=>[g(N(j(I)(`@WORKBENCH:取消`)),1)]),_:1}),F(S,{size:`small`,type:`primary`,loading:Y.value,onClick:Se},{default:M(()=>[g(N(j(I)(`@WORKBENCH:保存并重跑`)),1)]),_:1},8,[`loading`])])])):(c(),a(`pre`,ce,N(d.value||`(等待 LLM 启动…)`),1)),u(`h4`,H,N(j(I)(`@WORKBENCH:用户提示词(拼装后)`)),1),u(`pre`,U,N(v.value||`(等待 LLM 启动…)`),1)]),_:1},8,[`label`]),F(T,{name:`thinking`},{label:M(()=>[u(`span`,null,[g(N(j(I)(`@WORKBENCH:思考`))+` `,1),A.value>0?(c(),a(`span`,le,`(`+N(A.value)+`)`,1)):h(``,!0)])]),default:M(()=>[u(`pre`,ue,N(y.value||j(I)(`@WORKBENCH:(暂无输出)`)),1)]),_:1}),F(T,{name:`raw`},{label:M(()=>[u(`span`,null,[g(N(j(I)(`@WORKBENCH:原始结果`))+` `,1),ae.value>0?(c(),a(`span`,W,`(`+N(ae.value)+`)`,1)):h(``,!0)])]),default:M(()=>[u(`pre`,de,N(x.value||j(I)(`@WORKBENCH:(暂无输出)`)),1)]),_:1}),F(T,{name:`confirm`,disabled:w.value.length===0},{label:M(()=>[u(`span`,null,[g(N(j(I)(`@WORKBENCH:确认入库`))+` `,1),w.value.length>0?(c(),a(`span`,fe,`(`+N(w.value.length)+`)`,1)):h(``,!0)])]),default:M(()=>[w.value.length===0?(c(),a(`div`,pe,N(j(I)(`@WORKBENCH:(暂无子任务)`)),1)):(c(),a(`ul`,me,[(c(!0),a(p,null,b(w.value,(e,t)=>(c(),a(`li`,{key:t,class:`ai-split-list__item`},[u(`div`,he,N(t+1),1),u(`div`,ge,[u(`div`,_e,N(e.title),1),u(`div`,ve,N(e.desc),1)])]))),128))]))]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`])]),_:1},8,[`model-value`,`title`,`close-on-press-escape`,`show-close`])}}}),[[`__scopeId`,`data-v-15311727`]]),be={class:`wb-attachments__head`},G={class:`wb-attachments__label`},xe={class:`wb-attachments__count`},K=[`disabled`],q={key:0,class:`wb-attachments__paste-hint`},J={key:1,class:`wb-attachments__list`},Y=[`title`,`onClick`],X=[`src`,`alt`],Se={key:1},Z={class:`wb-attachment__meta`},Ce=[`title`],we={class:`wb-attachment__sub`},Te=[`onClick`,`title`],Ee=v({__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(t,{emit:n}){let i=t,o=n,l=D(()=>i.attachments.filter(e=>i.isImage(e))),d=D(()=>l.value.map(e=>`/api/workbench/attachments/${e.id}/raw`)),m=S(0),_=S(!1);function v(e){if(i.isImage(e)){let t=l.value.findIndex(t=>t.id===e.id);m.value=t>=0?t:0,_.value=!0}else window.open(`/api/workbench/attachments/${e.id}/raw`,`_blank`,`noopener`)}function y(){_.value=!1}return(n,i)=>(c(),a(p,null,[u(`div`,{class:C([`wb-attachments`,{"is-paste-hover":t.isPasteHover}]),onPaste:i[1]||=e=>o(`paste`,e),onDrop:i[2]||=r(e=>o(`drop`,e),[`prevent`]),onDragover:i[3]||=r(e=>o(`dragover`,e),[`prevent`]),onDragenter:i[4]||=r(e=>o(`dragenter`,e),[`prevent`]),onDragleave:i[5]||=e=>o(`dragleave`,e)},[u(`div`,be,[u(`span`,G,[g(N(j(I)(`@WORKBENCH:附件`))+` `,1),u(`span`,xe,N(t.attachments.length)+` / `+N(t.maxCount),1)]),u(`button`,{class:`wb-attachments__add`,disabled:t.isUploading||t.attachments.length>=t.maxCount,onClick:i[0]||=(...e)=>t.onPick&&t.onPick(...e)},N(t.isUploading?j(I)(`@WORKBENCH:上传中…`):j(I)(`@WORKBENCH:添加附件`)),9,K)]),t.isPasteHover?(c(),a(`div`,q,N(j(I)(`@WORKBENCH:粘贴图片以快速添加`)),1)):h(``,!0),t.attachments.length>0?(c(),a(`ul`,J,[(c(!0),a(p,null,b(t.attachments,e=>(c(),a(`li`,{key:e.id,class:`wb-attachment`},[u(`button`,{type:`button`,class:`wb-attachment__preview`,title:j(I)(`@WORKBENCH:点击预览`),onClick:t=>v(e)},[u(`div`,{class:C([`wb-attachment__icon`,{"wb-attachment__icon--img":t.isImage(e)}])},[t.isImage(e)?(c(),a(`img`,{key:0,src:`/api/workbench/attachments/${e.id}/raw`,alt:e.originalName,loading:`lazy`},null,8,X)):(c(),a(`span`,Se,N(e.ext.toUpperCase()),1))],2),u(`div`,Z,[u(`div`,{class:`wb-attachment__name`,title:e.originalName},N(e.originalName),9,Ce),u(`div`,we,N(t.humanSize(e.size))+` · `+N(e.mimeType),1)])],8,Y),u(`button`,{class:`wb-attachment__del`,onClick:r(n=>t.onRemove(e),[`stop`]),title:j(I)(`@WORKBENCH:删除`)},`×`,8,Te)]))),128))])):h(``,!0)],34),(c(),f(e,{to:`body`},[_.value&&d.value.length>0?(c(),f(j(s),{key:0,"url-list":d.value,"initial-index":m.value,"hide-on-click-modal":!0,onClose:y},null,8,[`url-list`,`initial-index`])):h(``,!0)]))],64))}}),De={class:`workbench`},Oe={class:`wb-sidebar`},ke={class:`wb-sidebar__header`},Ae={class:`wb-task-list`},je=[`onClick`],Me={class:`wb-task-item__title`},Ne={class:`wb-task-item__meta`},Pe=[`onClick`,`title`],Fe={key:0,class:`wb-empty`},Ie={class:`wb-sidebar__header`},Le={class:`wb-prompt-list`},Re=[`onClick`,`title`],ze=[`onClick`],Be={key:0,class:`wb-empty`},Ve={class:`wb-split`},He={key:0,class:`wb-placeholder`},Ue={class:`wb-split__header`},We=[`placeholder`],Ge={value:null},Ke=[`value`],qe=[`placeholder`],Je={class:`wb-split__sub-header`},Ye={key:0,class:`wb-dirty-badge`},Xe={class:`wb-sub-list`},Ze={class:`wb-sub-item__row`},Qe=[`onUpdate:modelValue`,`placeholder`,`onPaste`],$e=[`title`],et=[`title`],tt=[`title`,`onClick`],nt=[`onClick`],rt=[`onUpdate:modelValue`,`placeholder`,`onPaste`],it=[`open`],at={class:`wb-log-summary`},ot={key:0},st={key:1},ct={key:2},lt={class:`wb-log-summary__meta`},ut={key:0,class:`wb-log-section`},dt={class:`wb-log-section__summary`},ft={class:`wb-log-section__tag wb-log-section__tag--user`},pt={class:`wb-log-section__count`},mt={class:`wb-log-section__pre wb-log-section__pre--user`},ht={key:1,class:`wb-log-section`},gt={class:`wb-log-section__summary`},_t={class:`wb-log-section__tag wb-log-section__tag--think`},vt={class:`wb-log-section__count`},yt={class:`wb-log-section__pre wb-log-section__pre--think`},bt={key:0,class:`wb-empty`},xt={style:{display:`flex`,gap:`8px`,"align-items":`center`}},St=64*1024,Ct=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,wt=5*1024*1024,Tt=L(v({__name:`WorkbenchView`,setup(e){let t=S([]),i=S([]),s=S([]),_=S(null),v=D(()=>i.value.find(e=>e.id===_.value)||null),ee=S(new Map);function ie(){let e=new Map;if(v.value)for(let t of v.value.subtasks)e.set(t.id,{id:t.id,title:t.title,desc:t.desc,promptOverride:t.promptOverride});ee.value=e}let L=D(()=>{let e=new Set;if(!v.value)return e;for(let t of v.value.subtasks){let n=ee.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=D(()=>L.value.size>0),R=E({visible:!1,editing:null,name:``,content:``,aiLoading:!1}),z=E({visible:!1,text:``,loading:!1,saving:!1}),B=E({visible:!1,editing:null,title:``,desc:``,promptId:null}),V=null,ce=oe();function H(){ce.setRunning(s.value.filter(e=>e.status===`running`).length)}function U(e){return s.value.find(t=>t.subId===e)||null}function le(e,t){if(e===`hello`){s.value=t.jobs||[],H();return}if(e===`job:update`){let e=t,n=s.value.findIndex(t=>t.id===e.id);n>=0?s.value[n]=e:s.value.push(e),H()}if(e===`sub:update`){let e=i.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=i.value.findIndex(e=>e.id===t.id);e>=0&&(i.value[e]=t)}e===`task:error`&&m.error(t.error||I(`@WORKBENCH:执行出错`))}async function ue(){t.value=(await fetch(`/api/workbench/prompts`).then(e=>e.json()).catch(()=>({prompts:[]}))).prompts||[]}async function W(){i.value=(await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}))).tasks||[],!_.value&&i.value.length>0&&(_.value=i.value[0].id),ie()}async function de(){s.value=(await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}))).jobs||[],H()}function fe(){V&&=(V.close(),null),V=new EventSource(`/api/workbench/events`),V.onmessage=e=>{try{let t=JSON.parse(e.data);le(t.event,t.payload)}catch{}},V.onerror=()=>{V&&=(V.close(),null),setTimeout(fe,3e3)}}function pe(){R.editing=null,R.name=``,R.content=``,R.aiLoading=!1,R.visible=!0}function me(e){R.editing=e,R.name=e.name,R.content=e.content,R.aiLoading=!1,R.visible=!0}async function he(){if(!R.aiLoading){R.aiLoading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-generate`,{method:`POST`}).then(e=>e.json());e.success?(R.name=e.name||R.name,R.content=e.result||``,m.success(I(`@WORKBENCH:已生成,可继续编辑`))):m.error(e.error||I(`@WORKBENCH:生成失败`))}catch(e){m.error(I(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{R.aiLoading=!1}}}async function ge(){z.visible=!0,z.loading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`).then(e=>e.json());e.success?z.text=e.instruction||``:m.error(e.error||I(`@WORKBENCH:读取指令失败`))}catch(e){m.error(I(`@WORKBENCH:读取指令失败`)+`: `+(e&&e.message||e))}finally{z.loading=!1}}async function _e(){if(!z.text.trim()){m.warning(I(`@WORKBENCH:指令内容不能为空`));return}z.saving=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:z.text})}).then(e=>e.json());e.success?(m.success(I(`@WORKBENCH:已保存指令`)),z.visible=!1):m.error(e.error||I(`@WORKBENCH:保存失败`))}catch(e){m.error(I(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{z.saving=!1}}async function ve(){if(!R.name.trim()||!R.content.trim()){m.warning(I(`@WORKBENCH:名称和内容不能为空`));return}let e={id:R.editing?.id,name:R.name.trim(),content:R.content},t=await fetch(`/api/workbench/prompts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(m.success(I(`@WORKBENCH:已保存`)),R.visible=!1,ue()):m.error(t.error||I(`@WORKBENCH:保存失败`))}async function be(e){await d.confirm(I(`@WORKBENCH:删除提示词「{name}」?`,{name:e.name}),I(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/prompts/${e.id}`,{method:`DELETE`}),ue();for(let t of i.value)t.promptId===e.id&&(t.promptId=null,await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}));W()}function G(){B.editing=null,B.title=``,B.desc=``,B.promptId=null,B.visible=!0}async function xe(){if(!B.title.trim()){m.warning(I(`@WORKBENCH:标题必填`));return}let e={id:B.editing?.id,title:B.title.trim(),desc:B.desc,promptId:B.promptId,subtasks:B.editing?.subtasks||[]},t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(m.success(I(`@WORKBENCH:已保存`)),B.visible=!1,W(),_.value||=t.task.id):m.error(t.error||I(`@WORKBENCH:保存失败`))}async function K(e){await d.confirm(I(`@WORKBENCH:删除任务「{title}」及其所有子任务?`,{title:e.title}),I(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),_.value===e.id&&(_.value=null),W()}function q(e){_.value!==e.id&&(_.value=e.id,ie())}function J(){if(!v.value)return;let e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:I(`@WORKBENCH:新子任务`),desc:``,status:`todo`,promptOverride:``};v.value.subtasks.push(e),X(!1)}function Y(e){v.value&&(v.value.subtasks=v.value.subtasks.filter(t=>t.id!==e.id),X(!1))}async function X(e){if(!v.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(v.value)}).then(e=>e.json());return t.success?(e&&m.success(I(`@WORKBENCH:已保存拆分`)),await W(),!0):(m.error(t.error||I(`@WORKBENCH:保存失败`)),!1)}async function Se(){await X(!0)}let Z=S(!1);function Ce(){if(v.value){if(!(v.value.title||``).trim()){m.warning(I(`@WORKBENCH:请先填写任务标题`));return}Z.value=!0}}function we(e){if(v.value){for(let t of e)v.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:[]});m.success(I(`@WORKBENCH:已生成 {n} 个子任务,请审阅后保存`,{n:e.length}))}}async function Te(e){if(!e.subtasks||e.subtasks.length===0){m.warning(I(`@WORKBENCH:请先拆分任务`));return}if(v.value&&v.value.id===e.id){let t=i.value.find(t=>t.id===e.id);if((!t||t.title!==v.value.title||t.desc!==v.value.desc||JSON.stringify(t.subtasks)!==JSON.stringify(v.value.subtasks)||t.promptId!==v.value.promptId)&&!await X(!1))return}let t=await fetch(`/api/workbench/tasks/${e.id}/run`,{method:`POST`}).then(e=>e.json());t.success?m.success(t.message||I(`@WORKBENCH:已加入执行队列`)):m.error(t.error||I(`@WORKBENCH:执行失败`))}function Tt(e){switch(e){case`todo`:return I(`@WORKBENCH:待执行`);case`running`:return I(`@WORKBENCH:执行中`);case`done`:return I(`@WORKBENCH:已完成`);case`error`:return I(`@WORKBENCH:出错`);case`cancelled`:return I(`@WORKBENCH:已取消`);case`pending`:return I(`@WORKBENCH:排队中`);default:return e}}function Et(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)`}}async function Dt(e){try{await d.confirm(I(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),I(`@WORKBENCH:停止执行`),{confirmButtonText:I(`@WORKBENCH:停止`),cancelButtonText:I(`@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?m.success(I(`@WORKBENCH:已发送停止信号`)):m.error(t.error||I(`@WORKBENCH:停止失败`))}l(async()=>{await Promise.all([ue(),W(),de()]),fe()}),o(()=>{V&&=(V.close(),null)});let Ot=S({});function kt(e){return t=>{Ot.value[e]=t}}T(()=>s.value.map(e=>({id:e.id,len:(e.output||``).length})),e=>{e.forEach(({id:e})=>{let t=s.value.find(t=>t.id===e);if(!t||t.status!==`running`)return;let n=Ot.value[t.subId];n&&y(()=>{n.scrollTop=n.scrollHeight})})},{deep:!0,flush:`post`});function At(e){return e?e.length<=St?e:`${I(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}let jt=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`]),Mt=S({}),Q=S(null);function Nt(e){return!!Mt.value[e]}function Pt(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function Ft(e){return e.kind===`task`?`task-${e.task?.id??``}`:`sub-${e.sub.id}`}function It(e){let t=e.kind===`task`?e.task?.attachments:e.sub.attachments;return Array.isArray(t)?t:[]}function Lt(e,t){e.kind===`task`?e.task&&(e.task.attachments=t):e.sub.attachments=t}function Rt(e){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments`:`/api/workbench/subtasks/${e.sub.id}/attachments`}function zt(e,t){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments/${t}`:`/api/workbench/subtasks/${e.sub.id}/attachments/${t}`}function $(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`);Vt(t,Pt(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&&Vt(t,Pt(n,n.name||`pasted-file`))}}}function Bt(e,t){Q.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>Vt(t,e))}async function Vt(e,t){if(t.size>wt){m.error(`「${t.name}」${I(`@WORKBENCH:超过 5MB 限制`)}`);return}if(!jt.has(t.type)&&!t.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){m.error(`${I(`@WORKBENCH:不支持的文件类型`)}(${t.name})`);return}if(It(e).length>=9){m.error(I(`@WORKBENCH:单个任务最多 9 个附件`));return}let n=Ft(e);Mt.value[n]=!0;try{let n=await fetch(Rt(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=It(e);r.push(n.attachment),Lt(e,r),m.success(`${I(`@WORKBENCH:已添加:`)}${t.name}`)}else m.error(n.error||I(`@WORKBENCH:上传失败`))}catch(e){m.error(I(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{Mt.value[n]=!1}}async function Ht(e,t){try{await d.confirm(I(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),I(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(zt(e,t.id),{method:`DELETE`}).then(e=>e.json());n.success?(Lt(e,It(e).filter(e=>e.id!==t.id)),m.success(I(`@WORKBENCH:已删除`))):m.error(n.error||I(`@WORKBENCH:删除失败`))}function Ut(e){let t=document.createElement(`input`);t.type=`file`,t.accept=Ct,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>Vt(e,t))},t.click()}let Wt=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function Gt(e){return Wt.has(String(e.ext||``).toLowerCase())}function Kt(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return(e,o)=>{let s=te,l=re,d=ae,m=x,y=ne,S=w,ee=k;return c(),a(`div`,De,[u(`aside`,Oe,[u(`div`,ke,[u(`h3`,null,N(j(I)(`@WORKBENCH:任务列表`)),1),F(s,{size:`small`,type:`primary`,onClick:G},{default:M(()=>[g(N(j(I)(`@WORKBENCH:新建任务`)),1)]),_:1})]),u(`ul`,Ae,[(c(!0),a(p,null,b(i.value,e=>(c(),a(`li`,{key:e.id,class:C([`wb-task-item`,{active:e.id===_.value}]),onClick:t=>q(e)},[u(`div`,Me,N(e.title),1),u(`div`,Ne,[u(`span`,null,N(e.subtasks?.length||0)+` `+N(j(I)(`@WORKBENCH:个子任务`)),1),u(`button`,{class:`wb-task-item__del`,onClick:r(t=>K(e),[`stop`]),title:j(I)(`@WORKBENCH:删除`)},`×`,8,Pe)])],10,je))),128)),i.value.length===0?(c(),a(`li`,Fe,N(j(I)(`@WORKBENCH:暂无任务,点击右上角新建`)),1)):h(``,!0)]),o[23]||=u(`div`,{class:`wb-sidebar__divider`},null,-1),u(`div`,Ie,[u(`h3`,null,N(j(I)(`@WORKBENCH:预置提示词`)),1),F(s,{size:`small`,onClick:pe},{default:M(()=>[g(N(j(I)(`@WORKBENCH:新建`)),1)]),_:1})]),u(`ul`,Le,[(c(!0),a(p,null,b(t.value,e=>(c(),a(`li`,{key:e.id,class:`wb-prompt-item`},[u(`span`,{class:`wb-prompt-item__name`,onClick:t=>me(e),title:e.content},N(e.name),9,Re),u(`button`,{class:`wb-prompt-item__del`,onClick:t=>be(e)},`×`,8,ze)]))),128)),t.value.length===0?(c(),a(`li`,Be,N(j(I)(`@WORKBENCH:暂无提示词`)),1)):h(``,!0)])]),u(`section`,Ve,[v.value?(c(),a(p,{key:1},[u(`div`,Ue,[A(u(`input`,{class:`wb-input wb-input--title`,"onUpdate:modelValue":o[0]||=e=>v.value.title=e,placeholder:j(I)(`@WORKBENCH:任务标题`)},null,8,We),[[P,v.value.title]]),A(u(`select`,{class:`wb-select`,"onUpdate:modelValue":o[1]||=e=>v.value.promptId=e},[u(`option`,Ge,N(j(I)(`@WORKBENCH:不绑定预置提示词`)),1),(c(!0),a(p,null,b(t.value,e=>(c(),a(`option`,{key:e.id,value:e.id},N(e.name),9,Ke))),128))],512),[[n,v.value.promptId]]),F(s,{type:`info`,plain:``,disabled:!v.value.title||!v.value.title.trim(),onClick:Ce},{default:M(()=>[g(N(j(I)(`@WORKBENCH:AI 拆分`)),1)]),_:1},8,[`disabled`]),F(s,{type:`primary`,loading:!1,onClick:o[2]||=e=>Te(v.value)},{default:M(()=>[g(N(j(I)(`@WORKBENCH:执行任务`)),1)]),_:1})]),A(u(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":o[3]||=e=>v.value.desc=e,placeholder:j(I)(`@WORKBENCH:任务描述(可选)`),rows:`3`,onPaste:o[4]||=e=>$(e,{kind:`task`,task:v.value})},null,40,qe),[[P,v.value.desc]]),F(Ee,{attachments:v.value.attachments||[],"is-image":Gt,"human-size":Kt,"is-uploading":Nt(`task-`+v.value.id),"is-paste-hover":Q.value===`task-`+v.value.id,"max-count":9,"on-pick":()=>Ut({kind:`task`,task:v.value}),"on-remove":e=>Ht({kind:`task`,task:v.value},e),onPaste:o[5]||=e=>$(e,{kind:`task`,task:v.value}),onDrop:o[6]||=r(e=>Bt(e,{kind:`task`,task:v.value}),[`prevent`]),onDragover:o[7]||=r(e=>Q.value=`task-`+v.value.id,[`prevent`]),onDragenter:o[8]||=r(e=>Q.value=`task-`+v.value.id,[`prevent`]),onDragleave:o[9]||=e=>Q.value=Q.value===`task-`+v.value.id?null:Q.value},null,8,[`attachments`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`]),u(`div`,Je,[u(`h4`,null,N(j(I)(`@WORKBENCH:子任务拆分`)),1),u(`div`,null,[F(s,{size:`small`,onClick:J},{default:M(()=>[g(`+ `+N(j(I)(`@WORKBENCH:添加子任务`)),1)]),_:1}),F(s,{size:`small`,type:se.value?`primary`:`default`,onClick:Se},{default:M(()=>[g(N(j(I)(`@WORKBENCH:保存拆分`))+` `,1),se.value?(c(),a(`span`,Ye,N(L.value.size),1)):h(``,!0)]),_:1},8,[`type`])])]),u(`ul`,Xe,[(c(!0),a(p,null,b(v.value.subtasks,e=>(c(),a(`li`,{key:e.id,class:C([`wb-sub-item`,{"is-dirty":L.value.has(e.id)}])},[o[24]||=g(` > `,-1),u(`div`,Ze,[u(`span`,{class:`wb-sub-item__status`,style:O({background:Et(e.status)})},N(Tt(e.status)),5),A(u(`input`,{class:`wb-input`,"onUpdate:modelValue":t=>e.title=t,placeholder:j(I)(`@WORKBENCH:子任务标题`),onPaste:t=>$(t,{kind:`sub`,task:v.value,sub:e})},null,40,Qe),[[P,e.title]]),L.value.has(e.id)?(c(),a(`span`,{key:0,class:`wb-sub-item__dirty`,title:j(I)(`@WORKBENCH:有未保存的更改`)},N(j(I)(`@WORKBENCH:未保存`)),9,$e)):h(``,!0),U(e.id)?(c(),a(`span`,{key:1,class:`wb-sub-item__pid`,title:j(I)(`@WORKBENCH:进程ID`)},` PID: `+N(U(e.id)?.pid),9,et)):h(``,!0),U(e.id)&&(U(e.id)?.status===`running`||U(e.id)?.status===`pending`)?(c(),a(`button`,{key:2,class:`wb-sub-item__stop`,title:j(I)(`@WORKBENCH:停止执行`),onClick:t=>Dt(U(e.id))},N(j(I)(`@WORKBENCH:停止`)),9,tt)):h(``,!0),u(`button`,{class:`wb-sub-item__del`,onClick:t=>Y(e)},`×`,8,nt)]),A(u(`textarea`,{class:`wb-textarea wb-textarea--sm`,"onUpdate:modelValue":t=>e.desc=t,placeholder:j(I)(`@WORKBENCH:子任务描述 / 独立提示词覆盖`),rows:`2`,onPaste:t=>$(t,{kind:`sub`,task:v.value,sub:e})},null,40,rt),[[P,e.desc]]),U(e.id)?(c(),a(`details`,{key:0,class:`wb-log-details`,open:U(e.id)?.status===`running`||U(e.id)?.status===`pending`},[u(`summary`,at,[U(e.id)?.status===`running`?(c(),a(`span`,ot,`● `+N(j(I)(`@WORKBENCH:正在执行…`)),1)):U(e.id)?.status===`pending`?(c(),a(`span`,st,N(j(I)(`@WORKBENCH:排队中…`)),1)):(c(),a(`span`,ct,N(j(I)(`@WORKBENCH:查看执行日志`)),1)),u(`span`,lt,N((U(e.id)?.output||``).length)+` `+N(j(I)(`@WORKBENCH:字符`)),1)]),U(e.id)?.prompt?(c(),a(`details`,ut,[u(`summary`,dt,[u(`span`,ft,N(j(I)(`@WORKBENCH:用户提示词`)),1),u(`span`,pt,N((U(e.id)?.prompt||``).length)+` `+N(j(I)(`@WORKBENCH:字符`)),1)]),u(`pre`,mt,N(U(e.id)?.prompt),1)])):h(``,!0),U(e.id)?.thinking?(c(),a(`details`,ht,[u(`summary`,gt,[u(`span`,_t,N(j(I)(`@WORKBENCH:Claude 思考`)),1),u(`span`,vt,N((U(e.id)?.thinking||``).length)+` `+N(j(I)(`@WORKBENCH:字符`)),1)]),u(`pre`,yt,N(U(e.id)?.thinking),1)])):h(``,!0),u(`pre`,{ref_for:!0,ref:kt(e.id),class:`wb-log-pre`},N(At(U(e.id)?.output)||j(I)(`@WORKBENCH:(暂无输出)`)),513)],8,it)):h(``,!0),F(Ee,{attachments:e.attachments||[],"is-image":Gt,"human-size":Kt,"is-uploading":Nt(`sub-`+e.id),"is-paste-hover":Q.value===e.id,"max-count":9,"on-pick":()=>Ut({kind:`sub`,task:v.value,sub:e}),"on-remove":t=>Ht({kind:`sub`,task:v.value,sub:e},t),onPaste:t=>$(t,{kind:`sub`,task:v.value,sub:e}),onDrop:r(t=>Bt(t,{kind:`sub`,task:v.value,sub:e}),[`prevent`]),onDragover:r(t=>Q.value=e.id,[`prevent`]),onDragenter:r(t=>Q.value=e.id,[`prevent`]),onDragleave:t=>Q.value=Q.value===e.id?null:Q.value},null,8,[`attachments`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`,`onPaste`,`onDrop`,`onDragover`,`onDragenter`,`onDragleave`])],2))),128)),v.value.subtasks.length===0?(c(),a(`li`,bt,N(j(I)(`@WORKBENCH:暂无子任务,点击上方按钮添加`)),1)):h(``,!0)])],64)):(c(),a(`div`,He,[u(`p`,null,N(j(I)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))]),F(y,{modelValue:R.visible,"onUpdate:modelValue":o[13]||=e=>R.visible=e,title:R.editing?j(I)(`@WORKBENCH:编辑提示词`):j(I)(`@WORKBENCH:新建提示词`),width:`640px`},{footer:M(()=>[F(s,{onClick:o[12]||=e=>R.visible=!1},{default:M(()=>[g(N(j(I)(`@WORKBENCH:取消`)),1)]),_:1}),F(s,{type:`primary`,onClick:ve},{default:M(()=>[g(N(j(I)(`@WORKBENCH:保存`)),1)]),_:1})]),default:M(()=>[F(m,{"label-position":`top`},{default:M(()=>[F(d,{label:j(I)(`@WORKBENCH:名称`)},{default:M(()=>[F(l,{modelValue:R.name,"onUpdate:modelValue":o[10]||=e=>R.name=e,placeholder:j(I)(`@WORKBENCH:如:代码审查 / 写测试`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),F(d,null,{default:M(()=>[u(`div`,xt,[F(s,{type:`primary`,plain:``,loading:R.aiLoading,onClick:he},{default:M(()=>[g(N(j(I)(`@WORKBENCH:AI 生成项目架构说明`)),1)]),_:1},8,[`loading`]),F(s,{onClick:ge},{default:M(()=>[g(N(j(I)(`@WORKBENCH:编辑指令`)),1)]),_:1})])]),_:1}),F(d,{label:j(I)(`@WORKBENCH:内容`)},{default:M(()=>[F(l,{modelValue:R.content,"onUpdate:modelValue":o[11]||=e=>R.content=e,type:`textarea`,rows:10,placeholder:j(I)(`@WORKBENCH:可用变量:`)+`{{task.title}} {{task.desc}} {{sub.title}} {{sub.desc}} {{repo.path}} {{branch}}`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),F(y,{modelValue:z.visible,"onUpdate:modelValue":o[16]||=e=>z.visible=e,title:j(I)(`@WORKBENCH:编辑生成指令`),width:`720px`,"append-to-body":``},{footer:M(()=>[F(s,{onClick:o[15]||=e=>z.visible=!1},{default:M(()=>[g(N(j(I)(`@WORKBENCH:取消`)),1)]),_:1}),F(s,{type:`primary`,loading:z.saving,onClick:_e},{default:M(()=>[g(N(j(I)(`@WORKBENCH:保存`)),1)]),_:1},8,[`loading`])]),default:M(()=>[F(m,{"label-position":`top`},{default:M(()=>[F(d,{label:j(I)(`@WORKBENCH:指令内容`)},{default:M(()=>[F(l,{modelValue:z.text,"onUpdate:modelValue":o[14]||=e=>z.text=e,type:`textarea`,rows:18,placeholder:j(I)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),F(y,{modelValue:B.visible,"onUpdate:modelValue":o[21]||=e=>B.visible=e,title:B.editing?j(I)(`@WORKBENCH:编辑任务`):j(I)(`@WORKBENCH:新建任务`),width:`560px`},{footer:M(()=>[F(s,{onClick:o[20]||=e=>B.visible=!1},{default:M(()=>[g(N(j(I)(`@WORKBENCH:取消`)),1)]),_:1}),F(s,{type:`primary`,onClick:xe},{default:M(()=>[g(N(j(I)(`@WORKBENCH:保存`)),1)]),_:1})]),default:M(()=>[F(m,{"label-position":`top`},{default:M(()=>[F(d,{label:j(I)(`@WORKBENCH:标题`)},{default:M(()=>[F(l,{modelValue:B.title,"onUpdate:modelValue":o[17]||=e=>B.title=e},null,8,[`modelValue`])]),_:1},8,[`label`]),F(d,{label:j(I)(`@WORKBENCH:描述`)},{default:M(()=>[F(l,{modelValue:B.desc,"onUpdate:modelValue":o[18]||=e=>B.desc=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1},8,[`label`]),F(d,{label:j(I)(`@WORKBENCH:预置提示词`)},{default:M(()=>[F(ee,{modelValue:B.promptId,"onUpdate:modelValue":o[19]||=e=>B.promptId=e,clearable:``,placeholder:j(I)(`@WORKBENCH:不绑定`),style:{width:`100%`}},{default:M(()=>[(c(!0),a(p,null,b(t.value,e=>(c(),f(S,{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`]),v.value?(c(),f(ye,{key:0,modelValue:Z.value,"onUpdate:modelValue":o[22]||=e=>Z.value=e,title:v.value.title,desc:v.value.desc,"task-id":v.value.id,"prompt-id":v.value.promptId,onConfirm:we},null,8,[`modelValue`,`title`,`desc`,`task-id`,`prompt-id`])):h(``,!0)])}}}),[[`__scopeId`,`data-v-8a637600`]]);export{Tt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ai-split-status[data-v-15311727]{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-15311727]{color:var(--el-color-danger)}.ai-split-status .is-loading[data-v-15311727]{animation:2s linear infinite rotating-15311727}@keyframes rotating-15311727{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ai-split-tabs[data-v-15311727]{margin-top:-8px}.ai-split-tab-count[data-v-15311727]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;margin-left:4px;font-size:11px}.ai-split-prompt-actions[data-v-15311727]{justify-content:flex-end;margin-bottom:8px;display:flex}.ai-split-prompt-editor[data-v-15311727]{flex-direction:column;gap:8px;margin-bottom:12px;display:flex}.ai-split-prompt-editor__actions[data-v-15311727]{justify-content:flex-end;gap:8px;display:flex}.ai-split-subhead[data-v-15311727]{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-15311727]{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-15311727]{color:var(--text-secondary);background:#8b5cf60f;border-left:2px solid #8b5cf673;font-style:italic}.ai-split-empty[data-v-15311727]{text-align:center;color:var(--text-tertiary);padding:32px;font-size:13px}.ai-split-list[data-v-15311727]{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-15311727]{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-15311727]{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-15311727]{flex:1;min-width:0}.ai-split-list__title[data-v-15311727]{color:var(--text-primary);margin-bottom:4px;font-size:13px;font-weight:600}.ai-split-list__desc[data-v-15311727]{color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5}.wb-attachments{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-subtle,var(--bg-container));flex-shrink:0;margin-top:6px;transition:border-color .15s,background .15s;overflow:hidden}.wb-attachments.is-paste-hover{border-color:var(--color-primary);box-shadow:inset 0 0 0 1px var(--color-primary);background:#3b82f60f}.wb-attachments__paste-hint{background:var(--color-primary);color:#fff;text-align:center;border-top:1px solid var(--border-color);padding:4px 10px;font-size:12px}.wb-attachments__head{color:var(--text-secondary);border-bottom:1px solid var(--border-color);justify-content:space-between;align-items:center;padding:6px 10px;font-size:12px;display:flex}.wb-attachments__label{align-items:center;gap:6px;display:inline-flex}.wb-attachments__count{font-variant-numeric:tabular-nums;color:var(--text-tertiary);font-size:11px}.wb-attachments__add{border:1px solid var(--border-color);background:var(--bg-container);color:var(--text-primary);border-radius:var(--radius-sm,4px);cursor:pointer;padding:3px 10px;font-size:12px;transition:background .15s}.wb-attachments__add:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary);background:#3b82f614}.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);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}.workbench[data-v-8a637600]{background:var(--bg-container);height:100%;color:var(--text-primary);display:flex}.wb-sidebar[data-v-8a637600]{border-right:1px solid var(--border-color);background:var(--bg-surface);flex-shrink:0;width:260px;padding:12px;overflow-y:auto}.wb-sidebar__header[data-v-8a637600]{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.wb-sidebar__header h3[data-v-8a637600]{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin:0;font-size:13px;font-weight:600}.wb-sidebar__divider[data-v-8a637600]{background:var(--border-color);height:1px;margin:16px 0}.wb-task-list[data-v-8a637600],.wb-prompt-list[data-v-8a637600]{margin:0;padding:0;list-style:none}.wb-task-item[data-v-8a637600]{border-radius:var(--radius-md);cursor:pointer;border:1px solid #0000;margin-bottom:4px;padding:10px 12px;transition:background .15s,border-color .15s}.wb-task-item[data-v-8a637600]:hover{background:var(--bg-hover)}.wb-task-item.active[data-v-8a637600]{border-color:var(--color-primary);background:#3b82f61a}.wb-task-item__title[data-v-8a637600]{margin-bottom:2px;font-size:13px;font-weight:500}.wb-task-item__meta[data-v-8a637600]{color:var(--text-tertiary);justify-content:space-between;align-items:center;font-size:11px;display:flex}.wb-task-item__del[data-v-8a637600],.wb-prompt-item__del[data-v-8a637600],.wb-sub-item__del[data-v-8a637600]{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:16px;line-height:1}.wb-task-item__del[data-v-8a637600]:hover,.wb-prompt-item__del[data-v-8a637600]:hover,.wb-sub-item__del[data-v-8a637600]:hover{color:#ef4444}.wb-prompt-item[data-v-8a637600]{border-radius:var(--radius-sm);justify-content:space-between;align-items:center;padding:6px 8px;font-size:12px;display:flex}.wb-prompt-item[data-v-8a637600]:hover{background:var(--bg-hover)}.wb-prompt-item__name[data-v-8a637600]{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.wb-empty[data-v-8a637600]{text-align:center;color:var(--text-tertiary);padding:16px 8px;font-size:12px}.wb-split[data-v-8a637600]{flex-direction:column;flex:1;gap:12px;min-height:0;padding:16px 20px;display:flex;overflow:hidden}.wb-placeholder[data-v-8a637600]{color:var(--text-tertiary);flex:1;justify-content:center;align-items:center;font-size:13px;display:flex}.wb-split__header[data-v-8a637600]{flex-shrink:0;align-items:center;gap:8px;display:flex}.wb-input[data-v-8a637600]{background:var(--bg-base);border:1px solid var(--border-color);color:var(--text-primary);border-radius:var(--radius-md);outline:none;padding:6px 10px;font-size:13px}.wb-input[data-v-8a637600]:focus{border-color:var(--color-primary)}.wb-input--title[data-v-8a637600]{flex:1;font-size:16px;font-weight:600}.wb-select[data-v-8a637600]{background:var(--bg-base);border:1px solid var(--border-color);color:var(--text-primary);border-radius:var(--radius-md);padding:6px 8px;font-size:13px}.wb-textarea[data-v-8a637600]{background:var(--bg-base);border:1px solid var(--border-color);color:var(--text-primary);border-radius:var(--radius-md);resize:vertical;box-sizing:border-box;outline:none;flex-shrink:0;width:100%;padding:8px 10px;font-family:inherit;font-size:13px}.wb-textarea[data-v-8a637600]:focus{border-color:var(--color-primary)}.wb-textarea--sm[data-v-8a637600]{min-height:40px}.wb-split__sub-header[data-v-8a637600]{flex-shrink:0;justify-content:space-between;align-items:center;margin-top:8px;display:flex}.wb-split__sub-header h4[data-v-8a637600]{color:var(--text-secondary);margin:0;font-size:13px;font-weight:600}.wb-sub-list[data-v-8a637600]{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-8a637600]{background:var(--bg-surface);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:10px;transition:border-color .15s,box-shadow .15s}.wb-sub-item.is-dirty[data-v-8a637600]{background:#f59e0b08;border-color:#f59e0b8c;box-shadow:inset 3px 0 #f59e0b}.wb-sub-item__dirty[data-v-8a637600]{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-8a637600]:before{content:"";background:#f59e0b;border-radius:50%;width:5px;height:5px;display:inline-block}.wb-dirty-badge[data-v-8a637600]{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-8a637600]{align-items:center;gap:8px;margin-bottom:6px;display:flex}.wb-sub-item__status[data-v-8a637600]{color:#fff;border-radius:10px;flex-shrink:0;padding:2px 8px;font-size:11px}.wb-sub-item__pid[data-v-8a637600]{color:var(--text-tertiary);flex-shrink:0;font-family:ui-monospace,monospace;font-size:11px}.wb-sub-item__stop[data-v-8a637600]{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-8a637600]:hover{color:#fff;background:#ef4444;border-color:#ef4444}.wb-sub-item__row .wb-input[data-v-8a637600]{flex:1}.wb-log-details[data-v-8a637600]{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-8a637600]{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-8a637600]::-webkit-details-marker{display:none}.wb-log-summary[data-v-8a637600]:hover{background:#3b82f60f}.wb-log-summary__meta[data-v-8a637600]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.wb-log-pre[data-v-8a637600]{max-height:240px;font-family:var(--font-mono,ui-monospace, monospace);color:var(--text-primary);background:var(--bg-code);white-space:pre-wrap;word-break:break-word;border-top:1px solid var(--border-color);margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow:auto}.wb-log-section[data-v-8a637600],.wb-log-section[data-v-8a637600]:first-of-type{border-top:1px solid var(--border-color)}.wb-log-section__summary[data-v-8a637600]{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-8a637600]::-webkit-details-marker{display:none}.wb-log-section__summary[data-v-8a637600]:hover{background:#3b82f60f}.wb-log-section__tag[data-v-8a637600]{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-8a637600]{color:#b45309;background:#f59e0b2e}.wb-log-section__tag--think[data-v-8a637600]{color:#6d28d9;background:#8b5cf62e}.wb-log-section__count[data-v-8a637600]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.wb-log-section__pre[data-v-8a637600]{max-height:200px;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-8a637600]{color:var(--text-primary);background:#f59e0b0f;border-left:2px solid #f59e0b73}.wb-log-section__pre--think[data-v-8a637600]{color:var(--text-secondary);background:#8b5cf60f;border-left:2px solid #8b5cf673;font-style:italic}.wb-attachments[data-v-8a637600]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-subtle,var(--bg-container));flex-shrink:0;margin-top:6px;transition:border-color .15s,background .15s;overflow:hidden}.wb-attachments.is-paste-hover[data-v-8a637600]{border-color:var(--color-primary);box-shadow:inset 0 0 0 1px var(--color-primary);background:#3b82f60f}.wb-attachments__paste-hint[data-v-8a637600]{background:var(--color-primary);color:#fff;text-align:center;border-top:1px solid var(--border-color);padding:4px 10px;font-size:12px}.wb-attachments__head[data-v-8a637600]{color:var(--text-secondary);border-bottom:1px solid var(--border-color);justify-content:space-between;align-items:center;padding:6px 10px;font-size:12px;display:flex}.wb-attachments__label[data-v-8a637600]{align-items:center;gap:6px;display:inline-flex}.wb-attachments__count[data-v-8a637600]{font-variant-numeric:tabular-nums;color:var(--text-tertiary);font-size:11px}.wb-attachments__add[data-v-8a637600]{border:1px solid var(--border-color);background:var(--bg-container);color:var(--text-primary);border-radius:var(--radius-sm,4px);cursor:pointer;padding:3px 10px;font-size:12px;transition:background .15s}.wb-attachments__add[data-v-8a637600]:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary);background:#3b82f614}.wb-attachments__add[data-v-8a637600]:disabled{opacity:.5;cursor:not-allowed}.wb-attachments__list[data-v-8a637600]{flex-wrap:wrap;gap:4px;margin:0;padding:4px;list-style:none;display:flex}.wb-attachment[data-v-8a637600]{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-8a637600]{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-8a637600]{background:var(--bg-code)}.wb-attachment__icon img[data-v-8a637600]{object-fit:cover;width:100%;height:100%}.wb-attachment__meta[data-v-8a637600]{flex:1;min-width:0}.wb-attachment__name[data-v-8a637600]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.wb-attachment__sub[data-v-8a637600]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.wb-attachment__del[data-v-8a637600]{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-8a637600]:hover{color:#ef4444;background:#ef444414}
|