coding-tool-x 3.9.9-261027 → 3.9.9-261105
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 +1 -0
- package/dist/web/assets/AgentsDrawer-DWnAsTH_.js +1 -0
- package/dist/web/assets/Analytics-D_WWRO5h.js +1 -0
- package/dist/web/assets/AssetPathField-CoIuoSZr.js +1 -0
- package/dist/web/assets/ChatHistoryDrawer-B_OnCpxR.js +1 -0
- package/dist/web/assets/CollapseItem-DEV7PQ-o.js +1 -0
- package/dist/web/assets/CommandsDrawer-gG61nb7a.js +1 -0
- package/dist/web/assets/ConfigExportDrawer-BkSzLSuZ.js +1 -0
- package/dist/web/assets/ConfigTemplates-DvEDpIso.js +1 -0
- package/dist/web/assets/ConfigTemplatesDrawer-DMPO4gjt.js +1 -0
- package/dist/web/assets/ConfigTemplatesPanel-BQe31_bq.js +1 -0
- package/dist/web/assets/Divider-CEqaZMTW.js +1 -0
- package/dist/web/assets/DrawerContent-BYlV968f.js +1 -0
- package/dist/web/assets/FavoritesDrawer-Y-MmIIE9.js +1 -0
- package/dist/web/assets/{Forward-DLCL7aMY.js → Forward-kgMPT2RI.js} +1 -1
- package/dist/web/assets/GatewayConvertDrawer-BvYhzJD6.js +1 -0
- package/dist/web/assets/Home-BOwk4kTa.js +1 -0
- package/dist/web/assets/MarkdownEditor-Bf9QKKaV.js +1 -0
- package/dist/web/assets/McpDrawer-B7cwI24B.js +1 -0
- package/dist/web/assets/McpFormDrawer-Djt5CJyE.js +1 -0
- package/dist/web/assets/PluginManager-B4J_hR0V.js +1 -0
- package/dist/web/assets/PluginsDrawer-Ch4x66-E.js +1 -0
- package/dist/web/assets/PluginsPanel-mqXBlKZg.js +1 -0
- package/dist/web/assets/ProjectList-DtmQyoPc.css +1 -0
- package/dist/web/assets/ProjectList-xToRgLVw.js +1 -0
- package/dist/web/assets/PromptsDrawer-VYrlk-F6.js +1 -0
- package/dist/web/assets/RecentSessionsDrawer-DCsgGSBu.js +1 -0
- package/dist/web/assets/SessionCard-C9n9lC_Y.css +1 -0
- package/dist/web/assets/SessionCard-DwzxeSe9.js +1 -0
- package/dist/web/assets/{SessionList-qG_XpPBJ.css → SessionList-CCuKp6ib.css} +1 -1
- package/dist/web/assets/SessionList-GqzUHgOu.js +1 -0
- package/dist/web/assets/SettingsDrawer-Q_aTOBhf.js +1 -0
- package/dist/web/assets/SkillManager-B1B58WKe.js +1 -0
- package/dist/web/assets/SkillsDrawer-Ch1b1hLn.js +1 -0
- package/dist/web/assets/SkillsPanel-B_xxyDpy.js +1 -0
- package/dist/web/assets/{Upload-xqorL26i.js → Upload-B6Kn1TvG.js} +1 -1
- package/dist/web/assets/WorkspaceDrawer-C3w-Z87U.js +1 -0
- package/dist/web/assets/WorkspaceManager-BFzjeEWh.js +1 -0
- package/dist/web/assets/WorkspacePanel-DkrwFSLs.js +1 -0
- package/dist/web/assets/_plugin-vue_export-helper-DyHLuIR4.js +1 -0
- package/dist/web/assets/{client-oU6RT-6I.js → client-B31QOzWk.js} +1 -1
- package/dist/web/assets/{dsh-agent-presets-DjJRVMT6.js → dsh-agent-presets-DopJnuAZ.js} +1 -1
- package/dist/web/assets/headers-nTUGmJee.js +1 -0
- package/dist/web/assets/{icons-B-AzZoeE.js → icons-C6KNTFqo.js} +1 -1
- package/dist/web/assets/index-BXWpib7P.js +2 -0
- package/dist/web/assets/{index-DjIuAtaS.css → index-CvL_fRpL.css} +1 -1
- package/dist/web/assets/light-DeIjG9s_.js +1 -0
- package/dist/web/assets/markdown-xLK9ekFg.js +1 -0
- package/dist/web/assets/platforms-BdTllxKt.js +1 -0
- package/dist/web/assets/{platforms-p9AiybLU.js → platforms-CDltfh5G.js} +1 -1
- package/dist/web/assets/{project-config-CzFKBw_m.js → project-config-C16yaWHF.js} +1 -1
- package/dist/web/assets/rolldown-runtime-DcNxTHDL.js +1 -0
- package/dist/web/assets/sessions-B4RD8wDx.js +1 -0
- package/dist/web/assets/{sessions-DJiJJgvg.js → sessions-Xl0HAvhA.js} +1 -1
- package/dist/web/assets/use-lock-html-scroll-Bu94jdUB.js +1 -0
- package/dist/web/assets/use-message-BYx0IRj1.js +1 -0
- package/dist/web/assets/useResponsiveDrawer-Deh7Xdcj.js +1 -0
- package/dist/web/assets/vendors-CvGw6U_t.js +1 -0
- package/dist/web/assets/vue-vendor-Cr_NLmXY.js +1 -0
- package/dist/web/assets/{workspaces-D2yLnT-B.js → workspaces-Y7hS24p2.js} +1 -1
- package/dist/web/assets/xml-B78loRzO.js +1 -0
- package/dist/web/index.html +13 -12
- package/package.json +3 -3
- package/src/config/model-metadata.json +30 -4
- package/src/platforms/drivers/dsh/api-operations.js +1 -1
- package/src/platforms/drivers/dsh/channels-implementation.js +10 -0
- package/src/platforms/drivers/dsh/channels.js +10 -0
- package/src/platforms/drivers/dsh/proxy-implementation.js +7 -1
- package/src/platforms/drivers/dsh/sessions.js +5 -1
- package/src/platforms/manifest-schema.js +1 -1
- package/src/platforms/manifests/dsh.json +8 -0
- package/src/server/services/model-detector.js +22 -3
- package/dist/web/assets/AgentsDrawer-CKEf8ie1.js +0 -1
- package/dist/web/assets/Analytics-0BCMxQ-o.js +0 -1
- package/dist/web/assets/AssetPathField-pfN6L814.js +0 -1
- package/dist/web/assets/ChatHistoryDrawer-nuUPRqje.js +0 -1
- package/dist/web/assets/CollapseItem-B2SdqQp2.js +0 -1
- package/dist/web/assets/CommandsDrawer-D8m0qLzQ.js +0 -1
- package/dist/web/assets/ConfigExportDrawer-BlCBLdue.js +0 -1
- package/dist/web/assets/ConfigTemplates-CePBARK8.js +0 -1
- package/dist/web/assets/ConfigTemplatesDrawer-DbVY4rD1.js +0 -1
- package/dist/web/assets/ConfigTemplatesPanel-CwYPLEFV.js +0 -1
- package/dist/web/assets/Divider-BLLhMTSt.js +0 -1
- package/dist/web/assets/DrawerContent-ChXgZ1Xm.js +0 -1
- package/dist/web/assets/FavoritesDrawer-BKAKQNqP.js +0 -1
- package/dist/web/assets/GatewayConvertDrawer-D2MFXcqS.js +0 -1
- package/dist/web/assets/Home-BmElvXVZ.js +0 -1
- package/dist/web/assets/MarkdownEditor-buNC2iDj.js +0 -1
- package/dist/web/assets/McpDrawer-NBjAyFU5.js +0 -1
- package/dist/web/assets/McpFormDrawer-BUnW9j4A.js +0 -1
- package/dist/web/assets/PluginManager-BgHpsF5S.js +0 -1
- package/dist/web/assets/PluginsDrawer-CFnmqzV0.js +0 -1
- package/dist/web/assets/PluginsPanel-ClSdnSCu.js +0 -1
- package/dist/web/assets/ProjectList-CjlHEyU1.js +0 -1
- package/dist/web/assets/ProjectList-VbIYSHbH.css +0 -1
- package/dist/web/assets/PromptsDrawer-xeSGgpCd.js +0 -1
- package/dist/web/assets/RecentSessionsDrawer-DELB6-rU.js +0 -1
- package/dist/web/assets/SessionCard-BaH42eOe.js +0 -1
- package/dist/web/assets/SessionCard-aM2NHu6i.css +0 -1
- package/dist/web/assets/SessionList-BGB9GwYE.js +0 -1
- package/dist/web/assets/SettingsDrawer-DdYC8GIa.js +0 -1
- package/dist/web/assets/SkillManager-CF7EiSps.js +0 -1
- package/dist/web/assets/SkillsDrawer-Bc5zA1bk.js +0 -1
- package/dist/web/assets/SkillsPanel-SnzwzqW5.js +0 -1
- package/dist/web/assets/WorkspaceDrawer-DBiEnZ7j.js +0 -1
- package/dist/web/assets/WorkspaceManager-C1dNfoAy.js +0 -1
- package/dist/web/assets/WorkspacePanel-CWNQZjm1.js +0 -1
- package/dist/web/assets/_plugin-vue_export-helper-BeLZJZij.js +0 -1
- package/dist/web/assets/headers-DbowkmZJ.js +0 -1
- package/dist/web/assets/index-BKpL4XdU.js +0 -2
- package/dist/web/assets/light-C2X7hegj.js +0 -1
- package/dist/web/assets/markdown-u082bbtj.js +0 -1
- package/dist/web/assets/platforms-Cq6XDXfy.js +0 -1
- package/dist/web/assets/sessions-DSLpMXCq.js +0 -1
- package/dist/web/assets/use-lock-html-scroll-DXIqmUW4.js +0 -1
- package/dist/web/assets/use-message-DBsCm7FJ.js +0 -1
- package/dist/web/assets/useResponsiveDrawer-CTQPBATk.js +0 -1
- package/dist/web/assets/vendors-D0c_0KLP.js +0 -1
- package/dist/web/assets/vue-vendor-BqZbbXHA.js +0 -1
- package/dist/web/assets/xml-CgY3RMlX.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,D as a,H as l,I as s,J as n,K as t,O as c,S as o,V as i,W as r,Y as u,Z as d,_t as v,b as p,et as h,g as y,gt as g,ht as m,i as f,m as k,mt as T,st as b,w,x as $}from"./vue-vendor-Cr_NLmXY.js";import{t as _}from"./vendors-CvGw6U_t.js";import{i as C,s as x,t as z}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{A as S,C as j,Et as q,Y as L,g as M,j as I,ut as E,v as O}from"./index-BXWpib7P.js";import{t as A,u as D}from"./use-message-BYx0IRj1.js";import{C as F,G as N,I as P,L as U,O as J,Ot as V,T as K,Y as R,ft as Y,i as H,n as G,r as W,v as Z,xt as B,y as Q,yt as X}from"./icons-C6KNTFqo.js";import{d as ee,l as ae,o as le,t as se}from"./platforms-BdTllxKt.js";import{t as ne}from"./RecentSessionsDrawer-DCsgGSBu.js";var te={class:"channel-column"},ce={class:"drag-handle",title:"拖拽排序"},oe={class:"header-icon"},ie={class:"channel-title"},re={key:0,class:"claude-extra-area"},ue={key:0,class:"channel-content"},de={key:0,class:"card"},ve={class:"card-header"},pe={class:"card-title"},he={key:0,class:"runtime-badge"},ye={class:"card-body",style:{padding:"6px 10px"}},ge={class:"proxy-info-row"},me={class:"proxy-status"},fe={key:0,class:"proxy-port"},ke={class:"channel-name"},Te={class:"channel-quick-panel"},be={class:"panel-title"},we={key:0,class:"no-channels"},$e={key:1,class:"channel-quick-list"},_e={class:"channel-quick-info"},Ce={class:"channel-quick-name"},xe={key:0,class:"channel-switching-tip"},ze={class:"channel-metrics"},Se={class:"metric-item"},je={class:"metric-value"},qe={class:"metric-item"},Le={class:"metric-value"},Me={class:"metric-item"},Ie={class:"metric-value"},Ee={class:"metric-item"},Oe={class:"card"},Ae={class:"card-header compact"},De={class:"card-body",style:{padding:"8px 10px"}},Fe={class:"quick-access-list"},Ne={class:"access-icon"},Pe={class:"access-content"},Ue={class:"access-value"},Je={class:"access-icon"},Ve={class:"access-content"},Ke={class:"access-value"},Re={class:"access-icon"},Ye={class:"access-content"},He={class:"access-goto"},Ge={class:"card-header compact"},We={class:"card-body",style:{padding:"8px 10px"}},Ze={class:"stats-inline stats-3col"},Be={class:"stat-inline-item stat-requests"},Qe={class:"stat-info"},Xe={class:"stat-inline-item stat-input"},ea={class:"stat-info"},aa={class:"stat-inline-item stat-output"},la={class:"stat-info"},sa={key:3,class:"card logs-card"},na={class:"card-header compact"},ta={class:"card-body logs-card-body"},ca={class:"logs-table-wrapper"},oa={key:0,class:"empty-logs"},ia=["title"],ra={key:0,class:"action-content"},ua={class:"action-msg"},da={class:"action-time"},va={key:1,class:"action-content"},pa={class:"action-msg error-msg"},ha={class:"action-time error-time"},ya={class:"locked-content"},ga={class:"lock-icon"},ma="channelLocks",fa=z({__name:"ChannelColumn",props:{channelType:{type:String,required:!0}},setup(_){const z=_,q=f(),le=se(),fa=A(),{getProxyState:ka,getChannels:Ta,getSchedulerState:ba,startProxy:wa,stopProxy:$a,getLogs:_a,clearLogsForSource:Ca,loadChannels:xa,logLimit:za,statsInterval:Sa}=O(),{dashboardData:ja,isLoading:qa,loadDashboard:La,scheduleRefresh:Ma}=M(),Ia=p(()=>le.get(z.channelType)||{key:z.channelType,label:z.channelType,title:z.channelType,icon:H,color:"#64748b",capabilities:{},resourceTypes:{}}),Ea=p(()=>Ia.value.logLayout||z.channelType),Oa=p(()=>Ia.value.title||Ia.value.label||z.channelType),Aa=p(()=>Ia.value.icon||H),Da=p(()=>Ia.value.color||"#64748b"),Fa=p(()=>Ia.value.label||Ia.value.title||z.channelType),Na=p(()=>ka(z.channelType)?.value||{}),Pa=b({projects:0,sessions:0}),Ua=b({requests:0,tokens:0,cost:0}),Ja=b({requests:0,tokens:0,cost:0}),Va={requests:0,tokens:0,cost:3},Ka={requests:null,tokens:null,cost:null},Ra=b({requests:!1,tokens:!1,cost:!1}),Ya=p(()=>ja.value?.todayStats?.[z.channelType]?.byModel||{});function Ha(e,a,l,s=600){Ka[e]&&cancelAnimationFrame(Ka[e]),Ra.value[e]=!0;const n=Date.now(),t=()=>{const c=Date.now()-n,o=Math.min(c/s,1),i=1-Math.pow(1-o,2),r=a+(l-a)*i,u=Va[e]??0,d=Math.pow(10,u),v=u>0?Math.round(r*d)/d:Math.round(r);Ja.value[e]=v,o<1?Ka[e]=requestAnimationFrame(t):Ra.value[e]=!1};Ka[e]=requestAnimationFrame(t)}const Ga=b(!1);function Wa(e){try{const a=localStorage.getItem(ma),l=a?JSON.parse(a):{};l[z.channelType]=e,localStorage.setItem(ma,JSON.stringify(l))}catch(a){}}const Za=b(function(){try{const e=localStorage.getItem(ma);if(e)return JSON.parse(e)[z.channelType]||!1}catch(e){}return!1}());async function Ba(){Za.value=!Za.value,Wa(Za.value);try{if(await ee("channelLocks",z.channelType,Za.value),ja.value){const e=ja.value.uiConfig||{},a={...e.channelLocks||{}};a[z.channelType]=Za.value,ja.value={...ja.value,uiConfig:{...e,channelLocks:a}}}}catch(e){}}const Qa=b(!0);function Xa(e){e.detail&&void 0!==e.detail.showLogs&&(Qa.value=e.detail.showLogs)}const el=b(Date.now()),al=p(()=>{if(!Na.value.running)return"";const e=Na.value.startTime;if(!e)return"";const a=el.value-e;if(a<=0)return"";const l=Math.floor(a/1e3),s=Math.floor(l/3600),n=Math.floor(l%3600/60),t=l%60;let c="已运行 ";return s>0&&(c+=`${s}小时`),n>0&&(c+=`${n}分`),(t>0||0===s&&0===n)&&(c+=`${t}秒`),c}),ll=b(null),sl=p(()=>za.value),nl=p(()=>kl()?(_a(z.channelType)?.value||[]).slice(0,sl.value):[]);let tl=null,cl=null,ol=null,il=!1,rl=null;const ul=p(()=>{const e=Ta(z.channelType)?.value||[];return[...e.filter(e=>!1!==e.enabled),...e.filter(e=>!1===e.enabled)]});function dl(e){const a=ba(z.channelType);if(!a?.channels)return 0;const l=a.channels.find(a=>a.id===e);return l?l.inflight:0}const vl=p(()=>{const e=ul.value.filter(e=>!1!==e.enabled).length;return Na.value.running?`${e}个渠道动态切换中`:ul.value.length>0?`${e}个渠道已启用`:"无渠道"}),pl=p(()=>ja.value?.todayStats?.[z.channelType]?.byChannel||{});function hl(e){return pl.value[e]||{requests:0,tokens:0,cost:0}}function yl(e,a){return e?.usageMissing||"cached"===a&&"dsh"===z.channelType&&!0!==e?.cacheUsageAvailable?"--":e?.tokens?.[a]||0}function gl(e){return le.hasCapability(z.channelType,e)}function ml(e){return gl(e)||!0===Ia.value.resourceTypes?.[e]}const fl=p(()=>["skills","commands","agents","plugins"].some(ml));function kl(){return gl("nativeLogs")}function Tl(e){if(!e||"action"===e.type||"error"===e.status)return"";const a=[];return e.model&&a.push(`模型: ${e.model}`),e.originalModel&&e.originalModel!==e.model&&a.push(`重定向: ${e.originalModel} -> ${e.model}`),e.usageMissing&&a.push("上游响应未返回 usage,当前无法计算 token。"),a.join("\n")}async function bl(e){if(!gl("proxy"))return void fa.warning(`${Oa.value} 暂未接入动态代理`);const a=ka(z.channelType);if(a){a.value.loading=!0;try{let l;l=e?await wa(z.channelType):await $a(z.channelType,{refreshChannelsDrawer:!0}),!1!==l.success?"omp"===z.channelType?fa.success(e?"OMP 动态切换已启用":"OMP 已切换为单渠道直连模式"):fa.success(e?`${Oa.value} 代理已启动`:`${Oa.value} 代理已停止`):(fa.error(l.error||"操作失败"),a.value.running=!e)}catch(l){fa.error(l.response?.data?.error||l.message||"操作失败"),a.value.running=!e}finally{a.value.loading=!1}}}function wl(){gl("projects")?q.push({name:"cli-projects",params:{platform:z.channelType}}):fa.info(`${Oa.value} 当前仅作为首页显示项`)}function $l(){gl("projects")?q.push({name:"cli-projects",params:{platform:z.channelType}}):fa.info(`${Oa.value} 当前仅作为首页显示项`)}function _l(){gl("sessions")?Ga.value=!0:fa.info(`${Oa.value} 当前没有托管会话列表`)}d(nl,e=>{const a=e[0]?.id||null;a&&a!==tl?(tl=a,rl&&clearTimeout(rl),rl=setTimeout(()=>{Ma({fresh:!0}).then(()=>ql()).catch(()=>{})},5e3),(!ll.value||ll.value.scrollTop<20)&&s(()=>{ll.value&&(ll.value.scrollTop=0)})):tl=a}),d(()=>Ua.value.requests,e=>{Ha("requests",Ja.value.requests,e,600)}),d(()=>Ua.value.tokens,e=>{Ha("tokens",Ja.value.tokens,e,600)}),d(()=>Ua.value.cost,e=>{Ha("cost",Ja.value.cost,e,600)}),d(()=>z.channelType,()=>{tl=nl.value[0]?.id||null}),d(()=>ja.value?.counts?.[z.channelType],()=>{jl()}),d(()=>ja.value?.todayStats?.[z.channelType],()=>{ql()},{deep:!0}),d(Sa,()=>{il&&function(){cl&&(clearInterval(cl),cl=null);const e=Sa.value||30,a=Math.max(1e3*e,1e4);cl=setInterval(()=>{Ma({fresh:!0}).then(()=>ql()).catch(()=>{})},a)}()});const Cl=b({});function xl(e){return!!Cl.value[e]}function zl(e,a){e&&(Cl.value={...Cl.value,[e]:!!a})}async function Sl(e,a){if(!e)return;const l=`${z.channelType}ChannelCollapse`;let s={};try{const e=l?localStorage.getItem(l):null;s=e?JSON.parse(e):{}}catch(n){s={}}a?delete s[e]:s[e]=!0;try{l&&localStorage.setItem(l,JSON.stringify(s))}catch(n){}try{await ee("channelCollapse",z.channelType,s)}catch(n){}}function jl(){const e=ja.value?.counts?.[z.channelType];Pa.value.projects=e?.projectCount||0,Pa.value.sessions=e?.sessionCount||0}async function ql(){if(ja.value&&ja.value.todayStats){const e=ja.value.todayStats[z.channelType];e&&(Ua.value.requests=e.requests||0,Ua.value.tokens=e.tokens||0,Ua.value.cost=e.cost||0)}jl()}function Ll(){Ca(z.channelType)}function Ml(e){e?.currentTarget?.blur?.()}function Il(e){window.dispatchEvent(new CustomEvent("open-skills-drawer",{detail:{platform:z.channelType}})),Ml(e)}function El(e){window.dispatchEvent(new CustomEvent("open-commands-drawer",{detail:{platform:z.channelType}})),Ml(e)}function Ol(e){if(!ml("agents"))return fa.info(`${Oa.value} 的 Agent 能力通过插件/扩展提供`),void Ml(e);window.dispatchEvent(new CustomEvent("open-agents-drawer",{detail:{platform:z.channelType}})),Ml(e)}return i(async()=>{await La().then(()=>ql()),async function(){try{if(ja.value&&ja.value.uiConfig)Qa.value=!1!==ja.value.uiConfig.panelVisibility?.showLogs;else{const e=await ae();e.success&&e.config&&(Qa.value=!1!==e.config.panelVisibility?.showLogs)}}catch(e){}}(),async function(){try{let e=!1;if(ja.value&&ja.value.uiConfig)e=ja.value.uiConfig.channelLocks?.[z.channelType]||!1;else{const a=await ae();a.success&&a.config&&(e=a.config.channelLocks?.[z.channelType]||!1)}Za.value=e,Wa(e)}catch(e){}}(),window.addEventListener("panel-visibility-change",Xa),Ja.value={...Ua.value},il=!0,ol=setInterval(()=>{el.value=Date.now()},1e3)}),l(()=>{il=!1,cl&&clearInterval(cl),ol&&clearInterval(ol),rl&&clearTimeout(rl),window.removeEventListener("panel-visibility-change",Xa),Object.values(Ka).forEach(e=>{e&&cancelAnimationFrame(e)})}),(l,s)=>{const i=n("n-collapse");return r(),w("div",te,[$("div",{class:m(["channel-header",_.channelType]),style:g({"--platform-color":Da.value})},[$("div",ce,[c(T(C),{size:16},{default:h(()=>[c(T(Q))]),_:1})]),$("div",oe,[c(T(C),{size:20},{default:h(()=>[(r(),o(u(Aa.value)))]),_:1})]),$("h2",ie,v(Oa.value),1),fl.value?(r(),w("div",re,[ml("skills")?(r(),o(T(L),{key:0,trigger:"hover"},{trigger:h(()=>[c(T(x),{text:"",class:"config-shortcut-button",onClick:Il,title:"Skills 技能管理"},{icon:h(()=>[c(T(C),{size:18},{default:h(()=>[c(T(R))]),_:1})]),_:1})]),default:h(()=>[s[2]||(s[2]=a(" Skills 技能管理 ",-1))]),_:1})):e("",!0),ml("commands")?(r(),o(T(L),{key:1,trigger:"hover"},{trigger:h(()=>[c(T(x),{text:"",class:"config-shortcut-button",onClick:El,title:"Commands 命令管理"},{icon:h(()=>[c(T(C),{size:18},{default:h(()=>[c(T(H))]),_:1})]),_:1})]),default:h(()=>[s[3]||(s[3]=a(" Commands 命令管理 ",-1))]),_:1})):e("",!0),ml("agents")?(r(),o(T(L),{key:2,trigger:"hover"},{trigger:h(()=>[c(T(x),{text:"",class:"config-shortcut-button",onClick:Ol,title:"Agents 代理管理"},{icon:h(()=>[c(T(C),{size:18},{default:h(()=>[c(T(J))]),_:1})]),_:1})]),default:h(()=>[s[4]||(s[4]=a(" Agents 代理管理 ",-1))]),_:1})):e("",!0)])):e("",!0),c(T(x),{text:"",class:"lock-button",onClick:Ba,title:Za.value?"解锁此列":"锁定此列"},{icon:h(()=>[c(T(C),{size:18},{default:h(()=>[Za.value?(r(),o(T(U),{key:0})):(r(),o(T(P),{key:1}))]),_:1})]),_:1},8,["title"])],6),Za.value?e("",!0):(r(),w("div",ue,[gl("proxy")?(r(),w("div",de,[$("div",ve,[c(T(C),{size:16},{default:h(()=>[c(T(K))]),_:1}),$("h3",pe,v("omp"===_.channelType?"动态切换":"代理控制"),1),Na.value.running&&al.value?(r(),w("span",he,v(al.value),1)):e("",!0),c(T(I),{value:Na.value.running,"onUpdate:value":[s[0]||(s[0]=e=>Na.value.running=e),bl],loading:Na.value.loading,size:"small",style:{"margin-left":"auto"}},null,8,["value","loading"])]),$("div",ye,[$("div",ge,[$("div",me,[$("div",{class:m(["status-dot",{active:Na.value.running}])},null,2),c(T(S),{type:Na.value.running?"success":"default",style:{"font-size":"12px"}},{default:h(()=>[a(v(Na.value.running?"运行中":"已停止"),1)]),_:1},8,["type"]),"omp"!==_.channelType?(r(),w("span",fe,"端口: "+v(Na.value.port),1)):e("",!0)]),gl("channels")?(r(),o(T(D),{key:0,trigger:"click",placement:"bottom",width:320,class:"channel-popover"},{trigger:h(()=>[c(T(x),{text:"",size:"tiny",class:"channel-status"},{default:h(()=>[$("span",ke,v(vl.value),1)]),_:1})]),default:h(()=>[$("div",Te,[$("div",be,[s[6]||(s[6]=$("span",null,"渠道快捷管理",-1)),c(T(S),{depth:"3",style:{"font-size":"11px"}},{default:h(()=>[...s[5]||(s[5]=[a("点击开关切换状态",-1)])]),_:1})]),0===ul.value.length?(r(),w("div",we,[c(T(S),{depth:"3"},{default:h(()=>[...s[7]||(s[7]=[a("暂无配置渠道",-1)])]),_:1})])):(r(),w("div",$e,[(r(!0),w(y,null,t(ul.value,l=>{return r(),w("div",{key:l.id,class:m(["channel-quick-item",{disabled:!1===l.enabled}])},[$("div",_e,[$("span",Ce,v(l.name),1),"frozen"===l.health?.status?(r(),o(T(E),{key:0,size:"tiny",type:"error",bordered:!1},{default:h(()=>[...s[8]||(s[8]=[a(" 冻结 ",-1)])]),_:1})):e("",!0),c(T(I),{size:"small",value:!1!==l.enabled,"onUpdate:value":e=>async function(e,a){if(e&&!xl(e.id)){zl(e.id,!0);try{await j(z.channelType,e.id,{enabled:a}),await Sl(e.id,a),fa.success(a?`渠道「${e.name}」已启用`:`渠道「${e.name}」已停用`),await xa({force:!0,keys:[z.channelType]}),window.dispatchEvent(new CustomEvent("channel-management-refresh",{detail:{channel:z.channelType}}))}catch(l){fa.error("操作失败: "+l.message)}finally{zl(e.id,!1)}}}(l,e),loading:xl(l.id),disabled:xl(l.id),style:{"margin-left":"auto"}},null,8,["value","onUpdate:value","loading","disabled"])]),xl(l.id)?(r(),w("div",xe," 正在切换渠道状态... ")):e("",!0),$("div",ze,[$("span",Se,[s[9]||(s[9]=$("span",{class:"metric-label"},"请求",-1)),$("span",je,v(hl(l.id).requests),1)]),$("span",qe,[s[10]||(s[10]=$("span",{class:"metric-label"},"Tokens",-1)),$("span",Le,v((n=hl(l.id).tokens,n>=1e6?(n/1e6).toFixed(1)+"M":n>=1e3?(n/1e3).toFixed(1)+"K":n.toString())),1)]),$("span",Me,[s[11]||(s[11]=$("span",{class:"metric-label"},"权重",-1)),$("span",Ie,v(l.weight||1),1)]),$("span",Ee,[s[12]||(s[12]=$("span",{class:"metric-label"},"并发",-1)),$("span",{class:m(["metric-value",{active:dl(l.id)>0}])},v(dl(l.id))+v(l.maxConcurrency?`/${l.maxConcurrency}`:""),3)])])],2);var n}),128))]))])]),_:1})):e("",!0)])])])):e("",!0),$("div",Oe,[$("div",Ae,[c(T(C),{size:14},{default:h(()=>[c(T(Z))]),_:1}),s[13]||(s[13]=$("h3",{class:"card-title"},"快速访问",-1))]),$("div",De,[$("div",Fe,[$("div",{class:m(["access-card access-card-projects",{clickable:gl("projects"),disabled:!gl("projects")}]),onClick:wl},[$("div",Ne,[c(T(C),{size:16},{default:h(()=>[c(T(N))]),_:1})]),$("div",Pe,[s[14]||(s[14]=$("span",{class:"access-label"},"项目",-1)),$("span",Ue,v(Pa.value.projects),1)])],2),$("div",{class:m(["access-card access-card-sessions",{clickable:gl("sessions"),disabled:!gl("sessions")}]),onClick:_l},[$("div",Je,[c(T(C),{size:16},{default:h(()=>[c(T(B))]),_:1})]),$("div",Ve,[s[15]||(s[15]=$("span",{class:"access-label"},"最新对话",-1)),$("span",Ke,v(Pa.value.sessions),1)])],2),$("div",{class:m(["access-card access-card-goto",{clickable:gl("projects"),disabled:!gl("projects")}]),onClick:$l},[$("div",Re,[c(T(C),{size:16},{default:h(()=>[c(T(V))]),_:1})]),$("div",Ye,[s[16]||(s[16]=$("span",{class:"access-label"},"前往",-1)),$("span",He,v(Fa.value),1)])],2)])])]),gl("statistics")?(r(),w("div",{key:1,class:m(["card stats-card",`stats-card-${_.channelType}`])},[$("div",Ge,[c(T(C),{size:14},{default:h(()=>[c(T(G))]),_:1}),s[17]||(s[17]=$("h3",{class:"card-title"},"今日数据",-1))]),$("div",We,[$("div",Ze,[$("div",Be,[s[19]||(s[19]=$("div",{class:"stat-icon-dot requests"},null,-1)),$("div",Qe,[s[18]||(s[18]=$("span",{class:"stat-label"},"请求",-1)),$("span",{class:m(["stat-value",{animating:Ra.value.requests}])},v(Ja.value.requests),3)])]),$("div",Xe,[s[21]||(s[21]=$("div",{class:"stat-icon-dot tokens"},null,-1)),$("div",ea,[s[20]||(s[20]=$("span",{class:"stat-label"},"总 Tokens",-1)),$("span",{class:m(["stat-value",{animating:Ra.value.tokens}])},v((p=Ja.value.tokens,p>=1e6?(p/1e6).toFixed(1)+"M":p>=1e3?(p/1e3).toFixed(1)+"K":p.toString())),3)])]),$("div",aa,[s[23]||(s[23]=$("div",{class:"stat-icon-dot cost"},null,-1)),$("div",la,[s[22]||(s[22]=$("span",{class:"stat-label"},"成本 / USD",-1)),$("span",{class:m(["stat-value",{animating:Ra.value.cost}])},v((d=Ja.value.cost,!d||Number.isNaN(d)?"$0":"$"+Number(d).toFixed(3))),3)])])])])],2)):e("",!0),gl("statistics")&&Object.keys(Ya.value).length>0?(r(),w("div",{key:2,class:m(["card chart-card",`chart-card-${_.channelType}`])},[c(i,{"default-expanded-names":[],accordion:""})],2)):e("",!0),Qa.value&&kl()?(r(),w("div",sa,[$("div",na,[c(T(C),{size:14},{default:h(()=>[c(T(F))]),_:1}),s[24]||(s[24]=$("h3",{class:"card-title"},"实时日志",-1)),c(T(x),{text:"",size:"tiny",onClick:k(Ll,["stop"]),style:{"margin-left":"auto"},title:"清空日志"},{icon:h(()=>[c(T(C),{size:14},{default:h(()=>[c(T(W))]),_:1})]),_:1})]),$("div",ta,[$("div",ca,[$("div",{class:m(["logs-table-header",`logs-header-${_.channelType}`])},[$("div",{class:m(["log-col col-channel",`col-channel-${Ea.value}`])},"渠道",2),$("div",{class:m(["log-col col-token",`col-token-${Ea.value}`])},"请求",2),$("div",{class:m(["log-col col-token",`col-token-${Ea.value}`])},"回复",2),"claude"===_.channelType?(r(),w(y,{key:0},[$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"写入",2),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"命中",2)],64)):"dsh"===_.channelType?(r(),w(y,{key:1},[$("div",{class:m(["log-col col-token",`col-token-${Ea.value}`])},"缓存",2),$("div",{class:m(["log-col col-token",`col-token-${Ea.value}`])},"总计",2)],64)):"codex"===_.channelType?(r(),w(y,{key:2},[$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"推理",2),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"缓存",2),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"总计",2)],64)):"gemini"===_.channelType?(r(),w(y,{key:3},[$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"缓存",2),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"总计",2)],64)):"opencode"===_.channelType||"omp"===_.channelType?(r(),w(y,{key:4},[$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"推理",2),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"缓存",2),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},"总计",2)],64)):(r(),w("div",{key:5,class:m(["log-col col-token",`col-token-${_.channelType}`])},"总计",2)),$("div",{class:m(["log-col col-time",`col-time-${Ea.value}`])},"时间",2)],2),$("div",{class:"logs-container",ref_key:"logsContainer",ref:ll},[0===nl.value.length?(r(),w("div",oa,[c(T(C),{size:32,depth:"3",style:{"margin-bottom":"8px"}},{default:h(()=>[c(T(F))]),_:1}),c(T(S),{depth:"3",style:{"font-size":"12px","font-weight":"500"}},{default:h(()=>[...s[25]||(s[25]=[a("暂无实时日志",-1)])]),_:1}),c(T(S),{depth:"3",style:{"font-size":"11px","margin-top":"4px"}},{default:h(()=>[a(v("omp"===_.channelType?"ctx 将持续读取 OMP 原生会话日志":"开启代理后将显示请求记录"),1)]),_:1})])):e("",!0),(r(!0),w(y,null,t(nl.value,e=>(r(),w("div",{key:e.id,class:m(["log-row",{"action-row":"action"===e.type,"error-row":"error"===e.status,"new-log":e.isNew}]),title:Tl(e)},["action"===e.type?(r(),w("div",ra,[c(T(C),{size:12,color:"#18a058"},{default:h(()=>[c(T(X))]),_:1}),$("span",ua,v(e.message),1),$("span",da,v(e.time),1)])):"error"===e.status?(r(),w("div",va,[c(T(C),{size:12,color:"#d03050"},{default:h(()=>[c(T(Y))]),_:1}),$("span",pa,v(e.channel)+": "+v(e.error||e.message||"请求失败"),1),$("span",ha,v(e.time),1)])):(r(),w(y,{key:2},[$("div",{class:m(["log-col col-channel",`col-channel-${Ea.value}`])},[c(T(E),{size:"tiny",type:"success"},{default:h(()=>[a(v(e.channel),1)]),_:2},1024)],2),$("div",{class:m(["log-col col-token",`col-token-${Ea.value}`])},v(yl(e,"input")),3),$("div",{class:m(["log-col col-token",`col-token-${Ea.value}`])},v(yl(e,"output")),3),"claude"===_.channelType?(r(),w(y,{key:0},[$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"cacheCreation")),3),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"cacheRead")),3)],64)):"dsh"===_.channelType?(r(),w(y,{key:1},[$("div",{class:m(["log-col col-token",`col-token-${Ea.value}`])},v(yl(e,"cached")),3),$("div",{class:m(["log-col col-token",`col-token-${Ea.value}`])},v(yl(e,"total")),3)],64)):"codex"===_.channelType?(r(),w(y,{key:2},[$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"reasoning")),3),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"cached")),3),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"total")),3)],64)):"gemini"===_.channelType?(r(),w(y,{key:3},[$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"cached")),3),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"total")),3)],64)):"opencode"===_.channelType||"omp"===_.channelType?(r(),w(y,{key:4},[$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"reasoning")),3),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"cached")),3),$("div",{class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"total")),3)],64)):(r(),w("div",{key:5,class:m(["log-col col-token",`col-token-${_.channelType}`])},v(yl(e,"total")),3)),$("div",{class:m(["log-col col-time",`col-time-${Ea.value}`])},v(e.time),3)],64))],10,ia))),128))],512)])])])):e("",!0)])),Za.value?(r(),w("div",{key:1,class:m(["locked-overlay",`locked-${_.channelType}`])},[$("div",ya,[$("div",ga,[c(T(C),{size:48},{default:h(()=>[c(T(U))]),_:1})]),s[27]||(s[27]=$("h3",{class:"locked-title"},"该渠道已锁定",-1)),c(T(S),{depth:"3",class:"locked-hint"},{default:h(()=>[...s[26]||(s[26]=[a(" 点击上方按钮解锁以查看内容 ",-1)])]),_:1})])],2)):e("",!0),gl("sessions")?(r(),o(ne,{key:2,visible:Ga.value,"onUpdate:visible":s[1]||(s[1]=e=>Ga.value=e),channel:_.channelType},null,8,["visible","channel"])):e("",!0)]);var d,p}}},[["__scopeId","data-v-ef16bc6c"]]),ka={class:"dashboard-container"},Ta=z({__name:"Home",setup(e){const{uiConfig:a,updateConfig:s,loadUIConfig:n}=le(),t=se(),{enabledKeys:u}=q({platformStore:t,configRef:a}),d=b([]);function v(e=u.value){d.value=e.map(e=>({type:e}))}async function p(){const e=d.value.map(e=>e.type);v(e),await s("enabledCliPlatforms",e)}function y(e){const l=e?.detail?.enabledCliPlatforms;Array.isArray(l)&&(a.value={...a.value,enabledCliPlatforms:[...l]}),v()}return i(async()=>{window.addEventListener("enabled-cli-platforms-change",y),await Promise.all([n(),t.load()]),v()}),l(()=>{window.removeEventListener("enabled-cli-platforms-change",y)}),(e,a)=>(r(),w("div",ka,[c(T(_),{modelValue:d.value,"onUpdate:modelValue":a[0]||(a[0]=e=>d.value=e),class:"dashboard-grid","item-key":"type",animation:200,handle:".drag-handle",onEnd:p},{item:h(({element:e})=>[(r(),o(fa,{"channel-type":e.type,key:e.type},null,8,["channel-type"]))]),_:1},8,["modelValue"])]))}},[["__scopeId","data-v-5858e14d"]]);export{Ta as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{I as e,O as a,W as t,Z as l,_t as s,b as i,et as n,gt as o,ht as r,mt as d,p as u,st as p,w as c,x as m}from"./vue-vendor-Cr_NLmXY.js";import{st as g}from"./index-BXWpib7P.js";import{i as h,t as f}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{nt as v}from"./icons-C6KNTFqo.js";import{n as y}from"./markdown-xLK9ekFg.js";import{a as w,c as k,i as b,n as x,o as j,r as _,s as E,t as M}from"./xml-B78loRzO.js";var V={key:0,class:"editor-container"},H=["innerHTML"],L={key:1,class:"placeholder-text"},B={class:"preview-hint"},I=f({__name:"MarkdownEditor",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:"输入内容,支持 Markdown 格式..."},rows:{type:Number,default:10},minHeight:{type:Number,default:150},disabled:{type:Boolean,default:!1},defaultEditing:{type:Boolean,default:!1}},emits:["update:modelValue","edit","blur"],setup(f,{expose:I,emit:T}){const N=f,S=T,q=p(N.defaultEditing),z=p(null);function D(e,a){k.getLanguage(e)||k.registerLanguage(e,a)}D("javascript",E),D("typescript",j),D("json",w),D("bash",b),D("shell",b),D("sh",b),D("python",_),D("css",x),D("xml",M),D("html",M);const K=new y({html:!0,linkify:!0,typographer:!0,highlight:function(e,a){if(a&&k.getLanguage(a))try{return'<pre class="hljs"><code>'+k.highlight(e,{language:a,ignoreIllegals:!0}).value+"</code></pre>"}catch(t){}return'<pre class="hljs"><code>'+K.utils.escapeHtml(e)+"</code></pre>"}}),O=i(()=>K.render(N.modelValue||""));function R(){N.disabled||(q.value=!0,S("edit"),e(()=>{z.value?.focus()}))}function U(){q.value=!1,S("blur")}function W(){setTimeout(()=>{U()},150)}function Z(){U()}return l(()=>N.defaultEditing,e=>{e&&!q.value&&R()}),I({enterEditMode:R,exitEditMode:U,isEditing:q}),(e,l)=>(t(),c("div",{class:r(["markdown-editor",{"is-editing":q.value,"is-empty":!f.modelValue}])},[q.value?(t(),c("div",V,[a(d(g),{ref_key:"inputRef",ref:z,value:f.modelValue,type:"textarea",rows:f.rows,placeholder:f.placeholder,disabled:f.disabled,"onUpdate:value":l[0]||(l[0]=a=>e.$emit("update:modelValue",a)),onBlur:W,onKeydown:u(Z,["esc"])},null,8,["value","rows","placeholder","disabled"]),l[1]||(l[1]=m("div",{class:"editor-hint"},[m("span",null,"按 Esc 退出编辑 | 支持 Markdown 格式")],-1))])):(t(),c("div",{key:1,class:"preview-container",style:o({minHeight:f.minHeight+"px"}),onDblclick:R},[f.modelValue?(t(),c("div",{key:0,class:"markdown-content",innerHTML:O.value},null,8,H)):(t(),c("div",L,s(f.placeholder||"双击编辑..."),1)),m("div",B,[a(d(h),{size:"12"},{default:n(()=>[a(d(v))]),_:1}),l[2]||(l[2]=m("span",null,"双击编辑",-1))])],36))],2))}},[["__scopeId","data-v-224a81d1"]]);export{I as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,D as a,J as t,K as s,O as l,S as r,W as n,Z as i,_t as o,at as u,b as c,et as d,g as v,ht as p,m as f,mt as m,st as y,w as h,x as g}from"./vue-vendor-Cr_NLmXY.js";import{n as k,t as b}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as w}from"./DrawerContent-BYlV968f.js";import{i as _,s as C,t as j}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{Et as x,J as $,M as D,O as S,Y as O,j as z,k as M,rt as U,st as P,ut as J}from"./index-BXWpib7P.js";import{l as N}from"./light-DeIjG9s_.js";import{$ as A,E,Q as R,Y as q,a as L,b as T,nt as B,r as W,rt as Y,st as F}from"./icons-C6KNTFqo.js";import{a as I,c as K,i as Q,l as Z,n as G,o as H,r as V,s as X,t as ee}from"./McpFormDrawer-Djt5CJyE.js";import{t as ae}from"./clipboard-B46yyoz_.js";import{o as te}from"./client-B31QOzWk.js";function se(e,a,t="操作失败",s=""){const l=function(e,a="操作失败"){return String(function(e){return e?"string"==typeof e?e:e.message||e.error||e.result?.message||e.result?.error||e.response?.data?.message||e.response?.data?.error||e.response?.data?.result?.message||e.response?.data?.result?.error||e.data?.message||e.data?.error||"":""}(e)||"").trim()||a}(a,t),r=function(e){return e?.hint||e?.data?.hint||e?.result?.hint||e?.result?.data?.hint||e?.response?.data?.hint||e?.response?.data?.result?.hint||e?.response?.data?.result?.data?.hint||null}(a),n=l.split(/\r?\n/).map(e=>e.trim()).filter(Boolean),i=[r?.title,...Array.isArray(r?.details)?r.details:[]].map(e=>String(e||"").trim()).filter(Boolean).filter(e=>!n.includes(e)),o=[...n,...i],u=o[0]||t,c=o.slice(1),d=s?`${s}${u}`:u;return e.error(d,{duration:c.length>0?8e3:5e3}),c.length>0&&e.warning(c.join("\n"),{duration:12e3,closable:!0}),l}var le={class:"drawer-header"},re={class:"header-title"},ne={class:"header-actions"},ie={class:"mcp-container"},oe={class:"stats-bar"},ue={class:"stats-text"},ce={class:"server-list"},de={key:0,class:"empty-state"},ve=["onClick","onDragstart","onDragover","onDrop"],pe={class:"card-header"},fe={class:"card-title"},me={class:"server-name"},ye={class:"card-actions"},he={key:0,class:"card-desc"},ge={key:1,class:"card-tags"},ke={class:"card-apps"},be={class:"app-label"},we={class:"paste-modal-content"},_e={key:0,class:"parse-error"},Ce={class:"paste-modal-footer"},je={class:"batch-modal-content"},xe={class:"batch-actions"},$e={class:"batch-selected"},De={class:"batch-list"},Se={class:"batch-item-info"},Oe={class:"batch-item-header"},ze={class:"batch-item-name"},Me={class:"batch-item-detail"},Ue={key:0},Pe={key:1,class:"batch-args"},Je={class:"batch-modal-footer"},Ne={class:"export-modal-content"},Ae={class:"export-info"},Ee={class:"export-modal-footer"},Re=j({__name:"McpDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(j,{emit:Re}){const{drawerWidth:qe}=b(720),Le=j,Te=Re,Be=c({get:()=>Le.visible,set:e=>Te("update:visible",e)}),We=y(!1),Ye=y({}),Fe=y(!1),Ie=y(null),Ke=u({}),Qe=y(null),Ze=y(null),Ge=y(!1),He=y(""),Ve=y(""),Xe=y(!1),ea=y(!1),aa=y([]),ta=y([]),sa=y(!1),la=y(!1),ra=y({format:"",content:"",filename:""}),na=y(!1),ia=y(null),oa=c(()=>Object.values(Ye.value).sort((e,a)=>void 0!==e.order&&void 0!==a.order?e.order-a.order:void 0!==e.order?-1:void 0!==a.order?1:(a.updatedAt||0)-(e.updatedAt||0))),ua=c(()=>oa.value.length),ca=c(()=>Object.keys(Ye.value)),{byCapability:da}=x(),va=c(()=>da("mcp")),pa=c(()=>{const e=oa.value;return Object.fromEntries(va.value.map(a=>[a.key,e.filter(e=>!0===e.apps?.[a.key]).length]))}),fa=c({get:()=>{const e=aa.value.filter(e=>!ka(e.id)).map(e=>e.id);return e.length>0&&e.every(e=>ta.value.includes(e))},set:()=>{}}),ma=c(()=>va.value.map(e=>({label:`同步 ${e.label||e.title||e.key} 已有配置`,key:e.key}))),ya=c(()=>[{label:"导出为 JSON (通用)",key:"json"},...va.value.filter(e=>te(e.key)).map(e=>({label:`导出为 ${e.label||e.title||e.key} 格式`,key:e.key}))]);function ha(e){return"online"===e.status?`在线 - ${ga(e.lastChecked)}`:"error"===e.status?`异常 - ${ga(e.lastChecked)}`:"testing"===e.status?"测试中...":"未测试"}function ga(e){return e?new Date(e).toLocaleString("zh-CN",{hour:"2-digit",minute:"2-digit"}):""}function ka(e){return ca.value.includes(e)}async function ba(){We.value=!0;try{const e=await Q();e.success&&(Ye.value=e.servers)}catch(e){M.error("加载 MCP 服务器失败")}finally{We.value=!1}}async function wa(e){try{const a=await I(e);a.success&&(M.success(a.message),await ba())}catch(a){M.error("同步失败")}}async function _a(e){try{const a=await V(e);a.success&&(ra.value={format:a.format,content:a.content,filename:a.filename},la.value=!0)}catch(a){M.error("导出失败")}}async function Ca(){try{if("manual"===(await ae(ra.value.content))?.method)return void M.warning("自动复制失败,已弹出手动复制框");M.success("已复制到剪贴板")}catch{M.error("复制失败")}}function ja(){const e=new Blob([ra.value.content],{type:"text/plain"}),a=URL.createObjectURL(e),t=document.createElement("a");t.href=a,t.download=ra.value.filename,t.click(),URL.revokeObjectURL(a),M.success("下载成功")}function xa(){Qe.value=null}function $a(){Ie.value=null,Fe.value=!0}function Da(){ba()}function Sa(){Ve.value="",Xe.value=!0;try{let t,s=He.value.trim();if(!s)return Ve.value="请输入配置内容",void(Xe.value=!1);s.startsWith("{")||s.startsWith("[")||(s=s.replace(/^[\s,]+/,""),s=s.replace(/[\s,]+$/,""),s=`{${s}}`);try{t=JSON.parse(s)}catch(e){let l=s.replace(/\}\s*"/g,'}, "');try{t=JSON.parse(l)}catch(a){return Ve.value="JSON 格式错误:"+e.message,void(Xe.value=!1)}}const l=[];let r=null;if(t.mcpServers&&"object"==typeof t.mcpServers)r=t.mcpServers;else if(t.mcp_servers&&"object"==typeof t.mcp_servers)r=t.mcp_servers;else if(t.command||t.url)r={"new-server":t};else{if(!Object.keys(t).some(e=>{const a=t[e];return a&&"object"==typeof a&&(a.command||a.url||a.args)}))return Ve.value="未找到有效的 MCP 服务器配置,请检查 JSON 格式",void(Xe.value=!1);r=t}for(const[e,a]of Object.entries(r)){if(!a||"object"!=typeof a)continue;if(!a.command&&!a.url&&!a.args)continue;const t={id:e,name:e,apps:Object.fromEntries(va.value.map((e,a)=>[e.key,0===a])),server:{type:a.type||"stdio"}};a.command&&(t.server.command=a.command,a.args&&(t.server.args=Array.isArray(a.args)?a.args:[a.args]),a.env&&"object"==typeof a.env&&(t.server.env=a.env)),a.url&&(t.server.type=a.type||"streamable_http",t.server.url=a.url,a.headers&&"object"==typeof a.headers&&(t.server.headers=a.headers)),l.push(t)}if(0===l.length)return Ve.value="未找到有效的 MCP 服务器配置",void(Xe.value=!1);1!==l.length||ka(l[0].id)?(aa.value=l,ta.value=l.filter(e=>!ka(e.id)).map(e=>e.id),ea.value=!0,Ge.value=!1):(Ie.value=l[0],Fe.value=!0,Ge.value=!1,He.value="")}catch(t){Ve.value="解析失败:"+t.message}finally{Xe.value=!1}}function Oa(e){ta.value=e?aa.value.filter(e=>!ka(e.id)).map(e=>e.id):[]}async function za(){if(0===ta.value.length)return;sa.value=!0;let e=0,a=0;try{for(const s of ta.value){const l=aa.value.find(e=>e.id===s);if(l)try{await H(l),e++}catch(t){a++}}e>0?(M.success(`成功导入 ${e} 个服务器${a>0?`,${a} 个失败`:""}`),await ba()):M.error("导入失败"),ea.value=!1,He.value="",aa.value=[],ta.value=[]}catch(t){M.error("批量导入失败")}finally{sa.value=!1}}return i(()=>Le.visible,e=>{e&&ba()},{immediate:!0}),i(Ge,e=>{e||(Ve.value="")}),(i,u)=>{const c=t("McpServerDetailDrawer");return n(),h(v,null,[l(m(k),{show:Be.value,"onUpdate:show":u[2]||(u[2]=e=>Be.value=e),width:m(qe),placement:"right","show-mask":!0},{default:d(()=>[l(m(w),{title:"MCP 服务器管理",closable:"","native-scrollbar":!1},{header:d(()=>[g("div",le,[g("div",re,[l(m(_),{size:20,class:"header-icon"},{default:d(()=>[l(m(q))]),_:1}),u[13]||(u[13]=g("span",null,"MCP 服务器管理",-1))]),g("div",ne,[l(m($),{trigger:"click",options:ya.value,onSelect:_a},{default:d(()=>[l(m(C),{size:"small",quaternary:""},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(R))]),_:1})]),default:d(()=>[u[14]||(u[14]=a(" 导出 ",-1))]),_:1})]),_:1},8,["options"]),l(m(C),{size:"small",type:"primary",ghost:"",onClick:u[0]||(u[0]=e=>Ge.value=!0)},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(F))]),_:1})]),default:d(()=>[u[15]||(u[15]=a(" 粘贴解析 ",-1))]),_:1}),l(m(C),{size:"small",type:"primary",onClick:$a},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(A))]),_:1})]),default:d(()=>[u[16]||(u[16]=a(" 添加 ",-1))]),_:1})])])]),default:d(()=>[g("div",ie,[g("div",oe,[g("span",ue,[a(" 共 "+o(ua.value)+" 个服务器 ",1),(n(!0),h(v,null,s(va.value,e=>(n(),h(v,{key:e.key},[a(" · "+o(e.label||e.title||e.key)+": "+o(pa.value[e.key]||0),1)],64))),128))]),l(m($),{trigger:"click",options:ma.value,onSelect:wa},{default:d(()=>[l(m(C),{size:"tiny",quaternary:""},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(L))]),_:1})]),default:d(()=>[u[17]||(u[17]=a(" 同步 ",-1))]),_:1})]),_:1},8,["options"])]),g("div",ce,[l(m(D),{show:We.value},{default:d(()=>[0!==oa.value.length||We.value?(n(),h("div",{key:1,class:"server-cards",ref_key:"serverCardsRef",ref:Ze},[(n(!0),h(v,null,s(oa.value,(t,i)=>(n(),h("div",{key:t.id,class:p(["server-card",{dragging:Qe.value===i}]),draggable:"true",onClick:e=>function(e){ia.value=e,na.value=!0}(t),onDragstart:e=>function(e,a){Qe.value=a,e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",a)}(e,i),onDragend:xa,onDragover:e=>{return(a=e).preventDefault(),void(a.dataTransfer.dropEffect="move");var a},onDrop:e=>async function(e,a){e.preventDefault();const t=Qe.value;if(null===t||t===a)return void(Qe.value=null);const s=[...oa.value],[l]=s.splice(t,1);s.splice(a,0,l);const r=s.map(e=>e.id);try{await Z(r),await ba()}catch(n){M.error("排序保存失败")}Qe.value=null}(e,i)},[g("div",pe,[g("div",fe,[l(m(_),{class:"drag-handle",size:14},{default:d(()=>[l(m(T))]),_:1}),g("span",me,o(t.name||t.id),1),t.server?.type?(n(),r(m(J),{key:0,size:"tiny",bordered:!1,type:"info"},{default:d(()=>[a(o(t.server.type),1)]),_:2},1024)):e("",!0),t.status?(n(),r(m(O),{key:1},{trigger:d(()=>[g("span",{class:p(["status-dot",{online:"online"===t.status,error:"error"===t.status,testing:"testing"===t.status}])},null,2)]),default:d(()=>[a(" "+o(ha(t)),1)]),_:2},1024)):e("",!0)]),g("div",ye,[l(m(O),null,{trigger:d(()=>[l(m(C),{quaternary:"",size:"tiny",loading:Ke[t.id],onClick:f(e=>async function(e){Ke[e.id]=!0,Ye.value[e.id].status="testing";try{const a=await X(e.id);if(a.success){const t=a.result;Ye.value[e.id].status=t.success?"online":"error",Ye.value[e.id].lastChecked=Date.now(),t.success?M.success(`${e.name||e.id}: ${t.message} (${t.duration}ms)`):se(M,t,"测试失败",`${e.name||e.id}: `)}}catch(a){Ye.value[e.id].status="error",se(M,a,"测试失败",`${e.name||e.id}: `)}finally{Ke[e.id]=!1}}(t),["stop"])},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(E))]),_:1})]),_:1},8,["loading","onClick"])]),default:d(()=>[u[20]||(u[20]=a(" 测试连接 ",-1))]),_:2},1024),l(m(C),{quaternary:"",size:"tiny",onClick:f(e=>function(e){Ie.value=e,Fe.value=!0}(t),["stop"])},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(B))]),_:1})]),_:1},8,["onClick"]),l(m(C),{quaternary:"",size:"tiny",onClick:f(e=>function(e){S.warning({title:"删除确认",content:`确定要删除 MCP 服务器 "${e.name||e.id}" 吗?此操作将从所有平台配置中移除该服务器。`,positiveText:"删除",negativeText:"取消",onPositiveClick:async()=>{try{(await G(e.id)).success&&(delete Ye.value[e.id],M.success("删除成功"))}catch(a){M.error("删除失败")}}})}(t),["stop"])},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(W))]),_:1})]),_:1},8,["onClick"])])]),t.description?(n(),h("p",he,o(t.description),1)):e("",!0),t.tags?.length?(n(),h("div",ge,[(n(!0),h(v,null,s(t.tags.slice(0,3),e=>(n(),r(m(J),{key:e,size:"tiny",bordered:!1},{default:d(()=>[a(o(e),1)]),_:2},1024))),128))])):e("",!0),g("div",ke,[(n(!0),h(v,null,s(va.value,e=>(n(),h("label",{key:e.key,class:"app-toggle",onClick:u[1]||(u[1]=f(()=>{},["stop"]))},[l(m(z),{size:"small",value:!0===t.apps?.[e.key],"onUpdate:value":a=>async function(e,a,t){try{const s=await K(e,a,t);s.success&&(Ye.value[e]=s.server,M.success(`已${t?"启用":"禁用"} ${a}`))}catch(s){M.error("操作失败")}}(t.id,e.key,a)},null,8,["value","onUpdate:value"]),g("span",be,o(e.label||e.title||e.key),1)]))),128))])],42,ve))),128))],512)):(n(),h("div",de,[l(m(_),{size:48,class:"empty-icon"},{default:d(()=>[l(m(q))]),_:1}),u[18]||(u[18]=g("p",{class:"empty-title"},"暂无 MCP 服务器",-1)),u[19]||(u[19]=g("p",{class:"empty-desc"},'点击上方"添加"按钮添加 MCP 服务器,或"粘贴解析"快速导入',-1))]))]),_:1},8,["show"])])])]),_:1})]),_:1},8,["show","width"]),l(ee,{visible:Fe.value,"onUpdate:visible":u[3]||(u[3]=e=>Fe.value=e),"editing-server":Ie.value,"existing-ids":ca.value,platforms:va.value,onSaved:Da},null,8,["visible","editing-server","existing-ids","platforms"]),l(m(N),{show:Ge.value,"onUpdate:show":u[6]||(u[6]=e=>Ge.value=e),preset:"card",title:"粘贴 MCP 配置",style:{width:"600px","max-width":"90vw"}},{footer:d(()=>[g("div",Ce,[l(m(C),{onClick:u[5]||(u[5]=e=>Ge.value=!1)},{default:d(()=>[...u[23]||(u[23]=[a("取消",-1)])]),_:1}),l(m(C),{type:"primary",onClick:Sa,loading:Xe.value},{default:d(()=>[...u[24]||(u[24]=[a(" 解析配置 ",-1)])]),_:1},8,["loading"])])]),default:d(()=>[g("div",we,[u[21]||(u[21]=g("p",{class:"paste-hint"}," 粘贴 JSON 格式的 MCP 配置,支持单个或批量导入。格式示例: ",-1)),u[22]||(u[22]=g("pre",{class:"paste-example"},'{\n "mcpServers": {\n "服务器名称": {\n "type": "streamable_http",\n "url": "https://example.com/mcp"\n }\n }\n}',-1)),l(m(P),{value:He.value,"onUpdate:value":u[4]||(u[4]=e=>He.value=e),type:"textarea",placeholder:"在此粘贴 JSON 配置...",rows:8,status:Ve.value?"error":void 0},null,8,["value","status"]),Ve.value?(n(),h("p",_e,o(Ve.value),1)):e("",!0)])]),_:1},8,["show"]),l(m(N),{show:ea.value,"onUpdate:show":u[9]||(u[9]=e=>ea.value=e),preset:"card",title:"选择要导入的 MCP 服务器",style:{width:"650px","max-width":"90vw"}},{footer:d(()=>[g("div",Je,[l(m(C),{onClick:u[8]||(u[8]=e=>ea.value=!1)},{default:d(()=>[...u[26]||(u[26]=[a("取消",-1)])]),_:1}),l(m(C),{type:"primary",disabled:0===ta.value.length,loading:sa.value,onClick:za},{default:d(()=>[a(" 导入选中 ("+o(ta.value.length)+") ",1)]),_:1},8,["disabled","loading"])])]),default:d(()=>[g("div",je,[g("div",xe,[l(m(U),{checked:fa.value,"onUpdate:checked":[u[7]||(u[7]=e=>fa.value=e),Oa]},{default:d(()=>[a(" 全选 ("+o(aa.value.length)+") ",1)]),_:1},8,["checked"]),g("span",$e,"已选择 "+o(ta.value.length)+" 个",1)]),g("div",De,[(n(!0),h(v,null,s(aa.value,t=>(n(),h("div",{key:t.id,class:p(["batch-item",{selected:ta.value.includes(t.id),exists:ka(t.id)}])},[l(m(U),{checked:ta.value.includes(t.id),disabled:ka(t.id),"onUpdate:checked":e=>function(e,a){if(a)ta.value.includes(e)||ta.value.push(e);else{const a=ta.value.indexOf(e);a>-1&&ta.value.splice(a,1)}}(t.id,e)},null,8,["checked","disabled","onUpdate:checked"]),g("div",Se,[g("div",Oe,[g("span",ze,o(t.id),1),ka(t.id)?(n(),r(m(J),{key:0,size:"tiny",type:"warning"},{default:d(()=>[...u[25]||(u[25]=[a("已存在",-1)])]),_:1})):e("",!0),t.server?.type?(n(),r(m(J),{key:1,size:"tiny",bordered:!1,type:"info"},{default:d(()=>[a(o(t.server.type),1)]),_:2},1024)):e("",!0)]),g("div",Me,[t.server?.command?(n(),h("span",Ue,o(t.server.command),1)):e("",!0),t.server?.args?.length?(n(),h("span",Pe,o(t.server.args.slice(0,3).join(" "))+o(t.server.args.length>3?"...":""),1)):e("",!0)])])],2))),128))])])]),_:1},8,["show"]),l(m(N),{show:la.value,"onUpdate:show":u[11]||(u[11]=e=>la.value=e),preset:"card",title:"导出 MCP 配置",style:{width:"650px","max-width":"90vw"}},{footer:d(()=>[g("div",Ee,[l(m(C),{onClick:u[10]||(u[10]=e=>la.value=!1)},{default:d(()=>[...u[27]||(u[27]=[a("关闭",-1)])]),_:1}),l(m(C),{onClick:Ca},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(Y))]),_:1})]),default:d(()=>[u[28]||(u[28]=a(" 复制 ",-1))]),_:1}),l(m(C),{type:"primary",onClick:ja},{icon:d(()=>[l(m(_),null,{default:d(()=>[l(m(R))]),_:1})]),default:d(()=>[u[29]||(u[29]=a(" 下载 ",-1))]),_:1})])]),default:d(()=>[g("div",Ne,[g("div",Ae,[g("span",null,"格式: "+o(ra.value.format),1),g("span",null,"文件名: "+o(ra.value.filename),1)]),l(m(P),{value:ra.value.content,type:"textarea",readonly:"",rows:12,class:"export-content"},null,8,["value"])])]),_:1},8,["show"]),l(c,{visible:na.value,"onUpdate:visible":u[12]||(u[12]=e=>na.value=e),server:ia.value},null,8,["visible","server"])],64)}}},[["__scopeId","data-v-0b241016"]]);export{Re as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as a,D as t,G as l,K as r,M as s,N as n,O as i,S as o,W as u,Z as d,_t as c,at as p,b as v,dt as m,et as f,g as h,ht as g,mt as y,nt as b,st as k,ut as w,w as x,x as C}from"./vue-vendor-Cr_NLmXY.js";import{n as $,t as P}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as j}from"./DrawerContent-BYlV968f.js";import{I as U,L as I,N as _,P as S,Qt as O,St as R,Tt as A,Yt as D,bn as B,d as V,gn as z,gt as T,hn as F,ht as E,i as L,j as M,pt as q,rn as N,s as K,t as W,vn as G,xt as Z,yn as Y}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{Et as H,M as Q,U as X,X as J,Y as ee,Z as ae,_t as te,ht as le,j as re,k as se,st as ne}from"./index-BXWpib7P.js";import{n as ie,t as oe}from"./CollapseItem-DEV7PQ-o.js";import{$ as ue,At as de,Nt as ce,R as pe,h as ve,jt as me,q as fe,yt as he}from"./icons-C6KNTFqo.js";import{t as ge}from"./client-B31QOzWk.js";import{s as ye}from"./project-config-C16yaWHF.js";var be=e({name:"ArrowDown",render:()=>s("svg",{viewBox:"0 0 28 28",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},s("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},s("g",{"fill-rule":"nonzero"},s("path",{d:"M23.7916,15.2664 C24.0788,14.9679 24.0696,14.4931 23.7711,14.206 C23.4726,13.9188 22.9978,13.928 22.7106,14.2265 L14.7511,22.5007 L14.7511,3.74792 C14.7511,3.33371 14.4153,2.99792 14.0011,2.99792 C13.5869,2.99792 13.2511,3.33371 13.2511,3.74793 L13.2511,22.4998 L5.29259,14.2265 C5.00543,13.928 4.53064,13.9188 4.23213,14.206 C3.93361,14.4931 3.9244,14.9679 4.21157,15.2664 L13.2809,24.6944 C13.6743,25.1034 14.3289,25.1034 14.7223,24.6944 L23.7916,15.2664 Z"}))))}),ke=e({name:"ArrowUp",render:()=>s("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20"},s("g",{fill:"none"},s("path",{d:"M3.13 9.163a.5.5 0 1 0 .74.674L9.5 3.67V17.5a.5.5 0 0 0 1 0V3.672l5.63 6.165a.5.5 0 0 0 .738-.674l-6.315-6.916a.746.746 0 0 0-.632-.24a.746.746 0 0 0-.476.24L3.131 9.163z",fill:"currentColor"})))}),we="0!important",xe="-1px!important";function Ce(e){return Y(`${e}-type`,[F("& +",[z("button",{},[Y(`${e}-type`,[G("border",{borderLeftWidth:we}),G("state-border",{left:xe})])])])])}function $e(e){return Y(`${e}-type`,[F("& +",[z("button",[Y(`${e}-type`,[G("border",{borderTopWidth:we}),G("state-border",{top:xe})])])])])}var Pe=z("button-group","\n flex-wrap: nowrap;\n display: inline-flex;\n position: relative;\n",[B("vertical",{flexDirection:"row"},[B("rtl",[z("button",[F("&:first-child:not(:last-child)",`\n margin-right: ${we};\n border-top-right-radius: ${we};\n border-bottom-right-radius: ${we};\n `),F("&:last-child:not(:first-child)",`\n margin-left: ${we};\n border-top-left-radius: ${we};\n border-bottom-left-radius: ${we};\n `),F("&:not(:first-child):not(:last-child)",`\n margin-left: ${we};\n margin-right: ${we};\n border-radius: ${we};\n `),Ce("default"),Y("ghost",[Ce("primary"),Ce("info"),Ce("success"),Ce("warning"),Ce("error")])])])]),Y("vertical",{flexDirection:"column"},[z("button",[F("&:first-child:not(:last-child)",`\n margin-bottom: ${we};\n margin-left: ${we};\n margin-right: ${we};\n border-bottom-left-radius: ${we};\n border-bottom-right-radius: ${we};\n `),F("&:last-child:not(:first-child)",`\n margin-top: ${we};\n margin-left: ${we};\n margin-right: ${we};\n border-top-left-radius: ${we};\n border-top-right-radius: ${we};\n `),F("&:not(:first-child):not(:last-child)",`\n margin: ${we};\n border-radius: ${we};\n `),$e("default"),Y("ghost",[$e("primary"),$e("info"),$e("success"),$e("warning"),$e("error")])])])]),je=e({name:"ButtonGroup",props:{size:{type:String,default:void 0},vertical:Boolean},setup(e){const{mergedClsPrefixRef:a,mergedRtlRef:t}=T(e);return S("-button-group",Pe,a),l(V,e),{rtlEnabled:U("ButtonGroup",t,a),mergedClsPrefix:a}},render(){const{mergedClsPrefix:e}=this;return s("div",{class:[`${e}-button-group`,this.rtlEnabled&&`${e}-button-group--rtl`,this.vertical&&`${e}-button-group--vertical`],role:"group"},this.$slots)}}),Ue=D("n-dynamic-input"),Ie=e({name:"DynamicInputInputPreset",props:{clsPrefix:{type:String,required:!0},value:{type:String,default:""},disabled:Boolean,parentPath:String,path:String,onUpdateValue:{type:Function,required:!0}},setup(){const{mergedThemeRef:e,placeholderRef:a}=n(Ue);return{mergedTheme:e,placeholder:a}},render(){const{mergedTheme:e,placeholder:a,value:t,clsPrefix:l,onUpdateValue:r,disabled:n}=this;return s("div",{class:`${l}-dynamic-input-preset-input`},s(ne,{theme:e.peers.Input,"theme-overrides":e.peerOverrides.Input,value:t,placeholder:a,onUpdateValue:r,disabled:n}))}}),_e=e({name:"DynamicInputPairPreset",props:{clsPrefix:{type:String,required:!0},value:{type:Object,default:()=>({key:"",value:""})},disabled:Boolean,parentPath:String,path:String,onUpdateValue:{type:Function,required:!0}},setup(e){const{mergedThemeRef:a,keyPlaceholderRef:t,valuePlaceholderRef:l}=n(Ue);return{mergedTheme:a,keyPlaceholder:t,valuePlaceholder:l,handleKeyInput(a){e.onUpdateValue({key:a,value:e.value.value})},handleValueInput(a){e.onUpdateValue({key:e.value.key,value:a})}}},render(){const{mergedTheme:e,keyPlaceholder:a,valuePlaceholder:t,value:l,clsPrefix:r,disabled:n}=this;return s("div",{class:`${r}-dynamic-input-preset-pair`},s(ne,{theme:e.peers.Input,"theme-overrides":e.peerOverrides.Input,value:l.key,class:`${r}-dynamic-input-pair-input`,placeholder:a,onUpdateValue:this.handleKeyInput,disabled:n}),s(ne,{theme:e.peers.Input,"theme-overrides":e.peerOverrides.Input,value:l.value,class:`${r}-dynamic-input-pair-input`,placeholder:t,onUpdateValue:this.handleValueInput,disabled:n}))}}),Se=z("dynamic-input",{width:"100%"},[z("dynamic-input-item","\n margin-bottom: 10px;\n display: flex;\n flex-wrap: nowrap;\n ",[z("dynamic-input-preset-input",{flex:1,alignItems:"center"}),z("dynamic-input-preset-pair","\n flex: 1;\n display: flex;\n align-items: center;\n ",[z("dynamic-input-pair-input",[F("&:first-child",{"margin-right":"12px"})])]),G("action","\n align-self: flex-start;\n display: flex;\n justify-content: flex-end;\n flex-shrink: 0;\n flex-grow: 0;\n margin: var(--action-margin);\n ",[Y("icon",{cursor:"pointer"})]),F("&:last-child",{marginBottom:0})]),z("form-item","\n padding-top: 0 !important;\n margin-right: 0 !important;\n ",[z("form-item-blank",{paddingTop:"0 !important"})])]),Oe=new WeakMap,Re=e({name:"DynamicInput",props:Object.assign(Object.assign({},_.props),{max:Number,min:{type:Number,default:0},value:Array,defaultValue:{type:Array,default:()=>[]},preset:{type:String,default:"input"},keyField:String,itemClass:String,itemStyle:[String,Object],keyPlaceholder:{type:String,default:""},valuePlaceholder:{type:String,default:""},placeholder:{type:String,default:""},disabled:Boolean,showSortButton:Boolean,createButtonProps:Object,onCreate:Function,onRemove:Function,"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onClear:Function,onInput:[Function,Array]}),setup(e,{slots:a}){const{mergedComponentPropsRef:t,mergedClsPrefixRef:r,mergedRtlRef:s,inlineThemeDisabled:i}=T(),o=n(q,null),u=k(e.defaultValue),d=m(e,"value"),c=O(d,u),p=_("DynamicInput","-dynamic-input",Se,X,e,r),f=v(()=>{const{value:a}=c;if(Array.isArray(a)){const{max:t}=e;return void 0!==t&&a.length>=t}return!1}),h=v(()=>{const{value:a}=c;return!Array.isArray(a)||a.length<=e.min}),g=v(()=>{var e,a;return null===(a=null===(e=null==t?void 0:t.value)||void 0===e?void 0:e.DynamicInput)||void 0===a?void 0:a.buttonSize});function y(a){const{onInput:t,"onUpdate:value":l,onUpdateValue:r}=e;t&&A(t,a),l&&A(l,a),r&&A(r,a),u.value=a}function x(t){const{value:l}=c,{onCreate:r}=e,s=Array.from(null!=l?l:[]);if(r)s.splice(t+1,0,r(t+1)),y(s);else if(a.default)s.splice(t+1,0,null),y(s);else switch(e.preset){case"input":s.splice(t+1,0,""),y(s);break;case"pair":s.splice(t+1,0,{key:"",value:""}),y(s)}}function C(e,a,t){if(a<0||t<0||a>=e.length||t>=e.length)return;if(a===t)return;const l=e[a];e[a]=e[t],e[t]=l}l(Ue,{mergedThemeRef:p,keyPlaceholderRef:m(e,"keyPlaceholder"),valuePlaceholderRef:m(e,"valuePlaceholder"),placeholderRef:m(e,"placeholder")});const $=U("DynamicInput",s,r),P=v(()=>{const{self:{actionMargin:e,actionMarginRtl:a}}=p.value;return{"--action-margin":e,"--action-margin-rtl":a}}),j=i?E("dynamic-input",void 0,P,e):void 0;return{locale:I("DynamicInput").localeRef,rtlEnabled:$,buttonSize:g,mergedClsPrefix:r,NFormItem:o,uncontrolledValue:u,mergedValue:c,insertionDisabled:f,removeDisabled:h,handleCreateClick:function(){x(-1)},ensureKey:function(e,a){if(null==e)return a;if("object"!=typeof e)return a;const t=b(e)?w(e):e;let l=Oe.get(t);return void 0===l&&Oe.set(t,l=N()),l},handleValueChange:function(e,a){const{value:t}=c,l=Array.from(null!=t?t:[]),r=l[e];if(l[e]=a,r&&a&&"object"==typeof r&&"object"==typeof a){const e=b(r)?w(r):r,t=b(a)?w(a):a,l=Oe.get(e);void 0!==l&&Oe.set(t,l)}y(l)},remove:function(a){const{value:t}=c;if(!Array.isArray(t))return;const{min:l}=e;if(t.length<=l)return;const{onRemove:r}=e;r&&r(a);const s=Array.from(t);s.splice(a,1),y(s)},move:function(e,a){const{value:t}=c;if(!Array.isArray(t))return;const l=Array.from(t);"up"===e&&C(l,a,a-1),"down"===e&&C(l,a,a+1),y(l)},createItem:x,mergedTheme:p,cssVars:i?void 0:P,themeClass:null==j?void 0:j.themeClass,onRender:null==j?void 0:j.onRender}},render(){const{$slots:e,itemClass:a,buttonSize:t,mergedClsPrefix:l,mergedValue:r,locale:n,mergedTheme:i,keyField:o,itemStyle:u,preset:d,showSortButton:c,NFormItem:p,ensureKey:v,handleValueChange:m,remove:f,createItem:h,move:g,onRender:y,disabled:b}=this;return null==y||y(),s("div",{class:[`${l}-dynamic-input`,this.rtlEnabled&&`${l}-dynamic-input--rtl`,this.themeClass],style:this.cssVars},Array.isArray(r)&&0!==r.length?r.map((n,y)=>s("div",{key:o?n[o]:v(n,y),"data-key":o?n[o]:v(n,y),class:[`${l}-dynamic-input-item`,a],style:u},R(e.default,{value:r[y],index:y},()=>["input"===d?s(Ie,{disabled:b,clsPrefix:l,value:r[y],parentPath:p?p.path.value:void 0,path:(null==p?void 0:p.path.value)?`${p.path.value}[${y}]`:void 0,onUpdateValue:e=>{m(y,e)}}):"pair"===d?s(_e,{disabled:b,clsPrefix:l,value:r[y],parentPath:p?p.path.value:void 0,path:(null==p?void 0:p.path.value)?`${p.path.value}[${y}]`:void 0,onUpdateValue:e=>{m(y,e)}}):null]),R(e.action,{value:r[y],index:y,create:h,remove:f,move:g},()=>[s("div",{class:`${l}-dynamic-input-item__action`},s(je,{size:t},{default:()=>[s(K,{disabled:this.removeDisabled||b,theme:i.peers.Button,themeOverrides:i.peerOverrides.Button,circle:!0,onClick:()=>{f(y)}},{icon:()=>s(M,{clsPrefix:l},{default:()=>s(le,null)})}),s(K,{disabled:this.insertionDisabled||b,circle:!0,theme:i.peers.Button,themeOverrides:i.peerOverrides.Button,onClick:()=>{h(y)}},{icon:()=>s(M,{clsPrefix:l},{default:()=>s(te,null)})}),c?s(K,{disabled:0===y||b,circle:!0,theme:i.peers.Button,themeOverrides:i.peerOverrides.Button,onClick:()=>{g("up",y)}},{icon:()=>s(M,{clsPrefix:l},{default:()=>s(ke,null)})}):null,c?s(K,{disabled:y===r.length-1||b,circle:!0,theme:i.peers.Button,themeOverrides:i.peerOverrides.Button,onClick:()=>{g("down",y)}},{icon:()=>s(M,{clsPrefix:l},{default:()=>s(be,null)})}):null]}))]))):s(K,Object.assign({block:!0,ghost:!0,dashed:!0,size:t},this.createButtonProps,{disabled:this.insertionDisabled||b,theme:i.peers.Button,themeOverrides:i.peerOverrides.Button,onClick:this.handleCreateClick}),{default:()=>Z(e["create-button-default"],()=>[n.create]),icon:()=>Z(e["create-button-icon"],()=>[s(M,{clsPrefix:l},{default:()=>s(te,null)})])}))}});async function Ae(){return(await ge.get("/mcp/servers")).data}async function De(e){return(await ge.post("/mcp/servers",e)).data}async function Be(e){return(await ge.delete(`/mcp/servers/${e}`)).data}async function Ve(e,a,t){return(await ge.post(`/mcp/servers/${e}/toggle`,{app:a,enabled:t})).data}async function ze(e){return(await ge.post(`/mcp/import/${e}`)).data}async function Te(e){return(await ge.post(`/mcp/servers/${e}/test`)).data}async function Fe(e){return(await ge.post("/mcp/servers/order",{serverIds:e})).data}async function Ee(e="json"){return(await ge.get("/mcp/export",{params:{format:e}})).data}var Le={class:"drawer-header"},Me={class:"header-title"},qe={class:"drawer-footer"},Ne={class:"form-content"},Ke={key:0,class:"form-group"},We={class:"group-title"},Ge={class:"preset-grid"},Ze=["onClick"],Ye={class:"form-group"},He={class:"group-title"},Qe={class:"field"},Xe={key:0,class:"field-error"},Je={class:"field"},ea={key:1,class:"form-group"},aa={class:"group-title"},ta={class:"platform-toggles"},la={class:"platform-name"},ra={key:0,class:"platform-empty"},sa={class:"form-group"},na={class:"group-title"},ia={class:"field"},oa={class:"field"},ua={class:"field"},da={class:"field"},ca={class:"kv-row"},pa={class:"field"},va={class:"field"},ma={class:"kv-row"},fa={class:"collapse-header"},ha={class:"collapse-content"},ga={class:"field"},ya={class:"field"},ba={class:"field-row"},ka={class:"field"},wa={class:"field"},xa=W({__name:"McpFormDrawer",props:{visible:{type:Boolean,default:!1},editingServer:{type:Object,default:null},existingIds:{type:Array,default:()=>[]},platforms:{type:Array,default:()=>[]},platform:{type:String,default:"claude"},scope:{type:String,default:"user"},projectPath:{type:String,default:""}},emits:["update:visible","saved"],setup(e,{emit:l}){const{drawerWidth:s}=P(520),n=e,m=l,b=v({get:()=>n.visible,set:e=>m("update:visible",e)}),w=v(()=>!!n.editingServer),U=k([]),I=k(!1),_=k(-1),S=k(!1),{byCapability:O}=H(),R=v(()=>n.platforms.length>0?n.platforms:O("mcp"));function A(){return Object.fromEntries(R.value.map((e,a)=>[e.key,0===a]))}const D=p({id:"",name:"",description:"",homepage:"",docs:"",apps:{},server:{type:"stdio",command:"",args:[],env:{},url:"",headers:{}}}),B=k("stdio"),V=k([]),z=k([]),T=k(""),F=v(()=>D.id.trim()&&!w.value&&n.existingIds.includes(D.id.trim())?"该 ID 已存在":"");function E(e){return n.existingIds.includes(e)}async function M(){I.value=!0;try{const e=await async function(){return(await ge.get("/mcp/presets")).data}();e.success&&(U.value=e.presets)}catch(e){}finally{I.value=!1}}function q(){_.value=-1,N()}function N(){D.id="",D.name="",D.description="",D.homepage="",D.docs="",D.apps=A(),D.server={type:"stdio",command:"",args:[],env:{},url:"",headers:{}},B.value="stdio",V.value=[],z.value=[],T.value=""}async function W(){if(!D.id.trim())return void se.error("请输入服务器 ID");if(F.value)return void se.error(F.value);if("stdio"===B.value&&!D.server.command?.trim())return void se.error("请输入命令");if(("streamable_http"===B.value||"sse"===B.value)&&!D.server.url?.trim())return void se.error("请输入 URL");const e={type:B.value};if("stdio"===B.value){e.command=D.server.command,D.server.args?.length&&(e.args=D.server.args.filter(e=>e.trim()));const a={};V.value.forEach(e=>{const t=e.key.trim();t&&"[REDACTED]"!==e.value&&(a[t]=e.value)}),Object.keys(a).length>0&&(e.env=a)}else{e.url=D.server.url;const a={};z.value.forEach(e=>{const t=e.key.trim();t&&"[REDACTED]"!==e.value&&(a[t]=e.value)}),Object.keys(a).length>0&&(e.headers=a)}const a={id:D.id.trim(),name:D.name.trim()||D.id.trim(),server:e,apps:w.value?{...D.apps}:Object.fromEntries(R.value.map(e=>[e.key,!0===D.apps[e.key]]))};D.description.trim()&&(a.description=D.description.trim()),D.homepage.trim()&&(a.homepage=D.homepage.trim()),D.docs.trim()&&(a.docs=D.docs.trim()),T.value.trim()&&(a.tags=T.value.split(",").map(e=>e.trim()).filter(e=>e)),S.value=!0;try{("project"===n.scope?await ye(n.projectPath,n.platform,a.id,a.server):await De(a)).success&&(se.success(w.value?"保存成功":"添加成功"),m("saved"),b.value=!1)}catch(t){se.error(t.response?.data?.error||"保存失败")}finally{S.value=!1}}return d(()=>n.visible,e=>{e&&(M(),n.editingServer?function(){const e=n.editingServer;e&&(D.id=e.id,D.name=e.name||"",D.description=e.description||"",D.homepage=e.homepage||"",D.docs=e.docs||"",D.apps=e.apps?{...e.apps}:A(),T.value=(e.tags||[]).join(", "),e.server&&(B.value=e.server.type||"stdio",D.server={...e.server},D.server.type=B.value,e.server.env&&"object"==typeof e.server.env?V.value=Object.entries(e.server.env).map(([e,a])=>({key:e,value:a})):V.value=[],e.server.headers&&"object"==typeof e.server.headers?z.value=Object.entries(e.server.headers).map(([e,a])=>({key:e,value:a})):z.value=[]))}():(N(),_.value=-1))}),d(B,e=>{D.server.type=e}),(l,d)=>(u(),o(y($),{show:b.value,"onUpdate:show":d[14]||(d[14]=e=>b.value=e),width:y(s),placement:"right","show-mask":!0},{default:f(()=>[i(y(j),{closable:"","native-scrollbar":!1},{header:f(()=>[C("div",Le,[i(y(K),{quaternary:"",size:"small",onClick:d[0]||(d[0]=e=>b.value=!1)},{icon:f(()=>[i(y(L),null,{default:f(()=>[i(y(de))]),_:1})]),_:1}),C("span",Me,c(w.value?"编辑 MCP 服务器":"添加 MCP 服务器"),1)])]),footer:f(()=>[C("div",qe,[i(y(K),{onClick:d[1]||(d[1]=e=>b.value=!1)},{default:f(()=>[...d[15]||(d[15]=[t("取消",-1)])]),_:1}),i(y(K),{type:"primary",loading:S.value,onClick:W},{default:f(()=>[t(c(w.value?"保存":"添加"),1)]),_:1},8,["loading"])])]),default:f(()=>[i(y(Q),{show:I.value},{default:f(()=>[C("div",Ne,[w.value?a("",!0):(u(),x("div",Ke,[C("div",We,[i(y(L),{size:16,class:"group-icon"},{default:f(()=>[i(y(fe))]),_:1}),d[16]||(d[16]=C("span",null,"快速选择",-1))]),C("div",Ge,[C("div",{class:g(["preset-chip",{active:-1===_.value}]),onClick:q},[i(y(L),{size:14},{default:f(()=>[i(y(ce))]),_:1}),d[17]||(d[17]=C("span",null,"自定义",-1))],2),(u(!0),x(h,null,r(U.value,(e,l)=>(u(),o(y(ee),{key:e.id,disabled:!E(e.id)},{trigger:f(()=>[C("div",{class:g(["preset-chip",{active:_.value===l,disabled:E(e.id)}]),onClick:a=>!E(e.id)&&function(e){_.value=e;const a=U.value[e];if(!a)return;let t=a.id,l=1;for(;n.existingIds.includes(t);)t=`${a.id}-${l}`,l++;D.id=t,D.name=a.name||a.id,D.description=a.description||"",D.homepage=a.homepage||"",D.docs=a.docs||"",T.value=(a.tags||[]).join(", "),a.server&&(B.value=a.server.type||"stdio",D.server={...a.server},D.server.type=B.value,a.server.env?V.value=Object.entries(a.server.env).map(([e,a])=>({key:e,value:a})):V.value=[],a.server.headers?z.value=Object.entries(a.server.headers).map(([e,a])=>({key:e,value:a})):z.value=[])}(l)},[t(c(e.id)+" ",1),E(e.id)?(u(),o(y(L),{key:0,size:12,class:"installed-icon"},{default:f(()=>[i(y(he))]),_:1})):a("",!0)],10,Ze)]),default:f(()=>[d[18]||(d[18]=t(" 已安装 ",-1))]),_:2},1032,["disabled"]))),128))])])),C("div",Ye,[C("div",He,[i(y(L),{size:16,class:"group-icon"},{default:f(()=>[i(y(pe))]),_:1}),d[19]||(d[19]=C("span",null,"基本信息",-1))]),C("div",Qe,[d[20]||(d[20]=C("label",{class:"field-label"},[t(" ID "),C("span",{class:"required"},"*")],-1)),i(y(ne),{value:D.id,"onUpdate:value":d[2]||(d[2]=e=>D.id=e),placeholder:"服务器唯一标识,如 fetch、memory",disabled:w.value,status:F.value?"error":void 0},null,8,["value","disabled","status"]),F.value?(u(),x("span",Xe,c(F.value),1)):a("",!0)]),C("div",Je,[d[21]||(d[21]=C("label",{class:"field-label"},"显示名称",-1)),i(y(ne),{value:D.name,"onUpdate:value":d[3]||(d[3]=e=>D.name=e),placeholder:"可选,用于展示的名称"},null,8,["value"])])]),"project"!==e.scope?(u(),x("div",ea,[C("div",aa,[i(y(L),{size:16,class:"group-icon"},{default:f(()=>[i(y(me))]),_:1}),d[22]||(d[22]=C("span",null,"启用平台",-1))]),C("div",ta,[(u(!0),x(h,null,r(R.value,e=>(u(),x("label",{key:e.key,class:"platform-item"},[i(y(re),{size:"small",value:D.apps[e.key],"onUpdate:value":a=>D.apps[e.key]=a},null,8,["value","onUpdate:value"]),C("span",la,c(e.label||e.title||e.key),1)]))),128)),0===R.value.length?(u(),x("span",ra," 当前没有可用的 MCP 平台 ")):a("",!0)])])):a("",!0),C("div",sa,[C("div",na,[i(y(L),{size:16,class:"group-icon"},{default:f(()=>[i(y(ve))]),_:1}),d[23]||(d[23]=C("span",null,"服务器配置",-1))]),C("div",ia,[d[27]||(d[27]=C("label",{class:"field-label"},"类型",-1)),i(y(J),{value:B.value,"onUpdate:value":d[4]||(d[4]=e=>B.value=e),class:"type-radios"},{default:f(()=>[i(y(ae),{value:"stdio"},{default:f(()=>[...d[24]||(d[24]=[C("span",{class:"radio-label"},"stdio",-1),C("span",{class:"radio-desc"},"本地命令",-1)])]),_:1}),i(y(ae),{value:"streamable_http"},{default:f(()=>[...d[25]||(d[25]=[C("span",{class:"radio-label"},"streamable_http",-1)])]),_:1}),i(y(ae),{value:"sse"},{default:f(()=>[...d[26]||(d[26]=[C("span",{class:"radio-label"},"sse",-1)])]),_:1})]),_:1},8,["value"])]),"stdio"===B.value?(u(),x(h,{key:0},[C("div",oa,[d[28]||(d[28]=C("label",{class:"field-label"},[t(" 命令 "),C("span",{class:"required"},"*")],-1)),i(y(ne),{value:D.server.command,"onUpdate:value":d[5]||(d[5]=e=>D.server.command=e),placeholder:"如 npx、uvx、node"},null,8,["value"])]),C("div",ua,[d[29]||(d[29]=C("label",{class:"field-label"},"参数",-1)),i(y(Re),{value:D.server.args,"onUpdate:value":d[6]||(d[6]=e=>D.server.args=e),placeholder:"点击添加参数",min:0},null,8,["value"])]),C("div",da,[d[31]||(d[31]=C("label",{class:"field-label"},"环境变量",-1)),i(y(Re),{value:V.value,"onUpdate:value":d[7]||(d[7]=e=>V.value=e),"on-create":()=>({key:"",value:""}),min:0},{default:f(({value:e})=>[C("div",ca,[i(y(ne),{value:e.key,"onUpdate:value":a=>e.key=a,placeholder:"变量名",class:"kv-key"},null,8,["value","onUpdate:value"]),d[30]||(d[30]=C("span",{class:"kv-sep"},"=",-1)),i(y(ne),{value:e.value,"onUpdate:value":a=>e.value=a,placeholder:"值",class:"kv-value"},null,8,["value","onUpdate:value"])])]),_:1},8,["value"])])],64)):(u(),x(h,{key:1},[C("div",pa,[d[32]||(d[32]=C("label",{class:"field-label"},[t(" URL "),C("span",{class:"required"},"*")],-1)),i(y(ne),{value:D.server.url,"onUpdate:value":d[8]||(d[8]=e=>D.server.url=e),placeholder:"http://localhost:3000/mcp"},null,8,["value"])]),C("div",va,[d[34]||(d[34]=C("label",{class:"field-label"},"请求头",-1)),i(y(Re),{value:z.value,"onUpdate:value":d[9]||(d[9]=e=>z.value=e),"on-create":()=>({key:"",value:""}),min:0},{default:f(({value:e})=>[C("div",ma,[i(y(ne),{value:e.key,"onUpdate:value":a=>e.key=a,placeholder:"Header 名",class:"kv-key"},null,8,["value","onUpdate:value"]),d[33]||(d[33]=C("span",{class:"kv-sep"},":",-1)),i(y(ne),{value:e.value,"onUpdate:value":a=>e.value=a,placeholder:"值",class:"kv-value"},null,8,["value","onUpdate:value"])])]),_:1},8,["value"])])],64))]),i(y(ie),{class:"extra-collapse"},{default:f(()=>[i(y(oe),{name:"extra"},{header:f(()=>[C("div",fa,[i(y(L),{size:16,class:"group-icon"},{default:f(()=>[i(y(ue))]),_:1}),d[35]||(d[35]=C("span",null,"附加信息",-1)),d[36]||(d[36]=C("span",{class:"collapse-hint"},"(可选)",-1))])]),default:f(()=>[C("div",ha,[C("div",ga,[d[37]||(d[37]=C("label",{class:"field-label"},"描述",-1)),i(y(ne),{value:D.description,"onUpdate:value":d[10]||(d[10]=e=>D.description=e),type:"textarea",placeholder:"服务器功能描述",rows:2},null,8,["value"])]),C("div",ya,[d[38]||(d[38]=C("label",{class:"field-label"},"标签",-1)),i(y(ne),{value:T.value,"onUpdate:value":d[11]||(d[11]=e=>T.value=e),placeholder:"用逗号分隔,如 http, web, fetch"},null,8,["value"])]),C("div",ba,[C("div",ka,[d[39]||(d[39]=C("label",{class:"field-label"},"主页",-1)),i(y(ne),{value:D.homepage,"onUpdate:value":d[12]||(d[12]=e=>D.homepage=e),placeholder:"https://github.com/..."},null,8,["value"])]),C("div",wa,[d[40]||(d[40]=C("label",{class:"field-label"},"文档",-1)),i(y(ne),{value:D.docs,"onUpdate:value":d[13]||(d[13]=e=>D.docs=e),placeholder:"https://..."},null,8,["value"])])])])]),_:1})]),_:1})])]),_:1},8,["show"])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-f2623980"]]);export{ze as a,Ve as c,Ae as i,Fe as l,Be as n,De as o,Ee as r,Te as s,xa as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{O as a,W as e,et as r,mt as s,w as t}from"./vue-vendor-Cr_NLmXY.js";import{O as i}from"./light-DeIjG9s_.js";import{t as o}from"./PluginsPanel-mqXBlKZg.js";import{t as l}from"./_plugin-vue_export-helper-DyHLuIR4.js";var d={class:"plugin-manager"},m=l({__name:"PluginManager",setup:l=>(l,m)=>(e(),t("div",d,[a(s(i),{title:"Plugins 插件管理",bordered:!1},{default:r(()=>[a(o,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-6d92033b"]]);export{m as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{O as e,S as a,W as t,b as r,et as s,mt as l,x as o}from"./vue-vendor-Cr_NLmXY.js";import{n as i,t as p}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as d}from"./DrawerContent-BYlV968f.js";import{t as n}from"./PluginsPanel-mqXBlKZg.js";import{t as u}from"./_plugin-vue_export-helper-DyHLuIR4.js";var m=u({__name:"PluginsDrawer",props:{visible:Boolean,platform:{type:String,default:""},projectPath:{type:String,default:""}},emits:["update:visible"],setup(u,{emit:m}){const v=u,f=m,{drawerWidth:c}=p(720),h=r({get:()=>v.visible,set:e=>f("update:visible",e)}),w={padding:0,display:"flex",flexDirection:"column",overflow:"hidden"};return(r,p)=>(t(),a(l(i),{show:h.value,"onUpdate:show":p[1]||(p[1]=e=>h.value=e),width:l(c),placement:"right","mask-closable":!0},{default:s(()=>[e(l(d),{closable:"","native-scrollbar":!1,"body-content-style":w},{header:s(()=>[...p[2]||(p[2]=[o("div",{class:"drawer-header"},[o("span",null,"插件管理")],-1)])]),default:s(()=>[e(n,{onBack:p[0]||(p[0]=e=>h.value=!1),"hide-back":!0,"in-drawer":!0,"drawer-visible":h.value,platform:v.platform,"project-path":v.projectPath},null,8,["drawer-visible","platform","project-path"])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-f34c728b"]]);export{m as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,D as a,K as l,O as t,S as s,V as n,W as i,Z as r,_t as o,b as u,et as c,g as p,ht as d,m as v,mt as m,p as f,r as y,st as g,w as h,x as k}from"./vue-vendor-Cr_NLmXY.js";import{i as b,s as w,t as P}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{$ as _,Et as j,M as U,T as $,ct as C,ft as I,j as T,k as z,st as L,ut as S,w as x}from"./index-BXWpib7P.js";import{t as O}from"./use-message-BYx0IRj1.js";import{$ as R,At as B,F as H,Nt as A,O as G,R as M,S as D,U as K,Y as N,a as q,g as E,ut as V}from"./icons-C6KNTFqo.js";import{a as F,t as Q}from"./client-B31QOzWk.js";import{r as W}from"./dsh-agent-presets-DopJnuAZ.js";import{c as Y,n as Z,s as J,t as X}from"./AssetPathField-CoIuoSZr.js";import{l as ee}from"./light-DeIjG9s_.js";import{n as ae,t as le}from"./skill-repo-input-B_fkGlUK.js";import{n as te,t as se}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as ne}from"./DrawerContent-BYlV968f.js";import{t as ie}from"./markdown-xLK9ekFg.js";import{c as re,i as oe,r as ue,t as ce}from"./platforms-BdTllxKt.js";var pe=new Map;function de(e,a,l={}){return x(e,a,l.scope||"",l.cwd||"")}function ve(e=""){for(const a of pe.keys())e&&!a.includes(`:${e}:`)||pe.delete(a)}function me(e={},a={}){return{...e,...a.cwd?{cwd:a.cwd}:{},...a.scope?{scope:a.scope}:{}}}async function fe(e="claude",a={}){const l=de("plugins",e,a);if(pe.has(l))return pe.get(l);const t=$(l,t=>Q.get("/plugins",{params:me({platform:e},a),signal:t}).then(e=>e.data).catch(e=>{throw pe.delete(l),e}),"plugins",`plugins:${e}`);return pe.set(l,t),t}async function ye(e="claude",a=!1,l={}){const t=de("plugins-market",e,l);if(pe.has(t))return pe.get(t);const s=$(t,a=>Q.get("/plugins/market",{params:me({platform:e},l),signal:a}).then(e=>e.data).catch(e=>{throw pe.delete(t),e}),"plugins-market",`plugins-market:${e}`);return pe.set(t,s),s}async function ge(e="claude",a={}){return ve(e),(await Q.post("/plugins/refresh",me({platform:e},a))).data}async function he(e,a={}){return(await Q.get(`/plugins/refresh/${encodeURIComponent(e)}`,{params:me({platform:a.platform||"claude"},a)})).data}function ke(e=""){ve(e)}async function be(e,a){const l=F("dsh"),t=await Q.post(`${l}/profiles/${encodeURIComponent(e)}/plugins/install`,{spec:a});return{success:!0,...t.data?.data||t.data||{}}}async function we(e,a,l="claude",t="",s={},n={}){const i=me({platform:l},s);return t?(i.source=t,Object.assign(i,{pluginId:n.pluginId||t,name:n.name,pluginKind:n.pluginKind,marketplace:n.marketplace,installSource:n.installSource,version:n.version,description:n.description,resourceTypes:n.resourceTypes})):(i.directory=e,i.repo=a),(await Q.post("/plugins/install",i)).data}async function Pe(e,a="claude",l={}){return(await Q.post("/plugins/repos",me({...e,platform:a},l))).data}async function _e(e,a={},l="claude"){return(await Q.put("/plugins/repos/auth",{id:e.id||"",owner:e.owner||"",name:e.name||"",token:a.token||"",clearToken:!!a.clearToken,platform:l})).data}var je={class:"asset-card-main"},Ue={class:"asset-card-top"},$e={class:"asset-card-title-stack"},Ce={class:"asset-card-title-row"},Ie={class:"asset-name"},Te={class:"asset-tags"},ze={key:0,class:"asset-description"},Le={class:"asset-meta"},Se={class:"asset-meta-item mono"},xe=["href"],Oe={__name:"PluginCard",props:{plugin:{type:Object,required:!0},readonly:{type:Boolean,default:!1},canInstall:{type:Boolean,default:!0},canUninstall:{type:Boolean,default:!0},installing:{type:Boolean,default:!1},uninstalling:{type:Boolean,default:!1}},emits:["click","install","uninstall"],setup(l){function t(e){return!!(e?.installSource||e?.repoOwner||e?.repoProjectPath||e?.repoLocalPath)}return(n,r)=>{return i(),h("div",{class:d(["plugin-card asset-card",{"is-installed":l.plugin.installed,"is-disabled":l.readonly}]),onClick:r[4]||(r[4]=e=>n.$emit("click",l.plugin))},[k("div",je,[k("div",Ue,[k("div",$e,[k("div",Ce,[k("span",{class:d(["asset-status-dot",{active:l.plugin.installed}])},null,2),k("span",Ie,o(l.plugin.name),1)]),k("div",Te,[l.plugin.installed?(i(),s(m(S),{key:0,type:"success",size:"tiny",bordered:!1},{default:c(()=>[...r[5]||(r[5]=[a("已安装",-1)])]),_:1})):e("",!0),l.plugin.builtIn?(i(),s(m(S),{key:1,type:"info",size:"tiny",bordered:!1},{default:c(()=>[...r[6]||(r[6]=[a("内置",-1)])]),_:1})):e("",!0),l.readonly?(i(),s(m(S),{key:2,type:"default",size:"tiny",bordered:!1},{default:c(()=>[...r[7]||(r[7]=[a("只读",-1)])]),_:1})):e("",!0),l.plugin.scope?(i(),s(m(S),{key:3,type:"info",size:"tiny",bordered:!1},{default:c(()=>[a(o("project"===l.plugin.scope?"项目":"全局"),1)]),_:1})):e("",!0),"extension"===l.plugin.pluginKind?(i(),s(m(S),{key:4,type:"default",size:"tiny",bordered:!1},{default:c(()=>[...r[8]||(r[8]=[a("扩展",-1)])]),_:1})):e("",!0),"skill-bundle"===l.plugin.pluginKind?(i(),s(m(S),{key:5,type:"warning",size:"tiny",bordered:!1},{default:c(()=>[...r[9]||(r[9]=[a("技能包插件",-1)])]),_:1})):e("",!0),"gitlab"===l.plugin.repoProvider?(i(),s(m(S),{key:6,type:"info",size:"tiny",bordered:!1},{default:c(()=>[...r[10]||(r[10]=[a("GitLab",-1)])]),_:1})):"local"===l.plugin.repoProvider?(i(),s(m(S),{key:7,type:"info",size:"tiny",bordered:!1},{default:c(()=>[...r[11]||(r[11]=[a("本地",-1)])]),_:1})):l.plugin.repoOwner?(i(),s(m(S),{key:8,type:"info",size:"tiny",bordered:!1},{default:c(()=>[a(o(l.plugin.repoOwner),1)]),_:1})):e("",!0)])])]),l.plugin.description?(i(),h("div",ze,o((p=l.plugin.description,f=120,p?.length>f?p.slice(0,f)+"...":p)),1)):e("",!0),k("div",Le,[k("span",Se,o(l.plugin.directory),1),l.plugin.readmeUrl?(i(),h("a",{key:0,class:"asset-link",href:l.plugin.readmeUrl,target:"_blank",onClick:r[0]||(r[0]=v(()=>{},["stop"]))},o((u=l.plugin,"gitlab"===u?.repoProvider?"GitLab":"local"===u?.repoProvider?"本地":"GitHub")),9,xe)):e("",!0)])]),l.readonly?e("",!0):(i(),h("div",{key:0,class:"asset-card-actions",onClick:r[3]||(r[3]=v(()=>{},["stop"]))},[l.plugin.installed&&l.canUninstall?(i(),s(m(w),{key:0,size:"small",tertiary:"",type:"error",loading:l.uninstalling,focusable:!1,onClick:r[1]||(r[1]=e=>n.$emit("uninstall",l.plugin))},{default:c(()=>[...r[12]||(r[12]=[a("卸载",-1)])]),_:1},8,["loading"])):l.canInstall?(i(),s(m(w),{key:1,size:"small",type:"primary",loading:l.installing,disabled:!t(l.plugin),focusable:!1,onClick:r[2]||(r[2]=e=>n.$emit("install",l.plugin))},{default:c(()=>[...r[13]||(r[13]=[a("安装",-1)])]),_:1},8,["loading","disabled"])):e("",!0)]))],2);var u,p,f}}},Re={class:"repo-manager"},Be={class:"repo-list"},He={class:"repo-main"},Ae={class:"repo-info"},Ge={class:"repo-name-row"},Me={class:"repo-name"},De={class:"repo-branch"},Ke={key:0,class:"repo-auth-hint"},Ne={class:"repo-actions"},qe={key:0,class:"empty-hint"},Ee={class:"add-repo"},Ve={class:"add-title"},Fe={class:"add-form"},Qe={class:"add-hint"},We={class:"tips"},Ye={key:0,class:"recommended"},Ze={class:"recommended-list"},Je=["onClick"],Xe={class:"rec-info"},ea={class:"rec-name"},aa={class:"rec-desc"},la={key:0,class:"auth-manager"},ta={class:"auth-meta"},sa={class:"auth-meta-row"},na={class:"auth-value"},ia={class:"auth-meta-row"},ra={class:"auth-value"},oa={class:"auth-meta-row"},ua={class:"auth-value"},ca={class:"auth-actions"},pa=P({__name:"PluginRepoManager",props:{visible:Boolean,platform:{type:String,default:"claude"},projectPath:{type:String,default:""},capabilities:{type:Object,default:()=>({})}},emits:["update:visible","updated"],setup(v,{emit:y}){const P=v,_=y,j=u({get:()=>P.visible,set:e=>_("update:visible",e)}),$=g([]),I=g(!1),x=g(!1),O=g(!1),R=g(!1),B=g(null),H=g(!1),G=g(!1),M=g({token:""}),D=g({input:"",branch:"main"}),K=u(()=>"native-marketplace"===P.capabilities.repositoryMode),N=u(()=>({...P.projectPath?{cwd:P.projectPath}:{}})),E=u(()=>B.value?("gitlab"===B.value.provider?"GitLab":"GitHub")+" 仓库认证":"仓库认证"),V=u(()=>"opencode"===P.platform?[{owner:"Tommertom",name:"opencode-plugin-marketplace",url:"https://github.com/Tommertom/opencode-plugin-marketplace",description:"OpenCode 插件市场",branch:"main"},{owner:"avifenesh",name:"awesome-slash",url:"https://github.com/avifenesh/awesome-slash",description:"Awesome Slash 命令集",branch:"main"},{owner:"NeoLabHQ",name:"context-engineering-kit",url:"https://github.com/NeoLabHQ/context-engineering-kit",description:"上下文工程工具包",branch:"master"},{owner:"awesome-opencode",name:"awesome-opencode",url:"https://github.com/awesome-opencode/awesome-opencode",description:"OpenCode 生态聚合",branch:"main"},{owner:"sst",name:"opencode",url:"https://github.com/sst/opencode",description:"OpenCode 官方仓库",branch:"dev"}]:"codex"===P.platform||"omp"===P.platform?[]:[{owner:"anthropics",name:"claude-plugins-official",url:"https://github.com/anthropics/claude-plugins-official",description:"官方插件库",branch:"main"}]),F=u(()=>K.value?Boolean(D.value.input.trim()):!!ae(D.value.input.trim()));function W(e){const a=e.provider||(e.localPath?"local":e.projectPath?"gitlab":"github"),l=e.branch||"main",t=le(e.directory);return"local"===a?`local:${e.localPath||""}::${t}`:"gitlab"===a?`gitlab:${e.host||"https://gitlab.com"}::${e.projectPath||""}::${l}::${t}`:`github:${e.host||"https://github.com"}::${e.owner||""}/${e.name||""}::${l}::${t}`}function Y(e){return"omp-marketplace"===e.provider?e.label||e.name||e.id:"local"===e.provider?e.localPath||e.name||"本地仓库":"gitlab"===e.provider&&e.projectPath||[e.owner,e.name].filter(Boolean).join("/")}function Z(e){if("omp-marketplace"===e.provider)return e.sourceUri||e.source||"";const a=[];return"local"===e.provider?a.push("本地仓库"):"gitlab"===e.provider?(a.push("GitLab"),e.host&&a.push(e.host.replace(/^https?:\/\//,""))):a.push("GitHub"),e.branch&&a.push(e.branch),e.directory&&a.push(`目录: ${e.directory}`),a.join(" · ")}function J(e){return"github"===e?.provider||"gitlab"===e?.provider}function X(e){return J(e)?e.hasToken?`仓库 Token: ${e.tokenPreview||"已配置"}`:"gitlab"===e.provider?"未配置仓库 Token,将回退到全局 Token、glab 或 git credential":"未配置仓库 Token,可选配置后优先用于 GitHub API 访问":""}function te(){R.value=!1,B.value=null,M.value.token="",H.value=!1,G.value=!1}async function se(){I.value=!0;try{const e=await async function(e="claude",a={}){return(await Q.get("/plugins/repos",{params:me({platform:e},a)})).data}(P.platform,N.value);e.success&&($.value=e.repos||[])}catch(e){z.error("加载仓库失败: "+e.message)}finally{I.value=!1}}async function ne(){O.value=!0;try{let e=(await ge(P.platform,N.value)).task;for(;e&&["queued","running"].includes(e.status);)await new Promise(e=>setTimeout(e,250)),e=(await he(e.id,{platform:P.platform,...N.value})).task;"failed"===e?.status?z.error(e.error||"刷新失败,已保留旧缓存"):(await se(),z.success("仓库缓存刷新成功"),_("updated"))}catch(e){z.error("刷新失败: "+e.message)}finally{O.value=!1}}async function ie(){if(!F.value)return;const e=K.value?{source:D.value.input.trim()}:ae(D.value.input.trim());x.value=!0;try{const a=await Pe({...e,branch:D.value.branch||"main",enabled:!0},P.platform,N.value);a.success&&($.value=a.repos,D.value.input="",D.value.branch="main",z.success("仓库添加成功"),_("updated"))}catch(a){z.error("添加失败: "+a.message)}finally{x.value=!1}}async function re(e){try{const a=await async function(e,a="claude",l={}){return(await Q.delete("/plugins/repos",{params:me({platform:a,id:e.id||"",owner:e.owner||"",name:e.name||""},l)})).data}(e,P.platform,N.value);a.success&&($.value=a.repos,z.success("仓库已删除"),_("updated"))}catch(a){z.error("删除失败: "+a.message)}}async function oe(e,a){try{const l=await async function(e,a,l="claude"){return(await Q.put("/plugins/repos/toggle",{id:e.id||"",owner:e.owner||"",name:e.name||"",enabled:a,platform:l})).data}(e,a,P.platform);l.success&&($.value=l.repos,_("updated"))}catch(l){z.error("操作失败: "+l.message)}}async function ue(){const e=B.value,a=M.value.token.trim();if(e&&a){H.value=!0;try{const l=await _e(e,{token:a},P.platform);l.success&&($.value=l.repos||[],z.success("仓库 Token 已保存"),_("updated"),te())}catch(l){z.error("保存 Token 失败: "+l.message)}finally{H.value=!1}}}async function ce(){const e=B.value;if(e){G.value=!0;try{const a=await _e(e,{clearToken:!0},P.platform);a.success&&($.value=a.repos||[],z.success("仓库 Token 已清除"),_("updated"),te())}catch(a){z.error("清除 Token 失败: "+a.message)}finally{G.value=!1}}}function pe(e){const a=W(e);return $.value.some(e=>W(e)===a)}function de(){te(),_("update:visible",!1)}return r(()=>P.visible,e=>{e&&se()}),r(()=>P.platform,()=>{P.visible&&se()}),n(()=>{P.visible&&se()}),(n,r)=>(i(),h(p,null,[t(m(ee),{show:j.value,"onUpdate:show":r[2]||(r[2]=e=>j.value=e),preset:"card",title:K.value?"OMP Marketplace 管理":"插件仓库管理",bordered:!1,closable:!0,style:{width:"480px","max-width":"90vw"},onClose:de},{"header-extra":c(()=>[t(m(w),{type:"primary",size:"small",loading:O.value,focusable:!1,onClick:ne},{icon:c(()=>[t(m(b),null,{default:c(()=>[t(m(q))]),_:1})]),default:c(()=>[r[5]||(r[5]=a(" 刷新 ",-1))]),_:1},8,["loading"])]),default:c(()=>[k("div",Re,[k("div",Be,[t(m(U),{show:I.value},{default:c(()=>[(i(!0),h(p,null,l($.value,l=>(i(),h("div",{key:l.id||`${l.owner}/${l.name}/${l.localPath||""}`,class:"repo-item"},[k("div",He,[!1!==v.capabilities.repositoryToggle?(i(),s(m(T),{key:0,value:l.enabled,size:"small","onUpdate:value":e=>oe(l,e)},null,8,["value","onUpdate:value"])):e("",!0),k("div",Ae,[k("div",Ge,[k("div",Me,o(Y(l)),1),!1!==v.capabilities.repositoryAuth&&J(l)?(i(),s(m(S),{key:0,size:"tiny",type:l.hasToken?"success":"default",bordered:!1},{default:c(()=>[a(o(l.hasToken?"已配 Token":"未配 Token"),1)]),_:2},1032,["type"])):e("",!0)]),k("div",De,o(Z(l)),1),!1!==v.capabilities.repositoryAuth&&J(l)?(i(),h("div",Ke,o(X(l)),1)):e("",!0)])]),k("div",Ne,[!1!==v.capabilities.repositoryAuth&&J(l)?(i(),s(m(w),{key:0,text:"",type:"primary",size:"tiny",focusable:!1,onClick:e=>function(e){J(e)&&(B.value=e,M.value.token="",R.value=!0)}(l)},{default:c(()=>[...r[6]||(r[6]=[a(" 认证 ",-1)])]),_:1},8,["onClick"])):e("",!0),t(m(w),{text:"",type:"error",size:"tiny",focusable:!1,onClick:e=>re(l)},{default:c(()=>[...r[7]||(r[7]=[a(" 删除 ",-1)])]),_:1},8,["onClick"])])]))),128)),0===$.value.length?(i(),h("div",qe," 暂无仓库,请添加 ")):e("",!0)]),_:1},8,["show"])]),k("div",Ee,[k("div",Ve,o(K.value?"添加 Marketplace source":"添加仓库"),1),k("div",Fe,[t(m(L),{value:D.value.input,"onUpdate:value":r[0]||(r[0]=e=>D.value.input=e),placeholder:K.value?"Marketplace source(owner/repo、URL 或本地路径)":"GitHub/GitLab 仓库地址,或本地路径",size:"small",class:"repo-input",onKeyup:f(ie,["enter"])},null,8,["value","placeholder"]),K.value?e("",!0):(i(),s(m(L),{key:0,value:D.value.branch,"onUpdate:value":r[1]||(r[1]=e=>D.value.branch=e),placeholder:"分支",size:"small",class:"branch-input"},null,8,["value"])),t(m(w),{type:"primary",size:"small",disabled:!F.value,loading:x.value,focusable:!1,onClick:ie},{default:c(()=>[...r[8]||(r[8]=[a(" 添加 ",-1)])]),_:1},8,["disabled","loading"])]),k("div",Qe,o(K.value?"source 将原样传递给 omp plugin marketplace add":"支持 `owner/repo`、GitHub/GitLab URL 或 SSH、以及本地路径"),1)]),k("div",We,[t(m(C),{type:"info",bordered:!1,size:"small"},{default:c(()=>[a(o(K.value?"OMP Marketplace 由原生 CLI 管理;不支持单独启停、branch 或仓库 Token。":"支持 GitHub、GitLab 和本地仓库路径;远程仓库可按仓库单独配置 Token。"),1)]),_:1})]),V.value.length>0?(i(),h("div",Ye,[r[10]||(r[10]=k("div",{class:"recommended-title"},"推荐仓库",-1)),k("div",Ze,[(i(!0),h(p,null,l(V.value,e=>(i(),h("div",{key:e.url||`${e.owner}/${e.name}`,class:d(["recommended-item",{added:pe(e)}]),onClick:a=>!pe(e)&&async function(e){x.value=!0;try{const a=await Pe({owner:e.owner,name:e.name,url:e.url,branch:e.branch,enabled:!0},P.platform);a.success&&($.value=a.repos,z.success("仓库添加成功"),_("updated"))}catch(a){z.error("添加失败: "+a.message)}finally{x.value=!1}}(e)},[k("div",Xe,[k("span",ea,o(e.owner)+"/"+o(e.name),1),k("span",aa,o(e.description),1)]),pe(e)?(i(),s(m(S),{key:0,size:"tiny",type:"success",bordered:!1},{default:c(()=>[...r[9]||(r[9]=[a(" 已添加 ",-1)])]),_:1})):(i(),s(m(b),{key:1,class:"add-icon"},{default:c(()=>[t(m(A))]),_:1}))],10,Je))),128))])])):e("",!0)])]),_:1},8,["show","title"]),t(m(ee),{show:R.value,"onUpdate:show":r[4]||(r[4]=e=>R.value=e),preset:"card",title:E.value,bordered:!1,style:{width:"460px","max-width":"92vw"},onClose:te},{default:c(()=>[B.value?(i(),h("div",la,[t(m(C),{type:"info",bordered:!1,size:"small"},{default:c(()=>{return[a(o((e=B.value,"gitlab"===e?.provider?"私有 GitLab 仓库建议配置仓库级 Private Token;保存后会优先使用当前仓库 Token,再回退到全局环境变量、glab 和 git credential。":"GitHub 仓库可选配置 Personal Access Token;保存后会优先使用当前仓库 Token,再回退到全局环境变量、gh 和 git credential。")),1)];var e}),_:1}),k("div",ta,[k("div",sa,[r[11]||(r[11]=k("span",{class:"auth-label"},"仓库",-1)),k("span",na,o(Y(B.value)),1)]),k("div",ia,[r[12]||(r[12]=k("span",{class:"auth-label"},"来源",-1)),k("span",ra,o("gitlab"===B.value.provider?"GitLab":"GitHub"),1)]),k("div",oa,[r[13]||(r[13]=k("span",{class:"auth-label"},"当前状态",-1)),k("span",ua,o(B.value.hasToken?`已配置 ${B.value.tokenPreview||""}`:"未配置仓库 Token"),1)])]),t(m(L),{value:M.value.token,"onUpdate:value":r[3]||(r[3]=e=>M.value.token=e),type:"password","show-password-on":"click",clearable:"",placeholder:"输入此仓库专属 Token",onKeyup:f(ue,["enter"])},null,8,["value"]),r[17]||(r[17]=k("div",{class:"auth-footnote"}," 仓库 Token 会优先于全局环境变量、CLI 登录和系统 Git 凭据。 ",-1)),k("div",ca,[t(m(w),{focusable:!1,onClick:te},{default:c(()=>[...r[14]||(r[14]=[a(" 取消 ",-1)])]),_:1}),B.value.hasToken?(i(),s(m(w),{key:0,type:"warning",secondary:"",focusable:!1,loading:G.value,onClick:ce},{default:c(()=>[...r[15]||(r[15]=[a(" 清除 Token ",-1)])]),_:1},8,["loading"])):e("",!0),t(m(w),{type:"primary",focusable:!1,disabled:!M.value.token.trim(),loading:H.value,onClick:ue},{default:c(()=>[...r[16]||(r[16]=[a(" 保存 Token ",-1)])]),_:1},8,["disabled","loading"])])])):e("",!0)]),_:1},8,["show","title"])],64))}},[["__scopeId","data-v-2321d587"]]),da={class:"asset-detail-drawer-header"},va={class:"asset-detail-identity"},ma={class:"asset-detail-heading"},fa={class:"asset-detail-name"},ya={class:"asset-detail-meta"},ga={key:2,class:"asset-detail-subtle"},ha={class:"asset-detail-body"},ka={class:"asset-detail-container"},ba={class:"asset-detail-info-section"},wa={class:"asset-detail-description"},Pa={key:0,class:"asset-detail-info-section"},_a={class:"asset-detail-list"},ja={class:"asset-detail-value mono"},Ua={key:1,class:"asset-detail-info-section"},$a={class:"asset-detail-box"},Ca=["href"],Ia={key:1},Ta={class:"asset-detail-container"},za={key:0,class:"asset-detail-loading"},La=["innerHTML"],Sa={key:2,class:"asset-detail-empty"},xa={__name:"PluginDetailDrawer",props:{visible:{type:Boolean,default:!1},plugin:{type:Object,default:null},platform:{type:String,default:"claude"},projectPath:{type:String,default:""}},emits:["update:visible"],setup(n,{emit:d}){ie.setOptions({breaks:!0,gfm:!0});const{drawerWidth:v}=se(600),f=n,y=d,w=u({get:()=>f.visible,set:e=>y("update:visible",e)}),P=g(""),_=g(!1),j=g(0),C=g("overview"),I=g(""),T=u(()=>/^(https?:)?\/\//.test(f.plugin?.repoUrl||f.plugin?.gitUrl||"")),z=u(()=>f.plugin?.installPath||f.plugin?.fullPath||f.plugin?.path||f.plugin?.directory||""),L=u(()=>Array.isArray(f.plugin?.skillPaths)?f.plugin.skillPaths:[]),O={height:"100%",minHeight:0,overflow:"hidden"};async function B(){const e=f.plugin,a=f.platform;if(!f.visible||!e)return;const l=function(e,a){return e?[a,e.pluginId||e.id||e.name||"",e.repoId||"",e.directory||""].join(":"):""}(e,a);if(I.value===l)return;const t=++j.value;_.value=!0;try{const s={repoId:e.repoId,repoProvider:e.repoProvider,repoHost:e.repoHost,repoOwner:e.repoOwner,repoName:e.repoName,repoBranch:e.repoBranch,directory:e.directory,source:e.source,repoUrl:e.repoUrl,repoProjectPath:e.repoProjectPath,repoLocalPath:e.repoLocalPath,installPath:e.installPath},n=await function(e,a={},l="claude",t={}){const s=a.scope||t.scope||"",n=a.repoLocalPath||a.repoProjectPath||a.repoUrl||a.directory||e,i=x(`plugin-readme:${e}`,l,s,n),r=new URLSearchParams;return l&&r.append("platform",l),a.repoId&&r.append("repoId",a.repoId),a.repoProvider&&r.append("repoProvider",a.repoProvider),a.repoHost&&r.append("repoHost",a.repoHost),a.repoOwner&&r.append("repoOwner",a.repoOwner),a.repoName&&r.append("repoName",a.repoName),a.repoBranch&&r.append("repoBranch",a.repoBranch),a.directory&&r.append("directory",a.directory),a.source&&r.append("source",a.source),a.repoUrl&&r.append("repoUrl",a.repoUrl),a.repoProjectPath&&r.append("repoProjectPath",a.repoProjectPath),a.repoLocalPath&&r.append("repoLocalPath",a.repoLocalPath),a.installPath&&r.append("installPath",a.installPath),t.scope&&r.append("scope",t.scope),t.cwd&&r.append("cwd",t.cwd),$(i,a=>Q.get(`/plugins/${encodeURIComponent(e)}/readme?${r.toString()}`,{signal:a}).then(e=>e.data),`plugin-readme:${e}`,`plugin-readme:${l}`)}(e.name,s,a,{scope:f.projectPath?"project":"user",...f.projectPath?{cwd:f.projectPath}:{}});if(t!==j.value)return;P.value=n.readme||"",I.value=l}catch(s){if(t!==j.value)return;P.value="",I.value=l}finally{t===j.value&&(_.value=!1)}}r(()=>[f.visible,f.plugin,f.platform],([e])=>{j.value+=1,C.value="overview",I.value="",_.value=!1,P.value=""}),r(C,e=>{"readme"===e&&B()});const A=u(()=>P.value?ie(P.value):"");return(r,u)=>(i(),s(m(te),{show:w.value,"onUpdate:show":u[1]||(u[1]=e=>w.value=e),width:m(v),placement:"right","show-mask":!0},{default:c(()=>[t(m(ne),{closable:"","native-scrollbar":!1,"body-content-style":O},{header:c(()=>[k("div",da,[k("div",va,[t(m(b),{size:20,class:"asset-detail-icon"},{default:c(()=>[t(m(N))]),_:1}),k("div",ma,[k("span",fa,o(n.plugin?.name||"插件详情"),1),k("div",ya,[n.plugin?.version?(i(),s(m(S),{key:0,size:"tiny",bordered:!1,type:"info"},{default:c(()=>[a(" v"+o(n.plugin.version),1)]),_:1})):e("",!0),"skill-bundle"===n.plugin?.pluginKind?(i(),s(m(S),{key:1,size:"tiny",bordered:!1,type:"warning"},{default:c(()=>[...u[2]||(u[2]=[a(" 技能包插件 ",-1)])]),_:1})):e("",!0),n.plugin?.author?(i(),h("span",ga,[t(m(b),{size:12},{default:c(()=>[t(m(G))]),_:1}),a(" "+o(n.plugin.author),1)])):e("",!0)])])])])]),default:c(()=>[k("div",ha,[t(m(J),{value:C.value,"onUpdate:value":u[0]||(u[0]=e=>C.value=e),type:"line",animated:"",class:"asset-detail-tabs"},{default:c(()=>[t(m(Y),{name:"overview",tab:"概览"},{default:c(()=>[k("div",ka,[k("div",ba,[u[3]||(u[3]=k("h3",{class:"asset-detail-section-title"},"描述",-1)),k("p",wa,o(n.plugin?.description||"暂无描述"),1)]),L.value.length>0?(i(),h("div",Pa,[u[4]||(u[4]=k("h3",{class:"asset-detail-section-title"},"包含技能",-1)),k("div",_a,[(i(!0),h(p,null,l(L.value,e=>(i(),h("div",{key:e,class:"asset-detail-row"},[k("span",ja,o(e),1)]))),128))])])):e("",!0),n.plugin?.repoUrl||n.plugin?.gitUrl||n.plugin?.repoLocalPath?(i(),h("div",Ua,[u[5]||(u[5]=k("h3",{class:"asset-detail-section-title"},"仓库地址",-1)),k("div",$a,[t(m(b),{size:16},{default:c(()=>[t(m(H))]),_:1}),T.value?(i(),h("a",{key:0,class:"asset-detail-link",href:n.plugin.repoUrl||n.plugin.gitUrl,target:"_blank",rel:"noopener noreferrer"},o(n.plugin.repoUrl||n.plugin.gitUrl),9,Ca)):(i(),h("span",Ia,o(n.plugin.repoLocalPath),1))])])):e("",!0),t(X,{path:z.value},null,8,["path"])])]),_:1}),t(m(Y),{name:"readme",tab:"README"},{default:c(()=>[k("div",Ta,[_.value?(i(),h("div",za,[t(m(U),{size:"medium"}),u[6]||(u[6]=k("p",null,"加载 README 中...",-1))])):P.value?(i(),h("div",{key:1,class:"asset-detail-content",innerHTML:A.value},null,8,La)):(i(),h("div",Sa,[t(m(b),{size:44,class:"asset-detail-empty-icon"},{default:c(()=>[t(m(R))]),_:1}),u[7]||(u[7]=k("p",null,"暂无 README 文档",-1))]))])]),_:1})]),_:1},8,["value"])])]),_:1})]),_:1},8,["show","width"]))}},Oa={key:0,class:"asset-panel-header"},Ra={class:"asset-title-group"},Ba={class:"asset-heading"},Ha={class:"asset-title-row"},Aa={class:"asset-platform-pill"},Ga={key:0,class:"asset-action-row"},Ma={key:1,class:"asset-drawer-toolbar"},Da={key:0,class:"asset-action-row"},Ka={key:2,class:"dsh-install-row"},Na={class:"asset-summary"},qa={class:"asset-summary-item"},Ea={class:"asset-summary-value"},Va={class:"asset-summary-item"},Fa={class:"asset-summary-value"},Qa={class:"asset-summary-item"},Wa={class:"asset-summary-value"},Ya={class:"asset-filter-bar"},Za={class:"asset-panel-content"},Ja={key:0,class:"asset-empty"},Xa={key:1,class:"asset-list"},el={key:3,class:"asset-footer"},al=P({__name:"PluginsPanel",props:{inDrawer:{type:Boolean,default:!1},hideBack:{type:Boolean,default:!1},drawerVisible:{type:Boolean,default:!1},platform:{type:String,default:""},projectPath:{type:String,default:""}},emits:["back","updated"],setup(v){const P=v,C=y(),T=ce(),z=O(),S=g(!1),R=g([]),H=g(""),A=g("all"),G=g(!1),q=g(!1),Y=g(null),J=g({}),X=g({}),ee=g(!1),ae=g(!1),le=g([]),te=g(""),se=g(""),ne=g(!1),ie=u(()=>le.value.map(e=>({label:e.name,value:e.name}))),pe=g(0),de=g({supportsPlugins:!0,repositories:!0,market:!0,install:!0,uninstall:!0,import:!0,syncRepos:!0}),{catalog:ve}=j(),Pe=u(()=>ue(ve.value,"plugins").map(e=>e.key)),_e=u(()=>Pe.value.includes(je.value));const je=u(()=>String(P.platform||(Array.isArray(C.query.platform)?C.query.platform[0]:C.query.platform)||oe(C)||"").trim().toLowerCase()),Ue=u(()=>{const e=T.get(je.value)||re(je.value);return e.label||e.title||"Claude Code"}),$e=[{label:"全部",value:"all"},{label:"已安装",value:"installed"},{label:"未安装",value:"uninstalled"}],Ce=u(()=>"dsh"===je.value?R.value.filter(e=>e.profile===te.value):R.value),Ie=u(()=>Ce.value.filter(e=>e.installed).length);function Te(e=null){return{...P.projectPath?{cwd:P.projectPath}:{},...e?.scope?{scope:e.scope}:{scope:P.projectPath?"project":"user"}}}const ze=u(()=>{let e=Ce.value;if("installed"===A.value?e=e.filter(e=>e.installed):"uninstalled"===A.value&&(e=e.filter(e=>!e.installed)),H.value.trim()){const a=H.value.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(a)||e.description?.toLowerCase().includes(a))}return[...e].sort((e,a)=>e.installed===a.installed?0:e.installed?-1:1)}),Le=u(()=>H.value?"没有匹配的插件":"dsh"===je.value?"当前 Profile 没有外置插件,可通过上方输入框安装 npm 包":"installed"===A.value?"暂无已安装的插件":"uninstalled"===A.value?"所有插件都已安装":!1===de.value.supportsPlugins?de.value.disabledReason||`${Ue.value} 暂未提供插件管理能力`:de.value.repositories||de.value.market||de.value.install||de.value.uninstall?"暂无可用插件,请配置仓库源":de.value.disabledReason||`${Ue.value} 当前没有可展示的插件`);async function Se(e,a){try{const l=await async function(e="claude",a={}){const l=x("plugin-capabilities",e,a.scope||"",a.cwd||"");return $(l,a=>Q.get("/plugins/capabilities",{params:{platform:e},signal:a}).then(e=>e.data),"plugin-capabilities",`plugin-capabilities:${e}`)}(e);if(a!==pe.value||e!==je.value)return!1;if(l.success&&l.capabilities)return de.value={supportsPlugins:!0,repositories:!1,market:!1,install:!1,uninstall:!1,import:!1,syncRepos:!1,...l.capabilities},!0}catch{if(a!==pe.value||e!==je.value)return!1}return a===pe.value&&e===je.value&&(de.value={supportsPlugins:Pe.value.includes(e),repositories:Pe.value.includes(e),market:Pe.value.includes(e),install:Pe.value.includes(e),uninstall:Pe.value.includes(e),import:"claude"===e,syncRepos:"claude"===e},!0)}async function xe(){const e=++pe.value,a=je.value;if(!_e.value)return R.value=[],de.value={supportsPlugins:!1,repositories:!1,market:!1,install:!1,uninstall:!1,import:!1,syncRepos:!1,disabledReason:`${Ue.value} 暂未提供插件管理能力`},void(S.value=!1);S.value=!0;try{if("dsh"===a&&(le.value=await W(),le.value.some(e=>e.name===te.value)||(te.value=le.value[0]?.name||"")),!(await Se(a,e)))return;if(e!==pe.value||a!==je.value)return;if(!1===de.value.supportsPlugins)return void(R.value=[]);const l=Te(),[t,s]=await Promise.all([fe(a,l),de.value.market?ye(a,!1,l):Promise.resolve({success:!0,plugins:[]})]);if(e!==pe.value||a!==je.value)return;const n=t.success?t.plugins:[],i=s.success?s.plugins:[],r=(e,a)=>{const l={};for(const n of a)l[n.pluginId||n.id||n.name]=n;const t=e.map(e=>{const a=e.pluginId||e.id||e.name,t=l[a]||{},s="dsh"!==je.value||"boolean"!=typeof e.installed||e.installed;return{...t,...e,installed:s,key:e.key||`${s?"installed":"uninstalled"}-${a}-${e.scope||"user"}`,description:e.description||t.description||"",repoProvider:e.repoProvider||t.repoProvider||"",repoHost:e.repoHost||t.repoHost||"",repoOwner:e.repoOwner||t.repoOwner||"",repoName:e.repoName||t.repoName||"",repoBranch:e.repoBranch||t.repoBranch||"main",repoProjectPath:e.repoProjectPath||t.repoProjectPath||"",repoLocalPath:e.repoLocalPath||t.repoLocalPath||"",repoId:e.repoId||t.repoId||"",repoUrl:e.repoUrl||t.repoUrl||"",marketplace:e.marketplace||t.marketplace||"",installSource:e.installSource||t.installSource||"",readmeUrl:e.readmeUrl||t.readmeUrl||"",containsSkills:Boolean(e.containsSkills||t.containsSkills),skillPaths:Array.isArray(e.skillPaths)?e.skillPaths:Array.isArray(t.skillPaths)?t.skillPaths:[],pluginKind:e.pluginKind||t.pluginKind||(e.containsSkills||t.containsSkills?"skill-bundle":"plugin"),strict:Object.prototype.hasOwnProperty.call(e,"strict")?e.strict:t.strict,directory:e.directory||t.directory||e.installPath||""}}),s=new Set(e.map(e=>e.pluginId||e.id||e.name));return[...t,...a.filter(e=>!s.has(e.pluginId||e.id||e.name)).map(e=>({...e,installed:!1,key:e.key||`market-${e.pluginId||e.id||e.name}`}))]};R.value=r(n,i)}catch(l){e===pe.value&&a===je.value&&z.error("加载插件失败: "+l.message)}finally{e===pe.value&&(S.value=!1)}}async function Re(){const e=se.value.trim();if(te.value&&e&&!ne.value){ne.value=!0;try{await be(te.value,e),z.success(`已安装 ${e}`),se.value="",ke("dsh"),await xe()}catch(a){z.error(a.message||"安装外置插件失败")}finally{ne.value=!1}}}async function Be(){if(ae.value||!_e.value||!de.value.syncRepos&&!de.value.market)return;const e=je.value;ae.value=!0;try{const a=await async function(e,a){if(!e?.id)return e;let l=e;for(;l&&["queued","running"].includes(l.status);)await new Promise(e=>setTimeout(e,250)),l=(await he(l.id,{platform:a,...Te()})).task;return l}((await ge(e,Te())).task,e);"failed"===a?.status?z.error(a.error||"插件缓存刷新失败,已保留旧缓存"):"partial"===a?.status&&z.warning("插件缓存已部分更新,未成功的内容保留旧缓存"),await xe()}catch(a){z.error("插件缓存刷新失败: "+a.message)}finally{ae.value=!1}}async function He(){if(_e.value&&"claude"===je.value){ee.value=!0;try{const e=await Z("plugins");e.success?(z.success(`成功导入 ${e.imported} 个插件`),ke(je.value),await xe()):z.error(e.message||"导入失败")}catch(e){z.error("导入失败: "+e.message)}finally{ee.value=!1}}}function Ae(){ke(je.value),xe()}async function Ge(e){if(_e.value&&de.value.install&&!e.readonly){if(!("dsh"===je.value||e.installSource||e.repoOwner||e.repoProjectPath||e.repoLocalPath))return z.error("缺少可安装来源");J.value[e.key]=!0;try{const a="dsh"===je.value?await be(e.profile,e.name):e.installSource?await we("",null,je.value,e.pluginId||e.installSource,Te(e),e):await we(e.directory,{id:e.repoId,provider:e.repoProvider,host:e.repoHost,owner:e.repoOwner,name:e.repoName,branch:e.repoBranch||"main",projectPath:e.repoProjectPath,localPath:e.repoLocalPath,repoUrl:e.repoUrl,marketplace:e.marketplace},je.value,"",Te(e),e);if(a.success){z.success(`插件 "${e.name}" 安装成功`),ke(je.value);const a=R.value.findIndex(a=>a.key===e.key);-1!==a&&(R.value[a]={...R.value[a],installed:!0,key:`installed-${e.pluginId||e.id||e.name}-${e.scope||Te(e).scope}`})}else z.error(a.message||"安装失败")}catch(a){z.error("安装失败: "+a.message)}finally{delete J.value[e.key]}}}async function Me(e){if(_e.value&&de.value.uninstall&&!e.readonly){X.value[e.key]=!0;try{const a="dsh"===je.value?await async function(e,a){const l=F("dsh"),t=await Q.delete(`${l}/profiles/${encodeURIComponent(e)}/plugins/${encodeURIComponent(a)}`);return{success:!0,...t.data?.data||t.data||{}}}(e.profile,e.name):await async function(e,a="claude",l={}){return(await Q.delete(`/plugins/${encodeURIComponent(e)}`,{params:me({platform:a,pluginId:e},l)})).data}(e.pluginId||e.id||e.name,je.value,Te(e));if(a.success){z.success(`插件 "${e.name}" 已卸载`),ke(je.value);const a=R.value.findIndex(a=>a.key===e.key);-1!==a&&(R.value[a]={...R.value[a],installed:!1,key:`market-${e.pluginId||e.id||e.name}`})}else z.error(a.message||a.error||"卸载失败")}catch(a){z.error("卸载失败: "+a.message)}finally{delete X.value[e.key]}}}function De(e){Y.value=e,q.value=!0}return n(()=>{P.inDrawer&&!P.drawerVisible||xe()}),r(()=>P.drawerVisible,e=>{e&&xe()}),r(()=>je.value,()=>{xe()}),(n,r)=>(i(),h("div",{class:d(["plugins-panel asset-panel",{"in-drawer":v.inDrawer}])},[v.inDrawer?e("",!0):(i(),h("div",Oa,[k("div",Ra,[v.hideBack?e("",!0):(i(),s(m(w),{key:0,text:"",onClick:r[0]||(r[0]=e=>n.$emit("back")),class:"back-btn"},{icon:c(()=>[t(m(b),null,{default:c(()=>[t(m(B))]),_:1})]),_:1})),k("div",Ba,[k("div",Ha,[r[10]||(r[10]=k("span",{class:"asset-title"},"插件管理",-1)),k("span",Aa,o(Ue.value),1)]),r[11]||(r[11]=k("div",{class:"asset-subtitle"},"管理平台插件、仓库源和市场安装状态",-1))])]),Pe.value.includes(je.value)?(i(),h("div",Ga,[de.value.repositories?(i(),s(m(w),{key:0,text:"",focusable:!1,onClick:r[1]||(r[1]=e=>G.value=!0),class:"action-btn"},{icon:c(()=>[t(m(b),null,{default:c(()=>[t(m(K))]),_:1})]),default:c(()=>[r[12]||(r[12]=a(" 仓库 ",-1))]),_:1})):e("",!0),de.value.import?(i(),s(m(w),{key:1,text:"",focusable:!1,onClick:He,loading:ee.value,class:"action-btn"},{icon:c(()=>[t(m(b),null,{default:c(()=>[t(m(V))]),_:1})]),default:c(()=>[r[13]||(r[13]=a(" 导入 ",-1))]),_:1},8,["loading"])):e("",!0),de.value.syncRepos||de.value.market?(i(),s(m(w),{key:2,text:"",focusable:!1,onClick:Be,loading:ae.value,class:"action-btn"},{icon:c(()=>[t(m(b),null,{default:c(()=>[t(m(D))]),_:1})]),default:c(()=>[r[14]||(r[14]=a(" 刷新 ",-1))]),_:1},8,["loading"])):e("",!0)])):e("",!0)])),v.inDrawer?(i(),h("div",Ma,[Pe.value.includes(je.value)?(i(),h("div",Da,[de.value.repositories?(i(),s(m(w),{key:0,text:"",focusable:!1,onClick:r[2]||(r[2]=e=>G.value=!0),class:"action-btn"},{icon:c(()=>[t(m(b),null,{default:c(()=>[t(m(K))]),_:1})]),default:c(()=>[r[15]||(r[15]=a(" 仓库 ",-1))]),_:1})):e("",!0),de.value.import?(i(),s(m(w),{key:1,text:"",focusable:!1,onClick:He,loading:ee.value,class:"action-btn"},{icon:c(()=>[t(m(b),null,{default:c(()=>[t(m(V))]),_:1})]),default:c(()=>[r[16]||(r[16]=a(" 导入 ",-1))]),_:1},8,["loading"])):e("",!0),de.value.syncRepos||de.value.market?(i(),s(m(w),{key:2,text:"",focusable:!1,onClick:Be,loading:ae.value,class:"action-btn"},{icon:c(()=>[t(m(b),null,{default:c(()=>[t(m(D))]),_:1})]),default:c(()=>[r[17]||(r[17]=a(" 刷新 ",-1))]),_:1},8,["loading"])):e("",!0)])):e("",!0)])):e("",!0),"dsh"===je.value&&de.value.install?(i(),h("div",Ka,[t(m(_),{value:te.value,"onUpdate:value":r[3]||(r[3]=e=>te.value=e),options:ie.value,size:"small",placeholder:"选择 Profile"},null,8,["value","options"]),t(m(L),{value:se.value,"onUpdate:value":r[4]||(r[4]=e=>se.value=e),size:"small",placeholder:"npm 包名,例如 @scope/dsh-plugin",onKeyup:f(Re,["enter"])},null,8,["value"]),t(m(w),{size:"small",type:"primary",loading:ne.value,disabled:!te.value||!se.value.trim(),onClick:Re},{default:c(()=>[...r[18]||(r[18]=[a("安装外置插件",-1)])]),_:1},8,["loading","disabled"])])):e("",!0),k("div",Na,[k("span",qa,[r[19]||(r[19]=k("span",{class:"asset-summary-label"},"全部",-1)),k("span",Ea,o(Ce.value.length),1)]),k("span",Va,[r[20]||(r[20]=k("span",{class:"asset-summary-label"},"已安装",-1)),k("span",Fa,o(Ie.value),1)]),k("span",Qa,[r[21]||(r[21]=k("span",{class:"asset-summary-label"},"可安装",-1)),k("span",Wa,o(Ce.value.length-Ie.value),1)])]),k("div",Ya,[t(m(L),{value:H.value,"onUpdate:value":r[5]||(r[5]=e=>H.value=e),placeholder:"搜索插件名称或描述",clearable:"",size:"small",class:"asset-search"},{prefix:c(()=>[t(m(b),null,{default:c(()=>[t(m(E))]),_:1})]),_:1},8,["value"]),t(m(_),{value:A.value,"onUpdate:value":r[6]||(r[6]=e=>A.value=e),options:$e,size:"small",class:"asset-filter"},null,8,["value"])]),k("div",Za,[t(m(U),{show:S.value},{default:c(()=>[0!==ze.value.length||S.value?(i(),h("div",Xa,[(i(!0),h(p,null,l(ze.value,e=>(i(),s(Oe,{key:e.key,plugin:e,readonly:e.readonly||!de.value.install&&!de.value.uninstall,"can-install":de.value.install,"can-uninstall":de.value.uninstall,installing:!!J.value[e.key],uninstalling:!!X.value[e.key],onInstall:Ge,onUninstall:Me,onClick:De},null,8,["plugin","readonly","can-install","can-uninstall","installing","uninstalling"]))),128))])):(i(),h("div",Ja,[t(m(I),{description:Le.value},{icon:c(()=>[t(m(b),{size:"48",color:"var(--text-quaternary)"},{default:c(()=>[t(m(N))]),_:1})]),extra:c(()=>[Pe.value.includes(je.value)&&0===Ce.value.length&&de.value.repositories?(i(),s(m(w),{key:0,size:"small",onClick:r[7]||(r[7]=e=>G.value=!0)},{default:c(()=>[...r[22]||(r[22]=[a("配置仓库源",-1)])]),_:1})):e("",!0)]),_:1},8,["description"])]))]),_:1},8,["show"])]),Pe.value.includes(je.value)&&(de.value.install||de.value.uninstall)?(i(),h("div",el,[t(m(b),{size:"14",class:"asset-info-icon"},{default:c(()=>[t(m(M))]),_:1}),k("span",null,"安装/卸载后需重启 "+o(Ue.value)+" 生效",1)])):e("",!0),de.value.repositories?(i(),s(pa,{key:4,visible:G.value,"onUpdate:visible":r[8]||(r[8]=e=>G.value=e),platform:je.value,"project-path":P.projectPath,capabilities:de.value,onUpdated:Ae},null,8,["visible","platform","project-path","capabilities"])):e("",!0),t(xa,{visible:q.value,"onUpdate:visible":r[9]||(r[9]=e=>q.value=e),plugin:Y.value,platform:je.value,"project-path":P.projectPath,onUpdated:xe},null,8,["visible","plugin","platform","project-path"])],2))}},[["__scopeId","data-v-efe9e4ec"]]);export{al as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.project-card[data-v-4396493e]{cursor:pointer;border:1px solid var(--border-primary);background:var(--bg-primary);border-radius:8px;padding:12px 14px;transition:all .25s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;box-shadow:0 1px 3px #0000000a}.project-card[data-v-4396493e]:before{content:"";opacity:0;background:linear-gradient(#18a058,#18a05866);width:3px;height:100%;transition:opacity .25s;position:absolute;top:0;left:0}.project-card[data-v-4396493e]:hover{border-color:#18a05866;transform:translateY(-3px);box-shadow:0 8px 20px #18a0581f,0 2px 6px #0000000f}.project-card[data-v-4396493e]:hover:before{opacity:1}.card-content[data-v-4396493e]{flex-direction:column;gap:6px;display:flex}.header-row[data-v-4396493e]{align-items:center;gap:8px;display:flex}.project-name[data-v-4396493e]{text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary);letter-spacing:-.2px;flex:1;font-size:14px;font-weight:600;overflow:hidden}.delete-btn[data-v-4396493e]{opacity:.7;transition:opacity .2s;padding:2px!important}.delete-btn[data-v-4396493e]:hover{opacity:1}.project-path[data-v-4396493e]{text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.3;display:block;overflow:hidden}.stats-row[data-v-4396493e]{border-top:1px dashed var(--border-primary);justify-content:space-between;align-items:center;margin-top:4px;padding-top:8px;display:flex}.stats-row[data-v-4396493e] .n-tag{border-radius:4px;height:18px;padding:0 6px;font-size:11px;font-weight:600}.last-used[data-v-4396493e]{font-size:11px;font-weight:500}.project-list-container[data-v-c6ff0023]{box-sizing:border-box;flex-direction:column;width:100%;height:100%;display:flex}.header[data-v-c6ff0023]{background:var(--gradient-bg);border-bottom:1px solid var(--border-primary);flex-shrink:0;justify-content:space-between;align-items:flex-start;gap:24px;padding:24px 24px 20px;display:flex;position:relative}.header[data-v-c6ff0023]:after{content:"";background:linear-gradient(90deg,#0000,#18a0581a,#0000);height:1px;position:absolute;bottom:0;left:0;right:0}.header-text[data-v-c6ff0023]{flex:1}.header-text[data-v-c6ff0023] .n-h2{background:linear-gradient(135deg,#1f2937 0%,#374151 100%);-webkit-text-fill-color:transparent;letter-spacing:-.5px;-webkit-background-clip:text;background-clip:text;font-size:26px;font-weight:700}[data-theme=dark] .header-text[data-v-c6ff0023] .n-h2{background:linear-gradient(135deg,#f9fafb 0%,#d1d5db 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.search-input[data-v-c6ff0023]{flex-shrink:0;width:320px}.search-input[data-v-c6ff0023] .n-input{background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:10px;transition:all .2s}.search-input[data-v-c6ff0023] .n-input:hover{border-color:var(--border-secondary);box-shadow:var(--shadow-sm)}.search-input[data-v-c6ff0023] .n-input:focus-within{border-color:#18a058;box-shadow:0 0 0 3px #18a0581a}.content[data-v-c6ff0023]{background:var(--gradient-bg);flex:1;padding:20px 24px 24px;overflow-y:auto}.loading-container[data-v-c6ff0023]{justify-content:center;align-items:center;min-height:400px;display:flex}.loading-container.compact[data-v-c6ff0023]{min-height:180px}.projects-grid[data-v-c6ff0023]{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;display:grid}.ghost[data-v-c6ff0023]{opacity:.4}.chosen[data-v-c6ff0023]{transform:scale(1.05);cursor:move!important;box-shadow:0 8px 24px #0003!important}.drag[data-v-c6ff0023]{opacity:.8;transform:rotate(2deg);box-shadow:0 12px 32px #00000040!important}.search-hint[data-v-c6ff0023]{border:1px solid var(--border-primary);z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:.8;background:#ffffffe6;border-radius:8px;padding:10px 14px;transition:all .2s;position:fixed;bottom:24px;left:24px;box-shadow:0 4px 12px #00000014}[data-theme=dark] .search-hint[data-v-c6ff0023]{background:#1e293bf2;border:1px solid #47556999;box-shadow:0 4px 16px #0006}.search-hint[data-v-c6ff0023]:hover{opacity:1;transform:translateY(-2px);box-shadow:0 6px 16px #0000001f}[data-theme=dark] .search-hint[data-v-c6ff0023]:hover{box-shadow:0 6px 20px #00000080}.search-hint kbd[data-v-c6ff0023]{color:var(--text-secondary);background:var(--bg-primary);border:1px solid var(--border-secondary);box-shadow:0 2px 0 var(--border-primary), 0 1px 3px #0000001a;border-radius:4px;padding:4px 8px;font-family:SF Mono,Monaco,monospace;font-size:12px;font-weight:600;line-height:1.4;display:inline-block}[data-theme=dark] .search-hint kbd[data-v-c6ff0023]{color:#e2e8f0;background:#33415599;border:1px solid #475569cc;box-shadow:0 2px #1e293bcc,0 1px 4px #0006}.search-result-item[data-v-c6ff0023]{border:1px solid var(--border-primary);background:var(--bg-elevated);border-radius:6px;margin-bottom:16px;padding:12px}.search-result-header[data-v-c6ff0023]{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.search-result-title[data-v-c6ff0023]{align-items:center;gap:8px;display:flex}.search-match[data-v-c6ff0023]{background:var(--bg-secondary);border-radius:4px;align-items:flex-start;gap:8px;margin-top:6px;padding:6px;display:flex}.search-match-text[data-v-c6ff0023]{flex:1;line-height:1.6}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,D as a,H as t,I as l,K as s,O as r,S as n,V as o,W as i,Z as u,_t as c,b as d,et as p,g as v,gt as m,i as f,m as y,mt as h,p as g,r as j,st as _,w as k,x as b}from"./vue-vendor-Cr_NLmXY.js";import{t as w}from"./headers-nTUGmJee.js";import{$ as x,A as C,H as z,M as $,O as N,ct as P,ft as M,k as A,st as I,ut as T}from"./index-BXWpib7P.js";import{i as D,s as K,t as L}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{l as O}from"./light-DeIjG9s_.js";import{K as U,Nt as S,g as E,i as H,r as R}from"./icons-C6KNTFqo.js";import{n as q,t as B}from"./sessions-Xl0HAvhA.js";import{p as F,t as V}from"./sessions-B4RD8wDx.js";import{t as W}from"./clipboard-B46yyoz_.js";import{i as Z,t as G}from"./platforms-BdTllxKt.js";import{n as J,t as Q}from"./session-visibility-BAmxh3cK.js";var X={class:"card-content"},Y={class:"header-row"},ee={class:"project-name"},ae={class:"stats-row"},te=L({__name:"ProjectCard",props:{project:{type:Object,required:!0}},emits:["click","delete"],setup(t,{emit:l}){const s=t,o=l,u=_(!1);function v(){o("click")}function m(){o("delete",s.project)}const f=d(()=>s.project?.displayName||s.project?.name||""),g=d(()=>s.project?.path||s.project?.fullPath||s.project?.name||""),j=d(()=>s.project?.sessionCount||0),w=d(()=>s.project?.lastUsed),x=d(()=>{const e=["#18a058","#2080f0","#f0a020","#d03050","#9333ea","#06b6d4"];return e[(s.project?.name||"").split("").reduce((e,a)=>e+a.charCodeAt(0),0)%e.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(l,s)=>(i(),k("div",{class:"project-card",onClick:v,onMouseenter:s[0]||(s[0]=e=>u.value=!0),onMouseleave:s[1]||(s[1]=e=>u.value=!1)},[b("div",X,[b("div",Y,[r(h(D),{size:"18",color:x.value},{default:p(()=>[r(h(U))]),_:1},8,["color"]),b("span",ee,c(f.value),1),!t.project.readOnly&&u.value?(i(),n(h(K),{key:0,text:"",type:"error",size:"tiny",class:"delete-btn",onClick:y(m,["stop"])},{icon:p(()=>[r(h(D),{size:"14"},{default:p(()=>[r(h(R))]),_:1})]),_:1})):e("",!0)]),r(h(C),{depth:"3",class:"project-path"},{default:p(()=>[a(c(g.value),1)]),_:1}),b("div",ae,[r(h(T),{size:"tiny",bordered:!1,type:"success"},{default:p(()=>[a(c(j.value)+" 会话 ",1)]),_:1}),w.value?(i(),n(h(C),{key:0,depth:"3",class:"last-used"},{default:p(()=>[a(c(z(w.value)),1)]),_:1})):e("",!0)])])],32))}},[["__scopeId","data-v-4396493e"]]),le={class:"project-list-container"},se={class:"header"},re={class:"header-text"},ne={key:0,class:"loading-container"},oe={key:1,class:"loading-container compact"},ie={key:3,class:"projects-grid"},ue={class:"search-hint"},ce={style:{"margin-bottom":"16px"}},de={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},pe={class:"search-result-header"},ve={class:"search-result-title"},me=L({__name:"ProjectList",setup(y){const L=f(),R=j(),X=B(),Y=G(),ee=d(()=>Z(R)),ae=ee.value,me=_("");let fe=null;const ye=_([]),he=_(null),ge=_(!1),je=_(""),_e=_(null),ke=_(!1),be=_(null),we=_("workspace"),xe=_(null),Ce=[{label:"全工作区",value:"workspace"},{label:"当前项目",value:"current"},{label:"指定项目",value:"project"}],ze=d(()=>X.currentProject||ye.value[0]?.name||null),$e=d(()=>{const e=ye.value.find(e=>e.name===ze.value);return e?.displayName||e?.name||ze.value||"未选择项目"}),Ne=e=>e.map(e=>({label:e.displayName&&e.displayName!==e.name?`${e.displayName} (${e.name})`:e.name,value:e.name})),Pe=_([]);function Me(e){if(e?.readOnly)return;const a=e.fullPath||e.name,t=e.sessionCount||0;N.warning({title:"删除项目",content:`确定要删除项目 "${a}" 吗?\n\n当前项目包含 ${t} 个会话,删除后所有会话数据将无法恢复!`,positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await X.deleteProject(e.name),A.success("项目已删除")}catch(a){A.error("删除失败: "+a.message)}}})}async function Ae(){try{const a=(e=ee.value,Y.get(e)?.command||e);if("manual"===(await W(a))?.method)return void A.warning("自动复制失败,已弹出手动复制框");A.success("基础启动命令已复制到剪贴板")}catch(a){A.error("复制失败: "+a.message)}var e}async function Ie(){if(!je.value)return;let e=null;if("current"===we.value){if(e=ze.value,!e)return void A.warning("当前没有可搜索的项目")}else if("project"===we.value&&(e=xe.value,!e))return void A.warning("请选择要搜索的项目");ke.value=!0;try{const a=await F(je.value,35,ee.value,{projectName:e,limit:35}),t=J(Array.isArray(a?.sessions)?a.sessions:Array.isArray(a)?a:[]);_e.value={...a&&"object"==typeof a&&!Array.isArray(a)?a:{},keyword:je.value,sessions:t,totalMatches:t.reduce((e,a)=>e+(Number(a.matchCount)||0),0),scope:we.value,projectName:e}}catch(a){A.error("搜索失败: "+a.message)}finally{ke.value=!1}}async function Te(e){const a=String(e||"").trim();if(a)try{const e=await q(ee.value,{page:1,limit:50,query:a}),t=Q(e?.projects);Pe.value=Ne(t)}catch(t){}else Pe.value=Ne(ye.value)}function De(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(),ge.value=!0,l(()=>{be.value?.focus()}))}return u(ye,e=>{Pe.value=Ne(e)},{immediate:!0}),u(()=>X.projects,e=>{ye.value=[...e]}),u(me,e=>{fe&&clearTimeout(fe),fe=setTimeout(()=>{X.fetchProjects({query:e}).catch(()=>{})},180)}),u(ge,e=>{e||(je.value="",_e.value=null,we.value="workspace",xe.value=null)}),u(ee,e=>{X.setChannel(e),X.fetchProjects()},{immediate:!0}),o(()=>{document.addEventListener("keydown",Ke)}),t(()=>{fe&&clearTimeout(fe),X.pauseProjectRefresh(ae),document.removeEventListener("keydown",Ke)}),(t,l)=>(i(),k("div",le,[b("div",se,[b("div",re,[r(h(w),{style:{margin:"0"}},{default:p(()=>[...l[5]||(l[5]=[a("我的项目",-1)])]),_:1}),r(h(C),{depth:"3"},{default:p(()=>[a("选择一个项目查看会话(共 "+c(h(X).projects.length)+" 个)",1)]),_:1})]),r(h(z),null,{default:p(()=>[r(h(K),{type:"primary",size:"medium",onClick:Ae},{icon:p(()=>[r(h(D),null,{default:p(()=>[r(h(S))]),_:1})]),default:p(()=>[l[6]||(l[6]=a(" 新建项目 ",-1))]),_:1}),r(h(I),{value:me.value,"onUpdate:value":l[0]||(l[0]=e=>me.value=e),placeholder:"搜索项目...",clearable:"",class:"search-input"},{prefix:p(()=>[r(h(D),null,{default:p(()=>[r(h(E))]),_:1})]),_:1},8,["value"])]),_:1})]),b("div",{class:"content",ref_key:"contentEl",ref:he},[h(X).loading&&0===h(X).projects.length&&!h(X).projectsPending?(i(),k("div",ne,[r(h($),{size:"large"},{description:p(()=>[...l[7]||(l[7]=[a(" 加载项目列表... ",-1)])]),_:1})])):h(X).projectsPending?(i(),k("div",oe,[r(h($),{size:"small"},{description:p(()=>[...l[8]||(l[8]=[a(" 正在生成项目列表... ",-1)])]),_:1})])):h(X).error&&0===h(X).projects.length?(i(),n(h(P),{key:2,type:"error",title:"加载失败",style:{"margin-top":"20px"}},{default:p(()=>[a(c(h(X).error),1)]),_:1})):ye.value.length>0?(i(),k("div",ie,[(i(!0),k(v,null,s(ye.value,e=>(i(),n(te,{key:e.name,project:e,onClick:a=>{return t=e.name,void L.push({name:"cli-sessions",params:{platform:ee.value,projectName:t}});var t},onDelete:Me},null,8,["project","onClick"]))),128))])):e("",!0),h(X).loading||h(X).error||h(X).projectsPending||0!==h(X).projects.length?e("",!0):(i(),n(h(M),{key:4,description:me.value?"没有匹配的项目":"没有找到项目",style:{"margin-top":"60px"}},{icon:p(()=>[r(h(D),null,{default:p(()=>[r(h(U))]),_:1})]),_:1},8,["description"]))],512),b("div",ue,[r(h(C),{depth:"3",style:{"font-size":"12px"}},{default:p(()=>[...l[9]||(l[9]=[b("kbd",null,"Cmd",-1),a(" / ",-1),b("kbd",null,"Ctrl",-1),a(" + ",-1),b("kbd",null,"K",-1),a(" 全局搜索 ",-1)])]),_:1})]),r(h(O),{show:ge.value,"onUpdate:show":l[4]||(l[4]=e=>ge.value=e),preset:"card",title:"全局搜索",style:m([{width:"800px","max-width":"90vw"},{marginTop:"80px"}])},{default:p(()=>[b("div",ce,[r(h(I),{ref_key:"globalSearchInputRef",ref:be,value:je.value,"onUpdate:value":l[1]||(l[1]=e=>je.value=e),placeholder:"搜索对话内容...",clearable:"",onKeyup:g(Ie,["enter"]),disabled:ke.value},{prefix:p(()=>[r(h(D),null,{default:p(()=>[r(h(E))]),_:1})]),suffix:p(()=>[r(h(K),{text:"",onClick:Ie,disabled:!je.value||ke.value,loading:ke.value},{default:p(()=>[...l[10]||(l[10]=[a(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])]),r(h(z),{align:"center",style:{"margin-bottom":"16px"}},{default:p(()=>[r(h(C),{depth:"3"},{default:p(()=>[...l[11]||(l[11]=[a("搜索范围",-1)])]),_:1}),r(h(x),{value:we.value,"onUpdate:value":l[2]||(l[2]=e=>we.value=e),size:"small",options:Ce,style:{width:"130px"},disabled:ke.value},null,8,["value","disabled"]),"project"===we.value?(i(),n(h(x),{key:0,value:xe.value,"onUpdate:value":l[3]||(l[3]=e=>xe.value=e),size:"small",filterable:"",remote:"",clearable:"",placeholder:"选择项目",options:Pe.value,onSearch:Te,style:{"min-width":"240px"},disabled:ke.value},null,8,["value","options","disabled"])):"current"===we.value&&ze.value?(i(),n(h(T),{key:1,size:"small",bordered:!1},{default:p(()=>[a(c($e.value),1)]),_:1})):e("",!0)]),_:1}),_e.value?(i(),k("div",de,[r(h(P),{type:"info",style:{"margin-bottom":"16px"}},{default:p(()=>[a(' 关键词 "'+c(_e.value.keyword)+'" 共找到 '+c(_e.value.totalMatches)+" 处匹配 ",1)]),_:1}),(i(!0),k(v,null,s(_e.value.sessions,t=>(i(),k("div",{key:`${t.channel||ee.value}-${t.projectName}-${t.projectFullPath||""}-${t.sessionId}`,class:"search-result-item"},[b("div",pe,[b("div",ve,[r(h(C),{strong:"",style:{"font-size":"15px","font-weight":"700"}},{default:p(()=>[a(c(t.projectDisplayName),1)]),_:2},1024),r(h(C),{depth:"2",style:{margin:"0 8px"}},{default:p(()=>[...l[12]||(l[12]=[a("·",-1)])]),_:1}),r(h(C),{strong:""},{default:p(()=>[a(c(t.alias?`${t.alias} (${t.sessionId.substring(0,8)})`:t.sessionId.substring(0,8)),1)]),_:2},1024),r(h(T),{size:"small",bordered:!1},{default:p(()=>[a(c(t.matchCount)+" 个匹配",1)]),_:2},1024)]),t.readOnly?e("",!0):(i(),n(h(K),{key:0,size:"small",type:"primary",onClick:e=>async function(e,a,t=ee.value){try{const{copyResult:l}=await V(e,a,t||ee.value);"manual"===l?.method?A.warning("自动复制失败,已弹出手动复制框"):A.success("启动命令已复制到剪贴板"),ge.value=!1}catch(l){A.error("复制失败: "+l.message)}}(t.projectName,t.sessionId,t.channel)},{icon:p(()=>[r(h(D),null,{default:p(()=>[r(h(H))]),_:1})]),default:p(()=>[l[13]||(l[13]=a(" 使用对话 ",-1))]),_:1},8,["onClick"]))]),(i(!0),k(v,null,s(t.matches,(e,t)=>(i(),k("div",{key:t,class:"search-match"},[r(h(T),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:p(()=>[a(c("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),r(h(C),{depth:"3",class:"search-match-text",innerHTML:De(e.context,_e.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===_e.value.sessions.length?(i(),n(h(M),{key:0,description:"没有找到匹配的内容"})):e("",!0)])):e("",!0)]),_:1},8,["show"])]))}},[["__scopeId","data-v-c6ff0023"]]);export{me as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,D as a,K as s,O as t,S as l,W as i,Z as n,_t as r,at as u,b as c,et as o,g as d,ht as p,mt as v,st as m,w as f,x as y}from"./vue-vendor-Cr_NLmXY.js";import{n as g,t as b}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as k}from"./DrawerContent-BYlV968f.js";import{i as h,s as _,t as w}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{Et as z,J as P,M as j,O as x,Y as C,j as B,k as I,st as D,ut as U}from"./index-BXWpib7P.js";import{$,Nt as O,Q as q,R as A,dt as E,jt as T,nt as L,r as M,st as S,x as V,yt as W}from"./icons-C6KNTFqo.js";import{t as R}from"./client-B31QOzWk.js";import{t as Z}from"./MarkdownEditor-Bf9QKKaV.js";var F={class:"form-header"},J={class:"form-container"},K={class:"form-section"},N={class:"section-title"},Q={class:"form-item"},Y={key:0,class:"form-error"},G={class:"form-item"},H={class:"form-item"},X={class:"form-section"},ee={class:"section-title"},ae={class:"apps-toggles"},se={class:"app-name"},te={key:0,class:"platform-empty"},le={class:"form-section content-section"},ie={class:"section-title"},ne={class:"form-footer"},re=w({__name:"PromptsFormDrawer",props:{visible:{type:Boolean,default:!1},editingPreset:{type:Object,default:null},existingIds:{type:Array,default:()=>[]},platforms:{type:Array,default:()=>[]}},emits:["update:visible","saved"],setup(p,{emit:w}){const{drawerWidth:P}=b(600),j=p,x=w,C=c({get:()=>j.visible,set:e=>x("update:visible",e)}),U=c(()=>!!j.editingPreset),{byCapability:O}=z(),q=c(()=>j.platforms.length>0?j.platforms:O("prompts"));function E(){return Object.fromEntries(q.value.map(e=>[e.key,!0]))}const L=m(!1),M=m(""),V=u({id:"",name:"",description:"",content:"",apps:{}});async function W(){if(V.id.trim()?/^[a-zA-Z0-9_-]+$/.test(V.id)?!U.value&&j.existingIds.includes(V.id)?(M.value="该 ID 已被使用",0):(M.value="",1):(M.value="ID 只能包含字母、数字、下划线和连字符",0):(M.value="预设 ID 不能为空",0))if(V.name.trim()){L.value=!0;try{const e={id:V.id.trim(),name:V.name.trim(),description:V.description.trim(),content:V.content,apps:U.value?{...V.apps}:Object.fromEntries(q.value.map(e=>[e.key,!0===V.apps[e.key]]))};j.editingPreset?.isBuiltin&&(e.isBuiltin=!0),(await async function(e){return(await R.post("/prompts/presets",e)).data}(e)).success&&(I.success(U.value?"保存成功":"创建成功"),x("saved"),C.value=!1)}catch(e){I.error("保存失败: "+e.message)}finally{L.value=!1}}else I.error("预设名称不能为空")}function re(){C.value=!1}return n(()=>j.visible,e=>{e&&(j.editingPreset?(V.id=j.editingPreset.id||"",V.name=j.editingPreset.name||"",V.description=j.editingPreset.description||"",V.content=j.editingPreset.content||"",V.apps=j.editingPreset.apps?{...j.editingPreset.apps}:E()):(V.id="",V.name="",V.description="",V.content="",V.apps=E()),M.value="")}),(n,u)=>(i(),l(v(g),{show:C.value,"onUpdate:show":u[4]||(u[4]=e=>C.value=e),width:v(P),placement:"right","show-mask":!0},{default:o(()=>[t(v(k),{closable:"","native-scrollbar":!1},{header:o(()=>[y("div",F,[t(v(h),{size:18,class:"header-icon"},{default:o(()=>[t(v($))]),_:1}),y("span",null,r(U.value?"编辑预设":"新建预设"),1)])]),footer:o(()=>[y("div",ne,[t(v(_),{onClick:re},{default:o(()=>[...u[12]||(u[12]=[a("取消",-1)])]),_:1}),t(v(_),{type:"primary",onClick:W,loading:L.value},{default:o(()=>[a(r(U.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:o(()=>[y("div",J,[y("div",K,[y("div",N,[t(v(h),{size:16},{default:o(()=>[t(v(A))]),_:1}),u[5]||(u[5]=y("span",null,"基本信息",-1))]),y("div",Q,[u[6]||(u[6]=y("label",{class:"form-label"},[a("预设 ID "),y("span",{class:"required"},"*")],-1)),t(v(D),{value:V.id,"onUpdate:value":u[0]||(u[0]=e=>V.id=e),placeholder:"唯一标识符,如 my-preset",disabled:U.value&&p.editingPreset?.isBuiltin},null,8,["value","disabled"]),M.value?(i(),f("p",Y,r(M.value),1)):e("",!0)]),y("div",G,[u[7]||(u[7]=y("label",{class:"form-label"},[a("名称 "),y("span",{class:"required"},"*")],-1)),t(v(D),{value:V.name,"onUpdate:value":u[1]||(u[1]=e=>V.name=e),placeholder:"预设名称"},null,8,["value"])]),y("div",H,[u[8]||(u[8]=y("label",{class:"form-label"},"描述",-1)),t(v(D),{value:V.description,"onUpdate:value":u[2]||(u[2]=e=>V.description=e),placeholder:"简短描述这个预设的用途"},null,8,["value"])])]),y("div",X,[y("div",ee,[t(v(h),{size:16},{default:o(()=>[t(v(T))]),_:1}),u[9]||(u[9]=y("span",null,"生效范围",-1))]),y("div",ae,[(i(!0),f(d,null,s(q.value,e=>(i(),f("label",{key:e.key,class:"app-toggle"},[t(v(B),{value:V.apps[e.key],"onUpdate:value":a=>V.apps[e.key]=a},null,8,["value","onUpdate:value"]),y("span",se,r(e.promptLabel||e.label||e.title||e.key),1)]))),128)),0===q.value.length?(i(),f("span",te," 当前没有可用的 Prompt 平台 ")):e("",!0)])]),y("div",le,[y("div",ie,[t(v(h),{size:16},{default:o(()=>[t(v(S))]),_:1}),u[10]||(u[10]=y("span",null,"提示词内容",-1)),u[11]||(u[11]=y("span",{class:"content-hint"},"支持 Markdown 格式",-1))]),t(Z,{modelValue:V.content,"onUpdate:modelValue":u[3]||(u[3]=e=>V.content=e),rows:16,"min-height":300,placeholder:"# 系统提示词\n\n在这里编写你的系统提示词..."},null,8,["modelValue"])])])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-1e68a77e"]]),ue={class:"drawer-header"},ce={class:"header-title"},oe={class:"prompts-container"},de={class:"status-card"},pe={class:"status-info"},ve={class:"status-text"},me={class:"status-value"},fe={class:"status-actions"},ye={class:"stats-bar"},ge={class:"stats-text"},be={class:"preset-list"},ke={key:0,class:"empty-state"},he={key:1,class:"preset-cards"},_e={class:"card-header"},we={class:"card-title"},ze={class:"preset-name"},Pe={class:"card-actions"},je={key:0,class:"card-desc"},xe={class:"card-apps"},Ce={class:"card-preview"},Be={class:"preview-content"},Ie=w({__name:"PromptsDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(u,{emit:w}){const{drawerWidth:B}=b(720),D=u,A=w,T=c({get:()=>D.visible,set:e=>A("update:visible",e)}),S=m(!1),Z=m({}),F=m(null),J=m(!1),K=m(null),N=m(null),Q=m(!1),{byCapability:Y}=z(),G=c(()=>Y("prompts")),H=c(()=>{const e=Object.values(Z.value),a=e.filter(e=>!e.isBuiltin),s=e.filter(e=>e.isBuiltin);return a.sort((e,a)=>e.id===F.value?-1:a.id===F.value?1:(a.updatedAt||0)-(e.updatedAt||0)),[...a,...s]}),X=c(()=>H.value.length),ee=c(()=>Object.keys(Z.value)),ae=c(()=>F.value?Z.value[F.value]:null),se=c(()=>{const e=H.value;return{builtin:e.filter(e=>e.isBuiltin).length,custom:e.filter(e=>!e.isBuiltin).length}}),te=c(()=>G.value.map(e=>({label:`从 ${e.promptLabel||e.label||e.title||e.key} 导入`,key:e.key})));function le(e){if(!e)return"";let a=e.split("\n").slice(0,4).join("\n");return e.split("\n").length>4&&(a+="\n..."),a.substring(0,200)}async function ie(){S.value=!0;try{const e=await async function(){return(await R.get("/prompts/presets")).data}();e.success&&(Z.value=e.presets,F.value=e.activePresetId)}catch(e){I.error("加载预设失败")}finally{S.value=!1}}async function ne(e){N.value=e.id;try{(await async function(e){return(await R.post(`/prompts/presets/${e}/activate`)).data}(e.id)).success&&(F.value=e.id,I.success(`已激活预设 "${e.name}"`))}catch(a){I.error("激活失败: "+a.message)}finally{N.value=null}}async function Ie(){x.warning({title:"移除提示词",content:"确定要移除当前激活的提示词吗?这将删除各平台的提示词文件。",positiveText:"移除",negativeText:"取消",onPositiveClick:async()=>{Q.value=!0;try{(await async function(){return(await R.post("/prompts/deactivate")).data}()).success&&(F.value=null,I.success("已移除提示词"))}catch(e){I.error("移除失败: "+e.message)}finally{Q.value=!1}}})}function De(e){x.warning({title:"删除确认",content:`确定要删除预设 "${e.name}" 吗?此操作不可恢复。`,positiveText:"删除",negativeText:"取消",onPositiveClick:async()=>{try{(await async function(e){return(await R.delete(`/prompts/presets/${e}`)).data}(e.id)).success&&(delete Z.value[e.id],I.success("删除成功"))}catch(a){I.error("删除失败: "+a.message)}}})}async function Ue(e){try{const a=await async function(e,a){return(await R.post(`/prompts/import/${e}`,{name:a})).data}(e);a.success&&(Z.value[a.preset.id]=a.preset,I.success(a.message))}catch(a){I.error("导入失败: "+a.message)}}function $e(){K.value=null,J.value=!0}function Oe(){ie()}return n(()=>D.visible,e=>{e&&ie()},{immediate:!0}),(n,u)=>(i(),f(d,null,[t(v(g),{show:T.value,"onUpdate:show":u[0]||(u[0]=e=>T.value=e),width:v(B),placement:"right","show-mask":!0},{default:o(()=>[t(v(k),{title:"Prompts 管理",closable:"","native-scrollbar":!1},{header:o(()=>[y("div",ue,[y("div",ce,[t(v(h),{size:20,class:"header-icon"},{default:o(()=>[t(v($))]),_:1}),u[2]||(u[2]=y("span",null,"Prompts 管理",-1))])])]),default:o(()=>[y("div",oe,[y("div",de,[y("div",pe,[ae.value?(i(),f(d,{key:0},[t(v(h),{class:"status-icon active",size:18},{default:o(()=>[t(v(W))]),_:1}),y("div",ve,[u[3]||(u[3]=y("span",{class:"status-label"},"当前激活:",-1)),y("span",me,r(ae.value.name),1)])],64)):(i(),f(d,{key:1},[t(v(h),{class:"status-icon inactive",size:18},{default:o(()=>[t(v(V))]),_:1}),u[4]||(u[4]=y("div",{class:"status-text"},[y("span",{class:"status-label"},"未激活任何提示词")],-1))],64))]),y("div",fe,[t(v(P),{trigger:"click",options:te.value,onSelect:Ue},{default:o(()=>[t(v(_),{size:"small",tertiary:"",class:"action-btn"},{icon:o(()=>[t(v(h),{size:14},{default:o(()=>[t(v(q))]),_:1})]),default:o(()=>[u[5]||(u[5]=a(" 导入 ",-1))]),_:1})]),_:1},8,["options"]),t(v(_),{size:"small",tertiary:"",type:"primary",class:"action-btn",onClick:$e},{icon:o(()=>[t(v(h),{size:14},{default:o(()=>[t(v(O))]),_:1})]),default:o(()=>[u[6]||(u[6]=a(" 新建 ",-1))]),_:1}),ae.value?(i(),l(v(C),{key:0,trigger:"hover"},{trigger:o(()=>[t(v(_),{size:"small",quaternary:"",class:"action-btn remove-btn",onClick:Ie,loading:Q.value},{icon:o(()=>[t(v(h),{size:16},{default:o(()=>[t(v(E))]),_:1})]),default:o(()=>[u[7]||(u[7]=a(" 移除 ",-1))]),_:1},8,["loading"])]),default:o(()=>[u[8]||(u[8]=a(" 删除各平台的提示词文件 ",-1))]),_:1})):e("",!0)])]),y("div",ye,[y("span",ge,[a(" 共 "+r(X.value)+" 个预设 ",1),X.value>0?(i(),f(d,{key:0},[a(" · 自定义: "+r(se.value.custom)+" · 内置模板: "+r(se.value.builtin),1)],64)):e("",!0)])]),y("div",be,[t(v(j),{show:S.value},{default:o(()=>[0!==H.value.length||S.value?(i(),f("div",he,[(i(!0),f(d,null,s(H.value,n=>(i(),f("div",{key:n.id,class:p(["preset-card",{active:n.id===F.value}])},[y("div",_e,[y("div",we,[n.id===F.value?(i(),l(v(h),{key:0,class:"active-icon",size:16},{default:o(()=>[t(v(W))]),_:1})):e("",!0),y("span",ze,r(n.name),1),n.isBuiltin?(i(),l(v(U),{key:1,size:"tiny",bordered:!1,type:"info"},{default:o(()=>[...u[11]||(u[11]=[a("模板",-1)])]),_:1})):e("",!0),n.isImported?(i(),l(v(U),{key:2,size:"tiny",bordered:!1,type:"warning"},{default:o(()=>[...u[12]||(u[12]=[a("已导入",-1)])]),_:1})):e("",!0)]),y("div",Pe,[n.id!==F.value?(i(),l(v(_),{key:0,size:"tiny",type:"primary",onClick:e=>ne(n),loading:N.value===n.id},{default:o(()=>[...u[13]||(u[13]=[a(" 激活 ",-1)])]),_:1},8,["onClick","loading"])):e("",!0),t(v(_),{quaternary:"",size:"tiny",onClick:e=>function(e){K.value=e,J.value=!0}(n)},{icon:o(()=>[t(v(h),null,{default:o(()=>[t(v(L))]),_:1})]),_:1},8,["onClick"]),n.isBuiltin?e("",!0):(i(),l(v(_),{key:1,quaternary:"",size:"tiny",onClick:e=>De(n)},{icon:o(()=>[t(v(h),null,{default:o(()=>[t(v(M))]),_:1})]),_:1},8,["onClick"]))])]),n.description?(i(),f("p",je,r(n.description),1)):e("",!0),y("div",xe,[u[14]||(u[14]=y("span",{class:"apps-label"},"生效范围:",-1)),(i(!0),f(d,null,s(G.value,e=>(i(),l(v(U),{key:e.key,type:n.apps?.[e.key]?"success":"default",size:"tiny",bordered:!1},{default:o(()=>[a(r(e.promptLabel||e.label||e.title||e.key),1)]),_:2},1032,["type"]))),128))]),y("div",Ce,[y("pre",Be,r(le(n.content)),1)])],2))),128))])):(i(),f("div",ke,[t(v(h),{size:48,class:"empty-icon"},{default:o(()=>[t(v($))]),_:1}),u[9]||(u[9]=y("p",{class:"empty-title"},"暂无预设",-1)),u[10]||(u[10]=y("p",{class:"empty-desc"},'点击上方"新建"按钮创建系统提示词预设',-1))]))]),_:1},8,["show"])])])]),_:1})]),_:1},8,["show","width"]),t(re,{visible:J.value,"onUpdate:visible":u[1]||(u[1]=e=>J.value=e),"editing-preset":K.value,"existing-ids":ee.value,platforms:G.value,onSaved:Oe},null,8,["visible","editing-preset","existing-ids","platforms"])],64))}},[["__scopeId","data-v-61810a34"]]);export{Ie as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DcNxTHDL.js";import{D as s,K as a,M as t,O as n,S as i,W as o,Z as l,b as r,et as c,g as u,mt as d,st as m,w as p}from"./vue-vendor-Cr_NLmXY.js";import{n as h,t as v}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as f}from"./DrawerContent-BYlV968f.js";import{M as w,O as y,ft as g,k as j,st as _}from"./index-BXWpib7P.js";import{i as k,t as x}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{xt as b}from"./icons-C6KNTFqo.js";import{t as C}from"./SessionCard-DwzxeSe9.js";import{m as I,n as S,o as D,t as O}from"./sessions-B4RD8wDx.js";import{n as M}from"./session-visibility-BAmxh3cK.js";var P=e({default:()=>A}),R={key:0,class:"loading-container"},z={key:1,class:"sessions-list"},A=x({__name:"RecentSessionsDrawer",props:{visible:{type:Boolean,default:!1},channel:{type:String,default:"claude"}},emits:["update:visible"],setup(e,{emit:x}){const{drawerWidth:P}=v(720),A=e,K=x,N=m(!1),T=m([]),U=m(!1),W=r(()=>A.channel);async function B(){U.value=!0;try{const e=await D(10,A.channel);T.value=M(e.sessions)}catch(e){j.error("加载失败: "+e.message)}finally{U.value=!1}}async function E(e){const s=e.alias||"";let a=s;const n=await new Promise(e=>{const n=y.create({title:"设置别名",content:()=>t(_,{defaultValue:s,placeholder:"请输入会话别名","onUpdate:value":e=>{a=e},onKeyup:s=>{"Enter"===s.key&&(n.destroy(),e(a.trim()))}}),positiveText:"确定",negativeText:"取消",onPositiveClick:()=>{e(a.trim())},onNegativeClick:()=>{e(null)}})});if(null!==n)try{n?(await I(e.sessionId,n),j.success("别名设置成功")):(await S(e.sessionId),j.success("别名已删除")),await B()}catch(i){j.error("操作失败: "+i.message)}}async function G(e){try{const{copyResult:s}=await O(e.projectName,e.sessionId,A.channel);if("manual"===s?.method)return void j.warning("自动复制失败,已弹出手动复制框");j.success("启动命令已复制到剪贴板")}catch(s){j.error("复制失败: "+s.message)}}return l(()=>A.visible,e=>{N.value=e,e&&B()},{immediate:!0}),l(N,e=>{K("update:visible",e)}),l(()=>A.channel,()=>{N.value&&B()}),(e,t)=>(o(),i(d(h),{show:N.value,"onUpdate:show":t[0]||(t[0]=e=>N.value=e),width:d(P),placement:"right","show-close":!0},{default:c(()=>[n(d(f),{title:"claude"===A.channel?"Claude 最新对话":"codex"===A.channel?"Codex 最新对话":"gemini"===A.channel?"Gemini 最新对话":"opencode"===A.channel?"OpenCode 最新对话":"omp"===A.channel?"OMP 最新对话":"最新对话","native-scrollbar":!1,closable:""},{default:c(()=>[U.value?(o(),p("div",R,[n(d(w),{size:"medium"},{description:c(()=>[...t[1]||(t[1]=[s("加载中...",-1)])]),_:1})])):T.value.length>0?(o(),p("div",z,[(o(!0),p(u,null,a(T.value,e=>(o(),i(C,{key:e.sessionId,session:e,channel:W.value,"show-project":!0,"hide-fork":!0,"hide-delete":!0,onSetAlias:E,onLaunch:G},null,8,["session","channel"]))),128))])):(o(),i(d(g),{key:2,description:"暂无最近使用的会话",style:{"margin-top":"60px"}},{icon:c(()=>[n(d(k),{size:"48"},{default:c(()=>[n(d(b))]),_:1})]),_:1}))]),_:1},8,["title"])]),_:1},8,["show","width"]))}},[["__scopeId","data-v-49e4936a"]]);export{P as n,A as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.session-item[data-v-302ead4e]{background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:8px;align-items:center;gap:12px;margin-bottom:8px;padding:16px;transition:all .2s;display:flex}.session-item[data-v-302ead4e]:hover{border-color:#18a058;box-shadow:0 2px 8px #18a0581a}.session-left[data-v-302ead4e]{flex:1;align-items:center;gap:16px;min-width:0;display:flex}.session-icon[data-v-302ead4e]{flex-shrink:0}.session-info[data-v-302ead4e]{flex:1;min-width:0}.session-header[data-v-302ead4e]{flex-direction:column;gap:4px;display:flex}.session-title-row[data-v-302ead4e]{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.session-title[data-v-302ead4e]{color:var(--text-primary);font-size:14px;font-weight:500}.session-meta[data-v-302ead4e]{gap:16px;display:flex}.meta-item[data-v-302ead4e]{color:var(--text-tertiary);align-items:center;gap:4px;font-size:13px;display:flex}.session-message[data-v-302ead4e]{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;margin-top:6px;font-size:13px;overflow:hidden}.session-path[data-v-302ead4e]{color:var(--text-quaternary);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:12px;overflow:hidden}.session-actions[data-v-302ead4e]{flex-shrink:0;gap:8px;display:flex}@media (width<=1024px){.session-item[data-v-302ead4e]{gap:10px;padding:14px}.session-left[data-v-302ead4e],.session-meta[data-v-302ead4e]{gap:12px}.session-actions[data-v-302ead4e]{gap:6px}}@media (width<=768px){.session-item[data-v-302ead4e]{flex-direction:column;align-items:stretch;gap:12px;padding:12px}.session-left[data-v-302ead4e]{gap:10px}.session-icon[data-v-302ead4e]{display:none}.session-meta[data-v-302ead4e]{flex-wrap:wrap;gap:8px}.session-actions[data-v-302ead4e]{flex-wrap:wrap;justify-content:flex-end;gap:6px}.session-actions[data-v-302ead4e] .n-button{padding:0 10px;font-size:12px}}@media (width<=640px){.session-item[data-v-302ead4e]{border-radius:6px;gap:10px;padding:10px}.session-title[data-v-302ead4e]{font-size:13px}.session-meta[data-v-302ead4e]{gap:6px}.meta-item[data-v-302ead4e],.session-message[data-v-302ead4e]{font-size:12px}.session-path[data-v-302ead4e]{font-size:11px}.session-actions[data-v-302ead4e]{gap:4px}.session-actions[data-v-302ead4e] .n-button{height:26px;padding:0 8px;font-size:11px}}@media (width<=480px){.session-item[data-v-302ead4e]{margin-bottom:6px;padding:8px}.session-title-row[data-v-302ead4e]{flex-direction:column;align-items:flex-start;gap:4px}.session-title-row[data-v-302ead4e] .n-tag{margin:0!important}.session-meta[data-v-302ead4e]{flex-direction:column;align-items:flex-start;gap:4px}.session-actions[data-v-302ead4e]{justify-content:space-between}.session-actions[data-v-302ead4e] .n-button{flex:1;min-width:0}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as s,D as e,O as a,S as o,W as i,_t as t,b as l,et as n,mt as r,q as d,st as u,w as c,x as f}from"./vue-vendor-Cr_NLmXY.js";import{i as p,s as m,t as h}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{Y as y,ut as _}from"./index-BXWpib7P.js";import{Ct as k,Et as v,U as g,et as M,i as j,r as z,w}from"./icons-C6KNTFqo.js";var B={class:"session-left"},$={class:"session-icon"},F={class:"session-info"},C={class:"session-header"},D={class:"session-title-row"},b={class:"session-title"},x={class:"session-meta"},O={class:"meta-item"},P={key:0,class:"session-message"},S={key:1,class:"session-path"},I={class:"session-actions"},N=h({__name:"SessionCard",props:{session:{type:Object,required:!0},channel:{type:String,default:"claude"},showProject:{type:Boolean,default:!1},hideFork:{type:Boolean,default:!1},hideDelete:{type:Boolean,default:!1}},emits:["set-alias","launch","fork","delete"],setup(h,{emit:N}){const q=h,E=u(!1),G=l(()=>q.session.alias?`${q.session.alias} (${q.session.sessionId.substring(0,8)})`:q.session.sessionId);function K(s){const e=new Date(s),a=new Date-e,o=Math.floor(a/6e4),i=Math.floor(a/36e5),t=Math.floor(a/864e5);return o<1?"刚刚":o<60?`${o}分钟前`:i<24?`${i}小时前`:t<7?`${t}天前`:e.toLocaleDateString("zh-CN")}function L(s){if(!s)return"0 B";const e=Math.floor(Math.log(s)/Math.log(1024));return Math.round(s/Math.pow(1024,e)*100)/100+" "+["B","KB","MB","GB"][e]}return(l,u)=>(i(),c("div",{class:"session-item",onMouseenter:u[4]||(u[4]=s=>E.value=!0),onMouseleave:u[5]||(u[5]=s=>E.value=!1)},[f("div",B,[f("div",$,[a(r(p),{size:"24",color:"#18a058"},{default:n(()=>[a(r(k))]),_:1})]),f("div",F,[f("div",C,[f("div",D,[h.showProject&&h.session.projectDisplayName?(i(),o(r(_),{key:0,size:"small",type:"info",bordered:!1,style:{"margin-right":"8px"}},{default:n(()=>[e(t(h.session.projectDisplayName),1)]),_:1})):s("",!0),f("span",b,t(G.value),1),h.session.forkedFrom?(i(),o(r(y),{key:1,placement:"top"},{trigger:n(()=>[a(r(_),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:n(()=>[a(r(p),null,{default:n(()=>[a(r(g))]),_:1})]),default:n(()=>[u[6]||(u[6]=e(" Fork ",-1))]),_:1})]),default:n(()=>[f("span",null,"Fork 自 "+t(h.session.forkedFrom),1)]),_:1})):s("",!0)]),f("div",x,[f("span",O,[a(r(p),{size:"14"},{default:n(()=>[a(r(v))]),_:1}),e(" "+t(K(h.session.mtime)),1)]),a(r(_),{size:"small",bordered:!1,type:"info"},{icon:n(()=>[a(r(p),null,{default:n(()=>[a(r(M))]),_:1})]),default:n(()=>[e(" "+t(L(h.session.size)),1)]),_:1}),h.session.gitBranch?(i(),o(r(_),{key:0,size:"small",bordered:!1,type:"success"},{icon:n(()=>[a(r(p),null,{default:n(()=>[a(r(g))]),_:1})]),default:n(()=>[e(" "+t(h.session.gitBranch),1)]),_:1})):s("",!0)])]),h.session.firstMessage?(i(),c("div",P,t(h.session.firstMessage),1)):s("",!0),h.showProject&&h.session.projectFullPath?(i(),c("div",S," 路径: "+t(h.session.projectFullPath),1)):s("",!0)])]),f("div",I,[a(r(m),{size:"small",onClick:u[0]||(u[0]=s=>l.$emit("set-alias",h.session))},{icon:n(()=>[a(r(p),null,{default:n(()=>[a(r(w))]),_:1})]),default:n(()=>[u[7]||(u[7]=e(" 别名 ",-1))]),_:1}),h.session.readOnly?s("",!0):(i(),o(r(m),{key:0,type:"primary",size:"small",onClick:u[1]||(u[1]=s=>l.$emit("launch",h.session))},{icon:n(()=>[a(r(p),null,{default:n(()=>[a(r(j))]),_:1})]),default:n(()=>[u[8]||(u[8]=e(" 使用对话 ",-1))]),_:1})),h.hideFork||h.session.readOnly?s("",!0):(i(),o(r(m),{key:1,size:"small",onClick:u[2]||(u[2]=s=>l.$emit("fork",h.session))},{icon:n(()=>[a(r(p),null,{default:n(()=>[a(r(g))]),_:1})]),default:n(()=>[u[9]||(u[9]=e(" Fork ",-1))]),_:1})),h.hideDelete||h.session.readOnly?s("",!0):(i(),o(r(m),{key:2,size:"small",type:"error",onClick:u[3]||(u[3]=s=>l.$emit("delete",h.session))},{icon:n(()=>[a(r(p),null,{default:n(()=>[a(r(z))]),_:1})]),_:1})),d(l.$slots,"actions-extra",{},void 0,!0)])],32))}},[["__scopeId","data-v-302ead4e"]]);export{N as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.project-instruction-panel[data-v-f2f46409]{flex-direction:column;gap:12px;display:flex}.resource-path[data-v-f2f46409]{color:var(--text-tertiary);font-family:monospace;font-size:12px}.actions[data-v-f2f46409]{margin-top:4px}.hint[data-v-f2f46409]{font-size:11px}.unsupported-state[data-v-f2f46409]{color:var(--text-tertiary);text-align:center;padding:28px 12px}.project-mcp-panel[data-v-1ebbb765]{flex-direction:column;min-height:220px;display:flex}.panel-toolbar[data-v-1ebbb765]{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.resource-path[data-v-1ebbb765]{color:var(--text-tertiary);font-family:monospace;font-size:11px}.server-list[data-v-1ebbb765]{flex-direction:column;gap:8px;display:flex}.server-row[data-v-1ebbb765]{border:1px solid var(--border-primary);border-radius:6px;align-items:center;gap:12px;padding:10px;display:flex}.server-info[data-v-1ebbb765]{flex:1;min-width:0}.server-title[data-v-1ebbb765]{color:var(--text-primary);font-size:13px;font-weight:600}.server-spec[data-v-1ebbb765]{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;margin-top:3px;font-family:monospace;font-size:11px;overflow:hidden}.project-config-content[data-v-e9a405fe]{padding:2px 0 12px}.project-config-header[data-v-e9a405fe]{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.project-config-title[data-v-e9a405fe]{color:var(--text-primary);margin-bottom:4px;font-size:14px;font-weight:600}.project-path[data-v-e9a405fe]{text-overflow:ellipsis;white-space:nowrap;max-width:520px;font-family:monospace;font-size:11px;display:block;overflow:hidden}.unsupported-state[data-v-e9a405fe]{color:var(--text-tertiary);text-align:center;padding:36px 12px}.session-list-container[data-v-
|
|
1
|
+
.project-instruction-panel[data-v-f2f46409]{flex-direction:column;gap:12px;display:flex}.resource-path[data-v-f2f46409]{color:var(--text-tertiary);font-family:monospace;font-size:12px}.actions[data-v-f2f46409]{margin-top:4px}.hint[data-v-f2f46409]{font-size:11px}.unsupported-state[data-v-f2f46409]{color:var(--text-tertiary);text-align:center;padding:28px 12px}.project-mcp-panel[data-v-1ebbb765]{flex-direction:column;min-height:220px;display:flex}.panel-toolbar[data-v-1ebbb765]{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.resource-path[data-v-1ebbb765]{color:var(--text-tertiary);font-family:monospace;font-size:11px}.server-list[data-v-1ebbb765]{flex-direction:column;gap:8px;display:flex}.server-row[data-v-1ebbb765]{border:1px solid var(--border-primary);border-radius:6px;align-items:center;gap:12px;padding:10px;display:flex}.server-info[data-v-1ebbb765]{flex:1;min-width:0}.server-title[data-v-1ebbb765]{color:var(--text-primary);font-size:13px;font-weight:600}.server-spec[data-v-1ebbb765]{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;margin-top:3px;font-family:monospace;font-size:11px;overflow:hidden}.project-config-content[data-v-e9a405fe]{padding:2px 0 12px}.project-config-header[data-v-e9a405fe]{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.project-config-title[data-v-e9a405fe]{color:var(--text-primary);margin-bottom:4px;font-size:14px;font-weight:600}.project-path[data-v-e9a405fe]{text-overflow:ellipsis;white-space:nowrap;max-width:520px;font-family:monospace;font-size:11px;display:block;overflow:hidden}.unsupported-state[data-v-e9a405fe]{color:var(--text-tertiary);text-align:center;padding:36px 12px}.session-list-container[data-v-846e06b4]{box-sizing:border-box;flex-direction:column;width:100%;height:100%;display:flex}.header[data-v-846e06b4]{background:var(--bg-primary);border-bottom:1px solid var(--border-primary);flex-shrink:0;padding:24px 24px 16px}.content[data-v-846e06b4]{flex:1;padding:16px 24px 24px;overflow:hidden auto}.sessions-list[data-v-846e06b4]{position:relative;overflow:hidden}.back-button[data-v-846e06b4]{flex-shrink:0;margin-right:12px}.title-bar[data-v-846e06b4]{align-items:center;gap:16px;display:flex}.title-section[data-v-846e06b4]{flex:1;min-width:0}.title-with-count[data-v-846e06b4]{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:2px;display:flex}.title-section h2[data-v-846e06b4]{margin:0;font-size:20px}.session-count[data-v-846e06b4]{color:#666;font-size:14px}.total-size-tag[data-v-846e06b4]{margin-left:8px}.project-path[data-v-846e06b4]{color:#666;margin-bottom:2px;font-size:13px;display:block}.header-actions[data-v-846e06b4]{align-items:center;gap:12px;margin-left:4px;display:flex}.search-input[data-v-846e06b4]{flex-shrink:0;width:320px}.loading-container[data-v-846e06b4]{justify-content:center;align-items:center;min-height:400px;display:flex}.loading-container.compact[data-v-846e06b4]{min-height:180px}.session-item[data-v-846e06b4]{background:var(--bg-primary);border:1px solid var(--border-primary);cursor:pointer;border-radius:8px;align-items:center;gap:12px;margin-bottom:8px;padding:16px;transition:all .2s;display:flex}.session-item[data-v-846e06b4]:hover{border-color:#18a058;box-shadow:0 2px 8px #18a0581a}.session-item-selection-mode[data-v-846e06b4]{cursor:default}.session-item-selected[data-v-846e06b4]{background:#18a0580a;border-color:#18a058;box-shadow:0 0 0 2px #18a0581f}.selection-checkbox[data-v-846e06b4]{justify-content:center;align-items:center;width:24px;min-width:24px;display:flex}.session-left[data-v-846e06b4]{flex:1;align-items:center;gap:16px;min-width:0;display:flex}.session-icon[data-v-846e06b4]{flex-shrink:0}.session-info[data-v-846e06b4]{flex:1;min-width:0}.session-header[data-v-846e06b4]{align-items:center;margin-bottom:6px;display:flex}.session-title-row[data-v-846e06b4]{align-items:center;gap:8px;display:flex}.session-title[data-v-846e06b4]{text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;min-width:0;font-size:15px;font-weight:600;overflow:hidden}.session-meta[data-v-846e06b4]{align-items:center;gap:8px;margin-bottom:6px;font-size:13px;display:flex}.session-message[data-v-846e06b4]{text-overflow:ellipsis;white-space:nowrap;max-width:600px;font-size:13px;display:block;overflow:hidden}.session-message-empty[data-v-846e06b4]{opacity:.5;font-style:italic}.session-right[data-v-846e06b4]{flex-direction:column;flex-shrink:0;justify-content:flex-start;align-items:flex-end;gap:12px;min-width:280px;display:flex}.session-tags-area[data-v-846e06b4]{justify-content:flex-end;align-items:flex-start;min-height:24px;display:flex}.session-actions[data-v-846e06b4]{align-items:center;margin-top:auto;display:flex}.list-pagination[data-v-846e06b4]{justify-content:center;margin:20px 0 4px;display:flex}.search-result-item[data-v-846e06b4]{border:1px solid var(--border-primary);background:var(--bg-elevated);border-radius:6px;margin-bottom:16px;padding:12px}.search-result-header[data-v-846e06b4]{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.search-result-title[data-v-846e06b4]{align-items:center;gap:8px;display:flex}.search-match[data-v-846e06b4]{background:var(--bg-secondary);border-radius:4px;align-items:flex-start;gap:8px;margin-top:6px;padding:6px;display:flex}.search-match-text[data-v-846e06b4]{flex:1;line-height:1.6}
|