Skip to content

Latest commit

 

History

History
226 lines (157 loc) · 5.52 KB

File metadata and controls

226 lines (157 loc) · 5.52 KB

Auto-Capture Inteligente (#11)

Visão Geral

O Auto-Capture é um sistema inteligente que captura automaticamente o estado do seu projeto em momentos chave do desenvolvimento, sem intervenção manual. O sistema funciona em dois modos complementares:

  1. Git Hooks - Capturas automáticas em eventos Git (sempre ativo após instalação)
  2. Daemon de Monitoramento - Capturas baseadas em mudanças de arquivos (opcional)

Configuração

A configuração do auto-capture está no arquivo .diary/config/manifest.yaml:

auto_capture:
  enabled: true     # Habilita/desabilita todas as features de auto-capture

  # Git hooks auto-capture
  git_hooks:
    post_commit: true     # Captura após cada commit
    post_merge: true      # Captura após merges
    post_checkout: true   # Captura ao trocar de branches

  # Daemon file watcher (opcional)
  daemon:
    min_interval_seconds: 300   # Intervalo mínimo entre capturas (5 min)
    min_changes: 10              # Mudanças mínimas para disparar captura
    watch_extensions:            # Extensões de arquivo monitoradas
      - .py
      - .js
      - .ts
      # ... (veja arquivo completo)

Modo 1: Git Hooks

Como Funciona

Após a instalação (local/install.sh), hooks Git são automaticamente instalados em .git/hooks/:

  • post-commit - Captura após cada git commit
  • post-merge - Captura após git merge ou git pull
  • post-checkout - Captura ao trocar branches (git checkout)

Características

Vantagens:

  • Sempre ativo (não requer daemon rodando)
  • Zero overhead quando não está commitando
  • Capturas bem contextualizadas (mensagem de commit, branch, etc.)
  • Execução em background (não bloqueia git)

⚠️ Limitações:

  • Só captura em eventos Git
  • Não captura mudanças que não são commitadas

Funcionamento Interno

Os hooks executam .diary/capture.sh em background:

# Exemplo: post-commit hook
#!/bin/bash
if [ -x .diary/capture.sh ]; then
    (.diary/capture.sh "Auto-capture (post-commit)" &)
fi

O & garante execução não-bloqueante.

Modo 2: Daemon de Monitoramento

Como Funciona

O daemon monitora o sistema de arquivos usando a biblioteca watchdog e dispara capturas quando:

  1. Pelo menos min_changes arquivos foram modificados (padrão: 10)
  2. Pelo menos min_interval_seconds se passaram desde a última captura (padrão: 300s / 5min)

Comandos

# Iniciar daemon
.diary/daemon.sh start

# Verificar status
.diary/daemon.sh status

# Parar daemon
.diary/daemon.sh stop

# Reiniciar daemon
.diary/daemon.sh restart

Características

Vantagens:

  • Captura mudanças mesmo sem commits
  • Ideal para sessões longas de desenvolvimento
  • Configurável (intervalo, número de mudanças, extensões)

⚠️ Limitações:

  • Requer daemon rodando
  • Consome recursos (mínimo, mas presente)
  • Pode capturar em momentos "intermediários"

Logs

Os logs do daemon ficam em .diary/logs/daemon.log:

# Ver logs em tempo real
tail -f .diary/logs/daemon.log

Fluxo de Captura

Quando uma captura é disparada (por hook ou daemon):

  1. Coleta de Contexto - ContextCollector coleta:

    • Info Git (branch, commit, diff)
    • Arquivos modificados recentemente
    • TODOs no código
    • Processos em execução
  2. Anonimização - DataAnonymizer remove dados sensíveis

  3. Armazenamento Local - Entrada salva em .diary/data/entries/

  4. Auto-Indexação - Entrada indexada para busca semântica (se disponível)

  5. Upload - Enviado ao orquestrador cloud (se configurado)

Integração com Busca Semântica

Capturas automáticas são automaticamente indexadas para busca semântica local:

# Buscar capturas de auto-commit
.diary/search.sh "refactoring authentication"

# Buscar por branch
.diary/search.sh --branch feature/auth "JWT implementation"

Troubleshooting

Git hooks não estão sendo executados

# Verificar se hooks existem e são executáveis
ls -la .git/hooks/post-commit
ls -la .git/hooks/post-merge
ls -la .git/hooks/post-checkout

# Reinstalar hooks
./local/install.sh

Daemon não inicia

# Verificar dependências
python3 -c "import watchdog; print('OK')"

# Se falhar, instalar:
pip install watchdog

# Verificar logs
cat .diary/logs/daemon.log

Capturas não estão sendo salvas

# Verificar se diretórios existem
ls -la .diary/data/entries/

# Verificar última captura
cat .diary/cache/last_capture.json

Desabilitando Auto-Capture

Temporariamente

# Desabilitar no manifest
# .diary/config/manifest.yaml
auto_capture:
  enabled: false

Permanentemente

# Remover git hooks
rm .git/hooks/post-commit
rm .git/hooks/post-merge
rm .git/hooks/post-checkout

# Parar daemon
.diary/daemon.sh stop

Performance

O auto-capture foi projetado para ter impacto mínimo:

  • Git hooks: ~0-2s em background (não bloqueia)
  • Daemon: ~50MB RAM, <1% CPU quando monitorando
  • Capturas: ~100-500KB por entrada (comprimido)

Melhores Práticas

  1. Para desenvolvimento ativo: Use ambos (hooks + daemon)
  2. Para CI/CD: Use apenas hooks (daemon não necessário)
  3. Para laptop com bateria limitada: Use apenas hooks
  4. Revise periodicamente: .diary/search.sh --recent 20

Próximos Passos