安装
在 DeepSeek Harness 里通过 dsh-market 安装
dsh plugin --profile web add dshmarket
或使用命令行
dsh plugin --profile web add dsh-update-copilot
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness 的更新助手:追踪 dsh 本体、官方 bundle 和每个 profile 已装插件的版本状态 —— 先帮你决策,确认后才更新。
English | 中文
为什么做这个
DSH 迭代很快,插件生态同样如此。每个 profile 通过 pnpm spec 安装插件——npm 版本号、GitHub commit 锁定、本地 link: 目录——每种通道各有各的过期方式。手动检查意味着挨个仓库跑一遍;无脑全自动升级则等于把环境交给第三方代码。
这个插件走中间路线:全部检测、汇总变更、只更新你确认过的。 DSH 本体刻意设计为只报告不执行——升级 harness 会重启所有会话,这个决定必须留给人。
功能
| 🔭 全量雷达 | 一次扫描覆盖 dsh 本体 + 官方 bundle(dsh-base、dsh-web-app)+ 所有 profile 的插件依赖 |
| 🔄 双通道 | npm registry 版本(完整 semver 比较,含 prerelease)+ git 上游(pinned commit vs HEAD,link: 目录走只读 ls-remote) |
| 🧭 更新要点 | 逐项给出:semver 跨度、风险分级(major → 高、minor → 中、patch → 低)、变更材料——npm 版本列表 / GitHub compare 提交 / Release 说明(正文内联渲染)/ 本地 git log;每条材料都可点击跳转(npm 版本页、提交、Release、compare 对比页),每个插件行带 ↗ 直达其仓库——monorepo 子包定位到子目录,解析不出 GitHub 仓库的 npm 插件兜底到其 npm 包页面 |
| 🤖 Agent 工具 | update_copilot_scan / update_copilot_brief / update_copilot_update——对 Agent 说一句「有没有更新」,得到有数据支撑的回答 |
| 🖥 Web 界面 | 设置按钮旁的侧栏入口(带懒加载徽章:首次打开弹窗后才显示落后插件数——不做后台轮询;可在设置中关闭徽章,还你一个安静侧栏)打开紧凑雷达弹窗——落后项优先、已最新折叠;完整页面仍在 设置 → 更新助手,含内联更新要点与两步确认更新;更新过程通过 SSE 实时推送进度(解析依赖 / 下载中 / 重试中 / 暂存 / 拉取 / 恢复阶段),直接渲染成每行进度条 |
| 🛡 更新护栏 | 同源 POST + 显式 confirm、严格目标 allowlist、单并发锁、5 分钟超时;npm/github 通道只走官方 dsh plugin CLI,link: 本地目录走 git pull(自动暂存 → 拉取 → 恢复),冲突一律交还手动处理;file: 与官方 @deepseek-ai/* 包仍拒绝 |
| 🌐 完整双语 | 所有面向用户的文案——面板、弹窗、徽章、更新要点、建议、更新错误——跟随界面语言(中/英);Agent 工具路径保留稳定英文标识 |
安装
# 从 npm 安装(推荐)
dsh plugin --profile web add dsh-update-copilot
# 或者直接从 GitHub 仓库安装
dsh plugin --profile web add github:hezhongtang/dsh-update-copilot
重启 dsh web,打开 Settings → 更新助手。其他 profile 用法相同(--profile <name>)。
使用
问你的 Agent
「帮我看看插件有没有更新」
Agent 会调用 update_copilot_scan,对每个落后项生成更新要点、先呈现风险,然后等你拍板。更新工具在没有 confirm: true 时直接拒绝执行。
或者用弹窗 / 面板
设置旁的侧栏按钮打开紧凑雷达弹窗(ESC 或点击遮罩关闭;URL 带 ?duc=1 会自动打开一次——截图和测试很好用)。设置 → 更新助手 是完整页面:核心状态(附可复制的升级命令——只展示、绝不执行)、每个 profile 的插件当前 → 最新版本、内联更新要点、两步确认更新按钮。更新完成后,当前 profile 里 entry 与 bundle patch 未变的插件会就地热重载;只有热重载不适用的更新(bundle patch 变化、非当前 profile、自更新等)才显示重启横幅。
Agent 工具一览
| 工具 | 读/写 | 用途 |
|---|---|---|
update_copilot_scan |
读 | 全量扫描:核心 + 所有 profile(10 分钟缓存,force 强制刷新) |
update_copilot_brief |
读 | 单项的 semver 跨度、风险、变更材料与建议 |
update_copilot_update |
写 | 执行一次已确认的更新:npm/github 通道走官方 dsh plugin CLI(失败/超时自动重试,默认共 3 次,1s/3s 退避);link: 本地目录在 checkout 内执行 git pull(自动暂存 → 拉取 → 恢复,冲突交还手动处理),或传 source: "remote" 把依赖切换到 npm 已发布版本(包未发布到 npm 时用 github: spec)——会断开本地链接 |
工作原理
每个依赖 spec 先分类到通道,每个通道有自己的比较方式:
| 通道 | spec 示例 | 当前版本 | 最新版本 |
|---|---|---|---|
| npm | ^0.1.4 |
已装 package.json 的版本 |
registry 全量文档中的最新版 |
| github | github:owner/repo#sha |
pnpm-lock.yaml 锁定的 commit |
GitHub API 查询的上游 HEAD |
| linked | link:../my-plugin |
本地 git rev-parse HEAD |
git ls-remote origin HEAD(只读) |
npm 通道刻意不信任 latest dist-tag:monorepo 子包的这个 tag 常年滞后,会把实际比 tag 更新的安装误报为落后。版本比较采用完整 semver 优先级(含 prerelease),因此 0.1.0-rc.6 > 0.1.0-rc.5、1.0.0 > 1.0.0-rc.1 都成立。
更新通过两条路径执行,都经过严格校验、不拼接 shell:npm/github 通道走 dsh plugin --profile <p> add <target>——和人手动输入的是同一条路径——目标字符串经过 allowlist 校验;link: 本地目录在 checkout 内直接跑 git(git stash push 暂存本地改动 → git pull → git stash pop 恢复),pull 失败/超时自动重试(默认共 3 次,1s/3s 退避),合并冲突或恢复冲突绝不自动解决——结果里返回 attempts、stash 状态与最后一次输出。
link: 目录还可以切换到远端源:copilot 把依赖 spec 改写为 npm 上最新发布的版本(优先查 registry),包未发布到 npm 时改写为 github:owner/repo#<origin HEAD>。本地链接断开,此后更新走常规 npm/github 通道。切换是破坏性操作,永远需要显式确认,绝不并入默认 pull 路径。
安全性
- 唯一的变更路由是
POST /dsh-update-copilot/update:强制同源 + 必须显式confirm: true。 - 官方
@deepseek-ai/*包和 dsh 本体绝不自动更新;本体的升级命令只展示、不执行。 - 所有上游查询均为只读(
registry.npmjs.org、api.github.com、git ls-remote)且带硬超时;单项查询失败只降级该项,不影响整体扫描。
限制
- 插件热重载为一期能力:仅覆盖“当前 profile 中仍在运行、且新版未改动
dsh.bundle.patch与dsh.client声明”的更新(link:目录更新同样适用——node_modules 里是指向 checkout 的符号链接);bundle patch 变化、非当前 profile、copilot 自更新等仍会提示重启dsh。 link:目录更新要求 checkout 配置了上游分支;本地未提交改动自动暂存并在拉取后恢复,恢复冲突时需手动git stash list/git stash pop处理。link:切换到远端源会断开本地链接,且不提供自动切回(需手改 spec);npm 优先策略安装的是 registry 版本,可能与本地开发中的 checkout 不一致。- GitHub API 未认证时限流 60 次/小时——更新要点会优雅降级为基础版本列表。
- 裸
git+https://spec 只报告、不提供比较通道。
参与贡献
欢迎提 Issue 和 PR:hezhongtang/dsh-update-copilot。代码库刻意保持小巧、零依赖——host 是纯 ESM,浏览器端是手写 CJS bundle,无需搭建任何构建环境。
许可
MIT © 2026 hezhongtang