swipium 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/CHANGELOG.md +313 -0
  2. package/README.md +175 -219
  3. package/THREAT_MODEL.md +223 -47
  4. package/dist/appMap/automationLink.js +39 -26
  5. package/dist/appMap/automationLink.js.map +1 -1
  6. package/dist/appMap/build.js +68 -20
  7. package/dist/appMap/build.js.map +1 -1
  8. package/dist/appMap/codeIndex.js +31 -5
  9. package/dist/appMap/codeIndex.js.map +1 -1
  10. package/dist/appMap/featureIndex.js +23 -5
  11. package/dist/appMap/featureIndex.js.map +1 -1
  12. package/dist/appMap/featureModel.js +44 -8
  13. package/dist/appMap/featureModel.js.map +1 -1
  14. package/dist/appMap/firstRunApply.js +24 -6
  15. package/dist/appMap/firstRunApply.js.map +1 -1
  16. package/dist/appMap/fsWalk.js +19 -2
  17. package/dist/appMap/fsWalk.js.map +1 -1
  18. package/dist/appMap/issues.js +10 -30
  19. package/dist/appMap/issues.js.map +1 -1
  20. package/dist/appMap/migrations.js +6 -6
  21. package/dist/appMap/migrations.js.map +1 -1
  22. package/dist/appMap/prelaunch.js +2 -2
  23. package/dist/appMap/prelaunch.js.map +1 -1
  24. package/dist/appMap/projectRegistry.js +83 -11
  25. package/dist/appMap/projectRegistry.js.map +1 -1
  26. package/dist/appMap/provenance.js +2 -2
  27. package/dist/appMap/provenance.js.map +1 -1
  28. package/dist/appMap/query.js +21 -5
  29. package/dist/appMap/query.js.map +1 -1
  30. package/dist/appMap/runtimeMerge.js +12 -5
  31. package/dist/appMap/runtimeMerge.js.map +1 -1
  32. package/dist/appMap/schema.js +1 -1
  33. package/dist/appMap/schema.js.map +1 -1
  34. package/dist/appMap/screenMatch.js +6 -2
  35. package/dist/appMap/screenMatch.js.map +1 -1
  36. package/dist/appMap/staticScan.js +151 -39
  37. package/dist/appMap/staticScan.js.map +1 -1
  38. package/dist/appMap/store.js +58 -85
  39. package/dist/appMap/store.js.map +1 -1
  40. package/dist/appMap/tsAstScan.js +34 -12
  41. package/dist/appMap/tsAstScan.js.map +1 -1
  42. package/dist/artifacts/bundletool.js +49 -12
  43. package/dist/artifacts/bundletool.js.map +1 -1
  44. package/dist/artifacts/resolve.js +41 -14
  45. package/dist/artifacts/resolve.js.map +1 -1
  46. package/dist/automation/capabilities.js +112 -30
  47. package/dist/automation/capabilities.js.map +1 -1
  48. package/dist/automation/gestures.js +6 -2
  49. package/dist/automation/gestures.js.map +1 -1
  50. package/dist/automation/plan.js +71 -23
  51. package/dist/automation/plan.js.map +1 -1
  52. package/dist/automation/report.js +15 -5
  53. package/dist/automation/report.js.map +1 -1
  54. package/dist/automation/selectors.js +22 -28
  55. package/dist/automation/selectors.js.map +1 -1
  56. package/dist/automation/types.js +1 -1
  57. package/dist/automation/types.js.map +1 -1
  58. package/dist/automation/waits.js +14 -8
  59. package/dist/automation/waits.js.map +1 -1
  60. package/dist/automation/webview.js +9 -3
  61. package/dist/automation/webview.js.map +1 -1
  62. package/dist/automationGen/appiumModel.js +16 -8
  63. package/dist/automationGen/appiumModel.js.map +1 -1
  64. package/dist/automationGen/ciEmitter.js +6 -6
  65. package/dist/automationGen/ciEmitter.js.map +1 -1
  66. package/dist/automationGen/identifiers.js +224 -0
  67. package/dist/automationGen/identifiers.js.map +1 -0
  68. package/dist/automationGen/jsEmitter.js +288 -121
  69. package/dist/automationGen/jsEmitter.js.map +1 -1
  70. package/dist/automationGen/packagePatch.js +2 -2
  71. package/dist/automationGen/packagePatch.js.map +1 -1
  72. package/dist/automationGen/platformResolve.js +36 -0
  73. package/dist/automationGen/platformResolve.js.map +1 -0
  74. package/dist/automationGen/projectProfile.js +76 -27
  75. package/dist/automationGen/projectProfile.js.map +1 -1
  76. package/dist/automationGen/pythonEmitter.js +278 -107
  77. package/dist/automationGen/pythonEmitter.js.map +1 -1
  78. package/dist/automationGen/readmeEmitter.js +7 -6
  79. package/dist/automationGen/readmeEmitter.js.map +1 -1
  80. package/dist/automationGen/run.js +388 -0
  81. package/dist/automationGen/run.js.map +1 -0
  82. package/dist/automationGen/suitePlan.js +17 -10
  83. package/dist/automationGen/suitePlan.js.map +1 -1
  84. package/dist/automationGen/validation.js +52 -12
  85. package/dist/automationGen/validation.js.map +1 -1
  86. package/dist/build/parseBuildLog.js +235 -31
  87. package/dist/build/parseBuildLog.js.map +1 -1
  88. package/dist/build/plan.js +39 -18
  89. package/dist/build/plan.js.map +1 -1
  90. package/dist/ci/preflight.js +13 -4
  91. package/dist/ci/preflight.js.map +1 -1
  92. package/dist/cli/gc.js +74 -0
  93. package/dist/cli/gc.js.map +1 -0
  94. package/dist/cli/init.js +217 -26
  95. package/dist/cli/init.js.map +1 -1
  96. package/dist/cli/main.js +50 -0
  97. package/dist/cli/main.js.map +1 -0
  98. package/dist/cli/report.js +218 -0
  99. package/dist/cli/report.js.map +1 -0
  100. package/dist/cli/scan.js +36 -15
  101. package/dist/cli/scan.js.map +1 -1
  102. package/dist/cli/suite.js +7 -7
  103. package/dist/cli/suite.js.map +1 -1
  104. package/dist/cli/verify.js +7 -7
  105. package/dist/cli/verify.js.map +1 -1
  106. package/dist/consent/consent.js +162 -5
  107. package/dist/consent/consent.js.map +1 -1
  108. package/dist/context/detect.js +55 -18
  109. package/dist/context/detect.js.map +1 -1
  110. package/dist/context/findApps.js +22 -8
  111. package/dist/context/findApps.js.map +1 -1
  112. package/dist/context/projectRoot.js +174 -19
  113. package/dist/context/projectRoot.js.map +1 -1
  114. package/dist/context/scan.js +1 -1
  115. package/dist/context/scan.js.map +1 -1
  116. package/dist/core/capabilityGroups.js +90 -0
  117. package/dist/core/capabilityGroups.js.map +1 -0
  118. package/dist/core/target.js +10 -8
  119. package/dist/core/target.js.map +1 -1
  120. package/dist/core/targetPlan.js +160 -39
  121. package/dist/core/targetPlan.js.map +1 -1
  122. package/dist/drivers/DirectDriver.js +317 -43
  123. package/dist/drivers/DirectDriver.js.map +1 -1
  124. package/dist/drivers/SimctlDriver.js +124 -8
  125. package/dist/drivers/SimctlDriver.js.map +1 -1
  126. package/dist/drivers/WdaDriver.js +365 -55
  127. package/dist/drivers/WdaDriver.js.map +1 -1
  128. package/dist/explore/candidates.js +7 -3
  129. package/dist/explore/candidates.js.map +1 -1
  130. package/dist/explore/graph.js +15 -6
  131. package/dist/explore/graph.js.map +1 -1
  132. package/dist/explore/memory.js +4 -1
  133. package/dist/explore/memory.js.map +1 -1
  134. package/dist/explore/planner.js +54 -9
  135. package/dist/explore/planner.js.map +1 -1
  136. package/dist/explore/policy.js +11 -6
  137. package/dist/explore/policy.js.map +1 -1
  138. package/dist/explore/runner.js +363 -190
  139. package/dist/explore/runner.js.map +1 -1
  140. package/dist/explore/signatures.js +4 -2
  141. package/dist/explore/signatures.js.map +1 -1
  142. package/dist/explore/suite.js +3 -1
  143. package/dist/explore/suite.js.map +1 -1
  144. package/dist/featureTesting/executionBootstrap.js +137 -29
  145. package/dist/featureTesting/executionBootstrap.js.map +1 -1
  146. package/dist/featureTesting/featureMap.js +6 -3
  147. package/dist/featureTesting/featureMap.js.map +1 -1
  148. package/dist/featureTesting/featureScope.js +101 -20
  149. package/dist/featureTesting/featureScope.js.map +1 -1
  150. package/dist/featureTesting/mapFeatureScope.js +44 -15
  151. package/dist/featureTesting/mapFeatureScope.js.map +1 -1
  152. package/dist/featureTesting/objectiveModel.js +15 -11
  153. package/dist/featureTesting/objectiveModel.js.map +1 -1
  154. package/dist/featureTesting/resultMerge.js +16 -8
  155. package/dist/featureTesting/resultMerge.js.map +1 -1
  156. package/dist/featureTesting/sources.js +8 -5
  157. package/dist/featureTesting/sources.js.map +1 -1
  158. package/dist/featureTesting/suiteBridge.js +8 -2
  159. package/dist/featureTesting/suiteBridge.js.map +1 -1
  160. package/dist/featureTesting/synonyms.js +32 -4
  161. package/dist/featureTesting/synonyms.js.map +1 -1
  162. package/dist/featureTesting/testCaseFactory.js +27 -15
  163. package/dist/featureTesting/testCaseFactory.js.map +1 -1
  164. package/dist/featureTesting/testPlan.js +34 -12
  165. package/dist/featureTesting/testPlan.js.map +1 -1
  166. package/dist/firstRun/authStateMachine.js +1 -1
  167. package/dist/firstRun/authStateMachine.js.map +1 -1
  168. package/dist/firstRun/classifyScreen.js +9 -6
  169. package/dist/firstRun/classifyScreen.js.map +1 -1
  170. package/dist/firstRun/firstRunPlanner.js +16 -13
  171. package/dist/firstRun/firstRunPlanner.js.map +1 -1
  172. package/dist/firstRun/firstRunRunner.js +92 -31
  173. package/dist/firstRun/firstRunRunner.js.map +1 -1
  174. package/dist/firstRun/generatedDataPolicy.js +25 -15
  175. package/dist/firstRun/generatedDataPolicy.js.map +1 -1
  176. package/dist/firstRun/inputPlanner.js +45 -11
  177. package/dist/firstRun/inputPlanner.js.map +1 -1
  178. package/dist/firstRun/onboardingStateMachine.js +1 -1
  179. package/dist/firstRun/onboardingStateMachine.js.map +1 -1
  180. package/dist/firstRun/paywallPolicy.js +3 -3
  181. package/dist/firstRun/paywallPolicy.js.map +1 -1
  182. package/dist/firstRun/types.js +1 -1
  183. package/dist/firstRun/types.js.map +1 -1
  184. package/dist/fixtures/catalog.js +72 -9
  185. package/dist/fixtures/catalog.js.map +1 -1
  186. package/dist/fixtures/load.js +50 -0
  187. package/dist/fixtures/load.js.map +1 -0
  188. package/dist/flows/discover.js +2 -2
  189. package/dist/flows/discover.js.map +1 -1
  190. package/dist/flows/generate.js +68 -17
  191. package/dist/flows/generate.js.map +1 -1
  192. package/dist/flows/lint.js +88 -14
  193. package/dist/flows/lint.js.map +1 -1
  194. package/dist/flows/pack.js +21 -5
  195. package/dist/flows/pack.js.map +1 -1
  196. package/dist/flows/paths.js +57 -0
  197. package/dist/flows/paths.js.map +1 -0
  198. package/dist/flows/repair.js +176 -37
  199. package/dist/flows/repair.js.map +1 -1
  200. package/dist/flows/run.js +308 -99
  201. package/dist/flows/run.js.map +1 -1
  202. package/dist/flows/schema.js +107 -25
  203. package/dist/flows/schema.js.map +1 -1
  204. package/dist/flows/seedExec.js +8 -4
  205. package/dist/flows/seedExec.js.map +1 -1
  206. package/dist/flows/templates.js +5 -5
  207. package/dist/index.js +50 -8
  208. package/dist/index.js.map +1 -1
  209. package/dist/ios/signing.js +32 -3
  210. package/dist/ios/signing.js.map +1 -1
  211. package/dist/issues/classify.js +28 -20
  212. package/dist/issues/classify.js.map +1 -1
  213. package/dist/issues/fingerprint.js +35 -9
  214. package/dist/issues/fingerprint.js.map +1 -1
  215. package/dist/issues/index.js +93 -46
  216. package/dist/issues/index.js.map +1 -1
  217. package/dist/issues/metrics.js +6 -5
  218. package/dist/issues/metrics.js.map +1 -1
  219. package/dist/issues/recurrence.js +35 -8
  220. package/dist/issues/recurrence.js.map +1 -1
  221. package/dist/issues/report.js +12 -8
  222. package/dist/issues/report.js.map +1 -1
  223. package/dist/issues/reportBridge.js +40 -9
  224. package/dist/issues/reportBridge.js.map +1 -1
  225. package/dist/issues/schema.js +2 -2
  226. package/dist/issues/schema.js.map +1 -1
  227. package/dist/issues/sourceRevision.js +2 -2
  228. package/dist/issues/sourceRevision.js.map +1 -1
  229. package/dist/issues/store.js +110 -32
  230. package/dist/issues/store.js.map +1 -1
  231. package/dist/lib/abortScope.js +48 -0
  232. package/dist/lib/abortScope.js.map +1 -0
  233. package/dist/lib/android.js +84 -8
  234. package/dist/lib/android.js.map +1 -1
  235. package/dist/lib/coordSpace.js +1 -1
  236. package/dist/lib/coordSpace.js.map +1 -1
  237. package/dist/lib/device.js +53 -12
  238. package/dist/lib/device.js.map +1 -1
  239. package/dist/lib/gestures.js +141 -0
  240. package/dist/lib/gestures.js.map +1 -0
  241. package/dist/lib/gitignore.js +4 -3
  242. package/dist/lib/gitignore.js.map +1 -1
  243. package/dist/lib/image.js +12 -3
  244. package/dist/lib/image.js.map +1 -1
  245. package/dist/lib/lockfile.js +399 -0
  246. package/dist/lib/lockfile.js.map +1 -0
  247. package/dist/lib/needsInput.js +9 -6
  248. package/dist/lib/needsInput.js.map +1 -1
  249. package/dist/lib/png.js +4 -3
  250. package/dist/lib/png.js.map +1 -1
  251. package/dist/lib/redact.js +170 -9
  252. package/dist/lib/redact.js.map +1 -1
  253. package/dist/lib/result.js +94 -10
  254. package/dist/lib/result.js.map +1 -1
  255. package/dist/lib/schemaHash.js +7 -5
  256. package/dist/lib/schemaHash.js.map +1 -1
  257. package/dist/lib/sensitive.js +6 -3
  258. package/dist/lib/sensitive.js.map +1 -1
  259. package/dist/lib/simctl.js +3 -3
  260. package/dist/lib/simctl.js.map +1 -1
  261. package/dist/lib/spawn.js +78 -17
  262. package/dist/lib/spawn.js.map +1 -1
  263. package/dist/lib/toolAnnotations.js +114 -0
  264. package/dist/lib/toolAnnotations.js.map +1 -0
  265. package/dist/lib/wda.js +321 -25
  266. package/dist/lib/wda.js.map +1 -1
  267. package/dist/lib/wdaConfig.js +12 -5
  268. package/dist/lib/wdaConfig.js.map +1 -1
  269. package/dist/lib/wdaTune.js +52 -23
  270. package/dist/lib/wdaTune.js.map +1 -1
  271. package/dist/mobileAudit/checks.js +150 -28
  272. package/dist/mobileAudit/checks.js.map +1 -1
  273. package/dist/mobileAudit/evidence.js +4 -4
  274. package/dist/mobileAudit/evidence.js.map +1 -1
  275. package/dist/mobileAudit/profiles.js +121 -20
  276. package/dist/mobileAudit/profiles.js.map +1 -1
  277. package/dist/mobileAudit/results.js +9 -4
  278. package/dist/mobileAudit/results.js.map +1 -1
  279. package/dist/mobileAudit/runner.js +214 -35
  280. package/dist/mobileAudit/runner.js.map +1 -1
  281. package/dist/oracle/auth.js +1 -1
  282. package/dist/oracle/auth.js.map +1 -1
  283. package/dist/oracle/failures.js +1085 -145
  284. package/dist/oracle/failures.js.map +1 -1
  285. package/dist/oracle/health.js +148 -26
  286. package/dist/oracle/health.js.map +1 -1
  287. package/dist/oracle/locator.js +148 -19
  288. package/dist/oracle/locator.js.map +1 -1
  289. package/dist/oracle/record.js +3 -3
  290. package/dist/oracle/record.js.map +1 -1
  291. package/dist/orchestration/envelope.js +2 -2
  292. package/dist/orchestration/envelope.js.map +1 -1
  293. package/dist/orchestration/goal.js +7 -13
  294. package/dist/orchestration/goal.js.map +1 -1
  295. package/dist/orchestration/testThis/execute.js +167 -0
  296. package/dist/orchestration/testThis/execute.js.map +1 -0
  297. package/dist/orchestration/testThis/pipeline.js +413 -0
  298. package/dist/orchestration/testThis/pipeline.js.map +1 -0
  299. package/dist/orchestration/testThis/plan.js +519 -0
  300. package/dist/orchestration/testThis/plan.js.map +1 -0
  301. package/dist/orchestration/testThis/sessionIntent.js +72 -0
  302. package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
  303. package/dist/orchestration/testThis/terminal.js +136 -0
  304. package/dist/orchestration/testThis/terminal.js.map +1 -0
  305. package/dist/orchestration/testThis/types.js +12 -0
  306. package/dist/orchestration/testThis/types.js.map +1 -0
  307. package/dist/plan/plan.js +9 -9
  308. package/dist/plan/plan.js.map +1 -1
  309. package/dist/prompts/index.js +24 -24
  310. package/dist/prompts/index.js.map +1 -1
  311. package/dist/report/coverage.js +0 -1
  312. package/dist/report/coverage.js.map +1 -1
  313. package/dist/report/evidence.js.map +1 -1
  314. package/dist/report/export.js +449 -72
  315. package/dist/report/export.js.map +1 -1
  316. package/dist/report/findingsDedupe.js +41 -0
  317. package/dist/report/findingsDedupe.js.map +1 -0
  318. package/dist/report/flake.js +13 -14
  319. package/dist/report/flake.js.map +1 -1
  320. package/dist/report/history.js +72 -38
  321. package/dist/report/history.js.map +1 -1
  322. package/dist/report/policy.js +18 -7
  323. package/dist/report/policy.js.map +1 -1
  324. package/dist/report/qaLevel.js +10 -16
  325. package/dist/report/qaLevel.js.map +1 -1
  326. package/dist/report/readiness.js +42 -12
  327. package/dist/report/readiness.js.map +1 -1
  328. package/dist/report/sarifSources.js +160 -0
  329. package/dist/report/sarifSources.js.map +1 -0
  330. package/dist/report/summary.js +2 -2
  331. package/dist/report/summary.js.map +1 -1
  332. package/dist/report/testCatalog.js +4 -4
  333. package/dist/report/testCatalog.js.map +1 -1
  334. package/dist/report/timing.js +23 -23
  335. package/dist/report/timing.js.map +1 -1
  336. package/dist/report/toolHealth.js +124 -0
  337. package/dist/report/toolHealth.js.map +1 -0
  338. package/dist/server.js +501 -69
  339. package/dist/server.js.map +1 -1
  340. package/dist/services/automationGenerate.js +8 -2
  341. package/dist/services/automationGenerate.js.map +1 -1
  342. package/dist/services/build.js +10 -4
  343. package/dist/services/build.js.map +1 -1
  344. package/dist/services/flowGenerate.js +75 -0
  345. package/dist/services/flowGenerate.js.map +1 -0
  346. package/dist/services/preflight.js +40 -8
  347. package/dist/services/preflight.js.map +1 -1
  348. package/dist/services/prepareAndroid.js +92 -18
  349. package/dist/services/prepareAndroid.js.map +1 -1
  350. package/dist/services/prepareIos.js +94 -17
  351. package/dist/services/prepareIos.js.map +1 -1
  352. package/dist/services/report.js +271 -80
  353. package/dist/services/report.js.map +1 -1
  354. package/dist/services/smoke.js +68 -22
  355. package/dist/services/smoke.js.map +1 -1
  356. package/dist/services/suiteGenerate.js +43 -6
  357. package/dist/services/suiteGenerate.js.map +1 -1
  358. package/dist/services/testSuiteKnowledge.js +78 -33
  359. package/dist/services/testSuiteKnowledge.js.map +1 -1
  360. package/dist/session/attach.js +284 -4
  361. package/dist/session/attach.js.map +1 -1
  362. package/dist/session/processRegistry.js +433 -0
  363. package/dist/session/processRegistry.js.map +1 -0
  364. package/dist/session/progress.js +1 -1
  365. package/dist/session/progress.js.map +1 -1
  366. package/dist/session/retention.js +201 -0
  367. package/dist/session/retention.js.map +1 -0
  368. package/dist/session/store.js +459 -59
  369. package/dist/session/store.js.map +1 -1
  370. package/dist/snapshot/overlays.js +60 -10
  371. package/dist/snapshot/overlays.js.map +1 -1
  372. package/dist/snapshot/parse.js +30 -12
  373. package/dist/snapshot/parse.js.map +1 -1
  374. package/dist/snapshot/present.js +36 -6
  375. package/dist/snapshot/present.js.map +1 -1
  376. package/dist/snapshot/settle.js +39 -9
  377. package/dist/snapshot/settle.js.map +1 -1
  378. package/dist/state/consent.js +99 -0
  379. package/dist/state/consent.js.map +1 -0
  380. package/dist/state/profile.js +82 -11
  381. package/dist/state/profile.js.map +1 -1
  382. package/dist/suite/compile.js +15 -6
  383. package/dist/suite/compile.js.map +1 -1
  384. package/dist/suite/lint.js +22 -4
  385. package/dist/suite/lint.js.map +1 -1
  386. package/dist/suite/pom.js +75 -44
  387. package/dist/suite/pom.js.map +1 -1
  388. package/dist/suite/secretGuard.js +266 -0
  389. package/dist/suite/secretGuard.js.map +1 -0
  390. package/dist/suite/testcase.js +15 -11
  391. package/dist/suite/testcase.js.map +1 -1
  392. package/dist/testSuite/exporter.js +7 -3
  393. package/dist/testSuite/exporter.js.map +1 -1
  394. package/dist/testSuite/generator.js +43 -14
  395. package/dist/testSuite/generator.js.map +1 -1
  396. package/dist/testSuite/history.js +1 -1
  397. package/dist/testSuite/history.js.map +1 -1
  398. package/dist/testSuite/issueLinks.js +3 -3
  399. package/dist/testSuite/issueLinks.js.map +1 -1
  400. package/dist/testSuite/lint.js +4 -4
  401. package/dist/testSuite/lint.js.map +1 -1
  402. package/dist/testSuite/merge.js +13 -7
  403. package/dist/testSuite/merge.js.map +1 -1
  404. package/dist/testSuite/schema.js +21 -16
  405. package/dist/testSuite/schema.js.map +1 -1
  406. package/dist/testSuite/store.js +12 -4
  407. package/dist/testSuite/store.js.map +1 -1
  408. package/dist/testSuite/traceability.js +2 -2
  409. package/dist/testSuite/traceability.js.map +1 -1
  410. package/dist/tools/act.js +868 -174
  411. package/dist/tools/act.js.map +1 -1
  412. package/dist/tools/agent.js +521 -112
  413. package/dist/tools/agent.js.map +1 -1
  414. package/dist/tools/appControl.js +82 -19
  415. package/dist/tools/appControl.js.map +1 -1
  416. package/dist/tools/appMap.js +393 -189
  417. package/dist/tools/appMap.js.map +1 -1
  418. package/dist/tools/build.js +92 -51
  419. package/dist/tools/build.js.map +1 -1
  420. package/dist/tools/bundletool.js +141 -40
  421. package/dist/tools/bundletool.js.map +1 -1
  422. package/dist/tools/clearOverlay.js +98 -18
  423. package/dist/tools/clearOverlay.js.map +1 -1
  424. package/dist/tools/device.js +108 -19
  425. package/dist/tools/device.js.map +1 -1
  426. package/dist/tools/doctor.js +98 -35
  427. package/dist/tools/doctor.js.map +1 -1
  428. package/dist/tools/explore.js +110 -42
  429. package/dist/tools/explore.js.map +1 -1
  430. package/dist/tools/featureTesting.js +152 -130
  431. package/dist/tools/featureTesting.js.map +1 -1
  432. package/dist/tools/firstRun.js +94 -66
  433. package/dist/tools/firstRun.js.map +1 -1
  434. package/dist/tools/flow.js +347 -132
  435. package/dist/tools/flow.js.map +1 -1
  436. package/dist/tools/flowRepair.js +42 -10
  437. package/dist/tools/flowRepair.js.map +1 -1
  438. package/dist/tools/generate.js +199 -0
  439. package/dist/tools/generate.js.map +1 -0
  440. package/dist/tools/getArtifact.js +37 -8
  441. package/dist/tools/getArtifact.js.map +1 -1
  442. package/dist/tools/health.js +17 -12
  443. package/dist/tools/health.js.map +1 -1
  444. package/dist/tools/ios.js +148 -194
  445. package/dist/tools/ios.js.map +1 -1
  446. package/dist/tools/issues.js +256 -171
  447. package/dist/tools/issues.js.map +1 -1
  448. package/dist/tools/jobs.js +55 -11
  449. package/dist/tools/jobs.js.map +1 -1
  450. package/dist/tools/metro.js +84 -38
  451. package/dist/tools/metro.js.map +1 -1
  452. package/dist/tools/mobileAudit.js +83 -26
  453. package/dist/tools/mobileAudit.js.map +1 -1
  454. package/dist/tools/network.js +36 -14
  455. package/dist/tools/network.js.map +1 -1
  456. package/dist/tools/note.js +31 -17
  457. package/dist/tools/note.js.map +1 -1
  458. package/dist/tools/prepareIosTarget.js +31 -14
  459. package/dist/tools/prepareIosTarget.js.map +1 -1
  460. package/dist/tools/prepareTarget.js +193 -47
  461. package/dist/tools/prepareTarget.js.map +1 -1
  462. package/dist/tools/report.js +16 -8
  463. package/dist/tools/report.js.map +1 -1
  464. package/dist/tools/resolveArtifact.js +12 -12
  465. package/dist/tools/resolveArtifact.js.map +1 -1
  466. package/dist/tools/resolveTarget.js +81 -18
  467. package/dist/tools/resolveTarget.js.map +1 -1
  468. package/dist/tools/screenRecord.js +85 -20
  469. package/dist/tools/screenRecord.js.map +1 -1
  470. package/dist/tools/screenshot.js +42 -18
  471. package/dist/tools/screenshot.js.map +1 -1
  472. package/dist/tools/smoke.js +29 -12
  473. package/dist/tools/smoke.js.map +1 -1
  474. package/dist/tools/snapshot.js +157 -107
  475. package/dist/tools/snapshot.js.map +1 -1
  476. package/dist/tools/startSession.js +117 -84
  477. package/dist/tools/startSession.js.map +1 -1
  478. package/dist/tools/suite.js +391 -310
  479. package/dist/tools/suite.js.map +1 -1
  480. package/dist/tools/testSuite.js +112 -36
  481. package/dist/tools/testSuite.js.map +1 -1
  482. package/dist/tools/testThis.js +35 -802
  483. package/dist/tools/testThis.js.map +1 -1
  484. package/dist/tools/visual.js +698 -116
  485. package/dist/tools/visual.js.map +1 -1
  486. package/dist/tools/wait.js +9 -23
  487. package/dist/tools/wait.js.map +1 -1
  488. package/dist/tools/wda.js +312 -54
  489. package/dist/tools/wda.js.map +1 -1
  490. package/dist/version.js +37 -64
  491. package/dist/version.js.map +1 -1
  492. package/dist/visual/ocr.js +65 -8
  493. package/dist/visual/ocr.js.map +1 -1
  494. package/dist/visual/provider.js +87 -15
  495. package/dist/visual/provider.js.map +1 -1
  496. package/docs/README.md +24 -10
  497. package/docs/ci-reports.md +328 -0
  498. package/docs/concepts.md +227 -0
  499. package/docs/flows.md +153 -0
  500. package/docs/mcp-server.md +210 -104
  501. package/docs/physical-devices.md +84 -0
  502. package/docs/tools.md +808 -217
  503. package/package.json +16 -6
  504. package/dist/appMap/diff.js +0 -60
  505. package/dist/appMap/diff.js.map +0 -1
  506. package/dist/automation/maestroIr.js +0 -282
  507. package/dist/automation/maestroIr.js.map +0 -1
  508. package/dist/interop/maestro.js +0 -151
  509. package/dist/interop/maestro.js.map +0 -1
  510. package/dist/tools/assertVisual.js +0 -74
  511. package/dist/tools/assertVisual.js.map +0 -1
  512. package/dist/tools/automationGenerate.js +0 -394
  513. package/dist/tools/automationGenerate.js.map +0 -1
  514. package/dist/tools/capabilities.js +0 -209
  515. package/dist/tools/capabilities.js.map +0 -1
  516. package/dist/tools/detectContext.js +0 -41
  517. package/dist/tools/detectContext.js.map +0 -1
  518. package/dist/tools/flowGenerate.js +0 -55
  519. package/dist/tools/flowGenerate.js.map +0 -1
  520. package/dist/tools/history.js +0 -56
  521. package/dist/tools/history.js.map +0 -1
  522. package/dist/tools/idling.js +0 -104
  523. package/dist/tools/idling.js.map +0 -1
  524. package/dist/tools/inputCapabilities.js +0 -30
  525. package/dist/tools/inputCapabilities.js.map +0 -1
  526. package/dist/tools/locator.js +0 -57
  527. package/dist/tools/locator.js.map +0 -1
  528. package/dist/tools/maestro.js +0 -78
  529. package/dist/tools/maestro.js.map +0 -1
  530. package/dist/tools/permissions.js +0 -149
  531. package/dist/tools/permissions.js.map +0 -1
  532. package/dist/tools/plan.js +0 -49
  533. package/dist/tools/plan.js.map +0 -1
  534. package/dist/tools/screenInfo.js +0 -70
  535. package/dist/tools/screenInfo.js.map +0 -1
  536. package/dist/tools/seed.js +0 -101
  537. package/dist/tools/seed.js.map +0 -1
  538. package/dist/tools/state.js +0 -170
  539. package/dist/tools/state.js.map +0 -1
  540. package/dist/tools/visualText.js +0 -61
  541. package/dist/tools/visualText.js.map +0 -1
@@ -0,0 +1,433 @@
1
+ // Cross-restart registry of the long-lived child processes Swipium spawns (Metro bundler,
2
+ // managed WDA xcodebuild, screen recorders, emulators) in ~/.swipium/processes.json, so a
3
+ // crashed server's orphans can be reaped on the next startup.
4
+ //
5
+ // Safety rules:
6
+ // - Every entry records the OWNING server pid. A child whose owner is still a live
7
+ // node/swipium process belongs to a concurrent server instance and is never touched.
8
+ // - Every entry records the child's FINGERPRINT at spawn time: its start time
9
+ // (`ps -o lstart=`, read under LC_ALL=C so the format is locale-independent) and full command
10
+ // line (for WDA that includes the project path and `-destination id=<udid>`). Before
11
+ // signalling (or adopting), both are re-read via `ps`. The START TIME must match exactly (the
12
+ // hard pid-recycling guard: a recycled pid has a different start time). The command must match
13
+ // per kind: for WDA / recordings / emulators the program is compared by BASENAME and the
14
+ // argument tail exactly (Xcode's /usr/bin/xcodebuild and xcrun shims re-exec the real tool
15
+ // under the same pid + start time, so `xcodebuild -project …` later reads
16
+ // `/Applications/Xcode.app/…/usr/bin/xcodebuild -project …`); for Metro (spawned via `npx`, which
17
+ // npm retitles right after spawn: `node …/npx react-native start` > `npm exec react-native
18
+ // start`) the launcher-stripped program+args tail must match. A PID recycled by the OS to
19
+ // an unrelated process (another node, the adb server, the user's own xcodebuild/Appium WDA) is
20
+ // never killed or adopted. Entries without a fingerprint (written by an older build, or when
21
+ // `ps` was unavailable) are unverifiable and are dropped without signalling.
22
+ // - A process GROUP is only signalled when Swipium created the child as a group leader
23
+ // (spawned detached: pgid == pid at registration); otherwise only the pid itself is signalled.
24
+ // - The owning server's start time is recorded too, so a recycled server pid (any node process)
25
+ // is not mistaken for a live concurrent server.
26
+ // - Emulators are ADOPTED, not killed: an orphaned emulator stays booted and remains
27
+ // usable via adb for the next run.
28
+ // - Managed WDA (xcodebuild test-without-building) is deliberately NOT stopped on a graceful
29
+ // shutdown either (only Metro and screen recorders are; see startServer), so the next server
30
+ // can resume the iOS session on the same WDA. At startup an orphaned WDA entry is ADOPTED when
31
+ // it is younger than WDA_ADOPT_MAX_AGE_MS (12 h) AND its recorded endpoint answers GET /status
32
+ // ready; adoption keeps the entry and re-owns it (serverPid = this server), so `qa_wda stop`
33
+ // can still stop it and a later crash/restart applies the same rule. An older, unhealthy, or
34
+ // endpoint-less WDA entry is reaped like any other orphan.
35
+ import { existsSync, mkdirSync, readFileSync } from 'node:fs';
36
+ import { join } from 'node:path';
37
+ import { homedir } from 'node:os';
38
+ import { spawnSync } from 'node:child_process';
39
+ import { withFileLock, writeFileAtomicSync } from '../lib/lockfile.js';
40
+ import { log } from '../lib/logger.js';
41
+ import { checkWda } from '../lib/wda.js';
42
+ /** An orphaned managed WDA older than this is reaped even when healthy (bounded lifetime). */
43
+ export const WDA_ADOPT_MAX_AGE_MS = 12 * 60 * 60 * 1000;
44
+ const WDA_ADOPT_PROBE_TIMEOUT_MS = 1500;
45
+ const REGISTRY_DIR = join(homedir(), '.swipium');
46
+ const PROCESSES_FILE = join(REGISTRY_DIR, 'processes.json');
47
+ const PROCESSES_LOCK = `${PROCESSES_FILE}.lock`;
48
+ const MAX_ENTRIES = 100;
49
+ /** Coarse sanity check on top of the exact fingerprint match (defence in depth). */
50
+ const KIND_COMMAND_RE = {
51
+ metro: /metro|expo|react-native|npx|npm|node/i,
52
+ wda: /xcodebuild/i,
53
+ recording: /screenrecord|recordvideo|simctl|adb/i,
54
+ emulator: /emulator|qemu/i,
55
+ };
56
+ const norm = (s) => (s == null ? null : s.trim().replace(/\s+/g, ' ') || null);
57
+ function pidAlive(pid) {
58
+ try {
59
+ process.kill(pid, 0);
60
+ return true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ /** Environment for every `ps` we parse: the C locale, so `lstart` is always `Mon Sep 28 …`
67
+ * (under e.g. de_DE it would be `Mo. 28 Sep. …` and never match a fingerprint taken elsewhere). */
68
+ export function psEnv(base = process.env) {
69
+ return { ...base, LC_ALL: 'C', LANG: 'C' };
70
+ }
71
+ /** A `ps -o <field>=` value for `pid`, or null when it is gone / unreadable (POSIX `ps`). */
72
+ function psField(pid, field) {
73
+ if (process.platform === 'win32')
74
+ return null;
75
+ try {
76
+ const out = spawnSync('ps', ['-o', `${field}=`, '-p', String(pid)], { encoding: 'utf8', env: psEnv() });
77
+ if (out.status !== 0 || !out.stdout?.trim())
78
+ return null;
79
+ return out.stdout.trim();
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ const psCommand = (pid) => psField(pid, 'command');
86
+ const psStartTime = (pid) => norm(psField(pid, 'lstart'));
87
+ function psPgid(pid) {
88
+ const n = Number(psField(pid, 'pgid'));
89
+ return Number.isInteger(n) && n > 0 ? n : null;
90
+ }
91
+ function readEntries() {
92
+ try {
93
+ if (!existsSync(PROCESSES_FILE))
94
+ return [];
95
+ const parsed = JSON.parse(readFileSync(PROCESSES_FILE, 'utf8'));
96
+ if (!Array.isArray(parsed))
97
+ return [];
98
+ return parsed.filter((e) => typeof e?.pid === 'number');
99
+ }
100
+ catch (e) {
101
+ log('warn', 'managed-process registry unreadable, starting fresh', { file: PROCESSES_FILE, err: String(e) });
102
+ return [];
103
+ }
104
+ }
105
+ function writeEntries(entries) {
106
+ writeFileAtomicSync(PROCESSES_FILE, JSON.stringify(entries.slice(-MAX_ENTRIES), null, 2)); // tmp + rename (Windows-retried)
107
+ }
108
+ function mutateEntries(fn) {
109
+ try {
110
+ mkdirSync(REGISTRY_DIR, { recursive: true });
111
+ withFileLock(PROCESSES_LOCK, () => writeEntries(fn(readEntries())));
112
+ }
113
+ catch (e) {
114
+ log('error', 'failed to update managed-process registry; a crash may leave this child unreaped', {
115
+ file: PROCESSES_FILE,
116
+ err: String(e),
117
+ });
118
+ }
119
+ }
120
+ /** Capture a live child's fingerprint (start time, command, group leadership) + our own start. */
121
+ export function captureFingerprint(pid, ops = REAL_OPS) {
122
+ const procStart = norm(ops.psStartTime(pid));
123
+ const command = norm(ops.psCommand(pid));
124
+ const serverStart = norm(ops.psStartTime(process.pid));
125
+ return {
126
+ ...(procStart ? { procStart } : {}),
127
+ ...(command ? { command } : {}),
128
+ groupLeader: ops.psPgid(pid) === pid,
129
+ ...(serverStart ? { serverStart } : {}),
130
+ };
131
+ }
132
+ /** Record a long-lived child we spawned so a future server instance can reap it if we crash.
133
+ * Must be called right after spawn() returned a pid (the child has exec'd by then), so the
134
+ * recorded fingerprint is the child's own. */
135
+ export function registerManagedProcess(pid, kind, sessionId, extra = {}) {
136
+ if (!pid || pid <= 0)
137
+ return;
138
+ const fp = captureFingerprint(pid, extra.ops);
139
+ mutateEntries((entries) => [
140
+ ...entries.filter((e) => e.pid !== pid),
141
+ { pid, kind, serverPid: process.pid, sessionId, startedAt: Date.now(), ...(extra.endpoint ? { endpoint: extra.endpoint } : {}), ...fp },
142
+ ]);
143
+ }
144
+ /** A managed WDA this server adopted at startup (or started itself) for `sessionId`, per the
145
+ * registry. Lets `qa_wda stop` stop a WDA started by a previous server run. */
146
+ export function registeredWdaForSession(sessionId) {
147
+ return readEntries()
148
+ .filter((e) => e.kind === 'wda' && e.sessionId === sessionId && e.serverPid === process.pid)
149
+ .pop();
150
+ }
151
+ /** Remove a child we stopped (or that finished) from the registry. */
152
+ export function unregisterManagedProcess(pid) {
153
+ if (!pid || pid <= 0)
154
+ return;
155
+ mutateEntries((entries) => entries.filter((e) => e.pid !== pid));
156
+ }
157
+ /** SIGTERM the child's process group when Swipium spawned it as a group leader, else the pid. */
158
+ function killTree(pid, group) {
159
+ if (group) {
160
+ try {
161
+ process.kill(-pid, 'SIGTERM');
162
+ return true;
163
+ }
164
+ catch {
165
+ /* group already gone; fall back to the pid itself */
166
+ }
167
+ }
168
+ try {
169
+ process.kill(pid, 'SIGTERM');
170
+ return true;
171
+ }
172
+ catch {
173
+ return false;
174
+ }
175
+ }
176
+ const REAL_OPS = { pidAlive, psCommand, psStartTime, psPgid, killTree };
177
+ /** True when `serverPid` is a live process that IS the server that registered the entry: its
178
+ * start time must equal the recorded one (any node process could have recycled the pid). Legacy
179
+ * entries without a recorded server start fall back to the old node/swipium command check.
180
+ * That errs toward "alive" (never touch), which is the safe direction. */
181
+ function serverStillAlive(entry, ops = REAL_OPS) {
182
+ const { serverPid } = entry;
183
+ if (serverPid === process.pid)
184
+ return false; // our pid at startup = a recycled dead server's
185
+ if (!ops.pidAlive(serverPid))
186
+ return false;
187
+ if (entry.serverStart)
188
+ return norm(ops.psStartTime(serverPid)) === entry.serverStart;
189
+ const cmd = ops.psCommand(serverPid);
190
+ return cmd != null && /node|swipium/i.test(cmd);
191
+ }
192
+ /** Is this child pid registered to a DIFFERENT, still-live server instance? (adopt, don't touch) */
193
+ export function pidOwnedByLiveServer(pid) {
194
+ const entry = readEntries().find((e) => e.pid === pid);
195
+ return !!entry && serverStillAlive(entry);
196
+ }
197
+ /** Leading launcher tokens npx/npm put in front of the real program (and the retitle swaps).
198
+ * `env` covers the `#!/usr/bin/env node` shebang: on Linux a process registered right after spawn
199
+ * can still show as `/usr/bin/env node …/npx expo start` before env execs node. */
200
+ const LAUNCHER_TOKEN = /^(?:env|node|nodejs|npx|npm|npx-cli\.js|npm-cli\.js|exec|--)$/i;
201
+ /** A command line with its node/npx/npm launcher prefix stripped: `node /x/bin/npx expo start`
202
+ * and `npm exec expo start` both become `expo start`. Exported for tests. */
203
+ export function commandTail(cmd) {
204
+ const tokens = cmd.trim().split(/\s+/);
205
+ let i = 0;
206
+ while (i < tokens.length && LAUNCHER_TOKEN.test(tokens[i].split('/').pop() ?? ''))
207
+ i++;
208
+ return tokens.slice(i).join(' ');
209
+ }
210
+ /** The real program of each non-metro kind (matched against a token's basename). */
211
+ const KIND_PROGRAM_RE = {
212
+ wda: /^xcodebuild$/i,
213
+ recording: /^(?:simctl|adb)$/i,
214
+ emulator: /^(?:emulator|qemu-system-[\w.-]+)$/i,
215
+ };
216
+ /** Launchers that exec the real program under the same pid (`xcrun simctl …` > `…/simctl …`). */
217
+ const EXEC_LAUNCHER = /^(?:xcrun|env)$/i;
218
+ /** A command line reduced to `<program basename> <args…>`, anchored at the first token whose
219
+ * basename matches `program`. Xcode's `/usr/bin/xcodebuild` (and `xcrun`) shims re-exec the real
220
+ * tool under the SAME pid + start time, so `ps` later shows
221
+ * `/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -project …` for a child spawned
222
+ * as `xcodebuild -project …`. Everything before the program must be either a launcher
223
+ * (xcrun/env) or the space-split pieces of the program's own absolute path (`/Applications/Xcode
224
+ * 16.app/…/xcodebuild`), never flags or another program. Null when no such anchor exists.
225
+ * Exported for tests. */
226
+ export function programTail(cmd, program) {
227
+ const tokens = cmd.trim().split(/\s+/);
228
+ const i = tokens.findIndex((t) => program.test(t.split('/').pop() ?? ''));
229
+ if (i < 0)
230
+ return null;
231
+ const prefix = tokens.slice(0, i);
232
+ const launcherOnly = prefix.every((t) => EXEC_LAUNCHER.test(t.split('/').pop() ?? ''));
233
+ // One absolute path split at its spaces: starts with '/', no later piece starts a new path, no
234
+ // piece is a flag / assignment.
235
+ const pathPieces = prefix.length > 0 &&
236
+ prefix[0].startsWith('/') &&
237
+ tokens[i].includes('/') &&
238
+ !tokens[i].startsWith('/') &&
239
+ prefix.slice(1).every((t) => !t.includes('/')) &&
240
+ prefix.every((t) => !t.startsWith('-') && !t.includes('='));
241
+ if (!launcherOnly && !pathPieces)
242
+ return null;
243
+ return [tokens[i].split('/').pop(), ...tokens.slice(i + 1)].join(' ');
244
+ }
245
+ /** `-project` / `-destination` / `-derivedDataPath` values of a managed-WDA xcodebuild command. */
246
+ export function wdaCommandIdentity(cmd) {
247
+ const tokens = cmd.trim().split(/\s+/);
248
+ const valueOf = (flag) => {
249
+ const i = tokens.indexOf(flag);
250
+ return i >= 0 && i + 1 < tokens.length ? tokens[i + 1] : undefined;
251
+ };
252
+ return { project: valueOf('-project'), destination: valueOf('-destination'), derivedDataPath: valueOf('-derivedDataPath') };
253
+ }
254
+ /** Per-kind command identity (on top of the exact start-time match). */
255
+ function commandMatches(kind, recorded, live) {
256
+ if (!KIND_COMMAND_RE[kind].test(live))
257
+ return false;
258
+ if (live === recorded)
259
+ return true;
260
+ if (kind === 'metro') {
261
+ // Metro is launched via `npx`, which npm retitles shortly after spawn. Compare what runs.
262
+ const tail = commandTail(live);
263
+ return tail !== '' && tail === commandTail(recorded);
264
+ }
265
+ // Program path normalised to its basename (shim re-exec); the argument tail must be identical.
266
+ const program = KIND_PROGRAM_RE[kind];
267
+ if (!program)
268
+ return false;
269
+ const liveTail = programTail(live, program);
270
+ const recordedTail = programTail(recorded, program);
271
+ if (!liveTail || liveTail !== recordedTail)
272
+ return false;
273
+ if (kind === 'wda') {
274
+ // Defence in depth: the managed WDA's project + simulator destination must be present.
275
+ const id = wdaCommandIdentity(recordedTail);
276
+ return !!id.project && !!id.destination;
277
+ }
278
+ return true;
279
+ }
280
+ /** Does the live `pid` still carry the fingerprint recorded at spawn? Start time is the hard
281
+ * requirement (exact); the command is compared per kind (see commandMatches). */
282
+ function fingerprintMatches(entry, ops) {
283
+ if (!entry.procStart || !entry.command)
284
+ return false; // unverifiable > never signal/adopt
285
+ const start = norm(ops.psStartTime(entry.pid));
286
+ if (!start || start !== entry.procStart)
287
+ return false;
288
+ const cmd = norm(ops.psCommand(entry.pid));
289
+ return cmd != null && commandMatches(entry.kind, entry.command, cmd);
290
+ }
291
+ /** Verify that `pid` is still the child we registered (exact start time + per-kind command, per
292
+ * the registry entry, or `entry` when given), then kill or adopt it. A pid with no verifiable
293
+ * registry fingerprint, or whose fingerprint differs, is reported 'recycled' and never signalled.
294
+ * Only a child Swipium spawned as a group leader has its process group signalled. */
295
+ export function reclaimPid(pid, kind, ops = REAL_OPS, entry = readEntries().find((e) => e.pid === pid && e.kind === kind)) {
296
+ if (!ops.pidAlive(pid))
297
+ return 'gone';
298
+ if (!entry || entry.pid !== pid || !fingerprintMatches(entry, ops))
299
+ return 'recycled';
300
+ if (kind === 'emulator')
301
+ return 'adopted'; // still a real emulator; leave it booted (usable via adb)
302
+ return ops.killTree(pid, entry.groupLeader === true) ? 'killed' : 'gone';
303
+ }
304
+ async function defaultWdaHealthy(endpoint) {
305
+ return (await checkWda(endpoint, WDA_ADOPT_PROBE_TIMEOUT_MS)).ready;
306
+ }
307
+ /** Orphaned WDA entries eligible for adoption: owner dead, < 12 h old, endpoint recorded, pid
308
+ * still a live xcodebuild (ps-checked), and /status healthy. Probed concurrently, before the lock. */
309
+ async function adoptableWdaPids(entries, opts) {
310
+ const candidates = entries.filter((e) => e.kind === 'wda' &&
311
+ typeof e.endpoint === 'string' &&
312
+ opts.now - e.startedAt < WDA_ADOPT_MAX_AGE_MS &&
313
+ !serverStillAlive(e, opts.ops) &&
314
+ opts.ops.pidAlive(e.pid) &&
315
+ fingerprintMatches(e, opts.ops));
316
+ const healthy = await Promise.all(candidates.map((e) => opts.wdaHealthy(e.endpoint).catch(() => false)));
317
+ return new Set(candidates.filter((_, i) => healthy[i]).map((e) => e.pid));
318
+ }
319
+ /** Startup sweep (called once from startServer): reap children whose owning server died,
320
+ * except a young, healthy managed WDA, which is adopted (see the header comment). */
321
+ export async function reapOrphanedProcesses(options = {}) {
322
+ const opts = {
323
+ ops: options.ops ?? REAL_OPS,
324
+ now: options.now ?? Date.now(),
325
+ wdaHealthy: options.wdaHealthy ?? defaultWdaHealthy,
326
+ };
327
+ const adoptable = await adoptableWdaPids(readEntries(), opts);
328
+ mutateEntries((entries) => {
329
+ const keep = [];
330
+ for (const e of entries) {
331
+ if (serverStillAlive(e, opts.ops)) {
332
+ keep.push(e); // a live concurrent server owns it, not ours to touch
333
+ continue;
334
+ }
335
+ if (e.kind === 'wda' && adoptable.has(e.pid)) {
336
+ // Re-own it (startedAt kept, so the 12 h cap counts from the WDA's real start).
337
+ keep.push({ ...e, serverPid: process.pid });
338
+ log('info', 'adopted managed WDA from a previous server run (healthy, < 12 h old)', {
339
+ pid: e.pid,
340
+ endpoint: e.endpoint,
341
+ sessionId: e.sessionId,
342
+ });
343
+ continue;
344
+ }
345
+ const outcome = reclaimPid(e.pid, e.kind, opts.ops, e);
346
+ if (outcome === 'killed') {
347
+ log('warn', 'reaped orphaned child process from a previous server run', { pid: e.pid, kind: e.kind, sessionId: e.sessionId });
348
+ }
349
+ else if (outcome === 'adopted') {
350
+ log('info', 'adopted orphaned emulator (left booted; reachable via adb)', { pid: e.pid, sessionId: e.sessionId });
351
+ }
352
+ else if (outcome === 'recycled') {
353
+ log('info', 'dropped orphan entry: PID recycled or fingerprint unverifiable, not signalled', { pid: e.pid, kind: e.kind });
354
+ }
355
+ // In every other non-live-owner case the entry is dropped: it has been handled.
356
+ }
357
+ return keep;
358
+ });
359
+ }
360
+ function lsofListeners(port) {
361
+ if (process.platform === 'win32')
362
+ return [];
363
+ try {
364
+ const out = spawnSync('lsof', ['-nP', `-iTCP:${port}`, '-sTCP:LISTEN', '-Fp'], { encoding: 'utf8', env: psEnv() });
365
+ return (out.stdout ?? '')
366
+ .split('\n')
367
+ .filter((l) => l.startsWith('p'))
368
+ .map((l) => Number(l.slice(1)))
369
+ .filter((n) => Number.isInteger(n) && n > 0);
370
+ }
371
+ catch {
372
+ return [];
373
+ }
374
+ }
375
+ function psAll() {
376
+ if (process.platform === 'win32')
377
+ return [];
378
+ try {
379
+ const out = spawnSync('ps', ['-axo', 'pid=,command='], { encoding: 'utf8', env: psEnv(), maxBuffer: 16 * 1024 * 1024 });
380
+ if (out.status !== 0)
381
+ return [];
382
+ return (out.stdout ?? '')
383
+ .split('\n')
384
+ .map((l) => /^\s*(\d+)\s+(.*)$/.exec(l))
385
+ .filter((m) => !!m)
386
+ .map((m) => ({ pid: Number(m[1]), command: m[2] }));
387
+ }
388
+ catch {
389
+ return [];
390
+ }
391
+ }
392
+ const REAL_WDA_SCAN_OPS = { listeners: lsofListeners, listProcesses: psAll, psCommand };
393
+ /** Does `command` look exactly like the managed WDA runner Swipium starts for `sig`?
394
+ * xcodebuild by basename (shim-proof), `test-without-building`, and the recorded
395
+ * `-project` / `-destination id=<udid>` (/ `-derivedDataPath`) arguments. Exported for tests. */
396
+ export function isManagedWdaCommand(command, sig) {
397
+ const tail = programTail(norm(command) ?? '', /^xcodebuild$/i);
398
+ if (!tail)
399
+ return false;
400
+ const padded = ` ${tail} `;
401
+ return (padded.includes(` -project ${sig.projectPath} `) &&
402
+ padded.includes(` -destination id=${sig.udid} `) &&
403
+ padded.includes(' test-without-building ') &&
404
+ (!sig.derivedDataPath || padded.includes(` -derivedDataPath ${sig.derivedDataPath} `)));
405
+ }
406
+ /** Pids of live managed-WDA xcodebuild processes matching `sig`. Used by `qa_wda stop` when the
407
+ * registry entry for a WDA this session started was lost. The process LISTENing on the managed
408
+ * port is checked first; on a simulator that listener is usually the XCTest runner (not
409
+ * xcodebuild), so every process is then scanned for the exact managed-WDA signature. Only
410
+ * processes whose command matches (see isManagedWdaCommand) are ever returned. */
411
+ export function findManagedWdaProcesses(sig, ops = REAL_WDA_SCAN_OPS) {
412
+ const found = new Set();
413
+ if (sig.port) {
414
+ for (const pid of ops.listeners(sig.port)) {
415
+ const cmd = ops.psCommand(pid);
416
+ if (pid !== process.pid && cmd && isManagedWdaCommand(cmd, sig))
417
+ found.add(pid);
418
+ }
419
+ }
420
+ if (found.size === 0) {
421
+ for (const p of ops.listProcesses()) {
422
+ if (p.pid !== process.pid && isManagedWdaCommand(p.command, sig))
423
+ found.add(p.pid);
424
+ }
425
+ }
426
+ return [...found];
427
+ }
428
+ /** SIGTERM a managed WDA found by signature (its process group when it leads one; `qa_wda
429
+ * start` spawns it detached). Exported so qa_wda can share the real kill primitive. */
430
+ export function killManagedWda(pid, ops = REAL_OPS) {
431
+ return ops.killTree(pid, ops.psPgid(pid) === pid);
432
+ }
433
+ //# sourceMappingURL=processRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processRegistry.js","sourceRoot":"","sources":["../../src/session/processRegistry.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,0FAA0F;AAC1F,8DAA8D;AAC9D,EAAE;AACF,gBAAgB;AAChB,oFAAoF;AACpF,wFAAwF;AACxF,+EAA+E;AAC/E,iGAAiG;AACjG,wFAAwF;AACxF,iGAAiG;AACjG,kGAAkG;AAClG,4FAA4F;AAC5F,8FAA8F;AAC9F,6EAA6E;AAC7E,qGAAqG;AACrG,8FAA8F;AAC9F,6FAA6F;AAC7F,kGAAkG;AAClG,gGAAgG;AAChG,gFAAgF;AAChF,wFAAwF;AACxF,kGAAkG;AAClG,iGAAiG;AACjG,mDAAmD;AACnD,sFAAsF;AACtF,sCAAsC;AACtC,8FAA8F;AAC9F,gGAAgG;AAChG,kGAAkG;AAClG,kGAAkG;AAClG,gGAAgG;AAChG,gGAAgG;AAChG,8DAA8D;AAE9D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAsBzC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACxD,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACjD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AAC5D,MAAM,cAAc,GAAG,GAAG,cAAc,OAAO,CAAC;AAChD,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,oFAAoF;AACpF,MAAM,eAAe,GAAuC;IAC1D,KAAK,EAAE,uCAAuC;IAC9C,GAAG,EAAE,aAAa;IAClB,SAAS,EAAE,sCAAsC;IACjD,QAAQ,EAAE,gBAAgB;CAC3B,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,CAA4B,EAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;AAEzH,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;oGACoG;AACpG,MAAM,UAAU,KAAK,CAAC,OAA0B,OAAO,CAAC,GAAG;IACzD,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC7C,CAAC;AAED,6FAA6F;AAC7F,SAAS,OAAO,CAAC,GAAW,EAAE,KAAa;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACxG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QACzD,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AACD,MAAM,SAAS,GAAG,CAAC,GAAW,EAAiB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC1E,MAAM,WAAW,GAAG,CAAC,GAAW,EAAiB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjF,SAAS,MAAM,CAAC,GAAW;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAA4B,EAAE,CAAC,OAAQ,CAAyB,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;IAC7G,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,EAAE,qDAAqD,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7G,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAA8B;IAClD,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;AAC9H,CAAC;AAED,SAAS,aAAa,CAAC,EAA6D;IAClF,IAAI,CAAC;QACH,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,YAAY,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,OAAO,EAAE,kFAAkF,EAAE;YAC/F,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;SACf,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,MAAkB,QAAQ;IAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO;QACL,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG;QACpC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;+CAE+C;AAC/C,MAAM,UAAU,sBAAsB,CACpC,GAAuB,EACvB,IAAwB,EACxB,SAAkB,EAClB,QAAiD,EAAE;IAEnD,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO;IAC7B,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACzB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QACvC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;KACxI,CAAC,CAAC;AACL,CAAC;AAED;gFACgF;AAChF,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,WAAW,EAAE;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,GAAG,CAAC;SAC3F,GAAG,EAAE,CAAC;AACX,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB,CAAC,GAAuB;IAC9D,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO;IAC7B,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAcD,iGAAiG;AACjG,SAAS,QAAQ,CAAC,GAAW,EAAE,KAAc;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAEpF;;;2EAG2E;AAC3E,SAAS,gBAAgB,CAAC,KAA6D,EAAE,MAAkB,QAAQ;IACjH,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,IAAI,SAAS,KAAK,OAAO,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC,CAAC,gDAAgD;IAC7F,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC;IACrF,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,GAAG,IAAI,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACvD,OAAO,CAAC,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAID;;oFAEoF;AACpF,MAAM,cAAc,GAAG,gEAAgE,CAAC;AAExF;8EAC8E;AAC9E,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAAE,CAAC,EAAE,CAAC;IACvF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,oFAAoF;AACpF,MAAM,eAAe,GAAgD;IACnE,GAAG,EAAE,eAAe;IACpB,SAAS,EAAE,mBAAmB;IAC9B,QAAQ,EAAE,qCAAqC;CAChD,CAAC;AAEF,iGAAiG;AACjG,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEzC;;;;;;;0BAO0B;AAC1B,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,OAAe;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvF,+FAA+F;IAC/F,gCAAgC;IAChC,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,GAAG,CAAC;QACjB,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QACvB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;QAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;AAC9H,CAAC;AAED,wEAAwE;AACxE,SAAS,cAAc,CAAC,IAAwB,EAAE,QAAgB,EAAE,IAAY;IAC9E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,0FAA0F;QAC1F,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IACD,+FAA+F;IAC/F,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,uFAAuF;QACvF,MAAM,EAAE,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;kFACkF;AAClF,SAAS,kBAAkB,CAAC,KAA0B,EAAE,GAAe;IACrE,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,CAAC,oCAAoC;IAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,OAAO,GAAG,IAAI,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;;sFAGsF;AACtF,MAAM,UAAU,UAAU,CACxB,GAAW,EACX,IAAwB,EACxB,MAAkB,QAAQ,EAC1B,QAAyC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IAEpG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACtF,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC,CAAC,0DAA0D;IACrG,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3E,CAAC;AASD,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IAC/C,OAAO,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC;AACtE,CAAC;AAED;uGACuG;AACvG,KAAK,UAAU,gBAAgB,CAAC,OAA8B,EAAE,IAA2B;IACzF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,KAAK;QAChB,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAC9B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,oBAAoB;QAC7C,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;QACxB,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAClC,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1G,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;sFACsF;AACtF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAuB,EAAE;IACnE,MAAM,IAAI,GAA0B;QAClC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,QAAQ;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;QAC9B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,iBAAiB;KACpD,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9D,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE;QACxB,MAAM,IAAI,GAA0B,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,sDAAsD;gBACpE,SAAS;YACX,CAAC;YACD,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,gFAAgF;gBAChF,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC5C,GAAG,CAAC,MAAM,EAAE,sEAAsE,EAAE;oBAClF,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,EAAE,0DAA0D,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAChI,CAAC;iBAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,GAAG,CAAC,MAAM,EAAE,4DAA4D,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YACpH,CAAC;iBAAM,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,GAAG,CAAC,MAAM,EAAE,+EAA+E,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7H,CAAC;YACD,gFAAgF;QAClF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAWD,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnH,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aACtB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,KAAK;IACZ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;QACxH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aACtB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAe,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAWpG;;kGAEkG;AAClG,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,GAAwB;IAC3E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,CAAC;IAC3B,OAAO,CACL,MAAM,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,WAAW,GAAG,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,oBAAoB,GAAG,CAAC,IAAI,GAAG,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC1C,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,CAAC,QAAQ,CAAC,qBAAqB,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CACvF,CAAC;AACJ,CAAC;AAED;;;;mFAImF;AACnF,MAAM,UAAU,uBAAuB,CAAC,GAAwB,EAAE,MAAkB,iBAAiB;IACnG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;wFACwF;AACxF,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,MAA+C,QAAQ;IACjG,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AACpD,CAAC"}
@@ -51,6 +51,6 @@ export function progressLine(p) {
51
51
  if (!p)
52
52
  return undefined;
53
53
  const sec = Math.round((p.updatedAt - p.startedAt) / 1000);
54
- return `${p.phase} (${sec}s)${p.userActionRequired ? ' ⚠ needs you' : ''}: ${p.statusText}` + (p.nextExpected ? ` → ${p.nextExpected}` : '');
54
+ return (`${p.phase} (${sec}s)${p.userActionRequired ? ' ⚠ needs you' : ''}: ${p.statusText}` + (p.nextExpected ? ` > ${p.nextExpected}` : ''));
55
55
  }
56
56
  //# sourceMappingURL=progress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/session/progress.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,gGAAgG;AAChG,gGAAgG;AAChG,gGAAgG;AAahG,MAAM,UAAU,aAAa,CAC3B,QAAsB,EACtB,OAAgB,EAChB,GAAc,EACd,KAAa,EACb,OAAuE,EAAE,UAAU,EAAE,KAAK,EAAE;IAE5F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAkB;QAC3B,KAAK;QACL,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1G,CAAC,CAAC;IACF,KAAK,EAAE,CAAC;IACR,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QACnE,KAAK,CAAC,SAAS,EAAE,IAAI;YACnB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC5B,IAAI,IAAI,EAAE,UAAU;gBAAE,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACzD,IAAI,IAAI,EAAE,YAAY;gBAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAC/D,KAAK,EAAE,CAAC;QACV,CAAC;QACD,MAAM,CAAC,MAAM;YACX,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YACtB,KAAK,EAAE,CAAC;QACV,CAAC;QACD,SAAS,CAAC,UAAU;YAClB,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAChC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YAC9B,KAAK,EAAE,CAAC;QACV,CAAC;QACD,IAAI,CAAC,UAAU;YACb,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC;YACjC,IAAI,UAAU;gBAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YAC9C,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;YAC/B,KAAK,EAAE,CAAC;QACV,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,CAA4B;IACvD,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/I,CAAC"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/session/progress.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,gGAAgG;AAChG,gGAAgG;AAChG,gGAAgG;AAahG,MAAM,UAAU,aAAa,CAC3B,QAAsB,EACtB,OAAgB,EAChB,GAAc,EACd,KAAa,EACb,OAAuE,EAAE,UAAU,EAAE,KAAK,EAAE;IAE5F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAkB;QAC3B,KAAK;QACL,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1G,CAAC,CAAC;IACF,KAAK,EAAE,CAAC;IACR,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QACnE,KAAK,CAAC,SAAS,EAAE,IAAI;YACnB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC5B,IAAI,IAAI,EAAE,UAAU;gBAAE,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACzD,IAAI,IAAI,EAAE,YAAY;gBAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAC/D,KAAK,EAAE,CAAC;QACV,CAAC;QACD,MAAM,CAAC,MAAM;YACX,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YACtB,KAAK,EAAE,CAAC;QACV,CAAC;QACD,SAAS,CAAC,UAAU;YAClB,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAChC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YAC9B,KAAK,EAAE,CAAC;QACV,CAAC;QACD,IAAI,CAAC,UAAU;YACb,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC;YACjC,IAAI,UAAU;gBAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;YAC9C,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;YAC/B,KAAK,EAAE,CAAC;QACV,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,CAA4B;IACvD,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,OAAO,CACL,GAAG,CAAC,CAAC,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACtI,CAAC;AACJ,CAAC"}