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
羽毛球分组比赛记分
小程序二维码

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

小夜