qa360 2.1.2 → 2.1.4

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 (866) hide show
  1. package/.BETA_TESTING_FEEDBACK.md +256 -0
  2. package/.claude/settings.local.json +151 -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 +62 -0
  25. package/check-branches.sh +32 -0
  26. package/cli/CHANGELOG.md +84 -0
  27. package/cli/LICENSE +24 -0
  28. package/cli/README.md +222 -0
  29. package/cli/examples/README.md +160 -0
  30. package/cli/package.json +76 -0
  31. package/cli/scripts/bundle-for-npm.sh +51 -0
  32. package/cli/scripts/validate-package.js +116 -0
  33. package/cli/src/__tests__/commands/doctor.test.ts +97 -0
  34. package/cli/src/__tests__/index.test.ts +15 -0
  35. package/cli/src/cli-minimal.ts +44 -0
  36. package/cli/src/commands/__tests__/crawl.test.ts +412 -0
  37. package/cli/src/commands/__tests__/doctor-qa360-home.test.ts +156 -0
  38. package/cli/src/commands/__tests__/e2e-ui-tests.test.ts +494 -0
  39. package/cli/src/commands/__tests__/e2e.test.ts +187 -0
  40. package/cli/src/commands/__tests__/flakiness.test.ts +528 -0
  41. package/cli/src/commands/__tests__/generate.test.ts +507 -0
  42. package/cli/src/commands/__tests__/history.integration.test.ts +358 -0
  43. package/cli/src/commands/__tests__/history.test.ts +433 -0
  44. package/cli/src/commands/__tests__/monitor-realworld.test.ts +199 -0
  45. package/cli/src/commands/__tests__/monitor.test.ts +81 -0
  46. package/cli/src/commands/__tests__/ollama.test.ts +529 -0
  47. package/cli/src/commands/__tests__/repair.test.ts +225 -0
  48. package/cli/src/commands/__tests__/report.integration.test.ts +167 -0
  49. package/cli/src/commands/__tests__/report.test.ts +294 -0
  50. package/cli/src/commands/__tests__/report.vitest.ts +288 -0
  51. package/cli/src/commands/__tests__/retry.test.ts +78 -0
  52. package/cli/src/commands/__tests__/run.integration.test.ts +240 -0
  53. package/cli/src/commands/__tests__/run.test.ts +346 -0
  54. package/cli/src/commands/__tests__/run.vitest.ts +301 -0
  55. package/cli/src/commands/__tests__/secrets.test.ts +114 -0
  56. package/cli/src/commands/__tests__/serve.test.ts +80 -0
  57. package/cli/src/commands/__tests__/verify.test.ts +103 -0
  58. package/cli/src/commands/ai.ts +579 -0
  59. package/cli/src/commands/ask.ts +678 -0
  60. package/cli/src/commands/coverage.ts +305 -0
  61. package/cli/src/commands/crawl.ts +155 -0
  62. package/cli/src/commands/doctor.ts +610 -0
  63. package/cli/src/commands/examples.ts +248 -0
  64. package/cli/src/commands/explain.ts +710 -0
  65. package/cli/src/commands/flakiness.ts +560 -0
  66. package/cli/src/commands/generate.ts +566 -0
  67. package/cli/src/commands/history.ts +914 -0
  68. package/cli/src/commands/init.ts +763 -0
  69. package/cli/src/commands/monitor.ts +270 -0
  70. package/cli/src/commands/ollama.ts +337 -0
  71. package/cli/src/commands/pack.ts +497 -0
  72. package/cli/src/commands/regression.ts +400 -0
  73. package/cli/src/commands/repair.ts +356 -0
  74. package/cli/src/commands/report.ts +463 -0
  75. package/cli/src/commands/retry.ts +380 -0
  76. package/cli/src/commands/run.ts +218 -0
  77. package/cli/src/commands/scan.ts +177 -0
  78. package/cli/src/commands/secrets.ts +340 -0
  79. package/cli/src/commands/serve.ts +194 -0
  80. package/cli/src/commands/slo.ts +387 -0
  81. package/cli/src/commands/verify-temp-note.md +11 -0
  82. package/cli/src/commands/verify.ts +322 -0
  83. package/cli/src/generators/index.ts +6 -0
  84. package/cli/src/generators/json-reporter.ts +15 -0
  85. package/cli/src/generators/test-generator.ts +90 -0
  86. package/cli/src/index.ts +289 -0
  87. package/cli/src/scanners/dom-scanner.ts +360 -0
  88. package/cli/src/scanners/index.ts +5 -0
  89. package/cli/src/types/scan.ts +84 -0
  90. package/cli/src/utils/config.ts +145 -0
  91. package/cli/tsconfig.bundle.json +12 -0
  92. package/cli/tsconfig.json +23 -0
  93. package/cli/vitest.config.ts +57 -0
  94. package/core/LICENSE +24 -0
  95. package/core/README.md +64 -0
  96. package/core/package.json +81 -0
  97. package/core/src/__tests__/adapters-contract/adapters-contract.test.md +156 -0
  98. package/core/src/__tests__/index.test.ts +31 -0
  99. package/core/src/__tests__/integration/phase3.test.ts +405 -0
  100. package/core/src/__tests__/pack/validator.test.ts +312 -0
  101. package/core/src/__tests__/secrets/crypto.test.ts +190 -0
  102. package/core/src/__tests__/secrets/manager.test.ts +316 -0
  103. package/core/src/__tests__/security/redactor-phase3.test.ts +233 -0
  104. package/core/src/__tests__/serve/health-checker.test.ts +155 -0
  105. package/core/src/__tests__/serve/process-manager.test.ts +213 -0
  106. package/core/src/__tests__/serve/server.test.ts +103 -0
  107. package/core/src/__tests__/vault/cas.test.ts +178 -0
  108. package/core/src/__tests__/vault/vault.test.ts +296 -0
  109. package/core/src/adapters/__tests__/gitleaks-secrets.test.ts +452 -0
  110. package/core/src/adapters/__tests__/k6-perf.test.ts +538 -0
  111. package/core/src/adapters/__tests__/osv-deps.test.ts +471 -0
  112. package/core/src/adapters/__tests__/playwright-native-api.test.ts +792 -0
  113. package/core/src/adapters/__tests__/playwright-ui-e2e.test.ts +431 -0
  114. package/core/src/adapters/__tests__/playwright-ui.test.ts +1073 -0
  115. package/core/src/adapters/__tests__/semgrep-sast.test.ts +436 -0
  116. package/core/src/adapters/__tests__/zap-dast.test.ts +453 -0
  117. package/core/src/adapters/gitleaks-secrets.ts +521 -0
  118. package/core/src/adapters/k6-perf.ts +479 -0
  119. package/core/src/adapters/osv-deps.ts +467 -0
  120. package/core/src/adapters/playwright-native-adapter.ts +472 -0
  121. package/core/src/adapters/playwright-native-api.ts +619 -0
  122. package/core/src/adapters/playwright-ui.ts +1088 -0
  123. package/core/src/adapters/semgrep-sast.ts +410 -0
  124. package/core/src/adapters/zap-dast.ts +551 -0
  125. package/core/src/ai/__tests__/deepseek-provider.test.ts +586 -0
  126. package/core/src/ai/__tests__/ollama-provider.test.ts +641 -0
  127. package/core/src/ai/anthropic-provider.ts +248 -0
  128. package/core/src/ai/deepseek-provider.ts +301 -0
  129. package/core/src/ai/index.ts +87 -0
  130. package/core/src/ai/llm-client.ts +52 -0
  131. package/core/src/ai/mock-provider.ts +146 -0
  132. package/core/src/ai/ollama-provider.ts +255 -0
  133. package/core/src/ai/openai-provider.ts +226 -0
  134. package/core/src/ai/provider-factory.ts +408 -0
  135. package/core/src/artifacts/README.md +78 -0
  136. package/core/src/artifacts/index.ts +16 -0
  137. package/core/src/artifacts/ui-artifacts.ts +412 -0
  138. package/core/src/assertions/__tests__/engine.test.ts +360 -0
  139. package/core/src/assertions/engine.ts +577 -0
  140. package/core/src/assertions/index.ts +13 -0
  141. package/core/src/assertions/types.ts +229 -0
  142. package/core/src/auth/__tests__/api-key-provider.test.ts +282 -0
  143. package/core/src/auth/__tests__/auth-manager.test.ts +430 -0
  144. package/core/src/auth/__tests__/basic-auth-provider.test.ts +364 -0
  145. package/core/src/auth/__tests__/cloud-providers.test.ts +751 -0
  146. package/core/src/auth/__tests__/jwt-provider.test.ts +400 -0
  147. package/core/src/auth/__tests__/oauth2-provider.test.ts +383 -0
  148. package/core/src/auth/__tests__/totp-provider.test.ts +294 -0
  149. package/core/src/auth/__tests__/ui-login-provider.test.ts +323 -0
  150. package/core/src/auth/api-key-provider.ts +75 -0
  151. package/core/src/auth/aws-iam-provider.ts +212 -0
  152. package/core/src/auth/azure-ad-provider.ts +126 -0
  153. package/core/src/auth/basic-auth-provider.ts +133 -0
  154. package/core/src/auth/gcp-adc-provider.ts +146 -0
  155. package/core/src/auth/index.ts +342 -0
  156. package/core/src/auth/jwt-provider.ts +193 -0
  157. package/core/src/auth/manager.ts +281 -0
  158. package/core/src/auth/oauth2-provider.ts +141 -0
  159. package/core/src/auth/totp-provider.ts +163 -0
  160. package/core/src/auth/ui-login-provider.ts +242 -0
  161. package/core/src/cache/__tests__/lru-cache.test.ts +564 -0
  162. package/core/src/cache/index.ts +13 -0
  163. package/core/src/cache/lru-cache.ts +536 -0
  164. package/core/src/crawler/__tests__/journey-generator.test.ts +344 -0
  165. package/core/src/crawler/__tests__/selector-generator.test.ts +211 -0
  166. package/core/src/crawler/index.ts +335 -0
  167. package/core/src/crawler/journey-generator.ts +471 -0
  168. package/core/src/crawler/page-analyzer.ts +857 -0
  169. package/core/src/crawler/selector-generator.ts +280 -0
  170. package/core/src/crawler/types.ts +475 -0
  171. package/core/src/dashboard/__tests__/real-world.test.ts +430 -0
  172. package/core/src/dashboard/__tests__/server.test.ts +283 -0
  173. package/core/src/dashboard/__tests__/types.test.ts +208 -0
  174. package/core/src/dashboard/assets.ts +692 -0
  175. package/core/src/dashboard/index.ts +17 -0
  176. package/core/src/dashboard/server.ts +401 -0
  177. package/core/src/dashboard/types.ts +78 -0
  178. package/core/src/discoverer/__tests__/test-discoverer.test.ts +444 -0
  179. package/core/src/discoverer/index.ts +374 -0
  180. package/core/src/flakiness/__tests__/flakiness.test.ts +554 -0
  181. package/core/src/flakiness/index.ts +536 -0
  182. package/core/src/generation/__tests__/code-formatter.test.ts +170 -0
  183. package/core/src/generation/__tests__/code-generator-contract.test.ts +207 -0
  184. package/core/src/generation/__tests__/code-generator.test.ts +586 -0
  185. package/core/src/generation/__tests__/crawler-pack-generator.test.ts +479 -0
  186. package/core/src/generation/__tests__/generation-e2e-b2bshop.test.ts +718 -0
  187. package/core/src/generation/__tests__/generation-integration.test.ts +655 -0
  188. package/core/src/generation/__tests__/pack-generator.test.ts +408 -0
  189. package/core/src/generation/__tests__/prompt-builder.test.ts +200 -0
  190. package/core/src/generation/__tests__/real-provider-integration.test.ts +414 -0
  191. package/core/src/generation/__tests__/source-analyzer.test.ts +774 -0
  192. package/core/src/generation/__tests__/test-optimizer.test.ts +255 -0
  193. package/core/src/generation/code-formatter.ts +408 -0
  194. package/core/src/generation/code-generator.ts +470 -0
  195. package/core/src/generation/crawler-pack-generator.ts +289 -0
  196. package/core/src/generation/generator.ts +113 -0
  197. package/core/src/generation/index.ts +59 -0
  198. package/core/src/generation/pack-generator.ts +527 -0
  199. package/core/src/generation/prompt-builder.ts +772 -0
  200. package/core/src/generation/source-analyzer.ts +830 -0
  201. package/core/src/generation/test-optimizer.ts +474 -0
  202. package/core/src/generation/types.ts +217 -0
  203. package/core/src/hooks/__tests__/compose.test.ts +636 -0
  204. package/core/src/hooks/__tests__/runner.test.ts +478 -0
  205. package/core/src/hooks/compose.ts +268 -0
  206. package/core/src/hooks/runner.ts +364 -0
  207. package/core/src/index.ts +237 -0
  208. package/core/src/pack/__tests__/migrator.test.ts +594 -0
  209. package/core/src/pack/__tests__/validator.test.ts +759 -0
  210. package/core/src/pack/migrator.ts +353 -0
  211. package/core/src/pack/validator.ts +359 -0
  212. package/core/src/pack-v2/__tests__/loader.test.ts +533 -0
  213. package/core/src/pack-v2/__tests__/migrator.test.ts +455 -0
  214. package/core/src/pack-v2/__tests__/validator.test.ts +549 -0
  215. package/core/src/pack-v2/index.ts +41 -0
  216. package/core/src/pack-v2/loader.ts +321 -0
  217. package/core/src/pack-v2/migrator.ts +540 -0
  218. package/core/src/pack-v2/validator.ts +673 -0
  219. package/core/src/parallel/README.md +143 -0
  220. package/core/src/parallel/index.ts +16 -0
  221. package/core/src/parallel/parallel-runner.ts +282 -0
  222. package/core/src/proof/__tests__/proof-roundtrip.test.ts +149 -0
  223. package/core/src/proof/__tests__/schema-validation-manual.mjs +211 -0
  224. package/core/src/proof/__tests__/schema-validation.test.ts +336 -0
  225. package/core/src/proof/__tests__/signer.test.ts +486 -0
  226. package/core/src/proof/__tests__/temporal-regression.test.ts +537 -0
  227. package/core/src/proof/__tests__/verifier-advanced.test.ts +588 -0
  228. package/core/src/proof/__tests__/verifier.test.ts +413 -0
  229. package/core/src/proof/bundle.ts +290 -0
  230. package/core/src/proof/canonicalize.ts +116 -0
  231. package/core/src/proof/index.ts +74 -0
  232. package/core/src/proof/schema.ts +285 -0
  233. package/core/src/proof/signer.ts +293 -0
  234. package/core/src/proof/verifier.ts +380 -0
  235. package/core/src/regression/__tests__/detector.test.ts +396 -0
  236. package/core/src/regression/__tests__/trend-analyzer.test.ts +300 -0
  237. package/core/src/regression/detector.ts +629 -0
  238. package/core/src/regression/index.ts +34 -0
  239. package/core/src/regression/trend-analyzer.ts +468 -0
  240. package/core/src/regression/types.ts +295 -0
  241. package/core/src/regression/vault.ts +419 -0
  242. package/core/src/repair/__tests__/repairer.test.ts +572 -0
  243. package/core/src/repair/__tests__/types.test.ts +302 -0
  244. package/core/src/repair/engine/__tests__/fixer.test.ts +482 -0
  245. package/core/src/repair/engine/__tests__/suggestion-engine.test.ts +395 -0
  246. package/core/src/repair/engine/fixer.ts +271 -0
  247. package/core/src/repair/engine/suggestion-engine.ts +234 -0
  248. package/core/src/repair/index.ts +53 -0
  249. package/core/src/repair/repairer.ts +376 -0
  250. package/core/src/repair/types.ts +119 -0
  251. package/core/src/repair/utils/__tests__/error-analyzer.test.ts +454 -0
  252. package/core/src/repair/utils/error-analyzer.ts +308 -0
  253. package/core/src/reporting/README.md +144 -0
  254. package/core/src/reporting/html-reporter.ts +835 -0
  255. package/core/src/reporting/index.ts +16 -0
  256. package/core/src/retry/README.md +192 -0
  257. package/core/src/retry/__tests__/flakiness-integration.test.ts +475 -0
  258. package/core/src/retry/__tests__/retry-engine.test.ts +424 -0
  259. package/core/src/retry/flakiness-integration.ts +267 -0
  260. package/core/src/retry/index.ts +48 -0
  261. package/core/src/retry/retry-engine.ts +368 -0
  262. package/core/src/retry/types.ts +208 -0
  263. package/core/src/retry/vault.ts +413 -0
  264. package/core/src/runner/__tests__/flakiness-integration.test.ts +566 -0
  265. package/core/src/runner/__tests__/phase3-e2e-b2bshop.test.ts +218 -0
  266. package/core/src/runner/__tests__/phase3-e2e-reqres.test.ts +199 -0
  267. package/core/src/runner/__tests__/phase3-runner.test.ts +1118 -0
  268. package/core/src/runner/e2e-helpers.ts +216 -0
  269. package/core/src/runner/phase3-runner.ts +1236 -0
  270. package/core/src/schemas/gherkin-report.json +122 -0
  271. package/core/src/secrets/__tests__/crypto.test.ts +180 -0
  272. package/core/src/secrets/crypto.ts +289 -0
  273. package/core/src/secrets/manager.ts +272 -0
  274. package/core/src/security/__tests__/hardening.test.ts +480 -0
  275. package/core/src/security/redaction-patterns-extended.ts +278 -0
  276. package/core/src/security/redactor.ts +326 -0
  277. package/core/src/self-healing/assertion-healer.ts +485 -0
  278. package/core/src/self-healing/engine.ts +626 -0
  279. package/core/src/self-healing/index.ts +33 -0
  280. package/core/src/self-healing/selector-healer.ts +488 -0
  281. package/core/src/self-healing/types.ts +193 -0
  282. package/core/src/serve/diagnostics-collector.ts +201 -0
  283. package/core/src/serve/health-checker.ts +274 -0
  284. package/core/src/serve/index.ts +9 -0
  285. package/core/src/serve/metrics-collector.ts +386 -0
  286. package/core/src/serve/process-manager.ts +265 -0
  287. package/core/src/serve/server.ts +230 -0
  288. package/core/src/slo/config.ts +408 -0
  289. package/core/src/slo/index.ts +68 -0
  290. package/core/src/slo/sli-calculator.ts +474 -0
  291. package/core/src/slo/slo-tracker.ts +481 -0
  292. package/core/src/slo/types.ts +408 -0
  293. package/core/src/slo/vault.ts +600 -0
  294. package/core/src/tui/__tests__/monitor.test.ts +336 -0
  295. package/core/src/tui/__tests__/real-world.test.ts +376 -0
  296. package/core/src/tui/__tests__/renderer.test.ts +201 -0
  297. package/core/src/tui/__tests__/types.test.ts +295 -0
  298. package/core/src/tui/index.ts +19 -0
  299. package/core/src/tui/monitor.ts +331 -0
  300. package/core/src/tui/renderer.ts +269 -0
  301. package/core/src/tui/types.ts +68 -0
  302. package/core/src/types/pack-v1.ts +305 -0
  303. package/core/src/types/pack-v2.ts +491 -0
  304. package/core/src/types/trust-score.ts +258 -0
  305. package/core/src/vault/__tests__/flakiness-vault.test.ts +562 -0
  306. package/core/src/vault/__tests__/vault.test.ts +259 -0
  307. package/core/src/vault/cas.ts +323 -0
  308. package/core/src/vault/index.ts +1361 -0
  309. package/core/src/vault/schema.sql +168 -0
  310. package/core/src/visual/README.md +185 -0
  311. package/core/src/visual/index.ts +14 -0
  312. package/core/src/visual/visual-regression.ts +347 -0
  313. package/core/src/watch/__tests__/watch-mode.test.ts +192 -0
  314. package/core/src/watch/index.ts +14 -0
  315. package/core/src/watch/watch-mode.ts +565 -0
  316. package/core/tsconfig.json +12 -0
  317. package/core/vitest.config.ts +52 -0
  318. package/docs/ARCHITECTURE.md +901 -0
  319. package/docs/AUDIT-GLOBAL-DEC2025.md +271 -0
  320. package/docs/BETA_TESTING.md +257 -0
  321. package/docs/BETA_TESTING_PLAN.md +727 -0
  322. package/docs/CERTIFICATION-REPORT.md +142 -0
  323. package/docs/COMPLETE_AUDIT_REFACTORING.md +965 -0
  324. package/docs/DEVELOPMENT.md +331 -0
  325. package/docs/DEVELOPMENT_HISTORY.md +345 -0
  326. package/docs/LIMITATIONS.md +176 -0
  327. package/docs/MIGRATION.md +303 -0
  328. package/docs/OPTION_3_4_EXPLORATION.md +1257 -0
  329. package/docs/PHASE1_PERFORMANCE.md +144 -0
  330. package/docs/QA360_Cloud.postman_collection.json +89 -0
  331. package/docs/README.md +50 -0
  332. package/docs/STATUS.md +179 -0
  333. package/docs/STRATEGIC_STUDY_GOOSE_INTEGRATION.md +615 -0
  334. package/docs/USER_GUIDE.md +687 -0
  335. package/docs/WORK-DONE-ADAPTER-TESTS.md +136 -0
  336. package/docs/adapters-security.md +485 -0
  337. package/docs/architecture-diagram.mmd +168 -0
  338. package/docs/archive/ARCH-01-DAY6-BUILD-FIXES.md +396 -0
  339. package/docs/archive/ARCH-01-DAY6-FINAL-STATUS.md +324 -0
  340. package/docs/archive/ARCH-01_MCP_MERGE_ANALYSIS.md +644 -0
  341. package/docs/archive/ARCH-01_NEXT_STEPS.md +60 -0
  342. package/docs/archive/BRANCH_PROTECTION.md +183 -0
  343. package/docs/archive/CI_LOCKDOWN_CHECKLIST.md +222 -0
  344. package/docs/archive/HANDOFF_TEST-01.md +669 -0
  345. package/docs/archive/LEGAL_READY_PLACEHOLDERS.md +372 -0
  346. package/docs/archive/NODE_UPGRADE_GUIDE.md +188 -0
  347. package/docs/archive/PHASE1_COMPLETION.md +386 -0
  348. package/docs/archive/PHASE2_COMPLETION.md +404 -0
  349. package/docs/archive/PHASE3_AND_4_FINAL.md +360 -0
  350. package/docs/archive/PHASE3_COMPLETE.md +301 -0
  351. package/docs/archive/PHASE3_STATUS.md +255 -0
  352. package/docs/archive/PRE-WEEK2-AUDIT.md +364 -0
  353. package/docs/archive/README.md +33 -0
  354. package/docs/archive/SCHEMA_AJV_2020_FIX.md +245 -0
  355. package/docs/archive/TEST-01_AUDIT_REPORT.md +240 -0
  356. package/docs/archive/TEST-01_COVERAGE_PLAN.md +423 -0
  357. package/docs/budgets-advanced.md +308 -0
  358. package/docs/examples/history-export-gc.md +285 -0
  359. package/docs/examples/pack-v2-complete.yaml +158 -0
  360. package/docs/examples/pack-v2-quickstart.yaml +24 -0
  361. package/docs/examples/pack-v2-ui-login.yaml +81 -0
  362. package/docs/examples/qa360-report.json +50 -0
  363. package/docs/history.md +565 -0
  364. package/docs/hooks.md +304 -0
  365. package/docs/llm-providers.md +419 -0
  366. package/docs/mcp-server.md +651 -0
  367. package/docs/mcp-tools.md +1131 -0
  368. package/docs/pack-v1.md +383 -0
  369. package/docs/pack-v2.md +558 -0
  370. package/docs/proofs.md +670 -0
  371. package/docs/quickstart-5min.md +257 -0
  372. package/docs/readiness-ci.md +654 -0
  373. package/docs/rfc/README.md +20 -0
  374. package/docs/rfc/proof-bundle-v1.md +787 -0
  375. package/docs/secrets.md +392 -0
  376. package/docs/serve.md +494 -0
  377. package/docs/vault.md +491 -0
  378. package/e2e/qa360-e2e.test.ts +696 -0
  379. package/e2e/vitest.config.ts +18 -0
  380. package/examples/README.md +30 -140
  381. package/examples/ci/docker-compose-serve.yml +375 -0
  382. package/examples/ci/github-actions-serve.yml +345 -0
  383. package/examples/ci/gitlab-ci-serve.yml +407 -0
  384. package/examples/datasets/README.md +101 -0
  385. package/examples/datasets/b2bshop.ts +155 -0
  386. package/examples/datasets/index.ts +57 -0
  387. package/examples/datasets/reqres.ts +195 -0
  388. package/examples/future-api/README.md +16 -0
  389. package/examples/future-api/diag.js +7 -0
  390. package/examples/future-api/health.js +4 -0
  391. package/examples/future-api/packs.js +13 -0
  392. package/examples/future-api/runpack.js +10 -0
  393. package/examples/generation/README.md +148 -0
  394. package/examples/generation/pack-generator-example.js +115 -0
  395. package/examples/generation/source-analyzer-example.js +115 -0
  396. package/examples/httpbin/pack.yml +59 -0
  397. package/examples/load-testing/mcp-load.yml +115 -0
  398. package/examples/load-testing/mcp-stdio.yml +95 -0
  399. package/examples/mcp/claude-desktop-config.json +33 -0
  400. package/examples/mcp/claude-desktop.json +16 -0
  401. package/examples/mcp/conversation-sample.md +131 -0
  402. package/examples/mcp/demo-60s.md +330 -0
  403. package/examples/mcp/sample-conversation.jsonl +21 -0
  404. package/examples/mcp/vscode-settings.json +22 -0
  405. package/examples/pack-v2-complete.yml +242 -0
  406. package/examples/pack-v2-examples.md +244 -0
  407. package/examples/pack-v2-quickstart.yml +55 -0
  408. package/examples/packs-business/ecommerce-api.yml +121 -0
  409. package/examples/packs-business/saas-dashboard-ui.yml +133 -0
  410. package/examples/packs-conformance/compose-multi.yml +174 -0
  411. package/examples/packs-conformance/full.yml +152 -0
  412. package/examples/packs-conformance/heavy-artifacts.yml +152 -0
  413. package/examples/packs-conformance/minimal.yml +71 -0
  414. package/examples/packs-conformance/secrets-missing.yml +97 -0
  415. package/examples/packs-conformance/timeouts.yml +77 -0
  416. package/examples/proofs/e2e-playwright-proof.json +75 -0
  417. package/examples/proofs/httpbin-proof.json +69 -0
  418. package/examples/proofs/multi-adapter-proof.json +117 -0
  419. package/examples/proofs/test-proof.json +26 -0
  420. package/examples/restful-api-dev/README.md +102 -0
  421. package/examples/restful-api-dev/restful-api-advanced.yml +29 -0
  422. package/examples/restful-api-dev/restful-api-basic.yml +29 -0
  423. package/examples/web-lite/.github/workflows/qa360-phase3.yml +73 -0
  424. package/examples/web-lite/api-mock/server.js +258 -0
  425. package/examples/web-lite/pack.yml +71 -0
  426. package/examples/web-lite/services.yml +43 -0
  427. package/examples/web-lite/web-content/healthz +1 -0
  428. package/examples/web-lite/web-content/index.html +259 -0
  429. package/package.json +55 -45
  430. package/packages/mcp/CHANGELOG.md +109 -0
  431. package/packages/mcp/IMPLEMENTATION_SUMMARY.md +350 -0
  432. package/packages/mcp/LICENSE +21 -0
  433. package/packages/mcp/QUICK_START.md +291 -0
  434. package/packages/mcp/README.md +294 -0
  435. package/packages/mcp/TELEMETRY.md +220 -0
  436. package/packages/mcp/package.json +92 -0
  437. package/packages/mcp/scripts/generate-sbom-fallback.cjs +84 -0
  438. package/packages/mcp/scripts/safe-postinstall.cjs +32 -0
  439. package/packages/mcp/src/__tests__/contract.test.ts +902 -0
  440. package/packages/mcp/src/cli/cli.ts +137 -0
  441. package/packages/mcp/src/cli/doctor.ts +286 -0
  442. package/packages/mcp/src/cli/fix.ts +99 -0
  443. package/packages/mcp/src/cli/init.ts +233 -0
  444. package/packages/mcp/src/cli/postinstall.ts +14 -0
  445. package/packages/mcp/src/cli/reset.ts +44 -0
  446. package/packages/mcp/src/cli/telemetry.ts +166 -0
  447. package/packages/mcp/src/cli/test-dx.ts +94 -0
  448. package/packages/mcp/src/cli/uninstall.ts +80 -0
  449. package/packages/mcp/src/cli/up.ts +178 -0
  450. package/packages/mcp/src/index.ts +12 -0
  451. package/packages/mcp/src/scripts/e2e-local.ts +337 -0
  452. package/packages/mcp/src/scripts/verify-settings.ts +242 -0
  453. package/packages/mcp/src/security/audit.ts +244 -0
  454. package/packages/mcp/src/security/manager.ts +242 -0
  455. package/packages/mcp/src/server/full-server.ts +212 -0
  456. package/packages/mcp/src/server/minimal-server.ts +134 -0
  457. package/packages/mcp/src/tools/history.ts +388 -0
  458. package/packages/mcp/src/tools/pack.ts +449 -0
  459. package/packages/mcp/src/tools/registry.ts +638 -0
  460. package/packages/mcp/src/tools/report.ts +100 -0
  461. package/packages/mcp/src/tools/run.ts +268 -0
  462. package/packages/mcp/src/tools/secrets.ts +198 -0
  463. package/packages/mcp/src/tools/serve.ts +221 -0
  464. package/packages/mcp/src/tools/triage.ts +532 -0
  465. package/packages/mcp/src/tools/types.ts +26 -0
  466. package/packages/mcp/src/tools/vault.ts +164 -0
  467. package/packages/mcp/src/tools/verify.ts +166 -0
  468. package/packages/mcp/src/types/index.ts +311 -0
  469. package/packages/mcp/src/types/mcp-stubs.ts +83 -0
  470. package/packages/mcp/tsconfig.json +16 -0
  471. package/playwright.config.ts +20 -0
  472. package/pnpm-workspace.yaml +4 -0
  473. package/run-test-and-push.sh +20 -0
  474. package/scripts/build-proof-cli.sh +110 -0
  475. package/scripts/ci/check-windows-paths.js +92 -0
  476. package/scripts/ci/invariants.sh +124 -0
  477. package/scripts/ci/make-final-bundle.js +106 -0
  478. package/scripts/ci/mcp-run-multipack.js +305 -0
  479. package/scripts/ci/run-pack-suite.sh +103 -0
  480. package/scripts/ci/run-phase7-final.sh +190 -0
  481. package/scripts/ci/slo-assert.js +158 -0
  482. package/scripts/ci/test-fault-tolerance.sh +301 -0
  483. package/scripts/install-mcp.sh +66 -0
  484. package/scripts/mcp-smoke.mjs +27 -0
  485. package/scripts/smoke.sh +26 -0
  486. package/scripts/stress-test.js +288 -0
  487. package/scripts/validate-examples.mjs +404 -0
  488. package/scripts/validation/simple-pack-check.sh +51 -0
  489. package/scripts/validation/validate-universal-pack.mjs +77 -0
  490. package/scripts/verify-persistence.js +127 -0
  491. package/test-pack.yaml +43 -0
  492. package/test-results/.last-run.json +4 -0
  493. package/test-runner.mjs +87 -0
  494. package/tests/artifacts.spec.js +147 -0
  495. package/tests/contracts.spec.js +239 -0
  496. package/tests/e2e/assertions.test.mjs +370 -0
  497. package/tests/e2e/crawler.test.mjs +451 -0
  498. package/tests/e2e/playwright-plus-plus.test.mjs +604 -0
  499. package/tests/e2e/proof-bundle.test.mjs +258 -0
  500. package/tests/e2e/real-world/saucedemo.test.mjs +714 -0
  501. package/tests/e2e/real-world/the-internet-herokuapp.test.mjs +760 -0
  502. package/tests/e2e/ui-actions.test.mjs +546 -0
  503. package/tests/gherkin.e2e.spec.ts +310 -0
  504. package/tests/no-console-errors.spec.js +136 -0
  505. package/tests/pdf.spec.ts +252 -0
  506. package/tests/run-pack.spec.ts +58 -0
  507. package/tsconfig.base.json +15 -0
  508. package/tsconfig.build.json +8 -0
  509. package/tsconfig.json +37 -0
  510. package/tsconfig.test.json +18 -0
  511. package/typedoc.json +37 -0
  512. package/ui/README.md +51 -0
  513. package/verify-proof.mjs +60 -0
  514. package/dist/cli-minimal.d.ts +0 -6
  515. package/dist/cli-minimal.js +0 -36
  516. package/dist/commands/ai.d.ts +0 -41
  517. package/dist/commands/ai.js +0 -511
  518. package/dist/commands/ask.d.ts +0 -94
  519. package/dist/commands/ask.js +0 -582
  520. package/dist/commands/coverage.d.ts +0 -8
  521. package/dist/commands/coverage.js +0 -252
  522. package/dist/commands/crawl.d.ts +0 -24
  523. package/dist/commands/crawl.js +0 -121
  524. package/dist/commands/doctor.d.ts +0 -54
  525. package/dist/commands/doctor.js +0 -513
  526. package/dist/commands/examples.d.ts +0 -33
  527. package/dist/commands/examples.js +0 -193
  528. package/dist/commands/explain.d.ts +0 -27
  529. package/dist/commands/explain.js +0 -630
  530. package/dist/commands/flakiness.d.ts +0 -73
  531. package/dist/commands/flakiness.js +0 -435
  532. package/dist/commands/generate.d.ts +0 -66
  533. package/dist/commands/generate.js +0 -438
  534. package/dist/commands/history.d.ts +0 -76
  535. package/dist/commands/history.js +0 -757
  536. package/dist/commands/init.d.ts +0 -106
  537. package/dist/commands/init.js +0 -599
  538. package/dist/commands/monitor.d.ts +0 -27
  539. package/dist/commands/monitor.js +0 -225
  540. package/dist/commands/ollama.d.ts +0 -40
  541. package/dist/commands/ollama.js +0 -301
  542. package/dist/commands/pack.d.ts +0 -70
  543. package/dist/commands/pack.js +0 -413
  544. package/dist/commands/regression.d.ts +0 -8
  545. package/dist/commands/regression.js +0 -340
  546. package/dist/commands/repair.d.ts +0 -26
  547. package/dist/commands/repair.js +0 -307
  548. package/dist/commands/report.d.ts +0 -62
  549. package/dist/commands/report.js +0 -378
  550. package/dist/commands/retry.d.ts +0 -43
  551. package/dist/commands/retry.js +0 -275
  552. package/dist/commands/run.d.ts +0 -41
  553. package/dist/commands/run.js +0 -169
  554. package/dist/commands/scan.d.ts +0 -5
  555. package/dist/commands/scan.js +0 -155
  556. package/dist/commands/secrets.d.ts +0 -58
  557. package/dist/commands/secrets.js +0 -289
  558. package/dist/commands/serve.d.ts +0 -13
  559. package/dist/commands/serve.js +0 -156
  560. package/dist/commands/slo.d.ts +0 -8
  561. package/dist/commands/slo.js +0 -327
  562. package/dist/commands/verify.d.ts +0 -32
  563. package/dist/commands/verify.js +0 -278
  564. package/dist/core/adapters/gitleaks-secrets.d.ts +0 -114
  565. package/dist/core/adapters/gitleaks-secrets.js +0 -410
  566. package/dist/core/adapters/k6-perf.d.ts +0 -85
  567. package/dist/core/adapters/k6-perf.js +0 -398
  568. package/dist/core/adapters/osv-deps.d.ts +0 -123
  569. package/dist/core/adapters/osv-deps.js +0 -372
  570. package/dist/core/adapters/playwright-native-adapter.d.ts +0 -121
  571. package/dist/core/adapters/playwright-native-adapter.js +0 -339
  572. package/dist/core/adapters/playwright-native-api.d.ts +0 -183
  573. package/dist/core/adapters/playwright-native-api.js +0 -461
  574. package/dist/core/adapters/playwright-ui.d.ts +0 -197
  575. package/dist/core/adapters/playwright-ui.js +0 -840
  576. package/dist/core/adapters/semgrep-sast.d.ts +0 -99
  577. package/dist/core/adapters/semgrep-sast.js +0 -322
  578. package/dist/core/adapters/zap-dast.d.ts +0 -133
  579. package/dist/core/adapters/zap-dast.js +0 -424
  580. package/dist/core/ai/anthropic-provider.d.ts +0 -50
  581. package/dist/core/ai/anthropic-provider.js +0 -211
  582. package/dist/core/ai/deepseek-provider.d.ts +0 -81
  583. package/dist/core/ai/deepseek-provider.js +0 -254
  584. package/dist/core/ai/index.d.ts +0 -60
  585. package/dist/core/ai/index.js +0 -18
  586. package/dist/core/ai/llm-client.d.ts +0 -45
  587. package/dist/core/ai/llm-client.js +0 -7
  588. package/dist/core/ai/mock-provider.d.ts +0 -49
  589. package/dist/core/ai/mock-provider.js +0 -121
  590. package/dist/core/ai/ollama-provider.d.ts +0 -78
  591. package/dist/core/ai/ollama-provider.js +0 -192
  592. package/dist/core/ai/openai-provider.d.ts +0 -48
  593. package/dist/core/ai/openai-provider.js +0 -188
  594. package/dist/core/ai/provider-factory.d.ts +0 -160
  595. package/dist/core/ai/provider-factory.js +0 -269
  596. package/dist/core/artifacts/index.d.ts +0 -6
  597. package/dist/core/artifacts/index.js +0 -6
  598. package/dist/core/artifacts/ui-artifacts.d.ts +0 -133
  599. package/dist/core/artifacts/ui-artifacts.js +0 -304
  600. package/dist/core/assertions/engine.d.ts +0 -51
  601. package/dist/core/assertions/engine.js +0 -530
  602. package/dist/core/assertions/index.d.ts +0 -11
  603. package/dist/core/assertions/index.js +0 -11
  604. package/dist/core/assertions/types.d.ts +0 -121
  605. package/dist/core/assertions/types.js +0 -37
  606. package/dist/core/auth/api-key-provider.d.ts +0 -16
  607. package/dist/core/auth/api-key-provider.js +0 -63
  608. package/dist/core/auth/aws-iam-provider.d.ts +0 -35
  609. package/dist/core/auth/aws-iam-provider.js +0 -177
  610. package/dist/core/auth/azure-ad-provider.d.ts +0 -15
  611. package/dist/core/auth/azure-ad-provider.js +0 -99
  612. package/dist/core/auth/basic-auth-provider.d.ts +0 -26
  613. package/dist/core/auth/basic-auth-provider.js +0 -111
  614. package/dist/core/auth/gcp-adc-provider.d.ts +0 -27
  615. package/dist/core/auth/gcp-adc-provider.js +0 -126
  616. package/dist/core/auth/index.d.ts +0 -238
  617. package/dist/core/auth/index.js +0 -82
  618. package/dist/core/auth/jwt-provider.d.ts +0 -19
  619. package/dist/core/auth/jwt-provider.js +0 -160
  620. package/dist/core/auth/manager.d.ts +0 -84
  621. package/dist/core/auth/manager.js +0 -230
  622. package/dist/core/auth/oauth2-provider.d.ts +0 -17
  623. package/dist/core/auth/oauth2-provider.js +0 -114
  624. package/dist/core/auth/totp-provider.d.ts +0 -31
  625. package/dist/core/auth/totp-provider.js +0 -134
  626. package/dist/core/auth/ui-login-provider.d.ts +0 -26
  627. package/dist/core/auth/ui-login-provider.js +0 -198
  628. package/dist/core/cache/index.d.ts +0 -7
  629. package/dist/core/cache/index.js +0 -6
  630. package/dist/core/cache/lru-cache.d.ts +0 -203
  631. package/dist/core/cache/lru-cache.js +0 -397
  632. package/dist/core/core/coverage/analyzer.d.ts +0 -101
  633. package/dist/core/core/coverage/analyzer.js +0 -415
  634. package/dist/core/core/coverage/collector.d.ts +0 -74
  635. package/dist/core/core/coverage/collector.js +0 -459
  636. package/dist/core/core/coverage/config.d.ts +0 -37
  637. package/dist/core/core/coverage/config.js +0 -156
  638. package/dist/core/core/coverage/index.d.ts +0 -11
  639. package/dist/core/core/coverage/index.js +0 -15
  640. package/dist/core/core/coverage/types.d.ts +0 -267
  641. package/dist/core/core/coverage/types.js +0 -6
  642. package/dist/core/core/coverage/vault.d.ts +0 -95
  643. package/dist/core/core/coverage/vault.js +0 -405
  644. package/dist/core/coverage/analyzer.d.ts +0 -101
  645. package/dist/core/coverage/analyzer.js +0 -415
  646. package/dist/core/coverage/collector.d.ts +0 -74
  647. package/dist/core/coverage/collector.js +0 -459
  648. package/dist/core/coverage/config.d.ts +0 -37
  649. package/dist/core/coverage/config.js +0 -156
  650. package/dist/core/coverage/index.d.ts +0 -11
  651. package/dist/core/coverage/index.js +0 -15
  652. package/dist/core/coverage/types.d.ts +0 -267
  653. package/dist/core/coverage/types.js +0 -6
  654. package/dist/core/coverage/vault.d.ts +0 -95
  655. package/dist/core/coverage/vault.js +0 -405
  656. package/dist/core/crawler/index.d.ts +0 -57
  657. package/dist/core/crawler/index.js +0 -281
  658. package/dist/core/crawler/journey-generator.d.ts +0 -49
  659. package/dist/core/crawler/journey-generator.js +0 -412
  660. package/dist/core/crawler/page-analyzer.d.ts +0 -88
  661. package/dist/core/crawler/page-analyzer.js +0 -709
  662. package/dist/core/crawler/selector-generator.d.ts +0 -34
  663. package/dist/core/crawler/selector-generator.js +0 -240
  664. package/dist/core/crawler/types.d.ts +0 -353
  665. package/dist/core/crawler/types.js +0 -6
  666. package/dist/core/dashboard/assets.d.ts +0 -6
  667. package/dist/core/dashboard/assets.js +0 -690
  668. package/dist/core/dashboard/index.d.ts +0 -6
  669. package/dist/core/dashboard/index.js +0 -5
  670. package/dist/core/dashboard/server.d.ts +0 -72
  671. package/dist/core/dashboard/server.js +0 -354
  672. package/dist/core/dashboard/types.d.ts +0 -70
  673. package/dist/core/dashboard/types.js +0 -5
  674. package/dist/core/discoverer/index.d.ts +0 -115
  675. package/dist/core/discoverer/index.js +0 -250
  676. package/dist/core/flakiness/index.d.ts +0 -228
  677. package/dist/core/flakiness/index.js +0 -384
  678. package/dist/core/generation/code-formatter.d.ts +0 -111
  679. package/dist/core/generation/code-formatter.js +0 -307
  680. package/dist/core/generation/code-generator.d.ts +0 -144
  681. package/dist/core/generation/code-generator.js +0 -293
  682. package/dist/core/generation/crawler-pack-generator.d.ts +0 -44
  683. package/dist/core/generation/crawler-pack-generator.js +0 -231
  684. package/dist/core/generation/generator.d.ts +0 -40
  685. package/dist/core/generation/generator.js +0 -76
  686. package/dist/core/generation/index.d.ts +0 -32
  687. package/dist/core/generation/index.js +0 -30
  688. package/dist/core/generation/pack-generator.d.ts +0 -107
  689. package/dist/core/generation/pack-generator.js +0 -416
  690. package/dist/core/generation/prompt-builder.d.ts +0 -132
  691. package/dist/core/generation/prompt-builder.js +0 -672
  692. package/dist/core/generation/source-analyzer.d.ts +0 -213
  693. package/dist/core/generation/source-analyzer.js +0 -657
  694. package/dist/core/generation/test-optimizer.d.ts +0 -117
  695. package/dist/core/generation/test-optimizer.js +0 -328
  696. package/dist/core/generation/types.d.ts +0 -214
  697. package/dist/core/generation/types.js +0 -4
  698. package/dist/core/hooks/compose.d.ts +0 -61
  699. package/dist/core/hooks/compose.js +0 -225
  700. package/dist/core/hooks/runner.d.ts +0 -68
  701. package/dist/core/hooks/runner.js +0 -303
  702. package/dist/core/index.d.ts +0 -104
  703. package/dist/core/index.js +0 -91
  704. package/dist/core/pack/migrator.d.ts +0 -51
  705. package/dist/core/pack/migrator.js +0 -304
  706. package/dist/core/pack/validator.d.ts +0 -42
  707. package/dist/core/pack/validator.js +0 -322
  708. package/dist/core/pack-v2/index.d.ts +0 -9
  709. package/dist/core/pack-v2/index.js +0 -8
  710. package/dist/core/pack-v2/loader.d.ts +0 -62
  711. package/dist/core/pack-v2/loader.js +0 -259
  712. package/dist/core/pack-v2/migrator.d.ts +0 -61
  713. package/dist/core/pack-v2/migrator.js +0 -480
  714. package/dist/core/pack-v2/validator.d.ts +0 -61
  715. package/dist/core/pack-v2/validator.js +0 -577
  716. package/dist/core/parallel/index.d.ts +0 -6
  717. package/dist/core/parallel/index.js +0 -6
  718. package/dist/core/parallel/parallel-runner.d.ts +0 -107
  719. package/dist/core/parallel/parallel-runner.js +0 -192
  720. package/dist/core/proof/bundle.d.ts +0 -137
  721. package/dist/core/proof/bundle.js +0 -160
  722. package/dist/core/proof/canonicalize.d.ts +0 -47
  723. package/dist/core/proof/canonicalize.js +0 -105
  724. package/dist/core/proof/index.d.ts +0 -13
  725. package/dist/core/proof/index.js +0 -18
  726. package/dist/core/proof/schema.d.ts +0 -217
  727. package/dist/core/proof/schema.js +0 -263
  728. package/dist/core/proof/signer.d.ts +0 -111
  729. package/dist/core/proof/signer.js +0 -226
  730. package/dist/core/proof/verifier.d.ts +0 -97
  731. package/dist/core/proof/verifier.js +0 -308
  732. package/dist/core/regression/detector.d.ts +0 -107
  733. package/dist/core/regression/detector.js +0 -497
  734. package/dist/core/regression/index.d.ts +0 -9
  735. package/dist/core/regression/index.js +0 -11
  736. package/dist/core/regression/trend-analyzer.d.ts +0 -102
  737. package/dist/core/regression/trend-analyzer.js +0 -345
  738. package/dist/core/regression/types.d.ts +0 -222
  739. package/dist/core/regression/types.js +0 -7
  740. package/dist/core/regression/vault.d.ts +0 -87
  741. package/dist/core/regression/vault.js +0 -289
  742. package/dist/core/repair/engine/fixer.d.ts +0 -24
  743. package/dist/core/repair/engine/fixer.js +0 -226
  744. package/dist/core/repair/engine/suggestion-engine.d.ts +0 -18
  745. package/dist/core/repair/engine/suggestion-engine.js +0 -187
  746. package/dist/core/repair/index.d.ts +0 -10
  747. package/dist/core/repair/index.js +0 -13
  748. package/dist/core/repair/repairer.d.ts +0 -90
  749. package/dist/core/repair/repairer.js +0 -284
  750. package/dist/core/repair/types.d.ts +0 -91
  751. package/dist/core/repair/types.js +0 -6
  752. package/dist/core/repair/utils/error-analyzer.d.ts +0 -28
  753. package/dist/core/repair/utils/error-analyzer.js +0 -264
  754. package/dist/core/reporting/html-reporter.d.ts +0 -119
  755. package/dist/core/reporting/html-reporter.js +0 -737
  756. package/dist/core/reporting/index.d.ts +0 -6
  757. package/dist/core/reporting/index.js +0 -6
  758. package/dist/core/retry/flakiness-integration.d.ts +0 -60
  759. package/dist/core/retry/flakiness-integration.js +0 -228
  760. package/dist/core/retry/index.d.ts +0 -14
  761. package/dist/core/retry/index.js +0 -16
  762. package/dist/core/retry/retry-engine.d.ts +0 -80
  763. package/dist/core/retry/retry-engine.js +0 -296
  764. package/dist/core/retry/types.d.ts +0 -178
  765. package/dist/core/retry/types.js +0 -52
  766. package/dist/core/retry/vault.d.ts +0 -77
  767. package/dist/core/retry/vault.js +0 -304
  768. package/dist/core/runner/e2e-helpers.d.ts +0 -102
  769. package/dist/core/runner/e2e-helpers.js +0 -153
  770. package/dist/core/runner/phase3-runner.d.ts +0 -200
  771. package/dist/core/runner/phase3-runner.js +0 -1039
  772. package/dist/core/secrets/crypto.d.ts +0 -75
  773. package/dist/core/secrets/crypto.js +0 -223
  774. package/dist/core/secrets/manager.d.ts +0 -76
  775. package/dist/core/secrets/manager.js +0 -219
  776. package/dist/core/security/redaction-patterns-extended.d.ts +0 -27
  777. package/dist/core/security/redaction-patterns-extended.js +0 -247
  778. package/dist/core/security/redactor.d.ts +0 -71
  779. package/dist/core/security/redactor.js +0 -279
  780. package/dist/core/self-healing/assertion-healer.d.ts +0 -97
  781. package/dist/core/self-healing/assertion-healer.js +0 -371
  782. package/dist/core/self-healing/engine.d.ts +0 -122
  783. package/dist/core/self-healing/engine.js +0 -538
  784. package/dist/core/self-healing/index.d.ts +0 -10
  785. package/dist/core/self-healing/index.js +0 -11
  786. package/dist/core/self-healing/selector-healer.d.ts +0 -103
  787. package/dist/core/self-healing/selector-healer.js +0 -372
  788. package/dist/core/self-healing/types.d.ts +0 -152
  789. package/dist/core/self-healing/types.js +0 -6
  790. package/dist/core/serve/diagnostics-collector.d.ts +0 -32
  791. package/dist/core/serve/diagnostics-collector.js +0 -149
  792. package/dist/core/serve/health-checker.d.ts +0 -44
  793. package/dist/core/serve/health-checker.js +0 -219
  794. package/dist/core/serve/index.d.ts +0 -8
  795. package/dist/core/serve/index.js +0 -8
  796. package/dist/core/serve/metrics-collector.d.ts +0 -24
  797. package/dist/core/serve/metrics-collector.js +0 -322
  798. package/dist/core/serve/process-manager.d.ts +0 -36
  799. package/dist/core/serve/process-manager.js +0 -213
  800. package/dist/core/serve/server.d.ts +0 -36
  801. package/dist/core/serve/server.js +0 -191
  802. package/dist/core/slo/config.d.ts +0 -107
  803. package/dist/core/slo/config.js +0 -360
  804. package/dist/core/slo/index.d.ts +0 -11
  805. package/dist/core/slo/index.js +0 -15
  806. package/dist/core/slo/sli-calculator.d.ts +0 -92
  807. package/dist/core/slo/sli-calculator.js +0 -364
  808. package/dist/core/slo/slo-tracker.d.ts +0 -148
  809. package/dist/core/slo/slo-tracker.js +0 -379
  810. package/dist/core/slo/types.d.ts +0 -281
  811. package/dist/core/slo/types.js +0 -7
  812. package/dist/core/slo/vault.d.ts +0 -102
  813. package/dist/core/slo/vault.js +0 -427
  814. package/dist/core/tui/index.d.ts +0 -7
  815. package/dist/core/tui/index.js +0 -6
  816. package/dist/core/tui/monitor.d.ts +0 -92
  817. package/dist/core/tui/monitor.js +0 -271
  818. package/dist/core/tui/renderer.d.ts +0 -33
  819. package/dist/core/tui/renderer.js +0 -218
  820. package/dist/core/tui/types.d.ts +0 -63
  821. package/dist/core/tui/types.js +0 -5
  822. package/dist/core/types/pack-v1.d.ts +0 -251
  823. package/dist/core/types/pack-v1.js +0 -5
  824. package/dist/core/types/pack-v2.d.ts +0 -425
  825. package/dist/core/types/pack-v2.js +0 -8
  826. package/dist/core/types/trust-score.d.ts +0 -69
  827. package/dist/core/types/trust-score.js +0 -191
  828. package/dist/core/vault/cas.d.ts +0 -90
  829. package/dist/core/vault/cas.js +0 -261
  830. package/dist/core/vault/index.d.ts +0 -326
  831. package/dist/core/vault/index.js +0 -1042
  832. package/dist/core/visual/index.d.ts +0 -6
  833. package/dist/core/visual/index.js +0 -6
  834. package/dist/core/visual/visual-regression.d.ts +0 -113
  835. package/dist/core/visual/visual-regression.js +0 -236
  836. package/dist/core/watch/index.d.ts +0 -7
  837. package/dist/core/watch/index.js +0 -6
  838. package/dist/core/watch/watch-mode.d.ts +0 -213
  839. package/dist/core/watch/watch-mode.js +0 -389
  840. package/dist/generators/index.d.ts +0 -5
  841. package/dist/generators/index.js +0 -5
  842. package/dist/generators/json-reporter.d.ts +0 -10
  843. package/dist/generators/json-reporter.js +0 -12
  844. package/dist/generators/test-generator.d.ts +0 -18
  845. package/dist/generators/test-generator.js +0 -78
  846. package/dist/index.d.ts +0 -8
  847. package/dist/index.js +0 -246
  848. package/dist/scanners/dom-scanner.d.ts +0 -52
  849. package/dist/scanners/dom-scanner.js +0 -296
  850. package/dist/scanners/index.d.ts +0 -4
  851. package/dist/scanners/index.js +0 -4
  852. package/dist/schemas/pack.schema.json +0 -236
  853. package/dist/types/scan.d.ts +0 -68
  854. package/dist/types/scan.js +0 -4
  855. package/dist/utils/config.d.ts +0 -5
  856. package/dist/utils/config.js +0 -136
  857. /package/{bin → cli/bin}/qa360.js +0 -0
  858. /package/{examples → cli/examples}/accessibility.yml +0 -0
  859. /package/{examples → cli/examples}/api-basic.yml +0 -0
  860. /package/{examples → cli/examples}/complete.yml +0 -0
  861. /package/{examples → cli/examples}/crawler.yml +0 -0
  862. /package/{examples → cli/examples}/fullstack.yml +0 -0
  863. /package/{examples → cli/examples}/security.yml +0 -0
  864. /package/{examples → cli/examples}/ui-advanced.yml +0 -0
  865. /package/{examples → cli/examples}/ui-basic.yml +0 -0
  866. /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
+ });