@kaeawc/auto-mobile 0.0.39 → 0.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +3 -3
  2. package/README.md.backup +3 -3
  3. package/dist/schemas/test-plan.schema.json +6 -2
  4. package/dist/schemas/tool-definitions.json +2816 -671
  5. package/dist/src/db/eventTables.ts +8 -0
  6. package/dist/src/db/migrations/2025_12_28_000_initial_schema.ts +3 -3
  7. package/dist/src/db/migrations/2025_12_30_000_performance_thresholds.ts +3 -3
  8. package/dist/src/db/migrations/2025_12_30_001_navigation_graph.ts +9 -9
  9. package/dist/src/db/migrations/2025_12_31_000_accessibility_baselines.ts +3 -3
  10. package/dist/src/db/migrations/2025_12_31_001_memory_audit.ts +4 -4
  11. package/dist/src/db/migrations/2026_01_01_000_recomposition_metrics.ts +2 -2
  12. package/dist/src/db/migrations/2026_01_02_000_prediction_history.ts +4 -4
  13. package/dist/src/db/migrations/2026_01_03_000_feature_flags.ts +3 -3
  14. package/dist/src/db/migrations/2026_01_03_000_test_executions.ts +2 -2
  15. package/dist/src/db/migrations/2026_01_05_000_tool_calls.ts +2 -2
  16. package/dist/src/db/migrations/2026_01_08_000_test_coverage.ts +4 -4
  17. package/dist/src/db/migrations/2026_01_09_000_video_recordings.ts +3 -3
  18. package/dist/src/db/migrations/2026_01_10_000_device_snapshots.ts +3 -3
  19. package/dist/src/db/migrations/2026_01_14_000_appearance_config.ts +3 -3
  20. package/dist/src/db/migrations/2026_01_25_001_test_run_details.ts +2 -2
  21. package/dist/src/db/migrations/2026_01_27_000_crash_anr_monitoring.ts +2 -2
  22. package/dist/src/db/migrations/2026_01_27_000_failures.ts +7 -7
  23. package/dist/src/db/migrations/2026_01_29_000_named_nodes.ts +3 -3
  24. package/dist/src/db/migrations/2026_01_30_000_performance_live_metrics.ts +1 -1
  25. package/dist/src/db/migrations/2026_03_15_000_telemetry_events.ts +5 -5
  26. package/dist/src/db/migrations/2026_03_18_000_navigation_events.ts +2 -2
  27. package/dist/src/db/migrations/2026_03_19_000_storage_events.ts +2 -2
  28. package/dist/src/db/migrations/2026_03_19_001_layout_events.ts +2 -2
  29. package/dist/src/db/migrations/2026_04_01_000_drop_custom_events.ts +2 -2
  30. package/dist/src/db/migrations/2026_04_02_000_device_sessions.ts +3 -3
  31. package/dist/src/db/migrations/2026_07_01_000_failure_groups_signature_unique.ts +162 -0
  32. package/dist/src/db/migrations/2026_07_02_000_event_composite_indexes.ts +62 -0
  33. package/dist/src/db/migrations/2026_07_03_000_drop_redundant_device_indexes.ts +66 -0
  34. package/dist/src/db/migrations/2026_07_03_000_repair_datetime_now_defaults.ts +268 -0
  35. package/dist/src/db/migrations/2026_07_04_000_storage_events_key_lookup.ts +60 -0
  36. package/dist/src/db/migrations/2026_07_05_000_repair_updated_at_defaults.ts +242 -0
  37. package/dist/src/index.js +534 -377
  38. package/dist/src/index.js.map +1 -1
  39. package/dist/vendor/libwebp/COPYING +30 -0
  40. package/dist/vendor/libwebp/PATENTS +23 -0
  41. package/dist/vendor/libwebp/README.md +13 -0
  42. package/dist/vendor/libwebp/README.upstream.md +54 -0
  43. package/dist/vendor/libwebp/win32-x64/cwebp.exe +0 -0
  44. package/dist/vendor/libwebp/win32-x64/dwebp.exe +0 -0
  45. package/package.json +12 -9
  46. package/schemas/test-plan.schema.json +6 -2
  47. package/schemas/tool-definitions.json +2816 -671
@@ -132,34 +132,22 @@
132
132
  "type": "object",
133
133
  "properties": {
134
134
  "left": {
135
- "type": "integer",
136
- "minimum": -9007199254740991,
137
- "maximum": 9007199254740991
135
+ "type": "number"
138
136
  },
139
137
  "top": {
140
- "type": "integer",
141
- "minimum": -9007199254740991,
142
- "maximum": 9007199254740991
138
+ "type": "number"
143
139
  },
144
140
  "right": {
145
- "type": "integer",
146
- "minimum": -9007199254740991,
147
- "maximum": 9007199254740991
141
+ "type": "number"
148
142
  },
149
143
  "bottom": {
150
- "type": "integer",
151
- "minimum": -9007199254740991,
152
- "maximum": 9007199254740991
144
+ "type": "number"
153
145
  },
154
146
  "centerX": {
155
- "type": "integer",
156
- "minimum": -9007199254740991,
157
- "maximum": 9007199254740991
147
+ "type": "number"
158
148
  },
159
149
  "centerY": {
160
- "type": "integer",
161
- "minimum": -9007199254740991,
162
- "maximum": 9007199254740991
150
+ "type": "number"
163
151
  }
164
152
  },
165
153
  "required": [
@@ -168,7 +156,8 @@
168
156
  "right",
169
157
  "bottom"
170
158
  ],
171
- "additionalProperties": false
159
+ "additionalProperties": false,
160
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
172
161
  },
173
162
  "text": {
174
163
  "type": "string"
@@ -176,9 +165,21 @@
176
165
  "resource-id": {
177
166
  "type": "string"
178
167
  },
168
+ "view-id": {
169
+ "type": "string"
170
+ },
179
171
  "content-desc": {
180
172
  "type": "string"
181
173
  },
174
+ "occlusionState": {
175
+ "type": "string"
176
+ },
177
+ "occludedBy": {
178
+ "type": "string"
179
+ },
180
+ "occludedByViewId": {
181
+ "type": "string"
182
+ },
182
183
  "class": {
183
184
  "type": "string"
184
185
  },
@@ -460,6 +461,11 @@
460
461
  "ios"
461
462
  ]
462
463
  },
464
+ "appId": {
465
+ "description": "Android app package for locale changes",
466
+ "type": "string",
467
+ "minLength": 1
468
+ },
463
469
  "locale": {
464
470
  "description": "Locale tag (e.g., ar-SA, ja-JP)",
465
471
  "type": "string",
@@ -514,7 +520,23 @@
514
520
  "required": [
515
521
  "platform"
516
522
  ],
517
- "additionalProperties": false
523
+ "additionalProperties": false,
524
+ "if": {
525
+ "properties": {
526
+ "platform": {
527
+ "const": "android"
528
+ }
529
+ },
530
+ "required": [
531
+ "platform",
532
+ "locale"
533
+ ]
534
+ },
535
+ "then": {
536
+ "required": [
537
+ "appId"
538
+ ]
539
+ }
518
540
  }
519
541
  },
520
542
  {
@@ -968,14 +990,6 @@
968
990
  "ios": {
969
991
  "description": "Run iOS-specific checks only",
970
992
  "type": "boolean"
971
- },
972
- "installCmdlineTools": {
973
- "description": "Install missing Android SDK cmdline tools",
974
- "type": "boolean"
975
- },
976
- "installXcodeCommandLineTools": {
977
- "description": "Install Xcode Command Line Tools if missing",
978
- "type": "boolean"
979
993
  }
980
994
  },
981
995
  "additionalProperties": false
@@ -1734,6 +1748,64 @@
1734
1748
  "additionalProperties": false
1735
1749
  }
1736
1750
  },
1751
+ {
1752
+ "name": "getPreference",
1753
+ "description": "Read an Android system property, Android SharedPreferences key, or iOS UserDefaults key.",
1754
+ "inputSchema": {
1755
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1756
+ "type": "object",
1757
+ "properties": {
1758
+ "scope": {
1759
+ "type": "string",
1760
+ "enum": [
1761
+ "systemProperty",
1762
+ "sharedPreferences",
1763
+ "userDefaults"
1764
+ ],
1765
+ "description": "Preference scope"
1766
+ },
1767
+ "appId": {
1768
+ "description": "App package or bundle id",
1769
+ "type": "string"
1770
+ },
1771
+ "suite": {
1772
+ "description": "SharedPreferences file name or UserDefaults suite/app group",
1773
+ "type": "string"
1774
+ },
1775
+ "key": {
1776
+ "type": "string",
1777
+ "minLength": 1,
1778
+ "description": "Preference key or Android system property name"
1779
+ },
1780
+ "platform": {
1781
+ "type": "string",
1782
+ "enum": [
1783
+ "android",
1784
+ "ios"
1785
+ ]
1786
+ },
1787
+ "sessionUuid": {
1788
+ "description": "Session",
1789
+ "type": "string"
1790
+ },
1791
+ "keepScreenAwake": {
1792
+ "type": "boolean"
1793
+ },
1794
+ "device": {
1795
+ "description": "Device label",
1796
+ "type": "string"
1797
+ },
1798
+ "deviceId": {
1799
+ "type": "string"
1800
+ }
1801
+ },
1802
+ "required": [
1803
+ "scope",
1804
+ "key"
1805
+ ],
1806
+ "additionalProperties": false
1807
+ }
1808
+ },
1737
1809
  {
1738
1810
  "name": "highlight",
1739
1811
  "description": "Draw a visual highlight around a UI element.",
@@ -3078,9 +3150,109 @@
3078
3150
  {
3079
3151
  "type": "object",
3080
3152
  "properties": {
3153
+ "textAny": {
3154
+ "minItems": 1,
3155
+ "type": "array",
3156
+ "items": {
3157
+ "type": "string",
3158
+ "minLength": 1
3159
+ },
3160
+ "description": "Ordered text variants; first visible match wins"
3161
+ },
3081
3162
  "elementId": {
3082
- "type": "string",
3083
- "description": "Element resource ID / accessibility identifier"
3163
+ "not": {}
3164
+ },
3165
+ "text": {
3166
+ "not": {}
3167
+ },
3168
+ "className": {
3169
+ "not": {}
3170
+ },
3171
+ "contentDescription": {
3172
+ "not": {}
3173
+ },
3174
+ "matchType": {
3175
+ "not": {}
3176
+ },
3177
+ "textMatch": {
3178
+ "not": {}
3179
+ },
3180
+ "activeWindow": {
3181
+ "description": "Foreground app/window predicates",
3182
+ "allOf": [
3183
+ {
3184
+ "type": "object",
3185
+ "properties": {
3186
+ "appId": {
3187
+ "description": "Foreground app bundle ID / package name",
3188
+ "type": "string"
3189
+ },
3190
+ "packageName": {
3191
+ "type": "string"
3192
+ },
3193
+ "bundleId": {
3194
+ "type": "string"
3195
+ },
3196
+ "activityName": {
3197
+ "description": "Foreground Android activity name",
3198
+ "type": "string"
3199
+ }
3200
+ },
3201
+ "additionalProperties": false
3202
+ },
3203
+ {
3204
+ "anyOf": [
3205
+ {
3206
+ "type": "object",
3207
+ "properties": {
3208
+ "appId": {
3209
+ "type": "string"
3210
+ }
3211
+ },
3212
+ "required": [
3213
+ "appId"
3214
+ ],
3215
+ "additionalProperties": {}
3216
+ },
3217
+ {
3218
+ "type": "object",
3219
+ "properties": {
3220
+ "packageName": {
3221
+ "type": "string"
3222
+ }
3223
+ },
3224
+ "required": [
3225
+ "packageName"
3226
+ ],
3227
+ "additionalProperties": {}
3228
+ },
3229
+ {
3230
+ "type": "object",
3231
+ "properties": {
3232
+ "bundleId": {
3233
+ "type": "string"
3234
+ }
3235
+ },
3236
+ "required": [
3237
+ "bundleId"
3238
+ ],
3239
+ "additionalProperties": {}
3240
+ },
3241
+ {
3242
+ "type": "object",
3243
+ "properties": {
3244
+ "activityName": {
3245
+ "type": "string"
3246
+ }
3247
+ },
3248
+ "required": [
3249
+ "activityName"
3250
+ ],
3251
+ "additionalProperties": {}
3252
+ }
3253
+ ]
3254
+ }
3255
+ ]
3084
3256
  },
3085
3257
  "timeout": {
3086
3258
  "description": "Wait timeout ms (default: 5000)",
@@ -3119,57 +3291,304 @@
3119
3291
  }
3120
3292
  },
3121
3293
  "required": [
3122
- "elementId"
3294
+ "textAny"
3123
3295
  ],
3124
3296
  "additionalProperties": false
3125
3297
  },
3126
3298
  {
3127
- "type": "object",
3128
- "properties": {
3129
- "text": {
3130
- "type": "string",
3131
- "description": "Element text"
3132
- },
3133
- "timeout": {
3134
- "description": "Wait timeout ms (default: 5000)",
3135
- "type": "number"
3299
+ "allOf": [
3300
+ {
3301
+ "type": "object",
3302
+ "properties": {
3303
+ "elementId": {
3304
+ "description": "Element resource ID / accessibility identifier",
3305
+ "type": "string"
3306
+ },
3307
+ "text": {
3308
+ "description": "Element text",
3309
+ "type": "string"
3310
+ },
3311
+ "textAny": {
3312
+ "not": {}
3313
+ },
3314
+ "className": {
3315
+ "description": "Element class name",
3316
+ "type": "string"
3317
+ },
3318
+ "contentDescription": {
3319
+ "description": "Element content description / accessibility label",
3320
+ "type": "string"
3321
+ },
3322
+ "matchType": {
3323
+ "description": "Whether element predicates must all match the same node or any one may match",
3324
+ "type": "string",
3325
+ "enum": [
3326
+ "all",
3327
+ "any"
3328
+ ]
3329
+ },
3330
+ "textMatch": {
3331
+ "description": "How to match waitFor.text; does not affect contentDescription",
3332
+ "type": "string",
3333
+ "enum": [
3334
+ "exact",
3335
+ "contains",
3336
+ "regex"
3337
+ ]
3338
+ },
3339
+ "activeWindow": {
3340
+ "description": "Foreground app/window predicates",
3341
+ "allOf": [
3342
+ {
3343
+ "type": "object",
3344
+ "properties": {
3345
+ "appId": {
3346
+ "description": "Foreground app bundle ID / package name",
3347
+ "type": "string"
3348
+ },
3349
+ "packageName": {
3350
+ "type": "string"
3351
+ },
3352
+ "bundleId": {
3353
+ "type": "string"
3354
+ },
3355
+ "activityName": {
3356
+ "description": "Foreground Android activity name",
3357
+ "type": "string"
3358
+ }
3359
+ },
3360
+ "additionalProperties": false
3361
+ },
3362
+ {
3363
+ "anyOf": [
3364
+ {
3365
+ "type": "object",
3366
+ "properties": {
3367
+ "appId": {
3368
+ "type": "string"
3369
+ }
3370
+ },
3371
+ "required": [
3372
+ "appId"
3373
+ ],
3374
+ "additionalProperties": {}
3375
+ },
3376
+ {
3377
+ "type": "object",
3378
+ "properties": {
3379
+ "packageName": {
3380
+ "type": "string"
3381
+ }
3382
+ },
3383
+ "required": [
3384
+ "packageName"
3385
+ ],
3386
+ "additionalProperties": {}
3387
+ },
3388
+ {
3389
+ "type": "object",
3390
+ "properties": {
3391
+ "bundleId": {
3392
+ "type": "string"
3393
+ }
3394
+ },
3395
+ "required": [
3396
+ "bundleId"
3397
+ ],
3398
+ "additionalProperties": {}
3399
+ },
3400
+ {
3401
+ "type": "object",
3402
+ "properties": {
3403
+ "activityName": {
3404
+ "type": "string"
3405
+ }
3406
+ },
3407
+ "required": [
3408
+ "activityName"
3409
+ ],
3410
+ "additionalProperties": {}
3411
+ }
3412
+ ]
3413
+ }
3414
+ ]
3415
+ },
3416
+ "timeout": {
3417
+ "description": "Wait timeout ms (default: 5000)",
3418
+ "type": "number"
3419
+ },
3420
+ "container": {
3421
+ "description": "Scope match to a container",
3422
+ "anyOf": [
3423
+ {
3424
+ "type": "object",
3425
+ "properties": {
3426
+ "elementId": {
3427
+ "type": "string",
3428
+ "description": "Container resource ID"
3429
+ }
3430
+ },
3431
+ "required": [
3432
+ "elementId"
3433
+ ],
3434
+ "additionalProperties": false
3435
+ },
3436
+ {
3437
+ "type": "object",
3438
+ "properties": {
3439
+ "text": {
3440
+ "type": "string",
3441
+ "description": "Container text"
3442
+ }
3443
+ },
3444
+ "required": [
3445
+ "text"
3446
+ ],
3447
+ "additionalProperties": false
3448
+ }
3449
+ ]
3450
+ }
3451
+ },
3452
+ "additionalProperties": false
3136
3453
  },
3137
- "container": {
3138
- "description": "Scope match to a container",
3454
+ {
3139
3455
  "anyOf": [
3140
3456
  {
3141
3457
  "type": "object",
3142
3458
  "properties": {
3143
3459
  "elementId": {
3144
- "type": "string",
3145
- "description": "Container resource ID"
3460
+ "type": "string"
3146
3461
  }
3147
3462
  },
3148
3463
  "required": [
3149
3464
  "elementId"
3150
3465
  ],
3151
- "additionalProperties": false
3466
+ "additionalProperties": {}
3152
3467
  },
3153
3468
  {
3154
3469
  "type": "object",
3155
3470
  "properties": {
3156
3471
  "text": {
3157
- "type": "string",
3158
- "description": "Container text"
3472
+ "type": "string"
3159
3473
  }
3160
3474
  },
3161
3475
  "required": [
3162
3476
  "text"
3163
3477
  ],
3164
- "additionalProperties": false
3165
- }
3166
- ]
3167
- }
3168
- },
3169
- "required": [
3170
- "text"
3171
- ],
3172
- "additionalProperties": false
3478
+ "additionalProperties": {}
3479
+ },
3480
+ {
3481
+ "type": "object",
3482
+ "properties": {
3483
+ "className": {
3484
+ "type": "string"
3485
+ }
3486
+ },
3487
+ "required": [
3488
+ "className"
3489
+ ],
3490
+ "additionalProperties": {}
3491
+ },
3492
+ {
3493
+ "type": "object",
3494
+ "properties": {
3495
+ "contentDescription": {
3496
+ "type": "string"
3497
+ }
3498
+ },
3499
+ "required": [
3500
+ "contentDescription"
3501
+ ],
3502
+ "additionalProperties": {}
3503
+ },
3504
+ {
3505
+ "type": "object",
3506
+ "properties": {
3507
+ "activeWindow": {
3508
+ "allOf": [
3509
+ {
3510
+ "type": "object",
3511
+ "properties": {
3512
+ "appId": {
3513
+ "description": "Foreground app bundle ID / package name",
3514
+ "type": "string"
3515
+ },
3516
+ "packageName": {
3517
+ "type": "string"
3518
+ },
3519
+ "bundleId": {
3520
+ "type": "string"
3521
+ },
3522
+ "activityName": {
3523
+ "description": "Foreground Android activity name",
3524
+ "type": "string"
3525
+ }
3526
+ },
3527
+ "additionalProperties": false
3528
+ },
3529
+ {
3530
+ "anyOf": [
3531
+ {
3532
+ "type": "object",
3533
+ "properties": {
3534
+ "appId": {
3535
+ "type": "string"
3536
+ }
3537
+ },
3538
+ "required": [
3539
+ "appId"
3540
+ ],
3541
+ "additionalProperties": {}
3542
+ },
3543
+ {
3544
+ "type": "object",
3545
+ "properties": {
3546
+ "packageName": {
3547
+ "type": "string"
3548
+ }
3549
+ },
3550
+ "required": [
3551
+ "packageName"
3552
+ ],
3553
+ "additionalProperties": {}
3554
+ },
3555
+ {
3556
+ "type": "object",
3557
+ "properties": {
3558
+ "bundleId": {
3559
+ "type": "string"
3560
+ }
3561
+ },
3562
+ "required": [
3563
+ "bundleId"
3564
+ ],
3565
+ "additionalProperties": {}
3566
+ },
3567
+ {
3568
+ "type": "object",
3569
+ "properties": {
3570
+ "activityName": {
3571
+ "type": "string"
3572
+ }
3573
+ },
3574
+ "required": [
3575
+ "activityName"
3576
+ ],
3577
+ "additionalProperties": {}
3578
+ }
3579
+ ]
3580
+ }
3581
+ ]
3582
+ }
3583
+ },
3584
+ "required": [
3585
+ "activeWindow"
3586
+ ],
3587
+ "additionalProperties": {}
3588
+ }
3589
+ ]
3590
+ }
3591
+ ]
3173
3592
  }
3174
3593
  ]
3175
3594
  },
@@ -3199,151 +3618,1473 @@
3199
3618
  "required": [
3200
3619
  "platform"
3201
3620
  ],
3202
- "additionalProperties": false
3203
- }
3204
- },
3205
- {
3206
- "name": "openLink",
3207
- "description": "Open URL in browser",
3208
- "inputSchema": {
3209
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3210
- "type": "object",
3211
- "properties": {
3212
- "url": {
3213
- "type": "string",
3214
- "description": "URL to open"
3215
- },
3216
- "platform": {
3217
- "type": "string",
3218
- "enum": [
3219
- "android",
3220
- "ios"
3221
- ]
3222
- },
3223
- "sessionUuid": {
3224
- "description": "Session",
3225
- "type": "string"
3226
- },
3227
- "keepScreenAwake": {
3228
- "type": "boolean"
3229
- },
3230
- "device": {
3231
- "description": "Device label",
3232
- "type": "string"
3233
- },
3234
- "deviceId": {
3235
- "type": "string"
3621
+ "additionalProperties": false,
3622
+ "if": {
3623
+ "required": [
3624
+ "platform",
3625
+ "waitFor"
3626
+ ],
3627
+ "properties": {
3628
+ "platform": {
3629
+ "const": "ios"
3630
+ },
3631
+ "waitFor": {
3632
+ "required": [
3633
+ "activeWindow"
3634
+ ],
3635
+ "properties": {
3636
+ "activeWindow": {
3637
+ "required": [
3638
+ "activityName"
3639
+ ],
3640
+ "not": {
3641
+ "anyOf": [
3642
+ {
3643
+ "required": [
3644
+ "appId"
3645
+ ]
3646
+ },
3647
+ {
3648
+ "required": [
3649
+ "bundleId"
3650
+ ]
3651
+ },
3652
+ {
3653
+ "required": [
3654
+ "packageName"
3655
+ ]
3656
+ }
3657
+ ]
3658
+ }
3659
+ }
3660
+ }
3661
+ }
3236
3662
  }
3237
3663
  },
3238
- "required": [
3239
- "url",
3240
- "platform"
3241
- ],
3242
- "additionalProperties": false
3243
- }
3244
- },
3245
- {
3246
- "name": "phoneCall",
3247
- "description": "Simulate Android emulator phone call via gsm commands.",
3248
- "inputSchema": {
3664
+ "then": false
3665
+ },
3666
+ "outputSchema": {
3249
3667
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3250
3668
  "type": "object",
3251
3669
  "properties": {
3252
- "action": {
3253
- "type": "string",
3254
- "enum": [
3255
- "call",
3256
- "accept",
3257
- "cancel",
3258
- "busy",
3259
- "hold"
3670
+ "screenSize": {
3671
+ "type": "object",
3672
+ "properties": {
3673
+ "width": {
3674
+ "type": "integer",
3675
+ "minimum": -9007199254740991,
3676
+ "maximum": 9007199254740991
3677
+ },
3678
+ "height": {
3679
+ "type": "integer",
3680
+ "minimum": -9007199254740991,
3681
+ "maximum": 9007199254740991
3682
+ }
3683
+ },
3684
+ "required": [
3685
+ "width",
3686
+ "height"
3260
3687
  ],
3261
- "description": "call/accept/cancel/busy/hold; hold needs no phoneNumber"
3262
- },
3263
- "phoneNumber": {
3264
- "description": "Phone number; required except for hold",
3265
- "type": "string"
3266
- },
3267
- "platform": {
3268
- "type": "string",
3269
- "enum": [
3270
- "android",
3271
- "ios"
3272
- ]
3273
- },
3274
- "sessionUuid": {
3275
- "description": "Session",
3276
- "type": "string"
3277
- },
3278
- "keepScreenAwake": {
3279
- "type": "boolean"
3280
- },
3281
- "device": {
3282
- "description": "Device label",
3283
- "type": "string"
3688
+ "additionalProperties": false
3284
3689
  },
3285
- "deviceId": {
3286
- "type": "string"
3287
- }
3288
- },
3289
- "required": [
3290
- "action"
3291
- ],
3292
- "additionalProperties": false
3293
- }
3294
- },
3295
- {
3296
- "name": "pinchOn",
3297
- "description": "Pinch to zoom",
3298
- "inputSchema": {
3299
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3300
- "type": "object",
3301
- "properties": {
3302
- "direction": {
3303
- "type": "string",
3304
- "enum": [
3305
- "in",
3306
- "out"
3690
+ "systemInsets": {
3691
+ "type": "object",
3692
+ "properties": {
3693
+ "top": {
3694
+ "type": "integer",
3695
+ "minimum": -9007199254740991,
3696
+ "maximum": 9007199254740991
3697
+ },
3698
+ "right": {
3699
+ "type": "integer",
3700
+ "minimum": -9007199254740991,
3701
+ "maximum": 9007199254740991
3702
+ },
3703
+ "bottom": {
3704
+ "type": "integer",
3705
+ "minimum": -9007199254740991,
3706
+ "maximum": 9007199254740991
3707
+ },
3708
+ "left": {
3709
+ "type": "integer",
3710
+ "minimum": -9007199254740991,
3711
+ "maximum": 9007199254740991
3712
+ }
3713
+ },
3714
+ "required": [
3715
+ "top",
3716
+ "right",
3717
+ "bottom",
3718
+ "left"
3307
3719
  ],
3308
- "description": "Pinch direction"
3309
- },
3310
- "distanceStart": {
3311
- "description": "Initial finger distance (px, default: 400)",
3312
- "type": "number"
3313
- },
3314
- "distanceEnd": {
3315
- "description": "Final finger distance (px, default: 100)",
3316
- "type": "number"
3317
- },
3318
- "scale": {
3319
- "description": "Scale factor (overrides distances)",
3320
- "type": "number"
3321
- },
3322
- "duration": {
3323
- "description": "Gesture duration (ms)",
3324
- "type": "number"
3325
- },
3326
- "rotationDegrees": {
3327
- "description": "Rotation during pinch (degrees)",
3328
- "type": "number"
3329
- },
3330
- "includeSystemInsets": {
3331
- "description": "Use full screen including status/nav bars",
3332
- "type": "boolean"
3720
+ "additionalProperties": false
3333
3721
  },
3334
- "container": {
3335
- "description": "Scope search to a container",
3336
- "anyOf": [
3337
- {
3722
+ "viewHierarchy": {
3723
+ "type": "object",
3724
+ "properties": {
3725
+ "hierarchy": {
3338
3726
  "type": "object",
3339
3727
  "properties": {
3340
- "elementId": {
3341
- "type": "string",
3342
- "description": "Container resource ID"
3728
+ "error": {
3729
+ "type": "string"
3730
+ },
3731
+ "node": {
3732
+ "anyOf": [
3733
+ {
3734
+ "$ref": "#/$defs/__schema0"
3735
+ },
3736
+ {
3737
+ "type": "array",
3738
+ "items": {
3739
+ "$ref": "#/$defs/__schema0"
3740
+ }
3741
+ }
3742
+ ]
3343
3743
  }
3344
3744
  },
3345
- "required": [
3346
- "elementId"
3745
+ "additionalProperties": {}
3746
+ },
3747
+ "windows": {
3748
+ "anyOf": [
3749
+ {
3750
+ "type": "array",
3751
+ "items": {
3752
+ "type": "object",
3753
+ "properties": {
3754
+ "bounds": {
3755
+ "type": "object",
3756
+ "properties": {
3757
+ "left": {
3758
+ "type": "number"
3759
+ },
3760
+ "top": {
3761
+ "type": "number"
3762
+ },
3763
+ "right": {
3764
+ "type": "number"
3765
+ },
3766
+ "bottom": {
3767
+ "type": "number"
3768
+ },
3769
+ "centerX": {
3770
+ "type": "number"
3771
+ },
3772
+ "centerY": {
3773
+ "type": "number"
3774
+ }
3775
+ },
3776
+ "required": [
3777
+ "left",
3778
+ "top",
3779
+ "right",
3780
+ "bottom"
3781
+ ],
3782
+ "additionalProperties": false,
3783
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
3784
+ },
3785
+ "hierarchy": {
3786
+ "$ref": "#/$defs/__schema0"
3787
+ }
3788
+ },
3789
+ "additionalProperties": {}
3790
+ }
3791
+ },
3792
+ {
3793
+ "type": "null"
3794
+ }
3795
+ ]
3796
+ },
3797
+ "contentHiddenRegions": {
3798
+ "anyOf": [
3799
+ {
3800
+ "type": "array",
3801
+ "items": {
3802
+ "type": "object",
3803
+ "properties": {
3804
+ "bounds": {
3805
+ "type": "object",
3806
+ "properties": {
3807
+ "left": {
3808
+ "type": "number"
3809
+ },
3810
+ "top": {
3811
+ "type": "number"
3812
+ },
3813
+ "right": {
3814
+ "type": "number"
3815
+ },
3816
+ "bottom": {
3817
+ "type": "number"
3818
+ },
3819
+ "centerX": {
3820
+ "type": "number"
3821
+ },
3822
+ "centerY": {
3823
+ "type": "number"
3824
+ }
3825
+ },
3826
+ "required": [
3827
+ "left",
3828
+ "top",
3829
+ "right",
3830
+ "bottom"
3831
+ ],
3832
+ "additionalProperties": false,
3833
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
3834
+ },
3835
+ "reason": {
3836
+ "type": "string"
3837
+ },
3838
+ "areaPercent": {
3839
+ "type": "number"
3840
+ }
3841
+ },
3842
+ "required": [
3843
+ "bounds",
3844
+ "reason",
3845
+ "areaPercent"
3846
+ ],
3847
+ "additionalProperties": {}
3848
+ }
3849
+ },
3850
+ {
3851
+ "type": "null"
3852
+ }
3853
+ ]
3854
+ },
3855
+ "accessibility-focused-element": {
3856
+ "$ref": "#/$defs/__schema0"
3857
+ },
3858
+ "systemInsets": {
3859
+ "type": "object",
3860
+ "properties": {
3861
+ "top": {
3862
+ "type": "integer",
3863
+ "minimum": -9007199254740991,
3864
+ "maximum": 9007199254740991
3865
+ },
3866
+ "right": {
3867
+ "type": "integer",
3868
+ "minimum": -9007199254740991,
3869
+ "maximum": 9007199254740991
3870
+ },
3871
+ "bottom": {
3872
+ "type": "integer",
3873
+ "minimum": -9007199254740991,
3874
+ "maximum": 9007199254740991
3875
+ },
3876
+ "left": {
3877
+ "type": "integer",
3878
+ "minimum": -9007199254740991,
3879
+ "maximum": 9007199254740991
3880
+ }
3881
+ },
3882
+ "required": [
3883
+ "top",
3884
+ "right",
3885
+ "bottom",
3886
+ "left"
3887
+ ],
3888
+ "additionalProperties": false
3889
+ }
3890
+ },
3891
+ "additionalProperties": {}
3892
+ },
3893
+ "activeWindow": {
3894
+ "type": "object",
3895
+ "properties": {
3896
+ "appId": {
3897
+ "type": "string"
3898
+ },
3899
+ "activityName": {
3900
+ "type": "string"
3901
+ },
3902
+ "layoutSeqSum": {
3903
+ "type": "integer",
3904
+ "minimum": -9007199254740991,
3905
+ "maximum": 9007199254740991
3906
+ },
3907
+ "type": {
3908
+ "type": "string"
3909
+ }
3910
+ },
3911
+ "additionalProperties": {}
3912
+ },
3913
+ "screenIdentity": {
3914
+ "type": "object",
3915
+ "properties": {
3916
+ "platform": {
3917
+ "type": "string",
3918
+ "enum": [
3919
+ "ios",
3920
+ "android"
3921
+ ]
3922
+ },
3923
+ "source": {
3924
+ "type": "string",
3925
+ "enum": [
3926
+ "heuristic",
3927
+ "sdk"
3928
+ ]
3929
+ },
3930
+ "confidence": {
3931
+ "type": "string",
3932
+ "enum": [
3933
+ "high",
3934
+ "medium",
3935
+ "low"
3936
+ ]
3937
+ },
3938
+ "key": {
3939
+ "type": "string"
3940
+ },
3941
+ "components": {
3942
+ "type": "object",
3943
+ "properties": {
3944
+ "bundleId": {
3945
+ "type": "string"
3946
+ },
3947
+ "navigationTitle": {
3948
+ "type": "string"
3949
+ },
3950
+ "selectedTab": {
3951
+ "type": "string"
3952
+ },
3953
+ "modalClass": {
3954
+ "type": "string"
3955
+ },
3956
+ "modalTitle": {
3957
+ "type": "string"
3958
+ },
3959
+ "focusedElementId": {
3960
+ "type": "string"
3961
+ },
3962
+ "keyboardVisible": {
3963
+ "type": "boolean"
3964
+ }
3965
+ },
3966
+ "additionalProperties": {}
3967
+ }
3968
+ },
3969
+ "required": [
3970
+ "platform",
3971
+ "source",
3972
+ "confidence",
3973
+ "key",
3974
+ "components"
3975
+ ],
3976
+ "additionalProperties": {}
3977
+ },
3978
+ "elements": {
3979
+ "type": "object",
3980
+ "properties": {
3981
+ "clickable": {
3982
+ "type": "array",
3983
+ "items": {
3984
+ "$ref": "#/$defs/__schema0"
3985
+ }
3986
+ },
3987
+ "scrollable": {
3988
+ "type": "array",
3989
+ "items": {
3990
+ "$ref": "#/$defs/__schema0"
3991
+ }
3992
+ },
3993
+ "text": {
3994
+ "type": "array",
3995
+ "items": {
3996
+ "$ref": "#/$defs/__schema0"
3997
+ }
3998
+ },
3999
+ "media": {
4000
+ "type": "array",
4001
+ "items": {
4002
+ "type": "object",
4003
+ "properties": {
4004
+ "bounds": {
4005
+ "type": "object",
4006
+ "properties": {
4007
+ "left": {
4008
+ "type": "number"
4009
+ },
4010
+ "top": {
4011
+ "type": "number"
4012
+ },
4013
+ "right": {
4014
+ "type": "number"
4015
+ },
4016
+ "bottom": {
4017
+ "type": "number"
4018
+ },
4019
+ "centerX": {
4020
+ "type": "number"
4021
+ },
4022
+ "centerY": {
4023
+ "type": "number"
4024
+ }
4025
+ },
4026
+ "required": [
4027
+ "left",
4028
+ "top",
4029
+ "right",
4030
+ "bottom"
4031
+ ],
4032
+ "additionalProperties": false,
4033
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
4034
+ }
4035
+ },
4036
+ "additionalProperties": {}
4037
+ }
4038
+ }
4039
+ },
4040
+ "required": [
4041
+ "clickable",
4042
+ "scrollable",
4043
+ "text",
4044
+ "media"
4045
+ ],
4046
+ "additionalProperties": {}
4047
+ },
4048
+ "selectedElements": {
4049
+ "type": "array",
4050
+ "items": {
4051
+ "type": "object",
4052
+ "properties": {
4053
+ "text": {
4054
+ "type": "string"
4055
+ },
4056
+ "resourceId": {
4057
+ "type": "string"
4058
+ },
4059
+ "contentDesc": {
4060
+ "type": "string"
4061
+ },
4062
+ "bounds": {
4063
+ "type": "object",
4064
+ "properties": {
4065
+ "left": {
4066
+ "type": "number"
4067
+ },
4068
+ "top": {
4069
+ "type": "number"
4070
+ },
4071
+ "right": {
4072
+ "type": "number"
4073
+ },
4074
+ "bottom": {
4075
+ "type": "number"
4076
+ },
4077
+ "centerX": {
4078
+ "type": "number"
4079
+ },
4080
+ "centerY": {
4081
+ "type": "number"
4082
+ }
4083
+ },
4084
+ "required": [
4085
+ "left",
4086
+ "top",
4087
+ "right",
4088
+ "bottom"
4089
+ ],
4090
+ "additionalProperties": false,
4091
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
4092
+ },
4093
+ "indexInMatches": {
4094
+ "type": "integer",
4095
+ "minimum": -9007199254740991,
4096
+ "maximum": 9007199254740991
4097
+ },
4098
+ "totalMatches": {
4099
+ "type": "integer",
4100
+ "minimum": -9007199254740991,
4101
+ "maximum": 9007199254740991
4102
+ },
4103
+ "selectionStrategy": {
4104
+ "type": "string"
4105
+ },
4106
+ "selectedState": {
4107
+ "type": "object",
4108
+ "properties": {
4109
+ "method": {
4110
+ "type": "string",
4111
+ "enum": [
4112
+ "accessibility",
4113
+ "visual"
4114
+ ]
4115
+ },
4116
+ "confidence": {
4117
+ "type": "number"
4118
+ },
4119
+ "reason": {
4120
+ "type": "string"
4121
+ }
4122
+ },
4123
+ "required": [
4124
+ "method",
4125
+ "confidence"
4126
+ ],
4127
+ "additionalProperties": false
4128
+ }
4129
+ },
4130
+ "additionalProperties": {}
4131
+ }
4132
+ },
4133
+ "focusedElement": {
4134
+ "type": "object",
4135
+ "properties": {
4136
+ "bounds": {
4137
+ "type": "object",
4138
+ "properties": {
4139
+ "left": {
4140
+ "type": "number"
4141
+ },
4142
+ "top": {
4143
+ "type": "number"
4144
+ },
4145
+ "right": {
4146
+ "type": "number"
4147
+ },
4148
+ "bottom": {
4149
+ "type": "number"
4150
+ },
4151
+ "centerX": {
4152
+ "type": "number"
4153
+ },
4154
+ "centerY": {
4155
+ "type": "number"
4156
+ }
4157
+ },
4158
+ "required": [
4159
+ "left",
4160
+ "top",
4161
+ "right",
4162
+ "bottom"
4163
+ ],
4164
+ "additionalProperties": false,
4165
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
4166
+ },
4167
+ "text": {
4168
+ "type": "string"
4169
+ },
4170
+ "resource-id": {
4171
+ "type": "string"
4172
+ },
4173
+ "view-id": {
4174
+ "type": "string"
4175
+ },
4176
+ "content-desc": {
4177
+ "type": "string"
4178
+ },
4179
+ "occlusionState": {
4180
+ "type": "string"
4181
+ },
4182
+ "occludedBy": {
4183
+ "type": "string"
4184
+ },
4185
+ "occludedByViewId": {
4186
+ "type": "string"
4187
+ },
4188
+ "class": {
4189
+ "type": "string"
4190
+ },
4191
+ "package": {
4192
+ "type": "string"
4193
+ },
4194
+ "checkable": {
4195
+ "anyOf": [
4196
+ {
4197
+ "type": "boolean"
4198
+ },
4199
+ {
4200
+ "type": "string",
4201
+ "const": "true"
4202
+ },
4203
+ {
4204
+ "type": "string",
4205
+ "const": "false"
4206
+ }
4207
+ ]
4208
+ },
4209
+ "checked": {
4210
+ "anyOf": [
4211
+ {
4212
+ "type": "boolean"
4213
+ },
4214
+ {
4215
+ "type": "string",
4216
+ "const": "true"
4217
+ },
4218
+ {
4219
+ "type": "string",
4220
+ "const": "false"
4221
+ }
4222
+ ]
4223
+ },
4224
+ "clickable": {
4225
+ "anyOf": [
4226
+ {
4227
+ "type": "boolean"
4228
+ },
4229
+ {
4230
+ "type": "string",
4231
+ "const": "true"
4232
+ },
4233
+ {
4234
+ "type": "string",
4235
+ "const": "false"
4236
+ }
4237
+ ]
4238
+ },
4239
+ "enabled": {
4240
+ "anyOf": [
4241
+ {
4242
+ "type": "boolean"
4243
+ },
4244
+ {
4245
+ "type": "string",
4246
+ "const": "true"
4247
+ },
4248
+ {
4249
+ "type": "string",
4250
+ "const": "false"
4251
+ }
4252
+ ]
4253
+ },
4254
+ "focusable": {
4255
+ "anyOf": [
4256
+ {
4257
+ "type": "boolean"
4258
+ },
4259
+ {
4260
+ "type": "string",
4261
+ "const": "true"
4262
+ },
4263
+ {
4264
+ "type": "string",
4265
+ "const": "false"
4266
+ }
4267
+ ]
4268
+ },
4269
+ "focused": {
4270
+ "anyOf": [
4271
+ {
4272
+ "type": "boolean"
4273
+ },
4274
+ {
4275
+ "type": "string",
4276
+ "const": "true"
4277
+ },
4278
+ {
4279
+ "type": "string",
4280
+ "const": "false"
4281
+ }
4282
+ ]
4283
+ },
4284
+ "accessibility-focused": {
4285
+ "anyOf": [
4286
+ {
4287
+ "type": "boolean"
4288
+ },
4289
+ {
4290
+ "type": "string",
4291
+ "const": "true"
4292
+ },
4293
+ {
4294
+ "type": "string",
4295
+ "const": "false"
4296
+ }
4297
+ ]
4298
+ },
4299
+ "scrollable": {
4300
+ "anyOf": [
4301
+ {
4302
+ "type": "boolean"
4303
+ },
4304
+ {
4305
+ "type": "string",
4306
+ "const": "true"
4307
+ },
4308
+ {
4309
+ "type": "string",
4310
+ "const": "false"
4311
+ }
4312
+ ]
4313
+ },
4314
+ "selected": {
4315
+ "anyOf": [
4316
+ {
4317
+ "type": "boolean"
4318
+ },
4319
+ {
4320
+ "type": "string",
4321
+ "const": "true"
4322
+ },
4323
+ {
4324
+ "type": "string",
4325
+ "const": "false"
4326
+ }
4327
+ ]
4328
+ }
4329
+ },
4330
+ "required": [
4331
+ "bounds"
4332
+ ],
4333
+ "additionalProperties": {}
4334
+ },
4335
+ "accessibilityFocusedElement": {
4336
+ "type": "object",
4337
+ "properties": {
4338
+ "bounds": {
4339
+ "type": "object",
4340
+ "properties": {
4341
+ "left": {
4342
+ "type": "number"
4343
+ },
4344
+ "top": {
4345
+ "type": "number"
4346
+ },
4347
+ "right": {
4348
+ "type": "number"
4349
+ },
4350
+ "bottom": {
4351
+ "type": "number"
4352
+ },
4353
+ "centerX": {
4354
+ "type": "number"
4355
+ },
4356
+ "centerY": {
4357
+ "type": "number"
4358
+ }
4359
+ },
4360
+ "required": [
4361
+ "left",
4362
+ "top",
4363
+ "right",
4364
+ "bottom"
4365
+ ],
4366
+ "additionalProperties": false,
4367
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
4368
+ },
4369
+ "text": {
4370
+ "type": "string"
4371
+ },
4372
+ "resource-id": {
4373
+ "type": "string"
4374
+ },
4375
+ "view-id": {
4376
+ "type": "string"
4377
+ },
4378
+ "content-desc": {
4379
+ "type": "string"
4380
+ },
4381
+ "occlusionState": {
4382
+ "type": "string"
4383
+ },
4384
+ "occludedBy": {
4385
+ "type": "string"
4386
+ },
4387
+ "occludedByViewId": {
4388
+ "type": "string"
4389
+ },
4390
+ "class": {
4391
+ "type": "string"
4392
+ },
4393
+ "package": {
4394
+ "type": "string"
4395
+ },
4396
+ "checkable": {
4397
+ "anyOf": [
4398
+ {
4399
+ "type": "boolean"
4400
+ },
4401
+ {
4402
+ "type": "string",
4403
+ "const": "true"
4404
+ },
4405
+ {
4406
+ "type": "string",
4407
+ "const": "false"
4408
+ }
4409
+ ]
4410
+ },
4411
+ "checked": {
4412
+ "anyOf": [
4413
+ {
4414
+ "type": "boolean"
4415
+ },
4416
+ {
4417
+ "type": "string",
4418
+ "const": "true"
4419
+ },
4420
+ {
4421
+ "type": "string",
4422
+ "const": "false"
4423
+ }
4424
+ ]
4425
+ },
4426
+ "clickable": {
4427
+ "anyOf": [
4428
+ {
4429
+ "type": "boolean"
4430
+ },
4431
+ {
4432
+ "type": "string",
4433
+ "const": "true"
4434
+ },
4435
+ {
4436
+ "type": "string",
4437
+ "const": "false"
4438
+ }
4439
+ ]
4440
+ },
4441
+ "enabled": {
4442
+ "anyOf": [
4443
+ {
4444
+ "type": "boolean"
4445
+ },
4446
+ {
4447
+ "type": "string",
4448
+ "const": "true"
4449
+ },
4450
+ {
4451
+ "type": "string",
4452
+ "const": "false"
4453
+ }
4454
+ ]
4455
+ },
4456
+ "focusable": {
4457
+ "anyOf": [
4458
+ {
4459
+ "type": "boolean"
4460
+ },
4461
+ {
4462
+ "type": "string",
4463
+ "const": "true"
4464
+ },
4465
+ {
4466
+ "type": "string",
4467
+ "const": "false"
4468
+ }
4469
+ ]
4470
+ },
4471
+ "focused": {
4472
+ "anyOf": [
4473
+ {
4474
+ "type": "boolean"
4475
+ },
4476
+ {
4477
+ "type": "string",
4478
+ "const": "true"
4479
+ },
4480
+ {
4481
+ "type": "string",
4482
+ "const": "false"
4483
+ }
4484
+ ]
4485
+ },
4486
+ "accessibility-focused": {
4487
+ "anyOf": [
4488
+ {
4489
+ "type": "boolean"
4490
+ },
4491
+ {
4492
+ "type": "string",
4493
+ "const": "true"
4494
+ },
4495
+ {
4496
+ "type": "string",
4497
+ "const": "false"
4498
+ }
4499
+ ]
4500
+ },
4501
+ "scrollable": {
4502
+ "anyOf": [
4503
+ {
4504
+ "type": "boolean"
4505
+ },
4506
+ {
4507
+ "type": "string",
4508
+ "const": "true"
4509
+ },
4510
+ {
4511
+ "type": "string",
4512
+ "const": "false"
4513
+ }
4514
+ ]
4515
+ },
4516
+ "selected": {
4517
+ "anyOf": [
4518
+ {
4519
+ "type": "boolean"
4520
+ },
4521
+ {
4522
+ "type": "string",
4523
+ "const": "true"
4524
+ },
4525
+ {
4526
+ "type": "string",
4527
+ "const": "false"
4528
+ }
4529
+ ]
4530
+ }
4531
+ },
4532
+ "required": [
4533
+ "bounds"
4534
+ ],
4535
+ "additionalProperties": {}
4536
+ },
4537
+ "awaitedElement": {
4538
+ "type": "object",
4539
+ "properties": {
4540
+ "bounds": {
4541
+ "type": "object",
4542
+ "properties": {
4543
+ "left": {
4544
+ "type": "number"
4545
+ },
4546
+ "top": {
4547
+ "type": "number"
4548
+ },
4549
+ "right": {
4550
+ "type": "number"
4551
+ },
4552
+ "bottom": {
4553
+ "type": "number"
4554
+ },
4555
+ "centerX": {
4556
+ "type": "number"
4557
+ },
4558
+ "centerY": {
4559
+ "type": "number"
4560
+ }
4561
+ },
4562
+ "required": [
4563
+ "left",
4564
+ "top",
4565
+ "right",
4566
+ "bottom"
4567
+ ],
4568
+ "additionalProperties": false,
4569
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
4570
+ },
4571
+ "text": {
4572
+ "type": "string"
4573
+ },
4574
+ "resource-id": {
4575
+ "type": "string"
4576
+ },
4577
+ "view-id": {
4578
+ "type": "string"
4579
+ },
4580
+ "content-desc": {
4581
+ "type": "string"
4582
+ },
4583
+ "occlusionState": {
4584
+ "type": "string"
4585
+ },
4586
+ "occludedBy": {
4587
+ "type": "string"
4588
+ },
4589
+ "occludedByViewId": {
4590
+ "type": "string"
4591
+ },
4592
+ "class": {
4593
+ "type": "string"
4594
+ },
4595
+ "package": {
4596
+ "type": "string"
4597
+ },
4598
+ "checkable": {
4599
+ "anyOf": [
4600
+ {
4601
+ "type": "boolean"
4602
+ },
4603
+ {
4604
+ "type": "string",
4605
+ "const": "true"
4606
+ },
4607
+ {
4608
+ "type": "string",
4609
+ "const": "false"
4610
+ }
4611
+ ]
4612
+ },
4613
+ "checked": {
4614
+ "anyOf": [
4615
+ {
4616
+ "type": "boolean"
4617
+ },
4618
+ {
4619
+ "type": "string",
4620
+ "const": "true"
4621
+ },
4622
+ {
4623
+ "type": "string",
4624
+ "const": "false"
4625
+ }
4626
+ ]
4627
+ },
4628
+ "clickable": {
4629
+ "anyOf": [
4630
+ {
4631
+ "type": "boolean"
4632
+ },
4633
+ {
4634
+ "type": "string",
4635
+ "const": "true"
4636
+ },
4637
+ {
4638
+ "type": "string",
4639
+ "const": "false"
4640
+ }
4641
+ ]
4642
+ },
4643
+ "enabled": {
4644
+ "anyOf": [
4645
+ {
4646
+ "type": "boolean"
4647
+ },
4648
+ {
4649
+ "type": "string",
4650
+ "const": "true"
4651
+ },
4652
+ {
4653
+ "type": "string",
4654
+ "const": "false"
4655
+ }
4656
+ ]
4657
+ },
4658
+ "focusable": {
4659
+ "anyOf": [
4660
+ {
4661
+ "type": "boolean"
4662
+ },
4663
+ {
4664
+ "type": "string",
4665
+ "const": "true"
4666
+ },
4667
+ {
4668
+ "type": "string",
4669
+ "const": "false"
4670
+ }
4671
+ ]
4672
+ },
4673
+ "focused": {
4674
+ "anyOf": [
4675
+ {
4676
+ "type": "boolean"
4677
+ },
4678
+ {
4679
+ "type": "string",
4680
+ "const": "true"
4681
+ },
4682
+ {
4683
+ "type": "string",
4684
+ "const": "false"
4685
+ }
4686
+ ]
4687
+ },
4688
+ "accessibility-focused": {
4689
+ "anyOf": [
4690
+ {
4691
+ "type": "boolean"
4692
+ },
4693
+ {
4694
+ "type": "string",
4695
+ "const": "true"
4696
+ },
4697
+ {
4698
+ "type": "string",
4699
+ "const": "false"
4700
+ }
4701
+ ]
4702
+ },
4703
+ "scrollable": {
4704
+ "anyOf": [
4705
+ {
4706
+ "type": "boolean"
4707
+ },
4708
+ {
4709
+ "type": "string",
4710
+ "const": "true"
4711
+ },
4712
+ {
4713
+ "type": "string",
4714
+ "const": "false"
4715
+ }
4716
+ ]
4717
+ },
4718
+ "selected": {
4719
+ "anyOf": [
4720
+ {
4721
+ "type": "boolean"
4722
+ },
4723
+ {
4724
+ "type": "string",
4725
+ "const": "true"
4726
+ },
4727
+ {
4728
+ "type": "string",
4729
+ "const": "false"
4730
+ }
4731
+ ]
4732
+ }
4733
+ },
4734
+ "required": [
4735
+ "bounds"
4736
+ ],
4737
+ "additionalProperties": {}
4738
+ },
4739
+ "freshness": {
4740
+ "type": "object",
4741
+ "properties": {
4742
+ "requestedAfter": {
4743
+ "type": "integer",
4744
+ "minimum": -9007199254740991,
4745
+ "maximum": 9007199254740991
4746
+ },
4747
+ "actualTimestamp": {
4748
+ "type": "integer",
4749
+ "minimum": -9007199254740991,
4750
+ "maximum": 9007199254740991
4751
+ },
4752
+ "isFresh": {
4753
+ "type": "boolean"
4754
+ },
4755
+ "staleDurationMs": {
4756
+ "type": "integer",
4757
+ "minimum": -9007199254740991,
4758
+ "maximum": 9007199254740991
4759
+ },
4760
+ "warning": {
4761
+ "type": "string"
4762
+ }
4763
+ },
4764
+ "required": [
4765
+ "isFresh"
4766
+ ],
4767
+ "additionalProperties": {}
4768
+ },
4769
+ "predictions": {
4770
+ "type": "object",
4771
+ "properties": {
4772
+ "likelyActions": {
4773
+ "type": "array",
4774
+ "items": {
4775
+ "type": "object",
4776
+ "properties": {
4777
+ "action": {
4778
+ "type": "string"
4779
+ },
4780
+ "target": {
4781
+ "type": "object",
4782
+ "properties": {
4783
+ "text": {
4784
+ "type": "string"
4785
+ },
4786
+ "elementId": {
4787
+ "type": "string"
4788
+ },
4789
+ "contentDesc": {
4790
+ "type": "string"
4791
+ },
4792
+ "container": {
4793
+ "type": "object",
4794
+ "properties": {
4795
+ "text": {
4796
+ "type": "string"
4797
+ },
4798
+ "elementId": {
4799
+ "type": "string"
4800
+ },
4801
+ "contentDesc": {
4802
+ "type": "string"
4803
+ }
4804
+ },
4805
+ "additionalProperties": false
4806
+ },
4807
+ "lookFor": {
4808
+ "type": "object",
4809
+ "properties": {
4810
+ "text": {
4811
+ "type": "string"
4812
+ },
4813
+ "elementId": {
4814
+ "type": "string"
4815
+ },
4816
+ "contentDesc": {
4817
+ "type": "string"
4818
+ }
4819
+ },
4820
+ "additionalProperties": false
4821
+ }
4822
+ },
4823
+ "additionalProperties": {}
4824
+ },
4825
+ "predictedScreen": {
4826
+ "type": "string"
4827
+ },
4828
+ "predictedElements": {
4829
+ "type": "array",
4830
+ "items": {
4831
+ "type": "string"
4832
+ }
4833
+ },
4834
+ "confidence": {
4835
+ "type": "number"
4836
+ }
4837
+ },
4838
+ "required": [
4839
+ "action",
4840
+ "target",
4841
+ "predictedScreen",
4842
+ "confidence"
4843
+ ],
4844
+ "additionalProperties": {}
4845
+ }
4846
+ },
4847
+ "interactableElements": {
4848
+ "type": "array",
4849
+ "items": {
4850
+ "type": "object",
4851
+ "properties": {
4852
+ "elementId": {
4853
+ "type": "string"
4854
+ },
4855
+ "elementText": {
4856
+ "type": "string"
4857
+ },
4858
+ "elementContentDesc": {
4859
+ "type": "string"
4860
+ },
4861
+ "predictedOutcome": {
4862
+ "type": "object",
4863
+ "properties": {
4864
+ "screenName": {
4865
+ "type": "string"
4866
+ },
4867
+ "basedOn": {
4868
+ "type": "string",
4869
+ "enum": [
4870
+ "navigation_graph"
4871
+ ]
4872
+ }
4873
+ },
4874
+ "required": [
4875
+ "screenName",
4876
+ "basedOn"
4877
+ ],
4878
+ "additionalProperties": false
4879
+ }
4880
+ },
4881
+ "additionalProperties": {}
4882
+ }
4883
+ }
4884
+ },
4885
+ "required": [
4886
+ "likelyActions",
4887
+ "interactableElements"
4888
+ ],
4889
+ "additionalProperties": {}
4890
+ },
4891
+ "accessibilityState": {
4892
+ "type": "object",
4893
+ "properties": {
4894
+ "enabled": {
4895
+ "type": "boolean"
4896
+ },
4897
+ "service": {
4898
+ "type": "string",
4899
+ "enum": [
4900
+ "talkback",
4901
+ "voiceover",
4902
+ "unknown"
4903
+ ]
4904
+ }
4905
+ },
4906
+ "required": [
4907
+ "enabled",
4908
+ "service"
4909
+ ],
4910
+ "additionalProperties": {}
4911
+ },
4912
+ "artifact": {
4913
+ "type": "object",
4914
+ "properties": {
4915
+ "path": {
4916
+ "type": "string"
4917
+ },
4918
+ "format": {
4919
+ "type": "string",
4920
+ "const": "json"
4921
+ },
4922
+ "payload": {
4923
+ "type": "string"
4924
+ },
4925
+ "bytes": {
4926
+ "type": "integer",
4927
+ "minimum": 0,
4928
+ "maximum": 9007199254740991
4929
+ },
4930
+ "tool": {
4931
+ "type": "string"
4932
+ }
4933
+ },
4934
+ "required": [
4935
+ "path",
4936
+ "format",
4937
+ "payload",
4938
+ "bytes",
4939
+ "tool"
4940
+ ],
4941
+ "additionalProperties": {}
4942
+ }
4943
+ }
4944
+ }
4945
+ },
4946
+ {
4947
+ "name": "openLink",
4948
+ "description": "Open URL in browser",
4949
+ "inputSchema": {
4950
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4951
+ "type": "object",
4952
+ "properties": {
4953
+ "url": {
4954
+ "type": "string",
4955
+ "description": "URL to open"
4956
+ },
4957
+ "platform": {
4958
+ "type": "string",
4959
+ "enum": [
4960
+ "android",
4961
+ "ios"
4962
+ ]
4963
+ },
4964
+ "sessionUuid": {
4965
+ "description": "Session",
4966
+ "type": "string"
4967
+ },
4968
+ "keepScreenAwake": {
4969
+ "type": "boolean"
4970
+ },
4971
+ "device": {
4972
+ "description": "Device label",
4973
+ "type": "string"
4974
+ },
4975
+ "deviceId": {
4976
+ "type": "string"
4977
+ }
4978
+ },
4979
+ "required": [
4980
+ "url",
4981
+ "platform"
4982
+ ],
4983
+ "additionalProperties": false
4984
+ }
4985
+ },
4986
+ {
4987
+ "name": "phoneCall",
4988
+ "description": "Simulate Android emulator phone call via gsm commands.",
4989
+ "inputSchema": {
4990
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4991
+ "type": "object",
4992
+ "properties": {
4993
+ "action": {
4994
+ "type": "string",
4995
+ "enum": [
4996
+ "call",
4997
+ "accept",
4998
+ "cancel",
4999
+ "busy",
5000
+ "hold"
5001
+ ],
5002
+ "description": "call/accept/cancel/busy/hold; hold needs no phoneNumber"
5003
+ },
5004
+ "phoneNumber": {
5005
+ "description": "Phone number; required except for hold",
5006
+ "type": "string"
5007
+ },
5008
+ "platform": {
5009
+ "type": "string",
5010
+ "enum": [
5011
+ "android",
5012
+ "ios"
5013
+ ]
5014
+ },
5015
+ "sessionUuid": {
5016
+ "description": "Session",
5017
+ "type": "string"
5018
+ },
5019
+ "keepScreenAwake": {
5020
+ "type": "boolean"
5021
+ },
5022
+ "device": {
5023
+ "description": "Device label",
5024
+ "type": "string"
5025
+ },
5026
+ "deviceId": {
5027
+ "type": "string"
5028
+ }
5029
+ },
5030
+ "required": [
5031
+ "action"
5032
+ ],
5033
+ "additionalProperties": false
5034
+ }
5035
+ },
5036
+ {
5037
+ "name": "pinchOn",
5038
+ "description": "Pinch to zoom",
5039
+ "inputSchema": {
5040
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
5041
+ "type": "object",
5042
+ "properties": {
5043
+ "direction": {
5044
+ "type": "string",
5045
+ "enum": [
5046
+ "in",
5047
+ "out"
5048
+ ],
5049
+ "description": "Pinch direction"
5050
+ },
5051
+ "distanceStart": {
5052
+ "description": "Initial finger distance (px, default: 400)",
5053
+ "type": "number"
5054
+ },
5055
+ "distanceEnd": {
5056
+ "description": "Final finger distance (px, default: 100)",
5057
+ "type": "number"
5058
+ },
5059
+ "scale": {
5060
+ "description": "Scale factor (overrides distances)",
5061
+ "type": "number"
5062
+ },
5063
+ "duration": {
5064
+ "description": "Gesture duration (ms)",
5065
+ "type": "number"
5066
+ },
5067
+ "rotationDegrees": {
5068
+ "description": "Degrees the two-finger axis rotates during the pinch (default: 0). The axis starts horizontal and ends rotated by this amount — a combined pinch+rotate, not a pinch along a fixed rotated axis. Same convention on Android and iOS.",
5069
+ "type": "number"
5070
+ },
5071
+ "includeSystemInsets": {
5072
+ "description": "Use full screen including status/nav bars",
5073
+ "type": "boolean"
5074
+ },
5075
+ "container": {
5076
+ "description": "Scope search to a container",
5077
+ "anyOf": [
5078
+ {
5079
+ "type": "object",
5080
+ "properties": {
5081
+ "elementId": {
5082
+ "type": "string",
5083
+ "description": "Container resource ID"
5084
+ }
5085
+ },
5086
+ "required": [
5087
+ "elementId"
3347
5088
  ],
3348
5089
  "additionalProperties": false
3349
5090
  },
@@ -3455,7 +5196,7 @@
3455
5196
  "appId": {
3456
5197
  "type": "string",
3457
5198
  "minLength": 1,
3458
- "description": "iOS target bundle ID"
5199
+ "description": "Android target package name or iOS target bundle ID; Android defaults to the live foreground app when omitted"
3459
5200
  },
3460
5201
  "platform": {
3461
5202
  "type": "string",
@@ -3935,7 +5676,7 @@
3935
5676
  },
3936
5677
  {
3937
5678
  "name": "setAppPermissions",
3938
- "description": "Grant, revoke, reset, or configure app permissions",
5679
+ "description": "Grant, revoke, reset, or configure app permissions on Android devices, iOS simulators (grant/revoke/reset), and iOS physical devices (reset only, permissions=['all'] supported)",
3939
5680
  "inputSchema": {
3940
5681
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3941
5682
  "type": "object",
@@ -3944,7 +5685,7 @@
3944
5685
  "type": "string"
3945
5686
  },
3946
5687
  "action": {
3947
- "description": "Permission action; defaults to grant",
5688
+ "description": "Permission action; defaults to grant. Android supports grant; iOS simulators support grant/revoke/reset; iOS physical devices support reset only, including permissions=['all'].",
3948
5689
  "type": "string",
3949
5690
  "enum": [
3950
5691
  "grant",
@@ -3953,7 +5694,7 @@
3953
5694
  ]
3954
5695
  },
3955
5696
  "permissions": {
3956
- "description": "Runtime permissions or simulator privacy services to change",
5697
+ "description": "Runtime permissions or simulator privacy services to change; iOS physical reset accepts 'all'",
3957
5698
  "type": "array",
3958
5699
  "items": {
3959
5700
  "type": "string",
@@ -4185,6 +5926,90 @@
4185
5926
  "additionalProperties": false
4186
5927
  }
4187
5928
  },
5929
+ {
5930
+ "name": "setPreference",
5931
+ "description": "Write an Android system property, Android SharedPreferences key, or iOS UserDefaults key and return read-back verification.",
5932
+ "inputSchema": {
5933
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
5934
+ "type": "object",
5935
+ "properties": {
5936
+ "scope": {
5937
+ "type": "string",
5938
+ "enum": [
5939
+ "systemProperty",
5940
+ "sharedPreferences",
5941
+ "userDefaults"
5942
+ ],
5943
+ "description": "Preference scope"
5944
+ },
5945
+ "appId": {
5946
+ "description": "App package or bundle id",
5947
+ "type": "string"
5948
+ },
5949
+ "suite": {
5950
+ "description": "SharedPreferences file name or UserDefaults suite/app group",
5951
+ "type": "string"
5952
+ },
5953
+ "key": {
5954
+ "type": "string",
5955
+ "minLength": 1,
5956
+ "description": "Preference key or Android system property name"
5957
+ },
5958
+ "value": {
5959
+ "anyOf": [
5960
+ {
5961
+ "type": "string"
5962
+ },
5963
+ {
5964
+ "type": "boolean"
5965
+ },
5966
+ {
5967
+ "type": "number"
5968
+ }
5969
+ ],
5970
+ "description": "Value to write"
5971
+ },
5972
+ "type": {
5973
+ "type": "string",
5974
+ "enum": [
5975
+ "string",
5976
+ "bool",
5977
+ "int",
5978
+ "float"
5979
+ ],
5980
+ "description": "Value type for typed preference stores"
5981
+ },
5982
+ "platform": {
5983
+ "type": "string",
5984
+ "enum": [
5985
+ "android",
5986
+ "ios"
5987
+ ]
5988
+ },
5989
+ "sessionUuid": {
5990
+ "description": "Session",
5991
+ "type": "string"
5992
+ },
5993
+ "keepScreenAwake": {
5994
+ "type": "boolean"
5995
+ },
5996
+ "device": {
5997
+ "description": "Device label",
5998
+ "type": "string"
5999
+ },
6000
+ "deviceId": {
6001
+ "type": "string"
6002
+ }
6003
+ },
6004
+ "required": [
6005
+ "scope",
6006
+ "key",
6007
+ "value",
6008
+ "type"
6009
+ ],
6010
+ "additionalProperties": false
6011
+ }
6012
+ },
4188
6013
  {
4189
6014
  "name": "setUIState",
4190
6015
  "description": "Set multiple form fields by desired state.",
@@ -4904,12 +6729,30 @@
4904
6729
  }
4905
6730
  },
4906
6731
  "required": [
4907
- "text"
6732
+ "text"
6733
+ ],
6734
+ "additionalProperties": false
6735
+ },
6736
+ {
6737
+ "type": "object",
6738
+ "properties": {
6739
+ "textAny": {
6740
+ "minItems": 1,
6741
+ "type": "array",
6742
+ "items": {
6743
+ "type": "string",
6744
+ "minLength": 1
6745
+ },
6746
+ "description": "Ordered text variants; first visible match wins"
6747
+ }
6748
+ },
6749
+ "required": [
6750
+ "textAny"
4908
6751
  ],
4909
6752
  "additionalProperties": false
4910
6753
  }
4911
6754
  ],
4912
- "description": "Element to tap: elementId or text"
6755
+ "description": "Element to tap: elementId, text, or ordered text variants"
4913
6756
  },
4914
6757
  "sibling": {
4915
6758
  "description": "Tap a clickable sibling of the match, e.g. checkbox beside label",
@@ -4965,6 +6808,12 @@
4965
6808
  "random"
4966
6809
  ]
4967
6810
  },
6811
+ "index": {
6812
+ "description": "0-based index to tap the Nth on-screen match (in hierarchy order, i.e. top-to-bottom for a vertical list) instead of applying selectionStrategy — for repeated controls with no unique text. Out of range → no match.",
6813
+ "type": "integer",
6814
+ "minimum": 0,
6815
+ "maximum": 9007199254740991
6816
+ },
4968
6817
  "duration": {
4969
6818
  "description": "Long press duration (ms)",
4970
6819
  "type": "number"
@@ -5043,34 +6892,22 @@
5043
6892
  "type": "object",
5044
6893
  "properties": {
5045
6894
  "left": {
5046
- "type": "integer",
5047
- "minimum": -9007199254740991,
5048
- "maximum": 9007199254740991
6895
+ "type": "number"
5049
6896
  },
5050
6897
  "top": {
5051
- "type": "integer",
5052
- "minimum": -9007199254740991,
5053
- "maximum": 9007199254740991
6898
+ "type": "number"
5054
6899
  },
5055
6900
  "right": {
5056
- "type": "integer",
5057
- "minimum": -9007199254740991,
5058
- "maximum": 9007199254740991
6901
+ "type": "number"
5059
6902
  },
5060
6903
  "bottom": {
5061
- "type": "integer",
5062
- "minimum": -9007199254740991,
5063
- "maximum": 9007199254740991
6904
+ "type": "number"
5064
6905
  },
5065
6906
  "centerX": {
5066
- "type": "integer",
5067
- "minimum": -9007199254740991,
5068
- "maximum": 9007199254740991
6907
+ "type": "number"
5069
6908
  },
5070
6909
  "centerY": {
5071
- "type": "integer",
5072
- "minimum": -9007199254740991,
5073
- "maximum": 9007199254740991
6910
+ "type": "number"
5074
6911
  }
5075
6912
  },
5076
6913
  "required": [
@@ -5079,7 +6916,8 @@
5079
6916
  "right",
5080
6917
  "bottom"
5081
6918
  ],
5082
- "additionalProperties": false
6919
+ "additionalProperties": false,
6920
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
5083
6921
  },
5084
6922
  "text": {
5085
6923
  "type": "string"
@@ -5087,9 +6925,21 @@
5087
6925
  "resource-id": {
5088
6926
  "type": "string"
5089
6927
  },
6928
+ "view-id": {
6929
+ "type": "string"
6930
+ },
5090
6931
  "content-desc": {
5091
6932
  "type": "string"
5092
6933
  },
6934
+ "occlusionState": {
6935
+ "type": "string"
6936
+ },
6937
+ "occludedBy": {
6938
+ "type": "string"
6939
+ },
6940
+ "occludedByViewId": {
6941
+ "type": "string"
6942
+ },
5093
6943
  "class": {
5094
6944
  "type": "string"
5095
6945
  },
@@ -5238,527 +7088,844 @@
5238
7088
  "additionalProperties": {}
5239
7089
  },
5240
7090
  "observation": {
5241
- "type": "object",
5242
- "properties": {
5243
- "selectedElements": {
5244
- "type": "array",
5245
- "items": {
5246
- "type": "object",
5247
- "properties": {
5248
- "text": {
5249
- "type": "string"
5250
- },
5251
- "resourceId": {
5252
- "type": "string"
5253
- },
5254
- "contentDesc": {
5255
- "type": "string"
5256
- },
5257
- "bounds": {
7091
+ "anyOf": [
7092
+ {
7093
+ "type": "object",
7094
+ "properties": {
7095
+ "selectedElements": {
7096
+ "type": "array",
7097
+ "items": {
5258
7098
  "type": "object",
5259
7099
  "properties": {
5260
- "left": {
5261
- "type": "integer",
5262
- "minimum": -9007199254740991,
5263
- "maximum": 9007199254740991
7100
+ "text": {
7101
+ "type": "string"
5264
7102
  },
5265
- "top": {
5266
- "type": "integer",
5267
- "minimum": -9007199254740991,
5268
- "maximum": 9007199254740991
7103
+ "resourceId": {
7104
+ "type": "string"
5269
7105
  },
5270
- "right": {
5271
- "type": "integer",
5272
- "minimum": -9007199254740991,
5273
- "maximum": 9007199254740991
7106
+ "contentDesc": {
7107
+ "type": "string"
5274
7108
  },
5275
- "bottom": {
5276
- "type": "integer",
5277
- "minimum": -9007199254740991,
5278
- "maximum": 9007199254740991
7109
+ "bounds": {
7110
+ "type": "object",
7111
+ "properties": {
7112
+ "left": {
7113
+ "type": "number"
7114
+ },
7115
+ "top": {
7116
+ "type": "number"
7117
+ },
7118
+ "right": {
7119
+ "type": "number"
7120
+ },
7121
+ "bottom": {
7122
+ "type": "number"
7123
+ },
7124
+ "centerX": {
7125
+ "type": "number"
7126
+ },
7127
+ "centerY": {
7128
+ "type": "number"
7129
+ }
7130
+ },
7131
+ "required": [
7132
+ "left",
7133
+ "top",
7134
+ "right",
7135
+ "bottom"
7136
+ ],
7137
+ "additionalProperties": false,
7138
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
5279
7139
  },
5280
- "centerX": {
7140
+ "indexInMatches": {
5281
7141
  "type": "integer",
5282
7142
  "minimum": -9007199254740991,
5283
7143
  "maximum": 9007199254740991
5284
7144
  },
5285
- "centerY": {
7145
+ "totalMatches": {
5286
7146
  "type": "integer",
5287
7147
  "minimum": -9007199254740991,
5288
7148
  "maximum": 9007199254740991
5289
- }
5290
- },
5291
- "required": [
5292
- "left",
5293
- "top",
5294
- "right",
5295
- "bottom"
5296
- ],
5297
- "additionalProperties": false
5298
- },
5299
- "indexInMatches": {
5300
- "type": "integer",
5301
- "minimum": -9007199254740991,
5302
- "maximum": 9007199254740991
5303
- },
5304
- "totalMatches": {
5305
- "type": "integer",
5306
- "minimum": -9007199254740991,
5307
- "maximum": 9007199254740991
5308
- },
5309
- "selectionStrategy": {
5310
- "type": "string"
5311
- },
5312
- "selectedState": {
5313
- "type": "object",
5314
- "properties": {
5315
- "method": {
5316
- "type": "string",
5317
- "enum": [
5318
- "accessibility",
5319
- "visual"
5320
- ]
5321
- },
5322
- "confidence": {
5323
- "type": "number"
5324
7149
  },
5325
- "reason": {
7150
+ "selectionStrategy": {
5326
7151
  "type": "string"
7152
+ },
7153
+ "selectedState": {
7154
+ "type": "object",
7155
+ "properties": {
7156
+ "method": {
7157
+ "type": "string",
7158
+ "enum": [
7159
+ "accessibility",
7160
+ "visual"
7161
+ ]
7162
+ },
7163
+ "confidence": {
7164
+ "type": "number"
7165
+ },
7166
+ "reason": {
7167
+ "type": "string"
7168
+ }
7169
+ },
7170
+ "required": [
7171
+ "method",
7172
+ "confidence"
7173
+ ],
7174
+ "additionalProperties": false
5327
7175
  }
5328
7176
  },
5329
- "required": [
5330
- "method",
5331
- "confidence"
5332
- ],
5333
- "additionalProperties": false
7177
+ "additionalProperties": {}
5334
7178
  }
5335
7179
  },
5336
- "additionalProperties": {}
5337
- }
5338
- },
5339
- "focusedElement": {
5340
- "type": "object",
5341
- "properties": {
5342
- "bounds": {
7180
+ "focusedElement": {
7181
+ "type": "object",
7182
+ "properties": {
7183
+ "bounds": {
7184
+ "type": "object",
7185
+ "properties": {
7186
+ "left": {
7187
+ "type": "number"
7188
+ },
7189
+ "top": {
7190
+ "type": "number"
7191
+ },
7192
+ "right": {
7193
+ "type": "number"
7194
+ },
7195
+ "bottom": {
7196
+ "type": "number"
7197
+ },
7198
+ "centerX": {
7199
+ "type": "number"
7200
+ },
7201
+ "centerY": {
7202
+ "type": "number"
7203
+ }
7204
+ },
7205
+ "required": [
7206
+ "left",
7207
+ "top",
7208
+ "right",
7209
+ "bottom"
7210
+ ],
7211
+ "additionalProperties": false,
7212
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
7213
+ },
7214
+ "text": {
7215
+ "type": "string"
7216
+ },
7217
+ "resource-id": {
7218
+ "type": "string"
7219
+ },
7220
+ "view-id": {
7221
+ "type": "string"
7222
+ },
7223
+ "content-desc": {
7224
+ "type": "string"
7225
+ },
7226
+ "occlusionState": {
7227
+ "type": "string"
7228
+ },
7229
+ "occludedBy": {
7230
+ "type": "string"
7231
+ },
7232
+ "occludedByViewId": {
7233
+ "type": "string"
7234
+ },
7235
+ "class": {
7236
+ "type": "string"
7237
+ },
7238
+ "package": {
7239
+ "type": "string"
7240
+ },
7241
+ "checkable": {
7242
+ "anyOf": [
7243
+ {
7244
+ "type": "boolean"
7245
+ },
7246
+ {
7247
+ "type": "string",
7248
+ "const": "true"
7249
+ },
7250
+ {
7251
+ "type": "string",
7252
+ "const": "false"
7253
+ }
7254
+ ]
7255
+ },
7256
+ "checked": {
7257
+ "anyOf": [
7258
+ {
7259
+ "type": "boolean"
7260
+ },
7261
+ {
7262
+ "type": "string",
7263
+ "const": "true"
7264
+ },
7265
+ {
7266
+ "type": "string",
7267
+ "const": "false"
7268
+ }
7269
+ ]
7270
+ },
7271
+ "clickable": {
7272
+ "anyOf": [
7273
+ {
7274
+ "type": "boolean"
7275
+ },
7276
+ {
7277
+ "type": "string",
7278
+ "const": "true"
7279
+ },
7280
+ {
7281
+ "type": "string",
7282
+ "const": "false"
7283
+ }
7284
+ ]
7285
+ },
7286
+ "enabled": {
7287
+ "anyOf": [
7288
+ {
7289
+ "type": "boolean"
7290
+ },
7291
+ {
7292
+ "type": "string",
7293
+ "const": "true"
7294
+ },
7295
+ {
7296
+ "type": "string",
7297
+ "const": "false"
7298
+ }
7299
+ ]
7300
+ },
7301
+ "focusable": {
7302
+ "anyOf": [
7303
+ {
7304
+ "type": "boolean"
7305
+ },
7306
+ {
7307
+ "type": "string",
7308
+ "const": "true"
7309
+ },
7310
+ {
7311
+ "type": "string",
7312
+ "const": "false"
7313
+ }
7314
+ ]
7315
+ },
7316
+ "focused": {
7317
+ "anyOf": [
7318
+ {
7319
+ "type": "boolean"
7320
+ },
7321
+ {
7322
+ "type": "string",
7323
+ "const": "true"
7324
+ },
7325
+ {
7326
+ "type": "string",
7327
+ "const": "false"
7328
+ }
7329
+ ]
7330
+ },
7331
+ "accessibility-focused": {
7332
+ "anyOf": [
7333
+ {
7334
+ "type": "boolean"
7335
+ },
7336
+ {
7337
+ "type": "string",
7338
+ "const": "true"
7339
+ },
7340
+ {
7341
+ "type": "string",
7342
+ "const": "false"
7343
+ }
7344
+ ]
7345
+ },
7346
+ "scrollable": {
7347
+ "anyOf": [
7348
+ {
7349
+ "type": "boolean"
7350
+ },
7351
+ {
7352
+ "type": "string",
7353
+ "const": "true"
7354
+ },
7355
+ {
7356
+ "type": "string",
7357
+ "const": "false"
7358
+ }
7359
+ ]
7360
+ },
7361
+ "selected": {
7362
+ "anyOf": [
7363
+ {
7364
+ "type": "boolean"
7365
+ },
7366
+ {
7367
+ "type": "string",
7368
+ "const": "true"
7369
+ },
7370
+ {
7371
+ "type": "string",
7372
+ "const": "false"
7373
+ }
7374
+ ]
7375
+ }
7376
+ },
7377
+ "required": [
7378
+ "bounds"
7379
+ ],
7380
+ "additionalProperties": {}
7381
+ },
7382
+ "accessibilityFocusedElement": {
5343
7383
  "type": "object",
5344
7384
  "properties": {
5345
- "left": {
5346
- "type": "integer",
5347
- "minimum": -9007199254740991,
5348
- "maximum": 9007199254740991
7385
+ "bounds": {
7386
+ "type": "object",
7387
+ "properties": {
7388
+ "left": {
7389
+ "type": "number"
7390
+ },
7391
+ "top": {
7392
+ "type": "number"
7393
+ },
7394
+ "right": {
7395
+ "type": "number"
7396
+ },
7397
+ "bottom": {
7398
+ "type": "number"
7399
+ },
7400
+ "centerX": {
7401
+ "type": "number"
7402
+ },
7403
+ "centerY": {
7404
+ "type": "number"
7405
+ }
7406
+ },
7407
+ "required": [
7408
+ "left",
7409
+ "top",
7410
+ "right",
7411
+ "bottom"
7412
+ ],
7413
+ "additionalProperties": false,
7414
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
5349
7415
  },
5350
- "top": {
5351
- "type": "integer",
5352
- "minimum": -9007199254740991,
5353
- "maximum": 9007199254740991
7416
+ "text": {
7417
+ "type": "string"
5354
7418
  },
5355
- "right": {
5356
- "type": "integer",
5357
- "minimum": -9007199254740991,
5358
- "maximum": 9007199254740991
7419
+ "resource-id": {
7420
+ "type": "string"
5359
7421
  },
5360
- "bottom": {
5361
- "type": "integer",
5362
- "minimum": -9007199254740991,
5363
- "maximum": 9007199254740991
7422
+ "view-id": {
7423
+ "type": "string"
5364
7424
  },
5365
- "centerX": {
5366
- "type": "integer",
5367
- "minimum": -9007199254740991,
5368
- "maximum": 9007199254740991
7425
+ "content-desc": {
7426
+ "type": "string"
5369
7427
  },
5370
- "centerY": {
5371
- "type": "integer",
5372
- "minimum": -9007199254740991,
5373
- "maximum": 9007199254740991
5374
- }
5375
- },
5376
- "required": [
5377
- "left",
5378
- "top",
5379
- "right",
5380
- "bottom"
5381
- ],
5382
- "additionalProperties": false
5383
- },
5384
- "text": {
5385
- "type": "string"
5386
- },
5387
- "resource-id": {
5388
- "type": "string"
5389
- },
5390
- "content-desc": {
5391
- "type": "string"
5392
- },
5393
- "class": {
5394
- "type": "string"
5395
- },
5396
- "package": {
5397
- "type": "string"
5398
- },
5399
- "checkable": {
5400
- "anyOf": [
5401
- {
5402
- "type": "boolean"
7428
+ "occlusionState": {
7429
+ "type": "string"
5403
7430
  },
5404
- {
5405
- "type": "string",
5406
- "const": "true"
7431
+ "occludedBy": {
7432
+ "type": "string"
5407
7433
  },
5408
- {
5409
- "type": "string",
5410
- "const": "false"
5411
- }
5412
- ]
5413
- },
5414
- "checked": {
5415
- "anyOf": [
5416
- {
5417
- "type": "boolean"
7434
+ "occludedByViewId": {
7435
+ "type": "string"
5418
7436
  },
5419
- {
5420
- "type": "string",
5421
- "const": "true"
7437
+ "class": {
7438
+ "type": "string"
5422
7439
  },
5423
- {
5424
- "type": "string",
5425
- "const": "false"
5426
- }
5427
- ]
5428
- },
5429
- "clickable": {
5430
- "anyOf": [
5431
- {
5432
- "type": "boolean"
7440
+ "package": {
7441
+ "type": "string"
5433
7442
  },
5434
- {
5435
- "type": "string",
5436
- "const": "true"
7443
+ "checkable": {
7444
+ "anyOf": [
7445
+ {
7446
+ "type": "boolean"
7447
+ },
7448
+ {
7449
+ "type": "string",
7450
+ "const": "true"
7451
+ },
7452
+ {
7453
+ "type": "string",
7454
+ "const": "false"
7455
+ }
7456
+ ]
5437
7457
  },
5438
- {
5439
- "type": "string",
5440
- "const": "false"
5441
- }
5442
- ]
5443
- },
5444
- "enabled": {
5445
- "anyOf": [
5446
- {
5447
- "type": "boolean"
7458
+ "checked": {
7459
+ "anyOf": [
7460
+ {
7461
+ "type": "boolean"
7462
+ },
7463
+ {
7464
+ "type": "string",
7465
+ "const": "true"
7466
+ },
7467
+ {
7468
+ "type": "string",
7469
+ "const": "false"
7470
+ }
7471
+ ]
5448
7472
  },
5449
- {
5450
- "type": "string",
5451
- "const": "true"
7473
+ "clickable": {
7474
+ "anyOf": [
7475
+ {
7476
+ "type": "boolean"
7477
+ },
7478
+ {
7479
+ "type": "string",
7480
+ "const": "true"
7481
+ },
7482
+ {
7483
+ "type": "string",
7484
+ "const": "false"
7485
+ }
7486
+ ]
5452
7487
  },
5453
- {
5454
- "type": "string",
5455
- "const": "false"
5456
- }
5457
- ]
5458
- },
5459
- "focusable": {
5460
- "anyOf": [
5461
- {
5462
- "type": "boolean"
7488
+ "enabled": {
7489
+ "anyOf": [
7490
+ {
7491
+ "type": "boolean"
7492
+ },
7493
+ {
7494
+ "type": "string",
7495
+ "const": "true"
7496
+ },
7497
+ {
7498
+ "type": "string",
7499
+ "const": "false"
7500
+ }
7501
+ ]
5463
7502
  },
5464
- {
5465
- "type": "string",
5466
- "const": "true"
7503
+ "focusable": {
7504
+ "anyOf": [
7505
+ {
7506
+ "type": "boolean"
7507
+ },
7508
+ {
7509
+ "type": "string",
7510
+ "const": "true"
7511
+ },
7512
+ {
7513
+ "type": "string",
7514
+ "const": "false"
7515
+ }
7516
+ ]
5467
7517
  },
5468
- {
5469
- "type": "string",
5470
- "const": "false"
5471
- }
5472
- ]
5473
- },
5474
- "focused": {
5475
- "anyOf": [
5476
- {
5477
- "type": "boolean"
7518
+ "focused": {
7519
+ "anyOf": [
7520
+ {
7521
+ "type": "boolean"
7522
+ },
7523
+ {
7524
+ "type": "string",
7525
+ "const": "true"
7526
+ },
7527
+ {
7528
+ "type": "string",
7529
+ "const": "false"
7530
+ }
7531
+ ]
5478
7532
  },
5479
- {
5480
- "type": "string",
5481
- "const": "true"
7533
+ "accessibility-focused": {
7534
+ "anyOf": [
7535
+ {
7536
+ "type": "boolean"
7537
+ },
7538
+ {
7539
+ "type": "string",
7540
+ "const": "true"
7541
+ },
7542
+ {
7543
+ "type": "string",
7544
+ "const": "false"
7545
+ }
7546
+ ]
5482
7547
  },
5483
- {
5484
- "type": "string",
5485
- "const": "false"
7548
+ "scrollable": {
7549
+ "anyOf": [
7550
+ {
7551
+ "type": "boolean"
7552
+ },
7553
+ {
7554
+ "type": "string",
7555
+ "const": "true"
7556
+ },
7557
+ {
7558
+ "type": "string",
7559
+ "const": "false"
7560
+ }
7561
+ ]
7562
+ },
7563
+ "selected": {
7564
+ "anyOf": [
7565
+ {
7566
+ "type": "boolean"
7567
+ },
7568
+ {
7569
+ "type": "string",
7570
+ "const": "true"
7571
+ },
7572
+ {
7573
+ "type": "string",
7574
+ "const": "false"
7575
+ }
7576
+ ]
5486
7577
  }
5487
- ]
7578
+ },
7579
+ "required": [
7580
+ "bounds"
7581
+ ],
7582
+ "additionalProperties": {}
5488
7583
  },
5489
- "accessibility-focused": {
5490
- "anyOf": [
5491
- {
5492
- "type": "boolean"
7584
+ "activeWindow": {
7585
+ "type": "object",
7586
+ "properties": {
7587
+ "appId": {
7588
+ "type": "string"
5493
7589
  },
5494
- {
5495
- "type": "string",
5496
- "const": "true"
7590
+ "activityName": {
7591
+ "type": "string"
5497
7592
  },
5498
- {
5499
- "type": "string",
5500
- "const": "false"
7593
+ "layoutSeqSum": {
7594
+ "type": "integer",
7595
+ "minimum": -9007199254740991,
7596
+ "maximum": 9007199254740991
7597
+ },
7598
+ "type": {
7599
+ "type": "string"
5501
7600
  }
5502
- ]
7601
+ },
7602
+ "additionalProperties": {}
5503
7603
  },
5504
- "scrollable": {
5505
- "anyOf": [
5506
- {
5507
- "type": "boolean"
7604
+ "screenIdentity": {
7605
+ "type": "object",
7606
+ "properties": {
7607
+ "platform": {
7608
+ "type": "string",
7609
+ "enum": [
7610
+ "ios",
7611
+ "android"
7612
+ ]
5508
7613
  },
5509
- {
7614
+ "source": {
5510
7615
  "type": "string",
5511
- "const": "true"
7616
+ "enum": [
7617
+ "heuristic",
7618
+ "sdk"
7619
+ ]
5512
7620
  },
5513
- {
7621
+ "confidence": {
5514
7622
  "type": "string",
5515
- "const": "false"
7623
+ "enum": [
7624
+ "high",
7625
+ "medium",
7626
+ "low"
7627
+ ]
7628
+ },
7629
+ "key": {
7630
+ "type": "string"
7631
+ },
7632
+ "components": {
7633
+ "type": "object",
7634
+ "properties": {
7635
+ "bundleId": {
7636
+ "type": "string"
7637
+ },
7638
+ "navigationTitle": {
7639
+ "type": "string"
7640
+ },
7641
+ "selectedTab": {
7642
+ "type": "string"
7643
+ },
7644
+ "modalClass": {
7645
+ "type": "string"
7646
+ },
7647
+ "modalTitle": {
7648
+ "type": "string"
7649
+ },
7650
+ "focusedElementId": {
7651
+ "type": "string"
7652
+ },
7653
+ "keyboardVisible": {
7654
+ "type": "boolean"
7655
+ }
7656
+ },
7657
+ "additionalProperties": {}
5516
7658
  }
5517
- ]
5518
- },
5519
- "selected": {
5520
- "anyOf": [
5521
- {
5522
- "type": "boolean"
7659
+ },
7660
+ "required": [
7661
+ "platform",
7662
+ "source",
7663
+ "confidence",
7664
+ "key",
7665
+ "components"
7666
+ ],
7667
+ "additionalProperties": {}
7668
+ }
7669
+ },
7670
+ "additionalProperties": {}
7671
+ },
7672
+ {
7673
+ "type": "object",
7674
+ "properties": {
7675
+ "artifact": {
7676
+ "type": "object",
7677
+ "properties": {
7678
+ "path": {
7679
+ "type": "string"
5523
7680
  },
5524
- {
7681
+ "format": {
5525
7682
  "type": "string",
5526
- "const": "true"
7683
+ "const": "json"
5527
7684
  },
5528
- {
5529
- "type": "string",
5530
- "const": "false"
7685
+ "payload": {
7686
+ "type": "string"
7687
+ },
7688
+ "bytes": {
7689
+ "type": "integer",
7690
+ "minimum": 0,
7691
+ "maximum": 9007199254740991
7692
+ },
7693
+ "tool": {
7694
+ "type": "string"
5531
7695
  }
5532
- ]
7696
+ },
7697
+ "required": [
7698
+ "path",
7699
+ "format",
7700
+ "payload",
7701
+ "bytes",
7702
+ "tool"
7703
+ ],
7704
+ "additionalProperties": {}
5533
7705
  }
5534
7706
  },
5535
7707
  "required": [
5536
- "bounds"
7708
+ "artifact"
5537
7709
  ],
5538
7710
  "additionalProperties": {}
7711
+ }
7712
+ ]
7713
+ },
7714
+ "observationDiff": {
7715
+ "type": "object",
7716
+ "properties": {
7717
+ "mode": {
7718
+ "type": "string",
7719
+ "enum": [
7720
+ "diff",
7721
+ "full"
7722
+ ]
7723
+ },
7724
+ "reason": {
7725
+ "type": "string",
7726
+ "enum": [
7727
+ "diff_emitted",
7728
+ "missing_baseline",
7729
+ "screen_changed",
7730
+ "missing_session",
7731
+ "unrenderable_hierarchy",
7732
+ "disabled",
7733
+ "stripped_by_actions_no_observe"
7734
+ ]
5539
7735
  },
5540
- "accessibilityFocusedElement": {
7736
+ "fromScreen": {
5541
7737
  "type": "object",
5542
7738
  "properties": {
5543
- "bounds": {
7739
+ "activeWindow": {
5544
7740
  "type": "object",
5545
7741
  "properties": {
5546
- "left": {
5547
- "type": "integer",
5548
- "minimum": -9007199254740991,
5549
- "maximum": 9007199254740991
5550
- },
5551
- "top": {
5552
- "type": "integer",
5553
- "minimum": -9007199254740991,
5554
- "maximum": 9007199254740991
5555
- },
5556
- "right": {
5557
- "type": "integer",
5558
- "minimum": -9007199254740991,
5559
- "maximum": 9007199254740991
7742
+ "appId": {
7743
+ "type": "string"
5560
7744
  },
5561
- "bottom": {
5562
- "type": "integer",
5563
- "minimum": -9007199254740991,
5564
- "maximum": 9007199254740991
7745
+ "activityName": {
7746
+ "type": "string"
5565
7747
  },
5566
- "centerX": {
7748
+ "layoutSeqSum": {
5567
7749
  "type": "integer",
5568
7750
  "minimum": -9007199254740991,
5569
7751
  "maximum": 9007199254740991
5570
7752
  },
5571
- "centerY": {
5572
- "type": "integer",
5573
- "minimum": -9007199254740991,
5574
- "maximum": 9007199254740991
7753
+ "type": {
7754
+ "type": "string"
5575
7755
  }
5576
7756
  },
5577
- "required": [
5578
- "left",
5579
- "top",
5580
- "right",
5581
- "bottom"
5582
- ],
5583
- "additionalProperties": false
5584
- },
5585
- "text": {
5586
- "type": "string"
5587
- },
5588
- "resource-id": {
5589
- "type": "string"
5590
- },
5591
- "content-desc": {
5592
- "type": "string"
5593
- },
5594
- "class": {
5595
- "type": "string"
7757
+ "additionalProperties": {}
5596
7758
  },
5597
- "package": {
7759
+ "hierarchyPackageName": {
5598
7760
  "type": "string"
5599
7761
  },
5600
- "checkable": {
5601
- "anyOf": [
5602
- {
5603
- "type": "boolean"
5604
- },
5605
- {
5606
- "type": "string",
5607
- "const": "true"
5608
- },
5609
- {
7762
+ "screenIdentity": {
7763
+ "type": "object",
7764
+ "properties": {
7765
+ "platform": {
5610
7766
  "type": "string",
5611
- "const": "false"
5612
- }
5613
- ]
5614
- },
5615
- "checked": {
5616
- "anyOf": [
5617
- {
5618
- "type": "boolean"
7767
+ "enum": [
7768
+ "ios",
7769
+ "android"
7770
+ ]
5619
7771
  },
5620
- {
7772
+ "source": {
5621
7773
  "type": "string",
5622
- "const": "true"
7774
+ "enum": [
7775
+ "heuristic",
7776
+ "sdk"
7777
+ ]
5623
7778
  },
5624
- {
7779
+ "confidence": {
5625
7780
  "type": "string",
5626
- "const": "false"
5627
- }
5628
- ]
5629
- },
5630
- "clickable": {
5631
- "anyOf": [
5632
- {
5633
- "type": "boolean"
7781
+ "enum": [
7782
+ "high",
7783
+ "medium",
7784
+ "low"
7785
+ ]
5634
7786
  },
5635
- {
5636
- "type": "string",
5637
- "const": "true"
7787
+ "key": {
7788
+ "type": "string"
5638
7789
  },
5639
- {
5640
- "type": "string",
5641
- "const": "false"
7790
+ "components": {
7791
+ "type": "object",
7792
+ "properties": {
7793
+ "bundleId": {
7794
+ "type": "string"
7795
+ },
7796
+ "navigationTitle": {
7797
+ "type": "string"
7798
+ },
7799
+ "selectedTab": {
7800
+ "type": "string"
7801
+ },
7802
+ "modalClass": {
7803
+ "type": "string"
7804
+ },
7805
+ "modalTitle": {
7806
+ "type": "string"
7807
+ },
7808
+ "focusedElementId": {
7809
+ "type": "string"
7810
+ },
7811
+ "keyboardVisible": {
7812
+ "type": "boolean"
7813
+ }
7814
+ },
7815
+ "additionalProperties": {}
5642
7816
  }
5643
- ]
5644
- },
5645
- "enabled": {
5646
- "anyOf": [
5647
- {
5648
- "type": "boolean"
5649
- },
5650
- {
5651
- "type": "string",
5652
- "const": "true"
7817
+ },
7818
+ "required": [
7819
+ "platform",
7820
+ "source",
7821
+ "confidence",
7822
+ "key",
7823
+ "components"
7824
+ ],
7825
+ "additionalProperties": {}
7826
+ }
7827
+ },
7828
+ "additionalProperties": {}
7829
+ },
7830
+ "toScreen": {
7831
+ "type": "object",
7832
+ "properties": {
7833
+ "activeWindow": {
7834
+ "type": "object",
7835
+ "properties": {
7836
+ "appId": {
7837
+ "type": "string"
5653
7838
  },
5654
- {
5655
- "type": "string",
5656
- "const": "false"
5657
- }
5658
- ]
5659
- },
5660
- "focusable": {
5661
- "anyOf": [
5662
- {
5663
- "type": "boolean"
7839
+ "activityName": {
7840
+ "type": "string"
5664
7841
  },
5665
- {
5666
- "type": "string",
5667
- "const": "true"
7842
+ "layoutSeqSum": {
7843
+ "type": "integer",
7844
+ "minimum": -9007199254740991,
7845
+ "maximum": 9007199254740991
5668
7846
  },
5669
- {
5670
- "type": "string",
5671
- "const": "false"
7847
+ "type": {
7848
+ "type": "string"
5672
7849
  }
5673
- ]
7850
+ },
7851
+ "additionalProperties": {}
5674
7852
  },
5675
- "focused": {
5676
- "anyOf": [
5677
- {
5678
- "type": "boolean"
5679
- },
5680
- {
5681
- "type": "string",
5682
- "const": "true"
5683
- },
5684
- {
5685
- "type": "string",
5686
- "const": "false"
5687
- }
5688
- ]
7853
+ "hierarchyPackageName": {
7854
+ "type": "string"
5689
7855
  },
5690
- "accessibility-focused": {
5691
- "anyOf": [
5692
- {
5693
- "type": "boolean"
5694
- },
5695
- {
5696
- "type": "string",
5697
- "const": "true"
5698
- },
5699
- {
7856
+ "screenIdentity": {
7857
+ "type": "object",
7858
+ "properties": {
7859
+ "platform": {
5700
7860
  "type": "string",
5701
- "const": "false"
5702
- }
5703
- ]
5704
- },
5705
- "scrollable": {
5706
- "anyOf": [
5707
- {
5708
- "type": "boolean"
7861
+ "enum": [
7862
+ "ios",
7863
+ "android"
7864
+ ]
5709
7865
  },
5710
- {
7866
+ "source": {
5711
7867
  "type": "string",
5712
- "const": "true"
7868
+ "enum": [
7869
+ "heuristic",
7870
+ "sdk"
7871
+ ]
5713
7872
  },
5714
- {
7873
+ "confidence": {
5715
7874
  "type": "string",
5716
- "const": "false"
5717
- }
5718
- ]
5719
- },
5720
- "selected": {
5721
- "anyOf": [
5722
- {
5723
- "type": "boolean"
7875
+ "enum": [
7876
+ "high",
7877
+ "medium",
7878
+ "low"
7879
+ ]
5724
7880
  },
5725
- {
5726
- "type": "string",
5727
- "const": "true"
7881
+ "key": {
7882
+ "type": "string"
5728
7883
  },
5729
- {
5730
- "type": "string",
5731
- "const": "false"
7884
+ "components": {
7885
+ "type": "object",
7886
+ "properties": {
7887
+ "bundleId": {
7888
+ "type": "string"
7889
+ },
7890
+ "navigationTitle": {
7891
+ "type": "string"
7892
+ },
7893
+ "selectedTab": {
7894
+ "type": "string"
7895
+ },
7896
+ "modalClass": {
7897
+ "type": "string"
7898
+ },
7899
+ "modalTitle": {
7900
+ "type": "string"
7901
+ },
7902
+ "focusedElementId": {
7903
+ "type": "string"
7904
+ },
7905
+ "keyboardVisible": {
7906
+ "type": "boolean"
7907
+ }
7908
+ },
7909
+ "additionalProperties": {}
5732
7910
  }
5733
- ]
5734
- }
5735
- },
5736
- "required": [
5737
- "bounds"
5738
- ],
5739
- "additionalProperties": {}
5740
- },
5741
- "activeWindow": {
5742
- "type": "object",
5743
- "properties": {
5744
- "appId": {
5745
- "type": "string"
5746
- },
5747
- "activityName": {
5748
- "type": "string"
5749
- },
5750
- "layoutSeqSum": {
5751
- "type": "integer",
5752
- "minimum": -9007199254740991,
5753
- "maximum": 9007199254740991
5754
- },
5755
- "type": {
5756
- "type": "string"
7911
+ },
7912
+ "required": [
7913
+ "platform",
7914
+ "source",
7915
+ "confidence",
7916
+ "key",
7917
+ "components"
7918
+ ],
7919
+ "additionalProperties": {}
5757
7920
  }
5758
7921
  },
5759
7922
  "additionalProperties": {}
5760
7923
  }
5761
7924
  },
7925
+ "required": [
7926
+ "mode",
7927
+ "reason"
7928
+ ],
5762
7929
  "additionalProperties": {}
5763
7930
  },
5764
7931
  "selectedElement": {
@@ -5777,34 +7944,22 @@
5777
7944
  "type": "object",
5778
7945
  "properties": {
5779
7946
  "left": {
5780
- "type": "integer",
5781
- "minimum": -9007199254740991,
5782
- "maximum": 9007199254740991
7947
+ "type": "number"
5783
7948
  },
5784
7949
  "top": {
5785
- "type": "integer",
5786
- "minimum": -9007199254740991,
5787
- "maximum": 9007199254740991
7950
+ "type": "number"
5788
7951
  },
5789
7952
  "right": {
5790
- "type": "integer",
5791
- "minimum": -9007199254740991,
5792
- "maximum": 9007199254740991
7953
+ "type": "number"
5793
7954
  },
5794
7955
  "bottom": {
5795
- "type": "integer",
5796
- "minimum": -9007199254740991,
5797
- "maximum": 9007199254740991
7956
+ "type": "number"
5798
7957
  },
5799
7958
  "centerX": {
5800
- "type": "integer",
5801
- "minimum": -9007199254740991,
5802
- "maximum": 9007199254740991
7959
+ "type": "number"
5803
7960
  },
5804
7961
  "centerY": {
5805
- "type": "integer",
5806
- "minimum": -9007199254740991,
5807
- "maximum": 9007199254740991
7962
+ "type": "number"
5808
7963
  }
5809
7964
  },
5810
7965
  "required": [
@@ -5813,7 +7968,8 @@
5813
7968
  "right",
5814
7969
  "bottom"
5815
7970
  ],
5816
- "additionalProperties": false
7971
+ "additionalProperties": false,
7972
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
5817
7973
  },
5818
7974
  "indexInMatches": {
5819
7975
  "type": "integer",
@@ -5872,34 +8028,22 @@
5872
8028
  "type": "object",
5873
8029
  "properties": {
5874
8030
  "left": {
5875
- "type": "integer",
5876
- "minimum": -9007199254740991,
5877
- "maximum": 9007199254740991
8031
+ "type": "number"
5878
8032
  },
5879
8033
  "top": {
5880
- "type": "integer",
5881
- "minimum": -9007199254740991,
5882
- "maximum": 9007199254740991
8034
+ "type": "number"
5883
8035
  },
5884
8036
  "right": {
5885
- "type": "integer",
5886
- "minimum": -9007199254740991,
5887
- "maximum": 9007199254740991
8037
+ "type": "number"
5888
8038
  },
5889
8039
  "bottom": {
5890
- "type": "integer",
5891
- "minimum": -9007199254740991,
5892
- "maximum": 9007199254740991
8040
+ "type": "number"
5893
8041
  },
5894
8042
  "centerX": {
5895
- "type": "integer",
5896
- "minimum": -9007199254740991,
5897
- "maximum": 9007199254740991
8043
+ "type": "number"
5898
8044
  },
5899
8045
  "centerY": {
5900
- "type": "integer",
5901
- "minimum": -9007199254740991,
5902
- "maximum": 9007199254740991
8046
+ "type": "number"
5903
8047
  }
5904
8048
  },
5905
8049
  "required": [
@@ -5908,7 +8052,8 @@
5908
8052
  "right",
5909
8053
  "bottom"
5910
8054
  ],
5911
- "additionalProperties": false
8055
+ "additionalProperties": false,
8056
+ "description": "Element bounds. Default: object {left, top, right, bottom} (+ optional centerX/centerY). Under --observe-result-compact: positional tuple [left, top, right, bottom]."
5912
8057
  },
5913
8058
  "indexInMatches": {
5914
8059
  "type": "integer",