dsh-codex-approval:DeepSeek Harness 的 Codex 式審批插件

前言

在 DeepSeek Harness(dsh)中,智能體執行工具前通常會遇到審批問題:如果審批粒度太粗,低風險操作會反覆打擾人類;如果審批太寬鬆,又可能讓高風險命令直接執行。dsh-codex-approval 是一個仿照 OpenAI Codex CLI 審批模型的 dsh 插件,目標是在 dsh 的審批應答點上加入一條更細的決策鏈:先看顯式規則,再交給 AI 做風險判斷,最後由人類兜底。

下面介紹這個插件的定位、核心能力、安裝方式、配置項和使用注意事項。

這是什麼

dsh-codex-approval 是一個面向 DeepSeek Harness(dsh)的 AI 自動審批插件,由 040822 維護,許可證爲 MIT。

它的核心目標,是在 dsh 的 approval/request 應答者(answerer)seam 上實現自動審批決策鏈:

  1. 規則層:按顯式規則處理可預期的命令或原因。
  2. AI 審判層:對規則未命中的請求做風險評估。
  3. 人類兜底層:對仍無法自動決定的請求交還人類。

package.json 中版本爲 0.2.2,engines 要求 node >=22.19,依賴 @deepseek-ai/schemastery ^3.18.1。

核心功能

規則層

插件支持規則層自動審批,匹配對象可以是:

  • ToolName(args preview):例如 Bash(git status*)。
  • reason:<文本>:例如 reason:*credential*。

每條規則可以指定動作:

  • allow:自動放行。
  • ask:交人類處理。
  • deny:直接拒絕。

規則優先級爲:

deny > ask > allow

也就是說,只要存在顯式 deny 規則,AI 層不能覆蓋該拒絕結果。

AI 審判層

當規則未命中時,插件可以調用 AI 對審批請求做判斷。AI 層會輸出:

  • risk:low、medium、high。
  • authorization:allow、ask、deny。

最終結果會按 riskTolerance 映射爲 allow、ask 或 deny。AI 輸出只映射爲這三種結果之一,不會直接執行任意指令。

默認情況下,AI 使用:

  • provider:opencode-go
  • model:deepseek-v4-flash

進入 AI prompt 前,命令文本會被截斷,默認 maxPromptChars 爲 2000。

人類兜底層

默認人類兜底行爲是 ask,也就是彈出 GUI 詢問。

如果 AI 調用失敗、超時或輸出無法識別,插件可以按 failOpen 配置交還人類。默認 failOpen 爲 ask。

審批模式

插件提供三種審批模式:

  • manual:完全旁路自動決策,審批交回人類。
  • ai:按規則、AI、人類兜底的順序處理。
  • ai-auto:規則與 AI 自動處理,ask 不彈窗,按 mode3OnAsk 處理。

在 ai-auto 模式下,mode3OnAsk 默認爲 deny,即 AI 無法自動放行時不會彈窗,而是拒絕。如果把 mode3OnAsk 設爲 allow,AI 無法決定時也會放行高風險操作,需要慎用。

審計日誌

每次決策都會寫入 JSONL 審計日誌,默認路徑爲:

~/.dsh/logs/approval.jsonl

日誌中會記錄工具名、命令預覽、reason、判定來源、模式、風險、AI 理由、耗時等信息。

內置 npm publish 規則

插件內置規則:

Bash(npm publish*) → ask

這意味着 agent 執行 npm publish 時,默認需要詢問人類,AI 無權自動放行。

命令文案語言

插件命令文案語言支持:

  • auto
  • zh
  • en

auto 會跟隨 dsh 設置的語言偏好。

安裝與啓用

先確認 Node 環境滿足 node >=22.19。然後執行:

dsh plugin --profile web add dsh-codex-approval

安裝後重啓 dsh web 生效。

插件只在目標 profile 註冊,推薦使用 web profile。qqbot / headless 等 profile 不受影響。

配置示例

插件配置可以放在:

~/.dsh/profiles/web/cordis.patch.yml

在文件中添加 id: dsh-codex-approval 的 config,例如:

- id: dsh-codex-approval
  config:
    mode: ai
    mode3OnAsk: deny
    locale: auto

    rules:
      - match: 'Bash(git status*)'
        action: allow
      - match: 'Bash(rm -rf /*)'
        action: deny
      - match: 'reason:*credential*'
        action: ask

    ai:
      provider: opencode-go
      model: deepseek-v4-flash
      riskTolerance: medium
      maxPromptChars: 2000
      timeoutMs: 15000
      maxTokens: 512
      failOpen: ask

    fallback: ask
    logFile: ~/.dsh/logs/approval.jsonl

可配置項包括:

  • mode:審批模式。
  • mode3OnAsk:ai-auto 模式下 ask 的處理方式。
  • locale:命令文案語言。
  • rules:顯式規則。
  • ai:AI provider、model、riskTolerance、maxPromptChars、timeoutMs、maxTokens、failOpen。
  • fallback:無規則命中且 AI 關閉時的兜底動作。
  • logFile:審計日誌路徑。

典型用法

運行時切換審批模式

可以使用斜槓命令切換當前會話的審批模式:

/approval-mode

查看當前模式。

/approval-mode 3

切換爲 ai-auto。

/approval-mode default

清除會話覆蓋,回落到配置默認值。

會話覆蓋會保存到:

~/.dsh/settings.yaml

保存位置是 dsh-codex-approval 命名空間。如果 settings 服務不可用,會降級爲純內存保存,重啓後會丟失。

配置規則

示例規則:

rules:
  - match: 'Bash(git status*)'
    action: allow
  - match: 'Bash(rm -rf /*)'
    action: deny
  - match: 'reason:*credential*'
    action: ask

含義如下:

  1. Bash(git status*):只讀狀態檢查,自動放行。
  2. Bash(rm -rf /*):高風險刪除命令,直接拒絕。
  3. reason:*credential*:涉及憑據、密鑰等敏感原因,交人類詢問。

不配置時的默認行爲

如果不做配置,插件會使用內置默認:

  1. 只讀命令自動放行。
  2. 破壞性命令直接拒絕。
  3. 敏感詞場景詢問人類。

開發與測試

開發或測試插件時,可以運行:

node --test

適用場景與注意

這個插件適合以下場景:

  1. 使用 dsh web profile,希望減少低風險審批打擾。
  2. 希望按命令或審批原因配置顯式 allow/ask/deny 規則。
  3. 希望讓 AI 參與風險評估,但保留人類兜底。
  4. 需要 JSONL 審計日誌來追溯每次審批決策。

使用注意:

  1. 插件參與 dsh 的審批決策,安裝前應先檢查源碼、許可證和依賴。
  2. 插件以當前 dsh 進程權限運行,不應在不可信環境中隨意啓用。
  3. deny 規則永遠最先求值,AI 無權覆蓋顯式拒絕。
  4. ai-auto 模式如果將 mode3OnAsk 設爲 allow,AI 無法決定時也會放行高風險操作,慎用。
  5. danger-full-access 模式下,沙箱不拒絕任何操作,審批請求不會發生,插件自然空閒。
  6. 單次 AI 審批成本約 0.3~0.7 分錢(官方價估算),僅在規則未命中、需要調用 AI 時產生。

相關鏈接

  • GitHub:https://github.com/040822/dsh-codex-approval
  • 插件目錄頁:https://www.skillhub.cn/plugins/040822/dsh-codex-approval
羽毛球分组比赛记分
小程序二维码

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

小夜