/** Composite key for session lookup. */ export type SessionKey = { channelId: string; userId: string; threadId?: string | undefined; }; /** Stored session entry. */ export type SessionEntry = { /** CLI runtime session ID (e.g., Claude session UUID, Codex thread ID). */ sessionId: string; /** Epoch milliseconds of last access (set/get). */ lastAccessMs: number; }; /** * File-backed session store mapping channel conversations to CLI runtime session IDs. * * Design decisions: * - No in-memory cache: every get/set/delete reads from and writes to disk * - Correctness over performance for the expected low-frequency session lookup pattern * - Lazy TTL eviction: expired entries are invisible on get(), evicted on next set() * - Atomic writes via write-to-temp + rename pattern */ export declare class SessionMap { #private; /** * @param directory - Directory where the session file is stored * @param ttlMs - Time-to-live in milliseconds (default: 7 days = 604_800_000) */ constructor(directory: string, ttlMs?: number); /** Get session ID for a channel conversation. Returns undefined if not found or expired. */ get(key: SessionKey): Promise; /** Store or update a session ID for a channel conversation. Updates lastAccessMs. */ set(key: SessionKey, sessionId: string): Promise; /** Delete a session entry. No-op if key doesn't exist. */ delete(key: SessionKey): Promise; }