zen-gitsync 2.18.8 → 2.18.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/cli/ai/agent.js +7 -0
- package/src/cli/ai/runtime.test.js +22 -1
- package/src/cli/ai/tools.js +1 -1
- package/src/cli/ai/tools.test.js +1 -1
- package/src/cli/ai/transport.js +8 -3
- package/src/config.js +7 -5
- package/src/mcp/tools/workbench.js +1 -1
- package/src/ui/public/assets/{AgentView-DZx3n-So.css → AgentView-CV_8sYX6.css} +1 -1
- package/src/ui/public/assets/AgentView-DxmnqJxE.js +1 -0
- package/src/ui/public/assets/{AppVersionBadge-Bg5lrtKb.js → AppVersionBadge-C4OhcUi8.js} +2 -2
- package/src/ui/public/assets/{BranchSelector-CxjTqAkl.js → BranchSelector-CrLieQyJ.js} +1 -1
- package/src/ui/public/assets/{CommitForm-BWWrOvj5.js → CommitForm-KGQisnPQ.js} +2 -2
- package/src/ui/public/assets/{CommonDialog-x5jfL4Lq.js → CommonDialog-j_53ORvj.js} +1 -1
- package/src/ui/public/assets/CopySessionButton-y5Rzmact.js +20 -0
- package/src/ui/public/assets/EditorView-CkZb2kw5.js +1 -0
- package/src/ui/public/assets/{EditorView-BUiVsBv7.css → EditorView-Ims2BUK_.css} +1 -1
- package/src/ui/public/assets/{FlowExecutionViewer-BkZ20jxN.js → FlowExecutionViewer-CQ-TPhwF.js} +1 -1
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-aZBYu29g.js → FlowOrchestrationWorkspace-BMQSVm3V.js} +1 -1
- package/src/ui/public/assets/{LogList-CSIbmUMK.js → LogList-BxH6QNlK.js} +4 -4
- package/src/ui/public/assets/{MindmapView-JYLp185X.js → MindmapView-D9_qjJsR.js} +1 -1
- package/src/ui/public/assets/{MonitorView-BS2Mh-I7.js → MonitorView-z_fsnE8Y.js} +1 -1
- package/src/ui/public/assets/{ProjectStartupButton-DAEP6ZU5.js → ProjectStartupButton-CFB_JpYG.js} +1 -1
- package/src/ui/public/assets/RecentDirectoriesChat-7fzSkSmc.css +1 -0
- package/src/ui/public/assets/RecentDirectoriesChat-BYI8lkjQ.js +1 -0
- package/src/ui/public/assets/{RemoteManagerDialog-aaNmsKpy.js → RemoteManagerDialog-DXDcN8e7.js} +1 -1
- package/src/ui/public/assets/{RemoteRepoCard-DndI8rNZ.js → RemoteRepoCard-C_TYGsXi.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-BTD9-R8t.js → SourceMapView-D6cSweDt.js} +1 -1
- package/src/ui/public/assets/{SvgIcon-0n6uuKFm.js → SvgIcon-5AlG3IfR.js} +1 -1
- package/src/ui/public/assets/{UserInputNode-B-mDg9Wy.js → UserInputNode-BKP869D6.js} +1 -1
- package/src/ui/public/assets/WorkbenchView-D4UDurhF.js +6 -0
- package/src/ui/public/assets/WorkbenchView-DogERhHQ.css +1 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-C3o7kvRL.js → _plugin-vue_export-helper-Csn085FF.js} +4 -4
- package/src/ui/public/assets/agentConversations-DyzaxUXm.js +10 -0
- package/src/ui/public/assets/configStore-DOaPZ6Mq.js +1 -0
- package/src/ui/public/assets/index-C7Y9odvZ.js +57 -0
- package/src/ui/public/assets/index-NYzaTfbS.css +1 -0
- package/src/ui/public/assets/{useOrchestrator-CS9sn7nV.js → useOrchestrator-C236G5P5.js} +1 -1
- package/src/ui/public/index.html +6 -6
- package/src/ui/server/index.js +8 -0
- package/src/ui/server/routes/fileOpen.js +57 -1
- package/src/ui/server/routes/fileOpen.test.js +1 -1
- package/src/ui/server/routes/workbench/agentChat.js +70 -8
- package/src/ui/server/routes/workbench/agentChatExtensions.test.js +290 -0
- package/src/ui/server/routes/workbench/agentEngines.js +8 -4
- package/src/ui/server/routes/workbench/agentExtensions.js +157 -0
- package/src/ui/server/routes/workbench/agentMarketplace.js +12 -0
- package/src/ui/server/routes/workbench/agentParity.test.js +16 -0
- package/src/ui/server/routes/workbench/agentRoutes.js +82 -7
- package/src/ui/server/routes/workbench/agentRoutes.test.js +141 -1
- package/src/ui/server/routes/workbench/executorModels.js +30 -5
- package/src/ui/server/routes/workbench/executorModels.test.js +16 -4
- package/src/ui/server/routes/workbench/index.js +1 -1
- package/src/ui/server/routes/workbench/jobActivity.js +3 -3
- package/src/ui/server/routes/workbench/jobActivity.test.js +1 -0
- package/src/ui/server/routes/workbench/runExternalTurn.js +22 -25
- package/src/ui/server/routes/workbench/runExternalTurn.test.js +34 -0
- package/src/ui/server/routes/workbench/taskRunner.codebuddy.test.js +275 -0
- package/src/ui/server/routes/workbench/taskRunner.js +311 -24
- package/src/ui/server/routes/workbench/taskRunner.opencode.test.js +2 -1
- package/src/ui/public/assets/AgentView-BRAUZCtA.js +0 -1
- package/src/ui/public/assets/CopySessionButton-D0wFpk8a.js +0 -20
- package/src/ui/public/assets/EditorView-DmaGiI-z.js +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-B19uAf8k.css +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-CVFTShrU.js +0 -1
- package/src/ui/public/assets/WorkbenchView-CfSrCIbp.js +0 -8
- package/src/ui/public/assets/WorkbenchView-D6NRqZ5W.css +0 -1
- package/src/ui/public/assets/agentConversations-DpiGplZB.js +0 -8
- package/src/ui/public/assets/configStore-BdL3uW2E.js +0 -1
- package/src/ui/public/assets/index-BS7BDFG4.js +0 -57
- package/src/ui/public/assets/index-DwJWiCiN.css +0 -1
|
@@ -54,9 +54,10 @@ function makeSink() {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
test('normalizeTaskExecutor:白名单 + 大小写 + 非法回落', () => {
|
|
57
|
-
assert.deepEqual(TASK_EXECUTORS, ['claude', 'opencode', 'codex']);
|
|
57
|
+
assert.deepEqual(TASK_EXECUTORS, ['claude', 'opencode', 'codex', 'codebuddy']);
|
|
58
58
|
assert.equal(normalizeTaskExecutor('opencode'), 'opencode');
|
|
59
59
|
assert.equal(normalizeTaskExecutor('codex'), 'codex');
|
|
60
|
+
assert.equal(normalizeTaskExecutor('codebuddy'), 'codebuddy');
|
|
60
61
|
// 大小写不敏感(存储前统一小写)
|
|
61
62
|
assert.equal(normalizeTaskExecutor('OpenCode'), 'opencode');
|
|
62
63
|
assert.equal(normalizeTaskExecutor('opencode '), 'opencode');
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,$t as t,An as n,At as r,Ct as i,Dn as a,Dr as o,En as s,Fn as c,Fr as l,Gn as u,Gt as d,Ht as f,J as p,Jn as m,Jr as h,Jt as g,Ln as _,M as v,On as y,Pn as b,Qn as x,Sn as S,Tt as C,Vn as w,W as T,Xn as E,Xr as D,Yt as O,_n as k,a as ee,an as te,dn as A,er as j,et as M,gn as N,i as P,j as ne,kn as F,kt as I,lr as L,lt as re,mn as R,mr as z,mt as ie,r as B,rr as V,sr as H,st as U,tt as W,ur as G,vn as K,xr as q,yr as ae}from"./element-plus-J45pKUrE.js";import{a as J,r as oe}from"./vendor-B3NyhlYR.js";import{n as Y,t as X}from"./_plugin-vue_export-helper-C3o7kvRL.js";import{t as se}from"./configStore-BdL3uW2E.js";import{t as ce}from"./CommonDialog-x5jfL4Lq.js";import{G as Z,W as le,v as ue}from"./index-BS7BDFG4.js";import{a as de,c as fe,i as pe,l as me,n as he,o as ge,p as _e,r as ve,s as ye,t as be,u as xe}from"./agentConversations-DpiGplZB.js";import{c as Se,s as Ce,t as we}from"./CopySessionButton-D0wFpk8a.js";import{t as Te}from"./useOrchestrator-CS9sn7nV.js";w(),z(),A(),l();var Ee={class:`marketplace-panel`},De={class:`mp-toolbar`},Oe={class:`mp-search`},ke=[`placeholder`],Ae={class:`mp-toolbar-sub`},je={class:`mp-target-hint`},Me={class:`mp-source-filter`},Ne=[`onClick`],Pe={class:`mp-body`},Fe={class:`mp-group-header`},Ie={class:`mp-group-title`},Le={key:0,class:`mp-group-count`},Re={key:1,class:`mp-group-error`},ze=[`href`,`title`],Be={key:0,class:`mp-grid`},Ve={class:`mp-card-head`},He=[`title`],Ue={key:0,class:`mp-card-metric`},We=[`title`],Ge={class:`mp-card-meta`},Ke=[`title`],qe=[`title`],Je={key:2,class:`mp-tag remote`},Ye={class:`mp-card-foot`},Xe=[`href`],Ze={key:1,class:`mp-installed-chip`},Qe=[`disabled`,`onClick`],$e={key:3,class:`mp-not-installable`},et={key:1,class:`mp-empty`},tt={key:0,class:`mp-group installed`},nt={class:`mp-group-header`},rt={class:`mp-group-title`},it={class:`mp-group-count`},at={key:0,class:`mp-installed-block`},ot={class:`mp-installed-target`},st={class:`mp-installed-list`},ct=[`title`],lt=[`title`],ut={key:1,class:`mp-meta-pkg`},dt={key:2,class:`mp-tag warn`},ft=[`disabled`,`title`,`onClick`],pt=[`disabled`,`onClick`],mt={key:1,class:`mp-empty all`},ht={key:0,class:`mkt-form`},gt={class:`mkt-form-name`},_t=[`onUpdate:modelValue`,`placeholder`],vt={key:0,class:`mkt-field`},yt={class:`mkt-hint`},bt=X(_({__name:`MarketplacePanel`,props:{type:{}},setup(t){let r=t,l=se(),u=q([]),m=q([]),g=q(!1),_=q(``),C=q(``),w=q([]),E=q(`project`),D=q(new Set),k=q(new Set),A=q(new Set),M=s(()=>l.currentDirectory||``),N=null;async function R(){if(!g.value){g.value=!0;try{let e=new URLSearchParams({type:r.type,cwd:M.value});C.value&&e.set(`q`,C.value),w.value.length&&e.set(`sources`,w.value.join(`,`));let t=await(await fetch(`/api/agent/marketplace/catalog?${e}`)).json();t?.success?(u.value=t.groups||[],m.value=t.installed||[]):P.error(t?.error||Y(`@MKT:加载失败`))}catch{P.error(Y(`@MKT:加载失败`))}finally{g.value=!1}}}H(_,e=>{N&&clearTimeout(N),N=setTimeout(()=>{C.value=e.trim(),R()},400)}),H(w,()=>R()),H(()=>r.type,()=>{w.value=[],C.value=``,_.value=``,R()}),H(M,()=>R()),R();let z=s(()=>{let e=M.value?M.value.split(/[\\/]/).filter(Boolean).pop():``;return E.value===`project`?e||Y(`@MKT:当前项目`):Y(`@MKT:g ai 智能体`)});function V(e){return e.stars?`${U(e.stars)} ★`:e.downloads?`${U(e.downloads)} ${Y(`@MKT:周下载`)}`:e.uses?`${U(e.uses)} ${Y(`@MKT:次使用`)}`:``}function U(e){return e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(e)}function J(e){return`${e.id}`}function oe(e){return D.value.has(J(e))}let X=s(()=>{let e={project:[],global:[]};for(let t of m.value)(e[t.target]||=[]).push(t);return e}),Z=ae({visible:!1,item:null,env:{},args:``});function le(e){return r.type===`mcp`&&(!!e.envKeys?.length||!!e.args?.length)}function ue(e){Z.item=e,Z.env=Object.fromEntries((e.envKeys||[]).map(e=>[e,``])),Z.args=(e.args||[]).join(` `),Z.visible=!0}function de(){let e=Z.item;if(Z.visible=!1,!e)return;let t=Object.fromEntries(Object.entries(Z.env).filter(([,e])=>e.trim()!==``)),n=Z.args.trim()?Z.args.trim().match(/(?:[^\s"]+|"[^"]*")+/g)?.map(e=>e.replace(/^"|"$/g,``))??void 0:void 0;pe(e,{env:t,...n?{args:n}:{}})}async function fe(e){if(!e.installed||await me(e)){if(le(e)){ue(e);return}await pe(e,{})}}async function pe(e,t){let n=J(e);D.value.add(n);try{let n=await fetch(`/api/agent/marketplace/install`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:r.type,target:E.value,cwd:M.value,item:{...e,...t}})}),i=await n.json().catch(()=>null);if(!n.ok||!i?.success){P.error(i?.error||Y(`@MKT:安装失败`));return}i.item?.warning&&P.warning(i.item.warning),i.item?.envKeys?.length?P.warning(`${Y(`@MKT:还缺环境变量`)}: ${i.item.envKeys.join(`, `)}`):P.success(Y(`@MKT:安装成功`)),await R()}catch{P.error(Y(`@MKT:安装失败`))}finally{D.value.delete(n)}}async function me(e){try{return await B.confirm(`${e.name} ${Y(`@MKT:已安装,要重新安装吗?`)}`,Y(`@MKT:重新安装`),{confirmButtonText:Y(`@MKT:重装`),cancelButtonText:Y(`@MKT:取消`),type:`warning`}),!0}catch{return!1}}async function he(e){let t=`${e.target}:${e.id}`;A.value.add(t);try{let t=await fetch(`/api/agent/marketplace/reveal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:r.type,target:e.target,cwd:M.value,id:e.id})}),n=await t.json().catch(()=>null);(!t.ok||!n?.success)&&P.error(n?.error||Y(`@MKT:打开失败`))}catch{P.error(Y(`@MKT:打开失败`))}finally{A.value.delete(t)}}async function ge(e){try{await B.confirm(`${Y(`@MKT:确定卸载`)} ${e.name}?`,Y(`@MKT:卸载`),{confirmButtonText:Y(`@MKT:卸载`),cancelButtonText:Y(`@MKT:取消`),type:`warning`})}catch{return}let t=`${e.target}:${e.id}`;k.value.add(t);try{let t=new URLSearchParams({target:e.target,cwd:M.value}),n=await fetch(`/api/agent/marketplace/item/${r.type}/${encodeURIComponent(e.id)}?${t}`,{method:`DELETE`}),i=await n.json().catch(()=>null);if(!n.ok||!i?.success){P.error(i?.error||Y(`@MKT:卸载失败`));return}P.success(Y(`@MKT:已卸载`)),await R()}catch{P.error(Y(`@MKT:卸载失败`))}finally{k.value.delete(t)}}return(r,s)=>{let l=p,C=ne,D=v,M=T,N=ee;return x(),n(`div`,Ee,[a(`div`,De,[a(`div`,Oe,[c(l,{class:`mp-search-icon`},{default:L(()=>[c(o(d))]),_:1}),G(a(`input`,{"onUpdate:modelValue":s[0]||=e=>_.value=e,class:`mp-search-input`,type:`text`,placeholder:t.type===`skill`?o(Y)(`@MKT:搜索 Skill...`):o(Y)(`@MKT:搜索 MCP 服务...`)},null,8,ke),[[K,_.value]])]),c(D,{modelValue:E.value,"onUpdate:modelValue":s[1]||=e=>E.value=e,size:`small`,class:`mp-target`},{default:L(()=>[c(C,{value:`project`},{default:L(()=>[b(e(o(Y)(`@MKT:当前项目`)),1)]),_:1}),c(C,{value:`global`},{default:L(()=>[b(e(o(Y)(`@MKT:g ai 智能体`)),1)]),_:1})]),_:1},8,[`modelValue`]),c(M,{content:o(Y)(`@MKT:刷新`),placement:`top`,"show-after":300},{default:L(()=>[a(`button`,{class:h([`mp-refresh`,{spinning:g.value}]),onClick:R},[c(l,null,{default:L(()=>[c(o(f))]),_:1})],2)]),_:1},8,[`content`])]),a(`div`,Ae,[a(`span`,je,[b(e(o(Y)(`@MKT:安装到`))+` `,1),a(`b`,null,e(z.value),1)]),a(`div`,Me,[(x(!0),n(S,null,j(u.value,t=>(x(),n(`button`,{key:t.id,class:h([`mp-chip`,{active:w.value.includes(t.id)}]),onClick:()=>{let e=w.value.indexOf(t.id);e>=0?w.value.splice(e,1):w.value.push(t.id)}},e(t.label),11,Ne))),128)),w.value.length?(x(),n(`button`,{key:0,class:`mp-chip clear`,onClick:s[2]||=e=>w.value=[]},e(o(Y)(`@MKT:全部来源`)),1)):F(``,!0)])]),G((x(),n(`div`,Pe,[(x(!0),n(S,null,j(u.value,t=>(x(),n(`section`,{key:t.id,class:`mp-group`},[a(`header`,Fe,[a(`h3`,Ie,e(t.label),1),t.status===`ok`?(x(),n(`span`,Le,e(t.items.length),1)):(x(),n(`span`,Re,[c(l,null,{default:L(()=>[c(o(te))]),_:1}),b(` `+e(t.error||o(Y)(`@MKT:来源不可用`)),1)])),t.homepage?(x(),n(`a`,{key:2,class:`mp-group-link`,href:t.homepage,target:`_blank`,rel:`noopener noreferrer`,title:t.homepage},[c(l,null,{default:L(()=>[c(o(I))]),_:1})],8,ze)):F(``,!0)]),t.status===`ok`&&t.items.length?(x(),n(`div`,Be,[(x(!0),n(S,null,j(t.items,t=>(x(),n(`article`,{key:J(t),class:`mp-card`},[a(`div`,Ve,[a(`span`,{class:`mp-card-name`,title:t.name},e(t.name),9,He),V(t)?(x(),n(`span`,Ue,[c(l,null,{default:L(()=>[t.stars?(x(),y(o(O),{key:0})):(x(),y(o(ie),{key:1}))]),_:2},1024),b(` `+e(V(t)),1)])):F(``,!0)]),a(`p`,{class:`mp-card-desc`,title:t.description},e(t.description||o(Y)(`@MKT:暂无描述`)),9,We),a(`div`,Ge,[t.package?(x(),n(`code`,{key:0,class:`mp-meta-pkg`,title:t.package},e(t.package),9,Ke)):t.repository?(x(),n(`span`,{key:1,class:`mp-meta-repo`,title:t.repository+(t.subpath?` · `+t.subpath:``)},[b(e(t.repository),1),t.subpath?(x(),n(S,{key:0},[b(` · `+e(t.subpath),1)],64)):F(``,!0)],8,qe)):F(``,!0),t.transport===`remote`?(x(),n(`span`,Je,e(o(Y)(`@MKT:远程服务`)),1)):F(``,!0),(x(!0),n(S,null,j((t.tags||[]).slice(0,2),t=>(x(),n(`span`,{key:t,class:`mp-tag`},e(t),1))),128))]),a(`div`,Ye,[t.upstream?(x(),n(`a`,{key:0,class:`mp-card-link`,href:t.upstream,target:`_blank`,rel:`noopener noreferrer`},e(o(Y)(`@MKT:查看来源`)),9,Xe)):F(``,!0),s[6]||=a(`span`,{class:`mp-foot-spacer`},null,-1),t.installed?(x(),n(`span`,Ze,[c(l,null,{default:L(()=>[c(o(W))]),_:1}),b(e(o(Y)(`@MKT:已安装`)),1)])):t.installable===!1?(x(),n(`span`,$e,e(o(Y)(`@MKT:暂不支持一键安装`)),1)):(x(),n(`button`,{key:2,class:`mp-install-btn`,disabled:oe(t),onClick:e=>fe(t)},e(oe(t)?o(Y)(`@MKT:安装中...`):o(Y)(`@MKT:安装`)),9,Qe))])]))),128))])):t.status===`ok`?(x(),n(`div`,et,e(o(Y)(`@MKT:该来源暂无结果`)),1)):F(``,!0)]))),128)),m.value.length?(x(),n(`section`,tt,[a(`header`,nt,[a(`h3`,rt,e(o(Y)(`@MKT:已安装`)),1),a(`span`,it,e(m.value.length),1)]),(x(),n(S,null,j([`project`,`global`],t=>a(`div`,{key:t},[X.value[t]?.length?(x(),n(`div`,at,[a(`div`,ot,e(t===`project`?o(Y)(`@MKT:当前项目`):o(Y)(`@MKT:g ai 智能体`)),1),a(`div`,st,[(x(!0),n(S,null,j(X.value[t],r=>(x(),n(`div`,{key:t+r.id,class:`mp-installed-row`},[a(`span`,{class:`mp-installed-name`,title:r.name},e(r.name),9,ct),r.id&&r.id!==r.name?(x(),n(`code`,{key:0,class:`mp-installed-id`,title:r.dir||r.file||r.id},e(r.id),9,lt)):F(``,!0),r.package?(x(),n(`code`,ut,e(r.package),1)):F(``,!0),r.requiredEnv?.length?(x(),n(`span`,dt,e(o(Y)(`@MKT:待配置`))+`: `+e(r.requiredEnv.join(`, `)),1)):F(``,!0),s[7]||=a(`span`,{class:`mp-foot-spacer`},null,-1),a(`button`,{class:`mp-reveal-btn`,disabled:A.value.has(t+r.id),title:r.dir||r.file||``,onClick:e=>he(r)},[c(l,null,{default:L(()=>[c(o(i))]),_:1}),b(` `+e(o(Y)(`@MKT:打开文件夹`)),1)],8,ft),a(`button`,{class:`mp-remove-btn`,disabled:k.value.has(t+r.id),onClick:e=>ge(r)},[c(l,null,{default:L(()=>[c(o(re))]),_:1}),b(` `+e(k.value.has(t+r.id)?o(Y)(`@MKT:卸载中...`):o(Y)(`@MKT:卸载`)),1)],8,pt)]))),128))])])):F(``,!0)])),64))])):F(``,!0),!g.value&&!u.value.length?(x(),n(`div`,mt,e(o(Y)(`@MKT:加载失败`)),1)):F(``,!0)])),[[N,g.value]]),c(ce,{modelValue:Z.visible,"onUpdate:modelValue":s[5]||=e=>Z.visible=e,title:o(Y)(`@MKT:配置 MCP`),width:`460px`,type:`flex`,"close-on-click-modal":!1,"append-to-body":``},{footer:L(()=>[a(`button`,{class:`mkt-cancel`,onClick:s[4]||=e=>Z.visible=!1},e(o(Y)(`@MKT:取消`)),1),a(`button`,{class:`mkt-confirm`,onClick:de},e(o(Y)(`@MKT:安装`)),1)]),default:L(()=>[Z.item?(x(),n(`div`,ht,[a(`p`,gt,e(Z.item.name),1),(x(!0),n(S,null,j(Object.keys(Z.env),t=>(x(),n(`div`,{key:t,class:`mkt-field`},[a(`label`,null,e(t),1),G(a(`input`,{"onUpdate:modelValue":e=>Z.env[t]=e,type:`text`,autocomplete:`off`,placeholder:o(Y)(`@MKT:环境变量值`),spellcheck:`false`},null,8,_t),[[K,Z.env[t]]])]))),128)),Z.item.args?.length?(x(),n(`div`,vt,[a(`label`,null,e(o(Y)(`@MKT:启动参数`)),1),G(a(`input`,{"onUpdate:modelValue":s[3]||=e=>Z.args=e,type:`text`,autocomplete:`off`,spellcheck:`false`},null,512),[[K,Z.args]]),a(`p`,yt,e(o(Y)(`@MKT:参数提示`)),1)])):F(``,!0)])):F(``,!0)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-536d7952`]]);async function Q(e,t){let n=await fetch(e,{headers:{"Content-Type":`application/json`},...t}),r={};try{r=await n.json()}catch{}if(!n.ok||r.success===!1)throw Error(r.error||`请求失败 (${n.status})`);return r}async function xt(){let e=await Q(`/api/schedules`);return Array.isArray(e.tasks)?e.tasks:[]}async function St(e){return(await Q(`/api/schedules`,{method:`POST`,body:JSON.stringify(e)})).task}async function Ct(e,t){return(await Q(`/api/schedules/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify(t)})).task}async function wt(e){await Q(`/api/schedules/${encodeURIComponent(e)}`,{method:`DELETE`})}async function Tt(e){await Q(`/api/schedules/${encodeURIComponent(e)}/run`,{method:`POST`})}async function Et(e){await Q(`/api/schedules/${encodeURIComponent(e)}/stop`,{method:`POST`})}function Dt(e){if(typeof EventSource>`u`)return()=>{};let t=new EventSource(`/api/schedules/events`);return t.onmessage=t=>{try{e(JSON.parse(t.data))}catch{}},()=>t.close()}var Ot=e=>/^\d+$/.test(e)?Number(e):null;function kt(e){let t=String(e||``).trim(),n=t.split(/\s+/);if(n.length!==5)return{kind:`custom`,raw:t};let[r,i,a,o,s]=n,c=Ot(r),l=Ot(i);if(t===`* * * * *`)return{kind:`every-minute`,raw:t};let u=r.match(/^\*\/(\d+)$/);if(u&&i===`*`&&a===`*`&&o===`*`&&s===`*`)return{kind:`every-n-minutes`,n:Number(u[1]),raw:t};if(c!==null&&i===`*`&&a===`*`&&o===`*`&&s===`*`)return{kind:`hourly`,minute:c,raw:t};if(c!==null&&l!==null&&a===`*`&&o===`*`&&s===`*`)return{kind:`daily`,hour:l,minute:c,raw:t};let d=Ot(s);if(c!==null&&l!==null&&a===`*`&&o===`*`&&d!==null)return{kind:`weekly`,weekday:d%7,hour:l,minute:c,raw:t};let f=Ot(a);return c!==null&&l!==null&&f!==null&&o===`*`&&s===`*`?{kind:`monthly`,day:f,hour:l,minute:c,raw:t}:{kind:`custom`,raw:t}}var $=e=>String(e).padStart(2,`0`),At=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime();function jt(e,t=new Date){if(!e)return{kind:`none`};let n=new Date(e);if(Number.isNaN(n.getTime()))return{kind:`none`};let r=`${$(n.getHours())}:${$(n.getMinutes())}`,i=Math.round((At(n)-At(t))/864e5);return i<0?{kind:`date`,date:`${n.getMonth()+1}-${$(n.getDate())}`,time:r}:i===0?{kind:`today`,time:r}:i===1?{kind:`tomorrow`,time:r}:i<7?{kind:`weekday`,weekday:n.getDay(),time:r}:{kind:`date`,date:`${n.getMonth()+1}-${$(n.getDate())}`,time:r}}function Mt(e){switch(e){case`ok`:return`ok`;case`error`:case`timed-out`:return`error`;case`skipped-busy`:case`missed`:case`cancelled`:return`skipped`;default:return`pending`}}function Nt(e){let t=Number(e);if(!Number.isFinite(t)||t<0)return``;if(t<1e3)return`<1s`;let n=Math.round(t/1e3);if(n<60)return`${n}s`;let r=Math.floor(n/60);return r<60?`${r}m${$(n%60)}s`:`${Math.floor(r/60)}h${$(r%60)}m`}function Pt(e){let t=Math.min(59,Math.max(0,Math.floor(e.minute))),n=Math.min(23,Math.max(0,Math.floor(e.hour))),r=(Math.floor(e.weekday)%7+7)%7;switch(e.freq){case`minutes`:return`*/${Math.min(59,Math.max(1,Math.floor(e.everyMinutes??30)))} * * * *`;case`hourly`:return`${t} * * * *`;case`daily`:return`${t} ${n} * * *`;case`weekly`:return`${t} ${n} * * ${r}`;case`custom`:return String(e.custom||``).trim()}}w(),l(),z(),A();var Ft={class:`schedule-panel`},It={class:`schedule-toolbar`},Lt={class:`schedule-summary`},Rt={key:0,class:`schedule-error`},zt={key:1,class:`schedule-loading`},Bt={key:2,class:`schedule-empty`},Vt={class:`schedule-empty-title`},Ht={class:`schedule-empty-desc`},Ut={key:3,class:`schedule-list`},Wt={class:`schedule-card-body`},Gt={class:`schedule-card-head`},Kt={class:`schedule-name`},qt={key:0,class:`schedule-running`},Jt=[`aria-checked`,`aria-label`,`onClick`],Yt={class:`schedule-card-sub`},Xt={class:`schedule-desc`},Zt=[`onClick`],Qt={class:`schedule-card-side`},$t={class:`schedule-actions`},en=[`disabled`,`onClick`],tn=[`disabled`,`onClick`],nn=[`onClick`],rn=[`onClick`],an={class:`sch-form`},on={class:`sch-field`},sn={class:`sch-field-label`},cn=[`placeholder`],ln={class:`sch-field`},un={class:`sch-field-label`},dn={class:`sch-freq-row`},fn=[`value`],pn={class:`sch-inline-label`},mn=[`value`],hn={class:`sch-inline-label`},gn=[`value`],_n=[`value`],vn=[`value`],yn={class:`sch-inline-label`},bn=[`value`],xn={class:`sch-inline-label`},Sn=[`placeholder`],Cn={class:`sch-hint`},wn={class:`sch-field`},Tn={class:`sch-field-label`},En=[`placeholder`],Dn={class:`sch-field`},On={class:`sch-field-label`},kn=[`placeholder`],An={class:`sch-field`},jn={class:`sch-field-label`},Mn={class:`sch-radio-row`},Nn={class:`sch-radio`},Pn={class:`sch-radio`},Fn={class:`sch-radio`},In={key:0,class:`sch-form-error`},Ln={class:`sch-form-footer`},Rn=[`disabled`],zn={class:`sch-confirm-text`},Bn={class:`sch-form-footer`},Vn=X(_({__name:`SchedulePanel`,emits:[`open-session`],setup(t,{emit:r}){let i=r,l=se(),u=q([]),d=q(!0),f=q(``),p=q({}),g=null,_=null;async function v(){try{u.value=await xt(),f.value=``}catch(e){f.value=e?.message||String(e)}finally{d.value=!1}}function y(){_===null&&(_=window.setTimeout(()=>{_=null,v()},150))}E(async()=>{await v(),g=Dt(e=>{[`tasks_changed`,`task_started`,`task_finished`,`hello`].includes(e.type)&&y()})}),m(()=>{g?.(),_!==null&&window.clearTimeout(_)});let b=s(()=>{let e=u.value.filter(e=>e.enabled).length,t=u.value.length-e;return u.value.length?Y(`@SCHED:{on} 个启用 · {off} 个停用`,{on:e,off:t}):``}),C=[`@SCHED:周日`,`@SCHED:周一`,`@SCHED:周二`,`@SCHED:周三`,`@SCHED:周四`,`@SCHED:周五`,`@SCHED:周六`];function w(e){let t=kt(e.schedule);switch(t.kind){case`every-minute`:return Y(`@SCHED:每分钟`);case`every-n-minutes`:return Y(`@SCHED:每 {n} 分钟`,{n:t.n});case`hourly`:return Y(`@SCHED:每小时第 {minute} 分钟`,{minute:t.minute});case`daily`:return Y(`@SCHED:每天 {time}`,{time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});case`weekly`:return Y(`@SCHED:每周 {weekday} {time}`,{weekday:Y(C[t.weekday]),time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});case`monthly`:return Y(`@SCHED:每月 {day} 日 {time}`,{day:t.day,time:`${String(t.hour).padStart(2,`0`)}:${String(t.minute).padStart(2,`0`)}`});default:return t.raw}}function T(e){if(!e.enabled)return Y(`@SCHED:已停用`);if(e.running)return Y(`@SCHED:运行中...`);let t=jt(e.nextRunAt);switch(t.kind){case`none`:return``;case`today`:return Y(`@SCHED:下次 今天 {time}`,{time:t.time});case`tomorrow`:return Y(`@SCHED:下次 明天 {time}`,{time:t.time});case`weekday`:return Y(`@SCHED:下次 {weekday} {time}`,{weekday:Y(C[t.weekday]),time:t.time});case`date`:return Y(`@SCHED:下次 {date} {time}`,{date:t.date,time:t.time})}}function D(e){let t=e.lastRun;if(!t)return Y(`@SCHED:还没执行过`);switch(t.status){case`ok`:return Y(`@SCHED:成功`);case`error`:return Y(`@SCHED:失败`);case`timed-out`:return Y(`@SCHED:超时中止`);case`skipped-busy`:return Y(`@SCHED:已跳过(会话忙)`);case`missed`:return Y(`@SCHED:已错过(未运行)`);case`cancelled`:return Y(`@SCHED:已停止`);default:return t.status}}function O(e){let t=e.lastRun;if(!t)return Y(`@SCHED:还没执行过`);let n=Nt(t.durationMs),r=Y(`@SCHED:上次 {status}`,{status:D(e)});return n?`${r} · ${n}`:r}function ee(e){return e.lastRun?`is-${Mt(e.lastRun.status)}`:`is-muted`}async function te(e,t){if(!p.value[e.id]){p.value={...p.value,[e.id]:!0};try{await t(),await v()}catch(e){P.error(e?.message||String(e))}finally{let t={...p.value};delete t[e.id],p.value=t}}}function A(e){return te(e,()=>Ct(e.id,{enabled:!e.enabled}))}function M(e){return te(e,()=>Tt(e.id))}function ne(e){return te(e,()=>Et(e.id))}let I=q(!1),re=q(null);function z(e){re.value=e,I.value=!0}async function ie(){let e=re.value;if(e)try{await wt(e.id),I.value=!1,await v()}catch(e){P.error(e?.message||String(e))}}let B=q(!1),V=q(``),H=q(``),U=q(!1),W=q({name:``,freq:`daily`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:``,cwd:``,prompt:``,onMissed:`run`,enabled:!0}),ae=s(()=>[{value:`minutes`,label:Y(`@SCHED:每 N 分钟`)},{value:`hourly`,label:Y(`@SCHED:每小时`)},{value:`daily`,label:Y(`@SCHED:每天`)},{value:`weekly`,label:Y(`@SCHED:每周`)},{value:`custom`,label:Y(`@SCHED:自定义 cron`)}]),J=s(()=>Pt({freq:W.value.freq,everyMinutes:W.value.everyMinutes,minute:W.value.minute,hour:W.value.hour,weekday:W.value.weekday,custom:W.value.custom}));function oe(){W.value={name:``,freq:`daily`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:``,cwd:l.currentDirectory||``,prompt:``,onMissed:`run`,enabled:!0},H.value=``}function X(){V.value=``,oe(),B.value=!0}function Z(e){V.value=e.id;let t=kt(e.schedule),n={name:e.name,freq:`custom`,everyMinutes:30,minute:0,hour:9,weekday:1,custom:e.schedule,cwd:e.cwd,prompt:e.prompt,onMissed:e.onMissed===`skip`?`skip`:`run`,enabled:e.enabled};switch(t.kind){case`every-n-minutes`:n.freq=`minutes`,n.everyMinutes=t.n;break;case`hourly`:n.freq=`hourly`,n.minute=t.minute;break;case`daily`:n.freq=`daily`,n.minute=t.minute,n.hour=t.hour;break;case`weekly`:n.freq=`weekly`,n.minute=t.minute,n.hour=t.hour,n.weekday=t.weekday;break;default:n.freq=`custom`}W.value=n,H.value=``,B.value=!0}async function le(){let e=W.value;if(!e.name.trim()){H.value=Y(`@SCHED:任务名不能为空`);return}if(!e.prompt.trim()){H.value=Y(`@SCHED:提示词不能为空`);return}let t=J.value;if(!t){H.value=Y(`@SCHED:cron 表达式不能为空`);return}let n={name:e.name.trim(),schedule:t,cwd:e.cwd.trim(),prompt:e.prompt.trim(),enabled:e.enabled,onMissed:e.onMissed};U.value=!0;try{V.value?await Ct(V.value,n):await St(n),B.value=!1,await v()}catch(e){H.value=e?.message||String(e)}finally{U.value=!1}}return(t,r)=>(x(),n(`div`,Ft,[a(`div`,It,[a(`span`,Lt,e(b.value),1),a(`button`,{type:`button`,class:`sch-btn sch-btn-primary`,onClick:X},e(o(Y)(`@SCHED:新建任务`)),1)]),f.value?(x(),n(`div`,Rt,e(o(Y)(`@SCHED:操作失败:{error}`,{error:f.value})),1)):F(``,!0),d.value?(x(),n(`div`,zt,e(o(Y)(`@SCHED:加载中...`)),1)):u.value.length?(x(),n(`div`,Ut,[(x(!0),n(S,null,j(u.value,t=>(x(),n(`article`,{key:t.id,class:h([`schedule-card`,{"is-disabled":!t.enabled,"is-running":!!t.running}])},[a(`div`,Wt,[a(`div`,Gt,[a(`span`,Kt,e(t.name),1),t.running?(x(),n(`span`,qt,e(o(Y)(`@SCHED:运行中`)),1)):F(``,!0),a(`button`,{type:`button`,class:h([`sch-switch`,{on:t.enabled}]),role:`switch`,"aria-checked":t.enabled,"aria-label":t.enabled?o(Y)(`@SCHED:停用`):o(Y)(`@SCHED:启用`),onClick:e=>A(t)},[...r[17]||=[a(`span`,{class:`sch-switch-knob`},null,-1)]],10,Jt)]),a(`div`,Yt,[a(`span`,Xt,e(w(t)),1),r[18]||=a(`span`,{class:`schedule-sep`},`·`,-1),a(`span`,{class:h([`schedule-last`,ee(t)])},e(O(t)),3),t.sessionId?(x(),n(`button`,{key:0,type:`button`,class:`sch-link`,onClick:e=>i(`open-session`,t.sessionId)},e(o(Y)(`@SCHED:查看会话`)),9,Zt)):F(``,!0)])]),a(`div`,Qt,[a(`div`,{class:h([`schedule-next`,{"is-muted":!t.enabled}])},e(T(t)),3),a(`div`,$t,[t.running?(x(),n(`button`,{key:0,type:`button`,class:`sch-btn`,disabled:!!p.value[t.id],onClick:e=>ne(t)},e(o(Y)(`@SCHED:停止`)),9,en)):(x(),n(`button`,{key:1,type:`button`,class:`sch-btn`,disabled:!!p.value[t.id],onClick:e=>M(t)},e(o(Y)(`@SCHED:运行`)),9,tn)),a(`button`,{type:`button`,class:`sch-btn`,onClick:e=>Z(t)},e(o(Y)(`@SCHED:编辑`)),9,nn),a(`button`,{type:`button`,class:`sch-btn sch-btn-danger`,onClick:e=>z(t)},e(o(Y)(`@SCHED:删除`)),9,rn)])])],2))),128))])):(x(),n(`div`,Bt,[a(`p`,Vt,e(o(Y)(`@SCHED:还没有定时任务`)),1),a(`p`,Ht,e(o(Y)(`@SCHED:让 g ai 在指定时间自动做事:定时拉代码、定时巡检、定时汇总。也可以在对话里直接说「每天 9 点帮我…」,让 g ai 来创建。`)),1)])),c(ce,{modelValue:B.value,"onUpdate:modelValue":r[14]||=e=>B.value=e,title:V.value?o(Y)(`@SCHED:编辑任务`):o(Y)(`@SCHED:新建任务`),"close-on-click-modal":!1,"append-to-body":!0,size:`medium`,width:`560px`,"z-index":3e6,"custom-class":`schedule-dialog`},{default:L(()=>[a(`div`,an,[a(`label`,on,[a(`span`,sn,e(o(Y)(`@SCHED:任务名`)),1),G(a(`input`,{"onUpdate:modelValue":r[0]||=e=>W.value.name=e,class:`sch-input`,type:`text`,placeholder:o(Y)(`@SCHED:如:每日拉代码`)},null,8,cn),[[K,W.value.name]])]),a(`div`,ln,[a(`span`,un,e(o(Y)(`@SCHED:执行计划`)),1),a(`div`,dn,[G(a(`select`,{"onUpdate:modelValue":r[1]||=e=>W.value.freq=e,class:`sch-input sch-select`},[(x(!0),n(S,null,j(ae.value,t=>(x(),n(`option`,{key:t.value,value:t.value},e(t.label),9,fn))),128))],512),[[k,W.value.freq]]),W.value.freq===`minutes`?(x(),n(S,{key:0},[a(`span`,pn,e(o(Y)(`@SCHED:每`)),1),G(a(`select`,{"onUpdate:modelValue":r[2]||=e=>W.value.everyMinutes=e,class:`sch-input sch-select sch-select-sm`},[(x(),n(S,null,j([5,10,15,20,30,60],t=>a(`option`,{key:t,value:t},e(t),9,mn)),64))],512),[[k,W.value.everyMinutes,void 0,{number:!0}]]),a(`span`,hn,e(o(Y)(`@SCHED:分钟`)),1)],64)):W.value.freq===`daily`||W.value.freq===`weekly`?(x(),n(S,{key:1},[W.value.freq===`weekly`?G((x(),n(`select`,{key:0,"onUpdate:modelValue":r[3]||=e=>W.value.weekday=e,class:`sch-input sch-select sch-select-sm`},[(x(),n(S,null,j(C,(t,n)=>a(`option`,{key:n,value:n},e(o(Y)(t)),9,gn)),64))],512)),[[k,W.value.weekday,void 0,{number:!0}]]):F(``,!0),G(a(`select`,{"onUpdate:modelValue":r[4]||=e=>W.value.hour=e,class:`sch-input sch-select sch-select-sm`},[(x(),n(S,null,j(24,t=>a(`option`,{key:t-1,value:t-1},e(String(t-1).padStart(2,`0`)),9,_n)),64))],512),[[k,W.value.hour,void 0,{number:!0}]]),r[19]||=a(`span`,{class:`sch-inline-label`},`:`,-1),G(a(`select`,{"onUpdate:modelValue":r[5]||=e=>W.value.minute=e,class:`sch-input sch-select sch-select-sm`},[(x(),n(S,null,j(60,t=>a(`option`,{key:t-1,value:t-1},e(String(t-1).padStart(2,`0`)),9,vn)),64))],512),[[k,W.value.minute,void 0,{number:!0}]])],64)):W.value.freq===`hourly`?(x(),n(S,{key:2},[a(`span`,yn,e(o(Y)(`@SCHED:第`)),1),G(a(`select`,{"onUpdate:modelValue":r[6]||=e=>W.value.minute=e,class:`sch-input sch-select sch-select-sm`},[(x(),n(S,null,j(60,t=>a(`option`,{key:t-1,value:t-1},e(String(t-1).padStart(2,`0`)),9,bn)),64))],512),[[k,W.value.minute,void 0,{number:!0}]]),a(`span`,xn,e(o(Y)(`@SCHED:分钟`)),1)],64)):G((x(),n(`input`,{key:3,"onUpdate:modelValue":r[7]||=e=>W.value.custom=e,class:`sch-input sch-input-cron`,type:`text`,spellcheck:`false`,placeholder:o(Y)(`@SCHED:如:0 9 * * 1-5`)},null,8,Sn)),[[K,W.value.custom]])]),a(`span`,Cn,e(o(Y)(`@SCHED:cron:{cron}(分 时 日 月 周,本地时间)`,{cron:J.value||`—`})),1)]),a(`label`,wn,[a(`span`,Tn,e(o(Y)(`@SCHED:项目目录`)),1),G(a(`input`,{"onUpdate:modelValue":r[8]||=e=>W.value.cwd=e,class:`sch-input`,type:`text`,spellcheck:`false`,placeholder:o(Y)(`@SCHED:任务在该目录下执行(默认当前项目)`)},null,8,En),[[K,W.value.cwd]])]),a(`label`,Dn,[a(`span`,On,e(o(Y)(`@SCHED:提示词`)),1),G(a(`textarea`,{"onUpdate:modelValue":r[9]||=e=>W.value.prompt=e,class:`sch-input sch-textarea`,rows:`4`,placeholder:o(Y)(`@SCHED:到点后发给 g ai 的完整指令,例如:检查所有仓库远端更新,有变更就 pull;写成一次自足的请求(未来那一轮没有现在的上下文)`)},null,8,kn),[[K,W.value.prompt]])]),a(`div`,An,[a(`span`,jn,e(o(Y)(`@SCHED:错过补偿`)),1),a(`div`,Mn,[a(`label`,Nn,[G(a(`input`,{"onUpdate:modelValue":r[10]||=e=>W.value.onMissed=e,type:`radio`,value:`run`},null,512),[[N,W.value.onMissed]]),a(`span`,null,e(o(Y)(`@SCHED:补跑一次(g ui 重新运行后)`)),1)]),a(`label`,Pn,[G(a(`input`,{"onUpdate:modelValue":r[11]||=e=>W.value.onMissed=e,type:`radio`,value:`skip`},null,512),[[N,W.value.onMissed]]),a(`span`,null,e(o(Y)(`@SCHED:跳过`)),1)]),a(`label`,Fn,[G(a(`input`,{"onUpdate:modelValue":r[12]||=e=>W.value.enabled=e,type:`checkbox`},null,512),[[R,W.value.enabled]]),a(`span`,null,e(o(Y)(`@SCHED:创建后启用`)),1)])])]),H.value?(x(),n(`p`,In,e(H.value),1)):F(``,!0)]),a(`div`,Ln,[a(`button`,{type:`button`,class:`sch-btn`,onClick:r[13]||=e=>B.value=!1},e(o(Y)(`@SCHED:取消`)),1),a(`button`,{type:`button`,class:`sch-btn sch-btn-primary`,disabled:U.value,onClick:le},e(U.value?o(Y)(`@SCHED:保存中...`):o(Y)(`@SCHED:保存`)),9,Rn)])]),_:1},8,[`modelValue`,`title`]),c(ce,{modelValue:I.value,"onUpdate:modelValue":r[16]||=e=>I.value=e,title:o(Y)(`@SCHED:删除任务`),"close-on-click-modal":!1,"append-to-body":!0,size:`small`,width:`400px`,"z-index":3e6,"custom-class":`schedule-dialog-confirm`},{default:L(()=>[a(`p`,zn,e(o(Y)(`@SCHED:确定删除「{name}」吗?已产生的会话会保留,但任务不再执行。`,{name:re.value?.name||``})),1),a(`div`,Bn,[a(`button`,{type:`button`,class:`sch-btn`,onClick:r[15]||=e=>I.value=!1},e(o(Y)(`@SCHED:取消`)),1),a(`button`,{type:`button`,class:`sch-btn sch-btn-danger`,onClick:ie},e(o(Y)(`@SCHED:删除`)),1)])]),_:1},8,[`modelValue`,`title`])]))}}),[[`__scopeId`,`data-v-75be84e5`]]);w(),z(),l(),A();var Hn={class:`aps`},Un={class:`aps__scroll`},Wn={class:`aps__head`},Gn={class:`aps__title`},Kn={class:`aps__intro`},qn={class:`aps__card aps__card--gai`},Jn={class:`aps__card-head`},Yn={class:`aps__card-title`},Xn={class:`aps__count`},Zn={class:`aps__hint`},Qn=[`placeholder`],$n={class:`aps__foot`},er={key:0,class:`aps__saved`},tr=[`disabled`],nr={class:`aps__card aps__card--dispatch`},rr={class:`aps__card-head`},ir={class:`aps__card-title`},ar={class:`aps__hint`},or={class:`aps__field`},sr={class:`aps__card-head`},cr={class:`aps__label`,for:`aps-global`},lr={class:`aps__count`},ur=[`placeholder`],dr={class:`aps__field`},fr={class:`aps__card-head`},pr={class:`aps__label`,for:`aps-project`},mr={key:0,class:`aps__count`},hr=[`disabled`,`placeholder`],gr={class:`aps__hint`},_r={class:`aps__foot`},vr={key:0,class:`aps__saved`},yr={key:1,class:`aps__saved`},br=[`disabled`],xr=4e3,Sr=X(_({__name:`AgentPromptSettings`,setup(t){let r=se(),{defaultPrompt:i,projectPrompts:c,loadOrchestrator:l,saveDefaultPrompt:u,saveProjectPrompt:d}=Te(),f=q(``),p=q(!1),m=q(!1),h=s(()=>r.agentDefaultPrompt||``),g=s(()=>f.value.trim()!==h.value.trim());async function _(){if(!p.value&&g.value){p.value=!0;try{await r.saveAiSettings({agentDefaultPrompt:f.value})&&(f.value=h.value,m.value=!0,P.success(Y(`@AGENT:已保存 g ai 默认提示词`)))}finally{p.value=!1}}}let v=s(()=>r.currentDirectory||``),y=s(()=>Z(v.value)||v.value),b=s(()=>{let e=le(v.value);return e&&c.value?.[e]?.prompt||``}),S=q(``),C=q(``),w=q(!1),T=q(!1),D=q(!1),O=s(()=>S.value.trim()!==(i.value||``).trim()||!!v.value&&C.value.trim()!==b.value.trim());function k(){S.value=i.value||``,C.value=b.value}E(async()=>{f.value=h.value,k();let e=await l(!0);D.value=!e,e&&k()});async function ee(){if(!w.value&&O.value){w.value=!0;try{let e=!0,t=S.value.trim();t!==(i.value||``).trim()&&(e=await u(t));let n=C.value.trim();e&&v.value&&n!==b.value.trim()&&(e=await d(v.value,n)),e&&(k(),T.value=!0)}finally{w.value=!1}}}return(t,r)=>(x(),n(`div`,Hn,[a(`div`,Un,[a(`header`,Wn,[a(`h3`,Gn,e(o(Y)(`@AGENT:提示词设置`)),1),a(`p`,Kn,e(o(Y)(`@AGENT:这里配的两块提示词,和 g ai 对话时每一轮都会自动带上。改完下一次发消息就生效,不用新开会话。`)),1)]),a(`section`,qn,[a(`div`,Jn,[a(`h4`,Yn,e(o(Y)(`@AGENT:g ai 智能体的默认提示词`)),1),a(`span`,Xn,e(f.value.length)+` / `+e(xr),1)]),a(`p`,Zn,e(o(Y)(`@AGENT:只作用于 g ai 自己:每次对话都会带上(定时任务也一样)。派发出去的任务读不到这一段。`)),1),G(a(`textarea`,{id:`aps-gai`,"onUpdate:modelValue":r[0]||=e=>f.value=e,class:`aps__area`,rows:`6`,maxlength:xr,placeholder:o(Y)(`@AGENT:例如:回答用中文;改完代码先跑一遍验证再汇报;不要动 dist 目录`)},null,8,Qn),[[K,f.value]]),a(`div`,$n,[m.value&&!g.value?(x(),n(`span`,er,e(o(Y)(`@AGENT:已保存`)),1)):F(``,!0),r[3]||=a(`span`,{class:`aps__spacer`},null,-1),a(`button`,{type:`button`,class:`aps__btn aps__btn--primary`,disabled:p.value||!g.value,onClick:_},e(p.value?o(Y)(`@AGENT:保存中…`):o(Y)(`@AGENT:保存`)),9,tr)])]),a(`section`,nr,[a(`div`,rr,[a(`h4`,ir,e(o(Y)(`@AGENT:派发任务的提示词`)),1)]),a(`p`,ar,e(o(Y)(`@AGENT:与工作台「预设提示词」是同一份设置,在哪边改都一样。派发任务时附加在指令之前,和 g ai 对话时也会带上。`)),1),a(`div`,or,[a(`div`,sr,[a(`label`,cr,e(o(Y)(`@AGENT:全局提示词`)),1),a(`span`,lr,e(S.value.length)+` / `+e(xr),1)]),G(a(`textarea`,{id:`aps-global`,"onUpdate:modelValue":r[1]||=e=>S.value=e,class:`aps__area`,rows:`5`,maxlength:xr,placeholder:o(Y)(`@AGENT:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,ur),[[K,S.value]])]),a(`div`,dr,[a(`div`,fr,[a(`label`,pr,e(v.value?o(Y)(`@AGENT:「{name}」的项目提示词`,{name:y.value}):o(Y)(`@AGENT:项目提示词`)),1),v.value?(x(),n(`span`,mr,e(C.value.length)+` / `+e(xr),1)):F(``,!0)]),G(a(`textarea`,{id:`aps-project`,"onUpdate:modelValue":r[2]||=e=>C.value=e,class:`aps__area`,rows:`5`,maxlength:xr,disabled:!v.value,placeholder:v.value?o(Y)(`@AGENT:只在这个项目派发/对话时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):o(Y)(`@AGENT:当前没有打开项目,项目级提示词暂时不能设置`)},null,8,hr),[[K,C.value]]),a(`p`,gr,e(v.value?o(Y)(`@AGENT:项目提示词追加在全局提示词之后(不覆盖全局),在「{name}」里派发或对话时一起带上`,{name:y.value}):o(Y)(`@AGENT:先在左上角切到一个项目,才能设置它的提示词`)),1)]),a(`div`,_r,[T.value&&!O.value?(x(),n(`span`,vr,e(o(Y)(`@AGENT:已保存`)),1)):D.value?(x(),n(`span`,yr,e(o(Y)(`@AGENT:读取设置失败,请稍后重试`)),1)):F(``,!0),r[4]||=a(`span`,{class:`aps__spacer`},null,-1),a(`button`,{type:`button`,class:`aps__btn aps__btn--primary`,disabled:w.value||!O.value,onClick:ee},e(w.value?o(Y)(`@AGENT:保存中…`):o(Y)(`@AGENT:保存`)),9,br)])])])]))}}),[[`__scopeId`,`data-v-ae77c09c`]]);w(),z(),l();var Cr={class:`agent-chat-area`},wr={class:`agent-tabs`,role:`tablist`},Tr=[`aria-selected`,`onClick`],Er={class:`agent-tab-body`},Dr={key:0,class:`agent-chat-pane`},Or={key:0,class:`agent-list-page`},kr={key:0,class:`agent-page-bar`},Ar=[`title`,`aria-label`],jr={class:`agent-page-title`},Mr={key:0,class:`chat-loading`},Nr=X(_({__name:`AgentView`,setup(i){let l=se(),d=q(null),{narrow:f}=Se(d),m=q(`chat`),_=q(`chat`),v=s(()=>_.value===`mcp`?`mcp`:`skill`),b=s(()=>[{id:`chat`,label:Y(`@AGENT:对话`),icon:M},{id:`schedule`,label:Y(`@AGENT:定时任务`),icon:t},{id:`skill`,label:Y(`@AGENT:Skill 广场`),icon:C},{id:`mcp`,label:Y(`@AGENT:MCP 广场`),icon:U},{id:`settings`,label:Y(`@AGENT:设置`),icon:g}]),{sessions:w,sessionsLoading:T,currentSessionId:E,messages:O,isStreaming:k,sessionLoading:ee,loadSessions:te,loadSession:A,deleteSession:N,renameSession:P,newSession:ne,sendMessage:I,retryTurn:re,questionPanel:R,answeringQuestion:z,answerQuestion:ie,isSessionGenerating:B,currentEngine:W,pendingEngine:G,isEngineLocked:K,pickEngine:ae,stop:X,inputContextUsage:ce,queuedMessages:Z,queuePaused:le,removeQueuedMessage:Te,flushQueued:Ee}=xe(),De=s(()=>K.value?W.value:G.value);function Oe(e){K.value||ae(e)}let ke=s(()=>{let e=l.theme;return e===`dark`||e===`auto`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}),Ae=s(()=>fe(w.value,B)),je=de(),Me=s(()=>Ae.value.find(e=>e.id===E.value)?.title||Y(`@AGENT:对话`)),Ne={"--welcome-avatar":`url("${be}")`},Pe=s(()=>ue(l.agentPresetPrompts));async function Fe(e){await I(e.text,e.files),await u(),Be()}async function Ie(e){await I(e.prompt),await u(),Be()}let Le=ge(),Re=q(null),ze=ye();function Be(e=!0){Re.value?.scrollToBottom(e)}H(()=>O.value.length,()=>{u(()=>Be(!1))});function Ve(e){A(e),m.value=`chat`}function He(e){e&&(_.value=`chat`,Ve(e))}function Ue(){ne(),m.value=`chat`}let We=q(280),Ge=q(!1);function Ke(e){Ge.value=!0;let t=e.clientX,n=We.value,r=e=>{let r=e.clientX-t,i=Math.max(200,Math.min(500,n+r));We.value=i},i=()=>{Ge.value=!1,document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)}return H(f,e=>{e||(m.value=`chat`)}),H(()=>[l.currentDirectory,k.value],async([e,t],n)=>{let r=!n||e!==n[0],i=!!n&&n[1]===!0&&!t;(r||i)&&await te(),E.value&&!k.value&&!w.value.some(e=>e.sessionId===E.value)&&ne()},{immediate:!0}),(t,i)=>(x(),n(`div`,{ref_key:`rootRef`,ref:d,class:`agent-view`},[_.value===`chat`&&!o(f)?(x(),n(S,{key:0},[a(`aside`,{class:`agent-sidebar`,style:D({width:We.value+`px`})},[c(o(oe),{class:`agent-conversations`,items:Ae.value,"active-id":o(E),loading:o(T),labels:o(je),onSelect:Ve,onNew:Ue,onRename:o(P),onDelete:o(N)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],4),a(`div`,{class:h([`sidebar-resizer`,{active:Ge.value}]),onMousedown:Ke},null,34)],64)):F(``,!0),a(`main`,Cr,[a(`nav`,wr,[(x(!0),n(S,null,j(b.value,t=>(x(),n(`button`,{key:t.id,type:`button`,class:h([`agent-tab`,{active:_.value===t.id}]),role:`tab`,"aria-selected":_.value===t.id,onClick:e=>_.value=t.id},[c(o(p),null,{default:L(()=>[(x(),y(V(t.icon)))]),_:2},1024),a(`span`,null,e(t.label),1)],10,Tr))),128)),_.value===`chat`?(x(),y(Ce,{key:0,class:`agent-engine`,engine:De.value,locked:o(K),onSelect:Oe},null,8,[`engine`,`locked`])):F(``,!0),_.value===`chat`?(x(),y(we,{key:1,class:`agent-copy`,messages:o(O),title:Me.value,engine:o(_e)(De.value)},null,8,[`messages`,`title`,`engine`])):F(``,!0)]),a(`div`,Er,[_.value===`chat`?(x(),n(`div`,Dr,[o(f)&&m.value===`list`?(x(),n(`div`,Or,[c(o(oe),{class:`agent-conversations`,items:Ae.value,"active-id":o(E),loading:o(T),labels:o(je),onSelect:Ve,onNew:Ue,onRename:o(P),onDelete:o(N)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])])):(x(),n(S,{key:1},[o(f)?(x(),n(`div`,kr,[a(`button`,{type:`button`,class:`agent-page-back`,title:o(Y)(`@AGENT:返回会话列表`),"aria-label":o(Y)(`@AGENT:返回会话列表`),onClick:i[0]||=e=>m.value=`list`},[...i[1]||=[a(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[a(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),a(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,Ar),a(`span`,jr,e(Me.value),1)])):F(``,!0),a(`div`,{class:`agent-chat-host`,style:Ne},[o(ee)?(x(),n(`div`,Mr,[c(o(p),{class:`is-loading`,size:32},{default:L(()=>[c(o(r))]),_:1}),a(`span`,null,e(o(Y)(`@AGENT:加载会话中...`)),1)])):(x(),y(o(J),{key:1,ref_key:`chatContainerRef`,ref:Re,messages:o(O),"preset-questions":Pe.value,"welcome-title":o(Y)(`@AGENT:智能体助手`),"welcome-description":o(Y)(`@AGENT:我可以帮你阅读代码、执行命令、修改文件。选择下方话题或直接输入你的问题。`),"assistant-name":o(he),"assistant-avatar":o(be),theme:ke.value,generating:o(k),"allow-queue":!0,queued:o(Z),"queue-paused":o(le),"queue-labels":o(ze),"upload-config":{accept:o(me)},"context-usage":o(ce),placeholder:o(k)?o(Y)(`@AGENT:生成中,发送后会排队,等本轮跑完自动接上…`):o(Y)(`@AGENT:输入消息,Enter 发送`),question:o(R),"question-submitting":o(z),"question-labels":o(Le),"plan-config":{labels:{title:o(Y)(`@AGENT:计划`),raw:o(Y)(`@AGENT:原始参数`)}},"message-rail-config":o(pe),"message-meta-config":o(ve),onSend:Fe,onSelect:Ie,onStop:o(X),onUnqueue:o(Te),onFlushQueued:o(Ee),onAnswer:o(ie),onRetry:o(re)},null,8,[`messages`,`preset-questions`,`welcome-title`,`welcome-description`,`assistant-name`,`assistant-avatar`,`theme`,`generating`,`queued`,`queue-paused`,`queue-labels`,`upload-config`,`context-usage`,`placeholder`,`question`,`question-submitting`,`question-labels`,`plan-config`,`message-rail-config`,`message-meta-config`,`onStop`,`onUnqueue`,`onFlushQueued`,`onAnswer`,`onRetry`]))])],64))])):_.value===`schedule`?(x(),y(Vn,{key:1,onOpenSession:He})):_.value===`skill`||_.value===`mcp`?(x(),y(bt,{key:2,type:v.value},null,8,[`type`])):(x(),y(Sr,{key:3}))])])],512))}}),[[`__scopeId`,`data-v-287616d8`]]);export{Nr as default};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,C as n,Dn as r,Dr as i,En as a,Fn as o,Fr as s,Gn as c,J as l,Jn as u,Jr as d,Ln as f,On as p,Pn as m,Qn as h,S as g,Sn as _,Vn as v,Xn as y,Y as ee,er as te,i as b,kn as x,lr as S,mr as C,tt as ne,w,xr as T}from"./element-plus-J45pKUrE.js";import{n as E,t as D}from"./_plugin-vue_export-helper-C3o7kvRL.js";import{t as O}from"./SvgIcon-0n6uuKFm.js";import{l as re}from"./configStore-BdL3uW2E.js";import{D as ie,V as ae,h as k}from"./index-BS7BDFG4.js";import{d as oe,f as A,m as j,n as se,p as M}from"./agentConversations-DpiGplZB.js";v(),C();function N(e,t=680){let n=T(0),r=null;function i(){let t=e.value;return t?(n.value=t.clientWidth,typeof ResizeObserver>`u`||(r=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width;typeof t==`number`&&(n.value=t)}),r.observe(t),!0)):!1}return y(()=>{i()||c(()=>i())}),u(()=>{r?.disconnect(),r=null}),{width:n,narrow:a(()=>n.value>0&&n.value<t)}}v(),C(),s();var P={class:`agent-engine`},F=[`disabled`,`title`,`aria-label`],I={class:`agent-engine__name`},L={class:`agent-engine__item`},R={class:`agent-engine__item-name`},z={key:3,class:`agent-engine__item-missing`},B=D(f({__name:`AgentEngineSelector`,props:{engine:{},locked:{type:Boolean}},emits:[`select`],setup(s,{emit:c}){let u=s,f=c,m=ae(),v=a(()=>M(u.engine)),y=a(()=>({gai:!0,claude:m.claudeAvailable,opencode:m.opencodeAvailable,codex:m.codexAvailable})),b=T(!1),C=T(null);function D(e){if(!u.locked){if(!y.value[e]){if(!j(e))return;C.value=e,b.value=!0;return}f(`select`,e)}}return(a,c)=>(h(),t(`div`,P,[o(i(g),{trigger:`click`,onCommand:D},{dropdown:S(()=>[o(i(w),null,{default:S(()=>[(h(!0),t(_,null,te(i(oe),a=>(h(),p(i(n),{key:a.id,command:a.id},{default:S(()=>[r(`span`,L,[i(j)(a.id)?(h(),p(k,{key:0,executor:a.id,class:`agent-engine__item-icon`},null,8,[`executor`])):(h(),p(O,{key:1,"icon-class":i(A),class:`agent-engine__item-icon`},null,8,[`icon-class`])),r(`span`,R,e(a.name),1),s.engine===a.id?(h(),p(i(l),{key:2,class:`agent-engine__item-check`},{default:S(()=>[o(i(ne))]),_:1})):y.value[a.id]?x(``,!0):(h(),t(`span`,z,e(i(E)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`]))),128))]),_:1})]),default:S(()=>[r(`button`,{type:`button`,class:d([`agent-engine__btn`,{"is-locked":s.locked}]),disabled:s.locked,title:s.locked?i(E)(`@AGENT:本会话的引擎已锁定;要换引擎请新建会话`):i(E)(`@AGENT:新建会话使用的引擎`),"aria-label":i(E)(`@AGENT:智能体引擎`)},[i(j)(s.engine)?(h(),p(k,{key:0,executor:s.engine,class:`agent-engine__icon`},null,8,[`executor`])):(h(),p(O,{key:1,"icon-class":i(A),class:`agent-engine__icon`},null,8,[`icon-class`])),r(`span`,I,e(v.value),1),o(i(l),{class:`agent-engine__caret`},{default:S(()=>[o(i(ee))]),_:1})],10,F)]),_:1}),o(ie,{modelValue:b.value,"onUpdate:modelValue":c[0]||=e=>b.value=e,tool:C.value},null,8,[`modelValue`,`tool`])]))}}),[[`__scopeId`,`data-v-cc0a8973`]]),V=8192;function H(e,t){return e.length>t?`…(前文已截断)\n${e.slice(-t)}`:e}function U(e,t){let n=e||`done`;return n!==`pending`&&n!==`running`||t===`running`||t===`pending`?n:t===`cancelled`||t===`error`?`error`:`done`}function W(e){let t=e?.toolCalls;if(!Array.isArray(t)||t.length===0)return[];let n=e?.status||`done`,r=[];for(let e=0;e<t.length;e++){let i=t[e];if(!i||typeof i!=`object`)continue;let a=U(i.status,n),o=typeof i.result==`string`?i.result:``;r.push({id:typeof i.id==`string`&&i.id?i.id:`tool-${e}`,name:typeof i.name==`string`?i.name:``,argsPreview:typeof i.argsPreview==`string`?i.argsPreview:``,arguments:typeof i.arguments==`string`?i.arguments:``,result:o?H(o,V):``,status:a,error:typeof i.error==`string`&&i.error?i.error:void 0})}return r}var G=`
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
`,K=`[运行环境 ·`,ce=`## 跨会话记忆库`,le=/\n\n---\n本任务包含 \d+ 个附件(请按文件路径读取[\s\S]*$/,ue=/\n\n续接 #\d+\s*$/;function q(e){let t=e.indexOf(G);return t===-1?0:t+7}function J(e){let t=typeof e==`string`?e:``;return t?(t.startsWith(K)&&(t=t.slice(q(t))),t.startsWith(ce)&&(t=t.slice(q(t))),t=t.replace(le,``).replace(ue,``),t.trim()):``}function Y(e){switch(e){case`todo`:return E(`@WORKBENCH:待执行`);case`running`:return E(`@WORKBENCH:执行中`);case`done`:return E(`@WORKBENCH:已完成`);case`error`:return E(`@WORKBENCH:出错`);case`cancelled`:return E(`@WORKBENCH:已取消`);case`pending`:return E(`@WORKBENCH:排队中`);default:return e}}function de(e){switch(e){case`running`:return`var(--color-primary)`;case`done`:return`#22c55e`;case`error`:return`#ef4444`;case`cancelled`:return`#9ca3af`;case`pending`:return`#f59e0b`;default:return`var(--text-tertiary)`}}function X(e){let t=e?new Date(e):new Date;if(Number.isNaN(t.getTime()))return``;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function fe(e,t=120){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function pe(e){let t=(e.match(/`+/g)||[]).reduce((e,t)=>Math.max(e,t.length),0),n="`".repeat(Math.max(3,t+1));return`${n}\n${e}\n${n}`}function Z(e,t){return`### ${e}\n\n${t.trim()}`}function me(e){let t=[];return e.forEach((e,n)=>{let r=e.name||E(`@WORKBENCH:工具`),i=fe(e.argsPreview||``);t.push(`${n+1}. **${r}**${i?` — \`${i}\``:``}`);let a=(e.status===`error`?e.error:e.result)||e.result||e.error||``;a.trim()&&t.push(``,pe(a.trim()))}),t.join(`
|
|
6
|
-
`)}function he(e,t={},n={}){let r=Array.isArray(e)?e.filter(Boolean):[],i=n.scope===`brief`,a=[];if(r.forEach((e,t)=>{let n=[],r=J(e.prompt);if(r&&n.push(Z(E(`@WORKBENCH:用户提示词`),r)),!i){let t=(e.thinking||``).trim();t&&n.push(Z(E(`@WORKBENCH:Claude 思考`),t));let r=me(W(e));r&&n.push(Z(E(`@WORKBENCH:工具调用`),r))}let o=(e.output||``).trim();o&&n.push(Z(E(`@WORKBENCH:模型返回`),o));let s=(e.error||e.agentError||``).trim();if(s&&n.push(Z(E(`@WORKBENCH:出错`),s)),n.length===0)return;let c=[re(e.agent),Y(e.status),X(e.startedAt)].filter(Boolean);a.push(`## ${E(`@WORKBENCH:第 {n} 轮`,{n:t+1})}\n\n*${c.join(` · `)}*\n\n${n.join(`
|
|
7
|
-
|
|
8
|
-
`)}`)}),a.length===0)return``;let o=[`# ${(t.title||``).trim()||E(`@WORKBENCH:未命名任务`)}`],s=(t.projectName||``).trim();return s&&o.push(``,`- ${E(`@WORKBENCH:项目:{name}`,{name:s})}`),o.push(`- ${E(`@WORKBENCH:导出时间:{time}`,{time:X((t.now||new Date).toISOString())})}`),`${o.join(`
|
|
9
|
-
`)}\n\n---\n\n${a.join(`
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
`)}\n`}function ge(e,t=120){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function _e(e){let t=(e.match(/`+/g)||[]).reduce((e,t)=>Math.max(e,t.length),0),n="`".repeat(Math.max(3,t+1));return`${n}\n${e}\n${n}`}function Q(e,t){return`### ${e}\n\n${t.trim()}`}function ve(e,t){return e===`user`?E(`@AGENT:我`):t}function ye(e){if(!Array.isArray(e)||!e.length)return``;let t=[];return e.forEach((e,n)=>{let r=e.name||E(`@AGENT:工具`),i=ge(e.argsPreview||``);t.push(`${n+1}. **${r}**${i?` — \`${i}\``:``}`);let a=(e.status===`error`?e.error:e.result)||e.result||e.error||``;a.trim()&&t.push(``,_e(a.trim()))}),t.join(`
|
|
14
|
-
`)}function be(e,t,n){if(e.role===`system`)return``;let r=[];if(t){let t=(e.reasoning||``).trim();t&&r.push(Q(E(`@AGENT:思考`),t));let n=ye(e.toolCalls);n&&r.push(Q(E(`@AGENT:工具调用`),n))}let i=(e.content||``).trim();i&&r.push(i);let a=(e.attachments||[]).map(e=>e.name).filter(Boolean);a.length&&r.push(`${E(`@AGENT:附件`)}:${a.join(`、`)}`);let o=(e.error||``).trim();if(o&&r.push(`> ⚠️ ${o}`),r.length===0){if(e.role!==`assistant`)return``;r.push(`*${E(`@AGENT:本轮未输出正文`)}*`)}return`## ${ve(e.role,n)}\n\n${r.join(`
|
|
15
|
-
|
|
16
|
-
`)}`}function xe(e,t={},n={}){let r=Array.isArray(e)?e.filter(Boolean):[],i=n.scope===`full`,a=(t.assistantName||``).trim()||`g ai`,o=[];for(let e of r){let t=be(e,i,a);t&&o.push(t)}if(o.length===0)return``;let s=[`${E(`@AGENT:导出时间`)}:${X((t.now||new Date).toISOString())}`],c=(t.engine||``).trim();return c&&s.push(`${E(`@AGENT:引擎`)}:${c}`),s.push(E(`@AGENT:共 {n} 条消息`,{n:o.length})),`${`# ${(t.title||``).trim()||E(`@AGENT:无标题`)}\n\n- ${s.join(` · `)}`}\n\n---\n\n${o.join(`
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
`)}\n`}v(),C(),s();var Se={class:`csb`},Ce=[`title`,`aria-label`],$={key:0,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},we={key:1,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},Te=[`title`,`aria-label`],Ee=D(f({__name:`CopySessionButton`,props:{messages:{},title:{},engine:{}},setup(a){let s=a,c=T(!1),l=null;u(()=>{l&&clearTimeout(l)});async function f(e){try{if(navigator?.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}async function p(e){let t=xe(s.messages||[],{title:s.title,engine:s.engine,assistantName:se},{scope:e});if(!t){b.warning(E(`@AGENT:暂无会话内容可复制`));return}if(!await f(t)){b.error(E(`@AGENT:复制失败`));return}c.value=!0,b.success(E(`@AGENT:已复制会话`)),l&&clearTimeout(l),l=setTimeout(()=>{c.value=!1,l=null},1500)}function _(e){p(e===`full`?`full`:`brief`)}return(a,s)=>{let l=n,u=w,f=g;return h(),t(`div`,Se,[r(`button`,{type:`button`,class:d([`csb__btn`,{"is-flash":c.value}]),title:i(E)(`@AGENT:复制本会话的对话内容(默认精简:仅对话正文)`),"aria-label":i(E)(`@AGENT:复制会话`),onClick:s[0]||=e=>p(`brief`)},[c.value?(h(),t(`svg`,$,[...s[1]||=[r(`polyline`,{points:`20 6 9 17 4 12`},null,-1)]])):(h(),t(`svg`,we,[...s[2]||=[r(`rect`,{x:`9`,y:`9`,width:`13`,height:`13`,rx:`2`},null,-1),r(`path`,{d:`M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1`},null,-1)]]))],10,Ce),o(f,{trigger:`click`,placement:`bottom-end`,onCommand:_},{dropdown:S(()=>[o(u,null,{default:S(()=>[o(l,{command:`brief`},{default:S(()=>[m(e(i(E)(`@AGENT:精简:对话正文`)),1)]),_:1}),o(l,{command:`full`},{default:S(()=>[m(e(i(E)(`@AGENT:全量:对话正文 + 思考 + 工具调用`)),1)]),_:1})]),_:1})]),default:S(()=>[r(`button`,{type:`button`,class:`csb__btn csb__caret`,title:i(E)(`@AGENT:选择复制范围`),"aria-label":i(E)(`@AGENT:选择复制范围`)},[...s[3]||=[r(`svg`,{viewBox:`0 0 24 24`,width:`11`,height:`11`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[r(`polyline`,{points:`6 9 12 15 18 9`})],-1)]],8,Te)]),_:1})])}}}),[[`__scopeId`,`data-v-065fed5e`]]);export{J as a,N as c,Y as i,he as n,W as o,de as r,B as s,Ee as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$r as e,An as t,Dn as n,Dr as r,En as i,Fn as a,Fr as o,Gn as s,Jn as c,Jr as l,Ln as u,Nn as ee,On as d,Pn as f,Qn as p,Sn as m,Sr as te,Vn as h,W as ne,Xn as re,Xr as g,bn as ie,dn as ae,er as oe,i as _,kn as v,lr as se,mn as ce,mr as y,r as le,sr as b,ur as x,vn as ue,wn as de,xn as S,xr as C,yn as fe}from"./element-plus-J45pKUrE.js";import{a as pe,n as w,r as me}from"./vendor-B3NyhlYR.js";import{n as T,t as E}from"./_plugin-vue_export-helper-C3o7kvRL.js";import{t as he}from"./SvgIcon-0n6uuKFm.js";import{t as ge}from"./configStore-BdL3uW2E.js";import{a as _e,c as ve,i as ye,n as be,o as xe,r as Se,s as Ce}from"./monaco-ChZ0d0qB.js";import{n as we,r as Te}from"./flow-mindmap-DvB74LE1.js";import{A as Ee,F as De,I as Oe,L as ke,M as Ae,N as je,P as Me,R as Ne,a as Pe,f as Fe,j as Ie}from"./index-BS7BDFG4.js";import{a as Le,c as Re,i as ze,l as Be,n as Ve,o as He,p as Ue,r as We,s as D,t as Ge,u as Ke}from"./agentConversations-DpiGplZB.js";import{c as qe,s as Je,t as Ye}from"./CopySessionButton-D0wFpk8a.js";function Xe(e){return{ts:`typescript`,tsx:`typescript`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,jsx:`javascript`,vue:`html`,html:`html`,htm:`html`,css:`css`,scss:`scss`,less:`less`,json:`json`,jsonc:`json`,md:`markdown`,markdown:`markdown`,yaml:`yaml`,yml:`yaml`,toml:`ini`,xml:`xml`,svg:`xml`,sh:`shell`,bash:`shell`,zsh:`shell`,fish:`shell`,ps1:`powershell`,py:`python`,go:`go`,rs:`rust`,java:`java`,kt:`kotlin`,rb:`ruby`,php:`php`,c:`c`,cpp:`cpp`,h:`cpp`,cs:`csharp`,sql:`sql`,graphql:`graphql`,gql:`graphql`,txt:`plaintext`,log:`plaintext`,ini:`ini`,env:`ini`,gitignore:`ini`,dockerfile:`dockerfile`}[e.toLowerCase()]??`plaintext`}h(),y();var Ze={class:`mindmap-preview`},Qe={class:`mindmap-preview-canvas`},$e=E(u({__name:`MindmapPreview`,props:{content:{}},setup(e){let o=e,s=i(()=>Te(o.content||``,`未命名文档`));return(e,i)=>(p(),t(`div`,Ze,[i[0]||=n(`div`,{class:`mindmap-preview-header`},[n(`span`,{class:`mindmap-preview-title`},`整篇导图`),n(`span`,{class:`mindmap-preview-hint`},`基于整篇 Markdown 自动生成 · 阅读模式`)],-1),n(`div`,Qe,[a(r(we),{data:s.value,"preview-mode":``},null,8,[`data`])])]))}}),[[`__scopeId`,`data-v-d2fe328b`]]);h(),y(),o(),ae();var et={class:`agent-panel-header`},tt=[`title`,`aria-label`],nt={class:`agent-panel-title`},O={key:1,class:`agent-panel-title`},k=[`title`,`aria-label`],A=[`title`],rt={class:`agent-panel-convs`},it=[`data-theme`],at=[`title`],ot={class:`agent-context-att-name`},st=[`title`,`aria-label`],ct=E(u({__name:`EditorAgentPanel`,props:{activeFilePath:{},activeFileName:{},active:{type:Boolean}},emits:[`close`],setup(o,{emit:u}){let f=o,te=u,{theme:h}=De(),ne=i(()=>h.value===`dark`?`dark`:`light`),{sessions:g,sessionsLoading:ie,currentSessionId:ae,messages:oe,isStreaming:_,questionPanel:se,answeringQuestion:ce,isSessionGenerating:y,currentEngine:le,pendingEngine:ue,isEngineLocked:S,pickEngine:E,loadSessions:he,loadSession:ge,deleteSession:_e,renameSession:ve,newSession:ye,sendMessage:be,retryTurn:xe,answerQuestion:Se,stop:Ce,inputContextUsage:we,queuedMessages:Te,queuePaused:Ee,removeQueuedMessage:Oe,flushQueued:ke}=Ke(),Ae=i(()=>S.value?le.value:ue.value);function je(e){S.value||E(e)}let Me=i(()=>Re(g.value,y)),Ne=Le(),Pe=He(),Fe=D(),Ie=i(()=>Me.value.find(e=>e.id===ae.value)?.title||``),Xe=C(null),Ze=C(null),Qe=C(null),$e=C(null),ct=C(null),{width:j,narrow:M}=qe(ct),N=C(`chat`),P=C(null),F=C(!1),I=null,L=i(()=>!!f.activeFileName&&!F.value);function lt(e){return Array.from(e.children).find(e=>e.classList?.contains(`acu-input-attachments`))??null}function R(){let e=Ze.value?.$el;if(!e)return;let t=e.querySelector(`.agent-context-slot`);if(!L.value){if(!t)return;P.value=null,s(()=>t.remove());return}let n=P.value&&e.contains(P.value)?P.value:t;n||(n=document.createElement(`div`),n.className=`agent-context-slot`);let r=lt(e),i=r??e;n.parentElement!==i&&i.insertBefore(n,r?r.firstChild:e.firstChild),P.value=n}function ut(e=!0){Xe.value?.scrollToBottom(e)}async function z(e){let t=F.value?void 0:f.activeFilePath||void 0;await be(e.text,e.files,{openFilePath:t}),await s(),ut()}function dt(e){ge(e),N.value=`chat`}function ft(){ye(),N.value=`chat`}b(()=>oe.value.length,()=>{s(()=>ut(!1))});function pt(){let e=$e.value;!e||typeof MutationObserver>`u`||(I?.disconnect(),I=new MutationObserver(()=>R()),I.observe(e,{childList:!0,subtree:!0}))}return b(()=>f.active,e=>{e&&(N.value=`chat`,he().catch(()=>{}),s(()=>{R(),ut(!1)}))}),b(M,e=>{e||(N.value=`chat`)}),b(()=>f.activeFilePath,()=>{F.value=!1}),b(L,e=>{e&&s(R)}),re(()=>{he().catch(()=>{}),s(()=>{R(),pt()})}),c(()=>{I?.disconnect(),I=null,P.value=null}),(i,s)=>(p(),t(`div`,{ref_key:`rootRef`,ref:ct,class:`editor-agent-panel`},[n(`div`,et,[r(M)&&N.value===`list`?(p(),t(m,{key:0},[n(`button`,{class:`agent-panel-icon-btn agent-panel-back-btn`,title:r(T)(`@EDITOR:返回对话`),"aria-label":r(T)(`@EDITOR:返回对话`),onClick:s[0]||=e=>N.value=`chat`},[...s[4]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),n(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,tt),n(`span`,nt,e(r(T)(`@EDITOR:会话列表`)),1)],64)):(p(),t(`span`,O,e(r(T)(`@EDITOR:g ai 对话`)),1)),s[7]||=n(`div`,{class:`agent-panel-spacer`},null,-1),!r(M)||N.value===`chat`?(p(),d(Je,{key:2,class:`agent-panel-engine`,engine:Ae.value,locked:r(S),onSelect:je},null,8,[`engine`,`locked`])):v(``,!0),!r(M)||N.value===`chat`?(p(),d(Ye,{key:3,class:`agent-panel-copy`,messages:r(oe),title:Ie.value,engine:r(Ue)(Ae.value)},null,8,[`messages`,`title`,`engine`])):v(``,!0),r(M)&&N.value===`chat`?(p(),t(`button`,{key:4,class:`agent-panel-icon-btn agent-panel-list-btn`,title:r(T)(`@EDITOR:会话列表`),"aria-label":r(T)(`@EDITOR:会话列表`),onClick:s[1]||=e=>N.value=`list`},[...s[5]||=[ee(`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-15f906cd><line x1="8" y1="6" x2="21" y2="6" data-v-15f906cd></line><line x1="8" y1="12" x2="21" y2="12" data-v-15f906cd></line><line x1="8" y1="18" x2="21" y2="18" data-v-15f906cd></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-15f906cd></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-15f906cd></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-15f906cd></line></svg>`,1)]],8,k)):v(``,!0),n(`button`,{class:`agent-panel-icon-btn`,title:r(T)(`@EDITOR:关闭对话`),onClick:s[2]||=e=>te(`close`)},[...s[6]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`},[n(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),n(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,A)]),n(`div`,{class:l([`agent-panel-body`,{"is-wide":!r(M)}])},[x(n(`div`,rt,[a(r(me),{"show-search":!0,items:Me.value,"active-id":r(ae),loading:r(ie),labels:r(Ne),onSelect:dt,onNew:ft,onRename:r(ve),onDelete:r(_e)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[fe,!r(M)||N.value===`list`]]),x(n(`div`,{ref_key:`chatHostRef`,ref:Qe,class:`agent-panel-chat`},[a(r(pe),{ref_key:`chatRef`,ref:Xe,"show-input":!1,messages:r(oe),"assistant-name":r(Ve),"assistant-avatar":r(Ge),theme:ne.value,question:r(se),"question-submitting":r(ce),"question-labels":r(Pe),"plan-config":{labels:{title:r(T)(`@AGENT:计划`),raw:r(T)(`@AGENT:原始参数`)}},"message-rail-config":r(ze),"message-meta-config":r(We),onAnswer:r(Se),onRetry:r(xe)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`message-rail-config`,`message-meta-config`,`onAnswer`,`onRetry`])],512),[[fe,!r(M)||N.value===`chat`]]),r(j)>0?(p(),t(`div`,{key:0,ref_key:`composerRef`,ref:$e,class:`agent-panel-composer acu-root`,"data-theme":ne.value},[a(r(w),{ref_key:`inputRef`,ref:Ze,generating:r(_),"allow-queue":!0,queued:r(Te),"queue-paused":r(Ee),"queue-labels":r(Fe),placeholder:r(_)?r(T)(`@AGENT:生成中,发送后会排队,等本轮跑完自动接上…`):r(T)(`@AGENT:输入消息,Enter 发送`),"upload-config":{accept:r(Be)},"context-usage":r(we),onSend:z,onStop:r(Ce),onUnqueue:r(Oe),onFlushQueued:r(ke)},null,8,[`generating`,`queued`,`queue-paused`,`queue-labels`,`placeholder`,`upload-config`,`context-usage`,`onStop`,`onUnqueue`,`onFlushQueued`]),P.value?(p(),d(de,{key:0,to:P.value},[L.value?(p(),t(`div`,{key:0,class:`agent-context-att`,title:o.activeFilePath||``},[s[9]||=n(`svg`,{class:`agent-context-att-icon`,viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.7`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[n(`path`,{d:`M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z`}),n(`polyline`,{points:`14 3 14 8 19 8`})],-1),n(`span`,ot,e(o.activeFileName),1),n(`button`,{type:`button`,class:`agent-context-att-remove`,title:r(T)(`@EDITOR:不引用当前文档`),"aria-label":r(T)(`@EDITOR:不引用当前文档`),onClick:s[3]||=e=>F.value=!0},[...s[8]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,"stroke-linecap":`round`,"aria-hidden":`true`},[n(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),n(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,st)],8,at)):v(``,!0)],8,[`to`])):v(``,!0)],8,it)):v(``,!0)],2)],512))}}),[[`__scopeId`,`data-v-15f906cd`]]),j=1080,M=6e5,N=.86;function P(e){if(!e||e.startsWith(`data:`))return!1;if(e.startsWith(`blob:`)||e.startsWith(`/`))return!0;try{return new URL(e,location.href).origin===location.origin}catch{return!1}}async function F(e){try{let t=await fetch(e);if(!t.ok)return null;let n=await t.blob();return await new Promise(e=>{let t=new FileReader;t.onload=()=>e(t.result||``),t.onerror=()=>e(``),t.readAsDataURL(n)})}catch{return null}}function I(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,t(e))};if(typeof Image>`u`){r(e);return}let i=new Image,a=setTimeout(()=>r(e),4e3);i.onload=()=>{if(clearTimeout(a),!(i.naturalWidth>j||e.length>M)){r(e);return}try{let t=Math.min(1,j/i.naturalWidth),n=Math.max(1,Math.round(i.naturalWidth*t)),a=Math.max(1,Math.round(i.naturalHeight*t)),o=document.createElement(`canvas`);o.width=n,o.height=a;let s=o.getContext(`2d`);if(!s){r(e);return}s.fillStyle=`#ffffff`,s.fillRect(0,0,n,a),s.drawImage(i,0,0,n,a),r(o.toDataURL(`image/jpeg`,N))}catch{r(e)}},i.onerror=()=>{clearTimeout(a),r(e)},i.src=e})}async function L(e){let t=await F(e);return t?I(t):null}async function lt(e){let t=Array.from(e.querySelectorAll(`img`)).filter(e=>P(e.getAttribute(`src`)||``)),n=0;return await Promise.all(t.map(async e=>{let t=await L(e.getAttribute(`src`)||``);t?e.setAttribute(`src`,t):n+=1})),n}function R(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}var ut={h1:`font-size:26px;font-weight:700;line-height:1.35;margin:28px 0 16px;color:#111;`,h2:`font-size:22px;font-weight:700;line-height:1.4;margin:26px 0 14px;color:#111;`,h3:`font-size:19px;font-weight:700;line-height:1.45;margin:22px 0 12px;color:#222;`,h4:`font-size:17px;font-weight:600;line-height:1.5;margin:20px 0 10px;color:#333;`,h5:`font-size:16px;font-weight:600;line-height:1.5;margin:18px 0 8px;color:#333;`,h6:`font-size:15px;font-weight:600;line-height:1.5;margin:18px 0 8px;color:#555;`,p:`font-size:16px;line-height:1.8;margin:16px 0;color:#333;`,li:`font-size:16px;line-height:1.8;margin:0 0 6px;color:#333;`,ul:`margin:16px 0;padding-left:24px;`,ol:`margin:16px 0;padding-left:24px;`,blockquote:`margin:16px 0;padding:8px 16px;border-left:4px solid #e2e2e2;background:#f7f7f7;color:#666;font-size:15px;line-height:1.8;`,hr:`border:none;border-top:1px solid #e5e5e5;margin:26px 0;`,a:`color:#576b95;text-decoration:none;`,strong:`font-weight:700;color:#111;`,em:`font-style:italic;color:#555;`,code:`font-family:Menlo,Consolas,Monaco,monospace;font-size:0.92em;background:#f2f3f5;color:#c7254e;padding:1px 5px;border-radius:3px;`,pre:`font-family:Menlo,Consolas,Monaco,monospace;font-size:13px;line-height:1.6;background:#f6f8fa;color:#24292f;padding:12px 14px;border-radius:6px;overflow-x:auto;margin:16px 0;`,table:`border-collapse:collapse;width:100%;margin:16px 0;font-size:14px;`,th:`border:1px solid #e0e0e0;padding:8px 10px;background:#f6f8fa;font-weight:600;text-align:left;color:#333;`,td:`border:1px solid #e0e0e0;padding:8px 10px;color:#333;`,img:`max-width:100%;height:auto;display:block;margin:16px auto;border-radius:6px;`};function z(e){e.querySelectorAll(`*`).forEach(e=>{let t=ut[e.tagName.toLowerCase()];t&&e.setAttribute(`style`,t)}),e.querySelectorAll(`pre code`).forEach(e=>e.setAttribute(`style`,`background:none;padding:0;color:inherit;font-size:inherit;`))}async function dt(e,t){let n=e.cloneNode(!0),r=t?await lt(n):0;return{html:n.innerHTML,leftover:r}}async function ft(e,t){let n=e.cloneNode(!0),r=t.inline?await lt(n):0;z(n);let i=(t.title||``).trim();return{html:`<section style="font-size:16px;line-height:1.8;color:#333;word-break:break-word;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;">${i?`<h1 style="font-size:26px;font-weight:700;line-height:1.35;margin:0 0 22px;color:#111;">${R(i)}</h1>`:``}${n.innerHTML}</section>`,leftover:r}}h(),y(),o(),ae();var pt={class:`sidebar-header`},mt={class:`sidebar-title`},ht={class:`sidebar-actions`},gt={class:`sidebar-search`},_t=[`placeholder`,`title`],vt=[`title`,`aria-label`],yt={key:0,class:`sidebar-tree`},bt={key:1,class:`tree-arrow-spacer`},xt={class:`tree-icon mit-icon`,"aria-hidden":`true`},St=[`xlink:href`],Ct=[`onClick`,`onContextmenu`],wt={key:1,class:`tree-arrow-spacer`},Tt={key:2,class:`tree-icon mit-icon`,"aria-hidden":`true`},Et=[`xlink:href`],Dt={key:3,class:`tree-icon mit-icon`,"aria-hidden":`true`},Ot=[`xlink:href`],kt=[`title`],At={key:0,class:`tree-name-hit`},jt={key:4,class:`tree-loading`},Mt={key:0,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{"flex-shrink":`0`,color:`var(--color-warning-dark)`}},Nt={key:1,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{"flex-shrink":`0`,color:`var(--text-meta)`}},Pt=[`placeholder`],Ft={key:0,class:`tree-node tree-inline-input-row`,style:{paddingLeft:`12px`}},It={key:0,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{"flex-shrink":`0`,color:`var(--color-warning-dark)`}},Lt={key:1,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{"flex-shrink":`0`,color:`var(--text-meta)`}},Rt=[`placeholder`],zt={key:1,class:`tree-empty`},Bt={key:1,class:`sidebar-loading`},Vt={class:`editor-main`},Ht={key:0,class:`editor-tabs`},Ut=[`onClick`,`title`],Wt={class:`tab-name`},Gt={key:0,class:`tab-dirty-dot`},Kt=[`onClick`],qt=[`title`],Jt=[`disabled`,`title`],Yt=[`title`],Xt={class:`editor-body`},Zt={key:0,class:`image-tab-placeholder`},Qt={viewBox:`0 0 24 24`,width:`56`,height:`56`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,style:{opacity:`.35`}},$t={class:`image-tab-placeholder-title`},en={class:`image-tab-placeholder-hint`},tn={class:`preview-header`},nn={class:`preview-title`},rn={class:`preview-ext-badge`},an=[`title`],on={class:`preview-body`},sn={key:0,class:`preview-copybar`},cn=[`disabled`,`title`],ln=[`disabled`,`title`],un=[`disabled`,`title`],dn=[`title`],fn=[`sandbox`,`srcdoc`],pn=6e4,mn=3e4,hn=E(u({__name:`EditorView`,props:{pendingFilePath:{}},setup(o){self.MonacoEnvironment={getWorker(e,t){return t===`json`?new Ce:t===`css`||t===`scss`||t===`less`?new xe:t===`html`||t===`handlebars`||t===`razor`?new _e:t===`typescript`||t===`javascript`?new ye:new ve}};let u=o,h=ge(),ae=Fe(),y=C([]),pe=C(!1),w=C(``),me=C(``),E=null;function we(){w.value=``,me.value=``,E&&=(clearTimeout(E),null)}b(w,e=>{E&&clearTimeout(E),E=setTimeout(()=>{me.value=e,E=null},180)}),c(()=>{E&&clearTimeout(E),Re(),wn()});let Te=null;function Le(){Re(),h.ui.fileTreeAutoRefresh&&(Te=setInterval(()=>{document.hidden||h.currentDirectory&&(w.value.trim()||D())},pn))}function Re(){Te&&=(clearInterval(Te),null)}b(()=>h.currentDirectory,async()=>{if(j=!1,Le(),await Be(),O.value.some(e=>e.isDirty)){j=!0;return}O.value=[],k.value=null,R(),await P()}),b(()=>h.ui.fileTreeAutoRefresh,()=>{Le()});async function ze(e,t=0){let n=await(await fetch(`/api/browse_directory?path=${encodeURIComponent(e)}`)).json();return n.success?n.items.map(e=>({...e,depth:t,expanded:!1,loading:!1,children:(e.type,void 0)})):[]}async function Be(){let e=h.currentDirectory;if(e){pe.value=!0;try{y.value=await ze(e,0)}finally{pe.value=!1}}}function Ve(e,t=new Set){for(let n of e)n.type===`directory`&&n.expanded&&(t.add(n.path),n.children&&Ve(n.children,t));return t}function He(e,t=0){return(e||[]).map(e=>{let n={name:e.name,path:e.path,type:e.type,depth:t,expanded:!1,loading:!1};return n.type===`directory`&&Array.isArray(e.children)&&(n.children=He(e.children,t+1),n.expanded=!0),n})}async function Ue(e){let t=h.currentDirectory;if(!t)return null;try{let n=await(await fetch(`/api/browse_directory_tree`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:t,expand:e})})).json().catch(()=>null);return!n?.success||!Array.isArray(n.items)?null:He(n.items,0)}catch{return null}}function We(e,t){let n=new Map(e.map(e=>[e.path,e])),r=e.length!==t.length;if(!r){for(let n=0;n<t.length;n++)if(e[n].path!==t[n].path){r=!0;break}}for(let e=0;e<t.length;e++){let i=t[e],a=n.get(i.path);a&&(t[e]=a,a.name!==i.name&&(a.name=i.name,r=!0),a.type===`directory`&&a.expanded&&Array.isArray(i.children)&&(Array.isArray(a.children)?We(a.children,i.children)&&(a.children=i.children,r=!0):(a.children=i.children,r=!0)))}return r}async function D(e={}){if(!h.currentDirectory)return;let t=await Ue([...Ve(y.value)]);if(!t){e.notifyOnError&&_.error(T(`@EDITOR:刷新失败`));return}if(y.value.length===0){y.value=t;return}We(y.value,t)&&(y.value=t)}async function Ge(e){if(e.type===`directory`){if(e.expanded)e.expanded=!1;else{if(!e.children){e.loading=!0;try{e.children=await ze(e.path,e.depth+1)}finally{e.loading=!1}}e.expanded=!0}}}function Ke(e){let t=[];for(let n of e)t.push(n),n.type===`directory`&&n.expanded&&n.children&&t.push(...Ke(n.children));return t}let qe=i(()=>me.value.trim().toLowerCase());function Je(e,t){if(!t)return e;let n=[];for(let r of e){let e=r.children?Je(r.children,t):[],i=r.name.toLowerCase().includes(t);r.type===`directory`?(i||e.length>0)&&(r.expanded=!0,r.children!==void 0&&(r.children=e),n.push(r)):i&&n.push(r)}return n}let Ye=i(()=>Je(y.value,qe.value)),Ze=i(()=>qe.value.length>0&&Ye.value.length===0);function Qe(e){let t=me.value.trim();if(!t)return[{text:e,hit:!1}];let n=e.toLowerCase(),r=t.toLowerCase(),i=[],a=0,o=n.indexOf(r,a);for(;o!==-1;)o>a&&i.push({text:e.slice(a,o),hit:!1}),i.push({text:e.slice(o,o+r.length),hit:!0}),a=o+r.length,o=n.indexOf(r,a);return a<e.length&&i.push({text:e.slice(a),hit:!1}),i}let et=C(null);function tt(){let e=et.value;e&&(e.focus(),e.select())}function nt(){w.value?(we(),et.value?.focus()):(et.value?.blur(),I.value?.focus())}let O=C([]),k=C(null),A=C(null);async function rt(e){if(A.value=e,e.type!==`file`){Ge(e);return}let t=O.value.find(t=>t.path===e.path);if(console.log(`[debug-open-in-editor] EditorView openFile existing tab check:`,{path:e.path,found:!!t,tabsCount:O.value.length}),t){k.value=e.path,s(()=>z());return}let n=e.name.split(`.`).pop()||``;if(sr.has(n.toLowerCase())){let t={path:e.path,name:e.name,content:``,originalContent:``,isDirty:!1,language:`plaintext`,diskMtimeMs:null};O.value.push(t),k.value=e.path,q.value=!0;return}if(Oe(e.name)){let t={path:e.path,name:e.name,content:``,originalContent:``,isDirty:!1,language:`office`,diskMtimeMs:null};O.value.push(t),k.value=e.path,J.value=!1,q.value=!0;return}try{let t=await fetch(`/api/editor/file?path=${encodeURIComponent(e.path)}`),r=await t.json();if(console.log(`[debug-open-in-editor] EditorView fetch /api/editor/file response:`,{path:e.path,status:t.status,data:r}),!r.success){_.error(`${T(`@EDITOR:打开文件失败: `)}${r.error}`);return}let i=Xe(n),a=L.get(e.path);a&&!a.isDisposed()&&a.setValue(r.content);let o={path:e.path,name:e.name,content:r.content,originalContent:r.content,isDirty:!1,language:i,diskMtimeMs:typeof r.mtimeMs==`number`?r.mtimeMs:null};console.log(`[debug-open-in-editor] EditorView pushing tab:`,{path:o.path,name:o.name,contentLen:o.content.length,lang:o.language}),O.value.push(o),k.value=e.path,console.log(`[debug-open-in-editor] EditorView tabs after push:`,O.value.length,`activeTabPath=`,k.value)}catch(e){console.log(`[debug-open-in-editor] EditorView fetch threw:`,e),_.error(`${T(`@EDITOR:打开文件失败: `)}${e.message}`)}}b(()=>u.pendingFilePath,async e=>{if(console.log(`[debug-open-in-editor] EditorView watcher fired, filePath=`,e),!e)return;await s();let t=e.split(/[\\/]/).pop()||e;console.log(`[debug-open-in-editor] EditorView calling openFile, name=`,t,`path=`,e),await rt({name:t,path:e,type:`file`,depth:0}),console.log(`[debug-open-in-editor] EditorView openFile returned`)},{immediate:!0});function it(e,t){t.stopPropagation();let n=O.value.findIndex(t=>t.path===e);n!==-1&&(!O.value[n].isDirty||confirm(T(`@EDITOR:文件未保存,确认关闭?`)))&&(O.value.splice(n,1),k.value===e&&(k.value=O.value[Math.min(n,O.value.length-1)]?.path??null))}let at=()=>O.value.find(e=>e.path===k.value)??null,ot=i(()=>({expandedDirs:[...Ve(y.value)],tabs:O.value.map(e=>e.path),activeTab:k.value})),st=!1,j=!1;function M(){j&&!st&&h.isUiLoaded&&h.saveEditorWorkspace(ot.value)}b(ot,()=>M());async function N(e){if(O.value.some(t=>t.path===e))return;let t=e.split(/[\\/]/).pop()||e,n=(t.split(`.`).pop()||``).toLowerCase();if(sr.has(n)){O.value.push({path:e,name:t,content:``,originalContent:``,isDirty:!1,language:`plaintext`,diskMtimeMs:null});return}if(Oe(t)){O.value.push({path:e,name:t,content:``,originalContent:``,isDirty:!1,language:`office`,diskMtimeMs:null});return}try{let r=await(await fetch(`/api/editor/file?path=${encodeURIComponent(e)}`)).json();if(!r.success)return;let i=L.get(e);i&&!i.isDisposed()&&I.value?.getModel()!==i&&(i.dispose(),L.delete(e)),O.value.push({path:e,name:t,content:r.content,originalContent:r.content,isDirty:!1,language:Xe(n),diskMtimeMs:typeof r.mtimeMs==`number`?r.mtimeMs:null})}catch{}}async function P(){try{for(let e=0;e<100&&!h.isUiLoaded;e++)await new Promise(e=>setTimeout(e,50));if(!h.isUiLoaded)return;V.value=h.ui.editorSidebarWidth;let e=h.getEditorWorkspace();if(!e)return;st=!0;try{if(e.expandedDirs.length>0){let t=await Ue(e.expandedDirs);t&&(y.value=t)}for(let t of e.tabs)await N(t);if(!u.pendingFilePath&&e.activeTab&&O.value.some(t=>t.path===e.activeTab)){k.value=e.activeTab;let t=at(),n=(t?.name.split(`.`).pop()||``).toLowerCase();t&&(sr.has(n)||Oe(t.name))&&(q.value=!0)}}finally{st=!1}}finally{j=!0,M()}}let F=C(null),I=te(null),L=new Map;function lt(e){let t=L.get(e.path);return(!t||t.isDisposed())&&(t=Se.createModel(e.content,e.language,be.file(e.path)),L.set(e.path,t)),t}function R(){I.value?.setModel(null);for(let e of L.values())e.isDisposed()||e.dispose();L.clear()}function ut(){if(!F.value)return;let e=document.documentElement.getAttribute(`data-theme`)===`dark`;I.value=Se.create(F.value,{theme:e?`vs-dark`:`vs`,fontSize:13,lineHeight:20,fontFamily:`'JetBrains Mono', 'Fira Code', 'Cascadia Code', Consolas, monospace`,minimap:{enabled:!0},scrollBeyondLastLine:!1,renderWhitespace:`selection`,automaticLayout:!0,tabSize:2,wordWrap:`off`,smoothScrolling:!0,cursorBlinking:`smooth`,padding:{top:8,bottom:8},editContext:!1}),I.value.onDidChangeModelContent(()=>{let e=at();if(!e)return;let t=I.value.getValue();e.content=t,e.isDirty=t!==e.originalContent}),I.value.onDidBlurEditorText(()=>{h.ui.editorAutoSave&&at()?.isDirty&&Dn(!1),requestAnimationFrame(()=>{if(!B.value||B.value.offsetParent===null)return;let e=document.activeElement;e&&(e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable||e.classList?.contains(`native-edit-context`)||e.classList?.contains(`monaco-editor`))||z()})})}b(k,e=>{if(!I.value||!e)return;let t=O.value.find(t=>t.path===e);if(!t)return;let n=lt(t);I.value.setModel(n),s(()=>z()),bn(e)});function z(){if(!I.value)return;I.value.focus();let e=document.querySelector(`.monaco-editor .native-edit-context`);e&&document.activeElement!==e&&requestAnimationFrame(()=>e.focus?.())}let hn=0,gn=new Map;async function _n(e){try{let t=await(await fetch(`/api/editor/file?path=${encodeURIComponent(e)}&meta=1`)).json();return!t?.success||typeof t.mtimeMs!=`number`?null:{mtimeMs:t.mtimeMs}}catch{return null}}async function vn(e){try{let t=await(await fetch(`/api/editor/file?path=${encodeURIComponent(e)}`)).json();return t?.success?{content:t.content,mtimeMs:typeof t.mtimeMs==`number`?t.mtimeMs:null}:null}catch{return null}}function yn(e,t,n){e.content=t,e.originalContent=t,e.isDirty=!1,e.diskMtimeMs=n;let r=L.get(e.path);if(!r||r.isDisposed())return;let i=I.value;if(!i||i.getModel()!==r){r.setValue(t);return}let a=i.saveViewState();r.pushEditOperations([],[{range:r.getFullModelRange(),text:t}],()=>null),i.restoreViewState(a)}async function bn(e){if(!e)return;let t=O.value.find(t=>t.path===e);if(!t||t.diskMtimeMs===null)return;let n=++hn,r=await _n(e);if(n!==hn||O.value.find(t=>t.path===e)!==t||!r||r.mtimeMs===t.diskMtimeMs)return;if(t.isDirty){if(gn.get(e)===r.mtimeMs)return;gn.set(e,r.mtimeMs);try{await le.confirm(T(`@EDITOR:这个文件在磁盘上已被改动,你这边也有未保存的编辑。重新加载会丢弃你的改动。`),T(`@EDITOR:文件已被外部改动`),{confirmButtonText:T(`@EDITOR:重新加载`),cancelButtonText:T(`@EDITOR:保留我的`),type:`warning`})}catch{return}if(t.isDirty)return}let i=await vn(e);i&&O.value.find(t=>t.path===e)===t&&yn(t,i.content,i.mtimeMs)}function xn(){document.hidden||bn(k.value)}let Sn=null;function Cn(){wn(),Sn=setInterval(()=>{document.hidden||bn(k.value)},mn)}function wn(){Sn&&=(clearInterval(Sn),null)}b(()=>O.value.filter(e=>e.isDirty).length,e=>{ae.setDirtyCount(e)},{immediate:!0}),c(()=>ae.setDirtyCount(0)),De(()=>{let e=document.documentElement.getAttribute(`data-theme`)===`dark`;Se.setTheme(e?`vs-dark`:`vs`)});let Tn=null;function En(){if(Tn||!B.value)return;let e=[B.value],t=B.value.parentElement;for(;t;){if(t.classList.contains(`view-pane`)||t.classList.contains(`editor-pane`)){e.push(t);break}t=t.parentElement}Tn=new MutationObserver(()=>{B.value&&B.value.offsetParent!==null&&k.value&&I.value&&(bn(k.value),requestAnimationFrame(()=>{let e=document.activeElement;e&&(e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable||e.classList?.contains(`native-edit-context`)||e.classList?.contains(`monaco-editor`))||z()}))});let n=Tn;e.forEach(e=>n.observe(e,{attributes:!0,attributeFilter:[`style`,`class`,`hidden`]}))}re(async()=>{ut(),await Be(),await P(),En(),Le(),window.addEventListener(`focus`,xn),document.addEventListener(`visibilitychange`,xn),Cn(),k.value&&s(()=>z())}),c(()=>{Tn?.disconnect(),Tn=null,window.removeEventListener(`focus`,xn),document.removeEventListener(`visibilitychange`,xn),I.value?.dispose(),L.forEach(e=>e.dispose()),L.clear()});async function Dn(e=!1){let t=at();if(t)try{let n=await(await fetch(`/api/editor/file`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:t.path,content:t.content})})).json();if(!n.success){_.error(`${T(`@EDITOR:保存失败: `)}${n.error}`);return}t.originalContent=t.content,t.isDirty=!1,typeof n.mtimeMs==`number`&&(t.diskMtimeMs=n.mtimeMs),e||_.success(T(`@EDITOR:已保存`))}catch(e){_.error(`${T(`@EDITOR:保存失败: `)}${e.message}`)}}function On(e){let t=e.ctrlKey||e.metaKey;if(t&&e.key.toLowerCase()===`f`){e.preventDefault(),tt();return}t&&e.key===`s`&&(e.preventDefault(),Dn())}re(()=>window.addEventListener(`keydown`,On)),c(()=>window.removeEventListener(`keydown`,On));let B=C(null),V=C(h.ui.editorSidebarWidth),kn=!1,An=0,jn=0;function Mn(e){kn=!0,An=e.clientX,jn=V.value,document.addEventListener(`mousemove`,Nn),document.addEventListener(`mouseup`,Pn),e.preventDefault()}function Nn(e){if(!kn)return;let t=e.clientX-An;V.value=Math.max(140,Math.min(400,jn+t))}function Pn(){kn=!1,document.removeEventListener(`mousemove`,Nn),document.removeEventListener(`mouseup`,Pn),V.value!==h.ui.editorSidebarWidth&&h.setEditorSidebarWidth(V.value)}function Fn(e){return e.type===`directory`?Ne(e.name):ke(e.name)}let H=C(null),U=C(null),W=C(null),In=C(null);function Ln(){let e=A.value;return e?e.type===`directory`?{parentPath:e.path,afterNode:e,depth:e.depth+1}:{parentPath:e.path.includes(`/`)||e.path.includes(`\\`)?e.path.replace(/[\\/][^\\/]+$/,``):h.currentDirectory??``,afterNode:e,depth:e.depth}:{parentPath:h.currentDirectory??``,afterNode:null,depth:0}}async function Rn(){let e=Ln();A.value?.type===`directory`&&!A.value.expanded&&await Ge(A.value),H.value={...e,kind:`file`,value:``},await s(),W.value?.focus()}async function zn(){let e=Ln();A.value?.type===`directory`&&!A.value.expanded&&await Ge(A.value),H.value={...e,kind:`directory`,value:``},await s(),W.value?.focus()}function Bn(){H.value=null}async function Vn(){let e=H.value;if(!e||!e.value.trim()){H.value=null;return}let t=e.value.trim(),n=e.parentPath.replace(/[/\\]$/,``)+`/`+t;if(e.kind===`file`){let e=await(await fetch(`/api/editor/file`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:n})})).json();if(!e.success){_.error(e.error);return}_.success(T(`@EDITOR:创建成功`))}else{let e=await(await fetch(`/api/editor/directory`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:n})})).json();if(!e.success){_.error(e.error);return}_.success(T(`@EDITOR:创建成功`))}H.value=null,await D()}function Hn(e){e.key===`Enter`&&(e.preventDefault(),Vn()),e.key===`Escape`&&(e.preventDefault(),Bn())}let G=C(null),Un=C(null);function Wn(e,t){e.preventDefault(),G.value={x:e.clientX,y:e.clientY,node:t}}function K(){G.value=null}async function Gn(){let e=G.value?.node;K(),e&&(A.value=e),e?.type===`directory`&&!e.expanded&&await Ge(e);let t=Ln();H.value={...t,kind:`file`,value:``},await s(),W.value?.focus()}async function Kn(){let e=G.value?.node;K(),e&&(A.value=e),e?.type===`directory`&&!e.expanded&&await Ge(e);let t=Ln();H.value={...t,kind:`directory`,value:``},await s(),W.value?.focus()}async function qn(){let e=G.value?.node;K(),e&&(U.value={node:e,value:e.name},await s(),In.value?.focus(),In.value?.select())}async function Jn(){let e=U.value;if(!e||!e.value.trim()||e.value.trim()===e.node.name){U.value=null;return}let t=e.value.trim(),n=e.node.path.replace(/[\\/][^\\/]+$/,``).replace(/[/\\]$/,``)+`/`+t,r=await(await fetch(`/api/editor/rename`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({oldPath:e.node.path,newPath:n})})).json();if(!r.success){_.error(r.error);return}let i=O.value.find(t=>t.path===e.node.path);i&&(i.path=n,i.name=t,k.value===e.node.path&&(k.value=n)),U.value=null,await D()}function Yn(e){e.key===`Enter`&&(e.preventDefault(),Jn()),e.key===`Escape`&&(e.preventDefault(),U.value=null)}async function Xn(){let e=G.value?.node;if(K(),!e)return;let t=e.type===`directory`?T(`@EDITOR:文件夹`):T(`@EDITOR:文件`);if(!confirm(`${T(`@EDITOR:确认删除`)} ${t} "${e.name}"?`))return;let n=await(await fetch(`/api/editor/entry?path=${encodeURIComponent(e.path)}`,{method:`DELETE`})).json();if(!n.success){_.error(n.error);return}let r=O.value.findIndex(t=>t.path===e.path);r!==-1&&(O.value.splice(r,1),k.value===e.path&&(k.value=O.value[Math.max(0,r-1)]?.path??null)),_.success(T(`@EDITOR:已删除`)),await D()}async function Zn(){let e=G.value?.node;if(K(),e)try{let t=await(await fetch(`/api/editor/reveal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e.path})})).json();t.success||_.error(t.error)}catch(e){_.error(e?.message||String(e))}}function Qn(e){let t=h.currentDirectory;if(!t)return e;let n=e=>e.replace(/\\/g,`/`).replace(/\/+$/,``),r=n(t),i=n(e);return i===r?`.`:i.startsWith(r+`/`)?i.slice(r.length+1):i}async function $n(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}async function er(){let e=G.value?.node;K(),e&&(await $n(e.path)?_.success(T(`@EDITOR:已复制到剪贴板`)):_.error(T(`@EDITOR:复制失败`)))}async function tr(){let e=G.value?.node;K(),e&&(await $n(Qn(e.path))?_.success(T(`@EDITOR:已复制到剪贴板`)):_.error(T(`@EDITOR:复制失败`)))}async function nr(){let e=G.value?.node;if(K(),e)try{let t=await(await fetch(`/api/editor/open-in-vscode`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e.path})})).json();t.success||_.error(t.error||T(`@EDITOR:VSCode 未安装`))}catch(e){_.error(e?.message||String(e))}}let rr=new Set([`html`,`htm`]),ir=i(()=>{let e=G.value?.node;if(!e||e.type!==`file`)return!1;let t=e.name.slice(e.name.lastIndexOf(`.`)+1).toLowerCase();return rr.has(t)});async function ar(){let e=G.value?.node;if(K(),e)try{let t=await(await fetch(`/api/editor/open-in-browser`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e.path})})).json();t.success||_.error(t.error||T(`@EDITOR:浏览器打开失败`))}catch(e){_.error(e?.message||String(e))}}re(()=>document.addEventListener(`click`,K)),c(()=>document.removeEventListener(`click`,K));let or=new Set([`md`,`html`,`htm`,`svg`]),sr=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`ico`,`bmp`]),q=C(!1),J=C(!1),Y=C(!1),cr=C(!1),lr=C(0),X=i(()=>O.value.find(e=>e.path===k.value)??null),ur=i(()=>X.value?.language===`plaintext`&&X.value?.content===``),dr=i(()=>X.value?.language===`office`),Z=i(()=>(X.value?.name??``).split(`.`).pop()?.toLowerCase()??``),fr=i(()=>or.has(Z.value)||sr.has(Z.value)||Oe(Z.value)),pr=i(()=>((X.value?.content??``).match(/^#{1,6}\s+/gm)||[]).length),mr=i(()=>Z.value===`md`&&pr.value>0);b(k,()=>{q.value&&!fr.value&&(q.value=!1),J.value&&!mr.value&&(J.value=!1)});function hr(){fr.value&&(q.value||(J.value=!1,Y.value=!1),q.value=!q.value)}function gr(){mr.value&&(J.value||(q.value=!1,Y.value=!1),J.value=!J.value)}function _r(){Y.value||(q.value=!1,J.value=!1),Y.value=!Y.value,cr.value=!0}let vr=C(null),Q=C(!1),$=C(``),yr=C(!0),br=null,xr=i(()=>!J.value&&q.value&&Z.value===`md`&&!!X.value);function Sr(){return X.value?.content??``}function Cr(){return Sr().match(/^\s*#\s+(.+?)\s*(?:\r?\n|$)/)?.[1]?.trim()??``}function wr(e,t,n){if(!e){_.error(T(`@EDITOR:复制失败`));return}$.value=n,br&&clearTimeout(br),br=setTimeout(()=>{$.value=``},1800),t>0?_.warning(T(`@EDITOR:{n} 张图片未能转成 Base64,已保留原地址`,{n:t})):_.success(T(`@EDITOR:已复制`))}async function Tr(){wr(await $n(Sr()),0,`md`)}async function Er(){let e=vr.value?.getRenderedElement();if(e){Q.value=!0;try{let{html:t,leftover:n}=await dt(e,yr.value);wr(await $n(t),n,`html`)}finally{Q.value=!1}}}function Dr(e){let t=document.createElement(`div`);t.style.cssText=`position:fixed;top:-9999px;left:-9999px;opacity:0;`,t.innerHTML=e,document.body.appendChild(t);try{let e=window.getSelection(),n=document.createRange();n.selectNodeContents(t),e?.removeAllRanges(),e?.addRange(n);let r=document.execCommand(`copy`);return e?.removeAllRanges(),r}catch{return!1}finally{document.body.removeChild(t)}}async function Or(){let e=vr.value?.getRenderedElement();if(e){Q.value=!0;try{let{html:t,leftover:n}=await ft(e,{inline:yr.value,title:Cr()}),r=Sr(),i=!1;try{navigator.clipboard?.write&&typeof ClipboardItem<`u`&&(await navigator.clipboard.write([new ClipboardItem({"text/html":new Blob([t],{type:`text/html`}),"text/plain":new Blob([r],{type:`text/plain`})})]),i=!0)}catch{i=!1}i||=Dr(t),wr(i,n,`rich`)}finally{Q.value=!1}}}let kr=i(()=>{let e=X.value;if(!e)return``;let t=Z.value,n=document.documentElement.getAttribute(`data-theme`)===`light`?`#ffffff`:`#0d1117`;return t===`html`||t===`htm`?Ie(e.content):t===`svg`?`<!DOCTYPE html><html><head><meta charset="utf-8"><style>html,body{margin:0;padding:0;background:${n};display:flex;align-items:center;justify-content:center;min-height:100vh;}svg{max-width:100%;max-height:90vh;}</style></head><body>${e.content}</body></html>`:``}),Ar=!1,jr=0,Mr=0;function Nr(e){Ar=!0,jr=e.clientX,Mr=lr.value,document.addEventListener(`mousemove`,Pr),document.addEventListener(`mouseup`,Fr),e.preventDefault()}function Pr(e){if(!Ar)return;let t=e.clientX-jr;lr.value=Math.max(200,Math.min(900,Mr+t))}function Fr(){Ar=!1,document.removeEventListener(`mousemove`,Pr),document.removeEventListener(`mouseup`,Fr)}return(i,o)=>(p(),t(m,null,[n(`div`,{class:`editor-view`,ref_key:`containerRef`,ref:B},[n(`div`,{class:`editor-sidebar`,style:g({width:V.value+`px`})},[n(`div`,pt,[n(`span`,mt,e(r(T)(`@EDITOR:资源管理器`)),1),n(`div`,ht,[a(r(ne),{content:r(T)(`@EDITOR:新建文件`),placement:`bottom`,"show-after":300},{default:se(()=>[n(`button`,{class:`sidebar-action-btn`,onClick:Rn},[...o[12]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`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`}),n(`polyline`,{points:`14 2 14 8 20 8`}),n(`line`,{x1:`12`,y1:`13`,x2:`12`,y2:`19`}),n(`line`,{x1:`9`,y1:`16`,x2:`15`,y2:`16`})],-1)]])]),_:1},8,[`content`]),a(r(ne),{content:r(T)(`@EDITOR:新建文件夹`),placement:`bottom`,"show-after":300},{default:se(()=>[n(`button`,{class:`sidebar-action-btn`,onClick:zn},[...o[13]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`}),n(`line`,{x1:`12`,y1:`11`,x2:`12`,y2:`17`}),n(`line`,{x1:`9`,y1:`14`,x2:`15`,y2:`14`})],-1)]])]),_:1},8,[`content`]),a(r(ne),{content:r(T)(`@EDITOR:刷新`),placement:`bottom`,"show-after":300},{default:se(()=>[n(`button`,{class:`sidebar-action-btn`,onClick:o[0]||=e=>D({notifyOnError:!0})},[...o[14]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`polyline`,{points:`1 4 1 10 7 10`}),n(`polyline`,{points:`23 20 23 14 17 14`}),n(`path`,{d:`M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15`})],-1)]])]),_:1},8,[`content`])])]),n(`div`,gt,[o[16]||=n(`svg`,{class:`sidebar-search-icon`,viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[n(`circle`,{cx:`11`,cy:`11`,r:`7`}),n(`line`,{x1:`21`,y1:`21`,x2:`16.65`,y2:`16.65`})],-1),x(n(`input`,{ref_key:`searchInputRef`,ref:et,"onUpdate:modelValue":o[1]||=e=>w.value=e,type:`text`,class:`sidebar-search-input`,placeholder:r(T)(`@EDITOR:搜索文件...`),title:r(T)(`@EDITOR:搜索文件...`),spellcheck:`false`,autocomplete:`off`,onKeydown:ie(nt,[`escape`])},null,40,_t),[[ue,w.value]]),w.value?(p(),t(`button`,{key:0,class:`sidebar-search-clear`,title:r(T)(`@EDITOR:清除搜索`),"aria-label":r(T)(`@EDITOR:清除搜索`),onClick:we},[...o[15]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[n(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),n(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,vt)):v(``,!0)]),pe.value?(p(),t(`div`,Bt,[...o[25]||=[n(`span`,{class:`spin-icon`},null,-1)]])):(p(),t(`div`,yt,[(p(!0),t(m,null,oe(Ke(Ye.value),i=>(p(),t(m,{key:i.path},[U.value&&U.value.node.path===i.path?(p(),t(`div`,{key:0,class:`tree-node tree-inline-input-row`,style:g({paddingLeft:12+i.depth*14+`px`})},[i.type===`directory`?(p(),t(`span`,{key:0,class:l([`tree-arrow`,{expanded:i.expanded}])},[...o[17]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(p(),t(`span`,bt)),(p(),t(`svg`,xt,[n(`use`,{"xlink:href":`#${Fn(i)}`},null,8,St)])),x(n(`input`,{ref_for:!0,ref_key:`renameInputRef`,ref:In,"onUpdate:modelValue":o[2]||=e=>U.value.value=e,onKeydown:Yn,onBlur:Jn,onClick:o[3]||=S(()=>{},[`stop`])},null,544),[[ue,U.value.value]])],4)):(p(),t(`div`,{key:1,class:l([`tree-node`,{"tree-node--dir":i.type===`directory`,"tree-node--file":i.type===`file`,"tree-node--active":k.value===i.path,"tree-node--selected":A.value?.path===i.path&&k.value!==i.path}]),style:g({paddingLeft:12+i.depth*14+`px`}),onClick:e=>rt(i),onContextmenu:e=>Wn(e,i)},[i.type===`directory`?(p(),t(`span`,{key:0,class:l([`tree-arrow`,{expanded:i.expanded}])},[...o[18]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(p(),t(`span`,wt)),i.type===`directory`?(p(),t(`svg`,Tt,[n(`use`,{"xlink:href":`#${Fn(i)}`},null,8,Et)])):(p(),t(`svg`,Dt,[n(`use`,{"xlink:href":`#${Fn(i)}`},null,8,Ot)])),n(`span`,{class:`tree-name`,title:i.path},[(p(!0),t(m,null,oe(Qe(i.name),(n,r)=>(p(),t(m,{key:r},[n.hit?(p(),t(`span`,At,e(n.text),1)):(p(),t(m,{key:1},[f(e(n.text),1)],64))],64))),128))],8,kt),i.loading?(p(),t(`span`,jt)):v(``,!0)],46,Ct)),H.value&&H.value.afterNode?.path===i.path?(p(),t(`div`,{key:2,class:`tree-node tree-inline-input-row`,style:g({paddingLeft:12+H.value.depth*14+`px`})},[o[21]||=n(`span`,{class:`tree-arrow-spacer`},null,-1),H.value.kind===`directory`?(p(),t(`svg`,Mt,[...o[19]||=[n(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`},null,-1)]])):(p(),t(`svg`,Nt,[...o[20]||=[n(`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`},null,-1),n(`polyline`,{points:`14 2 14 8 20 8`},null,-1)]])),x(n(`input`,{ref_for:!0,ref_key:`inlineInputRef`,ref:W,class:`tree-inline-input`,"onUpdate:modelValue":o[4]||=e=>H.value.value=e,placeholder:H.value.kind===`file`?r(T)(`@EDITOR:输入文件名`):r(T)(`@EDITOR:输入文件夹名`),onKeydown:Hn,onBlur:Bn,onClick:o[5]||=S(()=>{},[`stop`])},null,40,Pt),[[ue,H.value.value]])],4)):v(``,!0)],64))),128)),H.value&&H.value.afterNode===null?(p(),t(`div`,Ft,[o[24]||=n(`span`,{class:`tree-arrow-spacer`},null,-1),H.value.kind===`directory`?(p(),t(`svg`,It,[...o[22]||=[n(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`},null,-1)]])):(p(),t(`svg`,Lt,[...o[23]||=[n(`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`},null,-1),n(`polyline`,{points:`14 2 14 8 20 8`},null,-1)]])),x(n(`input`,{ref_key:`inlineInputRef`,ref:W,class:`tree-inline-input`,"onUpdate:modelValue":o[6]||=e=>H.value.value=e,placeholder:H.value.kind===`file`?r(T)(`@EDITOR:输入文件名`):r(T)(`@EDITOR:输入文件夹名`),onKeydown:Hn,onBlur:Bn,onClick:o[7]||=S(()=>{},[`stop`])},null,40,Rt),[[ue,H.value.value]])])):v(``,!0),!H.value&&(Ze.value||y.value.length===0)?(p(),t(`div`,zt,e(Ze.value?r(T)(`@EDITOR:未找到匹配文件`):r(T)(`@EDITOR:暂无文件`)),1)):v(``,!0)]))],4),n(`div`,{class:`editor-resizer`,onMousedown:Mn},null,32),n(`div`,Vt,[O.value.length>0?(p(),t(`div`,Ht,[(p(!0),t(m,null,oe(O.value,r=>(p(),t(`div`,{key:r.path,class:l([`editor-tab`,{active:k.value===r.path,dirty:r.isDirty}]),onClick:e=>k.value=r.path,title:r.path},[n(`span`,Wt,e(r.name),1),r.isDirty?(p(),t(`span`,Gt)):v(``,!0),n(`button`,{class:`tab-close`,onClick:e=>it(r.path,e)},[...o[26]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`},[n(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),n(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,Kt)],10,Ut))),128)),o[30]||=n(`div`,{class:`editor-tabs-spacer`},null,-1),fr.value?(p(),t(`button`,{key:0,class:l([`preview-toggle-btn`,{active:q.value}]),title:q.value?r(T)(`@EDITOR:关闭预览`):r(T)(`@EDITOR:打开预览`),onClick:hr},[o[27]||=n(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`path`,{d:`M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z`}),n(`circle`,{cx:`12`,cy:`12`,r:`3`})],-1),n(`span`,null,e(r(T)(`@EDITOR:预览`)),1)],10,qt)):v(``,!0),mr.value?(p(),t(`button`,{key:1,class:l([`preview-toggle-btn mindmap-toggle-btn`,{active:J.value,disabled:!mr.value}]),disabled:!mr.value,title:mr.value?J.value?r(T)(`@EDITOR:关闭思维导图`):r(T)(`@EDITOR:打开思维导图`):r(T)(`@EDITOR:需要至少一个 # 标题`),onClick:gr},[o[28]||=ee(`<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-843a938c><circle cx="12" cy="12" r="2" data-v-843a938c></circle><circle cx="5" cy="6" r="1.6" data-v-843a938c></circle><circle cx="19" cy="6" r="1.6" data-v-843a938c></circle><circle cx="5" cy="18" r="1.6" data-v-843a938c></circle><circle cx="19" cy="18" r="1.6" data-v-843a938c></circle><line x1="11" y1="11" x2="6.4" y2="7" data-v-843a938c></line><line x1="13" y1="11" x2="17.6" y2="7" data-v-843a938c></line><line x1="11" y1="13" x2="6.4" y2="17" data-v-843a938c></line><line x1="13" y1="13" x2="17.6" y2="17" data-v-843a938c></line></svg>`,1),n(`span`,null,e(r(T)(`@EDITOR:思维导图`)),1)],10,Jt)):v(``,!0),n(`button`,{class:l([`preview-toggle-btn agent-toggle-btn`,{active:Y.value}]),title:Y.value?r(T)(`@EDITOR:关闭 g ai 对话`):r(T)(`@EDITOR:打开 g ai 对话`),onClick:_r},[o[29]||=n(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`path`,{d:`M12 3l1.9 4.6L18.5 9.5l-4.6 1.9L12 16l-1.9-4.6L5.5 9.5l4.6-1.9z`}),n(`path`,{d:`M18 16.5l.9 2.1 2.1.9-2.1.9-.9 2.1-.9-2.1-2.1-.9 2.1-.9z`})],-1),n(`span`,null,e(r(T)(`@EDITOR:g ai 对话`)),1)],10,Yt)])):v(``,!0),O.value.length===0?(p(),d(Pe,{key:1,class:`editor-empty`,title:r(T)(`@EDITOR:从左侧选择文件打开`),hint:r(T)(`@EDITOR:Ctrl+S 保存`)},{icon:se(()=>[...o[31]||=[n(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`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`}),n(`polyline`,{points:`14 2 14 8 20 8`})],-1)]]),_:1},8,[`title`,`hint`])):v(``,!0),n(`div`,Xt,[n(`div`,{class:l([`monaco-container`,{hidden:O.value.length===0||ur.value||dr.value}]),ref_key:`editorContainerRef`,ref:F},null,2),ur.value&&O.value.length>0&&!q.value&&!J.value?(p(),t(`div`,Zt,[(p(),t(`svg`,Qt,[...o[32]||=[n(`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`},null,-1),n(`circle`,{cx:`9`,cy:`9`,r:`2`},null,-1),n(`path`,{d:`m21 15-5-5L5 21`},null,-1)]])),n(`p`,$t,e(X.value?.name),1),n(`p`,en,e(r(T)(`@EDITOR:这是图片文件,已在右侧预览面板中打开`)),1)])):v(``,!0),(q.value||J.value||Y.value)&&O.value.length>0?(p(),t(`div`,{key:1,class:`preview-resizer`,onMousedown:Nr},null,32)):v(``,!0),cr.value?x((p(),d(ct,{key:2,active:Y.value&&O.value.length>0,"active-file-path":k.value,"active-file-name":X.value?.name??``,style:g({flexBasis:lr.value+`px`}),onClose:o[8]||=e=>Y.value=!1},null,8,[`active`,`active-file-path`,`active-file-name`,`style`])),[[fe,Y.value&&O.value.length>0]]):v(``,!0),(q.value||J.value)&&O.value.length>0?(p(),t(`div`,{key:3,class:`preview-panel`,style:g({flexBasis:lr.value+`px`})},[n(`div`,tn,[n(`span`,nn,e(J.value?r(T)(`@EDITOR:思维导图`):r(T)(`@EDITOR:预览`)),1),n(`span`,rn,e(Z.value.toUpperCase()),1),o[34]||=n(`div`,{class:`preview-header-spacer`},null,-1),n(`button`,{class:`preview-close-btn`,title:J.value?r(T)(`@EDITOR:关闭思维导图`):r(T)(`@EDITOR:关闭预览`),onClick:o[9]||=e=>J.value?J.value=!1:q.value=!1},[...o[33]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`},[n(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),n(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,an)]),n(`div`,on,[xr.value?(p(),t(`div`,sn,[n(`button`,{class:l([`preview-copy-btn`,{done:$.value===`md`}]),disabled:Q.value,title:r(T)(`@EDITOR:复制 Markdown 源码`),onClick:Tr},[o[35]||=n(`span`,{class:`preview-copy-btn-icon`},`{ }`,-1),n(`span`,null,e($.value===`md`?r(T)(`@EDITOR:已复制`):`Markdown`),1)],10,cn),n(`button`,{class:l([`preview-copy-btn`,{done:$.value===`html`}]),disabled:Q.value,title:r(T)(`@EDITOR:复制渲染后的 HTML(图片按开关内嵌)`),onClick:Er},[o[36]||=n(`span`,{class:`preview-copy-btn-icon`},`</>`,-1),n(`span`,null,e($.value===`html`?r(T)(`@EDITOR:已复制`):`HTML`),1)],10,ln),n(`button`,{class:l([`preview-copy-btn preview-copy-btn--primary`,{done:$.value===`rich`}]),disabled:Q.value,title:r(T)(`@EDITOR:复制为富文本,可直接粘贴到公众号编辑器`),onClick:Or},[o[37]||=n(`span`,{class:`preview-copy-btn-icon`},`⊞`,-1),n(`span`,null,e(Q.value?r(T)(`@EDITOR:转换图片中…`):$.value===`rich`?r(T)(`@EDITOR:已复制`):r(T)(`@EDITOR:复制富文本`)),1)],10,un),n(`label`,{class:`preview-copy-embed`,title:r(T)(`@EDITOR:复制时把本地图片转成 Base64 内嵌,关闭后保留原图地址`)},[x(n(`input`,{"onUpdate:modelValue":o[10]||=e=>yr.value=e,type:`checkbox`},null,512),[[ce,yr.value]]),n(`span`,null,e(r(T)(`@EDITOR:图片转 Base64`)),1)],8,dn)])):v(``,!0),J.value&&Z.value===`md`&&X.value?(p(),d($e,{key:1,content:X.value.content,class:`preview-mindmap`},null,8,[`content`])):q.value&&Z.value===`md`&&X.value?(p(),d(je,{ref_key:`mdPreviewRef`,ref:vr,key:X.value.path,content:X.value.content,"base-path":X.value.path,class:`preview-markdown`},null,8,[`content`,`base-path`])):q.value&&[`html`,`htm`,`svg`].includes(Z.value)?(p(),t(`iframe`,{key:3,class:`preview-iframe`,sandbox:r(Ee),srcdoc:kr.value},null,8,fn)):q.value&&r(sr).has(Z.value)&&X.value?(p(),d(Me,{key:4,"file-path":X.value.path,"file-name":X.value.name},null,8,[`file-path`,`file-name`])):q.value&&dr.value&&X.value?(p(),d(Ae,{key:5,"file-path":X.value.path},null,8,[`file-path`])):v(``,!0)])],4)):v(``,!0)])])],512),(p(),d(de,{to:`body`},[G.value?(p(),t(`div`,{key:0,ref_key:`ctxMenuRef`,ref:Un,class:`ctx-menu`,style:g({left:G.value.x+`px`,top:G.value.y+`px`}),onClick:o[11]||=S(()=>{},[`stop`])},[n(`button`,{class:`ctx-menu-item`,onClick:Gn},[o[38]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`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`}),n(`polyline`,{points:`14 2 14 8 20 8`}),n(`line`,{x1:`12`,y1:`13`,x2:`12`,y2:`19`}),n(`line`,{x1:`9`,y1:`16`,x2:`15`,y2:`16`})],-1),f(` `+e(r(T)(`@EDITOR:新建文件`)),1)]),n(`button`,{class:`ctx-menu-item`,onClick:Kn},[o[39]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`}),n(`line`,{x1:`12`,y1:`11`,x2:`12`,y2:`17`}),n(`line`,{x1:`9`,y1:`14`,x2:`15`,y2:`14`})],-1),f(` `+e(r(T)(`@EDITOR:新建文件夹`)),1)]),o[46]||=n(`div`,{class:`ctx-menu-sep`},null,-1),n(`button`,{class:`ctx-menu-item`,onClick:er},[o[40]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`rect`,{x:`9`,y:`9`,width:`13`,height:`13`,rx:`2`,ry:`2`}),n(`path`,{d:`M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1`})],-1),f(` `+e(r(T)(`@EDITOR:复制绝对路径`)),1)]),n(`button`,{class:`ctx-menu-item`,onClick:tr},[o[41]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`path`,{d:`M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71`}),n(`path`,{d:`M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71`})],-1),f(` `+e(r(T)(`@EDITOR:复制相对路径`)),1)]),o[47]||=n(`div`,{class:`ctx-menu-sep`},null,-1),ir.value?(p(),t(`button`,{key:0,class:`ctx-menu-item`,onClick:ar},[o[42]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`circle`,{cx:`12`,cy:`12`,r:`9`}),n(`line`,{x1:`3`,y1:`12`,x2:`21`,y2:`12`}),n(`path`,{d:`M12 3a13 13 0 0 1 3.5 9 13 13 0 0 1-3.5 9 13 13 0 0 1-3.5-9A13 13 0 0 1 12 3z`})],-1),f(` `+e(r(T)(`@EDITOR:在浏览器中打开`)),1)])):v(``,!0),n(`button`,{class:`ctx-menu-item`,onClick:Zn},[o[43]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`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`}),n(`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(r(T)(`@EDITOR:在资源管理器中打开`)),1)]),n(`button`,{class:`ctx-menu-item`,onClick:nr},[a(he,{"icon-class":`vscode`,"class-name":`ctx-menu-icon`}),f(` `+e(r(T)(`@EDITOR:在 VSCode 中打开`)),1)]),n(`button`,{class:`ctx-menu-item`,onClick:qn},[o[44]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`path`,{d:`M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`}),n(`path`,{d:`M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z`})],-1),f(` `+e(r(T)(`@EDITOR:重命名`)),1)]),n(`button`,{class:`ctx-menu-item ctx-menu-item--danger`,onClick:Xn},[o[45]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`polyline`,{points:`3 6 5 6 21 6`}),n(`path`,{d:`M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6`}),n(`path`,{d:`M10 11v6`}),n(`path`,{d:`M14 11v6`}),n(`path`,{d:`M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2`})],-1),f(` `+e(r(T)(`@EDITOR:删除`)),1)])],4)):v(``,!0)]))],64))}}),[[`__scopeId`,`data-v-843a938c`]]);export{hn as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.dir-chat[data-v-8a71be1d]{height:min(420px,42vh);min-height:200px;margin-top:var(--spacing-sm);border-top:1px solid var(--border-color-light);padding-top:var(--spacing-sm);flex-direction:column;display:flex}.dir-chat__bar[data-v-8a71be1d]{margin-bottom:var(--spacing-xs);flex-shrink:0;justify-content:flex-end;display:flex}.dir-chat__new[data-v-8a71be1d]{height:22px;padding:0 var(--spacing-base);border:1px solid var(--border-color);border-radius:var(--radius-base);color:var(--text-meta);font:inherit;font-size:var(--font-size-sm);cursor:pointer;transition:color var(--transition-fast), border-color var(--transition-fast);background:0 0;align-items:center;gap:4px;line-height:1;display:inline-flex}.dir-chat__new[data-v-8a71be1d]:hover{color:var(--color-primary);border-color:var(--color-primary)}.dir-chat__new[data-v-8a71be1d]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.dir-chat[data-v-8a71be1d]>.acu-chat{flex:1;min-width:0;min-height:0}.dir-chat--fill[data-v-8a71be1d]{flex:auto;height:auto;min-height:0}.dir-chat[data-v-8a71be1d] .acu-welcome{padding:var(--spacing-base);align-items:flex-start;overflow-y:auto}.dir-chat[data-v-8a71be1d] .acu-welcome-inner{margin-block:auto}.dir-chat[data-v-8a71be1d] .acu-welcome-logo{display:none}.dir-chat[data-v-8a71be1d] .acu-welcome-title{font-size:var(--font-size-lg);margin-bottom:var(--spacing-xs)}.dir-chat[data-v-8a71be1d] .acu-welcome-desc{font-size:var(--font-size-sm);margin-bottom:var(--spacing-base)}.dir-chat[data-v-8a71be1d] .acu-welcome-grid{gap:var(--spacing-sm)}.dir-chat[data-v-8a71be1d] .acu-bubble-row.is-assistant .acu-bubble-main{width:var(--acu-bubble-max-width);max-width:var(--acu-bubble-max-width);position:relative}.dir-chat[data-v-8a71be1d] .acu-bubble-row.is-assistant .acu-bubble{align-self:flex-start}.dir-chat[data-v-8a71be1d] .acu-message-meta{margin:0;position:absolute;top:0;right:0}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$r as e,An as t,Dn as n,Dr as r,En as i,Fn as a,Fr as o,Jn as s,Jr as c,Ln as l,Qn as u,Vn as d,kn as f,mr as p}from"./element-plus-J45pKUrE.js";import{a as m}from"./vendor-B3NyhlYR.js";import{n as h,t as g}from"./_plugin-vue_export-helper-C3o7kvRL.js";import{F as _}from"./index-BS7BDFG4.js";import{i as v,n as y,o as b,r as x,s as S,u as C}from"./agentConversations-DpiGplZB.js";d(),p(),o();var w={key:0,class:`dir-chat__bar`},T=[`title`,`aria-label`],E=g(l({__name:`RecentDirectoriesChat`,props:{dirStatus:{},summary:{},fill:{type:Boolean}},setup(o){let l=o,{theme:d}=_(),p=i(()=>d.value===`dark`?`dark`:`light`),{messages:g,isStreaming:E,questionPanel:D,answeringQuestion:O,sendMessage:k,retryTurn:A,answerQuestion:j,newSession:M,stop:N,queuedMessages:P,queuePaused:F,removeQueuedMessage:I,flushQueued:L}=C(),R=b(),z=S(),B=i(()=>[{id:`priority`,label:h(`@13D1C:这些项目该先处理哪个?`),prompt:h(`@13D1C:这些项目里该先处理哪个?按优先级给我一个处理顺序,并说明每一项该做什么。`)},{id:`behind`,label:h(`@13D1C:哪些项目落后远端?`),prompt:h(`@13D1C:哪些项目落后远端?分别落后多少个提交?`)},{id:`pull-behind`,label:h(`@13D1C:落后远端的都帮我 pull 下代码`),prompt:h(`@13D1C:落后远端的项目都帮我 pull 下代码,逐个执行并汇报结果。`)},{id:`uncommitted`,label:h(`@13D1C:看一下各项目未提交的都改了什么`),prompt:h(`@13D1C:看一下各项目未提交的改动都改了什么,按项目列出来。`)}]);async function V(e){await k(e.text,e.files,{engine:`gai`,dirStatus:l.dirStatus,dirSummary:l.summary})}async function H(e){await V({text:e.prompt,files:[]})}function U(){N(),M()}return s(()=>{N()}),(i,s)=>(u(),t(`div`,{class:c([`dir-chat`,{"dir-chat--fill":o.fill}])},[r(g).length?(u(),t(`div`,w,[n(`button`,{type:`button`,class:`dir-chat__new`,title:r(h)(`@13D1C:新建对话,当前会话会保留`),"aria-label":r(h)(`@13D1C:新建对话`),onClick:U},[s[0]||=n(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[n(`line`,{x1:`12`,y1:`5`,x2:`12`,y2:`19`}),n(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`})],-1),n(`span`,null,e(r(h)(`@13D1C:新建对话`)),1)],8,T)])):f(``,!0),a(r(m),{messages:r(g),"assistant-name":r(y),theme:p.value,generating:r(E),"allow-queue":!0,queued:r(P),"queue-paused":r(F),"queue-labels":r(z),"show-avatar":!1,"upload-config":{enabled:!1},placeholder:r(E)?r(h)(`@13D1C:g ai 正在回答…发送会先排队,等本轮跑完自动接上`):r(h)(`@13D1C:追问 g ai:这批项目该怎么处理?`),"welcome-title":r(h)(`@13D1C:可以接着问 g ai`),"welcome-description":r(h)(`@13D1C:它已经拿到了这批目录的 Git 状态,可以直接问该先处理哪个、某个项目落后了什么。`),"preset-questions":B.value,question:r(D),"question-submitting":r(O),"question-labels":r(R),"plan-config":{labels:{title:r(h)(`@AGENT:计划`),raw:r(h)(`@AGENT:原始参数`)}},"message-rail-config":r(v),"message-meta-config":r(x),onSend:V,onSelect:H,onStop:r(N),onUnqueue:r(I),onFlushQueued:r(L),onAnswer:r(j),onRetry:r(A)},null,8,[`messages`,`assistant-name`,`theme`,`generating`,`queued`,`queue-paused`,`queue-labels`,`placeholder`,`welcome-title`,`welcome-description`,`preset-questions`,`question`,`question-submitting`,`question-labels`,`plan-config`,`message-rail-config`,`message-meta-config`,`onStop`,`onUnqueue`,`onFlushQueued`,`onAnswer`,`onRetry`])],2))}}),[[`__scopeId`,`data-v-8a71be1d`]]);export{E as default};
|