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。

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

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

小夜