dsh-plugin-manager:在设置页检测并更新 GitHub 来源的 DSH 插件

前言

DeepSeek Harness(DSH)用组合包管理插件,github: 依赖在安装时会把 commit 写进 profile 的锁文件。上游仓库继续 push 之后,本地不会自动跟上,原生插件页主要负责组合包的启停与安装,也不跟踪第三方 GitHub 依赖的远端变化。

如果你已经用原生「添加插件」装了一批来自 GitHub 的插件,需要知道「有没有新版本、要不要更新」,又不想换掉原生插件页或额外占一个页签,社区维护的 dsh-plugin-manager(维护者 longyi-0x0,分类:客户端)做的是增量补位:不动原生插件页、原生「添加插件」对话框和内置插件配置,只在设置页和组合包详情里补上检测与更新能力。

这是什么

DSH 插件管理器(npm 包名 dsh-plugin-manager,当前资料中版本 0.5.0,MIT 许可)只做一件事:列出当前 profile 里来源为 github.com 的已安装组合包,对比锁文件里的本地 commit 与远端 ref,给出「待更新」状态,并支持手动或自动更新。安装 GitHub 插件仍走插件页原生的「添加插件」;本插件不重复实现安装表单,也不使用 plugins.tab 或添加菜单。

目录页:longyi-0x0/dsh-plugin-manager
源码:github.com/longyi-0x0/dsh-plugin-manager

界面插在哪

本插件不占插件页 tab,不改原生「已安装插件」列表的行内标签、顶部刷新按钮和标题右侧区域(这些位置没有对应插件插槽)。能力分布在以下插槽:

插槽 位置 内容
settings.section 设置页侧栏「插件管理器」 自动检测/自动更新开关、全局列表、「待更新」标签、「刷新并检测」、「全部更新」、逐项检查/更新
shell.overlay 任意页面 发现更新的「立即更新 / 稍后」弹窗、自动更新结果提示条
plugins.detail.badge 组合包详情页标题旁 有更新或检测失败时的状态
plugins.detail.actions 组合包详情页页头 「检查 / 更新」按钮
plugins.detail.section 组合包详情页底部 来源 spec、本地/远端 commit、最近检查时间与单项操作

重启 DSH 后,设置页侧栏会出现「插件管理器」;GitHub 来源的组合包详情页会多出更新相关 UI,原生插件页本身保持不变。

核心功能

清单与手动检测、更新

打开 设置 → 插件管理器。页面第一次打开时会自动做一次全部检测:从 profile 的 pnpm-lock.yaml 读本地 commit,用 git ls-remote 取远端;不一致即视为有更新。

  • 「刷新并检测」:重新读取清单并检查全部 GitHub 来源插件(设置页顶部按钮;原生插件页的刷新没有 hook,不会联动)。
  • 「全部更新」:对已检出有更新的项逐个更新;本插件自己排在最后,避免自更新重载打断其他项。
  • 单行仍可「检查 / 更新」;有更新的行显示「待更新」标签。

检测只读远端,不改文件;结果只存在宿主内存里,DSH 重启后需要重新检测。

自动检测与自动更新

设置页顶部有三个开关,属于当前 profile,写在 profile 目录的 dsh-plugin-manager.json(与 compatibility.json 并列);换 profile 需重新设置。

开关 开启后
启动自动检测 DSH 启动约 3 秒后自动做一次「刷新并检测」
定时自动检测 每小时自动做一次检测
开启自动更新 检测到更新后直接更新;关闭时则弹窗提示

关闭自动更新时,任意页面可能弹出「发现插件更新」对话框,可选「稍后」或「立即更新」。开启自动更新时,成功或失败以会自动消失的提示条告知;单个失败不阻塞其它项。设置卡下方展示最近自动检测时间、下次定时检测时间与最近一次结果;定时检测在宿主进程计时,不依赖页面是否打开。

更新判定范围

只处理已安装且来源为 GitHub 的组合包,例如 github:owner/repo(可带 #分支或标签)、https://github.com/...、git+https://github.com/...、git@github.com:...。本地 link:、npm 包、其他 Git 主机不在列表内。钉死到 40 位 commit 的 spec 显示「钉住 commit」且不提供更新(本插件自更新后的 pinned spec 例外,仍跟远端默认分支 HEAD 比对)。

更新实现方式

更新走 DSH 自带的 pluginManager:对普通插件先 removeBundle 再 installBundle(原 spec, { enabled: 原启用状态 })。自更新不能先卸载更新器,改为用 github:owner/repo#<remote commit> 调 installBundle,由 DSH 在 pnpm 之后 HMR 替换运行中的插件;可能触发重载,无变化时需重启 DSH。

安装与启用

产物已提交到 GitHub,安装不需要现场构建。插件以当前 DSH 进程权限运行,安装前请自行查看源码与 MIT 许可证。

macOS / Linux(桌面版也可写 dsh 的完整路径):

dsh plugin --profile desktop add "github:longyi-0x0/dsh-plugin-manager"

Windows 使用桌面版自带 CLI:

& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" `
  plugin --profile desktop add "github:longyi-0x0/dsh-plugin-manager"

开发仓库本地副本时用 link:(路径换成你的目录):

dsh plugin --profile desktop add "link:/path/to/dsh-plugin-manager"

安装完成后重启 DSH,再进入设置页的「插件管理器」使用。

从 GitHub 安装其它插件仍用原生「添加插件」,例如:

  • github:owner/repo,可带 #分支或标签
  • https://github.com/owner/repo
  • https://github.com/owner/repo/tree/<分支或标签>
  • git@github.com:owner/repo.git

包检查、pnpm 下载、构建脚本审批、兼容性检查与失败恢复均由原生安装对话框完成。

典型用法

  1. 用原生「添加插件」安装若干 github: 组合包,重启或刷新 profile 后确认已启用。
  2. 打开 设置 → 插件管理器,首次进入会自动检测;或点击 「刷新并检测」 查看「待更新」标签。
  3. 对单个插件点 检查 / 更新,或一次性 全部更新;若提示需要重启,按 DSH 提示操作。
  4. 若希望少动手:在设置页打开「启动自动检测」「定时自动检测」;需要静默升级则再打开「开启自动更新」,否则保留弹窗确认。
  5. 在 组合包详情页 也可查看 commit 对比并执行检查/更新,与设置页列表一致。

宿主在 webServer 上提供 /dsh-plugin-manager/api(仅本机回环同源 POST/GET);远程访问模式下界面会显示不可用。请在主 DSH 窗口使用;guest/无 profile 管理的二级窗口里接口不可用。

适用场景与注意

适合:profile 里有多项从 GitHub 安装的 DSH 插件,希望集中看远端是否有新 commit,并在不改动原生插件页的前提下批量或自动更新。

注意:

  • 只列 github.com 来源;gitcode、自建 Git、npm、link: 本地依赖不在管理范围内。
  • 检测结果不持久化,重启后要重新检测;自动开关写在 dsh-plugin-manager.json,跟着 profile 走。
  • 卸载成功而安装失败时组合包可能处于未安装状态,设置页会保留错误信息,可用原生「添加插件」按原 spec 重装。
  • bundle patch 的行 id 必须是 dsh-plugin-manager(实现备注);误写成 plugin-manager 会与内置 profile 管理服务冲突。
  • SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实来自项目 README 与 package 元数据。

结尾

dsh-plugin-manager 补的是 DSH 原生插件页未覆盖的一段:GitHub 锁 commit 与远端 HEAD/分支的差异。安装仍用原生入口,管理集中在设置页「插件管理器」与组合包详情,可选启动/定时检测与自动更新。

  • 目录页:https://www.skillhub.cn/plugins/longyi-0x0/dsh-plugin-manager
  • GitHub:https://github.com/longyi-0x0/dsh-plugin-manager
羽毛球分组比赛记分
小程序二维码

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

小夜