feat: add session switcher dropdown in header

Open recent sessions from chat headers
Support session switching in mini chat
Share pinned and active session state
This commit is contained in:
Bohdan Triapitsyn
2026-05-15 18:16:09 +03:00
parent 81cb31f1fd
commit b6149614bd
17 changed files with 593 additions and 93 deletions
+20 -2
View File
@@ -91,10 +91,17 @@ const MiniChatBootstrap: React.FC<{ config: MiniChatConfig }> = ({ config }) =>
};
}, [isInitialized]);
const directoryBootstrappedRef = React.useRef(false);
React.useEffect(() => {
if (directoryBootstrappedRef.current) return;
if (config.mode !== 'session') return;
if (!config.directory || currentDirectory === config.directory) return;
if (!config.directory) return;
if (currentDirectory === config.directory) {
directoryBootstrappedRef.current = true;
return;
}
setDirectory(config.directory, { showOverlay: false });
directoryBootstrappedRef.current = true;
}, [config.directory, config.mode, currentDirectory, setDirectory]);
React.useEffect(() => {
@@ -109,13 +116,24 @@ const MiniChatBootstrap: React.FC<{ config: MiniChatConfig }> = ({ config }) =>
if (agentsCount === 0) void loadAgents();
}, [agentsCount, isConnected, loadAgents, loadProviders, providersCount]);
const sessionBootstrappedRef = React.useRef(false);
React.useEffect(() => {
if (sessionBootstrappedRef.current) return;
if (config.mode !== 'session' || !config.sessionId) return;
if (currentSessionId === config.sessionId) return;
if (currentSessionId === config.sessionId) {
sessionBootstrappedRef.current = true;
return;
}
if (currentSessionId) {
// User already has a different session selected (e.g. from a prior switch); don't override.
sessionBootstrappedRef.current = true;
return;
}
const session = sessions.find((entry) => entry.id === config.sessionId);
if (!session) return;
const directory = (session as { directory?: string | null }).directory ?? config.directory;
setCurrentSession(config.sessionId, directory);
sessionBootstrappedRef.current = true;
}, [config, currentSessionId, sessions, setCurrentSession]);
React.useEffect(() => {