前言¶
在 DeepSeek Harness(DSH)裏開發插件或調試界面時,經常需要刷新頁面或重啓應用。桌面版按 ⌘R 在焦點落在輸入框時有時不生效,且位置不固定;菜單裏的「重啓應用與 Host」入口較深。這個插件就在界面左上角「收起側邊欄」按鈕旁邊,加入「刷新界面」和「重啓應用」兩個按鈕,位置會跟隨側欄的展開/收起與窗口大小自動調整。
是什麼¶
dsh-refresh-restart 是一個給 DeepSeek Harness 桌面界面增加快捷操作的工具插件。它維護者爲 hulibuld,分類屬於客戶端插件。核心價值是在左上角固定位置提供「刷新」和「重啓」兩個按鈕,方便開發與日常使用。
核心功能¶
- 刷新界面:等價於在界面裏按
⌘R。只重新加載界面層,宿主後臺的生成任務繼續運行,正在生成的回答不會被中斷。插件代碼改動後刷新即可看到效果。 - 重啓應用:點擊後彈出二次確認,關閉窗口,幾秒後自動重新打開應用。會話與工作區保持不變,等同於菜單裏的「重啓應用與 Host」。
- 取消保護:如果重啓時應用中有任務在跑,DSH 會再彈一個「關閉應用會中斷當前正在進行的任務」的提示;點「取消」則本次重啓作廢,應用不受影響。
兼容性¶
- macOS 桌面版:刷新和重啓均可用。
- Windows 桌面版:刷新和重啓均可用(使用 PowerShell 助手處理退出與重開)。
- Linux 桌面版:刷新和重啓均可用(使用
SIGTERM退出,重開 AppImage 或可執行文件)。 - 瀏覽器(
dsh web):僅支持刷新界面,重啓需要手動操作。
安裝與啓用¶
方式零:一行命令(推薦)
# 走 npm,獲取最新版本
dsh plugin add dsh-refresh-restart
或者直接安裝 GitHub Release 預打包的 tgz:
dsh plugin add https://github.com/hulibuld/dsh-refresh-restart/releases/download/v0.2.1/dsh-refresh-restart-0.2.1.tgz
裝完後重啓 DSH,左上角即會出現兩個按鈕。
方式一:插件市場 / 插件管理器
如果 DSH 已安裝插件市場,在插件管理器中搜索 dsh-refresh-restart 並安裝即可。
方式二:手動安裝到 profile
git clone https://github.com/hulibuld/dsh-refresh-restart.git
cd dsh-refresh-restart
假設 DSH 的 profile 目錄爲 <profile>(例如 desktop),執行以下步驟:
- 在
<DSH_HOME>/profiles/<profile>/node_modules/下建立軟鏈,指向倉庫目錄:
ln -s /path/to/dsh-refresh-restart <DSH_HOME>/profiles/<profile>/node_modules/dsh-refresh-restart
- 在
<DSH_HOME>/profiles/<profile>/package.json的dependencies里加入:
"dsh-refresh-restart": "link:/path/to/dsh-refresh-restart"
- 在同一個文件的
dsh.profile.bundles數組中加入:
"dsh-refresh-restart"
- 重啓 DSH。按鈕出現在左上角;若未出現,刷新一下頁面即可。
卸載時刪除上述 1–3 步加入的內容並重啓 DSH。
配置¶
在 cordis.patch.yml 中可調整以下參數(也可寫在 profile 的插件配置裏):
| 配置項 | 默認值 | 說明 |
|---|---|---|
quitTimeoutMs |
20000 |
等應用自行退出的上限。超時按「用戶取消」處理,不會強制終止 |
openDelayMs |
800 |
確認進程消失後,隔多久重新打開應用 |
appPath |
空 | 留空則自動推斷應用路徑:macOS 查找 .app,Windows 使用 exe,Linux 優先 APPIMAGE。更換安裝位置或使用綠色版時可填寫絕對路徑 |
forceKill |
false |
超時後是否強制終止應用。默認關閉;只有應用確實卡死且能接受丟失未保存草稿時纔開啓 |
實現方式¶
插件採用純本地實現,無運行時依賴,無需構建步驟:
index.js:宿主端,導出配置與 apply 函數,註冊status和restart兩個路由。client.js:瀏覽器端,手寫__ModuleLoader__模塊,註冊shell.overlay插槽組件。lib/platform.js:平臺識別,判斷是否支持重啓,生成退出與重開計劃及助手腳本源碼。lib/restart.js:重啓服務,持有 token,將助手寫入臨時目錄並 detached 拉起。lib/routes.js:路由封裝,校驗方法、僅 loopback、action token 與 JSON 響應。cordis.patch.yml:bundle 補丁,將插件注入宿主。test/:使用node --test的迴歸測試。
重啓之所以複雜,是因爲桌面版是 Electron 應用,宿主只是它的子進程。若只殺宿主,窗口會保留但界面不再響應。因此插件會生成一個脫離宿主的助手,先請應用自行退出,確認進程消失後再重新打開。不同平臺的退出與重開命令不同,均已實現。
安全與隱私¶
- 所有路由僅監聽
127.0.0.1,並校驗Host頭,防止 DNS rebinding 攻擊。 - 重啓請求爲 POST,必須攜帶
status響應中的隨機 token(x-dsh-refresh-restart-key頭),跨站Origin會被拒絕。 - 助手腳本寫入臨時目錄,權限爲
0700,僅執行退出、等待、必要時強殺與重開。 - 不聯網、不收集任何數據、不讀取會話內容;只使用
process.execPath、process.platform等運行時信息。
排障¶
- 按鈕未出現:插件清單隻在啓動時讀取,請確認 profile 的
package.json中dsh.profile.bundles包含dsh-refresh-restart,然後重啓應用。 - 窗口關閉後未重新打開:查看臨時目錄中的日誌文件(Windows 爲
%TEMP%\dsh-refresh-restart-<時間>.log,macOS/Linux 爲$TMPDIR/dsh-refresh-restart-<時間>.log)。成功時會寫relaunched ok, new pid=…,失敗時會寫relaunch failed: no new process appeared。如果日誌停在helper start,可能是安全軟件攔截,請將 DSH 加入白名單再試。 - 提示「關閉應用會中斷當前正在進行的任務」:點「取消」即可,本次重啓作廢;如想重啓請先等待任務結束。
- 提示「已取消重啓」:說明應用未成功退出,一切照常。如果反覆出現且確實需要強殺,可將
forceKill設爲true。 - 提示「沒找到應用位置」:自動推斷失敗,請在配置中填寫
appPath(macOS 填.app,Windows 填 exe,Linux 填 AppImage)。
生態背景¶
DeepSeek Harness 的理念是「一切皆插件」,社區插件目錄由獨立站點維護,與 DeepSeek / 幻方無官方從屬關係。本插件爲社區維護的非官方工具,僅供本地使用。
總結¶
這個插件通過在界面左上角提供「刷新」和「重啓」兩個按鈕,解決了在 DSH 中刷新頁面與重啓應用不便的問題。它實現了跨平臺的桌面重啓邏輯,並內置二次確認與取消保護,避免誤操作。如果你經常調試界面或頻繁重啓應用,這個插件可以提升日常使用的效率。