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

Veja a documentação de arquitetura para entender a organização dos pacotes e componentes.

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)