swipium 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/CHANGELOG.md +171 -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
@@ -1,11 +1,11 @@
1
- // qa_test_this terminal-state assembly — every terminal state (completed OR blocked) generates a
1
+ // qa_test_this terminal-state assembly: every terminal state (completed OR blocked) generates a
2
2
  // report artifact (Milestone B) and lands the uniform TerminalEnvelope on the job result, so the
3
3
  // outcome is summarizable from structured output without log parsing.
4
4
  import { buildTerminalEnvelope, typedBlockerFromCode } from '../envelope.js';
5
5
  import { generateSessionReport } from '../../services/report.js';
6
6
  import { startProgress } from '../../session/progress.js';
7
7
  import { log } from '../../lib/logger.js';
8
- /** Every terminal state — completed OR blocked — generates a report artifact (Milestone B). */
8
+ /** Every terminal state (completed OR blocked) generates a report artifact (Milestone B). */
9
9
  export function createFinisher(ctx) {
10
10
  const { sessions, session, job, a, attempted, artifacts, upd } = ctx;
11
11
  return async (state, failureCode, summary, extra = {}) => {
@@ -16,7 +16,7 @@ export function createFinisher(ctx) {
16
16
  risk: a.testThisPlanMutation.risk,
17
17
  target: a.testThisPlanMutation.affects,
18
18
  consent: a.mutationConsent,
19
- status: state === 'completed' ? 'executed' : 'blocked',
19
+ status: state === 'blocked' || state === 'unsafe' ? 'blocked' : 'executed',
20
20
  detail: failureCode,
21
21
  });
22
22
  }
@@ -46,6 +46,7 @@ export function createFinisher(ctx) {
46
46
  });
47
47
  reportUri = r.reportUri;
48
48
  manifestUri = r.manifestUri;
49
+ sessions.milestone(session, 'report_generated'); // persisted flag for qa_status's ladder
49
50
  if (!artifacts.includes(reportUri))
50
51
  artifacts.push(reportUri);
51
52
  appVerdict = r.report.appVerdict;
@@ -62,16 +63,28 @@ export function createFinisher(ctx) {
62
63
  : session.findings.some((f) => f.layer === 'app' && f.severity === 'medium')
63
64
  ? 'degraded'
64
65
  : 'OK';
65
- // The report already exists — point the agent AT it (fetch/open), not back at qa_report.
66
- const nextRecommendedAction = state === 'completed'
67
- ? reportUri
68
- ? {
69
- tool: 'qa_get_artifact',
70
- args: { uri: reportUri },
71
- why: `Open the generated report (${reportUri})`,
72
- }
73
- : { tool: 'qa_report', args: { sessionId: session.id }, why: 'Generate the report' }
74
- : { tool: 'qa_explain_blocker', args: { failureCode: failureCode ?? 'UNKNOWN' }, why: 'Understand the blocker and how to fix it' };
66
+ // The report already exists, so point the agent AT it (fetch/open), not back at qa_report.
67
+ const question = extra.needsInput;
68
+ const nextRecommendedAction = state === 'needs_input' && question?.resume
69
+ ? {
70
+ tool: question.resume.tool,
71
+ args: question.resume.args,
72
+ why: `Ask the user exactly this one question, then resume with their answer: ${question.question ?? question.kind ?? 'input needed'}`,
73
+ }
74
+ : state === 'completed'
75
+ ? reportUri
76
+ ? {
77
+ tool: 'qa_get_artifact',
78
+ args: { uri: reportUri },
79
+ why: `Open the generated report (${reportUri})`,
80
+ }
81
+ : { tool: 'qa_report', args: { sessionId: session.id }, why: 'Generate the report' }
82
+ : {
83
+ tool: 'qa_explain_blocker',
84
+ // sessionId lets qa_explain_blocker stamp the blocker as explained, so qa_status moves on.
85
+ args: { failureCode: failureCode ?? 'UNKNOWN', sessionId: session.id },
86
+ why: 'Understand the blocker and how to fix it',
87
+ };
75
88
  // Uniform terminal envelope (Milestone B): summarizable from structured output, no log parsing.
76
89
  const envelope = buildTerminalEnvelope({
77
90
  state,
@@ -87,16 +100,17 @@ export function createFinisher(ctx) {
87
100
  ...(coverageVerdict ? { coverage: coverageVerdict } : {}),
88
101
  ...(toolVerdict ? { tool: toolVerdict } : {}),
89
102
  },
90
- blockers: state === 'completed' || !failureCode ? [] : [typedBlockerFromCode(failureCode)],
103
+ blockers: state === 'completed' || state === 'needs_input' || !failureCode ? [] : [typedBlockerFromCode(failureCode)],
91
104
  reportUri: reportUri ?? null,
92
105
  nextRecommendedAction,
93
106
  });
94
107
  upd({
95
- status: state === 'completed' ? 'done' : 'failed',
108
+ // needs_input is a clean pause (the run did what it could and asks ONE question), not a failure.
109
+ status: state === 'completed' || state === 'needs_input' ? 'done' : 'failed',
96
110
  progress: state,
97
111
  result: {
98
112
  ...envelope,
99
- // Pre-launch static app map URI is present in EVERY terminal state — including blocked (Fix 1).
113
+ // Pre-launch static app map URI is present in EVERY terminal state, including blocked (Fix 1).
100
114
  appMapUri: a.appMapUri,
101
115
  goal: a.goal,
102
116
  requiredOutputs: a.requiredOutputs,
@@ -106,6 +120,10 @@ export function createFinisher(ctx) {
106
120
  manifestUri,
107
121
  health: { native, app },
108
122
  inputsProvided: session.inputs.map((i) => i.varName),
123
+ // Compact report pointer: verdict one-liner + URI; the full report lives at reportUri.
124
+ reportSummary: reportUri
125
+ ? `${appVerdict?.status ?? 'n/a'} app · ${coverageVerdict?.status ?? 'n/a'} coverage · ${toolVerdict?.status ?? 'n/a'} tool. Read ${reportUri}`
126
+ : null,
109
127
  notes: session.notes.length,
110
128
  findings: session.findings.length,
111
129
  ...extra,
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../src/orchestration/testThis/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../src/orchestration/testThis/terminal.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // Shared types for the qa_test_this orchestration state machine (split out of
2
- // src/tools/testThis.ts). Pure declarations + tiny helpers — no side effects.
2
+ // src/tools/testThis.ts). Pure declarations + tiny helpers, no side effects.
3
3
  export const selToPlatform = {
4
4
  'android-emulator': 'android',
5
5
  'android-real': 'android',
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/orchestration/testThis/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8EAA8E;AAyB9E,MAAM,CAAC,MAAM,aAAa,GAA2C;IACnE,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/orchestration/testThis/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AA0B7E,MAAM,CAAC,MAAM,aAAa,GAA2C;IACnE,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
package/dist/plan/plan.js CHANGED
@@ -1,8 +1,8 @@
1
- // qa_plan core (PHASE3-PLAN §3.2) — PURE synthesis. Given what we detected about the
1
+ // Workflow-plan core (qa_resolve_target include:["plan"]): PURE synthesis. Given what we detected about the
2
2
  // project + what the session declared (fixtures, observed auth, prepared appId), produce a
3
3
  // safe test plan: which workflows are READY, which are BLOCKED (and why + how to unblock),
4
4
  // and which are UNSAFE (and why). No device I/O lives here, so it is fully unit-testable;
5
- // the tool wrapper (src/tools/plan.ts) gathers the inputs and calls buildPlan().
5
+ // the tool wrapper (src/tools/resolveTarget.ts workflowPlan) gathers the inputs and calls buildPlan().
6
6
  const LOGIN_FIXTURE = /login|auth|account|credential|sign[\s_-]?in/i;
7
7
  function isDebugRN(fw) {
8
8
  return fw === 'expo' || fw === 'bare-react-native';
@@ -37,7 +37,7 @@ export function buildPlan(i) {
37
37
  }
38
38
  return null;
39
39
  };
40
- // launch_smoke — the cheapest always-valuable check.
40
+ // launch_smoke: the cheapest always-valuable check.
41
41
  {
42
42
  const g = gateEnv('launch_smoke', 'guardrail');
43
43
  if (g)
@@ -45,7 +45,7 @@ export function buildPlan(i) {
45
45
  else
46
46
  ready.push({ workflow: 'launch_smoke', budgetProfile: 'guardrail', requires: [] });
47
47
  }
48
- // visual_smoke — screenshot/landmark check for visual-only (map/canvas) screens.
48
+ // visual_smoke: screenshot/landmark check for visual-only (map/canvas) screens.
49
49
  {
50
50
  const g = gateEnv('visual_smoke', 'login_smoke');
51
51
  if (g)
@@ -53,7 +53,7 @@ export function buildPlan(i) {
53
53
  else
54
54
  ready.push({ workflow: 'visual_smoke', budgetProfile: 'login_smoke', requires: [] });
55
55
  }
56
- // login_smoke — needs a credential fixture on top of the env gate.
56
+ // login_smoke: needs a credential fixture on top of the env gate.
57
57
  {
58
58
  const g = gateEnv('login_smoke', 'login_smoke');
59
59
  if (g)
@@ -64,7 +64,7 @@ export function buildPlan(i) {
64
64
  budgetProfile: 'login_smoke',
65
65
  category: 'missing_test_data',
66
66
  requiredState: 'a test account (credentials)',
67
- recommendedSetup: 'Declare a fixture with a testAccount label (and provide TEST_EMAIL/TEST_PASSWORD via env), or add it to .swipium/fixtures.json.',
67
+ recommendedSetup: 'Declare a fixture with a testAccount label (and provide SWIPIUM_TEST_EMAIL/SWIPIUM_TEST_PASSWORD via env), or add it to .swipium/fixtures.json.',
68
68
  });
69
69
  }
70
70
  else {
@@ -80,7 +80,7 @@ export function buildPlan(i) {
80
80
  ready.push({ workflow: name, budgetProfile: 'full_smoke', requires: [] });
81
81
  }
82
82
  // Fixtures that declare an unmet requiredState surface as blocked workflows so "no saved
83
- // flight to delete" reads as setup guidance, not a failure (DESIGN §6 / qa_note semantics).
83
+ // flight to delete" reads as setup guidance, not a failure (qa_note semantics).
84
84
  for (const f of i.fixtures) {
85
85
  if (f.requiredState && !LOGIN_FIXTURE.test(f.name) && !f.testAccount) {
86
86
  blocked.push({
@@ -92,7 +92,7 @@ export function buildPlan(i) {
92
92
  });
93
93
  }
94
94
  }
95
- // UNSAFE — destructive actions that Swipium will refuse by default.
95
+ // UNSAFE: destructive actions that Swipium will refuse by default.
96
96
  if (isDebugRN(i.framework)) {
97
97
  unsafe.push({
98
98
  workflow: 'fresh_start',
@@ -115,7 +115,7 @@ export function buildPlan(i) {
115
115
  'Destructive exploration requires dry_run_destructive first, then candidate-bound approval with disposable test state.',
116
116
  ];
117
117
  if (i.auth.authedAtStart === false || i.auth.loginScreenSeen) {
118
- notes.push('A login screen was observed — authenticated workflows will need credentials.');
118
+ notes.push('A login screen was observed. Authenticated workflows will need credentials.');
119
119
  }
120
120
  for (const b of i.blockers)
121
121
  notes.push(b);
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/plan/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/plan/plan.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- // MCP prompts (PHASE3-PLAN §2.4 / §3.3) — the spec's third server capability (after tools +
1
+ // MCP prompts: the spec's third server capability (after tools +
2
2
  // resources). Prompts are reusable workflow templates a prompt-capable client (e.g. Claude)
3
3
  // can invoke by name, so common QA runs don't need a hand-written prompt each time.
4
4
  //
5
5
  // Design rules:
6
6
  // - Prompts are THIN: they only orchestrate tools that already exist. No privileged logic
7
- // lives here — consent stays server-side (security best-practices doc).
7
+ // lives here. Consent stays server-side (security best-practices doc).
8
8
  // - Clients that don't support prompts lose nothing: every step is "call <tool>", which the
9
9
  // agent can do directly. Nothing is prompt-only.
10
10
  //
@@ -18,20 +18,20 @@ export function registerPrompts(server) {
18
18
  description: 'Verify Swipium can test a project and report what (if anything) is blocking.',
19
19
  argsSchema: { projectRoot: z.string().optional().describe('Absolute path to the app project.') },
20
20
  }, ({ projectRoot }) => userText(`Check whether Swipium can test ${projectRoot ? `the project at ${projectRoot}` : 'this project'}.\n\n` +
21
- `1. Call qa_doctor to confirm the toolchain (adb/emulator/java) and that the client is not stale.\n` +
21
+ `1. Call qa_doctor to confirm the toolchain (Android SDK/emulator, and Xcode/simctl on macOS) and that the client is not stale.\n` +
22
22
  `2. Call qa_start_session${projectRoot ? ` { projectRoot: "${projectRoot}" }` : ''}.\n` +
23
- `3. Call qa_detect_context, then qa_plan with the sessionId.\n` +
24
- `4. Summarize: is it READY, PARTIAL, or BLOCKED? List the exact missing items (APK, device, credentials) and the recommended budget profile. Do not start testing yet.`));
23
+ `3. Call qa_resolve_target { sessionId, include: ["context", "plan"] }.\n` +
24
+ `4. Summarize: which workflows are READY, BLOCKED, or UNSAFE? List the exact missing items (APK, device, credentials) and the recommended budget profile. Do not start testing yet.`));
25
25
  server.registerPrompt('swipium_guardrail_validation', {
26
26
  title: 'Validate safety guardrails',
27
- description: 'Confirm Swipium refuses an unsafe destructive action (bundle-loss) on a debug RN/Expo build.',
27
+ description: 'Confirm Swipium refuses an unsafe destructive action (bundle-loss) on a debug RN/Expo Android build.',
28
28
  argsSchema: { projectRoot: z.string().optional() },
29
29
  }, ({ projectRoot }) => userText(`Validate Swipium's destructive-action guardrails (do NOT override them).\n\n` +
30
30
  `1. qa_start_session${projectRoot ? ` { projectRoot: "${projectRoot}", ` : ' { '}profile: "guardrail" }.\n` +
31
- `2. qa_plan — confirm fresh_start appears under UNSAFE with reason bundle_cache_loss for a debug RN/Expo build.\n` +
32
- `3. qa_prepare_target to get the app running.\n` +
33
- `4. Attempt qa_app_control { action: "fresh_start" } WITHOUT acknowledgeBundleRisk — expect a refusal (bundle_cache_loss), not execution.\n` +
34
- `5. qa_report and confirm destructiveGuardrail shows the action was refused, not executed. Report PASS only if it was refused.`));
31
+ `2. qa_resolve_target { sessionId, include: ["plan"] } and confirm fresh_start appears under UNSAFE with reason bundle_cache_loss for a debug RN/Expo build.\n` +
32
+ `3. qa_prepare_target { sessionId } to get the app running on an Android Emulator (approve consent for boot/install if prompted).\n` +
33
+ `4. Attempt qa_app_control { sessionId, action: "fresh_start" } WITHOUT acknowledgeBundleRisk. Expect a refusal (failureCode BUNDLE_LOSS_REFUSED), not execution.\n` +
34
+ `5. qa_report { sessionId } and confirm destructiveGuardrail shows the action was refused, not executed. Report PASS only if it was refused.`));
35
35
  server.registerPrompt('swipium_full_smoke', {
36
36
  title: 'Run a full smoke test',
37
37
  description: 'Plan, prepare, run the top ready workflows, and produce a report.',
@@ -41,11 +41,11 @@ export function registerPrompts(server) {
41
41
  },
42
42
  }, ({ projectRoot, appId }) => userText(`Run a full smoke test and produce a report a developer can act on.\n\n` +
43
43
  `1. qa_start_session${projectRoot ? ` { projectRoot: "${projectRoot}", ` : ' { '}profile: "full_smoke", responseMode: "compact" }.\n` +
44
- `2. qa_plan — pick the READY workflows; respect anything listed as UNSAFE.\n` +
45
- `3. qa_prepare_target${appId ? ` { appId: "${appId}" }` : ''} (approve consent for boot/install if prompted).\n` +
44
+ `2. qa_resolve_target { sessionId, include: ["plan"] } and pick the READY workflows; respect anything listed as UNSAFE.\n` +
45
+ `3. qa_prepare_target { sessionId${appId ? `, appId: "${appId}"` : ''} } (Android) or qa_prepare_ios_target { sessionId${appId ? `, bundleId: "${appId}"` : ''} } (iOS) (approve consent for boot/install if prompted).\n` +
46
46
  `4. For each ready workflow: drive it with qa_snapshot/qa_act, checking qa_check_health after key steps. Use qa_clear_overlay if a keyboard/dialog/banner blocks a target.\n` +
47
- `5. Record each result with qa_note (pass/fail/blocked + category). For visual-only screens use qa_assert_visual.\n` +
48
- `6. qa_report at the end. Summarize release risk and the single most important next action.`));
47
+ `5. Record each result with qa_note (sessionId, workflow, outcome pass/fail/blocked + category). For visual-only screens use qa_visual mode:"assert".\n` +
48
+ `6. qa_report { sessionId } at the end. Summarize release risk and the single most important next action.`));
49
49
  server.registerPrompt('swipium_bug_repro', {
50
50
  title: 'Reproduce and document a bug',
51
51
  description: 'Drive to a described bug, capture deterministic evidence, and file it as a structured outcome.',
@@ -54,20 +54,20 @@ export function registerPrompts(server) {
54
54
  projectRoot: z.string().optional(),
55
55
  },
56
56
  }, ({ bug, projectRoot }) => userText(`Reproduce and document this bug with evidence:\n"${bug}"\n\n` +
57
- `1. qa_start_session${projectRoot ? ` { projectRoot: "${projectRoot}", ` : ' { '}profile: "login_smoke" }, then qa_plan.\n` +
58
- `2. qa_prepare_target, then navigate toward the reported bug with qa_snapshot/qa_act.\n` +
59
- `3. At the failure, call qa_check_health (capture native vs app classification) and qa_screenshot for evidence.\n` +
60
- `4. Record qa_note { outcome: "fail", category: "app_bug", reason, artifactUris } — or "blocked"/"not_applicable" if you could not reach it, with the precondition.\n` +
61
- `5. qa_report. Include exact reproduction steps and the evidence artifact URIs so the report stands alone without the transcript.`));
57
+ `1. qa_start_session${projectRoot ? ` { projectRoot: "${projectRoot}", ` : ' { '}profile: "login_smoke" }, then qa_resolve_target { sessionId, include: ["plan"] }.\n` +
58
+ `2. qa_prepare_target (Android) or qa_prepare_ios_target (iOS) { sessionId }, then navigate toward the reported bug with qa_snapshot/qa_act.\n` +
59
+ `3. At the failure, call qa_check_health { sessionId } (native vs app classification) and qa_screenshot { sessionId, reason } for evidence (on a visual-only iOS screen, qa_visual mode:"assert").\n` +
60
+ `4. Record qa_note { sessionId, workflow, outcome: "fail", category: "app_bug", reason, artifactUris }. Use "blocked"/"not_applicable" if you could not reach it, with missingPrecondition.\n` +
61
+ `5. qa_report { sessionId }. Include exact reproduction steps and the evidence artifact URIs so the report stands alone without the transcript.`));
62
62
  server.registerPrompt('swipium_convert_run_to_flow', {
63
63
  title: 'Convert a run into a reusable flow',
64
64
  description: 'Draft a repeatable .swipium/flows/*.yaml from the steps you just performed, then validate it.',
65
65
  argsSchema: { name: z.string().optional().describe('Flow name, e.g. login-smoke.') },
66
66
  }, ({ name }) => userText(`Turn the workflow you just ran into a repeatable Swipium flow.\n\n` +
67
67
  `1. Call qa_generate { sessionId, target: "flow", name: "${name ?? 'my-flow'}" } to draft the flow YAML from the recorded actions (or write it by hand with: name, appId, budgetProfile, fixtures, and a steps list).\n` +
68
- `2. Use durable selectors: prefer text/id (e.g. tap: "Sign In") over @ref. Replace credentials with \${TEST_EMAIL}/\${TEST_PASSWORD} variables — never inline secrets.\n` +
69
- ` Available steps: prepareTarget, tap, tapAt, inputText, assertVisible, assertNotVisible, swipe, scrollTo, press, openUrl, wait.\n` +
68
+ `2. Use durable selectors: prefer text/id (e.g. tap: "Sign In") over @ref. Replace credentials with \${SWIPIUM_TEST_EMAIL}/\${SWIPIUM_TEST_PASSWORD} variables. Never inline secrets.\n` +
69
+ ` Common steps: prepareTarget, tap, tapAt, inputText, assertVisible, assertNotVisible, swipe, scrollTo, press, openUrl, wait, clearOverlay (full list: docs/tools.md#flow-steps).\n` +
70
70
  `3. Validate it with qa_flow_check { flowYaml: "<your yaml>" } and fix any reported errors (qa_generate also reports a durability grade + brittle steps).\n` +
71
- `4. Save it under .swipium/flows/${name ?? 'my-flow'}.yaml (qa_generate save:true does this) so qa_plan lists it and qa_flow_run can replay it.`));
71
+ `4. Save it under .swipium/flows/${name ?? 'my-flow'}.yaml (qa_generate save:true does this) so the workflow plan lists it and qa_flow_run can replay it.`));
72
72
  }
73
73
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}