@kaeawc/auto-mobile 0.0.40 → 0.0.42

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 +2549 -546
  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 +533 -390
  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 +9 -4
  46. package/schemas/test-plan.schema.json +6 -2
  47. package/schemas/tool-definitions.json +2549 -546
@@ -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
@@ -3136,9 +3150,109 @@
3136
3150
  {
3137
3151
  "type": "object",
3138
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
+ },
3139
3162
  "elementId": {
3140
- "type": "string",
3141
- "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
+ ]
3142
3256
  },
3143
3257
  "timeout": {
3144
3258
  "description": "Wait timeout ms (default: 5000)",
@@ -3177,57 +3291,304 @@
3177
3291
  }
3178
3292
  },
3179
3293
  "required": [
3180
- "elementId"
3294
+ "textAny"
3181
3295
  ],
3182
3296
  "additionalProperties": false
3183
3297
  },
3184
3298
  {
3185
- "type": "object",
3186
- "properties": {
3187
- "text": {
3188
- "type": "string",
3189
- "description": "Element text"
3190
- },
3191
- "timeout": {
3192
- "description": "Wait timeout ms (default: 5000)",
3193
- "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
3194
3453
  },
3195
- "container": {
3196
- "description": "Scope match to a container",
3454
+ {
3197
3455
  "anyOf": [
3198
3456
  {
3199
3457
  "type": "object",
3200
3458
  "properties": {
3201
3459
  "elementId": {
3202
- "type": "string",
3203
- "description": "Container resource ID"
3460
+ "type": "string"
3204
3461
  }
3205
3462
  },
3206
3463
  "required": [
3207
3464
  "elementId"
3208
3465
  ],
3209
- "additionalProperties": false
3466
+ "additionalProperties": {}
3210
3467
  },
3211
3468
  {
3212
3469
  "type": "object",
3213
3470
  "properties": {
3214
3471
  "text": {
3215
- "type": "string",
3216
- "description": "Container text"
3472
+ "type": "string"
3217
3473
  }
3218
3474
  },
3219
3475
  "required": [
3220
3476
  "text"
3221
3477
  ],
3222
- "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": {}
3223
3588
  }
3224
3589
  ]
3225
3590
  }
3226
- },
3227
- "required": [
3228
- "text"
3229
- ],
3230
- "additionalProperties": false
3591
+ ]
3231
3592
  }
3232
3593
  ]
3233
3594
  },
@@ -3257,15 +3618,1337 @@
3257
3618
  "required": [
3258
3619
  "platform"
3259
3620
  ],
3260
- "additionalProperties": false
3261
- }
3262
- },
3263
- {
3264
- "name": "openLink",
3265
- "description": "Open URL in browser",
3266
- "inputSchema": {
3267
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3268
- "type": "object",
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
+ }
3662
+ }
3663
+ },
3664
+ "then": false
3665
+ },
3666
+ "outputSchema": {
3667
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3668
+ "type": "object",
3669
+ "properties": {
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"
3687
+ ],
3688
+ "additionalProperties": false
3689
+ },
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"
3719
+ ],
3720
+ "additionalProperties": false
3721
+ },
3722
+ "viewHierarchy": {
3723
+ "type": "object",
3724
+ "properties": {
3725
+ "hierarchy": {
3726
+ "type": "object",
3727
+ "properties": {
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
+ ]
3743
+ }
3744
+ },
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",
3269
4952
  "properties": {
3270
4953
  "url": {
3271
4954
  "type": "string",
@@ -3382,7 +5065,7 @@
3382
5065
  "type": "number"
3383
5066
  },
3384
5067
  "rotationDegrees": {
3385
- "description": "Rotation during pinch (degrees)",
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.",
3386
5069
  "type": "number"
3387
5070
  },
3388
5071
  "includeSystemInsets": {
@@ -3513,7 +5196,7 @@
3513
5196
  "appId": {
3514
5197
  "type": "string",
3515
5198
  "minLength": 1,
3516
- "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"
3517
5200
  },
3518
5201
  "platform": {
3519
5202
  "type": "string",
@@ -3993,7 +5676,7 @@
3993
5676
  },
3994
5677
  {
3995
5678
  "name": "setAppPermissions",
3996
- "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)",
3997
5680
  "inputSchema": {
3998
5681
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3999
5682
  "type": "object",
@@ -4002,7 +5685,7 @@
4002
5685
  "type": "string"
4003
5686
  },
4004
5687
  "action": {
4005
- "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'].",
4006
5689
  "type": "string",
4007
5690
  "enum": [
4008
5691
  "grant",
@@ -4011,7 +5694,7 @@
4011
5694
  ]
4012
5695
  },
4013
5696
  "permissions": {
4014
- "description": "Runtime permissions or simulator privacy services to change",
5697
+ "description": "Runtime permissions or simulator privacy services to change; iOS physical reset accepts 'all'",
4015
5698
  "type": "array",
4016
5699
  "items": {
4017
5700
  "type": "string",
@@ -5046,12 +6729,30 @@
5046
6729
  }
5047
6730
  },
5048
6731
  "required": [
5049
- "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"
5050
6751
  ],
5051
6752
  "additionalProperties": false
5052
6753
  }
5053
6754
  ],
5054
- "description": "Element to tap: elementId or text"
6755
+ "description": "Element to tap: elementId, text, or ordered text variants"
5055
6756
  },
5056
6757
  "sibling": {
5057
6758
  "description": "Tap a clickable sibling of the match, e.g. checkbox beside label",
@@ -5107,6 +6808,12 @@
5107
6808
  "random"
5108
6809
  ]
5109
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
+ },
5110
6817
  "duration": {
5111
6818
  "description": "Long press duration (ms)",
5112
6819
  "type": "number"
@@ -5185,34 +6892,22 @@
5185
6892
  "type": "object",
5186
6893
  "properties": {
5187
6894
  "left": {
5188
- "type": "integer",
5189
- "minimum": -9007199254740991,
5190
- "maximum": 9007199254740991
6895
+ "type": "number"
5191
6896
  },
5192
6897
  "top": {
5193
- "type": "integer",
5194
- "minimum": -9007199254740991,
5195
- "maximum": 9007199254740991
6898
+ "type": "number"
5196
6899
  },
5197
6900
  "right": {
5198
- "type": "integer",
5199
- "minimum": -9007199254740991,
5200
- "maximum": 9007199254740991
6901
+ "type": "number"
5201
6902
  },
5202
6903
  "bottom": {
5203
- "type": "integer",
5204
- "minimum": -9007199254740991,
5205
- "maximum": 9007199254740991
6904
+ "type": "number"
5206
6905
  },
5207
6906
  "centerX": {
5208
- "type": "integer",
5209
- "minimum": -9007199254740991,
5210
- "maximum": 9007199254740991
6907
+ "type": "number"
5211
6908
  },
5212
6909
  "centerY": {
5213
- "type": "integer",
5214
- "minimum": -9007199254740991,
5215
- "maximum": 9007199254740991
6910
+ "type": "number"
5216
6911
  }
5217
6912
  },
5218
6913
  "required": [
@@ -5221,7 +6916,8 @@
5221
6916
  "right",
5222
6917
  "bottom"
5223
6918
  ],
5224
- "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]."
5225
6921
  },
5226
6922
  "text": {
5227
6923
  "type": "string"
@@ -5229,9 +6925,21 @@
5229
6925
  "resource-id": {
5230
6926
  "type": "string"
5231
6927
  },
6928
+ "view-id": {
6929
+ "type": "string"
6930
+ },
5232
6931
  "content-desc": {
5233
6932
  "type": "string"
5234
6933
  },
6934
+ "occlusionState": {
6935
+ "type": "string"
6936
+ },
6937
+ "occludedBy": {
6938
+ "type": "string"
6939
+ },
6940
+ "occludedByViewId": {
6941
+ "type": "string"
6942
+ },
5235
6943
  "class": {
5236
6944
  "type": "string"
5237
6945
  },
@@ -5380,527 +7088,844 @@
5380
7088
  "additionalProperties": {}
5381
7089
  },
5382
7090
  "observation": {
5383
- "type": "object",
5384
- "properties": {
5385
- "selectedElements": {
5386
- "type": "array",
5387
- "items": {
5388
- "type": "object",
5389
- "properties": {
5390
- "text": {
5391
- "type": "string"
5392
- },
5393
- "resourceId": {
5394
- "type": "string"
5395
- },
5396
- "contentDesc": {
5397
- "type": "string"
5398
- },
5399
- "bounds": {
7091
+ "anyOf": [
7092
+ {
7093
+ "type": "object",
7094
+ "properties": {
7095
+ "selectedElements": {
7096
+ "type": "array",
7097
+ "items": {
5400
7098
  "type": "object",
5401
7099
  "properties": {
5402
- "left": {
5403
- "type": "integer",
5404
- "minimum": -9007199254740991,
5405
- "maximum": 9007199254740991
7100
+ "text": {
7101
+ "type": "string"
5406
7102
  },
5407
- "top": {
5408
- "type": "integer",
5409
- "minimum": -9007199254740991,
5410
- "maximum": 9007199254740991
7103
+ "resourceId": {
7104
+ "type": "string"
5411
7105
  },
5412
- "right": {
5413
- "type": "integer",
5414
- "minimum": -9007199254740991,
5415
- "maximum": 9007199254740991
7106
+ "contentDesc": {
7107
+ "type": "string"
5416
7108
  },
5417
- "bottom": {
5418
- "type": "integer",
5419
- "minimum": -9007199254740991,
5420
- "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]."
5421
7139
  },
5422
- "centerX": {
7140
+ "indexInMatches": {
5423
7141
  "type": "integer",
5424
7142
  "minimum": -9007199254740991,
5425
7143
  "maximum": 9007199254740991
5426
7144
  },
5427
- "centerY": {
7145
+ "totalMatches": {
5428
7146
  "type": "integer",
5429
7147
  "minimum": -9007199254740991,
5430
7148
  "maximum": 9007199254740991
5431
- }
5432
- },
5433
- "required": [
5434
- "left",
5435
- "top",
5436
- "right",
5437
- "bottom"
5438
- ],
5439
- "additionalProperties": false
5440
- },
5441
- "indexInMatches": {
5442
- "type": "integer",
5443
- "minimum": -9007199254740991,
5444
- "maximum": 9007199254740991
5445
- },
5446
- "totalMatches": {
5447
- "type": "integer",
5448
- "minimum": -9007199254740991,
5449
- "maximum": 9007199254740991
5450
- },
5451
- "selectionStrategy": {
5452
- "type": "string"
5453
- },
5454
- "selectedState": {
5455
- "type": "object",
5456
- "properties": {
5457
- "method": {
5458
- "type": "string",
5459
- "enum": [
5460
- "accessibility",
5461
- "visual"
5462
- ]
5463
- },
5464
- "confidence": {
5465
- "type": "number"
5466
7149
  },
5467
- "reason": {
7150
+ "selectionStrategy": {
5468
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
5469
7175
  }
5470
7176
  },
5471
- "required": [
5472
- "method",
5473
- "confidence"
5474
- ],
5475
- "additionalProperties": false
7177
+ "additionalProperties": {}
5476
7178
  }
5477
7179
  },
5478
- "additionalProperties": {}
5479
- }
5480
- },
5481
- "focusedElement": {
5482
- "type": "object",
5483
- "properties": {
5484
- "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": {
5485
7383
  "type": "object",
5486
7384
  "properties": {
5487
- "left": {
5488
- "type": "integer",
5489
- "minimum": -9007199254740991,
5490
- "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]."
5491
7415
  },
5492
- "top": {
5493
- "type": "integer",
5494
- "minimum": -9007199254740991,
5495
- "maximum": 9007199254740991
7416
+ "text": {
7417
+ "type": "string"
5496
7418
  },
5497
- "right": {
5498
- "type": "integer",
5499
- "minimum": -9007199254740991,
5500
- "maximum": 9007199254740991
7419
+ "resource-id": {
7420
+ "type": "string"
5501
7421
  },
5502
- "bottom": {
5503
- "type": "integer",
5504
- "minimum": -9007199254740991,
5505
- "maximum": 9007199254740991
7422
+ "view-id": {
7423
+ "type": "string"
5506
7424
  },
5507
- "centerX": {
5508
- "type": "integer",
5509
- "minimum": -9007199254740991,
5510
- "maximum": 9007199254740991
7425
+ "content-desc": {
7426
+ "type": "string"
5511
7427
  },
5512
- "centerY": {
5513
- "type": "integer",
5514
- "minimum": -9007199254740991,
5515
- "maximum": 9007199254740991
5516
- }
5517
- },
5518
- "required": [
5519
- "left",
5520
- "top",
5521
- "right",
5522
- "bottom"
5523
- ],
5524
- "additionalProperties": false
5525
- },
5526
- "text": {
5527
- "type": "string"
5528
- },
5529
- "resource-id": {
5530
- "type": "string"
5531
- },
5532
- "content-desc": {
5533
- "type": "string"
5534
- },
5535
- "class": {
5536
- "type": "string"
5537
- },
5538
- "package": {
5539
- "type": "string"
5540
- },
5541
- "checkable": {
5542
- "anyOf": [
5543
- {
5544
- "type": "boolean"
7428
+ "occlusionState": {
7429
+ "type": "string"
5545
7430
  },
5546
- {
5547
- "type": "string",
5548
- "const": "true"
7431
+ "occludedBy": {
7432
+ "type": "string"
5549
7433
  },
5550
- {
5551
- "type": "string",
5552
- "const": "false"
5553
- }
5554
- ]
5555
- },
5556
- "checked": {
5557
- "anyOf": [
5558
- {
5559
- "type": "boolean"
7434
+ "occludedByViewId": {
7435
+ "type": "string"
5560
7436
  },
5561
- {
5562
- "type": "string",
5563
- "const": "true"
7437
+ "class": {
7438
+ "type": "string"
5564
7439
  },
5565
- {
5566
- "type": "string",
5567
- "const": "false"
5568
- }
5569
- ]
5570
- },
5571
- "clickable": {
5572
- "anyOf": [
5573
- {
5574
- "type": "boolean"
7440
+ "package": {
7441
+ "type": "string"
5575
7442
  },
5576
- {
5577
- "type": "string",
5578
- "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
+ ]
5579
7457
  },
5580
- {
5581
- "type": "string",
5582
- "const": "false"
5583
- }
5584
- ]
5585
- },
5586
- "enabled": {
5587
- "anyOf": [
5588
- {
5589
- "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
+ ]
5590
7472
  },
5591
- {
5592
- "type": "string",
5593
- "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
+ ]
5594
7487
  },
5595
- {
5596
- "type": "string",
5597
- "const": "false"
5598
- }
5599
- ]
5600
- },
5601
- "focusable": {
5602
- "anyOf": [
5603
- {
5604
- "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
+ ]
5605
7502
  },
5606
- {
5607
- "type": "string",
5608
- "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
+ ]
5609
7517
  },
5610
- {
5611
- "type": "string",
5612
- "const": "false"
5613
- }
5614
- ]
5615
- },
5616
- "focused": {
5617
- "anyOf": [
5618
- {
5619
- "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
+ ]
5620
7532
  },
5621
- {
5622
- "type": "string",
5623
- "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
+ ]
5624
7547
  },
5625
- {
5626
- "type": "string",
5627
- "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
+ ]
5628
7577
  }
5629
- ]
7578
+ },
7579
+ "required": [
7580
+ "bounds"
7581
+ ],
7582
+ "additionalProperties": {}
5630
7583
  },
5631
- "accessibility-focused": {
5632
- "anyOf": [
5633
- {
5634
- "type": "boolean"
7584
+ "activeWindow": {
7585
+ "type": "object",
7586
+ "properties": {
7587
+ "appId": {
7588
+ "type": "string"
5635
7589
  },
5636
- {
5637
- "type": "string",
5638
- "const": "true"
7590
+ "activityName": {
7591
+ "type": "string"
5639
7592
  },
5640
- {
5641
- "type": "string",
5642
- "const": "false"
7593
+ "layoutSeqSum": {
7594
+ "type": "integer",
7595
+ "minimum": -9007199254740991,
7596
+ "maximum": 9007199254740991
7597
+ },
7598
+ "type": {
7599
+ "type": "string"
5643
7600
  }
5644
- ]
7601
+ },
7602
+ "additionalProperties": {}
5645
7603
  },
5646
- "scrollable": {
5647
- "anyOf": [
5648
- {
5649
- "type": "boolean"
7604
+ "screenIdentity": {
7605
+ "type": "object",
7606
+ "properties": {
7607
+ "platform": {
7608
+ "type": "string",
7609
+ "enum": [
7610
+ "ios",
7611
+ "android"
7612
+ ]
5650
7613
  },
5651
- {
7614
+ "source": {
5652
7615
  "type": "string",
5653
- "const": "true"
7616
+ "enum": [
7617
+ "heuristic",
7618
+ "sdk"
7619
+ ]
5654
7620
  },
5655
- {
7621
+ "confidence": {
5656
7622
  "type": "string",
5657
- "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": {}
5658
7658
  }
5659
- ]
5660
- },
5661
- "selected": {
5662
- "anyOf": [
5663
- {
5664
- "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"
5665
7680
  },
5666
- {
7681
+ "format": {
5667
7682
  "type": "string",
5668
- "const": "true"
7683
+ "const": "json"
5669
7684
  },
5670
- {
5671
- "type": "string",
5672
- "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"
5673
7695
  }
5674
- ]
7696
+ },
7697
+ "required": [
7698
+ "path",
7699
+ "format",
7700
+ "payload",
7701
+ "bytes",
7702
+ "tool"
7703
+ ],
7704
+ "additionalProperties": {}
5675
7705
  }
5676
7706
  },
5677
7707
  "required": [
5678
- "bounds"
7708
+ "artifact"
5679
7709
  ],
5680
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
+ ]
5681
7735
  },
5682
- "accessibilityFocusedElement": {
7736
+ "fromScreen": {
5683
7737
  "type": "object",
5684
7738
  "properties": {
5685
- "bounds": {
7739
+ "activeWindow": {
5686
7740
  "type": "object",
5687
7741
  "properties": {
5688
- "left": {
5689
- "type": "integer",
5690
- "minimum": -9007199254740991,
5691
- "maximum": 9007199254740991
5692
- },
5693
- "top": {
5694
- "type": "integer",
5695
- "minimum": -9007199254740991,
5696
- "maximum": 9007199254740991
5697
- },
5698
- "right": {
5699
- "type": "integer",
5700
- "minimum": -9007199254740991,
5701
- "maximum": 9007199254740991
7742
+ "appId": {
7743
+ "type": "string"
5702
7744
  },
5703
- "bottom": {
5704
- "type": "integer",
5705
- "minimum": -9007199254740991,
5706
- "maximum": 9007199254740991
7745
+ "activityName": {
7746
+ "type": "string"
5707
7747
  },
5708
- "centerX": {
7748
+ "layoutSeqSum": {
5709
7749
  "type": "integer",
5710
7750
  "minimum": -9007199254740991,
5711
7751
  "maximum": 9007199254740991
5712
7752
  },
5713
- "centerY": {
5714
- "type": "integer",
5715
- "minimum": -9007199254740991,
5716
- "maximum": 9007199254740991
7753
+ "type": {
7754
+ "type": "string"
5717
7755
  }
5718
7756
  },
5719
- "required": [
5720
- "left",
5721
- "top",
5722
- "right",
5723
- "bottom"
5724
- ],
5725
- "additionalProperties": false
5726
- },
5727
- "text": {
5728
- "type": "string"
5729
- },
5730
- "resource-id": {
5731
- "type": "string"
5732
- },
5733
- "content-desc": {
5734
- "type": "string"
5735
- },
5736
- "class": {
5737
- "type": "string"
7757
+ "additionalProperties": {}
5738
7758
  },
5739
- "package": {
7759
+ "hierarchyPackageName": {
5740
7760
  "type": "string"
5741
7761
  },
5742
- "checkable": {
5743
- "anyOf": [
5744
- {
5745
- "type": "boolean"
5746
- },
5747
- {
5748
- "type": "string",
5749
- "const": "true"
5750
- },
5751
- {
7762
+ "screenIdentity": {
7763
+ "type": "object",
7764
+ "properties": {
7765
+ "platform": {
5752
7766
  "type": "string",
5753
- "const": "false"
5754
- }
5755
- ]
5756
- },
5757
- "checked": {
5758
- "anyOf": [
5759
- {
5760
- "type": "boolean"
7767
+ "enum": [
7768
+ "ios",
7769
+ "android"
7770
+ ]
5761
7771
  },
5762
- {
7772
+ "source": {
5763
7773
  "type": "string",
5764
- "const": "true"
7774
+ "enum": [
7775
+ "heuristic",
7776
+ "sdk"
7777
+ ]
5765
7778
  },
5766
- {
7779
+ "confidence": {
5767
7780
  "type": "string",
5768
- "const": "false"
5769
- }
5770
- ]
5771
- },
5772
- "clickable": {
5773
- "anyOf": [
5774
- {
5775
- "type": "boolean"
7781
+ "enum": [
7782
+ "high",
7783
+ "medium",
7784
+ "low"
7785
+ ]
5776
7786
  },
5777
- {
5778
- "type": "string",
5779
- "const": "true"
7787
+ "key": {
7788
+ "type": "string"
5780
7789
  },
5781
- {
5782
- "type": "string",
5783
- "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": {}
5784
7816
  }
5785
- ]
5786
- },
5787
- "enabled": {
5788
- "anyOf": [
5789
- {
5790
- "type": "boolean"
5791
- },
5792
- {
5793
- "type": "string",
5794
- "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"
5795
7838
  },
5796
- {
5797
- "type": "string",
5798
- "const": "false"
5799
- }
5800
- ]
5801
- },
5802
- "focusable": {
5803
- "anyOf": [
5804
- {
5805
- "type": "boolean"
7839
+ "activityName": {
7840
+ "type": "string"
5806
7841
  },
5807
- {
5808
- "type": "string",
5809
- "const": "true"
7842
+ "layoutSeqSum": {
7843
+ "type": "integer",
7844
+ "minimum": -9007199254740991,
7845
+ "maximum": 9007199254740991
5810
7846
  },
5811
- {
5812
- "type": "string",
5813
- "const": "false"
7847
+ "type": {
7848
+ "type": "string"
5814
7849
  }
5815
- ]
7850
+ },
7851
+ "additionalProperties": {}
5816
7852
  },
5817
- "focused": {
5818
- "anyOf": [
5819
- {
5820
- "type": "boolean"
5821
- },
5822
- {
5823
- "type": "string",
5824
- "const": "true"
5825
- },
5826
- {
5827
- "type": "string",
5828
- "const": "false"
5829
- }
5830
- ]
7853
+ "hierarchyPackageName": {
7854
+ "type": "string"
5831
7855
  },
5832
- "accessibility-focused": {
5833
- "anyOf": [
5834
- {
5835
- "type": "boolean"
5836
- },
5837
- {
5838
- "type": "string",
5839
- "const": "true"
5840
- },
5841
- {
7856
+ "screenIdentity": {
7857
+ "type": "object",
7858
+ "properties": {
7859
+ "platform": {
5842
7860
  "type": "string",
5843
- "const": "false"
5844
- }
5845
- ]
5846
- },
5847
- "scrollable": {
5848
- "anyOf": [
5849
- {
5850
- "type": "boolean"
7861
+ "enum": [
7862
+ "ios",
7863
+ "android"
7864
+ ]
5851
7865
  },
5852
- {
7866
+ "source": {
5853
7867
  "type": "string",
5854
- "const": "true"
7868
+ "enum": [
7869
+ "heuristic",
7870
+ "sdk"
7871
+ ]
5855
7872
  },
5856
- {
7873
+ "confidence": {
5857
7874
  "type": "string",
5858
- "const": "false"
5859
- }
5860
- ]
5861
- },
5862
- "selected": {
5863
- "anyOf": [
5864
- {
5865
- "type": "boolean"
7875
+ "enum": [
7876
+ "high",
7877
+ "medium",
7878
+ "low"
7879
+ ]
5866
7880
  },
5867
- {
5868
- "type": "string",
5869
- "const": "true"
7881
+ "key": {
7882
+ "type": "string"
5870
7883
  },
5871
- {
5872
- "type": "string",
5873
- "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": {}
5874
7910
  }
5875
- ]
5876
- }
5877
- },
5878
- "required": [
5879
- "bounds"
5880
- ],
5881
- "additionalProperties": {}
5882
- },
5883
- "activeWindow": {
5884
- "type": "object",
5885
- "properties": {
5886
- "appId": {
5887
- "type": "string"
5888
- },
5889
- "activityName": {
5890
- "type": "string"
5891
- },
5892
- "layoutSeqSum": {
5893
- "type": "integer",
5894
- "minimum": -9007199254740991,
5895
- "maximum": 9007199254740991
5896
- },
5897
- "type": {
5898
- "type": "string"
7911
+ },
7912
+ "required": [
7913
+ "platform",
7914
+ "source",
7915
+ "confidence",
7916
+ "key",
7917
+ "components"
7918
+ ],
7919
+ "additionalProperties": {}
5899
7920
  }
5900
7921
  },
5901
7922
  "additionalProperties": {}
5902
7923
  }
5903
7924
  },
7925
+ "required": [
7926
+ "mode",
7927
+ "reason"
7928
+ ],
5904
7929
  "additionalProperties": {}
5905
7930
  },
5906
7931
  "selectedElement": {
@@ -5919,34 +7944,22 @@
5919
7944
  "type": "object",
5920
7945
  "properties": {
5921
7946
  "left": {
5922
- "type": "integer",
5923
- "minimum": -9007199254740991,
5924
- "maximum": 9007199254740991
7947
+ "type": "number"
5925
7948
  },
5926
7949
  "top": {
5927
- "type": "integer",
5928
- "minimum": -9007199254740991,
5929
- "maximum": 9007199254740991
7950
+ "type": "number"
5930
7951
  },
5931
7952
  "right": {
5932
- "type": "integer",
5933
- "minimum": -9007199254740991,
5934
- "maximum": 9007199254740991
7953
+ "type": "number"
5935
7954
  },
5936
7955
  "bottom": {
5937
- "type": "integer",
5938
- "minimum": -9007199254740991,
5939
- "maximum": 9007199254740991
7956
+ "type": "number"
5940
7957
  },
5941
7958
  "centerX": {
5942
- "type": "integer",
5943
- "minimum": -9007199254740991,
5944
- "maximum": 9007199254740991
7959
+ "type": "number"
5945
7960
  },
5946
7961
  "centerY": {
5947
- "type": "integer",
5948
- "minimum": -9007199254740991,
5949
- "maximum": 9007199254740991
7962
+ "type": "number"
5950
7963
  }
5951
7964
  },
5952
7965
  "required": [
@@ -5955,7 +7968,8 @@
5955
7968
  "right",
5956
7969
  "bottom"
5957
7970
  ],
5958
- "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]."
5959
7973
  },
5960
7974
  "indexInMatches": {
5961
7975
  "type": "integer",
@@ -6014,34 +8028,22 @@
6014
8028
  "type": "object",
6015
8029
  "properties": {
6016
8030
  "left": {
6017
- "type": "integer",
6018
- "minimum": -9007199254740991,
6019
- "maximum": 9007199254740991
8031
+ "type": "number"
6020
8032
  },
6021
8033
  "top": {
6022
- "type": "integer",
6023
- "minimum": -9007199254740991,
6024
- "maximum": 9007199254740991
8034
+ "type": "number"
6025
8035
  },
6026
8036
  "right": {
6027
- "type": "integer",
6028
- "minimum": -9007199254740991,
6029
- "maximum": 9007199254740991
8037
+ "type": "number"
6030
8038
  },
6031
8039
  "bottom": {
6032
- "type": "integer",
6033
- "minimum": -9007199254740991,
6034
- "maximum": 9007199254740991
8040
+ "type": "number"
6035
8041
  },
6036
8042
  "centerX": {
6037
- "type": "integer",
6038
- "minimum": -9007199254740991,
6039
- "maximum": 9007199254740991
8043
+ "type": "number"
6040
8044
  },
6041
8045
  "centerY": {
6042
- "type": "integer",
6043
- "minimum": -9007199254740991,
6044
- "maximum": 9007199254740991
8046
+ "type": "number"
6045
8047
  }
6046
8048
  },
6047
8049
  "required": [
@@ -6050,7 +8052,8 @@
6050
8052
  "right",
6051
8053
  "bottom"
6052
8054
  ],
6053
- "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]."
6054
8057
  },
6055
8058
  "indexInMatches": {
6056
8059
  "type": "integer",