前言¶
在 DeepSeek Harness (DSH) 中,修改宿主半代碼(如 index.js 或 lib/*.js)通常需要整進程重啓才能生效。Agent 沒有重啓手段時,只能依賴用戶手動操作。這個插件將重啓能力下沉到 Agent 層面,並增加了安全控制,確保重啓行爲可控。
這是什麼¶
dsh-safety-restart 是 DeepSeek Harness 的一個安全、無縫重啓插件,由 Dayi-Z 維護,屬於 admin-security 類別。它允許 Agent 重啓宿主並恢復,但重啓前必須通過四道安全閘門(循環熔斷、其他會話、不可解析的 bundle、不可用的拉起手段),任何閘門失敗都會拒絕重啓並說明原因。
核心功能¶
- 重啓循環熔斷:基於
loopMax和loopWindowMs的計數器,防止 Agent 在配置錯誤時陷入無限重啓風暴。 - 會話狀態檢查:在重啓前檢查是否有其他會話處於活躍狀態(
turn/start之後未turn/end),避免打斷他人工作。 - Profile Bundle 驗證:檢查
node_modules和入口文件是否存在,拒絕checked:false的配置。 - 跨平臺拉起機制:
- 桌面端使用 Electron
app.relaunch()。 - Web/CLI 使用
process.exit()和分離的 helper。
- 桌面端使用 Electron
- 會話恢復機制:重啓前寫入續作標記,重啓後恢復會話上下文。
- 審計日誌:記錄所有重啓決策和狀態,文件名爲
safety-restart-audit.l。
安裝與啓用¶
在 profiles/<name>/package.json 中添加依賴和 bundle:
// profiles/<name>/package.json
{
"dependencies": { "dsh-safety-restart": "link:/path/to/dsh-safety-restart" },
"dsh": { "profile": { "bundles": [ "...", "dsh-safety-restart" ] } }
}
安裝後必須重啓一次 DSH 實例,以確保插件被加載。
典型用法¶
Agent 側調用:
safety_restart({ reason: "改了宿主半的 index.js,讓新路由生效" })
safety_restart({ reason: "...", force: true })
UI 操作:設置 → 插件 → 「dsh-safety-restart」卡片。
HTTP API(僅接受本機請求):
GET /safety-restart/status
POST /safety-restart/restart { "reason": "ui" }
適用場景與注意¶
- 權限與執行:插件以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證。
- 健康檢查機制:Web/CLI 端的健康檢查是 TCP 端口恢復,不是 HTTP 200。
- 會話檢查範圍:
busy狀態只覆蓋本進程啓動之後的會話,更早的會話不在此列。 - Bundle 檢查範圍:僅證明文件存在,不證明導入成功,更不證明客戶端契約正確。
- 網絡限制:HTTP API 只接受本機請求,反代或遠程訪問會被 403。
- 客戶端兼容性:客戶端代碼需要兼容 rc 契約(
list或keyed)。
總結¶
dsh-safety-restart 將 Agent 的重啓能力從手動操作轉變爲可調用的工具,同時通過四道閘門確保環境不會因重啓而損壞。它提供了審計日誌和會話恢復機制,適合需要頻繁調整宿主代碼的場景。