dsh-exit-code-lens:讓智能體區分「答案型」非零退出碼

前言

在 DeepSeek Harness(DSH)裏,智能體通過 bash 工具執行命令。DSH 會在每條非零結果末尾附加 [exit code: N],系統提示又要求模型「每個 bash 結果都檢查 exit code,出錯先排查」。不少 Unix 命令用退出碼 1 表示正常語義上的「答案」,而不是 shell 失敗:grep 沒匹配、diff 有差異、test 條件爲假都會返回 1。模型容易把這類結果當成故障,反覆重跑搜索、列目錄、覈對文件,浪費輪次和 token。社區討論裏有人報告同類任務因 exit 1 循環導致請求量接近翻倍。dsh-exit-code-lens 是 YanYunCY 維護的工作流類 DSH 插件,在匹配到的 bash 結果裏補一行說明,並可選地增強系統提示,幫助模型繼續推進而不是誤查。

這是什麼

dsh-exit-code-lens 是 DeepSeek Harness 插件:當非零退出碼錶示「答案」(例如 grep 無匹配、diff 有差異、test 爲假)而非失敗時,在結果中標註說明,減少智能體對已正確執行的命令做重複覈查。

維護者:YanYunCY。分類:工作流。許可證:MIT(見倉庫 README)。當前 package.json 版本爲 0.1.0。GitHub 星標:0(以目錄頁信息爲準)。

問題從哪來

DSH 的 bash 工具對每條非零結果追加 [exit code: N],系統提示要求檢查該標記並在失敗時再排查。例如 grep -rn TODO src 無匹配時退出碼爲 1,模型仍可能當作錯誤去調查。README 引用了 deepseek-harness 討論 #1884(第三方評測中 exit-1 循環約使請求從 32 增至 61)與 #8403(單次會話 56 條工具結果中有 7 條 exit 1,均來自命令寫法而非真實錯誤)。

核心功能

每次 bash 調用結束後,插件根據命令與退出碼判斷是否爲已知的「答案型」狀態。若匹配,在 [exit code: N] 標記上一行插入 [exit-code note: …] 說明;[exit code: N] 仍保留爲最後一行,終端卡片上的退出碼展示不變。同時在系統提示中增加一句靜態說明,讓模型信任該 note(可通過配置關閉)。

內置規則目前針對 exit 1,包括但不限於:

命令 exit 1 的含義
grep、egrep、fgrep、zgrep、rg、ag、ack、git grep 無匹配
diff、cmp、git diff --exit-code / --quiet 輸入不一致
test、[、[[ 條件爲假
which、type、command -v、hash 未安裝
pgrep、pidof 無對應進程
git merge-base --is-ancestor 不是祖先
jq -e 最後輸出爲 false/null

典型輸出形態(README 示例):

(no output)
[exit-code note: grep exits 1 when no line matched. Nothing failed; the answer is "no matches".]
[exit code: 1]

何時不插入說明

插件刻意保守,下列情況不會加 note:

  • stderr 有輸出(例如 grep pattern missing-file 退出 2 並打印錯誤,屬於真實失敗);
  • 退出碼與規則不符(如 grep 的 2、diff 的 2);
  • 決定退出碼的不是「最後一條」簡單命令(管道、grep x f | wc -l、grep x f || echo none、後臺 cmd & 等);
  • 命令含控制流、子 shell、heredoc(if、for、( … )、<<EOF 等);
  • 調用被 kill、超時或未成功運行。

前導的 VAR=x、env、sudo、timeout N、nice -n N 以及 2>/dev/null 等重定向會被穿透識別。對管道或 cd x && grep …,note 會附帶說明:「Assuming the status came from the last command.」

安裝與啓用

需要先具備 DSH 與對應 profile。安裝命令以 README 爲準:

dsh plugin --profile <profile> add github:YanYunCY/dsh-exit-code-lens

要求 Node ≥ 24.9(package.json:>=24.9.0)。README 寫明在 dsh 0.2.1-rc.5 上測試過。無需構建步驟,無運行時依賴,插件本身不發起網絡訪問。

DSH 生態採用「一切皆插件」思路;社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。插件隨當前 dsh 進程權限運行,安裝前建議自行查看倉庫源碼與 MIT 許可證。

可選配置

可在 $DSH_HOME/profiles/<profile>/cordis.patch.yml 中覆蓋插件行爲(README 示例):

- id: exit-code-lens
  config:
    tools: [bash]          # 要註解的工具名
    prompt: true           # 是否在系統提示中加入一行說明
    rules:                 # 自定義規則,優先於內置規則
      - command: mytool
        subcommand: check
        codes: [3]
        note: "{cmd} exits {code} when the check is still pending. Nothing failed."

成本方面:每條匹配結果多一行輸出;系統提示多一句約 70 token 的靜態句,prompt: true 時不破壞請求間 KV cache。設 prompt: false 可去掉提示句。

典型用法與邊界

典型用法是:在已安裝插件的 profile 下照常讓智能體使用 bash;當智能體執行 grep、diff、test 等上述命令並得到語義上的 exit 1 時,會自動看到 [exit-code note: …],從而不必把「無匹配」當成故障再查一遍。

插件不會隱藏退出碼或把卡片變綠,模型仍看到真實狀態。README 明確:尚未覆蓋 PowerShell 與 Windows cmd。

結尾

dsh-exit-code-lens 針對 DSH 裏「非零 exit code 被一律當失敗」的工作流摩擦,用一行結果註解和可選系統提示,把常見命令的「答案型」退出碼說清楚,適合經常讓智能體在倉庫裏 grep、diff、做條件測試的 DSH 用戶。

  • 社區目錄頁:https://www.skillhub.cn/plugins/YanYunCY/dsh-exit-code-lens
  • 源碼與完整說明:https://github.com/YanYunCY/dsh-exit-code-lens
羽毛球分组比赛记分
小程序二维码

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

小夜