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,4 +1,4 @@
1
- // Build-from-source planner (roadmap §4.5) — propose the EXACT commands that turn a source
1
+ // Build-from-source planner: propose the EXACT commands that turn a source
2
2
  // project into an installable artifact, per framework + platform, with prerequisites
3
3
  // (dependency install, Expo prebuild, CocoaPods) and the artifact globs the build will produce.
4
4
  //
@@ -47,14 +47,14 @@ function xcodebuildStep(root, variant) {
47
47
  const { workspace, project, scheme, dir } = iosWorkspace(root);
48
48
  const notes = [];
49
49
  if (!scheme)
50
- return { step: null, notes: ['Could not find an .xcworkspace/.xcodeproj — pass the scheme/workspace explicitly.'] };
50
+ return { step: null, notes: ['Could not find an .xcworkspace/.xcodeproj. Pass the scheme/workspace explicitly.'] };
51
51
  const config = variant === 'release' ? 'Release' : 'Debug';
52
52
  const argv = ['xcodebuild', '-scheme', scheme, '-sdk', 'iphonesimulator', '-configuration', config, '-derivedDataPath', 'build', 'build'];
53
53
  if (workspace)
54
54
  argv.splice(1, 0, '-workspace', basename(workspace));
55
55
  else if (project)
56
56
  argv.splice(1, 0, '-project', basename(project));
57
- notes.push(`Using scheme "${scheme}" (best-effort) — override if your scheme differs.`);
57
+ notes.push(`Using scheme "${scheme}" (best-effort). Override if your scheme differs.`);
58
58
  return { step: { label: 'build iOS simulator app', command: argv.join(' '), argv, cwd: dir }, notes };
59
59
  }
60
60
  /**
@@ -92,9 +92,9 @@ export async function buildPlan(opts) {
92
92
  const gradleArg = variant === 'release' ? 'assembleRelease' : 'assembleDebug';
93
93
  switch (framework) {
94
94
  case 'expo': {
95
- // No native android dir → expo run:android prebuilds; otherwise it reuses it.
95
+ // No native android dir: expo run:android prebuilds; otherwise it reuses it.
96
96
  if (!hasFile(root, 'android'))
97
- notes.push('No android/ directory — expo run:android will prebuild it (EXPO_PREBUILD).');
97
+ notes.push('No android/ directory, so expo run:android will prebuild it (EXPO_PREBUILD).');
98
98
  notes.push('Expo Android local run compiles native code, installs the app, and starts Metro. First run can take several minutes; later JS/TS-only work should usually reuse the installed development build with Metro.');
99
99
  const argv = ['npx', 'expo', 'run:android', '--variant', variant];
100
100
  return base({
@@ -107,7 +107,7 @@ export async function buildPlan(opts) {
107
107
  if (!hasFile(root, 'android/gradlew', 'gradlew')) {
108
108
  return base({
109
109
  failureCode: 'BUILD_COMMAND_UNAVAILABLE',
110
- notes: ['No gradlew found — run from the Android project or add the Gradle wrapper.'],
110
+ notes: ['No gradlew found. Run from the Android project or add the Gradle wrapper.'],
111
111
  });
112
112
  }
113
113
  const cwd = existsSync(join(root, 'android')) ? join(root, 'android') : root;
@@ -136,7 +136,7 @@ export async function buildPlan(opts) {
136
136
  switch (framework) {
137
137
  case 'expo': {
138
138
  if (!hasFile(root, 'ios'))
139
- notes.push('No ios/ directory — expo run:ios will prebuild it (EXPO_PREBUILD).');
139
+ notes.push('No ios/ directory, so expo run:ios will prebuild it (EXPO_PREBUILD).');
140
140
  const argv = ['npx', 'expo', 'run:ios', '--no-bundler'];
141
141
  return base({
142
142
  build: { label: 'build + run iOS simulator (Expo)', command: argv.join(' '), argv, cwd: root },
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/build/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/build/plan.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { ciMutationAllowed } from '../report/policy.js';
2
- const MUTATING_CI_STEPS = new Set(['networkOffline', 'networkOnline', 'seed', 'restartApp']);
2
+ import { flowEnvAllowed, isMutatingFlowStep } from '../flows/schema.js';
3
3
  const VAR_REF = /\$\{([^}]+)\}/g;
4
4
  function variableBearingValues(step) {
5
5
  switch (step.kind) {
@@ -28,13 +28,16 @@ export function ciMutatingSteps(flow) {
28
28
  const all = [...flow.setup, ...flow.steps, ...flow.teardown];
29
29
  const out = [];
30
30
  all.forEach((step, i) => {
31
- if (!MUTATING_CI_STEPS.has(step.kind))
31
+ // Same rule as qa_flow_run consent / qa_smoke: includes an openUrl that interpolates ${VAR}.
32
+ if (!isMutatingFlowStep(step))
32
33
  return;
33
34
  out.push({
34
35
  flow: flow.name,
35
36
  step: i + 1,
36
37
  kind: step.kind,
37
- reason: `${step.kind} changes device/app/test state and requires .swipium/policy.json ciAllowMutations`,
38
+ reason: step.kind === 'openUrl'
39
+ ? 'openUrl interpolates a ${VAR} into a URL that leaves the device and requires .swipium/policy.json ciAllowMutations ("openUrl")'
40
+ : `${step.kind} changes device/app/test state and requires .swipium/policy.json ciAllowMutations`,
38
41
  });
39
42
  });
40
43
  return out;
@@ -54,7 +57,9 @@ export function ciRequiredVariables(flow) {
54
57
  step: i + 1,
55
58
  kind: step.kind,
56
59
  variable: match[1],
57
- reason: `${step.kind} references \${${match[1]}}; set it in the CI environment before running Swipium.`,
60
+ reason: flowEnvAllowed(match[1])
61
+ ? `${step.kind} references \${${match[1]}}; set it in the CI environment before running Swipium.`
62
+ : `${step.kind} references \${${match[1]}}; flows read only SWIPIUM_* environment variables. Rename it (e.g. SWIPIUM_${match[1]}) or pass it as an explicit variable.`,
58
63
  });
59
64
  }
60
65
  }
@@ -68,6 +73,10 @@ export function validateCiVariables(flows, env = process.env, variables = {}) {
68
73
  const explicit = variables[v.variable];
69
74
  if (explicit != null && explicit !== '')
70
75
  return false;
76
+ // The flow runner reads the environment only for SWIPIUM_* names, so any other env var
77
+ // does not satisfy the requirement (it would still be missing at run time).
78
+ if (!flowEnvAllowed(v.variable))
79
+ return true;
71
80
  return env[v.variable] == null || env[v.variable] === '';
72
81
  });
73
82
  return { ok: missing.length === 0, missing };
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/ci/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/ci/preflight.ts"],"names":[],"mappings":"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"}
package/dist/cli/gc.js ADDED
@@ -0,0 +1,74 @@
1
+ // `swipium gc [--dry-run] [--days N] [--keep N]`: reclaim disk from old ~/.swipium/runs session dirs
2
+ // (same rule as the automatic startup prune in src/session/retention.ts) and compact
3
+ // ~/.swipium/projects.json (drop entries whose project root no longer exists, cap to 200).
4
+ //
5
+ // CLI path, not the MCP server, so writing to stdout is fine here.
6
+ import { pruneSessionRuns, retentionDaysFromEnv, retentionKeepFromEnv, DEFAULT_RETENTION_DAYS } from '../session/retention.js';
7
+ import { compactProjectRegistry } from '../appMap/projectRegistry.js';
8
+ export const GC_USAGE = `Usage: swipium gc [--dry-run] [--days N] [--keep N]
9
+ Delete ~/.swipium/runs session dirs older than N days (default: SWIPIUM_RETENTION_DAYS or 30) that
10
+ are not in ~/.swipium/registry.json, keeping the newest --keep (default: SWIPIUM_RETENTION_KEEP or 20)
11
+ per project regardless of age; prune ~/.swipium/projects.json entries whose root no longer exists.
12
+ --dry-run report what would be reclaimed, delete nothing
13
+ `;
14
+ export function parseGcArgs(argv, env = process.env) {
15
+ const out = { dryRun: false, days: retentionDaysFromEnv(env) ?? DEFAULT_RETENTION_DAYS, keep: retentionKeepFromEnv(env) };
16
+ for (let i = 0; i < argv.length; i++) {
17
+ const a = argv[i];
18
+ if (a === '--dry-run' || a === '-n')
19
+ out.dryRun = true;
20
+ else if (a === '--help' || a === '-h')
21
+ out.help = true;
22
+ else if (a === '--days' || a === '--keep' || a.startsWith('--days=') || a.startsWith('--keep=')) {
23
+ const [flag, inline] = a.split('=', 2);
24
+ const raw = inline ?? argv[++i];
25
+ const n = Number(raw);
26
+ if (raw == null || !Number.isInteger(n) || n < 0) {
27
+ out.error = `${flag} expects a non-negative integer (got ${raw ?? 'nothing'})`;
28
+ return out;
29
+ }
30
+ if (flag === '--days')
31
+ out.days = n;
32
+ else
33
+ out.keep = n;
34
+ }
35
+ else {
36
+ out.error = `unknown option ${a}`;
37
+ return out;
38
+ }
39
+ }
40
+ return out;
41
+ }
42
+ export function formatBytes(n) {
43
+ if (n < 1024)
44
+ return `${n} B`;
45
+ if (n < 1024 * 1024)
46
+ return `${(n / 1024).toFixed(1)} KB`;
47
+ if (n < 1024 * 1024 * 1024)
48
+ return `${(n / (1024 * 1024)).toFixed(1)} MB`;
49
+ return `${(n / (1024 * 1024 * 1024)).toFixed(2)} GB`;
50
+ }
51
+ /** Run gc; returns the process exit code. */
52
+ export async function runGc(argv, out = (s) => void process.stdout.write(s)) {
53
+ const args = parseGcArgs(argv);
54
+ if (args.help) {
55
+ out(GC_USAGE);
56
+ return 0;
57
+ }
58
+ if (args.error) {
59
+ process.stderr.write(`swipium gc: ${args.error}\n\n${GC_USAGE}`);
60
+ return 2;
61
+ }
62
+ const r = await pruneSessionRuns({ days: args.days, keepPerProject: args.keep, dryRun: args.dryRun });
63
+ const projects = compactProjectRegistry({ dryRun: args.dryRun });
64
+ const verb = args.dryRun ? 'would delete' : 'deleted';
65
+ out(`swipium gc${args.dryRun ? ' (dry run)' : ''}: scanned ${r.scanned} session dir(s) under ${r.runsDir}\n` +
66
+ ` ${verb} ${r.deleted.length} session dir(s) older than ${r.days} day(s) (not registered; newest ${r.keepPerProject} per project kept)\n` +
67
+ ` ${args.dryRun ? 'reclaimable' : 'reclaimed'}: ${formatBytes(r.bytesReclaimed)}\n` +
68
+ ` projects.json: ${projects.before} > ${projects.after} entr${projects.after === 1 ? 'y' : 'ies'}` +
69
+ `${projects.removed ? ` (${projects.removed} stale ${args.dryRun ? 'would be ' : ''}removed)` : ''}\n` +
70
+ (r.skipped ? ` prune skipped: ${r.skipped}\n` : '') +
71
+ (r.errors ? ` ${r.errors} entr${r.errors === 1 ? 'y' : 'ies'} could not be processed (see logs)\n` : ''));
72
+ return 0;
73
+ }
74
+ //# sourceMappingURL=gc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gc.js","sourceRoot":"","sources":["../../src/cli/gc.ts"],"names":[],"mappings":"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"}
package/dist/cli/init.js CHANGED
@@ -1,34 +1,171 @@
1
- // `swipium init <client> [--apply] [--scope project|user|local]`
1
+ // `swipium init <client> [--apply] [--scope project|user|local] [--cwd <dir>]`
2
2
  //
3
3
  // Default = PREVIEW the exact registration (safe, no mutation). `--apply` executes it by
4
- // DELEGATING to the client's own CLI where one exists (claude/gemini `mcp add`), or writing
5
- // Codex's config.toml (it has no `mcp add` + a history of silent config-load bugs). After a
6
- // successful apply it runs `verify` (the server starts + tools inject).
4
+ // DELEGATING to the client's own CLI where that is the documented path (claude/gemini
5
+ // `mcp add`), writing Codex's ~/.codex/config.toml (so the block carries cwd + timeouts, which
6
+ // `codex mcp add` cannot set), or merging a project file for Cursor (.cursor/mcp.json) and
7
+ // VS Code (.vscode/mcp.json). After a successful apply it runs `verify` (the server starts +
8
+ // tools inject).
7
9
  //
8
- // NOTE: this is the CLI path, not the MCP server — writing to stdout is fine here.
10
+ // Portability: anything that lands in a TEAM-SHARED project file (`claude --scope project`,
11
+ // gemini project scope, .cursor/.vscode) uses `npx -y swipium`, never this machine's absolute
12
+ // node/script paths. Absolute paths are used only for machine-local registrations
13
+ // (claude local/user, gemini user, codex), and even then not when this process runs from the
14
+ // npx cache (that path is ephemeral).
15
+ //
16
+ // NOTE: this is the CLI path, not the MCP server, so writing to stdout is fine here.
9
17
  import { spawnSync } from 'node:child_process';
10
- import { existsSync, readFileSync, appendFileSync, mkdirSync } from 'node:fs';
18
+ import { existsSync, readFileSync, appendFileSync, mkdirSync, writeFileSync, statSync } from 'node:fs';
11
19
  import { homedir } from 'node:os';
12
20
  import { fileURLToPath } from 'node:url';
13
21
  import { dirname, resolve, join } from 'node:path';
14
22
  import { runVerify } from './verify.js';
15
23
  import { initFlowTemplates } from '../flows/templates.js';
16
24
  const SELF = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'index.js'); // dist/index.js
25
+ export const PORTABLE_COMMAND = { command: 'npx', args: ['-y', 'swipium'] };
26
+ /** True when `self` lives in npm's npx cache (…/_npx/…). An absolute path to it would rot. */
27
+ export function isEphemeralInstall(self = SELF) {
28
+ return self.split(/[\\/]/).includes('_npx');
29
+ }
30
+ /** The command a client should run: portable `npx -y swipium`, or this machine's node + script. */
31
+ export function serverCommand(portable, node = process.execPath, self = SELF) {
32
+ if (portable || isEphemeralInstall(self))
33
+ return { command: PORTABLE_COMMAND.command, args: [...PORTABLE_COMMAND.args] };
34
+ return { command: node, args: [self] };
35
+ }
17
36
  /** A delegated CLI registration succeeded only if it both ran and exited 0. */
18
37
  export function applyOk(r) {
19
38
  return !r.error && r.status === 0;
20
39
  }
21
- function geminiBlock(node) {
22
- return ` "swipium": { "command": ${JSON.stringify(node)}, "args": [${JSON.stringify(SELF)}], "cwd": "<your repo>", "timeout": 600000 }`;
40
+ /** Gemini settings.json entry (user scope: machine-local command + the app repo as cwd). */
41
+ export function geminiBlock(node, cwd, self = SELF) {
42
+ const c = serverCommand(false, node, self);
43
+ return ` "swipium": { "command": ${JSON.stringify(c.command)}, "args": ${JSON.stringify(c.args)}, "cwd": ${JSON.stringify(cwd)}, "timeout": 600000 }`;
44
+ }
45
+ /** Codex keeps servers in ~/.codex/config.toml; its defaults (10 s startup, 60 s per tool) are too
46
+ * short for `npx` first runs and for device work (builds, boots, flows). */
47
+ export function codexBlock(node, cwd, self = SELF) {
48
+ const c = serverCommand(false, node, self);
49
+ return [
50
+ '[mcp_servers.swipium]',
51
+ `command = ${JSON.stringify(c.command)}`,
52
+ `args = [${c.args.map((a) => JSON.stringify(a)).join(', ')}]`,
53
+ `cwd = ${JSON.stringify(cwd)}`,
54
+ 'startup_timeout_sec = 30',
55
+ 'tool_timeout_sec = 600',
56
+ ].join('\n');
57
+ }
58
+ /** `claude mcp add` argv. Project scope writes the team-shared .mcp.json, so the command is portable. */
59
+ export function claudeAddArgs(scope, node = process.execPath, self = SELF) {
60
+ const c = serverCommand(scope === 'project', node, self);
61
+ return ['mcp', 'add', 'swipium', ...(scope !== 'local' ? ['--scope', scope] : []), '--', c.command, ...c.args];
62
+ }
63
+ /** `gemini mcp add` argv. Gemini's default scope is project (.gemini/settings.json), so it's portable. */
64
+ export function geminiAddArgs(scope, node = process.execPath, self = SELF) {
65
+ const user = scope === 'user';
66
+ const c = serverCommand(!user, node, self);
67
+ // Gemini's parser would read `-y` as its own flag: server args that start with "-" go after `--`
68
+ // (documented form: `gemini mcp add python-server python server.py -- --server-arg v`).
69
+ const rest = c.args.some((x) => x.startsWith('-')) ? ['--', ...c.args] : c.args;
70
+ return ['mcp', 'add', '--scope', user ? 'user' : 'project', 'swipium', c.command, ...rest];
71
+ }
72
+ /** Cursor: .cursor/mcp.json (`mcpServers`). ${workspaceFolder} is interpolated by Cursor. */
73
+ export function cursorEntry() {
74
+ return {
75
+ type: 'stdio',
76
+ command: PORTABLE_COMMAND.command,
77
+ args: [...PORTABLE_COMMAND.args],
78
+ env: { SWIPIUM_PROJECT_ROOT: '${workspaceFolder}' },
79
+ };
80
+ }
81
+ /** VS Code: .vscode/mcp.json uses a top-level `servers` object (not `mcpServers`). */
82
+ export function vscodeEntry() {
83
+ return {
84
+ type: 'stdio',
85
+ command: PORTABLE_COMMAND.command,
86
+ args: [...PORTABLE_COMMAND.args],
87
+ env: { SWIPIUM_PROJECT_ROOT: '${workspaceFolder}' },
88
+ };
89
+ }
90
+ /**
91
+ * Merge `swipium` into an existing JSON config under `topKey` WITHOUT touching anything else.
92
+ * Refuses (never overwrites) when the file isn't plain JSON (e.g. JSONC comments) or `topKey`
93
+ * isn't an object; leaves an existing `swipium` entry as-is.
94
+ */
95
+ export function mergeServerJson(existing, topKey, entry) {
96
+ let doc = {};
97
+ if (existing !== null && existing.trim()) {
98
+ try {
99
+ const parsed = JSON.parse(existing);
100
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
101
+ return { status: 'invalid', reason: 'top level is not a JSON object' };
102
+ doc = parsed;
103
+ }
104
+ catch (e) {
105
+ return {
106
+ status: 'invalid',
107
+ reason: `not valid JSON (${e.message}); comments/trailing commas are not merged automatically`,
108
+ };
109
+ }
110
+ }
111
+ const cur = doc[topKey];
112
+ if (cur !== undefined && (typeof cur !== 'object' || cur === null || Array.isArray(cur))) {
113
+ return { status: 'invalid', reason: `"${topKey}" is not an object` };
114
+ }
115
+ const servers = { ...(cur ?? {}) };
116
+ if (Object.prototype.hasOwnProperty.call(servers, 'swipium'))
117
+ return { status: 'present' };
118
+ servers.swipium = entry;
119
+ return { status: 'added', json: `${JSON.stringify({ ...doc, [topKey]: servers }, null, 2)}\n` };
120
+ }
121
+ /** The app repo the server should run in: `--cwd <dir>` if given, else where init was invoked. */
122
+ export function resolveTargetCwd(args) {
123
+ const cwdIdx = args.indexOf('--cwd');
124
+ return resolve(cwdIdx >= 0 ? (args[cwdIdx + 1] ?? '') : process.cwd());
125
+ }
126
+ function isDir(p) {
127
+ try {
128
+ return statSync(p).isDirectory();
129
+ }
130
+ catch {
131
+ return false;
132
+ }
23
133
  }
24
- function codexBlock(node) {
25
- return `[mcp_servers.swipium]\ncommand = ${JSON.stringify(node)}\nargs = [${JSON.stringify(SELF)}]\ncwd = "<your repo>"`;
134
+ const CWD_NOTE = '(cwd should be your mobile app repo: run init from it, or pass --cwd <dir>)';
135
+ export const INIT_USAGE = 'Usage: swipium init <claude|codex|gemini|cursor|vscode> [--apply] [--scope local|user|project] [--cwd <dir>]\n' +
136
+ ' swipium init flows [--root <dir>] [--force]\n' +
137
+ 'Without --apply, prints the exact registration and changes nothing.\n';
138
+ /** Preview/apply a project-file registration (Cursor/VS Code). Returns false when refused. */
139
+ function projectFileInit(opts) {
140
+ const { label, file, topKey, entry, apply } = opts;
141
+ const snippet = JSON.stringify({ [topKey]: { swipium: entry } }, null, 2);
142
+ if (!apply) {
143
+ process.stdout.write(`Preview (run with --apply to merge into ${file}):\n${snippet}\n` +
144
+ `SWIPIUM_PROJECT_ROOT uses \${workspaceFolder}, which ${label} expands to the open folder.\n` +
145
+ (opts.extraPreview ?? ''));
146
+ return true;
147
+ }
148
+ const existing = existsSync(file) ? readFileSync(file, 'utf8') : null;
149
+ const merged = mergeServerJson(existing, topKey, entry);
150
+ if (merged.status === 'invalid') {
151
+ process.stdout.write(`Refusing to modify ${file}: ${merged.reason}.\nAdd this under "${topKey}" by hand:\n${snippet}\n`);
152
+ process.exitCode = 2;
153
+ return false;
154
+ }
155
+ if (merged.status === 'present') {
156
+ process.stdout.write(`Already present in ${file} (left unchanged).\n`);
157
+ return true;
158
+ }
159
+ mkdirSync(dirname(file), { recursive: true });
160
+ writeFileSync(file, merged.json);
161
+ process.stdout.write(`${existing === null ? 'Created' : 'Merged into'} ${file}\n`);
162
+ return true;
26
163
  }
27
164
  export async function runInit(args) {
28
165
  const client = (args[0] ?? '').toLowerCase();
29
166
  const apply = args.includes('--apply');
30
167
  const scopeIdx = args.indexOf('--scope');
31
- const scope = scopeIdx >= 0 ? args[scopeIdx + 1] : 'local';
168
+ const scope = scopeIdx >= 0 ? (args[scopeIdx + 1] ?? 'local') : 'local';
32
169
  const node = process.execPath;
33
170
  if (client === 'flows') {
34
171
  const rootIdx = args.indexOf('--root');
@@ -42,15 +179,33 @@ export async function runInit(args) {
42
179
  process.stdout.write('\nNext: edit selectors/variables, then validate with qa_flow_check and run with qa_flow_run from an MCP session.\n');
43
180
  return;
44
181
  }
45
- if (!['claude', 'gemini', 'codex'].includes(client)) {
46
- process.stdout.write('Usage: swipium init <claude|gemini|codex> [--apply] [--scope project|user|local]\n swipium init flows [--root <dir>] [--force]\n');
182
+ if (args.includes('--help') || args.includes('-h')) {
183
+ process.stdout.write(INIT_USAGE);
184
+ return;
185
+ }
186
+ if (!['claude', 'gemini', 'codex', 'cursor', 'vscode'].includes(client)) {
187
+ process.stdout.write(INIT_USAGE);
188
+ process.exitCode = 2;
189
+ return;
190
+ }
191
+ if (!['local', 'user', 'project'].includes(scope)) {
192
+ process.stdout.write(`Unknown --scope "${scope}" (expected local, user, or project).\n${INIT_USAGE}`);
47
193
  process.exitCode = 2;
48
194
  return;
49
195
  }
196
+ const cwd = resolveTargetCwd(args);
197
+ const refuseMissingCwd = () => {
198
+ if (isDir(cwd))
199
+ return false;
200
+ process.stdout.write(`Refusing to apply: cwd ${cwd} does not exist. Run init from your mobile app repo or pass --cwd <dir>.\n`);
201
+ process.exitCode = 2;
202
+ return true;
203
+ };
50
204
  if (client === 'claude') {
51
- const cmd = ['mcp', 'add', 'swipium', ...(scope !== 'local' ? ['--scope', scope] : []), '--', node, SELF];
205
+ const cmd = claudeAddArgs(scope, node);
206
+ const shared = scope === 'project' ? '\n(project scope writes .mcp.json for your team, so it uses the portable `npx -y swipium`.)' : '';
52
207
  if (apply) {
53
- const r = spawnSync('claude', cmd, { stdio: 'inherit' });
208
+ const r = spawnSync('claude', cmd, { stdio: 'inherit', cwd: isDir(cwd) ? cwd : undefined });
54
209
  if (!applyOk(r)) {
55
210
  process.stdout.write(`claude registration failed (status ${r.status ?? 'n/a'}). Run manually:\n claude ${cmd.join(' ')}\n`);
56
211
  }
@@ -60,15 +215,18 @@ export async function runInit(args) {
60
215
  }
61
216
  }
62
217
  else {
63
- process.stdout.write(`Preview (run with --apply to execute):\n claude ${cmd.join(' ')}\n`);
218
+ process.stdout.write(`Preview (run with --apply to execute):\n claude ${cmd.join(' ')}${shared}\n`);
64
219
  }
65
220
  }
66
221
  else if (client === 'gemini') {
67
- const cmd = ['mcp', 'add', 'swipium', node, SELF];
222
+ const cmd = geminiAddArgs(scope, node);
223
+ const manual = scope === 'user'
224
+ ? `add to ~/.gemini/settings.json under "mcpServers":\n${geminiBlock(node, cwd)}\n${CWD_NOTE}`
225
+ : `add to ${join(cwd, '.gemini', 'settings.json')} under "mcpServers":\n "swipium": { "command": "npx", "args": ["-y", "swipium"], "timeout": 600000 }`;
68
226
  if (apply) {
69
- const r = spawnSync('gemini', cmd, { stdio: 'inherit' });
227
+ const r = spawnSync('gemini', cmd, { stdio: 'inherit', cwd: isDir(cwd) ? cwd : undefined });
70
228
  if (!applyOk(r)) {
71
- process.stdout.write(`gemini \`mcp add\` unavailable. Add to ~/.gemini/settings.json under "mcpServers":\n${geminiBlock(node)}\n`);
229
+ process.stdout.write(`gemini \`mcp add\` failed or unavailable. Instead, ${manual}\n`);
72
230
  }
73
231
  else {
74
232
  process.stdout.write('\nRegistered. Verifying…\n');
@@ -76,28 +234,61 @@ export async function runInit(args) {
76
234
  }
77
235
  }
78
236
  else {
79
- process.stdout.write(`Preview (run with --apply):\n gemini ${cmd.join(' ')}\nor add to ~/.gemini/settings.json:\n${geminiBlock(node)}\n`);
237
+ process.stdout.write(`Preview (run with --apply):\n gemini ${cmd.join(' ')}\nor ${manual}\n`);
80
238
  }
81
239
  }
82
- else {
83
- // codex — no `mcp add`; write config.toml (append if absent), then self-verify.
240
+ else if (client === 'codex') {
241
+ // Written to config.toml directly (rather than `codex mcp add`) so the block carries cwd and
242
+ // longer startup/tool timeouts, which `codex mcp add` has no flags for.
84
243
  const cfg = join(homedir(), '.codex', 'config.toml');
85
- const block = codexBlock(node);
244
+ const block = codexBlock(node, cwd);
245
+ const c = serverCommand(false, node);
246
+ const alt = ` codex mcp add swipium --env SWIPIUM_PROJECT_ROOT=${cwd} -- ${[c.command, ...c.args].join(' ')}\n (then add startup_timeout_sec = 30 and tool_timeout_sec = 600 under [mcp_servers.swipium] in ${cfg})`;
247
+ const caveat = '⚠ Codex Desktop threads may not expose tools from custom stdio MCP servers (openai/codex#19425, open). If the tools are missing in the Desktop app, try the Codex CLI.\n';
86
248
  if (apply) {
249
+ if (refuseMissingCwd())
250
+ return;
87
251
  mkdirSync(dirname(cfg), { recursive: true });
88
252
  const cur = existsSync(cfg) ? readFileSync(cfg, 'utf8') : '';
89
253
  if (cur.includes('[mcp_servers.swipium]')) {
90
- process.stdout.write(`Already present in ${cfg}\n`);
254
+ process.stdout.write(`Already present in ${cfg} (left unchanged). Expected block:\n${block}\n`);
91
255
  }
92
256
  else {
93
257
  appendFileSync(cfg, `\n${block}\n`);
94
258
  process.stdout.write(`Appended to ${cfg}\n`);
95
259
  }
96
- process.stdout.write('⚠ Codex has an open tool-injection regression (#19425) on builds after ~0.120.0 — confirm tools actually appear in Codex. Server-side self-check:\n');
260
+ process.stdout.write(caveat + 'Server-side self-check:\n');
97
261
  await runVerify();
98
262
  }
99
263
  else {
100
- process.stdout.write(`Add to ${cfg}:\n${block}\n⚠ Codex has an open tool-injection regression — verify tools appear after adding.\n`);
264
+ process.stdout.write(`Preview (run with --apply to append to ${cfg}):\n${block}\n${CWD_NOTE}\nor register with the Codex CLI:\n${alt}\n${caveat}`);
265
+ }
266
+ }
267
+ else if (client === 'cursor' || client === 'vscode') {
268
+ const isCursor = client === 'cursor';
269
+ if (scope === 'user') {
270
+ process.stdout.write(`Note: init ${client} only writes the project file (${isCursor ? '.cursor/mcp.json' : '.vscode/mcp.json'}); ` +
271
+ (isCursor
272
+ ? 'for all projects, add the same entry to ~/.cursor/mcp.json.\n'
273
+ : 'for your user profile use `code --add-mcp` (shown below).\n'));
274
+ }
275
+ if (apply && refuseMissingCwd())
276
+ return;
277
+ const ok = projectFileInit({
278
+ label: isCursor ? 'Cursor' : 'VS Code',
279
+ file: join(cwd, isCursor ? '.cursor' : '.vscode', 'mcp.json'),
280
+ topKey: isCursor ? 'mcpServers' : 'servers',
281
+ entry: isCursor ? cursorEntry() : vscodeEntry(),
282
+ apply,
283
+ extraPreview: isCursor
284
+ ? undefined
285
+ : `or add it to your VS Code user profile:\n code --add-mcp '${JSON.stringify({ name: 'swipium', command: 'npx', args: ['-y', 'swipium'] })}'\n`,
286
+ });
287
+ if (!ok)
288
+ return;
289
+ if (apply) {
290
+ process.stdout.write(`Reload ${isCursor ? 'Cursor' : 'VS Code'} (or its MCP server list) to start Swipium. Server-side self-check:\n`);
291
+ await runVerify();
101
292
  }
102
293
  }
103
294
  process.stdout.write('\nSelf-check anytime: swipium verify\n');
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}