前言¶
在 DeepSeek Harness(DSH)里,宿主进程负责版本、插件列表和安装动作,而用户看到的往往是 WebView 里的页面 UI。若每次改「检查更新、装插件、重启」都要重做原生窗口,成本高且难维护。desanv01 维护的 dsh-plugin-desktop-updates 把这套能力做成客户端插件:侧栏入口、全屏 Updates 面板、Settings 里的 Updates 区块,都挂在已有 Harness Web UI 上,并通过桌面应用注入的 window.__dshDesktop 桥接读写状态与执行操作。
需要事先分清环境:README 写明,该插件针对捆绑 DeepSeek Harness 0.1.5-rc.x 运行时的 desanv01/deepseek-harness-desktop-app(该桌面应用已归档);官方 DeepSeek Harness 桌面端自带插件管理与更新视图,不暴露 __dshDesktop。在官方应用里插件仍会注册 UI 位,但会如实提示桥接不可用,而不是假装面板可用。
这是什么¶
- 名称:
dsh-plugin-desktop-updates(npm 包名相同) - 维护者:desanv01
- 分类:客户端(Web UI)
- 许可证:MIT;当前发布版本 1.3.0(以 npm / package.json 为准)
- 定位:为上述 Windows 桌面 Harness 应用渲染 Updates 与插件管理界面,数据与动作由应用原生桥驱动,插件本身不读取 Config。
社区目录页:SkillHub 插件条目。源码与说明:GitHub 仓库。
核心功能¶
下面能力均来自仓库 README 的「What it does」与槽位说明。
- 侧栏 Settings 旁一行入口(56px 轨道图标 + 标签):打开 Updates 面板;若有更新的应用构建,显示提示点。
- 主面板(
main):展示桌面应用版本、已安装与已发布的 Harness 版本、当前 home 运行的插件列表;提供检查、下载、安装、重启、修复 Harness,以及对插件的启用、禁用、安装、移除。 - Settings 区块:与面板相同的信息与操作,以更紧凑的形式呈现。
- 注册可见性:Shell 可能静默拒绝槽位注册。插件把已注册槽位与每一次拒绝写入
window.__dshDesktopUpdates,并记入应用日志;Updates 区块会重复展示拒绝信息,避免「插件没加载」与「槽位被拒」看起来一样。 - 无桥接时的降级:没有
window.__dshDesktop时,明确提示应用不可用,不伪造可操作界面。
打开面板依赖 Harness 的 ctx.layout.selectPanel,属于布局动作,不经过桥接;因此即使桥暂时不可用,仍可通过布局选中面板(若 Shell 无对应 panel 槽,应用会回退到原生更新窗口,与托盘菜单行为一致)。
插件占用的槽位¶
| 槽位 | 标识 | 渲染内容 |
|---|---|---|
sidebar.footer.action |
id desktop-updates |
Settings 旁的 Updates 入口 |
sidebar.panellist |
id desktop-updates |
与主面板同 id 的侧栏行 |
main |
key desktop-updates |
Updates 全屏面板 |
settings.section |
id desktop-updates |
Settings 内 Updates 小节 |
列表类槽位需要 id,main 需要 key;缺一则 Shell 会拒绝注册。
依赖与要求¶
- DeepSeek Harness 0.1.x 组合,且具备
layout服务(上述桌面应用捆绑的运行时)。 - 宿主需提供
@deepseek-ai/dsh-client-ui-layout(在dsh.client.inject中声明)。 - 要使检查更新、装插件等操作可执行:目标桌面应用必须注入
window.__dshDesktop。
安装与启用¶
插件以 DSH 进程权限运行;安装前请阅读源码与 MIT 许可证,并确认你使用的是提供 __dshDesktop 的那款桌面应用,而非仅期望在官方桌面端「完整可用」。
从 npm 安装到 Web profile¶
在 PowerShell 中执行(命令来自 README):
dsh plugin --profile web add dsh-plugin-desktop-updates
安装进桌面应用自带的 Harness home¶
桌面应用会自行安装其捆绑副本。在应用内可通过 Settings → Updates → 插件管理器 指定包名、git spec 或本地目录;从 npm 安装会替换捆绑副本。若已安装的插件版本高于可执行文件内捆绑版本,应用不会在下一次启动时强行降回捆绑版;需要恢复捆绑副本时,可使用 DeepSeekHarness.exe --install-plugin(README 说明)。
从源码目录加入 profile(需已有本地克隆)¶
README 给出的本地添加方式(非 git clone 步骤本身):
cd dsh-plugin-desktop-updates
dsh plugin --profile web add .
客户端为手写 module-face 的 client.js,无需单独构建步骤。
典型用法与排错¶
无配置项:插件不读 Config,界面内容完全来自桥接报告的状态。
冒烟测试:客户端可在假 Shell 下无头渲染;桌面应用 CI 使用其仓库中的 tools/client-plugin-smoke.mjs 加载真实 client.js 并校验槽位规则。截图见 deepseek-harness-desktop-app#screenshots。
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 侧栏完全没有 Updates 行 | profile 缺少 bundle 行或未提供 client | 确认 cordis.patch.yml 已安装;在页面查看 window.__dshDesktopUpdates |
| 有行,面板提示应用不可用 | 无 __dshDesktop |
使用提供桥接的 desanv01 桌面应用 |
| 有行,面板空白 | 桥存在但未返回状态 | 查应用日志中每次加载后的 marker |
| 面板正常但 Settings 无 Updates 小节 | settings.section 注册被拒 |
看 marker 与 Updates 区块中的拒绝说明 |
代码结构(便于对照仓库)¶
| 部分 | 路径 |
|---|---|
| 宿主侧 | index.js(空 apply,用于留在 bundle 栈) |
| 浏览器侧 | client.js(module-face bundle) |
| Loader 行 | cordis.patch.yml |
| 注册标记 | window.__dshDesktopUpdates |
适用场景与注意¶
- 适合:在 desanv01/deepseek-harness-desktop-app 及其捆绑的 Harness 0.1.x 环境中,希望用统一 Web UI 管理应用更新、Harness 版本与 home 插件,并需要看见槽位注册是否被 Shell 拒绝的开发者或维护者。
- 不适合当作通用官方桌面插件:官方 DeepSeek Harness 桌面端已有自己的更新与插件管理,且不暴露本插件依赖的桥;在此安装只会得到诚实的「桥不可用」提示。
- 生态说明:DSH 奉行「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-plugin-desktop-updates 把 Windows 桌面 Harness 的更新与插件运维收敛到侧栏、主面板与 Settings 一处,用 __dshDesktop 对齐应用侧事实与动作,并在无桥或槽位被拒时保持可观测。进一步细节与故障表见 GitHub README;插件目录见 SkillHub。