import type { Session, SessionObject, SessionContext, ConversationTurn } from '../types.js'; type MergeStrategy = 'augment' | 'replace'; export declare class SessionManager { private db; /** * 构造会话管理器,打开/创建 SQLite 数据库 * @param dbPath 数据库文件路径,传入 ':memory:' 使用内存数据库 */ constructor(dbPath: string); /** * 初始化数据库表结构(遵循 PRD 3.4 节 DDL) */ private initTables; /** * 创建新会话(幂等:若 sessionId 已存在则返回已有会话) * @param sessionId 会话唯一标识 * @param mediaType 媒体类型 * @param imageBase64 原始图像 Base64(可选) * @returns 会话元数据 */ createSession(sessionId: string, mediaType: string, imageBase64?: string): Session; /** * 获取会话完整上下文(元数据 + 全部物体 + 最近 N 轮对话) * @param sessionId 会话 ID * @returns 会话上下文,不存在时返回 null */ getSession(sessionId: string): SessionContext | null; /** * 新增或替换物体(领域服务:ObjectMergeService) * * augment 策略:查询当前最大 object_id,新物体从 max+1 开始分配 ID(避免冲突), * 保留已有物体 + 插入新物体 * replace 策略:删除所有旧物体,插入新物体(保留输入 object_id) * * @param sessionId 会话 ID * @param objects 要操作的物体列表 * @param mergeStrategy 合并策略(augment 或 replace) * @returns 操作后的当前会话物体总数 */ upsertObjects(sessionId: string, objects: SessionObject[], mergeStrategy: MergeStrategy): number; /** * 追加一轮对话记录 * @param sessionId 会话 ID * @param round 轮次编号 * @param role 发言角色 * @param content 对话内容 */ addConversationTurn(sessionId: string, round: number, role: 'user' | 'assistant', content: string): void; /** * 获取最近 N 轮对话记录 * @param sessionId 会话 ID * @param maxRounds 最大轮次数 * @returns 对话记录列表(按时间升序) */ getRecentHistory(sessionId: string, maxRounds: number): ConversationTurn[]; /** * 清理过期会话(级联删除关联 objects 和 history) * @param ttlSeconds 过期时间(秒),默认 3600 * @returns 删除的会话数量 */ cleanupExpired(ttlSeconds?: number): number; /** * 完全删除会话及所有关联数据(CASCADE) * @param sessionId 会话 ID */ deleteSession(sessionId: string): void; /** * 关闭数据库连接 */ close(): void; /** * replace 策略:删除所有旧物体后插入新物体 */ private replaceObjects; /** * augment 策略:为新物体分配不冲突的 object_id 后插入 * * 查询当前最大 object_id,新物体从 max+1 开始依次分配 ID, * 避免与已有物体 ID 冲突,同时保持跨轮 ID 一致性。 */ private augmentObjects; /** * 批量插入物体 */ private insertObjects; /** * 查询最近 N 轮对话记录 * * 策略:先获取最大 round 编号,计算起始 round,查询 >= 起始 round 的所有记录, * 按 round ASC、id ASC 排序返回。 * * @param sessionId 会话 ID * @param maxRounds 最大轮次数 * @returns 对话记录列表(按时间升序) */ private queryRecentHistory; } export {}; //# sourceMappingURL=session-manager.d.ts.map