react-native-ai-debugger 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/__tests__/helpers/fake-cdp-server.d.ts +0 -12
- package/build/__tests__/helpers/fake-cdp-server.d.ts.map +1 -1
- package/build/__tests__/helpers/fake-cdp-server.js +0 -22
- package/build/__tests__/helpers/fake-cdp-server.js.map +1 -1
- package/build/__tests__/helpers/tap-test-helpers.d.ts +0 -23
- package/build/__tests__/helpers/tap-test-helpers.d.ts.map +1 -1
- package/build/__tests__/helpers/tap-test-helpers.js +2 -29
- package/build/__tests__/helpers/tap-test-helpers.js.map +1 -1
- package/build/__tests__/integration/auto-reconnect.test.js +4 -14
- package/build/__tests__/integration/auto-reconnect.test.js.map +1 -1
- package/build/__tests__/integration/connection-health.test.js +1 -10
- package/build/__tests__/integration/connection-health.test.js.map +1 -1
- package/build/__tests__/integration/execute-in-app.test.js +1 -11
- package/build/__tests__/integration/execute-in-app.test.js.map +1 -1
- package/build/__tests__/integration/native-logs.test.js +0 -5
- package/build/__tests__/integration/native-logs.test.js.map +1 -1
- package/build/__tests__/integration/per-call-timeout.test.js +1 -5
- package/build/__tests__/integration/per-call-timeout.test.js.map +1 -1
- package/build/__tests__/integration/socket-close-midflight.test.js +2 -12
- package/build/__tests__/integration/socket-close-midflight.test.js.map +1 -1
- package/build/__tests__/integration/stale-target-probe.test.js +2 -17
- package/build/__tests__/integration/stale-target-probe.test.js.map +1 -1
- package/build/__tests__/integration/tap-strategies.test.js +2 -36
- package/build/__tests__/integration/tap-strategies.test.js.map +1 -1
- package/build/__tests__/integration/text-input.test.js +0 -39
- package/build/__tests__/integration/text-input.test.js.map +1 -1
- package/build/__tests__/integration/tools.test.js +1 -7
- package/build/__tests__/integration/tools.test.js.map +1 -1
- package/build/__tests__/setup.js +0 -2
- package/build/__tests__/setup.js.map +1 -1
- package/build/__tests__/unit/androidEmulatorAvds.test.js +0 -10
- package/build/__tests__/unit/androidEmulatorAvds.test.js.map +1 -1
- package/build/__tests__/unit/appContext.test.js +0 -2
- package/build/__tests__/unit/appContext.test.js.map +1 -1
- package/build/__tests__/unit/appRequest.test.js +0 -3
- package/build/__tests__/unit/appRequest.test.js.map +1 -1
- package/build/__tests__/unit/buildToken.test.js +0 -6
- package/build/__tests__/unit/buildToken.test.js.map +1 -1
- package/build/__tests__/unit/burst.test.js +0 -1
- package/build/__tests__/unit/burst.test.js.map +1 -1
- package/build/__tests__/unit/clearLogsNative.test.js +0 -8
- package/build/__tests__/unit/clearLogsNative.test.js.map +1 -1
- package/build/__tests__/unit/componentFormatNaming.test.js +0 -13
- package/build/__tests__/unit/componentFormatNaming.test.js.map +1 -1
- package/build/__tests__/unit/componentSource.test.js +0 -4
- package/build/__tests__/unit/componentSource.test.js.map +1 -1
- package/build/__tests__/unit/componentSourceResolve.test.js +0 -1
- package/build/__tests__/unit/componentSourceResolve.test.js.map +1 -1
- package/build/__tests__/unit/contextWiring.test.js +0 -3
- package/build/__tests__/unit/contextWiring.test.js.map +1 -1
- package/build/__tests__/unit/coordinateMiss.test.js +0 -16
- package/build/__tests__/unit/coordinateMiss.test.js.map +1 -1
- package/build/__tests__/unit/deviceDiscovery.test.js +0 -4
- package/build/__tests__/unit/deviceDiscovery.test.js.map +1 -1
- package/build/__tests__/unit/deviceResolution.test.js +0 -2
- package/build/__tests__/unit/deviceResolution.test.js.map +1 -1
- package/build/__tests__/unit/deviceResolver.test.js +0 -1
- package/build/__tests__/unit/deviceResolver.test.js.map +1 -1
- package/build/__tests__/unit/deviceResolverStaleRetry.test.js +0 -8
- package/build/__tests__/unit/deviceResolverStaleRetry.test.js.map +1 -1
- package/build/__tests__/unit/epochRender.test.js +0 -3
- package/build/__tests__/unit/epochRender.test.js.map +1 -1
- package/build/__tests__/unit/errorCategorization.test.js +0 -18
- package/build/__tests__/unit/errorCategorization.test.js.map +1 -1
- package/build/__tests__/unit/exec.test.js +0 -1
- package/build/__tests__/unit/exec.test.js.map +1 -1
- package/build/__tests__/unit/executor.test.js +0 -15
- package/build/__tests__/unit/executor.test.js.map +1 -1
- package/build/__tests__/unit/findElementTreeReuse.test.js +0 -12
- package/build/__tests__/unit/findElementTreeReuse.test.js.map +1 -1
- package/build/__tests__/unit/fingerprint.test.js +0 -4
- package/build/__tests__/unit/fingerprint.test.js.map +1 -1
- package/build/__tests__/unit/focusedInputTools.test.js +0 -4
- package/build/__tests__/unit/focusedInputTools.test.js.map +1 -1
- package/build/__tests__/unit/getLogsEmptyContract.test.js +0 -30
- package/build/__tests__/unit/getLogsEmptyContract.test.js.map +1 -1
- package/build/__tests__/unit/getLogsNativeSource.test.js +0 -22
- package/build/__tests__/unit/getLogsNativeSource.test.js.map +1 -1
- package/build/__tests__/unit/graphqlOperation.test.d.ts +2 -0
- package/build/__tests__/unit/graphqlOperation.test.d.ts.map +1 -0
- package/build/__tests__/unit/graphqlOperation.test.js +107 -0
- package/build/__tests__/unit/graphqlOperation.test.js.map +1 -0
- package/build/__tests__/unit/inputTarget.test.js +0 -16
- package/build/__tests__/unit/inputTarget.test.js.map +1 -1
- package/build/__tests__/unit/inputTextTool.test.js +0 -3
- package/build/__tests__/unit/inputTextTool.test.js.map +1 -1
- package/build/__tests__/unit/jsLogEvents.test.js +0 -3
- package/build/__tests__/unit/jsLogEvents.test.js.map +1 -1
- package/build/__tests__/unit/keyboardMetrics.test.js +0 -2
- package/build/__tests__/unit/keyboardMetrics.test.js.map +1 -1
- package/build/__tests__/unit/keyboardRaise.test.js +0 -2
- package/build/__tests__/unit/keyboardRaise.test.js.map +1 -1
- package/build/__tests__/unit/licenseGrace.test.js +1 -4
- package/build/__tests__/unit/licenseGrace.test.js.map +1 -1
- package/build/__tests__/unit/logEventFormat.test.js +0 -27
- package/build/__tests__/unit/logEventFormat.test.js.map +1 -1
- package/build/__tests__/unit/logEvents.test.js +1 -5
- package/build/__tests__/unit/logEvents.test.js.map +1 -1
- package/build/__tests__/unit/logGrouping.test.js +0 -2
- package/build/__tests__/unit/logGrouping.test.js.map +1 -1
- package/build/__tests__/unit/logOwnership.test.js +0 -11
- package/build/__tests__/unit/logOwnership.test.js.map +1 -1
- package/build/__tests__/unit/logRelevance.test.js +0 -6
- package/build/__tests__/unit/logRelevance.test.js.map +1 -1
- package/build/__tests__/unit/logSourceAndroid.test.js +0 -4
- package/build/__tests__/unit/logSourceAndroid.test.js.map +1 -1
- package/build/__tests__/unit/logSourceIos.test.js +0 -5
- package/build/__tests__/unit/logSourceIos.test.js.map +1 -1
- package/build/__tests__/unit/logs.test.js +0 -1
- package/build/__tests__/unit/logs.test.js.map +1 -1
- package/build/__tests__/unit/measureComponentTools.test.js +0 -1
- package/build/__tests__/unit/measureComponentTools.test.js.map +1 -1
- package/build/__tests__/unit/metro.test.js +0 -2
- package/build/__tests__/unit/metro.test.js.map +1 -1
- package/build/__tests__/unit/nativeInputValue.test.js +0 -4
- package/build/__tests__/unit/nativeInputValue.test.js.map +1 -1
- package/build/__tests__/unit/nativeLogs.test.js +1 -23
- package/build/__tests__/unit/nativeLogs.test.js.map +1 -1
- package/build/__tests__/unit/navigateVerify.test.js +0 -6
- package/build/__tests__/unit/navigateVerify.test.js.map +1 -1
- package/build/__tests__/unit/navigation.test.js +0 -5
- package/build/__tests__/unit/navigation.test.js.map +1 -1
- package/build/__tests__/unit/networkInterceptor.test.js +0 -2
- package/build/__tests__/unit/networkInterceptor.test.js.map +1 -1
- package/build/__tests__/unit/overlayGuard.test.js +0 -17
- package/build/__tests__/unit/overlayGuard.test.js.map +1 -1
- package/build/__tests__/unit/pendingExecutions.test.js +0 -6
- package/build/__tests__/unit/pendingExecutions.test.js.map +1 -1
- package/build/__tests__/unit/probe.test.js +0 -1
- package/build/__tests__/unit/probe.test.js.map +1 -1
- package/build/__tests__/unit/projectMemory.test.js +6 -7
- package/build/__tests__/unit/projectMemory.test.js.map +1 -1
- package/build/__tests__/unit/projectStore.test.js +2 -2
- package/build/__tests__/unit/projectStore.test.js.map +1 -1
- package/build/__tests__/unit/reloadAppAutoConnect.test.js +0 -9
- package/build/__tests__/unit/reloadAppAutoConnect.test.js.map +1 -1
- package/build/__tests__/unit/rnGlobalsBootstrap.test.js +3 -3
- package/build/__tests__/unit/rnGlobalsBootstrap.test.js.map +1 -1
- package/build/__tests__/unit/routeHistory.test.d.ts +2 -0
- package/build/__tests__/unit/routeHistory.test.d.ts.map +1 -0
- package/build/__tests__/unit/routeHistory.test.js +136 -0
- package/build/__tests__/unit/routeHistory.test.js.map +1 -0
- package/build/__tests__/unit/screenSpace.test.js +0 -16
- package/build/__tests__/unit/screenSpace.test.js.map +1 -1
- package/build/__tests__/unit/screenState.test.js +3 -6
- package/build/__tests__/unit/screenState.test.js.map +1 -1
- package/build/__tests__/unit/screenStateInputValue.test.js +0 -7
- package/build/__tests__/unit/screenStateInputValue.test.js.map +1 -1
- package/build/__tests__/unit/screenStateKeyboard.test.js +0 -1
- package/build/__tests__/unit/screenStateKeyboard.test.js.map +1 -1
- package/build/__tests__/unit/screenshot-diff.test.js +0 -6
- package/build/__tests__/unit/screenshot-diff.test.js.map +1 -1
- package/build/__tests__/unit/sdkMirrorPoller.test.js +0 -8
- package/build/__tests__/unit/sdkMirrorPoller.test.js.map +1 -1
- package/build/__tests__/unit/settleAndDiff.test.js +0 -11
- package/build/__tests__/unit/settleAndDiff.test.js.map +1 -1
- package/build/__tests__/unit/signedVerdict.test.js +0 -5
- package/build/__tests__/unit/signedVerdict.test.js.map +1 -1
- package/build/__tests__/unit/swipeDirection.test.js +6 -9
- package/build/__tests__/unit/swipeDirection.test.js.map +1 -1
- package/build/__tests__/unit/symbolicate.test.js +0 -1
- package/build/__tests__/unit/symbolicate.test.js.map +1 -1
- package/build/__tests__/unit/tap.test.js +0 -38
- package/build/__tests__/unit/tap.test.js.map +1 -1
- package/build/__tests__/unit/textEntry.test.js +0 -27
- package/build/__tests__/unit/textEntry.test.js.map +1 -1
- package/build/__tests__/unit/toolDescriptions.test.js +0 -40
- package/build/__tests__/unit/toolDescriptions.test.js.map +1 -1
- package/build/__tests__/unit/toolsJson.test.js +0 -10
- package/build/__tests__/unit/toolsJson.test.js.map +1 -1
- package/build/__tests__/unit/transportClassify.test.js +0 -20
- package/build/__tests__/unit/transportClassify.test.js.map +1 -1
- package/build/__tests__/unit/truncate.test.js +0 -5
- package/build/__tests__/unit/truncate.test.js.map +1 -1
- package/build/__tests__/unit/usageCache.test.js +0 -3
- package/build/__tests__/unit/usageCache.test.js.map +1 -1
- package/build/__tests__/unit/usageGate.test.js +1 -1
- package/build/__tests__/unit/usageGate.test.js.map +1 -1
- package/build/__tests__/unit/visibility.test.js +0 -8
- package/build/__tests__/unit/visibility.test.js.map +1 -1
- package/build/__tests__/unit/waitForMeasurements.test.js +2 -7
- package/build/__tests__/unit/waitForMeasurements.test.js.map +1 -1
- package/build/bin.js +0 -18
- package/build/bin.js.map +1 -1
- package/build/core/android.d.ts +0 -120
- package/build/core/android.d.ts.map +1 -1
- package/build/core/android.js +4 -259
- package/build/core/android.js.map +1 -1
- package/build/core/appContext.d.ts +0 -50
- package/build/core/appContext.d.ts.map +1 -1
- package/build/core/appContext.js +0 -50
- package/build/core/appContext.js.map +1 -1
- package/build/core/appDetection.d.ts +0 -16
- package/build/core/appDetection.d.ts.map +1 -1
- package/build/core/appDetection.js +0 -36
- package/build/core/appDetection.js.map +1 -1
- package/build/core/appRequest.d.ts +0 -12
- package/build/core/appRequest.d.ts.map +1 -1
- package/build/core/appRequest.js +0 -15
- package/build/core/appRequest.js.map +1 -1
- package/build/core/bufferConfig.d.ts +0 -2
- package/build/core/bufferConfig.d.ts.map +1 -1
- package/build/core/bufferConfig.js +0 -2
- package/build/core/bufferConfig.js.map +1 -1
- package/build/core/bundle.js +0 -40
- package/build/core/bundle.js.map +1 -1
- package/build/core/componentSearch.d.ts +0 -19
- package/build/core/componentSearch.d.ts.map +1 -1
- package/build/core/componentSearch.js +1 -22
- package/build/core/componentSearch.js.map +1 -1
- package/build/core/componentSource.d.ts +0 -21
- package/build/core/componentSource.d.ts.map +1 -1
- package/build/core/componentSource.js +0 -27
- package/build/core/componentSource.js.map +1 -1
- package/build/core/componentTree.js +0 -12
- package/build/core/componentTree.js.map +1 -1
- package/build/core/config.d.ts +0 -8
- package/build/core/config.d.ts.map +1 -1
- package/build/core/config.js +0 -10
- package/build/core/config.js.map +1 -1
- package/build/core/connection.d.ts +0 -76
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +15 -340
- package/build/core/connection.js.map +1 -1
- package/build/core/connectionState.d.ts +0 -78
- package/build/core/connectionState.d.ts.map +1 -1
- package/build/core/connectionState.js +4 -92
- package/build/core/connectionState.js.map +1 -1
- package/build/core/debugGlobals.js +0 -68
- package/build/core/debugGlobals.js.map +1 -1
- package/build/core/deviceDiscovery.d.ts +0 -5
- package/build/core/deviceDiscovery.d.ts.map +1 -1
- package/build/core/deviceDiscovery.js +0 -12
- package/build/core/deviceDiscovery.js.map +1 -1
- package/build/core/deviceResolver.d.ts +0 -10
- package/build/core/deviceResolver.d.ts.map +1 -1
- package/build/core/deviceResolver.js +0 -54
- package/build/core/deviceResolver.js.map +1 -1
- package/build/core/epochRender.d.ts +0 -12
- package/build/core/epochRender.d.ts.map +1 -1
- package/build/core/epochRender.js +0 -12
- package/build/core/epochRender.js.map +1 -1
- package/build/core/errorScreenParser.d.ts +0 -21
- package/build/core/errorScreenParser.d.ts.map +1 -1
- package/build/core/errorScreenParser.js +0 -50
- package/build/core/errorScreenParser.js.map +1 -1
- package/build/core/errors.d.ts +0 -15
- package/build/core/errors.d.ts.map +1 -1
- package/build/core/errors.js +0 -15
- package/build/core/errors.js.map +1 -1
- package/build/core/escapeNonAscii.d.ts +0 -9
- package/build/core/escapeNonAscii.d.ts.map +1 -1
- package/build/core/escapeNonAscii.js +1 -43
- package/build/core/escapeNonAscii.js.map +1 -1
- package/build/core/exec.d.ts +0 -12
- package/build/core/exec.d.ts.map +1 -1
- package/build/core/exec.js +2 -14
- package/build/core/exec.js.map +1 -1
- package/build/core/executor.js +0 -3
- package/build/core/executor.js.map +1 -1
- package/build/core/fastRefreshRecorder.js +0 -4
- package/build/core/fastRefreshRecorder.js.map +1 -1
- package/build/core/fastRefreshTools.js +0 -3
- package/build/core/fastRefreshTools.js.map +1 -1
- package/build/core/feedback.js +0 -4
- package/build/core/feedback.js.map +1 -1
- package/build/core/graphqlOperation.d.ts +13 -0
- package/build/core/graphqlOperation.d.ts.map +1 -0
- package/build/core/graphqlOperation.js +80 -0
- package/build/core/graphqlOperation.js.map +1 -0
- package/build/core/guides.d.ts +0 -10
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +0 -10
- package/build/core/guides.js.map +1 -1
- package/build/core/iconSemantics.d.ts +0 -15
- package/build/core/iconSemantics.d.ts.map +1 -1
- package/build/core/iconSemantics.js +0 -31
- package/build/core/iconSemantics.js.map +1 -1
- package/build/core/index.js +4 -47
- package/build/core/index.js.map +1 -1
- package/build/core/injected/visibility.d.ts +0 -30
- package/build/core/injected/visibility.d.ts.map +1 -1
- package/build/core/injected/visibility.js +0 -33
- package/build/core/injected/visibility.js.map +1 -1
- package/build/core/injectedFilters.d.ts +0 -28
- package/build/core/injectedFilters.d.ts.map +1 -1
- package/build/core/injectedFilters.js +0 -28
- package/build/core/injectedFilters.js.map +1 -1
- package/build/core/inputTarget.d.ts +1 -34
- package/build/core/inputTarget.d.ts.map +1 -1
- package/build/core/inputTarget.js +0 -26
- package/build/core/inputTarget.js.map +1 -1
- package/build/core/inputTargetTools.d.ts +0 -7
- package/build/core/inputTargetTools.d.ts.map +1 -1
- package/build/core/inputTargetTools.js +0 -7
- package/build/core/inputTargetTools.js.map +1 -1
- package/build/core/inspector.d.ts +0 -33
- package/build/core/inspector.d.ts.map +1 -1
- package/build/core/inspector.js +0 -36
- package/build/core/inspector.js.map +1 -1
- package/build/core/ios.d.ts +0 -127
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +2 -313
- package/build/core/ios.js.map +1 -1
- package/build/core/jsExecute.d.ts +0 -100
- package/build/core/jsExecute.d.ts.map +1 -1
- package/build/core/jsExecute.js +0 -261
- package/build/core/jsExecute.js.map +1 -1
- package/build/core/jsLogEvents.d.ts +0 -8
- package/build/core/jsLogEvents.d.ts.map +1 -1
- package/build/core/jsLogEvents.js +0 -8
- package/build/core/jsLogEvents.js.map +1 -1
- package/build/core/keyboardMetrics.js +0 -8
- package/build/core/keyboardMetrics.js.map +1 -1
- package/build/core/keyboardRaise.d.ts +0 -8
- package/build/core/keyboardRaise.d.ts.map +1 -1
- package/build/core/keyboardRaise.js +0 -23
- package/build/core/keyboardRaise.js.map +1 -1
- package/build/core/license.d.ts +0 -4
- package/build/core/license.d.ts.map +1 -1
- package/build/core/license.js +2 -55
- package/build/core/license.js.map +1 -1
- package/build/core/logDiagnosis.d.ts +0 -34
- package/build/core/logDiagnosis.d.ts.map +1 -1
- package/build/core/logDiagnosis.js +0 -15
- package/build/core/logDiagnosis.js.map +1 -1
- package/build/core/logEventFormat.d.ts +0 -1
- package/build/core/logEventFormat.d.ts.map +1 -1
- package/build/core/logEventFormat.js +0 -30
- package/build/core/logEventFormat.js.map +1 -1
- package/build/core/logEvents.d.ts +0 -54
- package/build/core/logEvents.d.ts.map +1 -1
- package/build/core/logEvents.js +0 -37
- package/build/core/logEvents.js.map +1 -1
- package/build/core/logGrouping.d.ts +0 -9
- package/build/core/logGrouping.d.ts.map +1 -1
- package/build/core/logGrouping.js +0 -17
- package/build/core/logGrouping.js.map +1 -1
- package/build/core/logOwnership.d.ts +0 -17
- package/build/core/logOwnership.d.ts.map +1 -1
- package/build/core/logOwnership.js +0 -34
- package/build/core/logOwnership.js.map +1 -1
- package/build/core/logRelevance.d.ts +0 -8
- package/build/core/logRelevance.d.ts.map +1 -1
- package/build/core/logRelevance.js +0 -15
- package/build/core/logRelevance.js.map +1 -1
- package/build/core/logSourceAndroid.d.ts +0 -8
- package/build/core/logSourceAndroid.d.ts.map +1 -1
- package/build/core/logSourceAndroid.js +0 -11
- package/build/core/logSourceAndroid.js.map +1 -1
- package/build/core/logSourceIos.d.ts +0 -8
- package/build/core/logSourceIos.d.ts.map +1 -1
- package/build/core/logSourceIos.js +1 -24
- package/build/core/logSourceIos.js.map +1 -1
- package/build/core/logbox.d.ts +0 -30
- package/build/core/logbox.d.ts.map +1 -1
- package/build/core/logbox.js +0 -43
- package/build/core/logbox.js.map +1 -1
- package/build/core/logs.d.ts +0 -6
- package/build/core/logs.d.ts.map +1 -1
- package/build/core/logs.js +0 -19
- package/build/core/logs.js.map +1 -1
- package/build/core/metro.d.ts +0 -14
- package/build/core/metro.d.ts.map +1 -1
- package/build/core/metro.js +1 -32
- package/build/core/metro.js.map +1 -1
- package/build/core/moduleRegistry.d.ts +0 -17
- package/build/core/moduleRegistry.d.ts.map +1 -1
- package/build/core/moduleRegistry.js +0 -17
- package/build/core/moduleRegistry.js.map +1 -1
- package/build/core/nativeInputValue.d.ts +0 -29
- package/build/core/nativeInputValue.d.ts.map +1 -1
- package/build/core/nativeInputValue.js +0 -18
- package/build/core/nativeInputValue.js.map +1 -1
- package/build/core/nativeLogs.d.ts +0 -47
- package/build/core/nativeLogs.d.ts.map +1 -1
- package/build/core/nativeLogs.js +0 -82
- package/build/core/nativeLogs.js.map +1 -1
- package/build/core/nativeOnlyHints.js +0 -4
- package/build/core/nativeOnlyHints.js.map +1 -1
- package/build/core/navigate.d.ts +0 -15
- package/build/core/navigate.d.ts.map +1 -1
- package/build/core/navigate.js +0 -22
- package/build/core/navigate.js.map +1 -1
- package/build/core/navigation.d.ts +0 -60
- package/build/core/navigation.d.ts.map +1 -1
- package/build/core/navigation.js +0 -60
- package/build/core/navigation.js.map +1 -1
- package/build/core/network.d.ts +0 -5
- package/build/core/network.d.ts.map +1 -1
- package/build/core/network.js +10 -31
- package/build/core/network.js.map +1 -1
- package/build/core/networkInterceptor.d.ts +0 -19
- package/build/core/networkInterceptor.d.ts.map +1 -1
- package/build/core/networkInterceptor.js +3 -27
- package/build/core/networkInterceptor.js.map +1 -1
- package/build/core/ocr.d.ts +0 -31
- package/build/core/ocr.d.ts.map +1 -1
- package/build/core/ocr.js +1 -71
- package/build/core/ocr.js.map +1 -1
- package/build/core/paths.js +0 -1
- package/build/core/paths.js.map +1 -1
- package/build/core/posthog.js +0 -7
- package/build/core/posthog.js.map +1 -1
- package/build/core/pressables.d.ts +0 -25
- package/build/core/pressables.d.ts.map +1 -1
- package/build/core/pressables.js +0 -37
- package/build/core/pressables.js.map +1 -1
- package/build/core/probe.d.ts +0 -9
- package/build/core/probe.d.ts.map +1 -1
- package/build/core/probe.js +0 -9
- package/build/core/probe.js.map +1 -1
- package/build/core/projectMemory.d.ts +0 -2
- package/build/core/projectMemory.d.ts.map +1 -1
- package/build/core/projectMemory.js +2 -7
- package/build/core/projectMemory.js.map +1 -1
- package/build/core/projectStore.d.ts +0 -18
- package/build/core/projectStore.d.ts.map +1 -1
- package/build/core/projectStore.js +0 -19
- package/build/core/projectStore.js.map +1 -1
- package/build/core/promiseHandles.d.ts +0 -13
- package/build/core/promiseHandles.d.ts.map +1 -1
- package/build/core/promiseHandles.js +0 -25
- package/build/core/promiseHandles.js.map +1 -1
- package/build/core/register.js +0 -44
- package/build/core/register.js.map +1 -1
- package/build/core/rnGlobalsBootstrap.d.ts +0 -13
- package/build/core/rnGlobalsBootstrap.d.ts.map +1 -1
- package/build/core/rnGlobalsBootstrap.js +0 -22
- package/build/core/rnGlobalsBootstrap.js.map +1 -1
- package/build/core/routeHistory.d.ts +24 -0
- package/build/core/routeHistory.d.ts.map +1 -0
- package/build/core/routeHistory.js +186 -0
- package/build/core/routeHistory.js.map +1 -0
- package/build/core/screenLayout.d.ts +0 -11
- package/build/core/screenLayout.d.ts.map +1 -1
- package/build/core/screenLayout.js +1 -60
- package/build/core/screenLayout.js.map +1 -1
- package/build/core/screenSpace.d.ts +0 -107
- package/build/core/screenSpace.d.ts.map +1 -1
- package/build/core/screenSpace.js +0 -103
- package/build/core/screenSpace.js.map +1 -1
- package/build/core/screenSpaceDevice.d.ts +0 -8
- package/build/core/screenSpaceDevice.d.ts.map +1 -1
- package/build/core/screenSpaceDevice.js +0 -23
- package/build/core/screenSpaceDevice.js.map +1 -1
- package/build/core/screenState.d.ts +0 -73
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +6 -115
- package/build/core/screenState.js.map +1 -1
- package/build/core/sdkBridge.js +0 -8
- package/build/core/sdkBridge.js.map +1 -1
- package/build/core/sdkMirrorPoller.d.ts +0 -18
- package/build/core/sdkMirrorPoller.d.ts.map +1 -1
- package/build/core/sdkMirrorPoller.js +0 -47
- package/build/core/sdkMirrorPoller.js.map +1 -1
- package/build/core/selectionBuffer.d.ts +0 -6
- package/build/core/selectionBuffer.d.ts.map +1 -1
- package/build/core/selectionBuffer.js +0 -5
- package/build/core/selectionBuffer.js.map +1 -1
- package/build/core/signedVerdict.js +0 -6
- package/build/core/signedVerdict.js.map +1 -1
- package/build/core/state.d.ts +0 -31
- package/build/core/state.d.ts.map +1 -1
- package/build/core/state.js +0 -57
- package/build/core/state.js.map +1 -1
- package/build/core/symbolicate.js +0 -11
- package/build/core/symbolicate.js.map +1 -1
- package/build/core/telemetry.d.ts +0 -47
- package/build/core/telemetry.d.ts.map +1 -1
- package/build/core/telemetry.js +1 -173
- package/build/core/telemetry.js.map +1 -1
- package/build/core/textEntry.d.ts +0 -34
- package/build/core/textEntry.d.ts.map +1 -1
- package/build/core/textEntry.js +0 -73
- package/build/core/textEntry.js.map +1 -1
- package/build/core/toolHelpers.d.ts +0 -12
- package/build/core/toolHelpers.d.ts.map +1 -1
- package/build/core/toolHelpers.js +2 -47
- package/build/core/toolHelpers.js.map +1 -1
- package/build/core/truncate.d.ts +0 -17
- package/build/core/truncate.d.ts.map +1 -1
- package/build/core/truncate.js +0 -32
- package/build/core/truncate.js.map +1 -1
- package/build/core/types.d.ts +0 -6
- package/build/core/types.d.ts.map +1 -1
- package/build/core/usageCache.js +0 -12
- package/build/core/usageCache.js.map +1 -1
- package/build/index.js +0 -18
- package/build/index.js.map +1 -1
- package/build/pro/coordinateMiss.d.ts +0 -30
- package/build/pro/coordinateMiss.d.ts.map +1 -1
- package/build/pro/coordinateMiss.js +0 -17
- package/build/pro/coordinateMiss.js.map +1 -1
- package/build/pro/overlayGuard.d.ts +2 -40
- package/build/pro/overlayGuard.d.ts.map +1 -1
- package/build/pro/overlayGuard.js +0 -63
- package/build/pro/overlayGuard.js.map +1 -1
- package/build/pro/screenshot-diff.js +4 -6
- package/build/pro/screenshot-diff.js.map +1 -1
- package/build/pro/tap.d.ts +0 -55
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +7 -330
- package/build/pro/tap.js.map +1 -1
- package/build/pro/usageGate.js +0 -9
- package/build/pro/usageGate.js.map +1 -1
- package/build/pro/usageNotifications.js +1 -13
- package/build/pro/usageNotifications.js.map +1 -1
- package/build/pro/verifyAction.d.ts +0 -13
- package/build/pro/verifyAction.d.ts.map +1 -1
- package/build/pro/verifyAction.js +0 -45
- package/build/pro/verifyAction.js.map +1 -1
- package/build/tools/_deviceArg.d.ts +0 -35
- package/build/tools/_deviceArg.d.ts.map +1 -1
- package/build/tools/_deviceArg.js +0 -35
- package/build/tools/_deviceArg.js.map +1 -1
- package/build/tools/accountTools.js +2 -2
- package/build/tools/accountTools.js.map +1 -1
- package/build/tools/bundleTools.js +0 -16
- package/build/tools/bundleTools.js.map +1 -1
- package/build/tools/componentTools.d.ts.map +1 -1
- package/build/tools/componentTools.js +17 -45
- package/build/tools/componentTools.js.map +1 -1
- package/build/tools/connectionTools.js +1 -59
- package/build/tools/connectionTools.js.map +1 -1
- package/build/tools/deviceTools.js +0 -11
- package/build/tools/deviceTools.js.map +1 -1
- package/build/tools/executionTools.js +1 -18
- package/build/tools/executionTools.js.map +1 -1
- package/build/tools/interactionTools.d.ts +0 -10
- package/build/tools/interactionTools.d.ts.map +1 -1
- package/build/tools/interactionTools.js +0 -57
- package/build/tools/interactionTools.js.map +1 -1
- package/build/tools/logTools.d.ts +0 -13
- package/build/tools/logTools.d.ts.map +1 -1
- package/build/tools/logTools.js +2 -126
- package/build/tools/logTools.js.map +1 -1
- package/build/tools/metaTools.js +0 -10
- package/build/tools/metaTools.js.map +1 -1
- package/build/tools/networkTools.js +4 -43
- package/build/tools/networkTools.js.map +1 -1
- package/build/tools/requestTools.js +0 -5
- package/build/tools/requestTools.js.map +1 -1
- package/build/tools/screenshotTools.js +5 -111
- package/build/tools/screenshotTools.js.map +1 -1
- package/package.json +2 -2
- package/tools.json +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usageCache.js","sourceRoot":"","sources":["../../src/core/usageCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAA4B,MAAM,oBAAoB,CAAC;AAGhF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAgBlD,MAAM,YAAY,GAAG,iFAAiF,CAAC;AAEvG,IAAI,KAAK,GAAoB,SAAS,CAAC;AAEvC,MAAM,UAAU,kBAAkB;IAC9B,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,sBAA8B,EAAE,WAAmB,UAAU;IACxF,IAAI,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,KAAK,GAAG,SAAS,CAAC;YAClB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAA8B,CAAC;QACrF,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"usageCache.js","sourceRoot":"","sources":["../../src/core/usageCache.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -22,8 +22,6 @@ import { registerConnectionTools } from "./tools/connectionTools.js";
|
|
|
22
22
|
import { registerScreenshotTools } from "./tools/screenshotTools.js";
|
|
23
23
|
import { registerInteractionTools } from "./tools/interactionTools.js";
|
|
24
24
|
import { registerComponentTools } from "./tools/componentTools.js";
|
|
25
|
-
// Re-export so tests (src/__tests__/unit/toolDescriptions.test.ts) can enumerate
|
|
26
|
-
// registered tools without booting the server.
|
|
27
25
|
export { toolRegistry };
|
|
28
26
|
const server = new McpServer({
|
|
29
27
|
name: "ExecBro (Mobile DevTools)",
|
|
@@ -58,18 +56,9 @@ registerComponentTools(server);
|
|
|
58
56
|
async function main() {
|
|
59
57
|
initTelemetry();
|
|
60
58
|
identifyIfDevMode(getInstallationId());
|
|
61
|
-
// License validation is intentionally NOT pre-loaded here. It runs lazily on
|
|
62
|
-
// first real tool use (see ensureLicense() in trackToolInvocation), so that a
|
|
63
|
-
// bare MCP server boot that never invokes a tool does not hit the backend.
|
|
64
|
-
// This keeps Firebase reads/writes proportional to Active Sessions
|
|
65
|
-
// (session_start_ai_devtools) rather than Agent Sessions (session_start).
|
|
66
|
-
// Trade-off: the per-tool usage gate has no usage data on the very first tool
|
|
67
|
-
// call of a session and fails open for that single call — acceptable.
|
|
68
59
|
const useHttp = process.argv.includes("--http");
|
|
69
60
|
const httpPort = parseInt(process.env.MCP_HTTP_PORT || "8600", 10);
|
|
70
61
|
if (useHttp) {
|
|
71
|
-
// HTTP transport mode — stateless for dev hot-reload
|
|
72
|
-
// Stateless = no session IDs, so server restarts don't break Claude Code's connection
|
|
73
62
|
const transport = new StreamableHTTPServerTransport({
|
|
74
63
|
sessionIdGenerator: undefined,
|
|
75
64
|
});
|
|
@@ -88,23 +77,17 @@ async function main() {
|
|
|
88
77
|
});
|
|
89
78
|
}
|
|
90
79
|
else {
|
|
91
|
-
// Stdio transport mode — default for production
|
|
92
80
|
const transport = new StdioServerTransport();
|
|
93
81
|
await server.connect(transport);
|
|
94
82
|
console.error("[execbro] Server started on stdio");
|
|
95
83
|
}
|
|
96
84
|
}
|
|
97
|
-
// Skip boot when loaded by unit tests — tests import this module purely to
|
|
98
|
-
// enumerate `toolRegistry`. Jest sets JEST_WORKER_ID; EXECBRO_TEST_MODE
|
|
99
|
-
// (or legacy RN_AI_DEVTOOLS_TEST_MODE) is a manual escape hatch.
|
|
100
|
-
// Production + dev:mcp leave all unset and boot.
|
|
101
85
|
if (!process.env.EXECBRO_TEST_MODE && !process.env.RN_AI_DEVTOOLS_TEST_MODE && !process.env.JEST_WORKER_ID) {
|
|
102
86
|
main().catch((error) => {
|
|
103
87
|
console.error("[execbro] Fatal error:", error);
|
|
104
88
|
process.exit(1);
|
|
105
89
|
});
|
|
106
90
|
}
|
|
107
|
-
// Graceful shutdown: close CDP connections so the slot is freed for other sessions
|
|
108
91
|
function gracefulShutdown() {
|
|
109
92
|
suppressReconnection();
|
|
110
93
|
cancelAllReconnectionTimers();
|
|
@@ -113,7 +96,6 @@ function gracefulShutdown() {
|
|
|
113
96
|
app.ws.close();
|
|
114
97
|
}
|
|
115
98
|
catch {
|
|
116
|
-
// Ignore close errors during shutdown
|
|
117
99
|
}
|
|
118
100
|
connectedApps.delete(key);
|
|
119
101
|
}
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EACH,aAAa,EACb,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,GAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,53 +1,23 @@
|
|
|
1
1
|
import type { ScreenState, ScreenStatePressable } from "../core/screenState.js";
|
|
2
|
-
/**
|
|
3
|
-
* Explain why a coordinate tap produced no visual change.
|
|
4
|
-
*
|
|
5
|
-
* Coordinate taps are the second-highest-volume strategy and win 99.6% of the
|
|
6
|
-
* time — "win" only meaning the touch dispatched. ~15% of them change nothing,
|
|
7
|
-
* because the coordinates were estimated from a screenshot and landed in
|
|
8
|
-
* padding, on a label, or on an element sitting behind an open sheet. Until now
|
|
9
|
-
* the agent got "no visual change detected" and nothing else, so its only move
|
|
10
|
-
* was to screenshot and guess again.
|
|
11
|
-
*
|
|
12
|
-
* The screen-state engine already knows what occupies every point and which
|
|
13
|
-
* elements an overlay blocks. This turns that into one actionable sentence.
|
|
14
|
-
*/
|
|
15
2
|
export interface CoordinateMissTarget {
|
|
16
3
|
label: string | null;
|
|
17
4
|
component?: string | null;
|
|
18
5
|
testID: string | null;
|
|
19
|
-
/** Center in the SAME coordinate space the diagnosis was asked for. */
|
|
20
6
|
center: {
|
|
21
7
|
x: number;
|
|
22
8
|
y: number;
|
|
23
9
|
};
|
|
24
|
-
/** Edge distance from the tapped point, in that same space. */
|
|
25
10
|
distance: number;
|
|
26
|
-
/** Where the target sits relative to the tapped point, e.g. "below". */
|
|
27
11
|
direction: string;
|
|
28
12
|
blockedByOverlay?: boolean;
|
|
29
13
|
}
|
|
30
14
|
export interface CoordinateMissDiagnosis {
|
|
31
|
-
/** What occupied the tapped point, in plain words. */
|
|
32
15
|
hit: string;
|
|
33
|
-
/** Closest element the caller could tap instead. */
|
|
34
16
|
nearest?: CoordinateMissTarget;
|
|
35
|
-
/** True when the point landed on something an overlay covers. */
|
|
36
17
|
blockedByOverlay: boolean;
|
|
37
|
-
/** One-line, agent-facing next step. */
|
|
38
18
|
suggestion: string;
|
|
39
19
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Flatten root pressables and every overlay's pressables into one list.
|
|
42
|
-
* Overlay members are reachable; root members an overlay covers are not.
|
|
43
|
-
*/
|
|
44
20
|
export declare function collectPressables(state: ScreenState): ScreenStatePressable[];
|
|
45
|
-
/**
|
|
46
|
-
* @param point the tapped point, in the same space as the screen state's bounds
|
|
47
|
-
* @param toReportSpace maps a screen-state coordinate into the space the caller
|
|
48
|
-
* used for its x/y (screenshot pixels), so suggested coordinates are directly
|
|
49
|
-
* re-tappable without the agent doing any conversion.
|
|
50
|
-
*/
|
|
51
21
|
export declare function explainCoordinateMiss(point: {
|
|
52
22
|
x: number;
|
|
53
23
|
y: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinateMiss.d.ts","sourceRoot":"","sources":["../../src/pro/coordinateMiss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,WAAW,EACX,oBAAoB,EAEvB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"coordinateMiss.d.ts","sourceRoot":"","sources":["../../src/pro/coordinateMiss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,WAAW,EACX,oBAAoB,EAEvB,MAAM,wBAAwB,CAAC;AAgBhC,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEjC,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IAEpC,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAE/B,gBAAgB,EAAE,OAAO,CAAC;IAE1B,UAAU,EAAE,MAAM,CAAC;CACtB;AA8CD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,oBAAoB,EAAE,CAM5E;AAgBD,wBAAgB,qBAAqB,CACjC,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,KAAK,EAAE,WAAW,EAClB,aAAa,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAiB,GAChD,uBAAuB,GAAG,IAAI,CA+DhC"}
|
|
@@ -27,10 +27,6 @@ function nameOf(p) {
|
|
|
27
27
|
parts.push(`testID="${p.testID}"`);
|
|
28
28
|
return parts.length > 0 ? parts.join(" ") : "an unlabelled pressable";
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Flatten root pressables and every overlay's pressables into one list.
|
|
32
|
-
* Overlay members are reachable; root members an overlay covers are not.
|
|
33
|
-
*/
|
|
34
30
|
export function collectPressables(state) {
|
|
35
31
|
const all = [...(state.pressables ?? [])];
|
|
36
32
|
for (const overlay of state.overlays ?? []) {
|
|
@@ -45,12 +41,6 @@ function collectTexts(state) {
|
|
|
45
41
|
}
|
|
46
42
|
return all;
|
|
47
43
|
}
|
|
48
|
-
/**
|
|
49
|
-
* @param point the tapped point, in the same space as the screen state's bounds
|
|
50
|
-
* @param toReportSpace maps a screen-state coordinate into the space the caller
|
|
51
|
-
* used for its x/y (screenshot pixels), so suggested coordinates are directly
|
|
52
|
-
* re-tappable without the agent doing any conversion.
|
|
53
|
-
*/
|
|
54
44
|
export function explainCoordinateMiss(point, state, toReportSpace = (v) => v) {
|
|
55
45
|
const pressables = collectPressables(state);
|
|
56
46
|
const texts = collectTexts(state);
|
|
@@ -69,10 +59,6 @@ export function explainCoordinateMiss(point, state, toReportSpace = (v) => v) {
|
|
|
69
59
|
const nearestReachable = reachable
|
|
70
60
|
.map(toTarget)
|
|
71
61
|
.sort((a, b) => a.distance - b.distance)[0];
|
|
72
|
-
// 1. The point is inside a REACHABLE pressable — the coordinates were right,
|
|
73
|
-
// so the handler is the suspect, not the aim. Checked before the blocked
|
|
74
|
-
// case because an overlay button and the element it covers can share a
|
|
75
|
-
// point; the touch goes to the overlay, so that is what we must report.
|
|
76
62
|
const pressableHit = reachable.find((p) => contains(point, p.bounds));
|
|
77
63
|
if (pressableHit) {
|
|
78
64
|
return {
|
|
@@ -81,8 +67,6 @@ export function explainCoordinateMiss(point, state, toReportSpace = (v) => v) {
|
|
|
81
67
|
suggestion: `The tap landed inside ${nameOf(pressableHit)}, so the coordinates were correct — the press produced no visual change. Check the element's onPress handler, or use burst=true if the feedback is transient.`,
|
|
82
68
|
};
|
|
83
69
|
}
|
|
84
|
-
// 2. The point is inside a pressable that an overlay covers — the single
|
|
85
|
-
// most misleading case, because the pixels are visible on screen.
|
|
86
70
|
const blockedHit = pressables.find((p) => p.blockedByOverlay && contains(point, p.bounds));
|
|
87
71
|
if (blockedHit) {
|
|
88
72
|
const overlayType = state.overlays?.[0]?.type ?? "overlay";
|
|
@@ -95,7 +79,6 @@ export function explainCoordinateMiss(point, state, toReportSpace = (v) => v) {
|
|
|
95
79
|
: `That element is behind an open ${overlayType} and cannot receive taps. Dismiss the ${overlayType} first.`,
|
|
96
80
|
};
|
|
97
81
|
}
|
|
98
|
-
// 3. The point is on text or empty space — the aim missed.
|
|
99
82
|
const textHit = texts.find((t) => contains(point, t.bounds));
|
|
100
83
|
const hit = textHit
|
|
101
84
|
? `text "${textHit.text.slice(0, 60)}"`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinateMiss.js","sourceRoot":"","sources":["../../src/pro/coordinateMiss.ts"],"names":[],"mappings":"AA4CA,SAAS,YAAY,CACjB,KAA+B,EAC/B,CAA0D;IAE1D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,QAAQ,CACb,KAA+B,EAC/B,CAA0D;IAE1D,OAAO,CACH,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACd,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;QACxB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACd,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAC5B,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CACtB,KAA+B,EAC/B,MAAgC;IAEhC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACrE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACpD,CAAC;AAED,SAAS,MAAM,CAAC,CAAuB;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC;IAC/C,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC;AAC1E,CAAC;
|
|
1
|
+
{"version":3,"file":"coordinateMiss.js","sourceRoot":"","sources":["../../src/pro/coordinateMiss.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pre-dispatch overlay guard for `tap`.
|
|
3
|
-
*
|
|
4
|
-
* The OS always delivers a touch to the topmost view, so a coordinate tap physically
|
|
5
|
-
* cannot reach an element that an overlay is painted over — the touch goes to the
|
|
6
|
-
* overlay. That is correct behaviour and nothing about tap dispatch should change.
|
|
7
|
-
*
|
|
8
|
-
* What must change is that execbro not fire such a tap at all. In the reported case the
|
|
9
|
-
* touch did not vanish harmlessly: it opened a sheet's network-request detail view, so
|
|
10
|
-
* execbro mutated app state the agent never asked to change and was never told about.
|
|
11
|
-
* Declining is strictly better, and the agent's correct next move — dismiss the overlay,
|
|
12
|
-
* then retry — is the same either way.
|
|
13
|
-
*
|
|
14
|
-
* The check runs on the resolved TARGET, not on the strategy, because every strategy
|
|
15
|
-
* (fiber, accessibility, OCR, raw coordinates) funnels into a coordinate tap.
|
|
16
|
-
*/
|
|
17
1
|
import type { ScreenState } from "../core/screenState.js";
|
|
18
|
-
export type OverlayVerdict =
|
|
19
|
-
/** Nothing reachable at the target; an overlay is painted over it. Do not dispatch. */
|
|
20
|
-
{
|
|
2
|
+
export type OverlayVerdict = {
|
|
21
3
|
kind: "blocked";
|
|
22
4
|
element: string;
|
|
23
5
|
overlay: string;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* A coordinate that an overlay's own control occupies, while a covered element also
|
|
27
|
-
* sits underneath it. The tap is legitimate — the OS will deliver it to the overlay
|
|
28
|
-
* control, which is a real element — but the caller may well have been aiming at the
|
|
29
|
-
* thing behind. Dispatch, and say which one actually got it.
|
|
30
|
-
*/
|
|
31
|
-
| {
|
|
6
|
+
} | {
|
|
32
7
|
kind: "shadowed";
|
|
33
8
|
hit: string;
|
|
34
9
|
covered: string;
|
|
@@ -41,20 +16,7 @@ export interface OverlayGuardQuery {
|
|
|
41
16
|
x?: number;
|
|
42
17
|
y?: number;
|
|
43
18
|
}
|
|
44
|
-
/**
|
|
45
|
-
* The decision itself, over a screen state whose coordinates are already in the caller's
|
|
46
|
-
* delivered-pixel space. Pure and exported so the refusal rules — the ones that can break
|
|
47
|
-
* every tap in the product if they are wrong — are testable without a device.
|
|
48
|
-
*
|
|
49
|
-
* Returns null for anything short of a confident "blocked". A guard that fires on
|
|
50
|
-
* uncertainty blocks legitimate taps, which is a worse failure than the mis-delivery it
|
|
51
|
-
* is trying to prevent.
|
|
52
|
-
*/
|
|
53
19
|
export declare function decideOverlayBlock(ss: ScreenState, query: OverlayGuardQuery): OverlayVerdict | null;
|
|
54
|
-
/**
|
|
55
|
-
* Read the current screen, normalise it into the caller's coordinate space, and apply
|
|
56
|
-
* {@link decideOverlayBlock}. Null on any I/O failure — see that function's contract.
|
|
57
|
-
*/
|
|
58
20
|
export declare function checkOverlayBlocking(args: {
|
|
59
21
|
query: OverlayGuardQuery;
|
|
60
22
|
platform: "ios" | "android";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlayGuard.d.ts","sourceRoot":"","sources":["../../src/pro/overlayGuard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"overlayGuard.d.ts","sourceRoot":"","sources":["../../src/pro/overlayGuard.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,wBAAwB,CAAC;AAIhF,MAAM,MAAM,cAAc,GAEpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAOrD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACd;AAgED,wBAAgB,kBAAkB,CAC9B,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,iBAAiB,GACzB,cAAc,GAAG,IAAI,CA2DvB;AAMD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC7C,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAsBjC"}
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pre-dispatch overlay guard for `tap`.
|
|
3
|
-
*
|
|
4
|
-
* The OS always delivers a touch to the topmost view, so a coordinate tap physically
|
|
5
|
-
* cannot reach an element that an overlay is painted over — the touch goes to the
|
|
6
|
-
* overlay. That is correct behaviour and nothing about tap dispatch should change.
|
|
7
|
-
*
|
|
8
|
-
* What must change is that execbro not fire such a tap at all. In the reported case the
|
|
9
|
-
* touch did not vanish harmlessly: it opened a sheet's network-request detail view, so
|
|
10
|
-
* execbro mutated app state the agent never asked to change and was never told about.
|
|
11
|
-
* Declining is strictly better, and the agent's correct next move — dismiss the overlay,
|
|
12
|
-
* then retry — is the same either way.
|
|
13
|
-
*
|
|
14
|
-
* The check runs on the resolved TARGET, not on the strategy, because every strategy
|
|
15
|
-
* (fiber, accessibility, OCR, raw coordinates) funnels into a coordinate tap.
|
|
16
|
-
*/
|
|
17
1
|
import { getScreenState } from "../core/screenState.js";
|
|
18
2
|
import { screenStateToScreenSpace, screenStateToDeliveredPx } from "../core/screenSpace.js";
|
|
19
3
|
import { resolveScreenSpaceMetrics } from "../core/screenSpaceDevice.js";
|
|
@@ -24,14 +8,9 @@ function describePressable(p) {
|
|
|
24
8
|
return `${tag}${label}${tid}`;
|
|
25
9
|
}
|
|
26
10
|
function describeOverlay(o) {
|
|
27
|
-
// "Unknown" is the internal bucket for a sheet recognised by geometry rather than by
|
|
28
|
-
// component name. Surfacing that word to an agent reads like a failure, when the
|
|
29
|
-
// finding itself is certain — it is the overlay's identity that is unknown, not its
|
|
30
|
-
// presence.
|
|
31
11
|
const kind = o.type === "Unknown" ? "overlay" : o.type;
|
|
32
12
|
return o.title ? `${kind} "${o.title}"` : kind;
|
|
33
13
|
}
|
|
34
|
-
/** Smallest pressable whose box contains the point — the innermost, most specific hit. */
|
|
35
14
|
function hitAt(candidates, x, y) {
|
|
36
15
|
let best = null;
|
|
37
16
|
let bestArea = Infinity;
|
|
@@ -47,15 +26,6 @@ function hitAt(candidates, x, y) {
|
|
|
47
26
|
}
|
|
48
27
|
return best;
|
|
49
28
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Any provided field matching is a match — deliberately not a priority chain.
|
|
52
|
-
*
|
|
53
|
-
* tap itself tries testID, then text, then component, and settles for whichever resolves.
|
|
54
|
-
* A guard that only consulted the highest-priority field would wave through
|
|
55
|
-
* `tap({testID: "nope", text: "State, tab, 2 of 4"})`: the testID matches nothing, so the
|
|
56
|
-
* chain returns "not found" and dispatch proceeds — on the text, straight into the
|
|
57
|
-
* overlay. Which is exactly the bug, reached by a different door.
|
|
58
|
-
*/
|
|
59
29
|
function matchesQuery(p, q) {
|
|
60
30
|
if (q.testID && p.testID === q.testID)
|
|
61
31
|
return true;
|
|
@@ -69,26 +39,12 @@ function matchesQuery(p, q) {
|
|
|
69
39
|
}
|
|
70
40
|
return false;
|
|
71
41
|
}
|
|
72
|
-
/**
|
|
73
|
-
* The decision itself, over a screen state whose coordinates are already in the caller's
|
|
74
|
-
* delivered-pixel space. Pure and exported so the refusal rules — the ones that can break
|
|
75
|
-
* every tap in the product if they are wrong — are testable without a device.
|
|
76
|
-
*
|
|
77
|
-
* Returns null for anything short of a confident "blocked". A guard that fires on
|
|
78
|
-
* uncertainty blocks legitimate taps, which is a worse failure than the mis-delivery it
|
|
79
|
-
* is trying to prevent.
|
|
80
|
-
*/
|
|
81
42
|
export function decideOverlayBlock(ss, query) {
|
|
82
43
|
if (!ss.overlays || ss.overlays.length === 0)
|
|
83
44
|
return null;
|
|
84
45
|
const blocked = ss.pressables.filter((p) => p.blockedByOverlay);
|
|
85
46
|
if (blocked.length === 0)
|
|
86
47
|
return null;
|
|
87
|
-
// Everything a touch CAN reach: root pressables that nothing covers, plus the
|
|
88
|
-
// overlays' own controls. The latter are the whole point of an open sheet and are
|
|
89
|
-
// stored separately from ss.pressables — omitting them made the guard refuse taps on
|
|
90
|
-
// the sheet itself, because the only element it found under the point was the covered
|
|
91
|
-
// one behind it.
|
|
92
48
|
const reachable = ss.pressables.filter((p) => !p.blockedByOverlay);
|
|
93
49
|
const overlayOwned = new Set();
|
|
94
50
|
for (const o of ss.overlays) {
|
|
@@ -97,24 +53,13 @@ export function decideOverlayBlock(ss, query) {
|
|
|
97
53
|
overlayOwned.add(p);
|
|
98
54
|
}
|
|
99
55
|
}
|
|
100
|
-
// Safety valve. If the model says nothing at all on screen can be tapped, the model is
|
|
101
|
-
// far likelier to be wrong than the screen is to be inert — a `fullCover` overlay
|
|
102
|
-
// expands its block region to the entire viewport, so one misclassification there
|
|
103
|
-
// would refuse every tap in the app with no way back. Declining to judge keeps this
|
|
104
|
-
// guard's worst case "behaves like before" instead of "tap is dead".
|
|
105
56
|
if (reachable.length === 0)
|
|
106
57
|
return null;
|
|
107
58
|
const overlayNames = ss.overlays.map(describeOverlay).join(", ");
|
|
108
59
|
let target = null;
|
|
109
60
|
if (query.x !== undefined && query.y !== undefined) {
|
|
110
|
-
// Whatever reachable element sits under the point is what the OS will deliver to,
|
|
111
|
-
// whether it belongs to the app or to the sheet. The tap is legitimate.
|
|
112
61
|
const hit = hitAt(reachable, query.x, query.y);
|
|
113
62
|
if (hit) {
|
|
114
|
-
// ...but if a covered element is under the same point and the winner is the
|
|
115
|
-
// overlay's, the caller was plausibly aiming at the thing behind. Dispatching
|
|
116
|
-
// silently here is the original bug in miniature: the right element receives
|
|
117
|
-
// the touch, and the caller is never told it was not the one they meant.
|
|
118
63
|
const covered = hitAt(blocked, query.x, query.y);
|
|
119
64
|
if (covered && overlayOwned.has(hit)) {
|
|
120
65
|
return {
|
|
@@ -129,7 +74,6 @@ export function decideOverlayBlock(ss, query) {
|
|
|
129
74
|
target = hitAt(blocked, query.x, query.y);
|
|
130
75
|
}
|
|
131
76
|
else {
|
|
132
|
-
// A named target that also exists reachable somewhere on screen is fine.
|
|
133
77
|
if (reachable.some((p) => matchesQuery(p, query)))
|
|
134
78
|
return null;
|
|
135
79
|
target = blocked.find((p) => matchesQuery(p, query)) ?? null;
|
|
@@ -138,10 +82,6 @@ export function decideOverlayBlock(ss, query) {
|
|
|
138
82
|
return null;
|
|
139
83
|
return { kind: "blocked", element: describePressable(target), overlay: overlayNames };
|
|
140
84
|
}
|
|
141
|
-
/**
|
|
142
|
-
* Read the current screen, normalise it into the caller's coordinate space, and apply
|
|
143
|
-
* {@link decideOverlayBlock}. Null on any I/O failure — see that function's contract.
|
|
144
|
-
*/
|
|
145
85
|
export async function checkOverlayBlocking(args) {
|
|
146
86
|
try {
|
|
147
87
|
const [res, metrics] = await Promise.all([
|
|
@@ -154,12 +94,9 @@ export async function checkOverlayBlocking(args) {
|
|
|
154
94
|
]);
|
|
155
95
|
if (!res.success || !res.screenState)
|
|
156
96
|
return null;
|
|
157
|
-
// Inset then scale — the same normalisation the layout tools emit with, so these
|
|
158
|
-
// bounds and the caller's coordinates are the one canonical delivered-pixel space.
|
|
159
97
|
return decideOverlayBlock(screenStateToDeliveredPx(screenStateToScreenSpace(res.screenState, metrics), metrics), args.query);
|
|
160
98
|
}
|
|
161
99
|
catch {
|
|
162
|
-
// Best-effort: a guard that throws must never turn a valid tap into an error.
|
|
163
100
|
return null;
|
|
164
101
|
}
|
|
165
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlayGuard.js","sourceRoot":"","sources":["../../src/pro/overlayGuard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"overlayGuard.js","sourceRoot":"","sources":["../../src/pro/overlayGuard.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAqBzE,SAAS,iBAAiB,CAAC,CAAuB;IAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,eAAe,CAAC,CAAyC;IAK9D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAGD,SAAS,KAAK,CAAC,UAAkC,EAAE,CAAS,EAAE,CAAS;IACnE,IAAI,IAAI,GAAgC,IAAI,CAAC;IAC7C,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM;YAAE,SAAS;QAC5E,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QAChC,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,CAAC;YACT,QAAQ,GAAG,IAAI,CAAC;QACpB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAWD,SAAS,YAAY,CAAC,CAAuB,EAAE,CAAoB;IAC/D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACT,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;QACnE,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAWD,MAAM,UAAU,kBAAkB,CAC9B,EAAe,EACf,KAAwB;IAExB,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1D,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAOtC,MAAM,SAAS,GAA2B,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YACjC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAOD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjE,IAAI,MAAM,GAAgC,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAGjD,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,GAAG,EAAE,CAAC;YAKN,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO;oBACH,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC;oBAC3B,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;oBACnC,OAAO,EAAE,YAAY;iBACxB,CAAC;YACN,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QAEJ,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/D,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1F,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAM1C;IACG,IAAI,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3C,yBAAyB,CAAC;gBACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;aAC1B,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAIlD,OAAO,kBAAkB,CACrB,wBAAwB,CAAC,wBAAwB,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EACrF,IAAI,CAAC,KAAK,CACb,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QAEL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import pixelmatch from "pixelmatch";
|
|
2
2
|
import sharp from "sharp";
|
|
3
|
-
const POSSIBLE_CHANGE = 0.0005;
|
|
4
|
-
const MIN_CHANGED_PIXELS = 200;
|
|
5
|
-
const PIXEL_THRESHOLD = 0.1;
|
|
3
|
+
const POSSIBLE_CHANGE = 0.0005;
|
|
4
|
+
const MIN_CHANGED_PIXELS = 200;
|
|
5
|
+
const PIXEL_THRESHOLD = 0.1;
|
|
6
6
|
export async function compareScreenshots(before, after, options) {
|
|
7
7
|
const [imgBefore, imgAfter] = await Promise.all([
|
|
8
8
|
sharp(before).ensureAlpha().raw().toBuffer({ resolveWithObject: true }),
|
|
9
9
|
sharp(after).ensureAlpha().raw().toBuffer({ resolveWithObject: true }),
|
|
10
10
|
]);
|
|
11
|
-
// If dimensions differ, treat as fully changed (screen transition likely)
|
|
12
11
|
if (imgBefore.info.width !== imgAfter.info.width || imgBefore.info.height !== imgAfter.info.height) {
|
|
13
12
|
return {
|
|
14
13
|
changed: true,
|
|
@@ -18,11 +17,10 @@ export async function compareScreenshots(before, after, options) {
|
|
|
18
17
|
};
|
|
19
18
|
}
|
|
20
19
|
const { width, height } = imgBefore.info;
|
|
21
|
-
// Crop out status bar: skip the first statusBarPx rows of pixels
|
|
22
20
|
const statusBarPx = options?.statusBarHeight ?? 0;
|
|
23
21
|
const croppedHeight = height - statusBarPx;
|
|
24
22
|
const totalPixels = width * croppedHeight;
|
|
25
|
-
const rowBytes = width * 4;
|
|
23
|
+
const rowBytes = width * 4;
|
|
26
24
|
const skipBytes = statusBarPx * rowBytes;
|
|
27
25
|
const beforeData = new Uint8Array(imgBefore.data.buffer, imgBefore.data.byteOffset + skipBytes, croppedHeight * rowBytes);
|
|
28
26
|
const afterData = new Uint8Array(imgAfter.data.buffer, imgAfter.data.byteOffset + skipBytes, croppedHeight * rowBytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot-diff.js","sourceRoot":"","sources":["../../src/pro/screenshot-diff.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,MAAM,eAAe,GAAG,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"screenshot-diff.js","sourceRoot":"","sources":["../../src/pro/screenshot-diff.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,MAAc,EACd,KAAa,EACb,OAAsC;IAEtC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5C,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QACvE,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;KACzE,CAAC,CAAC;IAGH,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjG,OAAO;YACH,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,IAAI,CAAC,GAAG,CACnB,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAC5C,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAC7C;YACD,WAAW,EAAE,IAAI,CAAC,GAAG,CACjB,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAC5C,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAC7C;SACJ,CAAC;IACN,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;IAGzC,MAAM,WAAW,GAAG,OAAO,EAAE,eAAe,IAAI,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;IAC3C,MAAM,WAAW,GAAG,KAAK,GAAG,aAAa,CAAC;IAE1C,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAEzC,MAAM,UAAU,GAAG,IAAI,UAAU,CAC7B,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,EAAE,aAAa,GAAG,QAAQ,CACzF,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,UAAU,CAC5B,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,EAAE,aAAa,GAAG,QAAQ,CACvF,CAAC;IAEF,MAAM,aAAa,GAAG,UAAU,CAC5B,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,aAAa,EACb,EAAE,SAAS,EAAE,eAAe,EAAE,CACjC,CAAC;IAEF,MAAM,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;IAE/C,OAAO;QACH,OAAO,EAAE,UAAU,IAAI,eAAe,IAAI,aAAa,IAAI,kBAAkB;QAC7E,UAAU;QACV,aAAa;QACb,WAAW;KACd,CAAC;AACN,CAAC"}
|
package/build/pro/tap.d.ts
CHANGED
|
@@ -21,12 +21,6 @@ export interface TapOptions {
|
|
|
21
21
|
screenshot?: boolean;
|
|
22
22
|
verify?: boolean;
|
|
23
23
|
burst?: boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Target device. Accepts an iOS simulator UDID, an Android adb serial,
|
|
26
|
-
* or a substring matched against connected RN apps / booted simulators /
|
|
27
|
-
* attached Android devices. See deviceResolver.resolveDeviceTarget for
|
|
28
|
-
* the full resolution algorithm.
|
|
29
|
-
*/
|
|
30
24
|
device?: string;
|
|
31
25
|
}
|
|
32
26
|
export type TapAttemptOutcome = "not-found" | "timeout" | "skipped" | "invisible" | "ambiguous" | "error";
|
|
@@ -118,20 +112,9 @@ export interface TapResult {
|
|
|
118
112
|
fiberPressableCount?: string;
|
|
119
113
|
accessibilityMatchCount?: string;
|
|
120
114
|
appRoute?: string;
|
|
121
|
-
/**
|
|
122
|
-
* Why a coordinate tap changed nothing: what occupied the point, whether an
|
|
123
|
-
* overlay covers it, and the nearest reachable pressable with re-tappable
|
|
124
|
-
* coordinates. Populated only on unmeaningful coordinate taps with a live
|
|
125
|
-
* Metro connection.
|
|
126
|
-
*/
|
|
127
115
|
missDiagnosis?: CoordinateMissDiagnosis;
|
|
128
116
|
}
|
|
129
117
|
export declare function buildQuery(options: TapOptions): TapQuery;
|
|
130
|
-
/**
|
|
131
|
-
* Check if text contains characters that break Hermes Runtime.evaluate.
|
|
132
|
-
* Standard accented Latin characters (Polish, Vietnamese, French, German, etc.)
|
|
133
|
-
* and Cyrillic work fine in Hermes. Only emoji and special Unicode ranges cause issues.
|
|
134
|
-
*/
|
|
135
118
|
export declare function hasProblematicUnicode(text: string): boolean;
|
|
136
119
|
export interface OcrMatch {
|
|
137
120
|
text: string;
|
|
@@ -140,17 +123,6 @@ export interface OcrMatch {
|
|
|
140
123
|
y: number;
|
|
141
124
|
};
|
|
142
125
|
}
|
|
143
|
-
/**
|
|
144
|
-
* 2026-05-16: Reconstruct lines from individual OCR words when the engine fragmented a
|
|
145
|
-
* visible phrase across separate word detections. This happens when a leading icon
|
|
146
|
-
* (Google "G", Apple logo, Microsoft squares) disrupts iOS Vision's line-baseline
|
|
147
|
-
* grouping, so "Continue with Google" comes back as three separate words instead of
|
|
148
|
-
* one OCRLine. Without this, findOcrMatch's word/line substring scan misses the phrase.
|
|
149
|
-
*
|
|
150
|
-
* Grouping rule: words whose vertical centers are within half the running median word
|
|
151
|
-
* height land on the same reconstructed line. Words are sorted left-to-right within
|
|
152
|
-
* the line and joined with a single space. Exported for unit tests.
|
|
153
|
-
*/
|
|
154
126
|
export interface ReconstructedOcrLine {
|
|
155
127
|
text: string;
|
|
156
128
|
bbox: {
|
|
@@ -168,31 +140,12 @@ export interface ReconstructedOcrLine {
|
|
|
168
140
|
export declare function reconstructLinesFromWords(words: OCRWord[]): ReconstructedOcrLine[];
|
|
169
141
|
export declare function findOcrMatch(ocrResult: OCRResult, query: string): OcrMatch | null;
|
|
170
142
|
export declare function getAvailableStrategies(query: TapQuery, strategy: TapStrategy): string[];
|
|
171
|
-
/**
|
|
172
|
-
* Convert screenshot image coordinates to platform-native tap coordinates.
|
|
173
|
-
*
|
|
174
|
-
* For iOS: screenshot pixels → device pixels (undo downscale) → points (÷ DPR)
|
|
175
|
-
* For Android: screenshot pixels → device pixels (undo downscale)
|
|
176
|
-
*
|
|
177
|
-
* IMPORTANT: Only use this for EXTERNAL coordinates from screenshots.
|
|
178
|
-
* Internal strategies (OCR, accessibility, fiber) produce tap-ready coordinates
|
|
179
|
-
* and call iosTap/androidTap directly — they must NOT go through this function.
|
|
180
|
-
*/
|
|
181
143
|
export declare function convertScreenshotToTapCoords(pixelX: number, pixelY: number, platform: "ios" | "android", devicePixelRatio: number, scaleFactor?: number): {
|
|
182
144
|
x: number;
|
|
183
145
|
y: number;
|
|
184
146
|
};
|
|
185
|
-
/** @deprecated Use convertScreenshotToTapCoords instead */
|
|
186
147
|
export declare const convertPixelsToPoints: typeof convertScreenshotToTapCoords;
|
|
187
148
|
export type SwipeDirection = "up" | "down" | "left" | "right";
|
|
188
|
-
/**
|
|
189
|
-
* Turn a swipe direction (+ optional pixel distance) into screenshot-pixel
|
|
190
|
-
* start/end coordinates, centered on the screen. Content-scroll semantics:
|
|
191
|
-
* "up" = finger travels bottom→top, revealing content below.
|
|
192
|
-
* Distance defaults to 33% of the relevant axis and endpoints clamp to the
|
|
193
|
-
* 10%–90% margin so the gesture never runs off-screen. Exact travel length is
|
|
194
|
-
* preserved; for odd distances the band may sit ≤1px off the axis midpoint.
|
|
195
|
-
*/
|
|
196
149
|
export declare function computeSwipeFromDirection(direction: SwipeDirection, distance: number | undefined, width: number, height: number): {
|
|
197
150
|
startX: number;
|
|
198
151
|
startY: number;
|
|
@@ -282,13 +235,6 @@ export interface EvidenceSink {
|
|
|
282
235
|
text: string;
|
|
283
236
|
score: number;
|
|
284
237
|
} | null;
|
|
285
|
-
/**
|
|
286
|
-
* The best OCR candidate found, with tap-ready coordinates and the
|
|
287
|
-
* scale factor used to capture the screenshot. Set as soon as
|
|
288
|
-
* findOcrMatch resolves, BEFORE any tap-execution code runs, so the
|
|
289
|
-
* orchestrator can recover from a 30ms-late OCR strategy timeout when
|
|
290
|
-
* the candidate score is high enough (Step 2 in 2026-05-15 plan).
|
|
291
|
-
*/
|
|
292
238
|
bestCandidate: {
|
|
293
239
|
text: string;
|
|
294
240
|
score: number;
|
|
@@ -310,7 +256,6 @@ export declare function isTapTimeout(attempted: readonly {
|
|
|
310
256
|
strategy?: string;
|
|
311
257
|
outcome?: TapAttemptOutcome;
|
|
312
258
|
}[]): boolean;
|
|
313
|
-
/** Test-only: drop the dedup state so a fresh tap always uploads. */
|
|
314
259
|
export declare function resetCoordArtifactDedup(): void;
|
|
315
260
|
export declare function tap(options: TapOptions): Promise<TapResult>;
|
|
316
261
|
//# sourceMappingURL=tap.d.ts.map
|