Jane Street的Bonsai_term与TUI复兴

Jane Street 已推出 Bonsai_term,一个基于 Bonsai 库构建响应式终端用户界面(TUIs)的框架。向 TUIs 的转变源于对轻量、键盘为中心的工具的需求,这类工具能够无缝融入开发者工作流和 AI 代理。

strace-ui:转换系统调用跟踪

strace-ui 是一个交互式 TUI,能够将传统上难以理解的 strace 输出转换为可探索的界面。它解决了在标准 strace 输出中过滤系统调用和跟踪子进程的常见困难。

strace-ui 的关键特性包括:

  • Interactive Filtering:用户可以在运行时隐藏特定系统调用(例如 futexepoll_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 工具的需求。

Sources