dsh-disable-unofficial-plugins:在插件页批量停用非官方插件

前言

DeepSeek Harness(DSH)采用「一切皆插件」的架构,社区插件会随 profile 一起加载。排查冲突、对比「最小可用环境」或临时收窄功能面时,往往需要把一批第三方 bundle 关掉,而不是逐个在列表里点开关。官方插件页本身支持单条启用/停用,但当非官方插件数量较多时,缺少「按当前方向一次性勾选再批量切换」的入口。

下面介绍维护者 WhatCannotBeSaid 发布的客户端插件 dsh-disable-unofficial-plugins:它在 DSH Web 的 Plugins → Installed 分组标题行右侧增加 Disable unofficial plugins…(中文界面下为对应文案),用 checklist 选择要切换的非官方插件,只改启用状态,不卸载、不删文件与配置。

这是什么

  • 名称:dsh-disable-unofficial-plugins(npm 包名与仓库同名)
  • 分类:客户端(dsh.client.platform 为 web)
  • 维护者:WhatCannotBeSaid
  • 版本(package.json):1.3.1
  • 许可证:MIT
  • 目录页:SkillHub 插件条目
  • 源码与文档:GitHub 仓库

插件通过纯 DOM 注入挂在官方插件页上,不接管 React 树;读写均走 ctx.get('remote.pluginManager') 上的 listBundles() 与 setBundleEnabled(name, enabled)(Cordis 中 remote 各命名空间为带点服务名,不能使用 ctx.get('remote').pluginManager)。

核心功能

按钮位置与两种模式

按钮固定在 Installed 分组标题行(section[data-plugin-group="bundles"])最右侧,与标题、数量垂直居中,不改变行高。

  1. 当前存在已启用的可切换非官方插件时,按钮处于「停用」侧;点击后列出这些插件。
  2. 当所有可切换的非官方插件都已停用时,按钮文案切换为 Enable unofficial plugins…,点击后列出当前已停用的非官方插件,用于批量重新启用。

确认对话框与 checklist

点击按钮先弹出确认对话框,内含 checklist:

  • 默认全选,因此「全部停用」仍是两次操作(点按钮 + 确认);取消勾选即保留该项,仅对其余勾选项执行切换。
  • 工具栏提供 Select all / Select none(中文:全选 / 全不选),以及实时计数 N of M selected(中文:已选 N / M)。
  • 主按钮文案随选择变化,例如 Disable 17 plugins / 停用 17 个插件;若一项都未勾选,主按钮置灰且点击无效。

确认后插件串行逐个切换;单个失败不会中断后续项。结束后展示结果报告:成功数量、失败项、被跳过的只读项,以及需下次启动 DSH 才生效的项数。失败行内联展示错误码;完整诊断放在该行 Full diagnostics(完整诊断)折叠区,默认收起。

何谓「非官方插件」

进入 checklist 须同时满足:

  1. 不是内置 bundle:@deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app、@deepseek-ai/dsh-headless、@deepseek-ai/dsh-sdk-app、@deepseek-ai/dsh-acp-app、@deepseek-ai/dsh-sdk-minimal;
  2. 与官方插件页 Installed 分组使用相同过滤(已安装或非 optional),范围与分组旁计数一致;
  3. bundle 名不以 @deepseek-ai/ 开头(DSH 自带包均在该 scope 下;社区包可能是 @michengai/、@liustack/ 等);
  4. 不是本插件自身(否则一点即自毁按钮)。

进一步分为:可停用(当前启用且可通过 profile bundle 层修改)、可启用(非官方且已停用)、只读(存在 readOnlyReason,两种 checklist 均不出现,但在确认与结果中说明原因)。

明确不做的事

停用/启用仅修改 profile 的 bundle 层(dsh.profile.bundles);从不卸载插件,不删除插件文件或配置数据,也不影响官方插件。

界面语言

注入文案跟随 Settings → General → Language;插件向宿主 locale 服务注册中英文词典,切换语言时会重绘按钮、悬停提示及已打开对话框(对话框原地刷新,保留勾选与进行中的操作)。cancel / close 使用宿主 common 命名空间,不在本插件词典中重复定义。

按钮不可用时的提示

悬停会给出具体原因,例如:没有可切换的非官方插件、未安装任何非官方插件、正在读取列表或正在执行批量操作、插件管理服务尚未挂载(会自动重试)。可用时悬停说明可停用/可启用数量,并注明「只停用不卸载」或「只启用不安装」;存在只读项时会附加将被跳过的数量。

安装与启用

安装后需重启 DSH:客户端 bundle 仅在模块图重组时刷新,仅刷新页面仍可能命中旧缓存。

从 npm 安装(将 <profile> 换成目标 profile,例如 web 或 dsh-tui):

dsh plugin --profile <profile> add dsh-disable-unofficial-plugins

或从 GitHub 安装:

dsh plugin --profile <profile> add github:WhatCannotBeSaid/dsh-disable-unofficial-plugins

卸载本插件(示例 profile 为 web):

dsh plugin --profile web remove dsh-disable-unofficial-plugins

卸载不会自动恢复你此前停用的插件,也不会撤销你此前启用的插件。

典型用法

  1. 打开 DSH Web,进入 Plugins,找到 Installed 分组标题行右侧的新按钮。
  2. 需要暂时关闭大部分社区插件时:点击 Disable unofficial plugins…,在 checklist 中取消勾选要保留的项,确认后主按钮会显示将要停用的数量。
  3. 需要恢复时:当全部可切换项已停用后,按钮变为 Enable unofficial plugins…,同样默认全选,取消勾选即保留停用状态。
  4. 查看结果报告:留意失败项的内联错误码与 Full diagnostics;若报告提示部分变更需下次启动生效,按提示重启 DSH。

适用场景与注意

适合:本地或测试 profile 下快速做「非官方插件全开/全关」或部分保留;对比问题是否来自某一类社区 bundle;在不动卸载与配置文件的前提下收窄加载面。

注意:

  • 本插件以当前 DSH 进程权限运行,安装前请阅读 仓库源码 与 MIT 许可证,自行判断是否信任维护者与代码行为。
  • 只读(官方托管、不可管理)的非官方项不会出现在 checklist,仅在对话框与结果中说明。
  • SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;插件来源以 GitHub 与 npm 包为准。

结尾

dsh-disable-unofficial-plugins 在官方插件页 Installed 一行补上「非官方插件批量停用/启用」入口:默认全选、可精细反选,只切换启用状态且不卸载。若你经常在多插件 profile 下调试 DSH,可以用它减少重复点击。

  • 目录页:https://www.skillhub.cn/plugins/WhatCannotBeSaid/dsh-disable-unofficial-plugins
  • GitHub:https://github.com/WhatCannotBeSaid/dsh-disable-unofficial-plugins
羽毛球分组比赛记分
小程序二维码

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

小夜