前言¶
在 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