Pular para o conteúdo principal
Contribuições são bem-vindas! O ChatCLI é um projeto open-source licenciado sob a Licença MIT.

Como contribuir

1. Fork e clone

# Fork o repositório no GitHub e clone
git clone https://github.com/SEU-USUARIO/chatcli.git
cd chatcli

2. Setup do ambiente

# Pré-requisitos
go version  # Go 1.25+

# Instalar dependências
go mod tidy

# Compilar
go build -o chatcli

# Rodar testes
go test ./...

3. Crie uma branch

git checkout -b feature/minha-feature

4. Faça suas alterações

  • Siga os padrões de código existentes
  • Adicione testes para novas funcionalidades
  • Mantenha commits pequenos e focados

5. Envie o Pull Request

git add .
git commit -m "feat: descrição clara da mudança"
git push origin feature/minha-feature
Abra um Pull Request no repositório principal.

Estrutura do projeto

O código segue uma arquitetura modular com decomposição SOLID. Os principais arquivos monolíticos foram divididos em módulos focados:
  • cli/cli.go (~923 linhas) + 7 arquivos extraídos (cli_helpers.go, cli_history.go, cli_mode.go, cli_output.go, cli_prompt.go, cli_session.go, cli_tools.go)
  • cli/agent_mode.go (~1498 linhas) + 4 arquivos extraídos
  • cli/command_handler.go (~185 linhas) + 4 arquivos extraídos
  • server/handler.go (~420 linhas) + 3 arquivos extraídos
  • cli/context_handler.go (~385 linhas) + 3 arquivos extraídos
Veja a documentação de arquitetura para entender a organização completa dos pacotes e componentes. O projeto conta com 970 testes com 0 falhas, incluindo os pacotes cli/mcp, cli/ctxmgr e llm/fallback.

Compilação com informações de versão

Para builds que injetam versão, commit e data:
VERSION=$(git describe --tags --always --dirty 2>/dev/null || echo "dev")
COMMIT_HASH=$(git rev-parse --short HEAD)
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

go build -ldflags "\
  -X github.com/diillson/chatcli/version.Version=${VERSION} \
  -X github.com/diillson/chatcli/version.CommitHash=${COMMIT_HASH} \
  -X github.com/diillson/chatcli/version.BuildDate=${BUILD_DATE}" \
  -o chatcli main.go

Adicionando um novo provedor LLM

  1. Crie um pacote em llm/meuprovedor/
  2. Implemente a interface LLMClient (e ToolAwareClient se suportar tool use)
  3. Adicione auto-registro via init() no llm/registry
  4. Defina as variáveis de ambiente no config/
  5. Adicione traduções i18n em i18n/
O provedor será detectado automaticamente — sem precisar editar blocos switch/case.

Criando um plugin

Veja o guia completo em Sistema de Plugins.

Reportando bugs

Abra uma issue no GitHub com:
  • Versão do ChatCLI (chatcli --version)
  • Sistema operacional e versão do Go
  • Passos para reproduzir
  • Comportamento esperado vs observado
  • Logs relevantes (use LOG_LEVEL=debug)