DeepSeek Harness 插件:左上角添加「刷新」「重啓」按鈕

前言

在 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),執行以下步驟:

  1. 在 <DSH_HOME>/profiles/<profile>/node_modules/ 下建立軟鏈,指向倉庫目錄:
   ln -s /path/to/dsh-refresh-restart <DSH_HOME>/profiles/<profile>/node_modules/dsh-refresh-restart
  1. 在 <DSH_HOME>/profiles/<profile>/package.json 的 dependencies 里加入:
   "dsh-refresh-restart": "link:/path/to/dsh-refresh-restart"
  1. 在同一個文件的 dsh.profile.bundles 數組中加入:
   "dsh-refresh-restart"
  1. 重啓 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 中刷新頁面與重啓應用不便的問題。它實現了跨平臺的桌面重啓邏輯,並內置二次確認與取消保護,避免誤操作。如果你經常調試界面或頻繁重啓應用,這個插件可以提升日常使用的效率。

插件目錄頁
GitHub 倉庫

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

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

小夜