agent-desktop/crates
Lahfir 9ad0e889b2 feat: add Playwright-style headed/headless interaction mode
Ref actions now run in exactly two modes. Headless is the default: semantic
accessibility operations only, no cursor movement, and a fail-closed
POLICY_DENIED when only a physical gesture would work. The global --headed flag
upgrades every ref action to permit focus stealing and cursor movement, so the
chain's physical click/double-click/scroll/keypress fallbacks can complete. The
AX path is always tried first, so --headed never regresses headless-capable
elements; it only adds fallbacks for elements that need a real gesture.

- CommandContext::request(action, base) builds the per-command request: each
  command declares its headless base (pure-AX headless; type uses focus_fallback
  because typing requires focus but never moves the cursor) and --headed upgrades
  any base to the headed policy.
- The internal/FFI "physical" policy is renamed "headed" throughout, including
  the C ABI enum (AD_POLICY_KIND_HEADED keeps discriminant 2) and bindings.
- Raw-input commands (press, hover, drag, mouse-*, key-down/up) are unchanged:
  always physical, mode-independent low-level escape hatch.
- Unit tests assert every ref command is headless by default and headed under
  --headed; docs (CONCEPTS, CLAUDE, skills) describe the two-mode contract.
2026-06-17 13:43:19 -07:00
..
core feat: add Playwright-style headed/headless interaction mode 2026-06-17 13:43:19 -07:00
ffi feat: add Playwright-style headed/headless interaction mode 2026-06-17 13:43:19 -07:00
linux refactor!: unify command execution contracts 2026-05-19 18:27:08 -07:00
macos fix: eliminate vacuous AX successes and harden resolution 2026-06-17 13:43:19 -07:00
windows refactor!: unify command execution contracts 2026-05-19 18:27:08 -07:00