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":"bundletool.js","sourceRoot":"","sources":["../../src/tools/bundletool.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,kGAAkG;AAClG,8FAA8F;AAE9F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAGvC,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,QAAsB;IAC1E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,+oBAA+oB;QACjpB,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;YAC5G,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACtF,eAAe,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"bundletool.js","sourceRoot":"","sources":["../../src/tools/bundletool.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export const CAPABILITY_GROUPS = [
|
|
|
14
14
|
{ name: 'qa_status', summary: 'Compact session status and current next action.' },
|
|
15
15
|
{ name: 'qa_explain_blocker', summary: 'Explain a typed blocker and the owner of the fix.' },
|
|
16
16
|
{ name: 'qa_continue_from_blocker', summary: 'Resume after user input, with secret redaction.' },
|
|
17
|
+
{ name: 'qa_next_best_action', summary: 'Deterministic recommendation of the single best next tool to call, and why.' },
|
|
17
18
|
{ name: 'qa_get_artifact', summary: 'Fetch Swipium artifact metadata or contents by URI.' },
|
|
18
19
|
],
|
|
19
20
|
},
|
|
@@ -37,8 +38,10 @@ export const CAPABILITY_GROUPS = [
|
|
|
37
38
|
tools: [
|
|
38
39
|
{ name: 'qa_resolve_target', summary: 'Pick the best device/simulator (online > boot; honors platform/device).' },
|
|
39
40
|
{ name: 'qa_resolve_artifact', summary: 'Find the best installable .apk/.aab/.ipa/.app and explain where it looked.' },
|
|
40
|
-
{
|
|
41
|
-
|
|
41
|
+
{
|
|
42
|
+
name: 'qa_build',
|
|
43
|
+
summary: 'mode:"plan" (default) proposes exact build commands (side-effect free); mode:"run" builds from source as a consent-gated job, captures a log, and re-resolves the artifact.',
|
|
44
|
+
},
|
|
42
45
|
{ name: 'qa_bundletool', summary: 'Convert an .aab to an installable APK (universal or device-specific set).' },
|
|
43
46
|
],
|
|
44
47
|
},
|
|
@@ -47,13 +50,11 @@ export const CAPABILITY_GROUPS = [
|
|
|
47
50
|
purpose: 'Inspect and control the device/app environment without raw adb or simctl.',
|
|
48
51
|
tools: [
|
|
49
52
|
{ name: 'qa_device_info', summary: 'Model/SDK/ABIs/locale/screen/orientation + installed apps (read-only).' },
|
|
50
|
-
{ name: 'qa_permissions', summary: 'list / grant / revoke runtime permissions (revoke consent-gated).' },
|
|
51
53
|
{ name: 'qa_orientation', summary: 'Set portrait / landscape / auto (logged).' },
|
|
52
54
|
{ name: 'qa_geolocation', summary: 'Spoof GPS location (emulator; consent-gated) for map/location apps.' },
|
|
53
55
|
{ name: 'qa_network', summary: 'airplane-mode status/offline/online/restore (consent-gated; auto-restored).' },
|
|
54
56
|
{ name: 'qa_metro', summary: 'RN/Expo Metro status/start/stop/diagnose (RedBox detection + logcat).' },
|
|
55
57
|
{ name: 'qa_app_control', summary: 'launch/foreground/background/force_stop/restart/clear_data/fresh_start.' },
|
|
56
|
-
{ name: 'qa_screen_info', summary: 'Screen w/h/density, orientation, mode, counters, coordinate landmarks.' },
|
|
57
58
|
{ name: 'qa_screen_record', summary: 'Record a screen video to an mp4 artifact (start/stop; consent-gated).' },
|
|
58
59
|
],
|
|
59
60
|
},
|
|
@@ -62,28 +63,14 @@ export const CAPABILITY_GROUPS = [
|
|
|
62
63
|
purpose: 'Observe, act, and make deterministic health assertions.',
|
|
63
64
|
tools: [
|
|
64
65
|
{ name: 'qa_snapshot', summary: 'Capture compact structured UI elements.' },
|
|
66
|
+
{ name: 'qa_inspect', summary: 'Return the full attributes of a single @eN element from the latest snapshot.' },
|
|
65
67
|
{ name: 'qa_act', summary: 'Tap, type, clear, swipe, scroll, press, open URL, or wait, then observe.' },
|
|
66
68
|
{ name: 'qa_clear_overlay', summary: 'Dismiss common overlays blocking a target.' },
|
|
67
69
|
{ name: 'qa_check_health', summary: 'Detect crash, ANR, error boundaries, and foreground health.' },
|
|
68
70
|
{ name: 'qa_screenshot', summary: 'Capture a screenshot artifact.' },
|
|
69
71
|
{ name: 'qa_note', summary: 'Record a structured QA outcome.' },
|
|
70
72
|
{ name: 'qa_assert_visual', summary: 'Capture a visual assertion with evidence.' },
|
|
71
|
-
{ name: 'qa_visual', summary: 'Local visual ops: baseline / diff (regression) / find_image (tappable coords) / ocr (optional).' },
|
|
72
|
-
{ name: 'qa_visual_find_text', summary: 'OCR text locator with structured regions + coordinate-space conversion.' },
|
|
73
|
-
{ name: 'qa_locator_suggest', summary: "Score each element's locator durability and grade automation readiness (which controls need testIDs)." },
|
|
74
|
-
{ name: 'qa_input_capabilities', summary: 'Backend text-entry limits: ASCII, Unicode, clipboard, WDA typing frequency.' },
|
|
75
73
|
{ name: 'qa_wait', summary: 'Non-shell wait for device_online / metro_ready / job_done.' },
|
|
76
|
-
{ name: 'qa_idling_status', summary: 'Read app-declared idling hooks or label-heuristic settling before automation.' },
|
|
77
|
-
],
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
group: 'state',
|
|
81
|
-
purpose: 'Create and verify reproducible preconditions instead of reporting them as missing.',
|
|
82
|
-
tools: [
|
|
83
|
-
{ name: 'qa_seed', summary: 'Create a declared precondition via a fixture seed (deeplink/script/api; consent-gated).' },
|
|
84
|
-
{ name: 'qa_state_prepare', summary: 'Prepare a reproducible state profile: reset, launch, seed, verify ledger.' },
|
|
85
|
-
{ name: 'qa_state_verify', summary: 'Verify a state profile without treating setup drift as an app bug.' },
|
|
86
|
-
{ name: 'qa_state_teardown', summary: 'Run state-profile teardown and restore declared environment state.' },
|
|
87
74
|
],
|
|
88
75
|
},
|
|
89
76
|
{
|
|
@@ -93,8 +80,6 @@ export const CAPABILITY_GROUPS = [
|
|
|
93
80
|
{ name: 'qa_smoke', summary: 'Run launch smoke and saved flows.' },
|
|
94
81
|
{ name: 'qa_explore', summary: 'Guided simulator exploration with evidence and graph output.' },
|
|
95
82
|
{ name: 'qa_report', summary: 'Summarize findings, blockers, evidence, and next actions.' },
|
|
96
|
-
{ name: 'qa_report_compare', summary: 'Compare current report.json against a baseline report.json.' },
|
|
97
|
-
{ name: 'qa_run_history', summary: 'Summarize local run history, pass rate, failures, flaky flows, and confidence calibration.' },
|
|
98
83
|
],
|
|
99
84
|
},
|
|
100
85
|
{
|
|
@@ -104,52 +89,53 @@ export const CAPABILITY_GROUPS = [
|
|
|
104
89
|
{ name: 'qa_app_map_build', summary: 'Build or update the app map from static analysis and exploration.' },
|
|
105
90
|
{ name: 'qa_app_map_read', summary: 'Read compact app map sections.' },
|
|
106
91
|
{ name: 'qa_app_map_query', summary: 'Search screens, features, tests, and code links.' },
|
|
107
|
-
{
|
|
108
|
-
|
|
92
|
+
{
|
|
93
|
+
name: 'qa_app_map_feature_scope',
|
|
94
|
+
summary: 'Resolve a feature (id or free text) to a focused test scope + objective + candidates (read-only; works without a map).',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'qa_app_map_update',
|
|
98
|
+
summary: 'Targeted provenance-tracked map updates: note, test cases, automation suite, environment, coverage.',
|
|
99
|
+
},
|
|
109
100
|
],
|
|
110
101
|
},
|
|
111
102
|
{
|
|
112
103
|
group: 'feature',
|
|
113
104
|
purpose: 'Test a specific feature by name, backed by the app knowledge map.',
|
|
114
105
|
tools: [
|
|
115
|
-
{
|
|
116
|
-
|
|
117
|
-
|
|
106
|
+
{
|
|
107
|
+
name: 'qa_test_feature',
|
|
108
|
+
summary: 'Focused feature test: mode:"plan" for the read-only test plan; mode:"execute" explores toward the feature, records cases, updates the map and report.',
|
|
109
|
+
},
|
|
118
110
|
],
|
|
119
111
|
},
|
|
120
112
|
{
|
|
121
113
|
group: 'flows',
|
|
122
|
-
purpose: 'Create, plan, run, and repair durable simulator flows
|
|
114
|
+
purpose: 'Create, plan, run, compile, and repair durable simulator flows.',
|
|
123
115
|
tools: [
|
|
124
|
-
{ name: 'qa_flow_check', summary: 'Parse and statically validate a Swipium flow.' },
|
|
125
|
-
{
|
|
126
|
-
|
|
127
|
-
|
|
116
|
+
{ name: 'qa_flow_check', summary: 'Parse and statically validate a Swipium flow (static lint of the YAML).' },
|
|
117
|
+
{
|
|
118
|
+
name: 'qa_flow_run',
|
|
119
|
+
summary: 'mode:"run" (default) executes a flow against a prepared session; mode:"plan" previews the execution against backend capabilities without a device.',
|
|
120
|
+
},
|
|
121
|
+
{ name: 'qa_flow_compile', summary: 'Compile a generated POM suite into runnable Flow V2 for qa_flow_run.' },
|
|
128
122
|
{ name: 'qa_flow_repair', summary: 'Suggest or patch a stronger locator for a failed flow step from the current screen.' },
|
|
129
|
-
{ name: 'qa_suite_generate', summary: 'Generate a POM-style suite from recorded actions.' },
|
|
130
|
-
{ name: 'qa_suite_compile', summary: 'Compile a generated suite into runnable flows.' },
|
|
131
|
-
{ name: 'qa_suite_lint', summary: 'Lint generated page objects for brittle/coordinate-only/dynamic locators.' },
|
|
132
|
-
{ name: 'qa_pom_generate', summary: 'Generate page objects and a locator audit from recorded actions.' },
|
|
133
|
-
{ name: 'qa_testcase_generate', summary: 'Generate test case documentation from recorded behavior.' },
|
|
134
123
|
],
|
|
135
124
|
},
|
|
136
125
|
{
|
|
137
|
-
group: '
|
|
138
|
-
purpose: '
|
|
139
|
-
tools: [
|
|
140
|
-
{ name: 'qa_test_suite_read', summary: 'Read the canonical suite: filter by functionality/status; summary/json/markdown.' },
|
|
141
|
-
{ name: 'qa_test_suite_update', summary: 'Merge cases into the persistent suite (dedupe by feature+objective+steps).' },
|
|
142
|
-
{ name: 'qa_test_suite_generate', summary: 'Generate or refresh canonical cases from a recorded run and exploration.' },
|
|
143
|
-
{ name: 'qa_test_suite_export', summary: 'Export the persistent suite to markdown, yaml dir, json, or junit.' },
|
|
144
|
-
{ name: 'qa_test_suite_lint', summary: 'Validate the suite: missing expected/actual, stale map links, duplicate ids.' },
|
|
145
|
-
],
|
|
126
|
+
group: 'generate',
|
|
127
|
+
purpose: 'Generate per-run test assets (flow, page objects, POM suite, test cases, Appium code) from recorded actions.',
|
|
128
|
+
tools: [{ name: 'qa_generate', summary: 'One entry point: target flow / pom / suite / testcases / appium; mode:"plan" previews.' }],
|
|
146
129
|
},
|
|
147
130
|
{
|
|
148
|
-
group: '
|
|
149
|
-
purpose: '
|
|
131
|
+
group: 'test-suite',
|
|
132
|
+
purpose: 'Grow and maintain a canonical, persistent test suite across runs (.swipium/test-suite.json).',
|
|
150
133
|
tools: [
|
|
151
|
-
{ name: '
|
|
152
|
-
{ name: '
|
|
134
|
+
{ name: 'qa_suite_read', summary: 'Read the canonical suite: filter by functionality/status; summary/json/markdown.' },
|
|
135
|
+
{ name: 'qa_suite_update', summary: 'Merge cases into the persistent suite (dedupe by feature+objective+steps).' },
|
|
136
|
+
{ name: 'qa_suite_generate', summary: 'Generate or refresh canonical cases from a recorded run and exploration.' },
|
|
137
|
+
{ name: 'qa_suite_export', summary: 'Export the persistent suite to markdown, yaml dir, json, or junit.' },
|
|
138
|
+
{ name: 'qa_suite_lint', summary: 'Validate the durable suite AND generated page objects (when present) in one lint.' },
|
|
153
139
|
],
|
|
154
140
|
},
|
|
155
141
|
{
|
|
@@ -157,30 +143,20 @@ export const CAPABILITY_GROUPS = [
|
|
|
157
143
|
purpose: 'Durable issue memory and executable mobile-QA audit profiles.',
|
|
158
144
|
tools: [
|
|
159
145
|
{ name: 'qa_issue_log', summary: 'List the durable project issue ledger: records, counts, recurrence, linked evidence.' },
|
|
160
|
-
{
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
{ name: 'qa_issue_verify_fixed', summary: 'Link passing evidence to a FIXED issue so reports can claim it was verified.' },
|
|
165
|
-
{ name: 'qa_issue_metrics', summary: 'Issue quality trends: opened/fixed/reopened/verified, aging, reopen rate.' },
|
|
166
|
-
{ name: 'qa_mobile_audit', summary: 'Plan or execute a named mobile-QA profile (smoke / account_cycle / store_compliance / resilience / release_gate).' },
|
|
146
|
+
{
|
|
147
|
+
name: 'qa_mobile_audit',
|
|
148
|
+
summary: 'Plan or execute a named mobile-QA profile (smoke / account_cycle / store_compliance / resilience / release_gate).',
|
|
149
|
+
},
|
|
167
150
|
],
|
|
168
151
|
},
|
|
169
152
|
{
|
|
170
153
|
group: 'first-run',
|
|
171
154
|
purpose: 'Handle login, account creation, onboarding, and paywall first-run screens safely.',
|
|
172
155
|
tools: [
|
|
173
|
-
{
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
{
|
|
178
|
-
group: 'automation',
|
|
179
|
-
purpose: 'Generate Appium automation code from Swipium evidence on request.',
|
|
180
|
-
tools: [
|
|
181
|
-
{ name: 'qa_automation_plan', summary: 'Plan generated JS/TS or Python Appium automation.' },
|
|
182
|
-
{ name: 'qa_automation_generate', summary: 'Generate an Appium POM suite from recorded actions.' },
|
|
183
|
-
{ name: 'qa_automation_validate', summary: 'Validate generated automation code without a device.' },
|
|
156
|
+
{
|
|
157
|
+
name: 'qa_first_run',
|
|
158
|
+
summary: 'mode:"plan" (default) classifies the current first-run screen and produces a safe plan; mode:"continue" executes bounded first-run steps with safe generated test data when allowed.',
|
|
159
|
+
},
|
|
184
160
|
],
|
|
185
161
|
},
|
|
186
162
|
];
|
|
@@ -188,16 +164,14 @@ const groupNames = CAPABILITY_GROUPS.map((g) => g.group);
|
|
|
188
164
|
export function registerCapabilities(server, _sessions) {
|
|
189
165
|
server.registerTool('qa_capabilities', {
|
|
190
166
|
title: 'List Swipium capabilities',
|
|
191
|
-
description: '
|
|
167
|
+
description: 'The full public tool catalog, grouped by purpose with a one-line summary per tool. USE WHEN you need to discover which Swipium tool covers a task (or answer "what can Swipium do?"); pass `group` to fetch one group cheaply. Read-only, deterministic, needs no session or device. Returns { swipiumVersion, totalTools, groups: [{ group, purpose, tools: [{ name, summary }] }] }. Orientation: call qa_agent_brief first for HOW to drive Swipium; qa_status for the current session/device state; qa_next_best_action for the single next tool to call.',
|
|
192
168
|
inputSchema: {
|
|
193
169
|
group: z.enum(groupNames).optional().describe('Return only this group.'),
|
|
194
170
|
},
|
|
195
171
|
}, async ({ group }) => {
|
|
196
172
|
const groups = group ? CAPABILITY_GROUPS.filter((g) => g.group === group) : CAPABILITY_GROUPS;
|
|
197
173
|
const summary = `Swipium v${SWIPIUM_VERSION}: ${TOOL_COUNT} public tools in ${CAPABILITY_GROUPS.length} groups.\n` +
|
|
198
|
-
groups
|
|
199
|
-
.map((g) => `\n[${g.group}] ${g.purpose}\n` + g.tools.map((t) => ` - ${t.name}: ${t.summary}`).join('\n'))
|
|
200
|
-
.join('\n') +
|
|
174
|
+
groups.map((g) => `\n[${g.group}] ${g.purpose}\n` + g.tools.map((t) => ` - ${t.name}: ${t.summary}`).join('\n')).join('\n') +
|
|
201
175
|
'\n\nStart with qa_test_this for low-context "test it" requests.';
|
|
202
176
|
return qaOk({ swipiumVersion: SWIPIUM_VERSION, totalTools: TOOL_COUNT, groups }, summary);
|
|
203
177
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/tools/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAS5D,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD;QACE,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,qDAAqD;QAC9D,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,sFAAsF,EAAE;YAC3H,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,8CAA8C,EAAE;YACpF,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,+FAA+F,EAAE;YAClI,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gDAAgD,EAAE;YACpF,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gDAAgD,EAAE;YACpF,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iDAAiD,EAAE;YACjF,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,mDAAmD,EAAE;YAC5F,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,iDAAiD,EAAE;YAChG,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,qDAAqD,EAAE;SAC5F;KACF;IACD;QACE,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,+FAA+F;QACxG,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,kCAAkC,EAAE;YAClE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,uDAAuD,EAAE;YAC9F,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,6DAA6D,EAAE;YACrG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,uCAAuC,EAAE;YACrE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,oDAAoD,EAAE;YAC5F,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,2DAA2D,EAAE;YACvG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,+EAA+E,EAAE;YAC5G,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,4EAA4E,EAAE;SAC1G;KACF;IACD;QACE,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,iFAAiF;QAC1F,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,yEAAyE,EAAE;YACjH,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,4EAA4E,EAAE;YACtH
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/tools/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,17 @@ import { qaOk, qaError } from '../lib/result.js';
|
|
|
6
6
|
import { getDriver } from '../session/attach.js';
|
|
7
7
|
import { parseSnapshot, boundsContain } from '../snapshot/parse.js';
|
|
8
8
|
import { detectTreeOverlays, classifyForeground, obstructionAt } from '../snapshot/overlays.js';
|
|
9
|
-
const STRATEGIES = [
|
|
9
|
+
const STRATEGIES = [
|
|
10
|
+
'auto',
|
|
11
|
+
'hide_keyboard',
|
|
12
|
+
'press_back',
|
|
13
|
+
'tap_outside',
|
|
14
|
+
'minimize_logbox',
|
|
15
|
+
'dismiss_logbox',
|
|
16
|
+
'allow_permission',
|
|
17
|
+
'deny_permission',
|
|
18
|
+
'dismiss_toast_if_possible',
|
|
19
|
+
];
|
|
10
20
|
const center = (b) => ({ x: Math.round((b[0] + b[2]) / 2), y: Math.round((b[1] + b[3]) / 2) });
|
|
11
21
|
async function safe(fn, fallback) {
|
|
12
22
|
try {
|
|
@@ -67,7 +77,8 @@ export function registerClearOverlay(server, sessions) {
|
|
|
67
77
|
return { obstructed: false };
|
|
68
78
|
const c = center(node.bounds);
|
|
69
79
|
// re-resolve the target in the FRESH tree by matching bounds/id
|
|
70
|
-
const fresh = parsed.allNodes.find((x) => x.id && node.id && x.id === node.id) ??
|
|
80
|
+
const fresh = parsed.allNodes.find((x) => x.id && node.id && x.id === node.id) ??
|
|
81
|
+
parsed.allNodes.find((x) => boundsContain(x.bounds, c.x, c.y));
|
|
71
82
|
return { obstructed: obstructionAt(parsed.allNodes, fresh, c.x, c.y).obstructed, node: fresh };
|
|
72
83
|
};
|
|
73
84
|
const before = (await obstructionFor()).obstructed;
|
|
@@ -90,9 +101,21 @@ export function registerClearOverlay(server, sessions) {
|
|
|
90
101
|
cleared.push({ type: 'keyboard', action: 'not_visible_or_unsupported' });
|
|
91
102
|
}
|
|
92
103
|
};
|
|
93
|
-
const doTapOutside = async () => {
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
const doTapOutside = async () => {
|
|
105
|
+
const sz = await safe(() => d.screenSize(), null);
|
|
106
|
+
const x = Math.round((sz?.width ?? 1080) * 0.5);
|
|
107
|
+
const y = Math.round((sz?.height ?? 2000) * 0.08);
|
|
108
|
+
await d.pressXY(x, y, 80);
|
|
109
|
+
cleared.push({ type: 'unknown', action: 'tap_outside' });
|
|
110
|
+
};
|
|
111
|
+
const doMinimizeLogbox = async () => {
|
|
112
|
+
const ok = await tapByText(d, nodes, /minimize/i);
|
|
113
|
+
cleared.push({ type: 'rn_logbox', action: ok ? 'minimized' : 'minimize_not_found' });
|
|
114
|
+
};
|
|
115
|
+
const doDismissLogbox = async () => {
|
|
116
|
+
const ok = await tapByText(d, nodes, /dismiss/i);
|
|
117
|
+
cleared.push({ type: 'rn_logbox', action: ok ? 'dismissed' : 'dismiss_not_found' });
|
|
118
|
+
};
|
|
96
119
|
const doAllowPermission = async () => {
|
|
97
120
|
if (await handleNativeAlert(d, 'accept')) {
|
|
98
121
|
cleared.push({ type: 'permission_dialog', action: 'allowed_native_alert' });
|
|
@@ -152,7 +175,12 @@ export function registerClearOverlay(server, sessions) {
|
|
|
152
175
|
}
|
|
153
176
|
}
|
|
154
177
|
catch (e) {
|
|
155
|
-
return qaError({
|
|
178
|
+
return qaError({
|
|
179
|
+
what: `clear_overlay "${strategy}" failed: ${String(e)}`,
|
|
180
|
+
changedState: true,
|
|
181
|
+
retrySafe: true,
|
|
182
|
+
nextSteps: ['Re-snapshot and inspect the overlay.'],
|
|
183
|
+
});
|
|
156
184
|
}
|
|
157
185
|
await new Promise((r) => setTimeout(r, 500));
|
|
158
186
|
const after = (await obstructionFor()).obstructed;
|
|
@@ -162,7 +190,9 @@ export function registerClearOverlay(server, sessions) {
|
|
|
162
190
|
if (afterXml)
|
|
163
191
|
parsedAfter = parseSnapshot(afterXml);
|
|
164
192
|
}
|
|
165
|
-
catch {
|
|
193
|
+
catch {
|
|
194
|
+
/* keep undefined */
|
|
195
|
+
}
|
|
166
196
|
const afterOverlays = parsedAfter ? detectTreeOverlays(parsedAfter.allNodes, parsedAfter.screen) : [];
|
|
167
197
|
const remaining = afterOverlays.map((o) => o.type);
|
|
168
198
|
// Outcome (Phase 2.2): distinguish cleared / reappeared (persistent) / not_dismissible /
|
|
@@ -179,7 +209,14 @@ export function registerClearOverlay(server, sessions) {
|
|
|
179
209
|
outcome = overlaysBefore.length && remaining.length >= overlaysBefore.length ? 'reappeared' : 'not_dismissible';
|
|
180
210
|
else
|
|
181
211
|
outcome = 'cleared';
|
|
182
|
-
return qaOk({
|
|
212
|
+
return qaOk({
|
|
213
|
+
strategy,
|
|
214
|
+
outcome,
|
|
215
|
+
cleared,
|
|
216
|
+
overlaysBefore,
|
|
217
|
+
remaining,
|
|
218
|
+
...(targetRef ? { targetObstructedBefore: before, targetObstructedAfter: after } : {}),
|
|
219
|
+
}, `outcome: ${outcome}\ncleared: ${cleared.map((c) => `${c.type}:${c.action}`).join(', ') || '(none)'}${targetRef ? `\ntarget ${targetRef} obstructed: ${before} → ${after}` : ''}${remaining.length ? `\nremaining overlays: ${remaining.join(', ')}` : ''}`);
|
|
183
220
|
});
|
|
184
221
|
}
|
|
185
222
|
//# sourceMappingURL=clearOverlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clearOverlay.js","sourceRoot":"","sources":["../../src/tools/clearOverlay.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,kFAAkF;AAClF,mFAAmF;AAEnF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAgB,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAIhG,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"clearOverlay.js","sourceRoot":"","sources":["../../src/tools/clearOverlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export function registerDetectContext(server, sessions) {
|
|
|
8
8
|
title: 'Detect project context',
|
|
9
9
|
description: 'Scan the resolved project root (a session root, an explicit projectRoot, or MCP workspace roots — never the server cwd) and report: framework (expo/bare-rn/native-android/native-ios/flutter), monorepo, prebuilt artifacts (apk/ipa/.app), online devices + AVDs, toolchain, and blockers. Use this to decide what qa_prepare_target needs.',
|
|
10
10
|
inputSchema: {
|
|
11
|
-
sessionId: z.string().optional().describe(
|
|
11
|
+
sessionId: z.string().optional().describe("Use this session's projectRoot if given."),
|
|
12
12
|
projectRoot: z.string().optional().describe('Absolute path; else resolved via MCP roots.'),
|
|
13
13
|
},
|
|
14
14
|
}, async ({ sessionId, projectRoot }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectContext.js","sourceRoot":"","sources":["../../src/tools/detectContext.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,QAAsB;IAC7E,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,+UAA+U;QACjV,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"detectContext.js","sourceRoot":"","sources":["../../src/tools/detectContext.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,QAAsB;IAC7E,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,+UAA+U;QACjV,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACrF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;SAC3F;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE;QACnC,IAAI,IAAwB,CAAC;QAC7B,IAAI,SAAS;YAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC;oBACb,IAAI,EAAE,0CAA0C;oBAChD,YAAY,EAAE,KAAK;oBACnB,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,CAAC,+DAA+D,CAAC;oBAC5E,UAAU,EAAE,QAAQ,CAAC,IAAI;iBAC1B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GACX,QAAQ,GAAG,CAAC,WAAW,IAAI;YAC3B,aAAa,GAAG,CAAC,SAAS,aAAa,GAAG,CAAC,QAAQ,aAAa,GAAG,CAAC,QAAQ,IAAI;YAChF,cAAc,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,SAAS;YAC1H,oBAAoB,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YACnG,kBAAkB,GAAG,CAAC,SAAS,CAAC,GAAG,aAAa,GAAG,CAAC,SAAS,CAAC,QAAQ,SAAS,GAAG,CAAC,SAAS,CAAC,IAAI,UAAU,GAAG,CAAC,SAAS,CAAC,KAAK,eAAe,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI;YACzK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,GAAyC,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/device.js
CHANGED
|
@@ -23,7 +23,12 @@ export function registerDevice(server, sessions) {
|
|
|
23
23
|
const { driver } = session ? await getDriver(session) : { driver: undefined };
|
|
24
24
|
const serial = driver?.currentDevice();
|
|
25
25
|
if (!session || !driver || !serial) {
|
|
26
|
-
return qaError({
|
|
26
|
+
return qaError({
|
|
27
|
+
what: 'No device attached to this session',
|
|
28
|
+
changedState: false,
|
|
29
|
+
retrySafe: true,
|
|
30
|
+
nextSteps: ['Call qa_prepare_target first.'],
|
|
31
|
+
});
|
|
27
32
|
}
|
|
28
33
|
const [props, screen, density, orientation, pkgs] = await Promise.all([
|
|
29
34
|
getDeviceProps(serial),
|
|
@@ -60,13 +65,23 @@ export function registerDevice(server, sessions) {
|
|
|
60
65
|
const { driver } = session ? await getDriver(session) : { driver: undefined };
|
|
61
66
|
const serial = driver?.currentDevice();
|
|
62
67
|
if (!session || !driver || !serial) {
|
|
63
|
-
return qaError({
|
|
68
|
+
return qaError({
|
|
69
|
+
what: 'No device attached to this session',
|
|
70
|
+
changedState: false,
|
|
71
|
+
retrySafe: true,
|
|
72
|
+
nextSteps: ['Call qa_prepare_target first.'],
|
|
73
|
+
});
|
|
64
74
|
}
|
|
65
75
|
try {
|
|
66
76
|
await setOrientation(serial, orientation);
|
|
67
77
|
}
|
|
68
78
|
catch (e) {
|
|
69
|
-
return qaError({
|
|
79
|
+
return qaError({
|
|
80
|
+
what: `Could not set orientation: ${String(e)}`,
|
|
81
|
+
changedState: false,
|
|
82
|
+
retrySafe: true,
|
|
83
|
+
nextSteps: ['Confirm the device is online.'],
|
|
84
|
+
});
|
|
70
85
|
}
|
|
71
86
|
sessions.addEnvChange(session, `orientation → ${orientation}`);
|
|
72
87
|
const now = await getOrientation(serial);
|
|
@@ -95,10 +110,21 @@ export function registerDevice(server, sessions) {
|
|
|
95
110
|
const { driver } = session ? await getDriver(session) : { driver: undefined };
|
|
96
111
|
const serial = driver?.currentDevice();
|
|
97
112
|
if (!session || !driver || !serial) {
|
|
98
|
-
return qaError({
|
|
113
|
+
return qaError({
|
|
114
|
+
what: 'No device attached to this session',
|
|
115
|
+
changedState: false,
|
|
116
|
+
retrySafe: true,
|
|
117
|
+
nextSteps: ['Call qa_prepare_target first.'],
|
|
118
|
+
});
|
|
99
119
|
}
|
|
100
120
|
if (driver.kind !== 'direct') {
|
|
101
|
-
return qaError({
|
|
121
|
+
return qaError({
|
|
122
|
+
what: 'Geolocation spoofing is only supported on the Android emulator backend',
|
|
123
|
+
changedState: false,
|
|
124
|
+
retrySafe: false,
|
|
125
|
+
failureCode: 'BACKEND_UNSUPPORTED',
|
|
126
|
+
nextSteps: ['On iOS, set a simulated location from the simulator UI; on real devices use a mock-location app.'],
|
|
127
|
+
});
|
|
102
128
|
}
|
|
103
129
|
const gate = consumeConsent(consentId, approve, { action: 'geo_set', affects: { lat, lng } });
|
|
104
130
|
if (!gate.approved) {
|
|
@@ -110,7 +136,13 @@ export function registerDevice(server, sessions) {
|
|
|
110
136
|
consent: { required: true, approved: false },
|
|
111
137
|
status: 'requested',
|
|
112
138
|
});
|
|
113
|
-
return requireConsent({
|
|
139
|
+
return requireConsent({
|
|
140
|
+
action: 'geo_set',
|
|
141
|
+
risk: 'medium',
|
|
142
|
+
exactCommand: `adb -s ${serial} emu geo fix ${lng} ${lat}`,
|
|
143
|
+
affects: { lat, lng },
|
|
144
|
+
explain: `Spoof the device location to (${lat}, ${lng})? Affects any location-aware app.`,
|
|
145
|
+
});
|
|
114
146
|
}
|
|
115
147
|
sessions.recordMutation(session, {
|
|
116
148
|
tool: 'qa_geolocation',
|
|
@@ -134,7 +166,12 @@ export function registerDevice(server, sessions) {
|
|
|
134
166
|
status: 'blocked',
|
|
135
167
|
detail: String(e),
|
|
136
168
|
});
|
|
137
|
-
return qaError({
|
|
169
|
+
return qaError({
|
|
170
|
+
what: `Could not set location: ${String(e)}${emulatorHint}`,
|
|
171
|
+
changedState: false,
|
|
172
|
+
retrySafe: true,
|
|
173
|
+
nextSteps: ['Use an emulator for location spoofing.'],
|
|
174
|
+
});
|
|
138
175
|
}
|
|
139
176
|
sessions.addEnvChange(session, `geolocation → (${lat}, ${lng})`);
|
|
140
177
|
sessions.recordMutation(session, {
|