/**
 * SessionStore — Bootstrap 会话级存储 (合并 EpisodicMemory + ToolResultCache)
 *
 * 内部子系统:
 *   1. DimensionReports — 跨维度分析报告 + 结构化证据 + 交叉引用 (from EpisodicMemory)
 *   2. ReadOnlyCache — 只读工具结果缓存 (from ToolResultCache, 排除副作用工具 B3 fix)
 *
 * 替代关系:
 *   EpisodicMemory.js → 全部维度报告/证据/反思逻辑
 *   ToolResultCache.js → LRU 缓存逻辑 (仅只读工具)
 *
 * 新增能力 (vs 原模块):
 *   - getDistilledForProducer(dimId): Producer 专用蒸馏上下文 (B2 fix)
 *   - NON_CACHEABLE 内置: 副作用工具自动排除 (B3 fix)
 *   - buildContextForDimension 增强: 消费 workingMemoryDistilled (B1 fix, 已在 EpisodicMemory 修复)
 *   - 统一的 getStats(): 合并维度 + 缓存统计
 *
 * 生命周期: 与 Bootstrap 会话一致。
 * 持久化: 通过 saveCheckpoint / loadCheckpoint 实现断点续传。
 *
 * @module SessionStore
 */
import type { SessionStoreSerialized } from './session-store-schema.js';
/** Finding 结构 */
export interface Finding {
    finding: string;
    evidence?: string;
    importance: number;
    dimId?: string;
    timestamp?: number;
}
/** 候选摘要 */
export interface CandidateSummary {
    dimId: string;
    title: string;
    subTopic: string;
    summary: string;
}
/** 跨维度引用 */
export interface CrossReference {
    from: string;
    to: string;
    relation: string;
    detail: string;
}
/** 层反思 */
export interface TierReflection {
    tierIndex: number;
    completedDimensions: string[];
    topFindings: Finding[];
    crossDimensionPatterns: string[];
    suggestionsForNextTier: string[];
}
/** WorkingMemory 蒸馏内容 */
export interface WorkingMemoryDistilled {
    keyFindings?: Finding[];
    toolCallSummary?: Array<string | {
        tool: string;
        summary: string;
    }>;
    stats?: Record<string, number>;
    plan?: Record<string, unknown> | null;
    totalObservations?: number;
    compressedCount?: number;
}
/** 维度摘要 */
export interface DimensionDigest {
    summary?: string;
    candidateCount?: number;
    keyFindings?: Array<string | Finding>;
    crossRefs?: Record<string, string>;
    gaps?: string[];
    [key: string]: unknown;
}
/** 维度报告 */
export interface DimensionReport {
    dimId: string;
    completedAt: number;
    analysisText: string;
    findings: Finding[];
    referencedFiles: string[];
    candidatesSummary: CandidateSummary[];
    workingMemoryDistilled: WorkingMemoryDistilled | null;
    digest: DimensionDigest | null;
}
/** 维度报告输入 */
export interface DimensionReportInput {
    analysisText?: string;
    findings?: Array<{
        finding?: string;
        evidence?: string | string[] | unknown;
        importance?: number;
    }>;
    referencedFiles?: string[];
    candidatesSummary?: CandidateSummary[];
    workingMemoryDistilled?: WorkingMemoryDistilled | null;
    digest?: DimensionDigest | null;
}
/** SessionStore 构造选项 */
export interface SessionStoreConfig {
    projectContext?: Record<string, unknown>;
    ttlMs?: number;
    cleanupIntervalMs?: number;
    /** 项目名 (便捷传入, 会合并到 projectContext) */
    projectName?: string;
    primaryLang?: string;
    fileCount?: number;
    modules?: string[];
    [key: string]: unknown;
}
/** 工具参数 */
interface ToolArgs {
    pattern?: string;
    filePath?: string;
    [key: string]: unknown;
}
export declare class SessionStore {
    #private;
    constructor(config?: SessionStoreConfig);
    /** 维度完成后存储完整报告 */
    storeDimensionReport(dimId: string, report: DimensionReportInput): void;
    getDimensionReport(dimId: string): DimensionReport | undefined;
    getCompletedDimensions(): string[];
    addEvidence(filePath: string, evidence: Omit<Finding, 'timestamp'>): void;
    getEvidenceForFile(filePath: string): Finding[];
    /** @returns >} */
    searchEvidence(query: string, dimId?: string): {
        filePath: string;
        evidence: Finding;
    }[];
    addSubmittedCandidate(dimId: string, candidate: Omit<CandidateSummary, 'dimId'>): void;
    addDimensionDigest(dimId: string, digest: DimensionDigest): void;
    addTierReflection(tierIndex: number, reflection: TierReflection): void;
    /** 获取所有 TierReflection (F17: EpisodicConsolidator 需要) */
    getTierReflections(): TierReflection[];
    getRelevantReflections(currentDimId: string): string | null;
    /**
     * 构建给 Analyst 的跨维度上下文
     *
     * @param [focusKeywordsOrOpts] 关键词数组或 options 对象
     */
    buildContextForDimension(currentDimId: string, focusKeywordsOrOpts?: string[] | {
        focusKeywords?: string[];
        tokenBudget?: number;
    }): string;
    /** 兼容 DimensionContext.buildContextForDimension 返回格式 */
    buildContextSnapshot(currentDimId: string): {
        previousDimensions: Record<string, DimensionDigest>;
        submittedCandidates: CandidateSummary[];
    };
    /**
     * 获取维度的蒸馏上下文 (供 Producer 使用)
     * @returns |null}
     */
    getDistilledForProducer(dimId: string): {
        keyFindings: Finding[];
        toolCallSummary: (string | {
            tool: string;
            summary: string;
        })[];
        referencedFiles: string[];
    } | null;
    /** 获取缓存的工具结果 */
    getCachedResult(toolName: string, args: ToolArgs): unknown | null;
    /** 缓存工具结果 (自动排除副作用工具) */
    cacheToolResult(toolName: string, args: ToolArgs, result: unknown): void;
    /** 兼容 ToolResultCache.get() */
    get(toolName: string, args: ToolArgs): unknown | null;
    /** 兼容 ToolResultCache.set() */
    set(toolName: string, args: ToolArgs, result: unknown): void;
    saveCheckpoint(projectRoot: string): Promise<void>;
    loadCheckpoint(projectRoot: string): Promise<boolean>;
    toJSON(): SessionStoreSerialized;
    static fromJSON(json: Record<string, unknown>): SessionStore;
    /** 获取所有已引用文件 (去重, F10) */
    getAllReferencedFiles(): Set<string>;
    /** 获取统计数据 (合并维度 + 缓存统计, F12) */
    getStats(): {
        completedDimensions: number;
        totalFindings: number;
        totalEvidence: number;
        totalCandidates: number;
        crossReferences: number;
        tierReflections: number;
        referencedFiles: number;
        cache: {
            hitRate: string;
            searchCacheSize: number;
            fileCacheSize: number;
            hits: number;
            misses: number;
            evictions: number;
        };
    };
    /** 清空所有缓存 */
    clearCache(): void;
    /** 销毁实例，释放定时器 */
    dispose(): void;
}
export default SessionStore;
