dsh-desktop-upgrade:为 DSH Desktop 补上「升级 DSH」入口

前言

DSH Desktop 走官方安装包更新内核,但 Web 设置页里虽然定义了 api.checkForUpdates() 和「检查更新」文案,对应组件从未渲染出来。日常能点的入口主要在系统托盘「检查更新…」,后台还会每 6 小时自动查一次并发系统通知。桌面版内核在 <安装目录>\resources\app\node_modules\@deepseek-ai\dsh,profile 下的 ~/.dsh/profiles/node_modules/@deepseek-ai/* 是指向它的 Junction,因此靠 npm/pnpm 改 profile 里的包无法升级本体,只能走官方安装包通道。

dsh-desktop-upgrade 由 Liu-fu-gui 维护,是 DSH 生态里的客户端类插件:不改任何内核文件,把官方 desktopRuntime.updates 那条链路补到设置页、托盘和模型工具里,方便开发者和使用者主动查版本、下载安装包。

这是什么

一句话:给 DSH Desktop 增加 Web 设置分区「DSH 升级」、托盘项「升级 DSH…」,以及 Cordis 工具 dsh_upgrade,全部对接官方版本服务与安装包下载,不替换 resources\app 里的内核。

核心功能

Web 设置页「DSH 升级」

浏览器半侧由 client.js 注册 settings.section 分区,展示当前版本、官方最新、更新通道;提供「检查更新」,在有新版且当前平台可下载时出现「下载并安装」。点击下载仍会弹出桌面版原生确认框,确认后与官方托盘项同一条安装包通道。

托盘「升级 DSH…」

Host 半侧 index.js 注册托盘菜单项:查询官方版本服务,有新版时弹原生确认(下载 / 稍后),通过 desktopRuntime.updates 下载官方安装包并打开。

模型工具 dsh_upgrade

供对话里 agent 调用,不绕过用户确认:

动作 行为
status 只报告版本信息,不弹窗
check 只检查更新
upgrade 检查后调用 updates.confirmDownload(),确认后才下载安装包

桥接 API(浏览器 ↔ Host)

同源,仅接受 loopback / web runtime 的 trustedHosts,拒绝浏览器跨站标记:

GET  /dsh-desktop-upgrade/status   -> { ok, result: { status, currentVersion, latestVersion, channel, canDownload, manualUrl } }
POST /dsh-desktop-upgrade/upgrade  -> { ok, result: { ...同上, accepted } }

upgrade 不会静默安装;确认框由桌面版负责。

文件分工(便于排查)

文件 角色
index.js Cordis 插件:托盘、dsh_upgrade、桥接装配
bridge.js 版本检查、升级流程、桥接路由逻辑
client.js Web 设置 UI bundle
cordis.patch.yml 向 profile 插入 desktop-upgrade bundle 行

插件实际生效位置是 profile 的 node_modules/dsh-desktop-upgrade 与 package.json 里的 dependencies + dsh.profile.bundles,由 dsh plugin 自动对平,不建议手动拷贝。

安装与启用

在 DSH 终端(设置 → 打开 DSH 终端)或 PATH 中已有桌面版 dsh 的终端里执行。dsh plugin 会自动补上 --profile desktop,在 desktop profile 目录跑 pnpm 并登记 bundle。

安装前可按 README 建议备份 profile 的 package.json 与 pnpm-lock.yaml。

# 方式一:从 GitHub 安装(推荐)
dsh plugin add github:Liu-fu-gui/dsh-desktop-upgrade

# 方式二:本地开发态(示例路径来自 README,请换成你的目录)
dsh plugin add link:D:\trea\tmp\dsh-desktop-upgrade

# 装完确认
dsh plugin list

资料说明 npm 尚未发布该包;装完后 必须重启 DSH Desktop(profile 组合与 client bundle 不热更新)。卸载:

dsh plugin remove dsh-desktop-upgrade

然后同样重启桌面版。

典型用法

  1. 设置 → DSH 升级:进入分区会自动查一次官方版本;有新版时点「下载并安装」,在原生确认框同意后完成下载并打开安装向导。
  2. 托盘图标右键 → 升级 DSH…:流程与上相同,入口在托盘。
  3. 对话中:例如让 agent「查一下 DSH 有没有新版本」(对应 status / check),或「升级 DSH」(upgrade,仍会在屏幕弹确认框,需手动同意)。

README 中本地开发可先做语法与测试校验:

node --check index.js; node --check bridge.js; node --check client.js
node --test test/bridge.test.mjs test/client.test.mjs

适用场景与注意

适合谁:长期使用 DSH Desktop、希望从设置页或对话里主动升级、又不想动安装目录内核的用户与智能体开发者。

运行边界(资料原文):

  • 仅 DSH Desktop 发行版可用;无 desktopRuntime 时托盘不注册,工具与桥接返回 unavailable。
  • 非打包模式(isPackaged === false)不注册托盘项;桥接仍在但返回 unavailable。
  • 不做应用内静默自更新,不替换 resources\app 内核;只驱动官方安装包通道。
  • 不修改、不依赖内核文件;仅使用公开 Cordis 服务(tools、desktopRuntime、webServer)与官方版本/下载端点。

安全习惯:插件以当前 DSH 进程权限运行。安装前可在 GitHub 阅读源码与 MIT 许可证,确认桥接仅面向受信 host。DeepSeek Harness 社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系;装插件前自行判断是否信任维护者与仓库。

README 记载的 SemVer 行为示例:beta 通道若官方最新低于当前稳定版,会判为 up-to-date,避免被引导降级。

结尾

dsh-desktop-upgrade 把 DSH Desktop 原本藏在托盘和定时任务里的官方升级链路,补到设置页和 dsh_upgrade 工具上,路径与「检查更新…」一致,且不碰内核 Junction。需要安装或源码时,见社区目录页与 GitHub 仓库:

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

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

Xiaoye