import { Document } from '@langchain/core/documents';
import { CodeContext, QueryContext, ContextChain } from './types';
export interface ContextWindow {
    id: string;
    documents: Document[];
    totalTokens: number;
    maxTokens: number;
    priority: number;
    createdAt: Date;
    lastAccessed: Date;
}
export interface ContextManagerConfig {
    maxContextWindows: number;
    maxTokensPerWindow: number;
    defaultChunkSize: number;
    chunkOverlap: number;
    priorityDecayRate: number;
    cleanupInterval: number;
}
export declare class ContextManager {
    private config;
    private contextWindows;
    private contextChains;
    private textSplitter;
    private cleanupTimer;
    constructor(config: ContextManagerConfig);
    addCodeContext(codeContext: CodeContext, priority?: number): Promise<string>;
    getRelevantContext(queryContext: QueryContext, maxTokens: number): Promise<Document[]>;
    updateContextChain(sessionId: string, queryContext: QueryContext, response: string): Promise<void>;
    getContextChain(sessionId: string): ContextChain | undefined;
    removeContext(contextId: string): Promise<boolean>;
    clearExpiredContexts(): Promise<number>;
    getContextStats(): {
        totalContexts: number;
        totalDocuments: number;
        totalTokens: number;
        averageTokensPerContext: number;
        memoryUsage: number;
    };
    private codeContextToDocuments;
    private getSortedContexts;
    private filterDocumentsByRelevance;
    private manageContextCapacity;
    private generateContextId;
    private startCleanupTimer;
    shutdown(): Promise<void>;
}
//# sourceMappingURL=ContextManager.d.ts.map