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,14 +1,24 @@
1
- // SWIPIUM Issue Log MCP tools (SWIPIUM-REQ-07). Expose the durable project issue ledger:
2
- // qa_issue_log — list current issues + counts + recurrence candidates
1
+ // SWIPIUM Issue Log MCP tools. qa_issue_log is still the only exposed issue
2
+ // tool, but it now carries the full ledger lifecycle via `mode`:
3
+ // history (default): list current issues + counts + recurrence candidates (original behavior)
4
+ // log: record a new observation (re-observing a fixed fingerprint reopens it)
5
+ // mark_fixed: transition an issue to fixed (commit/version/how-fixed provenance)
6
+ // verify_fixed: confirm a fixed issue held, with current-run evidence
7
+ // suppress: hide expected noise from default history (stays under known-noise);
8
+ // `suppressedUntil` expires it automatically, `unsuppress:true` lifts it early
9
+ // metrics: opened/fixed/reopened/verified counts + trends from the event log
3
10
  //
4
11
  // Thin wrappers over src/issues/*; heavy logic lives there. Large lists are returned inline but
5
12
  // compact (issue ids + summaries), with a resource URI for the full index.
6
13
  import { z } from 'zod';
7
- import { qaOk, qaError } from '../lib/result.js';
8
- import { resolveProjectRoot } from '../context/projectRoot.js';
9
- import { queryIssues } from '../issues/index.js';
10
- import { issuesResourceUri } from '../issues/store.js';
11
- import { ALL_ISSUE_CATEGORIES, ALL_ISSUE_SEVERITIES, ALL_ISSUE_STATES } from '../issues/schema.js';
14
+ import { qaOk, qaError, unknownSessionError } from '../lib/result.js';
15
+ import { resolveProjectRoot, unresolvedProjectRootError } from '../context/projectRoot.js';
16
+ import { makeRedactor } from '../lib/redact.js';
17
+ import { markFixed, markSuppressed, markUnsuppressed, queryIssues, recordObservation, verifyFixed, } from '../issues/index.js';
18
+ import { fingerprintTokens, hasIdentitySignal } from '../issues/fingerprint.js';
19
+ import { computeIssueMetrics } from '../issues/metrics.js';
20
+ import { readEvents } from '../issues/store.js';
21
+ import { ALL_ISSUE_CATEGORIES, ALL_ISSUE_SEVERITIES, ALL_ISSUE_STATES, } from '../issues/schema.js';
12
22
  function nowIso() {
13
23
  return new Date().toISOString();
14
24
  }
@@ -16,48 +26,255 @@ async function rootFor(server, sessions, args) {
16
26
  if (args.sessionId) {
17
27
  const s = sessions.get(args.sessionId);
18
28
  if (!s)
19
- return { hint: `Unknown sessionId ${args.sessionId}` };
20
- return { root: s.root };
29
+ return { error: unknownSessionError(args.sessionId) };
30
+ return { root: s.root, appId: s.appId };
21
31
  }
22
32
  const resolved = await resolveProjectRoot(server, args.projectRoot);
23
33
  if (!resolved.root)
24
34
  return { hint: resolved.hint };
25
35
  return { root: resolved.root };
26
36
  }
37
+ /** Compact lifecycle view of one record for write-mode responses (undefined fields drop out). */
38
+ function lifecycleRecord(r) {
39
+ return {
40
+ issueId: r.issueId,
41
+ fingerprint: r.fingerprint,
42
+ state: r.state,
43
+ category: r.category,
44
+ severity: r.severity,
45
+ summary: r.summary,
46
+ observationCount: r.observationCount,
47
+ lastSeenAt: r.lastSeenAt,
48
+ fixedAt: r.fixedAt,
49
+ fixedInCommit: r.fixedInCommit,
50
+ fixedInVersion: r.fixedInVersion,
51
+ howFixed: r.howFixed,
52
+ reopenedAt: r.reopenedAt,
53
+ recurrence: r.lastRecurrenceMessage,
54
+ suppressionReason: r.suppressionReason,
55
+ suppressedUntil: r.suppressedUntil,
56
+ stateBeforeSuppression: r.stateBeforeSuppression,
57
+ lastVerifiedFixedAt: r.lastVerifiedFixedAt,
58
+ };
59
+ }
60
+ /** Free-text qa_issue_log fields persisted to .swipium/issues-log.jsonl. */
61
+ const FREE_TEXT_FIELDS = ['title', 'summary', 'howFixed', 'suppressionReason', 'fixedBy'];
62
+ function sessionSecrets(sessions, sessionId) {
63
+ return (sessionId ? sessions.get(sessionId)?.secrets : undefined) ?? [];
64
+ }
65
+ /** Redact registered session secrets from the agent-supplied free-text fields (exported for tests). */
66
+ export function redactIssueArgs(args, secrets) {
67
+ const redact = makeRedactor(secrets);
68
+ const out = { ...args };
69
+ for (const k of FREE_TEXT_FIELDS) {
70
+ const v = out[k];
71
+ if (typeof v === 'string')
72
+ out[k] = redact(v) ?? v;
73
+ }
74
+ return out;
75
+ }
27
76
  export function registerIssues(server, sessions) {
28
77
  // --- qa_issue_log ------------------------------------------------------------------------
29
78
  server.registerTool('qa_issue_log', {
30
- title: 'List project issues',
31
- description: 'List the durable project issue ledger (`.swipium/issues-log.jsonl`). Returns current issue records, counts by state/category/severity, and recurrence candidates (previously-fixed issues seen again). Filter by state, category, severity, platform, or since (ISO date). Suppressed issues are hidden unless includeSuppressed=true (they stay visible under known-noise in reports either way).',
79
+ title: 'Project issue ledger (list + lifecycle)',
80
+ description: 'Durable project issue ledger (.swipium/issues-log.jsonl). mode: history (default; list + counts + recurrence, filterable), ' +
81
+ 'log (record an observation; identity = normalized title + category + platform; re-observing a fixed issue reopens it), ' +
82
+ 'mark_fixed (active issues only), verify_fixed (needs current-run evidence), suppress (suppressedUntil auto-expires; ' +
83
+ 'unsuppress:true lifts it), metrics (trends from the event log). Transitions take issueId (or fingerprint).',
32
84
  inputSchema: {
33
85
  projectRoot: z.string().optional(),
34
86
  sessionId: z.string().optional(),
35
- state: z.enum(ALL_ISSUE_STATES).optional(),
36
- category: z.enum(ALL_ISSUE_CATEGORIES).optional(),
37
- severity: z.enum(ALL_ISSUE_SEVERITIES).optional(),
38
- platform: z.enum(['ios', 'android', 'web', 'unknown']).optional(),
39
- since: z.string().optional().describe('ISO timestamp; only issues last seen on/after this.'),
40
- includeSuppressed: z.boolean().optional(),
87
+ mode: z.enum(['history', 'log', 'mark_fixed', 'verify_fixed', 'suppress', 'metrics']).optional(),
88
+ state: z
89
+ .enum(ALL_ISSUE_STATES)
90
+ .optional()
91
+ .describe('history filter.'),
92
+ category: z
93
+ .enum(ALL_ISSUE_CATEGORIES)
94
+ .optional()
95
+ .describe('history filter; log: category hint.'),
96
+ severity: z
97
+ .enum(ALL_ISSUE_SEVERITIES)
98
+ .optional()
99
+ .describe('history filter; log: severity hint.'),
100
+ platform: z.enum(['ios', 'android', 'web', 'unknown']).optional().describe('history filter; log: platform observed on.'),
101
+ since: z.string().optional().describe('history/metrics: ISO start.'),
102
+ includeSuppressed: z.boolean().optional().describe('history/metrics: include suppressed issues.'),
103
+ issueId: z.string().optional().describe('Transition key (from history).'),
104
+ fingerprint: z.string().optional().describe('Alternative transition key.'),
105
+ title: z.string().optional().describe('log (required): what was observed, descriptive.'),
106
+ summary: z.string().optional().describe('log: one-line summary.'),
107
+ failureCode: z.string().optional().describe('log: typed code (e.g. REDBOX, ANR); sharpens the fingerprint.'),
108
+ evidenceUris: z.array(z.string()).optional().describe('log/verify_fixed: swipium:// evidence URIs.'),
109
+ fixedInCommit: z.string().optional().describe('mark_fixed'),
110
+ fixedInVersion: z.string().optional().describe('mark_fixed'),
111
+ howFixed: z.string().optional().describe('mark_fixed (quoted on recurrence)'),
112
+ fixedBy: z.string().optional().describe('mark_fixed'),
113
+ reportUri: z.string().optional().describe('verify_fixed evidence'),
114
+ testCaseId: z.string().optional().describe('verify_fixed evidence'),
115
+ auditCheckId: z.string().optional().describe('verify_fixed evidence'),
116
+ suppressionReason: z.string().optional().describe('suppress'),
117
+ suppressedUntil: z.string().optional().describe('suppress: ISO expiry (then the issue returns to its prior state).'),
118
+ unsuppress: z.boolean().optional().describe('suppress: lift an existing suppression now.'),
119
+ suppressionScope: z.enum(['fingerprint', 'platform', 'environment', 'appVersion']).optional().describe('suppress'),
120
+ until: z.string().optional().describe('metrics: ISO end; suppress: alias of suppressedUntil.'),
121
+ groupBy: z
122
+ .enum(['day', 'week', 'version', 'commit', 'category', 'owner', 'screen', 'feature'])
123
+ .optional()
124
+ .describe('metrics bucketing (default week).'),
41
125
  },
42
- }, async ({ projectRoot, sessionId, state, category, severity, platform, since, includeSuppressed }) => {
43
- const { root, hint } = await rootFor(server, sessions, { projectRoot, sessionId });
126
+ }, async (rawArgs) => {
127
+ // The ledger is a committed repo file: scrub every registered session secret (typed
128
+ // passwords, OTPs, secret flow variables) out of agent-supplied free text before it lands.
129
+ const args = redactIssueArgs(rawArgs, sessionSecrets(sessions, rawArgs.sessionId));
130
+ const { root, hint, appId, error } = await rootFor(server, sessions, { projectRoot: args.projectRoot, sessionId: args.sessionId });
44
131
  if (!root)
45
- return qaError({
46
- what: 'Could not resolve a project root',
47
- changedState: false,
48
- retrySafe: true,
49
- nextSteps: ['Pass projectRoot or sessionId.'],
50
- clientHint: hint,
132
+ return error ?? unresolvedProjectRootError({ source: 'none', hint });
133
+ const mode = args.mode ?? 'history';
134
+ const now = nowIso();
135
+ // --- log: record a new observation (may reopen a previously fixed issue) ---------------
136
+ if (mode === 'log') {
137
+ if (!args.title && !args.summary)
138
+ return qaError({
139
+ what: 'mode "log" needs a title (and ideally a summary) describing what was observed',
140
+ changedState: false,
141
+ retrySafe: true,
142
+ nextSteps: ['Pass title and summary; optionally category, severity, platform, failureCode, evidenceUris.'],
143
+ });
144
+ const title = (args.title ?? args.summary).trim();
145
+ // Identity: the normalized title rides the fingerprint's `text:` token (the same token the
146
+ // report bridge uses for visible text), plus category/platform/app scope, so two different
147
+ // defects logged on one platform are two issues, and re-logging the same title matches.
148
+ const observation = {
149
+ title,
150
+ summary: args.summary ?? title,
151
+ failureCode: args.failureCode,
152
+ visibleText: title.replace(/[\s.!?…:;,]+$/u, ''),
153
+ };
154
+ // The `app:` token is NEVER part of a manual entry's identity: the ledger is already
155
+ // project-scoped, and appId is only known when a sessionId was passed. Including it made
156
+ // the same title logged via sessionId vs via projectRoot two different issues. appId is
157
+ // still stored on the event as metadata. (Pre-1.6 manual issues keep their old
158
+ // platform-only fingerprint; they are never auto-merged; close them via mark_fixed/suppress.)
159
+ const meta = {
160
+ appId,
161
+ fingerprintWithoutAppId: true,
162
+ fingerprintCategory: args.category,
163
+ platform: args.platform,
164
+ links: args.evidenceUris?.length ? { evidenceRefs: args.evidenceUris.map((uri) => ({ kind: 'evidence', uri })) } : undefined,
165
+ };
166
+ if (!hasIdentitySignal(fingerprintTokens({
167
+ ...meta,
168
+ appId: undefined,
169
+ category: meta.fingerprintCategory,
170
+ failureCode: args.failureCode,
171
+ observation,
172
+ })))
173
+ return qaError({
174
+ failureCode: 'ISSUE_LOG_TOO_VAGUE',
175
+ what: `The title "${title}" has no identifying words once ids/numbers are scrubbed, so it would merge with unrelated issues`,
176
+ changedState: false,
177
+ retrySafe: true,
178
+ nextSteps: ['Use a descriptive title (what broke, where), or pass failureCode.'],
179
+ });
180
+ const res = recordObservation(root, observation, now, { categoryHint: args.category, severityHint: args.severity }, meta);
181
+ return qaOk({
182
+ mode,
183
+ issue: lifecycleRecord(res.record),
184
+ issueId: res.issueId,
185
+ fingerprint: res.fingerprint,
186
+ isNew: res.isNew,
187
+ reopened: res.reopened,
188
+ recurrenceMessage: res.recurrenceMessage,
189
+ }, res.reopened
190
+ ? `Reopened ${res.issueId}: ${res.recurrenceMessage}`
191
+ : `${res.isNew ? 'Logged new' : 'Updated'} issue ${res.issueId} (${res.record.state}, ${res.record.category}/${res.record.severity})`);
192
+ }
193
+ // --- metrics: trends computed from the full event log -----------------------------------
194
+ if (mode === 'metrics') {
195
+ const m = computeIssueMetrics(readEvents(root), {
196
+ since: args.since,
197
+ until: args.until,
198
+ groupBy: args.groupBy,
199
+ includeSuppressed: args.includeSuppressed,
51
200
  });
201
+ return qaOk({
202
+ mode,
203
+ metrics: {
204
+ ...m,
205
+ topRecurringIssues: m.topRecurringIssues.map(lifecycleRecord),
206
+ topAgingIssues: m.topAgingIssues.map(lifecycleRecord),
207
+ },
208
+ }, `Issue metrics: opened=${m.opened} fixed=${m.fixed} reopened=${m.reopened} verifiedFixed=${m.verifiedFixed} suppressed=${m.suppressed} reopenRate=${m.reopenRatePct}% fixVerification=${m.fixVerificationRatePct}%`);
209
+ }
210
+ // --- mark_fixed / verify_fixed / suppress: lifecycle transitions on an existing issue ---
211
+ if (mode === 'mark_fixed' || mode === 'verify_fixed' || mode === 'suppress') {
212
+ const key = { issueId: args.issueId, fingerprint: args.fingerprint };
213
+ if (!key.issueId && !key.fingerprint)
214
+ return qaError({
215
+ what: `mode "${mode}" needs the issue key`,
216
+ changedState: false,
217
+ retrySafe: true,
218
+ nextSteps: ['Pass issueId (or fingerprint) from mode "history".'],
219
+ });
220
+ const suppressedUntil = args.suppressedUntil ?? args.until;
221
+ if (mode === 'suppress' && !args.unsuppress && suppressedUntil !== undefined && !Number.isFinite(Date.parse(suppressedUntil)))
222
+ return qaError({
223
+ failureCode: 'INVALID_ARGUMENT',
224
+ what: `suppressedUntil "${suppressedUntil}" is not an ISO timestamp`,
225
+ changedState: false,
226
+ retrySafe: true,
227
+ nextSteps: ['Pass an ISO timestamp such as 2026-12-31T00:00:00Z, or omit it for an open-ended suppression.'],
228
+ });
229
+ const res = mode === 'suppress' && args.unsuppress
230
+ ? markUnsuppressed(root, key, now)
231
+ : mode === 'mark_fixed'
232
+ ? markFixed(root, key, {
233
+ fixedInCommit: args.fixedInCommit,
234
+ fixedInVersion: args.fixedInVersion,
235
+ howFixed: args.howFixed,
236
+ fixedBy: args.fixedBy,
237
+ }, now)
238
+ : mode === 'verify_fixed'
239
+ ? verifyFixed(root, key, {
240
+ reportUri: args.reportUri,
241
+ testCaseId: args.testCaseId,
242
+ auditCheckId: args.auditCheckId,
243
+ evidenceUris: args.evidenceUris,
244
+ }, now)
245
+ : markSuppressed(root, key, {
246
+ suppressionReason: args.suppressionReason,
247
+ suppressedUntil,
248
+ suppressionScope: args.suppressionScope,
249
+ }, now);
250
+ if (!res.ok || !res.record)
251
+ return qaError({
252
+ failureCode: res.code,
253
+ what: res.reason ?? `Could not apply ${mode}`,
254
+ changedState: false,
255
+ retrySafe: true,
256
+ nextSteps: ['Check the issue key with mode "history" (includeSuppressed=true shows suppressed issues).'],
257
+ });
258
+ const r = res.record;
259
+ const summary = mode === 'mark_fixed'
260
+ ? `Marked ${r.issueId} fixed${r.fixedInCommit ? ` in ${r.fixedInCommit}` : ''}`
261
+ : mode === 'verify_fixed'
262
+ ? `Verified fix for ${r.issueId} with current-run evidence`
263
+ : args.unsuppress
264
+ ? `Unsuppressed ${r.issueId} (now ${r.state})`
265
+ : `Suppressed ${r.issueId}${r.suppressionReason ? ` (${r.suppressionReason})` : ''} (hidden from default history${r.suppressedUntil ? ` until ${r.suppressedUntil}` : ''}; still visible under known-noise)`;
266
+ return qaOk({ mode, issue: lifecycleRecord(r) }, summary);
267
+ }
268
+ // --- history (default): the original query/list behavior --------------------------------
52
269
  const query = {
53
- state: state,
54
- category: category,
55
- severity: severity,
56
- platform: platform,
57
- since,
58
- includeSuppressed,
270
+ state: args.state,
271
+ category: args.category,
272
+ severity: args.severity,
273
+ platform: args.platform,
274
+ since: args.since,
275
+ includeSuppressed: args.includeSuppressed,
59
276
  };
60
- const res = queryIssues(root, nowIso(), query);
277
+ const res = queryIssues(root, now, query);
61
278
  const compact = res.records.map((r) => ({
62
279
  issueId: r.issueId,
63
280
  state: r.state,
@@ -67,7 +284,7 @@ export function registerIssues(server, sessions) {
67
284
  lastSeenAt: r.lastSeenAt,
68
285
  observationCount: r.observationCount,
69
286
  recurrence: r.lastRecurrenceMessage,
70
- // REQ-08: linked app-map screens/features, test cases, and fix-verification status.
287
+ // Linked app-map screens/features, test cases, and fix-verification status.
71
288
  linkedScreens: r.appMapRefs?.map((a) => a.screenId).filter(Boolean) ?? [],
72
289
  linkedFeatures: r.appMapRefs?.map((a) => a.featureId).filter(Boolean) ?? [],
73
290
  linkedTestCases: r.testRefs?.map((t) => t.testCaseId) ?? [],
@@ -78,8 +295,7 @@ export function registerIssues(server, sessions) {
78
295
  issues: compact,
79
296
  counts: res.counts,
80
297
  recurrenceCandidates: res.recurrenceCandidates.map((r) => r.issueId),
81
- resourceUri: issuesResourceUri(root),
82
- }, `${res.counts.total} issue(s) — ${Object.entries(res.counts.byState)
298
+ }, `${res.counts.total} issue(s): ${Object.entries(res.counts.byState)
83
299
  .map(([k, v]) => `${k}=${v}`)
84
300
  .join(' ')}${res.recurrenceCandidates.length ? ` | ${res.recurrenceCandidates.length} recurrence candidate(s)` : ''}`);
85
301
  });
@@ -1 +1 @@
1
- {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/tools/issues.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/tools/issues.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,50 @@
1
- // qa_job_status / qa_job_cancel — poll or cancel a long-running job (boot/install).
1
+ // qa_job_status / qa_job_cancel: poll (or long-poll with waitMs) or cancel a background job.
2
2
  // Lets a client reconnect after a tool-call timeout instead of restarting the work.
3
3
  import { z } from 'zod';
4
- import { qaOk, qaError } from '../lib/result.js';
4
+ import { qaOk, qaError, unknownSessionError } from '../lib/result.js';
5
5
  import { progressLine } from '../session/progress.js';
6
+ /** Upper bound for qa_job_status waitMs. Keeps one call well under typical client tool timeouts. */
7
+ export const MAX_JOB_WAIT_MS = 120_000;
8
+ const JOB_POLL_INTERVAL_MS = 500;
9
+ const sleep = (ms) => new Promise((r) => setTimeout(r, Math.max(0, ms)));
6
10
  export function registerJobs(server, sessions) {
7
11
  server.registerTool('qa_job_status', {
8
- title: 'Job status',
9
- description: 'Status of a long-running job (e.g. from qa_prepare_target / qa_test_this execute): running/done/failed/cancelled, the structured progressDetail (phase/elapsed/statusText/nextExpected/logUri/userActionRequired), and the result/error when finished. For a qa_test_this execute job the result carries the terminal state (completed/blocked/unsafe), reportUri, suite, smoke, and health.',
10
- inputSchema: { sessionId: z.string(), jobId: z.string() },
11
- }, async ({ sessionId, jobId }) => {
12
- const job = sessions.get(sessionId)?.jobs.get(jobId);
12
+ title: 'Job status (optionally wait)',
13
+ description: 'Status of a background job (qa_test_this, qa_prepare_target, qa_explore, qa_build run, …): status ' +
14
+ '(running/done/failed/cancelled), progressDetail, and result/error when finished (for qa_test_this: state completed/blocked/unsafe/needs_input, ' +
15
+ 'reportUri, suite, smoke, health). waitMs long-polls: returns once the job leaves "running", or with ' +
16
+ 'waited.timedOut:true.',
17
+ inputSchema: {
18
+ sessionId: z.string(),
19
+ jobId: z.string(),
20
+ waitMs: z
21
+ .number()
22
+ .int()
23
+ .min(0)
24
+ .optional()
25
+ .describe(`Block up to this many ms for the job to finish (capped at ${MAX_JOB_WAIT_MS}). Default 0 = return immediately.`),
26
+ },
27
+ }, async ({ sessionId, jobId, waitMs }, extra) => {
28
+ const session = sessions.get(sessionId);
29
+ let job = session?.jobs.get(jobId);
30
+ if (!session)
31
+ return unknownSessionError(sessionId);
13
32
  if (!job) {
14
33
  return qaError({
15
34
  what: `Unknown job ${jobId}`,
35
+ failureCode: 'INVALID_ARGUMENT',
16
36
  changedState: false,
17
37
  retrySafe: true,
18
- nextSteps: ['Check the jobId returned by qa_prepare_target.'],
38
+ nextSteps: ['Use the sessionId + jobId returned by the tool that started the job (qa_status lists the last job).'],
19
39
  });
20
40
  }
41
+ const budget = Math.min(Math.max(0, waitMs ?? 0), MAX_JOB_WAIT_MS);
42
+ const started = Date.now();
43
+ while (budget > 0 && job.status === 'running' && Date.now() - started < budget && !extra?.signal?.aborted) {
44
+ await sleep(Math.min(JOB_POLL_INTERVAL_MS, budget - (Date.now() - started)));
45
+ job = session.jobs.get(jobId) ?? job;
46
+ }
47
+ const waited = budget > 0 ? { waitedMs: Date.now() - started, timedOut: job.status === 'running' } : undefined;
21
48
  const progLine = progressLine(job.progressDetail);
22
49
  return qaOk({
23
50
  jobId: job.jobId,
@@ -28,21 +55,19 @@ export function registerJobs(server, sessions) {
28
55
  error: job.error,
29
56
  result: job.result,
30
57
  artifactUris: job.artifactUris,
31
- }, `job ${job.jobId} [${job.kind}] = ${job.status}${progLine ? `\n ${progLine}` : job.progress ? ` (${job.progress})` : ''}${job.resultText ? `\n${job.resultText}` : ''}${job.error ? `\nerror: ${job.error}` : ''}`);
58
+ ...(waited ? { waited } : {}),
59
+ }, `job ${job.jobId} [${job.kind}] = ${job.status}${progLine ? `\n ${progLine}` : job.progress ? ` (${job.progress})` : ''}${job.resultText ? `\n${job.resultText}` : ''}${job.error ? `\nerror: ${job.error}` : ''}` +
60
+ (waited?.timedOut ? `\nstill running after ${waited.waitedMs}ms, call again (waitMs) or qa_job_cancel.` : ''));
32
61
  });
33
62
  server.registerTool('qa_job_cancel', {
34
63
  title: 'Cancel a job',
35
- description: 'Cancel a running background job and abort its spawned child processes (build/boot/install/record). USE WHEN a job started by a macro tool (qa_test_this mode:"execute", qa_prepare_target, qa_build mode:"run", qa_bundletool, …) is stuck or no longer needed — check qa_job_status first if unsure. Preconditions: the sessionId and the jobId returned by the tool that started the job. Returns { jobId, cancelled }; cancelled:false means the job already finished or the id is unknown (not an error). Side effects already applied (e.g. a booted emulator, partial build output) are NOT rolled back.',
64
+ description: 'Cancel a running background job and abort its child processes (build/boot/install/record). Returns {jobId, cancelled}; ' +
65
+ 'cancelled:false means it already finished or is unknown. Side effects already applied are not rolled back.',
36
66
  inputSchema: { sessionId: z.string(), jobId: z.string() },
37
67
  }, async ({ sessionId, jobId }) => {
38
68
  const session = sessions.get(sessionId);
39
69
  if (!session)
40
- return qaError({
41
- what: `Unknown sessionId ${sessionId}`,
42
- changedState: false,
43
- retrySafe: true,
44
- nextSteps: ['Call qa_start_session first.'],
45
- });
70
+ return unknownSessionError(sessionId);
46
71
  const ok = sessions.cancelJob(session, jobId);
47
72
  return qaOk({ jobId, cancelled: ok }, ok ? `cancelled ${jobId}` : `job ${jobId} not running (already finished or unknown)`);
48
73
  });
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"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"}