前言¶
DSH 的智能體工作流裏,審批卡片負責控制高風險操作。默認權限保持 workspace-write + ask 時,Agent 每遇到一次高權限請求都會彈出審批。對於同一個任務內多次同類請求,重複確認會增加操作成本;但直接放開全局高權限,又容易超出當前任務需要的範圍。
dsh-turn-approval 針對 DSH Web 的審批卡片增加一個任務級授權入口:點擊「允許本次任務」後,當前 turn 內後續明確匹配的 danger-full-access 升級可以自動放行;turn/end 後授權消失。
這是什麼¶
dsh-turn-approval 是 DeepSeek Harness(DSH)社區插件,倉庫爲 arrow949/dsh-turn-approval,License 爲 MIT。
它爲 DSH Web 審批卡片增加「允許本次任務」按鈕,用於在單個 turn 內臨時放行特定類型的高權限升級。它不改變 DSH 默認權限模型,也不把整個 session 切換爲 full access。
核心功能¶
默認情況下,DSH 權限保持 workspace-write + ask。當 Agent 請求 danger-full-access 時,審批卡片會提供三個選擇:
[拒絕] [允許一次] [允許本次任務]
- 拒絕:拒絕當前操作。
- 允許一次:只放行當前操作。
- 允許本次任務:當前
turn內,後續明確匹配的danger-full-access請求自動放行;turn/end後授權自動失效。
該插件的關鍵約束如下:
- 授權僅保存在內存,不寫入磁盤。
- 授權綁定
session + turn,一個session的授權不影響另一個session。 - 子代理使用獨立
session,不繼承該授權。 - 只自動放行明確匹配的
danger-full-access升級;workspace-write和其他審批仍逐一詢問。 grant只能由審批卡片按鈕建立,模型沒有自行開啓任務授權的入口。- 自動放行仍保留完整的審批事件記錄。
- 僅支持 DSH Web;
headless profile沒有 UI 入口,任務授權端點不會註冊。
安裝與啓用¶
從 GitHub 安裝時,命令使用 <commit-sha> 佔位符;已覈實資料未提供具體 SHA,替換前請自行確認要固定的提交:
dsh plugin --profile web add github:arrow949/dsh-turn-approval#<commit-sha>
該包是已提交構建產物的純 ESM JavaScript。從 GitHub 安裝時不需要 prepare 腳本或 pnpm allowBuilds 權限。
安裝後執行以下步驟:
1、重啓 DSH Web。
2、在瀏覽器中硬刷新:
Ctrl+Shift+R
3、檢查審批卡片是否出現第三個按鈕「允許本次任務」。出現後表示插件已加載。
也可以查看當前 profile 是否掛載插件層:
dsh --profile web --dump-config
典型用法¶
1、正常使用 DSH,權限仍保持 workspace-write + ask。
2、當 Agent 請求 danger-full-access 時,先閱讀審批原因與命令。
3、如果當前任務內還需要多次同類高權限操作,點擊「允許本次任務」。
4、當前任務內後續同類 danger-full-access 請求會按規則自動放行。
5、當前任務結束後,下一條消息會重新逐項詢問。
如果端點返回非 2xx 或網絡請求失敗,卡片會明確提示失敗並保持可重試;它不會假裝授權已建立,也不會靜默降級爲「允許一次」。
安全邊界¶
授權失效是 fail-closed 的。以下情況會使任務授權失效:
- DSH 進程重啓。
- 插件卸載。
session或 agent 被釋放。
它不會把整個 session 切換爲 full access。一個 session 的授權不影響另一個 session;子代理使用獨立 session,不繼承授權。
從觸發入口看,grant 只能由審批卡片按鈕建立。即使當前任務內已授權,插件也只會自動放行明確匹配的 danger-full-access 升級;workspace-write 和其他審批仍逐一詢問。
自動放行仍保留完整的審批事件記錄,後續排查時仍能看到相關審批事件。
實現與兼容性¶
該插件作爲 DSH bundle 的一部分接入:package.json 聲明 dsh.bundle.patch,cordis.patch.yml 將插件加入 profile。client half 通過官方 conversation.composer chain 槽位以更高優先級渲染審批卡片。
它不修改任何 DSH 官方 bundle 文件。卸載後 Node half 與 client half 會一併移除,審批卡片回到 DSH 官方默認的兩個按鈕。
當前外觀複用官方 ApprovalPanel 的內部 CSS 類名。若未來 DSH 改動該組件結構或 CSS module 類名,可能需要發佈兼容更新。
卸載¶
卸載命令:
dsh plugin --profile web remove dsh-turn-approval
卸載後不會遺留對 DSH 官方文件的修改。
結尾¶
dsh-turn-approval 的價值在於把「允許一次」和「全局放開」之間拆出一個更小的粒度:當前 turn。它適合需要在 DSH Web 中減少重複審批、但不想擴大權限範圍的場景。
GitHub 倉庫:
https://github.com/arrow949/dsh-turn-approval