Skip to content

Fluxo end-to-end de IA para commits e PRs com GitContext Layer e integração com GitHub App#100

Merged
ualers2 merged 10 commits into
mainfrom
minha-feature3
Oct 5, 2025
Merged

Fluxo end-to-end de IA para commits e PRs com GitContext Layer e integração com GitHub App#100
ualers2 merged 10 commits into
mainfrom
minha-feature3

Conversation

@ualers2
Copy link
Copy Markdown
Owner

@ualers2 ualers2 commented Oct 5, 2025

Descrição

Este PR introduz um fluxo completo que utiliza IA para gerar mensagens de commit a partir de diffs, com suporte a chunks para diffs grandes, multilíngua (pt/en) e saída estruturada, integrado a uma nova Camada de Contexto do Git (Git Context Layer) para análise, soma de chunks e persistência de resultados. Inclui autenticação via GitHub App e tokens de instalação para ações automáticas (PRs/commits) via API, exposição de dados de planos, verificação de signatures de webhooks, e melhorias no fluxo de PRs com suporte a merge via API. Também centraliza mudanças envolvendo IA, tokenização, planos e integrações com o GitHub, além de aprimorar a infraestrutura e as configurações do sistema. Observações sobre prompts de outros agentes são consideradas para evitar quebras no PR.

Este PR consolida mudanças significativas para IA em commits/PRs, integração com GitHub App e a introdução de uma camada local de contexto de Git para automação inteligente, com suporte a testes e configuração avançada.

Mudanças Principais

  • Front-End: Electron Git Genius Commit
    • Nova aplicação Electron que monitora o repositório, detecta diffs, obtém mensagens de commit via IA, realiza commit e push conforme configuração e pode criar PRs automaticamente, com IPC entre renderer/main e bridge via preload.
    • Arquivos impactados: Front-End/git-genius-commit/electron (main.cjs, preload.cjs), .env, .gitignore, README e outros artefatos relacionados.
  • Back-End/Nova Camada Git Context Layer
    • Novo módulo Back-End/git_context_layer.py com: Config (thresholds, time window, auto_push, ai_model, etc.), GitAnalyzer, ChangeTracker e GitContextLayer (orquestrador), preparado para monitorar mudanças locais, aplicar regras e gerar commits com IA.
  • APIs e Integrações
    • /api/commit-messages [GET] e /api/commit-messages/<commit_id> [GET]: listagem e detalhes de commits processados com IA, com metadados, diff, tokens usados e status.
    • /api/prai/gen [POST] e /api/prai/diff_context [POST]: geração de PR/descrições com IA a partir de diffs/contextos, construção de mensagens de commit associadas a um commit específico.
    • /api/github/callback [GET]: callback do GitHub App com fluxo de instalação e OAuth para obtenção de access_token e vinculação de usuários.
    • /webhook/github [POST]: webhook de eventos do GitHub (instalação, PRs, etc.) com processamento em background e auditoria.
  • Configuração e Autenticação
    • GET/PUT /api/settings com autenticação via email/senha e novos campos de configuração (throttleMs, linesThreshold, filesThreshold, timeThreshold, autoPush, AutoCreatePr, commitLanguage, GITHUB_TOKEN).
    • Remoção de decoradores fixos de autenticação em rotas para facilitar integrações com fluxos OAuth/GitHub App.
  • Planos e Dados de API
    • Exposição de dados de planos via provider de dados (conforme Modules.Geters/plans_data.py) para uso na configuração/limites de uso.
  • Observabilidade e Segurança
    • Verificação de assinatura de webhooks (verify_signature) para validação de chamadas externas.
  • Observações de Infraestrutura
    • Pequenas melhorias de infraestrutura e fluxo de CI/CD, incluindo atualização de workflow para suportar o flag de merge no payload.
    • Compatibilidade com prompts de instruções de outros agentes sendo ignorados quando presentes nos diffs.

Notas: este conjunto de mudanças centraliza várias melhorias associadas ao GitContext Layer, IA, tokenização, planos e integrações com o GitHub, incluindo um front-end Electron para uso diário e automação de commits/PRs.

Por que esta mudança?

  • A IA aprimora a qualidade de mensagens de commit e descrições de PR, facilitando revisões e acelerando o ciclo de entrega.
  • A integração com GitHub App permite automação de fluxos de autenticação e ações (PRs/commits) com mais robustez e segurança, sem depender apenas de credenciais manuais.
  • A Git Context Layer oferece uma base local para monitorar mudanças, aplicar regras de triggering com thresholds e gerar commits com IA, com suporte a testes, push automático e configuração granular.
  • Configurações ricas (throttle, limites, idioma de commit) permitem adaptar o comportamento da aplicação às necessidades da equipe, mantendo flexibilidade e segurança.

Impactos esperados:

  • Fluxos de IA em commits/PRs mais previsíveis e automáticos.
  • Maior automação com integração direta a GitHub App.
  • Configurações adicionais para ajustar comportamento sem alterações de código.
  • Manutenção mais simples com uma camada dedicada de contexto de Git.

Como testar

  • Cenário de commits IA e PRs com IA
    1. Garantir o backend disponível em http://localhost:5910 (ou conforme configuração local) e iniciar o serviço (instalar dependências com Back-End/requirements.txt).
    2. Preparar o Front-End Electron: entrar em Front-End/git-genius-commit, instalar dependências (npm install) e configurar OPENAI_API_KEY (ou fluxo equivalente).
    3. Iniciar a aplicação Electron e conectar a um repositório Git de teste; editar arquivos para disparar mudanças sinalizáveis.
    4. Verificar na UI a detecção de mudanças, a geração de mensagem de commit via IA e a criação do commit (e push, se configurado) e, opcionalmente, a criação de PR automática.
  • Cenário de APIs e Fluxo IA
    1. GET /api/commit-messages?limit=20&searchTerm= com autenticação válida; confirmar lista de commits gerados pela IA.
    2. GET /api/commit-messages/{commit_id} para detalhes completos.
    3. POST /api/prai/gen com payload de repository e pr_number (opcional) para gerar descrição/PR via IA; confirmar fila de processamento.
    4. POST /api/prai/diff_context com diff/arquivos/hash/language para validar geração de mensagens de commit associadas a um commit.
  • GitHub App e Webhooks
    1. Simular callback de instalação via /api/github/callback?installation_id=XYZ ou /api/github/callback?code=<oauth_code> com credenciais configuradas; observar vinculação e armazenamento.
    2. Enviar webhook para /webhook/github com payload apropriado e assinatura válida; verificar logs e updates nas configurações de usuário.
  • Configurações
    1. GET /api/settings?email=...&password=... para autenticar e retornar configurações, incluindo novos campos (GITHUB_TOKEN, throttleMs, commitLanguage, etc.).
    2. PUT /api/settings com JSON contendo email, password e campos atualizados (throttleMs, linesThreshold, filesThreshold, timeThreshold, autoPush, AutoCreatePr, GITHUB_TOKEN, commit_language) e confirmar atualização.
  • Git Context Layer
    1. Executar a aplicação com o módulo git_context_layer.py disponível; ajustar config via .gitcontext.json e observar logs de inicialização e thresholds.
    2. Validar que, ao atingir thresholds simulados, o fluxo opera conforme esperado (processamento e geração de commits/descrições via IA).
  • Observabilidade
    1. Simular falha de API e observar mensagens de erro via IPC.
    2. Verificar que o hash de payload e a janela de throttle evitam reprocessamentos desnecessários.

Observações Adicionais (Opcional)

  • Dependências: Anthropic, python-dotenv, e bibliotecas HTTP já existentes; configurar variáveis de ambiente (GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, GITHUB_WEBHOOK_SECRET, OPENAI_API_KEY, etc.).
  • Fluxos de autenticação foram ajustados para suportar fluxos OAuth/GitHub App; revisar rotas e contratos de API para ensure compatibilidade com clientes autenticados via token/associação.
  • Este PR é grande e envolve mudanças em autenticação, configuração e novos fluxos IA; recomenda-se checagem focada em segurança de autenticação, callbacks e impactos de configuração.

Se houver necessidade de alinhamento com políticas internas, sugiro discutir ajustes na documentação de endpoints e nos contratos de payloads antes do merge.

ualers2 added 10 commits October 3, 2025 14:09
undefined
undefined
undefined
undefined
undefined
…ext API' body='- Backend: Added asyncio import and switched the GenerateCommitMessageAgent invocation to asyncio.run(...). This enables non-blocking, asynchronous generation of the commit message within the existing sync API path.\n- Backend-Frontend API contract: Frontend now calls the diff_context endpoint at /api/prai/diff_context instead of /api/prai/gen, aligning with the new backend route.\n- Frontend: Updated response handling to use result.commit_message as the source for the commit message, instead of assembling from subject/body.\n- Frontend: Small code cleanup across several UI files (ConfigPanel.tsx, RepositorySelector.tsx, useGitOperations.ts, Index.tsx) involving minor comment/whitespace removals for clarity.\n- Rationale: Improve non-blocking behavior for AI-driven commit message generation and synchronize frontend with the updated backend API and response shape. This reduces coupling and ensures the UI renders the generated commit message correctly.\n- Notes: Ensure the Python environment supports asyncio.run (Python 3.7+). No user-facing changes beyond the updated API and message handling.'
What I changed
- Back-End/api.py: Adapted to use a structured AI commit output. GenerateCommitMessageAgent now returns an object with subject and body; the code builds the final commit_message from commit_output.subject and commit_output.body. This enables richer, well-formed commit messages instead of a flat string.
- Front-End/electron/main.cjs: Reworked Git command handling for robustness and UX:
  - Added enhanced logging and error handling for git subprocesses.
  - Introduced ensureGitUserConfigured to automatically set a local Git user.name/user.email if missing, using env vars or sensible defaults.
  - Improved executeCommit workflow: verify there are changes, add all, attempt commit, and if identity issues arise, configure locally and retry once. Supports optional push.
  - Minor adjustments to subprocess close handling to surface meaningful errors.
- Front-End/electron/preload.cjs: Minor cleanup of a header comment to reflect current state (no functional change).
- Front-End/git-genius-commit/src/pages/Index.tsx: Added auto_commit to the default config, enabling automatic commits by default.
- Front-End/git-genius-commit/src/types/git.ts: Extended GitConfig with auto_commit: boolean to reflect new capability.

Why
- Structured AI commit messages improve readability and tooling support by separating subject and body.
- Robust Git workflow reduces failures due to missing user configuration or no-change states, and provides a smoother UX with automatic config and optional push.
- Default behavior now includes auto-commit, with a corresponding type flag, making the feature easily controllable from the UI.

Impact
- No breaking API changes for existing clients; the backend now returns a structured object but preserves the overall API surface for commit_message. Front-end changes mainly add resilience and new configuration options.
- The new local Git user configuration prevents common commit failures when the environment lacks global user settings.
- The UI will now reflect an auto_commit option and can be toggled via the existing configuration flow.
What I changed
- Front-End: Electron main process (
  Front-End/git-genius-commit/electron/main.cjs
  )
  - Introduced a robust in-flight guard (monitoringState.inFlight) to prevent concurrent analyzeAndCommit invocations.
  - Added payload deduplication and throttling:
    - computeHash function to generate a stable hash for payloads (diff + modified files).
    - lastPayloadHash and lastAnalysisTimestamp tracking, plus throttle_ms (60 seconds) to avoid re-sending identical payloads too frequently.
    - Skip duplicate payloads within the throttle window.
  - Enhanced analyzeAndCommit with concurrency control, deduplication, and improved error handling.
  - Implemented a multi-URL-safe hash approach: Node crypto -> Web Crypto -> FNV-1a fallback to ensure a hash in diverse environments.
  - Updated startMonitoring and periodic checks to honor inFlight and dedupe logic.
  - Ensured finally block resets inFlight to false regardless of success or failure.
- Front-End: Config panel default change (
  Front-End/git-genius-commit/src/components/ConfigPanel.tsx
  )
  - Set default auto_commit to true in the payload built for the config, aligning with new auto-commit behavior.
- Front-End: Typings clean-up (
  Front-End/git-genius-commit/src/types/git.ts
  )
  - Minor trailing whitespace cleanup to keep typings clean.
- Back-End: Minor formatting fix in API file (
  Back-End/api.py
  )
  - Removed an extra blank line near diff_context input parsing for consistency.

Why
- Prevent race conditions and excessive API calls when the monitor detects rapid changes or quick successive diffs.
- Ensure that identical payloads (diff + modified files) aren’t re-sent within a configurable window, reducing unnecessary API usage and improving stability.
- Provide a resilient hashing mechanism that works across environments (Node.js crypto, browser Web Crypto, or a deterministic fallback).
- Align UI defaults with new automatic commit behavior to improve user experience by reducing manual steps.

Notes
- The computeHash function is asynchronous and used to deduplicate payloads before making API requests.
- In-flight state is reset in a finally block to avoid leaving the monitor in a stuck state after errors.
- No breaking changes to the API on the back end; the changes are primarily on the client-side orchestration to optimize requests and concurrency.
What: Repositioned the ConfigPanel from the left column to the right column in Front-End/git-genius-commit/src/pages/Index.tsx. The component is now rendered alongside the diff/commit area and the manual analyze control, instead of in the left pane.

Why: To place configuration controls closer to the commit workflow, improving accessibility while reviewing diffs and preparing commits. The ConfigPanel still receives the same config prop and onSave handler; no behavioral changes to the component were introduced.

Impact: Only the UI layout changed for the Index page; no logic changes or new dependencies were added. The ConfigPanel remains intact and functional with the existing config and save workflow.
Este commit consolida uma série de melhorias no pipeline de geração de commits, abrangendo suporte multilíngua, persistência de commits, APIs expandidas, fluxo de PR automático, integração frontend/backend, e normalização de configuração. Abaixo os pontos-chave e o objetivo de cada mudança:

O que foi feito
- Backend e persistência de commits
  - Criação do modelo CommitMessage no Back-End/Models/postgreSQL.py com campos como id, user_id, title, author, commit_hash, message, ai_generated_message, original_diff, total_tokens, status, pr_linked_id, created_at, processed_at, processed_by, error_message, além de relacionamento com PullRequest.
  - PullRequest enriquecido para associar commits; novos campos de settings refletidos no modelo SystemSettings.
  - Nova camada de persistência que suporta armazenar mensagens geradas por IA, diffs originais, tokens consumidos e estado de processamento, preparando o caminho para auditoria e reuso de mensagens.
  - Motivo: habilitar rastreabilidade completa das mensagens de commit geradas por IA e facilitar fluxos de integração com PRs e histórico de alterações.

- API expandidas e configuração centralizada
  - API expõe throttle_ms, lines_threshold, files_threshold, time_threshold, auto_push, auto_create_pr, commit_language, auto_process_prs. Endpoints GET /api/settings (get_settings) e PUT/PATCH para atualizar settings.
  - Novos endpoints para commits: GET /api/commit-messages (lista paginada com busca) e GET /api/commit-messages/<commit_id> (detalhes do commit).
  - Novo fluxo de diff_context/pré-processamento que utiliza diff_context via process_git_context_layer para gerar backlog de commits com base no idioma e hash do commit; payload inclui language e hash; remoção da dependência direta de GenerateCommitMessageAgent nesse caminho; suporte a criação automática de PR no fluxo de análise.
  - Motivo: oferecer visibilidade, controle de configuração e integração entre componentes sem acoplamentos rígidos, além de suportar operações de IA de forma mais previsível.

- Fluxo de diff/contexto e PRs
  - Diff context reestruturado para gerar backlog de commits com base no idioma (commit_language) e hash, com envio de payload adequado ao backend. Implementação orientada a configuráveis endpoints e fluxo de PR automático.
  - Validação de merge expandida no backend para aceitar strings booleanas ou booleanos reais, assegurando comportamento consistente no fluxo de PR.
  - Motivo: aumentar robustez e automação do ciclo de vida de PRs, reduzindo intervenções manuais.

- Frontend e Electron / fluxo de configuração
  - Atualização massiva de front-end (Electron) para suportar fetch seguro, autenticação por token, carregamento dinâmico de configurações via /api/settings e propagação de commitLanguage/auto_create_pr no fluxo de diff_context.
  - Implementação de createPullRequest no frontend com uso da API do GitHub (token), incluindo configuração de título/corpo do PR e detecção de upstream para push automático quando necessário.
  - Monitoramento e estado de configuração: monitoramentoState.config passou a armazenar configurações normalizadas; startMonitoring persiste config normalizada; shouldTrigger/analyze/commit passam monitoringState.config para garantir consistência.
  - Adição da página CommitMessages, rota /commits e navegação no sidebar;
    integração com a nova API de commits e com o fluxo de PR automatizado.
  - Novas interfaces de credenciais via Electron IPC: set-token, set-email, set-password no processo principal; preload expõe sendToken, sendEmail, sendPassword paraRenderer.
  - Normalização de configuração com fallback backward-compatible: normalizeConfig centraliza lines_threshold, files_threshold, time_threshold, auto_push, auto_create_pr, api_endpoint, commitLanguage, GITHUB_TOKEN e força auto_commit para true.
  - Motivo: assegurar uma experiência de usuário coesa, segura e estável, com configurações consistentes entre frontend e backend, além de permitir fluxos de PR automatizados com idioma específico.

- Geração de PDFs de faturas
  - generate_invoice_pdf.py teve layout simplificado (removido cabeçalho informativo, itens e linha de total no topo), mantendo informações essenciais da fatura.
  - Motivo: simplificar o layout de PDFs mantendo as informações críticas.

- Workflows, testes e build/dev
  - Workflow de PR (pr.yml) atualizado para enviar merge: "False" ao gerar/relacionar PR via API, mantendo consistência com novos parâmetros de controle de mescla.
  - TestDiscovery: URL de registro alterada para localhost (http://localhost:5910/api/register) para ambiente de desenvolvimento.
  - Build/dev: build.py agora usa docker-compose up --build -d (sem especificar serviço), abrindo para todos os serviços.
  - Docker Compose: volumes de bind mounts para Front-End/webpr:/app e Back-End:/app comentados/removidos; passagem para dependência de imagens, reduzindo dependência de código local durante build/deploy.

- Dependências, tipagem e UI
  - Atualizações abrangentes de dependências no lockfile, incluindo React types (de 18.3.24 para 18.3.25), axios, Electron builder, e diversas bibliotecas de build/dev; suporte a novas ferramentas de packaging (Electron), fetch, and utilities de rede e validação.
  - Front-end: adicionadas dependências node-fetch e simple-git nos pacotes Front-End/git-genius-commit; App.tsx reestruturado com AppRoutes e AuthProvider; ConfigPanel, StatusMonitor, useGitOperations, types/git.ts, index.css e outras partes do frontend atualizadas para refletir o novo fluxo de configuração e autenticação.
  - Nova página CommitMessages no Front-End/webpr, com rota dedicada; atualização do sidebar para incluir Commits.
  - Observabilidade UI: StatusMonitor agora exibe tokens de uso e consulta backend via /api/dashboard-data com X-API-TOKEN, atualizando a cada 30s.
  - Observação sobre qualidade: melhorias de logs, renomeação de módulos (git_contex_layer_process) para refletir novos fluxos de processamento de contexto de git, e correção de possíveis falhas de runtime indicadas (ex.: typo na confi).

- Nota sobre migração e impacto
  - Este é um refator grande que introduz modelos de dados, endpoints e fluxos de processamento novos. Pode exigir migrações de banco de dados para criar CommitMessage e updates em PullRequest. A normalização de configuração facilita futuras evoluções sem quebrar clientes mais antigos, com defaults conservadores.
  - Caso haja ambiente com armazenamento de mensagens de IA, há agora suporte para auditoria, buscas e detalhamento de commits com linguagem específica e hash de commit.

Resumo de benefício
- Fluxo de commits mais inteligente e acessível: suporte multilíngua, geração de mensagens de commit coerentes, e integração automática com PRs.
- Maior visibilidade e controle via API de settings e commit messages, com histórico e detalhes dos commits gerados.
- Frontend/backend integrados com autenticação tokenizada, configuração centralizada, e uma experiência de usuário mais fluida (incluindo nova página de Commits).
- Melhoria de qualidade de código e infraestrutura com limpeza de fluxo, logs mais descritivos, e ajustes de build/deploy para ambientes modernos.
@ualers2 ualers2 changed the title Melhora pipeline de commits: multi-idioma, API e PR automatizado Fluxo end-to-end de IA para commits e PRs com GitContext Layer e integração com GitHub App Oct 5, 2025
@ualers2 ualers2 merged commit 1058990 into main Oct 5, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant