SuperAPI AI 工具集

charmbracelet

编程与开发

查看项目

更新于 10-15 08:10

技能介绍

用途

本技能用于使用 Charmbracelet 生态构建现代 Go CLI,尤其是终端用户界面(TUI)与交互式终端流程。默认以 Bubble Tea 作为有状态 TUI 或交互式终端流程的基础,再按需叠加 Bubbles、Huh、Lip Gloss、Wish、Glamour 与 Log。

起步要点

  • 当前 v2 生态使用 charm.land/.../v2 导入路径。
  • Bubble Tea 视为应用运行时与状态机。
  • Bubbles 视为可复用组件,而非应用外壳。
  • Lip Gloss 负责布局与样式。
  • Huh 是构建表单与向导最快的方式。
  • Glamour 负责 Markdown 转 ANSI 渲染。
  • Log 用于向 stderr 或文件输出诊断信息,不写入 TUI 界面。
  • Wish 是远程终端应用的 SSH 传输层。

何时选用哪个库

  • 需要完整 TUI、应用状态、按键处理、消息循环:参考 references/bubbletea-core.md
  • 需要真实应用架构、命令、子模型、异步模式:参考 references/bubbletea-patterns.md
  • 需要 list、table、textinput、viewport、help 等可复用组件:参考 references/bubbles.md
  • 需要表单、提示、向导、内嵌表单屏幕:参考 references/huh.md
  • 需要样式、间距、边框、颜色、布局组合:参考 references/lipgloss.md
  • 需要 SSH 原生 TUI 或远程 CLI 应用:参考 references/wish.md
  • 需要 Markdown 帮助面板、文档、发布说明、预览:参考 references/glamour.md
  • 需要结构化 CLI 日志与诊断:参考 references/log.md
  • 需要高层库选择与 API 地图:参考 references/api-surface.md
  • 需要具体实现配方:参考 references/common-use-cases.md
  • 迁移问题与易踩坑:参考 references/troubleshooting-workarounds.md
  • 上游示例短名单:参考 references/examples.md

默认构建策略

  • 当用户要求 TUI、终端 UI、仪表盘、选择器、向导或交互式 CLI 时,从 Bubble Tea 开始。
  • 使用 Bubbles,而不是手工重建常见组件。
  • 当布局或视觉层次重要时加入 Lip Gloss。
  • 当交互以表单为主时加入 Huh。
  • 当应用渲染 Markdown 内容时加入 Glamour。
  • 当需要诊断、后台任务或服务器日志时加入 Log。
  • 仅当应用需通过 SSH 运行时才加入 Wish。

核心规则

  • 业务逻辑与 Bubble Tea 模型保持分离。
  • I/O 放在 tea.Cmd 中执行,不要直接在 Update 或 View 中做。
  • 用 tea.WindowSizeMsg 处理尺寸变化,保持布局响应式。
  • 当样式依赖明暗模式时,用 tea.RequestBackgroundColor 请求背景色。
  • 在 Bubble Tea v2 中,通过 tea.View 字段(如 AltScreen 和 MouseMode)声明终端行为。
  • 在独立的 Lip Gloss 或 Glamour 输出中,使用 Lip Gloss writers 打印,以便颜色降采样生效。
  • 在 Wish 应用中,注意中间件按声明的逆序执行。
  • 在 Bubble Tea 应用中,日志写入 stderr 或文件,不要写入 stdout。

Bubble Tea 最小骨架

package main

import tea "charm.land/bubbletea/v2"

type model struct{}

func (m model) Init() tea.Cmd { return nil }

func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyPressMsg: switch msg.String() { case "q", "ctrl+c": return m, tea.Quit } } return m, nil }

func (m model) View() tea.View { v := tea.NewView("Hello from Bubble Tea") return v }

后续阅读

  • 阅读 references/bubbletea-core.md 了解 Bubble Tea 的模型、命令、消息与程序生命周期。
  • 阅读 references/bubbletea-patterns.md 了解应用结构、异步工作、Cobra 集成与多模型组合。
  • 在迁移旧 Charmbracelet 代码或将过时示例与 v2 代码混用之前,阅读 references/troubleshooting-workarounds.md。

适用场景

适用于用 Go 构建 TUI、终端仪表盘、选择器、表单向导、交互式 CLI、SSH 远程终端应用,以及需要渲染 Markdown 帮助面板或结构化日志的终端程序。

限制

本资料未提供收费、价格、平台限制、具体版本支持范围及性能相关说明,暂未提供。