dsh-router 的 RTK(Rust Token Killer)扩展插件:把每次 bash 工具调用经 `rtk rewrite` 改写,让 agent 读到压缩后的命令输出;rtk 缺失或无等价改写时原样执行。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-router-ext-rtk
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:CARVIN94/dsh-router-ext-rtk
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
为 dsh-router 提供 RTK(Rust Token Killer)
真实代理:把 agent 每次 bash 工具调用改写成 rtk <cmd>(如 git status →
rtk git status),削减发给 LLM 的 60–90% bash 输出。
单独装它没用——核心提供面板与开关存储,本插件提供改写与拦截。
快速安装
需要 DSH 0.2.0 及以上(核心已单面 0.2.0,0.1.x 宿主不再支持)。
先装核心,再装本插件,然后重启 dsh web:
dsh plugin --profile web add dsh-router-core
dsh plugin --profile web add dsh-router-ext-rtk
dsh plugin add 会在 profile 里 pnpm add,并自动把声明了 dsh.bundle.patch
的包加入 dsh.profile.bundles(本插件即声明了,见 cordis.patch.yml)。
然后在「设置 → 路由 → 扩展」页打开 RTK 开关。
前置:本机装 RTK
RTK 是 rtk-ai/rtk(Rust Token Killer),
不是 Rust Type Kit(reachingforthejack/rtk)。
brew install rtk
# 或
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
验证:
rtk --version # 应返回 0.x
rtk gain # 应显示 token 节省统计(不是 command not found)
未装 rtk 时开关开不了:插件启动自检会报 ready:false,核心拒绝开启(API 409),
面板内容区红字提示原因。装上后重启 dsh web 即可。
能力
| 能力 | 说明 |
|---|---|
| 真实代理 | 每条 bash 命令经 rtk rewrite 改写后执行,LLM 读的是压缩后的输出。 |
| 降级安全 | rtk 缺失 / 无等价改写 / spawn 失败 → 命令原样执行,绝不报错。 |
| 只拦 bash | 其他工具(含 run_code 体内自起的子进程)不动。 |
| 开关自检 | 启动时探测 rtk;不可用时核心拒绝开启并给出问题描述。 |
| 开关持久化 | 状态存核心的 <profile>/data/ext.json,默认关(插件经 router.extStore 读写,不自己存)。 |
实测:
ls走代理后输出变成 rtk 树形格式(带文件大小与... (N filtered)),rtk gain报 3 条命令省 280 tokens(61.9%)。
配置
| 环境变量 | 作用 |
|---|---|
DSH_RTK_BIN |
显式指定 rtk 可执行文件路径。缺省走 PATH,再兜底常见安装路径(~/.local/bin/rtk、/opt/homebrew/bin/rtk、/usr/local/bin/rtk、~/.cargo/bin/rtk)。 |
与核心的分工
核心 = 管理面,本插件 = 执行面(2026-09 重构:拦截与裁决从核心归还插件, 核心只在一个消费者时代挂是纯亏损)。
核心负责:持有 router.ext 注册表(发现)、渲染面板与 /router/api/ext(展示)、
把开关与插件数据落盘 <dataDir>/ext.json(router.extStore service)、按
getState().ready 裁决能否开启(不可用时拒 409、面板开关禁开)。
本插件负责:自己挂 tools/execute 拦截 bash、按「核心存的 enabled + 自己报的
ready」裁决、命中则用改写后的命令短路执行;rtk rewrite 退出码解读与探活也在这里。
本插件无状态:开关与数据都经 router.extStore 读写(isEnabled / readData),
不自己 file IO、没有数据目录。
src/
index.ts 插件入口(host 半,注册 rtk 扩展器 + 挂拦截)
intercept.ts 拦截实现(挂 tools/execute、裁决、短路)—— 无状态
rtk.ts RTK 扩展器实现(rewrite 退出码解读、rtk 定位/探活)—— 无状态
contract.ts router.ext 契约副本(自含,与 dsh-router 契约同步)
*.test.ts 测试
cordis.patch.yml bundle patch,把插件插入 DSH cordis bundle stack
ponytail: 天花板 —— 本插件自己挂监听,多扩展插件各自挂时顺序不可控。目前只有 rtk 一家,无所谓;第二家出现时要收敛(升级路径:核心暴露顺序委派的共享工具方法, 而不是收回拦截)。
头号坑:
tools.get('bash', exec.agent)的 agent scope 不能省 —— 不带只查全局 视图,查不到 → 静默走原样、从不改写、不报错。已在intercept.ts文件头 + 测试锁定。
完整契约见 dsh-router 的 docs/ext.md。
rtk rewrite 退出码
RTK 权限默认 least-privilege,几乎没有命令会落到 Allow(0)——常见命令
(git status / ls / cat …)都返回 Ask(3)。真实代理下用户已显式开启开关
= 授权改写,所以退出码 3 也采用 stdout,不弹二次确认:
| 退出码 | 语义 | 行为 |
|---|---|---|
| 0 | Allow,有等价改写 | 采用 stdout |
| 1 | 无等价 | 放行(原样执行) |
| 2 | Deny 规则 | 放行(不做阻断) |
| 3 | Ask,有等价改写但默认要人工确认 | 采用 stdout——用户已授权 |
| — | spawn 失败 / 超时(2s) | 放行 |
开发
pnpm install
pnpm typecheck
pnpm test
pnpm build # lib/index.js
致谢
- rtk-ai/rtk —— Rust Token Killer,命令输出压缩器。
许可证
免责声明
本项目仅用于学习与技术研究,请勿用于商业用途。
链接
同类插件
DayuanJiang/next-ai-draw-io#dsh-plugin★ 36548
dsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
Tencent/WeKnora#dsh-weknora★ 36201
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 6962
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
T-Auto/dsh-ops★ 5011
为 Windows 的 DSH 提供 bash、PowerShell 7 及 Rust 高性能工具,减少 token 消耗。
sixtysevenlf/dsh-blender-plugin★ 1536
让 DSH agent 通过直连 TCP 通道驱动本地 Blender,提供 15 个工具:视口帧、自定义视角渲染、Python 执行、无头与作业卸载、事务回滚,以及 34 个 family / 228 个 op 的规划层。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1153
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。