前言¶
在 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 執行一次工具調用(例如列出當前目錄),再打開審計文件查看新增行。
- 重啓 DSH,新建會話並觸發一次工具調用。
- 查看
$DSH_HOME/audit/approvals.jsonl或DSH_APPROVAL_AUDIT_LOG指向的文件。 - 應出現
"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