dsh-approval-session-allow:DSH 審批面板「本對話均允許」

前言

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。

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

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

小夜