前言¶
在 DeepSeek Harness(DSH)里跑 shell 时,输出往往冗长,占上下文 token。RTK 可以把常见命令的输出压成更紧凑的形式,但要在 DSH 里接上 RTK,常见做法是继承 harness 内部的 PwshLocalExecutor / SandboxPwshExecutor,或把 peer 依赖钉在某个 rc 版本上——DSH 一迭代,这类插件就容易挂。
下面介绍社区插件 dsh-rtk(维护者 Piracola,分类:工作流):不碰 DSH 内部模块,只在 shell 服务的 resolve() 边界把简单命令改写成 rtk <cmd>,其余语义(工作目录、超时、环境变量、沙箱、结果格式)仍由原执行器负责。
这是什么¶
dsh-rtk 是给 DeepSeek Harness 的薄 RTK 集成。npm 包名为 dsh-rtk-thin(当前资料中版本 0.2.0),许可证 MIT,要求 Node.js ≥ 20。
插件只注入 shell 服务并包装它的 resolve()。换执行器、换平台理论上都不用改插件代码;最坏情况是改写静默不生效,命令仍按原样执行。
与现有 RTK 插件的差异¶
作者说明的动机很直接:现成的 dsh RTK 插件多 extends harness 内部执行器类,或锁定特定 rc 依赖。dsh-rtk 不 import 任何 DSH 内部模块,依赖的是三个外部契约:
ctx.shell暴露resolve(request) -> spec,且spec.command是字符串。rtk rewrite <cmd>:改写成功时 stdout 输出改写后的命令;无可改写则 stdout 为空。插件只认「stdout 非空且与原命令不同」,不依赖退出码(README 注明文档写退出码 0,实测曾见 3)。- 平台黑名单:Windows 上
rtk ls/tree/pwd/wc/grep会去代理不存在的 Unix 同名程序而失败,因此默认不把命令改写进这些子命令;判定作用于改写后的子命令。Linux/macOS 可将denySubcommands设为[]放开。
安装与启用¶
从 GitHub 安装(推荐,升级一条 update 即可):
dsh plugin --profile web add github:Piracola/dsh-rtk
dsh plugin --profile web update dsh-rtk-thin # 以后更新
本地开发(改完立即生效,不用重装):
dsh plugin --profile web add "link:<本仓库绝对路径>"
装完即生效:本机 web profile 若为 patchReload: live,dsh plugin add 会把 dsh-rtk-thin 追加进 dsh.profile.bundles,README 实测无需重启 dsh——跑一条 git status,输出变成 rtk 的紧凑格式即表示生效;未生效再重启。
若 pnpm 供应链策略拦截安装(ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,常见于 lockfile 里其它包发布不满 24 小时),可临时放宽:
dsh plugin --profile web add --config.minimumReleaseAge=0 github:Piracola/dsh-rtk
配置¶
通过 Cordis patch 插入 bundle 配置,示例(路径与黑名单按需改):
- insert:
- id: rtk-thin
name: dsh-rtk-thin
config:
rtkExe: C:\Users\you\.cargo\bin\rtk.exe # 默认:RTK_EXE 环境变量 → PATH
denySubcommands: [ls, tree, pwd, wc, grep] # 默认值,仅 win32 生效
rtkExe 未写时走 RTK_EXE 环境变量,再 fallback 到 PATH 中的 rtk。
典型改写行为¶
README 在 rtk 0.49.0 / 0.50.0、Windows 上做了实测,可作预期参考:
| 输入 | 结果 |
|---|---|
git status / cargo test / npm run build |
rtk git status / rtk cargo test / rtk npm run build |
cat package.json |
rtk read package.json |
find . -name *.md |
rtk find . -name *.md |
ls -la / pwd / wc -l x / grep -rn foo . / tree . |
原样不动 |
git status \| grep x / a && b |
原样不动(含 shell 元字符,避免改变管道语义) |
echo hello |
原样不动(rtk 无等价形式) |
不启动 dsh 也可自测改写逻辑(把路径换成本机仓库绝对路径):
node -e "import('file:///<仓库路径>/index.js').then(m=>console.log(m.rewriteWithRtk('git status')))"
适用场景与注意¶
适合谁:已在用 DSH 的 web profile(或其它启用了该插件 bundle 的 profile),本机已安装 RTK,希望 agent 执行的简单 shell 命令自动走 rtk rewrite,又不想维护与 harness 内部执行器耦合的插件。
注意:
- 插件随当前 dsh 进程权限运行;安装前请自行查看 GitHub 源码 与 MIT 许可证,确认符合你的安全策略。
- 含管道、
&&等 shell 元字符的命令 deliberately 不改写,避免语义变化。 - Windows 与 Linux/macOS 在
denySubcommands默认值上行为不同,跨平台开发时要对照配置。 - DSH 社区插件目录(如 SkillHub)是独立生态站点,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与
package.json为准。
链接¶
- 目录页:https://www.skillhub.cn/plugins/Piracola/dsh-rtk
- 源码与说明:https://github.com/Piracola/dsh-rtk
经过上面的步骤,dsh-rtk 在不动 harness 内部实现的前提下,把 RTK 接到 shell 解析边界:能改写的简单命令自动前缀 rtk,不能改写或不应改写的保持原样,适合作为工作流里省 token 的轻量连接器。