Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions ui/desktop/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ const PairRouteWrapper = ({
setFatalError,
agentState,
loadCurrentChat,
activeSessionId,
setActiveSessionId,
}: {
chat: ChatType;
setChat: (chat: ChatType) => void;
Expand All @@ -84,6 +86,8 @@ const PairRouteWrapper = ({
setFatalError: (value: ((prevState: string | null) => string | null) | string | null) => void;
agentState: AgentState;
loadCurrentChat: (context: InitializationContext) => Promise<ChatType>;
activeSessionId: string | null;
setActiveSessionId: (id: string | null) => void;
}) => {
const location = useLocation();
const setView = useNavigation();
Expand All @@ -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) => {
Expand All @@ -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 ? (
<Pair2
setChat={setChat}
Expand Down Expand Up @@ -322,6 +335,9 @@ export function AppInner() {
recipe: null,
});

// Store the active session ID for navigation persistence
const [activeSessionId, setActiveSessionId] = useState<string | null>(null);

const { addExtension } = useConfig();
const { agentState, loadCurrentChat, resetChat } = useAgent();
const resetChatIfNecessary = useCallback(() => {
Expand Down Expand Up @@ -574,6 +590,8 @@ export function AppInner() {
setFatalError={setFatalError}
setAgentWaitingMessage={setAgentWaitingMessage}
setIsGoosehintsModalOpen={setIsGoosehintsModalOpen}
activeSessionId={activeSessionId}
setActiveSessionId={setActiveSessionId}
/>
}
/>
Expand Down
Loading