Spaces:
Sleeping
Sleeping
| import { browser } from "$app/environment"; | |
| export interface BranchStateSnapshot { | |
| messageId: string; | |
| personaId: string; | |
| personaName: string; | |
| } | |
| export interface BranchTrackingSnapshot { | |
| messageId: string | null; | |
| personaId: string | null; | |
| } | |
| const BRANCH_STATE_PREFIX = "branchState_"; | |
| const BRANCH_TRACKING_PREFIX = "branchTracking_"; | |
| function getBranchStateKey(conversationId: string): string { | |
| return `${BRANCH_STATE_PREFIX}${conversationId}`; | |
| } | |
| function getBranchTrackingKey(conversationId: string): string { | |
| return `${BRANCH_TRACKING_PREFIX}${conversationId}`; | |
| } | |
| export function loadBranchState(conversationId: string): BranchStateSnapshot | null { | |
| if (!browser) return null; | |
| const stored = localStorage.getItem(getBranchStateKey(conversationId)); | |
| if (!stored) return null; | |
| try { | |
| return JSON.parse(stored) as BranchStateSnapshot; | |
| } catch { | |
| localStorage.removeItem(getBranchStateKey(conversationId)); | |
| return null; | |
| } | |
| } | |
| export function persistBranchState( | |
| conversationId: string, | |
| state: BranchStateSnapshot | null | |
| ): void { | |
| if (!browser) return; | |
| const key = getBranchStateKey(conversationId); | |
| if (state) { | |
| localStorage.setItem(key, JSON.stringify(state)); | |
| } else { | |
| localStorage.removeItem(key); | |
| } | |
| } | |
| export function loadBranchTracking(conversationId: string): BranchTrackingSnapshot { | |
| if (!browser) return { messageId: null, personaId: null }; | |
| const stored = localStorage.getItem(getBranchTrackingKey(conversationId)); | |
| if (!stored) return { messageId: null, personaId: null }; | |
| try { | |
| const parsed = JSON.parse(stored) as BranchTrackingSnapshot; | |
| return { | |
| messageId: parsed.messageId ?? null, | |
| personaId: parsed.personaId ?? null, | |
| }; | |
| } catch { | |
| localStorage.removeItem(getBranchTrackingKey(conversationId)); | |
| return { messageId: null, personaId: null }; | |
| } | |
| } | |
| export function persistBranchTracking( | |
| conversationId: string, | |
| tracking: BranchTrackingSnapshot | null | |
| ): void { | |
| if (!browser) return; | |
| const key = getBranchTrackingKey(conversationId); | |
| if (tracking && (tracking.messageId || tracking.personaId)) { | |
| localStorage.setItem(key, JSON.stringify(tracking)); | |
| } else { | |
| localStorage.removeItem(key); | |
| } | |
| } | |