/**
 * Per-session forward-capture cursors for the server-saved diagnostics stream
 * (GENC-1351 §5.8). Module-level and keyed by the session `stateKey` — exactly like
 * the meta-event buffer — so the (up to two) element instances that share one
 * session (a collapsed bubble + a popped-out panel) share ONE set of cursors.
 *
 * Without this each instance keeps its own cursors and both independently append
 * the shared driver's activity, double-writing the stream — and, worse, the second
 * instance (which never runs restore, so its message watermark stays empty)
 * re-appends the *entire* restored history on every reload. Module state dies with
 * the JS realm, so these reset for free on a real page reload (like the meta
 * buffer), which is exactly the "fresh capture per page load" behaviour we want.
 *
 * @internal
 */
export interface DiagnosticsCursors {
    /** Message identities present at restore — never appended (they live in a prior load's stream). */
    restoredMsgKeys: Set<string>;
    /** Message identities already appended this load. */
    emittedMsgKeys: Set<string>;
    /** Turn indices already appended this load. */
    emittedTurnKeys: Set<string>;
    /** Highest meta-event index already appended. */
    lastEventIndex: number;
    /** JSON of the last meta-snapshot appended — skip re-appending an unchanged block. */
    lastMetaJson: string;
}
/** The shared cursors for `key`, created (empty) on first access. @internal */
export declare function getDiagnosticsCursors(key: string): DiagnosticsCursors;
/**
 * Restart the per-conversation cursors for `key` on Clear — a new conversation in
 * the same page load. `lastEventIndex` is intentionally kept: Clear does NOT reset
 * the meta-event buffer, so its indices keep climbing and mustn't be re-emitted.
 *
 * @internal
 */
export declare function resetDiagnosticsCursorsFor(key: string): void;
/**
 * Drop the cursors for `key` entirely — the in-place session switch teardown
 * (GENC-1351 §5.12). Unlike {@link resetDiagnosticsCursorsFor}, this does NOT keep
 * `lastEventIndex`: a switch also tears down the session's meta-event buffer (its
 * indices restart at 0 on a later return), so a kept high-water index would skip
 * every event of the resumed session. A return re-creates fresh cursors on first
 * access.
 *
 * @internal
 */
export declare function deleteDiagnosticsCursorsFor(key: string): void;
/** Drop all cursors — test isolation only. @internal */
export declare function clearDiagnosticsCursorRegistry(): void;
//# sourceMappingURL=diagnostics-cursors.d.ts.map