import { SqliteSaver } from "@langchain/langgraph-checkpoint-sqlite"; export interface Session { id: string; name: string; agentName: string; createdAt: Date; updatedAt: Date; status: "active" | "archived" | "deleted"; messageCount: number; lastMessagePreview?: string; metadata?: Record; } export interface ListSessionsOptions { status?: "active" | "archived" | "deleted"; limit?: number; offset?: number; agentName?: string; } export interface SessionMessage { id: string; role: "user" | "assistant"; content: string; attachments?: SessionAttachment[]; createdAt: number; uiBlocks?: Array<{ id?: string; spec: unknown; uiOnly?: boolean; textFallback?: string; }>; uiTextFallback?: string; toolEvents?: Array<{ id: string; name: string; status: "running" | "completed" | "error"; output?: unknown; ui?: unknown; uiOnly?: boolean; textFallback?: string; error?: string; timestamp?: number; startedAt?: number; completedAt?: number; }>; activityTimeline?: Array<{ id: string; kind: "tool"; order: number; toolEventId: string; }>; } export interface SessionAttachment { kind: "image" | "audio" | "file"; dataUrl: string; name?: string; mimeType?: string; size?: number; path?: string; } /** * SessionManager handles session metadata and provides unified access to * both the custom sessions table and LangGraph's SqliteSaver checkpointer. */ export declare class SessionManager { private checkpointer; private stateReaderAgent; private db; private dbPath; constructor(dbPath: string); /** * Initialize the SessionManager with SqliteSaver and create custom tables */ initialize(): Promise; /** * Create a new session */ createSession(agentName: string, name?: string): Session; /** * Get or create a session with a fixed ID */ getOrCreateSession(sessionId: string, agentName: string, name?: string): Session; /** * Get a session by ID */ getSession(sessionId: string): Session | null; /** * Get the most recently updated session */ getLastSession(): Session | null; /** * List sessions with optional filtering */ listSessions(options?: ListSessionsOptions): Session[]; /** * Update a session's metadata */ updateSession(sessionId: string, updates: Partial>): void; /** * Merge and update session metadata */ updateSessionMetadata(sessionId: string, metadata: Record): void; /** * Archive a session (soft delete) */ archiveSession(sessionId: string): void; /** * Delete a session (hard delete from database) */ deleteSession(sessionId: string): void; /** * Clear session messages while preserving the session record */ clearSessionMessages(sessionId: string): void; persistPendingMessage(input: { sessionId: string; requestId: string; message: SessionMessage; }): void; clearPendingMessagesForRequest(sessionId: string, requestId: string): void; /** * Get the checkpointer for use with DeepAgents */ getCheckpointer(): SqliteSaver; /** * List messages for a session by reading the latest checkpoint. */ listMessages(sessionId: string): Promise; /** * Convert database row to Session object */ private rowToSession; /** * Close the database connection */ close(): void; private loadRecentCheckpoints; private getStateReaderAgent; private loadMessagesFromState; private persistAssistantImageAttachments; private listPendingMessages; } export declare function extractMessagesFromState(state: any): SessionMessage[] | null; export declare function extractAttachments(blocks: any[]): SessionAttachment[]; export declare function extractImageAttachments(blocks: any[]): SessionAttachment[]; export declare function extractImageUrl(block: any): string | null; export declare function resolveMessageRole(entry: any): "user" | "assistant" | null;