在 DeepSeek Harness (DSH) 中,agent 需要頻繁訪問文件系統以執行任務。如果文件中包含敏感詞或違規內容,provider 的內容審覈機制可能會直接拒絕請求(HTTP 400)。一旦這些內容進入對話歷史,後續每一輪請求都會攜帶該內容,導致整個會話被阻斷。dsh-file-shield 插件通過在工具執行前攔截對指定文件或目錄的訪問,從源頭防止敏感內容進入對話。
功能與原理¶
dsh-file-shield 是一個由 Yazzyk 維護的插件。它屏蔽 agent 對指定文件或目錄的讀取、編輯、搜索和寫入操作。當 agent 試圖訪問被屏蔽的路徑時,工具調用會在執行前被拒絕,模型會收到權限錯誤,而不是文件內容。
- 攔截點:插件在
tools/pre-execute階段介入,返回deny,導致工具主體不執行。 - 錯誤反饋:模型會收到類似
Error: Access to "/path/to/file" is blocked by deployment policy的錯誤。 - Shell 命令處理:插件通過靜態分析 shell 命令文本,解析出其中的路徑參數進行攔截。它支持攔截
bash和pwsh工具的workdir和command參數,並會剔除搜索結果中的被屏蔽路徑。 - 輸出過濾:對於
grep、glob等工具,插件會剔除結果中命中規則的路徑,僅返回未屏蔽的內容。
侷限性¶
- Shell 混淆:插件通過靜態分析命令文本進行防禦,無法攔截所有混淆手段。例如,變量拼接(
cat $p)、base64 -d、命令替換($(...))等利用語義差異的操作可能繞過靜態檢查。 - Host 側讀取:不攔截不經過工具層的 host 側讀取操作,例如技能加載、
@文件引用等。 - 大小寫敏感性:默認
matchCase爲false,對於大小寫不敏感的文件系統,短相對規則可能產生誤傷。 - 額外工具:本插件不認識的讀文件工具需要通過配置
extraPathArgs和extraCommandArgs來支持。
安裝¶
使用官方安裝命令將插件添加到指定的 profile 中:
dsh plugin --profile <profile> add github:Yazzyk/dsh-file-shield
配置方式¶
Web GUI 配置¶
- 進入 Web GUI 的 Plugins 頁面。
- 點擊 Installed。
- 找到
dsh-file-shield並進入其配置頁面。 - 在頁面中選擇文件或目錄,或直接輸入路徑和 glob 模式。
- 點擊 保存,規則會寫入 profile 的
config.deny字段。
cordis.patch.yml 配置¶
也可以在 profile 的 cordis.patch.yml 中配置 deny 規則列表。支持 glob 模式(如 **/*.pem)或字面路徑。
- insert:
- id: file-shield
name: dsh-file-shield
config:
deny:
- '**/.env'
- '**/.env.*'
- '**/*.pem'
- '~/.dsh/.credentials.yaml'
matchCase: false
| 字段 | 默認值 | 說明 |
|---|---|---|
deny |
[] |
規則列表,空列表表示不屏蔽任何內容。 |
matchCase |
false |
是否區分大小寫。 |
extraPathArgs |
{} |
爲其他插件的自定義讀文件工具指定路徑參數名。 |
extraCommandArgs |
{} |
爲其他插件的自定義 shell 工具指定命令參數名。 |
生態與鏈接¶
該插件遵循 MIT 許可證。DSH 生態強調“一切皆插件”,本插件爲社區貢獻。
- GitHub 倉庫:https://github.com/Yazzyk/dsh-file-shield
- 社區目錄:https://www.skillhub.cn/plugins/Yazzyk/dsh-file-shield