dsh-gui-control:DSH Web 界面强刷与 Harness 重启

前言

在 DeepSeek Harness(DSH)里做客户端插件或改 Host 侧代码时,常见问题是:改了 lib/client.js 但界面仍是旧行为,或装了新插件、升了级却需要重启 Host 才加载新一代代码。单靠浏览器刷新或 Ctrl+F5,往往清不干净 CacheStorage、残留的 Service Worker,以及进程内对已加载客户端 bundle 的记忆;而重启 Harness 又牵涉桌面壳进程,不能指望页面里随便调一个 API 就完成。

dsh-gui-control(维护者 ccccwwwxx)是分类为「客户端」的 DSH 插件:在 Web GUI 上提供 强刷界面 与 重启 Harness 两个动作,三处入口共用同一套 hardReload() / restartHarness() 实现。插件当前版本为 0.2.0(MIT),社区目录见 SkillHub 插件页,源码与说明见 GitHub 仓库。DSH 生态强调「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。

这是什么

一句话:给 DSH 的 Web GUI 加强刷与重启 Harness 的一键控制,并在设置页展示 Host 运行状态(插件版本、Host pid、已运行时长、平台、Profile)。

两个动作分别解决不同层的问题:

强刷界面 重启 Harness
做什么 清空 CacheStorage、注销 Service Worker,然后整页重载,重新拉取并执行每个客户端插件 bundle 通过 DSH Desktop 的 preload 桥(window.dshDesktop.restartHarness → 主进程 IPC harness:restart)重启 Host 进程,然后重新加载页面
什么时候用 改了客户端插件(lib/client.js)没生效;界面卡在旧的插件列表;样式错乱 改了 Host 侧(node 半侧)代码;安装/升级了插件;需要重新加载 Profile
影响 只重载这一页,Host 进程不动 Host 重启,正在运行的任务会被中断
可用范围 任意载体(桌面端 / 浏览器) 仅 DSH Desktop 桌面窗口(浏览器里按钮禁用并说明原因)

Host 侧没有、也不该有「重启自己」的口子——那是桌面壳的监督职责;本插件在浏览器版会禁用重启并说明原因。

三处入口

下面三处 UI 调用的是同一对函数,不存在第二套实现。

  1. 会话头右上角:两个 24px 图标按钮,排在官方三个按钮(在应用中打开 / 会话日志「更多」/ 右栏展开)左侧,中间多留 8px 空隙。图标无文字,语义在 aria-label / title;重启「武装」时图标转红并在下方浮出提示气泡(绝对定位,不推动这一排)。
  2. 侧边栏底部:两个一键入口(展开态为「图标 + 文字」整行,收起态为 32px 图标按钮)。
  3. 设置 → 界面控制:运行状态面板、两个动作及说明。

槽位注册(供理解扩展方式):conversation.session.header.utilities(gui-control-header-refresh / gui-control-header-restart)、sidebar.footer.action(gui-control-refresh / gui-control-restart)、settings.section(gui-control)。会话头 order 用负数是为了排在官方按钮左侧。

强刷与浏览器「硬刷新」的差异

页面脚本无法改变文档自身的 cache 模式,因此拿不到浏览器层面的硬刷新标志。本插件会覆盖三处常见陈旧来源:

  1. CacheStorage 里的缓存条目(逐个删除);
  2. 残留的 Service Worker(逐个 unregister());
  3. 客户端模块 factory 的进程内记忆(整页重载即清空)。

插件 bundle 的 URL 自带 rev=,Host 侧按 revision 缓存字节,重载后通常能拿到最新产物;清缓存是额外保险。

重启的两步确认

重启是破坏性动作:会中断正在运行的任务与工具调用。因此不用原生 confirm()(会阻塞渲染进程),而是 两步确认:第一次点击只「武装」(设置页/侧边栏按钮变为「确认重启?」并转红;会话头图标转红并浮出提示),4 秒内再点一次才执行,超时自动取消。

安装与启用

三种安装方式效果相同,都会写入 profiles/<profile>/package.json 的 dsh.profile.bundles。仓库已提交 lib/client.js,从 GitHub 安装时无需构建。

1. 从 GitHub 仓库装(推荐)

dsh plugin --profile web add github:ccccwwwxx/dsh-gui-control

2. 从 Release 预构建包(免构建、免 allowBuilds 授权)

dsh plugin --profile web add https://github.com/ccccwwwxx/dsh-gui-control/releases/latest/download/dsh-gui-control.tgz

3. GUI / 本地目录(开发时)

在 设置 → 插件 → 添加插件 中填写本地目录绝对路径;安装流程为 pluginManager.installBundle,经 staging 校验后写入 profile manifest。

卸载:

dsh plugin --profile web remove dsh-gui-control

安装之后

  • 首次安装:客户端半侧随 HMR 一般直接生效,会话头与侧边栏会出现两个入口;若没有,点一次「强刷」。
  • 升级安装:插件管理器可能报告 application: "restart-required",新一代 Host 代码需重启才加载,可用本插件的「重启」或菜单里的 Restart Harness,随后页面会重新加载。

安装前建议阅读仓库源码与 MIT 许可证;插件以当前 dsh 进程权限运行,与任何 DSH 插件一样,应自行评估是否适合你的环境。

典型用法

  1. 改了客户端插件代码、界面没更新:在侧边栏底部或会话头点「强刷界面」,或打开 设置 → 界面控制 执行同一动作。
  2. 改了 Host 侧代码、刚升级插件、需要重载 Profile:在 DSH Desktop 窗口使用「重启 Harness」,按两步确认完成;不要在浏览器载体里指望重启按钮可用。
  3. 想确认当前 Host 状态:在 设置 → 界面控制 查看插件版本、Host pid、已运行时长、平台与 Profile。注意:状态里的「Host 已运行时长」自模块加载时刻起算,不是操作系统进程创建时间,正常启动下两者接近。

适用场景与注意

适合经常在本地或 Desktop 里迭代 DSH 客户端/Host、又不想反复手动清缓存或找菜单重启的开发者。强刷只影响当前页;重启会打断进行中的任务,使用前确认没有关键会话依赖 Host 持续运行。

已知边界(来自仓库说明):强刷不等价于浏览器硬刷新标志;浏览器版无重启能力;重启代价来自 Host 重启本身,而非插件额外设计。

结尾

dsh-gui-control 把「清缓存 + 整页重载」与「桌面壳监督下的 Harness 重启」收进 GUI 三处入口,并统一两步确认,减少改插件后的试错成本。目录与安装说明:SkillHub;源码与详细契约:github.com/ccccwwwxx/dsh-gui-control。

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

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

Xiaoye