export type SessionMode = "general" | "coding";
export interface MailboxMemo {
    from: SessionMode;
    to: SessionMode;
    timestamp: string;
    content: string;
    inFlight?: boolean;
}
export interface CodingSessionInfo {
    id: string | null;
    status: "idle" | "in_progress" | "paused" | "completed";
    taskSummary: string;
    cwd?: string;
}
export interface MailboxData {
    activeSession: SessionMode;
    memos: MailboxMemo[];
    codingSession: CodingSessionInfo;
}
export declare function loadMailbox(options?: {
    preserveInFlight?: boolean;
}): MailboxData;
export declare function saveMailbox(data: MailboxData): void;
export declare function addMemo(from: SessionMode, to: SessionMode, content: string): void;
/**
 * Mark memos addressed to the given session as in-flight and return them.
 * The memos remain on disk until explicitly acknowledged via `ackMemos()`.
 * If the process crashes before ack, the memos survive and will be
 * re-delivered on the next call (their `inFlight` flag is cleared on load).
 */
export declare function consumeMemosFor(target: SessionMode): MailboxMemo[];
/**
 * Acknowledge that memos for the target session have been successfully
 * injected into the agent context. Removes them from the mailbox on disk.
 */
export declare function ackMemos(target: SessionMode): void;
export declare function setActiveSession(mode: SessionMode): void;
export declare function getActiveSession(): SessionMode;
export declare function updateCodingSessionInfo(info: Partial<CodingSessionInfo>): void;
/**
 * Reset the mailbox to its empty default state.
 *
 * Used by the startup engine-switch boundary: when the agent engine
 * changes between runs we collapse general + coding into a single
 * fresh general session, so any cross-session memos / in-progress
 * coding state would be stale and confusing if carried over.
 */
export declare function clearMailbox(): void;
//# sourceMappingURL=mailbox.d.ts.map