import { join } from "node:path"; import { config } from "../config.js"; import { atomicWriteJson, ensureDirectory, readJsonFile, removeFileIfExists, slugify, } from "../utils/fileStore.js"; export type SessionUiStateRecord = { sessionId: string; isTitleManuallyEdited?: boolean; messages: unknown[]; }; type SessionUiStateContext = { sessionId: string; }; export class SessionUiStateStore { constructor(private readonly baseDir = config.SESSION_UI_STATE_STORAGE_DIR) {} async initialize() { await ensureDirectory(this.baseDir); } async read(context: SessionUiStateContext) { return await readJsonFile(this.filePath(context)); } async write(context: SessionUiStateContext, state: SessionUiStateRecord) { await atomicWriteJson(this.filePath(context), state); return state; } async remove(context: SessionUiStateContext) { await removeFileIfExists(this.filePath(context)); } private filePath(context: SessionUiStateContext) { return join(this.baseDir, `${slugify(context.sessionId)}.json`); } }