dsh-reload-buttons:DSH 界面左上角的刷新与重启

前言

在 DSH 里改客户端插件或配置后,常见做法是关掉整个应用再开。桌面端整页刷新也不总是安全:内核启动时拍下的客户端插件清单快照若已过期,bundle 地址 404,重载页面会出现白屏和恢复框。下面介绍社区插件 dsh-reload-buttons(维护者 taoziliyouchong,分类:客户端),在会话头部左上角增加两个图标按钮,分别处理「按需刷新界面」和「重启应用」,减少手工关应用的成本。

这是什么

dsh-reload-buttons 是一个 DSH 客户端侧插件:在界面左上角挂载 刷新界面、重启应用 两个按钮。刷新会在「整页重载」与「就地重同步插件清单」之间自动选择,尽量避免白屏;重启在桌面端通过关闭 Electron 界面壳、再由独立脚本拉起 exe 完成;在 dsh web 下重启则结束内核进程,重开由你的启动方式负责。插件不联网、不上传任何内容。

两个按钮分别做什么

按钮 桌面端 dsh web
刷新 清单没过期 → 整页重载;清单过期 → 就地按宿主当前图对齐客户端插件,不重载、不关应用 同左
重启 关掉界面壳(Electron 主进程)→ 内核随 IPC 断开优雅收尾 → 独立脚本把 exe 拉起来,起不来再试一次 结束内核进程,重开交给你的启动方式

刷新为什么分两路

桌面端重载页面用的是内核启动那一刻拍的客户端插件清单快照(主进程只认那一份)。改过客户端插件后,快照里的 bundle 地址可能已经 404,整页重载就是白屏加恢复框。

按钮的做法:先探一遍快照里的 bundle 是否都还取得到。全都取得到就真重载;取不到就改为就地重同步——从宿主 /plugins/events 首帧取当前图,用 entries.sync 对齐客户端插件条目,成功时不提示、不关应用(重同步本身失败才会提示改用「重启」)。彻底重来仍走「重启」。

重启为什么先关界面壳

桌面端把内核退出一律当致命故障:内核自己 exit,主进程会弹「应用无法使用」。反过来,Electron 主进程一消失,内核的 IPC 断开会触发它自己的优雅收尾,此时也没有进程能弹框;随后独立脚本把 exe 重新拉起。

安装与启用

桌面 profile 下从 GitHub 安装:

dsh plugin --profile desktop add github:taoziliyouchong/dsh-reload-buttons

发布到 npm 之后也可以:

dsh plugin --profile desktop add dsh-reload-buttons

装完需要重启 DSH。若使用其他 profile,把命令里的 desktop 换成你的 profile 名。

环境要求(来自 README):需要 DSH 桌面端(重启按钮要关壳重开)。dsh web 下刷新可用,重启等于结束内核进程。Node 版本跟随 DSH,不需要额外运行时。兼容:DSH 0.2.1-rc.5 实测通过;0.3 起不保证。package.json 中 engines.dsh 为 >=0.2.1-rc.5 <0.3.0-0。

界面位置与冲突

按钮挂在会话头部最左的 conversation.header.leading——一个 single 槽,当前由本插件占用。同优先级二次注册会抛错,不能和同样占这个座位的插件一起装。要换位置见仓库 src/entry.jsx 顶部注释(conversation.session.header.utilities 是 list 槽)。

典型用法

  1. 改完客户端插件或相关配置后,先点 刷新界面:若快照 bundle 仍有效则整页重载;若已过期则就地重同步,一般无需关应用。
  2. 需要完整重启进程时,点 重启应用。桌面端界面会关掉,几秒后自动回来;若同时弹出带「重启」按钮的恢复框,点它也可以。
  3. 在远程访问的 DSH 上点重启会被拒绝(见下文机制),仅适合本机回环访问场景。

机制与日志

  • 宿主半边注册 POST /dsh-reload-buttons/api/restart:只接受回环地址(127.*、::1、::ffff:127.*),只接受 POST。远程访问的 DSH 上点重启会被 403 拒绝。
  • 桌面端把重启交棒给 assets/restart-app.mjs(detached spawn):等 1.2 秒让 HTTP 响应交回浏览器 → 关掉 Electron 主进程 → 等端口释放(12 秒不放就结束内核)→ 拉起 exe 并按新进程 pid 探活(8 秒不稳就再试一次)。
  • 桌面端每次启动端口都不同,探活只看进程 pid,不看端口。
  • 重启日志写在 $DSH_HOME/logs/dsh-reload-buttons-restart.log。
  • 刷新按钮是纯浏览器侧行为,不需要宿主。

适用场景与注意

适合:经常在 DSH 桌面端迭代客户端插件、希望少手工关应用;本机使用、需要从界面一键刷新或重启。

限制(README 已知限制):

  • 非桌面端没有界面壳可关,重启按钮只结束进程,重开取决于你的启动方式。
  • 只对单机有效:回环地址以外的请求不处理。

DSH 生态是「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。插件以当前 dsh 进程权限运行,安装前建议查看 GitHub 源码 与 MIT 许可证。

结尾

dsh-reload-buttons 把「改插件后的刷新」和「桌面端重启」收进左上角两个按钮:刷新区分快照是否过期,过期则就地重同步;桌面端重启先关壳再拉 exe,避免内核主动 exit 触发致命弹框。需要安装命令与细节时,以仓库 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/taoziliyouchong/dsh-reload-buttons
  • GitHub:https://github.com/taoziliyouchong/dsh-reload-buttons
羽毛球分组比赛记分
小程序二维码

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

Xiaoye