fix: prevent session creation loop without backend #42

Merged
shahondin1624 merged 1 commits from fix/session-creation-loop into main 2026-03-12 16:41:41 +01:00
6 changed files with 30 additions and 2 deletions
Showing only changes of commit a5bc38cb65 - Show all commits

View File

@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head% %sveltekit.head%
</head> </head>
<body data-sveltekit-preload-data="hover"> <body data-sveltekit-preload-data="tap">
<div style="display: contents">%sveltekit.body%</div> <div style="display: contents">%sveltekit.body%</div>
</body> </body>
</html> </html>

View File

@@ -161,6 +161,11 @@ export async function* processRequest(
let lastError: OrchestratorError | null = null; let lastError: OrchestratorError | null = null;
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) { for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
// Skip retries if already known disconnected
if (connectionStore.status === 'disconnected' && attempt > 0) {
break;
}
if (attempt > 0) { if (attempt > 0) {
connectionStore.setReconnecting(); connectionStore.setReconnecting();
const delay = backoffDelay(attempt - 1); const delay = backoffDelay(attempt - 1);

View File

@@ -67,6 +67,10 @@ function createSessionStore() {
saveActiveSessionId(id); saveActiveSessionId(id);
return sessions.get(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); return createSession(id);
} }

2
src/routes/+page.ts Normal file
View File

@@ -0,0 +1,2 @@
export const prerender = false;
export const ssr = false;

View File

@@ -16,11 +16,13 @@
import ConfigSidebar from '$lib/components/ConfigSidebar.svelte'; import ConfigSidebar from '$lib/components/ConfigSidebar.svelte';
import ThemeToggle from '$lib/components/ThemeToggle.svelte'; import ThemeToggle from '$lib/components/ThemeToggle.svelte';
import ConnectionStatus from '$lib/components/ConnectionStatus.svelte'; import ConnectionStatus from '$lib/components/ConnectionStatus.svelte';
import { onMount, untrack } from 'svelte';
import { sessionStore } from '$lib/stores/sessions.svelte'; import { sessionStore } from '$lib/stores/sessions.svelte';
import { isNonDefaultConfig } from '$lib/utils/sessionConfig'; import { isNonDefaultConfig } from '$lib/utils/sessionConfig';
import { createOrchestration } from '$lib/composables/useOrchestration.svelte'; import { createOrchestration } from '$lib/composables/useOrchestration.svelte';
let messages: ChatMessage[] = $state([]); let messages: ChatMessage[] = $state([]);
let initialized = $state(false);
let sessionConfig: SessionConfig = $state( let sessionConfig: SessionConfig = $state(
create(SessionConfigSchema, { overrideLevel: OverrideLevel.NONE }) create(SessionConfigSchema, { overrideLevel: OverrideLevel.NONE })
); );
@@ -39,13 +41,26 @@
goto(url, { replaceState: replace }); goto(url, { replaceState: replace });
} }
$effect(() => { onMount(() => {
const sessionParam = $page.url.searchParams.get('session'); const sessionParam = $page.url.searchParams.get('session');
const session = sessionStore.getOrCreateSession(sessionParam ?? undefined); const session = sessionStore.getOrCreateSession(sessionParam ?? undefined);
messages = [...session.messages]; messages = [...session.messages];
if (!sessionParam || sessionParam !== session.id) { if (!sessionParam || sessionParam !== session.id) {
navigateToSession(session.id, true); 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() { function handleNewChat() {

2
src/routes/chat/+page.ts Normal file
View File

@@ -0,0 +1,2 @@
export const prerender = false;
export const ssr = false;