用 dsh-plugin-installer 给 DeepSeek Harness 加上内置插件市场

前言

DeepSeek Harness(dsh)把运行时拆成可叠加的插件层:工具、会话、沙箱、UI 都可以做成 bundle,装进某个 Profile,下次启动再按层合成。官方仓库把这件事概括成「一切皆插件」。对使用者来说,改能力往往不是去改 Harness 源码,而是选、换、装一层配置。

真正动手时,发现和安装社区插件仍然比较散。官方建议给仓库加上 GitHub Topic dsh-plugin 方便检索;安装则走 dsh plugin add,由 CLI 在 Profile 目录里转发给 pnpm。命令本身不复杂,麻烦在后面几步:这个仓库是不是声明了 dsh.bundle.patch、该不该固定到某个 commit、有没有现成的 Release 安装包、装完要不要重启、以及装到哪个 Web Profile。社区里已经有独立的插件目录站,也有人做了命令行市场;它们能减轻检索成本,但多数还是要把人带回终端。

Toukaiteio 维护的 dsh-plugin-installer 走的是另一条路:在官方 Web UI 的「设置 → 插件」里增加「插件市场」标签页,把发现、校验、安装、更新和 Profile 切换留在同一个界面里。下面按社区目录页、GitHub README / package.json 以及 DeepSeek Harness 官方文档核对后的内容,说明它是什么、能做什么、怎么装、怎么用。

这是什么

dsh-plugin-installer 是一款面向 DeepSeek Harness 的界面增强插件,由 Toukaiteio 维护,许可证为 MIT,主要语言是 JavaScript。社区目录页的定位是「市场插件:快速把 DeepSeek Harness 接入 GitHub 插件生态」;仓库 README 写得更具体:它是内置于 Web UI 的插件市场,同时也是 Web Profile 切换工具。

它解决的不是「再写一个插件」,而是这几件日常操作:

  • 从 GitHub 的 dsh-plugindsh Topic 浏览候选仓库
  • 安装前确认仓库根目录 package.json 声明了 dsh.bundle.patch
  • 优先用 GitHub Release 里已经构建好的 .tgz,并在有摘要时做 SHA-256 校验
  • 把插件装进选定的 Profile,并在页面里更新或删除
  • 打开、创建其他 Web Profile,不必离开当前界面

截至本文写作时(2026-08-18),社区目录页与 GitHub 仓库均显示 6 颗星。最新稳定版是 v0.2.0(2026-08-16 发布),package.json 中的版本号与之一致。需要说明的是:社区插件目录是独立站点,和 DeepSeek / 幻方没有官方从属关系,不能把它理解成官方应用商店;这个安装器本身也是社区插件,不是 Harness 内置功能。

核心功能

从 GitHub Topic 发现,而不是维护私有索引

插件市场在线检索 GitHub 上带 dsh-plugindsh Topic 的仓库,并自动排除 DeepSeek Harness 本体仓库,避免把宿主程序当成插件列出来。列表支持两种 GitHub 官方支持的仓库排序:按更新时间和按星标数。接近列表底部时会预取下一页,形成无限滚动。

README 把 Topic 的含义写得很明确:它只是发现信号,不代表安全审核,也不代表官方背书。仓库出现在列表里,只说明它打了相应标签,不说明代码已经被审查过。

为了降低 GitHub API 压力,搜索结果会按「搜索词 + 排序方式 + 页码」在服务端和客户端各缓存十二分钟。匿名额度用尽时,可以在同一标签页的「GitHub 请求设置」里粘贴 Token;无人值守场景也可以用服务端环境变量 GITHUB_TOKEN 作为后备。

安装前先确认这是 DSH bundle

用户点击安装后,host 端按 README 记载的顺序处理:

  1. 读取仓库元数据和最新 GitHub Release
  2. 读取根目录 package.json
  3. 要求存在有效的 dsh.bundle.patch 声明
  4. 优先使用 Release 中与版本匹配的 <包名>-<版本>.tgz;GitHub 提供摘要时校验内容,并把归档保存在 DSH_HOME/plugin-archives/ 后再安装
  5. 没有合适 Release 时,仅在确认该提交里确实存在包所声明的 JavaScript 入口后,才允许固定 commit 的源码安装

这和 DeepSeek Harness 官方发布文档是对齐的:没有 dsh.bundle 声明的包可以当成普通依赖装上,但不会成为 Profile 的一层;从 Git 安装拿到的是源码而不是构建产物,TypeScript 包如果没提交 lib/,加载会失败。这个安装器选择「有 Release 就装构建包;源码回退必须能看到入口文件」,并且源码路径如果还需要跑 prepare,必须针对该插件再确认一次。既没有可用 Release、也没有可验证入口时,市场会拒绝安装并说明原因。

装完之后可以更新、删除,也可以先管自己

「已安装插件」区域对应当前选定的 Profile。页面打开时,会优先把市场安装的插件和仓库最新 Release 比较;没有 Release 时再比较源码提交。页面上的状态包括:

  • 有可用更新:下载并安装经过验证的最新 Release 安装包
  • 已是最新:已安装包版本与最新 Release 版本一致
  • 暂无法检查更新:Release 和源码状态都核对不上时的保守提示,不会在比较失败时声称「有更新」
  • 删除:确认后再调用 DSH 自己的 plugin remove,让 Profile 的 bundle 清单和实际包状态一致

v0.2.0 起,打开插件市场时还会检查安装器自身有没有新的稳定 Release。一键更新只作用于当前 Profile,重启后生效;重启前旧构建继续提供服务,其他 Profile 不受影响。

文案和仓库日期格式会跟随 DSH「设置 → 通用设置 → 语言」。安装到当前 Web Profile 后,页面会提示重启,并提供「立即重启 DSH」:先拉起新进程,确认新地址可用再跳转,然后关掉旧进程。

在同一页切换 Web Profile

除了装插件,这个界面还提供 Profile 相关操作:

  • 打开 Profile:在新的本地端口启动所选 Web Profile,再跳转到新地址;当前进程暂时保留,切换失败时不丢掉当前会话
  • 创建并打开:初始化一个包含官方 Web bundle 和本插件的新 Profile,然后打开

README 同时记录了一个上游限制:当前 DSH 预览版里,npm 包 @deepseek-ai/dsh-web-app 可能依赖仓库中不存在的 @deepseek-ai/dsh-frontend。遇到这种情况时,创建全新 Web Profile 会被上游包阻断,已经能正常运行的 Web Profile 不受影响。这是 Harness 预览版的打包问题,不是安装器自己能绕开的。

安装与启用

环境要求以仓库 README 和 package.json 为准:

  • Node.js >=22.19.0
  • pnpm >=10
  • DeepSeek Harness 0.1.0-rc.6 或兼容版本
  • 一个已经能打开的 DSH Web Profile(应用内界面挂在 Web UI 上)

社区目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行即可:

dsh plugin add github:Toukaiteio/dsh-plugin-installer

如需可复现安装,目录页建议固定 commit:

dsh plugin add github:Toukaiteio/dsh-plugin-installer#commit

把上面的 commit 换成实际的 40 位哈希。仓库 README 更明确地要求装进正在使用的 Web Profile,并从 GitHub 指定提交安装时仓库里必须已经包含构建后的 lib/

dsh plugin --profile web add github:Toukaiteio/dsh-plugin-installer#<commit>
dsh web

如果希望直接用已经构建好的安装包,可以从 GitHub Releases 下载最新稳定版 .tgz(当前为 dsh-plugin-installer-0.2.0.tgz),再加入 Web Profile:

dsh plugin --profile web add ./dsh-plugin-installer-0.2.0.tgz
dsh web

Windows 也可以用仓库提供的 PowerShell 一键脚本:下载最新稳定 Release,在 GitHub 提供 SHA-256 摘要时校验,把归档留在 DSH_HOME/plugin-archives/dsh-plugin-installer/,安装到 web Profile 并启动 DSH Web:

irm https://raw.githubusercontent.com/Toukaiteio/dsh-plugin-installer/main/scripts/Install-DshPluginInstaller.ps1 | iex

指定其他 Profile、或不自动启动 Web 时,先下载脚本再传参数:

$script = "$env:TEMP\Install-DshPluginInstaller.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Toukaiteio/dsh-plugin-installer/main/scripts/Install-DshPluginInstaller.ps1 -OutFile $script
& $script -Profile work -NoStart

macOS 和 Linux 对应的是 Bash 脚本,流程与 Windows 相同,额外需要 bashcurl 和 Node.js:

curl --fail --location --remote-name https://raw.githubusercontent.com/Toukaiteio/dsh-plugin-installer/main/scripts/install-dsh-plugin-installer.sh
bash ./install-dsh-plugin-installer.sh

指定 Profile 或只安装不启动:

bash ./install-dsh-plugin-installer.sh --profile work --no-start

Web UI 起来之后,打开 设置 → 插件 → 插件市场

典型用法

下面的步骤来自仓库中的 SKILL.md 和中文 README,可以按界面直接做。

  1. 确认当前是一个正在运行的 Web Profile,进入 设置 → 插件 → 插件市场
  2. 在在线列表里按更新时间或星标浏览,或输入搜索词过滤。
  3. 选中仓库后先看审查结果,确认它被识别为 DSH bundle,再执行安装。目标 Profile 要在安装前选好。
  4. 如果审查提示存在 prepare 脚本,说明安装阶段会执行第三方代码。不要在没有明确确认的情况下放行构建权限。
  5. 安装到当前 Web Profile 后,使用 立即重启 DSH,让新的 bundle 叠加层生效。
  6. 之后可在「已安装插件」里查看更新状态,需要时更新或删除。

GitHub 匿名请求被限流时,展开同一标签页里的 GitHub 请求设置,粘贴 Token 并保存。保存后 Token 不会回显到浏览器,插件把它写到:

$DSH_HOME/config/dsh-plugin-installer.json

未设置 DSH_HOME 时使用 DSH 默认目录。保存空值会清除本插件存过的 Token。Token 只在服务端读取,可以来自上述配置,也可以来自环境变量 GITHUB_TOKEN;README 建议只授予访问公开仓库元数据所需的最小权限。

在 Windows 上如果还开了 FastGitHub、steamcommunity_302 这类本地 HTTPS 加速或代理,市场可能连不上 GitHub,并提示无法验证 TLS 证书。仓库 Issue #1 记录了这种情况:代理根证书已被 Windows 信任,但 Node.js 默认没有用系统证书存储。处理方式是先完全退出 DSH,在同一个 CMD 窗口里让 Node.js 使用系统 CA,再启动:

set "NODE_OPTIONS=%NODE_OPTIONS% --use-system-ca"
dsh web

该选项需要 Node.js 22 或更高版本,加速器根证书仍须安装并被 Windows 信任。不要用 NODE_TLS_REJECT_UNAUTHORIZED=0 关掉证书校验。

如果目的是自己发一个能被这个市场发现的插件,仓库 SKILL.md 给出的最小条件是:根目录 package.json 声明 dsh.bundle.patchcordis.patch.yml 插入 host 模块,host 模块导出 apply(ctx),并把 dsh-plugin Topic(可选再加 dsh)打到 GitHub 仓库上。从 Git 安装的仓库应提交构建后的 lib/,避免安装时再跑构建脚本。Skill 描述工作流,Plugin 修改运行时或 UI,两者不是同一类东西。

适用场景与注意事项

比较适合这些情况:

  • 已经在用 DSH 官方 Web UI,希望在设置页里浏览、安装社区插件,而不是每次回到终端抄命令
  • 需要在多个 Web Profile 之间切换,或者偶尔建一个带官方 Web bundle 的新 Profile
  • 给自己的 DSH 插件打上 dsh-plugin Topic 后,想确认市场侧会怎样发现和校验它

使用前有几条边界需要看清楚。

插件以当前 dsh 进程的权限运行,安装时可能执行代码。社区目录页和仓库 README 都要求:安装前检查源代码仓库和许可证。GitHub Topic 不是安全审查。安装器能做的是校验 bundle 形状、固定 commit、优先使用带摘要的 Release 包;它不能代替你阅读第三方源码,尤其是带安装脚本或构建脚本的仓库。

目录页上的 dsh plugin add github:Toukaiteio/dsh-plugin-installer 没有写死 Profile。应用内界面依赖 Web Profile,实际使用时按 README 加上 --profile web(或你正在用的 Profile 名),需要可复现安装时再钉死 commit。DeepSeek Harness 目前仍是开发者预览,官方 README 写明会有破坏性变更;本插件声明兼容 0.1.0-rc.6,升级 Harness 后应再核对一次。

创建全新 Web Profile 还受上游 @deepseek-ai/dsh-frontend 打包问题影响。已有可用的 Web Profile 时,继续在现有 Profile 里装插件即可,不必为了「干净环境」强行新建。

小结

dsh-plugin-installer 把 GitHub 上的 DSH 插件发现和安装收进官方 Web UI 的「设置 → 插件」页:用 Topic 检索,用 dsh.bundle.patch 过滤,优先装校验过的 Release 包,并附带更新、删除和 Profile 切换。它降低的是操作路径,并不改变「插件在当前进程权限下运行」这件事。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin-installer/

GitHub:https://github.com/Toukaiteio/dsh-plugin-installer

DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness

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

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

小夜