DeepSeek Harness (DSH) 的插件化架構允許 Agent 獲取最高權限(如 danger-full-access)。當模型執行 Remove-Item、rm、del 等刪除命令時,通常意味着永久性破壞,缺乏安全回退機制。dsh-trash 插件通過攔截刪除操作,將其轉換爲可恢復的移動操作,爲 Agent 提供誤刪保護。
這是一個由 LeonSone 維護的 DSH 插件,核心價值在於將所有刪除行爲納入一個可恢復的垃圾存儲區。它支持 pwsh、bash 和 run_code 工具,默認回收站位置爲 $DSH_HOME/trash,零運行時依賴。
核心功能¶
- 攔截刪除命令:在 pwsh、bash 和 run_code 工具的
tools/pre-execute階段攔截Remove-Item、rm、del、rd、unlink、fs.unlink、os.remove、shutil.rmtree等命令,拒絕執行並引導使用回收站工具。 - 提供回收站工具:提供
trash、trash-list、trash-restore、trash-purge四個工具。 - 默認路徑:回收站位置默認爲
$DSH_HOME/trash,每個條目包含data/(保留原文件名)和meta.json(記錄原路徑、時間戳、大小)。 - 跨卷支持:支持跨卷移動,若無法重命名則自動降級爲複製。
- 零依賴:僅使用 Node.js 內置模塊,無額外運行時依賴。
安裝與啓用¶
使用官方安裝命令添加插件:
dsh plugin --profile web add github:LeonSone/dsh-trash
安裝後需重啓 dsh web 或 headless runner 以加載插件。
典型用法¶
插件加載後,模型行爲自動改變:
- 移入回收站:調用
trash(paths=[...])將文件/目錄移動到回收站。 - 查看回收站:使用
trash-list(path?)列出條目(支持路徑過濾)。 - 恢復文件:使用
trash-restore(entry_id=...)或trash-restore(path='...')恢復。 - 永久刪除:唯一真正刪除的路徑是
trash-purge(confirm: true)。
適用場景與注意事項¶
- 安全策略:插件採用 Fail-safe 設計,傾向於誤報(攔截包含刪除命令的字符串)而非漏報,防止真實刪除發生。短別名(如
rm、del)僅在命令位置匹配,cat /tmp/rm等場景不會被攔截。 - 覆蓋保護:恢復文件時若目標存在,會先將目標備份到回收站,確保無數據丟失。
- 運行權限:插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
總結¶
dsh-trash 通過攔截標準刪除命令並提供 trash-purge 作爲唯一齣口,爲 Agent 提供了安全刪除的兜底機制。更多細節與源碼請查閱:GitHub。