前言¶
DeepSeek Harness(DSH)在 Agent 請求越權執行時會彈出權限審批,原生界面只有「允許一次」和「拒絕」。模型收到的是工具被拒絕的結果,並不知道你是擔心路徑不對、命令太危險,還是這次只是在測流程。若希望模型據此改方案、先解釋計劃再申請權限,或明確說明「這次拒絕是故意的」,就需要把原因寫進模型能讀到的 channel,而不是另起一條用戶消息。dsh-why-reject-me 是社區維護的 Host 插件,在審批面板上增加可選的「拒絕原因」輸入框,並在你點拒絕且原因非空時,把原因追加到該次工具的 tool result 裏,模型在同一輪對話中即可讀到。
這是什麼¶
dsh-why-reject-me 由 Jorgen233 維護,在 SkillHub 等目錄中歸類爲 admin-security。它以 npm 包名 dsh-why-reject-me 發佈(當前資料中的版本爲 v0.3.3),源碼倉庫爲 Jorgen233/dsh-why-reject-me。插件不修改 DSH 自帶包,只在 Desktop 內嵌的審批界面運行;dsh-TUI 不使用該面板。留空原因再拒絕時,行爲與原生 DSH 完全一致。
核心功能¶
下面介紹插件在審批鏈路上的具體能力,均可在 README 與安裝後手測中核對。
拒絕原因進入 tool result¶
在「拒絕原因(可選)」中填寫內容並點「拒絕」(或 Ctrl/⌘ + Enter)後,模型看到的 tool result 末尾會多出一段前綴加原因。中文界面前綴爲 【審批請求已拒絕】原因:,英文爲 [Approval request rejected] Reason:。例如:
【審批請求已拒絕】原因:先不要動系統目錄,把 diff 發給我看。
原因只在拒絕時發送;點「允許一次」不會發送輸入框裏的內容。不輸入原因直接拒絕,不會附加任何額外文本。
不新增用戶消息¶
原因通過 Host 的 tools/post-execute 監聽器追加到被拒絕工具的 result content,屬於普通工具結果,不是 user/message,也不會單獨再起一輪對話。
草稿與失敗重試¶
未發送的草稿按「Session + Tool call」在頁面內存中保留約 30 分鐘,切換會話再回來一般不會丟字;刷新 Desktop 頁面會丟失草稿。若原因提交失敗,審批不會自動結束,面板會顯示錯誤並允許重試。
快捷鍵¶
| 按鍵 | 行爲 |
|---|---|
Enter(焦點不在輸入框或按鈕上) |
允許一次 |
Ctrl/⌘ + Enter |
拒絕並附上原因 |
Esc(焦點在輸入框且有內容) |
讓輸入框失焦 |
Esc(輸入框爲空) |
直接拒絕 |
輸入法組合輸入期間按 Enter 不會觸發審批動作。
安裝與啓用¶
插件以 Host 身份在 DSH 進程內運行,安裝會修改當前 profile,影響該 profile 下的所有會話。安裝前建議查看倉庫源碼與 MIT 許可證,只從 npm 上的 dsh-why-reject-me、本倉庫或你信任的副本安裝。
前置條件包括:DSH Desktop(資料中在 0.2.1-rc.5 上完成真實審批驗證;0.2.1-rc.2 與 0.2.1-rc.5 均做過驗證)。從 npm 安裝不需要 Git;從 GitHub 安裝需要本機有 Git 且能訪問 GitHub。Host 半在啓動時加載,安裝或更新後需按提示重啓 DSH Desktop,僅刷新頁面可能不夠。
方式一:從 npm 安裝(推薦)¶
在 DSH Desktop 中:
- 打開左側 Plugins(插件) 頁面。
- 點 Add plugin(添加插件) → Install a third-party plugin(安裝第三方插件)。
- 輸入包名並安裝:
dsh-why-reject-me
- 若出現 Enable now(立即啓用) 則啓用;在 Installed plugins 中確認開關已打開。
- 重啓 DSH Desktop。
在啓用了 plugin_manager 的會話(默認 Creator 模式)中,也可讓 Agent 執行:
請在我的 DSH profile 中安裝這個插件:
plugin_manager action=install_bundle target=dsh-why-reject-me
安裝完成後確認 bundle 已啓用,並告訴我是否需要重啓 DSH Desktop。
方式二:從 GitHub 安裝¶
在 Plugins → Add plugin 中填寫:
git+https://github.com/Jorgen233/dsh-why-reject-me.git
Agent 等價寫法:
plugin_manager action=install_bundle target=git+https://github.com/Jorgen233/dsh-why-reject-me.git
安裝、啓用與重啓步驟同方式一。
確認安裝¶
- Plugins 列表中可見
dsh-why-reject-me且爲開啓狀態; - 將會話權限切到會觸發審批的模式(例如
danger-full-access下運行需審批的操作),審批面板應出現「拒絕原因(可選)」; - 輸入原因並拒絕後,展開對應工具結果卡片,應能看到原因文本。
更新 npm 版時可先移除再安裝:
plugin_manager action=remove_bundle target=dsh-why-reject-me
plugin_manager action=install_bundle target=dsh-why-reject-me
更新 Host 半後同樣需要重啓 DSH Desktop。
典型用法¶
經過上面的安裝與重啓,可按下面步驟在真實審批裏使用。
- Agent 請求越權執行,審批面板出現。
- 在「拒絕原因(可選)」中填寫說明,也可留空。
- 點「拒絕」,或按
Ctrl/⌘ + Enter。 - 原因先 POST 到 Host 的
/api/dsh-why-reject-me/reason並暫存,隨後審批以rejected結束;Host 在生成 tool result 時把原因追加到 content 末尾。 - 模型在同一 tool result 中讀到原因並繼續推理。
常見動機包括:不想放行某操作但希望模型換做法;測試權限流程時需要說明「故意拒絕」;要求模型先解釋計劃或給出 diff 再決定是否放行。
適用場景與注意¶
適合誰: 經常在 Desktop 里人工審批 Agent 工具調用、且希望拒絕附帶可執行反饋的 DSH 用戶。
工作原理概要: 客戶端在 conversation.composer 鏈上接管審批面板(priority: 0),僅在待處理交互爲審批且非子代理會話時生效;Host 在內存中按 Session + Tool call 暫存原因,5 分鐘內未匹配到拒絕結果則丟棄;原因上限 2000 字。
務必知曉的限制:
- 原因會作爲
tool/result的一部分進入會話記錄,並隨上下文發送給模型提供商;展開被拒絕工具的結果卡片時也能看到這段文本。 - 子代理會話不適用:子代理上下文中插件不會接管審批,沒有原因輸入框,拒絕文案仍爲運行時原文。
- 只處理權限審批,不處理
ask_user_question或其他確認框。 - 原因附加後模型會讀到,但不保證一定照做。
- 若同時安裝多個搶佔
conversation.composer的審批類插件,可能只有其中一個生效。
卸載時在 Plugins 頁面關閉或卸載 dsh-why-reject-me 並重啓 Desktop;已寫入會話記錄的原因不會被刪除。也可用:
plugin_manager action=set_bundle target=dsh-why-reject-me enabled=false
或 plugin_manager action=remove_bundle target=dsh-why-reject-me。
結尾¶
dsh-why-reject-me 在不大改 DSH 審批模型的前提下,把「爲什麼拒絕」寫進 tool result,方便模型在同一輪裏調整行爲;留空拒絕則保持原生體驗。DSH 生態強調「一切皆插件」,社區目錄(如 SkillHub)爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;本插件爲第三方社區組件,非 DSH 官方內置。