前言¶
在 DeepSeek Harness(DSH)裏,智能體調用工具前常會彈出審批:Allow once 與 Reject。拒絕後,模型側往往只看到「用戶拒絕了工具 X」,沒有結構化渠道把「爲什麼不批准」寫進當前輪次。若你希望在拒絕的同時說明「網絡不穩先別跑這條命令」「暫時別動那個文件」,通常只能等下一輪再打字補一句,模型可能已經按「莫名被拒」繼續猜策略。
dsh-approval-reason-dock 是一款面向 Web 客戶端的疊加型 DSH 插件:在原生審批卡片之上增加可選的拒絕原因輸入,並在正式以 rejected 答覆審批之前,把原因以 steering 用戶消息注入正在進行的會話,讓模型下一步就能讀到上下文,而不是事後追問。
這是什麼¶
插件全名 dsh-approval-reason-dock,維護者爲 FzqxDedafeiyu,在 DSH 插件社區分類爲 admin-security。源碼與說明見 GitHub 倉庫,npm 包名同爲 dsh-approval-reason-dock(當前發佈版本 0.1.1,許可證 MIT)。
它不替換內置審批卡,不修改審批協議或審計事件;面板渲染失敗時會軟降級,內置審批行爲與未裝插件時一致。
核心行爲¶
下面介紹插件在 Web 端的主要邏輯,均來自官方 README 與 package.json 中的 engines.dsh 說明。
面板與多會話¶
- 當前會話存在可答覆的審批時,在界面右上角(
shell.overlay槽位)出現面板。 - 面板跟隨主視圖中的會話:只展示該會話的審批,其他會話的待審項在切換過去之前不打擾;標題欄顯示會話名稱。
- 默認展開,可收折爲半透明「Pending review」膠囊,避免擋住對話;每次新的審批再次默認展開。
- 各審批各自保留原因草稿,多會話來回切換不會沖掉已在其他審批裏輸入的文字。
帶原因拒絕與純拒絕¶
在面板中輸入原因後點 Reject with reason:
- 向運行中的會話發送 steering 用戶消息,正文形如
(approval rejection reason) <text>,通過remote.session.prompt,mode: "steer"。 - 若當前輪次已不能接受 steering,則改爲排隊(
mode: "queue")。 - 隨後將審批答覆爲
rejected。
拒絕成功後面板立即關閉。僅當原因投遞失敗時,會留下可關閉的錯誤提示(含錯誤碼)。面板上的 Reject 與內置按鈕相同:不帶原因直接拒絕。
隱私與內容形態¶
拒絕原因會以普通用戶消息進入會話記錄與模型上下文:純文本、最長 500 字符、不以 HTML 渲染。插件自述不發起額外網絡請求,除待處理審批元數據外不讀取會話正文。
安裝與版本對應¶
engines.dsh 要求 DSH >=0.2.2-rc.1 且 <0.3.0。README 給出的版本矩陣如下:
| DSH | 插件 | 狀態 |
|---|---|---|
0.2.1-rc.2 |
0.1.0 |
已驗證穩定;此線路不支持 0.1.1 |
0.2.2-rc.1 |
0.1.1+ |
已驗證(0.1.1 真機測試在此環境完成) |
0.1.1 依賴客戶端 uiSession 等注入服務,README 說明在 0.2.1 客戶端上未驗證該服務;插件管理器會按 engines.dsh 做兼容檢查,在 0.2.1 上 0.1.1 可能被標爲不兼容,故舊線應顯式鎖定 0.1.0。
在 DSH 0.2.1-rc.2 上安裝已驗證舊版:
dsh plugin --profile web add dsh-approval-reason-dock@0.1.0
在 DSH 0.2.2-rc.1 及之後 0.2.x 上,用 CLI 安裝 npm 包(默認拉取當前主線):
dsh plugin --profile web add dsh-approval-reason-dock
也可在 DSH UI 的 Plugin Manager 中安裝 bundle,使用包名或 GitHub 規格:
dsh-approval-reason-dock
github:FzqxDedafeiyu/dsh-approval-reason-dock
從 GitHub 源用 CLI 安裝:
dsh plugin --profile web add github:FzqxDedafeiyu/dsh-approval-reason-dock
若自行維護 profile,可向 dsh.profile.bundles 增加 bundle,由補丁插入一行(見倉庫內 cordis.patch.yml 示例):
- insert:
- id: approval-reason-dock
name: dsh-approval-reason-dock
卸載:在 Plugin Manager 中卸載,或從 dsh.profile.bundles 移除 dsh-approval-reason-dock 後重啓 DSH。
典型用法¶
- 啓動或切換到使用 Web profile 的 DSH,確保已按上節裝好插件並重啓(若文檔要求)。
- 在智能體流程中觸發需要審批的工具調用,待右上角面板出現。
- 若拒絕需要說明:在文本框寫好原因(注意 500 字上限),點 Reject with reason;模型應在同輪或排隊送達後看到帶
(approval rejection reason)前綴的說明。 - 若無需說明:點 Reject,行爲與未裝插件時一致。
- 審批較多時可收折面板爲膠囊,切換會話時各自草稿仍保留。
適用場景與注意¶
適合經常在 Harness 裏做工具審批、又希望「拒絕」自帶可審計、可進入上下文的簡短說明的開發者或運維。分類落在 admin-security,與審批流、會話 steering 相關,而不是替換服務端鑑權策略。
安裝前建議自行查看 源碼倉庫 與 MIT 許可證;插件在瀏覽器半側運行,依賴 DSH 客戶端內部 API(shell.overlay、uiSession、remote.session.prompt 等),官方 README 標明這些並非穩定公開契約,Harness 大版本升級後可能需要跟隨更新插件。插件以當前 DSH 進程與用戶界面權限運作,是否安裝應結合你對第三方 bundle 的信任與內網策略。
README 還提到:缺少內部 API 時面板隱藏,審批仍走內置卡片(fail-soft)。
結尾¶
dsh-approval-reason-dock 解決的是審批拒絕與對話上下文脫節的問題:在答覆 rejected 之前把可選原因送進當前 turn,減少模型對拒絕原因的猜測。社區目錄頁:https://www.skillhub.cn/plugins/FzqxDedafeiyu/dsh-approval-reason-dock;問題與版本說明以 https://github.com/FzqxDedafeiyu/dsh-approval-reason-dock 爲準。