feat: add automatic review loop (#1840)

This commit is contained in:
Bohdan Triapitsyn
2026-06-26 19:29:44 +03:00
committed by GitHub
parent 45df19c3b2
commit 1f549e4525
21 changed files with 787 additions and 35 deletions
+7
View File
@@ -1232,12 +1232,19 @@ export const dict = {
'diffView.reviewDialog.title': 'Review changes',
'diffView.reviewDialog.description': 'Start a separate review session for the current changes.',
'diffView.reviewDialog.generateHandoff': 'Generate handoff',
'diffView.reviewDialog.autoReview': 'Run automatic review loop',
'diffView.reviewDialog.info': 'This flow works best when started from the session where the changes were implemented.',
'diffView.reviewDialog.actions.cancel': 'Cancel',
'diffView.reviewDialog.actions.start': 'Review',
'diffView.reviewDialog.actions.starting': 'Starting...',
'diffView.reviewDialog.toast.noSessionDirectory': 'Session directory is unavailable',
'diffView.reviewDialog.toast.startFailed': 'Failed to start review flow',
'chat.autoReview.title': 'Code review loop is running',
'chat.autoReview.status.waitingForReviewer': 'Waiting for reviewer',
'chat.autoReview.status.waitingForImplementer': 'Waiting for implementer',
'chat.autoReview.reviewSessionLabel': 'Review session',
'chat.autoReview.actions.open': 'Open',
'chat.autoReview.actions.stop': 'Stop',
'diffView.hunk.label': 'Hunks',
'diffView.hunk.stage': 'Stage',
'diffView.hunk.unstage': 'Unstage',
+7
View File
@@ -1198,12 +1198,19 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.title': 'Revisar cambios',
'diffView.reviewDialog.description': 'Inicia una sesión de revisión separada para los cambios actuales.',
'diffView.reviewDialog.generateHandoff': 'Generar handoff',
'diffView.reviewDialog.autoReview': 'Ejecutar ciclo de revisión automática',
'diffView.reviewDialog.info': 'Este flujo funciona mejor si se inicia desde la sesión donde se implementaron los cambios.',
'diffView.reviewDialog.actions.cancel': 'Cancelar',
'diffView.reviewDialog.actions.start': 'Revisar',
'diffView.reviewDialog.actions.starting': 'Iniciando...',
'diffView.reviewDialog.toast.noSessionDirectory': 'El directorio de la sesión no está disponible',
'diffView.reviewDialog.toast.startFailed': 'No se pudo iniciar el flujo de revisión',
'chat.autoReview.title': 'El ciclo de revisión de código está en curso',
'chat.autoReview.status.waitingForReviewer': 'Esperando al revisor',
'chat.autoReview.status.waitingForImplementer': 'Esperando al implementador',
'chat.autoReview.reviewSessionLabel': 'Sesión de revisión',
'chat.autoReview.actions.open': 'Abrir',
'chat.autoReview.actions.stop': 'Detener',
"diffView.hunk.label": "Fragmentos",
"diffView.hunk.stage": "Preparar",
"diffView.hunk.unstage": "Quitar",
+7
View File
@@ -1104,12 +1104,19 @@ export const dict = {
'diffView.reviewDialog.title': 'Revoir les changements',
'diffView.reviewDialog.description': 'Démarre une session de revue séparée pour les changements actuels.',
'diffView.reviewDialog.generateHandoff': 'Générer un handoff',
'diffView.reviewDialog.autoReview': 'Lancer la boucle de revue automatique',
'diffView.reviewDialog.info': 'Ce flux fonctionne mieux lorsqu’il est lancé depuis la session où les changements ont été implémentés.',
'diffView.reviewDialog.actions.cancel': 'Annuler',
'diffView.reviewDialog.actions.start': 'Revoir',
'diffView.reviewDialog.actions.starting': 'Démarrage...',
'diffView.reviewDialog.toast.noSessionDirectory': 'Le dossier de session est indisponible',
'diffView.reviewDialog.toast.startFailed': 'Impossible de démarrer le flux de revue',
'chat.autoReview.title': 'La boucle de revue de code est en cours',
'chat.autoReview.status.waitingForReviewer': 'En attente du reviewer',
'chat.autoReview.status.waitingForImplementer': 'En attente de l’implémenteur',
'chat.autoReview.reviewSessionLabel': 'Session de revue',
'chat.autoReview.actions.open': 'Ouvrir',
'chat.autoReview.actions.stop': 'Arrêter',
'diffView.hunk.label': 'Sections',
'diffView.hunk.stage': 'Préparer',
'diffView.hunk.unstage': 'Retirer',
+7
View File
@@ -1235,12 +1235,19 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.title': '변경 사항 리뷰',
'diffView.reviewDialog.description': '현재 변경 사항을 위한 별도 리뷰 세션을 시작합니다.',
'diffView.reviewDialog.generateHandoff': '핸드오프 생성',
'diffView.reviewDialog.autoReview': '자동 리뷰 루프 실행',
'diffView.reviewDialog.info': '이 흐름은 변경 사항을 구현한 세션에서 시작할 때 가장 잘 작동합니다.',
'diffView.reviewDialog.actions.cancel': '취소',
'diffView.reviewDialog.actions.start': '리뷰',
'diffView.reviewDialog.actions.starting': '시작 중...',
'diffView.reviewDialog.toast.noSessionDirectory': '세션 디렉터리를 사용할 수 없습니다',
'diffView.reviewDialog.toast.startFailed': '리뷰 흐름을 시작하지 못했습니다',
'chat.autoReview.title': '코드 리뷰 루프 실행 중',
'chat.autoReview.status.waitingForReviewer': '리뷰어를 기다리는 중',
'chat.autoReview.status.waitingForImplementer': '구현 에이전트를 기다리는 중',
'chat.autoReview.reviewSessionLabel': '리뷰 세션',
'chat.autoReview.actions.open': '열기',
'chat.autoReview.actions.stop': '중지',
'diffView.hunk.label': '허크',
'diffView.hunk.stage': '스테이지',
'diffView.hunk.unstage': '스테이지 해제',
+7
View File
@@ -1432,12 +1432,19 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.title': 'Przegląd zmian',
'diffView.reviewDialog.description': 'Uruchom osobną sesję review dla bieżących zmian.',
'diffView.reviewDialog.generateHandoff': 'Wygeneruj handoff',
'diffView.reviewDialog.autoReview': 'Uruchom automatyczną pętlę review',
'diffView.reviewDialog.info': 'Ten flow działa najlepiej, gdy jest uruchomiony z sesji, w której zaimplementowano zmiany.',
'diffView.reviewDialog.actions.cancel': 'Anuluj',
'diffView.reviewDialog.actions.start': 'Review',
'diffView.reviewDialog.actions.starting': 'Uruchamianie...',
'diffView.reviewDialog.toast.noSessionDirectory': 'Katalog sesji jest niedostępny',
'diffView.reviewDialog.toast.startFailed': 'Nie udało się uruchomić flow review',
'chat.autoReview.title': 'Pętla code review trwa',
'chat.autoReview.status.waitingForReviewer': 'Oczekiwanie na reviewera',
'chat.autoReview.status.waitingForImplementer': 'Oczekiwanie na implementatora',
'chat.autoReview.reviewSessionLabel': 'Sesja review',
'chat.autoReview.actions.open': 'Otwórz',
'chat.autoReview.actions.stop': 'Zatrzymaj',
'diffView.hunk.label': 'Fragmenty',
'diffView.hunk.stage': 'Przygotuj',
'diffView.hunk.unstage': 'Cofnij',
@@ -1198,12 +1198,19 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.title': 'Revisar alterações',
'diffView.reviewDialog.description': 'Inicia uma sessão de revisão separada para as alterações atuais.',
'diffView.reviewDialog.generateHandoff': 'Gerar handoff',
'diffView.reviewDialog.autoReview': 'Executar ciclo de revisão automática',
'diffView.reviewDialog.info': 'Este fluxo funciona melhor quando iniciado na sessão em que as alterações foram implementadas.',
'diffView.reviewDialog.actions.cancel': 'Cancelar',
'diffView.reviewDialog.actions.start': 'Revisar',
'diffView.reviewDialog.actions.starting': 'Iniciando...',
'diffView.reviewDialog.toast.noSessionDirectory': 'O diretório da sessão está indisponível',
'diffView.reviewDialog.toast.startFailed': 'Falha ao iniciar o fluxo de revisão',
'chat.autoReview.title': 'O ciclo de revisão de código está em andamento',
'chat.autoReview.status.waitingForReviewer': 'Aguardando o revisor',
'chat.autoReview.status.waitingForImplementer': 'Aguardando o implementador',
'chat.autoReview.reviewSessionLabel': 'Sessão de revisão',
'chat.autoReview.actions.open': 'Abrir',
'chat.autoReview.actions.stop': 'Parar',
"diffView.hunk.label": "Trechos",
"diffView.hunk.stage": "Preparar",
"diffView.hunk.unstage": "Remover",
+7
View File
@@ -1198,12 +1198,19 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.title': 'Ревʼю змін',
'diffView.reviewDialog.description': 'Запустити окрему сесію ревʼю для поточних змін.',
'diffView.reviewDialog.generateHandoff': 'Згенерувати handoff',
'diffView.reviewDialog.autoReview': 'Запустити автоматичний цикл ревʼю',
'diffView.reviewDialog.info': 'Цей flow найкраще працює, якщо запускати його із сесії, де були імплементовані зміни.',
'diffView.reviewDialog.actions.cancel': 'Скасувати',
'diffView.reviewDialog.actions.start': 'Ревʼю',
'diffView.reviewDialog.actions.starting': 'Запуск...',
'diffView.reviewDialog.toast.noSessionDirectory': 'Директорія сесії недоступна',
'diffView.reviewDialog.toast.startFailed': 'Не вдалося запустити review flow',
'chat.autoReview.title': 'Цикл код-ревʼю триває',
'chat.autoReview.status.waitingForReviewer': 'Очікуємо ревʼювера',
'chat.autoReview.status.waitingForImplementer': 'Очікуємо імплементатора',
'chat.autoReview.reviewSessionLabel': 'Сесія ревʼю',
'chat.autoReview.actions.open': 'Відкрити',
'chat.autoReview.actions.stop': 'Зупинити',
"diffView.hunk.label": "Шматки",
"diffView.hunk.stage": "Додати",
"diffView.hunk.unstage": "Прибрати",
@@ -1198,12 +1198,19 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.title': 'Review changes',
'diffView.reviewDialog.description': 'Start a separate review session for the current changes.',
'diffView.reviewDialog.generateHandoff': 'Generate handoff',
'diffView.reviewDialog.autoReview': '运行自动审查循环',
'diffView.reviewDialog.info': 'This flow works best if started in the session where the changes were implemented.',
'diffView.reviewDialog.actions.cancel': 'Cancel',
'diffView.reviewDialog.actions.start': 'Review',
'diffView.reviewDialog.actions.starting': 'Starting...',
'diffView.reviewDialog.toast.noSessionDirectory': 'Session directory is unavailable',
'diffView.reviewDialog.toast.startFailed': 'Failed to start review flow',
'chat.autoReview.title': '代码审查循环正在运行',
'chat.autoReview.status.waitingForReviewer': '等待审查者',
'chat.autoReview.status.waitingForImplementer': '等待实现者',
'chat.autoReview.reviewSessionLabel': '审查会话',
'chat.autoReview.actions.open': '打开',
'chat.autoReview.actions.stop': '停止',
'diffView.hunk.label': '代码块',
'diffView.hunk.stage': '暂存',
'diffView.hunk.unstage': '取消暂存',
@@ -1208,12 +1208,19 @@ export const dict: Record<I18nKey, string> = {
'diffView.reviewDialog.title': 'Review changes',
'diffView.reviewDialog.description': 'Start a separate review session for the current changes.',
'diffView.reviewDialog.generateHandoff': 'Generate handoff',
'diffView.reviewDialog.autoReview': '執行自動審查循環',
'diffView.reviewDialog.info': 'This flow works best if started in the session where the changes were implemented.',
'diffView.reviewDialog.actions.cancel': 'Cancel',
'diffView.reviewDialog.actions.start': 'Review',
'diffView.reviewDialog.actions.starting': 'Starting...',
'diffView.reviewDialog.toast.noSessionDirectory': 'Session directory is unavailable',
'diffView.reviewDialog.toast.startFailed': 'Failed to start review flow',
'chat.autoReview.title': '程式碼審查循環執行中',
'chat.autoReview.status.waitingForReviewer': '等待審查者',
'chat.autoReview.status.waitingForImplementer': '等待實作者',
'chat.autoReview.reviewSessionLabel': '審查工作階段',
'chat.autoReview.actions.open': '開啟',
'chat.autoReview.actions.stop': '停止',
'diffView.hunk.label': '程式碼區塊',
'diffView.hunk.stage': '暫存',
'diffView.hunk.unstage': '取消暫存',