返回目录
其他 待识别

dsh-plugin-capability-panel

chengdb/dsh-plugin-capability-panel

在 Web GUI 里可视化管理项目的全部能力——Skills、MCP 服务器、快捷消息, 全部支持项目级 / 全局级双作用域,全部可以不离开浏览器完成安装、启停与分发

Stars
4
Forks
0
Issues
0
更新
7 天前

PROJECT TOPICS

项目标签

PROJECT README

README

@chengdb/capability-panel

一个 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 也能管理别的项目。

面板:Skills 域列表

📥 Skills:三种方式安装,一键导出分享

  • 浏览器上传:拖入单个 .md、整个 skill 目录、或 .zip 压缩包 (浏览器端 DecompressionStream 解压,零依赖);路径防穿越, 200 文件 / 20MB 上限。
  • 宿主路径:把磁盘上已有的 skill 目录或 .md 复制进受管根。
  • URL 下载:GitHub 仓库(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;也可以复制到宿主任意目录。

安装 Skill 对话框

⚡ 一键启用/禁用,不动正文(仅项目区)

全局区没有启停也没有调用方向开关——全局技能恒定可用(对所有项目可见、 agent 可直接调用),面板在全局区提供的是「导入到本项目」「在本项目禁用 / 恢复」、导出与删除(见下一节)。启用/禁用只发生在项目区

项目区详情卡上有「已启用 / 已禁用」状态按钮(文字与颜色随状态变化)。 禁用只写入 user-invocable: false + disable-model-invocation: true 两个扁平键——正文与其它元数据原样保留,启用即清除恢复。禁用的 skill 会 立刻从输入框的 Skills 快捷弹层中消失。只读条目(.claude 兼容根)不显示 操作按钮。

调用方式可以按方向细调:详情卡的「调用方式」字段上,「模型调用」与 「用户调用」两个方向各自独立开关——比如某个 skill 只希望用户 /name 手动触发、不需要 agent 自动注入,关掉「模型调用」即可,frontmatter 只写入 disable-model-invocation: trueuser-invocable 原样保留 (反之亦然)。两个方向都关等价于一键禁用,恢复同理;写盘保持最小化, 启用即清除对应键。两个方向状态不一致时,整体按钮显示「部分禁用」。

左侧列表行不堆文字标签:项目区行只保留状态圆点(绿=双开、蓝=部分 禁用、灰=全禁用;屏蔽占位恒灰),全局区行没有圆点(全局技能恒定可用), 布局 / 来源等属性信息收进右侧详情卡。

Skill 详情与启停开关

🗃 Skills:全局与项目两区分离,项目级控制落实为真实文件

面板的 Skills 域分「项目 / 全局」两区(域内顶部切换),每区只列 该作用域的真实文件——项目区 = <项目>/.agents/skills 等,全局区 = ~/.agents/skills 等。项目级控制全部落实为项目区里的真实文件(副本 或屏蔽占位),启停只写 skill 文件自己的 frontmatter,由宿主的文件 watcher + 目录重发布原生生效(下一步即注入/剔除),没有写在插件私有 配置里的叠层状态。

  • 导入到本项目:全局区任意条目的详情卡上有「导入到本项目」按钮,把 该 skill(目录型连资源)物理复制<项目>/.agents/skills,此后在 本项目对这份副本的一切控制都是项目级的——宿主 registry 同名时项目优先, 项目副本会遮蔽全局名。导入是快照:全局后续更新不会同步到已导入的 副本,项目内同名冲突可选覆盖;
  • 在本项目禁用 / 恢复(shadow stub 屏蔽占位):全局区条目的详情卡上有 「在本项目禁用」按钮,在项目 .agents/skills 生成一个同名占位文件 (frontmatter 双向禁用 + metadata: capability-panel: shadow-stub 标记)。 宿主按 frontmatter name 合并技能、项目根 rank 恒高于全局根,占位文件于是 顶掉同名全局条目——catalog 注入、skill 工具调用、/name 用户注入 三条链路都在本项目内被宿主原生拒绝(其它项目不受影响)。占位条目出现在 项目区(灰点 +「屏蔽占位」徽标),被遮蔽的全局条目在全局区带「本项目已 禁用」徽标;点「在本项目恢复」(或删除占位文件)即还原;
  • 详情卡标题旁有归属徽标(按作用域着色:项目=蓝 / 全局=绿)与状态徽标 (屏蔽占位 / 本项目已禁用 / 项目副本生效中);
  • 删除按钮语义直接:全局区条目 = 「删除」(已导入到各项目的副本不受 影响),项目区条目 = 「删除」(只删本项目这份文件;对屏蔽占位而言 即恢复同名全局技能);
  • 提醒:agent 侧的可见性以宿主 registry 为准——全局 skill 对所有项目 可见、agent 可直接调用。要让某全局 skill 在本项目停掉 agent 自动触发, 两条路:「在本项目禁用」(整体屏蔽,最省事),或先「导入到本项目」, 再在项目区关闭它的「模型调用」(保留 /name 手动调用的细粒度控制)。

全局区详情:导入到本项目 / 在本项目禁用

🔌 MCP:改配置即热挂载,不重启、不改 preset

  • 配置文件与 Claude Code 的 .mcp.json 格式兼容:项目级 <projectRoot>/.mcp.json,全局级 ~/.agents/mcp.json(读取兼容旧位置 ~/.dsh/mcp.json),同名 key 项目级覆盖全局级;env/headers/args 支持 ${VAR} 环境变量插值。
  • host 插件监听 agent/created,把启用的 server 逐个挂进 agent 自己的 Cordis context——工具以 mcp__<serverName>__<tool> 出现在该 session 内,按 session 隔离,agent 销毁自动卸载。
  • 面板分「项目 / 全局」两区:项目区条目可启停/编辑/删除,全局区条目提供 「导入到本项目」——登记一条引用(写入 <项目根>/.agents/capability-imports.json),不是物理复制:内容始终 跟随全局条目(全局更新实时生效),启停是引用上的项目级标记;引用在 项目区显示(归属徽标「全局」),可启停、可「移出」。引用与项目原生 条目同级参与挂载合并,同名时遮蔽全局原版。
  • 面板里每次新增/编辑/删除/启停,都会自动重挂受影响 session 的 MCP 连接;项目区行的列表圆点:绿=启用、灰=禁用;挂载失败/冲突/未挂载 等实时状态用行内标签与 tooltip 呈现,详情卡「状态」字段保留完整挂载 信息与错误。

面板:MCP 域列表与状态

💬 快捷消息:常用提示词,一键入草稿、一键直发

把高频提示词存成快捷消息(项目级 <项目根>/.agents/quick-messages.json + 全局 ~/.agents/quick-messages.json,读取兼容旧位置 .dsh / ~/.dsh)。 面板分「项目 / 全局」两区管理:项目区条目可增删改、启停、搜索;全局区 条目的「导入到本项目」登记一条引用(写入 .agents/capability-imports.json)——内容始终跟随全局(全局更新实时 生效),启停是引用上的项目级标记,可随时「移出」。 禁用的消息只从输入框弹层隐藏,配置仍然保留。

面板:快捷消息域

🎯 项目级控制全局能力

全局能力默认对所有项目生效。想只在某个项目里调整,每个域都有落在真实 文件上的机制(都不写插件私有的叠层状态):

  • Skills:「导入到本项目」物理复制出项目副本(此后项目内独立启停 / 细调方向,快照不跟随全局);或「在本项目禁用」生成屏蔽占位(shadow stub,整体屏蔽,删除即恢复);
  • MCP / 快捷消息:「导入到本项目」登记引用(内容实时跟随全局, 启停是引用上的项目级标记,写在 .agents/capability-imports.json);
  • MCP 弹层的「本项目」开关:输入框的 MCP 弹层里,全局 server 可以 直接切换本项目启用/禁用(写 .agents/capability-overrides.json, 本项目的 session 热卸载/重挂,不动全局配置,其他项目不受影响)。

⌨️ 输入框里的「能力工具组」

输入框左下角注册了一组三个按钮(顺序与面板域 Tab 一致): 快捷消息 / Skills / MCP。点击在输入框上方展开弹层,三个弹层共用 同一锚点,切换不跳位;Esc / 点击外部关闭,彼此互斥。

输入框能力工具组与 Skills 弹层

  • Skills 弹层:按项目/全局分组列出 user-invocable 的 skill(可搜索), 同名 skill 以项目区条目为准(与宿主 rank 解析同一口径,被项目副本 / 屏蔽占位遮蔽的名字不会漏出全局的"死口令")。点击把 /name 追加进 草稿——与宿主 / 菜单同一口令形式,发送后宿主自动注入 skill 正文。 草稿里已含已知口令时按钮实心变绿。

  • 快捷消息弹层:点击把正文追加进草稿;行尾 hover 浮现纸飞机按钮, 一键直发整条消息(不经过草稿)。被项目区同名条目(原生或引用) 遮蔽的全局消息不重复出现。

    快捷消息弹层与一键直发

  • MCP 弹层:逐行开关控制 server 的本项目启用/禁用——项目条目 (含引用)直接切项目级状态,全局条目走项目级覆写(不翻全局配置,其他 项目不受影响),全局已禁用的 server 不在此列出(启用全局请到能力面板 全局区);写配置 + 自动热重挂,与面板同一语义。

    MCP 快捷开关弹层

工作原理

浏览器客户端                          宿主(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│
                                  └──────────────────────────────┘
  • 不重复注册 skills provider:面板列表直接读受管根目录的磁盘(与官方 filesystem provider 口径逐字节一致),启停只写 frontmatter 调用键, 由宿主的文件 watcher 原生生效。
  • MCP 按 session 隔离:挂在 agent 自己的 Cordis context 上,agent dispose 即自动卸载;桥接插件取宿主那份 @deepseek-ai/dsh-mcp-client 实例,serverName 按 agent 作用域预留,同一项目多个 session 各自挂载、 互不冲突。宿主没有 loader 时(headless 等)回落到插件自带副本,那种情况下 serverName 仍是全应用单份,后到者显示黄色冲突圆点、不影响先挂载者。
  • UI 纯增量:侧栏入口与输入框按钮都注册在宿主的列表槽(list slot)里, 不顶替、不遮蔽任何内置 UI,也不绑定特定 session。

安装

安装最新 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.jsonquick-messages.jsoncapability-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 工具、自含样式

License

MIT

CLASSIFICATION EVIDENCE

分类依据

项目类型待识别
功能分类其他
规则置信度

系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。