/**
 * Hybrid test runner — mix AI-driven steps with deterministic Playwright steps.
 *
 * Usage example (in a .ts script file):
 *
 *   import type { HybridScenario } from "@hasnaxyz/testers/lib/hybrid-runner";
 *   export const scenarios: HybridScenario[] = [
 *     {
 *       name: "Login flow",
 *       steps: [
 *         { type: "navigate", url: "/login" },
 *         { type: "fill", selector: "#email", value: "test@example.com" },
 *         { type: "fill", selector: "#password", value: "secret" },
 *         { type: "click", selector: "button[type=submit]" },
 *         { type: "ai", instruction: "Verify the dashboard loaded and the user is logged in" },
 *         { type: "ai_verify", assertion: "The page shows a welcome message with the user's name" },
 *       ],
 *     },
 *   ];
 */
export type HybridStepType = "navigate" | "click" | "fill" | "wait" | "wait_for" | "screenshot" | "assert_text" | "assert_visible" | "ai" | "ai_verify";
export interface NavigateStep {
    type: "navigate";
    url: string;
}
export interface ClickStep {
    type: "click";
    selector: string;
}
export interface FillStep {
    type: "fill";
    selector: string;
    value: string;
}
export interface WaitStep {
    type: "wait";
    ms: number;
}
export interface WaitForStep {
    type: "wait_for";
    selector: string;
    timeoutMs?: number;
}
export interface ScreenshotStep {
    type: "screenshot";
    label?: string;
}
export interface AssertTextStep {
    type: "assert_text";
    selector: string;
    expected: string;
    contains?: boolean;
}
export interface AssertVisibleStep {
    type: "assert_visible";
    selector: string;
    visible?: boolean;
}
/** AI-driven step — the agent browser-tests using the instruction as the scenario description */
export interface AiStep {
    type: "ai";
    instruction: string;
    maxTurns?: number;
    model?: string;
}
/** AI verification step — the agent judges whether the current page state matches the assertion */
export interface AiVerifyStep {
    type: "ai_verify";
    assertion: string;
    model?: string;
}
export type HybridStep = NavigateStep | ClickStep | FillStep | WaitStep | WaitForStep | ScreenshotStep | AssertTextStep | AssertVisibleStep | AiStep | AiVerifyStep;
export interface HybridScenario {
    name: string;
    steps: HybridStep[];
    baseUrl?: string;
    model?: string;
    timeoutMs?: number;
}
export interface HybridStepResult {
    stepIndex: number;
    type: HybridStepType;
    status: "passed" | "failed" | "skipped";
    durationMs: number;
    error?: string;
    reasoning?: string;
}
export interface HybridRunResult {
    scenarioName: string;
    status: "passed" | "failed" | "error";
    stepResults: HybridStepResult[];
    durationMs: number;
    error?: string;
}
export declare function runHybridScenario(scenario: HybridScenario, options?: {
    baseUrl?: string;
    apiKey?: string;
    screenshotDir?: string;
}): Promise<HybridRunResult>;
//# sourceMappingURL=hybrid-runner.d.ts.map