前言¶
在 DeepSeek Harness(DSH)里,插件一旦安装就是全局可见的:每个会话都会看到同一套工具目录。写代码、写文章、做检索、或希望尽量少插件干扰时,往往只能手动开关 bundle,或在大量工具里挑选,既容易误用,也不利于把注意力限制在当前任务。
dsh-plugin-classes 把「已安装插件」拆成若干互不可见的插件类:会话只挂载它所属类里的插件;类以外的插件不仅在界面上被禁用,在工具目录和提示里也不存在。类可以在输入框左侧、模型选择器旁的 Composer chip 上切换(对尚未开始的会话即时生效)。维护者为 Uruz123321,归类为 admin-security,当前在 GitHub 上版本为 0.1.0(MIT)。
这是什么¶
一句话:dsh-plugin-classes 是 DSH 的插件类管理扩展——用命名分组(相对 host 基线的增删 delta)描述「这一会话该装哪些插件」,并通过 DSH 自带的 agentPresets 注册机制绑定到会话,而不是再套一层独立加载器。
数据落在 profile 的 cordis.patch.yml 里该插件行的 volatile config(字段含 classes、host、sessions、plugins)。改类或为会话勾选类会退役旧 revision、注册新 preset,无需重启进程;已在跑的会话保持当时已挂载的组合。
工作原理(简要)¶
每个不同的「host 基线 ⊕ 若干类 delta」组合,会注册为一个普通的 @deepseek-ai/dsh-agent-preset 定义,例如 id 形如 cls-a+b。绑定到该 preset 的会话只挂载对应插件列表。DSH 原有的作用域隔离、会话绑定与重启恢复逻辑照常复用。
Host baseline(cls-host) 全局始终包含,不作为可编辑类列出;新会话默认用它,并承载与发行版 standard 模板对应的基线。若你改过部署里的 standard,需在该插件配置里编辑 host: 字段,基线不会自动跟随后续 standard 变更。
核心功能¶
| 能力 | 行为 |
|---|---|
| 插件类 | 命名分组,对 host 基线做 add/remove;一会话可同时勾选多个类 |
| Composer chip | 模型选择器左侧多选类;对未开始的会话切换类会立即换 preset |
| 类管理面板 | 侧栏:创建/重命名/隐藏类,勾选类内插件,查看未归类插件与各会话使用的类 |
| 新装插件对话框 | 安装后居中询问归属哪些类;确认后写入对应类,并在 host 层禁用该 bundle,使仅被选中的类可见 |
| 会话中途加类 | 会话在首轮之后 DSH 会锁定组合;再勾新类会开单轮临时会话(同 workspace,原类 + 新类),结束后归档,答案不会回填原会话;已勾选的类不能取消勾选 |
| 「删除」实为隐藏 | 隐藏类会从选择器消失,但 preset 仍注册,避免空会话因 preset 消失而无法打开 |
与「仅禁用」的区别:未纳入当前会话类的插件,对该会话而言不存在于工具目录与 prompt,而不只是灰色不可用。
安装与启用¶
下列命令摘自仓库 README;安装后会把包追加到 profile 的 dsh.profile.bundles。新加的 bundle 只在进程启动时导入,需重启 Electron 桌面端或 dsh web 进程;之后编辑类不需要重启。
# npm 注册表
dsh plugin --profile web add dsh-plugin-classes
# 直接从 GitHub(无注册表时)
dsh plugin --profile web add github:Uruz123321/dsh-plugin-classes
# 本地开发目录
dsh plugin --profile web add link:/absolute/path/to/dsh-plugin-classes
Desktop 等自行管理 node_modules 的 profile 可手工:将包物理复制到 <DSH_HOME>/profiles/<profile>/node_modules/dsh-plugin-classes(junction/symlink 可能导致 @deepseek-ai/* 解析失败);在 dependencies 与 dsh.profile.bundles 中加入 dsh-plugin-classes 后重启。
典型用法¶
- 安装本插件并重启 DSH(见上)。
- 在侧栏打开类管理:创建例如 coding / writing / research / clean 等类,为每类勾选应包含的插件。
- 新建会话前,在 Composer 左侧 chip 勾选需要的类;未开始的会话可随时改选,preset 即时切换。
- 通过
dsh plugin新装插件时,在弹出对话框里指定归属类;确认后插件只在所选类中可见,host 层对该 bundle 禁用。 - 若要在已开始的会话里「临时」多一套工具,勾一个新类会走单轮临时会话;需知该轮回答不会写回原会话线程。
状态随 profile 的 cordis.patch.yml 迁移;复制该文件即可带走类与会话绑定关系。
兼容性与依赖¶
| 项 | 要求 |
|---|---|
| DSH | >=0.2.0-rc.2 <0.3.0(README 写明在 0.2.0-rc.2 验证;0.2.1-rc.x 未测) |
| Node | >=20.18 |
| Profile | web、desktop |
| 前置能力 | 依赖带 agent presets 的 profile;无 preset 的 profile 不适用 |
本插件使用 DSH 的 settings、agentPresets(register/select/list)、pluginManager、pluginInventory、session 等服务。
安全与信任边界¶
DSH 插件与宿主同进程、同权限运行。dsh-plugin-classes 会:
- 注册/退役 agent preset,从而决定各会话挂载哪些插件;
- 在 host 层调用
pluginManager.setBundleEnabled(实现「从 host 基线隐藏插件」); - 仅读写本插件行在
cordis.patch.yml中的 volatile config,并读取插件清单。
README 明确:不发网络请求、无遥测、不读凭据、不写 profile 配置以外的文件。安装它等同于授予「重塑其他会话插件组合」的能力,审阅源码与 MIT 许可证后再装,与对待 shell 类宿主插件相同。
已知限制与排错提示¶
- 已开始会话不能改组合;新类仅能通过单轮临时会话体验,且不能 untick 已选类。
- 新装 bundle 需重启;改类不需重启。
- 类主要管控 agent 平面插件;host 级插件仍全局可见,除非安装时通过对话框在 host 层禁用。
- 若误删类导致
agent-preset/not-found: Unknown agent preset: cls-xxx、新会话打不开,设计上是「隐藏」而非退役 preset;已损坏时仓库提供node scripts/repair-sessions.mjs做临时修复(见 README Troubleshooting)。 - 客户端插件若报
cannot get property "remote.settings" without inject,需在声明中列出所用 remote 命名空间(remote.settings、remote.agentPresets等),不能仅写remote。
结尾¶
若你已在 DSH 里堆了很多插件,却希望不同任务只看到各自工具集,dsh-plugin-classes 用 preset 组合把「全局安装」拆成可按会话选择的类,并在 UI 里完成归类与切换。更多信息见社区目录页与源码仓库。
- 目录页:https://www.skillhub.cn/plugins/Uruz123321/dsh-plugin-classes
- GitHub:https://github.com/Uruz123321/dsh-plugin-classes
社区目录站点与 DeepSeek / 幻方无官方从属关系;插件由社区维护,使用前请自行核对版本与兼容性说明。