agent-desktop/CHANGELOG.md
2026-07-25 23:31:43 -07:00

20 KiB

Changelog

0.6.0 (2026-07-26)

⚠ BREAKING CHANGES

  • private artifacts on Windows are no longer written through ACL-hardened handles. That hardening guarded refmap, trace, and session files on a platform where no command can produce them, and it had never executed. It returns in Phase 2.1, built on Windows against a CI lane that runs it, under the constraints recorded in docs/solutions/best-practices/never-ship-platform-code-that-ci-cannot-execute.md.

Refactoring

  • remove speculative Win32 private-file layer from core, add real Windows/Linux test lanes (#106) (8ad66b8)
    • deleted 1,062 LOC of Windows-only unsafe Win32 file I/O from agent-desktop-core and dropped the windows-sys dependency; Windows now uses the same portable std::fs path as every other non-unix target
    • this is a structural fix, not a downgrade: std::fs::OpenOptions defaults share_mode to FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, precisely the flag the deleted code omitted and the cause of its sharing-violation failures
    • cargo test now runs on windows-latest and ubuntu-latest, so every platform-conditional branch in core is executed on each PR instead of only compiled

Bug Fixes

  • the new platform lanes exposed four pre-existing defects that were unreachable while only macOS ran tests:
    • trace files were opened append-only while trace.rs locks that handle; Windows LockFileEx rejects append-only handles, so all trace writing failed with Access is denied
    • refs_lock tests placed lock files directly in /tmp, which is root-owned and world-writable, so the private-parent check correctly refused them
    • a trace test interpolated a raw path into a JSON string literal, so Windows paths produced invalid escapes and the event was silently dropped instead of skipped
    • the default SystemOps::permission_report returned Denied, so CLI preflight reported PERM_DENIED on Windows and Linux when the adapter is simply unimplemented; it now reports Unknown and surfaces the honest PLATFORM_NOT_SUPPORTED, including over the FFI
  • the pinned toolchain gained clippy and rustfmt, which profile = "minimal" had omitted

0.5.0 (2026-07-20)

⚠ BREAKING CHANGES

  • 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.

Features

  • implement Playwright-grade foundation contract (3f32272)
    • default-on auto-wait: every ref action waits for actionability (visible, enabled, stable, unoccluded) before dispatching, under a bounded budget
    • live find locator plus a serializable LocatorQuery, and honest is --property visible
    • three-way hit_test occlusion gate and core scroll_into_view before element actions
    • list-displays and honest --screen with per-display scale factor; native_id identity spine; window-id-first resolution
    • ProcessState classification with the APP_UNRESPONSIVE code (envelope 2.1); typed ActionStep delivery tier
    • LaunchOptions (--arg/--env/--cwd/--no-attach); baseline-diff desktop signals via wait --event
    • typed clipboard (Text/Image/FileUrls); mouse modifier chords and a mouse-wheel primitive
    • capability-supertrait PlatformAdapter split with not_supported() defaults, so Windows and Linux inherit the contract

0.4.7 (2026-07-02)

Features

  • add trace viewer and replay artifacts (e3e1872)

0.4.6 (2026-07-02)

Features

  • make sessions the first-class trace container (35fa914)

0.4.5 (2026-06-30)

Features

  • add --wait-for selector polling flags (#86) (ce23278)

0.4.4 (2026-06-29)

Features

  • macos,core: harden adapter and core foundation with caller-controllable guardrails (#82) (94ce6c5)

0.4.3 (2026-06-28)

Bug Fixes

  • macos: harden retained_handle null guard against release-only CFRetain(null) (#80) (a708fa0)

0.4.2 (2026-06-27)

Features

  • ffi: Phase B and C — Python smoke harness, parity gates, build.rs codegen (#77) (9023f33)

0.4.1 (2026-06-26)

Features

  • complete FFI C-ABI surface (Phase A): load-time ABI handshake, session-scoped adapter, JSON-envelope command entrypoints (version, status, snapshot, wait, execute-by-ref), an optional tracing log callback, and a unified error-envelope contract (#67)

0.4.0 (2026-06-24)

⚠ BREAKING CHANGES

  • the version command no longer accepts --json; it always emits the standard JSON envelope.

Refactoring

0.3.1 (2026-06-21)

Bug Fixes

  • harden macos stale ref resolution (#62) (9f144c2)

0.3.0 (2026-06-20)

⚠ BREAKING CHANGES

  • ffi: AD_POLICY_KIND_PHYSICAL is now AD_POLICY_KIND_HEADED (discriminant 2 unchanged).
  • ffi: AdRefEntry and AdDragParams include additional reliability metadata; C ABI consumers must zero-initialize and validate with AD_REF_ENTRY_SIZE, AD_DRAG_PARAMS_SIZE, and the ad_*_size() accessors.
  • close-app graceful responses now return { "method": "graceful", "requested": true } instead of claiming closed: true before the app has exited.

Features

  • add Playwright-grade ref reliability with strict late resolution, session-scoped snapshots, deterministic stale/ambiguous target handling, and skeleton drill-down preservation (#54).
  • add Playwright-style headed/headless interaction policy: accessibility-first dispatch remains default, while --headed enables focused physical fallbacks only when needed (#54).
  • add retrying wait predicates, JSONL traces with secret redaction, richer actionability reports, and shared CLI/FFI execution through the same resolver/actionability/dispatch ladder (#54).

Bug Fixes

  • harden macOS ref actions across focus/window raising, disclosure expansion, scroll, drag, numeric set-value, menu detection, stale-ref recovery, protected-process errors, and close-app confirmation (#54).
  • fail closed on unsafe fallback ambiguity and stale refs, including symlink-safe refstore/latest-snapshot reads and deadline-bound resolver work (#54).

Performance

  • reduce repeated live actionability reads and add deadline-bound resolver behavior, with large-app snapshot and per-command CLI wall-clock gates in the E2E suite (#54).

Tests

  • add real-app E2E coverage for headless/headed ref actions, sessions, snapshots, traces, waits, skeleton drill-down, menus, surfaces, drag, expand/collapse, and performance checks (#54).

0.2.3 (2026-06-06)

Bug Fixes

  • harden macos ax window fallback (3b266fd)
  • resolve fullscreen AX tree retrieval returning ref_count: 0 (a52b7c7)

0.2.2 (2026-06-02)

Bug Fixes

  • macos: guard CFArray casts with type-ID check (fixes Mail.app crash) (#50) (c02cb5e)

0.2.1 (2026-05-23)

Bug Fixes

  • stabilize empty accessibility identity refs (1fb5a7d)

0.2.0 (2026-05-20)

⚠ BREAKING CHANGES

  • chain execution deadlines now return TIMEOUT instead of ACTION_FAILED when the target app does not respond before the chain deadline.

Refactoring

  • unify command execution contracts (1291a9c)

0.1.14 (2026-05-04)

Features

  • bundle skill docs and refactor --help for AI agents (#36) (b04d6f9)

0.1.13 (2026-04-17)

Features

  • ffi: ship C-ABI cdylib with review fixes and release pipeline (#26) (3cffbd6)

0.1.12 (2026-04-16)

Features

  • progressive skeleton traversal with ref-rooted drill-down (#20) (c17f2fa)

0.1.11 (2026-03-03)

Bug Fixes

  • show skill install prompt on all success paths (39b2bc6)

0.1.10 (2026-03-03)

Bug Fixes

  • add clawhub login step before sync in CI (208af12)

0.1.9 (2026-03-03)

Features

  • scalable skill architecture with ClawHub auto-publishing (#14) (9766520)

0.1.8 (2026-03-01)

Features

  • add electron/web app compatibility for accessibility tree traversal (a19c1b5)
  • implement --compact flag to collapse single-child unnamed nodes (4a300c8)

0.1.7 (2026-02-28)

Features

  • add notification command types, adapter trait, and CLI wiring (c5b05ba)
  • add notification management commands (macOS) (b1fd368)
  • macos: add NC session RAII guard and notification adapter wiring (0d55c21)
  • macos: implement dismiss and notification action commands (53d697d)
  • macos: implement notification list via AX tree traversal (53549a3)

Bug Fixes

  • macos: remove AXPress from dismiss action list (27ef4f3)
  • macos: restore frontmost app after notification center interaction (3881bc8)
  • macos: use pgrep and async osascript for NC lifecycle (9797585)

0.1.6 (2026-02-24)

Bug Fixes

  • handle null bounds in refmap and improve sidebar click resolution (d4197e8)

0.1.5 (2026-02-23)

Features

  • add fallback chains for set-value, clear, focus, scroll-to, type and post-action state hints (11f8da0)
  • add structured verbose logging across all layers (c7316e8)

Bug Fixes

  • add dwell time before drag release for drop target recognition (2a52d62)

0.1.4 (2026-02-23)

Features

  • add agent-desktop skill for universal AI agent support (ef45135)
  • add Claude Code skills for agent-desktop automation (ad91cd3)

0.1.3 (2026-02-23)

Bug Fixes

  • correct GitHub Release download URL and simplify tag format (8f66a93)
  • include README and CHANGELOG in npm package (084fc8c)

Performance

  • use curl for binary download in postinstall (ebafb71)

0.1.2 (2026-02-23)

Bug Fixes

  • use macos-latest for both build targets (91c7677)

0.1.1 (2026-02-23)

Features

  • 10-step scroll chain, focus guards, enhanced click chain, bounds fix (595ccb6)
  • add 19 new commands, AX-first rewrites, LOC compliance (d3f7e03)
  • add 19 new commands, AX-first rewrites, LOC compliance (eca04e8)
  • add release automation with GitHub Releases and npm distribution (18fc50c)
  • add structural hints to splitter columns in snapshots (48f8470)
  • AX-first right-click chain with inline context menu capture (cddc5d3)
  • Phase 1 foundation — workspace scaffold, core engine, macOS adapter, 31 commands (a346f24)
  • smart AX-first click chain + macOS crate restructure (4616c8f)
  • surface-targeted snapshot, menu wait, list-surfaces command (39178b2)

Bug Fixes

  • add menubar surface, fix press --app crash and modifier mapping (a231962)
  • address code review findings (double-free, CF leaks, injection) (2f495ff)
  • align error codes with spec (APP_NOT_FOUND, PERM_DENIED) and add -i shorthand (6dc567a)
  • ancestor-path cycle detection + CGEvent click fallback (198d7d7)
  • detect open menus via AXMenuBarItem.AXSelected, not AXMenus attribute (7f0d610)
  • make all 30 commands work end-to-end on macOS (1d98ab8)
  • remove AXShowDefaultUI from activation chain, fix child walk (74242f5)
  • resolve all 47 code review findings from Phase 1 audit (218503a)
  • right-click uses AXShowMenu; context menus detected via focused element (2c9aee3)
  • suppress dead_code lint on BatchCommand deserializer struct (608d4aa)
  • use simple release strategy for workspace version bumps (0ab78dd)