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
package/README.md CHANGED
@@ -1,329 +1,222 @@
1
- # QA360 Proof CLI
1
+ # qa360
2
2
 
3
- **Quality as Cryptographic Proof**
3
+ **QA360 Proof CLI** - Quality as Cryptographic Proof
4
4
 
5
- > **🚀 BETA TESTING (Jan 15 - Feb 26, 2025)** - Join the beta program! See [BETA_TESTING.md](./docs/BETA_TESTING.md)
5
+ [![Version](https://img.shields.io/npm/v/qa360.svg)](https://www.npmjs.com/package/qa360)
6
+ [![License](https://img.shields.io/npm/l/qa360.svg)](https://github.com/xyqotech/qa360/blob/main/LICENSE)
7
+ [![Tests](https://img.shields.io/badge/tests-282%20passing-success)](https://github.com/xyqotech/qa360)
8
+ [![Coverage](https://img.shields.io/badge/coverage-55%25-brightgreen)](https://github.com/xyqotech/qa360)
6
9
 
7
- ![Version](https://img.shields.io/badge/version-2.0.0%20%5Bstable%5D-brightgreen)
8
- ![Tests](https://img.shields.io/badge/tests-2177%20passing-brightgreen)
9
- ![Coverage](https://img.shields.io/badge/coverage-55%25-yellow)
10
- ![CI](https://img.shields.io/badge/CI-passing-brightgreen)
11
- ![Platform](https://img.shields.io/badge/platform-Win%20%7C%20macOS%20%7C%20Linux-lightgrey)
12
- ![License](https://img.shields.io/badge/license-MIT-green)
10
+ > **Official package** published by [xyqotech](https://github.com/xyqotech) with npm provenance signatures
13
11
 
14
- > **Versioning**: QA360 uses Node.js-style versioning (Major.Minor.Patch), e.g., `v2.0.0` (similar to Node.js `v18.20.5`)
12
+ ## Installation
15
13
 
16
- Verify cryptographically signed proof bundles locally, without network dependencies.
17
-
18
- ## 🚀 Install
19
-
20
- ### Installation (npm)
14
+ ### Option 1: Global installation (recommended for regular use)
21
15
 
22
16
  ```bash
23
- # Using npm
17
+ # macOS: use sudo if you get EACCES permission errors
18
+ sudo npm install -g qa360
19
+
20
+ # Or configure npm prefix (one-time setup)
21
+ mkdir -p ~/.npm-global
22
+ npm config set prefix '~/.npm-global'
23
+ echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc
24
+ source ~/.zshrc
24
25
  npm install -g qa360
26
+ ```
25
27
 
26
- # Using pnpm
27
- pnpm add -g qa360
28
+ ### Option 2: Direct usage with npx (no installation needed)
28
29
 
29
- # Using yarn
30
- yarn global add qa360
30
+ ```bash
31
+ # Run directly without installing
32
+ npx qa360@latest run test.yml
33
+ npx qa360@latest verify proof.json
34
+ npx qa360@latest doctor
31
35
  ```
32
36
 
33
- > **Note:** Join the [beta testing program](./docs/BETA_TESTING.md) (Jan 15 - Feb 26, 2025) and help improve QA360!
37
+ **Note**: On first run, Playwright browsers will be automatically downloaded (~100MB). This happens only once.
34
38
 
35
- ## Quick Start
39
+ ## Quick Start
36
40
 
37
- **New to QA360?** → See the [**Quick Start Guide**](./QUICK_START.md) for a 5-minute tutorial!
41
+ ### 1. Generate a test pack
38
42
 
39
43
  ```bash
40
- # Run your first test
41
- qa360 run test-pack.yml
44
+ # Option 1: Interactive mode (recommended for first-time users)
45
+ qa360 init
42
46
 
43
- # View test history
44
- qa360 history list
45
-
46
- # Verify cryptographic proof
47
- qa360 verify .qa360/runs/<run-id>-proof.json
47
+ # Option 2: Use a template directly
48
+ qa360 init --template api-basic --yes
48
49
 
49
- # Check system readiness
50
- qa360 doctor
50
+ # Option 3: Copy an example
51
+ qa360 examples copy api-basic
52
+ qa360 examples list # See all available examples
51
53
  ```
52
54
 
53
- ## 🛠️ Core Commands
55
+ ### 2. Run tests
54
56
 
55
57
  ```bash
56
- # Execute quality gates
57
- qa360 run pack.yaml
58
-
59
- # Verify proof signature
60
- qa360 verify .qa360/runs/proof.json
58
+ qa360 run
59
+ ```
61
60
 
62
- # System diagnostics
63
- qa360 doctor --fix
61
+ ### 3. Verify proof
64
62
 
65
- # Start observability server
66
- qa360 serve --port 3600
63
+ ```bash
64
+ qa360 verify .qa360/runs/
67
65
  ```
68
66
 
69
- ## ✨ Why QA360?
70
-
71
- - **🔒 Local-first** - No network dependencies, 100% offline
72
- - **🔐 Cryptographic trust** - Ed25519 signatures, SHA-256 hashing
73
- - **🌍 Cross-OS verified** - Windows, macOS, Linux
74
- - **⚡ Zero friction** - Auto-generates keys, clear error messages
75
- - **
76
- - **🧠 AI-Native** - Local test generation with Ollama (100% free)
77
- - **🚀 Playwright Native** - 87% faster API tests, 80% less memory
78
- - **📦 Smart Caching** - LRU cache for HTTP responses, 96% faster cache hits
67
+ ## Usage
79
68
 
80
- ## 🏗️ Architecture
69
+ ```bash
70
+ # Generate test pack (interactive)
71
+ qa360 init
81
72
 
82
- QA360 uses a clean monorepo architecture with unified packages and modular design.
73
+ # Generate with template
74
+ qa360 init --template api-basic
75
+ qa360 init --template fullstack
76
+ qa360 init --template security
77
+ qa360 init --template complete
83
78
 
84
- ### Structure
79
+ # Examples commands
80
+ qa360 examples list # List all examples
81
+ qa360 examples copy api-basic # Copy example to qa360.yml
82
+ qa360 examples show fullstack # Preview example content
85
83
 
86
- ```
87
- QA360/
88
- ├── cli/ # CLI interface (@qa360/cli v1.4.5)
89
- │ └── src/commands/ # 22 CLI commands
90
- ├── core/ # Proof generation engine (qa360-core v1.0.1)
91
- │ └── src/adapters/ # 7 test framework adapters
92
- │ ├── playwright-native-api.ts # API testing (87% faster)
93
- │ ├── playwright-ui.ts # UI/E2E + A11y
94
- │ ├── k6-perf.ts # Performance testing
95
- │ ├── semgrep-sast.ts # SAST analysis
96
- │ ├── gitleaks-secrets.ts # Secret scanning
97
- │ ├── osv-deps.ts # Dependency vulnerabilities
98
- │ └── zap-dast.ts # DAST security scanning
99
- ├── packages/mcp/ # MCP server (@qa360/mcp v1.0.0, 23 tools)
100
- ├── docs/ # 54 documentation files
101
- ├── examples/ # 15 example packs
102
- └── tests/ # 100 test files (2177 tests passing)
103
- ```
84
+ # System health check
85
+ qa360 doctor
104
86
 
105
- ### Recent Updates (Phase 1 Complete - January 2025)
106
-
107
- **January 3, 2025** - F8 Smart Retry Module (Vision 2.0):
108
- - ✅ **Smart Retry Engine**: 6 retry strategies (NONE, FIXED, LINEAR, EXPONENTIAL, ADAPTIVE, INTELLIGENT)
109
- - ✅ **Flakiness-Aware Retry**: Integrates with flakiness scoring for intelligent retry decisions
110
- - ✅ **Pattern-Based Retry**: Adjusts strategy based on failure patterns (timing, race conditions, selectors)
111
- - ✅ **Non-Retriable Error Detection**: Automatically identifies unrecoverable errors
112
- - ✅ **Jitter Support**: Avoids thundering herd problem with configurable jitter
113
- - 📊 **Tests**: 48 passing tests
114
-
115
- **January 2, 2025** - Phase 1 Performance Optimizations:
116
- - ✅ **Playwright Native API**: Zero-overhead HTTP testing (87% faster, 80% less memory)
117
- - ✅ **LRU Cache**: Intelligent HTTP response caching (96% faster cache hits)
118
- - ✅ **Watch Mode**: Continuous testing with file monitoring
119
- - ✅ **Benchmark Mode**: Performance testing with detailed statistics
120
- - 📊 **Performance**: See [`docs/PHASE1_PERFORMANCE.md`](./docs/PHASE1_PERFORMANCE.md)
121
-
122
- **December 23, 2024** - Major architecture improvements:
123
- - ✅ **Unified MCP Package**: Merged 2 MCP packages into 1 (`@qa360/mcp v1.2.0`)
124
- - ✅ **Removed Duplicates**: Deleted 4 empty packages + eliminated 10,503 duplicate lines
125
- - ✅ **Clean Structure**: Moved `/api` to `examples/future-api/` (Phase 3)
126
- - ✅ **Build Performance**: +50% faster builds after consolidation
127
-
128
- **See:** [`docs/ARCHITECTURE.md`](./docs/ARCHITECTURE.md) for complete documentation.
129
-
130
- ## 🧠 AI Integration with Ollama
131
-
132
- QA360 is an **AI-native testing platform** using [Ollama](https://ollama.com/) for 100% free, local LLM inference.
133
-
134
- ### Phase 4 Complete ✅ - AI Test Generation
135
-
136
- **January 2, 2025** - AI Test Generation Module:
137
- - ✅ **SourceAnalyzer**: Analyze TypeScript, JavaScript, Python, and Go source code
138
- - Extract functions, classes, imports, and complexity metrics
139
- - Generate test suggestions (unit/integration/e2e)
140
- - Generate API specs from Express/Fastify handlers
141
- - ✅ **PackGenerator**: Convert AI-generated specs to QA360 pack YAML (v2 format)
142
- - ✅ **CodeGenerator**: Generate test code using LLM providers (Ollama, DeepSeek, etc.)
143
- - ✅ **Real Provider Integration**: Tests for Ollama and DeepSeek providers
144
- - 📊 **Test Coverage**: 160 generation tests + 187 real-world tests
145
-
146
- ```typescript
147
- // Example: Analyze source code and generate tests
148
- import { SourceAnalyzer, PackGenerator } from 'qa360/core/generation';
149
-
150
- const analyzer = new SourceAnalyzer();
151
- const analysis = analyzer.analyzeFile('./src/userService.ts');
152
-
153
- // Generate test suggestions
154
- const suggestions = analyzer.generateSuggestions(analysis);
155
- // → [{ type: 'unit', priority: 'high', description: 'Test UserService.createUser', ... }]
156
-
157
- // Generate API spec from handlers
158
- const apiSpec = analyzer.generateApiSpec(analysis);
159
- // → { type: 'api', baseUrl: 'https://...', endpoints: [...] }
160
-
161
- // Convert to pack YAML
162
- const packGenerator = new PackGenerator();
163
- const packYaml = packGenerator.generateFromApiSpec(apiSpec);
164
- ```
87
+ # Run test pack
88
+ qa360 run # Auto-detects qa360.yml
89
+ qa360 run custom-pack.yml # Use specific file
165
90
 
166
- ### Phase 1-3 Complete ✅
91
+ # Verify proof bundle
92
+ qa360 verify .qa360/runs/
93
+ qa360 verify proof.json
167
94
 
168
- | Component | Status | Tests |
169
- |-----------|--------|-------|
170
- | OllamaProvider | ✅ Complete | 41 tests |
171
- | TestDiscoverer | ✅ Complete | 55 tests |
172
- | PackConfig | ✅ Complete | - |
173
- | Auth Module (9 providers) | ✅ Complete | 92 tests |
174
- | Pack Validation | ✅ Complete | 210+ tests |
175
- | **Phase 4 Generation** | ✅ Complete | **160 tests** |
95
+ # View run history
96
+ qa360 history list
97
+ qa360 history show <run-id>
176
98
 
177
- ```bash
178
- # Test Ollama connection
179
- qa360 ollama test
99
+ # Export proof bundle
100
+ qa360 history export <run-id> --bundle proof-bundle.zip
180
101
 
181
- # List installed models
182
- qa360 ollama list
102
+ # Clean up old runs (garbage collection)
103
+ qa360 history gc # Default: keep last 10 runs
104
+ qa360 history gc --keep-last 20 # Keep last 20 runs
105
+ qa360 history gc --dry-run # Preview what would be deleted
183
106
 
184
- # Generate tests (preview)
185
- qa360 ollama generate "create API smoke tests for /users"
107
+ # Pin/unpin runs (pinned runs are never deleted by gc)
108
+ qa360 history pin <run-id>
109
+ qa360 history unpin <run-id>
186
110
 
187
- # Configure Ollama
188
- qa360 ollama config
111
+ # With JSON output (CI-friendly)
112
+ qa360 doctor --json
113
+ qa360 verify proof.json --json
114
+ qa360 history list --json
189
115
  ```
190
116
 
191
- **See:** [`docs/OLLAMA_REFACTORING_ROADMAP.md`](./docs/OLLAMA_REFACTORING_ROADMAP.md) for the complete 10-week roadmap.
192
-
193
- ## 📋 Development Phases
194
-
195
- QA360 Core is developed in structured phases:
196
-
197
- ### Core Platform
198
- - **Phase 0**: ✅ Initialization & Structure
199
- - **Phase 1**: ✅ Runner CLI "zero friction"
200
- - **Phase 2**: ✅ Pack configuration + encrypted secrets
201
- - **Phase 3**: ✅ Declarative hooks + Docker provisioning
202
- - **Phase 4**: ✅ OOTB Adapters (Playwright, k6, Semgrep, ZAP, etc.)
203
- - **Phase 5**: ✅ Health/Diag/Metrics endpoints
204
- - **Phase 6**: ✅ Evidence Vault + SQLite WAL history
205
- - **Phase 7**: ✅ Complete Proof Bundle
117
+ ## Available Templates
206
118
 
207
- ### AI Integration (Ollama)
208
- - **AI Phase 1**: ✅ Ollama Provider + TestDiscoverer
209
- - **AI Phase 2**: Auth Module (9 providers)
210
- - **AI Phase 3**: Pack Validation
211
- - **AI Phase 4**: AI Test Generation (SourceAnalyzer, PackGenerator, 160 tests)
212
- - **AI Phase 5**: Integration & Polish (in progress)
119
+ | Template | Description | Gates |
120
+ |----------|-------------|-------|
121
+ | **api-basic** | Simple API smoke tests | api_smoke |
122
+ | **ui-basic** | Basic UI/E2E tests | ui |
123
+ | **fullstack** | API + UI + Performance | api_smoke, ui, perf |
124
+ | **security** | Security testing suite | sast, dast, secrets, deps |
125
+ | **accessibility** | Accessibility testing | ui, a11y |
126
+ | **complete** | All quality gates | All (8 gates) |
213
127
 
214
- ### Future Roadmap
215
- - **Phase 8**: ✅ TUI & Dashboard (COMPLETE)
216
- - **Phase 9**: ⏳ Parallel CI → consolidated proof
128
+ ## Example Files
217
129
 
218
- ## 🚢 npm Publication Workflow (CRITICAL)
130
+ Pre-made examples are included in the package:
219
131
 
220
- > **⚠️ WARNING: Publishing broken packages damages user trust permanently.**
132
+ ```bash
133
+ # List examples
134
+ ls examples/
221
135
 
222
- ### Mandatory Pre-Publication Checklist
136
+ # Copy an example
137
+ cp examples/api-basic.yml qa360.yml
223
138
 
224
- **NEVER skip these steps - versions 2.2.4 and 2.2.5 were broken due to skipping these:**
139
+ # Run example directly
140
+ qa360 run examples/api-basic.yml
141
+ ```
225
142
 
226
- 1. ✅ **CI MUST be green** on both `develop` AND `main`
227
- 2. ✅ **Run bundle script**: `cd cli && bash scripts/bundle-for-npm.sh`
228
- 3. ✅ **Test with npm pack**: `npm pack && tar -tzf qa360-*.tgz | grep "cli/dist/core/index.js"`
229
- 4. ✅ **Test installation**: `cd /tmp && npm install -g ./qa360-*.tgz && qa360 --version`
230
- 5. ✅ **Get EXPLICIT authorization** from maintainer before publishing
231
- 6. ✅ **Publish from MAIN branch only** - NEVER from `develop`
143
+ ## Commands
232
144
 
233
- ### The Fatal Mistakes (DO NOT REPEAT)
145
+ | Command | Description |
146
+ |---------|-------------|
147
+ | `init` | Generate test pack interactively |
148
+ | `examples` | Manage example templates (list, copy, show) |
149
+ | `run` | Execute test pack |
150
+ | `verify` | Verify cryptographic proof bundles |
151
+ | `doctor` | Check system health, auto-fix issues |
152
+ | `history` | View run history and results |
153
+ | `report` | Generate reports |
154
+ | `secrets` | Manage encrypted secrets |
155
+ | `pack` | Pack validation and linting |
234
156
 
235
- | Version | Mistake | Result |
236
- |---------|---------|--------|
237
- | **2.2.4** | Published without CI check | CI was failing - broken package |
238
- | **2.2.5** | Published without bundle script | Missing `cli/dist/core/` - completely broken |
239
- | **2.2.6** | Followed full checklist | ✅ Working package |
157
+ ### History Commands
240
158
 
241
- ### Correct Publication Workflow
159
+ The `history` command provides comprehensive management of test run history stored in the Evidence Vault:
242
160
 
243
- ```bash
244
- # 1. Verify CI is green
245
- gh run list --branch develop --limit 1
246
- gh run list --branch main --limit 1
247
-
248
- # 2. Merge develop to main
249
- git checkout main
250
- git merge develop --no-ff
251
- git push origin main
252
-
253
- # 3. Wait for CI to pass on main
254
- gh run watch --branch main
255
-
256
- # 4. CREATE THE BUNDLE (THIS IS CRITICAL)
257
- cd cli
258
- bash scripts/bundle-for-npm.sh
259
- cd ..
260
-
261
- # 5. Verify bundle was created
262
- ls -la cli/dist/core/index.js # Must exist
263
- grep "from '../core/index.js'" cli/dist/commands/ai.js # Must show this, NOT qa360-core
264
-
265
- # 6. Test the package locally
266
- npm pack
267
- tar -tzf qa360-*.tgz | grep "cli/dist/core/index.js" # Must exist
268
- cd /tmp && npm install -g /path/to/qa360-*.tgz && qa360 --version
269
-
270
- # 7. ONLY AFTER ALL TESTS PASS: Get authorization, then publish
271
- npm version patch # or minor/major
272
- npm publish --access public
273
- git push origin main --tags
274
-
275
- # 8. ALWAYS return to develop
276
- git checkout develop
277
- ```
161
+ | Subcommand | Description | Example |
162
+ |------------|-------------|---------|
163
+ | `list` | List recent test runs | `qa360 history list --limit 20` |
164
+ | `show <run-id>` | Show detailed run information | `qa360 history show abc123` |
165
+ | `diff <id1> <id2>` | Compare two test runs | `qa360 history diff abc123 def456` |
166
+ | `trend` | Show trust score trends | `qa360 history trend --window 30` |
167
+ | `export <run-id>` | Export run as ZIP bundle | `qa360 history export abc123 --bundle proof.zip` |
168
+ | `gc` | Garbage collect old runs | `qa360 history gc --keep-last 10` |
169
+ | `pin <run-id>` | Pin run (protect from gc) | `qa360 history pin abc123` |
170
+ | `unpin <run-id>` | Unpin run | `qa360 history unpin abc123` |
278
171
 
279
- ### Why the Bundle Script Is Critical
172
+ #### Export Bundle Contents
280
173
 
281
- The bundle script (`cli/scripts/bundle-for-npm.sh`) does:
282
- 1. Copies `core/src/*` into `cli/src/core/`
283
- 2. Changes imports from `'qa360-core'` to `'../core/index.js'`
284
- 3. Builds TypeScript → `cli/dist/`
285
- 4. **Result**: `cli/dist/core/` contains the bundled core engine
174
+ When exporting a run with `qa360 history export <run-id> --bundle proof.zip`, the ZIP contains:
286
175
 
287
- **Without this step**: The CLI imports `'qa360-core'` which doesn't exist in the npm package → **COMPLETELY BROKEN**
176
+ - `proof.json` - Cryptographically signed proof document
177
+ - `report.pdf` - Human-readable PDF report (if generated)
178
+ - `run.json` - Complete run details (gates, findings, artifacts)
179
+ - `artifacts/` - All test artifacts (screenshots, logs, etc.)
180
+ - `VERIFICATION.json` - Verification instructions and metadata
288
181
 
289
- ### Recovery from Broken Publication
182
+ #### Garbage Collection
290
183
 
291
- If a broken version is published:
292
- 1. **Fix the issue** on `develop`
293
- 2. **Follow the FULL checklist** above
294
- 3. **Publish a patch version** (e.g., 2.2.5 → 2.2.6)
295
- 4. **Add a warning** in CHANGELOG about broken versions
184
+ The `gc` command removes old test runs and orphaned artifacts to free disk space:
296
185
 
297
- ## 🛠️ Technology Stack
186
+ ```bash
187
+ # Preview what would be deleted (dry-run)
188
+ qa360 history gc --dry-run
298
189
 
299
- - **Runtime**: Node.js 18+ with TypeScript 5+
300
- - **Storage**: SQLite WAL for evidence vault
301
- - **Crypto**: Ed25519 signatures for proof verification
302
- - **AI**: Ollama for local LLM inference (100% free)
303
- - **PDF**: Puppeteer for report generation
304
- - **Testing**: Vitest for unit/integration tests
190
+ # Keep last 20 runs, delete older ones
191
+ qa360 history gc --keep-last 20
305
192
 
306
- ## 📚 Documentation
193
+ # Default behavior (keeps last 10 unpinned runs)
194
+ qa360 history gc
195
+ ```
307
196
 
308
- - [Quick Start Guide](./QUICK_START.md) - 5-minute tutorial
309
- - [User Guide](./docs/USER_GUIDE.md) - Complete documentation
310
- - [Beta Testing Plan](./docs/BETA_TESTING_PLAN.md) - User testing program
311
- - [Contributing Guide](./CONTRIBUTING.md)
312
- - [Changelog](./CHANGELOG.md)
313
- - [Code Owners](./CODEOWNERS)
197
+ **Important**: Pinned runs are NEVER deleted by garbage collection. Use `qa360 history pin <run-id>` to protect important runs.
314
198
 
315
- ## 🤝 Contributing
199
+ ## Exit Codes
316
200
 
317
- QA360 Core aims to become the **global standard for portable software quality proof**.
201
+ | Code | Meaning |
202
+ |------|---------|
203
+ | 0 | Success |
204
+ | 1 | Verification failed |
205
+ | 2 | File not found |
206
+ | 3 | Invalid schema |
207
+ | 4 | Missing key |
208
+ | 5 | Internal error |
318
209
 
319
- Every contribution should advance this mission with **simplicity, auditability, and elegance**.
210
+ ## Requirements
320
211
 
321
- See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
212
+ - Node.js >= 18.0.0
213
+ - npm or pnpm
322
214
 
323
- ## 📄 License
215
+ ## Documentation
324
216
 
325
- MIT License - see [LICENSE](./LICENSE) for details.
217
+ - [Quick Start](https://github.com/xyqotech/qa360/blob/main/docs/quickstart-5min.md)
218
+ - [Full Documentation](https://github.com/xyqotech/qa360/blob/main/docs/README.md)
326
219
 
327
- ---
220
+ ## License
328
221
 
329
- **QA360 Core**: Making quality **executable, measurable, and legally provable**.
222
+ MIT
@@ -10,7 +10,7 @@ import { Command } from 'commander';
10
10
  import chalk from 'chalk';
11
11
  import ora from 'ora';
12
12
  import Table from 'cli-table3';
13
- import { createBest, getProviderInfo, getProviderStatus, createLLMProvider, DeepSeekProvider, DeepSeekError, OllamaProvider, OllamaError, OpenAIProvider, OpenAIError, AnthropicProvider, AnthropicError } from 'qa360-core';
13
+ import { createBest, getProviderInfo, getProviderStatus, createLLMProvider, DeepSeekProvider, DeepSeekError, OllamaProvider, OllamaError, OpenAIProvider, OpenAIError, AnthropicProvider, AnthropicError } from '../core/index.js';
14
14
  /**
15
15
  * List all available AI providers
16
16
  */
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { Command } from 'commander';
7
7
  import { existsSync } from 'fs';
8
- import { CoverageCollector, CoverageAnalyzer, parseCoverageThreshold, formatCoverageThreshold } from 'qa360-core';
8
+ import { CoverageCollector, CoverageAnalyzer, parseCoverageThreshold, formatCoverageThreshold } from '../core/index.js';
9
9
  export const coverageCommand = new Command('coverage');
10
10
  coverageCommand.description('Coverage analytics and reporting');
11
11
  // Show coverage for a specific file or run
@@ -1,7 +1,8 @@
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
  /**
@@ -14,11 +15,21 @@ export declare function createCrawlCommand(): Command;
14
15
  export declare function crawlCommand(url: string, options?: {
15
16
  output?: string;
16
17
  name?: string;
18
+ preset?: string;
19
+ listPresets?: boolean;
17
20
  maxDepth?: string;
18
21
  maxPages?: string;
19
22
  headed?: boolean;
20
23
  a11y?: boolean;
21
24
  exclude?: string[];
25
+ only?: string[];
26
+ scenario?: string;
27
+ authEmail?: string;
28
+ authPassword?: string;
29
+ authUrl?: string;
30
+ testData?: string;
31
+ viewport?: string;
32
+ slowMo?: string;
22
33
  quick?: boolean;
23
34
  }): Promise<void>;
24
35
  export default createCrawlCommand;