dsh-approval-audit:免審批下的本地審批與工具調用審計

前言

在 DeepSeek Harness(DSH)裏讓智能體跑工具時,審批閘門會反覆打斷流程:每次刪文件、改路徑、執行命令都要人工點同意。把 profile 默認設成完全權限可以減輕新建會話的負擔,但已經開着的會話往往仍按舊預設運行。另一方面,一旦放寬審批,事後想查「到底放過哪些工具、參數是什麼」又缺少一份本機、可逐條翻閱的記錄。

dsh-approval-audit(維護者 wojiao42,分類 admin-security)把兩件事綁在一起:監聽會話事件後把活動會話切到權限預設 danger-full-access(沙箱 danger-full-access、審批策略 never),並把審批相關事件與工具調用逐條追加寫入本機 JSONL。它是 Host 側插件,沒有客戶端界面;裝上之後可見的產物主要是審計文件。社區目錄見 SkillHub 插件頁,源碼與說明見 GitHub 倉庫(當前資料版本 v1.1.0,許可證 MIT)。

風險提示(與 README 一致):裝上即關閉審批閘門,不適合處理不可信輸入或陌生代碼的機器;後果自負。

這是什麼

一句話:DSH 審批審計插件 —— 自動免審批 + 本地 JSONL 留賬。

  • 維護者:wojiao42
  • 包名:dsh-approval-audit(v1.1.0 起;此前爲 @local/dsh-approval-audit)
  • 解決的問題:減少人工點審批的次數,同時在 $DSH_HOME/audit/approvals.jsonl(或環境變量指定路徑)保留審批與工具調用的本地審計行;不上傳、不聯網。

核心功能

免審批:活動會話切到完全權限

插件訂閱 session/event。某會話的第一個事件到達後,在 queueMicrotask 裏調用 permissionPresets.set(session, 'danger-full-access');每個會話對象只切一次(WeakSet 記錄)。若會話已是該預設則跳過,且不寫 auto-preset 行。目標預設寫死在 index.js 頂部的 PRESET = 'danger-full-access';切換失敗只記一條 auto-preset-failed,不重試、不彈窗。

與「profile 默認預設」的區別:本插件會對已存在的活動會話同樣生效,而不只影響之後新建的會話。

審計:白名單事件寫入 JSONL

每行一條 JSON,字段爲 { at, kind, session, type, data }(插件自有的 auto-preset / auto-preset-failed 用 preset / error,無 type)。

記錄的會話事件類型包括:approval/asked、approval/decided、approval/policy、sandbox/mode、permission/preset、tool/call、tool/result、turn/end。工具參數截斷 300 字符,tool/result 的 meta 200 字符,其餘事件數據 400 字符;tool/result 不記完整結果。追加寫、不輪轉;父目錄不存在時會 mkdirSync 創建。寫失敗在 try/catch 內靜默丟棄,不影響會話繼續運行。

它改什麼、不改什麼

僅會:調用 permissionPresets.set、向審計文件追加行、必要時創建審計目錄。不按 README 設計去改會話事件載荷、不寫工作區文件、不聯網、不 child_process 執行命令、不刪改審計文件以外的路徑。

安裝與啓用

v1.1.0 起 package.json 含 dsh.bundle.patch(指向 cordis.patch.yml),經插件市場或 dsh plugin add 裝包後會帶入 profile 的 patch 層 —— 裝完重啓 DSH 即掛載,無二次確認。

圖形界面(桌面端,推薦)

設置(Ctrl+,)→ 插件市場 → 自定義安裝 → 填寫:

github:wojiao42/dsh-approval-audit

然後重啓 DSH。資料註明:桌面端 profile 由應用託管時,命令行 dsh plugin --profile desktop add 可能被拒絕,可走圖形界面。

命令行

# 桌面端(DSH Desktop)
dsh plugin --profile desktop add github:wojiao42/dsh-approval-audit

# 瀏覽器版(DSH Web)
dsh plugin --profile web add github:wojiao42/dsh-approval-audit

Host 插件在啓動時加載;改 patch 或環境變量後須重啓 DSH,僅刷新頁面不夠。

手動掛載(可選)

在 $DSH_HOME/profiles/<profile>/cordis.patch.yml 末尾追加 insert(<profile> 爲 desktop 或 web),例如已裝包時:

- insert:
    - id: approval-audit
      name: 'dsh-approval-audit'

審計路徑(可選)

默認:$DSH_HOME/audit/approvals.jsonl;無 DSH_HOME 時退到 ~/.dsh/audit/approvals.jsonl。覆蓋路徑:

# macOS / Linux
export DSH_APPROVAL_AUDIT_LOG="/path/to/approvals.jsonl"

改環境變量後需重啓 DSH。目錄無寫權限時審計靜默失效,需用下面自測步驟確認。

卸載與恢復審批

一鍵安裝:dsh plugin --profile <profile> remove dsh-approval-audit(或插件市場卸載),重啓 DSH。手動掛載:刪除或禁用 patch 中的 insert,重啓。另檢查 profile 是否仍將新會話默認設爲完全權限。審計文件不會自動刪除。

典型用法與自測

裝好並重啓後,讓 agent 執行一次工具調用(例如列出當前目錄),再打開審計文件查看新增行。

  1. 重啓 DSH,新建會話並觸發一次工具調用。
  2. 查看 $DSH_HOME/audit/approvals.jsonl 或 DSH_APPROVAL_AUDIT_LOG 指向的文件。
  3. 應出現 "kind":"session-event" 且 "type":"tool/call" / "tool/result";若會話原先不是完全權限,還可能有 "kind":"auto-preset"。

看不到新行時:檢查審計目錄是否可寫、宿主是否存在 danger-full-access 預設、patch 是否被正確加載。倉庫無自動化測試;僅可做語法檢查:

node --check index.js

適用場景與注意

適合:本機只跑你明確信任的代碼與任務,你願意用「無人工審批」換流暢度,並願意事後翻 JSONL 自查。不適合:自動處理陌生網頁、不可信倉庫或他人輸入的環境。

安裝前建議自行閱讀 GitHub 源碼 與 LICENSE(MIT)。插件以當前 DSH 進程權限運行;審計日誌爲明文 JSONL,可能含命令、路徑或參數中的敏感信息,分享前需自行脫敏。審計不防篡改,不能代替安全機制。

已知邊界摘要:同一會話內手動切回「僅可查看」不是永久回退,插件仍掛載時重啓或會話重建後會再切;日誌只增不減、會截斷長字段;PRESET 改動需重啓 Harness 才生效。

結尾

dsh-approval-audit 把「放行自動化」和「事後留賬」放在一起:活動會話一律 danger-full-access,審批與工具調用落在本機 JSONL。使用前務必接受無審批帶來的操作風險;需要閘門時卸載插件並檢查 profile 預設。

  • 目錄頁:https://www.skillhub.cn/plugins/wojiao42/dsh-approval-audit
  • GitHub:https://github.com/wojiao42/dsh-approval-audit
羽毛球分组比赛记分
小程序二维码

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

小夜