ml-agent / frontend /src /store /sessionStore.ts
tfrere's picture
tfrere HF Staff
Comprehensive frontend/backend overhaul: unified tool system, responsive UI, code quality
e77f678
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,
}),
}
)
);