diff --git a/src/lib/components/chat/ContinueSessionBanner.svelte b/src/lib/components/chat/ContinueSessionBanner.svelte new file mode 100644 index 0000000..e49a503 --- /dev/null +++ b/src/lib/components/chat/ContinueSessionBanner.svelte @@ -0,0 +1,70 @@ + + +
+ + diff --git a/src/lib/server/chat-state-store.test.ts b/src/lib/server/chat-state-store.test.ts index 523961c..d68370e 100644 --- a/src/lib/server/chat-state-store.test.ts +++ b/src/lib/server/chat-state-store.test.ts @@ -254,4 +254,28 @@ describe('ChatStateStore', () => { spy.mockRestore(); }); }); + + describe('primary session metadata', () => { + it('saves and loads the primary session file', async () => { + const store = createChatStateStore(tempDir); + const session = { + tabId: 'tab-2', + sdkSessionId: 'sdk-abc', + model: 'gpt-4.1', + mode: 'interactive', + updatedAt: Date.now() + }; + + await store.setPrimarySession('user-1', session); + const loaded = await store.getPrimarySession('user-1'); + + expect(loaded).toEqual(session); + }); + + it('returns null when no primary session exists', async () => { + const store = createChatStateStore(tempDir); + const loaded = await store.getPrimarySession('missing-user'); + expect(loaded).toBeNull(); + }); + }); }); diff --git a/src/lib/server/chat-state-store.ts b/src/lib/server/chat-state-store.ts index 709924b..f56b45a 100644 --- a/src/lib/server/chat-state-store.ts +++ b/src/lib/server/chat-state-store.ts @@ -15,6 +15,14 @@ export interface PersistedChatState { updatedAt: number; } +export interface PrimarySessionState { + tabId: string; + sdkSessionId: string | null; + model: string; + mode: string; + updatedAt: number; +} + export interface ChatStateStore { save(userId: string, tabId: string, state: PersistedChatState): Promise