import type { Page } from 'playwright'; export declare function simHash32(text: string): number; export declare function hammingDistance32(a: number, b: number): number; export declare function normalizeUrl(raw: string): string; export declare function computeStateId(normalizedUrl: string, hash: number): string; export interface UIStateNode { id: string; url: string; normalizedUrl: string; title: string; interactiveElementCount: number; domFingerprint: string; simHashValue: number; visitedAt: string; } export interface StateTransition { fromId: string; toId: string; action: string; label: string; triggeredAt: string; } export interface CoverageReport { totalStates: number; totalTransitions: number; uniqueUrls: number; interactiveElementsTotal: number; estimatedCoveragePercent: number; } export declare function fingerprintPage(page: Page, visitedAt: string): Promise<{ fingerprint: string; visibleText: string; interactiveCount: number; simHashValue: number; }>; export declare class ScreenTransitionGraph { private states; private transitions; /** Maps simHash value → array of state ids with that hash (for near-dup lookup) */ private hashIndex; addState(node: UIStateNode): { added: boolean; duplicateOf?: string; }; addTransition(fromId: string, toId: string, action: string, label: string, triggeredAt: string): void; isDuplicate(url: string, visibleText: string, threshold?: number): boolean; getCoverageReport(): CoverageReport; toJSON(): { states: UIStateNode[]; transitions: StateTransition[]; }; static fromJSON(data: { states: UIStateNode[]; transitions: StateTransition[]; }): ScreenTransitionGraph; getState(id: string): UIStateNode | undefined; getAllStates(): UIStateNode[]; getTransitionsFrom(id: string): StateTransition[]; }