swipium 1.4.0 → 2.0.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/CHANGELOG.md +313 -0
- package/README.md +175 -219
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +39 -26
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +68 -20
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +31 -5
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +23 -5
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +44 -8
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +24 -6
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/fsWalk.js +19 -2
- package/dist/appMap/fsWalk.js.map +1 -1
- package/dist/appMap/issues.js +10 -30
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +6 -6
- package/dist/appMap/migrations.js.map +1 -1
- package/dist/appMap/prelaunch.js +2 -2
- package/dist/appMap/prelaunch.js.map +1 -1
- package/dist/appMap/projectRegistry.js +83 -11
- package/dist/appMap/projectRegistry.js.map +1 -1
- package/dist/appMap/provenance.js +2 -2
- package/dist/appMap/provenance.js.map +1 -1
- package/dist/appMap/query.js +21 -5
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +12 -5
- package/dist/appMap/runtimeMerge.js.map +1 -1
- package/dist/appMap/schema.js +1 -1
- package/dist/appMap/schema.js.map +1 -1
- package/dist/appMap/screenMatch.js +6 -2
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +151 -39
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +58 -85
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +34 -12
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +49 -12
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +41 -14
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +112 -30
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +6 -2
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +71 -23
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +15 -5
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +22 -28
- package/dist/automation/selectors.js.map +1 -1
- package/dist/automation/types.js +1 -1
- package/dist/automation/types.js.map +1 -1
- package/dist/automation/waits.js +14 -8
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +9 -3
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +16 -8
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +6 -6
- package/dist/automationGen/ciEmitter.js.map +1 -1
- package/dist/automationGen/identifiers.js +224 -0
- package/dist/automationGen/identifiers.js.map +1 -0
- package/dist/automationGen/jsEmitter.js +288 -121
- package/dist/automationGen/jsEmitter.js.map +1 -1
- package/dist/automationGen/packagePatch.js +2 -2
- package/dist/automationGen/packagePatch.js.map +1 -1
- package/dist/automationGen/platformResolve.js +36 -0
- package/dist/automationGen/platformResolve.js.map +1 -0
- package/dist/automationGen/projectProfile.js +76 -27
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +278 -107
- package/dist/automationGen/pythonEmitter.js.map +1 -1
- package/dist/automationGen/readmeEmitter.js +7 -6
- package/dist/automationGen/readmeEmitter.js.map +1 -1
- package/dist/automationGen/run.js +388 -0
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +17 -10
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +52 -12
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +235 -31
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +39 -18
- package/dist/build/plan.js.map +1 -1
- package/dist/ci/preflight.js +13 -4
- package/dist/ci/preflight.js.map +1 -1
- package/dist/cli/gc.js +74 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/init.js +217 -26
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +50 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/report.js +218 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.js +36 -15
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +7 -7
- package/dist/cli/suite.js.map +1 -1
- package/dist/cli/verify.js +7 -7
- package/dist/cli/verify.js.map +1 -1
- package/dist/consent/consent.js +162 -5
- package/dist/consent/consent.js.map +1 -1
- package/dist/context/detect.js +55 -18
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +22 -8
- package/dist/context/findApps.js.map +1 -1
- package/dist/context/projectRoot.js +174 -19
- package/dist/context/projectRoot.js.map +1 -1
- package/dist/context/scan.js +1 -1
- package/dist/context/scan.js.map +1 -1
- package/dist/core/capabilityGroups.js +90 -0
- package/dist/core/capabilityGroups.js.map +1 -0
- package/dist/core/target.js +10 -8
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +160 -39
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +317 -43
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +124 -8
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +365 -55
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +7 -3
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +15 -6
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/memory.js +4 -1
- package/dist/explore/memory.js.map +1 -1
- package/dist/explore/planner.js +54 -9
- package/dist/explore/planner.js.map +1 -1
- package/dist/explore/policy.js +11 -6
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +363 -190
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +4 -2
- package/dist/explore/signatures.js.map +1 -1
- package/dist/explore/suite.js +3 -1
- package/dist/explore/suite.js.map +1 -1
- package/dist/featureTesting/executionBootstrap.js +137 -29
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +6 -3
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +101 -20
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +44 -15
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +15 -11
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +16 -8
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +8 -5
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +8 -2
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +32 -4
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +27 -15
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +34 -12
- package/dist/featureTesting/testPlan.js.map +1 -1
- package/dist/firstRun/authStateMachine.js +1 -1
- package/dist/firstRun/authStateMachine.js.map +1 -1
- package/dist/firstRun/classifyScreen.js +9 -6
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +16 -13
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +92 -31
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +25 -15
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +45 -11
- package/dist/firstRun/inputPlanner.js.map +1 -1
- package/dist/firstRun/onboardingStateMachine.js +1 -1
- package/dist/firstRun/onboardingStateMachine.js.map +1 -1
- package/dist/firstRun/paywallPolicy.js +3 -3
- package/dist/firstRun/paywallPolicy.js.map +1 -1
- package/dist/firstRun/types.js +1 -1
- package/dist/firstRun/types.js.map +1 -1
- package/dist/fixtures/catalog.js +72 -9
- package/dist/fixtures/catalog.js.map +1 -1
- package/dist/fixtures/load.js +50 -0
- package/dist/fixtures/load.js.map +1 -0
- package/dist/flows/discover.js +2 -2
- package/dist/flows/discover.js.map +1 -1
- package/dist/flows/generate.js +68 -17
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/lint.js +88 -14
- package/dist/flows/lint.js.map +1 -1
- package/dist/flows/pack.js +21 -5
- package/dist/flows/pack.js.map +1 -1
- package/dist/flows/paths.js +57 -0
- package/dist/flows/paths.js.map +1 -0
- package/dist/flows/repair.js +176 -37
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +308 -99
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +107 -25
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +8 -4
- package/dist/flows/seedExec.js.map +1 -1
- package/dist/flows/templates.js +5 -5
- package/dist/index.js +50 -8
- package/dist/index.js.map +1 -1
- package/dist/ios/signing.js +32 -3
- package/dist/ios/signing.js.map +1 -1
- package/dist/issues/classify.js +28 -20
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +35 -9
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +93 -46
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +6 -5
- package/dist/issues/metrics.js.map +1 -1
- package/dist/issues/recurrence.js +35 -8
- package/dist/issues/recurrence.js.map +1 -1
- package/dist/issues/report.js +12 -8
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +40 -9
- package/dist/issues/reportBridge.js.map +1 -1
- package/dist/issues/schema.js +2 -2
- package/dist/issues/schema.js.map +1 -1
- package/dist/issues/sourceRevision.js +2 -2
- package/dist/issues/sourceRevision.js.map +1 -1
- package/dist/issues/store.js +110 -32
- package/dist/issues/store.js.map +1 -1
- package/dist/lib/abortScope.js +48 -0
- package/dist/lib/abortScope.js.map +1 -0
- package/dist/lib/android.js +84 -8
- package/dist/lib/android.js.map +1 -1
- package/dist/lib/coordSpace.js +1 -1
- package/dist/lib/coordSpace.js.map +1 -1
- package/dist/lib/device.js +53 -12
- package/dist/lib/device.js.map +1 -1
- package/dist/lib/gestures.js +141 -0
- package/dist/lib/gestures.js.map +1 -0
- package/dist/lib/gitignore.js +4 -3
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/image.js +12 -3
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +399 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/needsInput.js +9 -6
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +4 -3
- package/dist/lib/png.js.map +1 -1
- package/dist/lib/redact.js +170 -9
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/result.js +94 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +7 -5
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +6 -3
- package/dist/lib/sensitive.js.map +1 -1
- package/dist/lib/simctl.js +3 -3
- package/dist/lib/simctl.js.map +1 -1
- package/dist/lib/spawn.js +78 -17
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/toolAnnotations.js +114 -0
- package/dist/lib/toolAnnotations.js.map +1 -0
- package/dist/lib/wda.js +321 -25
- package/dist/lib/wda.js.map +1 -1
- package/dist/lib/wdaConfig.js +12 -5
- package/dist/lib/wdaConfig.js.map +1 -1
- package/dist/lib/wdaTune.js +52 -23
- package/dist/lib/wdaTune.js.map +1 -1
- package/dist/mobileAudit/checks.js +150 -28
- package/dist/mobileAudit/checks.js.map +1 -1
- package/dist/mobileAudit/evidence.js +4 -4
- package/dist/mobileAudit/evidence.js.map +1 -1
- package/dist/mobileAudit/profiles.js +121 -20
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +9 -4
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +214 -35
- package/dist/mobileAudit/runner.js.map +1 -1
- package/dist/oracle/auth.js +1 -1
- package/dist/oracle/auth.js.map +1 -1
- package/dist/oracle/failures.js +1085 -145
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +148 -26
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +148 -19
- package/dist/oracle/locator.js.map +1 -1
- package/dist/oracle/record.js +3 -3
- package/dist/oracle/record.js.map +1 -1
- package/dist/orchestration/envelope.js +2 -2
- package/dist/orchestration/envelope.js.map +1 -1
- package/dist/orchestration/goal.js +7 -13
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +167 -0
- package/dist/orchestration/testThis/execute.js.map +1 -0
- package/dist/orchestration/testThis/pipeline.js +413 -0
- package/dist/orchestration/testThis/pipeline.js.map +1 -0
- package/dist/orchestration/testThis/plan.js +519 -0
- package/dist/orchestration/testThis/plan.js.map +1 -0
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +136 -0
- package/dist/orchestration/testThis/terminal.js.map +1 -0
- package/dist/orchestration/testThis/types.js +12 -0
- package/dist/orchestration/testThis/types.js.map +1 -0
- package/dist/plan/plan.js +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +24 -24
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/coverage.js +0 -1
- package/dist/report/coverage.js.map +1 -1
- package/dist/report/evidence.js.map +1 -1
- package/dist/report/export.js +449 -72
- package/dist/report/export.js.map +1 -1
- package/dist/report/findingsDedupe.js +41 -0
- package/dist/report/findingsDedupe.js.map +1 -0
- package/dist/report/flake.js +13 -14
- package/dist/report/flake.js.map +1 -1
- package/dist/report/history.js +72 -38
- package/dist/report/history.js.map +1 -1
- package/dist/report/policy.js +18 -7
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +10 -16
- package/dist/report/qaLevel.js.map +1 -1
- package/dist/report/readiness.js +42 -12
- package/dist/report/readiness.js.map +1 -1
- package/dist/report/sarifSources.js +160 -0
- package/dist/report/sarifSources.js.map +1 -0
- package/dist/report/summary.js +2 -2
- package/dist/report/summary.js.map +1 -1
- package/dist/report/testCatalog.js +4 -4
- package/dist/report/testCatalog.js.map +1 -1
- package/dist/report/timing.js +23 -23
- package/dist/report/timing.js.map +1 -1
- package/dist/report/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +501 -69
- package/dist/server.js.map +1 -1
- package/dist/services/automationGenerate.js +8 -2
- package/dist/services/automationGenerate.js.map +1 -1
- package/dist/services/build.js +10 -4
- package/dist/services/build.js.map +1 -1
- package/dist/services/flowGenerate.js +75 -0
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +40 -8
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +92 -18
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +94 -17
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +271 -80
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +68 -22
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +43 -6
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +78 -33
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +284 -4
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +433 -0
- package/dist/session/processRegistry.js.map +1 -0
- package/dist/session/progress.js +1 -1
- package/dist/session/progress.js.map +1 -1
- package/dist/session/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +459 -59
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +60 -10
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +30 -12
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +36 -6
- package/dist/snapshot/present.js.map +1 -1
- package/dist/snapshot/settle.js +39 -9
- package/dist/snapshot/settle.js.map +1 -1
- package/dist/state/consent.js +99 -0
- package/dist/state/consent.js.map +1 -0
- package/dist/state/profile.js +82 -11
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +15 -6
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +22 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +75 -44
- package/dist/suite/pom.js.map +1 -1
- package/dist/suite/secretGuard.js +266 -0
- package/dist/suite/secretGuard.js.map +1 -0
- package/dist/suite/testcase.js +15 -11
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +7 -3
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +43 -14
- package/dist/testSuite/generator.js.map +1 -1
- package/dist/testSuite/history.js +1 -1
- package/dist/testSuite/history.js.map +1 -1
- package/dist/testSuite/issueLinks.js +3 -3
- package/dist/testSuite/issueLinks.js.map +1 -1
- package/dist/testSuite/lint.js +4 -4
- package/dist/testSuite/lint.js.map +1 -1
- package/dist/testSuite/merge.js +13 -7
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +21 -16
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +12 -4
- package/dist/testSuite/store.js.map +1 -1
- package/dist/testSuite/traceability.js +2 -2
- package/dist/testSuite/traceability.js.map +1 -1
- package/dist/tools/act.js +868 -174
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +521 -112
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +82 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +393 -189
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +92 -51
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +141 -40
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +98 -18
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +108 -19
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +98 -35
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +110 -42
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +152 -130
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +94 -66
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +347 -132
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +42 -10
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +199 -0
- package/dist/tools/generate.js.map +1 -0
- package/dist/tools/getArtifact.js +37 -8
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +17 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +148 -194
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +256 -171
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +55 -11
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +84 -38
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +83 -26
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +36 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +31 -17
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +31 -14
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +193 -47
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +16 -8
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +12 -12
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +81 -18
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +85 -20
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +42 -18
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +29 -12
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +157 -107
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +117 -84
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +391 -310
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +112 -36
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +35 -802
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +698 -116
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -23
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +312 -54
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +37 -64
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +65 -8
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +87 -15
- package/dist/visual/provider.js.map +1 -1
- package/docs/README.md +24 -10
- package/docs/ci-reports.md +328 -0
- package/docs/concepts.md +227 -0
- package/docs/flows.md +153 -0
- package/docs/mcp-server.md +210 -104
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +808 -217
- package/package.json +16 -6
- package/dist/appMap/diff.js +0 -60
- package/dist/appMap/diff.js.map +0 -1
- package/dist/automation/maestroIr.js +0 -282
- package/dist/automation/maestroIr.js.map +0 -1
- package/dist/interop/maestro.js +0 -151
- package/dist/interop/maestro.js.map +0 -1
- package/dist/tools/assertVisual.js +0 -74
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js +0 -394
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -209
- package/dist/tools/capabilities.js.map +0 -1
- package/dist/tools/detectContext.js +0 -41
- package/dist/tools/detectContext.js.map +0 -1
- package/dist/tools/flowGenerate.js +0 -55
- package/dist/tools/flowGenerate.js.map +0 -1
- package/dist/tools/history.js +0 -56
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/idling.js +0 -104
- package/dist/tools/idling.js.map +0 -1
- package/dist/tools/inputCapabilities.js +0 -30
- package/dist/tools/inputCapabilities.js.map +0 -1
- package/dist/tools/locator.js +0 -57
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/maestro.js +0 -78
- package/dist/tools/maestro.js.map +0 -1
- package/dist/tools/permissions.js +0 -149
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -49
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -70
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -101
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -170
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -61
- package/dist/tools/visualText.js.map +0 -1
|
@@ -1,35 +1,177 @@
|
|
|
1
|
-
// DirectDriver
|
|
2
|
-
// the platform UI-dump tool and acts via `adb shell input
|
|
1
|
+
// DirectDriver: the v1 Android backend. Reads the accessibility tree via
|
|
2
|
+
// the platform UI-dump tool and acts via `adb shell input`. No external
|
|
3
3
|
// automation server.
|
|
4
4
|
//
|
|
5
5
|
// The shell-tap / `input text` approach is the same one proven in the Inn suite for
|
|
6
6
|
// React Native custom inputs that don't respond to programmatic clicks.
|
|
7
7
|
import { run, runBinary } from '../lib/spawn.js';
|
|
8
|
+
import { currentSignal } from '../lib/abortScope.js';
|
|
8
9
|
import { adbDevices } from '../lib/android.js';
|
|
10
|
+
/** Characters the device-side /system/bin/sh (mksh) treats specially; each gets a backslash.
|
|
11
|
+
* Includes brace/glob expansion (`{a,b}` > `a b`, `[s]dcard` > `sdcard`). Backslash itself is
|
|
12
|
+
* escaped first (see escapeAdbInputText) so later escapes aren't doubled. */
|
|
13
|
+
const DEVICE_SHELL_META = /([&|;()<>"'$`*?!#~^{}[\]])/g;
|
|
14
|
+
/** PURE: can adb `input text` deliver `text` verbatim? It cannot deliver characters outside
|
|
15
|
+
* printable ASCII (Unicode, newline, tab). The device-side shell/IME drops or mangles them.
|
|
16
|
+
* qa_act checks this BEFORE focusing/clearing a field so a refusal changes nothing on device. */
|
|
17
|
+
export function adbTextDeliverability(text) {
|
|
18
|
+
const unsupported = [...new Set(text.match(/[^\x20-\x7E]/g) ?? [])];
|
|
19
|
+
if (!unsupported.length)
|
|
20
|
+
return { ok: true };
|
|
21
|
+
return {
|
|
22
|
+
ok: false,
|
|
23
|
+
reason: `TEXT_INPUT_UNSUPPORTED: adb \`input text\` cannot deliver non-ASCII/control characters ${unsupported
|
|
24
|
+
.map((c) => JSON.stringify(c))
|
|
25
|
+
.join(', ')}; nothing was typed. Use ASCII-safe text for this field.`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** PURE: escape one `input text` chunk for the device shell. Spaces become `%s` because
|
|
29
|
+
* `input text` takes ONE arg and maps `%s` back to a space (InputShellCommand.sendText). */
|
|
30
|
+
export function escapeAdbInputText(text) {
|
|
31
|
+
return text.replace(/\\/g, '\\\\').replace(DEVICE_SHELL_META, '\\$1').replace(/ /g, '%s');
|
|
32
|
+
}
|
|
33
|
+
/** PURE: split raw text so no single `input text` call contains the literal two-char sequence
|
|
34
|
+
* `%s`. AOSP InputShellCommand.sendText rewrites EVERY `%s` to a space with no escape for it,
|
|
35
|
+
* so "ab%scd" must go out as "ab%" then "scd" (the rewrite never spans two calls). */
|
|
36
|
+
export function adbInputTextChunks(text) {
|
|
37
|
+
const chunks = [];
|
|
38
|
+
let start = 0;
|
|
39
|
+
for (let i = 0; i < text.length - 1; i++) {
|
|
40
|
+
if (text[i] === '%' && text[i + 1] === 's') {
|
|
41
|
+
chunks.push(text.slice(start, i + 1));
|
|
42
|
+
start = i + 1;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
chunks.push(text.slice(start));
|
|
46
|
+
return chunks.filter((c) => c.length > 0);
|
|
47
|
+
}
|
|
48
|
+
/** PURE: POSIX single-quote a value for the device shell (`'` > `'\''`), so deep links and
|
|
49
|
+
* launch extras with `&`, `;`, spaces or quotes reach `am` as ONE literal argument. */
|
|
50
|
+
export function deviceShellQuote(value) {
|
|
51
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
52
|
+
}
|
|
53
|
+
/** PURE: display rotation (0-3) from `dumpsys input`, i.e. `SurfaceOrientation: N` (per touch
|
|
54
|
+
* device) or the viewport `orientation=N` line on newer builds. null when absent. */
|
|
55
|
+
export function parseInputRotation(dumpsysInput) {
|
|
56
|
+
const m = dumpsysInput.match(/SurfaceOrientation:\s*(\d)/) ??
|
|
57
|
+
dumpsysInput.match(/Viewport (?:INTERNAL|DISPLAY)[^\n]*?orientation=(\d)/) ??
|
|
58
|
+
dumpsysInput.match(/mCurrentRotation=ROTATION_(\d+)/);
|
|
59
|
+
if (!m)
|
|
60
|
+
return null;
|
|
61
|
+
const n = Number(m[1]);
|
|
62
|
+
return n >= 90 ? (n / 90) % 4 : n % 4;
|
|
63
|
+
}
|
|
64
|
+
/** PURE: the soft keyboard's on-screen rect from `dumpsys window InputMethod`, or null.
|
|
65
|
+
* Prefers the touchable region; else the window frame shrunk by its given visible/content
|
|
66
|
+
* insets (older builds size the IME window near full-screen and inset the keyboard). The caller
|
|
67
|
+
* (qa_act keyboardArea) additionally treats a frame taller than ~55% of the screen as unknown. */
|
|
68
|
+
export function parseImeFrame(dumpsysWindow) {
|
|
69
|
+
const touch = dumpsysWindow.match(/touchable region=SkRegion\(\((\d+),(\d+),(\d+),(\d+)\)\)/);
|
|
70
|
+
if (touch) {
|
|
71
|
+
const r = touch.slice(1, 5).map(Number);
|
|
72
|
+
if (r[3] > r[1] && r[2] > r[0])
|
|
73
|
+
return r;
|
|
74
|
+
}
|
|
75
|
+
const frame = dumpsysWindow.match(/(?:\bframe|mFrame)=\[(-?\d+),(-?\d+)\]\[(-?\d+),(-?\d+)\]/);
|
|
76
|
+
if (!frame)
|
|
77
|
+
return null;
|
|
78
|
+
const [x1, y1, x2, y2] = frame.slice(1, 5).map(Number);
|
|
79
|
+
const insets = dumpsysWindow.match(/mGivenVisibleInsets=\[(\d+),(\d+)\]\[(\d+),(\d+)\]/) ??
|
|
80
|
+
dumpsysWindow.match(/mGivenContentInsets=\[(\d+),(\d+)\]\[(\d+),(\d+)\]/);
|
|
81
|
+
const top = y1 + (insets ? Number(insets[2]) : 0);
|
|
82
|
+
if (y2 <= top || x2 <= x1)
|
|
83
|
+
return null;
|
|
84
|
+
return [x1, top, x2, y2];
|
|
85
|
+
}
|
|
86
|
+
/** A valid Android application id (package name): dot-separated Java identifiers, >= 2 segments. */
|
|
87
|
+
export const ANDROID_APP_ID_RE = /^[A-Za-z][\w]*(\.[A-Za-z][\w]*)+$/;
|
|
88
|
+
/** Throw a typed INVALID_ARGUMENT error unless `pkg` is a well-formed Android application id.
|
|
89
|
+
* App ids reach `adb shell` (a device-side sh re-parses the joined argv), so a value like
|
|
90
|
+
* `com.x; rm -rf /sdcard` must never get there (M1). Callers also shell-quote it. */
|
|
91
|
+
export function assertAndroidAppId(pkg) {
|
|
92
|
+
if (typeof pkg !== 'string' || !ANDROID_APP_ID_RE.test(pkg)) {
|
|
93
|
+
const err = new Error(`INVALID_ARGUMENT: ${JSON.stringify(String(pkg).slice(0, 80))} is not a valid Android application id (expected e.g. com.example.app).`);
|
|
94
|
+
err.code = 'INVALID_ARGUMENT';
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
return pkg;
|
|
98
|
+
}
|
|
99
|
+
/** Validated + device-shell-quoted app id for an `adb shell` argv. */
|
|
100
|
+
export function shellAppId(pkg) {
|
|
101
|
+
return deviceShellQuote(assertAndroidAppId(pkg));
|
|
102
|
+
}
|
|
103
|
+
/** PURE: `<hierarchy rotation="N">` from a uiautomator dump, or null. */
|
|
104
|
+
export function dumpRotation(xml) {
|
|
105
|
+
const m = xml.slice(0, 400).match(/<hierarchy\b[^>]*\brotation="(\d)"/);
|
|
106
|
+
return m ? Number(m[1]) % 4 : null;
|
|
107
|
+
}
|
|
108
|
+
/** PURE: current-axes screen size from a uiautomator dump's ROOT node, only when the root is
|
|
109
|
+
* anchored at [0,0] and its aspect agrees with the dump's rotation (a dialog/split-screen window
|
|
110
|
+
* root is not the screen). null otherwise. */
|
|
111
|
+
export function dumpRootScreen(xml) {
|
|
112
|
+
const rotation = dumpRotation(xml);
|
|
113
|
+
if (rotation === null)
|
|
114
|
+
return null;
|
|
115
|
+
const m = xml.match(/<node\b[^>]*?\bbounds="\[(-?\d+),(-?\d+)\]\[(-?\d+),(-?\d+)\]"/);
|
|
116
|
+
if (!m)
|
|
117
|
+
return null;
|
|
118
|
+
const [x1, y1, x2, y2] = m.slice(1, 5).map(Number);
|
|
119
|
+
if (x1 !== 0 || y1 !== 0 || x2 <= 0 || y2 <= 0)
|
|
120
|
+
return null;
|
|
121
|
+
if ((rotation % 2 === 1) !== x2 > y2)
|
|
122
|
+
return null;
|
|
123
|
+
return { width: x2, height: y2 };
|
|
124
|
+
}
|
|
125
|
+
/** Separator between the two dumpsys outputs of DirectDriver.imeState(). */
|
|
126
|
+
const IME_STATE_SEP = '__SWIPIUM_IME_SEP__';
|
|
9
127
|
const KEYCODE = {
|
|
10
128
|
back: '4',
|
|
11
129
|
home: '3',
|
|
12
130
|
enter: '66',
|
|
13
131
|
};
|
|
132
|
+
/** How long a DirectDriver reuses its last screen size + rotation (review round 2: swipes used
|
|
133
|
+
* to run `wm size` + a full `dumpsys input` (a few hundred ms) on EVERY gesture). A device-side
|
|
134
|
+
* rotation is picked up sooner than the TTL: every UI dump carries `<hierarchy rotation=N>`, and a
|
|
135
|
+
* rotation different from the cached one drops the cache (plus invalidateScreenSizeCache for
|
|
136
|
+
* Swipium's own orientation changes). */
|
|
137
|
+
export const SCREEN_SIZE_TTL_MS = 30_000;
|
|
138
|
+
/** A dump younger than this may answer screenSize() from its root bounds (no adb round trip). */
|
|
139
|
+
export const DUMP_SCREEN_FRESH_MS = 5_000;
|
|
140
|
+
/** Serials whose cached screen size must be dropped (Swipium changed the orientation). Global so
|
|
141
|
+
* the orientation tool can invalidate every DirectDriver bound to that device. */
|
|
142
|
+
const screenSizeEpoch = new Map();
|
|
143
|
+
/** Invalidate cached screen sizes (call after Swipium changes the orientation of `serial`, or
|
|
144
|
+
* of every device when omitted). */
|
|
145
|
+
export function invalidateScreenSizeCache(serial) {
|
|
146
|
+
if (serial)
|
|
147
|
+
screenSizeEpoch.set(serial, (screenSizeEpoch.get(serial) ?? 0) + 1);
|
|
148
|
+
else
|
|
149
|
+
screenSizeEpoch.set('*', (screenSizeEpoch.get('*') ?? 0) + 1);
|
|
150
|
+
}
|
|
151
|
+
function epochOf(serial) {
|
|
152
|
+
return (screenSizeEpoch.get(serial ?? '') ?? 0) + (screenSizeEpoch.get('*') ?? 0);
|
|
153
|
+
}
|
|
154
|
+
/** Current invalidation epoch for `serial` (shared with the WDA driver's size cache). */
|
|
155
|
+
export function currentScreenSizeEpoch(serial) {
|
|
156
|
+
return epochOf(serial);
|
|
157
|
+
}
|
|
14
158
|
export class DirectDriver {
|
|
15
159
|
kind = 'direct';
|
|
16
160
|
serial;
|
|
17
|
-
signal;
|
|
18
161
|
constructor(serial) {
|
|
19
162
|
this.serial = serial;
|
|
20
163
|
}
|
|
21
|
-
/** Bind an AbortSignal so a cancelled job actually kills in-flight adb children. */
|
|
22
|
-
setSignal(signal) {
|
|
23
|
-
this.signal = signal;
|
|
24
|
-
}
|
|
25
164
|
base() {
|
|
26
165
|
return this.serial ? ['-s', this.serial] : [];
|
|
27
166
|
}
|
|
28
167
|
async adb(args, opts = {}) {
|
|
29
|
-
|
|
168
|
+
const full = [...this.base(), ...args];
|
|
169
|
+
return run('adb', full, {
|
|
30
170
|
timeoutMs: opts.timeoutMs ?? 20000,
|
|
31
|
-
|
|
171
|
+
// Cancellation travels with the call (abortScope), never via a shared slot on the driver.
|
|
172
|
+
signal: opts.signal ?? currentSignal(),
|
|
32
173
|
rejectOnNonZero: true,
|
|
174
|
+
...(opts.sensitiveLastArg ? { redactArgs: [full.length - 1] } : {}),
|
|
33
175
|
});
|
|
34
176
|
}
|
|
35
177
|
async listDevices() {
|
|
@@ -37,6 +179,8 @@ export class DirectDriver {
|
|
|
37
179
|
}
|
|
38
180
|
useDevice(serial) {
|
|
39
181
|
this.serial = serial;
|
|
182
|
+
this.sizeCache = undefined;
|
|
183
|
+
this.dumpScreen = undefined;
|
|
40
184
|
}
|
|
41
185
|
currentDevice() {
|
|
42
186
|
return this.serial;
|
|
@@ -45,15 +189,16 @@ export class DirectDriver {
|
|
|
45
189
|
await this.adb(['install', '-r', '-g', apkPath], { timeoutMs: 180000 });
|
|
46
190
|
}
|
|
47
191
|
async uninstallApp(pkg) {
|
|
48
|
-
await this.adb(['uninstall', pkg], { timeoutMs: 60000 });
|
|
192
|
+
await this.adb(['uninstall', assertAndroidAppId(pkg)], { timeoutMs: 60000 });
|
|
49
193
|
}
|
|
50
194
|
async isInstalled(pkg) {
|
|
51
|
-
const r = await this.adb(['shell', 'pm', 'list', 'packages', pkg]);
|
|
195
|
+
const r = await this.adb(['shell', 'pm', 'list', 'packages', shellAppId(pkg)]);
|
|
52
196
|
return r.stdout.split('\n').some((l) => l.trim() === `package:${pkg}`);
|
|
53
197
|
}
|
|
54
198
|
async isRunning(pkg) {
|
|
199
|
+
assertAndroidAppId(pkg); // a malformed id is an argument error, not "not running"
|
|
55
200
|
try {
|
|
56
|
-
const r = await this.adb(['shell', 'pidof', pkg]);
|
|
201
|
+
const r = await this.adb(['shell', 'pidof', shellAppId(pkg)]);
|
|
57
202
|
return r.stdout.trim().length > 0;
|
|
58
203
|
}
|
|
59
204
|
catch {
|
|
@@ -61,7 +206,7 @@ export class DirectDriver {
|
|
|
61
206
|
}
|
|
62
207
|
}
|
|
63
208
|
async clearData(pkg) {
|
|
64
|
-
await this.adb(['shell', 'pm', 'clear', pkg]);
|
|
209
|
+
await this.adb(['shell', 'pm', 'clear', shellAppId(pkg)]);
|
|
65
210
|
}
|
|
66
211
|
async imeShown() {
|
|
67
212
|
try {
|
|
@@ -72,6 +217,23 @@ export class DirectDriver {
|
|
|
72
217
|
return false;
|
|
73
218
|
}
|
|
74
219
|
}
|
|
220
|
+
/** Keyboard shown + frame in ONE `adb shell` (both dumpsys, separated). The keyboard guard
|
|
221
|
+
* used to pay two adb round trips on every tap/type. */
|
|
222
|
+
async imeState() {
|
|
223
|
+
try {
|
|
224
|
+
const r = await this.adb(['shell', `dumpsys input_method; echo ${IME_STATE_SEP}; dumpsys window InputMethod`], {
|
|
225
|
+
timeoutMs: 8000,
|
|
226
|
+
});
|
|
227
|
+
const i = r.stdout.indexOf(IME_STATE_SEP);
|
|
228
|
+
const ime = i >= 0 ? r.stdout.slice(0, i) : r.stdout;
|
|
229
|
+
const win = i >= 0 ? r.stdout.slice(i + IME_STATE_SEP.length) : '';
|
|
230
|
+
const shown = /mInputShown=true/.test(ime);
|
|
231
|
+
return { shown, frame: shown ? parseImeFrame(win) : null };
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return { shown: false, frame: null };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
75
237
|
async logcat(lines, grep) {
|
|
76
238
|
try {
|
|
77
239
|
const r = await this.adb(['logcat', '-d', '-t', String(lines)], { timeoutMs: 8000 });
|
|
@@ -79,7 +241,10 @@ export class DirectDriver {
|
|
|
79
241
|
if (!grep)
|
|
80
242
|
return out;
|
|
81
243
|
const re = new RegExp(grep, 'i');
|
|
82
|
-
return out
|
|
244
|
+
return out
|
|
245
|
+
.split('\n')
|
|
246
|
+
.filter((l) => re.test(l))
|
|
247
|
+
.join('\n');
|
|
83
248
|
}
|
|
84
249
|
catch {
|
|
85
250
|
return '';
|
|
@@ -100,81 +265,135 @@ export class DirectDriver {
|
|
|
100
265
|
}
|
|
101
266
|
async launchApp(pkg) {
|
|
102
267
|
// monkey is the simplest reliable launcher when we don't know the main activity.
|
|
103
|
-
await this.adb(['shell', 'monkey', '-p', pkg, '-c', 'android.intent.category.LAUNCHER', '1']);
|
|
268
|
+
await this.adb(['shell', 'monkey', '-p', shellAppId(pkg), '-c', 'android.intent.category.LAUNCHER', '1']);
|
|
104
269
|
}
|
|
105
270
|
async launchAppWithArgs(pkg, args) {
|
|
106
|
-
const resolved = await this.adb(['shell', 'cmd', 'package', 'resolve-activity', '--brief', pkg], { timeoutMs: 8000 });
|
|
107
|
-
const component = resolved.stdout
|
|
271
|
+
const resolved = await this.adb(['shell', 'cmd', 'package', 'resolve-activity', '--brief', shellAppId(pkg)], { timeoutMs: 8000 });
|
|
272
|
+
const component = resolved.stdout
|
|
273
|
+
.split(/\r?\n/)
|
|
274
|
+
.map((l) => l.trim())
|
|
275
|
+
.filter(Boolean)
|
|
276
|
+
.at(-1);
|
|
108
277
|
if (!component || !component.includes('/'))
|
|
109
278
|
throw new Error(`Could not resolve launch activity for ${pkg}`);
|
|
110
279
|
const extras = [];
|
|
111
280
|
for (const [key, value] of Object.entries(args)) {
|
|
281
|
+
// `adb shell` space-joins argv into ONE string the device sh re-parses: every
|
|
282
|
+
// user-supplied token is single-quoted so `&`, `;`, spaces and quotes survive intact.
|
|
112
283
|
if (typeof value === 'boolean')
|
|
113
|
-
extras.push('--ez', key, String(value));
|
|
284
|
+
extras.push('--ez', deviceShellQuote(key), String(value));
|
|
114
285
|
else if (Number.isInteger(value))
|
|
115
|
-
extras.push('--ei', key, String(value));
|
|
286
|
+
extras.push('--ei', deviceShellQuote(key), String(value));
|
|
116
287
|
else if (typeof value === 'number')
|
|
117
|
-
extras.push('--ef', key, String(value));
|
|
288
|
+
extras.push('--ef', deviceShellQuote(key), String(value));
|
|
118
289
|
else
|
|
119
|
-
extras.push('--es', key, String(value));
|
|
290
|
+
extras.push('--es', deviceShellQuote(key), deviceShellQuote(String(value)));
|
|
120
291
|
}
|
|
121
|
-
await this.adb(['shell', 'am', 'start', '-W', '-S', '-n', component, ...extras], { timeoutMs: 30000 });
|
|
292
|
+
await this.adb(['shell', 'am', 'start', '-W', '-S', '-n', deviceShellQuote(component), ...extras], { timeoutMs: 30000 });
|
|
122
293
|
}
|
|
123
294
|
async terminateApp(pkg) {
|
|
124
|
-
await this.adb(['shell', 'am', 'force-stop', pkg]);
|
|
295
|
+
await this.adb(['shell', 'am', 'force-stop', shellAppId(pkg)]);
|
|
125
296
|
}
|
|
126
297
|
async foregroundOwner() {
|
|
127
298
|
// Parse the currently focused window/activity. Works across recent Android versions.
|
|
128
299
|
const r = await this.adb(['shell', 'dumpsys', 'activity', 'activities']);
|
|
129
|
-
const m = r.stdout.match(/mResumedActivity:.*\{[^}]*\s([^\s/]+\/[^\s}]+)/) ||
|
|
130
|
-
r.stdout.match(/mCurrentFocus=.*\s([^\s/]+\/[^\s}]+)/);
|
|
300
|
+
const m = r.stdout.match(/mResumedActivity:.*\{[^}]*\s([^\s/]+\/[^\s}]+)/) || r.stdout.match(/mCurrentFocus=.*\s([^\s/]+\/[^\s}]+)/);
|
|
131
301
|
return m?.[1] ?? 'unknown';
|
|
132
302
|
}
|
|
133
303
|
async screenshot() {
|
|
134
|
-
// exec-out returns raw PNG bytes on stdout
|
|
304
|
+
// exec-out returns raw PNG bytes on stdout, so it must be collected as binary.
|
|
135
305
|
const r = await runBinary('adb', [...this.base(), 'exec-out', 'screencap', '-p'], {
|
|
136
306
|
timeoutMs: 15000,
|
|
137
|
-
signal:
|
|
307
|
+
signal: currentSignal(),
|
|
138
308
|
rejectOnNonZero: true,
|
|
139
309
|
});
|
|
140
310
|
return r.stdout;
|
|
141
311
|
}
|
|
142
|
-
async dumpXml() {
|
|
312
|
+
async dumpXml(opts = {}) {
|
|
143
313
|
// mobile-mcp's proven recipe: exec-out to stdout, retry on the transient
|
|
144
314
|
// "could not get hierarchy" / null-root, strip warning lines before <?xml.
|
|
145
315
|
// Kept modest (5) so a PERSISTENT idle failure (looping animation) surfaces fast and the
|
|
146
|
-
// tool layer can switch to visual-fallback rather than burning ~30 attempts.
|
|
147
|
-
|
|
316
|
+
// tool layer can switch to visual-fallback rather than burning ~30 attempts. Callers with a
|
|
317
|
+
// deadline (settle) pass opts.timeoutMs (TOTAL budget, retries included) + fewer attempts.
|
|
318
|
+
const ATTEMPTS = Math.max(1, opts.attempts ?? 5);
|
|
319
|
+
const deadline = opts.timeoutMs ? Date.now() + opts.timeoutMs : undefined;
|
|
148
320
|
let lastErr = '';
|
|
149
|
-
|
|
321
|
+
let attempt = 0;
|
|
322
|
+
for (; attempt < ATTEMPTS; attempt++) {
|
|
323
|
+
const remaining = deadline === undefined ? 20000 : Math.min(20000, deadline - Date.now());
|
|
324
|
+
if (remaining <= 0)
|
|
325
|
+
break;
|
|
150
326
|
try {
|
|
151
|
-
const r = await this.adb(['exec-out', 'uiautomator', 'dump', '/dev/tty']);
|
|
327
|
+
const r = await this.adb(['exec-out', 'uiautomator', 'dump', '/dev/tty'], { timeoutMs: remaining });
|
|
152
328
|
const idx = r.stdout.indexOf('<?xml');
|
|
153
329
|
if (idx >= 0 && r.stdout.includes('</hierarchy>')) {
|
|
154
|
-
|
|
330
|
+
const xml = r.stdout.slice(idx);
|
|
331
|
+
this.noteDump(xml);
|
|
332
|
+
return xml;
|
|
155
333
|
}
|
|
156
334
|
lastErr = r.stdout.trim() || r.stderr.trim();
|
|
157
335
|
}
|
|
158
336
|
catch (e) {
|
|
159
337
|
lastErr = String(e);
|
|
160
338
|
}
|
|
339
|
+
if (attempt + 1 >= ATTEMPTS || (deadline !== undefined && deadline - Date.now() <= 400)) {
|
|
340
|
+
attempt++;
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
161
343
|
await new Promise((res) => setTimeout(res, 400));
|
|
162
344
|
}
|
|
163
|
-
throw new Error(`uiautomator dump failed after ${
|
|
345
|
+
throw new Error(`uiautomator dump failed after ${attempt} attempt(s): ${lastErr}`);
|
|
346
|
+
}
|
|
347
|
+
/** Last dump's root-derived screen size (see dumpRootScreen), for screenSize(). */
|
|
348
|
+
dumpScreen;
|
|
349
|
+
/** Keep the screen-size cache honest from every dump: a rotation change drops it, and a
|
|
350
|
+
* [0,0]-anchored root gives a free current-axes size. */
|
|
351
|
+
noteDump(xml) {
|
|
352
|
+
const rotation = dumpRotation(xml);
|
|
353
|
+
if (rotation !== null && this.sizeCache && this.sizeCache.rotation !== rotation)
|
|
354
|
+
this.sizeCache = undefined;
|
|
355
|
+
const size = dumpRootScreen(xml);
|
|
356
|
+
this.dumpScreen = size ? { at: Date.now(), serial: this.serial, size } : undefined;
|
|
164
357
|
}
|
|
165
358
|
async tapXY(x, y) {
|
|
166
359
|
await this.adb(['shell', 'input', 'tap', String(Math.round(x)), String(Math.round(y))]);
|
|
167
360
|
}
|
|
168
361
|
async pressXY(x, y, ms) {
|
|
169
|
-
// Same-point swipe with a duration
|
|
362
|
+
// Same-point swipe with a duration. It registers on RN views that ignore instant taps.
|
|
170
363
|
const sx = String(Math.round(x));
|
|
171
364
|
const sy = String(Math.round(y));
|
|
172
365
|
await this.adb(['shell', 'input', 'swipe', sx, sy, sx, sy, String(Math.round(ms))]);
|
|
173
366
|
}
|
|
367
|
+
canDeliverText(text) {
|
|
368
|
+
return adbTextDeliverability(text);
|
|
369
|
+
}
|
|
174
370
|
async inputText(text) {
|
|
175
|
-
// `input text`
|
|
176
|
-
|
|
177
|
-
|
|
371
|
+
// `input text` cannot deliver characters outside printable ASCII (Unicode, newline, tab):
|
|
372
|
+
// the device-side shell/IME drops or mangles them, so refuse loudly instead of mistyping.
|
|
373
|
+
const verdict = adbTextDeliverability(text);
|
|
374
|
+
if (!verdict.ok)
|
|
375
|
+
throw new Error(verdict.reason);
|
|
376
|
+
// Empty text: nothing to type, and `input text` with no argument is a usage error.
|
|
377
|
+
if (!text)
|
|
378
|
+
return;
|
|
379
|
+
// `adb shell` space-joins its args into one string the DEVICE-side sh re-parses, so every
|
|
380
|
+
// shell-significant character needs a backslash escape (escapeAdbInputText). A literal
|
|
381
|
+
// "%s" can't be escaped for `input text`, so it is split across calls (adbInputTextChunks).
|
|
382
|
+
for (const chunk of adbInputTextChunks(text)) {
|
|
383
|
+
const escaped = escapeAdbInputText(chunk);
|
|
384
|
+
try {
|
|
385
|
+
// H2: the argv IS the (possibly secret) text, so never let it into the error message.
|
|
386
|
+
await this.adb(['shell', 'input', 'text', escaped], { sensitiveLastArg: true });
|
|
387
|
+
}
|
|
388
|
+
catch (e) {
|
|
389
|
+
let msg = String(e?.message ?? e);
|
|
390
|
+
for (const v of [escaped, chunk, text])
|
|
391
|
+
if (v.length >= 3 && msg.includes(v))
|
|
392
|
+
msg = msg.split(v).join('«redacted»');
|
|
393
|
+
// cause: the spawn error is already argv-redacted (redactArgs), so it's safe to chain.
|
|
394
|
+
throw new Error(`adb input text failed (${text.length} chars, value withheld): ${msg}`, { cause: e });
|
|
395
|
+
}
|
|
396
|
+
}
|
|
178
397
|
}
|
|
179
398
|
async clearFocusedText(approxLen = 40) {
|
|
180
399
|
const n = Math.min(Math.max(approxLen + 2, 1), 120);
|
|
@@ -186,23 +405,77 @@ export class DirectDriver {
|
|
|
186
405
|
}
|
|
187
406
|
async swipe(x1, y1, x2, y2, ms = 300) {
|
|
188
407
|
await this.adb([
|
|
189
|
-
'shell',
|
|
190
|
-
|
|
191
|
-
|
|
408
|
+
'shell',
|
|
409
|
+
'input',
|
|
410
|
+
'swipe',
|
|
411
|
+
String(Math.round(x1)),
|
|
412
|
+
String(Math.round(y1)),
|
|
413
|
+
String(Math.round(x2)),
|
|
414
|
+
String(Math.round(y2)),
|
|
192
415
|
String(ms),
|
|
193
416
|
]);
|
|
194
417
|
}
|
|
418
|
+
sizeCache;
|
|
419
|
+
/** Current-axes screen size, cached for SCREEN_SIZE_TTL_MS (and until invalidateScreenSizeCache
|
|
420
|
+
* for this device, e.g. after a Swipium orientation change, or until a dump reports a different
|
|
421
|
+
* rotation). Without a cache, a fresh dump's [0,0]-anchored root answers for free. Failures are
|
|
422
|
+
* never cached. */
|
|
195
423
|
async screenSize() {
|
|
424
|
+
const c = this.sizeCache;
|
|
425
|
+
if (c && c.serial === this.serial && c.epoch === epochOf(this.serial) && Date.now() - c.at < SCREEN_SIZE_TTL_MS)
|
|
426
|
+
return { ...c.size };
|
|
427
|
+
const ds = this.dumpScreen;
|
|
428
|
+
if (ds && ds.serial === this.serial && Date.now() - ds.at < DUMP_SCREEN_FRESH_MS)
|
|
429
|
+
return { ...ds.size };
|
|
430
|
+
const epoch = epochOf(this.serial);
|
|
431
|
+
const read = await this.readScreenSize();
|
|
432
|
+
this.sizeCache = read ? { at: Date.now(), epoch, serial: this.serial, rotation: read.rotation, size: read.size } : undefined;
|
|
433
|
+
return read ? { ...read.size } : null;
|
|
434
|
+
}
|
|
435
|
+
async readScreenSize() {
|
|
196
436
|
try {
|
|
197
437
|
const r = await this.adb(['shell', 'wm', 'size']);
|
|
198
438
|
// prefer "Override size:" if present, else "Physical size:"
|
|
199
439
|
const m = r.stdout.match(/Override size:\s*(\d+)x(\d+)/) ?? r.stdout.match(/Physical size:\s*(\d+)x(\d+)/);
|
|
200
|
-
|
|
440
|
+
if (!m)
|
|
441
|
+
return null;
|
|
442
|
+
const size = { width: Number(m[1]), height: Number(m[2]) };
|
|
443
|
+
// `wm size` reports the NATURAL orientation; swap for a 90°/270° rotation so gestures
|
|
444
|
+
// and keyboard/obstruction geometry use the current screen axes.
|
|
445
|
+
const rotation = await this.rotation();
|
|
446
|
+
return { rotation, size: rotation % 2 === 1 ? { width: size.height, height: size.width } : size };
|
|
447
|
+
}
|
|
448
|
+
catch {
|
|
449
|
+
return null;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/** Current display rotation 0-3 (0 when unknown). */
|
|
453
|
+
async rotation() {
|
|
454
|
+
try {
|
|
455
|
+
const r = await this.adb(['shell', 'dumpsys', 'input'], { timeoutMs: 8000 });
|
|
456
|
+
return parseInputRotation(r.stdout) ?? 0;
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
return 0;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/** On-screen soft-keyboard rect (dumpsys window InputMethod), or null when unknown/hidden. */
|
|
463
|
+
async imeFrame() {
|
|
464
|
+
try {
|
|
465
|
+
const r = await this.adb(['shell', 'dumpsys', 'window', 'InputMethod'], { timeoutMs: 8000 });
|
|
466
|
+
return parseImeFrame(r.stdout);
|
|
201
467
|
}
|
|
202
468
|
catch {
|
|
203
469
|
return null;
|
|
204
470
|
}
|
|
205
471
|
}
|
|
472
|
+
/** Hide the soft keyboard: BACK only while the IME is actually shown (BACK otherwise navigates). */
|
|
473
|
+
async hideKeyboard() {
|
|
474
|
+
if (!(await this.imeShown()))
|
|
475
|
+
return false;
|
|
476
|
+
await this.pressKey('back');
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
206
479
|
async screenDensity() {
|
|
207
480
|
try {
|
|
208
481
|
const r = await this.adb(['shell', 'wm', 'density']);
|
|
@@ -217,7 +490,8 @@ export class DirectDriver {
|
|
|
217
490
|
await this.adb(['reverse', `tcp:${port}`, `tcp:${port}`]);
|
|
218
491
|
}
|
|
219
492
|
async openUrl(url) {
|
|
220
|
-
|
|
493
|
+
// Single-quoted for the device shell: `a=1&b=2` or spaces would otherwise split/background.
|
|
494
|
+
await this.adb(['shell', 'am', 'start', '-a', 'android.intent.action.VIEW', '-d', deviceShellQuote(url)]);
|
|
221
495
|
}
|
|
222
496
|
async disableAnimations() {
|
|
223
497
|
for (const k of ['window_animation_scale', 'transition_animation_scale', 'animator_duration_scale']) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DirectDriver.js","sourceRoot":"","sources":["../../src/drivers/DirectDriver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DirectDriver.js","sourceRoot":"","sources":["../../src/drivers/DirectDriver.ts"],"names":[],"mappings":"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"}
|