Réparer une CI en échec
Laissez un agent corriger le code et réessayer jusqu’à ce que votre commande de test réussisse.
Ce que montre l’exemple
Section intitulée « Ce que montre l’exemple »- Sessions de sandboxUne sandbox à chaud garde les dépendances entre les tours de l’agent et les tests.
- Dépôt et brancheLa correction arrive sur une branche nommée, jamais sur votre checkout.
- Préparer l’environnementLes dépendances s’installent une fois, avant le premier tour.
- Boucles de vérificationTenter, vérifier, renvoyer l’échec, recommencer.
- BudgetsPlafonner les tentatives et les tokens de toute l’exécution.
- Exécuter en CIUne exécution en échec lève une erreur, le job sort donc avec un code non nul.
Écrire le script
Section intitulée « Écrire le script »Enregistrez les fichiers présentés dans les onglets à côté de la configuration de la page Installation. Le script principal garde une sandbox ouverte pour que les modifications de l’agent et votre commande de test utilisent les mêmes fichiers.
Séparez la création de la sandbox, la tentative de l’agent et la vérification des commits.
Assemblez la boucle et lancez fix-ci.ts, qui possède et ferme la sandbox.
Exécuter le script
Section intitulée « Exécuter le script »Lancez la boucle de vérification, puis examinez les commits de sa branche. Le script affiche le statut, le nombre de tours et la consommation de tokens ; il se termine en erreur si le workflow échoue.
Comprendre les étapes
Section intitulée « Comprendre les étapes »Chaque lien indique qui transmet quoi à qui, dans le sens de la flèche.
perform(context) relie l’usage et l’annulation de l’agent au workflow : ses tokens comptent dans budget. timeoutMs borne chaque tour.
| Issue | result.status | result.errors | Code de sortie |
|---|---|---|---|
| Une vérification accepte le tour | "done" | Vide | 0 |
| La quatrième vérification refuse | "failed" | LoopTaskExhausted, avec feedback | 1 |
| Les tokens ou les tentatives s’épuisent | "failed" | WorkflowBudgetExceeded | 1 |
| L’agent ou une commande lève une erreur | "failed" | L’erreur levée | 1 |
result.unwrap() lève une WorkflowFailure pour toutes les lignes sauf la première. Une limite de tokens arrête aussi l’agent en cours.
Adapter l’exemple
Section intitulée « Adapter l’exemple »| Variante | Changement |
|---|---|
| Un autre agent | Passez un agent de secours comme agent : createFallbackAgent([claude, codex], { on: ["quota", "unavailable"] }) change d’agent sur une limite d’usage ou une panne. |
| L’exécuter en CI | Utilisez un identifiant pour l’exécution sans surveillance, nommez la branche par exécution (`outpost/fix-ci-${process.env.GITHUB_RUN_ID}`), puis git push origin cette branche. |
| Vérification plus stricte | Ajoutez npm run lint ou une vérification de types après les tests, ou demandez l’avis d’un agent relecteur depuis check (Boucles de vérification). |
| Sandbox cloud | Remplacez sandboxProvider par un fournisseur Vercel ou Daytona. Les commits reviennent sur la branche de l’hôte. |
API : createSandbox · defineLoopTask · defineAgentTask · WorkflowBudget · LoopTaskExhausted · WorkflowFailure.