diff --git a/apps/code/src/renderer/features/sidebar/hooks/useSidebarData.ts b/apps/code/src/renderer/features/sidebar/hooks/useSidebarData.ts index c436ac864..3fca36207 100644 --- a/apps/code/src/renderer/features/sidebar/hooks/useSidebarData.ts +++ b/apps/code/src/renderer/features/sidebar/hooks/useSidebarData.ts @@ -1,4 +1,5 @@ import { useArchivedTaskIds } from "@features/archive/hooks/useArchivedTaskIds"; +import { useProvisioningStore } from "@features/provisioning/stores/provisioningStore"; import { useSessions } from "@features/sessions/stores/sessionStore"; import { useSuspendedTaskIds } from "@features/suspension/hooks/useSuspendedTaskIds"; import { useTasks } from "@features/tasks/hooks/useTasks"; @@ -85,15 +86,18 @@ export function useSidebarData({ const { data: workspaces, isFetched: isWorkspacesFetched } = useWorkspaces(); const archivedTaskIds = useArchivedTaskIds(); const suspendedTaskIds = useSuspendedTaskIds(); + const provisioningTaskIds = useProvisioningStore((s) => s.activeTasks); const isLoading = !isTasksFetched || !isWorkspacesFetched; const allTasks = useMemo( () => rawTasks.filter( (task) => !archivedTaskIds.has(task.id) && - (showAllUsers || !!workspaces?.[task.id]), + (showAllUsers || + !!workspaces?.[task.id] || + provisioningTaskIds.has(task.id)), ), - [rawTasks, archivedTaskIds, workspaces, showAllUsers], + [rawTasks, archivedTaskIds, workspaces, showAllUsers, provisioningTaskIds], ); const sessions = useSessions(); const { timestamps } = useTaskViewed(); diff --git a/apps/code/src/renderer/features/tasks/hooks/useTasks.ts b/apps/code/src/renderer/features/tasks/hooks/useTasks.ts index 4097200c8..51c6f3819 100644 --- a/apps/code/src/renderer/features/tasks/hooks/useTasks.ts +++ b/apps/code/src/renderer/features/tasks/hooks/useTasks.ts @@ -51,13 +51,16 @@ export function useCreateTask() { const queryClient = useQueryClient(); const invalidateTasks = (newTask?: Task) => { - // If a new task is provided, add it to cache immediately for instant UI update if (newTask) { - queryClient.setQueryData(taskKeys.list(), (old) => - old ? [newTask, ...old] : [newTask], + queryClient.setQueriesData( + { queryKey: taskKeys.lists() }, + (old) => { + if (!old) return old; + if (old.some((task) => task.id === newTask.id)) return old; + return [newTask, ...old]; + }, ); } - // Also invalidate to ensure we're in sync with server queryClient.invalidateQueries({ queryKey: taskKeys.lists() }); };