Skip to main content
Glama

browser_batch

Run ordered browser steps in one tab queue under a shared deadline with per-step timeouts. Validates all steps up front and stops on failure, returning failed-step and prior results.

Instructions

Run ordered steps in one tab queue under a shared deadline; per-step timeouts cap remaining time. Prevalidates all steps, including skipped ones. Stops on failure with failed_step/prior results and isError; no rollback or automatic replay.

Input Schema

NameRequiredDescriptionDefault
stepsYesElement steps require selector; type uses selector XOR focused=true; press_key optionally guards focus with selector; scroll may omit target, wait follows condition. Step observe uses a fresh selector; batch observe reads at the end. No refs; coordinates only for scroll x/y. Common locators: selector_type defaults css; label=exact associated HTML label with normalized whitespace; placeholder=exact attribute; role uses selector="link", name="Claim" (exact AX name, empty allowed). nth=zero-based DOM/AX-role order. Locator options need selector; frame/frame_id exclusive. frame needs at least one of exact url/title or nested CSS iframe path (each step unique, e.g. ["#frame"]). Steps may override dialog_policy.
observeNoRead this explicit control after the action within its remaining budget; observation is separate from delivery. No assertion or automatic replay.
start_atNoExplicitly skip a reviewed completed prefix.
tab_handleYes
timeout_msNo
dialog_policyNoaccept/dismiss auto-handle dialogs and return their messages.ask

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.28.2
    • addedInput schema / properties / observe
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Read this explicit control after the action within its remaining budget; observation is separate from delivery. No assertion or automatic replay.",
      +  "properties": {
      +    "frame": {
      +      "additionalProperties": false,
      +      "description": "Child frame: at least one of url/title/path. url/title exact; path=unique nested CSS iframe steps (e.g. [\"#frame\"]); exclusive with frame_id.",
      +      "properties": {
      +        "path": {
      +          "items": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "maxItems": 16,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "title": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "url": {
      +          "minLength": 1,
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "frame_id": {
      +      "description": "Selector frame; default main.",
      +      "type": "string"
      +    },
      +    "max_chars": {
      +      "default": 16000,
      +      "maximum": 64000,
      +      "minimum": 1000,
      +      "type": "integer"
      +    },
      +    "max_options": {
      +      "default": 30,
      +      "maximum": 100,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "name": {
      +      "description": "role only: exact AX name; empty allowed.",
      +      "maxLength": 10000,
      +      "type": "string"
      +    },
      +    "nth": {
      +      "description": "Selector only: zero-based DOM index, AX tree order for role.",
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "popup_selector": {
      +      "description": "Optional unique CSS popup in the control frame; otherwise use browser-resolved controls/owns relations and control descendants.",
      +      "maxLength": 10000,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "ref": {
      +      "type": "string"
      +    },
      +    "selector": {
      +      "description": "Query by selector_type; role example: selector=\"link\", name=\"Claim\".",
      +      "maxLength": 10000,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "selector_type": {
      +      "description": "Default css. label: exact associated HTML label, whitespace normalized. placeholder: exact attribute.",
      +      "enum": [
      +        "css",
      +        "xpath",
      +        "label",
      +        "placeholder",
      +        "role"
      +      ],
      +      "type": "string"
      +    },
      +    "timeout_ms": {
      +      "default": 1000,
      +      "maximum": 5000,
      +      "minimum": 100,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / start_at / maximum
      Previous value: -19New value: +29
    • changedInput schema / properties / steps / description
      Previous value: -"Element steps require selector; type uses selector XOR focused=true; scroll may omit target, wait follows condition. No refs; coordinates only for scroll x/y. Common locators: selector_type defaults css; label=exact associated HTML label with normalized whitespace; placeholder=exact attribute; role uses selector=\"link\", name=\"Claim\" (exact AX name, empty allowed). nth=zero-based DOM/AX-role order. Locator options need selector; frame/frame_id exclusive. frame needs at least one of exact url/title or nested CSS iframe path (each step unique, e.g. [\"#frame\"]). Steps may override dialog_policy."New value: +"Element steps require selector; type uses selector XOR focused=true; press_key optionally guards focus with selector; scroll may omit target, wait follows condition. Step observe uses a fresh selector; batch observe reads at the end. No refs; coordinates only for scroll x/y. Common locators: selector_type defaults css; label=exact associated HTML label with normalized whitespace; placeholder=exact attribute; role uses selector=\"link\", name=\"Claim\" (exact AX name, empty allowed). nth=zero-based DOM/AX-role order. Locator options need selector; frame/frame_id exclusive. frame needs at least one of exact url/title or nested CSS iframe path (each step unique, e.g. [\"#frame\"]). Steps may override dialog_policy."
    • changedInput schema / properties / steps / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "click",
      -        "type": "string"
      -      },
      -      "button": {
      -        "default": "left",
      -        "enum": [
      -          "left",
      -          "middle",
      -          "right"
      -        ],
      -        "type": "string"
      -      },
      -      "click_count": {
      -        "anyOf": [
      -          {
      -            "const": 1,
      -            "type": "number"
      -          },
      -          {
      -            "const": 2,
      -            "type": "number"
      -          }
      -        ],
      -        "default": 1
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "default": "native",
      -        "description": "DOM: left single click, no modifiers.",
      -        "enum": [
      -          "native",
      -          "dom"
      -        ],
      -        "type": "string"
      -      },
      -      "modifiers": {
      -        "default": [],
      -        "items": {
      -          "enum": [
      -            "Alt",
      -            "Control",
      -            "Meta",
      -            "Shift"
      -          ],
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "offset": {
      -        "additionalProperties": false,
      -        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      -        "properties": {
      -          "x_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x_ratio",
      -          "y_ratio"
      -        ],
      -        "type": "object"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "settle_ms": {
      -        "anyOf": [
      -          {
      -            "maximum": 1000,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "additionalItems": false,
      -            "items": [
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            ],
      -            "maxItems": 2,
      -            "minItems": 2,
      -            "type": "array"
      -          }
      -        ],
      -        "description": "After preparation, before dispatch: ms or uniform [min,max]; min<=max."
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "fill",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "expected_value": {
      -        "description": "Expected retained text, default text. Verification only; insertion unchanged. No normalization or blur/async wait.",
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "default": "native",
      -        "description": "native: focus/select and insert without character keydown. dom: write visible line breaks without focus, emit synthetic input/change.",
      -        "enum": [
      -          "native",
      -          "dom"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "text": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "type",
      -        "type": "string"
      -      },
      -      "delay_ms": {
      -        "anyOf": [
      -          {
      -            "maximum": 1000,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "additionalItems": false,
      -            "items": [
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            ],
      -            "maxItems": 2,
      -            "minItems": 2,
      -            "type": "array"
      -          }
      -        ],
      -        "default": 0,
      -        "description": "Between characters: ms or independent uniform [min,max]; min<=max."
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "focused": {
      -        "const": true,
      -        "description": "Pin current editable focus without refocusing; exclusive with ref/selector and locator options.",
      -        "type": "boolean"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "text": {
      -        "description": "Printable trusted keys; Enter/Tab use press_key. Stops on target focus loss/detachment.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "hover",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "offset": {
      -        "additionalProperties": false,
      -        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      -        "properties": {
      -          "x_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x_ratio",
      -          "y_ratio"
      -        ],
      -        "type": "object"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "select_option",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "index": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "label": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "value": {
      -        "description": "Exactly one value/label/index; strings match exactly, index is zero-based.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "scroll",
      -        "type": "string"
      -      },
      -      "delta_x": {
      -        "default": 0,
      -        "type": "number"
      -      },
      -      "delta_y": {
      -        "description": "Vertical delta, positive down; required without until.",
      -        "type": "number"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "max_steps": {
      -        "default": 100,
      -        "maximum": 500,
      -        "minimum": 1,
      -        "type": "integer"
      -      },
      -      "mode": {
      -        "default": "dom",
      -        "enum": [
      -          "dom",
      -          "wheel"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "until": {
      -        "additionalProperties": false,
      -        "description": "DOM-only search of visible elements' textContent; selector is a CSS filter within the container.",
      -        "properties": {
      -          "selector": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "text": {
      -            "maxLength": 2000,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "text"
      -        ],
      -        "type": "object"
      -      },
      -      "x": {
      -        "type": "number"
      -      },
      -      "y": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "action"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "wait",
      -        "type": "string"
      -      },
      -      "condition": {
      -        "description": "Element conditions require selector; url/network_idle forbid locator fields.",
      -        "enum": [
      -          "attached",
      -          "absent",
      -          "visible",
      -          "actionable",
      -          "text",
      -          "value",
      -          "checked",
      -          "selected",
      -          "expanded",
      -          "url",
      -          "network_idle"
      -        ],
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "expected": {
      -        "anyOf": [
      -          {
      -            "maxLength": 100000,
      -            "type": "string"
      -          },
      -          {
      -            "type": "boolean"
      -          }
      -        ],
      -        "description": "Required for url (substring), value (exact), checked/selected/expanded (boolean; checked also \"mixed\"). text: expected substring XOR previous. Omit otherwise."
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "idle_ms": {
      -        "default": 500,
      -        "description": "network_idle quiet interval.",
      -        "maximum": 10000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "previous": {
      -        "description": "text only: complete prior innerText, not a truncated preview; exclusive with expected. Change does not establish new-run completion.",
      -        "maxLength": 100000,
      -        "type": "string"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "condition"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "press_key",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "key": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "key"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "click",
      +        "type": "string"
      +      },
      +      "button": {
      +        "default": "left",
      +        "enum": [
      +          "left",
      +          "middle",
      +          "right"
      +        ],
      +        "type": "string"
      +      },
      +      "click_count": {
      +        "anyOf": [
      +          {
      +            "const": 1,
      +            "type": "number"
      +          },
      +          {
      +            "const": 2,
      +            "type": "number"
      +          }
      +        ],
      +        "default": 1
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "default": "native",
      +        "description": "DOM: left single click, no modifiers.",
      +        "enum": [
      +          "native",
      +          "dom"
      +        ],
      +        "type": "string"
      +      },
      +      "modifiers": {
      +        "default": [],
      +        "items": {
      +          "enum": [
      +            "Alt",
      +            "Control",
      +            "Meta",
      +            "Shift"
      +          ],
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "observe": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "frame": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "path": {
      +                "items": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 16,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "url": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "frame_id": {
      +            "type": "string"
      +          },
      +          "max_chars": {
      +            "default": 16000,
      +            "maximum": 64000,
      +            "minimum": 1000,
      +            "type": "integer"
      +          },
      +          "max_options": {
      +            "default": 30,
      +            "maximum": 100,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          "nth": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "popup_selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "enum": [
      +              "css",
      +              "xpath",
      +              "label",
      +              "placeholder",
      +              "role"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "default": 1000,
      +            "maximum": 5000,
      +            "minimum": 100,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "offset": {
      +        "additionalProperties": false,
      +        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      +        "properties": {
      +          "x_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x_ratio",
      +          "y_ratio"
      +        ],
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "settle_ms": {
      +        "anyOf": [
      +          {
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "additionalItems": false,
      +            "items": [
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            ],
      +            "maxItems": 2,
      +            "minItems": 2,
      +            "type": "array"
      +          }
      +        ],
      +        "description": "After preparation, before dispatch: ms or uniform [min,max]; min<=max."
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "fill",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "expected_value": {
      +        "description": "Expected retained text, default text. Verification only; insertion unchanged. No normalization or blur/async wait.",
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "default": "native",
      +        "description": "native: focus/select and insert without character keydown. dom: write visible line breaks without focus, emit synthetic input/change.",
      +        "enum": [
      +          "native",
      +          "dom"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "observe": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "frame": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "path": {
      +                "items": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 16,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "url": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "frame_id": {
      +            "type": "string"
      +          },
      +          "max_chars": {
      +            "default": 16000,
      +            "maximum": 64000,
      +            "minimum": 1000,
      +            "type": "integer"
      +          },
      +          "max_options": {
      +            "default": 30,
      +            "maximum": 100,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          "nth": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "popup_selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "enum": [
      +              "css",
      +              "xpath",
      +              "label",
      +              "placeholder",
      +              "role"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "default": 1000,
      +            "maximum": 5000,
      +            "minimum": 100,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "type",
      +        "type": "string"
      +      },
      +      "delay_ms": {
      +        "anyOf": [
      +          {
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "additionalItems": false,
      +            "items": [
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            ],
      +            "maxItems": 2,
      +            "minItems": 2,
      +            "type": "array"
      +          }
      +        ],
      +        "default": 0,
      +        "description": "Between characters: ms or independent uniform [min,max]; min<=max."
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "focused": {
      +        "const": true,
      +        "description": "Pin current editable focus without refocusing; exclusive with ref/selector and locator options.",
      +        "type": "boolean"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "observe": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "frame": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "path": {
      +                "items": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 16,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "url": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "frame_id": {
      +            "type": "string"
      +          },
      +          "max_chars": {
      +            "default": 16000,
      +            "maximum": 64000,
      +            "minimum": 1000,
      +            "type": "integer"
      +          },
      +          "max_options": {
      +            "default": 30,
      +            "maximum": 100,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          "nth": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "popup_selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "enum": [
      +              "css",
      +              "xpath",
      +              "label",
      +              "placeholder",
      +              "role"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "default": 1000,
      +            "maximum": 5000,
      +            "minimum": 100,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "description": "Printable trusted keys; Enter/Tab use press_key. Stops on target focus loss/detachment.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "hover",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "observe": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "frame": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "path": {
      +                "items": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 16,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "url": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "frame_id": {
      +            "type": "string"
      +          },
      +          "max_chars": {
      +            "default": 16000,
      +            "maximum": 64000,
      +            "minimum": 1000,
      +            "type": "integer"
      +          },
      +          "max_options": {
      +            "default": 30,
      +            "maximum": 100,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          "nth": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "popup_selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "enum": [
      +              "css",
      +              "xpath",
      +              "label",
      +              "placeholder",
      +              "role"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "default": 1000,
      +            "maximum": 5000,
      +            "minimum": 100,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "offset": {
      +        "additionalProperties": false,
      +        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      +        "properties": {
      +          "x_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x_ratio",
      +          "y_ratio"
      +        ],
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "select_option",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "index": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "observe": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "frame": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "path": {
      +                "items": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 16,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "url": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "frame_id": {
      +            "type": "string"
      +          },
      +          "max_chars": {
      +            "default": 16000,
      +            "maximum": 64000,
      +            "minimum": 1000,
      +            "type": "integer"
      +          },
      +          "max_options": {
      +            "default": 30,
      +            "maximum": 100,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          "nth": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "popup_selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "enum": [
      +              "css",
      +              "xpath",
      +              "label",
      +              "placeholder",
      +              "role"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "default": 1000,
      +            "maximum": 5000,
      +            "minimum": 100,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "value": {
      +        "description": "Exactly one value/label/index; strings match exactly, index is zero-based.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "scroll",
      +        "type": "string"
      +      },
      +      "delta_x": {
      +        "default": 0,
      +        "type": "number"
      +      },
      +      "delta_y": {
      +        "description": "Vertical delta, positive down; required without until.",
      +        "type": "number"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "max_steps": {
      +        "default": 100,
      +        "maximum": 500,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "mode": {
      +        "default": "dom",
      +        "enum": [
      +          "dom",
      +          "wheel"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "observe": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "frame": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "path": {
      +                "items": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 16,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "url": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "frame_id": {
      +            "type": "string"
      +          },
      +          "max_chars": {
      +            "default": 16000,
      +            "maximum": 64000,
      +            "minimum": 1000,
      +            "type": "integer"
      +          },
      +          "max_options": {
      +            "default": 30,
      +            "maximum": 100,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          "nth": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "popup_selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "enum": [
      +              "css",
      +              "xpath",
      +              "label",
      +              "placeholder",
      +              "role"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "default": 1000,
      +            "maximum": 5000,
      +            "minimum": 100,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "until": {
      +        "additionalProperties": false,
      +        "description": "DOM-only search of visible elements' textContent; selector is a CSS filter within the container.",
      +        "properties": {
      +          "selector": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "text": {
      +            "maxLength": 2000,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "text"
      +        ],
      +        "type": "object"
      +      },
      +      "x": {
      +        "type": "number"
      +      },
      +      "y": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "action"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "wait",
      +        "type": "string"
      +      },
      +      "condition": {
      +        "description": "Element conditions require selector; url/network_idle forbid locator fields.",
      +        "enum": [
      +          "attached",
      +          "absent",
      +          "visible",
      +          "actionable",
      +          "text",
      +          "value",
      +          "checked",
      +          "selected",
      +          "expanded",
      +          "url",
      +          "network_idle"
      +        ],
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "expected": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100000,
      +            "type": "string"
      +          },
      +          {
      +            "type": "boolean"
      +          }
      +        ],
      +        "description": "Required for url (substring), value (exact), checked/selected/expanded (boolean; checked also \"mixed\"). text: expected substring XOR previous. Omit otherwise."
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "idle_ms": {
      +        "default": 500,
      +        "description": "network_idle quiet interval.",
      +        "maximum": 10000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "observe": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "frame": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "path": {
      +                "items": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 16,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "url": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "frame_id": {
      +            "type": "string"
      +          },
      +          "max_chars": {
      +            "default": 16000,
      +            "maximum": 64000,
      +            "minimum": 1000,
      +            "type": "integer"
      +          },
      +          "max_options": {
      +            "default": 30,
      +            "maximum": 100,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          "nth": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "popup_selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "enum": [
      +              "css",
      +              "xpath",
      +              "label",
      +              "placeholder",
      +              "role"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "default": 1000,
      +            "maximum": 5000,
      +            "minimum": 100,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "previous": {
      +        "description": "text only: complete prior innerText, not a truncated preview; exclusive with expected. Change does not establish new-run completion.",
      +        "maxLength": 100000,
      +        "type": "string"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "condition"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "press_key",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "key": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "observe": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "frame": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "path": {
      +                "items": {
      +                  "minLength": 1,
      +                  "type": "string"
      +                },
      +                "maxItems": 16,
      +                "minItems": 1,
      +                "type": "array"
      +              },
      +              "title": {
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "url": {
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "frame_id": {
      +            "type": "string"
      +          },
      +          "max_chars": {
      +            "default": 16000,
      +            "maximum": 64000,
      +            "minimum": 1000,
      +            "type": "integer"
      +          },
      +          "max_options": {
      +            "default": 30,
      +            "maximum": 100,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "name": {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          "nth": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "popup_selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector": {
      +            "maxLength": 10000,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "enum": [
      +              "css",
      +              "xpath",
      +              "label",
      +              "placeholder",
      +              "role"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "default": 1000,
      +            "maximum": 5000,
      +            "minimum": 100,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "key"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / steps / maxItems
      Previous value: -20New value: +30
  2. Changed1 schema field changedv0.25.2
    • changedInput schema / properties / steps / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "click",
      -        "type": "string"
      -      },
      -      "button": {
      -        "default": "left",
      -        "enum": [
      -          "left",
      -          "middle",
      -          "right"
      -        ],
      -        "type": "string"
      -      },
      -      "click_count": {
      -        "anyOf": [
      -          {
      -            "const": 1,
      -            "type": "number"
      -          },
      -          {
      -            "const": 2,
      -            "type": "number"
      -          }
      -        ],
      -        "default": 1
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "default": "native",
      -        "description": "DOM: left single click, no modifiers.",
      -        "enum": [
      -          "native",
      -          "dom"
      -        ],
      -        "type": "string"
      -      },
      -      "modifiers": {
      -        "default": [],
      -        "items": {
      -          "enum": [
      -            "Alt",
      -            "Control",
      -            "Meta",
      -            "Shift"
      -          ],
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "offset": {
      -        "additionalProperties": false,
      -        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      -        "properties": {
      -          "x_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x_ratio",
      -          "y_ratio"
      -        ],
      -        "type": "object"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "settle_ms": {
      -        "anyOf": [
      -          {
      -            "maximum": 1000,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "additionalItems": false,
      -            "items": [
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            ],
      -            "maxItems": 2,
      -            "minItems": 2,
      -            "type": "array"
      -          }
      -        ],
      -        "description": "After preparation, before dispatch: ms or uniform [min,max]; min<=max."
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "fill",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "expected_value": {
      -        "description": "Expected retained text, default text. Verification only; insertion unchanged. No normalization or blur/async wait.",
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "default": "native",
      -        "description": "native: focus/select and insert without character keydown. dom: write visible line breaks without focus, emit synthetic input/change.",
      -        "enum": [
      -          "native",
      -          "dom"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "text": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "type",
      -        "type": "string"
      -      },
      -      "delay_ms": {
      -        "anyOf": [
      -          {
      -            "maximum": 1000,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "additionalItems": false,
      -            "items": [
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            ],
      -            "maxItems": 2,
      -            "minItems": 2,
      -            "type": "array"
      -          }
      -        ],
      -        "default": 0,
      -        "description": "Between characters: ms or independent uniform [min,max]; min<=max."
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "focused": {
      -        "const": true,
      -        "description": "Pin current editable focus without refocusing; exclusive with ref/selector and locator options.",
      -        "type": "boolean"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "text": {
      -        "description": "Printable trusted keys; Enter/Tab use press_key. Stops on target focus loss/detachment.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "hover",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "offset": {
      -        "additionalProperties": false,
      -        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      -        "properties": {
      -          "x_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x_ratio",
      -          "y_ratio"
      -        ],
      -        "type": "object"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "select_option",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "index": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "label": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "value": {
      -        "description": "Exactly one value/label/index; strings match exactly, index is zero-based.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "scroll",
      -        "type": "string"
      -      },
      -      "delta_x": {
      -        "default": 0,
      -        "type": "number"
      -      },
      -      "delta_y": {
      -        "description": "Vertical delta, positive down; required without until.",
      -        "type": "number"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "max_steps": {
      -        "default": 100,
      -        "maximum": 500,
      -        "minimum": 1,
      -        "type": "integer"
      -      },
      -      "mode": {
      -        "default": "dom",
      -        "enum": [
      -          "dom",
      -          "wheel"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "until": {
      -        "additionalProperties": false,
      -        "description": "DOM-only search of visible elements' textContent; selector is a CSS filter within the container.",
      -        "properties": {
      -          "selector": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "text": {
      -            "maxLength": 2000,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "text"
      -        ],
      -        "type": "object"
      -      },
      -      "x": {
      -        "type": "number"
      -      },
      -      "y": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "action"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "wait",
      -        "type": "string"
      -      },
      -      "condition": {
      -        "description": "Element conditions require selector; url/network_idle forbid locator fields.",
      -        "enum": [
      -          "attached",
      -          "absent",
      -          "visible",
      -          "actionable",
      -          "text",
      -          "value",
      -          "checked",
      -          "selected",
      -          "expanded",
      -          "url",
      -          "network_idle"
      -        ],
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "expected": {
      -        "anyOf": [
      -          {
      -            "maxLength": 100000,
      -            "type": "string"
      -          },
      -          {
      -            "type": "boolean"
      -          }
      -        ],
      -        "description": "Required for url (substring), value (exact), checked/selected/expanded (boolean; checked also \"mixed\"). text: expected substring XOR previous. Omit otherwise."
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "idle_ms": {
      -        "default": 500,
      -        "description": "network_idle quiet interval.",
      -        "maximum": 10000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "name": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "previous": {
      -        "description": "text only: wait for full rendered innerText to change; exclusive with expected.",
      -        "maxLength": 100000,
      -        "type": "string"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "condition"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "press_key",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "key": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "key"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "click",
      +        "type": "string"
      +      },
      +      "button": {
      +        "default": "left",
      +        "enum": [
      +          "left",
      +          "middle",
      +          "right"
      +        ],
      +        "type": "string"
      +      },
      +      "click_count": {
      +        "anyOf": [
      +          {
      +            "const": 1,
      +            "type": "number"
      +          },
      +          {
      +            "const": 2,
      +            "type": "number"
      +          }
      +        ],
      +        "default": 1
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "default": "native",
      +        "description": "DOM: left single click, no modifiers.",
      +        "enum": [
      +          "native",
      +          "dom"
      +        ],
      +        "type": "string"
      +      },
      +      "modifiers": {
      +        "default": [],
      +        "items": {
      +          "enum": [
      +            "Alt",
      +            "Control",
      +            "Meta",
      +            "Shift"
      +          ],
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "offset": {
      +        "additionalProperties": false,
      +        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      +        "properties": {
      +          "x_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x_ratio",
      +          "y_ratio"
      +        ],
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "settle_ms": {
      +        "anyOf": [
      +          {
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "additionalItems": false,
      +            "items": [
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            ],
      +            "maxItems": 2,
      +            "minItems": 2,
      +            "type": "array"
      +          }
      +        ],
      +        "description": "After preparation, before dispatch: ms or uniform [min,max]; min<=max."
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "fill",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "expected_value": {
      +        "description": "Expected retained text, default text. Verification only; insertion unchanged. No normalization or blur/async wait.",
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "default": "native",
      +        "description": "native: focus/select and insert without character keydown. dom: write visible line breaks without focus, emit synthetic input/change.",
      +        "enum": [
      +          "native",
      +          "dom"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "type",
      +        "type": "string"
      +      },
      +      "delay_ms": {
      +        "anyOf": [
      +          {
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "additionalItems": false,
      +            "items": [
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            ],
      +            "maxItems": 2,
      +            "minItems": 2,
      +            "type": "array"
      +          }
      +        ],
      +        "default": 0,
      +        "description": "Between characters: ms or independent uniform [min,max]; min<=max."
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "focused": {
      +        "const": true,
      +        "description": "Pin current editable focus without refocusing; exclusive with ref/selector and locator options.",
      +        "type": "boolean"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "description": "Printable trusted keys; Enter/Tab use press_key. Stops on target focus loss/detachment.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "hover",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "offset": {
      +        "additionalProperties": false,
      +        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      +        "properties": {
      +          "x_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x_ratio",
      +          "y_ratio"
      +        ],
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "select_option",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "index": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "value": {
      +        "description": "Exactly one value/label/index; strings match exactly, index is zero-based.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "scroll",
      +        "type": "string"
      +      },
      +      "delta_x": {
      +        "default": 0,
      +        "type": "number"
      +      },
      +      "delta_y": {
      +        "description": "Vertical delta, positive down; required without until.",
      +        "type": "number"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "max_steps": {
      +        "default": 100,
      +        "maximum": 500,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "mode": {
      +        "default": "dom",
      +        "enum": [
      +          "dom",
      +          "wheel"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "until": {
      +        "additionalProperties": false,
      +        "description": "DOM-only search of visible elements' textContent; selector is a CSS filter within the container.",
      +        "properties": {
      +          "selector": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "text": {
      +            "maxLength": 2000,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "text"
      +        ],
      +        "type": "object"
      +      },
      +      "x": {
      +        "type": "number"
      +      },
      +      "y": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "action"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "wait",
      +        "type": "string"
      +      },
      +      "condition": {
      +        "description": "Element conditions require selector; url/network_idle forbid locator fields.",
      +        "enum": [
      +          "attached",
      +          "absent",
      +          "visible",
      +          "actionable",
      +          "text",
      +          "value",
      +          "checked",
      +          "selected",
      +          "expanded",
      +          "url",
      +          "network_idle"
      +        ],
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "expected": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100000,
      +            "type": "string"
      +          },
      +          {
      +            "type": "boolean"
      +          }
      +        ],
      +        "description": "Required for url (substring), value (exact), checked/selected/expanded (boolean; checked also \"mixed\"). text: expected substring XOR previous. Omit otherwise."
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "idle_ms": {
      +        "default": 500,
      +        "description": "network_idle quiet interval.",
      +        "maximum": 10000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "previous": {
      +        "description": "text only: complete prior innerText, not a truncated preview; exclusive with expected. Change does not establish new-run completion.",
      +        "maxLength": 100000,
      +        "type": "string"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "condition"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "press_key",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "key": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "key"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed3 schema fields changedv0.24.2
    • changedInput schema / properties / dialog_policy / description
      Previous value: -"accept/dismiss returns handled dialog messages."New value: +"accept/dismiss auto-handle dialogs and return their messages."
    • addedInput schema / properties / steps / description
      Added value: +"Element steps require selector; type uses selector XOR focused=true; scroll may omit target, wait follows condition. No refs; coordinates only for scroll x/y. Common locators: selector_type defaults css; label=exact associated HTML label with normalized whitespace; placeholder=exact attribute; role uses selector=\"link\", name=\"Claim\" (exact AX name, empty allowed). nth=zero-based DOM/AX-role order. Locator options need selector; frame/frame_id exclusive. frame needs at least one of exact url/title or nested CSS iframe path (each step unique, e.g. [\"#frame\"]). Steps may override dialog_policy."
    • changedInput schema / properties / steps / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "click",
      -        "type": "string"
      -      },
      -      "button": {
      -        "default": "left",
      -        "enum": [
      -          "left",
      -          "middle",
      -          "right"
      -        ],
      -        "type": "string"
      -      },
      -      "click_count": {
      -        "anyOf": [
      -          {
      -            "const": 1,
      -            "type": "number"
      -          },
      -          {
      -            "const": 2,
      -            "type": "number"
      -          }
      -        ],
      -        "default": 1
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "default": "native",
      -        "enum": [
      -          "native",
      -          "dom"
      -        ],
      -        "type": "string"
      -      },
      -      "modifiers": {
      -        "default": [],
      -        "items": {
      -          "enum": [
      -            "Alt",
      -            "Control",
      -            "Meta",
      -            "Shift"
      -          ],
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "offset": {
      -        "additionalProperties": false,
      -        "description": "Native element only: ratios within its content quad; offscreen/covered points fail.",
      -        "properties": {
      -          "x_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x_ratio",
      -          "y_ratio"
      -        ],
      -        "type": "object"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "settle_ms": {
      -        "anyOf": [
      -          {
      -            "maximum": 1000,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "additionalItems": false,
      -            "items": [
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            ],
      -            "maxItems": 2,
      -            "minItems": 2,
      -            "type": "array"
      -          }
      -        ],
      -        "description": "Pause after target preparation, before dispatch: fixed ms or uniform [min, max]."
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "fill",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "expected_value": {
      -        "description": "Explicit expected retained text after page formatting; default is text. Changes verification only, never the inserted text. No automatic numeric/date normalization or waiting for blur/async formatting.",
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "default": "native",
      -        "enum": [
      -          "native",
      -          "dom"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "text": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "type",
      -        "type": "string"
      -      },
      -      "delay_ms": {
      -        "anyOf": [
      -          {
      -            "maximum": 1000,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "additionalItems": false,
      -            "items": [
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            ],
      -            "maxItems": 2,
      -            "minItems": 2,
      -            "type": "array"
      -          }
      -        ],
      -        "default": 0,
      -        "description": "Between characters: fixed ms or independently sampled uniform [min, max]."
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "focused": {
      -        "const": true,
      -        "description": "Alternative to ref/selector: pin the currently focused editable element without refocusing it. Stops if focus changes.",
      -        "type": "boolean"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role (e.g. selector=\"link\", name=\"Claim\"), according to selector_type.",
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "text": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "hover",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "offset": {
      -        "additionalProperties": false,
      -        "description": "Native element only: ratios within its content quad; offscreen/covered points fail.",
      -        "properties": {
      -          "x_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x_ratio",
      -          "y_ratio"
      -        ],
      -        "type": "object"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "select_option",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "index": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "label": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "value": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "scroll",
      -        "type": "string"
      -      },
      -      "delta_x": {
      -        "default": 0,
      -        "type": "number"
      -      },
      -      "delta_y": {
      -        "description": "Positive scrolls down.",
      -        "type": "number"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "max_steps": {
      -        "default": 100,
      -        "maximum": 500,
      -        "minimum": 1,
      -        "type": "integer"
      -      },
      -      "mode": {
      -        "default": "dom",
      -        "enum": [
      -          "dom",
      -          "wheel"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role (e.g. selector=\"link\", name=\"Claim\"), according to selector_type.",
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "until": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "selector": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "text": {
      -            "maxLength": 2000,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "text"
      -        ],
      -        "type": "object"
      -      },
      -      "x": {
      -        "type": "number"
      -      },
      -      "y": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "action"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "wait",
      -        "type": "string"
      -      },
      -      "condition": {
      -        "enum": [
      -          "attached",
      -          "absent",
      -          "visible",
      -          "actionable",
      -          "text",
      -          "value",
      -          "checked",
      -          "selected",
      -          "expanded",
      -          "url",
      -          "network_idle"
      -        ],
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "expected": {
      -        "anyOf": [
      -          {
      -            "maxLength": 100000,
      -            "type": "string"
      -          },
      -          {
      -            "type": "boolean"
      -          }
      -        ],
      -        "description": "text/url: substring; value: exact string; checked/selected/expanded: boolean (checked also accepts \"mixed\")."
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "idle_ms": {
      -        "default": 500,
      -        "maximum": 10000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "previous": {
      -        "description": "Text only: wait for full rendered innerText to differ; alternative to expected.",
      -        "maxLength": 100000,
      -        "type": "string"
      -      },
      -      "selector": {
      -        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role (e.g. selector=\"link\", name=\"Claim\"), according to selector_type.",
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "condition"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "press_key",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "key": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "key"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "click",
      +        "type": "string"
      +      },
      +      "button": {
      +        "default": "left",
      +        "enum": [
      +          "left",
      +          "middle",
      +          "right"
      +        ],
      +        "type": "string"
      +      },
      +      "click_count": {
      +        "anyOf": [
      +          {
      +            "const": 1,
      +            "type": "number"
      +          },
      +          {
      +            "const": 2,
      +            "type": "number"
      +          }
      +        ],
      +        "default": 1
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "default": "native",
      +        "description": "DOM: left single click, no modifiers.",
      +        "enum": [
      +          "native",
      +          "dom"
      +        ],
      +        "type": "string"
      +      },
      +      "modifiers": {
      +        "default": [],
      +        "items": {
      +          "enum": [
      +            "Alt",
      +            "Control",
      +            "Meta",
      +            "Shift"
      +          ],
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "offset": {
      +        "additionalProperties": false,
      +        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      +        "properties": {
      +          "x_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x_ratio",
      +          "y_ratio"
      +        ],
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "settle_ms": {
      +        "anyOf": [
      +          {
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "additionalItems": false,
      +            "items": [
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            ],
      +            "maxItems": 2,
      +            "minItems": 2,
      +            "type": "array"
      +          }
      +        ],
      +        "description": "After preparation, before dispatch: ms or uniform [min,max]; min<=max."
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "fill",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "expected_value": {
      +        "description": "Expected retained text, default text. Verification only; insertion unchanged. No normalization or blur/async wait.",
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "default": "native",
      +        "description": "native: focus/select and insert without character keydown. dom: write visible line breaks without focus, emit synthetic input/change.",
      +        "enum": [
      +          "native",
      +          "dom"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "type",
      +        "type": "string"
      +      },
      +      "delay_ms": {
      +        "anyOf": [
      +          {
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "additionalItems": false,
      +            "items": [
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            ],
      +            "maxItems": 2,
      +            "minItems": 2,
      +            "type": "array"
      +          }
      +        ],
      +        "default": 0,
      +        "description": "Between characters: ms or independent uniform [min,max]; min<=max."
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "focused": {
      +        "const": true,
      +        "description": "Pin current editable focus without refocusing; exclusive with ref/selector and locator options.",
      +        "type": "boolean"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "description": "Printable trusted keys; Enter/Tab use press_key. Stops on target focus loss/detachment.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "hover",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "offset": {
      +        "additionalProperties": false,
      +        "description": "Native element only: ratios within its content quad; hit checks still apply.",
      +        "properties": {
      +          "x_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x_ratio",
      +          "y_ratio"
      +        ],
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "select_option",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "index": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "value": {
      +        "description": "Exactly one value/label/index; strings match exactly, index is zero-based.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "scroll",
      +        "type": "string"
      +      },
      +      "delta_x": {
      +        "default": 0,
      +        "type": "number"
      +      },
      +      "delta_y": {
      +        "description": "Vertical delta, positive down; required without until.",
      +        "type": "number"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "max_steps": {
      +        "default": 100,
      +        "maximum": 500,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "mode": {
      +        "default": "dom",
      +        "enum": [
      +          "dom",
      +          "wheel"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "until": {
      +        "additionalProperties": false,
      +        "description": "DOM-only search of visible elements' textContent; selector is a CSS filter within the container.",
      +        "properties": {
      +          "selector": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "text": {
      +            "maxLength": 2000,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "text"
      +        ],
      +        "type": "object"
      +      },
      +      "x": {
      +        "type": "number"
      +      },
      +      "y": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "action"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "wait",
      +        "type": "string"
      +      },
      +      "condition": {
      +        "description": "Element conditions require selector; url/network_idle forbid locator fields.",
      +        "enum": [
      +          "attached",
      +          "absent",
      +          "visible",
      +          "actionable",
      +          "text",
      +          "value",
      +          "checked",
      +          "selected",
      +          "expanded",
      +          "url",
      +          "network_idle"
      +        ],
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "expected": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100000,
      +            "type": "string"
      +          },
      +          {
      +            "type": "boolean"
      +          }
      +        ],
      +        "description": "Required for url (substring), value (exact), checked/selected/expanded (boolean; checked also \"mixed\"). text: expected substring XOR previous. Omit otherwise."
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "idle_ms": {
      +        "default": 500,
      +        "description": "network_idle quiet interval.",
      +        "maximum": 10000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "name": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "previous": {
      +        "description": "text only: wait for full rendered innerText to change; exclusive with expected.",
      +        "maxLength": 100000,
      +        "type": "string"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "condition"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "press_key",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "key": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "key"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed1 schema field changedv0.24.1
    • changedInput schema / properties / steps / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "click",
      -        "type": "string"
      -      },
      -      "button": {
      -        "default": "left",
      -        "enum": [
      -          "left",
      -          "middle",
      -          "right"
      -        ],
      -        "type": "string"
      -      },
      -      "click_count": {
      -        "anyOf": [
      -          {
      -            "const": 1,
      -            "type": "number"
      -          },
      -          {
      -            "const": 2,
      -            "type": "number"
      -          }
      -        ],
      -        "default": 1
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "default": "native",
      -        "enum": [
      -          "native",
      -          "dom"
      -        ],
      -        "type": "string"
      -      },
      -      "modifiers": {
      -        "default": [],
      -        "items": {
      -          "enum": [
      -            "Alt",
      -            "Control",
      -            "Meta",
      -            "Shift"
      -          ],
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "offset": {
      -        "additionalProperties": false,
      -        "description": "Native element only: ratios within its content quad; offscreen/covered points fail.",
      -        "properties": {
      -          "x_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x_ratio",
      -          "y_ratio"
      -        ],
      -        "type": "object"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "settle_ms": {
      -        "anyOf": [
      -          {
      -            "maximum": 1000,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "additionalItems": false,
      -            "items": [
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            ],
      -            "maxItems": 2,
      -            "minItems": 2,
      -            "type": "array"
      -          }
      -        ],
      -        "description": "Pause after target preparation, before dispatch: fixed ms or uniform [min, max]."
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "fill",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "expected_value": {
      -        "description": "Explicit expected retained text after page formatting; default is text. Changes verification only, never the inserted text. No automatic numeric/date normalization or waiting for blur/async formatting.",
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "default": "native",
      -        "enum": [
      -          "native",
      -          "dom"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "text": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "type",
      -        "type": "string"
      -      },
      -      "delay_ms": {
      -        "anyOf": [
      -          {
      -            "maximum": 1000,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "additionalItems": false,
      -            "items": [
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "maximum": 1000,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            ],
      -            "maxItems": 2,
      -            "minItems": 2,
      -            "type": "array"
      -          }
      -        ],
      -        "default": 0,
      -        "description": "Between characters: fixed ms or independently sampled uniform [min, max]."
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "focused": {
      -        "const": true,
      -        "description": "Alternative to ref/selector: pin the currently focused editable element without refocusing it. Stops if focus changes.",
      -        "type": "boolean"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role, according to selector_type.",
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "text": {
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "hover",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "offset": {
      -        "additionalProperties": false,
      -        "description": "Native element only: ratios within its content quad; offscreen/covered points fail.",
      -        "properties": {
      -          "x_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y_ratio": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x_ratio",
      -          "y_ratio"
      -        ],
      -        "type": "object"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "select_option",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "index": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "label": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "value": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "selector"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "scroll",
      -        "type": "string"
      -      },
      -      "delta_x": {
      -        "default": 0,
      -        "type": "number"
      -      },
      -      "delta_y": {
      -        "description": "Positive scrolls down.",
      -        "type": "number"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "max_steps": {
      -        "default": 100,
      -        "maximum": 500,
      -        "minimum": 1,
      -        "type": "integer"
      -      },
      -      "mode": {
      -        "default": "dom",
      -        "enum": [
      -          "dom",
      -          "wheel"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "selector": {
      -        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role, according to selector_type.",
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "until": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "selector": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "text": {
      -            "maxLength": 2000,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "text"
      -        ],
      -        "type": "object"
      -      },
      -      "x": {
      -        "type": "number"
      -      },
      -      "y": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "action"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "wait",
      -        "type": "string"
      -      },
      -      "condition": {
      -        "enum": [
      -          "attached",
      -          "absent",
      -          "visible",
      -          "actionable",
      -          "text",
      -          "value",
      -          "checked",
      -          "selected",
      -          "expanded",
      -          "url",
      -          "network_idle"
      -        ],
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "expected": {
      -        "anyOf": [
      -          {
      -            "maxLength": 100000,
      -            "type": "string"
      -          },
      -          {
      -            "type": "boolean"
      -          }
      -        ],
      -        "description": "text/url: substring; value: exact string; checked/selected/expanded: boolean (checked also accepts \"mixed\")."
      -      },
      -      "frame": {
      -        "additionalProperties": false,
      -        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      -        "properties": {
      -          "path": {
      -            "items": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "maxItems": 16,
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "title": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "url": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "frame_id": {
      -        "type": "string"
      -      },
      -      "idle_ms": {
      -        "default": 500,
      -        "maximum": 10000,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "name": {
      -        "description": "role only: exact accessible name; may be empty.",
      -        "maxLength": 10000,
      -        "type": "string"
      -      },
      -      "nth": {
      -        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "previous": {
      -        "description": "Text only: wait for full rendered innerText to differ; alternative to expected.",
      -        "maxLength": 100000,
      -        "type": "string"
      -      },
      -      "selector": {
      -        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role, according to selector_type.",
      -        "maxLength": 10000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "selector_type": {
      -        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      -        "enum": [
      -          "css",
      -          "xpath",
      -          "label",
      -          "placeholder",
      -          "role"
      -        ],
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "condition"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "action": {
      -        "const": "press_key",
      -        "type": "string"
      -      },
      -      "dialog_policy": {
      -        "enum": [
      -          "ask",
      -          "accept",
      -          "dismiss"
      -        ],
      -        "type": "string"
      -      },
      -      "key": {
      -        "type": "string"
      -      },
      -      "timeout_ms": {
      -        "maximum": 30000,
      -        "minimum": 100,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "key"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "click",
      +        "type": "string"
      +      },
      +      "button": {
      +        "default": "left",
      +        "enum": [
      +          "left",
      +          "middle",
      +          "right"
      +        ],
      +        "type": "string"
      +      },
      +      "click_count": {
      +        "anyOf": [
      +          {
      +            "const": 1,
      +            "type": "number"
      +          },
      +          {
      +            "const": 2,
      +            "type": "number"
      +          }
      +        ],
      +        "default": 1
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "default": "native",
      +        "enum": [
      +          "native",
      +          "dom"
      +        ],
      +        "type": "string"
      +      },
      +      "modifiers": {
      +        "default": [],
      +        "items": {
      +          "enum": [
      +            "Alt",
      +            "Control",
      +            "Meta",
      +            "Shift"
      +          ],
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "role only: exact accessible name; may be empty.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "offset": {
      +        "additionalProperties": false,
      +        "description": "Native element only: ratios within its content quad; offscreen/covered points fail.",
      +        "properties": {
      +          "x_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x_ratio",
      +          "y_ratio"
      +        ],
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "settle_ms": {
      +        "anyOf": [
      +          {
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "additionalItems": false,
      +            "items": [
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            ],
      +            "maxItems": 2,
      +            "minItems": 2,
      +            "type": "array"
      +          }
      +        ],
      +        "description": "Pause after target preparation, before dispatch: fixed ms or uniform [min, max]."
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "fill",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "expected_value": {
      +        "description": "Explicit expected retained text after page formatting; default is text. Changes verification only, never the inserted text. No automatic numeric/date normalization or waiting for blur/async formatting.",
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "default": "native",
      +        "enum": [
      +          "native",
      +          "dom"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "role only: exact accessible name; may be empty.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "type",
      +        "type": "string"
      +      },
      +      "delay_ms": {
      +        "anyOf": [
      +          {
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "additionalItems": false,
      +            "items": [
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "maximum": 1000,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            ],
      +            "maxItems": 2,
      +            "minItems": 2,
      +            "type": "array"
      +          }
      +        ],
      +        "default": 0,
      +        "description": "Between characters: fixed ms or independently sampled uniform [min, max]."
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "focused": {
      +        "const": true,
      +        "description": "Alternative to ref/selector: pin the currently focused editable element without refocusing it. Stops if focus changes.",
      +        "type": "boolean"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "role only: exact accessible name; may be empty.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role (e.g. selector=\"link\", name=\"Claim\"), according to selector_type.",
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "hover",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "role only: exact accessible name; may be empty.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "offset": {
      +        "additionalProperties": false,
      +        "description": "Native element only: ratios within its content quad; offscreen/covered points fail.",
      +        "properties": {
      +          "x_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y_ratio": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x_ratio",
      +          "y_ratio"
      +        ],
      +        "type": "object"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "select_option",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "index": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "role only: exact accessible name; may be empty.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "value": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "scroll",
      +        "type": "string"
      +      },
      +      "delta_x": {
      +        "default": 0,
      +        "type": "number"
      +      },
      +      "delta_y": {
      +        "description": "Positive scrolls down.",
      +        "type": "number"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "max_steps": {
      +        "default": 100,
      +        "maximum": 500,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "mode": {
      +        "default": "dom",
      +        "enum": [
      +          "dom",
      +          "wheel"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "role only: exact accessible name; may be empty.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "selector": {
      +        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role (e.g. selector=\"link\", name=\"Claim\"), according to selector_type.",
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "until": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "selector": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "text": {
      +            "maxLength": 2000,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "text"
      +        ],
      +        "type": "object"
      +      },
      +      "x": {
      +        "type": "number"
      +      },
      +      "y": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "action"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "wait",
      +        "type": "string"
      +      },
      +      "condition": {
      +        "enum": [
      +          "attached",
      +          "absent",
      +          "visible",
      +          "actionable",
      +          "text",
      +          "value",
      +          "checked",
      +          "selected",
      +          "expanded",
      +          "url",
      +          "network_idle"
      +        ],
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "expected": {
      +        "anyOf": [
      +          {
      +            "maxLength": 100000,
      +            "type": "string"
      +          },
      +          {
      +            "type": "boolean"
      +          }
      +        ],
      +        "description": "text/url: substring; value: exact string; checked/selected/expanded: boolean (checked also accepts \"mixed\")."
      +      },
      +      "frame": {
      +        "additionalProperties": false,
      +        "description": "Exact child-frame URL/title or CSS iframe path (e.g. [\"#content_iframe\"]); alternative to frame_id. Each path entry uniquely selects an iframe in the preceding document.",
      +        "properties": {
      +          "path": {
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 16,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "url": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "frame_id": {
      +        "type": "string"
      +      },
      +      "idle_ms": {
      +        "default": 500,
      +        "maximum": 10000,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "name": {
      +        "description": "role only: exact accessible name; may be empty.",
      +        "maxLength": 10000,
      +        "type": "string"
      +      },
      +      "nth": {
      +        "description": "Zero-based match index: DOM order, or AX tree order for role.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "previous": {
      +        "description": "Text only: wait for full rendered innerText to differ; alternative to expected.",
      +        "maxLength": 100000,
      +        "type": "string"
      +      },
      +      "selector": {
      +        "description": "CSS/XPath query, HTML label text, exact placeholder or AX role (e.g. selector=\"link\", name=\"Claim\"), according to selector_type.",
      +        "maxLength": 10000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "description": "Default css. label matches associated HTML labels with whitespace normalized; role uses browser AX semantics.",
      +        "enum": [
      +          "css",
      +          "xpath",
      +          "label",
      +          "placeholder",
      +          "role"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "condition"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "action": {
      +        "const": "press_key",
      +        "type": "string"
      +      },
      +      "dialog_policy": {
      +        "enum": [
      +          "ask",
      +          "accept",
      +          "dismiss"
      +        ],
      +        "type": "string"
      +      },
      +      "key": {
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "maximum": 30000,
      +        "minimum": 100,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "key"
      +    ],
      +    "type": "object"
      +  }
      +]
  5. First observedv0.24.0

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden and does so well: shared deadline semantics, per-step timeouts capping remaining budget, prevalidation of all steps, stop-on-failure returning failed_step/prior results with isError, and explicit 'no rollback or automatic replay'. It omits that steps mutate live page state and says nothing about step-count limits (maxItems 30).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero filler, execution model stated first followed by validation and failure semantics. Every clause carries operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param tool taking a polymorphic array of up to 30 steps with no output schema, the description covers the failure-mode return shape (failed_step/prior results/isError) and execution budget model. Gaps remain around success-path return values and how tab_handle is obtained, which matter for first-time invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 67% schema coverage the description adds real value on timeout_ms ('shared deadline; per-step timeouts cap remaining time') and start_at ('prevalidates all steps, including skipped ones'), which the schema does not explain. However it says nothing about tab_handle (presumably from browser_claim_tab/browser_open_tab) or dialog_policy, leaving two parameters to the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

'Run ordered steps in one tab queue' states a specific verb and resource, and the batching nature implicitly distinguishes it from the single-action siblings (browser_click, browser_type, etc.). It never names those siblings explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Behavioral rules (shared deadline, prevalidation, stop-on-failure) imply batch use for multi-step flows, but there is no explicit 'use this instead of N separate calls' or 'when not to batch'. The start_at skip path is only hinted at via 'including skipped ones'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.