前言¶
在 DeepSeek Harness(DSH)裏跑智能體時,工具調用往往要過一層人工審批:工作區內改文件可以靜默放行,但越界命令、刪庫、憑據、遠程執行一類操作若一律彈窗,日常開發會被打斷;若一律自動放行,又容易踩雷。社區裏已有基於審批門的插件思路;dsh-approval-core 是在 dsh-approval-gate 上 fork 並加固的版本,由維護者 lyaoliu 發佈,分類爲 admin-security,目標是把「例行沙箱內 / 可學習重複模式」與「硬風險、正則命中、分類器拿不準」分開處理:前者可自動放行或受約束學習,後者一律轉人工(fail-safe)。
下面介紹它是什麼、核心行爲、安裝配置,以及審查視圖與撤銷能力。事實以 GitHub README 與設計文檔爲準;DSH 生態是「一切皆插件」,SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
這是什麼¶
dsh-approval-core(當前 package 版本 0.2.0,MIT)是一套掛在 DSH Web 側的自動審批決策管道:工作區內寫文件由沙箱直接放行(不經過審批瀑布);越界等 neutral 類請求默認先轉人工,並在指紋命中與學習閾值滿足後可選自動放行;硬風險類別、正則危險清單、分類器超時/失敗/無法解析的輸出,一律轉人工。學習數據獨立存放,可一鍵清空;附帶分級配置 UI 與塊級撤銷審查視圖。
維護者:lyaoliu。上游爲 dsh-approval-gate;版權與改動說明見倉庫 NOTICE 與 README「與上游差異」一節。
核心功能與行爲¶
README 在 DSH Desktop 2.0.5 / 插件 0.1.2-rc.1 上做過真機驗證,行爲可概括爲下表(閾值與清單以 allowlist.json 爲準):
| 場景 | 行爲 |
|---|---|
| 工作區內寫文件 | 沙箱直接放行,零打擾 |
| 越界請求(neutral 類) | 前 riskyThreshold(默認 5)次轉人工,並按操作指紋記入學習樣本 |
| 同指紋同類操作達閾值後 | 自動放行(fp-hit),審計標記 auto-learned |
| 硬風險類別(deletion/credential/remote/system/bulk) | 永遠人工,不計數、不學習 |
正則危險清單命中(如 rm -rf、force-push、curl|sh 等 13 條 + denyKeywords) |
永遠人工,先於分類器執行 |
| 分類器超時/失敗/輸出無法解析 | fail-safe 轉人工 |
| 人工拒絕 | 升級爲永久人工規則(denyRules),清除該類學習計數 |
命令 /approval-core-clear-learning |
一鍵清空全部學習沉澱(stats 與 history) |
與上游的主要差異(節選):修復 permissionPresets 傳入 Session 的方式,避免插件從不接管;關鍵詞 DENY 層改爲 13 條確定性正則 + denyKeywords 第二層;學習獨立 learning.json 且可清空;v0.2.0 恢復受限 POST /api/auto-approve/rules(服務端 classifyOp + validateValue);移植 callId 回溯、快照與 Windows 路徑等修復。倉庫含 49 個 node:test 用例。
安裝與啓用¶
官方 README 給出的安裝方式爲本地目錄加入 web profile(非 git clone 後的遠程一鍵命令,請按你實際獲取插件包的路徑替換 ./dsh-approval-core):
dsh plugin --profile web add ./dsh-approval-core
插件以當前 DSH 進程權限運行;安裝前應自行閱讀源碼與 LICENSE(MIT),確認符合你的安全策略。
數據與配置目錄(默認 $DSH_HOME/auto-approve/,可通過 dataDir 遷到絕對路徑):
allowlist.json— 規則與配置(熱讀,每次審批前讀盤;denyKeywords正則編譯在加載時,改後需重啓 dsh web)learning.json— 學習狀態(可一鍵清空)audit.log— 決策審計events.jsonl— 審查 UI 事件流reverts.jsonl— 已執行撤銷記錄(服務端去重)
可選 "dataDir" 爲絕對路徑時,learning/audit/events/snapshots 等遷到該目錄;allowlist.json 仍在默認目錄。改 dataDir 需重啓 DSH Desktop。
配置與 HTTP 接口¶
規則、閾值與學習開關可編輯 allowlist.json,也可通過受限 HTTP 接口修改(v0.2.0 恢復受限規則 API)。主要字段包括:denyKeywords、allowRules、denyRules、hardCategories、riskyThreshold、judgeTimeoutMs、learning、dataDir、classifierModel 等。
只讀與寫接口(寫操作經四級權限矩陣 + 結構校驗):
GET /api/auto-approve/rules— 配置、學習狀態、預置清單、各 kind 的 permission 級別(供 UI)POST /api/auto-approve/rules— 受限寫;hardCategories永遠 forbidden;刪除預置項 forbidden;danger-full-access不可加白名單- 另有
GET events/GET diff/GET snapshots-stats,以及POST revert、POST snapshots-clear
配置 UI 權限分級(服務端爲最終邊界):
| 級別 | 示例 | 交互 |
|---|---|---|
| 只讀 | 管道總覽、學習進度、數據目錄、分類模型 | 僅展示 |
| 自由改 | riskyThreshold(1–20)、judgeTimeoutMs(5s–120s) |
直接改,越界 400 |
| 確認改 | 加黑名單詞、加白名單規則、刪自定義項 | 確認後提交 |
| 禁改 + 403 | 硬風險類別、刪預置項、danger-full-access 加白 |
UI 無控件,直髮請求也拒絕 |
分類模型:在 allowlist.json 設置 "classifierModel": {"provider": "...", "model": "..."},優先於會話默認模型;改文件即生效,POST /rules 不開放改此項。
權限預設也可在 profile 的 cordis.patch.yml 中添加 auto-approve 預設(預設表在配置構造時凍結)。
審查視圖與撤銷¶
會話右側「審批」tab 提供審批歷史:文件 chip 可看改動 diff(改動前快照 vs 當前文件);底部「撤銷此改動」恢復審批前狀態;每個 hunk 可「撤銷此塊」。撤銷走 AI 執行與正常審批瀑布,非程序直接寫盤,並用錨點核對行號。已撤銷記錄在 reverts.jsonl,重複撤銷返回 409;已撤銷塊置灰不可再點。
適用場景與注意¶
適合:希望在 DSH Web 側統一「沙箱內靜默 + 越界可學習 + 硬風險與 fail-safe 永不過線」的團隊或個人;需要從 fork 版獲得修復後的 Session 預設判定、正則 DENY 層與受限規則 API 的用戶。
注意:
learning.enabled=false時學習路徑關閉,相關請求按規則轉人工。- 分類器輸出需符合 README 所述雙協議(JSON
verdict或SAFE/RISKY:<category>),否則 fail-safe。 - 目錄頁星標等元數據以 SkillHub / GitHub 頁面爲準(撰寫時 GitHub 星標爲 0)。
設計細節見倉庫 docs/specs/2026-09-06-dsh-approval-core-design.md。
結尾¶
dsh-approval-core 把自動審批做成一條可審計、可回滾、可清空學習的管道:例行越界在約束下可沉澱爲放行,危險與不確定一律人工。若要安裝或看分類說明,可打開 SkillHub 目錄頁 與 GitHub 倉庫。