Questa nuova funzionalità permette al bot di gestire aggiornamenti alle Pull Request esistenti quando viene menzionato nei commenti di una PR.
- Un utente menziona il bot in una issue o in un commento di una issue
- Il bot analizza la issue, crea un branch e implementa le modifiche
- Il bot crea una nuova Pull Request con le modifiche
- Un utente menziona il bot in un commento di una PR esistente con istruzioni di modifica
- Il bot analizza il contesto della PR (descrizione, commenti, diff corrente, issue linkata)
- Il bot fa checkout del branch della PR esistente
- Il bot implementa le modifiche richieste basandosi sul feedback
- Il bot aggiorna la PR esistente pushando le modifiche sul branch esistente
- Template Handlebars per il contesto delle PR
- Supporta placeholder per tutti i dati necessari (titolo, commenti, diff, issue linkata)
- Genera automaticamente i tipi TypeScript tramite lo script
generate-prompts.ts
- Aggiunto nuovo tipo
PrUpdateJobper gestire i job di aggiornamento PR - Aggiunta guard function
isPrUpdateJob
- Aggiunta funzione
isPullRequestCommentper identificare commenti su PR
getPullRequest: Recupera i dati di una PRgetPullRequestComments: Recupera tutti i commenti di una PRgetPullRequestDiff: Recupera il diff della PRextractLinkedIssueNumber: Estrae il numero della issue linkata dalla PRbuildPullRequestContext: Ora usa il template Handlebars invece di testo hardcodato
checkoutBranch: Fa checkout di un branch esistente (locale o remoto)
- Handler principale per i job di tipo
pr_update - Refactorizzato per usare le funzioni condivise da
shared.ts - Gestisce l'intero flusso di aggiornamento di una PR esistente
- Funzioni condivise tra
issueToPrHandlereprUpdateHandler - Elimina la duplicazione di codice per:
- Autenticazione (GitHub App vs PAT)
- Rate limiting (check e gestione)
- Gestione commenti (iniziali, finali, errore, cleanup)
- Esteso per riconoscere commenti su PR e creare
PrUpdateJob - Mantiene compatibilità con il flusso esistente per le issue
- Aggiunto supporto per processare
PrUpdateJob
- Aggiunto supporto per serializzare/deserializzare
PrUpdateJob
- Refactorizzato per usare le funzioni condivise da
shared.ts - Eliminato codice duplicato per autenticazione, rate limiting e commenti
- Rigenerato automaticamente con il nuovo template
pr-update.md - Include i tipi TypeScript
PrUpdateArgse la funzionegeneratePrUpdatePrompt
Il progetto ora usa un sistema unificato di template Handlebars:
- Template:
apps/server/prompts/pr-update.md - Generazione automatica: Lo script
scripts/generate-prompts.tsgenera automaticamente:- Tipi TypeScript (
PrUpdateArgs) - Funzioni di generazione (
generatePrUpdatePrompt)
- Tipi TypeScript (
- Vantaggi:
- Type safety per i placeholder
- Consistenza nel formato
- Facile manutenzione
handleAuthentication: Gestisce GitHub App vs PATcheckRateLimits: Verifica i limiti per utente e repohandleRateLimitExceeded: Gestisce il messaggio di rate limitpostInitialComment: Posta il commento inizialecleanupInitialComment: Rimuove il commento inizialepostFinalComment: Posta il commento finalepostErrorComment: Posta il messaggio di errore
- Eliminazione duplicazione: ~200 righe di codice duplicate rimosse
- Manutenibilità: Modifiche in un solo posto
- Type safety: Interfacce comuni per risultati
- Testabilità: Funzioni isolate più facili da testare
Quando viene processato un PrUpdateJob, l'agente riceve tramite template:
-
Informazioni della PR:
- Titolo, descrizione, autore, stato
- Branch head e base
- Labels e assignees
-
Istruzione corrente: Il commento che ha triggerato l'aggiornamento
-
Conversazione della PR: Tutti i commenti precedenti
-
Diff corrente: Il diff completo della PR nello stato attuale
-
Contesto della issue linkata (se presente):
- Titolo, descrizione e commenti della issue originale
- Estratto automaticamente dal body/title della PR
# In una PR esistente
@fixodev puoi aggiungere la validazione degli input mancante?
# In una PR esistente
@fixodev il codice nella funzione `processData` è troppo complesso,
puoi spezzarlo in funzioni più piccole?
# In una PR esistente
@fixodev c'è un bug nel handling degli errori alla riga 45,
non gestisce il caso null
- Iterazione rapida: Non serve creare nuove PR per ogni modifica
- Contesto preservato: L'agente ha accesso a tutta la conversazione e al diff
- Workflow naturale: Segue il normale flusso di review delle PR
- Backward compatibility: Non rompe il flusso esistente per le issue
- Template system: Type safety e consistenza nei prompt
- Codice DRY: Eliminata duplicazione tra i due handler
- Il bot può aggiornare solo PR che ha creato o su cui ha accesso di scrittura
- Richiede che il branch della PR sia accessibile (non da fork esterni senza permessi)
- Le modifiche vengono sempre committate, anche se minori
Il sistema di rate limiting esistente si applica anche ai PrUpdateJob, usando gli stessi limiti per utente e repository.
- Test completi: Test end-to-end del nuovo flusso
- Monitoring: Metriche specifiche per PR updates
- Ottimizzazioni: Miglioramenti per PR molto grandi
- Documentazione utente: Guide per gli utenti finali