dsh-rtk-optimizer:bash 改写建议与工具输出压缩

前言

在 DSH 里跑智能体时,bash、grep、read 的返回往往占掉大量上下文:冗长的测试日志、带 ANSI 的终端输出、重复的 git status 行,都会挤占模型可用的 token。另一方面,若本机安装了 rtk 命令行(rtk rewrite),模型仍可能直接写出未经改写的 shell 命令,浪费一轮调用或得到次优写法。

dsh-rtk-optimizer 是社区维护的 DSH 工作流类插件(维护者 sleepinginsummer),逻辑移植自 Pi Coding Agent 生态的 pi-rtk-optimizer。它不向模型注册新工具,而是挂在 Host 的两个工具事件上,对全部会话的 bash / grep / read 调用全局生效:一侧在执行前给出 RTK 改写建议(或在配置下以 deny+反馈方式逼近自动改写),一侧在执行成功后按管线压缩文本输出。下面介绍其定位、能力与安装用法。

这是什么

一句话:dsh-rtk-optimizer 是 DSH 的 Host 拦截器插件,提供 RTK 命令改写建议 与 工具输出压缩,并通过 /rtk 查看配置与统计。

插件本身不注册模型工具;改写与压缩都通过 tools/pre-execute 与 tools/post-execute 挂钩实现。

核心功能

RTK 命令改写(pre-execute)

模型调用 bash 时,若本机存在可用的 rtk 二进制,插件会调用 rtk rewrite <command> 参与决策。

  1. mode: suggest(默认)
    不中断本次 bash 调用;在工具结果末尾附注 [rtk-optimizer] rtk suggests: ...,供模型在后续轮次自行采纳。

  2. mode: rewrite(默认关闭,需通过 /rtk 切换)
    对需要改写的情况 deny 一次 该调用,并在错误反馈里给出改写后的命令;模型重试时使用新命令。README 说明:rtk 改写具有幂等性,不会形成循环;同一命令在 30 秒内只 deny 一次。

DSH 工具参数在分发管道中不可变(tools/execute 只能改 exec.signal),因此「自动改写」在架构上以 deny + 反馈实现,这是当前设计下最接近自动改写的语义。

未安装 rtk 时:原命令原样执行(guardWhenRtkMissing: true);探测结果缓存 60 秒,不重复 probe。实现上适配 rtk 0.43:成功改写可能返回退出码 3(非文档所述 0),插件同时接受 0 与 3;不支持的命令退出码 1 且无输出时,命令原样放行。

输出压缩(post-execute)

对 成功返回 的 bash / grep / read 文本输出,按配置走压缩管线(各阶段可单独开关):

阶段 说明
ANSI 剥离 移除 CSI/OSC 颜色控制序列
Git 压缩 git status --short 行汇总为一行统计;40 位 commit hash 缩短为 7 位
测试聚合 保留 Tests: N passed, M failed 总结与失败行,折叠其余(jest/mocha/vitest/go test/pytest 等命令触发)
构建过滤 只保留 error/warning 行与汇总统计(build/tsc/make/npm 等触发)
搜索分组 path:line:content 行按文件分组(grep 工具输出)
智能截断 超过 maxOutputChars(默认 30000)时保留头尾,中间打截断标记

插件会统计每次调用节省的字符数,可通过 /rtk stats 查看。

/rtk 命令

安装并重启 DSH 后,在会话中可使用:

/rtk [show|verify|stats|clear-stats|reset|set|help]
子命令 说明
show 当前配置、rtk 二进制状态、统计
verify 检查 rtk 二进制是否可用(探测缓存 60s)
stats / clear-stats 查看或重置压缩节省量统计
set <key> <value> 运行时切换:mode(suggest | rewrite)、enabled、guardWhenRtkMissing、readCompaction
reset 恢复默认配置

安装与启用

官方 README 给出的安装方式为(需替换 <name> 为你的 profile 名):

dsh plugin --profile <name> add dsh-rtk-optimizer

安装后 重启 DSH。压缩与改写会对全部会话的 bash / grep / read 调用生效;用 /rtk show 确认配置与 rtk 探测状态。

DeepSeek Harness 社区插件目录在 SkillHub 等站点展示,与 DeepSeek / 幻方无官方从属关系;安装前建议阅读仓库源码与 MIT 许可证,并知悉插件以当前 dsh 进程权限运行,会拦截并改写工具链路上的数据。

典型用法

查看当前状态与 rtk 是否可用:

/rtk show
/rtk verify

在 suggest 与 rewrite 之间切换(rewrite 会 deny 一次并反馈新命令):

/rtk set mode suggest
/rtk set mode rewrite

查看输出压缩累计节省的字符量:

/rtk stats

运行时关闭或恢复默认:

/rtk set enabled false
/rtk reset

若本机未装 rtk,改写相关逻辑会按 guardWhenRtkMissing 放行原命令;输出压缩仍可在 post-execute 管线中独立工作(取决于 enabled 与各阶段开关)。

适用场景与注意

适合:

  • 长期在 DSH 里用智能体跑测试、构建、仓库检索,希望减少 bash/grep/read 回灌上下文体积;
  • 已安装或计划安装 rtk CLI,希望模型在 bash 调用前看到改写建议,或在 rewrite 模式下通过 deny+反馈逼近自动改写。

注意:

  • 插件不新增模型可见工具,行为完全依赖 Host 事件;与「给模型加一个 rewrite 工具」的集成方式不同。
  • rewrite 模式会故意 deny 一次调用,模型需根据反馈重试;同一命令 30 秒内不会重复 deny。
  • 压缩针对成功返回的文本;失败或空输出不走同一套「省钱」逻辑。
  • 仓库 README 注明开发侧可用 npm test 跑 20 个用例(ANSI、git 压缩、搜索分组、测试聚合、构建过滤、截断等),便于自行验证管线行为。

结尾

dsh-rtk-optimizer 把「RTK 改写建议」和「工具输出压缩」收进一个全局 Host 插件:不改模型工具列表,却在每次 bash / grep / read 的前后帮你省上下文、对齐 rtk rewrite 习惯。需要进一步了解说明与 issue,可看 GitHub 仓库 与 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

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

小夜