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