前言¶
DeepSeek Harness (DSH) 的設計理念是“一切皆插件”。在開發智能體工具時,經常會遇到需要提升權限的場景,例如將沙箱權限從默認提升至 danger-full-access。這種提升通常需要通過審批對話框手動確認,如果需要反覆測試或調試,每次請求都進行確認會降低效率。
dsh-session-allow 是一個 DSH Web GUI 插件,它在審批對話框中新增了“本會話允許”選項。開發者點擊一次後,該模式(mode)將在當前會話內獲得永久授權,後續的相同請求將自動通過,無需再次彈窗。
功能說明¶
該插件通過替換 DSH 核心的審批面板來實現功能,不涉及核心包的修改。
- 新增選項:審批對話框中會出現“本會話允許”選項( alongside “拒絕” 和 “允許一次”)。
- 自動批准:一旦授予某模式,當前會話內再次請求該模式時,系統會自動通過,不再彈出對話框。
- 按模式隔離:只有與已授予模式匹配的請求才會被自動批准,其他模式仍會正常提示。
- 可撤銷:對話框底部會顯示當前會話已授予的模式列表(芯片形式),點擊 × 即可撤銷授權。
- 會話隔離:刷新頁面或開啓新會話後,之前的授權記錄會自動清空,權限狀態重置。
安裝與啓用¶
通過以下命令安裝插件。安裝完成後需重啓 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