Visão geral dos pacotes
Componentes principais
CLI e Modos
A structChatCLI em cli/cli.go é o ponto central. O método Start() inicia o modo interativo usando go-prompt v0.2.6.
| Modo | Arquivo | Descrição |
|---|---|---|
| Interativo | cli/cli.go | Prompt interativo com auto-completação |
| Agente | cli/agent_mode.go | Planejamento e execução de tarefas |
| Coder | cli/cli.go + cli/agent_mode.go | Loop de engenharia com tool calls |
| One-shot | cli/cli.go (flag -p) | Execução única sem TUI |
panic/recover para sair do loop do go-prompt.
O ChatCLI usa um historico unificado (cli.history) compartilhado entre todos os modos. Ao trocar de modo, o contexto completo e preservado. Os comandos /compact e /rewind operam diretamente sobre esse historico unico.
Registry de provedores
Cada provedor LLM se registra automaticamente viainit() no pacote llm/registry. Isso elimina blocos switch/case e facilita a adição de novos provedores — basta criar o pacote e implementar a interface LLMClient.
Message Bus
O pacotecli/bus implementa um barramento de mensagens tipado com:
- Pub/sub com filtros por canal e tipo
- Request-reply com correlation IDs
- Métricas atômicas de throughput
Multi-Agent
O sistema de orquestração emcli/agent/workers gerencia 12 agents especialistas que executam em goroutines paralelas com semáforo configurável. Cada worker possui:
- Mini ReAct loop isolado (observe → reason → act)
- Skills próprias (scripts aceleradores e descritivas)
- File locks (mutex per-filepath)
- Timeout e max turns configuráveis
Tecnologias
| Categoria | Biblioteca |
|---|---|
| TUI | go-prompt v0.2.6 |
| Markdown | Glamour (Charmbracelet) |
| Cores | Lipgloss (Charmbracelet) |
| Logger | Zap (Uber) |
| Log rotation | Lumberjack |
| Env files | Godotenv |
| i18n | golang.org/x/text |
| gRPC | google.golang.org/grpc |
| Kubernetes | k8s.io/client-go |
| Operator | controller-runtime (Kubebuilder) |
| Protobuf | google.golang.org/protobuf |
Padrões de design
- Auto-registro via
init()— Provedores se registram automaticamente - Interface-driven —
LLMClienteToolAwareClientpara polimorfismo - Fallback chain — Classificação inteligente de erros + cooldown exponencial
- Stateful parser — Parsing de XML com atributos escapados (mais robusto que regex)
- embed.FS — Arquivos i18n embarcados no binário (sempre usa
/, nuncafilepath.Join) - Panic/recover — Troca de modos no go-prompt sem reiniciar o processo
- Historico unificado — Um unico array de mensagens compartilhado entre chat, agent e coder
- Checkpoint/rewind — Deep copy do historico antes de cada chamada LLM, com restauracao seletiva
- Compactacao em 3 niveis — Trimming near-lossless, sumarizacao estruturada, truncamento de emergencia
- Workspace context injection — Bootstrap + memoria injetados automaticamente em todo system prompt
- Context injection via system prompt — Contextos attached (
/context attach) sao injetados comoSystemPartscomCacheControlno modelo de mensagem, permitindo cache automatico por provider (Anthropiccache_control: ephemeral, OpenAI prompt caching, Google context caching). Antes eram injetados como mensagens de usuario, sem possibilidade de cache