前言¶
在 DeepSeek Harness(DSH)裏裝插件、改配置之後,要讓界面和宿主加載新內容,往往需要退出整個桌面應用再手動打開。瀏覽器裏刷新頁面即可,但 DSH 桌面殼走的是 dsh-app: 協議,沒有「只刷新不重開進程」的等價操作;主進程、渲染進程和 DSH 宿主是一棵樹,半吊子的退出容易留下鎖或重複實例。下面介紹社區插件 dsh-restart-foot:在側欄底部、頭像/設置入口正上方加一枚重啓按鈕,兩次確認後結束整棵進程樹並重新拉起,且重啓輔助腳本不彈出控制台窗口。
這是什麼¶
dsh-restart-foot 由 GitHub 用戶 1207291706 維護,分類爲客戶端插件,MIT 許可,當前版本 1.0.0(見倉庫 package.json)。它只做一件事:在 DSH 桌面應用側欄 foot 區域註冊一行操作,點擊後按既定流程停止應用可執行文件對應的全部進程,再啓動同一路徑的可執行文件。裝完插件或改完設置後,不必到任務欄或系統托盤裏手動退出。
社區目錄頁:https://www.skillhub.cn/plugins/1207291706/dsh-restart-foot
源碼與說明:https://github.com/1207291706/dsh-restart-foot
DSH 生態強調「一切皆插件」;SkillHub 等目錄是社區站點,與 DeepSeek / 幻方無官方從屬關係。
按鈕位置與 UI 約束¶
該行註冊在 sidebar.footer.action 插槽。側欄 foot 是自下而上的棧(.footArea → .footerActions → .settingsArea),因此按鈕出現在賬號/設置區塊的正上方,而不是點頭像彈出的菜單裏——官方 @deepseek-ai/dsh-client-ui-settings-account 的 AccountMenu 無擴展插槽,放在 foot 行是唯一不覆蓋內置 UI 的加法。
控件使用殼層自帶的 Button、Tooltip 與刷新圖標,顏色與焦點環跟隨設計系統;交互時有懸停半圈、按下、armed 時輕晃、重啓中旋轉等動效,prefers-reduced-motion 下全部關閉。
核心行爲¶
- 第一次點擊:進入確認態,按鈕變爲錯誤色並顯示「再點一次確認」,約 5 秒無操作則恢復 idle。
- 第二次點擊:向宿主發送
POST /dsh-restart-foot/restart,請求頭須帶x-dsh-restart-foot: 1,避免誤觸、預取或其它標籤頁誤停應用。 - 無控制台窗口:宿主寫入批處理,經
wscript.exe以 GUI 子系統、隱藏窗口方式 detached 啓動輔助進程。桌面應用通過 job object 管理子進程,若輔助進程不 detach,會隨主應用一起被殺死而無法完成重啓。 - 批處理順序:等待約 1 秒以便 HTTP 響應返回 → 按應用鏡像名結束進程 → 輪詢確認進程已退出(最長約 20 秒)→ 對殘留 pid 強制結束 → 再啓動可執行文件。重啓前會清除繼承的
ELECTRON_RUN_AS_NODE,否則二次啓動可能變成無腳本的 Node 進程並立刻退出(表現爲「關了就再沒起來」)。 - 啓動後校驗:最多約 20 秒等待應用進程再次出現,並寫入日誌;失敗時按鈕 tooltip 與
/dsh-restart-foot/ping的lastLaunchError會保留原因。
運行中的 Agent 回合會被中斷,與會話相關的日誌在磁盤上,重開會話可繼續。日誌文件:%TEMP%\dsh-restart-foot.log(逐步記錄 request、stop、wait、force-stop、start、back 等)。
環境要求¶
- DeepSeek Harness 桌面應用,且運行在 Windows 上。
- 客戶端僅在頁面 origin 爲
dsh-app:時註冊;在普通瀏覽器訪問http://127.0.0.1:<port>時沒有可重啓的桌面殼,該行不會出現。 - 宿主側若
process.execPath不是桌面可執行文件(例如在終端裏dsh web時的node.exe),重啓相關路由會返回501。 - Node 20+;無構建步驟,無運行時 npm 依賴。
安裝與卸載¶
當前推薦從 GitHub 安裝(npm 包已打好但作者網絡無法註冊 npm 賬號,正式上架前不可用 dsh plugin add dsh-restart-foot):
dsh plugin add github:1207291706/dsh-restart-foot
同一來源的 git 寫法:
dsh plugin add git+https://github.com/1207291706/dsh-restart-foot.git
指定 profile 時:
dsh plugin add --profile desktop github:1207291706/dsh-restart-foot
安裝後刷新頁面(或仍用舊方式重啓一次)以加載客戶端模塊。
卸載:
dsh plugin remove dsh-restart-foot
典型用法¶
日常流程:安裝或更新其它 DSH 插件、修改需重啓宿主才生效的配置 → 在側欄底部找到「Restart DeepSeek Harness」(中文 locale 下爲對應文案)→ 連續點擊兩次確認 → 等待應用自動關閉並重新出現。
若點擊後 seemingly 無反應,可按 README 建議順序排查:按鈕 tooltip 上的失敗文案 → GET /dsh-restart-foot/ping(含 lastLaunchError)→ POST /dsh-restart-foot/selfcheck(需同樣請求頭,僅做啓動能力探測)→ %TEMP%\dsh-restart-foot.log。
探測類路由(不殺真實進程):
| 方法 | 路徑 | 用途 |
|---|---|---|
GET |
/dsh-restart-foot/ping |
存活探測:平臺、是否找到桌面目標、可執行路徑、PowerShell 路徑、lastLaunchError |
POST |
/dsh-restart-foot/restart?probe=1 |
報告目標,不操作進程 |
POST |
/dsh-restart-foot/selfcheck |
診斷 cmd/PowerShell 探針,不寫真實進程 |
路由由 DSH Web 服務提供,凡能訪問該端口的客戶端均可調用;默認綁定 loopback 時可限制僅本機訪問。
適用場景與注意¶
適合:經常在 Windows 桌面 DSH 裏迭代插件與配置、希望少一步手動退出再打開的開發者。
務必注意:
- 插件以當前 DSH 進程權限運行;安裝前應閱讀
index.js、client.js等源碼並確認 MIT 許可證與行爲是否符合預期。 - 僅 Windows 桌面殼;Linux/macOS 或純
dsh web場景不適用。 - 重啓會中斷進行中的 Agent 任務,屬預期行爲。
實現思路上, detached 輔助進程、按鏡像名停止、確認退出後再啓動等做法,參考了 MIT 許可的 dsh-restart-button(CZY1326);本倉庫爲獨立實現,插槽、路由前綴、輔助腳本與日誌路徑均不同。
結尾¶
dsh-restart-foot 把「整應用重啓」收進側欄底部兩行點擊裏,針對 Windows 桌面 DSH 的進程模型做了 detach、ELECTRON_RUN_AS_NODE 清理與退出輪詢,避免無控制台輔助腳本被 job object 拖死或二次啓動失敗。需要安裝命令與路由細節時,以 GitHub README 爲準。
- 目錄頁:https://www.skillhub.cn/plugins/1207291706/dsh-restart-foot
- 倉庫:https://github.com/1207291706/dsh-restart-foot