import { z } from 'zod'; export declare const QA_STEP_TYPES: readonly ["input", "wait", "wait_frames", "freeze", "unfreeze", "step_until", "snapshot", "restore", "set", "call", "assert", "screenshot", "sleep", "watch_start", "watch_stop", "monitor_start", "monitor_stop"]; export declare const QaStepSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{ type: z.ZodLiteral<"input">; method: z.ZodEnum<{ send_key: "send_key"; send_mouse_click: "send_mouse_click"; send_mouse_move: "send_mouse_move"; send_text: "send_text"; send_touch: "send_touch"; send_drag: "send_drag"; send_input_sequence: "send_input_sequence"; }>; params: z.ZodRecord; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"wait">; method: z.ZodEnum<{ wait_for_node: "wait_for_node"; wait_for_property: "wait_for_property"; }>; params: z.ZodRecord; timeout_ms: z.ZodOptional; interval_ms: z.ZodOptional; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"wait_frames">; frames: z.ZodNumber; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"freeze">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"unfreeze">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"step_until">; conditions: z.ZodArray": ">"; "<": "<"; "==": "=="; "!=": "!="; "<=": "<="; ">=": ">="; }>; value: z.ZodUnion; }, z.core.$strip>>; max_frames: z.ZodOptional; wall_budget_ms: z.ZodOptional; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"snapshot">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"restore">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"set">; path: z.ZodString; property: z.ZodString; value: z.ZodUnknown; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"call">; path: z.ZodString; method: z.ZodString; args: z.ZodOptional>; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"assert">; assert: z.ZodEnum<{ errors: "errors"; signal: "signal"; screenshot_diff: "screenshot_diff"; perf: "perf"; node_state: "node_state"; scene_structure: "scene_structure"; screen_text: "screen_text"; monitor: "monitor"; }>; path: z.ZodOptional; expect: z.ZodOptional>; tolerance: z.ZodOptional; nodes: z.ZodOptional; absent: z.ZodOptional; }, z.core.$strip>>>; text: z.ZodOptional; present: z.ZodOptional; baseline: z.ZodOptional>; reference: z.ZodOptional; threshold: z.ZodOptional; max_diff_ratio: z.ZodOptional; min_count: z.ZodOptional; max_count: z.ZodOptional; args_match: z.ZodOptional; kinds: z.ZodOptional>>; property: z.ZodOptional; min: z.ZodOptional; max: z.ZodOptional; monotonic: z.ZodOptional>; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"screenshot">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"sleep">; ms: z.ZodNumber; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"watch_start">; node_path: z.ZodString; signal_name: z.ZodString; max_events: z.ZodOptional; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"watch_stop">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"monitor_start">; node_path: z.ZodString; properties: z.ZodArray; interval_frames: z.ZodOptional; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"monitor_stop">; label: z.ZodOptional; }, z.core.$strip>], "type">; export declare const QaOptionsSchema: z.ZodObject<{ auto_install_bridge: z.ZodDefault; auto_run: z.ZodDefault; stop_after: z.ZodDefault; continue_on_failure: z.ZodDefault; seed: z.ZodOptional; fixed_delta_hz: z.ZodOptional; step_timeout_ms: z.ZodDefault; wait_timeout_ms: z.ZodDefault; bridge_timeout_s: z.ZodDefault; run_timeout_s: z.ZodDefault; suite_budget_ms: z.ZodDefault; record_on_failure: z.ZodDefault; }, z.core.$strip>; export declare const QaSuiteSchema: z.ZodObject<{ name: z.ZodString; project_path: z.ZodOptional; options: z.ZodPrefault; auto_run: z.ZodDefault; stop_after: z.ZodDefault; continue_on_failure: z.ZodDefault; seed: z.ZodOptional; fixed_delta_hz: z.ZodOptional; step_timeout_ms: z.ZodDefault; wait_timeout_ms: z.ZodDefault; bridge_timeout_s: z.ZodDefault; run_timeout_s: z.ZodDefault; suite_budget_ms: z.ZodDefault; record_on_failure: z.ZodDefault; }, z.core.$strip>>; steps: z.ZodArray; method: z.ZodEnum<{ send_key: "send_key"; send_mouse_click: "send_mouse_click"; send_mouse_move: "send_mouse_move"; send_text: "send_text"; send_touch: "send_touch"; send_drag: "send_drag"; send_input_sequence: "send_input_sequence"; }>; params: z.ZodRecord; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"wait">; method: z.ZodEnum<{ wait_for_node: "wait_for_node"; wait_for_property: "wait_for_property"; }>; params: z.ZodRecord; timeout_ms: z.ZodOptional; interval_ms: z.ZodOptional; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"wait_frames">; frames: z.ZodNumber; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"freeze">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"unfreeze">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"step_until">; conditions: z.ZodArray": ">"; "<": "<"; "==": "=="; "!=": "!="; "<=": "<="; ">=": ">="; }>; value: z.ZodUnion; }, z.core.$strip>>; max_frames: z.ZodOptional; wall_budget_ms: z.ZodOptional; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"snapshot">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"restore">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"set">; path: z.ZodString; property: z.ZodString; value: z.ZodUnknown; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"call">; path: z.ZodString; method: z.ZodString; args: z.ZodOptional>; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"assert">; assert: z.ZodEnum<{ errors: "errors"; signal: "signal"; screenshot_diff: "screenshot_diff"; perf: "perf"; node_state: "node_state"; scene_structure: "scene_structure"; screen_text: "screen_text"; monitor: "monitor"; }>; path: z.ZodOptional; expect: z.ZodOptional>; tolerance: z.ZodOptional; nodes: z.ZodOptional; absent: z.ZodOptional; }, z.core.$strip>>>; text: z.ZodOptional; present: z.ZodOptional; baseline: z.ZodOptional>; reference: z.ZodOptional; threshold: z.ZodOptional; max_diff_ratio: z.ZodOptional; min_count: z.ZodOptional; max_count: z.ZodOptional; args_match: z.ZodOptional; kinds: z.ZodOptional>>; property: z.ZodOptional; min: z.ZodOptional; max: z.ZodOptional; monotonic: z.ZodOptional>; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"screenshot">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"sleep">; ms: z.ZodNumber; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"watch_start">; node_path: z.ZodString; signal_name: z.ZodString; max_events: z.ZodOptional; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"watch_stop">; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"monitor_start">; node_path: z.ZodString; properties: z.ZodArray; interval_frames: z.ZodOptional; label: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ type: z.ZodLiteral<"monitor_stop">; label: z.ZodOptional; }, z.core.$strip>], "type">>; }, z.core.$strip>; export type QaStep = z.infer; export type QaOptions = z.infer; export type QaSuite = z.infer; /** 从原始文本提取 spec JSON:裸 JSON 或 markdown ```qa-spec 围栏 */ export declare function extractSpecJson(raw: string): unknown; export interface ParsedSpec { ok: boolean; suite?: QaSuite; error?: string; } /** 校验 + 解析套件 spec。失败返回 ok:false + 人类可读错误(含 zod issue 路径),绝不抛异常 */ export declare function parseQaSuite(input: unknown): ParsedSpec;