feat(chat): delay session creation until first message

The app now opens to a new chat by default on startup
New chats no longer create a session until you send your first message
Fixed mobile and VSCode sessions handling for better consistency
This commit is contained in:
Bohdan Triapitsyn
2025-12-21 20:18:51 +02:00
parent 75ba954307
commit 7699aab123
12 changed files with 273 additions and 152 deletions
+5 -11
View File
@@ -1,13 +1,12 @@
import React from 'react';
import { useSessionStore } from '@/stores/useSessionStore';
import { useUIStore } from '@/stores/useUIStore';
import { useConfigStore } from '@/stores/useConfigStore';
import { useThemeSystem } from '@/contexts/useThemeSystem';
import { useAssistantStatus } from '@/hooks/useAssistantStatus';
import { getRegisteredRuntimeAPIs } from '@/contexts/runtimeAPIRegistry';
export const useKeyboardShortcuts = () => {
const { createSession, abortCurrentOperation, initializeNewOpenChamberSession, armAbortPrompt, clearAbortPrompt, currentSessionId } = useSessionStore();
const { openNewSessionDraft, abortCurrentOperation, armAbortPrompt, clearAbortPrompt, currentSessionId } = useSessionStore();
const {
toggleCommandPalette,
toggleHelpDialog,
@@ -17,7 +16,6 @@ export const useKeyboardShortcuts = () => {
setActiveMainTab,
setSettingsDialogOpen,
} = useUIStore();
const { agents } = useConfigStore();
const { themeMode, setThemeMode } = useThemeSystem();
const { working } = useAssistantStatus();
const abortPrimedUntilRef = React.useRef<number | null>(null);
@@ -86,11 +84,9 @@ export const useKeyboardShortcuts = () => {
return;
}
createSession().then(session => {
if (session) {
initializeNewOpenChamberSession(session.id, agents);
}
});
setActiveMainTab('chat');
setSessionSwitcherOpen(false);
openNewSessionDraft();
}
if ((e.metaKey || e.ctrlKey) && e.key === '/') {
@@ -189,7 +185,7 @@ export const useKeyboardShortcuts = () => {
window.removeEventListener('keydown', handleKeyDown);
};
}, [
createSession,
openNewSessionDraft,
abortCurrentOperation,
toggleCommandPalette,
toggleHelpDialog,
@@ -200,8 +196,6 @@ export const useKeyboardShortcuts = () => {
setSettingsDialogOpen,
setThemeMode,
themeMode,
initializeNewOpenChamberSession,
agents,
working,
armAbortPrompt,
resetAbortPriming,
+7 -11
View File
@@ -2,7 +2,6 @@ import React from 'react';
import { toast } from 'sonner';
import { useSessionStore } from '@/stores/useSessionStore';
import { useUIStore } from '@/stores/useUIStore';
import { useConfigStore } from '@/stores/useConfigStore';
import { useDirectoryStore } from '@/stores/useDirectoryStore';
import { useThemeSystem } from '@/contexts/useThemeSystem';
import { getRegisteredRuntimeAPIs } from '@/contexts/runtimeAPIRegistry';
@@ -32,17 +31,17 @@ type MenuAction =
export const useMenuActions = (
onToggleMemoryDebug?: () => void
) => {
const { createSession, initializeNewOpenChamberSession } = useSessionStore();
const { openNewSessionDraft } = useSessionStore();
const {
toggleCommandPalette,
toggleHelpDialog,
toggleSidebar,
setSessionSwitcherOpen,
setSessionCreateDialogOpen,
setActiveMainTab,
setSettingsDialogOpen,
setAboutDialogOpen,
} = useUIStore();
const { agents } = useConfigStore();
const { setDirectory } = useDirectoryStore();
const { setThemeMode } = useThemeSystem();
const isDownloadingLogsRef = React.useRef(false);
@@ -87,11 +86,9 @@ export const useMenuActions = (
break;
case 'new-session':
createSession().then(session => {
if (session) {
initializeNewOpenChamberSession(session.id, agents);
}
});
setActiveMainTab('chat');
setSessionSwitcherOpen(false);
openNewSessionDraft();
break;
case 'worktree-creator':
@@ -183,17 +180,16 @@ export const useMenuActions = (
window.addEventListener(MENU_ACTION_EVENT, handleMenuAction);
return () => window.removeEventListener(MENU_ACTION_EVENT, handleMenuAction);
}, [
createSession,
initializeNewOpenChamberSession,
openNewSessionDraft,
toggleCommandPalette,
toggleHelpDialog,
toggleSidebar,
setSessionSwitcherOpen,
setSessionCreateDialogOpen,
setActiveMainTab,
setSettingsDialogOpen,
setAboutDialogOpen,
setThemeMode,
agents,
onToggleMemoryDebug,
handleChangeWorkspace,
]);