Michał Pierzchała
3cb126ea34
fix: avoid iOS edge lane for in-page swipes ( #631 )
2026-05-31 11:11:27 +02:00
Michał Pierzchała
ece193e76b
fix: improve React Navigation Maestro reliability ( #628 )
2026-05-30 22:52:45 +02:00
Michał Pierzchała
8e1f8a9f8f
perf: lazy load daemon handlers and report bundle size ( #608 )
...
* perf: lazy load daemon handlers
* perf: thin command metadata paths
* refactor: isolate platform inventory loading
* refactor: trim lazy loading cleanup
* test: guard daemon routing metadata drift
* ci: report startup timing with size
2026-05-30 16:49:21 +02:00
Michael Garfinkle
b7ca4fbcf9
feat: forward --launch-args to adb shell am start on Android ( #599 )
...
* feat: forward --launch-args to adb shell am start on Android
Stacked on top of the iOS-only --launch-args PR (#598 ). Removes the
Android UNSUPPORTED_OPERATION guard added with the Maestro work and
threads launchArgs through all five Android open paths.
Per-path threading:
- openAndroidPackage (-p package launch + activity-fallback)
- openAndroidPackageActivity (-n component override)
- openAndroidIntent (named intent action)
- openAndroidDeepLink (-a VIEW -d <url>, with optional -p)
- openAndroidAppBoundDeepLink (-a VIEW -d <url> -p <resolved>)
`adb shell` joins its argv with spaces and feeds the result to a
device shell, which re-tokenises. The other am-start arguments are
well-known and never contain shell-significant characters, so they
round-trip untouched. Launch arguments are user-supplied and may
contain JSON, spaces, `#`, etc.; each is single-quoted unless it
consists entirely of safe shell characters (the same approach long
used in adb-driven tooling for the same reason).
Help text on --launch-args is updated to describe the Android shape
(`adb shell am start args, e.g. --es key value` for typed Intent
extras) and macOS remains the only rejected platform.
Tests:
- src/platforms/android/__tests__/index.test.ts: five new tests
cover package, activity-override, deep-link URL, app-bound URL,
and JSON-with-shell-metacharacters quoting paths.
- src/core/__tests__/dispatch-open.test.ts: the previous
"rejects Android launch arguments" test is inverted into a
forwarding test that asserts openAndroidApp receives the args.
Validated end-to-end on a Pixel emulator running a debug build whose
launcher activity reads an Intent extra to bootstrap test
configuration: a JSON value containing `#`, `/`, `:` survived
single-quoted transit through `adb shell` and arrived at the
activity unchanged.
* fix: reject unsupported launch args openings
---------
Co-authored-by: Michał Pierzchała <thymikee@gmail.com >
2026-05-30 16:45:25 +02:00
Michael Garfinkle
dc37f86931
feat: expose iOS launch args for open ( #598 )
...
Co-authored-by: Michał Pierzchała <thymikee@gmail.com >
2026-05-30 16:06:32 +02:00
Michał Pierzchała
ae73b77b2b
refactor: narrow Maestro flow runtime bridge ( #626 )
...
* refactor: narrow Maestro flow runtime bridge
* fix: address maestro replay control review
* test: guard maestro replay control boundary
* chore: trim maestro flow control cleanup
2026-05-30 16:04:38 +02:00
Michael Garfinkle
10501b0ce3
fix: preserve remote config for interaction commands ( #616 )
2026-05-30 15:48:00 +02:00
Michał Pierzchała
7f2c2b7261
refactor: converge Maestro assertion waits ( #625 )
...
* refactor: converge Maestro assertion waits
* fix: retry maestro assertVisible snapshot failures
2026-05-30 15:44:59 +02:00
Michał Pierzchała
10fc86f1bd
refactor: converge Maestro gesture handling ( #624 )
...
* refactor: converge Maestro gesture handling
* fix: clarify Maestro gesture clamping
2026-05-30 15:44:41 +02:00
Michał Pierzchała
ea69ebd445
refactor: converge Maestro input handling ( #623 )
...
* refactor: converge Maestro input handling
* fix: preserve Maestro optional input semantics
2026-05-30 15:44:07 +02:00
Michał Pierzchała
7909290a49
refactor: share Maestro target matching primitives ( #622 )
...
* refactor: share Maestro target matching primitives
* test: cover shared snapshot ancestor traversal
2026-05-30 15:43:15 +02:00
Michał Pierzchała
3522aa32a9
fix: chunk long Android recordings ( #617 )
...
* fix: chunk long Android recordings
* refactor: simplify Android recording chunks
* fix: satisfy Android recording fallow audit
2026-05-30 15:39:03 +02:00
Michał Pierzchała
434bf70ab0
fix: stabilize Maestro React Navigation flows ( #618 )
2026-05-30 12:20:22 +02:00
Michał Pierzchała
d087a62d1d
fix: improve Maestro Android reliability and snapshot speed ( #612 )
...
* fix: improve maestro tab target swipes
* fix: stop replay suites on pending timeout cleanup
* fix: tighten maestro compat support plumbing
* fix: resolve ios simulator url open targets
* fix: speed up Android Maestro snapshots
* fix: resolve android snapshot ci regressions
* perf: reduce android snapshot helper overhead
* docs: record persistent helper session architecture
* chore: address snapshot session review
* perf: add persistent Android snapshot helper session
* fix: stabilize Android replay interactions
* fix: stabilize Maestro visibility resolution
* refactor: simplify Android keyboard parsing
2026-05-29 22:09:18 +02:00
Michał Pierzchała
e1b8686e44
fix: hint sparse snapshot fallback ( #614 )
...
* fix: hint sparse snapshot fallback
* fix: suppress sparse hint for depth-limited snapshots
2026-05-29 11:26:27 +02:00
Michał Pierzchała
ab760b6cf9
fix: apply app icon to iOS UI test runner ( #611 )
2026-05-29 09:16:15 +02:00
Michał Pierzchała
0dead15c2b
fix: improve maestro text tap targets ( #610 )
2026-05-28 19:20:09 +02:00
Michał Pierzchała
99e97c873e
feat: stream replay test progress ( #605 )
...
* feat: stream replay test progress
* fix: format replay test progress duration
* fix: harden replay progress transports
* refactor: clean up replay progress fallow findings
* refactor: trim replay progress cleanup
2026-05-28 17:54:44 +02:00
Michał Pierzchała
0bbb06ebcf
refactor: vendor png codec ( #609 )
...
* refactor: vendor png codec
* fix: satisfy fallow audit
* fix: bound png inflate output
2026-05-28 17:54:07 +02:00
Michał Pierzchała
46784f2e81
fix: internalize xml parsing ( #606 )
2026-05-28 17:44:15 +02:00
Michał Pierzchała
ee57e1b114
fix: improve Maestro test suite replay ( #601 )
2026-05-28 15:40:19 +02:00
Michał Pierzchała
136d313a19
build: enable noUncheckedIndexedAccess ( #600 )
...
* build: enable noUncheckedIndexedAccess
* refactor: remove redundant indexed access fallbacks
* fix: address rebased unchecked indexed access
* fix: address unchecked access review feedback
* refactor: simplify replay fill positional typing
* refactor: avoid wait positional assertion
* refactor: prefer value guards for indexed access
* chore: keep fallow baseline for strictness changes
2026-05-28 11:02:43 +02:00
Michał Pierzchała
819d7dc8aa
feat: expose structured MCP command tools ( #593 )
...
* feat: expose semantic MCP tools
* docs: remove semantic mcp prd
* refactor: deepen semantic command surface
* refactor: add mcp execution seam
* refactor: deepen command grammar
* refactor: remove legacy command definitions
* refactor: collapse semantic cli wrappers
* refactor: remove local mcp placeholders
* refactor: derive semantic cli routing
* refactor: trim mcp status metadata
* refactor: derive semantic input contracts
* refactor: split semantic grammar modules
* refactor: derive batch input schema
* refactor: centralize cli command schema catalog
* refactor: share semantic cli output projections
* refactor: remove legacy cli output paths
* refactor: consolidate command interface surface
* docs: align command contract wording
* refactor: split command projection from cli grammar
* refactor: trim projection exports
* fix: satisfy fallow command contract audit
* refactor: structure public batch steps
* chore: clean batch architecture references
* fix: keep legacy cli batch steps working
* fix: serialize mcp batches
* chore: tighten command surface cleanup
* fix: serialize mcp stdin requests
* chore: keep mcp config out of command contracts
* fix: project structured batch targets
* chore: harden command input typing
* fix: project maestro backend for replay tests
* fix: preserve session mcp request options
2026-05-28 09:20:55 +02:00
Michał Pierzchała
a5fffc6e49
feat: add Maestro YAML replay compatibility ( #581 )
...
* feat: add Maestro replay compatibility
* fix: harden Maestro replay compatibility
* fix: address Maestro replay review feedback
* fix: finalize Maestro replay compatibility
* refactor: tighten Maestro replay compatibility boundary
* refactor: reduce Maestro replay quality debt
* refactor: satisfy Maestro replay fallow audit
* fix: stabilize Android provider snapshot tests
2026-05-27 21:45:51 +02:00
Michał Pierzchała
25c7ade769
test: remove 151 unit tests fully covered by integration tests ( #595 )
...
* test: remove 151 unit tests fully covered by integration tests
Per-test coverage analysis confirmed every statement and branch these
tests exercise is already covered by the provider-integration suite.
Removes 8 fully redundant test files and 132 individual tests from
54 files (2,598 lines). Coverage unchanged at 82.4% statements / 84.5%
lines, both above configured thresholds.
* fix: restore package export-map contract test
This test validates the package.json exports field, not runtime code.
Its Istanbul fingerprint is empty, making it trivially "subsumed" by
the coverage analysis — but no integration test checks the export map.
* fix: remove unused imports left behind by test pruning
* fix: restore snapshot-routing contract test, remove orphaned comment
snapshot-routing.test.ts validates that every command in the snapshot
catalog has a handler — a structural check invisible to Istanbul.
Same false-positive pattern as package-exports.test.ts.
2026-05-27 16:08:58 +02:00
Michał Pierzchała
dcc7421892
fix: recover Android app-owned ANRs ( #592 )
...
* fix: recover Android app-owned ANRs
* refactor: tidy Android ANR recovery helpers
* fix: satisfy Android ANR fallow audit
2026-05-26 11:07:46 +02:00
Michał Pierzchała
bbe7c06fb6
feat: auto-reverse Android localhost opens ( #590 )
...
* feat: auto-reverse Android localhost opens
* test: cover Android localhost reverse edge cases
* fix: reduce Android reverse error complexity
* docs: simplify Android Metro reverse guidance
* docs: prefer scripted SkillGym checks
* test: clarify Android Metro SkillGym plan
2026-05-26 10:44:51 +02:00
Michał Pierzchała
87f087ca2b
fix: capture Android snapshot timeout evidence ( #591 )
...
* fix: capture Android snapshot timeout evidence
* refactor: isolate Android snapshot timeout evidence
* fix: satisfy fallow snapshot timeout checks
* refactor: tighten snapshot timeout evidence payload
* refactor: tighten Android timeout evidence cleanup
2026-05-26 10:44:29 +02:00
Michał Pierzchała
ea21793154
feat: support ios transform gesture ( #586 )
2026-05-26 09:58:33 +02:00
Michał Pierzchała
c72cf0e1d2
fix: clarify Android gesture transform behavior ( #584 )
...
* fix: clarify Android gesture transform behavior
* fix: stabilize Android transform injection
2026-05-26 09:47:07 +02:00
Michał Pierzchała
bda96f1b6d
fix: allow inventory selectors with session locks ( #583 )
...
* fix: allow inventory selectors with session locks
* fix: reduce lock policy complexity
* refactor: simplify lock policy helpers
* refactor: trim lock policy cleanup
* fix: preserve explicit inventory selectors
2026-05-25 18:55:04 +02:00
Michał Pierzchała
47b981c8ad
feat: add gesture command coverage ( #576 )
...
* feat: add gesture command coverage
* fix: align iOS fling provider fixture
* feat: group gesture commands
* fix: clarify android gesture support
* feat: add android multitouch gestures
* fix: address gesture review feedback
* refactor: simplify gesture plumbing
* fix: keep gesture subcommands internal
* fix: update iOS provider pan transcript
2026-05-22 18:01:58 +02:00
Michał Pierzchała
168de53bee
fix: improve Android snapshot fidelity ( #580 )
...
* fix: improve Android snapshot fidelity
* fix: address Android snapshot review edge cases
* refactor: simplify Android snapshot cleanup helpers
* test: guard SkillGym external runners in sandbox
2026-05-22 15:14:50 +02:00
Michał Pierzchała
5b63b9b427
fix: make swift helper cache builds concurrent-safe ( #579 )
2026-05-21 17:44:26 +02:00
Michał Pierzchała
0bc1b1e927
fix: simplify iOS interactive snapshots ( #578 )
2026-05-21 16:19:53 +02:00
Michał Pierzchała
cd55a6a52a
fix: harden iOS simulator recording cleanup ( #575 )
2026-05-21 15:34:44 +02:00
Michał Pierzchała
67aa89af58
feat: add iOS repro evidence capabilities ( #573 )
2026-05-21 13:39:52 +02:00
Michał Pierzchała
dfd5c71282
perf: speed up hot iOS taps ( #572 )
...
* perf: skip fresh iOS tap preflight
* perf: use app root for iOS coordinate taps
* perf: simplify iOS coordinate tap payloads
* fix: tighten hot iOS tap safety window
* chore: trace skipped iOS tap preflights
2026-05-21 12:42:08 +02:00
Michał Pierzchała
b0e19c9d1e
perf: improve recording and interaction flows ( #563 )
...
* perf: improve recording and interaction flows
* feat: add React Native overlay dismiss command
* test: cover RedBox overlay dismissal
* fix: simplify React Native overlay snapshot hint
* fix: address daemon and scroll review feedback
* fix: unblock ci after recording polish
* chore: refresh fallow health baseline
* test: stabilize android provider suites
* test: cover rn overlay provider command
2026-05-20 20:32:08 +02:00
Michał Pierzchała
f71371ebb8
fix: handle platform alerts ( #562 )
...
* fix: handle Android platform alerts
* fix: handle iOS alerts in runner
* chore: type alert metadata
* refactor: colocate Android alert handling
2026-05-20 14:51:17 +02:00
Michał Pierzchała
896adcc625
feat: add maestro replay compatibility ( #561 )
2026-05-19 20:49:34 +02:00
Michał Pierzchała
840bef56ca
fix: tighten env var surface ( #560 )
2026-05-19 17:11:31 +02:00
Michał Pierzchała
094c290703
perf: speed up iOS replay runner ( #557 )
...
* perf: speed up iOS replay runner
* fix: harden ios replay fast paths
* fix: address ci validation failures
* refactor: trim unused ios replay surface
2026-05-19 11:36:48 +02:00
Michał Pierzchała
41508d29b1
fix: make mcp discovery-only ( #556 )
2026-05-18 15:56:36 +02:00
Michał Pierzchała
59d28e8446
refactor: add provider-first device lab tests ( #542 )
...
* refactor: add provider-first device lab tests
* refactor: tighten device lab provider seams
* test: cover provider lab contracts
* docs: record device lab harness direction
* ci: run device lab integration tests
* test: move device lab under integration
* test: extract device lab helpers
* refactor: centralize apps filter defaults
* test: drop lab-covered unit tests
* test: fold platform happy paths into device lab
* test: reuse device lab helpers
* test: move device lab to in-process harness
* test: replace session handler cases with device lab
* test: harden device lab scenario contracts
* docs: define unit test retention policy
* test: expand provider device lab coverage
* test: harden provider device lab coverage
* test: cover manifest install and runner session contracts
* chore: remove unused provider cleanup code
* test: split android find device lab scenario
* test: track provider lab architecture progress
* test: clarify provider lab roadmap progress
* test: advance provider lab session coverage
* test: move menubar click routing to device lab
* test: move menubar snapshots to device lab
* refactor: centralize screenshot flag plumbing
* refactor: colocate screenshot flag metadata
* test: cover all public commands in device lab
* test: move macos wait success to device lab
* test: drop redundant perf and diff units
* test: move push payload paths to device lab
* test: move network parsing to device lab
* test: move log cleanup to device lab
* test: move log restart and boot to device lab
* test: move ios physical boot to device lab
* test: cover perf startup in device lab
* test: extract android and ios device lab worlds
* test: trim device lab world surface
* test: split snapshot capture unit coverage
* test: deepen device lab coverage and trim handler units
* test: clean up device lab migration scaffolding
* test: report device lab public command coverage
* refactor: make Apple provider seams semantic
* refactor: tighten device inventory and Linux provider seams
* refactor: tighten request provider scoping
* refactor: add semantic macos host provider
* test: broaden device lab find coverage
* test: cover workflow flags in device lab
* refactor: promote linux input provider seam
* test: clarify device lab flag coverage
* test: classify snapshot force-full progress
* test: enforce device lab progress in ci
* test: stabilize device lab ci
* test: move packaged metro smoke to integration
* test: drop stale provider seam coverage
* test: harden provider scope regression coverage
* refactor: remove stale platform barrels
* refactor: keep linux clipboard and screenshots semantic
* refactor: move macos host tools behind provider
* fix: honor remote artifact output paths
* test: deepen runtime coverage for daemon and runner paths
* test: share loopback test helpers
* refactor: make daemon runtime importable
* fix: honor replay target metadata
* chore: tighten final device lab quality gates
* test: share device lab setup helpers
* test: remove generic apple lab fallback
* test: deduplicate device lab helpers
* chore: tighten fallow duplication signal
* refactor: share apple diagnostic helpers
* fix: detect active android ime during fill verification
* test: consolidate provider-backed integration suite
* ci: fix fallow and iOS smoke setup
* chore: consolidate cleanup after ci fixes
* test: split vitest unit and integration projects
* docs: mention MCP discovery metadata
* docs: add agent skills context pointers
* fix: close provider recording coverage gaps
* fix: restore mcp compatibility smoke
* test: cover provider edge regressions
* test: consolidate loopback helpers
* docs: remove stale provider routing reference
* fix: harden final provider review issues
* chore: defer mcp cleanup from provider refactor
2026-05-18 14:50:52 +02:00
Michał Pierzchała
b5cd1c49fe
fix: handle busy Android RN snapshots ( #554 )
2026-05-16 16:55:18 +02:00
Michał Pierzchała
dea6c3b1b2
fix: compact unchanged snapshot output ( #547 )
2026-05-15 19:37:27 +02:00
Michał Pierzchała
068d4c5d0a
chore: remove ensure-simulator lifecycle command ( #552 )
2026-05-15 19:23:45 +02:00
Michał Pierzchała
60f36eff66
feat: add screenshot no-stabilize flag ( #553 )
2026-05-15 19:21:06 +02:00
Michał Pierzchała
8f722c3c5f
docs: guide bounded react devtools profiling ( #548 )
2026-05-15 18:56:05 +02:00