export declare function init(appId: string): void;
/** True iff init() has been called with an appId. Callers that may run before
 *  daemon startup (e.g. the dashboard IPC server invoked from tests) can use
 *  this to skip persistence rather than crash the request. */
export declare function isInitialised(): boolean;
/**
 * Per-chat result of a markSeen call. `preexisting=false` means we stamped
 * this chat for the first time in *this* call — callers that need provenance
 * (e.g. the defaultOncall auto-bind judge) must treat freshly-stamped chats
 * as "unknown age" rather than "new", because a missed backfill manifests
 * exactly the same way as a real first observation.
 */
export interface SeenEntry {
    firstSeenAt: number;
    preexisting: boolean;
}
/**
 * Record `Date.now()` for each chatId not yet known, return per-chat
 * (firstSeenAt, preexisting) for the requested ids. Batches the write so a
 * fresh 44-chat listChats only hits disk once. Empty map is returned when
 * the store hasn't been init()'d (test harnesses that spin the IPC server up
 * without a daemon backing it).
 */
export declare function markSeenBulkDetailed(chatIds: readonly string[]): Map<string, SeenEntry>;
/** Back-compat shim — same semantics as before, returns only the timestamps. */
export declare function markSeenBulk(chatIds: readonly string[]): Map<string, number>;
//# sourceMappingURL=chat-first-seen-store.d.ts.map