dsh-fileguard:全權模式下用軟約束攔住危險刪改

前言

DeepSeek Harness(DSH)在 workspace-write 下,Agent 可以直接改工作區裏的文件。系統提權確認框裏往往是英文路徑和 $ % # 混在一起,掃一眼很難判斷點「同意」後會刪什麼、改什麼。全開全權時,誤點一次就可能造成大面積刪庫或動到系統目錄。

下面介紹社區插件 dsh-fileguard(維護者 Wldpm,分類 admin-security)。它在模型動手刪、改文件之前多攔一道:要求用自然語言說明影響,再由你通過一次性 token 決定是否放行;同時用四檔策略和硬限制保護盤根、系統目錄等。這是軟約束,不是操作系統級安全邊界,但能把你從「看不懂就點同意」里拉出來。

這是什麼

dsh-fileguard 是給 DeepSeek Harness 用的文件守衛插件。在全權模式下,對大部分危險刪除與寫入先攔截,逼模型講清楚「動的是什麼、有什麼用、刪改後會怎樣」,再由你用 token(相當於鑰匙)放行。模型自己產生的臨時文件可走旁路臺賬,在窗口期內免審。

倉庫:https://github.com/Wldpm/dsh-fileguard
社區目錄頁:https://www.skillhub.cn/plugins/Wldpm/dsh-fileguard
當前 package 版本爲 0.2.1,許可證 MIT。

硬限制:四類永遠不放行

無論檔位、是否開發者模式,下面四類在規則範圍內一律不放行(部分僅針對刪除或寫入):

類別 說明
盤根刪除 如 C:\、D:\、U 盤盤根等;僅刪除時生效,往盤根複製或列舉不攔
系統目錄刪除 C:\Windows、Program Files、ProgramData、$Recycle.Bin、Recovery 等
通配符刪除/寫入 如 Remove-Item *.log;只讀如 Get-ChildItem *.txt 不受限
改插件自身配置 配置項值只能通過設置頁或斜槓命令改;cordis.patch.yml、本插件 package.json 的模型寫入會被攔,讀不限

原生 shell 命令與 dsh-ops 的 ops_* 工具走同一套規則,例如 ops_remove 與 Remove-Item 判定一致。

四檔策略

用斜槓命令或設置頁切換檔位:

檔位 命令 刪除 寫入/改盤 盤根 系統目錄·刪 系統目錄·改
純白名單 /guard-readonly 攔死 攔死 攔死 攔死 攔死
高攔截 /guard-high 攔一次 攔一次 攔死 攔死 攔死
默認 /guard-default 攔一次 放行 攔死 攔死 攔一次
低守衛 /guard-low 放行 放行 攔死 攔死 攔一次
  • 攔死:重試也不放行,提示中會說明不要再試。
  • 攔一次:生成一次性 token;模型需從你處拿到 token 後重發才放行,且只覆蓋該批目標。
  • 放行:直接執行,模型無額外提示。

攔一次之後的流程

被攔後,模型會收到提示,大致需要:

  1. 說明要動的路徑、用途及刪改後果。
  2. 你在聊天框執行 /guard-gettoken 取得 16 位 token(輸出只進日誌,模型上下文看不到)。
  3. 模型帶 token 重發,例如在命令末尾加註釋:Remove-Item 'D:\work\old.log' # fg:<token>;ops_* 無命令行時原樣重發調用即可。

AI 臨時文件免審

插件維護旁路臺賬(state/ai-created.json),記錄模型通過 write/edit 或 Set-Content、Out-File 等寫入過的路徑。在 低守衛 / 默認 檔下,刪除臺賬上的路徑可直接放行。

限制包括:目錄路徑不放行、通配符不放行、高攔截/純白名單檔不生效;默認窗口 8 小時,臺賬最多 5000 條。用 /guard-temp 循環切換 1→4→8→24→72→關,或 /guard-temp 12 設小時數,/guard-temp 0 關閉。

狀態目錄與配置

敏感狀態在插件目錄下 state/(tokens.json、ai-created.json)。對該目錄的讀寫一律攔死,避免模型窺視 token 與臺賬。檔位、窗口等寫在 profile 配置層,設置頁可改;直接改 cordis.patch.yml 或插件 package.json 的寫入會被攔。

主要配置項(設置頁「文件守衛」或 cordis.patch.yml):

字段 默認 說明
enabled true 總開關
policy "default" low / default / high / readonly
tempHours 8 臨時文件免審窗口(小時),0 關閉
devMode false 開發者模式:普通刪改與 state/、配置文件可放行並記日誌,盤根與系統目錄仍硬攔
protectedDirs 見 README 額外保護目錄列表

斜槓命令彙總:/guard-low、/guard-default、/guard-high、/guard-readonly、/guard-temp [小時]、/guard-gettoken、/guard-dev [on|off]。

安裝與啓用

前提:插件目錄需能解析 @deepseek-ai/schemastery;用 link: 安裝時若不在 profile 的 node_modules 搜索路徑下,可能要手動建 junction(見 README「依賴坑」)。

方式一,從本地目錄安裝:

dsh plugin --profile <profile名> add <本倉庫絕對路徑>

方式二,手動掛載:

  1. 將倉庫放到例如 ~/.dsh/plugins/dsh-fileguard。
  2. 在目標 profile 的 package.json 增加 dependencies 裏的 "dsh-fileguard": "link:<倉庫絕對路徑>",並把 "dsh-fileguard" 寫入 dsh.profile.bundles。
  3. 在 profile 目錄執行 pnpm install。
  4. 重啓 DSH。

不要用 cordis.patch.yml 的 - insert: 硬塞插件,否則設置頁與斜槓命令可能報配置被 home patch 覆蓋。正確做法是用 bundles 登記;cordis.patch.yml 裏最多保留開關,例如:

- id: dsh-fileguard
  disabled: false

若加載報 Cannot find package '@deepseek-ai/schemastery',可在插件目錄建 junction 指向 profile 的 node_modules\@deepseek-ai(PowerShell 示例見倉庫 README)。

驗證:重啓後查看日誌(默認 %TEMP%\dsh-fileguard.log),應出現 apply; tools=... 與 commands: /guard-low ... 兩行;設置頁左側應有「文件守衛」。

已知邊界(務必閱讀)

插件以當前 DSH 進程權限運行,安裝前應自行查看源碼與 MIT 許可證。README 明確這是軟約束:擋不住執意刪文件的模型,例如 [System.IO.File]::Delete()、fs.rmSync、run_code 裏拼 JS、write/edit 寫非 state/非配置路徑等繞過方式。它能做的是抬高門檻,讓你有時間踩剎車;物理隔離需依賴 OS ACL 或更嚴格的 workspace-write 策略。

調試時可 /guard-dev on 臨時放寬(盤根與系統目錄仍攔),用完 /guard-dev off。

結尾

在全權模式下仍希望「先看懂再點頭」,dsh-fileguard 用攔截、自然語言說明和 user-only 的 /guard-gettoken 把決定權還給你,並用檔位與硬限制兜住盤根和系統目錄。社區目錄與 GitHub 倉庫相互獨立,與 DeepSeek / 幻方無官方從屬關係;需要細節時以 README 爲準。

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

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

小夜