diff --git a/apps/code/src/renderer/features/tasks/hooks/useArchiveTask.ts b/apps/code/src/renderer/features/tasks/hooks/useArchiveTask.ts index 6552a87b2..9f70c79f2 100644 --- a/apps/code/src/renderer/features/tasks/hooks/useArchiveTask.ts +++ b/apps/code/src/renderer/features/tasks/hooks/useArchiveTask.ts @@ -34,10 +34,21 @@ export async function archiveTaskImperative( } } + const terminalStatesSnapshot = Object.fromEntries( + Object.entries(useTerminalStore.getState().terminalStates).filter( + ([key]) => key === taskId || key.startsWith(`${taskId}-`), + ), + ); + const commandCenterState = useCommandCenterStore.getState(); + const commandCenterIndex = commandCenterState.cells.indexOf(taskId); + const wasActiveInCommandCenter = commandCenterState.activeTaskId === taskId; + pinnedTasksApi.unpin(taskId); useTerminalStore.getState().clearTerminalStatesForTask(taskId); useCommandCenterStore.getState().removeTaskById(taskId); + await queryClient.cancelQueries(trpc.archive.pathFilter()); + queryClient.setQueryData( trpc.archive.archivedTaskIds.queryKey(), (old) => (old ? [...old, taskId] : [taskId]), @@ -87,6 +98,20 @@ export async function archiveTaskImperative( if (wasPinned) { pinnedTasksApi.togglePin(taskId); } + if (Object.keys(terminalStatesSnapshot).length > 0) { + useTerminalStore.setState((s) => ({ + terminalStates: { ...s.terminalStates, ...terminalStatesSnapshot }, + })); + } + if (commandCenterIndex !== -1) { + useCommandCenterStore.setState((s) => { + const cells = [...s.cells]; + cells[commandCenterIndex] = taskId; + return wasActiveInCommandCenter + ? { cells, activeTaskId: taskId } + : { cells }; + }); + } throw error; }