276 Commits

Author SHA1 Message Date
Michał Pierzchała 92f4dfe731 0.10.0 v0.10.0 2026-03-23 18:57:22 +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 b2afb501ea docs: simplify README landing page (#251)
* docs: simplify README landing page

* docs: remove experimental wording from README

* docs: mention token efficiency in README

* docs: remove npx README guidance

* docs: link contributing guide from README

* docs: add demo video to README

* docs: simplify README demo embed
2026-03-22 21:02:22 +01:00
Michał Pierzchała f90eea2cf2 fix: split snapshot handler helpers and preserve wait cleanup semantics (#249)
* fix: split snapshot handler helpers and preserve wait cleanup semantics

* fix: address snapshot helper CI regressions

* fix: validate settings args before device resolution
2026-03-22 20:16:58 +01:00
Michał Pierzchała 37b82ab862 Refactor interaction handler into command modules (#248)
* refactor: split interaction command handlers

* fix: avoid duplicate snapshot in is handler
2026-03-22 19:55:19 +01:00
Michał Pierzchała 5f62ef4c01 fix: tolerate android emulator avd probe timeouts (#243)
* fix: tolerate android emulator avd probe timeouts

* fix: only ignore timed out android avd probes
2026-03-21 14:02:20 +01:00
Michał Pierzchała 6669eee691 fix: preserve batch session state for recordings (#244) 2026-03-21 13:57:54 +01:00
Michał Pierzchała 449656184c fix: strip trailing OK from android emulator names (#242) 2026-03-21 13:51:29 +01:00
Michał Pierzchała 3d50d9b7e1 fix: improve android sdk path fallback (#241)
* fix: improve android sdk path fallback

* fix: honor pathext in android path fallback

* chore: simplify android sdk fallback tests
2026-03-21 12:37:01 +01:00
Michał Pierzchała 9def661262 0.9.0 v0.9.0 2026-03-20 14:59:16 +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 3da69cbc86 feat: improve CLI help structure (#238)
* feat: improve CLI help structure

* refactor: simplify CLI help schema

* fix: preserve required top-level help syntax

* fix: document batch step source in top-level help
2026-03-19 20:44:40 +01:00
Michał Pierzchała 5c1601c7d8 0.8.6 v0.8.6 2026-03-18 16:29:43 +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 be734d1d5f 0.8.5 v0.8.5 2026-03-18 12:47:55 +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 905f8ea936 0.8.4 v0.8.4 2026-03-17 19:18:37 +01:00
Daniel Williams 3f9eee0704 feat: add diff screenshot command for pixel-level image comparison (#214)
* fix: rebase PR 214 onto main

* fix: clean up screenshot diff output handling

* refactor: split android screenshot module

* chore: remove clack prompts dependency

* chore: format command schema

* refactor: unify user path resolution

* fix: let android screenshot ui settle

---------

Co-authored-by: Michał Pierzchała <thymikee@gmail.com>
2026-03-17 19:14:45 +01:00
Michał Pierzchała 2be4de0a75 chore: prettier 2026-03-17 18:18:53 +01:00
Michał Pierzchała ca6f60ec9a refactor: decompose selector system into parse/match/resolve/build modules (#234)
Closes #159

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 16:50:40 +01:00
Michał Pierzchała 3a2ff61e9d fix: bound iOS simulator focus timeout (#233)
* fix: bound iOS simulator focus timeout

* fix: raise iOS simulator focus timeout
2026-03-17 16:27:06 +01:00
Michał Pierzchała 7747761715 refactor: simplify daemon transport resolution (#228)
* refactor: simplify runtime hint parsing and daemon transport resolution

* refactor: trim daemon transport cleanup scope
2026-03-17 15:54:04 +01:00
Michał Pierzchała e5637bfab2 fix: remove interactive device prompt dependency (#232) 2026-03-17 15:53:29 +01:00
Michał Pierzchała ee83df80db chore: prune redundant tests (#229)
* chore: prune redundant tests

* chore: address test review feedback
2026-03-17 15:42:21 +01:00
Michał Pierzchała b0d598c900 chore: split session handler modules (#230)
* chore: split session handler modules

* chore: tighten session handler cleanup
2026-03-17 15:41:29 +01:00
Michał Pierzchała d66a580454 refactor: consolidate platform branching into Interactor (#231)
Move back, home, appSwitcher, clipboard read/write, setSetting, and
screenshot into the Interactor abstraction, eliminating scattered
if-platform checks in dispatch.ts.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 15:36:12 +01:00
Michał Pierzchała 694a85124e refactor: reduce duplicated client wire mappings (#227)
* fix: reduce duplicated client wire mappings

* refactor: clarify android serial serializer default
2026-03-17 15:29:02 +01:00
Michał Pierzchała ecf1378a7e 0.8.3 v0.8.3 2026-03-16 14:10:46 +01:00
Michał Pierzchała 056b314774 0.8.2 2026-03-16 14:10:39 +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 6644763cde fix: derive Android launch target for installFromSource (#225)
* 0.8.1

* fix: derive android launch target for installFromSource
2026-03-16 13:04:47 +01:00
Michał Pierzchała 9b65546562 fix: harden remote install-from-source transport (#224) 2026-03-16 11:26:45 +01:00
Michał Pierzchała 1af4832937 0.8.0 v0.8.0 2026-03-14 20:58:23 +01:00
Michał Pierzchała b5b78e379e 0.7.22 2026-03-14 20:56:18 +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
Rui Fan bef575bde6 fix: resolve screenshot path against caller cwd (#221)
* fix: resolve screenshot path against caller cwd (#220)

When the daemon process starts from a different directory than the
caller (e.g. executor install dir vs suite workspace), relative
screenshot paths were resolved against the daemon's cwd instead of
the caller's cwd.

Apply the same SessionStore.expandHome(path, meta.cwd) pattern already
used by replay and record before dispatching the command.

Closes #220

* fix: record normalized screenshot paths

---------

Co-authored-by: Michał Pierzchała <thymikee@gmail.com>
2026-03-14 14:24:30 +01:00
Michał Pierzchała 34b9579b51 Add typed TypeScript daemon client (#218)
* feat: add typed daemon client

* chore: tighten client package exports

* fix: preserve open and screenshot cli flags

* feat: expose runtime open and install-source client flows

* feat: expose retained materialization paths in client

* feat: complete typed client cleanup

* fix: fall back to XML plist parsing
2026-03-14 14:19:16 +01:00
Michał Pierzchała d841bc58ad fix: simplify install-from-source identity resolution (#219)
* fix: simplify install-from-source identity resolution

* fix: trim install-source follow-ups

* fix: enforce install-source download timeout through body copy

* fix: omit ephemeral install artifact paths from daemon responses

* feat: retain install-source materializations on demand
2026-03-13 19:35:29 +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 d7a0102395 refactor: extract internal artifact materialization helpers (#215)
* fix: harden and simplify artifact materialization

* fix: cap artifact error buffering
2026-03-13 19:34:39 +01:00
Michał Pierzchała ad4015cbce fix: unref artifact cleanup timer (#216) 2026-03-13 18:09:20 +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 45cc50362b 0.7.21 v0.7.21 2026-03-12 18:41:00 +01:00
Michał Pierzchała 6088a5d063 fix: reject Android binary paths in runtime hints (#212)
* fix: refine Android relaunch target guard

* fix: reject Android binary paths in runtime hints

* fix: reject bare Android binary filenames

* refactor: centralize Android target classification

* chore: trim Android target guard helpers
2026-03-12 18:40:20 +01:00
Michał Pierzchała 479537f36f 0.7.20 v0.7.20 2026-03-12 17:29:55 +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 b8cad6b226 0.7.19 v0.7.19 2026-03-12 15:45:14 +01:00
Michał Pierzchała 967f71fc77 fix: prevent auto-selection of physical iOS devices when simulators are available (#210)
* fix: prevent auto-selection of physical iOS devices when simulators are available

When running with --platform ios and a physical iPhone connected but no
simulators booted, the tool would connect to the physical device instead
of booting a simulator. Add a safeguard in resolveTargetDevice that
rejects auto-selected physical devices and falls back to
findBootableIosSimulator, which queries simctl without the isAvailable
filter to find any bootable simulator.

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

* fix: handle empty device list and filter unavailable simulators in fallback

- Extract resolveIosDevice() so the iOS fallback logic is testable via
  dependency injection without module mocking
- Catch DEVICE_NOT_FOUND from selectDevice when no explicit selector was
  used, so the simulator fallback runs even when listIosDevices returns
  an empty list (all simulators filtered by isAvailable)
- Restore isAvailable check in findBootableIosSimulator to avoid
  returning simulators with missing runtimes that cannot boot
- Add 8 tests covering: physical-device rejection, empty-list recovery,
  explicit-selector passthrough, and normal simulator-present path

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 15:44:52 +01:00