From c39775ea44b22f2936fdf86f4d90e23eec91f7c1 Mon Sep 17 00:00:00 2001 From: Zane <75694352+zanesq@users.noreply.github.com> Date: Thu, 30 Oct 2025 13:40:32 -0700 Subject: [PATCH] nextcamp - fix session resume when navigating back to chat in sidebar (#5370) --- ui/desktop/src/App.tsx | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/ui/desktop/src/App.tsx b/ui/desktop/src/App.tsx index 5fa3fde7a0..5ae00641ab 100644 --- a/ui/desktop/src/App.tsx +++ b/ui/desktop/src/App.tsx @@ -76,6 +76,8 @@ const PairRouteWrapper = ({ setFatalError, agentState, loadCurrentChat, + activeSessionId, + setActiveSessionId, }: { chat: ChatType; setChat: (chat: ChatType) => void; @@ -84,6 +86,8 @@ const PairRouteWrapper = ({ setFatalError: (value: ((prevState: string | null) => string | null) | string | null) => void; agentState: AgentState; loadCurrentChat: (context: InitializationContext) => Promise; + activeSessionId: string | null; + setActiveSessionId: (id: string | null) => void; }) => { const location = useLocation(); const setView = useNavigation(); @@ -96,11 +100,13 @@ const PairRouteWrapper = ({ // Determine which session ID to use: // 1. From route state (when navigating from Hub with a new session) - // 2. From URL params (when resuming a session) - // 3. From the existing chat state (when navigating to Pair directly) - const sessionId = routeState.resumeSessionId || resumeSessionId || chat.sessionId; + // 2. From URL params (when resuming a session or after refresh) + // 3. From active session state (when navigating back from other routes) + // 4. From the existing chat state + const sessionId = + routeState.resumeSessionId || resumeSessionId || activeSessionId || chat.sessionId; - // Update URL with session ID if it's not already there (new chat from pair) + // Update URL with session ID when on /pair route (for refresh support) useEffect(() => { if (process.env.ALPHA && sessionId && sessionId !== resumeSessionId) { setSearchParams((prev) => { @@ -110,6 +116,13 @@ const PairRouteWrapper = ({ } }, [sessionId, resumeSessionId, setSearchParams]); + // Update active session state when session ID changes + useEffect(() => { + if (process.env.ALPHA && sessionId && sessionId !== activeSessionId) { + setActiveSessionId(sessionId); + } + }, [sessionId, activeSessionId, setActiveSessionId]); + return process.env.ALPHA ? ( (null); + const { addExtension } = useConfig(); const { agentState, loadCurrentChat, resetChat } = useAgent(); const resetChatIfNecessary = useCallback(() => { @@ -574,6 +590,8 @@ export function AppInner() { setFatalError={setFatalError} setAgentWaitingMessage={setAgentWaitingMessage} setIsGoosehintsModalOpen={setIsGoosehintsModalOpen} + activeSessionId={activeSessionId} + setActiveSessionId={setActiveSessionId} /> } />