前言¶
DSH 已经会把技能文件纳入会话:项目技能在 <projectRoot>/.dsh/skills 与 <projectRoot>/.agents/skills,全局技能在 ~/.dsh/skills 与 ~/.agents/skills。但这个发现过程对用户不可见,也没有界面可以增删改,想改一个技能就得自己翻目录、开编辑器。下面介绍的这个插件补上这一层:在右侧栏常驻一个面板,把四级发现结果分层列出来,并支持浏览、编辑、删除、筛选、跨层复制与更新。
这是什么¶
mt3166/dsh-project-skills-mng 是 MT3166 维护的 DSH 客户端插件,名字里的 mng 是 management。它不是「提供技能」的插件,而是管理技能的插件:面板读写的是 DSH 已经发现的同一批技能文件,不会另造一份注册表。
版本 0.1.0,private: true(未发布到 npm),许可证 MIT © 2026 MT3166。目录页归类为「客户端」插件,显示 0 星(截至 2026-11-07,见目录页)。它注册的是右栏 tab 与 guide 卡片,面板样式走 DSH 浏览器侧已有的主题与 React。
包名、仓库名、右栏 tab id、Host API 路由(/dsh-project-skills-mng/api)和 CSS 作用域统一用 dsh-project-skills-mng 前缀。
核心功能¶
- 按 DSH 自己的四级发现顺序分组列出当前会话生效的技能:项目
.dsh/skills(100)→ 项目.agents/skills(200)→ 全局~/.dsh/skills(400)→ 全局~/.agents/skills(500),数字越小越优先。每个分组显示路径、条目数、缺失/只读状态与优先级数字,可单独折叠。 - 每行显示模型可调用(M)/ 用户可调用(U)标记、链接安装标记(
~/.dsh/skills指向~/.agents/skills的镜像会合并成一行),以及同名的被覆盖条目。被覆盖的条目照样可以打开、编辑、删除,操作落在它自己所在的根上,不碰胜出的同名技能。 - 支持新建、编辑、删除
SKILL.md,切换两个调用开关,校验 frontmatter,且 frontmatter 之外的正文原样保留。 - 筛选:名称/描述关键字、四个层级、「只看 M 关闭」「只看 U 关闭」「只看被覆盖」「只看链接安装」,条件可叠加;筛选变化时不会对看不见的行执行操作。筛选 chip 默认折叠在「筛选」按钮后面。
- 来源:读
~/.agents/.skill-lock.json(npx skills的清单),每行显示来源仓库(如obra/superpowers)或「本地」,详情里给出仓库、仓库内路径、安装时间与短哈希,可按来源筛选。 - 检查更新 / 更新:对比上游 git tree sha(或内容哈希),有更新的行带小圆点,可单条或批量更新。更新走整包替换,旧版本留在
.dsh-bak-<时间戳>-<名字>,默认保留两份;本地改过就报LOCAL_CHANGES,要覆盖得显式「强制更新」。 - 批量管理:工具栏「选择」进入多选模式,可批量删除、批量切换调用开关、跨层移动或复制(整包复制,
scripts/等支撑文件跟着走,.git与node_modules不带),结果逐条列出成功与失败原因(如SOURCE_REMOVE_FAILED)。 - 同时注册一个
skills_manage工具,让模型复用同一套读写逻辑。
清单里记录过、磁盘上已经不在的技能单独归为「仅在清单中」分组,可一键重新安装(只写 ~/.agents/skills,与 npx skills 行为一致,不补建 ~/.dsh/skills 的镜像链接)。
安装与启用¶
官方 README 给出的步骤是先取源码,再以 bundle 包形式安装:
git clone git@github.com:MT3166/dsh-project-skills-mng.git
plugin_manager action=install_bundle target=<本仓库绝对路径>
新装的 bundle 由 HMR 直接生效;若是替换已安装的旧版本,需要重启 DSH 才会加载新的 JS。
完成上面两步后:
- 打开右侧栏(
Ctrl+Shift+E一类的开关),点「+」或 guide 页卡片「项目技能」; - 四个层级分组按优先级排列,点分组头折叠,点任意一行进入详情;
- 详情里可直接编辑正文与 frontmatter,保存后列表自动刷新;
- 工具栏可以刷新、新建技能(名称 + 描述生成 frontmatter 模板,再手动补正文);
- 工具栏「检查更新」查询上游(GitHub API,5 分钟缓存),有更新的行带小圆点,多选模式里也能「更新选中」。
插件由 cordis.patch.yml 把 dsh-project-skills-mng 这一行插入 profile,客户端需要注入 @deepseek-ai/dsh-client-locale、@deepseek-ai/dsh-client-ui-slots 与 @deepseek-ai/dsh-client-ui-sidebar-right 三个包,这些在 package.json 的 dsh 字段里已经声明,安装 bundle 时一并处理。
典型用法¶
一个常见的操作链路是:先在右栏定位某个技能,确认它属于哪一层、优先级数字是多少、是否被同名技能覆盖;再进详情改 SKILL.md 正文或 frontmatter。保存后面板自动刷新,DSH 侧技能内容也会更新——插件只读写技能文件本身,不重建注册表,DSH 的 @deepseek-ai/dsh-skill-filesystem 已经在监听这些目录。
如果要在项目里引入新的技能,用工具栏「新建」填名称和描述,生成 frontmatter 模板后补正文即可;想放到全局层,用多选模式下的跨层复制,整包带走 scripts/ 等支撑文件。
批量操作的部分失败是可定位的:结果条给出「成功 N · 失败 M」,失败项可展开看错误码,例如目标层已有同名技能、移动时删源失败。
适用场景与注意¶
适合已经在用 DSH 的团队或个人:技能数量多了之后,靠手工翻 ~/.agents/skills 已经不好维护;这个面板把发现顺序、覆盖关系、来源仓库和上游更新状态集中到一个入口。
几点需要注意:
- 插件以当前 DSH 进程的权限运行,写入前有技能名白名单(
^[a-z0-9]+(?:-[a-z0-9]+)*$)与 realpath 校验,写操作只允许落在四个技能根目录内;删除会二次确认,删除范围只到解析后的SKILL.md所在技能目录。 - 安装前先读源码与许可证。源码在 GitHub 上公开,许可证为 MIT;本项目是社区维护的插件,不发布到 npm,需要自行 clone 后以 bundle 安装。
- 更新只作用于清单里登记的上游技能,下载与解包有大小上限(下载 64 MiB、普通技能 32 MiB、根级技能 128 MiB),解包时校验
..与 realpath,替换前比对本地快照,失败会回滚并把旧目录改名备份。 - 如果你不使用
~/.agents/.skill-lock.json清单,则「来源」与「检查更新」这两块没有数据可展示。
小结¶
这个插件的价值在于把原先不可见的技能发现过程变成可操作的界面:四层分组看清「哪个技能生效、赢了谁」,筛选与批量操作减少逐条手工接线的成本,来源与更新让上游托管技能也能纳入常规维护。仓库地址:https://github.com/MT3166/dsh-project-skills-mng,目录页:https://www.skillhub.cn/plugins/MT3166/dsh-project-skills-mng。