Jane Street的Bonsai_term与TUI复兴
Jane Street 已推出 Bonsai_term,一个基于 Bonsai 库构建响应式终端用户界面(TUIs)的框架。向 TUIs 的转变源于对轻量、键盘为中心的工具的需求,这类工具能够无缝融入开发者工作流和 AI 代理。
strace-ui:转换系统调用跟踪
strace-ui 是一个交互式 TUI,能够将传统上难以理解的 strace 输出转换为可探索的界面。它解决了在标准 strace 输出中过滤系统调用和跟踪子进程的常见困难。
strace-ui 的关键特性包括:
- Interactive Filtering:用户可以在运行时隐藏特定系统调用(例如
futex、epoll_wait),无需重新运行跟踪。 - File Descriptor Tracking:该工具允许用户在引用相同文件描述符(FD)的系统调用之间跳转,并按 FD 进行过滤,具备跨 fork 跟踪 FD 重用的逻辑。
- DNS Resolution:它通过解析 IP 地址为主机名,增强了
strace的--decode-fds=all,为网络活动提供即时上下文。 - Process Management:子进程和线程被分配简短的数字标签,而不是原始 PID,简化了对复杂
strace -f调用的跟踪。 - Integrated Documentation:按下
m键即可打开当前系统调用的手册页。
Bonsai_term:用于TUI的响应式框架
Bonsai_term 是对 Bonsai 的改编,Bonsai 是一个纯函数式、基于状态机的框架,最初用于 Web 应用(Bonsai_web)。虽然 Bonsai_web 使用 js_of_ocaml 编译为 JavaScript,Bonsai_term 则允许开发者编写本地 OCaml 程序,能够利用所有本地 OCaml 库和工具。
核心架构
Bonsai 组件实现为纯函数式状态机。框架采用增量化(incrementalization),即仅在必要时重新计算值和视图。这种架构允许组合状态和增量原语,类似于 React 中的 hooks,但状态管理位于组件层级之外。
AI开发循环
Bonsai_term 专为 “AI‑friendly” 设计。TUI 形态与大语言模型(LLM)的协同通过 screenshot tests(期望测试)实现。由于 UI 以纯文本渲染,AI 代理可以运行测试,看到 UI 状态的文本化 “截图”,并通过 diff 验证自己的工作。
正如社区成员所指出的,这闭合了 AI 代理的反馈回路,因为 UI 状态存在于代理的原生模态(文本)中,而 GUI 则需要视觉模型来检查。
TUI复兴与“Claude Code效应”
Jane Street 观察到一个趋势:精心制作的 TUIs 正因其速度、简洁性和可移植性而胜过功能齐全的 IDE。该趋势在 2025 年初 AI 代理如 Claude Code 出现后进一步加速,这类代理原生运行于终端。
为什么TUIs优于GUIs
- Portability:终端模拟器无处不在,并且已集成到编辑器中。
- Performance:TUIs 避免了 Electron 等框架的开销,社区成员常将此视为回归终端工具的主要驱动因素。
- Developer Ergonomics:键盘驱动的界面优化了实用性,而非视觉炫耀。
- Native Integration:不同于 Bonsai_web,Bonsai_term 应用是普通的 OCaml 程序,避免了浏览器 API 和 JavaScript 转译的复杂性。
生态系统与应用
Jane Street 已使用 Bonsai_term 构建了多种内部工具,包括:
- proctopus:用于管理多进程应用的工具。
- dissect:用于分解可执行文件膨胀的工具。
- diagonals:用于浏览日志、管理部署和监控 CI 系统的 TUI。
- AIDE:内部的代理式编码工具,既是演示也是 Bonsai_term 组件库开发的催化剂。
社区观点
虽然 Jane Street 推动了 TUI 复兴,但社区中仍有开发者持怀疑态度。有些人认为 TUIs 只是“一时潮流”或是 GUI 能提供功能的严格子集,认为任何 TUI 功能都可以在 GUI 中实现。另一些人则指出,构建自定义 TUIs 的冲动正在减弱,因为 AI 代理现在能够即时为特定问题生成定制的、一次性的可视化,从而可能降低对永久、手工打造的 TUI 工具的需求。