Eseguire workflow
Come eseguire workflow run in CodeCourier, monitorare l’avanzamento in tempo reale, gestire i CI check, i punteggi di qualità, i run pianificati e gestire il ciclo di vita dei run.
Eseguire un workflow in CodeCourier crea un’istanza di esecuzione (un « run ») che elabora gli step della pipeline in sequenza. Ogni run ha il proprio prompt, i propri override di configurazione e il proprio stato di esecuzione. Questa guida copre come avviare run, cosa succede durante l’esecuzione e come monitorarli e gestirli.
Avviare un run
Seleziona un workflow
Dalla pagina Workflows, seleziona il blueprint di workflow che vuoi eseguire. La pagina di dettaglio del workflow mostra la configurazione della pipeline ed eventuali run precedenti.
Scrivi il prompt
Ogni run richiede un prompt - la descrizione del task che dice agli agenti IA cosa fare. Il prompt viene inviato al primo step della pipeline e funge da input principale per l’intero run.
Scrivi prompt chiari e specifici per i migliori risultati. Includi dettagli su quali file modificare, quale comportamento implementare e quale dovrebbe essere l’esito atteso.
Configura il run (opzionale)
Puoi sovrascrivere la configurazione predefinita del workflow per uno specifico run:
- URL del repo GitHub - Sovrascrivere il repository predefinito del progetto.
- Nome della branch - Specificare la branch di feature per questo run.
- Istruzioni del checker - Istruzioni personalizzate per gli step checker in questo run.
- Immagini di riferimento - Caricare immagini a cui l’agente può fare riferimento durante l’implementazione (ad esempio, mockup di design).
- Config di sandbox - Sovrascrivere le impostazioni di template, timeout, memoria, CPU e modello.
Avvia
Avviare il run crea un record nella tabella runs con status pending e invia l’esecuzione a Trigger.dev. Il run passa a running quando l’orchestratore inizia a elaborare il primo step.
Flusso di esecuzione del run
L’orchestratore di workflow (un task in background di Trigger.dev) gestisce l’intero ciclo di vita del run:
1. Inizializzazione del run
L’orchestratore legge il blueprint del workflow, risolve i riferimenti a persona e costruisce il piano di esecuzione. Analizza gli step della pipeline in execution block (step singoli e loop) e prepara la configurazione della sandbox.
2. Esecuzione degli step
Per ogni step della pipeline, l’orchestratore:
- Crea un record di run step nella tabella
runStepscon il ruolo dello step, il numero di iterazione, il riferimento a persona e lo status. - Crea una sandbox E2B dal template configurato. La sandbox viene impostata con il repo Git del progetto, le variabili d’ambiente, gli skill e i learning.
- Invia il task di step appropriato (designer-step, checker-step, optimizer-step, ecc.) a Trigger.dev.
- Il task di step esegue l’agente IA dentro la sandbox con il prompt e le istruzioni dello step. L’output viene restituito in streaming alla tabella dei messaggi della sandbox.
- Registra l’uso dei token e i dati di costo per lo step.
- Aggiorna lo status del run step a
completedofailed.
3. Gestione degli Iteration Block
Quando l’orchestratore raggiunge un Iteration Block (un gruppo di step consecutivi che condividono un loopId), esegue gli step del block in sequenza, poi controlla il verdetto:
- Se lo step checker produce un verdetto positivo, il block esce e l’esecuzione continua verso il block successivo.
- Se lo step checker produce un verdetto negativo, il block viene rieseguito dal suo primo step. Il feedback del checker viene incorporato nel prompt del designer alla iterazione successiva.
- Se il
loopMaxIterationsdel block viene raggiunto senza un verdetto positivo, il block termina e il run viene marcato comefailed.
Gli step fuori da un Iteration Block vengono eseguiti esattamente una volta. I checker fuori da un block emettono comunque un verdetto ma non causano un retry automatico.
4. Completamento del run
Quando tutti gli execution block sono stati elaborati:
- Lo status del run viene aggiornato a
completed. - Il timestamp
completedAtviene impostato. - Una pull request viene creata se il run ha prodotto modifiche Git.
- L’estrazione dei learning viene avviata per le sandbox del run.
- I contatori del progetto vengono aggiornati.
- Le notifiche vengono inviate (se configurate).
Esecuzione in background
Stati del run
Ogni run si trova in uno di sette stati:
scheduled- Il run è stato messo in coda dallo scheduler dei task ricorrenti e attende l’orario di avvio pianificato. È uno stato di pre-esecuzione che precedepending. I run pianificati portano un timestampscheduledFor, untimezone, unrecurrencePatterne unrecurringTaskIdche rimanda al task ricorrente che li ha creati.pending- Il run è stato creato ma l’orchestratore non ha ancora iniziato l’elaborazione.running- L’orchestratore esegue attivamente gli step. Il campocurrentIterationtraccia l’avanzamento.paused- Il run è stato temporaneamente sospeso. Può accadere quando serve un intervento dell’utente.completed- Tutti gli step si sono conclusi con successo.failed- Uno step ha incontrato un errore irrecuperabile. Il campoerrorcontiene il messaggio di fallimento.cancelled- Il run è stato annullato manualmente dall’utente.
Scheduled vs. Pending
scheduled e pending sono stati distinti. Un run scheduled è stato creato dal sistema di task ricorrenti e attende un orario futuro. Un run pending è stato inviato alla coda Trigger.dev e attende che l’orchestratore lo prenda in carico. Un run scheduled passa apending quando lo scheduler lo invia, il che avviene al momento o subito dopo il timestamp scheduledFor.Monitorare un run
Vista di dettaglio del run
La pagina di dettaglio del run fornisce una vista completa dell’esecuzione:
- Status e avanzamento - Stato attuale, conteggio delle iterazioni e tempo trascorso.
- Timeline degli step - Una timeline visiva che mostra ogni run step, il suo ruolo, status e durata. Puoi cliccare su uno step per vedere l’output della sua sandbox.
- Messaggi della sandbox - L’output del terminale in streaming di ogni sandbox, che mostra il lavoro dell’agente IA in tempo reale.
- Verdetti - Per gli step checker, il verdetto pass/fail e il testo di feedback vengono mostrati.
- Status della PR - Se una pull request è stata creata, vengono mostrati il suo URL e status.
Vista lista dei run
La pagina Runs mostra una lista paginata di tutti i run del progetto. Ogni riga mostra il nome del run, lo status, la source (workflow, sprint o sandbox), l’ora di creazione e un’anteprima del prompt. Puoi filtrare e ordinare i run e usare azioni bulk per eliminare più run alla volta.
Source dei run
I run vengono creati da diverse source, tracciate dal campo source:
workflow- Avviato manualmente da un blueprint di workflow sulla pagina Workflows.issue- Creato da una work chain come parte dell’esecuzione di una sessione di issue.sandbox- Creato dall’avvio di una sandbox autonoma.merge_agent- Creato dal merge agent per la gestione delle PR.sprint- Creato da un orchestratore di sprint chain come parte di un’esecuzione di sprint batch.scheduled- Creato dallo scheduler dei task ricorrenti a una cadenza configurata (giornaliera, settimanale, ecc.).
Gestione degli errori
Fallimenti di step
Quando un singolo step fallisce, l’errore viene registrato sul record del run step. A seconda del tipo di fallimento:
- Fallimento di creazione della sandbox - E2B non è riuscito a provisionare la VM. Di solito significa che la chiave API E2B non è valida o il template non esiste.
- Crash dell’agente - Il processo CLI IA è terminato in modo imprevisto. L’output di errore viene catturato nei messaggi della sandbox.
- Timeout - La sandbox ha superato il timeout configurato. Il lavoro svolto prima del timeout è preservato se commitato.
- Errore API - Il provider IA ha restituito un errore (rate limit, chiave non valida, errore del server).
Recupero del run
CodeCourier attualmente non supporta la ripresa di un run fallito dal punto di fallimento. Se un run fallisce, puoi avviare un nuovo run con lo stesso prompt. Il nuovo run parte da zero, ma se il run precedente ha pushato commit sulla branch, il nuovo run riprende da dove il codice si è interrotto.
Riutilizzo della branch
Fermarsi dopo il turno attuale
Oltre all’annullamento immediato, puoi impostare il flag stopAfterCurrentTurn su un workflow in esecuzione. È un arresto graduale che consente al turno di agente in esecuzione di completarsi prima di fermare il run. È utile quando vuoi revisionare un avanzamento parziale senza perdere il lavoro già in corso.
Quando stopAfterCurrentTurn è impostato:
- L’orchestratore completa il turno di agente attuale (l’IA termina la sua risposta attuale, l’uso degli strumenti ed eventuali commit di file).
- Anziché procedere alla iterazione o allo step successivo, il run passa a
paused. - Le modifiche di codice commitate durante il turno finale vengono preservate sulla branch.
Puoi impostare questo flag dalla pagina di dettaglio del run usando il pulsante « Stop after turn », disponibile mentre il run è nello stato running. È preferibile a un annullamento brusco quando vuoi un punto di arresto pulito anziché un’interruzione improvvisa.
Tracciamento dei CI Check
Dopo che un run crea una pull request, CodeCourier traccia lo status dei CI check per quella PR. L’oggetto ciChecks del record del run riflette l’ultimo status dall’API di check di GitHub:
ciChecks: {
status: "passing" | "failing" | "pending", // Aggregate CI status
checks: Array<{
name: string, // Check name (e.g., "Build", "Tests", "Lint")
status: string, // Individual check status
url: string, // Link to the check run on GitHub
}>,
checkedAt: number, // Unix timestamp of the last status poll
}Quando i CI check della PR di un run falliscono, lo status della PR del run passa a blocked_on_ci. Questo status è distinto dagli altri stati della PR e indica che la PR esiste ed è aperta, ma non può essere mergiata finché la CI non passa.
Valori dello status della PR
Il campo prStatus di un run traccia l’intero ciclo di vita della pull request associata:
creating- La richiesta di creazione della PR è stata inviata ma non si è ancora completata.created- La PR è aperta e in attesa di revisione. I CI check potrebbero essere in esecuzione.blocked_on_ci- La PR è aperta ma i CI check falliscono. L’oggettociCheckscontiene dettagli su quali check sono falliti.merged- La PR è stata mergiata nella branch di destinazione.failed- Il tentativo di creazione della PR è fallito (ad esempio, errore dell’API GitHub, fallimento di autenticazione). Il campoprErrorcontiene il messaggio di errore.skipped- Nessuna modifica di codice è stata prodotta dal run, quindi nessuna PR è stata creata.
Cadenza di tracciamento CI
checkedAt dell’oggettociChecks mostra quando è avvenuto il polling più recente. La vista di dettaglio del run mostra lo status dei CI check con link a ogni singolo check run su GitHub.Punteggi di qualità
Se il workflow include uno step Evaluator, il record del run traccia unqualityScore complessivo (il punteggio composite di tutti gli step evaluator). I singoli record di run step portano l’intera scomposizione qualityScores:
// On the run record:
qualityScore: number, // Composite score (0-100) from all evaluator steps
// On individual runStep records (type: "evaluator"):
qualityScores: {
correctness: number, // 0-100
typeSafety: number, // 0-100
codeStyle: number, // 0-100
testCoverage: number, // 0-100
completeness: number, // 0-100
composite: number, // Weighted average of all five dimensions
thresholdResult: boolean, // Whether composite meets the configured threshold
}I punteggi di qualità sono visibili nella timeline degli step della vista di dettaglio del run e nel dashboard di Monitoring. I run con punteggi di qualità bassi o un thresholdResult fallito vengono evidenziati visivamente in modo da risaltare nella lista dei run.
Annullare un run
Puoi annullare un workflow in esecuzione dalla pagina di dettaglio del run. L’annullamento:
- Imposta lo status del run a
cancelled. - Tenta di terminare qualsiasi sandbox attiva associata al run.
- Impedisce all’orchestratore di elaborare ulteriori step.
L’annullamento è best-effort - se uno step è a metà esecuzione, la sandbox può continuare finché il comando di kill non ha effetto. Se vuoi un arresto più pulito, usa invece il flag stopAfterCurrentTurn (vedi sopra).
Metadati del run
Ogni record di run contiene metadati utili per il tracciamento e l’analisi:
{
status: "running", // Current state (includes "scheduled")
prompt: "...", // The task description
source: "workflow", // How the run was created (workflow|sprint|sandbox|scheduled|...)
currentIteration: 2, // Current iteration inside an Iteration Block (or 1 when no block is active)
config: { ... }, // Sandbox configuration
githubRepoUrl: "...", // Git repository
branchName: "feat/...", // Working branch
prUrl: "...", // Pull request URL (after completion)
prStatus: "created", // PR lifecycle state (includes "blocked_on_ci")
startedAt: 1712345678, // Execution start timestamp
completedAt: null, // Null until finished
cliVersion: "1.2.3", // CLI tool version used
qualityScore: 87, // Composite quality score from evaluator steps
stopAfterCurrentTurn: false, // Graceful stop flag
ciChecks: { // CI check status for the run's PR
status: "passing",
checks: [...],
checkedAt: 1712345900,
},
// Scheduled run fields (only when source = "scheduled"):
scheduledFor: 1712340000, // Intended fire time
timezone: "America/New_York", // Timezone from recurring task
recurrencePattern: "daily", // Frequency (daily|weekly|...)
recurringTaskId: "...", // Reference to the recurring task
}