Commit Graph

213 Commits

Author SHA1 Message Date
Michał Pierzchała 7100fc5920 feat: add macOS desktop snapshot surfaces (#258)
* feat: add macOS desktop snapshot surfaces

* fix: tighten macos desktop surface routing

* refactor: harden macos helper snapshot traversal

* fix: scope frontmost macos snapshots to visible windows
2026-03-25 15:10:52 +01:00
Michał Pierzchała 9c37d76381 feat: improve macOS phase 1 support (#256)
* feat: improve macOS phase 1 support

* fix: address macOS phase 1 review comments

* fix: address macOS PR review feedback

* chore: remove unused apple log alias

* fix: allow mocked macOS helper outside darwin
2026-03-25 13:45:40 +01:00
Michał Pierzchała 0cca41f673 feat: add gesture telemetry recording overlays (#245)
* feat: add gesture telemetry recording overlays

* fix: stabilize recording validation and telemetry artifacts

* fix: tighten recording telemetry helpers

* fix: clean up android recording stop fallback

* refactor: split ios recording handlers

* fix: tighten runner-backed touch telemetry

* refactor: simplify touch recording recovery

* feat: add gesture telemetry recording overlays

* refactor: split touch interaction recording flow

* fix: rebase gesture telemetry onto main

* test: fix recording overlay CI expectations
2026-03-24 13:38:41 +01:00
Michał Pierzchała 4b8fc2f4f6 fix: improve macOS runner snapshot and context menus (#252)
* fix: improve macos runner snapshot and context menus

* fix: address macos runner review feedback

* refactor: simplify xctestrun product resolution

* refactor: future-proof macos runner and click flows

* refactor: remove secondary click alias

* fix: tighten macos runner review follow-ups

* update readme

* fix: discover macos apps from standard bundles

* fix: stabilize macos app listing test on linux
2026-03-23 16:01:52 +01:00
Michał Pierzchała 9e1991daf6 feat: add apple-family macOS desktop support (#246)
* feat: add apple-family macos desktop support

* feat: extend macos desktop command support

* fix: stabilize CI for macos runner build

* fix: harden macos app resolution

* fix: tighten apple-family session routing

* fix: align macos log capabilities

* fix: support macos wait text

* fix: make iOS session refresh test host-agnostic
2026-03-23 10:22:55 +01:00
Michał Pierzchała aebc59b2a6 feat: streamline remote metro open flow (#240)
* feat: streamline remote metro open flow

* fix: honor remote config defaults and cli precedence
2026-03-20 14:07:17 +01:00
Michał Pierzchała da9d4527ad feat: add client metro prepare command (#236)
* feat: add client metro prepare command

* fix: tighten metro prepare cli behavior
2026-03-18 16:29:22 +01:00
Michał Pierzchała 11010192a2 feat: add install-from-source CLI command (#235) 2026-03-18 12:47:41 +01:00
Michał Pierzchała 22fbca81e2 fix: return Android identity from install_from_source (#226)
* 0.8.1

* fix: derive android launch target for installFromSource

* fix: return android identity from install source

* fix: resolve android package from install artifacts

* docs: move typed client docs out of readme
2026-03-16 14:10:27 +01:00
Michał Pierzchała c874eeb4a5 feat: centralize CLI option resolution (#223)
* 0.7.22

* feat: centralize CLI option resolution

* refactor: introduce canonical CLI option specs

* fix: preserve enum config parsing in option specs

* docs: clarify canonical config values

* fix: honor config-backed session bindings
2026-03-14 20:55:59 +01:00
Michał Pierzchała c34639ec4d feat: share session lock policy across clients (#222)
* 0.7.22

* fix: add cli session binding lock mode

* fix: add cli session lock flags

* fix: preserve batch platform inheritance

* chore: clean up cli binding flow

* docs: update session-bound automation guidance

* feat: simplify session lock policy

* feat: share session lock policy across clients

* docs: add shared session lock examples

* refactor: simplify session lock policy helpers

* test: cover shared session lock policy cases

* test: cover strip mode router dispatch
2026-03-14 20:46:15 +01:00
Michał Pierzchała 674ae974ec feat: add typed runtime to open (#217)
* feat: add typed runtime to open

* fix: normalize typed runtime validation errors

* fix: defer runtime replacement until open succeeds

* feat: add typed openApp client helper
2026-03-13 19:35:05 +01:00
Michał Pierzchała b79cbce951 feat: support android shutdown on close (#213)
* feat: support android shutdown on close

* fix: stub android readiness in relaunch test
2026-03-13 14:36:57 +01:00
Michał Pierzchała 884e48ba27 fix: harden Android runtime relaunch flows (#211)
* fix: harden Android runtime relaunch flows

* docs: clarify mobile QA skill flows
2026-03-12 17:29:40 +01:00
Michał Pierzchała f23df4d9c8 docs: add missing command reference entries (#201)
* docs: add missing command reference entries

* docs: clarify wait ref behavior
2026-03-10 12:59:36 +01:00
Michał Pierzchała e2bf4ef7a1 docs: add missing command reference entries (#200) 2026-03-10 12:29:05 +01:00
Michał Pierzchała 8b36c2a56c feat: support remote runtime hints and artifact retrieval (#199)
* feat: add remote runtime hints and artifact retrieval

* fix: apply session runtime transport hints on open

* fix: secure and time out artifact downloads
2026-03-09 19:50:40 +01:00
Michał Pierzchała 780ecbc7a4 feat: support installing local artifacts over remote daemon transport (#192)
* feat: support installing local artifacts over remote daemon transport

When the CLI runs on a different machine than the daemon (via
AGENT_DEVICE_DAEMON_BASE_URL), install/reinstall commands now
transparently upload local app binaries (.apk/.ipa/.aab) and app
bundles (.app dirs) to the daemon before installing. No new flags
required — same CLI ergonomics.

- Add POST /upload endpoint to daemon HTTP server with auth and
  streaming file/tar reception
- Add client-side upload helper with timeout and tar packing for
  .app directories
- Intercept install/reinstall in sendToDaemon for remote daemons,
  upload artifact, rewrite positional path
- Clean up uploaded temp files after install completes (or fails)
  with 5-minute safety-net auto-cleanup for abandoned uploads
- Sanitize artifact filenames to prevent path traversal

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: harden remote artifact upload flow

* refactor: split upload registry from receiver

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 16:10:31 +01:00
Michał Pierzchała 3bafc24f05 fix: support explicit remote daemon endpoints (#189)
* fix: support remote daemon base url

* fix: harden remote daemon endpoint handling

* docs: update remote daemon skill guidance
2026-03-06 15:40:06 +01:00
Michał Pierzchała 22deb54ddb feat: add --shutdown option to close command for iOS simulator teardown (#176)
* feat: add --shutdown option to close command for iOS simulator teardown (#172)

When --shutdown is passed, close ends the session then runs xcrun simctl
shutdown on the associated simulator. Shutdown result (success, exitCode,
stdout, stderr) is included in the JSON response data.

The option is silently ignored for non-simulator targets (physical iOS
devices, Android). A shutdownSimulator override is injected into
handleSessionCommands for testability.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: document close --shutdown option for iOS simulator teardown

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: keep close --shutdown successful when simulator shutdown fails

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 20:00:10 +01:00
Michał Pierzchała bb06bafc65 feat: add ensure-simulator command for scoped iOS device sets (#179)
* feat: add ensure-simulator command for scoped iOS device sets (#169)

Adds a new first-class `ensure-simulator` command that ensures an iOS
simulator exists (and optionally boots it) inside a scoped device set,
without requiring custom simctl scripting outside agent-device.

Usage:
  agent-device ensure-simulator --device "iPhone 16" [--runtime <id>] [--boot] [--ios-simulator-device-set <path>]

JSON output includes udid, device, runtime, ios_simulator_device_set,
and whether the simulator was created vs reused.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: document ensure-simulator in commands reference and skill

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 19:39:52 +01:00
Michał Pierzchała 427093d0b0 fix: return deterministic matched-target metadata for find click responses (#178)
* fix: return deterministic matched-target metadata for find click responses (#170)

On success, build the response from the matched snapshot node rather than
passing through whatever the underlying click/press handler returns.
Response now includes: ref, locator, query, and x/y derived from the
matched element's rect — all stable across runs.

Also makes `dispatch` injectable in `handleFindCommands` (matching the
pattern in `handleInteractionCommands`) and adds tests that assert the
deterministic shape and verify that non-deterministic platform runner
data does not bleed into the response.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: document find click response shape in selectors and skill references

Add response shape documentation for `find "<query>" click --json` to:
- website/docs/docs/selectors.md (new "Response shape (click)" section)
- skills/agent-device/SKILL.md (guardrail note)
- skills/agent-device/references/snapshot-refs.md (new "find click response" section)

Follows the fix in #178 that made the response deterministic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 19:39:31 +01:00
Michał Pierzchała 9b0a3dee6e feat: add install command with ipa/aab support (#151)
* feat: add install command for in-place app deployment

* chore: document install vs reinstall in quick start and skill

* docs: clarify install format support and limits

* feat: support ipa and aab app installation

* feat: improve install flexibility for ipa and aab

* fix: retry iOS simulator screenshot surface timeouts

* refactor: simplify install resolution and boot handling
2026-03-03 14:14:23 +01:00
Michał Pierzchała 14de55c9b7 fix: support configurable iOS runner bundle IDs (#146) 2026-02-26 16:40:24 +01:00
Michał Pierzchała b3ad24f527 feat: add Android keyboard status and dismiss command (#144) 2026-02-26 11:47:46 +01:00
Michał Pierzchała 890ceefe90 feat: add trigger-app-event aliases and routing (#134)
* feat: add trigger app event aliases and routing

* chore: remove redundant trigger normalization in session handler

* chore: remove trigger command aliases
2026-02-26 10:44:46 +01:00
Michał Pierzchała 4a38bb0b74 feat: add simulator-set and Android allowlist isolation (#143)
* feat: add simulator-set and Android allowlist isolation

* chore: document isolation scopes in agent-device skills
2026-02-26 10:38:23 +01:00
Michał Pierzchała 74eee5a32e Fix Android boot completion and emulator launch modes (#138)
* Fix Android boot completion and headless emulator launch

* Refactor Android boot fast lookup for testability

* Avoid extra target probes in Android boot fast lookup

* Simplify Android boot path in session handler

* fix: enforce boot target and headless validation
2026-02-26 10:20:51 +01:00
Michał Pierzchała b685a0b259 Add remote HTTP daemon mode with lease admission controls (#136)
* fix: add daemon remote HTTP server mode with isolation controls

* feat: add tenant lease lifecycle and admission control

* refactor: simplify lease scope and rpc method routing

* fix: correct smoke expectations for close without session
2026-02-25 18:25:15 +01:00
Michał Pierzchała 803ba256d4 Add Touch ID and Android fingerprint simulation for settings (#135)
* fix: add touchid/fingerprint settings simulation and harden error handling

* chore: tighten agent docs and simplify iOS biometric settings flow
2026-02-25 17:38:43 +01:00
Michał Pierzchała e8e92dc7b8 feat: port dogfood skill to agent-device (#133)
* feat: add agent-device dogfood skill package

* Apply suggestion from @thymikee
2026-02-25 16:27:25 +01:00
Michał Pierzchała f512b7d69c feat: add network dump command for session app traffic (#120)
* feat: add network dump command for session app traffic

* fix: restore cli branch block after rebase conflict
2026-02-25 16:17:08 +01:00
Michał Pierzchała ef20dea6bc feat: add AndroidTV and tvOS target support (#125)
* feat: add AndroidTV and tvOS target support

* feat: enable tvOS runner interactions

* refactor: unify apple target handling and tvOS capability gates

* refactor: remove hardcoded tvOS app-switcher sleep

* fix: align tvOS capabilities and docs for simulator-only helpers

* feat: improve AppleTV and AndroidTV physical device detection

* refactor: simplify tv target detection helpers
2026-02-25 14:55:54 +01:00
Michał Pierzchała 996d1fca2f feat: add session perf metrics command (#121)
* feat: add session perf metrics command

* refactor: simplify open perf result shaping

* docs: improve perf guidance in docs and skill

* docs: split perf guidance into skill reference
2026-02-25 13:49:59 +01:00
Michał Pierzchała ab338263ed feat: add clipboard read and write commands (#122) 2026-02-25 13:01:33 +01:00
Michał Pierzchała 66b0bdba31 fix: expose push notification simulation (#109)
* fix: expose push notification simulation across iOS and Android

* refactor: share push JSON detection and clean extras validation

* fix: harden push payload path handling in session

* refactor: consolidate push payload source resolution
2026-02-24 17:34:28 +01:00
Nils Fischer 8660b0433f feat: add settings appearance command (#119)
* feat: add settings appearance command

- add appearance light|dark|toggle support to settings command

- implement iOS simulator and Android night mode handlers

- cover parser/handler/platform behavior with unit tests

- update README, docs, and agent-device skill guidance

* test: align settings usage assertions

- expect split settings usage lines for wifi/location and appearance

* fix: harden settings appearance parsing and dedupe usage contract

---------

Co-authored-by: Michał Pierzchała <thymikee@gmail.com>
2026-02-24 17:25:56 +01:00
Michał Pierzchała ddfeb65896 fix: harden android non-ascii text input and document IME workaround (#118) 2026-02-24 16:53:30 +01:00
Michał Pierzchała 67b6698f34 feat: expose app permission grant/deny/reset in settings (#108)
* feat: add app-scoped permission settings across ios and android

* refactor: centralize permission target parsing and options

* fix: include stderr excerpt in generic command failures

* refactor: gate stderr message override to process-exit errors
2026-02-23 18:34:27 +01:00
Michał Pierzchała 55065488f6 feat: improve logs debugging workflow (#111) 2026-02-22 15:52:26 +01:00
Michał Pierzchała e638e0ac60 feat: add full session log coverage and diagnostics workflows (#106)
* feat: add full session log coverage with doctor and marker tooling

* chore: split logs skill guidance into reference doc
2026-02-22 10:35:41 +01:00
Michał Pierzchała 00ba0be101 fix: speed up and simplify scrollintoview @ref (#87) 2026-02-20 19:43:05 +01:00
Michał Pierzchała 8eea063374 feat: add iOS device record support via runner (#83)
* feat: add iOS device record support via runner

* refactor: simplify record command pathways

* fix: harden iOS record runner failure handling

* chore: emit diagnostic on iOS record stop runner failure

* fix: clear ios device runner cache in build:xcuitest

* chore: drop unused clean-derived env from build script

* fix: stage iOS device recordings via runner temp file

* fix: prefer requested iOS record path with permission fallback

* fix: disable iOS record fallback for explicit output paths

* refactor: remove iOS record fallback staging path flow

* fix: resolve record output paths from request cwd

* chore: log resolved record output path in diagnostics

* fix: avoid app activation when starting iOS recording

* refactor: streamline iOS recording setup paths

* fix: copy iOS device recordings back to host path

* fix: copy iOS recordings from runner test container

* feat: add configurable iOS recording fps

* fix: disable xcode test diagnostics for runner sessions

* fix: use wall-clock timestamps for iOS recording

* feat: default iOS recording to uncapped fps

* fix: recover stale ios runner recording state

* fix: preserve app focus when starting iOS recording

* docs: clarify iOS device recording capture model

* fix: tighten iOS device record start ownership checks

* refactor: collocate iOS record context checks

* refactor: derive uncapped recorder timescale from interval
2026-02-20 18:41:07 +01:00
Michał Pierzchała cd73856d17 perf: optimize and verify scrollintoview ref path (#86) 2026-02-20 18:38:07 +01:00
Michał Pierzchała 87a11bd765 feat: add diff snapshot command (#81)
* feat: add snapshot diff command and snapshot efficiency guidance

* chore: polish snapshot diff baseline output

* fix: trim diff output context and normalize +/- indentation

* fix: normalize unchanged context indentation in diff output

* fix: preserve snapshot indentation in diff formatter

* fix: honor diff snapshot -i flatten mode
2026-02-20 18:37:28 +01:00
Michał Pierzchała 44c966b4b4 feat: switch CLI long-press command to longpress (#80)
* fix: use longpress as sole CLI command and sync docs

* fix: keep long-press as hidden longpress alias
2026-02-20 12:51:01 +01:00
Michał Pierzchała 0418b0cb7c feat: add Face ID simulator controls to settings command (#75)
* feat: add iOS simulator Face ID settings command support

* fix: remove faceid aliases and standardize docs
2026-02-18 19:34:10 +01:00
Michał Pierzchała 040b5185e8 docs: document XCUITest pasteboard prompt suppression (#71)
Add Known Limitations page to the website and a brief note in the
skills permissions reference covering the iOS "Allow Paste" dialog
being suppressed under XCUITest automation.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-18 14:38:16 +01:00
Michał Pierzchała 94477dd998 feat: add daemon-native JSON batch execution (#69)
* feat: add daemon-native JSON batch command for agent workflows

* docs: add agent batching guides across readme website and skills

* chore: remove batch stdin source and related docs

* fix: harden batch step normalization and flag sanitization

* refactor: simplify batch execution and validation reuse

* docs: rename batching guidance and links
2026-02-18 11:45:19 +01:00
Michał Pierzchała 106a5f661d chore(breaking): remove AX snapshot backend and trim npm artifacts (#62)
* chore: remove AX snapshot backend and trim npm artifacts

* docs: remove AX backend references from commands page

* chore: update website
2026-02-17 12:00:21 +01:00