zen-gitsync 2.13.3 → 2.13.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/package.json +1 -1
- package/src/ui/public/assets/EditorView-ClwvgXDr.js +0 -0
- package/src/ui/public/assets/SourceMapView-JtcpliBT.js +3 -0
- package/src/ui/public/assets/WorkbenchView-DbuvMS0c.css +1 -0
- package/src/ui/public/assets/WorkbenchView-N_UzEo17.js +6 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-K0RsuraF.js → _plugin-vue_export-helper-Bjo1gczS.js} +3 -3
- package/src/ui/public/assets/{index-DEEcURiV.css → index-CV4VteDa.css} +1 -1
- package/src/ui/public/assets/index-DYzZstrt.js +66 -0
- package/src/ui/public/assets/{vendor-DpYOE9sy.css → vendor-Bq2rS2vY.css} +1 -1
- package/src/ui/public/assets/{vendor-vsQ98rZk.js → vendor-C0_tGl5f.js} +242 -242
- package/src/ui/public/index.html +5 -5
- package/src/ui/server/routes/workbench.js +2056 -1702
- package/src/ui/public/assets/EditorView-9Q0gSlr6.js +0 -0
- package/src/ui/public/assets/SourceMapView-Dxmg8KPB.js +0 -3
- package/src/ui/public/assets/WorkbenchView-CYC_l23l.js +0 -2
- package/src/ui/public/assets/WorkbenchView-DauLIzog.css +0 -1
- package/src/ui/public/assets/index-CGnU7zDA.js +0 -66
package/README.md
CHANGED
|
@@ -244,7 +244,7 @@ A dedicated view (fourth icon in the activity bar) for batch-running Claude agai
|
|
|
244
244
|
| Feature | Description |
|
|
245
245
|
|---|---|
|
|
246
246
|
| Task list | Create, edit, delete tasks; each shows its subtask count |
|
|
247
|
-
| Subtask breakdown | Add / edit / remove subtasks per task, with per-subtask status |
|
|
247
|
+
| Subtask breakdown | Add / edit / remove subtasks per task, with per-subtask status; the empty state ships a centered illustration card with a primary "Add subtask" CTA and a secondary "Split with AI" shortcut |
|
|
248
248
|
| Subtask attachments | Attach up to 9 files per subtask (image / PDF / text / Markdown / CSV / JSON / log, ≤ 5 MB each); their absolute paths are appended to the prompt so Claude reads them directly |
|
|
249
249
|
| Prompt presets | Reusable prompt templates with `{{task.title}}` / `{{task.desc}}` / `{{sub.title}}` / `{{sub.desc}}` / `{{repo.path}}` / `{{branch}}` variable interpolation |
|
|
250
250
|
| AI prompt generation | "New / Edit preset" dialog has an **AI Generate** button — the server reads the current project tree (depth 2) + README + manifests (package.json / pyproject.toml / go.mod / Cargo.toml / …) and asks the configured LLM to draft a project-aware preset (name + body) |
|
|
@@ -254,6 +254,7 @@ A dedicated view (fourth icon in the activity bar) for batch-running Claude agai
|
|
|
254
254
|
| Isolated windows | Every subtask runs as its own detached process with fresh context, so memory and conversation state never accumulate across subtasks |
|
|
255
255
|
| Live log | Each running subtask has an expandable "执行日志 / Execution log" panel that auto-scrolls and shows accumulated `stdout` + `stderr` (capped at 256 KB server-side, last 64 KB rendered client-side) |
|
|
256
256
|
| Live status | Subtask status (todo / pending / running / done / error) and PID stream in real time over SSE |
|
|
257
|
+
| Running animation | Subtasks in `running` state get a breathing primary-color glow + a sliding progress bar on top of the card; the status badge uses a shimmer gradient with a pulsing white dot and outer halo, easing back to neutral on completion |
|
|
257
258
|
| Cross-view indicator | While any Workbench subtask is running, a pulsing dot appears on the Workbench icon in the Activity Bar so you can see job state from the Git or Editor view |
|
|
258
259
|
|
|
259
260
|
Prompt presets and tasks are persisted to `~/.zen-gitsync/prompts.json` and `~/.zen-gitsync/tasks.json` (cross-project, shared across repos).
|
|
@@ -622,7 +623,7 @@ Activity Bar 第四个视图,用于在当前仓库上批量调度 Claude:定
|
|
|
622
623
|
| 功能 | 说明 |
|
|
623
624
|
|---|---|
|
|
624
625
|
| 任务列表 | 新建、编辑、删除任务;每条任务显示子任务数量 |
|
|
625
|
-
| 子任务拆分 |
|
|
626
|
+
| 子任务拆分 | 增删改子任务,实时显示每个子任务的执行状态;空态提供居中插画卡片、主 CTA「添加子任务」与「用 AI 自动拆分」次级入口 |
|
|
626
627
|
| 子任务附件 | 每个子任务最多挂 9 个附件(图片 / PDF / 文本 / Markdown / CSV / JSON / log,单个 ≤ 5 MB);执行时绝对路径会自动追加到 prompt 末尾,Claude 直接按路径读取 |
|
|
627
628
|
| 提示词预置 | 可复用提示词模板,支持 `{{task.title}}` / `{{task.desc}}` / `{{sub.title}}` / `{{sub.desc}}` / `{{repo.path}}` / `{{branch}}` 变量插值 |
|
|
628
629
|
| AI 生成预置 | 「新建 / 编辑预置」对话框内置 **AI 生成项目架构说明** 按钮 + **编辑指令** 按钮:服务端递归识别当前项目里的所有子项目(含 `.git` 或 9 种 manifest 之一的目录),为每个子项目独立读取关键文件(manifest 20 KB / README 8 KB / 2 层目录树),并发调 LLM 产出各子项目架构说明,多子项目场景再合并成一份整体说明;用户可点「编辑指令」自定义生成策略(持久化到 `~/.zen-gitsync/ai-instruction.json`);`max_tokens=4000`,单次请求最多 20 分钟 |
|
|
@@ -632,6 +633,7 @@ Activity Bar 第四个视图,用于在当前仓库上批量调度 Claude:定
|
|
|
632
633
|
| 独立上下文 | 每个子任务都是独立的 detached 进程,上下文与状态不会跨子任务累积 |
|
|
633
634
|
| 实时日志 | 正在执行的子任务可展开「执行日志」面板,自动滚到底,展示累积的 stdout / stderr(服务端缓存 256 KB,客户端渲染最近 64 KB) |
|
|
634
635
|
| 实时状态 | 子任务状态(todo / pending / running / done / error)和 PID 通过 SSE 实时推送 |
|
|
636
|
+
| 执行中动效 | 状态为 `running` 的子任务卡片整体呈现蓝色呼吸光晕 + 顶部流动进度光带;状态徽章为渐变 shimmer + 脉冲白点 + 外发光,停下后平滑恢复 |
|
|
635
637
|
| 跨视图指示 | 任意子任务运行中时,Activity Bar 上的工作台图标会显示脉动小圆点;切换到 Git 或编辑器视图也能看到运行状态 |
|
|
636
638
|
|
|
637
639
|
提示词预置与任务数据持久化到 `~/.zen-gitsync/prompts.json` 和 `~/.zen-gitsync/tasks.json`(跨项目共享)。子任务附件落盘在 `~/.zen-gitsync/workbench-images/<subId>/`。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zen-gitsync",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.5",
|
|
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{$n as t,An as n,Bn as r,Hn as i,In as a,Kn as o,Ln as s,Nn as c,P as l,Un as u,Wn as d,Xn as ee,Yn as f,Zn as te,_ as ne,_t as re,ar as p,c as m,d as ie,dr as ae,f as oe,fr as h,g as se,h as ce,hr as g,jn as le,kn as ue,m as de,mr as _,or as v,p as fe,pr as y,sr as b,t as pe,tr as x,ur as S,v as me,y as he,zn as C}from"./vendor-C0_tGl5f.js";import{n as w,t as T}from"./_plugin-vue_export-helper-Bjo1gczS.js";import{a as ge,r as _e}from"./index-DYzZstrt.js";var ve=e(ie(),1),ye={class:`source-map-view`},be={class:`sm-toolbar`},xe={class:`sm-toolbar-left`},Se={class:`sm-title`},Ce={class:`sm-toolbar-center`},we=[`placeholder`,`disabled`],Te=[`disabled`],Ee={class:`sm-toolbar-right`},De={class:`sm-body`},Oe={class:`sm-panel-header sm-panel-header--tabs`},ke={key:0,class:`sm-badge`},Ae={class:`sm-panel-body sm-file-tree`},je=[`onClick`],Me={key:1,class:`sm-tree-arrow-spacer`},Ne={key:2,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Pe=[`xlink:href`],Fe={key:3,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Ie=[`xlink:href`],Le=[`title`],Re={key:1,class:`sm-tree-empty`},ze={class:`sm-panel-body sm-outline-body`},Be={class:`sm-badge`,style:{"margin-left":`auto`}},Ve=[`onClick`],He=[`title`],Ue={key:0,class:`sm-outline-desc`},We={key:1,class:`sm-tree-empty`},Ge={class:`sm-panel sm-panel-graph`},Ke={key:0,class:`sm-project-info`},qe={class:`sm-lang-badge`},Je={class:`sm-summary-text`},Ye={class:`sm-graph-container`},Xe={class:`sm-layout-btn-wrap`},Ze=[`disabled`],Qe=[`title`],$e={class:`sm-fn-label`},et={key:0,class:`sm-fn-desc`},tt={key:0,class:`sm-graph-empty`},nt={viewBox:`0 0 24 24`,width:`48`,height:`48`,fill:`none`,stroke:`currentColor`,"stroke-width":`1`,style:{opacity:`0.3`}},rt={key:1,class:`sm-graph-loading`},it={class:`sm-log-header`},at={key:0,class:`sm-log-indicator`},ot={class:`sm-log-body`,ref:`logBodyRef`},st={key:0,class:`sm-empty`},ct={class:`sm-panel-header`},lt={key:0,class:`sm-badge sm-badge-amber`},ut={key:0,class:`sm-node-detail`},dt={class:`sm-node-name`},ft={class:`sm-node-file`},pt={key:0},mt={key:0,class:`sm-node-desc`},ht={class:`sm-panel-body sm-source-body`},gt={key:0,class:`sm-source-overlay`},_t={key:1,class:`sm-source-overlay sm-source-placeholder`},E=T(o({__name:`SourceMapView`,setup(e){let o=S(document.documentElement.getAttribute(`data-theme`)===`dark`?`dark`:`light`);function ie(){o.value=document.documentElement.getAttribute(`data-theme`)===`dark`?`dark`:`light`}let T=null,E=ge(),D=S(E.currentDirectory||``),O=S(`idle`),k=S([]),vt=0,A=S(null),j=S(null),M=S(`files`),N=S(``),P=S(``),F=S(!1),I=S([]),L=S(new Set),R=S({files:!0,graph:!0,source:!0}),z=S(!1),B=S(220),V=S(360),H=S(140),U=null,W=0,yt=0,G=0;function K(e,t){U=e,W=t.clientX,yt=t.clientY,G=e===`files`?B.value:e===`source`?V.value:H.value,document.addEventListener(`mousemove`,bt),document.addEventListener(`mouseup`,q),t.preventDefault()}function bt(e){U&&(U===`files`?B.value=Math.max(120,Math.min(480,G+e.clientX-W)):U===`source`?V.value=Math.max(200,Math.min(700,G+W-e.clientX)):H.value=Math.max(60,Math.min(500,G+yt-e.clientY)))}function q(){U=null,document.removeEventListener(`mousemove`,bt),document.removeEventListener(`mouseup`,q)}let J=S(null),Y=ae(null),{fitView:xt,setNodes:X,setEdges:St,getNodes:Ct,getEdges:wt,updateNodeInternals:Tt}=he(),Z=a(()=>O.value===`scanning`||O.value===`analyzing`),Et=a(()=>o.value===`dark`?`#334155`:`#cbd5e1`),Q=a(()=>A.value?.nodes.find(e=>e.id===j.value)??null),Dt=a(()=>{if(!A.value)return[];let e=new Map;for(let t of A.value.nodes){let n=t.subsystem??`__default__`;if(!e.has(n)){let r=A.value.subsystems?.find(e=>e.name===n);e.set(n,{displayName:r?.displayName||t.subsystem||w(`@SRCMAP:默认`),color:t.subsystemColor||kt[0],nodes:[]})}e.get(n).nodes.push(t)}return[...e.entries()].map(([,e])=>e)});function $(e,t=`info`){k.value.push({id:++vt,message:e,type:t,timestamp:Date.now()}),k.value.length>200&&k.value.splice(0,k.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(){!J.value||Y.value||(Y.value=m.create(J.value,{value:``,language:`plaintext`,theme:o.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}}))}p(o,e=>{Y.value&&m.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,u=t*110,d=At(e);i.push({id:e.id,type:`default`,position:{x:l,y:u},label:e.label,class:`sm-fn-node`,data:{...e,_accentColor:d},style:{"--node-accent":d}})}),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:ce.ArrowClosed}}))}}async function Pt(){let e=Ct.value,t=wt.value;if(e.length!==0){z.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 ve.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)}),ve.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}X(e.map(e=>({...e,position:r.get(e.id)??e.position}))),await f(),xt({padding:.18})}finally{z.value=!1}}}async function Ft(){if(!D.value.trim()){l.warning(w(`@SRCMAP:请先输入项目路径`));return}if(!Z.value){k.value=[],A.value=null,j.value=null,N.value=``,P.value=``,X([]),St([]),O.value=`scanning`,$(w(`@SRCMAP:开始分析项目...`),`info`);try{let e=await fetch(`/api/code-analysis/analyze`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:D.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=``;O.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){$(`${w(`@SRCMAP:分析失败`)}: ${e.message}`,`error`),O.value=`error`}}}function It(e,t){if(e===`log`)$(t.message,t.type||`info`);else if(e===`files`)I.value=Ot(t.files||[]),I.value.forEach(e=>{e.kind===`dir`&&L.value.add(e.path)});else if(e===`result`){A.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(A.value.nodes,A.value.edges);X(e),St(n),f(()=>Pt())}else e===`done`&&(t.error?($(`${w(`@SRCMAP:分析失败`)}: ${t.error}`,`error`),O.value=`error`):O.value=`done`)}async function Lt(e){if(!(!e||F.value)&&P.value!==e){F.value=!0,P.value=e,N.value=``;try{let t=await(await fetch(`/api/code-analysis/file-content?path=${encodeURIComponent(D.value)}&file=${encodeURIComponent(e)}`)).json();if(t.error)throw Error(t.error);N.value=t.content||``}catch(e){N.value=`// ${w(`@SRCMAP:加载失败`)}: ${e.message}`}finally{F.value=!1}}}function Rt(e){let t=e.node.data;j.value=t.id,t.file&&Lt(t.file)}function zt(e){L.value.has(e)?L.value.delete(e):L.value.add(e)}let Bt=a(()=>{let e=[];function t(n,r){for(let i of n){let n=L.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(I.value,0),e});return p(()=>E.currentDirectory,e=>{e&&!D.value&&(D.value=e)}),p([N,P],([e,t])=>{let n=Y.value;if(!n)return;let r=jt(t||``),i=n.getModel(),a=m.createModel(e||``,r);n.setModel(a),i?.dispose(),n.setScrollPosition({scrollTop:0,scrollLeft:0})}),te(()=>{Mt(),!D.value&&E.currentDirectory&&(D.value=E.currentDirectory),T=new MutationObserver(()=>ie()),T.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]})}),ee(()=>{Y.value?.getModel()?.dispose(),Y.value?.dispose(),q(),T?.disconnect(),T=null}),(e,a)=>{let l=re;return t(),r(`div`,ye,[s(`div`,be,[s(`div`,xe,[a[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`,Se,g(h(w)(`@SRCMAP:源码地图`)),1)]),s(`div`,Ce,[b(s(`input`,{"onUpdate:modelValue":a[0]||=e=>D.value=e,class:`sm-path-input`,placeholder:h(w)(`@SRCMAP:输入项目目录路径`),disabled:Z.value,onKeydown:le(Ft,[`enter`])},null,40,we),[[ue,D.value]]),s(`button`,{class:`sm-btn sm-btn-primary`,disabled:Z.value,onClick:Ft},[Z.value?(t(),r(c,{key:0},[a[10]||=s(`span`,{class:`sm-spinner`},null,-1),u(` `+g(h(w)(`@SRCMAP:分析中...`)),1)],64)):(t(),r(c,{key:1},[u(g(O.value===`done`?h(w)(`@SRCMAP:重新分析`):h(w)(`@SRCMAP:开始分析`)),1)],64))],8,Te)]),s(`div`,Ee,[d(l,{content:h(w)(`@SRCMAP:文件列表`),placement:`bottom`},{default:v(()=>[s(`button`,{class:y([`sm-panel-btn`,{active:R.value.files}]),onClick:a[1]||=e=>R.value.files=!R.value.files},[...a[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`]),d(l,{content:h(w)(`@SRCMAP:调用图`),placement:`bottom`},{default:v(()=>[s(`button`,{class:y([`sm-panel-btn`,{active:R.value.graph}]),onClick:a[2]||=e=>R.value.graph=!R.value.graph},[...a[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`]),d(l,{content:h(w)(`@SRCMAP:源码面板`),placement:`bottom`},{default:v(()=>[s(`button`,{class:y([`sm-panel-btn`,{active:R.value.source}]),onClick:a[3]||=e=>R.value.source=!R.value.source},[...a[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`,De,[b(s(`div`,{class:`sm-panel sm-panel-files`,style:_({width:B.value+`px`})},[s(`div`,Oe,[s(`button`,{class:y([`sm-tab-btn`,{active:M.value===`files`}]),onClick:a[4]||=e=>M.value=`files`},[a[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(` `+g(h(w)(`@SRCMAP:文件列表`))+` `,1),A.value?(t(),r(`span`,ke,g(A.value.allFiles.length),1)):C(``,!0)],2),s(`button`,{class:y([`sm-tab-btn`,{active:M.value===`outline`}]),onClick:a[5]||=e=>M.value=`outline`},[a[15]||=i(`<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(` `+g(h(w)(`@SRCMAP:大纲`)),1)],2)]),b(s(`div`,Ae,[Bt.value.length>0?(t(!0),r(c,{key:0},x(Bt.value,e=>(t(),r(`div`,{key:e.path,class:y([`sm-tree-node`,{"sm-tree-node--dir":e.kind===`dir`,"sm-tree-node--active":e.kind===`file`&&P.value===e.path}]),style:_({paddingLeft:10+e.depth*14+`px`}),onClick:t=>e.kind===`dir`?zt(e.path):Lt(e.path)},[e.kind===`dir`?(t(),r(`span`,{key:0,class:y([`sm-tree-arrow`,{expanded:e.expanded}])},[...a[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)):(t(),r(`span`,Me)),e.kind===`dir`?(t(),r(`svg`,Ne,[s(`use`,{"xlink:href":`#${h(_e)(e.name)||`icon-folder`}`},null,8,Pe)])):(t(),r(`svg`,Fe,[s(`use`,{"xlink:href":`#${h(_e)(e.name)}`},null,8,Ie)])),s(`span`,{class:`sm-tree-name`,title:e.path},g(e.name),9,Le)],14,je))),128)):(t(),r(`div`,Re,g(h(w)(`@SRCMAP:暂无文件,请先开始分析`)),1))],512),[[n,M.value===`files`]]),b(s(`div`,ze,[Dt.value.length>0?(t(!0),r(c,{key:0},x(Dt.value,e=>(t(),r(`div`,{key:e.displayName,class:`sm-outline-group`},[s(`div`,{class:`sm-outline-group-header`,style:_({color:e.color})},[a[17]||=s(`svg`,{viewBox:`0 0 24 24`,width:`8`,height:`8`,fill:`currentColor`},[s(`circle`,{cx:`12`,cy:`12`,r:`6`})],-1),u(` `+g(e.displayName)+` `,1),s(`span`,Be,g(e.nodes.length),1)],4),(t(!0),r(c,null,x(e.nodes,n=>(t(),r(`div`,{key:n.id,class:y([`sm-outline-node`,{"sm-outline-node--active":j.value===n.id}]),onClick:e=>{j.value=n.id,n.file&&Lt(n.file)}},[s(`span`,{class:`sm-outline-dot`,style:_({background:e.color})},null,4),s(`span`,{class:`sm-outline-label`,title:n.file||n.label},g(n.label),9,He),n.description?(t(),r(`span`,Ue,g(n.description.length>18?n.description.slice(0,18)+`…`:n.description),1)):C(``,!0)],10,Ve))),128))]))),128)):(t(),r(`div`,We,g(h(w)(`@SRCMAP:暂无分析结果`)),1))],512),[[n,M.value===`outline`]])],4),[[n,R.value.files]]),b(s(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:a[6]||=e=>K(`files`,e)},null,544),[[n,R.value.files&&R.value.graph]]),b(s(`div`,Ge,[A.value?(t(),r(`div`,Ke,[s(`span`,qe,g(A.value.language),1),A.value.subsystems&&A.value.subsystems.length>1?(t(!0),r(c,{key:0},x(A.value.subsystems,e=>(t(),r(`span`,{key:e.name,class:`sm-subsystem-tag`,style:_({borderColor:e.color,color:e.color})},`● `+g(e.displayName||e.name),5))),128)):(t(!0),r(c,{key:1},x(A.value.techStack.slice(0,4),e=>(t(),r(`span`,{key:e,class:`sm-tech-tag`},g(e),1))),128)),s(`span`,Je,g(A.value.summary),1)])):C(``,!0),s(`div`,Ye,[s(`div`,Xe,[s(`button`,{class:`sm-layout-btn`,disabled:z.value||!A.value,onClick:Pt},[a[18]||=i(`<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(` `+g(z.value?h(w)(`@SRCMAP:布局中...`):h(w)(`@SRCMAP:优化布局`)),1)],8,Ze)]),d(h(ne),{class:`sm-vue-flow`,"default-viewport":{zoom:1},"min-zoom":.2,"max-zoom":4,"fit-view-on-init":``,onNodeClick:Rt},{"node-default":v(({data:e,label:n})=>[d(h(me),{type:`target`,position:h(se).Top},null,8,[`position`]),s(`div`,{class:`sm-fn-inner`,title:`${n}${e?.description?`
|
|
3
|
+
`+e.description:``}`},[s(`div`,$e,g(n),1),e?.description?(t(),r(`div`,et,g(e.description.length>22?e.description.slice(0,22)+`…`:e.description),1)):C(``,!0)],8,Qe),d(h(me),{type:`source`,position:h(se).Bottom},null,8,[`position`])]),default:v(()=>[d(h(de),{variant:h(fe).Dots,gap:20,size:1,"pattern-color":Et.value},null,8,[`variant`,`pattern-color`]),d(h(oe)),d(h(pe),{"node-color":`#3b82f6`,"mask-color":o.value===`dark`?`rgba(0,0,0,0.55)`:`rgba(15,23,42,0.06)`},null,8,[`mask-color`])]),_:1}),!A.value&&!Z.value?(t(),r(`div`,tt,[(t(),r(`svg`,nt,[...a[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,g(h(w)(`@SRCMAP:输入项目路径后点击开始分析`)),1)])):C(``,!0),Z.value&&!A.value?(t(),r(`div`,rt,[a[20]||=s(`span`,{class:`sm-spinner sm-spinner-lg`},null,-1),s(`p`,null,g(h(w)(`@SRCMAP:AI 正在分析项目结构...`)),1)])):C(``,!0)]),s(`div`,{class:`sm-resizer sm-resizer-h`,onMousedown:a[7]||=e=>K(`log`,e)},null,32),s(`div`,{class:`sm-log-panel`,style:_({height:H.value+`px`})},[s(`div`,it,[a[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(` `+g(h(w)(`@SRCMAP:Agent 日志`))+` `,1),Z.value?(t(),r(`span`,at)):C(``,!0)]),s(`div`,ot,[(t(!0),r(c,null,x(k.value.slice(-50),e=>(t(),r(`div`,{key:e.id,class:y([`sm-log-entry`,`sm-log-entry--${e.type}`])},g(e.message),3))),128)),k.value.length===0?(t(),r(`div`,st,g(h(w)(`@SRCMAP:等待开始分析`)),1)):C(``,!0)],512)],4)],512),[[n,R.value.graph]]),b(s(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:a[8]||=e=>K(`source`,e)},null,544),[[n,R.value.graph&&R.value.source]]),b(s(`div`,{class:`sm-panel sm-panel-source`,style:_({width:V.value+`px`})},[s(`div`,ct,[a[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(` `+g(P.value||h(w)(`@SRCMAP:源码面板`))+` `,1),Q.value?(t(),r(`span`,lt,g(Q.value.label),1)):C(``,!0)]),Q.value?(t(),r(`div`,ut,[s(`div`,dt,g(Q.value.label),1),s(`div`,ft,[u(g(Q.value.file),1),Q.value.line?(t(),r(`span`,pt,` :`+g(Q.value.line),1)):C(``,!0)]),Q.value.description?(t(),r(`div`,mt,g(Q.value.description),1)):C(``,!0)])):C(``,!0),s(`div`,ht,[F.value?(t(),r(`div`,gt,[...a[23]||=[s(`span`,{class:`sm-spinner`},null,-1)]])):C(``,!0),!F.value&&!N.value?(t(),r(`div`,_t,g(h(w)(`@SRCMAP:点击调用图中的节点查看源码`)),1)):C(``,!0),s(`div`,{ref_key:`monacoContainerRef`,ref:J,class:`sm-monaco-container`},null,512)])],4),[[n,R.value.source]])])])}}}),[[`__scopeId`,`data-v-71d3569e`]]);export{E 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-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-80bf4769]{background:var(--bg-container);height:100%;color:var(--text-primary);flex-direction:column;display:flex}.wb-tabs[data-v-80bf4769]{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-80bf4769]{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-80bf4769]:hover{color:var(--text-primary)}.wb-tab.is-active[data-v-80bf4769]{color:var(--color-primary);font-weight:600}.wb-tab.is-active[data-v-80bf4769]:after{content:"";background:var(--color-primary);border-radius:2px;height:2px;position:absolute;bottom:-1px;left:12px;right:12px}.workbench__editor-row[data-v-80bf4769]{flex:1;min-height:0;display:flex}.wb-sidebar[data-v-80bf4769]{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-80bf4769]{flex-direction:column;gap:8px;min-height:0;display:flex}.wb-section+.wb-section[data-v-80bf4769]{border-top:1px dashed var(--border-color);padding-top:16px}.wb-section__head[data-v-80bf4769]{align-items:center;gap:6px;padding:0 4px;display:flex}.wb-section__tag[data-v-80bf4769]{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-80bf4769]{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-80bf4769]{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-80bf4769]{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-80bf4769]{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-80bf4769]:hover{background:color-mix(in srgb, var(--color-primary) 12%, transparent);color:var(--color-primary)}.wb-new-btn[data-v-80bf4769]{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-80bf4769]{transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0;font-size:14px}.wb-new-btn__shortcut[data-v-80bf4769]{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-80bf4769]: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-80bf4769]{transform:rotate(90deg)}.wb-new-btn:hover .wb-new-btn__shortcut[data-v-80bf4769]{opacity:1}.wb-new-btn[data-v-80bf4769]:active{transform:scale(.99)}.wb-new-btn[data-v-80bf4769]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.wb-task-list[data-v-80bf4769],.wb-prompt-list[data-v-80bf4769]{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.wb-task-item[data-v-80bf4769]{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-80bf4769]: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-80bf4769]{opacity:1;transform:translate(0)}.wb-task-item.active[data-v-80bf4769]{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-80bf4769]{color:var(--color-primary)}.wb-task-item.active .wb-task-item__del[data-v-80bf4769]{opacity:1;color:var(--color-primary)}.wb-task-item__avatar[data-v-80bf4769]{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-80bf4769]{color:#6d28d9;background:#8b5cf61f;border-color:#8b5cf647}.wb-task-item__avatar[data-icon=icon][data-v-80bf4769]{color:#0369a1;background:#0ea5e91f;border-color:#0ea5e947}.wb-task-item__avatar[data-icon=test][data-v-80bf4769]{color:#047857;background:#10b9811f;border-color:#10b98147}.wb-task-item__avatar[data-icon=ui][data-v-80bf4769]{color:#b45309;background:#f59e0b1f;border-color:#f59e0b47}.wb-task-item.active .wb-task-item__avatar[data-v-80bf4769]{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.wb-task-item__body[data-v-80bf4769]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.wb-task-item__title[data-v-80bf4769]{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-80bf4769]{color:var(--text-tertiary);align-items:center;gap:8px;font-size:11px;line-height:1;display:flex}.wb-task-item__meta-item[data-v-80bf4769]{font-variant-numeric:tabular-nums;align-items:center;gap:3px;font-weight:500;display:inline-flex}.wb-task-item__meta-item--accent[data-v-80bf4769]{color:var(--color-primary)}.wb-task-item__meta-item--project[data-v-80bf4769]{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-80bf4769]{opacity:.78}.wb-task-item.is-other-project[data-v-80bf4769]:hover{opacity:1}.wb-task-item__meta-icon[data-v-80bf4769]{opacity:.85;font-size:11px}.wb-task-item__num[data-v-80bf4769]{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-80bf4769]{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 14%, transparent)}.wb-task-item__del[data-v-80bf4769]{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-80bf4769]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger)}.wb-task-item__del[data-v-80bf4769]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px;opacity:1}.wb-task-item__del[data-v-80bf4769],.wb-prompt-item__del[data-v-80bf4769],.wb-sub-item__del[data-v-80bf4769]{font-size:13px}.wb-prompt-item[data-v-80bf4769]{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-80bf4769]:hover{background:var(--bg-container-hover)}.wb-prompt-item:hover .wb-prompt-item__del[data-v-80bf4769]{opacity:1}.wb-prompt-item__icon[data-v-80bf4769]{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-80bf4769]{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-80bf4769]{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-80bf4769]{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-80bf4769]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger)}.wb-prompt-item__del[data-v-80bf4769]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px;opacity:1}.wb-empty[data-v-80bf4769]{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-80bf4769]{flex-direction:row;justify-content:center;gap:0;padding:10px 12px}.wb-empty__icon[data-v-80bf4769]{color:var(--text-tertiary);opacity:.65;margin-bottom:2px;font-size:22px}.wb-empty__text[data-v-80bf4769]{color:var(--text-secondary);font-size:12.5px;font-weight:500}.wb-empty__hint[data-v-80bf4769]{color:var(--text-tertiary);font-size:11px}.wb-empty--rich[data-v-80bf4769]{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-80bf4769]{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-80bf4769]{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-80bf4769]{color:var(--text-tertiary);max-width:280px;font-size:12px;line-height:1.55}.wb-empty__cta[data-v-80bf4769]{flex-wrap:wrap;justify-content:center;align-items:center;gap:14px;margin-top:6px;display:flex}.wb-empty__link[data-v-80bf4769]{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-80bf4769]:hover:not(:disabled){color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 8%, transparent)}.wb-empty__link[data-v-80bf4769]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.wb-empty__link[data-v-80bf4769]:disabled{color:var(--text-tertiary);cursor:not-allowed;opacity:.6}@media (prefers-reduced-motion:reduce){.wb-empty__link[data-v-80bf4769]{transition:none}}.wb-split[data-v-80bf4769]{flex-direction:column;flex:1;gap:14px;min-height:0;padding:18px 22px 20px;display:flex;overflow:hidden}.wb-placeholder[data-v-80bf4769]{color:var(--text-tertiary);flex:1;justify-content:center;align-items:center;font-size:13px;display:flex}.wb-split__header[data-v-80bf4769]{flex-shrink:0;align-items:center;gap:10px;display:flex}.wb-input[data-v-80bf4769],.wb-select[data-v-80bf4769],.wb-textarea[data-v-80bf4769]{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-80bf4769]::placeholder,.wb-textarea[data-v-80bf4769]::placeholder{color:var(--text-placeholder);font-weight:400}.wb-input[data-v-80bf4769]{letter-spacing:-.05px;height:36px;padding:0 12px;font-size:13.5px;line-height:1.2}.wb-input[data-v-80bf4769]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background:var(--bg-container-hover)}.wb-input[data-v-80bf4769]: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-80bf4769]{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-80bf4769]:hover:not(:focus){border-color:color-mix(in srgb, var(--color-primary) 30%, var(--border-color-medium))}.wb-input--title[data-v-80bf4769]: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-80bf4769]::placeholder{color:var(--text-placeholder);font-weight:500}.wb-select[data-v-80bf4769]{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-80bf4769]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background-color:var(--bg-container-hover)}.wb-select[data-v-80bf4769]: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-80bf4769]{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-80bf4769]::placeholder{line-height:1.65}.wb-textarea[data-v-80bf4769]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background:var(--bg-container-hover)}.wb-textarea[data-v-80bf4769]: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-80bf4769]{min-height:44px;padding:8px 12px;font-size:13px}.wb-split__sub-header[data-v-80bf4769]{flex-shrink:0;justify-content:space-between;align-items:center;margin-top:8px;display:flex}.wb-split__sub-header h4[data-v-80bf4769]{color:var(--text-secondary);margin:0;font-size:13px;font-weight:600}.wb-split__sub-actions[data-v-80bf4769]{align-items:center;gap:8px;display:inline-flex}.wb-sub-list[data-v-80bf4769]{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-80bf4769]{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-80bf4769]{background:#f59e0b0a;border-color:#f59e0b8c}.wb-sub-item.is-running[data-v-80bf4769]{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-80bf4769}.wb-sub-item.is-running[data-v-80bf4769]: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-80bf4769;position:absolute;top:0;left:0;right:0}.wb-sub-item.is-running[data-v-80bf4769]: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-80bf4769;position:absolute;inset:0}@keyframes wb-progress-slide-80bf4769{0%{background-position:-50% 0}to{background-position:150% 0}}@keyframes wb-card-glow-80bf4769{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-80bf4769{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){.wb-sub-item.is-running[data-v-80bf4769],.wb-sub-item.is-running[data-v-80bf4769]:before,.wb-sub-item.is-running[data-v-80bf4769]:after{animation:none}}.wb-sub-item__dirty[data-v-80bf4769]{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-80bf4769]:before{content:"";background:#f59e0b;border-radius:50%;width:5px;height:5px;display:inline-block}.wb-dirty-badge[data-v-80bf4769]{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-80bf4769]{align-items:center;gap:8px;margin-bottom:6px;display:flex}.wb-sub-item__row--compact[data-v-80bf4769]{cursor:default;gap:6px;margin-bottom:0}.wb-sub-item__title-compact[data-v-80bf4769]{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-80bf4769]{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-80bf4769]:hover{background:var(--bg-container-hover);border-color:var(--color-primary);color:var(--color-primary)}.wb-sub-item__toggle[data-v-80bf4769]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-sub-item__undo[data-v-80bf4769]{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-80bf4769]: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-80bf4769]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-sub-item.is-done[data-v-80bf4769]: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-80bf4769]{padding:8px 10px}.wb-sub-item.is-clickable[data-v-80bf4769]{cursor:pointer}.wb-sub-item.is-clickable[data-v-80bf4769]: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-80bf4769]{color:var(--color-primary)}.wb-sub-item__status[data-v-80bf4769]{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-80bf4769]{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-80bf4769,2.4s linear infinite wb-status-shimmer-80bf4769;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-80bf4769]:before{content:"";background:#fff;border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite wb-status-dot-80bf4769;box-shadow:0 0 6px #ffffffe6}.wb-sub-item.is-running .wb-sub-item__status[data-v-80bf4769]: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-80bf4769;position:absolute;inset:0}@keyframes wb-status-shimmer-80bf4769{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes wb-status-pulse-80bf4769{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-80bf4769{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.7)}}@keyframes wb-status-sweep-80bf4769{0%{transform:translate(-100%)}to{transform:translate(100%)}}@media (prefers-reduced-motion:reduce){.wb-sub-item.is-running .wb-sub-item__status[data-v-80bf4769],.wb-sub-item.is-running .wb-sub-item__status[data-v-80bf4769]:before,.wb-sub-item.is-running .wb-sub-item__status[data-v-80bf4769]:after{animation:none}}.wb-sub-item__pid[data-v-80bf4769]{color:var(--text-tertiary);flex-shrink:0;font-family:ui-monospace,monospace;font-size:11px}.wb-sub-item__stop[data-v-80bf4769]{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-80bf4769]:hover{color:#fff;background:#ef4444;border-color:#ef4444}.wb-sub-item__row .wb-input[data-v-80bf4769]{flex:1}.wb-attachments[data-v-80bf4769]{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-80bf4769]{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-80bf4769]{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-80bf4769]{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-80bf4769]{color:var(--text-primary);letter-spacing:-.1px;align-items:center;gap:8px;font-weight:600;display:inline-flex}.wb-attachments__count[data-v-80bf4769]{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-80bf4769]{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-80bf4769]: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-80bf4769]:active:not(:disabled){transform:translateY(.5px)}.wb-attachments__add[data-v-80bf4769]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-attachments__add[data-v-80bf4769]:disabled{opacity:.5;cursor:not-allowed}.wb-attachments__list[data-v-80bf4769]{flex-wrap:wrap;gap:4px;margin:0;padding:4px;list-style:none;display:flex}.wb-attachment[data-v-80bf4769]{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-80bf4769]{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-80bf4769]{background:var(--bg-code)}.wb-attachment__icon img[data-v-80bf4769]{object-fit:cover;width:100%;height:100%}.wb-attachment__meta[data-v-80bf4769]{flex:1;min-width:0}.wb-attachment__name[data-v-80bf4769]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.wb-attachment__sub[data-v-80bf4769]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.wb-attachment__del[data-v-80bf4769]{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-80bf4769]:hover{color:#ef4444;background:#ef444414}.wb-current-project[data-v-80bf4769]{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-80bf4769]{color:var(--color-primary);flex-shrink:0;font-size:13px}.wb-current-project__label[data-v-80bf4769]{letter-spacing:.5px;color:var(--text-tertiary);text-transform:uppercase;font-size:10px;font-weight:600}.wb-current-project__name[data-v-80bf4769]{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-80bf4769]{color:var(--text-tertiary);letter-spacing:.3px;text-transform:uppercase;border-top:1px dashed var(--border-color);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-80bf4769]:first-child{border-top:none;margin-top:0;padding-top:4px}.wb-task-group__head.is-current[data-v-80bf4769]{color:var(--color-primary);border-top-color:color-mix(in srgb, var(--color-primary) 30%, transparent)}.wb-task-group__icon[data-v-80bf4769]{opacity:.8;flex-shrink:0;font-size:12px}.wb-task-group__name[data-v-80bf4769]{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.wb-task-group__count[data-v-80bf4769]{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-80bf4769]{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{$n as e,At as t,B as n,Bn as r,Bt as i,Ct as a,Dt as o,F as s,Fn as c,Ft as l,In as u,J as d,Kn as f,Ln as p,Lt as m,Mn as h,N as g,Nn as _,On as v,P as y,Qt as b,Rn as x,St as S,Un as C,V as w,Wn as T,Xn as E,Xt as D,Y as O,Yn as k,Yt as ee,Zn as A,an as te,ar as j,cr as M,fr as N,ft as ne,gt as re,hr as P,ir as ie,jn as F,kn as I,lr as L,lt as ae,mr as R,nn as z,or as B,pr as V,q as H,rn as U,rr as oe,sr as se,st as W,tr as G,tt as ce,ur as K,ut as le,vt as ue,xt as de,yt as fe,zn as q}from"./vendor-C0_tGl5f.js";import{n as J,t as pe}from"./_plugin-vue_export-helper-Bjo1gczS.js";import{t as me}from"./index-DYzZstrt.js";var he={key:0,class:`ai-split-status`},Y={key:1,class:`ai-split-status is-error`},ge={class:`ai-split-prompt-actions`},_e={key:0,class:`ai-split-prompt-editor`},ve={class:`ai-split-prompt-editor__actions`},ye={key:1,class:`ai-split-pre`},be={class:`ai-split-subhead`},xe={class:`ai-split-pre`},Se={key:0,class:`ai-split-tab-count`},Ce={class:`ai-split-pre ai-split-pre--think`},X={key:0,class:`ai-split-tab-count`},Z={class:`ai-split-pre`},we={key:0,class:`ai-split-tab-count`},Te={key:0,class:`ai-split-empty`},Ee={key:1,class:`ai-split-list`},De={class:`ai-split-list__no`},Oe={class:`ai-split-list__body`},ke={class:`ai-split-list__title`},Ae={class:`ai-split-list__desc`},je=pe(f({__name:`AISplitDialog`,props:{modelValue:{type:Boolean},title:{},desc:{},taskId:{},promptId:{}},emits:[`update:modelValue`,`confirm`],setup(t,{emit:i}){let a=t,s=i,c=K(`idle`),l=K(`prompt`),d=K(``),f=K(``),m=K(``),h=K(``),g=K(``),v=K([]),b=K(``),S=null,E=0,O=u(()=>m.value.length),k=u(()=>h.value.length),ee=u(()=>c.value===`result`&&v.value.length>0),A=u(()=>c.value===`running`);function te(){M(),s(`update:modelValue`,!1)}function M(){S&&=(S.abort(),null)}function ie(){M(),c.value=`idle`,l.value=`prompt`,d.value=``,f.value=``,m.value=``,h.value=``,g.value=``,v.value=[],b.value=``}async function F(){if(!a.title.trim()){y.warning(J(`@WORKBENCH:请先填写任务标题`));return}ie();let e=++E;c.value=`running`,l.value=`thinking`,S=new AbortController;let t=S;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:a.title,desc:a.desc,taskId:a.taskId||``,promptId:a.promptId||``}),signal:t.signal});if(e!==E)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let r=n.body.getReader(),i=new TextDecoder(`utf-8`),o=``,s=null;for(;;){let{value:t,done:n}=await r.read();if(e!==E)return;if(n)break;o+=i.decode(t,{stream:!0});let a=o.split(`
|
|
2
|
+
`);o=a.pop()??``;for(let e of a){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||``,f.value=r.prompt?.user||``;break;case`thinking`:m.value+=String(r.delta||``);break;case`content`:h.value+=String(r.delta||``);break;case`done`:s=r;break;case`error`:throw Error(r.error||`AI 拆分失败`)}}}if(e!==E)return;if(!s)throw Error(J(`@WORKBENCH:AI 未返回结果`));v.value=Array.isArray(s.subtasks)?s.subtasks:[],g.value=s.raw||h.value,m.value||=J(`@WORKBENCH:(当前模型未返回独立的思考内容,可切换到「原始结果」查看完整输出)`),c.value=`result`,l.value=v.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:E}}),e!==E||n?.name===`AbortError`||t.signal.aborted)return;c.value=`error`,b.value=n?.message||String(n)}finally{e===E&&(S=null)}}function I(){ee.value&&(s(`confirm`,v.value.slice()),s(`update:modelValue`,!1))}function L(){F()}j(()=>a.modelValue,e=>{e&&c.value===`idle`&&F()});let ae=K(!1),R=K(``),z=K(!1);function V(){R.value=d.value,ae.value=!0}async function H(){if(!R.value.trim()){y.warning(J(`@WORKBENCH:指令内容不能为空`));return}z.value=!0;try{let e=await fetch(`/api/workbench/tasks/ai-subtask-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:R.value})}).then(e=>e.json());e.success?(y.success(J(`@WORKBENCH:已保存指令`)),ae.value=!1,L()):y.error(e.error||J(`@WORKBENCH:保存失败`))}catch(e){y.error(J(`@WORKBENCH:保存失败: `)+(e?.message||e))}finally{z.value=!1}}function U(){ae.value=!1}return(i,a)=>{let u=de,g=ne,y=re,S=n,E=w,j=ce;return e(),x(j,{"model-value":t.modelValue,"onUpdate:modelValue":a[2]||=e=>s(`update:modelValue`,e),title:N(J)(`@WORKBENCH:AI 拆分任务`),width:`800px`,"close-on-click-modal":!1,"close-on-press-escape":!A.value,"show-close":!A.value,onClose:te},{footer:B(()=>[c.value===`error`?(e(),x(g,{key:0,onClick:L},{default:B(()=>[C(P(N(J)(`@WORKBENCH:重新生成`)),1)]),_:1})):q(``,!0),T(g,{onClick:te},{default:B(()=>[C(P(N(J)(`@WORKBENCH:取消`)),1)]),_:1}),T(g,{type:`primary`,disabled:!ee.value,onClick:I},{default:B(()=>[C(P(N(J)(`@WORKBENCH:确认入库`))+` (`+P(v.value.length)+`) `,1)]),_:1},8,[`disabled`])]),default:B(()=>[A.value?(e(),r(`div`,he,[T(u,{class:`is-loading`},{default:B(()=>[T(N(D))]),_:1}),p(`span`,null,P(N(J)(`@WORKBENCH:AI 正在拆分…`)),1)])):c.value===`error`?(e(),r(`div`,Y,[T(u,{color:`#f56c6c`},{default:B(()=>[T(N(o))]),_:1}),p(`span`,null,P(b.value),1)])):q(``,!0),T(E,{modelValue:l.value,"onUpdate:modelValue":a[1]||=e=>l.value=e,class:`ai-split-tabs`},{default:B(()=>[T(S,{label:N(J)(`@WORKBENCH:提示词`),name:`prompt`},{default:B(()=>[p(`div`,ge,[T(g,{size:`small`,disabled:A.value,onClick:V},{default:B(()=>[C(P(N(J)(`@WORKBENCH:编辑指令`)),1)]),_:1},8,[`disabled`])]),ae.value?(e(),r(`div`,_e,[T(y,{modelValue:R.value,"onUpdate:modelValue":a[0]||=e=>R.value=e,type:`textarea`,rows:12,placeholder:N(J)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`]),p(`div`,ve,[T(g,{size:`small`,onClick:U},{default:B(()=>[C(P(N(J)(`@WORKBENCH:取消`)),1)]),_:1}),T(g,{size:`small`,type:`primary`,loading:z.value,onClick:H},{default:B(()=>[C(P(N(J)(`@WORKBENCH:保存并重跑`)),1)]),_:1},8,[`loading`])])])):(e(),r(`pre`,ye,P(d.value||`(等待 LLM 启动…)`),1)),p(`h4`,be,P(N(J)(`@WORKBENCH:用户提示词(拼装后)`)),1),p(`pre`,xe,P(f.value||`(等待 LLM 启动…)`),1)]),_:1},8,[`label`]),T(S,{name:`thinking`},{label:B(()=>[p(`span`,null,[C(P(N(J)(`@WORKBENCH:思考`))+` `,1),O.value>0?(e(),r(`span`,Se,`(`+P(O.value)+`)`,1)):q(``,!0)])]),default:B(()=>[p(`pre`,Ce,P(m.value||N(J)(`@WORKBENCH:(暂无输出)`)),1)]),_:1}),T(S,{name:`raw`},{label:B(()=>[p(`span`,null,[C(P(N(J)(`@WORKBENCH:原始结果`))+` `,1),k.value>0?(e(),r(`span`,X,`(`+P(k.value)+`)`,1)):q(``,!0)])]),default:B(()=>[p(`pre`,Z,P(h.value||N(J)(`@WORKBENCH:(暂无输出)`)),1)]),_:1}),T(S,{name:`confirm`,disabled:v.value.length===0},{label:B(()=>[p(`span`,null,[C(P(N(J)(`@WORKBENCH:确认入库`))+` `,1),v.value.length>0?(e(),r(`span`,we,`(`+P(v.value.length)+`)`,1)):q(``,!0)])]),default:B(()=>[v.value.length===0?(e(),r(`div`,Te,P(N(J)(`@WORKBENCH:(暂无子任务)`)),1)):(e(),r(`ul`,Ee,[(e(!0),r(_,null,G(v.value,(t,n)=>(e(),r(`li`,{key:n,class:`ai-split-list__item`},[p(`div`,De,P(n+1),1),p(`div`,Oe,[p(`div`,ke,P(t.title),1),p(`div`,Ae,P(t.desc),1)])]))),128))]))]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`])]),_:1},8,[`model-value`,`title`,`close-on-press-escape`,`show-close`])}}}),[[`__scopeId`,`data-v-15311727`]]),Me={class:`wb-attachments__head`},Ne={class:`wb-attachments__label`},Pe={class:`wb-attachments__count`},Fe=[`disabled`],Ie={key:0,class:`wb-attachments__paste-hint`},Le={key:1,class:`wb-attachments__list`},Re=[`title`,`onClick`],ze=[`src`,`alt`],Be={key:1},Ve={class:`wb-attachment__meta`},He=[`title`],Ue={class:`wb-attachment__sub`},We=[`onClick`,`title`],Ge=f({__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,a=n,o=u(()=>i.attachments.filter(e=>i.isImage(e))),s=u(()=>o.value.map(e=>`/api/workbench/attachments/${e.id}/raw`)),l=K(0),d=K(!1);function f(e){if(i.isImage(e)){let t=o.value.findIndex(t=>t.id===e.id);l.value=t>=0?t:0,d.value=!0}else window.open(`/api/workbench/attachments/${e.id}/raw`,`_blank`,`noopener`)}function m(){d.value=!1}return(n,i)=>(e(),r(_,null,[p(`div`,{class:V([`wb-attachments`,{"is-paste-hover":t.isPasteHover}]),onPaste:i[1]||=e=>a(`paste`,e),onDrop:i[2]||=h(e=>a(`drop`,e),[`prevent`]),onDragover:i[3]||=h(e=>a(`dragover`,e),[`prevent`]),onDragenter:i[4]||=h(e=>a(`dragenter`,e),[`prevent`]),onDragleave:i[5]||=e=>a(`dragleave`,e)},[p(`div`,Me,[p(`span`,Ne,[C(P(N(J)(`@WORKBENCH:附件`))+` `,1),p(`span`,Pe,P(t.attachments.length)+` / `+P(t.maxCount),1)]),p(`button`,{class:`wb-attachments__add`,disabled:t.isUploading||t.attachments.length>=t.maxCount,onClick:i[0]||=(...e)=>t.onPick&&t.onPick(...e)},P(t.isUploading?N(J)(`@WORKBENCH:上传中…`):N(J)(`@WORKBENCH:添加附件`)),9,Fe)]),t.isPasteHover?(e(),r(`div`,Ie,P(N(J)(`@WORKBENCH:粘贴图片以快速添加`)),1)):q(``,!0),t.attachments.length>0?(e(),r(`ul`,Le,[(e(!0),r(_,null,G(t.attachments,n=>(e(),r(`li`,{key:n.id,class:`wb-attachment`},[p(`button`,{type:`button`,class:`wb-attachment__preview`,title:N(J)(`@WORKBENCH:点击预览`),onClick:e=>f(n)},[p(`div`,{class:V([`wb-attachment__icon`,{"wb-attachment__icon--img":t.isImage(n)}])},[t.isImage(n)?(e(),r(`img`,{key:0,src:`/api/workbench/attachments/${n.id}/raw`,alt:n.originalName,loading:`lazy`},null,8,ze)):(e(),r(`span`,Be,P(n.ext.toUpperCase()),1))],2),p(`div`,Ve,[p(`div`,{class:`wb-attachment__name`,title:n.originalName},P(n.originalName),9,He),p(`div`,Ue,P(t.humanSize(n.size))+` · `+P(n.mimeType),1)])],8,Re),p(`button`,{class:`wb-attachment__del`,onClick:h(e=>t.onRemove(n),[`stop`]),title:N(J)(`@WORKBENCH:删除`)},`×`,8,We)]))),128))])):q(``,!0)],34),(e(),x(c,{to:`body`},[d.value&&s.value.length>0?(e(),x(N(O),{key:0,"url-list":s.value,"initial-index":l.value,"hide-on-click-modal":!0,onClose:m},null,8,[`url-list`,`initial-index`])):q(``,!0)]))],64))}}),Ke=[`open`],qe={class:`wb-log-summary`},Je={class:`wb-log-summary__left`},Ye={key:0},Q={key:1},Xe={key:2},Ze={class:`wb-log-summary__right`},Qe={class:`wb-log-summary__meta`},$e=[`title`],et={key:0,class:`wb-log-section`},tt={class:`wb-log-section__summary`},$={class:`wb-log-section__tag wb-log-section__tag--user`},nt={class:`wb-log-section__count`},rt=[`title`],it={class:`wb-log-section__pre wb-log-section__pre--user`},at={key:1,class:`wb-log-section`},ot={class:`wb-log-section__summary`},st={class:`wb-log-section__tag wb-log-section__tag--think`},ct={class:`wb-log-section__count`},lt=[`title`],ut={class:`wb-log-section__pre wb-log-section__pre--think`},dt={class:`wb-log-pre__head`},ft={class:`wb-log-pre__label`},pt={class:`wb-log-pre__meta`},mt=[`title`],ht=64*1024,gt=pe(f({__name:`JobLogDetails`,props:{job:{}},setup(t){let n=t,i=u(()=>n.job.status===`running`||n.job.status===`pending`);function a(){let e=n.job.output||``;return e?e.length<=ht?e:`${J(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function o(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 s(e){let t=n.job[e]||``;if(!t){y.warning(J(`@WORKBENCH:暂无内容可复制`));return}await o(t)?y.success(J(`@WORKBENCH:已复制到剪贴板`)):y.error(J(`@WORKBENCH:复制失败`))}async function c(){let e=[];if(n.job.prompt&&e.push(`## ${J(`@WORKBENCH:用户提示词`)}\n\n${n.job.prompt}`),n.job.thinking&&e.push(`## ${J(`@WORKBENCH:Claude 思考`)}\n\n${n.job.thinking}`),n.job.output&&e.push(`## ${J(`@WORKBENCH:模型返回`)}\n\n${n.job.output}`),!e.length){y.warning(J(`@WORKBENCH:暂无内容可复制`));return}await o(e.join(`
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`))?y.success(J(`@WORKBENCH:已复制到剪贴板`)):y.error(J(`@WORKBENCH:复制失败`))}let l=K(null);return j(()=>(n.job.output||``).length,async()=>{i.value&&(await k(),l.value&&(l.value.scrollTop=l.value.scrollHeight))}),(n,o)=>(e(),r(`details`,{class:`wb-log-details`,open:i.value},[p(`summary`,qe,[p(`span`,Je,[t.job.status===`running`?(e(),r(`span`,Ye,`● `+P(N(J)(`@WORKBENCH:正在执行…`)),1)):t.job.status===`pending`?(e(),r(`span`,Q,P(N(J)(`@WORKBENCH:排队中…`)),1)):(e(),r(`span`,Xe,P(N(J)(`@WORKBENCH:查看执行日志`)),1))]),p(`span`,Ze,[p(`span`,Qe,P((t.job.output||``).length)+` `+P(N(J)(`@WORKBENCH:字符`)),1),p(`button`,{type:`button`,class:`wb-log-copy`,title:N(J)(`@WORKBENCH:复制全部(含提示词与输出)`),onClick:h(c,[`stop`])},` ⧉ `+P(N(J)(`@WORKBENCH:复制全部`)),9,$e)])]),t.job.prompt?(e(),r(`details`,et,[p(`summary`,tt,[p(`span`,$,P(N(J)(`@WORKBENCH:用户提示词`)),1),p(`span`,nt,P((t.job.prompt||``).length)+` `+P(N(J)(`@WORKBENCH:字符`)),1),p(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:N(J)(`@WORKBENCH:复制用户提示词`),onClick:o[0]||=h(e=>s(`prompt`),[`stop`])},` ⧉ `+P(N(J)(`@WORKBENCH:复制`)),9,rt)]),p(`pre`,it,P(t.job.prompt),1)])):q(``,!0),t.job.thinking?(e(),r(`details`,at,[p(`summary`,ot,[p(`span`,st,P(N(J)(`@WORKBENCH:Claude 思考`)),1),p(`span`,ct,P((t.job.thinking||``).length)+` `+P(N(J)(`@WORKBENCH:字符`)),1),p(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:N(J)(`@WORKBENCH:复制思考内容`),onClick:o[1]||=h(e=>s(`thinking`),[`stop`])},` ⧉ `+P(N(J)(`@WORKBENCH:复制`)),9,lt)]),p(`pre`,ut,P(t.job.thinking),1)])):q(``,!0),p(`div`,dt,[p(`span`,ft,P(N(J)(`@WORKBENCH:模型返回`)),1),p(`span`,pt,P((t.job.output||``).length)+` `+P(N(J)(`@WORKBENCH:字符`)),1),p(`button`,{type:`button`,class:`wb-log-copy wb-log-copy--sm`,title:N(J)(`@WORKBENCH:复制模型返回`),onClick:o[2]||=h(e=>s(`output`),[`stop`])},` ⧉ `+P(N(J)(`@WORKBENCH:复制`)),9,mt)]),p(`pre`,{ref_key:`preRef`,ref:l,class:`wb-log-pre`},P(a()||N(J)(`@WORKBENCH:(暂无输出)`)),513)],8,Ke))}}),[[`__scopeId`,`data-v-ae32f993`]]);function _t(e){switch(e){case`todo`:return J(`@WORKBENCH:待执行`);case`running`:return J(`@WORKBENCH:执行中`);case`done`:return J(`@WORKBENCH:已完成`);case`error`:return J(`@WORKBENCH:出错`);case`cancelled`:return J(`@WORKBENCH:已取消`);case`pending`:return J(`@WORKBENCH:排队中`);default:return e}}function vt(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 yt={class:`exec-logs`},bt={class:`exec-logs__head`},xt={class:`exec-logs__title-block`},St={class:`exec-logs__title`},Ct={class:`exec-logs__stats`},wt={class:`exec-logs__head-actions`},Tt={class:`exec-logs__config`},Et={class:`exec-logs__config-label`},Dt={class:`exec-logs__config-field`},Ot={class:`exec-logs__config-name`},kt={class:`exec-logs__config-field`},At={class:`exec-logs__config-name`},jt={class:`exec-logs__filter`},Mt={key:0,class:`exec-logs__batch-meta`},Nt={key:0,class:`exec-logs__batch`},Pt={class:`exec-logs__list`},Ft={key:0,class:`exec-logs__empty`},It={class:`exec-logs__empty-art`,"aria-hidden":`true`},Lt={class:`exec-logs__empty-title`},Rt={class:`exec-logs__empty-hint`},zt={class:`exec-card__head`},Bt=[`title`],Vt={class:`exec-card__meta`},Ht={key:0,class:`exec-card__task`},Ut={key:1,class:`exec-card__time`},Wt={key:2,class:`exec-card__exit`},Gt=[`title`,`onClick`],Kt={key:0,class:`exec-card__error`},qt={key:1,class:`exec-logs__pager`},Jt=50,Yt=pe(f({__name:`ExecutionLogManager`,setup(t){function n(e){return e instanceof Error?e.message:String(e)}let i=K([]),a=K(0),o=L({count:0,sizeMB:0,byStatus:{}}),c=K(!1),l=K(new Set),f=L({q:``,status:``,page:1}),h=K({maxCount:500,maxSizeMB:256}),v=L({maxCount:500,maxSizeMB:256}),b=K(!1),x=[{value:`pending`,label:J(`@WORKBENCH:排队中`)},{value:`running`,label:J(`@WORKBENCH:执行中`)},{value:`done`,label:J(`@WORKBENCH:已完成`)},{value:`error`,label:J(`@WORKBENCH:出错`)},{value:`cancelled`,label:J(`@WORKBENCH:已取消`)}],S=u(()=>i.value.length>0&&i.value.every(e=>l.value.has(e.id))),w=u(()=>i.value.some(e=>l.value.has(e.id))&&!S.value);async function E(){c.value=!0;try{let e=new URLSearchParams;f.q&&e.set(`q`,f.q),f.status&&e.set(`status`,f.status),e.set(`limit`,String(Jt)),e.set(`offset`,String((f.page-1)*Jt));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);i.value=t.jobs,a.value=t.total,o.count=t.stats.count,o.sizeMB=t.stats.sizeMB,o.byStatus=t.stats.byStatus;let n=new Set(i.value.map(e=>e.id));for(let e of Array.from(l.value))n.has(e)||l.value.delete(e)}catch(e){y.error(J(`@WORKBENCH:加载失败`)+`: `+n(e))}finally{c.value=!1}}async function D(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(h.value=e.config,v.maxCount=e.config.maxCount,v.maxSizeMB=e.config.maxSizeMB)}catch{}}async function O(){b.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:v.maxCount,maxSizeMB:v.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);h.value=e.config,y.success(J(`@WORKBENCH:已保存策略`)),await E()}catch(e){y.error(J(`@WORKBENCH:保存失败`)+`: `+n(e))}finally{b.value=!1}}function k(){f.page=1,E()}function ee(){f.q=``,f.status=``,f.page=1,E()}function j(e,t){t?l.value.add(e):l.value.delete(e),l.value=new Set(l.value)}function M(e){if(e)for(let e of i.value)l.value.add(e.id);else for(let e of i.value)l.value.delete(e.id);l.value=new Set(l.value)}async function ie(e){try{await g.confirm(J(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),J(`@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`);l.value.delete(e),l.value=new Set(l.value),await E()}catch(e){y.error(J(`@WORKBENCH:保存失败`)+`: `+n(e))}}async function I(){let e=Array.from(l.value);if(e.length!==0){try{await g.confirm(J(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),J(`@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`);y.success(J(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),l.value=new Set,await E()}catch(e){y.error(J(`@WORKBENCH:保存失败`)+`: `+n(e))}}}async function z(){let e=o.count;if(e!==0){try{await g.confirm(J(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),J(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:J(`@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`);y.success(J(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),l.value=new Set,await E()}catch(e){y.error(J(`@WORKBENCH:保存失败`)+`: `+n(e))}}}function U(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 A(()=>{E(),D()}),(t,n)=>{let u=ne,h=d,g=re,y=ae,D=le,A=W,L=de,oe=H,ce=s;return e(),r(`div`,yt,[p(`header`,bt,[p(`div`,xt,[p(`h2`,St,P(N(J)(`@WORKBENCH:执行日志`)),1),p(`span`,Ct,P(N(J)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:o.count,size:o.sizeMB})),1)]),p(`div`,wt,[T(u,{icon:N(te),size:`small`,loading:c.value,onClick:E},{default:B(()=>[C(P(N(J)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),T(u,{type:`danger`,plain:``,size:`small`,disabled:o.count===0,onClick:z},{default:B(()=>[C(P(N(J)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),p(`div`,Tt,[p(`span`,Et,P(N(J)(`@WORKBENCH:保存策略`)),1),p(`span`,Dt,[p(`span`,Ot,P(N(J)(`@WORKBENCH:最大条数`)),1),T(h,{modelValue:v.maxCount,"onUpdate:modelValue":n[0]||=e=>v.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),p(`span`,kt,[p(`span`,At,P(N(J)(`@WORKBENCH:最大体积 (MB)`)),1),T(h,{modelValue:v.maxSizeMB,"onUpdate:modelValue":n[1]||=e=>v.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),T(u,{type:`primary`,size:`small`,loading:b.value,onClick:O},{default:B(()=>[C(P(N(J)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),p(`div`,jt,[T(g,{modelValue:f.q,"onUpdate:modelValue":n[2]||=e=>f.q=e,placeholder:N(J)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:F(k,[`enter`]),onClear:k},null,8,[`modelValue`,`placeholder`]),T(D,{modelValue:f.status,"onUpdate:modelValue":n[3]||=e=>f.status=e,placeholder:N(J)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:k},{default:B(()=>[(e(),r(_,null,G(x,e=>T(y,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),T(u,{size:`small`,onClick:ee},{default:B(()=>[C(P(N(J)(`@WORKBENCH:重置`)),1)]),_:1}),n[5]||=p(`span`,{class:`exec-logs__filter-spacer`},null,-1),l.value.size>0?(e(),r(`span`,Mt,P(N(J)(`@WORKBENCH:已选择 {count} 项`,{count:l.value.size})),1)):q(``,!0)]),l.value.size>0?(e(),r(`div`,Nt,[T(A,{"model-value":S.value,indeterminate:w.value,onChange:M},{default:B(()=>[C(P(S.value?N(J)(`@WORKBENCH:取消全选`):N(J)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),T(u,{type:`danger`,size:`small`,onClick:I},{default:B(()=>[C(P(N(J)(`@WORKBENCH:批量删除`)),1)]),_:1})])):q(``,!0),se((e(),r(`div`,Pt,[!c.value&&i.value.length===0?(e(),r(`div`,Ft,[p(`div`,It,[T(L,null,{default:B(()=>[T(N(m))]),_:1})]),p(`div`,Lt,P(N(J)(`@WORKBENCH:暂无执行日志`)),1),p(`div`,Rt,P(N(J)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):q(``,!0),(e(!0),r(_,null,G(i.value,t=>(e(),r(`article`,{key:t.id,class:V([`exec-card`,{"is-selected":l.value.has(t.id)}])},[p(`header`,zt,[T(A,{"model-value":l.value.has(t.id),onChange:e=>j(t.id,e)},null,8,[`model-value`,`onChange`]),p(`span`,{class:`exec-card__status`,style:R({color:N(vt)(t.status),borderColor:N(vt)(t.status)})},P(N(_t)(t.status)),5),p(`span`,{class:`exec-card__title`,title:t.title||N(J)(`@WORKBENCH:无标题`)},P(t.title||N(J)(`@WORKBENCH:无标题`)),9,Bt),n[6]||=p(`span`,{class:`exec-card__spacer`},null,-1),p(`span`,Vt,[t.taskTitle?(e(),r(`span`,Ht,`📁 `+P(t.taskTitle),1)):q(``,!0),t.startedAt?(e(),r(`span`,Ut,`⏱ `+P(U(t.startedAt,t.endedAt)),1)):q(``,!0),t.exitCode===null?q(``,!0):(e(),r(`span`,Wt,`exit `+P(t.exitCode),1))]),p(`button`,{type:`button`,class:`exec-card__del`,title:N(J)(`@WORKBENCH:删除`),onClick:e=>ie(t.id)},`×`,8,Gt)]),t.error?(e(),r(`p`,Kt,`⚠ `+P(t.error),1)):q(``,!0),T(gt,{job:t},null,8,[`job`])],2))),128))])),[[ce,c.value]]),a.value>Jt?(e(),r(`footer`,qt,[T(oe,{"current-page":f.page,"onUpdate:currentPage":n[4]||=e=>f.page=e,"page-size":Jt,total:a.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:E},null,8,[`current-page`,`total`])])):q(``,!0)])}}}),[[`__scopeId`,`data-v-13ab606e`]]),Xt={class:`workbench`},Zt={class:`wb-tabs`},Qt={key:0,class:`workbench__editor-row`},$t={class:`wb-sidebar`},en={class:`wb-section`},tn={class:`wb-section__head`},nn={class:`wb-section__tag`},rn={class:`wb-section__title`},an={class:`wb-section__count`},on={key:0,class:`wb-current-project`},sn={class:`wb-current-project__label`},cn=[`title`],ln={class:`wb-task-list`},un=[`title`],dn={class:`wb-task-group__count`},fn=[`data-icon`,`onClick`],pn=[`data-icon`],mn={class:`wb-task-item__body`},hn=[`title`],gn={class:`wb-task-item__meta`},_n=[`title`],vn={class:`wb-task-item__num`},yn=[`title`],bn={class:`wb-task-item__num`},xn=[`title`],Sn=[`title`],Cn=[`onClick`,`title`,`aria-label`],wn={key:0,class:`wb-empty`},Tn={class:`wb-empty__icon`},En={class:`wb-empty__text`},Dn={class:`wb-empty__hint`},On={class:`wb-section`},kn={class:`wb-section__head`},An={class:`wb-section__tag wb-section__tag--accent`},jn={class:`wb-section__title`},Mn={class:`wb-section__count`},Nn=[`title`,`aria-label`],Pn={class:`wb-prompt-list`},Fn={class:`wb-prompt-item__icon`},In=[`onClick`,`title`],Ln=[`title`],Rn=[`onClick`,`title`,`aria-label`],zn={key:0,class:`wb-empty wb-empty--compact`},Bn={class:`wb-split`},Vn={key:0,class:`wb-placeholder`},Hn={class:`wb-split__header`},Un=[`placeholder`],Wn={value:null},Gn=[`value`],Kn=[`placeholder`],qn={class:`wb-split__sub-header`},Jn={class:`wb-split__sub-actions`},Yn={key:0,class:`wb-dirty-badge`},Xn={class:`wb-sub-list`},Zn=[`onClick`],Qn={key:0,class:`wb-sub-item__row wb-sub-item__row--compact`},$n=[`title`],er=[`title`],tr=[`title`,`aria-label`,`onClick`],nr=[`title`,`aria-label`,`onClick`],rr=[`title`,`aria-label`,`onClick`],ir={class:`wb-sub-item__row`},ar=[`onUpdate:modelValue`,`placeholder`,`onPaste`],or=[`title`],sr=[`title`],cr=[`title`,`onClick`],lr=[`title`,`aria-label`,`onClick`],ur=[`title`,`aria-label`,`onClick`],dr=[`onClick`],fr=[`onUpdate:modelValue`,`placeholder`,`onPaste`],pr={key:0,class:`wb-empty wb-empty--rich`},mr={class:`wb-empty__art`,"aria-hidden":`true`},hr={class:`wb-empty__title`},gr={class:`wb-empty__hint`},_r={class:`wb-empty__cta`},vr=[`disabled`],yr={style:{display:`flex`,gap:`8px`,"align-items":`center`}},br=`__no_project__`,xr=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,Sr=5*1024*1024,Cr=pe(f({__name:`WorkbenchView`,setup(n){let o=K([]),s=K([]),c=K([]),d=K(`editor`),f=K(null),w=u(()=>s.value.find(e=>e.id===f.value)||null),D=K(new Map);function O(){let e=new Map;if(w.value)for(let t of w.value.subtasks)e.set(t.id,{id:t.id,title:t.title,desc:t.desc,promptOverride:t.promptOverride});D.value=e}let k=u(()=>{let e=new Set;if(!w.value)return e;for(let t of w.value.subtasks){let n=D.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}),te=u(()=>k.value.size>0),j=L({visible:!1,editing:null,name:``,content:``,aiLoading:!1}),F=L({visible:!1,text:``,loading:!1,saving:!1}),H=L({visible:!1,editing:null,title:``,desc:``,promptId:null}),W=null,pe=me();function he(){pe.setRunning(c.value.filter(e=>e.status===`running`).length)}function Y(e){return c.value.find(t=>t.subId===e)||null}function ge(e,t){if(e===`hello`){c.value=t.jobs||[],he();return}if(e===`job:update`){let e=t,n=c.value.findIndex(t=>t.id===e.id);n>=0?c.value[n]=e:c.value.push(e),he();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=c.value.findIndex(e=>e.id===t.id);if(i<0)return;let a=c.value[i][n]||``;c.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`&&y.error(t.error||J(`@WORKBENCH:执行出错`))}let _e=[{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 ve(e){let t=(e||``).trim();if(!t)return`doc`;for(let e of _e)if(e.patterns.some(e=>e.test(t)))return e.key;return`doc`}let ye={icon:M(m),image:M(z),test:M(i),ui:M(b),doc:M(m),idea:M(b)};function be(e){return ye[ve(e.title)]}function xe(e){return Array.isArray(e.attachments)?e.attachments.length:0}function Se(e){return Array.isArray(e.subtasks)?e.subtasks.length:0}async function Ce(){o.value=(await fetch(`/api/workbench/prompts`).then(e=>e.json()).catch(()=>({prompts:[]}))).prompts||[]}async function X(){s.value=(await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}))).tasks||[],!f.value&&s.value.length>0&&(f.value=s.value[0].id),O()}let Z=K({path:``,name:``});async function we(){let e=await fetch(`/api/workbench/current-project`).then(e=>e.json()).catch(()=>({}));e&&typeof e.projectPath==`string`&&(Z.value={path:e.projectPath,name:e.projectName||``})}let Te=u(()=>{let e=s.value,t=new Map;for(let n of e){let e=(n.projectPath||``).trim()||br;t.has(e)||t.set(e,[]),t.get(e).push(n)}let n=Z.value.path,r=Array.from(t.keys()).sort((e,t)=>e===n?-1:t===n||e===br?1:t===br?-1:e.localeCompare(t));return{groups:r.map(e=>({path:e,label:e===br?J(`@WORKBENCH:未关联项目`):e,tasks:t.get(e)})),hasMultiple:r.length>1}});function Ee(e){if(!e||e===br)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}async function De(){c.value=(await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}))).jobs||[],he()}function Oe(){W&&=(W.close(),null),W=new EventSource(`/api/workbench/events`),W.onmessage=e=>{try{let t=JSON.parse(e.data);ge(t.event,t.payload)}catch{}},W.onerror=()=>{W&&=(W.close(),null),setTimeout(Oe,3e3)}}function ke(){j.editing=null,j.name=``,j.content=``,j.aiLoading=!1,j.visible=!0}function Ae(e){j.editing=e,j.name=e.name,j.content=e.content,j.aiLoading=!1,j.visible=!0}async function Me(){if(!j.aiLoading){j.aiLoading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-generate`,{method:`POST`}).then(e=>e.json());e.success?(j.name=e.name||j.name,j.content=e.result||``,y.success(J(`@WORKBENCH:已生成,可继续编辑`))):y.error(e.error||J(`@WORKBENCH:生成失败`))}catch(e){y.error(J(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{j.aiLoading=!1}}}async function Ne(){F.visible=!0,F.loading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`).then(e=>e.json());e.success?F.text=e.instruction||``:y.error(e.error||J(`@WORKBENCH:读取指令失败`))}catch(e){y.error(J(`@WORKBENCH:读取指令失败`)+`: `+(e&&e.message||e))}finally{F.loading=!1}}async function Pe(){if(!F.text.trim()){y.warning(J(`@WORKBENCH:指令内容不能为空`));return}F.saving=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:F.text})}).then(e=>e.json());e.success?(y.success(J(`@WORKBENCH:已保存指令`)),F.visible=!1):y.error(e.error||J(`@WORKBENCH:保存失败`))}catch(e){y.error(J(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{F.saving=!1}}async function Fe(){if(!j.name.trim()||!j.content.trim()){y.warning(J(`@WORKBENCH:名称和内容不能为空`));return}let e={id:j.editing?.id,name:j.name.trim(),content:j.content},t=await fetch(`/api/workbench/prompts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(y.success(J(`@WORKBENCH:已保存`)),j.visible=!1,Ce()):y.error(t.error||J(`@WORKBENCH:保存失败`))}async function Ie(e){await g.confirm(J(`@WORKBENCH:删除提示词「{name}」?`,{name:e.name}),J(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/prompts/${e.id}`,{method:`DELETE`}),Ce();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)}));X()}function Le(){H.editing=null,H.title=``,H.desc=``,H.promptId=null,H.visible=!0}async function Re(){if(!H.title.trim()){y.warning(J(`@WORKBENCH:标题必填`));return}let e={id:H.editing?.id,title:H.title.trim(),desc:H.desc,promptId:H.promptId,subtasks:H.editing?.subtasks||[]};!H.editing?.id&&Z.value.path&&(e.projectPath=Z.value.path);let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(y.success(J(`@WORKBENCH:已保存`)),H.visible=!1,X(),f.value||=t.task.id):y.error(t.error||J(`@WORKBENCH:保存失败`))}async function ze(e){await g.confirm(J(`@WORKBENCH:删除任务「{title}」及其所有子任务?`,{title:e.title}),J(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),f.value===e.id&&(f.value=null),X()}function Be(e){f.value!==e.id&&(f.value=e.id,O())}function Ve(){if(!w.value)return;let e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:J(`@WORKBENCH:新子任务`),desc:``,status:`todo`,promptOverride:``};w.value.subtasks.push(e),Ue(!1)}function He(e){w.value&&(w.value.subtasks=w.value.subtasks.filter(t=>t.id!==e.id),Ue(!1))}async function Ue(e){if(!w.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(w.value)}).then(e=>e.json());return t.success?(e&&y.success(J(`@WORKBENCH:已保存拆分`)),await X(),!0):(y.error(t.error||J(`@WORKBENCH:保存失败`)),!1)}async function We(){await Ue(!0)}let Ke=K(!1);function qe(){if(w.value){if(!(w.value.title||``).trim()){y.warning(J(`@WORKBENCH:请先填写任务标题`));return}Ke.value=!0}}function Je(e){if(w.value){for(let t of e)w.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:[]});y.success(J(`@WORKBENCH:已生成 {n} 个子任务,请审阅后保存`,{n:e.length}))}}async function Ye(e){if(!e.subtasks||e.subtasks.length===0){y.warning(J(`@WORKBENCH:请先拆分任务`));return}if(w.value&&w.value.id===e.id){let t=s.value.find(t=>t.id===e.id);if((!t||t.title!==w.value.title||t.desc!==w.value.desc||JSON.stringify(t.subtasks)!==JSON.stringify(w.value.subtasks)||t.promptId!==w.value.promptId)&&!await Ue(!1))return}let t=await fetch(`/api/workbench/tasks/${e.id}/run`,{method:`POST`}).then(e=>e.json());t.success?y.success(t.message||J(`@WORKBENCH:已加入执行队列`)):y.error(t.error||J(`@WORKBENCH:执行失败`))}let Q=K(new Set);function Xe(e){return e.status===`done`?!Q.value.has(e.id):!1}function Ze(e){Q.value.has(e.id)?Q.value.delete(e.id):Q.value.add(e.id),Q.value=new Set(Q.value)}async function Qe(e){if(!w.value)return;let t=D.value.get(e.id);t&&D.value.set(e.id,{...t,status:`todo`}),e.status=`todo`,await Ue(!1)}async function $e(e){try{await g.confirm(J(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),J(`@WORKBENCH:停止执行`),{confirmButtonText:J(`@WORKBENCH:停止`),cancelButtonText:J(`@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?y.success(J(`@WORKBENCH:已发送停止信号`)):y.error(t.error||J(`@WORKBENCH:停止失败`))}A(async()=>{await Promise.all([Ce(),X(),we(),De()]),Oe()}),E(()=>{W&&=(W.close(),null)});let et=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`]),tt=K({}),$=K(null);function nt(e){return!!tt.value[e]}function rt(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function it(e){return e.kind===`task`?`task-${e.task?.id??``}`:`sub-${e.sub.id}`}function at(e){let t=e.kind===`task`?e.task?.attachments:e.sub.attachments;return Array.isArray(t)?t:[]}function ot(e,t){e.kind===`task`?e.task&&(e.task.attachments=t):e.sub.attachments=t}function st(e){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments`:`/api/workbench/subtasks/${e.sub.id}/attachments`}function ct(e,t){return e.kind===`task`?`/api/workbench/tasks/${e.task?.id??``}/attachments/${t}`:`/api/workbench/subtasks/${e.sub.id}/attachments/${t}`}function lt(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`);dt(t,rt(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&&dt(t,rt(n,n.name||`pasted-file`))}}}function ut(e,t){$.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>dt(t,e))}async function dt(e,t){if(t.size>Sr){y.error(`「${t.name}」${J(`@WORKBENCH:超过 5MB 限制`)}`);return}if(!et.has(t.type)&&!t.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){y.error(`${J(`@WORKBENCH:不支持的文件类型`)}(${t.name})`);return}if(at(e).length>=9){y.error(J(`@WORKBENCH:单个任务最多 9 个附件`));return}let n=it(e);tt.value[n]=!0;try{let n=await fetch(st(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=at(e);r.push(n.attachment),ot(e,r),y.success(`${J(`@WORKBENCH:已添加:`)}${t.name}`)}else y.error(n.error||J(`@WORKBENCH:上传失败`))}catch(e){y.error(J(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{tt.value[n]=!1}}async function ft(e,t){try{await g.confirm(J(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),J(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(ct(e,t.id),{method:`DELETE`}).then(e=>e.json());n.success?(ot(e,at(e).filter(e=>e.id!==t.id)),y.success(J(`@WORKBENCH:已删除`))):y.error(n.error||J(`@WORKBENCH:删除失败`))}function pt(e){let t=document.createElement(`input`);t.type=`file`,t.accept=xr,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>dt(e,t))},t.click()}let mt=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function ht(e){return mt.has(String(e.ext||``).toLowerCase())}function yt(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return(n,i)=>{let c=de,u=oe(`Folder`),m=ne,g=re,y=fe,E=ue,D=ce,O=ae,A=le;return e(),r(`div`,Xt,[p(`header`,Zt,[p(`button`,{type:`button`,class:V([`wb-tab`,{"is-active":d.value===`editor`}]),onClick:i[0]||=e=>d.value=`editor`},P(N(J)(`@WORKBENCH:任务执行`)),3),p(`button`,{type:`button`,class:V([`wb-tab`,{"is-active":d.value===`logs`}]),onClick:i[1]||=e=>d.value=`logs`},P(N(J)(`@WORKBENCH:执行日志`)),3)]),d.value===`editor`?(e(),r(`div`,Qt,[p(`aside`,$t,[p(`section`,en,[p(`header`,tn,[p(`span`,nn,P(N(J)(`@WORKBENCH:任务`)),1),p(`h3`,rn,P(N(J)(`@WORKBENCH:任务列表`)),1),p(`span`,an,P(s.value.length),1)]),p(`button`,{class:`wb-new-btn`,onClick:Le},[T(c,{class:`wb-new-btn__icon`},{default:B(()=>[T(N(U))]),_:1}),p(`span`,null,P(N(J)(`@WORKBENCH:新建任务`)),1),i[25]||=p(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)]),s.value.length>0&&Z.value.name?(e(),r(`div`,on,[T(c,{class:`wb-current-project__icon`},{default:B(()=>[T(u)]),_:1}),p(`span`,sn,P(N(J)(`@WORKBENCH:当前项目`)),1),p(`span`,{class:`wb-current-project__name`,title:Z.value.path},P(Z.value.name),9,cn)])):q(``,!0),p(`ul`,ln,[(e(!0),r(_,null,G(Te.value.groups,n=>(e(),r(_,{key:n.path},[Te.value.hasMultiple?(e(),r(`li`,{key:0,class:V([`wb-task-group__head`,{"is-current":n.path===Z.value.path}])},[T(c,{class:`wb-task-group__icon`},{default:B(()=>[T(u)]),_:1}),p(`span`,{class:`wb-task-group__name`,title:n.path===Z.value.path?Z.value.path:n.label},P(n.path===Z.value.path?Z.value.name:Ee(n.label)),9,un),p(`span`,dn,P(n.tasks.length),1)],2)):q(``,!0),(e(!0),r(_,null,G(n.tasks,n=>(e(),r(`li`,{key:n.id,class:V([`wb-task-item`,{active:n.id===f.value,"has-attachment":xe(n)>0,"is-other-project":n.projectPath&&n.projectPath!==Z.value.path}]),"data-icon":ve(n.title),onClick:e=>Be(n)},[p(`div`,{class:`wb-task-item__avatar`,"data-icon":ve(n.title)},[T(c,null,{default:B(()=>[(e(),x(ie(be(n))))]),_:2},1024)],8,pn),p(`div`,mn,[p(`div`,{class:`wb-task-item__title`,title:n.title},P(n.title||N(J)(`@WORKBENCH:未命名任务`)),9,hn),p(`div`,gn,[p(`span`,{class:`wb-task-item__meta-item`,title:N(J)(`@WORKBENCH:个子任务`)},[T(c,{class:`wb-task-item__meta-icon`},{default:B(()=>[T(N(ee))]),_:1}),p(`span`,vn,P(Se(n)),1)],8,_n),xe(n)>0?(e(),r(`span`,{key:0,class:`wb-task-item__meta-item`,title:N(J)(`@WORKBENCH:附件`)},[T(c,{class:`wb-task-item__meta-icon`},{default:B(()=>[T(N(z))]),_:1}),p(`span`,bn,P(xe(n)),1)],8,yn)):q(``,!0),n.promptId?(e(),r(`span`,{key:1,class:`wb-task-item__meta-item wb-task-item__meta-item--accent`,title:N(J)(`@WORKBENCH:已绑定预置提示词`)},[T(c,{class:`wb-task-item__meta-icon`},{default:B(()=>[T(N(b))]),_:1})],8,xn)):q(``,!0),n.projectPath&&n.projectPath!==Z.value.path?(e(),r(`span`,{key:2,class:`wb-task-item__meta-item wb-task-item__meta-item--project`,title:n.projectPath},P(Ee(n.projectPath)),9,Sn)):q(``,!0)])]),p(`button`,{class:`wb-task-item__del`,onClick:h(e=>ze(n),[`stop`]),title:N(J)(`@WORKBENCH:删除`),"aria-label":N(J)(`@WORKBENCH:删除`)},[T(c,null,{default:B(()=>[T(N(t))]),_:1})],8,Cn)],10,fn))),128))],64))),128)),s.value.length===0?(e(),r(`li`,wn,[p(`div`,Tn,[T(c,null,{default:B(()=>[T(N(l))]),_:1})]),p(`div`,En,P(N(J)(`@WORKBENCH:暂无任务`)),1),p(`div`,Dn,P(N(J)(`@WORKBENCH:点击上方按钮新建`)),1)])):q(``,!0)])]),p(`section`,On,[p(`header`,kn,[p(`span`,An,P(N(J)(`@WORKBENCH:提示`)),1),p(`h3`,jn,P(N(J)(`@WORKBENCH:预置提示词`)),1),p(`span`,Mn,P(o.value.length),1),p(`button`,{class:`wb-section__action`,onClick:ke,title:N(J)(`@WORKBENCH:新建提示词`),"aria-label":N(J)(`@WORKBENCH:新建提示词`)},[T(c,null,{default:B(()=>[T(N(U))]),_:1})],8,Nn)]),p(`ul`,Pn,[(e(!0),r(_,null,G(o.value,n=>(e(),r(`li`,{key:n.id,class:`wb-prompt-item`},[p(`div`,Fn,[T(c,null,{default:B(()=>[T(N(b))]),_:1})]),p(`span`,{class:`wb-prompt-item__name`,onClick:e=>Ae(n),title:n.content},P(n.name),9,In),Z.value.name?(e(),r(`span`,{key:0,class:`wb-prompt-item__project`,title:N(J)(`@WORKBENCH:适用于当前项目`)+`:`+Z.value.path},P(Z.value.name),9,Ln)):q(``,!0),p(`button`,{class:`wb-prompt-item__del`,onClick:e=>Ie(n),title:N(J)(`@WORKBENCH:删除`),"aria-label":N(J)(`@WORKBENCH:删除`)},[T(c,null,{default:B(()=>[T(N(t))]),_:1})],8,Rn)]))),128)),o.value.length===0?(e(),r(`li`,zn,P(N(J)(`@WORKBENCH:暂无提示词`)),1)):q(``,!0)])])]),p(`section`,Bn,[w.value?(e(),r(_,{key:1},[p(`div`,Hn,[se(p(`input`,{class:`wb-input wb-input--title`,"onUpdate:modelValue":i[2]||=e=>w.value.title=e,placeholder:N(J)(`@WORKBENCH:任务标题`)},null,8,Un),[[I,w.value.title]]),se(p(`select`,{class:`wb-select`,"onUpdate:modelValue":i[3]||=e=>w.value.promptId=e},[p(`option`,Wn,P(N(J)(`@WORKBENCH:不绑定预置提示词`)),1),(e(!0),r(_,null,G(o.value,t=>(e(),r(`option`,{key:t.id,value:t.id},P(t.name),9,Gn))),128))],512),[[v,w.value.promptId]]),T(m,{type:`info`,plain:``,disabled:!w.value.title||!w.value.title.trim(),onClick:qe},{default:B(()=>[C(P(N(J)(`@WORKBENCH:AI 拆分`)),1)]),_:1},8,[`disabled`]),T(m,{type:`primary`,loading:!1,onClick:i[4]||=e=>Ye(w.value)},{default:B(()=>[C(P(N(J)(`@WORKBENCH:执行任务`)),1)]),_:1})]),se(p(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":i[5]||=e=>w.value.desc=e,placeholder:N(J)(`@WORKBENCH:任务描述(可选)`),rows:`3`,onPaste:i[6]||=e=>lt(e,{kind:`task`,task:w.value})},null,40,Kn),[[I,w.value.desc]]),T(Ge,{attachments:w.value.attachments||[],"is-image":ht,"human-size":yt,"is-uploading":nt(`task-`+w.value.id),"is-paste-hover":$.value===`task-`+w.value.id,"max-count":9,"on-pick":()=>pt({kind:`task`,task:w.value}),"on-remove":e=>ft({kind:`task`,task:w.value},e),onPaste:i[7]||=e=>lt(e,{kind:`task`,task:w.value}),onDrop:i[8]||=h(e=>ut(e,{kind:`task`,task:w.value}),[`prevent`]),onDragover:i[9]||=h(e=>$.value=`task-`+w.value.id,[`prevent`]),onDragenter:i[10]||=h(e=>$.value=`task-`+w.value.id,[`prevent`]),onDragleave:i[11]||=e=>$.value=$.value===`task-`+w.value.id?null:$.value},null,8,[`attachments`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`]),p(`div`,qn,[p(`h4`,null,P(N(J)(`@WORKBENCH:子任务拆分`)),1),p(`div`,Jn,[T(m,{size:`small`,plain:``,icon:N(U),disabled:w.value.subtasks.length===0,onClick:Ve},{default:B(()=>[C(P(N(J)(`@WORKBENCH:添加子任务`)),1)]),_:1},8,[`icon`,`disabled`]),T(m,{size:`small`,type:te.value?`primary`:`default`,disabled:w.value.subtasks.length===0,onClick:We},{default:B(()=>[C(P(N(J)(`@WORKBENCH:保存拆分`))+` `,1),te.value?(e(),r(`span`,Yn,P(k.value.size),1)):q(``,!0)]),_:1},8,[`type`,`disabled`])])]),p(`ul`,Xn,[(e(!0),r(_,null,G(w.value.subtasks,t=>(e(),r(`li`,{key:t.id,class:V([`wb-sub-item`,{"is-dirty":k.value.has(t.id),"is-running":t.status===`running`,"is-done":t.status===`done`,"is-collapsed":Xe(t),"is-clickable":Xe(t)}]),onClick:e=>Xe(t)&&Ze(t)},[Xe(t)?(e(),r(`div`,Qn,[p(`span`,{class:`wb-sub-item__status`,style:R({background:N(vt)(t.status)})},P(N(_t)(t.status)),5),p(`span`,{class:`wb-sub-item__title-compact`,title:t.title},P(t.title||N(J)(`@WORKBENCH:未命名子任务`)),9,$n),Y(t.id)?(e(),r(`span`,{key:0,class:`wb-sub-item__pid`,title:N(J)(`@WORKBENCH:进程ID`)},` PID: `+P(Y(t.id)?.pid),9,er)):q(``,!0),p(`button`,{class:`wb-sub-item__toggle`,title:N(J)(`@WORKBENCH:展开`),"aria-label":N(J)(`@WORKBENCH:展开`),onClick:h(e=>Ze(t),[`stop`])},[T(c,null,{default:B(()=>[T(N(S))]),_:1})],8,tr),p(`button`,{class:`wb-sub-item__undo`,title:N(J)(`@WORKBENCH:取消完成`),"aria-label":N(J)(`@WORKBENCH:取消完成`),onClick:h(e=>Qe(t),[`stop`])},P(N(J)(`@WORKBENCH:取消完成`)),9,nr),p(`button`,{class:`wb-sub-item__del`,title:N(J)(`@WORKBENCH:删除`),"aria-label":N(J)(`@WORKBENCH:删除`),onClick:h(e=>He(t),[`stop`])},`×`,8,rr)])):(e(),r(_,{key:1},[p(`div`,ir,[p(`span`,{class:`wb-sub-item__status`,style:R({background:N(vt)(t.status)})},P(N(_t)(t.status)),5),se(p(`input`,{class:`wb-input`,"onUpdate:modelValue":e=>t.title=e,placeholder:N(J)(`@WORKBENCH:子任务标题`),onPaste:e=>lt(e,{kind:`sub`,task:w.value,sub:t})},null,40,ar),[[I,t.title]]),k.value.has(t.id)?(e(),r(`span`,{key:0,class:`wb-sub-item__dirty`,title:N(J)(`@WORKBENCH:有未保存的更改`)},P(N(J)(`@WORKBENCH:未保存`)),9,or)):q(``,!0),Y(t.id)?(e(),r(`span`,{key:1,class:`wb-sub-item__pid`,title:N(J)(`@WORKBENCH:进程ID`)},` PID: `+P(Y(t.id)?.pid),9,sr)):q(``,!0),Y(t.id)&&(Y(t.id)?.status===`running`||Y(t.id)?.status===`pending`)?(e(),r(`button`,{key:2,class:`wb-sub-item__stop`,title:N(J)(`@WORKBENCH:停止执行`),onClick:e=>$e(Y(t.id))},P(N(J)(`@WORKBENCH:停止`)),9,cr)):q(``,!0),t.status===`done`?(e(),r(`button`,{key:3,class:`wb-sub-item__toggle`,title:N(J)(`@WORKBENCH:收起`),"aria-label":N(J)(`@WORKBENCH:收起`),onClick:e=>Ze(t)},[T(c,null,{default:B(()=>[T(N(a))]),_:1})],8,lr)):q(``,!0),t.status===`done`?(e(),r(`button`,{key:4,class:`wb-sub-item__undo`,title:N(J)(`@WORKBENCH:取消完成`),"aria-label":N(J)(`@WORKBENCH:取消完成`),onClick:e=>Qe(t)},P(N(J)(`@WORKBENCH:取消完成`)),9,ur)):q(``,!0),p(`button`,{class:`wb-sub-item__del`,onClick:e=>He(t)},`×`,8,dr)]),se(p(`textarea`,{class:`wb-textarea wb-textarea--sm`,"onUpdate:modelValue":e=>t.desc=e,placeholder:N(J)(`@WORKBENCH:子任务描述 / 独立提示词覆盖`),rows:`2`,onPaste:e=>lt(e,{kind:`sub`,task:w.value,sub:t})},null,40,fr),[[I,t.desc]]),Y(t.id)?(e(),x(gt,{key:0,job:Y(t.id)},null,8,[`job`])):q(``,!0),T(Ge,{attachments:t.attachments||[],"is-image":ht,"human-size":yt,"is-uploading":nt(`sub-`+t.id),"is-paste-hover":$.value===t.id,"max-count":9,"on-pick":()=>pt({kind:`sub`,task:w.value,sub:t}),"on-remove":e=>ft({kind:`sub`,task:w.value,sub:t},e),onPaste:e=>lt(e,{kind:`sub`,task:w.value,sub:t}),onDrop:h(e=>ut(e,{kind:`sub`,task:w.value,sub:t}),[`prevent`]),onDragover:h(e=>$.value=t.id,[`prevent`]),onDragenter:h(e=>$.value=t.id,[`prevent`]),onDragleave:e=>$.value=$.value===t.id?null:$.value},null,8,[`attachments`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`,`onPaste`,`onDrop`,`onDragover`,`onDragenter`,`onDragleave`])],64))],10,Zn))),128)),w.value.subtasks.length===0?(e(),r(`li`,pr,[p(`div`,mr,[T(c,null,{default:B(()=>[T(N(ee))]),_:1})]),p(`div`,hr,P(N(J)(`@WORKBENCH:拆分任务,逐项执行`)),1),p(`div`,gr,P(N(J)(`@WORKBENCH:手动添加子任务,或让 AI 帮你自动拆分`)),1),p(`div`,_r,[T(m,{type:`primary`,size:`small`,icon:N(U),onClick:Ve},{default:B(()=>[C(P(N(J)(`@WORKBENCH:添加子任务`)),1)]),_:1},8,[`icon`]),p(`button`,{type:`button`,class:`wb-empty__link`,disabled:!w.value.title||!w.value.title.trim(),onClick:qe},P(N(J)(`@WORKBENCH:用 AI 自动拆分`)),9,vr)])])):q(``,!0)])],64)):(e(),r(`div`,Vn,[p(`p`,null,P(N(J)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])):(e(),x(Yt,{key:1})),T(D,{modelValue:j.visible,"onUpdate:modelValue":i[15]||=e=>j.visible=e,title:j.editing?N(J)(`@WORKBENCH:编辑提示词`):N(J)(`@WORKBENCH:新建提示词`),width:`640px`},{footer:B(()=>[T(m,{onClick:i[14]||=e=>j.visible=!1},{default:B(()=>[C(P(N(J)(`@WORKBENCH:取消`)),1)]),_:1}),T(m,{type:`primary`,onClick:Fe},{default:B(()=>[C(P(N(J)(`@WORKBENCH:保存`)),1)]),_:1})]),default:B(()=>[T(E,{"label-position":`top`},{default:B(()=>[T(y,{label:N(J)(`@WORKBENCH:名称`)},{default:B(()=>[T(g,{modelValue:j.name,"onUpdate:modelValue":i[12]||=e=>j.name=e,placeholder:N(J)(`@WORKBENCH:如:代码审查 / 写测试`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),T(y,null,{default:B(()=>[p(`div`,yr,[T(m,{type:`primary`,plain:``,loading:j.aiLoading,onClick:Me},{default:B(()=>[C(P(N(J)(`@WORKBENCH:AI 生成项目架构说明`)),1)]),_:1},8,[`loading`]),T(m,{onClick:Ne},{default:B(()=>[C(P(N(J)(`@WORKBENCH:编辑指令`)),1)]),_:1})])]),_:1}),T(y,{label:N(J)(`@WORKBENCH:内容`)},{default:B(()=>[T(g,{modelValue:j.content,"onUpdate:modelValue":i[13]||=e=>j.content=e,type:`textarea`,rows:10,placeholder:N(J)(`@WORKBENCH:可用变量:`)+`{{task.title}} {{task.desc}} {{sub.title}} {{sub.desc}} {{repo.path}} {{branch}}`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),T(D,{modelValue:F.visible,"onUpdate:modelValue":i[18]||=e=>F.visible=e,title:N(J)(`@WORKBENCH:编辑生成指令`),width:`720px`,"append-to-body":``},{footer:B(()=>[T(m,{onClick:i[17]||=e=>F.visible=!1},{default:B(()=>[C(P(N(J)(`@WORKBENCH:取消`)),1)]),_:1}),T(m,{type:`primary`,loading:F.saving,onClick:Pe},{default:B(()=>[C(P(N(J)(`@WORKBENCH:保存`)),1)]),_:1},8,[`loading`])]),default:B(()=>[T(E,{"label-position":`top`},{default:B(()=>[T(y,{label:N(J)(`@WORKBENCH:指令内容`)},{default:B(()=>[T(g,{modelValue:F.text,"onUpdate:modelValue":i[16]||=e=>F.text=e,type:`textarea`,rows:18,placeholder:N(J)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),T(D,{modelValue:H.visible,"onUpdate:modelValue":i[23]||=e=>H.visible=e,title:H.editing?N(J)(`@WORKBENCH:编辑任务`):N(J)(`@WORKBENCH:新建任务`),width:`560px`},{footer:B(()=>[T(m,{onClick:i[22]||=e=>H.visible=!1},{default:B(()=>[C(P(N(J)(`@WORKBENCH:取消`)),1)]),_:1}),T(m,{type:`primary`,onClick:Re},{default:B(()=>[C(P(N(J)(`@WORKBENCH:保存`)),1)]),_:1})]),default:B(()=>[T(E,{"label-position":`top`},{default:B(()=>[T(y,{label:N(J)(`@WORKBENCH:标题`)},{default:B(()=>[T(g,{modelValue:H.title,"onUpdate:modelValue":i[19]||=e=>H.title=e},null,8,[`modelValue`])]),_:1},8,[`label`]),T(y,{label:N(J)(`@WORKBENCH:描述`)},{default:B(()=>[T(g,{modelValue:H.desc,"onUpdate:modelValue":i[20]||=e=>H.desc=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1},8,[`label`]),T(y,{label:N(J)(`@WORKBENCH:预置提示词`)},{default:B(()=>[T(A,{modelValue:H.promptId,"onUpdate:modelValue":i[21]||=e=>H.promptId=e,clearable:``,placeholder:N(J)(`@WORKBENCH:不绑定`),style:{width:`100%`}},{default:B(()=>[(e(!0),r(_,null,G(o.value,t=>(e(),x(O,{key:t.id,label:t.name,value:t.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),w.value?(e(),x(je,{key:2,modelValue:Ke.value,"onUpdate:modelValue":i[24]||=e=>Ke.value=e,title:w.value.title,desc:w.value.desc,"task-id":w.value.id,"prompt-id":w.value.promptId,onConfirm:Je},null,8,[`modelValue`,`title`,`desc`,`task-id`,`prompt-id`])):q(``,!0)])}}}),[[`__scopeId`,`data-v-80bf4769`]]);export{Cr as default};
|