生成模型:Claude Opus 4.6 (anthropic/claude-opus-4-6) Token 消耗:输入 ~340k tokens,输出 ~6k tokens(本节)
OpenClaw 提供了一个全功能的终端用户界面(TUI,Terminal User Interface),让用户可以直接在终端中与 AI Agent 进行交互式对话。TUI 不仅仅是一个简单的命令行 REPL——它具备语法高亮、Markdown 渲染、工具调用可视化、多 Agent 切换、会话管理等完整功能。
衍生解释:TUI 与 CLI 的区别 CLI(Command Line Interface)是传统的命令行工具——用户输入命令、程序返回结果,交互是线性的。TUI(Terminal User Interface)则在终端中构建了类似 GUI 的界面,具有布局系统、交互组件、实时更新等特性。经典的 TUI 应用包括 vim、htop、tmux 等。TUI 通过 ANSI 转义码控制终端的光标位置、文字颜色和屏幕区域。
41.1.1 pi-tui 集成
OpenClaw 的 TUI 基于 @mariozechner/pi-tui 库构建。该库提供了一套终端 UI 组件系统,包括布局容器、文本渲染、编辑器、加载动画、列表选择等基础组件。
import {
CombinedAutocompleteProvider, // 组合自动补全
Container, // 布局容器
Loader, // 加载动画
ProcessTerminal, // 终端适配器
Text, // 文本组件
TUI, // TUI 根实例
} from "@mariozechner/pi-tui";
TUI 的界面由一棵组件树构成:
ProcessTerminal 是终端的底层适配器,封装了 process.stdin / process.stdout 的读写和终端尺寸检测。
除了 pi-tui 的内置组件,OpenClaw 还实现了以下自定义组件(位于 src/tui/components/):
src/tui/ 目录的文件按职责清晰分层:
TUI 通过 GatewayChatClient 与 Gateway 通信:
TUI 的状态通过 TuiStateAccess 接口集中管理,使用 getter/setter 代理模式:
状态变更会自动触发 UI 更新。例如,activityStatus 从 "idle" 变为 "streaming" 时,状态栏会切换为加载动画。
编辑器的提交处理支持三种输入模式:
三种输入模式:
注意 ! 模式使用原始未裁剪的文本(raw),确保前导空格不会误触发 Bash 模式。单独的 ! 被视为普通消息。
TUI 的配色方案定义在 src/tui/theme/theme.ts 中:
配色方案经过精心设计,在深色终端中提供舒适的阅读体验。代码高亮基于 cli-highlight 库,支持主要编程语言的语法着色。
src/terminal/ 提供了底层的终端操作工具:
TuiStreamAssembler 负责将 Gateway 的增量事件组装为完整的显示文本:
每个运行(runId)维护独立的状态:thinkingText(思维过程)和 contentText(正文内容)分别追踪,按需合成显示文本。showThinking 参数控制是否将思维过程(如 Claude 的 <thinking> 标签内容)显示给用户。
当 Agent 正在处理时,状态行显示动态的等待消息:
tui-waiting.ts 提供了一组随机等待短语(如"思考中..."、"正在推理..."),增加界面的趣味性。
TUI 提供了丰富的斜杠命令,涵盖 Agent 管理、会话控制、模型切换等:
命令支持参数自动补全——例如 /think 命令会补全 off、minimal、low、medium、high、xhigh 等级别。命令别名机制(COMMAND_ALIASES)支持简写,如 /elev → /elevated。
复杂的选择操作(如 Agent 切换、会话选择、模型选择)通过覆盖层(overlay)实现:
覆盖层使用 SearchableSelectList 组件,支持键盘导航和模糊搜索(fuzzy-filter.ts),提供类似 VS Code 命令面板的交互体验。
41.1.5 本地 Shell
TUI 的 ! 前缀支持直接在终端中执行本地 Shell 命令:
这使得用户无需离开 TUI 界面就能执行文件操作、运行脚本等任务——在 AI 辅助编程的工作流中非常实用。
pi-tui 框架:TUI 基于 @mariozechner/pi-tui 构建,使用组件树模型(header → chatLog → status → footer → editor)。
Gateway 通信:GatewayChatClient 封装了 WebSocket 客户端,提供 sendMessage/listSessions/patchSession 等高层 API。
三种输入模式:! 前缀执行本地 Shell、/ 前缀触发斜杠命令、无前缀发送消息给 Agent。
流式响应组装:TuiStreamAssembler 分别追踪思维过程和正文内容,按需合成显示文本,支持增量更新。
主题系统:精心设计的 20+ 色调色板,支持语法高亮(cli-highlight),在深色终端中提供舒适的阅读体验。
斜杠命令:20+ 个命令覆盖 Agent/会话/模型管理,支持参数自动补全和命令别名。
覆盖层选择器:模糊搜索列表用于 Agent/会话/模型选择,提供类似 VS Code 命令面板的交互体验。
终端工具层:src/terminal/ 提供 ANSI 控制、表格渲染、流式写入、超链接等底层能力。