import { ContextSummary, ContextWindowConfig } from './context-summarizer';
export interface ConversationMessage {
    role: 'user' | 'assistant' | 'system';
    content: string;
    timestamp: string;
    tools_used?: string[];
    metadata?: Record<string, any>;
}
export interface UserSession {
    sessionId: string;
    userId?: string;
    startTime: string;
    lastActivity: string;
    conversationHistory: ConversationMessage[];
    userPreferences: UserPreferences;
    contextData: ContextData;
}
export interface UserPreferences {
    preferredStocks: string[];
    preferredIndices: string[];
    analysisStyle: 'detailed' | 'brief' | 'technical';
    language: string;
    timezone: string;
    notificationSettings: {
        priceAlerts: boolean;
        marketUpdates: boolean;
    };
}
export interface SummarizationRecord {
    timestamp: string;
    originalMessageCount: number;
    summarizedMessageCount: number;
    originalMessages: ConversationMessage[];
    summary: ContextSummary;
    tokensSaved: number;
    triggerReason: string;
}
export interface ContextData {
    recentQueries: string[];
    frequentlyAccessedStocks: Record<string, number>;
    frequentlyUsedTools: Record<string, number>;
    marketContext: {
        currentMarketStatus?: any;
        lastMarketUpdate?: string;
        activeIndices?: string[];
    };
    userGoals: string[];
    investmentProfile?: 'conservative' | 'moderate' | 'aggressive';
    summarizationHistory?: SummarizationRecord[];
    lastSummarization?: SummarizationRecord;
}
export interface MemoryConfig {
    maxConversationHistory: number;
    maxRecentQueries: number;
    sessionTimeoutMinutes: number;
    persistToFile: boolean;
    memoryFilePath: string;
    contextWindowConfig: Partial<ContextWindowConfig>;
}
export declare class MemoryManager {
    private sessions;
    private config;
    private memoryFilePath;
    private contextSummarizer?;
    constructor(config?: Partial<MemoryConfig>);
    private getContextSummarizer;
    /**
     * Create or get existing user session
     */
    getOrCreateSession(sessionId: string, userId?: string): UserSession;
    /**
     * Add message to conversation history
     */
    addMessage(sessionId: string, message: ConversationMessage): void;
    /**
     * Update recent queries
     */
    private updateRecentQueries;
    /**
     * Update tool usage statistics
     */
    private updateToolUsage;
    /**
     * Update stock access frequency
     */
    updateStockAccess(sessionId: string, symbol: string): void;
    /**
     * Update user preferences
     */
    updatePreferences(sessionId: string, preferences: Partial<UserPreferences>): void;
    /**
     * Update market context
     */
    updateMarketContext(sessionId: string, marketData: Record<string, unknown>): void;
    /**
     * Get conversation context for AI with intelligent summarization
     */
    getConversationContext(sessionId: string, maxMessages?: number, systemPrompt?: string, persistSummarization?: boolean): Promise<{
        messages: ConversationMessage[];
        summary?: ContextSummary;
        wasSummarized: boolean;
        tokenCount: any;
    }>;
    /**
     * Get conversation context for AI (backward compatibility)
     */
    getConversationContextSync(sessionId: string, maxMessages?: number): ConversationMessage[];
    /**
     * Get user context summary
     */
    getUserContextSummary(sessionId: string): string;
    /**
     * Get system prompt with context
     */
    getContextualSystemPrompt(sessionId: string): string;
    /**
     * Clean up expired sessions
     */
    cleanupExpiredSessions(): void;
    /**
     * Save memory to file (synchronous to guarantee persistence before returning)
     */
    private saveMemoryToFile;
    /**
     * Load memory from file (synchronous so sessions are ready after construction)
     */
    private loadMemoryFromFile;
    /**
     * Get session statistics
     */
    getSessionStats(sessionId: string): any;
    /**
     * Export session data
     */
    exportSessionData(sessionId: string): any;
    /**
     * Clear session data
     */
    clearSession(sessionId: string): void;
    /**
     * Check if context needs summarization for a session
     */
    needsContextSummarization(sessionId: string, systemPrompt?: string): Promise<boolean>;
    /**
     * Get context statistics for a session
     */
    getContextStats(sessionId: string, systemPrompt?: string): Promise<{
        messageCount: number;
        tokenCount: any;
        needsSummarization: boolean;
        contextWindowUsage: number;
    }>;
    /**
     * Force context summarization for a session
     */
    forceContextSummarization(sessionId: string, systemPrompt?: string): Promise<ContextSummary | null>;
    /**
     * Update context window configuration
     */
    updateContextWindowConfig(config: Partial<ContextWindowConfig>): void;
    /**
     * Get context window configuration
     */
    getContextWindowConfig(): ContextWindowConfig;
    /**
     * Get last summarization for a session
     */
    getLastSummarization(sessionId: string): SummarizationRecord | null;
    /**
     * Get summarization history for a session
     */
    getSummarizationHistory(sessionId: string, limit?: number): SummarizationRecord[];
    /**
     * Get detailed summarization info (without original messages for lighter payload)
     */
    getSummarizationSummary(sessionId: string): {
        totalSummarizations: number;
        totalTokensSaved: number;
        lastSummarization?: {
            timestamp: string;
            messagesBefore: number;
            messagesAfter: number;
            tokensSaved: number;
            summary: string;
        };
    } | null;
}
//# sourceMappingURL=memory-manager.d.ts.map