swipium 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +142 -0
- package/README.md +89 -25
- package/THREAT_MODEL.md +1 -1
- package/dist/appMap/automationLink.js +13 -3
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +28 -6
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +29 -3
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +20 -2
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +42 -6
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +22 -4
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/fsWalk.js +19 -2
- package/dist/appMap/fsWalk.js.map +1 -1
- package/dist/appMap/issues.js +0 -20
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +1 -1
- package/dist/appMap/migrations.js.map +1 -1
- package/dist/appMap/prelaunch.js.map +1 -1
- package/dist/appMap/projectRegistry.js +8 -2
- package/dist/appMap/projectRegistry.js.map +1 -1
- package/dist/appMap/query.js +20 -4
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +9 -2
- package/dist/appMap/runtimeMerge.js.map +1 -1
- package/dist/appMap/schema.js.map +1 -1
- package/dist/appMap/screenMatch.js +5 -1
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +134 -22
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +4 -79
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +31 -9
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +44 -7
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +33 -6
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +109 -27
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +5 -1
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +65 -17
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +12 -2
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +8 -3
- package/dist/automation/selectors.js.map +1 -1
- package/dist/automation/types.js.map +1 -1
- package/dist/automation/waits.js +9 -3
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +7 -1
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +3 -1
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +1 -1
- package/dist/automationGen/ciEmitter.js.map +1 -1
- package/dist/automationGen/jsEmitter.js +29 -21
- package/dist/automationGen/jsEmitter.js.map +1 -1
- package/dist/automationGen/projectProfile.js +5 -1
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +3 -3
- package/dist/automationGen/pythonEmitter.js.map +1 -1
- package/dist/automationGen/readmeEmitter.js.map +1 -1
- package/dist/automationGen/suitePlan.js +11 -6
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +33 -5
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +234 -30
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +33 -12
- package/dist/build/plan.js.map +1 -1
- package/dist/ci/preflight.js.map +1 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/scan.js +1 -1
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +2 -2
- package/dist/cli/suite.js.map +1 -1
- package/dist/cli/verify.js.map +1 -1
- package/dist/context/detect.js +10 -4
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +16 -2
- package/dist/context/findApps.js.map +1 -1
- package/dist/context/scan.js.map +1 -1
- package/dist/core/target.js +7 -5
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +135 -17
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +17 -7
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +4 -1
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +15 -5
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +5 -1
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +11 -2
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/memory.js +4 -1
- package/dist/explore/memory.js.map +1 -1
- package/dist/explore/planner.js +54 -9
- package/dist/explore/planner.js.map +1 -1
- package/dist/explore/policy.js +6 -1
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +179 -23
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +3 -1
- package/dist/explore/signatures.js.map +1 -1
- package/dist/explore/suite.js +3 -1
- package/dist/explore/suite.js.map +1 -1
- package/dist/featureTesting/executionBootstrap.js +128 -19
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +4 -1
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +94 -13
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +37 -8
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +5 -1
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +10 -2
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +4 -1
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +7 -1
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +31 -3
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +16 -4
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +32 -10
- package/dist/featureTesting/testPlan.js.map +1 -1
- package/dist/firstRun/classifyScreen.js +4 -1
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +5 -2
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +84 -23
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +16 -6
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +40 -6
- package/dist/firstRun/inputPlanner.js.map +1 -1
- package/dist/firstRun/paywallPolicy.js.map +1 -1
- package/dist/fixtures/catalog.js +39 -6
- package/dist/fixtures/catalog.js.map +1 -1
- package/dist/flows/generate.js +53 -12
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/lint.js +88 -14
- package/dist/flows/lint.js.map +1 -1
- package/dist/flows/pack.js +18 -2
- package/dist/flows/pack.js.map +1 -1
- package/dist/flows/repair.js +71 -20
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +164 -51
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +57 -20
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +5 -1
- package/dist/flows/seedExec.js.map +1 -1
- package/dist/ios/signing.js +32 -3
- package/dist/ios/signing.js.map +1 -1
- package/dist/issues/classify.js +12 -4
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +11 -5
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +4 -20
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +2 -1
- package/dist/issues/metrics.js.map +1 -1
- package/dist/issues/recurrence.js.map +1 -1
- package/dist/issues/report.js +8 -4
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +36 -5
- package/dist/issues/reportBridge.js.map +1 -1
- package/dist/issues/schema.js.map +1 -1
- package/dist/issues/store.js.map +1 -1
- package/dist/lib/android.js +9 -1
- package/dist/lib/android.js.map +1 -1
- package/dist/lib/device.js +21 -5
- package/dist/lib/device.js.map +1 -1
- package/dist/lib/image.js +11 -2
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +60 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/needsInput.js +6 -3
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +2 -1
- package/dist/lib/png.js.map +1 -1
- package/dist/lib/result.js +16 -1
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +4 -2
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +3 -1
- package/dist/lib/sensitive.js.map +1 -1
- package/dist/lib/simctl.js.map +1 -1
- package/dist/lib/spawn.js +29 -10
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/wda.js +27 -10
- package/dist/lib/wda.js.map +1 -1
- package/dist/lib/wdaConfig.js +12 -5
- package/dist/lib/wdaConfig.js.map +1 -1
- package/dist/lib/wdaTune.js +52 -23
- package/dist/lib/wdaTune.js.map +1 -1
- package/dist/mobileAudit/checks.js +141 -19
- package/dist/mobileAudit/checks.js.map +1 -1
- package/dist/mobileAudit/profiles.js +120 -19
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +7 -2
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +144 -19
- package/dist/mobileAudit/runner.js.map +1 -1
- package/dist/oracle/auth.js.map +1 -1
- package/dist/oracle/failures.js +888 -131
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +90 -14
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +147 -18
- package/dist/oracle/locator.js.map +1 -1
- package/dist/oracle/record.js.map +1 -1
- package/dist/orchestration/goal.js +3 -9
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +126 -0
- package/dist/orchestration/testThis/execute.js.map +1 -0
- package/dist/orchestration/testThis/pipeline.js +324 -0
- package/dist/orchestration/testThis/pipeline.js.map +1 -0
- package/dist/orchestration/testThis/plan.js +430 -0
- package/dist/orchestration/testThis/plan.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +118 -0
- package/dist/orchestration/testThis/terminal.js.map +1 -0
- package/dist/orchestration/testThis/types.js +12 -0
- package/dist/orchestration/testThis/types.js.map +1 -0
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +3 -3
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/coverage.js +0 -1
- package/dist/report/coverage.js.map +1 -1
- package/dist/report/evidence.js.map +1 -1
- package/dist/report/export.js +59 -37
- package/dist/report/export.js.map +1 -1
- package/dist/report/flake.js +13 -14
- package/dist/report/flake.js.map +1 -1
- package/dist/report/history.js +72 -38
- package/dist/report/history.js.map +1 -1
- package/dist/report/policy.js +11 -3
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +2 -8
- package/dist/report/qaLevel.js.map +1 -1
- package/dist/report/readiness.js +42 -12
- package/dist/report/readiness.js.map +1 -1
- package/dist/report/summary.js.map +1 -1
- package/dist/report/timing.js +23 -23
- package/dist/report/timing.js.map +1 -1
- package/dist/server.js +42 -37
- package/dist/server.js.map +1 -1
- package/dist/services/automationGenerate.js.map +1 -1
- package/dist/services/build.js +8 -2
- package/dist/services/build.js.map +1 -1
- package/dist/services/preflight.js +38 -6
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +46 -10
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +72 -10
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +173 -37
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +36 -6
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +16 -4
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +38 -6
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +16 -0
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +164 -0
- package/dist/session/processRegistry.js.map +1 -0
- package/dist/session/progress.js +1 -1
- package/dist/session/progress.js.map +1 -1
- package/dist/session/store.js +216 -43
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +7 -2
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +2 -8
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +27 -3
- package/dist/snapshot/present.js.map +1 -1
- package/dist/state/profile.js +36 -9
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +7 -2
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +21 -3
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +26 -4
- package/dist/suite/pom.js.map +1 -1
- package/dist/suite/testcase.js +6 -4
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +6 -2
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +31 -6
- package/dist/testSuite/generator.js.map +1 -1
- package/dist/testSuite/issueLinks.js.map +1 -1
- package/dist/testSuite/lint.js +1 -1
- package/dist/testSuite/lint.js.map +1 -1
- package/dist/testSuite/merge.js +8 -2
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +16 -11
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +9 -1
- package/dist/testSuite/store.js.map +1 -1
- package/dist/tools/act.js +107 -43
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +123 -25
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +16 -3
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +331 -63
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/assertVisual.js +12 -2
- package/dist/tools/assertVisual.js.map +1 -1
- package/dist/tools/automationGenerate.js +276 -241
- package/dist/tools/automationGenerate.js.map +1 -1
- package/dist/tools/build.js +92 -41
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +139 -28
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/capabilities.js +45 -71
- package/dist/tools/capabilities.js.map +1 -1
- package/dist/tools/clearOverlay.js +45 -8
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/detectContext.js +1 -1
- package/dist/tools/detectContext.js.map +1 -1
- package/dist/tools/device.js +44 -7
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +38 -15
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +96 -22
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +153 -114
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +95 -60
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +236 -101
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowGenerate.js +51 -47
- package/dist/tools/flowGenerate.js.map +1 -1
- package/dist/tools/flowRepair.js +24 -4
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +236 -0
- package/dist/tools/generate.js.map +1 -0
- package/dist/tools/getArtifact.js +21 -3
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +3 -1
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/history.js +40 -10
- package/dist/tools/history.js.map +1 -1
- package/dist/tools/ios.js +157 -25
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +19 -150
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +23 -4
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/locator.js +36 -8
- package/dist/tools/locator.js.map +1 -1
- package/dist/tools/metro.js +61 -16
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +67 -15
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +6 -1
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +20 -6
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/permissions.js +31 -6
- package/dist/tools/permissions.js.map +1 -1
- package/dist/tools/plan.js +5 -2
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +31 -8
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +97 -18
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +24 -5
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +9 -5
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +11 -2
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenInfo.js +8 -2
- package/dist/tools/screenInfo.js.map +1 -1
- package/dist/tools/screenRecord.js +74 -11
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +23 -6
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/seed.js +38 -6
- package/dist/tools/seed.js.map +1 -1
- package/dist/tools/smoke.js +16 -3
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +59 -6
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +54 -9
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/state.js +62 -15
- package/dist/tools/state.js.map +1 -1
- package/dist/tools/suite.js +350 -298
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +94 -28
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +30 -793
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +124 -18
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/visualText.js +51 -6
- package/dist/tools/visualText.js.map +1 -1
- package/dist/tools/wait.js +18 -3
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +157 -29
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +17 -49
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +12 -2
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +7 -3
- package/dist/visual/provider.js.map +1 -1
- package/docs/mcp-server.md +44 -4
- package/docs/tools.md +42 -100
- package/package.json +14 -5
- package/dist/appMap/diff.js +0 -60
- package/dist/appMap/diff.js.map +0 -1
- package/dist/automation/maestroIr.js +0 -282
- package/dist/automation/maestroIr.js.map +0 -1
- package/dist/interop/maestro.js +0 -151
- package/dist/interop/maestro.js.map +0 -1
- package/dist/tools/idling.js +0 -104
- package/dist/tools/idling.js.map +0 -1
- package/dist/tools/inputCapabilities.js +0 -30
- package/dist/tools/inputCapabilities.js.map +0 -1
- package/dist/tools/maestro.js +0 -78
- package/dist/tools/maestro.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareAndroid.js","sourceRoot":"","sources":["../../src/services/prepareAndroid.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,gGAAgG;AAChG,+FAA+F;AAC/F,wFAAwF;AAGxF,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EACL,UAAU,
|
|
1
|
+
{"version":3,"file":"prepareAndroid.js","sourceRoot":"","sources":["../../src/services/prepareAndroid.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,11 +13,19 @@ import * as sim from '../lib/simctl.js';
|
|
|
13
13
|
export async function prepareIos(sessions, session, args, ctx = {}) {
|
|
14
14
|
const progress = (t) => ctx.onProgress?.(t);
|
|
15
15
|
if (!(await sim.simctlAvailable())) {
|
|
16
|
-
return {
|
|
16
|
+
return {
|
|
17
|
+
ok: false,
|
|
18
|
+
failureCode: 'SIMULATOR_RUNTIME_MISSING',
|
|
19
|
+
error: 'simctl unavailable (macOS + Xcode required for iOS simulators).',
|
|
20
|
+
};
|
|
17
21
|
}
|
|
18
22
|
// .ipa on the simulator is the classic mistake — refuse with the right explanation.
|
|
19
23
|
if (args.app && /\.ipa$/i.test(args.app)) {
|
|
20
|
-
return {
|
|
24
|
+
return {
|
|
25
|
+
ok: false,
|
|
26
|
+
failureCode: 'IPA_NEEDS_REAL_DEVICE',
|
|
27
|
+
error: 'A .ipa cannot be installed on the simulator; public v1 needs a simulator-SDK .app.',
|
|
28
|
+
};
|
|
21
29
|
}
|
|
22
30
|
// ---- pick + boot simulator ----
|
|
23
31
|
progress('selecting simulator');
|
|
@@ -26,7 +34,11 @@ export async function prepareIos(sessions, session, args, ctx = {}) {
|
|
|
26
34
|
sims.find((s) => s.state === 'Booted') ||
|
|
27
35
|
sims.find((s) => /iphone/i.test(s.name));
|
|
28
36
|
if (!pick)
|
|
29
|
-
return {
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
failureCode: 'SIMULATOR_RUNTIME_MISSING',
|
|
40
|
+
error: 'No iOS simulator available — install a runtime / create one in Xcode.',
|
|
41
|
+
};
|
|
30
42
|
if (pick.state !== 'Booted') {
|
|
31
43
|
progress(`booting ${pick.name}`);
|
|
32
44
|
try {
|
|
@@ -36,7 +48,11 @@ export async function prepareIos(sessions, session, args, ctx = {}) {
|
|
|
36
48
|
}
|
|
37
49
|
catch (e) {
|
|
38
50
|
const msg = String(e);
|
|
39
|
-
return {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
failureCode: /timed out|timeout/i.test(msg) ? 'SIMULATOR_BOOT_TIMEOUT' : 'SIMULATOR_BOOT_FAILED',
|
|
54
|
+
error: `Boot failed: ${msg}`,
|
|
55
|
+
};
|
|
40
56
|
}
|
|
41
57
|
}
|
|
42
58
|
// bind a SimctlDriver
|
|
@@ -64,7 +80,13 @@ export async function prepareIos(sessions, session, args, ctx = {}) {
|
|
|
64
80
|
// A device-SDK (iphoneos) .app cannot run on the simulator — catch it before the opaque
|
|
65
81
|
// simctl install error so the blocker is IOS_APP_WRONG_ARCH (build a simulator .app).
|
|
66
82
|
if (appBuildDestination(appPath) === 'device') {
|
|
67
|
-
return {
|
|
83
|
+
return {
|
|
84
|
+
ok: false,
|
|
85
|
+
failureCode: 'IOS_APP_WRONG_ARCH',
|
|
86
|
+
error: `${appPath} is a device build (iphoneos) — the simulator needs a simulator-SDK .app (iphonesimulator). Real-device workflows are outside the public v1 scope.`,
|
|
87
|
+
udid: pick.udid,
|
|
88
|
+
name: pick.name,
|
|
89
|
+
};
|
|
68
90
|
}
|
|
69
91
|
progress('installing .app');
|
|
70
92
|
try {
|
|
@@ -123,7 +145,14 @@ export async function prepareIos(sessions, session, args, ctx = {}) {
|
|
|
123
145
|
status: 'blocked',
|
|
124
146
|
detail: String(err),
|
|
125
147
|
});
|
|
126
|
-
return {
|
|
148
|
+
return {
|
|
149
|
+
ok: false,
|
|
150
|
+
failureCode: 'BUNDLE_ID_NOT_FOUND',
|
|
151
|
+
error: `Launch failed: ${String(err)}`,
|
|
152
|
+
udid: pick.udid,
|
|
153
|
+
name: pick.name,
|
|
154
|
+
bundleId,
|
|
155
|
+
};
|
|
127
156
|
}
|
|
128
157
|
sessions.recordMutation(session, {
|
|
129
158
|
tool: 'qa_prepare_ios_target',
|
|
@@ -147,7 +176,12 @@ export async function prepareIos(sessions, session, args, ctx = {}) {
|
|
|
147
176
|
wda = { reachable: !!status.reachable, url: wdaUrl };
|
|
148
177
|
if (status.reachable) {
|
|
149
178
|
try {
|
|
150
|
-
const sessionOptions = {
|
|
179
|
+
const sessionOptions = {
|
|
180
|
+
bundleId: bundleId ?? undefined,
|
|
181
|
+
udid: pick.udid,
|
|
182
|
+
capabilities: wdaCfg?.capabilities,
|
|
183
|
+
settings: wdaCfg?.settings,
|
|
184
|
+
};
|
|
151
185
|
const created = await createWdaSession(wdaUrl, sessionOptions);
|
|
152
186
|
const mismatched = wdaSessionUdidMismatch(created.capabilities, pick.udid);
|
|
153
187
|
if (mismatched)
|
|
@@ -168,14 +202,33 @@ export async function prepareIos(sessions, session, args, ctx = {}) {
|
|
|
168
202
|
}
|
|
169
203
|
catch (e) {
|
|
170
204
|
if (attach === 'required') {
|
|
171
|
-
return {
|
|
205
|
+
return {
|
|
206
|
+
ok: false,
|
|
207
|
+
failureCode: 'WDA_SESSION_FAILED',
|
|
208
|
+
error: `WDA is reachable at ${wdaUrl} but session creation failed: ${String(e)}. Confirm WDA is paired with ${pick.name} and the app bundle id is installed, then retry.`,
|
|
209
|
+
udid: pick.udid,
|
|
210
|
+
name: pick.name,
|
|
211
|
+
bundleId,
|
|
212
|
+
installed,
|
|
213
|
+
launched,
|
|
214
|
+
wda,
|
|
215
|
+
};
|
|
172
216
|
}
|
|
173
217
|
requiresAttach = true;
|
|
174
218
|
sessions.addWorkaround(session, `WDA reachable but session attach failed (${String(e)}). iOS verification is visual-only until qa_wda attach succeeds`);
|
|
175
219
|
}
|
|
176
220
|
}
|
|
177
221
|
else if (attach === 'required') {
|
|
178
|
-
return {
|
|
222
|
+
return {
|
|
223
|
+
ok: false,
|
|
224
|
+
failureCode: 'WDA_UNREACHABLE',
|
|
225
|
+
error: `WDA required but unreachable at ${wdaUrl}. Start WebDriverAgent (qa_wda) then retry.`,
|
|
226
|
+
udid: pick.udid,
|
|
227
|
+
name: pick.name,
|
|
228
|
+
bundleId,
|
|
229
|
+
installed,
|
|
230
|
+
launched,
|
|
231
|
+
};
|
|
179
232
|
}
|
|
180
233
|
else {
|
|
181
234
|
sessions.addWorkaround(session, 'WDA not reachable — iOS verification is visual-only (screenshots), not structured');
|
|
@@ -185,7 +238,16 @@ export async function prepareIos(sessions, session, args, ctx = {}) {
|
|
|
185
238
|
sessions.persist(session);
|
|
186
239
|
const nextHint = requiresAttach ? ' (WDA reachable, run qa_wda attach to enable structured snapshot and action tools)' : '';
|
|
187
240
|
return {
|
|
188
|
-
ok: true,
|
|
241
|
+
ok: true,
|
|
242
|
+
udid: pick.udid,
|
|
243
|
+
name: pick.name,
|
|
244
|
+
bundleId,
|
|
245
|
+
installed,
|
|
246
|
+
launched,
|
|
247
|
+
mode,
|
|
248
|
+
wda,
|
|
249
|
+
wdaSessionId,
|
|
250
|
+
requiresAttach,
|
|
189
251
|
resultText: `${launched ? 'ready' : 'launched=false'} iOS ${pick.name}${bundleId ? ` / ${bundleId}` : ''}: ${mode === 'structured' ? 'WDA structured' : 'visual-only'}${installed ? ' (installed)' : ''}${nextHint}.`,
|
|
190
252
|
};
|
|
191
253
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareIos.js","sourceRoot":"","sources":["../../src/services/prepareIos.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,gGAAgG;AAChG,iGAAiG;AACjG,kGAAkG;AAElG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAkCxC,MAAM,CAAC,KAAK,UAAU,UAAU,
|
|
1
|
+
{"version":3,"file":"prepareIos.js","sourceRoot":"","sources":["../../src/services/prepareIos.ts"],"names":[],"mappings":"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"}
|
package/dist/services/report.js
CHANGED
|
@@ -32,11 +32,15 @@ import { resolveSourceRevision } from '../issues/sourceRevision.js';
|
|
|
32
32
|
import { loadPolicy as loadIssuePolicy, getIndex as getIssueIndex, readEvents as readIssueEvents } from '../issues/store.js';
|
|
33
33
|
import { computeIssueMetrics } from '../issues/metrics.js';
|
|
34
34
|
import { verifyFixed } from '../issues/index.js';
|
|
35
|
-
import { linkIssueToCase, linkRunIssue, relationshipForCase, runRelationshipFor, verifiedFixedIssuesForRun } from '../testSuite/issueLinks.js';
|
|
35
|
+
import { linkIssueToCase, linkRunIssue, relationshipForCase, runRelationshipFor, verifiedFixedIssuesForRun, } from '../testSuite/issueLinks.js';
|
|
36
36
|
import { saveSuite } from '../testSuite/store.js';
|
|
37
37
|
import { pomForSession } from './suiteGenerate.js';
|
|
38
38
|
import { generateCanonicalCases } from '../testSuite/generator.js';
|
|
39
39
|
import { applyMerge, loadSuite, suiteDelta, runIdFromNow } from '../testSuite/store.js';
|
|
40
|
+
/** Render an *Ms structured value as human-readable seconds for text summaries. */
|
|
41
|
+
function secText(ms) {
|
|
42
|
+
return `${Math.round((ms ?? 0) / 1000)}s`;
|
|
43
|
+
}
|
|
40
44
|
export async function generateSessionReport(sessions, session, options = {}) {
|
|
41
45
|
const { format, baseline, trendRoot } = options;
|
|
42
46
|
const includeCurrentDump = options.includeCurrentDump ?? true;
|
|
@@ -79,7 +83,9 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
79
83
|
(a[n.outcome] ??= {})[cat] = (a[n.outcome][cat] ?? 0) + 1;
|
|
80
84
|
return a;
|
|
81
85
|
}, {});
|
|
82
|
-
const visualVerifications = notes
|
|
86
|
+
const visualVerifications = notes
|
|
87
|
+
.filter((n) => n.verifiedVisually)
|
|
88
|
+
.map((n) => ({
|
|
83
89
|
workflow: n.workflow,
|
|
84
90
|
outcome: n.outcome,
|
|
85
91
|
evidenceKind: n.evidenceKind,
|
|
@@ -137,7 +143,13 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
137
143
|
bucketExamples[bucket] ??= `${n.workflow}: ${n.reason ? redact(n.reason) : n.outcome}`;
|
|
138
144
|
}
|
|
139
145
|
const dominantBucket = ALL_BUCKETS.filter((b) => bucketCounts[b] > 0).sort((x, y) => bucketCounts[y] - bucketCounts[x])[0] ?? null;
|
|
140
|
-
const failureBuckets = {
|
|
146
|
+
const failureBuckets = {
|
|
147
|
+
counts: bucketCounts,
|
|
148
|
+
total: totalFailures,
|
|
149
|
+
classifiedPct: totalFailures ? Math.round((classified / totalFailures) * 100) : 100,
|
|
150
|
+
dominant: dominantBucket,
|
|
151
|
+
examples: bucketExamples,
|
|
152
|
+
};
|
|
141
153
|
const blockedCount = outcomeTally.blocked ?? 0;
|
|
142
154
|
const APP_OWNED_FAIL_CATEGORIES = new Set(['app_bug', 'other']);
|
|
143
155
|
const appFailNotes = notes.filter((n) => n.outcome === 'fail' && (n.category == null || APP_OWNED_FAIL_CATEGORIES.has(n.category)));
|
|
@@ -155,14 +167,21 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
155
167
|
blockedCount: blockedCount + toolLimitationFailCount,
|
|
156
168
|
overrideCount: session.envChanges.filter((c) => /OVERRIDE|GUARDRAIL|acknowledgeBundleRisk|allowLaunchWithoutMetro/i.test(c)).length,
|
|
157
169
|
topHighFinding: topHigh ? redact(topHigh.detail) : undefined,
|
|
158
|
-
topFail: topAppFailNote
|
|
170
|
+
topFail: topAppFailNote
|
|
171
|
+
? { workflow: topAppFailNote.workflow, reason: topAppFailNote.reason ? redact(topAppFailNote.reason) : undefined }
|
|
172
|
+
: undefined,
|
|
159
173
|
topBlocked: topBlockedNote ? { workflow: topBlockedNote.workflow, recommendedSetup: topBlockedNote.recommendedSetup } : undefined,
|
|
160
174
|
});
|
|
161
175
|
const outcomesByWorkflow = notes.reduce((acc, n) => {
|
|
162
|
-
acc[n.workflow] = {
|
|
176
|
+
acc[n.workflow] = {
|
|
177
|
+
outcome: n.outcome,
|
|
178
|
+
category: n.category,
|
|
179
|
+
reason: n.reason ? redact(n.reason) : undefined,
|
|
180
|
+
artifactUris: n.artifactUris ?? [],
|
|
181
|
+
};
|
|
163
182
|
return acc;
|
|
164
183
|
}, {});
|
|
165
|
-
const appId = session.appId ??
|
|
184
|
+
const appId = session.appId ?? loadProjectConfig(session.root)?.appId ?? null;
|
|
166
185
|
const wdaConfig = driver instanceof WdaDriver ? loadWdaConfig(session.root) : null;
|
|
167
186
|
const wdaReport = driver instanceof WdaDriver && wdaConfig
|
|
168
187
|
? {
|
|
@@ -174,11 +193,14 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
174
193
|
tuning: { timings: wdaTimingSummary(session), recommendations: wdaRecommendations(wdaConfig, session) },
|
|
175
194
|
}
|
|
176
195
|
: null;
|
|
177
|
-
const readiness = orderReadinessLabels([
|
|
196
|
+
const readiness = orderReadinessLabels([
|
|
197
|
+
...readinessForSession(session, {
|
|
178
198
|
suiteRunnable: options.suite?.suiteRunnable,
|
|
179
199
|
suiteReplayed: false,
|
|
180
200
|
ciReady: false,
|
|
181
|
-
}),
|
|
201
|
+
}),
|
|
202
|
+
...(options.suite?.readinessLabels ?? []),
|
|
203
|
+
]);
|
|
182
204
|
const automationReadiness = automationReadinessForSession(session, {
|
|
183
205
|
suiteRunnable: options.suite?.suiteRunnable,
|
|
184
206
|
suiteReplayed: false,
|
|
@@ -188,8 +210,15 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
188
210
|
const automationBackend = automationBackendForSession(session);
|
|
189
211
|
const passNotes = notes.filter((n) => n.outcome === 'pass').length;
|
|
190
212
|
const appVerdict = (() => {
|
|
191
|
-
if (nativeHealth === 'error' ||
|
|
192
|
-
|
|
213
|
+
if (nativeHealth === 'error' ||
|
|
214
|
+
appHealth === 'error' ||
|
|
215
|
+
high.some((f) => f.layer === 'app' || f.layer === 'native') ||
|
|
216
|
+
appFailCount > 0) {
|
|
217
|
+
const summary = topHigh
|
|
218
|
+
? (redact(topHigh.detail) ?? topHigh.detail)
|
|
219
|
+
: topAppFailNote?.reason
|
|
220
|
+
? (redact(topAppFailNote.reason) ?? topAppFailNote.reason)
|
|
221
|
+
: 'High severity app/native finding or failed app workflow observed.';
|
|
193
222
|
return { status: 'BLOCKED', summary };
|
|
194
223
|
}
|
|
195
224
|
if (appHealth === 'degraded')
|
|
@@ -198,12 +227,17 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
198
227
|
})();
|
|
199
228
|
const coverageVerdict = (() => {
|
|
200
229
|
if (blockedCount > 0 || toolLimitationNotes.length > 0 || session.exploration?.state === 'blocked') {
|
|
201
|
-
const summary = topBlockedNote?.recommendedSetup
|
|
202
|
-
|
|
230
|
+
const summary = topBlockedNote?.recommendedSetup ??
|
|
231
|
+
(toolLimitationNotes.length
|
|
232
|
+
? `A Swipium/tool limitation blocked ${toolLimitationNotes.length} workflow(s); see toolVerdict.`
|
|
233
|
+
: 'A setup or precondition blocker limited coverage.');
|
|
203
234
|
return { status: 'BLOCKED', summary };
|
|
204
235
|
}
|
|
205
236
|
if (!automationBackend.structured) {
|
|
206
|
-
return {
|
|
237
|
+
return {
|
|
238
|
+
status: 'PARTIAL',
|
|
239
|
+
summary: 'Coverage was limited because the active backend is visual-only or lacks structured UI automation.',
|
|
240
|
+
};
|
|
207
241
|
}
|
|
208
242
|
if (passNotes === 0 && !session.exploration && session.recordedActions.length === 0) {
|
|
209
243
|
return { status: 'SMOKE_ONLY', summary: 'Only launch/setup evidence was collected.' };
|
|
@@ -301,7 +335,16 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
301
335
|
else {
|
|
302
336
|
const suite = loadSuite(session.root, appId ?? undefined);
|
|
303
337
|
mergedSuite = suite;
|
|
304
|
-
persistentSuite = {
|
|
338
|
+
persistentSuite = {
|
|
339
|
+
totalCases: suite.cases.length,
|
|
340
|
+
created: [],
|
|
341
|
+
updated: [],
|
|
342
|
+
deprecated: [],
|
|
343
|
+
failed: [],
|
|
344
|
+
blocked: [],
|
|
345
|
+
newlyAutomated: [],
|
|
346
|
+
caseIds: suite.cases.map((c) => c.id),
|
|
347
|
+
};
|
|
305
348
|
}
|
|
306
349
|
}
|
|
307
350
|
catch {
|
|
@@ -346,12 +389,26 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
346
389
|
findings: session.findings.map((f) => {
|
|
347
390
|
const code = f.failureCode ?? failureForFindingKind(f.kind);
|
|
348
391
|
const info = FAILURES[code] ?? FAILURES.UNKNOWN;
|
|
349
|
-
return {
|
|
392
|
+
return {
|
|
393
|
+
...f,
|
|
394
|
+
failureCode: code,
|
|
395
|
+
bucket: info.bucket,
|
|
396
|
+
retrySafe: info.retrySafe,
|
|
397
|
+
nextStep: info.recovery,
|
|
398
|
+
detail: redact(f.detail),
|
|
399
|
+
evidence: f.evidence ? redact(f.evidence) : undefined,
|
|
400
|
+
};
|
|
350
401
|
}),
|
|
351
402
|
highSeverityCount: high.length,
|
|
352
403
|
nativeHealth,
|
|
353
404
|
appHealth,
|
|
354
|
-
appHealthFindings: appFindings.map((f) => ({
|
|
405
|
+
appHealthFindings: appFindings.map((f) => ({
|
|
406
|
+
kind: f.kind,
|
|
407
|
+
severity: f.severity,
|
|
408
|
+
evidence: f.evidence ? redact(f.evidence) : undefined,
|
|
409
|
+
screen: f.screen,
|
|
410
|
+
screenshotUri: f.screenshotUri,
|
|
411
|
+
})),
|
|
355
412
|
testOutcomes: notes.map((n) => ({ ...n, reason: n.reason ? redact(n.reason) : undefined })),
|
|
356
413
|
outcomeTally,
|
|
357
414
|
categoryTally,
|
|
@@ -395,9 +452,29 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
395
452
|
const platform = driver instanceof WdaDriver ? 'ios' : driver ? 'android' : 'unknown';
|
|
396
453
|
const environment = session.headless !== undefined ? (platform === 'ios' ? 'simulator' : 'emulator') : process.env.CI ? 'ci' : 'unknown';
|
|
397
454
|
const issuePolicy = loadIssuePolicy(session.root);
|
|
398
|
-
const sourceRevision = resolveSourceRevision({
|
|
399
|
-
|
|
400
|
-
|
|
455
|
+
const sourceRevision = resolveSourceRevision({
|
|
456
|
+
env: process.env,
|
|
457
|
+
allowGitMetadataRead: issuePolicy.allowGitMetadataRead,
|
|
458
|
+
root: session.root,
|
|
459
|
+
});
|
|
460
|
+
const bridgeFindings = session.findings.map((f) => ({
|
|
461
|
+
severity: f.severity,
|
|
462
|
+
kind: f.kind,
|
|
463
|
+
detail: redact(f.detail) ?? f.detail,
|
|
464
|
+
layer: f.layer,
|
|
465
|
+
evidence: f.evidence ? redact(f.evidence) : undefined,
|
|
466
|
+
screen: f.screen,
|
|
467
|
+
screenshotUri: f.screenshotUri,
|
|
468
|
+
failureCode: f.failureCode,
|
|
469
|
+
}));
|
|
470
|
+
const bridgeNotes = notes.map((n) => ({
|
|
471
|
+
workflow: n.workflow,
|
|
472
|
+
outcome: n.outcome,
|
|
473
|
+
category: n.category,
|
|
474
|
+
reason: n.reason ? redact(n.reason) : undefined,
|
|
475
|
+
failureCode: n.failureCode,
|
|
476
|
+
artifactUris: n.artifactUris,
|
|
477
|
+
}));
|
|
401
478
|
const issuesNow = new Date().toISOString();
|
|
402
479
|
const bridge = foldRunIntoLedger(session.root, bridgeFindings, bridgeNotes, issuesNow, {
|
|
403
480
|
appId: appId ?? undefined,
|
|
@@ -414,7 +491,9 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
414
491
|
const idx = getIssueIndex(session.root, issuesNow, appId ?? undefined);
|
|
415
492
|
const recordById = new Map(idx.records.map((r) => [r.issueId, r]));
|
|
416
493
|
const matchCase = (workflow) => workflow
|
|
417
|
-
? mergedSuite.cases.filter((c) => c.actualResult.summary?.toLowerCase().includes(workflow.toLowerCase()) ||
|
|
494
|
+
? mergedSuite.cases.filter((c) => c.actualResult.summary?.toLowerCase().includes(workflow.toLowerCase()) ||
|
|
495
|
+
c.functionality.toLowerCase() === workflow.toLowerCase() ||
|
|
496
|
+
c.title.toLowerCase().includes(workflow.toLowerCase()))
|
|
418
497
|
: [];
|
|
419
498
|
for (const rec of bridge.recorded) {
|
|
420
499
|
const record = recordById.get(rec.issueId);
|
|
@@ -481,12 +560,26 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
481
560
|
if ((baseline || trendRoot) && reportRec) {
|
|
482
561
|
try {
|
|
483
562
|
const pr = buildPrSummary(reportRec.path, { baselinePath: baseline, trendRoot: trendRoot ?? session.root });
|
|
484
|
-
reportLinks = {
|
|
563
|
+
reportLinks = {
|
|
564
|
+
current: reportUri,
|
|
565
|
+
currentPath: reportRec.path,
|
|
566
|
+
baseline: baseline ?? null,
|
|
567
|
+
trendRoot: trendRoot ?? session.root,
|
|
568
|
+
comparison: pr.comparison ?? null,
|
|
569
|
+
knownFlaky: pr.knownFlaky,
|
|
570
|
+
prSummary: pr,
|
|
571
|
+
};
|
|
485
572
|
report.reportLinks = reportLinks;
|
|
486
573
|
writeFileSync(reportRec.path, JSON.stringify(report, null, 2));
|
|
487
574
|
}
|
|
488
575
|
catch (e) {
|
|
489
|
-
reportLinks = {
|
|
576
|
+
reportLinks = {
|
|
577
|
+
current: reportUri,
|
|
578
|
+
currentPath: reportRec.path,
|
|
579
|
+
baseline: baseline ?? null,
|
|
580
|
+
trendRoot: trendRoot ?? session.root,
|
|
581
|
+
error: String(e.message ?? e),
|
|
582
|
+
};
|
|
490
583
|
report.reportLinks = reportLinks;
|
|
491
584
|
writeFileSync(reportRec.path, JSON.stringify(report, null, 2));
|
|
492
585
|
}
|
|
@@ -502,7 +595,10 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
502
595
|
flowExportSkipped = true;
|
|
503
596
|
}
|
|
504
597
|
else {
|
|
505
|
-
const gen = generateFlow(session.recordedActions, {
|
|
598
|
+
const gen = generateFlow(session.recordedActions, {
|
|
599
|
+
name: `${(appId ?? 'app').split('.').pop()}-recorded`,
|
|
600
|
+
appId: appId ?? undefined,
|
|
601
|
+
});
|
|
506
602
|
exportUri = sessions.saveArtifact(session, 'flow', `recorded-${Date.now()}.yaml`, gen.yaml, 'text/yaml', `flow drafted from the run (durability ${gen.durability.grade})`);
|
|
507
603
|
}
|
|
508
604
|
}
|
|
@@ -531,18 +627,33 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
531
627
|
`QA level: ${qaLevel.level.toUpperCase()} — ${qaLevel.rationale}${qaLevel.next ? ` · next: ${qaLevel.next} (${qaLevel.nextRequirement})` : ''}`,
|
|
532
628
|
qaLevel.notes.length ? `QA level notes:\n ${qaLevel.notes.join('\n ')}` : '',
|
|
533
629
|
`automation readiness: ${automationReadiness.grade} (${automationReadiness.score}/100, durable locators ${automationReadiness.locatorCoverage.durablePct}%)`,
|
|
534
|
-
`test catalog: ${runTestCatalog.total} case(s) — ${Object.entries(runTestCatalog.counts)
|
|
535
|
-
|
|
630
|
+
`test catalog: ${runTestCatalog.total} case(s) — ${Object.entries(runTestCatalog.counts)
|
|
631
|
+
.filter(([, v]) => v)
|
|
632
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
633
|
+
.join(' ') || 'none'}`,
|
|
634
|
+
automationReadiness.topFixes.length
|
|
635
|
+
? `top readiness fixes:\n ${automationReadiness.topFixes.join('\n ')}`
|
|
636
|
+
: 'top readiness fixes: none',
|
|
536
637
|
`${report.coverage}${report.visualOnly ? ' · VISUAL-ONLY (structured snapshots were poor — see screenshots)' : ''}`,
|
|
537
638
|
`emulator display: ${report.emulatorDisplay}`,
|
|
538
639
|
`network: ${finalNetwork}${networkRestore ? ` (${networkRestore})` : session.network?.changed ? ' ⚠ Swipium changed it and did NOT restore' : ''}`,
|
|
539
|
-
report.activeRecording
|
|
640
|
+
report.activeRecording
|
|
641
|
+
? `A screen recording is still active (${report.activeRecording.backend}, ~${report.activeRecording.seconds}s). It will be stopped on shutdown.`
|
|
642
|
+
: '',
|
|
540
643
|
session.envChanges.length ? `environment changes:\n ${session.envChanges.join('\n ')}` : 'environment changes: none',
|
|
541
|
-
session.mutations.length
|
|
542
|
-
|
|
644
|
+
session.mutations.length
|
|
645
|
+
? `mutation ledger: ${session.mutations.length} record(s), ${session.mutations.filter((m) => m.status === 'executed').length} executed, ${session.mutations.filter((m) => m.status === 'refused' || m.status === 'blocked').length} refused/blocked`
|
|
646
|
+
: 'mutation ledger: none',
|
|
647
|
+
report.guardrailOverrides.length
|
|
648
|
+
? `⚠ guardrail overrides used:\n ${report.guardrailOverrides.join('\n ')}`
|
|
649
|
+
: 'guardrail overrides: none',
|
|
543
650
|
session.workarounds.length ? `workarounds attempted:\n ${session.workarounds.join('\n ')}` : '',
|
|
544
|
-
session.inputs.length
|
|
545
|
-
|
|
651
|
+
session.inputs.length
|
|
652
|
+
? `inputs provided (redacted): ${session.inputs.map((i) => `${i.varName}${i.secret ? '🔒' : ''}`).join(', ')}`
|
|
653
|
+
: '',
|
|
654
|
+
session.generatedValues.length
|
|
655
|
+
? `generated test data: ${session.generatedValues.map((g) => `${g.fixture}.${g.field}=${g.secret ? '<redacted>' : redact(g.value)} (${g.generator})`).join(', ')}`
|
|
656
|
+
: '',
|
|
546
657
|
options.suite
|
|
547
658
|
? options.suite.generated
|
|
548
659
|
? `generated suite "${options.suite.name}": ${(options.suite.compiledFlows ?? []).filter((c) => c.ok).length}/${(options.suite.compiledFlows ?? []).length} runnable flow(s), runnable=${options.suite.suiteRunnable}, readiness=${(options.suite.readinessLabels ?? []).join(' → ') || 'unknown'} (${(options.suite.written ?? []).length} files)`
|
|
@@ -553,20 +664,34 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
553
664
|
: '',
|
|
554
665
|
`destructive/bundle-risk guardrail: ${destructiveGuardrail.status}`,
|
|
555
666
|
`health — native: ${nativeHealth === 'OK' ? '✅ OK' : '❌ error'} · app: ${appHealth === 'OK' ? '✅ OK' : appHealth === 'degraded' ? '⚠ degraded' : '❌ error'}`,
|
|
556
|
-
wdaReport
|
|
667
|
+
wdaReport
|
|
668
|
+
? `wda: ${wdaReport.status.reachable ? 'reachable' : 'unreachable'} ${wdaReport.webDriverAgentUrl} device=${wdaReport.device ?? 'unknown'}`
|
|
669
|
+
: '',
|
|
557
670
|
`findings: ${session.findings.length} (high: ${high.length})`,
|
|
558
|
-
totalFailures
|
|
559
|
-
|
|
671
|
+
totalFailures
|
|
672
|
+
? `failures by bucket: ${ALL_BUCKETS.filter((b) => bucketCounts[b])
|
|
673
|
+
.map((b) => `${b}=${bucketCounts[b]}`)
|
|
674
|
+
.join(' ')} (${failureBuckets.classifiedPct}% classified${dominantBucket ? `, mostly ${dominantBucket}` : ''})`
|
|
675
|
+
: '',
|
|
676
|
+
notes.length
|
|
677
|
+
? `evidence taxonomy: structured=${evidenceTaxonomy.counts.structured_locator} ocr=${evidenceTaxonomy.counts.ocr_locator} visual=${evidenceTaxonomy.counts.visual_match} ai_visual=${evidenceTaxonomy.counts.ai_visual_evidence} manual=${evidenceTaxonomy.counts.manual_review} calibration=${evidenceTaxonomy.calibration.status}`
|
|
678
|
+
: '',
|
|
560
679
|
...session.findings.map((f) => ` [${f.severity}] ${f.layer ?? '?'}/${f.kind}: ${redact(f.detail)}${f.evidence ? ` — "${redact(f.evidence)}"` : ''}${f.screenshotUri ? ` (${f.screenshotUri})` : ''}`),
|
|
561
|
-
notes.length
|
|
680
|
+
notes.length
|
|
681
|
+
? `test outcomes: ${Object.entries(outcomeTally)
|
|
682
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
683
|
+
.join(' ')}`
|
|
684
|
+
: 'test outcomes: none recorded (qa_note)',
|
|
562
685
|
...noteSummaryLines,
|
|
563
686
|
persistentSuite
|
|
564
687
|
? `persistent suite: ${persistentSuite.totalCases} case(s) — +${persistentSuite.created.length} created, ~${persistentSuite.updated.length} updated, -${persistentSuite.deprecated.length} deprecated, ${persistentSuite.failed.length} failed, ${persistentSuite.blocked.length} blocked, ${persistentSuite.newlyAutomated.length} newly automated`
|
|
565
688
|
: '',
|
|
566
689
|
`auth: ${authState}`,
|
|
567
690
|
session.fixtures.length ? `declared preconditions: ${session.fixtures.map((f) => f.name).join(', ')}` : '',
|
|
568
|
-
`timing: total=${phaseTimings.
|
|
569
|
-
reportLinks
|
|
691
|
+
`timing: total=${secText(phaseTimings.totalMs)} setup=${secText(phaseTimings.setupMs)} active=${secText(phaseTimings.activeMs)}${phaseTimings.timeToLoginMs != null ? ` toLogin=${secText(phaseTimings.timeToLoginMs)}` : ''}${phaseTimings.diagnostics.waitMs != null ? ` wait=${secText(phaseTimings.diagnostics.waitMs)}` : ''}${phaseTimings.diagnostics.flowRuntimeMs != null ? ` flows=${secText(phaseTimings.diagnostics.flowRuntimeMs)}` : ''}${session.budgetProfile ? ` (profile=${session.budgetProfile})` : ''}`,
|
|
692
|
+
reportLinks
|
|
693
|
+
? `report links: baseline=${baseline ?? 'none'} trend=${trendRoot ?? session.root}${typeof reportLinks.comparison === 'string' ? ` comparison=${reportLinks.comparison}` : ''}`
|
|
694
|
+
: '',
|
|
570
695
|
`artifacts: ${session.artifacts.length} (${screenshots.length} screenshots)`,
|
|
571
696
|
...session.artifacts.map((art) => ` ${art.uri} (${art.kind}${art.label ? `: ${art.label}` : ''})`),
|
|
572
697
|
dumpUri ? `current dump: ${dumpUri}` : '',
|
|
@@ -574,6 +699,17 @@ export async function generateSessionReport(sessions, session, options = {}) {
|
|
|
574
699
|
`manifest: ${manifestUri}`,
|
|
575
700
|
exportUri && exportUri !== reportUri ? `${format} export: ${exportUri}` : '',
|
|
576
701
|
].filter(Boolean);
|
|
577
|
-
return {
|
|
702
|
+
return {
|
|
703
|
+
report,
|
|
704
|
+
reportUri,
|
|
705
|
+
manifestUri,
|
|
706
|
+
manifest,
|
|
707
|
+
dumpUri,
|
|
708
|
+
reportLinks,
|
|
709
|
+
exportUri,
|
|
710
|
+
exportFormat: exportUri ? format : undefined,
|
|
711
|
+
summaryText: lines.join('\n'),
|
|
712
|
+
flowExportSkipped,
|
|
713
|
+
};
|
|
578
714
|
}
|
|
579
715
|
//# sourceMappingURL=report.js.map
|