import type { IAgentSession, AgentConfig, AgentModelInput, ThinkingConfig, EffortLevel, ResponseMetadata } from '../agent/types.js'; import { type TelegramRoute } from './route.js'; import { type SessionRegistry } from '../agent/session/session-registry.js'; export type RouteTarget = TelegramRoute | number; export interface SessionData { chatId: number; threadId?: number; model: AgentModelInput; createdAt: string; lastActivity: string; sessionId?: string; cwd?: string; } export interface ChatSessionInfo { sessionId: string; name?: string; model: AgentModelInput; turns: number; lastActive: number; active: boolean; } export interface SessionManagerOptions { dataDir?: string; defaultModel?: AgentModelInput; apiKey: string; settingSources?: ('user' | 'project')[]; thinking?: ThinkingConfig; effort?: EffortLevel; botCwd?: string; createSession: (config: AgentConfig) => Promise; idleSessionMs?: number; registry?: SessionRegistry; onResumptionOffer?: (route: TelegramRoute, text: string) => void | Promise; } export declare class SessionManager { private sessions; private pendingSessions; private sessionData; private sessionStats; private autosaveFailureLogged; private pendingResume; private options; private _evictionTimer; constructor(options: SessionManagerOptions); getSessionIfExists(target: RouteTarget): IAgentSession | undefined; getSession(target: RouteTarget): Promise; private _newData; private _touchActivity; private _ensureRegistryHandle; recordTelegramTurn(target: RouteTarget, userText: string, assistantText: string, metadata?: ResponseMetadata): void; private _hydrateStatsFromStore; getSessionName(target: RouteTarget): string | undefined; setSessionName(target: RouteTarget, slug: string): { persisted: boolean; }; private _getOrCreateStats; private _resetStats; resetSession(target: RouteTarget): Promise; switchModel(target: RouteTarget, model: AgentModelInput): Promise; getModel(target: RouteTarget): AgentModelInput; setCwd(target: RouteTarget, cwd: string): Promise; getCwd(target: RouteTarget): string | undefined; listChatSessions(target: RouteTarget): ChatSessionInfo[]; switchToSession(target: RouteTarget, targetSessionId: string): Promise<{ ok: true; name?: string; } | { ok: false; reason: 'not-found' | 'already-active'; }>; newSession(target: RouteTarget): Promise; private sidecarFileName; loadSessions(): Promise; saveSessions(): Promise; private _evictStaleSessionData; closeAll(): Promise; getSessionCount(): number; getChatCount(): number; getActiveThreadId(chatId: number): number | undefined; getBusySessionCount(): number; getActiveRouteForChat(chatId: number): TelegramRoute | undefined; }