dsh-approval-reason-dock:爲 Harness 審批拒絕附帶可選原因

前言

在 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 說明。

面板與多會話

  1. 當前會話存在可答覆的審批時,在界面右上角(shell.overlay 槽位)出現面板。
  2. 面板跟隨主視圖中的會話:只展示該會話的審批,其他會話的待審項在切換過去之前不打擾;標題欄顯示會話名稱。
  3. 默認展開,可收折爲半透明「Pending review」膠囊,避免擋住對話;每次新的審批再次默認展開。
  4. 各審批各自保留原因草稿,多會話來回切換不會沖掉已在其他審批裏輸入的文字。

帶原因拒絕與純拒絕

在面板中輸入原因後點 Reject with reason:

  1. 向運行中的會話發送 steering 用戶消息,正文形如 (approval rejection reason) <text>,通過 remote.session.prompt,mode: "steer"。
  2. 若當前輪次已不能接受 steering,則改爲排隊(mode: "queue")。
  3. 隨後將審批答覆爲 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。

典型用法

  1. 啓動或切換到使用 Web profile 的 DSH,確保已按上節裝好插件並重啓(若文檔要求)。
  2. 在智能體流程中觸發需要審批的工具調用,待右上角面板出現。
  3. 若拒絕需要說明:在文本框寫好原因(注意 500 字上限),點 Reject with reason;模型應在同輪或排隊送達後看到帶 (approval rejection reason) 前綴的說明。
  4. 若無需說明:點 Reject,行爲與未裝插件時一致。
  5. 審批較多時可收折面板爲膠囊,切換會話時各自草稿仍保留。

適用場景與注意

適合經常在 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 爲準。

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

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

小夜