qa360 2.1.7 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (906) hide show
  1. package/.BETA_TESTING_FEEDBACK.md +256 -0
  2. package/.claude/settings.local.json +154 -0
  3. package/.editorconfig +21 -0
  4. package/.github/CODEOWNERS +23 -0
  5. package/.github/ISSUE_TEMPLATE/bug_report.yml +108 -0
  6. package/.github/ISSUE_TEMPLATE/feedback_dx.yml +121 -0
  7. package/.github/dependabot.yml +35 -0
  8. package/.github/workflows/mcp-dx.yml +106 -0
  9. package/.github/workflows/release.yml +26 -0
  10. package/.github/workflows/test.yml +93 -0
  11. package/.nvmrc +1 -0
  12. package/.qa360-artifacts/.gitkeep +0 -0
  13. package/.qa360-artifacts/baselines/.gitkeep +0 -0
  14. package/.qa360-artifacts/cache/.gitkeep +0 -0
  15. package/.qa360-artifacts/reports/.gitkeep +0 -0
  16. package/.qa360-artifacts/screenshots/.gitkeep +0 -0
  17. package/.qa360-baselines/www_xyqo_ai.baseline.json +33 -0
  18. package/CHANGELOG.md +234 -0
  19. package/CODEOWNERS +43 -0
  20. package/CONTRIBUTING.md +273 -0
  21. package/NOVICE_USER_GUIDE.md +272 -0
  22. package/QUICK_START.md +191 -0
  23. package/README.md +191 -163
  24. package/adapters/README.md +46 -0
  25. package/check-branches.sh +32 -0
  26. package/cli/.qa360/keys/ed25519.key +1 -0
  27. package/cli/.qa360/keys/ed25519.pub +1 -0
  28. package/cli/CHANGELOG.md +84 -0
  29. package/cli/LICENSE +24 -0
  30. package/cli/README.md +222 -0
  31. package/cli/examples/README.md +160 -0
  32. package/cli/package.json +76 -0
  33. package/cli/scripts/bundle-for-npm.sh +51 -0
  34. package/cli/scripts/validate-package.js +116 -0
  35. package/cli/src/__tests__/commands/doctor.test.ts +108 -0
  36. package/cli/src/__tests__/index.test.ts +15 -0
  37. package/cli/src/cli-minimal.ts +44 -0
  38. package/cli/src/commands/__tests__/crawl.test.ts +412 -0
  39. package/cli/src/commands/__tests__/doctor-qa360-home.test.ts +156 -0
  40. package/cli/src/commands/__tests__/e2e-ui-tests.test.ts +494 -0
  41. package/cli/src/commands/__tests__/e2e.test.ts +187 -0
  42. package/cli/src/commands/__tests__/flakiness.test.ts +528 -0
  43. package/cli/src/commands/__tests__/generate.test.ts +507 -0
  44. package/cli/src/commands/__tests__/history.integration.test.ts +358 -0
  45. package/cli/src/commands/__tests__/history.test.ts +433 -0
  46. package/cli/src/commands/__tests__/monitor-realworld.test.ts +199 -0
  47. package/cli/src/commands/__tests__/monitor.test.ts +81 -0
  48. package/cli/src/commands/__tests__/ollama.test.ts +529 -0
  49. package/cli/src/commands/__tests__/repair.test.ts +225 -0
  50. package/cli/src/commands/__tests__/report.integration.test.ts +167 -0
  51. package/cli/src/commands/__tests__/report.test.ts +294 -0
  52. package/cli/src/commands/__tests__/report.vitest.ts +288 -0
  53. package/cli/src/commands/__tests__/retry.test.ts +78 -0
  54. package/cli/src/commands/__tests__/run.integration.test.ts +240 -0
  55. package/cli/src/commands/__tests__/run.test.ts +346 -0
  56. package/cli/src/commands/__tests__/run.vitest.ts +301 -0
  57. package/cli/src/commands/__tests__/secrets.test.ts +114 -0
  58. package/cli/src/commands/__tests__/serve.test.ts +80 -0
  59. package/cli/src/commands/__tests__/verify.test.ts +103 -0
  60. package/cli/src/commands/ai.ts +702 -0
  61. package/cli/src/commands/ask.ts +678 -0
  62. package/cli/src/commands/coverage.ts +305 -0
  63. package/cli/src/commands/crawl.ts +155 -0
  64. package/cli/src/commands/doctor.ts +610 -0
  65. package/cli/src/commands/examples.ts +248 -0
  66. package/cli/src/commands/explain.ts +710 -0
  67. package/cli/src/commands/flakiness.ts +560 -0
  68. package/cli/src/commands/generate.ts +566 -0
  69. package/cli/src/commands/history.ts +914 -0
  70. package/cli/src/commands/init.ts +777 -0
  71. package/cli/src/commands/monitor.ts +270 -0
  72. package/cli/src/commands/ollama.ts +337 -0
  73. package/cli/src/commands/pack.ts +497 -0
  74. package/cli/src/commands/regression.ts +400 -0
  75. package/cli/src/commands/repair.ts +356 -0
  76. package/cli/src/commands/report.ts +463 -0
  77. package/cli/src/commands/retry.ts +380 -0
  78. package/cli/src/commands/run.ts +218 -0
  79. package/cli/src/commands/scan.ts +177 -0
  80. package/cli/src/commands/secrets.ts +340 -0
  81. package/cli/src/commands/serve.ts +194 -0
  82. package/cli/src/commands/slo.ts +387 -0
  83. package/cli/src/commands/verify-temp-note.md +11 -0
  84. package/cli/src/commands/verify.ts +322 -0
  85. package/cli/src/generators/index.ts +6 -0
  86. package/cli/src/generators/json-reporter.ts +15 -0
  87. package/cli/src/generators/test-generator.ts +90 -0
  88. package/cli/src/index.ts +289 -0
  89. package/cli/src/scanners/dom-scanner.ts +360 -0
  90. package/cli/src/scanners/index.ts +5 -0
  91. package/cli/src/types/scan.ts +84 -0
  92. package/cli/src/utils/config.ts +145 -0
  93. package/cli/tsconfig.bundle.json +12 -0
  94. package/cli/tsconfig.json +23 -0
  95. package/cli/vitest.config.ts +59 -0
  96. package/core/LICENSE +24 -0
  97. package/core/README.md +64 -0
  98. package/core/package.json +81 -0
  99. package/core/src/__tests__/adapters-contract/adapters-contract.test.md +156 -0
  100. package/core/src/__tests__/index.test.ts +31 -0
  101. package/core/src/__tests__/integration/phase3.test.ts +405 -0
  102. package/core/src/__tests__/pack/validator.test.ts +312 -0
  103. package/core/src/__tests__/secrets/crypto.test.ts +190 -0
  104. package/core/src/__tests__/secrets/manager.test.ts +316 -0
  105. package/core/src/__tests__/security/redactor-phase3.test.ts +233 -0
  106. package/core/src/__tests__/serve/health-checker.test.ts +155 -0
  107. package/core/src/__tests__/serve/process-manager.test.ts +213 -0
  108. package/core/src/__tests__/serve/server.test.ts +103 -0
  109. package/core/src/__tests__/vault/cas.test.ts +178 -0
  110. package/core/src/__tests__/vault/vault.test.ts +296 -0
  111. package/core/src/adapters/__tests__/fixtures/jest-coverage.json +8 -0
  112. package/core/src/adapters/__tests__/fixtures/jest-results.json +41 -0
  113. package/core/src/adapters/__tests__/fixtures/pytest-junit.xml +16 -0
  114. package/core/src/adapters/__tests__/fixtures/vitest-coverage.json +8 -0
  115. package/core/src/adapters/__tests__/fixtures/vitest-results.json +50 -0
  116. package/core/src/adapters/__tests__/gitleaks-secrets.test.ts +452 -0
  117. package/core/src/adapters/__tests__/jest-adapter.test.ts +276 -0
  118. package/core/src/adapters/__tests__/k6-perf.test.ts +538 -0
  119. package/core/src/adapters/__tests__/osv-deps.test.ts +471 -0
  120. package/core/src/adapters/__tests__/playwright-native-api.test.ts +792 -0
  121. package/core/src/adapters/__tests__/playwright-ui-e2e.test.ts +431 -0
  122. package/core/src/adapters/__tests__/playwright-ui.test.ts +1073 -0
  123. package/core/src/adapters/__tests__/pytest-adapter.test.ts +207 -0
  124. package/core/src/adapters/__tests__/semgrep-sast.test.ts +436 -0
  125. package/core/src/adapters/__tests__/vitest-adapter.test.ts +208 -0
  126. package/core/src/adapters/__tests__/zap-dast.test.ts +453 -0
  127. package/core/src/adapters/gitleaks-secrets.ts +521 -0
  128. package/core/src/adapters/jest-adapter.ts +306 -0
  129. package/core/src/adapters/k6-perf.ts +479 -0
  130. package/core/src/adapters/osv-deps.ts +467 -0
  131. package/core/src/adapters/playwright-native-adapter.ts +472 -0
  132. package/core/src/adapters/playwright-native-api.ts +619 -0
  133. package/core/src/adapters/playwright-ui.ts +1088 -0
  134. package/core/src/adapters/pytest-adapter.ts +472 -0
  135. package/core/src/adapters/semgrep-sast.ts +410 -0
  136. package/core/src/adapters/unit-test-types.ts +106 -0
  137. package/core/src/adapters/vitest-adapter.ts +295 -0
  138. package/core/src/adapters/zap-dast.ts +551 -0
  139. package/core/src/ai/__tests__/deepseek-provider.test.ts +586 -0
  140. package/core/src/ai/__tests__/ollama-provider.test.ts +641 -0
  141. package/core/src/ai/anthropic-provider.ts +262 -0
  142. package/core/src/ai/deepseek-provider.ts +315 -0
  143. package/core/src/ai/index.ts +87 -0
  144. package/core/src/ai/llm-client.ts +52 -0
  145. package/core/src/ai/mock-provider.ts +146 -0
  146. package/core/src/ai/ollama-provider.ts +269 -0
  147. package/core/src/ai/openai-provider.ts +240 -0
  148. package/core/src/ai/provider-factory.ts +408 -0
  149. package/core/src/artifacts/README.md +78 -0
  150. package/core/src/artifacts/index.ts +16 -0
  151. package/core/src/artifacts/ui-artifacts.ts +412 -0
  152. package/core/src/assertions/__tests__/engine.test.ts +360 -0
  153. package/core/src/assertions/engine.ts +577 -0
  154. package/core/src/assertions/index.ts +13 -0
  155. package/core/src/assertions/types.ts +229 -0
  156. package/core/src/auth/__tests__/api-key-provider.test.ts +282 -0
  157. package/core/src/auth/__tests__/auth-manager.test.ts +430 -0
  158. package/core/src/auth/__tests__/basic-auth-provider.test.ts +364 -0
  159. package/core/src/auth/__tests__/cloud-providers.test.ts +751 -0
  160. package/core/src/auth/__tests__/jwt-provider.test.ts +400 -0
  161. package/core/src/auth/__tests__/oauth2-provider.test.ts +383 -0
  162. package/core/src/auth/__tests__/totp-provider.test.ts +294 -0
  163. package/core/src/auth/__tests__/ui-login-provider.test.ts +323 -0
  164. package/core/src/auth/api-key-provider.ts +75 -0
  165. package/core/src/auth/aws-iam-provider.ts +212 -0
  166. package/core/src/auth/azure-ad-provider.ts +126 -0
  167. package/core/src/auth/basic-auth-provider.ts +133 -0
  168. package/core/src/auth/gcp-adc-provider.ts +146 -0
  169. package/core/src/auth/index.ts +342 -0
  170. package/core/src/auth/jwt-provider.ts +193 -0
  171. package/core/src/auth/manager.ts +281 -0
  172. package/core/src/auth/oauth2-provider.ts +141 -0
  173. package/core/src/auth/totp-provider.ts +163 -0
  174. package/core/src/auth/ui-login-provider.ts +242 -0
  175. package/core/src/cache/__tests__/lru-cache.test.ts +564 -0
  176. package/core/src/cache/index.ts +13 -0
  177. package/core/src/cache/lru-cache.ts +536 -0
  178. package/core/src/crawler/__tests__/journey-generator.test.ts +344 -0
  179. package/core/src/crawler/__tests__/selector-generator.test.ts +211 -0
  180. package/core/src/crawler/index.ts +335 -0
  181. package/core/src/crawler/journey-generator.ts +471 -0
  182. package/core/src/crawler/page-analyzer.ts +857 -0
  183. package/core/src/crawler/selector-generator.ts +280 -0
  184. package/core/src/crawler/types.ts +475 -0
  185. package/core/src/dashboard/__tests__/real-world.test.ts +430 -0
  186. package/core/src/dashboard/__tests__/server.test.ts +283 -0
  187. package/core/src/dashboard/__tests__/types.test.ts +208 -0
  188. package/core/src/dashboard/assets.ts +692 -0
  189. package/core/src/dashboard/index.ts +17 -0
  190. package/core/src/dashboard/server.ts +401 -0
  191. package/core/src/dashboard/types.ts +78 -0
  192. package/core/src/discoverer/__tests__/test-discoverer.test.ts +444 -0
  193. package/core/src/discoverer/index.ts +374 -0
  194. package/core/src/fixtures/__tests__/loader.test.ts +246 -0
  195. package/core/src/fixtures/__tests__/resolver.test.ts +334 -0
  196. package/core/src/fixtures/index.ts +9 -0
  197. package/core/src/fixtures/loader.ts +189 -0
  198. package/core/src/fixtures/resolver.ts +221 -0
  199. package/core/src/fixtures/types.ts +86 -0
  200. package/core/src/flakiness/__tests__/flakiness.test.ts +554 -0
  201. package/core/src/flakiness/index.ts +536 -0
  202. package/core/src/generation/__tests__/code-formatter.test.ts +170 -0
  203. package/core/src/generation/__tests__/code-generator-contract.test.ts +207 -0
  204. package/core/src/generation/__tests__/code-generator.test.ts +586 -0
  205. package/core/src/generation/__tests__/crawler-pack-generator.test.ts +479 -0
  206. package/core/src/generation/__tests__/generation-e2e-b2bshop.test.ts +718 -0
  207. package/core/src/generation/__tests__/generation-integration.test.ts +655 -0
  208. package/core/src/generation/__tests__/pack-generator.test.ts +408 -0
  209. package/core/src/generation/__tests__/prompt-builder.test.ts +200 -0
  210. package/core/src/generation/__tests__/real-provider-integration.test.ts +414 -0
  211. package/core/src/generation/__tests__/source-analyzer.test.ts +774 -0
  212. package/core/src/generation/__tests__/test-optimizer.test.ts +255 -0
  213. package/core/src/generation/code-formatter.ts +408 -0
  214. package/core/src/generation/code-generator.ts +470 -0
  215. package/core/src/generation/crawler-pack-generator.ts +289 -0
  216. package/core/src/generation/generator.ts +113 -0
  217. package/core/src/generation/index.ts +59 -0
  218. package/core/src/generation/pack-generator.ts +527 -0
  219. package/core/src/generation/prompt-builder.ts +772 -0
  220. package/core/src/generation/source-analyzer.ts +830 -0
  221. package/core/src/generation/test-optimizer.ts +474 -0
  222. package/core/src/generation/types.ts +217 -0
  223. package/core/src/hooks/__tests__/compose.test.ts +636 -0
  224. package/core/src/hooks/__tests__/runner.test.ts +478 -0
  225. package/core/src/hooks/compose.ts +268 -0
  226. package/core/src/hooks/runner.ts +364 -0
  227. package/core/src/index.ts +255 -0
  228. package/core/src/pack/__tests__/migrator.test.ts +594 -0
  229. package/core/src/pack/__tests__/validator.test.ts +759 -0
  230. package/core/src/pack/migrator.ts +353 -0
  231. package/core/src/pack/validator.ts +359 -0
  232. package/core/src/pack-v2/__tests__/loader.test.ts +533 -0
  233. package/core/src/pack-v2/__tests__/migrator.test.ts +455 -0
  234. package/core/src/pack-v2/__tests__/validator.test.ts +609 -0
  235. package/core/src/pack-v2/index.ts +41 -0
  236. package/core/src/pack-v2/loader.ts +358 -0
  237. package/core/src/pack-v2/migrator.ts +540 -0
  238. package/core/src/pack-v2/validator.ts +726 -0
  239. package/core/src/parallel/README.md +143 -0
  240. package/core/src/parallel/index.ts +16 -0
  241. package/core/src/parallel/parallel-runner.ts +282 -0
  242. package/core/src/pom/__tests__/loader.test.ts +378 -0
  243. package/core/src/pom/base-page.ts +425 -0
  244. package/core/src/pom/index.ts +45 -0
  245. package/core/src/pom/loader.ts +480 -0
  246. package/core/src/pom/types.ts +146 -0
  247. package/core/src/proof/__tests__/proof-roundtrip.test.ts +149 -0
  248. package/core/src/proof/__tests__/schema-validation-manual.mjs +211 -0
  249. package/core/src/proof/__tests__/schema-validation.test.ts +336 -0
  250. package/core/src/proof/__tests__/signer.test.ts +486 -0
  251. package/core/src/proof/__tests__/temporal-regression.test.ts +537 -0
  252. package/core/src/proof/__tests__/verifier-advanced.test.ts +588 -0
  253. package/core/src/proof/__tests__/verifier.test.ts +413 -0
  254. package/core/src/proof/bundle.ts +290 -0
  255. package/core/src/proof/canonicalize.ts +116 -0
  256. package/core/src/proof/index.ts +74 -0
  257. package/core/src/proof/schema.ts +285 -0
  258. package/core/src/proof/signer.ts +293 -0
  259. package/core/src/proof/verifier.ts +380 -0
  260. package/core/src/regression/__tests__/detector.test.ts +396 -0
  261. package/core/src/regression/__tests__/trend-analyzer.test.ts +300 -0
  262. package/core/src/regression/detector.ts +629 -0
  263. package/core/src/regression/index.ts +34 -0
  264. package/core/src/regression/trend-analyzer.ts +468 -0
  265. package/core/src/regression/types.ts +295 -0
  266. package/core/src/regression/vault.ts +419 -0
  267. package/core/src/repair/__tests__/repairer.test.ts +572 -0
  268. package/core/src/repair/__tests__/types.test.ts +302 -0
  269. package/core/src/repair/engine/__tests__/fixer.test.ts +482 -0
  270. package/core/src/repair/engine/__tests__/suggestion-engine.test.ts +395 -0
  271. package/core/src/repair/engine/fixer.ts +271 -0
  272. package/core/src/repair/engine/suggestion-engine.ts +234 -0
  273. package/core/src/repair/index.ts +53 -0
  274. package/core/src/repair/repairer.ts +376 -0
  275. package/core/src/repair/types.ts +119 -0
  276. package/core/src/repair/utils/__tests__/error-analyzer.test.ts +454 -0
  277. package/core/src/repair/utils/error-analyzer.ts +308 -0
  278. package/core/src/reporting/README.md +144 -0
  279. package/core/src/reporting/html-reporter.ts +835 -0
  280. package/core/src/reporting/index.ts +16 -0
  281. package/core/src/retry/README.md +192 -0
  282. package/core/src/retry/__tests__/flakiness-integration.test.ts +475 -0
  283. package/core/src/retry/__tests__/retry-engine.test.ts +424 -0
  284. package/core/src/retry/flakiness-integration.ts +267 -0
  285. package/core/src/retry/index.ts +48 -0
  286. package/core/src/retry/retry-engine.ts +368 -0
  287. package/core/src/retry/types.ts +208 -0
  288. package/core/src/retry/vault.ts +413 -0
  289. package/core/src/runner/__tests__/flakiness-integration.test.ts +566 -0
  290. package/core/src/runner/__tests__/phase3-e2e-b2bshop.test.ts +218 -0
  291. package/core/src/runner/__tests__/phase3-e2e-reqres.test.ts +199 -0
  292. package/core/src/runner/__tests__/phase3-runner.test.ts +1118 -0
  293. package/core/src/runner/e2e-helpers.ts +216 -0
  294. package/core/src/runner/phase3-runner.ts +1236 -0
  295. package/core/src/schemas/gherkin-report.json +122 -0
  296. package/core/src/secrets/__tests__/crypto.test.ts +180 -0
  297. package/core/src/secrets/crypto.ts +289 -0
  298. package/core/src/secrets/manager.ts +272 -0
  299. package/core/src/security/__tests__/hardening.test.ts +480 -0
  300. package/core/src/security/redaction-patterns-extended.ts +278 -0
  301. package/core/src/security/redactor.ts +326 -0
  302. package/core/src/self-healing/assertion-healer.ts +485 -0
  303. package/core/src/self-healing/engine.ts +626 -0
  304. package/core/src/self-healing/index.ts +33 -0
  305. package/core/src/self-healing/selector-healer.ts +488 -0
  306. package/core/src/self-healing/types.ts +193 -0
  307. package/core/src/serve/diagnostics-collector.ts +201 -0
  308. package/core/src/serve/health-checker.ts +274 -0
  309. package/core/src/serve/index.ts +9 -0
  310. package/core/src/serve/metrics-collector.ts +386 -0
  311. package/core/src/serve/process-manager.ts +265 -0
  312. package/core/src/serve/server.ts +230 -0
  313. package/core/src/slo/config.ts +408 -0
  314. package/core/src/slo/index.ts +68 -0
  315. package/core/src/slo/sli-calculator.ts +474 -0
  316. package/core/src/slo/slo-tracker.ts +481 -0
  317. package/core/src/slo/types.ts +408 -0
  318. package/core/src/slo/vault.ts +600 -0
  319. package/core/src/tui/__tests__/monitor.test.ts +336 -0
  320. package/core/src/tui/__tests__/real-world.test.ts +376 -0
  321. package/core/src/tui/__tests__/renderer.test.ts +201 -0
  322. package/core/src/tui/__tests__/types.test.ts +295 -0
  323. package/core/src/tui/index.ts +19 -0
  324. package/core/src/tui/monitor.ts +331 -0
  325. package/core/src/tui/renderer.ts +269 -0
  326. package/core/src/tui/types.ts +68 -0
  327. package/core/src/types/pack-v1.ts +305 -0
  328. package/core/src/types/pack-v2.ts +501 -0
  329. package/core/src/types/trust-score.ts +258 -0
  330. package/core/src/vault/__tests__/flakiness-vault.test.ts +562 -0
  331. package/core/src/vault/__tests__/vault.test.ts +259 -0
  332. package/core/src/vault/cas.ts +323 -0
  333. package/core/src/vault/index.ts +1361 -0
  334. package/core/src/vault/schema.sql +168 -0
  335. package/core/src/visual/README.md +185 -0
  336. package/core/src/visual/index.ts +14 -0
  337. package/core/src/visual/visual-regression.ts +347 -0
  338. package/core/src/watch/__tests__/watch-mode.test.ts +192 -0
  339. package/core/src/watch/index.ts +14 -0
  340. package/core/src/watch/watch-mode.ts +565 -0
  341. package/core/tsconfig.json +12 -0
  342. package/core/vitest.config.ts +52 -0
  343. package/docs/ARCHITECTURE.md +901 -0
  344. package/docs/AUDIT-GLOBAL-DEC2025.md +271 -0
  345. package/docs/BETA_TESTING.md +257 -0
  346. package/docs/BETA_TESTING_PLAN.md +727 -0
  347. package/docs/CERTIFICATION-REPORT.md +142 -0
  348. package/docs/COMPLETE_AUDIT_REFACTORING.md +965 -0
  349. package/docs/DEVELOPMENT.md +545 -0
  350. package/docs/DEVELOPMENT_HISTORY.md +345 -0
  351. package/docs/LIMITATIONS.md +176 -0
  352. package/docs/MIGRATION.md +303 -0
  353. package/docs/OPTION_3_4_EXPLORATION.md +1257 -0
  354. package/docs/PHASE1_PERFORMANCE.md +144 -0
  355. package/docs/QA360_Cloud.postman_collection.json +89 -0
  356. package/docs/QA360_TESTING_PHILOSOPHY.md +769 -0
  357. package/docs/QA_TEST_PLAN.md +727 -0
  358. package/docs/README.md +50 -0
  359. package/docs/STATUS.md +198 -0
  360. package/docs/STRATEGIC_STUDY_GOOSE_INTEGRATION.md +615 -0
  361. package/docs/USER_GUIDE.md +687 -0
  362. package/docs/WORK-DONE-ADAPTER-TESTS.md +136 -0
  363. package/docs/adapters-security.md +485 -0
  364. package/docs/architecture-diagram.mmd +168 -0
  365. package/docs/archive/ARCH-01-DAY6-BUILD-FIXES.md +396 -0
  366. package/docs/archive/ARCH-01-DAY6-FINAL-STATUS.md +324 -0
  367. package/docs/archive/ARCH-01_MCP_MERGE_ANALYSIS.md +644 -0
  368. package/docs/archive/ARCH-01_NEXT_STEPS.md +60 -0
  369. package/docs/archive/BRANCH_PROTECTION.md +183 -0
  370. package/docs/archive/CI_LOCKDOWN_CHECKLIST.md +222 -0
  371. package/docs/archive/HANDOFF_TEST-01.md +669 -0
  372. package/docs/archive/LEGAL_READY_PLACEHOLDERS.md +372 -0
  373. package/docs/archive/NODE_UPGRADE_GUIDE.md +188 -0
  374. package/docs/archive/PHASE1_COMPLETION.md +386 -0
  375. package/docs/archive/PHASE2_COMPLETION.md +404 -0
  376. package/docs/archive/PHASE3_AND_4_FINAL.md +360 -0
  377. package/docs/archive/PHASE3_COMPLETE.md +301 -0
  378. package/docs/archive/PHASE3_STATUS.md +255 -0
  379. package/docs/archive/PRE-WEEK2-AUDIT.md +364 -0
  380. package/docs/archive/README.md +16 -0
  381. package/docs/archive/SCHEMA_AJV_2020_FIX.md +245 -0
  382. package/docs/archive/TEST-01_AUDIT_REPORT.md +240 -0
  383. package/docs/archive/TEST-01_COVERAGE_PLAN.md +423 -0
  384. package/docs/archive/obsolete-proposals/dom-element-discovery-mode.md +250 -0
  385. package/docs/archive/obsolete-proposals/qa360-comprehensive-test-plan.md +1249 -0
  386. package/docs/archive/obsolete-proposals/qa360-quick-start-guide.md +298 -0
  387. package/docs/archive/obsolete-proposals/technical-plan-dom-discovery.md +870 -0
  388. package/docs/budgets-advanced.md +308 -0
  389. package/docs/examples/history-export-gc.md +285 -0
  390. package/docs/examples/pack-v2-complete.yaml +158 -0
  391. package/docs/examples/pack-v2-quickstart.yaml +24 -0
  392. package/docs/examples/pack-v2-ui-login.yaml +81 -0
  393. package/docs/examples/qa360-report.json +50 -0
  394. package/docs/history.md +565 -0
  395. package/docs/hooks.md +304 -0
  396. package/docs/llm-providers.md +512 -0
  397. package/docs/mcp-server.md +651 -0
  398. package/docs/mcp-tools.md +1131 -0
  399. package/docs/pack-v1.md +383 -0
  400. package/docs/pack-v2.md +558 -0
  401. package/docs/page-objects.md +366 -0
  402. package/docs/proofs.md +670 -0
  403. package/docs/quickstart-5min.md +257 -0
  404. package/docs/readiness-ci.md +654 -0
  405. package/docs/rfc/README.md +20 -0
  406. package/docs/rfc/proof-bundle-v1.md +787 -0
  407. package/docs/secrets.md +392 -0
  408. package/docs/serve.md +494 -0
  409. package/docs/unit-test-adapters.md +168 -0
  410. package/docs/vault.md +491 -0
  411. package/e2e/qa360-e2e.test.ts +696 -0
  412. package/e2e/vitest.config.ts +18 -0
  413. package/examples/README.md +30 -140
  414. package/examples/ci/docker-compose-serve.yml +375 -0
  415. package/examples/ci/github-actions-serve.yml +345 -0
  416. package/examples/ci/gitlab-ci-serve.yml +407 -0
  417. package/examples/datasets/README.md +101 -0
  418. package/examples/datasets/b2bshop.ts +155 -0
  419. package/examples/datasets/index.ts +57 -0
  420. package/examples/datasets/reqres.ts +195 -0
  421. package/examples/fixtures-demo/fixtures/users.yml +39 -0
  422. package/examples/fixtures-demo/pack.yml +71 -0
  423. package/examples/future-api/README.md +16 -0
  424. package/examples/future-api/diag.js +7 -0
  425. package/examples/future-api/health.js +4 -0
  426. package/examples/future-api/packs.js +13 -0
  427. package/examples/future-api/runpack.js +10 -0
  428. package/examples/generation/README.md +148 -0
  429. package/examples/generation/pack-generator-example.js +115 -0
  430. package/examples/generation/source-analyzer-example.js +115 -0
  431. package/examples/httpbin/pack.yml +59 -0
  432. package/examples/load-testing/mcp-load.yml +115 -0
  433. package/examples/load-testing/mcp-stdio.yml +95 -0
  434. package/examples/mcp/claude-desktop-config.json +33 -0
  435. package/examples/mcp/claude-desktop.json +16 -0
  436. package/examples/mcp/conversation-sample.md +131 -0
  437. package/examples/mcp/demo-60s.md +330 -0
  438. package/examples/mcp/sample-conversation.jsonl +21 -0
  439. package/examples/mcp/vscode-settings.json +22 -0
  440. package/examples/pack-v2-complete.yml +242 -0
  441. package/examples/pack-v2-examples.md +244 -0
  442. package/examples/pack-v2-quickstart.yml +55 -0
  443. package/examples/packs-business/ecommerce-api.yml +121 -0
  444. package/examples/packs-business/saas-dashboard-ui.yml +133 -0
  445. package/examples/packs-conformance/compose-multi.yml +174 -0
  446. package/examples/packs-conformance/full.yml +152 -0
  447. package/examples/packs-conformance/heavy-artifacts.yml +152 -0
  448. package/examples/packs-conformance/minimal.yml +71 -0
  449. package/examples/packs-conformance/secrets-missing.yml +97 -0
  450. package/examples/packs-conformance/timeouts.yml +77 -0
  451. package/examples/pom-demo/README.md +104 -0
  452. package/examples/pom-demo/pack.yml +60 -0
  453. package/examples/pom-demo/pages/DashboardPage.page.ts +73 -0
  454. package/examples/pom-demo/pages/LoginPage.page.ts +76 -0
  455. package/examples/proofs/e2e-playwright-proof.json +75 -0
  456. package/examples/proofs/httpbin-proof.json +69 -0
  457. package/examples/proofs/multi-adapter-proof.json +117 -0
  458. package/examples/proofs/test-proof.json +26 -0
  459. package/examples/restful-api-dev/README.md +102 -0
  460. package/examples/restful-api-dev/restful-api-advanced.yml +29 -0
  461. package/examples/restful-api-dev/restful-api-basic.yml +29 -0
  462. package/examples/web-lite/.github/workflows/qa360-phase3.yml +73 -0
  463. package/examples/web-lite/api-mock/server.js +258 -0
  464. package/examples/web-lite/pack.yml +71 -0
  465. package/examples/web-lite/services.yml +43 -0
  466. package/examples/web-lite/web-content/healthz +1 -0
  467. package/examples/web-lite/web-content/index.html +259 -0
  468. package/package.json +55 -45
  469. package/packages/mcp/CHANGELOG.md +109 -0
  470. package/packages/mcp/IMPLEMENTATION_SUMMARY.md +350 -0
  471. package/packages/mcp/LICENSE +21 -0
  472. package/packages/mcp/QUICK_START.md +291 -0
  473. package/packages/mcp/README.md +294 -0
  474. package/packages/mcp/TELEMETRY.md +220 -0
  475. package/packages/mcp/package.json +91 -0
  476. package/packages/mcp/scripts/generate-sbom-fallback.cjs +84 -0
  477. package/packages/mcp/scripts/safe-postinstall.cjs +32 -0
  478. package/packages/mcp/src/__tests__/contract.test.ts +902 -0
  479. package/packages/mcp/src/cli/cli.ts +137 -0
  480. package/packages/mcp/src/cli/doctor.ts +286 -0
  481. package/packages/mcp/src/cli/fix.ts +99 -0
  482. package/packages/mcp/src/cli/init.ts +233 -0
  483. package/packages/mcp/src/cli/postinstall.ts +14 -0
  484. package/packages/mcp/src/cli/reset.ts +44 -0
  485. package/packages/mcp/src/cli/telemetry.ts +166 -0
  486. package/packages/mcp/src/cli/test-dx.ts +94 -0
  487. package/packages/mcp/src/cli/uninstall.ts +80 -0
  488. package/packages/mcp/src/cli/up.ts +178 -0
  489. package/packages/mcp/src/index.ts +12 -0
  490. package/packages/mcp/src/scripts/e2e-local.ts +337 -0
  491. package/packages/mcp/src/scripts/verify-settings.ts +242 -0
  492. package/packages/mcp/src/security/audit.ts +244 -0
  493. package/packages/mcp/src/security/manager.ts +242 -0
  494. package/packages/mcp/src/server/full-server.ts +212 -0
  495. package/packages/mcp/src/server/minimal-server.ts +134 -0
  496. package/packages/mcp/src/tools/history.ts +388 -0
  497. package/packages/mcp/src/tools/pack.ts +449 -0
  498. package/packages/mcp/src/tools/registry.ts +638 -0
  499. package/packages/mcp/src/tools/report.ts +100 -0
  500. package/packages/mcp/src/tools/run.ts +268 -0
  501. package/packages/mcp/src/tools/secrets.ts +198 -0
  502. package/packages/mcp/src/tools/serve.ts +221 -0
  503. package/packages/mcp/src/tools/triage.ts +532 -0
  504. package/packages/mcp/src/tools/types.ts +26 -0
  505. package/packages/mcp/src/tools/vault.ts +164 -0
  506. package/packages/mcp/src/tools/verify.ts +166 -0
  507. package/packages/mcp/src/types/index.ts +311 -0
  508. package/packages/mcp/src/types/mcp-stubs.ts +83 -0
  509. package/packages/mcp/tsconfig.json +16 -0
  510. package/playwright.config.ts +20 -0
  511. package/pnpm-workspace.yaml +4 -0
  512. package/run-test-and-push.sh +20 -0
  513. package/scripts/build-proof-cli.sh +110 -0
  514. package/scripts/ci/check-windows-paths.js +92 -0
  515. package/scripts/ci/invariants.sh +124 -0
  516. package/scripts/ci/make-final-bundle.js +106 -0
  517. package/scripts/ci/mcp-run-multipack.js +305 -0
  518. package/scripts/ci/run-pack-suite.sh +103 -0
  519. package/scripts/ci/run-phase7-final.sh +190 -0
  520. package/scripts/ci/slo-assert.js +158 -0
  521. package/scripts/ci/test-fault-tolerance.sh +301 -0
  522. package/scripts/install-mcp.sh +66 -0
  523. package/scripts/mcp-smoke.mjs +27 -0
  524. package/scripts/smoke.sh +26 -0
  525. package/scripts/stress-test.js +288 -0
  526. package/scripts/sync-version.mjs +50 -0
  527. package/scripts/validate-examples.mjs +404 -0
  528. package/scripts/validation/simple-pack-check.sh +51 -0
  529. package/scripts/validation/validate-universal-pack.mjs +77 -0
  530. package/scripts/verify-persistence.js +127 -0
  531. package/test-pack.yaml +43 -0
  532. package/test-results/.last-run.json +4 -0
  533. package/test-runner.mjs +87 -0
  534. package/tests/artifacts.spec.js +147 -0
  535. package/tests/contracts.spec.js +239 -0
  536. package/tests/e2e/assertions.test.mjs +370 -0
  537. package/tests/e2e/crawler.test.mjs +451 -0
  538. package/tests/e2e/playwright-plus-plus.test.mjs +604 -0
  539. package/tests/e2e/proof-bundle.test.mjs +258 -0
  540. package/tests/e2e/real-world/saucedemo.test.mjs +714 -0
  541. package/tests/e2e/real-world/the-internet-herokuapp.test.mjs +760 -0
  542. package/tests/e2e/ui-actions.test.mjs +546 -0
  543. package/tests/gherkin.e2e.spec.ts +310 -0
  544. package/tests/no-console-errors.spec.js +136 -0
  545. package/tests/pdf.spec.ts +252 -0
  546. package/tests/run-pack.spec.ts +58 -0
  547. package/tsconfig.base.json +15 -0
  548. package/tsconfig.build.json +8 -0
  549. package/tsconfig.json +37 -0
  550. package/tsconfig.test.json +18 -0
  551. package/typedoc.json +37 -0
  552. package/ui/README.md +50 -0
  553. package/verify-proof.mjs +60 -0
  554. package/dist/cli-minimal.d.ts +0 -6
  555. package/dist/cli-minimal.js +0 -36
  556. package/dist/commands/ai.d.ts +0 -43
  557. package/dist/commands/ai.js +0 -616
  558. package/dist/commands/ask.d.ts +0 -94
  559. package/dist/commands/ask.js +0 -582
  560. package/dist/commands/coverage.d.ts +0 -8
  561. package/dist/commands/coverage.js +0 -252
  562. package/dist/commands/crawl.d.ts +0 -24
  563. package/dist/commands/crawl.js +0 -121
  564. package/dist/commands/doctor.d.ts +0 -54
  565. package/dist/commands/doctor.js +0 -513
  566. package/dist/commands/examples.d.ts +0 -33
  567. package/dist/commands/examples.js +0 -193
  568. package/dist/commands/explain.d.ts +0 -27
  569. package/dist/commands/explain.js +0 -630
  570. package/dist/commands/flakiness.d.ts +0 -73
  571. package/dist/commands/flakiness.js +0 -435
  572. package/dist/commands/generate.d.ts +0 -66
  573. package/dist/commands/generate.js +0 -438
  574. package/dist/commands/history.d.ts +0 -76
  575. package/dist/commands/history.js +0 -755
  576. package/dist/commands/init.d.ts +0 -106
  577. package/dist/commands/init.js +0 -616
  578. package/dist/commands/monitor.d.ts +0 -27
  579. package/dist/commands/monitor.js +0 -225
  580. package/dist/commands/ollama.d.ts +0 -40
  581. package/dist/commands/ollama.js +0 -301
  582. package/dist/commands/pack.d.ts +0 -70
  583. package/dist/commands/pack.js +0 -413
  584. package/dist/commands/regression.d.ts +0 -8
  585. package/dist/commands/regression.js +0 -340
  586. package/dist/commands/repair.d.ts +0 -26
  587. package/dist/commands/repair.js +0 -307
  588. package/dist/commands/report.d.ts +0 -62
  589. package/dist/commands/report.js +0 -378
  590. package/dist/commands/retry.d.ts +0 -43
  591. package/dist/commands/retry.js +0 -275
  592. package/dist/commands/run.d.ts +0 -41
  593. package/dist/commands/run.js +0 -169
  594. package/dist/commands/scan.d.ts +0 -5
  595. package/dist/commands/scan.js +0 -155
  596. package/dist/commands/secrets.d.ts +0 -58
  597. package/dist/commands/secrets.js +0 -289
  598. package/dist/commands/serve.d.ts +0 -13
  599. package/dist/commands/serve.js +0 -156
  600. package/dist/commands/slo.d.ts +0 -8
  601. package/dist/commands/slo.js +0 -327
  602. package/dist/commands/verify.d.ts +0 -32
  603. package/dist/commands/verify.js +0 -278
  604. package/dist/core/adapters/gitleaks-secrets.d.ts +0 -114
  605. package/dist/core/adapters/gitleaks-secrets.js +0 -410
  606. package/dist/core/adapters/k6-perf.d.ts +0 -85
  607. package/dist/core/adapters/k6-perf.js +0 -398
  608. package/dist/core/adapters/osv-deps.d.ts +0 -123
  609. package/dist/core/adapters/osv-deps.js +0 -372
  610. package/dist/core/adapters/playwright-native-adapter.d.ts +0 -121
  611. package/dist/core/adapters/playwright-native-adapter.js +0 -339
  612. package/dist/core/adapters/playwright-native-api.d.ts +0 -183
  613. package/dist/core/adapters/playwright-native-api.js +0 -465
  614. package/dist/core/adapters/playwright-ui.d.ts +0 -197
  615. package/dist/core/adapters/playwright-ui.js +0 -840
  616. package/dist/core/adapters/semgrep-sast.d.ts +0 -99
  617. package/dist/core/adapters/semgrep-sast.js +0 -322
  618. package/dist/core/adapters/zap-dast.d.ts +0 -133
  619. package/dist/core/adapters/zap-dast.js +0 -424
  620. package/dist/core/ai/anthropic-provider.d.ts +0 -50
  621. package/dist/core/ai/anthropic-provider.js +0 -223
  622. package/dist/core/ai/deepseek-provider.d.ts +0 -81
  623. package/dist/core/ai/deepseek-provider.js +0 -266
  624. package/dist/core/ai/index.d.ts +0 -60
  625. package/dist/core/ai/index.js +0 -18
  626. package/dist/core/ai/llm-client.d.ts +0 -45
  627. package/dist/core/ai/llm-client.js +0 -7
  628. package/dist/core/ai/mock-provider.d.ts +0 -49
  629. package/dist/core/ai/mock-provider.js +0 -121
  630. package/dist/core/ai/ollama-provider.d.ts +0 -78
  631. package/dist/core/ai/ollama-provider.js +0 -204
  632. package/dist/core/ai/openai-provider.d.ts +0 -48
  633. package/dist/core/ai/openai-provider.js +0 -200
  634. package/dist/core/ai/provider-factory.d.ts +0 -160
  635. package/dist/core/ai/provider-factory.js +0 -269
  636. package/dist/core/artifacts/index.d.ts +0 -6
  637. package/dist/core/artifacts/index.js +0 -6
  638. package/dist/core/artifacts/ui-artifacts.d.ts +0 -133
  639. package/dist/core/artifacts/ui-artifacts.js +0 -304
  640. package/dist/core/assertions/engine.d.ts +0 -51
  641. package/dist/core/assertions/engine.js +0 -530
  642. package/dist/core/assertions/index.d.ts +0 -11
  643. package/dist/core/assertions/index.js +0 -11
  644. package/dist/core/assertions/types.d.ts +0 -121
  645. package/dist/core/assertions/types.js +0 -37
  646. package/dist/core/auth/api-key-provider.d.ts +0 -16
  647. package/dist/core/auth/api-key-provider.js +0 -63
  648. package/dist/core/auth/aws-iam-provider.d.ts +0 -35
  649. package/dist/core/auth/aws-iam-provider.js +0 -177
  650. package/dist/core/auth/azure-ad-provider.d.ts +0 -15
  651. package/dist/core/auth/azure-ad-provider.js +0 -99
  652. package/dist/core/auth/basic-auth-provider.d.ts +0 -26
  653. package/dist/core/auth/basic-auth-provider.js +0 -111
  654. package/dist/core/auth/gcp-adc-provider.d.ts +0 -27
  655. package/dist/core/auth/gcp-adc-provider.js +0 -126
  656. package/dist/core/auth/index.d.ts +0 -238
  657. package/dist/core/auth/index.js +0 -82
  658. package/dist/core/auth/jwt-provider.d.ts +0 -19
  659. package/dist/core/auth/jwt-provider.js +0 -160
  660. package/dist/core/auth/manager.d.ts +0 -84
  661. package/dist/core/auth/manager.js +0 -230
  662. package/dist/core/auth/oauth2-provider.d.ts +0 -17
  663. package/dist/core/auth/oauth2-provider.js +0 -114
  664. package/dist/core/auth/totp-provider.d.ts +0 -31
  665. package/dist/core/auth/totp-provider.js +0 -134
  666. package/dist/core/auth/ui-login-provider.d.ts +0 -26
  667. package/dist/core/auth/ui-login-provider.js +0 -198
  668. package/dist/core/cache/index.d.ts +0 -7
  669. package/dist/core/cache/index.js +0 -6
  670. package/dist/core/cache/lru-cache.d.ts +0 -203
  671. package/dist/core/cache/lru-cache.js +0 -397
  672. package/dist/core/core/coverage/analyzer.d.ts +0 -101
  673. package/dist/core/core/coverage/analyzer.js +0 -415
  674. package/dist/core/core/coverage/collector.d.ts +0 -74
  675. package/dist/core/core/coverage/collector.js +0 -459
  676. package/dist/core/core/coverage/config.d.ts +0 -37
  677. package/dist/core/core/coverage/config.js +0 -156
  678. package/dist/core/core/coverage/index.d.ts +0 -11
  679. package/dist/core/core/coverage/index.js +0 -15
  680. package/dist/core/core/coverage/types.d.ts +0 -267
  681. package/dist/core/core/coverage/types.js +0 -6
  682. package/dist/core/core/coverage/vault.d.ts +0 -95
  683. package/dist/core/core/coverage/vault.js +0 -405
  684. package/dist/core/coverage/analyzer.d.ts +0 -101
  685. package/dist/core/coverage/analyzer.js +0 -415
  686. package/dist/core/coverage/collector.d.ts +0 -74
  687. package/dist/core/coverage/collector.js +0 -459
  688. package/dist/core/coverage/config.d.ts +0 -37
  689. package/dist/core/coverage/config.js +0 -156
  690. package/dist/core/coverage/index.d.ts +0 -11
  691. package/dist/core/coverage/index.js +0 -15
  692. package/dist/core/coverage/types.d.ts +0 -267
  693. package/dist/core/coverage/types.js +0 -6
  694. package/dist/core/coverage/vault.d.ts +0 -95
  695. package/dist/core/coverage/vault.js +0 -405
  696. package/dist/core/crawler/index.d.ts +0 -57
  697. package/dist/core/crawler/index.js +0 -281
  698. package/dist/core/crawler/journey-generator.d.ts +0 -49
  699. package/dist/core/crawler/journey-generator.js +0 -412
  700. package/dist/core/crawler/page-analyzer.d.ts +0 -88
  701. package/dist/core/crawler/page-analyzer.js +0 -709
  702. package/dist/core/crawler/selector-generator.d.ts +0 -34
  703. package/dist/core/crawler/selector-generator.js +0 -240
  704. package/dist/core/crawler/types.d.ts +0 -353
  705. package/dist/core/crawler/types.js +0 -6
  706. package/dist/core/dashboard/assets.d.ts +0 -6
  707. package/dist/core/dashboard/assets.js +0 -690
  708. package/dist/core/dashboard/index.d.ts +0 -6
  709. package/dist/core/dashboard/index.js +0 -5
  710. package/dist/core/dashboard/server.d.ts +0 -72
  711. package/dist/core/dashboard/server.js +0 -354
  712. package/dist/core/dashboard/types.d.ts +0 -70
  713. package/dist/core/dashboard/types.js +0 -5
  714. package/dist/core/discoverer/index.d.ts +0 -115
  715. package/dist/core/discoverer/index.js +0 -250
  716. package/dist/core/flakiness/index.d.ts +0 -228
  717. package/dist/core/flakiness/index.js +0 -384
  718. package/dist/core/generation/code-formatter.d.ts +0 -111
  719. package/dist/core/generation/code-formatter.js +0 -307
  720. package/dist/core/generation/code-generator.d.ts +0 -144
  721. package/dist/core/generation/code-generator.js +0 -293
  722. package/dist/core/generation/crawler-pack-generator.d.ts +0 -44
  723. package/dist/core/generation/crawler-pack-generator.js +0 -231
  724. package/dist/core/generation/generator.d.ts +0 -40
  725. package/dist/core/generation/generator.js +0 -76
  726. package/dist/core/generation/index.d.ts +0 -32
  727. package/dist/core/generation/index.js +0 -30
  728. package/dist/core/generation/pack-generator.d.ts +0 -107
  729. package/dist/core/generation/pack-generator.js +0 -416
  730. package/dist/core/generation/prompt-builder.d.ts +0 -132
  731. package/dist/core/generation/prompt-builder.js +0 -672
  732. package/dist/core/generation/source-analyzer.d.ts +0 -213
  733. package/dist/core/generation/source-analyzer.js +0 -657
  734. package/dist/core/generation/test-optimizer.d.ts +0 -117
  735. package/dist/core/generation/test-optimizer.js +0 -328
  736. package/dist/core/generation/types.d.ts +0 -214
  737. package/dist/core/generation/types.js +0 -4
  738. package/dist/core/hooks/compose.d.ts +0 -61
  739. package/dist/core/hooks/compose.js +0 -225
  740. package/dist/core/hooks/runner.d.ts +0 -68
  741. package/dist/core/hooks/runner.js +0 -303
  742. package/dist/core/index.d.ts +0 -104
  743. package/dist/core/index.js +0 -91
  744. package/dist/core/pack/migrator.d.ts +0 -51
  745. package/dist/core/pack/migrator.js +0 -304
  746. package/dist/core/pack/validator.d.ts +0 -42
  747. package/dist/core/pack/validator.js +0 -322
  748. package/dist/core/pack-v2/index.d.ts +0 -9
  749. package/dist/core/pack-v2/index.js +0 -8
  750. package/dist/core/pack-v2/loader.d.ts +0 -63
  751. package/dist/core/pack-v2/loader.js +0 -292
  752. package/dist/core/pack-v2/migrator.d.ts +0 -61
  753. package/dist/core/pack-v2/migrator.js +0 -480
  754. package/dist/core/pack-v2/validator.d.ts +0 -61
  755. package/dist/core/pack-v2/validator.js +0 -577
  756. package/dist/core/parallel/index.d.ts +0 -6
  757. package/dist/core/parallel/index.js +0 -6
  758. package/dist/core/parallel/parallel-runner.d.ts +0 -107
  759. package/dist/core/parallel/parallel-runner.js +0 -192
  760. package/dist/core/proof/bundle.d.ts +0 -137
  761. package/dist/core/proof/bundle.js +0 -160
  762. package/dist/core/proof/canonicalize.d.ts +0 -47
  763. package/dist/core/proof/canonicalize.js +0 -105
  764. package/dist/core/proof/index.d.ts +0 -13
  765. package/dist/core/proof/index.js +0 -18
  766. package/dist/core/proof/schema.d.ts +0 -217
  767. package/dist/core/proof/schema.js +0 -263
  768. package/dist/core/proof/signer.d.ts +0 -111
  769. package/dist/core/proof/signer.js +0 -226
  770. package/dist/core/proof/verifier.d.ts +0 -97
  771. package/dist/core/proof/verifier.js +0 -308
  772. package/dist/core/regression/detector.d.ts +0 -107
  773. package/dist/core/regression/detector.js +0 -497
  774. package/dist/core/regression/index.d.ts +0 -9
  775. package/dist/core/regression/index.js +0 -11
  776. package/dist/core/regression/trend-analyzer.d.ts +0 -102
  777. package/dist/core/regression/trend-analyzer.js +0 -345
  778. package/dist/core/regression/types.d.ts +0 -222
  779. package/dist/core/regression/types.js +0 -7
  780. package/dist/core/regression/vault.d.ts +0 -87
  781. package/dist/core/regression/vault.js +0 -289
  782. package/dist/core/repair/engine/fixer.d.ts +0 -24
  783. package/dist/core/repair/engine/fixer.js +0 -226
  784. package/dist/core/repair/engine/suggestion-engine.d.ts +0 -18
  785. package/dist/core/repair/engine/suggestion-engine.js +0 -187
  786. package/dist/core/repair/index.d.ts +0 -10
  787. package/dist/core/repair/index.js +0 -13
  788. package/dist/core/repair/repairer.d.ts +0 -90
  789. package/dist/core/repair/repairer.js +0 -284
  790. package/dist/core/repair/types.d.ts +0 -91
  791. package/dist/core/repair/types.js +0 -6
  792. package/dist/core/repair/utils/error-analyzer.d.ts +0 -28
  793. package/dist/core/repair/utils/error-analyzer.js +0 -264
  794. package/dist/core/reporting/html-reporter.d.ts +0 -119
  795. package/dist/core/reporting/html-reporter.js +0 -737
  796. package/dist/core/reporting/index.d.ts +0 -6
  797. package/dist/core/reporting/index.js +0 -6
  798. package/dist/core/retry/flakiness-integration.d.ts +0 -60
  799. package/dist/core/retry/flakiness-integration.js +0 -228
  800. package/dist/core/retry/index.d.ts +0 -14
  801. package/dist/core/retry/index.js +0 -16
  802. package/dist/core/retry/retry-engine.d.ts +0 -80
  803. package/dist/core/retry/retry-engine.js +0 -296
  804. package/dist/core/retry/types.d.ts +0 -178
  805. package/dist/core/retry/types.js +0 -52
  806. package/dist/core/retry/vault.d.ts +0 -77
  807. package/dist/core/retry/vault.js +0 -304
  808. package/dist/core/runner/e2e-helpers.d.ts +0 -102
  809. package/dist/core/runner/e2e-helpers.js +0 -153
  810. package/dist/core/runner/phase3-runner.d.ts +0 -200
  811. package/dist/core/runner/phase3-runner.js +0 -1041
  812. package/dist/core/secrets/crypto.d.ts +0 -75
  813. package/dist/core/secrets/crypto.js +0 -223
  814. package/dist/core/secrets/manager.d.ts +0 -76
  815. package/dist/core/secrets/manager.js +0 -219
  816. package/dist/core/security/redaction-patterns-extended.d.ts +0 -27
  817. package/dist/core/security/redaction-patterns-extended.js +0 -247
  818. package/dist/core/security/redactor.d.ts +0 -71
  819. package/dist/core/security/redactor.js +0 -279
  820. package/dist/core/self-healing/assertion-healer.d.ts +0 -97
  821. package/dist/core/self-healing/assertion-healer.js +0 -371
  822. package/dist/core/self-healing/engine.d.ts +0 -122
  823. package/dist/core/self-healing/engine.js +0 -538
  824. package/dist/core/self-healing/index.d.ts +0 -10
  825. package/dist/core/self-healing/index.js +0 -11
  826. package/dist/core/self-healing/selector-healer.d.ts +0 -103
  827. package/dist/core/self-healing/selector-healer.js +0 -372
  828. package/dist/core/self-healing/types.d.ts +0 -152
  829. package/dist/core/self-healing/types.js +0 -6
  830. package/dist/core/serve/diagnostics-collector.d.ts +0 -32
  831. package/dist/core/serve/diagnostics-collector.js +0 -149
  832. package/dist/core/serve/health-checker.d.ts +0 -44
  833. package/dist/core/serve/health-checker.js +0 -219
  834. package/dist/core/serve/index.d.ts +0 -8
  835. package/dist/core/serve/index.js +0 -8
  836. package/dist/core/serve/metrics-collector.d.ts +0 -24
  837. package/dist/core/serve/metrics-collector.js +0 -322
  838. package/dist/core/serve/process-manager.d.ts +0 -36
  839. package/dist/core/serve/process-manager.js +0 -213
  840. package/dist/core/serve/server.d.ts +0 -36
  841. package/dist/core/serve/server.js +0 -191
  842. package/dist/core/slo/config.d.ts +0 -107
  843. package/dist/core/slo/config.js +0 -360
  844. package/dist/core/slo/index.d.ts +0 -11
  845. package/dist/core/slo/index.js +0 -15
  846. package/dist/core/slo/sli-calculator.d.ts +0 -92
  847. package/dist/core/slo/sli-calculator.js +0 -364
  848. package/dist/core/slo/slo-tracker.d.ts +0 -148
  849. package/dist/core/slo/slo-tracker.js +0 -379
  850. package/dist/core/slo/types.d.ts +0 -281
  851. package/dist/core/slo/types.js +0 -7
  852. package/dist/core/slo/vault.d.ts +0 -102
  853. package/dist/core/slo/vault.js +0 -427
  854. package/dist/core/tui/index.d.ts +0 -7
  855. package/dist/core/tui/index.js +0 -6
  856. package/dist/core/tui/monitor.d.ts +0 -92
  857. package/dist/core/tui/monitor.js +0 -271
  858. package/dist/core/tui/renderer.d.ts +0 -33
  859. package/dist/core/tui/renderer.js +0 -218
  860. package/dist/core/tui/types.d.ts +0 -63
  861. package/dist/core/tui/types.js +0 -5
  862. package/dist/core/types/pack-v1.d.ts +0 -251
  863. package/dist/core/types/pack-v1.js +0 -5
  864. package/dist/core/types/pack-v2.d.ts +0 -425
  865. package/dist/core/types/pack-v2.js +0 -8
  866. package/dist/core/types/trust-score.d.ts +0 -69
  867. package/dist/core/types/trust-score.js +0 -191
  868. package/dist/core/vault/cas.d.ts +0 -90
  869. package/dist/core/vault/cas.js +0 -261
  870. package/dist/core/vault/index.d.ts +0 -326
  871. package/dist/core/vault/index.js +0 -1042
  872. package/dist/core/visual/index.d.ts +0 -6
  873. package/dist/core/visual/index.js +0 -6
  874. package/dist/core/visual/visual-regression.d.ts +0 -113
  875. package/dist/core/visual/visual-regression.js +0 -236
  876. package/dist/core/watch/index.d.ts +0 -7
  877. package/dist/core/watch/index.js +0 -6
  878. package/dist/core/watch/watch-mode.d.ts +0 -213
  879. package/dist/core/watch/watch-mode.js +0 -389
  880. package/dist/generators/index.d.ts +0 -5
  881. package/dist/generators/index.js +0 -5
  882. package/dist/generators/json-reporter.d.ts +0 -10
  883. package/dist/generators/json-reporter.js +0 -12
  884. package/dist/generators/test-generator.d.ts +0 -18
  885. package/dist/generators/test-generator.js +0 -78
  886. package/dist/index.d.ts +0 -8
  887. package/dist/index.js +0 -246
  888. package/dist/scanners/dom-scanner.d.ts +0 -52
  889. package/dist/scanners/dom-scanner.js +0 -296
  890. package/dist/scanners/index.d.ts +0 -4
  891. package/dist/scanners/index.js +0 -4
  892. package/dist/schemas/pack.schema.json +0 -236
  893. package/dist/types/scan.d.ts +0 -68
  894. package/dist/types/scan.js +0 -4
  895. package/dist/utils/config.d.ts +0 -5
  896. package/dist/utils/config.js +0 -136
  897. /package/{bin → cli/bin}/qa360.js +0 -0
  898. /package/{examples → cli/examples}/accessibility.yml +0 -0
  899. /package/{examples → cli/examples}/api-basic.yml +0 -0
  900. /package/{examples → cli/examples}/complete.yml +0 -0
  901. /package/{examples → cli/examples}/crawler.yml +0 -0
  902. /package/{examples → cli/examples}/fullstack.yml +0 -0
  903. /package/{examples → cli/examples}/security.yml +0 -0
  904. /package/{examples → cli/examples}/ui-advanced.yml +0 -0
  905. /package/{examples → cli/examples}/ui-basic.yml +0 -0
  906. /package/{dist/core → core}/schemas/pack.schema.json +0 -0
@@ -0,0 +1,718 @@
1
+ /**
2
+ * QA360 AI Generation E2E Tests - B2BShop
3
+ *
4
+ * Real E2E tests for AI-powered test generation using the B2BShop application.
5
+ * Tests the complete workflow: URL discovery → test generation → pack creation → execution.
6
+ *
7
+ * Prerequisites:
8
+ * - ENABLE_E2E_TESTS=1 environment variable
9
+ * - B2BShop site must be accessible
10
+ *
11
+ * Run with: ENABLE_E2E_TESTS=1 pnpm test:core -- generation-e2e-b2bshop
12
+ */
13
+
14
+ import { tmpdir } from 'os';
15
+ import { join } from 'path';
16
+ import { mkdirSync, rmSync, existsSync, writeFileSync, readFileSync } from 'fs';
17
+ import { describe, it, expect, beforeEach, afterEach, beforeAll } from 'vitest';
18
+ import { Phase3Runner } from '../../runner/phase3-runner.js';
19
+ import type { PackConfigV2 } from '../../types/pack-v2.js';
20
+ import { skipIfE2ETargetUnhealthy, healthCheckE2ETarget } from '../../runner/e2e-helpers.js';
21
+ import { PackGenerator } from '../pack-generator.js';
22
+ import { CodeGenerator } from '../code-generator.js';
23
+ import { MockProvider } from '../../ai/mock-provider.js';
24
+ import type { UiTestSpec, ApiTestSpec } from '../types.js';
25
+
26
+ // E2E test configuration
27
+ const B2BSHOP_URL = 'https://b2bshop.lovable.app';
28
+ const NETWORK_TIMEOUT = 120000; // 2 minutes for AI generation
29
+ const shouldRun = process.env.ENABLE_E2E_TESTS === '1';
30
+
31
+ describe('AI Generation E2E (B2BShop)', () => {
32
+ let testDir: string;
33
+ let siteHealthy = true;
34
+
35
+ beforeAll(async () => {
36
+ if (!shouldRun) return;
37
+
38
+ const health = await healthCheckE2ETarget('b2bshop');
39
+ if (!health.available) {
40
+ console.warn(`\n⚠️ B2BShop E2E tests skipped: site is ${health.error ? `unreachable (${health.error})` : `down (status: ${health.status})`}`);
41
+ }
42
+ });
43
+
44
+ beforeEach(async () => {
45
+ if (!shouldRun) return;
46
+
47
+ const health = await healthCheckE2ETarget('b2bshop');
48
+ siteHealthy = health.available;
49
+
50
+ if (!siteHealthy) return;
51
+
52
+ testDir = join(tmpdir(), `qa360-e2e-gen-b2bshop-${Date.now()}-${Math.random()}`);
53
+ mkdirSync(testDir, { recursive: true });
54
+ });
55
+
56
+ afterEach(() => {
57
+ if (existsSync(testDir)) {
58
+ rmSync(testDir, { recursive: true, force: true });
59
+ }
60
+ });
61
+
62
+ describe.skipIf(!shouldRun)('URL Discovery and Analysis', () => {
63
+ it('should discover B2BShop pages from URL', async () => {
64
+ // This test simulates discovering the site structure
65
+ // In real implementation, this would use a crawler
66
+
67
+ const discoveredPages = [
68
+ { name: 'Homepage', url: `${B2BSHOP_URL}/`, actions: [] },
69
+ { name: 'Catalog', url: `${B2BSHOP_URL}/catalog`, actions: [] },
70
+ { name: 'Products', url: `${B2BSHOP_URL}/products`, actions: [] },
71
+ { name: 'Cart', url: `${B2BSHOP_URL}/cart`, actions: [] },
72
+ { name: 'Login', url: `${B2BSHOP_URL}/login`, actions: [] }
73
+ ];
74
+
75
+ expect(discoveredPages).toHaveLength(5);
76
+ expect(discoveredPages[0].url).toBe(B2BSHOP_URL + '/');
77
+ });
78
+
79
+ it('should analyze B2BShop API endpoints', async () => {
80
+ // Simulated API discovery for B2BShop
81
+ const discoveredEndpoints = [
82
+ { method: 'GET' as const, path: '/api/health', expectations: { status: 200 } },
83
+ { method: 'GET' as const, path: '/api/products', expectations: { status: 200 } },
84
+ { method: 'GET' as const, path: '/api/products/:id', expectations: { status: 200 } },
85
+ { method: 'POST' as const, path: '/api/cart', expectations: { status: 201 } }
86
+ ];
87
+
88
+ expect(discoveredEndpoints).toHaveLength(4);
89
+ });
90
+ });
91
+
92
+ describe.skipIf(!shouldRun)('Spec Generation from B2BShop', () => {
93
+ it('should generate UI test spec from B2BShop URL', () => {
94
+ const uiSpec: UiTestSpec = {
95
+ type: 'ui',
96
+ name: 'B2BShop UI Tests',
97
+ baseUrl: B2BSHOP_URL,
98
+ viewport: { width: 1920, height: 1080 },
99
+ pages: [
100
+ {
101
+ name: 'Homepage',
102
+ url: `${B2BSHOP_URL}/`,
103
+ actions: [
104
+ { type: 'goto', selector: '/' },
105
+ { type: 'wait', timeout: 2000 },
106
+ { type: 'screenshot' }
107
+ ]
108
+ },
109
+ {
110
+ name: 'Catalog Page',
111
+ url: `${B2BSHOP_URL}/catalog`,
112
+ actions: [
113
+ { type: 'goto', selector: '/catalog' },
114
+ { type: 'wait', timeout: 2000 },
115
+ { type: 'assert', selector: '.product-list', expected: 'visible' }
116
+ ]
117
+ },
118
+ {
119
+ name: 'Products Page',
120
+ url: `${B2BSHOP_URL}/products`,
121
+ actions: [
122
+ { type: 'goto', selector: '/products' },
123
+ { type: 'wait', timeout: 2000 }
124
+ ]
125
+ }
126
+ ]
127
+ };
128
+
129
+ expect(uiSpec.pages).toHaveLength(3);
130
+ expect(uiSpec.pages[0].name).toBe('Homepage');
131
+ expect(uiSpec.baseUrl).toBe(B2BSHOP_URL);
132
+ });
133
+
134
+ it('should generate API test spec from B2BShop API', () => {
135
+ const apiSpec: ApiTestSpec = {
136
+ type: 'api',
137
+ name: 'B2BShop API Tests',
138
+ baseUrl: `${B2BSHOP_URL}/api`,
139
+ endpoints: [
140
+ {
141
+ method: 'GET',
142
+ path: '/health',
143
+ description: 'Health check endpoint',
144
+ expectations: { status: 200 }
145
+ },
146
+ {
147
+ method: 'GET',
148
+ path: '/products',
149
+ description: 'List all products',
150
+ expectations: { status: 200 }
151
+ },
152
+ {
153
+ method: 'POST',
154
+ path: '/cart/items',
155
+ description: 'Add item to cart',
156
+ expectations: { status: 201 }
157
+ }
158
+ ]
159
+ };
160
+
161
+ expect(apiSpec.endpoints).toHaveLength(3);
162
+ expect(apiSpec.baseUrl).toBe(`${B2BSHOP_URL}/api`);
163
+ });
164
+ });
165
+
166
+ describe.skipIf(!shouldRun)('Pack Generation for B2BShop', () => {
167
+ it('should generate B2BShop UI pack from spec', () => {
168
+ const uiSpec: UiTestSpec = {
169
+ type: 'ui',
170
+ name: 'B2BShop E2E Tests',
171
+ baseUrl: B2BSHOP_URL,
172
+ viewport: { width: 1920, height: 1080 },
173
+ pages: [
174
+ {
175
+ name: 'Homepage',
176
+ url: `${B2BSHOP_URL}/`,
177
+ actions: [
178
+ { type: 'goto', selector: '/' },
179
+ { type: 'wait', timeout: 2000 }
180
+ ]
181
+ },
182
+ {
183
+ name: 'Catalog',
184
+ url: `${B2BSHOP_URL}/catalog`,
185
+ actions: [
186
+ { type: 'goto', selector: '/catalog' },
187
+ { type: 'wait', timeout: 2000 }
188
+ ]
189
+ },
190
+ {
191
+ name: 'Products',
192
+ url: `${B2BSHOP_URL}/products`,
193
+ actions: [
194
+ { type: 'goto', selector: '/products' },
195
+ { type: 'wait', timeout: 2000 }
196
+ ]
197
+ },
198
+ {
199
+ name: 'Cart',
200
+ url: `${B2BSHOP_URL}/cart`,
201
+ actions: [
202
+ { type: 'goto', selector: '/cart' },
203
+ { type: 'wait', timeout: 2000 }
204
+ ]
205
+ }
206
+ ]
207
+ };
208
+
209
+ const packGenerator = new PackGenerator({
210
+ name: 'b2bshop-ui-tests',
211
+ timeout: 30000,
212
+ retries: 2
213
+ });
214
+
215
+ const result = packGenerator.generateFromUiSpec(uiSpec);
216
+
217
+ expect(result.success).toBe(true);
218
+ expect(result.yaml).toContain('version: 2');
219
+ expect(result.yaml).toContain('name: b2bshop-ui-tests');
220
+ expect(result.yaml).toContain('ui_smoke:');
221
+ expect(result.yaml).toContain('ui_full:');
222
+ expect(result.yaml).toContain(B2BSHOP_URL);
223
+ });
224
+
225
+ it('should generate B2BShop API pack from spec', () => {
226
+ const apiSpec: ApiTestSpec = {
227
+ type: 'api',
228
+ name: 'B2BShop API Tests',
229
+ baseUrl: `${B2BSHOP_URL}/api`,
230
+ endpoints: [
231
+ {
232
+ method: 'GET',
233
+ path: '/health',
234
+ description: 'Health check',
235
+ expectations: { status: 200 }
236
+ },
237
+ {
238
+ method: 'GET',
239
+ path: '/products',
240
+ description: 'List products',
241
+ expectations: { status: 200 }
242
+ }
243
+ ]
244
+ };
245
+
246
+ const packGenerator = new PackGenerator({
247
+ name: 'b2bshop-api-tests'
248
+ });
249
+
250
+ const result = packGenerator.generateFromApiSpec(apiSpec);
251
+
252
+ expect(result.success).toBe(true);
253
+ expect(result.yaml).toContain('b2bshop-api-tests');
254
+ expect(result.yaml).toContain('api_smoke:');
255
+ expect(result.yaml).toContain('/health');
256
+ expect(result.yaml).toContain('/products');
257
+ });
258
+
259
+ it('should save generated pack to file', () => {
260
+ const uiSpec: UiTestSpec = {
261
+ type: 'ui',
262
+ name: 'B2BShop Saved Pack',
263
+ baseUrl: B2BSHOP_URL,
264
+ pages: [
265
+ { name: 'Home', url: `${B2BSHOP_URL}/`, actions: [] }
266
+ ]
267
+ };
268
+
269
+ const packGenerator = new PackGenerator({ name: 'b2bshop-saved' });
270
+ const result = packGenerator.generateFromUiSpec(uiSpec);
271
+
272
+ // Save to file
273
+ const packPath = join(testDir, 'b2bshop-generated.yml');
274
+ writeFileSync(packPath, result.yaml, 'utf-8');
275
+
276
+ expect(existsSync(packPath)).toBe(true);
277
+
278
+ // Verify content
279
+ const content = readFileSync(packPath, 'utf-8');
280
+ expect(content).toContain('version: 2');
281
+ expect(content).toContain(B2BSHOP_URL);
282
+ });
283
+ });
284
+
285
+ describe.skipIf(!shouldRun)('AI-Powered Test Generation', () => {
286
+ it('should generate tests from B2BShop URL using Mock AI', async () => {
287
+ const mockProvider = new MockProvider({
288
+ model: 'mock-b2bshop-model',
289
+ responses: {
290
+ default: {
291
+ content: `import { test, expect } from '@playwright/test';
292
+
293
+ test.describe('B2BShop Generated Tests', () => {
294
+ test('homepage loads correctly', async ({ page }) => {
295
+ await page.goto('${B2BSHOP_URL}/');
296
+ await expect(page).toHaveTitle(/B2BShop/);
297
+ });
298
+
299
+ test('can navigate to catalog', async ({ page }) => {
300
+ await page.goto('${B2BSHOP_URL}/');
301
+ await page.click('a[href="/catalog"]');
302
+ await expect(page).toHaveURL(/.*catalog/);
303
+ });
304
+
305
+ test('product search works', async ({ page }) => {
306
+ await page.goto('${B2BSHOP_URL}/');
307
+ await page.fill('input[placeholder*="search"]', 'test product');
308
+ await page.click('button[type="submit"]');
309
+ await expect(page.locator('.product-list')).toBeVisible();
310
+ });
311
+ });`,
312
+ usage: { promptTokens: 150, completionTokens: 200, totalTokens: 350 },
313
+ model: 'mock-b2bshop-model',
314
+ finishReason: 'stop'
315
+ }
316
+ }
317
+ });
318
+
319
+ const codeGenerator = new CodeGenerator({
320
+ timeout: 10000,
321
+ temperature: 0.3
322
+ }) as any;
323
+ codeGenerator.provider = mockProvider;
324
+
325
+ const result = await codeGenerator.generateFromUrl(B2BSHOP_URL);
326
+
327
+ expect(result.success).toBe(true);
328
+ expect(result.tests).toHaveLength(1);
329
+ expect(result.tests[0].code).toContain('B2BShop');
330
+ expect(result.tests[0].code).toContain('homepage loads correctly');
331
+ expect(result.tests[0].code).toContain('can navigate to catalog');
332
+ expect(result.tests[0].framework).toBe('playwright');
333
+ });
334
+
335
+ it('should generate tests from B2BShop description', async () => {
336
+ const mockProvider = new MockProvider({
337
+ model: 'mock-description-model',
338
+ responses: {
339
+ default: {
340
+ content: `import { test, expect } from '@playwright/test';
341
+
342
+ test.describe('B2BShop API Tests', () => {
343
+ test('GET /api/health returns 200', async ({ request }) => {
344
+ const response = await request.get('${B2BSHOP_URL}/api/health');
345
+ expect(response.status()).toBe(200);
346
+ });
347
+
348
+ test('GET /api/products returns array', async ({ request }) => {
349
+ const response = await request.get('${B2BSHOP_URL}/api/products');
350
+ expect(response.status()).toBe(200);
351
+ const body = await response.json();
352
+ expect(Array.isArray(body.products)).toBe(true);
353
+ });
354
+ });`,
355
+ usage: { promptTokens: 100, completionTokens: 150, totalTokens: 250 },
356
+ model: 'mock-description-model',
357
+ finishReason: 'stop'
358
+ }
359
+ }
360
+ });
361
+
362
+ const codeGenerator = new CodeGenerator() as any;
363
+ codeGenerator.provider = mockProvider;
364
+
365
+ const description = `
366
+ Generate API tests for B2BShop e-commerce platform:
367
+ - Health check endpoint at /api/health
368
+ - Products listing at /api/products (returns array of products)
369
+ - Product details at /api/products/:id
370
+ - Cart operations at /api/cart
371
+ Include authentication and error handling.
372
+ `;
373
+
374
+ const result = await codeGenerator.generateFromDescription(description);
375
+
376
+ expect(result.success).toBe(true);
377
+ expect(result.tests[0].code).toContain('/api/health');
378
+ expect(result.tests[0].code).toContain('/api/products');
379
+ });
380
+ });
381
+
382
+ describe.skipIf(!shouldRun)('Full E2E Workflow', () => {
383
+ it('should complete full workflow: URL → Spec → Pack → Run', async () => {
384
+ // Step 1: Generate spec from URL (simulated)
385
+ const uiSpec: UiTestSpec = {
386
+ type: 'ui',
387
+ name: 'B2BShop E2E Workflow Test',
388
+ baseUrl: B2BSHOP_URL,
389
+ pages: [
390
+ {
391
+ name: 'Homepage',
392
+ url: `${B2BSHOP_URL}/`,
393
+ actions: [
394
+ { type: 'goto', selector: '/' },
395
+ { type: 'wait', timeout: 2000 },
396
+ { type: 'assert', selector: 'body', expected: 'visible' }
397
+ ]
398
+ }
399
+ ]
400
+ };
401
+
402
+ // Step 2: Generate pack from spec
403
+ const packGenerator = new PackGenerator({
404
+ name: 'b2bshop-e2e-workflow',
405
+ timeout: 30000,
406
+ retries: 1
407
+ });
408
+
409
+ const packResult = packGenerator.generateFromUiSpec(uiSpec);
410
+ expect(packResult.success).toBe(true);
411
+
412
+ // Step 3: Save pack to file
413
+ const packPath = join(testDir, 'b2bshop-workflow.yml');
414
+ writeFileSync(packPath, packResult.yaml, 'utf-8');
415
+
416
+ // Step 4: Load and validate pack
417
+ const yaml = readFileSync(packPath, 'utf-8');
418
+ expect(yaml).toContain('version: 2');
419
+ expect(yaml).toContain(B2BSHOP_URL);
420
+
421
+ // The pack is now ready to be executed
422
+ // In real scenario, we would run: qa360 run b2bshop-workflow.yml
423
+ expect(existsSync(packPath)).toBe(true);
424
+ }, NETWORK_TIMEOUT);
425
+
426
+ it('should generate comprehensive B2BShop test suite', async () => {
427
+ const packGenerator = new PackGenerator({
428
+ name: 'b2bshop-comprehensive',
429
+ timeout: 60000,
430
+ retries: 2
431
+ });
432
+
433
+ // Generate UI pack
434
+ const uiSpec: UiTestSpec = {
435
+ type: 'ui',
436
+ name: 'B2BShop Comprehensive UI',
437
+ baseUrl: B2BSHOP_URL,
438
+ viewport: { width: 1920, height: 1080 },
439
+ pages: [
440
+ { name: 'Homepage', url: `${B2BSHOP_URL}/`, actions: [] },
441
+ { name: 'Catalog', url: `${B2BSHOP_URL}/catalog`, actions: [] },
442
+ { name: 'Products', url: `${B2BSHOP_URL}/products`, actions: [] },
443
+ { name: 'Cart', url: `${B2BSHOP_URL}/cart`, actions: [] }
444
+ ]
445
+ };
446
+
447
+ const uiPack = packGenerator.generateFromUiSpec(uiSpec);
448
+ expect(uiPack.success).toBe(true);
449
+ expect(uiPack.yaml).toContain('ui_smoke:');
450
+ expect(uiPack.yaml).toContain('ui_full:');
451
+
452
+ // Generate API pack
453
+ const apiSpec: ApiTestSpec = {
454
+ type: 'api',
455
+ name: 'B2BShop Comprehensive API',
456
+ baseUrl: `${B2BSHOP_URL}/api`,
457
+ endpoints: [
458
+ { method: 'GET', path: '/health', expectations: { status: 200 } },
459
+ { method: 'GET', path: '/products', expectations: { status: 200 } },
460
+ { method: 'GET', path: '/products/:id', expectations: { status: 200 } }
461
+ ]
462
+ };
463
+
464
+ const apiPack = packGenerator.generateFromApiSpec(apiSpec);
465
+ expect(apiPack.success).toBe(true);
466
+ expect(apiPack.yaml).toContain('api_smoke:');
467
+
468
+ // Both packs should be valid
469
+ expect(uiPack.config.version).toBe(2);
470
+ expect(apiPack.config.version).toBe(2);
471
+ }, NETWORK_TIMEOUT);
472
+ });
473
+
474
+ describe.skipIf(!shouldRun)('Real Site Execution', () => {
475
+ beforeEach(async () => {
476
+ if (!shouldRun || !siteHealthy) return;
477
+ await skipIfE2ETargetUnhealthy('b2bshop');
478
+ });
479
+
480
+ it('should run generated B2BShop pack successfully', async () => {
481
+ // Create a minimal pack for B2BShop
482
+ const pack: PackConfigV2 = {
483
+ version: 2,
484
+ name: 'b2bshop-real-execution',
485
+ description: 'Generated B2BShop test pack',
486
+ gates: {
487
+ ui_smoke: {
488
+ adapter: 'playwright-ui',
489
+ enabled: true,
490
+ config: {
491
+ baseUrl: B2BSHOP_URL,
492
+ pages: [
493
+ `${B2BSHOP_URL}/`
494
+ ]
495
+ },
496
+ options: {
497
+ timeout: 30000,
498
+ retries: 2
499
+ },
500
+ budgets: {
501
+ a11y_min: 50
502
+ }
503
+ }
504
+ },
505
+ execution: {
506
+ parallel: false,
507
+ on_failure: 'continue'
508
+ }
509
+ };
510
+
511
+ const runner = new Phase3Runner({
512
+ workingDir: testDir,
513
+ pack
514
+ });
515
+
516
+ const result = await runner.run();
517
+
518
+ // Verify execution completed
519
+ expect(result).toBeDefined();
520
+ expect(result.gates).toHaveLength(1);
521
+
522
+ const gate = result.gates[0];
523
+ expect(gate.gate).toBe('ui_smoke');
524
+ expect(gate.status).toMatch(/^(passed|failed|skipped)$/);
525
+ expect(gate.duration).toBeGreaterThanOrEqual(0);
526
+
527
+ // Proof should be generated
528
+ if (result.proofPath) {
529
+ expect(existsSync(result.proofPath)).toBe(true);
530
+ }
531
+ }, NETWORK_TIMEOUT);
532
+
533
+ it('should handle multiple B2BShop pages in single run', async () => {
534
+ const pack: PackConfigV2 = {
535
+ version: 2,
536
+ name: 'b2bshop-multi-page',
537
+ gates: {
538
+ ui_pages: {
539
+ adapter: 'playwright-ui',
540
+ enabled: true,
541
+ config: {
542
+ baseUrl: B2BSHOP_URL,
543
+ pages: [
544
+ `${B2BSHOP_URL}/`,
545
+ `${B2BSHOP_URL}/catalog`,
546
+ `${B2BSHOP_URL}/products`
547
+ ]
548
+ },
549
+ options: {
550
+ timeout: 30000,
551
+ retries: 1
552
+ }
553
+ }
554
+ },
555
+ execution: {
556
+ parallel: false,
557
+ on_failure: 'continue'
558
+ }
559
+ };
560
+
561
+ const runner = new Phase3Runner({
562
+ workingDir: testDir,
563
+ pack
564
+ });
565
+
566
+ const result = await runner.run();
567
+
568
+ expect(result.gates).toHaveLength(1);
569
+ expect(result.gates[0].gate).toBe('ui_pages');
570
+ }, NETWORK_TIMEOUT * 2);
571
+ });
572
+
573
+ describe.skipIf(!shouldRun)('AI Generation Quality', () => {
574
+ it('should generate tests with proper assertions', async () => {
575
+ const mockProvider = new MockProvider({
576
+ model: 'quality-test',
577
+ responses: {
578
+ default: {
579
+ content: `import { test, expect } from '@playwright/test';
580
+
581
+ test('B2BShop homepage has expected elements', async ({ page }) => {
582
+ await page.goto('${B2BSHOP_URL}/');
583
+
584
+ // Check for navigation
585
+ await expect(page.locator('nav')).toBeVisible();
586
+
587
+ // Check for main content
588
+ await expect(page.locator('main')).toBeVisible();
589
+
590
+ // Check accessibility
591
+ const heading = page.locator('h1');
592
+ await expect(heading).toBeVisible();
593
+ });`,
594
+ usage: { promptTokens: 80, completionTokens: 120, totalTokens: 200 },
595
+ model: 'quality-test',
596
+ finishReason: 'stop'
597
+ }
598
+ }
599
+ });
600
+
601
+ const codeGenerator = new CodeGenerator() as any;
602
+ codeGenerator.provider = mockProvider;
603
+
604
+ const result = await codeGenerator.generateFromDescription(
605
+ 'Generate UI tests for B2BShop homepage with proper assertions'
606
+ );
607
+
608
+ expect(result.success).toBe(true);
609
+ expect(result.tests[0].code).toContain('expect');
610
+ expect(result.tests[0].code).toContain('toBeVisible');
611
+ });
612
+
613
+ it('should include error handling in generated tests', async () => {
614
+ const mockProvider = new MockProvider({
615
+ model: 'error-handling-test',
616
+ responses: {
617
+ default: {
618
+ content: `import { test, expect } from '@playwright/test';
619
+
620
+ test('API error handling', async ({ request }) => {
621
+ // Test 404 handling
622
+ const response = await request.get('${B2BSHOP_URL}/api/nonexistent');
623
+ expect(response.status()).toBe(404);
624
+
625
+ // Test error response format
626
+ const body = await response.json();
627
+ expect(body).toHaveProperty('error');
628
+ });`,
629
+ usage: { promptTokens: 60, completionTokens: 100, totalTokens: 160 },
630
+ model: 'error-handling-test',
631
+ finishReason: 'stop'
632
+ }
633
+ }
634
+ });
635
+
636
+ const codeGenerator = new CodeGenerator() as any;
637
+ codeGenerator.provider = mockProvider;
638
+
639
+ const result = await codeGenerator.generateFromDescription(
640
+ 'Generate API tests for B2BShop with error handling'
641
+ );
642
+
643
+ expect(result.success).toBe(true);
644
+ expect(result.tests[0].code).toContain('404');
645
+ expect(result.tests[0].code).toContain('error');
646
+ });
647
+ });
648
+ });
649
+
650
+ describe('B2BShop Test Data Generation', () => {
651
+ describe('Test Data Helpers', () => {
652
+ it('should provide realistic test data for B2BShop', () => {
653
+ const testData = {
654
+ products: [
655
+ { id: '1', name: 'Wireless Headphones', price: 79.99, category: 'Electronics' },
656
+ { id: '2', name: 'USB-C Cable', price: 12.99, category: 'Accessories' },
657
+ { id: '3', name: 'Laptop Stand', price: 45.00, category: 'Office' }
658
+ ],
659
+ users: [
660
+ { email: 'test@example.com', password: 'SecurePass123!', name: 'Test User' },
661
+ { email: 'admin@b2bshop.com', password: 'AdminPass123!', name: 'Admin User' }
662
+ ],
663
+ cart: {
664
+ items: [
665
+ { productId: '1', quantity: 2 },
666
+ { productId: '2', quantity: 1 }
667
+ ],
668
+ total: 172.97
669
+ }
670
+ };
671
+
672
+ expect(testData.products).toHaveLength(3);
673
+ expect(testData.users).toHaveLength(2);
674
+ expect(testData.cart.items).toHaveLength(2);
675
+ });
676
+
677
+ it('should generate test scenarios for B2BShop workflows', () => {
678
+ const workflows = [
679
+ {
680
+ name: 'Browse and Add to Cart',
681
+ steps: [
682
+ 'Navigate to homepage',
683
+ 'Browse catalog',
684
+ 'Select product',
685
+ 'Add to cart',
686
+ 'Verify cart count'
687
+ ]
688
+ },
689
+ {
690
+ name: 'User Registration',
691
+ steps: [
692
+ 'Navigate to registration',
693
+ 'Fill user details',
694
+ 'Submit form',
695
+ 'Verify success message',
696
+ 'Verify login capability'
697
+ ]
698
+ },
699
+ {
700
+ name: 'Checkout Process',
701
+ steps: [
702
+ 'Add items to cart',
703
+ 'Navigate to checkout',
704
+ 'Enter shipping details',
705
+ 'Select payment method',
706
+ 'Complete order',
707
+ 'Verify order confirmation'
708
+ ]
709
+ }
710
+ ];
711
+
712
+ expect(workflows).toHaveLength(3);
713
+ expect(workflows[0].steps).toHaveLength(5);
714
+ expect(workflows[1].steps).toHaveLength(5);
715
+ expect(workflows[2].steps).toHaveLength(6);
716
+ });
717
+ });
718
+ });