import { create } from 'zustand'; import { persist } from 'zustand/middleware'; import type { SessionMeta } from '@/types/agent'; import { useAgentStore } from './agentStore'; interface SessionStore { sessions: SessionMeta[]; activeSessionId: string | null; // Actions createSession: (id: string) => void; deleteSession: (id: string) => void; switchSession: (id: string) => void; setSessionActive: (id: string, isActive: boolean) => void; updateSessionTitle: (id: string, title: string) => void; } export const useSessionStore = create()( persist( (set, get) => ({ sessions: [], activeSessionId: null, createSession: (id: string) => { const newSession: SessionMeta = { id, title: `Chat ${get().sessions.length + 1}`, createdAt: new Date().toISOString(), isActive: true, }; set((state) => ({ sessions: [...state.sessions, newSession], activeSessionId: id, })); }, deleteSession: (id: string) => { // Clean up persisted messages for this session useAgentStore.getState().deleteSessionMessages(id); set((state) => { const newSessions = state.sessions.filter((s) => s.id !== id); const newActiveId = state.activeSessionId === id ? newSessions[newSessions.length - 1]?.id || null : state.activeSessionId; return { sessions: newSessions, activeSessionId: newActiveId, }; }); }, switchSession: (id: string) => { set({ activeSessionId: id }); }, setSessionActive: (id: string, isActive: boolean) => { set((state) => ({ sessions: state.sessions.map((s) => s.id === id ? { ...s, isActive } : s ), })); }, updateSessionTitle: (id: string, title: string) => { set((state) => ({ sessions: state.sessions.map((s) => s.id === id ? { ...s, title } : s ), })); }, }), { name: 'hf-agent-sessions', partialize: (state) => ({ sessions: state.sessions, activeSessionId: state.activeSessionId, }), } ) );