Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/sharedSettingsFile.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ describe("sharedSettingsFile", () => {
remoteAccessTailscaleHttps: false,
remoteAccessAdvertisedUrl: "",
threadRemoveAction: "archive",
autoMarkDoneOnPrMerge: true,
newThreadMode: "page",
homeScopeEnabled: true,
sidebarTranslucency: false,
Expand Down Expand Up @@ -215,6 +216,7 @@ describe("sharedSettingsFile", () => {
remoteAccessTailscaleHttps: false,
remoteAccessAdvertisedUrl: "",
threadRemoveAction: "archive",
autoMarkDoneOnPrMerge: true,
newThreadMode: "page",
homeScopeEnabled: true,
sidebarTranslucency: false,
Expand Down
47 changes: 31 additions & 16 deletions src/renderer/actions/threadActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,36 @@ export function unloadThread(threadId: string): void {
void unloadStoredThread(threadId, { closeThreadPane: true }).catch(() => undefined);
}

/**
* Marks a thread done: unloads its runtime, drops the worktree's terminal tabs
* once no live thread is left there, and flips the store flag. Shared by the
* manual affordances (context menu, sidebar Done button) and the PR-merge
* automation.
*/
export function markThreadDone(threadId: string): void {
if (findExperimentByThreadId(threadId)) return;
const store = useAppStore.getState();
const thread = store.threads.find((t) => t.id === threadId);
if (!thread || thread.done) return;

void unloadStoredThread(threadId, { keepSidePanels: true }).catch(() => undefined);
const worktreePath = thread.worktreePath;
const isLastOpenWorktreeThread =
worktreePath !== undefined &&
store.threads.every(
(t) => t.id === threadId || t.worktreePath !== worktreePath || t.done || t.archived,
);
if (worktreePath && isLastOpenWorktreeThread) {
const termStore = useDevTerminalStore.getState();
const removedTabIds = termStore.removeTabsForWorktree(worktreePath);
void closeThreads(removedTabIds);
if (termStore.isOpen && termStore.activeWorktreePath === worktreePath) {
termStore.closePanel();
}
}
store.markThreadDone(threadId);
}

export function toggleMarkThreadDone(threadId: string): void {
if (findExperimentByThreadId(threadId)) return;
const store = useAppStore.getState();
Expand All @@ -329,22 +359,7 @@ export function toggleMarkThreadDone(threadId: string): void {
if (thread.done) {
store.unmarkThreadDone(threadId);
} else {
void unloadStoredThread(threadId, { keepSidePanels: true }).catch(() => undefined);
const worktreePath = thread.worktreePath;
const isLastOpenWorktreeThread =
worktreePath !== undefined &&
store.threads.every(
(t) => t.id === threadId || t.worktreePath !== worktreePath || t.done || t.archived,
);
if (worktreePath && isLastOpenWorktreeThread) {
const termStore = useDevTerminalStore.getState();
const removedTabIds = termStore.removeTabsForWorktree(worktreePath);
void closeThreads(removedTabIds);
if (termStore.isOpen && termStore.activeWorktreePath === worktreePath) {
termStore.closePanel();
}
}
store.markThreadDone(threadId);
markThreadDone(threadId);
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/renderer/hooks/useAppHydration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
import { recoverExperimentCandidateWorktrees } from "@/renderer/state/experimentHydration";
import { hydrateThreadRuntimeItems } from "@/renderer/state/chatRuntimePersister";
import { useSharedSettings } from "@/renderer/state/sharedSettingsStore";
import { startPrMergeAutoDone } from "@/renderer/state/prMergeAutoDone";
import { startDeferredFeaturePrewarm } from "@/renderer/deferredFeatures";

interface IdleCallbackHandle {
Expand Down Expand Up @@ -178,9 +179,12 @@ export function useAppHydration(options: { runtimeOwner?: boolean } = {}) {
}
});

const stopPrMergeAutoDone = startPrMergeAutoDone();

return () => {
isActive = false;
idleHandle.cancel();
stopPrMergeAutoDone();
};
}, [
loadT0,
Expand Down
17 changes: 16 additions & 1 deletion src/renderer/locales/de/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -3478,6 +3478,7 @@ msgid "done"
msgstr "erledigt"

#. Notification status: thread is done
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
#: src/renderer/views/SettingsOverlay/parts/NotificationSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Done"
Expand Down Expand Up @@ -5379,6 +5380,11 @@ msgstr "Vom Anbieter verwaltet"
msgid "Manual order"
msgstr "Manuelle Reihenfolge"

#. placeholder {0}: thread.title
#: src/renderer/views/MainView/parts/Sidebar/parts/SortableThreadItem/parts/ThreadItemSuffix.tsx
msgid "Mark {0} done"
msgstr "{0} als erledigt markieren"

#: src/mobile/views/threadActionSurfaces.tsx
#: src/mobile/views/threadContextMenus.tsx
msgid "Mark all done"
Expand Down Expand Up @@ -5408,6 +5414,11 @@ msgstr "Als erledigt markieren"
msgid "Mark Done"
msgstr "Als erledigt markieren"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Mark done when the pull request merges"
msgstr "Als erledigt markieren, wenn der Pull Request zusammengeführt wird"

#: src/renderer/components/skills/SkillsManager.tsx
msgid "Marketplace"
msgstr "Marketplace"
Expand Down Expand Up @@ -6557,7 +6568,6 @@ msgid "Offline. Showing the last synced data."
msgstr "Offline. Die zuletzt synchronisierten Daten werden angezeigt."

#: src/mobile/views/ThreadsView.tsx
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
msgid "Older"
msgstr "Älter"

Expand Down Expand Up @@ -11282,6 +11292,11 @@ msgstr "Worktree-Stammverzeichnis für WSL-Projekte (ein Linux-Pfad)."
msgid "Worktree storage location"
msgstr "Worktree-Speicherort"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Worktree threads are marked done as soon as Poracode sees their pull request merge. Threads mid-turn wait until the turn finishes."
msgstr "Worktree-Threads werden als erledigt markiert, sobald Poracode das Zusammenführen ihres Pull Requests sieht. Threads mit laufendem Durchlauf warten, bis der Durchlauf endet."

#. placeholder {0}: props.projectName
#. placeholder {0}: props.worktreeBranch
#: src/renderer/views/MainView/parts/Sidebar/parts/GitBadge.tsx
Expand Down
17 changes: 16 additions & 1 deletion src/renderer/locales/en/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -3478,6 +3478,7 @@ msgid "done"
msgstr "done"

#. Notification status: thread is done
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
#: src/renderer/views/SettingsOverlay/parts/NotificationSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Done"
Expand Down Expand Up @@ -5379,6 +5380,11 @@ msgstr "Managed by provider"
msgid "Manual order"
msgstr "Manual order"

#. placeholder {0}: thread.title
#: src/renderer/views/MainView/parts/Sidebar/parts/SortableThreadItem/parts/ThreadItemSuffix.tsx
msgid "Mark {0} done"
msgstr "Mark {0} done"

#: src/mobile/views/threadActionSurfaces.tsx
#: src/mobile/views/threadContextMenus.tsx
msgid "Mark all done"
Expand Down Expand Up @@ -5408,6 +5414,11 @@ msgstr "Mark done"
msgid "Mark Done"
msgstr "Mark Done"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Mark done when the pull request merges"
msgstr "Mark done when the pull request merges"

#: src/renderer/components/skills/SkillsManager.tsx
msgid "Marketplace"
msgstr "Marketplace"
Expand Down Expand Up @@ -6557,7 +6568,6 @@ msgid "Offline. Showing the last synced data."
msgstr "Offline. Showing the last synced data."

#: src/mobile/views/ThreadsView.tsx
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
msgid "Older"
msgstr "Older"

Expand Down Expand Up @@ -11282,6 +11292,11 @@ msgstr "Worktree root for WSL projects (a Linux path)."
msgid "Worktree storage location"
msgstr "Worktree storage location"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Worktree threads are marked done as soon as Poracode sees their pull request merge. Threads mid-turn wait until the turn finishes."
msgstr "Worktree threads are marked done as soon as Poracode sees their pull request merge. Threads mid-turn wait until the turn finishes."

#. placeholder {0}: props.projectName
#. placeholder {0}: props.worktreeBranch
#: src/renderer/views/MainView/parts/Sidebar/parts/GitBadge.tsx
Expand Down
17 changes: 16 additions & 1 deletion src/renderer/locales/es/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -3478,6 +3478,7 @@ msgid "done"
msgstr "listo"

#. Notification status: thread is done
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
#: src/renderer/views/SettingsOverlay/parts/NotificationSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Done"
Expand Down Expand Up @@ -5379,6 +5380,11 @@ msgstr "Gestionado por el proveedor"
msgid "Manual order"
msgstr "Orden manual"

#. placeholder {0}: thread.title
#: src/renderer/views/MainView/parts/Sidebar/parts/SortableThreadItem/parts/ThreadItemSuffix.tsx
msgid "Mark {0} done"
msgstr "Marcar {0} como hecho"

#: src/mobile/views/threadActionSurfaces.tsx
#: src/mobile/views/threadContextMenus.tsx
msgid "Mark all done"
Expand Down Expand Up @@ -5408,6 +5414,11 @@ msgstr "Marcar hecho"
msgid "Mark Done"
msgstr "Marcar como hecho"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Mark done when the pull request merges"
msgstr "Marcar como hecho cuando se fusione la pull request"

#: src/renderer/components/skills/SkillsManager.tsx
msgid "Marketplace"
msgstr "Marketplace"
Expand Down Expand Up @@ -6557,7 +6568,6 @@ msgid "Offline. Showing the last synced data."
msgstr "Sin conexión. Mostrando los últimos datos sincronizados."

#: src/mobile/views/ThreadsView.tsx
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
msgid "Older"
msgstr "Más antiguos"

Expand Down Expand Up @@ -11282,6 +11292,11 @@ msgstr "Raíz de worktrees para proyectos WSL (una ruta de Linux)."
msgid "Worktree storage location"
msgstr "Ubicación de almacenamiento de worktrees"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Worktree threads are marked done as soon as Poracode sees their pull request merge. Threads mid-turn wait until the turn finishes."
msgstr "Los hilos de worktree se marcan como hechos en cuanto Poracode detecta que su pull request se fusiona. Los hilos con un turno en curso esperan a que el turno termine."

#. placeholder {0}: props.projectName
#. placeholder {0}: props.worktreeBranch
#: src/renderer/views/MainView/parts/Sidebar/parts/GitBadge.tsx
Expand Down
17 changes: 16 additions & 1 deletion src/renderer/locales/fr/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -3478,6 +3478,7 @@ msgid "done"
msgstr "fait"

#. Notification status: thread is done
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
#: src/renderer/views/SettingsOverlay/parts/NotificationSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Done"
Expand Down Expand Up @@ -5379,6 +5380,11 @@ msgstr "Gérée par le fournisseur"
msgid "Manual order"
msgstr "Ordre manuel"

#. placeholder {0}: thread.title
#: src/renderer/views/MainView/parts/Sidebar/parts/SortableThreadItem/parts/ThreadItemSuffix.tsx
msgid "Mark {0} done"
msgstr "Marquer {0} comme terminé"

#: src/mobile/views/threadActionSurfaces.tsx
#: src/mobile/views/threadContextMenus.tsx
msgid "Mark all done"
Expand Down Expand Up @@ -5408,6 +5414,11 @@ msgstr "Marquer comme terminé"
msgid "Mark Done"
msgstr "Marquer terminé"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Mark done when the pull request merges"
msgstr "Marquer comme terminé lors de la fusion de la pull request"

#: src/renderer/components/skills/SkillsManager.tsx
msgid "Marketplace"
msgstr "Place de marché"
Expand Down Expand Up @@ -6556,7 +6567,6 @@ msgid "Offline. Showing the last synced data."
msgstr "Hors ligne. Affichage des dernières données synchronisées."

#: src/mobile/views/ThreadsView.tsx
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
msgid "Older"
msgstr "Plus ancien"

Expand Down Expand Up @@ -11281,6 +11291,11 @@ msgstr "Racine des arbres de travail pour les projets WSL (un chemin Linux)."
msgid "Worktree storage location"
msgstr "Emplacement de stockage des arbres de travail"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Worktree threads are marked done as soon as Poracode sees their pull request merge. Threads mid-turn wait until the turn finishes."
msgstr "Les fils d'arbre de travail sont marqués comme terminés dès que Poracode voit leur pull request fusionnée. Les fils dont un tour est en cours attendent la fin du tour."

#. placeholder {0}: props.projectName
#. placeholder {0}: props.worktreeBranch
#: src/renderer/views/MainView/parts/Sidebar/parts/GitBadge.tsx
Expand Down
17 changes: 16 additions & 1 deletion src/renderer/locales/ja/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -3477,6 +3477,7 @@ msgid "done"
msgstr "完了しました"

#. Notification status: thread is done
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
#: src/renderer/views/SettingsOverlay/parts/NotificationSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Done"
Expand Down Expand Up @@ -5378,6 +5379,11 @@ msgstr "プロバイダーが管理"
msgid "Manual order"
msgstr "手動並び替え"

#. placeholder {0}: thread.title
#: src/renderer/views/MainView/parts/Sidebar/parts/SortableThreadItem/parts/ThreadItemSuffix.tsx
msgid "Mark {0} done"
msgstr "{0} を完了にする"

#: src/mobile/views/threadActionSurfaces.tsx
#: src/mobile/views/threadContextMenus.tsx
msgid "Mark all done"
Expand Down Expand Up @@ -5407,6 +5413,11 @@ msgstr "完了マークを付ける"
msgid "Mark Done"
msgstr "完了マークを付ける"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Mark done when the pull request merges"
msgstr "プルリクエストがマージされたら完了にする"

#: src/renderer/components/skills/SkillsManager.tsx
msgid "Marketplace"
msgstr "マーケットプレイス"
Expand Down Expand Up @@ -6555,7 +6566,6 @@ msgid "Offline. Showing the last synced data."
msgstr "オフラインです。最後に同期したデータを表示しています。"

#: src/mobile/views/ThreadsView.tsx
#: src/renderer/views/MainView/parts/Sidebar/parts/sidebarProjectRows.ts
msgid "Older"
msgstr "古い"

Expand Down Expand Up @@ -11280,6 +11290,11 @@ msgstr "WSL プロジェクトのワークツリーのルート(Linux パス
msgid "Worktree storage location"
msgstr "ワークツリーの保存場所"

#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
#: src/renderer/views/SettingsOverlay/parts/ThreadSettings.tsx
msgid "Worktree threads are marked done as soon as Poracode sees their pull request merge. Threads mid-turn wait until the turn finishes."
msgstr "Poracode がプルリクエストのマージを検知すると、ワークツリーのスレッドは完了になります。ターン実行中のスレッドはターンが終わるまで待機します。"

#. placeholder {0}: props.projectName
#. placeholder {0}: props.worktreeBranch
#: src/renderer/views/MainView/parts/Sidebar/parts/GitBadge.tsx
Expand Down
Loading