import { type OpenGeniBrowserClient } from "@opengeni/sdk/browser"; export type ConversationSearchPage = Awaited>; export type ConversationSearchMatch = ConversationSearchPage["matches"][number]; export declare const SEARCH_BATCH_SIZE = 50; /** Debounce the query identity, not disposal of an already useful search. * This is deliberately not a result cache: a committed query/scope change or * reopen still goes through live authorization. Preserve literal whitespace. */ export declare function useCommittedSearchQuery(query: string, identity: string, enabled: boolean, delayMs?: number): string; /** Only transient failures may retain previously returned content/cursors. */ export declare function discardSearchResultsOnError(error: unknown): boolean; export declare function searchAccessDenied(error: unknown): boolean; /** Continue empty scan pages, but never download whole messages or retain an unbounded hit list. */ export declare function readConversationSearchBatch(read: (cursor: string | undefined, remaining: number) => Promise, cursor: string | undefined, signal: AbortSignal, onProgress: (scanned: number, partial: ConversationSearchPage) => void, stopAfterFirstMatches?: boolean, retainedPage?: ConversationSearchPage): Promise; export declare function useConversationSearch(input: { client: OpenGeniBrowserClient; authority: string; workspaceId: string; sessionId?: string | undefined; query: string; enabled: boolean; archiveStatus?: "active" | "archived" | "all" | undefined; debounceMs?: number | undefined; }): { page: import("@opengeni/sdk").SessionMessageSearchResponse | null; loading: boolean; error: string | null; accessDenied: boolean; scanned: number; pageIndex: number; next: () => void; previous: () => void; retry: () => void; };