react-native-ai-debugger 2.2.0 → 2.4.0
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/README.md +4 -3
- package/build/__tests__/unit/overlayGuard.test.d.ts +2 -0
- package/build/__tests__/unit/overlayGuard.test.d.ts.map +1 -0
- package/build/__tests__/unit/overlayGuard.test.js +140 -0
- package/build/__tests__/unit/overlayGuard.test.js.map +1 -0
- package/build/__tests__/unit/screenSpace.test.d.ts +2 -0
- package/build/__tests__/unit/screenSpace.test.d.ts.map +1 -0
- package/build/__tests__/unit/screenSpace.test.js +91 -0
- package/build/__tests__/unit/screenSpace.test.js.map +1 -0
- package/build/__tests__/unit/tap.test.js +2 -2
- package/build/__tests__/unit/tap.test.js.map +1 -1
- package/build/__tests__/unit/visibility.test.js +21 -0
- package/build/__tests__/unit/visibility.test.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +18 -4
- package/build/core/guides.js.map +1 -1
- package/build/core/index.d.ts +1 -1
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +1 -1
- package/build/core/index.js.map +1 -1
- package/build/core/injected/visibility.d.ts +14 -1
- package/build/core/injected/visibility.d.ts.map +1 -1
- package/build/core/injected/visibility.js +28 -4
- package/build/core/injected/visibility.js.map +1 -1
- package/build/core/injectedFilters.d.ts +10 -2
- package/build/core/injectedFilters.d.ts.map +1 -1
- package/build/core/injectedFilters.js +10 -2
- package/build/core/injectedFilters.js.map +1 -1
- package/build/core/inspector.d.ts +6 -0
- package/build/core/inspector.d.ts.map +1 -1
- package/build/core/inspector.js +227 -40
- package/build/core/inspector.js.map +1 -1
- package/build/core/ios.d.ts +16 -0
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +48 -4
- package/build/core/ios.js.map +1 -1
- package/build/core/pressables.d.ts +0 -32
- package/build/core/pressables.d.ts.map +1 -1
- package/build/core/pressables.js +5 -1061
- package/build/core/pressables.js.map +1 -1
- package/build/core/screenLayout.d.ts +3 -0
- package/build/core/screenLayout.d.ts.map +1 -1
- package/build/core/screenLayout.js +55 -1
- package/build/core/screenLayout.js.map +1 -1
- package/build/core/screenSpace.d.ts +170 -0
- package/build/core/screenSpace.d.ts.map +1 -0
- package/build/core/screenSpace.js +221 -0
- package/build/core/screenSpace.js.map +1 -0
- package/build/core/screenSpaceDevice.d.ts +15 -0
- package/build/core/screenSpaceDevice.d.ts.map +1 -0
- package/build/core/screenSpaceDevice.js +64 -0
- package/build/core/screenSpaceDevice.js.map +1 -0
- package/build/core/screenState.d.ts +2 -1
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +315 -48
- package/build/core/screenState.js.map +1 -1
- package/build/pro/overlayGuard.d.ts +65 -0
- package/build/pro/overlayGuard.d.ts.map +1 -0
- package/build/pro/overlayGuard.js +166 -0
- package/build/pro/overlayGuard.js.map +1 -0
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +104 -25
- package/build/pro/tap.js.map +1 -1
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +82 -192
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/screenshotTools.d.ts.map +1 -1
- package/build/tools/screenshotTools.js +37 -72
- package/build/tools/screenshotTools.js.map +1 -1
- package/package.json +1 -1
- package/tools.json +1 -5
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-dispatch overlay guard for `tap`.
|
|
3
|
+
*
|
|
4
|
+
* The OS always delivers a touch to the topmost view, so a coordinate tap physically
|
|
5
|
+
* cannot reach an element that an overlay is painted over — the touch goes to the
|
|
6
|
+
* overlay. That is correct behaviour and nothing about tap dispatch should change.
|
|
7
|
+
*
|
|
8
|
+
* What must change is that execbro not fire such a tap at all. In the reported case the
|
|
9
|
+
* touch did not vanish harmlessly: it opened a sheet's network-request detail view, so
|
|
10
|
+
* execbro mutated app state the agent never asked to change and was never told about.
|
|
11
|
+
* Declining is strictly better, and the agent's correct next move — dismiss the overlay,
|
|
12
|
+
* then retry — is the same either way.
|
|
13
|
+
*
|
|
14
|
+
* The check runs on the resolved TARGET, not on the strategy, because every strategy
|
|
15
|
+
* (fiber, accessibility, OCR, raw coordinates) funnels into a coordinate tap.
|
|
16
|
+
*/
|
|
17
|
+
import type { ScreenState } from "../core/screenState.js";
|
|
18
|
+
export type OverlayVerdict =
|
|
19
|
+
/** Nothing reachable at the target; an overlay is painted over it. Do not dispatch. */
|
|
20
|
+
{
|
|
21
|
+
kind: "blocked";
|
|
22
|
+
element: string;
|
|
23
|
+
overlay: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A coordinate that an overlay's own control occupies, while a covered element also
|
|
27
|
+
* sits underneath it. The tap is legitimate — the OS will deliver it to the overlay
|
|
28
|
+
* control, which is a real element — but the caller may well have been aiming at the
|
|
29
|
+
* thing behind. Dispatch, and say which one actually got it.
|
|
30
|
+
*/
|
|
31
|
+
| {
|
|
32
|
+
kind: "shadowed";
|
|
33
|
+
hit: string;
|
|
34
|
+
covered: string;
|
|
35
|
+
overlay: string;
|
|
36
|
+
};
|
|
37
|
+
export interface OverlayGuardQuery {
|
|
38
|
+
text?: string;
|
|
39
|
+
testID?: string;
|
|
40
|
+
component?: string;
|
|
41
|
+
x?: number;
|
|
42
|
+
y?: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The decision itself, over a screen state whose coordinates are already in the caller's
|
|
46
|
+
* delivered-pixel space. Pure and exported so the refusal rules — the ones that can break
|
|
47
|
+
* every tap in the product if they are wrong — are testable without a device.
|
|
48
|
+
*
|
|
49
|
+
* Returns null for anything short of a confident "blocked". A guard that fires on
|
|
50
|
+
* uncertainty blocks legitimate taps, which is a worse failure than the mis-delivery it
|
|
51
|
+
* is trying to prevent.
|
|
52
|
+
*/
|
|
53
|
+
export declare function decideOverlayBlock(ss: ScreenState, query: OverlayGuardQuery): OverlayVerdict | null;
|
|
54
|
+
/**
|
|
55
|
+
* Read the current screen, normalise it into the caller's coordinate space, and apply
|
|
56
|
+
* {@link decideOverlayBlock}. Null on any I/O failure — see that function's contract.
|
|
57
|
+
*/
|
|
58
|
+
export declare function checkOverlayBlocking(args: {
|
|
59
|
+
query: OverlayGuardQuery;
|
|
60
|
+
platform: "ios" | "android";
|
|
61
|
+
udid?: string;
|
|
62
|
+
deviceId?: string;
|
|
63
|
+
deviceName?: string;
|
|
64
|
+
}): Promise<OverlayVerdict | null>;
|
|
65
|
+
//# sourceMappingURL=overlayGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlayGuard.d.ts","sourceRoot":"","sources":["../../src/pro/overlayGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,wBAAwB,CAAC;AAIhF,MAAM,MAAM,cAAc;AACtB,uFAAuF;AACrF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACvD;;;;;GAKG;GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACd;AAuDD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,iBAAiB,GACzB,cAAc,GAAG,IAAI,CA2DvB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC7C,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAsBjC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-dispatch overlay guard for `tap`.
|
|
3
|
+
*
|
|
4
|
+
* The OS always delivers a touch to the topmost view, so a coordinate tap physically
|
|
5
|
+
* cannot reach an element that an overlay is painted over — the touch goes to the
|
|
6
|
+
* overlay. That is correct behaviour and nothing about tap dispatch should change.
|
|
7
|
+
*
|
|
8
|
+
* What must change is that execbro not fire such a tap at all. In the reported case the
|
|
9
|
+
* touch did not vanish harmlessly: it opened a sheet's network-request detail view, so
|
|
10
|
+
* execbro mutated app state the agent never asked to change and was never told about.
|
|
11
|
+
* Declining is strictly better, and the agent's correct next move — dismiss the overlay,
|
|
12
|
+
* then retry — is the same either way.
|
|
13
|
+
*
|
|
14
|
+
* The check runs on the resolved TARGET, not on the strategy, because every strategy
|
|
15
|
+
* (fiber, accessibility, OCR, raw coordinates) funnels into a coordinate tap.
|
|
16
|
+
*/
|
|
17
|
+
import { getScreenState } from "../core/screenState.js";
|
|
18
|
+
import { screenStateToScreenSpace, screenStateToDeliveredPx } from "../core/screenSpace.js";
|
|
19
|
+
import { resolveScreenSpaceMetrics } from "../core/screenSpaceDevice.js";
|
|
20
|
+
function describePressable(p) {
|
|
21
|
+
const tag = p.component ? `<${p.component} />` : "element";
|
|
22
|
+
const label = p.label ? ` "${p.label}"` : "";
|
|
23
|
+
const tid = p.testID ? ` testID="${p.testID}"` : "";
|
|
24
|
+
return `${tag}${label}${tid}`;
|
|
25
|
+
}
|
|
26
|
+
function describeOverlay(o) {
|
|
27
|
+
// "Unknown" is the internal bucket for a sheet recognised by geometry rather than by
|
|
28
|
+
// component name. Surfacing that word to an agent reads like a failure, when the
|
|
29
|
+
// finding itself is certain — it is the overlay's identity that is unknown, not its
|
|
30
|
+
// presence.
|
|
31
|
+
const kind = o.type === "Unknown" ? "overlay" : o.type;
|
|
32
|
+
return o.title ? `${kind} "${o.title}"` : kind;
|
|
33
|
+
}
|
|
34
|
+
/** Smallest pressable whose box contains the point — the innermost, most specific hit. */
|
|
35
|
+
function hitAt(candidates, x, y) {
|
|
36
|
+
let best = null;
|
|
37
|
+
let bestArea = Infinity;
|
|
38
|
+
for (const p of candidates) {
|
|
39
|
+
const b = p.bounds;
|
|
40
|
+
if (x < b.x || y < b.y || x > b.x + b.width || y > b.y + b.height)
|
|
41
|
+
continue;
|
|
42
|
+
const area = b.width * b.height;
|
|
43
|
+
if (area < bestArea) {
|
|
44
|
+
best = p;
|
|
45
|
+
bestArea = area;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return best;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Any provided field matching is a match — deliberately not a priority chain.
|
|
52
|
+
*
|
|
53
|
+
* tap itself tries testID, then text, then component, and settles for whichever resolves.
|
|
54
|
+
* A guard that only consulted the highest-priority field would wave through
|
|
55
|
+
* `tap({testID: "nope", text: "State, tab, 2 of 4"})`: the testID matches nothing, so the
|
|
56
|
+
* chain returns "not found" and dispatch proceeds — on the text, straight into the
|
|
57
|
+
* overlay. Which is exactly the bug, reached by a different door.
|
|
58
|
+
*/
|
|
59
|
+
function matchesQuery(p, q) {
|
|
60
|
+
if (q.testID && p.testID === q.testID)
|
|
61
|
+
return true;
|
|
62
|
+
if (q.text) {
|
|
63
|
+
const hay = `${p.label ?? ""} ${p.nearbyText ?? ""}`.toLowerCase();
|
|
64
|
+
if (hay.includes(q.text.toLowerCase()))
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (q.component && p.component && p.component.toLowerCase().includes(q.component.toLowerCase())) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The decision itself, over a screen state whose coordinates are already in the caller's
|
|
74
|
+
* delivered-pixel space. Pure and exported so the refusal rules — the ones that can break
|
|
75
|
+
* every tap in the product if they are wrong — are testable without a device.
|
|
76
|
+
*
|
|
77
|
+
* Returns null for anything short of a confident "blocked". A guard that fires on
|
|
78
|
+
* uncertainty blocks legitimate taps, which is a worse failure than the mis-delivery it
|
|
79
|
+
* is trying to prevent.
|
|
80
|
+
*/
|
|
81
|
+
export function decideOverlayBlock(ss, query) {
|
|
82
|
+
if (!ss.overlays || ss.overlays.length === 0)
|
|
83
|
+
return null;
|
|
84
|
+
const blocked = ss.pressables.filter((p) => p.blockedByOverlay);
|
|
85
|
+
if (blocked.length === 0)
|
|
86
|
+
return null;
|
|
87
|
+
// Everything a touch CAN reach: root pressables that nothing covers, plus the
|
|
88
|
+
// overlays' own controls. The latter are the whole point of an open sheet and are
|
|
89
|
+
// stored separately from ss.pressables — omitting them made the guard refuse taps on
|
|
90
|
+
// the sheet itself, because the only element it found under the point was the covered
|
|
91
|
+
// one behind it.
|
|
92
|
+
const reachable = ss.pressables.filter((p) => !p.blockedByOverlay);
|
|
93
|
+
const overlayOwned = new Set();
|
|
94
|
+
for (const o of ss.overlays) {
|
|
95
|
+
for (const p of o.pressables ?? []) {
|
|
96
|
+
reachable.push(p);
|
|
97
|
+
overlayOwned.add(p);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Safety valve. If the model says nothing at all on screen can be tapped, the model is
|
|
101
|
+
// far likelier to be wrong than the screen is to be inert — a `fullCover` overlay
|
|
102
|
+
// expands its block region to the entire viewport, so one misclassification there
|
|
103
|
+
// would refuse every tap in the app with no way back. Declining to judge keeps this
|
|
104
|
+
// guard's worst case "behaves like before" instead of "tap is dead".
|
|
105
|
+
if (reachable.length === 0)
|
|
106
|
+
return null;
|
|
107
|
+
const overlayNames = ss.overlays.map(describeOverlay).join(", ");
|
|
108
|
+
let target = null;
|
|
109
|
+
if (query.x !== undefined && query.y !== undefined) {
|
|
110
|
+
// Whatever reachable element sits under the point is what the OS will deliver to,
|
|
111
|
+
// whether it belongs to the app or to the sheet. The tap is legitimate.
|
|
112
|
+
const hit = hitAt(reachable, query.x, query.y);
|
|
113
|
+
if (hit) {
|
|
114
|
+
// ...but if a covered element is under the same point and the winner is the
|
|
115
|
+
// overlay's, the caller was plausibly aiming at the thing behind. Dispatching
|
|
116
|
+
// silently here is the original bug in miniature: the right element receives
|
|
117
|
+
// the touch, and the caller is never told it was not the one they meant.
|
|
118
|
+
const covered = hitAt(blocked, query.x, query.y);
|
|
119
|
+
if (covered && overlayOwned.has(hit)) {
|
|
120
|
+
return {
|
|
121
|
+
kind: "shadowed",
|
|
122
|
+
hit: describePressable(hit),
|
|
123
|
+
covered: describePressable(covered),
|
|
124
|
+
overlay: overlayNames
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
target = hitAt(blocked, query.x, query.y);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// A named target that also exists reachable somewhere on screen is fine.
|
|
133
|
+
if (reachable.some((p) => matchesQuery(p, query)))
|
|
134
|
+
return null;
|
|
135
|
+
target = blocked.find((p) => matchesQuery(p, query)) ?? null;
|
|
136
|
+
}
|
|
137
|
+
if (!target)
|
|
138
|
+
return null;
|
|
139
|
+
return { kind: "blocked", element: describePressable(target), overlay: overlayNames };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Read the current screen, normalise it into the caller's coordinate space, and apply
|
|
143
|
+
* {@link decideOverlayBlock}. Null on any I/O failure — see that function's contract.
|
|
144
|
+
*/
|
|
145
|
+
export async function checkOverlayBlocking(args) {
|
|
146
|
+
try {
|
|
147
|
+
const [res, metrics] = await Promise.all([
|
|
148
|
+
getScreenState({ device: args.deviceName }),
|
|
149
|
+
resolveScreenSpaceMetrics({
|
|
150
|
+
platform: args.platform,
|
|
151
|
+
udid: args.udid,
|
|
152
|
+
deviceId: args.deviceId
|
|
153
|
+
})
|
|
154
|
+
]);
|
|
155
|
+
if (!res.success || !res.screenState)
|
|
156
|
+
return null;
|
|
157
|
+
// Inset then scale — the same normalisation the layout tools emit with, so these
|
|
158
|
+
// bounds and the caller's coordinates are the one canonical delivered-pixel space.
|
|
159
|
+
return decideOverlayBlock(screenStateToDeliveredPx(screenStateToScreenSpace(res.screenState, metrics), metrics), args.query);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Best-effort: a guard that throws must never turn a valid tap into an error.
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=overlayGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlayGuard.js","sourceRoot":"","sources":["../../src/pro/overlayGuard.ts"],"names":[],"mappings":"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"}
|
package/build/pro/tap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/pro/tap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/pro/tap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA0BzD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,GAAG,KAAK,GAAG,YAAY,CAAC;AAEpF,MAAM,WAAW,QAAQ;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AASD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;AAE1G,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAG5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB,IAAI,CAAC,EAAE,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;CACvD,GAAG,MAAM,CAsCT;AAED,MAAM,WAAW,aAAa;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,EAAE,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;CACtD;AAID,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC,aAAa,CAAC,CAqDxB;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,uBAAuB,CAAC;CAC3C;AAID,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAMD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,KAAK,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAoClF;AAoCD,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAkCjF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,EAAE,CA2BvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,GAAG,SAAS,EAC3B,gBAAgB,EAAE,MAAM,EACxB,WAAW,GAAE,MAAU,GACxB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAY1B;AAED,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,qCAA+B,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACrC,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACf;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA+BhE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,YAAY,CAAC,EAAE,eAAe,CAAC;CAClC,GAAG,SAAS,CAqBZ;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACnC,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,YAAY,CAAC,EAAE,eAAe,CAAC;CAClC,GAAG,SAAS,CAqBZ;AAwDD,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE;QACH,GAAG,EAAE,OAAO,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,OAAO,CAAC;QACxB,UAAU,EAAE,KAAK,CAAC;YACd,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,MAAM,CAAC,EAAE;gBAAE,CAAC,EAAE,MAAM,CAAC;gBAAC,CAAC,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;SACpE,CAAC,CAAC;KACN,CAAC;IACF,aAAa,EAAE;QACX,GAAG,EAAE,OAAO,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,KAAK,CAAC;YACZ,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE;gBAAE,CAAC,EAAE,MAAM,CAAC;gBAAC,CAAC,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;SACnE,CAAC,CAAC;KACN,CAAC;IACF,GAAG,EAAE;QACD,GAAG,EAAE,OAAO,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;QACH,YAAY,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QACrD;;;;;;WAMG;QACH,aAAa,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE;gBAAE,CAAC,EAAE,MAAM,CAAC;gBAAC,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YACpC,WAAW,EAAE,MAAM,CAAC;SACvB,GAAG,IAAI,CAAC;KACZ,CAAC;CACL;AAED,wBAAgB,qBAAqB,IAAI,YAAY,CAMpD;AA+BD,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsBxC;AA6mBD,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAAE,EAAE,GAAG,OAAO,CAI9H;AA6ID,qEAAqE;AACrE,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AA+LD,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA8vBjE"}
|
package/build/pro/tap.js
CHANGED
|
@@ -16,7 +16,7 @@ export function buildVerificationExplanation(v) {
|
|
|
16
16
|
const target = action === "swipe" ? "scroll surface" : "element";
|
|
17
17
|
// Burst path with typed verdict
|
|
18
18
|
if (v.kind === "settled_elsewhere") {
|
|
19
|
-
return `${Action} caused a visible UI change (${pct(v.changeRate)} pixel diff).
|
|
19
|
+
return `${Action} caused a visible UI change (${pct(v.changeRate)} pixel diff). Something on screen responded; a pixel diff cannot identify which element, so this is not confirmation that the intended target handled it.`;
|
|
20
20
|
}
|
|
21
21
|
if (v.kind === "snap_back") {
|
|
22
22
|
if (action === "swipe") {
|
|
@@ -33,7 +33,7 @@ export function buildVerificationExplanation(v) {
|
|
|
33
33
|
}
|
|
34
34
|
// Legacy non-burst path
|
|
35
35
|
if (v.meaningful) {
|
|
36
|
-
return `${Action} caused a visible UI change (${pct(v.changeRate)} pixel diff).
|
|
36
|
+
return `${Action} caused a visible UI change (${pct(v.changeRate)} pixel diff). Something on screen responded; a pixel diff cannot identify which element, so this is not confirmation that the intended target handled it.`;
|
|
37
37
|
}
|
|
38
38
|
return (`No visual change detected between before and after screenshots. ` +
|
|
39
39
|
`The ${target} may not respond visually or the ${action} may have missed.`);
|
|
@@ -957,6 +957,12 @@ async function tryCoordinateStrategy(pixelX, pixelY, platform, lastScreenshot, u
|
|
|
957
957
|
}
|
|
958
958
|
const TAP_TIMEOUT_MS = 25000;
|
|
959
959
|
const MIN_STRATEGY_BUDGET_MS = 500;
|
|
960
|
+
/**
|
|
961
|
+
* Ceiling for the pre-dispatch overlay check. It shares the tap's deadline with the
|
|
962
|
+
* strategies that follow, so it must not be able to spend the whole budget on a fiber
|
|
963
|
+
* read — a screen big enough to make this slow is exactly when the tap still needs time.
|
|
964
|
+
*/
|
|
965
|
+
const OVERLAY_GUARD_BUDGET_MS = 3000;
|
|
960
966
|
// Per-strategy budget. OCR cap on Android is bumped via maxStrategyMs() because
|
|
961
967
|
// the ADB screencap+pull leg has ~2s variance on real devices; iOS stays at 5s
|
|
962
968
|
// where xcrun simctl screenshot is consistent.
|
|
@@ -1094,37 +1100,39 @@ export function resetCoordArtifactDedup() {
|
|
|
1094
1100
|
/**
|
|
1095
1101
|
* Turn an unmeaningful coordinate tap into an explanation.
|
|
1096
1102
|
*
|
|
1097
|
-
*
|
|
1098
|
-
* the
|
|
1099
|
-
* state
|
|
1100
|
-
*
|
|
1101
|
-
* so
|
|
1103
|
+
* Coordinate spaces used to be the hard part here, and the old approach — recovering a
|
|
1104
|
+
* scale by dividing the caller's input by the executed tap point, then multiplying the
|
|
1105
|
+
* raw screen state by it — was wrong in a way that mattered. That ratio carries no inset
|
|
1106
|
+
* term, but the caller's coordinate comes from a space where `topInset` has been applied,
|
|
1107
|
+
* so on Android and inside iOS modal presentations the probe landed roughly
|
|
1108
|
+
* `topInset x factor` off. An offset probe can hit-test a neighbouring element, and
|
|
1109
|
+
* because `explainCoordinateMiss` checks reachable pressables before blocked ones, the
|
|
1110
|
+
* usual result was a confident "the coordinates were correct, check your onPress handler"
|
|
1111
|
+
* about an element that was in fact covered.
|
|
1112
|
+
*
|
|
1113
|
+
* Now that every tool shares one space, there is nothing to recover: normalise the state
|
|
1114
|
+
* the same way the layout tools do and hit-test the caller's own coordinate against it.
|
|
1102
1115
|
*/
|
|
1103
1116
|
async function diagnoseCoordinateMiss(args) {
|
|
1104
1117
|
try {
|
|
1105
1118
|
const { getScreenState } = await import("../core/screenState.js");
|
|
1106
1119
|
const { explainCoordinateMiss } = await import("./coordinateMiss.js");
|
|
1120
|
+
const { screenStateToScreenSpace, screenStateToDeliveredPx } = await import("../core/screenSpace.js");
|
|
1121
|
+
const { resolveScreenSpaceMetrics } = await import("../core/screenSpaceDevice.js");
|
|
1122
|
+
const { getConnectedAppByDevice, getFirstConnectedApp } = await import("../core/index.js");
|
|
1107
1123
|
const ss = await getScreenState({ device: args.deviceName });
|
|
1108
1124
|
if (!ss.success || !ss.screenState)
|
|
1109
1125
|
return undefined;
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
//
|
|
1119
|
-
|
|
1120
|
-
// larger axis so a near-zero coordinate can't amplify rounding error.
|
|
1121
|
-
const useY = Math.abs(pointInState.y) > Math.abs(pointInState.x);
|
|
1122
|
-
const numerator = useY ? args.inputPoint.y : args.inputPoint.x;
|
|
1123
|
-
const denominator = useY ? pointInState.y : pointInState.x;
|
|
1124
|
-
const factor = denominator !== 0 && Number.isFinite(numerator / denominator)
|
|
1125
|
-
? numerator / denominator
|
|
1126
|
-
: 1;
|
|
1127
|
-
return explainCoordinateMiss(pointInState, ss.screenState, (v) => Math.round(v * factor)) ?? undefined;
|
|
1126
|
+
const app = (args.deviceName ? getConnectedAppByDevice(args.deviceName) : null) ?? getFirstConnectedApp();
|
|
1127
|
+
const metrics = await resolveScreenSpaceMetrics({
|
|
1128
|
+
platform: app?.platform ?? "ios",
|
|
1129
|
+
udid: app?.simulatorUdid,
|
|
1130
|
+
deviceId: app?.adbSerial
|
|
1131
|
+
});
|
|
1132
|
+
const normalised = screenStateToDeliveredPx(screenStateToScreenSpace(ss.screenState, metrics), metrics);
|
|
1133
|
+
// State and probe are both in delivered pixels now, so the reported coordinates
|
|
1134
|
+
// are already the caller's space — no mapping back.
|
|
1135
|
+
return explainCoordinateMiss(args.inputPoint, normalised) ?? undefined;
|
|
1128
1136
|
}
|
|
1129
1137
|
catch {
|
|
1130
1138
|
// Diagnosis is best-effort — never let it turn a successful tap into an error.
|
|
@@ -1516,6 +1524,69 @@ export async function tap(options) {
|
|
|
1516
1524
|
error: errorMessage
|
|
1517
1525
|
};
|
|
1518
1526
|
}
|
|
1527
|
+
// Refuse before dispatch when the target is under an overlay. Every strategy resolves
|
|
1528
|
+
// to a coordinate tap, so the OS would deliver the touch to the overlay — firing it
|
|
1529
|
+
// would press the wrong element and mutate state the caller never asked to change.
|
|
1530
|
+
//
|
|
1531
|
+
// Bounded, and failure-open by construction: the guard costs one fiber read, and if
|
|
1532
|
+
// that read is slow, errors, or cannot reach a verdict, the tap proceeds exactly as it
|
|
1533
|
+
// did before. Blocking a legitimate tap because a diagnostic timed out would be a far
|
|
1534
|
+
// worse regression than the mis-delivery this prevents — tap is the tool everything
|
|
1535
|
+
// else is built on.
|
|
1536
|
+
// Set when the tap is dispatched onto an overlay control that shadows a covered
|
|
1537
|
+
// element; attached to the successful result so the caller learns what actually
|
|
1538
|
+
// received the touch.
|
|
1539
|
+
let shadowWarning;
|
|
1540
|
+
if (hasMetro) {
|
|
1541
|
+
const guardBudget = Math.min(remainingMs(), OVERLAY_GUARD_BUDGET_MS);
|
|
1542
|
+
if (guardBudget >= MIN_STRATEGY_BUDGET_MS) {
|
|
1543
|
+
let blockedBy = null;
|
|
1544
|
+
try {
|
|
1545
|
+
const { checkOverlayBlocking } = await import("./overlayGuard.js");
|
|
1546
|
+
blockedBy = await withTimeout(checkOverlayBlocking({
|
|
1547
|
+
query,
|
|
1548
|
+
platform,
|
|
1549
|
+
udid: targetUdid,
|
|
1550
|
+
deviceId: resolved.target.androidSerial,
|
|
1551
|
+
deviceName
|
|
1552
|
+
}), guardBudget, "overlay-guard");
|
|
1553
|
+
}
|
|
1554
|
+
catch {
|
|
1555
|
+
blockedBy = null;
|
|
1556
|
+
}
|
|
1557
|
+
if (blockedBy?.kind === "blocked") {
|
|
1558
|
+
// Recorded as an attempt so the refusal is distinguishable in telemetry
|
|
1559
|
+
// (_errorContext) from a tap that tried and failed. Without it every
|
|
1560
|
+
// declined tap looks like a tap-tool regression on the failure dashboard.
|
|
1561
|
+
attempted.push({
|
|
1562
|
+
strategy: "overlay-guard",
|
|
1563
|
+
reason: `refused — target covered by ${blockedBy.overlay}`,
|
|
1564
|
+
outcome: "skipped"
|
|
1565
|
+
});
|
|
1566
|
+
return {
|
|
1567
|
+
success: false,
|
|
1568
|
+
query,
|
|
1569
|
+
attempted,
|
|
1570
|
+
device: deviceName,
|
|
1571
|
+
platform,
|
|
1572
|
+
error: `Refused: ${blockedBy.element} is covered by ${blockedBy.overlay}. ` +
|
|
1573
|
+
`A tap here would be delivered to the overlay, not to the target, ` +
|
|
1574
|
+
`so it was not dispatched.`,
|
|
1575
|
+
suggestion: `Dismiss or close the overlay first, then retry. ` +
|
|
1576
|
+
`get_screen_state lists the overlay's own controls, and everything behind it under "🚫 Blocked by overlay". ` +
|
|
1577
|
+
`To tap the overlay itself, use coordinates from its own group.`
|
|
1578
|
+
};
|
|
1579
|
+
}
|
|
1580
|
+
if (blockedBy?.kind === "shadowed") {
|
|
1581
|
+
// Dispatch, but name the element that will actually receive the touch.
|
|
1582
|
+
// Staying silent here is the reported bug in miniature.
|
|
1583
|
+
shadowWarning =
|
|
1584
|
+
`This coordinate is occupied by ${blockedBy.hit}, part of ${blockedBy.overlay} — ` +
|
|
1585
|
+
`that is what received the tap. ${blockedBy.covered} sits underneath it and ` +
|
|
1586
|
+
`cannot be tapped until the overlay closes.`;
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1519
1590
|
// Determine screenshot and verification behavior.
|
|
1520
1591
|
// Decoupled (I5, 2026-05-16): verify can run without returning image bytes —
|
|
1521
1592
|
// capture cost is paid either way; bandwidth cost is what `screenshot` toggles.
|
|
@@ -1674,6 +1745,14 @@ export async function tap(options) {
|
|
|
1674
1745
|
screenshot,
|
|
1675
1746
|
verification
|
|
1676
1747
|
});
|
|
1748
|
+
// The guard already resolved what occupies this coordinate. Reporting it turns
|
|
1749
|
+
// "something responded" into "this element responded" for the one case where
|
|
1750
|
+
// the caller most likely meant something else.
|
|
1751
|
+
if (shadowWarning) {
|
|
1752
|
+
successResult.warning = successResult.warning
|
|
1753
|
+
? `${successResult.warning}\n${shadowWarning}`
|
|
1754
|
+
: shadowWarning;
|
|
1755
|
+
}
|
|
1677
1756
|
// Capture an artifact for "successful but unmeaningful" taps so we can
|
|
1678
1757
|
// diagnose taps that landed wrong or hit non-responsive elements.
|
|
1679
1758
|
// Uses the same `meaningful` flag the agent sees so dashboard outcomes
|