| Files | Last commit | Last update |
|---|---|---|
fix(macos): resolve native menus and verify lifecycle transitions (#376) * fix(macos): resolve native menus and verify lifecycle transitions Give app-owned menus process identity without a document window. Verify activation with fresh target AX focus and retain exact process generations. Reconcile caller waits after uncertain delivery without repeating the action. BREAKING CHANGE: JSON envelopes use 2.6; macOS app-owned menu snapshots omit data.window. * fix: keep headed preflight lookup inside the macos adapter Avoid an extra ref resolution on Linux and Windows while preserving strict native menu classification on macOS. Update the native inventory test to pass the bridge's explicit full-inventory argument. * fix: preserve native menu ownership through actions and waits * fix: preserve window identity across title changes Reuse the stored window identity check so a renamed window cannot satisfy a disappearance wait. Keep process-generation checks and return the current title. * refactor: share post-action observation and bound native recovery Observe window-owned refs through their original window so waits survive a closing sheet. Preserve partial Linux window reads until target lookup, and retry only transient macOS surface failures. * fix: preserve focus results and complete observation contracts Keep successful Linux focus results when a later read is incomplete and retain child counts across macOS fallback reads. Share saved process identity validation, clarify surface recovery, and cover incomplete reads and renamed windows. Register the shared observer in the CLI helper inventory. * style: match rustfmt output for CI * fix: preserve process-owned refs in post-action waits * style: format process owner observation guard | 4 days ago | |
feat!: implement Playwright-grade foundation contract Settle the Playwright-grade reliability contract in agent-desktop-core before the Windows/Linux adapters are built, so they inherit it instead of redesigning it. Every command now observes, waits, verifies, and reports honestly instead of firing blindly. Highlights: capability-supertrait split of PlatformAdapter with not_supported() defaults; canonical role/state vocabulary with live `is --property visible`; display enumeration (`list-displays`) and honest `--screen` with scale factor; truthful Automation permission; `native_id` identity spine; window-id-first resolution; serializable `LocatorQuery` with live `find`; default-on auto-wait before every ref action; three-way `hit_test` occlusion gate; `scroll_into_view` in core; core accessible-name precedence; typed `ActionStep` delivery tier; `ProcessState` and `APP_UNRESPONSIVE`; `LaunchOptions`; baseline-diff desktop signals (`wait --event`); typed clipboard (`Text`/`Image`/`FileUrls`); mouse modifier chords and `mouse-wheel`. Hardened through a 35-reviewer pass with independent validation and a green live e2e gate (109/0), plus a head-vs-main performance comparison harness. BREAKING CHANGE: default-on auto-wait changes the timing of every previously-untouched ref-action call (bounded 5000 ms default; `--timeout-ms 0` restores single-shot). `ENVELOPE_VERSION` is now `2.1` (adds the `APP_UNRESPONSIVE` code and process state in error details). FFI ABI major is `3` (append-only struct evolution; `wait --event` is intentionally not exposed over FFI). The legacy string clipboard API is removed in favor of typed content. `key-down`/`key-up` fail closed until daemon-owned held input exists. `close-app` verifies termination and the osascript fallback path is removed. `--text` matching is subtree containment: `find --text X --first` returns the outermost matching container. | 3 months ago |
| Files | Last commit | Last update |
|---|---|---|
| 4 days ago | ||
| 3 months ago |