Hmbown/CodeWhale · error · ExecError
no supported accessibility click at
Error message
no supported accessibility click at (${x}, ${y}) in the bound application (${a11yReason}) — observe the available actions, use strategy "app" for a window-scoped pointer click, or a separate computer What it means
When strategy='a11y' is requested, pointerClick fails closed if the hit_test found no pressable accessibility element supporting the requested action at the given point. a11yReason (e.g. not_found, no_action) explains why; no pointer input was sent because a11y strategy forbids fallback to raw events.
Solutions
- Inspect available element actions (hit_test without perform) and target a point inside a control that supports a semantic action
- Use strategy='app' for a window-scoped pointer click that stays inside the bound app without global events
- Fall back to strategy='auto' to let the backend pick a delivery path
- Enable/repair the target app's accessibility support or use a separate computer scoped to that app
Example fix
// before
await click(x, y, { strategy: "a11y" }); // control has no AX action
// after
await click(x, y, { strategy: "app" }); // window-scoped pointer click Defensive patterns
Strategy: fallback
Validate before calling
const hit = await observe({ x, y }); // hit_test without perform
const canA11y = hit?.element && hit.actions?.includes("press"); Type guard
const a11yClickable = (hit) => Boolean(hit?.element?.role && (hit.actions ?? []).includes("press")); Try / catch
try {
return await click(x, y, { strategy: "a11y" });
} catch (e) {
if (e instanceof ExecError && /no supported accessibility click/.test(e.message)) {
return await click(x, y, { strategy: "app" });
}
throw e;
} Prevention
- Observe the element and its actions before choosing strategy='a11y'
- Only target controls known to expose AXPress/press actions
- Keep 'app' or 'auto' as fallback for apps with weak accessibility trees
When it happens
Trigger: Calling pointerClick with strategy='a11y' at a point where the element is not an AX pressable control, has no supported AX action, or hit_test fails for reasons like element not found/offscreen.
Common situations: Clicking empty canvas, text areas without press actions, images, or custom-drawn controls that expose no AXPress; coordinates slightly off the control; the app exposes a poor accessibility tree (e.g. Electron/Java apps without AX enabled).
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- strategy "a11y" is only available for a left single click…
- element does not belong to the bound application —…
- element has no resolved accessibility identity
- element press was not acknowledged
- menu_item_not_found
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/347d1b4abca6d5d9.
Report an issue: GitHub.
Appendix: source
Thrown at crates/tui/plugins/computer-use/src/backends/darwin.mjs:433
* the bound application's accessibility tree: when the point names a
* pressable element we perform its semantic action, which needs no pointer
* and no foreground. strategy="a11y" requires that and fails closed;
* strategy="event" goes straight to the guarded global gesture.
*/
async function pointerClick(button, x, y, clicks, strategy = "auto") {
assertInScreen(x, y);
if (!["auto", "a11y", "event", "app"].includes(strategy)) throw new ExecError(`strategy must be auto, a11y, app or event (got ${JSON.stringify(strategy)})`);
let a11yReason = null;
if (strategy !== "event" && ["left", "right"].includes(button) && clicks === 1) {
if (button === "right") await requireBackgroundActions();
const hit = await native("hit_test", { x, y, perform: true, ...(button === "right" ? { operation: "context" } : {}) });
if (hit?.action_sent) {
return { action_sent: true, strategy: "a11y", action: hit.action, pointer_moved: false, at: { x, y }, button, clicks,
element: { role: hit.element?.role ?? null, label: hit.element?.label ?? null } };
}
a11yReason = hit?.reason ?? "not_found";
if (strategy === "a11y") {
throw new ExecError(`no supported accessibility click at (${x}, ${y}) in the bound application (${a11yReason}) — observe the available actions, use strategy "app" for a window-scoped pointer click, or a separate computer`);
}
} else if (strategy === "a11y") {
throw new ExecError(`strategy "a11y" is only available for a left single click on this backend; ${mouseName(button)} x${clicks} has no accessibility equivalent`);
}
if (strategy === "app" || (strategy === "auto" && !state.foregroundInput)) {
// Window-routed record delivery: AppKit accepts the events as genuine
// input, the cursor never moves. A momentary no-raise front lease is
// taken and restored inside the helper; it is reported, not hidden.
if ((await native("input_capabilities"))?.window_record === 1) {
// Ownership is enforced by window containment inside the helper: the
// events are addressed to a window id of the bound app, so a covered
// background window is still safe — they cannot land on the coverer.
const r = await native("bg_pointer", { steps: clickSteps(button, x, y, clicks),
...(a11yReason === "web_popup_requires_real_click" ? { menu_poll_ms: 6000 } : {}) });
return { action_sent: true, strategy: "window-record", input_scope: "application-window",
at: { x, y }, button, clicks, pointer_moved: false, front_lease: r.front_lease ?? true,
...leaseAccounting(r),
...(r.menu_lease_held ? { menu_lease_held: true } : {}),View on GitHub (pinned to 73e0f67d83)