29 Commits

Author SHA1 Message Date
Michał Pierzchała 00ba0be101 fix: speed up and simplify scrollintoview @ref (#87) 2026-02-20 19:43:05 +01:00
Michał Pierzchała 2fd2bf50fe chore: remove dead ios runner command paths (#88) 2026-02-20 19:38:16 +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 345b7eee7d fix: harden ios runner resilience and cancellation (#85) 2026-02-20 17:18:37 +01:00
Michał Pierzchała fc10613ecd fix: harden iOS runner command execution (#72)
* fix: harden iOS runner command execution

* fix: tighten iOS runner error semantics

* fix: harden runner interactions after snapshot
2026-02-18 16:13:18 +01:00
Michał Pierzchała 99cc68463c fix: align press/click behavior and honor fast press cadence on iOS (#70)
* fix: align press and click semantics and reduce iOS tap latency

* perf: batch repeated iOS taps in runner

* perf: add opt-in tap batching for repeated iOS presses

* perf: batch repeated iOS swipes in runner

* fix: preserve interaction series semantics in record/replay

* test: cover click/press interaction handler paths

* refactor: dedupe replay and interaction series helpers

* fix: unify press/click double-tap behavior

* refactor: add interactor doubleTap and alias docs

* refactor: normalize click alias to press path
2026-02-18 16:02:45 +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 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 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 613974ab71 Handle iOS system blocker alerts in snapshots (#38) 2026-02-11 19:05:19 +01:00
Michał Pierzchała 6a064f229d fix: update IPHONEOS_DEPLOYMENT_TARGET to 15.6 (#42) 2026-02-11 10:07:58 +01:00
Michał Pierzchała 4aed3fba72 fix: support TouchableOpacity as [other] on iOS when has content (#31)
* fix: support TouchableOpacity as [other] on iOS when has content

* update snapshot ios
2026-02-09 19:07:04 +01:00
Michał Pierzchała 2e8680518d fix: iOS snapshot not showing password fields (#29) 2026-02-09 13:29:05 +01:00
Michał Pierzchała 828284d7e3 fix: set min iOS deployment target to 15.6 (#27)
* fix: set min iOS deployment target to 15.6

* increase timeout for iOS
2026-02-09 12:39:02 +01:00
Michał Pierzchała d2954f6fd3 fix: missing long-press on iOS simulator (#26)
* feat:  for self-healing e2e tests;  assertions

* fix: support long-press on iOS simulators via XCTest runner

The long-press command was failing on iOS simulators because dispatch.ts
called interactor.longPress() which mapped to a stub in ios/index.ts
that always threw UNSUPPORTED_OPERATION. Unlike press, type, fill, etc.,
the long-press case was missing the iOS simulator routing through the
XCTest runner.

Rather than adding yet another platform branch in dispatch.ts, this
refactors the Interactor abstraction to absorb runner routing internally.
getInteractor() now accepts an optional RunnerContext; when the device is
an iOS simulator, it returns an interactor whose tap/longPress/focus/
type/fill/scroll/scrollIntoView methods route through
runIosRunnerCommand. This removes 7 scattered if-ios-simulator branches
from dispatch.ts, making it impossible to forget runner routing for
future commands.

Changes:
- Swift runner: add longPress command type + longPressAt helper using
  XCUICoordinate.press(forDuration:)
- runner-client.ts: add longPress to RunnerCommand type + durationMs field
- interactors.ts: add RunnerContext type, createIosSimulatorInteractor()
  that routes through the XCTest runner, move invertScrollDirection here
- dispatch.ts: pass RunnerContext to getInteractor, remove all iOS sim
  branching for interactor commands (-90 lines)

Co-authored-by: Cursor <cursoragent@cursor.com>

* restore attempts

* refactor: unify iOS interactor, remove dead input stubs

Since runnerContext is always passed and the capability matrix ensures
iOS only runs on simulators in v1, the two iOS interactor code paths
collapse into one: shared methods (open, close, screenshot) plus runner
overrides spread on top. No branch needed.

This deletes 7 dead iOS input stubs from ios/index.ts (pressIos,
longPressIos, focusIos, typeIos, fillIos, scrollIos, scrollIntoViewIos)
that only ever threw UNSUPPORTED_OPERATION errors.

Co-authored-by: Cursor <cursoragent@cursor.com>

* cleanup

* fixup save-script

* update

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 12:06:26 +01:00
Michał Pierzchała d8440a6645 fix: make fill clear input and progressively fill the input (#17)
* fix: make fill clear input and progressively fill the input

* fixup ios

* improve text fill reliability
2026-02-06 12:16:20 +01:00
Jano 992959c23e feat(ios): add pinch gesture for zoom on iOS simulators (#11)
- Add 'pinch' CLI command: pinch <scale> [x y] (scale > 1 zoom in, < 1 zoom out)
- Implement in dispatch, runner-client (RunnerCommand + scale param), Swift runner
- Use double-tap + drag workaround for map zoom (tap center, drag up/down)
  instead of XCUITest pinch(withScale:velocity:) which pans on map views
- Update commands.md and agent-device skill with pinch usage and best practices
- Fix skill reference: recording.md -> video-recording.md

Co-authored-by: Jano Detzel <jano.detzel@ewe-go.de>
2026-02-05 17:51:36 +01:00
Michał Pierzchała d8b1800dc0 fix long-running timeouts for session app 2026-02-05 07:59:31 +01:00
Michał Pierzchała 1d6994440c perf: improve xctest backend speed dramatically and make default 2026-02-04 22:35:18 +01:00
Michał Pierzchała 701a5ea31e refactor ios-runner; add skills 2026-02-02 20:33:01 +01:00
Michał Pierzchała 24926c0351 improve grouping mechnism for tabbar etc 2026-02-02 17:32:16 +01:00
Michał Pierzchała 8845eb2c79 feat: home, app-switcher, wait for 2026-02-02 16:57:50 +01:00
Michał Pierzchała 0f90c61e7c remove rect; adjust error messages 2026-02-02 14:06:11 +01:00
Michał Pierzchała 13dc88eb83 setup base publish 2026-01-31 18:23:16 +01:00
Michał Pierzchała 2221c886d0 make clicking work where it supposed to 2026-01-31 14:21:59 +01:00
Michał Pierzchała fb53d72b63 feat: AX snapshot goes brrrr 2026-01-31 12:52:04 +01:00
Michał Pierzchała f060fc7fca snapshot accessibility tree 2026-01-30 21:05:58 +01:00
Michał Pierzchała 4da4745a6c initial commit 2026-01-30 19:41:00 +01:00