检查 DSH profile 内已装插件包更新的工具:从 GitHub 仓库或 release tarball 安装的插件,其详情页会出现 Version 分区,把已装 commit 或版本与确切目标版本对照;/plugin-updater 命令可列出插件包、检查 npm、Git 仓库与 GitHub release 三种来源并生成待确认的更新,确认后才执行;只读的 plugin_updates 工具让 Agent 只检查而不安装,npm registry 包继续使用 DSH 原生更新方式,固定版本或 commit 需显式允许才会升级,且本插件从不代为批准构建脚本。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-better-plugin-updater
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Mooling0602/dsh-better-plugin-updater
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
English | 简体中文
在你的 DeepSeek Harness 里检查和安装插件更新,不必离开 DSH。
它用 DSH 自己的插件管理器来改动软件包。打开 GitHub 来源插件的详情页即可检查和审阅它的更新,也可以使用下面的命令。npm registry 软件包继续使用 DSH 原生的更新控件。未经你确认,不会执行任何更新。
环境要求
- Node.js 22 或更高版本。
- 一个受管理的 DSH profile,可以是 Web 应用、桌面应用或终端。
安装
dsh plugin --profile web add dsh-better-plugin-updater
这个包已发布到 npm,因此安装拿到的是已经构建好的产物:安装过程不执行构建,本机也不需要工具链。它自身的依赖同样不需要安装脚本,不过 profile 的策略仍可能就其他包向你询问。
把 web 换成你在用的那个 profile。然后刷新已经打开的 Web 页面,让浏览器那一半加载进来。
也可以直接从仓库安装,但该来源不含构建产物,安装时会构建这个插件包,并可能请你批准该构建步骤:
dsh plugin --profile web add github:Mooling0602/dsh-better-plugin-updater
要卸载:
dsh plugin --profile web remove dsh-better-plugin-updater
如果刷新之后更新命令仍未出现,重启一次 DSH。DSH 会记住某个已安装的包没有浏览器代码,而在缺少浏览器代码的状态下已经运行起来的安装,会一直保留这个缓存的答案,直到 DSH 再次启动。全新安装不会遇到这种情况。
使用
在插件详情页更新
打开插件页,再打开任意从 GitHub 安装的插件的详情页。它的来源信息下方会出现一个“版本”区块,并在页面打开时自动检查一次更新。区块会显示当前提交或版本与确切目标的对比,只有你在确认弹窗里接受风险后才会真正执行更新。
这个区块适用于从 GitHub 仓库或 GitHub 发布包安装的插件。npm registry 软件包继续使用 DSH 原生的版本控件,本地链接安装的插件没有可检查的更新来源。
使用命令
/plugin-updater 列出已安装的插件包
/plugin-updater check 检查全部插件包是否有更新
/plugin-updater check foo 检查一个插件包
/plugin-updater update foo 显示确切目标并等待确认
/plugin-updater ok 执行已确认的更新
/plugin-updater help 显示用法
未经你的确认,不会执行任何更新。/plugin-updater update foo bar 可以一次指定多个包,* 和 ? 可以匹配包名。重复执行该命令,或者发送 ok、confirm,就会执行刚才向你展示的那次更新。
如果你已经清楚要做什么,并且接受下文所述的风险:
/plugin-updater update foo --accept-removal-risk
选择语言
命令跟随你的界面语言。要强制指定一个:
/plugin-updater --lang zh
/plugin-updater check foo --lang zh
让 agent 替你检查
同样的检查也以只读工具 plugin_updates 提供给 agent。它可以列出插件包并检查更新,但不能安装更新、接受移除风险、批准构建脚本或授予兼容性豁免。
能检查哪些来源
| 插件来源 | 如何找到更新 |
|---|---|
| npm | 你的 registry 中最高的稳定版本。不会建议降级。 |
| Git 仓库 | 跟踪分支上的最新提交,与你安装的那个提交比较。 |
| GitHub release | 最高的版本标签,包含预发布版本。忽略 GitHub 的 latest 标记。 |
| 本地目录或其他来源 | 报告为不支持,而不是猜测。 |
固定版本的 npm 插件和固定提交的 GitHub 源码插件仍受更新保护。使用 /plugin-updater update foo --allow-pinned 可临时允许本次更新,仍需正常确认;也可以在配置中设置 allowPinned 持续允许更新。固定的 Git 提交默认与仓库默认分支比较,也可通过 sources.foo.ref 指定引用。使用 /plugin-updater update foo --allow-pinned --git-branch feature/name 可临时指定分支;批量操作时,该分支适用于所有选中的 GitHub 源码插件。选定分支不一定包含已安装的提交,请确认前核对精确目标。--allow-pinned 和 --git-branch 均不能与 --accept-removal-risk 同时使用,安装后的目标仍会固定。见配置。
DSH 自带的插件包和受保护的包会被跳过。本插件可以检查自身受支持的安装来源,但不能自行更新;请根据安装来源使用外部方式更新。本地链接安装不受更新检查器支持。
风险
更新不是原子操作。 安装新版本之前会先移除旧包。如果随后安装失败,或者该包需要你尚未批准的构建脚本,这个包就可能缺失了。只要已知恢复目标就会打印出来,但恢复需要人工完成,没有自动回滚。
来自 npm registry 的包会在移除旧包之前先下载新版本及其依赖,因此安装阶段不再需要网络。如果下载失败,更新会中止,已安装的包保持不变。GitHub 来源和 release tarball 不会提前下载,这类更新在安装阶段仍然需要网络。
本插件不会替你批准构建脚本,也不会替你授予兼容性豁免。
配置
大多数设置都出现在 DSH 的插件设置页里。在插件条目里打开,改完按保存,新值会在插件下次用到它时生效,不需要重启。表单文案跟随你的界面语言。sources 和 indexes 写在 profile patch 里,因为针对单个包的嵌套覆盖无法用表单字段表达。
所有字段都是可选的。
| 字段 | 默认值 | 用途 |
|---|---|---|
language |
auto |
auto、en 或 zh。auto 跟随你的界面语言。 |
sources |
空 | 针对单个包的覆盖项,见下文。 |
githubTokenEnv |
GITHUB_TOKEN |
要解析的凭据引用名。不是 token 值本身。 |
requestTimeoutMs |
15000 |
单次元数据请求的期限。 |
maxMetadataBytes |
4194304 |
单次元数据响应的最大字节数。 |
planTtlMs |
600000 |
一次确认的有效时长。 |
sources:
example-plugin:
kind: npm
registry: https://registry.npmjs.org/
channel: latest
allowPinned: true
github-plugin:
kind: github-source
repository: owner/repository
ref: main
release-plugin:
kind: github-release
repository: owner/repository
assetTemplate: plugin-{tag}.tgz
覆盖项必须与插件实际安装时的来源一致。它不能把某个包指向一个无关的仓库。
index 来源和全局 indexes 列表是预留接口。本版本接受它们,但从不抓取。
GitHub token
GitHub 对匿名请求的限制紧得多。如果检查因为速率限制而失败,添加一次 token,这个限制就不再挡路:
# ~/.dsh/.credentials.yaml
version: 1
refs:
GITHUB_TOKEN: "<你的 GitHub token>"
只会读取这一个引用,而且只在 GitHub 请求需要时才读。token 只发送给 api.github.com,不发给任何其他地方。它不适用于包下载本身,那部分由 DSH 和 pnpm 各自负责。
要使用别的引用名,把 githubTokenEnv 改成对应的名字。
故障排查
检查因为速率限制失败。 按上文添加 token。确认属于速率限制时,GitHub 会给出一个建议的重试时间,但本插件从不自行重试。
检查报告 unsupported。 该包是从本地目录或本插件读不到的其他来源安装的。请从 npm、Git 仓库或 release 附件重新安装。
更新失败后包不见了。 用更新结果里打印的恢复目标重新安装。恢复需要人工完成,这是有意如此。
更新命令不出现。 刷新 Web 页面。如果仍然没有,重启一次 DSH,让包元数据被重新读取。
有关架构、通信格式与扩展边界,见维护者说明。
许可证
MIT
链接
同类插件
dsh-market/dsh-market★ 10295
在 DeepSeek Harness 设置页内浏览、搜索并安装社区插件,支持分类筛选、一键更新与停用,以及主题切换与配置备份。
zhu1090093659/dsh-web#packages/dsh-plugin-manager★ 9959
设置 → 插件 分区里的插件管理 Tab:从 npm/git 安装带进度、下次启动生效的启停开关、安装冲突对账可撤销、失败一键转交修复会话。
kingOfSoySauce/dsh-skin-market★ 295
原生皮肤市场与生命周期管理器,发现社区皮肤、展示预览与兼容状态,并提供已验证的一键安装或手动安装入口。
awesome-dsh-plugin/dsh-find-plugin★ 216
会话内直接找插件:按关键词/分类搜索本精选 registry,返回描述与可直接执行的安装命令。
bradeGithub/DSH-Plugins-Marketplace★ 199
面向 GitHub dsh-plugin 话题的插件与技能市场:设置页内逛自动收录的全量索引(CI 每 2 小时刷新),一键安装带类型识别、安装脚本与宿主依赖遮蔽安全检查、环境变量密钥管理,并附 STANDARD.md 识别层规范。
Sanqi-normal/dsh-webui-market-plugin★ 103
dsh Web GUI 内的社区插件市场:浏览 awesome-dsh-plugin.com 目录,从 设置 → 插件 → 插件市场 安装/卸载插件到 profile。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。