qa360 2.2.20 → 2.3.1

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 (507) hide show
  1. package/README.md +155 -262
  2. package/{cli/dist → dist}/commands/ai.js +1 -1
  3. package/{cli/dist → dist}/commands/coverage.js +1 -1
  4. package/{cli/dist → dist}/commands/crawl.d.ts +12 -1
  5. package/{cli/dist → dist}/commands/crawl.js +70 -9
  6. package/{cli/dist → dist}/commands/doctor.js +2 -2
  7. package/{cli/dist → dist}/commands/explain.js +2 -2
  8. package/{cli/dist → dist}/commands/flakiness.js +1 -1
  9. package/{cli/dist → dist}/commands/generate.js +1 -1
  10. package/{cli/dist → dist}/commands/history.js +1 -1
  11. package/{cli/dist → dist}/commands/monitor.js +3 -3
  12. package/{cli/dist → dist}/commands/ollama.js +1 -1
  13. package/{cli/dist → dist}/commands/pack.js +2 -2
  14. package/{cli/dist → dist}/commands/regression.js +1 -1
  15. package/{cli/dist → dist}/commands/repair.js +1 -1
  16. package/{cli/dist → dist}/commands/retry.js +1 -1
  17. package/{cli/dist → dist}/commands/run.d.ts +1 -1
  18. package/{cli/dist → dist}/commands/run.js +1 -1
  19. package/{cli/dist → dist}/commands/secrets.js +1 -1
  20. package/{cli/dist → dist}/commands/serve.js +1 -1
  21. package/{cli/dist → dist}/commands/slo.js +1 -1
  22. package/{cli/dist → dist}/commands/verify.js +1 -1
  23. package/{cli/dist → dist}/core/adapters/playwright-native-api.d.ts +2 -0
  24. package/{cli/dist → dist}/core/adapters/playwright-native-api.js +20 -1
  25. package/{cli/dist → dist}/core/adapters/playwright-ui.d.ts +21 -0
  26. package/dist/core/adapters/playwright-ui.js +2050 -0
  27. package/{cli/dist → dist}/core/ai/ollama-provider.js +15 -3
  28. package/{cli/dist → dist}/core/artifacts/ui-artifacts.js +24 -4
  29. package/dist/core/auth/backup-codes-provider.d.ts +91 -0
  30. package/dist/core/auth/backup-codes-provider.js +215 -0
  31. package/{cli/dist → dist}/core/auth/basic-auth-provider.d.ts +6 -0
  32. package/{cli/dist → dist}/core/auth/basic-auth-provider.js +24 -6
  33. package/dist/core/auth/digest-auth-provider.d.ts +116 -0
  34. package/dist/core/auth/digest-auth-provider.js +244 -0
  35. package/dist/core/auth/hcaptcha-handler.d.ts +103 -0
  36. package/dist/core/auth/hcaptcha-handler.js +288 -0
  37. package/{cli/dist → dist}/core/auth/index.d.ts +81 -4
  38. package/{cli/dist → dist}/core/auth/index.js +15 -1
  39. package/dist/core/auth/oauth-handler.d.ts +408 -0
  40. package/dist/core/auth/oauth-handler.js +636 -0
  41. package/{cli/dist → dist}/core/auth/oauth2-provider.d.ts +9 -0
  42. package/dist/core/auth/oauth2-provider.js +227 -0
  43. package/dist/core/auth/otp-provider.d.ts +93 -0
  44. package/dist/core/auth/otp-provider.js +288 -0
  45. package/dist/core/auth/recaptcha-handler.d.ts +119 -0
  46. package/dist/core/auth/recaptcha-handler.js +301 -0
  47. package/dist/core/auth/remember-me-handler.d.ts +142 -0
  48. package/dist/core/auth/remember-me-handler.js +255 -0
  49. package/dist/core/auth/saml-handler.d.ts +173 -0
  50. package/dist/core/auth/saml-handler.js +364 -0
  51. package/dist/core/auth/webauthn-handler.d.ts +182 -0
  52. package/dist/core/auth/webauthn-handler.js +310 -0
  53. package/dist/core/crawler/advanced-interactions.d.ts +342 -0
  54. package/dist/core/crawler/advanced-interactions.js +1069 -0
  55. package/dist/core/crawler/blob-url-download-handler.d.ts +145 -0
  56. package/dist/core/crawler/blob-url-download-handler.js +392 -0
  57. package/dist/core/crawler/consent-handler.d.ts +49 -0
  58. package/dist/core/crawler/consent-handler.js +258 -0
  59. package/dist/core/crawler/cookie-manager.d.ts +166 -0
  60. package/dist/core/crawler/cookie-manager.js +353 -0
  61. package/dist/core/crawler/coop-coep-handler.d.ts +136 -0
  62. package/dist/core/crawler/coop-coep-handler.js +338 -0
  63. package/dist/core/crawler/csp-handler.d.ts +151 -0
  64. package/dist/core/crawler/csp-handler.js +415 -0
  65. package/dist/core/crawler/download-handler.d.ts +155 -0
  66. package/dist/core/crawler/download-handler.js +370 -0
  67. package/dist/core/crawler/email-testing-handler.d.ts +214 -0
  68. package/dist/core/crawler/email-testing-handler.js +398 -0
  69. package/dist/core/crawler/error-tracking-handler.d.ts +177 -0
  70. package/dist/core/crawler/error-tracking-handler.js +378 -0
  71. package/dist/core/crawler/form-handler.d.ts +100 -0
  72. package/dist/core/crawler/form-handler.js +465 -0
  73. package/dist/core/crawler/framework-wait-handler.d.ts +96 -0
  74. package/dist/core/crawler/framework-wait-handler.js +464 -0
  75. package/dist/core/crawler/geolocation-handler.d.ts +112 -0
  76. package/dist/core/crawler/geolocation-handler.js +276 -0
  77. package/dist/core/crawler/index.d.ts +78 -0
  78. package/{cli/dist → dist}/core/crawler/index.js +74 -1
  79. package/dist/core/crawler/intelligent-selector-generator.d.ts +164 -0
  80. package/dist/core/crawler/intelligent-selector-generator.js +612 -0
  81. package/{cli/dist → dist}/core/crawler/journey-generator.js +44 -1
  82. package/{cli/dist → dist}/core/crawler/page-analyzer.d.ts +16 -1
  83. package/{cli/dist → dist}/core/crawler/page-analyzer.js +469 -17
  84. package/dist/core/crawler/permissions-handler.d.ts +112 -0
  85. package/dist/core/crawler/permissions-handler.js +236 -0
  86. package/dist/core/crawler/permissions-policy-handler.d.ts +113 -0
  87. package/dist/core/crawler/permissions-policy-handler.js +402 -0
  88. package/dist/core/crawler/presets.d.ts +100 -0
  89. package/dist/core/crawler/presets.js +887 -0
  90. package/dist/core/crawler/repl-debug-handler.d.ts +105 -0
  91. package/dist/core/crawler/repl-debug-handler.js +552 -0
  92. package/dist/core/crawler/reporting-api-handler.d.ts +212 -0
  93. package/dist/core/crawler/reporting-api-handler.js +344 -0
  94. package/{cli/dist → dist}/core/crawler/selector-generator.d.ts +9 -0
  95. package/{cli/dist → dist}/core/crawler/selector-generator.js +99 -23
  96. package/dist/core/crawler/site-profiler.d.ts +89 -0
  97. package/dist/core/crawler/site-profiler.js +290 -0
  98. package/dist/core/crawler/sourcemaps-handler.d.ts +144 -0
  99. package/dist/core/crawler/sourcemaps-handler.js +420 -0
  100. package/dist/core/crawler/stacked-modals-handler.d.ts +118 -0
  101. package/dist/core/crawler/stacked-modals-handler.js +429 -0
  102. package/dist/core/crawler/trusted-types-handler.d.ts +149 -0
  103. package/dist/core/crawler/trusted-types-handler.js +413 -0
  104. package/{cli/dist → dist}/core/crawler/types.d.ts +68 -2
  105. package/dist/core/crawler/wait-strategies.d.ts +108 -0
  106. package/dist/core/crawler/wait-strategies.js +399 -0
  107. package/dist/core/fixtures/factories.d.ts +180 -0
  108. package/dist/core/fixtures/factories.js +279 -0
  109. package/dist/core/fixtures/index.d.ts +6 -0
  110. package/dist/core/fixtures/index.js +6 -0
  111. package/{cli/dist → dist}/core/generation/crawler-pack-generator.d.ts +13 -3
  112. package/dist/core/generation/crawler-pack-generator.js +232 -0
  113. package/{cli/dist → dist}/core/generation/index.d.ts +2 -0
  114. package/{cli/dist → dist}/core/generation/index.js +2 -0
  115. package/{cli/dist → dist}/core/index.d.ts +2 -0
  116. package/{cli/dist → dist}/core/index.js +4 -0
  117. package/dist/core/network/index.d.ts +7 -0
  118. package/dist/core/network/index.js +7 -0
  119. package/dist/core/network/network-manager.d.ts +237 -0
  120. package/dist/core/network/network-manager.js +343 -0
  121. package/dist/core/network/network-simulator.d.ts +158 -0
  122. package/dist/core/network/network-simulator.js +261 -0
  123. package/{cli/dist → dist}/core/pack/validator.js +2 -2
  124. package/{cli/dist → dist}/core/pack-v2/migrator.d.ts +5 -0
  125. package/{cli/dist → dist}/core/pack-v2/migrator.js +81 -6
  126. package/{cli/dist → dist}/core/pack-v2/validator.js +4 -3
  127. package/{cli/dist → dist}/core/pom/base-page.js +1 -1
  128. package/{cli/dist → dist}/core/pom/loader.js +1 -1
  129. package/dist/core/reporting/index.d.ts +9 -0
  130. package/dist/core/reporting/index.js +10 -0
  131. package/dist/core/reporting/junit-reporter.d.ts +114 -0
  132. package/dist/core/reporting/junit-reporter.js +306 -0
  133. package/{cli/dist → dist}/core/runner/e2e-helpers.d.ts +1 -1
  134. package/{cli/dist → dist}/core/runner/e2e-helpers.js +2 -2
  135. package/{cli/dist → dist}/core/runner/phase3-runner.d.ts +3 -0
  136. package/{cli/dist → dist}/core/runner/phase3-runner.js +45 -14
  137. package/dist/core/sharding/test-sharding.d.ts +137 -0
  138. package/dist/core/sharding/test-sharding.js +233 -0
  139. package/dist/core/storage/cookie-manager.d.ts +160 -0
  140. package/dist/core/storage/cookie-manager.js +268 -0
  141. package/dist/core/storage/index.d.ts +7 -0
  142. package/dist/core/storage/index.js +7 -0
  143. package/dist/core/storage/storage-helpers.d.ts +138 -0
  144. package/dist/core/storage/storage-helpers.js +315 -0
  145. package/dist/core/test-helpers/index.d.ts +6 -0
  146. package/dist/core/test-helpers/index.js +6 -0
  147. package/dist/core/test-helpers/state-reset.d.ts +119 -0
  148. package/dist/core/test-helpers/state-reset.js +234 -0
  149. package/{cli/dist → dist}/core/types/pack-v1.d.ts +15 -2
  150. package/{cli/dist → dist}/core/types/pack-v2.d.ts +1 -1
  151. package/dist/core/upload/chunked-uploader.d.ts +150 -0
  152. package/dist/core/upload/chunked-uploader.js +289 -0
  153. package/dist/core/upload/index.d.ts +11 -0
  154. package/dist/core/upload/index.js +8 -0
  155. package/dist/core/upload/mime-validator.d.ts +119 -0
  156. package/dist/core/upload/mime-validator.js +373 -0
  157. package/dist/core/upload/presigned-uploader.d.ts +118 -0
  158. package/dist/core/upload/presigned-uploader.js +274 -0
  159. package/dist/core/utils/device-emulation.d.ts +194 -0
  160. package/dist/core/utils/device-emulation.js +380 -0
  161. package/dist/core/utils/index.d.ts +8 -0
  162. package/dist/core/utils/index.js +8 -0
  163. package/dist/core/utils/retry.d.ts +145 -0
  164. package/dist/core/utils/retry.js +242 -0
  165. package/dist/core/utils/smart-wait.d.ts +133 -0
  166. package/dist/core/utils/smart-wait.js +417 -0
  167. package/dist/core/visual/index.d.ts +7 -0
  168. package/dist/core/visual/index.js +7 -0
  169. package/dist/core/visual/pixel-diff.d.ts +87 -0
  170. package/dist/core/visual/pixel-diff.js +213 -0
  171. package/dist/core/visual/screenshot-helper.d.ts +130 -0
  172. package/dist/core/visual/screenshot-helper.js +223 -0
  173. package/{cli/dist → dist}/utils/config.d.ts +1 -1
  174. package/examples/README.md +160 -0
  175. package/examples/accessibility.yml +48 -0
  176. package/examples/api-basic.yml +27 -0
  177. package/examples/complete.yml +146 -0
  178. package/examples/crawler.yml +38 -0
  179. package/examples/fullstack.yml +78 -0
  180. package/examples/security.yml +58 -0
  181. package/examples/ui-advanced.yml +49 -0
  182. package/examples/ui-basic.yml +24 -0
  183. package/package.json +33 -67
  184. package/CHANGELOG.md +0 -262
  185. package/CONTRIBUTING.md +0 -273
  186. package/QUICK_START.md +0 -191
  187. package/cli/CHANGELOG.md +0 -84
  188. package/cli/LICENSE +0 -24
  189. package/cli/README.md +0 -222
  190. package/cli/dist/core/adapters/playwright-ui.js +0 -864
  191. package/cli/dist/core/auth/oauth2-provider.js +0 -114
  192. package/cli/dist/core/coverage/analyzer.d.ts +0 -101
  193. package/cli/dist/core/coverage/analyzer.js +0 -415
  194. package/cli/dist/core/coverage/collector.d.ts +0 -74
  195. package/cli/dist/core/coverage/collector.js +0 -459
  196. package/cli/dist/core/coverage/config.d.ts +0 -37
  197. package/cli/dist/core/coverage/config.js +0 -156
  198. package/cli/dist/core/coverage/index.d.ts +0 -11
  199. package/cli/dist/core/coverage/index.js +0 -15
  200. package/cli/dist/core/coverage/types.d.ts +0 -267
  201. package/cli/dist/core/coverage/types.js +0 -6
  202. package/cli/dist/core/coverage/vault.d.ts +0 -95
  203. package/cli/dist/core/coverage/vault.js +0 -405
  204. package/cli/dist/core/crawler/index.d.ts +0 -57
  205. package/cli/dist/core/fixtures/index.d.ts +0 -8
  206. package/cli/dist/core/fixtures/index.js +0 -8
  207. package/cli/dist/core/generation/crawler-pack-generator.js +0 -231
  208. package/cli/dist/core/reporting/index.d.ts +0 -6
  209. package/cli/dist/core/reporting/index.js +0 -6
  210. package/cli/dist/core/visual/index.d.ts +0 -6
  211. package/cli/dist/core/visual/index.js +0 -6
  212. package/cli/package.json +0 -76
  213. package/core/LICENSE +0 -24
  214. package/core/README.md +0 -64
  215. package/core/package.json +0 -81
  216. package/core/schemas/pack.schema.json +0 -236
  217. /package/{cli/bin → bin}/qa360.js +0 -0
  218. /package/{cli/dist → dist}/cli-minimal.d.ts +0 -0
  219. /package/{cli/dist → dist}/cli-minimal.js +0 -0
  220. /package/{cli/dist → dist}/commands/ai.d.ts +0 -0
  221. /package/{cli/dist → dist}/commands/ask.d.ts +0 -0
  222. /package/{cli/dist → dist}/commands/ask.js +0 -0
  223. /package/{cli/dist → dist}/commands/coverage.d.ts +0 -0
  224. /package/{cli/dist → dist}/commands/doctor.d.ts +0 -0
  225. /package/{cli/dist → dist}/commands/examples.d.ts +0 -0
  226. /package/{cli/dist → dist}/commands/examples.js +0 -0
  227. /package/{cli/dist → dist}/commands/explain.d.ts +0 -0
  228. /package/{cli/dist → dist}/commands/flakiness.d.ts +0 -0
  229. /package/{cli/dist → dist}/commands/generate.d.ts +0 -0
  230. /package/{cli/dist → dist}/commands/history.d.ts +0 -0
  231. /package/{cli/dist → dist}/commands/init.d.ts +0 -0
  232. /package/{cli/dist → dist}/commands/init.js +0 -0
  233. /package/{cli/dist → dist}/commands/monitor.d.ts +0 -0
  234. /package/{cli/dist → dist}/commands/ollama.d.ts +0 -0
  235. /package/{cli/dist → dist}/commands/pack.d.ts +0 -0
  236. /package/{cli/dist → dist}/commands/regression.d.ts +0 -0
  237. /package/{cli/dist → dist}/commands/repair.d.ts +0 -0
  238. /package/{cli/dist → dist}/commands/report.d.ts +0 -0
  239. /package/{cli/dist → dist}/commands/report.js +0 -0
  240. /package/{cli/dist → dist}/commands/retry.d.ts +0 -0
  241. /package/{cli/dist → dist}/commands/scan.d.ts +0 -0
  242. /package/{cli/dist → dist}/commands/scan.js +0 -0
  243. /package/{cli/dist → dist}/commands/secrets.d.ts +0 -0
  244. /package/{cli/dist → dist}/commands/serve.d.ts +0 -0
  245. /package/{cli/dist → dist}/commands/slo.d.ts +0 -0
  246. /package/{cli/dist → dist}/commands/verify.d.ts +0 -0
  247. /package/{cli/dist → dist}/core/adapters/gitleaks-secrets.d.ts +0 -0
  248. /package/{cli/dist → dist}/core/adapters/gitleaks-secrets.js +0 -0
  249. /package/{cli/dist → dist}/core/adapters/jest-adapter.d.ts +0 -0
  250. /package/{cli/dist → dist}/core/adapters/jest-adapter.js +0 -0
  251. /package/{cli/dist → dist}/core/adapters/k6-perf.d.ts +0 -0
  252. /package/{cli/dist → dist}/core/adapters/k6-perf.js +0 -0
  253. /package/{cli/dist → dist}/core/adapters/osv-deps.d.ts +0 -0
  254. /package/{cli/dist → dist}/core/adapters/osv-deps.js +0 -0
  255. /package/{cli/dist → dist}/core/adapters/playwright-native-adapter.d.ts +0 -0
  256. /package/{cli/dist → dist}/core/adapters/playwright-native-adapter.js +0 -0
  257. /package/{cli/dist → dist}/core/adapters/pytest-adapter.d.ts +0 -0
  258. /package/{cli/dist → dist}/core/adapters/pytest-adapter.js +0 -0
  259. /package/{cli/dist → dist}/core/adapters/semgrep-sast.d.ts +0 -0
  260. /package/{cli/dist → dist}/core/adapters/semgrep-sast.js +0 -0
  261. /package/{cli/dist → dist}/core/adapters/unit-test-types.d.ts +0 -0
  262. /package/{cli/dist → dist}/core/adapters/unit-test-types.js +0 -0
  263. /package/{cli/dist → dist}/core/adapters/vitest-adapter.d.ts +0 -0
  264. /package/{cli/dist → dist}/core/adapters/vitest-adapter.js +0 -0
  265. /package/{cli/dist → dist}/core/adapters/zap-dast.d.ts +0 -0
  266. /package/{cli/dist → dist}/core/adapters/zap-dast.js +0 -0
  267. /package/{cli/dist → dist}/core/ai/anthropic-provider.d.ts +0 -0
  268. /package/{cli/dist → dist}/core/ai/anthropic-provider.js +0 -0
  269. /package/{cli/dist → dist}/core/ai/deepseek-provider.d.ts +0 -0
  270. /package/{cli/dist → dist}/core/ai/deepseek-provider.js +0 -0
  271. /package/{cli/dist → dist}/core/ai/index.d.ts +0 -0
  272. /package/{cli/dist → dist}/core/ai/index.js +0 -0
  273. /package/{cli/dist → dist}/core/ai/llm-client.d.ts +0 -0
  274. /package/{cli/dist → dist}/core/ai/llm-client.js +0 -0
  275. /package/{cli/dist → dist}/core/ai/mock-provider.d.ts +0 -0
  276. /package/{cli/dist → dist}/core/ai/mock-provider.js +0 -0
  277. /package/{cli/dist → dist}/core/ai/ollama-provider.d.ts +0 -0
  278. /package/{cli/dist → dist}/core/ai/openai-provider.d.ts +0 -0
  279. /package/{cli/dist → dist}/core/ai/openai-provider.js +0 -0
  280. /package/{cli/dist → dist}/core/ai/provider-factory.d.ts +0 -0
  281. /package/{cli/dist → dist}/core/ai/provider-factory.js +0 -0
  282. /package/{cli/dist → dist}/core/artifacts/index.d.ts +0 -0
  283. /package/{cli/dist → dist}/core/artifacts/index.js +0 -0
  284. /package/{cli/dist → dist}/core/artifacts/ui-artifacts.d.ts +0 -0
  285. /package/{cli/dist → dist}/core/assertions/engine.d.ts +0 -0
  286. /package/{cli/dist → dist}/core/assertions/engine.js +0 -0
  287. /package/{cli/dist → dist}/core/assertions/index.d.ts +0 -0
  288. /package/{cli/dist → dist}/core/assertions/index.js +0 -0
  289. /package/{cli/dist → dist}/core/assertions/types.d.ts +0 -0
  290. /package/{cli/dist → dist}/core/assertions/types.js +0 -0
  291. /package/{cli/dist → dist}/core/auth/api-key-provider.d.ts +0 -0
  292. /package/{cli/dist → dist}/core/auth/api-key-provider.js +0 -0
  293. /package/{cli/dist → dist}/core/auth/aws-iam-provider.d.ts +0 -0
  294. /package/{cli/dist → dist}/core/auth/aws-iam-provider.js +0 -0
  295. /package/{cli/dist → dist}/core/auth/azure-ad-provider.d.ts +0 -0
  296. /package/{cli/dist → dist}/core/auth/azure-ad-provider.js +0 -0
  297. /package/{cli/dist → dist}/core/auth/gcp-adc-provider.d.ts +0 -0
  298. /package/{cli/dist → dist}/core/auth/gcp-adc-provider.js +0 -0
  299. /package/{cli/dist → dist}/core/auth/jwt-provider.d.ts +0 -0
  300. /package/{cli/dist → dist}/core/auth/jwt-provider.js +0 -0
  301. /package/{cli/dist → dist}/core/auth/manager.d.ts +0 -0
  302. /package/{cli/dist → dist}/core/auth/manager.js +0 -0
  303. /package/{cli/dist → dist}/core/auth/totp-provider.d.ts +0 -0
  304. /package/{cli/dist → dist}/core/auth/totp-provider.js +0 -0
  305. /package/{cli/dist → dist}/core/auth/ui-login-provider.d.ts +0 -0
  306. /package/{cli/dist → dist}/core/auth/ui-login-provider.js +0 -0
  307. /package/{cli/dist → dist}/core/cache/index.d.ts +0 -0
  308. /package/{cli/dist → dist}/core/cache/index.js +0 -0
  309. /package/{cli/dist → dist}/core/cache/lru-cache.d.ts +0 -0
  310. /package/{cli/dist → dist}/core/cache/lru-cache.js +0 -0
  311. /package/{cli/dist/core → dist}/core/coverage/analyzer.d.ts +0 -0
  312. /package/{cli/dist/core → dist}/core/coverage/analyzer.js +0 -0
  313. /package/{cli/dist/core → dist}/core/coverage/collector.d.ts +0 -0
  314. /package/{cli/dist/core → dist}/core/coverage/collector.js +0 -0
  315. /package/{cli/dist/core → dist}/core/coverage/config.d.ts +0 -0
  316. /package/{cli/dist/core → dist}/core/coverage/config.js +0 -0
  317. /package/{cli/dist/core → dist}/core/coverage/index.d.ts +0 -0
  318. /package/{cli/dist/core → dist}/core/coverage/index.js +0 -0
  319. /package/{cli/dist/core → dist}/core/coverage/types.d.ts +0 -0
  320. /package/{cli/dist/core → dist}/core/coverage/types.js +0 -0
  321. /package/{cli/dist/core → dist}/core/coverage/vault.d.ts +0 -0
  322. /package/{cli/dist/core → dist}/core/coverage/vault.js +0 -0
  323. /package/{cli/dist → dist}/core/crawler/journey-generator.d.ts +0 -0
  324. /package/{cli/dist → dist}/core/crawler/types.js +0 -0
  325. /package/{cli/dist → dist}/core/dashboard/assets.d.ts +0 -0
  326. /package/{cli/dist → dist}/core/dashboard/assets.js +0 -0
  327. /package/{cli/dist → dist}/core/dashboard/index.d.ts +0 -0
  328. /package/{cli/dist → dist}/core/dashboard/index.js +0 -0
  329. /package/{cli/dist → dist}/core/dashboard/server.d.ts +0 -0
  330. /package/{cli/dist → dist}/core/dashboard/server.js +0 -0
  331. /package/{cli/dist → dist}/core/dashboard/types.d.ts +0 -0
  332. /package/{cli/dist → dist}/core/dashboard/types.js +0 -0
  333. /package/{cli/dist → dist}/core/discoverer/index.d.ts +0 -0
  334. /package/{cli/dist → dist}/core/discoverer/index.js +0 -0
  335. /package/{cli/dist → dist}/core/fixtures/loader.d.ts +0 -0
  336. /package/{cli/dist → dist}/core/fixtures/loader.js +0 -0
  337. /package/{cli/dist → dist}/core/fixtures/resolver.d.ts +0 -0
  338. /package/{cli/dist → dist}/core/fixtures/resolver.js +0 -0
  339. /package/{cli/dist → dist}/core/fixtures/types.d.ts +0 -0
  340. /package/{cli/dist → dist}/core/fixtures/types.js +0 -0
  341. /package/{cli/dist → dist}/core/flakiness/index.d.ts +0 -0
  342. /package/{cli/dist → dist}/core/flakiness/index.js +0 -0
  343. /package/{cli/dist → dist}/core/generation/code-formatter.d.ts +0 -0
  344. /package/{cli/dist → dist}/core/generation/code-formatter.js +0 -0
  345. /package/{cli/dist → dist}/core/generation/code-generator.d.ts +0 -0
  346. /package/{cli/dist → dist}/core/generation/code-generator.js +0 -0
  347. /package/{cli/dist → dist}/core/generation/generator.d.ts +0 -0
  348. /package/{cli/dist → dist}/core/generation/generator.js +0 -0
  349. /package/{cli/dist → dist}/core/generation/pack-generator.d.ts +0 -0
  350. /package/{cli/dist → dist}/core/generation/pack-generator.js +0 -0
  351. /package/{cli/dist → dist}/core/generation/prompt-builder.d.ts +0 -0
  352. /package/{cli/dist → dist}/core/generation/prompt-builder.js +0 -0
  353. /package/{cli/dist → dist}/core/generation/source-analyzer.d.ts +0 -0
  354. /package/{cli/dist → dist}/core/generation/source-analyzer.js +0 -0
  355. /package/{cli/dist → dist}/core/generation/test-optimizer.d.ts +0 -0
  356. /package/{cli/dist → dist}/core/generation/test-optimizer.js +0 -0
  357. /package/{cli/dist → dist}/core/generation/types.d.ts +0 -0
  358. /package/{cli/dist → dist}/core/generation/types.js +0 -0
  359. /package/{cli/dist → dist}/core/hooks/compose.d.ts +0 -0
  360. /package/{cli/dist → dist}/core/hooks/compose.js +0 -0
  361. /package/{cli/dist → dist}/core/hooks/runner.d.ts +0 -0
  362. /package/{cli/dist → dist}/core/hooks/runner.js +0 -0
  363. /package/{cli/dist → dist}/core/pack/migrator.d.ts +0 -0
  364. /package/{cli/dist → dist}/core/pack/migrator.js +0 -0
  365. /package/{cli/dist → dist}/core/pack/validator.d.ts +0 -0
  366. /package/{cli/dist → dist}/core/pack-v2/index.d.ts +0 -0
  367. /package/{cli/dist → dist}/core/pack-v2/index.js +0 -0
  368. /package/{cli/dist → dist}/core/pack-v2/loader.d.ts +0 -0
  369. /package/{cli/dist → dist}/core/pack-v2/loader.js +0 -0
  370. /package/{cli/dist → dist}/core/pack-v2/validator.d.ts +0 -0
  371. /package/{cli/dist → dist}/core/parallel/index.d.ts +0 -0
  372. /package/{cli/dist → dist}/core/parallel/index.js +0 -0
  373. /package/{cli/dist → dist}/core/parallel/parallel-runner.d.ts +0 -0
  374. /package/{cli/dist → dist}/core/parallel/parallel-runner.js +0 -0
  375. /package/{cli/dist → dist}/core/pom/base-page.d.ts +0 -0
  376. /package/{cli/dist → dist}/core/pom/index.d.ts +0 -0
  377. /package/{cli/dist → dist}/core/pom/index.js +0 -0
  378. /package/{cli/dist → dist}/core/pom/loader.d.ts +0 -0
  379. /package/{cli/dist → dist}/core/pom/types.d.ts +0 -0
  380. /package/{cli/dist → dist}/core/pom/types.js +0 -0
  381. /package/{cli/dist → dist}/core/proof/bundle.d.ts +0 -0
  382. /package/{cli/dist → dist}/core/proof/bundle.js +0 -0
  383. /package/{cli/dist → dist}/core/proof/canonicalize.d.ts +0 -0
  384. /package/{cli/dist → dist}/core/proof/canonicalize.js +0 -0
  385. /package/{cli/dist → dist}/core/proof/index.d.ts +0 -0
  386. /package/{cli/dist → dist}/core/proof/index.js +0 -0
  387. /package/{cli/dist → dist}/core/proof/schema.d.ts +0 -0
  388. /package/{cli/dist → dist}/core/proof/schema.js +0 -0
  389. /package/{cli/dist → dist}/core/proof/signer.d.ts +0 -0
  390. /package/{cli/dist → dist}/core/proof/signer.js +0 -0
  391. /package/{cli/dist → dist}/core/proof/verifier.d.ts +0 -0
  392. /package/{cli/dist → dist}/core/proof/verifier.js +0 -0
  393. /package/{cli/dist → dist}/core/regression/detector.d.ts +0 -0
  394. /package/{cli/dist → dist}/core/regression/detector.js +0 -0
  395. /package/{cli/dist → dist}/core/regression/index.d.ts +0 -0
  396. /package/{cli/dist → dist}/core/regression/index.js +0 -0
  397. /package/{cli/dist → dist}/core/regression/trend-analyzer.d.ts +0 -0
  398. /package/{cli/dist → dist}/core/regression/trend-analyzer.js +0 -0
  399. /package/{cli/dist → dist}/core/regression/types.d.ts +0 -0
  400. /package/{cli/dist → dist}/core/regression/types.js +0 -0
  401. /package/{cli/dist → dist}/core/regression/vault.d.ts +0 -0
  402. /package/{cli/dist → dist}/core/regression/vault.js +0 -0
  403. /package/{cli/dist → dist}/core/repair/engine/fixer.d.ts +0 -0
  404. /package/{cli/dist → dist}/core/repair/engine/fixer.js +0 -0
  405. /package/{cli/dist → dist}/core/repair/engine/suggestion-engine.d.ts +0 -0
  406. /package/{cli/dist → dist}/core/repair/engine/suggestion-engine.js +0 -0
  407. /package/{cli/dist → dist}/core/repair/index.d.ts +0 -0
  408. /package/{cli/dist → dist}/core/repair/index.js +0 -0
  409. /package/{cli/dist → dist}/core/repair/repairer.d.ts +0 -0
  410. /package/{cli/dist → dist}/core/repair/repairer.js +0 -0
  411. /package/{cli/dist → dist}/core/repair/types.d.ts +0 -0
  412. /package/{cli/dist → dist}/core/repair/types.js +0 -0
  413. /package/{cli/dist → dist}/core/repair/utils/error-analyzer.d.ts +0 -0
  414. /package/{cli/dist → dist}/core/repair/utils/error-analyzer.js +0 -0
  415. /package/{cli/dist → dist}/core/reporting/html-reporter.d.ts +0 -0
  416. /package/{cli/dist → dist}/core/reporting/html-reporter.js +0 -0
  417. /package/{cli/dist → dist}/core/retry/flakiness-integration.d.ts +0 -0
  418. /package/{cli/dist → dist}/core/retry/flakiness-integration.js +0 -0
  419. /package/{cli/dist → dist}/core/retry/index.d.ts +0 -0
  420. /package/{cli/dist → dist}/core/retry/index.js +0 -0
  421. /package/{cli/dist → dist}/core/retry/retry-engine.d.ts +0 -0
  422. /package/{cli/dist → dist}/core/retry/retry-engine.js +0 -0
  423. /package/{cli/dist → dist}/core/retry/types.d.ts +0 -0
  424. /package/{cli/dist → dist}/core/retry/types.js +0 -0
  425. /package/{cli/dist → dist}/core/retry/vault.d.ts +0 -0
  426. /package/{cli/dist → dist}/core/retry/vault.js +0 -0
  427. /package/{cli/dist → dist}/core/schemas/pack.schema.json +0 -0
  428. /package/{cli/dist → dist}/core/secrets/crypto.d.ts +0 -0
  429. /package/{cli/dist → dist}/core/secrets/crypto.js +0 -0
  430. /package/{cli/dist → dist}/core/secrets/manager.d.ts +0 -0
  431. /package/{cli/dist → dist}/core/secrets/manager.js +0 -0
  432. /package/{cli/dist → dist}/core/security/redaction-patterns-extended.d.ts +0 -0
  433. /package/{cli/dist → dist}/core/security/redaction-patterns-extended.js +0 -0
  434. /package/{cli/dist → dist}/core/security/redactor.d.ts +0 -0
  435. /package/{cli/dist → dist}/core/security/redactor.js +0 -0
  436. /package/{cli/dist → dist}/core/self-healing/assertion-healer.d.ts +0 -0
  437. /package/{cli/dist → dist}/core/self-healing/assertion-healer.js +0 -0
  438. /package/{cli/dist → dist}/core/self-healing/engine.d.ts +0 -0
  439. /package/{cli/dist → dist}/core/self-healing/engine.js +0 -0
  440. /package/{cli/dist → dist}/core/self-healing/index.d.ts +0 -0
  441. /package/{cli/dist → dist}/core/self-healing/index.js +0 -0
  442. /package/{cli/dist → dist}/core/self-healing/selector-healer.d.ts +0 -0
  443. /package/{cli/dist → dist}/core/self-healing/selector-healer.js +0 -0
  444. /package/{cli/dist → dist}/core/self-healing/types.d.ts +0 -0
  445. /package/{cli/dist → dist}/core/self-healing/types.js +0 -0
  446. /package/{cli/dist → dist}/core/serve/diagnostics-collector.d.ts +0 -0
  447. /package/{cli/dist → dist}/core/serve/diagnostics-collector.js +0 -0
  448. /package/{cli/dist → dist}/core/serve/health-checker.d.ts +0 -0
  449. /package/{cli/dist → dist}/core/serve/health-checker.js +0 -0
  450. /package/{cli/dist → dist}/core/serve/index.d.ts +0 -0
  451. /package/{cli/dist → dist}/core/serve/index.js +0 -0
  452. /package/{cli/dist → dist}/core/serve/metrics-collector.d.ts +0 -0
  453. /package/{cli/dist → dist}/core/serve/metrics-collector.js +0 -0
  454. /package/{cli/dist → dist}/core/serve/process-manager.d.ts +0 -0
  455. /package/{cli/dist → dist}/core/serve/process-manager.js +0 -0
  456. /package/{cli/dist → dist}/core/serve/server.d.ts +0 -0
  457. /package/{cli/dist → dist}/core/serve/server.js +0 -0
  458. /package/{cli/dist → dist}/core/slo/config.d.ts +0 -0
  459. /package/{cli/dist → dist}/core/slo/config.js +0 -0
  460. /package/{cli/dist → dist}/core/slo/index.d.ts +0 -0
  461. /package/{cli/dist → dist}/core/slo/index.js +0 -0
  462. /package/{cli/dist → dist}/core/slo/sli-calculator.d.ts +0 -0
  463. /package/{cli/dist → dist}/core/slo/sli-calculator.js +0 -0
  464. /package/{cli/dist → dist}/core/slo/slo-tracker.d.ts +0 -0
  465. /package/{cli/dist → dist}/core/slo/slo-tracker.js +0 -0
  466. /package/{cli/dist → dist}/core/slo/types.d.ts +0 -0
  467. /package/{cli/dist → dist}/core/slo/types.js +0 -0
  468. /package/{cli/dist → dist}/core/slo/vault.d.ts +0 -0
  469. /package/{cli/dist → dist}/core/slo/vault.js +0 -0
  470. /package/{cli/dist → dist}/core/tui/index.d.ts +0 -0
  471. /package/{cli/dist → dist}/core/tui/index.js +0 -0
  472. /package/{cli/dist → dist}/core/tui/monitor.d.ts +0 -0
  473. /package/{cli/dist → dist}/core/tui/monitor.js +0 -0
  474. /package/{cli/dist → dist}/core/tui/renderer.d.ts +0 -0
  475. /package/{cli/dist → dist}/core/tui/renderer.js +0 -0
  476. /package/{cli/dist → dist}/core/tui/types.d.ts +0 -0
  477. /package/{cli/dist → dist}/core/tui/types.js +0 -0
  478. /package/{cli/dist → dist}/core/types/pack-v1.js +0 -0
  479. /package/{cli/dist → dist}/core/types/pack-v2.js +0 -0
  480. /package/{cli/dist → dist}/core/types/trust-score.d.ts +0 -0
  481. /package/{cli/dist → dist}/core/types/trust-score.js +0 -0
  482. /package/{cli/dist → dist}/core/vault/cas.d.ts +0 -0
  483. /package/{cli/dist → dist}/core/vault/cas.js +0 -0
  484. /package/{cli/dist → dist}/core/vault/index.d.ts +0 -0
  485. /package/{cli/dist → dist}/core/vault/index.js +0 -0
  486. /package/{cli/dist → dist}/core/visual/visual-regression.d.ts +0 -0
  487. /package/{cli/dist → dist}/core/visual/visual-regression.js +0 -0
  488. /package/{cli/dist → dist}/core/watch/index.d.ts +0 -0
  489. /package/{cli/dist → dist}/core/watch/index.js +0 -0
  490. /package/{cli/dist → dist}/core/watch/watch-mode.d.ts +0 -0
  491. /package/{cli/dist → dist}/core/watch/watch-mode.js +0 -0
  492. /package/{cli/dist → dist}/generators/index.d.ts +0 -0
  493. /package/{cli/dist → dist}/generators/index.js +0 -0
  494. /package/{cli/dist → dist}/generators/json-reporter.d.ts +0 -0
  495. /package/{cli/dist → dist}/generators/json-reporter.js +0 -0
  496. /package/{cli/dist → dist}/generators/test-generator.d.ts +0 -0
  497. /package/{cli/dist → dist}/generators/test-generator.js +0 -0
  498. /package/{cli/dist → dist}/index.d.ts +0 -0
  499. /package/{cli/dist → dist}/index.js +0 -0
  500. /package/{cli/dist → dist}/scanners/dom-scanner.d.ts +0 -0
  501. /package/{cli/dist → dist}/scanners/dom-scanner.js +0 -0
  502. /package/{cli/dist → dist}/scanners/index.d.ts +0 -0
  503. /package/{cli/dist → dist}/scanners/index.js +0 -0
  504. /package/{cli/dist → dist}/schemas/pack.schema.json +0 -0
  505. /package/{cli/dist → dist}/types/scan.d.ts +0 -0
  506. /package/{cli/dist → dist}/types/scan.js +0 -0
  507. /package/{cli/dist → dist}/utils/config.js +0 -0
@@ -1,26 +1,38 @@
1
1
  /**
2
2
  * QA360 Crawl Command
3
3
  *
4
- * Crawls a website and generates a complete pack.yml with E2E tests
4
+ * Universal crawler for all types of web applications.
5
+ * Supports presets for different platform types and custom auth/test data.
5
6
  */
6
7
  import { Command } from 'commander';
7
8
  import chalk from 'chalk';
8
9
  import ora from 'ora';
9
- import { generatePackFromCrawl, quickCrawl } from 'qa360-core';
10
+ import { generatePackFromCrawl, quickCrawl } from '../core/index.js';
11
+ import { detectPresetFromUrl, getAllPresets, getPreset, getPresetList } from '../core/index.js';
10
12
  /**
11
13
  * Create crawl command
12
14
  */
13
15
  export function createCrawlCommand() {
14
16
  const cmd = new Command('crawl')
15
- .description('Crawl website and generate E2E test pack')
16
- .argument('<url>', 'Website URL to crawl')
17
+ .description('Universal crawler - Generate E2E tests for ANY website')
18
+ .argument('[url]', 'Website URL to crawl (required unless --list-presets)')
17
19
  .option('-o, --output <file>', 'Output pack file path', 'pack.yml')
18
20
  .option('--name <name>', 'Pack name')
21
+ .option('--preset <type>', 'Platform preset (ecommerce, saas, social, booking, job, etc.)')
22
+ .option('--list-presets', 'List all available presets')
19
23
  .option('--max-depth <number>', 'Maximum crawl depth', '2')
20
24
  .option('--max-pages <number>', 'Maximum pages to crawl', '20')
21
25
  .option('--headed', 'Run crawler in headed mode (visible browser)')
22
26
  .option('--a11y', 'Include accessibility tests')
23
27
  .option('--exclude <patterns...>', 'URL patterns to exclude')
28
+ .option('--only <patterns...>', 'Only crawl URLs matching these patterns')
29
+ .option('--scenario <type>', 'Focus on specific scenario (login, checkout, etc.)')
30
+ .option('--auth-email <email>', 'Email for auto-authentication')
31
+ .option('--auth-password <password>', 'Password for auto-authentication')
32
+ .option('--auth-url <path>', 'Login page URL (default: auto-detect)')
33
+ .option('--test-data <json>', 'Test data as JSON string')
34
+ .option('--viewport <size>', 'Browser viewport size (default: 1280x720)')
35
+ .option('--slow-mo <ms>', 'Slow down actions by ms (for debugging)')
24
36
  .option('--quick', 'Quick crawl (depth=1, max-pages=10)')
25
37
  .action(async (url, options) => {
26
38
  await crawlCommand(url, options);
@@ -31,10 +43,36 @@ export function createCrawlCommand() {
31
43
  * Crawl command handler
32
44
  */
33
45
  export async function crawlCommand(url, options = {}) {
34
- const spinner = ora('Initializing crawler...').start();
46
+ // Handle --list-presets
47
+ if (options.listPresets) {
48
+ console.log(getPresetList());
49
+ return;
50
+ }
51
+ // Validate URL is provided when not listing presets
52
+ if (!url) {
53
+ console.error(chalk.red('Error: URL is required when not using --list-presets'));
54
+ console.log(chalk.yellow('\nUsage: qa360 crawl <url> [options]'));
55
+ console.log(chalk.gray('Example: qa360 crawl https://example.com'));
56
+ console.log(chalk.gray('\nRun "qa360 crawl --list-presets" to see all platform types'));
57
+ return;
58
+ }
59
+ const spinner = ora('Initializing universal crawler...').start();
35
60
  try {
36
61
  // Validate URL
37
62
  new URL(url);
63
+ // Determine preset
64
+ let preset = options.preset ? getPreset(options.preset) : detectPresetFromUrl(url);
65
+ if (!preset && !options.preset) {
66
+ spinner.info('No preset specified, using generic preset');
67
+ preset = getAllPresets().find(p => p.id === 'generic');
68
+ }
69
+ else if (options.preset && !preset) {
70
+ spinner.warn(`Preset "${options.preset}" not found, using generic`);
71
+ preset = getAllPresets().find(p => p.id === 'generic');
72
+ }
73
+ if (preset) {
74
+ spinner.text = `Crawling with preset: ${preset.name}`;
75
+ }
38
76
  if (options.quick) {
39
77
  spinner.info('Running quick crawl...');
40
78
  const result = await quickCrawl(url, options.output);
@@ -51,19 +89,32 @@ export async function crawlCommand(url, options = {}) {
51
89
  console.error(chalk.red(result.error));
52
90
  return;
53
91
  }
54
- // Full crawl
55
- spinner.info('Crawling website...');
92
+ // Full crawl with preset support
93
+ spinner.info(`Crawling ${url}...`);
94
+ if (preset) {
95
+ spinner.text = `Using preset: ${preset.name}`;
96
+ }
97
+ // Build crawl options with preset data
56
98
  const crawlOptions = {
57
99
  baseUrl: url,
58
100
  output: options.output,
59
101
  packName: options.name,
60
102
  includeA11y: options.a11y,
103
+ preset,
61
104
  crawl: {
62
105
  maxDepth: options.quick ? 1 : parseInt(options.maxDepth || '2', 10),
63
106
  maxPages: options.quick ? 10 : parseInt(options.maxPages || '20', 10),
64
107
  headless: !options.headed,
65
108
  excludePatterns: options.exclude,
109
+ onlyPatterns: options.only,
66
110
  },
111
+ auth: (options.authEmail || options.authPassword) ? {
112
+ email: options.authEmail,
113
+ password: options.authPassword,
114
+ // Only set URL if explicitly provided - otherwise let crawler intelligently detect the login page
115
+ ...(options.authUrl && { url: options.authUrl })
116
+ } : undefined,
117
+ scenario: options.scenario,
67
118
  };
68
119
  const result = await generatePackFromCrawl(crawlOptions);
69
120
  if (result.success) {
@@ -79,6 +130,14 @@ export async function crawlCommand(url, options = {}) {
79
130
  if (siteMap.metadata.avgLoadTime) {
80
131
  console.log(` Avg page load: ${chalk.gray(siteMap.metadata.avgLoadTime + 'ms')}`);
81
132
  }
133
+ // Show preset info
134
+ if (preset) {
135
+ console.log(chalk.bold('\n Platform Type:'));
136
+ console.log(` ${chalk.cyan(preset.name)} - ${preset.description}`);
137
+ if (preset.scenarios && preset.scenarios.length > 0) {
138
+ console.log(chalk.gray(' Scenarios:'), preset.scenarios.slice(0, 4).join(', '));
139
+ }
140
+ }
82
141
  // Show journeys
83
142
  if (userJourneys.length > 0) {
84
143
  console.log(chalk.bold('\n Generated Journeys:'));
@@ -100,8 +159,9 @@ export async function crawlCommand(url, options = {}) {
100
159
  console.log(chalk.bold('\n✅ Crawl complete!'));
101
160
  console.log(chalk.gray(`\nNext steps:`));
102
161
  console.log(chalk.gray(` 1. Review the generated pack: ${chalk.cyan(options.output || 'pack.yml')}`));
103
- console.log(chalk.gray(` 2. Run tests: ${chalk.cyan('qa360 run ' + (options.output || 'pack.yml'))}`));
104
- console.log(chalk.gray(` 3. Run in headed mode: ${chalk.cyan('qa360 run --headed ' + (options.output || 'pack.yml'))}`));
162
+ console.log(chalk.gray(` 2. Edit test data if needed (credentials, payment info, etc.)`));
163
+ console.log(chalk.gray(` 3. Run tests: ${chalk.cyan('qa360 run ' + (options.output || 'pack.yml'))}`));
164
+ console.log(chalk.gray(` 4. Run in headed mode: ${chalk.cyan('qa360 run --headed ' + (options.output || 'pack.yml'))}`));
105
165
  }
106
166
  else {
107
167
  spinner.fail('Crawl failed');
@@ -115,6 +175,7 @@ export async function crawlCommand(url, options = {}) {
115
175
  if (error instanceof Error && error.message.includes('URL')) {
116
176
  console.log(chalk.yellow('\nUsage: qa360 crawl <url> [options]'));
117
177
  console.log(chalk.gray('Example: qa360 crawl https://example.com'));
178
+ console.log(chalk.gray('\nRun "qa360 crawl --list-presets" to see all platform types'));
118
179
  }
119
180
  }
120
181
  }
@@ -255,7 +255,7 @@ export class QA360Doctor {
255
255
  }
256
256
  async checkProofKeys() {
257
257
  try {
258
- const { ensureProofKeys } = await import('qa360-core');
258
+ const { ensureProofKeys } = await import('../core/index.js');
259
259
  const result = await ensureProofKeys(this.qa360Dir);
260
260
  // Validate result
261
261
  if (!result) {
@@ -300,7 +300,7 @@ export class QA360Doctor {
300
300
  }
301
301
  async checkProofRoundtrip() {
302
302
  try {
303
- const coreModule = await import('qa360-core');
303
+ const coreModule = await import('../core/index.js');
304
304
  const { generateKeys, createProofBundle, verifyProofBundle } = coreModule;
305
305
  // Guard: Verify exports are functions
306
306
  if (typeof generateKeys !== 'function') {
@@ -17,8 +17,8 @@ import chalk from 'chalk';
17
17
  import ora from 'ora';
18
18
  import { join } from 'path';
19
19
  import { existsSync } from 'fs';
20
- import { createBest, createLLMProvider } from 'qa360-core';
21
- import { EvidenceVault } from 'qa360-core';
20
+ import { createBest, createLLMProvider } from '../core/index.js';
21
+ import { EvidenceVault } from '../core/index.js';
22
22
  /**
23
23
  * Static error code database
24
24
  */
@@ -8,7 +8,7 @@ import chalk from 'chalk';
8
8
  import Table from 'cli-table3';
9
9
  import { join } from 'path';
10
10
  import { existsSync } from 'fs';
11
- import { EvidenceVault, FLAKINESS_CATEGORIES } from 'qa360-core';
11
+ import { EvidenceVault, FLAKINESS_CATEGORIES } from '../core/index.js';
12
12
  /**
13
13
  * Get the vault directory path
14
14
  */
@@ -11,7 +11,7 @@ import chalk from 'chalk';
11
11
  import ora from 'ora';
12
12
  import { writeFileSync, mkdirSync, existsSync } from 'fs';
13
13
  import { dirname, resolve } from 'path';
14
- import { generateTests, generateApiTestsFromOpenAPI, generateUiTestsFromUrl, generatePerfTests, generateUnitTests, checkGenerationAvailability, } from 'qa360-core';
14
+ import { generateTests, generateApiTestsFromOpenAPI, generateUiTestsFromUrl, generatePerfTests, generateUnitTests, checkGenerationAvailability, } from '../core/index.js';
15
15
  /**
16
16
  * Create generate commands group
17
17
  */
@@ -7,7 +7,7 @@ import { existsSync, createWriteStream, readFileSync, statSync, readdirSync, unl
7
7
  import { join } from 'path';
8
8
  import chalk from 'chalk';
9
9
  import AdmZip from 'adm-zip';
10
- import { EvidenceVault } from 'qa360-core';
10
+ import { EvidenceVault } from '../core/index.js';
11
11
  export class QA360History {
12
12
  vault;
13
13
  constructor() { }
@@ -4,9 +4,9 @@
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  import chalk from 'chalk';
7
- import { TUIMonitor } from 'qa360-core';
8
- import { DashboardServer, EvidenceVault } from 'qa360-core';
9
- import { Phase3Runner } from 'qa360-core';
7
+ import { TUIMonitor } from '../core/index.js';
8
+ import { DashboardServer, EvidenceVault } from '../core/index.js';
9
+ import { Phase3Runner } from '../core/index.js';
10
10
  import { existsSync } from 'fs';
11
11
  import { join } from 'path';
12
12
  import { loadPackConfig } from '../utils/config.js';
@@ -7,7 +7,7 @@
7
7
  import { Command } from 'commander';
8
8
  import chalk from 'chalk';
9
9
  import ora from 'ora';
10
- import { checkOllamaSetup, OllamaProvider, OllamaError } from 'qa360-core';
10
+ import { checkOllamaSetup, OllamaProvider, OllamaError } from '../core/index.js';
11
11
  import { loadQA360Config, updateQA360Config, getConfigPath } from '../utils/config.js';
12
12
  /**
13
13
  * Test Ollama connection
@@ -9,8 +9,8 @@ import { resolve } from 'path';
9
9
  import chalk from 'chalk';
10
10
  import ora from 'ora';
11
11
  import * as yaml from 'js-yaml';
12
- import { PackValidator, PackMigrator as PackMigratorV1 } from 'qa360-core';
13
- import { PackValidatorV2, PackMigrator, PackLoaderV2 } from 'qa360-core';
12
+ import { PackValidator, PackMigrator as PackMigratorV1 } from '../core/index.js';
13
+ import { PackValidatorV2, PackMigrator, PackLoaderV2 } from '../core/index.js';
14
14
  export class QA360Pack {
15
15
  qa360Dir = resolve(process.cwd(), '.qa360');
16
16
  packPath = resolve(this.qa360Dir, 'pack.yml');
@@ -4,7 +4,7 @@
4
4
  * CLI command for regression detection and analysis.
5
5
  */
6
6
  import { Command } from 'commander';
7
- import { createRegressionDetector, createRegressionTrendAnalyzer } from 'qa360-core';
7
+ import { createRegressionDetector, createRegressionTrendAnalyzer } from '../core/index.js';
8
8
  export const regressionCommand = new Command('regression');
9
9
  regressionCommand.description('Regression detection and analysis');
10
10
  // Detect regressions
@@ -7,7 +7,7 @@ import { Command } from 'commander';
7
7
  import { readFile } from 'fs/promises';
8
8
  import { existsSync } from 'fs';
9
9
  import { resolve } from 'path';
10
- import { TestRepairer, analyzeTestErrors, getQuickFixes } from 'qa360-core';
10
+ import { TestRepairer, analyzeTestErrors, getQuickFixes } from '../core/index.js';
11
11
  /**
12
12
  * Parse test output to extract errors
13
13
  */
@@ -6,7 +6,7 @@
6
6
  import { Command } from 'commander';
7
7
  import chalk from 'chalk';
8
8
  import Table from 'cli-table3';
9
- import { createSmartRetryEngine, RetryStrategy } from 'qa360-core';
9
+ import { createSmartRetryEngine, RetryStrategy } from '../core/index.js';
10
10
  /**
11
11
  * Display retry statistics in a formatted table
12
12
  */
@@ -6,7 +6,7 @@
6
6
  * qa360 run --output ./results
7
7
  * qa360 run --verbose
8
8
  */
9
- import { type Phase3RunResult, type PackConfigV1, type PackConfigV2 } from 'qa360-core';
9
+ import { type Phase3RunResult, type PackConfigV1, type PackConfigV2 } from '../core/index.js';
10
10
  /**
11
11
  * CLI options for run command
12
12
  */
@@ -9,7 +9,7 @@
9
9
  import { existsSync } from 'fs';
10
10
  import { join, resolve, dirname } from 'path';
11
11
  import chalk from 'chalk';
12
- import { Phase3Runner, PackLoaderV2 } from 'qa360-core';
12
+ import { Phase3Runner, PackLoaderV2 } from '../core/index.js';
13
13
  /**
14
14
  * Format gates for display (handles both v1 array and v2 object formats)
15
15
  */
@@ -5,7 +5,7 @@
5
5
  import chalk from 'chalk';
6
6
  import ora from 'ora';
7
7
  import inquirer from 'inquirer';
8
- import { SecretsManager, SecretsCrypto } from 'qa360-core';
8
+ import { SecretsManager, SecretsCrypto } from '../core/index.js';
9
9
  export class QA360Secrets {
10
10
  manager;
11
11
  constructor() {
@@ -3,7 +3,7 @@
3
3
  * Démarre le serveur d'observabilité
4
4
  */
5
5
  import { Command } from 'commander';
6
- import { QA360Server } from 'qa360-core';
6
+ import { QA360Server } from '../core/index.js';
7
7
  export function createServeCommand() {
8
8
  return new Command('serve')
9
9
  .description('Start QA360 observability server')
@@ -4,7 +4,7 @@
4
4
  * CLI command for SLO/SLI management and reporting.
5
5
  */
6
6
  import { Command } from 'commander';
7
- import { SLOTracker, createDefaultSLOConfig, createStrictSLOConfig, createRelaxedSLOConfig, TimeWindows } from 'qa360-core';
7
+ import { SLOTracker, createDefaultSLOConfig, createStrictSLOConfig, createRelaxedSLOConfig, TimeWindows } from '../core/index.js';
8
8
  export const sloCommand = new Command('slo');
9
9
  sloCommand.description('Service Level Objectives and Indicators management');
10
10
  // List all SLOs
@@ -14,7 +14,7 @@ import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
14
14
  import { join, resolve, basename } from 'path';
15
15
  import chalk from 'chalk';
16
16
  // Import from core
17
- import { verifyProofFile, verifyPhase3Proof, VerificationCode, } from 'qa360-core';
17
+ import { verifyProofFile, verifyPhase3Proof, VerificationCode, } from '../core/index.js';
18
18
  /**
19
19
  * Verify a proof file with automatic format detection
20
20
  */
@@ -104,6 +104,8 @@ export declare class PlaywrightNativeApiAdapter {
104
104
  /**
105
105
  * Parse test specification string
106
106
  * Format: "GET /path -> 200" or "POST /api/users -> 201"
107
+ *
108
+ * Handles AI-generated YAML with quotes: '"GET /path -> 200"' -> 'GET /path -> 200'
107
109
  */
108
110
  private parseTestSpec;
109
111
  /**
@@ -243,12 +243,23 @@ export class PlaywrightNativeApiAdapter {
243
243
  /**
244
244
  * Parse test specification string
245
245
  * Format: "GET /path -> 200" or "POST /api/users -> 201"
246
+ *
247
+ * Handles AI-generated YAML with quotes: '"GET /path -> 200"' -> 'GET /path -> 200'
246
248
  */
247
249
  parseTestSpec(spec, baseUrl) {
248
250
  // Validate baseUrl first
249
251
  if (!baseUrl || typeof baseUrl !== 'string') {
250
252
  throw new Error('baseUrl is required in gate configuration. Add "baseUrl: https://your-api.com" to the config section.');
251
253
  }
254
+ // Handle AI-generated YAML with quotes around the entire spec
255
+ // e.g., '"GET /healthz -> 200"' should be parsed as 'GET /healthz -> 200'
256
+ spec = spec.trim();
257
+ if (spec.startsWith('"') && spec.endsWith('"')) {
258
+ spec = spec.slice(1, -1);
259
+ }
260
+ else if (spec.startsWith("'") && spec.endsWith("'")) {
261
+ spec = spec.slice(1, -1);
262
+ }
252
263
  const match = spec.match(/^(\w+)\s+(.+?)\s*->\s*(\d+)$/);
253
264
  if (!match) {
254
265
  throw new Error(`Invalid test spec format: ${spec}. Expected: "METHOD /path -> STATUS"`);
@@ -362,7 +373,15 @@ export class PlaywrightNativeApiAdapter {
362
373
  }
363
374
  }
364
375
  if (target.smoke) {
365
- for (const test of target.smoke) {
376
+ for (let test of target.smoke) {
377
+ // Strip quotes from AI-generated YAML: '"GET /path -> 200"' -> 'GET /path -> 200'
378
+ test = test.trim();
379
+ if (test.startsWith('"') && test.endsWith('"')) {
380
+ test = test.slice(1, -1);
381
+ }
382
+ else if (test.startsWith("'") && test.endsWith("'")) {
383
+ test = test.slice(1, -1);
384
+ }
366
385
  if (!/^\w+\s+.+\s*->\s*\d+$/.test(test)) {
367
386
  errors.push(`Invalid smoke test format: ${test}. Expected: "METHOD /path -> STATUS"`);
368
387
  }
@@ -114,6 +114,19 @@ export declare class PlaywrightUiAdapter {
114
114
  private allScreenshots;
115
115
  private allVideos;
116
116
  private allTraces;
117
+ private lastDialog?;
118
+ private dialogBehavior;
119
+ private dialogPromptValue;
120
+ private openPages;
121
+ private currentPageIndex;
122
+ private globalDialogHandler?;
123
+ private pendingDialogHandler?;
124
+ private siteProfiler;
125
+ private siteAnalysis?;
126
+ private siteProfile?;
127
+ private selectorGenerator;
128
+ private consentHandler;
129
+ private currentFrame?;
117
130
  constructor();
118
131
  /**
119
132
  * Set authentication credentials for requests
@@ -142,6 +155,14 @@ export declare class PlaywrightUiAdapter {
142
155
  * Test single page with accessibility
143
156
  */
144
157
  private testPage;
158
+ /**
159
+ * Test page with actions (for user journeys)
160
+ */
161
+ private testPageWithActions;
162
+ /**
163
+ * Execute a single page action
164
+ */
165
+ private executeAction;
145
166
  /**
146
167
  * Setup browser with all options
147
168
  * Playwright++: Enhanced video/trace recording support