dsh-fs-allowlist:白名單目錄無審批寫入

DSH(DeepSeek Harness)默認採用沙盒機制,Agent 在非工作區目錄進行寫入時,常陷入“拒絕訪問 → 升級重試 → 手動審批”的循環。dsh-fs-allowlist 插件旨在解決這一痛點,通過攔截寫操作,允許對配置的白名單目錄進行免審批訪問,同時提供設置界面和 Bash 命令的自動批准功能。

核心功能

該插件主要解決兩類寫入場景的審批問題:

  1. 文件工具(write/edit):包裝了 ctx.fs.checkedTarget 沙盒攔截器。當目標路徑位於白名單根目錄下時,請求會直接通過,無需觸發人工審批流程。
  2. 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。

注意事項

  1. 許可證:採用 MIT 許可證。
  2. Bash 啓發式限制:自動批准依賴於命令文本和理由中包含白名單路徑。若兩者均不匹配,系統會回退到人工審批(這是安全機制)。
  3. 內部依賴風險:插件依賴 DSH 內部的 ctx.fs.checkedTarget 接口(seam)。若 DSH 進行版本升級並重構了該接口,插件行爲可能退化,表現爲透明(等同於未安裝)。
  4. 安全風險:白名單項意味着 Agent 可無詢問寫入,請務必保持列表精簡。
  5. 配置缺失處理:若配置文件缺失、內容爲空或格式無效,插件行爲等同於卸載,不會破壞現有會話。

參考資料

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜