/**
 * MsgStore - conversation state container.
 * Keeps patches/stdout history and snapshot reconstruction.
 */
import { EntryIndexProvider } from './utils/patch.js';
import type { LogMsg, JsonPatch, NormalizedConversation } from './types.js';
/**
 * MsgStore 类
 * 管理消息的存储、历史回放和实时流式传输
 */
export declare class MsgStore {
    private messages;
    private totalBytes;
    private finished;
    private baseSnapshot;
    readonly entryIndex: EntryIndexProvider;
    private sessionIdListeners;
    private finishedListeners;
    private cachedSnapshot;
    private cachedUpToIndex;
    private patchSeq;
    private patchListeners;
    constructor();
    /**
     * 从持久化快照恢复基础状态
     * 设置 baseSnapshot 和 entryIndex，使新 parser 生成的 patch 索引正确衔接
     */
    restoreFromSnapshot(snapshot: NormalizedConversation): void;
    /**
     * 推送消息
     *
     * 内存控制策略：
     * 1. dedup: streaming 文本/工具状态会用同 path 反复 replace 推送完整新值。
     *    新 replace 进来时，删除先前同 path 的 replace —— 旧值已被覆盖，留着只会 O(n²) 爆内存。
     * 2. FIFO 兜底：dedup 之后仍超过 MAX_MEMORY_BYTES 时，把最旧的消息折叠进 baseSnapshot
     *    再丢弃。这样后续 patch 仍能在正确的 base 上重放，不会因丢失 add 指令而全军覆没。
     */
    push(msg: LogMsg): void;
    /**
     * 推送 stdout 数据
     */
    pushStdout(data: string): void;
    /**
     * 推送 stderr 数据
     */
    pushStderr(data: string): void;
    /**
     * 推送 patch
     * @returns 分配给此 patch 的 seq（调用方需要直接 emit 时使用）
     */
    pushPatch(patch: JsonPatch): number;
    /**
     * 同 path 的 replace 是覆盖语义：旧值会被新值压过去，留在 messages 数组里
     * 只会浪费内存（streaming 文本/工具状态会反复触发同 path replace）。
     *
     * 注意：仅修改 messages 数组（服务端重建快照所用），不影响已 emit 给前端的事件。
     * 前端用 seq 单调去重，旧 patch 已抵达即已 apply，删除内存副本不影响一致性。
     */
    private dropStaleReplaces;
    /**
     * 把被 FIFO 驱逐的消息折叠进 baseSnapshot。
     * 这样 messages 数组不再持有该消息的字节，但其对 entries 的状态贡献被永久保留在 base 上。
     * 后续 getSnapshot() 重建时仍然得到完整状态，避免出现 entries=[] 但 seq 飞涨的灾难性结果。
     */
    private foldEvictedIntoBase;
    /**
     * 推送 session ID
     */
    pushSessionId(id: string): void;
    /**
     * 推送 message ID
     */
    pushMessageId(id: string): void;
    /**
     * 标记完成
     */
    finish(): void;
    /**
     * 标记完成（别名）
     */
    pushFinished(): void;
    /**
     * 是否已完成
     */
    isFinished(): boolean;
    /**
     * 获取所有消息
     */
    getMessages(): LogMsg[];
    /**
     * 获取当前标准化日志快照
     * 使用增量缓存：只重放上次快照之后的新 patch，避免每次从头重放
     */
    getSnapshot(): NormalizedConversation;
    onPatch(handler: (patch: JsonPatch, seq: number) => void): () => void;
    onSessionId(handler: (id: string) => void): () => void;
    onFinished(handler: () => void): () => void;
}
/**
 * Session MsgStore 管理器
 * 管理多个会话的 MsgStore
 */
declare class SessionMsgStoreManager {
    private stores;
    /**
     * 创建 MsgStore
     */
    create(sessionId: string, _agentType?: string, _workingDir?: string): MsgStore;
    /**
     * 获取或创建 MsgStore
     */
    getOrCreate(sessionId: string): MsgStore;
    /**
     * 获取 MsgStore
     */
    get(sessionId: string): MsgStore | undefined;
    /**
     * 删除 MsgStore
     */
    delete(sessionId: string): boolean;
    /**
     * 删除 MsgStore（别名）
     */
    remove(sessionId: string): boolean;
    /**
     * 检查是否存在
     */
    has(sessionId: string): boolean;
}
export declare const sessionMsgStoreManager: SessionMsgStoreManager;
export {};
//# sourceMappingURL=msg-store.d.ts.map