Pular para o conteúdo principal
O ChatCLI é um projeto Go modular organizado em pacotes com responsabilidades bem definidas. Esta página documenta a arquitetura interna para contribuidores e usuários avançados.

Visão geral dos pacotes

chatcli/
|-- main.go                    # Entrypoint
|-- cli/                       # Interface do usuario e modos
|   |-- cli.go                 # Struct principal ChatCLI + Start()
|   |-- agent_mode.go          # Modo agente (~3200 linhas)
|   |-- rewind.go              # Checkpoints e restauracao de conversa
|   |-- compact_command.go     # Compactacao guiada de historico
|   |-- history_compactor.go   # Pipeline de compactacao (3 niveis)
|   |-- history_trimmer.go     # Trimming near-lossless (nivel 1)
|   |-- command_handler.go     # Roteamento de comandos /
|   |-- agent/                 # Sistema multi-agent
|   |   |-- workers/           # 12 agents especialistas
|   |   |-- ui_renderer.go     # Renderizacao da UI
|   |   +-- dispatcher.go      # Dispatcher assincrono
|   |-- bus/                   # Message bus interno
|   |-- workspace/             # Bootstrap files + memoria (conectado)
|   |   |-- bootstrap.go       # BootstrapLoader com cache mtime
|   |   |-- memory.go          # MemoryStore (MEMORY.md + notas diarias)
|   |   +-- context_builder.go # Combina bootstrap + memoria no prompt
|   |-- skills/                # Sistema de skills
|   +-- mcp/                   # Gerenciador MCP
|-- config/                    # Configuracao e migracao
|-- i18n/                      # Internacionalizacao
|-- llm/                       # Comunicacao com LLMs
|   |-- registry/              # Auto-registro de provedores
|   |-- fallback/              # Cadeia de fallback
|   |-- client/                # Interface LLMClient + ToolAwareClient
|   |-- openai/                # Provedor OpenAI
|   |-- claudeai/              # Provedor Anthropic
|   |-- googleai/              # Provedor Google
|   |-- xai/                   # Provedor xAI
|   |-- ollama/                # Provedor Ollama
|   +-- copilot/               # Provedor GitHub Copilot
|-- models/                    # Structs: ToolDefinition, ToolCall, LLMResponse
|-- server/                    # Servidor gRPC
|-- client/remote/             # Cliente gRPC
|-- k8s/                       # Kubernetes Watcher
|-- operator/                  # K8s Operator (AIOps)
|   |-- api/v1alpha1/          # Tipos dos 7 CRDs
|   +-- controllers/           # Reconcilers e engines
|-- proto/                     # Definicoes protobuf
|-- utils/                     # Funcoes auxiliares
+-- version/                   # Informacoes de versao

Componentes principais

CLI e Modos

A struct ChatCLI em cli/cli.go é o ponto central. O método Start() inicia o modo interativo usando go-prompt v0.2.6.
ModoArquivoDescrição
Interativocli/cli.goPrompt interativo com auto-completação
Agentecli/agent_mode.goPlanejamento e execução de tarefas
Codercli/cli.go + cli/agent_mode.goLoop de engenharia com tool calls
One-shotcli/cli.go (flag -p)Execução única sem TUI
A troca entre modos usa um mecanismo de 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 via init() 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 pacote cli/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 em cli/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

CategoriaBiblioteca
TUIgo-prompt v0.2.6
MarkdownGlamour (Charmbracelet)
CoresLipgloss (Charmbracelet)
LoggerZap (Uber)
Log rotationLumberjack
Env filesGodotenv
i18ngolang.org/x/text
gRPCgoogle.golang.org/grpc
Kubernetesk8s.io/client-go
Operatorcontroller-runtime (Kubebuilder)
Protobufgoogle.golang.org/protobuf

Padrões de design

  • Auto-registro via init() — Provedores se registram automaticamente
  • Interface-drivenLLMClient e ToolAwareClient para 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 /, nunca filepath.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 como SystemParts com CacheControl no modelo de mensagem, permitindo cache automatico por provider (Anthropic cache_control: ephemeral, OpenAI prompt caching, Google context caching). Antes eram injetados como mensagens de usuario, sem possibilidade de cache