swipium 1.5.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 +171 -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
package/dist/oracle/health.js
CHANGED
|
@@ -1,22 +1,36 @@
|
|
|
1
|
-
// Tier-1 deterministic health oracle
|
|
1
|
+
// Tier-1 deterministic health oracle. Phase 2.2: classifies BOTH layers:
|
|
2
2
|
// NATIVE health (process: crash dialog / ANR / wrong foreground) and APP health (JS/UI:
|
|
3
3
|
// RN RedBox / LogBox error / error-boundary fallback / WebView error). A green native
|
|
4
4
|
// process with a broken app UI (e.g. an ErrorBoundary screen) is now a first-class finding,
|
|
5
5
|
// so agents don't have to infer "healthy process but broken app" from raw snapshot text.
|
|
6
6
|
import { parseSnapshot } from '../snapshot/parse.js';
|
|
7
|
+
import { isAbortError } from '../lib/abortScope.js';
|
|
8
|
+
/** The verdict-free result of a cancelled health check. */
|
|
9
|
+
function cancelledHealth() {
|
|
10
|
+
return {
|
|
11
|
+
healthy: true,
|
|
12
|
+
nativeHealthy: true,
|
|
13
|
+
appHealthy: true,
|
|
14
|
+
nativeStatus: 'ok',
|
|
15
|
+
appStatus: 'ok',
|
|
16
|
+
foreground: 'unknown',
|
|
17
|
+
findings: [],
|
|
18
|
+
cancelled: true,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
7
21
|
// APP-layer surfaces (JS/UI). Order matters: the first fatal RedBox variant wins over LogBox.
|
|
8
22
|
const APP_SURFACES = [
|
|
9
23
|
{
|
|
10
24
|
re: /unable to load script|could not connect to development server|loadJSBundleFromAssets|index\.android\.bundle/i,
|
|
11
25
|
kind: 'rn_redbox',
|
|
12
26
|
severity: 'high',
|
|
13
|
-
detail: 'RN RedBox
|
|
27
|
+
detail: 'RN RedBox: JS bundle failed to load (Metro/bundle issue)',
|
|
14
28
|
},
|
|
15
29
|
{
|
|
16
30
|
re: /unhandled (js|javascript) exception|invariant violation|TypeError:|ReferenceError|undefined is not an object|is not a function/i,
|
|
17
31
|
kind: 'rn_redbox',
|
|
18
32
|
severity: 'high',
|
|
19
|
-
detail: 'RN RedBox
|
|
33
|
+
detail: 'RN RedBox: unhandled JS exception',
|
|
20
34
|
},
|
|
21
35
|
{
|
|
22
36
|
re: /we encountered an error|something went wrong|this screen (crashed|encountered)|oops[!,. ].{0,40}(wrong|error|crash)/i,
|
|
@@ -50,20 +64,52 @@ function firstMatch(nodes, re) {
|
|
|
50
64
|
}
|
|
51
65
|
return undefined;
|
|
52
66
|
}
|
|
53
|
-
|
|
54
|
-
|
|
67
|
+
/** The package that owns the dumped window (Android uiautomator root `package=`), or undefined. */
|
|
68
|
+
export function dumpRootPackage(nodes) {
|
|
69
|
+
const pkg = nodes?.[0]?.attrs?.package;
|
|
70
|
+
return pkg ? pkg : undefined;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Health check. `opts.nodes` = the ALREADY-PARSED allNodes of `xml` (callers that just parsed the
|
|
74
|
+
* post-action dump pass them). Re-parsing a big screen cost ~60 ms per action.
|
|
75
|
+
*
|
|
76
|
+
* Foreground: on Android the dump's root `package=` already says which app owns the window. When
|
|
77
|
+
* it IS the app under test and no crash/ANR copy is on screen, the heavy `dumpsys activity
|
|
78
|
+
* activities` (foregroundOwner) is skipped (foreground = the package); it still runs whenever the
|
|
79
|
+
* caller did not supply the dump, the root package differs from appId, is absent (WDA / older
|
|
80
|
+
* dumps), or a crash/ANR pattern matched.
|
|
81
|
+
*/
|
|
82
|
+
export async function checkHealth(driver, appId, xml, opts = {}) {
|
|
55
83
|
let source = xml;
|
|
84
|
+
let dumpAborted = false;
|
|
56
85
|
if (source === undefined)
|
|
57
|
-
source = await driver.dumpXml().catch(() =>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
86
|
+
source = await driver.dumpXml().catch((e) => {
|
|
87
|
+
dumpAborted = isAbortError(e);
|
|
88
|
+
return '';
|
|
89
|
+
});
|
|
90
|
+
// Cancelled work is not evidence: an aborted dump (or a check whose call/job was cancelled) must
|
|
91
|
+
// never become a `wda_unreachable` finding / BLOCK verdict.
|
|
92
|
+
if (dumpAborted || isAbortError(undefined))
|
|
93
|
+
return cancelledHealth();
|
|
94
|
+
// Parse to nodes so evidence is the VISIBLE text (not attribute names). Best-effort.
|
|
95
|
+
let raw = opts.nodes;
|
|
96
|
+
if (!raw) {
|
|
97
|
+
try {
|
|
98
|
+
raw = parseSnapshot(source).allNodes;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
raw = [];
|
|
102
|
+
}
|
|
65
103
|
}
|
|
104
|
+
const nodes = raw.map((n) => ({ text: n.text, desc: n.desc, cls: n.cls, id: n.id }));
|
|
66
105
|
const joined = nodes.map((n) => `${n.text} ${n.desc} ${n.cls ?? ''} ${n.id ?? ''}`).join(' ') || source;
|
|
106
|
+
const rootPkg = dumpRootPackage(raw);
|
|
107
|
+
// Only on the post-action path (caller supplied the dump): a standalone health check (no xml)
|
|
108
|
+
// keeps the full dumpsys answer, which also names the resumed activity.
|
|
109
|
+
const trustRoot = xml !== undefined && !!appId && rootPkg === appId && !ANR_RE.test(joined) && !CRASH_RE.test(joined);
|
|
110
|
+
const foreground = trustRoot ? rootPkg : await driver.foregroundOwner().catch(() => 'unknown');
|
|
111
|
+
if (isAbortError(undefined))
|
|
112
|
+
return cancelledHealth();
|
|
67
113
|
const findings = [];
|
|
68
114
|
// ---- NATIVE layer ----
|
|
69
115
|
let nativeStatus = 'ok';
|
|
@@ -131,7 +177,7 @@ export async function checkHealth(driver, appId, xml) {
|
|
|
131
177
|
severity: 'high',
|
|
132
178
|
layer: 'native',
|
|
133
179
|
kind: 'wrong_foreground_app',
|
|
134
|
-
detail: `app left to the launcher (possible crash)
|
|
180
|
+
detail: `app left to the launcher (possible crash), foreground=${foreground}`,
|
|
135
181
|
});
|
|
136
182
|
if (nativeStatus === 'ok')
|
|
137
183
|
nativeStatus = 'wrong_foreground_app';
|
|
@@ -141,7 +187,7 @@ export async function checkHealth(driver, appId, xml) {
|
|
|
141
187
|
severity: 'medium',
|
|
142
188
|
layer: 'native',
|
|
143
189
|
kind: 'permission_dialog',
|
|
144
|
-
detail: `Android runtime permission dialog is visible
|
|
190
|
+
detail: `Android runtime permission dialog is visible, foreground=${foreground}`,
|
|
145
191
|
});
|
|
146
192
|
}
|
|
147
193
|
else if (/packageinstaller|systemui|com\.android\.|inputmethod/i.test(foreground)) {
|
|
@@ -152,7 +198,7 @@ export async function checkHealth(driver, appId, xml) {
|
|
|
152
198
|
severity: 'medium',
|
|
153
199
|
layer: 'native',
|
|
154
200
|
kind: 'wrong_foreground_app',
|
|
155
|
-
detail: `foreground is a different app
|
|
201
|
+
detail: `foreground is a different app, foreground=${foreground}`,
|
|
156
202
|
});
|
|
157
203
|
if (nativeStatus === 'ok')
|
|
158
204
|
nativeStatus = 'wrong_foreground_app';
|
|
@@ -168,7 +214,7 @@ export async function checkHealth(driver, appId, xml) {
|
|
|
168
214
|
findings.push({ severity: s.severity, layer: 'app', kind: s.kind, detail: s.detail, evidence: firstMatch(nodes, s.re) });
|
|
169
215
|
appStatus = s.severity === 'high' ? 'error' : appStatus === 'error' ? 'error' : 'degraded';
|
|
170
216
|
matched = true;
|
|
171
|
-
// RedBox/error-boundary are terminal for the screen
|
|
217
|
+
// RedBox/error-boundary are terminal for the screen; don't also report lesser surfaces.
|
|
172
218
|
if (s.severity === 'high')
|
|
173
219
|
break;
|
|
174
220
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/oracle/health.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/oracle/health.ts"],"names":[],"mappings":"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"}
|
package/dist/oracle/locator.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Locator suggestions + durability scoring (
|
|
1
|
+
// Locator suggestions + durability scoring (Locator And Maintainability). For each
|
|
2
2
|
// element, recommend the most durable way to target it and score how brittle that is, following
|
|
3
3
|
// the QA-standard priority: accessibility id / content-desc > resource-id / test tag > stable
|
|
4
4
|
// visible text > relative structure > coordinate/image (last resort). The screen-level
|
|
@@ -77,7 +77,7 @@ export function suggestLocator(el, opts = {}) {
|
|
|
77
77
|
tier: 'accessibility',
|
|
78
78
|
durability: TIER_DURABILITY.accessibility,
|
|
79
79
|
locator: el.id,
|
|
80
|
-
rationale: 'accessibilityIdentifier
|
|
80
|
+
rationale: 'accessibilityIdentifier: preferred durable iOS/XCUITest locator',
|
|
81
81
|
needsTestId: false,
|
|
82
82
|
};
|
|
83
83
|
}
|
|
@@ -89,7 +89,7 @@ export function suggestLocator(el, opts = {}) {
|
|
|
89
89
|
tier: 'accessibility',
|
|
90
90
|
durability: 78,
|
|
91
91
|
locator: el.label,
|
|
92
|
-
rationale: 'accessibility label/name
|
|
92
|
+
rationale: 'accessibility label/name: usable, but add an accessibilityIdentifier for CI-stable iOS flows',
|
|
93
93
|
needsTestId: el.clickable,
|
|
94
94
|
suggestedTestId: el.clickable ? suggestedHandle(el, platform) : undefined,
|
|
95
95
|
};
|
|
@@ -104,8 +104,8 @@ export function suggestLocator(el, opts = {}) {
|
|
|
104
104
|
durability: short ? 35 : 58,
|
|
105
105
|
locator: el.text,
|
|
106
106
|
rationale: short
|
|
107
|
-
? 'visible value/text is short or numeric
|
|
108
|
-
: 'visible value/text
|
|
107
|
+
? 'visible value/text is short or numeric, brittle on iOS; add an accessibilityIdentifier'
|
|
108
|
+
: 'visible value/text: usable but copy/localization dependent; prefer accessibilityIdentifier',
|
|
109
109
|
needsTestId: el.clickable,
|
|
110
110
|
suggestedTestId: el.clickable ? suggestedHandle(el, platform) : undefined,
|
|
111
111
|
};
|
|
@@ -118,7 +118,7 @@ export function suggestLocator(el, opts = {}) {
|
|
|
118
118
|
tier: 'structure',
|
|
119
119
|
durability: TIER_DURABILITY.structure,
|
|
120
120
|
locator: null,
|
|
121
|
-
rationale: 'hittable control has no accessibilityIdentifier, label, or text
|
|
121
|
+
rationale: 'hittable control has no accessibilityIdentifier, label, or text. Predicate/class-chain/coordinates only; add an accessibilityIdentifier',
|
|
122
122
|
needsTestId: true,
|
|
123
123
|
suggestedTestId: suggestedHandle(el, platform),
|
|
124
124
|
};
|
|
@@ -130,7 +130,7 @@ export function suggestLocator(el, opts = {}) {
|
|
|
130
130
|
tier: 'coordinate',
|
|
131
131
|
durability: TIER_DURABILITY.coordinate,
|
|
132
132
|
locator: null,
|
|
133
|
-
rationale: 'no durable iOS handle
|
|
133
|
+
rationale: 'no durable iOS handle, visual/coordinate targeting only',
|
|
134
134
|
needsTestId: el.clickable,
|
|
135
135
|
suggestedTestId: el.clickable ? suggestedHandle(el, platform) : undefined,
|
|
136
136
|
};
|
|
@@ -144,7 +144,7 @@ export function suggestLocator(el, opts = {}) {
|
|
|
144
144
|
tier: 'accessibility',
|
|
145
145
|
durability: TIER_DURABILITY.accessibility,
|
|
146
146
|
locator: el.label,
|
|
147
|
-
rationale: 'content-desc / accessibility label
|
|
147
|
+
rationale: 'content-desc / accessibility label: durable and a11y-friendly',
|
|
148
148
|
needsTestId: false,
|
|
149
149
|
};
|
|
150
150
|
}
|
|
@@ -157,7 +157,7 @@ export function suggestLocator(el, opts = {}) {
|
|
|
157
157
|
tier: 'resource_id',
|
|
158
158
|
durability: TIER_DURABILITY.resource_id,
|
|
159
159
|
locator: el.id,
|
|
160
|
-
rationale: 'resource-id / testID
|
|
160
|
+
rationale: 'resource-id / testID: durable',
|
|
161
161
|
needsTestId: false,
|
|
162
162
|
};
|
|
163
163
|
}
|
|
@@ -172,8 +172,8 @@ export function suggestLocator(el, opts = {}) {
|
|
|
172
172
|
durability: short ? 40 : TIER_DURABILITY.visible_text,
|
|
173
173
|
locator: el.text,
|
|
174
174
|
rationale: short
|
|
175
|
-
? 'visible text, but very short/numeric
|
|
176
|
-
: 'visible text
|
|
175
|
+
? 'visible text, but very short/numeric, brittle; add a testID'
|
|
176
|
+
: 'visible text: usable but breaks if copy/localization changes',
|
|
177
177
|
needsTestId: el.clickable,
|
|
178
178
|
suggestedTestId: el.clickable ? suggestedHandle(el, platform) : undefined,
|
|
179
179
|
};
|
|
@@ -187,7 +187,7 @@ export function suggestLocator(el, opts = {}) {
|
|
|
187
187
|
tier: 'structure',
|
|
188
188
|
durability: TIER_DURABILITY.structure,
|
|
189
189
|
locator: null,
|
|
190
|
-
rationale: 'clickable but has no id/label/text
|
|
190
|
+
rationale: 'clickable but has no id/label/text. Only structural/coordinate targeting; add a testID',
|
|
191
191
|
needsTestId: true,
|
|
192
192
|
suggestedTestId: suggestedHandle(el, platform),
|
|
193
193
|
};
|
|
@@ -200,7 +200,7 @@ export function suggestLocator(el, opts = {}) {
|
|
|
200
200
|
tier: 'coordinate',
|
|
201
201
|
durability: TIER_DURABILITY.coordinate,
|
|
202
202
|
locator: null,
|
|
203
|
-
rationale: 'no durable handle
|
|
203
|
+
rationale: 'no durable handle, coordinate/image match only',
|
|
204
204
|
needsTestId: el.clickable,
|
|
205
205
|
suggestedTestId: el.clickable ? suggestedHandle(el, platform) : undefined,
|
|
206
206
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locator.js","sourceRoot":"","sources":["../../src/oracle/locator.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,gGAAgG;AAChG,8FAA8F;AAC9F,uFAAuF;AACvF,mFAAmF;AAOnF,MAAM,eAAe,GAAgC;IACnD,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;CACf,CAAC;AAeF,+DAA+D;AAC/D,MAAM,QAAQ,GAAG,gHAAgH,CAAC;AAClI,MAAM,YAAY,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAE7E,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,OAAO,GACX,IAAI;SACD,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,EAAE;QACN,EAAE,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK;SACf,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,OAAO,CACL,GAAG;SACA,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,IAAI,SAAS,CAC9B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAmB,EAAE,QAAyB;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC;IAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAyB;IAClD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,gEAAgE,CAAC;IAC9F,IAAI,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,sCAAsC,CAAC;IACzG,IACE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,4FAA4F,CAAC,IAAI,CAAC,IAAI,CAAC;QAEvG,OAAO,6DAA6D,CAAC;IACvE,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,qCAAqC,CAAC;IAC7E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAmB,EAAE,OAAuC,EAAE;IAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC5C,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,0FAA0F;QAC1F,8FAA8F;QAC9F,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ;gBACR,WAAW,EAAE,0BAA0B;gBACvC,IAAI,EAAE,eAAe;gBACrB,UAAU,EAAE,eAAe,CAAC,aAAa;gBACzC,OAAO,EAAE,EAAE,CAAC,EAAE;gBACd,SAAS,EAAE,kEAAkE;gBAC7E,WAAW,EAAE,KAAK;aACnB,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ;gBACR,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,eAAe;gBACrB,UAAU,EAAE,EAAE;gBACd,OAAO,EAAE,EAAE,CAAC,KAAK;gBACjB,SAAS,EAAE,+FAA+F;gBAC1G,WAAW,EAAE,EAAE,CAAC,SAAS;gBACzB,eAAe,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;aAC1E,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACzE,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ;gBACR,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC3B,OAAO,EAAE,EAAE,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK;oBACd,CAAC,CAAC,yFAAyF;oBAC3F,CAAC,CAAC,6FAA6F;gBACjG,WAAW,EAAE,EAAE,CAAC,SAAS;gBACzB,eAAe,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;aAC1E,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ;gBACR,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,eAAe,CAAC,SAAS;gBACrC,OAAO,EAAE,IAAI;gBACb,SAAS,EACP,0IAA0I;gBAC5I,WAAW,EAAE,IAAI;gBACjB,eAAe,EAAE,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC;aAC/C,CAAC;QACJ,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,QAAQ;YACR,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,eAAe,CAAC,UAAU;YACtC,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,0DAA0D;YACrE,WAAW,EAAE,EAAE,CAAC,SAAS;YACzB,eAAe,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAC1E,CAAC;IACJ,CAAC;IAED,2FAA2F;IAC3F,IAAI,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,GAAG,IAAI;YACP,QAAQ;YACR,WAAW,EAAE,qBAAqB;YAClC,IAAI,EAAE,eAAe;YACrB,UAAU,EAAE,eAAe,CAAC,aAAa;YACzC,OAAO,EAAE,EAAE,CAAC,KAAK;YACjB,SAAS,EAAE,gEAAgE;YAC3E,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IACD,mFAAmF;IACnF,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,GAAG,IAAI;YACP,QAAQ;YACR,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,eAAe,CAAC,WAAW;YACvC,OAAO,EAAE,EAAE,CAAC,EAAE;YACd,SAAS,EAAE,gCAAgC;YAC3C,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IACD,sEAAsE;IACtE,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO;YACL,GAAG,IAAI;YACP,QAAQ;YACR,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY;YACrD,OAAO,EAAE,EAAE,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK;gBACd,CAAC,CAAC,8DAA8D;gBAChE,CAAC,CAAC,+DAA+D;YACnE,WAAW,EAAE,EAAE,CAAC,SAAS;YACzB,eAAe,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAC1E,CAAC;IACJ,CAAC;IACD,qEAAqE;IACrE,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO;YACL,GAAG,IAAI;YACP,QAAQ;YACR,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,eAAe,CAAC,SAAS;YACrC,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,yFAAyF;YACpG,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC;SAC/C,CAAC;IACJ,CAAC;IACD,sCAAsC;IACtC,OAAO;QACL,GAAG,IAAI;QACP,QAAQ;QACR,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,eAAe,CAAC,UAAU;QACtC,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,iDAAiD;QAC5D,WAAW,EAAE,EAAE,CAAC,SAAS;QACzB,eAAe,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KAC1E,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,mBAAmB,CACjC,WAAgC,EAChC,QAA2B,EAC3B,OAAuC,EAAE;IAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,QAAQ,KAAK,KAAK;YAAE,OAAO,CAAC,EAAE,WAAW,KAAK,0BAA0B,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;QAClB,OAAO,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,aAAa,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtG,MAAM,KAAK,GAAmB,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7G,MAAM,WAAW,GAAG,WAAW;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO;YAC7B,CAAC,CAAC,yBAAyB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAE,CAAC,IAAI,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAE,CAAC,OAAO,GAAG;YACnF,CAAC,CAAC,mBAAmB;QACvB,eAAe,EAAE,CAAC,CAAC,eAAe;KACnC,CAAC,CAAC,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAC1H,CAAC;AAWD,MAAM,UAAU,sBAAsB,CACpC,WAAgC,EAChC,QAA2B,EAC3B,OAAuC,EAAE;IAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC5C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAyB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBACnE,IAAI,CAAC,CAAC,eAAe;oBAAE,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClF,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,sCAAsC;gBAC5C,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,oEAAoE;gBAC9F,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC/B,UAAU,EAAE,sHAAsH;gBAClI,gBAAgB,EAAE,OAAO;qBACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;qBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACX,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,eAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,eAAgB;iBACzG,CAAC,CAAC;aACN,CAAC,CAAC;QACL,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS;gBAAE,SAAS;YACrC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAC9B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,sCAAsC,KAAK,gBAAgB,IAAI,CAAC,MAAM,wBAAwB;gBACvG,IAAI;gBACJ,UAAU,EAAE,iGAAiG;aAC9G,CAAC,CAAC;QACL,CAAC;QACD,MAAM,WAAW,GAAG,WAAW;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,cAAc,IAAI,CAAC,CAAC,WAAW,KAAK,qBAAqB,CAAC;aAC1F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;aAClF,MAAM,CAAC,CAAC,CAAC,EAA0D,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACrF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,GAAG,WAAW,CAAC,MAAM,mDAAmD;gBACjF,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC9C,UAAU,EAAE,4GAA4G;aACzH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACpG,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,GAAG,cAAc,CAAC,MAAM,0FAA0F;YAC3H,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACtC,UAAU,EACR,QAAQ,KAAK,KAAK;gBAChB,CAAC,CAAC,4EAA4E;gBAC9E,CAAC,CAAC,oFAAoF;SAC3F,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"locator.js","sourceRoot":"","sources":["../../src/oracle/locator.ts"],"names":[],"mappings":"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"}
|
package/dist/oracle/record.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Record health findings into the session for qa_report (review #3, Phase 2.2).
|
|
2
2
|
// Shared by qa_act (auto after each action) and qa_check_health (on demand). Carries the
|
|
3
|
-
// native/app layer + visible-text evidence, and
|
|
3
|
+
// native/app layer + visible-text evidence, and (for app-layer error surfaces) captures
|
|
4
4
|
// ONE screenshot as evidence and attaches its URI to those findings.
|
|
5
5
|
export async function recordHealthFindings(sessions, session, findings, driver, screen) {
|
|
6
6
|
// Capture one screenshot of an app-layer error surface (RedBox / error-boundary / etc.)
|
|
7
|
-
// so the report shows WHAT broke, not just that something did. Evidence
|
|
7
|
+
// so the report shows WHAT broke, not just that something did. Evidence, not budgeted.
|
|
8
8
|
let evidenceUri;
|
|
9
9
|
const appError = findings.find((f) => f.layer === 'app' && (f.severity === 'high' || f.severity === 'medium'));
|
|
10
10
|
// Sensitive mode: record the finding but DON'T capture pixels.
|
|
@@ -14,7 +14,7 @@ export async function recordHealthFindings(sessions, session, findings, driver,
|
|
|
14
14
|
evidenceUri = sessions.saveArtifact(session, 'screenshot', `app-error-${Date.now()}.png`, png, 'image/png', `app-health: ${appError.kind}`);
|
|
15
15
|
}
|
|
16
16
|
catch {
|
|
17
|
-
/* best-effort
|
|
17
|
+
/* best-effort; evidence is a bonus, not required */
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
for (const f of findings) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/oracle/record.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yFAAyF;AACzF,
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/oracle/record.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yFAAyF;AACzF,wFAAwF;AACxF,qEAAqE;AAMrE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAsB,EACtB,OAAgB,EAChB,QAAmB,EACnB,MAAe,EACf,MAAe;IAEf,wFAAwF;IACxF,uFAAuF;IACvF,IAAI,WAA+B,CAAC;IACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;IAC/G,+DAA+D;IAC/D,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YACtC,WAAW,GAAG,QAAQ,CAAC,YAAY,CACjC,OAAO,EACP,YAAY,EACZ,aAAa,IAAI,CAAC,GAAG,EAAE,MAAM,EAC7B,GAAG,EACH,WAAW,EACX,eAAe,QAAQ,CAAC,IAAI,EAAE,CAC/B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;YAAE,SAAS;QACpC,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAC7F,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3B,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM;YACN,aAAa;SACd,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// Uniform terminal result envelope for qa_test_this (Developer 1,
|
|
2
|
-
// Every terminal orchestration state
|
|
1
|
+
// Uniform terminal result envelope for qa_test_this (Developer 1, Milestone B).
|
|
2
|
+
// Every terminal orchestration state (completed | blocked | unsafe | needs_input | running)
|
|
3
3
|
// is summarizable from STRUCTURED output, with no log parsing: what was attempted, what safe
|
|
4
4
|
// fallbacks were taken, which artifact/target was chosen and why, typed blockers with owner +
|
|
5
5
|
// fix, the report URI, and the single exact next call.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/orchestration/envelope.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/orchestration/envelope.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,4FAA4F;AAC5F,6FAA6F;AAC7F,8FAA8F;AAC9F,uDAAuD;AACvD,EAAE;AACF,8FAA8F;AAC9F,8FAA8F;AAC9F,yDAAyD;AAEzD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAoB,MAAM,uBAAuB,CAAC;AAmEhG;oFACoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,QAAgC;IACjF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAmB,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,4BAA4B;YACzC,QAAQ,EAAE,+DAA+D;YACzE,GAAG,QAAQ;SACZ,CAAC;IACJ,CAAC;IACD,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,YAAY,CAAC,IAAmB,CAAC;QACxC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,aAAa,EAAE,aAAa,CAAC,IAAmB,CAAC;QACjD,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CAAC,KAAoB;IACxD,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;QAChC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,EAAE;QACtD,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;QAC5C,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI;QACxC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,IAAI,IAAI;KAC3D,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// qa_test_this goal routing (Developer 1,
|
|
2
|
-
// FLAGS and REQUIRED OUTPUTS only
|
|
1
|
+
// qa_test_this goal routing (Developer 1, Milestone C). A `goal` adjusts ORCHESTRATION
|
|
2
|
+
// FLAGS and REQUIRED OUTPUTS only. It never duplicates suite/report/platform logic (those stay in
|
|
3
3
|
// the services Developer 2/3 own). Keeping the mapping a pure, exported helper makes goal behavior
|
|
4
4
|
// unit-testable without a device, and keeps `qa_test_this` an orchestrator rather than a switchboard.
|
|
5
5
|
export const TEST_GOALS = ['smoke', 'explore', 'create_automation_suite', 'release_gate', 'test_login', 'reproduce_bug'];
|
|
@@ -57,7 +57,7 @@ const BASE = {
|
|
|
57
57
|
* Resolve a goal into orchestration flags. Explicit per-flag overrides win, so existing callers
|
|
58
58
|
* passing `explore`/`generateSuite`/`stopOnNeedsInput` keep working unchanged.
|
|
59
59
|
*
|
|
60
|
-
* DEFAULT POLICY (no explicit goal): "leave behind automation when possible"
|
|
60
|
+
* DEFAULT POLICY (no explicit goal): "leave behind automation when possible". The run still does
|
|
61
61
|
* a fast launch + smoke, but ALSO attempts POM suite generation afterward (the suite service skips
|
|
62
62
|
* honestly when no actions were recorded). Opt out with `goal:"smoke"` (fast, explicit) or
|
|
63
63
|
* `policy.fastSmoke:true`.
|
|
@@ -75,7 +75,7 @@ export function resolveGoalFlags(goal, overrides = {}, policy = {}) {
|
|
|
75
75
|
'Default autopilot: fast launch + smoke, then generate a POM suite when actions exist (goal:"smoke" or fastSmoke:true to skip).';
|
|
76
76
|
}
|
|
77
77
|
if (policy.fastSmoke) {
|
|
78
|
-
// Strongest "just smoke, fast" signal
|
|
78
|
+
// Strongest "just smoke, fast" signal; it overrides the default automation attempt.
|
|
79
79
|
base.generateSuite = false;
|
|
80
80
|
base.explore = false;
|
|
81
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../../src/orchestration/goal.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../../src/orchestration/goal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// qa_test_this execute/interactive mode gate
|
|
1
|
+
// qa_test_this execute/interactive mode gate. Handles the synchronous half of execution:
|
|
2
2
|
// the auth question, the unified consent preflight (Milestone A), job creation, and the
|
|
3
3
|
// optional waitForCompletion window. The heavy pipeline itself runs in ./pipeline.js.
|
|
4
4
|
import { qaOk } from '../../lib/result.js';
|
|
@@ -6,25 +6,45 @@ import { qaNeedsInput, NeedsInput } from '../../lib/needsInput.js';
|
|
|
6
6
|
import { buildPlan } from '../../build/plan.js';
|
|
7
7
|
import { requireConsent, consumeConsent } from '../../consent/consent.js';
|
|
8
8
|
import { buildTestThisPreflight } from '../../services/preflight.js';
|
|
9
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
10
|
-
import {
|
|
9
|
+
import { existsSync, readFileSync, realpathSync } from 'node:fs';
|
|
10
|
+
import { isAbsolute, relative, resolve } from 'node:path';
|
|
11
11
|
import { createHash } from 'node:crypto';
|
|
12
12
|
import { runExecutePipeline } from './pipeline.js';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
import { hasUsableCredentials, credentialsLostOnRestart, isLoginDeclined } from './sessionIntent.js';
|
|
14
|
+
import { runWithSignal } from '../../lib/abortScope.js';
|
|
15
|
+
function realOrResolved(p) {
|
|
16
|
+
try {
|
|
17
|
+
return realpathSync(p);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return resolve(p);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Whether `p` is inside `root` after resolving `..` segments and symlinks (a plain string prefix
|
|
24
|
+
* check lets `<root>/../../x.apk` count as in-root). */
|
|
25
|
+
export function isWithinRoot(p, root) {
|
|
26
|
+
const rel = relative(realOrResolved(root), realOrResolved(p));
|
|
27
|
+
return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
|
16
28
|
}
|
|
17
29
|
/** Execute / interactive orchestration: handle questions + consent synchronously, then run the
|
|
18
|
-
* build/convert
|
|
30
|
+
* build/convert > prepare > smoke > report pipeline as a job. */
|
|
19
31
|
export async function runExecuteMode(server, sessions, session, a) {
|
|
20
|
-
// 1. Auth question
|
|
21
|
-
if (a.scan.likelyAuth &&
|
|
32
|
+
// 1. Auth question: interactive (or stopOnNeedsInput / goal:test_login) asks; execute proceeds pre-login.
|
|
33
|
+
if (a.scan.likelyAuth &&
|
|
34
|
+
!isLoginDeclined(session) &&
|
|
35
|
+
!hasUsableCredentials(session) &&
|
|
36
|
+
(a.mode === 'interactive' || a.stopOnNeedsInput)) {
|
|
37
|
+
// Stored credential METADATA survives a restart but the values do not. Re-ask, and say why.
|
|
38
|
+
const lost = credentialsLostOnRestart(session);
|
|
22
39
|
const attempted = [
|
|
23
40
|
`scanned project (framework=${a.scan.framework}; detected likely auth: ${a.scan.authSignals.slice(0, 3).join(', ') || 'login UI'})`,
|
|
24
41
|
`resolved artifact + target (${a.target.selected ?? 'unknown'})`,
|
|
25
42
|
...session.workarounds,
|
|
43
|
+
...(lost ? ['found stored credential metadata, but the values were not kept across the server restart (secrets never persist)'] : []),
|
|
26
44
|
];
|
|
27
|
-
return qaNeedsInput(NeedsInput.credentials(
|
|
45
|
+
return qaNeedsInput(NeedsInput.credentials(lost
|
|
46
|
+
? 'Credentials were provided earlier, but their values are gone after a server restart (secrets are never persisted).'
|
|
47
|
+
: 'Authenticated workflows need a test account.'), {
|
|
28
48
|
sessionId: session.id,
|
|
29
49
|
state: 'needs_input',
|
|
30
50
|
attempted,
|
|
@@ -43,12 +63,12 @@ export async function runExecuteMode(server, sessions, session, a) {
|
|
|
43
63
|
}
|
|
44
64
|
// Hash an external (outside-root) APK so the consent shows what is being installed.
|
|
45
65
|
let externalApk;
|
|
46
|
-
if (a.isAndroid && !a.needBuild && a.effectiveApk && existsSync(a.effectiveApk) && !a.effectiveApk
|
|
66
|
+
if (a.isAndroid && !a.needBuild && a.effectiveApk && existsSync(a.effectiveApk) && !isWithinRoot(a.effectiveApk, session.root)) {
|
|
47
67
|
try {
|
|
48
68
|
externalApk = { path: a.effectiveApk, sha256: createHash('sha256').update(readFileSync(a.effectiveApk)).digest('hex') };
|
|
49
69
|
}
|
|
50
70
|
catch {
|
|
51
|
-
/* unreadable
|
|
71
|
+
/* unreadable: treated as in-root install */
|
|
52
72
|
}
|
|
53
73
|
}
|
|
54
74
|
const iosApp = !a.isAndroid && !a.isIosReal ? a.art.best?.path : undefined;
|
|
@@ -63,7 +83,7 @@ export async function runExecuteMode(server, sessions, session, a) {
|
|
|
63
83
|
apkPath: a.isAndroid ? a.effectiveApk : undefined,
|
|
64
84
|
externalApk,
|
|
65
85
|
iosApp,
|
|
66
|
-
iosAppOutsideRoot: iosApp ? !iosApp
|
|
86
|
+
iosAppOutsideRoot: iosApp ? !isWithinRoot(iosApp, session.root) : undefined,
|
|
67
87
|
iosReal: a.isIosReal,
|
|
68
88
|
iosRealUdid: a.isIosReal ? a.target.device : undefined,
|
|
69
89
|
iosRealApp: a.isIosReal ? a.art.best?.path : undefined,
|
|
@@ -88,10 +108,28 @@ export async function runExecuteMode(server, sessions, session, a) {
|
|
|
88
108
|
affects: preflight.consentAffects,
|
|
89
109
|
explain: `Running "test this" needs these privileged steps (approved together so they don't re-prompt):\n${preflight.exactCommand}\nApprove to start; Swipium then installs, smokes, reports${a.generateSuite ? ', and generates a suite' : ''}.`,
|
|
90
110
|
});
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
111
|
+
// A supplied consentId that could not be used must be explained, never a silent re-challenge.
|
|
112
|
+
const staleNote = a.consentId
|
|
113
|
+
? `consent ${a.consentId} ${/unknown|expired|already-used/i.test(gate.reason ?? '') ? 'unknown or expired' : `not applied (${gate.reason ?? 'not usable'})`}; new challenge issued`
|
|
114
|
+
: undefined;
|
|
115
|
+
// sessionId rides on the consent result so the approving re-call reuses THIS session (no
|
|
116
|
+
// projectRoot needed); the static app map URI stays visible too (Fix 1).
|
|
117
|
+
const sc = (consentResult.structuredContent ?? {});
|
|
118
|
+
consentResult.structuredContent = {
|
|
119
|
+
...sc,
|
|
120
|
+
sessionId: session.id,
|
|
121
|
+
...(a.appMapUri ? { appMapUri: a.appMapUri } : {}),
|
|
122
|
+
...(staleNote ? { consentNote: staleNote, previousConsentId: a.consentId } : {}),
|
|
123
|
+
};
|
|
124
|
+
const approveCall = { sessionId: session.id, mode: a.mode, consentId: sc.consentId, approve: true };
|
|
125
|
+
consentResult.content = [
|
|
126
|
+
...(staleNote ? [{ type: 'text', text: `⚠️ ${staleNote}.` }] : []),
|
|
127
|
+
...(consentResult.content ?? []),
|
|
128
|
+
{
|
|
129
|
+
type: 'text',
|
|
130
|
+
text: `After the user agrees: qa_test_this ${JSON.stringify(approveCall)} (plus your original goal/flags).`,
|
|
131
|
+
},
|
|
132
|
+
];
|
|
95
133
|
return consentResult;
|
|
96
134
|
}
|
|
97
135
|
mutationConsent = { required: true, consentId: a.consentId, approved: true };
|
|
@@ -107,7 +145,10 @@ export async function runExecuteMode(server, sessions, session, a) {
|
|
|
107
145
|
}
|
|
108
146
|
const job = sessions.createJob(session, `test_this:${a.mode}`);
|
|
109
147
|
const execArgs = { ...a, mutationConsent, testThisPlanMutation };
|
|
110
|
-
|
|
148
|
+
// The job's cancellation signal is scoped to its own async context (abortScope): driver calls
|
|
149
|
+
// made by the pipeline are cancelled with the job, and interactive calls made concurrently on
|
|
150
|
+
// the shared driver keep their own signal.
|
|
151
|
+
const run = runWithSignal(sessions.abortSignal(session, job.jobId), () => runExecutePipeline(sessions, session, job, execArgs));
|
|
111
152
|
// Optional blocking mode for short paths (Milestone D). Default = return the running job.
|
|
112
153
|
if (a.waitForCompletion) {
|
|
113
154
|
const deadline = Date.now() + (a.timeoutMs ?? 120_000);
|
|
@@ -117,10 +158,10 @@ export async function runExecuteMode(server, sessions, session, a) {
|
|
|
117
158
|
const res = (cur.result ?? {});
|
|
118
159
|
return qaOk({ sessionId: session.id, mode: a.mode, jobId: job.jobId, appMapUri: a.appMapUri, ...res }, cur.resultText ?? `test-this ${a.mode} ${res.state ?? cur.status}.`);
|
|
119
160
|
}
|
|
120
|
-
// Timed out
|
|
121
|
-
return qaOk({ sessionId: session.id, state: 'running', mode: a.mode, jobId: job.jobId, appMapUri: a.appMapUri, timedOutWaiting: true }, `⏳ test-this ${a.mode} still running after the wait window
|
|
161
|
+
// Timed out: leave the job running and tell the agent to poll.
|
|
162
|
+
return qaOk({ sessionId: session.id, state: 'running', mode: a.mode, jobId: job.jobId, appMapUri: a.appMapUri, timedOutWaiting: true }, `⏳ test-this ${a.mode} still running after the wait window. Poll qa_job_status { sessionId:"${session.id}", jobId:"${job.jobId}" }.`);
|
|
122
163
|
}
|
|
123
164
|
void run;
|
|
124
|
-
return qaOk({ sessionId: session.id, state: 'running', mode: a.mode, jobId: job.jobId, kind: job.kind, appMapUri: a.appMapUri, target: a.target }, `🚀 test-this ${a.mode} started as job ${job.jobId} (${a.isAndroid ? 'Android' : 'iOS'} · ${a.target.selected}). Poll qa_job_status { sessionId:"${session.id}", jobId:"${job.jobId}" } for the terminal result (state: completed | blocked | unsafe).`);
|
|
165
|
+
return qaOk({ sessionId: session.id, state: 'running', mode: a.mode, jobId: job.jobId, kind: job.kind, appMapUri: a.appMapUri, target: a.target }, `🚀 test-this ${a.mode} started as job ${job.jobId} (${a.isAndroid ? 'Android' : 'iOS'} · ${a.target.selected}). Poll qa_job_status { sessionId:"${session.id}", jobId:"${job.jobId}" } for the terminal result (state: completed | blocked | unsafe | needs_input).`);
|
|
125
166
|
}
|
|
126
167
|
//# sourceMappingURL=execute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/orchestration/testThis/execute.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/orchestration/testThis/execute.ts"],"names":[],"mappings":"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"}
|