From d2bfa92e7438eb7ac7c4e2d72fca708f27c52ba3 Mon Sep 17 00:00:00 2001 From: Shoubhit Dash Date: Fri, 27 Mar 2026 17:32:09 +0530 Subject: [PATCH] fix(app): persist queued followups across project switches (#19421) --- packages/app/src/pages/session.tsx | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index c41133ded7..752b549b86 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -57,12 +57,15 @@ import { TerminalPanel } from "@/pages/session/terminal-panel" import { useSessionCommands } from "@/pages/session/use-session-commands" import { useSessionHashScroll } from "@/pages/session/use-session-hash-scroll" import { Identifier } from "@/utils/id" +import { Persist, persisted } from "@/utils/persist" import { extractPromptFromParts } from "@/utils/prompt" import { same } from "@/utils/same" import { formatServerError } from "@/utils/server-errors" const emptyUserMessages: UserMessage[] = [] -const emptyFollowups: (FollowupDraft & { id: string })[] = [] +type FollowupItem = FollowupDraft & { id: string } +type FollowupEdit = Pick +const emptyFollowups: FollowupItem[] = [] type SessionHistoryWindowInput = { sessionID: () => string | undefined @@ -512,15 +515,20 @@ export default function Page() { deferRender: false, }) - const [followup, setFollowup] = createStore({ - items: {} as Record, - failed: {} as Record, - paused: {} as Record, - edit: {} as Record< - string, - { id: string; prompt: FollowupDraft["prompt"]; context: FollowupDraft["context"] } | undefined - >, - }) + const [followup, setFollowup] = persisted( + Persist.workspace(sdk.directory, "followup", ["followup.v1"]), + createStore<{ + items: Record + failed: Record + paused: Record + edit: Record + }>({ + items: {}, + failed: {}, + paused: {}, + edit: {}, + }), + ) createComputed((prev) => { const key = sessionKey()