zen-gitsync 2.17.43 → 2.17.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/package.json +8 -2
- package/src/cli/ai/termui.js +21 -7
- package/src/cli/ai/termui.test.js +19 -2
- package/src/ui/public/assets/{AgentEngineSelector-BwFdXZnh.js → AgentEngineSelector-SBPtLGPv.js} +2 -2
- package/src/ui/public/assets/AgentView-Dn4FKdQ4.js +11 -0
- package/src/ui/public/assets/AppVersionBadge-DQ4EU4pX.js +2 -0
- package/src/ui/public/assets/{BranchSelector-DL37Ho4j.js → BranchSelector-CzbW12er.js} +1 -1
- package/src/ui/public/assets/CommitForm-B-rCGP4U.js +14 -0
- package/src/ui/public/assets/{CommonDialog-BT6e135Y.js → CommonDialog-BU2WnvCP.js} +1 -1
- package/src/ui/public/assets/EditorView-Ow0NbfoS.js +37 -0
- package/src/ui/public/assets/{FlowExecutionViewer-DIlgernH.js → FlowExecutionViewer-DGAyV9U4.js} +1 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-D2kYrmGf.js +21 -0
- package/src/ui/public/assets/LogList-CawuKgSs.js +7 -0
- package/src/ui/public/assets/MindmapView-DEsuTaSg.js +2 -0
- package/src/ui/public/assets/MonitorView-DxlF3drD.js +3 -0
- package/src/ui/public/assets/ProjectStartupButton-C8IaVsyB.js +1 -0
- package/src/ui/public/assets/{RecentDirectoriesChat-LOD3UBFM.js → RecentDirectoriesChat-BeRlRXUS.js} +2 -2
- package/src/ui/public/assets/{RemoteManagerDialog-S3xLgN02.js → RemoteManagerDialog-Cm1FrUFN.js} +3 -3
- package/src/ui/public/assets/{RemoteRepoCard-BLb8tACY.js → RemoteRepoCard-CIaQJFkO.js} +2 -2
- package/src/ui/public/assets/{SourceMapView-BA7E3JX7.js → SourceMapView-BzABBB5V.js} +3 -3
- package/src/ui/public/assets/{SvgIcon-Dd0dgVcd.js → SvgIcon-DKzB5l7x.js} +1 -1
- package/src/ui/public/assets/UserInputNode-B9_WFqBz.js +1 -0
- package/src/ui/public/assets/WorkbenchView-B8Jyku-x.css +1 -0
- package/src/ui/public/assets/WorkbenchView-BbAYZZW0.js +299 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-DibQ4qNS.js → _plugin-vue_export-helper-CEyZbjNo.js} +1 -1
- package/src/ui/public/assets/{agentConversations-CyGrxt-h.js → agentConversations-zhSKENjT.js} +4 -4
- package/src/ui/public/assets/{configStore-DQ92GVaR.js → configStore-DZgueZaZ.js} +1 -1
- package/src/ui/public/assets/{css.worker-DFdt6_zu.js → css.worker-BDCmgL4U.js} +9 -9
- package/src/ui/public/assets/{dagre-BPEW99Ym.js → dagre-BkIBWWsW.js} +4 -4
- package/src/ui/public/assets/editor.worker-GCPm6rMv.js +26 -0
- package/src/ui/public/assets/element-plus-BM4vMiQt.js +48 -0
- package/src/ui/public/assets/{element-plus-DJ3ZQa98.css → element-plus-D-6gla1z.css} +1 -1
- package/src/ui/public/assets/{flow-mindmap-BQUUIfaR.js → flow-mindmap-CQ3aUAgf.js} +1 -1
- package/src/ui/public/assets/{html.worker-JUzsMP-j.js → html.worker-DG8hnSJR.js} +8 -8
- package/src/ui/public/assets/index-BUX1f2WT.js +204 -0
- package/src/ui/public/assets/index-Ja0NzLzp.css +1 -0
- package/src/ui/public/assets/json.worker-CxwlJRnL.js +58 -0
- package/src/ui/public/assets/{monaco-kXz8a-yc.js → monaco-uSKsFhgW.js} +6 -6
- package/src/ui/public/assets/{office-docx-4ZL-nECj.js → office-docx-CP6zThhk.js} +1 -1
- package/src/ui/public/assets/{office-excel-BlPftvU4.js → office-excel-BXCp3PSj.js} +1 -1
- package/src/ui/public/assets/{office-pptx-CVP1caLm.js → office-pptx-h_kukgO8.js} +3 -3
- package/src/ui/public/assets/{ts.worker-CmEKzkmF.js → ts.worker-DgFMIcEs.js} +49 -49
- package/src/ui/public/assets/{vendor-CazUJJkv.js → vendor-k3t4WBZA.js} +8 -8
- package/src/ui/public/assets/{vue-flow-BABZEIJA.js → vue-flow-B5o0saHS.js} +1 -1
- package/src/ui/public/index.html +13 -13
- package/src/ui/server/routes/workbench/executorModels.test.js +326 -326
- package/src/ui/public/assets/AgentView-CMQ7TzwN.js +0 -11
- package/src/ui/public/assets/AppVersionBadge-Bk4XGXki.js +0 -2
- package/src/ui/public/assets/CommitForm-DdvYlUtA.js +0 -14
- package/src/ui/public/assets/EditorView-CeZ-EvP1.js +0 -37
- package/src/ui/public/assets/FlowOrchestrationWorkspace-BIFFckMG.js +0 -21
- package/src/ui/public/assets/LogList-CYU0YVnC.js +0 -7
- package/src/ui/public/assets/MindmapView-DYB3_94z.js +0 -2
- package/src/ui/public/assets/MonitorView-DKXSFbyq.js +0 -3
- package/src/ui/public/assets/ProjectStartupButton-BMICmCA_.js +0 -1
- package/src/ui/public/assets/UserInputNode-B0YtQfhh.js +0 -1
- package/src/ui/public/assets/WorkbenchView-CIuHGPhc.css +0 -1
- package/src/ui/public/assets/WorkbenchView-lgVbWRyY.js +0 -287
- package/src/ui/public/assets/editor.worker-O-CH8JUO.js +0 -26
- package/src/ui/public/assets/element-plus-C8IhrglD.js +0 -48
- package/src/ui/public/assets/index-DavZzOom.css +0 -1
- package/src/ui/public/assets/index-ED00NaPI.js +0 -198
- package/src/ui/public/assets/json.worker-B4dEhy0e.js +0 -58
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$n as e,Bn as t,D as n,Dn as r,En as i,F as a,Fr as o,I as ee,In as s,J as c,Jr as l,L as u,Nn as d,On as f,Pn as p,Tn as m,U as h,W as g,Wn as _,Wt as te,Xr as ne,Yn as re,Zn as v,a as y,bn as b,br as x,cr as S,ct as ie,dn as C,ei as w,i as ae,kn as T,lr as E,m as oe,o as D,or as O,p as se,pr as k,pt as ce,qn as le,vn as A,vt as ue,wt as de,xn as j,yn as M,z as fe}from"./element-plus-C8IhrglD.js";import{n as N,t as pe}from"./_plugin-vue_export-helper-DibQ4qNS.js";import{t as me}from"./CommonDialog-BT6e135Y.js";import{B as he,D as ge,L as _e,V as ve,z as ye}from"./index-ED00NaPI.js";var P=[`#f14e32`,`#1e88e5`,`#43a047`,`#fb8c00`,`#8e24aa`,`#00acc1`,`#d81b60`,`#7cb342`,`#5e35b1`,`#00897b`];function F(e){return 10+e*14}function I(e){return P[e%P.length]}function be(e){if(!e)return[];let t=[];for(let n of e.split(`,`)){let e=n.trim();if(!e||e===`HEAD`||e.startsWith(`tag:`))continue;let r=e.match(/^HEAD\s*->\s*(.+)$/);t.push((r?r[1]:e).trim())}return t}function xe(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.hash)??new Set;for(let t of be(r.branch))e.add(t);n.set(r.hash,Array.from(e));for(let n of r.parents??[]){let r=t.get(n)??new Set;for(let t of e)r.add(t);t.set(n,r)}}return n}function Se(e){let t=[],n=[],r=0,i=0,a=new Set(e.map(e=>e.hash)),o=e=>t.findIndex(t=>t!==null&&t.hash===e),ee=()=>{let e=t.findIndex(e=>e===null);return e===-1?(t.push(null),t.length-1):e};for(let s of e){let e=Array.isArray(s.parents)?s.parents:[],c=t.slice(),l=o(s.hash),u,d=!1;l===-1?(d=!0,l=ee(),u=r++):u=t[l].colorIdx,t[l]=null;let f=[],p=new Set;for(let e=0;e<t.length;e++){let n=t[e];n!==null&&n.hash===s.hash&&(f.push({fromLane:e,color:I(n.colorIdx),branches:[],_hash:s.hash}),t[e]=null,p.add(e))}let m=[],h=I(u);if(e.length>0){let n=e[0],i=o(n);i===-1?a.has(n)&&(t[l]={hash:n,colorIdx:u},m.push({toLane:l,color:h,kind:`straight`,branches:[],_hash:n})):(m.push({toLane:i,color:h,kind:i===l?`straight`:`curve`,branches:[],_hash:n}),i===l&&(t[l]={hash:n,colorIdx:u}));for(let n of e.slice(1)){let e=o(n);if(e!==-1)m.push({toLane:e,color:h,kind:e===l?`straight`:`curve`,branches:[],_hash:n});else if(a.has(n)){let e=ee(),i=r++;t[e]={hash:n,colorIdx:i},m.push({toLane:e,color:I(i),kind:e===l?`straight`:`curve`,branches:[],_hash:n})}}}let g=t.slice();i=Math.max(i,t.length);let _=[];for(let e=0;e<c.length;e++){let t=c[e];t!==null&&(e===l||p.has(e)||e<g.length&&g[e]!==null&&g[e].hash===t.hash&&_.push({lane:e,color:I(t.colorIdx),branches:[],_hash:t.hash}))}n.push({hash:s.hash,commitLane:l,color:h,isMerge:e.length>1,isHead:d,hasTopLine:!d,passes:_,topCurves:f,bottomEdges:m,branches:[]})}let s=xe(e),c=e=>s.get(e)??[];for(let e of n){e.branches=c(e.hash);for(let t of e.passes)t.branches=c(t._hash),delete t._hash;for(let t of e.topCurves)t.branches=c(t._hash),delete t._hash;for(let t of e.bottomEdges)t.branches=c(t._hash),delete t._hash}let l=i>0?20+(i-1)*14:0;return{rows:n,maxLanes:i,width:l}}t();var Ce=-1,we=s({__name:`CommitGraphCell`,props:{layout:{type:Object,required:!0},width:{type:Number,required:!0}},setup(e,{expose:t}){t();let n=e,r=m(()=>F(n.layout.commitLane)),i=N(`@A1833:暂不属于任何分支`);function a(e){return e.length>0?e.join(`, `):i}let o={props:n,VH:30,cy:15,TOP:Ce,BOTTOM:31,nodeX:r,noBranchText:i,branchText:a,nodeTitle:m(()=>`${n.layout.hash.slice(0,7)} · ${a(n.layout.branches)}`),passLines:m(()=>n.layout.passes.map(e=>({x:F(e.lane),color:e.color,title:a(e.branches)}))),topCurvePaths:m(()=>n.layout.topCurves.map(e=>{let t=F(e.fromLane),n=r.value;return{d:`M ${t} ${Ce} C ${t} ${15/2}, ${n} ${15/2}, ${n} 15`,color:e.color,title:a(e.branches)}})),bottomEdgePaths:m(()=>n.layout.bottomEdges.map(e=>{let t=r.value,n=F(e.toLane);return{d:e.kind===`straight`||t===n?`M ${t} 15 L ${n} 31`:`M ${t} 15 C ${t} 23, ${n} 23, ${n} 31`,color:e.color,title:a(e.branches)}}))};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});t(),o();var L={class:`graph-wrap`},R=[`viewBox`],z=[`x1`,`x2`,`stroke`],Te=[`x1`,`x2`],B=[`d`,`stroke`],Ee=[`d`],V=[`x1`,`x2`,`stroke`],De=[`d`,`stroke`],Oe=[`d`],ke={class:`graph-layer graph-nodes`,"aria-hidden":`true`},H=[`cx`,`stroke`],Ae=[`cx`,`fill`],je=[`cx`,`stroke`],U=[`cx`];function Me(t,n,r,a,o,ee){return v(),T(`div`,L,[f(` 线条层: viewBox + preserveAspectRatio="none" 纵向拉伸填满单元格, 任意行高不断线 `),(v(),T(`svg`,{class:`graph-layer graph-lines`,viewBox:`0 0 ${r.width} ${a.VH}`,preserveAspectRatio:`none`,"aria-hidden":`true`},[f(` 贯穿线(悬停显示分支名, 加粗透明描边扩大热区) `),(v(!0),T(j,null,e(a.passLines,(e,t)=>(v(),T(`line`,{key:`p`+t,x1:e.x,y1:a.TOP,x2:e.x,y2:a.BOTTOM,stroke:e.color,"stroke-width":`2`},[i(`title`,null,w(e.title),1)],8,z))),128)),(v(!0),T(j,null,e(a.passLines,(e,t)=>(v(),T(`line`,{key:`ph`+t,x1:e.x,y1:a.TOP,x2:e.x,y2:a.BOTTOM,stroke:`transparent`,"stroke-width":`8`},[i(`title`,null,w(e.title),1)],8,Te))),128)),f(` 顶部收拢曲线 `),(v(!0),T(j,null,e(a.topCurvePaths,(e,t)=>(v(),T(`path`,{key:`t`+t,d:e.d,stroke:e.color,"stroke-width":`2`,fill:`none`},[i(`title`,null,w(e.title),1)],8,B))),128)),(v(!0),T(j,null,e(a.topCurvePaths,(e,t)=>(v(),T(`path`,{key:`th`+t,d:e.d,stroke:`transparent`,"stroke-width":`8`,fill:`none`},[i(`title`,null,w(e.title),1)],8,Ee))),128)),f(` 顶部垂线入节点 `),r.layout.hasTopLine?(v(),T(`line`,{key:0,x1:a.nodeX,y1:a.TOP,x2:a.nodeX,y2:a.cy,stroke:r.layout.color,"stroke-width":`2`},[i(`title`,null,w(a.branchText(r.layout.branches)),1)],8,V)):f(`v-if`,!0),f(` 底部出边 `),(v(!0),T(j,null,e(a.bottomEdgePaths,(e,t)=>(v(),T(`path`,{key:`b`+t,d:e.d,stroke:e.color,"stroke-width":`2`,fill:`none`},[i(`title`,null,w(e.title),1)],8,De))),128)),(v(!0),T(j,null,e(a.bottomEdgePaths,(e,t)=>(v(),T(`path`,{key:`bh`+t,d:e.d,stroke:`transparent`,"stroke-width":`8`,fill:`none`},[i(`title`,null,w(e.title),1)],8,Oe))),128))],8,R)),f(` 节点层: 不用 viewBox, cy=50% + 固定半径, 任意行高都是正圆 `),(v(),T(`svg`,ke,[i(`g`,null,[i(`title`,null,w(a.nodeTitle),1),f(` merge 提交空心圆环, 普通提交实心 `),r.layout.isMerge?(v(),T(`circle`,{key:0,cx:a.nodeX,cy:`50%`,r:`4.5`,fill:`var(--bg-panel, #fff)`,stroke:r.layout.color,"stroke-width":`2`},null,8,H)):(v(),T(`circle`,{key:1,cx:a.nodeX,cy:`50%`,r:`4`,fill:r.layout.color},null,8,Ae)),f(` 分支头加一圈描边, 更醒目 `),r.layout.isHead?(v(),T(`circle`,{key:2,cx:a.nodeX,cy:`50%`,r:`7`,fill:`none`,stroke:r.layout.color,"stroke-width":`1.5`,opacity:`0.55`},null,8,je)):f(`v-if`,!0),f(` 扩大节点悬停热区 `),i(`circle`,{cx:a.nodeX,cy:`50%`,r:`9`,fill:`transparent`},null,8,U)])]))])}var Ne=pe(we,[[`render`,Me],[`__scopeId`,`data-v-d502a2df`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/views/components/CommitGraphCell.vue`]]);t(),k();var Pe=`zen-gitsync:log-show-graph`,Fe=s({__name:`LogList`,setup(e,{expose:t}){let r=he(),i=ye(),o=x([]),s=x(``),c=x(!1),l=m(()=>r.isLoadingLog||c.value),d=x(!1),f=x(localStorage.getItem(Pe)!==`false`);O(f,e=>{localStorage.setItem(Pe,String(e))});let p=m(()=>f.value&&o.value.length>0?Se(o.value):null),g=m(()=>{let e=new Map;if(p.value)for(let t of p.value.rows)e.set(t.hash,t);return e}),ne=m(()=>Math.max(p.value?.width??0,28)),v=m(()=>xe(o.value)),b=x(!1),S=x(null),C=x(!1),w=x(null),T=x([]),E=x(``),D=x(!1),k=x(``),A=x(`full-new`),j=x(``),M=x(``),pe=m(()=>w.value?v.value.get(w.value.hash)??[]:[]),P=x(!1),F=m(()=>w.value?.message?w.value.message.split(`
|
|
2
|
-
`)[0].trim():``),I=m(()=>w.value?.message?w.value.message.split(`
|
|
3
|
-
`).slice(1).join(`
|
|
4
|
-
`).trim():``),be=m(()=>I.value.length>0),Ce=m(()=>I.value.replace(/\n/g,`<br>`)),we=x(!1),L=x([]),R=x(``),z=x(null),Te=x([]),B=x([]),Ee=x([]),V=x(!1),De=x(0),Oe=x(0),ke=x(null),H=x(null),Ae=m(()=>o.value),je=m(()=>T.value.map(e=>({path:e,name:e.split(`/`).pop()||e})));async function U(e=!1,t=1){let n=he();if(!n.isGitRepo){s.value=`当前目录不是Git仓库`;return}try{t>1?b.value=!0:c.value=!0;let r=new URLSearchParams;r.append(`page`,t.toString()),r.append(`all`,e.toString()),r.append(`with_parents`,`true`),L.value.length>0&&r.append(`author`,L.value.join(`,`)),B.value.length>0&&r.append(`branch`,B.value.join(`,`)),R.value&&r.append(`message`,R.value),z.value&&Array.isArray(z.value)&&z.value.length===2&&(r.append(`dateFrom`,z.value[0]),r.append(`dateTo`,z.value[1])),r.append(`_t`,Date.now().toString());let i=await(await fetch(`/api/log?${r.toString()}`)).json();if(!i||!i.data||!Array.isArray(i.data)){s.value=`加载提交历史失败: 服务器返回数据格式不正确`;return}let a=t>1;a&&Array.isArray(i.data)?o.value=o.value.concat(i.data):Array.isArray(i.data)&&(o.value=i.data),n.currentPage=t,n.totalCommits=i.total??o.value.length,n.hasMoreData=i.hasMore===!0,!a&&!e&&_(()=>{J(),setTimeout(dt,200)}),s.value=``}catch(e){s.value=`加载提交历史失败: `+(e instanceof Error?e.message:String(e)),t>1&&(n.hasMoreData=!1)}finally{t>1?b.value=!1:c.value=!1}}function Me(e){return e.includes(`HEAD -> `)?e.replace(`HEAD -> `,``):e.includes(`origin/`)?e:e.trim()}function Fe(e){return e.includes(`HEAD`)?`success`:e.includes(`origin/`)?`warning`:`info`}function Ie(e){return e?e.length>60||e.includes(`
|
|
5
|
-
`):!1}let W=x(null),G=x(null),K=null;function q(e){K===null&&(K=requestAnimationFrame(()=>{K=null,Le(e)}))}function Le(e){if(!r.hasMoreData||b.value||l.value)return;let{scrollTop:t,scrollHeight:n,clientHeight:i}=e.target;n-t-i<=20&&Z()}function J(){if(!W.value)return;let e=W.value.$el.querySelector(`.el-table__body-wrapper`);e&&(G.value=e,G.value&&(G.value.removeEventListener(`scroll`,q,!0),G.value.addEventListener(`scroll`,q,!0)))}function Re(){G.value&&=(G.value.removeEventListener(`scroll`,q,!0),null),K!==null&&(cancelAnimationFrame(K),K=null)}function ze(e){e.key===`Escape`&&$.value&&($.value=!1)}let Be=()=>{r.isGitRepo&&(c.value||b.value||Y())};re(()=>{window.addEventListener(`git-log-auto-refresh`,Be),r.isGitRepo?(r.log.length>0?(o.value=r.log,r.totalCommits=r.log.length):U(),nt()):s.value=`当前目录不是Git仓库`,_(()=>{setTimeout(()=>{J()},500)}),O(()=>W.value,e=>{e&&!d.value&&_(()=>{J()})}),window.addEventListener(`keydown`,ze)}),O(()=>r.allBranches,e=>{e&&e.length>0?Ee.value=[...e].sort():Ee.value=[]},{immediate:!0}),le(()=>{Re(),S.value!==null&&(window.clearInterval(S.value),S.value=null),window.removeEventListener(`keydown`,ze),window.removeEventListener(`git-log-auto-refresh`,Be)});async function Y(){r.currentPage=1,r.hasMoreData=!0,await U(d.value,1),_(()=>{if(W.value){let e=W.value.$el.querySelector(`.el-scrollbar__wrap`);e&&(e.scrollTop=0)}})}O(()=>r.isGitRepo,e=>{e?(s.value=``,U(d.value,1),nt()):(s.value=`当前目录不是Git仓库`,o.value=[])}),O(()=>r.log,e=>{try{Array.isArray(e)&&(o.value=e),r.totalCommits=o.value.length,r.currentPage=1}catch{}},{immediate:!0}),t({refreshLog:Y});async function Ve(e){if(e){w.value=e,C.value=!0,D.value=!0,T.value=[],E.value=``,k.value=``,A.value=`full-new`,j.value=``,M.value=``,P.value=!1;try{if(!e.hash||e.hash.length<7){E.value=`无效的提交哈希值`,D.value=!1;return}let t=await(await fetch(`/api/commit-files?hash=${e.hash}`)).json();t.success&&Array.isArray(t.files)?(T.value=t.files,T.value.length>0?await X(e.hash,T.value[0]):E.value=`该提交没有变更文件`):E.value=`${N(`@A1833:获取文件列表失败: `)}${t.error||`未知错误`}`}catch(e){E.value=`${N(`@A1833:获取提交详情失败: `)}${e.message}`}finally{D.value=!1}}}async function He(e,t,n){D.value=!0,k.value=t;try{let r=await(await fetch(`/api/commit-file-content?hash=${e}&file=${encodeURIComponent(t)}&version=${n}`)).json();r.success?E.value=r.content||``:E.value=`${N(`@A1833:获取文件内容失败: `)}${r.error||`未知错误`}`}catch(e){E.value=`${N(`@A1833:获取文件内容失败: `)}${e.message}`}finally{D.value=!1}}async function Ue(e,t){D.value=!0,k.value=t;try{let[n,r]=await Promise.all([fetch(`/api/commit-file-content?hash=${e}&file=${encodeURIComponent(t)}&version=old`),fetch(`/api/commit-file-content?hash=${e}&file=${encodeURIComponent(t)}&version=new`)]),[i,a]=await Promise.all([n.json(),r.json()]);j.value=i?.success?i.content||``:`${N(`@A1833:获取文件内容失败: `)}${i?.error||`未知错误`}`,M.value=a?.success?a.content||``:`${N(`@A1833:获取文件内容失败: `)}${a?.error||`未知错误`}`,E.value=``}catch(e){let t=`${N(`@A1833:获取文件内容失败: `)}${e.message}`;j.value=t,M.value=t,E.value=``}finally{D.value=!1}}async function We(e,t,n){A.value=n,n===`diff`?(j.value=``,M.value=``,await Ge(e,t)):n===`full-old`?(j.value=``,M.value=``,await He(e,t,`old`)):(j.value=``,M.value=``,await He(e,t,`new`))}async function X(e,t){A.value=`full-new`,await Ue(e,t)}async function Ge(e,t){D.value=!0,k.value=t;try{let n=await(await fetch(`/api/commit-file-diff?hash=${e}&file=${encodeURIComponent(t)}`)).json();n.success?E.value=n.diff||`没有变更内容`:E.value=`${N(`@A1833:获取差异失败: `)}${n.error||`未知错误`}`}catch(e){E.value=`${N(`@A1833:获取差异失败: `)}${e.message}`}finally{D.value=!1}}function Ke(e){w.value&&(A.value===`diff`?We(w.value.hash,e,`diff`):X(w.value.hash,e))}function qe(){if(!w.value||!k.value){A.value=`diff`;return}We(w.value.hash,k.value,`diff`)}function Je(){if(!w.value||!k.value){A.value=`full-new`;return}X(w.value.hash,k.value)}async function Ye(){if(!w.value||!k.value)return;let e=E.value;if(!e)try{e=(await(await fetch(`/api/commit-file-diff?hash=${w.value.hash}&file=${encodeURIComponent(k.value)}`)).json()).diff||``}catch{}e&&navigator.clipboard.writeText(e).then(()=>{y.success(N(`@A1833:差异已复制到剪贴板`))}).catch(()=>{y.error(N(`@A1833:复制失败`))})}async function Xe(e,t){try{let n=await(await fetch(`/api/open-file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?y.success(n.message):y.error(n.error||N(`@A1833:打开文件失败`))}catch(e){y.error(`${N(`@A1833:打开文件失败: `)}${e.message}`)}}async function Ze(e,t){try{let n=await(await fetch(`/api/open-with-vscode`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:e,context:t})})).json();n.success?y.success(n.message):y.error(n.error||N(`@A1833:用VSCode打开文件失败`))}catch(e){y.error(`${N(`@A1833:用VSCode打开文件失败: `)}${e.message}`)}}function Qe(e,t){C.value=!1,window.dispatchEvent(new CustomEvent(`zen-gitsync:open-file-in-editor`,{detail:{filePath:e}}))}async function $e(e){try{let t=_e(e);await navigator.clipboard.writeText(t),y.success(N(`@A1833:提交信息已复制到剪贴板`))}catch{y.error(N(`@A1833:复制失败`))}}function Z(){!r.hasMoreData||b.value||l.value||U(d.value,r.currentPage+1)}function et(){L.value=[],B.value=[],R.value=``,z.value=null,r.currentPage=1,U(d.value,1)}function tt(){r.currentPage=1,U(d.value,1)}async function nt(){try{let e=await(await fetch(`/api/authors`)).json();e.success&&Array.isArray(e.authors)?Te.value=e.authors.sort():Q()}catch{Q()}}function Q(){let e=new Set;o.value.forEach(t=>{t.author&&e.add(t.author)}),Te.value=Array.from(e).sort()}O(()=>o.value,()=>{},{deep:!0});function rt(e,t,n){n.preventDefault(),De.value=n.clientY,Oe.value=n.clientX,ke.value=e,V.value=!0,_(()=>{let e=H.value;if(e){let t=e.getBoundingClientRect(),r=window.innerWidth,i=window.innerHeight,a=n.clientX,o=n.clientY;a+t.width>r&&(a=Math.max(8,n.clientX-t.width)),o+t.height>i&&(o=Math.max(8,n.clientY-t.height)),Oe.value=a,De.value=o}});let r=()=>{V.value=!1,document.removeEventListener(`click`,r)};setTimeout(()=>{document.addEventListener(`click`,r)},0),_(()=>{let e=H.value?.querySelectorAll(`[role="menuitem"]`);e&&e.length>0&&e[0].focus()})}function it(){V.value=!1,document.removeEventListener(`click`,()=>{})}function at(e){let t=H.value?.querySelectorAll(`[role="menuitem"]`);if(!t||t.length===0)return;let n=document.activeElement;t[((n?Array.from(t).indexOf(n):-1)+e+t.length)%t.length].focus()}async function ot(e){if(e)try{await ae.confirm(`${N(`@A1833:确定要撤销提交 `)}${e.hash.substring(0,7)}${N(`@A1833: 吗?这将创建一个新的提交来撤销这次提交的更改。`)}`,`撤销提交确认`,{confirmButtonText:`确认`,cancelButtonText:`取消`,type:`warning`});let t=await(await fetch(`/api/revert-commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({hash:e.hash})})).json();t.success?(y.success(t.message||`已成功撤销提交`),Y(),r.fetchStatus(),r.getBranchStatus()):y.error(t.error||`撤销提交失败`)}catch(e){e!==`cancel`&&y.error(`撤销提交失败: `+(e.message||e))}}async function st(e){if(e)try{await ae.confirm(`${N(`@A1833:确定要将提交 `)}${e.hash.substring(0,7)}${N(`@A1833: Cherry-Pick 到当前分支吗?`)}`,`Cherry-Pick确认`,{confirmButtonText:`确认`,cancelButtonText:`取消`,type:`warning`});let t=await(await fetch(`/api/cherry-pick-commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({hash:e.hash})})).json();t.success?(y.success(t.message||`已成功Cherry-Pick提交`),Y(),r.fetchStatus(),r.getBranchStatus()):y.error(t.error||`Cherry-Pick提交失败`)}catch(e){e!==`cancel`&&y.error(`Cherry-Pick提交失败: `+(e.message||e))}}async function ct(e){if(e)try{let t=await(await fetch(`/api/commit-diff-full?hash=${encodeURIComponent(e.hash)}`)).json();if(!t.success){y.error(`${N(`@A1833:复制提交内容失败: `)}${t.error}`);return}await navigator.clipboard.writeText(t.content),y.success(`${N(`@A1833:已复制提交内容: `)}${e.hash.substring(0,7)}`)}catch(e){y.error(`${N(`@A1833:复制提交内容失败: `)}${e.message}`)}}async function lt(e){if(e)try{await navigator.clipboard.writeText(e.hash),y.success(`${N(`@A1833:已复制提交哈希: `)}${e.hash.substring(0,7)}`)}catch(e){y.error(`${N(`@A1833:复制提交哈希失败: `)}${e.message}`)}}async function ut(e){if(e)try{await ae.confirm(`${N(`@A1833:确定要将当前分支重置(hard)到提交 `)}${e.hash.substring(0,7)} 吗?
|
|
6
|
-
|
|
7
|
-
警告:这将丢失该提交之后的所有更改!`,`重置确认`,{confirmButtonText:`确认重置`,cancelButtonText:`取消`,type:`warning`,dangerouslyUseHTMLString:!0});let t=await(await fetch(`/api/reset-to-commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({hash:e.hash})})).json();t.success?(y.success(t.message||`已成功重置到指定提交`),Y(),r.fetchStatus(),r.getBranchStatus()):y.error(t.error||`重置到指定提交失败`)}catch(e){e!==`cancel`&&y.error(`重置到指定提交失败: `+(e.message||e))}}function dt(){if(!r.hasMoreData||b.value||l.value||d.value)return;if(!G.value){J();return}let{scrollTop:e,scrollHeight:t,clientHeight:n}=G.value;t-e-n<=50&&Z()}let $=x(!1);function ft(){$.value=!$.value}let pt={gitStore:r,toolsStore:i,logs:o,errorMessage:s,localLoading:c,isLoading:l,showAllCommits:d,GRAPH_STORAGE_KEY:Pe,showGraph:f,graphResult:p,graphRowMap:g,graphColumnWidth:ne,commitBranchesMap:v,isLoadingMore:b,loadTimerInterval:S,commitDetailVisible:C,selectedCommit:w,commitFiles:T,commitDiff:E,isLoadingCommitDetail:D,selectedCommitFile:k,commitFileViewMode:A,commitCompareOriginal:j,commitCompareModified:M,selectedCommitBranches:pe,commitMessageExpanded:P,commitMessageTitle:F,commitMessageBody:I,hasCommitMessageBody:be,commitMessageBodyHtml:Ce,filterVisible:we,authorFilter:L,messageFilter:R,dateRangeFilter:z,availableAuthors:Te,branchFilter:B,availableBranches:Ee,contextMenuVisible:V,contextMenuTop:De,contextMenuLeft:Oe,selectedContextCommit:ke,contextMenuRef:H,filteredLogs:Ae,commitFilesForViewer:je,loadLog:U,formatBranchName:Me,getBranchTagType:Fe,isMessageTruncated:Ie,tableRef:W,tableBodyWrapper:G,get scrollRafId(){return K},set scrollRafId(e){K=e},scheduleScrollCheck:q,handleTableScroll:Le,setupTableScrollListener:J,removeTableScrollListener:Re,handleKeyDown:ze,handleAutoRefresh:Be,refreshLog:Y,viewCommitDetail:Ve,getCommitFileContent:He,getCommitCompareContent:Ue,loadCommitFileView:We,loadCommitFileCompare:X,getCommitFileDiff:Ge,handleCommitFileSelect:Ke,handleCommitDiffOnly:qe,handleCommitFullCompare:Je,copyCommitFileDiff:Ye,handleOpenFile:Xe,handleOpenWithVSCode:Ze,handleOpenInEditor:Qe,copyPureMessage:$e,loadMoreLogs:Z,resetFilters:et,applyFilters:tt,fetchAllAuthors:nt,extractAuthorsFromLogs:Q,handleContextMenu:rt,closeContextMenu:it,moveContextMenuFocus:at,revertCommit:ot,cherryPickCommit:st,copyCommitContent:ct,copyCommitHash:lt,resetToCommit:ut,checkAndLoadMore:dt,isFullscreen:$,toggleFullscreen:ft,get $t(){return N},ref:x,get ElTable(){return se},get ElTableColumn(){return oe},get ElTag(){return u},get ElButton(){return fe},get ElSelect(){return ee},get ElOption(){return a},get ElDatePicker(){return n},get ElInput(){return h},get RefreshRight(){return te},get Filter(){return ue},get FullScreen(){return de},get CopyDocument(){return ie},get Document(){return ce},FileDiffViewer:ge,CommonDialog:me,IconButton:ve,CommitGraphCell:Ne};return Object.defineProperty(pt,"__isScriptSetup",{enumerable:!1,value:!0}),pt}});t(),o(),C();var Ie={class:`log-header`},W={class:`header-left`},G={class:`log-actions`},K={viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,style:{display:`block`}},q={key:1,viewBox:`0 0 24 24`,width:`1em`,height:`1em`,fill:`currentColor`,style:{display:`block`}},Le={key:0,class:`filter-panel-header`},J={class:`filter-form`},Re={class:`filter-item`},ze={class:`compact-label`},Be={class:`filter-item`},Y={class:`compact-label`},Ve={class:`filter-item`},He={class:`compact-label`},Ue={class:`filter-item`},We={class:`compact-label`},X={class:`filter-actions`},Ge={key:0,role:`alert`,class:`log-error`},Ke={key:1,class:`log-empty-state`},qe={class:`log-empty-text`},Je={key:2,class:`content-area-content`},Ye={class:`table-view-container`},Xe={class:`commit-message-cell`},Ze={class:`message-content`},Qe={key:0,class:`branch-container`},$e={class:`message-text`},Z={class:`author-name`},et=[`title`,`aria-label`,`onClick`],tt={class:`commit-detail-container`},nt={key:0,class:`commit-info`},Q={class:`commit-info-row`},rt={class:`info-item date-item`},it={class:`info-label`},at={class:`info-value`},ot={class:`info-item branch-item`},st={class:`info-label`},ct={key:0,class:`branch-container`},lt={key:1,class:`info-value info-value-muted`},ut={class:`info-item message-item`},dt={class:`info-label`},$={class:`info-message-wrapper`},ft={class:`info-message-title`},pt=[`innerHTML`],mt=[`aria-label`,`onKeydown`];function ht(t,n,a,o,ee,s){let u=c,m=g,h=D;return v(),T(j,null,[i(`div`,{class:l([`card`,{"fullscreen-mode":o.isFullscreen}])},[f(` 固定头部区域 `),i(`div`,Ie,[i(`div`,W,[i(`h2`,null,w(o.$t(`@A1833:提交历史`)),1)]),i(`div`,G,[f(` 分支图开关 `),p(o.IconButton,{tooltip:o.showGraph?o.$t(`@A1833:隐藏分支图`):o.$t(`@A1833:显示分支图`),active:o.showGraph,"custom-class":`graph-toggle-button`,onClick:n[0]||=e=>o.showGraph=!o.showGraph},{default:S(()=>[(v(),T(`svg`,K,[...n[30]||=[i(`circle`,{cx:`6`,cy:`5`,r:`2.2`},null,-1),i(`circle`,{cx:`6`,cy:`19`,r:`2.2`},null,-1),i(`circle`,{cx:`18`,cy:`9`,r:`2.2`},null,-1),i(`path`,{d:`M6 7.2v9.6`},null,-1),i(`path`,{d:`M18 11.2c0 4-4 4.8-9.2 5.6`},null,-1)]]))]),_:1},8,[`tooltip`,`active`]),f(` 筛选按钮 `),p(o.IconButton,{tooltip:o.filterVisible?o.$t(`@A1833:隐藏筛选`):o.$t(`@A1833:显示筛选`),active:o.filterVisible,"custom-class":`filter-button`,onClick:n[1]||=e=>o.filterVisible=!o.filterVisible},{default:S(()=>[p(u,null,{default:S(()=>[p(o.Filter)]),_:1})]),_:1},8,[`tooltip`,`active`]),f(` 全屏按钮 `),p(o.IconButton,{tooltip:o.isFullscreen?o.$t(`@A1833:退出全屏`):o.$t(`@A1833:全屏显示`),active:o.isFullscreen,"custom-class":`fullscreen-button`,onClick:o.toggleFullscreen},{default:S(()=>[o.isFullscreen?(v(),T(`svg`,q,[...n[31]||=[i(`path`,{d:`M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z`},null,-1)]])):(v(),r(u,{key:0},{default:S(()=>[p(o.FullScreen)]),_:1}))]),_:1},8,[`tooltip`,`active`]),f(` 刷新按钮 `),p(o.IconButton,{tooltip:o.$t(`@A1833:刷新日志`),"custom-class":`refresh-button`,onClick:n[2]||=e=>o.refreshLog()},{default:S(()=>[p(u,null,{default:S(()=>[p(o.RefreshRight)]),_:1})]),_:1},8,[`tooltip`])])]),f(` 筛选面板放在头部下方,但在内容区域之前 `),o.filterVisible?(v(),T(`div`,Le,[i(`div`,J,[i(`div`,Re,[p(o.ElSelect,{modelValue:o.authorFilter,"onUpdate:modelValue":n[3]||=e=>o.authorFilter=e,placeholder:o.$t(`@A1833:选择作者`),"aria-label":o.$t(`@A1833:作者`),multiple:``,clearable:``,filterable:``,class:`filter-input`,size:`small`},{prefix:S(()=>[i(`span`,ze,w(o.$t(`@A1833:作者`)),1)]),default:S(()=>[(v(!0),T(j,null,e(o.availableAuthors,e=>(v(),r(o.ElOption,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`aria-label`])]),i(`div`,Be,[p(o.ElSelect,{modelValue:o.branchFilter,"onUpdate:modelValue":n[4]||=e=>o.branchFilter=e,placeholder:o.$t(`@A1833:选择分支`),"aria-label":o.$t(`@A1833:分支`),multiple:``,clearable:``,filterable:``,class:`filter-input`,size:`small`},{prefix:S(()=>[i(`span`,Y,w(o.$t(`@A1833:分支`)),1)]),default:S(()=>[(v(!0),T(j,null,e(o.availableBranches,e=>(v(),r(o.ElOption,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`aria-label`])]),i(`div`,Ve,[p(o.ElInput,{modelValue:o.messageFilter,"onUpdate:modelValue":n[5]||=e=>o.messageFilter=e,placeholder:o.$t(`@A1833:提交信息关键词`),"aria-label":o.$t(`@A1833:提交信息关键词`),clearable:``,class:`filter-input`,size:`small`,onKeyup:M(o.applyFilters,[`enter`])},{prefix:S(()=>[i(`span`,He,w(o.$t(`@A1833:信息`)),1)]),_:1},8,[`modelValue`,`placeholder`,`aria-label`])]),i(`div`,Ue,[p(o.ElDatePicker,{modelValue:o.dateRangeFilter,"onUpdate:modelValue":n[6]||=e=>o.dateRangeFilter=e,type:`daterange`,"range-separator":o.$t(`@A1833:至`),"start-placeholder":o.$t(`@A1833:开始日期`),"end-placeholder":o.$t(`@A1833:结束日期`),"aria-label":o.$t(`@A1833:日期`),format:`YYYY-MM-DD`,"value-format":`YYYY-MM-DD`,class:`filter-input date-range`,size:`small`},{prefix:S(()=>[i(`span`,We,w(o.$t(`@A1833:日期`)),1)]),_:1},8,[`modelValue`,`range-separator`,`start-placeholder`,`end-placeholder`,`aria-label`])]),i(`div`,X,[p(o.ElButton,{type:`primary`,size:`small`,onClick:o.applyFilters,class:`filter-action-button`},{default:S(()=>[d(w(o.$t(`@A1833:应用`)),1)]),_:1}),p(o.ElButton,{type:`info`,size:`small`,onClick:o.resetFilters,class:`filter-action-button`},{default:S(()=>[d(w(o.$t(`@A1833:重置`)),1)]),_:1})])])])):f(`v-if`,!0),f(` 内容区域,添加上边距以避免被固定头部遮挡 `),i(`div`,{class:l([`content-area`,{"with-filter":o.filterVisible}])},[o.errorMessage&&o.gitStore.isGitRepo?(v(),T(`div`,Ge,w(o.errorMessage),1)):o.gitStore.isGitRepo?(v(),T(`div`,Je,[f(` 表格视图 `),i(`div`,Ye,[E((v(),r(o.ElTable,{ref:`tableRef`,data:o.filteredLogs,stripe:``,border:``,size:`small`,class:`log-table compact-table`,"empty-text":o.isLoading?o.$t(`@A1833:加载中…`):o.$t(`@A1833:没有匹配的提交记录`),height:`450`,onRowContextmenu:o.handleContextMenu,onRowClick:n[7]||=e=>o.viewCommitDetail(e)},{default:S(()=>[f(` Git 分支图列(最左侧) `),o.showGraph?(v(),r(o.ElTableColumn,{key:0,width:o.graphColumnWidth,"class-name":`graph-column`,align:`center`},{default:S(e=>[o.graphRowMap.get(e.row.hash)?(v(),r(o.CommitGraphCell,{key:0,layout:o.graphRowMap.get(e.row.hash),width:o.graphColumnWidth},null,8,[`layout`,`width`])):f(`v-if`,!0)]),_:1},8,[`width`])):f(`v-if`,!0),p(o.ElTableColumn,{label:o.$t(`@A1833:提交信息`),"min-width":`300`},{default:S(t=>[i(`div`,Xe,[f(` 分支信息和提交信息水平排列 `),i(`div`,Ze,[f(` 分支信息 `),t.row.branch?(v(),T(`div`,Qe,[(v(!0),T(j,null,e(t.row.branch.split(`,`),(e,t)=>(v(),r(o.ElTag,{key:t,size:`small`,type:o.getBranchTagType(e),class:`branch-tag`},{default:S(()=>[d(w(o.formatBranchName(e)),1)]),_:2},1032,[`type`]))),128))])):f(`v-if`,!0),f(` 提交信息(hover 显示完整内容预览) `),t.row.message?(v(),r(m,{key:1,content:t.row.message,placement:`top`,"show-after":350,disabled:!o.isMessageTruncated(t.row.message),"popper-class":`commit-message-tooltip`},{default:S(()=>[i(`span`,$e,w(t.row.message),1)]),_:2},1032,[`content`,`disabled`])):f(`v-if`,!0),p(o.ElButton,{icon:o.CopyDocument,size:`small`,onClick:b(e=>o.copyPureMessage(t.row.message),[`stop`]),class:`copy-message-btn`,title:o.$t(`@A1833:复制纯净提交信息(不含类型前缀)`),"aria-label":o.$t(`@A1833:复制纯净提交信息(不含类型前缀)`)},null,8,[`icon`,`onClick`,`title`,`aria-label`])])])]),_:1},8,[`label`]),p(o.ElTableColumn,{prop:`date`,"class-name":`commit-date-cell`,label:o.$t(`@A1833:日期`),"min-width":`130`,width:`150`,resizable:``},null,8,[`label`]),p(o.ElTableColumn,{label:o.$t(`@A1833:作者`),"min-width":`90`,width:`120`,resizable:``},{default:S(e=>[p(m,{content:e.row.email,placement:`top`,"show-after":200},{default:S(()=>[i(`span`,Z,w(e.row.author),1)]),_:2},1032,[`content`])]),_:1},8,[`label`]),p(o.ElTableColumn,{label:o.$t(`@A1833:哈希`),"min-width":`78`,width:`78`,align:`center`,resizable:``},{default:S(e=>[p(m,{content:e.row.hash,placement:`top`,"show-after":300},{default:S(()=>[i(`button`,{type:`button`,class:`commit-hash`,title:o.$t(`@A1833:点击复制完整哈希`),"aria-label":o.$t(`@A1833:复制提交哈希 {hash}`,{hash:e.row.hash.substring(0,7)}),onClick:b(t=>o.copyCommitHash(e.row),[`stop`])},w(e.row.hash.substring(0,7)),9,et)]),_:2},1032,[`content`])]),_:1},8,[`label`])]),_:1},8,[`data`,`empty-text`])),[[h,o.isLoading]])])])):(v(),T(`div`,Ke,[p(u,{class:`log-empty-icon`},{default:S(()=>[p(o.Document)]),_:1}),i(`span`,qe,w(o.$t(`@A1833:暂无提交记录`)),1)]))],2),f(` 提交详情弹窗 `),p(o.CommonDialog,{modelValue:o.commitDetailVisible,"onUpdate:modelValue":n[9]||=e=>o.commitDetailVisible=e,title:`${o.$t(`@A1833:提交详情: `)}${o.selectedCommit?.hash?o.selectedCommit.hash:o.$t(`@A1833:未知`)}`,size:`fullscreen`,type:`flex`,heightMode:`fixed`,"destroy-on-close":``,"custom-class":`commit-detail-dialog`},{default:S(()=>[E((v(),T(`div`,tt,[f(` 提交基本信息 `),o.selectedCommit?(v(),T(`div`,nt,[i(`div`,Q,[i(`div`,rt,[i(`span`,it,w(o.$t(`@A1833:日期`)),1),i(`span`,at,w(o.selectedCommit.date),1)]),i(`div`,ot,[i(`span`,st,w(o.$t(`@A1833:所在分支`)),1),o.selectedCommitBranches.length>0?(v(),T(`div`,ct,[(v(!0),T(j,null,e(o.selectedCommitBranches,e=>(v(),r(o.ElTag,{key:e,size:`small`,type:o.getBranchTagType(e),class:`branch-tag`},{default:S(()=>[d(w(o.formatBranchName(e)),1)]),_:2},1032,[`type`]))),128))])):(v(),T(`span`,lt,w(o.$t(`@A1833:暂不属于任何分支`)),1))]),i(`div`,ut,[i(`span`,dt,w(o.$t(`@A1833:提交信息`)),1),i(`div`,$,[i(`div`,ft,w(o.commitMessageTitle),1),o.commitMessageExpanded&&o.hasCommitMessageBody?(v(),T(`div`,{key:0,class:`info-message-body`,innerHTML:o.commitMessageBodyHtml},null,8,pt)):f(`v-if`,!0)]),o.hasCommitMessageBody?(v(),T(`button`,{key:0,class:`info-message-toggle`,onClick:n[8]||=e=>o.commitMessageExpanded=!o.commitMessageExpanded},[d(w(o.commitMessageExpanded?o.$t(`@A1833:收起`):o.$t(`@A1833:展开`))+` `,1),i(`span`,{class:l([`info-message-toggle-icon`,{"is-expanded":o.commitMessageExpanded}])},`▾`,2)])):f(`v-if`,!0)])])])):f(`v-if`,!0),f(` 变更文件列表和差异 `),p(o.FileDiffViewer,{files:o.commitFilesForViewer,loading:o.isLoadingCommitDetail,diffContent:o.commitDiff,selectedFile:o.selectedCommitFile,plainText:!1,compareMode:o.commitFileViewMode!==`diff`,compareOriginal:o.commitCompareOriginal,compareModified:o.commitCompareModified,context:`commit-detail`,"commit-hash":o.selectedCommit?.hash,emptyText:o.$t(`@A1833:没有找到变更文件`),"show-vscode-button":o.toolsStore.vscodeAvailable,onFileSelect:o.handleCommitFileSelect,onOpenFile:o.handleOpenFile,onOpenWithVscode:o.handleOpenWithVSCode,onOpenInEditor:o.handleOpenInEditor},{"header-extra":S(()=>[p(o.ElButton,{size:`small`,type:o.commitFileViewMode===`diff`?`primary`:`default`,onClick:o.handleCommitDiffOnly},{default:S(()=>[d(w(o.$t(`@A1833:仅显示差异`)),1)]),_:1},8,[`type`]),p(o.ElButton,{size:`small`,type:o.commitFileViewMode===`diff`?`default`:`primary`,onClick:o.handleCommitFullCompare},{default:S(()=>[d(w(o.$t(`@A1833:显示完整对比`)),1)]),_:1},8,[`type`]),p(o.ElButton,{size:`small`,disabled:!o.selectedCommitFile,onClick:o.copyCommitFileDiff},{default:S(()=>[d(w(o.$t(`@A1833:复制差异`)),1)]),_:1},8,[`disabled`])]),_:1},8,[`files`,`loading`,`diffContent`,`selectedFile`,`compareMode`,`compareOriginal`,`compareModified`,`commit-hash`,`emptyText`,`show-vscode-button`])])),[[h,o.isLoadingCommitDetail]])]),_:1},8,[`modelValue`,`title`])],2),f(` 添加右键菜单 `),E(i(`ul`,{class:l([`context-menu`,{"fullscreen-context-menu":o.isFullscreen}]),style:ne({top:o.contextMenuTop+`px`,left:o.contextMenuLeft+`px`}),ref:`contextMenuRef`,role:`menu`,"aria-label":o.$t(`@A1833:提交操作菜单`),onKeydown:[M(b(o.closeContextMenu,[`prevent`]),[`esc`]),n[28]||=M(b(e=>o.moveContextMenuFocus(1),[`prevent`]),[`down`]),n[29]||=M(b(e=>o.moveContextMenuFocus(-1),[`prevent`]),[`up`])]},[i(`li`,{class:`context-menu-item`,role:`menuitem`,tabindex:`-1`,onClick:n[10]||=e=>o.viewCommitDetail(o.selectedContextCommit),onKeydown:[n[11]||=M(b(e=>o.viewCommitDetail(o.selectedContextCommit),[`prevent`]),[`enter`]),n[12]||=M(b(e=>o.viewCommitDetail(o.selectedContextCommit),[`prevent`]),[`space`])]},[n[32]||=i(`i`,{class:`el-icon-view`,"aria-hidden":`true`},null,-1),d(` `+w(o.$t(`@A1833:查看详情`)),1)],32),i(`li`,{class:`context-menu-item`,role:`menuitem`,tabindex:`-1`,onClick:n[13]||=e=>o.copyCommitHash(o.selectedContextCommit),onKeydown:[n[14]||=M(b(e=>o.copyCommitHash(o.selectedContextCommit),[`prevent`]),[`enter`]),n[15]||=M(b(e=>o.copyCommitHash(o.selectedContextCommit),[`prevent`]),[`space`])]},[n[33]||=i(`i`,{class:`el-icon-document-copy`,"aria-hidden":`true`},null,-1),d(` `+w(o.$t(`@A1833:复制提交哈希`)),1)],32),i(`li`,{class:`context-menu-item`,role:`menuitem`,tabindex:`-1`,onClick:n[16]||=e=>o.copyCommitContent(o.selectedContextCommit),onKeydown:[n[17]||=M(b(e=>o.copyCommitContent(o.selectedContextCommit),[`prevent`]),[`enter`]),n[18]||=M(b(e=>o.copyCommitContent(o.selectedContextCommit),[`prevent`]),[`space`])]},[n[34]||=i(`i`,{class:`el-icon-document`,"aria-hidden":`true`},null,-1),d(` `+w(o.$t(`@A1833:复制提交内容`)),1)],32),i(`li`,{class:`context-menu-item`,role:`menuitem`,tabindex:`-1`,onClick:n[19]||=e=>o.resetToCommit(o.selectedContextCommit),onKeydown:[n[20]||=M(b(e=>o.resetToCommit(o.selectedContextCommit),[`prevent`]),[`enter`]),n[21]||=M(b(e=>o.resetToCommit(o.selectedContextCommit),[`prevent`]),[`space`])]},[n[35]||=i(`i`,{class:`el-icon-refresh-right`,"aria-hidden":`true`},null,-1),d(` `+w(o.$t(`@A1833:重置到该提交(hard)`)),1)],32),i(`li`,{class:`context-menu-item`,role:`menuitem`,tabindex:`-1`,onClick:n[22]||=e=>o.revertCommit(o.selectedContextCommit),onKeydown:[n[23]||=M(b(e=>o.revertCommit(o.selectedContextCommit),[`prevent`]),[`enter`]),n[24]||=M(b(e=>o.revertCommit(o.selectedContextCommit),[`prevent`]),[`space`])]},[n[36]||=i(`i`,{class:`el-icon-delete`,"aria-hidden":`true`},null,-1),d(` `+w(o.$t(`@A1833:撤销提交 (Revert)`)),1)],32),i(`li`,{class:`context-menu-item`,role:`menuitem`,tabindex:`-1`,onClick:n[25]||=e=>o.cherryPickCommit(o.selectedContextCommit),onKeydown:[n[26]||=M(b(e=>o.cherryPickCommit(o.selectedContextCommit),[`prevent`]),[`enter`]),n[27]||=M(b(e=>o.cherryPickCommit(o.selectedContextCommit),[`prevent`]),[`space`])]},[n[37]||=i(`i`,{class:`el-icon-edit`,"aria-hidden":`true`},null,-1),d(` Cherry`+w(o.$t(`@A1833:-Pick 到当前分支`)),1)],32)],46,mt),[[A,o.contextMenuVisible]])],64)}var gt=pe(Fe,[[`render`,ht],[`__scopeId`,`data-v-aeb72cea`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/views/components/LogList.vue`]]);export{gt as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$n as e,Bn as t,Cn as n,Ct as r,Dn as i,En as a,Fr as o,Ht as s,In as c,J as l,Jr as u,L as d,Nn as f,On as p,Pn as m,Tn as h,W as g,Xr as _,Y as v,Yn as y,Zn as b,a as x,bn as S,br as C,cr as w,dn as T,ei as E,ht as D,i as O,kn as k,lr as A,lt as j,o as M,or as ee,pr as N,pt as te,qn as ne,vn as P,xn as F,xt as re,z as I,zt as ie}from"./element-plus-C8IhrglD.js";import{C as ae,S as L,m as oe}from"./vendor-CazUJJkv.js";import{n as R,t as z}from"./_plugin-vue_export-helper-DibQ4qNS.js";import{r as se,t as B}from"./configStore-DQ92GVaR.js";import{n as ce,t as le}from"./flow-mindmap-BQUUIfaR.js";import{i as ue,x as de}from"./index-ED00NaPI.js";N(),t();function V(e){let t=(e||``).trim();if(!t)return``;let n=t.replace(/[\\/]+$/,``);return n?/^[a-z]:$/i.test(n)?`${n}\\`:n:t}function H(e){return V(e).replace(/\//g,`\\`).replace(/\\+$/,``).toLowerCase()}function U(e,t){let n=H(e),r=H(t);return!n||!r?!1:n===r||n.startsWith(r.endsWith(`\\`)?r:`${r}\\`)}function W(e){let t=Math.max(e.lastIndexOf(`\\`),e.lastIndexOf(`/`));return t>0?e.slice(0,t):e}var fe=L(`mindmap`,()=>{let e=B(),t=C([]),n=C([]),r=C(null),i=C(!1),a=C(!1),o=C(null),s=C(``),c=C(``),l=h(()=>r.value!==null),u=h(()=>n.value.reduce((e,t)=>e+t.files.length,0)),d=h(()=>n.value.some(e=>e.loading));function f(){e.ui.mindmapDirs=[...t.value]}function p(e){return n.value.find(t=>H(t.dir)===H(e))}function m(e){let t=p(e);if(t)return t;let r={dir:e,files:[],error:null,loading:!1};return n.value.push(r),r}function g(e){let n=V(e);return!n||t.value.some(e=>H(e)===H(n))?!1:(t.value.push(n),m(n),!0)}let _=new Map;async function v(e){let n=p(e);if(!n)return;let r=H(n.dir),i=(_.get(r)||0)+1;_.set(r,i),n.loading=!0,n.error=null;try{let e=await(await fetch(`/api/mindmap/list?dir=${encodeURIComponent(n.dir)}`)).json();if(_.get(r)!==i)return;if(e.success){let r=typeof e.dir==`string`&&e.dir?e.dir:n.dir;if(r!==n.dir){let e=t.value.findIndex(e=>H(e)===H(n.dir));e>=0&&(t.value[e]=r),n.dir=r,f()}n.files=e.files||[]}else n.error=e.error||`读取目录失败`,n.files=[]}catch(e){if(_.get(r)!==i)return;n.error=e?.message||String(e),n.files=[]}finally{_.get(r)===i&&(n.loading=!1)}}async function y(){await Promise.all(t.value.map(e=>v(e)))}async function b(){let n=Array.isArray(e.ui.mindmapDirs)?e.ui.mindmapDirs:[];for(let e of n)g(e);s.value&&!t.value.some(e=>H(e)===H(s.value))&&(s.value=``),await y()}async function x(e){let t=[];for(let n of e||[]){let e=V(n);e&&g(e)&&t.push(e)}return t.length===0?0:(f(),s.value||=t[0],await Promise.all(t.map(e=>v(e))),t.length)}function S(e){let r=H(e);t.value=t.value.filter(e=>H(e)!==r),n.value=n.value.filter(e=>H(e.dir)!==r),_.delete(r),s.value&&H(s.value)===r&&(s.value=``),f()}function w(){if(t.value.length===0)return{dir:null,ambiguous:!1};let e=t.value.find(e=>H(e)===H(s.value));if(e)return{dir:e,ambiguous:!1};let n=r.value?.path;if(n){let e=t.value.find(e=>U(n,e));if(e)return{dir:e,ambiguous:!1}}return t.value.length===1?{dir:t.value[0],ambiguous:!1}:{dir:null,ambiguous:!0}}async function T(e,n=!1){if(!n&&i.value&&r.value)throw Error(`UNSAVED_CHANGES`);a.value=!0,o.value=null;try{let n=await(await fetch(`/api/mindmap/read?path=${encodeURIComponent(e)}`)).json();if(n.success){r.value={path:n.path,title:n.title,content:n.content,mtime:n.mtime},c.value=n.content,i.value=!1;let e=t.value.find(e=>U(n.path,e));s.value=e||W(n.path)}else o.value=n.error||`读取文件失败`}catch(e){o.value=e?.message||String(e)}finally{a.value=!1}}async function E(e,t=!1,n){let l=n?V(n):w().dir;if(!l)throw Error(`未选择目录`);if(!t&&i.value&&r.value)throw Error(`UNSAVED_CHANGES`);a.value=!0,o.value=null;try{let t=await(await fetch(`/api/mindmap/create`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({dir:l,name:e})})).json();if(t.success)r.value={path:t.path,title:t.title,content:t.content,mtime:t.mtime},c.value=t.content,i.value=!1,s.value=l,await v(l);else throw o.value=t.error||`新建失败`,Error(t.error||`新建失败`)}catch(e){throw e.message===`UNSAVED_CHANGES`||(o.value=e?.message||String(e)),e}finally{a.value=!1}}async function D(e){if(!r.value)throw Error(`没有打开的文件`);a.value=!0,o.value=null;try{let t=await(await fetch(`/api/mindmap/save`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:r.value.path,content:e})})).json();if(t.success){let n=r.value.path;return r.value&&(r.value.content=e,r.value.mtime=t.mtime),c.value=e,i.value=!1,await O(n),t}throw o.value=t.error||`保存失败`,Error(t.error||`保存失败`)}catch(e){throw o.value=e?.message||String(e),e}finally{a.value=!1}}async function O(e){let t=n.value.find(t=>U(e,t.dir));t&&await v(t.dir)}async function k(e){let t=await(await fetch(`/api/mindmap/delete`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})})).json();if(!t.success)throw Error(t.error||`删除失败`);return r.value&&r.value.path===e&&(r.value=null,i.value=!1,c.value=``),await O(e),t}async function A(e,t){let n=await(await fetch(`/api/mindmap/rename`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e,newName:t})})).json();if(!n.success)throw Error(n.error||`重命名失败`);return r.value&&e===r.value.path&&(r.value={...r.value,path:n.path,title:t}),await O(n.path||e),n}function j(){r.value&&(i.value=!0)}function M(){r.value=null,i.value=!1,c.value=``}return{dirs:t,groups:n,current:r,dirty:i,loading:a,refreshing:d,error:o,activeDir:s,hasCurrent:l,filesCount:u,init:b,addDirs:x,removeDir:S,refresh:y,refreshDir:v,resolveTargetDir:w,openFile:T,createFile:E,saveCurrent:D,deleteFile:k,renameFile:A,markDirty:j,closeCurrent:M}});t(),N();var G=1500,K=c({__name:`MindmapView`,setup(e,{expose:t}){t();let n=fe(),i=B(),{currentLocale:a}=ae(se()),o=h(()=>{let e=i.theme;return e===`dark`?!0:e===`light`?!1:window.matchMedia?.(`(prefers-color-scheme: dark)`).matches??!1}),c=C(null),l=C(!1);function u(){l.value=!0}async function d(e){l.value=!1;let t=(e||[]).filter(Boolean);if(t.length!==0)try{let e=await n.addDirs(t);e>0?x.success(R(`@MINDMAP:已添加目录`,{n:e})):x.info(R(`@MINDMAP:重复目录已忽略`))}catch(e){x.error(e?.message||R(`@MINDMAP:读取目录失败`))}}let f=C({});function p(e){f.value={...f.value,[e]:!f.value[e]},n.activeDir=e}function m(e){let t=e.replace(/[\\/]+$/,``).split(/[\\/]/);return t[t.length-1]||e}function g(e){return!!n.activeDir&&n.activeDir.toLowerCase()===e.toLowerCase()}function _(){let{dir:e,ambiguous:t}=n.resolveTargetDir();return e||(x.warning(R(t?`@MINDMAP:请选择目标目录`:`@MINDMAP:请先添加目录`)),null)}async function b(e){let t=e||_();if(!t||(e&&(n.activeDir=e),!await k()))return;let r=``;try{r=(await O.prompt(R(`@MINDMAP:输入文件名提示`),R(`@MINDMAP:新建思维导图`),{confirmButtonText:R(`@MINDMAP:新建`),cancelButtonText:R(`@MINDMAP:取消`),inputPlaceholder:R(`@MINDMAP:文件名占位`),inputValidator:e=>!e||!e.trim()?R(`@MINDMAP:名称不能为空`):!/[\\/:*?"<>|]/.test(e)||R(`@MINDMAP:名称含非法字符`)})).value.trim()}catch{return}try{await n.createFile(r,!0,t),x.success(R(`@MINDMAP:已新建并打开`))}catch(e){x.error(e?.message||R(`@MINDMAP:新建失败`))}}async function S(e=!1){if(n.current)try{let t=c.value?.exportData();if(!t){e||x.warning(R(`@MINDMAP:无法获取数据`));return}await n.saveCurrent(t),e||x.success(R(`@MINDMAP:已保存`))}catch(e){x.error(e?.message||R(`@MINDMAP:保存失败`))}}let w=null;function T(){n.current&&n.dirty&&(w&&clearTimeout(w),w=setTimeout(()=>{w=null,n.current&&n.dirty&&S(!0)},G))}function E(){w&&=(clearTimeout(w),null)}async function k(){if(!n.dirty||!n.current)return!0;try{await O.confirm(R(`@MINDMAP:未保存提示`,{title:n.current.title}),R(`@MINDMAP:未保存的改动`),{confirmButtonText:R(`@MINDMAP:保存`),cancelButtonText:R(`@MINDMAP:丢弃`),distinguishCancelAndClose:!0,type:`warning`}),E();let e=c.value?.exportData();return e&&(await n.saveCurrent(e),x.success(R(`@MINDMAP:已保存`))),!0}catch(e){return e===`cancel`&&(E(),!0)}}async function A(e){if(!(n.current&&n.current.path===e)&&await k())try{await n.openFile(e,!0)}catch(e){x.error(e?.message||R(`@MINDMAP:打开失败`))}}async function M(e){let t=!!n.current&&U(n.current.path,e),r=R(`@MINDMAP:确认移除目录提示`,{dir:e});t&&(r=`${r} ${R(`@MINDMAP:当前文件将保持打开`)}`);try{await O.confirm(r,R(`@MINDMAP:移除目录`),{confirmButtonText:R(`@MINDMAP:移除目录`),cancelButtonText:R(`@MINDMAP:取消`),type:`warning`})}catch{return}n.removeDir(e),x.success(R(`@MINDMAP:已移除目录`))}let N=C(null);function P(e,t){e.preventDefault(),N.value={x:e.clientX,y:e.clientY,dir:t}}function F(){N.value=null}async function I(){let e=N.value?.dir;if(F(),!e)return;let t=await de(e);t.success?x.success(t.message||R(`@MINDMAP:已在文件管理器中打开`)):x.error(t.error||R(`@MINDMAP:打开目录失败`))}function L(){let e=N.value?.dir;F(),e&&b(e)}function z(){let e=N.value?.dir;F(),e&&M(e)}async function V(e){try{await O.confirm(R(`@MINDMAP:确认删除提示`,{title:e.title}),R(`@MINDMAP:删除`),{confirmButtonText:R(`@MINDMAP:删除`),cancelButtonText:R(`@MINDMAP:取消`),type:`warning`})}catch{return}try{await n.deleteFile(e.path),x.success(R(`@MINDMAP:已删除`))}catch(e){x.error(e?.message||R(`@MINDMAP:删除失败`))}}async function H(e){let t=``;try{t=(await O.prompt(R(`@MINDMAP:输入新名称提示`),R(`@MINDMAP:重命名`),{confirmButtonText:R(`@MINDMAP:确定`),cancelButtonText:R(`@MINDMAP:取消`),inputValue:e.title,inputValidator:e=>!e||!e.trim()?R(`@MINDMAP:名称不能为空`):!/[\\/:*?"<>|]/.test(e)||R(`@MINDMAP:名称含非法字符`)})).value.trim()}catch{return}try{await n.renameFile(e.path,t),x.success(R(`@MINDMAP:已重命名`))}catch(e){x.error(e?.message||R(`@MINDMAP:重命名失败`))}}function W(e){n.markDirty(),T()}function K(e){}async function q(e){let t=e||_();if(!t)return;let r=``,i=``;try{r=(await O.prompt(R(`@MINDMAP:粘贴Markdown提示`),R(`@MINDMAP:从Markdown导入`),{confirmButtonText:R(`@MINDMAP:导入`),cancelButtonText:R(`@MINDMAP:取消`),inputType:`textarea`,inputPlaceholder:R(`@MINDMAP:Markdown占位`),inputValidator:e=>!e||!e.trim()?R(`@MINDMAP:内容不能为空`):!0})).value}catch{return}try{i=(await O.prompt(R(`@MINDMAP:输入文件名提示`),R(`@MINDMAP:文件名`),{confirmButtonText:R(`@MINDMAP:新建`),cancelButtonText:R(`@MINDMAP:取消`),inputValidator:e=>!e||!e.trim()?R(`@MINDMAP:名称不能为空`):!/[\\/:*?"<>|]/.test(e)||R(`@MINDMAP:名称含非法字符`)})).value.trim()}catch{return}try{await n.createFile(i,!0,t);let e=le(r,i),a=JSON.stringify(e,null,2);await n.saveCurrent(a),x.success(R(`@MINDMAP:已导入`))}catch(e){x.error(e?.message||R(`@MINDMAP:导入失败`))}}async function J(){if(c.value)try{let e=c.value.getMarkdown();await navigator.clipboard.writeText(e),x.success(R(`@MINDMAP:已复制Markdown`))}catch(e){x.error(e?.message||R(`@MINDMAP:复制失败`))}}function Y(e){(e.ctrlKey||e.metaKey)&&e.key===`s`&&(e.preventDefault(),n.current&&n.dirty&&(E(),S()))}let X=C(0);ee(()=>n.current?.path,()=>{X.value++});let Z=C(!1);function Q(){Z.value=!Z.value}let pe=h(()=>{let e=n.current?.content;if(!e)return null;try{return JSON.parse(e)}catch{return null}});y(async()=>{window.addEventListener(`keydown`,Y),document.addEventListener(`click`,F),await n.init()}),ne(()=>{window.removeEventListener(`keydown`,Y),document.removeEventListener(`click`,F),E()});function me(e){if(!e)return`-`;let t=new Date(e),n=Date.now()-e;return n<6e4?R(`@MINDMAP:刚刚`):n<36e5?`${Math.floor(n/6e4)}${R(`@MINDMAP:分钟前`)}`:n<864e5?`${Math.floor(n/36e5)}${R(`@MINDMAP:小时前`)}`:`${t.getMonth()+1}/${t.getDate()} ${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function he(e){return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`:`0 B`}let $={store:n,configStore:i,currentLocale:a,isDark:o,mmRef:c,filePickerVisible:l,openDirPicker:u,onPickerConfirm:d,collapsedGroups:f,toggleGroup:p,baseName:m,isActiveDir:g,pickTargetDir:_,handleNewFile:b,handleSave:S,AUTOSAVE_DELAY:G,get autosaveTimer(){return w},set autosaveTimer(e){w=e},scheduleAutosave:T,cancelAutosave:E,confirmDiscardIfDirty:k,handleOpenFile:A,handleRemoveDir:M,ctxMenu:N,openDirContextMenu:P,closeCtxMenu:F,ctxOpenDir:I,ctxNewFile:L,ctxRemoveDir:z,handleDelete:V,handleRename:H,onMindMapChange:W,onMindMapSelect:K,handleImportMarkdown:q,handleExportMarkdown:J,onKeydown:Y,mmKey:X,previewMode:Z,onCanvasTogglePreview:Q,mmData:pe,formatTime:me,formatSize:he,get $t(){return R},get FolderOpened(){return r},get Plus(){return ie},get FolderChecked(){return re},get Delete(){return j},get Edit(){return D},get Refresh(){return s},get Document(){return te},get ArrowDown(){return v},get FilePicker(){return oe},get MindMap(){return ce},EmptyState:ue};return Object.defineProperty($,"__isScriptSetup",{enumerable:!1,value:!0}),$}});t(),o(),T();var q={class:`mindmap-view`},J={class:`mm-toolbar`},Y={class:`mm-toolbar-left`},X={class:`mm-dir-tooltip`},Z={key:1,class:`mm-dir-empty`},Q={class:`mm-toolbar-right`},pe={key:0,class:`mm-status`},me=[`title`],he={key:0,class:`mm-status-dirty`},$={class:`mm-body`},ge={class:`mm-sidebar`},_e={class:`mm-sidebar-header`},ve={class:`mm-sidebar-title`},ye={class:`mm-sidebar-list`},be={key:0,class:`mm-sidebar-error`},xe=[`title`,`onClick`,`onContextmenu`],Se={class:`mm-group-info`},Ce={class:`mm-group-name`},we={class:`mm-group-title`},Te={class:`mm-group-count`},Ee={class:`mm-group-path`},De={class:`mm-group-body`},Oe=[`title`],ke=[`onClick`],Ae={class:`mm-file-info`},je=[`title`],Me={class:`mm-file-meta`},Ne={class:`mm-editor`};function Pe(t,r,o,s,c,h){let v=I,y=d,x=g,C=l,T=M;return b(),k(`div`,q,[p(` 顶部工具栏 `),a(`div`,J,[a(`div`,Y,[m(v,{size:`small`,icon:s.FolderOpened,onClick:s.openDirPicker},{default:w(()=>[f(E(s.$t(`@MINDMAP:添加目录`)),1)]),_:1},8,[`icon`]),s.store.dirs.length>0?(b(),i(x,{key:0,placement:`bottom-start`,"show-after":200},{content:w(()=>[a(`div`,X,[(b(!0),k(F,null,e(s.store.dirs,e=>(b(),k(`div`,{key:e},E(e),1))),128))])]),default:w(()=>[m(y,{size:`small`,type:`info`,class:`mm-dir-tag`},{default:w(()=>[f(E(s.$t(`@MINDMAP:个目录`,{n:s.store.dirs.length})),1)]),_:1})]),_:1})):(b(),k(`span`,Z,E(s.$t(`@MINDMAP:请先添加目录`)),1))]),a(`div`,Q,[m(v,{size:`small`,icon:s.Plus,disabled:s.store.dirs.length===0,onClick:r[0]||=e=>s.handleNewFile()},{default:w(()=>[f(E(s.$t(`@MINDMAP:新建`)),1)]),_:1},8,[`icon`,`disabled`]),m(v,{size:`small`,icon:s.Document,disabled:s.store.dirs.length===0,onClick:r[1]||=e=>s.handleImportMarkdown()},{default:w(()=>[f(E(s.$t(`@MINDMAP:从MD导入`)),1)]),_:1},8,[`icon`,`disabled`]),m(v,{size:`small`,icon:s.Edit,disabled:!s.store.current,onClick:s.handleExportMarkdown},{default:w(()=>[f(E(s.$t(`@MINDMAP:复制MD`)),1)]),_:1},8,[`icon`,`disabled`]),m(v,{size:`small`,type:`primary`,icon:s.FolderChecked,disabled:!s.store.current||!s.store.dirty,loading:s.store.loading,onClick:r[2]||=()=>{s.cancelAutosave(),s.handleSave()}},{default:w(()=>[f(E(s.$t(`@MINDMAP:保存`)),1)]),_:1},8,[`icon`,`disabled`,`loading`]),s.store.current?(b(),k(`span`,pe,[a(`span`,{class:`mm-status-title`,title:s.store.current.title},E(s.store.current.title),9,me),s.store.dirty?(b(),k(`span`,he,`●`)):p(`v-if`,!0)])):p(`v-if`,!0)])]),a(`div`,$,[p(` 左侧:按目录分组的文件列表 `),a(`div`,ge,[a(`div`,_e,[a(`span`,ve,E(s.$t(`@MINDMAP:文件列表`)),1),m(v,{size:`small`,text:``,icon:s.Refresh,loading:s.store.refreshing,onClick:r[3]||=e=>s.store.refresh(),disabled:s.store.dirs.length===0},null,8,[`icon`,`loading`,`disabled`])]),A((b(),k(`div`,ye,[s.store.error?(b(),k(`div`,be,E(s.store.error),1)):p(`v-if`,!0),s.store.dirs.length===0?(b(),i(s.EmptyState,{key:1,class:`mm-sidebar-empty`,size:`inline`,title:s.$t(`@MINDMAP:请先添加目录`)},null,8,[`title`])):(b(!0),k(F,{key:2},e(s.store.groups,t=>(b(),k(`div`,{key:t.dir,class:`mm-group`},[a(`div`,{class:u([`mm-group-header`,{active:s.isActiveDir(t.dir)}]),title:t.dir,onClick:e=>s.toggleGroup(t.dir),onContextmenu:e=>s.openDirContextMenu(e,t.dir)},[m(C,{class:u([`mm-group-caret`,{collapsed:s.collapsedGroups[t.dir]}])},{default:w(()=>[m(s.ArrowDown)]),_:1},8,[`class`]),a(`div`,Se,[a(`div`,Ce,[a(`span`,we,E(s.baseName(t.dir)),1),a(`span`,Te,E(t.files.length),1)]),a(`div`,Ee,E(t.dir),1)])],42,xe),A(a(`div`,De,[t.error?(b(),k(`div`,{key:0,class:`mm-group-error`,title:t.error},[a(`span`,null,E(s.$t(`@MINDMAP:目录不存在或已删除`)),1),m(v,{size:`small`,text:``,type:`danger`,onClick:e=>s.handleRemoveDir(t.dir)},{default:w(()=>[f(E(s.$t(`@MINDMAP:移除目录`)),1)]),_:1},8,[`onClick`])],8,Oe)):t.files.length===0?(b(),i(s.EmptyState,{key:1,class:`mm-sidebar-empty`,size:`inline`,title:s.$t(`@MINDMAP:该目录暂无思维导图`)},null,8,[`title`])):(b(!0),k(F,{key:2},e(t.files,e=>(b(),k(`div`,{key:e.path,class:u([`mm-file-item`,{active:s.store.current?.path===e.path}]),onClick:t=>s.handleOpenFile(e.path)},[a(`div`,Ae,[a(`div`,{class:`mm-file-title`,title:e.title},E(e.title),9,je),a(`div`,Me,E(s.formatTime(e.mtime))+` · `+E(s.formatSize(e.size)),1)]),a(`div`,{class:`mm-file-actions`,onClick:r[4]||=S(()=>{},[`stop`])},[m(v,{size:`small`,text:``,icon:s.Edit,onClick:t=>s.handleRename(e),title:s.$t(`@MINDMAP:重命名`)},null,8,[`icon`,`onClick`,`title`]),m(v,{size:`small`,text:``,type:`danger`,icon:s.Delete,onClick:t=>s.handleDelete(e),title:s.$t(`@MINDMAP:删除`)},null,8,[`icon`,`onClick`,`title`])])],10,ke))),128))],512),[[P,!s.collapsedGroups[t.dir]]])]))),128))])),[[T,s.store.refreshing]])]),p(` 右侧编辑区 `),a(`div`,Ne,[s.store.current?(b(),i(s.MindMap,{key:s.mmKey,ref:`mmRef`,data:s.mmData,"preview-mode":s.previewMode,onChange:s.onMindMapChange,onSelect:s.onMindMapSelect,onCanvasTogglePreview:s.onCanvasTogglePreview},null,8,[`data`,`preview-mode`])):(b(),i(s.EmptyState,{key:0,class:`mm-editor-empty`,title:s.$t(`@MINDMAP:思维导图编辑器`),hint:s.store.dirs.length>0?s.$t(`@MINDMAP:从左侧选择或新建`):s.$t(`@MINDMAP:先选择目录提示`)},{icon:w(()=>[...r[7]||=[a(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[a(`circle`,{cx:`12`,cy:`12`,r:`2`}),a(`circle`,{cx:`5`,cy:`5`,r:`2`}),a(`circle`,{cx:`19`,cy:`5`,r:`2`}),a(`circle`,{cx:`5`,cy:`19`,r:`2`}),a(`circle`,{cx:`19`,cy:`19`,r:`2`}),a(`line`,{x1:`10.5`,y1:`10.5`,x2:`6.5`,y2:`6.5`}),a(`line`,{x1:`13.5`,y1:`10.5`,x2:`17.5`,y2:`6.5`}),a(`line`,{x1:`10.5`,y1:`13.5`,x2:`6.5`,y2:`17.5`}),a(`line`,{x1:`13.5`,y1:`13.5`,x2:`17.5`,y2:`17.5`})],-1)]]),_:1},8,[`title`,`hint`]))])]),p(` 目录选择(local-file-picker,支持多选目录) `),p(` 传入当前目标目录作为 defaultPath:用户添加目录时不用每次都从根目录找,
|
|
2
|
-
已选过的话直接定位到上次的位置;无效时 picker 自动回落到用户目录 `),m(s.FilePicker,{visible:s.filePickerVisible,mode:`directory`,multiple:!0,theme:s.isDark?`dark`:`light`,locale:s.currentLocale,"default-path":s.store.activeDir||s.store.dirs[0]||``,onClose:r[5]||=e=>s.filePickerVisible=!1,onConfirm:s.onPickerConfirm},null,8,[`visible`,`theme`,`locale`,`default-path`]),p(` 目录右键菜单:打开目录 / 在此新建 / 移除目录 `),(b(),i(n,{to:`body`},[s.ctxMenu?(b(),k(`div`,{key:0,class:`ctx-menu`,style:_({left:s.ctxMenu.x+`px`,top:s.ctxMenu.y+`px`}),onClick:r[6]||=S(()=>{},[`stop`])},[a(`button`,{class:`ctx-menu-item`,onClick:s.ctxOpenDir},[p(` folder icon `),r[8]||=a(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[a(`path`,{d:`M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`}),a(`path`,{d:`M3 7v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2`})],-1),f(` `+E(s.$t(`@MINDMAP:打开目录`)),1)]),a(`button`,{class:`ctx-menu-item`,onClick:s.ctxNewFile},[p(` new-file icon `),r[9]||=a(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[a(`path`,{d:`M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z`}),a(`polyline`,{points:`14 2 14 8 20 8`}),a(`line`,{x1:`12`,y1:`13`,x2:`12`,y2:`19`}),a(`line`,{x1:`9`,y1:`16`,x2:`15`,y2:`16`})],-1),f(` `+E(s.$t(`@MINDMAP:在此新建`)),1)]),r[11]||=a(`div`,{class:`ctx-menu-sep`},null,-1),a(`button`,{class:`ctx-menu-item ctx-menu-item--danger`,onClick:s.ctxRemoveDir},[p(` trash icon `),r[10]||=a(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[a(`polyline`,{points:`3 6 5 6 21 6`}),a(`path`,{d:`M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6`}),a(`path`,{d:`M10 11v6`}),a(`path`,{d:`M14 11v6`}),a(`path`,{d:`M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2`})],-1),f(` `+E(s.$t(`@MINDMAP:移除目录`)),1)])],4)):p(`v-if`,!0)]))])}var Fe=z(K,[[`render`,Pe],[`__scopeId`,`data-v-b157fbd3`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/views/MindmapView.vue`]]);export{Fe as default};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$n as e,Bn as t,Dn as n,En as r,Fr as i,Gt as a,Ht as o,In as s,J as c,Jr as l,Mn as u,Nn as d,On as f,Pn as p,Tn as ee,U as m,W as h,Xr as g,Yn as _,Zn as v,_ as y,a as b,br as x,cr as S,ei as C,h as w,i as T,kn as E,pr as D,qn as O,xn as k,z as te}from"./element-plus-C8IhrglD.js";import{n as A,t as j}from"./_plugin-vue_export-helper-DibQ4qNS.js";import{r as M}from"./index-ED00NaPI.js";t(),D();var N=s({__name:`MonitorView`,setup(e,{expose:t}){t();let n=M(),r=x(``),i=x(`port`),s=x(`asc`);function c(e){i.value===e?s.value=s.value===`asc`?`desc`:`asc`:(i.value=e,s.value=`asc`)}let l=ee(()=>{let e=n.ports.slice(),t=r.value.trim().toLowerCase();t&&(e=e.filter(e=>String(e.localPort).includes(t)||String(e.pid).includes(t)||(e.processName||``).toLowerCase().includes(t)||(e.localAddress||``).toLowerCase().includes(t)||(e.protocol||``).toLowerCase().includes(t)||(e.state||``).toLowerCase().includes(t)));let a=s.value===`asc`?1:-1;return e.sort((e,t)=>{let n,r;return i.value===`port`?(n=e.localPort,r=t.localPort):i.value===`pid`?(n=Number(e.pid)||0,r=Number(t.pid)||0):(n=(e.processName||``).toLowerCase(),r=(t.processName||``).toLowerCase()),n<r?-1*a:n>r?1*a:0}),e});function u(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(r===0?0:1)} ${t[r]}`}function d(e){if(!Number.isFinite(e)||e<=0)return`-`;let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60),i=Math.floor(e%60),a=[];return t>0&&a.push(`${t} ${A(`@MONITOR:天`)}`),n>0&&a.push(`${n} ${A(`@MONITOR:时`)}`),r>0&&a.push(`${r} ${A(`@MONITOR:分`)}`),a.push(`${i} ${A(`@MONITOR:秒`)}`),a.join(` `)}function f(e){return e>=90?`var(--color-danger)`:e>=70?`var(--color-warning)`:`var(--color-success)`}let p=x(new Set),m=new Set([0,1,4]),h=new Set([`system`,`idle`,`registry`,`memory compression`,`secure system`,`smss.exe`,`csrss.exe`,`wininit.exe`,`winlogon.exe`,`services.exe`,`lsass.exe`,`svchost.exe`,`fontdrvhost.exe`,`dwm.exe`]);function g(e){if(m.has(Number(e.pid)))return!0;let t=(e.processName||``).trim().toLowerCase();return t?h.has(t)||h.has(t.replace(/\.exe$/,``)):!1}async function v(e){let t=e.pid,r=e.processName||A(`@MONITOR:未知进程`);try{await T.confirm(A(`@MONITOR:确认终止进程提示`).replace(`{pid}`,String(t)).replace(`{process}`,r).replace(`{port}`,String(e.localPort)),A(`@MONITOR:终止进程`),{confirmButtonText:A(`@MONITOR:终止`),cancelButtonText:A(`@MONITOR:取消`),type:`warning`})}catch{return}p.value.add(t);try{await n.killProcess(t,!0),b.success(A(`@MONITOR:已终止进程`).replace(`{pid}`,String(t)))}catch(e){b.error(e?.message||A(`@MONITOR:终止进程失败`))}finally{p.value.delete(t)}}function y(){n.refresh().catch(e=>{b.error(e?.message||A(`@MONITOR:刷新失败`))})}function S(e){n.setAutoRefresh(e)}function C(e){n.setShowAllPorts(e)}_(()=>{n.startAutoRefresh()}),O(()=>{n.stopAutoRefresh()});let w={store:n,portSearch:r,sortField:i,sortOrder:s,toggleSort:c,filteredPorts:l,formatBytes:u,formatUptime:d,usageColor:f,killingPids:p,SYSTEM_PIDS:m,SYSTEM_PROCESS_NAMES:h,isProtectedProcess:g,handleKill:v,handleManualRefresh:y,handleAutoRefreshChange:S,handleShowAllPortsChange:C,get $t(){return A},get Refresh(){return o},get Search(){return a}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}});t(),i();var P={class:`monitor-view`},F={class:`monitor-toolbar`},I={class:`toolbar-title`},L={key:0,class:`toolbar-host`},R={class:`toolbar-actions`},z={class:`toolbar-label`},B={class:`toolbar-label`},V={class:`metric-card`},H={class:`metric-card__header`},U={class:`metric-card__body`},W={class:`metric-sub`},G=[`title`],K={class:`metric-card`},q={class:`metric-card__header`},J={class:`metric-card__body`},Y={class:`metric-sub`},X={class:`metric-card__footer`},Z={class:`metric-card`},Q={class:`metric-card__header`},ne={class:`metric-card__body`},re={class:`metric-value`},ie={class:`metric-sub`},ae={class:`metric-card__footer`},oe={class:`metric-card`},se={class:`metric-card__header`},ce={class:`metric-card__body`},le={class:`metric-value`},ue={class:`metric-sub`},de={class:`metric-card__footer`},fe={key:0,class:`metric-card disk-card`},pe={class:`metric-card__header`},me={key:0,class:`disks-rows`},he={class:`disk-row`},ge={class:`disk-mount`},_e={class:`disk-usage`},ve={key:1,class:`disks-empty`},ye={key:2,class:`metric-card__footer disks-summary`},be={key:1,class:`monitor-placeholder`},xe={key:2,class:`monitor-error`},Se={key:3,class:`monitor-ports`},Ce={class:`ports-header`},we={class:`ports-title`},Te={class:`ports-table-wrap`},Ee={class:`ports-table`},De={class:`col-protocol`},Oe={class:`col-address`},ke={class:`col-state`},Ae={class:`col-action`},je={class:`col-protocol`},Me={class:`col-address`},Ne={class:`col-port`},Pe={class:`port-num`},$={class:`col-state`},Fe={class:`col-pid`},Ie=[`title`],Le={class:`col-action`},Re=[`title`],ze={key:0},Be={colspan:`7`,class:`ports-empty`};function Ve(t,i,a,o,s,ee){let _=w,b=h,x=te,T=y,D=c,O=m;return v(),E(`div`,P,[f(` 顶部工具栏 `),r(`div`,F,[r(`div`,I,[i[4]||=r(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[r(`path`,{d:`M22 12h-4l-3 9L9 3l-3 9H2`})],-1),r(`span`,null,C(o.$t(`@MONITOR:系统监控`)),1),o.store.overview?(v(),E(`span`,L,C(o.store.overview.system.hostname)+` · `+C(o.store.overview.system.platform)+`/`+C(o.store.overview.system.arch),1)):f(`v-if`,!0)]),r(`div`,R,[p(b,{content:o.$t(`@MONITOR:显示所有连接`),placement:`bottom`},{default:S(()=>[p(_,{"model-value":o.store.showAllPorts,onChange:o.handleShowAllPortsChange,size:`small`},null,8,[`model-value`])]),_:1},8,[`content`]),r(`span`,z,C(o.$t(`@MONITOR:全部连接`)),1),p(b,{content:o.$t(`@MONITOR:自动刷新`),placement:`bottom`},{default:S(()=>[p(_,{"model-value":o.store.autoRefresh,onChange:o.handleAutoRefreshChange,size:`small`},null,8,[`model-value`])]),_:1},8,[`content`]),r(`span`,B,C(o.$t(`@MONITOR:自动`)),1),p(x,{size:`small`,icon:o.Refresh,loading:o.store.loading,onClick:o.handleManualRefresh},{default:S(()=>[d(C(o.$t(`@MONITOR:刷新`)),1)]),_:1},8,[`icon`,`loading`])])]),f(` KPI 卡片 + 磁盘占用 `),o.store.overview?(v(),E(`div`,{key:0,class:l([`monitor-cards`,{"monitor-cards--no-disks":!o.store.overview?.disks}])},[r(`div`,V,[r(`div`,H,[i[5]||=r(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[r(`rect`,{x:`4`,y:`4`,width:`16`,height:`16`,rx:`2`}),r(`rect`,{x:`9`,y:`9`,width:`6`,height:`6`}),r(`path`,{d:`M9 2v2M15 2v2M9 20v2M15 20v2M2 9h2M2 15h2M20 9h2M20 15h2`})],-1),r(`span`,null,C(o.$t(`@MONITOR:CPU 占用`)),1)]),r(`div`,U,[r(`div`,{class:`metric-value`,style:g({color:o.usageColor(o.store.overview.cpu.usage)})},[d(C(o.store.overview.cpu.usage.toFixed(1)),1),i[6]||=r(`span`,{class:`metric-unit`},`%`,-1)],4),r(`div`,W,C(o.store.overview.cpu.cores)+` `+C(o.$t(`@MONITOR:核心`)),1)]),p(T,{percentage:o.store.overview.cpu.usage,"stroke-width":6,"show-text":!1,color:o.usageColor(o.store.overview.cpu.usage)},null,8,[`percentage`,`color`]),r(`div`,{class:`metric-card__footer`,title:o.store.overview.cpu.model},C(o.store.overview.cpu.model),9,G)]),r(`div`,K,[r(`div`,q,[i[7]||=r(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[r(`rect`,{x:`2`,y:`6`,width:`20`,height:`12`,rx:`2`}),r(`path`,{d:`M6 10v4M10 10v4M14 10v4M18 10v4`})],-1),r(`span`,null,C(o.$t(`@MONITOR:内存占用`)),1)]),r(`div`,J,[r(`div`,{class:`metric-value`,style:g({color:o.usageColor(o.store.overview.memory.usagePercent)})},[d(C(o.store.overview.memory.usagePercent.toFixed(1)),1),i[8]||=r(`span`,{class:`metric-unit`},`%`,-1)],4),r(`div`,Y,C(o.formatBytes(o.store.overview.memory.used))+` / `+C(o.formatBytes(o.store.overview.memory.total)),1)]),p(T,{percentage:o.store.overview.memory.usagePercent,"stroke-width":6,"show-text":!1,color:o.usageColor(o.store.overview.memory.usagePercent)},null,8,[`percentage`,`color`]),r(`div`,X,C(o.$t(`@MONITOR:空闲`))+` `+C(o.formatBytes(o.store.overview.memory.free)),1)]),r(`div`,Z,[r(`div`,Q,[i[9]||=r(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[r(`circle`,{cx:`12`,cy:`12`,r:`10`}),r(`polyline`,{points:`12 6 12 12 16 14`})],-1),r(`span`,null,C(o.$t(`@MONITOR:系统运行时间`)),1)]),r(`div`,ne,[r(`div`,re,C(o.formatUptime(o.store.overview.system.uptime)),1),r(`div`,ie,C(o.store.overview.system.nodeVersion),1)]),r(`div`,ae,C(o.store.overview.system.hostname),1)]),r(`div`,oe,[r(`div`,se,[i[10]||=r(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[r(`path`,{d:`M22 12h-4l-3 9L9 3l-3 9H2`})],-1),r(`span`,null,C(o.$t(`@MONITOR:监听端口`)),1)]),r(`div`,ce,[r(`div`,le,C(o.store.ports.length),1),r(`div`,ue,C(o.$t(`@MONITOR:TCP`))+` `+C(o.store.ports.filter(e=>e.protocol===`TCP`).length)+` · `+C(o.$t(`@MONITOR:UDP`))+` `+C(o.store.ports.filter(e=>e.protocol===`UDP`).length),1)]),r(`div`,de,C(o.store.showAllPorts?o.$t(`@MONITOR:显示全部连接`):o.$t(`@MONITOR:仅监听端口`)),1)]),f(` 磁盘占用:与四个 KPI 卡片同排 `),o.store.overview.disks?(v(),E(`div`,fe,[r(`div`,pe,[i[11]||=u(`<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-15c5cbca><line x1="22" y1="12" x2="2" y2="12" data-v-15c5cbca></line><path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" data-v-15c5cbca></path><line x1="6" y1="16" x2="6.01" y2="16" data-v-15c5cbca></line><line x1="10" y1="16" x2="10.01" y2="16" data-v-15c5cbca></line></svg>`,1),r(`span`,null,C(o.$t(`@MONITOR:磁盘占用`)),1)]),o.store.overview.disks.drives.length>0?(v(),E(`div`,me,[(v(!0),E(k,null,e(o.store.overview.disks.drives,e=>(v(),E(`div`,{class:`disk-item`,key:e.mount},[r(`div`,he,[r(`span`,ge,C(e.mount),1),p(T,{class:`disk-bar`,percentage:e.usagePercent,"stroke-width":6,"show-text":!1,color:o.usageColor(e.usagePercent)},null,8,[`percentage`,`color`]),r(`span`,{class:`disk-percent`,style:g({color:o.usageColor(e.usagePercent)})},C(e.usagePercent.toFixed(1))+`% `,5)]),f(` 用量走第二行(挂在进度条左边界下面):卡片最窄时也放得下,
|
|
2
|
-
不会把百分比挤出卡片右边缘 `),r(`div`,_e,C(o.formatBytes(e.used))+` / `+C(o.formatBytes(e.total)),1)]))),128))])):(v(),E(`div`,ve,C(o.$t(`@MONITOR:暂无磁盘数据`)),1)),f(` 汇总行只在「多块盘」时才有信息量:单盘时它逐字等于上面那一行,
|
|
3
|
-
同屏写两遍同一组数字 `),o.store.overview.disks.drives.length>1?(v(),E(`div`,ye,C(o.formatBytes(o.store.overview.disks.used))+` / `+C(o.formatBytes(o.store.overview.disks.total))+` · `+C(o.store.overview.disks.usagePercent.toFixed(1))+`% `,1)):f(`v-if`,!0)])):f(`v-if`,!0)],2)):f(`v-if`,!0),f(` 加载占位 `),!o.store.overview&&o.store.loading?(v(),E(`div`,be,[p(D,{class:`is-loading`},{default:S(()=>[p(o.Refresh)]),_:1}),r(`span`,null,C(o.$t(`@MONITOR:加载中`)),1)])):f(`v-if`,!0),f(` 错误提示 `),o.store.error&&!o.store.overview?(v(),E(`div`,xe,[i[12]||=r(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[r(`circle`,{cx:`12`,cy:`12`,r:`10`}),r(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`12`}),r(`line`,{x1:`12`,y1:`16`,x2:`12.01`,y2:`16`})],-1),r(`span`,null,C(o.store.error),1),p(x,{size:`small`,onClick:o.handleManualRefresh},{default:S(()=>[d(C(o.$t(`@MONITOR:重试`)),1)]),_:1})])):f(`v-if`,!0),f(` 端口列表 `),o.store.overview?(v(),E(`div`,Se,[r(`div`,Ce,[r(`span`,we,C(o.$t(`@MONITOR:端口占用列表`)),1),p(O,{modelValue:o.portSearch,"onUpdate:modelValue":i[0]||=e=>o.portSearch=e,placeholder:o.$t(`@MONITOR:搜索端口 / PID / 进程名`),size:`small`,clearable:``,class:`ports-search`},{prefix:S(()=>[p(D,null,{default:S(()=>[p(o.Search)]),_:1})]),_:1},8,[`modelValue`,`placeholder`])]),r(`div`,Te,[r(`table`,Ee,[r(`thead`,null,[r(`tr`,null,[r(`th`,De,C(o.$t(`@MONITOR:协议`)),1),r(`th`,Oe,C(o.$t(`@MONITOR:本地地址`)),1),r(`th`,{class:`col-port sortable`,onClick:i[1]||=e=>o.toggleSort(`port`)},[d(C(o.$t(`@MONITOR:端口`))+` `,1),r(`span`,{class:l([`sort-arrow`,{active:o.sortField===`port`,desc:o.sortOrder===`desc`}])},`↕`,2)]),r(`th`,ke,C(o.$t(`@MONITOR:状态`)),1),r(`th`,{class:`col-pid sortable`,onClick:i[2]||=e=>o.toggleSort(`pid`)},[i[13]||=d(` PID `,-1),r(`span`,{class:l([`sort-arrow`,{active:o.sortField===`pid`,desc:o.sortOrder===`desc`}])},`↕`,2)]),r(`th`,{class:`col-process sortable`,onClick:i[3]||=e=>o.toggleSort(`process`)},[d(C(o.$t(`@MONITOR:进程`))+` `,1),r(`span`,{class:l([`sort-arrow`,{active:o.sortField===`process`,desc:o.sortOrder===`desc`}])},`↕`,2)]),r(`th`,Ae,C(o.$t(`@MONITOR:操作`)),1)])]),r(`tbody`,null,[(v(!0),E(k,null,e(o.filteredPorts,(e,t)=>(v(),E(`tr`,{key:`${e.protocol}-${e.localPort}-${e.pid}-${t}`},[r(`td`,je,[r(`span`,{class:l([`proto-badge`,`proto-${e.protocol.toLowerCase()}`])},C(e.protocol),3)]),r(`td`,Me,C(e.localAddress),1),r(`td`,Ne,[r(`span`,Pe,C(e.localPort),1)]),r(`td`,$,[r(`span`,{class:l([`state-tag`,`state-${(e.state||`unknown`).toLowerCase()}`])},C(e.state||`-`),3)]),r(`td`,Fe,C(e.pid),1),r(`td`,{class:`col-process`,title:e.processName},C(e.processName||o.$t(`@MONITOR:未知`)),9,Ie),r(`td`,Le,[o.isProtectedProcess(e)?(v(),E(`span`,{key:0,class:`kill-protected`,title:o.$t(`@MONITOR:系统进程,不可终止`)},C(o.$t(`@MONITOR:系统`)),9,Re)):(v(),n(x,{key:1,class:`kill-btn`,size:`small`,text:``,loading:o.killingPids.has(e.pid),disabled:o.killingPids.has(e.pid),onClick:t=>o.handleKill(e)},{default:S(()=>[d(C(o.$t(`@MONITOR:终止`)),1)]),_:1},8,[`loading`,`disabled`,`onClick`]))])]))),128)),o.filteredPorts.length===0?(v(),E(`tr`,ze,[r(`td`,Be,C(o.portSearch?o.$t(`@MONITOR:无匹配结果`):o.$t(`@MONITOR:暂无端口占用`)),1)])):f(`v-if`,!0)])])])])):f(`v-if`,!0)])}var He=j(N,[[`render`,Ve],[`__scopeId`,`data-v-15c5cbca`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/views/MonitorView.vue`]]);export{He as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$n as e,Bn as t,Dn as n,En as r,F as i,Fr as a,I as o,In as s,J as c,Jr as l,M as u,Nn as d,On as f,Pn as p,Tn as m,W as h,Wt as ee,Zn as g,a as _,br as v,cr as y,ei as b,h as x,i as S,j as C,kn as w,lt as T,or as E,pr as D,rn as O,xn as k,z as A,zt as j}from"./element-plus-C8IhrglD.js";import{b as M}from"./vendor-CazUJJkv.js";import{t as N}from"./_plugin-vue_export-helper-DibQ4qNS.js";import{t as P}from"./SvgIcon-Dd0dgVcd.js";import{t as te}from"./configStore-DQ92GVaR.js";import{t as F}from"./CommonDialog-BT6e135Y.js";import{V as I}from"./index-ED00NaPI.js";t(),D();var L=s({__name:`ProjectStartupDialog`,props:{visible:{type:Boolean,required:!0}},emits:[`update:visible`,`execute-command`,`execute-workflow`],setup(e,{expose:t,emit:n}){t();let{t:r}=M(),i=e,a=n,o=te(),s=m({get:()=>i.visible,set:e=>a(`update:visible`,e)}),c=m({get:()=>o.startupAutoRun,set:async e=>{N.value=!0;try{await o.saveStartupItems(l.value,e)}finally{N.value=!1}}}),l=m({get:()=>o.startupItems,set:e=>{o.saveStartupItems(e,c.value)}}),u=m(()=>o.customCommands||[]),d=m(()=>{let e=new Map;for(let t of u.value)t?.id&&e.set(String(t.id),t);return e}),f=m(()=>o.orchestrations||[]),p=m(()=>{let e=new Map;for(let t of f.value)t?.id&&e.set(String(t.id),t);return e}),h=m({get:()=>o.afterQuickPushAction,set:e=>{o.saveAfterQuickPushAction(e)}}),g=m({get:()=>!!h.value?.enabled,set:async e=>{x.value=!0;try{await o.saveAfterQuickPushAction({enabled:e,type:y.value,refId:b.value})}finally{x.value=!1}}}),y=m({get:()=>h.value?.type===`workflow`?`workflow`:`command`,set:async e=>{x.value=!0;try{b.value=``,await o.saveAfterQuickPushAction({enabled:g.value,type:e,refId:``})}finally{x.value=!1}}}),b=v(``),x=v(!1);E(()=>o.afterQuickPushAction,e=>{b.value=String(e?.refId||``)},{immediate:!0});async function C(e){x.value=!0;try{await o.saveAfterQuickPushAction({enabled:g.value,type:y.value,refId:e})}finally{x.value=!1}}let w=m(()=>l.value.map(e=>({...e,cmd:e.type===`command`?d.value.get(e.refId):null,wf:e.type===`workflow`?p.value.get(e.refId):null})).filter(e=>e.type===`command`?!!e.cmd:!!e.wf)),D=m(()=>l.value.filter(e=>e.type===`workflow`?!p.value.get(e.refId):!d.value.get(e.refId)).length),k=v(`command`),A=v(``),N=v(!1),P=v({});async function I(e,t){P.value={...P.value,[e]:!0};try{let n=l.value.map(n=>n.id===e?{...n,enabled:t}:n);await o.saveStartupItems(n,c.value)}finally{let{[e]:t,...n}=P.value;P.value=n}}function L(){if(!A.value){k.value===`workflow`?_.warning(r(`@PSTART:请选择一个工作流`)):_.warning(r(`@PSTART:请选择一个命令`));return}if(l.value.some(e=>e.type===k.value&&e.refId===A.value)){_.info(r(`@PSTART:该启动项已存在`));return}let e={id:`startup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:k.value,refId:A.value,createdAt:Date.now(),enabled:!0},t=[...l.value,e];o.saveStartupItems(t,c.value),A.value=``,_.success(r(`@PSTART:已添加启动项`))}async function R(e){try{await S.confirm(r(`@PSTART:删除确认`),r(`@PSTART:删除启动项`),{confirmButtonText:r(`@PSTART:确定`),cancelButtonText:r(`@PSTART:取消`),type:`warning`});let t=l.value.filter(t=>t.id!==e.id);o.saveStartupItems(t,c.value),_.success(r(`@PSTART:已删除启动项`))}catch{}}function z(){let e=l.value.length,t=l.value.filter(e=>e.type===`workflow`?!!p.value.get(e.refId):!!d.value.get(e.refId)),n=t.length;n===e?_.info(r(`@PSTART:没有需要清理的启动项`)):(o.saveStartupItems(t,c.value),_.success(r(`@PSTART:已清理N个失效启动项`,{count:e-n})))}function B(e){if(e.type===`command`){let t=e.cmd;if(!t){_.warning(r(`@PSTART:命令不存在`));return}a(`execute-command`,t),_.success(r(`@PSTART:已触发命令执行`))}else if(e.type===`workflow`){let t=e.wf;if(!t){_.warning(r(`@PSTART:工作流不存在`));return}a(`execute-workflow`,t),_.success(r(`@PSTART:已触发工作流执行`))}}let V={t:r,props:i,emit:a,configStore:o,dialogVisible:s,autoRunEnabled:c,items:l,customCommands:u,customCommandById:d,orchestrations:f,orchestrationById:p,afterQuickPushAction:h,afterActionEnabled:g,afterActionType:y,afterActionRefId:b,afterActionSaving:x,saveAfterActionRefId:C,displayItems:w,missingItemsCount:D,selectedType:k,selectedRefId:A,autoRunSaving:N,itemSavingMap:P,setItemEnabled:I,addSelectedItem:L,removeItem:R,cleanupMissingItems:z,executeItem:B,get Delete(){return T},get Plus(){return j},get RefreshRight(){return ee},get VideoPlay(){return O},CommonDialog:F};return Object.defineProperty(V,"__isScriptSetup",{enumerable:!1,value:!0}),V}});a(),t();var R={class:`project-startup-dialog`},z={class:`after-quick-push`},B={class:`after-quick-push__header`},V={class:`after-quick-push__title`},H={class:`after-quick-push__switch`},U={class:`after-quick-push__label`},W={class:`after-quick-push__row`},G={class:`after-quick-push__hint`},K={class:`startup-toolbar`},q={class:`startup-toolbar__left`},J={class:`startup-toolbar__title`},Y={class:`startup-toolbar__meta`},X={key:0,class:`startup-toolbar__warn`},Z={class:`startup-toolbar__right`},Q={class:`startup-auto-run`},ne={class:`startup-auto-run__label`},re={key:0,class:`startup-empty`},ie={key:1,class:`startup-list`},ae={class:`startup-item__main`},oe=[`title`],se=[`title`],ce=[`title`],le=[`title`],ue=[`title`],de={class:`startup-item__actions`},fe={class:`startup-add`},pe={class:`startup-add__title`},me={class:`startup-add__type`},he={class:`startup-add__row`},ge={class:`startup-option`},_e={class:`startup-option__name`},ve={class:`startup-option__cmd`},ye={class:`startup-option`},be={class:`startup-option__name`},$={class:`startup-option__cmd`};function xe(t,a,s,m,ee,_){let v=x,S=C,T=u,E=i,D=o,O=c,j=A,M=h;return g(),n(m.CommonDialog,{modelValue:m.dialogVisible,"onUpdate:modelValue":a[8]||=e=>m.dialogVisible=e,title:m.t(`@PSTART:项目启动项`),size:`medium`,type:`flex`,"height-mode":`max`,"height-offset":`140px`},{default:y(()=>[r(`div`,R,[r(`div`,z,[r(`div`,B,[r(`div`,V,b(m.t(`@PSTART:一键推送成功后执行`)),1),r(`div`,H,[r(`span`,U,b(m.t(`@PSTART:启用`)),1),p(v,{modelValue:m.afterActionEnabled,"onUpdate:modelValue":a[0]||=e=>m.afterActionEnabled=e,size:`small`,loading:m.afterActionSaving},null,8,[`modelValue`,`loading`])])]),r(`div`,W,[p(T,{modelValue:m.afterActionType,"onUpdate:modelValue":a[1]||=e=>m.afterActionType=e,size:`small`,disabled:m.afterActionSaving},{default:y(()=>[p(S,{label:`command`},{default:y(()=>[d(b(m.t(`@PSTART:命令`)),1)]),_:1}),p(S,{label:`workflow`},{default:y(()=>[d(b(m.t(`@PSTART:工作流`)),1)]),_:1})]),_:1},8,[`modelValue`,`disabled`]),p(D,{modelValue:m.afterActionRefId,"onUpdate:modelValue":a[2]||=e=>m.afterActionRefId=e,class:`after-quick-push__select`,placeholder:m.afterActionType===`workflow`?m.t(`@PSTART:选择一个工作流`):m.t(`@PSTART:选择一个自定义命令`),filterable:``,clearable:``,disabled:m.afterActionSaving,onChange:a[3]||=e=>m.saveAfterActionRefId(String(e||``))},{default:y(()=>[m.afterActionType===`workflow`?(g(!0),w(k,{key:0},e(m.orchestrations,e=>(g(),n(E,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128)):(g(!0),w(k,{key:1},e(m.customCommands,e=>(g(),n(E,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`disabled`])]),r(`div`,G,b(m.t(`@PSTART:仅在一键推送成功后触发,不影响主流程`)),1)]),r(`div`,K,[r(`div`,q,[r(`div`,J,b(m.t(`@PSTART:启动项列表`)),1),r(`div`,Y,`(`+b(m.displayItems.length)+`)`,1),m.missingItemsCount>0?(g(),w(`div`,X,b(m.t(`@PSTART:有N项已失效`,{count:m.missingItemsCount})),1)):f(`v-if`,!0)]),r(`div`,Z,[r(`div`,Q,[r(`span`,ne,b(m.t(`@PSTART:刷新页面自动执行`)),1),p(v,{modelValue:m.autoRunEnabled,"onUpdate:modelValue":a[4]||=e=>m.autoRunEnabled=e,size:`small`,loading:m.autoRunSaving},null,8,[`modelValue`,`loading`])]),p(M,{content:m.t(`@PSTART:清理失效启动项`),placement:`bottom`},{default:y(()=>[p(j,{size:`small`,onClick:m.cleanupMissingItems,disabled:m.missingItemsCount===0},{default:y(()=>[p(O,null,{default:y(()=>[p(m.RefreshRight)]),_:1}),d(` `+b(m.t(`@PSTART:清理`)),1)]),_:1},8,[`disabled`])]),_:1},8,[`content`])])]),m.displayItems.length===0?(g(),w(`div`,re,b(m.t(`@PSTART:暂无启动项`)),1)):(g(),w(`div`,ie,[(g(!0),w(k,null,e(m.displayItems,e=>(g(),w(`div`,{key:e.id,class:`startup-item`},[r(`div`,ae,[r(`div`,{class:`startup-item__name`,title:e.type===`workflow`?e.wf?.name:e.cmd?.name},[r(`span`,{class:l([`startup-item__type`,e.type===`workflow`?`is-workflow`:`is-command`])},b(e.type===`workflow`?m.t(`@PSTART:工作流`):m.t(`@PSTART:命令`)),3),d(` `+b(e.type===`workflow`?e.wf?.name:e.cmd?.name),1)],8,oe),e.type===`command`?(g(),w(`div`,{key:0,class:`startup-item__desc`,title:e.cmd?.command},b(e.cmd?.command),9,se)):(g(),w(`div`,{key:1,class:`startup-item__desc`,title:e.wf?.description||e.wf?.name},b(e.wf?.description||m.t(`@PSTART:工作流`)),9,ce)),e.type===`command`?(g(),w(`div`,{key:2,class:`startup-item__dir`,title:e.cmd?.directory},b(m.t(`@PSTART:目录`))+`:`+b(e.cmd?.directory||`-`),9,le)):(g(),w(`div`,{key:3,class:`startup-item__dir`,title:String(e.wf?.flowData?.nodes?.length||0)},b(m.t(`@PSTART:步骤`))+`:`+b(e.wf?.flowData?.nodes?.length||0),9,ue))]),r(`div`,de,[p(M,{content:m.t(`@PSTART:刷新页面自动执行`),placement:`top`},{default:y(()=>[p(v,{"model-value":e.enabled!==!1,size:`small`,loading:!!m.itemSavingMap[e.id],"onUpdate:modelValue":t=>m.setItemEnabled(e.id,!!t)},null,8,[`model-value`,`loading`,`onUpdate:modelValue`])]),_:2},1032,[`content`]),p(M,{content:m.t(`@PSTART:执行`),placement:`top`},{default:y(()=>[p(j,{text:``,type:`primary`,size:`small`,onClick:t=>m.executeItem(e)},{default:y(()=>[p(O,null,{default:y(()=>[p(m.VideoPlay)]),_:1})]),_:1},8,[`onClick`])]),_:2},1032,[`content`]),p(M,{content:m.t(`@PSTART:删除`),placement:`top`},{default:y(()=>[p(j,{text:``,type:`danger`,size:`small`,onClick:t=>m.removeItem(e)},{default:y(()=>[p(O,null,{default:y(()=>[p(m.Delete)]),_:1})]),_:1},8,[`onClick`])]),_:2},1032,[`content`])])]))),128))])),r(`div`,fe,[r(`div`,pe,b(m.t(`@PSTART:添加启动项`)),1),r(`div`,me,[p(T,{modelValue:m.selectedType,"onUpdate:modelValue":a[5]||=e=>m.selectedType=e,size:`small`,onChange:a[6]||=e=>m.selectedRefId=``},{default:y(()=>[p(S,{label:`command`},{default:y(()=>[d(b(m.t(`@PSTART:命令`)),1)]),_:1}),p(S,{label:`workflow`},{default:y(()=>[d(b(m.t(`@PSTART:工作流`)),1)]),_:1})]),_:1},8,[`modelValue`])]),r(`div`,he,[p(D,{modelValue:m.selectedRefId,"onUpdate:modelValue":a[7]||=e=>m.selectedRefId=e,class:`startup-add__select`,placeholder:m.selectedType===`workflow`?m.t(`@PSTART:选择一个工作流`):m.t(`@PSTART:选择一个自定义命令`),filterable:``,clearable:``},{default:y(()=>[m.selectedType===`workflow`?(g(!0),w(k,{key:0},e(m.orchestrations,e=>(g(),n(E,{key:e.id,label:e.name,value:e.id},{default:y(()=>[r(`div`,ge,[r(`div`,_e,b(e.name),1),r(`div`,ve,b(e.description||`步骤: ${e.flowData?.nodes?.length||0}`),1)])]),_:2},1032,[`label`,`value`]))),128)):(g(!0),w(k,{key:1},e(m.customCommands,e=>(g(),n(E,{key:e.id,label:e.name,value:e.id},{default:y(()=>[r(`div`,ye,[r(`div`,be,b(e.name),1),r(`div`,$,b(e.command),1)])]),_:2},1032,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`]),p(j,{type:`primary`,onClick:m.addSelectedItem},{default:y(()=>[p(O,null,{default:y(()=>[p(m.Plus)]),_:1}),d(` `+b(m.t(`@PSTART:添加`)),1)]),_:1})])])])]),_:1},8,[`modelValue`,`title`])}var Se=N(L,[[`render`,xe],[`__scopeId`,`data-v-91733108`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/ProjectStartupDialog.vue`]]);t(),D();var Ce=s({__name:`ProjectStartupButton`,emits:[`execute-command`,`execute-workflow`],setup(e,{expose:t,emit:n}){t();let{t:r}=M(),i=n,a=v(!1);function o(){a.value=!0}function s(e){i(`execute-command`,e)}function c(e){i(`execute-workflow`,e)}let l={t:r,emit:i,dialogVisible:a,openDialog:o,handleExecuteCommand:s,handleExecuteWorkflow:c,IconButton:I,SvgIcon:P,ProjectStartupDialog:Se};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});t();function we(e,t,n,r,i,a){return g(),w(`div`,null,[p(r.IconButton,{tooltip:r.t(`@PSTART:项目启动项`),"hover-color":`var(--color-primary)`,onClick:r.openDialog,"custom-class":`project-startup-btn`},{default:y(()=>[p(r.SvgIcon,{"icon-class":`start-run-command`,"class-name":`icon-btn`})]),_:1},8,[`tooltip`]),p(r.ProjectStartupDialog,{visible:r.dialogVisible,"onUpdate:visible":t[0]||=e=>r.dialogVisible=e,onExecuteCommand:r.handleExecuteCommand,onExecuteWorkflow:r.handleExecuteWorkflow},null,8,[`visible`])])}var Te=N(Ce,[[`render`,we],[`__scopeId`,`data-v-6d0c8c92`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/ProjectStartupButton.vue`]]);export{Te as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$n as e,Bn as t,Dn as n,En as r,Fr as i,Ft as a,In as o,J as s,Jr as c,Nn as l,On as u,Pn as d,St as f,Tn as p,Xr as ee,Zn as m,bn as h,cr as g,dn as _,ei as v,er as te,it as y,kn as b,xn as x}from"./element-plus-C8IhrglD.js";import{n as S,t as C}from"./_plugin-vue_export-helper-DibQ4qNS.js";import{t as w}from"./configStore-DQ92GVaR.js";import{c as T,o as E}from"./vue-flow-BABZEIJA.js";t();var D=o({__name:`BaseNode`,props:{id:{type:String,required:!0},nodeId:{type:String,required:!0},nodeType:{type:String,required:!1,default:`command`},title:{type:String,required:!1},icon:{type:String,required:!1},enabled:{type:Boolean,required:!1,default:!0},selected:{type:Boolean,required:!1,default:!1},deletable:{type:Boolean,required:!1,default:!0},showDeleteOnSelected:{type:Boolean,required:!1,default:!1},sourceHandleIds:{type:Array,required:!1},execStatus:{type:String,required:!1}},emits:[`delete`],setup(e,{expose:t,emit:n}){t();let r=e,i=p(()=>!!(r.title&&String(r.title).trim()||r.icon&&String(r.icon).trim())),a={props:r,hasHeader:i,conditionHandleYOffset:p(()=>i.value?16:0),safeSourceHandleIds:p(()=>r.sourceHandleIds&&r.sourceHandleIds.length?r.sourceHandleIds:[`source`]),emit:n,get CircleCloseFilled(){return y},get Handle(){return T},get Position(){return E}};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}});t(),_(),i();var O={key:0},k={key:1},A={key:2},j={key:3,class:`node-header`},M={class:`flow-node-icon`},N={class:`node-title`},P={class:`node-body`},F={key:4,class:`disabled-overlay`};function I(t,i,a,o,l,f){let p=s;return m(),b(`div`,{class:c([`flow-node-wrapper`,[{disabled:!a.enabled,"is-selected":a.selected,"show-delete-on-selected":a.showDeleteOnSelected},a.nodeType?`node-type-${a.nodeType}`:``]])},[u(` 输入连接点(左侧) `),a.nodeType===`start`?u(`v-if`,!0):(m(),n(o.Handle,{key:0,id:`target`,type:`target`,position:o.Position.Left,class:`flow-node-handle handle-left`},null,8,[`position`])),a.deletable===!1?u(`v-if`,!0):(m(),n(p,{key:1,class:`flow-node-delete-btn`,onClick:i[0]||=h(e=>o.emit(`delete`,a.nodeId),[`stop`]),title:`删除节点`,role:`button`,tabindex:`0`},{default:g(()=>[d(o.CircleCloseFilled)]),_:1})),a.execStatus?(m(),b(`div`,{key:2,class:c([`flow-node-status`,[`status-${a.execStatus}`]])},[a.execStatus===`running`?(m(),b(`span`,O,`执行中`)):a.execStatus===`success`?(m(),b(`span`,k,`成功`)):(m(),b(`span`,A,`失败`))],2)):u(`v-if`,!0),a.title||a.icon?(m(),b(`div`,j,[r(`div`,M,v(a.icon),1),r(`div`,N,v(a.title),1)])):u(`v-if`,!0),r(`div`,P,[te(t.$slots,`default`,{},void 0,!0)]),u(` 禁用遮罩 `),a.enabled?u(`v-if`,!0):(m(),b(`div`,F,`已禁用`)),u(` 输出连接点(右侧) `),a.nodeType===`condition`?(m(!0),b(x,{key:5},e(o.safeSourceHandleIds,e=>(m(),n(o.Handle,{key:e,id:e,type:`source`,position:o.Position.Right,class:`flow-node-handle handle-right`,style:ee({top:`calc(50% + ${o.conditionHandleYOffset}px + ${(o.safeSourceHandleIds.indexOf(e)-(o.safeSourceHandleIds.length-1)/2)*18}px)`})},null,8,[`id`,`position`,`style`]))),128)):(m(),n(o.Handle,{key:6,id:`source`,type:`source`,position:o.Position.Right,class:`flow-node-handle handle-right`},null,8,[`position`]))],2)}var L=C(D,[[`render`,I],[`__scopeId`,`data-v-595ee093`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/flow/nodes/BaseNode.vue`]]);t();var R=o({__name:`CommandNode`,props:{data:{type:Object,required:!0},id:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=w(),i=p(()=>!n.data.config||!n.data.config.commandId?null:r.customCommands.find(e=>e.id===n.data.config.commandId)||null),o={props:n,configStore:r,commandDetail:i,commandInfo:p(()=>n.data.config?{name:n.data.config.commandName||S(`@FLOWNODE:未配置`),terminal:n.data.config.useTerminal||!1,command:i.value?.command||``,directory:i.value?.directory||``}:null),get Monitor(){return a},get Folder(){return f},get $t(){return S}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});t(),i();var z={class:`command-node-content`},B={class:`node-badges`},V={key:0,class:`node-badge terminal`},H={key:0,class:`node-warning`},U={key:1,class:`command-details`},W={class:`command-code`},G={key:0,class:`command-dir`};function K(e,t,n,i,a,o){let c=s;return m(),b(`div`,z,[r(`div`,B,[i.commandInfo?.terminal?(m(),b(`div`,V,[d(c,null,{default:g(()=>[d(i.Monitor)]),_:1}),r(`span`,null,v(i.$t(`@FLOWNODE:终端`)),1)])):u(`v-if`,!0)]),n.data.config?u(`v-if`,!0):(m(),b(`div`,H,v(i.$t(`@FLOWNODE:未配置`)),1)),u(` 显示命令详细信息 `),i.commandInfo?.command?(m(),b(`div`,U,[r(`div`,W,[r(`code`,null,v(i.commandInfo.command),1)]),i.commandInfo.directory?(m(),b(`div`,G,[d(c,null,{default:g(()=>[d(i.Folder)]),_:1}),r(`span`,null,v(i.commandInfo.directory),1)])):u(`v-if`,!0)])):u(`v-if`,!0)])}var q=C(R,[[`render`,K],[`__scopeId`,`data-v-04703f97`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/flow/nodes/CommandNode.vue`]]);t();var J=o({__name:`WaitNode`,props:{data:{type:Object,required:!0},id:{type:String,required:!0}},setup(e,{expose:t}){t();let n={get $t(){return S}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});i(),t();var Y={class:`wait-node-content`},X={key:0,class:`node-warning`},Z={key:1,class:`wait-seconds`};function Q(e,t,n,r,i,a){return m(),b(`div`,Y,[n.data.config?(m(),b(`div`,Z,v(r.$t(`@FLOWNODE:等待 {seconds} 秒`,{seconds:n.data.config?.waitSeconds??0})),1)):(m(),b(`div`,X,v(r.$t(`@FLOWNODE:未配置`)),1))])}var ne=C(J,[[`render`,Q],[`__scopeId`,`data-v-e89e3b09`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/flow/nodes/WaitNode.vue`]]);t();var re=o({__name:`VersionNode`,props:{data:{type:Object,required:!0},id:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r={props:n,versionInfo:p(()=>{if(!n.data.config)return null;let e=n.data.config,t=String(e?.versionTarget||`version`),r=String(e?.versionSource||`bump`),i=[];i.push({label:S(`@FLOWNODE:目标`),value:S(t===`dependency`?`@FLOWNODE:依赖版本`:`@FLOWNODE:version字段`)}),i.push({label:S(`@FLOWNODE:来源`),value:S(r===`reference`?`@FLOWNODE:引用输出`:r===`input`?`@FLOWNODE:引用输入`:r===`manual`?`@FLOWNODE:手动输入`:`@FLOWNODE:自动递增`)});let a=String(e?.packageJsonPath||``).trim();if(i.push({label:S(`@FLOWNODE:package.json`),value:a||S(`@FLOWNODE:当前目录`)}),t===`dependency`){let t=String(e?.dependencyType||`dependencies`),n=String(e?.dependencyName||``).trim();if(n&&i.push({label:S(`@FLOWNODE:依赖`),value:`${t}::${n}`}),r===`manual`){let t=String(e?.dependencyVersion||``).trim();t&&i.push({label:S(`@FLOWNODE:版本号`),value:t})}else if(r===`bump`){let t=String(e?.dependencyVersionBump||e?.versionBump||`patch`);i.push({label:S(`@FLOWNODE:递增`),value:t})}else if(r===`reference`){let t=String(e?.inputRef?.nodeId||``).trim(),n=String(e?.inputRef?.outputKey||``).trim(),r=t&&n?`${t}::${n}`:``;r&&i.push({label:S(`@FLOWNODE:引用`),value:r})}else if(r===`input`){let t=String(e?.dependencyVersionInputKey||e?.versionInputKey||``).trim();t&&i.push({label:S(`@FLOWNODE:引用`),value:t})}}else{let t=String(e?.versionBump||`patch`);i.push({label:S(`@FLOWNODE:递增`),value:t})}return{target:t,rows:i}}),get $t(){return S}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});i(),t();var ie={class:`version-node-content`},ae={key:0,class:`node-badge`},oe={key:1,class:`info-grid`},se={class:`info-label`},ce=[`title`],le={key:2,class:`node-warning`};function ue(t,n,i,a,o,s){return m(),b(`div`,ie,[a.versionInfo?.target===`dependency`?(m(),b(`div`,ae,v(a.$t(`@FLOWNODE:依赖`)),1)):u(`v-if`,!0),a.versionInfo?.rows?.length?(m(),b(`div`,oe,[(m(!0),b(x,null,e(a.versionInfo.rows,(e,t)=>(m(),b(`div`,{key:t,class:`info-row`},[r(`div`,se,v(e.label),1),r(`div`,{class:`info-value`,title:e.value},v(e.value),9,ce)]))),128))])):u(`v-if`,!0),i.data.config?u(`v-if`,!0):(m(),b(`div`,le,v(a.$t(`@FLOWNODE:未配置`)),1))])}var de=C(re,[[`render`,ue],[`__scopeId`,`data-v-6f4ebd9d`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/flow/nodes/VersionNode.vue`]]);t();var fe=o({__name:`ConfirmNode`,props:{data:{type:Object,required:!0},id:{type:String,required:!0}},setup(e,{expose:t}){t();let n={get $t(){return S}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});i(),t();var pe={key:0,class:`confirm-node-content`},me={class:`node-warning`};function he(e,t,n,i,a,o){return n.data.config?u(`v-if`,!0):(m(),b(`div`,pe,[r(`div`,me,v(i.$t(`@FLOWNODE:未配置`)),1)]))}var ge=C(fe,[[`render`,he],[`__scopeId`,`data-v-eb6c461a`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/flow/nodes/ConfirmNode.vue`]]);t();var _e=o({__name:`CodeNode`,props:{data:{type:Object,required:!0},id:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r={props:n,info:p(()=>{let e=n.data.config||{};return{hasScript:!!(e.codeScript&&String(e.codeScript).trim()),outputKeys:Array.isArray(e.codeOutputKeys)?e.codeOutputKeys:[]}}),get $t(){return S}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});i(),t();var ve={class:`code-node-content`},ye={key:0,class:`node-warning`},be={key:1,class:`code-details`},xe={class:`code-meta`},Se={class:`meta-item`},Ce={class:`meta-item`};function we(e,t,n,i,a,o){return m(),b(`div`,ve,[n.data.config?(m(),b(`div`,be,[r(`div`,xe,[r(`span`,Se,v(i.$t(`@NODECFG:脚本`))+`: `+v(i.info.hasScript?i.$t(`@FLOWNODE:已添加`):i.$t(`@FLOWNODE:未配置`)),1),r(`span`,Ce,v(i.$t(`@NODECFG:输出键列表`))+`: `+v(i.info.outputKeys.length?i.info.outputKeys.join(`, `):i.$t(`@FLOWNODE:未配置`)),1)])])):(m(),b(`div`,ye,v(i.$t(`@FLOWNODE:未配置`)),1))])}var Te=C(_e,[[`render`,we],[`__scopeId`,`data-v-06fd4519`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/flow/nodes/CodeNode.vue`]]);t();var Ee=o({__name:`ConditionNode`,props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r={props:n,branches:p(()=>{let e=n.data?.config;return[...Array.isArray(e?.conditionBranches)?e.conditionBranches:[]].sort((e,t)=>(e.priority??0)-(t.priority??0))})};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});t(),i();var De={class:`condition-node`},Oe={key:0,class:`condition-empty`},ke={key:1,class:`condition-branches`},Ae={class:`branch-name`},je={class:`branch-meta`};function Me(t,n,i,a,o,s){return m(),b(`div`,De,[a.branches.length===0?(m(),b(`div`,Oe,`未配置条件分支`)):(m(),b(`div`,ke,[(m(!0),b(x,null,e(a.branches,e=>(m(),b(`div`,{key:e.id,class:`condition-branch`},[r(`span`,Ae,v(e.isDefault?`DEFAULT`:e.name),1),r(`span`,je,`(`+v(e.combine.toUpperCase())+` / `+v(e.rules.length)+`)`,1)]))),128))]))])}var Ne=C(Ee,[[`render`,Me],[`__scopeId`,`data-v-d91bc3e6`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/flow/nodes/ConditionNode.vue`]]);t();var Pe=o({__name:`UserInputNode`,props:{data:{type:Object,required:!0},id:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=p(()=>{let e=n.data?.config;return(Array.isArray(e?.userInputParams)?e.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e)}),i={props:n,paramNames:r,requiredSet:p(()=>{let e=n.data?.config,t=Array.isArray(e?.userInputParams)?e.userInputParams:[],r=new Set;for(let e of t){let t=String(e?.name||``).trim();t&&e?.required&&r.add(t)}return r}),displayNames:p(()=>r.value.slice(0,3)),hasMore:p(()=>r.value.length>3),get $t(){return S}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});i(),t();var $={class:`user-input-node-content`},Fe={key:0,class:`node-warning`},Ie={key:0,class:`node-warning`},Le={key:1,class:`param-summary`},Re={class:`param-count`},ze={class:`param-list`},Be={key:0,class:`star`},Ve={key:0,class:`more`};function He(t,n,i,a,o,s){return m(),b(`div`,$,[i.data.config?(m(),b(x,{key:1},[a.paramNames.length===0?(m(),b(`div`,Ie,v(a.$t(`@UINPUT:暂无输入参数`)),1)):(m(),b(`div`,Le,[r(`div`,Re,v(a.$t(`@UINPUT:参数名`))+` (`+v(a.paramNames.length)+`)`,1),r(`div`,ze,[(m(!0),b(x,null,e(a.displayNames,e=>(m(),b(`span`,{key:e,class:c([`param-chip`,{required:a.requiredSet.has(e)}])},[a.requiredSet.has(e)?(m(),b(`span`,Be,`*`)):u(`v-if`,!0),l(` `+v(e),1)],2))),128)),a.hasMore?(m(),b(`span`,Ve,`+`+v(a.paramNames.length-3),1)):u(`v-if`,!0)])]))],64)):(m(),b(`div`,Fe,v(a.$t(`@FLOWNODE:未配置`)),1))])}var Ue=C(Pe,[[`render`,He],[`__scopeId`,`data-v-86d42f81`],[`__file`,`C:/workspace/github_workspace/xz333221/zen-gitsync/src/ui/client/src/components/flow/nodes/UserInputNode.vue`]]);export{de as a,L as c,ge as i,Ne as n,ne as o,Te as r,q as s,Ue as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.wb-ctx-menu[data-v-d2df2361]{z-index:var(--z-menu-float);background:var(--bg-container);border:1px solid var(--border-color);border-radius:var(--radius-md);min-width:140px;box-shadow:var(--shadow-md);-webkit-user-select:none;user-select:none;font-size:var(--font-size-mid);margin:0;padding:4px;list-style:none;position:fixed}.wb-ctx-menu__item[data-v-d2df2361]{border-radius:var(--radius-base);cursor:pointer;color:var(--text-primary);align-items:center;gap:8px;padding:6px 10px;display:flex}.wb-ctx-menu__item[data-v-d2df2361]:hover{background:var(--tint-primary-12);color:var(--color-primary)}.wb-ctx-menu__item.is-disabled[data-v-d2df2361]{cursor:progress;opacity:var(--disabled-opacity)}.wb-ctx-menu__icon[data-v-d2df2361]{justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.wb-log-details[data-v-a4bb55c4]{border:1px solid var(--border-color);border-radius:var(--radius-base);background:var(--bg-code);flex-direction:column;flex:1;height:100%;min-height:0;margin-top:6px;display:flex;overflow:auto}.wb-log-details__body[data-v-a4bb55c4]{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.wb-job-chat[data-v-a4bb55c4]{flex-direction:column;flex:1;min-height:0;display:flex}.wb-job-chat[data-v-a4bb55c4] .acu-chat-footer{display:none}.wb-job-chat[data-v-a4bb55c4] .acu-chat{background:0 0}.wb-job-chat[data-v-a4bb55c4] .acu-message-list-inner{gap:10px;padding:10px 12px 14px}.wb-job-chat[data-v-a4bb55c4] .acu-bubble{font-size:var(--font-size-sm)}.wb-job-chat[data-v-a4bb55c4] .acu-bubble-name{font-size:var(--font-size-xs)}.wb-log-summary[data-v-a4bb55c4]{cursor:pointer;font-size:var(--font-size-sm);color:var(--text-secondary);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;display:flex}.wb-log-summary[data-v-a4bb55c4]:hover{background:var(--tint-primary-06)}.wb-log-summary__left[data-v-a4bb55c4]{flex:1;align-items:center;gap:6px;min-width:0;display:inline-flex}.wb-log-summary__right[data-v-a4bb55c4]{flex-shrink:0;align-items:center;gap:8px;display:inline-flex}.wb-log-summary__meta[data-v-a4bb55c4]{font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums}.wb-log-copy[data-v-a4bb55c4]{font-size:var(--font-size-xs);color:var(--text-secondary);background:var(--bg-container);border:1px solid var(--border-color-medium);border-radius:var(--radius-base);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);flex-shrink:0;align-items:center;gap:3px;padding:2px 7px;font-weight:500;display:inline-flex}.wb-log-copy[data-v-a4bb55c4]: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-a4bb55c4]:active{background:color-mix(in srgb, var(--color-primary) 18%, transparent)}.wb-log-copy[data-v-a4bb55c4]:focus-visible{outline:2px solid color-mix(in srgb, var(--color-primary) 50%, transparent);outline-offset:1px}.wb-chat__foot[data-v-a4bb55c4]{border-top:1px solid color-mix(in srgb, var(--border-color) 60%, transparent);background:color-mix(in srgb, var(--text-tertiary) 3%, transparent);flex-shrink:0;justify-content:flex-end;gap:6px;padding:4px 10px 6px;display:flex}.wb-chat__action[data-v-a4bb55c4]{font-size:var(--font-size-xs);color:var(--color-think-dark);background:color-mix(in srgb, var(--color-think) 10%, var(--bg-container));border:1px solid color-mix(in srgb, var(--color-think) 30%, transparent);border-radius:var(--radius-base);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);align-items:center;gap:3px;padding:2px 8px;font-weight:500;display:inline-flex}.wb-chat__action[data-v-a4bb55c4]:hover{background:color-mix(in srgb, var(--color-think) 18%, var(--bg-container));border-color:color-mix(in srgb, var(--color-think) 50%, transparent);color:var(--color-think-darker)}.wb-chat__action[data-v-a4bb55c4]:active{background:color-mix(in srgb, var(--color-think) 26%, var(--bg-container))}.wb-chat__action[data-v-a4bb55c4]:focus-visible{outline:2px solid color-mix(in srgb, var(--color-think) 50%, transparent);outline-offset:1px}.wb-log-fullscreen-dialog .el-dialog__body[data-v-a4bb55c4]{flex-direction:column;height:calc(100vh - 54px);padding:0 16px 16px;display:flex;overflow:hidden}.wb-log-fullscreen[data-v-a4bb55c4]{border:1px solid var(--border-color);border-radius:var(--radius-base);background:var(--bg-code);flex:1;min-height:0;display:flex;overflow:hidden}.wb-log-fullscreen__render[data-v-a4bb55c4]{min-height:0;font-size:var(--font-size-mid);color:var(--text-primary);flex:1;padding:14px 18px;line-height:1.65;overflow:auto}.wb-log-fullscreen__render[data-v-a4bb55c4] pre{margin:8px 0}.wb-log-fullscreen__empty[data-v-a4bb55c4]{color:var(--text-meta);padding:14px 18px;font-style:italic}.wb-log-summary__status[data-v-a4bb55c4]{font-weight:600;font-size:var(--font-size-sm);align-items:center;gap:6px;display:inline-flex}.wb-log-summary__status--running[data-v-a4bb55c4]{color:var(--color-warning-dark)}.wb-log-summary__status--pending[data-v-a4bb55c4]{color:var(--color-primary)}.wb-log-summary__status--done[data-v-a4bb55c4]{color:var(--color-success-dark,#15803d)}.wb-log-summary__status--cancelled[data-v-a4bb55c4]{color:var(--color-gray-400)}.wb-log-summary__status--error[data-v-a4bb55c4]{color:var(--color-danger,var(--color-danger-light))}.wb-log-summary__icon[data-v-a4bb55c4]{font-size:var(--font-size-mid);line-height:1}.wb-log-summary__elapsed[data-v-a4bb55c4]{font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums;margin-left:2px;font-weight:400}.wb-log-dots[data-v-a4bb55c4]{align-items:center;gap:3px;margin-left:-2px;display:inline-flex}.wb-log-dots__dot[data-v-a4bb55c4]{opacity:.35;background:currentColor;border-radius:50%;width:4px;height:4px;animation:1.4s ease-in-out infinite wb-log-dot-bounce-a4bb55c4}.wb-log-dots__dot[data-v-a4bb55c4]:nth-child(2){animation-delay:var(--transition-base)}.wb-log-dots__dot[data-v-a4bb55c4]:nth-child(3){animation-delay:.4s}.wb-log-details.is-running .wb-log-summary[data-v-a4bb55c4]{background:color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 8%, transparent)}.wb-log-details.is-pending .wb-log-summary[data-v-a4bb55c4]{background:color-mix(in srgb, var(--color-primary) 6%, transparent)}.wb-log-details.is-finished .wb-log-summary[data-v-a4bb55c4]{background:color-mix(in srgb, var(--color-success,var(--action-green)) 6%, transparent)}.wb-log-details.is-finished[data-v-a4bb55c4]{animation:1.5s ease-out wb-log-finished-flash-a4bb55c4}@keyframes wb-log-dot-bounce-a4bb55c4{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@keyframes wb-log-finished-flash-a4bb55c4{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-success,var(--action-green)) 50%, transparent)}60%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-success,var(--action-green)) 0%, transparent)}to{box-shadow:0 0 #0000}}@media (prefers-reduced-motion:reduce){.wb-log-dots__dot[data-v-a4bb55c4],.wb-log-details.is-finished[data-v-a4bb55c4]{animation:none}}.exec-logs[data-v-d3ebe953]{flex-direction:column;gap:12px;height:100%;padding:16px 20px;display:flex;overflow:auto}.exec-logs__head[data-v-d3ebe953]{align-items:center;gap:12px;display:flex}.exec-logs__title-block[data-v-d3ebe953]{flex:1;align-items:baseline;gap:10px;min-width:0;display:flex}.exec-logs__stats[data-v-d3ebe953]{font-size:var(--font-size-sm);color:var(--text-meta);font-variant-numeric:tabular-nums}.exec-logs__head-actions[data-v-d3ebe953]{flex-shrink:0;gap:8px;display:inline-flex}.exec-logs__config[data-v-d3ebe953]{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-d3ebe953]{font-size:var(--font-size-sm);color:var(--text-secondary);font-weight:600}.exec-logs__config-field[data-v-d3ebe953]{align-items:center;gap:8px;display:inline-flex}.exec-logs__config-name[data-v-d3ebe953]{font-size:var(--font-size-sm);color:var(--text-meta)}.exec-logs__filter[data-v-d3ebe953]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.exec-logs__filter-spacer[data-v-d3ebe953]{flex:1}.exec-logs__batch-meta[data-v-d3ebe953]{font-size:var(--font-size-sm);color:var(--text-secondary);font-variant-numeric:tabular-nums}.exec-logs__batch[data-v-d3ebe953]{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-d3ebe953]{flex-direction:column;flex:1;gap:10px;min-height:200px;display:flex}.exec-logs__empty[data-v-d3ebe953]{border:1px dashed var(--border-color);border-radius:var(--radius-md,6px);color:var(--text-meta);text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:60px 20px;display:flex}.exec-logs__empty-art[data-v-d3ebe953]{opacity:.5;margin-bottom:8px;font-size:36px}.exec-logs__empty-title[data-v-d3ebe953]{font-size:var(--font-size-base);color:var(--text-secondary);margin-bottom:4px;font-weight:600}.exec-logs__empty-hint[data-v-d3ebe953]{font-size:var(--font-size-sm);max-width:400px}.exec-logs__pager[data-v-d3ebe953]{justify-content:center;padding-top:8px;display:flex}.exec-card[data-v-d3ebe953]{background:var(--bg-container);border:1px solid var(--border-color);border-radius:var(--radius-md,6px);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);flex-direction:column;gap:6px;padding:12px 14px;display:flex}.exec-card[data-v-d3ebe953]:hover{border-color:var(--color-primary)}.exec-card.is-selected[data-v-d3ebe953]{border-color:var(--color-primary);box-shadow:0 0 0 1px var(--color-primary)}.exec-card__head[data-v-d3ebe953]{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.exec-card__status[data-v-d3ebe953]{font-size:var(--font-size-xs);border:1px solid;border-radius:999px;flex-shrink:0;padding:1px 8px;font-weight:600;display:inline-block}.exec-card__title[data-v-d3ebe953]{font-size:var(--font-size-base);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;min-width:0;max-width:360px;font-weight:600;overflow:hidden}.exec-card__spacer[data-v-d3ebe953]{flex:1}.exec-card__meta[data-v-d3ebe953]{font-size:var(--font-size-xs);color:var(--text-meta);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:10px;display:inline-flex}.exec-card__task[data-v-d3ebe953]{white-space:nowrap;text-overflow:ellipsis;max-width:200px;overflow:hidden}.exec-card__time[data-v-d3ebe953]{font-variant-numeric:tabular-nums}.exec-card__exit[data-v-d3ebe953]{font-family:var(--font-mono,ui-monospace, monospace)}.exec-card__del[data-v-d3ebe953]{width:22px;height:22px;font-size:var(--font-size-md);color:var(--text-meta);border-radius:var(--radius-base);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;line-height:1;display:inline-flex}.exec-card__del[data-v-d3ebe953]:hover{background:var(--tint-danger-14);color:var(--color-danger-bright,var(--color-danger-light))}.exec-card__error[data-v-d3ebe953]{font-size:var(--font-size-sm);color:var(--color-danger-dark,#b91c1c);background:var(--tint-danger-06);border:1px solid color-mix(in srgb, var(--color-danger) 28%, transparent);border-radius:var(--radius-base);font-family:var(--font-mono,ui-monospace, monospace);white-space:pre-wrap;word-break:break-word;margin:0;padding:6px 10px}.wb-sidebar[data-v-458e9455]{background:var(--bg-panel);flex-direction:column;flex-shrink:0;gap:18px;width:268px;padding:14px 12px 18px;display:flex;overflow-y:auto}.wb-section[data-v-458e9455]{flex-direction:column;flex-shrink:0;gap:8px;min-height:0;display:flex}.wb-section+.wb-section[data-v-458e9455]{padding-top:16px}.wb-section__head[data-v-458e9455]{align-items:center;gap:6px;padding:0 4px;display:flex}.wb-section__tag[data-v-458e9455]{height:18px;font-size:var(--font-size-xs);letter-spacing:.4px;color:var(--text-meta);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-base);text-transform:uppercase;font-variant-numeric:tabular-nums;flex-shrink:0;align-items:center;padding:0 6px;font-weight:600;display:inline-flex}.wb-section__tag--accent[data-v-458e9455]{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 9%, transparent);border-color:var(--tint-primary-22)}.wb-section__title[data-v-458e9455]{font-size:var(--font-size-sm);color:var(--text-secondary);letter-spacing:.2px;flex:1;min-width:0;margin:0;font-weight:600}.wb-section__action[data-v-458e9455]{color:var(--text-meta);border-radius:var(--radius-base);cursor:pointer;width:28px;height:28px;font-size:var(--font-size-mid);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;display:inline-flex}.wb-section__action[data-v-458e9455]:hover{background:var(--tint-primary-12);color:var(--color-primary)}.wb-new-btn[data-v-458e9455]{border:1px dashed var(--tint-primary-35,color-mix(in srgb, var(--color-primary) 35%, transparent));border-radius:var(--radius-md);background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 4%, transparent) 0%, color-mix(in srgb, var(--color-primary) 2%, transparent) 100%);width:100%;height:32px;color:var(--color-primary);font-size:var(--font-size-mid);letter-spacing:.05px;cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);align-items:center;gap:6px;padding:0 12px;font-weight:600;display:flex}.wb-new-btn__icon[data-v-458e9455]{font-size:var(--font-size-mid);transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0}.wb-new-btn__shortcut[data-v-458e9455]{display:none}.wb-new-btn[data-v-458e9455]:hover{background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 10%, transparent) 0%, color-mix(in srgb, var(--color-primary) 6%, transparent) 100%);color:var(--color-primary);border-style:solid;border-color:var(--tint-primary-50)}.wb-new-btn:hover .wb-new-btn__icon[data-v-458e9455]{transform:rotate(90deg)}.wb-new-btn[data-v-458e9455]:active{transform:scale(.99)}.wb-new-btn[data-v-458e9455]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.wb-task-list[data-v-458e9455]{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.wb-task-list.is-grouped .wb-task-item[data-v-458e9455]{margin-left:14px}.wb-task-item[data-v-458e9455]{border-radius:var(--radius-md);cursor:pointer;transition: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;align-items:center;gap:8px;padding:7px 10px;display:flex;position:relative}.wb-task-item.is-running[data-v-458e9455]{background:color-mix(in srgb, var(--color-warning) 8%, transparent)}.wb-task-item.is-running[data-v-458e9455]:hover{background:color-mix(in srgb, var(--color-warning) 14%, transparent)}.wb-task-item[data-v-458e9455]:hover{background:var(--bg-container-hover);border-color:#0000;transform:translateY(-.5px)}.wb-task-item.active[data-v-458e9455]{background:color-mix(in srgb, var(--color-primary) 10%, var(--bg-container));box-shadow:0 1px 3px color-mix(in srgb, var(--color-primary) 12%, transparent), 0 0 0 1px color-mix(in srgb, var(--color-primary) 18%, transparent);border-color:#0000}.wb-task-item.active[data-v-458e9455]:after{content:"";border-radius:var(--radius-base);background:linear-gradient(180deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 70%, #fff) 100%);width:3px;box-shadow:0 0 8px color-mix(in srgb, var(--color-primary) 50%, transparent), 0 1px 3px color-mix(in srgb, var(--color-primary) 25%, transparent);position:absolute;top:5px;bottom:5px;left:-1px}.wb-task-item.active .wb-task-item__title[data-v-458e9455],.wb-task-item.active .wb-task-item__del[data-v-458e9455]{color:var(--color-primary)}.wb-task-item__running-dot[data-v-458e9455]{background:var(--color-warning);width:6px;height:6px;box-shadow:0 0 0 0 color-mix(in srgb, var(--color-warning) 60%, transparent);border-radius:50%;flex:none;margin-left:auto;animation:1.4s ease-in-out infinite wb-running-pulse-458e9455}@keyframes wb-running-pulse-458e9455{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-warning) 60%, transparent);opacity:1;transform:scale(1)}50%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-warning) 0%, transparent);opacity:.75;transform:scale(1.35)}}.wb-task-item__body[data-v-458e9455]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.wb-task-item__title[data-v-458e9455]{font-size:var(--font-size-sm);color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;letter-spacing:-.05px;font-weight:500;line-height:1.3;overflow:hidden}.wb-task-item.is-other-project[data-v-458e9455]{opacity:.78}.wb-task-item.is-other-project[data-v-458e9455]:hover{opacity:1}.wb-task-item[data-v-458e9455]{cursor:grab}.wb-task-item.is-dragging[data-v-458e9455]{opacity:.5;cursor:grabbing;pointer-events:none}.wb-task-item.is-drop-before[data-v-458e9455]:before,.wb-task-item.is-drop-after[data-v-458e9455]:after{content:"";background:var(--color-primary);border-radius:var(--radius-xs);height:2px;box-shadow:0 0 8px color-mix(in srgb, var(--color-primary) 50%, transparent);pointer-events:none;position:absolute;left:8px;right:8px}.wb-task-item.is-drop-before[data-v-458e9455]:before{top:-2px}.wb-task-item.is-drop-after[data-v-458e9455]:after{bottom:-2px}.wb-task-group__head.is-no-drop[data-v-458e9455]{cursor:not-allowed;opacity:.55}.wb-task-item__action-group[data-v-458e9455]{border-radius:var(--radius-lg);background:linear-gradient(to right, transparent 0%, var(--bg-container-hover) 40%);opacity:0;pointer-events:none;transition:opacity var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);align-items:center;gap:2px;padding:1px 1px 1px 14px;display:inline-flex;position:absolute;top:50%;right:6px;transform:translateY(-50%)translate(-2px)}.wb-task-item:hover .wb-task-item__action-group[data-v-458e9455],.wb-task-item.active .wb-task-item__action-group[data-v-458e9455]{opacity:1;pointer-events:auto;transform:translateY(-50%)translate(0)}.wb-task-item.active .wb-task-item__action-group[data-v-458e9455]{background:linear-gradient(to right, transparent 0%, color-mix(in srgb, var(--color-primary) 10%, var(--bg-container)) 40%)}.wb-task-item.is-running .wb-task-item__action-group[data-v-458e9455]{background:linear-gradient(to right, transparent 0%, color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 8%, var(--bg-panel)) 40%)}.wb-task-item__copy[data-v-458e9455]{color:var(--text-meta);border-radius:var(--radius-md);cursor:pointer;width:22px;height:22px;font-size:var(--font-size-sm);transition: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;display:inline-flex}.wb-task-item__copy[data-v-458e9455]:hover{background:color-mix(in srgb, var(--color-primary) 12%, transparent);color:var(--color-primary)}.wb-task-item__copy[data-v-458e9455]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset)}.wb-task-item__copy[data-v-458e9455]:active{transform:scale(.9)}.wb-task-item__del[data-v-458e9455]{color:var(--text-meta);border-radius:var(--radius-md);cursor:pointer;width:22px;height:22px;font-size:var(--font-size-sm);transition: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;display:inline-flex}.wb-task-item__del[data-v-458e9455]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger-dark)}.wb-task-item__del[data-v-458e9455]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset);opacity:1}.wb-task-item__del[data-v-458e9455],.wb-sub-item__del[data-v-458e9455]{font-size:var(--font-size-mid)}.wb-empty[data-v-458e9455]{text-align:center;color:var(--text-meta);border-radius:var(--radius-md);background:linear-gradient(135deg, var(--bg-subtle) 0%, color-mix(in srgb, var(--tint-primary-06) 50%, transparent) 100%);border:1px dashed var(--border-color-light);flex-direction:column;align-items:center;gap:8px;padding:24px 14px 20px;display:flex;position:relative;overflow:hidden}.wb-empty[data-v-458e9455]:before{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--color-primary) 5%, transparent) 0%, transparent 70%);pointer-events:none;border-radius:50%;width:100px;height:100px;position:absolute;top:-25px;right:-25px}.wb-empty--compact[data-v-458e9455]{background:var(--bg-subtle);border-style:solid;flex-direction:row;justify-content:center;gap:0;padding:10px 12px}.wb-empty--compact[data-v-458e9455]:before{display:none}.wb-empty__art[data-v-458e9455]{border-radius:var(--radius-xl);background:linear-gradient(135deg, var(--tint-primary-12) 0%, var(--tint-primary-08) 100%);width:52px;height:52px;color:var(--color-primary);font-size:var(--font-size-2xl);box-shadow:0 4px 12px color-mix(in srgb, var(--color-primary) 10%, transparent);z-index:1;justify-content:center;align-items:center;margin-bottom:4px;display:flex;position:relative}.wb-empty__title[data-v-458e9455]{font-size:var(--font-size-base);letter-spacing:var(--letter-spacing-heading,-.25px);color:var(--text-secondary);z-index:1;font-weight:600;line-height:1.45;position:relative}.wb-empty--rich .wb-empty__hint[data-v-458e9455]{font-size:var(--font-size-sm);color:var(--text-meta);z-index:1;max-width:280px;line-height:1.6;position:relative}.wb-empty__cta[data-v-458e9455]{z-index:1;flex-wrap:wrap;justify-content:center;align-items:center;gap:14px;margin-top:8px;display:flex;position:relative}.wb-task-group__head[data-v-458e9455]{border-radius:var(--radius-md);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--font-size-mid);color:var(--text-secondary);transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);align-items:center;gap:6px;margin-bottom:2px;padding:5px 6px;font-weight:600;display:flex}.wb-task-group__head[data-v-458e9455]:hover{background:var(--bg-container-hover);color:var(--text-primary)}.wb-task-group__head.is-current[data-v-458e9455]{color:var(--color-primary);font-weight:600}.wb-task-group__caret[data-v-458e9455]{font-size:var(--font-size-sm);transition:transform var(--transition-fast);flex-shrink:0}.wb-task-group__icon[data-v-458e9455]{font-size:var(--font-size-base);opacity:.7;flex-shrink:0}.wb-task-group__name[data-v-458e9455]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.wb-task-group__count[data-v-458e9455]{min-width:14px;height:14px;font-size:var(--font-size-xs);background:var(--bg-subtle);padding:0 4px}.proj[data-v-de1af726]{flex-direction:column;flex:auto;min-height:0;display:flex;overflow:hidden}.proj__head[data-v-de1af726]{flex-shrink:0;align-items:center;gap:8px;padding:8px 12px;display:flex}.proj__title[data-v-de1af726]{font-size:var(--font-size-sm);color:var(--text-secondary);flex:1;min-width:0;margin:0;font-weight:500}.proj__count[data-v-de1af726]{font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums;text-align:right}.proj__tools[data-v-de1af726]{flex-direction:column;flex-shrink:0;gap:8px;padding:0 12px 8px;display:flex}.proj__search[data-v-de1af726]{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-subtle);height:24px;transition:border-color var(--transition-fast) var(--ease-custom);align-items:center;gap:4px;padding:0 8px;display:flex}.proj__search[data-v-de1af726]:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-soft)}.proj__search-icon[data-v-de1af726]{font-size:var(--font-size-sm);color:var(--text-meta);flex-shrink:0}.proj__search-input[data-v-de1af726]{min-width:0;font-family:inherit;font-size:var(--font-size-sm);color:var(--text-primary);background:0 0;border:none;outline:none;flex:1}.proj__search-input[data-v-de1af726]::placeholder{color:var(--text-meta)}.proj__toggles[data-v-de1af726]{align-items:center;gap:8px;display:flex}.proj__toggle[data-v-de1af726]{border:1px solid var(--border-color);border-radius:var(--radius-md);min-width:0;height:22px;color:var(--text-meta);font-family:inherit;font-size:var(--font-size-xs);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;flex:1 1 0;padding:0 8px;line-height:1}.proj__toggle>span[data-v-de1af726]{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.proj__toggle[data-v-de1af726]:hover{color:var(--text-secondary);border-color:var(--text-tertiary)}.proj__toggle.is-on[data-v-de1af726]{color:var(--color-primary);border-color:var(--color-primary);background:var(--tint-primary-12)}.proj__toggle[data-v-de1af726]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.proj__list[data-v-de1af726]{flex:auto;min-height:0;margin:0;padding:0 8px 8px;list-style:none;overflow-y:auto}.proj-item[data-v-de1af726]{border-radius:var(--radius-lg);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom);outline:none;padding:8px;position:relative}.proj-item[data-v-de1af726]:hover{background:var(--bg-container-hover)}.proj-item.is-active[data-v-de1af726]{background:linear-gradient(90deg, var(--tint-primary-10), var(--tint-primary-04));box-shadow:inset 0 0 0 1px var(--tint-primary-14)}.proj-item[data-v-de1af726]:focus-visible{outline:var(--focus-outline);outline-offset:-1px}.proj-item.is-running[data-v-de1af726]{background:var(--role-active-surface)}.proj-item--all[data-v-de1af726]{border-bottom:1px solid var(--border-color);border-radius:var(--radius-lg) var(--radius-lg) 0 0;margin-bottom:4px}.proj-item__num[data-v-de1af726]{font-size:var(--font-size-xs);border-radius:var(--radius-base);color:var(--text-secondary);background:var(--bg-subtle);font-variant-numeric:tabular-nums;flex-shrink:0;padding:0 5px;line-height:15px}.proj-item__running-text[data-v-de1af726]{color:var(--color-warning-dark);font-variant-numeric:tabular-nums;flex-shrink:0;margin-left:auto}.proj-item__row1[data-v-de1af726]{align-items:center;gap:6px;min-width:0;display:flex}.proj-item__icon[data-v-de1af726]{font-size:var(--font-size-mid);color:var(--text-meta);flex-shrink:0}.proj-item.is-active .proj-item__icon[data-v-de1af726]{color:var(--color-primary)}.proj-item__name[data-v-de1af726]{font-size:var(--font-size-mid);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;padding-right:44px;font-weight:500;line-height:1.4;overflow:hidden}.proj-item__signals[data-v-de1af726]{transition:opacity var(--transition-fast) var(--ease-custom);flex-shrink:0;align-items:center;gap:6px;display:inline-flex}.proj-item:hover .proj-item__signals[data-v-de1af726]{opacity:0}.proj-item:has(.proj-item__action:focus-visible) .proj-item__signals[data-v-de1af726]{opacity:0}.proj-item__running[data-v-de1af726]{background:var(--color-warning);width:6px;height:6px;box-shadow:var(--dot-glow-warning);border-radius:50%;flex-shrink:0;animation:1.4s ease-in-out infinite proj-pulse-de1af726}@keyframes proj-pulse-de1af726{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(1.3)}}.proj-item__badge[data-v-de1af726]{font-size:var(--font-size-xs);border-radius:var(--radius-base);color:var(--color-primary);background:var(--tint-primary-12);flex-shrink:0;padding:0 5px;line-height:15px}.proj-item__actions[data-v-de1af726]{opacity:0;pointer-events:none;transition:opacity var(--transition-fast) var(--ease-custom);align-items:center;gap:2px;display:inline-flex;position:absolute;top:6px;right:8px}.proj-item:hover .proj-item__actions[data-v-de1af726]{opacity:1;pointer-events:auto}.proj-item:has(.proj-item__action:focus-visible) .proj-item__actions[data-v-de1af726]{opacity:1;pointer-events:auto}.proj-item:has(.proj-item__action.is-open) .proj-item__actions[data-v-de1af726]{opacity:1;pointer-events:auto}.proj-item__action[data-v-de1af726]{border-radius:var(--radius-base);width:20px;height:20px;color:var(--text-meta);font-size:var(--font-size-mid);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.proj-item__action[data-v-de1af726]:hover{color:var(--color-primary);background:var(--tint-primary-12)}.proj-item__action[data-v-de1af726]:active{color:var(--color-primary)}.proj-item__action[data-v-de1af726]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.proj-item__action.is-open[data-v-de1af726]{color:var(--color-primary);background:var(--tint-primary-12)}.proj-item__action--danger[data-v-de1af726]{color:var(--color-danger-dark)}.proj-item__action--danger[data-v-de1af726]:hover{color:var(--color-danger-dark);background:color-mix(in srgb, var(--color-danger) 14%, transparent)}.proj-item__action--danger[data-v-de1af726]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.proj-menu[data-v-de1af726]{font-size:var(--font-size-mid);color:var(--text-primary);margin:0;padding:2px 0;list-style:none}.proj-menu__item[data-v-de1af726]{border-radius:var(--radius-md);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);align-items:center;gap:9px;padding:7px 10px;display:flex}.proj-menu__item[data-v-de1af726]:hover,.proj-menu__item[data-v-de1af726]:focus-visible{background:var(--tint-primary-12);outline:none}.proj-menu__icon[data-v-de1af726]{width:16px;height:16px;font-size:var(--font-size-base);color:var(--text-secondary);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.proj-menu__icon[data-v-de1af726] svg{width:16px;height:16px}.proj-menu__img[data-v-de1af726]{object-fit:contain;-webkit-user-drag:none;width:16px;height:16px}.proj-menu__label[data-v-de1af726]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.proj-menu__hint[data-v-de1af726]{font-size:var(--font-size-xs);color:var(--text-meta);transition:color var(--transition-fast) var(--ease-custom);flex-shrink:0}.proj-menu__item:hover .proj-menu__hint[data-v-de1af726]{color:var(--color-primary)}.proj-menu__sep[data-v-de1af726]{background:var(--border-color);height:1px;margin:4px 6px}.proj-menu__title[data-v-de1af726]{font-size:var(--font-size-xs);letter-spacing:.3px;color:var(--text-meta);padding:4px 10px 3px;font-weight:600}.proj-menu__item--danger .proj-menu__label[data-v-de1af726]{color:var(--color-warning-dark)}.proj-menu__item.is-missing .proj-menu__icon[data-v-de1af726]{opacity:.5;filter:grayscale(.65)}.proj-menu__item.is-missing:hover .proj-menu__icon[data-v-de1af726]{opacity:.85;filter:grayscale(.2)}.proj-item__row2[data-v-de1af726]{min-width:0;font-size:var(--font-size-xs);color:var(--text-meta);align-items:center;gap:4px;margin-top:2px;display:flex}.proj-item__branch[data-v-de1af726]{min-width:0;max-width:130px;font-family:var(--font-mono,ui-monospace, monospace);align-items:center;gap:4px;display:inline-flex}.proj-item__branch-name[data-v-de1af726]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.proj-item__branch[data-v-de1af726] .proj-item__branch-icon{color:currentColor;flex-shrink:0;width:11px;height:11px}.proj-item__time[data-v-de1af726]{font-variant-numeric:tabular-nums;flex-shrink:0;margin-left:auto}.proj-chip[data-v-de1af726]{font-size:var(--font-size-xs);border-radius:var(--radius-pill);font-variant-numeric:tabular-nums;flex-shrink:0;padding:0 6px;line-height:14px}.proj-chip--ahead[data-v-de1af726]{color:var(--color-primary);background:var(--tint-primary-12)}.proj-chip--behind[data-v-de1af726]{color:var(--color-warning-dark);background:color-mix(in srgb, var(--color-warning) 14%, transparent)}.proj-chip--dirty[data-v-de1af726]{color:var(--text-secondary);background:var(--bg-subtle)}.proj-chip--missing[data-v-de1af726]{color:var(--color-danger-light);background:color-mix(in srgb, var(--color-danger) 12%, transparent)}.proj-item__row3[data-v-de1af726]{align-items:center;gap:6px;margin-top:5px;display:flex}.proj-item__bar[data-v-de1af726]{border-radius:var(--radius-pill);background:color-mix(in srgb, var(--text-tertiary) 16%, transparent);flex:1;min-width:0;height:4px;overflow:hidden}.proj-item__bar-fill[data-v-de1af726]{border-radius:var(--radius-pill);background:var(--role-pending-bar);height:100%;transition:width var(--transition-base) var(--ease-custom), background var(--transition-fast) var(--ease-custom);display:block}.proj-item.is-running .proj-item__bar-fill[data-v-de1af726]{background:var(--role-active-bar)}.proj-item.is-complete .proj-item__bar-fill[data-v-de1af726]{background:var(--role-done-bar)}.proj-item__progress-text[data-v-de1af726]{font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums;flex-shrink:0}.proj-empty[data-v-de1af726]{text-align:center;border-radius:var(--radius-lg);background:var(--bg-subtle);margin:0 6px;padding:20px 12px;list-style:none}.proj-empty__title[data-v-de1af726]{font-size:var(--font-size-mid);color:var(--text-secondary);margin:0 0 4px}.proj-empty__hint[data-v-de1af726]{font-size:var(--font-size-xs);color:var(--text-meta);margin:0;line-height:1.6}.proj-empty__clear[data-v-de1af726]{color:var(--color-primary);font-family:inherit;font-size:var(--font-size-xs);cursor:pointer;background:0 0;border:none;margin-top:8px;padding:2px 4px}.proj-empty__clear[data-v-de1af726]:hover{text-decoration:underline}.proj-empty__clear[data-v-de1af726]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.kb[data-v-0b8fc27c]{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}.kb__toolbar[data-v-0b8fc27c]{border-bottom:1px solid var(--border-color);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;padding:8px 12px;display:flex}.kb__views[data-v-0b8fc27c]{border-radius:var(--radius-lg);background:var(--bg-subtle);flex-shrink:0;align-items:center;gap:2px;padding:3px;display:inline-flex}.kb__view-btn[data-v-0b8fc27c]{color:var(--text-secondary);font-size:var(--font-size-sm);border-radius:var(--radius-base);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;padding:0 10px;line-height:20px}.kb__view-btn[data-v-0b8fc27c]:hover{color:var(--text-primary)}.kb__view-btn.is-active[data-v-0b8fc27c]{background:var(--surface-elevated);box-shadow:var(--shadow-card-rest);color:var(--color-primary);font-weight:500}.kb__filters[data-v-0b8fc27c]{flex-wrap:wrap;align-items:center;gap:10px;margin-left:auto;display:flex}.kb__search[data-v-0b8fc27c]{align-items:center;display:inline-flex;position:relative}.kb__search-icon[data-v-0b8fc27c]{font-size:var(--font-size-sm);color:var(--text-meta);pointer-events:none;position:absolute;left:7px}.kb__search-input[data-v-0b8fc27c]{width:168px;height:24px;font-size:var(--font-size-sm);color:var(--text-primary);background:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:border-color var(--transition-fast) var(--ease-custom), width var(--transition-base) var(--ease-custom);outline:none;padding:0 8px 0 24px}.kb__search-input[data-v-0b8fc27c]:hover:not(:focus){border-color:var(--input-border-hover)}.kb__search-input[data-v-0b8fc27c]:focus{border-color:var(--color-primary);box-shadow:var(--focus-ring-soft);width:216px}.kb__search-input[data-v-0b8fc27c]::placeholder{color:var(--text-meta)}.kb__columns[data-v-0b8fc27c]{flex:auto;min-height:0;display:grid;overflow:hidden}.kb__columns.is-animated[data-v-0b8fc27c]{transition:grid-template-columns var(--transition-slow) var(--ease-enter)}.kb-col[data-v-0b8fc27c]{--col-hue:var(--role-pending-hue);--col-ink:var(--role-pending-ink);--col-surface:var(--role-pending-surface);--col-wash:var(--role-pending-wash);--col-edge:var(--role-pending-edge);--col-glow:var(--role-pending-glow);--col-band:color-mix(in srgb, var(--col-hue) 26%, var(--surface-elevated));border-left:1px solid var(--border-color);background:var(--col-surface);min-width:0;min-height:0;transition:opacity var(--transition-base) var(--ease-enter), border-color var(--transition-base) var(--ease-enter);flex-direction:column;display:flex;overflow:hidden}.kb-col--doing[data-v-0b8fc27c]{--col-hue:var(--role-active-hue);--col-ink:var(--role-active-ink);--col-surface:var(--role-active-surface);--col-wash:var(--role-active-wash);--col-edge:var(--role-active-edge);--col-glow:var(--role-active-glow)}.kb-col--done[data-v-0b8fc27c]{--col-hue:var(--role-done-hue);--col-ink:var(--role-done-ink);--col-surface:var(--role-done-surface);--col-wash:var(--role-done-wash);--col-edge:var(--role-done-edge);--col-glow:var(--role-done-glow)}.kb-col[data-v-0b8fc27c]:first-child{border-left:none}.kb-col__head[data-v-0b8fc27c]{background:var(--col-band);border-bottom:1px solid var(--col-edge);flex-shrink:0;align-items:center;gap:8px;padding:8px 12px;display:flex}.kb-col__dot[data-v-0b8fc27c]{background:var(--col-ink);width:8px;height:8px;box-shadow:var(--col-glow);border-radius:50%;flex-shrink:0}.kb-col--doing .kb-col__dot.is-live[data-v-0b8fc27c]{animation:1.4s ease-in-out infinite kb-pulse-0b8fc27c}@keyframes kb-pulse-0b8fc27c{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(1.35)}}.kb-col__title[data-v-0b8fc27c]{font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-wide);color:var(--col-ink);flex:1;min-width:0;margin:0;font-weight:600}.kb-col__count[data-v-0b8fc27c]{font-size:var(--font-size-sm);color:var(--col-ink);font-variant-numeric:tabular-nums;border-radius:var(--radius-pill);background:color-mix(in srgb, var(--col-ink) 10%, transparent);padding:1px 7px;font-weight:600}.kb-col__list[data-v-0b8fc27c]{flex:auto;min-height:0;margin:0;padding:12px;list-style:none;overflow-y:auto}.kb-col.is-collapsed[data-v-0b8fc27c]{opacity:0;pointer-events:none;border-left-color:#0000}.kb-col__more[data-v-0b8fc27c]{margin-top:4px;list-style:none}.kb-col__more-btn[data-v-0b8fc27c]{border:1px dashed var(--border-color);border-radius:var(--radius-base);width:100%;color:var(--text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom);background:0 0;padding:8px}.kb-col__more-btn[data-v-0b8fc27c]:hover{color:var(--col-ink);border-color:var(--col-edge)}.kb-col__more-btn[data-v-0b8fc27c]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.kb-card[data-v-0b8fc27c]{--kb-mask-outside-band:linear-gradient(to bottom, #000 calc(100% - 19px), transparent calc(100% - 14px));border:1px solid var(--border-color-light);border-radius:var(--radius-lg);background:var(--surface-elevated);box-shadow:var(--shadow-card-rest);cursor:pointer;transition:border-color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);margin-bottom:8px;padding:12px;position:relative}.kb-card[data-v-0b8fc27c]:hover{border-color:var(--border-card-hover);background:var(--surface-elevated);box-shadow:var(--shadow-card-lift);transform:translateY(-1px)}.kb-card.is-running[data-v-0b8fc27c]{border-color:var(--role-active-edge)}.kb-card.has-error[data-v-0b8fc27c]{border-color:var(--role-error-edge);background:var(--role-error-wash)}.kb-card.is-opened[data-v-0b8fc27c]{border-color:color-mix(in srgb, var(--color-primary) 42%, var(--border-color))}.kb-card__cover[data-v-0b8fc27c]{border-radius:calc(var(--radius-lg) - 1px) calc(var(--radius-lg) - 1px) 0 0;background:var(--bg-container);cursor:zoom-in;border:none;width:calc(100% + 24px);height:72px;margin:-12px -12px 10px;padding:0;display:block;position:relative;overflow:hidden}.kb-card__cover[data-v-0b8fc27c]:focus-visible{outline:var(--focus-outline);outline-offset:-2px}.kb-card__cover-img[data-v-0b8fc27c]{object-fit:cover;object-position:top center;width:100%;height:100%;transition:transform var(--transition-base) var(--ease-custom);display:block}.kb-card__cover:hover .kb-card__cover-img[data-v-0b8fc27c]{transform:scale(1.04)}.kb-card__cover-more[data-v-0b8fc27c]{border-radius:var(--radius-base);background:var(--bg-overlay);color:#fff;font-size:var(--font-size-xs);font-variant-numeric:tabular-nums;padding:0 5px;line-height:16px;position:absolute;bottom:6px;right:6px}.kb-card__row1[data-v-0b8fc27c]{min-width:0;font-size:var(--font-size-xs);color:var(--text-meta);align-items:baseline;gap:6px;margin-bottom:8px;display:flex}.kb-card__time[data-v-0b8fc27c]{font-variant-numeric:tabular-nums;flex-shrink:0;margin-left:auto}.kb-card__spent[data-v-0b8fc27c]{font-size:var(--font-size-xs);color:var(--text-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;margin:-2px 0 8px;overflow:hidden}.kb-card__auto-done[data-v-0b8fc27c]{border:1px solid color-mix(in srgb, var(--color-success) 24%, var(--surface-elevated));border-radius:var(--radius-base);background:color-mix(in srgb, var(--color-success) 9%, var(--surface-elevated));color:color-mix(in srgb, var(--color-success) 62%, var(--text-primary));font-size:var(--font-size-xs);margin:-4px 0 8px;padding:0 5px;line-height:1.6;display:inline-block}.kb-table__auto-done[data-v-0b8fc27c]{color:color-mix(in srgb, var(--color-success) 62%, var(--text-primary))}.kb-card__title[data-v-0b8fc27c]{min-width:0;font-size:var(--font-size-base);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex:1 1 0;margin:0;font-weight:500;line-height:1.5;overflow:hidden}.kb-card__project-chip[data-v-0b8fc27c],.kb-table__project[data-v-0b8fc27c]{--tag-ink:hsl(var(--tag-hue,200) 62% 44%);border:1px solid color-mix(in srgb, var(--tag-ink) 24%, var(--surface-elevated));border-radius:var(--radius-pill);background:color-mix(in srgb, var(--tag-ink) 9%, var(--surface-elevated));max-width:100%;color:color-mix(in srgb, var(--tag-ink) 62%, var(--text-primary));font-size:var(--font-size-xs);white-space:nowrap;text-overflow:ellipsis;padding:0 6px;line-height:16px;display:inline-block;overflow:hidden}.kb-card__row1 .kb-card__project-chip[data-v-0b8fc27c]{flex:0 auto;min-width:0}.kb-table__project[data-v-0b8fc27c]{vertical-align:1px;margin-left:6px}.kb-card__live[data-v-0b8fc27c]{border-top:1px dashed var(--border-color-light);min-width:0;margin-top:8px;padding-top:8px}.kb-card__live-meta[data-v-0b8fc27c]{font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:8px;margin:0;display:flex}.kb-card__live-agent[data-v-0b8fc27c],.kb-card__quote-agent[data-v-0b8fc27c],.kb-table__agent[data-v-0b8fc27c]{color:var(--text-meta);flex:none;align-items:center;font-size:12px;display:inline-flex}.kb-card__live-agent[data-v-0b8fc27c],.kb-table__agent[data-v-0b8fc27c]{margin-right:4px}.kb-card__reply-text[data-v-0b8fc27c]{flex:auto;min-width:0;margin-left:4px}.kb-card__live-silent[data-v-0b8fc27c]{color:var(--color-warning-dark)}.kb-card__live-line[data-v-0b8fc27c]{font-size:var(--font-size-xs);color:var(--text-meta);-webkit-line-clamp:2;line-clamp:2;word-break:break-word;-webkit-box-orient:vertical;margin:4px 0 0;line-height:1.5;display:-webkit-box;overflow:hidden}.kb-card__live-line.is-tool[data-v-0b8fc27c]{-webkit-line-clamp:1;line-clamp:1}.kb-card__live-line.is-thought[data-v-0b8fc27c]{color:var(--text-secondary);padding-left:8px}.kb-card__live-tag[data-v-0b8fc27c]{color:var(--text-meta);margin-right:4px}.kb-card__reply[data-v-0b8fc27c]{border-top:1px dashed var(--border-color-light);border-left:2px solid var(--border-color-light);font-size:var(--font-size-xs);color:var(--text-secondary);word-break:break-word;align-items:flex-start;margin:6px 0 0;padding:6px 0 0;line-height:1.5;display:flex}.kb-card__reply-text[data-v-0b8fc27c]{-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.kb-card__actions[data-v-0b8fc27c]{opacity:0;pointer-events:none;transition:opacity var(--transition-fast) var(--ease-custom);align-items:center;gap:2px;padding-left:12px;display:inline-flex;position:absolute;bottom:6px;right:8px}.kb-card:hover .kb-card__actions[data-v-0b8fc27c],.kb-card:focus-visible .kb-card__actions[data-v-0b8fc27c]{opacity:1;pointer-events:auto}.kb-card:has(:focus-visible) .kb-card__actions[data-v-0b8fc27c]{opacity:1;pointer-events:auto}.kb-card:hover .kb-card__live[data-v-0b8fc27c]>:last-child,.kb-card:focus-visible .kb-card__live[data-v-0b8fc27c]>:last-child,.kb-card:hover .kb-card__reply[data-v-0b8fc27c],.kb-card:focus-visible .kb-card__reply[data-v-0b8fc27c]{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);-webkit-mask-composite:source-over;-webkit-mask-composite:source-over;mask-composite:add}.kb-card:has(:focus-visible) .kb-card__live[data-v-0b8fc27c]>:last-child{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);-webkit-mask-composite:source-over;-webkit-mask-composite:source-over;mask-composite:add}.kb-card:has(:focus-visible) .kb-card__reply[data-v-0b8fc27c]{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);mask-image:linear-gradient(to right, #000 calc(100% - 118px), transparent calc(100% - 102px)), var(--kb-mask-outside-band);-webkit-mask-composite:source-over;-webkit-mask-composite:source-over;mask-composite:add}.kb-card:hover .kb-card__row1:not(:has(~:not(.kb-card__actions))) .kb-card__title[data-v-0b8fc27c]{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);-webkit-mask-composite:source-over;-webkit-mask-composite:source-over;mask-composite:add}.kb-card:focus-visible .kb-card__row1:not(:has(~:not(.kb-card__actions))) .kb-card__title[data-v-0b8fc27c]{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);-webkit-mask-composite:source-over;-webkit-mask-composite:source-over;mask-composite:add}.kb-card:has(:focus-visible) .kb-card__row1:not(:has(~:not(.kb-card__actions))) .kb-card__title[data-v-0b8fc27c]{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);mask-image:linear-gradient(to right, #000 calc(100% - 68px), transparent calc(100% - 52px)), var(--kb-mask-outside-band);-webkit-mask-composite:source-over;-webkit-mask-composite:source-over;mask-composite:add}.kb-card__btn[data-v-0b8fc27c]{color:var(--text-meta);font-size:var(--font-size-xs);border-radius:var(--radius-base);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;padding:0 5px;line-height:18px}.kb-card__btn[data-v-0b8fc27c]:hover{color:var(--color-primary);background:var(--bg-subtle-hover)}.kb-card__btn--danger[data-v-0b8fc27c]{font-size:var(--font-size-base);padding:0 4px}.kb-card__btn--danger[data-v-0b8fc27c]:hover{color:var(--color-danger-light)}.kb-card__btn--stop[data-v-0b8fc27c]:hover{color:var(--color-warning-dark);background:var(--bg-subtle-hover)}.kb-card__btn--done[data-v-0b8fc27c]:hover{color:var(--color-success-dark);background:var(--bg-subtle-hover)}.kb-card__btn[data-v-0b8fc27c]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.kb-card__retry[data-v-0b8fc27c]{border:1px solid var(--role-error-edge);border-radius:var(--radius-pill);background:var(--surface-elevated);color:var(--role-error-ink);font-size:var(--font-size-xs);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom);margin-top:6px;padding:2px 10px;line-height:18px;display:inline-block}.kb-card__retry[data-v-0b8fc27c]:hover{background:var(--role-error-surface)}.kb-card__retry[data-v-0b8fc27c]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.kb-col__empty[data-v-0b8fc27c]{text-align:center;font-size:var(--font-size-xs);color:var(--text-meta);border:1px dashed var(--border-color-light);border-radius:var(--radius-lg);background:var(--bg-subtle);margin:0 2px;padding:18px 8px;list-style:none}.kb-col__add[data-v-0b8fc27c]{margin:0;padding:0;list-style:none}.kb-col__add-btn[data-v-0b8fc27c]{width:100%;font-size:var(--font-size-xs);color:var(--text-meta);border:1px dashed var(--border-color-medium);border-radius:var(--radius-lg);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;justify-content:center;align-items:center;gap:5px;padding:5px 10px;line-height:20px;display:flex}.kb-col__add-btn[data-v-0b8fc27c]:hover{color:var(--color-primary);border-color:var(--color-primary);background:var(--bg-subtle)}.kb-col__add-btn[data-v-0b8fc27c]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.kb-col__add-plus[data-v-0b8fc27c]{font-size:var(--font-size-base);line-height:1}.kb-col__add-btn--solo[data-v-0b8fc27c]{padding:18px 8px}.kb__table-wrap[data-v-0b8fc27c]{flex:auto;min-height:0;overflow:auto}.kb-table[data-v-0b8fc27c]{table-layout:fixed;border-collapse:collapse;width:100%;font-size:var(--font-size-sm)}.kb-table__th[data-v-0b8fc27c]{z-index:1;text-align:left;font-size:var(--font-size-xs);color:var(--text-meta);background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-filter);border-bottom:1px solid var(--border-color);white-space:nowrap;padding:7px 10px;font-weight:500;position:sticky;top:0}.kb-table__th--narrow[data-v-0b8fc27c]{width:96px}.kb-table__th--time[data-v-0b8fc27c]{width:148px}.kb-table__row[data-v-0b8fc27c]{cursor:pointer;transition:background var(--transition-fast) var(--ease-custom)}.kb-table__row[data-v-0b8fc27c]:hover{background:var(--bg-container-hover)}.kb-table__td[data-v-0b8fc27c]{border-bottom:1px solid var(--border-color);color:var(--text-secondary);vertical-align:middle;padding:8px 10px}.kb-table__td--num[data-v-0b8fc27c]{font-variant-numeric:tabular-nums}.kb-table__time[data-v-0b8fc27c]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.kb-table__dur[data-v-0b8fc27c]{color:var(--text-primary)}.kb-table__time-sep[data-v-0b8fc27c]{opacity:.55;margin:0 3px}.kb-table__name[data-v-0b8fc27c]{color:var(--text-primary)}.kb-table__shots[data-v-0b8fc27c]{color:var(--text-secondary);font-family:inherit;font-size:var(--font-size-xs);cursor:zoom-in;background:0 0;border:none;margin-right:6px;padding:0}.kb-table__shots[data-v-0b8fc27c]:hover{color:var(--color-primary)}.kb-table__shots[data-v-0b8fc27c]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.kb-table__live[data-v-0b8fc27c]{font-size:var(--font-size-xs);color:var(--text-meta);white-space:nowrap;text-overflow:ellipsis;margin-top:2px;display:block;overflow:hidden}.kb-table__live-silent[data-v-0b8fc27c]{color:var(--color-warning-dark);margin-left:6px}.kb-table__live--reply[data-v-0b8fc27c]{color:var(--text-secondary);padding-left:8px}.kb-table__status[data-v-0b8fc27c]{font-size:var(--font-size-xs);border-radius:var(--radius-base);background:var(--bg-subtle);color:var(--text-secondary);padding:1px 6px}.kb-table__status.is-doing[data-v-0b8fc27c]{color:var(--color-warning-dark)}.kb-table__status.is-done[data-v-0b8fc27c]{color:var(--color-success-dark)}.kb-table__empty[data-v-0b8fc27c]{text-align:center;color:var(--text-meta);padding:28px 10px}@media (width<=860px){.kb__columns[data-v-0b8fc27c]{display:block;overflow-y:auto}.kb-col[data-v-0b8fc27c]{border-left:none;border-top:1px solid var(--border-color)}.kb-col[data-v-0b8fc27c]:first-child{border-top:none}.kb-col__list[data-v-0b8fc27c]{overflow:visible}.kb-col.is-collapsed[data-v-0b8fc27c]{border-top-color:#0000;height:0}}.tep[data-v-7674ee77]{vertical-align:middle}.tep__btn[data-v-7674ee77]{border:1px solid var(--border-color);border-radius:var(--radius-pill);background:var(--bg-panel);height:22px;color:var(--text-secondary);font-size:var(--font-size-xs);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom);align-items:center;gap:5px;padding:0 8px;display:inline-flex}.tep__btn[data-v-7674ee77]:hover,.tep__btn[data-v-7674ee77]:focus-visible{color:var(--color-primary);border-color:var(--color-primary)}.tep__btn[data-v-7674ee77]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.tep__btn-icon[data-v-7674ee77]{font-size:var(--font-size-mid)}.tep__btn-caret[data-v-7674ee77]{font-size:var(--font-size-xs);opacity:.7}.tep__item[data-v-7674ee77]{align-items:center;gap:8px;min-width:132px;display:inline-flex}.tep__item-icon[data-v-7674ee77]{font-size:var(--font-size-base);flex:none}.tep__item-name[data-v-7674ee77]{flex:1}.tep__item-model[data-v-7674ee77]{white-space:nowrap;text-overflow:ellipsis;max-width:15em;font-size:var(--font-size-xs);color:var(--text-meta);flex:none;overflow:hidden}.tep__item-check[data-v-7674ee77]{color:var(--color-primary);font-size:var(--font-size-sm)}.tep__item-missing[data-v-7674ee77]{font-size:var(--font-size-xs);color:var(--text-meta,var(--text-secondary))}.acs[data-v-9e75d420]{flex-direction:column;flex:1;min-height:0;display:flex}.acs__head[data-v-9e75d420]{border-bottom:1px solid var(--border-color-light);flex:none;align-items:center;gap:6px;height:32px;padding:0 8px;display:flex}.acs__title[data-v-9e75d420]{font-size:var(--font-size-xs);letter-spacing:.06em;color:var(--text-meta);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:700;overflow:hidden}.acs__spacer[data-v-9e75d420]{flex:1}.acs__engine[data-v-9e75d420]{flex:none}.acs__icon-btn[data-v-9e75d420]{border-radius:var(--radius-xs);width:22px;height:22px;color:var(--text-meta);cursor:pointer;transition:var(--transition-ui-fast);background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.acs__icon-btn[data-v-9e75d420]:hover{background:var(--bg-hover);color:var(--text-secondary)}.acs__body[data-v-9e75d420]{flex:1;grid-template:"stage"minmax(0,1fr)"composer"/minmax(0,1fr);min-height:0;display:grid}.acs__body.is-wide[data-v-9e75d420]{grid-template-columns:240px minmax(0,1fr);grid-template-areas:"list chat""list composer"}.acs__convs[data-v-9e75d420]{grid-area:stage;min-height:0;padding:8px;overflow-y:auto}.acs__chat[data-v-9e75d420]{grid-area:stage;min-height:0;display:flex}.acs__body.is-wide .acs__convs[data-v-9e75d420]{grid-area:list}.acs__body.is-wide .acs__chat[data-v-9e75d420]{grid-area:chat}.acs__composer[data-v-9e75d420]{padding:var(--acu-space-3) var(--acu-space-4) var(--acu-space-4);background:linear-gradient(to top, var(--acu-bg) 70%, transparent);grid-area:composer}.acs__chat[data-v-9e75d420]>.acu-chat{flex:1;min-width:0}.acs__chat[data-v-9e75d420] .acu-avatar--left{background:0 0}.acs__foot[data-v-9e75d420]{border-top:1px solid var(--border-color-light);flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.acs__foot-label[data-v-9e75d420]{font-size:var(--font-size-xs);color:var(--text-meta)}.acs__foot-hint[data-v-9e75d420]{font-size:var(--font-size-xs);color:var(--text-meta);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.acs__notice[data-v-9e75d420]{font-size:var(--font-size-xs);color:var(--color-warning-dark);margin:0;line-height:1.5}.oc[data-v-4c030231]{width:var(--wb-right-w,300px);border-left:1px solid var(--border-color-light);background:var(--bg-panel);min-height:0;transition:width var(--transition-base) var(--ease-custom);flex-direction:column;flex-shrink:0;display:flex}.board__cols.is-resizing .oc[data-v-4c030231]{transition:none}.oc.is-collapsed[data-v-4c030231]{width:32px}.oc__rail[data-v-4c030231]{width:100%;min-height:0;color:var(--text-meta);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-direction:column;flex:auto;align-items:center;gap:8px;padding:10px 0;display:flex}.oc__rail[data-v-4c030231]:hover{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 8%, transparent)}.oc__rail[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:-2px}.oc__rail-icon[data-v-4c030231]{font-size:var(--font-size-base);flex-shrink:0}.oc__rail-live[data-v-4c030231]{background:var(--color-success);width:6px;height:6px;box-shadow:var(--dot-glow-success);border-radius:50%;flex-shrink:0;animation:1.6s ease-in-out infinite oc-pulse-4c030231}.oc__rail-live.is-off[data-v-4c030231]{background:var(--color-warning);box-shadow:var(--dot-glow-warning);animation:none}.oc__rail-text[data-v-4c030231]{writing-mode:vertical-rl;letter-spacing:1px;font-size:var(--font-size-sm);color:var(--text-secondary);-webkit-user-select:none;user-select:none}.oc__head[data-v-4c030231]{border-bottom:1px solid var(--border-color);flex-shrink:0;align-items:center;gap:8px;padding:10px 12px;display:flex}.oc__live[data-v-4c030231]{background:var(--color-success);width:6px;height:6px;box-shadow:var(--dot-glow-success);border-radius:50%;flex-shrink:0;animation:1.6s ease-in-out infinite oc-pulse-4c030231}.oc__live.is-off[data-v-4c030231]{background:var(--color-warning);box-shadow:var(--dot-glow-warning);animation:none}@keyframes oc-pulse-4c030231{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(1.35)}}.oc__title[data-v-4c030231]{font-size:var(--font-size-mid);letter-spacing:.01em;color:var(--text-primary);flex:1;min-width:0;margin:0;font-weight:600}.oc__toggle[data-v-4c030231]{border:1px solid var(--border-color);border-radius:var(--radius-pill);background:var(--surface-elevated);height:22px;color:var(--text-secondary);font-size:var(--font-size-xs);white-space:nowrap;cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);flex-shrink:0;align-items:center;padding:0 10px;font-family:inherit;font-weight:500;display:inline-flex}.oc__toggle[data-v-4c030231]:hover:not(:disabled),.oc__toggle.is-off[data-v-4c030231]{color:var(--role-active-ink);border-color:var(--role-active-edge);background:var(--role-active-surface)}.oc__toggle.is-off[data-v-4c030231]:hover:not(:disabled){border-color:var(--role-active-ink)}.oc__toggle[data-v-4c030231]:disabled{opacity:var(--disabled-opacity);cursor:default}.oc__toggle[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__collapse[data-v-4c030231]{width:22px;height:22px;color:var(--text-meta);border-radius:var(--radius-base);font-size:var(--font-size-mid);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.oc__collapse[data-v-4c030231]:hover{color:var(--color-primary)}.oc__collapse[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__state[data-v-4c030231]{font-size:var(--font-size-xs);color:var(--text-secondary);background:var(--bg-subtle);border-bottom:1px solid var(--border-color-light);flex-shrink:0;align-items:baseline;gap:8px;padding:9px 12px;display:flex}.oc__state.is-paused[data-v-4c030231]{color:var(--role-active-ink);background:var(--role-active-surface);border-bottom-color:var(--role-active-edge)}.oc__state-label[data-v-4c030231]{color:var(--text-meta)}.oc__state-value[data-v-4c030231]{font-size:var(--font-size-sm);color:var(--text-primary);margin-left:2px;font-weight:600}.oc__state.is-paused .oc__state-value[data-v-4c030231]{color:var(--role-active-ink)}.oc__state-meta[data-v-4c030231]{color:var(--text-meta);font-variant-numeric:tabular-nums;margin-left:auto}.oc__mode[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--bg-subtle);border:1px solid var(--border-color);flex-shrink:0;gap:2px;margin:8px 12px 0;padding:2px;display:flex}.oc__mode-btn[data-v-4c030231]{border-radius:var(--radius-pill);height:22px;color:var(--text-meta);font-size:var(--font-size-xs);cursor:pointer;transition:var(--transition-ui-fast);background:0 0;border:none;flex:1}.oc__mode-btn[data-v-4c030231]:hover{color:var(--text-secondary)}.oc__mode-btn.is-active[data-v-4c030231]{background:color-mix(in srgb, var(--color-primary) 10%, var(--bg-panel));color:var(--color-primary-dark);box-shadow:var(--shadow-sm);font-weight:600}.oc__mode-btn[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__chat[data-v-4c030231]{min-height:0}.oc__report[data-v-4c030231]{flex-direction:column;flex:auto;min-height:0;padding:8px 0 0;display:flex}.oc__report.is-empty .oc__report-list[data-v-4c030231]{justify-content:center;align-items:center;display:flex}.oc.is-report-empty .oc__input[data-v-4c030231]{min-height:168px}.oc__panel-title[data-v-4c030231]{font-size:var(--font-size-sm);color:var(--text-secondary);flex-shrink:0;align-items:center;gap:6px;margin:0 12px 6px;font-weight:600;display:flex}.oc__report-head[data-v-4c030231]{flex-shrink:0;align-items:center;gap:6px;margin:0 12px 6px;display:flex}.oc__report-head .oc__panel-title[data-v-4c030231]{flex:1;min-width:0;margin:0}.oc__interval[data-v-4c030231]{max-width:116px;height:22px;font-size:var(--font-size-xs);color:var(--text-secondary);background:var(--surface-elevated);border:1px solid var(--border-color);border-radius:var(--radius-pill);cursor:pointer;transition:border-color var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);outline:none;flex-shrink:0;padding:0 2px 0 6px;font-family:inherit}.oc__interval[data-v-4c030231]:hover{color:var(--text-primary);border-color:var(--border-color)}.oc__interval[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__report-run[data-v-4c030231]{border:1px solid var(--border-color);border-radius:var(--radius-pill);background:var(--surface-elevated);height:22px;color:var(--text-secondary);font-size:var(--font-size-xs);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom);flex-shrink:0;align-items:center;gap:3px;padding:0 8px;font-family:inherit;display:inline-flex}.oc__report-run[data-v-4c030231]:hover:not(:disabled){color:var(--color-primary);border-color:var(--color-primary)}.oc__report-run[data-v-4c030231]:disabled{opacity:var(--disabled-opacity);cursor:default}.oc__report-run[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__report-run-icon[data-v-4c030231]{font-size:var(--font-size-xs)}.oc__report-run-icon.is-spin[data-v-4c030231]{animation:1s linear infinite oc-spin-4c030231}@keyframes oc-spin-4c030231{to{transform:rotate(360deg)}}.oc__report-list[data-v-4c030231]{flex:auto;min-height:0;margin:0;padding:0 12px 12px;list-style:none;overflow-y:auto}.rp[data-v-4c030231]{border-radius:var(--radius-lg);background:var(--surface-elevated);border:1px solid var(--border-color);border-top:2px solid var(--role-active-bar);box-shadow:var(--shadow-sm);padding:10px 11px}.rp__head[data-v-4c030231]{font-size:var(--font-size-xs);align-items:center;gap:6px;margin-bottom:6px;display:flex}.rp__trigger[data-v-4c030231]{color:var(--color-primary);font-weight:500}.rp__trigger.is-auto[data-v-4c030231]{color:var(--text-meta);font-weight:400}.rp__stale[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--bg-active);color:var(--text-meta);padding:0 5px}.rp__count[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--tint-primary-08);color:var(--color-primary);font-variant-numeric:tabular-nums;padding:0 5px}.rp__time[data-v-4c030231]{color:var(--text-meta);font-variant-numeric:tabular-nums;margin-left:auto}.rp__progress[data-v-4c030231]{align-items:center;gap:6px;margin:0 0 6px;display:flex}.rp__bar[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--bg-active);flex:1;min-width:0;height:4px;overflow:hidden}.rp__bar-fill[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--role-active-bar);height:100%;transition:width var(--transition-base) var(--ease-custom);display:block}.rp__percent[data-v-4c030231]{font-size:var(--font-size-xs);color:var(--text-secondary);font-variant-numeric:tabular-nums;flex-shrink:0}.rp__percent-tag[data-v-4c030231]{color:var(--text-meta);margin-right:4px}.rp__body[data-v-4c030231]{padding-left:10px}.rp__text[data-v-4c030231]{font-size:var(--font-size-mid);color:var(--text-primary);word-break:break-word;white-space:pre-wrap;max-height:9.6em;margin:0;line-height:1.6;overflow:hidden}.rp__text.is-expanded[data-v-4c030231]{max-height:none}.rp__text.is-clamped[data-v-4c030231]{-webkit-mask-image:linear-gradient(#000 calc(100% - 1.8em),#0000);mask-image:linear-gradient(#000 calc(100% - 1.8em),#0000)}.rp__more[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--tint-primary-08);color:var(--color-primary);font-size:var(--font-size-xs);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);border:none;align-items:center;gap:2px;margin:6px 0 0;padding:2px 9px;font-family:inherit;font-weight:500;display:inline-flex}.rp__more[data-v-4c030231]:hover{color:var(--color-primary-dark);background:color-mix(in srgb, var(--color-primary) 14%, transparent)}.rp__more[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:2px}.rp__notice[data-v-4c030231]{font-size:var(--font-size-xs);color:var(--text-meta);margin:0;line-height:1.55}.rp__facts[data-v-4c030231]{border-top:1px solid var(--border-color);margin:9px 0 0;padding-top:7px}.rp__facts-cap[data-v-4c030231]{font-size:var(--font-size-xs);color:var(--text-meta);letter-spacing:.04em;cursor:help;margin:0 0 5px;font-weight:500}.rp__tasks[data-v-4c030231]{flex-direction:column;gap:5px;margin:0;padding:0;list-style:none;display:flex}.rpt[data-v-4c030231]{border-radius:var(--radius-md);background:var(--bg-panel);border:1px solid var(--border-color-light);min-width:0;padding:7px 9px}.rpt.is-silent[data-v-4c030231]{border-color:var(--role-active-edge);background:var(--role-active-surface)}.rpt__title[data-v-4c030231]{font-size:var(--font-size-sm);color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;margin:0;font-weight:600;overflow:hidden}.rpt__meta[data-v-4c030231]{font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:2px 6px;margin:1px 0 0;display:flex}.rpt__meta>span+span[data-v-4c030231]:before{content:"·";color:var(--text-meta);margin-right:6px}.rpt__project[data-v-4c030231]{color:var(--text-secondary)}.rpt__progress[data-v-4c030231]{align-items:center;gap:6px;margin:3px 0 0;display:flex}.rpt__bar[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--bg-active);flex:1;min-width:0;height:3px;overflow:hidden}.rpt__bar-fill[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--role-active-bar);height:100%;transition:width var(--transition-base) var(--ease-custom);display:block}.rpt__percent[data-v-4c030231]{text-align:right;min-width:30px;font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums;flex-shrink:0}.rpt__silent[data-v-4c030231]{border-radius:var(--radius-pill);background:var(--tint-warning-14);color:var(--role-active-ink);padding:0 4px;font-weight:600}.rpt__line[data-v-4c030231]{font-size:var(--font-size-xs);color:var(--text-meta);-webkit-line-clamp:2;line-clamp:2;word-break:break-word;-webkit-box-orient:vertical;margin:3px 0 0;line-height:1.5;display:-webkit-box;overflow:hidden}.rpt__line.is-tool[data-v-4c030231]{-webkit-line-clamp:1;line-clamp:1}.rpt__line.is-thought[data-v-4c030231]{color:var(--text-secondary)}.rpt__tag[data-v-4c030231]{min-width:20px;color:var(--text-meta);margin-right:5px;font-weight:500;display:inline-block}.oc__sect[data-v-4c030231]{border-radius:var(--radius-base);width:100%;color:var(--text-meta);font-size:var(--font-size-xs);text-align:left;cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;align-items:center;gap:5px;margin:0 0 4px;padding:4px 6px;font-family:inherit;display:flex}.oc__sect[data-v-4c030231]:hover{color:var(--text-secondary);background:var(--bg-subtle)}.oc__sect[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:-2px}.oc__sect-caret[data-v-4c030231]{font-size:var(--font-size-sm);flex-shrink:0}.oc__sect-title[data-v-4c030231]{color:var(--text-secondary);flex-shrink:0;font-weight:500}.oc__sect-meta[data-v-4c030231]{align-items:center;gap:6px;min-width:0;margin-left:auto;display:flex}.oc__sect-meta .oc__git-name[data-v-4c030231]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.oc__sect-brief[data-v-4c030231]{color:var(--text-meta);font-variant-numeric:tabular-nums;flex-shrink:0}.oc__history[data-v-4c030231]{border-top:1px solid var(--border-color);flex-shrink:0;max-height:132px;padding:6px 12px 8px;overflow-y:auto}.oc__history-list[data-v-4c030231]{margin:0;padding:0;list-style:none}.oc__history-item[data-v-4c030231]{border-radius:var(--radius-base);width:100%;color:var(--text-meta);font-size:var(--font-size-xs);text-align:left;cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;align-items:center;gap:6px;padding:3px 6px;font-family:inherit;display:flex}.oc__history-item[data-v-4c030231]:hover{background:var(--bg-subtle);color:var(--text-secondary)}.oc__history-item.is-active[data-v-4c030231]{background:color-mix(in srgb, var(--color-primary) 10%, transparent);color:var(--text-primary)}.oc__history-item[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:-2px}.oc__history-time[data-v-4c030231]{font-variant-numeric:tabular-nums;flex-shrink:0}.oc__history-pct[data-v-4c030231]{text-align:right;min-width:30px;color:var(--text-secondary);font-variant-numeric:tabular-nums;flex-shrink:0}.oc__history-sum[data-v-4c030231]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.oc-empty[data-v-4c030231]{text-align:center;max-width:260px;font-size:var(--font-size-xs);color:var(--text-meta);border:1px dashed var(--border-color-light);border-radius:var(--radius-lg);background:var(--bg-subtle);margin:0 auto;padding:18px 10px;list-style:none}.oc__git[data-v-4c030231]{border-top:1px solid var(--border-color);flex-shrink:0;padding:8px 12px 10px}.oc__git-name[data-v-4c030231]{color:var(--text-secondary);font-weight:500}.oc__git-list[data-v-4c030231]{font-size:var(--font-size-xs);grid-template-columns:auto 1fr;gap:4px 10px;margin:0;display:grid}.oc__git-label[data-v-4c030231]{color:var(--text-meta)}.oc__git-value[data-v-4c030231]{text-align:right;color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.oc__git-value.is-warn[data-v-4c030231]{color:var(--color-warning-dark)}.oc__git-value.is-danger[data-v-4c030231]{color:var(--color-danger-light)}.oc__git.is-collapsed[data-v-4c030231],.oc__history.is-collapsed[data-v-4c030231]{padding-top:4px;padding-bottom:4px}.oc__history.is-collapsed[data-v-4c030231]{max-height:none;overflow:visible}.oc__git.is-collapsed .oc__sect[data-v-4c030231],.oc__history.is-collapsed .oc__sect[data-v-4c030231]{margin-bottom:0}.oc__compose[data-v-4c030231]{border-top:1px solid var(--border-color);flex-shrink:0;padding:8px 12px 10px}.oc__input[data-v-4c030231]{resize:vertical;width:100%;min-height:76px;max-height:min(380px,45vh);font-size:var(--font-size-mid);color:var(--text-primary);background:var(--input-bg);border:1px solid var(--border-color);border-radius:var(--radius-lg);transition:border-color var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom);outline:none;padding:9px 10px;font-family:inherit;line-height:1.5}.oc__input[data-v-4c030231]:focus{border-color:var(--input-border-focus);box-shadow:var(--input-shadow-focus)}.oc__input[data-v-4c030231]::placeholder{color:var(--text-meta)}.oc__input.is-over[data-v-4c030231]{border-color:var(--color-danger);box-shadow:0 0 0 1px var(--color-danger)}.oc__count[data-v-4c030231]{text-align:right;font-size:var(--font-size-xs);font-variant-numeric:tabular-nums;color:var(--text-meta);margin:5px 2px 0}.oc__count.is-warn[data-v-4c030231]{color:var(--color-warning-dark)}.oc__count.is-over[data-v-4c030231]{color:var(--color-danger-dark)}.oc__compose-foot[data-v-4c030231]{flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:6px;display:flex}.oc__attach[data-v-4c030231]{width:26px;height:26px;color:var(--text-meta);font-size:var(--font-size-base);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.oc__attach[data-v-4c030231]:hover:not(:disabled),.oc__attach.is-on[data-v-4c030231]{color:var(--color-primary)}.oc__attach[data-v-4c030231]:disabled{opacity:var(--disabled-opacity);cursor:default}.oc__attach[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__autorn[data-v-4c030231]{font-size:var(--font-size-xs);color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;display:inline-flex}.oc__autorn input[data-v-4c030231]{cursor:pointer;accent-color:var(--color-primary)}.oc__send[data-v-4c030231]{border-radius:var(--radius-md);background:var(--gradient-accent);box-shadow:var(--btn-shadow);color:#fff;font-size:var(--font-size-sm);cursor:pointer;transition:box-shadow var(--transition-fast) var(--ease-custom), opacity var(--transition-fast) var(--ease-custom);border:none;align-items:center;gap:4px;margin-left:auto;padding:0 14px;font-weight:500;line-height:28px;display:inline-flex}.oc__send[data-v-4c030231]:hover:not(:disabled){background:var(--gradient-accent-hover);box-shadow:var(--btn-shadow-hover)}.oc__send[data-v-4c030231]:disabled{opacity:var(--disabled-opacity);cursor:default}.oc__send[data-v-4c030231]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__send-icon[data-v-4c030231]{font-size:var(--font-size-sm)}.oc__hint[data-v-4c030231]{font-size:var(--font-size-xs);color:var(--text-meta);margin:6px 0 0;line-height:1.5}@media (width<=860px){.oc[data-v-4c030231]{border-left:none;border-top:1px solid var(--border-color);order:-1;min-height:72vh}.oc__collapse[data-v-4c030231]{display:none}.rp__text[data-v-4c030231]{max-height:none}.oc__report-list[data-v-4c030231]{overflow:visible}}.pd[data-v-766f470f]{flex-direction:column;gap:14px;line-height:1.5;display:flex}.pd__intro[data-v-766f470f]{font-size:var(--font-size-sm);color:var(--text-meta);margin:0;line-height:1.6}.pd__field[data-v-766f470f]{flex-direction:column;gap:5px;display:flex}.pd__head[data-v-766f470f]{align-items:baseline;gap:8px;display:flex}.pd__label[data-v-766f470f]{font-size:var(--font-size-sm);color:var(--text-secondary);font-weight:500}.pd__count[data-v-766f470f]{font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums;margin-left:auto}.pd__area[data-v-766f470f]{box-sizing:border-box;resize:vertical;width:100%;min-height:92px;max-height:280px;font-size:var(--font-size-mid);color:var(--text-primary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:border-color var(--transition-fast) var(--ease-custom);outline:none;padding:7px 9px;font-family:inherit;line-height:1.5}.pd__area[data-v-766f470f]:focus{border-color:var(--color-primary)}.pd__area[data-v-766f470f]::placeholder{color:var(--text-meta)}.pd__area[data-v-766f470f]:disabled{opacity:var(--disabled-opacity);cursor:not-allowed}.pd__hint[data-v-766f470f]{font-size:var(--font-size-xs);color:var(--text-meta);margin:0;line-height:1.6}.pd__foot[data-v-766f470f]{align-items:center;gap:8px;width:100%;display:flex}.pd__foot-spacer[data-v-766f470f]{flex:1}.pd__btn[data-v-766f470f]{color:var(--text-secondary);font-size:var(--font-size-sm);border-radius:var(--radius-md);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;padding:0 12px;line-height:28px}.pd__btn[data-v-766f470f]:hover:not(:disabled){color:var(--color-primary);background:var(--bg-container-hover)}.pd__btn[data-v-766f470f]:disabled{opacity:var(--disabled-opacity);cursor:default}.pd__btn[data-v-766f470f]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.pd__btn--primary[data-v-766f470f]{background:var(--color-primary);color:#fff}.pd__btn--primary[data-v-766f470f]:hover:not(:disabled){background:var(--color-primary);color:#fff;opacity:.88}.nc[data-v-c60e660a]{flex-direction:column;gap:14px;line-height:1.5;display:flex}.nc__field[data-v-c60e660a]{flex-direction:column;gap:5px;display:flex}.nc__label[data-v-c60e660a]{font-size:var(--font-size-sm);color:var(--text-secondary);font-weight:500}.nc__input[data-v-c60e660a],.nc__select[data-v-c60e660a]{width:100%;font-size:var(--font-size-mid);color:var(--text-primary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:border-color var(--transition-fast) var(--ease-custom);box-sizing:border-box;outline:none;padding:7px 9px;font-family:inherit;line-height:1.5}.nc__input[data-v-c60e660a]:focus,.nc__select[data-v-c60e660a]:focus{border-color:var(--color-primary)}.nc__input[data-v-c60e660a]::placeholder{color:var(--text-meta)}.nc__select[data-v-c60e660a]{cursor:pointer}.nc__input--area[data-v-c60e660a]{resize:vertical;min-height:92px;max-height:260px}.nc__hint[data-v-c60e660a]{font-size:var(--font-size-xs);color:var(--text-meta);white-space:nowrap;text-overflow:ellipsis;margin:0;overflow:hidden}.nc__error[data-v-c60e660a]{font-size:var(--font-size-sm);border-radius:var(--radius-md);color:var(--color-danger-light);background:color-mix(in srgb, var(--color-danger) 10%, transparent);margin:0;padding:6px 8px}.nc__foot[data-v-c60e660a]{align-items:center;gap:8px;width:100%;display:flex}.nc__foot-spacer[data-v-c60e660a]{flex:1}.nc__btn[data-v-c60e660a]{color:var(--text-secondary);font-size:var(--font-size-sm);border-radius:var(--radius-md);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;padding:0 12px;line-height:28px}.nc__btn[data-v-c60e660a]:hover:not(:disabled){color:var(--color-primary);background:var(--bg-container-hover)}.nc__btn[data-v-c60e660a]:disabled{opacity:var(--disabled-opacity);cursor:default}.nc__btn[data-v-c60e660a]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.nc__btn--primary[data-v-c60e660a]{background:var(--color-primary);color:#fff}.nc__btn--primary[data-v-c60e660a]:hover:not(:disabled){background:var(--color-primary);color:#fff;opacity:.88}.board[data-v-dd2dc7b4]{background:var(--bg-container);height:100%;min-height:0;color:var(--text-primary);--wb-left-w:264px;--wb-right-w:360px;flex-direction:column;display:flex}.board__top[data-v-dd2dc7b4]{border-bottom:1px solid var(--border-color-light);background:var(--bg-panel);background-image:var(--gradient-accent-soft);flex-shrink:0;align-items:center;gap:16px;height:52px;padding:0 12px;display:flex}.board__brand[data-v-dd2dc7b4]{align-items:center;gap:8px;min-width:0;display:flex}.board__live[data-v-dd2dc7b4]{background:var(--color-success);width:8px;height:8px;box-shadow:var(--dot-glow-success);border-radius:50%;flex-shrink:0;animation:1.6s ease-in-out infinite board-pulse-dd2dc7b4}.board__live.is-off[data-v-dd2dc7b4]{background:var(--color-warning);box-shadow:var(--dot-glow-warning);animation:none}@keyframes board-pulse-dd2dc7b4{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(1.4)}}.board__brand-text[data-v-dd2dc7b4]{min-width:0}.board__title[data-v-dd2dc7b4]{font-size:var(--font-size-lg);letter-spacing:var(--letter-spacing-heading);color:var(--text-primary);margin:0;font-weight:600;line-height:1.3}.board__subtitle[data-v-dd2dc7b4]{font-size:var(--font-size-sm);color:var(--text-meta);margin:0;line-height:1.3}.board__stats[data-v-dd2dc7b4]{flex-wrap:wrap;align-items:center;gap:12px;min-width:0;margin-left:4px;display:flex}.board__stat[data-v-dd2dc7b4]{font-size:var(--font-size-xs);color:var(--text-meta);align-items:baseline;gap:4px;display:inline-flex}.board__stat-value[data-v-dd2dc7b4]{font-size:var(--font-size-mid);color:var(--text-primary);font-variant-numeric:tabular-nums;font-weight:500}.board__stat-value.is-live[data-v-dd2dc7b4]{color:var(--color-warning-dark)}.board__icon-btn[data-v-dd2dc7b4]{color:var(--text-meta);border-radius:var(--radius-md);cursor:pointer;width:26px;height:26px;font-size:var(--font-size-base);transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}.board__icon-btn[data-v-dd2dc7b4]:hover{color:var(--color-primary);background:var(--bg-subtle-hover)}.board__icon-btn[data-v-dd2dc7b4]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.board__scrim[data-v-dd2dc7b4]{display:none}.board__cols[data-v-dd2dc7b4]{flex:auto;min-height:0;display:flex;position:relative}.board__left[data-v-dd2dc7b4]{width:var(--wb-left-w);background:var(--bg-panel);flex-direction:column;flex-shrink:0;min-height:0;display:flex}.board__splitter[data-v-dd2dc7b4]{z-index:5;cursor:col-resize;touch-action:none;flex:0 0 5px;position:relative}.board__splitter[data-v-dd2dc7b4]:after{content:"";width:1px;transition:background var(--transition-fast) var(--ease-custom);background:0 0;position:absolute;top:0;bottom:0;left:2px}.board__splitter[data-v-dd2dc7b4]:hover:after,.board__splitter[data-v-dd2dc7b4]:active:after,.board__cols.is-resizing .board__splitter[data-v-dd2dc7b4]:after{background:var(--color-primary)}.board__main[data-v-dd2dc7b4]{background:var(--surface-canvas);flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}.board__main-head[data-v-dd2dc7b4]{flex-shrink:0;align-items:center;gap:8px;min-width:0;padding:8px 12px;display:flex}.board__main-title[data-v-dd2dc7b4]{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex}.board__project-name[data-v-dd2dc7b4]{font-size:var(--font-size-base);color:var(--text-primary);white-space:nowrap;flex-shrink:0;margin:0;font-weight:500}.board__project-path[data-v-dd2dc7b4]{font-size:var(--font-size-xs);color:var(--text-meta);white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.board__project-meta[data-v-dd2dc7b4]{font-size:var(--font-size-xs);color:var(--text-meta);font-variant-numeric:tabular-nums;flex-shrink:0}@media (width<=1440px){.board[data-v-dd2dc7b4]{--wb-left-w:224px;--wb-right-w:320px}}@media (width<=1180px){.board[data-v-dd2dc7b4]{--wb-left-w:200px;--wb-right-w:280px}}@media (width>=1025px){.board__left[data-v-dd2dc7b4]{transition:width var(--transition-base) var(--ease-custom)}.board__left.is-collapsed[data-v-dd2dc7b4]{width:0;overflow:hidden}.board__cols.is-resizing .board__left[data-v-dd2dc7b4]{transition:none}}@media (width<=1024px){.board__splitter--left[data-v-dd2dc7b4]{display:none}.board__left[data-v-dd2dc7b4]{z-index:20;width:min(var(--wb-left-w), 86vw);background:var(--bg-container);border-right:1px solid var(--border-color);box-shadow:var(--dialog-shadow);transition:transform var(--transition-base) var(--ease-custom);position:absolute;top:0;bottom:0;left:0}.board__left.is-collapsed[data-v-dd2dc7b4]{pointer-events:none;transform:translate(-100%)}.board__scrim.is-on[data-v-dd2dc7b4]{z-index:15;display:block;position:absolute;inset:0}}@media (width<=860px){.board[data-v-dd2dc7b4]{--wb-right-w:100%}.board__splitter--right[data-v-dd2dc7b4]{display:none}.board__cols[data-v-dd2dc7b4]{flex-direction:column;overflow-y:auto}.board__main[data-v-dd2dc7b4]{flex:none;min-height:72vh}.board__top[data-v-dd2dc7b4]{flex-wrap:wrap;gap:6px 12px;height:auto;padding:8px 12px}.board__stats[data-v-dd2dc7b4]{flex-basis:100%;order:3;gap:12px;margin-left:0}}.workbench[data-v-28f2e82b]{background:var(--bg-container);height:100%;color:var(--text-primary);flex-direction:column;display:flex}.wb-editor[data-v-28f2e82b]{flex-direction:column;flex:auto;min-height:0;line-height:1.5;display:flex}.wb-editor-bar[data-v-28f2e82b]{border-bottom:1px solid var(--border-color-light);background:var(--bg-panel);background-image:var(--gradient-accent-soft);flex-shrink:0;align-items:center;gap:8px;height:34px;padding:0 12px;display:flex}.wb-back-btn[data-v-28f2e82b]{color:var(--text-secondary);font-size:var(--font-size-sm);border-radius:var(--radius-md);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;align-items:center;gap:4px;padding:0 6px;line-height:22px;display:inline-flex}.wb-back-btn[data-v-28f2e82b]:hover{color:var(--color-primary)}.wb-back-btn[data-v-28f2e82b]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.wb-back-btn__icon[data-v-28f2e82b]{font-size:var(--font-size-mid)}.wb-editor-bar__project[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-weight:500;overflow:hidden}.wb-editor-bar__hint[data-v-28f2e82b]{font-size:var(--font-size-xs);color:var(--text-meta);flex-shrink:0;margin-left:auto}.wb-editor-bar__repo[data-v-28f2e82b]{text-overflow:ellipsis;white-space:nowrap;max-width:320px;font-size:var(--font-size-xs);border-radius:var(--radius-base);color:var(--color-warning-dark);background:color-mix(in srgb, var(--color-warning) 12%, transparent);font-variant-numeric:tabular-nums;flex-shrink:0;padding:0 6px;line-height:16px;overflow:hidden}.wb-task-desc[data-v-28f2e82b]{border-radius:var(--radius-md);background:var(--bg-subtle);flex-shrink:0;min-width:0;margin:0;padding:0;overflow:hidden}.wb-task-options[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-secondary);align-items:center;gap:12px;padding:8px 12px 0;display:flex}.wb-task-desc[open][data-v-28f2e82b]{background:var(--bg-container)}.wb-task-desc__summary[data-v-28f2e82b]{cursor:pointer;font-size:var(--font-size-sm);color:var(--text-secondary);-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:8px 0;list-style:none;display:flex}.wb-task-desc__summary[data-v-28f2e82b]::-webkit-details-marker{display:none}.wb-task-desc__summary[data-v-28f2e82b]:hover{background:var(--bg-container-hover)}.wb-task-desc__caret[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-meta);transition:transform var(--transition-fast)}.wb-task-desc__label[data-v-28f2e82b]{letter-spacing:.1px;font-weight:500}.wb-task-desc__tag[data-v-28f2e82b]{font-size:var(--font-size-xs);color:var(--color-primary);align-items:center;gap:5px;margin-left:auto;font-weight:600;display:inline-flex}.wb-task-desc__tag-attachment[data-v-28f2e82b]{border-radius:var(--radius-lg);background:var(--tint-primary-14);min-width:18px;height:16px;color:var(--color-primary);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;padding:0 5px;display:inline-flex}.wb-task-desc[open] .wb-task-desc__summary[data-v-28f2e82b]{margin-bottom:0}.wb-task-desc>.wb-textarea[data-v-28f2e82b],.wb-task-desc[data-v-28f2e82b]>.attachment-zone{margin:0 14px 0 0}.wb-task-desc>.wb-textarea[data-v-28f2e82b]{max-width:100%;margin-bottom:0}.wb-task-desc[data-v-28f2e82b]>.attachment-zone{margin-top:8px}.workbench__editor-row[data-v-28f2e82b]{flex:1;min-height:0;display:flex}.wb-splitter[data-v-28f2e82b]{cursor:col-resize;z-index:5;flex:0 0 5px;margin-right:-5px;position:relative}.wb-splitter[data-v-28f2e82b]:after{content:"";width:1px;transition:background var(--transition-fast) var(--ease-custom);background:0 0;position:absolute;top:0;bottom:0;left:2px}.wb-splitter[data-v-28f2e82b]:hover:after,.wb-splitter[data-v-28f2e82b]:active:after{background:var(--color-primary)}.wb-sidebar[data-v-28f2e82b]{background:var(--bg-panel);flex-direction:column;flex-shrink:0;gap:18px;width:268px;padding:14px 12px 18px;display:flex;overflow-y:auto}.wb-section[data-v-28f2e82b]{flex-direction:column;flex-shrink:0;gap:8px;min-height:0;display:flex}.wb-section+.wb-section[data-v-28f2e82b]{padding-top:16px}.wb-section__head[data-v-28f2e82b]{align-items:center;gap:6px;padding:0 4px;display:flex}.wb-section__tag[data-v-28f2e82b]{height:18px;font-size:var(--font-size-xs);letter-spacing:.4px;color:var(--text-meta);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-base);text-transform:uppercase;font-variant-numeric:tabular-nums;flex-shrink:0;align-items:center;padding:0 6px;font-weight:600;display:inline-flex}.wb-section__tag--accent[data-v-28f2e82b]{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 9%, transparent);border-color:var(--tint-primary-22)}.wb-section__title[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-secondary);letter-spacing:.2px;flex:1;min-width:0;margin:0;font-weight:600}.wb-section__action[data-v-28f2e82b]{color:var(--text-meta);border-radius:var(--radius-base);cursor:pointer;width:28px;height:28px;font-size:var(--font-size-mid);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;display:inline-flex}.wb-section__action[data-v-28f2e82b]:hover{background:var(--tint-primary-12);color:var(--color-primary)}.wb-new-btn[data-v-28f2e82b]{border:1px dashed var(--tint-primary-35,color-mix(in srgb, var(--color-primary) 35%, transparent));border-radius:var(--radius-md);background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 4%, transparent) 0%, color-mix(in srgb, var(--color-primary) 2%, transparent) 100%);width:100%;height:32px;color:var(--color-primary);font-size:var(--font-size-mid);letter-spacing:.05px;cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);align-items:center;gap:6px;padding:0 12px;font-weight:600;display:flex}.wb-new-btn__icon[data-v-28f2e82b]{font-size:var(--font-size-mid);transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0}.wb-new-btn__shortcut[data-v-28f2e82b]{display:none}.wb-new-btn[data-v-28f2e82b]:hover{background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 10%, transparent) 0%, color-mix(in srgb, var(--color-primary) 6%, transparent) 100%);color:var(--color-primary);border-style:solid;border-color:var(--tint-primary-50)}.wb-new-btn:hover .wb-new-btn__icon[data-v-28f2e82b]{transform:rotate(90deg)}.wb-new-btn[data-v-28f2e82b]:active{transform:scale(.99)}.wb-new-btn[data-v-28f2e82b]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.wb-task-list[data-v-28f2e82b],.wb-prompt-list[data-v-28f2e82b]{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.wb-task-item[data-v-28f2e82b]{border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom);background:0 0;border:none;align-items:center;gap:8px;padding:7px 10px;display:flex;position:relative}.wb-task-item[data-v-28f2e82b]:hover{background:var(--bg-container-hover);border-color:#0000;transform:translateY(-.5px)}.wb-task-item:hover .wb-task-item__del[data-v-28f2e82b]{opacity:1;transform:translate(0)}.wb-task-item.is-running[data-v-28f2e82b]{background:color-mix(in srgb, var(--color-warning) 8%, transparent)}.wb-task-item.is-running[data-v-28f2e82b]:hover{background:color-mix(in srgb, var(--color-warning) 14%, transparent);transform:none}.wb-task-item.active[data-v-28f2e82b]{background:color-mix(in srgb, var(--color-primary) 10%, var(--bg-container));box-shadow:0 1px 3px color-mix(in srgb, var(--color-primary) 12%, transparent), 0 0 0 1px color-mix(in srgb, var(--color-primary) 18%, transparent);border-color:#0000}.wb-task-item.active[data-v-28f2e82b]:after{content:"";border-radius:var(--radius-base);background:linear-gradient(180deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 70%, #fff) 100%);width:3px;box-shadow:0 0 8px color-mix(in srgb, var(--color-primary) 50%, transparent), 0 1px 3px color-mix(in srgb, var(--color-primary) 25%, transparent);position:absolute;top:5px;bottom:5px;left:-1px}.wb-task-item.active .wb-task-item__title[data-v-28f2e82b]{color:var(--color-primary)}.wb-task-item.active .wb-task-item__del[data-v-28f2e82b]{opacity:1;color:var(--color-primary)}.wb-task-item__running-dot[data-v-28f2e82b]{background:var(--color-warning);width:6px;height:6px;box-shadow:0 0 0 0 color-mix(in srgb, var(--color-warning) 60%, transparent);border-radius:50%;flex:none;margin-left:auto;animation:1.4s ease-in-out infinite wb-running-pulse-28f2e82b}@keyframes wb-running-pulse-28f2e82b{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-warning) 60%, transparent);opacity:1;transform:scale(1)}50%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-warning) 0%, transparent);opacity:.75;transform:scale(1.35)}}.wb-task-item__body[data-v-28f2e82b]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.wb-task-item__title[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;letter-spacing:-.05px;font-weight:500;line-height:1.3;overflow:hidden}.wb-task-item__meta[data-v-28f2e82b]{font-size:var(--font-size-xs);color:var(--text-meta);align-items:center;gap:5px;line-height:1;display:flex}.wb-task-item__meta-item[data-v-28f2e82b]{font-variant-numeric:tabular-nums;align-items:center;gap:3px;font-weight:500;display:inline-flex}.wb-task-item__meta-item--accent[data-v-28f2e82b]{color:var(--color-primary)}.wb-task-item__meta-item--project[data-v-28f2e82b]{border-radius:var(--radius-md);background:color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 14%, transparent);height:15px;color:color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 80%, var(--text-primary));font-size:var(--font-size-xs);letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;align-items:center;max-width:110px;padding:0 5px;font-weight:600;display:inline-flex;overflow:hidden}.wb-task-item.is-other-project[data-v-28f2e82b]{opacity:.78}.wb-task-item.is-other-project[data-v-28f2e82b]:hover{opacity:1}.wb-task-item__meta-icon[data-v-28f2e82b]{font-size:var(--font-size-xs);opacity:.85}.wb-task-item__num[data-v-28f2e82b]{min-width:14px;color:var(--text-secondary);transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);padding:0 4px}.wb-task-item.active .wb-task-item__num[data-v-28f2e82b]{color:var(--color-primary);background:var(--tint-primary-14)}.wb-task-item__meta-item--running .wb-task-item__num[data-v-28f2e82b]{color:color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 85%, var(--text-primary));background:color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 18%, transparent);font-weight:600}.wb-task-item.is-running .wb-task-item__meta-icon[data-v-28f2e82b]{color:color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 80%, var(--text-primary));animation:1.4s ease-in-out infinite wb-task-running-icon-28f2e82b}@keyframes wb-task-running-icon-28f2e82b{0%,to{opacity:.55}50%{opacity:1}}.wb-task-item__del[data-v-28f2e82b]{color:var(--text-meta);border-radius:var(--radius-md);cursor:pointer;width:22px;height:22px;font-size:var(--font-size-sm);opacity:0;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;display:inline-flex;transform:translate(-2px)}.wb-task-item__del[data-v-28f2e82b]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger-dark)}.wb-task-item__del[data-v-28f2e82b]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset);opacity:1}.wb-task-item__del[data-v-28f2e82b],.wb-prompt-item__del[data-v-28f2e82b]{font-size:var(--font-size-mid)}.wb-prompt-item[data-v-28f2e82b]{border-radius:var(--radius-md);font-size:var(--font-size-mid);color:var(--text-primary);transition:background var(--transition-fast) var(--ease-custom);align-items:center;gap:8px;padding:7px 8px;display:flex;position:relative}.wb-prompt-item[data-v-28f2e82b]:hover{background:var(--bg-container-hover)}.wb-prompt-item:hover .wb-prompt-item__del[data-v-28f2e82b]{opacity:1}.wb-prompt-item__icon[data-v-28f2e82b]{border-radius:var(--radius-base);background:var(--tint-primary-08);width:22px;height:22px;color:var(--color-primary);font-size:var(--font-size-sm);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.wb-prompt-item__name[data-v-28f2e82b]{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__tag[data-v-28f2e82b]{border-radius:var(--radius-xs);max-width:96px;font-size:var(--font-size-xs);letter-spacing:.1px;background:var(--tint-primary-08);color:var(--color-primary);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;padding:1px 6px;line-height:16px;overflow:hidden}.wb-prompt-item__tag--project[data-v-28f2e82b]{background:var(--bg-subtle);color:var(--text-secondary);border:1px solid var(--border-color-light)}.wb-prompt-item__del[data-v-28f2e82b]{color:var(--text-meta);border-radius:var(--radius-xs);cursor:pointer;width:20px;height:20px;font-size:var(--font-size-sm);opacity:0;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;display:inline-flex}.wb-prompt-item__del[data-v-28f2e82b]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger-dark)}.wb-prompt-item__del[data-v-28f2e82b]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset);opacity:1}.wb-split[data-v-28f2e82b]{flex-direction:column;flex:1;gap:10px;min-height:0;padding:12px 24px 14px;display:flex;overflow:hidden}.wb-placeholder[data-v-28f2e82b]{color:var(--text-meta);font-size:var(--font-size-mid);flex:1;justify-content:center;align-items:center;display:flex}.wb-execution-body[data-v-28f2e82b]{border:none;border-radius:0;flex:1;grid-template-columns:1fr;gap:16px;min-height:0;display:grid;overflow:hidden}.wb-exec-detail[data-v-28f2e82b]{background:0 0;flex-direction:column;gap:14px;min-width:0;min-height:0;padding:4px 4px 8px;display:flex;overflow:auto}.wb-split__header[data-v-28f2e82b]{flex-shrink:0;align-items:center;gap:10px;padding-bottom:4px;padding-right:8px;display:flex}.wb-split__title-wrap[data-v-28f2e82b]{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.wb-split__title-wrap .wb-input--title[data-v-28f2e82b]{flex:1;min-width:0}.wb-copy-btn[data-v-28f2e82b]{appearance:none;border-radius:var(--radius-lg);border:1px solid var(--border-color);background:var(--bg-container);width:28px;height:28px;color:var(--text-meta);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), transform var(--transition-fast) var(--ease-custom);flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.wb-copy-btn[data-v-28f2e82b]:hover:not(:disabled){background:var(--tint-primary-12);border-color:var(--tint-primary-35);color:var(--color-primary)}.wb-copy-btn[data-v-28f2e82b]:active:not(:disabled){transform:scale(.94)}.wb-copy-btn[data-v-28f2e82b]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.wb-copy-btn.is-flash[data-v-28f2e82b]{background:var(--tint-success-14,color-mix(in srgb, var(--color-success) 14%, transparent));border-color:var(--tint-success-35,color-mix(in srgb, var(--color-success) 35%, transparent));color:var(--color-success-dark)}.wb-copy-btn__icon[data-v-28f2e82b]{font-size:var(--font-size-mid);line-height:1}.wb-copy-btn__icon--check[data-v-28f2e82b]{font-size:var(--font-size-base);font-weight:800}.wb-copy-btn--inline[data-v-28f2e82b]{border-radius:var(--radius-md);width:22px;height:22px;margin-left:2px}.wb-copy-btn--inline .wb-copy-btn__icon[data-v-28f2e82b]{font-size:var(--font-size-xs)}@keyframes wb-ai-sparkle-pulse-28f2e82b{0%,to{opacity:.9;transform:scale(1)}50%{opacity:1;transform:scale(1.12)}}.wb-no-claude-hint[data-v-28f2e82b]{border:1px solid color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 32%, transparent);background:color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 8%, transparent);height:32px;color:color-mix(in srgb, var(--color-warning,var(--color-warning-light)) 75%, var(--text-primary));border-radius:var(--radius-md);font-size:var(--font-size-sm);white-space:nowrap;flex-shrink:0;align-items:center;gap:6px;padding:0 12px;font-weight:500;display:inline-flex}.wb-executor-split[data-v-28f2e82b]{flex-shrink:0}.wb-executor-split__hint[data-v-28f2e82b]{font-size:var(--font-size-xs);opacity:.85;border-left:1px solid #ffffff59;align-items:center;gap:4px;margin-left:6px;padding-left:8px;font-weight:400;display:inline-flex}.wb-executor-split__hint-icon[data-v-28f2e82b]{font-size:var(--font-size-sm)}.wb-executor-item[data-v-28f2e82b]{align-items:center;gap:8px;min-width:132px;display:inline-flex}.wb-executor-item__icon[data-v-28f2e82b]{font-size:var(--font-size-base);flex:none}.wb-executor-item__name[data-v-28f2e82b]{flex:1}.wb-executor-item__check[data-v-28f2e82b]{color:var(--el-color-primary)}.wb-executor-item__missing[data-v-28f2e82b]{font-size:var(--font-size-xs);color:var(--text-secondary,var(--el-text-color-secondary))}.wb-executor-item__model[data-v-28f2e82b]{white-space:nowrap;text-overflow:ellipsis;max-width:15em;font-size:var(--font-size-xs);color:var(--text-meta);flex:none;overflow:hidden}.wb-no-claude-hint__icon[data-v-28f2e82b]{font-size:var(--font-size-base);opacity:.9}.wb-no-claude-hint__text[data-v-28f2e82b]{letter-spacing:-.05px}.wb-no-claude-hint__link[data-v-28f2e82b]{color:var(--color-primary);border-bottom:1px dashed color-mix(in srgb, var(--color-primary) 45%, transparent);margin-left:2px;font-weight:600;text-decoration:none}.wb-no-claude-hint__link[data-v-28f2e82b]:hover{border-bottom-style:solid}.wb-logs-inline-btn[data-v-28f2e82b]{appearance:none;border:1px solid var(--border-color);background:var(--bg-container);height:32px;color:var(--text-secondary);border-radius:var(--radius-md);font-size:var(--font-size-mid);cursor:pointer;white-space:nowrap;transition:background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);flex-shrink:0;align-items:center;gap:5px;padding:0 12px;font-weight:500;display:inline-flex}.wb-logs-inline-btn[data-v-28f2e82b]:hover{background:var(--tint-primary-12);color:var(--color-primary);border-color:var(--tint-primary-35)}.wb-logs-inline-btn--danger[data-v-28f2e82b]{color:var(--text-secondary);border-color:var(--border-color);background:var(--bg-container)}.wb-logs-inline-btn--danger[data-v-28f2e82b]:hover{color:var(--color-danger,var(--color-danger-light));border-color:var(--tint-danger-50);background:var(--tint-danger-06)}.wb-logs-inline-btn--copy.is-flash[data-v-28f2e82b]{color:var(--color-success-dark,var(--color-success));border-color:var(--tint-success-35,color-mix(in srgb, var(--color-success) 35%, transparent));background:var(--tint-success-14,color-mix(in srgb, var(--color-success) 14%, transparent))}.wb-logs-inline-btn[data-v-28f2e82b]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.wb-logs-inline-btn__icon[data-v-28f2e82b]{font-size:var(--font-size-base)}.wb-input[data-v-28f2e82b],.wb-textarea[data-v-28f2e82b]{color:var(--text-primary);background:var(--bg-container);border:1px solid var(--border-color-medium);border-radius:var(--radius-md);box-shadow:var(--wb-card-inset-shadow);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}.wb-input[data-v-28f2e82b]::placeholder,.wb-textarea[data-v-28f2e82b]::placeholder{color:var(--text-placeholder);font-weight:400}.wb-input[data-v-28f2e82b]{height:36px;font-size:var(--font-size-base);letter-spacing:-.05px;padding:0 12px;line-height:1.2}.wb-input[data-v-28f2e82b]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background:var(--bg-container-hover)}.wb-input[data-v-28f2e82b]:focus{border-color:var(--color-primary);background:var(--bg-container);box-shadow:0 0 0 3px var(--tint-primary-18), var(--wb-card-inset-shadow)}.wb-input--title[data-v-28f2e82b]{height:36px;font-size:var(--font-size-base);letter-spacing:-.4px;border-color:var(--border-color);box-shadow:none;background:0 0;flex:1;padding:0 12px;font-weight:600}.wb-input--title[data-v-28f2e82b]:hover:not(:focus){border-color:var(--border-color-medium);background:var(--bg-container)}.wb-input--title[data-v-28f2e82b]:focus{border-color:var(--color-primary);background:var(--bg-container);box-shadow:0 0 0 3px var(--tint-primary-14)}.wb-input--title[data-v-28f2e82b]::placeholder{color:var(--text-placeholder);font-weight:500}.wb-textarea[data-v-28f2e82b]{font-size:var(--font-size-mid);letter-spacing:-.05px;resize:vertical;box-sizing:border-box;background:var(--bg-container);width:100%;min-height:52px;box-shadow:none;border-color:var(--border-color);flex-shrink:0;padding:10px 14px;line-height:1.55;display:block}.wb-textarea[data-v-28f2e82b]::placeholder{color:var(--text-placeholder);line-height:1.55}.wb-textarea[data-v-28f2e82b]:hover:not(:focus){border-color:var(--border-color-medium);background:var(--bg-container-hover)}.wb-textarea[data-v-28f2e82b]:focus{border-color:var(--color-primary);background:var(--bg-container-hover);box-shadow:0 0 0 3px var(--tint-primary-14)}.wb-textarea--focus-expand[data-v-28f2e82b]:focus{max-height:500px;transition:max-height var(--transition-base) var(--ease-custom)}.wb-textarea--autogrow[data-v-28f2e82b]{resize:none;min-height:52px;max-height:320px;transition:height var(--transition-fast) var(--ease-custom);overflow-y:hidden}.wb-split__sub-header[data-v-28f2e82b]{flex-shrink:0;justify-content:space-between;align-items:center;margin-top:8px;display:flex}.wb-split__sub-header h4[data-v-28f2e82b]{font-size:var(--font-size-mid);color:var(--text-secondary);margin:0;font-weight:600}.wb-simple__header[data-v-28f2e82b]{flex-shrink:0;align-items:baseline;gap:10px;margin-top:8px;padding-left:10px;display:flex}.wb-simple__header h4[data-v-28f2e82b]{font-size:var(--font-size-mid);color:var(--text-primary);letter-spacing:-.05px;margin:0;font-weight:600}.wb-simple__hint[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-meta)}.wb-simple__status-row[data-v-28f2e82b]{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;margin-top:2px;display:flex}.wb-simple__status[data-v-28f2e82b]{width:8px;height:8px;transition:background var(--transition-fast) var(--ease-custom);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;gap:5px;padding:0;display:inline-flex}.wb-simple__status--dot[data-v-28f2e82b]{border-radius:50%}.wb-simple__status-text[data-v-28f2e82b]{display:none}.wb-simple__meta[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-meta);letter-spacing:-.05px;text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.wb-simple__meta--error[data-v-28f2e82b]{color:var(--color-danger-dark)}.wb-simple__status[style*=--text-tertiary] .wb-simple__status-dot[data-v-28f2e82b]{background:var(--text-tertiary)}.wb-simple__stop[data-v-28f2e82b]{border-radius:var(--radius-base);border:1px solid var(--color-danger-bright);color:var(--color-danger-bright);font-size:var(--font-size-sm);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;margin-left:auto;padding:2px 10px;font-weight:600}.wb-simple__stop[data-v-28f2e82b]:hover:not(:disabled){background:var(--color-danger-bright);color:#fff}.wb-simple__stop[data-v-28f2e82b]:disabled{opacity:var(--disabled-opacity);cursor:not-allowed}.wb-task-prompt[data-v-28f2e82b]{border-radius:var(--radius-md)}.wb-task-prompt__summary[data-v-28f2e82b]{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:4px 0;list-style:none;display:flex}.wb-task-prompt__summary[data-v-28f2e82b]::-webkit-details-marker{display:none}.wb-task-prompt__caret[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-meta);transition:transform var(--transition-fast) var(--ease-custom)}.wb-task-prompt[open]>.wb-task-prompt__summary .wb-task-prompt__caret[data-v-28f2e82b]{color:var(--color-primary);transform:rotate(90deg)}.wb-task-prompt.has-content>.wb-task-prompt__summary[data-v-28f2e82b]{color:var(--text-primary)}.wb-task-prompt__tag[data-v-28f2e82b]{font-size:var(--font-size-xs);border-radius:var(--radius-lg);background:var(--tint-primary-12,color-mix(in srgb, var(--color-primary) 12%, transparent));color:var(--color-primary);letter-spacing:.2px;padding:1px 6px;font-weight:600}.wb-task-prompt__parts[data-v-28f2e82b]{flex-direction:column;gap:8px;margin-top:8px;display:flex}.wb-task-prompt__part[data-v-28f2e82b]{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-subtle);padding:6px 9px}.wb-task-prompt__label[data-v-28f2e82b]{font-size:var(--font-size-xs);color:var(--text-meta);margin-bottom:4px}.wb-task-prompt__text[data-v-28f2e82b]{max-height:220px;font-family:inherit;font-size:var(--font-size-mid);color:var(--text-primary);white-space:pre-wrap;word-break:break-word;margin:0;line-height:1.5;overflow:auto}.wb-task-prompt__empty[data-v-28f2e82b]{font-size:var(--font-size-xs);color:var(--text-meta);margin:8px 0 0}.wb-simple-chat-wrap[data-v-28f2e82b]{border:1px solid var(--border-color);border-radius:var(--radius-base);background:var(--bg-code);--acu-bg:var(--bg-code);flex-direction:column;flex:1;min-height:0;margin-top:6px;display:flex;overflow:hidden}.wb-simple-chat[data-v-28f2e82b]{flex-direction:column;flex:1;min-height:0;display:flex}.wb-simple-chat[data-v-28f2e82b] .acu-chat-footer{display:none}.wb-simple-chat[data-v-28f2e82b] .acu-chat,.wb-simple-chat[data-v-28f2e82b] .acu-message-list,.wb-simple-chat[data-v-28f2e82b] .acu-message-list-inner>*{background:0 0}.wb-simple-chat[data-v-28f2e82b] .acu-chat,.wb-simple-chat[data-v-28f2e82b] .acu-message-list{background:var(--bg-code)}.wb-simple-chat[data-v-28f2e82b] .acu-message-list-inner{gap:10px;max-width:100%;margin:0;padding:10px 8px 14px}.wb-simple-chat[data-v-28f2e82b] .acu-bubble-main{max-width:100%}.wb-simple-chat[data-v-28f2e82b] .acu-bubble{font-size:var(--font-size-sm);border-radius:var(--radius-lg)}.wb-simple-chat[data-v-28f2e82b] .acu-bubble-name{font-size:var(--font-size-xs)}.wb-simple-chat__footer[data-v-28f2e82b]{background:var(--bg-code);flex-shrink:0;padding:0 4px 4px}.wb-simple-chat__input[data-v-28f2e82b]{width:100%}.wb-form-item[data-v-28f2e82b]{flex-direction:column;flex-shrink:0;gap:6px;display:flex}.wb-form-item__label[data-v-28f2e82b]{font-size:var(--font-size-sm);color:var(--text-secondary);letter-spacing:-.05px;font-weight:500}.wb-sub-list[data-v-28f2e82b]{flex-direction:column;flex:1;gap:8px;min-height:0;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}@keyframes wb-progress-slide-28f2e82b{0%{background-position:-50% 0}to{background-position:150% 0}}@keyframes wb-card-glow-28f2e82b{0%,to{box-shadow:0 0 0 1px var(--tint-primary-30), 0 4px 18px -4px color-mix(in srgb, var(--color-primary) 25%, transparent)}50%{box-shadow:0 0 0 1px var(--tint-primary-50), 0 6px 24px -2px color-mix(in srgb, var(--color-primary) 38%, transparent)}}@keyframes wb-card-sweep-28f2e82b{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes wb-border-shimmer-28f2e82b{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes wb-status-dot-pulse-28f2e82b{0%,to{transform:scale(1);box-shadow:0 0 4px #ffffff73}50%{transform:scale(1.35);box-shadow:0 0 8px #ffffffd9}}@keyframes wb-status-dot-28f2e82b{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.7)}}@media (prefers-reduced-motion:reduce){.wb-sub-expand-enter-active[data-v-28f2e82b],.wb-sub-expand-leave-active[data-v-28f2e82b]{transition:none}}.wb-sub-expand-enter-active[data-v-28f2e82b],.wb-sub-expand-leave-active[data-v-28f2e82b]{transition:grid-template-rows var(--transition-base,var(--transition-base)) var(--ease-custom), opacity var(--transition-fast) var(--ease-custom);overflow:hidden}.wb-sub-expand-enter-from[data-v-28f2e82b],.wb-sub-expand-leave-to[data-v-28f2e82b]{opacity:0;grid-template-rows:0fr}.wb-sub-expand-enter-to[data-v-28f2e82b],.wb-sub-expand-leave-from[data-v-28f2e82b]{opacity:1;grid-template-rows:1fr}.wb-sub-expand-inner[data-v-28f2e82b]{min-height:0;overflow:hidden}.wb-task-group__head[data-v-28f2e82b]{font-size:var(--font-size-mid);color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:var(--radius-base);transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);align-items:center;gap:6px;margin-top:4px;padding:8px 6px 4px;font-weight:600;display:flex}.wb-task-group__head[data-v-28f2e82b]:first-child{border-top:none;margin-top:0;padding-top:4px}.wb-task-group__head[data-v-28f2e82b]:hover{background:var(--tint-primary-08);color:var(--text-secondary)}.wb-task-group__head[data-v-28f2e82b]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset)}.wb-task-group__head.is-current[data-v-28f2e82b]{color:var(--color-primary);border-top-color:var(--tint-primary-30)}.wb-task-group__head.is-collapsed[data-v-28f2e82b]{background:var(--bg-subtle);border-top-style:solid;margin-top:6px;padding-top:6px;padding-bottom:6px}.wb-task-group__head.is-collapsed.is-current[data-v-28f2e82b]{background:color-mix(in srgb, var(--color-primary) 8%, var(--bg-subtle))}.wb-task-group__caret[data-v-28f2e82b]{font-size:var(--font-size-sm);opacity:.75;transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0}.wb-task-group__icon[data-v-28f2e82b]{font-size:var(--font-size-base);opacity:.8;flex-shrink:0}.wb-task-group__name[data-v-28f2e82b]{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.wb-task-group__count[data-v-28f2e82b]{min-width:18px}.wb-task-group__head.is-current .wb-task-group__count[data-v-28f2e82b]{background:var(--tint-primary-16,color-mix(in srgb, var(--color-primary) 16%, transparent));color:var(--color-primary)}.wb-meta-save[data-v-28f2e82b]{height:24px;font-size:var(--font-size-xs);letter-spacing:.1px;border-radius:var(--radius-xl);border:1px solid var(--border-color-medium);background:var(--bg-container);color:var(--text-meta);-webkit-user-select:none;user-select:none;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;align-items:center;gap:5px;padding:0 10px;font-weight:600;display:inline-flex}.wb-meta-save__dot[data-v-28f2e82b]{opacity:.85;background:currentColor;border-radius:50%;width:6px;height:6px;display:inline-block}.wb-meta-save__check[data-v-28f2e82b]{font-size:var(--font-size-sm);line-height:1}.wb-meta-save__bang[data-v-28f2e82b]{width:12px;height:12px;font-size:var(--font-size-xs);color:#fff;background:currentColor;border-radius:50%;justify-content:center;align-items:center;font-weight:800;line-height:1;display:inline-flex}.wb-meta-save.is-saving[data-v-28f2e82b]{color:var(--color-primary);border-color:var(--tint-primary-35);background:color-mix(in srgb, var(--color-primary) 8%, var(--bg-container))}.wb-meta-save.is-saving .wb-meta-save__dot[data-v-28f2e82b]{animation:1.2s ease-in-out infinite wb-meta-pulse-28f2e82b}.wb-meta-save.is-saved[data-v-28f2e82b]{color:var(--color-success-dark);border-color:var(--tint-success-35);background:var(--tint-success-08)}.wb-meta-save.is-dirty[data-v-28f2e82b]{color:var(--color-warning-dark);border-color:var(--tint-warning-45);background:var(--tint-warning-06)}.wb-meta-save.is-error[data-v-28f2e82b]{color:var(--color-danger-dark,#b91c1c);border-color:var(--tint-danger-45);background:var(--tint-danger-06)}@keyframes wb-meta-pulse-28f2e82b{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.1)}}@media (prefers-reduced-motion:reduce){.wb-meta-save.is-saving .wb-meta-save__dot[data-v-28f2e82b]{animation:none}}.wb-logs-dialog{flex-direction:column;max-height:88vh;display:flex}.wb-logs-dialog .el-dialog__body{flex:auto;min-height:0;max-height:calc(88vh - 60px);padding:12px 20px 16px;overflow:auto}
|