Spaces:
Running
Running
| 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<SessionStore>()( | |
| 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, | |
| }), | |
| } | |
| ) | |
| ); | |