Pular para o conteúdo principal

Contribuir

Pull requests são bem-vindos, e não há convite nenhum para esperar. Este é um projeto pequeno; o que é útil normalmente não é uma funcionalidade grande, e sim uma linha numa tabela, uma frase numa tradução, ou um relato de bug detalhado o bastante para se agir.

As contribuições mais úteis​

Uma linha na tabela de modelos. Testar um modelo é uma tarefa fixa de cinco minutos. A tabela é curta porque só contém modelos que alguém executou, e um resultado negativo vale tanto quanto um positivo — ninguém publica sobre o modelo que não funcionou, então todo mundo redescobre.

Uma tradução, ou uma linha de correção em uma. Vêm dez. Qualquer uma pode ser corrigida frase a frase sem tocar no resto — veja Idiomas. Um idioma novo é um único arquivo JSON.

Um relato de bug com as quatro coisas. O modelo e o provedor escritos com exatidão (qwen3-coder:30b no Ollama, não «um modelo local»), o que você pediu, o que aconteceu, e cinquenta linhas de ~/.opencli/log em volta da falha. Confira se há chaves nessas linhas antes de colar.

Contar para a gente o que você realmente queria fazer. Os departamentos e habilidades que já vêm foram escritos a partir de palpites sobre o que as pessoas precisam. O que você procurou e não achou é a coisa mais útil que você pode dizer.

Antes de escrever código​

Abra um issue primeiro para qualquer coisa maior que uma correção. Não como portão — e sim para combinar a abordagem antes de você gastar uma noite nela. Um PR que chega sem issue por trás continua sendo lido.

Montar o ambiente​

Rust e pnpm; o workspace é opencli-rs/, a interface web é web/ e a casca de desktop é desktop/.

git clone https://github.com/ai-dashboad/opencli
cd opencli
pnpm install
cargo build -p opencli-cli

just na raiz do repositório roda os auxiliares do workspace; just help lista eles.

Antes de abrir o PR​

just fmt
just fix -p <crate>
cargo test -p <crate>

Não rode um cargo fmt pelado. A árvore é formatada com imports_granularity=Item, que é uma opção só de nightly. No stable essa opção é silenciosamente ignorada, então o cargo fmt reescreve o bloco de imports de quase todo arquivo do workspace e enterra a sua mudança em centenas de diffs sem relação. O just fmt chama o nightly exatamente por isso. Sem uma toolchain nightly (rustup toolchain install nightly), formate só os arquivos que você tocou e deixe a CI confirmar o resto.

Se você mexeu na interface web, python3 scripts/i18n-check.py encontra o inglês que nunca foi envolvido para tradução, incluindo os casos fáceis de passar batido, como texto partido por uma tag inline e rótulos construídos na hora do import.

O que faz um PR ser fácil de mesclar​

  • Uma coisa só. Correções sem relação vão em PRs separados.
  • Um teste que falha antes da sua mudança e passa depois. Não cobertura total — uma asserção que teria pego o bug.
  • Commits que compilam um a um. É o que torna revisão e reversão possíveis.
  • Documentação, se o comportamento mudou. O README, o opencli --help, ou a página daqui que agora está errada.
  • O quê, por quê e como na descrição. O por quê é a parte que não se lê no diff.

Sem CLA​

Não há nada para assinar. As contribuições ficam sob Apache-2.0, como o resto da árvore.

Relatar uma vulnerabilidade​

Não abra um issue público para uma falha de segurança. Use o formulário de aviso privado do GitHub, que chega aos mantenedores sem publicar nada.

As partes que mais valem o olhar: a política do sandbox, o caminho de aprovação, e tudo o que decide o que uma chamada de ferramenta pode tocar. Um agente que lê os seus arquivos e executa comandos na sua máquina tem muita superfície, e é melhor que você o encontre do que outra pessoa.

Ser decente com isso​

Trate as pessoas com respeito; seguimos o Contributor Covenant. Presuma boa intenção — comunicação escrita é difícil, então incline para a generosidade. Se alguma coisa está confusa, isso já merece um issue por si só: documentação confusa é um bug da documentação.