前言¶
DSH 里的 Skill 来源很多:项目目录、用户目录、Agent scope、远程或内存 Provider。模型会自动挑选 Skill,用户也可以直接用 /name 点名调用。这两条路径默认跟着 Skill 自身的声明走,想单独关掉某一条并不容易。dsh-skills-management 就是针对这个缺口做的插件:它把 Skill 目录集中展示,对文件来源的 Skill 分别控制「模型调用」和「用户手动调用」,并且在调用时读取最新的源文件,不需要改 SKILL.md 或复制任何资源。
下面介绍这个插件的定位、安装方式和典型用法。
这是什么¶
dsh-skills-management 是一个 DSH Skill 目录与调用策略插件,由 JayC-L 维护,分类属于工作流。它不动 Skill 的定义文件,只维护一份调用策略,用来回答「哪些 Skill 可以被模型调用、哪些还能被用户用 /name 调用」。
核心功能¶
1、双通道开关。每个文件来源的 Skill 有两个独立开关:模型调用(modelInvocable)和用户手动调用(userInvocable,即 /name)。四种组合对应四种状态:
| Model | User manual | 状态 | 行为 |
|---|---|---|---|
| On | On | Available | 两种调用都可用 |
| Off | On | User manual only | 模型不能调用,/name 仍可用 |
| On | Off | Model only | 模型可调用,用户手动调用被禁用 |
| Off | Off | Disabled | 两条通道都禁用 |
策略按 Skill 名称全局生效,同名 Skill 一起管理。恢复原始调用默认值时会移除策略记录,但默认值本身不一定两条通道都开启。
2、实时读取源文件。目录重新计算时刷新 frontmatter,每次 get() 都读取当前正文,因此 Skill 正文更新后不需要重新切换策略。引用、脚本等资源仍留在源 Skill 目录中,不被复制进策略数据;策略只保存调用状态和文件位置元数据,不保存正文。
3、完整目录与只读边界。内存、远程、动态 Provider 的条目仍然可见,但标记为 Read only;Host 会拒绝针对它们的策略修改。非文件 Provider 继续提供自己的目录与内容,插件不接管、不复制、不从 source 标签推断本地路径。Bundled Provider 资产即使存在 SKILL.md 文件也是只读。
4、缺失条目清理。只有完整目录或可验证的文件证据确认原始定义已消失时,Skill 才会被标记为 missing。此时对应行会出现原生 Delete 按钮,只删除策略记录,绝不删除源文件或 Junction;如果原 Skill 恢复,请求返回 409 并保留策略。
5、单一全局视图。目录聚合 DSH Registry、文件系统和 Agent scope,没有按会话的独立策略控制。
安装与启用¶
在 DSH 插件管理器中添加该仓库,或使用预构建的 Release 包:
https://github.com/JayC-L/dsh-skills-management/releases/latest/download/dsh-skills-management.tgz
在 DSH Desktop 上使用应用内置的插件管理器。安装并激活后刷新页面,在侧边栏打开 Skills Management。
插件对 DSH 版本有要求:>=0.2.1-rc.5 <0.3.0-0。项目在 DSH 0.2.2-rc.1、Cordis 4.1.0 和 Desktop Profile 下验证过。
如需从源码构建:
pnpm install
pnpm run check
pnpm test
pnpm pack
管理范围¶
具备以下四条硬条件时,Skill 才可被管理:
1、已在当前 DSH Registry 注册。
2、来自项目、用户或显式配置的自定义文件目录。
3、有可验证的本地文件路径。
4、frontmatter 合法,且声明的名称与 Skill 名称一致。
普通目录、扁平 Markdown 文件和 Junction 都支持。只在磁盘上发现但未注册到 DSH 的文件,不算可管理的调用目标。
目录与刷新¶
每一行展示 Skill 名称与当前描述、Provider 名称、来源形式(本地文件、Junction、源文件、过期路径、仅注册、bundled 资源、非文件或缺失)、当前调用状态,以及两个开关、Read only 标记或 Delete 按钮。
管理目录在以下时机重新请求:
- 页面组件挂载;
- 开关或删除操作成功;
- 点击 Refresh。
refresh 会重新读取策略、扫描显式配置的 Skill 目录,并聚合 Registry 与各 scope。可以按名称或描述搜索,并组合调用状态与来源过滤器;内置分组默认折叠,搜索或筛选时自动展开。
策略文件¶
默认位置:
~/.dsh/skills-management/disabled.json
每条记录只包含调用策略与文件位置元数据,字段如下:
| 字段 | 用途 |
|---|---|
modelInvocable |
生效的模型调用状态 |
userInvocable |
生效的用户手动调用状态 |
originalInvocation |
捕获的原始默认值,供正确恢复 |
display |
原始描述、Provider、来源与可选使用指引 |
liveFile |
文件来源策略标记,当前为 true |
sourcePath |
当前源文件位置 |
sourceBase |
资源解析目录 |
sourcePath 和 sourceBase 是 Host 内部字段,不通过管理列表 API 返回。写入采用串行队列、改动前严格重读磁盘、同目录临时文件、fsync 和原子替换;策略文件损坏时可能临时用最后一份有效的内存状态做读取,但所有写入都会被拒绝,避免内存数据覆盖坏文件。
安全边界¶
- 低优先级的策略 Provider 只覆盖文件来源 Skill 的调用标志与实时文件定义;移除策略后自动恢复原始 Provider。
- 文件来源目录读取当前 frontmatter;调用读取当前正文并校验其声明的 Skill 名称。
- 文件缺失、身份冲突、重复候选和 I/O 错误不会被静默替换为其他内容。
- 管理端点只接受 loopback 请求,并校验 Host、Origin、方法与变更头。
- 插件不修改 Skill 源文件、不扫描无关应用目录、不收集遥测、不发起外部网络请求。
管理端点为:
GET /api/dsh-skills-management/list
适用场景与注意¶
适合需要精细控制 Skill 调用范围的 DSH 开发者:例如不希望模型自动触发某个高风险 Skill,但仍保留 /name 手动入口;或者反过来只允许用户点名调用。插件的分类是工作流,星标数为 1,属于早期项目,使用前建议阅读 GitHub 源码与 MIT 许可证,并确认当前 DSH 版本在兼容范围内。
注意插件以当前 DSH 进程权限运行,会读写 ~/.dsh/skills-management/ 下的策略文件;它不会修改 Skill 源文件或 Git 工作区,但安装前仍应自行检查源码与许可证。
小结¶
dsh-skills-management 的价值在于把「谁能调用某个 Skill」拆成模型与用户两条独立开关,并在不改动源文件的前提下保持目录与正文的最新状态。目录页:https://www.skillhub.cn/plugins/JayC-L/dsh-skills-management ;仓库:https://github.com/JayC-L/dsh-skills-management 。