Loading...
Loading...
PR triage: audit open PRs, deep review selected ones, draft and post review comments. Args: "all" to review all, PR numbers to focus (e.g. "42 57"), "en"/"fr" for language, no arg = audit only in French.
npx skill4agent add rtk-ai/rtk pr-triage| Skill | Usage | Output |
|---|---|---|
| Trier, reviewer, commenter les PRs | Tableau d'action + reviews + commentaires postés |
| Récap général pour partager avec l'équipe | Résumé Markdown (PRs + issues + releases) |
/pr-triage/pr-triage all/pr-triage 42 57enenglishfrfrenchgit rev-parse --is-inside-work-tree
gh auth status# Identité du repo
gh repo view --json nameWithOwner -q .nameWithOwner
# PRs ouvertes avec métadonnées complètes (ajouter body pour cross-référence issues)
gh pr list --state open --limit 50 \
--json number,title,author,createdAt,updatedAt,additions,deletions,changedFiles,isDraft,mergeable,reviewDecision,statusCheckRollup,body
# Collaborateurs (pour distinguer "nos PRs" des externes)
gh api "repos/{owner}/{repo}/collaborators" --jq '.[].login'gh api .../collaborators# Extraire les auteurs des 10 derniers PRs mergés
gh pr list --state merged --limit 10 --json author --jq '.[].author.login' | sort -uAskUserQuestiongh api "repos/{owner}/{repo}/pulls/{num}/reviews" \
--jq '[.[] | .user.login + ":" + .state] | join(", ")'
# Fichiers modifiés (nécessaire pour overlap detection)
gh pr view {num} --json files --jq '[.files[].path] | join(",")'author{login: "..."}.author.login| Label | Additions |
|---|---|
| XS | < 50 |
| S | 50–200 |
| M | 200–500 |
| L | 500–1000 |
| XL | > 1000 |
+{additions}/-{deletions}, {files} files ({label})statusCheckRollupcleanunstabledirtybodyfixes #Ncloses #Nresolves #NFixes #42mergeableCONFLICTINGmergeableCONFLICTING## PRs ouvertes ({count})
### Nos PRs
| PR | Titre | Taille | CI | Status |
| -- | ----- | ------ | -- | ------ |
### Externes — Prêtes pour review
| PR | Auteur | Titre | Taille | CI | Reviews | Action |
| -- | ------ | ----- | ------ | -- | ------- | ------ |
### Externes — Problématiques
| PR | Auteur | Titre | Taille | Problème | Action recommandée |
| -- | ------ | ----- | ------ | -------- | ------------------ |
### Résumé
- Quick wins : {PRs XS/S prêtes à merger}
- Risques : {overlaps, tailles XL, CI dirty}
- Clusters : {auteurs avec 3+ PRs}
- Stale : {PRs sans activité >14j}
- Overlaps : {PRs qui touchent les mêmes fichiers}Aucune PR ouverte.# Cross-platform clipboard
clip() {
if command -v pbcopy &>/dev/null; then pbcopy
elif command -v xclip &>/dev/null; then xclip -selection clipboard
elif command -v wl-copy &>/dev/null; then wl-copy
else cat
fi
}
clip <<'EOF'
{tableau de triage complet}
EOFTableau copié dans le presse-papier.Triage table copied to clipboard."all""42 57"AskUserQuestionquestion: "Quelles PRs voulez-vous reviewer en profondeur ?"
header: "Deep Review"
multiSelect: true
options:
- label: "Toutes les externes"
description: "Review {N} PRs externes avec agents code-reviewer en parallèle"
- label: "Problématiques uniquement"
description: "Focus sur les {M} PRs à risque (CI dirty, trop large, overlaps)"
- label: "Prêtes uniquement"
description: "Review {K} PRs prêtes à merger"
- label: "Passer"
description: "Terminer ici — juste l'audit"42code-reviewersubagent_type: code-reviewer
model: sonnet
prompt: |
Review PR #{num}: "{title}" by @{author}
**Metadata**: +{additions}/-{deletions}, {changedFiles} files ({size_label})
**CI**: {ci_status} | **Reviews**: {existing_reviews} | **Draft**: {isDraft}
**PR Body**:
{body}
**Diff**:
{gh pr diff {num} output}
Apply your security-guardian and backend-architect skills for this review.
Additionally, apply the RTK-specific checklist:
- lazy_static! regex (no inline Regex::new())
- anyhow::Result + .context() (no unwrap())
- Fallback to raw command on filter failure
- Exit code propagation
- Token savings ≥60% in tests with real fixtures
- No async/tokio dependencies
Return structured review:
### Critical Issues 🔴
### Important Issues 🟡
### Suggestions 🟢
### What's Good ✅
Be specific: quote the file:line, explain why it's an issue, suggest the fix.gh pr diff {num}
gh pr view {num} --json body,title,author -q '{body: .body, title: .title, author: .author.login}'templates/review-comment.mdfile.rs:42---
### Draft — PR #{num}: {title}
{commentaire complet}
---AskUserQuestionquestion: "Ces commentaires sont prêts. Lesquels voulez-vous poster ?"
header: "Poster"
multiSelect: true
options:
- label: "Tous ({N} commentaires)"
description: "Poster sur toutes les PRs reviewées"
- label: "PR #{x} — {title_truncated}"
description: "Poster uniquement sur cette PR"
- label: "Aucun"
description: "Annuler — ne rien poster"gh pr comment {num} --body-file - <<'REVIEW_EOF'
{commentaire}
REVIEW_EOF✅ Commentaire posté sur PR #{num}: {title}Aucun commentaire posté. Workflow terminé.| Situation | Comportement |
|---|---|
| 0 PRs ouvertes | |
| PR en draft | Indiquer dans tableau, skip pour review sauf si sélectionnée explicitement |
| CI inconnu | Afficher |
| Review agent timeout | Afficher erreur partielle, continuer avec les autres |
| Skip cette PR, notifier l'utilisateur |
| PR très large (>5000 additions) | Avertir : "Review partielle, diff tronqué" |
| Collaborateurs API 403/404 | Fallback sur auteurs des 10 derniers PRs mergés |
gh repo viewghcurlstatusCheckRollup?mergeableMERGEABLECONFLICTINGUNKNOWNUNKNOWN?gh pr comment