← 返回列表
未验证
每小时——或按需,通过 /check-updates——检查你已安装的 DeepSeek…
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/22 · 已提供中文文档
每小时检查 npm 上已安装的 dsh 插件是否有更新版本,并弹出一个审批气泡询问要升级哪些插件
综合分
28.1
GitHub 分
28.1
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add stuarthu/dsh-update-notifier该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-update-notifier
每小时——或按需,通过 /check-updates——检查你已安装的 DeepSeek Harness(dsh)插件是否有更新版本,并通过一个一键批准气泡来升级它们。
dsh 中没有任何东西会告诉你已安装的插件有了新版本;你只能靠自己记得运行 npm view 才能发现。这个插件填补了这一空白:它每小时将每个已安装的插件与注册表进行一次比对,当有更新的版本时,它会以会话中真实问题气泡的形式询问你——要升级哪些插件。勾选你想要的,智能体就会在你眼前执行升级。它从不自行升级任何东西。
行为
每小时一次(可配置),对于每个支撑已加载插件的 npm 包:
- 查询注册表的 latest,并将其与你配置文件的 node_modules 中安装的版本进行比较。比较是严格符合 semver 的——预发布版本排序正确,从不建议降级——并且不是严格 X.Y.Z 格式的版本会被跳过,而不是靠猜测处理。
- 在一个气泡中询问。 任何更新的版本都会变成一个由 dsh 自身渲染的多选问题(dsh-chrome 0.1.2 -> 0.1.3,每个插件一个选项),附加到你最近活跃的会话上。它不消耗模型轮次,也不消耗 token,并且如果你重新连接,它会被重放。
- 将勾选的插件交给智能体,作为一条后续消息,告诉它运行
pnpm --dir add @ ...
智能体会立即被唤醒,你可以看着升级发生。将其与 dsh-hot-reload 搭配使用,新版本会实时生效,无需重启 dsh。
/check-updates
不想等到整点?在会话中输入 /check-updates:
/check-updates
check-updates · 2 updates — see the question above (7 plugins checked)
它会立即针对你输入它的那个会话运行一个完整周期,并且一旦注册表扫描完成,该行就会结算——它弹出的气泡是一个普通气泡,随时可以回答,刷新后依然存在。在完全无法显示气泡的情况下,结算结果会附带 pnpm ... add 命令,因此答案永远不会只是“你做不到”。
注册表无法访问的包——网络故障、超时、5xx、速率限制,或返回结果中没有版本号——会被计入结算结果,而不是被当作已是最新版本。如果一次扫描中所有包都无法访问,则会以错误结算,而不是“无更新”。两个计数相加:5 plugins checked, 2 unreachable 意味着扫描了七个包。取消该行会停止扫描,因此你取消的检查不会在一分钟后突然弹出一个气泡。
手动检查忽略下面的拒绝记忆:既然你主动询问了,你就会得到完整列表,包括你之前未勾选的版本。它不会干扰每小时的调度,并且在气泡存在时——会附带原因地——拒绝运行。
已经打开,或者检查已在进行中。
该命令出现在 dsh 组合命令注册表的任何地方——@deepseek-ai/dsh-base 就是这样做的,因此任何基于它构建的 profile 都有 /check-updates。它通过 ctx.inject 注册,因此即使是没有该服务的无头 profile 也仍会加载该插件并保留其每小时检查。
只询问一次
对于给定版本,你只会被询问一次(由每小时周期触发——上述命令会覆盖此行为):
- 未勾选的即为拒绝,记录在 /.dsh-update-notifier.json 中,并且不会再被提供——跨重启也是如此——直到注册表的 latest 变为另一个仍优于你已安装版本的版本。删除该文件即可重新询问。
- 批准不会被记录:升级成功会使该版本成为当前版本,而升级失败则值得在重启后重新提供。
- 你从未回答的气泡(会话结束、dsh 停止)不算拒绝——你会再次被询问。
如果还没有活动会话,该提议会被保留:它会在你的下一条消息之后以及下一个每小时周期重试。在完全无法渲染气泡的地方也会被保留——例如无头 profile,或者组合了 userQuestions 服务但没有为其注册任何 UI 的 profile——在那里,可用更新和确切的升级命令也会写入日志,因为你的任何消息都不会让气泡出现。
安装
dsh plugin --profile web add dsh-update-notifier
然后重启 dsh 一次(bundle 补丁层在启动时加载)。适用于任何 profile——将 web 替换为你使用的任何 profile;它会检查自己加载到的 profile。需要 Node 18+,以使用全局 fetch;任何 dsh 宿主都有它。
兼容性
针对 dsh 0.1.0-rc.6(Node 22 / 24)构建并测试。它只使用公共宿主服务,因此如果某个服务缺失,它会降级而不是崩溃:
| 宿主接口 | 用途 |
|---|---|
| loader.entries() | 查找哪些包支撑已加载的插件 |
| userQuestions.ask() | 渲染批准气泡 |
| userQuestions.provider | 不承诺没有 UI 注册来渲染的气泡 |
| agents.get(sessionId) | 解析会话的活动 agent |
| agent.followup() | 唤醒该 agent 以运行升级 |
| session/event (user/message) | 跟踪最近活跃的会话 |
| agent.disposed | 撤回其会话已终止的气泡 |
| commands.register() | /check-updates 命令 |
| agents.roots() | 不承诺 ask() 会拒绝的气泡 |
userQuestions 和 commands 在需要时解析,而不是声明为依赖项,因此该插件仍会在两者都不具备的无头 profile 中加载。
选择退出
不希望被提供升级的插件可以在自己的 package.json 中声明:
{ "dsh": { "updateNotifier": false } }
使用 exclude(见下文)来静默你无法控制的插件。
配置
在你的 profile 的 cordis.patch.yml 中的 update-notifier 行上设置:
| 键 | 默认值 | 含义 |
|---|---|---|
| interval | 3600000 | 检查之间的毫秒数(被限制为最小 60000) |
| initialDelay | 10000 | 启动后首次检查前的毫秒数 |
| registry | https://registry.npmjs.org | 要查询的兼容 npm 的注册表 |
| exclude | [] | 永不检查或提及的包名 |
| fetchTimeout | 10000 | 每次请求注册表的超时时间,毫秒(最小 1000) |
| profileDir | 自动 | 配置文件目录的绝对路径(若省略则从加载器基础 URL 自动检测) |
安全
- 未经你点击,不会升级任何内容。 此插件从不启动包管理器。它组合气泡,并在获得批准后,由智能体在众目睽睽之下执行指令。
- 注册表中的文本不会进入 UI 或模型。 只有从你自己的配置文件中读取的包名,以及通过 /^[0-9A-Za-z.+-]{1,64}$/ 校验的版本字符串,才会被放入气泡或智能体消息中——绝不会是从注册表获取的描述、README 或变更日志。
- 后续消息带有 source.kind: "plugin",准确列出已批准的包,并告知智能体不要触碰其他任何内容。
限制——请阅读此部分
- 它只询问;它不验证。 一旦你批准,升级就由智能体来运行。失败会在会话中可见,但此插件既不会重试,也不会在之后检查新版本是否真的已安装。
- 只能看到从注册表安装的插件。 从本地检出链接的插件,或内置于 dsh 的插件,在配置文件的 node_modules 下没有对应的包,会被静默跳过——没有气泡,也没有日志行。
- 只查询 latest dist-tag。 不支持固定版本范围、next/beta 通道,或将某个包保持在某个主版本;如果你永远不想要某个插件的最新版本,应使用 exclude。
- 一次只显示一个气泡。 当气泡等待回答时,每小时的检查会跳过——并且 /check-updates 会以“已有一个升级问题待处理”为由拒绝——因此在此期间发布的任何内容都会在你回答后的第一个周期被拾取。
- 拒绝是针对那个确切版本的,而不是“直到该版本为止的任何版本”:如果注册表的 latest 变为一个仍然高于你的不同版本——包括取消发布后的更低版本——你会再次被询问。
- 气泡需要一个 dsh 可以附加问题的会话。注册表故障、加载器状态降级以及状态文件不可写都会降级为日志记录;只有两件事会彻底禁用该插件——上下文中没有插件加载器,以及它无法定位配置文件目录——并且它会在日志中说明是哪一种。
许可证
MIT © Stuart Hu同作者(stuarthu)的其他插件
扫码进群