前言¶
DeepSeek Harness(DSH)在工具越權時會彈出審批面板,默認只有「允許一次」和「拒絕」。一條稍長的任務裏,同一個工具(例如 pwsh 訪問工作區外路徑、write 寫敏感位置)可能被問十幾次,每次只能放行一次,打斷節奏。下面介紹社區插件 dsh-approval-session-allow:在面板上增加第三個選項「本對話均允許」,按工具記住當前對話的授權,後續同類請求自動放行,並可隨時撤銷。
這是什麼¶
dsh-approval-session-allow 是 DSH 的客戶端審批面板增強插件,維護者爲 Miaoyeah,倉庫 GitHub,在 SkillHub 目錄中歸類爲 admin-security。它不改動 Host 側代碼,通過 DSH 插件機制接管內置 @deepseek-ai/dsh-client-ui-approval 的面板職責,在「臨時決定」之上增加會話級、按工具粒度的放行策略。
核心功能¶
內置面板只有兩個答案時,本插件補上第三個按鈕,行爲對比如下。
| 按鈕 | 行爲 |
|---|---|
| 拒絕(Esc) | 拒絕這一次 |
| 允許一次(Enter) | 只放行這一次,與 DSH 默認一致 |
| 本對話均允許 | 放行這一次,且本對話內同一工具不再詢問 |
點「本對話均允許」之後,同一對話裏同一工具再次需要越權授權時,審批面板不會出現;插件在 approval/request 瀑布裏直接返回 allowed-once。每次審批仍會寫入會話日誌(approval/asked / approval/decided),Host 側看到的仍是正常的 allowed-once,審計鏈保持完整。
授權範圍按 (會話, 工具名) 記在瀏覽器 localStorage(鍵 dsh.approval.sessionAllow.v1):
- 只對當前對話生效;新建對話即失效,其他對話、其他工作區不受影響。
- 只對點按鈕時的那個工具生效;給
pwsh授權不會自動放過write。 - 子代理是獨立會話,需單獨授權。
- 刷新頁面、重啓應用後同一對話內仍有效;清空站點數據會清空賬本。
撤銷方式:下一次仍會出現審批面板時,界面會顯示「本對話已自動允許」及已放行工具列表,點工具名後的 × 立即撤銷;也可新建對話,或在開發者工具執行 localStorage.removeItem('dsh.approval.sessionAllow.v1')。
安裝與啓用¶
方式一:DSH Web 插件頁(推薦)¶
在 DSH Web 界面的插件頁粘貼倉庫地址安裝:
https://github.com/Miaoyeah/dsh-approval-session-allow
安裝會寫入 profile 的 dsh.profile.bundles 並默認啓用,包內 cordis.patch.yml 隨即生效(禁用內置審批面板並插入本插件條目)。與 agent 調用 plugin_manager 的 install_bundle 效果相同。
資料中明確說明:只執行 dsh plugin add <git-url> 不夠——該命令把參數轉發給 pnpm add,只裝依賴、不會選中組合包。若走該命令,還需手動把 dsh-approval-session-allow 加進 profile package.json 的 dsh.profile.bundles 列表,否則插件不會加載。
安裝後一般無需重啓:profile 的 patch 與插件文件被運行中的 Host 監聽,數秒內自動重組,瀏覽器通過 HMR 更新插件圖。
方式二:手動接入 profile¶
把倉庫目錄登記爲 link: 依賴,並在 profile 的 cordis.patch.yml 末尾追加:
- id: ui-approval
name: '@deepseek-ai/dsh-client-ui-approval'
disabled: true
- insert:
- id: approval-session-allow
name: 'dsh-approval-session-allow'
兩種方式不要同時用:同一 Loader id 插入兩次屬於配置錯誤;用方式一則不必手寫上述片段。
卸載¶
dsh plugin --profile <profile> remove dsh-approval-session-allow
手動安裝時刪除 profile cordis.patch.yml 裏對應條目,內置審批面板會自動恢復。
典型用法¶
1、在 DSH Web / 桌面 GUI 中完成插件安裝(推薦粘貼 GitHub 地址)。
2、Agent 觸發需要審批的工具調用時,在面板中選擇「本對話均允許」而非「允許一次」。
3、同一對話內該工具後續越權請求應不再彈窗;若需恢復詢問,在後續面板中撤銷對應工具,或開新對話。
插件複用內置包的槽位(conversation.composer、conversation.approval.detail 等),工具自帶的審批詳情(例如 pwsh 命令預覽)仍照常顯示。
原理簡述¶
approval/request 瀑布
├─ 命中本會話授權 → 直接返回 allowed-once(面板不渲染)
└─ 未命中 → 渲染面板:拒絕 / 允許一次 / 本對話均允許
lib/index.js:Host 側空實現,供 Loader 啓動條目。lib/client.js:瀏覽器側面板、授權賬本與approval/request監聽,懶加載 CJS bundle。
適用場景與注意¶
適合:在 DSH 0.2.x Web / 桌面 GUI 裏做較長對話、同一工具反覆越權(腳本、寫文件、跨路徑操作)的開發者,希望減少重複點「允許一次」。
兼容性:面向帶瀏覽器面板的客戶端插件層;CLI、headless、ACP 等走各自審批通道,本插件不適用。依賴內置包暴露的客戶端接口;DSH 大版本升級後若接口變化,插件可能在列表中加載失敗,卸下插件即可恢復內置面板。
安全:插件以當前 DSH 進程與瀏覽器 localStorage 爲邊界運行,授權僅會話內、按工具生效,並非全局永久放行。安裝前應閱讀 倉庫源碼 與 MIT 許可證,確認符合你的安全策略。社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-approval-session-allow 在不大改 DSH 審批模型的前提下,用「本對話均允許」把重複彈窗收斂到一次選擇,並保留撤銷與日誌審計。目錄頁:https://www.skillhub.cn/plugins/Miaoyeah/dsh-approval-session-allow;源碼與完整說明:https://github.com/Miaoyeah/dsh-approval-session-allow。