@kaeawc/auto-mobile 0.0.92 → 0.0.94
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.
- package/dist/build-info.json +12 -12
- package/dist/schemas/test-plan.schema.json +370 -52
- package/dist/src/ble-peripheral.py +153 -0
- package/dist/src/{chunk-r14wwk37.js → chunk-026y62r9.js} +12 -12
- package/dist/src/chunk-0jyfg947.js +4 -0
- package/dist/src/{chunk-950qcq1e.js → chunk-0zfpp1wh.js} +4 -4
- package/dist/src/chunk-13qxf7ym.js +7 -0
- package/dist/src/chunk-1scenrk7.js +4 -0
- package/dist/src/chunk-1vb5ph1k.js +4 -0
- package/dist/src/chunk-20g565q7.js +5 -0
- package/dist/src/chunk-21h6dhdm.js +5 -0
- package/dist/src/{chunk-2e6s75qv.js → chunk-25mfpthk.js} +8 -8
- package/dist/src/{chunk-9rkfyt6q.js → chunk-2b39zyxc.js} +3 -3
- package/dist/src/chunk-2gzd6wbd.js +4 -0
- package/dist/src/{chunk-eka89q3k.js → chunk-3dntffy9.js} +1 -1
- package/dist/src/chunk-3gfczcsn.js +4 -0
- package/dist/src/chunk-3h5jz1vb.js +9 -0
- package/dist/src/chunk-41zcy6b3.js +5 -0
- package/dist/src/chunk-47n9m2de.js +4 -0
- package/dist/src/chunk-4vxeq0vd.js +58 -0
- package/dist/src/chunk-59dx6qaf.js +4 -0
- package/dist/src/chunk-5sdf9y92.js +4 -0
- package/dist/src/chunk-5wk1t46v.js +5 -0
- package/dist/src/chunk-661c50hh.js +17 -0
- package/dist/src/chunk-68n6bjjd.js +21 -0
- package/dist/src/{chunk-zg67wjkh.js → chunk-69pmjdf2.js} +3 -3
- package/dist/src/chunk-6hrj3jt6.js +145 -0
- package/dist/src/{chunk-b4cxdzwy.js → chunk-6myr26wx.js} +8 -8
- package/dist/src/chunk-6n96k09n.js +4 -0
- package/dist/src/chunk-6vwrbkre.js +4 -0
- package/dist/src/chunk-6wk0yrab.js +4 -0
- package/dist/src/chunk-6yhm9een.js +4 -0
- package/dist/src/chunk-7k7gjg2t.js +7 -0
- package/dist/src/chunk-7n5fz68h.js +4 -0
- package/dist/src/chunk-8cvnpnbp.js +4 -0
- package/dist/src/chunk-8kzv7rk7.js +4 -0
- package/dist/src/chunk-8nj68t1v.js +167 -0
- package/dist/src/{chunk-r20pe1nv.js → chunk-96r3bpg7.js} +3 -3
- package/dist/src/chunk-97x887te.js +4 -0
- package/dist/src/{chunk-sz1a7p43.js → chunk-99a6tbvd.js} +1 -1
- package/dist/src/chunk-9p5d2994.js +5 -0
- package/dist/src/{chunk-w7zsh13a.js → chunk-9q265er0.js} +4 -4
- package/dist/src/chunk-9xgnrv5w.js +5 -0
- package/dist/src/chunk-9xgsmshb.js +5 -0
- package/dist/src/chunk-a02d1wgv.js +4 -0
- package/dist/src/{chunk-km0dy5vc.js → chunk-a9ps00a1.js} +10 -10
- package/dist/src/chunk-aewdveet.js +5 -0
- package/dist/src/chunk-b3tdtq7r.js +9 -0
- package/dist/src/chunk-bn7jx7a2.js +4 -0
- package/dist/src/chunk-bnyw27ja.js +4 -0
- package/dist/src/{chunk-s1zq65ny.js → chunk-bpwsg76p.js} +2 -2
- package/dist/src/chunk-bvranw3g.js +4 -0
- package/dist/src/chunk-c25a84zb.js +4 -0
- package/dist/src/chunk-c27yv1dx.js +5 -0
- package/dist/src/chunk-c3ewxm4x.js +5 -0
- package/dist/src/chunk-cb1ga9rd.js +7 -0
- package/dist/src/chunk-cn7fwy7k.js +4 -0
- package/dist/src/chunk-cnvy4a64.js +4 -0
- package/dist/src/chunk-cqhw4yr6.js +5 -0
- package/dist/src/{chunk-v90es00d.js → chunk-ctmfshjc.js} +2 -2
- package/dist/src/chunk-ctwmhz13.js +4 -0
- package/dist/src/{chunk-qv2918jt.js → chunk-d3jx9bz5.js} +2 -2
- package/dist/src/{chunk-wry6skrm.js → chunk-d6rb08ga.js} +1 -1
- package/dist/src/chunk-ddqhj4eg.js +5 -0
- package/dist/src/{chunk-d57432wq.js → chunk-ddrhs1c3.js} +2 -2
- package/dist/src/chunk-dnjnh9p6.js +4 -0
- package/dist/src/{chunk-ajsrz473.js → chunk-dw5rwgya.js} +3 -3
- package/dist/src/chunk-e0870khr.js +5 -0
- package/dist/src/chunk-ea3k10kj.js +4 -0
- package/dist/src/chunk-emv82m1w.js +7 -0
- package/dist/src/chunk-f3m6pdnx.js +4 -0
- package/dist/src/chunk-f84z32cb.js +4 -0
- package/dist/src/chunk-fpczgf0z.js +4 -0
- package/dist/src/chunk-g2js4c2v.js +971 -0
- package/dist/src/chunk-g3af2qbk.js +5 -0
- package/dist/src/chunk-gadtna7s.js +11 -0
- package/dist/src/{chunk-c9nk1r78.js → chunk-gcyx407v.js} +3 -3
- package/dist/src/{chunk-jdqvcq0a.js → chunk-gfpntwc1.js} +3 -3
- package/dist/src/chunk-gmnm5e3e.js +4 -0
- package/dist/src/chunk-gp6vb5gf.js +4 -0
- package/dist/src/chunk-gppgy7pa.js +4 -0
- package/dist/src/chunk-hegfz0ae.js +5 -0
- package/dist/src/chunk-hpzxdp1k.js +17 -0
- package/dist/src/{chunk-2v7tw1nj.js → chunk-j69g8b50.js} +3 -3
- package/dist/src/chunk-jvstjnqm.js +19 -0
- package/dist/src/chunk-jzqrv78s.js +4 -0
- package/dist/src/chunk-k2948b8d.js +4 -0
- package/dist/src/chunk-k4ftd40d.js +4 -0
- package/dist/src/chunk-kd9vfaxh.js +5 -0
- package/dist/src/{chunk-34zxqcmq.js → chunk-kdczmgwk.js} +3 -3
- package/dist/src/chunk-ke3wn14v.js +4 -0
- package/dist/src/chunk-kh5n7m6w.js +4 -0
- package/dist/src/{chunk-0dfnyfkh.js → chunk-khejfph4.js} +3 -3
- package/dist/src/chunk-kny2xemh.js +4 -0
- package/dist/src/chunk-knyzw9md.js +4 -0
- package/dist/src/chunk-mbzpt2hp.js +4 -0
- package/dist/src/chunk-mm8rcxad.js +4 -0
- package/dist/src/chunk-nc4516tx.js +4 -0
- package/dist/src/{chunk-stfzjr9y.js → chunk-ntfrqrqn.js} +5 -5
- package/dist/src/chunk-nz5h2j52.js +4 -0
- package/dist/src/chunk-p22s97qy.js +4 -0
- package/dist/src/chunk-p9kt1sgr.js +6 -0
- package/dist/src/{chunk-9y5bcy28.js → chunk-pf282r5g.js} +4 -4
- package/dist/src/chunk-pnd4mrxy.js +4 -0
- package/dist/src/chunk-pqqteyj6.js +4 -0
- package/dist/src/chunk-qj1tbnv2.js +8 -0
- package/dist/src/chunk-qnh9egwr.js +4 -0
- package/dist/src/chunk-qy3khhf8.js +8 -0
- package/dist/src/chunk-r0vp315h.js +11 -0
- package/dist/src/chunk-r4j43b9s.js +237 -0
- package/dist/src/{chunk-4pfftt07.js → chunk-r54cxxze.js} +3 -3
- package/dist/src/chunk-r6pvhj33.js +325 -0
- package/dist/src/chunk-rb7aa5gr.js +54 -0
- package/dist/src/chunk-rdj50kb4.js +4 -0
- package/dist/src/chunk-rnd4vcas.js +4 -0
- package/dist/src/chunk-s3y3zfcx.js +14 -0
- package/dist/src/chunk-s4g43k75.js +5 -0
- package/dist/src/chunk-sfqe223f.js +311 -0
- package/dist/src/chunk-sqdrxjw5.js +7 -0
- package/dist/src/{chunk-0w1spptt.js → chunk-t54k47em.js} +4 -4
- package/dist/src/chunk-tek4pnvv.js +26 -0
- package/dist/src/chunk-tn74y7af.js +4 -0
- package/dist/src/chunk-tvq0nzam.js +5 -0
- package/dist/src/chunk-tx4f0h9c.js +6 -0
- package/dist/src/chunk-vdqag3fj.js +5 -0
- package/dist/src/chunk-vz5zzs57.js +4 -0
- package/dist/src/chunk-w4s2vfpj.js +4 -0
- package/dist/src/chunk-w5yypt53.js +42 -0
- package/dist/src/{chunk-r0f1q783.js → chunk-w68v64vh.js} +3 -3
- package/dist/src/chunk-whwj0pdk.js +5 -0
- package/dist/src/chunk-wnmqt1dc.js +4 -0
- package/dist/src/{chunk-8en08r7q.js → chunk-wpe46vsa.js} +3 -3
- package/dist/src/chunk-wxdjeb4k.js +27 -0
- package/dist/src/chunk-xcqzwf9j.js +247 -0
- package/dist/src/chunk-xezekwwn.js +5 -0
- package/dist/src/chunk-xf19m15s.js +4 -0
- package/dist/src/chunk-xghbxha4.js +4 -0
- package/dist/src/{chunk-jhnbfj19.js → chunk-xn9m3xc2.js} +5 -5
- package/dist/src/{chunk-a4k9rt7z.js → chunk-yqfz4vts.js} +3 -3
- package/dist/src/chunk-z8tvs8nk.js +5 -0
- package/dist/src/chunk-zm2rehqb.js +5 -0
- package/dist/src/chunk-zs6dqm35.js +4 -0
- package/dist/src/daemon/processEntry.js +2 -2
- package/dist/src/index.js +4 -4
- package/dist/src/runtime/bunRuntimeGuard.js +2 -2
- package/dist/src/utils/workers/iosBundleExtractWorker.js +2 -2
- package/ios/CameraPosterInjection/Injection/CameraPosterInjection.m +466 -0
- package/package.json +4 -3
- package/schemas/test-plan.schema.json +370 -52
- package/dist/src/chunk-09442h7v.js +0 -4
- package/dist/src/chunk-0e4gm1kj.js +0 -5
- package/dist/src/chunk-0eb8576f.js +0 -4
- package/dist/src/chunk-0rjm4nx7.js +0 -5
- package/dist/src/chunk-1zmh2eak.js +0 -4
- package/dist/src/chunk-28k63ha3.js +0 -5
- package/dist/src/chunk-2d4wmp8b.js +0 -4
- package/dist/src/chunk-32jpxz2y.js +0 -323
- package/dist/src/chunk-3jmvqygr.js +0 -238
- package/dist/src/chunk-3swvfhqt.js +0 -5
- package/dist/src/chunk-44bt78m9.js +0 -5
- package/dist/src/chunk-488vt2bp.js +0 -4
- package/dist/src/chunk-4fgdhcwx.js +0 -5
- package/dist/src/chunk-4jp2se4w.js +0 -4
- package/dist/src/chunk-4vhr9e4t.js +0 -4
- package/dist/src/chunk-4xd6zs3y.js +0 -15
- package/dist/src/chunk-51567pg8.js +0 -4
- package/dist/src/chunk-5agqsfev.js +0 -4
- package/dist/src/chunk-5d706gmr.js +0 -4
- package/dist/src/chunk-5kd4rqk7.js +0 -5
- package/dist/src/chunk-61t538bm.js +0 -4
- package/dist/src/chunk-6d3mmqxt.js +0 -54
- package/dist/src/chunk-6hyt398x.js +0 -5
- package/dist/src/chunk-6mnr8kpm.js +0 -4
- package/dist/src/chunk-79q5xsdc.js +0 -42
- package/dist/src/chunk-7bdgand3.js +0 -4
- package/dist/src/chunk-84cp9dw5.js +0 -4
- package/dist/src/chunk-86f2h5ww.js +0 -5
- package/dist/src/chunk-8cghfzb2.js +0 -19
- package/dist/src/chunk-9tf2p9y9.js +0 -5
- package/dist/src/chunk-a2sc4jm0.js +0 -5
- package/dist/src/chunk-aa5ng3d1.js +0 -4
- package/dist/src/chunk-b3h0a6ca.js +0 -4
- package/dist/src/chunk-b6a737qt.js +0 -4
- package/dist/src/chunk-bn64x5z5.js +0 -5
- package/dist/src/chunk-bvh649za.js +0 -12
- package/dist/src/chunk-c9tyfg4j.js +0 -26
- package/dist/src/chunk-cfsdfqnm.js +0 -4
- package/dist/src/chunk-cxyf04jc.js +0 -7
- package/dist/src/chunk-da08tx5v.js +0 -4
- package/dist/src/chunk-f2tc08m2.js +0 -4
- package/dist/src/chunk-f8tnk179.js +0 -5
- package/dist/src/chunk-f9s1kkhx.js +0 -5
- package/dist/src/chunk-fbp8a4rx.js +0 -4
- package/dist/src/chunk-fd2z0sze.js +0 -4
- package/dist/src/chunk-fk927f4q.js +0 -54
- package/dist/src/chunk-fxmr3a0f.js +0 -4
- package/dist/src/chunk-gaqwhd44.js +0 -4
- package/dist/src/chunk-ggtd5x5a.js +0 -5
- package/dist/src/chunk-gndcfrm7.js +0 -4
- package/dist/src/chunk-h3n4adc6.js +0 -310
- package/dist/src/chunk-h5pjbb83.js +0 -4
- package/dist/src/chunk-hgnnh302.js +0 -4
- package/dist/src/chunk-hmke8nhx.js +0 -5
- package/dist/src/chunk-j2bx12hn.js +0 -4
- package/dist/src/chunk-j70y1a2g.js +0 -4
- package/dist/src/chunk-js1jpyxp.js +0 -6
- package/dist/src/chunk-kbjq0qvb.js +0 -4
- package/dist/src/chunk-kfwx57xd.js +0 -4
- package/dist/src/chunk-kzwctna2.js +0 -4
- package/dist/src/chunk-m9ehyehy.js +0 -4
- package/dist/src/chunk-mct91p1f.js +0 -4
- package/dist/src/chunk-mf9spd4g.js +0 -5
- package/dist/src/chunk-mgrcansb.js +0 -4
- package/dist/src/chunk-mqc1d0eb.js +0 -6
- package/dist/src/chunk-n1zmpk0z.js +0 -4
- package/dist/src/chunk-ncyjf63g.js +0 -4
- package/dist/src/chunk-nr64d21q.js +0 -973
- package/dist/src/chunk-nwm2pq5v.js +0 -168
- package/dist/src/chunk-pm06b05d.js +0 -9
- package/dist/src/chunk-q50s00ry.js +0 -4
- package/dist/src/chunk-qwye1958.js +0 -14
- package/dist/src/chunk-r8z9pfve.js +0 -5
- package/dist/src/chunk-rdpgkjf6.js +0 -4
- package/dist/src/chunk-rkr0dks9.js +0 -5
- package/dist/src/chunk-rn84t3sf.js +0 -11
- package/dist/src/chunk-s123kn7n.js +0 -4
- package/dist/src/chunk-s73qn3fx.js +0 -4
- package/dist/src/chunk-sjn0nj4p.js +0 -5
- package/dist/src/chunk-sns0c35v.js +0 -7
- package/dist/src/chunk-t4dr5c8v.js +0 -8
- package/dist/src/chunk-tc8k9c1j.js +0 -4
- package/dist/src/chunk-teznhase.js +0 -4
- package/dist/src/chunk-ty9xgmz4.js +0 -4
- package/dist/src/chunk-tyazf3sk.js +0 -145
- package/dist/src/chunk-v6npjrjm.js +0 -5
- package/dist/src/chunk-vbvtzkwz.js +0 -5
- package/dist/src/chunk-vefd8qee.js +0 -8
- package/dist/src/chunk-vs9r72ta.js +0 -17
- package/dist/src/chunk-w2mwa0jk.js +0 -4
- package/dist/src/chunk-w88k0bgr.js +0 -4
- package/dist/src/chunk-wzdt0enk.js +0 -4
- package/dist/src/chunk-xhhv854c.js +0 -4
- package/dist/src/chunk-y58270hd.js +0 -4
- package/dist/src/chunk-yk0hmbex.js +0 -4
- package/dist/src/chunk-ympy4fdz.js +0 -28
- package/dist/src/chunk-yw436axy.js +0 -4
- package/dist/src/chunk-z04jrpjy.js +0 -5
- package/dist/src/chunk-z2xznczw.js +0 -4
- package/dist/src/chunk-z4xnrgps.js +0 -4
- package/dist/src/chunk-z7csyszv.js +0 -4
- package/dist/src/chunk-z8t0v07j.js +0 -11
- package/dist/src/chunk-z916af47.js +0 -228
- package/dist/src/chunk-zcr8he8q.js +0 -5
- package/dist/src/chunk-zd9vmkzn.js +0 -9
- package/dist/src/chunk-zj939v0h.js +0 -5
- package/dist/src/chunk-zkdjwtc1.js +0 -4
- package/dist/src/chunk-zkv5kzt6.js +0 -4
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"platform": {
|
|
20
20
|
"type": "string",
|
|
21
|
-
"enum": ["android", "ios", "tvos"],
|
|
21
|
+
"enum": ["android", "ios", "tvos", "visionos", "watchos"],
|
|
22
22
|
"description": "Optional platform hint for plan execution"
|
|
23
23
|
},
|
|
24
24
|
"devices": {
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
},
|
|
150
150
|
"platform": {
|
|
151
151
|
"type": "string",
|
|
152
|
-
"enum": ["android", "ios", "tvos"],
|
|
152
|
+
"enum": ["android", "ios", "tvos", "visionos", "watchos"],
|
|
153
153
|
"description": "Target platform for this device"
|
|
154
154
|
},
|
|
155
155
|
"simulatorType": {
|
|
@@ -222,6 +222,16 @@
|
|
|
222
222
|
"type": "string",
|
|
223
223
|
"description": "DEPRECATED: Use 'label' instead (legacy field)"
|
|
224
224
|
},
|
|
225
|
+
"expect": {
|
|
226
|
+
"type": "object",
|
|
227
|
+
"description": "Case-sensitive literal assertions on returned getLogs message text, or the serialized JSON payload of other tools. Both checks must hold. No extra observation or polling.",
|
|
228
|
+
"additionalProperties": false,
|
|
229
|
+
"minProperties": 1,
|
|
230
|
+
"properties": {
|
|
231
|
+
"contains": { "type": "string", "minLength": 1 },
|
|
232
|
+
"notContains": { "type": "string", "minLength": 1 }
|
|
233
|
+
}
|
|
234
|
+
},
|
|
225
235
|
"expectations": {
|
|
226
236
|
"type": "array",
|
|
227
237
|
"description": "Assertions to validate after step execution",
|
|
@@ -1912,23 +1922,253 @@
|
|
|
1912
1922
|
"description": "Session-scoped root/integrity/fault test fixtures (behind the 'device-condition' feature flag). Sent in its own setDeviceState call.",
|
|
1913
1923
|
"type": "object",
|
|
1914
1924
|
"properties": {
|
|
1915
|
-
"
|
|
1916
|
-
|
|
1917
|
-
|
|
1925
|
+
"exportAttestation": {
|
|
1926
|
+
"type": "boolean",
|
|
1927
|
+
"const": true,
|
|
1928
|
+
"description": "Export public Android KeyStore attestation certificates and parsed fields for a test backend. Send alone; temporary key is deleted. No trust verdict."
|
|
1929
|
+
},
|
|
1930
|
+
"version": {
|
|
1931
|
+
"type": "number",
|
|
1932
|
+
"const": 1,
|
|
1933
|
+
"description": "Request shape version; only 1 exists."
|
|
1934
|
+
},
|
|
1935
|
+
"rootState": {
|
|
1936
|
+
"type": "string",
|
|
1937
|
+
"enum": ["rooted-detectable", "unset"],
|
|
1938
|
+
"description": "Root fixture: 'rooted-detectable' plants inert su/busybox stubs and sets SELinux permissive so root-detection checks trip (Android, non-Play image, needs a writable /system); 'unset' restores."
|
|
1939
|
+
},
|
|
1940
|
+
"integrityState": {
|
|
1941
|
+
"anyOf": [
|
|
1942
|
+
{
|
|
1943
|
+
"type": "string",
|
|
1944
|
+
"enum": ["maximally-detectable", "minimally-detectable", "unset"]
|
|
1945
|
+
},
|
|
1946
|
+
{
|
|
1947
|
+
"type": "object",
|
|
1948
|
+
"properties": {
|
|
1949
|
+
"preset": {
|
|
1950
|
+
"type": "string",
|
|
1951
|
+
"enum": ["maximally-detectable", "minimally-detectable"]
|
|
1952
|
+
},
|
|
1953
|
+
"signals": {
|
|
1954
|
+
"type": "object",
|
|
1955
|
+
"properties": {
|
|
1956
|
+
"su-binary": {
|
|
1957
|
+
"type": "string",
|
|
1958
|
+
"enum": ["on", "off"]
|
|
1959
|
+
},
|
|
1960
|
+
"superuser-apk": {
|
|
1961
|
+
"type": "string",
|
|
1962
|
+
"enum": ["on", "off"]
|
|
1963
|
+
},
|
|
1964
|
+
"selinux-permissive": {
|
|
1965
|
+
"type": "string",
|
|
1966
|
+
"enum": ["on", "off"]
|
|
1967
|
+
},
|
|
1968
|
+
"debuggable-build": {
|
|
1969
|
+
"type": "string",
|
|
1970
|
+
"enum": ["on", "off"]
|
|
1971
|
+
},
|
|
1972
|
+
"insecure-build": {
|
|
1973
|
+
"type": "string",
|
|
1974
|
+
"enum": ["on", "off"]
|
|
1975
|
+
},
|
|
1976
|
+
"test-keys": {
|
|
1977
|
+
"type": "string",
|
|
1978
|
+
"enum": ["on", "off"]
|
|
1979
|
+
},
|
|
1980
|
+
"missing-otacerts": {
|
|
1981
|
+
"type": "string",
|
|
1982
|
+
"enum": ["on", "off"]
|
|
1983
|
+
},
|
|
1984
|
+
"qemu-props": {
|
|
1985
|
+
"type": "string",
|
|
1986
|
+
"enum": ["on", "off"]
|
|
1987
|
+
},
|
|
1988
|
+
"emulator-hardware": {
|
|
1989
|
+
"type": "string",
|
|
1990
|
+
"enum": ["on", "off"]
|
|
1991
|
+
},
|
|
1992
|
+
"qemu-pipe": {
|
|
1993
|
+
"type": "string",
|
|
1994
|
+
"enum": ["on", "off"]
|
|
1995
|
+
},
|
|
1996
|
+
"emulator-build-fields": {
|
|
1997
|
+
"type": "string",
|
|
1998
|
+
"enum": ["on", "off"]
|
|
1999
|
+
}
|
|
2000
|
+
},
|
|
2001
|
+
"additionalProperties": false
|
|
2002
|
+
}
|
|
2003
|
+
},
|
|
2004
|
+
"additionalProperties": false
|
|
2005
|
+
}
|
|
2006
|
+
],
|
|
2007
|
+
"description": "Integrity signals (Android): maximally-detectable enables su-binary, superuser-apk and selinux-permissive; minimally-detectable disables them. Or { preset?, signals?: { <signal-id>: 'on' | 'off' } }, with at least one field and signals overriding the preset. Needs root and writable /system for files. Image-fixed signals and missing-otacerts report unsupported. Results include per-signal status and post-apply active readings. 'unset' restores prior state; existing image/rootState files are never removed."
|
|
2008
|
+
},
|
|
2009
|
+
"statusBar": {
|
|
2010
|
+
"anyOf": [
|
|
2011
|
+
{
|
|
2012
|
+
"type": "string",
|
|
2013
|
+
"const": "unset"
|
|
2014
|
+
},
|
|
2015
|
+
{
|
|
2016
|
+
"type": "object",
|
|
2017
|
+
"properties": {
|
|
2018
|
+
"time": {
|
|
2019
|
+
"type": "string",
|
|
2020
|
+
"minLength": 1,
|
|
2021
|
+
"maxLength": 32
|
|
2022
|
+
},
|
|
2023
|
+
"batteryLevel": {
|
|
2024
|
+
"type": "integer",
|
|
2025
|
+
"minimum": 0,
|
|
2026
|
+
"maximum": 100
|
|
2027
|
+
},
|
|
2028
|
+
"batteryState": {
|
|
2029
|
+
"type": "string",
|
|
2030
|
+
"enum": ["charging", "charged", "discharging"]
|
|
2031
|
+
},
|
|
2032
|
+
"cellularBars": {
|
|
2033
|
+
"type": "integer",
|
|
2034
|
+
"minimum": 0,
|
|
2035
|
+
"maximum": 4
|
|
2036
|
+
},
|
|
2037
|
+
"wifiBars": {
|
|
2038
|
+
"type": "integer",
|
|
2039
|
+
"minimum": 0,
|
|
2040
|
+
"maximum": 3
|
|
2041
|
+
},
|
|
2042
|
+
"dataNetwork": {
|
|
2043
|
+
"type": "string",
|
|
2044
|
+
"enum": ["wifi", "5g", "lte", "4g", "3g", "hide"]
|
|
2045
|
+
},
|
|
2046
|
+
"operatorName": {
|
|
2047
|
+
"type": "string",
|
|
2048
|
+
"maxLength": 64
|
|
2049
|
+
}
|
|
2050
|
+
},
|
|
2051
|
+
"additionalProperties": false
|
|
2052
|
+
}
|
|
2053
|
+
],
|
|
2054
|
+
"description": "Override the status bar ({ time?, batteryLevel?, batteryState?, cellularBars?, wifiBars?, dataNetwork?, operatorName? }, at least one). iOS Simulator only so far; reset clears every override. Or unset."
|
|
2055
|
+
},
|
|
2056
|
+
"privacy": {
|
|
2057
|
+
"anyOf": [
|
|
2058
|
+
{
|
|
2059
|
+
"type": "string",
|
|
2060
|
+
"const": "unset"
|
|
2061
|
+
},
|
|
2062
|
+
{
|
|
2063
|
+
"type": "object",
|
|
2064
|
+
"properties": {
|
|
2065
|
+
"appId": {
|
|
2066
|
+
"type": "string",
|
|
2067
|
+
"pattern": "^[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)+$"
|
|
2068
|
+
},
|
|
2069
|
+
"service": {
|
|
2070
|
+
"type": "string",
|
|
2071
|
+
"enum": [
|
|
2072
|
+
"calendar",
|
|
2073
|
+
"contacts-limited",
|
|
2074
|
+
"contacts",
|
|
2075
|
+
"location",
|
|
2076
|
+
"location-always",
|
|
2077
|
+
"photos-add",
|
|
2078
|
+
"photos",
|
|
2079
|
+
"media-library",
|
|
2080
|
+
"microphone",
|
|
2081
|
+
"motion",
|
|
2082
|
+
"reminders",
|
|
2083
|
+
"siri"
|
|
2084
|
+
]
|
|
2085
|
+
},
|
|
2086
|
+
"action": {
|
|
2087
|
+
"type": "string",
|
|
2088
|
+
"enum": ["grant", "revoke"]
|
|
2089
|
+
}
|
|
2090
|
+
},
|
|
2091
|
+
"required": ["appId", "service", "action"],
|
|
2092
|
+
"additionalProperties": false
|
|
2093
|
+
}
|
|
2094
|
+
],
|
|
2095
|
+
"description": "Grant or revoke one privacy service for an installed app ({ appId, service, action }). iOS Simulator only so far; reset restores the app's earlier decisions for that service and its pair (photos/photos-add, location/location-always, contacts/contacts-limited): granted, denied, or not yet asked. Refused when that decision cannot be restored, such as limited Photos access. Or unset."
|
|
2096
|
+
},
|
|
2097
|
+
"location": {
|
|
2098
|
+
"anyOf": [
|
|
2099
|
+
{
|
|
2100
|
+
"type": "string",
|
|
2101
|
+
"const": "unset"
|
|
2102
|
+
},
|
|
2103
|
+
{
|
|
2104
|
+
"type": "object",
|
|
2105
|
+
"properties": {
|
|
2106
|
+
"latitude": {
|
|
2107
|
+
"type": "number",
|
|
2108
|
+
"minimum": -90,
|
|
2109
|
+
"maximum": 90
|
|
2110
|
+
},
|
|
2111
|
+
"longitude": {
|
|
2112
|
+
"type": "number",
|
|
2113
|
+
"minimum": -180,
|
|
2114
|
+
"maximum": 180
|
|
2115
|
+
}
|
|
2116
|
+
},
|
|
2117
|
+
"required": ["latitude", "longitude"],
|
|
2118
|
+
"additionalProperties": false
|
|
2119
|
+
}
|
|
2120
|
+
],
|
|
2121
|
+
"description": "Simulate the device location ({ latitude, longitude }). iOS Simulator only so far; reset clears the simulated location. Or unset."
|
|
2122
|
+
},
|
|
1918
2123
|
"faults": {
|
|
1919
2124
|
"type": "object",
|
|
1920
2125
|
"properties": {
|
|
1921
|
-
"battery": {
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
"
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
2126
|
+
"battery": {
|
|
2127
|
+
"type": "string",
|
|
2128
|
+
"enum": ["unplug", "low", "full", "unset"],
|
|
2129
|
+
"description": "Battery fault via `dumpsys battery` (unplug / low 15% / full), or unset."
|
|
2130
|
+
},
|
|
2131
|
+
"memoryPressure": {
|
|
2132
|
+
"type": "string",
|
|
2133
|
+
"enum": ["on", "unset"],
|
|
2134
|
+
"description": "Hold anonymous memory until Android lmkd kills background apps. Unsupported if no kill follows. Uses a local build or AUTOMOBILE_LMK_PRESSURE_DIR, else downloads the checksum-verified release binary; reset stops the payload and removes its files. Or unset."
|
|
2135
|
+
},
|
|
2136
|
+
"lowPower": {
|
|
2137
|
+
"type": "string",
|
|
2138
|
+
"enum": ["on", "unset"],
|
|
2139
|
+
"description": "Toggle `settings global low_power`, restored to its prior value, or unset."
|
|
2140
|
+
},
|
|
2141
|
+
"doze": {
|
|
2142
|
+
"type": "string",
|
|
2143
|
+
"enum": ["on", "unset"],
|
|
2144
|
+
"description": "Force deep Doze via `dumpsys deviceidle force-idle`, or unset."
|
|
2145
|
+
},
|
|
2146
|
+
"thermal": {
|
|
2147
|
+
"type": "string",
|
|
2148
|
+
"enum": ["throttling", "critical", "unset"],
|
|
2149
|
+
"description": "Override thermal status via `cmd thermalservice override-status`, or unset."
|
|
2150
|
+
},
|
|
2151
|
+
"dontKeepActivities": {
|
|
2152
|
+
"type": "string",
|
|
2153
|
+
"enum": ["on", "unset"],
|
|
2154
|
+
"description": "Developer options 'Don't keep activities' via `settings global always_finish_activities`, restored to its prior value, or unset. Applies to activities left after the change."
|
|
2155
|
+
},
|
|
2156
|
+
"readOnlyFilesystem": {
|
|
2157
|
+
"type": "string",
|
|
2158
|
+
"enum": ["on", "unset"],
|
|
2159
|
+
"description": "Make shared external storage /sdcard read-only for every app (device-wide EROFS). Rootable Android emulators only; reset restores writes. Or unset."
|
|
2160
|
+
},
|
|
2161
|
+
"storage": {
|
|
2162
|
+
"type": "string",
|
|
2163
|
+
"enum": ["low", "full", "unset"],
|
|
2164
|
+
"description": "Use up free space on /data with a ballast file (`fallocate`): 'low' leaves about 128 MiB, 'full' about 8 MiB. Reset deletes the ballast. Or unset."
|
|
2165
|
+
},
|
|
2166
|
+
"corruptAppFile": {
|
|
2167
|
+
"anyOf": [
|
|
2168
|
+
{
|
|
2169
|
+
"type": "string",
|
|
2170
|
+
"const": "unset"
|
|
2171
|
+
},
|
|
1932
2172
|
{
|
|
1933
2173
|
"type": "object",
|
|
1934
2174
|
"properties": {
|
|
@@ -1936,53 +2176,81 @@
|
|
|
1936
2176
|
"type": "string",
|
|
1937
2177
|
"pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z][A-Za-z0-9_]*)+$"
|
|
1938
2178
|
},
|
|
1939
|
-
"
|
|
2179
|
+
"path": {
|
|
2180
|
+
"type": "string",
|
|
2181
|
+
"pattern": "^(?!\\.{1,2}(?:\\/|$))[A-Za-z0-9_.-]+(?:\\/(?!\\.{1,2}(?:\\/|$))[A-Za-z0-9_.-]+)*$"
|
|
2182
|
+
},
|
|
2183
|
+
"mode": {
|
|
2184
|
+
"type": "string",
|
|
2185
|
+
"enum": ["overwrite", "truncate"]
|
|
2186
|
+
}
|
|
1940
2187
|
},
|
|
1941
|
-
"required": ["package", "
|
|
2188
|
+
"required": ["package", "path", "mode"],
|
|
1942
2189
|
"additionalProperties": false
|
|
1943
2190
|
}
|
|
1944
|
-
]
|
|
2191
|
+
],
|
|
2192
|
+
"description": "Damage one file in a debuggable app's data directory ({ package, path, mode }), e.g. a SQLite database or SharedPreferences XML. 'overwrite' zeroes its first 256 bytes, 'truncate' cuts it in half. Needs a debuggable app (run-as), force-stops the app, and keeps a copy that reset restores and verifies by checksum. Or unset."
|
|
1945
2193
|
},
|
|
1946
|
-
"
|
|
1947
|
-
"
|
|
1948
|
-
{
|
|
2194
|
+
"revokePermission": {
|
|
2195
|
+
"anyOf": [
|
|
2196
|
+
{
|
|
2197
|
+
"type": "string",
|
|
2198
|
+
"const": "unset"
|
|
2199
|
+
},
|
|
1949
2200
|
{
|
|
1950
2201
|
"type": "object",
|
|
1951
2202
|
"properties": {
|
|
1952
2203
|
"package": {
|
|
1953
2204
|
"type": "string",
|
|
1954
2205
|
"pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z][A-Za-z0-9_]*)+$"
|
|
2206
|
+
},
|
|
2207
|
+
"permission": {
|
|
2208
|
+
"type": "string",
|
|
2209
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_.]*$"
|
|
1955
2210
|
}
|
|
1956
2211
|
},
|
|
1957
|
-
"required": ["package"],
|
|
2212
|
+
"required": ["package", "permission"],
|
|
1958
2213
|
"additionalProperties": false
|
|
1959
2214
|
}
|
|
1960
|
-
]
|
|
2215
|
+
],
|
|
2216
|
+
"description": "Revoke one runtime permission from an installed app with `pm revoke` ({ package, permission }); reset re-grants it. Revoking kills the app's process, so it also restarts the app. Or unset."
|
|
1961
2217
|
},
|
|
1962
|
-
"
|
|
1963
|
-
"
|
|
1964
|
-
|
|
2218
|
+
"lockScreen": {
|
|
2219
|
+
"type": "string",
|
|
2220
|
+
"enum": ["pin", "none", "unset"],
|
|
2221
|
+
"description": "Sets an AutoMobile test PIN, or removes the PIN; reset restores no lock screen. Keys bound to the lock screen are invalidated by a removal. 'unset' restores."
|
|
2222
|
+
},
|
|
2223
|
+
"biometricEnrollment": {
|
|
2224
|
+
"type": "string",
|
|
2225
|
+
"enum": ["add", "none", "unset"],
|
|
2226
|
+
"description": "Android emulators only: 'add' enrolls one more fingerprint through Settings and the emulator console (`adb emu finger touch`), which invalidates keys created with setInvalidatedByBiometricEnrollment(true). The first add needs a device with no lock screen and sets the AutoMobile test PIN. 'none' removes every fingerprint by clearing that PIN. Reset or 'unset' restores no lock screen and no fingerprints. Refused on physical devices and when the console is unavailable."
|
|
2227
|
+
},
|
|
2228
|
+
"disablePackage": {
|
|
2229
|
+
"anyOf": [
|
|
2230
|
+
{
|
|
2231
|
+
"type": "string",
|
|
2232
|
+
"const": "unset"
|
|
2233
|
+
},
|
|
1965
2234
|
{
|
|
1966
2235
|
"type": "object",
|
|
1967
2236
|
"properties": {
|
|
1968
2237
|
"package": {
|
|
1969
2238
|
"type": "string",
|
|
1970
2239
|
"pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z][A-Za-z0-9_]*)+$"
|
|
1971
|
-
}
|
|
1972
|
-
"path": {
|
|
1973
|
-
"type": "string",
|
|
1974
|
-
"pattern": "^(?!\\.{1,2}(?:/|$))[A-Za-z0-9_.-]+(?:/(?!\\.{1,2}(?:/|$))[A-Za-z0-9_.-]+)*$"
|
|
1975
|
-
},
|
|
1976
|
-
"mode": { "type": "string", "enum": ["overwrite", "truncate"] }
|
|
2240
|
+
}
|
|
1977
2241
|
},
|
|
1978
|
-
"required": ["package"
|
|
2242
|
+
"required": ["package"],
|
|
1979
2243
|
"additionalProperties": false
|
|
1980
2244
|
}
|
|
1981
|
-
]
|
|
2245
|
+
],
|
|
2246
|
+
"description": "Disable an installed app for the current user with `pm disable-user` ({ package }); reset runs `pm enable`. Or unset."
|
|
1982
2247
|
},
|
|
1983
2248
|
"killApp": {
|
|
1984
|
-
"
|
|
1985
|
-
{
|
|
2249
|
+
"anyOf": [
|
|
2250
|
+
{
|
|
2251
|
+
"type": "string",
|
|
2252
|
+
"const": "unset"
|
|
2253
|
+
},
|
|
1986
2254
|
{
|
|
1987
2255
|
"type": "object",
|
|
1988
2256
|
"properties": {
|
|
@@ -1990,16 +2258,23 @@
|
|
|
1990
2258
|
"type": "string",
|
|
1991
2259
|
"pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z][A-Za-z0-9_]*)+$"
|
|
1992
2260
|
},
|
|
1993
|
-
"mode": {
|
|
2261
|
+
"mode": {
|
|
2262
|
+
"type": "string",
|
|
2263
|
+
"enum": ["background", "forceStop"]
|
|
2264
|
+
}
|
|
1994
2265
|
},
|
|
1995
2266
|
"required": ["package", "mode"],
|
|
1996
2267
|
"additionalProperties": false
|
|
1997
2268
|
}
|
|
1998
|
-
]
|
|
2269
|
+
],
|
|
2270
|
+
"description": "End an app's process once ({ package, mode }): 'background' is `am kill`, which only ends a process the system could reclaim and leaves the foreground app running; 'forceStop' is `am force-stop`, the user's Force stop. Nothing to reset; 'unset' is a no-op."
|
|
1999
2271
|
},
|
|
2000
2272
|
"trimMemory": {
|
|
2001
|
-
"
|
|
2002
|
-
{
|
|
2273
|
+
"anyOf": [
|
|
2274
|
+
{
|
|
2275
|
+
"type": "string",
|
|
2276
|
+
"const": "unset"
|
|
2277
|
+
},
|
|
2003
2278
|
{
|
|
2004
2279
|
"type": "object",
|
|
2005
2280
|
"properties": {
|
|
@@ -2023,11 +2298,15 @@
|
|
|
2023
2298
|
"required": ["package", "level"],
|
|
2024
2299
|
"additionalProperties": false
|
|
2025
2300
|
}
|
|
2026
|
-
]
|
|
2301
|
+
],
|
|
2302
|
+
"description": "Send a running app an onTrimMemory level once ({ package, level }) with `am send-trim-memory`. The app must be running; a foreground app must get a RUNNING_* level (RUNNING_MODERATE, RUNNING_LOW, RUNNING_CRITICAL) because Android refuses HIDDEN, BACKGROUND, MODERATE and COMPLETE for a foreground app. Nothing to reset; 'unset' is a no-op."
|
|
2027
2303
|
},
|
|
2028
2304
|
"clearPackageData": {
|
|
2029
|
-
"
|
|
2030
|
-
{
|
|
2305
|
+
"anyOf": [
|
|
2306
|
+
{
|
|
2307
|
+
"type": "string",
|
|
2308
|
+
"const": "unset"
|
|
2309
|
+
},
|
|
2031
2310
|
{
|
|
2032
2311
|
"type": "object",
|
|
2033
2312
|
"properties": {
|
|
@@ -2039,11 +2318,15 @@
|
|
|
2039
2318
|
"required": ["package"],
|
|
2040
2319
|
"additionalProperties": false
|
|
2041
2320
|
}
|
|
2042
|
-
]
|
|
2321
|
+
],
|
|
2322
|
+
"description": "Clear an installed app's data with `pm clear` ({ package }). One-shot: it kills the app's process and cannot be undone, so there is nothing to reset. 'unset' is a no-op."
|
|
2043
2323
|
},
|
|
2044
2324
|
"clockSkew": {
|
|
2045
|
-
"
|
|
2046
|
-
{
|
|
2325
|
+
"anyOf": [
|
|
2326
|
+
{
|
|
2327
|
+
"type": "string",
|
|
2328
|
+
"const": "unset"
|
|
2329
|
+
},
|
|
2047
2330
|
{
|
|
2048
2331
|
"type": "object",
|
|
2049
2332
|
"properties": {
|
|
@@ -2051,19 +2334,54 @@
|
|
|
2051
2334
|
"type": "integer",
|
|
2052
2335
|
"minimum": -315360000,
|
|
2053
2336
|
"maximum": 315360000,
|
|
2054
|
-
"anyOf": [
|
|
2337
|
+
"anyOf": [
|
|
2338
|
+
{
|
|
2339
|
+
"minimum": 3
|
|
2340
|
+
},
|
|
2341
|
+
{
|
|
2342
|
+
"maximum": -3
|
|
2343
|
+
}
|
|
2344
|
+
]
|
|
2055
2345
|
}
|
|
2056
2346
|
},
|
|
2057
2347
|
"required": ["offsetSeconds"],
|
|
2058
2348
|
"additionalProperties": false
|
|
2059
2349
|
}
|
|
2060
|
-
]
|
|
2350
|
+
],
|
|
2351
|
+
"description": "Set the device clock offsetSeconds ahead of (positive) or behind (negative) real time ({ offsetSeconds }), 3 seconds to 10 years either way, with automatic time off. Reset restores real time and the original automatic-time setting and verifies them. Rootable Android emulators only (needs adb root, which restarts adbd). Shares the device clock with setDeviceState.clock: a reset from either restores real time. Or unset."
|
|
2061
2352
|
}
|
|
2062
2353
|
},
|
|
2063
|
-
"additionalProperties": false
|
|
2354
|
+
"additionalProperties": false,
|
|
2355
|
+
"description": "Power and lifecycle fault injectors (Android only, behind the feature flag)."
|
|
2064
2356
|
},
|
|
2065
|
-
"
|
|
2066
|
-
|
|
2357
|
+
"vehicle": {
|
|
2358
|
+
"type": "object",
|
|
2359
|
+
"properties": {
|
|
2360
|
+
"motion": {
|
|
2361
|
+
"type": "string",
|
|
2362
|
+
"enum": ["parked", "driving", "unset"],
|
|
2363
|
+
"description": "Vehicle motion on an Android Automotive emulator: 'parked' (gear park, speed 0, parking brake on) or 'driving' (gear drive, moving, brake off), set together so the state is consistent. Restored to the values read before the first change; or unset."
|
|
2364
|
+
},
|
|
2365
|
+
"nightMode": {
|
|
2366
|
+
"type": "string",
|
|
2367
|
+
"enum": ["on", "off", "unset"],
|
|
2368
|
+
"description": "Vehicle night-mode signal on an Android Automotive emulator: 'on' or 'off' sets the signal; unset or reset returns day/night to automatic sensor control without preserving a prior manual override."
|
|
2369
|
+
}
|
|
2370
|
+
},
|
|
2371
|
+
"additionalProperties": false,
|
|
2372
|
+
"description": "Vehicle state (Android Automotive emulators only; 'unsupported' elsewhere), via `cmd car_service inject-vhal-event`."
|
|
2373
|
+
},
|
|
2374
|
+
"expiresInSeconds": {
|
|
2375
|
+
"type": "integer",
|
|
2376
|
+
"minimum": 1,
|
|
2377
|
+
"maximum": 86400,
|
|
2378
|
+
"description": "Lease: restore every applied condition after this many seconds unless a later deviceCondition call renews it. Session-bound calls only."
|
|
2379
|
+
},
|
|
2380
|
+
"reset": {
|
|
2381
|
+
"type": "boolean",
|
|
2382
|
+
"const": true,
|
|
2383
|
+
"description": "Restore every condition applied on this device and verify a clean read."
|
|
2384
|
+
}
|
|
2067
2385
|
},
|
|
2068
2386
|
"additionalProperties": false
|
|
2069
2387
|
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{an,HR,xY,kn,CY,DY}from"./chunk-ggtd5x5a.js";import"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";export{kn as getMcpServerVersion,DY as getSettledMcpServerVersion,CY as isMcpServerVersionSettled,xY as probeCheckoutMcpServerVersion,an as releaseVersion,HR as withoutDirtyStamp};
|
|
3
|
-
|
|
4
|
-
//# debugId=78C791CAA15CF83864756E2164756E21
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{dt,dl,gre,_,k}from"./chunk-h3n4adc6.js";import{e}from"./chunk-z8t0v07j.js";import{gr}from"./chunk-bn64x5z5.js";import{mm,cC,fn}from"./chunk-sns0c35v.js";import{r,t}from"./chunk-9rkfyt6q.js";var A=new gr;function x4(i,o,n){if(n?.aborted||i instanceof dt||i instanceof Error&&i.name==="AbortError")return`Android long press interrupted; press may still be held on the device for up to ${o} ms. Wait ${o} ms before retrying touch input.`;return}function Yx(i,o,n){let a=x4(i,o,n);if(a)throw new t(a,{cause:i})}function mF(i,o){let n=i??o.defaultMs;if(!Number.isFinite(n))throw new t("searchUntil.duration must be a number");if(n<o.minMs)throw new t(`searchUntil.duration must be at least ${o.minMs}ms`);if(n>o.maxMs)throw new t(`searchUntil.duration must be at most ${o.maxMs}ms`);return Math.round(n)}function fF(i,o,n){if(!n)return!0;return i.hasContainer?.(o,n)??A.hasContainer(o,n)}function hF(i,o){if(!i)return null;return[i.elementId,i.text].filter(Boolean).length===1?null:`${o} container must specify exactly one of elementId or text`}function gF(i){if(i!==void 0&&i>mm)throw new t(`longPress duration too large; maximum is ${mm} ms; requested ${i} ms`)}function yF(i,o){return{success:!1,action:i,error:o,element:{bounds:{left:0,top:0,right:0,bottom:0}}}}function tQ(i){return(o=[])=>{for(let n of o)i.add(n)}}function rQ(i,o){return i==="doubleTap"&&o===1?" Double tap partially applied: one tap was delivered; the second tap was not confirmed. Do not retry automatically.":""}function nQ(i){let o=!1;return()=>{if(!o)o=!0,i()}}class m extends cC{}function D(i){return i instanceof cC&&!(i instanceof m)&&(/timed out|timeout/i.test(i.message)||dl({error:i.message}))}function b(i){return new m(`${i.message} With VoiceOver on, synthetic touches and activation requests can be held or swallowed, so the tap may not have run. Verify with observe; turn VoiceOver off using the accessibility tool ({voiceover:false}), then retry if needed.`,{cause:i})}async function qA(i){try{await i()}catch(o){if(D(o))throw b(o);throw o}}async function iQ(i,o){try{await i()}catch(n){if(D(n)&&await T(o))throw b(n);throw n}}async function T(i){try{return await i()}catch(o){return e.warn(`VoiceOver probe after a tap timeout failed: ${r(o)}`,o),!1}}function Vq(i,o){if(o.success)_.getExistingInstance(i.deviceId)?.invalidateCache()}async function oQ({device:i,action:o,element:n,point:a,durationMs:c,fenceOptions:s,coordinateTap:v}){let{displayFence:y,signal:g}=s,d=n["ios-accessibility-label"]??(typeof n["content-desc"]==="string"&&n["content-desc"]?n["content-desc"]:void 0)??(typeof n.text==="string"&&n.text?n.text:void 0);if(!d){e.info("[TapOnElement] VoiceOver: no label available, falling back to coordinate tap"),await qA(()=>v({displayFence:y,signal:g}));return}let h=o==="longPress"?"long_press":"activate",p=await _.getInstance(i).requestVoiceOverActivate(d,h,gre(h,c),{bounds:n.bounds,duration:o==="longPress"?c:void 0});if(C(i,p),!p.success)e.warn(`[TapOnElement] VoiceOver action failed for label "${d}": ${p.error??"unknown error"}, falling back to coordinate tap at (${a.x}, ${a.y})`),await qA(()=>v({displayFence:y,signal:g}))}function C(i,o){if(o.dispatched&&o.acknowledged!==!0)throw fn(o.error);Vq(i,o)}class f{accessibilityService;constructor(i){this.accessibilityService=i}async getAccessibilityHierarchy(){return this.accessibilityService.getAccessibilityHierarchy(void 0,{skipWaitForFresh:!1,disableAllFiltering:!0})}async requestTraversalOrder(){return this.accessibilityService.requestTraversalOrder()}async requestCurrentFocus(){return this.accessibilityService.requestCurrentFocus()}async requestTapCoordinates(i){let{x:o,y:n,duration:a=10,onDispatch:c}=i;return this.accessibilityService.requestTapCoordinates({x:o,y:n,duration:a,onDispatch:c})}async requestDoubleTapCoordinates(i,o,n){return this.accessibilityService.requestDoubleTapCoordinates(i,o,n)}async requestAction(i,o,n){return this.accessibilityService.requestAction(i,o,void 0,{signal:n})}async requestNodeAction(i,o,n){return this.accessibilityService.requestNodeAction(i,o,{signal:n})}async supportsNodeActionSelectors(){return this.accessibilityService.supportsNodeActionSelectors()}}class yh{adbFactory;constructor(i){this.adbFactory=i}createDriver(i){return new f(k.getInstance(i,this.adbFactory))}}var l=new Map,u=new Map;function Wq(i,o){C4(o.deviceId),l.set(i,{...o}),u.set(i,(u.get(i)??0)+1)}function ho(i){let o=l.get(i);return o?{sessionUuid:i,device:{...o},incarnation:u.get(i)??0}:void 0}function sQ(){let i=new Map;for(let o of l.values())i.set(o.deviceId,{...o});return[...i.values()]}function aQ(i){l.delete(i),u.delete(i)}function C4(i){for(let[o,n]of l)if(n.deviceId===i)l.delete(o)}function zq(i,o){for(let[n,a]of l)if(a.platform===i&&(i==="android"?a.deviceId.startsWith("emulator-")&&a.name===o:a.deviceId===o))l.delete(n)}var D4=["gesture","threeButton","twoButton"],jq=["corner","double","hole","tall","waterfall"],vh=200,Kq=2,cQ=16384;var S={navigationMode:"com.android.internal.systemui.navbar.",displayCutout:"com.android.internal.display.cutout.emulation."},w={gesture:"com.android.internal.systemui.navbar.gestural",threeButton:"com.android.internal.systemui.navbar.threebutton",twoButton:"com.android.internal.systemui.navbar.twobutton"};function Gq(i,o){return i.filter((n)=>n.packageName.startsWith(S[o]))}function vF(i,o){return Gq(i,o).filter((n)=>n.enabled).map((n)=>n.packageName)}function O4(i,o){if(o==="default"||o==="none")return[];return i==="navigationMode"?[w[o]]:[`com.android.internal.display.cutout.emulation.${o}`]}function bF(i,o){if(o.length===0)return i==="navigationMode"?"default":"none";if(o.length>1)return;let n=o[0].slice(S[i].length);if(i==="displayCutout")return jq.includes(n)?n:void 0;if(n==="gestural"||n.startsWith("gestural_"))return"gesture";return n==="threebutton"?"threeButton":n==="twobutton"?"twoButton":void 0}function Yq(i,o){let n=new Set(Gq(i,o).map((s)=>s.packageName)),c=(o==="navigationMode"?D4:jq).filter((s)=>n.has(O4(o,s)[0]));return[o==="navigationMode"?"default":"none",...c]}function Jq(i,o){if(i.length===o.length&&o.every((s)=>i.includes(s)))return[];let[a,...c]=o;return[...a===void 0?[]:[`shell cmd overlay enable-exclusive --category ${a}`],...c.map((s)=>`shell cmd overlay enable ${s}`),...i.filter((s)=>!o.includes(s)).map((s)=>`shell cmd overlay disable ${s}`)]}function qS(i){let o={};for(let n of i.matchAll(/^[ \t]*(Physical|Override) size:[ \t]*([^\r\n]*)/gim)){let a=/^(\d+)x(\d+)$/.exec(n[2].trim()),c=n[1].toLowerCase();if(!a||o[c]!==void 0)return;o[c]={width:Number(a[1]),height:Number(a[2])}}return o.physical===void 0?void 0:o}function x(i){return i===void 0||i===0?"":` -d ${i}`}function VS(i){return`shell wm size${x(i)}`}function Xq(i,o){return`shell wm size ${i==="default"?"reset":`${i.width}x${i.height}`}${x(o)}`}function Jx(i){return i.override??"default"}function Gy(i){return i.override??i.physical}function M4(i,o){if(i===void 0||o===void 0||i==="default"||o==="default")return i===o;return i.width===o.width&&i.height===o.height}function SF(i){return i===void 0||i==="default"?String(i):`${i.width}x${i.height}`}
|
|
3
|
-
export{x4,Yx,mF,fF,hF,gF,yF,tQ,rQ,nQ,qA,iQ,Vq,oQ,yh,Wq,ho,sQ,aQ,C4,zq,D4,jq,vh,Kq,cQ,Gq,vF,O4,bF,Yq,Jq,qS,VS,Xq,Jx,Gy,M4,SF};
|
|
4
|
-
|
|
5
|
-
//# debugId=55885077B6C07F7D64756E2164756E21
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{YY}from"./chunk-js1jpyxp.js";import"./chunk-tyazf3sk.js";import"./chunk-z04jrpjy.js";import"./chunk-0e4gm1kj.js";import"./chunk-6d3mmqxt.js";import"./chunk-zg67wjkh.js";import"./chunk-h3n4adc6.js";import"./chunk-32jpxz2y.js";import"./chunk-79q5xsdc.js";import"./chunk-ggtd5x5a.js";import"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";export{YY as getSharedStorageReadService};
|
|
3
|
-
|
|
4
|
-
//# debugId=5F067EBC800CFC1664756E2164756E21
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Ge,pe,Y,o,R,st,eg,Gt,G,WL,er,GL,Ot,rd,jo,_,k}from"./chunk-h3n4adc6.js";import{i,Bt,Se,Ft,l,e}from"./chunk-z8t0v07j.js";import{De,Ht,wt}from"./chunk-4fgdhcwx.js";import{r,u,yt}from"./chunk-9rkfyt6q.js";function Y0(s,t,n){return["android.","androidx."].some((a)=>s?.startsWith(a))&&typeof t==="string"&&t!==""&&n===t}function w(s){return s?.tokens??[]}function A(s){return s.tokens===void 0?s.value??"":s.trailingText}function F(...s){return s.some((t)=>w(t).length>0)}function g(s){let t=w(s);return t.length===0?"no tokens":`tokens ${JSON.stringify(t)}`}function V(s,t){let n=Array.from(t),a=0;for(let d of s)if(d===n[a])a++;return a===n.length}function P(s,t,n){if(!F(t,n))return;if(w(n).length>w(t).length)return{success:!0};let a=A(t),d=A(n);if(a===void 0||d===void 0)return{success:!0,warning:"iOS typed text result was not verified: the recipient field's value does not follow its tokens."};if(a===d)return{success:!1,error:`iOS nothing was typed: no new recipient token was committed and the text after the tokens is unchanged (${g(n)}).`};return V(d,s)?{success:!0}:{success:!0,warning:`iOS typed text changed in the recipient field; text after the tokens: ${JSON.stringify(d)} (${g(n)}).`}}function D(s,t,n){if(!F(t,n))return;let a=w(t);if(w(n).length>a.length)return`a new recipient token was committed (${g(n)}).`;let c=t===void 0?"":A(t),f=A(n);if(c===void 0||f===void 0)return`the recipient field's value does not follow its tokens, so the typed text is unknown (${g(n)}).`;if(c===f)return`no new recipient token was committed and the text after the tokens is unchanged (${g(n)}).`;return V(f,s)?`the text after the recipient tokens now contains the typed characters (${g(n)}).`:`the text after the recipient tokens changed to ${JSON.stringify(f)} (partial or altered input; ${g(n)}).`}class C extends G{extractNodeProperties(s){let t=Se(s),n=t.class??t.className;if(t.password===!0||t.password==="true"||typeof n==="string"&&n.includes("SecureTextField"))return{focused:t.focused,class:n,password:!0,editable:t.editable,actions:t.actions,"resource-id":t["resource-id"],bounds:t.bounds};return super.extractNodeProperties(s)}}var I=512,M=`iOS typed text result was not verified: the focused field value fills the ${I}-character read window, so a change past it cannot be seen.`;function B(s,t,n,a){let d=t.length+s.length-n.length;if(d<0||!a&&d!==0)return!1;for(let c=n.indexOf(s);c!==-1;c=n.indexOf(s,c+1)){if(n.slice(0,c)!==t.slice(0,c))return!1;if(n.slice(c+s.length)===t.slice(c+d))return!0}return!1}function Z(s,t,n,a){if(n.length===I)return{success:!0,warning:M};if(t===n)return{success:!1,error:"iOS nothing was typed: the focused field value is unchanged."};return B(s,t,n,a)?{success:!0}:{success:!1,error:"iOS typed text chunk was not fully appended to the focused field."}}function O(s,t={secure:!1},n={secure:!1},a=!1){if(t.secure||n.secure)return{success:!0,warning:"iOS typed text check skipped for a secure field."};return((typeof a==="boolean"?a:a.verifyAppend)?Q(s,t,n,typeof a!=="boolean"&&a.firstChunk===!0):void 0)??ee(s,t,n)}function Q(s,t,n,a){if(t.identity!==void 0&&n.identity!==void 0&&t.identity!==n.identity)return{success:!0,warning:"iOS typed text result was not verified: focus moved to another field."};let d=t.nativeEditableValues??{},c=n.nativeEditableValues??{};if(Object.keys(d).some((f)=>Object.hasOwn(c,f)&&d[f]!==c[f]&&B(s,d[f],c[f],a)))return{success:!0};if(t.value!==void 0&&n.value!==void 0&&!F(t,n))return Z(s,t.value,n.value,a);return}function ee(s,t,n){if(H(t.nativeEditableValues,n.nativeEditableValues)==="changed")return{success:!0};let d=P(s,t,n);if(d!==void 0)return d;if(t.value===void 0||n.value===void 0)return{success:!0,warning:"iOS typed text result was not verified: the focused field could not be read."};if(n.value.length>=I)return{success:!0,warning:M};if(t.value===n.value)return{success:!1,error:"iOS nothing was typed: the focused field value is unchanged."};return K(n.value,s)?{success:!0}:{success:!0,warning:`iOS typed text changed in the focused field; observed value: ${JSON.stringify(n.value)}.`}}function te(s,t,n){if(n===void 0)return"the focused field could not be read, so what was committed is unknown.";if(t?.secure||n.secure)return"the focused field is secure; its content was not inspected.";let a=D(s,t,n);if(a!==void 0)return a;if(H(t?.nativeEditableValues,n.nativeEditableValues)==="changed")return"another editable on screen changed (a recipient or token entry may hold the text), so the focused field's value does not show what was committed.";return ne(s,t?.value,n.value)}function ne(s,t,n){if(n!==void 0&&n.length>=I)return`the focused field's value fills the ${I}-character read window, so what was committed is unknown.`;if(t===void 0||n===void 0)return"the focused field's value could not be read, so what was committed is unknown.";if(t===n)return"the focused field's value is unchanged from before typing; entries held as separate tokens would not show in it.";return K(n,s)?"the focused field now contains the typed characters.":`the focused field's value changed to ${JSON.stringify(n)} (partial or altered input).`}function H(s={},t={}){let n=Object.keys(s).filter((a)=>Object.hasOwn(t,a));if(n.some((a)=>s[a]!==t[a]))return"changed";return n.length>0?"unchanged":"unavailable"}function K(s,t){let n=Array.from(t),a=0;for(let d of s)if(d===n[a])a++;return a===n.length}function re(s,t){let n=jo(),a=n===void 0?void 0:n-s.now();return t===void 0?a:Math.min(t,a??t)}async function fh(s,t={},n){let a=await c4(s,t,n);return a.kind==="read"?a.field:void 0}async function c4(s,t={},n){let{observer:a,timer:d,signal:c,display:f}=s,h=pe(c),m=re(d,n);if(h?.aborted||m!==void 0&&m<=0)return{kind:"unavailable"};let p=new AbortController,x=Ge(h,p.signal);try{let b=await l(()=>a.execute({freshness:"fresh",skipScreenshot:!0,skipAccessibilityAudit:!0,signal:x,timeoutMs:m,...f===void 0?{}:{display:f}}),{timer:d,timeoutMs:m,signal:x,label:"iOS typed text verification",onTimeout:()=>p.abort()}),y=b.viewHierarchy;if(b.freshness?.isFresh===!1||!y||y.hierarchy.error)return{kind:"unavailable"};return{kind:"read",field:Vd(y,new C,{...t,includeIosNativeEditableValues:!0}),hasFocusedTextInput:oc(y,new C),keyboardVisible:GL(b.viewHierarchy,b.screenSize)}}catch{return e.warn("[iOS typed text] Focused field read unavailable; result cannot be verified"),{kind:"unavailable"}}}var ie=1000,oe=250;async function J0(s,t,n,a=!1){let{timer:d,signal:c}=n,f=typeof a==="boolean"?a:a.verifyAppend;if(t?.secure&&!f)return{...O(s,t,void 0),after:t};let h=await fh(n,{includeIdentity:f}),m=O(s,t,h,a),p=d.now()+ie;while(!m.success&&F(t,h)&&d.now()<p)c?.throwIfAborted(),await d.sleep(oe),h=await fh(n,{includeIdentity:f},Math.max(0,p-d.now())),m=O(s,t,h,a);return{...m,after:h}}var se=2000;async function X0(s,t,n,a){if(!WL(s))return s;let d=n?.secure?n:await fh(a,{},se);return`${s} Observed afterwards: ${te(t,n,d)}`}var ae=3,de=Bt([100,200]);function ue(s,t){return Object.entries(s?.nativeEditableValues??{}).some(([n,a])=>a!==""&&t?.nativeEditableValues?.[n]==="")}function ce(s){return s?.keyboardNativeEditableValue===""}function L(s,t,n=1,a){if(ue(a,s)||ce(s))return{success:!0};if(s?.secure)return{success:!0,warning:"iOS clear check skipped for a secure field."};if(s?.value===void 0){if(t!==void 0)return{success:!1,partialApplication:!0,error:`iOS clear could not be verified after ${n} attempt(s); the focused field last held ${JSON.stringify(t)} and could not be read again.`};return{success:!0,warning:"iOS clear was not verified: the focused field could not be read."}}if(s.value===t)return le(s.value,n,a?.value);return s.value===""?{success:!0}:s.value}function le(s,t,n){if(s!==""&&s===n)return{success:!1,error:`iOS clear removed nothing after ${t} attempt(s): the runner acknowledged each clear, but the focused field still holds its pre-clear value; remaining value: ${JSON.stringify(s)}.`};return{success:!0,warning:`The field still holds ${JSON.stringify(s)} after the clear was acknowledged and retried; it may be a mask or permanent prefix at its cleared content, or the app may have refused the clear.`}}function W(s){if(s===void 0)return"unreadable";let t=Object.entries(s.nativeEditableValues??{}).map(([n,a])=>`${n}:${a.length}`);return`focusedLength=${s.value?.length??"none"} native={${t.join(",")}} keyboardEditableLength=${s.keyboardNativeEditableValue?.length??"none"}`}async function fe(s,t,n){n?.throwIfAborted();let a=de.delayForAttempt(t),d=jo();if(d!==void 0&&d-s.now()<=a)return!1;await l(()=>s.sleep(a),{timer:s,signal:n,label:"iOS clear retry"}),n?.throwIfAborted();let c=jo();return c===void 0||c>s.now()}async function Aq({clear:s,observer:t,timer:n,signal:a,display:d}){let c=pe(a),f=async(v=!1)=>{c?.throwIfAborted();let T=await fh({observer:t,timer:n,signal:c,display:d},{iosPlaceholderAsBlank:!0});if(c?.throwIfAborted(),v&&!T?.secure&&T?.value===void 0)e.warn("[iOS clear] Pre-clear field read unavailable; using post-clear verification only");return T},h=await f(!0),m=await s();if(!m.success)return m;if(c?.throwIfAborted(),h?.secure)return{success:!0,warning:"iOS clear check skipped for a secure field."};let p=await f(),x=L(p,void 0,1,h),b=1;while(typeof x==="string"&&b<ae){if(!await fe(n,b,c))break;let v=await s();if(b++,!v.success)return{...v,partialApplication:!0};p=await f(),x=L(p,x,b,h)}let y=typeof x==="string"?{success:!1,partialApplication:!0,error:`iOS clear left text in the focused field after ${b} attempt(s); remaining value: ${JSON.stringify(x)}.`}:x;if(!y.success)e.warn(`[iOS clear] Verification failed; before ${W(h)}; after ${W(p)}`);return y}class N{editables=[];keyboardTop;recordKeyboard(s){if(s)this.keyboardTop=Math.min(this.keyboardTop??s.top,s.top)}recordEditable(s,t){if(t)this.editables.push({value:s,bounds:t})}soleValueAboveKeyboard(){let s=this.keyboardTop;if(s===void 0)return;let t=this.editables.filter((n)=>n.bounds.bottom<=s);return t.length===1?t[0].value:void 0}}function he(s,t){return s!==null&&t!==null&&s.left>=t.left&&s.right<=t.right&&s.top>=t.top&&s.bottom<=t.bottom}function me(s,t,n){let a=n.extractNodeProperties(s),d=er(a),c=d.textSources.text;if(!(d.className==="UIButton"||a.role==="button")||!st(a.clickable)||d.nativeId!==void 0||c===void 0||c===""||!he(Gt(Ft(s)),t))return;return c}function ye(s,t){let n=s;for(let a of t){if(!n.startsWith(a))return;n=n.slice(a.length),n=n.startsWith(" ")?n.slice(1):n}return n}function U(s,t,n){let a=Gt(Ft(s)),d=(s.node??[]).flatMap((f)=>me(f,a,n)??[]);if(d.length===0)return;let c=t===void 0?void 0:ye(t,d);return c===void 0?{tokens:d}:{tokens:d,trailingText:c}}var Z0=1000,q=50;function E(s,t){let n=t.extractWindowRootGroups(s,"topmost-first"),a=t.extractRootNodes(s),d=new Set,c=(f)=>f.filter((h)=>{if(d.has(h))return!1;return d.add(h),!0});return[...n,a].map(c).filter((f)=>f.length>0)}function xe(s,t){let n=er(s),a=n.textSources.value??n.textSources.text,d=["android.","androidx."].some((f)=>n.className?.startsWith(f));if(!t&&Y0(n.className,s["hint-text"],a))return 0;let c=typeof a==="string"?a.length:n.capturedTextLength;if(c===void 0&&d&&S(s)&&!st(s.password))return 0;return c}function Kl(s,t=new G,n=!1){for(let a of E(s,t)){let d;for(let c of a)t.traverseNode(c,(f)=>{let h=t.extractNodeProperties(f),m=xe(h,n);if((h.focused==="true"||h.focused===!0)&&m!==void 0)d=Math.max(d??0,m)});if(d!==void 0)return d}return}function oc(s,t=new G){for(let n of E(s,t))for(let a of n){let d=!1;if(t.traverseNode(a,(c)=>{if(d)return;let f=t.extractNodeProperties(c);if(S(f))d=!0}),d)return!0}return!1}function Q0(s,t=new G){for(let n of E(s,t)){let a;for(let d of n)t.traverseNode(d,(c)=>{let f=t.extractNodeProperties(c);if(a!==void 0||!S(f))return;a=j(f,!0)});if(a!==void 0)return a}return}function j(s,t=!1){let n=er(s);if(!t&&n.nativeId===void 0&&n.bounds===void 0)return;return JSON.stringify([n.nativeId??null,n.className??null,n.bounds?.left??null,n.bounds?.top??null])}function Vd(s,t=new G,n={}){for(let a of E(s,t)){let d,c=n.includeIosNativeEditableValues?{}:void 0,f=n.includeIosNativeEditableValues?new N:void 0;for(let h of a){let m,p;if(t.traverseNode(h,(x,b)=>{if(p!==void 0&&b<=p)p=void 0;let y=t.extractNodeProperties(x),v=y.class??y.className;if(p===void 0&&v==="WKWebView")p=b;if(p===void 0)be(y,c),ge(x,y,f);if(!S(y))return;let T=we(x,y,n,t);if(T===void 0)return;d??=T,m??=p===void 0?T:void 0}),m!==void 0)return m}if(c&&Object.keys(c).length>0)return Te(d,c,f);if(d!==void 0)return d}return}function be(s,t){if(!t||st(s.focused)||!z(s))return;let n=er(s),a=s["view-id"]??n.nativeId;if(typeof a==="string"&&a!==""){let d=typeof s.value==="string"?s.value:"";t[a]=d===s["hint-text"]?"":d}}function Te(s,t,n){let a=n?.soleValueAboveKeyboard();return{...s??{secure:!1},nativeEditableValues:t,...a===void 0?{}:{keyboardNativeEditableValue:a}}}function ge(s,t,n){if(!n)return;if((t.class??t.className)==="UIKeyboard"){n.recordKeyboard(Gt(Ft(s)));return}if(z(t)){let d=typeof t.value==="string"?t.value:"";n.recordEditable(d===t["hint-text"]?"":d,Gt(Ft(s)))}}function X(s){let t=s.class??s.className;return st(s.password)||typeof t==="string"&&t.includes("SecureTextField")}function z(s){let t=s.class??s.className;if(X(s))return!1;return s.role==="textfield"||Array.isArray(s.actions)&&s.actions.includes("set_text")||typeof t==="string"&&/UITextField|UISearchBar|UITextView/.test(t)}function ve(s,t){let n=er(s),a=X(s),d=n.textSources.value??n.textSources.text??(n.capturedTextLength===0?"":void 0);if(a)return{value:d,secure:a};let c=t.iosEmptyAsBlank?J(n.textSources):t.iosPlaceholderAsBlank?n.textSources.value===void 0?void 0:J(n.textSources):d;return c!==void 0||t.includeIosNativeEditableValues?{value:c,secure:a}:void 0}function we(s,t,n,a){let d=ve(t,n),c=d&&n.includeIdentity?{...d,identity:j({...t,bounds:Ft(s)})}:d;if(c===void 0||c.secure)return c;let f=U(s,c.value,a);return f===void 0?c:{...c,...f}}function J(s){let t=s.value;return t===void 0||t===s["hint-text"]?"":t}function S(s){if(s.focused!=="true"&&s.focused!==!0)return!1;let t=s.class??s.className,n=typeof t==="string"&&(t.includes("SecureTextField")||eg.some((f)=>t.includes(f))),a=s.actions,d=Array.isArray(a)&&a.includes("set_text"),c=s.editable==="true"||s.editable===!0;return n||d||c}async function Tq(s,t,{signal:n,onDelete:a,supportsKeyCombination:d}={}){if(n?.throwIfAborted(),await s.executeCommand(d?"shell input keycombination KEYCODE_CTRL_LEFT KEYCODE_A":"shell input keyevent KEYCODE_MOVE_END"),n?.throwIfAborted(),d){await s.executeCommand("shell input keyevent KEYCODE_DEL"),a?.(),n?.throwIfAborted();return}for(let c=0;c<t;c+=q){n?.throwIfAborted();let f=Math.min(q,t-c),h=Array(f).fill("KEYCODE_DEL").join(" ");await s.executeCommand(`shell input keyevent ${h}`),a?.(),n?.throwIfAborted()}}async function kq(s,t,n=new G){o(t);try{let a=await s();o(t);let d=a.viewHierarchy;if(a.freshness?.isFresh===!1||!d||d.hierarchy.error||!oc(d,n))return{success:!1,error:"Cannot verify key-event clear: no fresh focused editable field available"};let c=Kl(d,n);if(c===void 0)return{success:!1,error:"Cannot verify key-event clear: focused field text length is unreadable"};return c===0?{success:!0}:{success:!1,error:`Field was not fully cleared: ${c} UTF-16 units remain`}}catch(a){return o(t),e.warn("[ClearText] Key-event clear verification unavailable",a),{success:!1,error:`Cannot verify key-event clear: ${r(a)}`}}}class poe extends De{parser;androidKeyCombinationSupported;constructor(s,t=null,n=new G,a=i){super(s,{adb:t,timer:a});this.parser=n}async execute(s,t){t?.throwIfAborted();let n=Y();return n.serial("clearText"),this.observedInteraction(async(a)=>{try{switch(this.device.platform){case"android":return await n.track("androidClearText",()=>this.executeAndroidClearText(a,t));case"ios":return await n.track("iOSClearText",()=>this.executeiOSClearText(a,t));default:throw n.end(),yt(this.device.platform,"clear text")}}catch(d){n.end(),t?.throwIfAborted();let c=u(d,"Failed to clear text");return e.warn(`[ClearText] ${c.message}`),{success:!1,error:c.message}}},{...Ht.textEdit,tolerancePercent:0,timeoutMs:wt.immediate,progress:s,signal:t,perf:n})}get testHooks(){return{executeAndroidClearText:this.executeAndroidClearText.bind(this),executeiOSClearText:this.executeiOSClearText.bind(this)}}async executeAndroidClearText(s,t){let n=s.viewHierarchy,a=s;if(n&&!n.hierarchy.error&&!oc(n,this.parser)){let f=await this.refreshFocusedTextInputObservation(n,t).catch((h)=>{t?.throwIfAborted(),e.warn("[ClearText] Focus refresh unavailable; trying live clearing",h);return});if(f?.viewHierarchy&&!oc(f.viewHierarchy,this.parser))return{success:!1,error:"No focused editable node found"};a=f??{...s,viewHierarchy:void 0}}let d=k.getInstance(this.device,this.adbFactory);t?.throwIfAborted();let c=await d.requestClearText();if(t?.throwIfAborted(),c.success)return e.info(`[ClearText] Cleared text via accessibility service: ${c.totalTimeMs}ms`),{success:!0};return e.warn(`[ClearText] Accessibility service clear failed: ${c.error}, falling back to ADB`),this.executeAdbClearText(a,t)}async refreshFocusedTextInputObservation(s,t){let n;if(typeof s.updatedAt==="number")n=s.updatedAt+1;else{t?.throwIfAborted();let c=await this.adb.getDeviceTimestampMsWithSource();if(t?.throwIfAborted(),c.source==="host")return;n=c.source==="device-seconds"?c.timestampMs+Z0:c.timestampMs}t?.throwIfAborted();let a=await this.observeScreen.execute({freshness:"fresh",minTimestamp:n,signal:t,skipScreenshot:!0});t?.throwIfAborted();let d=a.viewHierarchy;return a.freshness?.isFresh!==!1&&d&&!d.hierarchy.error?a:void 0}async executeAdbClearText(s,t){let n=s.viewHierarchy,d=(n&&!n.hierarchy.error?Kl(n,this.parser):void 0)??200;if(d===0)return{success:!0};return await this.clearWithDeletes(d,t),kq(()=>this.observeScreen.execute({freshness:"fresh",minTimestamp:0,signal:t,skipScreenshot:!0}),t,this.parser)}async executeiOSClearText(s,t){let n=Date.now();e.debug("[ClearText] iOS begin");try{let a=_.getInstance(this.device);t?.throwIfAborted();let c=await Aq({clear:()=>{let f=jo();return a.requestClearText(void 0,5000,void 0,{abortSignal:t,...f===void 0?{}:{deadlineMs:f}})},observer:this.observeScreen,timer:this.timer,signal:t});if(c.retryable!==!1)t?.throwIfAborted();if(c.success)return e.info(`[ClearText] Cleared text via CtrlProxy iOS totalMs=${Date.now()-n}`),{success:!0,..."warning"in c&&c.warning?{warnings:[c.warning]}:{}};return e.warn(`[ClearText] CtrlProxy iOS clear failed: ${c.error} totalMs=${Date.now()-n}`),{success:!1,error:c.error,...c.retryable===!1?{retryable:!1}:{}}}catch(a){return t?.throwIfAborted(),e.warn(`[ClearText] CtrlProxy iOS exception: ${r(a)} totalMs=${Date.now()-n}`,a),{success:!1,error:String(a)}}}findAnyTextInputLength(s){let t=0;for(let n of E(s,this.parser))for(let a of n)this.parser.traverseNode(a,(d)=>{let c=this.parser.extractNodeProperties(d),f=er(c).textSources.text;if(c.class&&eg.some((h)=>c.class.includes(h))&&f&&typeof f==="string")t=Math.max(t,f.length)});return t}async clearWithDeletes(s,t){this.androidKeyCombinationSupported??=Ot(this.adb,1000,this.timer).then((a)=>a!==null&&a>=rd).catch((a)=>{throw this.androidKeyCombinationSupported=void 0,u(a,"Failed to read Android key-combination capability")});let n=await R(this.androidKeyCombinationSupported,t);await Tq(this.adb,s,{signal:t,supportsKeyCombination:n})}}
|
|
3
|
-
export{Y0,fh,c4,J0,X0,Aq,Z0,Kl,oc,Q0,Vd,Tq,kq,poe};
|
|
4
|
-
|
|
5
|
-
//# debugId=9C0E29CBB734F64964756E2164756E21
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{jf,sA,mS,jN,KN,Kf}from"./chunk-44bt78m9.js";import"./chunk-jhnbfj19.js";import"./chunk-sjn0nj4p.js";import"./chunk-bn64x5z5.js";import"./chunk-0e4gm1kj.js";import"./chunk-4fgdhcwx.js";import"./chunk-6d3mmqxt.js";import"./chunk-sns0c35v.js";import"./chunk-h3n4adc6.js";import"./chunk-32jpxz2y.js";import"./chunk-79q5xsdc.js";import"./chunk-ggtd5x5a.js";import"./chunk-z8t0v07j.js";import"./chunk-mf9spd4g.js";export{sA as DEFAULT_MCP_REQUEST_TIMEOUT_MS,jf as MAX_CALLER_MCP_REQUEST_TIMEOUT_MS,Kf as ProgressExtendableDeadline,mS as clampCallerMcpRequestTimeoutMs,jN as resolveMcpRequestTimeoutMs,KN as resolveMcpRequestTimeoutMsOnce};
|
|
3
|
-
|
|
4
|
-
//# debugId=4B99B172463A051564756E2164756E21
|