@chengdb/capability-panel
Capability Panel
dsh 插件:从网页界面浏览和管理项目级及全局功能(技能、MCP 服务器等)
插件会安装到这里;不确定时保持 web。
npx -y @deepseek-ai/dsh plugin --profile web add github:chengdb/dsh-plugin-capability-panel#2c91d4337961131fb822819bbe888bb84313ea83


@chengdb/capability-panel
dsh 插件:从网页界面浏览和管理项目级及全局功能(技能、MCP 服务器等)
插件会安装到这里;不确定时保持 web。
npx -y @deepseek-ai/dsh plugin --profile web add github:chengdb/dsh-plugin-capability-panel#2c91d4337961131fb822819bbe888bb84313ea83







Capability Panel 以 @chengdb/capability-panel 发布,当前版本为 1.0.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。
一个 DeepSeek Harness(DSH)插件: 在 Web GUI 里可视化管理项目的全部能力——Skills、MCP 服务器、快捷消息, 全部支持项目级 / 全局级双作用域,全部可以不离开浏览器完成安装、启停与分发。
| 能力域 | 浏览/搜索 | 新增/安装 | 编辑 | 启用/禁用 | 删除 | 导入/导出 |
|---|---|---|---|---|---|---|
| Skills | ✅ 项目/全局两区 + 详情 | ✅ 上传 / 宿主路径 / URL 三种来源 | ✅ | ✅ 项目区启停 + 模型/用户方向独立开关 | ✅ 两击确认 | ✅ 导入到本项目(物理副本)/ 在本项目禁用(屏蔽占位)/ 下载 zip / 复制到宿主目录 |
| MCP 服务器 | ✅ 项目/全局两区 + 实时挂载状态 | ✅ 表单新增(stdio/sse/http) | ✅ | ✅ 项目区启停 + 写后热重挂 | ✅ | ✅ 导入到本项目(引用,跟随全局)/ .mcp.json 与 Claude Code 格式兼容 |
| 快捷消息 | ✅ 项目/全局两区 + 搜索 | ✅ 多行正文 | ✅ | ✅ 项目区启停 | ✅ | ✅ 导入到本项目(引用,跟随全局)/ JSON 配置文件即数据 |
本插件的配置文件写入优先用 .agents 目录,读取兼容旧位置与跨工具生态:
| 配置 | 写入目标 | 读取兼容(旧位置) |
|---|---|---|
| 项目级能力禁用声明(MCP 弹层「本项目」开关) | <项目根>/.agents/capability-overrides.json | .dsh → .claude |
| 项目级「全局能力引用」声明(MCP / 快捷消息的导入) | <项目根>/.agents/capability-imports.json | — |
| 项目级快捷消息 | <项目根>/.agents/quick-messages.json | .dsh → .claude |
| 全局 MCP 服务器 | ~/.agents/mcp.json | ~/.dsh → ~/.claude |
| 全局快捷消息 | ~/.agents/quick-messages.json | ~/.dsh → ~/.claude |
| Skills(项目/全局) | .agents/skills、~/.agents/skills | .dsh/skills(可写)、.claude/skills(只读展示) |
| 项目 MCP 服务器 | <项目根>/.mcp.json(Claude Code 标准,位置不变) | — |
首次写入新位置时,旧文件内容会自动并入并删除(不丢配置、不留两份)。
.agents 与 .dsh 同时参与"项目根"判定(.claude 也纳入),换目录 / 换
工具搬家都不会影响配置归属。
侧栏底部(Settings 旁)新增「能力面板」入口,点击弹出锚定浮层。面板顶部在 快捷消息 / Skills / MCP 三个域之间切换,每个域内部再按 项目 / 全局 两区分离——项目区只列本项目配置里的条目,全局区只列全局配置,两区都支持 关键词搜索。头部下拉框还可以把"项目"钉选到任意已知工作区——不切 session 也能管理别的项目。
.md、整个 skill 目录、或 .zip 压缩包
(浏览器端 DecompressionStream 解压,零依赖);路径防穿越,
200 文件 / 20MB 上限。.md 复制进受管根。https://github.com/<owner>/<repo>,可带
/tree/<branch>/<子目录>)、任意 .zip、raw .md
(宿主端 30MB / 30s 限速)。压缩包/仓库归档自动剥离公共顶层目录并定位唯一 SKILL.md;落盘名以
frontmatter 的 name 为准,同名冲突报错、可选覆盖。磁盘格式与官方
filesystem provider 逐字节兼容(flat <name>.md / 目录型
<name>/SKILL.md),装完立刻可被 agent 调用。安装目标随所在区固定:
项目区只装进项目根,全局区只装进全局根。
导出同样简单:flat skill 直接下载 .md,目录型 skill 在浏览器端打成
store-only zip;也可以复制到宿主任意目录。
全局区没有启停也没有调用方向开关——全局技能恒定可用(对所有项目可见、 agent 可直接调用),面板在全局区提供的是「导入到本项目」「在本项目禁用 / 恢复」、导出与删除(见下一节)。启用/禁用只发生在项目区。
项目区详情卡上有「已启用 / 已禁用」状态按钮(文字与颜色随状态变化)。
禁用只写入 user-invocable: false + disable-model-invocation: true
两个扁平键——正文与其它元数据原样保留,启用即清除恢复。禁用的 skill 会
立刻从输入框的 Skills 快捷弹层中消失。只读条目(.claude 兼容根)不显示
操作按钮。
调用方式可以按方向细调:详情卡的「调用方式」字段上,「模型调用」与
「用户调用」两个方向各自独立开关——比如某个 skill 只希望用户 /name
手动触发、不需要 agent 自动注入,关掉「模型调用」即可,frontmatter
只写入 disable-model-invocation: true,user-invocable 原样保留
(反之亦然)。两个方向都关等价于一键禁用,恢复同理;写盘保持最小化,
启用即清除对应键。两个方向状态不一致时,整体按钮显示「部分禁用」。
左侧列表行不堆文字标签:项目区行只保留状态圆点(绿=双开、蓝=部分 禁用、灰=全禁用;屏蔽占位恒灰),全局区行没有圆点(全局技能恒定可用), 布局 / 来源等属性信息收进右侧详情卡。
面板的 Skills 域分「项目 / 全局」两区(域内顶部切换),每区只列
该作用域的真实文件——项目区 = <项目>/.agents/skills 等,全局区 =
~/.agents/skills 等。项目级控制全部落实为项目区里的真实文件(副本
或屏蔽占位),启停只写 skill 文件自己的 frontmatter,由宿主的文件
watcher + 目录重发布原生生效(下一步即注入/剔除),没有写在插件私有
配置里的叠层状态。
<项目>/.agents/skills,此后在
本项目对这份副本的一切控制都是项目级的——宿主 registry 同名时项目优先,
项目副本会遮蔽全局名。导入是快照:全局后续更新不会同步到已导入的
副本,项目内同名冲突可选覆盖;.agents/skills 生成一个同名占位文件
(frontmatter 双向禁用 + metadata: capability-panel: shadow-stub 标记)。
宿主按 frontmatter name 合并技能、项目根 rank 恒高于全局根,占位文件于是
顶掉同名全局条目——catalog 注入、skill 工具调用、/name 用户注入
三条链路都在本项目内被宿主原生拒绝(其它项目不受影响)。占位条目出现在
项目区(灰点 +「屏蔽占位」徽标),被遮蔽的全局条目在全局区带「本项目已
禁用」徽标;点「在本项目恢复」(或删除占位文件)即还原;/name 手动调用的细粒度控制)。.mcp.json 格式兼容:项目级
<projectRoot>/.mcp.json,全局级 ~/.agents/mcp.json(读取兼容旧位置
~/.dsh/mcp.json),同名 key 项目级覆盖全局级;env/headers/args
支持 ${VAR} 环境变量插值。agent/created,把启用的 server 逐个挂进 agent 自己的
Cordis context——工具以 mcp__<serverName>__<tool> 出现在该 session
内,按 session 隔离,agent 销毁自动卸载。<项目根>/.agents/capability-imports.json),不是物理复制:内容始终
跟随全局条目(全局更新实时生效),启停是引用上的项目级标记;引用在
项目区显示(归属徽标「全局」),可启停、可「移出」。引用与项目原生
条目同级参与挂载合并,同名时遮蔽全局原版。把高频提示词存成快捷消息(项目级 <项目根>/.agents/quick-messages.json +
全局 ~/.agents/quick-messages.json,读取兼容旧位置 .dsh / ~/.dsh)。
面板分「项目 / 全局」两区管理:项目区条目可增删改、启停、搜索;全局区
条目的**「导入到本项目」**登记一条引用(写入
.agents/capability-imports.json)——内容始终跟随全局(全局更新实时
生效),启停是引用上的项目级标记,可随时「移出」。
禁用的消息只从输入框弹层隐藏,配置仍然保留。
全局能力默认对所有项目生效。想只在某个项目里调整,每个域都有落在真实 文件上的机制(都不写插件私有的叠层状态):
.agents/capability-imports.json);.agents/capability-overrides.json,
本项目的 session 热卸载/重挂,不动全局配置,其他项目不受影响)。输入框左下角注册了一组三个按钮(顺序与面板域 Tab 一致): 快捷消息 / Skills / MCP。点击在输入框上方展开弹层,三个弹层共用 同一锚点,切换不跳位;Esc / 点击外部关闭,彼此互斥。
Skills 弹层:按项目/全局分组列出 user-invocable 的 skill(可搜索),
同名 skill 以项目区条目为准(与宿主 rank 解析同一口径,被项目副本 /
屏蔽占位遮蔽的名字不会漏出全局的"死口令")。点击把 /name 追加进
草稿——与宿主 / 菜单同一口令形式,发送后宿主自动注入 skill 正文。
草稿里已含已知口令时按钮实心变绿。
快捷消息弹层:点击把正文追加进草稿;行尾 hover 浮现纸飞机按钮, 一键直发整条消息(不经过草稿)。被项目区同名条目(原生或引用) 遮蔽的全局消息不重复出现。
MCP 弹层:逐行开关控制 server 的本项目启用/禁用——项目条目 (含引用)直接切项目级状态,全局条目走项目级覆写(不翻全局配置,其他 项目不受影响),全局已禁用的 server 不在此列出(启用全局请到能力面板 全局区);写配置 + 自动热重挂,与面板同一语义。
浏览器客户端 宿主(host)
┌─────────────────────┐ RPC ┌──────────────────────────────┐
│ sidebar.footer │ ────────► │ ctx.capabilityPanel 服务 │
│ └ 能力面板浮层 │ /capability│ ├ skills 磁盘 CRUD │
│ conversation.input │ -panel │ ├ mcp 配置 CRUD + │
│ └ 能力工具组×3 │ 通道 │ │ 热挂载 loader │
│ conversation.input │ │ ├ quickMessages 配置 CRUD │
│ └ 弹层×3 │ │ ├ overrides 项目级禁用声明 │
└─────────────────────┘ │ └ imports 项目级引用声明 │
│ agent/created → dsh-mcp-client│
└──────────────────────────────┘
@deepseek-ai/dsh-mcp-client
实例,serverName 按 agent 作用域预留,同一项目多个 session 各自挂载、
互不冲突。宿主没有 loader 时(headless 等)回落到插件自带副本,那种情况下
serverName 仍是全应用单份,后到者显示黄色冲突圆点、不影响先挂载者。安装最新 release(推荐,版本钉死):
dsh plugin --profile web add "github:chengdb/dsh-plugin-capability-panel#v1.0.2"
dsh web # 打开 Web GUI,侧栏底部可见「能力面板」
跟随 master 最新代码(无 release 时可临时用):
dsh plugin --profile web add "github:chengdb/dsh-plugin-capability-panel#master"
dsh plugin --profile web remove @chengdb/capability-panel
移除后重新运行 dsh web 即可,侧栏入口与输入框工具组随之消失。卸载不会触碰
你已经管理的任何数据——.agents/skills(及旧位置 .dsh/skills)、.mcp.json、
quick-messages.json、capability-imports.json 等文件全部原样保留,随时可重新
安装接管。
cd <本仓库路径>
pnpm install
pnpm build # tsc(lib/*.js + .d.ts)→ tsdown(lib/client.js 包裹版)
dsh plugin --profile web add "link:<本仓库路径>"
dsh web
src/
index.ts 宿主插件入口——暴露 ctx.capabilityPanel 服务
client.ts 客户端插件入口(侧栏入口 + 输入框工具组 + 弹层)
remote.ts host↔client RPC 接线(endpoint 按域前缀路由)
shared/ 项目根探测 / 文件写锁 / skill 根定位与来源分类(两端共用)
skills/ skills 域:磁盘读写、CRUD、安装/导出、URL 下载、shadow stub、校验
mcp/ MCP 域:.mcp.json 读写、agent 自动挂载、写后热重挂
quick-messages/ 快捷消息域:JSON 配置读写、CRUD
overrides/ 项目级禁用声明:.agents/capability-overrides.json 读写(兼容旧位置)
imports/ 项目级「全局能力引用」:.agents/capability-imports.json 读写(MCP / 快捷消息)
client/ React 面板(三域两区)、三个 composer 弹层、zip 工具、自含样式