Git Hooks
O AIDF inclui git hooks que validam seu fluxo de trabalho automaticamente no momento do commit e do push.
O que os Hooks Fazem
Seção intitulada “O que os Hooks Fazem”| Hook | Propósito |
|---|---|
pre-commit | Valida arquivos staged contra escopos de tasks ativas (caminhos proibidos) |
commit-msg | Valida formato de mensagem de commit convencional |
pre-push | Executa comandos de validação configurados (lint, typecheck, testes) |
Início Rápido
Seção intitulada “Início Rápido”# Install hooks (auto-detects husky if present)aidf hooks install
# Remove hooksaidf hooks uninstallMétodos de Instalação
Seção intitulada “Métodos de Instalação”Git Hooks Diretos
Seção intitulada “Git Hooks Diretos”Se seu projeto não usa husky ou pre-commit, o AIDF instala hooks diretamente em .git/hooks/:
aidf hooks installIsso cria scripts executáveis em .git/hooks/pre-commit, .git/hooks/commit-msg e .git/hooks/pre-push.
Use --force para sobrescrever hooks existentes:
aidf hooks install --forceIntegração com Husky
Seção intitulada “Integração com Husky”O AIDF detecta automaticamente o husky verificando:
- Um diretório
.husky/ huskynas dependências dopackage.json- Um script
preparecontendohusky
Quando o husky é detectado, os hooks são instalados em .husky/ em vez de .git/hooks/.
Você também pode forçar o modo husky:
aidf hooks install --huskyConfigurando husky do zero
Seção intitulada “Configurando husky do zero”Se seu projeto ainda não tem husky:
npm install --save-dev huskynpx husky initaidf hooks install --huskyExemplo: husky + lint-staged + AIDF
Seção intitulada “Exemplo: husky + lint-staged + AIDF”Uma configuração comum combina husky, lint-staged e hooks do AIDF:
{ "scripts": { "prepare": "husky" }, "lint-staged": { "*.{ts,tsx}": ["eslint --fix", "prettier --write"], "*.{json,md}": ["prettier --write"] }}.husky/pre-commit:
npx lint-staged# AIDF - scope and format validationnpx aidf-hook-pre-commitQuando o AIDF detecta hooks existentes, ele adiciona sua validação ao final em vez de substituir o arquivo.
Framework pre-commit (Python)
Seção intitulada “Framework pre-commit (Python)”Para projetos que usam o framework pre-commit:
aidf hooks install --pre-commitIsso gera um .pre-commit-config.yaml (ou adiciona a um existente):
repos: - repo: local hooks: - id: aidf-scope-check name: AIDF Scope Validation entry: npx aidf-hook-pre-commit language: system always_run: true - id: aidf-commit-msg name: AIDF Commit Message Format entry: npx aidf-hook-commit-msg language: system stages: [commit-msg]Em seguida, ative com:
pre-commit installDetalhes dos Hooks
Seção intitulada “Detalhes dos Hooks”pre-commit: Validação de Escopo
Seção intitulada “pre-commit: Validação de Escopo”O hook pre-commit lê todos os arquivos de task ativos (não concluídos) em .ai/tasks/ e verifica os arquivos staged contra seus padrões de caminhos proibidos.
O comportamento depende da configuração scopeEnforcement em .ai/config.yml:
| Modo | Comportamento |
|---|---|
strict | Bloqueia o commit se algum arquivo staged corresponder a um padrão proibido |
ask | Mostra um aviso mas permite o commit |
permissive | Pula a validação completamente |
commit-msg: Validação de Formato
Seção intitulada “commit-msg: Validação de Formato”Valida que as mensagens de commit seguem o Conventional Commits:
type(scope?): descriptionTipos válidos: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
Exemplos:
feat: add user authenticationfix(api): resolve timeout issuedocs: update READMErefactor(auth): simplify token validationCommits de merge e revert são permitidos sem validação.
O hook também avisa (mas não bloqueia) se o cabeçalho exceder 72 caracteres.
pre-push: Comandos de Validação
Seção intitulada “pre-push: Comandos de Validação”Executa comandos de validação do .ai/config.yml antes de fazer push:
validation: lint: npm run lint typecheck: npm run typecheck test: npm run testSe algum comando falhar, o push é bloqueado.
Desinstalação
Seção intitulada “Desinstalação”aidf hooks uninstallIsso remove apenas hooks gerados pelo AIDF. Se o AIDF foi adicionado a um hook husky existente, apenas o bloco do AIDF é removido.