import type Database from "better-sqlite3"; import { type ChatAccessContext } from "../core/access.js"; export interface SessionRow { id: string; chat_id: string; user_id: string | null; source: string; status: string; thread_id: string | null; backend_type: string | null; agent_session_id: string | null; started_at: string; ended_at: string | null; last_active_at: string | null; start_msg_id: number | null; end_msg_id: number | null; message_count: number | null; turn_count: number | null; } export type SessionListStatus = "all" | "active" | "archived"; export interface SessionActivityCursor { activityAt: string; id: string; } export declare function listSessions(db: Database.Database, options: ChatAccessContext & { targetChatId: string; limit: number; threadId?: string; allThreads?: boolean; status?: SessionListStatus; since?: string; before?: string; after?: SessionActivityCursor; }): SessionRow[]; /** List sessions that may contain events inside a canonical UTC range;默认包含活跃会话。 */ export declare function listSessionsOverlappingUtcRange(db: Database.Database, options: ChatAccessContext & { targetChatId: string; limit: number; threadId?: string; allThreads?: boolean; status?: SessionListStatus; sinceUtc?: string; beforeUtc?: string; through?: SessionActivityCursor; }): SessionRow[]; /** 对外展示用 backend 原生 id;未绑定或仍是引擎句柄时回退到内部 sessions.id。 */ export declare function sessionPublicId(row: Pick): string; export declare function getSessionForAccess(db: Database.Database, id: string, context: ChatAccessContext): SessionRow | undefined; export declare function hasEndedUserSession(db: Database.Database, chatId: string): boolean;