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
@@ -1,18 +1,20 @@
1
- // qa_device_info + qa_orientation (PHASE3-PLAN §4.2) — device-parity introspection and rotation,
1
+ // qa_device_info + qa_orientation: device-parity introspection and rotation,
2
2
  // without raw adb. Read-only info needs no consent; orientation is a logged, non-destructive
3
3
  // environment change.
4
4
  import { z } from 'zod';
5
- import { qaOk, qaError } from '../lib/result.js';
5
+ import { qaOk, qaError, unknownSessionError } from '../lib/result.js';
6
6
  import { requireConsent, consumeConsent } from '../consent/consent.js';
7
- import { getDriver } from '../session/attach.js';
7
+ import { blockedDeviceResult, getDriver } from '../session/attach.js';
8
+ import { listSimulators } from '../lib/simctl.js';
8
9
  import { getDeviceProps, getOrientation, setOrientation, listPackages, setGeo } from '../lib/device.js';
10
+ import { invalidateScreenSizeCache } from '../drivers/DirectDriver.js';
9
11
  function rotationLabel(rotation, auto) {
10
12
  return auto ? 'auto' : rotation === 1 || rotation === 3 ? 'landscape' : 'portrait';
11
13
  }
12
14
  export function registerDevice(server, sessions) {
13
15
  server.registerTool('qa_device_info', {
14
16
  title: 'Device info',
15
- description: 'Read-only device introspection (no consent needed): model/manufacturer/Android SDK+release, supported ABIs, locale, timezone, screen size/density, current orientation, and installed third-party app count. Pass listPackages:true (optionally packageFilter) to include package names.',
17
+ description: 'Read-only device info (no consent). Android: model/manufacturer/SDK+release, ABIs, locale, timezone, screen size/density, orientation, third-party app count (listPackages:true, optionally packageFilter, adds names). iOS Simulator: name, runtime, state, screen size.',
16
18
  inputSchema: {
17
19
  sessionId: z.string(),
18
20
  listPackages: z.boolean().optional().describe('Include installed third-party package names.'),
@@ -20,14 +22,44 @@ export function registerDevice(server, sessions) {
20
22
  },
21
23
  }, async ({ sessionId, listPackages: withPkgs, packageFilter }) => {
22
24
  const session = sessions.get(sessionId);
23
- const { driver } = session ? await getDriver(session) : { driver: undefined };
25
+ if (!session)
26
+ return unknownSessionError(sessionId);
27
+ const { driver, blocked } = await getDriver(session);
24
28
  const serial = driver?.currentDevice();
25
29
  if (!session || !driver || !serial) {
30
+ return (blockedDeviceResult(blocked) ??
31
+ qaError({
32
+ what: 'No device attached to this session',
33
+ changedState: false,
34
+ retrySafe: true,
35
+ nextSteps: ['Call qa_prepare_target first.'],
36
+ }));
37
+ }
38
+ if (driver.kind === 'simulator' || driver.kind === 'wda') {
39
+ // H9: the getprop/settings helpers below are adb-only. On an iOS simulator they would
40
+ // return ok:true with every field null. Report what simctl actually knows instead.
41
+ const sims = await listSimulators().catch(() => []);
42
+ const sim = sims.find((x) => x.udid === serial);
43
+ const screen = await driver.screenSize().catch(() => null);
44
+ const payload = {
45
+ device: serial,
46
+ platform: 'ios',
47
+ backend: driver.kind,
48
+ props: { name: sim?.name ?? null, runtime: sim?.runtime ?? null, state: sim?.state ?? null },
49
+ screen,
50
+ orientation: 'unknown',
51
+ unsupported: ['orientation', 'installedThirdPartyCount', 'packages', 'abis', 'locale', 'timezone'],
52
+ };
53
+ return qaOk(payload, `iOS simulator ${sim?.name ?? serial} · ${sim?.runtime ?? 'runtime ?'} · ${sim?.state ?? '?'}
54
+ ` + `screen ${screen ? `${screen.width}x${screen.height}pt` : '?'} · orientation/packages/locale are not available via simctl`);
55
+ }
56
+ if (driver.kind !== 'direct') {
26
57
  return qaError({
27
- what: 'No device attached to this session',
58
+ what: `Device info is not supported on the "${driver.kind}" backend`,
28
59
  changedState: false,
29
- retrySafe: true,
30
- nextSteps: ['Call qa_prepare_target first.'],
60
+ retrySafe: false,
61
+ failureCode: 'BACKEND_UNSUPPORTED',
62
+ nextSteps: ['Use an Android emulator (adb) or an iOS simulator session.'],
31
63
  });
32
64
  }
33
65
  const [props, screen, density, orientation, pkgs] = await Promise.all([
@@ -55,27 +87,41 @@ export function registerDevice(server, sessions) {
55
87
  });
56
88
  server.registerTool('qa_orientation', {
57
89
  title: 'Set orientation',
58
- description: 'Set screen orientation: portrait | landscape | auto (re-enables auto-rotate). Non-destructive; logged as an environment change and surfaced in qa_report. Useful for testing rotation handling.',
90
+ description: 'Set screen orientation (Android Emulator only): portrait | landscape | auto (re-enables auto-rotate). Non-destructive; logged as an environment change and surfaced in qa_report.',
59
91
  inputSchema: {
60
92
  sessionId: z.string(),
61
93
  orientation: z.enum(['portrait', 'landscape', 'auto']),
62
94
  },
63
95
  }, async ({ sessionId, orientation }) => {
64
96
  const session = sessions.get(sessionId);
65
- const { driver } = session ? await getDriver(session) : { driver: undefined };
97
+ if (!session)
98
+ return unknownSessionError(sessionId);
99
+ const { driver, blocked } = await getDriver(session);
66
100
  const serial = driver?.currentDevice();
67
101
  if (!session || !driver || !serial) {
102
+ return (blockedDeviceResult(blocked) ??
103
+ qaError({
104
+ what: 'No device attached to this session',
105
+ changedState: false,
106
+ retrySafe: true,
107
+ nextSteps: ['Call qa_prepare_target first.'],
108
+ }));
109
+ }
110
+ if (driver.kind !== 'direct') {
111
+ // H9: setOrientation drives adb `settings put`, so on iOS it would fail or no-op.
68
112
  return qaError({
69
- what: 'No device attached to this session',
113
+ what: 'Setting orientation is only supported on the Android emulator backend',
70
114
  changedState: false,
71
- retrySafe: true,
72
- nextSteps: ['Call qa_prepare_target first.'],
115
+ retrySafe: false,
116
+ failureCode: 'BACKEND_UNSUPPORTED',
117
+ nextSteps: ['On an iOS simulator, rotate from the Simulator menu (Device > Rotate Left/Right) or via your WDA client.'],
73
118
  });
74
119
  }
75
120
  try {
76
121
  await setOrientation(serial, orientation);
77
122
  }
78
123
  catch (e) {
124
+ invalidateScreenSizeCache(serial); // a partial failure may still have rotated the device
79
125
  return qaError({
80
126
  what: `Could not set orientation: ${String(e)}`,
81
127
  changedState: false,
@@ -83,7 +129,10 @@ export function registerDevice(server, sessions) {
83
129
  nextSteps: ['Confirm the device is online.'],
84
130
  });
85
131
  }
86
- sessions.addEnvChange(session, `orientation → ${orientation}`);
132
+ // DirectDriver caches screen size + rotation for a short TTL. Drop it so the very next
133
+ // swipe/keyboard check uses the new axes instead of the pre-rotation ones.
134
+ invalidateScreenSizeCache(serial);
135
+ sessions.addEnvChange(session, `orientation > ${orientation}`);
87
136
  const now = await getOrientation(serial);
88
137
  sessions.recordMutation(session, {
89
138
  tool: 'qa_orientation',
@@ -97,7 +146,7 @@ export function registerDevice(server, sessions) {
97
146
  });
98
147
  server.registerTool('qa_geolocation', {
99
148
  title: 'Set location',
100
- description: 'Spoof the device GPS location (emulator only). Consent-gated and logged as an environment change. Useful for testing location-dependent apps (maps, nearby, geofencing). Pass lat + lng (decimal degrees).',
149
+ description: 'Spoof the GPS location (Android Emulator only). Consent-gated and logged as an environment change. For location-based apps (maps, nearby, geofencing). Pass lat + lng (decimal degrees).',
101
150
  inputSchema: {
102
151
  sessionId: z.string(),
103
152
  lat: z.number().describe('Latitude in decimal degrees.'),
@@ -107,15 +156,18 @@ export function registerDevice(server, sessions) {
107
156
  },
108
157
  }, async ({ sessionId, lat, lng, consentId, approve }) => {
109
158
  const session = sessions.get(sessionId);
110
- const { driver } = session ? await getDriver(session) : { driver: undefined };
159
+ if (!session)
160
+ return unknownSessionError(sessionId);
161
+ const { driver, blocked } = await getDriver(session);
111
162
  const serial = driver?.currentDevice();
112
163
  if (!session || !driver || !serial) {
113
- return qaError({
114
- what: 'No device attached to this session',
115
- changedState: false,
116
- retrySafe: true,
117
- nextSteps: ['Call qa_prepare_target first.'],
118
- });
164
+ return (blockedDeviceResult(blocked) ??
165
+ qaError({
166
+ what: 'No device attached to this session',
167
+ changedState: false,
168
+ retrySafe: true,
169
+ nextSteps: ['Call qa_prepare_target first.'],
170
+ }));
119
171
  }
120
172
  if (driver.kind !== 'direct') {
121
173
  return qaError({
@@ -156,7 +208,7 @@ export function registerDevice(server, sessions) {
156
208
  await setGeo(serial, lat, lng);
157
209
  }
158
210
  catch (e) {
159
- const emulatorHint = !serial.startsWith('emulator-') ? ' (this looks like a real device — `adb emu` only works on emulators)' : '';
211
+ const emulatorHint = !serial.startsWith('emulator-') ? ' (this looks like a real device; `adb emu` only works on emulators)' : '';
160
212
  sessions.recordMutation(session, {
161
213
  tool: 'qa_geolocation',
162
214
  action: 'geo_set',
@@ -173,7 +225,7 @@ export function registerDevice(server, sessions) {
173
225
  nextSteps: ['Use an emulator for location spoofing.'],
174
226
  });
175
227
  }
176
- sessions.addEnvChange(session, `geolocation → (${lat}, ${lng})`);
228
+ sessions.addEnvChange(session, `geolocation > (${lat}, ${lng})`);
177
229
  sessions.recordMutation(session, {
178
230
  tool: 'qa_geolocation',
179
231
  action: 'geo_set',
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/tools/device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/tools/device.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,40 @@
1
- // qa_doctor — proactive environment self-diagnosis (DESIGN §3, §7). Run first.
1
+ // qa_doctor: proactive environment self-diagnosis. Run first.
2
2
  import { z } from 'zod';
3
3
  import { existsSync, readdirSync, statSync } from 'node:fs';
4
4
  import { join } from 'node:path';
5
5
  import { qaOk } from '../lib/result.js';
6
6
  import { getSchemaHash } from '../lib/schemaHash.js';
7
- import { which, firstLine, adbDevices, listAvds, deviceFreeDataBytes, fmtBytes } from '../lib/android.js';
7
+ import { which, firstLine, adbDevices, listAvds, deviceFreeDataBytes, fmtBytes, androidSdkCandidates } from '../lib/android.js';
8
8
  import { simctlAvailable, listSimulators } from '../lib/simctl.js';
9
9
  import { checkWda, discoverWdaProjects, xcodeAvailable } from '../lib/wda.js';
10
10
  import { loadWdaConfig } from '../lib/wdaConfig.js';
11
+ import { resolveProjectRoot } from '../context/projectRoot.js';
11
12
  import { SWIPIUM_VERSION, TOOL_NAMES, TOOL_COUNT, STALE_CLIENT_HINT } from '../version.js';
12
13
  const CLIENT_HINTS = {
13
- claude: 'Register with: claude mcp add swipium --scope project -- node <abs>/dist/index.js',
14
- gemini: 'Add to settings.json mcpServers; set an absolute "command" and a "cwd". stdio cwd is otherwise undefined.',
15
- codex: 'Codex has an open tool-injection regression (#19425) on builds after ~0.120.0. Set cwd explicitly, use an absolute node path, and verify tools actually appear after `init codex`.',
14
+ claude: 'Register with: claude mcp add swipium --scope project -- npx -y swipium (preview: `swipium init claude --scope project`).',
15
+ gemini: 'Register with: gemini mcp add swipium npx -y swipium (project scope), or add to .gemini/settings.json mcpServers with "cwd" set to your app repo. Preview: `swipium init gemini`.',
16
+ codex: 'Register with `codex mcp add swipium -- npx -y swipium` or `swipium init codex` (sets cwd + startup_timeout_sec/tool_timeout_sec). Codex Desktop threads may not expose custom stdio MCP tools (openai/codex#19425), so confirm the tools appear.',
17
+ cursor: 'Add to .cursor/mcp.json under "mcpServers": { "swipium": { "command": "npx", "args": ["-y", "swipium"], "env": { "SWIPIUM_PROJECT_ROOT": "${workspaceFolder}" } } } (or run `swipium init cursor --apply`).',
18
+ vscode: 'Add to .vscode/mcp.json under "servers" (not "mcpServers"): { "swipium": { "type": "stdio", "command": "npx", "args": ["-y", "swipium"], "env": { "SWIPIUM_PROJECT_ROOT": "${workspaceFolder}" } } } (or run `swipium init vscode --apply`).',
16
19
  };
20
+ /** Default doctor scope when the caller gives none: iOS Simulator only exists on macOS. */
21
+ export function defaultDoctorPlatform(hostPlatform = process.platform) {
22
+ return hostPlatform === 'darwin' ? 'both' : 'android';
23
+ }
24
+ /** Minimum Node major version, mirrored from package.json "engines.node" (>=20). */
25
+ export const MIN_NODE_MAJOR = 20;
26
+ export function nodeVersionCheck(version = process.version, minMajor = MIN_NODE_MAJOR) {
27
+ const major = Number(/^v?(\d+)/.exec(version)?.[1] ?? NaN);
28
+ const ok = Number.isFinite(major) && major >= minMajor;
29
+ return {
30
+ name: 'node',
31
+ ok,
32
+ detail: ok ? `${version} (>= ${minMajor})` : `${version} is below the supported minimum (>= ${minMajor})`,
33
+ fix: ok
34
+ ? undefined
35
+ : `Install Node.js ${minMajor} or newer (the client launches the server with the node on its PATH or the absolute path in its config).`,
36
+ };
37
+ }
17
38
  function checkLine(c) {
18
39
  const status = c.ok ? '[ok]' : c.optional ? '[warn]' : '[fail]';
19
40
  return `${status} ${c.name}: ${c.detail}${c.fix && !c.ok ? ` -> ${c.fix}` : ''}`;
@@ -54,25 +75,21 @@ function wdaBuildProductStatus(derivedDataPath) {
54
75
  export function registerDoctor(server) {
55
76
  server.registerTool('qa_doctor', {
56
77
  title: 'QA environment doctor',
57
- description: 'Probe the local environment for simulator QA prerequisites. Use platform:"android" for Android Emulator, platform:"ios" for iOS Simulator + WDA status, or platform:"both". Pass client to tailor MCP registration hints.',
78
+ description: 'Check the local toolchain for simulator QA: Node, Android SDK/emulator, Xcode/simctl, WDA, and stale-client symptoms. ' +
79
+ 'platform: android | ios | both (default both on macOS). client tailors MCP registration hints.',
58
80
  inputSchema: {
59
- platform: z
60
- .enum(['android', 'ios', 'both'])
61
- .optional()
62
- .describe('Which simulator environment to evaluate. Defaults to android for backward compatibility.'),
63
- client: z.enum(['claude', 'gemini', 'codex']).optional().describe('Optional: tailor hints to a specific MCP client.'),
64
- expectedToolCount: z
65
- .number()
81
+ platform: z.enum(['android', 'ios', 'both']).optional().describe('Default both on macOS (ready if either is), android elsewhere.'),
82
+ client: z
83
+ .enum(['claude', 'gemini', 'codex', 'cursor', 'vscode'])
66
84
  .optional()
67
- .describe('What your docs/setup expect this server to expose. If it differs from the running server, your client is on a STALE build — restart it.'),
85
+ .describe('Optional: tailor hints to a specific MCP client.'),
86
+ expectedToolCount: z.number().optional().describe('Tool count you expect; a mismatch means a stale client.'),
68
87
  expectedVersion: z.string().optional().describe('Swipium version your docs expect; mismatch ⇒ stale client.'),
69
- expectedSchemaHash: z
70
- .string()
71
- .optional()
72
- .describe('Tool-surface hash your docs expect; mismatch ⇒ the client is on a build with a different surface (same tool count can still be stale).'),
88
+ expectedSchemaHash: z.string().optional().describe('Surface hash you expect; a mismatch means a stale client.'),
73
89
  },
74
- }, async ({ platform = 'android', client, expectedToolCount, expectedVersion, expectedSchemaHash }) => {
75
- const requested = platform;
90
+ }, async ({ platform, client, expectedToolCount, expectedVersion, expectedSchemaHash }) => {
91
+ const defaulted = platform === undefined;
92
+ const requested = (platform ?? defaultDoctorPlatform());
76
93
  const wantsAndroid = requested === 'android' || requested === 'both';
77
94
  const wantsIos = requested === 'ios' || requested === 'both';
78
95
  const checks = [];
@@ -92,21 +109,27 @@ export function registerDoctor(server) {
92
109
  ok,
93
110
  detail: ok
94
111
  ? `client matches running server (v${SWIPIUM_VERSION}, ${TOOL_COUNT} tools, schema ${schemaHash})`
95
- : `STALE CLIENT — running v${SWIPIUM_VERSION}/${TOOL_COUNT} tools/schema ${schemaHash} but client expected ${expectedVersion ?? '?'}/${expectedToolCount ?? '?'}/${expectedSchemaHash ?? '?'}`,
112
+ : `STALE CLIENT: running v${SWIPIUM_VERSION}/${TOOL_COUNT} tools/schema ${schemaHash} but client expected ${expectedVersion ?? '?'}/${expectedToolCount ?? '?'}/${expectedSchemaHash ?? '?'}`,
96
113
  fix: ok ? undefined : STALE_CLIENT_HINT,
97
114
  });
98
115
  }
99
- checks.push({ name: 'node', ok: true, detail: process.version });
116
+ checks.push(nodeVersionCheck());
117
+ const nodeOk = checks[checks.length - 1].ok;
100
118
  let devices = [];
101
119
  let avds = [];
102
120
  let androidReady = true;
103
121
  if (wantsAndroid) {
122
+ // PATH lookup: at startup src/index.ts prepends the SDK's platform-tools/ and emulator/
123
+ // ($ANDROID_HOME, $ANDROID_SDK_ROOT, OS default) to PATH, so this sees SDK copies too.
104
124
  const hasAdb = await which('adb');
125
+ const sdkDirs = androidSdkCandidates().join(', ');
105
126
  androidChecks.push({
106
127
  name: 'adb',
107
128
  ok: hasAdb,
108
- detail: hasAdb ? ((await firstLine('adb', ['version'])) ?? 'present') : 'not on PATH',
109
- fix: hasAdb ? undefined : 'Install Android platform-tools and add to PATH (ANDROID_HOME/platform-tools).',
129
+ detail: hasAdb ? ((await firstLine('adb', ['version'])) ?? 'present') : `not on PATH (SDK dirs checked: ${sdkDirs})`,
130
+ fix: hasAdb
131
+ ? undefined
132
+ : 'Install Android platform-tools (Android Studio > SDK Manager) and set ANDROID_HOME to the SDK dir (or put platform-tools on PATH).',
110
133
  });
111
134
  devices = hasAdb ? await adbDevices() : [];
112
135
  const deviceDetails = await Promise.all(devices.map(async (d) => {
@@ -132,7 +155,11 @@ export function registerDoctor(server) {
132
155
  name: 'emulator+avd',
133
156
  ok: hasEmulator && avds.length > 0,
134
157
  optional: devices.length > 0,
135
- detail: hasEmulator ? (avds.length ? `AVDs: ${avds.join(', ')}` : 'emulator present, no AVDs') : 'emulator not on PATH',
158
+ detail: hasEmulator
159
+ ? avds.length
160
+ ? `AVDs: ${avds.join(', ')}`
161
+ : 'emulator present, no AVDs'
162
+ : `emulator not on PATH (SDK dirs checked: ${sdkDirs})`,
136
163
  fix: hasEmulator && avds.length === 0
137
164
  ? 'Create an AVD with Android Studio or avdmanager.'
138
165
  : hasEmulator
@@ -187,7 +214,9 @@ export function registerDoctor(server) {
187
214
  detail: simulators.length ? `${booted.length} booted, ${simulators.length} available` : 'no iOS simulators available',
188
215
  fix: simulators.length ? undefined : 'Install an iOS Simulator runtime in Xcode and create a simulator.',
189
216
  });
190
- const root = process.cwd();
217
+ // The WDA cache/config live under the PROJECT root (SWIPIUM_PROJECT_ROOT / MCP roots / cwd
218
+ // marker), not blindly the server cwd.
219
+ const root = (await resolveProjectRoot(server)).root ?? process.cwd();
191
220
  const wdaConfig = loadWdaConfig(root);
192
221
  const wda = await checkWda(wdaConfig.url, 1200);
193
222
  const discovery = discoverWdaProjects(root);
@@ -219,17 +248,28 @@ export function registerDoctor(server) {
219
248
  checks.push(...iosChecks);
220
249
  iosReady = iosChecks.filter((c) => !c.optional).every((c) => c.ok);
221
250
  wdaSummary = {
251
+ projectRoot: root,
222
252
  config: { url: wdaConfig.url, mode: wdaConfig.mode, derivedDataPath: wdaConfig.derivedDataPath },
223
253
  status: wda,
224
254
  projectDiscovery: discovery,
225
255
  buildProduct: wdaProduct,
226
256
  };
227
257
  }
228
- const requiredOk = requested === 'android' ? androidReady : requested === 'ios' ? iosReady : androidReady && iosReady;
258
+ // An explicit platform:"both" means "both must work"; the macOS default only needs one of them
259
+ // (an iOS-only or Android-only developer on a Mac must not be told the environment is broken).
260
+ const platformOk = requested === 'android'
261
+ ? androidReady
262
+ : requested === 'ios'
263
+ ? iosReady
264
+ : defaulted
265
+ ? androidReady || iosReady
266
+ : androidReady && iosReady;
267
+ const requiredOk = platformOk && nodeOk;
229
268
  const clientHint = client ? CLIENT_HINTS[client] : undefined;
230
269
  const table = checks.map(checkLine).join('\n');
270
+ const readyLabel = requested === 'both' && defaulted && !(androidReady && iosReady) ? (androidReady ? 'android' : 'ios') : requested;
231
271
  const summary = `Swipium v${SWIPIUM_VERSION} · ${TOOL_COUNT} tools · schema ${schemaHash}\n${STALE_CLIENT_HINT}\n\n` +
232
- `${requiredOk ? `Environment ready for ${requested} simulator QA.` : `Environment NOT ready for ${requested} simulator QA. See [fail] rows.`}\n${table}`;
272
+ `${requiredOk ? `Environment ready for ${readyLabel} simulator QA.` : `Environment NOT ready for ${requested} simulator QA. See [fail] rows.`}\n${table}`;
233
273
  return qaOk({
234
274
  swipiumVersion: SWIPIUM_VERSION,
235
275
  schemaHash,
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/tools/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/tools/doctor.ts"],"names":[],"mappings":"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"}