diff --git a/src/app.html b/src/app.html index f273cc5..51b5029 100644 --- a/src/app.html +++ b/src/app.html @@ -5,7 +5,7 @@ %sveltekit.head% - +
%sveltekit.body%
diff --git a/src/lib/services/orchestrator.ts b/src/lib/services/orchestrator.ts index 3a05f3f..0198ae6 100644 --- a/src/lib/services/orchestrator.ts +++ b/src/lib/services/orchestrator.ts @@ -161,6 +161,11 @@ export async function* processRequest( let lastError: OrchestratorError | null = null; for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) { + // Skip retries if already known disconnected + if (connectionStore.status === 'disconnected' && attempt > 0) { + break; + } + if (attempt > 0) { connectionStore.setReconnecting(); const delay = backoffDelay(attempt - 1); diff --git a/src/lib/stores/sessions.svelte.ts b/src/lib/stores/sessions.svelte.ts index df739bc..ee139d3 100644 --- a/src/lib/stores/sessions.svelte.ts +++ b/src/lib/stores/sessions.svelte.ts @@ -67,6 +67,10 @@ function createSessionStore() { saveActiveSessionId(id); return sessions.get(id)!; } + // No specific ID — prefer existing active session + if (!id && activeSessionId && sessions.has(activeSessionId)) { + return sessions.get(activeSessionId)!; + } return createSession(id); } diff --git a/src/routes/+page.ts b/src/routes/+page.ts new file mode 100644 index 0000000..ae88a27 --- /dev/null +++ b/src/routes/+page.ts @@ -0,0 +1,2 @@ +export const prerender = false; +export const ssr = false; diff --git a/src/routes/chat/+page.svelte b/src/routes/chat/+page.svelte index 2428616..4d9b815 100644 --- a/src/routes/chat/+page.svelte +++ b/src/routes/chat/+page.svelte @@ -16,11 +16,13 @@ import ConfigSidebar from '$lib/components/ConfigSidebar.svelte'; import ThemeToggle from '$lib/components/ThemeToggle.svelte'; import ConnectionStatus from '$lib/components/ConnectionStatus.svelte'; + import { onMount, untrack } from 'svelte'; import { sessionStore } from '$lib/stores/sessions.svelte'; import { isNonDefaultConfig } from '$lib/utils/sessionConfig'; import { createOrchestration } from '$lib/composables/useOrchestration.svelte'; let messages: ChatMessage[] = $state([]); + let initialized = $state(false); let sessionConfig: SessionConfig = $state( create(SessionConfigSchema, { overrideLevel: OverrideLevel.NONE }) ); @@ -39,13 +41,26 @@ goto(url, { replaceState: replace }); } - $effect(() => { + onMount(() => { const sessionParam = $page.url.searchParams.get('session'); const session = sessionStore.getOrCreateSession(sessionParam ?? undefined); messages = [...session.messages]; if (!sessionParam || sessionParam !== session.id) { navigateToSession(session.id, true); } + initialized = true; + }); + + // Sync messages when session changes via sidebar (after initial mount) + $effect(() => { + if (!initialized) return; + const sessionParam = $page.url.searchParams.get('session'); + if (sessionParam) { + const session = untrack(() => sessionStore.activeSession); + if (session && session.id === sessionParam) { + messages = [...session.messages]; + } + } }); function handleNewChat() { diff --git a/src/routes/chat/+page.ts b/src/routes/chat/+page.ts new file mode 100644 index 0000000..ae88a27 --- /dev/null +++ b/src/routes/chat/+page.ts @@ -0,0 +1,2 @@ +export const prerender = false; +export const ssr = false;