import { SettleReason } from '@reticlehq/core'; interface ActionEffect { dispatched: true; targetMatched: boolean; visible: boolean; enabled: boolean; defaultPrevented: boolean; focusMoved: string | null; valueChanged: boolean; domMutatedWithin: number; appeared?: string; occluded: boolean; occludedBy: string | null; scrolledIntoView: boolean; heldMs?: number; alreadyAtValue?: true; } interface ActionResult { ok: true; ref: string; action: string; dispatched: boolean; settled: boolean; settleReason: SettleReason | null; effect: ActionEffect; testid?: string; component?: string; role?: string; name?: string; source?: { file: string; line: number; column?: number; }; warning?: string; } export declare const MAX_HOLD_MS = 30000; export declare const ZOOM_NEEDS_REAL_BROWSER_MSG: string; export declare function executeAction(ref: string, action: string, args?: Record): Promise; export declare function dispatchWebMcp(tool: string, params: Record, confirmDangerous?: boolean): Promise; export interface ActionStep { ref: string; action: string; args?: Record; } interface SequenceStepResult { ref: string; action: string; dispatched: boolean; settled: boolean; settleReason: SettleReason | null; testid?: string; component?: string; role?: string; name?: string; source?: { file: string; line: number; column?: number; }; warning?: string; } export declare function executeSequence(steps: ActionStep[]): Promise<{ ok: true; count: number; effects: ActionEffect[]; steps: SequenceStepResult[]; }>; export {};