swipium 1.5.0 → 2.0.1
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 +183 -0
- package/README.md +173 -280
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +30 -27
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +47 -21
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +2 -2
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +3 -3
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +2 -2
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +2 -2
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/issues.js +10 -10
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +5 -5
- 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 +77 -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 +2 -2
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +3 -3
- 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 +1 -1
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +17 -17
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +55 -7
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +3 -3
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +5 -5
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +10 -10
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +3 -3
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +1 -1
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +7 -7
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +3 -3
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +14 -25
- 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 +5 -5
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +2 -2
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +13 -7
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +5 -5
- 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 +265 -106
- 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 +71 -26
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +276 -105
- 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/{tools/automationGenerate.js → automationGen/run.js} +72 -113
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +6 -4
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +20 -8
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +2 -2
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +7 -7
- 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 +35 -14
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +6 -6
- 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 +45 -14
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +6 -6
- 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 +3 -3
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +65 -62
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +300 -36
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +120 -7
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +350 -50
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +2 -2
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +5 -5
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/policy.js +5 -5
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +301 -284
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +1 -1
- package/dist/featureTesting/executionBootstrap.js +29 -30
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +2 -2
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +12 -12
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +7 -7
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +10 -10
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +6 -6
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +4 -4
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +1 -1
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +1 -1
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +11 -11
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +3 -3
- 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 +5 -5
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +11 -11
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +8 -8
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +9 -9
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +5 -5
- 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 +33 -3
- 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 +20 -10
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/pack.js +3 -3
- 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 +111 -23
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +153 -57
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +50 -5
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +4 -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/issues/classify.js +16 -16
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +24 -4
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +94 -31
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +4 -4
- 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 +4 -4
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +4 -4
- 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 +75 -7
- 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 +32 -7
- 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 +1 -1
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +370 -31
- package/dist/lib/lockfile.js.map +1 -1
- package/dist/lib/needsInput.js +3 -3
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +2 -2
- 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 +79 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +3 -3
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +3 -2
- 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 +52 -10
- 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 +294 -15
- package/dist/lib/wda.js.map +1 -1
- package/dist/mobileAudit/checks.js +12 -12
- 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 +1 -1
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +3 -3
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +72 -18
- 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 +219 -36
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +63 -17
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +13 -13
- 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 +4 -4
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +62 -21
- package/dist/orchestration/testThis/execute.js.map +1 -1
- package/dist/orchestration/testThis/pipeline.js +119 -30
- package/dist/orchestration/testThis/pipeline.js.map +1 -1
- package/dist/orchestration/testThis/plan.js +162 -73
- package/dist/orchestration/testThis/plan.js.map +1 -1
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +34 -16
- package/dist/orchestration/testThis/terminal.js.map +1 -1
- package/dist/orchestration/testThis/types.js +1 -1
- package/dist/orchestration/testThis/types.js.map +1 -1
- package/dist/plan/plan.js +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +22 -22
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/export.js +392 -37
- 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/policy.js +7 -4
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +8 -8
- package/dist/report/qaLevel.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/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +472 -45
- 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 +2 -2
- package/dist/services/build.js.map +1 -1
- package/dist/{tools → services}/flowGenerate.js +29 -13
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +4 -4
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +46 -8
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +24 -9
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +100 -45
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +32 -16
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +28 -3
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +40 -27
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +270 -6
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +317 -48
- package/dist/session/processRegistry.js.map +1 -1
- package/dist/session/progress.js +1 -1
- package/dist/session/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +275 -48
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +53 -8
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +28 -4
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +11 -5
- 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 +46 -2
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +9 -5
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +4 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +50 -41
- 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 +9 -7
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +4 -4
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +13 -9
- 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 +5 -5
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +5 -5
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +3 -3
- 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 +794 -164
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +451 -128
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +69 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +188 -130
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +32 -42
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +21 -31
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +55 -12
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +76 -24
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +68 -28
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +41 -47
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +31 -48
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +34 -41
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +183 -103
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +25 -13
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +52 -89
- package/dist/tools/generate.js.map +1 -1
- package/dist/tools/getArtifact.js +16 -5
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +15 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +45 -223
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +251 -35
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +41 -16
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +36 -35
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +50 -45
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +31 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +26 -26
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +10 -16
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +117 -50
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +11 -22
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +11 -15
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +78 -24
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +23 -21
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +23 -16
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +20 -16
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +155 -118
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +104 -116
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +72 -43
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +30 -20
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +24 -28
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +686 -210
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -38
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +187 -57
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +31 -22
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +53 -6
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +80 -12
- 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 +194 -128
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +812 -152
- package/package.json +3 -2
- package/dist/tools/assertVisual.js +0 -84
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -179
- 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.map +0 -1
- package/dist/tools/history.js +0 -86
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/locator.js +0 -85
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/permissions.js +0 -174
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -52
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -76
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -133
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -217
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -106
- package/dist/tools/visualText.js.map +0 -1
|
@@ -1,31 +1,59 @@
|
|
|
1
1
|
// Cross-restart registry of the long-lived child processes Swipium spawns (Metro bundler,
|
|
2
2
|
// managed WDA xcodebuild, screen recorders, emulators) in ~/.swipium/processes.json, so a
|
|
3
|
-
// crashed server's orphans can be reaped on the next startup
|
|
3
|
+
// crashed server's orphans can be reaped on the next startup.
|
|
4
4
|
//
|
|
5
5
|
// Safety rules:
|
|
6
6
|
// - Every entry records the OWNING server pid. A child whose owner is still a live
|
|
7
7
|
// node/swipium process belongs to a concurrent server instance and is never touched.
|
|
8
|
-
// -
|
|
9
|
-
//
|
|
10
|
-
//
|
|
8
|
+
// - Every entry records the child's FINGERPRINT at spawn time: its start time
|
|
9
|
+
// (`ps -o lstart=`, read under LC_ALL=C so the format is locale-independent) and full command
|
|
10
|
+
// line (for WDA that includes the project path and `-destination id=<udid>`). Before
|
|
11
|
+
// signalling (or adopting), both are re-read via `ps`. The START TIME must match exactly (the
|
|
12
|
+
// hard pid-recycling guard: a recycled pid has a different start time). The command must match
|
|
13
|
+
// per kind: for WDA / recordings / emulators the program is compared by BASENAME and the
|
|
14
|
+
// argument tail exactly (Xcode's /usr/bin/xcodebuild and xcrun shims re-exec the real tool
|
|
15
|
+
// under the same pid + start time, so `xcodebuild -project …` later reads
|
|
16
|
+
// `/Applications/Xcode.app/…/usr/bin/xcodebuild -project …`); for Metro (spawned via `npx`, which
|
|
17
|
+
// npm retitles right after spawn: `node …/npx react-native start` > `npm exec react-native
|
|
18
|
+
// start`) the launcher-stripped program+args tail must match. A PID recycled by the OS to
|
|
19
|
+
// an unrelated process (another node, the adb server, the user's own xcodebuild/Appium WDA) is
|
|
20
|
+
// never killed or adopted. Entries without a fingerprint (written by an older build, or when
|
|
21
|
+
// `ps` was unavailable) are unverifiable and are dropped without signalling.
|
|
22
|
+
// - A process GROUP is only signalled when Swipium created the child as a group leader
|
|
23
|
+
// (spawned detached: pgid == pid at registration); otherwise only the pid itself is signalled.
|
|
24
|
+
// - The owning server's start time is recorded too, so a recycled server pid (any node process)
|
|
25
|
+
// is not mistaken for a live concurrent server.
|
|
26
|
+
// - Emulators are ADOPTED, not killed: an orphaned emulator stays booted and remains
|
|
11
27
|
// usable via adb for the next run.
|
|
12
|
-
|
|
28
|
+
// - Managed WDA (xcodebuild test-without-building) is deliberately NOT stopped on a graceful
|
|
29
|
+
// shutdown either (only Metro and screen recorders are; see startServer), so the next server
|
|
30
|
+
// can resume the iOS session on the same WDA. At startup an orphaned WDA entry is ADOPTED when
|
|
31
|
+
// it is younger than WDA_ADOPT_MAX_AGE_MS (12 h) AND its recorded endpoint answers GET /status
|
|
32
|
+
// ready; adoption keeps the entry and re-owns it (serverPid = this server), so `qa_wda stop`
|
|
33
|
+
// can still stop it and a later crash/restart applies the same rule. An older, unhealthy, or
|
|
34
|
+
// endpoint-less WDA entry is reaped like any other orphan.
|
|
35
|
+
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
13
36
|
import { join } from 'node:path';
|
|
14
37
|
import { homedir } from 'node:os';
|
|
15
38
|
import { spawnSync } from 'node:child_process';
|
|
16
|
-
import { withFileLock } from '../lib/lockfile.js';
|
|
39
|
+
import { withFileLock, writeFileAtomicSync } from '../lib/lockfile.js';
|
|
17
40
|
import { log } from '../lib/logger.js';
|
|
41
|
+
import { checkWda } from '../lib/wda.js';
|
|
42
|
+
/** An orphaned managed WDA older than this is reaped even when healthy (bounded lifetime). */
|
|
43
|
+
export const WDA_ADOPT_MAX_AGE_MS = 12 * 60 * 60 * 1000;
|
|
44
|
+
const WDA_ADOPT_PROBE_TIMEOUT_MS = 1500;
|
|
18
45
|
const REGISTRY_DIR = join(homedir(), '.swipium');
|
|
19
46
|
const PROCESSES_FILE = join(REGISTRY_DIR, 'processes.json');
|
|
20
47
|
const PROCESSES_LOCK = `${PROCESSES_FILE}.lock`;
|
|
21
48
|
const MAX_ENTRIES = 100;
|
|
22
|
-
/**
|
|
49
|
+
/** Coarse sanity check on top of the exact fingerprint match (defence in depth). */
|
|
23
50
|
const KIND_COMMAND_RE = {
|
|
24
|
-
metro: /metro|expo|react-native|npx|node/i,
|
|
51
|
+
metro: /metro|expo|react-native|npx|npm|node/i,
|
|
25
52
|
wda: /xcodebuild/i,
|
|
26
53
|
recording: /screenrecord|recordvideo|simctl|adb/i,
|
|
27
54
|
emulator: /emulator|qemu/i,
|
|
28
55
|
};
|
|
56
|
+
const norm = (s) => (s == null ? null : s.trim().replace(/\s+/g, ' ') || null);
|
|
29
57
|
function pidAlive(pid) {
|
|
30
58
|
try {
|
|
31
59
|
process.kill(pid, 0);
|
|
@@ -35,10 +63,17 @@ function pidAlive(pid) {
|
|
|
35
63
|
return false;
|
|
36
64
|
}
|
|
37
65
|
}
|
|
38
|
-
/**
|
|
39
|
-
|
|
66
|
+
/** Environment for every `ps` we parse: the C locale, so `lstart` is always `Mon Sep 28 …`
|
|
67
|
+
* (under e.g. de_DE it would be `Mo. 28 Sep. …` and never match a fingerprint taken elsewhere). */
|
|
68
|
+
export function psEnv(base = process.env) {
|
|
69
|
+
return { ...base, LC_ALL: 'C', LANG: 'C' };
|
|
70
|
+
}
|
|
71
|
+
/** A `ps -o <field>=` value for `pid`, or null when it is gone / unreadable (POSIX `ps`). */
|
|
72
|
+
function psField(pid, field) {
|
|
73
|
+
if (process.platform === 'win32')
|
|
74
|
+
return null;
|
|
40
75
|
try {
|
|
41
|
-
const out = spawnSync('ps', ['-o',
|
|
76
|
+
const out = spawnSync('ps', ['-o', `${field}=`, '-p', String(pid)], { encoding: 'utf8', env: psEnv() });
|
|
42
77
|
if (out.status !== 0 || !out.stdout?.trim())
|
|
43
78
|
return null;
|
|
44
79
|
return out.stdout.trim();
|
|
@@ -47,6 +82,12 @@ function psCommand(pid) {
|
|
|
47
82
|
return null;
|
|
48
83
|
}
|
|
49
84
|
}
|
|
85
|
+
const psCommand = (pid) => psField(pid, 'command');
|
|
86
|
+
const psStartTime = (pid) => norm(psField(pid, 'lstart'));
|
|
87
|
+
function psPgid(pid) {
|
|
88
|
+
const n = Number(psField(pid, 'pgid'));
|
|
89
|
+
return Number.isInteger(n) && n > 0 ? n : null;
|
|
90
|
+
}
|
|
50
91
|
function readEntries() {
|
|
51
92
|
try {
|
|
52
93
|
if (!existsSync(PROCESSES_FILE))
|
|
@@ -57,14 +98,12 @@ function readEntries() {
|
|
|
57
98
|
return parsed.filter((e) => typeof e?.pid === 'number');
|
|
58
99
|
}
|
|
59
100
|
catch (e) {
|
|
60
|
-
log('warn', 'managed-process registry unreadable
|
|
101
|
+
log('warn', 'managed-process registry unreadable, starting fresh', { file: PROCESSES_FILE, err: String(e) });
|
|
61
102
|
return [];
|
|
62
103
|
}
|
|
63
104
|
}
|
|
64
105
|
function writeEntries(entries) {
|
|
65
|
-
|
|
66
|
-
writeFileSync(tmp, JSON.stringify(entries.slice(-MAX_ENTRIES), null, 2));
|
|
67
|
-
renameSync(tmp, PROCESSES_FILE); // atomic on the same filesystem
|
|
106
|
+
writeFileAtomicSync(PROCESSES_FILE, JSON.stringify(entries.slice(-MAX_ENTRIES), null, 2)); // tmp + rename (Windows-retried)
|
|
68
107
|
}
|
|
69
108
|
function mutateEntries(fn) {
|
|
70
109
|
try {
|
|
@@ -72,35 +111,59 @@ function mutateEntries(fn) {
|
|
|
72
111
|
withFileLock(PROCESSES_LOCK, () => writeEntries(fn(readEntries())));
|
|
73
112
|
}
|
|
74
113
|
catch (e) {
|
|
75
|
-
log('error', 'failed to update managed-process registry
|
|
114
|
+
log('error', 'failed to update managed-process registry; a crash may leave this child unreaped', {
|
|
76
115
|
file: PROCESSES_FILE,
|
|
77
116
|
err: String(e),
|
|
78
117
|
});
|
|
79
118
|
}
|
|
80
119
|
}
|
|
81
|
-
/**
|
|
82
|
-
export function
|
|
120
|
+
/** Capture a live child's fingerprint (start time, command, group leadership) + our own start. */
|
|
121
|
+
export function captureFingerprint(pid, ops = REAL_OPS) {
|
|
122
|
+
const procStart = norm(ops.psStartTime(pid));
|
|
123
|
+
const command = norm(ops.psCommand(pid));
|
|
124
|
+
const serverStart = norm(ops.psStartTime(process.pid));
|
|
125
|
+
return {
|
|
126
|
+
...(procStart ? { procStart } : {}),
|
|
127
|
+
...(command ? { command } : {}),
|
|
128
|
+
groupLeader: ops.psPgid(pid) === pid,
|
|
129
|
+
...(serverStart ? { serverStart } : {}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** Record a long-lived child we spawned so a future server instance can reap it if we crash.
|
|
133
|
+
* Must be called right after spawn() returned a pid (the child has exec'd by then), so the
|
|
134
|
+
* recorded fingerprint is the child's own. */
|
|
135
|
+
export function registerManagedProcess(pid, kind, sessionId, extra = {}) {
|
|
83
136
|
if (!pid || pid <= 0)
|
|
84
137
|
return;
|
|
138
|
+
const fp = captureFingerprint(pid, extra.ops);
|
|
85
139
|
mutateEntries((entries) => [
|
|
86
140
|
...entries.filter((e) => e.pid !== pid),
|
|
87
|
-
{ pid, kind, serverPid: process.pid, sessionId, startedAt: Date.now() },
|
|
141
|
+
{ pid, kind, serverPid: process.pid, sessionId, startedAt: Date.now(), ...(extra.endpoint ? { endpoint: extra.endpoint } : {}), ...fp },
|
|
88
142
|
]);
|
|
89
143
|
}
|
|
144
|
+
/** A managed WDA this server adopted at startup (or started itself) for `sessionId`, per the
|
|
145
|
+
* registry. Lets `qa_wda stop` stop a WDA started by a previous server run. */
|
|
146
|
+
export function registeredWdaForSession(sessionId) {
|
|
147
|
+
return readEntries()
|
|
148
|
+
.filter((e) => e.kind === 'wda' && e.sessionId === sessionId && e.serverPid === process.pid)
|
|
149
|
+
.pop();
|
|
150
|
+
}
|
|
90
151
|
/** Remove a child we stopped (or that finished) from the registry. */
|
|
91
152
|
export function unregisterManagedProcess(pid) {
|
|
92
153
|
if (!pid || pid <= 0)
|
|
93
154
|
return;
|
|
94
155
|
mutateEntries((entries) => entries.filter((e) => e.pid !== pid));
|
|
95
156
|
}
|
|
96
|
-
/** SIGTERM the child's process group
|
|
97
|
-
function killTree(pid) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
157
|
+
/** SIGTERM the child's process group when Swipium spawned it as a group leader, else the pid. */
|
|
158
|
+
function killTree(pid, group) {
|
|
159
|
+
if (group) {
|
|
160
|
+
try {
|
|
161
|
+
process.kill(-pid, 'SIGTERM');
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
/* group already gone; fall back to the pid itself */
|
|
166
|
+
}
|
|
104
167
|
}
|
|
105
168
|
try {
|
|
106
169
|
process.kill(pid, 'SIGTERM');
|
|
@@ -110,43 +173,176 @@ function killTree(pid) {
|
|
|
110
173
|
return false;
|
|
111
174
|
}
|
|
112
175
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
176
|
+
const REAL_OPS = { pidAlive, psCommand, psStartTime, psPgid, killTree };
|
|
177
|
+
/** True when `serverPid` is a live process that IS the server that registered the entry: its
|
|
178
|
+
* start time must equal the recorded one (any node process could have recycled the pid). Legacy
|
|
179
|
+
* entries without a recorded server start fall back to the old node/swipium command check.
|
|
180
|
+
* That errs toward "alive" (never touch), which is the safe direction. */
|
|
181
|
+
function serverStillAlive(entry, ops = REAL_OPS) {
|
|
182
|
+
const { serverPid } = entry;
|
|
116
183
|
if (serverPid === process.pid)
|
|
117
184
|
return false; // our pid at startup = a recycled dead server's
|
|
118
|
-
if (!pidAlive(serverPid))
|
|
185
|
+
if (!ops.pidAlive(serverPid))
|
|
119
186
|
return false;
|
|
120
|
-
|
|
187
|
+
if (entry.serverStart)
|
|
188
|
+
return norm(ops.psStartTime(serverPid)) === entry.serverStart;
|
|
189
|
+
const cmd = ops.psCommand(serverPid);
|
|
121
190
|
return cmd != null && /node|swipium/i.test(cmd);
|
|
122
191
|
}
|
|
123
192
|
/** Is this child pid registered to a DIFFERENT, still-live server instance? (adopt, don't touch) */
|
|
124
193
|
export function pidOwnedByLiveServer(pid) {
|
|
125
194
|
const entry = readEntries().find((e) => e.pid === pid);
|
|
126
|
-
return !!entry && serverStillAlive(entry
|
|
195
|
+
return !!entry && serverStillAlive(entry);
|
|
127
196
|
}
|
|
128
|
-
/**
|
|
129
|
-
*
|
|
130
|
-
|
|
131
|
-
|
|
197
|
+
/** Leading launcher tokens npx/npm put in front of the real program (and the retitle swaps).
|
|
198
|
+
* `env` covers the `#!/usr/bin/env node` shebang: on Linux a process registered right after spawn
|
|
199
|
+
* can still show as `/usr/bin/env node …/npx expo start` before env execs node. */
|
|
200
|
+
const LAUNCHER_TOKEN = /^(?:env|node|nodejs|npx|npm|npx-cli\.js|npm-cli\.js|exec|--)$/i;
|
|
201
|
+
/** A command line with its node/npx/npm launcher prefix stripped: `node /x/bin/npx expo start`
|
|
202
|
+
* and `npm exec expo start` both become `expo start`. Exported for tests. */
|
|
203
|
+
export function commandTail(cmd) {
|
|
204
|
+
const tokens = cmd.trim().split(/\s+/);
|
|
205
|
+
let i = 0;
|
|
206
|
+
while (i < tokens.length && LAUNCHER_TOKEN.test(tokens[i].split('/').pop() ?? ''))
|
|
207
|
+
i++;
|
|
208
|
+
return tokens.slice(i).join(' ');
|
|
209
|
+
}
|
|
210
|
+
/** The real program of each non-metro kind (matched against a token's basename). */
|
|
211
|
+
const KIND_PROGRAM_RE = {
|
|
212
|
+
wda: /^xcodebuild$/i,
|
|
213
|
+
recording: /^(?:simctl|adb)$/i,
|
|
214
|
+
emulator: /^(?:emulator|qemu-system-[\w.-]+)$/i,
|
|
215
|
+
};
|
|
216
|
+
/** Launchers that exec the real program under the same pid (`xcrun simctl …` > `…/simctl …`). */
|
|
217
|
+
const EXEC_LAUNCHER = /^(?:xcrun|env)$/i;
|
|
218
|
+
/** A command line reduced to `<program basename> <args…>`, anchored at the first token whose
|
|
219
|
+
* basename matches `program`. Xcode's `/usr/bin/xcodebuild` (and `xcrun`) shims re-exec the real
|
|
220
|
+
* tool under the SAME pid + start time, so `ps` later shows
|
|
221
|
+
* `/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -project …` for a child spawned
|
|
222
|
+
* as `xcodebuild -project …`. Everything before the program must be either a launcher
|
|
223
|
+
* (xcrun/env) or the space-split pieces of the program's own absolute path (`/Applications/Xcode
|
|
224
|
+
* 16.app/…/xcodebuild`), never flags or another program. Null when no such anchor exists.
|
|
225
|
+
* Exported for tests. */
|
|
226
|
+
export function programTail(cmd, program) {
|
|
227
|
+
const tokens = cmd.trim().split(/\s+/);
|
|
228
|
+
const i = tokens.findIndex((t) => program.test(t.split('/').pop() ?? ''));
|
|
229
|
+
if (i < 0)
|
|
230
|
+
return null;
|
|
231
|
+
const prefix = tokens.slice(0, i);
|
|
232
|
+
const launcherOnly = prefix.every((t) => EXEC_LAUNCHER.test(t.split('/').pop() ?? ''));
|
|
233
|
+
// One absolute path split at its spaces: starts with '/', no later piece starts a new path, no
|
|
234
|
+
// piece is a flag / assignment.
|
|
235
|
+
const pathPieces = prefix.length > 0 &&
|
|
236
|
+
prefix[0].startsWith('/') &&
|
|
237
|
+
tokens[i].includes('/') &&
|
|
238
|
+
!tokens[i].startsWith('/') &&
|
|
239
|
+
prefix.slice(1).every((t) => !t.includes('/')) &&
|
|
240
|
+
prefix.every((t) => !t.startsWith('-') && !t.includes('='));
|
|
241
|
+
if (!launcherOnly && !pathPieces)
|
|
242
|
+
return null;
|
|
243
|
+
return [tokens[i].split('/').pop(), ...tokens.slice(i + 1)].join(' ');
|
|
244
|
+
}
|
|
245
|
+
/** `-project` / `-destination` / `-derivedDataPath` values of a managed-WDA xcodebuild command. */
|
|
246
|
+
export function wdaCommandIdentity(cmd) {
|
|
247
|
+
const tokens = cmd.trim().split(/\s+/);
|
|
248
|
+
const valueOf = (flag) => {
|
|
249
|
+
const i = tokens.indexOf(flag);
|
|
250
|
+
return i >= 0 && i + 1 < tokens.length ? tokens[i + 1] : undefined;
|
|
251
|
+
};
|
|
252
|
+
return { project: valueOf('-project'), destination: valueOf('-destination'), derivedDataPath: valueOf('-derivedDataPath') };
|
|
253
|
+
}
|
|
254
|
+
/** Per-kind command identity (on top of the exact start-time match). */
|
|
255
|
+
function commandMatches(kind, recorded, live) {
|
|
256
|
+
if (!KIND_COMMAND_RE[kind].test(live))
|
|
257
|
+
return false;
|
|
258
|
+
if (live === recorded)
|
|
259
|
+
return true;
|
|
260
|
+
if (kind === 'metro') {
|
|
261
|
+
// Metro is launched via `npx`, which npm retitles shortly after spawn. Compare what runs.
|
|
262
|
+
const tail = commandTail(live);
|
|
263
|
+
return tail !== '' && tail === commandTail(recorded);
|
|
264
|
+
}
|
|
265
|
+
// Program path normalised to its basename (shim re-exec); the argument tail must be identical.
|
|
266
|
+
const program = KIND_PROGRAM_RE[kind];
|
|
267
|
+
if (!program)
|
|
268
|
+
return false;
|
|
269
|
+
const liveTail = programTail(live, program);
|
|
270
|
+
const recordedTail = programTail(recorded, program);
|
|
271
|
+
if (!liveTail || liveTail !== recordedTail)
|
|
272
|
+
return false;
|
|
273
|
+
if (kind === 'wda') {
|
|
274
|
+
// Defence in depth: the managed WDA's project + simulator destination must be present.
|
|
275
|
+
const id = wdaCommandIdentity(recordedTail);
|
|
276
|
+
return !!id.project && !!id.destination;
|
|
277
|
+
}
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
/** Does the live `pid` still carry the fingerprint recorded at spawn? Start time is the hard
|
|
281
|
+
* requirement (exact); the command is compared per kind (see commandMatches). */
|
|
282
|
+
function fingerprintMatches(entry, ops) {
|
|
283
|
+
if (!entry.procStart || !entry.command)
|
|
284
|
+
return false; // unverifiable > never signal/adopt
|
|
285
|
+
const start = norm(ops.psStartTime(entry.pid));
|
|
286
|
+
if (!start || start !== entry.procStart)
|
|
287
|
+
return false;
|
|
288
|
+
const cmd = norm(ops.psCommand(entry.pid));
|
|
289
|
+
return cmd != null && commandMatches(entry.kind, entry.command, cmd);
|
|
290
|
+
}
|
|
291
|
+
/** Verify that `pid` is still the child we registered (exact start time + per-kind command, per
|
|
292
|
+
* the registry entry, or `entry` when given), then kill or adopt it. A pid with no verifiable
|
|
293
|
+
* registry fingerprint, or whose fingerprint differs, is reported 'recycled' and never signalled.
|
|
294
|
+
* Only a child Swipium spawned as a group leader has its process group signalled. */
|
|
295
|
+
export function reclaimPid(pid, kind, ops = REAL_OPS, entry = readEntries().find((e) => e.pid === pid && e.kind === kind)) {
|
|
296
|
+
if (!ops.pidAlive(pid))
|
|
132
297
|
return 'gone';
|
|
133
|
-
|
|
134
|
-
if (!cmd || !KIND_COMMAND_RE[kind].test(cmd))
|
|
298
|
+
if (!entry || entry.pid !== pid || !fingerprintMatches(entry, ops))
|
|
135
299
|
return 'recycled';
|
|
136
300
|
if (kind === 'emulator')
|
|
137
|
-
return 'adopted'; // still a real emulator
|
|
138
|
-
return killTree(pid) ? 'killed' : 'gone';
|
|
301
|
+
return 'adopted'; // still a real emulator; leave it booted (usable via adb)
|
|
302
|
+
return ops.killTree(pid, entry.groupLeader === true) ? 'killed' : 'gone';
|
|
303
|
+
}
|
|
304
|
+
async function defaultWdaHealthy(endpoint) {
|
|
305
|
+
return (await checkWda(endpoint, WDA_ADOPT_PROBE_TIMEOUT_MS)).ready;
|
|
139
306
|
}
|
|
140
|
-
/**
|
|
141
|
-
|
|
307
|
+
/** Orphaned WDA entries eligible for adoption: owner dead, < 12 h old, endpoint recorded, pid
|
|
308
|
+
* still a live xcodebuild (ps-checked), and /status healthy. Probed concurrently, before the lock. */
|
|
309
|
+
async function adoptableWdaPids(entries, opts) {
|
|
310
|
+
const candidates = entries.filter((e) => e.kind === 'wda' &&
|
|
311
|
+
typeof e.endpoint === 'string' &&
|
|
312
|
+
opts.now - e.startedAt < WDA_ADOPT_MAX_AGE_MS &&
|
|
313
|
+
!serverStillAlive(e, opts.ops) &&
|
|
314
|
+
opts.ops.pidAlive(e.pid) &&
|
|
315
|
+
fingerprintMatches(e, opts.ops));
|
|
316
|
+
const healthy = await Promise.all(candidates.map((e) => opts.wdaHealthy(e.endpoint).catch(() => false)));
|
|
317
|
+
return new Set(candidates.filter((_, i) => healthy[i]).map((e) => e.pid));
|
|
318
|
+
}
|
|
319
|
+
/** Startup sweep (called once from startServer): reap children whose owning server died,
|
|
320
|
+
* except a young, healthy managed WDA, which is adopted (see the header comment). */
|
|
321
|
+
export async function reapOrphanedProcesses(options = {}) {
|
|
322
|
+
const opts = {
|
|
323
|
+
ops: options.ops ?? REAL_OPS,
|
|
324
|
+
now: options.now ?? Date.now(),
|
|
325
|
+
wdaHealthy: options.wdaHealthy ?? defaultWdaHealthy,
|
|
326
|
+
};
|
|
327
|
+
const adoptable = await adoptableWdaPids(readEntries(), opts);
|
|
142
328
|
mutateEntries((entries) => {
|
|
143
329
|
const keep = [];
|
|
144
330
|
for (const e of entries) {
|
|
145
|
-
if (serverStillAlive(e.
|
|
146
|
-
keep.push(e); // a live concurrent server owns it
|
|
331
|
+
if (serverStillAlive(e, opts.ops)) {
|
|
332
|
+
keep.push(e); // a live concurrent server owns it, not ours to touch
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
if (e.kind === 'wda' && adoptable.has(e.pid)) {
|
|
336
|
+
// Re-own it (startedAt kept, so the 12 h cap counts from the WDA's real start).
|
|
337
|
+
keep.push({ ...e, serverPid: process.pid });
|
|
338
|
+
log('info', 'adopted managed WDA from a previous server run (healthy, < 12 h old)', {
|
|
339
|
+
pid: e.pid,
|
|
340
|
+
endpoint: e.endpoint,
|
|
341
|
+
sessionId: e.sessionId,
|
|
342
|
+
});
|
|
147
343
|
continue;
|
|
148
344
|
}
|
|
149
|
-
const outcome = reclaimPid(e.pid, e.kind);
|
|
345
|
+
const outcome = reclaimPid(e.pid, e.kind, opts.ops, e);
|
|
150
346
|
if (outcome === 'killed') {
|
|
151
347
|
log('warn', 'reaped orphaned child process from a previous server run', { pid: e.pid, kind: e.kind, sessionId: e.sessionId });
|
|
152
348
|
}
|
|
@@ -154,11 +350,84 @@ export function reapOrphanedProcesses() {
|
|
|
154
350
|
log('info', 'adopted orphaned emulator (left booted; reachable via adb)', { pid: e.pid, sessionId: e.sessionId });
|
|
155
351
|
}
|
|
156
352
|
else if (outcome === 'recycled') {
|
|
157
|
-
log('info', 'dropped orphan entry: PID
|
|
353
|
+
log('info', 'dropped orphan entry: PID recycled or fingerprint unverifiable, not signalled', { pid: e.pid, kind: e.kind });
|
|
158
354
|
}
|
|
159
|
-
// In every non-live-owner case the entry is dropped: it has been handled.
|
|
355
|
+
// In every other non-live-owner case the entry is dropped: it has been handled.
|
|
160
356
|
}
|
|
161
357
|
return keep;
|
|
162
358
|
});
|
|
163
359
|
}
|
|
360
|
+
function lsofListeners(port) {
|
|
361
|
+
if (process.platform === 'win32')
|
|
362
|
+
return [];
|
|
363
|
+
try {
|
|
364
|
+
const out = spawnSync('lsof', ['-nP', `-iTCP:${port}`, '-sTCP:LISTEN', '-Fp'], { encoding: 'utf8', env: psEnv() });
|
|
365
|
+
return (out.stdout ?? '')
|
|
366
|
+
.split('\n')
|
|
367
|
+
.filter((l) => l.startsWith('p'))
|
|
368
|
+
.map((l) => Number(l.slice(1)))
|
|
369
|
+
.filter((n) => Number.isInteger(n) && n > 0);
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
return [];
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
function psAll() {
|
|
376
|
+
if (process.platform === 'win32')
|
|
377
|
+
return [];
|
|
378
|
+
try {
|
|
379
|
+
const out = spawnSync('ps', ['-axo', 'pid=,command='], { encoding: 'utf8', env: psEnv(), maxBuffer: 16 * 1024 * 1024 });
|
|
380
|
+
if (out.status !== 0)
|
|
381
|
+
return [];
|
|
382
|
+
return (out.stdout ?? '')
|
|
383
|
+
.split('\n')
|
|
384
|
+
.map((l) => /^\s*(\d+)\s+(.*)$/.exec(l))
|
|
385
|
+
.filter((m) => !!m)
|
|
386
|
+
.map((m) => ({ pid: Number(m[1]), command: m[2] }));
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
return [];
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
const REAL_WDA_SCAN_OPS = { listeners: lsofListeners, listProcesses: psAll, psCommand };
|
|
393
|
+
/** Does `command` look exactly like the managed WDA runner Swipium starts for `sig`?
|
|
394
|
+
* xcodebuild by basename (shim-proof), `test-without-building`, and the recorded
|
|
395
|
+
* `-project` / `-destination id=<udid>` (/ `-derivedDataPath`) arguments. Exported for tests. */
|
|
396
|
+
export function isManagedWdaCommand(command, sig) {
|
|
397
|
+
const tail = programTail(norm(command) ?? '', /^xcodebuild$/i);
|
|
398
|
+
if (!tail)
|
|
399
|
+
return false;
|
|
400
|
+
const padded = ` ${tail} `;
|
|
401
|
+
return (padded.includes(` -project ${sig.projectPath} `) &&
|
|
402
|
+
padded.includes(` -destination id=${sig.udid} `) &&
|
|
403
|
+
padded.includes(' test-without-building ') &&
|
|
404
|
+
(!sig.derivedDataPath || padded.includes(` -derivedDataPath ${sig.derivedDataPath} `)));
|
|
405
|
+
}
|
|
406
|
+
/** Pids of live managed-WDA xcodebuild processes matching `sig`. Used by `qa_wda stop` when the
|
|
407
|
+
* registry entry for a WDA this session started was lost. The process LISTENing on the managed
|
|
408
|
+
* port is checked first; on a simulator that listener is usually the XCTest runner (not
|
|
409
|
+
* xcodebuild), so every process is then scanned for the exact managed-WDA signature. Only
|
|
410
|
+
* processes whose command matches (see isManagedWdaCommand) are ever returned. */
|
|
411
|
+
export function findManagedWdaProcesses(sig, ops = REAL_WDA_SCAN_OPS) {
|
|
412
|
+
const found = new Set();
|
|
413
|
+
if (sig.port) {
|
|
414
|
+
for (const pid of ops.listeners(sig.port)) {
|
|
415
|
+
const cmd = ops.psCommand(pid);
|
|
416
|
+
if (pid !== process.pid && cmd && isManagedWdaCommand(cmd, sig))
|
|
417
|
+
found.add(pid);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
if (found.size === 0) {
|
|
421
|
+
for (const p of ops.listProcesses()) {
|
|
422
|
+
if (p.pid !== process.pid && isManagedWdaCommand(p.command, sig))
|
|
423
|
+
found.add(p.pid);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return [...found];
|
|
427
|
+
}
|
|
428
|
+
/** SIGTERM a managed WDA found by signature (its process group when it leads one; `qa_wda
|
|
429
|
+
* start` spawns it detached). Exported so qa_wda can share the real kill primitive. */
|
|
430
|
+
export function killManagedWda(pid, ops = REAL_OPS) {
|
|
431
|
+
return ops.killTree(pid, ops.psPgid(pid) === pid);
|
|
432
|
+
}
|
|
164
433
|
//# sourceMappingURL=processRegistry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processRegistry.js","sourceRoot":"","sources":["../../src/session/processRegistry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"processRegistry.js","sourceRoot":"","sources":["../../src/session/processRegistry.ts"],"names":[],"mappings":"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"}
|
package/dist/session/progress.js
CHANGED
|
@@ -51,6 +51,6 @@ export function progressLine(p) {
|
|
|
51
51
|
if (!p)
|
|
52
52
|
return undefined;
|
|
53
53
|
const sec = Math.round((p.updatedAt - p.startedAt) / 1000);
|
|
54
|
-
return (`${p.phase} (${sec}s)${p.userActionRequired ? ' ⚠ needs you' : ''}: ${p.statusText}` + (p.nextExpected ? `
|
|
54
|
+
return (`${p.phase} (${sec}s)${p.userActionRequired ? ' ⚠ needs you' : ''}: ${p.statusText}` + (p.nextExpected ? ` > ${p.nextExpected}` : ''));
|
|
55
55
|
}
|
|
56
56
|
//# sourceMappingURL=progress.js.map
|