ui/theme. Ele define uma paleta semântica (cores nomeadas por papel, não por matiz), detecta a capacidade de cor do terminal e expõe 11 temas prontos (dark, light + 9 da comunidade) que reskinam a interface inteira — chat, cards do /coder e /agent, bordas, markdown, code blocks e spinners — sem precisar reiniciar.
O tema é estado global do processo. Trocar de tema vale na próxima renderização, sem restart. Diferente do
CHATCLI_CODER_UI (estilo de timeline), que o renderer relê do ambiente a cada chamada.Trocar de tema em runtime
/config ui) mostra o tema ativo, a origem do valor (variável de ambiente vs. padrão), o perfil de cor detectado e a lista de temas com o ativo marcado por →.
Temas disponíveis
São 11 temas no total. Cada faixa mostra o nome e as cores reais da paleta, na ordem modelo · accent (raciocínio) · ok · aviso · erro:dark e light são variantes calibradas do ChatCLI; os outros nove são adaptações das paletas clássicas da comunidade mapeadas nos papéis semânticos do ChatCLI (mesma estrutura, cores diferentes). Todos degradam para 256 e 16 cores mantendo os papéis distinguíveis.Colorize e o conversor ansiColorToLip roteiam pelo tema ativo — não há churn nos call-sites.
Paleta semântica
As cores são nomeadas pelo papel que cumprem, não pelo matiz. É isso que permite trocar o tema inteiro mexendo só na paleta:| Grupo | Campo | Uso |
|---|---|---|
| Marca/Hierarquia | Primary | nome do modelo, ações primárias |
Secondary | multi-agent, batch, badges secundários | |
Accent | ênfase de raciocínio / cognitiva | |
Muted | bordas neutras, texto secundário, defaults | |
| Estado semântico | Success | sucesso de tool, habilitado |
Warning | avisos, desabilitado | |
Danger | erros, falha de tool | |
Info | notas / explicações | |
| Estrutural | Border | borda padrão dos cards |
Text / TextStrong | corpo de texto / negrito e títulos | |
Background | fundo dos code blocks |
Markdown temático
O markdown é renderizado pelo glamour com umStyleConfig derivado da paleta (substituindo o antigo glamour.WithStandardStyle("dark")), então as cores do markdown e dos code blocks compartilham os tons da UI. Realce de sintaxe via chroma e uma chip de linguagem acima de cada bloco de código. O documento é renderizado inteiro (não bloco a bloco), de modo que reference links, footnotes e espaçamento de parágrafo resolvem corretamente.
Perfil de cor e degradação graciosa
O ChatCLI detecta a capacidade do terminal e degrada com elegância. Em pipes, CI ou terminaisdumb, a saída vira texto limpo sem códigos de cor.
| Perfil | Significado |
|---|---|
TrueColor | terminal 24-bit |
ANSI256 | terminal 8-bit (256 cores) |
ANSI | terminal clássico de 16 cores (SGR 30–37 / 90–97) |
ASCII | sem cor — NO_COLOR, dumb, pipe/redirect |
NO_COLOR, CLICOLOR_FORCE, TERM, COLORTERM). O tema dark mantém o índice ANSI16 = 10 para o verde, então terminais de 16 cores ficam idênticos ao comportamento legado.
Persistência
A troca em runtime vale só para o processo atual. Para fixar um padrão entre sessões, adicione ao seu.env:
.env sozinho. Veja CHATCLI_THEME na referência de variáveis de ambiente.
Mudança paralela na v1.125: o envelope de resposta do chat ganhou um footer com custo por turno e uso de contexto, e os spinners foram unificados em um único spinner braille temático, exibido só quando há terminal.