import type { ChatMessage } from '@genesislcap/foundation-ai';
/**
 * Display-only session-restore notices (GENC-1351 §6): the "Restored…" divider on
 * a successful reload restore, and the "Couldn't restore…" divider when a saved
 * session existed but couldn't be brought back (timeout / error / unusable
 * snapshot). Both are `system-event` rows, stripped from the persisted snapshot so
 * they never become permanent history — and, unlike agent-switch indicators, they
 * belong to the persistence ("remember chat") feature, so `filterVisibleMessages`
 * gates them by `showRestoreNotices` rather than `showAgentSwitchIndicator`.
 *
 * @internal
 */
export declare const SESSION_RESTORED_LABEL = "Restored previous conversation";
/** @internal */
export declare const SESSION_RESTORE_FAILED_LABEL = "Couldn't restore the previous conversation";
/** @internal */
export declare const isSessionRestoredMarker: (m: ChatMessage) => boolean;
/** @internal */
export declare const isSessionRestoreFailedMarker: (m: ChatMessage) => boolean;
/** Either restore notice — both display-only, stripped before persist. @internal */
export declare const isSessionNoticeMarker: (m: ChatMessage) => boolean;
/**
 * Toggle state that drives which messages appear in the scrolling list. Mirrors
 * the cog-menu switches; `showAgentSwitchIndicator` is pre-resolved by the
 * caller (it falls back to `showToolCalls` when the host hasn't configured an
 * explicit agent-switch toggle).
 */
export interface MessageFilterState {
    showToolCalls: boolean;
    showThinkingSteps: boolean;
    showNarration: boolean;
    showAgentSwitchIndicator: boolean;
    /**
     * Whether session-restore notices show — driven by the persistence ("remember
     * chat") toggle, since restore is that feature's concern (GENC-1351 §6). Kept
     * separate from `showAgentSwitchIndicator` so those two unrelated switches don't
     * cross-control each other.
     */
    showRestoreNotices: boolean;
}
/**
 * The trailing interaction to render in a pinned slot, separate from the
 * filtered list. Empty unless the most recent message carries an interaction.
 *
 * Pinning the trailing interaction keeps its widget out of the list's
 * reconciliation: FAST's `repeat` has no key function and reconciles by array
 * index, so re-filtering the list (a cog-menu toggle) would otherwise rebind an
 * existing row to a different message and re-create the live widget — discarding
 * any in-progress input. The slot's binding reads only `messages` and returns
 * the same message object across toggles, so the widget's DOM is preserved.
 *
 * It is the *trailing* message (resolved or not), not "unresolved only", so that
 * answering an interaction leaves it in the slot — `resolved` is forwarded in
 * place with no re-render. It rejoins the list naturally once a newer message
 * arrives and it is no longer last.
 */
export declare function trailingInteractionRow(messages: ChatMessage[]): ChatMessage[];
/**
 * Filters messages for the scrolling list per the current cog-menu toggles.
 *
 * The trailing interaction (see `trailingInteractionRow`) must be removed
 * before calling, as it is rendered separately.
 */
export declare function filterVisibleMessages(messages: ChatMessage[], toggles: MessageFilterState): ChatMessage[];
//# sourceMappingURL=message-partition.d.ts.map