dsh-plugin-classes:按会话隔离 DSH 插件组合

前言

在 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 后重启。

典型用法

  1. 安装本插件并重启 DSH(见上)。
  2. 在侧栏打开类管理:创建例如 coding / writing / research / clean 等类,为每类勾选应包含的插件。
  3. 新建会话前,在 Composer 左侧 chip 勾选需要的类;未开始的会话可随时改选,preset 即时切换。
  4. 通过 dsh plugin 新装插件时,在弹出对话框里指定归属类;确认后插件只在所选类中可见,host 层对该 bundle 禁用。
  5. 若要在已开始的会话里「临时」多一套工具,勾一个新类会走单轮临时会话;需知该轮回答不会写回原会话线程。

状态随 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 / 幻方无官方从属关系;插件由社区维护,使用前请自行核对版本与兼容性说明。

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

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

小夜