前言¶
在 DeepSeek Harness(dsh)裏,模型若要執行工作區外的操作,宿主會彈出審批對話框,通常只展示一行即將執行的命令。你要自己推斷它做什麼、會動哪些路徑、點「同意一次」或「拒絕」各意味着什麼;看不懂時,往往只能在盲目信任與盲目拒絕之間選。
社區插件 dsh-approval-explainer(維護者 ArisuYuuko,分類 admin-security)在同一彈窗裏追加一段由模型推理生成的註釋:代碼在做什麼、模型想達成什麼、風險等級及理由、對各按鈕含義的說明,便於帶着依據做決定。DSH 生態主張「一切皆插件」;插件目錄站 SkillHub 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
這是什麼¶
dsh-approval-explainer 是 DSH 審批彈窗的 AI 註釋器:僅在模型請求權限外操作、觸發真實審批時,利用會話中的 LLM 在後臺生成說明,並在瀏覽器側渲染到審批詳情區域。它不改寫審批策略,只觀察 approval/request 瀑布流並補充可讀信息。
核心功能¶
彈窗上的註釋內容¶
未安裝插件時,審批提示可能類似:
即將執行
& '<temp>\diagnose-windows-sandbox-acl.ps1' -Path 'D:\some-project' -AllowRewrite
安裝後,同一彈窗會額外出現結構化說明,例如風險等級、代碼作用、模型意圖、風險判定理由、建議,以及各選項的實際後果(文件是否真的會寫入、拒絕後模型會如何被通知等)。README 強調:註釋會說明「Approve once」不只是「命令會跑」,還包括文件是否落盤、同一次授權下其他寫入是否也被覆蓋等決策所需信息。
設計約束(與行爲相關)¶
| 要點 | 說明 |
|---|---|
| 僅真實審批 | 不對常規工具調用做註釋;README 舉例測量中 approval/request 2 次、tools/pre-execute 259 次,全量註釋等於沒有信號 |
| 不阻塞審批 | 後臺生成,彈窗立即出現;生成失敗或超時不影響你可批准的內容 |
| 失敗可見 | 生成失敗時在面板展示原因,而非靜默掛起 |
| 參數來自會話 | approval/request 不帶工具參數,插件按 callId 在會話日誌中查找 tool/call,找不到則如實說明,不編造 |
| 提示注入防護 | 系統提示將代碼、路徑、命令視爲數據而非指令 |
| 不改策略 | 只觀察審批瀑布,不決定誰可被授權 |
審批歷史¶
每次真實 escalation 會記錄,可通過本地 Web 端口訪問:
http://127.0.0.1:<dsh-web-port>/dsh-approval/history
自 v0.9.0 起,瀏覽器半會在 Session 標題操作行(與 Conversation / Trajectory 同級,槽位 conversation.session.header.actions)增加 Approval history 按鈕,點擊在新標籤頁打開上述頁面。
安裝與啓用¶
桌面端使用的 profile 一般爲 desktop。安裝命令(來自倉庫 README):
dsh plugin --profile desktop add github:ArisuYuuko/dsh-approval-explainer
首次使用某 profile 會初始化該 profile。安裝後需完全退出並重新打開 DSH;僅刷新頁面不夠,宿主側(host half)只在進程啓動時加載。
驗證配置層是否生效:
dsh --profile desktop --dump-config
期望看到類似片段:
# == dsh-approval-explainer
- id: dsh-approval-explainer
name: dsh-approval-explainer
inject:
- llm
- approval
該插件爲純 JavaScript、無構建步驟,README 說明因此通常不需要爲 allowBuilds 額外授權 pnpm。
卸載(含配置層):
dsh plugin --profile desktop remove dsh-approval-explainer
package.json 聲明引擎要求爲 dsh 版本 >=0.2.0-rc.1 <0.3.0-0,許可證 MIT;當前資料中 npm 包版本爲 0.9.4。
典型用法¶
- 按上文命令爲
desktopprofile 安裝插件並重啓 DSH。 - 在對話中讓模型執行需要工作區外權限的操作(例如寫工作區外路徑、申請
danger-full-access等),觸發 DSH 標準審批彈窗。 - 在命令行下方閱讀插件生成的註釋(風險、意圖、按鈕含義),再選擇 Approve once 或 Deny。
- 需要回顧歷史 escalation 時,在 Session 頭點擊 Approval history,或訪問
http://127.0.0.1:<dsh-web-port>/dsh-approval/history。
註釋在後臺異步生成,彈窗會先出現;若 LLM 尚未返回,可稍等面板更新,或根據失敗提示排查(不影響你是否具備批准權限)。
實現要點(便於排查問題)¶
插件是 DSH bundle:npm 包攜帶 cordis.patch.yml,向 profile 貢獻一層配置;dsh plugin add 安裝包並追加到 dsh.profile.bundles。
- lib/index.js(Node 宿主):監聽
approval/request,後臺調用 LLM 生成註釋、緩存,並提供 8 條 HTTP 路由。 - lib/client.js(Web 瀏覽器):註冊
conversation.approval.detail槽,渲染命令與註釋卡片;須以更低 priority(如-1)覆蓋官方 UI 的priority: 0。
README 列出兩條硬約束:宿主不得自行再注入 client 腳本(會導致 web 啓動失敗及 DSH 自愈清配置);宿主 apply() 不得拋錯,否則可能出現「安裝後 DSH 無法啓動」。
適用場景與注意¶
適合:經常在 DSH 裏批准 shell、文件、權限 escalation 的開發者;希望在 human-in-the-loop 環節看到可覈對的風險與意圖說明,而不是單行命令。
注意:
- 插件以當前
dsh進程權限運行,會向 LLM 發送與會話相關的上下文以生成註釋;安裝前應閱讀 源碼 與 MIT 許可證,確認符合你的安全策略。 - 註釋是輔助信息,不能替代你對命令與路徑的審查;策略仍由 DSH 本體決定。
- 社區目錄頁星標等統計以站點展示爲準;GitHub 倉庫當前資料中星標爲 0。
結尾¶
dsh-approval-explainer 把審批彈窗從「一行命令 + 兩個按鈕」擴展爲帶風險、意圖與選項含義的說明,且刻意不阻塞、不篡改審批結果。若你在桌面 DSH 中頻繁遇到權限外操作,可按 README 安裝到 desktop profile 並完全重啓後試用。