dsh-skill-mini-manager:DSH Web 里的 skill 极简管理

前言

在 DeepSeek Harness(DSH)里,skill 会分散在全局层、各 agent 预设层以及多种来源目录中。模型实际能加载哪些 skill,取决于运行时注册表与文件系统 provider 的发现结果,而不是「打开某个文件夹看一眼」就能对齐。

若只改磁盘上的文件、或不清楚某个 skill 来自哪一层,容易出现「以为删掉了,对话里还在」或「同名 skill 指向不同文件」的情况。内置「插件」页管的是 bundle 依赖,并不承担逐条 skill 的浏览与可恢复移除。

下面介绍社区插件 dsh-skill-mini-manager(中文名:skill 极简管理)。它在 DSH Web 设置面板左侧,与内置「插件」分区同级的独立一页(不是插件里的标签页),列出当前宿主可见的 skill,展示简介与占用,并支持逐个移入可回收站。

这是什么

  • 插件 id:dsh-skill-mini-manager
  • 维护者:runcat-tommy
  • 分类:客户端(dsh.client,platform 为 web)
  • 许可证:MIT(见仓库 package.json)
  • 当前发布版本(npm / 仓库):2.0.4

定位用一句话概括:Minimal skill manager for DSH Web——在设置里列出已安装 skill 的摘要、来源与磁盘占用,并把任意可移除项移入可恢复的回收站。

本插件不向模型注册提示词、工具或消息;对模型的唯一间接影响是:移除 skill 后,文件系统 provider 会让该 skill 从模型目录中消失。

核心功能

列表里显示什么

每一行对应一个 skill,字段来自 skill 自身 frontmatter 与宿主注册表,主要包括:

展示项 说明
名称 frontmatter 的 name
简介 frontmatter 的 description(原样展示)
使用时机 可选的 whenToUse
来源 如 user-dsh、user-agents、project-dsh、project-agents、custom、bundled
可调用面 模型可调用 / 用户可调用(对应 disable-model-invocation、user-invocable)
占用 skill 目录绝对路径、文件数、总字节数
提供给 哪些预设(或全局层)会把该 skill 交给 agent

页面顶部有按名称 / 简介 / 使用时机过滤的搜索框、刷新按钮与计数;底部是回收站。

为什么能列全「当前 Web 里能用的 skill」

DSH 的 skill 注册表按 host + scope 分层。在标准 web profile 上,全局层往往是空的,用户 skill 多在各预设层。本插件会逐个读取全局层与 roster 里每个预设的层,再按名称合并;读不通的预设会在页面上明确报错,而不是静默少列。

  • DSH 0.2 起:通过 acquireScope(id) 获取租约,读完必须在 finally 里 dispose。
  • DSH 0.1.x:通过 standingKeyFor(id) 获取 key,无需释放。

内容来自宿主真实运行的 ctx.skills;每次打开或刷新都现场读取,无缓存——页面上看到的就是模型此刻能加载的内容。

同名 skill 若在不同预设层指向不同文件,会列出但标为不可移除(ambiguous)。

移除与回收站

点「移除」会二次确认,确认框显示将要移动的确切路径。确认后宿主侧流程为:

  1. 将整个 skill 目录(或扁平布局下的单个 .md 文件)移动到 <DSH_HOME>/.skill-mini-manager/trash/<时间戳>-<名称>-<随机串>/payload,并写入 meta.json 记录原始路径。
  2. 该位置在所有 skill 根目录之外,provider 的发现不再看到该 skill,模型目录即时失效更新。
  3. 回收站可恢复(移回原路径);清空回收站为插件内唯一不可逆操作,同样需二次确认。

不能被移除的情况(页面显示原因、不提供按钮)包括:bundled-source、runtime-provider、system-owned、not-on-disk、outside-skill-roots、unsupported-layout、missing、ambiguous 等。浏览器侧只提交 skill 名称或回收站条目 id,不传路径;宿主每次自行解析目标,且不会把整个 skill 根目录当作删除目标。

宿主 HTTP 接口

四条同源路由(Origin 与 Host 不一致返回 403):

方法 路径 作用
GET /dsh-skill-mini-manager/api/catalog skill 列表 + 回收站 + 根目录状态
POST /dsh-skill-mini-manager/api/remove {"name":"<skill>"}
POST /dsh-skill-mini-manager/api/restore {"id":"<回收站条目>"}
POST /dsh-skill-mini-manager/api/purge 清空回收站

安装与启用

本插件是标准 DSH bundle(声明 dsh.bundle.patch 与 dsh.client),没有构建步骤——浏览器侧 lib/client.js 已提交进仓库。装完后必须重启一次 dsh web;只刷新页面时,若主机半侧未挂载,页面会提示「插件的主机半侧没有响应」。

推荐:从 npm 安装

dsh plugin --profile web add dsh-skill-mini-manager

包内已带全部产物,不依赖 git,也不执行安装脚本。更新:

dsh plugin --profile web up dsh-skill-mini-manager

发布包见 npm:dsh-skill-mini-manager。

从 GitHub 直接安装

适合要跟仓库 main 最新提交、而非仅 npm 发布版的情况(需本机有 git):

dsh plugin --profile web add github:runcat-tommy/dsh-skill-mini-manager

更新即重跑同一条命令。

本地目录安装

适合改代码、离线或本机没有 git 的情况:将仓库下载或 clone 到本地后:

dsh plugin --profile web add /path/to/dsh-skill-mini-manager

若用 GitHub 的 Download ZIP,解压目录名常带 -main 后缀,add 须指向解压后的目录,不是 .zip 文件。

查看与卸载插件(与「移除 skill」无关):

dsh plugin --profile web list
dsh plugin --profile web remove dsh-skill-mini-manager

典型用法

  1. 安装插件并重启 dsh web。
  2. 打开 DSH Web 设置,在左侧导航进入与「插件」同级的 skill 极简管理 页。
  3. 用搜索框按名称或简介筛选;点刷新重新拉取目录(每次刷新会重读全部定义,skill 很多时可能稍慢)。
  4. 确认某 skill 的来源、占用与「提供给」哪些预设后,对可移除项点「移除」,在确认框核对路径后执行。
  5. 误删时在页面底部回收站点「恢复」;确定不再需要时再「清空回收站」。

仓库提供只读探针,可在本机已装 skill 上验证目录读取与移除规划(不执行删除):

node scripts/inspect-live-catalog.mjs

适用场景与注意

适合谁

  • 经常在 DSH Web 里调试 skill、需要一眼看到 frontmatter 简介与磁盘占用的开发者。
  • 希望用「移走文件 + 回收站」做可逆清理,而不是手动在多个预设目录里找同名目录的人。

已知限制(README 明确说明)

  • 只列用户级 skill:设置面板没有工作区上下文,项目根下的 .dsh/skills、.agents/skills 不会出现在列表;管理项目 skill 需要带工作区入口的其它方案。
  • 移除是搬动文件,不是卸载包:不修改 package.json、registry 或插件装配。
  • 回收站不会自动清理,需用户显式清空。
  • 自定义 skill 根若目录名不是 skills,可能因 outside-skill-roots 被拒绝移除——判据是路径形状,偏保守。

安全与权限

插件以当前 dsh 进程的权限读写 skill 目录与 <DSH_HOME>/.skill-mini-manager/trash。安装前建议阅读 GitHub 源码 与 MIT 许可证,确认符合你的部署策略。社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-skill-mini-manager 把 DSH Web 里分散在多层的 skill 收成一页:摘要、来源、占用与可恢复移除,并通过对宿主的严格路径解析避免浏览器侧传路径删文件。若你主要用 web profile 管理用户级 skill,一条 npm 安装命令加上重启即可使用。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye