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.
Files changed (541) hide show
  1. package/CHANGELOG.md +313 -0
  2. package/README.md +175 -219
  3. package/THREAT_MODEL.md +223 -47
  4. package/dist/appMap/automationLink.js +39 -26
  5. package/dist/appMap/automationLink.js.map +1 -1
  6. package/dist/appMap/build.js +68 -20
  7. package/dist/appMap/build.js.map +1 -1
  8. package/dist/appMap/codeIndex.js +31 -5
  9. package/dist/appMap/codeIndex.js.map +1 -1
  10. package/dist/appMap/featureIndex.js +23 -5
  11. package/dist/appMap/featureIndex.js.map +1 -1
  12. package/dist/appMap/featureModel.js +44 -8
  13. package/dist/appMap/featureModel.js.map +1 -1
  14. package/dist/appMap/firstRunApply.js +24 -6
  15. package/dist/appMap/firstRunApply.js.map +1 -1
  16. package/dist/appMap/fsWalk.js +19 -2
  17. package/dist/appMap/fsWalk.js.map +1 -1
  18. package/dist/appMap/issues.js +10 -30
  19. package/dist/appMap/issues.js.map +1 -1
  20. package/dist/appMap/migrations.js +6 -6
  21. package/dist/appMap/migrations.js.map +1 -1
  22. package/dist/appMap/prelaunch.js +2 -2
  23. package/dist/appMap/prelaunch.js.map +1 -1
  24. package/dist/appMap/projectRegistry.js +83 -11
  25. package/dist/appMap/projectRegistry.js.map +1 -1
  26. package/dist/appMap/provenance.js +2 -2
  27. package/dist/appMap/provenance.js.map +1 -1
  28. package/dist/appMap/query.js +21 -5
  29. package/dist/appMap/query.js.map +1 -1
  30. package/dist/appMap/runtimeMerge.js +12 -5
  31. package/dist/appMap/runtimeMerge.js.map +1 -1
  32. package/dist/appMap/schema.js +1 -1
  33. package/dist/appMap/schema.js.map +1 -1
  34. package/dist/appMap/screenMatch.js +6 -2
  35. package/dist/appMap/screenMatch.js.map +1 -1
  36. package/dist/appMap/staticScan.js +151 -39
  37. package/dist/appMap/staticScan.js.map +1 -1
  38. package/dist/appMap/store.js +58 -85
  39. package/dist/appMap/store.js.map +1 -1
  40. package/dist/appMap/tsAstScan.js +34 -12
  41. package/dist/appMap/tsAstScan.js.map +1 -1
  42. package/dist/artifacts/bundletool.js +49 -12
  43. package/dist/artifacts/bundletool.js.map +1 -1
  44. package/dist/artifacts/resolve.js +41 -14
  45. package/dist/artifacts/resolve.js.map +1 -1
  46. package/dist/automation/capabilities.js +112 -30
  47. package/dist/automation/capabilities.js.map +1 -1
  48. package/dist/automation/gestures.js +6 -2
  49. package/dist/automation/gestures.js.map +1 -1
  50. package/dist/automation/plan.js +71 -23
  51. package/dist/automation/plan.js.map +1 -1
  52. package/dist/automation/report.js +15 -5
  53. package/dist/automation/report.js.map +1 -1
  54. package/dist/automation/selectors.js +22 -28
  55. package/dist/automation/selectors.js.map +1 -1
  56. package/dist/automation/types.js +1 -1
  57. package/dist/automation/types.js.map +1 -1
  58. package/dist/automation/waits.js +14 -8
  59. package/dist/automation/waits.js.map +1 -1
  60. package/dist/automation/webview.js +9 -3
  61. package/dist/automation/webview.js.map +1 -1
  62. package/dist/automationGen/appiumModel.js +16 -8
  63. package/dist/automationGen/appiumModel.js.map +1 -1
  64. package/dist/automationGen/ciEmitter.js +6 -6
  65. package/dist/automationGen/ciEmitter.js.map +1 -1
  66. package/dist/automationGen/identifiers.js +224 -0
  67. package/dist/automationGen/identifiers.js.map +1 -0
  68. package/dist/automationGen/jsEmitter.js +288 -121
  69. package/dist/automationGen/jsEmitter.js.map +1 -1
  70. package/dist/automationGen/packagePatch.js +2 -2
  71. package/dist/automationGen/packagePatch.js.map +1 -1
  72. package/dist/automationGen/platformResolve.js +36 -0
  73. package/dist/automationGen/platformResolve.js.map +1 -0
  74. package/dist/automationGen/projectProfile.js +76 -27
  75. package/dist/automationGen/projectProfile.js.map +1 -1
  76. package/dist/automationGen/pythonEmitter.js +278 -107
  77. package/dist/automationGen/pythonEmitter.js.map +1 -1
  78. package/dist/automationGen/readmeEmitter.js +7 -6
  79. package/dist/automationGen/readmeEmitter.js.map +1 -1
  80. package/dist/automationGen/run.js +388 -0
  81. package/dist/automationGen/run.js.map +1 -0
  82. package/dist/automationGen/suitePlan.js +17 -10
  83. package/dist/automationGen/suitePlan.js.map +1 -1
  84. package/dist/automationGen/validation.js +52 -12
  85. package/dist/automationGen/validation.js.map +1 -1
  86. package/dist/build/parseBuildLog.js +235 -31
  87. package/dist/build/parseBuildLog.js.map +1 -1
  88. package/dist/build/plan.js +39 -18
  89. package/dist/build/plan.js.map +1 -1
  90. package/dist/ci/preflight.js +13 -4
  91. package/dist/ci/preflight.js.map +1 -1
  92. package/dist/cli/gc.js +74 -0
  93. package/dist/cli/gc.js.map +1 -0
  94. package/dist/cli/init.js +217 -26
  95. package/dist/cli/init.js.map +1 -1
  96. package/dist/cli/main.js +50 -0
  97. package/dist/cli/main.js.map +1 -0
  98. package/dist/cli/report.js +218 -0
  99. package/dist/cli/report.js.map +1 -0
  100. package/dist/cli/scan.js +36 -15
  101. package/dist/cli/scan.js.map +1 -1
  102. package/dist/cli/suite.js +7 -7
  103. package/dist/cli/suite.js.map +1 -1
  104. package/dist/cli/verify.js +7 -7
  105. package/dist/cli/verify.js.map +1 -1
  106. package/dist/consent/consent.js +162 -5
  107. package/dist/consent/consent.js.map +1 -1
  108. package/dist/context/detect.js +55 -18
  109. package/dist/context/detect.js.map +1 -1
  110. package/dist/context/findApps.js +22 -8
  111. package/dist/context/findApps.js.map +1 -1
  112. package/dist/context/projectRoot.js +174 -19
  113. package/dist/context/projectRoot.js.map +1 -1
  114. package/dist/context/scan.js +1 -1
  115. package/dist/context/scan.js.map +1 -1
  116. package/dist/core/capabilityGroups.js +90 -0
  117. package/dist/core/capabilityGroups.js.map +1 -0
  118. package/dist/core/target.js +10 -8
  119. package/dist/core/target.js.map +1 -1
  120. package/dist/core/targetPlan.js +160 -39
  121. package/dist/core/targetPlan.js.map +1 -1
  122. package/dist/drivers/DirectDriver.js +317 -43
  123. package/dist/drivers/DirectDriver.js.map +1 -1
  124. package/dist/drivers/SimctlDriver.js +124 -8
  125. package/dist/drivers/SimctlDriver.js.map +1 -1
  126. package/dist/drivers/WdaDriver.js +365 -55
  127. package/dist/drivers/WdaDriver.js.map +1 -1
  128. package/dist/explore/candidates.js +7 -3
  129. package/dist/explore/candidates.js.map +1 -1
  130. package/dist/explore/graph.js +15 -6
  131. package/dist/explore/graph.js.map +1 -1
  132. package/dist/explore/memory.js +4 -1
  133. package/dist/explore/memory.js.map +1 -1
  134. package/dist/explore/planner.js +54 -9
  135. package/dist/explore/planner.js.map +1 -1
  136. package/dist/explore/policy.js +11 -6
  137. package/dist/explore/policy.js.map +1 -1
  138. package/dist/explore/runner.js +363 -190
  139. package/dist/explore/runner.js.map +1 -1
  140. package/dist/explore/signatures.js +4 -2
  141. package/dist/explore/signatures.js.map +1 -1
  142. package/dist/explore/suite.js +3 -1
  143. package/dist/explore/suite.js.map +1 -1
  144. package/dist/featureTesting/executionBootstrap.js +137 -29
  145. package/dist/featureTesting/executionBootstrap.js.map +1 -1
  146. package/dist/featureTesting/featureMap.js +6 -3
  147. package/dist/featureTesting/featureMap.js.map +1 -1
  148. package/dist/featureTesting/featureScope.js +101 -20
  149. package/dist/featureTesting/featureScope.js.map +1 -1
  150. package/dist/featureTesting/mapFeatureScope.js +44 -15
  151. package/dist/featureTesting/mapFeatureScope.js.map +1 -1
  152. package/dist/featureTesting/objectiveModel.js +15 -11
  153. package/dist/featureTesting/objectiveModel.js.map +1 -1
  154. package/dist/featureTesting/resultMerge.js +16 -8
  155. package/dist/featureTesting/resultMerge.js.map +1 -1
  156. package/dist/featureTesting/sources.js +8 -5
  157. package/dist/featureTesting/sources.js.map +1 -1
  158. package/dist/featureTesting/suiteBridge.js +8 -2
  159. package/dist/featureTesting/suiteBridge.js.map +1 -1
  160. package/dist/featureTesting/synonyms.js +32 -4
  161. package/dist/featureTesting/synonyms.js.map +1 -1
  162. package/dist/featureTesting/testCaseFactory.js +27 -15
  163. package/dist/featureTesting/testCaseFactory.js.map +1 -1
  164. package/dist/featureTesting/testPlan.js +34 -12
  165. package/dist/featureTesting/testPlan.js.map +1 -1
  166. package/dist/firstRun/authStateMachine.js +1 -1
  167. package/dist/firstRun/authStateMachine.js.map +1 -1
  168. package/dist/firstRun/classifyScreen.js +9 -6
  169. package/dist/firstRun/classifyScreen.js.map +1 -1
  170. package/dist/firstRun/firstRunPlanner.js +16 -13
  171. package/dist/firstRun/firstRunPlanner.js.map +1 -1
  172. package/dist/firstRun/firstRunRunner.js +92 -31
  173. package/dist/firstRun/firstRunRunner.js.map +1 -1
  174. package/dist/firstRun/generatedDataPolicy.js +25 -15
  175. package/dist/firstRun/generatedDataPolicy.js.map +1 -1
  176. package/dist/firstRun/inputPlanner.js +45 -11
  177. package/dist/firstRun/inputPlanner.js.map +1 -1
  178. package/dist/firstRun/onboardingStateMachine.js +1 -1
  179. package/dist/firstRun/onboardingStateMachine.js.map +1 -1
  180. package/dist/firstRun/paywallPolicy.js +3 -3
  181. package/dist/firstRun/paywallPolicy.js.map +1 -1
  182. package/dist/firstRun/types.js +1 -1
  183. package/dist/firstRun/types.js.map +1 -1
  184. package/dist/fixtures/catalog.js +72 -9
  185. package/dist/fixtures/catalog.js.map +1 -1
  186. package/dist/fixtures/load.js +50 -0
  187. package/dist/fixtures/load.js.map +1 -0
  188. package/dist/flows/discover.js +2 -2
  189. package/dist/flows/discover.js.map +1 -1
  190. package/dist/flows/generate.js +68 -17
  191. package/dist/flows/generate.js.map +1 -1
  192. package/dist/flows/lint.js +88 -14
  193. package/dist/flows/lint.js.map +1 -1
  194. package/dist/flows/pack.js +21 -5
  195. package/dist/flows/pack.js.map +1 -1
  196. package/dist/flows/paths.js +57 -0
  197. package/dist/flows/paths.js.map +1 -0
  198. package/dist/flows/repair.js +176 -37
  199. package/dist/flows/repair.js.map +1 -1
  200. package/dist/flows/run.js +308 -99
  201. package/dist/flows/run.js.map +1 -1
  202. package/dist/flows/schema.js +107 -25
  203. package/dist/flows/schema.js.map +1 -1
  204. package/dist/flows/seedExec.js +8 -4
  205. package/dist/flows/seedExec.js.map +1 -1
  206. package/dist/flows/templates.js +5 -5
  207. package/dist/index.js +50 -8
  208. package/dist/index.js.map +1 -1
  209. package/dist/ios/signing.js +32 -3
  210. package/dist/ios/signing.js.map +1 -1
  211. package/dist/issues/classify.js +28 -20
  212. package/dist/issues/classify.js.map +1 -1
  213. package/dist/issues/fingerprint.js +35 -9
  214. package/dist/issues/fingerprint.js.map +1 -1
  215. package/dist/issues/index.js +93 -46
  216. package/dist/issues/index.js.map +1 -1
  217. package/dist/issues/metrics.js +6 -5
  218. package/dist/issues/metrics.js.map +1 -1
  219. package/dist/issues/recurrence.js +35 -8
  220. package/dist/issues/recurrence.js.map +1 -1
  221. package/dist/issues/report.js +12 -8
  222. package/dist/issues/report.js.map +1 -1
  223. package/dist/issues/reportBridge.js +40 -9
  224. package/dist/issues/reportBridge.js.map +1 -1
  225. package/dist/issues/schema.js +2 -2
  226. package/dist/issues/schema.js.map +1 -1
  227. package/dist/issues/sourceRevision.js +2 -2
  228. package/dist/issues/sourceRevision.js.map +1 -1
  229. package/dist/issues/store.js +110 -32
  230. package/dist/issues/store.js.map +1 -1
  231. package/dist/lib/abortScope.js +48 -0
  232. package/dist/lib/abortScope.js.map +1 -0
  233. package/dist/lib/android.js +84 -8
  234. package/dist/lib/android.js.map +1 -1
  235. package/dist/lib/coordSpace.js +1 -1
  236. package/dist/lib/coordSpace.js.map +1 -1
  237. package/dist/lib/device.js +53 -12
  238. package/dist/lib/device.js.map +1 -1
  239. package/dist/lib/gestures.js +141 -0
  240. package/dist/lib/gestures.js.map +1 -0
  241. package/dist/lib/gitignore.js +4 -3
  242. package/dist/lib/gitignore.js.map +1 -1
  243. package/dist/lib/image.js +12 -3
  244. package/dist/lib/image.js.map +1 -1
  245. package/dist/lib/lockfile.js +399 -0
  246. package/dist/lib/lockfile.js.map +1 -0
  247. package/dist/lib/needsInput.js +9 -6
  248. package/dist/lib/needsInput.js.map +1 -1
  249. package/dist/lib/png.js +4 -3
  250. package/dist/lib/png.js.map +1 -1
  251. package/dist/lib/redact.js +170 -9
  252. package/dist/lib/redact.js.map +1 -1
  253. package/dist/lib/result.js +94 -10
  254. package/dist/lib/result.js.map +1 -1
  255. package/dist/lib/schemaHash.js +7 -5
  256. package/dist/lib/schemaHash.js.map +1 -1
  257. package/dist/lib/sensitive.js +6 -3
  258. package/dist/lib/sensitive.js.map +1 -1
  259. package/dist/lib/simctl.js +3 -3
  260. package/dist/lib/simctl.js.map +1 -1
  261. package/dist/lib/spawn.js +78 -17
  262. package/dist/lib/spawn.js.map +1 -1
  263. package/dist/lib/toolAnnotations.js +114 -0
  264. package/dist/lib/toolAnnotations.js.map +1 -0
  265. package/dist/lib/wda.js +321 -25
  266. package/dist/lib/wda.js.map +1 -1
  267. package/dist/lib/wdaConfig.js +12 -5
  268. package/dist/lib/wdaConfig.js.map +1 -1
  269. package/dist/lib/wdaTune.js +52 -23
  270. package/dist/lib/wdaTune.js.map +1 -1
  271. package/dist/mobileAudit/checks.js +150 -28
  272. package/dist/mobileAudit/checks.js.map +1 -1
  273. package/dist/mobileAudit/evidence.js +4 -4
  274. package/dist/mobileAudit/evidence.js.map +1 -1
  275. package/dist/mobileAudit/profiles.js +121 -20
  276. package/dist/mobileAudit/profiles.js.map +1 -1
  277. package/dist/mobileAudit/results.js +9 -4
  278. package/dist/mobileAudit/results.js.map +1 -1
  279. package/dist/mobileAudit/runner.js +214 -35
  280. package/dist/mobileAudit/runner.js.map +1 -1
  281. package/dist/oracle/auth.js +1 -1
  282. package/dist/oracle/auth.js.map +1 -1
  283. package/dist/oracle/failures.js +1085 -145
  284. package/dist/oracle/failures.js.map +1 -1
  285. package/dist/oracle/health.js +148 -26
  286. package/dist/oracle/health.js.map +1 -1
  287. package/dist/oracle/locator.js +148 -19
  288. package/dist/oracle/locator.js.map +1 -1
  289. package/dist/oracle/record.js +3 -3
  290. package/dist/oracle/record.js.map +1 -1
  291. package/dist/orchestration/envelope.js +2 -2
  292. package/dist/orchestration/envelope.js.map +1 -1
  293. package/dist/orchestration/goal.js +7 -13
  294. package/dist/orchestration/goal.js.map +1 -1
  295. package/dist/orchestration/testThis/execute.js +167 -0
  296. package/dist/orchestration/testThis/execute.js.map +1 -0
  297. package/dist/orchestration/testThis/pipeline.js +413 -0
  298. package/dist/orchestration/testThis/pipeline.js.map +1 -0
  299. package/dist/orchestration/testThis/plan.js +519 -0
  300. package/dist/orchestration/testThis/plan.js.map +1 -0
  301. package/dist/orchestration/testThis/sessionIntent.js +72 -0
  302. package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
  303. package/dist/orchestration/testThis/terminal.js +136 -0
  304. package/dist/orchestration/testThis/terminal.js.map +1 -0
  305. package/dist/orchestration/testThis/types.js +12 -0
  306. package/dist/orchestration/testThis/types.js.map +1 -0
  307. package/dist/plan/plan.js +9 -9
  308. package/dist/plan/plan.js.map +1 -1
  309. package/dist/prompts/index.js +24 -24
  310. package/dist/prompts/index.js.map +1 -1
  311. package/dist/report/coverage.js +0 -1
  312. package/dist/report/coverage.js.map +1 -1
  313. package/dist/report/evidence.js.map +1 -1
  314. package/dist/report/export.js +449 -72
  315. package/dist/report/export.js.map +1 -1
  316. package/dist/report/findingsDedupe.js +41 -0
  317. package/dist/report/findingsDedupe.js.map +1 -0
  318. package/dist/report/flake.js +13 -14
  319. package/dist/report/flake.js.map +1 -1
  320. package/dist/report/history.js +72 -38
  321. package/dist/report/history.js.map +1 -1
  322. package/dist/report/policy.js +18 -7
  323. package/dist/report/policy.js.map +1 -1
  324. package/dist/report/qaLevel.js +10 -16
  325. package/dist/report/qaLevel.js.map +1 -1
  326. package/dist/report/readiness.js +42 -12
  327. package/dist/report/readiness.js.map +1 -1
  328. package/dist/report/sarifSources.js +160 -0
  329. package/dist/report/sarifSources.js.map +1 -0
  330. package/dist/report/summary.js +2 -2
  331. package/dist/report/summary.js.map +1 -1
  332. package/dist/report/testCatalog.js +4 -4
  333. package/dist/report/testCatalog.js.map +1 -1
  334. package/dist/report/timing.js +23 -23
  335. package/dist/report/timing.js.map +1 -1
  336. package/dist/report/toolHealth.js +124 -0
  337. package/dist/report/toolHealth.js.map +1 -0
  338. package/dist/server.js +501 -69
  339. package/dist/server.js.map +1 -1
  340. package/dist/services/automationGenerate.js +8 -2
  341. package/dist/services/automationGenerate.js.map +1 -1
  342. package/dist/services/build.js +10 -4
  343. package/dist/services/build.js.map +1 -1
  344. package/dist/services/flowGenerate.js +75 -0
  345. package/dist/services/flowGenerate.js.map +1 -0
  346. package/dist/services/preflight.js +40 -8
  347. package/dist/services/preflight.js.map +1 -1
  348. package/dist/services/prepareAndroid.js +92 -18
  349. package/dist/services/prepareAndroid.js.map +1 -1
  350. package/dist/services/prepareIos.js +94 -17
  351. package/dist/services/prepareIos.js.map +1 -1
  352. package/dist/services/report.js +271 -80
  353. package/dist/services/report.js.map +1 -1
  354. package/dist/services/smoke.js +68 -22
  355. package/dist/services/smoke.js.map +1 -1
  356. package/dist/services/suiteGenerate.js +43 -6
  357. package/dist/services/suiteGenerate.js.map +1 -1
  358. package/dist/services/testSuiteKnowledge.js +78 -33
  359. package/dist/services/testSuiteKnowledge.js.map +1 -1
  360. package/dist/session/attach.js +284 -4
  361. package/dist/session/attach.js.map +1 -1
  362. package/dist/session/processRegistry.js +433 -0
  363. package/dist/session/processRegistry.js.map +1 -0
  364. package/dist/session/progress.js +1 -1
  365. package/dist/session/progress.js.map +1 -1
  366. package/dist/session/retention.js +201 -0
  367. package/dist/session/retention.js.map +1 -0
  368. package/dist/session/store.js +459 -59
  369. package/dist/session/store.js.map +1 -1
  370. package/dist/snapshot/overlays.js +60 -10
  371. package/dist/snapshot/overlays.js.map +1 -1
  372. package/dist/snapshot/parse.js +30 -12
  373. package/dist/snapshot/parse.js.map +1 -1
  374. package/dist/snapshot/present.js +36 -6
  375. package/dist/snapshot/present.js.map +1 -1
  376. package/dist/snapshot/settle.js +39 -9
  377. package/dist/snapshot/settle.js.map +1 -1
  378. package/dist/state/consent.js +99 -0
  379. package/dist/state/consent.js.map +1 -0
  380. package/dist/state/profile.js +82 -11
  381. package/dist/state/profile.js.map +1 -1
  382. package/dist/suite/compile.js +15 -6
  383. package/dist/suite/compile.js.map +1 -1
  384. package/dist/suite/lint.js +22 -4
  385. package/dist/suite/lint.js.map +1 -1
  386. package/dist/suite/pom.js +75 -44
  387. package/dist/suite/pom.js.map +1 -1
  388. package/dist/suite/secretGuard.js +266 -0
  389. package/dist/suite/secretGuard.js.map +1 -0
  390. package/dist/suite/testcase.js +15 -11
  391. package/dist/suite/testcase.js.map +1 -1
  392. package/dist/testSuite/exporter.js +7 -3
  393. package/dist/testSuite/exporter.js.map +1 -1
  394. package/dist/testSuite/generator.js +43 -14
  395. package/dist/testSuite/generator.js.map +1 -1
  396. package/dist/testSuite/history.js +1 -1
  397. package/dist/testSuite/history.js.map +1 -1
  398. package/dist/testSuite/issueLinks.js +3 -3
  399. package/dist/testSuite/issueLinks.js.map +1 -1
  400. package/dist/testSuite/lint.js +4 -4
  401. package/dist/testSuite/lint.js.map +1 -1
  402. package/dist/testSuite/merge.js +13 -7
  403. package/dist/testSuite/merge.js.map +1 -1
  404. package/dist/testSuite/schema.js +21 -16
  405. package/dist/testSuite/schema.js.map +1 -1
  406. package/dist/testSuite/store.js +12 -4
  407. package/dist/testSuite/store.js.map +1 -1
  408. package/dist/testSuite/traceability.js +2 -2
  409. package/dist/testSuite/traceability.js.map +1 -1
  410. package/dist/tools/act.js +868 -174
  411. package/dist/tools/act.js.map +1 -1
  412. package/dist/tools/agent.js +521 -112
  413. package/dist/tools/agent.js.map +1 -1
  414. package/dist/tools/appControl.js +82 -19
  415. package/dist/tools/appControl.js.map +1 -1
  416. package/dist/tools/appMap.js +393 -189
  417. package/dist/tools/appMap.js.map +1 -1
  418. package/dist/tools/build.js +92 -51
  419. package/dist/tools/build.js.map +1 -1
  420. package/dist/tools/bundletool.js +141 -40
  421. package/dist/tools/bundletool.js.map +1 -1
  422. package/dist/tools/clearOverlay.js +98 -18
  423. package/dist/tools/clearOverlay.js.map +1 -1
  424. package/dist/tools/device.js +108 -19
  425. package/dist/tools/device.js.map +1 -1
  426. package/dist/tools/doctor.js +98 -35
  427. package/dist/tools/doctor.js.map +1 -1
  428. package/dist/tools/explore.js +110 -42
  429. package/dist/tools/explore.js.map +1 -1
  430. package/dist/tools/featureTesting.js +152 -130
  431. package/dist/tools/featureTesting.js.map +1 -1
  432. package/dist/tools/firstRun.js +94 -66
  433. package/dist/tools/firstRun.js.map +1 -1
  434. package/dist/tools/flow.js +347 -132
  435. package/dist/tools/flow.js.map +1 -1
  436. package/dist/tools/flowRepair.js +42 -10
  437. package/dist/tools/flowRepair.js.map +1 -1
  438. package/dist/tools/generate.js +199 -0
  439. package/dist/tools/generate.js.map +1 -0
  440. package/dist/tools/getArtifact.js +37 -8
  441. package/dist/tools/getArtifact.js.map +1 -1
  442. package/dist/tools/health.js +17 -12
  443. package/dist/tools/health.js.map +1 -1
  444. package/dist/tools/ios.js +148 -194
  445. package/dist/tools/ios.js.map +1 -1
  446. package/dist/tools/issues.js +256 -171
  447. package/dist/tools/issues.js.map +1 -1
  448. package/dist/tools/jobs.js +55 -11
  449. package/dist/tools/jobs.js.map +1 -1
  450. package/dist/tools/metro.js +84 -38
  451. package/dist/tools/metro.js.map +1 -1
  452. package/dist/tools/mobileAudit.js +83 -26
  453. package/dist/tools/mobileAudit.js.map +1 -1
  454. package/dist/tools/network.js +36 -14
  455. package/dist/tools/network.js.map +1 -1
  456. package/dist/tools/note.js +31 -17
  457. package/dist/tools/note.js.map +1 -1
  458. package/dist/tools/prepareIosTarget.js +31 -14
  459. package/dist/tools/prepareIosTarget.js.map +1 -1
  460. package/dist/tools/prepareTarget.js +193 -47
  461. package/dist/tools/prepareTarget.js.map +1 -1
  462. package/dist/tools/report.js +16 -8
  463. package/dist/tools/report.js.map +1 -1
  464. package/dist/tools/resolveArtifact.js +12 -12
  465. package/dist/tools/resolveArtifact.js.map +1 -1
  466. package/dist/tools/resolveTarget.js +81 -18
  467. package/dist/tools/resolveTarget.js.map +1 -1
  468. package/dist/tools/screenRecord.js +85 -20
  469. package/dist/tools/screenRecord.js.map +1 -1
  470. package/dist/tools/screenshot.js +42 -18
  471. package/dist/tools/screenshot.js.map +1 -1
  472. package/dist/tools/smoke.js +29 -12
  473. package/dist/tools/smoke.js.map +1 -1
  474. package/dist/tools/snapshot.js +157 -107
  475. package/dist/tools/snapshot.js.map +1 -1
  476. package/dist/tools/startSession.js +117 -84
  477. package/dist/tools/startSession.js.map +1 -1
  478. package/dist/tools/suite.js +391 -310
  479. package/dist/tools/suite.js.map +1 -1
  480. package/dist/tools/testSuite.js +112 -36
  481. package/dist/tools/testSuite.js.map +1 -1
  482. package/dist/tools/testThis.js +35 -802
  483. package/dist/tools/testThis.js.map +1 -1
  484. package/dist/tools/visual.js +698 -116
  485. package/dist/tools/visual.js.map +1 -1
  486. package/dist/tools/wait.js +9 -23
  487. package/dist/tools/wait.js.map +1 -1
  488. package/dist/tools/wda.js +312 -54
  489. package/dist/tools/wda.js.map +1 -1
  490. package/dist/version.js +37 -64
  491. package/dist/version.js.map +1 -1
  492. package/dist/visual/ocr.js +65 -8
  493. package/dist/visual/ocr.js.map +1 -1
  494. package/dist/visual/provider.js +87 -15
  495. package/dist/visual/provider.js.map +1 -1
  496. package/docs/README.md +24 -10
  497. package/docs/ci-reports.md +328 -0
  498. package/docs/concepts.md +227 -0
  499. package/docs/flows.md +153 -0
  500. package/docs/mcp-server.md +210 -104
  501. package/docs/physical-devices.md +84 -0
  502. package/docs/tools.md +808 -217
  503. package/package.json +16 -6
  504. package/dist/appMap/diff.js +0 -60
  505. package/dist/appMap/diff.js.map +0 -1
  506. package/dist/automation/maestroIr.js +0 -282
  507. package/dist/automation/maestroIr.js.map +0 -1
  508. package/dist/interop/maestro.js +0 -151
  509. package/dist/interop/maestro.js.map +0 -1
  510. package/dist/tools/assertVisual.js +0 -74
  511. package/dist/tools/assertVisual.js.map +0 -1
  512. package/dist/tools/automationGenerate.js +0 -394
  513. package/dist/tools/automationGenerate.js.map +0 -1
  514. package/dist/tools/capabilities.js +0 -209
  515. package/dist/tools/capabilities.js.map +0 -1
  516. package/dist/tools/detectContext.js +0 -41
  517. package/dist/tools/detectContext.js.map +0 -1
  518. package/dist/tools/flowGenerate.js +0 -55
  519. package/dist/tools/flowGenerate.js.map +0 -1
  520. package/dist/tools/history.js +0 -56
  521. package/dist/tools/history.js.map +0 -1
  522. package/dist/tools/idling.js +0 -104
  523. package/dist/tools/idling.js.map +0 -1
  524. package/dist/tools/inputCapabilities.js +0 -30
  525. package/dist/tools/inputCapabilities.js.map +0 -1
  526. package/dist/tools/locator.js +0 -57
  527. package/dist/tools/locator.js.map +0 -1
  528. package/dist/tools/maestro.js +0 -78
  529. package/dist/tools/maestro.js.map +0 -1
  530. package/dist/tools/permissions.js +0 -149
  531. package/dist/tools/permissions.js.map +0 -1
  532. package/dist/tools/plan.js +0 -49
  533. package/dist/tools/plan.js.map +0 -1
  534. package/dist/tools/screenInfo.js +0 -70
  535. package/dist/tools/screenInfo.js.map +0 -1
  536. package/dist/tools/seed.js +0 -101
  537. package/dist/tools/seed.js.map +0 -1
  538. package/dist/tools/state.js +0 -170
  539. package/dist/tools/state.js.map +0 -1
  540. package/dist/tools/visualText.js +0 -61
  541. package/dist/tools/visualText.js.map +0 -1
@@ -1,10 +1,10 @@
1
- // SWIPIUM-REQ-02 — planInputForField(): decide what (if anything) to type into a field, with a
1
+ // planInputForField(): decide what (if anything) to type into a field, with a
2
2
  // strict priority order so Swipium never invents data unless policy + environment allow it.
3
3
  //
4
4
  // Priority:
5
5
  // 1. Existing secure user input for the matching field (from a NeedsInput resume).
6
6
  // 2. Declared fixture value or generator.
7
- // 3. Built-in safe generator — ONLY when generated accounts are allowed for this environment.
7
+ // 3. Built-in safe generator, ONLY when generated accounts are allowed for this environment.
8
8
  // 4. NeedsInput when the value is unsafe/unknown but required.
9
9
  // 5. Skip (blocked) when the field is optional.
10
10
  //
@@ -35,33 +35,67 @@ export function planInputForField(session, req, ctx) {
35
35
  return { decision: 'secure_input', value: existing, varName: canonical, secret, source: 'secure_input', field };
36
36
  }
37
37
  }
38
- // 2. Declared fixture value or generator (existing fixture catalog — may itself mutate session
38
+ // 2. Declared fixture value or generator (existing fixture catalog; may itself mutate session
39
39
  // for fixture-declared generators, which is the intended behavior).
40
40
  const fixture = resolveFixtureValue(session, req.label, req.locator?.value, { role: req.field });
41
41
  if (fixture) {
42
- return { decision: 'fixture', value: fixture.value, varName: fixture.varName, secret: fixture.secret, source: 'fixture', generator: fixture.generator, field };
42
+ return {
43
+ decision: 'fixture',
44
+ value: fixture.value,
45
+ varName: fixture.varName,
46
+ secret: fixture.secret,
47
+ source: 'fixture',
48
+ generator: fixture.generator,
49
+ field,
50
+ };
43
51
  }
44
- // OTP is never invented — only a real provider or a secure input may supply it.
52
+ // OTP is never invented. Only a real provider or a secure input may supply it.
45
53
  if (field === 'otp') {
46
- return { decision: 'needs_input', kind: 'otp_or_manual_verification', reason: 'a one-time code is required and cannot be generated', field };
54
+ return {
55
+ decision: 'needs_input',
56
+ kind: 'otp_or_manual_verification',
57
+ reason: 'a one-time code is required and cannot be generated',
58
+ field,
59
+ };
47
60
  }
48
61
  // 3. Built-in safe generator, gated on the generated-account decision + policy field opt-ins.
49
62
  if (ctx.generationAllowed) {
50
63
  const gen = generateFieldValue(field, ctx.policy, { timestamp: ctx.timestamp, index: ctx.index });
51
64
  if (gen) {
52
- return { decision: 'generator', value: gen.value, varName: generatorVarName(field), secret: gen.secret, source: 'generator', generator: gen.generator, record: true, field };
65
+ return {
66
+ decision: 'generator',
67
+ value: gen.value,
68
+ varName: generatorVarName(field),
69
+ secret: gen.secret,
70
+ source: 'generator',
71
+ generator: gen.generator,
72
+ record: true,
73
+ field,
74
+ };
53
75
  }
54
76
  // generation allowed but this field is not safely generatable (phone/dob without opt-in).
55
77
  if (req.required) {
56
- return { decision: 'needs_input', kind: 'create_test_data', reason: `field "${req.label ?? field}" cannot be safely generated under the current policy`, field };
78
+ return {
79
+ decision: 'needs_input',
80
+ kind: 'create_test_data',
81
+ reason: `field "${req.label ?? field}" cannot be safely generated under the current policy`,
82
+ field,
83
+ };
57
84
  }
58
85
  return { decision: 'skip', reason: `optional field "${req.label ?? field}" left blank (not safely generatable)`, field };
59
86
  }
60
87
  // 4 / 5. No safe value available.
61
88
  if (req.required) {
62
- const kind = field === 'email' || field === 'username' || field === 'password' || field === 'confirm_password' ? 'credentials' : 'create_test_data';
63
- return { decision: 'needs_input', kind, reason: `required field "${req.label ?? field}" has no safe value and generation is not allowed here`, field };
89
+ const kind = field === 'email' || field === 'username' || field === 'password' || field === 'confirm_password'
90
+ ? 'credentials'
91
+ : 'create_test_data';
92
+ return {
93
+ decision: 'needs_input',
94
+ kind,
95
+ reason: `required field "${req.label ?? field}" has no safe value and generation is not allowed here`,
96
+ field,
97
+ };
64
98
  }
65
- return { decision: 'skip', reason: `optional field "${req.label ?? field}" skipped — no value source and generation not allowed`, field };
99
+ return { decision: 'skip', reason: `optional field "${req.label ?? field}" skipped: no value source and generation not allowed`, field };
66
100
  }
67
101
  //# sourceMappingURL=inputPlanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inputPlanner.js","sourceRoot":"","sources":["../../src/firstRun/inputPlanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inputPlanner.js","sourceRoot":"","sources":["../../src/firstRun/inputPlanner.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- // SWIPIUM-REQ-02 — onboarding progression. Prefer non-destructive forward/skip controls
1
+ // Onboarding progression. Prefer non-destructive forward/skip controls
2
2
  // (Next / Continue / Skip / Get started / Done) and never tap a destructive or unknown control.
3
3
  // PURE: returns the single best forward action (or none) for a classified onboarding screen.
4
4
  import { classifyRisk } from '../explore/policy.js';
@@ -1 +1 @@
1
- {"version":3,"file":"onboardingStateMachine.js","sourceRoot":"","sources":["../../src/firstRun/onboardingStateMachine.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,gGAAgG;AAChG,6FAA6F;AAG7F,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,+FAA+F;AAC/F,MAAM,cAAc,GAAqD;IACvE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE;IACtD,EAAE,EAAE,EAAE,wCAAwC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IACrF,EAAE,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE;IACxE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IAC9D,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,qCAAqC,EAAE;IAC1E,EAAE,EAAE,EAAE,4CAA4C,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,uCAAuC,EAAE;CAC5G,CAAC;AAOF,+DAA+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,QAA2B;IAC5D,IAAI,IAAoE,CAAC;IACzE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,SAAS;YAAE,SAAS;QAC5B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAChE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,wEAAwE;QACxE,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QAC5G,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,aAAa,EAAE,6DAA6D,EAAE,CAAC;IAC1F,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,EAAE,CAAC,GAAG;YACjB,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI;YAC1B,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE;YAC9G,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,IAAI,EAAE,MAAM;SACb;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"onboardingStateMachine.js","sourceRoot":"","sources":["../../src/firstRun/onboardingStateMachine.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,gGAAgG;AAChG,6FAA6F;AAG7F,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,+FAA+F;AAC/F,MAAM,cAAc,GAAqD;IACvE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE;IACtD,EAAE,EAAE,EAAE,wCAAwC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IACrF,EAAE,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE;IACxE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IAC9D,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,qCAAqC,EAAE;IAC1E,EAAE,EAAE,EAAE,4CAA4C,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,uCAAuC,EAAE;CAC5G,CAAC;AAOF,+DAA+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,QAA2B;IAC5D,IAAI,IAAoE,CAAC;IACzE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,SAAS;YAAE,SAAS;QAC5B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAChE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,wEAAwE;QACxE,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QAC5G,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,aAAa,EAAE,6DAA6D,EAAE,CAAC;IAC1F,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,EAAE,CAAC,GAAG;YACjB,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI;YAC1B,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE;YAC9G,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,IAAI,EAAE,MAAM;SACb;KACF,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
- // SWIPIUM-REQ-02 — paywall policy. Swipium NEVER purchases. It records paywall coverage and only
1
+ // Paywall policy. Swipium NEVER purchases. It records paywall coverage and only
2
2
  // closes/skips when there is a clearly safe visible dismiss/restore/skip path. PURE.
3
- // Controls that buy / subscribe — must never be auto-tapped.
3
+ // Controls that buy / subscribe. These must never be auto-tapped.
4
4
  const PURCHASE = /\b(subscribe|buy|purchase|start\s+(free\s+)?trial|upgrade|continue\s+to\s+payment|pay|unlock\s+premium|get\s+premium|choose\s+plan|select\s+plan)\b/i;
5
5
  // Safe ways off a paywall.
6
6
  const SAFE_DISMISS = [
@@ -32,7 +32,7 @@ export function planPaywall(elements) {
32
32
  if (!best || match.rank > best.rank)
33
33
  best = { el, rank: match.rank, why: match.why };
34
34
  }
35
- const coverage = 'paywall encountered — recorded coverage; no purchase attempted';
35
+ const coverage = 'paywall encountered: recorded coverage, no purchase attempted';
36
36
  if (!best) {
37
37
  return { coverage, stop: true };
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"paywallPolicy.js","sourceRoot":"","sources":["../../src/firstRun/paywallPolicy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paywallPolicy.js","sourceRoot":"","sources":["../../src/firstRun/paywallPolicy.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- // SWIPIUM-REQ-02 — shared types for the first-run smoke / auth / onboarding / safe-test-data lane.
1
+ // Shared types for the first-run smoke / auth / onboarding / safe-test-data lane.
2
2
  // These describe the data exchanged between the screen classifier, the input planner, the auth /
3
3
  // onboarding / paywall state machines, and the firstRunPlanner. They are intentionally
4
4
  // backend-neutral (no Driver references) so the planning layer stays pure + unit-testable; the
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/firstRun/types.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,iGAAiG;AACjG,uFAAuF;AACvF,+FAA+F;AAC/F,gFAAgF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/firstRun/types.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,iGAAiG;AACjG,uFAAuF;AACvF,+FAA+F;AAC/F,gFAAgF"}
@@ -1,3 +1,5 @@
1
+ import { FLOW_ENV_PREFIX, flowEnvAllowed, lookupFlowVar } from '../flows/schema.js';
2
+ import { log } from '../lib/logger.js';
1
3
  const GENERATORS = {
2
4
  email: () => `swipium.qa.${Date.now()}@example.test`,
3
5
  person_name: () => 'Swipium QA User',
@@ -46,18 +48,47 @@ const FIELD_HINTS = [
46
48
  function variableName(fixture, field) {
47
49
  return `SWIPIUM_${fixture}_${field}`.toUpperCase().replace(/[^A-Z0-9]+/g, '_');
48
50
  }
51
+ /** Why a fixture field's declared `var` was not read from the server environment. Fixtures come
52
+ * from the repo's .swipium/fixtures.json (untrusted per THREAT_MODEL), so, like flows, only
53
+ * SWIPIUM_* names are ever read from process.env; any other name is treated as missing. */
54
+ export function fixtureVarBlockedMessage(fixture, field, varName) {
55
+ return (`fixture "${fixture}" field "${field}" declares var ${varName}, which was not read from the environment: ` +
56
+ `fixtures read process.env only for ${FLOW_ENV_PREFIX}* names. Rename it (e.g. ${variableName(fixture, field)}) ` +
57
+ `or provide the value via secure input`);
58
+ }
59
+ const warnedBlockedVars = new Set();
60
+ /** process.env value for a fixture's declared var. SWIPIUM_* names only (else undefined + a warning). */
61
+ function envFixtureVar(fixture, field, varName) {
62
+ if (!flowEnvAllowed(varName)) {
63
+ const key = `${fixture}\0${field}\0${varName}`;
64
+ if (!warnedBlockedVars.has(key)) {
65
+ warnedBlockedVars.add(key);
66
+ log('warn', fixtureVarBlockedMessage(fixture, field, varName));
67
+ }
68
+ return undefined;
69
+ }
70
+ return lookupFlowVar(varName, {});
71
+ }
49
72
  function fixtureFields(f) {
50
73
  if (!f.fields || typeof f.fields !== 'object')
51
74
  return {};
52
75
  return f.fields;
53
76
  }
54
77
  function normalizeText(value) {
55
- return (value ?? '').toLowerCase().replace(/[_-]+/g, ' ').replace(/[^a-z0-9]+/g, ' ').replace(/\s+/g, ' ').trim();
78
+ return (value ?? '')
79
+ .toLowerCase()
80
+ .replace(/[_-]+/g, ' ')
81
+ .replace(/[^a-z0-9]+/g, ' ')
82
+ .replace(/\s+/g, ' ')
83
+ .trim();
56
84
  }
57
85
  function normalizeGenerator(value) {
58
86
  if (!value)
59
87
  return undefined;
60
- return GENERATOR_ALIASES[value.trim().toLowerCase().replace(/[-\s]+/g, '_')];
88
+ return GENERATOR_ALIASES[value
89
+ .trim()
90
+ .toLowerCase()
91
+ .replace(/[-\s]+/g, '_')];
61
92
  }
62
93
  function fieldScore(fieldName, spec, key, context = {}) {
63
94
  const normalizedField = normalizeText(fieldName);
@@ -105,24 +136,56 @@ export function resolveFixtureValue(session, label, locatorValue, context = {})
105
136
  const generated = session.generatedValues.find((g) => g.varName === varName && g.fixture === best.fixture.name && g.field === best.field);
106
137
  if (generated) {
107
138
  session.inputValues.set(varName, generated.value);
108
- return { value: generated.value, varName, secret: generated.secret, fixture: best.fixture.name, field: best.field, source: 'generator', generator: generated.generator };
139
+ return {
140
+ value: generated.value,
141
+ varName,
142
+ secret: generated.secret,
143
+ fixture: best.fixture.name,
144
+ field: best.field,
145
+ source: 'generator',
146
+ generator: generated.generator,
147
+ };
148
+ }
149
+ const fromInput = session.inputValues.get(varName);
150
+ if (fromInput != null)
151
+ return { value: fromInput, varName, secret, fixture: best.fixture.name, field: best.field, source: 'variable' };
152
+ const fromEnv = spec.var ? envFixtureVar(best.fixture.name, best.field, spec.var) : undefined;
153
+ if (fromEnv != null) {
154
+ // Anything read from the server environment is treated as a secret: registered for
155
+ // redaction so it never lands in recorded actions, notes, artifacts or state.json.
156
+ session.secrets.add(fromEnv);
157
+ return { value: fromEnv, varName, secret: true, fixture: best.fixture.name, field: best.field, source: 'variable' };
109
158
  }
110
- const fromVar = session.inputValues.get(varName) ?? (spec.var ? process.env[spec.var] : undefined);
111
- if (fromVar != null)
112
- return { value: fromVar, varName, secret, fixture: best.fixture.name, field: best.field, source: 'variable' };
113
159
  if (spec.value != null)
114
160
  return { value: spec.value, varName, secret, fixture: best.fixture.name, field: best.field, source: 'value' };
115
161
  const generator = normalizeGenerator(spec.generator);
116
162
  if (generator && GENERATORS[generator]) {
117
163
  const value = GENERATORS[generator]();
118
164
  session.inputValues.set(varName, value);
119
- session.generatedValues.push({ at: Date.now(), fixture: best.fixture.name, field: best.field, varName, generator, value, secret: false });
165
+ session.generatedValues.push({
166
+ at: Date.now(),
167
+ fixture: best.fixture.name,
168
+ field: best.field,
169
+ varName,
170
+ generator,
171
+ value,
172
+ secret: false,
173
+ });
120
174
  return { value, varName, secret: false, fixture: best.fixture.name, field: best.field, source: 'generator', generator };
121
175
  }
122
176
  }
123
- const legacy = key ? session.fixtures.find((f) => f.value && (key.includes(normalizeText(f.name)) || normalizeText(f.name).includes(key))) : undefined;
177
+ const legacy = key
178
+ ? session.fixtures.find((f) => f.value && (key.includes(normalizeText(f.name)) || normalizeText(f.name).includes(key)))
179
+ : undefined;
124
180
  if (legacy?.value)
125
- return { value: legacy.value, varName: variableName(legacy.name, 'value'), secret: false, fixture: legacy.name, field: 'value', source: 'legacy_value' };
181
+ return {
182
+ value: legacy.value,
183
+ varName: variableName(legacy.name, 'value'),
184
+ secret: false,
185
+ fixture: legacy.name,
186
+ field: 'value',
187
+ source: 'legacy_value',
188
+ };
126
189
  return undefined;
127
190
  }
128
191
  export function hasDisposableState(session) {
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/fixtures/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/fixtures/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ // Fixture loading + persistence shape. Fixture VALUES (field values, legacy `value`) and seed
2
+ // specs (argv / URLs / headers / bodies, often tokens) are live configuration that must never be
3
+ // written to state.json: a redacted copy reloaded as config would type «redacted» into a password
4
+ // field or run a seed with a broken token. state.json keeps only non-secret metadata (for reports);
5
+ // a rehydrated session re-reads the real fixtures from <root>/.swipium/fixtures.json.
6
+ import { existsSync, readFileSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ /** Load declared fixtures from <root>/.swipium/fixtures.json (best-effort, array or {fixtures:[]}). */
9
+ export function loadProjectFixtures(root) {
10
+ const p = join(root, '.swipium', 'fixtures.json');
11
+ if (!existsSync(p))
12
+ return [];
13
+ try {
14
+ const raw = JSON.parse(readFileSync(p, 'utf8'));
15
+ const arr = Array.isArray(raw) ? raw : Array.isArray(raw?.fixtures) ? raw.fixtures : [];
16
+ return arr.filter((f) => f && typeof f.name === 'string');
17
+ }
18
+ catch {
19
+ return [];
20
+ }
21
+ }
22
+ /** state.json form of a fixture: names/labels/field specs kept, every value and the seed dropped. */
23
+ export function fixtureMetadata(fixtures) {
24
+ return fixtures.map((f) => {
25
+ const { value: _value, seed: _seed, fields, ...rest } = f;
26
+ const out = { ...rest };
27
+ if (fields && typeof fields === 'object') {
28
+ out.fields = Object.fromEntries(Object.entries(fields).map(([k, spec]) => {
29
+ const { value: _v, ...meta } = spec ?? {};
30
+ return [k, meta];
31
+ }));
32
+ }
33
+ return out;
34
+ });
35
+ }
36
+ /** Fixtures for a session reloaded from state.json: the project's fixtures.json is the source of
37
+ * truth for live values; persisted metadata only fills in fixtures no longer in the file (e.g.
38
+ * ones passed to qa_start_session). They are value-less, so they never supply redacted text as input. */
39
+ export function rehydrateFixtures(root, persisted) {
40
+ const fromFile = typeof root === 'string' ? loadProjectFixtures(root) : [];
41
+ const byName = new Map();
42
+ for (const f of fromFile)
43
+ byName.set(f.name, f);
44
+ const meta = Array.isArray(persisted) ? fixtureMetadata(persisted.filter((f) => f && typeof f.name === 'string')) : [];
45
+ for (const f of meta)
46
+ if (!byName.has(f.name))
47
+ byName.set(f.name, f);
48
+ return [...byName.values()];
49
+ }
50
+ //# sourceMappingURL=load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/fixtures/load.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- // Shared flow discovery: list .swipium/flows/*.yaml|*.yml. Used by qa_plan (names → candidate
2
- // workflows) and qa_smoke (paths → run the pack). One source so the two never disagree.
1
+ // Shared flow discovery: list .swipium/flows/*.yaml|*.yml. Used by the workflow plan (qa_resolve_target include:["plan"]) (names > candidate
2
+ // workflows) and qa_smoke (paths > run the pack). One source so the two never disagree.
3
3
  import { existsSync, readdirSync } from 'node:fs';
4
4
  import { join, basename } from 'node:path';
5
5
  export function listFlowFiles(root) {
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/flows/discover.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,wFAAwF;AAExF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAO3C,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/flows/discover.ts"],"names":[],"mappings":"AAAA,6IAA6I;AAC7I,wFAAwF;AAExF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAO3C,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,17 +1,21 @@
1
- // qa_flow_generate core (PHASE3-PLAN §4.1 / DESIGN §8). Two pure pieces:
1
+ // qa_generate target:"flow" core. Two pure pieces:
2
2
  // - recordableTap: at qa_act time, turn a resolved tap target into a replayable descriptor +
3
- // exportability tag (translating an @ref into its visible text/label where possible — the
3
+ // exportability tag (translating an @ref into its visible text/label where possible; the
4
4
  // key durability insight: a ref is run-time-only, but its label survives).
5
5
  // - generateFlow: serialize the recorded action IR into a durable flow YAML + a durability
6
6
  // grade and the brittle steps that need a testID/accessibilityLabel.
7
7
  import { createHash } from 'node:crypto';
8
8
  import { stringify } from 'yaml';
9
9
  import { waitForVisibleGuard } from './waitGuards.js';
10
+ import { secretSafeActions, secretVarName } from '../suite/secretGuard.js';
10
11
  function currentScreenSignature(session) {
11
12
  const sigs = session.lastSnapshot?.signatures;
12
13
  if (!sigs?.size)
13
14
  return undefined;
14
- return createHash('sha1').update([...sigs].sort().join('\n')).digest('hex').slice(0, 16);
15
+ return createHash('sha1')
16
+ .update([...sigs].sort().join('\n'))
17
+ .digest('hex')
18
+ .slice(0, 16);
15
19
  }
16
20
  function bucketBounds(bounds, point) {
17
21
  const b = bounds ?? (point ? [point.x, point.y, point.x, point.y] : undefined);
@@ -40,14 +44,34 @@ function provenance(session, opts) {
40
44
  * falls back to coordinates (brittle) when the element exposes no human-readable handle. */
41
45
  export function recordableTap(session, target, point) {
42
46
  if (target?.x != null)
43
- return { x: point.x, y: point.y, selectorKind: 'coords', exportability: 'coordinate', provenance: provenance(session, { selectorKind: 'coords', point }) };
47
+ return {
48
+ x: point.x,
49
+ y: point.y,
50
+ selectorKind: 'coords',
51
+ exportability: 'coordinate',
52
+ provenance: provenance(session, { selectorKind: 'coords', point }),
53
+ };
44
54
  if (target?.id) {
45
55
  const selectorKind = session.driver?.kind === 'wda' ? 'accessibility_id' : 'resource_id';
46
- return { selector: target.id, selectorKind, exportability: 'semantic', provenance: provenance(session, { selectorKind, selectorValue: target.id, point }) };
56
+ return {
57
+ selector: target.id,
58
+ selectorKind,
59
+ exportability: 'semantic',
60
+ provenance: provenance(session, { selectorKind, selectorValue: target.id, point }),
61
+ };
47
62
  }
48
- const node = point.ref ? session.lastSnapshot?.fullByRef.get(point.ref) : target?.ref ? session.lastSnapshot?.fullByRef.get(target.ref) : undefined;
63
+ const node = point.ref
64
+ ? session.lastSnapshot?.fullByRef.get(point.ref)
65
+ : target?.ref
66
+ ? session.lastSnapshot?.fullByRef.get(target.ref)
67
+ : undefined;
49
68
  if (session.driver?.kind === 'wda' && node?.id)
50
- return { selector: node.id, selectorKind: 'accessibility_id', exportability: 'semantic', provenance: provenance(session, { selectorKind: 'accessibility_id', selectorValue: node.id, point }) };
69
+ return {
70
+ selector: node.id,
71
+ selectorKind: 'accessibility_id',
72
+ exportability: 'semantic',
73
+ provenance: provenance(session, { selectorKind: 'accessibility_id', selectorValue: node.id, point }),
74
+ };
51
75
  let label;
52
76
  if (target?.text)
53
77
  label = target.text;
@@ -57,9 +81,21 @@ export function recordableTap(session, target, point) {
57
81
  const warning = session.driver?.kind === 'wda'
58
82
  ? `iOS label/name selector "${label}" is usable, but add an accessibilityIdentifier for CI-stable replay`
59
83
  : undefined;
60
- return { selector: label, selectorKind: 'text', exportability: 'semantic', warning, provenance: provenance(session, { selectorKind: 'text', selectorValue: label, point }) };
84
+ return {
85
+ selector: label,
86
+ selectorKind: 'text',
87
+ exportability: 'semantic',
88
+ warning,
89
+ provenance: provenance(session, { selectorKind: 'text', selectorValue: label, point }),
90
+ };
61
91
  }
62
- return { x: point.x, y: point.y, selectorKind: 'coords', exportability: 'coordinate', provenance: provenance(session, { selectorKind: 'coords', point }) };
92
+ return {
93
+ x: point.x,
94
+ y: point.y,
95
+ selectorKind: 'coords',
96
+ exportability: 'coordinate',
97
+ provenance: provenance(session, { selectorKind: 'coords', point }),
98
+ };
63
99
  }
64
100
  export function recordableNativeSelector(session, selectorKind, selectorValue) {
65
101
  return { provenance: provenance(session, { selectorKind, selectorValue }) };
@@ -92,6 +128,10 @@ function pushSelectorAction(steps, provenanceEntries, a, actionIndex, selector,
92
128
  addProvenance(provenanceEntries, a, actionIndex, actionStepIndex, generatedKind, selector);
93
129
  }
94
130
  export function generateFlow(actions, opts) {
131
+ // Defense in depth: a registered secret recorded as a literal (non-secure field) becomes a ${VAR}
132
+ // (same naming as the POM/suite generator: secretVarName), and typed text equal to a stored
133
+ // session input becomes that input's ${SWIPIUM_TEST_*} placeholder.
134
+ actions = secretSafeActions(actions, opts.secrets, opts.inputs).actions;
95
135
  const steps = ['prepareTarget'];
96
136
  const brittleSteps = [];
97
137
  const variables = [];
@@ -116,7 +156,10 @@ export function generateFlow(actions, opts) {
116
156
  addProvenance(provenanceEntries, a, actionIndex, steps.length + 1, 'tapAt');
117
157
  steps.push({ tapAt: [a.x ?? 0, a.y ?? 0] });
118
158
  coordinate++;
119
- brittleSteps.push({ index: i, reason: `tapped by coordinates (${a.x},${a.y})${a.screen ? ` on ${a.screen}` : ''} — add a testID/accessibilityLabel for a durable selector` });
159
+ brittleSteps.push({
160
+ index: i,
161
+ reason: `tapped by coordinates (${a.x},${a.y})${a.screen ? ` on ${a.screen}` : ''}. Add a testID/accessibilityLabel for a durable selector`,
162
+ });
120
163
  }
121
164
  }
122
165
  break;
@@ -130,19 +173,26 @@ export function generateFlow(actions, opts) {
130
173
  addProvenance(provenanceEntries, a, actionIndex, steps.length + 1, 'tapAt');
131
174
  steps.push({ tapAt: [a.x ?? 0, a.y ?? 0] }, { inputText: '' });
132
175
  coordinate++;
133
- brittleSteps.push({ index: i, reason: `cleared by coordinates (${a.x},${a.y})${a.screen ? ` on ${a.screen}` : ''} — add a testID/accessibilityLabel for a durable selector` });
176
+ brittleSteps.push({
177
+ index: i,
178
+ reason: `cleared by coordinates (${a.x},${a.y})${a.screen ? ` on ${a.screen}` : ''}. Add a testID/accessibilityLabel for a durable selector`,
179
+ });
134
180
  }
135
181
  break;
136
182
  }
137
183
  case 'type':
138
184
  {
139
185
  const selector = actionSelector(a);
140
- const text = a.secret ? `\${SECRET_${++secretCount}}` : a.text ?? '';
141
- if (a.secret) {
142
- variables.push(`SECRET_${secretCount}`);
186
+ const varName = a.secret ? secretVarName(a, ++secretCount) : undefined;
187
+ const text = varName ? `\${${varName}}` : (a.text ?? '');
188
+ if (varName) {
189
+ variables.push(varName);
143
190
  needsHumanData++;
144
191
  }
145
192
  else {
193
+ // A non-secret templated value (e.g. ${SWIPIUM_TEST_EMAIL}) is a variable too.
194
+ for (const m of text.matchAll(/\$\{([^}]+)\}/g))
195
+ variables.push(m[1]);
146
196
  semantic++;
147
197
  }
148
198
  if (selector)
@@ -183,6 +233,7 @@ export function generateFlow(actions, opts) {
183
233
  break;
184
234
  }
185
235
  });
236
+ const uniqueVars = [...new Set(variables)];
186
237
  const total = semantic + coordinate + needsHumanData;
187
238
  const semanticPct = total ? Math.round((semantic / total) * 100) : 100;
188
239
  const grade = semanticPct >= 90 ? 'A' : semanticPct >= 70 ? 'B' : 'C';
@@ -195,9 +246,9 @@ export function generateFlow(actions, opts) {
195
246
  flowObj.provenance = provenanceEntries;
196
247
  flowObj.steps = steps;
197
248
  const header = [
198
- `# Generated by Swipium qa_flow_generate — review before committing.`,
249
+ `# Generated by Swipium qa_generate target:"flow". Review before committing.`,
199
250
  `# durability: ${grade} (${semanticPct}% semantic; ${coordinate} coordinate, ${needsHumanData} needs-human-data)`,
200
- ...(variables.length ? [`# variables — provide via qa_flow_run { variables }: ${variables.join(', ')}`] : []),
251
+ ...(uniqueVars.length ? [`# variables: provide via qa_flow_run { variables }: ${uniqueVars.join(', ')}`] : []),
201
252
  ...brittleSteps.map((b) => `# WARNING step ${b.index}: ${b.reason}`),
202
253
  ].join('\n');
203
254
  return {
@@ -205,7 +256,7 @@ export function generateFlow(actions, opts) {
205
256
  stepCount: steps.length,
206
257
  durability: { grade, semanticPct, semantic, coordinate, needsHumanData },
207
258
  brittleSteps,
208
- variables,
259
+ variables: uniqueVars,
209
260
  };
210
261
  }
211
262
  //# sourceMappingURL=generate.js.map