swipium 1.4.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 +313 -0
- package/README.md +175 -219
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +39 -26
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +68 -20
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +31 -5
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +23 -5
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +44 -8
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +24 -6
- 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 +10 -30
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +6 -6
- 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 +83 -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 +21 -5
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +12 -5
- 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 +6 -2
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +151 -39
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +58 -85
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +34 -12
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +49 -12
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +41 -14
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +112 -30
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +6 -2
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +71 -23
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +15 -5
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +22 -28
- 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 +14 -8
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +9 -3
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +16 -8
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +6 -6
- 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 +288 -121
- 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 +76 -27
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +278 -107
- 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/automationGen/run.js +388 -0
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +17 -10
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +52 -12
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +235 -31
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +39 -18
- 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 +36 -15
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +7 -7
- 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 +55 -18
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +22 -8
- 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 +10 -8
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +160 -39
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +317 -43
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +124 -8
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +365 -55
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +7 -3
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +15 -6
- 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 +11 -6
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +363 -190
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +4 -2
- 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 +137 -29
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +6 -3
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +101 -20
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +44 -15
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +15 -11
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +16 -8
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +8 -5
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +8 -2
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +32 -4
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +27 -15
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +34 -12
- 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 +9 -6
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +16 -13
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +92 -31
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +25 -15
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +45 -11
- 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 +72 -9
- 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 +68 -17
- 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 +21 -5
- 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 +176 -37
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +308 -99
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +107 -25
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +8 -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/ios/signing.js +32 -3
- package/dist/ios/signing.js.map +1 -1
- package/dist/issues/classify.js +28 -20
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +35 -9
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +93 -46
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +6 -5
- 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 +12 -8
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +40 -9
- 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 +84 -8
- 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 +53 -12
- 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 +12 -3
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +399 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/needsInput.js +9 -6
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +4 -3
- 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 +94 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +7 -5
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +6 -3
- 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 +78 -17
- 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 +321 -25
- 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 +150 -28
- 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 +121 -20
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +9 -4
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +214 -35
- 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 +1085 -145
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +148 -26
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +148 -19
- 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 +7 -13
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +167 -0
- package/dist/orchestration/testThis/execute.js.map +1 -0
- package/dist/orchestration/testThis/pipeline.js +413 -0
- package/dist/orchestration/testThis/pipeline.js.map +1 -0
- package/dist/orchestration/testThis/plan.js +519 -0
- package/dist/orchestration/testThis/plan.js.map +1 -0
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +136 -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 +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +24 -24
- 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 +449 -72
- 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/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 +18 -7
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +10 -16
- 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/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/timing.js +23 -23
- package/dist/report/timing.js.map +1 -1
- package/dist/report/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +501 -69
- 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 +10 -4
- package/dist/services/build.js.map +1 -1
- package/dist/services/flowGenerate.js +75 -0
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +40 -8
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +92 -18
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +94 -17
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +271 -80
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +68 -22
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +43 -6
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +78 -33
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +284 -4
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +433 -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/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +459 -59
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +60 -10
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +30 -12
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +36 -6
- 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 +82 -11
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +15 -6
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +22 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +75 -44
- 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 +15 -11
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +7 -3
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +43 -14
- 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 +13 -7
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +21 -16
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +12 -4
- 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 +868 -174
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +521 -112
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +82 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +393 -189
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +92 -51
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +141 -40
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +98 -18
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +108 -19
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +98 -35
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +110 -42
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +152 -130
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +94 -66
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +347 -132
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +42 -10
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +199 -0
- package/dist/tools/generate.js.map +1 -0
- package/dist/tools/getArtifact.js +37 -8
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +17 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +148 -194
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +256 -171
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +55 -11
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +84 -38
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +83 -26
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +36 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +31 -17
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +31 -14
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +193 -47
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +16 -8
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +12 -12
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +81 -18
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +85 -20
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +42 -18
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +29 -12
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +157 -107
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +117 -84
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +391 -310
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +112 -36
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +35 -802
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +698 -116
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -23
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +312 -54
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +37 -64
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +65 -8
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +87 -15
- 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 +210 -104
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +808 -217
- package/package.json +16 -6
- 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/assertVisual.js +0 -74
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js +0 -394
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -209
- 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 +0 -55
- package/dist/tools/flowGenerate.js.map +0 -1
- package/dist/tools/history.js +0 -56
- package/dist/tools/history.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/locator.js +0 -57
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/maestro.js +0 -78
- package/dist/tools/maestro.js.map +0 -1
- package/dist/tools/permissions.js +0 -149
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -49
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -70
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -101
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -170
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -61
- package/dist/tools/visualText.js.map +0 -1
package/dist/lib/redact.js
CHANGED
|
@@ -1,21 +1,182 @@
|
|
|
1
|
-
// Sensitive-mode redaction
|
|
2
|
-
// 1. isSecureNode
|
|
3
|
-
// 2. makeRedactor
|
|
1
|
+
// Sensitive-mode redaction. Two mechanisms:
|
|
2
|
+
// 1. isSecureNode: a field whose VALUE must never be shown (password/OTP/etc.).
|
|
3
|
+
// 2. makeRedactor: scrub known secret values (things typed into secure fields) from any
|
|
4
4
|
// string we emit (snapshots, inspect, report, dump-xml artifacts, logs).
|
|
5
5
|
const SECRET_RE = /password|passwd|otp|one.?time|pin\b|cvv|card.?number|secret|token|security.?code/i;
|
|
6
6
|
export function isSecureNode(n) {
|
|
7
7
|
return n.attrs?.password === 'true' || SECRET_RE.test(n.id) || SECRET_RE.test(n.desc);
|
|
8
8
|
}
|
|
9
|
+
export const REDACTED = '«redacted»';
|
|
10
|
+
/** Values of at least this length are scrubbed as plain SUBSTRINGS (catches a password embedded
|
|
11
|
+
* in a URL, argv or JSON blob). Floor: anything shorter matches ordinary text everywhere. */
|
|
12
|
+
export const SUBSTRING_REDACTION_MIN = 4;
|
|
13
|
+
/** Digit-only values shorter than this (PINs, OTPs, CVVs) are scrubbed as whole TOKENS instead:
|
|
14
|
+
* a 4-digit PIN "2026" must not blank the year inside "20260928" or a build number. */
|
|
15
|
+
export const NUMERIC_TOKEN_MAX = 8;
|
|
16
|
+
/** Values shorter than this are never matched at all: a 1-2 char secret ("7", "ab") would blank
|
|
17
|
+
* step numbers, element refs ("@e7"), versions ("1.7.0") and ordinary words. They are reported
|
|
18
|
+
* via `Redactor.skippedShortSecrets` so the caller can warn that redaction was not applied. */
|
|
19
|
+
export const TOKEN_REDACTION_MIN = 3;
|
|
20
|
+
const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
21
|
+
/** Encoded spellings a secret can take once it has been serialized into an artifact/report
|
|
22
|
+
* (XML/HTML entities, JSON string escaping). Redacting only the raw form lets `P@ss&w0rd`
|
|
23
|
+
* survive as `P@ss&w0rd` in JUnit/SARIF output. */
|
|
24
|
+
function encodedVariants(sec) {
|
|
25
|
+
const xml = sec.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
26
|
+
const xmlNum = xml.replace(/'/g, ''');
|
|
27
|
+
const json = JSON.stringify(sec).slice(1, -1);
|
|
28
|
+
return [...new Set([xml, xmlNum, json])].filter((v) => v !== sec);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build a redactor for SECRET values (everything registered in `session.secrets` is a value
|
|
32
|
+
* captured from a secure field (password / PIN / OTP / CVV) or a secret flow variable).
|
|
33
|
+
* Matching rule by value:
|
|
34
|
+
* - < TOKEN_REDACTION_MIN chars: NOT matched (would corrupt ordinary text); counted in
|
|
35
|
+
* `skippedShortSecrets` so callers can warn;
|
|
36
|
+
* - substring: values with ≥ SUBSTRING_REDACTION_MIN chars that are not short digit runs:
|
|
37
|
+
* every occurrence is scrubbed, even inside a longer token (passwords, API tokens);
|
|
38
|
+
* - token: 3-char values and digit-only values shorter than NUMERIC_TOKEN_MAX (PINs/OTPs/CVVs)
|
|
39
|
+
* are scrubbed only where they stand alone: the value must not touch a letter or digit, and a
|
|
40
|
+
* digit value must not be part of a dotted number ("CVV 123", "cvv=123", "is 123." redact;
|
|
41
|
+
* "12345", "@e123", "v1.123.0", "20260928" do not).
|
|
42
|
+
* Encoded variants (XML entities, JSON escaping) of each secret are scrubbed too.
|
|
43
|
+
* NOTE: redacting serialized JSON/XML as TEXT can still hit numeric values/attributes. For
|
|
44
|
+
* structured artifacts use `redactStructuredText`.
|
|
45
|
+
*/
|
|
9
46
|
export function makeRedactor(secrets) {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
47
|
+
const all = [...new Set([...secrets].filter((x) => typeof x === 'string' && x.length > 0))];
|
|
48
|
+
const values = all.filter((v) => v.length >= TOKEN_REDACTION_MIN);
|
|
49
|
+
const skippedShortSecrets = all.length - values.length;
|
|
50
|
+
const expanded = [...new Set(values.flatMap((v) => [v, ...encodedVariants(v)]))].sort((a, b) => b.length - a.length);
|
|
51
|
+
const matchers = expanded.map((v) => {
|
|
52
|
+
const digits = /^\d+$/.test(v);
|
|
53
|
+
if (v.length >= SUBSTRING_REDACTION_MIN && !(digits && v.length < NUMERIC_TOKEN_MAX))
|
|
54
|
+
return { kind: 'substring', value: v };
|
|
55
|
+
const before = digits ? '(?<![\\p{L}\\p{N}_@])(?<!\\p{N}\\.)' : '(?<![\\p{L}\\p{N}])';
|
|
56
|
+
const after = digits ? '(?![\\p{L}\\p{N}_])(?!\\.\\p{N})' : '(?![\\p{L}\\p{N}])';
|
|
57
|
+
return { kind: 'token', re: new RegExp(`${before}${escapeRe(v)}${after}`, 'gu') };
|
|
58
|
+
});
|
|
59
|
+
const redactor = (s) => {
|
|
60
|
+
if (!s || matchers.length === 0)
|
|
13
61
|
return s;
|
|
14
62
|
let out = s;
|
|
15
|
-
for (const
|
|
16
|
-
if (
|
|
17
|
-
|
|
63
|
+
for (const m of matchers) {
|
|
64
|
+
if (m.kind === 'substring') {
|
|
65
|
+
if (out.includes(m.value))
|
|
66
|
+
out = out.split(m.value).join(REDACTED);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
out = out.replace(m.re, REDACTED);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
};
|
|
74
|
+
redactor.skippedShortSecrets = skippedShortSecrets;
|
|
75
|
+
return redactor;
|
|
76
|
+
}
|
|
77
|
+
/** Attribute / key names that carry geometry or indices, never user-typed content. A 4-digit
|
|
78
|
+
* PIN must not blank `bounds="[0,4821][1080,2400]"`. */
|
|
79
|
+
const NON_CONTENT_KEYS = new Set(['bounds', 'x', 'y', 'width', 'height', 'index', 'instance', 'rect', 'frame']);
|
|
80
|
+
/** Redact serialized XML without touching markup: only attribute values, text nodes, CDATA
|
|
81
|
+
* sections and comments. */
|
|
82
|
+
export function redactXmlText(xml, redact) {
|
|
83
|
+
const r = (t) => redact(t) ?? t;
|
|
84
|
+
const sections = xml
|
|
85
|
+
.replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g, (_m, t) => `<![CDATA[${r(t)}]]>`)
|
|
86
|
+
.replace(/<!--([\s\S]*?)-->/g, (_m, t) => `<!--${r(t)}-->`);
|
|
87
|
+
const attr = sections.replace(/([\w:.-]+)(\s*=\s*)(?:"([^"]*)"|'([^']*)')/g, (m, name, eq, dq, sq) => {
|
|
88
|
+
if (NON_CONTENT_KEYS.has(name.toLowerCase()))
|
|
89
|
+
return m;
|
|
90
|
+
const q = dq !== undefined ? '"' : "'";
|
|
91
|
+
const val = dq ?? sq ?? '';
|
|
92
|
+
return `${name}${eq}${q}${redact(val) ?? val}${q}`;
|
|
93
|
+
});
|
|
94
|
+
return attr.replace(/>([^<]+)</g, (_m, text) => `>${redact(text) ?? text}<`);
|
|
95
|
+
}
|
|
96
|
+
/** Redact a parsed JSON value structurally: string values and keys go through the redactor,
|
|
97
|
+
* numbers/booleans/null are never touched. A key that collides after redaction is suffixed
|
|
98
|
+
* (`«redacted»#2`) instead of silently dropping an entry. */
|
|
99
|
+
export function redactJsonValue(value, redact) {
|
|
100
|
+
const walk = (v, key) => {
|
|
101
|
+
if (typeof v === 'string')
|
|
102
|
+
return key && NON_CONTENT_KEYS.has(key.toLowerCase()) ? v : (redact(v) ?? v);
|
|
103
|
+
if (!v || typeof v !== 'object')
|
|
104
|
+
return v;
|
|
105
|
+
if (Array.isArray(v))
|
|
106
|
+
return v.map((x) => walk(x, key));
|
|
107
|
+
const out = {};
|
|
108
|
+
for (const [k, x] of Object.entries(v))
|
|
109
|
+
out[uniqueKey(out, redact(k) ?? k)] = walk(x, k);
|
|
18
110
|
return out;
|
|
19
111
|
};
|
|
112
|
+
return walk(value);
|
|
113
|
+
}
|
|
114
|
+
/** `key`, or `key#2`, `key#3`…: the first spelling not already present in `obj`. */
|
|
115
|
+
export function uniqueKey(obj, key) {
|
|
116
|
+
if (!Object.prototype.hasOwnProperty.call(obj, key))
|
|
117
|
+
return key;
|
|
118
|
+
let i = 2;
|
|
119
|
+
while (Object.prototype.hasOwnProperty.call(obj, `${key}#${i}`))
|
|
120
|
+
i++;
|
|
121
|
+
return `${key}#${i}`;
|
|
122
|
+
}
|
|
123
|
+
/** Classify an artifact for redaction by mime (and file name as a fallback). */
|
|
124
|
+
export function structuredKindOf(mime, name = '') {
|
|
125
|
+
const m = mime.toLowerCase().split(';')[0].trim();
|
|
126
|
+
if (m === 'application/json' || m.endsWith('+json') || /\.json$/i.test(name))
|
|
127
|
+
return 'json';
|
|
128
|
+
if (m === 'application/xml' || m === 'text/xml' || m.endsWith('+xml') || /\.xml$/i.test(name))
|
|
129
|
+
return 'xml';
|
|
130
|
+
return 'text';
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Redact a serialized artifact without corrupting its structure:
|
|
134
|
+
* - JSON: parse > redact string values/keys > re-stringify (indentation preserved); numeric
|
|
135
|
+
* values are never rewritten, so `{"actions":123}` stays valid with a CVV "123" registered.
|
|
136
|
+
* Falls back to text redaction only when the content does not parse (e.g. NDJSON);
|
|
137
|
+
* - XML: only attribute values (minus geometry attributes) and text nodes;
|
|
138
|
+
* - anything else: plain text redaction.
|
|
139
|
+
*/
|
|
140
|
+
export function redactStructuredText(text, kind, redact) {
|
|
141
|
+
if (kind === 'json') {
|
|
142
|
+
let parsed;
|
|
143
|
+
try {
|
|
144
|
+
parsed = JSON.parse(text);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return redact(text) ?? text;
|
|
148
|
+
}
|
|
149
|
+
const indentMatch = /^[[{]\r?\n([ \t]+)/.exec(text);
|
|
150
|
+
const indent = indentMatch ? indentMatch[1] : undefined;
|
|
151
|
+
const out = JSON.stringify(redactJsonValue(parsed, redact), null, indent);
|
|
152
|
+
return /\n$/.test(text) ? `${out}\n` : out;
|
|
153
|
+
}
|
|
154
|
+
if (kind === 'xml')
|
|
155
|
+
return redactXmlText(text, redact);
|
|
156
|
+
return redact(text) ?? text;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Deep-redact any JSON-like value: every string (object values, array items, nested) goes through the redactor; structure, numbers and booleans are preserved. Use it on a
|
|
160
|
+
* whole report/export payload BEFORE serializing it, so escaping can never hide a secret from
|
|
161
|
+
* the redactor. Accepts a secret list or a prebuilt Redactor. Cycles are left as-is.
|
|
162
|
+
*/
|
|
163
|
+
export function redactDeep(value, secretsOrRedactor) {
|
|
164
|
+
const redact = typeof secretsOrRedactor === 'function' ? secretsOrRedactor : makeRedactor(secretsOrRedactor);
|
|
165
|
+
const seen = new WeakSet();
|
|
166
|
+
const walk = (v) => {
|
|
167
|
+
if (typeof v === 'string')
|
|
168
|
+
return redact(v) ?? v;
|
|
169
|
+
if (!v || typeof v !== 'object')
|
|
170
|
+
return v;
|
|
171
|
+
if (seen.has(v))
|
|
172
|
+
return v;
|
|
173
|
+
seen.add(v);
|
|
174
|
+
if (Array.isArray(v))
|
|
175
|
+
return v.map(walk);
|
|
176
|
+
if (Buffer.isBuffer(v) || v instanceof Date || v instanceof Map || v instanceof Set)
|
|
177
|
+
return v;
|
|
178
|
+
return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, walk(x)]));
|
|
179
|
+
};
|
|
180
|
+
return walk(value);
|
|
20
181
|
}
|
|
21
182
|
//# sourceMappingURL=redact.js.map
|
package/dist/lib/redact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/result.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// Tool result envelopes
|
|
1
|
+
// Tool result envelopes: every tool is self-diagnosing.
|
|
2
2
|
//
|
|
3
3
|
// Recoverable failures are returned as isError:true with a structured, actionable
|
|
4
|
-
// payload
|
|
4
|
+
// payload, NOT thrown. Thrown/JSON-RPC errors are reserved for malformed calls or a
|
|
5
5
|
// broken server (the model can't act on those).
|
|
6
6
|
//
|
|
7
|
-
// Response modes
|
|
7
|
+
// Response modes: a session can ask for `compact | normal | verbose`
|
|
8
8
|
// output. The human-readable text is rendered per mode; `structuredContent` is ALWAYS the
|
|
9
9
|
// full payload, so a client that reads structured data loses nothing in compact mode. The
|
|
10
10
|
// active mode is carried in AsyncLocalStorage so EVERY tool inherits it without touching a
|
|
@@ -20,8 +20,61 @@ export function runWithResponseMode(mode, fn) {
|
|
|
20
20
|
export function currentResponseMode() {
|
|
21
21
|
return modeStore.getStore() ?? DEFAULT_RESPONSE_MODE;
|
|
22
22
|
}
|
|
23
|
+
/** Compact (unindented) JSON fence: the text-channel copy of the payload. Indentation roughly
|
|
24
|
+
* doubled its size for no reader benefit (structuredContent carries the full payload anyway). */
|
|
23
25
|
function fence(obj) {
|
|
24
|
-
return '```json\n' + JSON.stringify(obj
|
|
26
|
+
return '```json\n' + JSON.stringify(obj) + '\n```';
|
|
27
|
+
}
|
|
28
|
+
/** Default recovery steps for an unknown/expired sessionId. */
|
|
29
|
+
export const UNKNOWN_SESSION_NEXT_STEPS = [
|
|
30
|
+
'Call qa_status without sessionId for orientation, or qa_start_session / qa_test_this to create a session.',
|
|
31
|
+
];
|
|
32
|
+
/**
|
|
33
|
+
* The one typed envelope for "that sessionId does not exist". It's an invalid argument, so
|
|
34
|
+
* failureCode INVALID_ARGUMENT (never the UNKNOWN fallback) and retrySafe (nothing changed).
|
|
35
|
+
* Sites with a genuinely different recovery (e.g. "omit sessionId to bootstrap") pass nextSteps.
|
|
36
|
+
*/
|
|
37
|
+
export function unknownSessionError(sessionId, nextSteps) {
|
|
38
|
+
return qaError({
|
|
39
|
+
what: `Unknown sessionId "${sessionId ?? ''}"`,
|
|
40
|
+
changedState: false,
|
|
41
|
+
retrySafe: true,
|
|
42
|
+
failureCode: 'INVALID_ARGUMENT',
|
|
43
|
+
nextSteps: [...(nextSteps ?? UNKNOWN_SESSION_NEXT_STEPS)],
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** True for an argument-validation error thrown by a driver/helper (e.g. a malformed app id
|
|
47
|
+
* from assertAndroidAppId): `code === 'INVALID_ARGUMENT'` or a message prefixed `INVALID_ARGUMENT`. */
|
|
48
|
+
export function isInvalidArgumentError(e) {
|
|
49
|
+
if (!(e instanceof Error))
|
|
50
|
+
return false;
|
|
51
|
+
return e.code === 'INVALID_ARGUMENT' || /^INVALID_ARGUMENT\b/.test(e.message);
|
|
52
|
+
}
|
|
53
|
+
/** Typed envelope for a thrown INVALID_ARGUMENT error, rejected before touching the device. */
|
|
54
|
+
export function invalidArgumentError(e, nextSteps, extra) {
|
|
55
|
+
return qaError({
|
|
56
|
+
what: e.message.replace(/^INVALID_ARGUMENT:\s*/, ''),
|
|
57
|
+
changedState: false,
|
|
58
|
+
retrySafe: true,
|
|
59
|
+
failureCode: 'INVALID_ARGUMENT',
|
|
60
|
+
nextSteps,
|
|
61
|
+
}, extra);
|
|
62
|
+
}
|
|
63
|
+
function withoutKeys(payload, keys) {
|
|
64
|
+
if (!keys?.length)
|
|
65
|
+
return payload;
|
|
66
|
+
const out = {};
|
|
67
|
+
const omitted = [];
|
|
68
|
+
for (const [k, v] of Object.entries(payload)) {
|
|
69
|
+
if (keys.includes(k))
|
|
70
|
+
omitted.push(k);
|
|
71
|
+
else
|
|
72
|
+
out[k] = v;
|
|
73
|
+
}
|
|
74
|
+
// Say what was left out so a text-only reader knows where to find it.
|
|
75
|
+
if (omitted.length)
|
|
76
|
+
out.renderedAbove = omitted;
|
|
77
|
+
return out;
|
|
25
78
|
}
|
|
26
79
|
/** Pull any artifact/resource URIs out of a payload so compact mode can still surface them. */
|
|
27
80
|
function uriLines(payload) {
|
|
@@ -42,17 +95,19 @@ function uriLines(payload) {
|
|
|
42
95
|
/**
|
|
43
96
|
* Compose the human text block for a result. compact = summary (+ any artifact URIs) only,
|
|
44
97
|
* dropping the fenced-JSON duplicate that structuredContent already carries; normal/verbose
|
|
45
|
-
* keep
|
|
98
|
+
* keep a compact fence for clients/humans reading the text channel (normal additionally leaves
|
|
99
|
+
* out keys the summary already rendered, via opts.textOmit; verbose keeps them).
|
|
46
100
|
*/
|
|
47
|
-
function renderText(summary, payload, mode) {
|
|
101
|
+
function renderText(summary, payload, mode, opts) {
|
|
48
102
|
if (mode === 'compact') {
|
|
49
103
|
const uris = uriLines(payload);
|
|
50
104
|
return uris.length ? `${summary}\n${uris.join('\n')}` : summary;
|
|
51
105
|
}
|
|
52
|
-
|
|
106
|
+
// verbose keeps every key in the fence; normal drops the ones the summary already rendered.
|
|
107
|
+
return `${summary}\n\n${fence(mode === 'verbose' ? payload : withoutKeys(payload, opts?.textOmit))}`;
|
|
53
108
|
}
|
|
54
109
|
export function qaError(p, extra) {
|
|
55
|
-
const payload = { ok: false, ...p, ...(extra ?? {}) };
|
|
110
|
+
const payload = { ok: false, failureCode: p.failureCode ?? 'UNKNOWN', ...p, ...(extra ?? {}) };
|
|
56
111
|
const mode = currentResponseMode();
|
|
57
112
|
const head = [
|
|
58
113
|
`❌ ${p.what}`,
|
|
@@ -68,13 +123,28 @@ export function qaError(p, extra) {
|
|
|
68
123
|
const text = mode === 'compact' ? head : `${head}\n${fence(payload)}`;
|
|
69
124
|
return { isError: true, content: [{ type: 'text', text }], structuredContent: payload };
|
|
70
125
|
}
|
|
71
|
-
export function qaOk(payload, summary) {
|
|
126
|
+
export function qaOk(payload, summary, opts) {
|
|
72
127
|
const structured = { ok: true, ...payload };
|
|
73
128
|
return {
|
|
74
|
-
content: [{ type: 'text', text: renderText(summary, structured, currentResponseMode()) }],
|
|
129
|
+
content: [{ type: 'text', text: renderText(summary, structured, currentResponseMode(), opts) }],
|
|
75
130
|
structuredContent: structured,
|
|
76
131
|
};
|
|
77
132
|
}
|
|
133
|
+
/** Append advisory notes (e.g. params ignored in the active mode) to a result without touching
|
|
134
|
+
* its verdict. Same pattern qa_generate established for mode/target-scoped parameters. */
|
|
135
|
+
export function qaAnnotate(result, notes) {
|
|
136
|
+
if (!notes.length)
|
|
137
|
+
return result;
|
|
138
|
+
const content = [...(result.content ?? [])];
|
|
139
|
+
const noteText = `\n\n${notes.map((n) => `Note: ${n}`).join('\n')}`;
|
|
140
|
+
const first = content[0];
|
|
141
|
+
if (first && first.type === 'text')
|
|
142
|
+
content[0] = { ...first, text: `${String(first.text)}${noteText}` };
|
|
143
|
+
else
|
|
144
|
+
content.unshift({ type: 'text', text: noteText.trim() });
|
|
145
|
+
const sc = { ...(result.structuredContent ?? {}), notes };
|
|
146
|
+
return { ...result, content, structuredContent: sc };
|
|
147
|
+
}
|
|
78
148
|
/** A deliberate, budgeted stop (not an error). The agent should call qa_report next. */
|
|
79
149
|
export function qaStop(reason, payload) {
|
|
80
150
|
const structured = { ok: true, stopped: true, reason, ...payload };
|
|
@@ -84,4 +154,18 @@ export function qaStop(reason, payload) {
|
|
|
84
154
|
structuredContent: structured,
|
|
85
155
|
};
|
|
86
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Typed envelope for work that was CANCELLED (the MCP request was aborted, or the job was
|
|
159
|
+
* cancelled). failureCode CANCELLED. Not a failure: it is never recorded as a tool error, a
|
|
160
|
+
* snapshot failure, a finding or a health verdict, and it never switches the session mode.
|
|
161
|
+
*/
|
|
162
|
+
export function cancelledResult(what = 'Cancelled: the call was aborted before it finished', changedState = false) {
|
|
163
|
+
return qaError({
|
|
164
|
+
what,
|
|
165
|
+
changedState,
|
|
166
|
+
retrySafe: true,
|
|
167
|
+
failureCode: 'CANCELLED',
|
|
168
|
+
nextSteps: ['Nothing was recorded as a failure. Re-run the call if you still need its result.'],
|
|
169
|
+
});
|
|
170
|
+
}
|
|
87
171
|
//# sourceMappingURL=result.js.map
|
package/dist/lib/result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/schemaHash.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Schema-hash freshness (Phase 3.3 Milestone A). A version bump tells a HUMAN the server changed,
|
|
2
2
|
// but a client running a pre-upgrade build with the same tool COUNT can still look fresh after a
|
|
3
3
|
// behavior/schema/description change (the 3.2.1 problem). The schema hash is a content fingerprint
|
|
4
|
-
// of the registered tool surface
|
|
4
|
+
// of the registered tool surface (names + descriptions + input-parameter keys), so an agent/client
|
|
5
5
|
// can detect "same count, different surface" and know to restart.
|
|
6
6
|
import { createHash } from 'node:crypto';
|
|
7
7
|
/** Deterministic hash of the tool surface (order-independent). */
|
|
@@ -14,8 +14,8 @@ export function computeSchemaHash(entries) {
|
|
|
14
14
|
/**
|
|
15
15
|
* Best-effort normalized descriptor of a single zod input field (Phase 3.3 §5 deeper hash). Encodes
|
|
16
16
|
* the type, enum options, optionality, and array/record element types so a NESTED change (e.g. a new
|
|
17
|
-
* enum value or a string
|
|
18
|
-
* Falls back to 'field' on any introspection surprise
|
|
17
|
+
* enum value or a string>number switch) shifts the hash even when the field name is unchanged.
|
|
18
|
+
* Falls back to 'field' on any introspection surprise. The hash stays stable, never throws.
|
|
19
19
|
*/
|
|
20
20
|
export function describeZodField(schema, depth = 0) {
|
|
21
21
|
if (depth > 4 || !schema || typeof schema !== 'object')
|
|
@@ -34,7 +34,9 @@ export function describeZodField(schema, depth = 0) {
|
|
|
34
34
|
case 'ZodEnum':
|
|
35
35
|
return `enum(${[...(def.values ?? [])].sort().join('|')})`;
|
|
36
36
|
case 'ZodNativeEnum':
|
|
37
|
-
return `nenum(${Object.values(def.values ?? {})
|
|
37
|
+
return `nenum(${Object.values(def.values ?? {})
|
|
38
|
+
.sort()
|
|
39
|
+
.join('|')})`;
|
|
38
40
|
case 'ZodArray':
|
|
39
41
|
return `array<${describeZodField(def.type, depth + 1)}>`;
|
|
40
42
|
case 'ZodRecord':
|
|
@@ -42,7 +44,7 @@ export function describeZodField(schema, depth = 0) {
|
|
|
42
44
|
case 'ZodUnion':
|
|
43
45
|
return `union(${(def.options ?? []).map((o) => describeZodField(o, depth + 1)).join('|')})`;
|
|
44
46
|
case 'ZodObject': {
|
|
45
|
-
const shape = typeof def.shape === 'function' ? def.shape() : def.shape ?? {};
|
|
47
|
+
const shape = typeof def.shape === 'function' ? def.shape() : (def.shape ?? {});
|
|
46
48
|
return `obj{${Object.keys(shape).sort().join(',')}}`;
|
|
47
49
|
}
|
|
48
50
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaHash.js","sourceRoot":"","sources":["../../src/lib/schemaHash.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,iGAAiG;AACjG,mGAAmG;AACnG,
|
|
1
|
+
{"version":3,"file":"schemaHash.js","sourceRoot":"","sources":["../../src/lib/schemaHash.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/sensitive.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
// Sensitive-mode refusal (
|
|
1
|
+
// Sensitive-mode refusal (Security: sensitive-mode session option). A single, honest
|
|
2
2
|
// refusal for any pixel/video/log capture when the session opted into sensitive mode, so a
|
|
3
3
|
// privacy-sensitive project can run Swipium with no screen contents leaving the device.
|
|
4
4
|
import { qaError } from './result.js';
|
|
5
5
|
export function sensitiveRefusal(what) {
|
|
6
6
|
return qaError({
|
|
7
|
-
what: `${what} refused
|
|
7
|
+
what: `${what} refused: this session is in sensitive mode (no screenshots/video/logs are captured)`,
|
|
8
8
|
changedState: false,
|
|
9
9
|
retrySafe: false,
|
|
10
|
-
|
|
10
|
+
failureCode: 'SENSITIVE_MODE_REFUSED',
|
|
11
|
+
nextSteps: [
|
|
12
|
+
'Start a non-sensitive session (omit sensitive:true) to capture pixels, or rely on structured snapshot + health, which carry no screen contents.',
|
|
13
|
+
],
|
|
11
14
|
});
|
|
12
15
|
}
|
|
13
16
|
//# sourceMappingURL=sensitive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensitive.js","sourceRoot":"","sources":["../../src/lib/sensitive.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"sensitive.js","sourceRoot":"","sources":["../../src/lib/sensitive.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,2FAA2F;AAC3F,wFAAwF;AAExF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,GAAG,IAAI,sFAAsF;QACnG,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,wBAAwB;QACrC,SAAS,EAAE;YACT,iJAAiJ;SAClJ;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/lib/simctl.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// iOS Simulator helpers
|
|
1
|
+
// iOS Simulator helpers via `xcrun simctl`. Local, macOS host only. Covers
|
|
2
2
|
// the lifecycle + screenshot + deep links + privacy/erase that simctl supports natively. UI-tree
|
|
3
3
|
// reads and input injection are NOT available through simctl (they need an XCUITest backend, a
|
|
4
4
|
// attach WebDriverAgent for structured iOS automation, so SimctlDriver reports those as
|
|
@@ -23,7 +23,7 @@ export async function simctlAvailable() {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
function prettyRuntime(key) {
|
|
26
|
-
// runtime key '<reverse-dns>.SimRuntime.iOS-18-0'
|
|
26
|
+
// runtime key '<reverse-dns>.SimRuntime.iOS-18-0' > 'iOS 18.0'
|
|
27
27
|
const m = key.match(/SimRuntime\.([A-Za-z]+)-([\d-]+)$/);
|
|
28
28
|
return m ? `${m[1]} ${m[2].replace(/-/g, '.')}` : key;
|
|
29
29
|
}
|
|
@@ -43,7 +43,7 @@ export async function listSimulators() {
|
|
|
43
43
|
return out;
|
|
44
44
|
}
|
|
45
45
|
export async function boot(udid) {
|
|
46
|
-
// 'Unable to boot ... current state: Booted' is fine
|
|
46
|
+
// 'Unable to boot ... current state: Booted' is fine; treat already-booted as success.
|
|
47
47
|
const r = await run(X, ['simctl', 'boot', udid], { timeoutMs: 120000 });
|
|
48
48
|
if (r.code !== 0 && !/current state: Booted/i.test(r.stderr)) {
|
|
49
49
|
throw new Error(`boot failed: ${r.stderr.trim() || r.stdout.trim()}`);
|
package/dist/lib/simctl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simctl.js","sourceRoot":"","sources":["../../src/lib/simctl.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"simctl.js","sourceRoot":"","sources":["../../src/lib/simctl.ts"],"names":[],"mappings":"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"}
|