Michał Pierzchała
f2b0262abc
0.11.6
v0.11.6
2026-04-02 12:09:56 +02:00
Michał Pierzchała
cd44582d40
fix: tighten dogfood snapshot and session UX ( #350 )
...
* fix: tighten dogfood snapshot and session UX
* fix: improve iOS simulator network dump recovery
* fix: honor simulator device set in iOS log recovery
2026-04-02 10:02:34 +02:00
Michał Pierzchała
b4cfe3b638
fix: harden Android network dump recovery ( #348 )
...
* fix: harden android network dump recovery
* refactor: centralize app log network recovery
* fix: only mark android app logs active after attach
2026-04-02 07:59:54 +02:00
Michał Pierzchała
413f67cdba
feat: add Android perf cpu and memory sampling ( #349 )
...
* feat: add Android perf cpu and memory sampling
* fix: degrade Android perf metrics individually
2026-04-02 07:55:19 +02:00
Michał Pierzchała
0bdfde1d95
0.11.5
v0.11.5
2026-04-01 21:34:28 +02:00
Michał Pierzchała
ab30308989
refactor: simplify Android snapshot hinting pipeline ( #347 )
...
* refactor: simplify android snapshot hinting
* refactor: clarify android snapshot source mapping
2026-04-01 21:34:05 +02:00
Michał Pierzchała
5e788f6534
Refactor command handlers into specialized functions ( #346 )
...
* fix: document magic thresholds, fix BFS perf, and add edge-case tests
Address code review findings from #345 :
- Document all undocumented heuristic constants across 11 files with
rationale comments (freshness windows, retry delays, stale detection
thresholds, safe-band zones, viewport-sized checks, scroll indicator
boundaries, network log scan radii, nav subtree detection thresholds)
- Fix O(n²) BFS in ui-hierarchy.ts findScopeNode — replace shift() with
index-based queue traversal
- Remove unused variable in ios/devices.ts listAppleDevices
- Document bundletool cache thread-safety assumption in app-lifecycle.ts
- Add 7 edge-case tests to mobile-snapshot-semantics.test.ts: zero-width
viewport, zero-height viewport, negative coordinates, exact boundary
visibility (both visible and outside cases)
- Add 2 boundary-condition tests to output.test.ts for nav subtree
detection thresholds (below node floor, below duplicate floor)
All 1112 tests pass.
https://claude.ai/code/session_014aYgMag5ziyhXZoXcP9a7i
* refactor: decompose large handler functions for readability
Extract handler functions from three monolithic files:
- dispatch.ts: 13 command handlers from 786-line switch statement
- request-router.ts: split executeSessionRequest into focused helpers
- session-observability.ts: split into per-command handler functions
https://claude.ai/code/session_014aYgMag5ziyhXZoXcP9a7i
* test: add malformed snapshot data coverage for buildSnapshotState/buildSnapshotVisibility
Closes the remaining acceptance gap in #345 : tests for undefined nodes,
sparse node fields, filtered-vs-unfiltered comparisonSafe semantics,
raw/macos-helper backend bypass, and scroll-hint visibility detection.
https://claude.ai/code/session_014aYgMag5ziyhXZoXcP9a7i
---------
Co-authored-by: Claude <noreply@anthropic.com >
2026-04-01 21:32:55 +02:00
Michał Pierzchała
6ec465a3d7
fix: preserve android snapshot visibility hints ( #343 )
2026-04-01 21:01:13 +02:00
Michał Pierzchała
7df452b3b5
feat: add rotate command for iOS and Android ( #344 )
...
* feat: add device rotation command
* fix: simplify rotate command handling
2026-04-01 20:34:56 +02:00
Michał Pierzchała
8df45b69a8
fix: make snapshot refs visible-first ( #337 )
...
* fix: make snapshot refs visible-first
* fix: handle zero-height visible rects
* refactor: simplify scrollintoview success handling
* feat: hint hidden scroll content in snapshots
* refactor: simplify snapshot output helpers
* feat: add hidden scroll-area hints to snapshots
* refactor: keep scroll containers in interactive snapshots
* perf: reuse Android snapshot tree for scroll hints
* refactor: trim hidden scroll hint scope
* refactor: unify mobile visible-first snapshot semantics
* fix: suppress noisy system scroll-container labels
* refactor: unify scroll indicator heuristics
* refactor: trim android hinting overhead
* fix: avoid viewport-sized ancestor promotion for ref taps
* refactor: dedupe viewport helpers and clarify hint naming
2026-04-01 19:00:02 +02:00
Michał Pierzchała
904be86019
fix: serialize first-session open requests per device ( #341 )
2026-04-01 18:53:27 +02:00
Michał Pierzchała
63423dacaa
fix: harden iOS simulator automation stability ( #340 )
...
* fix: harden iOS simulator automation stability
* refactor: simplify automation hardening follow-ups
2026-04-01 17:57:52 +02:00
Michał Pierzchała
3d736ebba1
docs: use GIF for README video ( #339 )
...
* update readme
* chore: update demo link
* chore: use gif
2026-04-01 16:40:08 +02:00
Michał Pierzchała
fe27c50408
chore: update demo link
2026-04-01 16:16:44 +02:00
Michał Pierzchała
cf34583f47
fix: make Android snapshot freshness recovery internal ( #335 )
...
* feat: add --wait-stable for Android AX tree and --first/--last for find
Address the #1 token efficiency issue on Android: stale accessibility
trees after navigation. `snapshot --wait-stable <ms>` polls until two
consecutive uiautomator dumps match (tree stabilized) or the timeout
expires, eliminating retry loops caused by AX lag after screen transitions.
Also adds `find --first` / `find --last` flags to disambiguate when
multiple elements match, avoiding the fallback to raw snapshot +
coordinate taps that burned 4-6 extra tool calls.
https://claude.ai/code/session_01FzX5t9qATyT9iWnYjssShC
* cleanup: simplify find disambiguation and tighten flag descriptions
- Use consistent array reassignment for --first/--last instead of
.length mutation
- Inline FIND_DISAMBIGUATE_FLAGS (only 2 entries, no reuse)
- Shorten --wait-stable usage description
https://claude.ai/code/session_01FzX5t9qATyT9iWnYjssShC
* docs: add flag plumbing checklist and --wait-stable/--first/--last guidance
Add a 7-step checklist to AGENTS.md for adding new CLI flags — this was
the main non-obvious cost in the implementation (7 files for one flag).
Update exploration skill to recommend --wait-stable for Android AX
staleness recovery and --first/--last for ambiguous find matches.
https://claude.ai/code/session_01FzX5t9qATyT9iWnYjssShC
* docs: improve skill clarity for weaker models
- Split "Most common mistake" into three labeled subsections (stale
refs, Android AX lag, React Native overlays) so each is scannable
independently
- Convert Android AX recovery from prose into a numbered list
- Add --wait-stable to debugging.md for consistency with exploration.md
- Replace vague "meaningful UI changes" with concrete triggers
- Tighten QA recovery sentence that was getting unwieldy
https://claude.ai/code/session_01FzX5t9qATyT9iWnYjssShC
* fix: make Android snapshot freshness recovery internal
* fix: tighten Android freshness baselines
* docs: clarify Android freshness tradeoffs
* docs: clarify empty interactive freshness warning
---------
Co-authored-by: Claude <noreply@anthropic.com >
2026-04-01 14:22:39 +02:00
Michał Pierzchała
31b80ff436
docs: add demo video to the repo ( #338 )
...
* docs: add demo video to the repo
* update readme
2026-04-01 12:34:24 +02:00
Michał Pierzchała
94c817ea0b
fix: restore legacy iOS device discovery for pre-iOS 17 devices ( #336 )
...
* fix: restore legacy iOS device discovery
* perf: parallelize Apple legacy device fallback
2026-04-01 12:24:38 +02:00
Michał Pierzchała
7da4c2d45b
0.11.4
v0.11.4
2026-04-01 07:44:47 +02:00
Michał Pierzchała
94966abefc
fix: tighten Expensify Android flow guidance ( #330 )
...
* fix: tighten agent-device expensify flow guidance
* fix: tighten Expensify Android flow guidance
* fix: surface diff snapshot stale warnings
* fix: clarify inactive network log recovery
2026-04-01 07:44:22 +02:00
Michał Pierzchała
f7f7ce531f
chore: add icon for iOS UITest runner ( #328 )
...
* chore: add icon for iOS UITest runner
* chore: tighten uitest runner icon assets
* chore: prefer jpg for uitest runner icon
2026-03-31 21:03:57 +02:00
Michał Pierzchała
0bcfa678ca
fix: prune unlabeled groups from snapshot text output ( #329 )
...
* fix: prune unlabeled groups from snapshot text output
* fix: remove dead snapshot formatter state
2026-03-31 21:03:20 +02:00
Michał Pierzchała
8aea3e0902
feat: improve snapshot diff and network exploration ergonomics ( #326 )
...
* feat: improve snapshot diff and network exploration ergonomics
* refactor: tighten snapshot diff guidance and Android log correlation
2026-03-31 19:37:26 +02:00
Michał Pierzchała
58e64933fb
feat: add lightweight upgrade check ( #324 )
...
* feat: add lightweight upgrade check
* refactor: simplify upgrade check
* refactor: remove update-check test DI
2026-03-31 15:20:27 +02:00
Michał Pierzchała
7236b519cf
0.11.3
v0.11.3
2026-03-31 14:44:09 +02:00
Michał Pierzchała
7b9c02db81
fix(android): tolerate non-zero uiautomator dump exits ( #323 )
...
* fix(android): tolerate non-zero uiautomator dump exits
* test(android): cover snapshot fallback retry
2026-03-31 14:43:49 +02:00
Michał Pierzchała
8467af80e2
fix: avoid iOS fill runner tree scan ( #321 )
2026-03-31 09:45:14 +02:00
Michał Pierzchała
ce378593ac
0.11.2
v0.11.2
2026-03-30 12:38:26 +02:00
Michał Pierzchała
95f8071696
test: drop continue-on-error from CI jobs
2026-03-30 12:03:47 +02:00
Michał Pierzchała
497a54deb7
test: expand replay coverage and CI reporting with JUnit ( #317 )
...
* test: add benchmark .ad scripts for iOS and Android (02-06)
Add 10 new replay scripts covering deep navigation, scroll discovery,
text input & keyboard, app lifecycle, and swipe gestures for both
iOS simulator and Android emulator. Each script combines multiple
command types (snapshot, click, wait, is, find, get, scroll,
scrollintoview, swipe, back, home, keyboard, screenshot, appstate)
to provide comprehensive baseline coverage for version-over-version
comparison.
https://claude.ai/code/session_01VkHLzVc7NULQFaWHnhuBCm
* test: move replay benchmarks out of CI suite
* test: trim replay benchmark script comments
* test: relaunch replay app opens
* fix: stop focusing iOS simulator for screenshots
* fix: open Simulator app on cold boot
* test: trim iOS cold boot coverage
* test: move replay benchmarks into integration suites
* ci: align Android emulator with local setup
* ci: raise iOS replay daemon timeout
* test: add replay junit reports
* ci: use supported Android emulator profile
* fix: stabilize replay cleanup and Android CI flows
* test: trim flaky replay coverage
* fix: exclude replay tests from daemon request timeout
* test: relax android scroll discovery replay
* refactor: rename ios simulator app opener
* ci: remove obsolete android replay timeout override
* test: remove duplicate android replay opens
* test: relax ios swipe replay assertion
* ci: move full replay suites to nightly
* ci: extract shared replay workflow setup
* ci: fail nightly replay jobs on test errors
---------
Co-authored-by: Claude <noreply@anthropic.com >
2026-03-30 11:45:49 +02:00
Michał Pierzchała
40425fce80
refactor: P2 cleanup — extract shared utils, inline trivial files, safety guards ( #315 )
...
* refactor: DRY violations and cleanup from codebase review (P2)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* refactor: complete P2 items — extract parsing, unify transport, consolidate recording, handler utils
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* fix: address P2 review feedback — restore daemonBaseUrl diagnostic, remove dead export
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* refactor: restore leaf seams in daemon cleanup
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-29 21:12:45 +02:00
Michał Pierzchała
7a5e1dca75
refactor: P3 polish — Interactor type safety, error response builder, OXC ( #316 )
...
* refactor: polish improvements from codebase review (P3)
- Export Interactor type and add `satisfies Interactor` to both return
objects in getInteractor() for compile-time completeness checking
- Create errorResponse/successResponse builder in handlers/response.ts
and adopt it in 5 representative handler files (find, record-trace,
interaction-press, session-deploy, snapshot-wait)
- Add ESLint with typescript-eslint, fix unused imports and trivial
lint issues, configure rules to warn for stylistic patterns
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* refactor: complete P3 items — consolidate runner files, document macOS exports, standardize dispatch
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* fix: address P3 review feedback — remove invalid ESLint rules, dead code, unused export
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* chore: replace eslint and prettier with oxc
* chore: tighten oxc config and upgrade typescript
* refactor: extract ios runner contract helpers
* docs: tighten agent guidance and add check scripts
* fix: resolve post-rebase validation issues
* fix: remove shell interpolation from metro launcher
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-29 20:43:24 +02:00
Michał Pierzchała
017ac817ff
refactor: P1 structural improvements — move interactors to core, consolidate selectors, rename client-shared ( #314 )
...
* refactor: structural improvements from codebase review (P1)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* refactor: complete P1 items — split CLI commands, decompose handlers, consolidate artifacts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* refactor: simplify CLI and daemon facades
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-29 12:53:15 +02:00
Michał Pierzchała
0fed800eee
fix: avoid focusing iOS simulator window ( #319 )
2026-03-28 19:39:14 +01:00
Michał Pierzchała
876f091c00
feat: close macOS parity gaps ( #311 )
...
* feat: close macos parity gaps
* fix: support targeted macOS menubar app snapshots
* chore: clarify menubar fallback heuristics
* chore: address review nits
* fix: complete macOS parity flow
2026-03-28 19:06:52 +01:00
Michał Pierzchała
8888dd5d08
fix: address P0 safety issues from codebase review ( #318 )
...
- Add unhandledRejection handler in daemon to prevent silent crashes
- Add timeout handling to runCmdStreaming matching runCmd pattern
- Fix port allocation race in getFreePort by resolving inside close callback
- Replace synchronous appendFileSync with async appendFile in logChunk
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-28 18:56:54 +01:00
Michał Pierzchała
48e55dbd6f
fix: address P0 safety issues from codebase review ( #313 )
...
- Add unhandledRejection handler in daemon to prevent silent crashes
- Add timeout handling to runCmdStreaming matching runCmd pattern
- Fix port allocation race in getFreePort by resolving inside close callback
- Replace synchronous appendFileSync with async appendFile in logChunk
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-28 18:55:53 +01:00
Michał Pierzchała
153ac82c78
0.11.1
v0.11.1
2026-03-27 19:39:00 +01:00
Michał Pierzchała
f7e1e7a89c
refactor: split touch interaction handlers ( #310 )
...
* refactor: split touch interaction handlers
* refactor: extract touch reference frame helpers
2026-03-27 19:13:29 +01:00
Michał Pierzchała
f13ad2054d
feat: add screenshot ref overlays ( #307 )
...
* feat: add screenshot ref overlays
* fix: refresh overlay refs from a fresh snapshot
* chore: tighten screenshot overlay plumbing
* fix: improve screenshot overlay targeting
* docs: trim screenshot overlay docs
* feat: add overlay ref centers
* docs: trim fallback guidance
* fix: improve android overlay labels
2026-03-27 19:04:34 +01:00
Michał Pierzchała
86674d2109
docs: clarify commit and PR title prefixes for agents ( #309 )
...
* docs: clarify commit and PR title prefixes for agents
* docs: default agents to ready-for-review PRs
2026-03-27 18:05:12 +01:00
Michał Pierzchała
44db0ca1cb
refactor: remove remaining test DI seams ( #304 )
...
* refactor: remove remaining test DI seams
* refactor: remove xctestrun test seam
* chore: address PR review nits
2026-03-27 17:51:51 +01:00
Michał Pierzchała
d5cbec08fc
[codex] Speed up Apple CI jobs ( #305 )
...
* perf: speed up apple ci jobs
* chore: address ci review feedback
* chore: unify apple runner build scripts
2026-03-27 17:51:13 +01:00
Michał Pierzchała
d9d94f0f5a
[codex] close iOS runner responses gracefully ( #306 )
...
* fix: close iOS runner responses gracefully
* fix: close runner connection after send
2026-03-27 17:48:20 +01:00
Michał Pierzchała
f984a655ce
chore: add CI replay retries ( #308 )
2026-03-27 17:45:42 +01:00
Michał Pierzchała
7c36b0f821
0.11.0
v0.11.0
2026-03-27 16:50:53 +01:00
Michał Pierzchała
9eb0604065
refactor: migrate session.ts orchestrator to vitest + drop node:test ( #284 ) ( #302 )
...
Remove all test-only DI parameters from handleSessionCommands (signature
drops from ~30 params to 5: req, sessionName, logPath, sessionStore,
invoke) and from the remaining sub-handlers (session-inventory,
session-observability, session-replay, session-close, session-state).
Migrate all 89 remaining node:test unit test files to vitest. Tests that
passed DI overrides now use vi.mock instead. Update vitest.config.ts to
include *.test.ts alongside *.vitest.ts, and remove the dual-runner
node --test from package.json scripts.
Add a permanent CI lint guard that fails if optional typeof DI seams
reappear in production code.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-27 16:39:59 +01:00
Michał Pierzchała
fa212489d4
chore: remove duplicate publish build hook ( #301 )
2026-03-27 15:28:20 +01:00
Michał Pierzchała
ac50381270
docs: clarify iOS runner protocol contract ( #300 )
2026-03-27 15:27:56 +01:00
Michał Pierzchała
aae1771c54
refactor: remove JS test wrappers, run .ad replays directly on CI ( #299 )
...
* refactor: remove JS test wrappers, run .ad replay suites directly on CI
The platform JS test files (ios.test.ts, android.test.ts, macos.test.ts)
were thin wrappers that shelled out to `agent-device test` and asserted
on JSON counts. Since the CLI already exits non-zero on failure, the
wrappers added no value. CI now invokes the replay suites directly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
* fix: add local replay entrypoints and restore physical device test
- Add pnpm scripts for each replay suite (test:replay:ios,
test:replay:ios-device, test:replay:android, test:replay:macos)
so local runs still exercise platform replays
- Restore physical-device iOS replay step in CI workflow
(conditional on IOS_UDID variable)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-27 15:24:07 +01:00
Michał Pierzchała
acee54b697
refactor: migrate session sub-handlers + request-router from test-only DI to vitest mocking ( #295 )
...
Remove ~35 DI parameters from session-close, session-open, session-deploy,
session-device-utils, session-runtime, record-trace-recording, and
request-router. All sub-handlers now use direct imports instead of
threaded typeof params. Tests rewritten from node:test to vitest with
vi.mock() replacing manual dependency injection.
Closes #283
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-27 15:06:39 +01:00