/** * @zhin.js/ai - Session Manager * 会话管理器,支持上下文记忆和数据库持久化 * * 特性: * - 数据库持久化存储(使用 Zhin 的数据库服务) * - 内存缓存加速读取 * - 自动过期清理 * - 更长的上下文记忆能力 */ import type { ChatMessage, SessionConfig, Session } from '../types.js'; /** IM 场景类型,用于 sessionId 的 type 段 */ export type IMSessionScope = 'private' | 'group' | 'channel'; export interface ResolveIMSessionIdInput { platform: string; endpointId: string; scope: IMSessionScope; sceneId: string; } /** * 解析 IM 会话 ID:`platform:endpointId:type:sceneId` * - 群/频道:sceneId 为群号或频道 ID(不含 senderId) * - 私聊:sceneId 为对方用户 ID */ export declare function resolveIMSessionId(input: ResolveIMSessionIdInput): string; /** 按场景决定写入 sessionId 的 scene 段 */ export declare function resolveIMSceneIdForSession(scope: IMSessionScope, sceneId?: string, senderId?: string): string; /** 从 Message 通讯上下文生成 IM sessionId */ export declare function resolveIMSessionIdFromMessage(message: { $adapter?: string; $endpoint?: string; $channel?: { type?: IMSessionScope; id?: string; }; $sender?: { id?: string; }; }): string; /** * 数据库模型定义 */ export type AISessionStatus = 'active' | 'archived'; export declare const AI_SESSION_MODEL: { session_id: { type: "text"; nullable: boolean; }; session_key: { type: "text"; nullable: boolean; }; platform: { type: "text"; nullable: boolean; }; endpoint_id: { type: "text"; nullable: boolean; }; scene_id: { type: "text"; nullable: boolean; }; scene_type: { type: "text"; nullable: boolean; }; model: { type: "text"; default: string; }; status: { type: "text"; default: string; }; created_at: { type: "integer"; default: number; }; updated_at: { type: "integer"; default: number; }; }; /** * 会话管理器接口 */ export interface ISessionManager { get(sessionId: string, config?: SessionConfig): Session | Promise; has(sessionId: string): boolean | Promise; addMessage(sessionId: string, message: ChatMessage): void | Promise; getMessages(sessionId: string): ChatMessage[] | Promise; setSystemPrompt(sessionId: string, prompt: string): void | Promise; clear(sessionId: string): boolean | Promise; reset(sessionId: string): void | Promise; listSessions(): string[] | Promise; getStats(): { total: number; active: number; expired: number; } | Promise<{ total: number; active: number; expired: number; }>; cleanup(): number | Promise; dispose(): void | Promise; } /** * 内存会话管理器(回退方案) */ export declare class MemorySessionManager implements ISessionManager { private sessions; private config; private cleanupTimer?; private disposed; /** 内存会话上限,超出时淘汰最久未访问的条目 */ private static readonly MAX_SESSIONS; constructor(config?: { maxHistory?: number; expireMs?: number; }); get(sessionId: string, config?: SessionConfig): Session; /** * 当会话数超过上限时,淘汰最久未访问的条目。 * 利用 Map 的插入顺序(最旧的在前),优先淘汰已过期的会话。 */ private evictIfOverLimit; has(sessionId: string): boolean; addMessage(sessionId: string, message: ChatMessage): void; private trimMessages; getMessages(sessionId: string): ChatMessage[]; setSystemPrompt(sessionId: string, prompt: string): void; clear(sessionId: string): boolean; reset(sessionId: string): void; listSessions(): string[]; getStats(): { total: number; active: number; expired: number; }; cleanup(): number; dispose(): void; } /** * 数据库会话管理器 * 使用 Zhin 的数据库服务进行持久化存储 */ export declare class DatabaseSessionManager implements ISessionManager { private cache; private config; private cleanupTimer?; private saveQueue; private saveTimer?; private model; private disposed; /** 内存缓存上限,超出时淘汰最久未访问的条目 */ private static readonly MAX_CACHE_SIZE; constructor(model: any, config?: { maxHistory?: number; expireMs?: number; }); /** 按 expireMs 淘汰内存 cache,避免热 session 长期占用 RSS */ private pruneMemoryCache; /** * 从数据库加载会话 */ private loadSession; /** * 保存会话到数据库(防抖) */ private schedulesSave; /** * 批量保存队列中的会话 */ private flushSaveQueue; get(sessionId: string, config?: SessionConfig): Promise; /** * 当缓存超过上限时,淘汰最久未访问的条目。 * 利用 Map 的插入顺序(最旧的在前)。 */ private evictCacheIfNeeded; has(sessionId: string): Promise; addMessage(sessionId: string, message: ChatMessage): Promise; private trimMessages; getMessages(sessionId: string): Promise; setSystemPrompt(sessionId: string, prompt: string): Promise; clear(sessionId: string): Promise; reset(sessionId: string): Promise; listSessions(): Promise; getStats(): Promise<{ total: number; active: number; expired: number; }>; cleanup(): Promise; dispose(): Promise; } /** * 会话管理器包装器 * 支持同步和异步接口的统一使用 */ export declare class SessionManager implements ISessionManager { private manager; constructor(manager: ISessionManager); /** * 生成会话 ID(旧格式,per-user + channel) * @deprecated 请使用 {@link resolveIMSessionId} / {@link resolveIMSessionIdFromMessage} */ static generateId(platform: string, userId: string, channelId?: string): string; get(sessionId: string, config?: SessionConfig): Session | Promise; has(sessionId: string): boolean | Promise; addMessage(sessionId: string, message: ChatMessage): void | Promise; getMessages(sessionId: string): ChatMessage[] | Promise; setSystemPrompt(sessionId: string, prompt: string): void | Promise; clear(sessionId: string): boolean | Promise; reset(sessionId: string): void | Promise; listSessions(): string[] | Promise; getStats(): { total: number; active: number; expired: number; } | Promise<{ total: number; active: number; expired: number; }>; cleanup(): number | Promise; dispose(): void | Promise; } /** * 创建内存会话管理器(回退方案) */ export declare function createMemorySessionManager(config?: { maxHistory?: number; expireMs?: number; }): SessionManager; /** * 创建数据库会话管理器 */ export declare function createDatabaseSessionManager(model: any, config?: { maxHistory?: number; expireMs?: number; }): SessionManager; /** * 创建会话管理器(向后兼容) * @deprecated 使用 createMemorySessionManager 或 createDatabaseSessionManager */ export declare function createSessionManager(config?: { maxHistory?: number; expireMs?: number; }): SessionManager; //# sourceMappingURL=session.d.ts.map