"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AssistantSessionStore = void 0; const nanoid_1 = require("nanoid"); const config_1 = require("../config"); const investigationState_1 = require("./investigationState"); const MAX_ITEMS_PER_SESSION = 200; function cloneItem(item) { return { ...item, debug: item.debug ? { ...item.debug } : null }; } function cloneSession(state) { return { session_id: state.session_id, updated_at: state.updated_at, items: state.items.map(cloneItem), investigation_state: (0, investigationState_1.cloneInvestigationState)(state.investigation_state) }; } function normalizeSessionShape(state) { const legacy = state; const normalizedItems = Array.isArray(legacy.items) ? legacy.items : []; const investigationState = config_1.FEATURE_ASSISTANT_INVESTIGATION_STATE_V1 ? legacy.investigation_state ?? (0, investigationState_1.createEmptyInvestigationState)(state.session_id) : legacy.investigation_state ?? null; state.items = normalizedItems; state.updated_at = typeof legacy.updated_at === "string" && legacy.updated_at.trim() ? legacy.updated_at : new Date().toISOString(); state.investigation_state = investigationState; return state; } class AssistantSessionStore { sessions = new Map(); ensureSession(sessionId) { const resolvedId = (sessionId ?? "").trim() || `asst-${(0, nanoid_1.nanoid)(10)}`; const existing = this.sessions.get(resolvedId); if (existing) { return cloneSession(normalizeSessionShape(existing)); } const created = { session_id: resolvedId, updated_at: new Date().toISOString(), items: [], investigation_state: config_1.FEATURE_ASSISTANT_INVESTIGATION_STATE_V1 ? (0, investigationState_1.createEmptyInvestigationState)(resolvedId) : null }; this.sessions.set(resolvedId, created); return cloneSession(created); } appendItem(sessionId, item) { const session = this.ensureMutableSession(sessionId); session.items.push(item); if (session.items.length > MAX_ITEMS_PER_SESSION) { session.items = session.items.slice(session.items.length - MAX_ITEMS_PER_SESSION); } session.updated_at = new Date().toISOString(); return cloneItem(item); } getSession(sessionId) { const found = this.sessions.get(sessionId); return found ? cloneSession(normalizeSessionShape(found)) : null; } setInvestigationState(sessionId, state) { const session = this.ensureMutableSession(sessionId); session.investigation_state = (0, investigationState_1.cloneInvestigationState)(state); session.updated_at = new Date().toISOString(); return (0, investigationState_1.cloneInvestigationState)(session.investigation_state); } ensureMutableSession(sessionId) { const existing = this.sessions.get(sessionId); if (existing) { return normalizeSessionShape(existing); } const created = { session_id: sessionId, updated_at: new Date().toISOString(), items: [], investigation_state: config_1.FEATURE_ASSISTANT_INVESTIGATION_STATE_V1 ? (0, investigationState_1.createEmptyInvestigationState)(sessionId) : null }; this.sessions.set(sessionId, created); return created; } } exports.AssistantSessionStore = AssistantSessionStore;