前言¶
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 里的内核。
- 仓库:https://github.com/Liu-fu-gui/dsh-desktop-upgrade(带
dsh-plugintopic,可被插件市场扫描) - 社区目录:https://www.skillhub.cn/plugins/Liu-fu-gui/dsh-desktop-upgrade
- 当前包版本(资料中的
package.json):0.2.0,许可证 MIT
核心功能¶
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
然后同样重启桌面版。
典型用法¶
- 设置 → DSH 升级:进入分区会自动查一次官方版本;有新版时点「下载并安装」,在原生确认框同意后完成下载并打开安装向导。
- 托盘图标右键 → 升级 DSH…:流程与上相同,入口在托盘。
- 对话中:例如让 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 仓库: