dsh-plugin-butler:在 Web UI 中管理 DSH 插件

前言

DSH 的理念是「一切皆插件」。插件多起来之后,常见操作会分散到命令行和配置文件里:安装插件、停止某个插件、查看 README、检查版本、处理启动失败。dsh-plugin-butler 把这些动作集中到 DSH Web UI 的「设置 → 插件」中,提供一个「插件管理」标签页。

这是什么

imtanhui/dsh-plugin-butler 是一个 DSH 插件,定位为插件管家:在 Web UI 中图形化管理 DeepSeek Harness (DSH) 插件。许可证为 MIT。本文参考的 package.json 版本为 0.6.0,要求 Node >=18react ^18.2.0 是 optional peerDependency。它强调零构建、零运行时依赖。

核心功能

查看与中文目录

  • 官方 / 外部两类分组,可折叠。
  • 内置 130+ 官方模块的中文目录,包含中文名、一句说明和分类。
  • 中文目录 / 分组 / 说明覆盖会存到 ~/.dsh/plugin-manager/{catalog.json,groups.json}

实时启停与健康状态

  • 启停会精确编辑 profile 的 cordis.patch.yml,增删 disabled: true 块。
  • 编辑后由 DSH 的 HMR 观察器热应用,无需重启。
  • 失败行红色高亮,支持「只看失败」筛选。
  • 每行展开后可查看注入的服务 / 提供方依赖。

自定义分组

  • 外部插件可按分组组织,支持新建 / 重命名 / 删除 / 移动。
  • 分组持久化到 ~/.dsh/plugin-manager/groups.json
  • 支持一键过滤。

更新检测与一键更新

「检查更新」会对比 registry latest,有新版的行会显示 当前 → 最新

「更新」会执行类似下面的安装命令:

pnpm add <name>@latest

更新失败时自动回滚旧版本。link / file / git 源的依赖标记为不可自动更新。

卸载

卸载会从 dsh.profile.bundles 移除,并执行:

pnpm remove

失败时自动回滚。更新 / 安装 / 卸载链路整体串行互斥。

插件详情

  • 插件详情弹窗会显示 Markdown README。
  • README 渲染使用插件内置的手写渲染器,零依赖。

插件市场

  • 检索 GitHub topic:dsh-plugin 仓库,按 star 排序并分页。
  • 每项显示作者 / star / 简介,支持「详情」和「一键安装」。
  • 市场依赖 GitHub Search API;未认证时存在 60 次/小时限流,主要影响频繁搜索。
  • 该市场检索独立 GitHub 仓库,不等同于 DeepSeek 或幻方官方应用商店。

依赖关系图

  • 全屏依赖图,采用从左到右的思维导图布局。
  • 节点显示项目名,悬停显示详情;官方节点为蓝点,外部节点为黑点。
  • 支持拖拽节点、悬停高亮上下游。
  • 依赖解析基于运行时 fiber._store 尽力完成,语义级冲突不在检测范围。

安装与启用

下面先安装插件,再重启 profile 让标签页生效。

1、从 GitHub 安装:

dsh plugin --profile <name> add github:imtanhui/dsh-plugin-butler

这条命令把 dsh-plugin-butler 添加到指定 profile。

2、本地源码安装(开发调试):

cd /path/to/dsh-plugin-butler
dsh plugin --profile <name> add .

适合先阅读源码或做本地调试。

3、重启 profile:

重启后,Web UI 的「设置 → 插件」会出现「插件管理」标签页。

典型用法

检查更新

1、打开「设置 → 插件 → 插件管理」。

2、点「检查更新」。

3、插件会对比每个已装 npm 依赖的 registry latest,有新版的行会显示 当前 → 最新

4、点对应行的「更新」。

5、如果更新失败,会回滚到上一版本。

本地开发

pnpm run check
pnpm test

pnpm run check 用于检查源文件语法,pnpm test 用于运行测试。

适用场景与注意

适合经常安装、更新、启停 DSH 插件的开发者,尤其是希望在一个界面里查看版本、README、依赖关系和失败状态的维护场景。

使用前建议检查:

  • 插件以当前 DSH 进程权限运行;安装前应检查源码、许可证、依赖和实际执行的命令。
  • 禁用被依赖的条目可能导致 profile 启动失败,官方为 fail-loud 设计;恢复时可手动删除该 profile cordis.patch.yml 里的 disabled 块。
  • 核心行受保护,不能从 UI 禁用,需要手工改配置文件。
  • !!js 表达式控制的行 UI 不处理,须手工编辑。
  • link / file / git 源的依赖不可自动更新。
  • 市场搜索受 GitHub Search API 未认证限流影响。
  • 依赖图基于运行时 fiber._store 尽力解析,语义级冲突不在检测范围。
  • GET 请求带同源校验,用于防 CSRF / DNS-rebinding。

链接

  • GitHub:https://github.com/imtanhui/dsh-plugin-butler
  • 目录页:本文资料未提供可直接引用的目录页 URL;请以实际 DSH 社区目录站点为准。
羽毛球分组比赛记分
小程序二维码

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

Xiaoye