swipium 1.5.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +171 -0
- package/README.md +173 -280
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +30 -27
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +47 -21
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +2 -2
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +3 -3
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +2 -2
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +2 -2
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/issues.js +10 -10
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +5 -5
- package/dist/appMap/migrations.js.map +1 -1
- package/dist/appMap/prelaunch.js +2 -2
- package/dist/appMap/prelaunch.js.map +1 -1
- package/dist/appMap/projectRegistry.js +77 -11
- package/dist/appMap/projectRegistry.js.map +1 -1
- package/dist/appMap/provenance.js +2 -2
- package/dist/appMap/provenance.js.map +1 -1
- package/dist/appMap/query.js +2 -2
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +3 -3
- package/dist/appMap/runtimeMerge.js.map +1 -1
- package/dist/appMap/schema.js +1 -1
- package/dist/appMap/schema.js.map +1 -1
- package/dist/appMap/screenMatch.js +1 -1
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +17 -17
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +55 -7
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +3 -3
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +5 -5
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +10 -10
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +3 -3
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +1 -1
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +7 -7
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +3 -3
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +14 -25
- package/dist/automation/selectors.js.map +1 -1
- package/dist/automation/types.js +1 -1
- package/dist/automation/types.js.map +1 -1
- package/dist/automation/waits.js +5 -5
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +2 -2
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +13 -7
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +5 -5
- package/dist/automationGen/ciEmitter.js.map +1 -1
- package/dist/automationGen/identifiers.js +224 -0
- package/dist/automationGen/identifiers.js.map +1 -0
- package/dist/automationGen/jsEmitter.js +265 -106
- package/dist/automationGen/jsEmitter.js.map +1 -1
- package/dist/automationGen/packagePatch.js +2 -2
- package/dist/automationGen/packagePatch.js.map +1 -1
- package/dist/automationGen/platformResolve.js +36 -0
- package/dist/automationGen/platformResolve.js.map +1 -0
- package/dist/automationGen/projectProfile.js +71 -26
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +276 -105
- package/dist/automationGen/pythonEmitter.js.map +1 -1
- package/dist/automationGen/readmeEmitter.js +7 -6
- package/dist/automationGen/readmeEmitter.js.map +1 -1
- package/dist/{tools/automationGenerate.js → automationGen/run.js} +72 -113
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +6 -4
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +20 -8
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +2 -2
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +7 -7
- package/dist/build/plan.js.map +1 -1
- package/dist/ci/preflight.js +13 -4
- package/dist/ci/preflight.js.map +1 -1
- package/dist/cli/gc.js +74 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/init.js +217 -26
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +50 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/report.js +218 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.js +35 -14
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +6 -6
- package/dist/cli/suite.js.map +1 -1
- package/dist/cli/verify.js +7 -7
- package/dist/cli/verify.js.map +1 -1
- package/dist/consent/consent.js +162 -5
- package/dist/consent/consent.js.map +1 -1
- package/dist/context/detect.js +45 -14
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +6 -6
- package/dist/context/findApps.js.map +1 -1
- package/dist/context/projectRoot.js +174 -19
- package/dist/context/projectRoot.js.map +1 -1
- package/dist/context/scan.js +1 -1
- package/dist/context/scan.js.map +1 -1
- package/dist/core/capabilityGroups.js +90 -0
- package/dist/core/capabilityGroups.js.map +1 -0
- package/dist/core/target.js +3 -3
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +65 -62
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +300 -36
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +120 -7
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +350 -50
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +2 -2
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +5 -5
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/policy.js +5 -5
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +301 -284
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +1 -1
- package/dist/featureTesting/executionBootstrap.js +29 -30
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +2 -2
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +12 -12
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +7 -7
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +10 -10
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +6 -6
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +4 -4
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +1 -1
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +1 -1
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +11 -11
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +3 -3
- package/dist/featureTesting/testPlan.js.map +1 -1
- package/dist/firstRun/authStateMachine.js +1 -1
- package/dist/firstRun/authStateMachine.js.map +1 -1
- package/dist/firstRun/classifyScreen.js +5 -5
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +11 -11
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +8 -8
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +9 -9
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +5 -5
- package/dist/firstRun/inputPlanner.js.map +1 -1
- package/dist/firstRun/onboardingStateMachine.js +1 -1
- package/dist/firstRun/onboardingStateMachine.js.map +1 -1
- package/dist/firstRun/paywallPolicy.js +3 -3
- package/dist/firstRun/paywallPolicy.js.map +1 -1
- package/dist/firstRun/types.js +1 -1
- package/dist/firstRun/types.js.map +1 -1
- package/dist/fixtures/catalog.js +33 -3
- package/dist/fixtures/catalog.js.map +1 -1
- package/dist/fixtures/load.js +50 -0
- package/dist/fixtures/load.js.map +1 -0
- package/dist/flows/discover.js +2 -2
- package/dist/flows/discover.js.map +1 -1
- package/dist/flows/generate.js +20 -10
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/pack.js +3 -3
- package/dist/flows/pack.js.map +1 -1
- package/dist/flows/paths.js +57 -0
- package/dist/flows/paths.js.map +1 -0
- package/dist/flows/repair.js +111 -23
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +153 -57
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +50 -5
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +4 -4
- package/dist/flows/seedExec.js.map +1 -1
- package/dist/flows/templates.js +5 -5
- package/dist/index.js +50 -8
- package/dist/index.js.map +1 -1
- package/dist/issues/classify.js +16 -16
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +24 -4
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +94 -31
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +4 -4
- package/dist/issues/metrics.js.map +1 -1
- package/dist/issues/recurrence.js +35 -8
- package/dist/issues/recurrence.js.map +1 -1
- package/dist/issues/report.js +4 -4
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +4 -4
- package/dist/issues/reportBridge.js.map +1 -1
- package/dist/issues/schema.js +2 -2
- package/dist/issues/schema.js.map +1 -1
- package/dist/issues/sourceRevision.js +2 -2
- package/dist/issues/sourceRevision.js.map +1 -1
- package/dist/issues/store.js +110 -32
- package/dist/issues/store.js.map +1 -1
- package/dist/lib/abortScope.js +48 -0
- package/dist/lib/abortScope.js.map +1 -0
- package/dist/lib/android.js +75 -7
- package/dist/lib/android.js.map +1 -1
- package/dist/lib/coordSpace.js +1 -1
- package/dist/lib/coordSpace.js.map +1 -1
- package/dist/lib/device.js +32 -7
- package/dist/lib/device.js.map +1 -1
- package/dist/lib/gestures.js +141 -0
- package/dist/lib/gestures.js.map +1 -0
- package/dist/lib/gitignore.js +4 -3
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/image.js +1 -1
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +370 -31
- package/dist/lib/lockfile.js.map +1 -1
- package/dist/lib/needsInput.js +3 -3
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +2 -2
- package/dist/lib/png.js.map +1 -1
- package/dist/lib/redact.js +170 -9
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/result.js +79 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +3 -3
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +3 -2
- package/dist/lib/sensitive.js.map +1 -1
- package/dist/lib/simctl.js +3 -3
- package/dist/lib/simctl.js.map +1 -1
- package/dist/lib/spawn.js +52 -10
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/toolAnnotations.js +114 -0
- package/dist/lib/toolAnnotations.js.map +1 -0
- package/dist/lib/wda.js +294 -15
- package/dist/lib/wda.js.map +1 -1
- package/dist/mobileAudit/checks.js +12 -12
- package/dist/mobileAudit/checks.js.map +1 -1
- package/dist/mobileAudit/evidence.js +4 -4
- package/dist/mobileAudit/evidence.js.map +1 -1
- package/dist/mobileAudit/profiles.js +1 -1
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +3 -3
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +72 -18
- package/dist/mobileAudit/runner.js.map +1 -1
- package/dist/oracle/auth.js +1 -1
- package/dist/oracle/auth.js.map +1 -1
- package/dist/oracle/failures.js +219 -36
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +63 -17
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +13 -13
- package/dist/oracle/locator.js.map +1 -1
- package/dist/oracle/record.js +3 -3
- package/dist/oracle/record.js.map +1 -1
- package/dist/orchestration/envelope.js +2 -2
- package/dist/orchestration/envelope.js.map +1 -1
- package/dist/orchestration/goal.js +4 -4
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +62 -21
- package/dist/orchestration/testThis/execute.js.map +1 -1
- package/dist/orchestration/testThis/pipeline.js +119 -30
- package/dist/orchestration/testThis/pipeline.js.map +1 -1
- package/dist/orchestration/testThis/plan.js +162 -73
- package/dist/orchestration/testThis/plan.js.map +1 -1
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +34 -16
- package/dist/orchestration/testThis/terminal.js.map +1 -1
- package/dist/orchestration/testThis/types.js +1 -1
- package/dist/orchestration/testThis/types.js.map +1 -1
- package/dist/plan/plan.js +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +22 -22
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/export.js +392 -37
- package/dist/report/export.js.map +1 -1
- package/dist/report/findingsDedupe.js +41 -0
- package/dist/report/findingsDedupe.js.map +1 -0
- package/dist/report/policy.js +7 -4
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +8 -8
- package/dist/report/qaLevel.js.map +1 -1
- package/dist/report/sarifSources.js +160 -0
- package/dist/report/sarifSources.js.map +1 -0
- package/dist/report/summary.js +2 -2
- package/dist/report/summary.js.map +1 -1
- package/dist/report/testCatalog.js +4 -4
- package/dist/report/testCatalog.js.map +1 -1
- package/dist/report/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +472 -45
- package/dist/server.js.map +1 -1
- package/dist/services/automationGenerate.js +8 -2
- package/dist/services/automationGenerate.js.map +1 -1
- package/dist/services/build.js +2 -2
- package/dist/services/build.js.map +1 -1
- package/dist/{tools → services}/flowGenerate.js +29 -13
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +4 -4
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +46 -8
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +24 -9
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +100 -45
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +32 -16
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +28 -3
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +40 -27
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +270 -6
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +317 -48
- package/dist/session/processRegistry.js.map +1 -1
- package/dist/session/progress.js +1 -1
- package/dist/session/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +275 -48
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +53 -8
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +28 -4
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +11 -5
- package/dist/snapshot/present.js.map +1 -1
- package/dist/snapshot/settle.js +39 -9
- package/dist/snapshot/settle.js.map +1 -1
- package/dist/state/consent.js +99 -0
- package/dist/state/consent.js.map +1 -0
- package/dist/state/profile.js +46 -2
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +9 -5
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +4 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +50 -41
- package/dist/suite/pom.js.map +1 -1
- package/dist/suite/secretGuard.js +266 -0
- package/dist/suite/secretGuard.js.map +1 -0
- package/dist/suite/testcase.js +9 -7
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +4 -4
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +13 -9
- package/dist/testSuite/generator.js.map +1 -1
- package/dist/testSuite/history.js +1 -1
- package/dist/testSuite/history.js.map +1 -1
- package/dist/testSuite/issueLinks.js +3 -3
- package/dist/testSuite/issueLinks.js.map +1 -1
- package/dist/testSuite/lint.js +4 -4
- package/dist/testSuite/lint.js.map +1 -1
- package/dist/testSuite/merge.js +5 -5
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +5 -5
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +3 -3
- package/dist/testSuite/store.js.map +1 -1
- package/dist/testSuite/traceability.js +2 -2
- package/dist/testSuite/traceability.js.map +1 -1
- package/dist/tools/act.js +794 -164
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +451 -128
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +69 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +188 -130
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +32 -42
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +21 -31
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +55 -12
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +76 -24
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +68 -28
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +41 -47
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +31 -48
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +34 -41
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +183 -103
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +25 -13
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +52 -89
- package/dist/tools/generate.js.map +1 -1
- package/dist/tools/getArtifact.js +16 -5
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +15 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +45 -223
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +251 -35
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +41 -16
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +36 -35
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +50 -45
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +31 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +26 -26
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +10 -16
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +117 -50
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +11 -22
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +11 -15
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +78 -24
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +23 -21
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +23 -16
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +20 -16
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +155 -118
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +104 -116
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +72 -43
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +30 -20
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +24 -28
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +686 -210
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -38
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +187 -57
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +31 -22
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +53 -6
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +80 -12
- package/dist/visual/provider.js.map +1 -1
- package/docs/README.md +24 -10
- package/docs/ci-reports.md +328 -0
- package/docs/concepts.md +227 -0
- package/docs/flows.md +153 -0
- package/docs/mcp-server.md +194 -128
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +812 -152
- package/package.json +3 -2
- package/dist/tools/assertVisual.js +0 -84
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -179
- package/dist/tools/capabilities.js.map +0 -1
- package/dist/tools/detectContext.js +0 -41
- package/dist/tools/detectContext.js.map +0 -1
- package/dist/tools/flowGenerate.js.map +0 -1
- package/dist/tools/history.js +0 -86
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/locator.js +0 -85
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/permissions.js +0 -174
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -52
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -76
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -133
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -217
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -106
- package/dist/tools/visualText.js.map +0 -1
package/dist/tools/report.js
CHANGED
|
@@ -1,37 +1,26 @@
|
|
|
1
|
-
// qa_report
|
|
1
|
+
// qa_report: thin wrapper around the report service (Phase 3.2 Milestone B). All assembly lives in
|
|
2
2
|
// src/services/report.ts so qa_test_this execute produces the identical report artifact in every
|
|
3
3
|
// terminal state. This tool resolves the session, runs the service, and surfaces its result.
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { qaOk, qaError } from '../lib/result.js';
|
|
5
|
+
import { qaOk, qaError, unknownSessionError } from '../lib/result.js';
|
|
6
6
|
import { generateSessionReport } from '../services/report.js';
|
|
7
7
|
export function registerReport(server, sessions) {
|
|
8
8
|
server.registerTool('qa_report', {
|
|
9
9
|
title: 'Build a session report',
|
|
10
|
-
description: 'Assemble
|
|
10
|
+
description: 'Assemble the session report: executive summary (release risk ship/caution/block + next action), health, outcomes by ' +
|
|
11
|
+
'workflow, findings, evidence links, env changes + restoration, workarounds. Saves the full report as an artifact and returns ' +
|
|
12
|
+
'a summary + URIs. format adds an export artifact: markdown, json, junit, sarif (SARIF 2.1.0), github-summary, playwright, or ' +
|
|
13
|
+
'flow. qa_test_this execute calls this automatically. CI usage: docs/ci-reports.md.',
|
|
11
14
|
inputSchema: {
|
|
12
15
|
sessionId: z.string(),
|
|
13
|
-
format: z
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
.describe('Also emit this export as an artifact (default summary only). markdown = issue-ready; junit = CI; playwright = Playwright-style dashboard JSON; flow = a replayable flow drafted from the actions recorded this run.'),
|
|
17
|
-
baseline: z
|
|
18
|
-
.string()
|
|
19
|
-
.optional()
|
|
20
|
-
.describe('Optional baseline report.json path. When provided, qa_report adds comparison and PR-summary links.'),
|
|
21
|
-
trendRoot: z
|
|
22
|
-
.string()
|
|
23
|
-
.optional()
|
|
24
|
-
.describe('Optional project root containing .swipium/runs or legacy .swipium/ci history. When provided, qa_report adds trend/flake context.'),
|
|
16
|
+
format: z.enum(['summary', 'markdown', 'json', 'junit', 'sarif', 'github-summary', 'flow', 'playwright']).optional(),
|
|
17
|
+
baseline: z.string().optional().describe('Baseline report.json path; adds comparison links.'),
|
|
18
|
+
trendRoot: z.string().optional().describe('Project root with .swipium/runs history; adds trend/flake context.'),
|
|
25
19
|
},
|
|
26
20
|
}, async ({ sessionId, format, baseline, trendRoot }) => {
|
|
27
21
|
const session = sessions.get(sessionId);
|
|
28
22
|
if (!session) {
|
|
29
|
-
return
|
|
30
|
-
what: `Unknown sessionId ${sessionId}`,
|
|
31
|
-
changedState: false,
|
|
32
|
-
retrySafe: true,
|
|
33
|
-
nextSteps: ['Call qa_start_session first.'],
|
|
34
|
-
});
|
|
23
|
+
return unknownSessionError(sessionId);
|
|
35
24
|
}
|
|
36
25
|
// format:"flow" with no recorded actions is a user error (kept from the original tool).
|
|
37
26
|
if (format === 'flow' && !session.recordedActions.length) {
|
|
@@ -39,7 +28,7 @@ export function registerReport(server, sessions) {
|
|
|
39
28
|
what: 'No actions were recorded this run, so there is no flow to export',
|
|
40
29
|
changedState: false,
|
|
41
30
|
retrySafe: true,
|
|
42
|
-
nextSteps: ['Drive the app with qa_act first, then qa_report { format: "flow" }
|
|
31
|
+
nextSteps: ['Drive the app with qa_act first, then qa_report { format: "flow" }, or use qa_generate target:"flow".'],
|
|
43
32
|
});
|
|
44
33
|
}
|
|
45
34
|
const r = await generateSessionReport(sessions, session, {
|
package/dist/tools/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/tools/report.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/tools/report.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,iGAAiG;AACjG,6FAA6F;AAE7F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,UAAU,cAAc,CAAC,MAAiB,EAAE,QAAsB;IACtE,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,sHAAsH;YACtH,+HAA+H;YAC/H,+HAA+H;YAC/H,oFAAoF;QACtF,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;YACpH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAC7F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;SAChH;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,wFAAwF;QACxF,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACzD,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,kEAAkE;gBACxE,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,CAAC,uGAAuG,CAAC;aACrH,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE;YACvD,MAAM;YACN,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;QACH,OAAO,IAAI,CACT;YACE,GAAG,CAAC,CAAC,MAAM;YACX,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,EACD,CAAC,CAAC,WAAW,CACd,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
// qa_resolve_artifact
|
|
1
|
+
// qa_resolve_artifact: find the best installable build for the project, wherever
|
|
2
2
|
// it lives, and explain exactly where Swipium looked. Wraps src/artifacts/resolve.ts and returns
|
|
3
3
|
// a typed NO_BUILD_ARTIFACT / AAB_NEEDS_BUNDLETOOL / outside-root blocker instead of guessing.
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { qaOk
|
|
5
|
+
import { qaOk } from '../lib/result.js';
|
|
6
6
|
import { qaFail } from '../oracle/failures.js';
|
|
7
|
-
import { resolveProjectRoot } from '../context/projectRoot.js';
|
|
7
|
+
import { resolveProjectRoot, unresolvedProjectRootError } from '../context/projectRoot.js';
|
|
8
8
|
import { resolveArtifact } from '../artifacts/resolve.js';
|
|
9
9
|
import { qaNeedsInput, NeedsInput } from '../lib/needsInput.js';
|
|
10
10
|
export function registerResolveArtifact(server, sessions) {
|
|
11
11
|
server.registerTool('qa_resolve_artifact', {
|
|
12
12
|
title: 'Resolve a build artifact',
|
|
13
|
-
description: 'Find the best installable
|
|
13
|
+
description: 'Find the best installable build (.apk/.aab/.ipa/.app): searches Gradle/Flutter/Xcode outputs (DerivedData opt-in). ' +
|
|
14
|
+
'Returns ranked candidates (build type, installability, app id, ABIs, warnings) and the exact locations searched; ' +
|
|
15
|
+
'NO_BUILD_ARTIFACT / AAB_NEEDS_BUNDLETOOL / ARTIFACT_OUTSIDE_ROOT_REQUIRES_APPROVAL when relevant. Side-effect free.',
|
|
14
16
|
inputSchema: {
|
|
15
17
|
sessionId: z.string().optional().describe("Use this session's projectRoot if given."),
|
|
16
|
-
projectRoot: z.string().optional().describe('Absolute path; else
|
|
18
|
+
projectRoot: z.string().optional().describe('Absolute path; else the usual root resolution.'),
|
|
17
19
|
platform: z.enum(['android', 'ios', 'any']).optional(),
|
|
18
20
|
buildType: z.enum(['debug', 'release', 'any']).optional(),
|
|
19
|
-
path: z.string().optional().describe('Explicit artifact path
|
|
20
|
-
allowOutsideRoot: z.boolean().optional().describe('Allow a
|
|
21
|
+
path: z.string().optional().describe('Explicit artifact path; skips the search.'),
|
|
22
|
+
allowOutsideRoot: z.boolean().optional().describe('Allow a candidate outside the project root.'),
|
|
21
23
|
requireInstallableOn: z.enum(['android-emulator', 'android-real', 'ios-simulator', 'ios-real']).optional(),
|
|
22
24
|
},
|
|
23
25
|
}, async ({ sessionId, projectRoot, platform, buildType, path, allowOutsideRoot, requireInstallableOn }) => {
|
|
@@ -27,13 +29,7 @@ export function registerResolveArtifact(server, sessions) {
|
|
|
27
29
|
if (!root) {
|
|
28
30
|
const resolved = await resolveProjectRoot(server, projectRoot);
|
|
29
31
|
if (!resolved.root) {
|
|
30
|
-
return
|
|
31
|
-
what: 'Could not resolve a project root',
|
|
32
|
-
changedState: false,
|
|
33
|
-
retrySafe: true,
|
|
34
|
-
nextSteps: ['Pass projectRoot="/abs/path", or call qa_start_session first.'],
|
|
35
|
-
clientHint: resolved.hint,
|
|
36
|
-
});
|
|
32
|
+
return unresolvedProjectRootError(resolved);
|
|
37
33
|
}
|
|
38
34
|
root = resolved.root;
|
|
39
35
|
}
|
|
@@ -58,7 +54,7 @@ export function registerResolveArtifact(server, sessions) {
|
|
|
58
54
|
what: result.failureCode === 'NO_BUILD_ARTIFACT' ? `No installable artifact found under ${root}` : result.warnings[0],
|
|
59
55
|
nextSteps: [
|
|
60
56
|
...(result.warnings.length ? result.warnings : []),
|
|
61
|
-
'Build from source: qa_build { mode:"plan" }
|
|
57
|
+
'Build from source: qa_build { mode:"plan" } > qa_build { mode:"run" }.',
|
|
62
58
|
`Searched: ${result.searchedLocations.slice(0, 8).join('; ')}${result.searchedLocations.length > 8 ? ' …' : ''}`,
|
|
63
59
|
],
|
|
64
60
|
extra: { searchedLocations: result.searchedLocations, candidates: result.candidates.slice(0, 5) },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveArtifact.js","sourceRoot":"","sources":["../../src/tools/resolveArtifact.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"resolveArtifact.js","sourceRoot":"","sources":["../../src/tools/resolveArtifact.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,iGAAiG;AACjG,+FAA+F;AAE/F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGhE,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,QAAsB;IAC/E,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,qHAAqH;YACrH,mHAAmH;YACnH,qHAAqH;QACvH,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,gDAAgD,CAAC;YAC7F,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;YACtD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;YACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YACjF,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAChG,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC3G;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,EAAE,EAAE;QACtG,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,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,WAAW,EAAE,IAAI;YACjB,QAAQ;YACR,SAAS;YACT,YAAY,EAAE,IAAI;YAClB,gBAAgB;YAChB,oBAAoB,EAAE,oBAAiD;SACxE,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,WAAW,KAAK,yCAAyC,EAAE,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC7D,OAAO,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,IAAI,gBAAgB,CAAC,EAAE;gBACrF,SAAS,EAAE,SAAS,IAAI,IAAI;gBAC5B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;gBAChC,IAAI,EAAE,MAAM,CAAC,WAAW,KAAK,mBAAmB,CAAC,CAAC,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrH,SAAS,EAAE;oBACT,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClD,wEAAwE;oBACxE,aAAa,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;iBACjH;gBACD,KAAK,EAAE,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;aAClG,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC;QAC1B,MAAM,OAAO,GACX,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI;YACjD,YAAY,IAAI,CAAC,QAAQ,cAAc,IAAI,CAAC,SAAS,mBAAmB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACxG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,iBAAiB,MAAM,CAAC,UAAU,CAAC,MAAM,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY;YACnG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE1E,OAAO,IAAI,CACT;YACE,IAAI;YACJ,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACzC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,EACD,OAAO,CACR,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,39 +1,82 @@
|
|
|
1
|
-
// qa_resolve_target
|
|
1
|
+
// qa_resolve_target: gather live device/simulator/artifact inputs and pick the
|
|
2
2
|
// best target with an explained reason, alternatives, preconditions, and whether a boot is
|
|
3
|
-
// needed. Pure decision logic lives in src/core/targetPlan.ts.
|
|
3
|
+
// needed. Pure decision logic lives in src/core/targetPlan.ts. `include` folds in what used to be
|
|
4
|
+
// the (formerly separate, now removed) qa_detect_context tool (project context: framework, artifacts, Android devices + iOS simulators,
|
|
5
|
+
// toolchain, blockers) and the former qa_plan tool (READY / BLOCKED / UNSAFE workflows, src/plan/plan.ts).
|
|
4
6
|
import { z } from 'zod';
|
|
5
|
-
import { qaOk
|
|
7
|
+
import { qaOk } from '../lib/result.js';
|
|
6
8
|
import { qaFail } from '../oracle/failures.js';
|
|
7
|
-
import { resolveProjectRoot } from '../context/projectRoot.js';
|
|
9
|
+
import { resolveProjectRoot, unresolvedProjectRootError } from '../context/projectRoot.js';
|
|
8
10
|
import { adbDevices, listAvds, which } from '../lib/android.js';
|
|
9
11
|
import { simctlAvailable, listSimulators } from '../lib/simctl.js';
|
|
10
12
|
import { resolveArtifact } from '../artifacts/resolve.js';
|
|
11
13
|
import { planTarget } from '../core/targetPlan.js';
|
|
14
|
+
import { detectContext, hasAnyDevice } from '../context/detect.js';
|
|
15
|
+
import { buildPlan } from '../plan/plan.js';
|
|
16
|
+
import { listFlowFiles } from '../flows/discover.js';
|
|
17
|
+
import { verifiedEmulatorSerials } from '../session/attach.js';
|
|
18
|
+
import { loadProjectFixtures } from './startSession.js';
|
|
19
|
+
/** READY / BLOCKED / UNSAFE workflows for `root`, informed by the session's declared fixtures,
|
|
20
|
+
* observed auth, and prepared app when there is one (else .swipium/fixtures.json). Exported for tests. */
|
|
21
|
+
export function workflowPlan(ctx, root, session) {
|
|
22
|
+
const plan = buildPlan({
|
|
23
|
+
framework: ctx.framework,
|
|
24
|
+
// A booted/bootable iOS simulator counts; iOS workflows are not missing_device.
|
|
25
|
+
hasDevice: hasAnyDevice(ctx.devices),
|
|
26
|
+
hasApk: ctx.artifacts.apks.length > 0 || ctx.artifacts.ipas.length > 0 || ctx.artifacts.appBundles.length > 0,
|
|
27
|
+
appPrepared: !!session?.appId,
|
|
28
|
+
fixtures: session?.fixtures ?? loadProjectFixtures(root),
|
|
29
|
+
auth: session?.auth ?? {},
|
|
30
|
+
blockers: ctx.blockers,
|
|
31
|
+
flows: listFlowFiles(root).map((f) => f.name),
|
|
32
|
+
});
|
|
33
|
+
return { ...plan, framework: ctx.framework };
|
|
34
|
+
}
|
|
35
|
+
function contextSummary(ctx) {
|
|
36
|
+
return (`\ncontext: framework=${ctx.framework} location=${ctx.location} monorepo=${ctx.monorepo}; ` +
|
|
37
|
+
`artifacts ${ctx.artifacts.apks.length} apk / ${ctx.artifacts.ipas.length} ipa / ${ctx.artifacts.appBundles.length} .app; ` +
|
|
38
|
+
`android online=[${ctx.devices.androidOnline.join(', ')}] avds=[${ctx.devices.avds.join(', ')}]; ` +
|
|
39
|
+
`iosBooted=[${ctx.devices.iosBooted.map((d) => d.name).join(', ')}] iosAvailable=${ctx.devices.iosAvailable.length}` +
|
|
40
|
+
(ctx.blockers.length ? `\nblockers:\n - ${ctx.blockers.join('\n - ')}` : ''));
|
|
41
|
+
}
|
|
42
|
+
function planSummary(plan) {
|
|
43
|
+
const line = (x) => ` - ${x}`;
|
|
44
|
+
return (`\nplan READY (${plan.ready.length}): ${plan.ready.map((w) => `${w.workflow} [${w.budgetProfile}]`).join(', ') || '(none)'}` +
|
|
45
|
+
(plan.blocked.length
|
|
46
|
+
? `\nBLOCKED (${plan.blocked.length}):\n` +
|
|
47
|
+
plan.blocked.map((w) => line(`${w.workflow}: ${w.category}: ${w.requiredState} > ${w.recommendedSetup}`)).join('\n')
|
|
48
|
+
: '') +
|
|
49
|
+
(plan.unsafe.length
|
|
50
|
+
? `\nUNSAFE (${plan.unsafe.length}):\n` + plan.unsafe.map((w) => line(`${w.workflow}: ${w.reason}: ${w.detail}`)).join('\n')
|
|
51
|
+
: ''));
|
|
52
|
+
}
|
|
12
53
|
export function registerResolveTarget(server, sessions) {
|
|
13
54
|
server.registerTool('qa_resolve_target', {
|
|
14
55
|
title: 'Resolve the best test target',
|
|
15
|
-
description: '
|
|
56
|
+
description: 'Pick the best device/simulator deterministically: honors platform/device and a platform-specific artifact, prefers an ' +
|
|
57
|
+
'online emulator/simulator, else plans a boot; PHYSICAL_DEVICE_UNSUPPORTED only if a phone is the sole option (or ' +
|
|
58
|
+
'preferRealDevice sees one). Returns selected, ' +
|
|
59
|
+
'reason, alternatives, preconditions, willBoot. include:["context"] adds framework, artifacts, Android devices + iOS ' +
|
|
60
|
+
'simulators, toolchain, blockers; include:["plan"] adds READY / BLOCKED / UNSAFE workflows (session fixtures/auth when ' +
|
|
61
|
+
'sessionId is given). Boots nothing.',
|
|
16
62
|
inputSchema: {
|
|
17
63
|
sessionId: z.string().optional(),
|
|
18
64
|
projectRoot: z.string().optional(),
|
|
19
65
|
platform: z.enum(['android', 'ios']).optional(),
|
|
20
66
|
device: z.string().optional().describe('Explicit adb serial / simulator udid or name / AVD name.'),
|
|
21
|
-
preferRealDevice: z.boolean().optional(),
|
|
67
|
+
preferRealDevice: z.boolean().optional().describe('Refused (PHYSICAL_DEVICE_UNSUPPORTED) when a phone is visible.'),
|
|
68
|
+
include: z
|
|
69
|
+
.array(z.enum(['context', 'plan']))
|
|
70
|
+
.optional()
|
|
71
|
+
.describe('Extra sections: context, plan.'),
|
|
22
72
|
},
|
|
23
|
-
}, async ({ sessionId, projectRoot, platform, device, preferRealDevice }) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
root = sessions.get(sessionId)?.root;
|
|
73
|
+
}, async ({ sessionId, projectRoot, platform, device, preferRealDevice, include }) => {
|
|
74
|
+
const session = sessionId ? sessions.get(sessionId) : undefined;
|
|
75
|
+
let root = session?.root;
|
|
27
76
|
if (!root) {
|
|
28
77
|
const resolved = await resolveProjectRoot(server, projectRoot);
|
|
29
78
|
if (!resolved.root)
|
|
30
|
-
return
|
|
31
|
-
what: 'Could not resolve a project root',
|
|
32
|
-
changedState: false,
|
|
33
|
-
retrySafe: true,
|
|
34
|
-
nextSteps: ['Pass projectRoot or call qa_start_session.'],
|
|
35
|
-
clientHint: resolved.hint,
|
|
36
|
-
});
|
|
79
|
+
return unresolvedProjectRootError(resolved);
|
|
37
80
|
root = resolved.root;
|
|
38
81
|
}
|
|
39
82
|
// Gather live inputs in parallel.
|
|
@@ -43,7 +86,9 @@ export function registerResolveTarget(server, sessions) {
|
|
|
43
86
|
adbPresent ? listAvds() : Promise.resolve([]),
|
|
44
87
|
simPresent ? listSimulators() : Promise.resolve([]),
|
|
45
88
|
]);
|
|
46
|
-
//
|
|
89
|
+
// H6: property-verified emulators (localhost:5555, Genymotion) get the same policy as getDriver.
|
|
90
|
+
const emulators = await verifiedEmulatorSerials(online);
|
|
91
|
+
// The artifact (best-effort) tells us the platform constraint. Never fail on this.
|
|
47
92
|
const art = await resolveArtifact({ projectRoot: root, platform: platform ?? 'any' }, false).catch(() => null);
|
|
48
93
|
const inputs = {
|
|
49
94
|
requestedPlatform: platform,
|
|
@@ -51,26 +96,35 @@ export function registerResolveTarget(server, sessions) {
|
|
|
51
96
|
preferRealDevice,
|
|
52
97
|
artifactPlatform: art?.best?.platform,
|
|
53
98
|
artifactInstallTargets: art?.best?.installableOn,
|
|
54
|
-
android: { online, avds },
|
|
99
|
+
android: { online, avds, emulators },
|
|
55
100
|
ios: {
|
|
56
101
|
bootedSimulators: sims.filter((s) => s.state === 'Booted').map((s) => ({ udid: s.udid, name: s.name })),
|
|
57
102
|
availableSimulators: sims.filter((s) => s.state !== 'Booted').map((s) => ({ udid: s.udid, name: s.name })),
|
|
58
103
|
},
|
|
59
|
-
wdaAvailable: undefined, // unknown without probing
|
|
104
|
+
wdaAvailable: undefined, // unknown without probing; surfaced as a precondition
|
|
60
105
|
};
|
|
61
106
|
const plan = planTarget(inputs);
|
|
107
|
+
const wants = new Set(include ?? []);
|
|
108
|
+
const ctx = wants.size ? await detectContext(root) : undefined;
|
|
109
|
+
const extras = {};
|
|
110
|
+
if (ctx && wants.has('context'))
|
|
111
|
+
extras.context = ctx;
|
|
112
|
+
if (ctx && wants.has('plan'))
|
|
113
|
+
extras.plan = workflowPlan(ctx, root, session);
|
|
62
114
|
if (plan.blocked) {
|
|
63
115
|
return qaFail(plan.blocked.failureCode, {
|
|
64
116
|
what: plan.blocked.detail,
|
|
65
|
-
extra: { targetPlan: plan, artifactPlatform: inputs.artifactPlatform ?? null },
|
|
117
|
+
extra: { targetPlan: plan, artifactPlatform: inputs.artifactPlatform ?? null, ...extras },
|
|
66
118
|
});
|
|
67
119
|
}
|
|
68
120
|
const summary = `selected: ${plan.selected}${plan.device ? ` (${plan.device})` : ''}\n` +
|
|
69
121
|
`reason: ${plan.reason}\n` +
|
|
70
|
-
(plan.willBoot ? `willBoot: yes${plan.bootTarget ? `
|
|
122
|
+
(plan.willBoot ? `willBoot: yes${plan.bootTarget ? ` > ${plan.bootTarget}` : ''}\n` : 'willBoot: no\n') +
|
|
71
123
|
(plan.alternatives.length ? `alternatives: ${plan.alternatives.join(', ')}\n` : '') +
|
|
72
|
-
(plan.preconditions.length ? `preconditions: ${plan.preconditions.join('; ')}` : 'preconditions: none')
|
|
73
|
-
|
|
124
|
+
(plan.preconditions.length ? `preconditions: ${plan.preconditions.join('; ')}` : 'preconditions: none') +
|
|
125
|
+
(extras.context ? contextSummary(extras.context) : '') +
|
|
126
|
+
(extras.plan ? planSummary(extras.plan) : '');
|
|
127
|
+
return qaOk({ ...plan, artifactPlatform: inputs.artifactPlatform ?? null, ...extras }, summary);
|
|
74
128
|
});
|
|
75
129
|
}
|
|
76
130
|
//# sourceMappingURL=resolveTarget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveTarget.js","sourceRoot":"","sources":["../../src/tools/resolveTarget.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"resolveTarget.js","sourceRoot":"","sources":["../../src/tools/resolveTarget.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// qa_screen_record
|
|
1
|
+
// qa_screen_record: capture a screen video on Android
|
|
2
2
|
// (adb screenrecord) or the iOS Simulator (simctl io recordVideo). start spawns the recorder
|
|
3
3
|
// (consent-gated, sensitive-screen warning); status reports whether one is active; stop finalizes
|
|
4
4
|
// it gracefully (SIGINT so the mp4 isn't corrupted), saves an artifact, and cleans up. Active
|
|
@@ -9,11 +9,11 @@ import { spawn } from 'node:child_process';
|
|
|
9
9
|
import { readFileSync, rmSync } from 'node:fs';
|
|
10
10
|
import { tmpdir } from 'node:os';
|
|
11
11
|
import { join } from 'node:path';
|
|
12
|
-
import { qaOk, qaError } from '../lib/result.js';
|
|
12
|
+
import { qaOk, qaError, unknownSessionError } from '../lib/result.js';
|
|
13
13
|
import { requireConsent, consumeConsent } from '../consent/consent.js';
|
|
14
14
|
import { sensitiveRefusal } from '../lib/sensitive.js';
|
|
15
15
|
import { run } from '../lib/spawn.js';
|
|
16
|
-
import { getDriver } from '../session/attach.js';
|
|
16
|
+
import { blockedDeviceResult, getDriver } from '../session/attach.js';
|
|
17
17
|
import { registerManagedProcess, unregisterManagedProcess } from '../session/processRegistry.js';
|
|
18
18
|
const active = new Map();
|
|
19
19
|
export function shouldSaveRecording(saveMode, failed) {
|
|
@@ -42,29 +42,31 @@ export async function stopAllRecordings() {
|
|
|
42
42
|
export function registerScreenRecord(server, sessions) {
|
|
43
43
|
server.registerTool('qa_screen_record', {
|
|
44
44
|
title: 'Record the screen',
|
|
45
|
-
description: 'Record
|
|
45
|
+
description: 'Record the screen to an mp4 artifact (Android, iOS Simulator). start (consent-gated, captures whatever is on screen; ' +
|
|
46
|
+
'avoid password/OTP screens), status, stop. save:"on_failure" + stop failed:false discards passing-run videos. Android ' +
|
|
47
|
+
'auto-stops after ~3 min; one recording per session.',
|
|
46
48
|
inputSchema: {
|
|
47
49
|
sessionId: z.string(),
|
|
48
50
|
action: z.enum(['start', 'status', 'stop']),
|
|
49
|
-
save: z
|
|
50
|
-
|
|
51
|
-
.optional()
|
|
52
|
-
.describe('Recording retention mode for action:"start". Defaults to always. Use on_failure in CI to discard videos when stop is called with failed:false.'),
|
|
53
|
-
failed: z.boolean().optional().describe('For action:"stop" with save:"on_failure": true saves the video, false discards it.'),
|
|
51
|
+
save: z.enum(['always', 'on_failure']).optional().describe('start: always (default) | on_failure.'),
|
|
52
|
+
failed: z.boolean().optional().describe('stop with on_failure: true keeps the video.'),
|
|
54
53
|
consentId: z.string().optional(),
|
|
55
54
|
approve: z.boolean().optional(),
|
|
56
55
|
},
|
|
57
56
|
}, async ({ sessionId, action, save, failed, consentId, approve }) => {
|
|
58
57
|
const session = sessions.get(sessionId);
|
|
59
|
-
|
|
58
|
+
if (!session)
|
|
59
|
+
return unknownSessionError(sessionId);
|
|
60
|
+
const { driver, blocked } = await getDriver(session);
|
|
60
61
|
const serial = driver?.currentDevice();
|
|
61
62
|
if (!session || !driver || !serial) {
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
return (blockedDeviceResult(blocked) ??
|
|
64
|
+
qaError({
|
|
65
|
+
what: 'No device attached to this session',
|
|
66
|
+
changedState: false,
|
|
67
|
+
retrySafe: true,
|
|
68
|
+
nextSteps: ['Call qa_prepare_target / qa_ios boot first.'],
|
|
69
|
+
}));
|
|
68
70
|
}
|
|
69
71
|
const backend = driver.kind === 'direct' ? 'direct' : driver.kind === 'simulator' ? 'simulator' : driver.kind === 'wda' ? 'wda_simulator' : null;
|
|
70
72
|
if (!backend) {
|
|
@@ -93,8 +95,8 @@ export function registerScreenRecord(server, sessions) {
|
|
|
93
95
|
seconds,
|
|
94
96
|
}, r
|
|
95
97
|
? ended
|
|
96
|
-
? `recording auto-stopped (${r.backend}, ${r.saveMode}, ~${seconds}s; Android time-limit reached)
|
|
97
|
-
: `recording active (${r.backend}, ${r.saveMode}, ~${seconds}s)
|
|
98
|
+
? `recording auto-stopped (${r.backend}, ${r.saveMode}, ~${seconds}s; Android time-limit reached). Run qa_screen_record { action: "stop", failed:<bool> } to save the mp4.`
|
|
99
|
+
: `recording active (${r.backend}, ${r.saveMode}, ~${seconds}s). Run qa_screen_record { action: "stop", failed:<bool> } to finalize.`
|
|
98
100
|
: 'no active recording.');
|
|
99
101
|
}
|
|
100
102
|
// ---- start ----
|
|
@@ -128,7 +130,7 @@ export function registerScreenRecord(server, sessions) {
|
|
|
128
130
|
risk: 'medium',
|
|
129
131
|
exactCommand: cmd,
|
|
130
132
|
affects: { device: serial },
|
|
131
|
-
explain: 'Record the device screen to a video? It captures everything shown
|
|
133
|
+
explain: 'Record the device screen to a video? It captures everything shown, so do NOT record password/OTP/payment screens.',
|
|
132
134
|
});
|
|
133
135
|
}
|
|
134
136
|
sessions.recordMutation(session, {
|
|
@@ -171,7 +173,7 @@ export function registerScreenRecord(server, sessions) {
|
|
|
171
173
|
status: 'executed',
|
|
172
174
|
detail: 'recording started',
|
|
173
175
|
});
|
|
174
|
-
return qaOk({ recording: true, backend, saveMode }, `recording started (${backend}, ${saveMode})${backend === 'direct' ? ' (auto-stops after ~3 min)' : ''}
|
|
176
|
+
return qaOk({ recording: true, backend, saveMode }, `recording started (${backend}, ${saveMode})${backend === 'direct' ? ' (auto-stops after ~3 min)' : ''}. Call qa_screen_record { action: "stop", failed:<bool> } to finalize${saveMode === 'on_failure' ? ' and keep only on failure' : ' and save the video'}.`);
|
|
175
177
|
}
|
|
176
178
|
// ---- stop ----
|
|
177
179
|
const rec = active.get(sessionId);
|
|
@@ -262,7 +264,7 @@ export function registerScreenRecord(server, sessions) {
|
|
|
262
264
|
seconds: Math.round((Date.now() - rec.startedAt) / 1000),
|
|
263
265
|
backend: rec.backend,
|
|
264
266
|
saveMode: rec.saveMode,
|
|
265
|
-
}, `saved recording (${buf.length} bytes)
|
|
267
|
+
}, `saved recording (${buf.length} bytes) > ${uri}`);
|
|
266
268
|
}
|
|
267
269
|
catch (e) {
|
|
268
270
|
sessions.recordMutation(session, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenRecord.js","sourceRoot":"","sources":["../../src/tools/screenRecord.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,6FAA6F;AAC7F,kGAAkG;AAClG,8FAA8F;AAC9F,iGAAiG;AACjG,+EAA+E;AAE/E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAejG,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE5C,MAAM,UAAU,mBAAmB,CAAC,QAAkB,EAAE,MAA2B;IACjF,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;AAClD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACvH,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ;gBAC1B,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACtH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,QAAsB;IAC5E,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,ogBAAogB;QACtgB,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3C,IAAI,EAAE,CAAC;iBACJ,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;iBAC9B,QAAQ,EAAE;iBACV,QAAQ,CACP,gJAAgJ,CACjJ;YACH,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;YAC7H,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAChC;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;QAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,EAAE,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,oCAAoC;gBAC1C,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,CAAC,6CAA6C,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,MAAM,OAAO,GACX,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;QACnI,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,mDAAmD;gBACzD,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,qBAAqB;gBAClC,SAAS,EAAE,CAAC,sEAAsE,CAAC;aACpF,CAAC,CAAC;QACL,CAAC;QAED,mBAAmB;QACnB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAChC,sFAAsF;YACtF,kFAAkF;YAClF,qDAAqD;YACrD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;YAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,OAAO,IAAI,CACT;gBACE,SAAS,EAAE,CAAC,CAAC,CAAC;gBACd,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK;gBACxB,WAAW,EAAE,KAAK;gBAClB,OAAO,EAAE,CAAC,EAAE,OAAO,IAAI,IAAI;gBAC3B,QAAQ,EAAE,CAAC,EAAE,QAAQ,IAAI,IAAI;gBAC7B,OAAO;aACR,EACD,CAAC;gBACC,CAAC,CAAC,KAAK;oBACL,CAAC,CAAC,2BAA2B,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,QAAQ,MAAM,OAAO,sGAAsG;oBACxK,CAAC,CAAC,qBAAqB,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,QAAQ,MAAM,OAAO,sEAAsE;gBACpI,CAAC,CAAC,sBAAsB,CAC3B,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,SAAS;gBAAE,OAAO,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;YACnE,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC;oBACb,IAAI,EAAE,qDAAqD;oBAC3D,YAAY,EAAE,KAAK;oBACnB,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,CAAC,+DAA+D,CAAC;iBAC7E,CAAC,CAAC;YACL,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,IAAI,QAAQ,CAAC;YAClC,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1G,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE;oBAC/B,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,eAAe;oBACvB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;oBAC7C,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAC5C,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAC;gBACH,MAAM,GAAG,GACP,OAAO,KAAK,QAAQ;oBAClB,CAAC,CAAC,UAAU,MAAM,mDAAmD;oBACrE,CAAC,CAAC,mBAAmB,MAAM,mBAAmB,CAAC;gBACnD,OAAO,cAAc,CAAC;oBACpB,MAAM,EAAE,eAAe;oBACvB,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,GAAG;oBACjB,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;oBAC3B,OAAO,EAAE,iHAAiH;iBAC3H,CAAC,CAAC;YACL,CAAC;YACD,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE;gBAC/B,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,eAAe;gBACvB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;gBAC7C,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACtD,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;YACH,IAAI,GAAc,CAAC;YACnB,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,MAAM,UAAU,GAAG,uBAAuB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC5H,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACpE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACxH,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9E,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC3B,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,kCAAkC;YACjG,mFAAmF;YACnF,0FAA0F;YAC1F,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,OAAO;oBAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3C,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,0BAA0B,OAAO,KAAK,QAAQ,GAAG,CAAC,CAAC;YAClF,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE;gBAC/B,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,eAAe;gBACvB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;gBAC7C,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACtD,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,mBAAmB;aAC5B,CAAC,CAAC;YACH,OAAO,IAAI,CACT,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EACtC,sBAAsB,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,yEAAyE,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAClQ,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,sCAAsC;gBAC5C,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,CAAC,0EAA0E,CAAC;aACxF,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,mBAAmB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC7B,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBACpH,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC9C,IAAI,CAAC;wBACH,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,CAAC;oBAAC,MAAM,CAAC;wBACP,kBAAkB;oBACpB,CAAC;oBACD,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,UAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAC5G,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAChD,CAAC;gBACD,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;gBAC/E,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE;oBAC/B,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,oBAAoB;oBAC5B,IAAI,EAAE,KAAK;oBACX,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE;oBACpG,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC5C,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,qBAAqB;iBAC9B,CAAC,CAAC;gBACH,OAAO,IAAI,CACT;oBACE,SAAS,EAAE,KAAK;oBAChB,KAAK,EAAE,KAAK;oBACZ,SAAS,EAAE,IAAI;oBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;oBACxD,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;iBACvB,EACD,sEAAsE,CACvE,CAAC;YACJ,CAAC;YACD,IAAI,GAAW,CAAC;YAChB,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACpH,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC;oBACH,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,CAAC;gBAAC,MAAM,CAAC;oBACP,kBAAkB;gBACpB,CAAC;gBACD,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,UAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrH,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC7B,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,UAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC5G,CAAC;iBAAM,CAAC;gBACN,4FAA4F;gBAC5F,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC9C,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAC/B,OAAO,EACP,WAAW,EACX,aAAa,IAAI,CAAC,GAAG,EAAE,MAAM,EAC7B,GAAG,EACH,WAAW,EACX,qBAAqB,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,CACzF,CAAC;YACF,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;YACxD,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE;gBAC/B,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,oBAAoB;gBAC5B,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE;gBACpG,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC5C,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,GAAG;gBACd,MAAM,EAAE,iBAAiB;aAC1B,CAAC,CAAC;YACH,OAAO,IAAI,CACT;gBACE,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,IAAI;gBACX,GAAG;gBACH,KAAK,EAAE,GAAG,CAAC,MAAM;gBACjB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;gBACxD,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACvB,EACD,oBAAoB,GAAG,CAAC,MAAM,aAAa,GAAG,EAAE,CACjD,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE;gBAC/B,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,oBAAoB;gBAC5B,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE;gBACpG,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC5C,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;aAClB,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,qCAAqC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACtD,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,CAAC,wFAAwF,CAAC;aACtG,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClC,IAAI,GAAG,CAAC,QAAQ;oBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"screenRecord.js","sourceRoot":"","sources":["../../src/tools/screenRecord.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/screenshot.js
CHANGED
|
@@ -1,31 +1,36 @@
|
|
|
1
|
-
// qa_screenshot
|
|
2
|
-
// (not inline bytes
|
|
1
|
+
// qa_screenshot: capture the screen, save as a session artifact, return a resource URI
|
|
2
|
+
// (not inline bytes). Sensitive-mode: if a secure field is on screen, withhold
|
|
3
3
|
// by default (pixels can't be redacted) unless force:true.
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { qaOk, qaError, qaStop } from '../lib/result.js';
|
|
5
|
+
import { qaOk, qaError, qaStop, unknownSessionError } from '../lib/result.js';
|
|
6
6
|
import { isSecureNode } from '../lib/redact.js';
|
|
7
7
|
import { sensitiveRefusal } from '../lib/sensitive.js';
|
|
8
8
|
import { captureCoordinateSpace } from '../lib/coordSpace.js';
|
|
9
|
-
import { getDriver } from '../session/attach.js';
|
|
9
|
+
import { blockedDeviceResult, getDriver } from '../session/attach.js';
|
|
10
10
|
export function registerScreenshot(server, sessions) {
|
|
11
11
|
server.registerTool('qa_screenshot', {
|
|
12
12
|
title: 'Capture a screenshot',
|
|
13
|
-
description:
|
|
13
|
+
description: 'Capture the screen as a session artifact and return its swipium:// URI (not inline bytes). Withheld when a ' +
|
|
14
|
+
'password/OTP field is on screen unless force:true (pixels cannot be redacted). Counts against the screenshot budget.',
|
|
14
15
|
inputSchema: {
|
|
15
16
|
sessionId: z.string(),
|
|
16
17
|
force: z.boolean().optional(),
|
|
17
|
-
reason: z.string().optional().describe('
|
|
18
|
+
reason: z.string().optional().describe('What it documents (shown in qa_report).'),
|
|
18
19
|
},
|
|
19
20
|
}, async ({ sessionId, force, reason }) => {
|
|
20
21
|
const session = sessions.get(sessionId);
|
|
21
|
-
|
|
22
|
+
if (!session)
|
|
23
|
+
return unknownSessionError(sessionId);
|
|
24
|
+
const { driver, blocked } = await getDriver(session);
|
|
22
25
|
if (!session || !driver) {
|
|
23
|
-
return
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
return (blockedDeviceResult(blocked) ??
|
|
27
|
+
qaError({
|
|
28
|
+
what: 'No device attached to this session',
|
|
29
|
+
changedState: false,
|
|
30
|
+
retrySafe: true,
|
|
31
|
+
failureCode: 'NO_DEVICE',
|
|
32
|
+
nextSteps: ['Call qa_prepare_target first.'],
|
|
33
|
+
}));
|
|
29
34
|
}
|
|
30
35
|
if (session.sensitive)
|
|
31
36
|
return sensitiveRefusal('Screenshot');
|
|
@@ -36,9 +41,10 @@ export function registerScreenshot(server, sessions) {
|
|
|
36
41
|
const hasSecure = session.lastSnapshot ? [...session.lastSnapshot.fullByRef.values()].some((n) => isSecureNode(n)) : false;
|
|
37
42
|
if (hasSecure && !force) {
|
|
38
43
|
return qaError({
|
|
39
|
-
what: 'Screenshot withheld
|
|
44
|
+
what: 'Screenshot withheld: a secure field (password/OTP) is on screen',
|
|
40
45
|
changedState: false,
|
|
41
46
|
retrySafe: true,
|
|
47
|
+
failureCode: 'CAPTURE_WITHHELD_SECURE',
|
|
42
48
|
nextSteps: ['Pass force:true to capture anyway (pixels are NOT redactable), or screenshot a non-sensitive screen.'],
|
|
43
49
|
});
|
|
44
50
|
}
|
|
@@ -54,7 +60,7 @@ export function registerScreenshot(server, sessions) {
|
|
|
54
60
|
// captured a screen with a secure field, say so explicitly so the agent can treat the
|
|
55
61
|
// artifact as sensitive.
|
|
56
62
|
const secureWarning = hasSecure
|
|
57
|
-
? '\n⚠ A secure field (password/OTP) was on screen and screenshot pixels are NOT redacted
|
|
63
|
+
? '\n⚠ A secure field (password/OTP) was on screen and screenshot pixels are NOT redacted. Treat this artifact as sensitive.'
|
|
58
64
|
: '';
|
|
59
65
|
return qaOk({
|
|
60
66
|
uri,
|
|
@@ -62,10 +68,11 @@ export function registerScreenshot(server, sessions) {
|
|
|
62
68
|
bytes: png.length,
|
|
63
69
|
coordinateSpace,
|
|
64
70
|
redaction: rec.redaction,
|
|
71
|
+
...(rec.redaction === 'partial' && rec.redactionNote ? { redactionNote: rec.redactionNote } : {}),
|
|
65
72
|
sensitiveForced: hasSecure ? true : undefined,
|
|
66
73
|
counters: session.counters,
|
|
67
74
|
...(budgetReached ? { budgetReached } : {}),
|
|
68
|
-
}, `Saved screenshot #${n} (${png.length} bytes)
|
|
75
|
+
}, `Saved screenshot #${n} (${png.length} bytes) > ${uri}${secureWarning}\ncoordinate space: ${coordinateSpace.screenshot?.width}x${coordinateSpace.screenshot?.height} screenshot px, scale ${coordinateSpace.scale}, ${coordinateSpace.orientation}${budgetReached ? `\n⏹ budget reached: ${budgetReached}, call qa_report.` : ''}`);
|
|
69
76
|
}
|
|
70
77
|
catch (e) {
|
|
71
78
|
return qaError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"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"}
|