54 Commits

Author SHA1 Message Date
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
Michał Pierzchała 2f64e845b0 feat: iOS device deep link support and web links (#66)
* feat: add iOS device URL session fallback behavior

* chore: trim PR branch naming note

* docs: remove simulator/device support phrasing

* feat: unify iOS deep link behavior across simulator and device

* feat: support iOS open <app> <url> flow

* fix: validate iOS open app+url argument shape

* docs: remove redundant iOS deep-link note
2026-02-16 20:35:00 +01:00
Michał Pierzchała ac078905c6 refactor: stabilize iOS app/session and daemon startup flows (#64)
* refactor: stabilize iOS app/session and daemon startup flows

* fix: wait for android app launch completion

* fix: address review findings for iOS appstate and daemon flows

* fixups
2026-02-16 18:19:17 +01:00
Michał Pierzchała 3314d0355e feat: allow optional --save-script output path (#63) 2026-02-16 11:43:36 +01:00
Michał Pierzchała 06a8778157 Enable iOS device core parity and align docs/skills (#55)
* Add iOS device runner support and document platform matrix

* ios: make signing identity override-only

* ios: address PR55 review follow-ups

* docs: remove v1 phrasing from support messages

* ios appstate: prefer xctest before ax fallback

* docs: clarify ios runner derived path override behavior

* ios: harden runner polling and appstate fallback

* ios: remove automatic AX fallback paths

* docs: clarify no automatic AX fallback

* ios: replace ad-hoc runner poll sleep with retry policy

* Harden iOS runner timeouts and cleanup safety

* args: align scrollintoview schema with capabilities

* test: skip iOS integration flows on CI by default
2026-02-15 21:12:10 +01:00
Michał Pierzchała 64d27c18d0 Add consolidated gesture controls for press and swipe (#54)
* Add gesture series controls for press and swipe

* Normalize iOS swipe timing to safe duration

* Harden daemon startup for integration runs
2026-02-14 13:55:58 +01:00
Michał Pierzchała a0ce6f1df2 feat: reinstall command for reuse and agent ergonomics (#47)
* Refine reinstall flow and add agent-focused coverage

* Avoid duplicate readiness preflight in open flow

* Document boot and reinstall in website docs and skill

* Bound iOS boot commands and enforce runCmd timeouts

* Align boot readiness with timeout profiles across platforms

* Refine boot docs: troubleshooting-only and non-CI wording

* Clarify open vs boot fallback guidance
2026-02-12 17:17:56 +01:00
Michał Pierzchała 1ecbec9012 feat: replay --save-script for self-updating e2e tests; add it assertions; add DSL with selectors (#24)
* feat:  for self-healing e2e tests;  assertions

* rework ad scripts
2026-02-09 11:01:19 +01:00
Michał Pierzchała 9a3570fa1c feat: Daemon modularization + capability-gated command routing + CI/test pipeline (#20)
* feat: Daemon modularization + capability-gated command routing + CI/test pipeline updates

* update android test

* fix arch

* no serial

* fixup tests locally; update runner on CI

* increase timeout

* drop unnecessary node build
2026-02-08 15:20:59 +01:00
Michał Pierzchała ebf45f1e79 feat: record start [path], screenshot [path], --record-json (#18) 2026-02-06 12:44:26 +01:00