DSH(DeepSeek Harness)默認採用沙盒機制,Agent 在非工作區目錄進行寫入時,常陷入“拒絕訪問 → 升級重試 → 手動審批”的循環。dsh-fs-allowlist 插件旨在解決這一痛點,通過攔截寫操作,允許對配置的白名單目錄進行免審批訪問,同時提供設置界面和 Bash 命令的自動批准功能。
核心功能¶
該插件主要解決兩類寫入場景的審批問題:
- 文件工具(write/edit):包裝了
ctx.fs.checkedTarget沙盒攔截器。當目標路徑位於白名單根目錄下時,請求會直接通過,無需觸發人工審批流程。 - Bash 命令:利用
tools/pre-execute監聽命令文本,結合approval/request答案機制。若 Bash 命令文本或升級理由中包含白名單路徑(支持遞歸匹配),系統將自動批准該次執行,不再彈出審批窗口。
安裝與啓用¶
使用官方命令安裝插件到 web 配置文件:
dsh plugin --profile web add "github:wzn16/dsh-fs-allowlist#main"
安裝後,需重啓 DSH Desktop 才能生效。修改源碼目錄後同樣需要重啓。
配置與用法¶
1. 設置界面管理¶
推薦使用圖形界面配置。在 DSH Desktop 中進入設置,找到“Plugins”選項卡下的“Directory Allowlist”,添加需要免審批寫入的目錄路徑。
2. 配置文件編輯¶
也可以直接編輯配置文件 $DSH_HOME/fs-allowlist.json。文件格式如下:
{
"extraWritableRoots": [
"/Users/you/ObsidianVault"
],
"bashAutoApprove": true
}
extraWritableRoots:定義白名單目錄。bashAutoApprove:控制是否自動批准 Bash 命令,默認爲true。
配置支持熱重載,界面修改即時生效,手動修改配置文件通常在 3 秒內被識別。
工作原理¶
寫入層¶
DSH 的寫入操作默認經過 dsh-fs-sandbox 掛載的 ctx.fs.checkedTarget 攔截器。本插件掛載在該攔截器之上:
- 命中白名單:使用 realpath(解析後的絕對路徑)檢查目標是否在白名單根目錄下,命中則放行。
- 未命中:委託給原始攔截器,維持原有的拒絕/審批邏輯。
Bash 層¶
Bash 運行在 Seatbelt 進程沙盒中,插件無法擴展其配置。因此採用啓發式匹配:
1. 在 tools/pre-execute 階段記錄命令文本。
2. 在審批請求階段,解析命令文本和理由,展開 ~ 符號。
3. 遞歸檢查是否包含白名單路徑。若匹配,自動回覆 allowed-once。
注意事項¶
- 許可證:採用 MIT 許可證。
- Bash 啓發式限制:自動批准依賴於命令文本和理由中包含白名單路徑。若兩者均不匹配,系統會回退到人工審批(這是安全機制)。
- 內部依賴風險:插件依賴 DSH 內部的
ctx.fs.checkedTarget接口(seam)。若 DSH 進行版本升級並重構了該接口,插件行爲可能退化,表現爲透明(等同於未安裝)。 - 安全風險:白名單項意味着 Agent 可無詢問寫入,請務必保持列表精簡。
- 配置缺失處理:若配置文件缺失、內容爲空或格式無效,插件行爲等同於卸載,不會破壞現有會話。