dsh-session-allow: 會話級權限授權插件

前言

DeepSeek Harness (DSH) 的設計理念是“一切皆插件”。在開發智能體工具時,經常會遇到需要提升權限的場景,例如將沙箱權限從默認提升至 danger-full-access。這種提升通常需要通過審批對話框手動確認,如果需要反覆測試或調試,每次請求都進行確認會降低效率。

dsh-session-allow 是一個 DSH Web GUI 插件,它在審批對話框中新增了“本會話允許”選項。開發者點擊一次後,該模式(mode)將在當前會話內獲得永久授權,後續的相同請求將自動通過,無需再次彈窗。

功能說明

該插件通過替換 DSH 核心的審批面板來實現功能,不涉及核心包的修改。

  1. 新增選項:審批對話框中會出現“本會話允許”選項( alongside “拒絕” 和 “允許一次”)。
  2. 自動批准:一旦授予某模式,當前會話內再次請求該模式時,系統會自動通過,不再彈出對話框。
  3. 按模式隔離:只有與已授予模式匹配的請求才會被自動批准,其他模式仍會正常提示。
  4. 可撤銷:對話框底部會顯示當前會話已授予的模式列表(芯片形式),點擊 × 即可撤銷授權。
  5. 會話隔離:刷新頁面或開啓新會話後,之前的授權記錄會自動清空,權限狀態重置。

安裝與啓用

通過以下命令安裝插件。安裝完成後需重啓 dsh web 以加載新組件。

dsh plugin --profile web add https://github.com/AnakinCao/dsh-session-allow.git

提示:請選擇一種安裝方式,不要重複掛載。

工作原理

此插件通過覆蓋 conversation.composer 鏈槽來實現功能。

  • 註冊優先級:DSH 核心審批面板在 conversation.composer 鏈槽註冊的優先級爲 1。本插件以優先級 0 註冊了相同的選擇器。根據鏈槽機制,優先級 0 的組件會完全替換優先級 1 的組件。
  • 數據存儲:授權記錄存儲在 localStorage['dsh.sessionAllow.v1'] 中。
  • 授權鍵:系統會解析請求原因(通常爲 escalate sandbox to <mode>: ...),提取模式作爲授權鍵(mode:<mode>)。非升級類的請求會使用 tool:<tool>:<reason> 作爲鍵。
  • 網絡通信:匹配的請求在網絡上會被自動回答爲 allowed-once,但主機的審計日誌仍會記錄 approval/asked 和 approval/decided。

典型用法

場景一:首次請求危險模式

工具請求提升權限到 danger-full-access。對話框顯示:
* 拒絕
* 允許一次
* 本會話允許 danger-full-access

場景二:執行授權

點擊“本會話允許 danger-full-access”。當前請求被允許,且該模式被授予當前會話。

場景三:重複請求

在同一會話內再次請求 danger-full-access。對話框不再出現,系統靜默自動批准請求。

場景四:請求其他模式

在同一會話內請求一個尚未被授權的模式(例如 tool:web-search)。對話框正常彈出,提示用戶進行審批。

場景五:撤銷授權

在對話框底部,可以看到當前會話已授予的模式芯片。點擊芯片上的 ×,該模式被撤銷,下次請求時將重新彈出對話框。

卸載與清理

dsh plugin --profile web remove dsh-session-allow

若要手動清理授權數據,可在瀏覽器開發者工具的控制台中刪除 localStorage['dsh.sessionAllow.v1']。

文件結構

dsh-session-allow/
├── package.json          # 插件聲明
├── cordis.patch.yml      # 加載器註冊入口
├── lib/
│   ├── index.js          # 主機端佔位符插件
│   └── client.js         # 客戶端包(接管面板 + 會話授權)
├── test/
│   └── behavior.test.mjs # 授權、自動批准、撤銷的迴歸測試
└── README.md
羽毛球分组比赛记分
小程序二维码

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

小夜