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 +1 @@
1
- {"version":3,"file":"visual.js","sourceRoot":"","sources":["../../src/tools/visual.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visual.js","sourceRoot":"","sources":["../../src/tools/visual.ts"],"names":[],"mappings":"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"}
@@ -1,56 +1,27 @@
1
- // qa_wait — non-shell synchronization for setup conditions (Phase 2.1 P1.6), so agents
2
- // don't shell out to `sleep`/poll. Waits for: device_online, metro_ready (serving), or
3
- // a job_done. Returns timeout + current state + next steps.
1
+ // qa_wait: non-shell synchronization for setup conditions, so agents don't shell out to
2
+ // `sleep`/poll. Waits for: device_online or metro_ready (serving). Jobs are waited on with
3
+ // qa_job_status waitMs. Returns timeout + current state + next steps.
4
4
  import { z } from 'zod';
5
- import { qaOk, qaError } from '../lib/result.js';
5
+ import { qaOk, unknownSessionError } from '../lib/result.js';
6
6
  import { resolveDevice } from '../session/attach.js';
7
7
  import { metroReadiness } from '../lib/metroState.js';
8
8
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
9
9
  export function registerWait(server, sessions) {
10
10
  server.registerTool('qa_wait', {
11
11
  title: 'Wait for a setup condition',
12
- description: 'Block (bounded) until a non-UI condition holds, instead of shelling out to sleep/poll: for="device_online" (a device appears), "metro_ready" (Metro serving the bundle), or "job_done" (a qa_prepare_target jobId finishes). Returns satisfied/timedOut + the current state + next steps.',
12
+ description: 'Block (bounded) until a setup condition holds instead of shelling out to sleep: for="device_online" (a device appears) or ' +
13
+ '"metro_ready" (Metro serving the bundle). Returns satisfied/timedOut + current state. To wait for a job, use qa_job_status waitMs.',
13
14
  inputSchema: {
14
15
  sessionId: z.string(),
15
- for: z.enum(['device_online', 'metro_ready', 'job_done']),
16
- jobId: z.string().optional().describe('Required for for="job_done".'),
16
+ for: z.enum(['device_online', 'metro_ready']),
17
17
  timeoutMs: z.number().optional().describe('default 60000 (180000 for device_online).'),
18
18
  },
19
- }, async ({ sessionId, for: cond, jobId, timeoutMs }) => {
19
+ }, async ({ sessionId, for: cond, timeoutMs }) => {
20
20
  const session = sessions.get(sessionId);
21
21
  if (!session)
22
- return qaError({
23
- what: `Unknown sessionId ${sessionId}`,
24
- changedState: false,
25
- retrySafe: true,
26
- nextSteps: ['Call qa_start_session first.'],
27
- });
22
+ return unknownSessionError(sessionId);
28
23
  const deadline = Date.now() + (timeoutMs ?? (cond === 'device_online' ? 180000 : 60000));
29
24
  const intervalMs = 1500;
30
- if (cond === 'job_done') {
31
- if (!jobId)
32
- return qaError({
33
- what: 'for="job_done" needs jobId',
34
- changedState: false,
35
- retrySafe: true,
36
- nextSteps: ['Pass the jobId from qa_prepare_target.'],
37
- });
38
- while (Date.now() < deadline) {
39
- const job = session.jobs.get(jobId);
40
- if (!job)
41
- return qaError({ what: `Unknown job ${jobId}`, changedState: false, retrySafe: true, nextSteps: ['Check the jobId.'] });
42
- if (job.status !== 'running') {
43
- return qaOk({ satisfied: true, condition: cond, jobStatus: job.status, result: job.result, error: job.error }, `job ${jobId} = ${job.status}${job.error ? `: ${job.error}` : ''}`);
44
- }
45
- await sleep(intervalMs);
46
- }
47
- return qaError({
48
- what: `Timed out waiting for job ${jobId}`,
49
- changedState: false,
50
- retrySafe: true,
51
- nextSteps: ['Poll qa_job_status, or qa_job_cancel.'],
52
- });
53
- }
54
25
  while (Date.now() < deadline) {
55
26
  if (cond === 'device_online') {
56
27
  const dev = await resolveDevice(session);
@@ -1 +1 @@
1
- {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/tools/wait.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/tools/wait.ts"],"names":[],"mappings":"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"}
package/dist/tools/wda.js CHANGED
@@ -1,27 +1,70 @@
1
1
  import { z } from 'zod';
2
2
  import { spawn } from 'node:child_process';
3
- import { existsSync, openSync, readFileSync, readdirSync, statSync } from 'node:fs';
3
+ import { closeSync, existsSync, openSync, readFileSync, readdirSync, statSync } from 'node:fs';
4
4
  import { isAbsolute, join } from 'node:path';
5
- import { qaError, qaOk } from '../lib/result.js';
5
+ import { qaError, qaOk, unknownSessionError } from '../lib/result.js';
6
6
  import { consumeConsent, requireConsent } from '../consent/consent.js';
7
7
  import { sensitiveRefusal } from '../lib/sensitive.js';
8
8
  import { run } from '../lib/spawn.js';
9
- import { checkWda, classifyWdaBuildFailure, classifyWdaConnectionFailure, createWdaSession, discoverWdaProjects, managedWdaBuildArgs, managedWdaStartArgs, waitForWdaReady, wdaSessionUdidMismatch, xcodeAvailable, } from '../lib/wda.js';
9
+ import { checkWda, classifyWdaBuildFailure, classifyWdaConnectionFailure, createWdaSession, discoverAppiumWdaProjects, discoverWdaProjects, managedWdaBuildArgs, managedWdaStartArgs, waitForWdaReady, wdaSessionUdidMismatch, xcodeAvailable, isLoopbackWdaUrl, remoteWdaAllowedByUser, REMOTE_WDA_ENV, } from '../lib/wda.js';
10
10
  import { loadWdaConfig, wdaSigningStatus, wdaUrlAllowedByConfig } from '../lib/wdaConfig.js';
11
11
  import { recordWdaTiming, wdaRecommendations, wdaTimingSummary } from '../lib/wdaTune.js';
12
12
  import { WdaDriver } from '../drivers/WdaDriver.js';
13
13
  import * as sim from '../lib/simctl.js';
14
- import { registerManagedProcess, unregisterManagedProcess } from '../session/processRegistry.js';
14
+ import { findManagedWdaProcesses, killManagedWda, reclaimPid, registerManagedProcess, registeredWdaForSession, unregisterManagedProcess, } from '../session/processRegistry.js';
15
15
  const managedProcesses = new Map();
16
- function isLoopback(raw) {
16
+ function pidIsAlive(pid) {
17
+ if (!(pid > 0))
18
+ return false;
17
19
  try {
18
- const u = new URL(raw);
19
- return u.protocol === 'http:' && ['127.0.0.1', 'localhost', '::1'].includes(u.hostname);
20
+ process.kill(pid, 0);
21
+ return true;
20
22
  }
21
23
  catch {
22
24
  return false;
23
25
  }
24
26
  }
27
+ /** A managed WDA this server still runs for the session (started here, or adopted at startup).
28
+ * A dead in-memory entry is dropped. */
29
+ function liveManagedWda(sessionId) {
30
+ const own = managedProcesses.get(sessionId);
31
+ if (own) {
32
+ if (pidIsAlive(own.pid))
33
+ return { pid: own.pid, adopted: false };
34
+ managedProcesses.delete(sessionId);
35
+ unregisterManagedProcess(own.pid);
36
+ }
37
+ const adopted = registeredWdaForSession(sessionId);
38
+ return adopted && pidIsAlive(adopted.pid) ? { pid: adopted.pid, adopted: true } : undefined;
39
+ }
40
+ /** The managed-WDA signature of this session's latest successful `qa_wda start` (from the
41
+ * mutation ledger, which survives a server restart). Lets `qa_wda stop` find the xcodebuild
42
+ * even when its process-registry entry was lost. Exported for tests. */
43
+ export function lastManagedWdaStart(session) {
44
+ const m = [...(session.mutations ?? [])]
45
+ .reverse()
46
+ .find((r) => r.tool === 'qa_wda' && r.action === 'wda_start' && r.status === 'executed' && typeof r.target?.projectPath === 'string');
47
+ if (!m)
48
+ return undefined;
49
+ const t = m.target;
50
+ if (typeof t.udid !== 'string' || !t.udid)
51
+ return undefined;
52
+ let port;
53
+ try {
54
+ const u = new URL(String(t.webDriverAgentUrl ?? ''));
55
+ port = Number(u.port) || undefined;
56
+ }
57
+ catch {
58
+ port = undefined;
59
+ }
60
+ return {
61
+ projectPath: t.projectPath,
62
+ udid: t.udid,
63
+ ...(typeof t.derivedDataPath === 'string' && t.derivedDataPath ? { derivedDataPath: t.derivedDataPath } : {}),
64
+ ...(port ? { port } : {}),
65
+ };
66
+ }
67
+ const isLoopback = isLoopbackWdaUrl;
25
68
  function latestWdaArtifacts(session) {
26
69
  const logs = [...session.artifacts].reverse().filter((a) => a.kind === 'wda');
27
70
  const latestBuildLog = logs.find((a) => /build/i.test(a.label ?? a.path)) ?? null;
@@ -77,57 +120,58 @@ function managedWdaBuildProductStatus(derivedDataPath) {
77
120
  export function registerWda(server, sessions) {
78
121
  server.registerTool('qa_wda', {
79
122
  title: 'WebDriverAgent diagnostics and attach',
80
- description: 'Diagnose, attach, or manage an iOS WebDriverAgent backend. External WDA: pass webDriverAgentUrl, then action:"attach". Managed WDA: pass wdaProjectPath + udid for build/start; output is captured as artifacts.',
123
+ description: 'Diagnose, attach, or manage an iOS WebDriverAgent backend for structured iOS tap/type/snapshot. External WDA: ' +
124
+ 'action:"attach" with webDriverAgentUrl (default http://127.0.0.1:8100). Managed WDA: build/start (consent-gated) from ' +
125
+ 'wdaProjectPath or an installed Appium WDA; stop ends it. status/doctor/diagnose/logs/tune inspect a setup.',
81
126
  inputSchema: {
82
127
  sessionId: z.string(),
83
128
  action: z.enum(['status', 'doctor', 'build', 'start', 'stop', 'attach', 'diagnose', 'logs', 'tune']),
84
- webDriverAgentUrl: z
85
- .string()
86
- .optional()
87
- .describe('External WDA base URL. Defaults to http://127.0.0.1:8100. Non-loopback URLs are refused by default.'),
88
- udid: z
89
- .string()
90
- .optional()
91
- .describe('iOS simulator UDID expected behind this WDA endpoint (this tool is iOS-only; other tools use `device`).'),
92
- bundleId: z.string().optional().describe('App bundle id for session creation. Defaults to the session appId.'),
93
- wdaProjectPath: z
94
- .string()
95
- .optional()
96
- .describe('Path to WebDriverAgent.xcodeproj for managed build/start. Relative paths resolve from project root.'),
97
- derivedDataPath: z
98
- .string()
99
- .optional()
100
- .describe('Optional xcodebuild -derivedDataPath for WDA caching/reuse. Relative paths resolve from project root.'),
129
+ webDriverAgentUrl: z.string().optional().describe('Default http://127.0.0.1:8100; non-loopback needs allowNonLoopback + consent.'),
130
+ device: z.string().optional().describe('Simulator UDID behind this WDA (default: the session device).'),
131
+ udid: z.string().optional().describe('Deprecated alias of device.'),
132
+ bundleId: z.string().optional().describe('Default: the session appId.'),
133
+ wdaProjectPath: z.string().optional().describe('WebDriverAgent.xcodeproj (default: Appium WDA if found).'),
134
+ derivedDataPath: z.string().optional().describe('xcodebuild -derivedDataPath for reuse.'),
101
135
  scheme: z.string().optional().describe('WDA xcodebuild scheme. Defaults to WebDriverAgentRunner.'),
102
136
  allowNonLoopback: z.boolean().optional().describe('Required to use a non-loopback external WDA URL.'),
103
137
  consentId: z.string().optional(),
104
138
  approve: z.boolean().optional(),
105
139
  },
106
- }, async ({ sessionId, action, webDriverAgentUrl, udid, bundleId, wdaProjectPath, derivedDataPath, scheme, allowNonLoopback, consentId, approve, }) => {
140
+ }, async ({ sessionId, action, webDriverAgentUrl, device, udid: udidAlias, bundleId, wdaProjectPath, derivedDataPath, scheme, allowNonLoopback, consentId, approve, }) => {
107
141
  const session = sessions.get(sessionId);
108
142
  if (!session)
143
+ return unknownSessionError(sessionId);
144
+ // `device` is canonical (as on every other tool); `udid` is the deprecated alias.
145
+ if (device && udidAlias && device !== udidAlias)
109
146
  return qaError({
110
- what: `Unknown sessionId ${sessionId}`,
147
+ what: `Conflicting device "${device}" and udid "${udidAlias}"; udid is a deprecated alias of device`,
111
148
  changedState: false,
112
149
  retrySafe: true,
113
- nextSteps: ['Call qa_start_session first.'],
150
+ failureCode: 'INVALID_ARGUMENT',
151
+ nextSteps: ['Pass only device.'],
114
152
  });
153
+ const udid = device ?? udidAlias;
115
154
  const configured = loadWdaConfig(session.root);
116
155
  const url = webDriverAgentUrl ?? configured.url;
117
156
  const loopback = isLoopback(url);
118
- const configAllowed = !loopback && wdaUrlAllowedByConfig(configured, url);
119
- if (!loopback && !allowNonLoopback && !configAllowed) {
157
+ // Only the USER can pre-approve a remote WDA (env var in the MCP client config). The repo's
158
+ // .swipium/config.json (ios.wda.url / allowNonLoopbackUrls) arrives with the checkout, so it
159
+ // can never skip the per-call consent.
160
+ const userAllowed = !loopback && remoteWdaAllowedByUser(url);
161
+ const repoListed = !loopback && wdaUrlAllowedByConfig(configured, url);
162
+ if (!loopback && !allowNonLoopback && !userAllowed) {
120
163
  return qaError({
121
- what: 'Refused non-loopback WDA URL',
164
+ what: `Refused non-loopback WDA URL ${url}${webDriverAgentUrl ? '' : ' (from the repository config .swipium/config.json)'}`,
122
165
  changedState: false,
123
166
  retrySafe: false,
124
167
  failureCode: 'DESTRUCTIVE_REFUSED',
125
168
  nextSteps: [
126
- 'Use a localhost WDA URL, pass allowNonLoopback with explicit consent, or add this exact URL to ios.wda.allowNonLoopbackUrls for a trusted isolated automation network.',
169
+ `Use a localhost WDA URL, pass allowNonLoopback:true and approve the consent prompt, or (user-level, trusted isolated network only) set ${REMOTE_WDA_ENV}=<exact url> in the MCP server environment.`,
170
+ ...(repoListed ? ['ios.wda.allowNonLoopbackUrls in the repository config no longer pre-approves a remote WDA.'] : []),
127
171
  ],
128
172
  });
129
173
  }
130
- if (!loopback && !configAllowed) {
174
+ if (!loopback && !userAllowed) {
131
175
  const gate = consumeConsent(consentId, approve, { action: 'wda_non_loopback', affects: { url } });
132
176
  if (!gate.approved) {
133
177
  return requireConsent({
@@ -135,13 +179,21 @@ export function registerWda(server, sessions) {
135
179
  risk: 'medium',
136
180
  exactCommand: `connect to WebDriverAgent at ${url}`,
137
181
  affects: { url },
138
- explain: `Use non-loopback WebDriverAgent URL ${url}? WDA is an automation server; only approve this on a trusted, isolated network.`,
182
+ explain: `Use non-loopback WebDriverAgent URL ${url}${webDriverAgentUrl ? '' : ' (configured by the repository (.swipium/config.json), unreviewed)'}? WDA is an automation server that receives app screens and typed text; only approve this on a trusted, isolated network.`,
139
183
  });
140
184
  }
141
185
  }
142
186
  const resolvePath = (p) => (p ? (isAbsolute(p) ? p : join(session.root, p)) : undefined);
143
- const projectPath = resolvePath(wdaProjectPath);
187
+ const explicitProjectPath = resolvePath(wdaProjectPath);
188
+ // Managed build/start without wdaProjectPath: use a user-installed Appium WebDriverAgent
189
+ // (~/.appium/…/appium-webdriveragent, global npm), reported as wdaProjectSource.
190
+ const discoveredAppiumProject = !explicitProjectPath && (action === 'build' || action === 'start') ? discoverAppiumWdaProjects()[0] : undefined;
191
+ const projectPath = explicitProjectPath ?? discoveredAppiumProject;
192
+ const wdaProjectSource = explicitProjectPath ? 'argument' : discoveredAppiumProject ? 'appium-discovered' : null;
144
193
  const ddPath = resolvePath(derivedDataPath) ?? configured.derivedDataPath;
194
+ // What this call actually uses (args over config), echoed as `wdaConfig` so a passed
195
+ // derivedDataPath / webDriverAgentUrl is not misreported as the configured default.
196
+ const effectiveConfig = { ...configured, url, derivedDataPath: ddPath };
145
197
  const targetUdid = udid ?? session.device;
146
198
  if (udid && session.device && udid !== session.device) {
147
199
  return qaError({
@@ -168,14 +220,53 @@ export function registerWda(server, sessions) {
168
220
  if (action === 'tune') {
169
221
  const recommendations = wdaRecommendations(configured, session);
170
222
  const timings = wdaTimingSummary(session);
171
- return qaOk({ webDriverAgentUrl: url, wdaConfig: configured, timings, recommendations }, recommendations.length
223
+ return qaOk({ webDriverAgentUrl: url, wdaConfig: effectiveConfig, timings, recommendations }, recommendations.length
172
224
  ? `WDA tuning recommendations:\n${recommendations.map((r) => ` - ${r.setting}=${JSON.stringify(r.value)}: ${r.reason}`).join('\n')}`
173
225
  : 'WDA tuning: no recommendations from current session evidence.');
174
226
  }
175
227
  if (action === 'stop') {
176
228
  const proc = managedProcesses.get(session.id);
177
- if (!proc)
178
- return qaOk({ stopped: false }, 'no managed WDA process recorded for this session');
229
+ if (!proc) {
230
+ // A WDA started by a previous server run and adopted at startup (processRegistry).
231
+ const adopted = registeredWdaForSession(session.id);
232
+ const outcome = adopted ? reclaimPid(adopted.pid, 'wda', undefined, adopted) : undefined; // fingerprint-checked
233
+ if (adopted)
234
+ unregisterManagedProcess(adopted.pid);
235
+ if (adopted && outcome === 'killed') {
236
+ sessions.addEnvChange(session, `wda stop pid ${adopted.pid} (adopted)`);
237
+ sessions.recordMutation(session, {
238
+ tool: 'qa_wda',
239
+ action: 'wda_stop',
240
+ risk: 'low',
241
+ target: { pid: adopted.pid, adopted: true, webDriverAgentUrl: adopted.endpoint ?? null },
242
+ consent: { required: false, approved: true },
243
+ status: 'restored',
244
+ detail: `adopted WDA ${outcome}`,
245
+ });
246
+ return qaOk({ stopped: true, pid: adopted.pid, adopted: true, outcome }, `stopped adopted managed WDA pid ${adopted.pid}`);
247
+ }
248
+ // Registry entry lost (or unverifiable): find the managed xcodebuild this session started
249
+ // by its exact signature (project + destination + derived data), never by pid alone.
250
+ const sig = lastManagedWdaStart(session);
251
+ const pids = sig ? findManagedWdaProcesses(sig) : [];
252
+ const killed = pids.filter((pid) => killManagedWda(pid));
253
+ if (!killed.length) {
254
+ if (adopted)
255
+ return qaOk({ stopped: false, pid: adopted.pid, adopted: true, outcome }, `adopted WDA pid ${adopted.pid} was already ${outcome}`);
256
+ return qaOk({ stopped: false }, 'no managed WDA process recorded for this session');
257
+ }
258
+ sessions.addEnvChange(session, `wda stop pid ${killed.join(',')} (recovered by signature)`);
259
+ sessions.recordMutation(session, {
260
+ tool: 'qa_wda',
261
+ action: 'wda_stop',
262
+ risk: 'low',
263
+ target: { pids: killed, recovered: true, projectPath: sig.projectPath, udid: sig.udid },
264
+ consent: { required: false, approved: true },
265
+ status: 'restored',
266
+ detail: 'managed WDA located by command signature (registry entry missing)',
267
+ });
268
+ return qaOk({ stopped: true, pid: killed[0], pids: killed, recovered: true }, `stopped managed WDA pid ${killed.join(', ')} (located by its xcodebuild signature; registry entry was missing)`);
269
+ }
179
270
  try {
180
271
  process.kill(proc.pid, 'SIGTERM');
181
272
  }
@@ -202,7 +293,7 @@ export function registerWda(server, sessions) {
202
293
  changedState: false,
203
294
  retrySafe: true,
204
295
  failureCode: 'NO_DEVICE',
205
- nextSteps: ['Boot/select a simulator with qa_ios boot, or pass udid explicitly.'],
296
+ nextSteps: ['Boot/select a simulator with qa_ios boot, or pass device explicitly.'],
206
297
  });
207
298
  }
208
299
  if (action === 'start' && configured.reuse) {
@@ -218,11 +309,23 @@ export function registerWda(server, sessions) {
218
309
  webDriverAgentUrl: url,
219
310
  udid: targetUdid,
220
311
  wda: existing,
221
- wdaConfig: configured,
312
+ wdaConfig: effectiveConfig,
222
313
  reuseCheckMs,
223
314
  }, `reused existing WDA at ${url}; /status is ready\nNext: qa_wda attach.`);
224
315
  }
225
316
  }
317
+ // Never start a second managed xcodebuild over a live one: the new runner would fight it
318
+ // for the port and the old one would be orphaned (managedProcesses would be overwritten).
319
+ const running = action === 'start' ? liveManagedWda(session.id) : undefined;
320
+ if (running) {
321
+ return qaError({
322
+ what: `A managed WDA (pid ${running.pid}${running.adopted ? ', adopted from a previous server run' : ''}) is already running for this session`,
323
+ changedState: false,
324
+ retrySafe: true,
325
+ failureCode: 'WDA_START_FAILED',
326
+ nextSteps: ['Use it (qa_wda attach), or stop it first with qa_wda { action:"stop" } and retry start.'],
327
+ }, { managedPid: running.pid, adopted: running.adopted, webDriverAgentUrl: url });
328
+ }
226
329
  const xcode = await xcodeAvailable();
227
330
  if (!xcode.available) {
228
331
  return qaError({
@@ -239,8 +342,10 @@ export function registerWda(server, sessions) {
239
342
  changedState: false,
240
343
  retrySafe: true,
241
344
  failureCode: 'NO_ARTIFACT',
242
- nextSteps: ['Pass wdaProjectPath, for example path/to/WebDriverAgent.xcodeproj.'],
243
- }, { xcode, wdaProjectPath: projectPath ?? null });
345
+ nextSteps: [
346
+ "Pass wdaProjectPath, for example path/to/WebDriverAgent.xcodeproj, or install Appium's WebDriverAgent (appium driver install xcuitest) so it is auto-discovered under ~/.appium.",
347
+ ],
348
+ }, { xcode, wdaProjectPath: projectPath ?? null, wdaProjectSource });
244
349
  }
245
350
  const args = action === 'build'
246
351
  ? managedWdaBuildArgs({
@@ -326,17 +431,36 @@ export function registerWda(server, sessions) {
326
431
  status: 'executed',
327
432
  ledgerUri: logUri,
328
433
  });
329
- return qaOk({ built: true, logUri, xcode, command: ['xcodebuild', ...args], wdaConfig: configured }, `WDA build completed → ${logUri}`);
434
+ const wdaBuildProduct = managedWdaBuildProductStatus(ddPath);
435
+ return qaOk({
436
+ built: true,
437
+ logUri,
438
+ xcode,
439
+ command: ['xcodebuild', ...args],
440
+ wdaConfig: effectiveConfig,
441
+ wdaProjectPath: projectPath,
442
+ wdaProjectSource,
443
+ derivedDataPath: ddPath,
444
+ wdaBuildProduct,
445
+ }, `WDA build completed (${wdaProjectSource === 'appium-discovered' ? 'auto-discovered Appium WDA ' : ''}${projectPath}) > ${logUri}`);
330
446
  }
331
447
  const logUri = sessions.saveArtifact(session, 'wda', `wda-start-${Date.now()}.log`, '', 'text/plain', 'WDA start log');
332
448
  const rec = sessions.findArtifact(logUri);
333
449
  const fd = openSync(rec.rec.path, 'a');
334
450
  sessions.milestone(session, 'wda_start_start');
335
- const child = spawn('xcodebuild', args, { detached: true, stdio: ['ignore', fd, fd] });
451
+ let child;
452
+ try {
453
+ child = spawn('xcodebuild', args, { detached: true, stdio: ['ignore', fd, fd] });
454
+ }
455
+ finally {
456
+ closeSync(fd); // the child holds its own duplicate; ours would leak one fd per start
457
+ }
336
458
  sessions.milestone(session, 'wda_start_end');
459
+ child.on('error', () => undefined); // spawn failure surfaces as WDA_START_FAILED below, not a crash
337
460
  child.unref();
338
461
  managedProcesses.set(session.id, { pid: child.pid ?? -1, logUri });
339
- registerManagedProcess(child.pid, 'wda', session.id); // reapable if this server crashes
462
+ // Reapable if this server crashes; `endpoint` lets the next server adopt it when healthy.
463
+ registerManagedProcess(child.pid, 'wda', session.id, { endpoint: url });
340
464
  sessions.addEnvChange(session, `wda start pid ${child.pid ?? 'unknown'} ${projectPath} ${targetUdid}`);
341
465
  sessions.recordMutation(session, {
342
466
  tool: 'qa_wda',
@@ -391,7 +515,7 @@ export function registerWda(server, sessions) {
391
515
  logUri,
392
516
  webDriverAgentUrl: url,
393
517
  command: ['xcodebuild', ...args],
394
- wdaConfig: configured,
518
+ wdaConfig: effectiveConfig,
395
519
  wda: waited.status,
396
520
  startupWaitMs: waited.durationMs,
397
521
  });
@@ -402,11 +526,13 @@ export function registerWda(server, sessions) {
402
526
  pid: child.pid ?? null,
403
527
  logUri,
404
528
  webDriverAgentUrl: url,
529
+ wdaProjectPath: projectPath,
530
+ wdaProjectSource,
405
531
  command: ['xcodebuild', ...args],
406
- wdaConfig: configured,
532
+ wdaConfig: effectiveConfig,
407
533
  wda: waited.status,
408
534
  startupWaitMs: waited.durationMs,
409
- }, `started managed WDA pid ${child.pid ?? 'unknown'} and /status is ready → ${logUri}\nNext: qa_wda attach.`);
535
+ }, `started managed WDA pid ${child.pid ?? 'unknown'} and /status is ready > ${logUri}\nNext: qa_wda attach.`);
410
536
  }
411
537
  const status = await checkWda(url);
412
538
  const xcode = await xcodeAvailable();
@@ -414,7 +540,9 @@ export function registerWda(server, sessions) {
414
540
  const appId = bundleId ?? session.appId ?? null;
415
541
  const artifactSummary = latestWdaArtifacts(session);
416
542
  const wdaProjectDiscovery = discoverWdaProjects(session.root, projectPath ? [projectPath] : []);
417
- const wdaBuildProduct = configured.mode === 'managed' || !!projectPath ? managedWdaBuildProductStatus(ddPath) : null;
543
+ // Reported whenever managed WDA is in play OR a derived-data cache exists (e.g. after a
544
+ // qa_wda build that used an auto-discovered Appium project and no explicit path).
545
+ const wdaBuildProduct = configured.mode === 'managed' || !!projectPath || existsSync(ddPath) ? managedWdaBuildProductStatus(ddPath) : null;
418
546
  const simctlOk = await sim.simctlAvailable().catch(() => false);
419
547
  const simulators = simctlOk ? await sim.listSimulators().catch(() => []) : [];
420
548
  const bootedSimulators = simulators.filter((s) => s.state === 'Booted');
@@ -429,7 +557,7 @@ export function registerWda(server, sessions) {
429
557
  bundleId: appId,
430
558
  webDriverAgentUrl: url,
431
559
  wda: status,
432
- wdaConfig: configured,
560
+ wdaConfig: effectiveConfig,
433
561
  wdaProjectDiscovery,
434
562
  signing: wdaSigningStatus(configured),
435
563
  wdaBuildProduct,
@@ -458,11 +586,13 @@ export function registerWda(server, sessions) {
458
586
  issues.push(issue('IOS_SIMULATOR_RUNTIME_MISSING', 'xcrun simctl is available, but no iOS simulators were found', 'Install an iOS simulator runtime in Xcode, create an iPhone simulator, then retry qa_wda doctor.', 'blocker', 'SIMULATOR_RUNTIME_MISSING'));
459
587
  }
460
588
  else if (!bootedUdid && simctlOk && bootedSimulators.length === 0) {
461
- issues.push(issue('NO_BOOTED_SIMULATOR', 'no booted iOS simulator was detected', 'Boot/select a simulator with qa_ios boot, or pass udid for an already-running WDA target.'));
589
+ issues.push(issue('NO_BOOTED_SIMULATOR', 'no booted iOS simulator was detected', 'Boot/select a simulator with qa_ios boot, or pass device for an already-running WDA target.'));
462
590
  }
463
591
  if (!bootedUdid)
464
- issues.push(issue('NO_UDID', 'no simulator/device UDID is bound to this session', 'Boot/select a simulator with qa_ios boot, or pass udid explicitly.'));
465
- if (wantsManaged && (!projectPath || !existsSync(projectPath))) {
592
+ issues.push(issue('NO_UDID', 'no simulator/device UDID is bound to this session', 'Boot/select a simulator with qa_ios boot, or pass device explicitly.'));
593
+ // No path given but a user-installed Appium WDA exists: build/start will auto-use it.
594
+ const appiumAuto = wantsManaged && !projectPath ? discoverAppiumWdaProjects()[0] : undefined;
595
+ if (wantsManaged && (!projectPath || !existsSync(projectPath)) && !appiumAuto) {
466
596
  const discovered = wdaProjectDiscovery.candidates[0];
467
597
  issues.push(issue('WDA_PROJECT_MISSING', discovered
468
598
  ? `managed WDA needs wdaProjectPath; discovered candidate ${discovered}`
@@ -507,7 +637,7 @@ export function registerWda(server, sessions) {
507
637
  retrySafe: true,
508
638
  failureCode: 'MULTIPLE_DEVICES',
509
639
  nextSteps: [
510
- 'Pass udid explicitly, or bind the session to a device first. This prevents attaching to a stale WDA for the wrong device.',
640
+ 'Pass device explicitly, or bind the session to a device first. This prevents attaching to a stale WDA for the wrong device.',
511
641
  ],
512
642
  }, base);
513
643
  }
@@ -542,7 +672,7 @@ export function registerWda(server, sessions) {
542
672
  action: 'wda_attach',
543
673
  risk: 'medium',
544
674
  target: { webDriverAgentUrl: url, udid: targetUdid, bundleId: appId ?? null, reportedDevice: mismatchedUdid },
545
- consent: { required: !loopback && !configAllowed, consentId, approved: loopback || configAllowed || !!approve },
675
+ consent: { required: !loopback && !userAllowed, consentId, approved: loopback || userAllowed || !!approve },
546
676
  status: 'blocked',
547
677
  detail: 'WDA reported a different device',
548
678
  });
@@ -576,7 +706,7 @@ export function registerWda(server, sessions) {
576
706
  wdaSessionId: created.sessionId,
577
707
  capabilities: created.capabilities ?? null,
578
708
  },
579
- consent: { required: !loopback && !configAllowed, consentId, approved: true },
709
+ consent: { required: !loopback && !userAllowed, consentId, approved: true },
580
710
  status: 'executed',
581
711
  });
582
712
  return qaOk({ ...base, sessionActive: true, wdaSessionId: created.sessionId, capabilities: created.capabilities ?? null }, `attached WDA structured iOS backend at ${url}\nNext: qa_snapshot / qa_act / qa_flow_run can use WDA-backed structured operations.`);
@@ -588,7 +718,7 @@ export function registerWda(server, sessions) {
588
718
  action: 'wda_attach',
589
719
  risk: 'medium',
590
720
  target: { webDriverAgentUrl: url, udid: targetUdid, bundleId: appId ?? null },
591
- consent: { required: !loopback && !configAllowed, consentId, approved: loopback || configAllowed || !!approve },
721
+ consent: { required: !loopback && !userAllowed, consentId, approved: loopback || userAllowed || !!approve },
592
722
  status: 'blocked',
593
723
  detail: String(e.message ?? e),
594
724
  });