前言¶
DeepSeek Harness (DSH) 運行模型會話,智能體有時需要通過 SSH 或 shell 命令控制宿主機服務。如果命令處理不當,模型可能會發出停止 Harness 自身的指令,導致服務崩潰。由於是正常退出,Restart=on-failure 不會觸發重啓。
dsh-self-preserve 是一個插件,用於攔截此類操作,確保 Harness 自身不會被模型會話意外終止。
插件定位¶
這是一個 DeepSeek Harness hook 插件。它由 n8guru 維護,旨在防止模型會話停止其所在的 Harness 進程。
核心功能¶
-
攔截自毀命令
在 Linux 環境下,通過讀取/proc/self/cgroup獲取當前 Harness 的 systemd 單元名稱。任何匹配systemctl stop/kill/restart目標爲自身單元的命令都會被攔截並返回拒絕策略。 -
支持 macOS launchd
在 macOS 環境下,通過設置環境變量DSH_SELF_PRESERVE_TARGET,可以攔截對特定服務標籤的launchd停止、移除、卸載等命令。 -
保留只讀權限
插件僅攔截對自身服務的控制操作,允許對其他服務進行只讀查詢。 -
日誌記錄
保護激活時會記錄[dsh-self-preserve] armed for <target>。如果無法發現或配置目標,會記錄明確的不活動警告。
安裝¶
將插件作爲本地包安裝到 DSH profiles 目錄:
git clone https://github.com/n8guru/dsh-self-preserve ~/.dsh/local-mods/dsh-self-preserve
cd ~/.dsh/profiles/web # 以及 profiles/headless(如果使用)
# 在 package.json 的 "dependencies" 和 "dsh.profile.bundles" 中添加:
# "dsh-self-preserve": "file:../../local-mods/dsh-self-preserve"
pnpm install --ignore-workspace
安裝後,必須由外部機器或外部 supervisor 發起重啓。
典型用法¶
防止 SSH 中的命令注入¶
在 SSH 命令中調用 systemctl stop 時,如果命令位於雙引號字符串中,本地 shell 可能會提前解析該命令。插件會阻止對自身 Harness 的停止操作:
ssh peer "cat > RUNBOOK.md <<'EOF'
1. `systemctl --user stop deepseek-harness.service`
5. `systemctl --user start deepseek-harness.service`
EOF"
運行測試¶
插件包含獨立的測試文件,可直接運行:
node --test guard.test.mjs
適用場景與注意¶
- 權限依賴:插件以當前 DSH 進程的權限運行。安裝前應檢查源碼與許可證。
- 重啓限制:插件無法自我重啓。重啓必須由外部機器或外部 supervisor 發起。
- 配置要求:如果無法發現或配置目標,會記錄不活動警告。這是預期行爲。
總結¶
dsh-self-preserve 通過在 tools/pre-execute 階段進行策略攔截,解決了模型會話意外停止 Harness 的問題。它保留了其他服務的只讀訪問能力,確保了工作流的穩定性。