coding-tool-x 3.9.9-261030 → 3.9.9-261105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/dist/web/assets/AgentsDrawer-DWnAsTH_.js +1 -0
  3. package/dist/web/assets/Analytics-D_WWRO5h.js +1 -0
  4. package/dist/web/assets/AssetPathField-CoIuoSZr.js +1 -0
  5. package/dist/web/assets/ChatHistoryDrawer-B_OnCpxR.js +1 -0
  6. package/dist/web/assets/CollapseItem-DEV7PQ-o.js +1 -0
  7. package/dist/web/assets/CommandsDrawer-gG61nb7a.js +1 -0
  8. package/dist/web/assets/ConfigExportDrawer-BkSzLSuZ.js +1 -0
  9. package/dist/web/assets/ConfigTemplates-DvEDpIso.js +1 -0
  10. package/dist/web/assets/ConfigTemplatesDrawer-DMPO4gjt.js +1 -0
  11. package/dist/web/assets/ConfigTemplatesPanel-BQe31_bq.js +1 -0
  12. package/dist/web/assets/Divider-CEqaZMTW.js +1 -0
  13. package/dist/web/assets/DrawerContent-BYlV968f.js +1 -0
  14. package/dist/web/assets/FavoritesDrawer-Y-MmIIE9.js +1 -0
  15. package/dist/web/assets/{Forward-DLCL7aMY.js → Forward-kgMPT2RI.js} +1 -1
  16. package/dist/web/assets/GatewayConvertDrawer-BvYhzJD6.js +1 -0
  17. package/dist/web/assets/Home-BOwk4kTa.js +1 -0
  18. package/dist/web/assets/MarkdownEditor-Bf9QKKaV.js +1 -0
  19. package/dist/web/assets/McpDrawer-B7cwI24B.js +1 -0
  20. package/dist/web/assets/McpFormDrawer-Djt5CJyE.js +1 -0
  21. package/dist/web/assets/PluginManager-B4J_hR0V.js +1 -0
  22. package/dist/web/assets/PluginsDrawer-Ch4x66-E.js +1 -0
  23. package/dist/web/assets/PluginsPanel-mqXBlKZg.js +1 -0
  24. package/dist/web/assets/ProjectList-DtmQyoPc.css +1 -0
  25. package/dist/web/assets/ProjectList-xToRgLVw.js +1 -0
  26. package/dist/web/assets/PromptsDrawer-VYrlk-F6.js +1 -0
  27. package/dist/web/assets/RecentSessionsDrawer-DCsgGSBu.js +1 -0
  28. package/dist/web/assets/SessionCard-C9n9lC_Y.css +1 -0
  29. package/dist/web/assets/SessionCard-DwzxeSe9.js +1 -0
  30. package/dist/web/assets/{SessionList-qG_XpPBJ.css → SessionList-CCuKp6ib.css} +1 -1
  31. package/dist/web/assets/SessionList-GqzUHgOu.js +1 -0
  32. package/dist/web/assets/SettingsDrawer-Q_aTOBhf.js +1 -0
  33. package/dist/web/assets/SkillManager-B1B58WKe.js +1 -0
  34. package/dist/web/assets/SkillsDrawer-Ch1b1hLn.js +1 -0
  35. package/dist/web/assets/SkillsPanel-B_xxyDpy.js +1 -0
  36. package/dist/web/assets/{Upload-xqorL26i.js → Upload-B6Kn1TvG.js} +1 -1
  37. package/dist/web/assets/WorkspaceDrawer-C3w-Z87U.js +1 -0
  38. package/dist/web/assets/WorkspaceManager-BFzjeEWh.js +1 -0
  39. package/dist/web/assets/WorkspacePanel-DkrwFSLs.js +1 -0
  40. package/dist/web/assets/_plugin-vue_export-helper-DyHLuIR4.js +1 -0
  41. package/dist/web/assets/{client-oU6RT-6I.js → client-B31QOzWk.js} +1 -1
  42. package/dist/web/assets/{dsh-agent-presets-DjJRVMT6.js → dsh-agent-presets-DopJnuAZ.js} +1 -1
  43. package/dist/web/assets/headers-nTUGmJee.js +1 -0
  44. package/dist/web/assets/{icons-B-AzZoeE.js → icons-C6KNTFqo.js} +1 -1
  45. package/dist/web/assets/index-BXWpib7P.js +2 -0
  46. package/dist/web/assets/{index-DjIuAtaS.css → index-CvL_fRpL.css} +1 -1
  47. package/dist/web/assets/light-DeIjG9s_.js +1 -0
  48. package/dist/web/assets/markdown-xLK9ekFg.js +1 -0
  49. package/dist/web/assets/platforms-BdTllxKt.js +1 -0
  50. package/dist/web/assets/{platforms-p9AiybLU.js → platforms-CDltfh5G.js} +1 -1
  51. package/dist/web/assets/{project-config-CzFKBw_m.js → project-config-C16yaWHF.js} +1 -1
  52. package/dist/web/assets/rolldown-runtime-DcNxTHDL.js +1 -0
  53. package/dist/web/assets/sessions-B4RD8wDx.js +1 -0
  54. package/dist/web/assets/{sessions-DJiJJgvg.js → sessions-Xl0HAvhA.js} +1 -1
  55. package/dist/web/assets/use-lock-html-scroll-Bu94jdUB.js +1 -0
  56. package/dist/web/assets/use-message-BYx0IRj1.js +1 -0
  57. package/dist/web/assets/useResponsiveDrawer-Deh7Xdcj.js +1 -0
  58. package/dist/web/assets/vendors-CvGw6U_t.js +1 -0
  59. package/dist/web/assets/vue-vendor-Cr_NLmXY.js +1 -0
  60. package/dist/web/assets/{workspaces-D2yLnT-B.js → workspaces-Y7hS24p2.js} +1 -1
  61. package/dist/web/assets/xml-B78loRzO.js +1 -0
  62. package/dist/web/index.html +13 -12
  63. package/package.json +3 -3
  64. package/src/platforms/drivers/dsh/api-operations.js +1 -1
  65. package/src/platforms/drivers/dsh/channels-implementation.js +10 -0
  66. package/src/platforms/drivers/dsh/channels.js +10 -0
  67. package/src/platforms/drivers/dsh/proxy-implementation.js +7 -1
  68. package/src/platforms/drivers/dsh/sessions.js +5 -1
  69. package/src/platforms/manifest-schema.js +1 -1
  70. package/src/platforms/manifests/dsh.json +8 -0
  71. package/src/server/services/model-detector.js +22 -3
  72. package/dist/web/assets/AgentsDrawer-CKEf8ie1.js +0 -1
  73. package/dist/web/assets/Analytics-0BCMxQ-o.js +0 -1
  74. package/dist/web/assets/AssetPathField-pfN6L814.js +0 -1
  75. package/dist/web/assets/ChatHistoryDrawer-nuUPRqje.js +0 -1
  76. package/dist/web/assets/CollapseItem-B2SdqQp2.js +0 -1
  77. package/dist/web/assets/CommandsDrawer-D8m0qLzQ.js +0 -1
  78. package/dist/web/assets/ConfigExportDrawer-BlCBLdue.js +0 -1
  79. package/dist/web/assets/ConfigTemplates-CePBARK8.js +0 -1
  80. package/dist/web/assets/ConfigTemplatesDrawer-DbVY4rD1.js +0 -1
  81. package/dist/web/assets/ConfigTemplatesPanel-CwYPLEFV.js +0 -1
  82. package/dist/web/assets/Divider-BLLhMTSt.js +0 -1
  83. package/dist/web/assets/DrawerContent-ChXgZ1Xm.js +0 -1
  84. package/dist/web/assets/FavoritesDrawer-BKAKQNqP.js +0 -1
  85. package/dist/web/assets/GatewayConvertDrawer-D2MFXcqS.js +0 -1
  86. package/dist/web/assets/Home-BmElvXVZ.js +0 -1
  87. package/dist/web/assets/MarkdownEditor-buNC2iDj.js +0 -1
  88. package/dist/web/assets/McpDrawer-NBjAyFU5.js +0 -1
  89. package/dist/web/assets/McpFormDrawer-BUnW9j4A.js +0 -1
  90. package/dist/web/assets/PluginManager-BgHpsF5S.js +0 -1
  91. package/dist/web/assets/PluginsDrawer-CFnmqzV0.js +0 -1
  92. package/dist/web/assets/PluginsPanel-ClSdnSCu.js +0 -1
  93. package/dist/web/assets/ProjectList-CjlHEyU1.js +0 -1
  94. package/dist/web/assets/ProjectList-VbIYSHbH.css +0 -1
  95. package/dist/web/assets/PromptsDrawer-xeSGgpCd.js +0 -1
  96. package/dist/web/assets/RecentSessionsDrawer-DELB6-rU.js +0 -1
  97. package/dist/web/assets/SessionCard-BaH42eOe.js +0 -1
  98. package/dist/web/assets/SessionCard-aM2NHu6i.css +0 -1
  99. package/dist/web/assets/SessionList-BGB9GwYE.js +0 -1
  100. package/dist/web/assets/SettingsDrawer-DdYC8GIa.js +0 -1
  101. package/dist/web/assets/SkillManager-CF7EiSps.js +0 -1
  102. package/dist/web/assets/SkillsDrawer-Bc5zA1bk.js +0 -1
  103. package/dist/web/assets/SkillsPanel-SnzwzqW5.js +0 -1
  104. package/dist/web/assets/WorkspaceDrawer-DBiEnZ7j.js +0 -1
  105. package/dist/web/assets/WorkspaceManager-C1dNfoAy.js +0 -1
  106. package/dist/web/assets/WorkspacePanel-CWNQZjm1.js +0 -1
  107. package/dist/web/assets/_plugin-vue_export-helper-BeLZJZij.js +0 -1
  108. package/dist/web/assets/headers-DbowkmZJ.js +0 -1
  109. package/dist/web/assets/index-BKpL4XdU.js +0 -2
  110. package/dist/web/assets/light-C2X7hegj.js +0 -1
  111. package/dist/web/assets/markdown-u082bbtj.js +0 -1
  112. package/dist/web/assets/platforms-Cq6XDXfy.js +0 -1
  113. package/dist/web/assets/sessions-DSLpMXCq.js +0 -1
  114. package/dist/web/assets/use-lock-html-scroll-DXIqmUW4.js +0 -1
  115. package/dist/web/assets/use-message-DBsCm7FJ.js +0 -1
  116. package/dist/web/assets/useResponsiveDrawer-CTQPBATk.js +0 -1
  117. package/dist/web/assets/vendors-D0c_0KLP.js +0 -1
  118. package/dist/web/assets/vue-vendor-BqZbbXHA.js +0 -1
  119. package/dist/web/assets/xml-CgY3RMlX.js +0 -1
package/CHANGELOG.md CHANGED
@@ -23,6 +23,7 @@
23
23
  - **依赖安全升级** - adm-zip 升至 0.6.0(GHSA-xcpc-8h2w-3j85)、js-yaml 升至 4.3.1(GHSA-h67p-54hq-rp68 / GHSA-52cp-r559-cp3m / GHSA-5p4m-2wfm-xmqj)、pm2 升至 7.0.3(GHSA-x5gf-qvw8-r2rm),overrides 同步更新 basic-ftp / qs / systeminformation / js-yaml;`npm audit` 报告归零
24
24
 
25
25
  ### Fixed
26
+ - **渠道添加重复提交** - 添加/编辑渠道的请求进行中时锁定保存按钮并同步拦截重复提交,请求卡住时反复点击不会再创建重复渠道;提交期间弹窗不可关闭,失败后解除锁定可重试。
26
27
  - **代理连接与内存回收** - 修复各 CLI 请求残留、客户端断开后的上游取消和渠道释放;后台退出时排空代理请求,延长上游空闲超时;OMP 重试取消失败响应,过滤连接保活头,并增加内存压力回收。
27
28
  - **CLI 状态和错误子命令** - 修复 `ctx status` 的代理 Driver 状态解析;错误子命令返回非零退出码,不再进入控制面。
28
29
  - **Claude / Gemini 原生 wire 兼容** - OpenCode Claude / Gemini 代理、模型探测和测速统一使用 Anthropic Messages 与 Google Generative AI(含 Gemini CLI)原生请求格式、认证头与目标 URL;OMP managed provider 写入 `anthropic-messages` / `google-generative-ai` 标识,避免代理、adapter 与探测各自维护不一致的请求格式
@@ -0,0 +1 @@
1
+ import{C as e,D as a,K as l,O as s,S as t,V as n,W as i,Y as o,Z as u,_t as d,b as r,et as c,g as v,ht as p,m,mt as g,r as f,st as y,w as h,x as b}from"./vue-vendor-Cr_NLmXY.js";import{n as k,t as w}from"./useResponsiveDrawer-Deh7Xdcj.js";import{t as _}from"./DrawerContent-BYlV968f.js";import{i as C,s as x,t as j}from"./_plugin-vue_export-helper-DyHLuIR4.js";import{$ as M,Et as z,I as P,L as O,M as U,P as A,T as N,X as L,Y as I,Z as S,ct as $,ft as F,j as D,k as R,st as B,ut as q,w as E}from"./index-BXWpib7P.js";import{$ as T,At as H,Nt as J,O as V,R as G,S as Y,V as W,_ as X,f as Z,g as K,j as Q,m as ee}from"./icons-C6KNTFqo.js";import{t as ae}from"./client-B31QOzWk.js";import{a as le,c as se,i as te,o as ne,r as ie,s as oe,t as ue}from"./AssetPathField-CoIuoSZr.js";import{l as de}from"./light-DeIjG9s_.js";import{t as re}from"./MarkdownEditor-Bf9QKKaV.js";import{c as ce,i as ve,t as pe}from"./platforms-BdTllxKt.js";import{t as me}from"./use-message-BYx0IRj1.js";import{i as ge,n as fe,r as ye,t as he}from"./dsh-agent-presets-DopJnuAZ.js";async function be(e=null,a="claude",l={}){const s=E("agents",a,l.scope||"",e||"");return N(s,l=>ae.get("/agents",{params:e?{projectPath:e,platform:a}:{platform:a},signal:l}).then(e=>e.data),"agents",`agents:${a}`)}var ke={class:"asset-card-main"},we={class:"asset-card-top"},_e={class:"asset-card-title-stack"},Ce={class:"asset-card-title-row"},xe={class:"asset-name"},je={class:"asset-tags"},Me={key:0,class:"asset-description"},ze={class:"asset-meta"},Pe={key:0,class:"asset-meta-item"},Oe={key:1,class:"asset-meta-item"},Ue={class:"asset-card-actions"},Ae={class:"asset-platform-strip"},Ne=["onClick"],Le=j({__name:"AgentCard",props:{agent:{type:Object,required:!0},deleting:{type:Boolean,default:!1},registryInfo:{type:Object,default:null},toggling:{type:Boolean,default:!1}},emits:["click","edit","delete","toggle-enabled","toggle-platform"],setup(n,{emit:u}){const f=n,y=u,{byCapability:k}=z(),w=r(()=>k("agents"));return(u,r)=>{return i(),h("div",{class:p(["agent-card asset-card",{"is-project":"project"===n.agent.scope,"is-managed":n.registryInfo}]),onClick:r[4]||(r[4]=e=>y("click",n.agent))},[b("div",ke,[b("div",we,[b("div",_e,[b("div",Ce,[b("span",{class:p(["asset-status-dot",{active:n.registryInfo?.enabled||"project"===n.agent.scope}])},null,2),b("span",xe,d(n.agent.name),1)]),b("div",je,[s(g(q),{type:"user"===n.agent.scope?"info":"success",size:"tiny",bordered:!1},{default:c(()=>[a(d("user"===n.agent.scope?"用户级":"项目级"),1)]),_:1},8,["type"]),n.registryInfo?(i(),t(g(q),{key:0,type:"success",size:"tiny",bordered:!1},{default:c(()=>[...r[5]||(r[5]=[a("托管",-1)])]),_:1})):e("",!0),n.agent.model?(i(),t(g(q),{key:1,type:"warning",size:"tiny",bordered:!1},{default:c(()=>[a(d(n.agent.model),1)]),_:1})):e("",!0)])])]),n.agent.description?(i(),h("div",Me,d((_=n.agent.description,_?_.length>80?_.slice(0,80)+"...":_:"")),1)):e("",!0),b("div",ze,[n.agent.tools?(i(),h("span",Pe,[s(g(C),{size:"12"},{default:c(()=>[s(g(W))]),_:1}),a(" "+d((k=n.agent.tools,k?k.length>30?k.slice(0,30)+"...":k:"")),1)])):e("",!0),n.agent.permissionMode?(i(),h("span",Oe,[s(g(C),{size:"12"},{default:c(()=>[s(g(Z))]),_:1}),a(" "+d(n.agent.permissionMode),1)])):e("",!0)])]),b("div",Ue,[n.registryInfo?(i(),h(v,{key:0},[s(g(I),{trigger:"hover"},{trigger:c(()=>[s(g(D),{value:n.registryInfo.enabled,size:"small",loading:n.toggling,"onUpdate:value":r[0]||(r[0]=e=>y("toggle-enabled",n.agent,e)),onClick:r[1]||(r[1]=m(()=>{},["stop"]))},null,8,["value","loading"])]),default:c(()=>[a(" "+d(n.registryInfo.enabled?"已启用":"已禁用"),1)]),_:1}),b("div",Ae,[(i(!0),h(v,null,l(w.value,e=>(i(),t(g(I),{key:e.key,trigger:"hover"},{trigger:c(()=>[b("span",{class:p(["asset-platform-icon",{active:n.registryInfo.platforms?.[e.key]}]),onClick:m(a=>y("toggle-platform",n.agent,e.key,!n.registryInfo.platforms?.[e.key]),["stop"])},[s(g(C),{size:"14"},{default:c(()=>[(i(),t(o(e.icon)))]),_:2},1024)],10,Ne)]),default:c(()=>[a(" "+d(e.label||e.title||e.key)+" "+d(n.registryInfo.platforms?.[e.key]?"已启用":"未启用"),1)]),_:2},1024))),128))])],64)):(i(),h(v,{key:1},[s(g(x),{size:"tiny",tertiary:"",onClick:r[2]||(r[2]=m(e=>y("edit",n.agent),["stop"]))},{default:c(()=>[...r[6]||(r[6]=[a(" 编辑 ",-1)])]),_:1}),s(g(x),{size:"tiny",tertiary:"",type:"error",loading:f.deleting,onClick:r[3]||(r[3]=m(e=>y("delete",n.agent),["stop"]))},{default:c(()=>[...r[7]||(r[7]=[a(" 删除 ",-1)])]),_:1},8,["loading"])],64))])],2);var k,_}}},[["__scopeId","data-v-044e4192"]]),Ie={class:"asset-detail-drawer-header"},Se={class:"asset-detail-identity"},$e={class:"asset-detail-heading"},Fe={class:"asset-detail-name"},De={class:"asset-detail-meta"},Re={key:2,class:"asset-detail-subtle"},Be={class:"asset-detail-body"},qe={key:0,class:"asset-detail-loading"},Ee={class:"asset-detail-container"},Te={class:"asset-detail-info-section"},He={class:"asset-detail-description"},Je={class:"asset-detail-info-section"},Ve={class:"asset-detail-list"},Ge={class:"asset-detail-row"},Ye={class:"asset-detail-value"},We={key:0,class:"asset-detail-row"},Xe={class:"asset-detail-value mono"},Ze={key:1,class:"asset-detail-row"},Ke={class:"asset-detail-value mono"},Qe={key:2,class:"asset-detail-row"},ea={class:"asset-detail-value"},aa={key:3,class:"asset-detail-row"},la={class:"asset-detail-value"},sa={key:4,class:"asset-detail-row"},ta={class:"asset-detail-value"},na={key:1,class:"asset-detail-info-section"},ia={class:"asset-detail-box"},oa={class:"asset-detail-code"},ua={key:2,class:"asset-detail-empty"},da={__name:"AgentDetailDrawer",props:{visible:{type:Boolean,default:!1},agent:{type:Object,default:null},platform:{type:String,default:"claude"},loading:{type:Boolean,default:!1}},emits:["update:visible"],setup(l,{emit:n}){const{drawerWidth:o}=w(600),u=l,v=n,p=r({get:()=>u.visible,set:e=>v("update:visible",e)}),m={height:"100%",minHeight:0,overflow:"hidden"},f=r(()=>({claude:"Claude Code",codex:"Codex CLI",gemini:"Gemini CLI",opencode:"OpenCode"}[u.platform]||"")),y=r(()=>u.agent?.fileName?"codex"===u.platform?`[agents.${u.agent.fileName}]`:`${u.agent.fileName}.md`:""),x=r(()=>u.agent?"codex"===u.platform?u.agent.fullContent||"(无内容)":u.agent.systemPrompt||"(无内容)":"(无内容)"),j=r(()=>u.agent?.fullPath||u.agent?.path||"");function M(e){return"project"===e?"项目级":"用户级"}return(n,u)=>(i(),t(g(k),{show:p.value,"onUpdate:show":u[0]||(u[0]=e=>p.value=e),width:g(o),placement:"right","show-mask":!0},{default:c(()=>[s(g(_),{closable:"","native-scrollbar":!1,"body-content-style":m},{header:c(()=>[b("div",Ie,[b("div",Se,[s(g(C),{size:20,class:"asset-detail-icon"},{default:c(()=>[s(g(V))]),_:1}),b("div",$e,[b("span",Fe,d(l.agent?.name||"代理详情"),1),b("div",De,[l.agent?.scope?(i(),t(g(q),{key:0,type:"project"===l.agent.scope?"success":"info",size:"tiny",bordered:!1},{default:c(()=>[a(d(M(l.agent.scope)),1)]),_:1},8,["type"])):e("",!0),l.agent?.model?(i(),t(g(q),{key:1,type:"warning",size:"tiny",bordered:!1},{default:c(()=>[a(d(l.agent.model),1)]),_:1})):e("",!0),f.value?(i(),h("span",Re,d(f.value),1)):e("",!0)])])])])]),default:c(()=>[b("div",Be,[l.loading&&!l.agent?(i(),h("div",qe,[s(g(U),{size:"medium"}),u[1]||(u[1]=b("p",null,"加载代理详情中...",-1))])):l.agent?(i(),t(g(oe),{key:1,type:"line",animated:"",class:"asset-detail-tabs"},{default:c(()=>[s(g(se),{name:"overview",tab:"概览"},{default:c(()=>[b("div",Ee,["codex"===l.platform&&l.agent.configReadError?(i(),t(g($),{key:0,type:"warning",bordered:!1},{default:c(()=>[a(d(l.agent.configReadError),1)]),_:1})):e("",!0),b("div",Te,[u[2]||(u[2]=b("h3",{class:"asset-detail-section-title"},"描述",-1)),b("p",He,d(l.agent.description||"暂无描述"),1)]),b("div",Je,[u[9]||(u[9]=b("h3",{class:"asset-detail-section-title"},"基础信息",-1)),b("div",Ve,[b("div",Ge,[u[3]||(u[3]=b("span",{class:"asset-detail-label"},"作用域",-1)),b("span",Ye,d(M(l.agent.scope)),1)]),l.agent.fileName?(i(),h("div",We,[u[4]||(u[4]=b("span",{class:"asset-detail-label"},"文件名",-1)),b("span",Xe,d(y.value),1)])):e("",!0),"codex"===l.platform&&l.agent.configFile?(i(),h("div",Ze,[u[5]||(u[5]=b("span",{class:"asset-detail-label"},"config_file",-1)),b("span",Ke,d(l.agent.configFile),1)])):e("",!0),l.agent.model?(i(),h("div",Qe,[u[6]||(u[6]=b("span",{class:"asset-detail-label"},"模型",-1)),b("span",ea,d(l.agent.model),1)])):e("",!0),l.agent.permissionMode?(i(),h("div",aa,[u[7]||(u[7]=b("span",{class:"asset-detail-label"},"权限模式",-1)),b("span",la,d(l.agent.permissionMode),1)])):e("",!0),l.agent.skills?(i(),h("div",sa,[u[8]||(u[8]=b("span",{class:"asset-detail-label"},"技能",-1)),b("span",ta,d(l.agent.skills),1)])):e("",!0)])]),l.agent.tools?(i(),h("div",na,[u[10]||(u[10]=b("h3",{class:"asset-detail-section-title"},"可用工具",-1)),b("div",ia,[s(g(C),{size:16},{default:c(()=>[s(g(W))]),_:1}),b("code",null,d(l.agent.tools),1)])])):e("",!0),s(ue,{path:j.value},null,8,["path"])])]),_:1}),s(g(se),{name:"content",tab:"codex"===l.platform?"配置":"提示词"},{default:c(()=>[b("pre",oa,d(x.value),1)]),_:1},8,["tab"])]),_:1})):(i(),h("div",ua,[s(g(C),{size:44,class:"asset-detail-empty-icon"},{default:c(()=>[s(g(T))]),_:1}),u[11]||(u[11]=b("p",null,"未选择代理",-1))]))])]),_:1})]),_:1},8,["show","width"]))}},ra={class:"config-edit-header"},ca={class:"config-edit-identity"},va={class:"config-edit-icon"},pa={class:"config-edit-title-stack"},ma={class:"config-edit-kicker"},ga={class:"config-edit-title"},fa={class:"config-edit-badges"},ya={class:"config-edit-section"},ha={class:"section-heading"},ba={class:"field-grid"},ka={class:"scope-option"},wa={class:"scope-path"},_a={class:"scope-option"},Ca={class:"scope-path"},xa={key:0,class:"platform-note"},ja={class:"config-edit-section"},Ma={class:"section-heading"},za={key:1,class:"empty-config-box"},Pa={key:0,class:"field-grid"},Oa={class:"field-grid"},Ua={key:0,class:"config-edit-section content-section"},Aa={class:"section-heading"},Na={class:"modal-footer"},La=j({__name:"AgentFormModal",props:{visible:{type:Boolean,default:!1},agent:{type:Object,default:null},projectPath:{type:String,default:null},platform:{type:String,default:"claude"}},emits:["update:visible","saved"],setup(l,{emit:n}){const o=l,m=n,f=r({get:()=>o.visible,set:e=>m("update:visible",e)}),k=r(()=>!!o.agent),w=r(()=>"codex"===o.platform),_=r(()=>"claude"===o.platform),j=r(()=>"omp"===o.platform),z=r(()=>["codex","opencode","omp"].includes(o.platform)),U=r(()=>k.value?"编辑代理":"创建代理"),A=r(()=>({claude:"Claude Code",codex:"Codex CLI",gemini:"Gemini CLI",opencode:"OpenCode",omp:"OMP"}[o.platform]||"Claude Code")),N=r(()=>"codex"===o.platform?"~/.codex/config.toml":"opencode"===o.platform?"~/.config/opencode/agents/":"gemini"===o.platform?"~/.gemini/agents/":"omp"===o.platform?"~/.omp/agent/agents/":"~/.claude/agents/"),I=r(()=>"opencode"===o.platform?".opencode/agents/":"gemini"===o.platform?".gemini/agents/":"omp"===o.platform?".omp/agents/":".claude/agents/"),$=r(()=>"project"===K.value.scope?"项目级":"用户级"),F=r(()=>Z.find(e=>e.value===K.value.configMode)?.label||"配置"),D=y(null),E=y(!1),H={maxHeight:"calc(92vh - 134px)",overflowY:"auto",paddingBottom:"18px"},J=[{label:"Sonnet",value:"sonnet"},{label:"Opus",value:"opus"},{label:"Haiku",value:"haiku"},{label:"继承 (inherit)",value:"inherit"}],Y=[{label:"默认 (default)",value:"default"},{label:"宽松 (permissive)",value:"permissive"},{label:"严格 (strict)",value:"strict"}],W=[{label:"Off",value:"off"},{label:"Minimal",value:"minimal"},{label:"Low",value:"low"},{label:"Medium",value:"medium"},{label:"High",value:"high"},{label:"XHigh",value:"xhigh"},{label:"Max",value:"max"}],Z=[{label:"仅描述",value:"none"},{label:"托管 TOML",value:"managed"},{label:"自定义路径",value:"custom"}],K=y({fileName:"",scope:"user",name:"",description:"",configMode:"none",configFile:"",configContent:"",tools:"",model:"",thinkingLevel:"",spawns:"",permissionMode:"",skills:"",systemPrompt:""}),le=r(()=>{const e={fileName:{required:!0,message:"请输入文件名",trigger:"blur"},scope:{required:!0,message:"请选择作用域",trigger:"change"},description:{required:!0,message:"请输入代理描述",trigger:"blur"}};return _.value&&(e.name={required:!0,message:"请输入代理名称",trigger:"blur"}),w.value&&(e.configMode={required:!0,message:"请选择配置模式",trigger:"change"},e.configFile={required:"custom"===K.value.configMode,message:"请输入自定义配置文件路径",trigger:"blur"}),e});function se(){K.value={fileName:"",scope:"user",name:"",description:"",configMode:"none",configFile:"",configContent:"",tools:"",model:"",thinkingLevel:"",spawns:"",permissionMode:"",skills:"",systemPrompt:""}}function te(){f.value=!1,se()}async function ne(){try{await(D.value?.validate())}catch{return}E.value=!0;try{const e={...K.value,projectPath:o.projectPath};w.value?("custom"===K.value.configMode?e.configFile=K.value.configFile:delete e.configFile,"managed"===K.value.configMode||"custom"===K.value.configMode?e.configContent=K.value.configContent||"":delete e.configContent):(delete e.configMode,delete e.configFile,delete e.configContent),k.value?(await async function(e,a,l,s="claude"){return(await ae.put(`/agents/${a}/${e}`,{...l,platform:s})).data}(K.value.fileName,K.value.scope,e,o.platform),R.success("代理更新成功")):(await async function(e,a="claude"){return(await ae.post("/agents",{...e,platform:a})).data}(e,o.platform),R.success("代理创建成功")),m("saved"),f.value=!1,se()}catch(e){R.error("操作失败: "+e.message)}finally{E.value=!1}}return u(()=>o.agent,e=>{if(e){const a=e.configMode||(e.configFile?String(e.configFile).includes("/.codex/agents/")?"managed":"custom":"none");K.value={fileName:e.fileName||"",scope:e.scope||"user",name:e.name||"",description:e.description||"",configMode:a,configFile:e.configFile||"",configContent:e.fullContent||"",tools:e.tools||"",model:e.model||"",thinkingLevel:e.thinkingLevel||"",spawns:e.spawns||"",permissionMode:e.permissionMode||"",skills:e.skills||"",systemPrompt:e.systemPrompt||""}}else se()},{immediate:!0}),u(()=>o.platform,e=>{"codex"===e&&(K.value.scope="user",K.value.configMode||(K.value.configMode="none"))},{immediate:!0}),(l,n)=>(i(),t(g(de),{show:f.value,"onUpdate:show":n[15]||(n[15]=e=>f.value=e),preset:"card",title:U.value,style:{width:"min(940px, 96vw)","max-height":"92vh"},"content-style":H,"mask-closable":!1,class:"config-edit-modal"},{footer:c(()=>[b("div",Na,[s(g(x),{onClick:te},{default:c(()=>[...n[23]||(n[23]=[a("取消",-1)])]),_:1}),s(g(x),{type:"primary",loading:E.value,onClick:ne},{icon:c(()=>[s(g(C),null,{default:c(()=>[s(g(X))]),_:1})]),default:c(()=>[a(" "+d(k.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:c(()=>[b("div",ra,[b("div",ca,[b("span",va,[s(g(C),{size:22},{default:c(()=>[s(g(V))]),_:1})]),b("div",pa,[b("span",ma,d(A.value),1),b("span",ga,d(k.value?K.value.fileName||"编辑代理":"创建新代理"),1)])]),b("div",fa,[s(g(q),{size:"small",bordered:!1,type:"info"},{default:c(()=>[a(d($.value),1)]),_:1}),w.value?(i(),t(g(q),{key:0,size:"small",bordered:!1,type:"success"},{default:c(()=>[...n[16]||(n[16]=[a("Codex 用户级",-1)])]),_:1})):e("",!0),w.value&&"none"!==K.value.configMode?(i(),t(g(q),{key:1,size:"small",bordered:!1,type:"warning"},{default:c(()=>[a(d(F.value),1)]),_:1})):e("",!0)])]),s(g(O),{ref_key:"formRef",ref:D,model:K.value,rules:le.value,"label-placement":"top","require-mark-placement":"right-hanging",class:"config-edit-form"},{default:c(()=>[b("div",{class:p(["config-edit-grid",{"is-codex":w.value}])},[b("section",ya,[b("div",ha,[s(g(C),{size:16},{default:c(()=>[s(g(Q))]),_:1}),n[17]||(n[17]=b("span",null,"基础信息",-1))]),b("div",ba,[s(g(P),{label:"文件名",path:"fileName"},{default:c(()=>[s(g(B),{value:K.value.fileName,"onUpdate:value":n[0]||(n[0]=e=>K.value.fileName=e),disabled:k.value,placeholder:"code-reviewer"},null,8,["value","disabled"])]),_:1}),_.value?(i(),t(g(P),{key:0,label:"显示名称",path:"name"},{default:c(()=>[s(g(B),{value:K.value.name,"onUpdate:value":n[1]||(n[1]=e=>K.value.name=e),placeholder:"代理的显示名称"},null,8,["value"])]),_:1})):e("",!0)]),s(g(P),{label:"作用域",path:"scope"},{default:c(()=>[s(g(L),{value:K.value.scope,"onUpdate:value":n[2]||(n[2]=e=>K.value.scope=e),disabled:k.value,class:p(["scope-picker",{"single-option":w.value}])},{default:c(()=>[s(g(S),{value:"user"},{default:c(()=>[b("span",ka,[n[18]||(n[18]=b("span",{class:"scope-title"},"用户级",-1)),b("span",wa,d(N.value),1)])]),_:1}),w.value?e("",!0):(i(),t(g(S),{key:0,value:"project"},{default:c(()=>[b("span",_a,[n[19]||(n[19]=b("span",{class:"scope-title"},"项目级",-1)),b("span",Ca,d(I.value),1)])]),_:1}))]),_:1},8,["value","disabled","class"])]),_:1}),s(g(P),{label:"描述",path:"description"},{default:c(()=>[s(g(B),{value:K.value.description,"onUpdate:value":n[3]||(n[3]=e=>K.value.description=e),type:"textarea",autosize:{minRows:3,maxRows:5},placeholder:"一句话说明这个代理什么时候该被调用"},null,8,["value"])]),_:1}),w.value?(i(),h("div",xa,[s(g(C),{size:16},{default:c(()=>[s(g(G))]),_:1}),n[20]||(n[20]=b("span",null,[a("Codex agents 写入用户级配置。描述会进入 "),b("code",null,"~/.codex/config.toml"),a(",TOML 配置可托管到 "),b("code",null,"~/.codex/agents/"),a("。")],-1))])):e("",!0)]),b("section",ja,[b("div",Ma,[s(g(C),{size:16},{default:c(()=>[s(g(ee))]),_:1}),b("span",null,d(w.value?"运行配置":"模型与权限"),1)]),w.value?(i(),h(v,{key:0},[s(g(P),{label:"配置模式",path:"configMode"},{default:c(()=>[s(g(M),{value:K.value.configMode,"onUpdate:value":n[4]||(n[4]=e=>K.value.configMode=e),options:Z,placeholder:"选择配置模式"},null,8,["value"])]),_:1}),"custom"===K.value.configMode?(i(),t(g(P),{key:0,label:"配置文件路径",path:"configFile"},{default:c(()=>[s(g(B),{value:K.value.configFile,"onUpdate:value":n[5]||(n[5]=e=>K.value.configFile=e),placeholder:"~/.omx/agents/my-agent.toml"},null,8,["value"])]),_:1})):e("",!0),"none"===K.value.configMode?(i(),h("div",za,[s(g(C),{size:18},{default:c(()=>[s(g(T))]),_:1}),n[21]||(n[21]=b("span",null,"仅保存代理描述,不额外写入模型或工具配置。",-1))])):(i(),t(g(P),{key:2,label:"Agent Config (TOML)",path:"configContent",class:"editor-form-item"},{default:c(()=>[s(g(B),{value:K.value.configContent,"onUpdate:value":n[6]||(n[6]=e=>K.value.configContent=e),type:"textarea",autosize:{minRows:14,maxRows:22},class:"toml-editor",placeholder:'model = "gpt-5.4"'},null,8,["value"])]),_:1}))],64)):(i(),h(v,{key:1},[s(g(P),{label:"可用工具",path:"tools"},{default:c(()=>[s(g(B),{value:K.value.tools,"onUpdate:value":n[7]||(n[7]=e=>K.value.tools=e),placeholder:j.value?"read, edit, bash(逗号分隔)":"Read, Edit, Bash"},null,8,["value","placeholder"])]),_:1}),s(g(P),{label:"模型",path:"model"},{default:c(()=>[z.value?(i(),t(g(B),{key:0,value:K.value.model,"onUpdate:value":n[8]||(n[8]=e=>K.value.model=e),placeholder:j.value?"@default、@review 或 provider/model;多个候选用逗号分隔":"gpt-5, claude-sonnet-4, openrouter/model"},null,8,["value","placeholder"])):(i(),t(g(M),{key:1,value:K.value.model,"onUpdate:value":n[9]||(n[9]=e=>K.value.model=e),options:J,placeholder:"选择模型",clearable:""},null,8,["value"]))]),_:1}),j.value?(i(),h("div",Pa,[s(g(P),{label:"思考级别",path:"thinkingLevel"},{default:c(()=>[s(g(M),{value:K.value.thinkingLevel,"onUpdate:value":n[10]||(n[10]=e=>K.value.thinkingLevel=e),options:W,placeholder:"使用模型默认级别",clearable:""},null,8,["value"])]),_:1}),s(g(P),{label:"可调用的子 Agent",path:"spawns"},{default:c(()=>[s(g(B),{value:K.value.spawns,"onUpdate:value":n[11]||(n[11]=e=>K.value.spawns=e),placeholder:"* 或 reviewer, scout"},null,8,["value"])]),_:1})])):e("",!0),b("div",Oa,["opencode"===o.platform||j.value?e("",!0):(i(),t(g(P),{key:0,label:"权限模式",path:"permissionMode"},{default:c(()=>[s(g(M),{value:K.value.permissionMode,"onUpdate:value":n[12]||(n[12]=e=>K.value.permissionMode=e),options:Y,placeholder:"选择权限模式",clearable:""},null,8,["value"])]),_:1})),"opencode"===o.platform||j.value?e("",!0):(i(),t(g(P),{key:1,label:"技能",path:"skills"},{default:c(()=>[s(g(B),{value:K.value.skills,"onUpdate:value":n[13]||(n[13]=e=>K.value.skills=e),placeholder:"自动加载的技能,逗号分隔"},null,8,["value"])]),_:1}))])],64))]),w.value?e("",!0):(i(),h("section",Ua,[b("div",Aa,[s(g(C),{size:16},{default:c(()=>[s(g(T))]),_:1}),n[22]||(n[22]=b("span",null,"系统提示词",-1))]),s(g(P),{path:"systemPrompt","show-label":!1,class:"editor-form-item"},{default:c(()=>[s(re,{modelValue:K.value.systemPrompt,"onUpdate:modelValue":n[14]||(n[14]=e=>K.value.systemPrompt=e),rows:10,"min-height":240,placeholder:"定义代理的行为、边界和输出要求","default-editing":!k.value},null,8,["modelValue","default-editing"])]),_:1})]))],2)]),_:1},8,["model","rules"])]),_:1},8,["show","title"]))}},[["__scopeId","data-v-ea89272f"]]),Ia={key:0,class:"asset-panel-header"},Sa={class:"asset-title-group"},$a={class:"asset-heading"},Fa={class:"asset-title-row"},Da={class:"asset-platform-pill"},Ra={key:0,class:"asset-action-row"},Ba={key:1,class:"asset-drawer-toolbar"},qa={key:0,class:"asset-action-row"},Ea={key:2,class:"omp-model-roles"},Ta={class:"omp-model-roles-toolbar"},Ha={class:"omp-model-roles-copy"},Ja={key:0,class:"omp-model-roles-stale"},Va={key:1,class:"omp-model-roles-error"},Ga={class:"asset-summary"},Ya={class:"asset-summary-item"},Wa={class:"asset-summary-value"},Xa={class:"asset-summary-item"},Za={class:"asset-summary-value"},Ka={class:"asset-summary-item"},Qa={class:"asset-summary-value"},el={class:"asset-summary-item"},al={class:"asset-summary-value"},ll={class:"asset-filter-bar"},sl={class:"asset-panel-content"},tl={key:0,class:"asset-empty"},nl={key:1,class:"asset-list"},il={class:"asset-footer"},ol=j({__name:"AgentsPanel",props:{hideBack:{type:Boolean,default:!1},inDrawer:{type:Boolean,default:!1},projectPath:{type:String,default:null},platform:{type:String,default:""}},emits:["back","updated"],setup(o,{emit:m}){const k=o,w=m,_=pe(),j=f(),P=y([]),O=y(!1),A=y(""),L=y("all"),I=y(!1),S=y(!1),$=y(null),D=y(!1),q=y(null),T=y({}),W=y({}),X=y({}),Z=y([]),Q=y(""),ee=y([]),se=y([]),oe=r(()=>new Set(ee.value.map(e=>e.value))),ue=y(!1),de=y(!1),re=y(""),me=r(()=>JSON.stringify(_e())!==Q.value);let ge=0;const{byCapability:fe}=z(),ye=r(()=>fe("agents").map(e=>e.key)),he=r(()=>ye.value.includes(je.value)),ke=["default","smol","slow","plan","commit","vision","designer","task","advisor","tiny"],we=["minimal","low","medium","high","xhigh","max"].map(e=>({label:e,value:e}));function _e(){return Object.fromEntries(Z.value.map(e=>[e.key,{model:e.model||"",thinkingLevel:e.thinkingLevel||""}]))}function Ce(e={}){const a=e.roles&&"object"==typeof e.roles?e.roles:{};Z.value=ke.map(e=>({key:e,model:"string"==typeof a[e]?.model?a[e].model:"",thinkingLevel:"string"==typeof a[e]?.thinkingLevel?a[e].thinkingLevel:""})),Q.value=JSON.stringify(_e()),ee.value=(Array.isArray(e.modelOptions)?e.modelOptions:[]).filter(e=>"string"==typeof e&&e.trim()).map(e=>({label:e,value:e})),se.value=e.unavailableRoles&&"object"==typeof e.unavailableRoles?Object.keys(e.unavailableRoles).filter(a=>!0===e.unavailableRoles[a]):[]}function xe(e,a){return e?.data?.error||e?.response?.data?.error||e?.message||a}const je=r(()=>String(k.platform||ve(j)||"").trim().toLowerCase()),Me=r(()=>"opencode"===je.value?"使用 @agent 或 Task 在 OpenCode 中调用":"omp"===je.value?"OMP Agent 由 task 工具按名称调用;模型可在 Agent 配置中单独指定":"gemini"===je.value?"使用 @agent 调用 Gemini 自定义代理":"使用 Task tool 调用自定义代理"),ze=r(()=>{const e=_.get(je.value)||ce(je.value);return e.label||e.title||"Claude Code"}),Pe=[{label:"全部",value:"all"},{label:"用户级",value:"user"},{label:"项目级",value:"project"},{label:"已托管",value:"managed"}],Oe=r(()=>P.value.filter(e=>"user"===e.scope).length),Ue=r(()=>P.value.filter(e=>"project"===e.scope).length),Ae=r(()=>Object.keys(W.value).length);function Ne(e){if(!e)return"";const a="string"==typeof e.scope&&e.scope.trim()?e.scope.trim():"unknown",l="string"==typeof e.path&&e.path.trim()?e.path.trim():"",s="string"==typeof e.fileName&&e.fileName.trim()?e.fileName.trim():"";return`${a}:${l||s}`}function Ie(e){if(!e)return"";const a=[];if("string"==typeof e.path&&e.path.trim()&&a.push(e.path.trim()),"string"==typeof e.fileName&&e.fileName.trim()){const l=e.fileName.trim();a.push(`${l}.md`,l)}"string"==typeof e.name&&e.name.trim()&&a.push(e.name.trim());for(const l of a)if(W.value[l])return l;return a[0]||""}const Se=r(()=>{let e=P.value;if("user"===L.value?e=e.filter(e=>"user"===e.scope):"project"===L.value?e=e.filter(e=>"project"===e.scope):"managed"===L.value&&(e=e.filter(e=>W.value[Ie(e)])),A.value.trim()){const a=A.value.toLowerCase();e=e.filter(e=>e.name?.toLowerCase().includes(a)||e.description?.toLowerCase().includes(a)||e.fileName?.toLowerCase().includes(a))}return e}),$e=r(()=>A.value?"没有匹配的代理":"user"===L.value?"暂无用户级代理":"project"===L.value?"暂无项目级代理":"managed"===L.value?"暂无托管的代理":he.value?"暂无自定义代理":`${ze.value} 暂未提供 Agents 能力`);async function Fe(){if(!he.value)return P.value=[],W.value={},void(O.value=!1);O.value=!0;try{const[e,a]=await Promise.all([be(k.projectPath,je.value),ie("agents",{platform:je.value,projectPath:k.projectPath})]);if(e.success&&(P.value=e.agents||[]),a.success){W.value={};for(const[e,l]of Object.entries(a.items||{}))W.value[e]=l}}catch(e){R.error("加载代理列表失败: "+e.message)}finally{O.value=!1}}async function De(e,a){const l=Ie(e);if(l){X.value[l]=!0;try{(await le("agents",l,a)).success&&(R.success(a?"已启用":"已禁用"),await Fe())}catch(s){R.error("切换失败: "+s.message)}finally{delete X.value[l]}}else R.error("未找到代理对应的托管配置键")}async function Re(e,a,l){const s=Ie(e);if(s){X.value[s]=!0;try{(await ne("agents",s,a,l)).success&&(R.success(`${a} ${l?"已启用":"已禁用"}`),await Fe())}catch(t){R.error("切换失败: "+t.message)}finally{delete X.value[s]}}else R.error("未找到代理对应的托管配置键")}async function Be(){O.value=!0;try{const e=await te("agents");e?.success||R.warning(e?.message||"同步失败,已继续刷新列表")}catch(e){R.warning("同步失败,已继续刷新列表: "+e.message)}await Fe()}async function qe(){if("omp"===je.value){ue.value=!0,re.value="";try{const{data:e}=await ae.get("/settings/omp-model-roles");Ce(e)}catch(e){re.value=`加载 OMP 角色配置失败:${xe(e,"未知错误")}`}finally{ue.value=!1}}}async function Ee(){if(!(ue.value||de.value||re.value)){de.value=!0;try{const{data:e}=await ae.put("/settings/omp-model-roles",{roles:_e()});Ce(e),R.success("OMP 模型角色配置已保存")}catch(e){R.error(`保存 OMP 角色配置失败:${xe(e,"未知错误")}`)}finally{de.value=!1}}}function Te(){q.value=null,I.value=!0}function He(e){I.value=e,e||(q.value=null)}function Je(e){Ge(e,!0)}async function Ve(e){const a=Ne(e);T.value[a]=!0;try{(await async function(e,a,l=null,s="claude"){const t={};return s&&(t.platform=s),l&&(t.projectPath=l),(await ae.delete(`/agents/${a}/${e}`,{params:t})).data}(e.fileName,e.scope,k.projectPath,je.value)).success&&(R.success("代理已删除"),await Fe(),w("updated"))}catch(l){R.error("删除失败: "+l.message)}finally{delete T.value[a]}}async function Ge(e,a=!1){if(!e)return;const l=++ge;D.value=!0,a||($.value=null,S.value=!0);try{const s=await async function(e,a,l=null,s="claude"){const t={};s&&(t.platform=s),l&&(t.projectPath=l);const n=E(`agent-detail:${e}`,s,a||"",l||"");return N(n,l=>ae.get(`/agents/${a}/${e}`,{params:t,signal:l}).then(e=>e.data),"agent-detail",`agent-detail:${s}`)}(e.fileName,e.scope,k.projectPath,je.value);if(l!==ge)return;const t=s?.agent||e;a?(q.value=t,I.value=!0):$.value=t}catch(s){if(l!==ge)return;R.error("加载代理详情失败: "+s.message),a?(q.value=e,I.value=!0):$.value=e}finally{l===ge&&(D.value=!1)}}function Ye(e){Ge(e,!1)}function We(){q.value=null,Fe(),w("updated")}function Xe(){w("back")}return n(()=>{Fe(),qe()}),u(je,()=>{ge+=1,D.value=!1,$.value=null,Fe(),qe()}),(n,u)=>(i(),h("div",{class:p(["agents-panel asset-panel",{"in-drawer":k.inDrawer}])},[k.inDrawer?e("",!0):(i(),h("div",Ia,[b("div",Sa,[k.hideBack?e("",!0):(i(),t(g(x),{key:0,text:"",onClick:Xe,class:"back-btn"},{icon:c(()=>[s(g(C),null,{default:c(()=>[s(g(H))]),_:1})]),_:1})),b("div",$a,[b("div",Fa,[u[3]||(u[3]=b("span",{class:"asset-title"},"代理管理",-1)),b("span",Da,d(ze.value),1)]),u[4]||(u[4]=b("div",{class:"asset-subtitle"},"维护自定义代理、工具权限和平台启用状态",-1))])]),he.value?(i(),h("div",Ra,[s(g(x),{text:"",onClick:Te,class:"action-btn"},{icon:c(()=>[s(g(C),null,{default:c(()=>[s(g(J))]),_:1})]),default:c(()=>[u[5]||(u[5]=a(" 创建 ",-1))]),_:1}),s(g(x),{text:"",onClick:Be,loading:O.value,class:"action-btn"},{icon:c(()=>[s(g(C),null,{default:c(()=>[s(g(Y))]),_:1})]),default:c(()=>[u[6]||(u[6]=a(" 刷新 ",-1))]),_:1},8,["loading"])])):e("",!0)])),k.inDrawer?(i(),h("div",Ba,[he.value?(i(),h("div",qa,[s(g(x),{text:"",onClick:Te,class:"action-btn"},{icon:c(()=>[s(g(C),null,{default:c(()=>[s(g(J))]),_:1})]),default:c(()=>[u[7]||(u[7]=a(" 创建 ",-1))]),_:1}),s(g(x),{text:"",onClick:Be,loading:O.value,class:"action-btn"},{icon:c(()=>[s(g(C),null,{default:c(()=>[s(g(Y))]),_:1})]),default:c(()=>[u[8]||(u[8]=a(" 刷新 ",-1))]),_:1},8,["loading"])])):e("",!0)])):e("",!0),"omp"===je.value?(i(),h("div",Ea,[b("div",Ta,[b("div",Ha,[u[10]||(u[10]=b("strong",null,"OMP 模型角色",-1)),u[11]||(u[11]=b("span",null,"候选模型只取当前启用渠道。原生 OAuth 渠道读取允许模型列表(未设置时读取已声明模型),并使用 OAuth provider ID 作为前缀;OAuth Auth Gateway 使用该托管渠道的模型配置。思考强度会写入选择器后缀,例如 :high。",-1)),se.value.length?(i(),h("span",Ja," 以下角色当前指向未启用渠道模型:"+d(se.value.join("、"))+"。请切换到已启用渠道中的模型,或清空对应角色。 ",1)):e("",!0),re.value?(i(),h("div",Va,[b("span",null,d(re.value),1),s(g(x),{text:"",size:"tiny",disabled:ue.value,onClick:qe},{default:c(()=>[...u[9]||(u[9]=[a("重试",-1)])]),_:1},8,["disabled"])])):e("",!0)]),s(g(x),{type:"primary",size:"small",loading:de.value,disabled:ue.value||!!re.value||de.value||!me.value,onClick:Ee},{default:c(()=>[...u[12]||(u[12]=[a(" 保存角色配置 ",-1)])]),_:1},8,["loading","disabled"])]),u[13]||(u[13]=b("div",{class:"omp-model-roles-header"},[b("span",null,"角色"),b("span",null,"模型"),b("span",null,"思考强度")],-1)),(i(!0),h(v,null,l(Z.value,e=>(i(),h("div",{key:e.key,class:"omp-model-role-row"},[b("strong",null,d(e.key),1),s(g(M),{value:e.model,"onUpdate:value":a=>e.model=a,options:ee.value,placeholder:"请选择已启用渠道模型",filterable:"",clearable:"",size:"small",disabled:ue.value||!!re.value||de.value},null,8,["value","onUpdate:value","options","disabled"]),s(g(M),{value:e.thinkingLevel,"onUpdate:value":a=>e.thinkingLevel=a,options:g(we),placeholder:"跟随默认",clearable:"",size:"small",disabled:ue.value||!!re.value||de.value||!oe.value.has(e.model)},null,8,["value","onUpdate:value","options","disabled"])]))),128))])):e("",!0),b("div",Ga,[b("span",Ya,[u[14]||(u[14]=b("span",{class:"asset-summary-label"},"全部",-1)),b("span",Wa,d(P.value.length),1)]),b("span",Xa,[u[15]||(u[15]=b("span",{class:"asset-summary-label"},"用户级",-1)),b("span",Za,d(Oe.value),1)]),b("span",Ka,[u[16]||(u[16]=b("span",{class:"asset-summary-label"},"项目级",-1)),b("span",Qa,d(Ue.value),1)]),b("span",el,[u[17]||(u[17]=b("span",{class:"asset-summary-label"},"托管",-1)),b("span",al,d(Ae.value),1)])]),b("div",ll,[s(g(B),{value:A.value,"onUpdate:value":u[0]||(u[0]=e=>A.value=e),placeholder:"搜索代理、描述或文件名",clearable:"",size:"small",class:"asset-search"},{prefix:c(()=>[s(g(C),null,{default:c(()=>[s(g(K))]),_:1})]),_:1},8,["value"]),s(g(M),{value:L.value,"onUpdate:value":u[1]||(u[1]=e=>L.value=e),options:Pe,size:"small",class:"asset-filter"},null,8,["value"])]),b("div",sl,[s(g(U),{show:O.value},{default:c(()=>[0!==Se.value.length||O.value?(i(),h("div",nl,[(i(!0),h(v,null,l(Se.value,e=>(i(),t(Le,{key:Ne(e),agent:e,deleting:!!T.value[Ne(e)],"registry-info":W.value[Ie(e)],toggling:!!X.value[Ie(e)],onEdit:Je,onDelete:Ve,onClick:Ye,onToggleEnabled:De,onTogglePlatform:Re},null,8,["agent","deleting","registry-info","toggling"]))),128))])):(i(),h("div",tl,[s(g(F),{description:$e.value},{icon:c(()=>[s(g(C),{size:"48",color:"var(--text-quaternary)"},{default:c(()=>[s(g(V))]),_:1})]),extra:c(()=>[he.value?(i(),t(g(x),{key:0,size:"small",onClick:Te},{default:c(()=>[...u[18]||(u[18]=[a(" 创建第一个代理 ",-1)])]),_:1})):e("",!0)]),_:1},8,["description"])]))]),_:1},8,["show"])]),b("div",il,[s(g(C),{size:"14",class:"asset-info-icon"},{default:c(()=>[s(g(G))]),_:1}),b("span",null,d(Me.value),1)]),s(La,{visible:I.value,"onUpdate:visible":He,agent:q.value,"project-path":o.projectPath,platform:je.value,onSaved:We},null,8,["visible","agent","project-path","platform"]),s(da,{visible:S.value,"onUpdate:visible":u[2]||(u[2]=e=>S.value=e),agent:$.value,platform:je.value,loading:D.value},null,8,["visible","agent","platform","loading"])],2))}},[["__scopeId","data-v-393fa5d6"]]),ul={class:"preset-panel"},dl={class:"toolbar"},rl={key:0,class:"empty"},cl={key:1,class:"preset-list"},vl=["onClick"],pl={key:1,class:"editor"},ml={class:"editor-title"},gl={class:"field-grid"},fl={class:"wide"},yl={class:"wide"},hl={class:"editor-actions"},bl={key:0,class:"hint"},kl=j({__name:"DshAgentPresetsPanel",setup(o){const u=me(),m=y([]),f=y(""),k=y([]),w=y(null),_=y(""),C=y(!1),j=y(!1),z=y(!1),P=y(""),O=y(!1),N=y(!1),L=y("[]"),I=y({id:"",name:"",description:"",order:0,plugins:[],builtIn:!1}),S=r(()=>m.value.map(e=>({label:e.name,value:e.name})));async function F(){if(f.value){C.value=!0,P.value="";try{const e=await fe(f.value);if(k.value=e.presets||[],w.value=e.revision??null,_.value){const e=k.value.find(e=>e.id===_.value);e?D(e):(O.value=!1,_.value="")}}catch(e){P.value=e.message||"读取 Agent 预设失败"}finally{C.value=!1}}}function D(e){_.value=e.id,I.value={...e,plugins:Array.isArray(e.plugins)?e.plugins:[]},L.value=JSON.stringify(I.value.plugins,null,2),N.value=!1,O.value=!0}function R(){_.value="",I.value={id:"",name:"",description:"",order:0,plugins:[],builtIn:!1},L.value="[]",N.value=!0,O.value=!0}async function q(){let e;try{e=JSON.parse(L.value||"[]")}catch(a){return void u.error("插件声明必须是有效的 JSON 数组")}if(Array.isArray(e)){j.value=!0;try{await ge(f.value,{id:I.value.id,name:I.value.name,description:I.value.description,order:I.value.order,plugins:e},w.value),u.success("Agent 预设已保存"),_.value=I.value.id,await F()}catch(l){u.error(l.message||"保存失败,请刷新后重试")}finally{j.value=!1}}else u.error("插件声明必须是数组")}async function E(){z.value=!0;try{await he(f.value,I.value.id,w.value),u.success("自定义 Agent 预设已删除"),_.value="",O.value=!1,await F()}catch(e){u.error(e.message||"删除失败,请刷新后重试")}finally{z.value=!1}}return n(async()=>{try{m.value=await ye(),f.value=m.value[0]?.name||"",f.value&&await F()}catch(e){P.value=e.message||"读取 DSH Profile 失败"}}),(n,o)=>(i(),h("div",ul,[b("div",dl,[s(g(M),{value:f.value,"onUpdate:value":[o[0]||(o[0]=e=>f.value=e),F],options:S.value,placeholder:"选择 DSH Profile",size:"small"},null,8,["value","options"]),s(g(x),{size:"small",disabled:!f.value,onClick:R},{default:c(()=>[...o[7]||(o[7]=[a("新建预设",-1)])]),_:1},8,["disabled"]),s(g(x),{size:"small",loading:C.value,onClick:F},{default:c(()=>[...o[8]||(o[8]=[a("刷新",-1)])]),_:1},8,["loading"])]),P.value?(i(),t(g($),{key:0,type:"error","show-icon":!1},{default:c(()=>[a(d(P.value),1)]),_:1})):e("",!0),s(g(U),{show:C.value},{default:c(()=>[C.value||0!==k.value.length?(i(),h("div",cl,[(i(!0),h(v,null,l(k.value,e=>(i(),h("button",{key:e.id,class:p(["preset-item",{selected:_.value===e.id}]),onClick:a=>D(e)},[b("strong",null,d(e.name||e.id),1),b("span",null,d(e.description||e.id),1),b("small",null,d(e.builtIn?"内置预设":"自定义预设"),1)],10,vl))),128))])):(i(),h("div",rl,"该 Profile 尚无 Agent 预设"))]),_:1},8,["show"]),O.value?(i(),h("div",pl,[b("div",ml,d(N.value?"新建 Agent 预设":I.value.name||I.value.id),1),b("div",gl,[b("label",null,[o[9]||(o[9]=a("预设 ID",-1)),s(g(B),{value:I.value.id,"onUpdate:value":o[1]||(o[1]=e=>I.value.id=e),disabled:!N.value,placeholder:"例如 review"},null,8,["value","disabled"])]),b("label",null,[o[10]||(o[10]=a("显示名称",-1)),s(g(B),{value:I.value.name,"onUpdate:value":o[2]||(o[2]=e=>I.value.name=e),placeholder:"可选"},null,8,["value"])]),b("label",null,[o[11]||(o[11]=a("排序",-1)),s(g(A),{value:I.value.order,"onUpdate:value":o[3]||(o[3]=e=>I.value.order=e),min:0},null,8,["value"])]),b("label",fl,[o[12]||(o[12]=a("描述",-1)),s(g(B),{value:I.value.description,"onUpdate:value":o[4]||(o[4]=e=>I.value.description=e),placeholder:"可选"},null,8,["value"])]),b("label",yl,[o[13]||(o[13]=a("插件声明(JSON 格式的 YAML) ",-1)),s(g(B),{value:L.value,"onUpdate:value":o[5]||(o[5]=e=>L.value=e),type:"textarea",autosize:{minRows:8,maxRows:18},spellcheck:"false"},null,8,["value"])])]),b("div",hl,[s(g(x),{type:"primary",loading:j.value,onClick:q},{default:c(()=>[...o[14]||(o[14]=[a("保存预设",-1)])]),_:1},8,["loading"]),N.value||I.value.builtIn?e("",!0):(i(),t(g(x),{key:0,type:"error",secondary:"",loading:z.value,onClick:E},{default:c(()=>[...o[15]||(o[15]=[a("删除",-1)])]),_:1},8,["loading"])),s(g(x),{onClick:o[6]||(o[6]=e=>O.value=!1)},{default:c(()=>[...o[16]||(o[16]=[a("取消",-1)])]),_:1})]),I.value.builtIn?(i(),h("div",bl,"保存后会在当前 Profile 覆盖内置预设。")):e("",!0)])):e("",!0)]))}},[["__scopeId","data-v-b33b4ced"]]),wl={class:"drawer-header"},_l=j({__name:"AgentsDrawer",props:{visible:Boolean,platform:{type:String,default:""}},emits:["update:visible"],setup(e,{emit:a}){const l=e,n=a,{drawerWidth:o}=w(720),u=r({get:()=>l.visible,set:e=>n("update:visible",e)}),v={padding:0,display:"flex",flexDirection:"column",overflow:"hidden"};return(e,a)=>(i(),t(g(k),{show:u.value,"onUpdate:show":a[1]||(a[1]=e=>u.value=e),width:g(o),placement:"right","mask-closable":!0},{default:c(()=>[s(g(_),{closable:"","native-scrollbar":!1,"body-content-style":v},{header:c(()=>[b("div",wl,[b("span",null,d("dsh"===l.platform?"Agent 预设管理":"代理管理"),1)])]),default:c(()=>["dsh"===l.platform?(i(),t(kl,{key:0})):(i(),t(ol,{key:1,onBack:a[0]||(a[0]=e=>u.value=!1),"hide-back":!0,"in-drawer":!0,platform:l.platform},null,8,["platform"]))]),_:1})]),_:1},8,["show","width"]))}},[["__scopeId","data-v-de75708b"]]);export{_l as default};