dsh-restart-and-update: Sidebar Restart Harness and Version-Aware Update Plugin

前言

在 DeepSeek Harness(DSH)里装插件、改客户端 bundle 之后,常见做法是手动关进程再开,或在命令行里逐个 dsh plugin add。Windows 上若用脚本拉起 GUI,还容易踩到「控制台窗口残留、关窗即杀进程」的问题。侧栏里也没有统一的「哪些插件有新版本、更新后要刷新还是完全重启」入口。

下面介绍社区插件 dsh-restart-and-update(维护者 dolacmeo,分类:客户端)。它在侧栏底部动作行提供「重启」与「更新插件 / 插件市场」,并用 Host 侧路由完成检测、安装与(在 Windows 上)脱离进程树的完全重启。

这是什么

dsh-restart-and-update 是 DSH 的双半插件:Client 半在侧栏 footArea 的 sidebar.footer.action(order 1000)注册两个按钮;Host 半注册 HTTP 路由,读 profile 的 package.json、查 npm registry,并调用桌面自带的 dsh.cmd 执行更新与重启。

官方简介:从侧栏重启 DeepSeek Harness 并按版本更新插件——包含在 Windows 上能 survive console trap 的完全重启、带发布时间的版本比对,以及回到插件市场的入口。

侧栏入口与弹窗

入口行

两个按钮共用侧栏底部一行,排在官方/第三方条目之后:

  • 左:重启——44px 行高,带图标与文字。只有「已经更新完、等着重启生效」的插件才会出现橙色提醒 badge(tooltip:「N 个插件已更新,等重启生效」)。仅有可选更新、尚未执行更新时,重启按钮不会出现数字。
  • 右:有更新时显示「更新插件」,带蓝色数量 badge;没有更新时变为「插件市场」(提包图标),在本插件自己的全屏浮层里打开市场的 discover 分栏(不是依赖默认可能不存在的 dsh-market 主面板 key)。

侧栏收进 56px 轨道时,两按钮退成 36×36 图标,badge 变为右上角小圆点。

重启弹窗

标题、说明,以及两行按钮:第一行 重启GUI / 完全重启,第二行 取消 通栏。

更新弹窗

可滚动插件列表(每行:插件名、当前版本与发布时间 → 新版本与发布时间,行尾标 需完全重启 或 刷新即可),底部 取消(左)与 更新 (n)(右)。列表过长只滚动列表区域,底部按钮不会被挤出屏幕。

检测时机

Client 模块挂载后约 300ms 检测一次;窗口重新可见时再检测。Host 侧 packument 有 10 分钟缓存。

两种重启的区别

按钮 行为 影响
重启GUI 浏览器 location.reload() 只重载前端、重新拉客户端插件代码;后端、会话、正在跑的任务不受影响
完全重启 POST /dsh-restart-and-update/restart,由 Host 拉起脱离进程树的 PowerShell worker:可选先更新插件 → taskkill /T /F 杀应用 → 再启动 DeepSeek Harness.exe 整个应用与后端一起重启;日志在 %TEMP%\dsh-restart-and-update\restart-*.log
取消 关闭弹窗 无

完全重启目前只在 Windows 上有实现;重启GUI 各平台可用。

Worker 通过 WMI Win32_Process.Create 启动,避免 Electron 主进程 AttachConsole 认领 worker 控制台而导致「关控制台窗口杀掉 Harness」;写操作还要求请求头 x-dsh-restart-and-update: full 并与 Origin/Host 同源校验。

插件市场入口

没有待更新插件时,第二个按钮打开本插件浮层内的市场面板:优先 ctx.get('market') 的 render({ preferredSubsectionId: 'discover' })(市场 README 中的官方嵌入方式)。Client 侧 ctx 只有 get / on / provide / effect,不能用 ctx.inject。

  • 未安装 dshmarket 时:浮层显示安装确认,确认后 POST /dsh-restart-and-update/install-market,走 dsh plugin --profile <p> add dshmarket@<最新版本>,成功后提示重启并可直接点 完全重启。
  • 取不到 market 服务时:回退为 layout.selectPanel('plugins'),在插件页的 Discover tab 浏览。

更新插件

检测

GET /dsh-restart-and-update/updates 对 profile 里 npm 依赖查 registry.npmjs.org 完整 packument(需 time 字段),比较 semver,返回 updatable(驱动更新按钮蓝色 badge)与 pending(已装新版本、进程尚未加载,驱动重启按钮橙色 badge)。pending persisted 在 %TEMP%\dsh-restart-and-update\pending-updates.json,刷新页面不会清掉;完全重启前 worker 会清空。

「刷新即可」与「需完全重启」的判定与市场一致:manifest 里 dsh.bundle === undefined && dsh.client !== undefined 为纯客户端插件,刷新 GUI 即可;其余含 Host 半的必须完全重启。

执行

POST /dsh-restart-and-update/update,body { "names": [...] },需头 x-dsh-restart-and-update: full。通过 resources/runtime/cli/bin/dsh.cmd 执行 dsh plugin --profile <p> add <name>@<精确版本>(不用 @latest,避免 pnpm release-age 导致版本不动仍报成功)。装完回读 node_modules 校验版本。dshmarket 不能自我替换,记为 deferred,由完全重启 worker 在杀进程前更新。

安装与版本要求

在已安装 DSH CLI 的环境中执行:

dsh plugin add dsh-restart-and-update
  • Node.js:20+
  • dsh:>=0.2.0-rc.1 <0.3.0-0

改 Host 半 index.js 后需 dsh plugin remove dsh-restart-and-update 再重新 add,才能换掉已加载的模块代际。

典型用法

  1. 安装插件后启动或刷新 Harness,看侧栏底部是否出现「重启」与「更新插件 / 插件市场」。
  2. 若有蓝色 badge,点 更新插件,在弹窗勾选列表后点 更新 (n);行尾提示 刷新即可 的,更新后点 重启GUI;提示 需完全重启 的,更新后点 完全重启(Windows)。
  3. 若橙色 badge 提示待生效插件,打开重启弹窗确认文案后选择 重启GUI 或 完全重启。
  4. 无待更新项时,用 插件市场 浏览 discover;未装市场时按浮层引导安装 dshmarket。

Host 状态可查:GET /dsh-restart-and-update/state(平台、exe、canRestart、profile、市场是否安装等)。

适用场景与注意

适合经常在 Harness 里维护 npm 插件、需要在 GUI 内完成「查更新 → 安装 → 选对重启方式」的开发者。完全重启依赖 Windows 与本地 DeepSeek Harness.exe 路径;Linux/macOS 用户仍可用 GUI 重载与更新检测,但无法使用该插件文档中的完全重启 worker 路径。

插件以当前 DSH 进程权限运行,安装前建议阅读仓库源码与 MIT 许可证。SkillHub 目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-restart-and-update 把重启 Harness、按 semver 与发布时间更新插件、以及回到市场 discover,收敛到侧栏底部一行操作,并在 Windows 上处理了控制台陷阱与 Host 半插件必须进程级重启的差异。

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

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

Xiaoye