README
¶
ChatCLI
O ChatCLI é uma aplicação de linha de comando (CLI) avançada que integra modelos de Linguagem de Aprendizado (LLMs) poderosos (como StackSpot, OpenAI e ClaudeAI) para facilitar conversas interativas e contextuais diretamente no seu terminal. Projetado para desenvolvedores, cientistas de dados e entusiastas de tecnologia, o ChatCLI potencializa a produtividade ao agregar diversas fontes de dados contextuais e oferecer uma experiência rica e amigável.
Índice
- Características Principais
- Instalação
- Configuração
- Uso e Comandos
- Processamento Avançado de Arquivos
- Estrutura do Código
- Bibliotecas e Dependências
- Integração de Logs
- Contribuindo
- Licença
- Contato
Características Principais
- Suporte a Múltiplos Provedores: Alterna entre StackSpot, OpenAI e ClaudeAI conforme a necessidade.
- Experiência Interativa na CLI: Navegação de histórico, auto-completação e feedback animado (ex.: “Pensando…”).
- Comandos Contextuais Poderosos:
@history– Insere o histórico recente do shell (suporta bash, zsh e fish).@git– Incorpora informações do repositório Git atual (status, commits e branches).@env– Inclui as variáveis de ambiente no contexto.@file <caminho>– Insere conteúdo de arquivos ou diretórios com suporte à expansão de~e caminhos relativos.@command <comando>– Executa comandos do sistema e adiciona sua saída ao contexto.@command --ai <comando> > <contexto>– Executa o comando e envia a saída diretamente para a LLM com contexto adicional.
- Exploração Recursiva de Diretórios: Processa projetos inteiros ignorando pastas irrelevantes (ex.:
node_modules,.git). - Configuração Dinâmica e Histórico Persistente: Troque provedores, atualize configurações em tempo real e mantenha o histórico entre sessões.
- Retry com Backoff Exponencial: Robustez no tratamento de erros e instabilidades na comunicação com APIs externas.
Instalação
Pré-requisitos
- Go (versão 1.23+) – Disponível em golang.org.
Passos de Instalação
-
Clone o Repositório:
git clone https://github.com/diillson/chatcli.git cd chatcli -
Instale as Dependências:
go mod tidy -
Compile a Aplicação:
go build -o chatcli -
Execute a Aplicação:
./chatcli
Instalação via Go Install (opcional)
Para instalar o ChatCLI diretamente via Go, você pode usar o seguinte comando:
go install github.com/diillson/chatcli@latest
Isso instalará o ChatCLI na sua pasta $GOPATH/bin, permitindo que você execute o comando chatcli diretamente no terminal caso seu $GOPATH/bin esteja no seu PATH.
Configuração
O ChatCLI utiliza variáveis de ambiente para definir seu comportamento e conectar-se aos provedores de LLM. Essas variáveis podem ser configuradas via arquivo .env ou diretamente no shell.
Variáveis de Ambiente
-
Local do
.env:CHATCLI_DOTENV– (Opcional) Define o caminho do seu arquivo.env.
-
Geral:
LOG_LEVEL– (Opcional) Níveis:debug,info,warn,error(padrão:info).ENV– (Opcional) Ambiente:prodpara produção oudevpara desenvolvimento (padrão:dev).LLM_PROVIDER– (Opcional) Provedor padrão:OPENAI,STACKSPOTouCLAUDEAI(padrão:OPENAI).LOG_FILE– (Opcional) Nome do arquivo de log (padrão:app.log).LOG_MAX_SIZE– (Opcional) Tamanho máximo do log antes da rotação (padrão:50MB).HISTORY_MAX_SIZE– (Opcional) Tamanho do histórico do ChatCLI (padrão:50MB).
-
Provedor OpenAI:
OPENAI_API_KEY– Chave de API da OpenAI.OPENAI_MODEL– (Opcional) Modelo a ser utilizado (padrão:gpt-4o-mini)OPENAI_ASSISTANT_MODEL– (Opcional) Modelo a ser utilizado (padrão:gpt-4o-mini)
-
Provedor StackSpot:
CLIENT_ID– ID do cliente.CLIENT_SECRET– Segredo do cliente.SLUG_NAME– (Opcional) Nome do slug (padrão:testeai).TENANT_NAME– (Opcional) Nome do tenant (padrão:zup).
-
Provedor ClaudeAI:
CLAUDEAI_API_KEY– Chave de API da ClaudeAI.CLAUDEAI_MODEL– (Opcional) Modelo (padrão:claude-3-5-sonnet-20241022).CLAUDEAI_MAX_TOKENS– (Opcional) Máximo de tokens na resposta (padrão:8192).
Exemplo de Arquivo .env
# Configurações Gerais
LOG_LEVEL=info
ENV=dev
LLM_PROVIDER=CLAUDEAI
LOG_FILE=app.log
LOG_MAX_SIZE=300MB
HISTORY_MAX_SIZE=300MB
# Configurações do OpenAI
OPENAI_API_KEY=sua-chave-openai
OPENAI_MODEL=gpt-4o-mini
OPENAI_ASSISTANT_MODEL=gpt-4o-mini
# Configurações do StackSpot
CLIENT_ID=seu-cliente-id
CLIENT_SECRET=seu-cliente-secreto
SLUG_NAME=seu-slug-stackspot
TENANT_NAME=seu-tenant-name
# Configurações do ClaudeAI
CLAUDEAI_API_KEY=sua-chave-claudeai
CLAUDEAI_MODEL=claude-3-5-sonnet-20241022
CLAUDEAI_MAX_TOKENS=8192
Uso e Comandos
Após a instalação e configuração, o ChatCLI oferece uma série de comandos que facilitam a interação com a LLM.
Iniciando a Aplicação
./chatcli
Comandos Gerais
-
Encerrar a Sessão:
/exit,exit,/quitouquit
-
Alternar Provedor ou Configurações:
/switch– Troca o provedor de LLM (modo interativo)./switch --slugname <slug>– Atualiza somente oslugName./switch --tenantname <tenant>– Atualiza somente otenantName.- Combinações:
/switch --slugname <slug> --tenantname <tenant> /reload– Recarrega as variáveis de ambiente em tempo real.
-
Ajuda:
/help
Comandos Contextuais
@history– Insere os últimos 10 comandos do shell.@git– Incorpora informações do repositório Git.@env– Insere variáveis de ambiente no contexto.@file <caminho>– Insere o conteúdo de um arquivo ou diretório.@command <comando>– Executa um comando do terminal e salva a saída.- Novo:
@command --ai <comando> > <contexto>– Envia a saída do comando diretamente para a LLM com contexto adicional.
Modo Agente
O Modo Agente permite que a IA execute tarefas no seu sistema através de comandos do terminal:
/agent <consulta>ou/run <consulta>– Inicia o modo agente com uma tarefa específica.- O agente analisará sua solicitação e sugerirá comandos apropriados para resolver a tarefa.
- Você pode selecionar comandos específicos para executar ou executar todos os comandos sugeridos.
- Exemplos de uso:
"/agent" Liste todos os arquivos PDF no diretório atual
"/run" Crie um backup compactado da pasta src/
"/agent" Quais processos estão consumindo mais memória?
- O agente pode executar comandos complexos, como listar arquivos, criar backups, verificar processos em execução e muito mais.
- Você pode interagir com o agente, fornecendo feedback ou solicitando ajustes nas tarefas sugeridas.
- O Modo Agente é ideal para automatizar tarefas repetitivas ou complexas, permitindo que você se concentre em atividades mais importantes.
- O agente mantém um histórico de comandos executados, permitindo que você revise as ações tomadas e os resultados obtidos.
- O Modo Agente é uma ferramenta poderosa para aumentar sua produtividade, permitindo que você delegue tarefas ao ChatCLI e obtenha resultados rapidamente.
- O agente é projetado para ser seguro e respeitar as permissões do sistema, garantindo que apenas comandos autorizados sejam execut
- O Modo Agente pode ser desativado a qualquer momento, retornando ao modo de conversa normal.
Nova Funcionalidade no modo Agente !!
- agora você pode adicionar contexto aos outputs dos comandos executados pelo agente
Quando você usar a nova funcionalidade "aCN" , você poderá:
- Executar um comando (por exemplo, 1 para executar o comando #1)
- Ver o resultado do comando
- Digitar aC1 para adicionar contexto ao comando #1
- Adicionar suas observações, informações adicionais ou perguntas (terminando com . em uma linha vazia)
- A IA responderá com base no comando, no resultado e no seu contexto adicional
Exemplo:
📋 Saída do comando executado:
---------------------------------------
🚀 Executando comandos (tipo: shell):
---------------------------------------
⌛ Processando: Exibir lista de arquivos
⚙️ Comando 1/1: ls -la
📝 Saída do comando (stdout/stderr):
total 24
drwxr-xr-x 5 user staff 160 May 15 10:23 .
drwxr-xr-x 3 user staff 96 May 15 10:22 ..
-rw-r--r-- 1 user staff 2489 May 15 10:23 main.go
-rw-r--r-- 1 user staff 217 May 15 10:23 go.mod
-rw-r--r-- 1 user staff 358 May 15 10:23 go.sum
✓ Executado com sucesso
---------------------------------------
Execução concluída.
---------------------------------------
Você: aC1
Digite seu contexto adicional (termine com uma linha contendo apenas '.') ou pressione Enter para continuar:
Eu preciso criar um script que liste apenas os arquivos .go neste diretório
e que conte quantas linhas cada um tem.
.
[A IA então responderá com uma explicação e um novo comando para atender à sua solicitação específica]
Processamento Avançado de Arquivos
O ChatCLI possui um sistema robusto para o envio e processamento de arquivos e diretórios, com modos de operação que atendem desde análises rápidas até explorações detalhadas de projetos inteiros.
Envio de Arquivos e Diretórios
Para enviar um arquivo ou diretório, utilize o comando @file seguido do caminho desejado. O comando suporta:
- Expansão de Caminhos:
~é expandido para o diretório home.- Suporta caminhos relativos (
./src/utils.js) e absolutos (/usr/local/etc/config.json).
Exemplos:
-
Enviar um arquivo específico:
Você: @file ~/documentos/main.go -
Enviar um diretório completo:
Você: @file ~/projetos/minha-aplicacao/
Modos de Uso do Comando @file
O comando @file pode operar em diferentes modos para atender às suas necessidades:
-
Modo Padrão (Full)
- Uso: Projetos pequenos a médios.
- Funcionamento:
- Escaneia o diretório e inclui o conteúdo dos arquivos até atingir os limites do modelo.
- Pode truncar conteúdos se o limite de tokens for excedido.
-
Modo de Chunks (Dividido)
- Uso: Projetos grandes que precisam ser divididos em partes menores.
- Funcionamento:
- Divide o conteúdo em “chunks” (pedaços) gerenciáveis.
- Envia apenas o primeiro chunk inicialmente e armazena os demais.
- Você pode utilizar o comando
/nextchunkpara avançar manualmente entre os chunks.
- Exemplo:
Após o envio do primeiro chunk, a mensagem exibirá:Você: @file --mode=chunked ~/meu-projeto-grande/📊 PROJETO DIVIDIDO EM CHUNKS ============================= ▶️ Total de chunks: 5 ▶️ Arquivos estimados: ~42 ▶️ Tamanho total: 1.75 MB ▶️ Você está no chunk 1/5 ▶️ Use '/nextchunk' para avançar para o próximo chunk =============================
-
Modo de Resumo (Summary)
- Uso: Quando você deseja apenas uma visão geral da estrutura do projeto, sem os conteúdos dos arquivos.
- Funcionamento:
- Retorna informações sobre a estrutura de diretórios, lista de arquivos com tamanhos e tipos e estatísticas gerais.
- Exemplo:
Você: @file --mode=summary ~/meu-projeto/
-
Modo Inteligente (Smart)
- Uso: Análise focada, onde você fornece uma pergunta e o sistema seleciona os arquivos mais relevantes.
- Funcionamento:
- O ChatCLI atribui uma pontuação de relevância a cada arquivo com base na pergunta e inclui somente os mais pertinentes.
- Exemplo:
Você: @file --mode=smart ~/meu-projeto/ Como funciona o sistema de login?
Sistema de Chunks em Detalhes
Para projetos grandes, quando o modo chunked é utilizado:
-
Inicialização dos Chunks:
- O ChatCLI escaneia todo o diretório e divide o conteúdo em múltiplos chunks.
- Cada chunk recebe metadados (ex.: número do chunk, total de chunks).
- Apenas o primeiro chunk é enviado imediatamente, com os demais armazenados para envio subsequente.
-
Navegação entre Chunks:
- Após receber o primeiro chunk, utilize o comando
/nextchunkpara enviar o próximo. - O sistema atualiza o progresso e informa quantos chunks ainda faltam.
- Após receber o primeiro chunk, utilize o comando
-
Tratamento de Falhas:
- Se ocorrer um erro em um chunk, ele é listado separadamente.
- Comandos para gerenciar falhas:
/retry– Tenta novamente o último chunk que falhou./retryall– Retenta todos os chunks com falha./skipchunk– Pula um chunk problemático e continua./nextchunk– Avança para o próximo chunk, mantendo o fluxo.
-
Feedback Visual:
- Cada chunk enviado inclui um cabeçalho detalhado com informações de progresso, como:
📊 PROGRESSO: Chunk 3/5 ============================= ▶️ 2 chunks já processados ▶️ 2 chunks restantes ▶️ 1 chunk com falha ▶️ Use '/nextchunk' para avançar após analisar este chunk =============================
- Cada chunk enviado inclui um cabeçalho detalhado com informações de progresso, como:
Estrutura do Código
O projeto está dividido em pacotes com responsabilidades específicas:
cli: Gerencia a interface de usuário.ChatCLI: Loop principal de interação.CommandHandler: Processa comandos especiais (ex.:/exit,/switch).HistoryManager: Gerencia o histórico de comandos entre sessões.AnimationManager: Controla animações visuais durante o processamento.AgentMode: Implementa o modo agente para execução de comandos.
llm: Comunicação com os provedores de LLM.LLMClient: Interface para os clientes de LLM.OpenAIClient,StackSpotClient,ClaudeAIClient: Clientes específicos.LLMManager: Gerencia os clientes.token_manager.go: Gerencia tokens e suas renovações.
utils: Funções auxiliares.file_utils.go: Processamento de arquivos e diretórios.shell_utils.go: Interação com o shell e histórico.git_utils.go: Informações sobre o Git.http_client.goelogging_transport.go: Clientes HTTP com logging.path.go: Manipulação de caminhos.
models: Estruturas de dados (ex.:Message,ResponseData).main: Inicialização da aplicação e configuração das dependências.
Bibliotecas e Dependências
- Zap – Logging estruturado de alto desempenho.
- Liner – Edição de linha e histórico na CLI.
- Glamour – Renderização de Markdown no terminal.
- Lumberjack – Rotação de arquivos de log.
- Godotenv – Carregamento de variáveis de ambiente.
- Go Standard Library – Diversos pacotes para HTTP, manipulação de arquivos e concorrência.
Integração de Logs
O ChatCLI utiliza o Zap para um logging robusto e estruturado, contando com:
- Níveis Configuráveis: (
debug,info,warn,error). - Rotação de Logs: Gerenciada pelo Lumberjack.
- Sanitização de Dados Sensíveis: Chaves de API, tokens e outros dados críticos são redigidos.
- Multi-Output: Logs exibidos no console e salvos em arquivo.
- Detalhamento de Requisições: Informações completas sobre métodos, URLs, cabeçalhos (com dados sensíveis removidos) e tempos de resposta.
Contribuindo
Contribuições são sempre bem-vindas! Para colaborar:
-
Fork o Repositório.
-
Crie uma Nova Branch:
git checkout -b feature/SeuNomeDeFeature -
Faça Commits com suas Alterações:
git commit -m "Descrição da alteração" -
Envie a Branch para o Repositório Remoto:
git push origin feature/SeuNomeDeFeature -
Abra um Pull Request.
Certifique-se de seguir os padrões do projeto e que os testes estejam passando.
Licença
Este projeto está licenciado sob a Licença MIT.
Contato
Para dúvidas, sugestões ou suporte, abra uma issue no repositório ou acesse:
www.edilsonfreitas.com.br/contato
ChatCLI une a potência dos LLMs com a simplicidade da linha de comando, oferecendo uma ferramenta versátil para interações contínuas com IA diretamente no seu terminal. Aproveite e transforme sua experiência de produtividade!
Boas conversas! 🗨️✨
Documentation
¶
There is no documentation for this package.