Skip to content

Pi TUI 设计

位置

packages/tui/src/

概述

Pi 的 TUI 是手写的终端渲染器,不是基于 Ink/Blessed/React 的。它使用自研的 differential renderer 实现高效屏幕更新。

核心设计

app.tsx (React-like 入口)

renderer.ts (自研 differential renderer)

terminal output

三种 CLI 输出模式

Pi 支持多种输出格式,和 Hermes 的 --print/--json 类似:

模式用途实现
InteractiveTUI 交互自研渲染器
Print管道/脚本STDOUT 纯文本
JSON程序化消费JSON 行
RPC远程调用JSON-RPC

Interactive Mode 组件

Pi TUI 使用类似 React 的组件模型:

typescript
// 概念代码
<App>
  <Header />
  <ChatList messages={messages} />
  <ToolProgress active={toolCalls} />
  <InputBox onSend={handleSend} />
</App>

Differential Renderer

Pi 的渲染器优化策略:

  1. 维护上一帧的屏幕 buffer
  2. 新帧对比旧帧,只输出变化行
  3. 利用 ANSI escape codes 移动光标

这类似 React 的 Virtual DOM diff,但针对终端优化。

与 Hermes TUI 对比

维度Pi TUIHermes TUI
技术自研 rendererReact Ink + TypeScript
组件模型自研类 React真正的 React hooks
复杂度低(自包含)中(npm 依赖)
学习曲线高(自研 DSL)低(标准 React)

与 OpenCode TUI 对比

维度Pi TUIOpenCode TUI
技术自研@opentui + Solid
渲染方式差异渲染完整重渲染
架构内联 agentSDK-driven to server
功能基础聊天文件树/编辑器/diff/权限

Powered by VitePress