swipium 1.5.0 → 2.0.1

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 (498) hide show
  1. package/CHANGELOG.md +183 -0
  2. package/README.md +173 -280
  3. package/THREAT_MODEL.md +223 -47
  4. package/dist/appMap/automationLink.js +30 -27
  5. package/dist/appMap/automationLink.js.map +1 -1
  6. package/dist/appMap/build.js +47 -21
  7. package/dist/appMap/build.js.map +1 -1
  8. package/dist/appMap/codeIndex.js +2 -2
  9. package/dist/appMap/codeIndex.js.map +1 -1
  10. package/dist/appMap/featureIndex.js +3 -3
  11. package/dist/appMap/featureIndex.js.map +1 -1
  12. package/dist/appMap/featureModel.js +2 -2
  13. package/dist/appMap/featureModel.js.map +1 -1
  14. package/dist/appMap/firstRunApply.js +2 -2
  15. package/dist/appMap/firstRunApply.js.map +1 -1
  16. package/dist/appMap/issues.js +10 -10
  17. package/dist/appMap/issues.js.map +1 -1
  18. package/dist/appMap/migrations.js +5 -5
  19. package/dist/appMap/migrations.js.map +1 -1
  20. package/dist/appMap/prelaunch.js +2 -2
  21. package/dist/appMap/prelaunch.js.map +1 -1
  22. package/dist/appMap/projectRegistry.js +77 -11
  23. package/dist/appMap/projectRegistry.js.map +1 -1
  24. package/dist/appMap/provenance.js +2 -2
  25. package/dist/appMap/provenance.js.map +1 -1
  26. package/dist/appMap/query.js +2 -2
  27. package/dist/appMap/query.js.map +1 -1
  28. package/dist/appMap/runtimeMerge.js +3 -3
  29. package/dist/appMap/runtimeMerge.js.map +1 -1
  30. package/dist/appMap/schema.js +1 -1
  31. package/dist/appMap/schema.js.map +1 -1
  32. package/dist/appMap/screenMatch.js +1 -1
  33. package/dist/appMap/screenMatch.js.map +1 -1
  34. package/dist/appMap/staticScan.js +17 -17
  35. package/dist/appMap/staticScan.js.map +1 -1
  36. package/dist/appMap/store.js +55 -7
  37. package/dist/appMap/store.js.map +1 -1
  38. package/dist/appMap/tsAstScan.js +3 -3
  39. package/dist/appMap/tsAstScan.js.map +1 -1
  40. package/dist/artifacts/bundletool.js +5 -5
  41. package/dist/artifacts/bundletool.js.map +1 -1
  42. package/dist/artifacts/resolve.js +10 -10
  43. package/dist/artifacts/resolve.js.map +1 -1
  44. package/dist/automation/capabilities.js +3 -3
  45. package/dist/automation/capabilities.js.map +1 -1
  46. package/dist/automation/gestures.js +1 -1
  47. package/dist/automation/gestures.js.map +1 -1
  48. package/dist/automation/plan.js +7 -7
  49. package/dist/automation/plan.js.map +1 -1
  50. package/dist/automation/report.js +3 -3
  51. package/dist/automation/report.js.map +1 -1
  52. package/dist/automation/selectors.js +14 -25
  53. package/dist/automation/selectors.js.map +1 -1
  54. package/dist/automation/types.js +1 -1
  55. package/dist/automation/types.js.map +1 -1
  56. package/dist/automation/waits.js +5 -5
  57. package/dist/automation/waits.js.map +1 -1
  58. package/dist/automation/webview.js +2 -2
  59. package/dist/automation/webview.js.map +1 -1
  60. package/dist/automationGen/appiumModel.js +13 -7
  61. package/dist/automationGen/appiumModel.js.map +1 -1
  62. package/dist/automationGen/ciEmitter.js +5 -5
  63. package/dist/automationGen/ciEmitter.js.map +1 -1
  64. package/dist/automationGen/identifiers.js +224 -0
  65. package/dist/automationGen/identifiers.js.map +1 -0
  66. package/dist/automationGen/jsEmitter.js +265 -106
  67. package/dist/automationGen/jsEmitter.js.map +1 -1
  68. package/dist/automationGen/packagePatch.js +2 -2
  69. package/dist/automationGen/packagePatch.js.map +1 -1
  70. package/dist/automationGen/platformResolve.js +36 -0
  71. package/dist/automationGen/platformResolve.js.map +1 -0
  72. package/dist/automationGen/projectProfile.js +71 -26
  73. package/dist/automationGen/projectProfile.js.map +1 -1
  74. package/dist/automationGen/pythonEmitter.js +276 -105
  75. package/dist/automationGen/pythonEmitter.js.map +1 -1
  76. package/dist/automationGen/readmeEmitter.js +7 -6
  77. package/dist/automationGen/readmeEmitter.js.map +1 -1
  78. package/dist/{tools/automationGenerate.js → automationGen/run.js} +72 -113
  79. package/dist/automationGen/run.js.map +1 -0
  80. package/dist/automationGen/suitePlan.js +6 -4
  81. package/dist/automationGen/suitePlan.js.map +1 -1
  82. package/dist/automationGen/validation.js +20 -8
  83. package/dist/automationGen/validation.js.map +1 -1
  84. package/dist/build/parseBuildLog.js +2 -2
  85. package/dist/build/parseBuildLog.js.map +1 -1
  86. package/dist/build/plan.js +7 -7
  87. package/dist/build/plan.js.map +1 -1
  88. package/dist/ci/preflight.js +13 -4
  89. package/dist/ci/preflight.js.map +1 -1
  90. package/dist/cli/gc.js +74 -0
  91. package/dist/cli/gc.js.map +1 -0
  92. package/dist/cli/init.js +217 -26
  93. package/dist/cli/init.js.map +1 -1
  94. package/dist/cli/main.js +50 -0
  95. package/dist/cli/main.js.map +1 -0
  96. package/dist/cli/report.js +218 -0
  97. package/dist/cli/report.js.map +1 -0
  98. package/dist/cli/scan.js +35 -14
  99. package/dist/cli/scan.js.map +1 -1
  100. package/dist/cli/suite.js +6 -6
  101. package/dist/cli/suite.js.map +1 -1
  102. package/dist/cli/verify.js +7 -7
  103. package/dist/cli/verify.js.map +1 -1
  104. package/dist/consent/consent.js +162 -5
  105. package/dist/consent/consent.js.map +1 -1
  106. package/dist/context/detect.js +45 -14
  107. package/dist/context/detect.js.map +1 -1
  108. package/dist/context/findApps.js +6 -6
  109. package/dist/context/findApps.js.map +1 -1
  110. package/dist/context/projectRoot.js +174 -19
  111. package/dist/context/projectRoot.js.map +1 -1
  112. package/dist/context/scan.js +1 -1
  113. package/dist/context/scan.js.map +1 -1
  114. package/dist/core/capabilityGroups.js +90 -0
  115. package/dist/core/capabilityGroups.js.map +1 -0
  116. package/dist/core/target.js +3 -3
  117. package/dist/core/target.js.map +1 -1
  118. package/dist/core/targetPlan.js +65 -62
  119. package/dist/core/targetPlan.js.map +1 -1
  120. package/dist/drivers/DirectDriver.js +300 -36
  121. package/dist/drivers/DirectDriver.js.map +1 -1
  122. package/dist/drivers/SimctlDriver.js +120 -7
  123. package/dist/drivers/SimctlDriver.js.map +1 -1
  124. package/dist/drivers/WdaDriver.js +350 -50
  125. package/dist/drivers/WdaDriver.js.map +1 -1
  126. package/dist/explore/candidates.js +2 -2
  127. package/dist/explore/candidates.js.map +1 -1
  128. package/dist/explore/graph.js +5 -5
  129. package/dist/explore/graph.js.map +1 -1
  130. package/dist/explore/policy.js +5 -5
  131. package/dist/explore/policy.js.map +1 -1
  132. package/dist/explore/runner.js +301 -284
  133. package/dist/explore/runner.js.map +1 -1
  134. package/dist/explore/signatures.js +1 -1
  135. package/dist/featureTesting/executionBootstrap.js +29 -30
  136. package/dist/featureTesting/executionBootstrap.js.map +1 -1
  137. package/dist/featureTesting/featureMap.js +2 -2
  138. package/dist/featureTesting/featureMap.js.map +1 -1
  139. package/dist/featureTesting/featureScope.js +12 -12
  140. package/dist/featureTesting/featureScope.js.map +1 -1
  141. package/dist/featureTesting/mapFeatureScope.js +7 -7
  142. package/dist/featureTesting/mapFeatureScope.js.map +1 -1
  143. package/dist/featureTesting/objectiveModel.js +10 -10
  144. package/dist/featureTesting/objectiveModel.js.map +1 -1
  145. package/dist/featureTesting/resultMerge.js +6 -6
  146. package/dist/featureTesting/resultMerge.js.map +1 -1
  147. package/dist/featureTesting/sources.js +4 -4
  148. package/dist/featureTesting/sources.js.map +1 -1
  149. package/dist/featureTesting/suiteBridge.js +1 -1
  150. package/dist/featureTesting/suiteBridge.js.map +1 -1
  151. package/dist/featureTesting/synonyms.js +1 -1
  152. package/dist/featureTesting/synonyms.js.map +1 -1
  153. package/dist/featureTesting/testCaseFactory.js +11 -11
  154. package/dist/featureTesting/testCaseFactory.js.map +1 -1
  155. package/dist/featureTesting/testPlan.js +3 -3
  156. package/dist/featureTesting/testPlan.js.map +1 -1
  157. package/dist/firstRun/authStateMachine.js +1 -1
  158. package/dist/firstRun/authStateMachine.js.map +1 -1
  159. package/dist/firstRun/classifyScreen.js +5 -5
  160. package/dist/firstRun/classifyScreen.js.map +1 -1
  161. package/dist/firstRun/firstRunPlanner.js +11 -11
  162. package/dist/firstRun/firstRunPlanner.js.map +1 -1
  163. package/dist/firstRun/firstRunRunner.js +8 -8
  164. package/dist/firstRun/firstRunRunner.js.map +1 -1
  165. package/dist/firstRun/generatedDataPolicy.js +9 -9
  166. package/dist/firstRun/generatedDataPolicy.js.map +1 -1
  167. package/dist/firstRun/inputPlanner.js +5 -5
  168. package/dist/firstRun/inputPlanner.js.map +1 -1
  169. package/dist/firstRun/onboardingStateMachine.js +1 -1
  170. package/dist/firstRun/onboardingStateMachine.js.map +1 -1
  171. package/dist/firstRun/paywallPolicy.js +3 -3
  172. package/dist/firstRun/paywallPolicy.js.map +1 -1
  173. package/dist/firstRun/types.js +1 -1
  174. package/dist/firstRun/types.js.map +1 -1
  175. package/dist/fixtures/catalog.js +33 -3
  176. package/dist/fixtures/catalog.js.map +1 -1
  177. package/dist/fixtures/load.js +50 -0
  178. package/dist/fixtures/load.js.map +1 -0
  179. package/dist/flows/discover.js +2 -2
  180. package/dist/flows/discover.js.map +1 -1
  181. package/dist/flows/generate.js +20 -10
  182. package/dist/flows/generate.js.map +1 -1
  183. package/dist/flows/pack.js +3 -3
  184. package/dist/flows/pack.js.map +1 -1
  185. package/dist/flows/paths.js +57 -0
  186. package/dist/flows/paths.js.map +1 -0
  187. package/dist/flows/repair.js +111 -23
  188. package/dist/flows/repair.js.map +1 -1
  189. package/dist/flows/run.js +153 -57
  190. package/dist/flows/run.js.map +1 -1
  191. package/dist/flows/schema.js +50 -5
  192. package/dist/flows/schema.js.map +1 -1
  193. package/dist/flows/seedExec.js +4 -4
  194. package/dist/flows/seedExec.js.map +1 -1
  195. package/dist/flows/templates.js +5 -5
  196. package/dist/index.js +50 -8
  197. package/dist/index.js.map +1 -1
  198. package/dist/issues/classify.js +16 -16
  199. package/dist/issues/classify.js.map +1 -1
  200. package/dist/issues/fingerprint.js +24 -4
  201. package/dist/issues/fingerprint.js.map +1 -1
  202. package/dist/issues/index.js +94 -31
  203. package/dist/issues/index.js.map +1 -1
  204. package/dist/issues/metrics.js +4 -4
  205. package/dist/issues/metrics.js.map +1 -1
  206. package/dist/issues/recurrence.js +35 -8
  207. package/dist/issues/recurrence.js.map +1 -1
  208. package/dist/issues/report.js +4 -4
  209. package/dist/issues/report.js.map +1 -1
  210. package/dist/issues/reportBridge.js +4 -4
  211. package/dist/issues/reportBridge.js.map +1 -1
  212. package/dist/issues/schema.js +2 -2
  213. package/dist/issues/schema.js.map +1 -1
  214. package/dist/issues/sourceRevision.js +2 -2
  215. package/dist/issues/sourceRevision.js.map +1 -1
  216. package/dist/issues/store.js +110 -32
  217. package/dist/issues/store.js.map +1 -1
  218. package/dist/lib/abortScope.js +48 -0
  219. package/dist/lib/abortScope.js.map +1 -0
  220. package/dist/lib/android.js +75 -7
  221. package/dist/lib/android.js.map +1 -1
  222. package/dist/lib/coordSpace.js +1 -1
  223. package/dist/lib/coordSpace.js.map +1 -1
  224. package/dist/lib/device.js +32 -7
  225. package/dist/lib/device.js.map +1 -1
  226. package/dist/lib/gestures.js +141 -0
  227. package/dist/lib/gestures.js.map +1 -0
  228. package/dist/lib/gitignore.js +4 -3
  229. package/dist/lib/gitignore.js.map +1 -1
  230. package/dist/lib/image.js +1 -1
  231. package/dist/lib/image.js.map +1 -1
  232. package/dist/lib/lockfile.js +370 -31
  233. package/dist/lib/lockfile.js.map +1 -1
  234. package/dist/lib/needsInput.js +3 -3
  235. package/dist/lib/needsInput.js.map +1 -1
  236. package/dist/lib/png.js +2 -2
  237. package/dist/lib/png.js.map +1 -1
  238. package/dist/lib/redact.js +170 -9
  239. package/dist/lib/redact.js.map +1 -1
  240. package/dist/lib/result.js +79 -10
  241. package/dist/lib/result.js.map +1 -1
  242. package/dist/lib/schemaHash.js +3 -3
  243. package/dist/lib/schemaHash.js.map +1 -1
  244. package/dist/lib/sensitive.js +3 -2
  245. package/dist/lib/sensitive.js.map +1 -1
  246. package/dist/lib/simctl.js +3 -3
  247. package/dist/lib/simctl.js.map +1 -1
  248. package/dist/lib/spawn.js +52 -10
  249. package/dist/lib/spawn.js.map +1 -1
  250. package/dist/lib/toolAnnotations.js +114 -0
  251. package/dist/lib/toolAnnotations.js.map +1 -0
  252. package/dist/lib/wda.js +294 -15
  253. package/dist/lib/wda.js.map +1 -1
  254. package/dist/mobileAudit/checks.js +12 -12
  255. package/dist/mobileAudit/checks.js.map +1 -1
  256. package/dist/mobileAudit/evidence.js +4 -4
  257. package/dist/mobileAudit/evidence.js.map +1 -1
  258. package/dist/mobileAudit/profiles.js +1 -1
  259. package/dist/mobileAudit/profiles.js.map +1 -1
  260. package/dist/mobileAudit/results.js +3 -3
  261. package/dist/mobileAudit/results.js.map +1 -1
  262. package/dist/mobileAudit/runner.js +72 -18
  263. package/dist/mobileAudit/runner.js.map +1 -1
  264. package/dist/oracle/auth.js +1 -1
  265. package/dist/oracle/auth.js.map +1 -1
  266. package/dist/oracle/failures.js +219 -36
  267. package/dist/oracle/failures.js.map +1 -1
  268. package/dist/oracle/health.js +63 -17
  269. package/dist/oracle/health.js.map +1 -1
  270. package/dist/oracle/locator.js +13 -13
  271. package/dist/oracle/locator.js.map +1 -1
  272. package/dist/oracle/record.js +3 -3
  273. package/dist/oracle/record.js.map +1 -1
  274. package/dist/orchestration/envelope.js +2 -2
  275. package/dist/orchestration/envelope.js.map +1 -1
  276. package/dist/orchestration/goal.js +4 -4
  277. package/dist/orchestration/goal.js.map +1 -1
  278. package/dist/orchestration/testThis/execute.js +62 -21
  279. package/dist/orchestration/testThis/execute.js.map +1 -1
  280. package/dist/orchestration/testThis/pipeline.js +119 -30
  281. package/dist/orchestration/testThis/pipeline.js.map +1 -1
  282. package/dist/orchestration/testThis/plan.js +162 -73
  283. package/dist/orchestration/testThis/plan.js.map +1 -1
  284. package/dist/orchestration/testThis/sessionIntent.js +72 -0
  285. package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
  286. package/dist/orchestration/testThis/terminal.js +34 -16
  287. package/dist/orchestration/testThis/terminal.js.map +1 -1
  288. package/dist/orchestration/testThis/types.js +1 -1
  289. package/dist/orchestration/testThis/types.js.map +1 -1
  290. package/dist/plan/plan.js +9 -9
  291. package/dist/plan/plan.js.map +1 -1
  292. package/dist/prompts/index.js +22 -22
  293. package/dist/prompts/index.js.map +1 -1
  294. package/dist/report/export.js +392 -37
  295. package/dist/report/export.js.map +1 -1
  296. package/dist/report/findingsDedupe.js +41 -0
  297. package/dist/report/findingsDedupe.js.map +1 -0
  298. package/dist/report/policy.js +7 -4
  299. package/dist/report/policy.js.map +1 -1
  300. package/dist/report/qaLevel.js +8 -8
  301. package/dist/report/qaLevel.js.map +1 -1
  302. package/dist/report/sarifSources.js +160 -0
  303. package/dist/report/sarifSources.js.map +1 -0
  304. package/dist/report/summary.js +2 -2
  305. package/dist/report/summary.js.map +1 -1
  306. package/dist/report/testCatalog.js +4 -4
  307. package/dist/report/testCatalog.js.map +1 -1
  308. package/dist/report/toolHealth.js +124 -0
  309. package/dist/report/toolHealth.js.map +1 -0
  310. package/dist/server.js +472 -45
  311. package/dist/server.js.map +1 -1
  312. package/dist/services/automationGenerate.js +8 -2
  313. package/dist/services/automationGenerate.js.map +1 -1
  314. package/dist/services/build.js +2 -2
  315. package/dist/services/build.js.map +1 -1
  316. package/dist/{tools → services}/flowGenerate.js +29 -13
  317. package/dist/services/flowGenerate.js.map +1 -0
  318. package/dist/services/preflight.js +4 -4
  319. package/dist/services/preflight.js.map +1 -1
  320. package/dist/services/prepareAndroid.js +46 -8
  321. package/dist/services/prepareAndroid.js.map +1 -1
  322. package/dist/services/prepareIos.js +24 -9
  323. package/dist/services/prepareIos.js.map +1 -1
  324. package/dist/services/report.js +100 -45
  325. package/dist/services/report.js.map +1 -1
  326. package/dist/services/smoke.js +32 -16
  327. package/dist/services/smoke.js.map +1 -1
  328. package/dist/services/suiteGenerate.js +28 -3
  329. package/dist/services/suiteGenerate.js.map +1 -1
  330. package/dist/services/testSuiteKnowledge.js +40 -27
  331. package/dist/services/testSuiteKnowledge.js.map +1 -1
  332. package/dist/session/attach.js +270 -6
  333. package/dist/session/attach.js.map +1 -1
  334. package/dist/session/processRegistry.js +317 -48
  335. package/dist/session/processRegistry.js.map +1 -1
  336. package/dist/session/progress.js +1 -1
  337. package/dist/session/retention.js +201 -0
  338. package/dist/session/retention.js.map +1 -0
  339. package/dist/session/store.js +275 -48
  340. package/dist/session/store.js.map +1 -1
  341. package/dist/snapshot/overlays.js +53 -8
  342. package/dist/snapshot/overlays.js.map +1 -1
  343. package/dist/snapshot/parse.js +28 -4
  344. package/dist/snapshot/parse.js.map +1 -1
  345. package/dist/snapshot/present.js +11 -5
  346. package/dist/snapshot/present.js.map +1 -1
  347. package/dist/snapshot/settle.js +39 -9
  348. package/dist/snapshot/settle.js.map +1 -1
  349. package/dist/state/consent.js +99 -0
  350. package/dist/state/consent.js.map +1 -0
  351. package/dist/state/profile.js +46 -2
  352. package/dist/state/profile.js.map +1 -1
  353. package/dist/suite/compile.js +9 -5
  354. package/dist/suite/compile.js.map +1 -1
  355. package/dist/suite/lint.js +4 -4
  356. package/dist/suite/lint.js.map +1 -1
  357. package/dist/suite/pom.js +50 -41
  358. package/dist/suite/pom.js.map +1 -1
  359. package/dist/suite/secretGuard.js +266 -0
  360. package/dist/suite/secretGuard.js.map +1 -0
  361. package/dist/suite/testcase.js +9 -7
  362. package/dist/suite/testcase.js.map +1 -1
  363. package/dist/testSuite/exporter.js +4 -4
  364. package/dist/testSuite/exporter.js.map +1 -1
  365. package/dist/testSuite/generator.js +13 -9
  366. package/dist/testSuite/generator.js.map +1 -1
  367. package/dist/testSuite/history.js +1 -1
  368. package/dist/testSuite/history.js.map +1 -1
  369. package/dist/testSuite/issueLinks.js +3 -3
  370. package/dist/testSuite/issueLinks.js.map +1 -1
  371. package/dist/testSuite/lint.js +4 -4
  372. package/dist/testSuite/lint.js.map +1 -1
  373. package/dist/testSuite/merge.js +5 -5
  374. package/dist/testSuite/merge.js.map +1 -1
  375. package/dist/testSuite/schema.js +5 -5
  376. package/dist/testSuite/schema.js.map +1 -1
  377. package/dist/testSuite/store.js +3 -3
  378. package/dist/testSuite/store.js.map +1 -1
  379. package/dist/testSuite/traceability.js +2 -2
  380. package/dist/testSuite/traceability.js.map +1 -1
  381. package/dist/tools/act.js +794 -164
  382. package/dist/tools/act.js.map +1 -1
  383. package/dist/tools/agent.js +451 -128
  384. package/dist/tools/agent.js.map +1 -1
  385. package/dist/tools/appControl.js +69 -19
  386. package/dist/tools/appControl.js.map +1 -1
  387. package/dist/tools/appMap.js +188 -130
  388. package/dist/tools/appMap.js.map +1 -1
  389. package/dist/tools/build.js +32 -42
  390. package/dist/tools/build.js.map +1 -1
  391. package/dist/tools/bundletool.js +21 -31
  392. package/dist/tools/bundletool.js.map +1 -1
  393. package/dist/tools/clearOverlay.js +55 -12
  394. package/dist/tools/clearOverlay.js.map +1 -1
  395. package/dist/tools/device.js +76 -24
  396. package/dist/tools/device.js.map +1 -1
  397. package/dist/tools/doctor.js +68 -28
  398. package/dist/tools/doctor.js.map +1 -1
  399. package/dist/tools/explore.js +41 -47
  400. package/dist/tools/explore.js.map +1 -1
  401. package/dist/tools/featureTesting.js +31 -48
  402. package/dist/tools/featureTesting.js.map +1 -1
  403. package/dist/tools/firstRun.js +34 -41
  404. package/dist/tools/firstRun.js.map +1 -1
  405. package/dist/tools/flow.js +183 -103
  406. package/dist/tools/flow.js.map +1 -1
  407. package/dist/tools/flowRepair.js +25 -13
  408. package/dist/tools/flowRepair.js.map +1 -1
  409. package/dist/tools/generate.js +52 -89
  410. package/dist/tools/generate.js.map +1 -1
  411. package/dist/tools/getArtifact.js +16 -5
  412. package/dist/tools/getArtifact.js.map +1 -1
  413. package/dist/tools/health.js +15 -12
  414. package/dist/tools/health.js.map +1 -1
  415. package/dist/tools/ios.js +45 -223
  416. package/dist/tools/ios.js.map +1 -1
  417. package/dist/tools/issues.js +251 -35
  418. package/dist/tools/issues.js.map +1 -1
  419. package/dist/tools/jobs.js +41 -16
  420. package/dist/tools/jobs.js.map +1 -1
  421. package/dist/tools/metro.js +36 -35
  422. package/dist/tools/metro.js.map +1 -1
  423. package/dist/tools/mobileAudit.js +50 -45
  424. package/dist/tools/mobileAudit.js.map +1 -1
  425. package/dist/tools/network.js +31 -14
  426. package/dist/tools/network.js.map +1 -1
  427. package/dist/tools/note.js +26 -26
  428. package/dist/tools/note.js.map +1 -1
  429. package/dist/tools/prepareIosTarget.js +10 -16
  430. package/dist/tools/prepareIosTarget.js.map +1 -1
  431. package/dist/tools/prepareTarget.js +117 -50
  432. package/dist/tools/prepareTarget.js.map +1 -1
  433. package/dist/tools/report.js +11 -22
  434. package/dist/tools/report.js.map +1 -1
  435. package/dist/tools/resolveArtifact.js +11 -15
  436. package/dist/tools/resolveArtifact.js.map +1 -1
  437. package/dist/tools/resolveTarget.js +78 -24
  438. package/dist/tools/resolveTarget.js.map +1 -1
  439. package/dist/tools/screenRecord.js +23 -21
  440. package/dist/tools/screenRecord.js.map +1 -1
  441. package/dist/tools/screenshot.js +23 -16
  442. package/dist/tools/screenshot.js.map +1 -1
  443. package/dist/tools/smoke.js +20 -16
  444. package/dist/tools/smoke.js.map +1 -1
  445. package/dist/tools/snapshot.js +155 -118
  446. package/dist/tools/snapshot.js.map +1 -1
  447. package/dist/tools/startSession.js +104 -116
  448. package/dist/tools/startSession.js.map +1 -1
  449. package/dist/tools/suite.js +72 -43
  450. package/dist/tools/suite.js.map +1 -1
  451. package/dist/tools/testSuite.js +30 -20
  452. package/dist/tools/testSuite.js.map +1 -1
  453. package/dist/tools/testThis.js +24 -28
  454. package/dist/tools/testThis.js.map +1 -1
  455. package/dist/tools/visual.js +686 -210
  456. package/dist/tools/visual.js.map +1 -1
  457. package/dist/tools/wait.js +9 -38
  458. package/dist/tools/wait.js.map +1 -1
  459. package/dist/tools/wda.js +187 -57
  460. package/dist/tools/wda.js.map +1 -1
  461. package/dist/version.js +31 -22
  462. package/dist/version.js.map +1 -1
  463. package/dist/visual/ocr.js +53 -6
  464. package/dist/visual/ocr.js.map +1 -1
  465. package/dist/visual/provider.js +80 -12
  466. package/dist/visual/provider.js.map +1 -1
  467. package/docs/README.md +24 -10
  468. package/docs/ci-reports.md +328 -0
  469. package/docs/concepts.md +227 -0
  470. package/docs/flows.md +153 -0
  471. package/docs/mcp-server.md +194 -128
  472. package/docs/physical-devices.md +84 -0
  473. package/docs/tools.md +812 -152
  474. package/package.json +3 -2
  475. package/dist/tools/assertVisual.js +0 -84
  476. package/dist/tools/assertVisual.js.map +0 -1
  477. package/dist/tools/automationGenerate.js.map +0 -1
  478. package/dist/tools/capabilities.js +0 -179
  479. package/dist/tools/capabilities.js.map +0 -1
  480. package/dist/tools/detectContext.js +0 -41
  481. package/dist/tools/detectContext.js.map +0 -1
  482. package/dist/tools/flowGenerate.js.map +0 -1
  483. package/dist/tools/history.js +0 -86
  484. package/dist/tools/history.js.map +0 -1
  485. package/dist/tools/locator.js +0 -85
  486. package/dist/tools/locator.js.map +0 -1
  487. package/dist/tools/permissions.js +0 -174
  488. package/dist/tools/permissions.js.map +0 -1
  489. package/dist/tools/plan.js +0 -52
  490. package/dist/tools/plan.js.map +0 -1
  491. package/dist/tools/screenInfo.js +0 -76
  492. package/dist/tools/screenInfo.js.map +0 -1
  493. package/dist/tools/seed.js +0 -133
  494. package/dist/tools/seed.js.map +0 -1
  495. package/dist/tools/state.js +0 -217
  496. package/dist/tools/state.js.map +0 -1
  497. package/dist/tools/visualText.js +0 -106
  498. package/dist/tools/visualText.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swipium",
3
- "version": "1.5.0",
3
+ "version": "2.0.1",
4
4
  "private": false,
5
5
  "description": "Swipium MCP server for simulator-based mobile QA workflows, evidence capture, app maps, and generated test suites.",
6
6
  "keywords": [
@@ -28,6 +28,7 @@
28
28
  "files": [
29
29
  "dist",
30
30
  "docs",
31
+ "!docs/v1-mvp-plan.md",
31
32
  "THREAT_MODEL.md",
32
33
  "CHANGELOG.md"
33
34
  ],
@@ -39,7 +40,7 @@
39
40
  "url": "https://github.com/GeroPalombo/swipium"
40
41
  },
41
42
  "bugs": {
42
- "url": "https://github.com/geropalombo/swipium/issues"
43
+ "url": "https://github.com/GeroPalombo/swipium/issues"
43
44
  },
44
45
  "homepage": "https://swipium.com",
45
46
  "publishConfig": {
@@ -1,84 +0,0 @@
1
- // qa_assert_visual — record a VISUAL assertion in one call: capture a screenshot as evidence
2
- // and file a qa_note(verifiedVisually) pass/fail. For screens with no usable structured tree
3
- // (maps, canvases, animations) where the agent confirms a rendered result by eye. Replaces the
4
- // two-step qa_screenshot + qa_note(verifiedVisually) idiom with a single intent-revealing tool.
5
- import { z } from 'zod';
6
- import { qaOk, qaError } from '../lib/result.js';
7
- import { captureCoordinateSpace } from '../lib/coordSpace.js';
8
- import { sensitiveRefusal } from '../lib/sensitive.js';
9
- import { getDriver } from '../session/attach.js';
10
- export function registerAssertVisual(server, sessions) {
11
- server.registerTool('qa_assert_visual', {
12
- title: 'Assert a visual result',
13
- description: 'Record a visual assertion for a screen that has no usable structured tree (map/canvas/animation): captures a screenshot as evidence and files a test outcome with verifiedVisually=true. Use `pass:false` if the expected thing is NOT visible. Equivalent to qa_screenshot + qa_note(verifiedVisually) but in one call. Returns the screenshot URI and the recorded note.',
14
- inputSchema: {
15
- sessionId: z.string(),
16
- assertion: z.string().describe('what you visually confirmed, e.g. "Live Map rendered with the route polyline"'),
17
- pass: z.boolean().optional().describe('default true; set false if the expected result is NOT visible'),
18
- reason: z.string().optional().describe('extra detail (what you saw / why it failed)'),
19
- },
20
- }, async ({ sessionId, assertion, pass = true, reason }) => {
21
- const session = sessions.get(sessionId);
22
- const { driver } = session ? await getDriver(session) : { driver: undefined };
23
- if (!session || !driver) {
24
- return qaError({
25
- what: 'No device attached to this session',
26
- changedState: false,
27
- retrySafe: true,
28
- nextSteps: ['Call qa_prepare_target first.'],
29
- });
30
- }
31
- if (session.sensitive)
32
- return sensitiveRefusal('Visual assertion (screenshot)');
33
- let uri;
34
- let coordinateSpace;
35
- try {
36
- const png = await driver.screenshot();
37
- uri = sessions.saveArtifact(session, 'screenshot', `visual-${Date.now()}.png`, png, 'image/png', `visual assertion: ${assertion}`);
38
- sessions.bump(session, 'screenshots');
39
- coordinateSpace = await captureCoordinateSpace(driver, png);
40
- }
41
- catch (e) {
42
- return qaError({
43
- what: `Could not capture the screenshot evidence: ${String(e)}`,
44
- changedState: false,
45
- retrySafe: true,
46
- nextSteps: ['Confirm the device is online (qa_doctor), then retry.'],
47
- });
48
- }
49
- sessions.addNote(session, {
50
- at: Date.now(),
51
- workflow: assertion,
52
- outcome: pass ? 'pass' : 'fail',
53
- reason,
54
- method: 'visual',
55
- evidenceKind: 'visual_match',
56
- artifactUris: [uri],
57
- verifiedVisually: true,
58
- });
59
- if (pass) {
60
- const screenshotCrop = coordinateSpace?.screenshot
61
- ? { x: 0, y: 0, width: coordinateSpace.screenshot.width, height: coordinateSpace.screenshot.height }
62
- : undefined;
63
- sessions.addRecordedAction(session, {
64
- at: Date.now(),
65
- action: 'assert_visual',
66
- assertion,
67
- exportability: 'semantic',
68
- provenance: {
69
- screenshotUri: uri,
70
- selectorKind: 'visual_region',
71
- selectorValue: assertion,
72
- visual: {
73
- screenshotCrop,
74
- confidence: 1,
75
- density: coordinateSpace?.density ?? null,
76
- orientation: coordinateSpace?.orientation,
77
- },
78
- },
79
- });
80
- }
81
- return qaOk({ assertion, pass, verifiedVisually: true, method: 'visual', screenshotUri: uri, coordinateSpace }, `visual assertion ${pass ? '✅ PASS' : '❌ FAIL'}: "${assertion}"\nevidence: ${uri}`);
82
- });
83
- }
84
- //# sourceMappingURL=assertVisual.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assertVisual.js","sourceRoot":"","sources":["../../src/tools/assertVisual.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"automationGenerate.js","sourceRoot":"","sources":["../../src/tools/automationGenerate.ts"],"names":[],"mappings":"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"}
@@ -1,179 +0,0 @@
1
- import { z } from 'zod';
2
- import { qaOk } from '../lib/result.js';
3
- import { SWIPIUM_VERSION, TOOL_COUNT } from '../version.js';
4
- export const CAPABILITY_GROUPS = [
5
- {
6
- group: 'start',
7
- purpose: 'Start a simulator QA run and recover from blockers.',
8
- tools: [
9
- { name: 'qa_agent_brief', summary: 'Brief for agent orchestration: first call, polling, report fetch, and blocker rules.' },
10
- { name: 'qa_capabilities', summary: 'Grouped overview of the public tool surface.' },
11
- { name: 'qa_test_this', summary: 'Autopilot for "test it": resolve, prepare, smoke, explore, report, and optional suite output.' },
12
- { name: 'qa_job_status', summary: 'Poll long-running jobs started by macro tools.' },
13
- { name: 'qa_job_cancel', summary: 'Cancel a running job; aborts spawned children.' },
14
- { name: 'qa_status', summary: 'Compact session status and current next action.' },
15
- { name: 'qa_explain_blocker', summary: 'Explain a typed blocker and the owner of the fix.' },
16
- { name: 'qa_continue_from_blocker', summary: 'Resume after user input, with secret redaction.' },
17
- { name: 'qa_next_best_action', summary: 'Deterministic recommendation of the single best next tool to call, and why.' },
18
- { name: 'qa_get_artifact', summary: 'Fetch Swipium artifact metadata or contents by URI.' },
19
- ],
20
- },
21
- {
22
- group: 'setup',
23
- purpose: 'Resolve the project, create a session, and prepare Android Emulator or iOS Simulator targets.',
24
- tools: [
25
- { name: 'qa_doctor', summary: 'Check local toolchain readiness.' },
26
- { name: 'qa_start_session', summary: 'Open a project session with budget and response mode.' },
27
- { name: 'qa_detect_context', summary: 'Detect project framework, artifacts, devices, and blockers.' },
28
- { name: 'qa_plan', summary: 'Propose safe workflows before acting.' },
29
- { name: 'qa_prepare_target', summary: 'Prepare Android Emulator target and launch an APK.' },
30
- { name: 'qa_prepare_ios_target', summary: 'Prepare iOS Simulator target and launch a simulator .app.' },
31
- { name: 'qa_ios', summary: 'iOS Simulator operations: boot, install, launch, screenshot, logs, and reset.' },
32
- { name: 'qa_wda', summary: 'WebDriverAgent attach/build/start for structured iOS Simulator automation.' },
33
- ],
34
- },
35
- {
36
- group: 'build',
37
- purpose: 'Resolve a device and an installable artifact, or build one from source locally.',
38
- tools: [
39
- { name: 'qa_resolve_target', summary: 'Pick the best device/simulator (online > boot; honors platform/device).' },
40
- { name: 'qa_resolve_artifact', summary: 'Find the best installable .apk/.aab/.ipa/.app and explain where it looked.' },
41
- {
42
- name: 'qa_build',
43
- summary: 'mode:"plan" (default) proposes exact build commands (side-effect free); mode:"run" builds from source as a consent-gated job, captures a log, and re-resolves the artifact.',
44
- },
45
- { name: 'qa_bundletool', summary: 'Convert an .aab to an installable APK (universal or device-specific set).' },
46
- ],
47
- },
48
- {
49
- group: 'device',
50
- purpose: 'Inspect and control the device/app environment without raw adb or simctl.',
51
- tools: [
52
- { name: 'qa_device_info', summary: 'Model/SDK/ABIs/locale/screen/orientation + installed apps (read-only).' },
53
- { name: 'qa_orientation', summary: 'Set portrait / landscape / auto (logged).' },
54
- { name: 'qa_geolocation', summary: 'Spoof GPS location (emulator; consent-gated) for map/location apps.' },
55
- { name: 'qa_network', summary: 'airplane-mode status/offline/online/restore (consent-gated; auto-restored).' },
56
- { name: 'qa_metro', summary: 'RN/Expo Metro status/start/stop/diagnose (RedBox detection + logcat).' },
57
- { name: 'qa_app_control', summary: 'launch/foreground/background/force_stop/restart/clear_data/fresh_start.' },
58
- { name: 'qa_screen_record', summary: 'Record a screen video to an mp4 artifact (start/stop; consent-gated).' },
59
- ],
60
- },
61
- {
62
- group: 'drive',
63
- purpose: 'Observe, act, and make deterministic health assertions.',
64
- tools: [
65
- { name: 'qa_snapshot', summary: 'Capture compact structured UI elements.' },
66
- { name: 'qa_inspect', summary: 'Return the full attributes of a single @eN element from the latest snapshot.' },
67
- { name: 'qa_act', summary: 'Tap, type, clear, swipe, scroll, press, open URL, or wait, then observe.' },
68
- { name: 'qa_clear_overlay', summary: 'Dismiss common overlays blocking a target.' },
69
- { name: 'qa_check_health', summary: 'Detect crash, ANR, error boundaries, and foreground health.' },
70
- { name: 'qa_screenshot', summary: 'Capture a screenshot artifact.' },
71
- { name: 'qa_note', summary: 'Record a structured QA outcome.' },
72
- { name: 'qa_assert_visual', summary: 'Capture a visual assertion with evidence.' },
73
- { name: 'qa_wait', summary: 'Non-shell wait for device_online / metro_ready / job_done.' },
74
- ],
75
- },
76
- {
77
- group: 'run',
78
- purpose: 'Run smoke checks, exploration, and reports.',
79
- tools: [
80
- { name: 'qa_smoke', summary: 'Run launch smoke and saved flows.' },
81
- { name: 'qa_explore', summary: 'Guided simulator exploration with evidence and graph output.' },
82
- { name: 'qa_report', summary: 'Summarize findings, blockers, evidence, and next actions.' },
83
- ],
84
- },
85
- {
86
- group: 'app-map',
87
- purpose: 'Maintain the app knowledge map used as Swipium project memory.',
88
- tools: [
89
- { name: 'qa_app_map_build', summary: 'Build or update the app map from static analysis and exploration.' },
90
- { name: 'qa_app_map_read', summary: 'Read compact app map sections.' },
91
- { name: 'qa_app_map_query', summary: 'Search screens, features, tests, and code links.' },
92
- {
93
- name: 'qa_app_map_feature_scope',
94
- summary: 'Resolve a feature (id or free text) to a focused test scope + objective + candidates (read-only; works without a map).',
95
- },
96
- {
97
- name: 'qa_app_map_update',
98
- summary: 'Targeted provenance-tracked map updates: note, test cases, automation suite, environment, coverage.',
99
- },
100
- ],
101
- },
102
- {
103
- group: 'feature',
104
- purpose: 'Test a specific feature by name, backed by the app knowledge map.',
105
- tools: [
106
- {
107
- name: 'qa_test_feature',
108
- summary: 'Focused feature test: mode:"plan" for the read-only test plan; mode:"execute" explores toward the feature, records cases, updates the map and report.',
109
- },
110
- ],
111
- },
112
- {
113
- group: 'flows',
114
- purpose: 'Create, plan, run, compile, and repair durable simulator flows.',
115
- tools: [
116
- { name: 'qa_flow_check', summary: 'Parse and statically validate a Swipium flow (static lint of the YAML).' },
117
- {
118
- name: 'qa_flow_run',
119
- summary: 'mode:"run" (default) executes a flow against a prepared session; mode:"plan" previews the execution against backend capabilities without a device.',
120
- },
121
- { name: 'qa_flow_compile', summary: 'Compile a generated POM suite into runnable Flow V2 for qa_flow_run.' },
122
- { name: 'qa_flow_repair', summary: 'Suggest or patch a stronger locator for a failed flow step from the current screen.' },
123
- ],
124
- },
125
- {
126
- group: 'generate',
127
- purpose: 'Generate per-run test assets (flow, page objects, POM suite, test cases, Appium code) from recorded actions.',
128
- tools: [{ name: 'qa_generate', summary: 'One entry point: target flow / pom / suite / testcases / appium; mode:"plan" previews.' }],
129
- },
130
- {
131
- group: 'test-suite',
132
- purpose: 'Grow and maintain a canonical, persistent test suite across runs (.swipium/test-suite.json).',
133
- tools: [
134
- { name: 'qa_suite_read', summary: 'Read the canonical suite: filter by functionality/status; summary/json/markdown.' },
135
- { name: 'qa_suite_update', summary: 'Merge cases into the persistent suite (dedupe by feature+objective+steps).' },
136
- { name: 'qa_suite_generate', summary: 'Generate or refresh canonical cases from a recorded run and exploration.' },
137
- { name: 'qa_suite_export', summary: 'Export the persistent suite to markdown, yaml dir, json, or junit.' },
138
- { name: 'qa_suite_lint', summary: 'Validate the durable suite AND generated page objects (when present) in one lint.' },
139
- ],
140
- },
141
- {
142
- group: 'issues',
143
- purpose: 'Durable issue memory and executable mobile-QA audit profiles.',
144
- tools: [
145
- { name: 'qa_issue_log', summary: 'List the durable project issue ledger: records, counts, recurrence, linked evidence.' },
146
- {
147
- name: 'qa_mobile_audit',
148
- summary: 'Plan or execute a named mobile-QA profile (smoke / account_cycle / store_compliance / resilience / release_gate).',
149
- },
150
- ],
151
- },
152
- {
153
- group: 'first-run',
154
- purpose: 'Handle login, account creation, onboarding, and paywall first-run screens safely.',
155
- tools: [
156
- {
157
- name: 'qa_first_run',
158
- summary: 'mode:"plan" (default) classifies the current first-run screen and produces a safe plan; mode:"continue" executes bounded first-run steps with safe generated test data when allowed.',
159
- },
160
- ],
161
- },
162
- ];
163
- const groupNames = CAPABILITY_GROUPS.map((g) => g.group);
164
- export function registerCapabilities(server, _sessions) {
165
- server.registerTool('qa_capabilities', {
166
- title: 'List Swipium capabilities',
167
- description: 'The full public tool catalog, grouped by purpose with a one-line summary per tool. USE WHEN you need to discover which Swipium tool covers a task (or answer "what can Swipium do?"); pass `group` to fetch one group cheaply. Read-only, deterministic, needs no session or device. Returns { swipiumVersion, totalTools, groups: [{ group, purpose, tools: [{ name, summary }] }] }. Orientation: call qa_agent_brief first for HOW to drive Swipium; qa_status for the current session/device state; qa_next_best_action for the single next tool to call.',
168
- inputSchema: {
169
- group: z.enum(groupNames).optional().describe('Return only this group.'),
170
- },
171
- }, async ({ group }) => {
172
- const groups = group ? CAPABILITY_GROUPS.filter((g) => g.group === group) : CAPABILITY_GROUPS;
173
- const summary = `Swipium v${SWIPIUM_VERSION}: ${TOOL_COUNT} public tools in ${CAPABILITY_GROUPS.length} groups.\n` +
174
- groups.map((g) => `\n[${g.group}] ${g.purpose}\n` + g.tools.map((t) => ` - ${t.name}: ${t.summary}`).join('\n')).join('\n') +
175
- '\n\nStart with qa_test_this for low-context "test it" requests.';
176
- return qaOk({ swipiumVersion: SWIPIUM_VERSION, totalTools: TOOL_COUNT, groups }, summary);
177
- });
178
- }
179
- //# sourceMappingURL=capabilities.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/tools/capabilities.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- // qa_detect_context — scan the resolved projectRoot and report what we're looking at.
2
- import { z } from 'zod';
3
- import { qaOk, qaError } from '../lib/result.js';
4
- import { resolveProjectRoot } from '../context/projectRoot.js';
5
- import { detectContext } from '../context/detect.js';
6
- export function registerDetectContext(server, sessions) {
7
- server.registerTool('qa_detect_context', {
8
- title: 'Detect project context',
9
- description: 'Scan the resolved project root (a session root, an explicit projectRoot, or MCP workspace roots — never the server cwd) and report: framework (expo/bare-rn/native-android/native-ios/flutter), monorepo, prebuilt artifacts (apk/ipa/.app), online devices + AVDs, toolchain, and blockers. Use this to decide what qa_prepare_target needs.',
10
- inputSchema: {
11
- sessionId: z.string().optional().describe("Use this session's projectRoot if given."),
12
- projectRoot: z.string().optional().describe('Absolute path; else resolved via MCP roots.'),
13
- },
14
- }, async ({ sessionId, projectRoot }) => {
15
- let root;
16
- if (sessionId)
17
- root = sessions.get(sessionId)?.root;
18
- if (!root) {
19
- const resolved = await resolveProjectRoot(server, projectRoot);
20
- if (!resolved.root) {
21
- return qaError({
22
- what: 'Could not resolve a project root to scan',
23
- changedState: false,
24
- retrySafe: true,
25
- nextSteps: ['Pass projectRoot="/abs/path", or call qa_start_session first.'],
26
- clientHint: resolved.hint,
27
- });
28
- }
29
- root = resolved.root;
30
- }
31
- const ctx = await detectContext(root);
32
- const summary = `root=${ctx.projectRoot}\n` +
33
- `framework=${ctx.framework} location=${ctx.location} monorepo=${ctx.monorepo}\n` +
34
- `artifacts: ${ctx.artifacts.apks.length} apk, ${ctx.artifacts.ipas.length} ipa, ${ctx.artifacts.appBundles.length} .app\n` +
35
- `devices: online=[${ctx.devices.androidOnline.join(', ')}] avds=[${ctx.devices.avds.join(', ')}]\n` +
36
- `toolchain: adb=${ctx.toolchain.adb} emulator=${ctx.toolchain.emulator} java=${ctx.toolchain.java} aapt2=${ctx.toolchain.aapt2} xcodebuild=${ctx.toolchain.xcodebuild}\n` +
37
- (ctx.blockers.length ? `blockers:\n - ${ctx.blockers.join('\n - ')}` : 'no blockers');
38
- return qaOk(ctx, summary);
39
- });
40
- }
41
- //# sourceMappingURL=detectContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detectContext.js","sourceRoot":"","sources":["../../src/tools/detectContext.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,QAAsB;IAC7E,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,+UAA+U;QACjV,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACrF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;SAC3F;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE;QACnC,IAAI,IAAwB,CAAC;QAC7B,IAAI,SAAS;YAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC;oBACb,IAAI,EAAE,0CAA0C;oBAChD,YAAY,EAAE,KAAK;oBACnB,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,CAAC,+DAA+D,CAAC;oBAC5E,UAAU,EAAE,QAAQ,CAAC,IAAI;iBAC1B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GACX,QAAQ,GAAG,CAAC,WAAW,IAAI;YAC3B,aAAa,GAAG,CAAC,SAAS,aAAa,GAAG,CAAC,QAAQ,aAAa,GAAG,CAAC,QAAQ,IAAI;YAChF,cAAc,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,SAAS;YAC1H,oBAAoB,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YACnG,kBAAkB,GAAG,CAAC,SAAS,CAAC,GAAG,aAAa,GAAG,CAAC,SAAS,CAAC,QAAQ,SAAS,GAAG,CAAC,SAAS,CAAC,IAAI,UAAU,GAAG,CAAC,SAAS,CAAC,KAAK,eAAe,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI;YACzK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,GAAyC,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowGenerate.js","sourceRoot":"","sources":["../../src/tools/flowGenerate.ts"],"names":[],"mappings":"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"}
@@ -1,86 +0,0 @@
1
- import { z } from 'zod';
2
- import { qaError, qaOk } from '../lib/result.js';
3
- import { compareReports, trendForRoot } from '../report/history.js';
4
- export function registerHistory(server, sessions) {
5
- server.registerTool('qa_report_compare', {
6
- title: 'Compare Swipium reports',
7
- description: 'Compare a current Swipium report.json against a baseline report.json. Reports new failures, fixed failures, changed screenshots, outcome changes, runtime regression, and optional flake status from local trend history.',
8
- inputSchema: {
9
- current: z.string().describe('Path to current report.json.'),
10
- baseline: z.string().describe('Path to baseline report.json.'),
11
- trendRoot: z
12
- .string()
13
- .optional()
14
- .describe('Optional project root containing .swipium/runs or legacy .swipium/ci history for known-flaky classification.'),
15
- },
16
- }, async ({ current, baseline, trendRoot }) => {
17
- try {
18
- const cmp = compareReports(current, baseline, { trendRoot });
19
- return qaOk(cmp, cmp.summary);
20
- }
21
- catch (e) {
22
- return qaError({
23
- what: `Could not compare reports: ${String(e.message ?? e)}`,
24
- changedState: false,
25
- retrySafe: true,
26
- nextSteps: ['Pass readable Swipium report.json files for current and baseline.'],
27
- });
28
- }
29
- });
30
- server.registerTool('qa_run_history', {
31
- title: 'Summarize Swipium run history',
32
- description: 'Read local .swipium/runs/**/report.json files (and legacy .swipium/ci/**) and summarize pass rate, median runtime, top failures, environment failures, flaky flows, confidence calibration, and slowest runs.',
33
- inputSchema: {
34
- sessionId: z.string().optional(),
35
- projectRoot: z.string().optional().describe('Project root. Defaults to the session root when sessionId is provided.'),
36
- },
37
- }, async ({ sessionId, projectRoot }) => {
38
- const session = sessionId ? sessions.get(sessionId) : undefined;
39
- if (sessionId && !session)
40
- return qaError({
41
- what: `Unknown sessionId ${sessionId}`,
42
- changedState: false,
43
- retrySafe: true,
44
- nextSteps: ['Call qa_start_session first, or pass projectRoot.'],
45
- });
46
- const root = projectRoot ?? session?.root;
47
- if (!root)
48
- return qaError({
49
- what: 'qa_run_history needs projectRoot or sessionId',
50
- changedState: false,
51
- retrySafe: true,
52
- nextSteps: ['Pass projectRoot, or call qa_start_session first.'],
53
- });
54
- try {
55
- const trend = trendForRoot(root);
56
- const calibration = trend.confidenceCalibration;
57
- const blockers = trend.releaseGateSignals.filter((s) => s.level === 'block').reduce((sum, s) => sum + s.count, 0);
58
- const warnings = trend.releaseGateSignals.filter((s) => s.level === 'warn').reduce((sum, s) => sum + s.count, 0);
59
- const locatorTrend = trend.locatorReadinessTrend;
60
- const asSec = (ms) => (ms == null ? 'n/a' : `${Math.round(ms / 100) / 10}s`);
61
- const summary = `history: ${trend.reports} report(s), median ${asSec(trend.medianRuntimeMs)}\n` +
62
- `timing: avg setup ${asSec(trend.averageSetupMs)}, avg active ${asSec(trend.averageActiveMs)}\n` +
63
- (locatorTrend.runsWithReadiness
64
- ? `locator readiness: latest durable ${locatorTrend.latestDurablePct ?? 'n/a'}%, average ${locatorTrend.averageDurablePct ?? 'n/a'}%\n`
65
- : '') +
66
- Object.entries(trend.passRate)
67
- .map(([flow, rate]) => ` ${flow}: ${(rate * 100).toFixed(1)}% pass`)
68
- .join('\n') +
69
- `\nrelease gate signals: ${blockers} block, ${warnings} warn` +
70
- `\ncalibration: ${calibration.status} (${calibration.confidenceSamples}/${calibration.probabilisticEvidence} confidence sample(s), ${calibration.outcomeSamples} outcome sample(s))` +
71
- (trend.slowestSteps.length
72
- ? `\nslowest step: ${trend.slowestSteps[0].workflow}#${trend.slowestSteps[0].index} ${trend.slowestSteps[0].kind} ${asSec(trend.slowestSteps[0].durationMs)}`
73
- : '');
74
- return qaOk({ root, ...trend }, summary);
75
- }
76
- catch (e) {
77
- return qaError({
78
- what: `Could not read run history: ${String(e.message ?? e)}`,
79
- changedState: false,
80
- retrySafe: true,
81
- nextSteps: ['Confirm .swipium/runs or .swipium/ci contains report.json files.'],
82
- });
83
- }
84
- });
85
- }
86
- //# sourceMappingURL=history.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/tools/history.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- // qa_locator_suggest (NEXT-PLAN: Locator And Maintainability) — for the current screen, recommend
2
- // the most durable locator for each element + score it, and grade the screen's "automation
3
- // readiness" (how much of the interactive UI has a durable testID/accessibility handle). This
4
- // tells a developer exactly which controls need testIDs to make flows non-brittle.
5
- import { z } from 'zod';
6
- import { qaOk, qaError } from '../lib/result.js';
7
- import { parseSnapshot, signature } from '../snapshot/parse.js';
8
- import { suggestLocator, automationReadiness, locatorReadinessIssues } from '../oracle/locator.js';
9
- import { getDriver } from '../session/attach.js';
10
- export function registerLocator(server, sessions) {
11
- server.registerTool('qa_locator_suggest', {
12
- title: 'Suggest durable locators',
13
- description: "For the current screen, recommend the most durable locator for each element (priority: accessibility/content-desc > resource-id/testID > visible text > structure > coordinate) with a durability score, and grade the screen's automation readiness — listing exactly which interactive controls need a testID. Use this to make generated flows non-brittle and to hand developers an actionable testID to-do list. Needs a structured UI tree (not the iOS simulator / visual-fallback).",
14
- inputSchema: {
15
- sessionId: z.string(),
16
- interactiveOnly: z.boolean().optional().describe('Only score clickable elements (default false → all addressable elements).'),
17
- },
18
- }, async ({ sessionId, interactiveOnly }) => {
19
- const session = sessions.get(sessionId);
20
- const { driver } = session ? await getDriver(session) : { driver: undefined };
21
- if (!session || !driver) {
22
- return qaError({
23
- what: 'No device attached to this session',
24
- changedState: false,
25
- retrySafe: true,
26
- nextSteps: ['Call qa_prepare_target first.'],
27
- });
28
- }
29
- if (driver.kind === 'simulator' || session.mode === 'visual-fallback') {
30
- return qaError({
31
- what: 'Locator suggestions need a structured UI tree, which this backend/screen lacks',
32
- changedState: false,
33
- retrySafe: false,
34
- failureCode: 'BACKEND_UNSUPPORTED',
35
- nextSteps: [
36
- 'On the iOS simulator or a visual-only screen there is no a11y tree to score. Use qa_visual / qa_assert_visual instead.',
37
- ],
38
- });
39
- }
40
- let xml;
41
- try {
42
- xml = await driver.dumpXml();
43
- }
44
- catch (e) {
45
- return qaError({
46
- what: `Could not read the UI tree: ${String(e)}`,
47
- changedState: false,
48
- retrySafe: true,
49
- failureCode: 'SNAPSHOT_FAILED',
50
- nextSteps: ['Retry on a settled screen.'],
51
- });
52
- }
53
- const parsed = parseSnapshot(xml, { interactiveOnly: interactiveOnly ?? false });
54
- session.lastSnapshot = {
55
- fullByRef: parsed.fullByRef,
56
- signatures: new Set(parsed.elements.map(signature)),
57
- allNodes: parsed.allNodes,
58
- };
59
- const platform = driver.kind === 'wda' ? 'ios' : driver.kind === 'direct' || driver.kind === 'remote' ? 'android' : 'generic';
60
- const suggestions = parsed.elements.map((el) => suggestLocator(el, { platform }));
61
- const readiness = automationReadiness(suggestions, parsed.elements, { platform });
62
- const issues = locatorReadinessIssues(suggestions, parsed.elements, { platform });
63
- const tierTally = suggestions.reduce((a, s) => ((a[s.tier] = (a[s.tier] ?? 0) + 1), a), {});
64
- const summary = `automation readiness: ${readiness.grade} (${readiness.durablePct}% of ${readiness.interactiveCount} interactive controls have a durable ${platform === 'ios' ? 'accessibilityIdentifier' : 'testID/a11y'} handle)\n` +
65
- `platform: ${platform}\n` +
66
- `locator tiers: ${Object.entries(tierTally)
67
- .map(([t, n]) => `${t}=${n}`)
68
- .join(' ')}\n` +
69
- (issues.length
70
- ? `issues:\n${issues
71
- .slice(0, 8)
72
- .map((i) => ` - ${i.code}: ${i.message}`)
73
- .join('\n')}\n`
74
- : '') +
75
- (readiness.needTestIds.length
76
- ? `needs a testID (${readiness.needTestIds.length}):\n` +
77
- readiness.needTestIds
78
- .slice(0, 15)
79
- .map((n) => ` - ${n.ref} [${n.role}] — ${n.hint}${n.suggestedTestId ? `; suggested ${platform === 'ios' ? 'accessibilityIdentifier' : 'testID'}: ${n.suggestedTestId}` : ''}`)
80
- .join('\n')
81
- : 'every interactive control already has a durable locator ✅');
82
- return qaOk({ platform, readiness, suggestions, tierTally, issues }, summary);
83
- });
84
- }
85
- //# sourceMappingURL=locator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"locator.js","sourceRoot":"","sources":["../../src/tools/locator.ts"],"names":[],"mappings":"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"}