dsh-approval-core:DSH 自動審批決策管道(fail-safe 加固版)

前言

在 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 的用戶。

注意:

  1. learning.enabled=false 時學習路徑關閉,相關請求按規則轉人工。
  2. 分類器輸出需符合 README 所述雙協議(JSON verdict 或 SAFE/RISKY:<category>),否則 fail-safe。
  3. 目錄頁星標等元數據以 SkillHub / GitHub 頁面爲準(撰寫時 GitHub 星標爲 0)。

設計細節見倉庫 docs/specs/2026-09-06-dsh-approval-core-design.md。

結尾

dsh-approval-core 把自動審批做成一條可審計、可回滾、可清空學習的管道:例行越界在約束下可沉澱爲放行,危險與不確定一律人工。若要安裝或看分類說明,可打開 SkillHub 目錄頁 與 GitHub 倉庫。

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

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

小夜