用途:当任务涉及终端产品的整体形态时使用本技能,包括要构建何种 TUI、采用哪层抽象、如何组织状态,以及全屏终端界面是否合适。
是否该用 TUI:需要持续视觉反馈、多步导航、键盘驱动探索、大量条目选择或仪表盘式控制面时,优先富 TUI;流程短、可脚本化、以自动化为主要目标,或面向屏幕阅读器与 CI 时,优先行式 CLI、提示或纯输出。生产级终端产品常同时提供可脚本化 CLI 与可选 TUI。
架构规则:分离模型、更新与视图,业务状态不直接打印到终端;把终端尺寸当作输入,每次 resize 都按宽高重算布局;集中管理终端生命周期(raw 模式、备用屏、鼠标、焦点、键盘协议与清理);所有操作可用键盘完成,鼠标仅作增强;为降级设计(TERM=dumb、非 TTY、无颜色、Windows 控制台差异、tmux/screen、SSH、CI);避免隐藏的全局终端写入,日志与后台输出不得破坏屏幕。
框架选择:Rust 全屏精确渲染用 Ratatui + Crossterm;Python 产品级组件、CSS、异步用 Textual;Python 富输出、进度、表格、Markdown、日志用 Rich;Python REPL、shell、补全、复杂输入用 prompt_toolkit;经典轻依赖 Unix TUI 用 curses/ncurses;Go Elm 风格用 Bubble Tea + Bubbles + Lip Gloss;Go 表单/表格/树用 tview over tcell;Go 底层单元格引擎用 tcell;Node 的 React 风格终端组件用 Ink;Node 类 DOM 全屏组件用 Blessed;.NET 全屏视图用 Terminal.Gui;.NET 富 CLI 输出与提示用 Spectre.Console。新项目定框架前先读 references/framework-selection.md。
产品设计清单:一句话定义主用户旅程;确定全屏、内联、提示式或混合;列出目标环境;定义最小终端尺寸与小屏回退;定义退出键、破坏性确认与恢复说明;为每个关键操作定义非交互等价方式;确定帮助暴露方式(页脚提示、?、命令面板、--help、文档)。
常见失败:为应可脚本化的流程做全屏 UI;框架已解决布局、输入、清理与测试时仍用底层转义序列;业务逻辑与终端写入混杂;忽视屏幕阅读器、CI、管道与 TERM=dumb;假设颜色、Unicode 图标、Nerd Fonts 或鼠标始终可用。
参考文件:references/framework-selection.md 提供生态对比与决策树;references/tui-architecture.md 提供状态、事件、生命周期、日志与分发模式。