Pular para o conteúdo
Menu

Produto

Soluções

Integrações

Desenvolvedores

Idioma

Desenvolvedores

Contribua com o ai-memory

101 pessoas já colocaram código no projeto. Esta página leva você de uma ideia até a issue certa, o crate certo e um pull request que passa no review de primeira.

Faça o build funcionar

O build é autocontido. Nenhum destes comandos precisa de variável de ambiente.

  1. Clone e compile

    O Rust 1.95 é obrigatório e está fixado no rust-toolchain.toml, com rustfmt e clippy, então o rustup instala a toolchain certa no primeiro build. O SQLite vem embutido e a libgit2 é vendorizada. Você precisa de uma toolchain C padrão e mais nada.

    setup de dev
    git clone https://github.com/akitaonrails/ai-memory
    cd ai-memory
    cargo build --workspace
    cargo test --workspace --all-targets
    
  2. Use o loop do dia a dia

    cargo t precisa do nextest: cargo install cargo-nextest --locked. Ele pula os módulos chamados slow ou stress, que o hook de pre-push e o CI rodam mesmo assim.

    enquanto você trabalha
    cargo t                        # tudo menos o tier lento, ~20s com cache quente
    cargo t -p ai-memory-store     # um crate: compila só os binários de teste dele
    cargo t -E 'test(/purge/)'     # um assunto (compila tudo, roda um subconjunto)
    
  3. Instale o hook de pre-push

    Uma vez por clone. Ele só mexe no próprio bloco dentro de .git/hooks/pre-push. Em um branch de trabalho em andamento, git push --no-verify pula o hook.

    uma vez por clone
    scripts/install-git-hooks.sh
    
  4. Passe nos gates antes do push

    O CI exige os cinco. Sem o nextest, cargo test --workspace --all-targets equivale a cargo tf. Se o último estiver faltando: cargo install cargo-deny cargo-audit.

    gates obrigatórios
    cargo fmt --all -- --check
    git diff --check
    cargo clippy --workspace --all-targets -- -D warnings
    cargo tf                            # todos os testes (alias: cargo nextest run -P full)
    cargo deny check                    # política de dependências
    
  5. Confira quem seus commits dizem que você é

    Use um email verificado na sua conta do GitHub ou o endereço noreply dela. O histórico da main nunca é reescrito para corrigir autoria.

    autoria dos commits
    git log --format='%h %an <%ae>' "$(git merge-base HEAD origin/main)"..HEAD
    

Regras básicas e o critério de aceitação

O AGENTS.md é o arquivo de regras canônico, para pessoas e para agentes de código. O CONTRIBUTING.md condensa tudo nisto.

Como se espera que o trabalho chegue

  • O changelog é um gate de merge

    Toda mudança visível para o usuário adiciona uma entrada em [Unreleased] no mesmo pull request. Os revisores tratam entrada faltando como bloqueio. Refactors e mudanças só de teste ficam isentos.

  • Testes antes do “pronto”

    O trabalho conta como pronto quando tem testes, principalmente parsers, derivação de IDs e a matemática de retenção.

  • Sem código morto, sem feature pela metade

    Stubs são documentados no comentário do módulo, com o milestone que vai terminá-los.

  • Fique dentro da mudança

    Não refatore código de que o milestone atual não precisa.

  • Comentários explicam o porquê

    Um comentário que repete a linha de cima é removido.

Invariantes que um pull request não pode quebrar

  • Todas as escritas no SQLite passam pelo único writer actor, o WriterHandle.
  • A config é lida uma vez na inicialização. Nada de std::env::var fora de Config::load.
  • Escritas em arquivo são atômicas: tmp, rename, fsync. Nunca in place.
  • Toda página da wiki tem namespace (workspace_id, project_id).
  • A CLI é um cliente HTTP fino. Ela nunca abre o arquivo SQLite nem o diretório da wiki.

A lista completa, com o bug que cada uma evita, está no AGENTS.md

Um mapa da base de código

Dez crates vão no binário. Cada um tem uma responsabilidade e uma API tipada, e não há dependências circulares.

Diagrama: os crates em quatro camadas. O crate cli fica no topo. Abaixo dele estão hooks, mcp, web, consolidate e workstream. Abaixo desses estão store, wiki e llm. O crate core é a fundação embaixo de tudo.
Nomes dos crates sem o prefixo ai-memory-. Tudo depende do core, e só o crate cli depende de tudo.
CrateO que mora lá
ai-memory-coreTipos de domínio, erros e ids. Sem IO.
ai-memory-storeSQLite, o writer actor, o pool de leitores e a matemática de decaimento.
ai-memory-wikiEscritas atômicas de markdown, o file watcher e o git.
ai-memory-mcpO transporte MCP, o roteador de ferramentas e as rotas de admin.
ai-memory-hooksSchemas de payload dos hooks, o sanitizador e o endpoint /hook.
ai-memory-llmA fronteira de autenticação dos provedores e as traits de LLM e de embedder.
ai-memory-consolidateIngestão, lint, sweep e o pipeline de auto-improve.
ai-memory-webO navegador somente leitura em /web e as rotas JSON de /api/v1.
ai-memory-workstreamLeitores somente leitura de transcripts nativos e os adapters de abertura por trás do ai-memory run.
ai-memory-cliO binário ai-memory e seus subcomandos HTTP finos.

Fora de crates/

DiretórioO que mora lá
companions/ai-memory-importer, um pacote standalone fora do workspace raiz. Compile com --manifest-path.
hooks/Pacotes de hooks de ciclo de vida, uma pasta por agente, em shell e nativos.
evals/O harness de benchmark. É membro do workspace e nunca é distribuído.
docs/Arquitetura, decisões de design e guias de instalação, deploy e uso.
tests/Smoke tests de ponta a ponta, testes de shell dos hooks e fixtures.

Os testes de integração ficam em tests/suite/ dentro de cada crate. Helpers compartilhados entre crates vão em crates/ai-memory-test-support, que nunca é distribuído.

Como os pull requests são revisados

Os reviews seguem o template de pull request, então preencher com honestidade é a maior parte do trabalho.

  • O template é o checklist

    Ele pede o que mudou, por quê, um plano de testes com os gates marcados, autoria dos commits, impacto na release e a entrada do changelog.

  • Diga que tipo de release é

    Marque patch, minor ou major. Uma correção registrada em “Added” pode subir a versão errada, então coloque a entrada do changelog sob o título certo.

  • Breaking changes esperam uma major

    Destaque na descrição. Elas recebem o label breaking-change e são agendadas, então não seguram as releases de patch e minor.

  • O CI é rápido por merge

    Um merge depende dos jobs rápidos de Linux. As etapas de macOS e Windows rodam por label, toda noite ou na mão, e sempre antes de uma release.

  • Correções saem primeiro

    Um bug fix sai na próxima release de patch e não fica esperando trabalho de feature. Um harness ou provedor novo sai na próxima minor.

Um pull request de harness roda este gate mais curto, registra a versão da CLI contra a qual foi testado e inclui uma rodada manual contra o harness real.

de managed-harness-contributions.md
cargo fmt --check
git diff --check
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings

Experimente antes de mudar.

Rode nos seus próprios projetos por um dia. O bug que você achar é a sua primeira issue.