dsh-re:为 DeepSeek Harness 桌面端补上标题栏刷新

前言

在 DeepSeek Harness(DSH)里做插件或改界面时,经常需要看改完后的 UI 是否生效。浏览器形态可以靠地址栏或开发者工具刷新;桌面端没有地址栏,菜单里也没有「刷新」项,只能整应用重启,对话和工作区虽在宿主进程里,但来回重启仍然打断开发节奏。下面介绍社区插件 dsh-re(维护者 lux09947-cmyk,分类:客户端):在桌面端标题栏「编辑」右侧增加「↻ 刷新」,只重载当前页面,不重启应用、不断会话。

这是什么

dsh-re 是纯宿主侧插件,不依赖 dsh.client,浏览器半边不参与。它在 DeepSeek Harness 桌面端顶部标题栏、「应用」「编辑」同一套样式区域里增加第三个按钮「↻ 刷新」;点击后等价于重新加载当前页面,对话、工作区、正在跑的会话仍在宿主进程中,不受影响。拿不到标题栏菜单时(例如在浏览器里跑 dsh web,或外壳菜单栏尚未出现),会退回右上角的浮动药丸,提供「↻ 刷新」「⇕ 换角落」「✕ 隐藏」(隐藏状态写入 localStorage)。

核心功能

  • 标题栏刷新:优先挂进外壳菜单栏 [data-windows-menu] 的 shadow root 内 [role="menubar"],成为「编辑」后面的按钮,样式与「应用 / 编辑」一致。
  • 降级 UI:菜单栏约 10 秒内仍不可用时,使用角落药丸;2 秒一次的看门狗会自愈重挂,且不会重复挂载第二颗按钮。
  • 自检接口:挂载成功后会向 POST /api/dsh-re/ui-ping 回传(带 where=titlebar|corner、userAgent);GET /api/dsh-re/status 可免认证读取,用于判断按钮是否已进入桌面窗口。
  • 静态资源热更新:宿主暴露 GET /api/dsh-re/ui.js,每次现读盘并带 no-store,因此日常只改 lib/ui.js 时点刷新即可生效;换插件或改注入逻辑则须整应用重启一次(注入表在宿主启动时缓存,点刷新拿不到新表)。

安装与启用

DSH 社区插件目录独立于 DeepSeek / 幻方,安装前建议自行查看 GitHub 仓库 源码与 MIT 许可证;插件以当前 dsh 进程权限运行。

  1. 在已安装 DeepSeek Harness 桌面 profile 的环境中执行下列命令之一:
# 从 npm(发布后)
dsh plugin --profile desktop add dsh-re

# 或直接从 GitHub
dsh plugin --profile desktop add github:LUX09947-CMYK/dsh-re
  1. 装完后重启一次应用(不是点刷新按钮):首次注册 webserver/index-inject 注入行必须靠这次重启写入宿主缓存。
  2. 之后若只修改插件内的 lib/ui.js,点标题栏或药丸上的「↻ 刷新」即可看到界面变化。

引擎要求:dsh.engines.dsh: >=0.2.0-rc.1。README 记载实测环境为 DeepSeek Harness 桌面端 0.2.0-rc.2(Electron 44)。

典型用法

  • 日常开发 UI:改 lib/ui.js → 在桌面窗口点「↻ 刷新」→ 确认 menubar 或药丸上的行为是否符合预期。
  • 确认是否挂进标题栏:请求 GET /api/dsh-re/status,不必人工猜窗口状态。
  • 若曾点药丸「✕」隐藏:清除 localStorage 键 dsh-re-ui:hidden 后刷新,按钮会再次出现。

卸载:

dsh plugin --profile desktop remove dsh-re

适用场景与注意

适合谁:主要在 desktop profile 下开发 DSH 插件或调试注入 UI 的开发者;需要频繁看界面迭代、又不想整应用重启的场景。

平台差异:仅 Windows 桌面外壳具备那条标题栏菜单栏;其它平台或浏览器形态自动走角落药丸,刷新功能本身不受影响。

安全与信任:与其它 DSH 插件一样,宿主代码会在应用启动路径中注册路由与 index 注入,安装前应阅读 lib/index.js、lib/ui.js 及 cordis.patch.yml,确认行为符合预期。

工作原理摘要(便于排查):宿主 lib/index.js 在 apply() 开头向 webserver/index-inject 推内联 script,由页面加载 /api/dsh-re/ui.js;桌面端 tapIndex() 不生效,且不能用会拖垮 __DSH_BOOT_READY__ 的 script-src 异步加载方式,因此采用内联 script 行且在 apply() 里不能依赖会推迟执行的 object 级 inject。

结尾

dsh-re 解决的是桌面端「没有刷新入口」这一具体缺口:一颗与原生菜单同风格的按钮,或等价的角落药丸,让 UI 迭代回到「改文件 → 刷新页面」的节奏。社区目录页:lux09947-cmyk/dsh-re;源码与详细说明:GitHub — LUX09947-CMYK/dsh-re。

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

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

小夜