/** * AUT-57 — Video narration overlay schema. * * The opcode-based video demo feature stores a regular `ExecutionProgram` * in a preset config. Narration is authored on `SLEEP` opcodes via stable * `stepId` anchors plus `narrationTextByLocale`; `autokap run` extracts those * anchors into this overlay shape, renders TTS, then persists the overlay and * audio assets under `presets.config.videoDemo`. */ import { z } from 'zod'; export declare const SUPPORTED_TTS_LOCALES: readonly ["en", "fr"]; export type SupportedTtsLocale = (typeof SUPPORTED_TTS_LOCALES)[number]; export declare function normalizeLocaleTag(locale: string): string; export declare function primaryLocaleSubtag(locale: string): string; export declare function resolveSupportedTtsLocale(locale: string): SupportedTtsLocale | null; /** * One narration segment anchored to a single opcode `stepId`. The TTS provider * receives `text` verbatim; `estimated_duration_ms` is the assistant's guess * (used for diagnostics, not authoritative — the run-time TTS step * (PR #4) measures the real audio length via ffprobe). */ export declare const NarrationSegmentSchema: z.ZodObject<{ stepId: z.ZodString; text: z.ZodString; estimated_duration_ms: z.ZodNumber; }, z.core.$strict>; export type NarrationSegment = z.infer; /** * Locale-aware narration overlay. `voice` is an opaque provider-side handle * (e.g. `openai/gpt-4o-mini-tts:nova`); the backend validates it against the * cached OpenRouter voice list (PR #3+). * * TTS support is intentionally catalog-gated: app locales can be arbitrary, * but narration locales must currently resolve to `en` or `fr`. */ export declare const VideoNarrationOverlaySchema: z.ZodObject<{ voice: z.ZodString; locale: z.ZodString; segments: z.ZodArray>; }, z.core.$strict>; export type VideoNarrationOverlay = z.infer; /** * Legacy ingest payload shape retained for compatibility tests. The current * demo-video flow persists the program as `presets.config.program`; narration * is extracted from `SLEEP.narrationTextByLocale` during `autokap run`. * * Cross-validation: * 1. `program.mediaMode === 'video'`. * 2. When `narration` is present, every `narration.segments[*].stepId` must * match a `program.steps[*].stepId`. */ export declare const VideoIngestPayloadSchema: z.ZodObject<{ program: z.ZodObject<{ presetId: z.ZodString; programVersion: z.ZodNumber; programSchemaVersion: z.ZodOptional; engineVersion: z.ZodOptional; mediaMode: z.ZodEnum<{ video: "video"; clip: "clip"; screenshot: "screenshot"; }>; baseUrl: z.ZodString; maxParallelCaptures: z.ZodOptional; variants: z.ZodArray; deviceScaleFactor: z.ZodOptional; locale: z.ZodOptional; theme: z.ZodOptional>; targetId: z.ZodOptional; targetLabel: z.ZodOptional; deviceFrame: z.ZodOptional; mockupOptions: z.ZodOptional>; outputScale: z.ZodOptional; showStatusBar: z.ZodOptional; showSafeAreaTop: z.ZodOptional; showSafeAreaBottom: z.ZodOptional; showSafeAreaLeft: z.ZodOptional; showSafeAreaRight: z.ZodOptional; showHomeIndicator: z.ZodOptional; safeAreaTopColor: z.ZodOptional; safeAreaBottomColor: z.ZodOptional; safeAreaLeftColor: z.ZodOptional; safeAreaRightColor: z.ZodOptional; statusBar: z.ZodOptional; date: z.ZodOptional; menuBarApp: z.ZodOptional; menuBarItems: z.ZodOptional>; signalStrength: z.ZodOptional; showNetworkType: z.ZodOptional; networkType: z.ZodOptional; wifiStrength: z.ZodOptional; batteryLevel: z.ZodOptional; batteryCharging: z.ZodOptional; showBatteryPercentage: z.ZodOptional; colorScheme: z.ZodOptional>; carrierName: z.ZodOptional; autoLocale: z.ZodOptional; }, z.core.$strict>>; browserBar: z.ZodOptional; pageTitle: z.ZodOptional; tabIconUrl: z.ZodOptional; }, z.core.$strict>>; windowBorder: z.ZodOptional>; colorScheme: z.ZodOptional>; }, z.core.$strip>>; }, z.core.$strict>>; preconditions: z.ZodObject<{ credentialsId: z.ZodOptional; credentials: z.ZodOptional; password: z.ZodOptional; loginUrl: z.ZodOptional; }, z.core.$strict>>; storageState: z.ZodOptional; }, z.core.$strict>>; origins: z.ZodArray>; }, z.core.$strict>>; }, z.core.$strict>>; sessionStorage: z.ZodOptional>>; cookies: z.ZodOptional; }, z.core.$strict>>>; scenario: z.ZodOptional; }, z.core.$strict>; steps: z.ZodArray; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"NAVIGATE">; }, z.core.$strict>, z.ZodObject<{ description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"DISMISS_OVERLAYS">; }, z.core.$strict>, z.ZodObject<{ urlPattern: z.ZodString; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"ASSERT_ROUTE">; }, z.core.$strict>, z.ZodObject<{ selectors: z.ZodArray; matchAll: z.ZodBoolean; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"ASSERT_SURFACE">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; button: z.ZodOptional>; fingerprint: z.ZodOptional; selectorAlternates: z.ZodOptional>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"CLICK">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; text: z.ZodString; textByLocale: z.ZodOptional>; clearFirst: z.ZodBoolean; fingerprint: z.ZodOptional; selectorAlternates: z.ZodOptional>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"TYPE">; }, z.core.$strict>, z.ZodObject<{ key: z.ZodString; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"PRESS_KEY">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; state: z.ZodEnum<{ visible: "visible"; attached: "attached"; }>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"WAIT_FOR">; }, z.core.$strict>, z.ZodObject<{ durationMs: z.ZodNumber; narrationText: z.ZodOptional; narrationTextByLocale: z.ZodOptional>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"SLEEP">; }, z.core.$strict>, z.ZodObject<{ locale: z.ZodString; method: z.ZodEnum<{ browser_context: "browser_context"; ui_interaction: "ui_interaction"; storage: "storage"; }>; selector: z.ZodOptional; storageHints: z.ZodOptional; key: z.ZodString; value: z.ZodString; }, z.core.$strict>>>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"SET_LOCALE">; }, z.core.$strict>, z.ZodObject<{ theme: z.ZodEnum<{ light: "light"; dark: "dark"; $variant: "$variant"; }>; method: z.ZodEnum<{ ui_interaction: "ui_interaction"; storage: "storage"; color_scheme: "color_scheme"; }>; selector: z.ZodOptional; storageHints: z.ZodOptional; key: z.ZodString; value: z.ZodString; }, z.core.$strict>>>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"SET_THEME">; }, z.core.$strict>, z.ZodObject<{ direction: z.ZodEnum<{ up: "up"; down: "down"; left: "left"; right: "right"; }>; amount: z.ZodOptional; targetSelector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"SCROLL">; }, z.core.$strict>, z.ZodObject<{ captureId: z.ZodOptional; captureName: z.ZodOptional; elementSelector: z.ZodOptional; outscale: z.ZodOptional; paddingTop: z.ZodOptional; paddingRight: z.ZodOptional; paddingBottom: z.ZodOptional; paddingLeft: z.ZodOptional; paddingPercent: z.ZodOptional; clampToViewport: z.ZodOptional; backgroundColor: z.ZodOptional; }, z.core.$strict>>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"CAPTURE_SCREENSHOT">; }, z.core.$strict>, z.ZodObject<{ clipId: z.ZodOptional; clipName: z.ZodOptional; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"BEGIN_CLIP">; }, z.core.$strict>, z.ZodObject<{ clipId: z.ZodOptional; clipName: z.ZodOptional; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"END_CLIP">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; fingerprint: z.ZodOptional; selectorAlternates: z.ZodOptional>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"HOVER">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; optionLabel: z.ZodOptional; optionValue: z.ZodOptional; optionIndex: z.ZodOptional; fingerprint: z.ZodOptional; selectorAlternates: z.ZodOptional>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"SELECT_OPTION">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; checked: z.ZodBoolean; fingerprint: z.ZodOptional; selectorAlternates: z.ZodOptional>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"CHECK">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; fingerprint: z.ZodOptional; selectorAlternates: z.ZodOptional>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"DOUBLE_CLICK">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodOptional; target: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; fingerprint: z.ZodOptional; selectorAlternates: z.ZodOptional>; toSelector: z.ZodOptional; toTarget: z.ZodOptional; textByLocale: z.ZodOptional>; role: z.ZodOptional; label: z.ZodOptional; labelByLocale: z.ZodOptional>; near: z.ZodOptional; nearByLocale: z.ZodOptional>; placeholder: z.ZodOptional; placeholderByLocale: z.ZodOptional>; exact: z.ZodOptional; }, z.core.$strict>>; toSelectorAlternates: z.ZodOptional>; offset: z.ZodOptional>; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"DRAG">; }, z.core.$strict>, z.ZodObject<{ sourceSelector: z.ZodString; containerSelector: z.ZodString; count: z.ZodNumber; removeSource: z.ZodOptional; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"CLONE_ELEMENT">; }, z.core.$strict>, z.ZodObject<{ groupName: z.ZodString; containerSelector: z.ZodOptional; templateSelector: z.ZodOptional; count: z.ZodOptional; removeTemplate: z.ZodOptional; slotMappings: z.ZodOptional; }, z.core.$strict>>>; inputSelector: z.ZodOptional; triggerSelector: z.ZodOptional; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"INJECT_MOCK_DATA">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodString; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"REMOVE_ELEMENT">; }, z.core.$strict>, z.ZodObject<{ selector: z.ZodString; attribute: z.ZodString; value: z.ZodString; description: z.ZodString; postcondition: z.ZodObject<{ type: z.ZodEnum<{ route_matches: "route_matches"; element_visible: "element_visible"; element_absent: "element_absent"; text_contains: "text_contains"; overlay_dismissed: "overlay_dismissed"; screenshot_stable: "screenshot_stable"; any_change: "any_change"; always: "always"; }>; pattern: z.ZodOptional; selector: z.ZodOptional; text: z.ZodOptional; threshold: z.ZodOptional; waitMs: z.ZodOptional; }, z.core.$strict>; recovery: z.ZodObject<{ retries: z.ZodNumber; useSelectorMemory: z.ZodBoolean; useAltInteraction: z.ZodBoolean; allowReload: z.ZodBoolean; allowHealer: z.ZodBoolean; }, z.core.$strict>; timeoutMs: z.ZodNumber; maxFailures: z.ZodNumber; stepId: z.ZodOptional; kind: z.ZodLiteral<"SET_ATTRIBUTE">; }, z.core.$strict>], "kind">>; artifactPlan: z.ZodObject<{ mediaMode: z.ZodEnum<{ video: "video"; clip: "clip"; screenshot: "screenshot"; }>; format: z.ZodOptional>; screenshotFormat: z.ZodOptional>; captureResolution: z.ZodOptional>; captureFps: z.ZodOptional; deliveryResolution: z.ZodOptional>; }, z.core.$strict>>; cursorTheme: z.ZodOptional>; maxClipDurationSec: z.ZodOptional; applyMockup: z.ZodOptional; applyStatusBar: z.ZodOptional; }, z.core.$strict>; outputScale: z.ZodOptional; compileFingerprint: z.ZodString; variantFingerprint: z.ZodOptional; compiledAt: z.ZodString; compiledWith: z.ZodOptional; mockDataGroups: z.ZodOptional; }, z.core.$strict>>; defaultValues: z.ZodArray>; replaceExisting: z.ZodOptional; }, z.core.$strict>>>; deviceConfigs: z.ZodOptional>>; publicUrl: z.ZodOptional; environmentHttpHeaders: z.ZodOptional>; blockAnalytics: z.ZodOptional; }, z.core.$strict>; narration: z.ZodOptional>; }, z.core.$strict>>; }, z.core.$strict>; export type VideoIngestPayload = z.infer; /** Parse an ingest payload, throwing a ZodError on invalid input. */ export declare function parseVideoIngestPayload(data: unknown): VideoIngestPayload; /** Status state machine values for `videos.status` (opcode flow). */ export declare const VIDEO_STATUSES: readonly ["draft", "preparing", "ready_to_run", "running", "uploading", "compositing", "done", "failed"]; export type VideoStatus = (typeof VIDEO_STATUSES)[number]; /** Discriminator value for opcode-flow rows in the `videos` table. */ export declare const VIDEO_FLOW_KIND_OPCODE: "opcode_video"; /** Discriminator value for legacy planner rows (migration 020 flow). */ export declare const VIDEO_FLOW_KIND_LEGACY: "legacy_planner";