diff --git a/apps/sim/app/api/mothership/chats/[chatId]/fork/route.ts b/apps/sim/app/api/mothership/chats/[chatId]/fork/route.ts index 7a33f2326b6..e1e4a70c98a 100644 --- a/apps/sim/app/api/mothership/chats/[chatId]/fork/route.ts +++ b/apps/sim/app/api/mothership/chats/[chatId]/fork/route.ts @@ -74,8 +74,8 @@ export const POST = withRouteHandler( : [] const newId = generateId() - const baseTitle = (parent.title ?? 'New task').replace(/ \| Fork$/, '') - const title = `${baseTitle} | Fork` + const baseTitle = (parent.title ?? 'New task').replace(/^Fork \| /, '') + const title = `Fork | ${baseTitle}` const now = new Date() const [newChat] = await db diff --git a/apps/sim/hooks/queries/tasks.ts b/apps/sim/hooks/queries/tasks.ts index 100f891c36e..e336f6e85d7 100644 --- a/apps/sim/hooks/queries/tasks.ts +++ b/apps/sim/hooks/queries/tasks.ts @@ -609,6 +609,25 @@ export function useForkTask(workspaceId?: string) { const queryClient = useQueryClient() return useMutation({ mutationFn: forkChat, + onSuccess: async (data, variables) => { + await queryClient.cancelQueries({ queryKey: taskKeys.list(workspaceId) }) + const existing = queryClient.getQueryData(taskKeys.list(workspaceId)) + if (existing) { + const sourceTask = existing.find((t) => t.id === variables.chatId) + const baseName = (sourceTask?.name ?? 'New task').replace(/^Fork \| /, '') + const optimisticTask: TaskMetadata = { + id: data.id, + name: `Fork | ${baseName}`, + updatedAt: new Date(), + isActive: false, + isUnread: false, + } + queryClient.setQueryData(taskKeys.list(workspaceId), [ + optimisticTask, + ...existing, + ]) + } + }, onSettled: () => { queryClient.invalidateQueries({ queryKey: taskKeys.list(workspaceId) }) },