From b1eff3c5846c74f0677f4a45033a57393dcfdf05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Sun, 26 Apr 2026 13:46:49 -0400 Subject: [PATCH 1/2] chore: add fallow quality gate --- .fallowrc.json | 90 ++ .github/workflows/ci.yml | 18 + .gitignore | 1 + fallow-baselines/dead-code.json | 18 + fallow-baselines/dupes.json | 666 ++++++++++ fallow-baselines/health.json | 1110 +++++++++++++++++ package.json | 11 +- pnpm-lock.yaml | 85 ++ src/__tests__/test-utils/index.ts | 6 +- src/backend.ts | 2 +- src/cli-test.ts | 2 +- src/cli/commands/connection-runtime.ts | 2 +- src/cli/commands/output.ts | 2 +- src/cli/commands/react-devtools.ts | 2 +- src/client-companion-tunnel-worker.ts | 4 +- src/client-companion-tunnel.ts | 2 +- src/client-normalizers.ts | 2 +- src/client-react-devtools-companion.ts | 8 +- src/client-shared.ts | 2 +- src/commands/interaction-targeting.ts | 27 +- src/core/dispatch-resolve.ts | 2 +- src/core/settings-contract.ts | 18 +- src/daemon/config.ts | 2 +- src/daemon/handlers/handler-utils.ts | 2 +- src/daemon/handlers/interaction-targeting.ts | 66 +- .../interaction-touch-reference-frame.ts | 2 +- src/daemon/handlers/record-trace-recording.ts | 2 +- src/daemon/handlers/session-observability.ts | 2 +- src/daemon/handlers/session-replay-heal.ts | 4 +- src/daemon/handlers/session-test-artifacts.ts | 2 +- src/daemon/handlers/session-test-discovery.ts | 2 +- src/daemon/network-log.ts | 2 +- src/daemon/recording-telemetry.ts | 6 +- src/daemon/server-lifecycle.ts | 12 +- src/daemon/snapshot-diff.ts | 2 +- src/daemon/touch-reference-frame.ts | 2 +- src/platforms/android/open-target.ts | 2 +- src/platforms/android/screenshot.ts | 4 +- src/platforms/install-source.ts | 2 +- src/platforms/ios/install-artifact.ts | 2 +- src/platforms/ios/perf.ts | 8 +- src/platforms/ios/runner-xctestrun.ts | 2 +- src/platforms/linux/linux-env.ts | 2 +- src/platforms/permission-utils.ts | 2 +- src/utils/parsing.ts | 16 +- src/utils/rect-center.ts | 27 + src/utils/text-surface.ts | 4 +- src/utils/update-check.ts | 2 +- test/integration/test-helpers.ts | 2 +- 49 files changed, 2094 insertions(+), 169 deletions(-) create mode 100644 .fallowrc.json create mode 100644 fallow-baselines/dead-code.json create mode 100644 fallow-baselines/dupes.json create mode 100644 fallow-baselines/health.json create mode 100644 src/utils/rect-center.ts diff --git a/.fallowrc.json b/.fallowrc.json new file mode 100644 index 000000000..46d09ba9d --- /dev/null +++ b/.fallowrc.json @@ -0,0 +1,90 @@ +{ + "$schema": "https://raw.githubusercontent.com/fallow-rs/fallow/main/schema.json", + "entry": [ + "rslib.config.ts", + "src/index.ts", + "src/io.ts", + "src/artifacts.ts", + "src/metro.ts", + "src/remote-config.ts", + "src/install-source.ts", + "src/android-apps.ts", + "src/contracts.ts", + "src/selectors.ts", + "src/finders.ts", + "src/bin.ts", + "src/companion-tunnel.ts", + "src/daemon.ts", + "src/utils/update-check-entry.ts", + "test/scripts/metro-prepare-packaged-smoke.mjs", + "test/integration/*.test.ts", + "website/docs/404.mdx", + "website/rspress.config.ts" + ], + "ignoreDependencies": ["@theme"], + "ignoreExports": [ + { + "file": "src/__tests__/test-utils/index.ts", + "exports": ["*"] + }, + { + "file": "src/__tests__/test-utils/device-fixtures.ts", + "exports": ["LINUX_DEVICE", "ANDROID_TV_DEVICE", "TVOS_SIMULATOR"] + }, + { + "file": "src/__tests__/test-utils/mocked-binaries.ts", + "exports": ["withMockedXcrun"] + }, + { + "file": "src/daemon/app-log.ts", + "exports": ["readRecentAndroidLogcatForPackage"] + }, + { + "file": "src/platforms/android/app-lifecycle.ts", + "exports": [ + "parseAndroidForegroundApp", + "parseAndroidLaunchablePackages", + "parseAndroidUserInstalledPackages", + "installAndroidInstallablePath" + ] + }, + { + "file": "src/platforms/android/index.ts", + "exports": ["installAndroidInstallablePath"] + }, + { + "file": "src/platforms/ios/apps.ts", + "exports": ["listSimulatorApps", "uninstallIosApp"] + }, + { + "file": "src/platforms/ios/index.ts", + "exports": ["listSimulatorApps", "uninstallIosApp"] + }, + { + "file": "src/platforms/ios/runner-client.ts", + "exports": [ + "buildRunnerConnectError", + "buildRunnerEarlyExitError", + "resolveSigningFailureHint" + ] + } + ], + "usedClassMembers": [ + "name", + "listActiveLeases", + "delete", + "values", + "elapsedMs", + "isExpired" + ], + "rules": { + "unused-types": "off", + "duplicate-exports": "off" + }, + "publicPackages": ["agent-device"], + "audit": { + "deadCodeBaseline": "fallow-baselines/dead-code.json", + "healthBaseline": "fallow-baselines/health.json", + "dupesBaseline": "fallow-baselines/dupes.json" + } +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba3fcc466..2113ce2bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,6 +44,24 @@ jobs: exit 1 fi + fallow: + name: Fallow Code Quality + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + + - name: Setup toolchain + uses: ./.github/actions/setup-node-pnpm + + - name: Run Fallow audit + env: + FALLOW_BASE: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }} + run: pnpm check:fallow --base "$FALLOW_BASE" + unit: name: Unit Tests runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 8ca439447..573c2a6a6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules/ .pnpm-store/ +.fallow/ dist/ .DS_Store __pycache__/ diff --git a/fallow-baselines/dead-code.json b/fallow-baselines/dead-code.json new file mode 100644 index 000000000..f5cfaedba --- /dev/null +++ b/fallow-baselines/dead-code.json @@ -0,0 +1,18 @@ +{ + "unused_files": [], + "unused_exports": [], + "unused_types": [], + "unused_dependencies": [], + "unused_dev_dependencies": [], + "circular_dependencies": [], + "unused_optional_dependencies": [], + "unused_enum_members": [], + "unused_class_members": [], + "unresolved_imports": [], + "unlisted_dependencies": [], + "duplicate_exports": [], + "type_only_dependencies": [], + "test_only_dependencies": [], + "boundary_violations": [], + "stale_suppressions": [] +} \ No newline at end of file diff --git a/fallow-baselines/dupes.json b/fallow-baselines/dupes.json new file mode 100644 index 000000000..e81248ced --- /dev/null +++ b/fallow-baselines/dupes.json @@ -0,0 +1,666 @@ +{ + "clone_groups": [ + "src/__tests__/cli-batch.test.ts:3-28|src/__tests__/cli-network.test.ts:3-28", + "src/__tests__/cli-batch.test.ts:6-23|src/__tests__/cli-clipboard.test.ts:3-20|src/__tests__/cli-diff.test.ts:7-24|src/__tests__/cli-logs.test.ts:3-20|src/__tests__/cli-network.test.ts:6-23", + "src/__tests__/cli-batch.test.ts:7-27|src/__tests__/cli-clipboard.test.ts:4-24|src/__tests__/cli-config.test.ts:12-32|src/__tests__/cli-logs.test.ts:4-24|src/__tests__/cli-network.test.ts:7-27", + "src/__tests__/cli-batch.test.ts:8-41|src/__tests__/cli-diagnostics.test.ts:9-42", + "src/__tests__/cli-batch.test.ts:30-41|src/__tests__/cli-config.test.ts:36-47|src/__tests__/cli-diagnostics.test.ts:31-42", + "src/__tests__/cli-batch.test.ts:41-60|src/__tests__/cli-diagnostics.test.ts:42-61", + "src/__tests__/cli-batch.test.ts:42-57|src/__tests__/cli-clipboard.test.ts:35-47|src/__tests__/cli-close.test.ts:33-45|src/__tests__/cli-close.test.ts:83-95|src/__tests__/cli-diagnostics.test.ts:43-58|src/__tests__/cli-help.test.ts:32-44|src/__tests__/cli-logs.test.ts:35-47|src/__tests__/cli-network.test.ts:38-50|test/integration/smoke-open-remote-config.test.ts:41-55", + "src/__tests__/cli-batch.test.ts:47-63|src/__tests__/cli-config.test.ts:54-70", + "src/__tests__/cli-batch.test.ts:59-83|src/__tests__/cli-diagnostics.test.ts:60-81", + "src/__tests__/cli-batch.test.ts:109-114|src/__tests__/cli-batch.test.ts:92-98", + "src/__tests__/cli-batch.test.ts:148-158|src/__tests__/cli-batch.test.ts:194-203", + "src/__tests__/cli-batch.test.ts:151-158|src/__tests__/cli-config.test.ts:1002-1008", + "src/__tests__/cli-batch.test.ts:169-177|src/__tests__/cli-diagnostics.test.ts:271-275", + "src/__tests__/cli-client-commands.test.ts:129-144|src/__tests__/cli-client-commands.test.ts:18-33|src/__tests__/cli-client-commands.test.ts:60-75", + "src/__tests__/cli-client-commands.test.ts:129-149|src/__tests__/cli-client-commands.test.ts:60-80", + "src/__tests__/cli-client-commands.test.ts:231-260|src/__tests__/cli-client-commands.test.ts:661-690", + "src/__tests__/cli-client-commands.test.ts:740-757|src/__tests__/remote-connection.test.ts:1336-1353", + "src/__tests__/cli-client-commands.test.ts:910-922|src/__tests__/cli-diff.test.ts:32-44|src/__tests__/runtime-diff-screenshot.test.ts:206-218", + "src/__tests__/cli-client-commands.test.ts:915-921|src/__tests__/cli-diff.test.ts:37-43|src/__tests__/runtime-diff-screenshot.test.ts:211-217|src/utils/__tests__/screenshot-diff.test.ts:20-26", + "src/__tests__/cli-clipboard.test.ts:1-69|src/__tests__/cli-logs.test.ts:1-69", + "src/__tests__/cli-clipboard.test.ts:35-60|src/__tests__/cli-diagnostics.test.ts:46-71|src/__tests__/cli-logs.test.ts:35-60|src/__tests__/cli-network.test.ts:38-63", + "src/__tests__/cli-clipboard.test.ts:72-78|src/__tests__/cli-clipboard.test.ts:86-92", + "src/__tests__/cli-close.test.ts:5-48|src/__tests__/cli-help.test.ts:4-47", + "src/__tests__/cli-close.test.ts:24-49|src/__tests__/cli-close.test.ts:74-99", + "src/__tests__/cli-close.test.ts:52-67|src/__tests__/cli-close.test.ts:99-114", + "src/__tests__/cli-close.test.ts:97-117|src/__tests__/cli-help.test.ts:46-66", + "src/__tests__/cli-close.test.ts:118-125|src/__tests__/cli-close.test.ts:163-170", + "src/__tests__/cli-close.test.ts:126-134|src/__tests__/cli-close.test.ts:171-179", + "src/__tests__/cli-close.test.ts:140-147|src/__tests__/cli-close.test.ts:154-162|src/__tests__/cli-close.test.ts:163-170", + "src/__tests__/cli-config.test.ts:38-47|src/__tests__/cli-diff.test.ts:50-59", + "src/__tests__/cli-config.test.ts:71-83|src/__tests__/cli-help.test.ts:48-60", + "src/__tests__/cli-config.test.ts:214-219|src/__tests__/cli-config.test.ts:99-104", + "src/__tests__/cli-config.test.ts:131-136|src/__tests__/cli-config.test.ts:152-164|src/__tests__/cli-config.test.ts:192-197|src/__tests__/cli-config.test.ts:991-996", + "src/__tests__/cli-config.test.ts:1021-1028|src/__tests__/cli-config.test.ts:201-208|src/__tests__/cli-config.test.ts:234-241", + "src/__tests__/cli-config.test.ts:1021-1028|src/__tests__/cli-config.test.ts:234-241", + "src/__tests__/cli-config.test.ts:350-358|src/__tests__/cli-config.test.ts:853-861|src/__tests__/cli-config.test.ts:916-924", + "src/__tests__/cli-config.test.ts:434-442|src/__tests__/cli-config.test.ts:558-566|src/__tests__/cli-config.test.ts:615-623|src/__tests__/cli-config.test.ts:700-708", + "src/__tests__/cli-config.test.ts:434-441|src/__tests__/cli-config.test.ts:526-533|src/__tests__/cli-config.test.ts:558-565|src/__tests__/cli-config.test.ts:615-622|src/__tests__/cli-config.test.ts:700-707", + "src/__tests__/cli-config.test.ts:558-595|src/__tests__/cli-config.test.ts:700-751", + "src/__tests__/cli-config.test.ts:558-567|src/__tests__/cli-config.test.ts:615-624|src/__tests__/cli-config.test.ts:700-709", + "src/__tests__/cli-config.test.ts:853-865|src/__tests__/cli-config.test.ts:916-928", + "src/__tests__/cli-config.test.ts:903-911|src/__tests__/cli-config.test.ts:950-959", + "src/__tests__/cli-config.test.ts:1039-1049|src/__tests__/cli-config.test.ts:1059-1069", + "src/__tests__/cli-diagnostics.test.ts:177-192|src/__tests__/cli-diagnostics.test.ts:82-95", + "src/__tests__/cli-diff.test.ts:155-163|src/__tests__/cli-diff.test.ts:183-191", + "src/__tests__/cli-diff.test.ts:164-169|src/__tests__/cli-diff.test.ts:383-390", + "src/__tests__/cli-diff.test.ts:166-175|src/__tests__/cli-diff.test.ts:199-208", + "src/__tests__/cli-diff.test.ts:176-183|src/__tests__/cli-diff.test.ts:192-199", + "src/__tests__/cli-diff.test.ts:208-213|src/__tests__/cli-diff.test.ts:237-241|src/__tests__/cli-diff.test.ts:258-261|src/__tests__/cli-diff.test.ts:336-339", + "src/__tests__/cli-diff.test.ts:237-244|src/__tests__/cli-diff.test.ts:258-268|src/__tests__/cli-diff.test.ts:336-342", + "src/__tests__/cli-diff.test.ts:264-278|src/__tests__/cli-diff.test.ts:342-346", + "src/__tests__/cli-diff.test.ts:285-298|src/__tests__/cli-diff.test.ts:312-325", + "src/__tests__/cli-diff.test.ts:401-418|src/__tests__/runtime-diff-screenshot.test.ts:144-174", + "src/__tests__/cli-diff.test.ts:425-433|src/__tests__/cli-network.test.ts:104-112", + "src/__tests__/cli-help.test.ts:67-71|src/__tests__/cli-help.test.ts:83-87", + "src/__tests__/cli-help.test.ts:91-98|src/__tests__/cli-help.test.ts:99-106", + "src/__tests__/cli-help.test.ts:107-111|src/__tests__/cli-help.test.ts:117-121", + "src/__tests__/cli-logs.test.ts:3-69|src/__tests__/cli-network.test.ts:6-72", + "src/__tests__/cli-logs.test.ts:82-86|src/__tests__/cli-network.test.ts:111-115", + "src/__tests__/cli-network.test.ts:120-169|src/__tests__/cli-network.test.ts:180-229", + "src/__tests__/client-companion-tunnel-worker.test.ts:125-131|test/integration/installed-package-metro.test.ts:12-17", + "src/__tests__/client-companion-tunnel-worker.test.ts:133-144|test/integration/installed-package-metro.test.ts:17-27", + "src/__tests__/client-companion-tunnel-worker.test.ts:225-243|src/__tests__/client-companion-tunnel-worker.test.ts:289-307|src/__tests__/client-companion-tunnel-worker.test.ts:584-602", + "src/__tests__/client-companion-tunnel-worker.test.ts:260-280|src/__tests__/client-companion-tunnel-worker.test.ts:442-458|src/__tests__/client-companion-tunnel-worker.test.ts:559-575", + "src/__tests__/client-companion-tunnel-worker.test.ts:265-269|test/scripts/metro-prepare-packaged-smoke.mjs:89-93", + "src/__tests__/client-companion-tunnel-worker.test.ts:271-308|src/__tests__/client-companion-tunnel-worker.test.ts:566-603", + "src/__tests__/client-companion-tunnel-worker.test.ts:289-307|src/__tests__/client-companion-tunnel-worker.test.ts:467-487|src/__tests__/client-companion-tunnel-worker.test.ts:584-602", + "src/__tests__/client-companion-tunnel-worker.test.ts:361-383|src/__tests__/client-companion-tunnel-worker.test.ts:513-535", + "src/__tests__/client-companion-tunnel-worker.test.ts:433-466|src/__tests__/client-companion-tunnel-worker.test.ts:550-583", + "src/__tests__/client-companion-tunnel-worker.test.ts:447-461|src/__tests__/client-companion-tunnel-worker.test.ts:564-578|test/integration/installed-package-metro.test.ts:226-241", + "src/__tests__/client-companion-tunnel-worker.test.ts:621-635|src/__tests__/client-companion-tunnel-worker.test.ts:669-683", + "src/__tests__/client-companion-tunnel-worker.test.ts:638-644|src/__tests__/client-companion-tunnel-worker.test.ts:683-689", + "src/__tests__/client-metro-auto-companion.test.ts:157-163|src/__tests__/client-metro-auto-companion.test.ts:229-235|src/__tests__/client-metro-auto-companion.test.ts:28-34|src/__tests__/client-metro-auto-companion.test.ts:282-288|src/__tests__/client-metro-auto-companion.test.ts:333-339|src/__tests__/client-metro-auto-companion.test.ts:409-415|src/__tests__/client-metro-startup-cleanup.test.ts:28-34", + "src/__tests__/client-metro-auto-companion.test.ts:340-366|src/__tests__/client-metro-auto-companion.test.ts:35-61|src/__tests__/client-metro-auto-companion.test.ts:416-442", + "src/__tests__/client-metro-auto-companion.test.ts:444-470|src/__tests__/client-metro-auto-companion.test.ts:58-84", + "src/__tests__/client-metro-auto-companion.test.ts:112-120|src/__tests__/client-metro-auto-companion.test.ts:498-507", + "src/__tests__/client-metro-auto-companion.test.ts:281-288|src/__tests__/client-metro-auto-companion.test.ts:332-339", + "src/__tests__/client-metro-auto-companion.test.ts:340-367|src/__tests__/client-metro-auto-companion.test.ts:416-443", + "src/__tests__/client-metro-companion.test.ts:161-178|src/__tests__/client-metro-companion.test.ts:62-79", + "src/__tests__/remote-connection.test.ts:121-127|src/__tests__/remote-connection.test.ts:199-205", + "src/__tests__/remote-connection.test.ts:1132-1137|src/__tests__/remote-connection.test.ts:235-240", + "src/__tests__/remote-connection.test.ts:293-311|src/__tests__/remote-connection.test.ts:455-473|src/__tests__/remote-connection.test.ts:742-760", + "src/__tests__/remote-connection.test.ts:293-307|src/__tests__/remote-connection.test.ts:455-469|src/__tests__/remote-connection.test.ts:742-756|src/__tests__/remote-connection.test.ts:842-856", + "src/__tests__/remote-connection.test.ts:293-301|src/__tests__/remote-connection.test.ts:455-463|src/__tests__/remote-connection.test.ts:509-517|src/__tests__/remote-connection.test.ts:609-617|src/__tests__/remote-connection.test.ts:681-689|src/__tests__/remote-connection.test.ts:742-750|src/__tests__/remote-connection.test.ts:793-801|src/__tests__/remote-connection.test.ts:842-850|src/__tests__/remote-connection.test.ts:914-922", + "src/__tests__/remote-connection.test.ts:333-358|src/__tests__/remote-connection.test.ts:411-436", + "src/__tests__/remote-connection.test.ts:509-525|src/__tests__/remote-connection.test.ts:609-625|src/__tests__/remote-connection.test.ts:681-697", + "src/__tests__/remote-connection.test.ts:509-522|src/__tests__/remote-connection.test.ts:609-622|src/__tests__/remote-connection.test.ts:681-694|src/__tests__/remote-connection.test.ts:793-806", + "src/__tests__/remote-connection.test.ts:609-629|src/__tests__/remote-connection.test.ts:681-701", + "src/__tests__/remote-connection.test.ts:1200-1209|src/__tests__/remote-connection.test.ts:903-913", + "src/__tests__/remote-connection.test.ts:925-945|src/__tests__/remote-connection.test.ts:972-992", + "src/__tests__/remote-connection.test.ts:1006-1016|src/__tests__/remote-connection.test.ts:1076-1086", + "src/__tests__/remote-connection.test.ts:1027-1050|src/__tests__/remote-connection.test.ts:1097-1120", + "src/__tests__/remote-connection.test.ts:1210-1228|src/__tests__/remote-connection.test.ts:1269-1287", + "src/__tests__/runtime-admin-router.test.ts:12-22|src/__tests__/runtime-public.test.ts:49-59", + "src/__tests__/runtime-admin-router.test.ts:13-24|src/__tests__/runtime-diagnostics-router.test.ts:14-25", + "src/__tests__/runtime-diff-screenshot.test.ts:113-127|src/__tests__/runtime-diff-screenshot.test.ts:62-76", + "src/__tests__/runtime-snapshot.test.ts:119-132|src/__tests__/runtime-snapshot.test.ts:160-173|src/__tests__/runtime-snapshot.test.ts:206-219", + "src/__tests__/runtime-snapshot.test.ts:160-180|src/__tests__/runtime-snapshot.test.ts:206-226", + "src/__tests__/runtime-snapshot.test.ts:180-194|src/__tests__/runtime-snapshot.test.ts:226-240", + "src/__tests__/test-utils/mocked-binaries.ts:11-17|src/platforms/android/__tests__/index.test.ts:34-39", + "src/__tests__/test-utils/mocked-binaries.ts:18-26|src/platforms/android/__tests__/index.test.ts:1845-1853|src/platforms/android/__tests__/index.test.ts:1918-1926|src/platforms/android/__tests__/index.test.ts:370-377|src/platforms/android/__tests__/index.test.ts:39-45|src/platforms/android/__tests__/index.test.ts:862-870|src/platforms/android/__tests__/index.test.ts:901-909", + "src/__tests__/test-utils/mocked-binaries.ts:21-35|src/__tests__/test-utils/mocked-binaries.ts:54-68", + "src/__tests__/test-utils/mocked-binaries.ts:44-48|src/platforms/ios/__tests__/index.test.ts:162-166", + "src/__tests__/test-utils/mocked-binaries.ts:51-62|src/platforms/ios/__tests__/index.test.ts:168-177", + "src/__tests__/test-utils/mocked-binaries.ts:51-63|src/platforms/ios/__tests__/index.test.ts:168-178|src/platforms/ios/__tests__/index.test.ts:959-974", + "src/__tests__/update-check.test.ts:66-84|src/__tests__/update-check.test.ts:93-112", + "src/__tests__/upload-client.test.ts:133-146|src/__tests__/upload-client.test.ts:171-184|src/__tests__/upload-client.test.ts:241-254|src/__tests__/upload-client.test.ts:321-334|src/__tests__/upload-client.test.ts:52-65|src/__tests__/upload-client.test.ts:95-108", + "src/__tests__/upload-client.test.ts:116-128|src/__tests__/upload-client.test.ts:154-166|src/__tests__/upload-client.test.ts:73-87", + "src/__tests__/upload-client.test.ts:412-423|src/__tests__/upload-client.test.ts:75-83", + "src/__tests__/upload-client.test.ts:427-433|src/__tests__/upload-client.test.ts:84-90", + "src/__tests__/upload-client.test.ts:314-319|src/__tests__/upload-client.test.ts:85-90", + "src/__tests__/upload-client.test.ts:116-125|src/__tests__/upload-client.test.ts:154-163", + "src/__tests__/upload-client.test.ts:119-124|src/__tests__/upload-client.test.ts:157-162|src/__tests__/upload-client.test.ts:288-293", + "src/__tests__/upload-client.test.ts:126-133|src/__tests__/upload-client.test.ts:164-171", + "src/__tests__/upload-client.test.ts:196-203|src/__tests__/upload-client.test.ts:350-357", + "src/cli/commands/connection.ts:127-140|src/cli/commands/connection.ts:175-188", + "src/cli/commands/output.ts:146-150|src/cli/commands/output.ts:205-209", + "src/client-normalizers.ts:109-113|src/client-normalizers.ts:90-94", + "src/client.ts:632-658|src/index.ts:79-105", + "src/commands/admin.ts:306-313|src/commands/apps.ts:286-295", + "src/commands/capture-snapshot.ts:104-110|src/commands/selector-read-shared.ts:42-47", + "src/commands/interactions.ts:207-215|src/core/dispatch.ts:875-883", + "src/commands/selector-read.ts:169-178|src/commands/selector-read.ts:403-410", + "src/contracts.ts:422-427|src/contracts.ts:457-462", + "src/core/__tests__/dispatch-open.test.ts:17-25|src/core/__tests__/dispatch-push.test.ts:12-20", + "src/core/__tests__/dispatch-push.test.ts:12-22|src/platforms/android/__tests__/index.test.ts:1771-1781|src/platforms/android/__tests__/index.test.ts:1793-1803|src/platforms/android/__tests__/index.test.ts:826-836|src/platforms/ios/__tests__/index.test.ts:2197-2207", + "src/core/__tests__/dispatch-push.test.ts:26-36|src/core/__tests__/dispatch-trigger-app-event.test.ts:258-270|src/core/__tests__/dispatch-trigger-app-event.test.ts:281-296|src/core/__tests__/dispatch-trigger-app-event.test.ts:304-316|src/core/__tests__/dispatch-trigger-app-event.test.ts:47-62", + "src/core/__tests__/dispatch-push.test.ts:26-36|src/platforms/ios/__tests__/index.test.ts:1473-1484", + "src/core/__tests__/dispatch-trigger-app-event.test.ts:18-25|src/core/__tests__/dispatch-trigger-app-event.test.ts:301-307", + "src/core/__tests__/dispatch-trigger-app-event.test.ts:22-29|src/platforms/ios/__tests__/index.test.ts:2000-2007", + "src/core/__tests__/dispatch-trigger-app-event.test.ts:258-273|src/core/__tests__/dispatch-trigger-app-event.test.ts:281-299|src/core/__tests__/dispatch-trigger-app-event.test.ts:47-65", + "src/core/__tests__/dispatch-trigger-app-event.test.ts:258-271|src/core/__tests__/dispatch-trigger-app-event.test.ts:281-297|src/core/__tests__/dispatch-trigger-app-event.test.ts:304-317|src/core/__tests__/dispatch-trigger-app-event.test.ts:47-63", + "src/core/__tests__/dispatch-trigger-app-event.test.ts:111-124|src/core/__tests__/dispatch-trigger-app-event.test.ts:66-78", + "src/core/__tests__/dispatch-trigger-app-event.test.ts:135-145|src/core/__tests__/dispatch-trigger-app-event.test.ts:192-202|src/core/__tests__/dispatch-trigger-app-event.test.ts:237-247", + "src/core/__tests__/dispatch-trigger-app-event.test.ts:179-192|src/core/__tests__/dispatch-trigger-app-event.test.ts:233-237", + "src/core/__tests__/dispatch-trigger-app-event.test.ts:191-202|src/core/__tests__/dispatch-trigger-app-event.test.ts:237-247", + "src/core/dispatch.ts:68-235|src/daemon/context.ts:19-68", + "src/daemon/__tests__/app-log-android.test.ts:95-105|src/daemon/handlers/__tests__/session.test.ts:4864-4875", + "src/daemon/__tests__/app-log.test.ts:141-145|src/daemon/__tests__/app-log.test.ts:74-78", + "src/daemon/__tests__/artifact-materialization.test.ts:223-231|src/daemon/__tests__/artifact-materialization.test.ts:259-267", + "src/daemon/__tests__/http-server.test.ts:15-31|test/integration/smoke-open-remote-config.test.ts:86-102", + "src/daemon/__tests__/http-server.test.ts:19-27|test/integration/smoke-daemon-http.test.ts:188-196|test/integration/smoke-open-remote-config.test.ts:90-98|test/scripts/metro-prepare-packaged-smoke.mjs:56-62", + "src/daemon/__tests__/http-server.test.ts:20-28|src/utils/__tests__/daemon-client.test.ts:36-44|test/integration/smoke-daemon-http.test.ts:189-197|test/integration/smoke-open-remote-config.test.ts:91-99", + "src/daemon/__tests__/http-server.test.ts:32-41|src/daemon/transport.ts:109-118|src/daemon/transport.ts:124-133", + "src/daemon/__tests__/http-server.test.ts:131-153|src/daemon/__tests__/http-server.test.ts:178-200|src/daemon/__tests__/http-server.test.ts:351-373", + "src/daemon/__tests__/http-server.test.ts:171-217|src/daemon/__tests__/http-server.test.ts:236-278", + "src/daemon/__tests__/http-server.test.ts:171-181|src/daemon/__tests__/http-server.test.ts:236-246|src/daemon/__tests__/http-server.test.ts:344-354", + "src/daemon/__tests__/http-server.test.ts:181-200|src/daemon/__tests__/http-server.test.ts:354-373", + "src/daemon/__tests__/http-server.test.ts:397-422|src/daemon/__tests__/http-server.test.ts:436-461", + "src/daemon/__tests__/http-server.test.ts:410-419|src/daemon/__tests__/http-server.test.ts:449-458|src/utils/__tests__/daemon-client.test.ts:1258-1267", + "src/daemon/__tests__/materialized-path-registry.test.ts:41-48|src/daemon/handlers/__tests__/session.test.ts:765-771", + "src/daemon/__tests__/materialized-path-registry.test.ts:41-47|src/daemon/handlers/__tests__/session.test.ts:765-770|src/daemon/handlers/__tests__/session.test.ts:803-808", + "src/daemon/__tests__/network-log.test.ts:68-74|src/daemon/__tests__/network-log.test.ts:99-105", + "src/daemon/__tests__/request-router-android-modal.test.ts:98-112|src/daemon/__tests__/request-router-recording-health.test.ts:49-63", + "src/daemon/__tests__/request-router-lock-policy.test.ts:1-16|src/daemon/__tests__/request-router-recording-health.test.ts:1-16", + "src/daemon/__tests__/request-router-lock-policy.test.ts:1-7|src/daemon/__tests__/request-router-open.test.ts:1-9|src/daemon/__tests__/request-router-recording-health.test.ts:1-7", + "src/daemon/__tests__/request-router-lock-policy.test.ts:2-12|src/daemon/__tests__/request-router-recording-health.test.ts:2-12|src/daemon/__tests__/request-router-screenshot.test.ts:3-13", + "src/daemon/__tests__/request-router-lock-policy.test.ts:40-55|src/daemon/__tests__/request-router-lock-policy.test.ts:73-88", + "src/daemon/__tests__/request-router-lock-policy.test.ts:121-140|src/daemon/__tests__/request-router-lock-policy.test.ts:42-59", + "src/daemon/__tests__/request-router-lock-policy.test.ts:57-69|src/daemon/__tests__/request-router-lock-policy.test.ts:90-109", + "src/daemon/__tests__/request-router-lock-policy.test.ts:65-73|src/daemon/handlers/__tests__/replay-heal.test.ts:690-698", + "src/daemon/__tests__/request-router-lock-policy.test.ts:105-109|src/daemon/__tests__/request-router-lock-policy.test.ts:65-69|src/daemon/handlers/__tests__/find.test.ts:192-197|src/daemon/handlers/__tests__/replay-heal.test.ts:690-694|src/daemon/handlers/__tests__/replay-heal.test.ts:721-725", + "src/daemon/__tests__/request-router-lock-policy.test.ts:116-127|src/daemon/__tests__/request-router-lock-policy.test.ts:162-173", + "src/daemon/__tests__/request-router-lock-policy.test.ts:120-133|src/daemon/__tests__/request-router-screenshot.test.ts:295-308|src/daemon/__tests__/request-router-screenshot.test.ts:383-396|src/daemon/__tests__/request-router-screenshot.test.ts:454-467", + "src/daemon/__tests__/request-router-open.test.ts:154-175|src/daemon/__tests__/request-router-open.test.ts:83-99", + "src/daemon/__tests__/request-router-screenshot.test.ts:51-62|src/daemon/__tests__/screenshot-overlay.test.ts:10-21", + "src/daemon/__tests__/request-router-screenshot.test.ts:287-304|src/daemon/__tests__/request-router-screenshot.test.ts:64-81", + "src/daemon/__tests__/request-router-screenshot.test.ts:255-277|src/daemon/__tests__/request-router-screenshot.test.ts:65-87", + "src/daemon/__tests__/request-router-screenshot.test.ts:260-277|src/daemon/__tests__/request-router-screenshot.test.ts:331-348|src/daemon/__tests__/request-router-screenshot.test.ts:70-87", + "src/daemon/__tests__/request-router-screenshot.test.ts:198-212|src/daemon/__tests__/request-router-screenshot.test.ts:263-277|src/daemon/__tests__/request-router-screenshot.test.ts:73-87", + "src/daemon/__tests__/request-router-screenshot.test.ts:194-211|src/daemon/__tests__/request-router-screenshot.test.ts:222-239", + "src/daemon/__tests__/request-router-screenshot.test.ts:292-310|src/daemon/__tests__/request-router-screenshot.test.ts:370-398|src/daemon/__tests__/request-router-screenshot.test.ts:441-469", + "src/daemon/__tests__/request-router-screenshot.test.ts:362-376|src/daemon/__tests__/request-router-screenshot.test.ts:433-447", + "src/daemon/__tests__/request-router-screenshot.test.ts:377-400|src/daemon/__tests__/request-router-screenshot.test.ts:448-471", + "src/daemon/__tests__/runtime-hints.test.ts:138-146|src/platforms/ios/__tests__/index.test.ts:958-967", + "src/daemon/__tests__/runtime-hints.test.ts:138-150|src/platforms/ios/__tests__/index.test.ts:1493-1505|src/platforms/ios/__tests__/index.test.ts:795-807|src/platforms/ios/__tests__/index.test.ts:844-856", + "src/daemon/__tests__/runtime-hints.test.ts:285-300|src/daemon/__tests__/runtime-hints.test.ts:320-334|src/daemon/__tests__/runtime-hints.test.ts:354-369", + "src/daemon/__tests__/runtime-hints.test.ts:303-317|src/daemon/__tests__/runtime-hints.test.ts:337-351", + "src/daemon/__tests__/session-store.test.ts:100-107|src/daemon/__tests__/session-store.test.ts:78-85", + "src/daemon/__tests__/session-store.test.ts:158-168|src/daemon/__tests__/session-store.test.ts:182-192|src/daemon/__tests__/session-store.test.ts:239-249|src/daemon/__tests__/session-store.test.ts:277-287|src/daemon/__tests__/session-store.test.ts:89-99", + "src/daemon/__tests__/session-store.test.ts:140-157|src/daemon/__tests__/session-store.test.ts:213-238|src/daemon/__tests__/session-store.test.ts:251-276", + "src/daemon/__tests__/session-store.test.ts:140-154|src/daemon/__tests__/session-store.test.ts:213-235|src/daemon/__tests__/session-store.test.ts:251-273|src/daemon/__tests__/session-store.test.ts:323-343", + "src/daemon/__tests__/session-store.test.ts:171-181|src/daemon/__tests__/session-store.test.ts:195-205|src/daemon/__tests__/session-store.test.ts:225-238|src/daemon/__tests__/session-store.test.ts:263-276|src/daemon/__tests__/session-store.test.ts:358-371", + "src/daemon/__tests__/session-store.test.ts:194-205|src/daemon/__tests__/session-store.test.ts:224-238|src/daemon/__tests__/session-store.test.ts:262-276|src/daemon/__tests__/session-store.test.ts:357-371", + "src/daemon/__tests__/session-store.test.ts:213-238|src/daemon/__tests__/session-store.test.ts:251-276", + "src/daemon/__tests__/session-store.test.ts:331-347|src/daemon/__tests__/session-store.test.ts:400-413", + "src/daemon/__tests__/snapshot-diff.test.ts:35-41|src/daemon/__tests__/snapshot-diff.test.ts:53-59", + "src/daemon/app-log-ios.ts:102-119|src/daemon/app-log-ios.ts:180-195", + "src/daemon/app-log-ios.ts:102-119|src/daemon/app-log-ios.ts:142-159|src/daemon/app-log-ios.ts:180-195", + "src/daemon/app-log-ios.ts:120-130|src/daemon/app-log-ios.ts:160-170|src/daemon/app-log-ios.ts:196-206", + "src/daemon/handlers/__tests__/find.test.ts:282-301|src/daemon/handlers/__tests__/snapshot-handler.test.ts:210-229|src/daemon/handlers/__tests__/snapshot-handler.test.ts:282-301|src/daemon/handlers/__tests__/snapshot-handler.test.ts:398-417|src/daemon/handlers/__tests__/snapshot-handler.test.ts:460-479|src/daemon/handlers/__tests__/snapshot-handler.test.ts:510-529", + "src/daemon/handlers/__tests__/find.test.ts:313-325|src/daemon/handlers/__tests__/snapshot-handler.test.ts:242-254", + "src/daemon/handlers/__tests__/install-source.test.ts:128-144|src/daemon/handlers/__tests__/install-source.test.ts:166-182", + "src/daemon/handlers/__tests__/install-source.test.ts:180-185|src/daemon/handlers/__tests__/replay-heal.test.ts:355-359", + "src/daemon/handlers/__tests__/interaction.test.ts:164-176|src/daemon/handlers/__tests__/interaction.test.ts:757-769", + "src/daemon/handlers/__tests__/interaction.test.ts:1784-1795|src/daemon/handlers/__tests__/interaction.test.ts:245-256", + "src/daemon/handlers/__tests__/interaction.test.ts:1379-1390|src/daemon/handlers/__tests__/interaction.test.ts:1784-1795|src/daemon/handlers/__tests__/interaction.test.ts:245-256", + "src/daemon/handlers/__tests__/interaction.test.ts:282-291|src/daemon/handlers/__tests__/interaction.test.ts:338-347|src/daemon/handlers/__tests__/interaction.test.ts:395-404", + "src/daemon/handlers/__tests__/interaction.test.ts:312-327|src/daemon/handlers/__tests__/interaction.test.ts:423-438", + "src/daemon/handlers/__tests__/interaction.test.ts:337-348|src/daemon/handlers/__tests__/interaction.test.ts:394-405", + "src/daemon/handlers/__tests__/interaction.test.ts:1189-1213|src/daemon/handlers/__tests__/interaction.test.ts:444-468", + "src/daemon/handlers/__tests__/interaction.test.ts:503-517|src/daemon/handlers/__tests__/interaction.test.ts:541-555|src/daemon/handlers/__tests__/interaction.test.ts:621-635", + "src/daemon/handlers/__tests__/interaction.test.ts:505-532|src/daemon/handlers/__tests__/interaction.test.ts:596-615", + "src/daemon/handlers/__tests__/interaction.test.ts:600-616|src/daemon/handlers/__tests__/interaction.test.ts:636-652", + "src/daemon/handlers/__tests__/interaction.test.ts:661-679|src/daemon/handlers/__tests__/interaction.test.ts:729-747", + "src/daemon/handlers/__tests__/interaction.test.ts:698-717|src/daemon/handlers/__tests__/interaction.test.ts:820-836", + "src/daemon/handlers/__tests__/interaction.test.ts:1083-1105|src/daemon/handlers/__tests__/interaction.test.ts:1143-1165|src/daemon/handlers/__tests__/interaction.test.ts:735-757", + "src/daemon/handlers/__tests__/interaction.test.ts:1487-1504|src/daemon/handlers/__tests__/interaction.test.ts:750-766", + "src/daemon/handlers/__tests__/interaction.test.ts:1118-1122|src/daemon/handlers/__tests__/interaction.test.ts:770-774", + "src/daemon/handlers/__tests__/interaction.test.ts:893-910|src/daemon/handlers/__tests__/interaction.test.ts:951-967", + "src/daemon/handlers/__tests__/interaction.test.ts:1034-1046|src/daemon/handlers/__tests__/interaction.test.ts:987-999", + "src/daemon/handlers/__tests__/interaction.test.ts:1045-1065|src/daemon/handlers/__tests__/interaction.test.ts:998-1018", + "src/daemon/handlers/__tests__/interaction.test.ts:1090-1116|src/daemon/handlers/__tests__/interaction.test.ts:1150-1176", + "src/daemon/handlers/__tests__/interaction.test.ts:1098-1114|src/daemon/handlers/__tests__/interaction.test.ts:1158-1174|src/daemon/handlers/__tests__/interaction.test.ts:1541-1557", + "src/daemon/handlers/__tests__/interaction.test.ts:1165-1176|src/daemon/handlers/__tests__/interaction.test.ts:1939-1950", + "src/daemon/handlers/__tests__/interaction.test.ts:1220-1231|src/daemon/handlers/__tests__/interaction.test.ts:1264-1275", + "src/daemon/handlers/__tests__/interaction.test.ts:1318-1334|src/daemon/handlers/__tests__/interaction.test.ts:1669-1685", + "src/daemon/handlers/__tests__/interaction.test.ts:1421-1442|src/daemon/handlers/__tests__/session.test.ts:1796-1818|src/daemon/handlers/__tests__/snapshot-handler.test.ts:591-612", + "src/daemon/handlers/__tests__/interaction.test.ts:1442-1467|src/daemon/handlers/__tests__/interaction.test.ts:1567-1592", + "src/daemon/handlers/__tests__/interaction.test.ts:1442-1457|src/daemon/handlers/__tests__/interaction.test.ts:1567-1582|src/daemon/handlers/__tests__/interaction.test.ts:1695-1710", + "src/daemon/handlers/__tests__/interaction.test.ts:1459-1470|src/daemon/handlers/__tests__/interaction.test.ts:1712-1723", + "src/daemon/handlers/__tests__/interaction.test.ts:1543-1560|src/daemon/handlers/__tests__/interaction.test.ts:1671-1688|src/daemon/handlers/__tests__/snapshot-handler.test.ts:693-710", + "src/daemon/handlers/__tests__/interaction.test.ts:1548-1567|src/daemon/handlers/__tests__/interaction.test.ts:1676-1695", + "src/daemon/handlers/__tests__/interaction.test.ts:1841-1845|src/daemon/handlers/__tests__/interaction.test.ts:1948-1952", + "src/daemon/handlers/__tests__/interaction.test.ts:1851-1859|src/daemon/handlers/__tests__/interaction.test.ts:1907-1914|src/daemon/handlers/__tests__/interaction.test.ts:1958-1965", + "src/daemon/handlers/__tests__/interaction.test.ts:1907-1918|src/daemon/handlers/__tests__/interaction.test.ts:1958-1969", + "src/daemon/handlers/__tests__/interaction.test.ts:1979-2000|src/daemon/handlers/__tests__/session.test.ts:1440-1462", + "src/daemon/handlers/__tests__/interaction.test.ts:1979-1996|src/daemon/handlers/__tests__/session.test.ts:1440-1458|src/daemon/handlers/__tests__/session.test.ts:324-360", + "src/daemon/handlers/__tests__/interaction.test.ts:1984-1995|src/daemon/handlers/__tests__/interaction.test.ts:2022-2033", + "src/daemon/handlers/__tests__/interaction.test.ts:1992-1996|src/daemon/handlers/__tests__/session.test.ts:1454-1458|src/daemon/handlers/__tests__/session.test.ts:356-360|src/daemon/handlers/__tests__/session.test.ts:5560-5565", + "src/daemon/handlers/__tests__/record-trace.test.ts:37-51|src/daemon/handlers/__tests__/session-device-utils.test.ts:4-18", + "src/daemon/handlers/__tests__/record-trace.test.ts:87-97|src/daemon/handlers/__tests__/session-close-shutdown.test.ts:48-58|src/daemon/handlers/__tests__/session-open-runtime.test.ts:49-59", + "src/daemon/handlers/__tests__/record-trace.test.ts:204-211|src/daemon/handlers/__tests__/record-trace.test.ts:330-337", + "src/daemon/handlers/__tests__/record-trace.test.ts:206-219|src/daemon/handlers/__tests__/record-trace.test.ts:289-302", + "src/daemon/handlers/__tests__/record-trace.test.ts:251-255|src/daemon/handlers/__tests__/record-trace.test.ts:318-323", + "src/daemon/handlers/__tests__/record-trace.test.ts:398-409|src/daemon/handlers/__tests__/record-trace.test.ts:420-431", + "src/daemon/handlers/__tests__/record-trace.test.ts:443-457|src/daemon/handlers/__tests__/record-trace.test.ts:469-483", + "src/daemon/handlers/__tests__/record-trace.test.ts:457-467|src/daemon/handlers/__tests__/record-trace.test.ts:483-493", + "src/daemon/handlers/__tests__/record-trace.test.ts:479-493|src/daemon/handlers/__tests__/record-trace.test.ts:505-516", + "src/daemon/handlers/__tests__/record-trace.test.ts:499-512|src/daemon/handlers/__tests__/record-trace.test.ts:523-536", + "src/daemon/handlers/__tests__/record-trace.test.ts:520-532|src/daemon/handlers/__tests__/record-trace.test.ts:640-651", + "src/daemon/handlers/__tests__/record-trace.test.ts:524-540|src/daemon/handlers/__tests__/record-trace.test.ts:601-617", + "src/daemon/handlers/__tests__/record-trace.test.ts:559-571|src/daemon/handlers/__tests__/record-trace.test.ts:600-612", + "src/daemon/handlers/__tests__/record-trace.test.ts:755-775|src/daemon/handlers/__tests__/record-trace.test.ts:795-815", + "src/daemon/handlers/__tests__/record-trace.test.ts:831-846|src/daemon/handlers/__tests__/record-trace.test.ts:871-886", + "src/daemon/handlers/__tests__/record-trace.test.ts:1263-1273|src/daemon/handlers/__tests__/record-trace.test.ts:855-865", + "src/daemon/handlers/__tests__/record-trace.test.ts:1035-1052|src/daemon/handlers/__tests__/record-trace.test.ts:1160-1178", + "src/daemon/handlers/__tests__/record-trace.test.ts:1035-1053|src/daemon/handlers/__tests__/record-trace.test.ts:1116-1138|src/daemon/handlers/__tests__/record-trace.test.ts:1160-1182", + "src/daemon/handlers/__tests__/record-trace.test.ts:1052-1073|src/daemon/handlers/__tests__/record-trace.test.ts:1179-1202", + "src/daemon/handlers/__tests__/record-trace.test.ts:1054-1072|src/daemon/handlers/__tests__/record-trace.test.ts:1132-1150|src/daemon/handlers/__tests__/record-trace.test.ts:1183-1201", + "src/daemon/handlers/__tests__/record-trace.test.ts:1059-1072|src/daemon/handlers/__tests__/record-trace.test.ts:1188-1201|src/daemon/handlers/__tests__/record-trace.test.ts:1506-1521", + "src/daemon/handlers/__tests__/record-trace.test.ts:1064-1076|src/daemon/handlers/__tests__/record-trace.test.ts:1098-1110", + "src/daemon/handlers/__tests__/record-trace.test.ts:1083-1099|src/daemon/handlers/__tests__/record-trace.test.ts:1211-1231|src/daemon/handlers/__tests__/record-trace.test.ts:1279-1299|src/daemon/handlers/__tests__/record-trace.test.ts:1480-1500", + "src/daemon/handlers/__tests__/record-trace.test.ts:1211-1243|src/daemon/handlers/__tests__/record-trace.test.ts:1279-1311", + "src/daemon/handlers/__tests__/record-trace.test.ts:1211-1230|src/daemon/handlers/__tests__/record-trace.test.ts:1279-1298|src/daemon/handlers/__tests__/record-trace.test.ts:1480-1499", + "src/daemon/handlers/__tests__/record-trace.test.ts:1463-1474|src/daemon/handlers/__tests__/record-trace.test.ts:1513-1524", + "src/daemon/handlers/__tests__/replay-heal.test.ts:1-7|src/daemon/handlers/__tests__/session-reinstall.test.ts:1-7|src/daemon/handlers/__tests__/session-trigger.test.ts:1-7|src/daemon/handlers/__tests__/session.test.ts:1-7", + "src/daemon/handlers/__tests__/replay-heal.test.ts:3-9|src/daemon/handlers/__tests__/session-push.test.ts:6-12", + "src/daemon/handlers/__tests__/replay-heal.test.ts:57-76|src/daemon/handlers/session-replay-script.ts:380-399", + "src/daemon/handlers/__tests__/replay-heal.test.ts:78-89|src/daemon/handlers/session-replay-script.ts:402-413", + "src/daemon/handlers/__tests__/replay-heal.test.ts:106-116|src/daemon/handlers/__tests__/replay-heal.test.ts:450-460", + "src/daemon/handlers/__tests__/replay-heal.test.ts:140-178|src/daemon/handlers/__tests__/replay-heal.test.ts:617-653", + "src/daemon/handlers/__tests__/replay-heal.test.ts:208-216|src/daemon/handlers/__tests__/replay-heal.test.ts:607-612", + "src/daemon/handlers/__tests__/replay-heal.test.ts:221-256|src/daemon/handlers/__tests__/replay-heal.test.ts:397-431|src/daemon/handlers/__tests__/replay-heal.test.ts:614-648", + "src/daemon/handlers/__tests__/replay-heal.test.ts:221-256|src/daemon/handlers/__tests__/replay-heal.test.ts:397-431|src/daemon/handlers/__tests__/replay-heal.test.ts:462-496|src/daemon/handlers/__tests__/replay-heal.test.ts:614-648", + "src/daemon/handlers/__tests__/replay-heal.test.ts:298-311|src/daemon/handlers/__tests__/replay-heal.test.ts:487-500", + "src/daemon/handlers/__tests__/replay-heal.test.ts:351-358|src/daemon/handlers/__tests__/replay-heal.test.ts:687-693|src/daemon/handlers/__tests__/replay-heal.test.ts:718-724", + "src/daemon/handlers/__tests__/replay-heal.test.ts:359-364|src/daemon/handlers/__tests__/replay-heal.test.ts:498-503", + "src/daemon/handlers/__tests__/replay-heal.test.ts:395-433|src/daemon/handlers/__tests__/replay-heal.test.ts:612-650", + "src/daemon/handlers/__tests__/replay-heal.test.ts:472-500|src/daemon/handlers/__tests__/replay-heal.test.ts:551-579", + "src/daemon/handlers/__tests__/replay-heal.test.ts:674-696|src/daemon/handlers/__tests__/replay-heal.test.ts:705-727", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:1-9|src/daemon/handlers/__tests__/session-open-runtime.test.ts:1-9", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:9-15|src/daemon/handlers/__tests__/session.test.ts:32-38", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:15-25|src/daemon/handlers/__tests__/session.test.ts:13-24", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:43-48|src/daemon/handlers/__tests__/session-open-runtime.test.ts:44-49", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:48-62|src/daemon/handlers/__tests__/session-open-runtime.test.ts:49-63", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:128-146|src/daemon/handlers/__tests__/session-close-shutdown.test.ts:82-101", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:101-106|src/daemon/handlers/__tests__/session-close-shutdown.test.ts:149-155", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:172-193|src/daemon/handlers/__tests__/session-close-shutdown.test.ts:210-231", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:193-201|src/daemon/handlers/__tests__/session-close-shutdown.test.ts:231-239", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:250-269|src/daemon/handlers/__tests__/session.test.ts:3357-3375|src/daemon/handlers/__tests__/session.test.ts:4273-4289", + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts:289-325|src/daemon/handlers/__tests__/session-close-shutdown.test.ts:345-381", + "src/daemon/handlers/__tests__/session-device-utils.test.ts:25-45|src/platforms/ios/__tests__/devices.test.ts:22-37", + "src/daemon/handlers/__tests__/session-device-utils.test.ts:38-45|src/daemon/handlers/__tests__/session.test.ts:205-212|src/platforms/ios/__tests__/devices.test.ts:28-37", + "src/daemon/handlers/__tests__/session-observability.test.ts:42-68|src/daemon/handlers/__tests__/session-observability.test.ts:78-104", + "src/daemon/handlers/__tests__/session-open-runtime.test.ts:9-26|src/daemon/handlers/__tests__/session.test.ts:3-20", + "src/daemon/handlers/__tests__/session-open-runtime.test.ts:24-33|src/daemon/handlers/__tests__/session.test.ts:22-31", + "src/daemon/handlers/__tests__/session-open-runtime.test.ts:29-36|src/daemon/handlers/__tests__/session-trigger.test.ts:7-14", + "src/daemon/handlers/__tests__/session-open-runtime.test.ts:171-180|src/daemon/handlers/__tests__/session-open-runtime.test.ts:450-459", + "src/daemon/handlers/__tests__/session-open-runtime.test.ts:331-340|src/daemon/handlers/__tests__/session-open-runtime.test.ts:374-383", + "src/daemon/handlers/__tests__/session-open-runtime.test.ts:336-340|src/daemon/handlers/__tests__/session-open-runtime.test.ts:379-383|src/daemon/handlers/__tests__/session.test.ts:197-201", + "src/daemon/handlers/__tests__/session-open-runtime.test.ts:365-383|src/daemon/handlers/__tests__/session.test.ts:4394-4411|src/daemon/handlers/__tests__/session.test.ts:4429-4445|src/daemon/handlers/__tests__/session.test.ts:4526-4542", + "src/daemon/handlers/__tests__/session-open-runtime.test.ts:462-472|src/daemon/handlers/__tests__/session.test.ts:1034-1044|src/daemon/handlers/__tests__/session.test.ts:992-1002", + "src/daemon/handlers/__tests__/session-push.test.ts:46-62|src/daemon/handlers/__tests__/session-trigger.test.ts:54-70", + "src/daemon/handlers/__tests__/session-push.test.ts:104-114|src/daemon/handlers/__tests__/session-push.test.ts:144-154|src/daemon/handlers/__tests__/session-push.test.ts:62-72", + "src/daemon/handlers/__tests__/session-push.test.ts:86-97|src/daemon/handlers/__tests__/session-trigger.test.ts:95-106", + "src/daemon/handlers/__tests__/session-push.test.ts:145-156|src/daemon/handlers/__tests__/session-reinstall.test.ts:219-230|src/daemon/handlers/__tests__/session-reinstall.test.ts:341-351", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:1-8|src/daemon/handlers/__tests__/session-trigger.test.ts:1-8|src/daemon/handlers/__tests__/session.test.ts:1-8", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:7-21|src/daemon/handlers/__tests__/session.test.ts:67-81", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:29-35|src/daemon/handlers/__tests__/session.test.ts:124-130", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:274-291|src/daemon/handlers/__tests__/session-reinstall.test.ts:73-90", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:169-180|src/daemon/handlers/__tests__/session-reinstall.test.ts:291-302|src/daemon/handlers/__tests__/session-reinstall.test.ts:383-394|src/daemon/handlers/__tests__/session-reinstall.test.ts:90-113", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:106-123|src/daemon/handlers/__tests__/session-reinstall.test.ts:274-291", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:134-166|src/daemon/handlers/__tests__/session-reinstall.test.ts:180-213", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:136-148|src/daemon/handlers/__tests__/session-reinstall.test.ts:182-194|src/daemon/handlers/__tests__/session-reinstall.test.ts:397-409", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:138-147|src/daemon/handlers/__tests__/session-reinstall.test.ts:184-193|src/daemon/handlers/__tests__/session-reinstall.test.ts:306-315|src/daemon/handlers/__tests__/session-reinstall.test.ts:399-408", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:141-160|src/daemon/handlers/__tests__/session-reinstall.test.ts:187-207|src/daemon/handlers/__tests__/session-reinstall.test.ts:238-258", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:162-169|src/daemon/handlers/__tests__/session-reinstall.test.ts:260-267", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:169-180|src/daemon/handlers/__tests__/session-reinstall.test.ts:291-302|src/daemon/handlers/__tests__/session-reinstall.test.ts:383-394", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:194-215|src/daemon/handlers/__tests__/session-reinstall.test.ts:316-337", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:218-230|src/daemon/handlers/__tests__/session-reinstall.test.ts:340-351", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:245-259|src/daemon/handlers/__tests__/session-reinstall.test.ts:361-375", + "src/daemon/handlers/__tests__/session-reinstall.test.ts:260-267|src/daemon/handlers/__tests__/session-reinstall.test.ts:376-383", + "src/daemon/handlers/__tests__/session-replay-script.test.ts:64-73|src/daemon/handlers/__tests__/session-replay-script.test.ts:87-96", + "src/daemon/handlers/__tests__/session-replay-vars.test.ts:273-282|src/daemon/handlers/__tests__/session-replay-vars.test.ts:372-381", + "src/daemon/handlers/__tests__/session-state.test.ts:19-36|src/daemon/handlers/__tests__/session.test.ts:1521-1542|src/daemon/handlers/__tests__/session.test.ts:1547-1568|src/daemon/handlers/__tests__/session.test.ts:3529-3548|src/daemon/handlers/__tests__/session.test.ts:3553-3572|src/daemon/handlers/__tests__/session.test.ts:4080-4098|src/daemon/handlers/__tests__/session.test.ts:4113-4131|src/daemon/handlers/__tests__/session.test.ts:4146-4164|src/daemon/handlers/__tests__/session.test.ts:419-443|src/daemon/handlers/__tests__/session.test.ts:4393-4412|src/daemon/handlers/__tests__/session.test.ts:4428-4446|src/daemon/handlers/__tests__/session.test.ts:4525-4543|src/daemon/handlers/__tests__/snapshot-handler.test.ts:101-119|src/daemon/handlers/__tests__/snapshot-handler.test.ts:1010-1028|src/daemon/handlers/__tests__/snapshot-handler.test.ts:1033-1051", + "src/daemon/handlers/__tests__/session-state.test.ts:41-58|src/daemon/handlers/__tests__/session.test.ts:1167-1186|src/daemon/handlers/__tests__/session.test.ts:1615-1634", + "src/daemon/handlers/__tests__/session-test-artifacts.test.ts:41-46|src/daemon/handlers/__tests__/session-test-artifacts.test.ts:84-89", + "src/daemon/handlers/__tests__/session-trigger.test.ts:124-142|src/daemon/handlers/__tests__/session-trigger.test.ts:48-64", + "src/daemon/handlers/__tests__/session.test.ts:181-194|src/daemon/handlers/__tests__/snapshot-handler.test.ts:41-60", + "src/daemon/handlers/__tests__/session.test.ts:1527-1545|src/daemon/handlers/__tests__/session.test.ts:1553-1571|src/daemon/handlers/__tests__/session.test.ts:3535-3551|src/daemon/handlers/__tests__/session.test.ts:3559-3575|src/daemon/handlers/__tests__/session.test.ts:4086-4101|src/daemon/handlers/__tests__/session.test.ts:4119-4134|src/daemon/handlers/__tests__/session.test.ts:4152-4167|src/daemon/handlers/__tests__/session.test.ts:425-446", + "src/daemon/handlers/__tests__/session.test.ts:492-514|src/daemon/handlers/__tests__/session.test.ts:540-562", + "src/daemon/handlers/__tests__/session.test.ts:3403-3420|src/daemon/handlers/__tests__/session.test.ts:4255-4287|src/daemon/handlers/__tests__/session.test.ts:722-747", + "src/daemon/handlers/__tests__/session.test.ts:731-748|src/daemon/handlers/__tests__/session.test.ts:779-796", + "src/daemon/handlers/__tests__/session.test.ts:1526-1538|src/daemon/handlers/__tests__/session.test.ts:1552-1564|src/daemon/handlers/__tests__/session.test.ts:4085-4096|src/daemon/handlers/__tests__/session.test.ts:4118-4129|src/daemon/handlers/__tests__/session.test.ts:4151-4162|src/daemon/handlers/__tests__/session.test.ts:841-852", + "src/daemon/handlers/__tests__/session.test.ts:866-884|src/daemon/handlers/__tests__/session.test.ts:901-919", + "src/daemon/handlers/__tests__/session.test.ts:875-884|src/daemon/handlers/__tests__/session.test.ts:910-919|src/daemon/handlers/__tests__/session.test.ts:954-964", + "src/daemon/handlers/__tests__/session.test.ts:1219-1229|src/daemon/handlers/__tests__/session.test.ts:1269-1279|src/daemon/handlers/__tests__/session.test.ts:953-963", + "src/daemon/handlers/__tests__/session.test.ts:1013-1034|src/daemon/handlers/__tests__/session.test.ts:971-992", + "src/daemon/handlers/__tests__/session.test.ts:1013-1034|src/daemon/handlers/__tests__/session.test.ts:1104-1125|src/daemon/handlers/__tests__/session.test.ts:971-992", + "src/daemon/handlers/__tests__/session.test.ts:1034-1044|src/daemon/handlers/__tests__/session.test.ts:992-1002", + "src/daemon/handlers/__tests__/session.test.ts:1004-1013|src/daemon/handlers/__tests__/session.test.ts:1044-1052", + "src/daemon/handlers/__tests__/session.test.ts:1062-1079|src/daemon/handlers/__tests__/session.test.ts:1087-1104", + "src/daemon/handlers/__tests__/session.test.ts:1062-1072|src/daemon/handlers/__tests__/session.test.ts:1087-1097|src/daemon/handlers/__tests__/session.test.ts:1125-1135", + "src/daemon/handlers/__tests__/session.test.ts:1160-1182|src/daemon/handlers/__tests__/session.test.ts:1207-1229|src/daemon/handlers/__tests__/session.test.ts:1257-1279", + "src/daemon/handlers/__tests__/session.test.ts:1165-1184|src/daemon/handlers/__tests__/session.test.ts:1438-1457", + "src/daemon/handlers/__tests__/session.test.ts:1176-1189|src/daemon/handlers/__tests__/session.test.ts:1624-1637", + "src/daemon/handlers/__tests__/session.test.ts:1176-1185|src/daemon/handlers/__tests__/session.test.ts:1505-1514|src/daemon/handlers/__tests__/session.test.ts:1624-1633", + "src/daemon/handlers/__tests__/session.test.ts:1201-1233|src/daemon/handlers/__tests__/session.test.ts:1251-1283", + "src/daemon/handlers/__tests__/session.test.ts:1233-1240|src/daemon/handlers/__tests__/session.test.ts:1283-1290", + "src/daemon/handlers/__tests__/session.test.ts:1293-1322|src/daemon/handlers/__tests__/session.test.ts:1338-1366", + "src/daemon/handlers/__tests__/session.test.ts:1313-1325|src/daemon/handlers/__tests__/session.test.ts:1670-1682|src/daemon/handlers/__tests__/session.test.ts:1722-1734", + "src/daemon/handlers/__tests__/session.test.ts:1313-1325|src/daemon/handlers/__tests__/session.test.ts:1670-1682|src/daemon/handlers/__tests__/session.test.ts:1722-1734|src/daemon/handlers/__tests__/session.test.ts:4311-4322", + "src/daemon/handlers/__tests__/session.test.ts:1313-1325|src/daemon/handlers/__tests__/session.test.ts:1670-1682|src/daemon/handlers/__tests__/session.test.ts:1722-1734|src/daemon/handlers/__tests__/session.test.ts:4311-4322|src/daemon/handlers/__tests__/session.test.ts:4351-4363|src/daemon/handlers/__tests__/session.test.ts:4564-4575|src/daemon/handlers/__tests__/session.test.ts:4631-4642", + "src/daemon/handlers/__tests__/session.test.ts:1313-1324|src/daemon/handlers/__tests__/session.test.ts:1873-1883|src/daemon/handlers/__tests__/session.test.ts:1913-1923|src/daemon/handlers/__tests__/session.test.ts:1986-1997|src/daemon/handlers/__tests__/session.test.ts:2049-2060|src/daemon/handlers/__tests__/session.test.ts:4014-4024", + "src/daemon/handlers/__tests__/session.test.ts:1322-1326|src/daemon/handlers/__tests__/session.test.ts:1364-1369", + "src/daemon/handlers/__tests__/session.test.ts:1357-1368|src/daemon/handlers/__tests__/session.test.ts:4052-4062", + "src/daemon/handlers/__tests__/session.test.ts:1478-1490|src/daemon/handlers/__tests__/session.test.ts:1620-1632", + "src/daemon/handlers/__tests__/session.test.ts:1479-1494|src/daemon/handlers/__tests__/session.test.ts:1826-1840|src/daemon/handlers/__tests__/session.test.ts:3982-3996|src/daemon/handlers/__tests__/session.test.ts:4588-4602", + "src/daemon/handlers/__tests__/session.test.ts:1479-1490|src/daemon/handlers/__tests__/session.test.ts:1621-1632|src/daemon/handlers/__tests__/session.test.ts:1826-1836|src/daemon/handlers/__tests__/session.test.ts:3734-3745|src/daemon/handlers/__tests__/session.test.ts:3982-3992|src/daemon/handlers/__tests__/session.test.ts:4588-4598", + "src/daemon/handlers/__tests__/session.test.ts:1526-1545|src/daemon/handlers/__tests__/session.test.ts:1552-1571|src/daemon/handlers/__tests__/session.test.ts:4085-4101|src/daemon/handlers/__tests__/session.test.ts:4118-4134|src/daemon/handlers/__tests__/session.test.ts:4151-4167", + "src/daemon/handlers/__tests__/session.test.ts:1589-1609|src/daemon/handlers/__tests__/session.test.ts:1758-1777|src/daemon/handlers/__tests__/session.test.ts:5288-5314", + "src/daemon/handlers/__tests__/session.test.ts:1593-1606|src/daemon/handlers/__tests__/session.test.ts:1762-1775", + "src/daemon/handlers/__tests__/session.test.ts:1605-1612|src/daemon/handlers/__tests__/session.test.ts:1682-1689", + "src/daemon/handlers/__tests__/session.test.ts:1637-1658|src/daemon/handlers/__tests__/session.test.ts:1689-1710", + "src/daemon/handlers/__tests__/session.test.ts:1670-1683|src/daemon/handlers/__tests__/session.test.ts:1722-1735", + "src/daemon/handlers/__tests__/session.test.ts:1715-1732|src/daemon/handlers/__tests__/session.test.ts:1794-1811", + "src/daemon/handlers/__tests__/session.test.ts:1825-1840|src/daemon/handlers/__tests__/session.test.ts:3981-3996|src/daemon/handlers/__tests__/session.test.ts:4587-4602", + "src/daemon/handlers/__tests__/session.test.ts:1866-1884|src/daemon/handlers/__tests__/session.test.ts:1905-1924|src/daemon/handlers/__tests__/session.test.ts:2042-2061", + "src/daemon/handlers/__tests__/session.test.ts:1905-1928|src/daemon/handlers/__tests__/session.test.ts:2042-2065", + "src/daemon/handlers/__tests__/session.test.ts:1965-1995|src/daemon/handlers/__tests__/session.test.ts:2099-2125|src/daemon/handlers/__tests__/session.test.ts:2158-2180", + "src/daemon/handlers/__tests__/session.test.ts:1978-1998|src/daemon/handlers/__tests__/session.test.ts:2039-2061", + "src/daemon/handlers/__tests__/session.test.ts:2099-2126|src/daemon/handlers/__tests__/session.test.ts:2158-2181", + "src/daemon/handlers/__tests__/session.test.ts:2108-2126|src/daemon/handlers/__tests__/session.test.ts:2163-2181|src/daemon/handlers/__tests__/session.test.ts:2289-2307|src/daemon/handlers/__tests__/session.test.ts:2320-2347", + "src/daemon/handlers/__tests__/session.test.ts:2126-2130|src/daemon/handlers/__tests__/session.test.ts:2181-2185|src/daemon/handlers/__tests__/session.test.ts:2307-2311", + "src/daemon/handlers/__tests__/session.test.ts:2159-2181|src/daemon/handlers/__tests__/session.test.ts:2287-2307", + "src/daemon/handlers/__tests__/session.test.ts:2227-2237|src/platforms/ios/__tests__/perf.test.ts:249-259", + "src/daemon/handlers/__tests__/session.test.ts:2250-2261|src/platforms/ios/__tests__/perf.test.ts:273-284", + "src/daemon/handlers/__tests__/session.test.ts:2356-2389|src/daemon/handlers/__tests__/session.test.ts:2581-2614", + "src/daemon/handlers/__tests__/session.test.ts:2371-2406|src/daemon/handlers/__tests__/session.test.ts:2409-2450", + "src/daemon/handlers/__tests__/session.test.ts:2371-2389|src/daemon/handlers/__tests__/session.test.ts:2409-2433|src/daemon/handlers/__tests__/session.test.ts:2453-2476", + "src/daemon/handlers/__tests__/session.test.ts:2377-2401|src/daemon/handlers/__tests__/session.test.ts:2420-2445|src/daemon/handlers/__tests__/session.test.ts:2504-2530", + "src/daemon/handlers/__tests__/session.test.ts:2389-2402|src/daemon/handlers/__tests__/session.test.ts:2433-2446|src/daemon/handlers/__tests__/session.test.ts:3090-3103", + "src/daemon/handlers/__tests__/session.test.ts:2389-2401|src/daemon/handlers/__tests__/session.test.ts:2433-2445|src/daemon/handlers/__tests__/session.test.ts:2476-2488|src/daemon/handlers/__tests__/session.test.ts:2518-2530|src/daemon/handlers/__tests__/session.test.ts:2563-2575|src/daemon/handlers/__tests__/session.test.ts:2614-2626|src/daemon/handlers/__tests__/session.test.ts:2662-2674|src/daemon/handlers/__tests__/session.test.ts:3046-3058|src/daemon/handlers/__tests__/session.test.ts:3090-3102", + "src/daemon/handlers/__tests__/session.test.ts:2406-2433|src/daemon/handlers/__tests__/session.test.ts:2635-2662", + "src/daemon/handlers/__tests__/session.test.ts:2416-2426|src/daemon/handlers/__tests__/session.test.ts:2645-2655|src/daemon/handlers/__tests__/session.test.ts:3072-3082", + "src/daemon/handlers/__tests__/session.test.ts:2563-2576|src/daemon/handlers/__tests__/session.test.ts:2614-2627", + "src/daemon/handlers/__tests__/session.test.ts:2596-2626|src/daemon/handlers/__tests__/session.test.ts:2638-2674", + "src/daemon/handlers/__tests__/session.test.ts:2607-2626|src/daemon/handlers/__tests__/session.test.ts:2655-2674|src/daemon/handlers/__tests__/session.test.ts:3083-3102", + "src/daemon/handlers/__tests__/session.test.ts:2607-2623|src/daemon/handlers/__tests__/session.test.ts:2655-2671|src/daemon/handlers/__tests__/session.test.ts:3083-3099|src/daemon/handlers/__tests__/session.test.ts:3136-3152", + "src/daemon/handlers/__tests__/session.test.ts:2722-2728|src/daemon/handlers/__tests__/session.test.ts:2814-2820", + "src/daemon/handlers/__tests__/session.test.ts:2804-2816|src/daemon/handlers/__tests__/session.test.ts:2846-2859|src/daemon/handlers/__tests__/session.test.ts:2886-2899", + "src/daemon/handlers/__tests__/session.test.ts:3031-3039|src/daemon/handlers/__tests__/session.test.ts:3075-3083", + "src/daemon/handlers/__tests__/session.test.ts:3180-3200|src/daemon/handlers/__tests__/session.test.ts:3224-3244", + "src/daemon/handlers/__tests__/session.test.ts:3182-3200|src/daemon/handlers/__tests__/session.test.ts:3226-3244|src/daemon/handlers/__tests__/session.test.ts:3310-3328", + "src/daemon/handlers/__tests__/session.test.ts:3207-3232|src/daemon/handlers/__tests__/session.test.ts:3431-3456", + "src/daemon/handlers/__tests__/session.test.ts:3208-3233|src/daemon/handlers/__tests__/session.test.ts:3250-3272", + "src/daemon/handlers/__tests__/session.test.ts:3234-3247|src/daemon/handlers/__tests__/session.test.ts:3273-3286", + "src/daemon/handlers/__tests__/session.test.ts:3364-3375|src/daemon/handlers/__tests__/session.test.ts:4192-4202|src/daemon/handlers/__tests__/session.test.ts:4237-4247|src/daemon/handlers/__tests__/session.test.ts:4279-4289", + "src/daemon/handlers/__tests__/session.test.ts:3381-3404|src/daemon/handlers/__tests__/session.test.ts:3473-3496", + "src/daemon/handlers/__tests__/session.test.ts:3403-3422|src/daemon/handlers/__tests__/session.test.ts:4255-4289", + "src/daemon/handlers/__tests__/session.test.ts:3411-3424|src/daemon/handlers/__tests__/session.test.ts:3507-3520", + "src/daemon/handlers/__tests__/session.test.ts:3411-3425|src/daemon/handlers/__tests__/session.test.ts:3457-3468|src/daemon/handlers/__tests__/session.test.ts:3507-3524", + "src/daemon/handlers/__tests__/session.test.ts:3446-3457|src/daemon/handlers/__tests__/session.test.ts:3496-3507", + "src/daemon/handlers/__tests__/session.test.ts:3534-3551|src/daemon/handlers/__tests__/session.test.ts:3558-3575", + "src/daemon/handlers/__tests__/session.test.ts:3575-3597|src/daemon/handlers/__tests__/session.test.ts:3685-3707", + "src/daemon/handlers/__tests__/session.test.ts:3754-3775|src/daemon/handlers/__tests__/session.test.ts:3903-3925", + "src/daemon/handlers/__tests__/session.test.ts:3791-3814|src/daemon/handlers/__tests__/session.test.ts:3830-3853", + "src/daemon/handlers/__tests__/session.test.ts:3879-3893|src/daemon/handlers/__tests__/session.test.ts:3913-3927", + "src/daemon/handlers/__tests__/session.test.ts:3879-3893|src/daemon/handlers/__tests__/session.test.ts:3913-3927|src/daemon/handlers/__tests__/session.test.ts:3951-3969", + "src/daemon/handlers/__tests__/session.test.ts:3996-4014|src/daemon/handlers/__tests__/session.test.ts:4512-4530", + "src/daemon/handlers/__tests__/session.test.ts:4006-4022|src/daemon/handlers/__tests__/session.test.ts:4044-4060", + "src/daemon/handlers/__tests__/session.test.ts:4052-4062|src/daemon/handlers/__tests__/session.test.ts:4686-4697", + "src/daemon/handlers/__tests__/session.test.ts:4068-4085|src/daemon/handlers/__tests__/session.test.ts:4101-4118|src/daemon/handlers/__tests__/session.test.ts:4134-4151", + "src/daemon/handlers/__tests__/session.test.ts:4210-4237|src/daemon/handlers/__tests__/session.test.ts:4370-4398", + "src/daemon/handlers/__tests__/session.test.ts:4210-4236|src/daemon/handlers/__tests__/session.test.ts:4252-4278|src/daemon/handlers/__tests__/session.test.ts:4370-4397", + "src/daemon/handlers/__tests__/session.test.ts:4237-4247|src/daemon/handlers/__tests__/session.test.ts:4279-4289", + "src/daemon/handlers/__tests__/session.test.ts:4293-4311|src/daemon/handlers/__tests__/session.test.ts:4415-4433|src/daemon/handlers/__tests__/session.test.ts:4546-4564", + "src/daemon/handlers/__tests__/session.test.ts:4293-4318|src/daemon/handlers/__tests__/session.test.ts:4328-4341|src/daemon/handlers/__tests__/session.test.ts:4415-4440|src/daemon/handlers/__tests__/session.test.ts:4546-4571", + "src/daemon/handlers/__tests__/session.test.ts:4344-4361|src/daemon/handlers/__tests__/session.test.ts:4391-4408", + "src/daemon/handlers/__tests__/session.test.ts:4351-4363|src/daemon/handlers/__tests__/session.test.ts:4631-4642", + "src/daemon/handlers/__tests__/session.test.ts:4352-4364|src/daemon/handlers/__tests__/session.test.ts:4488-4500", + "src/daemon/handlers/__tests__/session.test.ts:4399-4415|src/daemon/handlers/__tests__/session.test.ts:4434-4449|src/daemon/handlers/__tests__/session.test.ts:4531-4546", + "src/daemon/handlers/__tests__/session.test.ts:4433-4449|src/daemon/handlers/__tests__/session.test.ts:4530-4546", + "src/daemon/handlers/__tests__/session.test.ts:4481-4497|src/daemon/handlers/__tests__/session.test.ts:4523-4539", + "src/daemon/handlers/__tests__/session.test.ts:4660-4679|src/daemon/handlers/__tests__/session.test.ts:4707-4726|src/daemon/handlers/__tests__/session.test.ts:4845-4864", + "src/daemon/handlers/__tests__/session.test.ts:4661-4697|src/daemon/handlers/__tests__/session.test.ts:4741-4760|src/daemon/handlers/__tests__/session.test.ts:4961-4980|src/daemon/handlers/__tests__/session.test.ts:5038-5057", + "src/daemon/handlers/__tests__/session.test.ts:4679-4697|src/daemon/handlers/__tests__/session.test.ts:5163-5180", + "src/daemon/handlers/__tests__/session.test.ts:4707-4734|src/daemon/handlers/__tests__/session.test.ts:4845-4872", + "src/daemon/handlers/__tests__/session.test.ts:4721-4736|src/daemon/handlers/__tests__/session.test.ts:4797-4812", + "src/daemon/handlers/__tests__/session.test.ts:4737-4761|src/daemon/handlers/__tests__/session.test.ts:4957-4981", + "src/daemon/handlers/__tests__/session.test.ts:4737-4760|src/daemon/handlers/__tests__/session.test.ts:4957-4980|src/daemon/handlers/__tests__/session.test.ts:5034-5057", + "src/daemon/handlers/__tests__/session.test.ts:4737-4760|src/daemon/handlers/__tests__/session.test.ts:4957-4980|src/daemon/handlers/__tests__/session.test.ts:5034-5057|src/daemon/handlers/__tests__/session.test.ts:5111-5134", + "src/daemon/handlers/__tests__/session.test.ts:4781-4798|src/daemon/handlers/__tests__/session.test.ts:4925-4942", + "src/daemon/handlers/__tests__/session.test.ts:4798-4840|src/daemon/handlers/__tests__/session.test.ts:4942-4989", + "src/daemon/handlers/__tests__/session.test.ts:4813-4837|src/daemon/handlers/__tests__/session.test.ts:4876-4900", + "src/daemon/handlers/__tests__/session.test.ts:4994-5033|src/daemon/handlers/__tests__/session.test.ts:5071-5110", + "src/daemon/handlers/__tests__/session.test.ts:5332-5344|src/daemon/handlers/__tests__/session.test.ts:5372-5384", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1019-1031|src/daemon/handlers/__tests__/snapshot-handler.test.ts:1042-1054|src/daemon/handlers/__tests__/snapshot-handler.test.ts:110-122", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:140-150|src/daemon/handlers/__tests__/snapshot-handler.test.ts:191-201|src/daemon/handlers/__tests__/snapshot-handler.test.ts:322-332|src/daemon/handlers/__tests__/snapshot-handler.test.ts:438-448", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:208-233|src/daemon/handlers/__tests__/snapshot-handler.test.ts:280-304|src/daemon/handlers/__tests__/snapshot-handler.test.ts:396-420", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:210-234|src/daemon/handlers/__tests__/snapshot-handler.test.ts:510-534", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:233-243|src/daemon/handlers/__tests__/snapshot-handler.test.ts:304-314|src/daemon/handlers/__tests__/snapshot-handler.test.ts:420-430", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:247-269|src/daemon/handlers/__tests__/snapshot-handler.test.ts:362-385", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:251-269|src/daemon/handlers/__tests__/snapshot-handler.test.ts:313-331", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:280-320|src/daemon/handlers/__tests__/snapshot-handler.test.ts:396-436", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:282-305|src/daemon/handlers/__tests__/snapshot-handler.test.ts:398-421|src/daemon/handlers/__tests__/snapshot-handler.test.ts:460-483", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:321-340|src/daemon/handlers/__tests__/snapshot-handler.test.ts:437-456", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:588-605|src/daemon/handlers/__tests__/snapshot-handler.test.ts:691-707", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1015-1027|src/daemon/handlers/__tests__/snapshot-handler.test.ts:1038-1050|src/daemon/handlers/__tests__/snapshot-handler.test.ts:619-631", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:628-634|src/daemon/handlers/__tests__/snapshot-handler.test.ts:708-716", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1364-1370|src/daemon/handlers/__tests__/snapshot-handler.test.ts:735-741|src/daemon/handlers/__tests__/snapshot-handler.test.ts:928-934", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:739-760|src/daemon/handlers/__tests__/snapshot-handler.test.ts:832-853|src/daemon/handlers/__tests__/snapshot-handler.test.ts:881-904|src/daemon/handlers/__tests__/snapshot-handler.test.ts:932-955", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1391-1401|src/daemon/handlers/__tests__/snapshot-handler.test.ts:764-774|src/daemon/handlers/__tests__/snapshot-handler.test.ts:854-864|src/daemon/handlers/__tests__/snapshot-handler.test.ts:905-915|src/daemon/handlers/__tests__/snapshot-handler.test.ts:960-970", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:828-834|src/daemon/handlers/__tests__/snapshot-handler.test.ts:877-883", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1364-1380|src/daemon/handlers/__tests__/snapshot-handler.test.ts:928-944", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1381-1391|src/daemon/handlers/__tests__/snapshot-handler.test.ts:945-955", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1146-1162|src/daemon/handlers/__tests__/snapshot-handler.test.ts:982-1001", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1015-1031|src/daemon/handlers/__tests__/snapshot-handler.test.ts:1038-1054", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1168-1176|src/daemon/handlers/__tests__/snapshot-handler.test.ts:1251-1259", + "src/daemon/handlers/__tests__/snapshot-handler.test.ts:1192-1200|src/daemon/handlers/__tests__/snapshot-handler.test.ts:1281-1289", + "src/daemon/handlers/__tests__/snapshot.test.ts:101-106|src/daemon/handlers/__tests__/snapshot.test.ts:91-96", + "src/daemon/handlers/find.ts:319-327|src/daemon/handlers/find.ts:352-354", + "src/daemon/handlers/find.ts:322-333|src/daemon/handlers/find.ts:355-363", + "src/daemon/handlers/install-source.ts:149-162|src/daemon/handlers/install-source.ts:87-100", + "src/daemon/handlers/install-source.ts:114-143|src/daemon/handlers/install-source.ts:182-211", + "src/daemon/handlers/record-trace-ios.ts:251-275|src/daemon/handlers/record-trace-ios.ts:336-359", + "src/daemon/handlers/session-replay-script.ts:442-454|src/daemon/session-store.ts:330-342", + "src/daemon/handlers/session-replay-script.ts:460-468|src/daemon/session-store.ts:359-367", + "src/daemon/handlers/session-replay-script.ts:466-478|src/daemon/session-store.ts:339-351", + "src/daemon/handlers/session-replay-script.ts:477-483|src/daemon/session-store.ts:366-372", + "src/daemon/handlers/session-test-runtime.ts:23-43|src/daemon/handlers/session-test.ts:30-41", + "src/daemon/handlers/snapshot-alert.ts:47-52|src/daemon/handlers/snapshot-alert.ts:85-99", + "src/daemon/handlers/snapshot-alert.ts:52-62|src/daemon/handlers/snapshot-alert.ts:99-111", + "src/daemon/handlers/snapshot-alert.ts:127-146|src/daemon/handlers/snapshot-alert.ts:69-81", + "src/daemon/http-server.ts:624-642|src/daemon/http-server.ts:695-712", + "src/daemon/http-server.ts:643-665|src/daemon/http-server.ts:713-734", + "src/daemon/http-server.ts:674-680|src/daemon/http-server.ts:758-764", + "src/daemon/lease-registry.ts:147-157|src/daemon/lease-registry.ts:164-172", + "src/daemon/screenshot-overlay.ts:103-108|src/daemon/screenshot-overlay.ts:111-116", + "src/daemon/screenshot-overlay.ts:322-329|src/utils/snapshot-processing.ts:105-112", + "src/daemon/snapshot-runtime.ts:17-25|src/daemon/snapshot-runtime.ts:65-73", + "src/daemon/snapshot-runtime.ts:26-41|src/daemon/snapshot-runtime.ts:74-89", + "src/daemon/transport.ts:108-118|src/daemon/transport.ts:123-133", + "src/daemon-client.ts:257-269|src/daemon-client.ts:305-321", + "src/daemon-client.ts:962-970|src/upload-client.ts:327-335", + "src/platforms/__tests__/install-source.test.ts:177-197|src/platforms/__tests__/install-source.test.ts:222-242", + "src/platforms/__tests__/install-source.test.ts:177-190|src/platforms/__tests__/install-source.test.ts:222-235|src/platforms/__tests__/install-source.test.ts:400-413", + "src/platforms/android/__tests__/index.test.ts:39-56|src/platforms/android/__tests__/index.test.ts:901-920", + "src/platforms/android/__tests__/index.test.ts:1845-1857|src/platforms/android/__tests__/index.test.ts:1918-1930|src/platforms/android/__tests__/index.test.ts:370-381|src/platforms/android/__tests__/index.test.ts:39-49|src/platforms/android/__tests__/index.test.ts:862-874|src/platforms/android/__tests__/index.test.ts:901-913", + "src/platforms/android/__tests__/index.test.ts:56-65|src/platforms/ios/__tests__/index.test.ts:177-186", + "src/platforms/android/__tests__/index.test.ts:69-82|src/platforms/android/__tests__/index.test.ts:83-96", + "src/platforms/android/__tests__/index.test.ts:69-76|src/platforms/android/__tests__/index.test.ts:83-90|src/platforms/android/__tests__/index.test.ts:97-104", + "src/platforms/android/__tests__/index.test.ts:225-253|src/platforms/android/__tests__/index.test.ts:279-307", + "src/platforms/android/__tests__/index.test.ts:1845-1872|src/platforms/android/__tests__/index.test.ts:1918-1942|src/platforms/android/__tests__/index.test.ts:370-388", + "src/platforms/android/__tests__/index.test.ts:394-403|src/platforms/android/__tests__/index.test.ts:468-477", + "src/platforms/android/__tests__/index.test.ts:395-408|src/platforms/android/__tests__/index.test.ts:882-895", + "src/platforms/android/__tests__/index.test.ts:1898-1908|src/platforms/android/__tests__/index.test.ts:1946-1956|src/platforms/android/__tests__/index.test.ts:396-406|src/platforms/android/__tests__/index.test.ts:883-893|src/platforms/android/__tests__/index.test.ts:933-943|src/platforms/ios/__tests__/index.test.ts:1233-1243|src/platforms/ios/__tests__/index.test.ts:1319-1329|src/platforms/ios/__tests__/index.test.ts:1386-1396|src/platforms/ios/__tests__/index.test.ts:1524-1534|src/platforms/ios/__tests__/index.test.ts:826-836|src/platforms/ios/__tests__/index.test.ts:875-885|src/platforms/ios/__tests__/index.test.ts:973-983", + "src/platforms/android/__tests__/index.test.ts:409-452|src/platforms/android/__tests__/index.test.ts:488-531", + "src/platforms/android/__tests__/index.test.ts:454-468|src/platforms/android/__tests__/index.test.ts:535-549", + "src/platforms/android/__tests__/index.test.ts:470-482|src/platforms/android/__tests__/index.test.ts:549-561", + "src/platforms/android/__tests__/index.test.ts:547-556|src/platforms/ios/__tests__/index.test.ts:971-980", + "src/platforms/android/__tests__/index.test.ts:573-583|src/platforms/android/__tests__/index.test.ts:617-627", + "src/platforms/android/__tests__/index.test.ts:602-615|src/platforms/android/__tests__/index.test.ts:639-651", + "src/platforms/android/__tests__/index.test.ts:675-683|src/platforms/ios/__tests__/index.test.ts:2072-2080", + "src/platforms/android/__tests__/index.test.ts:692-701|src/platforms/android/__tests__/index.test.ts:716-725", + "src/platforms/android/__tests__/index.test.ts:698-707|src/platforms/ios/__tests__/index.test.ts:2253-2262", + "src/platforms/android/__tests__/index.test.ts:722-730|src/platforms/ios/__tests__/index.test.ts:1856-1864|src/platforms/ios/__tests__/index.test.ts:1928-1936|src/platforms/ios/__tests__/index.test.ts:2072-2080", + "src/platforms/android/__tests__/index.test.ts:744-759|src/platforms/ios/__tests__/index.test.ts:2287-2299", + "src/platforms/android/__tests__/index.test.ts:1419-1426|src/platforms/android/__tests__/index.test.ts:744-754|src/platforms/android/__tests__/index.test.ts:842-849|src/platforms/ios/__tests__/index.test.ts:2034-2041|src/platforms/ios/__tests__/index.test.ts:2287-2294|src/platforms/ios/__tests__/index.test.ts:586-593", + "src/platforms/android/__tests__/index.test.ts:764-773|src/platforms/ios/__tests__/index.test.ts:1893-1902|src/platforms/ios/__tests__/index.test.ts:2253-2262", + "src/platforms/android/__tests__/index.test.ts:842-854|src/platforms/ios/__tests__/index.test.ts:2034-2046", + "src/platforms/android/__tests__/index.test.ts:883-895|src/platforms/ios/__tests__/index.test.ts:973-985", + "src/platforms/android/__tests__/index.test.ts:1840-1899|src/platforms/android/__tests__/index.test.ts:1912-1947|src/platforms/android/__tests__/index.test.ts:896-934", + "src/platforms/android/__tests__/index.test.ts:1876-1910|src/platforms/android/__tests__/index.test.ts:922-945|src/platforms/ios/__tests__/index.test.ts:1514-1536|src/platforms/ios/__tests__/index.test.ts:816-838|src/platforms/ios/__tests__/index.test.ts:865-887", + "src/platforms/android/__tests__/index.test.ts:1419-1431|src/platforms/ios/__tests__/index.test.ts:2034-2046|src/platforms/ios/__tests__/index.test.ts:2287-2299", + "src/platforms/android/__tests__/index.test.ts:1479-1488|src/platforms/android/__tests__/index.test.ts:1506-1515", + "src/platforms/android/__tests__/index.test.ts:1705-1718|src/platforms/ios/__tests__/index.test.ts:2474-2484", + "src/platforms/android/__tests__/index.test.ts:1723-1734|src/platforms/ios/__tests__/index.test.ts:2474-2479", + "src/platforms/android/__tests__/index.test.ts:1768-1779|src/platforms/ios/__tests__/index.test.ts:2428-2440", + "src/platforms/android/__tests__/index.test.ts:1768-1781|src/platforms/android/__tests__/index.test.ts:1791-1803|src/platforms/ios/__tests__/index.test.ts:2195-2207", + "src/platforms/android/__tests__/index.test.ts:1840-1872|src/platforms/android/__tests__/index.test.ts:1912-1942", + "src/platforms/android/__tests__/scroll-hints.test.ts:59-99|src/platforms/android/__tests__/scroll-hints.test.ts:6-46", + "src/platforms/android/__tests__/scroll-hints.test.ts:149-168|src/platforms/android/__tests__/scroll-hints.test.ts:198-217|src/platforms/android/__tests__/scroll-hints.test.ts:59-78|src/platforms/android/__tests__/scroll-hints.test.ts:6-25", + "src/platforms/android/__tests__/scroll-hints.test.ts:112-131|src/platforms/android/__tests__/scroll-hints.test.ts:149-168|src/platforms/android/__tests__/scroll-hints.test.ts:198-217|src/platforms/android/__tests__/scroll-hints.test.ts:59-78|src/platforms/android/__tests__/scroll-hints.test.ts:6-25", + "src/platforms/android/__tests__/scroll-hints.test.ts:181-198|src/platforms/android/__tests__/scroll-hints.test.ts:45-59", + "src/platforms/android/__tests__/scroll-hints.test.ts:137-149|src/platforms/android/__tests__/scroll-hints.test.ts:98-112", + "src/platforms/android/__tests__/snapshot.test.ts:1-9|src/platforms/ios/__tests__/index.test.ts:1-9|src/platforms/ios/__tests__/perf.test.ts:1-9|src/platforms/ios/__tests__/plist.test.ts:1-9", + "src/platforms/android/__tests__/snapshot.test.ts:101-112|src/platforms/android/__tests__/snapshot.test.ts:121-132|src/platforms/android/__tests__/snapshot.test.ts:79-90", + "src/platforms/android/__tests__/snapshot.test.ts:113-121|src/platforms/android/__tests__/snapshot.test.ts:93-101", + "src/platforms/android/__tests__/snapshot.test.ts:113-121|src/platforms/android/__tests__/snapshot.test.ts:152-160", + "src/platforms/android/__tests__/snapshot.test.ts:277-291|src/platforms/android/__tests__/snapshot.test.ts:305-319", + "src/platforms/android/__tests__/snapshot.test.ts:342-356|src/platforms/android/__tests__/snapshot.test.ts:473-488", + "src/platforms/android/__tests__/snapshot.test.ts:350-359|src/platforms/android/__tests__/snapshot.test.ts:438-447", + "src/platforms/android/__tests__/snapshot.test.ts:363-389|src/platforms/android/__tests__/snapshot.test.ts:420-444", + "src/platforms/android/__tests__/snapshot.test.ts:363-382|src/platforms/android/__tests__/snapshot.test.ts:396-410|src/platforms/android/__tests__/snapshot.test.ts:420-439", + "src/platforms/android/perf.ts:66-74|src/platforms/ios/perf.ts:133-139", + "src/platforms/android/settings.ts:137-148|src/platforms/ios/apps.ts:771-782", + "src/platforms/android/settings.ts:194-202|src/platforms/ios/apps.ts:509-516", + "src/platforms/ios/__tests__/devices.test.ts:123-140|src/platforms/ios/__tests__/devices.test.ts:176-196", + "src/platforms/ios/__tests__/devices.test.ts:151-160|src/platforms/ios/__tests__/devices.test.ts:207-216", + "src/platforms/ios/__tests__/index.test.ts:1-10|src/platforms/ios/__tests__/perf.test.ts:1-10|src/platforms/ios/__tests__/plist.test.ts:1-10", + "src/platforms/ios/__tests__/index.test.ts:288-298|src/platforms/ios/__tests__/index.test.ts:313-324", + "src/platforms/ios/__tests__/index.test.ts:385-403|src/platforms/ios/__tests__/index.test.ts:427-445", + "src/platforms/ios/__tests__/index.test.ts:385-391|src/platforms/ios/__tests__/index.test.ts:427-433|src/platforms/ios/__tests__/index.test.ts:510-516", + "src/platforms/ios/__tests__/index.test.ts:417-427|src/platforms/ios/__tests__/index.test.ts:500-510", + "src/platforms/ios/__tests__/index.test.ts:418-426|src/platforms/ios/__tests__/index.test.ts:501-509|src/platforms/ios/__tests__/index.test.ts:546-554", + "src/platforms/ios/__tests__/index.test.ts:454-468|src/platforms/ios/__tests__/index.test.ts:470-484", + "src/platforms/ios/__tests__/index.test.ts:1444-1455|src/platforms/ios/__tests__/index.test.ts:1476-1487|src/platforms/ios/__tests__/index.test.ts:589-601", + "src/platforms/ios/__tests__/index.test.ts:603-637|src/platforms/ios/__tests__/index.test.ts:646-671", + "src/platforms/ios/__tests__/index.test.ts:1488-1512|src/platforms/ios/__tests__/index.test.ts:790-814|src/platforms/ios/__tests__/index.test.ts:839-863", + "src/platforms/ios/__tests__/index.test.ts:1071-1083|src/platforms/ios/__tests__/index.test.ts:2162-2183", + "src/platforms/ios/__tests__/index.test.ts:1098-1123|src/platforms/ios/__tests__/index.test.ts:1154-1188", + "src/platforms/ios/__tests__/index.test.ts:1198-1209|src/platforms/ios/__tests__/index.test.ts:1337-1349", + "src/platforms/ios/__tests__/index.test.ts:1210-1218|src/platforms/ios/__tests__/index.test.ts:1372-1380", + "src/platforms/ios/__tests__/index.test.ts:1233-1245|src/platforms/ios/__tests__/index.test.ts:1319-1331|src/platforms/ios/__tests__/index.test.ts:1386-1398|src/platforms/ios/__tests__/index.test.ts:1524-1536", + "src/platforms/ios/__tests__/index.test.ts:1246-1251|src/platforms/ios/__tests__/index.test.ts:1333-1339", + "src/platforms/ios/__tests__/index.test.ts:1297-1320|src/platforms/ios/__tests__/index.test.ts:1367-1387", + "src/platforms/ios/__tests__/index.test.ts:1319-1331|src/platforms/ios/__tests__/index.test.ts:1386-1398", + "src/platforms/ios/__tests__/index.test.ts:1344-1374|src/platforms/ios/__tests__/index.test.ts:1408-1436", + "src/platforms/ios/__tests__/index.test.ts:1434-1444|src/platforms/ios/__tests__/index.test.ts:1467-1477", + "src/platforms/ios/__tests__/index.test.ts:1440-1448|src/platforms/ios/__tests__/index.test.ts:2209-2220", + "src/platforms/ios/__tests__/index.test.ts:1680-1696|src/platforms/ios/__tests__/index.test.ts:1721-1737", + "src/platforms/ios/__tests__/index.test.ts:1832-1859|src/platforms/ios/__tests__/index.test.ts:1866-1896", + "src/platforms/ios/__tests__/index.test.ts:1856-1864|src/platforms/ios/__tests__/index.test.ts:1928-1936", + "src/platforms/ios/__tests__/index.test.ts:1893-1897|src/platforms/ios/__tests__/index.test.ts:1968-1972", + "src/platforms/ios/__tests__/index.test.ts:1904-1931|src/platforms/ios/__tests__/index.test.ts:1938-1971", + "src/platforms/ios/__tests__/index.test.ts:1980-2003|src/platforms/ios/__tests__/index.test.ts:2014-2037", + "src/platforms/ios/__tests__/index.test.ts:2088-2099|src/platforms/ios/__tests__/index.test.ts:2132-2143", + "src/platforms/ios/__tests__/index.test.ts:2100-2110|src/platforms/ios/__tests__/index.test.ts:2145-2155", + "src/platforms/ios/__tests__/index.test.ts:2526-2540|src/platforms/ios/__tests__/index.test.ts:2582-2593", + "src/platforms/ios/__tests__/perf.test.ts:1-12|src/platforms/ios/__tests__/plist.test.ts:1-12", + "src/platforms/ios/__tests__/runner-client.test.ts:470-474|src/platforms/ios/__tests__/runner-client.test.ts:494-498|src/platforms/ios/__tests__/runner-client.test.ts:528-532", + "src/platforms/ios/__tests__/runner-client.test.ts:474-491|src/platforms/ios/__tests__/runner-client.test.ts:505-525", + "src/platforms/ios/__tests__/runner-client.test.ts:494-501|src/platforms/ios/__tests__/runner-client.test.ts:528-533", + "src/platforms/ios/__tests__/runner-client.test.ts:591-599|src/platforms/ios/__tests__/runner-client.test.ts:652-660", + "src/platforms/ios/__tests__/runner-xctestrun.test.ts:108-114|src/platforms/ios/__tests__/runner-xctestrun.test.ts:198-204", + "src/platforms/ios/__tests__/runner-xctestrun.test.ts:118-129|src/platforms/ios/__tests__/runner-xctestrun.test.ts:209-222", + "src/platforms/ios/apps.ts:56-63|src/platforms/ios/screenshot-status-bar.ts:49-61", + "src/platforms/ios/apps.ts:58-63|src/platforms/ios/screenshot.ts:23-28", + "src/platforms/ios/apps.ts:92-157|src/platforms/ios/macos-apps.ts:64-96", + "src/platforms/ios/devicectl.ts:128-140|src/platforms/ios/devicectl.ts:80-92", + "src/platforms/ios/macos-helper.ts:274-298|src/platforms/ios/macos-helper.ts:327-353", + "src/platforms/ios/runner-xctestrun.ts:647-655|src/utils/version.ts:17-25", + "src/platforms/ios/screenshot-status-bar.ts:236-261|src/platforms/ios/screenshot.ts:371-396", + "src/platforms/linux/__tests__/atspi-bridge.test.ts:1-9|src/platforms/linux/__tests__/clipboard.test.ts:1-9|src/platforms/linux/__tests__/input-actions.test.ts:1-9", + "src/platforms/linux/__tests__/atspi-bridge.test.ts:113-120|src/platforms/linux/__tests__/atspi-bridge.test.ts:131-138", + "src/platforms/linux/__tests__/atspi-bridge.test.ts:145-156|src/platforms/linux/__tests__/atspi-bridge.test.ts:163-174|src/platforms/linux/__tests__/atspi-bridge.test.ts:181-194", + "src/platforms/linux/__tests__/atspi-bridge.test.ts:166-174|src/platforms/linux/__tests__/atspi-bridge.test.ts:186-194", + "src/platforms/linux/__tests__/clipboard.test.ts:1-10|src/platforms/linux/__tests__/input-actions.test.ts:1-10", + "src/platforms/linux/__tests__/clipboard.test.ts:109-117|src/platforms/linux/__tests__/clipboard.test.ts:72-80", + "src/platforms/linux/__tests__/input-actions.test.ts:196-206|src/platforms/linux/__tests__/input-actions.test.ts:76-84", + "src/remote-config-schema.ts:21-34|src/utils/command-schema.ts:35-48", + "src/utils/__tests__/args.test.ts:746-761|src/utils/__tests__/args.test.ts:764-776|src/utils/__tests__/args.test.ts:786-804", + "src/utils/__tests__/args.test.ts:747-764|src/utils/__tests__/args.test.ts:800-814", + "src/utils/__tests__/args.test.ts:764-777|src/utils/__tests__/args.test.ts:786-805", + "src/utils/__tests__/args.test.ts:1000-1005|src/utils/__tests__/args.test.ts:986-991", + "src/utils/__tests__/args.test.ts:1012-1017|src/utils/__tests__/args.test.ts:995-1003", + "src/utils/__tests__/args.test.ts:1010-1016|src/utils/__tests__/args.test.ts:1044-1050", + "src/utils/__tests__/args.test.ts:1013-1020|src/utils/__tests__/args.test.ts:1046-1053", + "src/utils/__tests__/args.test.ts:1054-1061|src/utils/__tests__/args.test.ts:1069-1079|src/utils/__tests__/args.test.ts:1080-1087", + "src/utils/__tests__/daemon-client.test.ts:124-143|src/utils/__tests__/daemon-client.test.ts:700-719|src/utils/__tests__/daemon-client.test.ts:781-800", + "src/utils/__tests__/daemon-client.test.ts:124-142|src/utils/__tests__/daemon-client.test.ts:223-241|src/utils/__tests__/daemon-client.test.ts:368-386|src/utils/__tests__/daemon-client.test.ts:700-718|src/utils/__tests__/daemon-client.test.ts:781-799", + "src/utils/__tests__/daemon-client.test.ts:145-155|src/utils/__tests__/daemon-client.test.ts:719-729|src/utils/__tests__/daemon-client.test.ts:800-810", + "src/utils/__tests__/daemon-client.test.ts:146-159|src/utils/__tests__/daemon-client.test.ts:388-401", + "src/utils/__tests__/daemon-client.test.ts:163-176|src/utils/__tests__/daemon-client.test.ts:403-416", + "src/utils/__tests__/daemon-client.test.ts:177-197|src/utils/__tests__/daemon-client.test.ts:740-760|src/utils/__tests__/daemon-client.test.ts:821-841", + "src/utils/__tests__/daemon-client.test.ts:179-201|src/utils/__tests__/daemon-client.test.ts:265-304|src/utils/__tests__/daemon-client.test.ts:419-439|src/utils/__tests__/daemon-client.test.ts:742-764|src/utils/__tests__/daemon-client.test.ts:823-854", + "src/utils/__tests__/daemon-client.test.ts:212-222|src/utils/__tests__/daemon-client.test.ts:357-367|src/utils/__tests__/daemon-client.test.ts:460-470|src/utils/__tests__/daemon-client.test.ts:769-779|src/utils/__tests__/daemon-client.test.ts:895-905", + "src/utils/__tests__/daemon-client.test.ts:242-255|src/utils/__tests__/daemon-client.test.ts:720-733|src/utils/__tests__/daemon-client.test.ts:801-814", + "src/utils/__tests__/daemon-client.test.ts:368-386|src/utils/__tests__/daemon-client.test.ts:700-718|src/utils/__tests__/daemon-client.test.ts:781-799", + "src/utils/__tests__/daemon-client.test.ts:506-518|src/utils/__tests__/daemon-client.test.ts:532-544", + "src/utils/__tests__/daemon-client.test.ts:544-559|src/utils/__tests__/daemon-client.test.ts:905-920", + "src/utils/__tests__/daemon-client.test.ts:1077-1111|src/utils/__tests__/daemon-client.test.ts:566-600", + "src/utils/__tests__/daemon-client.test.ts:599-608|src/utils/__tests__/daemon-client.test.ts:719-728|src/utils/__tests__/daemon-client.test.ts:800-809", + "src/utils/__tests__/daemon-client.test.ts:609-620|src/utils/__tests__/daemon-client.test.ts:962-972", + "src/utils/__tests__/daemon-client.test.ts:1151-1174|src/utils/__tests__/daemon-client.test.ts:638-660", + "src/utils/__tests__/daemon-client.test.ts:1011-1020|src/utils/__tests__/daemon-client.test.ts:660-669", + "src/utils/__tests__/daemon-client.test.ts:1023-1043|src/utils/__tests__/daemon-client.test.ts:672-686", + "src/utils/__tests__/daemon-client.test.ts:1047-1058|src/utils/__tests__/daemon-client.test.ts:1210-1222|src/utils/__tests__/daemon-client.test.ts:687-698", + "src/utils/__tests__/daemon-client.test.ts:698-739|src/utils/__tests__/daemon-client.test.ts:779-820", + "src/utils/__tests__/daemon-client.test.ts:768-779|src/utils/__tests__/daemon-client.test.ts:894-905", + "src/utils/__tests__/daemon-client.test.ts:1059-1101|src/utils/__tests__/daemon-client.test.ts:908-951", + "src/utils/__tests__/daemon-client.test.ts:1154-1174|src/utils/__tests__/daemon-client.test.ts:991-1011", + "src/utils/__tests__/device.test.ts:63-69|src/utils/__tests__/device.test.ts:96-100", + "src/utils/__tests__/device.test.ts:76-83|src/utils/__tests__/device.test.ts:85-94", + "src/utils/__tests__/device.test.ts:161-170|src/utils/__tests__/device.test.ts:214-223", + "src/utils/__tests__/device.test.ts:173-189|src/utils/__tests__/device.test.ts:195-210", + "src/utils/__tests__/mobile-snapshot-semantics.test.ts:338-353|src/utils/__tests__/mobile-snapshot-semantics.test.ts:86-101", + "src/utils/__tests__/mobile-snapshot-semantics.test.ts:153-172|src/utils/__tests__/mobile-snapshot-semantics.test.ts:179-197", + "src/utils/__tests__/mobile-snapshot-semantics.test.ts:284-309|src/utils/__tests__/mobile-snapshot-semantics.test.ts:320-345", + "src/utils/__tests__/mobile-snapshot-semantics.test.ts:310-316|src/utils/__tests__/mobile-snapshot-semantics.test.ts:346-352", + "src/utils/__tests__/output.test.ts:25-30|src/utils/__tests__/output.test.ts:765-771", + "src/utils/__tests__/output.test.ts:30-39|src/utils/__tests__/output.test.ts:51-60", + "src/utils/__tests__/output.test.ts:328-341|src/utils/__tests__/output.test.ts:83-95", + "src/utils/__tests__/output.test.ts:238-245|src/utils/__tests__/output.test.ts:488-493", + "src/utils/__tests__/output.test.ts:298-319|src/utils/__tests__/output.test.ts:376-398", + "src/utils/__tests__/output.test.ts:298-316|src/utils/__tests__/output.test.ts:376-395|src/utils/__tests__/output.test.ts:433-451", + "src/utils/__tests__/output.test.ts:327-338|src/utils/__tests__/output.test.ts:480-491", + "src/utils/__tests__/output.test.ts:568-578|src/utils/__tests__/output.test.ts:586-596", + "src/utils/__tests__/output.test.ts:619-628|src/utils/__tests__/output.test.ts:634-643", + "src/utils/__tests__/png.test.ts:19-27|src/utils/__tests__/png.test.ts:50-58", + "src/utils/__tests__/screenshot-diff.test.ts:46-53|src/utils/__tests__/screenshot-diff.test.ts:67-74", + "src/utils/__tests__/screenshot-diff.test.ts:46-52|src/utils/__tests__/screenshot-diff.test.ts:67-73|src/utils/__tests__/screenshot-diff.test.ts:83-89", + "src/utils/__tests__/screenshot-diff.test.ts:282-288|src/utils/__tests__/screenshot-diff.test.ts:46-52|src/utils/__tests__/screenshot-diff.test.ts:67-73|src/utils/__tests__/screenshot-diff.test.ts:83-89", + "src/utils/__tests__/screenshot-diff.test.ts:104-110|src/utils/__tests__/screenshot-diff.test.ts:282-288|src/utils/__tests__/screenshot-diff.test.ts:46-52|src/utils/__tests__/screenshot-diff.test.ts:67-73|src/utils/__tests__/screenshot-diff.test.ts:83-89", + "src/utils/__tests__/screenshot-diff.test.ts:104-108|src/utils/__tests__/screenshot-diff.test.ts:227-231|src/utils/__tests__/screenshot-diff.test.ts:282-286|src/utils/__tests__/screenshot-diff.test.ts:46-50|src/utils/__tests__/screenshot-diff.test.ts:67-71|src/utils/__tests__/screenshot-diff.test.ts:83-87", + "src/utils/__tests__/screenshot-diff.test.ts:216-221|src/utils/__tests__/screenshot-diff.test.ts:87-95", + "src/utils/__tests__/screenshot-diff.test.ts:112-119|src/utils/__tests__/screenshot-diff.test.ts:160-167|src/utils/__tests__/screenshot-diff.test.ts:192-199", + "src/utils/__tests__/screenshot-diff.test.ts:153-168|src/utils/__tests__/screenshot-diff.test.ts:185-200", + "src/utils/__tests__/screenshot-diff.test.ts:169-177|src/utils/__tests__/screenshot-diff.test.ts:201-209", + "src/utils/__tests__/screenshot-diff.test.ts:169-177|src/utils/__tests__/screenshot-diff.test.ts:201-209|src/utils/__tests__/screenshot-diff.test.ts:399-407", + "src/utils/exec.ts:277-287|src/utils/exec.ts:45-55", + "src/utils/exec.ts:292-315|src/utils/exec.ts:59-82", + "src/utils/exec.ts:326-429|src/utils/exec.ts:89-158", + "src/utils/exec.ts:379-426|test/scripts/metro-prepare-packaged-smoke.mjs:124-145", + "src/utils/mobile-snapshot-semantics.ts:287-294|src/utils/mobile-snapshot-semantics.ts:342-349", + "src/utils/parsing.ts:77-81|src/utils/parsing.ts:90-94", + "src/utils/screenshot-diff-non-text.ts:125-140|src/utils/screenshot-diff-regions.ts:97-119", + "src/utils/screenshot-diff-non-text.ts:151-161|src/utils/screenshot-diff-regions.ts:127-136", + "src/utils/screenshot-diff-non-text.ts:400-419|src/utils/screenshot-diff-ocr.ts:338-354", + "src/utils/screenshot-diff-non-text.ts:473-487|src/utils/screenshot-diff-overlay-matches.ts:55-66", + "src/utils/screenshot-diff-non-text.ts:489-499|src/utils/screenshot-diff-ocr.ts:352-363", + "test/integration/installed-package-metro.test.ts:14-21|test/integration/smoke-open-remote-config.test.ts:102-109", + "test/integration/installed-package-metro.test.ts:28-35|test/integration/smoke-open-remote-config.test.ts:115-122", + "test/integration/recording-overlay.test.ts:126-133|test/integration/recording-overlay.test.ts:158-165|test/integration/recording-overlay.test.ts:30-37|test/integration/recording-overlay.test.ts:58-65|test/integration/recording-overlay.test.ts:94-103", + "test/integration/recording-overlay.test.ts:125-133|test/integration/recording-overlay.test.ts:157-165", + "test/integration/smoke-daemon-http.test.ts:173-197|test/integration/smoke-open-remote-config.test.ts:78-99", + "test/integration/smoke-daemon-http.test.ts:208-216|test/integration/smoke-daemon-http.test.ts:292-300", + "test/integration/smoke-open-remote-config.test.ts:103-111|test/scripts/metro-prepare-packaged-smoke.mjs:66-74", + "test/integration/smoke-open-remote-config.test.ts:146-170|test/scripts/metro-prepare-packaged-smoke.mjs:200-214", + "test/scripts/metro-prepare-packaged-smoke.mjs:217-226|test/scripts/metro-prepare-packaged-smoke.mjs:245-254" + ] +} \ No newline at end of file diff --git a/fallow-baselines/health.json b/fallow-baselines/health.json new file mode 100644 index 000000000..75691b852 --- /dev/null +++ b/fallow-baselines/health.json @@ -0,0 +1,1110 @@ +{ + "finding_counts": { + "src/__tests__/cli-config.test.ts": { + "crap_high": { + "count": 1 + } + }, + "src/__tests__/client-companion-tunnel-worker.test.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "src/__tests__/client-metro-companion.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/__tests__/client.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/__tests__/runtime-diagnostics-router.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/__tests__/runtime-public.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/__tests__/upload-client.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/cli-test.ts": { + "crap_moderate": { + "count": 2 + } + }, + "src/cli.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/cli/auth-session.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/cli/commands/connection-runtime.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/cli/commands/connection.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/cli/commands/generic.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/cli/commands/output.ts": { + "complexity_critical": { + "count": 2 + }, + "complexity_high": { + "count": 2 + }, + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 2 + } + }, + "src/cli/commands/react-devtools.ts": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/client-commands.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/client-companion-tunnel-worker.ts": { + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 4 + } + }, + "src/client-companion-tunnel.ts": { + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/client-metro.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/client-shared.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/client.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/commands/admin.ts": { + "crap_high": { + "count": 1 + } + }, + "src/commands/capture-diff-screenshot.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/commands/capture-snapshot.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/commands/diagnostics-format.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/commands/diagnostics.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/commands/interaction-resolution.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/commands/system.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/contracts.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/core/batch.ts": { + "complexity_high": { + "count": 1 + } + }, + "src/core/dispatch-resolve.ts": { + "crap_high": { + "count": 1 + } + }, + "src/core/dispatch.ts": { + "complexity_critical": { + "count": 2 + }, + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 3 + }, + "crap_moderate": { + "count": 5 + } + }, + "src/daemon-client.ts": { + "complexity_critical": { + "count": 3 + }, + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 2 + }, + "crap_critical": { + "count": 3 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 4 + } + }, + "src/daemon.ts": { + "crap_critical": { + "count": 1 + } + }, + "src/daemon/__tests__/http-server.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/__tests__/network-log.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/android-snapshot-freshness.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/app-log.ts": { + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 1 + } + }, + "src/daemon/context.ts": { + "complexity_moderate": { + "count": 1 + } + }, + "src/daemon/device-ready.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/daemon/handlers/__tests__/interaction.test.ts": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 6 + } + }, + "src/daemon/handlers/__tests__/record-trace.test.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/__tests__/replay-heal.test.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "src/daemon/handlers/__tests__/session-close-shutdown.test.ts": { + "crap_moderate": { + "count": 2 + } + }, + "src/daemon/handlers/__tests__/session-open-runtime.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/__tests__/session-reinstall.test.ts": { + "crap_moderate": { + "count": 2 + } + }, + "src/daemon/handlers/__tests__/session-replay-vars.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/__tests__/session.test.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 5 + }, + "crap_moderate": { + "count": 12 + } + }, + "src/daemon/handlers/__tests__/snapshot-handler.test.ts": { + "crap_moderate": { + "count": 2 + } + }, + "src/daemon/handlers/find.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/install-source.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "src/daemon/handlers/interaction-common.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/interaction-touch-reference-frame.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/interaction-touch.ts": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "src/daemon/handlers/interaction.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/record-trace-recording.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/daemon/handlers/record-trace.ts": { + "complexity_high": { + "count": 1 + } + }, + "src/daemon/handlers/session-inventory.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/daemon/handlers/session-observability.ts": { + "crap_high": { + "count": 2 + } + }, + "src/daemon/handlers/session-open-surface.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/session-open.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 2 + } + }, + "src/daemon/handlers/session-perf.ts": { + "crap_high": { + "count": 1 + } + }, + "src/daemon/handlers/session-replay-heal.ts": { + "complexity_critical": { + "count": 2 + }, + "crap_critical": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/session-replay-runtime.ts": { + "complexity_high": { + "count": 2 + }, + "complexity_moderate": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/session-replay-script.ts": { + "complexity_critical": { + "count": 2 + }, + "complexity_high": { + "count": 2 + }, + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 1 + } + }, + "src/daemon/handlers/session-runtime.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/session-state.ts": { + "complexity_critical": { + "count": 2 + }, + "crap_critical": { + "count": 2 + } + }, + "src/daemon/handlers/session-test-artifacts.ts": { + "complexity_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/session-test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/handlers/session.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 2 + } + }, + "src/daemon/handlers/snapshot-alert.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/daemon/handlers/snapshot-capture.ts": { + "crap_moderate": { + "count": 3 + } + }, + "src/daemon/http-server.ts": { + "complexity_critical": { + "count": 1 + }, + "complexity_high": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 3 + } + }, + "src/daemon/install-source-resolution.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/network-log.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/daemon/recording-gestures.ts": { + "complexity_moderate": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/request-router.ts": { + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 4 + } + }, + "src/daemon/runtime-hints.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/screenshot-overlay.ts": { + "crap_moderate": { + "count": 2 + } + }, + "src/daemon/script-utils.ts": { + "complexity_high": { + "count": 2 + }, + "complexity_moderate": { + "count": 1 + } + }, + "src/daemon/selector-runtime.ts": { + "crap_moderate": { + "count": 3 + } + }, + "src/daemon/selectors-match.ts": { + "crap_high": { + "count": 1 + } + }, + "src/daemon/selectors-parse.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "src/daemon/selectors-resolve.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/daemon/server-lifecycle.ts": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 3 + } + }, + "src/daemon/session-selector.ts": { + "complexity_moderate": { + "count": 1 + } + }, + "src/daemon/session-store.ts": { + "complexity_critical": { + "count": 2 + }, + "crap_critical": { + "count": 2 + } + }, + "src/daemon/transport.ts": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/android/app-lifecycle.ts": { + "complexity_moderate": { + "count": 1 + } + }, + "src/platforms/android/app-parsers.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/android/device-input-state.ts": { + "crap_moderate": { + "count": 2 + } + }, + "src/platforms/android/input-actions.ts": { + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 1 + } + }, + "src/platforms/android/manifest.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/android/scroll-hints.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "src/platforms/android/settings.ts": { + "complexity_moderate": { + "count": 1 + } + }, + "src/platforms/android/snapshot.ts": { + "crap_moderate": { + "count": 2 + } + }, + "src/platforms/android/ui-hierarchy.ts": { + "complexity_critical": { + "count": 1 + }, + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/boot-diagnostics.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/platforms/install-source.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/ios/__tests__/index.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/ios/__tests__/perf.test.ts": { + "crap_high": { + "count": 1 + } + }, + "src/platforms/ios/apps.ts": { + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 2 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "src/platforms/ios/devices.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/ios/ensure-simulator.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/ios/interactions.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/platforms/ios/macos-helper.ts": { + "crap_high": { + "count": 1 + } + }, + "src/platforms/ios/perf.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "src/platforms/ios/runner-client.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/ios/runner-transport.ts": { + "crap_high": { + "count": 2 + } + }, + "src/platforms/ios/runner-xctestrun.ts": { + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 4 + }, + "crap_moderate": { + "count": 4 + } + }, + "src/platforms/ios/screenshot-status-bar.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 3 + } + }, + "src/platforms/ios/screenshot.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/ios/simulator.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/ios/xml.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/linux/atspi-bridge.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/platforms/linux/input-actions.ts": { + "complexity_high": { + "count": 1 + } + }, + "src/remote-config-core.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "src/remote-connection-state.ts": { + "crap_high": { + "count": 1 + } + }, + "src/upload-client.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/utils/__tests__/screenshot-diff.test.ts": { + "crap_high": { + "count": 1 + } + }, + "src/utils/args.ts": { + "complexity_critical": { + "count": 2 + }, + "complexity_high": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "src/utils/cli-config.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/utils/cli-option-schema.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/utils/device.ts": { + "complexity_moderate": { + "count": 1 + } + }, + "src/utils/exec.ts": { + "complexity_moderate": { + "count": 1 + } + }, + "src/utils/mobile-snapshot-semantics.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/utils/output.ts": { + "complexity_critical": { + "count": 1 + }, + "complexity_high": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/utils/retry.ts": { + "complexity_high": { + "count": 1 + } + }, + "src/utils/screenshot-diff-non-text.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 2 + } + }, + "src/utils/screenshot-diff-regions.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "src/utils/screenshot-diff.ts": { + "complexity_high": { + "count": 1 + } + }, + "src/utils/selector-build.ts": { + "complexity_high": { + "count": 1 + } + }, + "src/utils/selector-is-predicates.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/utils/session-binding.ts": { + "crap_moderate": { + "count": 1 + } + }, + "src/utils/snapshot-diff.ts": { + "complexity_moderate": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/utils/snapshot-lines.ts": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/utils/source-value.ts": { + "complexity_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "src/utils/text-surface.ts": { + "crap_high": { + "count": 1 + } + }, + "src/utils/update-check.ts": { + "crap_moderate": { + "count": 1 + } + }, + "test/integration/installed-package-metro.test.ts": { + "crap_moderate": { + "count": 2 + } + }, + "test/integration/recording-overlay.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "test/integration/smoke-daemon-http.test.ts": { + "crap_critical": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "test/integration/smoke-open-remote-config.test.ts": { + "crap_critical": { + "count": 2 + } + }, + "test/integration/test-helpers.ts": { + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 4 + } + }, + "test/scripts/metro-prepare-packaged-smoke.mjs": { + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + } + }, + "runtime_coverage_findings": [], + "target_keys": [ + "src/daemon/handlers/session.ts:complexity", + "src/daemon/handlers/snapshot-capture.ts:high impact", + "src/daemon/handlers/session-device-utils.ts:high impact", + "src/utils/process-identity.ts:high impact", + "src/cli.ts:complexity", + "src/client-shared.ts:high impact", + "src/daemon/handlers/session-replay-script.ts:complexity", + "src/commands/selector-read-utils.ts:high impact", + "src/utils/args.ts:high impact", + "src/daemon/config.ts:high impact", + "src/daemon/android-snapshot-freshness.ts:high impact", + "src/daemon/session-store.ts:complexity", + "src/platforms/boot-diagnostics.ts:complexity", + "src/cli/commands/connection-runtime.ts:complexity", + "src/daemon/handlers/session-replay-heal.ts:complexity", + "src/daemon/handlers/snapshot-alert.ts:complexity", + "src/cli/commands/connection.ts:untested risk", + "src/utils/snapshot-lines.ts:high impact", + "src/daemon/handlers/session-inventory.ts:complexity", + "src/utils/success-text.ts:high impact", + "src/daemon/handlers/install-source.ts:complexity", + "src/utils/output.ts:high impact", + "src/cli/commands/output.ts:complexity", + "src/daemon/script-utils.ts:high impact", + "src/utils/snapshot-processing.ts:high impact", + "src/daemon/handlers/session-open-target.ts:high impact", + "src/daemon/handlers/session-state.ts:complexity", + "src/daemon/handlers/session-open.ts:complexity", + "src/platforms/android/ui-hierarchy.ts:high impact", + "src/daemon/request-cancel.ts:high impact", + "src/utils/device.ts:high impact", + "src/platforms/android/input-actions.ts:complexity", + "src/daemon/app-log-process.ts:high impact", + "src/client-metro.ts:complexity", + "src/utils/selector-build.ts:high impact", + "src/platforms/ios/xml.ts:high impact", + "src/utils/keyed-lock.ts:high impact", + "src/utils/text-surface.ts:high impact", + "src/daemon/app-log-stream.ts:high impact", + "src/core/batch.ts:complexity", + "src/platforms/ios/runner-xctestrun.ts:complexity", + "src/cli-test.ts:untested risk", + "src/platforms/android/sdk.ts:high impact", + "src/utils/source-value.ts:high impact", + "src/utils/screenshot-diff-regions.ts:complexity", + "src/daemon/screenshot-overlay.ts:untested risk", + "src/utils/screenshot-diff-non-text.ts:complexity", + "src/__tests__/client-companion-tunnel-worker.test.ts:complexity" + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 35c35886a..6afe71583 100644 --- a/package.json +++ b/package.json @@ -76,10 +76,13 @@ "ad": "node bin/agent-device.mjs", "lint": "oxlint . --deny-warnings", "format": "oxfmt --write src test skills package.json tsconfig.json .oxlintrc.json .oxfmtrc.json", + "fallow": "fallow --summary", + "fallow:baseline": "(fallow dead-code --save-baseline fallow-baselines/dead-code.json --summary || true) && (fallow dupes --save-baseline fallow-baselines/dupes.json --summary || true) && (fallow health --save-baseline fallow-baselines/health.json --summary || true)", + "check:fallow": "fallow audit", "check:quick": "pnpm lint && pnpm typecheck", "check:tooling": "pnpm lint && pnpm typecheck && pnpm build", "check:unit": "pnpm test:unit && pnpm test:smoke", - "check": "pnpm check:tooling && pnpm check:unit", + "check": "pnpm check:tooling && pnpm check:fallow && pnpm check:unit", "prepack": "pnpm build:all", "typecheck": "tsc -p tsconfig.json", "test": "vitest run", @@ -136,14 +139,14 @@ "pngjs": "^7.0.0" }, "devDependencies": { - "@microsoft/api-extractor": "^7.58.1", + "vitest": "^4.1.2", "@rslib/core": "0.20.1", "@types/node": "^22.0.0", "@types/pngjs": "^6.0.5", + "fallow": "^2.52.0", "oxfmt": "^0.42.0", "oxlint": "^1.57.0", "typescript": "^6.0.2", - "vite": "^8.0.7", - "vitest": "^4.1.2" + "vite": "^8.0.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f2512171..cea6940cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,6 +30,9 @@ importers: '@types/pngjs': specifier: ^6.0.5 version: 6.0.5 + fallow: + specifier: ^2.52.0 + version: 2.52.0 oxfmt: specifier: ^0.42.0 version: 0.42.0 @@ -136,6 +139,46 @@ packages: '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@fallow-cli/darwin-arm64@2.52.0': + resolution: {integrity: sha512-pvWp2jn+LPfPqfKQOEd4PwC69Rb0g4gv95j38v6gkT8xXMEzrjgzZpijYojVPuWDeMYRSG1+01njghL72qJi+A==} + cpu: [arm64] + os: [darwin] + + '@fallow-cli/darwin-x64@2.52.0': + resolution: {integrity: sha512-Vo2xLC2EPcv+JervfbsP/Mzlhekjo1w3uMtryY+pULztHbH960srJscr8TFwRnoCYXdZjRtO2CXdZZ/7tuDbHA==} + cpu: [x64] + os: [darwin] + + '@fallow-cli/linux-arm64-gnu@2.52.0': + resolution: {integrity: sha512-AIBLQqlq7hlCFeLj+LyFNhXPNiyfSKl8HrAtj8azfCW+9h4IR0vXi6apRvbHE9/VCoHlMlZpDE/6528qUpTUNg==} + cpu: [arm64] + os: [linux] + + '@fallow-cli/linux-arm64-musl@2.52.0': + resolution: {integrity: sha512-x1a3LCFf+E9irw5Lkj1pT9GHRa6LfYg+w6SLqE8deZei6frtanqAeGKyD5d+24LzHF+TqlySlSQxnbBTMbl8AA==} + cpu: [arm64] + os: [linux] + + '@fallow-cli/linux-x64-gnu@2.52.0': + resolution: {integrity: sha512-JBezH1wC4CWrsnpkA5fdXwvbf6JIUKvZ9o9N855PVIwnmObj34KY+CvLZnlst4LassTAZk7NWy650OaJaiNWGg==} + cpu: [x64] + os: [linux] + + '@fallow-cli/linux-x64-musl@2.52.0': + resolution: {integrity: sha512-hv9Utb8oea+QJ526L7dl8qWexLYLwNsNLkSB8Ywb8+8q1oHXH3ORccEcxXEud/hjzHUHbjPcgqL36/CvLP02Xw==} + cpu: [x64] + os: [linux] + + '@fallow-cli/win32-arm64-msvc@2.52.0': + resolution: {integrity: sha512-uYT1WXu9lMIpBYfHqNNiULvTg+YgGxeCgfvMrRTO36LVrRXzdnKn5xeuYXx7CwjbQb9Zsu4PzHB++KC9ocGKiQ==} + cpu: [arm64] + os: [win32] + + '@fallow-cli/win32-x64-msvc@2.52.0': + resolution: {integrity: sha512-qJ2v+En5PLZidrsaapYUPuOUY2b1ZzbNlUbDg5Ly0Th8I2TaUpB8ZgKPWa3t+ISBfjbylmhrk1eLj0JFVEaEqw==} + cpu: [x64] + os: [win32] + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -1079,6 +1122,11 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fallow@2.52.0: + resolution: {integrity: sha512-yZNFqRODW42mnGKYz6RosZR2CNhNwdYkXKIGBARKWNMRGwn9E9jonXFZDB+czjPL6rDnthNRheIJpRhDvzAaUw==} + engines: {node: '>=16'} + hasBin: true + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2132,6 +2180,30 @@ snapshots: tslib: 2.8.1 optional: true + '@fallow-cli/darwin-arm64@2.52.0': + optional: true + + '@fallow-cli/darwin-x64@2.52.0': + optional: true + + '@fallow-cli/linux-arm64-gnu@2.52.0': + optional: true + + '@fallow-cli/linux-arm64-musl@2.52.0': + optional: true + + '@fallow-cli/linux-x64-gnu@2.52.0': + optional: true + + '@fallow-cli/linux-x64-musl@2.52.0': + optional: true + + '@fallow-cli/win32-arm64-msvc@2.52.0': + optional: true + + '@fallow-cli/win32-x64-msvc@2.52.0': + optional: true + '@jridgewell/sourcemap-codec@1.5.5': {} '@mdx-js/mdx@3.1.1': @@ -2990,6 +3062,19 @@ snapshots: extend@3.0.2: {} + fallow@2.52.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + '@fallow-cli/darwin-arm64': 2.52.0 + '@fallow-cli/darwin-x64': 2.52.0 + '@fallow-cli/linux-arm64-gnu': 2.52.0 + '@fallow-cli/linux-arm64-musl': 2.52.0 + '@fallow-cli/linux-x64-gnu': 2.52.0 + '@fallow-cli/linux-x64-musl': 2.52.0 + '@fallow-cli/win32-arm64-msvc': 2.52.0 + '@fallow-cli/win32-x64-msvc': 2.52.0 + fast-deep-equal@3.1.3: {} fast-uri@3.1.0: {} diff --git a/src/__tests__/test-utils/index.ts b/src/__tests__/test-utils/index.ts index bc6fbc000..95e0dd515 100644 --- a/src/__tests__/test-utils/index.ts +++ b/src/__tests__/test-utils/index.ts @@ -15,8 +15,4 @@ export { makeSession, } from './session-factories.ts'; -export { makeSessionStore } from './store-factory.ts'; - -export { buildNodes, makeSnapshotState } from './snapshot-builders.ts'; - -export { withMockedAdb, withMockedXcrun } from './mocked-binaries.ts'; +export { makeSnapshotState } from './snapshot-builders.ts'; diff --git a/src/backend.ts b/src/backend.ts index 151ecba1d..5158b6ef2 100644 --- a/src/backend.ts +++ b/src/backend.ts @@ -432,7 +432,7 @@ export type BackendEscapeHatches = { ): Promise; }; -export const BACKEND_CAPABILITY_ESCAPE_HATCH_METHODS = { +const BACKEND_CAPABILITY_ESCAPE_HATCH_METHODS = { 'android.shell': 'androidShell', 'ios.runnerCommand': 'iosRunnerCommand', 'macos.desktopScreenshot': 'macosDesktopScreenshot', diff --git a/src/cli-test.ts b/src/cli-test.ts index 87a44030d..325a88ef5 100644 --- a/src/cli-test.ts +++ b/src/cli-test.ts @@ -102,7 +102,7 @@ function isFlakyReplayTestResult( return result.status === 'passed' && result.attempts > 1; } -export function getReplayTestExitCode(data: ReplaySuiteResult): number { +function getReplayTestExitCode(data: ReplaySuiteResult): number { return data.failed > 0 ? 1 : 0; } diff --git a/src/cli/commands/connection-runtime.ts b/src/cli/commands/connection-runtime.ts index 30a8c17d9..9389031a5 100644 --- a/src/cli/commands/connection-runtime.ts +++ b/src/cli/commands/connection-runtime.ts @@ -170,7 +170,7 @@ export async function materializeRemoteConnectionForCommand(options: { }; } -export async function prepareConnectedMetro( +async function prepareConnectedMetro( flags: CliFlags, client: AgentDeviceClient, remoteConfigPath: string, diff --git a/src/cli/commands/output.ts b/src/cli/commands/output.ts index 848fcfa63..1b537d09c 100644 --- a/src/cli/commands/output.ts +++ b/src/cli/commands/output.ts @@ -5,7 +5,7 @@ import { printJson } from '../../utils/output.ts'; import { renderReplayTestResponse } from '../../cli-test.ts'; import type { ReplaySuiteResult } from '../../daemon/types.ts'; -export function renderBatchSummary(data: Record): void { +function renderBatchSummary(data: Record): void { const total = typeof data.total === 'number' ? data.total : 0; const executed = typeof data.executed === 'number' ? data.executed : 0; const durationMs = typeof data.totalDurationMs === 'number' ? data.totalDurationMs : undefined; diff --git a/src/cli/commands/react-devtools.ts b/src/cli/commands/react-devtools.ts index f30dc6be9..838a89f1e 100644 --- a/src/cli/commands/react-devtools.ts +++ b/src/cli/commands/react-devtools.ts @@ -6,7 +6,7 @@ import { import { AppError } from '../../utils/errors.ts'; import type { CliFlags } from '../../utils/command-schema.ts'; -export const AGENT_REACT_DEVTOOLS_VERSION = '0.4.0'; +const AGENT_REACT_DEVTOOLS_VERSION = '0.4.0'; export const AGENT_REACT_DEVTOOLS_PACKAGE = `agent-react-devtools@${AGENT_REACT_DEVTOOLS_VERSION}`; const AGENT_REACT_DEVTOOLS_BIN = 'agent-react-devtools'; diff --git a/src/client-companion-tunnel-worker.ts b/src/client-companion-tunnel-worker.ts index 168a4498b..7b5d2d67d 100644 --- a/src/client-companion-tunnel-worker.ts +++ b/src/client-companion-tunnel-worker.ts @@ -342,9 +342,7 @@ async function handleBridgeMessage( } } -export async function runCompanionTunnelWorker( - options: CompanionTunnelWorkerOptions, -): Promise { +async function runCompanionTunnelWorker(options: CompanionTunnelWorkerOptions): Promise { const upstreamSockets = new Map(); let shutdownRequested = false; let activeBridgeSocket: WebSocket | null = null; diff --git a/src/client-companion-tunnel.ts b/src/client-companion-tunnel.ts index 3209be9fb..8068e4146 100644 --- a/src/client-companion-tunnel.ts +++ b/src/client-companion-tunnel.ts @@ -114,7 +114,7 @@ function areCompanionScopesEqual(a: CompanionTunnelScope, b: CompanionTunnelScop return a.tenantId === b.tenantId && a.runId === b.runId && a.leaseId === b.leaseId; } -export function resolveCompanionTunnelPaths( +function resolveCompanionTunnelPaths( projectRoot: string, definition: CompanionTunnelDefinition, profileKey?: string, diff --git a/src/client-normalizers.ts b/src/client-normalizers.ts index f6dbb40ed..31789981e 100644 --- a/src/client-normalizers.ts +++ b/src/client-normalizers.ts @@ -30,7 +30,7 @@ import { export { readNullableString, readOptionalString, readRequiredString } from './utils/parsing.ts'; -export const DEFAULT_SESSION_NAME = 'default'; +const DEFAULT_SESSION_NAME = 'default'; export function normalizeDeployResult( data: Record, diff --git a/src/client-react-devtools-companion.ts b/src/client-react-devtools-companion.ts index 522f86698..4f76c54d0 100644 --- a/src/client-react-devtools-companion.ts +++ b/src/client-react-devtools-companion.ts @@ -9,10 +9,10 @@ import { type CompanionTunnelScope, } from './client-companion-tunnel-contract.ts'; -export const REACT_DEVTOOLS_LOCAL_BASE_URL = 'http://127.0.0.1:8097'; -export const REACT_DEVTOOLS_DEVICE_PORT = 8097; -export const REACT_DEVTOOLS_REGISTER_PATH = '/api/react-devtools/companion/register'; -export const REACT_DEVTOOLS_UNREGISTER_PATH = '/api/react-devtools/companion/unregister'; +const REACT_DEVTOOLS_LOCAL_BASE_URL = 'http://127.0.0.1:8097'; +const REACT_DEVTOOLS_DEVICE_PORT = 8097; +const REACT_DEVTOOLS_REGISTER_PATH = '/api/react-devtools/companion/register'; +const REACT_DEVTOOLS_UNREGISTER_PATH = '/api/react-devtools/companion/unregister'; const REACT_DEVTOOLS_COMPANION_TUNNEL: CompanionTunnelDefinition = { slug: 'react-devtools-companion', diff --git a/src/client-shared.ts b/src/client-shared.ts index 48a687e88..a1e0a2f5f 100644 --- a/src/client-shared.ts +++ b/src/client-shared.ts @@ -41,7 +41,7 @@ export function buildDeviceIdentifiers( }; } -export function serializeSessionDevice( +function serializeSessionDevice( device: AgentDeviceSessionDevice, options: { includeAndroidSerial?: boolean } = {}, ): Record { diff --git a/src/commands/interaction-targeting.ts b/src/commands/interaction-targeting.ts index 039256c4c..ab4b4e379 100644 --- a/src/commands/interaction-targeting.ts +++ b/src/commands/interaction-targeting.ts @@ -2,6 +2,7 @@ import type { Rect, SnapshotNode } from '../utils/snapshot.ts'; import { centerOfRect } from '../utils/snapshot.ts'; import { containsPoint, pickLargestRect } from '../utils/rect-visibility.ts'; import { findNearestHittableAncestor } from '../utils/snapshot-processing.ts'; +import { normalizeRect, resolveRectCenter } from '../utils/rect-center.ts'; export function resolveActionableTouchNode( nodes: SnapshotNode[], @@ -21,32 +22,6 @@ export function resolveActionableTouchNode( return node; } -function resolveRectCenter(rect: Rect | undefined): { x: number; y: number } | null { - const normalized = normalizeRect(rect); - if (!normalized) return null; - const center = centerOfRect(normalized); - if (!Number.isFinite(center.x) || !Number.isFinite(center.y)) return null; - return center; -} - -function normalizeRect(rect: Rect | undefined): Rect | null { - if (!rect) return null; - const x = Number(rect.x); - const y = Number(rect.y); - const width = Number(rect.width); - const height = Number(rect.height); - if ( - !Number.isFinite(x) || - !Number.isFinite(y) || - !Number.isFinite(width) || - !Number.isFinite(height) - ) { - return null; - } - if (width < 0 || height < 0) return null; - return { x, y, width, height }; -} - function findPreferredActionableDescendant( nodes: SnapshotNode[], node: SnapshotNode, diff --git a/src/core/dispatch-resolve.ts b/src/core/dispatch-resolve.ts index 545dea379..461fc7dbf 100644 --- a/src/core/dispatch-resolve.ts +++ b/src/core/dispatch-resolve.ts @@ -43,7 +43,7 @@ type AppleDeviceSelector = { * * Exported for testing; production callers should use `resolveTargetDevice`. */ -export async function resolveAppleDevice( +async function resolveAppleDevice( devices: DeviceInfo[], selector: AppleDeviceSelector, context: { simulatorSetPath?: string }, diff --git a/src/core/settings-contract.ts b/src/core/settings-contract.ts index 6bf08651d..b34235e7c 100644 --- a/src/core/settings-contract.ts +++ b/src/core/settings-contract.ts @@ -1,14 +1,14 @@ -export const SETTINGS_WIFI_USAGE = ' '; -export const SETTINGS_ANIMATIONS_USAGE = 'animations '; -export const SETTINGS_APPEARANCE_USAGE = 'appearance '; -export const SETTINGS_FACEID_USAGE = 'faceid '; -export const SETTINGS_TOUCHID_USAGE = 'touchid '; -export const SETTINGS_FINGERPRINT_USAGE = 'fingerprint '; -export const SETTINGS_PERMISSION_USAGE = +const SETTINGS_WIFI_USAGE = ' '; +const SETTINGS_ANIMATIONS_USAGE = 'animations '; +const SETTINGS_APPEARANCE_USAGE = 'appearance '; +const SETTINGS_FACEID_USAGE = 'faceid '; +const SETTINGS_TOUCHID_USAGE = 'touchid '; +const SETTINGS_FINGERPRINT_USAGE = 'fingerprint '; +const SETTINGS_PERMISSION_USAGE = 'permission [full|limited]'; -export const SETTINGS_MACOS_PERMISSION_USAGE = +const SETTINGS_MACOS_PERMISSION_USAGE = 'permission '; -export const SETTINGS_MACOS_SUPPORTED_MESSAGE = `macOS supports only settings ${SETTINGS_APPEARANCE_USAGE} and settings ${SETTINGS_MACOS_PERMISSION_USAGE}. wifi|airplane|location|animations remain unsupported on macOS.`; +const SETTINGS_MACOS_SUPPORTED_MESSAGE = `macOS supports only settings ${SETTINGS_APPEARANCE_USAGE} and settings ${SETTINGS_MACOS_PERMISSION_USAGE}. wifi|airplane|location|animations remain unsupported on macOS.`; export const SETTINGS_USAGE_OVERRIDE = [ `settings ${SETTINGS_WIFI_USAGE}`, diff --git a/src/daemon/config.ts b/src/daemon/config.ts index 4623659e6..51571f5f7 100644 --- a/src/daemon/config.ts +++ b/src/daemon/config.ts @@ -24,7 +24,7 @@ export function resolveDaemonPaths(stateDir: string | undefined): DaemonPaths { }; } -export function resolveStateDir(raw: string | undefined): string { +function resolveStateDir(raw: string | undefined): string { const value = (raw ?? '').trim(); if (!value) { return path.join(expandUserHomePath('~'), '.agent-device'); diff --git a/src/daemon/handlers/handler-utils.ts b/src/daemon/handlers/handler-utils.ts index 02d73be4d..c386479f6 100644 --- a/src/daemon/handlers/handler-utils.ts +++ b/src/daemon/handlers/handler-utils.ts @@ -25,7 +25,7 @@ export function recordSessionAction( * Flag keys inherited from a parent request (batch/replay) into child step flags. * Shared between batch and replay so the inheritance rules stay in sync. */ -export const INHERITED_PARENT_FLAG_KEYS: ReadonlyArray = [ +const INHERITED_PARENT_FLAG_KEYS: ReadonlyArray = [ 'platform', 'target', 'device', diff --git a/src/daemon/handlers/interaction-targeting.ts b/src/daemon/handlers/interaction-targeting.ts index 04cd9f133..ec8c8d8c8 100644 --- a/src/daemon/handlers/interaction-targeting.ts +++ b/src/daemon/handlers/interaction-targeting.ts @@ -1,13 +1,4 @@ -import { - centerOfRect, - findNodeByRef, - normalizeRef, - type Rect, - type SnapshotNode, -} from '../../utils/snapshot.ts'; -import { findNodeByLabel } from '../snapshot-processing.ts'; -import type { SessionState } from '../types.ts'; -import { errorResponse, type DaemonFailureResponse } from './response.ts'; +import { resolveRectCenter } from '../../utils/rect-center.ts'; export function parseCoordinateTarget(positionals: string[]): { x: number; y: number } | null { if (positionals.length < 2) return null; @@ -17,57 +8,4 @@ export function parseCoordinateTarget(positionals: string[]): { x: number; y: nu return { x, y }; } -export function resolveRefTarget(params: { - session: SessionState; - refInput: string; - fallbackLabel: string; - requireRect: boolean; - invalidRefMessage: string; - notFoundMessage: string; -}): - | { ok: true; target: { ref: string; node: SnapshotNode; snapshotNodes: SnapshotNode[] } } - | DaemonFailureResponse { - const { session, refInput, fallbackLabel, requireRect, invalidRefMessage, notFoundMessage } = - params; - if (!session.snapshot) { - return errorResponse('INVALID_ARGS', 'No snapshot in session. Run snapshot first.'); - } - const ref = normalizeRef(refInput); - if (!ref) { - return errorResponse('INVALID_ARGS', invalidRefMessage); - } - let node = findNodeByRef(session.snapshot.nodes, ref); - if ((!node || (requireRect && !node.rect)) && fallbackLabel.length > 0) { - node = findNodeByLabel(session.snapshot.nodes, fallbackLabel); - } - if (!node || (requireRect && !node.rect)) { - return errorResponse('COMMAND_FAILED', notFoundMessage); - } - return { ok: true, target: { ref, node, snapshotNodes: session.snapshot.nodes } }; -} - -export function resolveRectCenter(rect: Rect | undefined): { x: number; y: number } | null { - const normalized = normalizeRect(rect); - if (!normalized) return null; - const center = centerOfRect(normalized); - if (!Number.isFinite(center.x) || !Number.isFinite(center.y)) return null; - return center; -} - -function normalizeRect(rect: Rect | undefined): Rect | null { - if (!rect) return null; - const x = Number(rect.x); - const y = Number(rect.y); - const width = Number(rect.width); - const height = Number(rect.height); - if ( - !Number.isFinite(x) || - !Number.isFinite(y) || - !Number.isFinite(width) || - !Number.isFinite(height) - ) { - return null; - } - if (width < 0 || height < 0) return null; - return { x, y, width, height }; -} +export { resolveRectCenter }; diff --git a/src/daemon/handlers/interaction-touch-reference-frame.ts b/src/daemon/handlers/interaction-touch-reference-frame.ts index bef727ee8..52bbc058e 100644 --- a/src/daemon/handlers/interaction-touch-reference-frame.ts +++ b/src/daemon/handlers/interaction-touch-reference-frame.ts @@ -8,7 +8,7 @@ import type { SessionState } from '../types.ts'; import type { ContextFromFlags } from './interaction-common.ts'; import type { CaptureSnapshotForSession } from './interaction-snapshot.ts'; -export async function resolveDirectTouchReferenceFrame(params: { +async function resolveDirectTouchReferenceFrame(params: { session: SessionState; flags: CommandFlags | undefined; sessionStore: SessionStore; diff --git a/src/daemon/handlers/record-trace-recording.ts b/src/daemon/handlers/record-trace-recording.ts index 0ff360e3e..af6adc0d1 100644 --- a/src/daemon/handlers/record-trace-recording.ts +++ b/src/daemon/handlers/record-trace-recording.ts @@ -40,7 +40,7 @@ import type { RecordTraceDeps, RecordingBase } from './record-trace-types.ts'; export type { RecordTraceDeps, RecordingBase } from './record-trace-types.ts'; -export function buildRecordTraceDeps(): RecordTraceDeps { +function buildRecordTraceDeps(): RecordTraceDeps { return { runCmd, runCmdBackground, diff --git a/src/daemon/handlers/session-observability.ts b/src/daemon/handlers/session-observability.ts index 846117dfb..305ffaf08 100644 --- a/src/daemon/handlers/session-observability.ts +++ b/src/daemon/handlers/session-observability.ts @@ -29,7 +29,7 @@ type ObservabilityParams = { sessionStore: SessionStore; }; -export function resolveSessionLogBackendLabel( +function resolveSessionLogBackendLabel( session: SessionState, ): 'ios-simulator' | 'ios-device' | 'android' | 'macos' { if (session.appLog) { diff --git a/src/daemon/handlers/session-replay-heal.ts b/src/daemon/handlers/session-replay-heal.ts index e69dc99b2..6a1f236b7 100644 --- a/src/daemon/handlers/session-replay-heal.ts +++ b/src/daemon/handlers/session-replay-heal.ts @@ -19,7 +19,7 @@ import { isClickLikeCommand } from '../script-utils.ts'; import { contextFromFlags } from '../context.ts'; import { SessionStore } from '../session-store.ts'; -export function parseSelectorWaitPositionals(positionals: string[]): { +function parseSelectorWaitPositionals(positionals: string[]): { selectorExpression: string | null; selectorTimeout: string | null; } { @@ -37,7 +37,7 @@ export function parseSelectorWaitPositionals(positionals: string[]): { }; } -export function collectReplaySelectorCandidates(action: SessionAction): string[] { +function collectReplaySelectorCandidates(action: SessionAction): string[] { const result: string[] = []; const explicitChain = Array.isArray(action.result?.selectorChain) && diff --git a/src/daemon/handlers/session-test-artifacts.ts b/src/daemon/handlers/session-test-artifacts.ts index 24ead3aff..09ba3d228 100644 --- a/src/daemon/handlers/session-test-artifacts.ts +++ b/src/daemon/handlers/session-test-artifacts.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import type { DaemonResponse } from '../types.ts'; import { SessionStore } from '../session-store.ts'; -export const DEFAULT_TEST_ARTIFACTS_ROOT = '.agent-device/test-artifacts'; +const DEFAULT_TEST_ARTIFACTS_ROOT = '.agent-device/test-artifacts'; export function resolveReplayTestArtifactsDir(params: { artifactsDir?: string; diff --git a/src/daemon/handlers/session-test-discovery.ts b/src/daemon/handlers/session-test-discovery.ts index 1652fdd04..0e8324d71 100644 --- a/src/daemon/handlers/session-test-discovery.ts +++ b/src/daemon/handlers/session-test-discovery.ts @@ -8,7 +8,7 @@ import { readReplayScriptMetadata, type ReplayScriptMetadata } from './session-r const GLOB_PATTERN_CHARS = /[*?[\]{}]/; -export const MAX_REPLAY_TEST_RETRIES = 3; +const MAX_REPLAY_TEST_RETRIES = 3; export type ReplayTestDiscoveryEntry = | { diff --git a/src/daemon/network-log.ts b/src/daemon/network-log.ts index 7dc5d30c8..a20ffe253 100644 --- a/src/daemon/network-log.ts +++ b/src/daemon/network-log.ts @@ -16,7 +16,7 @@ const ANDROID_NEARBY_LINE_RADIUS = 5; // OkHttp/Retrofit interceptor logs can spread request→response pairs across // many interleaved logcat lines. const ANDROID_PACKET_SCAN_RADIUS = 12; -export const NETWORK_LOG_MEMORY_PATH = ''; +const NETWORK_LOG_MEMORY_PATH = ''; export type NetworkIncludeMode = 'summary' | 'headers' | 'body' | 'all'; export type NetworkLogBackend = 'ios-simulator' | 'ios-device' | 'android' | 'macos'; diff --git a/src/daemon/recording-telemetry.ts b/src/daemon/recording-telemetry.ts index 11be65fff..34989810e 100644 --- a/src/daemon/recording-telemetry.ts +++ b/src/daemon/recording-telemetry.ts @@ -19,7 +19,7 @@ export function deriveRecordingTelemetryPath(videoPath: string): string { return path.join(parsed.dir, `${parsed.name}.gesture-telemetry.json`); } -export function trimRecordingTelemetryEvents( +function trimRecordingTelemetryEvents( events: RecordingGestureEvent[], trimStartMs: number, ): RecordingGestureEvent[] { @@ -48,13 +48,13 @@ export function trimRecordingTelemetryEvents( ); } -export function normalizeRecordingTelemetryEvents( +function normalizeRecordingTelemetryEvents( events: RecordingGestureEvent[], ): RecordingGestureEvent[] { return [...events].sort((left, right) => left.tMs - right.tMs); } -export function writeRecordingTelemetry(params: { +function writeRecordingTelemetry(params: { videoPath: string; events: RecordingGestureEvent[]; trimStartMs?: number; diff --git a/src/daemon/server-lifecycle.ts b/src/daemon/server-lifecycle.ts index caeab928a..09e74ed73 100644 --- a/src/daemon/server-lifecycle.ts +++ b/src/daemon/server-lifecycle.ts @@ -1,7 +1,9 @@ import fs from 'node:fs'; -import { readVersion } from '../utils/version.ts'; -import { isAgentDeviceDaemonProcess, readProcessStartTime } from '../utils/process-identity.ts'; -import { resolveDaemonCodeSignature } from './code-signature.ts'; +import { isAgentDeviceDaemonProcess } from '../utils/process-identity.ts'; + +export { readVersion } from '../utils/version.ts'; +export { readProcessStartTime } from '../utils/process-identity.ts'; +export { resolveDaemonCodeSignature } from './code-signature.ts'; export type DaemonLockInfo = { pid: number; @@ -53,7 +55,7 @@ export function removeInfo(infoPath: string): void { if (fs.existsSync(infoPath)) fs.unlinkSync(infoPath); } -export function readLockInfo(lockPath: string): DaemonLockInfo | null { +function readLockInfo(lockPath: string): DaemonLockInfo | null { if (!fs.existsSync(lockPath)) return null; try { const parsed = JSON.parse(fs.readFileSync(lockPath, 'utf8')) as DaemonLockInfo; @@ -111,5 +113,3 @@ export function parseIntegerEnv(raw: string | undefined): number | undefined { if (!Number.isInteger(value)) return undefined; return value; } - -export { readVersion, readProcessStartTime, resolveDaemonCodeSignature }; diff --git a/src/daemon/snapshot-diff.ts b/src/daemon/snapshot-diff.ts index 15c4fd9f0..1acb67de5 100644 --- a/src/daemon/snapshot-diff.ts +++ b/src/daemon/snapshot-diff.ts @@ -1 +1 @@ -export { buildSnapshotDiff, countSnapshotComparableLines } from '../utils/snapshot-diff.ts'; +export { buildSnapshotDiff } from '../utils/snapshot-diff.ts'; diff --git a/src/daemon/touch-reference-frame.ts b/src/daemon/touch-reference-frame.ts index c64a4e00f..b5b917772 100644 --- a/src/daemon/touch-reference-frame.ts +++ b/src/daemon/touch-reference-frame.ts @@ -20,7 +20,7 @@ export function getSnapshotReferenceFrame( return inferred; } -export function inferTouchReferenceFrame( +function inferTouchReferenceFrame( nodes: Array>, ): TouchReferenceFrame | undefined { const viewportRect = inferViewportRect(nodes); diff --git a/src/platforms/android/open-target.ts b/src/platforms/android/open-target.ts index b90d110af..b65646d6d 100644 --- a/src/platforms/android/open-target.ts +++ b/src/platforms/android/open-target.ts @@ -21,7 +21,7 @@ export function classifyAndroidAppTarget(target: string): AndroidAppTargetKind { return 'package'; } -export function looksLikeAndroidPackageName(value: string): boolean { +function looksLikeAndroidPackageName(value: string): boolean { return ANDROID_PACKAGE_NAME_PATTERN.test(value); } diff --git a/src/platforms/android/screenshot.ts b/src/platforms/android/screenshot.ts index d13937210..8c114508b 100644 --- a/src/platforms/android/screenshot.ts +++ b/src/platforms/android/screenshot.ts @@ -23,7 +23,7 @@ export async function screenshotAndroid(device: DeviceInfo, outPath: string): Pr * Enable Android demo mode and set deterministic time in status bar * for consistent screenshots. */ -export async function enableAndroidDemoMode(device: DeviceInfo): Promise { +async function enableAndroidDemoMode(device: DeviceInfo): Promise { const shell = (cmd: string) => runCmd('adb', adbArgs(device, ['shell', cmd]), { allowFailure: true }); @@ -37,7 +37,7 @@ export async function enableAndroidDemoMode(device: DeviceInfo): Promise { } /** Disable demo mode and restore the live status bar. */ -export async function disableAndroidDemoMode(device: DeviceInfo): Promise { +async function disableAndroidDemoMode(device: DeviceInfo): Promise { await runCmd( 'adb', adbArgs(device, ['shell', 'am broadcast -a com.android.systemui.demo -e command exit']), diff --git a/src/platforms/install-source.ts b/src/platforms/install-source.ts index 1d258d616..d04f3a894 100644 --- a/src/platforms/install-source.ts +++ b/src/platforms/install-source.ts @@ -85,7 +85,7 @@ export async function materializeInstallablePath( } } -export function expandSourcePath(inputPath: string): string { +function expandSourcePath(inputPath: string): string { return expandUserHomePath(inputPath); } diff --git a/src/platforms/ios/install-artifact.ts b/src/platforms/ios/install-artifact.ts index 771d29196..7a6b56af6 100644 --- a/src/platforms/ios/install-artifact.ts +++ b/src/platforms/ios/install-artifact.ts @@ -70,7 +70,7 @@ export async function prepareIosInstallArtifact( }; } -export async function readIosBundleInfo( +async function readIosBundleInfo( appBundlePath: string, ): Promise<{ bundleId?: string; appName?: string }> { const infoPlistPath = path.join(appBundlePath, 'Info.plist'); diff --git a/src/platforms/ios/perf.ts b/src/platforms/ios/perf.ts index cda6fc236..1aefff09e 100644 --- a/src/platforms/ios/perf.ts +++ b/src/platforms/ios/perf.ts @@ -18,10 +18,10 @@ import { readInfoPlistString } from './plist.ts'; import { buildSimctlArgsForDevice } from './simctl.ts'; import { parseXmlDocumentSync, type XmlNode } from './xml.ts'; -export const APPLE_CPU_SAMPLE_METHOD = 'ps-process-snapshot'; -export const APPLE_MEMORY_SAMPLE_METHOD = 'ps-process-snapshot'; -export const IOS_DEVICE_CPU_SAMPLE_METHOD = 'xctrace-activity-monitor'; -export const IOS_DEVICE_MEMORY_SAMPLE_METHOD = 'xctrace-activity-monitor'; +const APPLE_CPU_SAMPLE_METHOD = 'ps-process-snapshot'; +const APPLE_MEMORY_SAMPLE_METHOD = 'ps-process-snapshot'; +const IOS_DEVICE_CPU_SAMPLE_METHOD = 'xctrace-activity-monitor'; +const IOS_DEVICE_MEMORY_SAMPLE_METHOD = 'xctrace-activity-monitor'; const APPLE_PERF_TIMEOUT_MS = 15_000; // Physical device tracing can take materially longer to initialize than the 1s sample window. diff --git a/src/platforms/ios/runner-xctestrun.ts b/src/platforms/ios/runner-xctestrun.ts index 40f2cff52..66dcf24a4 100644 --- a/src/platforms/ios/runner-xctestrun.ts +++ b/src/platforms/ios/runner-xctestrun.ts @@ -1030,7 +1030,7 @@ export function xctestrunReferencesExistingProducts(xctestrunPath: string): bool } } -export function resolveExistingXctestrunProductPaths(xctestrunPath: string): string[] | null { +function resolveExistingXctestrunProductPaths(xctestrunPath: string): string[] | null { const values = resolveXctestrunProductReferences(xctestrunPath); if (!values || values.length === 0) { return null; diff --git a/src/platforms/linux/linux-env.ts b/src/platforms/linux/linux-env.ts index ae80ff80d..61e2470e3 100644 --- a/src/platforms/linux/linux-env.ts +++ b/src/platforms/linux/linux-env.ts @@ -11,7 +11,7 @@ import { AppError } from '../../utils/errors.ts'; export type DisplayServer = 'wayland' | 'x11'; export type InputTool = 'xdotool' | 'ydotool'; -export function detectDisplayServer(): DisplayServer { +function detectDisplayServer(): DisplayServer { if (process.env['WAYLAND_DISPLAY']) return 'wayland'; if (process.env['XDG_SESSION_TYPE'] === 'wayland') return 'wayland'; return 'x11'; diff --git a/src/platforms/permission-utils.ts b/src/platforms/permission-utils.ts index e77413f7c..623b37a7f 100644 --- a/src/platforms/permission-utils.ts +++ b/src/platforms/permission-utils.ts @@ -19,7 +19,7 @@ export type PermissionSettingOptions = { permissionTarget?: string; permissionMode?: string; }; -export const PERMISSION_TARGETS: readonly PermissionTarget[] = [ +const PERMISSION_TARGETS: readonly PermissionTarget[] = [ 'camera', 'microphone', 'photos', diff --git a/src/utils/parsing.ts b/src/utils/parsing.ts index 13d6818eb..5ca418342 100644 --- a/src/utils/parsing.ts +++ b/src/utils/parsing.ts @@ -2,7 +2,7 @@ import { AppError } from './errors.ts'; import type { DeviceKind, DeviceTarget, Platform } from './device.ts'; import type { Point } from './snapshot.ts'; -export function readRequired( +function readRequired( record: Record, key: string, parse: (value: unknown) => T | undefined, @@ -15,7 +15,7 @@ export function readRequired( return value; } -export function readOptional( +function readOptional( record: Record, key: string, parse: (value: unknown) => T | undefined, @@ -23,7 +23,7 @@ export function readOptional( return parse(record[key]); } -export function readNullable( +function readNullable( record: Record, key: string, parse: (value: unknown) => T | undefined, @@ -98,23 +98,23 @@ export function readPoint(record: Record, key: string): Point | return { x, y }; } -export function parseNonEmptyString(value: unknown): string | undefined { +function parseNonEmptyString(value: unknown): string | undefined { return typeof value === 'string' && value.length > 0 ? value : undefined; } -export function parseFiniteNumber(value: unknown): number | undefined { +function parseFiniteNumber(value: unknown): number | undefined { return typeof value === 'number' && Number.isFinite(value) ? value : undefined; } -export function parsePlatform(value: unknown): Platform | undefined { +function parsePlatform(value: unknown): Platform | undefined { return value === 'ios' || value === 'macos' || value === 'android' ? value : undefined; } -export function parseDeviceKind(value: unknown): DeviceKind | undefined { +function parseDeviceKind(value: unknown): DeviceKind | undefined { return value === 'simulator' || value === 'emulator' || value === 'device' ? value : undefined; } -export function parseDeviceTarget(value: unknown): DeviceTarget | undefined { +function parseDeviceTarget(value: unknown): DeviceTarget | undefined { return value === 'tv' || value === 'mobile' || value === 'desktop' ? value : undefined; } diff --git a/src/utils/rect-center.ts b/src/utils/rect-center.ts new file mode 100644 index 000000000..93a5db3a2 --- /dev/null +++ b/src/utils/rect-center.ts @@ -0,0 +1,27 @@ +import { centerOfRect, type Rect } from './snapshot.ts'; + +export function resolveRectCenter(rect: Rect | undefined): { x: number; y: number } | null { + const normalized = normalizeRect(rect); + if (!normalized) return null; + const center = centerOfRect(normalized); + if (!Number.isFinite(center.x) || !Number.isFinite(center.y)) return null; + return center; +} + +export function normalizeRect(rect: Rect | undefined): Rect | null { + if (!rect) return null; + const x = Number(rect.x); + const y = Number(rect.y); + const width = Number(rect.width); + const height = Number(rect.height); + if ( + !Number.isFinite(x) || + !Number.isFinite(y) || + !Number.isFinite(width) || + !Number.isFinite(height) + ) { + return null; + } + if (width < 0 || height < 0) return null; + return { x, y, width, height }; +} diff --git a/src/utils/text-surface.ts b/src/utils/text-surface.ts index f8f4070d5..6ea12d0e3 100644 --- a/src/utils/text-surface.ts +++ b/src/utils/text-surface.ts @@ -18,7 +18,7 @@ export function extractReadableText(node: TextSurfaceNode): string { return label || value || fallbackIdentifier; } -export function isLargeTextSurface(node: TextSurfaceNode, displayType?: string): boolean { +function isLargeTextSurface(node: TextSurfaceNode, displayType?: string): boolean { if (displayType === 'text-view' || displayType === 'text-field' || displayType === 'search') { return true; } @@ -61,7 +61,7 @@ export function describeTextSurface( }; } -export function shouldSummarizeTextSurface(text: string): boolean { +function shouldSummarizeTextSurface(text: string): boolean { if (!text) { return false; } diff --git a/src/utils/update-check.ts b/src/utils/update-check.ts index 345b67a34..61868d409 100644 --- a/src/utils/update-check.ts +++ b/src/utils/update-check.ts @@ -6,7 +6,7 @@ import { runCmdDetached } from './exec.ts'; const PACKAGE_NAME = 'agent-device'; const UPDATE_CHECK_INTERVAL_MS = 14 * 24 * 60 * 60 * 1000; const UPDATE_CHECK_TIMEOUT_MS = 3500; -export const UPDATE_CHECK_ARG = '--agent-device-run-update-check'; +const UPDATE_CHECK_ARG = '--agent-device-run-update-check'; const UPDATE_CHECK_CACHE_FILE = 'update-check.json'; type UpdateCheckCache = { diff --git a/test/integration/test-helpers.ts b/test/integration/test-helpers.ts index ccc5e08c3..4988c5c69 100644 --- a/test/integration/test-helpers.ts +++ b/test/integration/test-helpers.ts @@ -85,7 +85,7 @@ export function runCliJson(args: string[], options?: { env?: NodeJS.ProcessEnv } }; } -export function formatResultDebug(step: string, args: string[], result: CliJsonResult): string { +function formatResultDebug(step: string, args: string[], result: CliJsonResult): string { const jsonText = result.json === undefined ? '(unparseable)' : JSON.stringify(result.json, null, 2); return [ From bcec6ede40db9e05e742ff15a01ffda45460b8d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Sun, 26 Apr 2026 13:51:05 -0400 Subject: [PATCH 2/2] fix: refresh pnpm lockfile --- pnpm-lock.yaml | 90 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 65 insertions(+), 25 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cea6940cb..1337c1bfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,9 +18,6 @@ importers: specifier: ^7.0.0 version: 7.0.0 devDependencies: - '@microsoft/api-extractor': - specifier: ^7.58.1 - version: 7.58.1(@types/node@22.19.7) '@rslib/core': specifier: 0.20.1 version: 0.20.1(@microsoft/api-extractor@7.58.1(@types/node@22.19.7))(core-js@3.47.0)(typescript@6.0.2) @@ -2249,6 +2246,7 @@ snapshots: '@rushstack/node-core-library': 5.21.0(@types/node@22.19.7) transitivePeerDependencies: - '@types/node' + optional: true '@microsoft/api-extractor@7.58.1(@types/node@22.19.7)': dependencies: @@ -2268,6 +2266,7 @@ snapshots: typescript: 5.9.3 transitivePeerDependencies: - '@types/node' + optional: true '@microsoft/tsdoc-config@0.18.1': dependencies: @@ -2275,8 +2274,10 @@ snapshots: ajv: 8.18.0 jju: 1.4.0 resolve: 1.22.11 + optional: true - '@microsoft/tsdoc@0.16.0': {} + '@microsoft/tsdoc@0.16.0': + optional: true '@napi-rs/wasm-runtime@1.1.1': dependencies: @@ -2690,15 +2691,18 @@ snapshots: semver: 7.5.4 optionalDependencies: '@types/node': 22.19.7 + optional: true '@rushstack/problem-matcher@0.2.1(@types/node@22.19.7)': optionalDependencies: '@types/node': 22.19.7 + optional: true '@rushstack/rig-package@0.7.2': dependencies: resolve: 1.22.11 strip-json-comments: 3.1.1 + optional: true '@rushstack/terminal@0.22.4(@types/node@22.19.7)': dependencies: @@ -2707,6 +2711,7 @@ snapshots: supports-color: 8.1.1 optionalDependencies: '@types/node': 22.19.7 + optional: true '@rushstack/ts-command-line@5.3.4(@types/node@22.19.7)': dependencies: @@ -2716,6 +2721,7 @@ snapshots: string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' + optional: true '@shikijs/core@4.0.2': dependencies: @@ -2781,7 +2787,8 @@ snapshots: tslib: 2.8.1 optional: true - '@types/argparse@1.0.38': {} + '@types/argparse@1.0.38': + optional: true '@types/chai@5.2.3': dependencies: @@ -2889,10 +2896,12 @@ snapshots: ajv-draft-04@1.0.0(ajv@8.18.0): optionalDependencies: ajv: 8.18.0 + optional: true ajv-formats@3.0.1(ajv@8.18.0): optionalDependencies: ajv: 8.18.0 + optional: true ajv@8.18.0: dependencies: @@ -2900,6 +2909,7 @@ snapshots: fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + optional: true anymatch@3.1.3: dependencies: @@ -2916,7 +2926,8 @@ snapshots: bail@2.0.2: {} - balanced-match@4.0.4: {} + balanced-match@4.0.4: + optional: true binary-extensions@2.3.0: {} @@ -2925,6 +2936,7 @@ snapshots: brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 + optional: true braces@3.0.3: dependencies: @@ -2993,7 +3005,8 @@ snapshots: dependencies: dequal: 2.0.3 - diff@8.0.4: {} + diff@8.0.4: + optional: true entities@6.0.1: {} @@ -3075,9 +3088,11 @@ snapshots: '@fallow-cli/win32-arm64-msvc': 2.52.0 '@fallow-cli/win32-x64-msvc': 2.52.0 - fast-deep-equal@3.1.3: {} + fast-deep-equal@3.1.3: + optional: true - fast-uri@3.1.0: {} + fast-uri@3.1.0: + optional: true fast-xml-builder@1.1.4: dependencies: @@ -3104,11 +3119,13 @@ snapshots: graceful-fs: 4.2.11 jsonfile: 6.2.0 universalify: 2.0.1 + optional: true fsevents@2.3.3: optional: true - function-bind@1.1.2: {} + function-bind@1.1.2: + optional: true get-east-asian-width@1.5.0: {} @@ -3118,7 +3135,8 @@ snapshots: dependencies: is-glob: 4.0.3 - graceful-fs@4.2.11: {} + graceful-fs@4.2.11: + optional: true gray-matter@4.0.3: dependencies: @@ -3127,11 +3145,13 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - has-flag@4.0.0: {} + has-flag@4.0.0: + optional: true hasown@2.0.2: dependencies: function-bind: 1.1.2 + optional: true hast-util-from-parse5@8.0.3: dependencies: @@ -3259,7 +3279,8 @@ snapshots: html-void-elements@3.0.0: {} - import-lazy@4.0.0: {} + import-lazy@4.0.0: + optional: true inline-style-parser@0.2.7: {} @@ -3279,6 +3300,7 @@ snapshots: is-core-module@2.16.1: dependencies: hasown: 2.0.2 + optional: true is-decimal@2.0.1: {} @@ -3299,20 +3321,23 @@ snapshots: jiti@2.6.1: optional: true - jju@1.4.0: {} + jju@1.4.0: + optional: true js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 - json-schema-traverse@1.0.0: {} + json-schema-traverse@1.0.0: + optional: true jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 + optional: true kind-of@6.0.3: {} @@ -3367,13 +3392,15 @@ snapshots: lodash-es@4.18.1: {} - lodash@4.18.1: {} + lodash@4.18.1: + optional: true longest-streak@3.1.0: {} lru-cache@6.0.0: dependencies: yallist: 4.0.0 + optional: true magic-string@0.30.21: dependencies: @@ -3847,6 +3874,7 @@ snapshots: minimatch@10.2.3: dependencies: brace-expansion: 5.0.5 + optional: true ms@2.1.3: {} @@ -3928,7 +3956,8 @@ snapshots: path-expression-matcher@1.4.0: {} - path-parse@1.0.7: {} + path-parse@1.0.7: + optional: true pathe@2.0.3: {} @@ -4110,13 +4139,15 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - require-from-string@2.0.2: {} + require-from-string@2.0.2: + optional: true resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + optional: true rolldown@1.0.0-rc.13: dependencies: @@ -4165,6 +4196,7 @@ snapshots: semver@7.5.4: dependencies: lru-cache: 6.0.0 + optional: true set-cookie-parser@2.7.2: {} @@ -4183,7 +4215,8 @@ snapshots: source-map-js@1.2.1: {} - source-map@0.6.1: {} + source-map@0.6.1: + optional: true source-map@0.7.6: {} @@ -4197,7 +4230,8 @@ snapshots: std-env@4.0.0: {} - string-argv@0.3.2: {} + string-argv@0.3.2: + optional: true stringify-entities@4.0.4: dependencies: @@ -4206,7 +4240,8 @@ snapshots: strip-bom-string@1.0.0: {} - strip-json-comments@3.1.1: {} + strip-json-comments@3.1.1: + optional: true strnum@2.2.3: {} @@ -4221,8 +4256,10 @@ snapshots: supports-color@8.1.1: dependencies: has-flag: 4.0.0 + optional: true - supports-preserve-symlinks-flag@1.0.0: {} + supports-preserve-symlinks-flag@1.0.0: + optional: true tinybench@2.9.0: {} @@ -4251,7 +4288,8 @@ snapshots: tslib@2.8.1: {} - typescript@5.9.3: {} + typescript@5.9.3: + optional: true typescript@6.0.2: {} @@ -4308,7 +4346,8 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - universalify@2.0.1: {} + universalify@2.0.1: + optional: true vfile-location@5.0.3: dependencies: @@ -4371,7 +4410,8 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - yallist@4.0.0: {} + yallist@4.0.0: + optional: true zod@4.3.6: {}