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,399 @@
1
+ // Minimal advisory file lock for cross-process coordination on the small shared JSON files
2
+ // under ~/.swipium (registry.json, processes.json) and .swipium/app-map.json. Two concurrent
3
+ // server instances are common (multiple MCP clients), and an unlocked read-modify-write lets them
4
+ // clobber each other's entries. The lock is a DIRECTORY (mkdir is atomic on POSIX and Windows):
5
+ // whoever creates it holds it. Each acquisition writes an OWNER file (`<lockPath>/owner` =
6
+ // `pid:token`, created exclusively) so release can verify the lock is still ours. A holder that
7
+ // stalled past the stale threshold and was taken over must NOT delete the new owner's lock.
8
+ //
9
+ // Stale takeover (holder crashed mid-write) is CLAIM-then-MOVE (H8, review round 2):
10
+ // 1. claim: the taker creates `<lockPath>/.takeover` EXCLUSIVELY ('wx', with its own token).
11
+ // Only one taker can claim a given lock-directory instance, and the lock path never
12
+ // disappears during a failed claim, so a newcomer can't slip in;
13
+ // 2. verify: the claimed directory must still be exactly the lock it judged stale (same owner,
14
+ // still old before the claim, same inode after it). If a racing waiter already replaced it with a FRESH lock, the claim is dropped
15
+ // and the fresh lock is left untouched (it never moved);
16
+ // 3. move: rename the lock to a unique tombstone (`<lockPath>.stale-<pid>-<uuid>`), confirm the
17
+ // tombstone carries OUR claim (i.e. we moved the instance we verified), delete it, retry mkdir.
18
+ // Residual race: between verify and move the path can only change if the presumed-dead holder
19
+ // wakes up and releases, and a new holder re-creates the lock, inside that window. The post-move
20
+ // claim check catches it: the moved lock is renamed back. If that restore fails because yet
21
+ // another contender already created the path, the taker does NOT proceed (takeover failed > it
22
+ // goes back to waiting) and does NOT delete the moved lock. It stays as a tombstone (never
23
+ // treated as safe to rm while it may belong to a live holder) and is swept once older than the
24
+ // stale threshold; the displaced holder is warned at release and removes its own tombstone.
25
+ // Orphaned tombstones / claims (a taker crashed mid-takeover) are swept / expired as stale.
26
+ //
27
+ // Two variants:
28
+ // - withFileLock (sync): for the tiny synchronous JSON rewrites (registry/processes/app-map
29
+ // save). Waits are short synchronous sleeps (Atomics.wait, 25 ms slices, ≤ MAX_WAIT_MS total),
30
+ // so the critical section MUST be short: a sync fn cannot be heartbeated (no timer can fire
31
+ // while it runs). Slow work (e.g. the app-map static scan) belongs OUTSIDE the lock.
32
+ // - withFileLockAsync: for async critical sections. Waits yield to the event loop and a heartbeat
33
+ // refreshes the lock's mtime every staleMs/3 so a long holder is never judged stale.
34
+ // On timeout both variants fail rather than proceed unlocked (that would reintroduce clobbers).
35
+ import { mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, utimesSync, writeFileSync } from 'node:fs';
36
+ import { randomUUID } from 'node:crypto';
37
+ import { basename, dirname, join } from 'node:path';
38
+ import { log } from './logger.js';
39
+ export const STALE_LOCK_MS = 10_000;
40
+ const MAX_WAIT_MS = 2_000;
41
+ const RETRY_SLEEP_MS = 25;
42
+ /** 'retry' (lock vanished / stale takeover attempted) loops without sleeping at most this many
43
+ * times in a row; after that it sleeps like 'busy'. A takeover that can never succeed (EACCES on
44
+ * the claim, rename failure, a fresh claim from a crashed taker) must not busy-spin, since it would
45
+ * block the event loop forever (the deadline is checked on EVERY iteration too). */
46
+ const MAX_IMMEDIATE_RETRIES = 3;
47
+ const OWNER_FILE = 'owner';
48
+ const TOMBSTONE_MARK = '.stale-';
49
+ const CLAIM_FILE = '.takeover';
50
+ /** Test seams for simulating contender interleavings inside a takeover. Never set in production. */
51
+ export const lockHooks = {};
52
+ /** Synchronous sleep without spinning the CPU (Node allows Atomics.wait on the main thread).
53
+ * Only ever called with short slices (RETRY_SLEEP_MS / rename backoff). */
54
+ function sleepSync(ms) {
55
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
56
+ }
57
+ /** The `pid:token` string of the lock's current owner, or null when absent/unreadable. */
58
+ function currentOwner(lockPath) {
59
+ try {
60
+ return readFileSync(join(lockPath, OWNER_FILE), 'utf8');
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ function readFileOrNull(p) {
67
+ try {
68
+ return readFileSync(p, 'utf8');
69
+ }
70
+ catch {
71
+ return null;
72
+ }
73
+ }
74
+ /** Remove our takeover claim from `dir` (only if it is still ours). */
75
+ function dropClaim(dir, claimToken) {
76
+ const claim = join(dir, CLAIM_FILE);
77
+ if (readFileOrNull(claim) === claimToken)
78
+ rmSync(claim, { force: true });
79
+ }
80
+ /** A claim left by a taker that crashed mid-takeover would block every future takeover of that
81
+ * lock: expire it once older than the stale threshold (moved aside atomically, then removed). */
82
+ function expireStaleClaim(lockPath, staleMs) {
83
+ const claim = join(lockPath, CLAIM_FILE);
84
+ try {
85
+ if (Date.now() - statSync(claim).mtimeMs <= staleMs)
86
+ return;
87
+ const lockStat = statSync(lockPath);
88
+ const dead = `${claim}.dead-${randomUUID()}`;
89
+ renameSync(claim, dead);
90
+ rmSync(dead, { force: true });
91
+ // Removing the claim bumped the lock dir's mtime; keep it looking as stale as it is.
92
+ utimesSync(lockPath, lockStat.atime, lockStat.mtime);
93
+ }
94
+ catch {
95
+ /* gone or raced another expirer */
96
+ }
97
+ }
98
+ /** Take over a lock judged stale (claim > verify > move; see the header). Returns true when the
99
+ * stale lock was removed (the caller should retry mkdir), false when the takeover failed and the
100
+ * caller must go back to waiting: the lock was already gone, another taker holds the claim, a
101
+ * racing waiter replaced it with a fresh lock (left untouched), or the moved lock turned out not
102
+ * to be the verified one (restored, or kept as a tombstone if the path was re-created meanwhile).
103
+ * Exported for tests. */
104
+ export function takeOverStaleLock(lockPath, observed, staleMs = STALE_LOCK_MS) {
105
+ const claimToken = `${process.pid}:${randomUUID()}`;
106
+ // Identify the instance BEFORE claiming (writing the claim bumps the directory's mtime).
107
+ let before;
108
+ try {
109
+ const st = statSync(lockPath);
110
+ if (currentOwner(lockPath) !== observed.owner || Date.now() - st.mtimeMs <= staleMs)
111
+ return false; // replaced/refreshed
112
+ before = { ino: st.ino, dev: st.dev };
113
+ }
114
+ catch {
115
+ return false; // already gone
116
+ }
117
+ try {
118
+ writeFileSync(join(lockPath, CLAIM_FILE), claimToken, { flag: 'wx' });
119
+ }
120
+ catch (e) {
121
+ if (e.code === 'EEXIST')
122
+ expireStaleClaim(lockPath, staleMs);
123
+ return false; // lock gone (ENOENT) or another taker is mid-takeover
124
+ }
125
+ let isSame = false;
126
+ try {
127
+ const st = statSync(lockPath);
128
+ isSame = st.ino === before.ino && st.dev === before.dev && currentOwner(lockPath) === observed.owner;
129
+ }
130
+ catch {
131
+ isSame = false;
132
+ }
133
+ if (!isSame) {
134
+ // We claimed a FRESH lock (a racing waiter won the takeover and re-acquired after our
135
+ // observation). It never moved: just withdraw the claim.
136
+ dropClaim(lockPath, claimToken);
137
+ return false;
138
+ }
139
+ lockHooks.beforeTakeoverMove?.();
140
+ const tomb = `${lockPath}${TOMBSTONE_MARK}${process.pid}-${randomUUID()}`;
141
+ try {
142
+ renameSync(lockPath, tomb); // atomic
143
+ }
144
+ catch {
145
+ return false; // released meanwhile
146
+ }
147
+ if (readFileOrNull(join(tomb, CLAIM_FILE)) !== claimToken) {
148
+ // The path was replaced between verify and move: we moved someone else's (possibly live) lock.
149
+ lockHooks.beforeTakeoverRestore?.();
150
+ try {
151
+ renameSync(tomb, lockPath); // put it back untouched
152
+ }
153
+ catch {
154
+ // Another contender already re-created the path. Do NOT delete the moved lock (it may belong
155
+ // to a live holder) and do NOT proceed as owner: the takeover failed. The tombstone is swept
156
+ // once stale; its holder is warned at release.
157
+ log('error', 'file lock takeover moved a replaced lock and could not restore it; left as tombstone, not acquiring', {
158
+ lockPath,
159
+ tomb,
160
+ });
161
+ }
162
+ return false;
163
+ }
164
+ rmSync(tomb, { recursive: true, force: true });
165
+ return true;
166
+ }
167
+ /** Remove tombstones left by a taker that crashed between rename and rm. Best-effort. */
168
+ export function sweepLockTombstones(lockPath, staleMs = STALE_LOCK_MS) {
169
+ let removed = 0;
170
+ try {
171
+ const dir = dirname(lockPath);
172
+ const prefix = `${basename(lockPath)}${TOMBSTONE_MARK}`;
173
+ for (const name of readdirSync(dir)) {
174
+ if (!name.startsWith(prefix))
175
+ continue;
176
+ const p = join(dir, name);
177
+ try {
178
+ if (Date.now() - statSync(p).mtimeMs > staleMs) {
179
+ rmSync(p, { recursive: true, force: true });
180
+ removed++;
181
+ }
182
+ }
183
+ catch {
184
+ /* raced another sweeper */
185
+ }
186
+ }
187
+ }
188
+ catch {
189
+ /* parent missing/unreadable, nothing to sweep */
190
+ }
191
+ return removed;
192
+ }
193
+ /** One acquisition attempt: mkdir, else stale-check/takeover. Never sleeps. */
194
+ function tryAcquire(lockPath, token, staleMs) {
195
+ try {
196
+ mkdirSync(lockPath); // atomic: throws EEXIST if another process holds the lock
197
+ }
198
+ catch (e) {
199
+ if (e.code !== 'EEXIST')
200
+ throw e;
201
+ let observed;
202
+ try {
203
+ observed = { owner: currentOwner(lockPath), mtimeMs: statSync(lockPath).mtimeMs };
204
+ }
205
+ catch {
206
+ return 'retry'; // lock released between attempts, retry immediately
207
+ }
208
+ if (Date.now() - observed.mtimeMs > staleMs) {
209
+ // stale: the holder crashed or stalled; take over atomically, then retry mkdir
210
+ takeOverStaleLock(lockPath, observed, staleMs);
211
+ return 'retry';
212
+ }
213
+ return 'busy';
214
+ }
215
+ // We created the dir. Record ownership EXCLUSIVELY ('wx'): if an owner file already exists the
216
+ // directory is not really ours (a takeover restore swapped a live lock into this path).
217
+ try {
218
+ writeFileSync(join(lockPath, OWNER_FILE), token, { flag: 'wx' });
219
+ }
220
+ catch (e) {
221
+ if (e.code === 'EEXIST')
222
+ return 'busy';
223
+ rmSync(lockPath, { recursive: true, force: true });
224
+ throw e;
225
+ }
226
+ // Re-check ownership after acquiring: the lock we hold must carry OUR token.
227
+ if (currentOwner(lockPath) !== token)
228
+ return 'busy';
229
+ sweepLockTombstones(lockPath, staleMs);
230
+ return 'acquired';
231
+ }
232
+ function release(lockPath, token) {
233
+ // Verify-then-release: only remove the lock while the owner file still holds OUR token. If fn()
234
+ // stalled past the stale threshold another process legitimately took the lock over, and deleting it
235
+ // here would let a THIRD process acquire while the new owner still runs.
236
+ if (currentOwner(lockPath) === token) {
237
+ try {
238
+ rmSync(lockPath, { recursive: true, force: true });
239
+ }
240
+ catch {
241
+ /* already removed (stale takeover raced our release) */
242
+ }
243
+ }
244
+ else {
245
+ log('warn', 'file lock was taken over while held: this holder stalled past the stale threshold (or was displaced by a takeover race) and its work may have raced the new holder', { lockPath });
246
+ removeOwnTombstones(lockPath, token);
247
+ }
248
+ }
249
+ /** A displaced holder's lock may survive as a tombstone (see takeOverStaleLock): remove the ones
250
+ * carrying OUR token. They are ours, so this can never touch another holder's lock. */
251
+ function removeOwnTombstones(lockPath, token) {
252
+ try {
253
+ const dir = dirname(lockPath);
254
+ const prefix = `${basename(lockPath)}${TOMBSTONE_MARK}`;
255
+ for (const name of readdirSync(dir)) {
256
+ if (!name.startsWith(prefix))
257
+ continue;
258
+ const p = join(dir, name);
259
+ if (currentOwner(p) === token)
260
+ rmSync(p, { recursive: true, force: true });
261
+ }
262
+ }
263
+ catch {
264
+ /* best-effort */
265
+ }
266
+ }
267
+ function newToken() {
268
+ // Ownership token: verify identity before acting (the same spirit as processRegistry's
269
+ // serverStillAlive pid+command check).
270
+ return `${process.pid}:${randomUUID()}`;
271
+ }
272
+ function timeoutError(lockPath) {
273
+ log('error', 'file lock wait timed out, refusing unlocked registry mutation', { lockPath });
274
+ return new Error(`Timed out waiting for file lock ${lockPath}`);
275
+ }
276
+ /** Run a SHORT synchronous `fn` while holding the advisory lock at `lockPath` (a directory that
277
+ * must not pre-exist). Retries for up to maxWaitMs (blocking in 25 ms slices), taking over locks
278
+ * older than staleMs. fn cannot be heartbeated, so keep it well under staleMs. */
279
+ export function withFileLock(lockPath, fn, opts = {}) {
280
+ const staleMs = opts.staleMs ?? STALE_LOCK_MS;
281
+ const deadline = Date.now() + (opts.maxWaitMs ?? MAX_WAIT_MS);
282
+ const token = newToken();
283
+ let immediate = 0;
284
+ for (;;) {
285
+ const r = tryAcquire(lockPath, token, staleMs);
286
+ if (r === 'acquired')
287
+ break;
288
+ if (Date.now() > deadline)
289
+ throw timeoutError(lockPath);
290
+ if (r === 'retry' && immediate++ < MAX_IMMEDIATE_RETRIES)
291
+ continue;
292
+ immediate = 0;
293
+ sleepSync(RETRY_SLEEP_MS);
294
+ }
295
+ try {
296
+ return fn();
297
+ }
298
+ finally {
299
+ release(lockPath, token);
300
+ }
301
+ }
302
+ /** Async variant: waits yield to the event loop, and a heartbeat refreshes the lock's mtime every
303
+ * staleMs/3 while `fn` runs so a long (async) critical section is never judged stale. */
304
+ export async function withFileLockAsync(lockPath, fn, opts = {}) {
305
+ const staleMs = opts.staleMs ?? STALE_LOCK_MS;
306
+ const deadline = Date.now() + (opts.maxWaitMs ?? MAX_WAIT_MS);
307
+ const token = newToken();
308
+ let immediate = 0;
309
+ for (;;) {
310
+ const r = tryAcquire(lockPath, token, staleMs);
311
+ if (r === 'acquired')
312
+ break;
313
+ if (Date.now() > deadline)
314
+ throw timeoutError(lockPath);
315
+ if (r === 'retry' && immediate++ < MAX_IMMEDIATE_RETRIES)
316
+ continue;
317
+ immediate = 0;
318
+ await new Promise((res) => setTimeout(res, RETRY_SLEEP_MS));
319
+ }
320
+ const heartbeat = setInterval(() => {
321
+ // Only refresh a lock that is still ours. Never keep a thief's lock alive on its behalf.
322
+ if (currentOwner(lockPath) !== token)
323
+ return;
324
+ try {
325
+ const now = new Date();
326
+ utimesSync(lockPath, now, now);
327
+ }
328
+ catch {
329
+ /* lock vanished; release will log */
330
+ }
331
+ }, Math.max(10, Math.floor(staleMs / 3)));
332
+ heartbeat.unref?.();
333
+ try {
334
+ return await fn();
335
+ }
336
+ finally {
337
+ clearInterval(heartbeat);
338
+ release(lockPath, token);
339
+ }
340
+ }
341
+ const RENAME_RETRY_CODES = new Set(['EPERM', 'EBUSY', 'EACCES']);
342
+ /** renameSync that tolerates transient Windows sharing violations (antivirus/indexer briefly
343
+ * holding the target): retries EPERM/EBUSY/EACCES with short backoff (≤ ~310 ms total). On
344
+ * POSIX those errors are permanent, so it throws immediately. */
345
+ export function renameWithRetry(from, to, opts = {}) {
346
+ const rename = opts.renameFn ?? renameSync;
347
+ const isWindows = opts.isWindows ?? process.platform === 'win32';
348
+ const delays = opts.delaysMs ?? [10, 20, 40, 80, 160];
349
+ for (let attempt = 0;; attempt++) {
350
+ try {
351
+ rename(from, to);
352
+ return;
353
+ }
354
+ catch (e) {
355
+ const code = e.code ?? '';
356
+ if (!isWindows || !RENAME_RETRY_CODES.has(code) || attempt >= delays.length)
357
+ throw e;
358
+ sleepSync(delays[attempt]);
359
+ }
360
+ }
361
+ }
362
+ /** Atomic file write: unique tmp sibling + rename (with Windows retry). Removes the tmp on failure. */
363
+ export function writeFileAtomicSync(path, data) {
364
+ const tmp = `${path}.${process.pid}.${randomUUID().slice(0, 8)}.tmp`;
365
+ writeFileSync(tmp, data);
366
+ try {
367
+ renameWithRetry(tmp, path);
368
+ }
369
+ catch (e) {
370
+ rmSync(tmp, { force: true });
371
+ throw e;
372
+ }
373
+ }
374
+ /** Delete `<baseName>.*.tmp` siblings older than maxAgeMs (residue of a writer that crashed
375
+ * between write and rename). Young tmp files may belong to a live writer and are kept. */
376
+ export function cleanupOrphanTmpFiles(dir, baseName, maxAgeMs = 10 * 60_000) {
377
+ let removed = 0;
378
+ try {
379
+ for (const name of readdirSync(dir)) {
380
+ if (!name.startsWith(`${baseName}.`) || !name.endsWith('.tmp'))
381
+ continue;
382
+ const p = join(dir, name);
383
+ try {
384
+ if (Date.now() - statSync(p).mtimeMs > maxAgeMs) {
385
+ rmSync(p, { force: true });
386
+ removed++;
387
+ }
388
+ }
389
+ catch {
390
+ /* raced another cleaner */
391
+ }
392
+ }
393
+ }
394
+ catch {
395
+ /* dir missing, nothing to clean */
396
+ }
397
+ return removed;
398
+ }
399
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/lib/lockfile.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- // NeedsInput protocol (roadmap §3.2) — a single, consistent shape for the missing-input
1
+ // NeedsInput protocol: a single, consistent shape for the missing-input
2
2
  // blockers a QA run hits, so an agent forwards ONE concise question to the user instead of
3
3
  // improvising. It is NOT an error: the run is paused, recoverable, and resumable. The payload
4
4
  // rides on a normal (ok:true) tool result with `needsInput:true`, and is also embeddable in a
@@ -10,14 +10,14 @@
10
10
  // Developer 1 contract (Milestone B): EVERY NeedsInput response carries one concise question,
11
11
  // typed fields (with secret flags), safe fallback options, the EXACT resume call, what Swipium
12
12
  // already tried (`attempted`), and what happens if the user declines (`ifDeclined`). Agents ask
13
- // one question — never a bundle of guesses — and resume deterministically.
13
+ // one question (never a bundle of guesses) and resume deterministically.
14
14
  import { currentResponseMode } from './result.js';
15
15
  /** Default resume: hand the answer to qa_continue_from_blocker, which routes by kind. */
16
16
  function resumeVia(kind) {
17
17
  return { tool: 'qa_continue_from_blocker', args: { kind } };
18
18
  }
19
19
  /**
20
- * The standardized QA questions (roadmap §3.2). Builders, not constants, so callers can splice
20
+ * The standardized QA questions. Builders, not constants, so callers can splice
21
21
  * in context (which app, which screen) while keeping the field/fallback/resume contract stable.
22
22
  * `attempted` is left empty here and filled by qaNeedsInput from the live session.
23
23
  */
@@ -26,8 +26,7 @@ export const NeedsInput = {
26
26
  return {
27
27
  needsInput: true,
28
28
  kind: 'credentials',
29
- question: (context ? `${context} ` : '') +
30
- 'This app appears to require login. Provide test credentials, or ask Swipium to stay pre-login.',
29
+ question: (context ? `${context} ` : '') + 'This app appears to require login. Provide test credentials, or ask Swipium to stay pre-login.',
31
30
  fields: [
32
31
  { name: 'email', secret: false, description: 'Test account email/username' },
33
32
  { name: 'password', secret: true, description: 'Test account password' },
@@ -81,7 +80,11 @@ export const NeedsInput = {
81
80
  kind: 'destructive_exploration_approval',
82
81
  question: `${what} Exploring it may trigger destructive actions (delete/reset/purchase). Approve, or keep exploration read-only?`,
83
82
  fields: [{ name: 'approveDestructive', secret: false, description: 'true to allow potentially destructive exploration' }],
84
- fallbackOptions: ['keep exploration non-destructive (skip risky controls)', 'approve destructive exploration', 'run destructive steps last'],
83
+ fallbackOptions: [
84
+ 'keep exploration non-destructive (skip risky controls)',
85
+ 'approve destructive exploration',
86
+ 'run destructive steps last',
87
+ ],
85
88
  resume: resumeVia('destructive_exploration_approval'),
86
89
  attempted: [],
87
90
  ifDeclined: 'Swipium explores non-destructively and skips controls flagged as risky.',
@@ -1 +1 @@
1
- {"version":3,"file":"needsInput.js","sourceRoot":"","sources":["../../src/lib/needsInput.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"needsInput.js","sourceRoot":"","sources":["../../src/lib/needsInput.ts"],"names":[],"mappings":"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"}
package/dist/lib/png.js CHANGED
@@ -1,7 +1,7 @@
1
- // Minimal zero-dependency PNG decode (PHASE3-PLAN §8). Device screenshots come from
1
+ // Minimal zero-dependency PNG decode. Device screenshots come from
2
2
  // `screencap -p` as non-interlaced 8-bit truecolor(+alpha) PNGs, so we support exactly that
3
3
  // (color types 2 and 6, bit depth 8, interlace 0) and error clearly on anything else. Uses
4
- // Node's built-in zlib — no image library, no third-party code.
4
+ // Node's built-in zlib. No image library, no third-party code.
5
5
  import { inflateSync } from 'node:zlib';
6
6
  /** Read width/height from the IHDR without decoding pixels (for the coordinate-space audit). */
7
7
  export function pngSize(buf) {
@@ -83,7 +83,8 @@ export function decodePng(buf) {
83
83
  case 4:
84
84
  val = cur + paeth(a, b, c);
85
85
  break;
86
- default: throw new Error(`bad PNG filter ${filter} at row ${y}`);
86
+ default:
87
+ throw new Error(`bad PNG filter ${filter} at row ${y}`);
87
88
  }
88
89
  out[o + x] = val & 0xff;
89
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"png.js","sourceRoot":"","sources":["../../src/lib/png.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"png.js","sourceRoot":"","sources":["../../src/lib/png.ts"],"names":[],"mappings":"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"}