@adversity/coding-tool-x 3.1.3 → 3.1.4
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/CHANGELOG.md +6 -0
- package/dist/web/assets/Analytics-Blo8_rhE.css +1 -0
- package/dist/web/assets/{Analytics-D2V09DHH.js → Analytics-DEIGaSFz.js} +2 -2
- package/dist/web/assets/{ConfigTemplates-Bf_11LhH.js → ConfigTemplates-BZaehll1.js} +1 -1
- package/dist/web/assets/{Home-BRnW4FTS.js → Home-DIIH5bAk.js} +1 -1
- package/dist/web/assets/{PluginManager-B9J32GhW.js → PluginManager-b4IlavFA.js} +1 -1
- package/dist/web/assets/{ProjectList-5a19MWJk.js → ProjectList-QaqzjEea.js} +1 -1
- package/dist/web/assets/{SessionList-Cxg5bAdT.js → SessionList-Cz_hrGmL.js} +1 -1
- package/dist/web/assets/{SkillManager-CVBr0CLi.js → SkillManager-B-Rcb9xY.js} +1 -1
- package/dist/web/assets/{Terminal-D2Xe_Q0H.js → Terminal-C8CFJEkx.js} +1 -1
- package/dist/web/assets/{WorkspaceManager-C7dwV94C.js → WorkspaceManager-XaQj8BRE.js} +1 -1
- package/dist/web/assets/{index-BS9RA6SN.js → index-B_kPXCbH.js} +2 -2
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/web/assets/Analytics-BIqc8Rin.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as s,D as a}from"./index-
|
|
1
|
+
import{_ as s,D as a}from"./index-B_kPXCbH.js";import{c as e,o,X as r,Y as t,N as i}from"./vue-vendor-PKd8utv_.js";import{K as d}from"./naive-ui-BIXcURHZ.js";import"./vendors-i5CBGnlm.js";import"./markdown-C9MYpaSi.js";import"./icons-BxcwoY5F.js";const m={class:"config-templates-page"},p=s({__name:"ConfigTemplates",setup:s=>(s,p)=>(o(),e("div",m,[r(i(d),{title:"配置模版管理",bordered:!1},{default:t(()=>[r(a,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-a6c39fe5"]]);export{p as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as e}from"./vendors-i5CBGnlm.js";import{a6 as a,f as l,r as n,w as s,h as c,K as t,a8 as o,c as i,o as u,a as d,W as r,X as v,a0 as p,Y as h,N as y,a3 as g,_ as m,p as k,F as f,$ as T,L as b,Z as x,v as C}from"./vue-vendor-PKd8utv_.js";import{_,u as w,a as $,R as q,g as z,b as S,c as L,d as I,e as O,f as j,t as M,h as N,i as A,j as F,k as P,l as U,m as D,n as E,o as V,s as J}from"./index-BS9RA6SN.js";import{E as G,q as K,p as R,o as Z,ar as B,V as H,as as W,at as X,au as Y,av as Q,aa as ee,i as ae,A as le,aw as ne,ax as se,T as ce,a as te}from"./icons-BxcwoY5F.js";import{L as oe,N as ie,c as ue,b as de,a as re,Z as ve,B as pe,s as he}from"./naive-ui-BIXcURHZ.js";import"./markdown-C9MYpaSi.js";const ye={class:"channel-column"},ge={class:"drag-handle",title:"拖拽排序"},me={class:"header-icon"},ke={class:"channel-title"},fe={class:"mcp-quick-panel"},Te={class:"panel-title"},be={key:0,class:"no-items"},xe={key:1,class:"mcp-quick-list"},Ce={class:"mcp-item-icon"},_e={class:"mcp-item-info"},we={class:"mcp-item-name"},$e={class:"mcp-item-type"},qe={key:1,class:"claude-extra-area"},ze={class:"skills-quick-panel"},Se={class:"panel-title"},Le={key:0,class:"no-items"},Ie={key:1,class:"skills-quick-list"},Oe={class:"skill-item-icon"},je={class:"skill-item-info"},Me={class:"skill-item-name"},Ne={class:"skill-item-desc"},Ae={key:0,class:"channel-content"},Fe={class:"card"},Pe={class:"card-header"},Ue={key:0,class:"runtime-badge"},De={class:"card-body",style:{padding:"6px 10px"}},Ee={class:"proxy-info-row"},Ve={class:"proxy-status"},Je={class:"proxy-port"},Ge={class:"channel-name"},Ke={class:"channel-quick-panel"},Re={class:"panel-title"},Ze={key:0,class:"no-channels"},Be={key:1,class:"channel-quick-list"},He={class:"channel-quick-info"},We={class:"channel-quick-name"},Xe={key:0,class:"channel-switching-tip"},Ye={class:"channel-metrics"},Qe={class:"metric-item"},ea={class:"metric-value"},aa={class:"metric-item"},la={class:"metric-value"},na={class:"metric-item"},sa={class:"metric-value"},ca={class:"metric-item"},ta={class:"card"},oa={class:"card-header compact"},ia={class:"card-body",style:{padding:"8px 10px"}},ua={class:"quick-access-list"},da={class:"access-icon"},ra={class:"access-content"},va={class:"access-value"},pa={class:"access-icon"},ha={class:"access-content"},ya={class:"access-value"},ga={class:"access-icon"},ma={class:"access-content"},ka={class:"access-goto"},fa={class:"card-header compact"},Ta={class:"card-body",style:{padding:"8px 10px"}},ba={class:"stats-inline stats-3col"},xa={class:"stat-inline-item stat-requests"},Ca={class:"stat-info"},_a={class:"stat-inline-item stat-input"},wa={class:"stat-info"},$a={class:"stat-inline-item stat-output"},qa={class:"stat-info"},za={key:1,class:"card logs-card"},Sa={class:"card-header compact"},La={class:"card-body logs-card-body"},Ia={class:"logs-table-wrapper"},Oa={key:0,class:"empty-logs"},ja={key:0,class:"action-content"},Ma={class:"action-msg"},Na={class:"action-time"},Aa={class:"locked-content"},Fa={class:"lock-icon"},Pa="channelLocks",Ua=_({__name:"ChannelColumn",props:{channelType:{type:String,required:!0,validator:e=>["claude","codex","gemini","opencode"].includes(e)}},setup(e){let _=null,V=null;const J=e,Ua=a(),Da=oe(),{claudeProxy:Ea,codexProxy:Va,geminiProxy:Ja,opencodeProxy:Ga,claudeChannels:Ka,codexChannels:Ra,geminiChannels:Za,opencodeChannels:Ba,schedulerState:Ha,getProxyState:Wa,startProxy:Xa,stopProxy:Ya,getLogs:Qa,clearLogsForSource:el,loadChannels:al,logLimit:ll,statsInterval:nl}=w(),{dashboardData:sl,loadDashboard:cl}=$(),tl={claude:{title:"ClaudeCode",subtitle:"智能编程助手",icon:Z},codex:{title:"Codex-CLI",subtitle:"高效代码生成",icon:R},gemini:{title:"Gemini-CLI",subtitle:"多模态AI助手",icon:K},opencode:{title:"OpenCode",subtitle:"AI 代码助手",icon:G}},ol=l(()=>tl[J.channelType].title);l(()=>tl[J.channelType].subtitle);const il=l(()=>tl[J.channelType].icon),ul=l(()=>"claude"===J.channelType?Ea.value:"codex"===J.channelType?Va.value:"gemini"===J.channelType?Ja.value:"opencode"===J.channelType?Ga.value:{}),dl=l(()=>"claude"===J.channelType?"Claude":"codex"===J.channelType?"Codex":"gemini"===J.channelType?"Gemini":"opencode"===J.channelType?"OpenCode":""),rl=n({projects:0,sessions:0}),vl=n({requests:0,tokens:0,cost:0}),pl=n({requests:0,tokens:0,cost:0}),hl={requests:0,tokens:0,cost:3};let yl={requests:null,tokens:null,cost:null};const gl=n({requests:!1,tokens:!1,cost:!1}),ml=l(()=>{var e,a,l;const n="claude"===J.channelType?"claude":"codex"===J.channelType?"codex":"opencode"===J.channelType?"opencode":"gemini";return(null==(l=null==(a=null==(e=sl.value)?void 0:e.todayStats)?void 0:a[n])?void 0:l.byModel)||{}});function kl(e,a,l,n=600){yl[e]&&cancelAnimationFrame(yl[e]),gl.value[e]=!0;const s=Date.now(),c=()=>{const t=Date.now()-s,o=Math.min(t/n,1),i=1-Math.pow(1-o,2),u=a+(l-a)*i,d=hl[e]??0,r=Math.pow(10,d),v=d>0?Math.round(u*r)/r:Math.round(u);pl.value[e]=v,o<1?yl[e]=requestAnimationFrame(c):gl.value[e]=!1};yl[e]=requestAnimationFrame(c)}const fl=n(!1),Tl=n(0),bl=n([]),xl=n(0),Cl=n([]),_l=l(()=>({claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode"}[J.channelType]||""));async function wl(){if(["claude","codex","opencode"].includes(J.channelType))try{const e=await O(!1,J.channelType);if(e.success&&e.skills){const a=e.skills.filter(e=>e.installed);Tl.value=a.length,bl.value=a.slice(0,10).map(e=>({...e,_uninstalling:!1}))}}catch(e){}}async function $l(e=!1){try{const a=await async function(e=!1){if(!e&&_)return _;if(!e&&V)return V;const a=D().then(e=>(_=(null==e?void 0:e.success)&&e.servers?Object.values(e.servers):[],_)).finally(()=>{V=null});return V=a,a}(e),l=a.filter(e=>{var a;return!0===(null==(a=e.apps)?void 0:a[J.channelType])});xl.value=l.length,Cl.value=l.slice(0,10).map(e=>({...e,_toggling:!1}))}catch(a){}}function ql(e){try{const a=localStorage.getItem(Pa),l=a?JSON.parse(a):{};l[J.channelType]=e,localStorage.setItem(Pa,JSON.stringify(l))}catch(a){}}const zl=n(function(){try{const e=localStorage.getItem(Pa);if(e){return JSON.parse(e)[J.channelType]||!1}}catch(e){}return!1}());async function Sl(){zl.value=!zl.value,ql(zl.value);try{if(await E("channelLocks",J.channelType,zl.value),sl.value){const e=sl.value.uiConfig||{},a={...e.channelLocks||{}};a[J.channelType]=zl.value,sl.value={...sl.value,uiConfig:{...e,channelLocks:a}}}}catch(e){}}const Ll=n(!0);function Il(e){e.detail&&void 0!==e.detail.showLogs&&(Ll.value=e.detail.showLogs)}const Ol=n(Date.now()),jl=l(()=>{if(!ul.value.running)return"";const e=ul.value.startTime;if(!e)return"";const a=Ol.value-e;if(a<=0)return"";const l=Math.floor(a/1e3),n=Math.floor(l/3600),s=Math.floor(l%3600/60),c=l%60;let t="已运行 ";return n>0&&(t+=`${n}小时`),s>0&&(t+=`${s}分`),(c>0||0===n&&0===s)&&(t+=`${c}秒`),t}),Ml=n(null),Nl=l(()=>ll.value),Al={claude:Qa("claude"),codex:Qa("codex"),gemini:Qa("gemini"),opencode:Qa("opencode")},Fl=l(()=>((Al[J.channelType]||Al.claude).value||[]).slice(0,Nl.value));let Pl=null,Ul=null,Dl=null,El=!1,Vl=null;const Jl=l(()=>{let e=[];"claude"===J.channelType?e=Ka.value||[]:"codex"===J.channelType?e=Ra.value||[]:"gemini"===J.channelType?e=Za.value||[]:"opencode"===J.channelType&&(e=Ba.value||[]);return[...e.filter(e=>!1!==e.enabled),...e.filter(e=>!1===e.enabled)]});function Gl(e){const a=Ha[J.channelType];if(!a||!a.channels)return 0;const l=a.channels.find(a=>a.id===e);return l?l.inflight:0}const Kl=l(()=>{var e;const a=Jl.value.filter(e=>!1!==e.enabled).length;return(null==(e=ul.value.proxy)?void 0:e.running)?`${a}个渠道调度中`:Jl.value.length>0?`${a}个渠道已启用`:"无渠道"}),Rl=n({});function Zl(e){return Rl.value[e]||{requests:0,tokens:0,cost:0}}async function Bl(){var e;try{let a;if("claude"===J.channelType?a=await z():"codex"===J.channelType?a=await S():"gemini"===J.channelType?a=await L():"opencode"===J.channelType&&(a=await I()),a&&a.byChannel){const l={};for(const[n,s]of Object.entries(a.byChannel))l[n]={requests:s.requests||0,tokens:(null==(e=s.tokens)?void 0:e.total)||0,cost:s.cost||0};Rl.value=l}}catch(a){}}async function Hl(e){var a,l;const n=Wa(J.channelType);n.value.loading=!0;try{let a;a=e?await Xa(J.channelType):await Ya(J.channelType),!1!==a.success?Da.success(e?`${ol.value} 代理已启动`:`${ol.value} 代理已停止`):(Da.error(a.error||"操作失败"),n.value.running=!e)}catch(s){Da.error((null==(l=null==(a=s.response)?void 0:a.data)?void 0:l.error)||s.message||"操作失败"),n.value.running=!e}finally{n.value.loading=!1}}function Wl(){Ua.push({name:`${J.channelType}-projects`})}function Xl(){Ua.push({name:`${J.channelType}-projects`})}s(Fl,e=>{var a;const l=(null==(a=e[0])?void 0:a.id)||null;if(!l||l===Pl)return void(Pl=l);Pl=l,Vl&&clearTimeout(Vl),Vl=setTimeout(()=>{Bl()},5e3);(!Ml.value||Ml.value.scrollTop<20)&&C(()=>{Ml.value&&(Ml.value.scrollTop=0)})}),s(()=>vl.value.requests,e=>{kl("requests",pl.value.requests,e,600)}),s(()=>vl.value.tokens,e=>{kl("tokens",pl.value.tokens,e,600)}),s(()=>vl.value.cost,e=>{kl("cost",pl.value.cost,e,600)}),s(()=>J.channelType,()=>{var e;Pl=(null==(e=Fl.value[0])?void 0:e.id)||null}),s(()=>{var e,a;return null==(a=null==(e=sl.value)?void 0:e.counts)?void 0:a[J.channelType]},()=>{an()}),s(nl,()=>{El&&function(){Ul&&(clearInterval(Ul),Ul=null);const e=nl.value||30,a=Math.max(1e3*e,1e4);Ul=setInterval(()=>{ln(),Bl()},a)}()});const Yl=n({});function Ql(e){return!!Yl.value[e]}function en(e,a){e&&(Yl.value={...Yl.value,[e]:!!a})}function an(){var e,a;const l=null==(a=null==(e=sl.value)?void 0:e.counts)?void 0:a[J.channelType];rl.value.projects=(null==l?void 0:l.projectCount)||0,rl.value.sessions=(null==l?void 0:l.sessionCount)||0}async function ln(){if(sl.value&&sl.value.todayStats){const e=sl.value.todayStats[J.channelType];e&&(vl.value.requests=e.requests||0,vl.value.tokens=e.tokens||0,vl.value.cost=e.cost||0)}an()}function nn(){el(J.channelType)}function sn(){window.dispatchEvent(new CustomEvent("open-skills-drawer"))}return c(async()=>{await Promise.all([cl().then(()=>ln()),Bl()]),wl(),$l(),async function(){var e,a;try{if(sl.value&&sl.value.uiConfig)Ll.value=!1!==(null==(e=sl.value.uiConfig.panelVisibility)?void 0:e.showLogs);else{const e=await j();e.success&&e.config&&(Ll.value=!1!==(null==(a=e.config.panelVisibility)?void 0:a.showLogs))}}catch(l){}}(),async function(){var e,a;try{let l=!1;if(sl.value&&sl.value.uiConfig)l=(null==(e=sl.value.uiConfig.channelLocks)?void 0:e[J.channelType])||!1;else{const e=await j();e.success&&e.config&&(l=(null==(a=e.config.channelLocks)?void 0:a[J.channelType])||!1)}zl.value=l,ql(l)}catch(l){}}(),window.addEventListener("panel-visibility-change",Il),pl.value={...vl.value},El=!0,Dl=setInterval(()=>{Ol.value=Date.now()},1e3)}),t(()=>{El=!1,Ul&&clearInterval(Ul),Dl&&clearInterval(Dl),Vl&&clearTimeout(Vl),window.removeEventListener("panel-visibility-change",Il),Object.values(yl).forEach(e=>{e&&cancelAnimationFrame(e)})}),(a,l)=>{const n=o("n-collapse");return u(),i("div",ye,[d("div",{class:b(["channel-header",e.channelType])},[d("div",ge,[v(y(ie),{size:16},{default:h(()=>[v(y(B))]),_:1})]),d("div",me,[v(y(ie),{size:20},{default:h(()=>[(u(),p(g(il.value)))]),_:1})]),d("h2",ke,m(ol.value),1),xl.value>0?(u(),p(y(ve),{key:0,trigger:"click",placement:"bottom",width:340,class:"mcp-popover"},{trigger:h(()=>[v(y(re),{type:"info",size:"small",bordered:!1,class:"mcp-count-tag clickable"},{default:h(()=>[k(" 已启用 "+m(xl.value)+" 个 MCP ",1)]),_:1})]),default:h(()=>[d("div",fe,[d("div",Te,[l[3]||(l[3]=d("span",null,"已启用的 MCP 服务",-1)),v(y(ue),{depth:"3",style:{"font-size":"11px"}},{default:h(()=>[k(m(_l.value)+" 平台",1)]),_:1})]),0===Cl.value.length?(u(),i("div",be,[v(y(ue),{depth:"3"},{default:h(()=>[...l[4]||(l[4]=[k("暂无启用的 MCP 服务",-1)])]),_:1})])):(u(),i("div",xe,[(u(!0),i(f,null,T(Cl.value,e=>(u(),i("div",{key:e.id,class:"mcp-quick-item"},[d("div",Ce,[v(y(ie),{size:14},{default:h(()=>[v(y(H))]),_:1})]),d("div",_e,[d("span",we,m(e.name),1),d("span",$e,m(e.transportType||"stdio"),1)]),v(y(de),{size:"small",value:!0,"onUpdate:value":a=>async function(e,a){e._toggling=!0;try{await M(e.id,J.channelType,a),Da.success(a?`已启用 ${e.name}`:`已禁用 ${e.name}`),await $l(!0)}catch(l){Da.error("操作失败: "+(l.message||"未知错误"))}finally{e._toggling=!1}}(e,a),loading:e._toggling},null,8,["onUpdate:value","loading"])]))),128))]))])]),_:1})):r("",!0),"claude"===e.channelType?(u(),i("div",qe,[Tl.value>0?(u(),p(y(ve),{key:0,trigger:"click",placement:"bottom",width:340,class:"skills-popover"},{trigger:h(()=>[v(y(re),{type:"success",size:"small",bordered:!1,class:"skills-count-tag clickable"},{default:h(()=>[k(m(Tl.value)+" 个技能 ",1)]),_:1})]),default:h(()=>[d("div",ze,[d("div",Se,[l[6]||(l[6]=d("span",null,"已安装的技能",-1)),v(y(pe),{text:"",size:"tiny",onClick:sn},{default:h(()=>[...l[5]||(l[5]=[k(" 管理全部 ",-1)])]),_:1})]),0===bl.value.length?(u(),i("div",Le,[v(y(ue),{depth:"3"},{default:h(()=>[...l[7]||(l[7]=[k("暂无已安装的技能",-1)])]),_:1})])):(u(),i("div",Ie,[(u(!0),i(f,null,T(bl.value,e=>(u(),i("div",{key:e.id,class:"skill-quick-item"},[d("div",Oe,[v(y(ie),{size:14},{default:h(()=>[v(y(G))]),_:1})]),d("div",je,[d("span",Me,m(e.name),1),d("span",Ne,m(e.description||"无描述"),1)]),v(y(pe),{size:"tiny",tertiary:"",type:"error",onClick:a=>async function(e){e._uninstalling=!0;try{const a=await N(e.directory,J.channelType);a.success?(Da.success(`已卸载 ${e.name}`),await wl()):Da.error(a.error||"卸载失败")}catch(a){Da.error("卸载失败: "+(a.message||"未知错误"))}finally{e._uninstalling=!1}}(e),loading:e._uninstalling},{default:h(()=>[...l[8]||(l[8]=[k(" 卸载 ",-1)])]),_:1},8,["onClick","loading"])]))),128))]))])]),_:1})):r("",!0),v(y(he),{trigger:"hover"},{trigger:h(()=>[v(y(pe),{text:"",class:"skills-button",onClick:sn,title:"Skills 技能管理"},{icon:h(()=>[v(y(ie),{size:18},{default:h(()=>[v(y(G))]),_:1})]),_:1})]),default:h(()=>[l[9]||(l[9]=k(" Skills 技能管理 ",-1))]),_:1})])):r("",!0),v(y(pe),{text:"",class:"lock-button",onClick:Sl,title:zl.value?"解锁此列":"锁定此列"},{icon:h(()=>[v(y(ie),{size:18},{default:h(()=>[zl.value?(u(),p(y(W),{key:0})):(u(),p(y(X),{key:1}))]),_:1})]),_:1},8,["title"])],2),zl.value?r("",!0):(u(),i("div",Ae,[d("div",Fe,[d("div",Pe,[v(y(ie),{size:16},{default:h(()=>[v(y(Y))]),_:1}),l[10]||(l[10]=d("h3",{class:"card-title"},"代理控制",-1)),ul.value.running&&jl.value?(u(),i("span",Ue,m(jl.value),1)):r("",!0),v(y(de),{value:ul.value.running,"onUpdate:value":[l[0]||(l[0]=e=>ul.value.running=e),Hl],loading:ul.value.loading,size:"small",style:{"margin-left":"auto"}},null,8,["value","loading"])]),d("div",De,[d("div",Ee,[d("div",Ve,[d("div",{class:b(["status-dot",{active:ul.value.running}])},null,2),v(y(ue),{type:ul.value.running?"success":"default",style:{"font-size":"12px"}},{default:h(()=>[k(m(ul.value.running?"运行中":"已停止"),1)]),_:1},8,["type"]),d("span",Je,"端口: "+m(ul.value.port),1)]),v(y(ve),{trigger:"click",placement:"bottom",width:320,class:"channel-popover"},{trigger:h(()=>[v(y(pe),{text:"",size:"tiny",class:"channel-status"},{default:h(()=>[d("span",Ge,m(Kl.value),1)]),_:1})]),default:h(()=>[d("div",Ke,[d("div",Re,[l[12]||(l[12]=d("span",null,"渠道快捷管理",-1)),v(y(ue),{depth:"3",style:{"font-size":"11px"}},{default:h(()=>[...l[11]||(l[11]=[k("点击开关切换状态",-1)])]),_:1})]),0===Jl.value.length?(u(),i("div",Ze,[v(y(ue),{depth:"3"},{default:h(()=>[...l[13]||(l[13]=[k("暂无配置渠道",-1)])]),_:1})])):(u(),i("div",Be,[(u(!0),i(f,null,T(Jl.value,e=>{var a,n;return u(),i("div",{key:e.id,class:b(["channel-quick-item",{disabled:!1===e.enabled}])},[d("div",He,[d("span",We,m(e.name),1),"frozen"===(null==(a=e.health)?void 0:a.status)?(u(),p(y(re),{key:0,size:"tiny",type:"error",bordered:!1},{default:h(()=>[...l[14]||(l[14]=[k(" 冻结 ",-1)])]),_:1})):r("",!0),v(y(de),{size:"small",value:!1!==e.enabled,"onUpdate:value":a=>async function(e,a){if(e&&!Ql(e.id)){en(e.id,!0);try{let l;"claude"===J.channelType?l=A:"codex"===J.channelType?l=F:"gemini"===J.channelType?l=P:"opencode"===J.channelType&&(l=U),l&&(await l(e.id,{enabled:a}),Da.success(a?`渠道「${e.name}」已启用`:`渠道「${e.name}」已停用`),await al())}catch(l){Da.error("操作失败: "+l.message)}finally{en(e.id,!1)}}}(e,a),loading:Ql(e.id),disabled:Ql(e.id),style:{"margin-left":"auto"}},null,8,["value","onUpdate:value","loading","disabled"])]),Ql(e.id)?(u(),i("div",Xe," 正在切换渠道状态... ")):r("",!0),d("div",Ye,[d("span",Qe,[l[15]||(l[15]=d("span",{class:"metric-label"},"请求",-1)),d("span",ea,m(Zl(e.id).requests),1)]),d("span",aa,[l[16]||(l[16]=d("span",{class:"metric-label"},"Tokens",-1)),d("span",la,m((n=Zl(e.id).tokens,n>=1e6?(n/1e6).toFixed(1)+"M":n>=1e3?(n/1e3).toFixed(1)+"K":n.toString())),1)]),d("span",na,[l[17]||(l[17]=d("span",{class:"metric-label"},"权重",-1)),d("span",sa,m(e.weight||1),1)]),d("span",ca,[l[18]||(l[18]=d("span",{class:"metric-label"},"并发",-1)),d("span",{class:b(["metric-value",{active:Gl(e.id)>0}])},m(Gl(e.id))+m(e.maxConcurrency?`/${e.maxConcurrency}`:""),3)])])],2)}),128))]))])]),_:1})])])]),d("div",ta,[d("div",oa,[v(y(ie),{size:14},{default:h(()=>[v(y(Q))]),_:1}),l[19]||(l[19]=d("h3",{class:"card-title"},"快速访问",-1))]),d("div",ia,[d("div",ua,[d("div",{class:"access-card access-card-projects clickable",onClick:Wl},[d("div",da,[v(y(ie),{size:16},{default:h(()=>[v(y(ee))]),_:1})]),d("div",ra,[l[20]||(l[20]=d("span",{class:"access-label"},"项目",-1)),d("span",va,m(rl.value.projects),1)])]),d("div",{class:"access-card access-card-sessions clickable",onClick:l[1]||(l[1]=e=>fl.value=!0)},[d("div",pa,[v(y(ie),{size:16},{default:h(()=>[v(y(ae))]),_:1})]),d("div",ha,[l[21]||(l[21]=d("span",{class:"access-label"},"最新对话",-1)),d("span",ya,m(rl.value.sessions),1)])]),d("div",{class:"access-card access-card-goto clickable",onClick:Xl},[d("div",ga,[v(y(ie),{size:16},{default:h(()=>[v(y(le))]),_:1})]),d("div",ma,[l[22]||(l[22]=d("span",{class:"access-label"},"前往",-1)),d("span",ka,m(dl.value),1)])])])])]),d("div",{class:b(["card stats-card",`stats-card-${e.channelType}`])},[d("div",fa,[v(y(ie),{size:14},{default:h(()=>[v(y(ne))]),_:1}),l[23]||(l[23]=d("h3",{class:"card-title"},"今日数据",-1))]),d("div",Ta,[d("div",ba,[d("div",xa,[l[25]||(l[25]=d("div",{class:"stat-icon-dot requests"},null,-1)),d("div",Ca,[l[24]||(l[24]=d("span",{class:"stat-label"},"请求",-1)),d("span",{class:b(["stat-value",{animating:gl.value.requests}])},m(pl.value.requests),3)])]),d("div",_a,[l[27]||(l[27]=d("div",{class:"stat-icon-dot tokens"},null,-1)),d("div",wa,[l[26]||(l[26]=d("span",{class:"stat-label"},"总 Tokens",-1)),d("span",{class:b(["stat-value",{animating:gl.value.tokens}])},m((c=pl.value.tokens,c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString())),3)])]),d("div",$a,[l[29]||(l[29]=d("div",{class:"stat-icon-dot cost"},null,-1)),d("div",qa,[l[28]||(l[28]=d("span",{class:"stat-label"},"成本 / USD",-1)),d("span",{class:b(["stat-value",{animating:gl.value.cost}])},m((s=pl.value.cost,!s||Number.isNaN(s)?"$0":"$"+Number(s).toFixed(3))),3)])])])])],2),Object.keys(ml.value).length>0?(u(),i("div",{key:0,class:b(["card chart-card",`chart-card-${e.channelType}`])},[v(n,{"default-expanded-names":[],accordion:""})],2)):r("",!0),Ll.value?(u(),i("div",za,[d("div",Sa,[v(y(ie),{size:14},{default:h(()=>[v(y(se))]),_:1}),l[30]||(l[30]=d("h3",{class:"card-title"},"实时日志",-1)),v(y(pe),{text:"",size:"tiny",onClick:x(nn,["stop"]),style:{"margin-left":"auto"},title:"清空日志"},{icon:h(()=>[v(y(ie),{size:14},{default:h(()=>[v(y(ce))]),_:1})]),_:1})]),d("div",La,[d("div",Ia,[d("div",{class:b(["logs-table-header",`logs-header-${e.channelType}`])},[d("div",{class:b(["log-col col-channel",`col-channel-${e.channelType}`])},"渠道",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"请求",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"回复",2),"claude"===e.channelType?(u(),i(f,{key:0},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"写入",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"命中",2)],64)):"codex"===e.channelType?(u(),i(f,{key:1},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"推理",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2)],64)):"gemini"===e.channelType?(u(),i(f,{key:2},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"总计",2)],64)):"opencode"===e.channelType?(u(),i(f,{key:3},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"总计",2)],64)):r("",!0),d("div",{class:b(["log-col col-time",`col-time-${e.channelType}`])},"时间",2)],2),d("div",{class:"logs-container",ref_key:"logsContainer",ref:Ml},[0===Fl.value.length?(u(),i("div",Oa,[v(y(ie),{size:32,depth:"3",style:{"margin-bottom":"8px"}},{default:h(()=>[v(y(se))]),_:1}),v(y(ue),{depth:"3",style:{"font-size":"12px","font-weight":"500"}},{default:h(()=>[...l[31]||(l[31]=[k("暂无实时日志",-1)])]),_:1}),v(y(ue),{depth:"3",style:{"font-size":"11px","margin-top":"4px"}},{default:h(()=>[...l[32]||(l[32]=[k("开启代理后将显示请求记录",-1)])]),_:1})])):r("",!0),(u(!0),i(f,null,T(Fl.value,a=>{var l,n,s,c,t,o,p,g,T,x;return u(),i("div",{key:a.id,class:b(["log-row",{"action-row":"action"===a.type,"new-log":a.isNew}])},["action"===a.type?(u(),i("div",ja,[v(y(ie),{size:12,color:"#18a058"},{default:h(()=>[v(y(te))]),_:1}),d("span",Ma,m(a.message),1),d("span",Na,m(a.time),1)])):(u(),i(f,{key:1},[d("div",{class:b(["log-col col-channel",`col-channel-${e.channelType}`])},[v(y(re),{size:"tiny",type:"success"},{default:h(()=>[k(m(a.channel),1)]),_:2},1024)],2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(l=a.tokens)?void 0:l.input)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(n=a.tokens)?void 0:n.output)||0),3),"claude"===e.channelType?(u(),i(f,{key:0},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(s=a.tokens)?void 0:s.cacheCreation)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(c=a.tokens)?void 0:c.cacheRead)||0),3)],64)):"codex"===e.channelType?(u(),i(f,{key:1},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(t=a.tokens)?void 0:t.reasoning)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(o=a.tokens)?void 0:o.cached)||0),3)],64)):"gemini"===e.channelType?(u(),i(f,{key:2},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(p=a.tokens)?void 0:p.cached)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(g=a.tokens)?void 0:g.total)||0),3)],64)):"opencode"===e.channelType?(u(),i(f,{key:3},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(T=a.tokens)?void 0:T.cached)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(x=a.tokens)?void 0:x.total)||0),3)],64)):r("",!0),d("div",{class:b(["log-col col-time",`col-time-${e.channelType}`])},m(a.time),3)],64))],2)}),128))],512)])])])):r("",!0)])),zl.value?(u(),i("div",{key:1,class:b(["locked-overlay",`locked-${e.channelType}`])},[d("div",Aa,[d("div",Fa,[v(y(ie),{size:48},{default:h(()=>[v(y(W))]),_:1})]),l[34]||(l[34]=d("h3",{class:"locked-title"},"该渠道已锁定",-1)),v(y(ue),{depth:"3",class:"locked-hint"},{default:h(()=>[...l[33]||(l[33]=[k(" 点击上方按钮解锁以查看内容 ",-1)])]),_:1})])],2)):r("",!0),v(q,{visible:fl.value,"onUpdate:visible":l[2]||(l[2]=e=>fl.value=e),channel:e.channelType},null,8,["visible","channel"])]);var s,c}}},[["__scopeId","data-v-6eae1c5b"]]),Da=n({theme:"light",panelVisibility:{showChannels:!0,showLogs:!0},channelLocks:{claude:!1,codex:!1,gemini:!1},channelCollapse:{claude:[],codex:[],gemini:[]},channelOrder:{claude:[],codex:[],gemini:[]}});let Ea=!1,Va=null;async function Ja(){return Ea?Da.value:Va||(Va=(async()=>{try{const e=await j();e.success&&e.config&&(Da.value=e.config,Ea=!0)}catch(e){}finally{Va=null}return Da.value})(),Va)}const Ga={class:"dashboard-container"},Ka="dashboardChannelOrder",Ra=_({__name:"Home",setup(a){const l=["claude","codex","gemini","opencode"],{uiConfig:s,updateConfig:t,loadUIConfig:o}=(Ea||Ja(),{uiConfig:Da,loadUIConfig:Ja,saveConfig:async function(e){try{const a=await J(e);return!!a.success&&(Da.value=a.config,!0)}catch(a){return!1}},updateConfig:async function(e,a){try{const l=await V(e,a);return!!l.success&&(Da.value=l.config,!0)}catch(l){return!1}},updateNestedConfig:async function(e,a,l){try{const n=await E(e,a,l);return!!n.success&&(Da.value=n.config,!0)}catch(n){return!1}}});function d(e){try{localStorage.setItem(Ka,JSON.stringify(e))}catch(a){}}const r=n(function(){try{const e=localStorage.getItem(Ka);if(e){const a=JSON.parse(e);if(Array.isArray(a)&&4===a.length)return a}}catch(e){}return l}().map(e=>({type:e})));async function g(){const e=r.value.map(e=>e.type);d(e),await t("dashboardChannelOrder",e)}return c(async()=>{if(await o(),s.value.dashboardChannelOrder&&Array.isArray(s.value.dashboardChannelOrder)&&4===s.value.dashboardChannelOrder.length){const e=s.value.dashboardChannelOrder;r.value=e.map(e=>({type:e})),d(e)}}),(a,l)=>(u(),i("div",Ga,[v(y(e),{modelValue:r.value,"onUpdate:modelValue":l[0]||(l[0]=e=>r.value=e),class:"dashboard-grid","item-key":"type",animation:200,handle:".drag-handle",onEnd:g},{item:h(({element:e})=>[(u(),p(Ua,{"channel-type":e.type,key:e.type},null,8,["channel-type"]))]),_:1},8,["modelValue"])]))}},[["__scopeId","data-v-06100f0f"]]);export{Ra as default};
|
|
1
|
+
import{d as e}from"./vendors-i5CBGnlm.js";import{a6 as a,f as l,r as n,w as s,h as c,K as t,a8 as o,c as i,o as u,a as d,W as r,X as v,a0 as p,Y as h,N as y,a3 as g,_ as m,p as k,F as f,$ as T,L as b,Z as x,v as C}from"./vue-vendor-PKd8utv_.js";import{_,u as w,a as $,R as q,g as z,b as S,c as L,d as I,e as O,f as j,t as M,h as N,i as A,j as F,k as P,l as U,m as D,n as E,o as V,s as J}from"./index-B_kPXCbH.js";import{E as G,q as K,p as R,o as Z,ar as B,V as H,as as W,at as X,au as Y,av as Q,aa as ee,i as ae,A as le,aw as ne,ax as se,T as ce,a as te}from"./icons-BxcwoY5F.js";import{L as oe,N as ie,c as ue,b as de,a as re,Z as ve,B as pe,s as he}from"./naive-ui-BIXcURHZ.js";import"./markdown-C9MYpaSi.js";const ye={class:"channel-column"},ge={class:"drag-handle",title:"拖拽排序"},me={class:"header-icon"},ke={class:"channel-title"},fe={class:"mcp-quick-panel"},Te={class:"panel-title"},be={key:0,class:"no-items"},xe={key:1,class:"mcp-quick-list"},Ce={class:"mcp-item-icon"},_e={class:"mcp-item-info"},we={class:"mcp-item-name"},$e={class:"mcp-item-type"},qe={key:1,class:"claude-extra-area"},ze={class:"skills-quick-panel"},Se={class:"panel-title"},Le={key:0,class:"no-items"},Ie={key:1,class:"skills-quick-list"},Oe={class:"skill-item-icon"},je={class:"skill-item-info"},Me={class:"skill-item-name"},Ne={class:"skill-item-desc"},Ae={key:0,class:"channel-content"},Fe={class:"card"},Pe={class:"card-header"},Ue={key:0,class:"runtime-badge"},De={class:"card-body",style:{padding:"6px 10px"}},Ee={class:"proxy-info-row"},Ve={class:"proxy-status"},Je={class:"proxy-port"},Ge={class:"channel-name"},Ke={class:"channel-quick-panel"},Re={class:"panel-title"},Ze={key:0,class:"no-channels"},Be={key:1,class:"channel-quick-list"},He={class:"channel-quick-info"},We={class:"channel-quick-name"},Xe={key:0,class:"channel-switching-tip"},Ye={class:"channel-metrics"},Qe={class:"metric-item"},ea={class:"metric-value"},aa={class:"metric-item"},la={class:"metric-value"},na={class:"metric-item"},sa={class:"metric-value"},ca={class:"metric-item"},ta={class:"card"},oa={class:"card-header compact"},ia={class:"card-body",style:{padding:"8px 10px"}},ua={class:"quick-access-list"},da={class:"access-icon"},ra={class:"access-content"},va={class:"access-value"},pa={class:"access-icon"},ha={class:"access-content"},ya={class:"access-value"},ga={class:"access-icon"},ma={class:"access-content"},ka={class:"access-goto"},fa={class:"card-header compact"},Ta={class:"card-body",style:{padding:"8px 10px"}},ba={class:"stats-inline stats-3col"},xa={class:"stat-inline-item stat-requests"},Ca={class:"stat-info"},_a={class:"stat-inline-item stat-input"},wa={class:"stat-info"},$a={class:"stat-inline-item stat-output"},qa={class:"stat-info"},za={key:1,class:"card logs-card"},Sa={class:"card-header compact"},La={class:"card-body logs-card-body"},Ia={class:"logs-table-wrapper"},Oa={key:0,class:"empty-logs"},ja={key:0,class:"action-content"},Ma={class:"action-msg"},Na={class:"action-time"},Aa={class:"locked-content"},Fa={class:"lock-icon"},Pa="channelLocks",Ua=_({__name:"ChannelColumn",props:{channelType:{type:String,required:!0,validator:e=>["claude","codex","gemini","opencode"].includes(e)}},setup(e){let _=null,V=null;const J=e,Ua=a(),Da=oe(),{claudeProxy:Ea,codexProxy:Va,geminiProxy:Ja,opencodeProxy:Ga,claudeChannels:Ka,codexChannels:Ra,geminiChannels:Za,opencodeChannels:Ba,schedulerState:Ha,getProxyState:Wa,startProxy:Xa,stopProxy:Ya,getLogs:Qa,clearLogsForSource:el,loadChannels:al,logLimit:ll,statsInterval:nl}=w(),{dashboardData:sl,loadDashboard:cl}=$(),tl={claude:{title:"ClaudeCode",subtitle:"智能编程助手",icon:Z},codex:{title:"Codex-CLI",subtitle:"高效代码生成",icon:R},gemini:{title:"Gemini-CLI",subtitle:"多模态AI助手",icon:K},opencode:{title:"OpenCode",subtitle:"AI 代码助手",icon:G}},ol=l(()=>tl[J.channelType].title);l(()=>tl[J.channelType].subtitle);const il=l(()=>tl[J.channelType].icon),ul=l(()=>"claude"===J.channelType?Ea.value:"codex"===J.channelType?Va.value:"gemini"===J.channelType?Ja.value:"opencode"===J.channelType?Ga.value:{}),dl=l(()=>"claude"===J.channelType?"Claude":"codex"===J.channelType?"Codex":"gemini"===J.channelType?"Gemini":"opencode"===J.channelType?"OpenCode":""),rl=n({projects:0,sessions:0}),vl=n({requests:0,tokens:0,cost:0}),pl=n({requests:0,tokens:0,cost:0}),hl={requests:0,tokens:0,cost:3};let yl={requests:null,tokens:null,cost:null};const gl=n({requests:!1,tokens:!1,cost:!1}),ml=l(()=>{var e,a,l;const n="claude"===J.channelType?"claude":"codex"===J.channelType?"codex":"opencode"===J.channelType?"opencode":"gemini";return(null==(l=null==(a=null==(e=sl.value)?void 0:e.todayStats)?void 0:a[n])?void 0:l.byModel)||{}});function kl(e,a,l,n=600){yl[e]&&cancelAnimationFrame(yl[e]),gl.value[e]=!0;const s=Date.now(),c=()=>{const t=Date.now()-s,o=Math.min(t/n,1),i=1-Math.pow(1-o,2),u=a+(l-a)*i,d=hl[e]??0,r=Math.pow(10,d),v=d>0?Math.round(u*r)/r:Math.round(u);pl.value[e]=v,o<1?yl[e]=requestAnimationFrame(c):gl.value[e]=!1};yl[e]=requestAnimationFrame(c)}const fl=n(!1),Tl=n(0),bl=n([]),xl=n(0),Cl=n([]),_l=l(()=>({claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode"}[J.channelType]||""));async function wl(){if(["claude","codex","opencode"].includes(J.channelType))try{const e=await O(!1,J.channelType);if(e.success&&e.skills){const a=e.skills.filter(e=>e.installed);Tl.value=a.length,bl.value=a.slice(0,10).map(e=>({...e,_uninstalling:!1}))}}catch(e){}}async function $l(e=!1){try{const a=await async function(e=!1){if(!e&&_)return _;if(!e&&V)return V;const a=D().then(e=>(_=(null==e?void 0:e.success)&&e.servers?Object.values(e.servers):[],_)).finally(()=>{V=null});return V=a,a}(e),l=a.filter(e=>{var a;return!0===(null==(a=e.apps)?void 0:a[J.channelType])});xl.value=l.length,Cl.value=l.slice(0,10).map(e=>({...e,_toggling:!1}))}catch(a){}}function ql(e){try{const a=localStorage.getItem(Pa),l=a?JSON.parse(a):{};l[J.channelType]=e,localStorage.setItem(Pa,JSON.stringify(l))}catch(a){}}const zl=n(function(){try{const e=localStorage.getItem(Pa);if(e){return JSON.parse(e)[J.channelType]||!1}}catch(e){}return!1}());async function Sl(){zl.value=!zl.value,ql(zl.value);try{if(await E("channelLocks",J.channelType,zl.value),sl.value){const e=sl.value.uiConfig||{},a={...e.channelLocks||{}};a[J.channelType]=zl.value,sl.value={...sl.value,uiConfig:{...e,channelLocks:a}}}}catch(e){}}const Ll=n(!0);function Il(e){e.detail&&void 0!==e.detail.showLogs&&(Ll.value=e.detail.showLogs)}const Ol=n(Date.now()),jl=l(()=>{if(!ul.value.running)return"";const e=ul.value.startTime;if(!e)return"";const a=Ol.value-e;if(a<=0)return"";const l=Math.floor(a/1e3),n=Math.floor(l/3600),s=Math.floor(l%3600/60),c=l%60;let t="已运行 ";return n>0&&(t+=`${n}小时`),s>0&&(t+=`${s}分`),(c>0||0===n&&0===s)&&(t+=`${c}秒`),t}),Ml=n(null),Nl=l(()=>ll.value),Al={claude:Qa("claude"),codex:Qa("codex"),gemini:Qa("gemini"),opencode:Qa("opencode")},Fl=l(()=>((Al[J.channelType]||Al.claude).value||[]).slice(0,Nl.value));let Pl=null,Ul=null,Dl=null,El=!1,Vl=null;const Jl=l(()=>{let e=[];"claude"===J.channelType?e=Ka.value||[]:"codex"===J.channelType?e=Ra.value||[]:"gemini"===J.channelType?e=Za.value||[]:"opencode"===J.channelType&&(e=Ba.value||[]);return[...e.filter(e=>!1!==e.enabled),...e.filter(e=>!1===e.enabled)]});function Gl(e){const a=Ha[J.channelType];if(!a||!a.channels)return 0;const l=a.channels.find(a=>a.id===e);return l?l.inflight:0}const Kl=l(()=>{var e;const a=Jl.value.filter(e=>!1!==e.enabled).length;return(null==(e=ul.value.proxy)?void 0:e.running)?`${a}个渠道调度中`:Jl.value.length>0?`${a}个渠道已启用`:"无渠道"}),Rl=n({});function Zl(e){return Rl.value[e]||{requests:0,tokens:0,cost:0}}async function Bl(){var e;try{let a;if("claude"===J.channelType?a=await z():"codex"===J.channelType?a=await S():"gemini"===J.channelType?a=await L():"opencode"===J.channelType&&(a=await I()),a&&a.byChannel){const l={};for(const[n,s]of Object.entries(a.byChannel))l[n]={requests:s.requests||0,tokens:(null==(e=s.tokens)?void 0:e.total)||0,cost:s.cost||0};Rl.value=l}}catch(a){}}async function Hl(e){var a,l;const n=Wa(J.channelType);n.value.loading=!0;try{let a;a=e?await Xa(J.channelType):await Ya(J.channelType),!1!==a.success?Da.success(e?`${ol.value} 代理已启动`:`${ol.value} 代理已停止`):(Da.error(a.error||"操作失败"),n.value.running=!e)}catch(s){Da.error((null==(l=null==(a=s.response)?void 0:a.data)?void 0:l.error)||s.message||"操作失败"),n.value.running=!e}finally{n.value.loading=!1}}function Wl(){Ua.push({name:`${J.channelType}-projects`})}function Xl(){Ua.push({name:`${J.channelType}-projects`})}s(Fl,e=>{var a;const l=(null==(a=e[0])?void 0:a.id)||null;if(!l||l===Pl)return void(Pl=l);Pl=l,Vl&&clearTimeout(Vl),Vl=setTimeout(()=>{Bl()},5e3);(!Ml.value||Ml.value.scrollTop<20)&&C(()=>{Ml.value&&(Ml.value.scrollTop=0)})}),s(()=>vl.value.requests,e=>{kl("requests",pl.value.requests,e,600)}),s(()=>vl.value.tokens,e=>{kl("tokens",pl.value.tokens,e,600)}),s(()=>vl.value.cost,e=>{kl("cost",pl.value.cost,e,600)}),s(()=>J.channelType,()=>{var e;Pl=(null==(e=Fl.value[0])?void 0:e.id)||null}),s(()=>{var e,a;return null==(a=null==(e=sl.value)?void 0:e.counts)?void 0:a[J.channelType]},()=>{an()}),s(nl,()=>{El&&function(){Ul&&(clearInterval(Ul),Ul=null);const e=nl.value||30,a=Math.max(1e3*e,1e4);Ul=setInterval(()=>{ln(),Bl()},a)}()});const Yl=n({});function Ql(e){return!!Yl.value[e]}function en(e,a){e&&(Yl.value={...Yl.value,[e]:!!a})}function an(){var e,a;const l=null==(a=null==(e=sl.value)?void 0:e.counts)?void 0:a[J.channelType];rl.value.projects=(null==l?void 0:l.projectCount)||0,rl.value.sessions=(null==l?void 0:l.sessionCount)||0}async function ln(){if(sl.value&&sl.value.todayStats){const e=sl.value.todayStats[J.channelType];e&&(vl.value.requests=e.requests||0,vl.value.tokens=e.tokens||0,vl.value.cost=e.cost||0)}an()}function nn(){el(J.channelType)}function sn(){window.dispatchEvent(new CustomEvent("open-skills-drawer"))}return c(async()=>{await Promise.all([cl().then(()=>ln()),Bl()]),wl(),$l(),async function(){var e,a;try{if(sl.value&&sl.value.uiConfig)Ll.value=!1!==(null==(e=sl.value.uiConfig.panelVisibility)?void 0:e.showLogs);else{const e=await j();e.success&&e.config&&(Ll.value=!1!==(null==(a=e.config.panelVisibility)?void 0:a.showLogs))}}catch(l){}}(),async function(){var e,a;try{let l=!1;if(sl.value&&sl.value.uiConfig)l=(null==(e=sl.value.uiConfig.channelLocks)?void 0:e[J.channelType])||!1;else{const e=await j();e.success&&e.config&&(l=(null==(a=e.config.channelLocks)?void 0:a[J.channelType])||!1)}zl.value=l,ql(l)}catch(l){}}(),window.addEventListener("panel-visibility-change",Il),pl.value={...vl.value},El=!0,Dl=setInterval(()=>{Ol.value=Date.now()},1e3)}),t(()=>{El=!1,Ul&&clearInterval(Ul),Dl&&clearInterval(Dl),Vl&&clearTimeout(Vl),window.removeEventListener("panel-visibility-change",Il),Object.values(yl).forEach(e=>{e&&cancelAnimationFrame(e)})}),(a,l)=>{const n=o("n-collapse");return u(),i("div",ye,[d("div",{class:b(["channel-header",e.channelType])},[d("div",ge,[v(y(ie),{size:16},{default:h(()=>[v(y(B))]),_:1})]),d("div",me,[v(y(ie),{size:20},{default:h(()=>[(u(),p(g(il.value)))]),_:1})]),d("h2",ke,m(ol.value),1),xl.value>0?(u(),p(y(ve),{key:0,trigger:"click",placement:"bottom",width:340,class:"mcp-popover"},{trigger:h(()=>[v(y(re),{type:"info",size:"small",bordered:!1,class:"mcp-count-tag clickable"},{default:h(()=>[k(" 已启用 "+m(xl.value)+" 个 MCP ",1)]),_:1})]),default:h(()=>[d("div",fe,[d("div",Te,[l[3]||(l[3]=d("span",null,"已启用的 MCP 服务",-1)),v(y(ue),{depth:"3",style:{"font-size":"11px"}},{default:h(()=>[k(m(_l.value)+" 平台",1)]),_:1})]),0===Cl.value.length?(u(),i("div",be,[v(y(ue),{depth:"3"},{default:h(()=>[...l[4]||(l[4]=[k("暂无启用的 MCP 服务",-1)])]),_:1})])):(u(),i("div",xe,[(u(!0),i(f,null,T(Cl.value,e=>(u(),i("div",{key:e.id,class:"mcp-quick-item"},[d("div",Ce,[v(y(ie),{size:14},{default:h(()=>[v(y(H))]),_:1})]),d("div",_e,[d("span",we,m(e.name),1),d("span",$e,m(e.transportType||"stdio"),1)]),v(y(de),{size:"small",value:!0,"onUpdate:value":a=>async function(e,a){e._toggling=!0;try{await M(e.id,J.channelType,a),Da.success(a?`已启用 ${e.name}`:`已禁用 ${e.name}`),await $l(!0)}catch(l){Da.error("操作失败: "+(l.message||"未知错误"))}finally{e._toggling=!1}}(e,a),loading:e._toggling},null,8,["onUpdate:value","loading"])]))),128))]))])]),_:1})):r("",!0),"claude"===e.channelType?(u(),i("div",qe,[Tl.value>0?(u(),p(y(ve),{key:0,trigger:"click",placement:"bottom",width:340,class:"skills-popover"},{trigger:h(()=>[v(y(re),{type:"success",size:"small",bordered:!1,class:"skills-count-tag clickable"},{default:h(()=>[k(m(Tl.value)+" 个技能 ",1)]),_:1})]),default:h(()=>[d("div",ze,[d("div",Se,[l[6]||(l[6]=d("span",null,"已安装的技能",-1)),v(y(pe),{text:"",size:"tiny",onClick:sn},{default:h(()=>[...l[5]||(l[5]=[k(" 管理全部 ",-1)])]),_:1})]),0===bl.value.length?(u(),i("div",Le,[v(y(ue),{depth:"3"},{default:h(()=>[...l[7]||(l[7]=[k("暂无已安装的技能",-1)])]),_:1})])):(u(),i("div",Ie,[(u(!0),i(f,null,T(bl.value,e=>(u(),i("div",{key:e.id,class:"skill-quick-item"},[d("div",Oe,[v(y(ie),{size:14},{default:h(()=>[v(y(G))]),_:1})]),d("div",je,[d("span",Me,m(e.name),1),d("span",Ne,m(e.description||"无描述"),1)]),v(y(pe),{size:"tiny",tertiary:"",type:"error",onClick:a=>async function(e){e._uninstalling=!0;try{const a=await N(e.directory,J.channelType);a.success?(Da.success(`已卸载 ${e.name}`),await wl()):Da.error(a.error||"卸载失败")}catch(a){Da.error("卸载失败: "+(a.message||"未知错误"))}finally{e._uninstalling=!1}}(e),loading:e._uninstalling},{default:h(()=>[...l[8]||(l[8]=[k(" 卸载 ",-1)])]),_:1},8,["onClick","loading"])]))),128))]))])]),_:1})):r("",!0),v(y(he),{trigger:"hover"},{trigger:h(()=>[v(y(pe),{text:"",class:"skills-button",onClick:sn,title:"Skills 技能管理"},{icon:h(()=>[v(y(ie),{size:18},{default:h(()=>[v(y(G))]),_:1})]),_:1})]),default:h(()=>[l[9]||(l[9]=k(" Skills 技能管理 ",-1))]),_:1})])):r("",!0),v(y(pe),{text:"",class:"lock-button",onClick:Sl,title:zl.value?"解锁此列":"锁定此列"},{icon:h(()=>[v(y(ie),{size:18},{default:h(()=>[zl.value?(u(),p(y(W),{key:0})):(u(),p(y(X),{key:1}))]),_:1})]),_:1},8,["title"])],2),zl.value?r("",!0):(u(),i("div",Ae,[d("div",Fe,[d("div",Pe,[v(y(ie),{size:16},{default:h(()=>[v(y(Y))]),_:1}),l[10]||(l[10]=d("h3",{class:"card-title"},"代理控制",-1)),ul.value.running&&jl.value?(u(),i("span",Ue,m(jl.value),1)):r("",!0),v(y(de),{value:ul.value.running,"onUpdate:value":[l[0]||(l[0]=e=>ul.value.running=e),Hl],loading:ul.value.loading,size:"small",style:{"margin-left":"auto"}},null,8,["value","loading"])]),d("div",De,[d("div",Ee,[d("div",Ve,[d("div",{class:b(["status-dot",{active:ul.value.running}])},null,2),v(y(ue),{type:ul.value.running?"success":"default",style:{"font-size":"12px"}},{default:h(()=>[k(m(ul.value.running?"运行中":"已停止"),1)]),_:1},8,["type"]),d("span",Je,"端口: "+m(ul.value.port),1)]),v(y(ve),{trigger:"click",placement:"bottom",width:320,class:"channel-popover"},{trigger:h(()=>[v(y(pe),{text:"",size:"tiny",class:"channel-status"},{default:h(()=>[d("span",Ge,m(Kl.value),1)]),_:1})]),default:h(()=>[d("div",Ke,[d("div",Re,[l[12]||(l[12]=d("span",null,"渠道快捷管理",-1)),v(y(ue),{depth:"3",style:{"font-size":"11px"}},{default:h(()=>[...l[11]||(l[11]=[k("点击开关切换状态",-1)])]),_:1})]),0===Jl.value.length?(u(),i("div",Ze,[v(y(ue),{depth:"3"},{default:h(()=>[...l[13]||(l[13]=[k("暂无配置渠道",-1)])]),_:1})])):(u(),i("div",Be,[(u(!0),i(f,null,T(Jl.value,e=>{var a,n;return u(),i("div",{key:e.id,class:b(["channel-quick-item",{disabled:!1===e.enabled}])},[d("div",He,[d("span",We,m(e.name),1),"frozen"===(null==(a=e.health)?void 0:a.status)?(u(),p(y(re),{key:0,size:"tiny",type:"error",bordered:!1},{default:h(()=>[...l[14]||(l[14]=[k(" 冻结 ",-1)])]),_:1})):r("",!0),v(y(de),{size:"small",value:!1!==e.enabled,"onUpdate:value":a=>async function(e,a){if(e&&!Ql(e.id)){en(e.id,!0);try{let l;"claude"===J.channelType?l=A:"codex"===J.channelType?l=F:"gemini"===J.channelType?l=P:"opencode"===J.channelType&&(l=U),l&&(await l(e.id,{enabled:a}),Da.success(a?`渠道「${e.name}」已启用`:`渠道「${e.name}」已停用`),await al())}catch(l){Da.error("操作失败: "+l.message)}finally{en(e.id,!1)}}}(e,a),loading:Ql(e.id),disabled:Ql(e.id),style:{"margin-left":"auto"}},null,8,["value","onUpdate:value","loading","disabled"])]),Ql(e.id)?(u(),i("div",Xe," 正在切换渠道状态... ")):r("",!0),d("div",Ye,[d("span",Qe,[l[15]||(l[15]=d("span",{class:"metric-label"},"请求",-1)),d("span",ea,m(Zl(e.id).requests),1)]),d("span",aa,[l[16]||(l[16]=d("span",{class:"metric-label"},"Tokens",-1)),d("span",la,m((n=Zl(e.id).tokens,n>=1e6?(n/1e6).toFixed(1)+"M":n>=1e3?(n/1e3).toFixed(1)+"K":n.toString())),1)]),d("span",na,[l[17]||(l[17]=d("span",{class:"metric-label"},"权重",-1)),d("span",sa,m(e.weight||1),1)]),d("span",ca,[l[18]||(l[18]=d("span",{class:"metric-label"},"并发",-1)),d("span",{class:b(["metric-value",{active:Gl(e.id)>0}])},m(Gl(e.id))+m(e.maxConcurrency?`/${e.maxConcurrency}`:""),3)])])],2)}),128))]))])]),_:1})])])]),d("div",ta,[d("div",oa,[v(y(ie),{size:14},{default:h(()=>[v(y(Q))]),_:1}),l[19]||(l[19]=d("h3",{class:"card-title"},"快速访问",-1))]),d("div",ia,[d("div",ua,[d("div",{class:"access-card access-card-projects clickable",onClick:Wl},[d("div",da,[v(y(ie),{size:16},{default:h(()=>[v(y(ee))]),_:1})]),d("div",ra,[l[20]||(l[20]=d("span",{class:"access-label"},"项目",-1)),d("span",va,m(rl.value.projects),1)])]),d("div",{class:"access-card access-card-sessions clickable",onClick:l[1]||(l[1]=e=>fl.value=!0)},[d("div",pa,[v(y(ie),{size:16},{default:h(()=>[v(y(ae))]),_:1})]),d("div",ha,[l[21]||(l[21]=d("span",{class:"access-label"},"最新对话",-1)),d("span",ya,m(rl.value.sessions),1)])]),d("div",{class:"access-card access-card-goto clickable",onClick:Xl},[d("div",ga,[v(y(ie),{size:16},{default:h(()=>[v(y(le))]),_:1})]),d("div",ma,[l[22]||(l[22]=d("span",{class:"access-label"},"前往",-1)),d("span",ka,m(dl.value),1)])])])])]),d("div",{class:b(["card stats-card",`stats-card-${e.channelType}`])},[d("div",fa,[v(y(ie),{size:14},{default:h(()=>[v(y(ne))]),_:1}),l[23]||(l[23]=d("h3",{class:"card-title"},"今日数据",-1))]),d("div",Ta,[d("div",ba,[d("div",xa,[l[25]||(l[25]=d("div",{class:"stat-icon-dot requests"},null,-1)),d("div",Ca,[l[24]||(l[24]=d("span",{class:"stat-label"},"请求",-1)),d("span",{class:b(["stat-value",{animating:gl.value.requests}])},m(pl.value.requests),3)])]),d("div",_a,[l[27]||(l[27]=d("div",{class:"stat-icon-dot tokens"},null,-1)),d("div",wa,[l[26]||(l[26]=d("span",{class:"stat-label"},"总 Tokens",-1)),d("span",{class:b(["stat-value",{animating:gl.value.tokens}])},m((c=pl.value.tokens,c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString())),3)])]),d("div",$a,[l[29]||(l[29]=d("div",{class:"stat-icon-dot cost"},null,-1)),d("div",qa,[l[28]||(l[28]=d("span",{class:"stat-label"},"成本 / USD",-1)),d("span",{class:b(["stat-value",{animating:gl.value.cost}])},m((s=pl.value.cost,!s||Number.isNaN(s)?"$0":"$"+Number(s).toFixed(3))),3)])])])])],2),Object.keys(ml.value).length>0?(u(),i("div",{key:0,class:b(["card chart-card",`chart-card-${e.channelType}`])},[v(n,{"default-expanded-names":[],accordion:""})],2)):r("",!0),Ll.value?(u(),i("div",za,[d("div",Sa,[v(y(ie),{size:14},{default:h(()=>[v(y(se))]),_:1}),l[30]||(l[30]=d("h3",{class:"card-title"},"实时日志",-1)),v(y(pe),{text:"",size:"tiny",onClick:x(nn,["stop"]),style:{"margin-left":"auto"},title:"清空日志"},{icon:h(()=>[v(y(ie),{size:14},{default:h(()=>[v(y(ce))]),_:1})]),_:1})]),d("div",La,[d("div",Ia,[d("div",{class:b(["logs-table-header",`logs-header-${e.channelType}`])},[d("div",{class:b(["log-col col-channel",`col-channel-${e.channelType}`])},"渠道",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"请求",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"回复",2),"claude"===e.channelType?(u(),i(f,{key:0},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"写入",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"命中",2)],64)):"codex"===e.channelType?(u(),i(f,{key:1},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"推理",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2)],64)):"gemini"===e.channelType?(u(),i(f,{key:2},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"总计",2)],64)):"opencode"===e.channelType?(u(),i(f,{key:3},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"总计",2)],64)):r("",!0),d("div",{class:b(["log-col col-time",`col-time-${e.channelType}`])},"时间",2)],2),d("div",{class:"logs-container",ref_key:"logsContainer",ref:Ml},[0===Fl.value.length?(u(),i("div",Oa,[v(y(ie),{size:32,depth:"3",style:{"margin-bottom":"8px"}},{default:h(()=>[v(y(se))]),_:1}),v(y(ue),{depth:"3",style:{"font-size":"12px","font-weight":"500"}},{default:h(()=>[...l[31]||(l[31]=[k("暂无实时日志",-1)])]),_:1}),v(y(ue),{depth:"3",style:{"font-size":"11px","margin-top":"4px"}},{default:h(()=>[...l[32]||(l[32]=[k("开启代理后将显示请求记录",-1)])]),_:1})])):r("",!0),(u(!0),i(f,null,T(Fl.value,a=>{var l,n,s,c,t,o,p,g,T,x;return u(),i("div",{key:a.id,class:b(["log-row",{"action-row":"action"===a.type,"new-log":a.isNew}])},["action"===a.type?(u(),i("div",ja,[v(y(ie),{size:12,color:"#18a058"},{default:h(()=>[v(y(te))]),_:1}),d("span",Ma,m(a.message),1),d("span",Na,m(a.time),1)])):(u(),i(f,{key:1},[d("div",{class:b(["log-col col-channel",`col-channel-${e.channelType}`])},[v(y(re),{size:"tiny",type:"success"},{default:h(()=>[k(m(a.channel),1)]),_:2},1024)],2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(l=a.tokens)?void 0:l.input)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(n=a.tokens)?void 0:n.output)||0),3),"claude"===e.channelType?(u(),i(f,{key:0},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(s=a.tokens)?void 0:s.cacheCreation)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(c=a.tokens)?void 0:c.cacheRead)||0),3)],64)):"codex"===e.channelType?(u(),i(f,{key:1},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(t=a.tokens)?void 0:t.reasoning)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(o=a.tokens)?void 0:o.cached)||0),3)],64)):"gemini"===e.channelType?(u(),i(f,{key:2},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(p=a.tokens)?void 0:p.cached)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(g=a.tokens)?void 0:g.total)||0),3)],64)):"opencode"===e.channelType?(u(),i(f,{key:3},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(T=a.tokens)?void 0:T.cached)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(x=a.tokens)?void 0:x.total)||0),3)],64)):r("",!0),d("div",{class:b(["log-col col-time",`col-time-${e.channelType}`])},m(a.time),3)],64))],2)}),128))],512)])])])):r("",!0)])),zl.value?(u(),i("div",{key:1,class:b(["locked-overlay",`locked-${e.channelType}`])},[d("div",Aa,[d("div",Fa,[v(y(ie),{size:48},{default:h(()=>[v(y(W))]),_:1})]),l[34]||(l[34]=d("h3",{class:"locked-title"},"该渠道已锁定",-1)),v(y(ue),{depth:"3",class:"locked-hint"},{default:h(()=>[...l[33]||(l[33]=[k(" 点击上方按钮解锁以查看内容 ",-1)])]),_:1})])],2)):r("",!0),v(q,{visible:fl.value,"onUpdate:visible":l[2]||(l[2]=e=>fl.value=e),channel:e.channelType},null,8,["visible","channel"])]);var s,c}}},[["__scopeId","data-v-6eae1c5b"]]),Da=n({theme:"light",panelVisibility:{showChannels:!0,showLogs:!0},channelLocks:{claude:!1,codex:!1,gemini:!1},channelCollapse:{claude:[],codex:[],gemini:[]},channelOrder:{claude:[],codex:[],gemini:[]}});let Ea=!1,Va=null;async function Ja(){return Ea?Da.value:Va||(Va=(async()=>{try{const e=await j();e.success&&e.config&&(Da.value=e.config,Ea=!0)}catch(e){}finally{Va=null}return Da.value})(),Va)}const Ga={class:"dashboard-container"},Ka="dashboardChannelOrder",Ra=_({__name:"Home",setup(a){const l=["claude","codex","gemini","opencode"],{uiConfig:s,updateConfig:t,loadUIConfig:o}=(Ea||Ja(),{uiConfig:Da,loadUIConfig:Ja,saveConfig:async function(e){try{const a=await J(e);return!!a.success&&(Da.value=a.config,!0)}catch(a){return!1}},updateConfig:async function(e,a){try{const l=await V(e,a);return!!l.success&&(Da.value=l.config,!0)}catch(l){return!1}},updateNestedConfig:async function(e,a,l){try{const n=await E(e,a,l);return!!n.success&&(Da.value=n.config,!0)}catch(n){return!1}}});function d(e){try{localStorage.setItem(Ka,JSON.stringify(e))}catch(a){}}const r=n(function(){try{const e=localStorage.getItem(Ka);if(e){const a=JSON.parse(e);if(Array.isArray(a)&&4===a.length)return a}}catch(e){}return l}().map(e=>({type:e})));async function g(){const e=r.value.map(e=>e.type);d(e),await t("dashboardChannelOrder",e)}return c(async()=>{if(await o(),s.value.dashboardChannelOrder&&Array.isArray(s.value.dashboardChannelOrder)&&4===s.value.dashboardChannelOrder.length){const e=s.value.dashboardChannelOrder;r.value=e.map(e=>({type:e})),d(e)}}),(a,l)=>(u(),i("div",Ga,[v(y(e),{modelValue:r.value,"onUpdate:modelValue":l[0]||(l[0]=e=>r.value=e),class:"dashboard-grid","item-key":"type",animation:200,handle:".drag-handle",onEnd:g},{item:h(({element:e})=>[(u(),p(Ua,{"channel-type":e.type,key:e.type},null,8,["channel-type"]))]),_:1},8,["modelValue"])]))}},[["__scopeId","data-v-06100f0f"]]);export{Ra as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as a,P as s}from"./index-
|
|
1
|
+
import{_ as a,P as s}from"./index-B_kPXCbH.js";import{c as r,o as e,X as o,Y as i,N as d}from"./vue-vendor-PKd8utv_.js";import{K as n}from"./naive-ui-BIXcURHZ.js";import"./vendors-i5CBGnlm.js";import"./markdown-C9MYpaSi.js";import"./icons-BxcwoY5F.js";const t={class:"plugin-manager"},m=a({__name:"PluginManager",setup:a=>(a,m)=>(e(),r("div",t,[o(d(n),{title:"Plugins 插件管理",bordered:!1},{default:i(()=>[o(s,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-6d92033b"]]);export{m as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,f as a,c as t,o as s,a as l,X as n,s as o,Y as r,N as c,_ as i,G as u,Z as d,p,a0 as v,W as m,a6 as f,a5 as h,w as y,h as _,K as g,F as k,$ as j,a7 as w,R as x,v as b}from"./vue-vendor-PKd8utv_.js";import{d as C}from"./vendors-i5CBGnlm.js";import{_ as $,p as z,q as L,r as N,v as P,w as D}from"./index-
|
|
1
|
+
import{r as e,f as a,c as t,o as s,a as l,X as n,s as o,Y as r,N as c,_ as i,G as u,Z as d,p,a0 as v,W as m,a6 as f,a5 as h,w as y,h as _,K as g,F as k,$ as j,a7 as w,R as x,v as b}from"./vue-vendor-PKd8utv_.js";import{d as C}from"./vendors-i5CBGnlm.js";import{_ as $,p as z,q as L,r as N,v as P,w as D}from"./index-B_kPXCbH.js";import{a9 as M,T as I,d as T,ad as E,h as K}from"./icons-BxcwoY5F.js";import{N as U,B as q,c as R,a as S,_ as V,q as H,n as O,g as A,x as B,h as F,p as G}from"./naive-ui-BIXcURHZ.js";import"./markdown-C9MYpaSi.js";const W={class:"card-content"},X={class:"header-row"},Y={class:"project-name"},Z={class:"stats-row"},J=$({__name:"ProjectCard",props:{project:{type:Object,required:!0}},emits:["click","delete"],setup(f,{emit:h}){const y=f,_=h,g=e(!1);function k(){_("click")}function j(){_("delete",y.project)}const w=a(()=>{var e,a;return(null==(e=y.project)?void 0:e.displayName)||(null==(a=y.project)?void 0:a.name)||""}),x=a(()=>{var e,a,t;return(null==(e=y.project)?void 0:e.path)||(null==(a=y.project)?void 0:a.fullPath)||(null==(t=y.project)?void 0:t.name)||""}),b=a(()=>{var e;return(null==(e=y.project)?void 0:e.sessionCount)||0}),C=a(()=>{var e;return null==(e=y.project)?void 0:e.lastUsed}),$=a(()=>{var e;const a=["#18a058","#2080f0","#f0a020","#d03050","#9333ea","#06b6d4"];return a[((null==(e=y.project)?void 0:e.name)||"").split("").reduce((e,a)=>e+a.charCodeAt(0),0)%a.length]});function z(e){if(!e)return"";const a=new Date(e),t=new Date-a;return t<6e4?"刚刚":t<36e5?`${Math.floor(t/6e4)}分钟前`:t<864e5?`${Math.floor(t/36e5)}小时前`:t<6048e5?`${Math.floor(t/864e5)}天前`:a.toLocaleDateString("zh-CN")}return(e,a)=>(s(),t("div",{class:"project-card",onClick:k,onMouseenter:a[0]||(a[0]=e=>g.value=!0),onMouseleave:a[1]||(a[1]=e=>g.value=!1)},[l("div",W,[l("div",X,[n(c(U),{size:"18",color:$.value},{default:r(()=>[n(c(M))]),_:1},8,["color"]),l("span",Y,i(w.value),1),o(n(c(q),{text:"",type:"error",size:"tiny",class:"delete-btn",onClick:d(j,["stop"])},{icon:r(()=>[n(c(U),{size:"14"},{default:r(()=>[n(c(I))]),_:1})]),_:1},512),[[u,g.value]])]),n(c(R),{depth:"3",class:"project-path"},{default:r(()=>[p(i(x.value),1)]),_:1}),l("div",Z,[n(c(S),{size:"tiny",bordered:!1,type:"success"},{default:r(()=>[p(i(b.value)+" 会话 ",1)]),_:1}),C.value?(s(),v(c(R),{key:0,depth:"3",class:"last-used"},{default:r(()=>[p(i(z(C.value)),1)]),_:1})):m("",!0)])])],32))}},[["__scopeId","data-v-3a18e66d"]]),Q={class:"project-list-container"},ee={class:"header"},ae={class:"header-text"},te={key:0,class:"loading-container"},se={key:3,class:"projects-grid"},le={class:"search-hint"},ne={style:{"margin-bottom":"16px"}},oe={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},re={class:"search-result-header"},ce={class:"search-result-title"},ie=$({__name:"ProjectList",setup(o){const u=f(),d=h(),$=z(),I=a(()=>d.meta.channel||"claude"),W=e(""),X=e([]),Y=e(null),Z=e(!1),ie=e(""),ue=e(null),de=e(!1),pe=e(null),ve=a(()=>{const e=W.value.toLowerCase();return X.value.filter(a=>{const t=(a.displayName||"").toLowerCase(),s=(a.fullPath||"").toLowerCase();return t.includes(e)||s.includes(e)})});function me(e){const a=d.meta.channel||"claude";u.push({name:`${a}-sessions`,params:{projectName:e}})}async function fe(){const e=X.value.map(e=>e.name);await $.saveProjectOrder(e)}function he(e){const a=e.fullPath||e.name,t=e.sessionCount||0;L.warning({title:"删除项目",content:`确定要删除项目 "${a}" 吗?\n\n当前项目包含 ${t} 个会话,删除后所有会话数据将无法恢复!`,positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await $.deleteProject(e.name),N.success("项目已删除")}catch(a){N.error("删除失败: "+a.message)}}})}function ye(){const e=I.value||"claude";u.push({name:"terminal-channel",params:{channel:e},query:{cwd:".",openTs:Date.now().toString()}})}async function _e(){if(ie.value){de.value=!0;try{const e=await P(ie.value,35,I.value);ue.value=e}catch(e){N.error("搜索失败: "+e.message)}finally{de.value=!1}}}function ge(e,a){if(!a||!e)return e;const t=new RegExp(`(${a})`,"gi");return e.replace(t,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function ke(e){(e.metaKey||e.ctrlKey)&&"k"===e.key&&(e.preventDefault(),Z.value=!0,b(()=>{var e;null==(e=pe.value)||e.focus()}))}return y(()=>$.projects,e=>{X.value=[...e]},{immediate:!0}),y(Z,e=>{e||(ie.value="",ue.value=null)}),y(I,e=>{$.setChannel(e),$.fetchProjects()},{immediate:!0}),_(()=>{document.addEventListener("keydown",ke)}),g(()=>{document.removeEventListener("keydown",ke)}),(e,a)=>(s(),t("div",Q,[l("div",ee,[l("div",ae,[n(c(V),{style:{margin:"0"}},{default:r(()=>[...a[4]||(a[4]=[p("我的项目",-1)])]),_:1}),n(c(R),{depth:"3"},{default:r(()=>[...a[5]||(a[5]=[p("选择一个项目查看会话,拖拽可调整顺序",-1)])]),_:1})]),n(c(O),null,{default:r(()=>[n(c(q),{type:"primary",size:"medium",onClick:ye},{icon:r(()=>[n(c(U),null,{default:r(()=>[n(c(T))]),_:1})]),default:r(()=>[a[6]||(a[6]=p(" 新建项目 ",-1))]),_:1}),n(c(H),{value:W.value,"onUpdate:value":a[0]||(a[0]=e=>W.value=e),placeholder:"搜索项目...",clearable:"",class:"search-input"},{prefix:r(()=>[n(c(U),null,{default:r(()=>[n(c(E))]),_:1})]),_:1},8,["value"])]),_:1})]),l("div",{class:"content",ref_key:"contentEl",ref:Y},[c($).loading?(s(),t("div",te,[n(c(A),{size:"large"},{description:r(()=>[...a[7]||(a[7]=[p(" 加载项目列表... ",-1)])]),_:1})])):c($).error?(s(),v(c(B),{key:1,type:"error",title:"加载失败",style:{"margin-top":"20px"}},{default:r(()=>[p(i(c($).error),1)]),_:1})):W.value?(s(),t("div",se,[(s(!0),t(k,null,j(ve.value,e=>(s(),v(J,{key:e.name,project:e,onClick:a=>me(e.name),onDelete:he},null,8,["project","onClick"]))),128))])):(s(),v(c(C),{key:2,modelValue:X.value,"onUpdate:modelValue":a[1]||(a[1]=e=>X.value=e),"item-key":"name",class:"projects-grid","ghost-class":"ghost","chosen-class":"chosen","drag-class":"drag",animation:"200",onEnd:fe},{item:r(({element:e})=>[n(J,{project:e,onClick:a=>me(e.name),onDelete:he},null,8,["project","onClick"])]),_:1},8,["modelValue"])),c($).loading||c($).error||0!==c($).projects.length?m("",!0):(s(),v(c(F),{key:4,description:"没有找到项目",style:{"margin-top":"60px"}},{icon:r(()=>[n(c(U),null,{default:r(()=>[n(c(M))]),_:1})]),_:1}))],512),l("div",le,[n(c(R),{depth:"3",style:{"font-size":"12px"}},{default:r(()=>[...a[8]||(a[8]=[l("kbd",null,"⌘",-1),p(" / ",-1),l("kbd",null,"Ctrl",-1),p(" + ",-1),l("kbd",null,"K",-1),p(" 全局搜索 ",-1)])]),_:1})]),n(c(G),{show:Z.value,"onUpdate:show":a[3]||(a[3]=e=>Z.value=e),preset:"card",title:"全局搜索",style:x([{width:"800px","max-width":"90vw"},{marginTop:"80px"}])},{default:r(()=>[l("div",ne,[n(c(H),{ref_key:"globalSearchInputRef",ref:pe,value:ie.value,"onUpdate:value":a[2]||(a[2]=e=>ie.value=e),placeholder:"搜索所有项目的对话内容...",clearable:"",onKeyup:w(_e,["enter"]),disabled:de.value},{prefix:r(()=>[n(c(U),null,{default:r(()=>[n(c(E))]),_:1})]),suffix:r(()=>[n(c(q),{text:"",onClick:_e,disabled:!ie.value||de.value,loading:de.value},{default:r(()=>[...a[9]||(a[9]=[p(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])]),ue.value?(s(),t("div",oe,[n(c(B),{type:"info",style:{"margin-bottom":"16px"}},{default:r(()=>[p(' 关键词 "'+i(ue.value.keyword)+'" 共找到 '+i(ue.value.totalMatches)+" 处匹配 ",1)]),_:1}),(s(!0),t(k,null,j(ue.value.sessions,e=>(s(),t("div",{key:`${e.projectName}-${e.sessionId}`,class:"search-result-item"},[l("div",re,[l("div",ce,[n(c(R),{strong:"",style:{"font-size":"15px","font-weight":"700"}},{default:r(()=>[p(i(e.projectDisplayName),1)]),_:2},1024),n(c(R),{depth:"2",style:{margin:"0 8px"}},{default:r(()=>[...a[10]||(a[10]=[p("·",-1)])]),_:1}),n(c(R),{strong:""},{default:r(()=>[p(i(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId.substring(0,8)),1)]),_:2},1024),n(c(S),{size:"small",bordered:!1},{default:r(()=>[p(i(e.matchCount)+" 个匹配",1)]),_:2},1024)]),n(c(q),{size:"small",type:"primary",onClick:a=>async function(e,a){try{await D(e,a,I.value),N.success("已启动终端"),Z.value=!1}catch(t){N.error("启动失败: "+t.message)}}(e.projectName,e.sessionId)},{icon:r(()=>[n(c(U),null,{default:r(()=>[n(c(K))]),_:1})]),default:r(()=>[a[11]||(a[11]=p(" 使用对话 ",-1))]),_:1},8,["onClick"])]),(s(!0),t(k,null,j(e.matches,(e,a)=>(s(),t("div",{key:a,class:"search-match"},[n(c(S),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:r(()=>[p(i("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),n(c(R),{depth:"3",class:"search-match-text",innerHTML:ge(e.context,ue.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===ue.value.sessions.length?(s(),v(c(F),{key:0,description:"没有找到匹配的内容"})):m("",!0)])):m("",!0)]),_:1},8,["show"])]))}},[["__scopeId","data-v-19cc7198"]]);export{ie as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a6 as e,a5 as s,f as a,r as l,t,w as n,h as o,K as i,c as r,o as u,a as c,X as d,a0 as v,W as p,Y as f,N as m,p as h,_ as y,a7 as g,s as _,Z as k,G as w,F as j,$ as C,v as b}from"./vue-vendor-PKd8utv_.js";import{d as I}from"./vendors-i5CBGnlm.js";import{_ as x,p as z,x as N,C as F,y as S,r as M,q as B,z as P}from"./index-BS9RA6SN.js";import{G as $,D as L,Y as T,d as U,ad as q,ay as D,j as W,k as E,T as K,a3 as A,az as G,r as H,C as O,h as R,X as V}from"./icons-BxcwoY5F.js";import{N as X,B as Y,_ as Z,c as J,a as Q,q as ee,g as se,x as ae,s as le,n as te,t as ne,h as oe,p as ie}from"./naive-ui-BIXcURHZ.js";import"./markdown-C9MYpaSi.js";const re={class:"session-list-container"},ue={class:"header"},ce={class:"title-bar"},de={class:"title-section"},ve={class:"title-with-count"},pe={key:0,class:"loading-container"},fe=["onMouseenter","onClick"],me={class:"drag-handle"},he={class:"session-left"},ye={class:"session-icon"},ge={class:"session-info"},_e={class:"session-header"},ke={class:"session-title-row"},we={class:"session-title"},je={class:"session-meta"},Ce={class:"session-right"},be={class:"session-tags-area"},Ie={class:"session-actions"},xe={key:0,style:{"max-height":"70vh","overflow-y":"auto"}},ze={class:"search-result-header"},Ne={class:"search-result-title"},Fe=x({__name:"SessionList",props:{projectName:{type:String,required:!0}},setup(x){const Fe=x,Se=e(),Me=s(),Be=z(),{addFavorite:Pe,removeFavorite:$e,isFavorite:Le}=N(),Te=a(()=>Me.meta.channel||"claude"),Ue=l(Fe.projectName),qe=a(()=>Ue.value||Fe.projectName),De=a(()=>{const e="codex"===Te.value?"Codex":"gemini"===Te.value?"Gemini":"opencode"===Te.value?"OpenCode":"Claude Code";return[{type:"group",label:"Web 终端",key:"web-group",children:[{label:e,key:"web-current",icon:()=>t(X,null,{default:()=>t($)})}]},{type:"group",label:"本地终端",key:"local-group",children:[{label:e,key:"local-current",icon:()=>t(X,null,{default:()=>t(L)})}]}]});function We(e,s){e.startsWith("web-")?function(e){const s=Te.value;Se.push({name:"terminal-session",params:{channel:s,projectName:encodeURIComponent(qe.value),sessionId:e},query:{cwd:ls.value||void 0,openTs:Date.now().toString()}})}(s):async function(e){try{await P(qe.value,e,!1,Te.value),M.success(`已启动终端 (${Te.value})`)}catch(s){M.error("启动失败: "+s.message)}}(s)}const Ee=l(""),Ke=l(!1),Ae=l(null),Ge=l(""),He=l(null),Oe=l([]),Re=l(null),Ve=l(!1),Xe=l(null),Ye=l(!1),Ze=l(!1),Je=l(""),Qe=l(""),es=l(null),ss=l(!1),as=a(()=>{var e;return(null==(e=Be.currentProjectInfo)?void 0:e.displayName)||Fe.projectName}),ls=a(()=>{var e;return(null==(e=Be.currentProjectInfo)?void 0:e.fullPath)||qe.value});async function ts(){const e=await async function(){Be.projects.length||await Be.fetchProjects();const e=Be.projects.find(e=>e.name===Fe.projectName);if(e)return Ue.value=e.name,e.name;const s=Be.projects.find(e=>e.displayName===Fe.projectName||e.fullPath===Fe.projectName);return s?(Ue.value=s.name,s.name!==Fe.projectName&&await Se.replace({name:`${Te.value}-sessions`,params:{projectName:s.name}}),s.name):(Ue.value=Fe.projectName,Fe.projectName)}();await Be.fetchSessions(e)}function ns(e){return!(!e||"string"!=typeof e)&&(e.includes("/")||e.includes("\\")||e.startsWith("~"))}n(()=>Be.sessionsWithAlias,e=>{Oe.value=[...e]},{immediate:!0});const os=a(()=>{if(!Ee.value)return Oe.value;const e=Ee.value.toLowerCase();return Oe.value.filter(s=>s.sessionId.toLowerCase().includes(e)||s.alias&&s.alias.toLowerCase().includes(e)||s.firstMessage&&s.firstMessage.toLowerCase().includes(e)||s.gitBranch&&s.gitBranch.toLowerCase().includes(e))});function is(){const e=Me.meta.channel||"claude";Se.push({name:`${e}-projects`})}async function rs(){if(Ee.value){Ye.value=!0;try{const e=await S(qe.value,Ee.value,35,Te.value);Re.value=e,Ve.value=!0}catch(e){M.error("搜索失败: "+e.message)}finally{Ye.value=!1}}}async function us(){const e=Oe.value.map(e=>e.sessionId);await Be.saveSessionOrder(e)}async function cs(){if(Ae.value)try{const e=Ae.value.sessionId;Ge.value?(await Be.setAlias(e,Ge.value),M.success("别名设置成功")):(await Be.deleteAlias(e),M.success("别名已删除")),Ke.value=!1,Ae.value=null,Ge.value=""}catch(e){M.error("操作失败: "+e.message)}}function ds(e){M.error(e)}async function vs(){ss.value=!0;try{const e=Te.value||"claude",s=function(){var e;const s=null==(e=Be.currentProjectInfo)?void 0:e.fullPath;if(ns(s))return s;const a=Be.projects.find(e=>e.name===qe.value),l=(null==a?void 0:a.fullPath)||(null==a?void 0:a.path);return ns(l)?l:ns(ls.value)?ls.value:null}();await Se.push({name:"terminal-channel",params:{channel:e},query:{cwd:s||void 0,projectName:qe.value||void 0,openTs:Date.now().toString()}})}catch(e){M.error("打开终端失败: "+e.message)}finally{ss.value=!1}}function ps(e){if(!e)return"";return new Date(e).toLocaleString("zh-CN")}function fs(e){if(!e)return"0 B";const s=1024;return e<s?e+" B":e<s*s?(e/s).toFixed(1)+" KB":(e/s/s).toFixed(1)+" MB"}function ms(e,s){if(!s||!e)return e;const a=new RegExp(`(${s})`,"gi");return e.replace(a,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function hs(e,s=80){return e?e.length>s?e.substring(0,s)+"...":e:""}return n([Te,()=>Fe.projectName],([e])=>{Be.setChannel(e),ts()},{immediate:!0}),o(()=>{}),i(()=>{}),(e,s)=>(u(),r("div",re,[c("div",ue,[c("div",ce,[d(m(Y),{size:"small",onClick:is,class:"back-button"},{icon:f(()=>[d(m(X),{size:"18"},{default:f(()=>[d(m(T))]),_:1})]),_:1}),c("div",de,[c("div",ve,[d(m(Z),null,{default:f(()=>[h(y(as.value),1)]),_:1}),d(m(J),{depth:"3",class:"session-count"},{default:f(()=>[h("("+y(m(Be).sessions.length)+" 个对话)",1)]),_:1}),d(m(Q),{size:"small",bordered:!1,type:"info",class:"total-size-tag"},{default:f(()=>[h(y(fs(m(Be).totalSize)),1)]),_:1}),d(m(Y),{type:"primary",size:"small",loading:ss.value,onClick:vs,style:{"margin-left":"12px"}},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(U))]),_:1})]),default:f(()=>[s[9]||(s[9]=h(" 新建会话 ",-1))]),_:1},8,["loading"])]),d(m(J),{depth:"3",class:"project-path"},{default:f(()=>[h(y(ls.value),1)]),_:1})]),d(m(ee),{value:Ee.value,"onUpdate:value":s[0]||(s[0]=e=>Ee.value=e),placeholder:"搜索会话...",clearable:"",class:"search-input",onKeyup:g(rs,["enter"]),disabled:Ye.value},{prefix:f(()=>[d(m(X),null,{default:f(()=>[d(m(q))]),_:1})]),suffix:f(()=>[d(m(Y),{text:"",onClick:rs,disabled:!Ee.value||Ye.value,loading:Ye.value},{default:f(()=>[...s[10]||(s[10]=[h(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])])]),c("div",{class:"content",ref_key:"contentEl",ref:Xe},[m(Be).loading?(u(),r("div",pe,[d(m(se),{size:"large"},{description:f(()=>[...s[11]||(s[11]=[h(" 加载会话列表... ",-1)])]),_:1})])):m(Be).error?(u(),v(m(ae),{key:1,type:"error",title:"加载失败",style:{"margin-bottom":"16px"}},{default:f(()=>[h(y(m(Be).error),1)]),_:1})):os.value.length>0?(u(),v(m(I),{key:2,modelValue:Oe.value,"onUpdate:modelValue":s[3]||(s[3]=e=>Oe.value=e),"item-key":"sessionId",handle:".drag-handle","ghost-class":"ghost","chosen-class":"chosen",animation:"200",onEnd:us},{item:f(({element:e})=>[c("div",{class:"session-item",onMouseenter:s=>He.value=e.sessionId,onMouseleave:s[2]||(s[2]=e=>He.value=null),onClick:s=>function(e){Je.value=e.sessionId,Qe.value=e.alias||"",Ze.value=!0,b(()=>{var e;null==(e=es.value)||e.open()})}(e)},[c("div",me,[d(m(X),{size:"16",color:"#999"},{default:f(()=>[d(m(D))]),_:1})]),c("div",he,[c("div",ye,[d(m(X),{size:"24",color:"#18a058"},{default:f(()=>[d(m(W))]),_:1})]),c("div",ge,[c("div",_e,[c("div",ke,[c("span",we,y(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId),1),e.forkedFrom?(u(),v(m(le),{key:0,placement:"top"},{trigger:f(()=>[d(m(Q),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(E))]),_:1})]),default:f(()=>[s[12]||(s[12]=h(" Fork ",-1))]),_:1})]),default:f(()=>[h(" Fork 自: "+y(e.forkedFrom),1)]),_:2},1024)):p("",!0)])]),c("div",je,[d(m(J),{depth:"3"},{default:f(()=>[h(y(ps(e.mtime)),1)]),_:2},1024),d(m(J),{depth:"3"},{default:f(()=>[...s[13]||(s[13]=[h("•",-1)])]),_:1}),d(m(Q),{size:"small",bordered:!1},{default:f(()=>[h(y(fs(e.size)),1)]),_:2},1024)]),e.firstMessage?(u(),v(m(J),{key:0,depth:"3",class:"session-message"},{default:f(()=>[h(y(hs(e.firstMessage,80)),1)]),_:2},1024)):e.gitBranch||e.summary?p("",!0):(u(),v(m(J),{key:1,depth:"3",class:"session-message session-message-empty"},{default:f(()=>[...s[14]||(s[14]=[h(" 暂未读取到对话内容 ",-1)])]),_:1}))])]),c("div",Ce,[c("div",be,[e.gitBranch?(u(),v(m(Q),{key:0,size:"small",type:"info",bordered:!1},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(E))]),_:1})]),default:f(()=>[h(" "+y(e.gitBranch),1)]),_:2},1024)):p("",!0)]),c("div",Ie,[d(m(te),null,{default:f(()=>[_(d(m(Y),{size:"small",type:"error",onClick:k(s=>{return a=e.sessionId,void B.warning({title:"删除会话",content:"确定要删除这个会话吗?此操作不可恢复!",positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await Be.deleteSession(a),M.success("会话已删除")}catch(e){M.error("删除失败: "+e.message)}}});var a},["stop"])},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(K))]),_:1})]),default:f(()=>[s[15]||(s[15]=h(" 删除 ",-1))]),_:1},8,["onClick"]),[[w,He.value===e.sessionId]]),d(m(Y),{size:"small",onClick:k(s=>function(e){Ae.value=e,Ge.value=e.alias||"",Ke.value=!0}(e),["stop"])},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(A))]),_:1})]),default:f(()=>[s[16]||(s[16]=h(" 别名 ",-1))]),_:1},8,["onClick"]),d(m(Y),{size:"small",type:m(Le)(Te.value,qe.value,e.sessionId)?"warning":"default",onClick:k(s=>async function(e){const s=Te.value,a=Le(s,qe.value,e.sessionId);try{if(a)await $e(s,qe.value,e.sessionId),M.success("已取消收藏");else{const a={sessionId:e.sessionId,projectName:qe.value,projectDisplayName:as.value,projectFullPath:ls.value,alias:e.alias||"",firstMessage:e.firstMessage||"",mtime:e.mtime,size:e.size,gitBranch:e.gitBranch||"",forkedFrom:e.forkedFrom||""};await Pe(s,a),M.success("已添加到收藏")}}catch(l){M.error("操作失败: "+l.message)}}(e),["stop"])},{icon:f(()=>[d(m(X),null,{default:f(()=>[m(Le)(Te.value,qe.value,e.sessionId)?(u(),v(m(G),{key:0})):(u(),v(m(H),{key:1}))]),_:2},1024)]),default:f(()=>[h(" "+y(m(Le)(Te.value,qe.value,e.sessionId)?"已收藏":"收藏"),1)]),_:2},1032,["type","onClick"]),"opencode"!==Te.value?(u(),v(m(Y),{key:0,size:"small",onClick:k(s=>async function(e){if("opencode"!==Te.value)try{await Be.forkSession(e),M.success("Fork 成功!")}catch(s){M.error("Fork 失败: "+s.message)}else M.warning("OpenCode 当前不支持该 Fork 操作")}(e.sessionId),["stop"])},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(E))]),_:1})]),default:f(()=>[s[17]||(s[17]=h(" Fork ",-1))]),_:1},8,["onClick"])):p("",!0),d(m(ne),{options:De.value,onSelect:s=>We(s,e.sessionId)},{default:f(()=>[d(m(Y),{size:"small",type:"primary",onClick:s[1]||(s[1]=k(()=>{},["stop"]))},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(R))]),_:1})]),default:f(()=>[s[18]||(s[18]=h(" 使用对话 ",-1)),d(m(X),{size:"14",style:{"margin-left":"4px"}},{default:f(()=>[d(m(O))]),_:1})]),_:1})]),_:1},8,["options","onSelect"])]),_:2},1024)])])],40,fe)]),_:1},8,["modelValue"])):(u(),v(m(oe),{key:3,description:"没有找到会话",style:{"margin-top":"60px"}},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(V))]),_:1})]),_:1}))],512),d(m(ie),{show:Ke.value,"onUpdate:show":s[6]||(s[6]=e=>Ke.value=e),preset:"dialog",title:"设置别名"},{action:f(()=>[d(m(te),null,{default:f(()=>[d(m(Y),{onClick:s[5]||(s[5]=e=>Ke.value=!1)},{default:f(()=>[...s[19]||(s[19]=[h("取消",-1)])]),_:1}),d(m(Y),{type:"primary",onClick:cs},{default:f(()=>[...s[20]||(s[20]=[h("确定",-1)])]),_:1})]),_:1})]),default:f(()=>[d(m(ee),{value:Ge.value,"onUpdate:value":s[4]||(s[4]=e=>Ge.value=e),placeholder:"输入别名(留空删除)",onKeyup:g(cs,["enter"])},null,8,["value"])]),_:1},8,["show"]),d(m(ie),{show:Ve.value,"onUpdate:show":s[7]||(s[7]=e=>Ve.value=e),preset:"card",title:"搜索结果",style:{width:"1200px"}},{default:f(()=>[Re.value?(u(),r("div",xe,[d(m(ae),{type:"info",style:{"margin-bottom":"16px"}},{default:f(()=>[h(' 关键词 "'+y(Re.value.keyword)+'" 共找到 '+y(Re.value.totalMatches)+" 处匹配 ",1)]),_:1}),(u(!0),r(j,null,C(Re.value.sessions,e=>(u(),r("div",{key:e.sessionId,class:"search-result-item"},[c("div",ze,[c("div",Ne,[d(m(J),{strong:""},{default:f(()=>[h(y(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId.substring(0,8)),1)]),_:2},1024),d(m(Q),{size:"small",bordered:!1},{default:f(()=>[h(y(e.matchCount)+" 个匹配",1)]),_:2},1024)]),d(m(ne),{options:De.value,onSelect:s=>We(s,e.sessionId)},{default:f(()=>[d(m(Y),{size:"small",type:"primary"},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(R))]),_:1})]),default:f(()=>[s[21]||(s[21]=h(" 使用对话 ",-1)),d(m(X),{size:"14",style:{"margin-left":"4px"}},{default:f(()=>[d(m(O))]),_:1})]),_:1})]),_:1},8,["options","onSelect"])]),(u(!0),r(j,null,C(e.matches,(e,s)=>(u(),r("div",{key:s,class:"search-match"},[d(m(Q),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:f(()=>[h(y("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),d(m(J),{depth:"3",class:"search-match-text",innerHTML:ms(e.context,Re.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===Re.value.sessions.length?(u(),v(m(oe),{key:0,description:"没有找到匹配的内容"})):p("",!0)])):p("",!0)]),_:1},8,["show"]),Je.value?(u(),v(F,{key:0,ref_key:"chatHistoryRef",ref:es,show:Ze.value,"onUpdate:show":s[8]||(s[8]=e=>Ze.value=e),"project-name":qe.value,"session-id":Je.value,"session-alias":Qe.value,channel:Te.value,onError:ds},null,8,["show","project-name","session-id","session-alias","channel"])):p("",!0)]))}},[["__scopeId","data-v-5d3af97a"]]);export{Fe as default};
|
|
1
|
+
import{a6 as e,a5 as s,f as a,r as l,t,w as n,h as o,K as i,c as r,o as u,a as c,X as d,a0 as v,W as p,Y as f,N as m,p as h,_ as y,a7 as g,s as _,Z as k,G as w,F as j,$ as C,v as b}from"./vue-vendor-PKd8utv_.js";import{d as I}from"./vendors-i5CBGnlm.js";import{_ as x,p as z,x as N,C as F,y as S,r as M,q as B,z as P}from"./index-B_kPXCbH.js";import{G as $,D as L,Y as T,d as U,ad as q,ay as D,j as W,k as E,T as K,a3 as A,az as G,r as H,C as O,h as R,X as V}from"./icons-BxcwoY5F.js";import{N as X,B as Y,_ as Z,c as J,a as Q,q as ee,g as se,x as ae,s as le,n as te,t as ne,h as oe,p as ie}from"./naive-ui-BIXcURHZ.js";import"./markdown-C9MYpaSi.js";const re={class:"session-list-container"},ue={class:"header"},ce={class:"title-bar"},de={class:"title-section"},ve={class:"title-with-count"},pe={key:0,class:"loading-container"},fe=["onMouseenter","onClick"],me={class:"drag-handle"},he={class:"session-left"},ye={class:"session-icon"},ge={class:"session-info"},_e={class:"session-header"},ke={class:"session-title-row"},we={class:"session-title"},je={class:"session-meta"},Ce={class:"session-right"},be={class:"session-tags-area"},Ie={class:"session-actions"},xe={key:0,style:{"max-height":"70vh","overflow-y":"auto"}},ze={class:"search-result-header"},Ne={class:"search-result-title"},Fe=x({__name:"SessionList",props:{projectName:{type:String,required:!0}},setup(x){const Fe=x,Se=e(),Me=s(),Be=z(),{addFavorite:Pe,removeFavorite:$e,isFavorite:Le}=N(),Te=a(()=>Me.meta.channel||"claude"),Ue=l(Fe.projectName),qe=a(()=>Ue.value||Fe.projectName),De=a(()=>{const e="codex"===Te.value?"Codex":"gemini"===Te.value?"Gemini":"opencode"===Te.value?"OpenCode":"Claude Code";return[{type:"group",label:"Web 终端",key:"web-group",children:[{label:e,key:"web-current",icon:()=>t(X,null,{default:()=>t($)})}]},{type:"group",label:"本地终端",key:"local-group",children:[{label:e,key:"local-current",icon:()=>t(X,null,{default:()=>t(L)})}]}]});function We(e,s){e.startsWith("web-")?function(e){const s=Te.value;Se.push({name:"terminal-session",params:{channel:s,projectName:encodeURIComponent(qe.value),sessionId:e},query:{cwd:ls.value||void 0,openTs:Date.now().toString()}})}(s):async function(e){try{await P(qe.value,e,!1,Te.value),M.success(`已启动终端 (${Te.value})`)}catch(s){M.error("启动失败: "+s.message)}}(s)}const Ee=l(""),Ke=l(!1),Ae=l(null),Ge=l(""),He=l(null),Oe=l([]),Re=l(null),Ve=l(!1),Xe=l(null),Ye=l(!1),Ze=l(!1),Je=l(""),Qe=l(""),es=l(null),ss=l(!1),as=a(()=>{var e;return(null==(e=Be.currentProjectInfo)?void 0:e.displayName)||Fe.projectName}),ls=a(()=>{var e;return(null==(e=Be.currentProjectInfo)?void 0:e.fullPath)||qe.value});async function ts(){const e=await async function(){Be.projects.length||await Be.fetchProjects();const e=Be.projects.find(e=>e.name===Fe.projectName);if(e)return Ue.value=e.name,e.name;const s=Be.projects.find(e=>e.displayName===Fe.projectName||e.fullPath===Fe.projectName);return s?(Ue.value=s.name,s.name!==Fe.projectName&&await Se.replace({name:`${Te.value}-sessions`,params:{projectName:s.name}}),s.name):(Ue.value=Fe.projectName,Fe.projectName)}();await Be.fetchSessions(e)}function ns(e){return!(!e||"string"!=typeof e)&&(e.includes("/")||e.includes("\\")||e.startsWith("~"))}n(()=>Be.sessionsWithAlias,e=>{Oe.value=[...e]},{immediate:!0});const os=a(()=>{if(!Ee.value)return Oe.value;const e=Ee.value.toLowerCase();return Oe.value.filter(s=>s.sessionId.toLowerCase().includes(e)||s.alias&&s.alias.toLowerCase().includes(e)||s.firstMessage&&s.firstMessage.toLowerCase().includes(e)||s.gitBranch&&s.gitBranch.toLowerCase().includes(e))});function is(){const e=Me.meta.channel||"claude";Se.push({name:`${e}-projects`})}async function rs(){if(Ee.value){Ye.value=!0;try{const e=await S(qe.value,Ee.value,35,Te.value);Re.value=e,Ve.value=!0}catch(e){M.error("搜索失败: "+e.message)}finally{Ye.value=!1}}}async function us(){const e=Oe.value.map(e=>e.sessionId);await Be.saveSessionOrder(e)}async function cs(){if(Ae.value)try{const e=Ae.value.sessionId;Ge.value?(await Be.setAlias(e,Ge.value),M.success("别名设置成功")):(await Be.deleteAlias(e),M.success("别名已删除")),Ke.value=!1,Ae.value=null,Ge.value=""}catch(e){M.error("操作失败: "+e.message)}}function ds(e){M.error(e)}async function vs(){ss.value=!0;try{const e=Te.value||"claude",s=function(){var e;const s=null==(e=Be.currentProjectInfo)?void 0:e.fullPath;if(ns(s))return s;const a=Be.projects.find(e=>e.name===qe.value),l=(null==a?void 0:a.fullPath)||(null==a?void 0:a.path);return ns(l)?l:ns(ls.value)?ls.value:null}();await Se.push({name:"terminal-channel",params:{channel:e},query:{cwd:s||void 0,projectName:qe.value||void 0,openTs:Date.now().toString()}})}catch(e){M.error("打开终端失败: "+e.message)}finally{ss.value=!1}}function ps(e){if(!e)return"";return new Date(e).toLocaleString("zh-CN")}function fs(e){if(!e)return"0 B";const s=1024;return e<s?e+" B":e<s*s?(e/s).toFixed(1)+" KB":(e/s/s).toFixed(1)+" MB"}function ms(e,s){if(!s||!e)return e;const a=new RegExp(`(${s})`,"gi");return e.replace(a,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function hs(e,s=80){return e?e.length>s?e.substring(0,s)+"...":e:""}return n([Te,()=>Fe.projectName],([e])=>{Be.setChannel(e),ts()},{immediate:!0}),o(()=>{}),i(()=>{}),(e,s)=>(u(),r("div",re,[c("div",ue,[c("div",ce,[d(m(Y),{size:"small",onClick:is,class:"back-button"},{icon:f(()=>[d(m(X),{size:"18"},{default:f(()=>[d(m(T))]),_:1})]),_:1}),c("div",de,[c("div",ve,[d(m(Z),null,{default:f(()=>[h(y(as.value),1)]),_:1}),d(m(J),{depth:"3",class:"session-count"},{default:f(()=>[h("("+y(m(Be).sessions.length)+" 个对话)",1)]),_:1}),d(m(Q),{size:"small",bordered:!1,type:"info",class:"total-size-tag"},{default:f(()=>[h(y(fs(m(Be).totalSize)),1)]),_:1}),d(m(Y),{type:"primary",size:"small",loading:ss.value,onClick:vs,style:{"margin-left":"12px"}},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(U))]),_:1})]),default:f(()=>[s[9]||(s[9]=h(" 新建会话 ",-1))]),_:1},8,["loading"])]),d(m(J),{depth:"3",class:"project-path"},{default:f(()=>[h(y(ls.value),1)]),_:1})]),d(m(ee),{value:Ee.value,"onUpdate:value":s[0]||(s[0]=e=>Ee.value=e),placeholder:"搜索会话...",clearable:"",class:"search-input",onKeyup:g(rs,["enter"]),disabled:Ye.value},{prefix:f(()=>[d(m(X),null,{default:f(()=>[d(m(q))]),_:1})]),suffix:f(()=>[d(m(Y),{text:"",onClick:rs,disabled:!Ee.value||Ye.value,loading:Ye.value},{default:f(()=>[...s[10]||(s[10]=[h(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])])]),c("div",{class:"content",ref_key:"contentEl",ref:Xe},[m(Be).loading?(u(),r("div",pe,[d(m(se),{size:"large"},{description:f(()=>[...s[11]||(s[11]=[h(" 加载会话列表... ",-1)])]),_:1})])):m(Be).error?(u(),v(m(ae),{key:1,type:"error",title:"加载失败",style:{"margin-bottom":"16px"}},{default:f(()=>[h(y(m(Be).error),1)]),_:1})):os.value.length>0?(u(),v(m(I),{key:2,modelValue:Oe.value,"onUpdate:modelValue":s[3]||(s[3]=e=>Oe.value=e),"item-key":"sessionId",handle:".drag-handle","ghost-class":"ghost","chosen-class":"chosen",animation:"200",onEnd:us},{item:f(({element:e})=>[c("div",{class:"session-item",onMouseenter:s=>He.value=e.sessionId,onMouseleave:s[2]||(s[2]=e=>He.value=null),onClick:s=>function(e){Je.value=e.sessionId,Qe.value=e.alias||"",Ze.value=!0,b(()=>{var e;null==(e=es.value)||e.open()})}(e)},[c("div",me,[d(m(X),{size:"16",color:"#999"},{default:f(()=>[d(m(D))]),_:1})]),c("div",he,[c("div",ye,[d(m(X),{size:"24",color:"#18a058"},{default:f(()=>[d(m(W))]),_:1})]),c("div",ge,[c("div",_e,[c("div",ke,[c("span",we,y(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId),1),e.forkedFrom?(u(),v(m(le),{key:0,placement:"top"},{trigger:f(()=>[d(m(Q),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(E))]),_:1})]),default:f(()=>[s[12]||(s[12]=h(" Fork ",-1))]),_:1})]),default:f(()=>[h(" Fork 自: "+y(e.forkedFrom),1)]),_:2},1024)):p("",!0)])]),c("div",je,[d(m(J),{depth:"3"},{default:f(()=>[h(y(ps(e.mtime)),1)]),_:2},1024),d(m(J),{depth:"3"},{default:f(()=>[...s[13]||(s[13]=[h("•",-1)])]),_:1}),d(m(Q),{size:"small",bordered:!1},{default:f(()=>[h(y(fs(e.size)),1)]),_:2},1024)]),e.firstMessage?(u(),v(m(J),{key:0,depth:"3",class:"session-message"},{default:f(()=>[h(y(hs(e.firstMessage,80)),1)]),_:2},1024)):e.gitBranch||e.summary?p("",!0):(u(),v(m(J),{key:1,depth:"3",class:"session-message session-message-empty"},{default:f(()=>[...s[14]||(s[14]=[h(" 暂未读取到对话内容 ",-1)])]),_:1}))])]),c("div",Ce,[c("div",be,[e.gitBranch?(u(),v(m(Q),{key:0,size:"small",type:"info",bordered:!1},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(E))]),_:1})]),default:f(()=>[h(" "+y(e.gitBranch),1)]),_:2},1024)):p("",!0)]),c("div",Ie,[d(m(te),null,{default:f(()=>[_(d(m(Y),{size:"small",type:"error",onClick:k(s=>{return a=e.sessionId,void B.warning({title:"删除会话",content:"确定要删除这个会话吗?此操作不可恢复!",positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await Be.deleteSession(a),M.success("会话已删除")}catch(e){M.error("删除失败: "+e.message)}}});var a},["stop"])},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(K))]),_:1})]),default:f(()=>[s[15]||(s[15]=h(" 删除 ",-1))]),_:1},8,["onClick"]),[[w,He.value===e.sessionId]]),d(m(Y),{size:"small",onClick:k(s=>function(e){Ae.value=e,Ge.value=e.alias||"",Ke.value=!0}(e),["stop"])},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(A))]),_:1})]),default:f(()=>[s[16]||(s[16]=h(" 别名 ",-1))]),_:1},8,["onClick"]),d(m(Y),{size:"small",type:m(Le)(Te.value,qe.value,e.sessionId)?"warning":"default",onClick:k(s=>async function(e){const s=Te.value,a=Le(s,qe.value,e.sessionId);try{if(a)await $e(s,qe.value,e.sessionId),M.success("已取消收藏");else{const a={sessionId:e.sessionId,projectName:qe.value,projectDisplayName:as.value,projectFullPath:ls.value,alias:e.alias||"",firstMessage:e.firstMessage||"",mtime:e.mtime,size:e.size,gitBranch:e.gitBranch||"",forkedFrom:e.forkedFrom||""};await Pe(s,a),M.success("已添加到收藏")}}catch(l){M.error("操作失败: "+l.message)}}(e),["stop"])},{icon:f(()=>[d(m(X),null,{default:f(()=>[m(Le)(Te.value,qe.value,e.sessionId)?(u(),v(m(G),{key:0})):(u(),v(m(H),{key:1}))]),_:2},1024)]),default:f(()=>[h(" "+y(m(Le)(Te.value,qe.value,e.sessionId)?"已收藏":"收藏"),1)]),_:2},1032,["type","onClick"]),"opencode"!==Te.value?(u(),v(m(Y),{key:0,size:"small",onClick:k(s=>async function(e){if("opencode"!==Te.value)try{await Be.forkSession(e),M.success("Fork 成功!")}catch(s){M.error("Fork 失败: "+s.message)}else M.warning("OpenCode 当前不支持该 Fork 操作")}(e.sessionId),["stop"])},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(E))]),_:1})]),default:f(()=>[s[17]||(s[17]=h(" Fork ",-1))]),_:1},8,["onClick"])):p("",!0),d(m(ne),{options:De.value,onSelect:s=>We(s,e.sessionId)},{default:f(()=>[d(m(Y),{size:"small",type:"primary",onClick:s[1]||(s[1]=k(()=>{},["stop"]))},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(R))]),_:1})]),default:f(()=>[s[18]||(s[18]=h(" 使用对话 ",-1)),d(m(X),{size:"14",style:{"margin-left":"4px"}},{default:f(()=>[d(m(O))]),_:1})]),_:1})]),_:1},8,["options","onSelect"])]),_:2},1024)])])],40,fe)]),_:1},8,["modelValue"])):(u(),v(m(oe),{key:3,description:"没有找到会话",style:{"margin-top":"60px"}},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(V))]),_:1})]),_:1}))],512),d(m(ie),{show:Ke.value,"onUpdate:show":s[6]||(s[6]=e=>Ke.value=e),preset:"dialog",title:"设置别名"},{action:f(()=>[d(m(te),null,{default:f(()=>[d(m(Y),{onClick:s[5]||(s[5]=e=>Ke.value=!1)},{default:f(()=>[...s[19]||(s[19]=[h("取消",-1)])]),_:1}),d(m(Y),{type:"primary",onClick:cs},{default:f(()=>[...s[20]||(s[20]=[h("确定",-1)])]),_:1})]),_:1})]),default:f(()=>[d(m(ee),{value:Ge.value,"onUpdate:value":s[4]||(s[4]=e=>Ge.value=e),placeholder:"输入别名(留空删除)",onKeyup:g(cs,["enter"])},null,8,["value"])]),_:1},8,["show"]),d(m(ie),{show:Ve.value,"onUpdate:show":s[7]||(s[7]=e=>Ve.value=e),preset:"card",title:"搜索结果",style:{width:"1200px"}},{default:f(()=>[Re.value?(u(),r("div",xe,[d(m(ae),{type:"info",style:{"margin-bottom":"16px"}},{default:f(()=>[h(' 关键词 "'+y(Re.value.keyword)+'" 共找到 '+y(Re.value.totalMatches)+" 处匹配 ",1)]),_:1}),(u(!0),r(j,null,C(Re.value.sessions,e=>(u(),r("div",{key:e.sessionId,class:"search-result-item"},[c("div",ze,[c("div",Ne,[d(m(J),{strong:""},{default:f(()=>[h(y(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId.substring(0,8)),1)]),_:2},1024),d(m(Q),{size:"small",bordered:!1},{default:f(()=>[h(y(e.matchCount)+" 个匹配",1)]),_:2},1024)]),d(m(ne),{options:De.value,onSelect:s=>We(s,e.sessionId)},{default:f(()=>[d(m(Y),{size:"small",type:"primary"},{icon:f(()=>[d(m(X),null,{default:f(()=>[d(m(R))]),_:1})]),default:f(()=>[s[21]||(s[21]=h(" 使用对话 ",-1)),d(m(X),{size:"14",style:{"margin-left":"4px"}},{default:f(()=>[d(m(O))]),_:1})]),_:1})]),_:1},8,["options","onSelect"])]),(u(!0),r(j,null,C(e.matches,(e,s)=>(u(),r("div",{key:s,class:"search-match"},[d(m(Q),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:f(()=>[h(y("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),d(m(J),{depth:"3",class:"search-match-text",innerHTML:ms(e.context,Re.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===Re.value.sessions.length?(u(),v(m(oe),{key:0,description:"没有找到匹配的内容"})):p("",!0)])):p("",!0)]),_:1},8,["show"]),Je.value?(u(),v(F,{key:0,ref_key:"chatHistoryRef",ref:es,show:Ze.value,"onUpdate:show":s[8]||(s[8]=e=>Ze.value=e),"project-name":qe.value,"session-id":Je.value,"session-alias":Qe.value,channel:Te.value,onError:ds},null,8,["show","project-name","session-id","session-alias","channel"])):p("",!0)]))}},[["__scopeId","data-v-5d3af97a"]]);export{Fe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as a,S as s}from"./index-
|
|
1
|
+
import{_ as a,S as s}from"./index-B_kPXCbH.js";import{c as e,o as r,X as o,Y as i,N as t}from"./vue-vendor-PKd8utv_.js";import{K as d}from"./naive-ui-BIXcURHZ.js";import"./vendors-i5CBGnlm.js";import"./markdown-C9MYpaSi.js";import"./icons-BxcwoY5F.js";const m={class:"skill-manager"},n=a({__name:"SkillManager",setup:a=>(a,n)=>(r(),e("div",m,[o(t(d),{title:"Skills 技能管理",bordered:!1},{default:i(()=>[o(s,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-6ebc8a84"]]);export{n as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,o as a,a as n,F as t,$ as l,L as s,X as i,Y as r,a0 as o,a3 as c,N as u,_ as d,Z as m,r as f,f as v,h as p,i as b,w as h,W as g,v as y,a5 as w,a6 as I,m as N,p as k,s as S,G as j}from"./vue-vendor-PKd8utv_.js";import{_,A as x,B as C}from"./index-BS9RA6SN.js";import{c as T,d as O,h as B,q as A,p as F}from"./icons-BxcwoY5F.js";import{N as z,B as E,g as W,L as $}from"./naive-ui-BIXcURHZ.js";import{D as J,L as R,o as q}from"./xterm-BJzAjXCH.js";import"./markdown-C9MYpaSi.js";import"./vendors-i5CBGnlm.js";const P={class:"terminal-tabs"},M={class:"tabs-container"},G=["onClick"],D={class:"tab-title"},Y={class:"tabs-actions"},L=_({__name:"TerminalTabs",props:{tabs:{type:Array,default:()=>[]},activeTab:{type:String,default:null}},emits:["select","close","add"],setup(f,{emit:v}){const p=v;function b(e){switch(e){case"codex":return F;case"gemini":return A;default:return B}}function h(e){switch(e){case"codex":return"#10a37f";case"gemini":return"#4285f4";case"shell":return"#888888";default:return"#18a058"}}function g(e){const a={claude:"Claude",codex:"Codex",gemini:"Gemini",shell:"Terminal"}[e.channel]||"Terminal";return e.sessionId?`${a} - ${e.sessionId.slice(0,8)}`:a}return(v,y)=>(a(),e("div",P,[n("div",M,[(a(!0),e(t,null,l(f.tabs,t=>(a(),e("div",{key:t.id,class:s(["tab-item",{active:t.id===f.activeTab}]),onClick:e=>v.$emit("select",t.id)},[i(u(z),{size:14,class:"tab-icon",color:h(t.channel)},{default:r(()=>[(a(),o(c(b(t.channel))))]),_:2},1032,["color"]),n("span",D,d(t.title||g(t)),1),i(u(E),{text:"",size:"tiny",class:"tab-close",onClick:m(e=>v.$emit("close",t.id),["stop"])},{icon:r(()=>[i(u(z),{size:12},{default:r(()=>[i(u(T))]),_:1})]),_:1},8,["onClick"])],10,G))),128))]),n("div",Y,[i(u(E),{text:"",size:"small",class:"add-tab-btn",onClick:y[0]||(y[0]=e=>{p("add",{channel:"shell"})})},{icon:r(()=>[i(u(z),{size:16},{default:r(()=>[i(u(O))]),_:1})]),default:r(()=>[y[1]||(y[1]=n("span",{class:"btn-label"},"新建",-1))]),_:1})])]))}},[["__scopeId","data-v-9841855e"]]),H={key:0,class:"terminal-overlay"},U={class:"connecting-text"},X=_({__name:"TerminalPane",props:{terminalId:{type:String,default:null},channel:{type:String,default:"claude"},sessionId:{type:String,default:null},projectName:{type:String,default:null},cwd:{type:String,default:null}},emits:["created","exit","error"],setup(t,{expose:l,emit:s}){const r=t,o=s,{isDark:c}=x(),m=f(null),w=f(null),I=f(!1),N=f(!0);let k=null,S=null,j=null,_=null,C=null,T=null,O=!0,B=null,A=null,F=null,z=null,E=!1,$=null;const P={background:"#1e1e2e",foreground:"#cdd6f4",cursor:"#f5e0dc",cursorAccent:"#1e1e2e",selectionBackground:"rgba(166, 227, 161, 0.3)",selectionForeground:"#cdd6f4",black:"#45475a",red:"#f38ba8",green:"#a6e3a1",yellow:"#f9e2af",blue:"#89b4fa",magenta:"#f5c2e7",cyan:"#94e2d5",white:"#bac2de",brightBlack:"#585b70",brightRed:"#f38ba8",brightGreen:"#a6e3a1",brightYellow:"#f9e2af",brightBlue:"#89b4fa",brightMagenta:"#f5c2e7",brightCyan:"#94e2d5",brightWhite:"#a6adc8"},M={background:"#eff1f5",foreground:"#4c4f69",cursor:"#dc8a78",cursorAccent:"#eff1f5",selectionBackground:"rgba(64, 160, 43, 0.3)",selectionForeground:"#4c4f69",black:"#5c5f77",red:"#d20f39",green:"#40a02b",yellow:"#df8e1d",blue:"#1e66f5",magenta:"#ea76cb",cyan:"#179299",white:"#acb0be",brightBlack:"#6c6f85",brightRed:"#d20f39",brightGreen:"#40a02b",brightYellow:"#df8e1d",brightBlue:"#1e66f5",brightMagenta:"#ea76cb",brightCyan:"#179299",brightWhite:"#bcc0cc"},G=v(()=>c.value?P:M);function D(){if(!m.value)return!1;const e=m.value.getBoundingClientRect();return e.width>20&&e.height>20}function Y(e){e&&(Number.isFinite(e.cols)&&(F=e.cols),Number.isFinite(e.rows)&&(z=e.rows))}function L(e,a){if(j&&j.readyState===WebSocket.OPEN&&_)return Number.isFinite(F)&&Number.isFinite(z)&&e===F&&a===z?(B=e,void(A=a)):void(B===e&&A===a||(j.send(JSON.stringify({type:"terminal:resize",terminalId:_,cols:e,rows:a})),B=e,A=a))}function X(e,a){D()&&E?L(e,a):$={cols:e,rows:a}}function Z(){if(!k)return;const e=k.cols,a=k.rows;D()?L(e,a):$={cols:e,rows:a}}function K(){j&&j.close(),O=!0,N.value=!0;const e=`${"https:"===window.location.protocol?"wss:":"ws:"}//${window.location.host}/ws`;j=new WebSocket(e),j.onopen=()=>{r.terminalId?Q(r.terminalId):j.send(JSON.stringify({type:"terminal:create",channel:r.channel,sessionId:r.sessionId,projectName:r.projectName,cwd:r.cwd}))},j.onmessage=e=>{try{!function(e){switch(e.type){case"terminal:created":if(_=e.terminalId,I.value=!0,N.value=!1,o("created",{terminalId:e.terminalId,metadata:e.metadata}),Y(e.metadata),E=!0,$){const{cols:e,rows:a}=$;$=null,X(e,a)}else Z();break;case"terminal:attached":if(_=e.terminalId,I.value=!0,N.value=!1,Y(e.metadata),E=!0,$){const{cols:e,rows:a}=$;$=null,X(e,a)}else Z();break;case"terminal:output":k&&e.data&&k.write(e.data);break;case"terminal:exited":I.value=!1,o("exit",{terminalId:e.terminalId,exitCode:e.exitCode});break;case"terminal:error":o("error",e.error)}}(JSON.parse(e.data))}catch(a){}},j.onclose=()=>{I.value=!1,N.value=!1,O&&!T&&(T=setTimeout(()=>{T=null,O&&K()},3e3))},j.onerror=e=>{N.value=!1,o("error",e)}}function Q(e){if(!e||!j||j.readyState!==WebSocket.OPEN)return;B=null,A=null,F=null,z=null,E=!1,$=null,k&&(k.clear(),k.reset());const a={type:"terminal:attach",terminalId:e};k&&Number.isFinite(k.cols)&&Number.isFinite(k.rows)&&k.cols>0&&k.rows>0&&(a.cols=k.cols,a.rows=k.rows),j.send(JSON.stringify(a))}function V(){O=!1,T&&(clearTimeout(T),T=null),j&&(j.close(),j=null)}return l({focus:function(){k&&k.focus()},disconnect:V,destroy:function(){const e=_;_=null,j&&j.readyState===WebSocket.OPEN&&e&&j.send(JSON.stringify({type:"terminal:destroy",terminalId:e})),V()},getTerminalId:()=>_}),p(()=>{k||(k=new J({theme:G.value,fontFamily:'"JetBrains Mono", "Fira Code", "SF Mono", Monaco, "Cascadia Code", Consolas, monospace',fontSize:14,lineHeight:1.2,cursorBlink:!0,cursorStyle:"bar",scrollback:1e4,allowTransparency:!0,convertEol:!0}),S=new q,k.loadAddon(S),k.loadAddon(new R),k.open(w.value),y(()=>{S.fit()}),k.onData(e=>{j&&j.readyState===WebSocket.OPEN&&_&&j.send(JSON.stringify({type:"terminal:input",terminalId:_,data:e}))}),k.onResize(({cols:e,rows:a})=>{X(e,a)}),C=new ResizeObserver(()=>{S&&D()&&S.fit()}),C.observe(m.value)),K()}),b(()=>{O=!1,T&&clearTimeout(T),C&&C.disconnect(),j&&j.close(),k&&k.dispose()}),h(()=>r.terminalId,e=>{e&&j&&j.readyState===WebSocket.OPEN&&e!==_&&Q(e)}),h(c,()=>{k&&(k.options.theme=G.value)}),(t,l)=>(a(),e("div",{class:"terminal-pane",ref_key:"containerRef",ref:m},[n("div",{class:"terminal-container",ref_key:"terminalRef",ref:w},null,512),I.value?g("",!0):(a(),e("div",H,[i(u(W),{size:"large"}),n("span",U,d(N.value?"连接中...":"已断开"),1)]))],512))}},[["__scopeId","data-v-1981f3b1"]]),Z={class:"terminal-view"},K={class:"terminal-panels"},Q={key:1,class:"empty-state"},V={class:"empty-actions"},ee={name:"Terminal"},ae=_(Object.assign(ee,{setup(s){const c=w(),d=I(),m=$(),v=f([]),p=f(null),g=f({});let _=1;f(!1);const x="terminal-tabs-v1";let T=null;const A=f(!0);function F(e){let a=0;return e.forEach(e=>{const n="string"==typeof e.id?e.id.match(/^tab_(\d+)$/):null;if(n){const e=parseInt(n[1],10);Number.isFinite(e)&&e>a&&(a=e)}}),a+1}function W(){"undefined"!=typeof window&&(T&&clearTimeout(T),T=setTimeout(()=>{try{const e={tabs:v.value.map(e=>({id:e.id,terminalId:e.terminalId||null,channel:e.channel,sessionId:e.sessionId||null,projectName:e.projectName||null,cwd:e.cwd||null,title:e.title||null,status:e.status||null})),activeTabId:p.value};window.localStorage.setItem(x,JSON.stringify(e))}catch(e){}},100))}async function J(e={}){var a;const{merge:n=!1}=e;if(n||!(v.value.length>0))try{const e=await C();if(!(null==e?void 0:e.success)||!Array.isArray(e.terminals)||0===e.terminals.length)return;const t=new Set(v.value.map(e=>e.terminalId).filter(Boolean)),l=e.terminals.filter(e=>!t.has(e.id));if(0===l.length)return;const s=F(v.value),i=l.map((e,a)=>{var n,t,l,i;return{id:`tab_${s+a}`,terminalId:e.id,channel:(null==(n=e.metadata)?void 0:n.channel)||"shell",sessionId:(null==(t=e.metadata)?void 0:t.sessionId)||null,projectName:(null==(l=e.metadata)?void 0:l.projectName)||null,cwd:(null==(i=e.metadata)?void 0:i.cwd)||null,title:null,status:e.exited?"exited":"connected"}});n&&v.value.length>0?v.value=[...v.value,...i]:v.value=i,p.value||(p.value=(null==(a=v.value[0])?void 0:a.id)||null),_=F(v.value),W()}catch(t){}}function R(e){q({channel:e&&e.channel||"shell"})}function q(e={}){const a={id:"tab_"+_++,terminalId:null,channel:e.channel||"shell",sessionId:e.sessionId||null,projectName:e.projectName||null,cwd:e.cwd||null,title:e.title||null,status:"connecting"};return v.value.push(a),p.value=a.id,y(()=>{const e=g.value[a.id];e&&e.focus()}),W(),a}function P(e){p.value=e,y(()=>{const a=g.value[e];a&&a.focus()}),W()}function M(e){var a;const n=v.value.findIndex(a=>a.id===e);if(-1===n)return;const t=g.value[e];if(t&&t.destroy(),v.value.splice(n,1),p.value===e&&v.value.length>0){const e=Math.max(0,n-1);p.value=null==(a=v.value[e])?void 0:a.id}W()}function G(e){return Array.isArray(e)?e[0]:e||null}function D(){const{channel:e,projectName:a,sessionId:n}=c.params,t=G(c.query.cwd),l=G(c.query.projectName),s=G(c.query.sessionId),i=G(c.query.openTs),r=a||l,o=n||s,u=r?function(e){if(!e||"string"!=typeof e)return e;try{return decodeURIComponent(e)}catch(a){return e}}(r):null,m=o||null;if(e){const a=Boolean(i),n=Boolean(m),l=!a&&n?v.value.find(a=>a.channel===e&&a.projectName===u&&a.sessionId===m):null;if(l?p.value=l.id:(a||n||0===v.value.length)&&q({channel:e,projectName:u,sessionId:m,cwd:t||null}),a){const{openTs:e,...a}=c.query;d.replace({name:c.name,params:c.params,query:a})}W()}}return async function(){(function(){var e;if("undefined"==typeof window)return!1;try{const a=window.localStorage.getItem(x);if(!a)return!1;const n=JSON.parse(a);if(!n||!Array.isArray(n.tabs))return!1;const t=n.tabs.filter(e=>e&&e.id&&e.channel).map(e=>({id:e.id,terminalId:e.terminalId||null,channel:e.channel,sessionId:e.sessionId||null,projectName:e.projectName||null,cwd:e.cwd||null,title:e.title||null,status:e.status||"connecting"}));return v.value=t,p.value=t.some(e=>e.id===n.activeTabId)?n.activeTabId:(null==(e=t[0])?void 0:e.id)||null,_=F(t),t.length>0}catch(a){return!1}})()?await J({merge:!0}):await J(),A.value=!1,D()}(),h(()=>c.fullPath,()=>{A.value||D()},{immediate:!0}),N(()=>{p.value&&y(()=>{const e=g.value[p.value];e&&e.focus()})}),b(()=>{v.value.forEach(e=>{const a=g.value[e.id];a&&a.disconnect()}),T&&(clearTimeout(T),T=null)}),(s,c)=>(a(),e("div",Z,[i(L,{tabs:v.value,"active-tab":p.value,onSelect:P,onClose:M,onAdd:R},null,8,["tabs","active-tab"]),n("div",K,[v.value.length>0?(a(!0),e(t,{key:0},l(v.value,e=>S((a(),o(X,{key:e.id,ref_for:!0,ref:a=>function(e,a){a?g.value[e]=a:delete g.value[e]}(e.id,a),"terminal-id":e.terminalId,channel:e.channel,"session-id":e.sessionId,"project-name":e.projectName,cwd:e.cwd,onCreated:a=>function(e,{terminalId:a,metadata:n}){const t=v.value.find(a=>a.id===e);t&&(t.terminalId=a,t.status="connected",W())}(e.id,a),onExit:a=>function(e,{exitCode:a}){const n=v.value.find(a=>a.id===e);n&&(n.status="exited",m.warning(`终端已退出 (code: ${a})`),W())}(e.id,a),onError:a=>{return e.id,n=a,void m.error(`终端错误: ${n}`);var n}},null,8,["terminal-id","channel","session-id","project-name","cwd","onCreated","onExit","onError"])),[[j,e.id===p.value]])),128)):(a(),e("div",Q,[i(u(z),{size:64,color:"#45475a"},{default:r(()=>[i(u(B))]),_:1}),c[2]||(c[2]=n("h3",{class:"empty-title"},"Web 终端",-1)),c[3]||(c[3]=n("p",{class:"empty-desc"},"在浏览器中运行命令行工具",-1)),n("div",V,[i(u(E),{type:"primary",size:"large",onClick:c[0]||(c[0]=e=>q({channel:"shell"}))},{icon:r(()=>[i(u(z),null,{default:r(()=>[i(u(O))]),_:1})]),default:r(()=>[c[1]||(c[1]=k(" 新建 Web 终端 ",-1))]),_:1})])]))])]))}}),[["__scopeId","data-v-6a0c56a5"]]);export{ae as default};
|
|
1
|
+
import{c as e,o as a,a as n,F as t,$ as l,L as s,X as i,Y as r,a0 as o,a3 as c,N as u,_ as d,Z as m,r as f,f as v,h as p,i as b,w as h,W as g,v as y,a5 as w,a6 as I,m as N,p as k,s as S,G as j}from"./vue-vendor-PKd8utv_.js";import{_,A as x,B as C}from"./index-B_kPXCbH.js";import{c as T,d as O,h as B,q as A,p as F}from"./icons-BxcwoY5F.js";import{N as z,B as E,g as W,L as $}from"./naive-ui-BIXcURHZ.js";import{D as J,L as R,o as q}from"./xterm-BJzAjXCH.js";import"./markdown-C9MYpaSi.js";import"./vendors-i5CBGnlm.js";const P={class:"terminal-tabs"},M={class:"tabs-container"},G=["onClick"],D={class:"tab-title"},Y={class:"tabs-actions"},L=_({__name:"TerminalTabs",props:{tabs:{type:Array,default:()=>[]},activeTab:{type:String,default:null}},emits:["select","close","add"],setup(f,{emit:v}){const p=v;function b(e){switch(e){case"codex":return F;case"gemini":return A;default:return B}}function h(e){switch(e){case"codex":return"#10a37f";case"gemini":return"#4285f4";case"shell":return"#888888";default:return"#18a058"}}function g(e){const a={claude:"Claude",codex:"Codex",gemini:"Gemini",shell:"Terminal"}[e.channel]||"Terminal";return e.sessionId?`${a} - ${e.sessionId.slice(0,8)}`:a}return(v,y)=>(a(),e("div",P,[n("div",M,[(a(!0),e(t,null,l(f.tabs,t=>(a(),e("div",{key:t.id,class:s(["tab-item",{active:t.id===f.activeTab}]),onClick:e=>v.$emit("select",t.id)},[i(u(z),{size:14,class:"tab-icon",color:h(t.channel)},{default:r(()=>[(a(),o(c(b(t.channel))))]),_:2},1032,["color"]),n("span",D,d(t.title||g(t)),1),i(u(E),{text:"",size:"tiny",class:"tab-close",onClick:m(e=>v.$emit("close",t.id),["stop"])},{icon:r(()=>[i(u(z),{size:12},{default:r(()=>[i(u(T))]),_:1})]),_:1},8,["onClick"])],10,G))),128))]),n("div",Y,[i(u(E),{text:"",size:"small",class:"add-tab-btn",onClick:y[0]||(y[0]=e=>{p("add",{channel:"shell"})})},{icon:r(()=>[i(u(z),{size:16},{default:r(()=>[i(u(O))]),_:1})]),default:r(()=>[y[1]||(y[1]=n("span",{class:"btn-label"},"新建",-1))]),_:1})])]))}},[["__scopeId","data-v-9841855e"]]),H={key:0,class:"terminal-overlay"},U={class:"connecting-text"},X=_({__name:"TerminalPane",props:{terminalId:{type:String,default:null},channel:{type:String,default:"claude"},sessionId:{type:String,default:null},projectName:{type:String,default:null},cwd:{type:String,default:null}},emits:["created","exit","error"],setup(t,{expose:l,emit:s}){const r=t,o=s,{isDark:c}=x(),m=f(null),w=f(null),I=f(!1),N=f(!0);let k=null,S=null,j=null,_=null,C=null,T=null,O=!0,B=null,A=null,F=null,z=null,E=!1,$=null;const P={background:"#1e1e2e",foreground:"#cdd6f4",cursor:"#f5e0dc",cursorAccent:"#1e1e2e",selectionBackground:"rgba(166, 227, 161, 0.3)",selectionForeground:"#cdd6f4",black:"#45475a",red:"#f38ba8",green:"#a6e3a1",yellow:"#f9e2af",blue:"#89b4fa",magenta:"#f5c2e7",cyan:"#94e2d5",white:"#bac2de",brightBlack:"#585b70",brightRed:"#f38ba8",brightGreen:"#a6e3a1",brightYellow:"#f9e2af",brightBlue:"#89b4fa",brightMagenta:"#f5c2e7",brightCyan:"#94e2d5",brightWhite:"#a6adc8"},M={background:"#eff1f5",foreground:"#4c4f69",cursor:"#dc8a78",cursorAccent:"#eff1f5",selectionBackground:"rgba(64, 160, 43, 0.3)",selectionForeground:"#4c4f69",black:"#5c5f77",red:"#d20f39",green:"#40a02b",yellow:"#df8e1d",blue:"#1e66f5",magenta:"#ea76cb",cyan:"#179299",white:"#acb0be",brightBlack:"#6c6f85",brightRed:"#d20f39",brightGreen:"#40a02b",brightYellow:"#df8e1d",brightBlue:"#1e66f5",brightMagenta:"#ea76cb",brightCyan:"#179299",brightWhite:"#bcc0cc"},G=v(()=>c.value?P:M);function D(){if(!m.value)return!1;const e=m.value.getBoundingClientRect();return e.width>20&&e.height>20}function Y(e){e&&(Number.isFinite(e.cols)&&(F=e.cols),Number.isFinite(e.rows)&&(z=e.rows))}function L(e,a){if(j&&j.readyState===WebSocket.OPEN&&_)return Number.isFinite(F)&&Number.isFinite(z)&&e===F&&a===z?(B=e,void(A=a)):void(B===e&&A===a||(j.send(JSON.stringify({type:"terminal:resize",terminalId:_,cols:e,rows:a})),B=e,A=a))}function X(e,a){D()&&E?L(e,a):$={cols:e,rows:a}}function Z(){if(!k)return;const e=k.cols,a=k.rows;D()?L(e,a):$={cols:e,rows:a}}function K(){j&&j.close(),O=!0,N.value=!0;const e=`${"https:"===window.location.protocol?"wss:":"ws:"}//${window.location.host}/ws`;j=new WebSocket(e),j.onopen=()=>{r.terminalId?Q(r.terminalId):j.send(JSON.stringify({type:"terminal:create",channel:r.channel,sessionId:r.sessionId,projectName:r.projectName,cwd:r.cwd}))},j.onmessage=e=>{try{!function(e){switch(e.type){case"terminal:created":if(_=e.terminalId,I.value=!0,N.value=!1,o("created",{terminalId:e.terminalId,metadata:e.metadata}),Y(e.metadata),E=!0,$){const{cols:e,rows:a}=$;$=null,X(e,a)}else Z();break;case"terminal:attached":if(_=e.terminalId,I.value=!0,N.value=!1,Y(e.metadata),E=!0,$){const{cols:e,rows:a}=$;$=null,X(e,a)}else Z();break;case"terminal:output":k&&e.data&&k.write(e.data);break;case"terminal:exited":I.value=!1,o("exit",{terminalId:e.terminalId,exitCode:e.exitCode});break;case"terminal:error":o("error",e.error)}}(JSON.parse(e.data))}catch(a){}},j.onclose=()=>{I.value=!1,N.value=!1,O&&!T&&(T=setTimeout(()=>{T=null,O&&K()},3e3))},j.onerror=e=>{N.value=!1,o("error",e)}}function Q(e){if(!e||!j||j.readyState!==WebSocket.OPEN)return;B=null,A=null,F=null,z=null,E=!1,$=null,k&&(k.clear(),k.reset());const a={type:"terminal:attach",terminalId:e};k&&Number.isFinite(k.cols)&&Number.isFinite(k.rows)&&k.cols>0&&k.rows>0&&(a.cols=k.cols,a.rows=k.rows),j.send(JSON.stringify(a))}function V(){O=!1,T&&(clearTimeout(T),T=null),j&&(j.close(),j=null)}return l({focus:function(){k&&k.focus()},disconnect:V,destroy:function(){const e=_;_=null,j&&j.readyState===WebSocket.OPEN&&e&&j.send(JSON.stringify({type:"terminal:destroy",terminalId:e})),V()},getTerminalId:()=>_}),p(()=>{k||(k=new J({theme:G.value,fontFamily:'"JetBrains Mono", "Fira Code", "SF Mono", Monaco, "Cascadia Code", Consolas, monospace',fontSize:14,lineHeight:1.2,cursorBlink:!0,cursorStyle:"bar",scrollback:1e4,allowTransparency:!0,convertEol:!0}),S=new q,k.loadAddon(S),k.loadAddon(new R),k.open(w.value),y(()=>{S.fit()}),k.onData(e=>{j&&j.readyState===WebSocket.OPEN&&_&&j.send(JSON.stringify({type:"terminal:input",terminalId:_,data:e}))}),k.onResize(({cols:e,rows:a})=>{X(e,a)}),C=new ResizeObserver(()=>{S&&D()&&S.fit()}),C.observe(m.value)),K()}),b(()=>{O=!1,T&&clearTimeout(T),C&&C.disconnect(),j&&j.close(),k&&k.dispose()}),h(()=>r.terminalId,e=>{e&&j&&j.readyState===WebSocket.OPEN&&e!==_&&Q(e)}),h(c,()=>{k&&(k.options.theme=G.value)}),(t,l)=>(a(),e("div",{class:"terminal-pane",ref_key:"containerRef",ref:m},[n("div",{class:"terminal-container",ref_key:"terminalRef",ref:w},null,512),I.value?g("",!0):(a(),e("div",H,[i(u(W),{size:"large"}),n("span",U,d(N.value?"连接中...":"已断开"),1)]))],512))}},[["__scopeId","data-v-1981f3b1"]]),Z={class:"terminal-view"},K={class:"terminal-panels"},Q={key:1,class:"empty-state"},V={class:"empty-actions"},ee={name:"Terminal"},ae=_(Object.assign(ee,{setup(s){const c=w(),d=I(),m=$(),v=f([]),p=f(null),g=f({});let _=1;f(!1);const x="terminal-tabs-v1";let T=null;const A=f(!0);function F(e){let a=0;return e.forEach(e=>{const n="string"==typeof e.id?e.id.match(/^tab_(\d+)$/):null;if(n){const e=parseInt(n[1],10);Number.isFinite(e)&&e>a&&(a=e)}}),a+1}function W(){"undefined"!=typeof window&&(T&&clearTimeout(T),T=setTimeout(()=>{try{const e={tabs:v.value.map(e=>({id:e.id,terminalId:e.terminalId||null,channel:e.channel,sessionId:e.sessionId||null,projectName:e.projectName||null,cwd:e.cwd||null,title:e.title||null,status:e.status||null})),activeTabId:p.value};window.localStorage.setItem(x,JSON.stringify(e))}catch(e){}},100))}async function J(e={}){var a;const{merge:n=!1}=e;if(n||!(v.value.length>0))try{const e=await C();if(!(null==e?void 0:e.success)||!Array.isArray(e.terminals)||0===e.terminals.length)return;const t=new Set(v.value.map(e=>e.terminalId).filter(Boolean)),l=e.terminals.filter(e=>!t.has(e.id));if(0===l.length)return;const s=F(v.value),i=l.map((e,a)=>{var n,t,l,i;return{id:`tab_${s+a}`,terminalId:e.id,channel:(null==(n=e.metadata)?void 0:n.channel)||"shell",sessionId:(null==(t=e.metadata)?void 0:t.sessionId)||null,projectName:(null==(l=e.metadata)?void 0:l.projectName)||null,cwd:(null==(i=e.metadata)?void 0:i.cwd)||null,title:null,status:e.exited?"exited":"connected"}});n&&v.value.length>0?v.value=[...v.value,...i]:v.value=i,p.value||(p.value=(null==(a=v.value[0])?void 0:a.id)||null),_=F(v.value),W()}catch(t){}}function R(e){q({channel:e&&e.channel||"shell"})}function q(e={}){const a={id:"tab_"+_++,terminalId:null,channel:e.channel||"shell",sessionId:e.sessionId||null,projectName:e.projectName||null,cwd:e.cwd||null,title:e.title||null,status:"connecting"};return v.value.push(a),p.value=a.id,y(()=>{const e=g.value[a.id];e&&e.focus()}),W(),a}function P(e){p.value=e,y(()=>{const a=g.value[e];a&&a.focus()}),W()}function M(e){var a;const n=v.value.findIndex(a=>a.id===e);if(-1===n)return;const t=g.value[e];if(t&&t.destroy(),v.value.splice(n,1),p.value===e&&v.value.length>0){const e=Math.max(0,n-1);p.value=null==(a=v.value[e])?void 0:a.id}W()}function G(e){return Array.isArray(e)?e[0]:e||null}function D(){const{channel:e,projectName:a,sessionId:n}=c.params,t=G(c.query.cwd),l=G(c.query.projectName),s=G(c.query.sessionId),i=G(c.query.openTs),r=a||l,o=n||s,u=r?function(e){if(!e||"string"!=typeof e)return e;try{return decodeURIComponent(e)}catch(a){return e}}(r):null,m=o||null;if(e){const a=Boolean(i),n=Boolean(m),l=!a&&n?v.value.find(a=>a.channel===e&&a.projectName===u&&a.sessionId===m):null;if(l?p.value=l.id:(a||n||0===v.value.length)&&q({channel:e,projectName:u,sessionId:m,cwd:t||null}),a){const{openTs:e,...a}=c.query;d.replace({name:c.name,params:c.params,query:a})}W()}}return async function(){(function(){var e;if("undefined"==typeof window)return!1;try{const a=window.localStorage.getItem(x);if(!a)return!1;const n=JSON.parse(a);if(!n||!Array.isArray(n.tabs))return!1;const t=n.tabs.filter(e=>e&&e.id&&e.channel).map(e=>({id:e.id,terminalId:e.terminalId||null,channel:e.channel,sessionId:e.sessionId||null,projectName:e.projectName||null,cwd:e.cwd||null,title:e.title||null,status:e.status||"connecting"}));return v.value=t,p.value=t.some(e=>e.id===n.activeTabId)?n.activeTabId:(null==(e=t[0])?void 0:e.id)||null,_=F(t),t.length>0}catch(a){return!1}})()?await J({merge:!0}):await J(),A.value=!1,D()}(),h(()=>c.fullPath,()=>{A.value||D()},{immediate:!0}),N(()=>{p.value&&y(()=>{const e=g.value[p.value];e&&e.focus()})}),b(()=>{v.value.forEach(e=>{const a=g.value[e.id];a&&a.disconnect()}),T&&(clearTimeout(T),T=null)}),(s,c)=>(a(),e("div",Z,[i(L,{tabs:v.value,"active-tab":p.value,onSelect:P,onClose:M,onAdd:R},null,8,["tabs","active-tab"]),n("div",K,[v.value.length>0?(a(!0),e(t,{key:0},l(v.value,e=>S((a(),o(X,{key:e.id,ref_for:!0,ref:a=>function(e,a){a?g.value[e]=a:delete g.value[e]}(e.id,a),"terminal-id":e.terminalId,channel:e.channel,"session-id":e.sessionId,"project-name":e.projectName,cwd:e.cwd,onCreated:a=>function(e,{terminalId:a,metadata:n}){const t=v.value.find(a=>a.id===e);t&&(t.terminalId=a,t.status="connected",W())}(e.id,a),onExit:a=>function(e,{exitCode:a}){const n=v.value.find(a=>a.id===e);n&&(n.status="exited",m.warning(`终端已退出 (code: ${a})`),W())}(e.id,a),onError:a=>{return e.id,n=a,void m.error(`终端错误: ${n}`);var n}},null,8,["terminal-id","channel","session-id","project-name","cwd","onCreated","onExit","onError"])),[[j,e.id===p.value]])),128)):(a(),e("div",Q,[i(u(z),{size:64,color:"#45475a"},{default:r(()=>[i(u(B))]),_:1}),c[2]||(c[2]=n("h3",{class:"empty-title"},"Web 终端",-1)),c[3]||(c[3]=n("p",{class:"empty-desc"},"在浏览器中运行命令行工具",-1)),n("div",V,[i(u(E),{type:"primary",size:"large",onClick:c[0]||(c[0]=e=>q({channel:"shell"}))},{icon:r(()=>[i(u(z),null,{default:r(()=>[i(u(O))]),_:1})]),default:r(()=>[c[1]||(c[1]=k(" 新建 Web 终端 ",-1))]),_:1})])]))])]))}}),[["__scopeId","data-v-6a0c56a5"]]);export{ae as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as a,W as s}from"./index-
|
|
1
|
+
import{_ as a,W as s}from"./index-B_kPXCbH.js";import{c as r,o as e,X as o,Y as d,N as i}from"./vue-vendor-PKd8utv_.js";import{K as t}from"./naive-ui-BIXcURHZ.js";import"./vendors-i5CBGnlm.js";import"./markdown-C9MYpaSi.js";import"./icons-BxcwoY5F.js";const m={class:"workspace-manager"},n=a({__name:"WorkspaceManager",setup:a=>(a,n)=>(e(),r("div",m,[o(i(t),{title:"工作区管理",bordered:!1},{default:d(()=>[o(s,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-c6211fd6"]]);export{n as default};
|