coding-tool-x 3.9.1 → 3.9.3-260928
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/web/assets/{AgentsDrawer-CobzHziM.css → AgentsDrawer-Dubq1kQI.css} +1 -1
- package/dist/web/assets/AgentsDrawer-x29vGIIi.js +1 -0
- package/dist/web/assets/{Analytics-DTIvvMXu.js → Analytics-BJbR6XJO.js} +1 -1
- package/dist/web/assets/{AssetPathField-jv-lopQ3.js → AssetPathField-2W-16zgR.js} +1 -1
- package/dist/web/assets/{ChatHistoryDrawer-T4OVnJzM.js → ChatHistoryDrawer-C1URzQ_4.js} +1 -1
- package/dist/web/assets/{CollapseItem-P6BvSxEu.js → CollapseItem-DjkOkbwE.js} +1 -1
- package/dist/web/assets/{CommandsDrawer-DtFJRtow.js → CommandsDrawer-DcnfrHC4.js} +1 -1
- package/dist/web/assets/{ConfigExportDrawer-Di7KXhVS.js → ConfigExportDrawer-CKwG_RGJ.js} +1 -1
- package/dist/web/assets/{ConfigTemplates-VdKE5Kp0.js → ConfigTemplates-C1tNpfzi.js} +1 -1
- package/dist/web/assets/{ConfigTemplatesDrawer-bQvPnUQ0.js → ConfigTemplatesDrawer-gZNPbcUR.js} +1 -1
- package/dist/web/assets/{ConfigTemplatesPanel-ChdyQ3C6.js → ConfigTemplatesPanel-C-Fy53Qo.js} +1 -1
- package/dist/web/assets/{FavoritesDrawer-A25XfI7C.js → FavoritesDrawer-Bp8FYHPk.js} +1 -1
- package/dist/web/assets/GatewayConvertDrawer-CvUkvNQy.css +1 -0
- package/dist/web/assets/GatewayConvertDrawer-j5IJzb2Y.js +1 -0
- package/dist/web/assets/Home-2MAvBnml.js +1 -0
- package/dist/web/assets/Home-BRNWE0Qy.css +1 -0
- package/dist/web/assets/{MarkdownEditor-BXwTqbMo.js → MarkdownEditor-BA_PcLed.js} +1 -1
- package/dist/web/assets/{McpDrawer-DIaiFq4R.js → McpDrawer-DAep5PP_.js} +1 -1
- package/dist/web/assets/{McpFormDrawer-CQgTYAux.js → McpFormDrawer-BRm-hzv1.js} +1 -1
- package/dist/web/assets/{PluginManager-BkGrr21J.js → PluginManager-C2yY8-FP.js} +1 -1
- package/dist/web/assets/{PluginsDrawer-Bq1JkM5r.js → PluginsDrawer-CxKnWzTO.js} +1 -1
- package/dist/web/assets/{PluginsPanel-CzGMK-Ap.css → PluginsPanel-DsmiW9TU.css} +1 -1
- package/dist/web/assets/PluginsPanel-DtbXSoXu.js +1 -0
- package/dist/web/assets/{ProjectList-QIC7-9ic.js → ProjectList-Cb25pa2s.js} +1 -1
- package/dist/web/assets/{PromptsDrawer-BLeUYZWW.js → PromptsDrawer-D39OJVRP.js} +1 -1
- package/dist/web/assets/{RecentSessionsDrawer-yOpScIwI.js → RecentSessionsDrawer-DkCjc4kS.js} +1 -1
- package/dist/web/assets/{SessionCard-DeKRHAzu.js → SessionCard-5Mwig8zy.js} +1 -1
- package/dist/web/assets/{SessionList-B0fPT_VB.js → SessionList-DVkIlraF.js} +1 -1
- package/dist/web/assets/{SettingsDrawer-DpZoDj3M.js → SettingsDrawer-Cr9qZDgO.js} +1 -1
- package/dist/web/assets/{SkillManager-BpPqV2o4.js → SkillManager-D935sPSV.js} +1 -1
- package/dist/web/assets/{SkillsDrawer-BgMlJbgS.js → SkillsDrawer-D1_3j74b.js} +1 -1
- package/dist/web/assets/{SkillsPanel-CK-pSSHU.js → SkillsPanel-6SehnNG8.js} +1 -1
- package/dist/web/assets/{Upload-DtuQ7ady.js → Upload-38eKB6wv.js} +1 -1
- package/dist/web/assets/{WorkspaceDrawer-Bu5mOGsF.js → WorkspaceDrawer-Bkfmlr5M.js} +1 -1
- package/dist/web/assets/{WorkspaceManager-D1mhnNV-.js → WorkspaceManager-DFVQ5YoE.js} +1 -1
- package/dist/web/assets/{WorkspacePanel-BIrkMC_5.js → WorkspacePanel-CEnogXEv.js} +1 -1
- package/dist/web/assets/client-oU6RT-6I.js +1 -0
- package/dist/web/assets/dsh-agent-presets-DjJRVMT6.js +1 -0
- package/dist/web/assets/index-CCATqHAD.js +2 -0
- package/dist/web/assets/index-p-yggtLj.css +1 -0
- package/dist/web/assets/{platforms-DrzAtnjY.js → platforms-DILqyP72.js} +1 -1
- package/dist/web/assets/platforms-JV36QBCw.js +1 -0
- package/dist/web/assets/{project-config-BVt5s-pH.js → project-config-CzFKBw_m.js} +1 -1
- package/dist/web/assets/{sessions-CaWUaysM.js → sessions-WXODMvLY.js} +1 -1
- package/dist/web/assets/{sessions-53-Fr68H.js → sessions-wvj5oaYr.js} +1 -1
- package/dist/web/assets/{useResponsiveDrawer-C-UacYVP.js → useResponsiveDrawer-BWRBXImg.js} +1 -1
- package/dist/web/assets/{workspaces-DQuZd4qw.js → workspaces-D2yLnT-B.js} +1 -1
- package/dist/web/index.html +5 -5
- package/package.json +4 -4
- package/src/config/model-metadata.json +143 -7
- package/src/platforms/drivers/dsh/api-operations.js +60 -2
- package/src/platforms/drivers/dsh/common.js +222 -11
- package/src/platforms/drivers/dsh/native-config.js +2 -2
- package/src/platforms/drivers/dsh/native-logs.js +16 -1
- package/src/platforms/drivers/dsh/plugin-manager.js +64 -6
- package/src/platforms/drivers/omp/gateway.js +27 -1
- package/src/platforms/drivers/opencode/conversion.js +60 -8
- package/src/platforms/manifest-schema.js +4 -0
- package/src/platforms/manifests/dsh.json +29 -4
- package/src/platforms/manifests/omp.json +2 -1
- package/src/platforms/registry.js +1 -0
- package/src/server/api/convert.js +26 -76
- package/src/server/api/platforms.js +1 -0
- package/src/server/services/model-detector.js +13 -22
- package/src/server/services/native-log-observer.js +1 -0
- package/src/server/services/plugins-service.js +13 -14
- package/src/server/services/request-logger.js +95 -0
- package/src/server/services/usage-log-utils.js +2 -1
- package/dist/web/assets/AgentsDrawer-MeGfH4I0.js +0 -1
- package/dist/web/assets/GatewayConvertDrawer-CuNlf7AC.css +0 -1
- package/dist/web/assets/GatewayConvertDrawer-TSJPvY4f.js +0 -1
- package/dist/web/assets/Home-CSuFuJ9Y.css +0 -1
- package/dist/web/assets/Home-CzB85lKE.js +0 -1
- package/dist/web/assets/PluginsPanel-Clz1r67v.js +0 -1
- package/dist/web/assets/client-BgcNg4Bt.js +0 -1
- package/dist/web/assets/index-B86H0_5y.css +0 -1
- package/dist/web/assets/index-Bw6YXbBA.js +0 -2
- package/dist/web/assets/platforms-mqqe_82d.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,s as a,t as l}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as t,D as s,K as n,O as i,S as o,V as u,W as d,Y as r,Z as c,_t as p,b as v,et as m,g,ht as f,m as y,mt as h,r as b,st as k,w,x as _}from"./vue-vendor-BqZbbXHA.js";import{t as C}from"./client-BgcNg4Bt.js";import{r as j,s as x,t as M}from"./platforms-mqqe_82d.js";import{$ as z,At as P,Nt as O,O as L,R as U,S as N,V as $,_ as I,f as A,g as F,j as S,m as R}from"./icons-B-AzZoeE.js";import{l as B}from"./light-C2X7hegj.js";import{a as D,c as q,i as E,o as T,r as H,s as V,t as G}from"./AssetPathField-jv-lopQ3.js";import{n as W,t as Y}from"./useResponsiveDrawer-C-UacYVP.js";import{t as J}from"./DrawerContent-ChXgZ1Xm.js";import{$ as X,Et as Z,I as K,L as Q,M as ee,T as ae,X as le,Y as te,Z as se,ct as ne,ft as ie,j as oe,k as ue,st as de,ut as re,w as ce}from"./index-Bw6YXbBA.js";import{t as pe}from"./MarkdownEditor-BXwTqbMo.js";async function ve(e=null,a="claude",l={}){const t=ce("agents",a,l.scope||"",e||"");return ae(t,l=>C.get("/agents",{params:e?{projectPath:e,platform:a}:{platform:a},signal:l}).then(e=>e.data),"agents",`agents:${a}`)}var me={class:"asset-card-main"},ge={class:"asset-card-top"},fe={class:"asset-card-title-stack"},ye={class:"asset-card-title-row"},he={class:"asset-name"},be={class:"asset-tags"},ke={key:0,class:"asset-description"},we={class:"asset-meta"},_e={key:0,class:"asset-meta-item"},Ce={key:1,class:"asset-meta-item"},je={class:"asset-card-actions"},xe={class:"asset-platform-strip"},Me=["onClick"],ze=l({__name:"AgentCard",props:{agent:{type:Object,required:!0},deleting:{type:Boolean,default:!1},registryInfo:{type:Object,default:null},toggling:{type:Boolean,default:!1}},emits:["click","edit","delete","toggle-enabled","toggle-platform"],setup(l,{emit:u}){const c=l,b=u,{byCapability:k}=Z(),C=v(()=>k("agents"));return(u,v)=>{return d(),w("div",{class:f(["agent-card asset-card",{"is-project":"project"===l.agent.scope,"is-managed":l.registryInfo}]),onClick:v[4]||(v[4]=e=>b("click",l.agent))},[_("div",me,[_("div",ge,[_("div",fe,[_("div",ye,[_("span",{class:f(["asset-status-dot",{active:l.registryInfo?.enabled||"project"===l.agent.scope}])},null,2),_("span",he,p(l.agent.name),1)]),_("div",be,[i(h(re),{type:"user"===l.agent.scope?"info":"success",size:"tiny",bordered:!1},{default:m(()=>[s(p("user"===l.agent.scope?"用户级":"项目级"),1)]),_:1},8,["type"]),l.registryInfo?(d(),o(h(re),{key:0,type:"success",size:"tiny",bordered:!1},{default:m(()=>[...v[5]||(v[5]=[s("托管",-1)])]),_:1})):t("",!0),l.agent.model?(d(),o(h(re),{key:1,type:"warning",size:"tiny",bordered:!1},{default:m(()=>[s(p(l.agent.model),1)]),_:1})):t("",!0)])])]),l.agent.description?(d(),w("div",ke,p((j=l.agent.description,j?j.length>80?j.slice(0,80)+"...":j:"")),1)):t("",!0),_("div",we,[l.agent.tools?(d(),w("span",_e,[i(h(e),{size:"12"},{default:m(()=>[i(h($))]),_:1}),s(" "+p((k=l.agent.tools,k?k.length>30?k.slice(0,30)+"...":k:"")),1)])):t("",!0),l.agent.permissionMode?(d(),w("span",Ce,[i(h(e),{size:"12"},{default:m(()=>[i(h(A))]),_:1}),s(" "+p(l.agent.permissionMode),1)])):t("",!0)])]),_("div",je,[l.registryInfo?(d(),w(g,{key:0},[i(h(te),{trigger:"hover"},{trigger:m(()=>[i(h(oe),{value:l.registryInfo.enabled,size:"small",loading:l.toggling,"onUpdate:value":v[0]||(v[0]=e=>b("toggle-enabled",l.agent,e)),onClick:v[1]||(v[1]=y(()=>{},["stop"]))},null,8,["value","loading"])]),default:m(()=>[s(" "+p(l.registryInfo.enabled?"已启用":"已禁用"),1)]),_:1}),_("div",xe,[(d(!0),w(g,null,n(C.value,a=>(d(),o(h(te),{key:a.key,trigger:"hover"},{trigger:m(()=>[_("span",{class:f(["asset-platform-icon",{active:l.registryInfo.platforms?.[a.key]}]),onClick:y(e=>b("toggle-platform",l.agent,a.key,!l.registryInfo.platforms?.[a.key]),["stop"])},[i(h(e),{size:"14"},{default:m(()=>[(d(),o(r(a.icon)))]),_:2},1024)],10,Me)]),default:m(()=>[s(" "+p(a.label||a.title||a.key)+" "+p(l.registryInfo.platforms?.[a.key]?"已启用":"未启用"),1)]),_:2},1024))),128))])],64)):(d(),w(g,{key:1},[i(h(a),{size:"tiny",tertiary:"",onClick:v[2]||(v[2]=y(e=>b("edit",l.agent),["stop"]))},{default:m(()=>[...v[6]||(v[6]=[s(" 编辑 ",-1)])]),_:1}),i(h(a),{size:"tiny",tertiary:"",type:"error",loading:c.deleting,onClick:v[3]||(v[3]=y(e=>b("delete",l.agent),["stop"]))},{default:m(()=>[...v[7]||(v[7]=[s(" 删除 ",-1)])]),_:1},8,["loading"])],64))])],2);var k,j}}},[["__scopeId","data-v-044e4192"]]),Pe={class:"asset-detail-drawer-header"},Oe={class:"asset-detail-identity"},Le={class:"asset-detail-heading"},Ue={class:"asset-detail-name"},Ne={class:"asset-detail-meta"},$e={key:2,class:"asset-detail-subtle"},Ie={class:"asset-detail-body"},Ae={key:0,class:"asset-detail-loading"},Fe={class:"asset-detail-container"},Se={class:"asset-detail-info-section"},Re={class:"asset-detail-description"},Be={class:"asset-detail-info-section"},De={class:"asset-detail-list"},qe={class:"asset-detail-row"},Ee={class:"asset-detail-value"},Te={key:0,class:"asset-detail-row"},He={class:"asset-detail-value mono"},Ve={key:1,class:"asset-detail-row"},Ge={class:"asset-detail-value mono"},We={key:2,class:"asset-detail-row"},Ye={class:"asset-detail-value"},Je={key:3,class:"asset-detail-row"},Xe={class:"asset-detail-value"},Ze={key:4,class:"asset-detail-row"},Ke={class:"asset-detail-value"},Qe={key:1,class:"asset-detail-info-section"},ea={class:"asset-detail-box"},aa={class:"asset-detail-code"},la={key:2,class:"asset-detail-empty"},ta={__name:"AgentDetailDrawer",props:{visible:{type:Boolean,default:!1},agent:{type:Object,default:null},platform:{type:String,default:"claude"},loading:{type:Boolean,default:!1}},emits:["update:visible"],setup(a,{emit:l}){const{drawerWidth:n}=Y(600),u=a,r=l,c=v({get:()=>u.visible,set:e=>r("update:visible",e)}),g={height:"100%",minHeight:0,overflow:"hidden"},f=v(()=>({claude:"Claude Code",codex:"Codex CLI",gemini:"Gemini CLI",opencode:"OpenCode"}[u.platform]||"")),y=v(()=>u.agent?.fileName?"codex"===u.platform?`[agents.${u.agent.fileName}]`:`${u.agent.fileName}.md`:""),b=v(()=>u.agent?"codex"===u.platform?u.agent.fullContent||"(无内容)":u.agent.systemPrompt||"(无内容)":"(无内容)"),k=v(()=>u.agent?.fullPath||u.agent?.path||"");function C(e){return"project"===e?"项目级":"用户级"}return(l,u)=>(d(),o(h(W),{show:c.value,"onUpdate:show":u[0]||(u[0]=e=>c.value=e),width:h(n),placement:"right","show-mask":!0},{default:m(()=>[i(h(J),{closable:"","native-scrollbar":!1,"body-content-style":g},{header:m(()=>[_("div",Pe,[_("div",Oe,[i(h(e),{size:20,class:"asset-detail-icon"},{default:m(()=>[i(h(L))]),_:1}),_("div",Le,[_("span",Ue,p(a.agent?.name||"代理详情"),1),_("div",Ne,[a.agent?.scope?(d(),o(h(re),{key:0,type:"project"===a.agent.scope?"success":"info",size:"tiny",bordered:!1},{default:m(()=>[s(p(C(a.agent.scope)),1)]),_:1},8,["type"])):t("",!0),a.agent?.model?(d(),o(h(re),{key:1,type:"warning",size:"tiny",bordered:!1},{default:m(()=>[s(p(a.agent.model),1)]),_:1})):t("",!0),f.value?(d(),w("span",$e,p(f.value),1)):t("",!0)])])])])]),default:m(()=>[_("div",Ie,[a.loading&&!a.agent?(d(),w("div",Ae,[i(h(ee),{size:"medium"}),u[1]||(u[1]=_("p",null,"加载代理详情中...",-1))])):a.agent?(d(),o(h(V),{key:1,type:"line",animated:"",class:"asset-detail-tabs"},{default:m(()=>[i(h(q),{name:"overview",tab:"概览"},{default:m(()=>[_("div",Fe,["codex"===a.platform&&a.agent.configReadError?(d(),o(h(ne),{key:0,type:"warning",bordered:!1},{default:m(()=>[s(p(a.agent.configReadError),1)]),_:1})):t("",!0),_("div",Se,[u[2]||(u[2]=_("h3",{class:"asset-detail-section-title"},"描述",-1)),_("p",Re,p(a.agent.description||"暂无描述"),1)]),_("div",Be,[u[9]||(u[9]=_("h3",{class:"asset-detail-section-title"},"基础信息",-1)),_("div",De,[_("div",qe,[u[3]||(u[3]=_("span",{class:"asset-detail-label"},"作用域",-1)),_("span",Ee,p(C(a.agent.scope)),1)]),a.agent.fileName?(d(),w("div",Te,[u[4]||(u[4]=_("span",{class:"asset-detail-label"},"文件名",-1)),_("span",He,p(y.value),1)])):t("",!0),"codex"===a.platform&&a.agent.configFile?(d(),w("div",Ve,[u[5]||(u[5]=_("span",{class:"asset-detail-label"},"config_file",-1)),_("span",Ge,p(a.agent.configFile),1)])):t("",!0),a.agent.model?(d(),w("div",We,[u[6]||(u[6]=_("span",{class:"asset-detail-label"},"模型",-1)),_("span",Ye,p(a.agent.model),1)])):t("",!0),a.agent.permissionMode?(d(),w("div",Je,[u[7]||(u[7]=_("span",{class:"asset-detail-label"},"权限模式",-1)),_("span",Xe,p(a.agent.permissionMode),1)])):t("",!0),a.agent.skills?(d(),w("div",Ze,[u[8]||(u[8]=_("span",{class:"asset-detail-label"},"技能",-1)),_("span",Ke,p(a.agent.skills),1)])):t("",!0)])]),a.agent.tools?(d(),w("div",Qe,[u[10]||(u[10]=_("h3",{class:"asset-detail-section-title"},"可用工具",-1)),_("div",ea,[i(h(e),{size:16},{default:m(()=>[i(h($))]),_:1}),_("code",null,p(a.agent.tools),1)])])):t("",!0),i(G,{path:k.value},null,8,["path"])])]),_:1}),i(h(q),{name:"content",tab:"codex"===a.platform?"配置":"提示词"},{default:m(()=>[_("pre",aa,p(b.value),1)]),_:1},8,["tab"])]),_:1})):(d(),w("div",la,[i(h(e),{size:44,class:"asset-detail-empty-icon"},{default:m(()=>[i(h(z))]),_:1}),u[11]||(u[11]=_("p",null,"未选择代理",-1))]))])]),_:1})]),_:1},8,["show","width"]))}},sa={class:"config-edit-header"},na={class:"config-edit-identity"},ia={class:"config-edit-icon"},oa={class:"config-edit-title-stack"},ua={class:"config-edit-kicker"},da={class:"config-edit-title"},ra={class:"config-edit-badges"},ca={class:"config-edit-section"},pa={class:"section-heading"},va={class:"field-grid"},ma={class:"scope-option"},ga={class:"scope-path"},fa={class:"scope-option"},ya={class:"scope-path"},ha={key:0,class:"platform-note"},ba={class:"config-edit-section"},ka={class:"section-heading"},wa={key:1,class:"empty-config-box"},_a={key:0,class:"field-grid"},Ca={class:"field-grid"},ja={key:0,class:"config-edit-section content-section"},xa={class:"section-heading"},Ma={class:"modal-footer"},za=l({__name:"AgentFormModal",props:{visible:{type:Boolean,default:!1},agent:{type:Object,default:null},projectPath:{type:String,default:null},platform:{type:String,default:"claude"}},emits:["update:visible","saved"],setup(l,{emit:n}){const u=l,r=n,y=v({get:()=>u.visible,set:e=>r("update:visible",e)}),b=v(()=>!!u.agent),j=v(()=>"codex"===u.platform),x=v(()=>"claude"===u.platform),M=v(()=>"omp"===u.platform),P=v(()=>["codex","opencode","omp"].includes(u.platform)),O=v(()=>b.value?"编辑代理":"创建代理"),N=v(()=>({claude:"Claude Code",codex:"Codex CLI",gemini:"Gemini CLI",opencode:"OpenCode",omp:"OMP"}[u.platform]||"Claude Code")),$=v(()=>"codex"===u.platform?"~/.codex/config.toml":"opencode"===u.platform?"~/.config/opencode/agents/":"gemini"===u.platform?"~/.gemini/agents/":"omp"===u.platform?"~/.omp/agent/agents/":"~/.claude/agents/"),A=v(()=>"opencode"===u.platform?".opencode/agents/":"gemini"===u.platform?".gemini/agents/":"omp"===u.platform?".omp/agents/":".claude/agents/"),F=v(()=>"project"===Y.value.scope?"项目级":"用户级"),D=v(()=>W.find(e=>e.value===Y.value.configMode)?.label||"配置"),q=k(null),E=k(!1),T={maxHeight:"calc(92vh - 134px)",overflowY:"auto",paddingBottom:"18px"},H=[{label:"Sonnet",value:"sonnet"},{label:"Opus",value:"opus"},{label:"Haiku",value:"haiku"},{label:"继承 (inherit)",value:"inherit"}],V=[{label:"默认 (default)",value:"default"},{label:"宽松 (permissive)",value:"permissive"},{label:"严格 (strict)",value:"strict"}],G=[{label:"Off",value:"off"},{label:"Minimal",value:"minimal"},{label:"Low",value:"low"},{label:"Medium",value:"medium"},{label:"High",value:"high"},{label:"XHigh",value:"xhigh"},{label:"Max",value:"max"}],W=[{label:"仅描述",value:"none"},{label:"托管 TOML",value:"managed"},{label:"自定义路径",value:"custom"}],Y=k({fileName:"",scope:"user",name:"",description:"",configMode:"none",configFile:"",configContent:"",tools:"",model:"",thinkingLevel:"",spawns:"",permissionMode:"",skills:"",systemPrompt:""}),J=v(()=>{const e={fileName:{required:!0,message:"请输入文件名",trigger:"blur"},scope:{required:!0,message:"请选择作用域",trigger:"change"},description:{required:!0,message:"请输入代理描述",trigger:"blur"}};return x.value&&(e.name={required:!0,message:"请输入代理名称",trigger:"blur"}),j.value&&(e.configMode={required:!0,message:"请选择配置模式",trigger:"change"},e.configFile={required:"custom"===Y.value.configMode,message:"请输入自定义配置文件路径",trigger:"blur"}),e});function Z(){Y.value={fileName:"",scope:"user",name:"",description:"",configMode:"none",configFile:"",configContent:"",tools:"",model:"",thinkingLevel:"",spawns:"",permissionMode:"",skills:"",systemPrompt:""}}function ee(){y.value=!1,Z()}async function ae(){try{await(q.value?.validate())}catch{return}E.value=!0;try{const e={...Y.value,projectPath:u.projectPath};j.value?("custom"===Y.value.configMode?e.configFile=Y.value.configFile:delete e.configFile,"managed"===Y.value.configMode||"custom"===Y.value.configMode?e.configContent=Y.value.configContent||"":delete e.configContent):(delete e.configMode,delete e.configFile,delete e.configContent),b.value?(await async function(e,a,l,t="claude"){return(await C.put(`/agents/${a}/${e}`,{...l,platform:t})).data}(Y.value.fileName,Y.value.scope,e,u.platform),ue.success("代理更新成功")):(await async function(e,a="claude"){return(await C.post("/agents",{...e,platform:a})).data}(e,u.platform),ue.success("代理创建成功")),r("saved"),y.value=!1,Z()}catch(e){ue.error("操作失败: "+e.message)}finally{E.value=!1}}return c(()=>u.agent,e=>{if(e){const a=e.configMode||(e.configFile?String(e.configFile).includes("/.codex/agents/")?"managed":"custom":"none");Y.value={fileName:e.fileName||"",scope:e.scope||"user",name:e.name||"",description:e.description||"",configMode:a,configFile:e.configFile||"",configContent:e.fullContent||"",tools:e.tools||"",model:e.model||"",thinkingLevel:e.thinkingLevel||"",spawns:e.spawns||"",permissionMode:e.permissionMode||"",skills:e.skills||"",systemPrompt:e.systemPrompt||""}}else Z()},{immediate:!0}),c(()=>u.platform,e=>{"codex"===e&&(Y.value.scope="user",Y.value.configMode||(Y.value.configMode="none"))},{immediate:!0}),(l,n)=>(d(),o(h(B),{show:y.value,"onUpdate:show":n[15]||(n[15]=e=>y.value=e),preset:"card",title:O.value,style:{width:"min(940px, 96vw)","max-height":"92vh"},"content-style":T,"mask-closable":!1,class:"config-edit-modal"},{footer:m(()=>[_("div",Ma,[i(h(a),{onClick:ee},{default:m(()=>[...n[23]||(n[23]=[s("取消",-1)])]),_:1}),i(h(a),{type:"primary",loading:E.value,onClick:ae},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(I))]),_:1})]),default:m(()=>[s(" "+p(b.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:m(()=>[_("div",sa,[_("div",na,[_("span",ia,[i(h(e),{size:22},{default:m(()=>[i(h(L))]),_:1})]),_("div",oa,[_("span",ua,p(N.value),1),_("span",da,p(b.value?Y.value.fileName||"编辑代理":"创建新代理"),1)])]),_("div",ra,[i(h(re),{size:"small",bordered:!1,type:"info"},{default:m(()=>[s(p(F.value),1)]),_:1}),j.value?(d(),o(h(re),{key:0,size:"small",bordered:!1,type:"success"},{default:m(()=>[...n[16]||(n[16]=[s("Codex 用户级",-1)])]),_:1})):t("",!0),j.value&&"none"!==Y.value.configMode?(d(),o(h(re),{key:1,size:"small",bordered:!1,type:"warning"},{default:m(()=>[s(p(D.value),1)]),_:1})):t("",!0)])]),i(h(Q),{ref_key:"formRef",ref:q,model:Y.value,rules:J.value,"label-placement":"top","require-mark-placement":"right-hanging",class:"config-edit-form"},{default:m(()=>[_("div",{class:f(["config-edit-grid",{"is-codex":j.value}])},[_("section",ca,[_("div",pa,[i(h(e),{size:16},{default:m(()=>[i(h(S))]),_:1}),n[17]||(n[17]=_("span",null,"基础信息",-1))]),_("div",va,[i(h(K),{label:"文件名",path:"fileName"},{default:m(()=>[i(h(de),{value:Y.value.fileName,"onUpdate:value":n[0]||(n[0]=e=>Y.value.fileName=e),disabled:b.value,placeholder:"code-reviewer"},null,8,["value","disabled"])]),_:1}),x.value?(d(),o(h(K),{key:0,label:"显示名称",path:"name"},{default:m(()=>[i(h(de),{value:Y.value.name,"onUpdate:value":n[1]||(n[1]=e=>Y.value.name=e),placeholder:"代理的显示名称"},null,8,["value"])]),_:1})):t("",!0)]),i(h(K),{label:"作用域",path:"scope"},{default:m(()=>[i(h(le),{value:Y.value.scope,"onUpdate:value":n[2]||(n[2]=e=>Y.value.scope=e),disabled:b.value,class:f(["scope-picker",{"single-option":j.value}])},{default:m(()=>[i(h(se),{value:"user"},{default:m(()=>[_("span",ma,[n[18]||(n[18]=_("span",{class:"scope-title"},"用户级",-1)),_("span",ga,p($.value),1)])]),_:1}),j.value?t("",!0):(d(),o(h(se),{key:0,value:"project"},{default:m(()=>[_("span",fa,[n[19]||(n[19]=_("span",{class:"scope-title"},"项目级",-1)),_("span",ya,p(A.value),1)])]),_:1}))]),_:1},8,["value","disabled","class"])]),_:1}),i(h(K),{label:"描述",path:"description"},{default:m(()=>[i(h(de),{value:Y.value.description,"onUpdate:value":n[3]||(n[3]=e=>Y.value.description=e),type:"textarea",autosize:{minRows:3,maxRows:5},placeholder:"一句话说明这个代理什么时候该被调用"},null,8,["value"])]),_:1}),j.value?(d(),w("div",ha,[i(h(e),{size:16},{default:m(()=>[i(h(U))]),_:1}),n[20]||(n[20]=_("span",null,[s("Codex agents 写入用户级配置。描述会进入 "),_("code",null,"~/.codex/config.toml"),s(",TOML 配置可托管到 "),_("code",null,"~/.codex/agents/"),s("。")],-1))])):t("",!0)]),_("section",ba,[_("div",ka,[i(h(e),{size:16},{default:m(()=>[i(h(R))]),_:1}),_("span",null,p(j.value?"运行配置":"模型与权限"),1)]),j.value?(d(),w(g,{key:0},[i(h(K),{label:"配置模式",path:"configMode"},{default:m(()=>[i(h(X),{value:Y.value.configMode,"onUpdate:value":n[4]||(n[4]=e=>Y.value.configMode=e),options:W,placeholder:"选择配置模式"},null,8,["value"])]),_:1}),"custom"===Y.value.configMode?(d(),o(h(K),{key:0,label:"配置文件路径",path:"configFile"},{default:m(()=>[i(h(de),{value:Y.value.configFile,"onUpdate:value":n[5]||(n[5]=e=>Y.value.configFile=e),placeholder:"~/.omx/agents/my-agent.toml"},null,8,["value"])]),_:1})):t("",!0),"none"===Y.value.configMode?(d(),w("div",wa,[i(h(e),{size:18},{default:m(()=>[i(h(z))]),_:1}),n[21]||(n[21]=_("span",null,"仅保存代理描述,不额外写入模型或工具配置。",-1))])):(d(),o(h(K),{key:2,label:"Agent Config (TOML)",path:"configContent",class:"editor-form-item"},{default:m(()=>[i(h(de),{value:Y.value.configContent,"onUpdate:value":n[6]||(n[6]=e=>Y.value.configContent=e),type:"textarea",autosize:{minRows:14,maxRows:22},class:"toml-editor",placeholder:'model = "gpt-5.4"'},null,8,["value"])]),_:1}))],64)):(d(),w(g,{key:1},[i(h(K),{label:"可用工具",path:"tools"},{default:m(()=>[i(h(de),{value:Y.value.tools,"onUpdate:value":n[7]||(n[7]=e=>Y.value.tools=e),placeholder:M.value?"read, edit, bash(逗号分隔)":"Read, Edit, Bash"},null,8,["value","placeholder"])]),_:1}),i(h(K),{label:"模型",path:"model"},{default:m(()=>[P.value?(d(),o(h(de),{key:0,value:Y.value.model,"onUpdate:value":n[8]||(n[8]=e=>Y.value.model=e),placeholder:M.value?"@default、@review 或 provider/model;多个候选用逗号分隔":"gpt-5, claude-sonnet-4, openrouter/model"},null,8,["value","placeholder"])):(d(),o(h(X),{key:1,value:Y.value.model,"onUpdate:value":n[9]||(n[9]=e=>Y.value.model=e),options:H,placeholder:"选择模型",clearable:""},null,8,["value"]))]),_:1}),M.value?(d(),w("div",_a,[i(h(K),{label:"思考级别",path:"thinkingLevel"},{default:m(()=>[i(h(X),{value:Y.value.thinkingLevel,"onUpdate:value":n[10]||(n[10]=e=>Y.value.thinkingLevel=e),options:G,placeholder:"使用模型默认级别",clearable:""},null,8,["value"])]),_:1}),i(h(K),{label:"可调用的子 Agent",path:"spawns"},{default:m(()=>[i(h(de),{value:Y.value.spawns,"onUpdate:value":n[11]||(n[11]=e=>Y.value.spawns=e),placeholder:"* 或 reviewer, scout"},null,8,["value"])]),_:1})])):t("",!0),_("div",Ca,["opencode"===u.platform||M.value?t("",!0):(d(),o(h(K),{key:0,label:"权限模式",path:"permissionMode"},{default:m(()=>[i(h(X),{value:Y.value.permissionMode,"onUpdate:value":n[12]||(n[12]=e=>Y.value.permissionMode=e),options:V,placeholder:"选择权限模式",clearable:""},null,8,["value"])]),_:1})),"opencode"===u.platform||M.value?t("",!0):(d(),o(h(K),{key:1,label:"技能",path:"skills"},{default:m(()=>[i(h(de),{value:Y.value.skills,"onUpdate:value":n[13]||(n[13]=e=>Y.value.skills=e),placeholder:"自动加载的技能,逗号分隔"},null,8,["value"])]),_:1}))])],64))]),j.value?t("",!0):(d(),w("section",ja,[_("div",xa,[i(h(e),{size:16},{default:m(()=>[i(h(z))]),_:1}),n[22]||(n[22]=_("span",null,"系统提示词",-1))]),i(h(K),{path:"systemPrompt","show-label":!1,class:"editor-form-item"},{default:m(()=>[i(pe,{modelValue:Y.value.systemPrompt,"onUpdate:modelValue":n[14]||(n[14]=e=>Y.value.systemPrompt=e),rows:10,"min-height":240,placeholder:"定义代理的行为、边界和输出要求","default-editing":!b.value},null,8,["modelValue","default-editing"])]),_:1})]))],2)]),_:1},8,["model","rules"])]),_:1},8,["show","title"]))}},[["__scopeId","data-v-ea89272f"]]),Pa={key:0,class:"asset-panel-header"},Oa={class:"asset-title-group"},La={class:"asset-heading"},Ua={class:"asset-title-row"},Na={class:"asset-platform-pill"},$a={key:0,class:"asset-action-row"},Ia={key:1,class:"asset-drawer-toolbar"},Aa={key:0,class:"asset-action-row"},Fa={key:2,class:"omp-model-roles"},Sa={class:"omp-model-roles-toolbar"},Ra={class:"omp-model-roles-copy"},Ba={key:0,class:"omp-model-roles-stale"},Da={key:1,class:"omp-model-roles-error"},qa={class:"asset-summary"},Ea={class:"asset-summary-item"},Ta={class:"asset-summary-value"},Ha={class:"asset-summary-item"},Va={class:"asset-summary-value"},Ga={class:"asset-summary-item"},Wa={class:"asset-summary-value"},Ya={class:"asset-summary-item"},Ja={class:"asset-summary-value"},Xa={class:"asset-filter-bar"},Za={class:"asset-panel-content"},Ka={key:0,class:"asset-empty"},Qa={key:1,class:"asset-list"},el={class:"asset-footer"},al=l({__name:"AgentsPanel",props:{hideBack:{type:Boolean,default:!1},inDrawer:{type:Boolean,default:!1},projectPath:{type:String,default:null},platform:{type:String,default:""}},emits:["back","updated"],setup(l,{emit:r}){const y=l,z=r,$=M(),I=b(),A=k([]),S=k(!1),R=k(""),B=k("all"),q=k(!1),V=k(!1),G=k(null),W=k(!1),Y=k(null),J=k({}),K=k({}),Q=k({}),le=k([]),te=k(""),se=k([]),ne=k([]),oe=v(()=>new Set(se.value.map(e=>e.value))),re=k(!1),pe=k(!1),me=k(""),ge=v(()=>JSON.stringify(_e())!==te.value);let fe=0;const{byCapability:ye}=Z(),he=v(()=>ye("agents").map(e=>e.key)),be=v(()=>he.value.includes(xe.value)),ke=["default","smol","slow","plan","commit","vision","designer","task","advisor","tiny"],we=["minimal","low","medium","high","xhigh","max"].map(e=>({label:e,value:e}));function _e(){return Object.fromEntries(le.value.map(e=>[e.key,{model:e.model||"",thinkingLevel:e.thinkingLevel||""}]))}function Ce(e={}){const a=e.roles&&"object"==typeof e.roles?e.roles:{};le.value=ke.map(e=>({key:e,model:"string"==typeof a[e]?.model?a[e].model:"",thinkingLevel:"string"==typeof a[e]?.thinkingLevel?a[e].thinkingLevel:""})),te.value=JSON.stringify(_e()),se.value=(Array.isArray(e.modelOptions)?e.modelOptions:[]).filter(e=>"string"==typeof e&&e.trim()).map(e=>({label:e,value:e})),ne.value=e.unavailableRoles&&"object"==typeof e.unavailableRoles?Object.keys(e.unavailableRoles).filter(a=>!0===e.unavailableRoles[a]):[]}function je(e,a){return e?.data?.error||e?.response?.data?.error||e?.message||a}const xe=v(()=>String(y.platform||j(I)||"").trim().toLowerCase()),Me=v(()=>"opencode"===xe.value?"使用 @agent 或 Task 在 OpenCode 中调用":"omp"===xe.value?"OMP Agent 由 task 工具按名称调用;模型可在 Agent 配置中单独指定":"gemini"===xe.value?"使用 @agent 调用 Gemini 自定义代理":"使用 Task tool 调用自定义代理"),Pe=v(()=>{const e=$.get(xe.value)||x(xe.value);return e.label||e.title||"Claude Code"}),Oe=[{label:"全部",value:"all"},{label:"用户级",value:"user"},{label:"项目级",value:"project"},{label:"已托管",value:"managed"}],Le=v(()=>A.value.filter(e=>"user"===e.scope).length),Ue=v(()=>A.value.filter(e=>"project"===e.scope).length),Ne=v(()=>Object.keys(K.value).length);function $e(e){if(!e)return"";const a="string"==typeof e.scope&&e.scope.trim()?e.scope.trim():"unknown",l="string"==typeof e.path&&e.path.trim()?e.path.trim():"",t="string"==typeof e.fileName&&e.fileName.trim()?e.fileName.trim():"";return`${a}:${l||t}`}function Ie(e){if(!e)return"";const a=[];if("string"==typeof e.path&&e.path.trim()&&a.push(e.path.trim()),"string"==typeof e.fileName&&e.fileName.trim()){const l=e.fileName.trim();a.push(`${l}.md`,l)}"string"==typeof e.name&&e.name.trim()&&a.push(e.name.trim());for(const l of a)if(K.value[l])return l;return a[0]||""}const Ae=v(()=>{let e=A.value;if("user"===B.value?e=e.filter(e=>"user"===e.scope):"project"===B.value?e=e.filter(e=>"project"===e.scope):"managed"===B.value&&(e=e.filter(e=>K.value[Ie(e)])),R.value.trim()){const a=R.value.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(a)||e.description?.toLowerCase().includes(a)||e.fileName?.toLowerCase().includes(a))}return e}),Fe=v(()=>R.value?"没有匹配的代理":"user"===B.value?"暂无用户级代理":"project"===B.value?"暂无项目级代理":"managed"===B.value?"暂无托管的代理":be.value?"暂无自定义代理":`${Pe.value} 暂未提供 Agents 能力`);async function Se(){if(!be.value)return A.value=[],K.value={},void(S.value=!1);S.value=!0;try{const[e,a]=await Promise.all([ve(y.projectPath,xe.value),H("agents",{platform:xe.value,projectPath:y.projectPath})]);if(e.success&&(A.value=e.agents||[]),a.success){K.value={};for(const[e,l]of Object.entries(a.items||{}))K.value[e]=l}}catch(e){ue.error("加载代理列表失败: "+e.message)}finally{S.value=!1}}async function Re(e,a){const l=Ie(e);if(l){Q.value[l]=!0;try{(await D("agents",l,a)).success&&(ue.success(a?"已启用":"已禁用"),await Se())}catch(t){ue.error("切换失败: "+t.message)}finally{delete Q.value[l]}}else ue.error("未找到代理对应的托管配置键")}async function Be(e,a,l){const t=Ie(e);if(t){Q.value[t]=!0;try{(await T("agents",t,a,l)).success&&(ue.success(`${a} ${l?"已启用":"已禁用"}`),await Se())}catch(s){ue.error("切换失败: "+s.message)}finally{delete Q.value[t]}}else ue.error("未找到代理对应的托管配置键")}async function De(){S.value=!0;try{const e=await E("agents");e?.success||ue.warning(e?.message||"同步失败,已继续刷新列表")}catch(e){ue.warning("同步失败,已继续刷新列表: "+e.message)}await Se()}async function qe(){if("omp"===xe.value){re.value=!0,me.value="";try{const{data:e}=await C.get("/settings/omp-model-roles");Ce(e)}catch(e){me.value=`加载 OMP 角色配置失败:${je(e,"未知错误")}`}finally{re.value=!1}}}async function Ee(){if(!(re.value||pe.value||me.value)){pe.value=!0;try{const{data:e}=await C.put("/settings/omp-model-roles",{roles:_e()});Ce(e),ue.success("OMP 模型角色配置已保存")}catch(e){ue.error(`保存 OMP 角色配置失败:${je(e,"未知错误")}`)}finally{pe.value=!1}}}function Te(){Y.value=null,q.value=!0}function He(e){q.value=e,e||(Y.value=null)}function Ve(e){We(e,!0)}async function Ge(e){const a=$e(e);J.value[a]=!0;try{(await async function(e,a,l=null,t="claude"){const s={};return t&&(s.platform=t),l&&(s.projectPath=l),(await C.delete(`/agents/${a}/${e}`,{params:s})).data}(e.fileName,e.scope,y.projectPath,xe.value)).success&&(ue.success("代理已删除"),await Se(),z("updated"))}catch(l){ue.error("删除失败: "+l.message)}finally{delete J.value[a]}}async function We(e,a=!1){if(!e)return;const l=++fe;W.value=!0,a||(G.value=null,V.value=!0);try{const t=await async function(e,a,l=null,t="claude"){const s={};t&&(s.platform=t),l&&(s.projectPath=l);const n=ce(`agent-detail:${e}`,t,a||"",l||"");return ae(n,l=>C.get(`/agents/${a}/${e}`,{params:s,signal:l}).then(e=>e.data),"agent-detail",`agent-detail:${t}`)}(e.fileName,e.scope,y.projectPath,xe.value);if(l!==fe)return;const s=t?.agent||e;a?(Y.value=s,q.value=!0):G.value=s}catch(t){if(l!==fe)return;ue.error("加载代理详情失败: "+t.message),a?(Y.value=e,q.value=!0):G.value=e}finally{l===fe&&(W.value=!1)}}function Ye(e){We(e,!1)}function Je(){Y.value=null,Se(),z("updated")}function Xe(){z("back")}return u(()=>{Se(),qe()}),c(xe,()=>{fe+=1,W.value=!1,G.value=null,Se(),qe()}),(u,r)=>(d(),w("div",{class:f(["agents-panel asset-panel",{"in-drawer":y.inDrawer}])},[y.inDrawer?t("",!0):(d(),w("div",Pa,[_("div",Oa,[y.hideBack?t("",!0):(d(),o(h(a),{key:0,text:"",onClick:Xe,class:"back-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(P))]),_:1})]),_:1})),_("div",La,[_("div",Ua,[r[3]||(r[3]=_("span",{class:"asset-title"},"代理管理",-1)),_("span",Na,p(Pe.value),1)]),r[4]||(r[4]=_("div",{class:"asset-subtitle"},"维护自定义代理、工具权限和平台启用状态",-1))])]),be.value?(d(),w("div",$a,[i(h(a),{text:"",onClick:Te,class:"action-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(O))]),_:1})]),default:m(()=>[r[5]||(r[5]=s(" 创建 ",-1))]),_:1}),i(h(a),{text:"",onClick:De,loading:S.value,class:"action-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(N))]),_:1})]),default:m(()=>[r[6]||(r[6]=s(" 刷新 ",-1))]),_:1},8,["loading"])])):t("",!0)])),y.inDrawer?(d(),w("div",Ia,[be.value?(d(),w("div",Aa,[i(h(a),{text:"",onClick:Te,class:"action-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(O))]),_:1})]),default:m(()=>[r[7]||(r[7]=s(" 创建 ",-1))]),_:1}),i(h(a),{text:"",onClick:De,loading:S.value,class:"action-btn"},{icon:m(()=>[i(h(e),null,{default:m(()=>[i(h(N))]),_:1})]),default:m(()=>[r[8]||(r[8]=s(" 刷新 ",-1))]),_:1},8,["loading"])])):t("",!0)])):t("",!0),"omp"===xe.value?(d(),w("div",Fa,[_("div",Sa,[_("div",Ra,[r[10]||(r[10]=_("strong",null,"OMP 模型角色",-1)),r[11]||(r[11]=_("span",null,"候选模型只取当前启用渠道。原生 OAuth 渠道读取允许模型列表(未设置时读取已声明模型),并使用 OAuth provider ID 作为前缀;OAuth Auth Gateway 使用该托管渠道的模型配置。思考强度会写入选择器后缀,例如 :high。",-1)),ne.value.length?(d(),w("span",Ba," 以下角色当前指向未启用渠道模型:"+p(ne.value.join("、"))+"。请切换到已启用渠道中的模型,或清空对应角色。 ",1)):t("",!0),me.value?(d(),w("div",Da,[_("span",null,p(me.value),1),i(h(a),{text:"",size:"tiny",disabled:re.value,onClick:qe},{default:m(()=>[...r[9]||(r[9]=[s("重试",-1)])]),_:1},8,["disabled"])])):t("",!0)]),i(h(a),{type:"primary",size:"small",loading:pe.value,disabled:re.value||!!me.value||pe.value||!ge.value,onClick:Ee},{default:m(()=>[...r[12]||(r[12]=[s(" 保存角色配置 ",-1)])]),_:1},8,["loading","disabled"])]),r[13]||(r[13]=_("div",{class:"omp-model-roles-header"},[_("span",null,"角色"),_("span",null,"模型"),_("span",null,"思考强度")],-1)),(d(!0),w(g,null,n(le.value,e=>(d(),w("div",{key:e.key,class:"omp-model-role-row"},[_("strong",null,p(e.key),1),i(h(X),{value:e.model,"onUpdate:value":a=>e.model=a,options:se.value,placeholder:"请选择已启用渠道模型",filterable:"",clearable:"",size:"small",disabled:re.value||!!me.value||pe.value},null,8,["value","onUpdate:value","options","disabled"]),i(h(X),{value:e.thinkingLevel,"onUpdate:value":a=>e.thinkingLevel=a,options:h(we),placeholder:"跟随默认",clearable:"",size:"small",disabled:re.value||!!me.value||pe.value||!oe.value.has(e.model)},null,8,["value","onUpdate:value","options","disabled"])]))),128))])):t("",!0),_("div",qa,[_("span",Ea,[r[14]||(r[14]=_("span",{class:"asset-summary-label"},"全部",-1)),_("span",Ta,p(A.value.length),1)]),_("span",Ha,[r[15]||(r[15]=_("span",{class:"asset-summary-label"},"用户级",-1)),_("span",Va,p(Le.value),1)]),_("span",Ga,[r[16]||(r[16]=_("span",{class:"asset-summary-label"},"项目级",-1)),_("span",Wa,p(Ue.value),1)]),_("span",Ya,[r[17]||(r[17]=_("span",{class:"asset-summary-label"},"托管",-1)),_("span",Ja,p(Ne.value),1)])]),_("div",Xa,[i(h(de),{value:R.value,"onUpdate:value":r[0]||(r[0]=e=>R.value=e),placeholder:"搜索代理、描述或文件名",clearable:"",size:"small",class:"asset-search"},{prefix:m(()=>[i(h(e),null,{default:m(()=>[i(h(F))]),_:1})]),_:1},8,["value"]),i(h(X),{value:B.value,"onUpdate:value":r[1]||(r[1]=e=>B.value=e),options:Oe,size:"small",class:"asset-filter"},null,8,["value"])]),_("div",Za,[i(h(ee),{show:S.value},{default:m(()=>[0!==Ae.value.length||S.value?(d(),w("div",Qa,[(d(!0),w(g,null,n(Ae.value,e=>(d(),o(ze,{key:$e(e),agent:e,deleting:!!J.value[$e(e)],"registry-info":K.value[Ie(e)],toggling:!!Q.value[Ie(e)],onEdit:Ve,onDelete:Ge,onClick:Ye,onToggleEnabled:Re,onTogglePlatform:Be},null,8,["agent","deleting","registry-info","toggling"]))),128))])):(d(),w("div",Ka,[i(h(ie),{description:Fe.value},{icon:m(()=>[i(h(e),{size:"48",color:"var(--text-quaternary)"},{default:m(()=>[i(h(L))]),_:1})]),extra:m(()=>[be.value?(d(),o(h(a),{key:0,size:"small",onClick:Te},{default:m(()=>[...r[18]||(r[18]=[s(" 创建第一个代理 ",-1)])]),_:1})):t("",!0)]),_:1},8,["description"])]))]),_:1},8,["show"])]),_("div",el,[i(h(e),{size:"14",class:"asset-info-icon"},{default:m(()=>[i(h(U))]),_:1}),_("span",null,p(Me.value),1)]),i(za,{visible:q.value,"onUpdate:visible":He,agent:Y.value,"project-path":l.projectPath,platform:xe.value,onSaved:Je},null,8,["visible","agent","project-path","platform"]),i(ta,{visible:V.value,"onUpdate:visible":r[2]||(r[2]=e=>V.value=e),agent:G.value,platform:xe.value,loading:W.value},null,8,["visible","agent","platform","loading"])],2))}},[["__scopeId","data-v-393fa5d6"]]),ll=l({__name:"AgentsDrawer",props:{visible:Boolean,platform:{type:String,default:""}},emits:["update:visible"],setup(e,{emit:a}){const l=e,t=a,{drawerWidth:s}=Y(720),n=v({get:()=>l.visible,set:e=>t("update:visible",e)}),u={padding:0,display:"flex",flexDirection:"column",overflow:"hidden"};return(e,a)=>(d(),o(h(W),{show:n.value,"onUpdate:show":a[1]||(a[1]=e=>n.value=e),width:h(s),placement:"right","mask-closable":!0},{default:m(()=>[i(h(J),{closable:"","native-scrollbar":!1,"body-content-style":u},{header:m(()=>[...a[2]||(a[2]=[_("div",{class:"drawer-header"},[_("span",null,"代理管理")],-1)])]),default:m(()=>[i(al,{onBack:a[0]||(a[0]=e=>n.value=!1),"hide-back":!0,"in-drawer":!0,platform:l.platform},null,8,["platform"])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-b9b7a7fa"]]);export{ll as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.drawer-header[data-v-27295eec]{align-items:center;gap:8px;display:flex}.header-icon-wrapper[data-v-27295eec]{background:var(--bg-secondary);border:1px solid var(--border-primary);width:28px;height:28px;color:var(--primary-color);border-radius:6px;justify-content:center;align-items:center;display:flex}.convert-container[data-v-27295eec]{flex-direction:column;gap:10px;padding-bottom:8px;display:flex}.action-row[data-v-27295eec]{justify-content:space-between;align-items:center;gap:8px;display:flex}.result-section[data-v-27295eec]{border:1px solid var(--border-primary);background:var(--bg-secondary);border-radius:8px;padding:12px}.result-meta[data-v-27295eec]{flex-wrap:wrap;gap:10px 14px;display:flex}.meta-row[data-v-27295eec]{align-items:center;gap:6px;display:flex}.meta-label[data-v-27295eec]{color:var(--text-secondary);font-size:12px}.warning-title[data-v-27295eec]{margin-bottom:4px;font-size:12px;font-weight:600}.warning-list[data-v-27295eec]{margin:0;padding-left:16px;font-size:12px;line-height:1.5}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,s as a,t}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as s,D as l,K as o,O as n,S as r,W as u,Z as i,_t as c,b as p,et as d,g as v,mt as m,st as y,w as f,x as w}from"./vue-vendor-BqZbbXHA.js";import{n as g}from"./vendors-D0c_0KLP.js";import{H as h}from"./icons-B-AzZoeE.js";import{n as x,t as b}from"./useResponsiveDrawer-C-UacYVP.js";import{t as _}from"./DrawerContent-ChXgZ1Xm.js";import{$ as C,H as A,I as k,L as O,ct as S,k as j,st as J,ut as N}from"./index-Bw6YXbBA.js";var T="http://localhost:19999";async function z(e){return(await g.post(`${T}/api/convert/opencode/claude`,e)).data}async function R(e){return(await g.post(`${T}/api/convert/opencode/codex`,e)).data}async function I(e){return(await g.post(`${T}/api/convert/opencode/gemini`,e)).data}var $={class:"drawer-header"},q={class:"header-icon-wrapper"},B={class:"convert-container"},U={class:"action-row"},D={key:1,class:"result-section"},P={class:"result-meta"},Y={class:"meta-row"},E={class:"meta-row"},G={class:"meta-row"},H={class:"warning-list"},W={class:"action-row"},K=t({__name:"GatewayConvertDrawer",props:{visible:{type:Boolean,default:!1}},emits:["update:visible"],setup(t,{emit:K}){const{drawerWidth:L}=b(620,520),Z=t,F=K,M=p({get:()=>Z.visible,set:e=>F("update:visible",e)}),Q=y([{label:"Claude Code",value:"claude"},{label:"Codex",value:"codex"},{label:"Gemini",value:"gemini"}]),V=y([{label:"Responses API (/v1/responses)",value:"responses"},{label:"Chat Completions (/v1/chat/completions)",value:"chat.completions"}]),X=y("claude"),ee=y("responses"),ae=y(""),te=y(!1),se=y(null),le=y(""),oe=y(!1),ne={claude:{model:"claude-sonnet-4-5",system:[{type:"text",text:"You are a concise assistant."}],messages:[{role:"user",content:[{type:"text",text:"请用三点总结这个需求。"}]}],max_tokens:256,stream:!1},codex:{model:"gpt-5-codex",instructions:"You are Codex.",input:[{type:"message",role:"user",content:[{type:"input_text",text:"ping"}]}],stream:!1,store:!1},gemini:{model:"gemini-2.5-pro",system_instruction:{parts:[{text:"You are a concise assistant."}]},contents:[{role:"user",parts:[{text:"请将以下文本转换为要点列表。"}]}],generationConfig:{maxOutputTokens:256,temperature:.2}}},re=p(()=>se.value?.requestBody?JSON.stringify(se.value.requestBody,null,2):"");function ue(){const e=ne[X.value]||ne.claude;ae.value=JSON.stringify(e,null,2)}async function ie(){if(!oe.value)try{const e=await async function(){return(await g.get(`${T}/api/convert/opencode/formats`)).data}();Array.isArray(e.sourceTypes)&&e.sourceTypes.length>0&&(Q.value=e.sourceTypes.map(e=>({label:e.name||e.id,value:e.id}))),Array.isArray(e.targetApis)&&e.targetApis.length>0&&(V.value=e.targetApis.map(e=>"chat.completions"===e?{label:"Chat Completions (/v1/chat/completions)",value:e}:{label:"Responses API (/v1/responses)",value:e})),e.defaultTargetApi&&(ee.value=e.defaultTargetApi),oe.value=!0}catch(e){}}function ce(){le.value="",se.value=null}async function pe(){let e;le.value="",se.value=null;try{e=JSON.parse(ae.value||"{}")}catch(a){return void(le.value="原始请求 JSON 解析失败,请检查格式")}te.value=!0;try{const a={claude:z,codex:R,gemini:I}[X.value];if(!a)throw new Error(`Unsupported sourceType: ${X.value}`);const t=await a({payload:e,options:{targetApi:ee.value}});if(!1===t.success)throw new Error(t.error||"转换失败");se.value=t,j.success("转换完成")}catch(a){const e=a.response?.data?.error||a.message||"转换失败";le.value=e}finally{te.value=!1}}async function de(){if(!se.value)return;const e={endpoint:se.value.endpoint,requestBody:se.value.requestBody};try{await navigator.clipboard.writeText(JSON.stringify(e,null,2)),j.success("已复制转换结果")}catch(a){j.error("复制失败,请手动复制")}}return i(()=>X.value,()=>{ue()}),i(()=>Z.visible,async e=>{e&&(await ie(),ae.value||ue())},{immediate:!0}),(t,i)=>(u(),r(m(x),{show:M.value,"onUpdate:show":i[3]||(i[3]=e=>M.value=e),width:m(L),placement:"right","show-mask":!0},{default:d(()=>[n(m(_),{closable:"","native-scrollbar":!1},{header:d(()=>[w("div",$,[w("div",q,[n(m(e),{size:18},{default:d(()=>[n(m(h))]),_:1})]),i[4]||(i[4]=w("span",null,"OpenCode 请求转换",-1))])]),default:d(()=>[w("div",B,[n(m(O),{"label-placement":"top"},{default:d(()=>[n(m(k),{label:"来源渠道"},{default:d(()=>[n(m(C),{value:X.value,"onUpdate:value":i[0]||(i[0]=e=>X.value=e),options:Q.value,placeholder:"选择来源渠道"},null,8,["value","options"])]),_:1}),n(m(k),{label:"目标 API"},{default:d(()=>[n(m(C),{value:ee.value,"onUpdate:value":i[1]||(i[1]=e=>ee.value=e),options:V.value,placeholder:"选择目标 API"},null,8,["value","options"])]),_:1}),n(m(k),{label:"原始请求 JSON"},{default:d(()=>[n(m(J),{value:ae.value,"onUpdate:value":i[2]||(i[2]=e=>ae.value=e),type:"textarea",autosize:{minRows:10,maxRows:18},placeholder:"粘贴原始请求 JSON"},null,8,["value"])]),_:1})]),_:1}),w("div",U,[n(m(a),{quaternary:"",onClick:ue},{default:d(()=>[...i[5]||(i[5]=[l("填充示例",-1)])]),_:1}),n(m(A),null,{default:d(()=>[n(m(a),{onClick:ce},{default:d(()=>[...i[6]||(i[6]=[l("清空结果",-1)])]),_:1}),n(m(a),{type:"primary",loading:te.value,onClick:pe},{default:d(()=>[...i[7]||(i[7]=[l("开始转换",-1)])]),_:1},8,["loading"])]),_:1})]),le.value?(u(),r(m(S),{key:0,type:"error","show-icon":!0,style:{"margin-top":"12px"}},{default:d(()=>[l(c(le.value),1)]),_:1})):s("",!0),se.value?(u(),f("div",D,[w("div",P,[w("div",Y,[i[8]||(i[8]=w("span",{class:"meta-label"},"转换端点",-1)),n(m(N),{type:"success",size:"small",bordered:!1},{default:d(()=>[l(c(se.value.endpoint),1)]),_:1})]),w("div",E,[i[9]||(i[9]=w("span",{class:"meta-label"},"目标协议",-1)),n(m(N),{type:"info",size:"small",bordered:!1},{default:d(()=>[l(c(se.value.targetApi),1)]),_:1})]),w("div",G,[i[10]||(i[10]=w("span",{class:"meta-label"},"消息数量",-1)),n(m(N),{size:"small",bordered:!1},{default:d(()=>[l(c(se.value.meta?.messageCount??0),1)]),_:1})])]),Array.isArray(se.value.warnings)&&se.value.warnings.length>0?(u(),r(m(S),{key:0,type:"warning","show-icon":!0,style:{"margin-top":"12px"}},{default:d(()=>[i[11]||(i[11]=w("div",{class:"warning-title"},"转换警告",-1)),w("ul",H,[(u(!0),f(v,null,o(se.value.warnings,(e,a)=>(u(),f("li",{key:a},c(e),1))),128))])]),_:1})):s("",!0),n(m(k),{label:"转换后请求 JSON",style:{"margin-top":"12px"}},{default:d(()=>[n(m(J),{value:re.value,type:"textarea",readonly:"",autosize:{minRows:10,maxRows:18}},null,8,["value"])]),_:1}),w("div",W,[i[13]||(i[13]=w("div",null,null,-1)),n(m(a),{size:"small",onClick:de},{default:d(()=>[...i[12]||(i[12]=[l("复制转换结果",-1)])]),_:1})])])):s("",!0)])]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-27295eec"]]);export{K as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.channel-column[data-v-a1598dde]{background:var(--gradient-card);border:1px solid var(--border-primary);border-radius:18px;flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden;box-shadow:0 22px 52px #0f171d1a}.channel-header[data-v-a1598dde]{background:linear-gradient(180deg, var(--bg-elevated) 0%, var(--bg-secondary) 100%);align-items:center;gap:10px;padding:12px 14px;display:flex;position:relative}.drag-handle[data-v-a1598dde]{cursor:grab;color:var(--text-tertiary);border-radius:4px;align-items:center;margin:-4px 0 -4px -4px;padding:4px;transition:all .2s;display:flex}.drag-handle[data-v-a1598dde]:hover{color:var(--text-secondary);background:var(--bg-tertiary)}.drag-handle[data-v-a1598dde]:active{cursor:grabbing}.channel-header[data-v-a1598dde]:after{content:"";border-radius:1px;height:2px;position:absolute;bottom:0;left:18px;right:18px}.channel-header.claude[data-v-a1598dde]{background:linear-gradient(135deg, #18a0581a 0%, var(--bg-secondary) 100%)}.channel-header.claude[data-v-a1598dde]:after{background:linear-gradient(90deg,#18a058,#18a0584d)}.channel-header.codex[data-v-a1598dde]{background:linear-gradient(135deg, #3b82f61a 0%, var(--bg-secondary) 100%)}.channel-header.codex[data-v-a1598dde]:after{background:linear-gradient(90deg,#3b82f6,#3b82f64d)}.channel-header.gemini[data-v-a1598dde]{background:linear-gradient(135deg, #a855f71a 0%, var(--bg-secondary) 100%)}.channel-header.gemini[data-v-a1598dde]:after{background:linear-gradient(90deg,#a855f7,#a855f74d)}.channel-header.opencode[data-v-a1598dde]{background:linear-gradient(135deg, #ea580c1a 0%, var(--bg-secondary) 100%)}.channel-header.opencode[data-v-a1598dde]:after{background:linear-gradient(90deg,#ea580c,#ea580c4d)}.channel-header.omp[data-v-a1598dde]{background:linear-gradient(135deg, #0f9f9a1a 0%, var(--bg-secondary) 100%)}.channel-header.omp[data-v-a1598dde]:after{background:linear-gradient(90deg,#0f9f9a,#0f9f9a4d)}.channel-header[data-v-a1598dde]:not(.claude):not(.codex):not(.gemini):not(.opencode):not(.omp){background:linear-gradient(135deg, color-mix(in srgb, var(--platform-color) 10%, transparent) 0%, var(--bg-secondary) 100%)}.channel-header[data-v-a1598dde]:not(.claude):not(.codex):not(.gemini):not(.opencode):not(.omp):after{background:var(--platform-color)}.channel-header:not(.claude):not(.codex):not(.gemini):not(.opencode):not(.omp) .header-icon[data-v-a1598dde]{background:var(--platform-color);color:#fff}.header-icon[data-v-a1598dde]{border-radius:12px;justify-content:center;align-items:center;width:36px;height:36px;display:flex;box-shadow:0 10px 24px #0f171d24}.channel-header.claude .header-icon[data-v-a1598dde]{color:#fff;background:linear-gradient(135deg,#18a058 0%,#15803d 100%)}.channel-header.codex .header-icon[data-v-a1598dde]{color:#fff;background:linear-gradient(135deg,#3b82f6 0%,#2563eb 100%)}.channel-header.gemini .header-icon[data-v-a1598dde]{color:#fff;background:linear-gradient(135deg,#a855f7 0%,#9333ea 100%)}.channel-header.opencode .header-icon[data-v-a1598dde]{color:#fff;background:linear-gradient(135deg,#ea580c 0%,#c2410c 100%)}.channel-header.omp .header-icon[data-v-a1598dde]{color:#fff;background:linear-gradient(135deg,#0f9f9a 0%,#0f766e 100%)}.channel-title[data-v-a1598dde]{color:var(--text-primary);letter-spacing:.3px;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;margin:0;font-size:13px;font-weight:700;line-height:1.15;overflow:hidden}.channel-content[data-v-a1598dde]{flex-direction:column;flex:1;gap:6px;min-height:0;padding:10px;display:flex;overflow:hidden}.card[data-v-a1598dde]{background:var(--gradient-card);border:1px solid var(--border-primary);border-radius:14px;transition:border-color .2s,box-shadow .2s,transform .2s;position:relative;overflow:hidden;box-shadow:0 10px 28px #0f171d0f}.card[data-v-a1598dde]:before{content:"";opacity:0;background:linear-gradient(90deg,#0000,#ffffff1a,#0000);height:1px;transition:opacity .3s;position:absolute;top:0;left:0;right:0}.card[data-v-a1598dde]:hover{border-color:var(--border-secondary);box-shadow:0 18px 38px #0f171d1a}.card[data-v-a1598dde]:hover:before{opacity:1}.card.clickable[data-v-a1598dde]{cursor:pointer}.card.clickable[data-v-a1598dde]:hover{border-color:#18a058;transform:translateY(-2px);box-shadow:0 8px 24px #18a0582e}.card.clickable[data-v-a1598dde]:after{content:"";opacity:0;pointer-events:none;background:linear-gradient(135deg,#18a05805 0%,#0000 100%);transition:opacity .3s;position:absolute;inset:0}.card.clickable[data-v-a1598dde]:hover:after{opacity:1}.card-header[data-v-a1598dde]{background:linear-gradient(180deg, var(--bg-secondary) 0%, var(--bg-primary) 100%);border-bottom:1px solid var(--border-primary);align-items:center;gap:8px;min-height:24px;padding:9px 12px;display:flex;position:relative}.card-header.compact[data-v-a1598dde]{padding:8px 12px}.card-header .n-icon[data-v-a1598dde]{color:var(--text-tertiary);transition:color .2s}.card:hover .card-header .n-icon[data-v-a1598dde]{color:var(--text-secondary)}.card-title[data-v-a1598dde]{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.8px;margin:0;font-size:11px;font-weight:700}.runtime-badge[data-v-a1598dde]{color:#10b981;white-space:nowrap;background:linear-gradient(135deg,#10b9811a 0%,#34d3991a 100%);border:1px solid #10b98133;border-radius:999px;align-items:center;margin-left:8px;padding:3px 8px;font-size:10px;font-weight:600;animation:2s ease-in-out infinite pulse-runtime-a1598dde;display:inline-flex}@keyframes pulse-runtime-a1598dde{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(.98)}}.card-body[data-v-a1598dde]{background:0 0;padding:8px 10px}.card-body.compact[data-v-a1598dde]{padding:7px 10px}.proxy-control[data-v-a1598dde]{justify-content:space-between;align-items:center;gap:16px;display:flex}.proxy-info[data-v-a1598dde]{flex-direction:column;gap:4px;display:flex}.proxy-info-row[data-v-a1598dde]{justify-content:space-between;align-items:center;display:flex}.proxy-status[data-v-a1598dde]{align-items:center;gap:6px;display:flex}.proxy-port[data-v-a1598dde]{color:var(--text-secondary);margin-left:6px;font-size:11px}.channel-selector[data-v-a1598dde]{background:linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);border:1px solid var(--border-primary);color:var(--text-secondary);border-radius:4px;align-items:center;padding:4px 8px;transition:all .2s;display:flex}.channel-selector[data-v-a1598dde]:hover{background:var(--hover-bg);border-color:var(--border-secondary);color:var(--text-primary)}.channel-selector[data-v-a1598dde]:disabled{opacity:.5;cursor:not-allowed}.channel-name[data-v-a1598dde]{text-overflow:ellipsis;white-space:nowrap;max-width:90px;font-size:11px;font-weight:500;overflow:hidden}.status-dot[data-v-a1598dde]{background:var(--border-secondary);border-radius:50%;width:8px;height:8px;transition:all .3s}.status-dot.active[data-v-a1598dde]{background:#18a058;box-shadow:0 0 8px #18a05880}.quick-stats[data-v-a1598dde]{gap:16px;padding:4px 0;display:flex}.stat-item[data-v-a1598dde]{flex-direction:column;flex:1;align-items:center;gap:2px;padding:4px 0;display:flex}.stat-divider[data-v-a1598dde]{background:linear-gradient(180deg, transparent 0%, var(--border-primary) 50%, transparent 100%);width:1px}.quick-access-list[data-v-a1598dde]{grid-template-columns:repeat(3,1fr);gap:4px;display:grid}.access-card[data-v-a1598dde]{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:10px;align-items:center;gap:5px;min-height:44px;padding:7px 8px;transition:border-color .2s,box-shadow .2s,transform .2s;display:flex;position:relative;overflow:hidden}.access-card[data-v-a1598dde]:before{content:"";opacity:0;pointer-events:none;transition:opacity .3s;position:absolute;inset:0}.access-icon[data-v-a1598dde]{border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;transition:all .3s;display:flex}.access-content[data-v-a1598dde]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex;overflow:hidden}.access-card-projects .access-icon[data-v-a1598dde]{color:#6366f1;background:linear-gradient(135deg,#6366f126,#8b5cf626)}.access-card-projects[data-v-a1598dde]:before{background:linear-gradient(135deg,#6366f114,#8b5cf614)}.access-card-projects:hover .access-icon[data-v-a1598dde]{background:linear-gradient(135deg,#6366f140,#8b5cf640);transform:translateY(-1px)}.access-card-sessions .access-icon[data-v-a1598dde]{color:#10b981;background:linear-gradient(135deg,#10b98126,#05966926)}.access-card-sessions[data-v-a1598dde]:before{background:linear-gradient(135deg,#10b98114,#05966914)}.access-card-sessions:hover .access-icon[data-v-a1598dde]{background:linear-gradient(135deg,#10b98140,#05966940);transform:translateY(-1px)}.access-card-goto .access-icon[data-v-a1598dde]{color:#f59e0b;background:linear-gradient(135deg,#f59e0b26,#fb923c26)}.access-card-goto[data-v-a1598dde]:before{background:linear-gradient(135deg,#f59e0b14,#fb923c14)}.access-card-goto:hover .access-icon[data-v-a1598dde]{background:linear-gradient(135deg,#f59e0b40,#fb923c40);transform:translate(2px)}.access-card.clickable[data-v-a1598dde]:hover{border-color:var(--border-secondary);transform:translateY(-2px);box-shadow:0 8px 20px #0000001a}.access-card.clickable[data-v-a1598dde]:hover:before{opacity:1}.access-card.disabled[data-v-a1598dde]{cursor:default;opacity:.62}.access-card.disabled[data-v-a1598dde]:hover{box-shadow:none;border-color:var(--border-primary);transform:none}.access-card.clickable[data-v-a1598dde]:active{transform:translateY(0)}.access-label[data-v-a1598dde]{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;white-space:nowrap;font-size:8px;font-weight:600;line-height:1.1;display:block}.access-value[data-v-a1598dde]{color:var(--text-primary);white-space:nowrap;font-size:13px;font-weight:800;line-height:1;display:block}.access-goto[data-v-a1598dde]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:9px;font-weight:700;line-height:1.2;display:block;overflow:hidden}.stats-inline[data-v-a1598dde]{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.stats-inline.stats-3col[data-v-a1598dde]{grid-template-columns:repeat(3,1fr)}.stat-inline-item[data-v-a1598dde]{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:10px;align-items:center;gap:8px;padding:10px;transition:all .2s;display:flex}.stat-inline-item[data-v-a1598dde]:hover{border-color:var(--border-secondary);background:var(--hover-bg)}.stat-icon-dot[data-v-a1598dde]{border-radius:50%;flex-shrink:0;width:8px;height:8px}.stat-icon-dot.requests[data-v-a1598dde]{background:#3b82f6;box-shadow:0 0 6px #3b82f680}.stat-icon-dot.tokens[data-v-a1598dde]{background:#18a058;box-shadow:0 0 6px #18a05880}.stat-icon-dot.cost[data-v-a1598dde]{background:#f59e0b;box-shadow:0 0 6px #f59e0b80}.stat-info[data-v-a1598dde]{flex-direction:column;gap:1px;min-width:0;display:flex}.stat-label[data-v-a1598dde]{color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.2px;font-size:10px;font-weight:500}.stat-value[data-v-a1598dde]{color:var(--text-primary);font-size:16px;font-weight:700;line-height:1.2;transition:all .3s}.stat-value.animating[data-v-a1598dde]{animation:.6s numberChange-a1598dde}@keyframes numberChange-a1598dde{0%{opacity:.5;transform:translateY(-6px)}50%{opacity:1;color:var(--primary-color);transform:translateY(0)}to{opacity:1;transform:translateY(0)}}.stats-card[data-v-a1598dde],.chart-card[data-v-a1598dde]{border-left:2px solid #0000}.stats-card-claude[data-v-a1598dde]{border-left-color:#18a058}.chart-card[data-v-a1598dde]:has(+.stats-card-claude){border-left-color:#18a058}.card[data-v-a1598dde]:has(.panel-card):nth-child(4){border-left-color:#18a058}.chart-card.chart-card-claude[data-v-a1598dde]{border-left-color:#18a058}.stats-card-codex[data-v-a1598dde]{border-left-color:#3b82f6}.chart-card[data-v-a1598dde]:has(+.stats-card-codex){border-left-color:#3b82f6}.card[data-v-a1598dde]:has(.panel-card):nth-child(4){border-left-color:#3b82f6}.chart-card.chart-card-codex[data-v-a1598dde]{border-left-color:#3b82f6}.stats-card-gemini[data-v-a1598dde]{border-left-color:#a855f7}.chart-card[data-v-a1598dde]:has(+.stats-card-gemini){border-left-color:#a855f7}.card[data-v-a1598dde]:has(.panel-card):nth-child(4){border-left-color:#a855f7}.chart-card.chart-card-gemini[data-v-a1598dde]{border-left-color:#a855f7}.stats-card-opencode[data-v-a1598dde]{border-left-color:#ea580c}.chart-card[data-v-a1598dde]:has(+.stats-card-opencode){border-left-color:#ea580c}.card[data-v-a1598dde]:has(.panel-card):nth-child(4){border-left-color:#ea580c}.chart-card.chart-card-opencode[data-v-a1598dde]{border-left-color:#ea580c}.stats-card-omp[data-v-a1598dde]{border-left-color:#0f9f9a}.chart-card[data-v-a1598dde]:has(+.stats-card-omp){border-left-color:#0f9f9a}.card[data-v-a1598dde]:has(.panel-card):nth-child(4){border-left-color:#0f9f9a}.chart-card.chart-card-omp[data-v-a1598dde]{border-left-color:#0f9f9a}.chart-card[data-v-a1598dde]{padding:0;overflow:hidden}.chart-card[data-v-a1598dde] .panel-card{box-shadow:none;background:0 0;border:none;border-radius:0}.stat-requests .stat-value[data-v-a1598dde]{color:#3b82f6}.stat-input .stat-value[data-v-a1598dde]{color:#18a058}.stat-output .stat-value[data-v-a1598dde]{color:#f59e0b}.token-label[data-v-a1598dde]{align-items:center;gap:8px;display:flex}.token-dot[data-v-a1598dde]{border-radius:50%;width:8px;height:8px}.logs-card[data-v-a1598dde]{border:1px solid var(--border-primary);border-radius:14px;flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.logs-card-body[data-v-a1598dde]{flex-direction:column;flex:1;min-height:0;padding:0;display:flex}.logs-card .card-header[data-v-a1598dde]{background:linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%)}.logs-table-wrapper[data-v-a1598dde]{background:var(--bg-primary);flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.logs-table-header[data-v-a1598dde]{background:linear-gradient(180deg, var(--bg-tertiary) 0%, var(--bg-secondary) 100%);border-bottom:1px solid var(--border-primary);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.6px;flex-shrink:0;padding:8px 12px;font-size:11px;font-weight:700;display:flex}.logs-header-claude .log-col[data-v-a1598dde]{color:#18a058b3;font-weight:600}.logs-header-codex .log-col[data-v-a1598dde]{color:#3b82f6b3;font-weight:600}.logs-header-gemini .log-col[data-v-a1598dde]{color:#a855f7b3;font-weight:600}.logs-header-opencode .log-col[data-v-a1598dde]{color:#ea580cb3;font-weight:600}.logs-header-omp .log-col[data-v-a1598dde]{color:#0f9f9ab3;font-weight:600}[data-theme=dark] .logs-header-claude .log-col[data-v-a1598dde]{color:#34d399a6}[data-theme=dark] .logs-header-codex .log-col[data-v-a1598dde]{color:#60a5faa6}[data-theme=dark] .logs-header-gemini .log-col[data-v-a1598dde]{color:#c084fca6}[data-theme=dark] .logs-header-opencode .log-col[data-v-a1598dde]{color:#fb923ca6}[data-theme=dark] .logs-header-omp .log-col[data-v-a1598dde]{color:#2dd4bfa6}[data-theme=dark] .channel-column[data-v-a1598dde]{background:linear-gradient(#121b22fa 0%,#091016fa 100%);border-color:#364c56d1;box-shadow:0 18px 42px #00000047}[data-theme=dark] .channel-header[data-v-a1598dde]{background:linear-gradient(#16222ae6 0%,#0d161dd1 100%)}[data-theme=dark] .card[data-v-a1598dde],[data-theme=dark] .access-card[data-v-a1598dde],[data-theme=dark] .stat-inline-item[data-v-a1598dde]{background:linear-gradient(#121c23f0 0%,#0c151cf5 100%);border-color:#364c56c7}[data-theme=dark] .card[data-v-a1598dde]:hover,[data-theme=dark] .access-card.clickable[data-v-a1598dde]:hover,[data-theme=dark] .stat-inline-item[data-v-a1598dde]:hover{border-color:#4c6570eb;box-shadow:0 12px 28px #0000003d}[data-theme=dark] .card-header[data-v-a1598dde]{background:linear-gradient(#16222aeb 0%,#0e181ff5 100%);border-bottom-color:#364c56b8}[data-theme=dark] .logs-table-wrapper[data-v-a1598dde]{background:#091016f5}[data-theme=dark] .logs-table-header[data-v-a1598dde]{background:linear-gradient(#121d25f5 0%,#0b141bfa 100%);border-bottom-color:#364c56c2}.logs-container[data-v-a1598dde]{flex:1;min-height:0;overflow:hidden auto}.logs-container[data-v-a1598dde]::-webkit-scrollbar{width:4px}.logs-container[data-v-a1598dde]::-webkit-scrollbar-thumb{background:#18a0584d;border-radius:2px}.logs-container[data-v-a1598dde]::-webkit-scrollbar-thumb:hover{background:#18a05880}.empty-logs[data-v-a1598dde]{color:var(--text-tertiary);text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:200px;padding:40px 20px;display:flex}.log-row[data-v-a1598dde]{border-bottom:1px solid var(--border-primary);background:var(--bg-primary);align-items:center;min-height:40px;padding:10px 12px;font-size:12px;transition:all .2s;display:flex;position:relative}.log-row[data-v-a1598dde]:nth-child(2n){background:var(--bg-secondary)}[data-theme=dark] .log-row[data-v-a1598dde]{background:#091016f5;border-bottom-color:#364c5694}[data-theme=dark] .log-row[data-v-a1598dde]:nth-child(2n){background:#0d161df5}.log-row[data-v-a1598dde]:hover{background:var(--hover-bg);transform:translate(2px)}.log-row.new-log[data-v-a1598dde]{border-left:3px solid #18a058;animation:4.5s cubic-bezier(.25,.46,.45,.94) forwards newLogPulse-a1598dde}@keyframes newLogPulse-a1598dde{0%{background:linear-gradient(90deg,#18a05826 0%,#18a0580f 100%);box-shadow:0 0 8px #18a05833}5%{background:linear-gradient(90deg,#18a0582e 0%,#18a05814 100%);box-shadow:0 0 12px 1px #18a05840}15%{background:linear-gradient(90deg,#18a05829 0%,#18a05812 100%);box-shadow:0 0 10px 1px #18a05833}30%{background:linear-gradient(90deg,#18a0581f 0%,#18a0580d 100%);box-shadow:0 0 6px #18a05826}50%{background:linear-gradient(90deg,#18a05814 0%,#18a05808 100%);box-shadow:0 0 4px #18a0581a}70%{background:linear-gradient(90deg,#18a0580a 0%,#18a05804 100%);box-shadow:0 0 2px #18a0580f}85%{background:linear-gradient(90deg,#18a05805 0%,#18a05802 100%);box-shadow:0 0 1px #18a05808}to{background:0 0;border-left-color:#0000;box-shadow:0 0 #18a05800}}[data-theme=dark] .log-row.new-log[data-v-a1598dde]{animation:4.5s cubic-bezier(.25,.46,.45,.94) forwards newLogPulseDark-a1598dde}@keyframes newLogPulseDark-a1598dde{0%{background:linear-gradient(90deg,#18a05833 0%,#18a05814 100%);box-shadow:0 0 10px #18a05840}5%{background:linear-gradient(90deg,#18a0583d 0%,#18a0581a 100%);box-shadow:0 0 14px 2px #18a0584d}15%{background:linear-gradient(90deg,#18a05836 0%,#18a05817 100%);box-shadow:0 0 12px 1px #18a05840}30%{background:linear-gradient(90deg,#18a05829 0%,#18a05812 100%);box-shadow:0 0 8px 1px #18a0582e}50%{background:linear-gradient(90deg,#18a0581c 0%,#18a0580b 100%);box-shadow:0 0 5px #18a0581f}70%{background:linear-gradient(90deg,#18a0580f 0%,#18a05806 100%);box-shadow:0 0 3px #18a05814}85%{background:linear-gradient(90deg,#18a05808 0%,#18a05803 100%);box-shadow:0 0 1px #18a0580a}to{background:0 0;border-left-color:#0000;box-shadow:0 0 #18a05800}}.log-row.new-log.action-row[data-v-a1598dde]{border-left:3px solid #18a058}.log-row.action-row[data-v-a1598dde]{background:linear-gradient(90deg,#18a0581f 0%,#18a0580a 100%);border-left:3px solid #18a058;padding-left:8px}.log-row.error-row[data-v-a1598dde]{background:linear-gradient(90deg,#d0305024 0%,#d030500a 100%);border-left:3px solid #d03050;padding-left:8px}.log-row.action-row[data-v-a1598dde]:hover{background:linear-gradient(90deg,#18a0582e 0%,#18a05814 100%)}.log-row.error-row[data-v-a1598dde]:hover{background:linear-gradient(90deg,#d0305033 0%,#d0305014 100%)}.action-content[data-v-a1598dde]{align-items:center;gap:8px;width:100%;display:flex}.action-msg[data-v-a1598dde]{color:#18a058;letter-spacing:.2px;flex:1;font-size:11px;font-weight:600}.action-msg.error-msg[data-v-a1598dde]{color:#d03050}.action-time[data-v-a1598dde]{color:var(--text-tertiary);background:#18a0581a;border-radius:4px;padding:2px 6px;font-family:SF Mono,Monaco,monospace;font-size:10px}.action-time.error-time[data-v-a1598dde]{background:#d030501f}.log-col[data-v-a1598dde]{text-overflow:ellipsis;white-space:nowrap;align-items:center;display:flex;overflow:hidden}.col-channel[data-v-a1598dde]{min-width:0}.col-channel .n-tag[data-v-a1598dde]{border-radius:4px;max-width:100%;padding:3px 10px;font-size:11px;font-weight:600}.col-token[data-v-a1598dde]{color:var(--text-secondary);background:#00000008;border-radius:4px;justify-content:center;margin:0 3px;padding:4px 8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:12px;font-weight:600}[data-theme=dark] .col-token[data-v-a1598dde]{color:var(--text-secondary);background:#ffffff0b}.col-time[data-v-a1598dde]{color:var(--text-tertiary);opacity:.85;justify-content:flex-end;padding-right:2px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;font-weight:500}.log-row:hover .col-time[data-v-a1598dde]{opacity:1;color:var(--text-secondary)}.col-channel-claude[data-v-a1598dde]{flex:2 60px;min-width:50px}.col-token-claude[data-v-a1598dde]{flex:40px;min-width:35px}.col-time-claude[data-v-a1598dde]{flex:1.5 55px;min-width:50px}.col-channel-codex[data-v-a1598dde]{flex:2 60px;min-width:50px}.col-token-codex[data-v-a1598dde]{flex:40px;min-width:35px}.col-time-codex[data-v-a1598dde]{flex:1.5 55px;min-width:50px}.col-channel-gemini[data-v-a1598dde]{flex:2.5 70px;min-width:55px}.col-token-gemini[data-v-a1598dde]{flex:1.2 45px;min-width:40px}.col-time-gemini[data-v-a1598dde]{flex:1.8 60px;min-width:55px}.col-channel-opencode[data-v-a1598dde]{flex:2.5 70px;min-width:55px}.col-token-opencode[data-v-a1598dde]{flex:1.2 45px;min-width:40px}.col-time-opencode[data-v-a1598dde]{flex:1.8 60px;min-width:55px}.col-channel-omp[data-v-a1598dde]{flex:2.5 70px;min-width:55px}.col-token-omp[data-v-a1598dde]{flex:1.2 45px;min-width:40px}.col-time-omp[data-v-a1598dde]{flex:1.8 60px;min-width:55px}.claude-extra-area[data-v-a1598dde]{align-items:center;gap:6px;margin-left:auto;display:flex}.mcp-count-tag[data-v-a1598dde],.skills-count-tag[data-v-a1598dde]{cursor:pointer;border-radius:4px;height:22px;padding:0 8px;font-size:10px;font-weight:500;line-height:22px;transition:all .2s}.mcp-count-tag.clickable[data-v-a1598dde]:hover,.skills-count-tag.clickable[data-v-a1598dde]:hover{filter:brightness(1.1);transform:scale(1.03)}.mcp-quick-panel[data-v-a1598dde],.skills-quick-panel[data-v-a1598dde]{padding:2px 0}.mcp-quick-panel .panel-title[data-v-a1598dde],.skills-quick-panel .panel-title[data-v-a1598dde]{border-bottom:1px solid var(--border-primary);justify-content:space-between;align-items:center;margin-bottom:4px;padding:6px 10px 8px;display:flex}.mcp-quick-panel .panel-title span[data-v-a1598dde]:first-child,.skills-quick-panel .panel-title span[data-v-a1598dde]:first-child{color:var(--text-primary);font-size:13px;font-weight:600}.no-items[data-v-a1598dde]{text-align:center;padding:16px 10px}.mcp-quick-list[data-v-a1598dde],.skills-quick-list[data-v-a1598dde]{max-height:300px;padding:0 4px 4px;overflow-y:auto}.mcp-quick-item[data-v-a1598dde],.skill-quick-item[data-v-a1598dde]{background:var(--bg-secondary);border-radius:5px;align-items:center;gap:8px;margin-bottom:4px;padding:8px 10px;transition:all .2s;display:flex}.mcp-quick-item[data-v-a1598dde]:hover,.skill-quick-item[data-v-a1598dde]:hover{background:var(--hover-bg)}.mcp-item-icon[data-v-a1598dde],.skill-item-icon[data-v-a1598dde]{border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.mcp-item-icon[data-v-a1598dde]{color:#3b82f6;background:linear-gradient(135deg,#3b82f626,#3b82f60d)}.skill-item-icon[data-v-a1598dde]{color:#18a058;background:linear-gradient(135deg,#18a05826,#18a0580d)}.mcp-item-info[data-v-a1598dde],.skill-item-info[data-v-a1598dde]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.mcp-item-name[data-v-a1598dde],.skill-item-name[data-v-a1598dde]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.mcp-item-type[data-v-a1598dde]{color:var(--text-tertiary);text-transform:uppercase;font-size:10px}.skill-item-desc[data-v-a1598dde]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.mcp-item-status[data-v-a1598dde]{flex-shrink:0}.mcp-item-status .status-dot[data-v-a1598dde]{background:var(--border-secondary);border-radius:50%;width:8px;height:8px}.mcp-item-status.online .status-dot[data-v-a1598dde]{background:#18a058;box-shadow:0 0 6px #18a05880}.mcp-item-status.error .status-dot[data-v-a1598dde]{background:#d03050;box-shadow:0 0 6px #d0305080}.mcp-quick-list[data-v-a1598dde]::-webkit-scrollbar{width:4px}.skills-quick-list[data-v-a1598dde]::-webkit-scrollbar{width:4px}.mcp-quick-list[data-v-a1598dde]::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}.skills-quick-list[data-v-a1598dde]::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}[data-theme=dark] .mcp-quick-list[data-v-a1598dde]::-webkit-scrollbar-thumb{background:#ffffff26}[data-theme=dark] .skills-quick-list[data-v-a1598dde]::-webkit-scrollbar-thumb{background:#ffffff26}.config-shortcut-button[data-v-a1598dde]{--asset-shortcut-text:var(--text-color-3);background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;transition:transform .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1);display:flex;box-shadow:0 2px 4px #0000000d;--n-text-color:var(--asset-shortcut-text)!important;--n-text-color-hover:var(--asset-shortcut-text)!important;--n-text-color-pressed:var(--asset-shortcut-text)!important;--n-text-color-focus:var(--asset-shortcut-text)!important;color:var(--asset-shortcut-text)!important;padding:6px!important}.config-shortcut-button .n-icon[data-v-a1598dde]{transition:transform .18s;color:var(--asset-shortcut-text)!important}.config-shortcut-button[data-v-a1598dde] .n-button__content,.config-shortcut-button[data-v-a1598dde] .n-button__icon{color:var(--asset-shortcut-text)!important}.config-shortcut-button[data-v-a1598dde]:hover,.config-shortcut-button[data-v-a1598dde]:focus,.config-shortcut-button[data-v-a1598dde]:focus-visible{background:var(--bg-secondary);border-color:var(--border-primary);transform:translateY(-1px);box-shadow:0 3px 8px #00000014;color:var(--asset-shortcut-text)!important}.config-shortcut-button:hover .n-icon[data-v-a1598dde],.config-shortcut-button:focus .n-icon[data-v-a1598dde],.config-shortcut-button:focus-visible .n-icon[data-v-a1598dde]{transform:scale(1.1);color:var(--asset-shortcut-text)!important}.config-shortcut-button[data-v-a1598dde]:active{background:var(--bg-secondary);border-color:var(--border-primary);transform:translateY(0);box-shadow:0 2px 4px #0000000d;color:var(--asset-shortcut-text)!important}.lock-button[data-v-a1598dde]{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;margin-left:6px;transition:all .25s cubic-bezier(.4,0,.2,1);display:flex;box-shadow:0 2px 4px #0000000d;padding:6px!important}.lock-button .n-icon[data-v-a1598dde]{color:var(--text-color-3);transition:all .25s}.lock-button[data-v-a1598dde]:hover{background:linear-gradient(135deg,#6b72801a,#6b72800d);border-color:#6b72804d;transform:translateY(-1px);box-shadow:0 4px 12px #0000001a}.lock-button:hover .n-icon[data-v-a1598dde]{color:var(--text-color-1);transform:scale(1.1)}.lock-button[data-v-a1598dde]:active{transform:translateY(0);box-shadow:0 2px 4px #0000000d}.locked-overlay[data-v-a1598dde]{background:var(--bg-secondary);border:1px solid var(--border-primary);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:6px;flex:1;justify-content:center;align-items:center;margin:10px;display:flex;position:relative;overflow:hidden}.locked-overlay[data-v-a1598dde]:before{content:"";opacity:.4;filter:blur(60px);pointer-events:none;border-radius:50%;width:400px;height:400px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.locked-claude[data-v-a1598dde]{background:linear-gradient(135deg, #18a05808 0%, var(--bg-secondary) 50%, #18a05805 100%)}.locked-claude[data-v-a1598dde]:before{background:radial-gradient(circle,#18a05826 0%,#0000 70%)}.locked-codex[data-v-a1598dde]{background:linear-gradient(135deg, #3b82f608 0%, var(--bg-secondary) 50%, #3b82f605 100%)}.locked-codex[data-v-a1598dde]:before{background:radial-gradient(circle,#3b82f626 0%,#0000 70%)}.locked-gemini[data-v-a1598dde]{background:linear-gradient(135deg, #a855f708 0%, var(--bg-secondary) 50%, #a855f705 100%)}.locked-gemini[data-v-a1598dde]:before{background:radial-gradient(circle,#a855f726 0%,#0000 70%)}.locked-opencode[data-v-a1598dde]{background:linear-gradient(135deg, #ea580c08 0%, var(--bg-secondary) 50%, #ea580c05 100%)}.locked-opencode[data-v-a1598dde]:before{background:radial-gradient(circle,#ea580c26 0%,#0000 70%)}.locked-omp[data-v-a1598dde]{background:linear-gradient(135deg, #0f9f9a08 0%, var(--bg-secondary) 50%, #0f9f9a05 100%)}.locked-omp[data-v-a1598dde]:before{background:radial-gradient(circle,#0f9f9a26 0%,#0000 70%)}.locked-content[data-v-a1598dde]{text-align:center;z-index:1;flex-direction:column;align-items:center;gap:20px;padding:60px 40px;display:flex;position:relative}.lock-icon[data-v-a1598dde]{background:var(--bg-primary);border:2px solid var(--border-primary);border-radius:10px;justify-content:center;align-items:center;width:96px;height:96px;margin-bottom:8px;animation:3s ease-in-out infinite lock-float-a1598dde;display:flex;position:relative;box-shadow:0 8px 24px #0000001f}@keyframes lock-float-a1598dde{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.lock-icon[data-v-a1598dde]:before{content:"";opacity:.6;filter:blur(12px);border-radius:20px;position:absolute;inset:-8px}.locked-claude .lock-icon[data-v-a1598dde]{background:linear-gradient(135deg, #18a0581f 0%, var(--bg-primary) 100%);border-color:#18a05840;box-shadow:0 8px 24px #18a05826,inset 0 0 0 1px #18a0581a}.locked-claude .lock-icon[data-v-a1598dde]:before{background:radial-gradient(circle,#18a0584d 0%,#0000 60%)}.locked-claude .lock-icon .n-icon[data-v-a1598dde]{color:#18a058;filter:drop-shadow(0 2px 4px #18a0584d)}.locked-codex .lock-icon[data-v-a1598dde]{background:linear-gradient(135deg, #3b82f61f 0%, var(--bg-primary) 100%);border-color:#3b82f640;box-shadow:0 8px 24px #3b82f626,inset 0 0 0 1px #3b82f61a}.locked-codex .lock-icon[data-v-a1598dde]:before{background:radial-gradient(circle,#3b82f64d 0%,#0000 60%)}.locked-codex .lock-icon .n-icon[data-v-a1598dde]{color:#3b82f6;filter:drop-shadow(0 2px 4px #3b82f64d)}.locked-gemini .lock-icon[data-v-a1598dde]{background:linear-gradient(135deg, #a855f71f 0%, var(--bg-primary) 100%);border-color:#a855f740;box-shadow:0 8px 24px #a855f726,inset 0 0 0 1px #a855f71a}.locked-gemini .lock-icon[data-v-a1598dde]:before{background:radial-gradient(circle,#a855f74d 0%,#0000 60%)}.locked-gemini .lock-icon .n-icon[data-v-a1598dde]{color:#a855f7;filter:drop-shadow(0 2px 4px #a855f74d)}.locked-opencode .lock-icon[data-v-a1598dde]{background:linear-gradient(135deg, #ea580c1f 0%, var(--bg-primary) 100%);border-color:#ea580c40;box-shadow:0 8px 24px #ea580c26,inset 0 0 0 1px #ea580c1a}.locked-opencode .lock-icon[data-v-a1598dde]:before{background:radial-gradient(circle,#ea580c4d 0%,#0000 60%)}.locked-opencode .lock-icon .n-icon[data-v-a1598dde]{color:#ea580c;filter:drop-shadow(0 2px 4px #ea580c4d)}.locked-omp .lock-icon[data-v-a1598dde]{background:linear-gradient(135deg, #0f9f9a1f 0%, var(--bg-primary) 100%);border-color:#0f9f9a40;box-shadow:0 8px 24px #0f9f9a26,inset 0 0 0 1px #0f9f9a1a}.locked-omp .lock-icon[data-v-a1598dde]:before{background:radial-gradient(circle,#0f9f9a4d 0%,#0000 60%)}.locked-omp .lock-icon .n-icon[data-v-a1598dde]{color:#0f9f9a;filter:drop-shadow(0 2px 4px #0f9f9a4d)}.lock-icon .n-icon[data-v-a1598dde]{opacity:.85;z-index:1;position:relative}.locked-title[data-v-a1598dde]{color:var(--text-color-1);letter-spacing:.3px;margin:0;font-size:17px;font-weight:600}.locked-hint[data-v-a1598dde]{color:var(--text-color-3);opacity:.9;max-width:220px;font-size:13px;line-height:1.7}.channel-status[data-v-a1598dde]{cursor:pointer;border-radius:4px;transition:all .2s;padding:4px 8px!important}.channel-status[data-v-a1598dde]:hover{background:var(--hover-bg)}.channel-quick-panel[data-v-a1598dde]{padding:4px 0}.panel-title[data-v-a1598dde]{border-bottom:1px solid var(--border-primary);justify-content:space-between;align-items:center;margin-bottom:8px;padding:8px 12px 12px;display:flex}.panel-title span[data-v-a1598dde]:first-child{color:var(--text-primary);font-size:13px;font-weight:600}.no-channels[data-v-a1598dde]{text-align:center;padding:24px 12px}.channel-quick-list[data-v-a1598dde]{max-height:360px;overflow-y:auto}.channel-quick-item[data-v-a1598dde]{background:var(--bg-secondary);border-radius:6px;flex-direction:column;gap:8px;margin:0 4px 6px;padding:10px 12px;transition:all .2s;display:flex}.channel-quick-item[data-v-a1598dde]:hover{background:var(--hover-bg)}.channel-quick-item.disabled[data-v-a1598dde]{opacity:.6}.channel-quick-info[data-v-a1598dde]{align-items:center;gap:8px;width:100%;display:flex}.channel-quick-name[data-v-a1598dde]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.channel-metrics[data-v-a1598dde]{gap:6px;width:100%;display:flex}.channel-metrics .metric-item[data-v-a1598dde]{background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:4px;flex-direction:column;flex:1;align-items:center;gap:2px;padding:6px 4px;display:flex}.channel-metrics .metric-label[data-v-a1598dde]{color:var(--text-tertiary);font-size:10px;font-weight:500}.channel-metrics .metric-value[data-v-a1598dde]{color:var(--text-primary);font-family:SF Mono,Monaco,monospace;font-size:12px;font-weight:700}.channel-metrics .metric-value.active[data-v-a1598dde]{color:#f59e0b}.channel-switching-tip[data-v-a1598dde]{color:var(--text-tertiary);padding:0 2px;font-size:11px}.channel-quick-item.disabled .channel-metrics .metric-value[data-v-a1598dde]{color:var(--text-tertiary)}.channel-quick-list[data-v-a1598dde]::-webkit-scrollbar{width:4px}.channel-quick-list[data-v-a1598dde]::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}[data-theme=dark] .channel-quick-list[data-v-a1598dde]::-webkit-scrollbar-thumb{background:#ffffff26}@media (width<=1024px){.channel-column[data-v-a1598dde]{border-radius:6px}.card-header[data-v-a1598dde]{padding:8px 10px}.card-title[data-v-a1598dde]{font-size:13px}.stats-inline[data-v-a1598dde]{gap:6px}.stat-inline-item[data-v-a1598dde]{padding:8px}.stat-value[data-v-a1598dde]{font-size:14px}.stat-label[data-v-a1598dde]{font-size:9px}.logs-table-header[data-v-a1598dde]{padding:8px 10px;font-size:10px}.log-row[data-v-a1598dde]{padding:8px 10px;font-size:11px}}@media (width<=768px){.channel-column[data-v-a1598dde]{border-radius:6px;height:auto;min-height:300px;max-height:400px}.card-header[data-v-a1598dde]{gap:6px;padding:8px}.card-title[data-v-a1598dde]{font-size:12px}.stats-inline[data-v-a1598dde]{gap:4px}.stat-inline-item[data-v-a1598dde]{gap:6px;padding:6px}.stat-icon-dot[data-v-a1598dde]{width:6px;height:6px}.stat-value[data-v-a1598dde]{font-size:13px}.stat-label[data-v-a1598dde]{font-size:8px}.logs-card[data-v-a1598dde]{min-height:150px}.logs-table-header[data-v-a1598dde]{padding:6px 8px;font-size:9px}.log-row[data-v-a1598dde]{min-height:32px;padding:6px 8px;font-size:10px}.col-token[data-v-a1598dde]{padding:2px 4px;font-size:10px}.col-time[data-v-a1598dde]{font-size:9px}.mcp-count-tag[data-v-a1598dde],.skills-count-tag[data-v-a1598dde]{height:18px;padding:0 6px;font-size:9px;line-height:18px}.config-shortcut-button[data-v-a1598dde]{gap:4px;padding:4px 8px;font-size:10px}.lock-button[data-v-a1598dde]{width:26px;height:26px}}@media (width<=640px){.channel-column[data-v-a1598dde]{min-height:250px;max-height:350px}.card-header[data-v-a1598dde]{flex-wrap:wrap;gap:4px;padding:6px}.card-title[data-v-a1598dde]{font-size:11px}.stats-card .card-content[data-v-a1598dde]{padding:6px}.stats-inline[data-v-a1598dde]{flex-wrap:wrap;gap:3px}.stat-inline-item[data-v-a1598dde]{flex:auto;gap:4px;min-width:calc(33% - 3px);padding:5px}.stat-icon-dot[data-v-a1598dde]{width:5px;height:5px}.stat-value[data-v-a1598dde]{font-size:12px}.stat-label[data-v-a1598dde]{font-size:7px}.logs-card[data-v-a1598dde]{min-height:120px}.logs-table-header[data-v-a1598dde]{letter-spacing:.3px;padding:5px 6px;font-size:8px}.log-row[data-v-a1598dde]{min-height:28px;padding:5px 6px;font-size:9px}.col-channel .n-tag[data-v-a1598dde]{padding:2px 6px;font-size:9px}.col-token[data-v-a1598dde]{margin:0 1px;padding:2px 3px;font-size:9px}.col-time[data-v-a1598dde]{font-size:8px}.claude-extra-area[data-v-a1598dde]{gap:4px}.mcp-count-tag[data-v-a1598dde],.skills-count-tag[data-v-a1598dde]{height:16px;padding:0 4px;font-size:8px;line-height:16px}.config-shortcut-button[data-v-a1598dde]{gap:3px;padding:3px 6px;font-size:9px}.config-shortcut-button .n-icon[data-v-a1598dde]{font-size:12px!important}.lock-button[data-v-a1598dde]{width:24px;height:24px;margin-left:4px}.lock-button .n-icon[data-v-a1598dde]{font-size:12px!important}.locked-content[data-v-a1598dde]{gap:12px;padding:30px 20px}.lock-icon[data-v-a1598dde]{width:64px;height:64px}.lock-icon .n-icon[data-v-a1598dde]{font-size:28px!important}.lock-title[data-v-a1598dde]{font-size:14px}.lock-subtitle[data-v-a1598dde]{font-size:10px}.unlock-btn[data-v-a1598dde]{padding:8px 16px;font-size:11px}}@media (width<=480px){.channel-column[data-v-a1598dde]{min-height:220px;max-height:300px}.card-header[data-v-a1598dde]{padding:5px}.card-title[data-v-a1598dde]{font-size:10px}.stats-inline[data-v-a1598dde]{gap:2px}.stat-inline-item[data-v-a1598dde]{gap:3px;padding:4px}.stat-value[data-v-a1598dde]{font-size:11px}.stat-label[data-v-a1598dde]{font-size:6px}.logs-table-header[data-v-a1598dde]{padding:4px 5px;font-size:7px}.log-row[data-v-a1598dde]{min-height:24px;padding:4px 5px;font-size:8px}.col-token[data-v-a1598dde]{font-size:8px}.col-time[data-v-a1598dde]{font-size:7px}}.card[data-v-a1598dde]:not(.logs-card) .n-collapse,.card[data-v-a1598dde]:not(.logs-card) .n-collapse-item{background:0 0}.card[data-v-a1598dde] .n-collapse-item__header{background:0 0;padding:12px 16px;transition:all .3s}.card[data-v-a1598dde] .n-collapse-item__header:hover{background:#00000005}.card[data-v-a1598dde] .n-collapse-item__header-main{width:100%}.card[data-v-a1598dde]:not(.logs-card) .n-collapse-item__content-wrapper{padding:0 16px 12px}.card[data-v-a1598dde]:not(.logs-card) .n-collapse-item__content-inner{padding-top:0}.chart-card[data-v-a1598dde]:has(.n-collapse){padding:0}.dashboard-container[data-v-5858e14d]{background:var(--gradient-bg);box-sizing:border-box;flex-direction:column;height:100%;padding:18px;display:flex;overflow:hidden}.dashboard-toolbar[data-v-5858e14d]{flex-shrink:0;justify-content:flex-end;margin-bottom:8px;display:flex}.analytics-link[data-v-5858e14d]{color:var(--primary-color,#18a058);background:#18a05814;border-radius:4px;align-items:center;gap:5px;padding:4px 10px;font-size:12px;text-decoration:none;transition:background .2s;display:inline-flex}.analytics-link[data-v-5858e14d]:hover{background:#18a05826}.analytics-link-icon[data-v-5858e14d]{font-size:14px}.dashboard-grid[data-v-5858e14d]{box-sizing:border-box;flex:1;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));align-items:stretch;gap:16px;min-height:0;display:grid;overflow:hidden}.dashboard-grid[data-v-5858e14d] .sortable-ghost{opacity:.4}.dashboard-grid[data-v-5858e14d] .sortable-chosen{box-shadow:0 8px 24px #00000026}@media (width<=1240px){.dashboard-grid[data-v-5858e14d]{grid-template-columns:repeat(3,1fr)}}@media (width<=960px){.dashboard-grid[data-v-5858e14d]{grid-template-columns:repeat(2,1fr)}}@media (width<=1024px){.dashboard-container[data-v-5858e14d]{padding:14px}.dashboard-grid[data-v-5858e14d]{gap:12px}}@media (width<=900px){.dashboard-grid[data-v-5858e14d]{grid-template-columns:1fr}}@media (width<=768px){.dashboard-container[data-v-5858e14d]{padding:10px;overflow-y:auto}.dashboard-grid[data-v-5858e14d]{gap:10px;min-height:auto;overflow:visible}}@media (width<=640px){.dashboard-container[data-v-5858e14d]{padding:6px}.dashboard-grid[data-v-5858e14d]{gap:6px}}@media (width<=480px){.dashboard-container[data-v-5858e14d]{padding:4px}.dashboard-grid[data-v-5858e14d]{gap:4px}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,s as a,t as l}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as s,D as n,H as t,I as c,J as o,K as i,O as r,S as u,V as d,W as v,Y as p,Z as h,_t as y,b as g,et as m,g as f,gt as k,ht as T,i as b,m as w,mt as $,st as _,w as C,x}from"./vue-vendor-BqZbbXHA.js";import{t as z}from"./vendors-D0c_0KLP.js";import{a as S,c as j,t as q,u as L}from"./platforms-mqqe_82d.js";import{C as M,G as I,I as E,L as O,O as A,Ot as D,T as F,Y as N,ft as P,i as J,n as U,r as V,v as K,xt as R,y as Y,yt as H}from"./icons-B-AzZoeE.js";import{t as G,u as W}from"./use-message-DBsCm7FJ.js";import{A as Z,C as B,Et as Q,Y as X,g as ee,j as ae,ut as le,v as se}from"./index-Bw6YXbBA.js";import{t as ne}from"./RecentSessionsDrawer-yOpScIwI.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"},Je={class:"access-value"},Ue={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=l({__name:"ChannelColumn",props:{channelType:{type:String,required:!0}},setup(l){const z=l,S=b(),Q=q(),fa=G(),{getProxyState:ka,getChannels:Ta,getSchedulerState:ba,startProxy:wa,stopProxy:$a,getLogs:_a,clearLogsForSource:Ca,loadChannels:xa,logLimit:za,statsInterval:Sa}=se(),{dashboardData:ja,isLoading:qa,loadDashboard:La,scheduleRefresh:Ma}=ee(),Ia=g(()=>Q.get(z.channelType)||{key:z.channelType,label:z.channelType,title:z.channelType,icon:J,color:"#64748b",capabilities:{},resourceTypes:{}}),Ea=g(()=>Ia.value.title||Ia.value.label||z.channelType),Oa=g(()=>Ia.value.icon||J),Aa=g(()=>Ia.value.color||"#64748b"),Da=g(()=>Ia.value.label||Ia.value.title||z.channelType),Fa=g(()=>ka(z.channelType)?.value||{}),Na=_({projects:0,sessions:0}),Pa=_({requests:0,tokens:0,cost:0}),Ja=_({requests:0,tokens:0,cost:0}),Ua={requests:0,tokens:0,cost:3},Va={requests:null,tokens:null,cost:null},Ka=_({requests:!1,tokens:!1,cost:!1}),Ra=g(()=>ja.value?.todayStats?.[z.channelType]?.byModel||{});function Ya(e,a,l,s=600){Va[e]&&cancelAnimationFrame(Va[e]),Ka.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=Ua[e]??0,d=Math.pow(10,u),v=u>0?Math.round(r*d)/d:Math.round(r);Ja.value[e]=v,o<1?Va[e]=requestAnimationFrame(t):Ka.value[e]=!1};Va[e]=requestAnimationFrame(t)}const Ha=_(!1);function Ga(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 Wa=_(function(){try{const e=localStorage.getItem(ma);if(e)return JSON.parse(e)[z.channelType]||!1}catch(e){}return!1}());async function Za(){Wa.value=!Wa.value,Ga(Wa.value);try{if(await L("channelLocks",z.channelType,Wa.value),ja.value){const e=ja.value.uiConfig||{},a={...e.channelLocks||{}};a[z.channelType]=Wa.value,ja.value={...ja.value,uiConfig:{...e,channelLocks:a}}}}catch(e){}}const Ba=_(!0);function Qa(e){e.detail&&void 0!==e.detail.showLogs&&(Ba.value=e.detail.showLogs)}const Xa=_(Date.now()),el=g(()=>{if(!Fa.value.running)return"";const e=Fa.value.startTime;if(!e)return"";const a=Xa.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}),al=_(null),ll=g(()=>za.value),sl=g(()=>fl()?(_a(z.channelType)?.value||[]).slice(0,ll.value):[]);let nl=null,tl=null,cl=null,ol=!1,il=null;const rl=g(()=>{const e=Ta(z.channelType)?.value||[];return[...e.filter(e=>!1!==e.enabled),...e.filter(e=>!1===e.enabled)]});function ul(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 dl=g(()=>{const e=rl.value.filter(e=>!1!==e.enabled).length;return Fa.value.running?`${e}个渠道动态切换中`:rl.value.length>0?`${e}个渠道已启用`:"无渠道"}),vl=g(()=>ja.value?.todayStats?.[z.channelType]?.byChannel||{});function pl(e){return vl.value[e]||{requests:0,tokens:0,cost:0}}function hl(e,a){return e?.usageMissing?"--":e?.tokens?.[a]||0}function yl(e){return Q.hasCapability(z.channelType,e)}function gl(e){return yl(e)||!0===Ia.value.resourceTypes?.[e]}const ml=g(()=>["skills","commands","agents","plugins"].some(gl));function fl(){return yl("nativeLogs")}function kl(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 Tl(e){if(!yl("proxy"))return void fa.warning(`${Ea.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?`${Ea.value} 代理已启动`:`${Ea.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 bl(){yl("projects")?S.push({name:"cli-projects",params:{platform:z.channelType}}):fa.info(`${Ea.value} 当前仅作为首页显示项`)}function wl(){yl("projects")?S.push({name:"cli-projects",params:{platform:z.channelType}}):fa.info(`${Ea.value} 当前仅作为首页显示项`)}function $l(){yl("sessions")?Ha.value=!0:fa.info(`${Ea.value} 当前没有托管会话列表`)}h(sl,e=>{const a=e[0]?.id||null;a&&a!==nl?(nl=a,il&&clearTimeout(il),il=setTimeout(()=>{Ma({fresh:!0}).then(()=>jl()).catch(()=>{})},5e3),(!al.value||al.value.scrollTop<20)&&c(()=>{al.value&&(al.value.scrollTop=0)})):nl=a}),h(()=>Pa.value.requests,e=>{Ya("requests",Ja.value.requests,e,600)}),h(()=>Pa.value.tokens,e=>{Ya("tokens",Ja.value.tokens,e,600)}),h(()=>Pa.value.cost,e=>{Ya("cost",Ja.value.cost,e,600)}),h(()=>z.channelType,()=>{nl=sl.value[0]?.id||null}),h(()=>ja.value?.counts?.[z.channelType],()=>{Sl()}),h(()=>ja.value?.todayStats?.[z.channelType],()=>{jl()},{deep:!0}),h(Sa,()=>{ol&&function(){tl&&(clearInterval(tl),tl=null);const e=Sa.value||30,a=Math.max(1e3*e,1e4);tl=setInterval(()=>{Ma({fresh:!0}).then(()=>jl()).catch(()=>{})},a)}()});const _l=_({});function Cl(e){return!!_l.value[e]}function xl(e,a){e&&(_l.value={..._l.value,[e]:!!a})}async function zl(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 L("channelCollapse",z.channelType,s)}catch(n){}}function Sl(){const e=ja.value?.counts?.[z.channelType];Na.value.projects=e?.projectCount||0,Na.value.sessions=e?.sessionCount||0}async function jl(){if(ja.value&&ja.value.todayStats){const e=ja.value.todayStats[z.channelType];e&&(Pa.value.requests=e.requests||0,Pa.value.tokens=e.tokens||0,Pa.value.cost=e.cost||0)}Sl()}function ql(){Ca(z.channelType)}function Ll(e){e?.currentTarget?.blur?.()}function Ml(e){window.dispatchEvent(new CustomEvent("open-skills-drawer",{detail:{platform:z.channelType}})),Ll(e)}function Il(e){window.dispatchEvent(new CustomEvent("open-commands-drawer",{detail:{platform:z.channelType}})),Ll(e)}function El(e){if(!gl("agents"))return fa.info(`${Ea.value} 的 Agent 能力通过插件/扩展提供`),void Ll(e);window.dispatchEvent(new CustomEvent("open-agents-drawer",{detail:{platform:z.channelType}})),Ll(e)}return d(async()=>{await La().then(()=>jl()),async function(){try{if(ja.value&&ja.value.uiConfig)Ba.value=!1!==ja.value.uiConfig.panelVisibility?.showLogs;else{const e=await j();e.success&&e.config&&(Ba.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 j();a.success&&a.config&&(e=a.config.channelLocks?.[z.channelType]||!1)}Wa.value=e,Ga(e)}catch(e){}}(),window.addEventListener("panel-visibility-change",Qa),Ja.value={...Pa.value},ol=!0,cl=setInterval(()=>{Xa.value=Date.now()},1e3)}),t(()=>{ol=!1,tl&&clearInterval(tl),cl&&clearInterval(cl),il&&clearTimeout(il),window.removeEventListener("panel-visibility-change",Qa),Object.values(Va).forEach(e=>{e&&cancelAnimationFrame(e)})}),(t,c)=>{const d=o("n-collapse");return v(),C("div",te,[x("div",{class:T(["channel-header",l.channelType]),style:k({"--platform-color":Aa.value})},[x("div",ce,[r($(e),{size:16},{default:m(()=>[r($(Y))]),_:1})]),x("div",oe,[r($(e),{size:20},{default:m(()=>[(v(),u(p(Oa.value)))]),_:1})]),x("h2",ie,y(Ea.value),1),ml.value?(v(),C("div",re,[gl("skills")?(v(),u($(X),{key:0,trigger:"hover"},{trigger:m(()=>[r($(a),{text:"",class:"config-shortcut-button",onClick:Ml,title:"Skills 技能管理"},{icon:m(()=>[r($(e),{size:18},{default:m(()=>[r($(N))]),_:1})]),_:1})]),default:m(()=>[c[2]||(c[2]=n(" Skills 技能管理 ",-1))]),_:1})):s("",!0),gl("commands")?(v(),u($(X),{key:1,trigger:"hover"},{trigger:m(()=>[r($(a),{text:"",class:"config-shortcut-button",onClick:Il,title:"Commands 命令管理"},{icon:m(()=>[r($(e),{size:18},{default:m(()=>[r($(J))]),_:1})]),_:1})]),default:m(()=>[c[3]||(c[3]=n(" Commands 命令管理 ",-1))]),_:1})):s("",!0),gl("agents")?(v(),u($(X),{key:2,trigger:"hover"},{trigger:m(()=>[r($(a),{text:"",class:"config-shortcut-button",onClick:El,title:"Agents 代理管理"},{icon:m(()=>[r($(e),{size:18},{default:m(()=>[r($(A))]),_:1})]),_:1})]),default:m(()=>[c[4]||(c[4]=n(" Agents 代理管理 ",-1))]),_:1})):s("",!0)])):s("",!0),r($(a),{text:"",class:"lock-button",onClick:Za,title:Wa.value?"解锁此列":"锁定此列"},{icon:m(()=>[r($(e),{size:18},{default:m(()=>[Wa.value?(v(),u($(O),{key:0})):(v(),u($(E),{key:1}))]),_:1})]),_:1},8,["title"])],6),Wa.value?s("",!0):(v(),C("div",ue,[yl("proxy")?(v(),C("div",de,[x("div",ve,[r($(e),{size:16},{default:m(()=>[r($(F))]),_:1}),x("h3",pe,y("omp"===l.channelType?"动态切换":"代理控制"),1),Fa.value.running&&el.value?(v(),C("span",he,y(el.value),1)):s("",!0),r($(ae),{value:Fa.value.running,"onUpdate:value":[c[0]||(c[0]=e=>Fa.value.running=e),Tl],loading:Fa.value.loading,size:"small",style:{"margin-left":"auto"}},null,8,["value","loading"])]),x("div",ye,[x("div",ge,[x("div",me,[x("div",{class:T(["status-dot",{active:Fa.value.running}])},null,2),r($(Z),{type:Fa.value.running?"success":"default",style:{"font-size":"12px"}},{default:m(()=>[n(y(Fa.value.running?"运行中":"已停止"),1)]),_:1},8,["type"]),"omp"!==l.channelType?(v(),C("span",fe,"端口: "+y(Fa.value.port),1)):s("",!0)]),yl("channels")?(v(),u($(W),{key:0,trigger:"click",placement:"bottom",width:320,class:"channel-popover"},{trigger:m(()=>[r($(a),{text:"",size:"tiny",class:"channel-status"},{default:m(()=>[x("span",ke,y(dl.value),1)]),_:1})]),default:m(()=>[x("div",Te,[x("div",be,[c[6]||(c[6]=x("span",null,"渠道快捷管理",-1)),r($(Z),{depth:"3",style:{"font-size":"11px"}},{default:m(()=>[...c[5]||(c[5]=[n("点击开关切换状态",-1)])]),_:1})]),0===rl.value.length?(v(),C("div",we,[r($(Z),{depth:"3"},{default:m(()=>[...c[7]||(c[7]=[n("暂无配置渠道",-1)])]),_:1})])):(v(),C("div",$e,[(v(!0),C(f,null,i(rl.value,e=>{return v(),C("div",{key:e.id,class:T(["channel-quick-item",{disabled:!1===e.enabled}])},[x("div",_e,[x("span",Ce,y(e.name),1),"frozen"===e.health?.status?(v(),u($(le),{key:0,size:"tiny",type:"error",bordered:!1},{default:m(()=>[...c[8]||(c[8]=[n(" 冻结 ",-1)])]),_:1})):s("",!0),r($(ae),{size:"small",value:!1!==e.enabled,"onUpdate:value":a=>async function(e,a){if(e&&!Cl(e.id)){xl(e.id,!0);try{await B(z.channelType,e.id,{enabled:a}),await zl(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{xl(e.id,!1)}}}(e,a),loading:Cl(e.id),disabled:Cl(e.id),style:{"margin-left":"auto"}},null,8,["value","onUpdate:value","loading","disabled"])]),Cl(e.id)?(v(),C("div",xe," 正在切换渠道状态... ")):s("",!0),x("div",ze,[x("span",Se,[c[9]||(c[9]=x("span",{class:"metric-label"},"请求",-1)),x("span",je,y(pl(e.id).requests),1)]),x("span",qe,[c[10]||(c[10]=x("span",{class:"metric-label"},"Tokens",-1)),x("span",Le,y((a=pl(e.id).tokens,a>=1e6?(a/1e6).toFixed(1)+"M":a>=1e3?(a/1e3).toFixed(1)+"K":a.toString())),1)]),x("span",Me,[c[11]||(c[11]=x("span",{class:"metric-label"},"权重",-1)),x("span",Ie,y(e.weight||1),1)]),x("span",Ee,[c[12]||(c[12]=x("span",{class:"metric-label"},"并发",-1)),x("span",{class:T(["metric-value",{active:ul(e.id)>0}])},y(ul(e.id))+y(e.maxConcurrency?`/${e.maxConcurrency}`:""),3)])])],2);var a}),128))]))])]),_:1})):s("",!0)])])])):s("",!0),x("div",Oe,[x("div",Ae,[r($(e),{size:14},{default:m(()=>[r($(K))]),_:1}),c[13]||(c[13]=x("h3",{class:"card-title"},"快速访问",-1))]),x("div",De,[x("div",Fe,[x("div",{class:T(["access-card access-card-projects",{clickable:yl("projects"),disabled:!yl("projects")}]),onClick:bl},[x("div",Ne,[r($(e),{size:16},{default:m(()=>[r($(I))]),_:1})]),x("div",Pe,[c[14]||(c[14]=x("span",{class:"access-label"},"项目",-1)),x("span",Je,y(Na.value.projects),1)])],2),x("div",{class:T(["access-card access-card-sessions",{clickable:yl("sessions"),disabled:!yl("sessions")}]),onClick:$l},[x("div",Ue,[r($(e),{size:16},{default:m(()=>[r($(R))]),_:1})]),x("div",Ve,[c[15]||(c[15]=x("span",{class:"access-label"},"最新对话",-1)),x("span",Ke,y(Na.value.sessions),1)])],2),x("div",{class:T(["access-card access-card-goto",{clickable:yl("projects"),disabled:!yl("projects")}]),onClick:wl},[x("div",Re,[r($(e),{size:16},{default:m(()=>[r($(D))]),_:1})]),x("div",Ye,[c[16]||(c[16]=x("span",{class:"access-label"},"前往",-1)),x("span",He,y(Da.value),1)])],2)])])]),yl("statistics")?(v(),C("div",{key:1,class:T(["card stats-card",`stats-card-${l.channelType}`])},[x("div",Ge,[r($(e),{size:14},{default:m(()=>[r($(U))]),_:1}),c[17]||(c[17]=x("h3",{class:"card-title"},"今日数据",-1))]),x("div",We,[x("div",Ze,[x("div",Be,[c[19]||(c[19]=x("div",{class:"stat-icon-dot requests"},null,-1)),x("div",Qe,[c[18]||(c[18]=x("span",{class:"stat-label"},"请求",-1)),x("span",{class:T(["stat-value",{animating:Ka.value.requests}])},y(Ja.value.requests),3)])]),x("div",Xe,[c[21]||(c[21]=x("div",{class:"stat-icon-dot tokens"},null,-1)),x("div",ea,[c[20]||(c[20]=x("span",{class:"stat-label"},"总 Tokens",-1)),x("span",{class:T(["stat-value",{animating:Ka.value.tokens}])},y((g=Ja.value.tokens,g>=1e6?(g/1e6).toFixed(1)+"M":g>=1e3?(g/1e3).toFixed(1)+"K":g.toString())),3)])]),x("div",aa,[c[23]||(c[23]=x("div",{class:"stat-icon-dot cost"},null,-1)),x("div",la,[c[22]||(c[22]=x("span",{class:"stat-label"},"成本 / USD",-1)),x("span",{class:T(["stat-value",{animating:Ka.value.cost}])},y((h=Ja.value.cost,!h||Number.isNaN(h)?"$0":"$"+Number(h).toFixed(3))),3)])])])])],2)):s("",!0),yl("statistics")&&Object.keys(Ra.value).length>0?(v(),C("div",{key:2,class:T(["card chart-card",`chart-card-${l.channelType}`])},[r(d,{"default-expanded-names":[],accordion:""})],2)):s("",!0),Ba.value&&fl()?(v(),C("div",sa,[x("div",na,[r($(e),{size:14},{default:m(()=>[r($(M))]),_:1}),c[24]||(c[24]=x("h3",{class:"card-title"},"实时日志",-1)),r($(a),{text:"",size:"tiny",onClick:w(ql,["stop"]),style:{"margin-left":"auto"},title:"清空日志"},{icon:m(()=>[r($(e),{size:14},{default:m(()=>[r($(V))]),_:1})]),_:1})]),x("div",ta,[x("div",ca,[x("div",{class:T(["logs-table-header",`logs-header-${l.channelType}`])},[x("div",{class:T(["log-col col-channel",`col-channel-${l.channelType}`])},"渠道",2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"请求",2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"回复",2),"claude"===l.channelType?(v(),C(f,{key:0},[x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"写入",2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"命中",2)],64)):"codex"===l.channelType?(v(),C(f,{key:1},[x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"推理",2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"缓存",2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"总计",2)],64)):"gemini"===l.channelType?(v(),C(f,{key:2},[x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"缓存",2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"总计",2)],64)):"opencode"===l.channelType||"omp"===l.channelType?(v(),C(f,{key:3},[x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"推理",2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"缓存",2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},"总计",2)],64)):(v(),C("div",{key:4,class:T(["log-col col-token",`col-token-${l.channelType}`])},"总计",2)),x("div",{class:T(["log-col col-time",`col-time-${l.channelType}`])},"时间",2)],2),x("div",{class:"logs-container",ref_key:"logsContainer",ref:al},[0===sl.value.length?(v(),C("div",oa,[r($(e),{size:32,depth:"3",style:{"margin-bottom":"8px"}},{default:m(()=>[r($(M))]),_:1}),r($(Z),{depth:"3",style:{"font-size":"12px","font-weight":"500"}},{default:m(()=>[...c[25]||(c[25]=[n("暂无实时日志",-1)])]),_:1}),r($(Z),{depth:"3",style:{"font-size":"11px","margin-top":"4px"}},{default:m(()=>[n(y("omp"===l.channelType?"ctx 将持续读取 OMP 原生会话日志":"开启代理后将显示请求记录"),1)]),_:1})])):s("",!0),(v(!0),C(f,null,i(sl.value,a=>(v(),C("div",{key:a.id,class:T(["log-row",{"action-row":"action"===a.type,"error-row":"error"===a.status,"new-log":a.isNew}]),title:kl(a)},["action"===a.type?(v(),C("div",ra,[r($(e),{size:12,color:"#18a058"},{default:m(()=>[r($(H))]),_:1}),x("span",ua,y(a.message),1),x("span",da,y(a.time),1)])):"error"===a.status?(v(),C("div",va,[r($(e),{size:12,color:"#d03050"},{default:m(()=>[r($(P))]),_:1}),x("span",pa,y(a.channel)+": "+y(a.error||a.message||"请求失败"),1),x("span",ha,y(a.time),1)])):(v(),C(f,{key:2},[x("div",{class:T(["log-col col-channel",`col-channel-${l.channelType}`])},[r($(le),{size:"tiny",type:"success"},{default:m(()=>[n(y(a.channel),1)]),_:2},1024)],2),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"input")),3),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"output")),3),"claude"===l.channelType?(v(),C(f,{key:0},[x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cacheCreation")),3),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cacheRead")),3)],64)):"codex"===l.channelType?(v(),C(f,{key:1},[x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"reasoning")),3),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cached")),3),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"total")),3)],64)):"gemini"===l.channelType?(v(),C(f,{key:2},[x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cached")),3),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"total")),3)],64)):"opencode"===l.channelType||"omp"===l.channelType?(v(),C(f,{key:3},[x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"reasoning")),3),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"cached")),3),x("div",{class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"total")),3)],64)):(v(),C("div",{key:4,class:T(["log-col col-token",`col-token-${l.channelType}`])},y(hl(a,"total")),3)),x("div",{class:T(["log-col col-time",`col-time-${l.channelType}`])},y(a.time),3)],64))],10,ia))),128))],512)])])])):s("",!0)])),Wa.value?(v(),C("div",{key:1,class:T(["locked-overlay",`locked-${l.channelType}`])},[x("div",ya,[x("div",ga,[r($(e),{size:48},{default:m(()=>[r($(O))]),_:1})]),c[27]||(c[27]=x("h3",{class:"locked-title"},"该渠道已锁定",-1)),r($(Z),{depth:"3",class:"locked-hint"},{default:m(()=>[...c[26]||(c[26]=[n(" 点击上方按钮解锁以查看内容 ",-1)])]),_:1})])],2)):s("",!0),yl("sessions")?(v(),u(ne,{key:2,visible:Ha.value,"onUpdate:visible":c[1]||(c[1]=e=>Ha.value=e),channel:l.channelType},null,8,["visible","channel"])):s("",!0)]);var h,g}}},[["__scopeId","data-v-a1598dde"]]),ka={class:"dashboard-container"},Ta=l({__name:"Home",setup(e){const{uiConfig:a,updateConfig:l,loadUIConfig:s}=S(),n=q(),{enabledKeys:c}=Q({platformStore:n,configRef:a}),o=_([]);function i(e=c.value){o.value=e.map(e=>({type:e}))}async function p(){const e=o.value.map(e=>e.type);i(e),await l("enabledCliPlatforms",e)}function h(e){const l=e?.detail?.enabledCliPlatforms;Array.isArray(l)&&(a.value={...a.value,enabledCliPlatforms:[...l]}),i()}return d(async()=>{window.addEventListener("enabled-cli-platforms-change",h),await Promise.all([s(),n.load()]),i()}),t(()=>{window.removeEventListener("enabled-cli-platforms-change",h)}),(e,a)=>(v(),C("div",ka,[r($(z),{modelValue:o.value,"onUpdate:modelValue":a[0]||(a[0]=e=>o.value=e),class:"dashboard-grid","item-key":"type",animation:200,handle:".drag-handle",onEnd:p},{item:m(({element:e})=>[(v(),u(fa,{"channel-type":e.type,key:e.type},null,8,["channel-type"]))]),_:1},8,["modelValue"])]))}},[["__scopeId","data-v-5858e14d"]]);export{Ta as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,s as a,t as l}from"./_plugin-vue_export-helper-BeLZJZij.js";import{C as t,D as s,K as n,O as i,S as r,V as o,W as u,Z as c,_t as p,b as d,et as v,g as m,ht as f,m as g,mt as y,p as h,r as k,st as b,w,x as P}from"./vue-vendor-BqZbbXHA.js";import{t as _}from"./client-BgcNg4Bt.js";import{r as j,s as U,t as $}from"./platforms-mqqe_82d.js";import{$ as C,At as T,F as I,Nt as L,O as z,R as S,S as x,U as O,Y as B,a as H,g as G,ut as A}from"./icons-B-AzZoeE.js";import{t as R}from"./use-message-DBsCm7FJ.js";import{l as M}from"./light-C2X7hegj.js";import{c as D,n as N,s as K,t as q}from"./AssetPathField-jv-lopQ3.js";import{n as E,t as V}from"./useResponsiveDrawer-C-UacYVP.js";import{t as F}from"./DrawerContent-ChXgZ1Xm.js";import{$ as Q,Et as W,M as Y,T as Z,ct as J,ft as X,j as ee,k as ae,st as le,ut as te,w as se}from"./index-Bw6YXbBA.js";import{t as ne}from"./markdown-u082bbtj.js";import{n as ie,t as re}from"./skill-repo-input-B_fkGlUK.js";var oe=new Map;function ue(e,a,l={}){return se(e,a,l.scope||"",l.cwd||"")}function ce(e=""){for(const a of oe.keys())e&&!a.includes(`:${e}:`)||oe.delete(a)}function pe(e={},a={}){return{...e,...a.cwd?{cwd:a.cwd}:{},...a.scope?{scope:a.scope}:{}}}async function de(e="claude",a={}){const l=ue("plugins",e,a);if(oe.has(l))return oe.get(l);const t=Z(l,t=>_.get("/plugins",{params:pe({platform:e},a),signal:t}).then(e=>e.data).catch(e=>{throw oe.delete(l),e}),"plugins",`plugins:${e}`);return oe.set(l,t),t}async function ve(e="claude",a=!1,l={}){const t=ue("plugins-market",e,l);if(oe.has(t))return oe.get(t);const s=Z(t,a=>_.get("/plugins/market",{params:pe({platform:e},l),signal:a}).then(e=>e.data).catch(e=>{throw oe.delete(t),e}),"plugins-market",`plugins-market:${e}`);return oe.set(t,s),s}async function me(e="claude",a={}){return ce(e),(await _.post("/plugins/refresh",pe({platform:e},a))).data}async function fe(e,a={}){return(await _.get(`/plugins/refresh/${encodeURIComponent(e)}`,{params:pe({platform:a.platform||"claude"},a)})).data}function ge(e=""){ce(e)}async function ye(e,a,l="claude",t="",s={},n={}){const i=pe({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 _.post("/plugins/install",i)).data}async function he(e,a="claude",l={}){return(await _.post("/plugins/repos",pe({...e,platform:a},l))).data}async function ke(e,a={},l="claude"){return(await _.put("/plugins/repos/auth",{id:e.id||"",owner:e.owner||"",name:e.name||"",token:a.token||"",clearToken:!!a.clearToken,platform:l})).data}var be={class:"asset-card-main"},we={class:"asset-card-top"},Pe={class:"asset-card-title-stack"},_e={class:"asset-card-title-row"},je={class:"asset-name"},Ue={class:"asset-tags"},$e={key:0,class:"asset-description"},Ce={class:"asset-meta"},Te={class:"asset-meta-item mono"},Ie=["href"],Le={__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(e){function l(e){return!!(e?.installSource||e?.repoOwner||e?.repoProjectPath||e?.repoLocalPath)}return(n,i)=>{return u(),w("div",{class:f(["plugin-card asset-card",{"is-installed":e.plugin.installed,"is-disabled":e.readonly}]),onClick:i[4]||(i[4]=a=>n.$emit("click",e.plugin))},[P("div",be,[P("div",we,[P("div",Pe,[P("div",_e,[P("span",{class:f(["asset-status-dot",{active:e.plugin.installed}])},null,2),P("span",je,p(e.plugin.name),1)]),P("div",Ue,[e.plugin.installed?(u(),r(y(te),{key:0,type:"success",size:"tiny",bordered:!1},{default:v(()=>[...i[5]||(i[5]=[s("已安装",-1)])]),_:1})):t("",!0),e.readonly?(u(),r(y(te),{key:1,type:"default",size:"tiny",bordered:!1},{default:v(()=>[...i[6]||(i[6]=[s("只读",-1)])]),_:1})):t("",!0),e.plugin.scope?(u(),r(y(te),{key:2,type:"info",size:"tiny",bordered:!1},{default:v(()=>[s(p("project"===e.plugin.scope?"项目":"全局"),1)]),_:1})):t("",!0),"extension"===e.plugin.pluginKind?(u(),r(y(te),{key:3,type:"default",size:"tiny",bordered:!1},{default:v(()=>[...i[7]||(i[7]=[s("扩展",-1)])]),_:1})):t("",!0),"skill-bundle"===e.plugin.pluginKind?(u(),r(y(te),{key:4,type:"warning",size:"tiny",bordered:!1},{default:v(()=>[...i[8]||(i[8]=[s("技能包插件",-1)])]),_:1})):t("",!0),"gitlab"===e.plugin.repoProvider?(u(),r(y(te),{key:5,type:"info",size:"tiny",bordered:!1},{default:v(()=>[...i[9]||(i[9]=[s("GitLab",-1)])]),_:1})):"local"===e.plugin.repoProvider?(u(),r(y(te),{key:6,type:"info",size:"tiny",bordered:!1},{default:v(()=>[...i[10]||(i[10]=[s("本地",-1)])]),_:1})):e.plugin.repoOwner?(u(),r(y(te),{key:7,type:"info",size:"tiny",bordered:!1},{default:v(()=>[s(p(e.plugin.repoOwner),1)]),_:1})):t("",!0)])])]),e.plugin.description?(u(),w("div",$e,p((c=e.plugin.description,d=120,c?.length>d?c.slice(0,d)+"...":c)),1)):t("",!0),P("div",Ce,[P("span",Te,p(e.plugin.directory),1),e.plugin.readmeUrl?(u(),w("a",{key:0,class:"asset-link",href:e.plugin.readmeUrl,target:"_blank",onClick:i[0]||(i[0]=g(()=>{},["stop"]))},p((o=e.plugin,"gitlab"===o?.repoProvider?"GitLab":"local"===o?.repoProvider?"本地":"GitHub")),9,Ie)):t("",!0)])]),e.readonly?t("",!0):(u(),w("div",{key:0,class:"asset-card-actions",onClick:i[3]||(i[3]=g(()=>{},["stop"]))},[e.plugin.installed&&e.canUninstall?(u(),r(y(a),{key:0,size:"small",tertiary:"",type:"error",loading:e.uninstalling,focusable:!1,onClick:i[1]||(i[1]=a=>n.$emit("uninstall",e.plugin))},{default:v(()=>[...i[11]||(i[11]=[s("卸载",-1)])]),_:1},8,["loading"])):e.canInstall?(u(),r(y(a),{key:1,size:"small",type:"primary",loading:e.installing,disabled:!l(e.plugin),focusable:!1,onClick:i[2]||(i[2]=a=>n.$emit("install",e.plugin))},{default:v(()=>[...i[12]||(i[12]=[s("安装",-1)])]),_:1},8,["loading","disabled"])):t("",!0)]))],2);var o,c,d}}},ze={class:"repo-manager"},Se={class:"repo-list"},xe={class:"repo-main"},Oe={class:"repo-info"},Be={class:"repo-name-row"},He={class:"repo-name"},Ge={class:"repo-branch"},Ae={key:0,class:"repo-auth-hint"},Re={class:"repo-actions"},Me={key:0,class:"empty-hint"},De={class:"add-repo"},Ne={class:"add-title"},Ke={class:"add-form"},qe={class:"add-hint"},Ee={class:"tips"},Ve={key:0,class:"recommended"},Fe={class:"recommended-list"},Qe=["onClick"],We={class:"rec-info"},Ye={class:"rec-name"},Ze={class:"rec-desc"},Je={key:0,class:"auth-manager"},Xe={class:"auth-meta"},ea={class:"auth-meta-row"},aa={class:"auth-value"},la={class:"auth-meta-row"},ta={class:"auth-value"},sa={class:"auth-meta-row"},na={class:"auth-value"},ia={class:"auth-actions"},ra=l({__name:"PluginRepoManager",props:{visible:Boolean,platform:{type:String,default:"claude"},projectPath:{type:String,default:""},capabilities:{type:Object,default:()=>({})}},emits:["update:visible","updated"],setup(l,{emit:g}){const k=l,j=g,U=d({get:()=>k.visible,set:e=>j("update:visible",e)}),$=b([]),C=b(!1),T=b(!1),I=b(!1),z=b(!1),S=b(null),x=b(!1),O=b(!1),B=b({token:""}),G=b({input:"",branch:"main"}),A=d(()=>"native-marketplace"===k.capabilities.repositoryMode),R=d(()=>({...k.projectPath?{cwd:k.projectPath}:{}})),D=d(()=>S.value?("gitlab"===S.value.provider?"GitLab":"GitHub")+" 仓库认证":"仓库认证"),N=d(()=>"opencode"===k.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"===k.platform||"omp"===k.platform?[]:[{owner:"anthropics",name:"claude-plugins-official",url:"https://github.com/anthropics/claude-plugins-official",description:"官方插件库",branch:"main"}]),K=d(()=>A.value?Boolean(G.value.input.trim()):!!ie(G.value.input.trim()));function q(e){const a=e.provider||(e.localPath?"local":e.projectPath?"gitlab":"github"),l=e.branch||"main",t=re(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 E(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 V(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 F(e){return"github"===e?.provider||"gitlab"===e?.provider}function Q(e){return F(e)?e.hasToken?`仓库 Token: ${e.tokenPreview||"已配置"}`:"gitlab"===e.provider?"未配置仓库 Token,将回退到全局 Token、glab 或 git credential":"未配置仓库 Token,可选配置后优先用于 GitHub API 访问":""}function W(){z.value=!1,S.value=null,B.value.token="",x.value=!1,O.value=!1}async function Z(){C.value=!0;try{const e=await async function(e="claude",a={}){return(await _.get("/plugins/repos",{params:pe({platform:e},a)})).data}(k.platform,R.value);e.success&&($.value=e.repos||[])}catch(e){ae.error("加载仓库失败: "+e.message)}finally{C.value=!1}}async function X(){I.value=!0;try{let e=(await me(k.platform,R.value)).task;for(;e&&["queued","running"].includes(e.status);)await new Promise(e=>setTimeout(e,250)),e=(await fe(e.id,{platform:k.platform,...R.value})).task;"failed"===e?.status?ae.error(e.error||"刷新失败,已保留旧缓存"):(await Z(),ae.success("仓库缓存刷新成功"),j("updated"))}catch(e){ae.error("刷新失败: "+e.message)}finally{I.value=!1}}async function se(){if(!K.value)return;const e=A.value?{source:G.value.input.trim()}:ie(G.value.input.trim());T.value=!0;try{const a=await he({...e,branch:G.value.branch||"main",enabled:!0},k.platform,R.value);a.success&&($.value=a.repos,G.value.input="",G.value.branch="main",ae.success("仓库添加成功"),j("updated"))}catch(a){ae.error("添加失败: "+a.message)}finally{T.value=!1}}async function ne(e){try{const a=await async function(e,a="claude",l={}){return(await _.delete("/plugins/repos",{params:pe({platform:a,id:e.id||"",owner:e.owner||"",name:e.name||""},l)})).data}(e,k.platform,R.value);a.success&&($.value=a.repos,ae.success("仓库已删除"),j("updated"))}catch(a){ae.error("删除失败: "+a.message)}}async function oe(e,a){try{const l=await async function(e,a,l="claude"){return(await _.put("/plugins/repos/toggle",{id:e.id||"",owner:e.owner||"",name:e.name||"",enabled:a,platform:l})).data}(e,a,k.platform);l.success&&($.value=l.repos,j("updated"))}catch(l){ae.error("操作失败: "+l.message)}}async function ue(){const e=S.value,a=B.value.token.trim();if(e&&a){x.value=!0;try{const l=await ke(e,{token:a},k.platform);l.success&&($.value=l.repos||[],ae.success("仓库 Token 已保存"),j("updated"),W())}catch(l){ae.error("保存 Token 失败: "+l.message)}finally{x.value=!1}}}async function ce(){const e=S.value;if(e){O.value=!0;try{const a=await ke(e,{clearToken:!0},k.platform);a.success&&($.value=a.repos||[],ae.success("仓库 Token 已清除"),j("updated"),W())}catch(a){ae.error("清除 Token 失败: "+a.message)}finally{O.value=!1}}}function de(e){const a=q(e);return $.value.some(e=>q(e)===a)}function ve(){W(),j("update:visible",!1)}return c(()=>k.visible,e=>{e&&Z()}),c(()=>k.platform,()=>{k.visible&&Z()}),o(()=>{k.visible&&Z()}),(o,c)=>(u(),w(m,null,[i(y(M),{show:U.value,"onUpdate:show":c[2]||(c[2]=e=>U.value=e),preset:"card",title:A.value?"OMP Marketplace 管理":"插件仓库管理",bordered:!1,closable:!0,style:{width:"480px","max-width":"90vw"},onClose:ve},{"header-extra":v(()=>[i(y(a),{type:"primary",size:"small",loading:I.value,focusable:!1,onClick:X},{icon:v(()=>[i(y(e),null,{default:v(()=>[i(y(H))]),_:1})]),default:v(()=>[c[5]||(c[5]=s(" 刷新 ",-1))]),_:1},8,["loading"])]),default:v(()=>[P("div",ze,[P("div",Se,[i(y(Y),{show:C.value},{default:v(()=>[(u(!0),w(m,null,n($.value,e=>(u(),w("div",{key:e.id||`${e.owner}/${e.name}/${e.localPath||""}`,class:"repo-item"},[P("div",xe,[!1!==l.capabilities.repositoryToggle?(u(),r(y(ee),{key:0,value:e.enabled,size:"small","onUpdate:value":a=>oe(e,a)},null,8,["value","onUpdate:value"])):t("",!0),P("div",Oe,[P("div",Be,[P("div",He,p(E(e)),1),!1!==l.capabilities.repositoryAuth&&F(e)?(u(),r(y(te),{key:0,size:"tiny",type:e.hasToken?"success":"default",bordered:!1},{default:v(()=>[s(p(e.hasToken?"已配 Token":"未配 Token"),1)]),_:2},1032,["type"])):t("",!0)]),P("div",Ge,p(V(e)),1),!1!==l.capabilities.repositoryAuth&&F(e)?(u(),w("div",Ae,p(Q(e)),1)):t("",!0)])]),P("div",Re,[!1!==l.capabilities.repositoryAuth&&F(e)?(u(),r(y(a),{key:0,text:"",type:"primary",size:"tiny",focusable:!1,onClick:a=>function(e){F(e)&&(S.value=e,B.value.token="",z.value=!0)}(e)},{default:v(()=>[...c[6]||(c[6]=[s(" 认证 ",-1)])]),_:1},8,["onClick"])):t("",!0),i(y(a),{text:"",type:"error",size:"tiny",focusable:!1,onClick:a=>ne(e)},{default:v(()=>[...c[7]||(c[7]=[s(" 删除 ",-1)])]),_:1},8,["onClick"])])]))),128)),0===$.value.length?(u(),w("div",Me," 暂无仓库,请添加 ")):t("",!0)]),_:1},8,["show"])]),P("div",De,[P("div",Ne,p(A.value?"添加 Marketplace source":"添加仓库"),1),P("div",Ke,[i(y(le),{value:G.value.input,"onUpdate:value":c[0]||(c[0]=e=>G.value.input=e),placeholder:A.value?"Marketplace source(owner/repo、URL 或本地路径)":"GitHub/GitLab 仓库地址,或本地路径",size:"small",class:"repo-input",onKeyup:h(se,["enter"])},null,8,["value","placeholder"]),A.value?t("",!0):(u(),r(y(le),{key:0,value:G.value.branch,"onUpdate:value":c[1]||(c[1]=e=>G.value.branch=e),placeholder:"分支",size:"small",class:"branch-input"},null,8,["value"])),i(y(a),{type:"primary",size:"small",disabled:!K.value,loading:T.value,focusable:!1,onClick:se},{default:v(()=>[...c[8]||(c[8]=[s(" 添加 ",-1)])]),_:1},8,["disabled","loading"])]),P("div",qe,p(A.value?"source 将原样传递给 omp plugin marketplace add":"支持 `owner/repo`、GitHub/GitLab URL 或 SSH、以及本地路径"),1)]),P("div",Ee,[i(y(J),{type:"info",bordered:!1,size:"small"},{default:v(()=>[s(p(A.value?"OMP Marketplace 由原生 CLI 管理;不支持单独启停、branch 或仓库 Token。":"支持 GitHub、GitLab 和本地仓库路径;远程仓库可按仓库单独配置 Token。"),1)]),_:1})]),N.value.length>0?(u(),w("div",Ve,[c[10]||(c[10]=P("div",{class:"recommended-title"},"推荐仓库",-1)),P("div",Fe,[(u(!0),w(m,null,n(N.value,a=>(u(),w("div",{key:a.url||`${a.owner}/${a.name}`,class:f(["recommended-item",{added:de(a)}]),onClick:e=>!de(a)&&async function(e){T.value=!0;try{const a=await he({owner:e.owner,name:e.name,url:e.url,branch:e.branch,enabled:!0},k.platform);a.success&&($.value=a.repos,ae.success("仓库添加成功"),j("updated"))}catch(a){ae.error("添加失败: "+a.message)}finally{T.value=!1}}(a)},[P("div",We,[P("span",Ye,p(a.owner)+"/"+p(a.name),1),P("span",Ze,p(a.description),1)]),de(a)?(u(),r(y(te),{key:0,size:"tiny",type:"success",bordered:!1},{default:v(()=>[...c[9]||(c[9]=[s(" 已添加 ",-1)])]),_:1})):(u(),r(y(e),{key:1,class:"add-icon"},{default:v(()=>[i(y(L))]),_:1}))],10,Qe))),128))])])):t("",!0)])]),_:1},8,["show","title"]),i(y(M),{show:z.value,"onUpdate:show":c[4]||(c[4]=e=>z.value=e),preset:"card",title:D.value,bordered:!1,style:{width:"460px","max-width":"92vw"},onClose:W},{default:v(()=>[S.value?(u(),w("div",Je,[i(y(J),{type:"info",bordered:!1,size:"small"},{default:v(()=>{return[s(p((e=S.value,"gitlab"===e?.provider?"私有 GitLab 仓库建议配置仓库级 Private Token;保存后会优先使用当前仓库 Token,再回退到全局环境变量、glab 和 git credential。":"GitHub 仓库可选配置 Personal Access Token;保存后会优先使用当前仓库 Token,再回退到全局环境变量、gh 和 git credential。")),1)];var e}),_:1}),P("div",Xe,[P("div",ea,[c[11]||(c[11]=P("span",{class:"auth-label"},"仓库",-1)),P("span",aa,p(E(S.value)),1)]),P("div",la,[c[12]||(c[12]=P("span",{class:"auth-label"},"来源",-1)),P("span",ta,p("gitlab"===S.value.provider?"GitLab":"GitHub"),1)]),P("div",sa,[c[13]||(c[13]=P("span",{class:"auth-label"},"当前状态",-1)),P("span",na,p(S.value.hasToken?`已配置 ${S.value.tokenPreview||""}`:"未配置仓库 Token"),1)])]),i(y(le),{value:B.value.token,"onUpdate:value":c[3]||(c[3]=e=>B.value.token=e),type:"password","show-password-on":"click",clearable:"",placeholder:"输入此仓库专属 Token",onKeyup:h(ue,["enter"])},null,8,["value"]),c[17]||(c[17]=P("div",{class:"auth-footnote"}," 仓库 Token 会优先于全局环境变量、CLI 登录和系统 Git 凭据。 ",-1)),P("div",ia,[i(y(a),{focusable:!1,onClick:W},{default:v(()=>[...c[14]||(c[14]=[s(" 取消 ",-1)])]),_:1}),S.value.hasToken?(u(),r(y(a),{key:0,type:"warning",secondary:"",focusable:!1,loading:O.value,onClick:ce},{default:v(()=>[...c[15]||(c[15]=[s(" 清除 Token ",-1)])]),_:1},8,["loading"])):t("",!0),i(y(a),{type:"primary",focusable:!1,disabled:!B.value.token.trim(),loading:x.value,onClick:ue},{default:v(()=>[...c[16]||(c[16]=[s(" 保存 Token ",-1)])]),_:1},8,["disabled","loading"])])])):t("",!0)]),_:1},8,["show","title"])],64))}},[["__scopeId","data-v-2321d587"]]),oa={class:"asset-detail-drawer-header"},ua={class:"asset-detail-identity"},ca={class:"asset-detail-heading"},pa={class:"asset-detail-name"},da={class:"asset-detail-meta"},va={key:2,class:"asset-detail-subtle"},ma={class:"asset-detail-body"},fa={class:"asset-detail-container"},ga={class:"asset-detail-info-section"},ya={class:"asset-detail-description"},ha={key:0,class:"asset-detail-info-section"},ka={class:"asset-detail-list"},ba={class:"asset-detail-value mono"},wa={key:1,class:"asset-detail-info-section"},Pa={class:"asset-detail-box"},_a=["href"],ja={key:1},Ua={class:"asset-detail-container"},$a={key:0,class:"asset-detail-loading"},Ca=["innerHTML"],Ta={key:2,class:"asset-detail-empty"},Ia={__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(a,{emit:l}){ne.setOptions({breaks:!0,gfm:!0});const{drawerWidth:o}=V(600),f=a,g=l,h=d({get:()=>f.visible,set:e=>g("update:visible",e)}),k=b(""),j=b(!1),U=b(0),$=b("overview"),T=b(""),L=d(()=>/^(https?:)?\/\//.test(f.plugin?.repoUrl||f.plugin?.gitUrl||"")),S=d(()=>f.plugin?.installPath||f.plugin?.fullPath||f.plugin?.path||f.plugin?.directory||""),x=d(()=>Array.isArray(f.plugin?.skillPaths)?f.plugin.skillPaths:[]),O={height:"100%",minHeight:0,overflow:"hidden"};async function H(){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(T.value===l)return;const t=++U.value;j.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=se(`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),Z(i,a=>_.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!==U.value)return;k.value=n.readme||"",T.value=l}catch(s){if(t!==U.value)return;k.value="",T.value=l}finally{t===U.value&&(j.value=!1)}}c(()=>[f.visible,f.plugin,f.platform],([e])=>{U.value+=1,$.value="overview",T.value="",j.value=!1,k.value=""}),c($,e=>{"readme"===e&&H()});const G=d(()=>k.value?ne(k.value):"");return(l,c)=>(u(),r(y(E),{show:h.value,"onUpdate:show":c[1]||(c[1]=e=>h.value=e),width:y(o),placement:"right","show-mask":!0},{default:v(()=>[i(y(F),{closable:"","native-scrollbar":!1,"body-content-style":O},{header:v(()=>[P("div",oa,[P("div",ua,[i(y(e),{size:20,class:"asset-detail-icon"},{default:v(()=>[i(y(B))]),_:1}),P("div",ca,[P("span",pa,p(a.plugin?.name||"插件详情"),1),P("div",da,[a.plugin?.version?(u(),r(y(te),{key:0,size:"tiny",bordered:!1,type:"info"},{default:v(()=>[s(" v"+p(a.plugin.version),1)]),_:1})):t("",!0),"skill-bundle"===a.plugin?.pluginKind?(u(),r(y(te),{key:1,size:"tiny",bordered:!1,type:"warning"},{default:v(()=>[...c[2]||(c[2]=[s(" 技能包插件 ",-1)])]),_:1})):t("",!0),a.plugin?.author?(u(),w("span",va,[i(y(e),{size:12},{default:v(()=>[i(y(z))]),_:1}),s(" "+p(a.plugin.author),1)])):t("",!0)])])])])]),default:v(()=>[P("div",ma,[i(y(K),{value:$.value,"onUpdate:value":c[0]||(c[0]=e=>$.value=e),type:"line",animated:"",class:"asset-detail-tabs"},{default:v(()=>[i(y(D),{name:"overview",tab:"概览"},{default:v(()=>[P("div",fa,[P("div",ga,[c[3]||(c[3]=P("h3",{class:"asset-detail-section-title"},"描述",-1)),P("p",ya,p(a.plugin?.description||"暂无描述"),1)]),x.value.length>0?(u(),w("div",ha,[c[4]||(c[4]=P("h3",{class:"asset-detail-section-title"},"包含技能",-1)),P("div",ka,[(u(!0),w(m,null,n(x.value,e=>(u(),w("div",{key:e,class:"asset-detail-row"},[P("span",ba,p(e),1)]))),128))])])):t("",!0),a.plugin?.repoUrl||a.plugin?.gitUrl||a.plugin?.repoLocalPath?(u(),w("div",wa,[c[5]||(c[5]=P("h3",{class:"asset-detail-section-title"},"仓库地址",-1)),P("div",Pa,[i(y(e),{size:16},{default:v(()=>[i(y(I))]),_:1}),L.value?(u(),w("a",{key:0,class:"asset-detail-link",href:a.plugin.repoUrl||a.plugin.gitUrl,target:"_blank",rel:"noopener noreferrer"},p(a.plugin.repoUrl||a.plugin.gitUrl),9,_a)):(u(),w("span",ja,p(a.plugin.repoLocalPath),1))])])):t("",!0),i(q,{path:S.value},null,8,["path"])])]),_:1}),i(y(D),{name:"readme",tab:"README"},{default:v(()=>[P("div",Ua,[j.value?(u(),w("div",$a,[i(y(Y),{size:"medium"}),c[6]||(c[6]=P("p",null,"加载 README 中...",-1))])):k.value?(u(),w("div",{key:1,class:"asset-detail-content",innerHTML:G.value},null,8,Ca)):(u(),w("div",Ta,[i(y(e),{size:44,class:"asset-detail-empty-icon"},{default:v(()=>[i(y(C))]),_:1}),c[7]||(c[7]=P("p",null,"暂无 README 文档",-1))]))])]),_:1})]),_:1},8,["value"])])]),_:1})]),_:1},8,["show","width"]))}},La={key:0,class:"asset-panel-header"},za={class:"asset-title-group"},Sa={class:"asset-heading"},xa={class:"asset-title-row"},Oa={class:"asset-platform-pill"},Ba={key:0,class:"asset-action-row"},Ha={key:1,class:"asset-drawer-toolbar"},Ga={key:0,class:"asset-action-row"},Aa={class:"asset-summary"},Ra={class:"asset-summary-item"},Ma={class:"asset-summary-value"},Da={class:"asset-summary-item"},Na={class:"asset-summary-value"},Ka={class:"asset-summary-item"},qa={class:"asset-summary-value"},Ea={class:"asset-filter-bar"},Va={class:"asset-panel-content"},Fa={key:0,class:"asset-empty"},Qa={key:1,class:"asset-list"},Wa={key:2,class:"asset-footer"},Ya=l({__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(l){const g=l,h=k(),C=$(),I=R(),L=b(!1),z=b([]),H=b(""),M=b("all"),D=b(!1),K=b(!1),q=b(null),E=b({}),V=b({}),F=b(!1),J=b(!1),ee=b(0),ae=b({supportsPlugins:!0,repositories:!0,market:!0,install:!0,uninstall:!0,import:!0,syncRepos:!0}),{byCapability:te}=W(),ne=d(()=>te("plugins").map(e=>e.key)),ie=d(()=>ne.value.includes(re.value));const re=d(()=>String(g.platform||(Array.isArray(h.query.platform)?h.query.platform[0]:h.query.platform)||j(h)||"").trim().toLowerCase()),oe=d(()=>{const e=C.get(re.value)||U(re.value);return e.label||e.title||"Claude Code"}),ue=[{label:"全部",value:"all"},{label:"已安装",value:"installed"},{label:"未安装",value:"uninstalled"}],ce=d(()=>z.value.filter(e=>e.installed).length);function he(e=null){return{...g.projectPath?{cwd:g.projectPath}:{},...e?.scope?{scope:e.scope}:{scope:g.projectPath?"project":"user"}}}const ke=d(()=>{let e=z.value;if("installed"===M.value?e=e.filter(e=>e.installed):"uninstalled"===M.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)}),be=d(()=>H.value?"没有匹配的插件":"installed"===M.value?"暂无已安装的插件":"uninstalled"===M.value?"所有插件都已安装":!1===ae.value.supportsPlugins?ae.value.disabledReason||`${oe.value} 暂未提供插件管理能力`:ae.value.repositories||ae.value.market||ae.value.install||ae.value.uninstall?"暂无可用插件,请配置仓库源":ae.value.disabledReason||`${oe.value} 当前没有可展示的插件`);async function we(e,a){try{const l=await async function(e="claude",a={}){const l=se("plugin-capabilities",e,a.scope||"",a.cwd||"");return Z(l,a=>_.get("/plugins/capabilities",{params:{platform:e},signal:a}).then(e=>e.data),"plugin-capabilities",`plugin-capabilities:${e}`)}(e);if(a!==ee.value||e!==re.value)return!1;if(l.success&&l.capabilities)return ae.value={supportsPlugins:!0,repositories:!1,market:!1,install:!1,uninstall:!1,import:!1,syncRepos:!1,...l.capabilities},!0}catch{if(a!==ee.value||e!==re.value)return!1}return a===ee.value&&e===re.value&&(ae.value={supportsPlugins:ne.value.includes(e),repositories:ne.value.includes(e),market:ne.value.includes(e),install:ne.value.includes(e),uninstall:ne.value.includes(e),import:"claude"===e,syncRepos:"claude"===e},!0)}async function Pe(){const e=++ee.value,a=re.value;if(!ie.value)return z.value=[],ae.value={supportsPlugins:!1,repositories:!1,market:!1,install:!1,uninstall:!1,import:!1,syncRepos:!1,disabledReason:`${oe.value} 暂未提供插件管理能力`},void(L.value=!1);L.value=!0;try{if(!(await we(a,e)))return;if(e!==ee.value||a!==re.value)return;if(!1===ae.value.supportsPlugins)return void(z.value=[]);const l=he(),[t,s]=await Promise.all([de(a,l),ae.value.market?ve(a,!1,l):Promise.resolve({success:!0,plugins:[]})]);if(e!==ee.value||a!==re.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]||{};return{...t,...e,installed:!0,key:e.key||`installed-${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}`}))]};z.value=r(n,i)}catch(l){e===ee.value&&a===re.value&&I.error("加载插件失败: "+l.message)}finally{e===ee.value&&(L.value=!1)}}async function _e(){if(J.value||!ie.value)return;const e=re.value;J.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 fe(l.id,{platform:a,...he()})).task;return l}((await me(e,he())).task,e);"failed"===a?.status?I.error(a.error||"插件缓存刷新失败,已保留旧缓存"):"partial"===a?.status&&I.warning("插件缓存已部分更新,未成功的内容保留旧缓存"),await Pe()}catch(a){I.error("插件缓存刷新失败: "+a.message)}finally{J.value=!1}}async function je(){if(ie.value&&"claude"===re.value){F.value=!0;try{const e=await N("plugins");e.success?(I.success(`成功导入 ${e.imported} 个插件`),ge(re.value),await Pe()):I.error(e.message||"导入失败")}catch(e){I.error("导入失败: "+e.message)}finally{F.value=!1}}}function Ue(){ge(re.value),Pe()}async function $e(e){if(ie.value&&ae.value.install&&!e.readonly){if(!(e.installSource||e.repoOwner||e.repoProjectPath||e.repoLocalPath))return I.error("缺少可安装来源");E.value[e.key]=!0;try{const a=e.installSource?await ye("",null,re.value,e.pluginId||e.installSource,he(e),e):await ye(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},re.value,"",he(e),e);if(a.success){I.success(`插件 "${e.name}" 安装成功`),ge(re.value);const a=z.value.findIndex(a=>a.key===e.key);-1!==a&&(z.value[a]={...z.value[a],installed:!0,key:`installed-${e.pluginId||e.id||e.name}-${e.scope||he(e).scope}`})}else I.error(a.message||"安装失败")}catch(a){I.error("安装失败: "+a.message)}finally{delete E.value[e.key]}}}async function Ce(e){if(ie.value&&ae.value.uninstall&&!e.readonly){V.value[e.key]=!0;try{const a=await async function(e,a="claude",l={}){return(await _.delete(`/plugins/${encodeURIComponent(e)}`,{params:pe({platform:a,pluginId:e},l)})).data}(e.pluginId||e.id||e.name,re.value,he(e));if(a.success){I.success(`插件 "${e.name}" 已卸载`),ge(re.value);const a=z.value.findIndex(a=>a.key===e.key);-1!==a&&(z.value[a]={...z.value[a],installed:!1,key:`market-${e.pluginId||e.id||e.name}`})}else I.error(a.message||a.error||"卸载失败")}catch(a){I.error("卸载失败: "+a.message)}finally{delete V.value[e.key]}}}function Te(e){q.value=e,K.value=!0}return o(()=>{g.inDrawer&&!g.drawerVisible||Pe()}),c(()=>g.drawerVisible,e=>{e&&Pe()}),c(()=>re.value,()=>{Pe()}),(o,c)=>(u(),w("div",{class:f(["plugins-panel asset-panel",{"in-drawer":l.inDrawer}])},[l.inDrawer?t("",!0):(u(),w("div",La,[P("div",za,[l.hideBack?t("",!0):(u(),r(y(a),{key:0,text:"",onClick:c[0]||(c[0]=e=>o.$emit("back")),class:"back-btn"},{icon:v(()=>[i(y(e),null,{default:v(()=>[i(y(T))]),_:1})]),_:1})),P("div",Sa,[P("div",xa,[c[8]||(c[8]=P("span",{class:"asset-title"},"插件管理",-1)),P("span",Oa,p(oe.value),1)]),c[9]||(c[9]=P("div",{class:"asset-subtitle"},"管理平台插件、仓库源和市场安装状态",-1))])]),ne.value.includes(re.value)?(u(),w("div",Ba,[ae.value.repositories?(u(),r(y(a),{key:0,text:"",focusable:!1,onClick:c[1]||(c[1]=e=>D.value=!0),class:"action-btn"},{icon:v(()=>[i(y(e),null,{default:v(()=>[i(y(O))]),_:1})]),default:v(()=>[c[10]||(c[10]=s(" 仓库 ",-1))]),_:1})):t("",!0),ae.value.import?(u(),r(y(a),{key:1,text:"",focusable:!1,onClick:je,loading:F.value,class:"action-btn"},{icon:v(()=>[i(y(e),null,{default:v(()=>[i(y(A))]),_:1})]),default:v(()=>[c[11]||(c[11]=s(" 导入 ",-1))]),_:1},8,["loading"])):t("",!0),i(y(a),{text:"",focusable:!1,onClick:_e,loading:J.value,class:"action-btn"},{icon:v(()=>[i(y(e),null,{default:v(()=>[i(y(x))]),_:1})]),default:v(()=>[c[12]||(c[12]=s(" 刷新 ",-1))]),_:1},8,["loading"])])):t("",!0)])),l.inDrawer?(u(),w("div",Ha,[ne.value.includes(re.value)?(u(),w("div",Ga,[ae.value.repositories?(u(),r(y(a),{key:0,text:"",focusable:!1,onClick:c[2]||(c[2]=e=>D.value=!0),class:"action-btn"},{icon:v(()=>[i(y(e),null,{default:v(()=>[i(y(O))]),_:1})]),default:v(()=>[c[13]||(c[13]=s(" 仓库 ",-1))]),_:1})):t("",!0),ae.value.import?(u(),r(y(a),{key:1,text:"",focusable:!1,onClick:je,loading:F.value,class:"action-btn"},{icon:v(()=>[i(y(e),null,{default:v(()=>[i(y(A))]),_:1})]),default:v(()=>[c[14]||(c[14]=s(" 导入 ",-1))]),_:1},8,["loading"])):t("",!0),i(y(a),{text:"",focusable:!1,onClick:_e,loading:J.value,class:"action-btn"},{icon:v(()=>[i(y(e),null,{default:v(()=>[i(y(x))]),_:1})]),default:v(()=>[c[15]||(c[15]=s(" 刷新 ",-1))]),_:1},8,["loading"])])):t("",!0)])):t("",!0),P("div",Aa,[P("span",Ra,[c[16]||(c[16]=P("span",{class:"asset-summary-label"},"全部",-1)),P("span",Ma,p(z.value.length),1)]),P("span",Da,[c[17]||(c[17]=P("span",{class:"asset-summary-label"},"已安装",-1)),P("span",Na,p(ce.value),1)]),P("span",Ka,[c[18]||(c[18]=P("span",{class:"asset-summary-label"},"可安装",-1)),P("span",qa,p(z.value.length-ce.value),1)])]),P("div",Ea,[i(y(le),{value:H.value,"onUpdate:value":c[3]||(c[3]=e=>H.value=e),placeholder:"搜索插件名称或描述",clearable:"",size:"small",class:"asset-search"},{prefix:v(()=>[i(y(e),null,{default:v(()=>[i(y(G))]),_:1})]),_:1},8,["value"]),i(y(Q),{value:M.value,"onUpdate:value":c[4]||(c[4]=e=>M.value=e),options:ue,size:"small",class:"asset-filter"},null,8,["value"])]),P("div",Va,[i(y(Y),{show:L.value},{default:v(()=>[0!==ke.value.length||L.value?(u(),w("div",Qa,[(u(!0),w(m,null,n(ke.value,e=>(u(),r(Le,{key:e.key,plugin:e,readonly:e.readonly||!ae.value.install&&!ae.value.uninstall,"can-install":ae.value.install,"can-uninstall":ae.value.uninstall,installing:!!E.value[e.key],uninstalling:!!V.value[e.key],onInstall:$e,onUninstall:Ce,onClick:Te},null,8,["plugin","readonly","can-install","can-uninstall","installing","uninstalling"]))),128))])):(u(),w("div",Fa,[i(y(X),{description:be.value},{icon:v(()=>[i(y(e),{size:"48",color:"var(--text-quaternary)"},{default:v(()=>[i(y(B))]),_:1})]),extra:v(()=>[ne.value.includes(re.value)&&0===z.value.length&&ae.value.repositories?(u(),r(y(a),{key:0,size:"small",onClick:c[5]||(c[5]=e=>D.value=!0)},{default:v(()=>[...c[19]||(c[19]=[s("配置仓库源",-1)])]),_:1})):t("",!0)]),_:1},8,["description"])]))]),_:1},8,["show"])]),ne.value.includes(re.value)&&(ae.value.install||ae.value.uninstall)?(u(),w("div",Wa,[i(y(e),{size:"14",class:"asset-info-icon"},{default:v(()=>[i(y(S))]),_:1}),P("span",null,"安装/卸载后需重启 "+p(oe.value)+" 生效",1)])):t("",!0),ae.value.repositories?(u(),r(ra,{key:3,visible:D.value,"onUpdate:visible":c[6]||(c[6]=e=>D.value=e),platform:re.value,"project-path":g.projectPath,capabilities:ae.value,onUpdated:Ue},null,8,["visible","platform","project-path","capabilities"])):t("",!0),i(Ia,{visible:K.value,"onUpdate:visible":c[7]||(c[7]=e=>K.value=e),plugin:q.value,platform:re.value,"project-path":g.projectPath,onUpdated:Pe},null,8,["visible","plugin","platform","project-path"])],2))}},[["__scopeId","data-v-2362c407"]]);export{Ya as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./vendors-D0c_0KLP.js";var o=e.create({baseURL:"/api",timeout:3e4});o.interceptors.response.use(e=>e,e=>{if(e.response&&e.response.data){const o=e.response.data,r=new Error(o.message||e.message);return r.response=e.response,r.status=e.response.status,r.data=o,Promise.reject(r)}return Promise.reject(e)});var r=Object.freeze({claude:"",codex:"/codex",gemini:"/gemini",opencode:"/opencode",omp:"/omp"}),t={...r};function n(e=[]){if(t={...r},!Array.isArray(e))return t;for(const o of e){const e=s(o?.key);if(!e||Object.prototype.hasOwnProperty.call(r,e))continue;const n=String(o?.apiPrefix||"").trim().replace(/^\/+|\/+$/g,"");t[e]=n?`/${encodeURIComponent(n)}`:`/platforms/${encodeURIComponent(e)}`}return t}function s(e){return String(e||"").trim().toLowerCase()}function a(e){return Object.prototype.hasOwnProperty.call(r,s(e))}function p(e,o="not_found"){const r=s(e),t=new Error("not_found"===o?`Unknown platform: ${r||"(empty)"}`:`Unsupported platform capability: ${r||"(empty)"}`);return t.code=o,t.status=404,t.platform=r,t}function c(e="claude"){const o=s(e);if(!o)throw p(e);return Object.prototype.hasOwnProperty.call(t,o)?t[o]:`/platforms/${encodeURIComponent(o)}`}function i(e="claude"){return c(e)}export{c as a,i,n,a as o,p as r,s,o as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.header-button[data-v-b515354d]{border:1px solid var(--border-primary);background:var(--bg-elevated);cursor:pointer;border-radius:999px;outline:none;justify-content:center;align-items:center;width:40px;height:40px;padding:0;transition:all .2s;display:inline-flex;box-shadow:0 10px 24px #0f171d14}.header-button[data-v-b515354d] .n-icon{color:var(--text-tertiary);transition:all .2s}.header-button[data-v-b515354d]:hover:not(.disabled){background:color-mix(in srgb, var(--bg-elevated) 90%, var(--primary-color) 10%);border-color:#18a0583d;box-shadow:0 14px 30px #0f171d1f}.header-button[data-v-b515354d]:hover:not(.disabled) .n-icon{color:var(--primary-color,#18a058)}.header-button[data-v-b515354d]:active:not(.disabled){transform:scale(.95)}.header-button.active[data-v-b515354d]{background:linear-gradient(135deg,#18a05824,#18a0580f);border-color:#18a05852}.header-button.active[data-v-b515354d] .n-icon{color:#18a058!important}.header-button.disabled[data-v-b515354d]{cursor:not-allowed;opacity:.5}[data-theme=dark] .header-button[data-v-b515354d]{box-shadow:none;background:#0d171eeb;border-color:#364c56e6}[data-theme=dark] .header-button[data-v-b515354d]:hover:not(.disabled){background:#14222afa;border-color:#18a05847;box-shadow:0 0 0 1px #18a05814}.modal-header[data-v-7ea71ef7]{align-items:center;gap:10px;display:flex}.warning-icon[data-v-7ea71ef7]{color:#f59e0b}.header-title[data-v-7ea71ef7]{color:var(--text-primary);font-size:16px;font-weight:600}.modal-content[data-v-7ea71ef7]{padding:4px 0}.desc-text[data-v-7ea71ef7]{color:var(--text-secondary);margin:0 0 16px;font-size:13px;line-height:1.6}.conflict-list[data-v-7ea71ef7]{background:var(--bg-tertiary);border-radius:6px;padding:12px}.list-header[data-v-7ea71ef7]{border-bottom:1px solid var(--border-primary);align-items:center;gap:12px;margin-bottom:10px;padding-bottom:10px;display:flex}.selected-hint[data-v-7ea71ef7]{color:var(--text-tertiary);font-size:12px}.conflict-items[data-v-7ea71ef7]{flex-direction:column;gap:8px;display:flex}.conflict-item[data-v-7ea71ef7]{background:var(--bg-secondary);cursor:pointer;border:1px solid #0000;border-radius:6px;align-items:flex-start;gap:10px;padding:10px 12px;transition:all .15s;display:flex}.conflict-item[data-v-7ea71ef7]:hover{background:#18a05805;border-color:#18a05866}.conflict-item.selected[data-v-7ea71ef7]{background:#18a0580f;border-color:#18a058}.item-content[data-v-7ea71ef7]{flex:1;min-width:0}.item-header[data-v-7ea71ef7]{align-items:center;gap:8px;margin-bottom:4px;display:flex}.var-name[data-v-7ea71ef7]{color:var(--text-primary);background:var(--bg-tertiary);border-radius:4px;padding:2px 6px;font-size:13px;font-weight:600}.var-value[data-v-7ea71ef7]{color:var(--text-secondary);word-break:break-all;margin-bottom:4px;font-family:SF Mono,Monaco,monospace;font-size:12px}.var-source[data-v-7ea71ef7]{color:var(--text-tertiary);font-size:11px}.source-label[data-v-7ea71ef7]{color:var(--text-quaternary)}.modal-footer[data-v-7ea71ef7]{justify-content:flex-end;gap:8px;display:flex}.process-env-alert[data-v-7ea71ef7]{margin-bottom:16px}.alert-content[data-v-7ea71ef7]{font-size:12px;line-height:1.6}.alert-title[data-v-7ea71ef7]{margin:0 0 8px;font-weight:500}.alert-list[data-v-7ea71ef7]{margin:0;padding-left:20px}.alert-list li[data-v-7ea71ef7]{margin:4px 0}.alert-list code[data-v-7ea71ef7]{background:var(--bg-tertiary);color:#18a058;border-radius:4px;padding:2px 6px;font-family:SF Mono,Monaco,monospace;font-size:11px}.alert-hint[data-v-7ea71ef7]{color:var(--text-tertiary);margin:8px 0 0;font-size:11px}.channel-card[data-v-beb1848e]{border:1px solid var(--border-primary);background:var(--bg-primary);border-radius:8px;transition:all .2s}.channel-card[data-v-beb1848e]:hover{border-color:var(--border-secondary)}.channel-header[data-v-beb1848e]{border-bottom:1px solid var(--border-primary);justify-content:space-between;align-items:center;gap:8px;padding:12px 16px;display:flex}.channel-title[data-v-beb1848e]{flex:auto;align-items:center;gap:6px;min-width:0;margin-right:0;display:flex}.channel-name[data-v-beb1848e]{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.channel-title[data-v-beb1848e] .n-tag{flex-shrink:0;padding:0 5px;font-size:11px}.collapse-btn[data-v-beb1848e]{flex-shrink:0}.collapse-btn .n-icon.collapsed[data-v-beb1848e]{transform:rotate(-90deg)}.channel-actions[data-v-beb1848e]{flex-wrap:nowrap;flex:none;justify-content:flex-end;align-items:center;gap:4px;max-width:100%;margin-left:auto;display:flex}.channel-actions[data-v-beb1848e] .n-button{min-width:0;height:22px;padding:0 5px;font-size:11px}.channel-actions[data-v-beb1848e] .n-button__content{gap:2px}.channel-actions[data-v-beb1848e] .n-button__icon{margin:0}.apply-btn[data-v-beb1848e]{display:none}.channel-card:hover .apply-btn[data-v-beb1848e]{display:inline-flex}.test-result[data-v-beb1848e]{border-bottom:1px solid var(--border-primary);background:var(--bg-secondary);padding:10px 16px}.test-result.success[data-v-beb1848e]{background:#18a0580f;border-left:3px solid #18a058}.test-result.failed[data-v-beb1848e]{background:#f56c6c0f;border-left:3px solid #f56c6c}.test-result.warning[data-v-beb1848e]{background:#d990000f;border-left:3px solid #d99000}.test-result-header[data-v-beb1848e]{align-items:center;gap:12px;display:flex}.test-result-status[data-v-beb1848e]{align-items:center;gap:6px;font-size:13px;font-weight:500;display:flex}.test-result.success .test-result-status[data-v-beb1848e]{color:#18a058}.test-result.failed .test-result-status[data-v-beb1848e]{color:#f56c6c}.test-result.warning .test-result-status[data-v-beb1848e]{color:#b87900}.test-result-info[data-v-beb1848e]{flex:1;align-items:center;gap:10px;display:flex}.test-result-info .latency[data-v-beb1848e]{color:var(--text-primary);background:var(--bg-tertiary);border-radius:4px;padding:2px 8px;font-family:SF Mono,Monaco,monospace;font-size:13px;font-weight:600}.test-result-info .status-code[data-v-beb1848e]{color:var(--text-tertiary);font-family:SF Mono,Monaco,monospace;font-size:11px}.test-result-error[data-v-beb1848e]{color:#f56c6c;word-break:break-word;background:#f56c6c14;border-radius:4px;margin-top:8px;padding:8px 10px;font-size:12px;line-height:1.4}.test-result-warning[data-v-beb1848e]{color:#9b6800;word-break:break-word;background:#d9900014;border-radius:4px;margin-top:8px;padding:8px 10px;font-size:12px;line-height:1.4}.channel-info[data-v-beb1848e]{padding:12px 16px}.info-main[data-v-beb1848e]{flex-direction:column;gap:8px;display:flex}.info-row[data-v-beb1848e]{align-items:center;gap:12px;display:flex}.info-row .label[data-v-beb1848e]{min-width:80px;font-size:13px}.info-row .value[data-v-beb1848e]{flex:1;font-size:13px}.info-row .value.mono[data-v-beb1848e]{font-family:SF Mono,Monaco,monospace}.info-footer[data-v-beb1848e]{border-top:1px solid var(--border-primary);justify-content:space-between;align-items:center;margin-top:12px;padding-top:8px;display:flex}.footer-spacer[data-v-beb1848e]{flex:1}.channel-meta[data-v-beb1848e]{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;font-size:12px;display:flex}.balance-meta-tag[data-v-beb1848e]{cursor:pointer;flex-shrink:0;max-width:110px}.balance-meta-tag[data-v-beb1848e] .n-tag__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.meta-item[data-v-beb1848e]{color:var(--text-tertiary);white-space:nowrap}.meta-value[data-v-beb1848e]{color:var(--text-secondary);font-weight:500}.meta-active[data-v-beb1848e]{color:#18a058}@media (width<=1024px){.channel-header[data-v-beb1848e],.channel-info[data-v-beb1848e]{padding:10px 12px}.channel-actions[data-v-beb1848e]{gap:6px}.info-row[data-v-beb1848e]{gap:8px}.info-row .label[data-v-beb1848e]{min-width:70px;font-size:12px}.info-row .value[data-v-beb1848e]{font-size:12px}.channel-meta[data-v-beb1848e]{gap:12px}}@media (width<=768px){.channel-header[data-v-beb1848e]{flex-direction:column;align-items:stretch;gap:8px;padding:8px 10px}.channel-title[data-v-beb1848e]{margin-right:0}.channel-actions[data-v-beb1848e]{justify-content:space-between}.channel-actions[data-v-beb1848e] .n-button{padding:0 8px;font-size:12px}.channel-info[data-v-beb1848e]{padding:8px 10px}.info-row[data-v-beb1848e]{flex-direction:column;align-items:flex-start;gap:4px}.info-row .label[data-v-beb1848e]{min-width:auto}.info-footer[data-v-beb1848e]{flex-direction:column;align-items:flex-start;gap:8px;margin-top:8px}.channel-meta[data-v-beb1848e]{justify-content:flex-start;align-self:stretch;gap:8px 12px}}@media (width<=640px){.channel-card[data-v-beb1848e]{border-radius:6px}.channel-header[data-v-beb1848e]{padding:6px 8px}.channel-name[data-v-beb1848e]{min-width:0;font-size:12px}.channel-title[data-v-beb1848e]{min-width:0}.channel-title[data-v-beb1848e] .n-tag{font-size:10px}.channel-info[data-v-beb1848e]{padding:6px 8px}.info-row .label[data-v-beb1848e],.info-row .value[data-v-beb1848e]{font-size:11px}.channel-actions[data-v-beb1848e] .n-button{height:24px;padding:0 6px;font-size:11px}.channel-meta[data-v-beb1848e]{font-size:11px}}@media (width<=480px){.channel-header[data-v-beb1848e],.channel-info[data-v-beb1848e]{padding:4px 6px}.channel-actions[data-v-beb1848e]{gap:4px}.channel-actions[data-v-beb1848e] .n-button{min-width:0;height:22px;padding:0 4px;font-size:10px}}.model-redirect-editor[data-v-8ebdcad0]{width:100%}.redirect-row[data-v-8ebdcad0]{align-items:center;gap:8px;margin-bottom:8px;display:flex}.redirect-input[data-v-8ebdcad0]{flex:1;min-width:0}.redirect-arrow[data-v-8ebdcad0]{flex-shrink:0;justify-content:center;align-items:center;width:24px;display:flex}.add-btn[data-v-8ebdcad0]{width:100%;margin-top:4px}.channel-auth-section[data-v-8fcf77d4]{gap:10px;width:100%;display:grid}.oauth-content[data-v-8fcf77d4],.oauth-quota[data-v-8fcf77d4]{gap:8px;display:grid}.oauth-meta[data-v-8fcf77d4]{color:var(--text-color-3)}.oauth-quota[data-v-8fcf77d4]{grid-template-columns:repeat(3,auto);align-items:center}.loading-container{justify-content:center;align-items:center;padding:80px 0;display:flex}.empty-state{justify-content:center;align-items:center;min-height:200px;display:flex}.model-catalog-control{flex-wrap:wrap;align-items:center;gap:6px 8px;margin:-3px 0 10px;font-size:12px;line-height:1.45;display:flex}.model-catalog-status{color:var(--n-text-color-3)}.model-catalog-status.is-loading{color:var(--n-info-color,var(--n-text-color-3))}.model-catalog-status.is-error{color:var(--n-error-color,#d03050)}.channels-list{flex-direction:column;gap:10px;display:flex;position:relative;overflow:hidden}.channel-card{border:1px solid var(--n-divider-color);background:var(--bg-secondary);border-left:3px solid #18a058;border-radius:6px;padding:10px 12px;transition:all .2s;box-shadow:0 1px 2px #0000000a}.channel-card.active{border-color:var(--n-primary-color);background:var(--n-primary-color-suppl,#18a05814);box-shadow:0 2px 8px #18a0581a}.channel-card:hover{border-color:var(--n-border-color);box-shadow:0 2px 8px #00000014}.channel-card.disabled{opacity:.6;border-left-color:#909399}.channel-card.status-frozen{background:linear-gradient(90deg,#d0305014 0%,#0000 100%);border-left-color:#d03050}.channel-card.status-checking{background:linear-gradient(90deg,#f0a02014 0%,#0000 100%);border-left-color:#f0a020}.channel-card.collapsed .channel-info{display:none}.channel-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.channel-title{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.channel-name{color:var(--n-text-color);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.channel-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.channel-actions .apply-btn{opacity:0;transition:opacity .2s}.channel-card:hover .channel-actions .apply-btn{opacity:1}.channel-actions .n-switch{margin-left:2px}.channel-info{border-top:1px dashed var(--n-border-color);margin-top:8px;padding-top:8px}.info-main{flex-direction:column;gap:4px;display:flex}.info-row{align-items:center;gap:8px;display:flex}.label{color:var(--n-text-color-3);flex-shrink:0;width:56px;font-size:11px}.value{color:var(--n-text-color-2);word-break:break-word;flex:1;font-size:12px}.value.mono{font-family:IBM Plex Mono,SFMono-Regular,Consolas,monospace}.info-footer{border-top:1px dashed var(--n-border-color);align-items:center;gap:8px;margin-top:6px;padding-top:6px;display:flex}.footer-spacer{flex:1}.channel-meta{flex-shrink:0;gap:12px;display:flex}.meta-item{color:var(--n-text-color-3);white-space:nowrap;font-size:11px}.meta-value{color:#18a058;font-weight:600}.meta-value.meta-active{color:#f0a020;animation:1.5s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.collapse-btn{align-items:center;padding:0;display:flex}.collapse-btn .n-icon{transition:transform .2s}.collapse-btn .n-icon.collapsed{transform:rotate(-90deg)}.dialog-footer{justify-content:flex-end;gap:8px;display:flex}.channel-form{padding:0}.form-section{background:var(--n-color);border:1px solid var(--n-border-color);border-radius:6px;margin-bottom:10px;padding:12px}.form-section:last-child{margin-bottom:0}.section-title{color:var(--n-text-color);border-bottom:1px solid var(--n-border-color);align-items:center;gap:6px;margin-bottom:10px;padding-bottom:6px;font-size:12px;font-weight:600;display:flex}.section-desc{color:var(--n-text-color-3);font-size:11px;font-weight:400}.form-section.collapsible{background:var(--n-color-hover)}.channel-form .n-radio-group{width:100%}.channel-form .n-radio-group .n-space{gap:16px;width:100%;display:flex}.channel-form .n-radio{border:1px solid var(--n-border-color);border-radius:6px;flex:1;justify-content:center;padding:8px 16px;transition:all .2s;display:flex}.channel-form .n-radio:hover,.channel-form .n-radio.n-radio--checked{border-color:var(--n-primary-color);background:var(--n-primary-color-suppl,#18a05814)}.channel-form .n-form-item{margin-bottom:10px}.channel-form .n-form-item:last-child{margin-bottom:0}.channel-form .n-form-item-label{padding-bottom:0;font-size:12px}.auth-provider-status{flex-direction:column;justify-content:center;gap:6px;width:100%;min-height:28px;display:flex}.auth-provider-tags{min-height:24px}.auth-provider-message{color:var(--n-text-color-3);font-size:12px;line-height:1.45}.auth-provider-message.warning{color:#c97a00}.model-definitions-editor[data-v-cb026422]{width:100%}.model-definitions-toolbar[data-v-cb026422]{align-items:center;gap:10px;margin-bottom:8px;display:flex}.proxy-logs[data-v-b403c421]{background:#fff;border-top:1px solid #e5e7eb;flex-direction:column;height:100%;display:flex}[data-theme=dark] .proxy-logs[data-v-b403c421]{background:var(--bg-secondary);border-top:1px solid var(--border-primary)}.logs-header[data-v-b403c421]{border-bottom:1px solid #e5e7eb;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}[data-theme=dark] .logs-header[data-v-b403c421]{border-bottom:1px solid var(--border-primary)}.header-left[data-v-b403c421]{align-items:center;gap:12px;display:flex}.title[data-v-b403c421]{color:#18181b;margin:0;font-size:14px;font-weight:600}[data-theme=dark] .title[data-v-b403c421]{color:var(--text-primary)}.today-stats[data-v-b403c421]{align-items:center;gap:6px;display:flex}.today-stats[data-v-b403c421] .n-tag{padding:2px 8px;font-size:11px;font-weight:600}.logs-table[data-v-b403c421]{flex-direction:column;flex:1;display:flex;overflow:hidden}.table-header[data-v-b403c421]{color:#6b7280;white-space:nowrap;background:#f9fafb;border-bottom:1px solid #e5e7eb;flex-shrink:0;padding:8px 12px;font-size:11px;font-weight:600;display:flex}[data-theme=dark] .table-header[data-v-b403c421]{border-bottom:1px solid var(--border-primary);color:var(--text-tertiary);background:#ffffff05}.table-body[data-v-b403c421]{flex:1;min-height:0;padding-bottom:40px;scroll-padding-bottom:40px;overflow:hidden auto}.table-row[data-v-b403c421]{cursor:pointer;border-bottom:1px solid #f3f4f6;padding:8px 12px;font-size:12px;transition:background-color .2s;display:flex;position:relative}[data-theme=dark] .table-row[data-v-b403c421]{border-bottom:1px solid #ffffff0a}.table-row[data-v-b403c421]:hover{background:#f9fafb}[data-theme=dark] .table-row[data-v-b403c421]:hover{background:#ffffff0a}.table-row.new-log[data-v-b403c421],.action-row.new-log[data-v-b403c421]{border-left:3px solid #18a058;padding-left:9px;animation:4.5s cubic-bezier(.25,.46,.45,.94) forwards newLogPulse-b403c421}@keyframes newLogPulse-b403c421{0%{background:linear-gradient(90deg,#18a05826 0%,#18a0580f 100%);box-shadow:0 0 8px #18a05833}5%{background:linear-gradient(90deg,#18a0582e 0%,#18a05814 100%);box-shadow:0 0 12px 1px #18a05840}15%{background:linear-gradient(90deg,#18a05829 0%,#18a05812 100%);box-shadow:0 0 10px 1px #18a05833}30%{background:linear-gradient(90deg,#18a0581f 0%,#18a0580d 100%);box-shadow:0 0 6px #18a05826}50%{background:linear-gradient(90deg,#18a05814 0%,#18a05808 100%);box-shadow:0 0 4px #18a0581a}70%{background:linear-gradient(90deg,#18a0580a 0%,#18a05804 100%);box-shadow:0 0 2px #18a0580f}85%{background:linear-gradient(90deg,#18a05805 0%,#18a05802 100%);box-shadow:0 0 1px #18a05808}to{background:0 0;border-left-color:#0000;box-shadow:0 0 #18a05800}}[data-theme=dark] .table-row.new-log[data-v-b403c421],[data-theme=dark] .action-row.new-log[data-v-b403c421]{animation:4.5s cubic-bezier(.25,.46,.45,.94) forwards newLogPulseDark-b403c421}@keyframes newLogPulseDark-b403c421{0%{background:linear-gradient(90deg,#18a05833 0%,#18a05814 100%);box-shadow:0 0 10px #18a05840}5%{background:linear-gradient(90deg,#18a0583d 0%,#18a0581a 100%);box-shadow:0 0 14px 2px #18a0584d}15%{background:linear-gradient(90deg,#18a05836 0%,#18a05817 100%);box-shadow:0 0 12px 1px #18a05840}30%{background:linear-gradient(90deg,#18a05829 0%,#18a05812 100%);box-shadow:0 0 8px 1px #18a0582e}50%{background:linear-gradient(90deg,#18a0581c 0%,#18a0580b 100%);box-shadow:0 0 5px #18a0581f}70%{background:linear-gradient(90deg,#18a0580f 0%,#18a05806 100%);box-shadow:0 0 3px #18a05814}85%{background:linear-gradient(90deg,#18a05808 0%,#18a05803 100%);box-shadow:0 0 1px #18a0580a}to{background:0 0;border-left-color:#0000;box-shadow:0 0 #18a05800}}.table-row-content[data-v-b403c421]{width:100%;display:flex}.action-row[data-v-b403c421]{color:#166534;background:#f0fdf4;border-bottom:1px solid #f3f4f6;border-left:3px solid #18a058;align-items:center;padding:10px 12px;font-size:13px;display:flex}[data-theme=dark] .action-row[data-v-b403c421]{color:#4ade80;background:#18a0581f;border-bottom:1px solid #ffffff0a}.error-row[data-v-b403c421]{color:#b42318;background:#fef2f2;border-bottom:1px solid #f3f4f6;border-left:3px solid #d03050;align-items:center;padding:10px 12px;font-size:13px;display:flex}[data-theme=dark] .error-row[data-v-b403c421]{color:#fda4af;background:#d030501f;border-bottom:1px solid #ffffff0a}.action-message[data-v-b403c421]{flex:1;font-weight:500}.action-time[data-v-b403c421]{color:#6b7280;margin-left:12px;margin-right:22px;font-family:monospace;font-size:11px}[data-theme=dark] .action-time[data-v-b403c421]{color:var(--text-tertiary)}.col[data-v-b403c421]{white-space:nowrap;text-overflow:ellipsis;align-items:center;display:flex;overflow:hidden}.col-channel-claude[data-v-b403c421]{flex:80px;min-width:0;overflow:hidden}.col-token-claude[data-v-b403c421]{flex:0 0 68px;justify-content:center;min-width:0}.col-time-claude[data-v-b403c421]{flex:0 0 85px;justify-content:flex-end;min-width:85px;padding-left:10px;padding-right:6px;font-family:monospace;font-size:11px}.col-channel-codex[data-v-b403c421]{flex:65px;min-width:0;overflow:hidden}.col-token-codex[data-v-b403c421]{flex:0 0 58px;justify-content:center;min-width:0}.col-time-codex[data-v-b403c421]{flex:0 0 80px;justify-content:flex-end;min-width:80px;padding-left:10px;padding-right:6px;font-family:monospace;font-size:11px}.col-channel-gemini[data-v-b403c421]{flex:80px;min-width:0;overflow:hidden}.col-token-gemini[data-v-b403c421]{flex:0 0 68px;justify-content:center;min-width:0}.col-time-gemini[data-v-b403c421]{flex:0 0 85px;justify-content:flex-end;min-width:85px;padding-left:10px;padding-right:6px;font-family:monospace;font-size:11px}.col-channel-opencode[data-v-b403c421]{flex:65px;min-width:0;overflow:hidden}.col-token-opencode[data-v-b403c421]{flex:0 0 58px;justify-content:center;min-width:0}.col-time-opencode[data-v-b403c421]{flex:0 0 80px;justify-content:flex-end;min-width:80px;padding-left:10px;padding-right:6px;font-family:monospace;font-size:11px}.col-channel-omp[data-v-b403c421]{flex:65px;min-width:0;overflow:hidden}.col-token-omp[data-v-b403c421]{flex:0 0 58px;justify-content:center;min-width:0}.col-time-omp[data-v-b403c421]{flex:0 0 80px;justify-content:flex-end;min-width:80px;padding-left:10px;padding-right:6px;font-family:monospace;font-size:11px}.col-channel[data-v-b403c421]{min-width:0;overflow:hidden}.col-channel .n-tag[data-v-b403c421]{text-overflow:ellipsis;max-width:100%;overflow:hidden}.col-token[data-v-b403c421]{justify-content:center;min-width:0}.col-time[data-v-b403c421]{justify-content:flex-end;font-family:monospace;font-size:11px}.empty-state[data-v-b403c421]{text-align:center;color:#9ca3af;padding:40px 16px;font-size:13px}[data-theme=dark] .empty-state[data-v-b403c421]{color:var(--text-tertiary)}.logs-footer[data-v-b403c421]{color:#6b7280;border-top:1px solid #e5e7eb;justify-content:space-between;align-items:center;padding:8px 16px;font-size:12px;display:flex}[data-theme=dark] .logs-footer[data-v-b403c421]{border-top:1px solid var(--border-primary);color:var(--text-tertiary)}.status[data-v-b403c421]{color:#ef4444;align-items:center;gap:4px;display:flex}.status.connected[data-v-b403c421]{color:#10b981}[data-theme=dark] .status.connected[data-v-b403c421]{color:#4ade80}.count[data-v-b403c421]{color:#6b7280}[data-theme=dark] .count[data-v-b403c421]{color:var(--text-tertiary)}@media (width<=1024px){.logs-header[data-v-b403c421]{padding:10px 12px}.header-left[data-v-b403c421]{gap:8px}.title[data-v-b403c421]{font-size:13px}.today-stats[data-v-b403c421] .n-tag{padding:1px 6px;font-size:10px}.table-header[data-v-b403c421]{padding:6px 10px;font-size:10px}.table-row[data-v-b403c421]{padding:6px 10px}.logs-footer[data-v-b403c421]{padding:6px 12px;font-size:11px}.col-channel-claude[data-v-b403c421],.col-channel-gemini[data-v-b403c421]{flex:0 0 75px}.col-token-claude[data-v-b403c421],.col-token-gemini[data-v-b403c421]{flex:0 0 55px}.col-time-claude[data-v-b403c421],.col-time-gemini[data-v-b403c421]{flex:0 0 80px;min-width:80px}.col-channel-codex[data-v-b403c421],.col-channel-opencode[data-v-b403c421],.col-channel-omp[data-v-b403c421]{flex:0 0 65px}.col-token-codex[data-v-b403c421],.col-token-opencode[data-v-b403c421],.col-token-omp[data-v-b403c421]{flex:0 0 48px}.col-time-codex[data-v-b403c421],.col-time-opencode[data-v-b403c421],.col-time-omp[data-v-b403c421]{flex:0 0 75px;min-width:75px}}@media (width<=768px){.logs-header[data-v-b403c421]{flex-direction:column;align-items:stretch;gap:8px;padding:8px 10px}.header-left[data-v-b403c421]{justify-content:space-between}.title[data-v-b403c421]{font-size:12px}.today-stats[data-v-b403c421] .n-tag{padding:1px 4px;font-size:9px}.table-header[data-v-b403c421],.table-row[data-v-b403c421]{padding:4px 8px;font-size:10px}.table-row-content[data-v-b403c421]{font-size:10px}.action-row[data-v-b403c421]{padding:8px 10px;font-size:11px}.action-message[data-v-b403c421]{font-size:11px}.action-time[data-v-b403c421]{margin-right:12px;font-size:9px}.col-channel-claude[data-v-b403c421],.col-channel-gemini[data-v-b403c421],.col-channel-codex[data-v-b403c421],.col-channel-opencode[data-v-b403c421],.col-channel-omp[data-v-b403c421]{flex:0 0 60px}.col-channel[data-v-b403c421] .n-tag{height:18px;padding:0 4px;font-size:9px}.col-token-claude[data-v-b403c421],.col-token-gemini[data-v-b403c421],.col-token-codex[data-v-b403c421],.col-token-opencode[data-v-b403c421],.col-token-omp[data-v-b403c421]{flex:0 0 40px;font-size:9px}.col-time-claude[data-v-b403c421],.col-time-gemini[data-v-b403c421],.col-time-codex[data-v-b403c421],.col-time-opencode[data-v-b403c421],.col-time-omp[data-v-b403c421]{flex:0 0 65px;min-width:65px;font-size:9px}.logs-footer[data-v-b403c421]{padding:4px 10px;font-size:10px}}@media (width<=640px){.logs-header[data-v-b403c421]{gap:6px;padding:6px 8px}.header-left[data-v-b403c421]{flex-wrap:wrap;gap:4px}.title[data-v-b403c421]{font-size:11px}.today-stats[data-v-b403c421]{gap:4px}.today-stats[data-v-b403c421] .n-tag{height:16px;padding:0 3px;font-size:8px}.table-header[data-v-b403c421],.table-row[data-v-b403c421]{padding:3px 6px;font-size:9px}.table-row-content[data-v-b403c421]{font-size:9px}.action-row[data-v-b403c421]{padding:6px 8px;font-size:10px}.action-message[data-v-b403c421]{font-size:10px}.action-time[data-v-b403c421]{margin-left:8px;margin-right:8px;font-size:8px}.col-channel-claude[data-v-b403c421],.col-channel-gemini[data-v-b403c421],.col-channel-codex[data-v-b403c421],.col-channel-opencode[data-v-b403c421],.col-channel-omp[data-v-b403c421]{flex:0 0 50px}.col-channel[data-v-b403c421] .n-tag{height:16px;padding:0 3px;font-size:8px}.col-token-claude[data-v-b403c421],.col-token-gemini[data-v-b403c421],.col-token-codex[data-v-b403c421],.col-token-opencode[data-v-b403c421],.col-token-omp[data-v-b403c421]{flex:0 0 32px;font-size:8px}.col-time-claude[data-v-b403c421],.col-time-gemini[data-v-b403c421],.col-time-codex[data-v-b403c421],.col-time-opencode[data-v-b403c421],.col-time-omp[data-v-b403c421]{flex:0 0 55px;min-width:55px;font-size:8px}.logs-footer[data-v-b403c421]{padding:3px 8px;font-size:9px}.status[data-v-b403c421],.count[data-v-b403c421]{font-size:9px}}@media (width<=480px){.logs-header[data-v-b403c421]{padding:4px 6px}.title[data-v-b403c421]{font-size:10px}.today-stats[data-v-b403c421] .n-tag{height:14px;font-size:7px}.table-header[data-v-b403c421],.table-row[data-v-b403c421]{padding:2px 4px;font-size:8px}.action-row[data-v-b403c421]{padding:4px 6px;font-size:9px}.action-row[data-v-b403c421] .n-icon{margin-right:4px}.col-channel-claude[data-v-b403c421],.col-channel-gemini[data-v-b403c421],.col-channel-codex[data-v-b403c421],.col-channel-opencode[data-v-b403c421],.col-channel-omp[data-v-b403c421]{flex:0 0 45px}.col-token-claude[data-v-b403c421],.col-token-gemini[data-v-b403c421],.col-token-codex[data-v-b403c421],.col-token-opencode[data-v-b403c421],.col-token-omp[data-v-b403c421]{flex:0 0 28px;font-size:7px}.col-time-claude[data-v-b403c421],.col-time-gemini[data-v-b403c421],.col-time-codex[data-v-b403c421],.col-time-opencode[data-v-b403c421],.col-time-omp[data-v-b403c421]{flex:0 0 48px;min-width:48px;font-size:7px}.logs-footer[data-v-b403c421]{padding:2px 6px;font-size:8px}}.right-panel[data-v-71b20d97]{background:var(--bg-primary);border-left:1px solid var(--border-primary);flex-direction:column;width:480px;min-width:480px;height:100%;display:flex}.toolbar-section[data-v-71b20d97]{background:var(--bg-secondary);border-bottom:1px solid var(--border-primary);flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.toolbar-left[data-v-71b20d97]{align-items:center;gap:8px;display:flex}.toolbar-label[data-v-71b20d97]{margin-right:2px;font-size:12px}.toolbar-right[data-v-71b20d97]{align-items:center;gap:2px;display:flex}.toolbar-btn[data-v-71b20d97]{--toolbar-button-text:var(--text-secondary);border-radius:4px;transition:transform .18s cubic-bezier(.4,0,.2,1);--n-text-color:var(--toolbar-button-text)!important;--n-text-color-hover:var(--toolbar-button-text)!important;--n-text-color-pressed:var(--toolbar-button-text)!important;--n-text-color-focus:var(--toolbar-button-text)!important;--n-color-hover:transparent!important;--n-color-pressed:transparent!important;--n-color-focus:transparent!important;color:var(--toolbar-button-text)!important;padding:5px!important}.toolbar-btn[data-v-71b20d97] .n-button__content,.toolbar-btn[data-v-71b20d97] .n-button__icon{color:var(--toolbar-button-text)!important}.toolbar-btn[data-v-71b20d97]:hover,.toolbar-btn[data-v-71b20d97]:focus,.toolbar-btn[data-v-71b20d97]:focus-visible,.toolbar-btn[data-v-71b20d97]:active{background:0 0;transform:translateY(-1px);color:var(--toolbar-button-text)!important}.toolbar-btn[data-v-71b20d97]:active{transform:translateY(0)}.toolbar-divider[data-v-71b20d97]{background:var(--border-primary);width:1px;height:16px;margin:0 4px}.oauth-banner[data-v-71b20d97]{color:#2080f0;background:#2080f014;border-bottom:1px solid #2080f033;flex-shrink:0;align-items:center;gap:6px;padding:6px 14px;font-size:12px;display:flex}.oauth-banner span[data-v-71b20d97]{flex:1}.channels-section[data-v-71b20d97]{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.channels-section.full-height[data-v-71b20d97]{flex:1}.panel-header[data-v-71b20d97]{background:var(--bg-secondary);border-bottom:1px solid var(--border-primary);flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 14px;display:flex}.header-title[data-v-71b20d97]{align-items:baseline;gap:8px;min-width:0;display:flex}.header-title h3[data-v-71b20d97]{color:var(--text-primary);margin:0;font-size:13px;font-weight:600}.header-hint[data-v-71b20d97]{font-size:11px}.header-actions[data-v-71b20d97]{flex-shrink:0;align-items:center;gap:8px;display:flex}.channels-scroll-area[data-v-71b20d97]{flex:1;min-height:0;padding:12px;overflow-y:auto}.logs-section[data-v-71b20d97]{flex:0 0 340px;min-height:340px;max-height:340px;overflow:hidden}.logs-section.full-height[data-v-71b20d97]{flex:1;min-height:0;max-height:none}@media (width<=1024px){.right-panel[data-v-71b20d97]{width:420px;min-width:420px}.logs-section[data-v-71b20d97]{flex:0 0 300px;min-height:300px;max-height:300px}}@media (width<=768px){.right-panel[data-v-71b20d97]{width:100%;min-width:100%}.toolbar-section[data-v-71b20d97]{padding:8px 12px}.toolbar-label[data-v-71b20d97]{font-size:11px}.logs-section[data-v-71b20d97]{flex:0 0 260px;min-height:260px;max-height:260px}}@media (height<=600px){.right-panel[data-v-71b20d97]{overflow-y:auto}.channels-section[data-v-71b20d97]{flex:0 0 360px;min-height:360px}.logs-section[data-v-71b20d97]{flex:0 0 260px}}.layout[data-v-80eb81f5]{background:var(--bg-primary);flex-direction:column;height:100vh;display:flex}.header[data-v-80eb81f5]{background:var(--gradient-header);border-bottom:1px solid var(--border-primary);flex-shrink:0;justify-content:space-between;align-items:center;height:74px;padding:10px 22px;display:flex;box-shadow:inset 0 1px #ffffff57}.header-actions[data-v-80eb81f5]{background:color-mix(in srgb, var(--bg-primary) 82%, transparent);border:1px solid var(--border-primary);border-radius:999px;align-items:center;gap:8px;padding:6px 10px;display:flex;box-shadow:0 14px 34px #0f171d14}.more-menu-trigger[data-v-80eb81f5]{display:flex}.header-divider[data-v-80eb81f5]{background:#95a7af59;width:1px;height:24px;margin:0 2px}.env-warning-btn[data-v-80eb81f5]{cursor:pointer;background:#f59e0b1a;border-radius:4px;align-items:center;gap:4px;padding:4px 8px;transition:background .2s;display:flex}.env-warning-btn[data-v-80eb81f5]:hover{background:#f59e0b2e}.env-warning-icon[data-v-80eb81f5]{color:#f59e0b}.env-warning-count[data-v-80eb81f5]{color:#f59e0b;font-size:11px;font-weight:600}.logo-section[data-v-80eb81f5]{cursor:pointer;color:inherit;border-radius:18px;align-items:center;gap:14px;margin-left:-8px;padding:8px 14px;text-decoration:none;transition:background .2s;display:flex}.logo-section[data-v-80eb81f5]:hover{background:var(--hover-bg)}.logo-wrapper[data-v-80eb81f5]{background:linear-gradient(135deg,#18a0582e,#18a0580d);border-radius:14px;justify-content:center;align-items:center;width:40px;height:40px;display:flex;box-shadow:0 10px 24px #0f171d14}.logo-image[data-v-80eb81f5]{object-fit:contain;width:22px;height:22px}.title-group[data-v-80eb81f5]{flex-direction:column;gap:1px;display:flex}.title-main[data-v-80eb81f5]{color:var(--brand-title-color);margin:0;font-size:18px;font-weight:700;line-height:1.2}.title-sub[data-v-80eb81f5]{color:var(--text-tertiary);font-size:11px}.nav-tabs[data-v-80eb81f5]{background:color-mix(in srgb, var(--bg-primary) 86%, transparent);border:1px solid var(--border-primary);border-radius:999px;align-items:center;gap:6px;margin-left:28px;padding:6px 8px;display:flex;box-shadow:0 14px 36px #0f171d14}.nav-tab[data-v-80eb81f5]{cursor:pointer;border-radius:999px;align-items:center;gap:7px;padding:8px 14px;transition:background .2s;display:flex;position:relative}.nav-tab[data-v-80eb81f5]:hover{background:var(--hover-bg)}.nav-tab.active[data-v-80eb81f5]{background:var(--primary-color-soft)}.nav-tab.active[data-v-80eb81f5]:after{content:"";border-radius:inherit;background:0 0;border:1px solid #18a05838;position:absolute;inset:0}.nav-icon[data-v-80eb81f5]{color:var(--text-tertiary)}.nav-tab:hover .nav-icon[data-v-80eb81f5],.nav-tab.active .nav-icon[data-v-80eb81f5]{color:var(--primary-color,#18a058)}.nav-label[data-v-80eb81f5]{color:var(--text-secondary);font-size:13px;font-weight:500}.nav-tab:hover .nav-label[data-v-80eb81f5],.nav-tab.active .nav-label[data-v-80eb81f5]{color:var(--primary-color,#18a058)}.nav-tab.active .nav-label[data-v-80eb81f5]{font-weight:600}.main-container[data-v-80eb81f5]{flex:1;height:calc(100vh - 74px);min-height:0;display:flex;overflow:hidden}.global-loading-overlay[data-v-80eb81f5]{background:var(--bg-overlay);z-index:1000;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.left-content[data-v-80eb81f5]{flex:1;min-width:0;height:100%;overflow:hidden}.favorites-button-wrapper[data-v-80eb81f5]{position:relative}.favorites-badge[data-v-80eb81f5]{color:#fff;pointer-events:none;background:#ff4d4f;border-radius:7px;justify-content:center;align-items:center;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:600;display:flex;position:absolute;top:-3px;right:-3px}.help-content[data-v-80eb81f5]{max-height:70vh;overflow-y:auto}.help-section[data-v-80eb81f5]{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:8px;margin-bottom:20px;padding:16px}.help-section[data-v-80eb81f5]:last-child{margin-bottom:0}.help-section h4[data-v-80eb81f5]{color:var(--text-primary);border-bottom:1px solid var(--border-primary);margin:0 0 12px;padding-bottom:10px;font-size:15px;font-weight:600}.help-section p[data-v-80eb81f5]{color:var(--text-secondary);margin:0 0 10px;font-size:13px;line-height:1.7}.help-section ul[data-v-80eb81f5]{margin:8px 0 0;padding-left:20px}.help-section li[data-v-80eb81f5]{color:var(--text-secondary);margin-bottom:4px;font-size:13px;line-height:1.8}.help-section li strong[data-v-80eb81f5]{color:var(--primary-color,#18a058)}.command-list[data-v-80eb81f5]{flex-direction:column;gap:8px;display:flex}.command-item[data-v-80eb81f5]{background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:6px;align-items:center;gap:12px;padding:10px 12px;display:flex}.command-item code[data-v-80eb81f5]{min-width:140px;color:var(--primary-color,#18a058);background:#18a0581a;border-radius:4px;padding:4px 10px;font-family:monospace;font-size:12px;font-weight:600}.command-item span[data-v-80eb81f5]{color:var(--text-secondary);font-size:13px}.help-section kbd[data-v-80eb81f5]{color:var(--text-primary);background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:3px;margin:0 2px;padding:2px 6px;font-family:monospace;font-size:11px;font-weight:600;display:inline-block}.link-list[data-v-80eb81f5]{flex-wrap:wrap;gap:12px;display:flex}.link-list a[data-v-80eb81f5]{color:var(--primary-color,#18a058);background:#18a05814;border-radius:4px;padding:6px 10px;font-size:13px;text-decoration:none}.link-list a[data-v-80eb81f5]:hover{background:#18a05826}.panel-security-auth[data-v-80eb81f5]{flex-direction:column;gap:12px;display:flex}.panel-security-error[data-v-80eb81f5]{color:#d03050;font-size:12px}.panel-security-hint[data-v-80eb81f5]{font-size:12px;line-height:1.6}.header-actions[data-v-80eb81f5],.nav-tabs[data-v-80eb81f5]{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}[data-theme=dark] .header[data-v-80eb81f5]{border-bottom-color:#2b424aeb;box-shadow:inset 0 -1px #ffffff08}[data-theme=dark] .header-actions[data-v-80eb81f5],[data-theme=dark] .nav-tabs[data-v-80eb81f5]{background:#0c151bdb;border-color:#364c56e6;box-shadow:0 14px 32px #00000042}[data-theme=dark] .logo-section[data-v-80eb81f5]:hover{background:#ffffff0d}@media (width<=1024px){.header[data-v-80eb81f5]{height:68px;padding:10px 16px}.main-container[data-v-80eb81f5]{height:calc(100vh - 68px)}.nav-tabs[data-v-80eb81f5]{margin-left:16px;padding:5px 6px}.title-sub[data-v-80eb81f5]{display:none}}@media (width<=768px){.header[data-v-80eb81f5]{height:60px;padding:8px 12px}.main-container[data-v-80eb81f5]{height:calc(100vh - 60px)}.logo-wrapper[data-v-80eb81f5]{width:28px;height:28px}.logo-image[data-v-80eb81f5]{width:18px;height:18px}.title-main[data-v-80eb81f5]{font-size:14px}.title-sub[data-v-80eb81f5]{display:none}.nav-tabs[data-v-80eb81f5]{gap:2px;margin-left:10px;padding:4px 5px}.nav-tab[data-v-80eb81f5]{gap:4px;padding:6px 10px}.nav-label[data-v-80eb81f5]{font-size:12px}.header-actions[data-v-80eb81f5]{gap:2px}}@media (width<=640px){.header[data-v-80eb81f5]{height:54px;padding:6px 8px}.main-container[data-v-80eb81f5]{height:calc(100vh - 54px)}.title-group[data-v-80eb81f5]{display:none}.nav-tabs[data-v-80eb81f5]{flex:1;justify-content:center;margin-left:8px}.nav-tab[data-v-80eb81f5]{flex-direction:column;gap:2px;padding:4px 6px}.nav-label[data-v-80eb81f5]{font-size:10px}}.asset-panel{background:var(--bg-primary);flex-direction:column;flex:1;height:100%;min-height:0;display:flex}.asset-panel-header,.asset-drawer-toolbar{border-bottom:1px solid var(--border-primary);background:var(--bg-primary);justify-content:space-between;align-items:center;gap:16px;padding:14px 18px;display:flex}.asset-drawer-toolbar{background:var(--bg-secondary);justify-content:flex-end;padding:10px 12px}.asset-title-group,.asset-title-row,.asset-action-row,.asset-filter-bar,.asset-summary,.asset-meta,.asset-tags,.asset-card-actions{align-items:center;display:flex}.asset-title-group{gap:10px;min-width:0}.asset-heading{min-width:0}.asset-title-row{gap:8px;min-width:0}.asset-title{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:650;line-height:1.25;overflow:hidden}.asset-subtitle{color:var(--text-tertiary);margin-top:3px;font-size:12px;line-height:1.35}.asset-platform-pill{border:1px solid var(--border-primary);background:var(--bg-secondary);color:var(--text-tertiary);border-radius:999px;flex-shrink:0;padding:2px 7px;font-size:11px;font-weight:500;line-height:1.4}.asset-action-row{flex-shrink:0;gap:6px}.asset-action-row .n-button{font-size:12px}.asset-summary{border-bottom:1px solid var(--border-primary);background:var(--bg-secondary);gap:8px;padding:10px 18px}.asset-panel.in-drawer .asset-summary{padding:10px 12px}.asset-summary-item{border:1px solid var(--border-primary);background:var(--bg-primary);border-radius:999px;align-items:baseline;gap:6px;min-width:0;padding:4px 8px;display:inline-flex}.asset-summary-label{color:var(--text-tertiary);font-size:11px}.asset-summary-value{color:var(--text-primary);font-variant-numeric:tabular-nums;font-size:12px;font-weight:650}.asset-filter-bar{border-bottom:1px solid var(--border-primary);background:var(--bg-primary);gap:10px;padding:12px 18px}.asset-panel.in-drawer .asset-filter-bar{padding:10px 12px}.asset-search{flex:1;min-width:160px}.asset-filter{flex-shrink:0;width:116px}.asset-panel-content{flex:1;min-height:0;padding:16px 18px;overflow-y:auto}.asset-panel.in-drawer .asset-panel-content{padding:12px}.asset-panel-content .n-spin-container{min-height:220px}.asset-empty{justify-content:center;align-items:center;min-height:220px;display:flex}.asset-list{flex-direction:column;gap:10px;display:flex}.asset-footer{border-top:1px solid var(--border-primary);background:var(--bg-secondary);color:var(--text-tertiary);align-items:center;gap:6px;padding:9px 18px;font-size:11px;display:flex}.asset-panel.in-drawer .asset-footer{padding:8px 12px}.asset-info-icon{color:var(--text-quaternary)}.asset-card{border:1px solid var(--border-primary);background:var(--bg-primary);cursor:pointer;border-radius:8px;justify-content:space-between;align-items:flex-start;gap:14px;min-height:96px;padding:14px;transition:border-color .16s ease-out,background-color .16s ease-out,box-shadow .16s ease-out;display:flex}.asset-card:hover{border-color:var(--border-secondary);background:var(--bg-secondary);box-shadow:var(--shadow-sm)}.asset-card.is-installed,.asset-card.is-managed,.asset-card.is-project{background:linear-gradient(0deg, oklch(62% .15 151/.045), oklch(62% .15 151/.045)), var(--bg-primary)}.asset-card.is-disabled,.asset-card.is-protected{background:var(--bg-secondary)}.asset-card-main{flex:1;min-width:0}.asset-card-top{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.asset-card-title-stack{min-width:0}.asset-card-title-row{align-items:center;gap:7px;min-width:0;display:flex}.asset-status-dot{background:var(--text-quaternary);border-radius:999px;flex:none;width:7px;height:7px}.asset-status-dot.active{background:var(--primary-color);box-shadow:0 0 0 3px oklch(62% .15 151/.1)}.asset-status-dot.warning{background:oklch(68% .14 78);box-shadow:0 0 0 3px oklch(68% .14 78/.1)}.asset-name{min-width:0;color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:650;line-height:1.35;overflow:hidden}.asset-name.mono{font-family:var(--font-mono,"SF Mono", "JetBrains Mono", "Cascadia Code", monospace)}.asset-tags{flex-wrap:wrap;gap:5px;margin-top:6px}.asset-description{color:var(--text-secondary);text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:9px;font-size:12px;line-height:1.5;display:-webkit-box;overflow:hidden}.asset-meta{color:var(--text-tertiary);flex-wrap:wrap;gap:8px;margin-top:9px;font-size:11px}.asset-meta-item{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:4px;min-width:0;max-width:100%;display:inline-flex;overflow:hidden}.asset-meta-item.mono{font-family:var(--font-mono,"SF Mono", "JetBrains Mono", "Cascadia Code", monospace)}.asset-link{color:var(--primary-color);flex-shrink:0;text-decoration:none}.asset-link:hover{text-decoration:underline}.asset-card-actions{flex-shrink:0;gap:5px}.asset-platform-strip{align-items:center;gap:5px;margin-left:6px;display:flex}.asset-platform-icon{border:1px solid var(--border-primary);background:var(--bg-secondary);width:24px;height:24px;color:var(--text-tertiary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;transition:border-color .16s ease-out,color .16s ease-out,background-color .16s ease-out;display:inline-flex}.asset-platform-icon:hover{border-color:var(--border-secondary);color:var(--text-secondary)}.asset-platform-icon.active{color:var(--primary-color);background:oklch(62% .15 151/.1);border-color:oklch(62% .15 151/.34)}.asset-detail-drawer-header{width:100%}.asset-detail-identity{align-items:center;gap:12px;min-width:0;display:flex}.asset-detail-icon{color:var(--primary-color);flex-shrink:0}.asset-detail-heading{flex-direction:column;gap:4px;min-width:0;display:flex}.asset-detail-name{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:650;line-height:1.25;overflow:hidden}.asset-detail-name.mono{font-family:var(--font-mono,"SF Mono", "JetBrains Mono", "Cascadia Code", monospace)}.asset-detail-meta{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.asset-detail-subtle{min-width:0;color:var(--text-tertiary);align-items:center;gap:4px;font-size:12px;display:inline-flex}.asset-detail-body{flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.asset-detail-container{flex-direction:column;gap:22px;min-height:0;display:flex}.asset-detail-info-section{flex-direction:column;gap:10px;display:flex}.asset-detail-section-title{color:var(--text-primary);margin:0;font-size:14px;font-weight:650}.asset-detail-description{color:var(--text-secondary);margin:0;font-size:13px;line-height:1.65}.asset-detail-list{border:1px solid var(--border-primary);background:var(--bg-secondary);border-radius:8px;overflow:hidden}.asset-detail-row{border-bottom:1px solid var(--border-primary);grid-template-columns:104px minmax(0,1fr);gap:12px;padding:10px 12px;font-size:13px;display:grid}.asset-detail-row:last-child{border-bottom:0}.asset-detail-label{color:var(--text-tertiary)}.asset-detail-value{overflow-wrap:anywhere;min-width:0;color:var(--text-secondary)}.asset-detail-value.mono{font-family:var(--font-mono,"SF Mono", "JetBrains Mono", "Cascadia Code", monospace);font-size:12px}.asset-detail-box{border:1px solid var(--border-primary);background:var(--bg-secondary);min-width:0;color:var(--text-secondary);border-radius:8px;align-items:center;gap:8px;padding:12px;font-size:13px;display:flex}.asset-detail-box code,.asset-detail-code{font-family:var(--font-mono,"SF Mono", "JetBrains Mono", "Cascadia Code", monospace)}.asset-detail-box code{overflow-wrap:anywhere;color:var(--text-secondary);font-size:12px}.asset-detail-path-box{align-items:flex-start}.asset-detail-path-icon{flex:none;margin-top:1px}.asset-detail-path-text{flex:1;min-width:0;line-height:1.5}.asset-detail-path-copy{color:var(--text-tertiary);flex:none;margin:-4px -4px -4px 4px}.asset-detail-path-copy:hover{color:var(--text-primary)}.asset-detail-link{overflow-wrap:anywhere;min-width:0;color:var(--primary-color);text-decoration:none}.asset-detail-link:hover{text-decoration:underline}.asset-detail-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.asset-detail-content{border:1px solid var(--border-primary);background:var(--bg-secondary);min-height:0;color:var(--text-secondary);overflow-wrap:anywhere;border-radius:8px;flex:1;padding:18px;font-size:13px;line-height:1.7;overflow:auto}.asset-detail-content h1,.asset-detail-content h2,.asset-detail-content h3,.asset-detail-content h4,.asset-detail-content h5,.asset-detail-content h6{color:var(--text-primary);margin:22px 0 10px;font-weight:650;line-height:1.35}.asset-detail-content h1:first-child,.asset-detail-content h2:first-child,.asset-detail-content h3:first-child{margin-top:0}.asset-detail-content h1{border-bottom:1px solid var(--border-primary);padding-bottom:10px;font-size:20px}.asset-detail-content h2{border-bottom:1px solid var(--border-primary);padding-bottom:7px;font-size:17px}.asset-detail-content h3{font-size:15px}.asset-detail-content h4{font-size:14px}.asset-detail-content h5,.asset-detail-content h6{color:var(--text-secondary);font-size:13px}.asset-detail-content p{margin:10px 0}.asset-detail-content strong{color:var(--text-primary);font-weight:650}.asset-detail-content code{border:1px solid var(--border-primary);background:var(--bg-tertiary);font-family:var(--font-mono,"SF Mono", "JetBrains Mono", "Cascadia Code", monospace);border-radius:5px;padding:2px 6px;font-size:12px}.asset-detail-content pre{border:1px solid var(--border-primary);background:var(--bg-primary);border-radius:8px;margin:14px 0;padding:14px;line-height:1.65;overflow-x:auto}.asset-detail-content pre code{color:var(--text-secondary);background:0 0;border:0;padding:0;font-size:12px}.asset-detail-content ul,.asset-detail-content ol{margin:10px 0;padding-left:24px}.asset-detail-content li{margin:5px 0}.asset-detail-content li>p{margin:6px 0}.asset-detail-content a{color:var(--primary-color);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.asset-detail-content a:hover{color:var(--primary-color-hover,var(--primary-color))}.asset-detail-content blockquote{border-left:1px solid var(--border-secondary);background:var(--bg-primary);color:var(--text-tertiary);border-radius:0 8px 8px 0;margin:14px 0;padding:10px 12px}.asset-detail-content blockquote>:first-child{margin-top:0}.asset-detail-content blockquote>:last-child{margin-bottom:0}.asset-detail-content table{border-collapse:collapse;width:max-content;max-width:100%;margin:14px 0;font-size:12px;display:block;overflow-x:auto}.asset-detail-content th,.asset-detail-content td{border:1px solid var(--border-primary);text-align:left;vertical-align:top;padding:8px 10px}.asset-detail-content th{background:var(--bg-tertiary);color:var(--text-primary);font-weight:650}.asset-detail-content img{border-radius:8px;max-width:100%;height:auto;margin:14px auto;display:block}.asset-detail-content hr{background:var(--border-primary);border:0;height:1px;margin:20px 0}.asset-detail-code{border:1px solid var(--border-primary);background:var(--bg-secondary);min-height:0;color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;border-radius:8px;flex:1;margin:0;padding:16px;font-size:12px;line-height:1.65;overflow:auto}.asset-detail-loading,.asset-detail-empty,.asset-detail-error{color:var(--text-tertiary);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:16px;padding:64px 24px;display:flex}.asset-detail-empty-icon,.asset-detail-error-icon{color:var(--text-quaternary)}.asset-detail-error-icon{color:oklch(56% .18 26)}.asset-detail-tabs{flex:1;height:100%;min-height:0}.asset-detail-tabs .n-tabs-pane-wrapper{flex:1;min-height:0;padding-top:16px;overflow:hidden}.asset-detail-tabs .n-tab-pane{flex-direction:column;height:100%;min-height:0;display:flex;overflow:auto}@media (width<=720px){.asset-panel-header{flex-direction:column;align-items:flex-start}.asset-action-row,.asset-filter-bar,.asset-card-top{width:100%}.asset-action-row,.asset-summary{flex-wrap:wrap}.asset-filter-bar{flex-direction:column;align-items:stretch}.asset-filter{width:100%}.asset-card{flex-direction:column}.asset-card-actions{flex-wrap:wrap;align-self:flex-start}}:root{--bg-primary:#fff;--bg-secondary:#f4f7f8;--bg-tertiary:#edf3f1;--bg-elevated:#fff;--bg-overlay:#ffffffeb;--text-primary:#122025;--text-secondary:#58717d;--text-tertiary:#738995;--text-quaternary:#95a7af;--border-primary:#d8e1de;--border-secondary:#c3d0cb;--hover-bg:#18a05814;--active-bg:#18a0581f;--shadow-sm:0 8px 20px #0f171d0f;--shadow-md:0 18px 42px #0f171d1a;--shadow-lg:0 30px 70px #0f171d24;--font-mono:"SF Mono", "JetBrains Mono", "Cascadia Code", "Fira Code", monospace;--gradient-header:linear-gradient(135deg, #f8fbfc 0%, #eef6f3 52%, #e9f7f1 100%);--gradient-bg:linear-gradient(180deg, #f4f7f8 0%, #eef4f2 100%);--gradient-card:linear-gradient(145deg, #fffffffa 0%, #f7faf8fa 100%);--primary-color:#18a058;--primary-color-soft:#18a0581f;--brand-title-color:#0d8f55}[data-theme=dark]{--bg-primary:#0a1116;--bg-secondary:#101920;--bg-tertiary:#16222a;--bg-elevated:#1a2831;--bg-overlay:#0a1116f0;--text-primary:#e7eef0;--text-secondary:#a8bbc0;--text-tertiary:#82969d;--text-quaternary:#667b83;--border-primary:#263740;--border-secondary:#334852;--hover-bg:#ffffff14;--active-bg:#ffffff1f;--shadow-sm:0 10px 24px #0000003d;--shadow-md:0 22px 52px #0000004d;--shadow-lg:0 36px 76px #0000005c;--font-mono:"SF Mono", "JetBrains Mono", "Cascadia Code", "Fira Code", monospace;--gradient-header:linear-gradient(135deg, #0b1419 0%, #101b22 58%, #0d171d 100%);--gradient-bg:linear-gradient(180deg, #0a1116 0%, #0d151b 56%, #091016 100%);--gradient-card:linear-gradient(145deg, #121b22fa 0%, #0c151bfa 100%);--primary-color:#18a058;--primary-color-soft:#18a05829;--brand-title-color:#37d08c}body{background:var(--bg-primary);color:var(--text-primary);margin:0;padding:0;font-family:SF Pro Display,SF Pro Text,Segoe UI Variable Display,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;transition:background-color .3s,color .3s}#app{background:var(--bg-primary);min-height:100vh}*{scrollbar-width:thin;scrollbar-color:#18a05847 transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:#18a05847;border-radius:3px;transition:background-color .2s}::-webkit-scrollbar-thumb:hover{background-color:#18a05880}[data-theme=dark] ::-webkit-scrollbar-thumb{background-color:#18a05866}[data-theme=dark] ::-webkit-scrollbar-thumb:hover{background-color:#18a05899}
|