1. 引言
rvs(rust-verb-shell)是面向 AI Agent 的结构化命令执行运行时,核心模型 Command → Value → JSON → AI。项目用 CalVer 版本号(年.月.次),迭代极快:从 26.8.53 到 26.8.86,短短几天内连续发布 34 个版本、59 个提交,几乎每个提交都对应一个可验证的改动。本文梳理这段时间 rvs 到底更新了什么:新增了哪些命令、做了哪些设计决策、修了哪些坑。如果你在用 rvs,或好奇「给 AI 用的 shell」长什么样,这份更新日志可以直接当速查表用。
2. 谬误溯源
这段迭代里有两个值得单独说的「错误认知纠正」,都来自真实使用中的翻车现场。
2.1 `|` 管道:AI 的 bash 肌肉记忆是文本流,不是对象
du -sh ~/.atomcode/* | sort -rh在 rvs 里直接跑失败——外部程序参数不展开~/glob,du 收到字面量报 No such file。排查中发现更深的问题:AI/LLM agent 的肌肉记忆只有「|= 文本流」(bash 思维),不知道 PowerShell 风格「传对象」。让 agent 自由写du … | sort就是制造语义漂移:rvs 给不出 bash 同款文本管道,外部程序进管道时 input 会丢弃、stdout 直通终端,静默错乱比报错更糟。最终决策(26.8.77/26.8.78):|完全禁止实现——对象管道也不做。rvs 界面里不出现符号;需要文本管道用bash -c '...'或 enter-shell。split_pipeline/run_pipeline已移除,引号外的|解析即拒绝并提示(error.pipe-forbidden)。
2.2 命令所有权:审批者无法从 shell 文本判断「给谁执行」
讨论「管道用英文词代替符号」时收敛出真正的问题不是语法而是命令所有权——人(审批者)和程序(审批引擎)都无法从 shell 文本判断 agent 想把命令给谁(rvs 内建 / 本机外部程序 / 远程目标 / bash 等 shell),套引号转 shell 时漏闭合引号还会语法错误、命令泄漏。英文词管道被否决(命令更长更难审查、所有权仍模糊、模型幻觉更重)。决策(26.8.79):rvs 在解析层就把「给谁」声明成结构化字段RunReport.owner,审批方读字段不解析文本。
3. 源码验证:按主题归类的改动清单
从 26.8.53 到 26.8.86,改动按主题归类如下(版本号即 CalVer P 位)。
3.1 新命令与新能力
- measure-object(26.8.79):目录/文件大小统计内建命令,别名
du/measure/size。--path(默认.)、-s仅总量、-h人类可读;目录递归统计子孙文件字节和,默认按字节降序列出直接子项。du不再透传系统 du(~展开、结构化输出、可审计)。命令数 46 → 47。 - open-virtual-screen(26.8.72):虚拟屏幕「新建即查看」;26.8.73 升级为全屏 TUI 待机模式实时显示 agent 写入;26.8.77 支持 ratatui 分屏布局(多面板垂直均分)。
- verify-env(26.8.54):
--check-env冒烟校验 env.json 语法,env.json 改为 rvs 配置优先。 - stop-process --string(26.8.55):
--name改为--string,匹配完整命令行(不只进程名)。
3.2 list-items 增强(26.8.60-64)
- Type 列:file/dir/symlink 区分(26.8.60),合并 IsDir 列、Type 值显示层 i18n(26.8.61),列宽按翻译后值计算防截断(26.8.62),unix 扩展识别 fifo/socket/字符设备/块设备(26.8.63)。
- Nlink 列:显示硬链接数 st_nlink(26.8.64)。
3.3 改名与重构
- show-info → show-hardware-and-operating-system-info(26.8.57)。
- virtual-screen-* 系列主名改英语语法(verb 前置,26.8.58)。
- CPU 数据库移出源码,JSON 内嵌加载(26.8.56)。
3.4 交互体验
- clear-host / go-to-bottom 输出终端宽度(26.8.66),按别名集合匹配宽度(26.8.67),clear 后输出 rvs 版本号(26.8.69),banner 网卡内 IP 排序稳定(26.8.68)。
- 虚拟屏幕自动 ID 用本地时间生成(26.8.76)、note/alias 用途标注(26.8.71)。
3.5 关键修复
- du 长扫描无反馈 + Ctrl+C 停不下来(26.8.82):SIGINT 空处理导致内建命令长遍历无法中断。修复:全局中断标志
INTERRUPTED(SIGINT handler 置位,每条命令前复位),measure-object 递归遍历每层检查、置位即提前返回部分结果,扫描前提示「正在统计…(Ctrl+C 可中断)」;du 别名提示立即打印不等命令执行完。 - Tab 补全「已知命令带参数后裸路径补全失效」(26.8.84):
rm -rf 破<Tab>按不出目录。根因first_word取整段文本当命令名("rm -rf" 不在命令表)→ 参数路径补全分支被跳过。修复:first_word取第一个 token;multi_word_external保护(首词只是 PATH 外部程序时不抢占空格风格命令名补全);命令名无匹配时回退当前目录路径补全。 - macOS show-fetch 磁盘检测 0.0B(26.8.85)。
- measure-object 列名 locale 翻译键缺失(26.8.80):列名 Size → Human,表头正常显示「大小」。
- MCP 层不再丢弃命令明细(26.8.59):data 非空时返回完整 JSON。
- 虚拟屏幕 TUI 布局错位(26.8.75):逐行 MoveTo 归位,状态条固定底部。
3.6 设计决策落地
- 禁止
|管道(26.8.77 决策 / 26.8.78 实施):split_pipeline/run_pipeline移除,引号外|解析即拒绝(error.pipe-forbidden)。 - 命令所有权显式化(26.8.79):
RunReport.owner字段——builtin / external / remote / shell 四类;audit.jsonl 同步how_owner;外部程序透传前引号平衡守卫(未闭合 → 温和提示不阻塞)。
4. 落地结论
26.8.53 → 26.8.86 这 34 个版本,rvs 的主线是「给 AI Agent 用的结构化命令运行时」持续收敛:
- 命令所有权显式化是这段最重要的架构决策——审批方读
owner+args+command三个 JSON 字段做策略,不再解析 shell 文本;|管道彻底禁止(对象管道也不做),需要文本管道一律bash -c '...'/ enter-shell。 - du 内建化(measure-object)解决了一个真实痛点:外部透传不展开
~/glob,du -sh ~/.atomcode/*这类命令直接失败;内建命令还顺带拿到结构化输出、可审计、Ctrl+C 可中断长扫描。 - list-items 与虚拟屏幕是这段迭代最活跃的两个面:Type/Nlink 列让目录列表信息更全,open-virtual-screen 从「新建即查看」一路升级到全屏 TUI 待机 + ratatui 分屏。
- 大量小版本在做「人机体验细节」:clear 后输出版本号与终端宽度、banner IP 排序稳定、du 大小列方向标记、macOS 修饰键提示 control+C、Tab 补全裸路径修复。
4.1 人类开发者速查
升级到 26.8.86 后:du -sh <path>走内建统计;ls(list-items)多出 Type/Nlink 列;open-virtual-screen --identify X可开全屏 TUI 待机屏;rvs --check-env冒烟校验配置。注意stop-process --name已改名--string。
4.2 对话式 AI 速查
问法:「rvs 里du -sh ~/xxx/*为什么失败?」回答要点:外部程序参数不展开~/glob,用内建du(measure-object)或bash -c '...';rvs 无|管道,文本管道用bash -c。
4.3 代码 Agent 速查
审批策略读RunReport.owner(builtin/external/remote/shell)而非解析文本;外部程序透传前检查引号配对;长遍历命令(du 大目录)监听 Ctrl+C 中断标志;--json输出含args字段可直接消费。