diff --git a/ui/desktop/src/App.tsx b/ui/desktop/src/App.tsx index f5fc012b2820..fb766f00478f 100644 --- a/ui/desktop/src/App.tsx +++ b/ui/desktop/src/App.tsx @@ -89,16 +89,32 @@ const PairRouteWrapper = ({ const setView = useNavigation(); const routeState = (location.state as PairRouteState) || (window.history.state as PairRouteState) || {}; - const [searchParams] = useSearchParams(); + const [searchParams, setSearchParams] = useSearchParams(); const [initialMessage] = useState(routeState.initialMessage); const resumeSessionId = searchParams.get('resumeSessionId') ?? undefined; + // 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; + + // Update URL with session ID if it's not already there (new chat from pair) + useEffect(() => { + if (process.env.ALPHA && sessionId && sessionId !== resumeSessionId) { + setSearchParams((prev) => { + prev.set('resumeSessionId', sessionId); + return prev; + }); + } + }, [sessionId, resumeSessionId, setSearchParams]); + return process.env.ALPHA ? ( ) : (