4561 lines
118 KiB
JSON
4561 lines
118 KiB
JSON
{
|
|
"action_sequence": {
|
|
"description": "Execute validated short gesture steps consecutively; stop at the first failure.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"ClickStep": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"action": {
|
|
"const": "click",
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"target": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
}
|
|
],
|
|
"description": "Prefer an exact observed resource_id: resolve its live bounds before tapping, refusing absent/ambiguous targets. Otherwise use [x,y] in coordinate_space; never mix screenshot pixels with normalized coordinates.",
|
|
"title": "Target"
|
|
},
|
|
"target_description": {
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"title": "Target Description",
|
|
"type": "string"
|
|
},
|
|
"coordinate_space": {
|
|
"default": "normalized",
|
|
"enum": [
|
|
"normalized",
|
|
"pixel"
|
|
],
|
|
"title": "Coordinate Space",
|
|
"type": "string"
|
|
},
|
|
"times": {
|
|
"default": 1,
|
|
"description": "Consecutive taps within this ONE member, e.g. 10 for a scale +/- button; no model turns between taps.",
|
|
"maximum": 10,
|
|
"minimum": 1,
|
|
"title": "Times",
|
|
"type": "integer"
|
|
},
|
|
"delay_ms": {
|
|
"default": 100,
|
|
"maximum": 1000,
|
|
"minimum": 0,
|
|
"title": "Delay Ms",
|
|
"type": "integer"
|
|
},
|
|
"unless_visible": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact previously observed resource_id inside a toggled panel (not the opener). Skip this opener click when that control is already visible; otherwise click. Avoid closing a still-open panel.",
|
|
"title": "Unless Visible"
|
|
}
|
|
},
|
|
"required": [
|
|
"action",
|
|
"target",
|
|
"target_description"
|
|
],
|
|
"title": "ClickStep",
|
|
"type": "object"
|
|
},
|
|
"ControlActionStep": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"action": {
|
|
"const": "control_action",
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"request": {
|
|
"$ref": "#/$defs/SequenceControlRequest"
|
|
}
|
|
},
|
|
"required": [
|
|
"action",
|
|
"request"
|
|
],
|
|
"title": "ControlActionStep",
|
|
"type": "object"
|
|
},
|
|
"ControlCondition": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"state": {
|
|
"enum": [
|
|
"checked",
|
|
"unchecked",
|
|
"selected",
|
|
"unselected",
|
|
"text",
|
|
"content_desc",
|
|
"value"
|
|
],
|
|
"title": "State",
|
|
"type": "string"
|
|
},
|
|
"expected_text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Text"
|
|
},
|
|
"expected_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Value"
|
|
},
|
|
"tolerance": {
|
|
"default": 0,
|
|
"minimum": 0,
|
|
"title": "Tolerance",
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"title": "ControlCondition",
|
|
"type": "object"
|
|
},
|
|
"ControlSelector": {
|
|
"additionalProperties": false,
|
|
"description": "Every supplied attribute is an exact AND match against a fresh native node.",
|
|
"properties": {
|
|
"resource_id": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Resource Id"
|
|
},
|
|
"text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact identity filter, NOT the text to read or wait for. Omit changing readouts; use the observed native_selector instead.",
|
|
"title": "Text"
|
|
},
|
|
"content_desc": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Content Desc"
|
|
},
|
|
"class_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Class Name"
|
|
},
|
|
"package_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Package Name"
|
|
},
|
|
"bounds": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact original Android screen PIXELS [left,top,right,bottom], only when needed to disambiguate. Never copy normalized 0..1000 UI Bounds or convert their rounded values back to pixels. Prefer the observed native_selector.",
|
|
"title": "Bounds"
|
|
}
|
|
},
|
|
"title": "ControlSelector",
|
|
"type": "object"
|
|
},
|
|
"DragCalibration": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"axis": {
|
|
"enum": [
|
|
"x",
|
|
"y"
|
|
],
|
|
"title": "Axis",
|
|
"type": "string"
|
|
},
|
|
"mode": {
|
|
"description": "thumb moves a handle to a value; pan moves a scale under a fixed indicator.",
|
|
"enum": [
|
|
"thumb",
|
|
"pan"
|
|
],
|
|
"title": "Mode",
|
|
"type": "string"
|
|
},
|
|
"anchors": {
|
|
"items": {
|
|
"$ref": "#/$defs/ScaleAnchor"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"title": "Anchors",
|
|
"type": "array"
|
|
},
|
|
"target_value": {
|
|
"title": "Target Value",
|
|
"type": "number"
|
|
},
|
|
"indicator_position": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Required for pan: the fixed indicator's observed axis position.",
|
|
"title": "Indicator Position"
|
|
},
|
|
"tolerance": {
|
|
"anyOf": [
|
|
{
|
|
"minimum": 0,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Allowed value error. Reject a plan whose pixel rounding exceeds it; this is geometric error only, not proof of application precision.",
|
|
"title": "Tolerance"
|
|
},
|
|
"min_movement_px": {
|
|
"anyOf": [
|
|
{
|
|
"exclusiveMinimum": 0,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Previously measured minimum effective drag distance in pixels. If this calibrated move is smaller, refuse input and zoom first. Never guess a device-wide threshold.",
|
|
"title": "Min Movement Px"
|
|
}
|
|
},
|
|
"required": [
|
|
"axis",
|
|
"mode",
|
|
"anchors",
|
|
"target_value"
|
|
],
|
|
"title": "DragCalibration",
|
|
"type": "object"
|
|
},
|
|
"DragStep": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"start": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"title": "Start",
|
|
"type": "array"
|
|
},
|
|
"target_description": {
|
|
"minLength": 1,
|
|
"title": "Target Description",
|
|
"type": "string"
|
|
},
|
|
"end": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact endpoint; MUST be null when calibration is supplied.",
|
|
"title": "End"
|
|
},
|
|
"coordinate_space": {
|
|
"default": "normalized",
|
|
"enum": [
|
|
"normalized",
|
|
"pixel"
|
|
],
|
|
"title": "Coordinate Space",
|
|
"type": "string"
|
|
},
|
|
"duration_ms": {
|
|
"default": 300,
|
|
"maximum": 10000,
|
|
"minimum": 1,
|
|
"title": "Duration Ms",
|
|
"type": "integer"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Observed gesture surface rectangle in coordinate_space, excluding date/navigation rails and unrelated overlays.",
|
|
"title": "Region"
|
|
},
|
|
"calibration": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/DragCalibration"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Computes the endpoint from observed anchors; then set end=null."
|
|
},
|
|
"require_visible": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact previously observed resource_id of a panel control. Check live visibility before dragging; refuse input if absent. Use for auto-hiding controls.",
|
|
"title": "Require Visible"
|
|
},
|
|
"action": {
|
|
"const": "drag",
|
|
"title": "Action",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"start",
|
|
"target_description",
|
|
"action"
|
|
],
|
|
"title": "DragStep",
|
|
"type": "object"
|
|
},
|
|
"EnsureVisibleStep": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"action": {
|
|
"const": "ensure_visible",
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"target": {
|
|
"description": "Panel control resource_id copied VERBATIM from observed elements, including the ':id/' separator. Never rewrite it as ':id:' or guess an ID.",
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"title": "Target",
|
|
"type": "string"
|
|
},
|
|
"opener": {
|
|
"description": "UI opener resource_id copied VERBATIM from observed elements, including ':id/' (not ':id:'). Tap ONCE only if target is absent; never use a business submission as an opener.",
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"title": "Opener",
|
|
"type": "string"
|
|
},
|
|
"target_description": {
|
|
"minLength": 1,
|
|
"title": "Target Description",
|
|
"type": "string"
|
|
},
|
|
"timeout_ms": {
|
|
"default": 1500,
|
|
"description": "Bounded live-UI wait AFTER opening, without extra model turns or repeated opener taps.",
|
|
"maximum": 3000,
|
|
"minimum": 100,
|
|
"title": "Timeout Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"action",
|
|
"target",
|
|
"opener",
|
|
"target_description"
|
|
],
|
|
"title": "EnsureVisibleStep",
|
|
"type": "object"
|
|
},
|
|
"PinchStep": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"center": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"title": "Center",
|
|
"type": "array"
|
|
},
|
|
"start_span": {
|
|
"exclusiveMinimum": 0,
|
|
"maximum": 20000,
|
|
"title": "Start Span",
|
|
"type": "integer"
|
|
},
|
|
"end_span": {
|
|
"exclusiveMinimum": 0,
|
|
"maximum": 20000,
|
|
"title": "End Span",
|
|
"type": "integer"
|
|
},
|
|
"angle_degrees": {
|
|
"default": 0,
|
|
"maximum": 360,
|
|
"minimum": -360,
|
|
"title": "Angle Degrees",
|
|
"type": "number"
|
|
},
|
|
"rotation_degrees": {
|
|
"default": 0,
|
|
"maximum": 360,
|
|
"minimum": -360,
|
|
"title": "Rotation Degrees",
|
|
"type": "number"
|
|
},
|
|
"duration_ms": {
|
|
"default": 800,
|
|
"maximum": 10000,
|
|
"minimum": 1,
|
|
"title": "Duration Ms",
|
|
"type": "integer"
|
|
},
|
|
"coordinate_space": {
|
|
"default": "normalized",
|
|
"enum": [
|
|
"normalized",
|
|
"pixel"
|
|
],
|
|
"title": "Coordinate Space",
|
|
"type": "string"
|
|
},
|
|
"target_description": {
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"title": "Target Description",
|
|
"type": "string"
|
|
},
|
|
"require_visible": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Require Visible"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Observed zoom surface bounds in coordinate_space; not the whole screen or date rail. Both fingers must remain inside.",
|
|
"title": "Region"
|
|
},
|
|
"action": {
|
|
"const": "pinch",
|
|
"title": "Action",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"center",
|
|
"start_span",
|
|
"end_span",
|
|
"target_description",
|
|
"action"
|
|
],
|
|
"title": "PinchStep",
|
|
"type": "object"
|
|
},
|
|
"ScaleAnchor": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"position": {
|
|
"description": "Observed axis coordinate in the selected coordinate space.",
|
|
"title": "Position",
|
|
"type": "number"
|
|
},
|
|
"value": {
|
|
"description": "Observed scale value, in one consistent numeric unit.",
|
|
"title": "Value",
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"position",
|
|
"value"
|
|
],
|
|
"title": "ScaleAnchor",
|
|
"type": "object"
|
|
},
|
|
"SequenceControlRequest": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"selector": {
|
|
"$ref": "#/$defs/ControlSelector",
|
|
"description": "Copy the current observation's native_selector object unchanged. Every supplied attribute is an exact AND filter. Do not add changing text/content_desc or normalized UI Bounds."
|
|
},
|
|
"action": {
|
|
"enum": [
|
|
"click",
|
|
"long_click",
|
|
"focus",
|
|
"show_on_screen",
|
|
"set_progress",
|
|
"scroll_forward",
|
|
"scroll_backward",
|
|
"scroll_up",
|
|
"scroll_down",
|
|
"scroll_left",
|
|
"scroll_right",
|
|
"set_selection",
|
|
"replace_selection",
|
|
"set_text",
|
|
"ime_enter"
|
|
],
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"expected_token": {
|
|
"anyOf": [
|
|
{
|
|
"pattern": "^[a-f0-9]{64}$",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Token"
|
|
},
|
|
"value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Value"
|
|
},
|
|
"text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 1024,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Text"
|
|
},
|
|
"selection_start": {
|
|
"anyOf": [
|
|
{
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Selection Start"
|
|
},
|
|
"selection_end": {
|
|
"anyOf": [
|
|
{
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Selection End"
|
|
},
|
|
"ensure_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/ControlCondition"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Desired observed state: skip an already satisfied action; otherwise write ONCE and verify by read-only polling. Never infer state from an icon or missing attributes."
|
|
},
|
|
"verify_timeout_ms": {
|
|
"default": 1500,
|
|
"maximum": 3000,
|
|
"minimum": 1,
|
|
"title": "Verify Timeout Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"selector",
|
|
"action"
|
|
],
|
|
"title": "SequenceControlRequest",
|
|
"type": "object"
|
|
},
|
|
"TouchFrame": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"at_ms": {
|
|
"maximum": 10000,
|
|
"minimum": 0,
|
|
"title": "At Ms",
|
|
"type": "integer"
|
|
},
|
|
"points": {
|
|
"items": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"type": "array"
|
|
},
|
|
"maxItems": 5,
|
|
"minItems": 1,
|
|
"title": "Points",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"at_ms",
|
|
"points"
|
|
],
|
|
"title": "TouchFrame",
|
|
"type": "object"
|
|
},
|
|
"TouchGestureStep": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"frames": {
|
|
"items": {
|
|
"$ref": "#/$defs/TouchFrame"
|
|
},
|
|
"maxItems": 32,
|
|
"minItems": 2,
|
|
"title": "Frames",
|
|
"type": "array"
|
|
},
|
|
"coordinate_space": {
|
|
"default": "normalized",
|
|
"enum": [
|
|
"normalized",
|
|
"pixel"
|
|
],
|
|
"title": "Coordinate Space",
|
|
"type": "string"
|
|
},
|
|
"target_description": {
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"title": "Target Description",
|
|
"type": "string"
|
|
},
|
|
"require_visible": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Require Visible"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Observed gesture surface bounds in coordinate_space; every finger path must stay inside it.",
|
|
"title": "Region"
|
|
},
|
|
"action": {
|
|
"const": "touch_gesture",
|
|
"title": "Action",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"frames",
|
|
"target_description",
|
|
"action"
|
|
],
|
|
"title": "TouchGestureStep",
|
|
"type": "object"
|
|
},
|
|
"ValueFeedback": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"selector": {
|
|
"$ref": "#/$defs/ControlSelector",
|
|
"description": "Unique, observed persistent value readout, not a transient drag tooltip. Copy its stable selector, excluding changing text."
|
|
},
|
|
"value_format": {
|
|
"description": "range reads native range.current; number requires an entire numeric text; clock requires exactly one HH:MM:SS in readable text and returns seconds since midnight.",
|
|
"enum": [
|
|
"range",
|
|
"number",
|
|
"clock"
|
|
],
|
|
"title": "Value Format",
|
|
"type": "string"
|
|
},
|
|
"target_value": {
|
|
"title": "Target Value",
|
|
"type": "number"
|
|
},
|
|
"tolerance": {
|
|
"minimum": 0,
|
|
"title": "Tolerance",
|
|
"type": "number"
|
|
},
|
|
"stable_ms": {
|
|
"default": 1000,
|
|
"maximum": 5000,
|
|
"minimum": 100,
|
|
"title": "Stable Ms",
|
|
"type": "integer"
|
|
},
|
|
"timeout_ms": {
|
|
"default": 3000,
|
|
"maximum": 10000,
|
|
"minimum": 200,
|
|
"title": "Timeout Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"selector",
|
|
"value_format",
|
|
"target_value",
|
|
"tolerance"
|
|
],
|
|
"title": "ValueFeedback",
|
|
"type": "object"
|
|
},
|
|
"WaitStep": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"action": {
|
|
"const": "wait",
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"time_in_ms": {
|
|
"maximum": 10000,
|
|
"minimum": 0,
|
|
"title": "Time In Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"action",
|
|
"time_in_ms"
|
|
],
|
|
"title": "WaitStep",
|
|
"type": "object"
|
|
},
|
|
"WaitUntilStep": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"selector": {
|
|
"$ref": "#/$defs/ControlSelector",
|
|
"description": "Copy the current observation's native_selector object unchanged. Every supplied attribute is an exact AND filter. Do not add changing text/content_desc or normalized UI Bounds."
|
|
},
|
|
"state": {
|
|
"enum": [
|
|
"visible",
|
|
"absent",
|
|
"enabled",
|
|
"disabled",
|
|
"checked",
|
|
"unchecked",
|
|
"selected",
|
|
"unselected",
|
|
"text",
|
|
"content_desc",
|
|
"value",
|
|
"stable"
|
|
],
|
|
"title": "State",
|
|
"type": "string"
|
|
},
|
|
"expected_text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Text"
|
|
},
|
|
"expected_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Value"
|
|
},
|
|
"tolerance": {
|
|
"default": 0,
|
|
"minimum": 0,
|
|
"title": "Tolerance",
|
|
"type": "number"
|
|
},
|
|
"stable_ms": {
|
|
"default": 300,
|
|
"maximum": 5000,
|
|
"minimum": 0,
|
|
"title": "Stable Ms",
|
|
"type": "integer"
|
|
},
|
|
"timeout_ms": {
|
|
"default": 1500,
|
|
"maximum": 3000,
|
|
"minimum": 1,
|
|
"title": "Timeout Ms",
|
|
"type": "integer"
|
|
},
|
|
"poll_interval_ms": {
|
|
"default": 200,
|
|
"maximum": 1000,
|
|
"minimum": 50,
|
|
"title": "Poll Interval Ms",
|
|
"type": "integer"
|
|
},
|
|
"action": {
|
|
"const": "wait_until",
|
|
"title": "Action",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"selector",
|
|
"state",
|
|
"action"
|
|
],
|
|
"title": "WaitUntilStep",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"steps": {
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/ClickStep"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/DragStep"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/WaitStep"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/EnsureVisibleStep"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/PinchStep"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/TouchGestureStep"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/ControlActionStep"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/WaitUntilStep"
|
|
}
|
|
]
|
|
},
|
|
"title": "Steps",
|
|
"type": "array"
|
|
},
|
|
"feedback": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/ValueFeedback"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null
|
|
}
|
|
},
|
|
"required": [
|
|
"steps"
|
|
],
|
|
"title": "action_sequenceArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"drag": {
|
|
"description": "Drag with exact coordinates or an observed two-anchor calibration.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"ControlSelector": {
|
|
"additionalProperties": false,
|
|
"description": "Every supplied attribute is an exact AND match against a fresh native node.",
|
|
"properties": {
|
|
"resource_id": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Resource Id"
|
|
},
|
|
"text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact identity filter, NOT the text to read or wait for. Omit changing readouts; use the observed native_selector instead.",
|
|
"title": "Text"
|
|
},
|
|
"content_desc": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Content Desc"
|
|
},
|
|
"class_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Class Name"
|
|
},
|
|
"package_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Package Name"
|
|
},
|
|
"bounds": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact original Android screen PIXELS [left,top,right,bottom], only when needed to disambiguate. Never copy normalized 0..1000 UI Bounds or convert their rounded values back to pixels. Prefer the observed native_selector.",
|
|
"title": "Bounds"
|
|
}
|
|
},
|
|
"title": "ControlSelector",
|
|
"type": "object"
|
|
},
|
|
"DragCalibration": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"axis": {
|
|
"enum": [
|
|
"x",
|
|
"y"
|
|
],
|
|
"title": "Axis",
|
|
"type": "string"
|
|
},
|
|
"mode": {
|
|
"description": "thumb moves a handle to a value; pan moves a scale under a fixed indicator.",
|
|
"enum": [
|
|
"thumb",
|
|
"pan"
|
|
],
|
|
"title": "Mode",
|
|
"type": "string"
|
|
},
|
|
"anchors": {
|
|
"items": {
|
|
"$ref": "#/$defs/ScaleAnchor"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"title": "Anchors",
|
|
"type": "array"
|
|
},
|
|
"target_value": {
|
|
"title": "Target Value",
|
|
"type": "number"
|
|
},
|
|
"indicator_position": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Required for pan: the fixed indicator's observed axis position.",
|
|
"title": "Indicator Position"
|
|
},
|
|
"tolerance": {
|
|
"anyOf": [
|
|
{
|
|
"minimum": 0,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Allowed value error. Reject a plan whose pixel rounding exceeds it; this is geometric error only, not proof of application precision.",
|
|
"title": "Tolerance"
|
|
},
|
|
"min_movement_px": {
|
|
"anyOf": [
|
|
{
|
|
"exclusiveMinimum": 0,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Previously measured minimum effective drag distance in pixels. If this calibrated move is smaller, refuse input and zoom first. Never guess a device-wide threshold.",
|
|
"title": "Min Movement Px"
|
|
}
|
|
},
|
|
"required": [
|
|
"axis",
|
|
"mode",
|
|
"anchors",
|
|
"target_value"
|
|
],
|
|
"title": "DragCalibration",
|
|
"type": "object"
|
|
},
|
|
"ScaleAnchor": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"position": {
|
|
"description": "Observed axis coordinate in the selected coordinate space.",
|
|
"title": "Position",
|
|
"type": "number"
|
|
},
|
|
"value": {
|
|
"description": "Observed scale value, in one consistent numeric unit.",
|
|
"title": "Value",
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"position",
|
|
"value"
|
|
],
|
|
"title": "ScaleAnchor",
|
|
"type": "object"
|
|
},
|
|
"ValueFeedback": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"selector": {
|
|
"$ref": "#/$defs/ControlSelector",
|
|
"description": "Unique, observed persistent value readout, not a transient drag tooltip. Copy its stable selector, excluding changing text."
|
|
},
|
|
"value_format": {
|
|
"description": "range reads native range.current; number requires an entire numeric text; clock requires exactly one HH:MM:SS in readable text and returns seconds since midnight.",
|
|
"enum": [
|
|
"range",
|
|
"number",
|
|
"clock"
|
|
],
|
|
"title": "Value Format",
|
|
"type": "string"
|
|
},
|
|
"target_value": {
|
|
"title": "Target Value",
|
|
"type": "number"
|
|
},
|
|
"tolerance": {
|
|
"minimum": 0,
|
|
"title": "Tolerance",
|
|
"type": "number"
|
|
},
|
|
"stable_ms": {
|
|
"default": 1000,
|
|
"maximum": 5000,
|
|
"minimum": 100,
|
|
"title": "Stable Ms",
|
|
"type": "integer"
|
|
},
|
|
"timeout_ms": {
|
|
"default": 3000,
|
|
"maximum": 10000,
|
|
"minimum": 200,
|
|
"title": "Timeout Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"selector",
|
|
"value_format",
|
|
"target_value",
|
|
"tolerance"
|
|
],
|
|
"title": "ValueFeedback",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"start": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"title": "Start",
|
|
"type": "array"
|
|
},
|
|
"target_description": {
|
|
"title": "Target Description",
|
|
"type": "string"
|
|
},
|
|
"end": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "End"
|
|
},
|
|
"coordinate_space": {
|
|
"default": "normalized",
|
|
"enum": [
|
|
"normalized",
|
|
"pixel"
|
|
],
|
|
"title": "Coordinate Space",
|
|
"type": "string"
|
|
},
|
|
"duration_ms": {
|
|
"default": 300,
|
|
"title": "Duration Ms",
|
|
"type": "integer"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Region"
|
|
},
|
|
"feedback": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/ValueFeedback"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"calibration": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/DragCalibration"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"require_visible": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Require Visible"
|
|
}
|
|
},
|
|
"required": [
|
|
"start",
|
|
"target_description"
|
|
],
|
|
"title": "dragArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"click": {
|
|
"description": "Tap at a 0-1000 normalized [x, y] coordinate.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"target": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"title": "Target",
|
|
"type": "array"
|
|
},
|
|
"times": {
|
|
"default": 1,
|
|
"title": "Times",
|
|
"type": "integer"
|
|
},
|
|
"delay_ms": {
|
|
"default": 100,
|
|
"title": "Delay Ms",
|
|
"type": "integer"
|
|
},
|
|
"expected_resource_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Resource Id"
|
|
}
|
|
},
|
|
"required": [
|
|
"target"
|
|
],
|
|
"title": "clickArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"click_sequence": {
|
|
"description": "Tap a series of 0-1000 normalized [x, y] points in one atomic burst.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"sequence": {
|
|
"items": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"title": "Sequence",
|
|
"type": "array"
|
|
},
|
|
"delay_ms": {
|
|
"default": 50,
|
|
"title": "Delay Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"sequence"
|
|
],
|
|
"title": "click_sequenceArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"long_press": {
|
|
"description": "Long-press at a 0-1000 normalized [x, y] coordinate.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"target": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"title": "Target",
|
|
"type": "array"
|
|
},
|
|
"duration_ms": {
|
|
"default": 1000,
|
|
"title": "Duration Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"target"
|
|
],
|
|
"title": "long_pressArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"input_text": {
|
|
"description": "Type text, optionally focusing a 0-1000 normalized [x, y] target first.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"text": {
|
|
"title": "Text",
|
|
"type": "string"
|
|
},
|
|
"target": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Target"
|
|
},
|
|
"clear_exist": {
|
|
"default": true,
|
|
"title": "Clear Exist",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"text"
|
|
],
|
|
"title": "input_textArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"swipe": {
|
|
"description": "Swipe between two 0-1000 normalized [x, y] points.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"start": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"title": "Start",
|
|
"type": "array"
|
|
},
|
|
"end": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"title": "End",
|
|
"type": "array"
|
|
},
|
|
"duration_ms": {
|
|
"default": 800,
|
|
"title": "Duration Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"start",
|
|
"end"
|
|
],
|
|
"title": "swipeArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"press_key": {
|
|
"description": "Press a device key (home, back, enter, delete, tab, search, menu, app_switch).",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"key": {
|
|
"title": "Key",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"key"
|
|
],
|
|
"title": "press_keyArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"manage_app": {
|
|
"description": "Launch or stop an app by human-readable name or package.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"app_name": {
|
|
"title": "App Name",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"action",
|
|
"app_name"
|
|
],
|
|
"title": "manage_appArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"wait_for_delay": {
|
|
"description": "Wait for a fixed number of milliseconds.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"time_in_ms": {
|
|
"title": "Time In Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"time_in_ms"
|
|
],
|
|
"title": "wait_for_delayArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"wait_for_text": {
|
|
"description": "Wait for text to appear on or disappear from the screen.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"text": {
|
|
"title": "Text",
|
|
"type": "string"
|
|
},
|
|
"wait_state": {
|
|
"default": "appear",
|
|
"title": "Wait State",
|
|
"type": "string"
|
|
},
|
|
"timeout_ms": {
|
|
"default": 5000,
|
|
"title": "Timeout Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"text"
|
|
],
|
|
"title": "wait_for_textArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"open_link": {
|
|
"description": "Open a URL on the device.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"url": {
|
|
"title": "Url",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"url"
|
|
],
|
|
"title": "open_linkArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"erase_one_char": {
|
|
"description": "Erase a single character in the focused field.",
|
|
"inputSchema": {
|
|
"properties": {},
|
|
"title": "erase_one_charArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"focus_and_clear_text": {
|
|
"description": "Focus the field at a 0-1000 normalized [x, y] and clear its text.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"target": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"title": "Target",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"target"
|
|
],
|
|
"title": "focus_and_clear_textArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"pinch": {
|
|
"description": "[ACTION] Synchronized two-finger pinch/rotation on an observed canvas. center and spans use coordinate_space: pixel is current screenshot pixels; normalized is 0..1000, with spans measured against the SHORT screen edge to preserve angles. angle_degrees starts from the horizontal axis, positive clockwise; rotation_degrees adds rotation. All paths are validated before input; off-screen paths fail without clamping. The span ratio is a gesture instruction, not proof of the app's resulting scale. Small spans may stay below the app's recognition threshold; choose a sufficiently large safe span inside the observed canvas and read the actual post-action ticks/value before recalibrating a precise drag.",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"center": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"title": "Center",
|
|
"type": "array"
|
|
},
|
|
"start_span": {
|
|
"exclusiveMinimum": 0,
|
|
"maximum": 20000,
|
|
"title": "Start Span",
|
|
"type": "integer"
|
|
},
|
|
"end_span": {
|
|
"exclusiveMinimum": 0,
|
|
"maximum": 20000,
|
|
"title": "End Span",
|
|
"type": "integer"
|
|
},
|
|
"target_description": {
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"title": "Target Description",
|
|
"type": "string"
|
|
},
|
|
"angle_degrees": {
|
|
"default": 0,
|
|
"maximum": 360,
|
|
"minimum": -360,
|
|
"title": "Angle Degrees",
|
|
"type": "number"
|
|
},
|
|
"rotation_degrees": {
|
|
"default": 0,
|
|
"maximum": 360,
|
|
"minimum": -360,
|
|
"title": "Rotation Degrees",
|
|
"type": "number"
|
|
},
|
|
"duration_ms": {
|
|
"default": 800,
|
|
"maximum": 10000,
|
|
"minimum": 1,
|
|
"title": "Duration Ms",
|
|
"type": "integer"
|
|
},
|
|
"coordinate_space": {
|
|
"default": "normalized",
|
|
"enum": [
|
|
"normalized",
|
|
"pixel"
|
|
],
|
|
"title": "Coordinate Space",
|
|
"type": "string"
|
|
},
|
|
"require_visible": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Require Visible"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Region"
|
|
}
|
|
},
|
|
"required": [
|
|
"center",
|
|
"start_span",
|
|
"end_span",
|
|
"target_description"
|
|
],
|
|
"title": "pinchArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"touch_gesture": {
|
|
"description": "[ACTION] Continuous synchronized native touch paths with 1..5 fingers. frames contain at_ms and points; times strictly increase from 0 to at most 10000ms, same finger count in every frame. Equal adjacent points hold contact; later points move WITHOUT lifting, enabling hold-then-drag and multi-segment gestures. Use 2..32 frames, observed geometry and explicit coordinate_space. All frames are validated before input. Completion reports Android gesture dispatch; verify that the app actually received the input and produced the intended effect.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"TouchFrame": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"at_ms": {
|
|
"maximum": 10000,
|
|
"minimum": 0,
|
|
"title": "At Ms",
|
|
"type": "integer"
|
|
},
|
|
"points": {
|
|
"items": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"type": "array"
|
|
},
|
|
"maxItems": 5,
|
|
"minItems": 1,
|
|
"title": "Points",
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"at_ms",
|
|
"points"
|
|
],
|
|
"title": "TouchFrame",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"frames": {
|
|
"items": {
|
|
"$ref": "#/$defs/TouchFrame"
|
|
},
|
|
"maxItems": 32,
|
|
"minItems": 2,
|
|
"title": "Frames",
|
|
"type": "array"
|
|
},
|
|
"target_description": {
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"title": "Target Description",
|
|
"type": "string"
|
|
},
|
|
"coordinate_space": {
|
|
"default": "normalized",
|
|
"enum": [
|
|
"normalized",
|
|
"pixel"
|
|
],
|
|
"title": "Coordinate Space",
|
|
"type": "string"
|
|
},
|
|
"require_visible": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Require Visible"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Region"
|
|
}
|
|
},
|
|
"required": [
|
|
"frames",
|
|
"target_description"
|
|
],
|
|
"title": "touch_gestureArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"read_control": {
|
|
"description": "[OBSERVE] Read ONE live native control by exact AND selector copied from the current UI. Copy its native_selector object unchanged; it uses stable identity and original pixel bounds only when needed to disambiguate. UI Bounds are normalized 0..1000 and MUST NOT be used as selector.bounds (exact Android pixels); rounded UI bounds cannot be converted back exactly. Do not add the changing text/content_desc you want to read or wait for as an identity filter. Returns current range/value, supported native actions, editable selection (UTF-16 offsets), identity token and visible subtree content_signature. Missing or ambiguous controls fail explicitly. On NOT_FOUND refresh the UI and selector; it does not prove that native reading is unavailable. Custom canvas controls may expose no range/actions; then use calibrated gestures and visual verification.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"ControlSelector": {
|
|
"additionalProperties": false,
|
|
"description": "Every supplied attribute is an exact AND match against a fresh native node.",
|
|
"properties": {
|
|
"resource_id": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Resource Id"
|
|
},
|
|
"text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact identity filter, NOT the text to read or wait for. Omit changing readouts; use the observed native_selector instead.",
|
|
"title": "Text"
|
|
},
|
|
"content_desc": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Content Desc"
|
|
},
|
|
"class_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Class Name"
|
|
},
|
|
"package_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Package Name"
|
|
},
|
|
"bounds": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact original Android screen PIXELS [left,top,right,bottom], only when needed to disambiguate. Never copy normalized 0..1000 UI Bounds or convert their rounded values back to pixels. Prefer the observed native_selector.",
|
|
"title": "Bounds"
|
|
}
|
|
},
|
|
"title": "ControlSelector",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"selector": {
|
|
"$ref": "#/$defs/ControlSelector"
|
|
}
|
|
},
|
|
"required": [
|
|
"selector"
|
|
],
|
|
"title": "read_controlArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"control_action": {
|
|
"description": "[ACTION] Perform ONE supported native action on a freshly resolved unique control. Read_control first; copy selector exactly and optionally expected_token to reject stale evidence. For a desired state use ensure_state (checked/selected/text/content_desc/value), then verify_timeout_ms: skip an already satisfied state, otherwise write ONCE and poll read-only. Copy observed state semantics; do not assume selected means paused. Bind a stable selector excluding text/content_desc that the action changes. A failed postcondition does not undo the completed input and must not cause an automatic second toggle. action=set_progress requires a finite in-range value; set_selection requires selection_start/end in UTF-16 code units (never split an emoji). set_text and replace_selection require text, including empty text; whitespace is preserved. Other actions take no text/value/selection. ime_enter invokes the advertised IME submit action. Unsupported actions fail without coordinate fallback or replay. Focus or selection changes may move the target; before subsequent edits, use wait_until state=stable when needed. STALE means no action started; observe again before rebuilding the request. Never resend an unknown write. An accepted action is not business verification; inspect the returned/current state.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"ControlCondition": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"state": {
|
|
"enum": [
|
|
"checked",
|
|
"unchecked",
|
|
"selected",
|
|
"unselected",
|
|
"text",
|
|
"content_desc",
|
|
"value"
|
|
],
|
|
"title": "State",
|
|
"type": "string"
|
|
},
|
|
"expected_text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Text"
|
|
},
|
|
"expected_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Value"
|
|
},
|
|
"tolerance": {
|
|
"default": 0,
|
|
"minimum": 0,
|
|
"title": "Tolerance",
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"title": "ControlCondition",
|
|
"type": "object"
|
|
},
|
|
"ControlSelector": {
|
|
"additionalProperties": false,
|
|
"description": "Every supplied attribute is an exact AND match against a fresh native node.",
|
|
"properties": {
|
|
"resource_id": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Resource Id"
|
|
},
|
|
"text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact identity filter, NOT the text to read or wait for. Omit changing readouts; use the observed native_selector instead.",
|
|
"title": "Text"
|
|
},
|
|
"content_desc": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Content Desc"
|
|
},
|
|
"class_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Class Name"
|
|
},
|
|
"package_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Package Name"
|
|
},
|
|
"bounds": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact original Android screen PIXELS [left,top,right,bottom], only when needed to disambiguate. Never copy normalized 0..1000 UI Bounds or convert their rounded values back to pixels. Prefer the observed native_selector.",
|
|
"title": "Bounds"
|
|
}
|
|
},
|
|
"title": "ControlSelector",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"selector": {
|
|
"$ref": "#/$defs/ControlSelector"
|
|
},
|
|
"action": {
|
|
"enum": [
|
|
"click",
|
|
"long_click",
|
|
"focus",
|
|
"show_on_screen",
|
|
"set_progress",
|
|
"scroll_forward",
|
|
"scroll_backward",
|
|
"scroll_up",
|
|
"scroll_down",
|
|
"scroll_left",
|
|
"scroll_right",
|
|
"set_selection",
|
|
"replace_selection",
|
|
"set_text",
|
|
"ime_enter"
|
|
],
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"expected_token": {
|
|
"anyOf": [
|
|
{
|
|
"pattern": "^[a-f0-9]{64}$",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Token"
|
|
},
|
|
"value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Value"
|
|
},
|
|
"text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 65536,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Text"
|
|
},
|
|
"selection_start": {
|
|
"anyOf": [
|
|
{
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Selection Start"
|
|
},
|
|
"selection_end": {
|
|
"anyOf": [
|
|
{
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Selection End"
|
|
},
|
|
"ensure_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/ControlCondition"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"verify_timeout_ms": {
|
|
"default": 1500,
|
|
"maximum": 3000,
|
|
"minimum": 1,
|
|
"title": "Verify Timeout Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"selector",
|
|
"action"
|
|
],
|
|
"title": "control_actionArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"wait_until": {
|
|
"description": "[OBSERVE] Bounded polling of a unique live native control, replacing blind delays. state=text requires exact expected_text; value requires expected_value and optional tolerance. stable requires at least two unchanged native observations for stable_ms, not pixel stability. Other states inspect visible/enabled/checked/selected or absence. Ambiguity, unavailable page or transport failure never counts as absence. timeout_ms is at most 30000; no input is dispatched.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"ControlSelector": {
|
|
"additionalProperties": false,
|
|
"description": "Every supplied attribute is an exact AND match against a fresh native node.",
|
|
"properties": {
|
|
"resource_id": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Resource Id"
|
|
},
|
|
"text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact identity filter, NOT the text to read or wait for. Omit changing readouts; use the observed native_selector instead.",
|
|
"title": "Text"
|
|
},
|
|
"content_desc": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Content Desc"
|
|
},
|
|
"class_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Class Name"
|
|
},
|
|
"package_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Package Name"
|
|
},
|
|
"bounds": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact original Android screen PIXELS [left,top,right,bottom], only when needed to disambiguate. Never copy normalized 0..1000 UI Bounds or convert their rounded values back to pixels. Prefer the observed native_selector.",
|
|
"title": "Bounds"
|
|
}
|
|
},
|
|
"title": "ControlSelector",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"selector": {
|
|
"$ref": "#/$defs/ControlSelector"
|
|
},
|
|
"state": {
|
|
"enum": [
|
|
"visible",
|
|
"absent",
|
|
"enabled",
|
|
"disabled",
|
|
"checked",
|
|
"unchecked",
|
|
"selected",
|
|
"unselected",
|
|
"text",
|
|
"content_desc",
|
|
"value",
|
|
"stable"
|
|
],
|
|
"title": "State",
|
|
"type": "string"
|
|
},
|
|
"expected_text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Text"
|
|
},
|
|
"expected_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Expected Value"
|
|
},
|
|
"tolerance": {
|
|
"default": 0,
|
|
"minimum": 0,
|
|
"title": "Tolerance",
|
|
"type": "number"
|
|
},
|
|
"stable_ms": {
|
|
"default": 300,
|
|
"maximum": 5000,
|
|
"minimum": 0,
|
|
"title": "Stable Ms",
|
|
"type": "integer"
|
|
},
|
|
"timeout_ms": {
|
|
"default": 5000,
|
|
"maximum": 30000,
|
|
"minimum": 1,
|
|
"title": "Timeout Ms",
|
|
"type": "integer"
|
|
},
|
|
"poll_interval_ms": {
|
|
"default": 200,
|
|
"maximum": 1000,
|
|
"minimum": 50,
|
|
"title": "Poll Interval Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"selector",
|
|
"state"
|
|
],
|
|
"title": "wait_untilArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"scroll_to": {
|
|
"description": "[ACTION] Bounded native scrolling INSIDE a uniquely observed container until its scoped target becomes visible. Copy exact container and target selectors; direction is forward/backward/up/down/left/right. After each scroll, container content and the scoped target's visibility/identity must remain unchanged for settle_ms before success or another scroll. Stops at max_scrolls, timeout, unsupported action or no content progress. Retains every scroll receipt and never repeats unacknowledged input. Finding a target does not click it or verify a business outcome.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"ControlSelector": {
|
|
"additionalProperties": false,
|
|
"description": "Every supplied attribute is an exact AND match against a fresh native node.",
|
|
"properties": {
|
|
"resource_id": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Resource Id"
|
|
},
|
|
"text": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 4096,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact identity filter, NOT the text to read or wait for. Omit changing readouts; use the observed native_selector instead.",
|
|
"title": "Text"
|
|
},
|
|
"content_desc": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Content Desc"
|
|
},
|
|
"class_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Class Name"
|
|
},
|
|
"package_name": {
|
|
"anyOf": [
|
|
{
|
|
"maxLength": 512,
|
|
"minLength": 1,
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Package Name"
|
|
},
|
|
"bounds": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"maxItems": 4,
|
|
"minItems": 4,
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Exact original Android screen PIXELS [left,top,right,bottom], only when needed to disambiguate. Never copy normalized 0..1000 UI Bounds or convert their rounded values back to pixels. Prefer the observed native_selector.",
|
|
"title": "Bounds"
|
|
}
|
|
},
|
|
"title": "ControlSelector",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"container": {
|
|
"$ref": "#/$defs/ControlSelector"
|
|
},
|
|
"target": {
|
|
"$ref": "#/$defs/ControlSelector"
|
|
},
|
|
"direction": {
|
|
"default": "forward",
|
|
"enum": [
|
|
"forward",
|
|
"backward",
|
|
"up",
|
|
"down",
|
|
"left",
|
|
"right"
|
|
],
|
|
"title": "Direction",
|
|
"type": "string"
|
|
},
|
|
"max_scrolls": {
|
|
"default": 10,
|
|
"maximum": 20,
|
|
"minimum": 1,
|
|
"title": "Max Scrolls",
|
|
"type": "integer"
|
|
},
|
|
"timeout_ms": {
|
|
"default": 10000,
|
|
"maximum": 30000,
|
|
"minimum": 1,
|
|
"title": "Timeout Ms",
|
|
"type": "integer"
|
|
},
|
|
"settle_ms": {
|
|
"default": 300,
|
|
"maximum": 3000,
|
|
"minimum": 50,
|
|
"title": "Settle Ms",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"container",
|
|
"target"
|
|
],
|
|
"title": "scroll_toArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Outcome of one device action, independent of any transport or agent.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode"
|
|
},
|
|
"action": {
|
|
"title": "Action",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Detail"
|
|
},
|
|
"normalized_coordinates": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Normalized Coordinates"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Duration Ms"
|
|
},
|
|
"metadata": {
|
|
"additionalProperties": true,
|
|
"title": "Metadata",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok",
|
|
"code",
|
|
"action",
|
|
"message"
|
|
],
|
|
"title": "ActionResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"observe_screen": {
|
|
"description": "Capture and index the current screen (adapter-internal).",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"settle_ms": {
|
|
"default": 400,
|
|
"title": "Settle Ms",
|
|
"type": "integer"
|
|
},
|
|
"include_image": {
|
|
"default": false,
|
|
"title": "Include Image",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"title": "observe_screenArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": {
|
|
"$defs": {
|
|
"ActionCode": {
|
|
"description": "Machine-readable outcome classification for a device action.",
|
|
"enum": [
|
|
"OK",
|
|
"INVALID_ARGS",
|
|
"TARGET_NOT_FOUND",
|
|
"DEVICE_ERROR",
|
|
"PACKAGE_NOT_FOUND",
|
|
"TIMEOUT",
|
|
"UNSUPPORTED"
|
|
],
|
|
"title": "ActionCode",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"description": "Post-action observation: persisted screenshot plus the parsed element list.",
|
|
"properties": {
|
|
"ok": {
|
|
"title": "Ok",
|
|
"type": "boolean"
|
|
},
|
|
"code": {
|
|
"$ref": "#/$defs/ActionCode",
|
|
"default": "OK"
|
|
},
|
|
"message": {
|
|
"default": "",
|
|
"title": "Message",
|
|
"type": "string"
|
|
},
|
|
"screenshot_path": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Screenshot Path"
|
|
},
|
|
"image_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Image Name"
|
|
},
|
|
"width": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Width"
|
|
},
|
|
"height": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Height"
|
|
},
|
|
"elements_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Elements Text"
|
|
},
|
|
"elements": {
|
|
"items": {
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
"title": "Elements",
|
|
"type": "array"
|
|
},
|
|
"hierarchy_ok": {
|
|
"default": true,
|
|
"title": "Hierarchy Ok",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok"
|
|
],
|
|
"title": "ObserveResult",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"take_screenshot": {
|
|
"description": "Return the current screen as base64 (adapter-internal, no persistence).",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"timeout_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Timeout Ms"
|
|
}
|
|
},
|
|
"title": "take_screenshotArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": null
|
|
},
|
|
"get_ui_hierarchy": {
|
|
"description": "Return the raw UI element hierarchy (adapter-internal).",
|
|
"inputSchema": {
|
|
"properties": {
|
|
"timeout_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"title": "Timeout Ms"
|
|
}
|
|
},
|
|
"title": "get_ui_hierarchyArguments",
|
|
"type": "object"
|
|
},
|
|
"outputSchema": null
|
|
}
|
|
}
|