coding-tool-x 3.9.6-261024 → 3.9.6-261027

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.
Files changed (43) hide show
  1. package/dist/web/assets/{AgentsDrawer-D2oYKcOj.js → AgentsDrawer-CIKKn5h4.js} +1 -1
  2. package/dist/web/assets/{Analytics-Cy3QSSrn.js → Analytics-CWLOqH3a.js} +1 -1
  3. package/dist/web/assets/{AssetPathField-BGuw5ZR7.js → AssetPathField-CYJ6TvS9.js} +1 -1
  4. package/dist/web/assets/{ChatHistoryDrawer-BZ8FY_-9.js → ChatHistoryDrawer-r9UZA7rU.js} +1 -1
  5. package/dist/web/assets/{CollapseItem-DOoxtmtj.js → CollapseItem-S_sLioKf.js} +1 -1
  6. package/dist/web/assets/{CommandsDrawer-YCgZAeNx.js → CommandsDrawer-DFmX8thK.js} +1 -1
  7. package/dist/web/assets/{ConfigExportDrawer-BlAHQidK.js → ConfigExportDrawer-5ZritRKp.js} +1 -1
  8. package/dist/web/assets/{ConfigTemplates-C6qSF4Ht.js → ConfigTemplates-B1H2866J.js} +1 -1
  9. package/dist/web/assets/{ConfigTemplatesDrawer-lRT_6-jD.js → ConfigTemplatesDrawer-BBATnWnW.js} +1 -1
  10. package/dist/web/assets/{ConfigTemplatesPanel-DrS57Y8V.js → ConfigTemplatesPanel-CXmfzRym.js} +1 -1
  11. package/dist/web/assets/{FavoritesDrawer-CuOcHtqM.js → FavoritesDrawer-DPQOXg4g.js} +1 -1
  12. package/dist/web/assets/{GatewayConvertDrawer-b0pIvH02.js → GatewayConvertDrawer-Z_sILtn8.js} +1 -1
  13. package/dist/web/assets/{Home-DvfQcP4b.js → Home-C5mlI2U0.js} +1 -1
  14. package/dist/web/assets/{MarkdownEditor-BLS6HmBb.js → MarkdownEditor-Coo4TaB-.js} +1 -1
  15. package/dist/web/assets/{McpDrawer-BHt7zFf0.js → McpDrawer-DwvUzioj.js} +1 -1
  16. package/dist/web/assets/{McpFormDrawer-DpTMHc-e.js → McpFormDrawer-C-JHWmhC.js} +1 -1
  17. package/dist/web/assets/{PluginManager-CYAuy5dm.js → PluginManager-C6dq0YkN.js} +1 -1
  18. package/dist/web/assets/{PluginsDrawer-CoyprWNl.js → PluginsDrawer-DacBCEVQ.js} +1 -1
  19. package/dist/web/assets/{PluginsPanel-DsmiW9TU.css → PluginsPanel-B1PcHqhB.css} +1 -1
  20. package/dist/web/assets/PluginsPanel-CkH9dcj0.js +1 -0
  21. package/dist/web/assets/{ProjectList-pJo0xp0Q.js → ProjectList-Bo0n_J7T.js} +1 -1
  22. package/dist/web/assets/{PromptsDrawer-CM-irN84.js → PromptsDrawer-D5Gmm0HC.js} +1 -1
  23. package/dist/web/assets/{RecentSessionsDrawer-l5nO_5bS.js → RecentSessionsDrawer-BbP16V3T.js} +1 -1
  24. package/dist/web/assets/{SessionCard-BqTFOt05.js → SessionCard-zr0236fl.js} +1 -1
  25. package/dist/web/assets/{SessionList-Bs_YFKW5.js → SessionList-38c7aouf.js} +1 -1
  26. package/dist/web/assets/SettingsDrawer-oG-V_hS1.js +1 -0
  27. package/dist/web/assets/{SkillManager-DgLhL2Qv.js → SkillManager-Cqm9cc8C.js} +1 -1
  28. package/dist/web/assets/{SkillsDrawer-CT69YSEE.js → SkillsDrawer-wgOUCPGA.js} +1 -1
  29. package/dist/web/assets/{SkillsPanel-Dm8FkYD6.js → SkillsPanel-ryjZpaCC.js} +1 -1
  30. package/dist/web/assets/{Upload-BHTymsxe.js → Upload-CfC0lPJC.js} +1 -1
  31. package/dist/web/assets/{WorkspaceDrawer-DLXh_c7u.js → WorkspaceDrawer-2Qgm-8Pa.js} +1 -1
  32. package/dist/web/assets/{WorkspaceManager-E_IoRTlC.js → WorkspaceManager-Dp6vKCMD.js} +1 -1
  33. package/dist/web/assets/{WorkspacePanel-DLlTIU8Y.js → WorkspacePanel-CSer3CdC.js} +1 -1
  34. package/dist/web/assets/{index-DP0Ggf-8.js → index-D1b2vDrs.js} +2 -2
  35. package/dist/web/assets/{platforms-DNVEAtqx.js → platforms-Cq6XDXfy.js} +1 -1
  36. package/dist/web/assets/{useResponsiveDrawer-D9ti7g-U.js → useResponsiveDrawer-CmC5cPpB.js} +1 -1
  37. package/dist/web/index.html +2 -2
  38. package/package.json +1 -1
  39. package/src/config/model-metadata.json +30 -2
  40. package/src/platforms/drivers/dsh/channels-implementation.js +148 -23
  41. package/src/platforms/drivers/dsh/common.js +4 -1
  42. package/dist/web/assets/PluginsPanel-C3AzXlkH.js +0 -1
  43. package/dist/web/assets/SettingsDrawer-COszrj_Y.js +0 -1
@@ -1 +1 @@
1
- import{a as e,j as t,o as s,s as o,st as a}from"./vue-vendor-BqZbbXHA.js";import{n as r,t as n}from"./client-oU6RT-6I.js";import{D as i,Tt as l,Y as c,d as p,i as u,st as f}from"./icons-B-AzZoeE.js";import{a as m}from"./platforms-p9AiybLU.js";async function d(){return(await n.get("/ui-config")).data}async function y(e){return(await n.post("/ui-config",{config:e})).data}async function g(e,t){return(await n.put(`/ui-config/${e}`,{value:t})).data}async function b(e,t,s){return(await n.put(`/ui-config/${e}/${t}`,{value:s})).data}var h=Object.freeze({claude:l,code:f,codex:f,gemini:p,opencode:c,omp:i,terminal:u});function k(e){return h[String(e||"").trim().toLowerCase()]||u}var C=["claude","codex","opencode","omp"],j=[{key:"claude",label:"Claude Code",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,agents:!0,nativeConfig:!0}},{key:"codex",label:"Codex",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,agents:!0,nativeConfig:!0}},{key:"gemini",label:"Gemini",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,agents:!0,nativeConfig:!0}},{key:"opencode",label:"OpenCode",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,agents:!0,nativeConfig:!0}},{key:"omp",label:"OMP",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,plugins:!0,agents:!1,nativeConfig:!0}},{key:"dsh",label:"DSH",title:"DeepSeek Harness",command:"dsh",iconToken:"terminal",color:"#2563eb",defaultVisible:!0,logLayout:"basic",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,nativeLogs:!0,nativeConfig:!0,api:!0,mcp:!0,prompts:!0},resourceTypes:{skills:!0,commands:!1,agents:!0,plugins:!0,mcp:!0,prompts:!0},resourceActions:{skills:{create:!1,repositories:!0,import:!1,refresh:!0},plugins:{repositories:!1,market:!1,install:!0,uninstall:!0,import:!1,syncRepos:!1}}}];function v(e={}){if(!e||"object"!=typeof e||Array.isArray(e))return null;const t=String(e?.key||"").trim().toLowerCase(),s=function(e={}){return e?.capabilities&&"object"==typeof e.capabilities&&!Array.isArray(e.capabilities)?{...e.capabilities}:Object.fromEntries(Object.entries({proxy:"supportsProxy",projects:"supportsProjects",sessions:"supportsSessions",skills:"supportsSkills",commands:"supportsCommands",plugins:"supportsPlugins",agents:"supportsAgents"}).map(([t,s])=>[t,!1!==e?.[s]]))}(e),o=String(e?.iconToken||e?.icon||"terminal").trim();return{key:t,label:String(e?.label||e?.name||e?.title||t).trim(),title:String(e?.title||e?.label||e?.name||t).trim(),command:String(e?.command||t).trim(),iconToken:o,icon:k(o),color:String(e?.color||"#64748b").trim(),defaultVisible:!1!==e?.defaultVisible,defaultEnabled:void 0===e?.defaultEnabled?void 0:!1!==e.defaultEnabled,sortOrder:Number.isFinite(e?.sortOrder)?e.sortOrder:0,portKey:"string"==typeof e?.portKey?e.portKey:"",defaultPort:Number.isFinite(e?.defaultPort)?e.defaultPort:null,portLabel:"string"==typeof e?.portLabel?e.portLabel:"",apiPrefix:"string"==typeof e?.apiPrefix?e.apiPrefix:"",modelCatalogKey:"string"==typeof e?.modelCatalogKey?e.modelCatalogKey:t,logLayout:"basic"===e?.logLayout?"basic":j.find(e=>e.key===t)?.logLayout||"",enabled:!1!==e?.enabled,custom:!0===e?.custom,capabilities:s,resourceTypes:(r=e.resourceTypes,!r||"object"!=typeof r||Array.isArray(r)?{}:Object.fromEntries(Object.entries(r).filter(([,e])=>"boolean"==typeof e))),resourceActions:(a=e.resourceActions,!a||"object"!=typeof a||Array.isArray(a)?{}:Object.fromEntries(Object.entries(a).map(([e,t])=>[e,t&&"object"==typeof t&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).filter(([,e])=>"boolean"==typeof e)):{}]))),promptLabel:"string"==typeof e?.promptLabel?e.promptLabel.trim():"",supportsProxy:!0===s.proxy,supportsProjects:!0===s.projects,supportsSessions:!0===s.sessions,supportsSkills:!0===s.skills,supportsCommands:!0===s.commands,supportsPlugins:!0===s.plugins,supportsAgents:!0===s.agents};var a,r}function P(e=[]){const t=new Set;return Array.isArray(e)?e.map(v).filter(e=>!(!e||!e.key||t.has(e.key))&&(t.add(e.key),!0)):[]}function S(e,t=[]){const s=String(e||"").trim().toLowerCase();return P(t).find(e=>e.key===s)||v({key:s,capabilities:{}})}var w=a({theme:"light",panelVisibility:{showChannels:!0,showLogs:!0},channelBalance:{showRemaining:!1},channelLocks:{claude:!1,codex:!1,gemini:!1,opencode:!1,omp:!1},channelCollapse:{claude:[],codex:[],gemini:[],opencode:[],omp:[]},channelOrder:{claude:[],codex:[],gemini:[],opencode:[],omp:[]},enabledCliPlatforms:[...C]}),x=!1,A=!1,O=null;async function L({force:e=!1}={}){return e||!x&&!A?O||(O=(async()=>{try{const e=await d();e.success&&e.config&&(w.value=e.config,x=!0),A=!0}catch(e){A=!0}finally{O=null}return w.value})()):w.value}function T(){return x||L(),{uiConfig:w,loadUIConfig:L,saveConfig:async function(e){try{const t=await y(e);return!!t.success&&(w.value=t.config,!0)}catch(t){return!1}},updateConfig:async function(e,t){try{const s=await g(e,t);return!!s.success&&(w.value=s.config,!0)}catch(s){return!1}},updateNestedConfig:async function(e,t,s){try{const o=await b(e,t,s);return!!o.success&&(w.value=o.config,!0)}catch(o){return!1}}}}function E(e){if(Array.isArray(e))return P(e);const t=P(e);if(t.length>0)return t;const s=new Map(P(j).map(e=>[e.key,e]));return C.map(e=>s.get(e)).filter(Boolean)}function K(e){return String(e??"").trim().toLowerCase()}function $({catalog:e,enabledCliPlatforms:t}={}){const s=E(e),o=new Set(s.map(e=>e.key)),a=s.some(e=>void 0!==e.defaultEnabled),r=Array.isArray(t)?t:a?s.filter(e=>!1!==e.defaultEnabled).sort((e,t)=>(e.sortOrder||0)-(t.sortOrder||0)).map(e=>e.key):C,n=new Set,i=[];for(const l of r){const e=K(l);e&&!n.has(e)&&o.has(e)&&(n.add(e),i.push(e))}return i}function V(e){return E(e).map(e=>{const t=K(e.iconToken),s=Object.prototype.hasOwnProperty.call(h,t)?t:"terminal";return{key:e.key,label:e.label||e.title||e.key,title:e.title||e.label||e.key,iconToken:s,icon:k(s),color:e.color||"#64748b",capabilities:e.capabilities}})}function B(e){return K(e?.params?.platform||e?.meta?.channel)}var D=new Set(C),M=j.filter(e=>D.has(e.key));r(M);var N=s("platforms",{state:()=>({platforms:P(M),loaded:!1,loading:!1,error:null,loadPromise:null}),getters:{all:e=>e.platforms,enabled:e=>{const{uiConfig:t}=T(),s=$({catalog:e.platforms,enabledCliPlatforms:t.value.enabledCliPlatforms}),o=new Map(e.platforms.map(e=>[e.key,e]));return s.map(e=>o.get(e)).filter(Boolean)}},actions:{fetchPlatforms:async()=>m(),async load({force:e=!1}={}){return!e&&this.loaded?this.platforms:(this.loadPromise||(this.loading=!0,this.error=null,this.loadPromise=this.fetchPlatforms().then(e=>{const t=P(e);return t.length>0&&(this.platforms=t),r(this.platforms),this.loaded=!0,this.platforms}).catch(e=>(this.error=e,this.loaded=!0,this.platforms)).finally(()=>{this.loading=!1,this.loadPromise=null})),this.loadPromise)},get(e){const t=String(e||"").trim().toLowerCase();return this.platforms.find(e=>e.key===t)||null},hasCapability(e,t){const s=this.get(e);return!0===s?.capabilities?.[t]||!0===s?.resourceTypes?.[t]}}}),F=null;function H(s){const a=s||function(){const e=t();if(!e)return o();const s=e.appContext?.provides||{};for(const t of Object.getOwnPropertySymbols(s)){const e=s[t];if(e&&e._s&&"function"==typeof e.install)return e}return null}()||(F||=e());return N(a)}H.$id=N.$id;export{T as a,d as c,g as d,$ as i,y as l,V as n,C as o,B as r,S as s,H as t,b as u};
1
+ import{a as e,j as t,o as s,s as o,st as a}from"./vue-vendor-BqZbbXHA.js";import{n as r,t as n}from"./client-oU6RT-6I.js";import{D as i,Tt as l,Y as c,d as p,i as u,st as f}from"./icons-B-AzZoeE.js";import{a as m}from"./platforms-p9AiybLU.js";async function d(){return(await n.get("/ui-config")).data}async function y(e){return(await n.post("/ui-config",{config:e})).data}async function g(e,t){return(await n.put(`/ui-config/${e}`,{value:t})).data}async function b(e,t,s){return(await n.put(`/ui-config/${e}/${t}`,{value:s})).data}var h=Object.freeze({claude:l,code:f,codex:f,gemini:p,opencode:c,omp:i,terminal:u});function k(e){return h[String(e||"").trim().toLowerCase()]||u}var C=["claude","codex","opencode","omp"],j=[{key:"claude",label:"Claude Code",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,agents:!0,nativeConfig:!0}},{key:"codex",label:"Codex",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,agents:!0,nativeConfig:!0}},{key:"gemini",label:"Gemini",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,agents:!0,nativeConfig:!0}},{key:"opencode",label:"OpenCode",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,agents:!0,nativeConfig:!0}},{key:"omp",label:"OMP",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,resourceSync:!0,skills:!0,commands:!0,plugins:!0,agents:!1,nativeConfig:!0}},{key:"dsh",label:"DSH",title:"DeepSeek Harness",command:"dsh",iconToken:"terminal",color:"#2563eb",defaultVisible:!0,logLayout:"basic",capabilities:{channels:!0,projects:!0,sessions:!0,proxy:!0,statistics:!0,nativeLogs:!0,nativeConfig:!0,api:!0,mcp:!0,prompts:!0},resourceTypes:{skills:!0,commands:!1,agents:!0,plugins:!0,mcp:!0,prompts:!0},resourceActions:{skills:{create:!1,repositories:!0,import:!1,refresh:!0},plugins:{repositories:!1,market:!1,install:!0,uninstall:!0,import:!1,syncRepos:!1}}}];function v(e={}){if(!e||"object"!=typeof e||Array.isArray(e))return null;const t=String(e?.key||"").trim().toLowerCase(),s=function(e={}){return e?.capabilities&&"object"==typeof e.capabilities&&!Array.isArray(e.capabilities)?{...e.capabilities}:Object.fromEntries(Object.entries({proxy:"supportsProxy",projects:"supportsProjects",sessions:"supportsSessions",skills:"supportsSkills",commands:"supportsCommands",plugins:"supportsPlugins",agents:"supportsAgents"}).map(([t,s])=>[t,!1!==e?.[s]]))}(e),o=String(e?.iconToken||e?.icon||"terminal").trim();return{key:t,label:String(e?.label||e?.name||e?.title||t).trim(),title:String(e?.title||e?.label||e?.name||t).trim(),command:String(e?.command||t).trim(),iconToken:o,icon:k(o),color:String(e?.color||"#64748b").trim(),defaultVisible:!1!==e?.defaultVisible,defaultEnabled:void 0===e?.defaultEnabled?void 0:!1!==e.defaultEnabled,sortOrder:Number.isFinite(e?.sortOrder)?e.sortOrder:0,portKey:"string"==typeof e?.portKey?e.portKey:"",defaultPort:Number.isFinite(e?.defaultPort)?e.defaultPort:null,portLabel:"string"==typeof e?.portLabel?e.portLabel:"",apiPrefix:"string"==typeof e?.apiPrefix?e.apiPrefix:"",modelCatalogKey:"string"==typeof e?.modelCatalogKey?e.modelCatalogKey:t,logLayout:"basic"===e?.logLayout?"basic":j.find(e=>e.key===t)?.logLayout||"",enabled:!1!==e?.enabled,custom:!0===e?.custom,capabilities:s,resourceTypes:(r=e.resourceTypes,!r||"object"!=typeof r||Array.isArray(r)?{}:Object.fromEntries(Object.entries(r).filter(([,e])=>"boolean"==typeof e))),resourceActions:(a=e.resourceActions,!a||"object"!=typeof a||Array.isArray(a)?{}:Object.fromEntries(Object.entries(a).map(([e,t])=>[e,t&&"object"==typeof t&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).filter(([,e])=>"boolean"==typeof e)):{}]))),promptLabel:"string"==typeof e?.promptLabel?e.promptLabel.trim():"",supportsProxy:!0===s.proxy,supportsProjects:!0===s.projects,supportsSessions:!0===s.sessions,supportsSkills:!0===s.skills,supportsCommands:!0===s.commands,supportsPlugins:!0===s.plugins,supportsAgents:!0===s.agents};var a,r}function P(e=[]){const t=new Set;return Array.isArray(e)?e.map(v).filter(e=>!(!e||!e.key||t.has(e.key))&&(t.add(e.key),!0)):[]}function S(e,t=[]){const s=String(e||"").trim().toLowerCase();return P(t).find(e=>e.key===s)||v({key:s,capabilities:{}})}var w=a({theme:"light",panelVisibility:{showChannels:!0,showLogs:!0},channelBalance:{showRemaining:!1},channelLocks:{claude:!1,codex:!1,gemini:!1,opencode:!1,omp:!1},channelCollapse:{claude:[],codex:[],gemini:[],opencode:[],omp:[]},channelOrder:{claude:[],codex:[],gemini:[],opencode:[],omp:[]},enabledCliPlatforms:[...C]}),x=!1,A=!1,O=null;async function L({force:e=!1}={}){return e||!x&&!A?O||(O=(async()=>{try{const e=await d();e.success&&e.config&&(w.value=e.config,x=!0),A=!0}catch(e){A=!0}finally{O=null}return w.value})()):w.value}function T(){return x||L(),{uiConfig:w,loadUIConfig:L,saveConfig:async function(e){try{const t=await y(e);return!!t.success&&(w.value=t.config,!0)}catch(t){return!1}},updateConfig:async function(e,t){try{const s=await g(e,t);return!!s.success&&(w.value=s.config,!0)}catch(s){return!1}},updateNestedConfig:async function(e,t,s){try{const o=await b(e,t,s);return!!o.success&&(w.value=o.config,!0)}catch(o){return!1}}}}function E(e){if(Array.isArray(e))return P(e);const t=P(e);if(t.length>0)return t;const s=new Map(P(j).map(e=>[e.key,e]));return C.map(e=>s.get(e)).filter(Boolean)}function K(e){return String(e??"").trim().toLowerCase()}function $({catalog:e,enabledCliPlatforms:t}={}){const s=E(e),o=new Set(s.map(e=>e.key)),a=s.some(e=>void 0!==e.defaultEnabled),r=Array.isArray(t)?t:a?s.filter(e=>!1!==e.defaultEnabled).sort((e,t)=>(e.sortOrder||0)-(t.sortOrder||0)).map(e=>e.key):C,n=new Set,i=[];for(const l of r){const e=K(l);e&&!n.has(e)&&o.has(e)&&(n.add(e),i.push(e))}return i}function V(e,t){return t?E(e).filter(e=>!0===e.capabilities?.[t]||!0===e.resourceTypes?.[t]):[]}function B(e){return E(e).map(e=>{const t=K(e.iconToken),s=Object.prototype.hasOwnProperty.call(h,t)?t:"terminal";return{key:e.key,label:e.label||e.title||e.key,title:e.title||e.label||e.key,iconToken:s,icon:k(s),color:e.color||"#64748b",capabilities:e.capabilities}})}function D(e){return K(e?.params?.platform||e?.meta?.channel)}var M=new Set(C),N=j.filter(e=>M.has(e.key));r(N);var F=s("platforms",{state:()=>({platforms:P(N),loaded:!1,loading:!1,error:null,loadPromise:null}),getters:{all:e=>e.platforms,enabled:e=>{const{uiConfig:t}=T(),s=$({catalog:e.platforms,enabledCliPlatforms:t.value.enabledCliPlatforms}),o=new Map(e.platforms.map(e=>[e.key,e]));return s.map(e=>o.get(e)).filter(Boolean)}},actions:{fetchPlatforms:async()=>m(),async load({force:e=!1}={}){return!e&&this.loaded?this.platforms:(this.loadPromise||(this.loading=!0,this.error=null,this.loadPromise=this.fetchPlatforms().then(e=>{const t=P(e);return t.length>0&&(this.platforms=t),r(this.platforms),this.loaded=!0,this.platforms}).catch(e=>(this.error=e,this.loaded=!0,this.platforms)).finally(()=>{this.loading=!1,this.loadPromise=null})),this.loadPromise)},get(e){const t=String(e||"").trim().toLowerCase();return this.platforms.find(e=>e.key===t)||null},hasCapability(e,t){const s=this.get(e);return!0===s?.capabilities?.[t]||!0===s?.resourceTypes?.[t]}}}),H=null;function R(s){const a=s||function(){const e=t();if(!e)return o();const s=e.appContext?.provides||{};for(const t of Object.getOwnPropertySymbols(s)){const e=s[t];if(e&&e._s&&"function"==typeof e.install)return e}return null}()||(H||=e());return F(a)}R.$id=F.$id;export{$ as a,S as c,b as d,g as f,D as i,d as l,B as n,T as o,V as r,C as s,R as t,y as u};
@@ -1 +1 @@
1
- import{F as e,I as t,It as n,Jt as r,N as o,Nt as i,Qt as a,Rt as s,Tt as l,Ut as d,Wt as c,Zt as u,gn as h,gt as m,hn as v,ht as b,jt as f,kt as p,qt as g,vn as w,w as y,y as z,yn as $,zt as x}from"./_plugin-vue_export-helper-BeLZJZij.js";import{A as S,F as k,G as C,H as E,M as B,N as F,Q as M,V as R,Z as H,b as O,dt as W,f as A,l as T,st as D,tt as N,z as P}from"./vue-vendor-BqZbbXHA.js";import{n as U,t as j}from"./use-lock-html-scroll-DXIqmUW4.js";import{W as L}from"./index-DP0Ggf-8.js";var I=S({name:"NDrawerContent",inheritAttrs:!1,props:{blockScroll:Boolean,show:{type:Boolean,default:void 0},displayDirective:{type:String,required:!0},placement:{type:String,required:!0},contentClass:String,contentStyle:[Object,String],nativeScrollbar:{type:Boolean,required:!0},scrollbarProps:Object,trapFocus:{type:Boolean,default:!0},autoFocus:{type:Boolean,default:!0},showMask:{type:[Boolean,String],required:!0},maxWidth:Number,maxHeight:Number,minWidth:Number,minHeight:Number,resizable:Boolean,onClickoutside:Function,onAfterLeave:Function,onAfterEnter:Function,onEsc:Function},setup(e){const n=D(!!e.show),o=D(null),i=F(r);let a=0,s="",l=null;const u=D(!1),h=D(!1),v=O(()=>"top"===e.placement||"bottom"===e.placement),{mergedClsPrefixRef:b,mergedRtlRef:f}=m(e),p=t("Drawer",f,b),w=S,{doUpdateHeight:y,doUpdateWidth:z}=i;function $(t){var n,r;if(h.value)if(v.value){let r=(null===(n=o.value)||void 0===n?void 0:n.offsetHeight)||0;const i=a-t.clientY;r+="bottom"===e.placement?i:-i,r=(t=>{const{maxHeight:n}=e;if(n&&t>n)return n;const{minHeight:r}=e;return r&&t<r?r:t})(r),y(r),a=t.clientY}else{let n=(null===(r=o.value)||void 0===r?void 0:r.offsetWidth)||0;const i=a-t.clientX;n+="right"===e.placement?i:-i,n=(t=>{const{maxWidth:n}=e;if(n&&t>n)return n;const{minWidth:r}=e;return r&&t<r?r:t})(n),z(n),a=t.clientX}}function S(){h.value&&(a=0,h.value=!1,document.body.style.cursor=s,document.body.removeEventListener("mousemove",$),document.body.removeEventListener("mouseup",S),document.body.removeEventListener("mouseleave",w))}M(()=>{e.show&&(n.value=!0)}),H(()=>e.show,e=>{e||S()}),P(()=>{S()});const k=O(()=>{const{show:t}=e,n=[[A,t]];return e.showMask||n.push([x,e.onClickoutside,void 0,{capture:!0}]),n});return j(O(()=>e.blockScroll&&n.value)),C(g,o),C(d,null),C(c,null),{bodyRef:o,rtlEnabled:p,mergedClsPrefix:i.mergedClsPrefixRef,isMounted:i.isMountedRef,mergedTheme:i.mergedThemeRef,displayed:n,transitionName:O(()=>({right:"slide-in-from-right-transition",left:"slide-in-from-left-transition",top:"slide-in-from-top-transition",bottom:"slide-in-from-bottom-transition"}[e.placement])),handleAfterLeave:function(){var t;n.value=!1,null===(t=e.onAfterLeave)||void 0===t||t.call(e)},bodyDirectives:k,handleMousedownResizeTrigger:e=>{h.value=!0,a=v.value?e.clientY:e.clientX,s=document.body.style.cursor,document.body.style.cursor=v.value?"ns-resize":"ew-resize",document.body.addEventListener("mousemove",$),document.body.addEventListener("mouseleave",w),document.body.addEventListener("mouseup",S)},handleMouseenterResizeTrigger:()=>{null!==l&&(window.clearTimeout(l),l=null),h.value?u.value=!0:l=window.setTimeout(()=>{u.value=!0},300)},handleMouseleaveResizeTrigger:()=>{null!==l&&(window.clearTimeout(l),l=null),u.value=!1},isDragging:h,isHoverOnResizeTrigger:u}},render(){const{$slots:e,mergedClsPrefix:t}=this;return"show"===this.displayDirective||this.displayed||this.show?N(B("div",{role:"none"},B(i,{disabled:!this.showMask||!this.trapFocus,active:this.show,autoFocus:this.autoFocus,onEsc:this.onEsc},{default:()=>B(T,{name:this.transitionName,appear:this.isMounted,onAfterEnter:this.onAfterEnter,onAfterLeave:this.handleAfterLeave},{default:()=>N(B("div",k(this.$attrs,{role:"dialog",ref:"bodyRef","aria-modal":"true",class:[`${t}-drawer`,this.rtlEnabled&&`${t}-drawer--rtl`,`${t}-drawer--${this.placement}-placement`,this.isDragging&&`${t}-drawer--unselectable`,this.nativeScrollbar&&`${t}-drawer--native-scrollbar`]}),[this.resizable?B("div",{class:[`${t}-drawer__resize-trigger`,(this.isDragging||this.isHoverOnResizeTrigger)&&`${t}-drawer__resize-trigger--hover`],onMouseenter:this.handleMouseenterResizeTrigger,onMouseleave:this.handleMouseleaveResizeTrigger,onMousedown:this.handleMousedownResizeTrigger}):null,this.nativeScrollbar?B("div",{class:[`${t}-drawer-content-wrapper`,this.contentClass],style:this.contentStyle,role:"none"},e):B(z,Object.assign({},this.scrollbarProps,{contentStyle:this.contentStyle,contentClass:[`${t}-drawer-content-wrapper`,this.contentClass],theme:this.mergedTheme.peers.Scrollbar,themeOverrides:this.mergedTheme.peerOverrides.Scrollbar}),e)]),this.bodyDirectives)})})),[[A,"if"===this.displayDirective||this.displayed||this.show]]):null}}),{cubicBezierEaseIn:X,cubicBezierEaseOut:Y}=e;var{cubicBezierEaseIn:_,cubicBezierEaseOut:q}=e;var{cubicBezierEaseIn:V,cubicBezierEaseOut:Q}=e;var{cubicBezierEaseIn:Z,cubicBezierEaseOut:G}=e;var J=v([h("drawer","\n word-break: break-word;\n line-height: var(--n-line-height);\n position: absolute;\n pointer-events: all;\n box-shadow: var(--n-box-shadow);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n background-color: var(--n-color);\n color: var(--n-text-color);\n box-sizing: border-box;\n ",[function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-right"}={}){return[v(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${V}`}),v(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${Q}`}),v(`&.${n}-transition-enter-to`,{transform:"translateX(0)"}),v(`&.${n}-transition-enter-from`,{transform:"translateX(100%)"}),v(`&.${n}-transition-leave-from`,{transform:"translateX(0)"}),v(`&.${n}-transition-leave-to`,{transform:"translateX(100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-left"}={}){return[v(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${_}`}),v(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${q}`}),v(`&.${n}-transition-enter-to`,{transform:"translateX(0)"}),v(`&.${n}-transition-enter-from`,{transform:"translateX(-100%)"}),v(`&.${n}-transition-leave-from`,{transform:"translateX(0)"}),v(`&.${n}-transition-leave-to`,{transform:"translateX(-100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-top"}={}){return[v(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${Z}`}),v(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${G}`}),v(`&.${n}-transition-enter-to`,{transform:"translateY(0)"}),v(`&.${n}-transition-enter-from`,{transform:"translateY(-100%)"}),v(`&.${n}-transition-leave-from`,{transform:"translateY(0)"}),v(`&.${n}-transition-leave-to`,{transform:"translateY(-100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-bottom"}={}){return[v(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${X}`}),v(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${Y}`}),v(`&.${n}-transition-enter-to`,{transform:"translateY(0)"}),v(`&.${n}-transition-enter-from`,{transform:"translateY(100%)"}),v(`&.${n}-transition-leave-from`,{transform:"translateY(0)"}),v(`&.${n}-transition-leave-to`,{transform:"translateY(100%)"})]}(),$("unselectable","\n user-select: none; \n -webkit-user-select: none;\n "),$("native-scrollbar",[h("drawer-content-wrapper","\n overflow: auto;\n height: 100%;\n ")]),w("resize-trigger","\n position: absolute;\n background-color: #0000;\n transition: background-color .3s var(--n-bezier);\n ",[$("hover","\n background-color: var(--n-resize-trigger-color-hover);\n ")]),h("drawer-content-wrapper","\n box-sizing: border-box;\n "),h("drawer-content","\n height: 100%;\n display: flex;\n flex-direction: column;\n ",[$("native-scrollbar",[h("drawer-body-content-wrapper","\n height: 100%;\n overflow: auto;\n ")]),h("drawer-body","\n flex: 1 0 0;\n overflow: hidden;\n "),h("drawer-body-content-wrapper","\n box-sizing: border-box;\n padding: var(--n-body-padding);\n "),h("drawer-header","\n font-weight: var(--n-title-font-weight);\n line-height: 1;\n font-size: var(--n-title-font-size);\n color: var(--n-title-text-color);\n padding: var(--n-header-padding);\n transition: border .3s var(--n-bezier);\n border-bottom: 1px solid var(--n-divider-color);\n border-bottom: var(--n-header-border-bottom);\n display: flex;\n justify-content: space-between;\n align-items: center;\n ",[w("main","\n flex: 1;\n "),w("close","\n margin-left: 6px;\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n ")]),h("drawer-footer","\n display: flex;\n justify-content: flex-end;\n border-top: var(--n-footer-border-top);\n transition: border .3s var(--n-bezier);\n padding: var(--n-footer-padding);\n ")]),$("right-placement","\n top: 0;\n bottom: 0;\n right: 0;\n border-top-left-radius: var(--n-border-radius);\n border-bottom-left-radius: var(--n-border-radius);\n ",[w("resize-trigger","\n width: 3px;\n height: 100%;\n top: 0;\n left: 0;\n transform: translateX(-1.5px);\n cursor: ew-resize;\n ")]),$("left-placement","\n top: 0;\n bottom: 0;\n left: 0;\n border-top-right-radius: var(--n-border-radius);\n border-bottom-right-radius: var(--n-border-radius);\n ",[w("resize-trigger","\n width: 3px;\n height: 100%;\n top: 0;\n right: 0;\n transform: translateX(1.5px);\n cursor: ew-resize;\n ")]),$("top-placement","\n top: 0;\n left: 0;\n right: 0;\n border-bottom-left-radius: var(--n-border-radius);\n border-bottom-right-radius: var(--n-border-radius);\n ",[w("resize-trigger","\n width: 100%;\n height: 3px;\n bottom: 0;\n left: 0;\n transform: translateY(1.5px);\n cursor: ns-resize;\n ")]),$("bottom-placement","\n left: 0;\n bottom: 0;\n right: 0;\n border-top-left-radius: var(--n-border-radius);\n border-top-right-radius: var(--n-border-radius);\n ",[w("resize-trigger","\n width: 100%;\n height: 3px;\n top: 0;\n left: 0;\n transform: translateY(-1.5px);\n cursor: ns-resize;\n ")])]),v("body",[v(">",[h("drawer-container","\n position: fixed;\n ")])]),h("drawer-container","\n position: relative;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n ",[v("> *","\n pointer-events: all;\n ")]),h("drawer-mask","\n background-color: rgba(0, 0, 0, .3);\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ",[$("invisible","\n background-color: rgba(0, 0, 0, 0)\n "),y({enterDuration:"0.2s",leaveDuration:"0.2s",enterCubicBezier:"var(--n-bezier-in)",leaveCubicBezier:"var(--n-bezier-out)"})])]),K=S({name:"Drawer",inheritAttrs:!1,props:Object.assign(Object.assign({},o.props),{show:Boolean,width:[Number,String],height:[Number,String],placement:{type:String,default:"right"},maskClosable:{type:Boolean,default:!0},showMask:{type:[Boolean,String],default:!0},to:[String,Object],displayDirective:{type:String,default:"if"},nativeScrollbar:{type:Boolean,default:!0},zIndex:Number,onMaskClick:Function,scrollbarProps:Object,contentClass:String,contentStyle:[Object,String],trapFocus:{type:Boolean,default:!0},onEsc:Function,autoFocus:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0},blockScroll:{type:Boolean,default:!0},maxWidth:Number,maxHeight:Number,minWidth:Number,minHeight:Number,resizable:Boolean,defaultWidth:{type:[Number,String],default:251},defaultHeight:{type:[Number,String],default:251},onUpdateWidth:[Function,Array],onUpdateHeight:[Function,Array],"onUpdate:width":[Function,Array],"onUpdate:height":[Function,Array],"onUpdate:show":[Function,Array],onUpdateShow:[Function,Array],onAfterEnter:Function,onAfterLeave:Function,drawerStyle:[String,Object],drawerClass:String,target:null,onShow:Function,onHide:Function}),setup(e){const{mergedClsPrefixRef:t,namespaceRef:n,inlineThemeDisabled:i}=m(e),s=u(),d=o("Drawer","-drawer",J,L,e,t),c=D(e.defaultWidth),h=D(e.defaultHeight),v=a(W(e,"width"),c),g=a(W(e,"height"),h),w=O(()=>{const{placement:t}=e;return"top"===t||"bottom"===t?"":f(v.value)}),y=O(()=>{const{placement:t}=e;return"left"===t||"right"===t?"":f(g.value)}),z=O(()=>[{width:w.value,height:y.value},e.drawerStyle||""]);function $(t){const{onMaskClick:n,maskClosable:r}=e;r&&S(!1),n&&n(t)}const x=U();function S(t){const{onHide:n,onUpdateShow:r,"onUpdate:show":o}=e;r&&l(r,t),o&&l(o,t),n&&!t&&l(n,t)}C(r,{isMountedRef:s,mergedThemeRef:d,mergedClsPrefixRef:t,doUpdateShow:S,doUpdateHeight:t=>{const{onUpdateHeight:n,"onUpdate:width":r}=e;n&&l(n,t),r&&l(r,t),h.value=t},doUpdateWidth:t=>{const{onUpdateWidth:n,"onUpdate:width":r}=e;n&&l(n,t),r&&l(r,t),c.value=t}});const k=O(()=>{const{common:{cubicBezierEaseInOut:e,cubicBezierEaseIn:t,cubicBezierEaseOut:n},self:{color:r,textColor:o,boxShadow:i,lineHeight:a,headerPadding:s,footerPadding:l,borderRadius:c,bodyPadding:u,titleFontSize:h,titleTextColor:m,titleFontWeight:v,headerBorderBottom:b,footerBorderTop:f,closeIconColor:p,closeIconColorHover:g,closeIconColorPressed:w,closeColorHover:y,closeColorPressed:z,closeIconSize:$,closeSize:x,closeBorderRadius:S,resizableTriggerColorHover:k}}=d.value;return{"--n-line-height":a,"--n-color":r,"--n-border-radius":c,"--n-text-color":o,"--n-box-shadow":i,"--n-bezier":e,"--n-bezier-out":n,"--n-bezier-in":t,"--n-header-padding":s,"--n-body-padding":u,"--n-footer-padding":l,"--n-title-text-color":m,"--n-title-font-size":h,"--n-title-font-weight":v,"--n-header-border-bottom":b,"--n-footer-border-top":f,"--n-close-icon-color":p,"--n-close-icon-color-hover":g,"--n-close-icon-color-pressed":w,"--n-close-size":x,"--n-close-color-hover":y,"--n-close-color-pressed":z,"--n-close-icon-size":$,"--n-close-border-radius":S,"--n-resize-trigger-color-hover":k}}),E=i?b("drawer",void 0,k,e):void 0;return{mergedClsPrefix:t,namespace:n,mergedBodyStyle:z,handleOutsideClick:function(e){$(e)},handleMaskClick:$,handleEsc:function(t){var n;null===(n=e.onEsc)||void 0===n||n.call(e),e.show&&e.closeOnEsc&&p(t)&&(x.value||S(!1))},mergedTheme:d,cssVars:i?void 0:k,themeClass:null==E?void 0:E.themeClass,onRender:null==E?void 0:E.onRender,isMounted:s}},render(){const{mergedClsPrefix:e}=this;return B(n,{to:this.to,show:this.show},{default:()=>{var t;return null===(t=this.onRender)||void 0===t||t.call(this),N(B("div",{class:[`${e}-drawer-container`,this.namespace,this.themeClass],style:this.cssVars,role:"none"},this.showMask?B(T,{name:"fade-in-transition",appear:this.isMounted},{default:()=>this.show?B("div",{"aria-hidden":!0,class:[`${e}-drawer-mask`,"transparent"===this.showMask&&`${e}-drawer-mask--invisible`],onClick:this.handleMaskClick}):null}):null,B(I,Object.assign({},this.$attrs,{class:[this.drawerClass,this.$attrs.class],style:[this.mergedBodyStyle,this.$attrs.style],blockScroll:this.blockScroll,contentStyle:this.contentStyle,contentClass:this.contentClass,placement:this.placement,scrollbarProps:this.scrollbarProps,show:this.show,displayDirective:this.displayDirective,nativeScrollbar:this.nativeScrollbar,onAfterEnter:this.onAfterEnter,onAfterLeave:this.onAfterLeave,trapFocus:this.trapFocus,autoFocus:this.autoFocus,resizable:this.resizable,maxHeight:this.maxHeight,minHeight:this.minHeight,maxWidth:this.maxWidth,minWidth:this.minWidth,showMask:this.showMask,onEsc:this.handleEsc,onClickoutside:this.handleOutsideClick}),this.$slots)),[[s,{zIndex:this.zIndex,enabled:this.show}]])}})}});function ee(e=520,t=null){const n=D("undefined"!=typeof window?window.innerWidth:1200),r=()=>{n.value=window.innerWidth};R(()=>{window.addEventListener("resize",r)}),E(()=>{window.removeEventListener("resize",r)});const o=O(()=>n.value<640),i=O(()=>n.value>=640&&n.value<1024);return{drawerWidth:O(()=>{if(n.value<640)return"100%";if(n.value<768)return Math.min(.95*n.value,e);if(n.value<1024){const r=t||e;return Math.min(.85*n.value,r)}return e}),isMobile:o,isTablet:i,windowWidth:n}}export{K as n,ee as t};
1
+ import{F as e,I as t,It as n,Jt as r,N as o,Nt as i,Qt as a,Rt as s,Tt as l,Ut as d,Wt as c,Zt as u,gn as h,gt as m,hn as v,ht as b,jt as f,kt as p,qt as g,vn as w,w as y,y as z,yn as $,zt as x}from"./_plugin-vue_export-helper-BeLZJZij.js";import{A as S,F as k,G as C,H as E,M as B,N as F,Q as M,V as R,Z as H,b as O,dt as W,f as A,l as T,st as D,tt as N,z as P}from"./vue-vendor-BqZbbXHA.js";import{n as U,t as j}from"./use-lock-html-scroll-DXIqmUW4.js";import{W as L}from"./index-D1b2vDrs.js";var I=S({name:"NDrawerContent",inheritAttrs:!1,props:{blockScroll:Boolean,show:{type:Boolean,default:void 0},displayDirective:{type:String,required:!0},placement:{type:String,required:!0},contentClass:String,contentStyle:[Object,String],nativeScrollbar:{type:Boolean,required:!0},scrollbarProps:Object,trapFocus:{type:Boolean,default:!0},autoFocus:{type:Boolean,default:!0},showMask:{type:[Boolean,String],required:!0},maxWidth:Number,maxHeight:Number,minWidth:Number,minHeight:Number,resizable:Boolean,onClickoutside:Function,onAfterLeave:Function,onAfterEnter:Function,onEsc:Function},setup(e){const n=D(!!e.show),o=D(null),i=F(r);let a=0,s="",l=null;const u=D(!1),h=D(!1),v=O(()=>"top"===e.placement||"bottom"===e.placement),{mergedClsPrefixRef:b,mergedRtlRef:f}=m(e),p=t("Drawer",f,b),w=S,{doUpdateHeight:y,doUpdateWidth:z}=i;function $(t){var n,r;if(h.value)if(v.value){let r=(null===(n=o.value)||void 0===n?void 0:n.offsetHeight)||0;const i=a-t.clientY;r+="bottom"===e.placement?i:-i,r=(t=>{const{maxHeight:n}=e;if(n&&t>n)return n;const{minHeight:r}=e;return r&&t<r?r:t})(r),y(r),a=t.clientY}else{let n=(null===(r=o.value)||void 0===r?void 0:r.offsetWidth)||0;const i=a-t.clientX;n+="right"===e.placement?i:-i,n=(t=>{const{maxWidth:n}=e;if(n&&t>n)return n;const{minWidth:r}=e;return r&&t<r?r:t})(n),z(n),a=t.clientX}}function S(){h.value&&(a=0,h.value=!1,document.body.style.cursor=s,document.body.removeEventListener("mousemove",$),document.body.removeEventListener("mouseup",S),document.body.removeEventListener("mouseleave",w))}M(()=>{e.show&&(n.value=!0)}),H(()=>e.show,e=>{e||S()}),P(()=>{S()});const k=O(()=>{const{show:t}=e,n=[[A,t]];return e.showMask||n.push([x,e.onClickoutside,void 0,{capture:!0}]),n});return j(O(()=>e.blockScroll&&n.value)),C(g,o),C(d,null),C(c,null),{bodyRef:o,rtlEnabled:p,mergedClsPrefix:i.mergedClsPrefixRef,isMounted:i.isMountedRef,mergedTheme:i.mergedThemeRef,displayed:n,transitionName:O(()=>({right:"slide-in-from-right-transition",left:"slide-in-from-left-transition",top:"slide-in-from-top-transition",bottom:"slide-in-from-bottom-transition"}[e.placement])),handleAfterLeave:function(){var t;n.value=!1,null===(t=e.onAfterLeave)||void 0===t||t.call(e)},bodyDirectives:k,handleMousedownResizeTrigger:e=>{h.value=!0,a=v.value?e.clientY:e.clientX,s=document.body.style.cursor,document.body.style.cursor=v.value?"ns-resize":"ew-resize",document.body.addEventListener("mousemove",$),document.body.addEventListener("mouseleave",w),document.body.addEventListener("mouseup",S)},handleMouseenterResizeTrigger:()=>{null!==l&&(window.clearTimeout(l),l=null),h.value?u.value=!0:l=window.setTimeout(()=>{u.value=!0},300)},handleMouseleaveResizeTrigger:()=>{null!==l&&(window.clearTimeout(l),l=null),u.value=!1},isDragging:h,isHoverOnResizeTrigger:u}},render(){const{$slots:e,mergedClsPrefix:t}=this;return"show"===this.displayDirective||this.displayed||this.show?N(B("div",{role:"none"},B(i,{disabled:!this.showMask||!this.trapFocus,active:this.show,autoFocus:this.autoFocus,onEsc:this.onEsc},{default:()=>B(T,{name:this.transitionName,appear:this.isMounted,onAfterEnter:this.onAfterEnter,onAfterLeave:this.handleAfterLeave},{default:()=>N(B("div",k(this.$attrs,{role:"dialog",ref:"bodyRef","aria-modal":"true",class:[`${t}-drawer`,this.rtlEnabled&&`${t}-drawer--rtl`,`${t}-drawer--${this.placement}-placement`,this.isDragging&&`${t}-drawer--unselectable`,this.nativeScrollbar&&`${t}-drawer--native-scrollbar`]}),[this.resizable?B("div",{class:[`${t}-drawer__resize-trigger`,(this.isDragging||this.isHoverOnResizeTrigger)&&`${t}-drawer__resize-trigger--hover`],onMouseenter:this.handleMouseenterResizeTrigger,onMouseleave:this.handleMouseleaveResizeTrigger,onMousedown:this.handleMousedownResizeTrigger}):null,this.nativeScrollbar?B("div",{class:[`${t}-drawer-content-wrapper`,this.contentClass],style:this.contentStyle,role:"none"},e):B(z,Object.assign({},this.scrollbarProps,{contentStyle:this.contentStyle,contentClass:[`${t}-drawer-content-wrapper`,this.contentClass],theme:this.mergedTheme.peers.Scrollbar,themeOverrides:this.mergedTheme.peerOverrides.Scrollbar}),e)]),this.bodyDirectives)})})),[[A,"if"===this.displayDirective||this.displayed||this.show]]):null}}),{cubicBezierEaseIn:X,cubicBezierEaseOut:Y}=e;var{cubicBezierEaseIn:_,cubicBezierEaseOut:q}=e;var{cubicBezierEaseIn:V,cubicBezierEaseOut:Q}=e;var{cubicBezierEaseIn:Z,cubicBezierEaseOut:G}=e;var J=v([h("drawer","\n word-break: break-word;\n line-height: var(--n-line-height);\n position: absolute;\n pointer-events: all;\n box-shadow: var(--n-box-shadow);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n background-color: var(--n-color);\n color: var(--n-text-color);\n box-sizing: border-box;\n ",[function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-right"}={}){return[v(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${V}`}),v(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${Q}`}),v(`&.${n}-transition-enter-to`,{transform:"translateX(0)"}),v(`&.${n}-transition-enter-from`,{transform:"translateX(100%)"}),v(`&.${n}-transition-leave-from`,{transform:"translateX(0)"}),v(`&.${n}-transition-leave-to`,{transform:"translateX(100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-left"}={}){return[v(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${_}`}),v(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${q}`}),v(`&.${n}-transition-enter-to`,{transform:"translateX(0)"}),v(`&.${n}-transition-enter-from`,{transform:"translateX(-100%)"}),v(`&.${n}-transition-leave-from`,{transform:"translateX(0)"}),v(`&.${n}-transition-leave-to`,{transform:"translateX(-100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-top"}={}){return[v(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${Z}`}),v(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${G}`}),v(`&.${n}-transition-enter-to`,{transform:"translateY(0)"}),v(`&.${n}-transition-enter-from`,{transform:"translateY(-100%)"}),v(`&.${n}-transition-leave-from`,{transform:"translateY(0)"}),v(`&.${n}-transition-leave-to`,{transform:"translateY(-100%)"})]}(),function({duration:e="0.3s",leaveDuration:t="0.2s",name:n="slide-in-from-bottom"}={}){return[v(`&.${n}-transition-leave-active`,{transition:`transform ${t} ${X}`}),v(`&.${n}-transition-enter-active`,{transition:`transform ${e} ${Y}`}),v(`&.${n}-transition-enter-to`,{transform:"translateY(0)"}),v(`&.${n}-transition-enter-from`,{transform:"translateY(100%)"}),v(`&.${n}-transition-leave-from`,{transform:"translateY(0)"}),v(`&.${n}-transition-leave-to`,{transform:"translateY(100%)"})]}(),$("unselectable","\n user-select: none; \n -webkit-user-select: none;\n "),$("native-scrollbar",[h("drawer-content-wrapper","\n overflow: auto;\n height: 100%;\n ")]),w("resize-trigger","\n position: absolute;\n background-color: #0000;\n transition: background-color .3s var(--n-bezier);\n ",[$("hover","\n background-color: var(--n-resize-trigger-color-hover);\n ")]),h("drawer-content-wrapper","\n box-sizing: border-box;\n "),h("drawer-content","\n height: 100%;\n display: flex;\n flex-direction: column;\n ",[$("native-scrollbar",[h("drawer-body-content-wrapper","\n height: 100%;\n overflow: auto;\n ")]),h("drawer-body","\n flex: 1 0 0;\n overflow: hidden;\n "),h("drawer-body-content-wrapper","\n box-sizing: border-box;\n padding: var(--n-body-padding);\n "),h("drawer-header","\n font-weight: var(--n-title-font-weight);\n line-height: 1;\n font-size: var(--n-title-font-size);\n color: var(--n-title-text-color);\n padding: var(--n-header-padding);\n transition: border .3s var(--n-bezier);\n border-bottom: 1px solid var(--n-divider-color);\n border-bottom: var(--n-header-border-bottom);\n display: flex;\n justify-content: space-between;\n align-items: center;\n ",[w("main","\n flex: 1;\n "),w("close","\n margin-left: 6px;\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n ")]),h("drawer-footer","\n display: flex;\n justify-content: flex-end;\n border-top: var(--n-footer-border-top);\n transition: border .3s var(--n-bezier);\n padding: var(--n-footer-padding);\n ")]),$("right-placement","\n top: 0;\n bottom: 0;\n right: 0;\n border-top-left-radius: var(--n-border-radius);\n border-bottom-left-radius: var(--n-border-radius);\n ",[w("resize-trigger","\n width: 3px;\n height: 100%;\n top: 0;\n left: 0;\n transform: translateX(-1.5px);\n cursor: ew-resize;\n ")]),$("left-placement","\n top: 0;\n bottom: 0;\n left: 0;\n border-top-right-radius: var(--n-border-radius);\n border-bottom-right-radius: var(--n-border-radius);\n ",[w("resize-trigger","\n width: 3px;\n height: 100%;\n top: 0;\n right: 0;\n transform: translateX(1.5px);\n cursor: ew-resize;\n ")]),$("top-placement","\n top: 0;\n left: 0;\n right: 0;\n border-bottom-left-radius: var(--n-border-radius);\n border-bottom-right-radius: var(--n-border-radius);\n ",[w("resize-trigger","\n width: 100%;\n height: 3px;\n bottom: 0;\n left: 0;\n transform: translateY(1.5px);\n cursor: ns-resize;\n ")]),$("bottom-placement","\n left: 0;\n bottom: 0;\n right: 0;\n border-top-left-radius: var(--n-border-radius);\n border-top-right-radius: var(--n-border-radius);\n ",[w("resize-trigger","\n width: 100%;\n height: 3px;\n top: 0;\n left: 0;\n transform: translateY(-1.5px);\n cursor: ns-resize;\n ")])]),v("body",[v(">",[h("drawer-container","\n position: fixed;\n ")])]),h("drawer-container","\n position: relative;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n ",[v("> *","\n pointer-events: all;\n ")]),h("drawer-mask","\n background-color: rgba(0, 0, 0, .3);\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n ",[$("invisible","\n background-color: rgba(0, 0, 0, 0)\n "),y({enterDuration:"0.2s",leaveDuration:"0.2s",enterCubicBezier:"var(--n-bezier-in)",leaveCubicBezier:"var(--n-bezier-out)"})])]),K=S({name:"Drawer",inheritAttrs:!1,props:Object.assign(Object.assign({},o.props),{show:Boolean,width:[Number,String],height:[Number,String],placement:{type:String,default:"right"},maskClosable:{type:Boolean,default:!0},showMask:{type:[Boolean,String],default:!0},to:[String,Object],displayDirective:{type:String,default:"if"},nativeScrollbar:{type:Boolean,default:!0},zIndex:Number,onMaskClick:Function,scrollbarProps:Object,contentClass:String,contentStyle:[Object,String],trapFocus:{type:Boolean,default:!0},onEsc:Function,autoFocus:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0},blockScroll:{type:Boolean,default:!0},maxWidth:Number,maxHeight:Number,minWidth:Number,minHeight:Number,resizable:Boolean,defaultWidth:{type:[Number,String],default:251},defaultHeight:{type:[Number,String],default:251},onUpdateWidth:[Function,Array],onUpdateHeight:[Function,Array],"onUpdate:width":[Function,Array],"onUpdate:height":[Function,Array],"onUpdate:show":[Function,Array],onUpdateShow:[Function,Array],onAfterEnter:Function,onAfterLeave:Function,drawerStyle:[String,Object],drawerClass:String,target:null,onShow:Function,onHide:Function}),setup(e){const{mergedClsPrefixRef:t,namespaceRef:n,inlineThemeDisabled:i}=m(e),s=u(),d=o("Drawer","-drawer",J,L,e,t),c=D(e.defaultWidth),h=D(e.defaultHeight),v=a(W(e,"width"),c),g=a(W(e,"height"),h),w=O(()=>{const{placement:t}=e;return"top"===t||"bottom"===t?"":f(v.value)}),y=O(()=>{const{placement:t}=e;return"left"===t||"right"===t?"":f(g.value)}),z=O(()=>[{width:w.value,height:y.value},e.drawerStyle||""]);function $(t){const{onMaskClick:n,maskClosable:r}=e;r&&S(!1),n&&n(t)}const x=U();function S(t){const{onHide:n,onUpdateShow:r,"onUpdate:show":o}=e;r&&l(r,t),o&&l(o,t),n&&!t&&l(n,t)}C(r,{isMountedRef:s,mergedThemeRef:d,mergedClsPrefixRef:t,doUpdateShow:S,doUpdateHeight:t=>{const{onUpdateHeight:n,"onUpdate:width":r}=e;n&&l(n,t),r&&l(r,t),h.value=t},doUpdateWidth:t=>{const{onUpdateWidth:n,"onUpdate:width":r}=e;n&&l(n,t),r&&l(r,t),c.value=t}});const k=O(()=>{const{common:{cubicBezierEaseInOut:e,cubicBezierEaseIn:t,cubicBezierEaseOut:n},self:{color:r,textColor:o,boxShadow:i,lineHeight:a,headerPadding:s,footerPadding:l,borderRadius:c,bodyPadding:u,titleFontSize:h,titleTextColor:m,titleFontWeight:v,headerBorderBottom:b,footerBorderTop:f,closeIconColor:p,closeIconColorHover:g,closeIconColorPressed:w,closeColorHover:y,closeColorPressed:z,closeIconSize:$,closeSize:x,closeBorderRadius:S,resizableTriggerColorHover:k}}=d.value;return{"--n-line-height":a,"--n-color":r,"--n-border-radius":c,"--n-text-color":o,"--n-box-shadow":i,"--n-bezier":e,"--n-bezier-out":n,"--n-bezier-in":t,"--n-header-padding":s,"--n-body-padding":u,"--n-footer-padding":l,"--n-title-text-color":m,"--n-title-font-size":h,"--n-title-font-weight":v,"--n-header-border-bottom":b,"--n-footer-border-top":f,"--n-close-icon-color":p,"--n-close-icon-color-hover":g,"--n-close-icon-color-pressed":w,"--n-close-size":x,"--n-close-color-hover":y,"--n-close-color-pressed":z,"--n-close-icon-size":$,"--n-close-border-radius":S,"--n-resize-trigger-color-hover":k}}),E=i?b("drawer",void 0,k,e):void 0;return{mergedClsPrefix:t,namespace:n,mergedBodyStyle:z,handleOutsideClick:function(e){$(e)},handleMaskClick:$,handleEsc:function(t){var n;null===(n=e.onEsc)||void 0===n||n.call(e),e.show&&e.closeOnEsc&&p(t)&&(x.value||S(!1))},mergedTheme:d,cssVars:i?void 0:k,themeClass:null==E?void 0:E.themeClass,onRender:null==E?void 0:E.onRender,isMounted:s}},render(){const{mergedClsPrefix:e}=this;return B(n,{to:this.to,show:this.show},{default:()=>{var t;return null===(t=this.onRender)||void 0===t||t.call(this),N(B("div",{class:[`${e}-drawer-container`,this.namespace,this.themeClass],style:this.cssVars,role:"none"},this.showMask?B(T,{name:"fade-in-transition",appear:this.isMounted},{default:()=>this.show?B("div",{"aria-hidden":!0,class:[`${e}-drawer-mask`,"transparent"===this.showMask&&`${e}-drawer-mask--invisible`],onClick:this.handleMaskClick}):null}):null,B(I,Object.assign({},this.$attrs,{class:[this.drawerClass,this.$attrs.class],style:[this.mergedBodyStyle,this.$attrs.style],blockScroll:this.blockScroll,contentStyle:this.contentStyle,contentClass:this.contentClass,placement:this.placement,scrollbarProps:this.scrollbarProps,show:this.show,displayDirective:this.displayDirective,nativeScrollbar:this.nativeScrollbar,onAfterEnter:this.onAfterEnter,onAfterLeave:this.onAfterLeave,trapFocus:this.trapFocus,autoFocus:this.autoFocus,resizable:this.resizable,maxHeight:this.maxHeight,minHeight:this.minHeight,maxWidth:this.maxWidth,minWidth:this.minWidth,showMask:this.showMask,onEsc:this.handleEsc,onClickoutside:this.handleOutsideClick}),this.$slots)),[[s,{zIndex:this.zIndex,enabled:this.show}]])}})}});function ee(e=520,t=null){const n=D("undefined"!=typeof window?window.innerWidth:1200),r=()=>{n.value=window.innerWidth};R(()=>{window.addEventListener("resize",r)}),E(()=>{window.removeEventListener("resize",r)});const o=O(()=>n.value<640),i=O(()=>n.value>=640&&n.value<1024);return{drawerWidth:O(()=>{if(n.value<640)return"100%";if(n.value<768)return Math.min(.95*n.value,e);if(n.value<1024){const r=t||e;return Math.min(.85*n.value,r)}return e}),isMobile:o,isTablet:i,windowWidth:n}}export{K as n,ee as t};
@@ -5,14 +5,14 @@
5
5
  <link rel="icon" href="/favicon.ico">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <title>coding-tool-x · AI 编程工作台</title>
8
- <script type="module" crossorigin src="/assets/index-DP0Ggf-8.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-D1b2vDrs.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/vue-vendor-BqZbbXHA.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-BeLZJZij.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/vendors-D0c_0KLP.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/client-oU6RT-6I.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/icons-B-AzZoeE.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/platforms-p9AiybLU.js">
15
- <link rel="modulepreload" crossorigin href="/assets/platforms-DNVEAtqx.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/platforms-Cq6XDXfy.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/use-message-DBsCm7FJ.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/use-lock-html-scroll-DXIqmUW4.js">
18
18
  <link rel="modulepreload" crossorigin href="/assets/light-C2X7hegj.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coding-tool-x",
3
- "version": "3.9.6-261024",
3
+ "version": "3.9.6-261027",
4
4
  "description": "Vibe Coding 增强工作助手 - 智能会话管理、动态渠道切换、全局搜索、实时监控",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "source": "models.dev",
3
3
  "sourceUrl": "https://models.dev/api.json",
4
- "lastUpdated": "2026-10-24",
4
+ "lastUpdated": "2026-10-27",
5
5
  "defaultModels": {
6
6
  "claude": [
7
7
  "claude-opus-4-7",
@@ -61,7 +61,8 @@
61
61
  "gpt-6-sol",
62
62
  "gpt-daybreak-blue-latest",
63
63
  "gpt-daybreak-red-latest",
64
- "gpt-6.1-sol"
64
+ "gpt-6.1-sol",
65
+ "gpt-6.1-terra"
65
66
  ],
66
67
  "gemini": [
67
68
  "gemini-3.1-pro-preview",
@@ -3332,6 +3333,33 @@
3332
3333
  "omp"
3333
3334
  ]
3334
3335
  },
3336
+ "gpt-6.1-terra": {
3337
+ "id": "gpt-6.1-terra",
3338
+ "input": [
3339
+ "text",
3340
+ "image"
3341
+ ],
3342
+ "limit": {
3343
+ "context": 1050000,
3344
+ "output": 128000
3345
+ },
3346
+ "name": "GPT-6.1 Terra",
3347
+ "pricing": {
3348
+ "cacheCreation": 1.25,
3349
+ "cacheRead": 0.05,
3350
+ "input": 1,
3351
+ "output": 5
3352
+ },
3353
+ "provider": "openai",
3354
+ "reasoning": true,
3355
+ "sourceId": "openai/gpt-6.1-terra",
3356
+ "supportsTools": true,
3357
+ "toolTypes": [
3358
+ "codex",
3359
+ "opencode",
3360
+ "omp"
3361
+ ]
3362
+ },
3335
3363
  "gpt-daybreak-blue-latest": {
3336
3364
  "id": "gpt-daybreak-blue-latest",
3337
3365
  "input": [
@@ -3,6 +3,7 @@
3
3
  const fs = require('fs');
4
4
  const path = require('path');
5
5
  const { getPlatformStatePath: resolveStatePath } = require('../../../config/paths');
6
+ const { MODEL_METADATA, MODEL_ALIASES } = require('../../../config/model-metadata');
6
7
  const BaseChannelService = require('../../../shared/base-channel-service');
7
8
  const { writeYamlFile } = require('../../../utils/native-config-patcher');
8
9
  const {
@@ -12,6 +13,7 @@ const {
12
13
  DSH_YAML_SOURCE_TAGS,
13
14
  isObject
14
15
  } = require('./common');
16
+ const { upsertSyncedChannels } = require('../../../server/services/channel-sync-utils');
15
17
 
16
18
  const PROVIDER_KEY_PATTERN = /^[a-z0-9][a-z0-9_-]{0,63}$/;
17
19
  const API_KEY_ENV_PATTERN = /^[A-Z][A-Z0-9_]{0,127}$/;
@@ -21,6 +23,15 @@ const SUPPORTED_PROVIDER_APIS = new Set([
21
23
  'anthropic-messages'
22
24
  ]);
23
25
  const REDACTED_API_KEY = '[REDACTED]';
26
+ const MODEL_METADATA_BY_ID = new Map();
27
+ for (const [id, metadata] of Object.entries(MODEL_METADATA)) {
28
+ MODEL_METADATA_BY_ID.set(id.toLowerCase(), metadata);
29
+ if (metadata.sourceId) MODEL_METADATA_BY_ID.set(String(metadata.sourceId).toLowerCase(), metadata);
30
+ }
31
+ for (const [alias, canonical] of Object.entries(MODEL_ALIASES)) {
32
+ const metadata = MODEL_METADATA_BY_ID.get(String(canonical).toLowerCase());
33
+ if (metadata) MODEL_METADATA_BY_ID.set(alias.toLowerCase(), metadata);
34
+ }
24
35
  const getStatePath = typeof resolveStatePath === 'function'
25
36
  ? resolveStatePath
26
37
  : () => undefined;
@@ -63,7 +74,59 @@ function normalizeModels(models, fallbackModel) {
63
74
  if (seen.has(key)) return false;
64
75
  seen.add(key);
65
76
  return true;
66
- });
77
+ }).map(enrichDshModelMetadata);
78
+ }
79
+
80
+ function normalizeDshCost(value) {
81
+ if (!isObject(value)) return {};
82
+ const cost = {};
83
+ for (const key of ['input', 'output', 'cacheRead', 'cacheWrite']) {
84
+ if (typeof value[key] === 'number' && Number.isFinite(value[key]) && value[key] >= 0) {
85
+ cost[key] = value[key];
86
+ }
87
+ }
88
+ if (cost.cacheWrite === undefined && typeof value.cacheCreation === 'number') {
89
+ cost.cacheWrite = value.cacheCreation;
90
+ }
91
+ return cost;
92
+ }
93
+
94
+ function enrichDshModelMetadata(model) {
95
+ const id = String(model?.id || model?.name || '').trim();
96
+ if (!id) return model;
97
+ const metadata = MODEL_METADATA_BY_ID.get(id.toLowerCase());
98
+ if (!metadata) return { ...model, id };
99
+
100
+ const limit = isObject(metadata.limit) ? metadata.limit : {};
101
+ const pricing = isObject(metadata.pricing) ? metadata.pricing : {};
102
+ const catalogCost = typeof pricing.input === 'number' && typeof pricing.output === 'number'
103
+ ? {
104
+ input: pricing.input,
105
+ output: pricing.output,
106
+ cacheRead: typeof pricing.cacheRead === 'number' ? pricing.cacheRead : 0,
107
+ cacheWrite: typeof pricing.cacheCreation === 'number' ? pricing.cacheCreation : 0
108
+ }
109
+ : {};
110
+ const catalog = {
111
+ ...(typeof metadata.name === 'string' ? { name: metadata.name } : {}),
112
+ ...(typeof metadata.reasoning === 'boolean' ? { reasoning: metadata.reasoning } : {}),
113
+ ...(Array.isArray(metadata.input) ? { input: [...metadata.input] } : {}),
114
+ ...(typeof limit.context === 'number' ? { contextWindow: limit.context } : {}),
115
+ ...(typeof limit.output === 'number' ? { maxTokens: limit.output } : {}),
116
+ ...(Object.keys(catalogCost).length > 0 ? { cost: catalogCost } : {})
117
+ };
118
+ const explicitCost = normalizeDshCost(model.cost || model.pricing);
119
+ const enriched = { ...catalog, ...model, id };
120
+ if (Object.keys(catalogCost).length > 0 || Object.keys(explicitCost).length > 0) {
121
+ enriched.cost = { ...catalogCost, ...explicitCost };
122
+ }
123
+ if (model.contextWindow === undefined && typeof model.limit?.context === 'number') {
124
+ enriched.contextWindow = model.limit.context;
125
+ }
126
+ if (model.maxTokens === undefined && typeof model.limit?.output === 'number') {
127
+ enriched.maxTokens = model.limit.output;
128
+ }
129
+ return enriched;
67
130
  }
68
131
 
69
132
  function readActiveMarker() {
@@ -341,31 +404,89 @@ class DshChannelService extends BaseChannelService {
341
404
  }
342
405
 
343
406
  syncCurrentChannel() {
344
- const current = this.getCurrentChannel();
345
- if (current.channel) return { added: 0, updated: 0, skipped: 1, current: current.channel };
346
- if (!current.providerKey) return { added: 0, updated: 0, skipped: 0, warnings: ['DSH 当前配置没有 agent-default-model.provider'] };
347
-
348
407
  const settings = this._nativeSettings();
349
- const provider = settings['llm-pi-ai']?.providers?.[current.providerKey];
350
- if (!isObject(provider) || !provider.baseURL) {
351
- return { added: 0, updated: 0, skipped: 0, warnings: [`未找到可导入的 DSH provider: ${current.providerKey}`] };
408
+ const selected = isObject(settings['agent-default-model'])
409
+ ? settings['agent-default-model']
410
+ : {};
411
+ const selectedProviderKey = String(selected.provider || '').trim();
412
+ const llm = isObject(settings['llm-pi-ai']) ? settings['llm-pi-ai'] : {};
413
+ const providers = isObject(llm.providers) ? llm.providers : {};
414
+ const configuredProviders = Object.entries(providers)
415
+ .filter(([providerKey, provider]) => providerKey !== 'ctx-dsh-proxy' && isObject(provider));
416
+ if (configuredProviders.length === 0) {
417
+ return { added: 0, updated: 0, skipped: 0, channels: [], current: null, warnings: ['DSH 设置中没有可同步的 llm-pi-ai.providers'] };
352
418
  }
419
+
420
+ const channels = this.loadChannels().channels;
421
+ const activeMarker = readActiveMarker();
422
+ const activeChannel = activeMarker?.activeChannelId
423
+ ? channels.find(channel => channel.id === activeMarker.activeChannelId)
424
+ : null;
425
+ const activeProviderKey = activeChannel?.providerKey || selectedProviderKey;
353
426
  const credentials = readYamlFile(this.nativePaths.credentials, {});
354
- const apiKeyEnv = String(provider.apiKeyEnv || '').trim();
355
- const apiKey = apiKeyEnv && isObject(credentials.refs) ? String(credentials.refs[apiKeyEnv] || '') : '';
356
- const channel = this.createChannel({
357
- name: provider.displayName || current.providerKey,
358
- providerKey: current.providerKey,
359
- providerApi: provider.api || 'openai-completions',
360
- baseUrl: provider.baseURL,
361
- model: current.model || provider.models?.[0]?.id || provider.models?.[0] || 'default',
362
- models: provider.models,
363
- apiKeyEnv: apiKeyEnv || undefined,
364
- apiKey,
365
- authMode: apiKey ? 'api_key' : 'none',
366
- enabled: true
427
+ const credentialRefs = isObject(credentials.refs) ? credentials.refs : {};
428
+ const candidates = [];
429
+
430
+ for (const [providerKey, provider] of configuredProviders) {
431
+ if (!PROVIDER_KEY_PATTERN.test(providerKey)) {
432
+ candidates.push({ skip: true, warning: `跳过无效的 DSH provider key: ${providerKey}` });
433
+ continue;
434
+ }
435
+ const baseUrl = String(provider.baseURL || '').trim();
436
+ if (!baseUrl) {
437
+ candidates.push({
438
+ skip: true,
439
+ warning: `DSH provider ${providerKey} 缺少 baseURL,已跳过`
440
+ });
441
+ continue;
442
+ }
443
+ try {
444
+ const parsed = new URL(baseUrl);
445
+ if (!['http:', 'https:'].includes(parsed.protocol)) throw new Error('unsupported protocol');
446
+ } catch (_) {
447
+ candidates.push({
448
+ skip: true,
449
+ warning: `DSH provider ${providerKey} 的 baseURL 无效,已跳过`
450
+ });
451
+ continue;
452
+ }
453
+
454
+ const apiKeyEnv = String(provider.apiKeyEnv || '').trim();
455
+ const apiKey = apiKeyEnv ? String(credentialRefs[apiKeyEnv] || '') : '';
456
+ const existing = channels.find(channel => channel.providerKey === providerKey);
457
+ const selectedModel = providerKey === selectedProviderKey ? String(selected.model || '').trim() : '';
458
+ const models = normalizeModels(provider.models, selectedModel || existing?.model || 'default');
459
+ const model = selectedModel || existing?.model || models[0]?.id || 'default';
460
+ if (!models.some(item => item.id.toLowerCase() === model.toLowerCase())) models.unshift({ id: model });
461
+ const authMode = apiKey
462
+ ? 'api_key'
463
+ : (existing?.authMode === 'api_key' && existing.apiKey ? 'api_key' : 'none');
464
+ candidates.push({
465
+ name: provider.displayName || providerKey,
466
+ providerKey,
467
+ providerApi: provider.api || 'openai-completions',
468
+ baseUrl,
469
+ model,
470
+ models,
471
+ apiKeyEnv: apiKeyEnv || undefined,
472
+ ...(apiKey ? { apiKey } : {}),
473
+ authMode,
474
+ enabled: providerKey === activeProviderKey
475
+ });
476
+ }
477
+
478
+ const result = upsertSyncedChannels({
479
+ toolType: 'dsh',
480
+ loadChannels: () => this.loadChannels(),
481
+ saveChannels: data => this.saveChannels(data),
482
+ applyDefaults: channel => this._applyDefaults(channel),
483
+ candidates,
484
+ matchers: [
485
+ (channel, candidate) => channel.providerKey === candidate.providerKey
486
+ ]
367
487
  });
368
- return { added: 1, updated: 0, skipped: 0, current: channel };
488
+ const current = result.channels.find(channel => channel.providerKey === activeProviderKey) || null;
489
+ return { ...result, current };
369
490
  }
370
491
 
371
492
  setProxyConfig(port, { activeChannelId } = {}) {
@@ -453,7 +574,11 @@ function getCurrentChannel() {
453
574
 
454
575
  function syncCurrentDshChannel() {
455
576
  const result = getServiceInstance().syncCurrentChannel();
456
- return { ...result, current: toPublicChannel(result.current) };
577
+ return {
578
+ ...result,
579
+ channels: Array.isArray(result.channels) ? result.channels.map(toPublicChannel) : [],
580
+ current: toPublicChannel(result.current)
581
+ };
457
582
  }
458
583
 
459
584
  module.exports = {
@@ -283,7 +283,10 @@ function listProfilePlugins(context = {}, profileName) {
283
283
  const manifest = profile.manifest || {};
284
284
  const profileConfig = isObject(manifest.dsh?.profile) ? manifest.dsh.profile : {};
285
285
  const bundleNames = Array.isArray(profileConfig.bundles) ? profileConfig.bundles : [];
286
- const dependencyNames = Object.keys(isObject(manifest.dependencies) ? manifest.dependencies : {});
286
+ const dependencyNames = Object.keys({
287
+ ...(isObject(manifest.dependencies) ? manifest.dependencies : {}),
288
+ ...(isObject(manifest.devDependencies) ? manifest.devDependencies : {})
289
+ });
287
290
  const names = [...new Set([...bundleNames, ...dependencyNames])];
288
291
  const describePlugin = name => {
289
292
  const packageDir = resolvePackageDir(profile.profileDir, name, paths);
@@ -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 y,mt as g,p as h,r as k,st as b,w,x as P}from"./vue-vendor-BqZbbXHA.js";import{a as _,t as j}from"./client-oU6RT-6I.js";import{r as U,s as $,t as C}from"./platforms-DNVEAtqx.js";import{$ as I,At as T,F as z,Nt as L,O as S,R as x,S as O,U as H,Y as B,a as R,g as A,ut as G}from"./icons-B-AzZoeE.js";import{t as M}from"./use-message-DBsCm7FJ.js";import{l as D}from"./light-C2X7hegj.js";import{c as K,n as N,s as q,t as E}from"./AssetPathField-BGuw5ZR7.js";import{n as V,t as F}from"./useResponsiveDrawer-D9ti7g-U.js";import{t as Q}from"./DrawerContent-ChXgZ1Xm.js";import{$ as W,Et as Y,M as Z,T as J,ct as X,ft as ee,j as ae,k as le,st as te,ut as se,w as ne}from"./index-DP0Ggf-8.js";import{t as ie}from"./markdown-u082bbtj.js";import{r as re}from"./dsh-agent-presets-DjJRVMT6.js";import{n as oe,t as ue}from"./skill-repo-input-B_fkGlUK.js";var ce=new Map;function pe(e,a,l={}){return ne(e,a,l.scope||"",l.cwd||"")}function de(e=""){for(const a of ce.keys())e&&!a.includes(`:${e}:`)||ce.delete(a)}function ve(e={},a={}){return{...e,...a.cwd?{cwd:a.cwd}:{},...a.scope?{scope:a.scope}:{}}}async function me(e="claude",a={}){const l=pe("plugins",e,a);if(ce.has(l))return ce.get(l);const t=J(l,t=>j.get("/plugins",{params:ve({platform:e},a),signal:t}).then(e=>e.data).catch(e=>{throw ce.delete(l),e}),"plugins",`plugins:${e}`);return ce.set(l,t),t}async function fe(e="claude",a=!1,l={}){const t=pe("plugins-market",e,l);if(ce.has(t))return ce.get(t);const s=J(t,a=>j.get("/plugins/market",{params:ve({platform:e},l),signal:a}).then(e=>e.data).catch(e=>{throw ce.delete(t),e}),"plugins-market",`plugins-market:${e}`);return ce.set(t,s),s}async function ye(e="claude",a={}){return de(e),(await j.post("/plugins/refresh",ve({platform:e},a))).data}async function ge(e,a={}){return(await j.get(`/plugins/refresh/${encodeURIComponent(e)}`,{params:ve({platform:a.platform||"claude"},a)})).data}function he(e=""){de(e)}async function ke(e,a,l="claude",t="",s={},n={}){const i=ve({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 j.post("/plugins/install",i)).data}async function be(e,a="claude",l={}){return(await j.post("/plugins/repos",ve({...e,platform:a},l))).data}async function we(e,a={},l="claude"){return(await j.put("/plugins/repos/auth",{id:e.id||"",owner:e.owner||"",name:e.name||"",token:a.token||"",clearToken:!!a.clearToken,platform:l})).data}var Pe={class:"asset-card-main"},_e={class:"asset-card-top"},je={class:"asset-card-title-stack"},Ue={class:"asset-card-title-row"},$e={class:"asset-name"},Ce={class:"asset-tags"},Ie={key:0,class:"asset-description"},Te={class:"asset-meta"},ze={class:"asset-meta-item mono"},Le=["href"],Se={__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",Pe,[P("div",_e,[P("div",je,[P("div",Ue,[P("span",{class:f(["asset-status-dot",{active:e.plugin.installed}])},null,2),P("span",$e,p(e.plugin.name),1)]),P("div",Ce,[e.plugin.installed?(u(),r(g(se),{key:0,type:"success",size:"tiny",bordered:!1},{default:v(()=>[...i[5]||(i[5]=[s("已安装",-1)])]),_:1})):t("",!0),e.plugin.builtIn?(u(),r(g(se),{key:1,type:"info",size:"tiny",bordered:!1},{default:v(()=>[...i[6]||(i[6]=[s("内置",-1)])]),_:1})):t("",!0),e.readonly?(u(),r(g(se),{key:2,type:"default",size:"tiny",bordered:!1},{default:v(()=>[...i[7]||(i[7]=[s("只读",-1)])]),_:1})):t("",!0),e.plugin.scope?(u(),r(g(se),{key:3,type:"info",size:"tiny",bordered:!1},{default:v(()=>[s(p("project"===e.plugin.scope?"项目":"全局"),1)]),_:1})):t("",!0),"extension"===e.plugin.pluginKind?(u(),r(g(se),{key:4,type:"default",size:"tiny",bordered:!1},{default:v(()=>[...i[8]||(i[8]=[s("扩展",-1)])]),_:1})):t("",!0),"skill-bundle"===e.plugin.pluginKind?(u(),r(g(se),{key:5,type:"warning",size:"tiny",bordered:!1},{default:v(()=>[...i[9]||(i[9]=[s("技能包插件",-1)])]),_:1})):t("",!0),"gitlab"===e.plugin.repoProvider?(u(),r(g(se),{key:6,type:"info",size:"tiny",bordered:!1},{default:v(()=>[...i[10]||(i[10]=[s("GitLab",-1)])]),_:1})):"local"===e.plugin.repoProvider?(u(),r(g(se),{key:7,type:"info",size:"tiny",bordered:!1},{default:v(()=>[...i[11]||(i[11]=[s("本地",-1)])]),_:1})):e.plugin.repoOwner?(u(),r(g(se),{key:8,type:"info",size:"tiny",bordered:!1},{default:v(()=>[s(p(e.plugin.repoOwner),1)]),_:1})):t("",!0)])])]),e.plugin.description?(u(),w("div",Ie,p((c=e.plugin.description,d=120,c?.length>d?c.slice(0,d)+"...":c)),1)):t("",!0),P("div",Te,[P("span",ze,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]=y(()=>{},["stop"]))},p((o=e.plugin,"gitlab"===o?.repoProvider?"GitLab":"local"===o?.repoProvider?"本地":"GitHub")),9,Le)):t("",!0)])]),e.readonly?t("",!0):(u(),w("div",{key:0,class:"asset-card-actions",onClick:i[3]||(i[3]=y(()=>{},["stop"]))},[e.plugin.installed&&e.canUninstall?(u(),r(g(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[12]||(i[12]=[s("卸载",-1)])]),_:1},8,["loading"])):e.canInstall?(u(),r(g(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[13]||(i[13]=[s("安装",-1)])]),_:1},8,["loading","disabled"])):t("",!0)]))],2);var o,c,d}}},xe={class:"repo-manager"},Oe={class:"repo-list"},He={class:"repo-main"},Be={class:"repo-info"},Re={class:"repo-name-row"},Ae={class:"repo-name"},Ge={class:"repo-branch"},Me={key:0,class:"repo-auth-hint"},De={class:"repo-actions"},Ke={key:0,class:"empty-hint"},Ne={class:"add-repo"},qe={class:"add-title"},Ee={class:"add-form"},Ve={class:"add-hint"},Fe={class:"tips"},Qe={key:0,class:"recommended"},We={class:"recommended-list"},Ye=["onClick"],Ze={class:"rec-info"},Je={class:"rec-name"},Xe={class:"rec-desc"},ea={key:0,class:"auth-manager"},aa={class:"auth-meta"},la={class:"auth-meta-row"},ta={class:"auth-value"},sa={class:"auth-meta-row"},na={class:"auth-value"},ia={class:"auth-meta-row"},ra={class:"auth-value"},oa={class:"auth-actions"},ua=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:y}){const k=l,_=y,U=d({get:()=>k.visible,set:e=>_("update:visible",e)}),$=b([]),C=b(!1),I=b(!1),T=b(!1),z=b(!1),S=b(null),x=b(!1),O=b(!1),H=b({token:""}),B=b({input:"",branch:"main"}),A=d(()=>"native-marketplace"===k.capabilities.repositoryMode),G=d(()=>({...k.projectPath?{cwd:k.projectPath}:{}})),M=d(()=>S.value?("gitlab"===S.value.provider?"GitLab":"GitHub")+" 仓库认证":"仓库认证"),K=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"}]),N=d(()=>A.value?Boolean(B.value.input.trim()):!!oe(B.value.input.trim()));function q(e){const a=e.provider||(e.localPath?"local":e.projectPath?"gitlab":"github"),l=e.branch||"main",t=ue(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,H.value.token="",x.value=!1,O.value=!1}async function Y(){C.value=!0;try{const e=await async function(e="claude",a={}){return(await j.get("/plugins/repos",{params:ve({platform:e},a)})).data}(k.platform,G.value);e.success&&($.value=e.repos||[])}catch(e){le.error("加载仓库失败: "+e.message)}finally{C.value=!1}}async function J(){T.value=!0;try{let e=(await ye(k.platform,G.value)).task;for(;e&&["queued","running"].includes(e.status);)await new Promise(e=>setTimeout(e,250)),e=(await ge(e.id,{platform:k.platform,...G.value})).task;"failed"===e?.status?le.error(e.error||"刷新失败,已保留旧缓存"):(await Y(),le.success("仓库缓存刷新成功"),_("updated"))}catch(e){le.error("刷新失败: "+e.message)}finally{T.value=!1}}async function ee(){if(!N.value)return;const e=A.value?{source:B.value.input.trim()}:oe(B.value.input.trim());I.value=!0;try{const a=await be({...e,branch:B.value.branch||"main",enabled:!0},k.platform,G.value);a.success&&($.value=a.repos,B.value.input="",B.value.branch="main",le.success("仓库添加成功"),_("updated"))}catch(a){le.error("添加失败: "+a.message)}finally{I.value=!1}}async function ne(e){try{const a=await async function(e,a="claude",l={}){return(await j.delete("/plugins/repos",{params:ve({platform:a,id:e.id||"",owner:e.owner||"",name:e.name||""},l)})).data}(e,k.platform,G.value);a.success&&($.value=a.repos,le.success("仓库已删除"),_("updated"))}catch(a){le.error("删除失败: "+a.message)}}async function ie(e,a){try{const l=await async function(e,a,l="claude"){return(await j.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,_("updated"))}catch(l){le.error("操作失败: "+l.message)}}async function re(){const e=S.value,a=H.value.token.trim();if(e&&a){x.value=!0;try{const l=await we(e,{token:a},k.platform);l.success&&($.value=l.repos||[],le.success("仓库 Token 已保存"),_("updated"),W())}catch(l){le.error("保存 Token 失败: "+l.message)}finally{x.value=!1}}}async function ce(){const e=S.value;if(e){O.value=!0;try{const a=await we(e,{clearToken:!0},k.platform);a.success&&($.value=a.repos||[],le.success("仓库 Token 已清除"),_("updated"),W())}catch(a){le.error("清除 Token 失败: "+a.message)}finally{O.value=!1}}}function pe(e){const a=q(e);return $.value.some(e=>q(e)===a)}function de(){W(),_("update:visible",!1)}return c(()=>k.visible,e=>{e&&Y()}),c(()=>k.platform,()=>{k.visible&&Y()}),o(()=>{k.visible&&Y()}),(o,c)=>(u(),w(m,null,[i(g(D),{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:de},{"header-extra":v(()=>[i(g(a),{type:"primary",size:"small",loading:T.value,focusable:!1,onClick:J},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(R))]),_:1})]),default:v(()=>[c[5]||(c[5]=s(" 刷新 ",-1))]),_:1},8,["loading"])]),default:v(()=>[P("div",xe,[P("div",Oe,[i(g(Z),{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",He,[!1!==l.capabilities.repositoryToggle?(u(),r(g(ae),{key:0,value:e.enabled,size:"small","onUpdate:value":a=>ie(e,a)},null,8,["value","onUpdate:value"])):t("",!0),P("div",Be,[P("div",Re,[P("div",Ae,p(E(e)),1),!1!==l.capabilities.repositoryAuth&&F(e)?(u(),r(g(se),{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",Me,p(Q(e)),1)):t("",!0)])]),P("div",De,[!1!==l.capabilities.repositoryAuth&&F(e)?(u(),r(g(a),{key:0,text:"",type:"primary",size:"tiny",focusable:!1,onClick:a=>function(e){F(e)&&(S.value=e,H.value.token="",z.value=!0)}(e)},{default:v(()=>[...c[6]||(c[6]=[s(" 认证 ",-1)])]),_:1},8,["onClick"])):t("",!0),i(g(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",Ke," 暂无仓库,请添加 ")):t("",!0)]),_:1},8,["show"])]),P("div",Ne,[P("div",qe,p(A.value?"添加 Marketplace source":"添加仓库"),1),P("div",Ee,[i(g(te),{value:B.value.input,"onUpdate:value":c[0]||(c[0]=e=>B.value.input=e),placeholder:A.value?"Marketplace source(owner/repo、URL 或本地路径)":"GitHub/GitLab 仓库地址,或本地路径",size:"small",class:"repo-input",onKeyup:h(ee,["enter"])},null,8,["value","placeholder"]),A.value?t("",!0):(u(),r(g(te),{key:0,value:B.value.branch,"onUpdate:value":c[1]||(c[1]=e=>B.value.branch=e),placeholder:"分支",size:"small",class:"branch-input"},null,8,["value"])),i(g(a),{type:"primary",size:"small",disabled:!N.value,loading:I.value,focusable:!1,onClick:ee},{default:v(()=>[...c[8]||(c[8]=[s(" 添加 ",-1)])]),_:1},8,["disabled","loading"])]),P("div",Ve,p(A.value?"source 将原样传递给 omp plugin marketplace add":"支持 `owner/repo`、GitHub/GitLab URL 或 SSH、以及本地路径"),1)]),P("div",Fe,[i(g(X),{type:"info",bordered:!1,size:"small"},{default:v(()=>[s(p(A.value?"OMP Marketplace 由原生 CLI 管理;不支持单独启停、branch 或仓库 Token。":"支持 GitHub、GitLab 和本地仓库路径;远程仓库可按仓库单独配置 Token。"),1)]),_:1})]),K.value.length>0?(u(),w("div",Qe,[c[10]||(c[10]=P("div",{class:"recommended-title"},"推荐仓库",-1)),P("div",We,[(u(!0),w(m,null,n(K.value,a=>(u(),w("div",{key:a.url||`${a.owner}/${a.name}`,class:f(["recommended-item",{added:pe(a)}]),onClick:e=>!pe(a)&&async function(e){I.value=!0;try{const a=await be({owner:e.owner,name:e.name,url:e.url,branch:e.branch,enabled:!0},k.platform);a.success&&($.value=a.repos,le.success("仓库添加成功"),_("updated"))}catch(a){le.error("添加失败: "+a.message)}finally{I.value=!1}}(a)},[P("div",Ze,[P("span",Je,p(a.owner)+"/"+p(a.name),1),P("span",Xe,p(a.description),1)]),pe(a)?(u(),r(g(se),{key:0,size:"tiny",type:"success",bordered:!1},{default:v(()=>[...c[9]||(c[9]=[s(" 已添加 ",-1)])]),_:1})):(u(),r(g(e),{key:1,class:"add-icon"},{default:v(()=>[i(g(L))]),_:1}))],10,Ye))),128))])])):t("",!0)])]),_:1},8,["show","title"]),i(g(D),{show:z.value,"onUpdate:show":c[4]||(c[4]=e=>z.value=e),preset:"card",title:M.value,bordered:!1,style:{width:"460px","max-width":"92vw"},onClose:W},{default:v(()=>[S.value?(u(),w("div",ea,[i(g(X),{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",aa,[P("div",la,[c[11]||(c[11]=P("span",{class:"auth-label"},"仓库",-1)),P("span",ta,p(E(S.value)),1)]),P("div",sa,[c[12]||(c[12]=P("span",{class:"auth-label"},"来源",-1)),P("span",na,p("gitlab"===S.value.provider?"GitLab":"GitHub"),1)]),P("div",ia,[c[13]||(c[13]=P("span",{class:"auth-label"},"当前状态",-1)),P("span",ra,p(S.value.hasToken?`已配置 ${S.value.tokenPreview||""}`:"未配置仓库 Token"),1)])]),i(g(te),{value:H.value.token,"onUpdate:value":c[3]||(c[3]=e=>H.value.token=e),type:"password","show-password-on":"click",clearable:"",placeholder:"输入此仓库专属 Token",onKeyup:h(re,["enter"])},null,8,["value"]),c[17]||(c[17]=P("div",{class:"auth-footnote"}," 仓库 Token 会优先于全局环境变量、CLI 登录和系统 Git 凭据。 ",-1)),P("div",oa,[i(g(a),{focusable:!1,onClick:W},{default:v(()=>[...c[14]||(c[14]=[s(" 取消 ",-1)])]),_:1}),S.value.hasToken?(u(),r(g(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(g(a),{type:"primary",focusable:!1,disabled:!H.value.token.trim(),loading:x.value,onClick:re},{default:v(()=>[...c[16]||(c[16]=[s(" 保存 Token ",-1)])]),_:1},8,["disabled","loading"])])])):t("",!0)]),_:1},8,["show","title"])],64))}},[["__scopeId","data-v-2321d587"]]),ca={class:"asset-detail-drawer-header"},pa={class:"asset-detail-identity"},da={class:"asset-detail-heading"},va={class:"asset-detail-name"},ma={class:"asset-detail-meta"},fa={key:2,class:"asset-detail-subtle"},ya={class:"asset-detail-body"},ga={class:"asset-detail-container"},ha={class:"asset-detail-info-section"},ka={class:"asset-detail-description"},ba={key:0,class:"asset-detail-info-section"},wa={class:"asset-detail-list"},Pa={class:"asset-detail-value mono"},_a={key:1,class:"asset-detail-info-section"},ja={class:"asset-detail-box"},Ua=["href"],$a={key:1},Ca={class:"asset-detail-container"},Ia={key:0,class:"asset-detail-loading"},Ta=["innerHTML"],za={key:2,class:"asset-detail-empty"},La={__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}){ie.setOptions({breaks:!0,gfm:!0});const{drawerWidth:o}=F(600),f=a,y=l,h=d({get:()=>f.visible,set:e=>y("update:visible",e)}),k=b(""),_=b(!1),U=b(0),$=b("overview"),C=b(""),T=d(()=>/^(https?:)?\/\//.test(f.plugin?.repoUrl||f.plugin?.gitUrl||"")),L=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(C.value===l)return;const t=++U.value;_.value=!0;try{const s={repoId:e.repoId,repoProvider:e.repoProvider,repoHost:e.repoHost,repoOwner:e.repoOwner,repoName:e.repoName,repoBranch:e.repoBranch,directory:e.directory,source:e.source,repoUrl:e.repoUrl,repoProjectPath:e.repoProjectPath,repoLocalPath:e.repoLocalPath,installPath:e.installPath},n=await function(e,a={},l="claude",t={}){const s=a.scope||t.scope||"",n=a.repoLocalPath||a.repoProjectPath||a.repoUrl||a.directory||e,i=ne(`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),J(i,a=>j.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||"",C.value=l}catch(s){if(t!==U.value)return;k.value="",C.value=l}finally{t===U.value&&(_.value=!1)}}c(()=>[f.visible,f.plugin,f.platform],([e])=>{U.value+=1,$.value="overview",C.value="",_.value=!1,k.value=""}),c($,e=>{"readme"===e&&H()});const R=d(()=>k.value?ie(k.value):"");return(l,c)=>(u(),r(g(V),{show:h.value,"onUpdate:show":c[1]||(c[1]=e=>h.value=e),width:g(o),placement:"right","show-mask":!0},{default:v(()=>[i(g(Q),{closable:"","native-scrollbar":!1,"body-content-style":O},{header:v(()=>[P("div",ca,[P("div",pa,[i(g(e),{size:20,class:"asset-detail-icon"},{default:v(()=>[i(g(B))]),_:1}),P("div",da,[P("span",va,p(a.plugin?.name||"插件详情"),1),P("div",ma,[a.plugin?.version?(u(),r(g(se),{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(g(se),{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",fa,[i(g(e),{size:12},{default:v(()=>[i(g(S))]),_:1}),s(" "+p(a.plugin.author),1)])):t("",!0)])])])])]),default:v(()=>[P("div",ya,[i(g(q),{value:$.value,"onUpdate:value":c[0]||(c[0]=e=>$.value=e),type:"line",animated:"",class:"asset-detail-tabs"},{default:v(()=>[i(g(K),{name:"overview",tab:"概览"},{default:v(()=>[P("div",ga,[P("div",ha,[c[3]||(c[3]=P("h3",{class:"asset-detail-section-title"},"描述",-1)),P("p",ka,p(a.plugin?.description||"暂无描述"),1)]),x.value.length>0?(u(),w("div",ba,[c[4]||(c[4]=P("h3",{class:"asset-detail-section-title"},"包含技能",-1)),P("div",wa,[(u(!0),w(m,null,n(x.value,e=>(u(),w("div",{key:e,class:"asset-detail-row"},[P("span",Pa,p(e),1)]))),128))])])):t("",!0),a.plugin?.repoUrl||a.plugin?.gitUrl||a.plugin?.repoLocalPath?(u(),w("div",_a,[c[5]||(c[5]=P("h3",{class:"asset-detail-section-title"},"仓库地址",-1)),P("div",ja,[i(g(e),{size:16},{default:v(()=>[i(g(z))]),_:1}),T.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,Ua)):(u(),w("span",$a,p(a.plugin.repoLocalPath),1))])])):t("",!0),i(E,{path:L.value},null,8,["path"])])]),_:1}),i(g(K),{name:"readme",tab:"README"},{default:v(()=>[P("div",Ca,[_.value?(u(),w("div",Ia,[i(g(Z),{size:"medium"}),c[6]||(c[6]=P("p",null,"加载 README 中...",-1))])):k.value?(u(),w("div",{key:1,class:"asset-detail-content",innerHTML:R.value},null,8,Ta)):(u(),w("div",za,[i(g(e),{size:44,class:"asset-detail-empty-icon"},{default:v(()=>[i(g(I))]),_:1}),c[7]||(c[7]=P("p",null,"暂无 README 文档",-1))]))])]),_:1})]),_:1},8,["value"])])]),_:1})]),_:1},8,["show","width"]))}},Sa={key:0,class:"asset-panel-header"},xa={class:"asset-title-group"},Oa={class:"asset-heading"},Ha={class:"asset-title-row"},Ba={class:"asset-platform-pill"},Ra={key:0,class:"asset-action-row"},Aa={key:1,class:"asset-drawer-toolbar"},Ga={key:0,class:"asset-action-row"},Ma={key:2,class:"dsh-install-row"},Da={class:"asset-summary"},Ka={class:"asset-summary-item"},Na={class:"asset-summary-value"},qa={class:"asset-summary-item"},Ea={class:"asset-summary-value"},Va={class:"asset-summary-item"},Fa={class:"asset-summary-value"},Qa={class:"asset-filter-bar"},Wa={class:"asset-panel-content"},Ya={key:0,class:"asset-empty"},Za={key:1,class:"asset-list"},Ja={key:3,class:"asset-footer"},Xa=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 y=l,I=k(),z=C(),L=M(),S=b(!1),R=b([]),D=b(""),K=b("all"),q=b(!1),E=b(!1),V=b(null),F=b({}),Q=b({}),X=b(!1),ae=b(!1),le=b([]),se=b(""),ie=b(""),oe=b(!1),ue=d(()=>le.value.map(e=>({label:e.name,value:e.name}))),ce=b(0),pe=b({supportsPlugins:!0,repositories:!0,market:!0,install:!0,uninstall:!0,import:!0,syncRepos:!0}),{byCapability:de}=Y(),be=d(()=>de("plugins").map(e=>e.key)),we=d(()=>be.value.includes(Pe.value));const Pe=d(()=>String(y.platform||(Array.isArray(I.query.platform)?I.query.platform[0]:I.query.platform)||U(I)||"").trim().toLowerCase()),_e=d(()=>{const e=z.get(Pe.value)||$(Pe.value);return e.label||e.title||"Claude Code"}),je=[{label:"全部",value:"all"},{label:"已安装",value:"installed"},{label:"未安装",value:"uninstalled"}],Ue=d(()=>"dsh"===Pe.value?R.value.filter(e=>e.profile===se.value):R.value),$e=d(()=>Ue.value.filter(e=>e.installed).length);function Ce(e=null){return{...y.projectPath?{cwd:y.projectPath}:{},...e?.scope?{scope:e.scope}:{scope:y.projectPath?"project":"user"}}}const Ie=d(()=>{let e=Ue.value;if("installed"===K.value?e=e.filter(e=>e.installed):"uninstalled"===K.value&&(e=e.filter(e=>!e.installed)),D.value.trim()){const a=D.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)}),Te=d(()=>D.value?"没有匹配的插件":"dsh"===Pe.value?"当前 Profile 没有外置插件,可通过上方输入框安装 npm 包":"installed"===K.value?"暂无已安装的插件":"uninstalled"===K.value?"所有插件都已安装":!1===pe.value.supportsPlugins?pe.value.disabledReason||`${_e.value} 暂未提供插件管理能力`:pe.value.repositories||pe.value.market||pe.value.install||pe.value.uninstall?"暂无可用插件,请配置仓库源":pe.value.disabledReason||`${_e.value} 当前没有可展示的插件`);async function ze(e,a){try{const l=await async function(e="claude",a={}){const l=ne("plugin-capabilities",e,a.scope||"",a.cwd||"");return J(l,a=>j.get("/plugins/capabilities",{params:{platform:e},signal:a}).then(e=>e.data),"plugin-capabilities",`plugin-capabilities:${e}`)}(e);if(a!==ce.value||e!==Pe.value)return!1;if(l.success&&l.capabilities)return pe.value={supportsPlugins:!0,repositories:!1,market:!1,install:!1,uninstall:!1,import:!1,syncRepos:!1,...l.capabilities},!0}catch{if(a!==ce.value||e!==Pe.value)return!1}return a===ce.value&&e===Pe.value&&(pe.value={supportsPlugins:be.value.includes(e),repositories:be.value.includes(e),market:be.value.includes(e),install:be.value.includes(e),uninstall:be.value.includes(e),import:"claude"===e,syncRepos:"claude"===e},!0)}async function Le(){const e=++ce.value,a=Pe.value;if(!we.value)return R.value=[],pe.value={supportsPlugins:!1,repositories:!1,market:!1,install:!1,uninstall:!1,import:!1,syncRepos:!1,disabledReason:`${_e.value} 暂未提供插件管理能力`},void(S.value=!1);S.value=!0;try{if("dsh"===a&&(le.value=await re(),le.value.some(e=>e.name===se.value)||(se.value=le.value[0]?.name||"")),!(await ze(a,e)))return;if(e!==ce.value||a!==Pe.value)return;if(!1===pe.value.supportsPlugins)return void(R.value=[]);const l=Ce(),[t,s]=await Promise.all([me(a,l),pe.value.market?fe(a,!1,l):Promise.resolve({success:!0,plugins:[]})]);if(e!==ce.value||a!==Pe.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}`}))]};R.value=r(n,i)}catch(l){e===ce.value&&a===Pe.value&&L.error("加载插件失败: "+l.message)}finally{e===ce.value&&(S.value=!1)}}async function xe(){const e=ie.value.trim();if(se.value&&e&&!oe.value){oe.value=!0;try{await async function(e,a){const l=_("dsh"),t=await j.post(`${l}/profiles/${encodeURIComponent(e)}/plugins/install`,{spec:a});return{success:!0,...t.data?.data||t.data||{}}}(se.value,e),L.success(`已安装 ${e}`),ie.value="",he("dsh"),await Le()}catch(a){L.error(a.message||"安装外置插件失败")}finally{oe.value=!1}}}async function Oe(){if(ae.value||!we.value)return;const e=Pe.value;ae.value=!0;try{const a=await async function(e,a){if(!e?.id)return e;let l=e;for(;l&&["queued","running"].includes(l.status);)await new Promise(e=>setTimeout(e,250)),l=(await ge(l.id,{platform:a,...Ce()})).task;return l}((await ye(e,Ce())).task,e);"failed"===a?.status?L.error(a.error||"插件缓存刷新失败,已保留旧缓存"):"partial"===a?.status&&L.warning("插件缓存已部分更新,未成功的内容保留旧缓存"),await Le()}catch(a){L.error("插件缓存刷新失败: "+a.message)}finally{ae.value=!1}}async function He(){if(we.value&&"claude"===Pe.value){X.value=!0;try{const e=await N("plugins");e.success?(L.success(`成功导入 ${e.imported} 个插件`),he(Pe.value),await Le()):L.error(e.message||"导入失败")}catch(e){L.error("导入失败: "+e.message)}finally{X.value=!1}}}function Be(){he(Pe.value),Le()}async function Re(e){if(we.value&&pe.value.install&&!e.readonly){if(!(e.installSource||e.repoOwner||e.repoProjectPath||e.repoLocalPath))return L.error("缺少可安装来源");F.value[e.key]=!0;try{const a=e.installSource?await ke("",null,Pe.value,e.pluginId||e.installSource,Ce(e),e):await ke(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},Pe.value,"",Ce(e),e);if(a.success){L.success(`插件 "${e.name}" 安装成功`),he(Pe.value);const a=R.value.findIndex(a=>a.key===e.key);-1!==a&&(R.value[a]={...R.value[a],installed:!0,key:`installed-${e.pluginId||e.id||e.name}-${e.scope||Ce(e).scope}`})}else L.error(a.message||"安装失败")}catch(a){L.error("安装失败: "+a.message)}finally{delete F.value[e.key]}}}async function Ae(e){if(we.value&&pe.value.uninstall&&!e.readonly){Q.value[e.key]=!0;try{const a="dsh"===Pe.value?await async function(e,a){const l=_("dsh"),t=await j.delete(`${l}/profiles/${encodeURIComponent(e)}/plugins/${encodeURIComponent(a)}`);return{success:!0,...t.data?.data||t.data||{}}}(e.profile,e.name):await async function(e,a="claude",l={}){return(await j.delete(`/plugins/${encodeURIComponent(e)}`,{params:ve({platform:a,pluginId:e},l)})).data}(e.pluginId||e.id||e.name,Pe.value,Ce(e));if(a.success){L.success(`插件 "${e.name}" 已卸载`),he(Pe.value);const a=R.value.findIndex(a=>a.key===e.key);-1!==a&&(R.value[a]={...R.value[a],installed:!1,key:`market-${e.pluginId||e.id||e.name}`})}else L.error(a.message||a.error||"卸载失败")}catch(a){L.error("卸载失败: "+a.message)}finally{delete Q.value[e.key]}}}function Ge(e){V.value=e,E.value=!0}return o(()=>{y.inDrawer&&!y.drawerVisible||Le()}),c(()=>y.drawerVisible,e=>{e&&Le()}),c(()=>Pe.value,()=>{Le()}),(o,c)=>(u(),w("div",{class:f(["plugins-panel asset-panel",{"in-drawer":l.inDrawer}])},[l.inDrawer?t("",!0):(u(),w("div",Sa,[P("div",xa,[l.hideBack?t("",!0):(u(),r(g(a),{key:0,text:"",onClick:c[0]||(c[0]=e=>o.$emit("back")),class:"back-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(T))]),_:1})]),_:1})),P("div",Oa,[P("div",Ha,[c[10]||(c[10]=P("span",{class:"asset-title"},"插件管理",-1)),P("span",Ba,p(_e.value),1)]),c[11]||(c[11]=P("div",{class:"asset-subtitle"},"管理平台插件、仓库源和市场安装状态",-1))])]),be.value.includes(Pe.value)?(u(),w("div",Ra,[pe.value.repositories?(u(),r(g(a),{key:0,text:"",focusable:!1,onClick:c[1]||(c[1]=e=>q.value=!0),class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(H))]),_:1})]),default:v(()=>[c[12]||(c[12]=s(" 仓库 ",-1))]),_:1})):t("",!0),pe.value.import?(u(),r(g(a),{key:1,text:"",focusable:!1,onClick:He,loading:X.value,class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(G))]),_:1})]),default:v(()=>[c[13]||(c[13]=s(" 导入 ",-1))]),_:1},8,["loading"])):t("",!0),i(g(a),{text:"",focusable:!1,onClick:Oe,loading:ae.value,class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(O))]),_:1})]),default:v(()=>[c[14]||(c[14]=s(" 刷新 ",-1))]),_:1},8,["loading"])])):t("",!0)])),l.inDrawer?(u(),w("div",Aa,[be.value.includes(Pe.value)?(u(),w("div",Ga,[pe.value.repositories?(u(),r(g(a),{key:0,text:"",focusable:!1,onClick:c[2]||(c[2]=e=>q.value=!0),class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(H))]),_:1})]),default:v(()=>[c[15]||(c[15]=s(" 仓库 ",-1))]),_:1})):t("",!0),pe.value.import?(u(),r(g(a),{key:1,text:"",focusable:!1,onClick:He,loading:X.value,class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(G))]),_:1})]),default:v(()=>[c[16]||(c[16]=s(" 导入 ",-1))]),_:1},8,["loading"])):t("",!0),i(g(a),{text:"",focusable:!1,onClick:Oe,loading:ae.value,class:"action-btn"},{icon:v(()=>[i(g(e),null,{default:v(()=>[i(g(O))]),_:1})]),default:v(()=>[c[17]||(c[17]=s(" 刷新 ",-1))]),_:1},8,["loading"])])):t("",!0)])):t("",!0),"dsh"===Pe.value&&pe.value.install?(u(),w("div",Ma,[i(g(W),{value:se.value,"onUpdate:value":c[3]||(c[3]=e=>se.value=e),options:ue.value,size:"small",placeholder:"选择 Profile"},null,8,["value","options"]),i(g(te),{value:ie.value,"onUpdate:value":c[4]||(c[4]=e=>ie.value=e),size:"small",placeholder:"npm 包名,例如 @scope/dsh-plugin",onKeyup:h(xe,["enter"])},null,8,["value"]),i(g(a),{size:"small",type:"primary",loading:oe.value,disabled:!se.value||!ie.value.trim(),onClick:xe},{default:v(()=>[...c[18]||(c[18]=[s("安装外置插件",-1)])]),_:1},8,["loading","disabled"])])):t("",!0),P("div",Da,[P("span",Ka,[c[19]||(c[19]=P("span",{class:"asset-summary-label"},"全部",-1)),P("span",Na,p(Ue.value.length),1)]),P("span",qa,[c[20]||(c[20]=P("span",{class:"asset-summary-label"},"已安装",-1)),P("span",Ea,p($e.value),1)]),P("span",Va,[c[21]||(c[21]=P("span",{class:"asset-summary-label"},"可安装",-1)),P("span",Fa,p(Ue.value.length-$e.value),1)])]),P("div",Qa,[i(g(te),{value:D.value,"onUpdate:value":c[5]||(c[5]=e=>D.value=e),placeholder:"搜索插件名称或描述",clearable:"",size:"small",class:"asset-search"},{prefix:v(()=>[i(g(e),null,{default:v(()=>[i(g(A))]),_:1})]),_:1},8,["value"]),i(g(W),{value:K.value,"onUpdate:value":c[6]||(c[6]=e=>K.value=e),options:je,size:"small",class:"asset-filter"},null,8,["value"])]),P("div",Wa,[i(g(Z),{show:S.value},{default:v(()=>[0!==Ie.value.length||S.value?(u(),w("div",Za,[(u(!0),w(m,null,n(Ie.value,e=>(u(),r(Se,{key:e.key,plugin:e,readonly:e.readonly||!pe.value.install&&!pe.value.uninstall,"can-install":pe.value.install,"can-uninstall":pe.value.uninstall,installing:!!F.value[e.key],uninstalling:!!Q.value[e.key],onInstall:Re,onUninstall:Ae,onClick:Ge},null,8,["plugin","readonly","can-install","can-uninstall","installing","uninstalling"]))),128))])):(u(),w("div",Ya,[i(g(ee),{description:Te.value},{icon:v(()=>[i(g(e),{size:"48",color:"var(--text-quaternary)"},{default:v(()=>[i(g(B))]),_:1})]),extra:v(()=>[be.value.includes(Pe.value)&&0===Ue.value.length&&pe.value.repositories?(u(),r(g(a),{key:0,size:"small",onClick:c[7]||(c[7]=e=>q.value=!0)},{default:v(()=>[...c[22]||(c[22]=[s("配置仓库源",-1)])]),_:1})):t("",!0)]),_:1},8,["description"])]))]),_:1},8,["show"])]),be.value.includes(Pe.value)&&(pe.value.install||pe.value.uninstall)?(u(),w("div",Ja,[i(g(e),{size:"14",class:"asset-info-icon"},{default:v(()=>[i(g(x))]),_:1}),P("span",null,"安装/卸载后需重启 "+p(_e.value)+" 生效",1)])):t("",!0),pe.value.repositories?(u(),r(ua,{key:4,visible:q.value,"onUpdate:visible":c[8]||(c[8]=e=>q.value=e),platform:Pe.value,"project-path":y.projectPath,capabilities:pe.value,onUpdated:Be},null,8,["visible","platform","project-path","capabilities"])):t("",!0),i(La,{visible:E.value,"onUpdate:visible":c[9]||(c[9]=e=>E.value=e),plugin:V.value,platform:Pe.value,"project-path":y.projectPath,onUpdated:Le},null,8,["visible","plugin","platform","project-path"])],2))}},[["__scopeId","data-v-953e9da1"]]);export{Xa as t};