From 8c6e9733ddcd14f340c83e36778ca76cb42d2452 Mon Sep 17 00:00:00 2001 From: Serhii Vecherenko Date: Fri, 21 Aug 2026 13:56:38 -0700 Subject: [PATCH] feat(git-review): coordinate sidebar action phases - Track and display active commit, sync, push, and PR phases - Disable conflicting Git review actions during execution - Add coverage for action coordination and localized status text --- src/renderer/locales/de/messages.po | 28 ++ src/renderer/locales/en/messages.po | 28 ++ src/renderer/locales/es/messages.po | 28 ++ src/renderer/locales/fr/messages.po | 28 ++ src/renderer/locales/ja/messages.po | 28 ++ src/renderer/locales/ko/messages.po | 28 ++ src/renderer/locales/pl/messages.po | 28 ++ src/renderer/locales/pt-BR/messages.po | 28 ++ src/renderer/locales/ru/messages.po | 28 ++ src/renderer/locales/tr/messages.po | 28 ++ src/renderer/locales/uk/messages.po | 28 ++ src/renderer/locales/vi/messages.po | 28 ++ src/renderer/locales/zh-CN/messages.po | 28 ++ .../state/gitReviewActionStore.test.ts | 24 ++ src/renderer/state/gitReviewActionStore.ts | 41 +++ .../GitReviewSidebar.test.tsx | 24 +- .../GitReviewSidebar/GitReviewSidebar.tsx | 9 +- .../parts/ActionPhaseStatus.tsx | 32 +++ .../parts/CommitSyncPanel.test.tsx | 127 +++++++++ .../parts/CommitSyncPanel.tsx | 57 ++-- .../parts/CreatePrModal.test.tsx | 121 +++++++++ .../GitReviewSidebar/parts/CreatePrModal.tsx | 20 +- .../parts/useGitReviewActions.test.tsx | 245 ++++++++++++++++++ .../parts/useGitReviewActions.ts | 100 ++++++- 24 files changed, 1136 insertions(+), 28 deletions(-) create mode 100644 src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx create mode 100644 src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.test.tsx create mode 100644 src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CreatePrModal.test.tsx create mode 100644 src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/useGitReviewActions.test.tsx diff --git a/src/renderer/locales/de/messages.po b/src/renderer/locales/de/messages.po index 6d2733116..b3e82a5e9 100644 --- a/src/renderer/locales/de/messages.po +++ b/src/renderer/locales/de/messages.po @@ -2862,6 +2862,10 @@ msgstr "Commit-, PR- und Review-Composer" msgid "Commits" msgstr "Commits" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Commit wird erstellt…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Mit Agent erstellen" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Es wurde ein Arbeitsbaum für „{newBranch}“ erstellt, aber die Änderungen widersprachen und verbleiben in einem Git-Stash – lösen Sie sie im Arbeitsbaum auf." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "PR wird erstellt…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Generiert Commit-Nachrichten aus bereitgestellten Änderungen." msgid "Generates short titles for new threads." msgstr "Erzeugt Kurztitel für neue Threads." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Commit-Nachricht wird generiert…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "PR-Zusammenfassung wird generiert…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Erhalte während des Arbeitstags einen kurzen Check-in." @@ -9166,6 +9182,10 @@ msgstr "Pull Requests" #~ msgid "Pull requests shortcut" #~ msgstr "Pull-Request-Verknüpfung" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Wird gepullt…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Push fehlgeschlagen: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Sende Aktualisierungen an gekoppelte Mobilgeräte, wenn Threads fertig sind oder dich brauchen, auch wenn die App geschlossen ist." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Wird gepusht…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Synchronisierungsoptionen" msgid "Sync with desktop" msgstr "Mit Desktop synchronisieren" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Wird synchronisiert…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Synchronisiert mit Cloud" diff --git a/src/renderer/locales/en/messages.po b/src/renderer/locales/en/messages.po index 777ca8e96..e04e58116 100644 --- a/src/renderer/locales/en/messages.po +++ b/src/renderer/locales/en/messages.po @@ -2862,6 +2862,10 @@ msgstr "Commit, PR, and review composers" msgid "Commits" msgstr "Commits" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Committing…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Create with Agent" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "Creating PR…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Generates commit messages from staged changes." msgid "Generates short titles for new threads." msgstr "Generates short titles for new threads." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Generating commit message…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "Generating PR summary…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Get a quick check-in during the workday." @@ -9166,6 +9182,10 @@ msgstr "Pull requests" #~ msgid "Pull requests shortcut" #~ msgstr "Pull requests shortcut" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Pulling…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Push failed: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Pushing…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Sync options" msgid "Sync with desktop" msgstr "Sync with desktop" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Syncing…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Syncs with Cloud" diff --git a/src/renderer/locales/es/messages.po b/src/renderer/locales/es/messages.po index 933a394b3..e64010350 100644 --- a/src/renderer/locales/es/messages.po +++ b/src/renderer/locales/es/messages.po @@ -2862,6 +2862,10 @@ msgstr "Redactores de commit, PR y revisión" msgid "Commits" msgstr "Commits" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Creando el commit…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Crear con un agente" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Se creó un worktree en \"{newBranch}\", pero los cambios entraron en conflicto y permanecen en un stash de git: resuélvelos en el worktree." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "Creando el PR…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Genera mensajes de commit a partir de los cambios preparados." msgid "Generates short titles for new threads." msgstr "Genera títulos cortos para los nuevos hilos." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Generando el mensaje del commit…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "Generando el resumen del PR…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Recibe una comprobación rápida durante la jornada laboral." @@ -9166,6 +9182,10 @@ msgstr "Pull requests" #~ msgid "Pull requests shortcut" #~ msgstr "Acceso directo a pull requests" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Haciendo pull…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Error en el push: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Envía novedades a los dispositivos móviles emparejados cuando los hilos terminan o necesitan tu atención, incluso con la app cerrada." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Enviando…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Opciones de sincronización" msgid "Sync with desktop" msgstr "Sincronizar con el escritorio" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Sincronizando…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Se sincroniza con Cloud" diff --git a/src/renderer/locales/fr/messages.po b/src/renderer/locales/fr/messages.po index 2fc021135..5186d25d0 100644 --- a/src/renderer/locales/fr/messages.po +++ b/src/renderer/locales/fr/messages.po @@ -2862,6 +2862,10 @@ msgstr "Compositeurs de commit, PR et revue" msgid "Commits" msgstr "Commits" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Création du commit…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Créer avec un agent" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Arbre de travail créé sur \"{newBranch}\", mais les modifications sont entrées en conflit et restent dans un stash git — résolvez-les dans l'arbre de travail." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "Création de la PR…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Génère des messages de commit à partir des modifications indexées." msgid "Generates short titles for new threads." msgstr "Génère des titres courts pour les nouveaux fils de discussion." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Génération du message de commit…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "Génération du résumé de la PR…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Recevez un point rapide pendant la journée de travail." @@ -9165,6 +9181,10 @@ msgstr "Pull requests" #~ msgid "Pull requests shortcut" #~ msgstr "Raccourci des pull requests" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Pull en cours…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9191,6 +9211,10 @@ msgstr "Échec du push : {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Envoyez des mises à jour aux appareils mobiles appairés lorsque les fils de discussion se terminent ou ont besoin de vous, même lorsque l’application est fermée." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Envoi en cours…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11594,6 +11618,10 @@ msgstr "Options de synchronisation" msgid "Sync with desktop" msgstr "Synchroniser avec l'ordinateur" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Synchronisation en cours…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Synchronisé avec Cloud" diff --git a/src/renderer/locales/ja/messages.po b/src/renderer/locales/ja/messages.po index 8b3a3a598..fd8dd6d3d 100644 --- a/src/renderer/locales/ja/messages.po +++ b/src/renderer/locales/ja/messages.po @@ -2861,6 +2861,10 @@ msgstr "コミット、PR、レビューのコンポーザー" msgid "Commits" msgstr "コミット" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "コミット中…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3513,6 +3517,10 @@ msgstr "エージェントで作成" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "「{newBranch}」にワークツリーを作成しましたが、変更が競合し、git stash に残っています。ワークツリー内で解決してください。" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "PRを作成中…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5325,6 +5333,14 @@ msgstr "ステージされた変更からコミットメッセージを生成し msgid "Generates short titles for new threads." msgstr "新しいスレッドの短いタイトルを生成します。" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "コミットメッセージを生成中…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "PRの概要を生成中…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "勤務中に短いチェックインを受け取ります。" @@ -9164,6 +9180,10 @@ msgstr "プルリクエスト" #~ msgid "Pull requests shortcut" #~ msgstr "プルリクエストのショートカット" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "プル中…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9190,6 +9210,10 @@ msgstr "プッシュに失敗しました:{detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "スレッドが完了したり対応が必要になったりしたときに、アプリが閉じていてもペアリング済みのモバイルデバイスに更新をプッシュします。" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "プッシュ中…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11593,6 +11617,10 @@ msgstr "同期オプション" msgid "Sync with desktop" msgstr "デスクトップと同期" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "同期中…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Cloudと同期" diff --git a/src/renderer/locales/ko/messages.po b/src/renderer/locales/ko/messages.po index fddab9cab..06ef7abae 100644 --- a/src/renderer/locales/ko/messages.po +++ b/src/renderer/locales/ko/messages.po @@ -2862,6 +2862,10 @@ msgstr "커밋, PR, 리뷰 작성기" msgid "Commits" msgstr "커밋" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "커밋 중…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "에이전트로 만들기" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "\"{newBranch}\"에 작업 트리를 만들었지만 변경 사항이 충돌하여 git stash에 남아 있습니다. 작업 트리에서 해결하세요." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "PR 생성 중…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "스테이징된 변경 사항에서 커밋 메시지를 생성합니다. msgid "Generates short titles for new threads." msgstr "새 스레드에 대한 짧은 제목을 생성합니다." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "커밋 메시지 생성 중…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "PR 요약 생성 중…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "업무 중에 간단한 점검을 받으세요." @@ -9166,6 +9182,10 @@ msgstr "풀 리퀘스트" #~ msgid "Pull requests shortcut" #~ msgstr "풀 리퀘스트 바로가기" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "풀 중…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "푸시 실패: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "스레드가 완료되거나 응답이 필요할 때 앱이 닫혀 있어도 페어링된 모바일 기기로 업데이트를 푸시합니다." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "푸시 중…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "동기화 옵션" msgid "Sync with desktop" msgstr "데스크톱과 동기화" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "동기화 중…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Cloud와 동기화" diff --git a/src/renderer/locales/pl/messages.po b/src/renderer/locales/pl/messages.po index 71665cebc..5165477a6 100644 --- a/src/renderer/locales/pl/messages.po +++ b/src/renderer/locales/pl/messages.po @@ -2862,6 +2862,10 @@ msgstr "Kompozytory commita, PR i recenzji" msgid "Commits" msgstr "Commity" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Tworzenie commita…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Utwórz z agentem" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Utworzono drzewo pracy na „{newBranch}”, ale zmiany kolidują ze sobą i pozostają w skrytce git — rozwiąż je w drzewie pracy." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "Tworzenie PR…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Generuje komunikaty commita na podstawie przygotowanych (staged) zmian." msgid "Generates short titles for new threads." msgstr "Generuje krótkie tytuły nowych wątków." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Generowanie komunikatu commita…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "Generowanie opisu PR…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Otrzymuj krótką kontrolę w ciągu dnia pracy." @@ -9166,6 +9182,10 @@ msgstr "Żądania ściągnięcia" #~ msgid "Pull requests shortcut" #~ msgstr "Skrót żądań ściągnięcia" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Pobieranie…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Push nie powiódł się: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Wysyłaj aktualizacje na sparowane urządzenia mobilne, gdy wątki się kończą lub wymagają Twojej uwagi, nawet gdy aplikacja jest zamknięta." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Wysyłanie…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Opcje synchronizacji" msgid "Sync with desktop" msgstr "Synchronizuj z desktopem" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Synchronizowanie…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Synchronizuje się z Cloud" diff --git a/src/renderer/locales/pt-BR/messages.po b/src/renderer/locales/pt-BR/messages.po index 6e22ed178..1e9e0359d 100644 --- a/src/renderer/locales/pt-BR/messages.po +++ b/src/renderer/locales/pt-BR/messages.po @@ -2862,6 +2862,10 @@ msgstr "Composers de commit, PR e revisão" msgid "Commits" msgstr "Commits" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Fazendo commit…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Criar com agente" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Criou uma árvore de trabalho em \"{newBranch}\", mas as alterações entraram em conflito e permanecem em um git stash — resolva-as na árvore de trabalho." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "Criando PR…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Gera mensagens de commit a partir de alterações preparadas." msgid "Generates short titles for new threads." msgstr "Gera títulos curtos para novos tópicos." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Gerando mensagem de commit…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "Gerando resumo do PR…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Receba uma verificação rápida durante o dia de trabalho." @@ -9166,6 +9182,10 @@ msgstr "Pull requests" #~ msgid "Pull requests shortcut" #~ msgstr "Atalho de pull requests" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Fazendo pull…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Falha no envio: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Envie atualizações para os dispositivos móveis pareados quando os tópicos terminarem ou precisarem de você, mesmo com o app fechado." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Fazendo push…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Opções de sincronização" msgid "Sync with desktop" msgstr "Sincronizar com o desktop" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Sincronizando…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Sincroniza com o Cloud" diff --git a/src/renderer/locales/ru/messages.po b/src/renderer/locales/ru/messages.po index 72b6e226b..c4e205c3b 100644 --- a/src/renderer/locales/ru/messages.po +++ b/src/renderer/locales/ru/messages.po @@ -2862,6 +2862,10 @@ msgstr "Поля ввода коммита, PR и проверки" msgid "Commits" msgstr "Коммиты" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Создание коммита…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Создать с агентом" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Worktree создан на \"{newBranch}\", но изменения вызвали конфликт и остаются в git stash — разрешите их в worktree." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "Создание PR…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Генерирует сообщения коммитов из подго msgid "Generates short titles for new threads." msgstr "Генерирует короткие заголовки для новых тредов." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Генерация сообщения коммита…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "Генерация описания PR…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Получайте короткую проверку в течение рабочего дня." @@ -9166,6 +9182,10 @@ msgstr "Pull request" #~ msgid "Pull requests shortcut" #~ msgstr "Ярлык pull request" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Получение…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Сбой push: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Отправляйте обновления на сопряжённые мобильные устройства, когда треды завершаются или требуют вашего внимания, даже когда приложение закрыто." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Отправка…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Параметры синхронизации" msgid "Sync with desktop" msgstr "Синхронизировать с десктопом" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Синхронизация…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Синхронизируется с Cloud" diff --git a/src/renderer/locales/tr/messages.po b/src/renderer/locales/tr/messages.po index c0fd5f8a2..23b7448f6 100644 --- a/src/renderer/locales/tr/messages.po +++ b/src/renderer/locales/tr/messages.po @@ -2862,6 +2862,10 @@ msgstr "Commit, PR ve inceleme composer'ları" msgid "Commits" msgstr "Commit'ler" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Commit oluşturuluyor…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Ajanla oluştur" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "\"{newBranch}\" üzerinde bir çalışma ağacı oluşturuldu, ancak değişiklikler çakıştı ve bir git stash'inde kaldı; bunları çalışma ağacında çözün." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "PR oluşturuluyor…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Hazırlanmış (staged) değişikliklerden commit mesajları oluşturur. msgid "Generates short titles for new threads." msgstr "Yeni konular için kısa başlıklar oluşturur." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Commit mesajı oluşturuluyor…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "PR özeti oluşturuluyor…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "İş günü içinde hızlı bir kontrol alın." @@ -9166,6 +9182,10 @@ msgstr "Çekme istekleri" #~ msgid "Pull requests shortcut" #~ msgstr "Çekme istekleri kısayolu" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Çekiliyor…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Push başarısız oldu: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Konular tamamlandığında veya ilginizi gerektirdiğinde, uygulama kapalıyken bile eşleştirilmiş mobil cihazlara güncellemeler gönderin." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Push ediliyor…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Senkronizasyon seçenekleri" msgid "Sync with desktop" msgstr "Masaüstüyle senkronize et" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Senkronize ediliyor…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Cloud ile senkronize olur" diff --git a/src/renderer/locales/uk/messages.po b/src/renderer/locales/uk/messages.po index 0710672e9..7d80ec16a 100644 --- a/src/renderer/locales/uk/messages.po +++ b/src/renderer/locales/uk/messages.po @@ -2862,6 +2862,10 @@ msgstr "Поля вводу коміту, PR і рецензії" msgid "Commits" msgstr "Коміти" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Створення коміту…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Створити з агентом" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Worktree створено на \"{newBranch}\", але зміни спричинили конфлікт і залишаються в git stash — вирішіть їх у worktree." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "Створення PR…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Генерує повідомлення комітів із підгот msgid "Generates short titles for new threads." msgstr "Генерує короткі заголовки для нових тредів." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Генерація повідомлення коміту…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "Генерація опису PR…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Отримуйте коротку перевірку протягом робочого дня." @@ -9166,6 +9182,10 @@ msgstr "Pull request" #~ msgid "Pull requests shortcut" #~ msgstr "Ярлик pull request" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Отримання…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Збій push: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Надсилайте оновлення на спарені мобільні пристрої, коли треди завершуються або потребують вашої уваги, навіть коли застосунок закрито." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Надсилання…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Параметри синхронізації" msgid "Sync with desktop" msgstr "Синхронізувати з десктопом" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Синхронізація…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Синхронізується з Cloud" diff --git a/src/renderer/locales/vi/messages.po b/src/renderer/locales/vi/messages.po index da593f91b..4ff336625 100644 --- a/src/renderer/locales/vi/messages.po +++ b/src/renderer/locales/vi/messages.po @@ -2862,6 +2862,10 @@ msgstr "Trình soạn thảo commit, PR và đánh giá" msgid "Commits" msgstr "Cam kết" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "Đang tạo commit…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "Tạo bằng tác nhân" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "Đã tạo một cây làm việc trên \"{newBranch}\", nhưng những thay đổi này xung đột và vẫn nằm trong kho lưu trữ git — hãy giải quyết chúng trong cây làm việc." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "Đang tạo PR…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "Tạo thông điệp commit từ các thay đổi đã staged." msgid "Generates short titles for new threads." msgstr "Tạo tiêu đề ngắn cho chủ đề mới." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "Đang tạo thông điệp commit…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "Đang tạo mô tả PR…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "Nhận một lần kiểm tra nhanh trong ngày làm việc." @@ -9166,6 +9182,10 @@ msgstr "Pull request" #~ msgid "Pull requests shortcut" #~ msgstr "Lối tắt pull request" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "Đang pull…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9192,6 +9212,10 @@ msgstr "Push không thành công: {detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "Đẩy các cập nhật đến những thiết bị di động đã ghép nối khi luồng hoàn tất hoặc cần bạn, ngay cả khi ứng dụng đã đóng." +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "Đang push…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11595,6 +11619,10 @@ msgstr "Tùy chọn đồng bộ hóa" msgid "Sync with desktop" msgstr "Đồng bộ với desktop" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "Đang đồng bộ hóa…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "Đồng bộ với Cloud" diff --git a/src/renderer/locales/zh-CN/messages.po b/src/renderer/locales/zh-CN/messages.po index 50f1abca5..3c15a2fe4 100644 --- a/src/renderer/locales/zh-CN/messages.po +++ b/src/renderer/locales/zh-CN/messages.po @@ -2862,6 +2862,10 @@ msgstr "提交、PR 和审查 Composer" msgid "Commits" msgstr "提交" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Committing…" +msgstr "提交中…" + #: src/renderer/components/plugins/pluginCopy.ts #: src/renderer/utils/projectIcons.ts msgid "Communication" @@ -3514,6 +3518,10 @@ msgstr "使用代理创建" msgid "Created a worktree on \"{newBranch}\", but the changes conflicted and remain in a git stash — resolve them in the worktree." msgstr "在“{newBranch}”上创建了一个工作树,但更改发生冲突并保留在 git 存储中 - 在工作树中解决它们。" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Creating PR…" +msgstr "创建 PR 中…" + #: src/renderer/components/thread/ChatPane/ChatTurnElapsed.tsx #: src/renderer/components/thread/TerminalThreadContent.tsx msgid "Creating worktree…" @@ -5326,6 +5334,14 @@ msgstr "从分阶段更改生成提交消息。" msgid "Generates short titles for new threads." msgstr "为新线程生成短标题。" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating commit message…" +msgstr "正在生成提交信息…" + +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Generating PR summary…" +msgstr "正在生成 PR 描述…" + #: src/renderer/views/SchedulesView/SchedulesView.tsx msgid "Get a quick check-in during the workday." msgstr "在工作期间获得快速检查。" @@ -9165,6 +9181,10 @@ msgstr "拉取请求" #~ msgid "Pull requests shortcut" #~ msgstr "拉取请求快捷方式" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pulling…" +msgstr "拉取中…" + #: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/CommitSyncPanel.tsx #: src/renderer/views/MainView/parts/Sidebar/parts/useWorktreeActions.ts msgid "Push" @@ -9191,6 +9211,10 @@ msgstr "推送失败:{detail}" msgid "Push updates to paired mobile devices when threads finish or need you, even when the app is closed." msgstr "当线程完成或需要你处理时,向已配对的移动设备推送更新,即使应用已关闭。" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Pushing…" +msgstr "推送中…" + #: src/renderer/components/providers/qoder/manifest.ts msgid "Qoder CLI" msgstr "Qoder CLI" @@ -11594,6 +11618,10 @@ msgstr "同步选项" msgid "Sync with desktop" msgstr "与桌面同步" +#: src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/parts/ActionPhaseStatus.tsx +msgid "Syncing…" +msgstr "同步中…" + #: src/renderer/views/ProfileOverlay/parts/ProfileHeader.tsx msgid "Syncs with Cloud" msgstr "与Cloud同步" diff --git a/src/renderer/state/gitReviewActionStore.test.ts b/src/renderer/state/gitReviewActionStore.test.ts index 0f4519674..dae25a83d 100644 --- a/src/renderer/state/gitReviewActionStore.test.ts +++ b/src/renderer/state/gitReviewActionStore.test.ts @@ -59,6 +59,30 @@ describe("gitReviewActionStore", () => { expect(panels()["p"]).toMatchObject({ isCommitting: false, isSyncing: false }); }); + // The pipeline step advances commit → push → PR within one multi-step + // action ("Commit & Create PR") and clears when the whole flow ends. + it("advances and clears the commit/push/PR pipeline step", () => { + patch("p", { isCommitting: true, actionPhase: "generating-message" }); + patch("p", { isGenerating: false, actionPhase: "committing" }); + patch("p", { isSyncing: true, actionPhase: "pushing" }); + patch("p", { isCreatingPr: true, actionPhase: "creating-pr" }); + expect(panels()["p"]).toMatchObject({ actionPhase: "creating-pr", isCreatingPr: true }); + patch("p", { isCreatingPr: false, actionPhase: null }); + expect(panels()["p"]?.actionPhase).toBeNull(); + }); + + it("does not let overlapping actions take or clear the phase slot", () => { + const store = useGitReviewActionStore.getState(); + expect(store.beginActionPhase("p", "committing")).toBe(true); + expect(store.beginActionPhase("p", "creating-pr")).toBe(false); + expect(store.transitionActionPhase("p", "creating-pr", "pushing")).toBe(false); + expect(store.transitionActionPhase("p", "committing", "pushing")).toBe(true); + expect(store.clearActionPhase("p", "committing")).toBe(false); + expect(panels()["p"]?.actionPhase).toBe("pushing"); + expect(store.clearActionPhase("p", "pushing")).toBe(true); + expect(panels()["p"]?.actionPhase).toBeNull(); + }); + it("tracks each in-flight action flag independently", () => { patch("p", { isMerging: true, isPullingFromSource: true, isCreatingPr: true }); patch("p", { isMerging: false }); diff --git a/src/renderer/state/gitReviewActionStore.ts b/src/renderer/state/gitReviewActionStore.ts index 01c29d8e1..2e8e952c3 100644 --- a/src/renderer/state/gitReviewActionStore.ts +++ b/src/renderer/state/gitReviewActionStore.ts @@ -38,6 +38,23 @@ export interface GeneratedDraftMeta { model: string; } +/** + * Fine-grained step of the git action currently in flight. The panel renders it + * as a live status line ("Committing…", "Pushing…", "Creating PR…") so a + * multi-step action like "Commit & Create PR" shows which step is running + * instead of one opaque spinner. Every action offered by the commit/sync + * controls maps to a phase, so the slot doubles as the panel's mutual-exclusion + * lock: while one action owns it the others stay disabled. Null when idle. + */ +export type GitActionPhase = + | "generating-message" + | "committing" + | "pushing" + | "pulling" + | "syncing" + | "creating-pr" + | "generating-pr-summary"; + export interface GitReviewActionState { /** Draft commit message — typed by the user or filled in by generation. */ commitMessage: string; @@ -73,6 +90,8 @@ export interface GitReviewActionState { isFinishingMerge: boolean; /** A PR creation is in flight. */ isCreatingPr: boolean; + /** Current step of the git action in flight (null when idle). */ + actionPhase: GitActionPhase | null; /** Commit hash of the Poracode pull stash awaiting re-apply after the in-progress merge. */ pullStashCommit: string | null; } @@ -96,6 +115,7 @@ const EMPTY_STATE: GitReviewActionState = Object.freeze({ isAbortingMerge: false, isFinishingMerge: false, isCreatingPr: false, + actionPhase: null, pullStashCommit: null, }); @@ -116,6 +136,12 @@ interface GitReviewActionStore { panels: Record; /** Merge `patch` into the state for `key`; no-op writes are skipped. */ patch: (key: string, patch: Partial) => void; + /** Claim the panel's phase slot; only one tracked action may own it. */ + beginActionPhase: (key: string, phase: GitActionPhase) => boolean; + /** Advance a phase only when the caller still owns the expected phase. */ + transitionActionPhase: (key: string, from: GitActionPhase, to: GitActionPhase) => boolean; + /** Clear a phase only when the caller still owns it. */ + clearActionPhase: (key: string, phase: GitActionPhase) => boolean; } export const useGitReviewActionStore = create((set, get) => ({ @@ -128,6 +154,21 @@ export const useGitReviewActionStore = create((set, get) = panels: { ...state.panels, [key]: { ...current, ...patch } }, })); }, + beginActionPhase: (key, phase) => { + if (get().panels[key]?.actionPhase) return false; + get().patch(key, { actionPhase: phase }); + return true; + }, + transitionActionPhase: (key, from, to) => { + if (get().panels[key]?.actionPhase !== from) return false; + get().patch(key, { actionPhase: to }); + return true; + }, + clearActionPhase: (key, phase) => { + if (get().panels[key]?.actionPhase !== phase) return false; + get().patch(key, { actionPhase: null }); + return true; + }, })); export function resetGitReviewActionStore(): void { diff --git a/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/GitReviewSidebar.test.tsx b/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/GitReviewSidebar.test.tsx index dcd21e653..5860a7f3b 100644 --- a/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/GitReviewSidebar.test.tsx +++ b/src/renderer/views/GitReviewOverlay/parts/GitReviewSidebar/GitReviewSidebar.test.tsx @@ -42,6 +42,7 @@ vi.mock("@heroui/react", () => { function Button(props: { children?: ReactNode | ((state: { isPending: boolean }) => ReactNode); className?: string; + "aria-label"?: string; isDisabled?: boolean; isPending?: boolean; onPress?: () => void; @@ -50,6 +51,7 @@ vi.mock("@heroui/react", () => { return ( + ); + } + const ButtonGroup = (props: { children?: ReactNode }) =>
{props.children}
; + ButtonGroup.Separator = () => ; + const Dropdown = (props: { children?: ReactNode }) =>
{props.children}
; + Dropdown.Popover = (props: { children?: ReactNode }) =>
{props.children}
; + Dropdown.Menu = (props: { children?: ReactNode }) =>
{props.children}
; + Dropdown.Item = (props: { children?: ReactNode }) =>
{props.children}
; + const Label = (props: { children?: ReactNode }) => {props.children}; + const Tooltip = (props: { children?: ReactNode }) =>
{props.children}
; + Tooltip.Content = (props: { children?: ReactNode }) =>
{props.children}
; + return { Button, ButtonGroup, Dropdown, Label, Tooltip }; +}); + +vi.mock("@/renderer/components/common", () => ({ + TextArea: (props: { value?: string; onChange?: (e: { target: { value: string } }) => void }) => ( +