@agentic-qe/v3 3.0.0-alpha.6 → 3.0.0-alpha.7

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 (609) hide show
  1. package/assets/agents/v3/subagents/v3-qe-code-reviewer.md +339 -0
  2. package/assets/agents/v3/subagents/v3-qe-integration-reviewer.md +344 -0
  3. package/assets/agents/v3/subagents/v3-qe-performance-reviewer.md +351 -0
  4. package/assets/agents/v3/subagents/v3-qe-security-reviewer.md +374 -0
  5. package/assets/agents/v3/subagents/v3-qe-tdd-green.md +334 -0
  6. package/assets/agents/v3/subagents/v3-qe-tdd-red.md +329 -0
  7. package/assets/agents/v3/subagents/v3-qe-tdd-refactor.md +361 -0
  8. package/assets/agents/v3/v3-qe-accessibility-auditor.md +266 -0
  9. package/assets/agents/v3/v3-qe-bdd-generator.md +279 -0
  10. package/assets/agents/v3/v3-qe-chaos-engineer.md +265 -0
  11. package/assets/agents/v3/v3-qe-code-complexity.md +298 -0
  12. package/assets/agents/v3/v3-qe-code-intelligence.md +262 -0
  13. package/assets/agents/v3/v3-qe-contract-validator.md +267 -0
  14. package/assets/agents/v3/v3-qe-coverage-specialist.md +227 -0
  15. package/assets/agents/v3/v3-qe-defect-predictor.md +251 -0
  16. package/assets/agents/v3/v3-qe-dependency-mapper.md +277 -0
  17. package/assets/agents/v3/v3-qe-deployment-advisor.md +275 -0
  18. package/assets/agents/v3/v3-qe-flaky-hunter.md +248 -0
  19. package/assets/agents/v3/v3-qe-fleet-commander.md +293 -0
  20. package/assets/agents/v3/v3-qe-gap-detector.md +260 -0
  21. package/assets/agents/v3/v3-qe-graphql-tester.md +308 -0
  22. package/assets/agents/v3/v3-qe-impact-analyzer.md +299 -0
  23. package/assets/agents/v3/v3-qe-integration-tester.md +238 -0
  24. package/assets/agents/v3/v3-qe-kg-builder.md +273 -0
  25. package/assets/agents/v3/v3-qe-learning-coordinator.md +226 -0
  26. package/assets/agents/v3/v3-qe-load-tester.md +280 -0
  27. package/assets/agents/v3/v3-qe-metrics-optimizer.md +300 -0
  28. package/assets/agents/v3/v3-qe-mutation-tester.md +301 -0
  29. package/assets/agents/v3/v3-qe-parallel-executor.md +240 -0
  30. package/assets/agents/v3/v3-qe-pattern-learner.md +271 -0
  31. package/assets/agents/v3/v3-qe-performance-tester.md +262 -0
  32. package/assets/agents/v3/v3-qe-property-tester.md +247 -0
  33. package/assets/agents/v3/v3-qe-quality-gate.md +218 -0
  34. package/assets/agents/v3/v3-qe-queen-coordinator.md +214 -0
  35. package/assets/agents/v3/v3-qe-qx-partner.md +313 -0
  36. package/assets/agents/v3/v3-qe-regression-analyzer.md +322 -0
  37. package/assets/agents/v3/v3-qe-requirements-validator.md +360 -0
  38. package/assets/agents/v3/v3-qe-responsive-tester.md +311 -0
  39. package/assets/agents/v3/v3-qe-retry-handler.md +256 -0
  40. package/assets/agents/v3/v3-qe-risk-assessor.md +273 -0
  41. package/assets/agents/v3/v3-qe-root-cause-analyzer.md +286 -0
  42. package/assets/agents/v3/v3-qe-security-auditor.md +299 -0
  43. package/assets/agents/v3/v3-qe-security-scanner.md +235 -0
  44. package/assets/agents/v3/v3-qe-tdd-specialist.md +239 -0
  45. package/assets/agents/v3/v3-qe-test-architect.md +233 -0
  46. package/assets/agents/v3/v3-qe-transfer-specialist.md +295 -0
  47. package/assets/agents/v3/v3-qe-visual-tester.md +232 -0
  48. package/assets/skills/accessibility-testing/SKILL.md +216 -0
  49. package/assets/skills/agentdb-advanced/SKILL.md +550 -0
  50. package/assets/skills/agentdb-learning/SKILL.md +545 -0
  51. package/assets/skills/agentdb-memory-patterns/SKILL.md +339 -0
  52. package/assets/skills/agentdb-optimization/SKILL.md +509 -0
  53. package/assets/skills/agentdb-vector-search/SKILL.md +339 -0
  54. package/assets/skills/agentic-jujutsu/SKILL.md +645 -0
  55. package/assets/skills/agentic-quality-engineering/SKILL.md +335 -0
  56. package/assets/skills/api-testing-patterns/SKILL.md +294 -0
  57. package/assets/skills/aqe-v2-v3-migration/skill.md +322 -0
  58. package/assets/skills/brutal-honesty-review/README.md +218 -0
  59. package/assets/skills/brutal-honesty-review/SKILL.md +235 -0
  60. package/assets/skills/brutal-honesty-review/resources/assessment-rubrics.md +295 -0
  61. package/assets/skills/brutal-honesty-review/resources/review-template.md +102 -0
  62. package/assets/skills/brutal-honesty-review/scripts/assess-code.sh +179 -0
  63. package/assets/skills/brutal-honesty-review/scripts/assess-tests.sh +223 -0
  64. package/assets/skills/bug-reporting-excellence/SKILL.md +225 -0
  65. package/assets/skills/chaos-engineering-resilience/SKILL.md +158 -0
  66. package/assets/skills/cicd-pipeline-qe-orchestrator/README.md +304 -0
  67. package/assets/skills/cicd-pipeline-qe-orchestrator/SKILL.md +315 -0
  68. package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/microservice-pipeline.md +239 -0
  69. package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/mobile-pipeline.md +375 -0
  70. package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/monolith-pipeline.md +268 -0
  71. package/assets/skills/code-review-quality/SKILL.md +227 -0
  72. package/assets/skills/compatibility-testing/SKILL.md +205 -0
  73. package/assets/skills/compliance-testing/SKILL.md +225 -0
  74. package/assets/skills/consultancy-practices/SKILL.md +202 -0
  75. package/assets/skills/context-driven-testing/SKILL.md +196 -0
  76. package/assets/skills/contract-testing/SKILL.md +222 -0
  77. package/assets/skills/database-testing/SKILL.md +244 -0
  78. package/assets/skills/exploratory-testing-advanced/SKILL.md +201 -0
  79. package/assets/skills/flow-nexus-neural/SKILL.md +738 -0
  80. package/assets/skills/flow-nexus-platform/SKILL.md +1157 -0
  81. package/assets/skills/flow-nexus-swarm/SKILL.md +610 -0
  82. package/assets/skills/github-code-review/SKILL.md +1140 -0
  83. package/assets/skills/github-multi-repo/SKILL.md +874 -0
  84. package/assets/skills/github-project-management/SKILL.md +1277 -0
  85. package/assets/skills/github-release-management/SKILL.md +1081 -0
  86. package/assets/skills/github-workflow-automation/SKILL.md +1065 -0
  87. package/assets/skills/hive-mind-advanced/SKILL.md +712 -0
  88. package/assets/skills/holistic-testing-pact/SKILL.md +171 -0
  89. package/assets/skills/hooks-automation/SKILL.md +1201 -0
  90. package/assets/skills/localization-testing/SKILL.md +221 -0
  91. package/assets/skills/mobile-testing/SKILL.md +219 -0
  92. package/assets/skills/mutation-testing/SKILL.md +229 -0
  93. package/assets/skills/n8n-expression-testing/SKILL.md +434 -0
  94. package/assets/skills/n8n-integration-testing-patterns/SKILL.md +540 -0
  95. package/assets/skills/n8n-security-testing/SKILL.md +599 -0
  96. package/assets/skills/n8n-trigger-testing-strategies/SKILL.md +541 -0
  97. package/assets/skills/n8n-workflow-testing-fundamentals/SKILL.md +447 -0
  98. package/assets/skills/pair-programming/SKILL.md +1202 -0
  99. package/assets/skills/performance-analysis/SKILL.md +563 -0
  100. package/assets/skills/performance-testing/SKILL.md +310 -0
  101. package/assets/skills/quality-metrics/SKILL.md +225 -0
  102. package/assets/skills/reasoningbank-agentdb/SKILL.md +446 -0
  103. package/assets/skills/reasoningbank-intelligence/SKILL.md +201 -0
  104. package/assets/skills/refactoring-patterns/SKILL.md +205 -0
  105. package/assets/skills/regression-testing/SKILL.md +227 -0
  106. package/assets/skills/risk-based-testing/SKILL.md +206 -0
  107. package/assets/skills/security-testing/SKILL.md +306 -0
  108. package/assets/skills/sherlock-review/SKILL.md +250 -0
  109. package/assets/skills/shift-left-testing/SKILL.md +225 -0
  110. package/assets/skills/shift-right-testing/SKILL.md +227 -0
  111. package/assets/skills/six-thinking-hats/README.md +190 -0
  112. package/assets/skills/six-thinking-hats/SKILL.md +280 -0
  113. package/assets/skills/six-thinking-hats/resources/examples/api-testing-example.md +345 -0
  114. package/assets/skills/six-thinking-hats/resources/templates/solo-session-template.md +167 -0
  115. package/assets/skills/six-thinking-hats/resources/templates/team-session-template.md +336 -0
  116. package/assets/skills/skill-builder/SKILL.md +910 -0
  117. package/assets/skills/sparc-methodology/SKILL.md +1115 -0
  118. package/assets/skills/stream-chain/SKILL.md +563 -0
  119. package/assets/skills/swarm-advanced/SKILL.md +973 -0
  120. package/assets/skills/swarm-orchestration/SKILL.md +179 -0
  121. package/assets/skills/tdd-london-chicago/SKILL.md +244 -0
  122. package/assets/skills/technical-writing/SKILL.md +178 -0
  123. package/assets/skills/test-automation-strategy/SKILL.md +230 -0
  124. package/assets/skills/test-data-management/SKILL.md +270 -0
  125. package/assets/skills/test-design-techniques/SKILL.md +244 -0
  126. package/assets/skills/test-environment-management/SKILL.md +243 -0
  127. package/assets/skills/test-reporting-analytics/SKILL.md +214 -0
  128. package/assets/skills/testability-scoring/README.md +71 -0
  129. package/assets/skills/testability-scoring/SKILL.md +346 -0
  130. package/assets/skills/testability-scoring/resources/templates/config.template.js +84 -0
  131. package/assets/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
  132. package/assets/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
  133. package/assets/skills/testability-scoring/scripts/run-assessment.sh +70 -0
  134. package/assets/skills/v3-qe-chaos-resilience/SKILL.md +238 -0
  135. package/assets/skills/v3-qe-code-intelligence/SKILL.md +209 -0
  136. package/assets/skills/v3-qe-contract-testing/SKILL.md +218 -0
  137. package/assets/skills/v3-qe-coverage-analysis/SKILL.md +187 -0
  138. package/assets/skills/v3-qe-defect-intelligence/SKILL.md +205 -0
  139. package/assets/skills/v3-qe-learning-optimization/SKILL.md +238 -0
  140. package/assets/skills/v3-qe-quality-assessment/SKILL.md +213 -0
  141. package/assets/skills/v3-qe-requirements-validation/SKILL.md +248 -0
  142. package/assets/skills/v3-qe-test-execution/SKILL.md +182 -0
  143. package/assets/skills/v3-qe-test-generation/SKILL.md +141 -0
  144. package/assets/skills/v3-qe-visual-accessibility/SKILL.md +242 -0
  145. package/assets/skills/verification-quality/SKILL.md +649 -0
  146. package/assets/skills/visual-testing-advanced/SKILL.md +219 -0
  147. package/assets/skills/xp-practices/SKILL.md +229 -0
  148. package/dist/cli/bundle.js +8 -8
  149. package/dist/init/agents-installer.js +4 -4
  150. package/dist/init/agents-installer.js.map +1 -1
  151. package/dist/init/skills-installer.js +4 -4
  152. package/dist/init/skills-installer.js.map +1 -1
  153. package/package.json +7 -1
  154. package/docs/analysis/V3-INIT-REQUIREMENTS-ANALYSIS.md +0 -352
  155. package/implementation/README.md +0 -90
  156. package/implementation/adrs/ADR-030-coherence-gated-quality-gates.md +0 -312
  157. package/implementation/adrs/ADR-031-strange-loop-self-awareness.md +0 -484
  158. package/implementation/adrs/ADR-032-time-crystal-scheduling.md +0 -530
  159. package/implementation/adrs/ADR-033-early-exit-testing.md +0 -634
  160. package/implementation/adrs/ADR-034-neural-topology-optimizer.md +0 -589
  161. package/implementation/adrs/ADR-035-causal-discovery.md +0 -610
  162. package/implementation/adrs/ADR-036-result-persistence.md +0 -326
  163. package/implementation/adrs/ADR-037-v3-qe-agent-naming.md +0 -105
  164. package/implementation/adrs/ADR-038-v3-qe-memory-unification.md +0 -154
  165. package/implementation/adrs/ADR-039-v3-qe-mcp-optimization.md +0 -179
  166. package/implementation/adrs/ADR-040-v3-qe-agentic-flow-integration.md +0 -240
  167. package/implementation/adrs/ADR-041-v3-qe-cli-enhancement.md +0 -296
  168. package/implementation/adrs/ADR-042-v3-qe-token-tracking-integration.md +0 -517
  169. package/implementation/adrs/v3-adrs.md +0 -2783
  170. package/implementation/planning/AQE-V3-MASTER-PLAN.md +0 -815
  171. package/security-scan-report-2026-01-11.md +0 -410
  172. package/security-verification-report-2026-01-11.md +0 -278
  173. package/src/benchmarks/performance-benchmarks.ts +0 -646
  174. package/src/benchmarks/run-benchmarks.ts +0 -324
  175. package/src/causal-discovery/causal-graph.ts +0 -450
  176. package/src/causal-discovery/discovery-engine.ts +0 -438
  177. package/src/causal-discovery/index.ts +0 -117
  178. package/src/causal-discovery/types.ts +0 -456
  179. package/src/causal-discovery/weight-matrix.ts +0 -453
  180. package/src/cli/commands/qe-tools.ts +0 -634
  181. package/src/cli/index.ts +0 -1976
  182. package/src/compatibility/agent-mapper.ts +0 -291
  183. package/src/compatibility/cli-adapter.ts +0 -277
  184. package/src/compatibility/config-migrator.ts +0 -334
  185. package/src/compatibility/index.ts +0 -112
  186. package/src/compatibility/mcp-adapter.ts +0 -248
  187. package/src/compatibility/types.ts +0 -156
  188. package/src/coordination/claims/claim-repository.ts +0 -636
  189. package/src/coordination/claims/claim-service.ts +0 -675
  190. package/src/coordination/claims/handoff-manager.ts +0 -535
  191. package/src/coordination/claims/index.ts +0 -276
  192. package/src/coordination/claims/interfaces.ts +0 -687
  193. package/src/coordination/claims/work-stealing.ts +0 -436
  194. package/src/coordination/cross-domain-router.ts +0 -492
  195. package/src/coordination/index.ts +0 -127
  196. package/src/coordination/interfaces.ts +0 -691
  197. package/src/coordination/protocol-executor.ts +0 -760
  198. package/src/coordination/protocols/code-intelligence-index.ts +0 -855
  199. package/src/coordination/protocols/defect-investigation.ts +0 -1184
  200. package/src/coordination/protocols/index.ts +0 -11
  201. package/src/coordination/protocols/learning-consolidation.ts +0 -1181
  202. package/src/coordination/protocols/morning-sync.ts +0 -1055
  203. package/src/coordination/protocols/quality-gate.ts +0 -1566
  204. package/src/coordination/protocols/security-audit.ts +0 -1587
  205. package/src/coordination/queen-coordinator.ts +0 -1176
  206. package/src/coordination/result-saver.ts +0 -780
  207. package/src/coordination/task-executor.ts +0 -1146
  208. package/src/coordination/workflow-orchestrator.ts +0 -1917
  209. package/src/domains/chaos-resilience/coordinator.ts +0 -1032
  210. package/src/domains/chaos-resilience/index.ts +0 -143
  211. package/src/domains/chaos-resilience/interfaces.ts +0 -659
  212. package/src/domains/chaos-resilience/plugin.ts +0 -691
  213. package/src/domains/chaos-resilience/services/chaos-engineer.ts +0 -1097
  214. package/src/domains/chaos-resilience/services/index.ts +0 -19
  215. package/src/domains/chaos-resilience/services/load-tester.ts +0 -799
  216. package/src/domains/chaos-resilience/services/performance-profiler.ts +0 -792
  217. package/src/domains/code-intelligence/coordinator.ts +0 -631
  218. package/src/domains/code-intelligence/index.ts +0 -86
  219. package/src/domains/code-intelligence/interfaces.ts +0 -162
  220. package/src/domains/code-intelligence/plugin.ts +0 -451
  221. package/src/domains/code-intelligence/services/impact-analyzer.ts +0 -567
  222. package/src/domains/code-intelligence/services/index.ts +0 -26
  223. package/src/domains/code-intelligence/services/knowledge-graph.ts +0 -1067
  224. package/src/domains/code-intelligence/services/semantic-analyzer.ts +0 -901
  225. package/src/domains/contract-testing/coordinator.ts +0 -1038
  226. package/src/domains/contract-testing/index.ts +0 -122
  227. package/src/domains/contract-testing/interfaces.ts +0 -458
  228. package/src/domains/contract-testing/plugin.ts +0 -746
  229. package/src/domains/contract-testing/services/api-compatibility.ts +0 -748
  230. package/src/domains/contract-testing/services/contract-validator.ts +0 -1700
  231. package/src/domains/contract-testing/services/index.ts +0 -19
  232. package/src/domains/contract-testing/services/schema-validator.ts +0 -1102
  233. package/src/domains/coverage-analysis/coordinator.ts +0 -485
  234. package/src/domains/coverage-analysis/index.ts +0 -114
  235. package/src/domains/coverage-analysis/interfaces.ts +0 -142
  236. package/src/domains/coverage-analysis/plugin.ts +0 -172
  237. package/src/domains/coverage-analysis/services/coverage-analyzer.ts +0 -449
  238. package/src/domains/coverage-analysis/services/coverage-embedder.ts +0 -733
  239. package/src/domains/coverage-analysis/services/coverage-parser.ts +0 -753
  240. package/src/domains/coverage-analysis/services/gap-detector.ts +0 -592
  241. package/src/domains/coverage-analysis/services/hnsw-index.ts +0 -728
  242. package/src/domains/coverage-analysis/services/index.ts +0 -61
  243. package/src/domains/coverage-analysis/services/risk-scorer.ts +0 -540
  244. package/src/domains/coverage-analysis/services/sublinear-analyzer.ts +0 -747
  245. package/src/domains/defect-intelligence/coordinator.ts +0 -635
  246. package/src/domains/defect-intelligence/index.ts +0 -83
  247. package/src/domains/defect-intelligence/interfaces.ts +0 -152
  248. package/src/domains/defect-intelligence/plugin.ts +0 -483
  249. package/src/domains/defect-intelligence/services/causal-root-cause-analyzer.ts +0 -494
  250. package/src/domains/defect-intelligence/services/defect-predictor.ts +0 -852
  251. package/src/domains/defect-intelligence/services/index.ts +0 -37
  252. package/src/domains/defect-intelligence/services/pattern-learner.ts +0 -738
  253. package/src/domains/defect-intelligence/services/root-cause-analyzer.ts +0 -637
  254. package/src/domains/domain-interface.ts +0 -77
  255. package/src/domains/index.ts +0 -23
  256. package/src/domains/learning-optimization/coordinator.ts +0 -1215
  257. package/src/domains/learning-optimization/index.ts +0 -127
  258. package/src/domains/learning-optimization/interfaces.ts +0 -570
  259. package/src/domains/learning-optimization/plugin.ts +0 -851
  260. package/src/domains/learning-optimization/services/index.ts +0 -29
  261. package/src/domains/learning-optimization/services/learning-coordinator.ts +0 -972
  262. package/src/domains/learning-optimization/services/metrics-optimizer.ts +0 -915
  263. package/src/domains/learning-optimization/services/production-intel.ts +0 -971
  264. package/src/domains/learning-optimization/services/transfer-specialist.ts +0 -723
  265. package/src/domains/quality-assessment/coherence/gate-controller.ts +0 -549
  266. package/src/domains/quality-assessment/coherence/index.ts +0 -211
  267. package/src/domains/quality-assessment/coherence/lambda-calculator.ts +0 -384
  268. package/src/domains/quality-assessment/coherence/partition-detector.ts +0 -469
  269. package/src/domains/quality-assessment/coherence/types.ts +0 -384
  270. package/src/domains/quality-assessment/coordinator.ts +0 -605
  271. package/src/domains/quality-assessment/index.ts +0 -97
  272. package/src/domains/quality-assessment/interfaces.ts +0 -152
  273. package/src/domains/quality-assessment/plugin.ts +0 -496
  274. package/src/domains/quality-assessment/services/coherence-gate.ts +0 -358
  275. package/src/domains/quality-assessment/services/deployment-advisor.ts +0 -571
  276. package/src/domains/quality-assessment/services/index.ts +0 -34
  277. package/src/domains/quality-assessment/services/quality-analyzer.ts +0 -670
  278. package/src/domains/quality-assessment/services/quality-gate.ts +0 -384
  279. package/src/domains/requirements-validation/coordinator.ts +0 -812
  280. package/src/domains/requirements-validation/index.ts +0 -92
  281. package/src/domains/requirements-validation/interfaces.ts +0 -303
  282. package/src/domains/requirements-validation/plugin.ts +0 -576
  283. package/src/domains/requirements-validation/services/bdd-scenario-writer.ts +0 -676
  284. package/src/domains/requirements-validation/services/index.ts +0 -20
  285. package/src/domains/requirements-validation/services/requirements-validator.ts +0 -559
  286. package/src/domains/requirements-validation/services/testability-scorer.ts +0 -639
  287. package/src/domains/security-compliance/coordinator.ts +0 -757
  288. package/src/domains/security-compliance/index.ts +0 -120
  289. package/src/domains/security-compliance/interfaces.ts +0 -434
  290. package/src/domains/security-compliance/plugin.ts +0 -509
  291. package/src/domains/security-compliance/services/compliance-validator.ts +0 -1226
  292. package/src/domains/security-compliance/services/index.ts +0 -31
  293. package/src/domains/security-compliance/services/security-auditor.ts +0 -2227
  294. package/src/domains/security-compliance/services/security-scanner.ts +0 -2354
  295. package/src/domains/security-compliance/services/semgrep-integration.ts +0 -289
  296. package/src/domains/test-execution/coordinator.ts +0 -426
  297. package/src/domains/test-execution/index.ts +0 -76
  298. package/src/domains/test-execution/interfaces.ts +0 -119
  299. package/src/domains/test-execution/plugin.ts +0 -208
  300. package/src/domains/test-execution/services/flaky-detector.ts +0 -1240
  301. package/src/domains/test-execution/services/index.ts +0 -8
  302. package/src/domains/test-execution/services/retry-handler.ts +0 -820
  303. package/src/domains/test-execution/services/test-executor.ts +0 -885
  304. package/src/domains/test-generation/coordinator.ts +0 -656
  305. package/src/domains/test-generation/index.ts +0 -77
  306. package/src/domains/test-generation/interfaces.ts +0 -118
  307. package/src/domains/test-generation/plugin.ts +0 -397
  308. package/src/domains/test-generation/services/index.ts +0 -23
  309. package/src/domains/test-generation/services/pattern-matcher.ts +0 -1725
  310. package/src/domains/test-generation/services/test-generator.ts +0 -2750
  311. package/src/domains/visual-accessibility/coordinator.ts +0 -860
  312. package/src/domains/visual-accessibility/index.ts +0 -116
  313. package/src/domains/visual-accessibility/interfaces.ts +0 -435
  314. package/src/domains/visual-accessibility/plugin.ts +0 -568
  315. package/src/domains/visual-accessibility/services/accessibility-tester.ts +0 -982
  316. package/src/domains/visual-accessibility/services/axe-core-audit.ts +0 -630
  317. package/src/domains/visual-accessibility/services/index.ts +0 -28
  318. package/src/domains/visual-accessibility/services/responsive-tester.ts +0 -934
  319. package/src/domains/visual-accessibility/services/visual-tester.ts +0 -458
  320. package/src/early-exit/early-exit-controller.ts +0 -490
  321. package/src/early-exit/early-exit-decision.ts +0 -391
  322. package/src/early-exit/index.ts +0 -115
  323. package/src/early-exit/quality-signal.ts +0 -389
  324. package/src/early-exit/speculative-executor.ts +0 -505
  325. package/src/early-exit/types.ts +0 -407
  326. package/src/feedback/coverage-learner.ts +0 -456
  327. package/src/feedback/feedback-loop.ts +0 -426
  328. package/src/feedback/index.ts +0 -72
  329. package/src/feedback/pattern-promotion.ts +0 -373
  330. package/src/feedback/quality-score-calculator.ts +0 -334
  331. package/src/feedback/test-outcome-tracker.ts +0 -450
  332. package/src/feedback/types.ts +0 -497
  333. package/src/index.ts +0 -224
  334. package/src/init/agents-installer.ts +0 -536
  335. package/src/init/index.ts +0 -80
  336. package/src/init/init-wizard.ts +0 -1061
  337. package/src/init/project-analyzer.ts +0 -696
  338. package/src/init/self-configurator.ts +0 -488
  339. package/src/init/skills-installer.ts +0 -467
  340. package/src/init/types.ts +0 -432
  341. package/src/integrations/ruvector/ast-complexity.ts +0 -470
  342. package/src/integrations/ruvector/coverage-router.ts +0 -594
  343. package/src/integrations/ruvector/diff-risk-classifier.ts +0 -759
  344. package/src/integrations/ruvector/fallback.ts +0 -942
  345. package/src/integrations/ruvector/graph-boundaries.ts +0 -809
  346. package/src/integrations/ruvector/index.ts +0 -363
  347. package/src/integrations/ruvector/interfaces.ts +0 -609
  348. package/src/integrations/ruvector/q-learning-router.ts +0 -550
  349. package/src/kernel/agent-coordinator.ts +0 -165
  350. package/src/kernel/agentdb-backend.ts +0 -504
  351. package/src/kernel/event-bus.ts +0 -129
  352. package/src/kernel/hybrid-backend.ts +0 -538
  353. package/src/kernel/index.ts +0 -28
  354. package/src/kernel/interfaces.ts +0 -257
  355. package/src/kernel/kernel.ts +0 -285
  356. package/src/kernel/memory-backend.ts +0 -169
  357. package/src/kernel/memory-factory.ts +0 -293
  358. package/src/kernel/plugin-loader.ts +0 -179
  359. package/src/learning/index.ts +0 -219
  360. package/src/learning/pattern-store.ts +0 -990
  361. package/src/learning/qe-guidance.ts +0 -832
  362. package/src/learning/qe-hooks.ts +0 -644
  363. package/src/learning/qe-patterns.ts +0 -449
  364. package/src/learning/qe-reasoning-bank.ts +0 -951
  365. package/src/learning/real-embeddings.ts +0 -277
  366. package/src/learning/real-qe-reasoning-bank.ts +0 -833
  367. package/src/learning/sqlite-persistence.ts +0 -554
  368. package/src/mcp/entry.ts +0 -59
  369. package/src/mcp/handlers/agent-handlers.ts +0 -285
  370. package/src/mcp/handlers/core-handlers.ts +0 -317
  371. package/src/mcp/handlers/domain-handlers.ts +0 -1444
  372. package/src/mcp/handlers/index.ts +0 -57
  373. package/src/mcp/handlers/memory-handlers.ts +0 -338
  374. package/src/mcp/handlers/task-handlers.ts +0 -363
  375. package/src/mcp/index.ts +0 -30
  376. package/src/mcp/metrics/index.ts +0 -14
  377. package/src/mcp/metrics/metrics-collector.ts +0 -503
  378. package/src/mcp/protocol-server.ts +0 -752
  379. package/src/mcp/security/cve-prevention.ts +0 -742
  380. package/src/mcp/security/index.ts +0 -356
  381. package/src/mcp/security/oauth21-provider.ts +0 -821
  382. package/src/mcp/security/rate-limiter.ts +0 -615
  383. package/src/mcp/security/sampling-server.ts +0 -662
  384. package/src/mcp/security/schema-validator.ts +0 -855
  385. package/src/mcp/server.ts +0 -657
  386. package/src/mcp/tool-registry.ts +0 -391
  387. package/src/mcp/tools/base.ts +0 -399
  388. package/src/mcp/tools/chaos-resilience/inject.ts +0 -699
  389. package/src/mcp/tools/code-intelligence/analyze.ts +0 -745
  390. package/src/mcp/tools/contract-testing/validate.ts +0 -708
  391. package/src/mcp/tools/coverage-analysis/index.ts +0 -770
  392. package/src/mcp/tools/defect-intelligence/predict.ts +0 -466
  393. package/src/mcp/tools/index.ts +0 -214
  394. package/src/mcp/tools/learning-optimization/optimize.ts +0 -772
  395. package/src/mcp/tools/quality-assessment/evaluate.ts +0 -385
  396. package/src/mcp/tools/registry.ts +0 -248
  397. package/src/mcp/tools/requirements-validation/validate.ts +0 -394
  398. package/src/mcp/tools/security-compliance/scan.ts +0 -365
  399. package/src/mcp/tools/test-execution/execute.ts +0 -291
  400. package/src/mcp/tools/test-generation/generate.ts +0 -544
  401. package/src/mcp/tools/visual-accessibility/index.ts +0 -791
  402. package/src/mcp/transport/index.ts +0 -31
  403. package/src/mcp/transport/stdio.ts +0 -318
  404. package/src/mcp/types.ts +0 -543
  405. package/src/neural-optimizer/index.ts +0 -111
  406. package/src/neural-optimizer/replay-buffer.ts +0 -455
  407. package/src/neural-optimizer/swarm-topology.ts +0 -508
  408. package/src/neural-optimizer/topology-optimizer.ts +0 -828
  409. package/src/neural-optimizer/types.ts +0 -481
  410. package/src/neural-optimizer/value-network.ts +0 -351
  411. package/src/optimization/auto-tuner.ts +0 -817
  412. package/src/optimization/index.ts +0 -77
  413. package/src/optimization/metric-collectors.ts +0 -474
  414. package/src/optimization/qe-workers.ts +0 -704
  415. package/src/optimization/tuning-algorithm.ts +0 -401
  416. package/src/optimization/types.ts +0 -314
  417. package/src/routing/index.ts +0 -51
  418. package/src/routing/qe-agent-registry.ts +0 -963
  419. package/src/routing/qe-task-router.ts +0 -564
  420. package/src/routing/routing-feedback.ts +0 -365
  421. package/src/routing/types.ts +0 -406
  422. package/src/shared/embeddings/embedding-cache.ts +0 -157
  423. package/src/shared/embeddings/index.ts +0 -50
  424. package/src/shared/embeddings/nomic-embedder.ts +0 -404
  425. package/src/shared/embeddings/ollama-client.ts +0 -195
  426. package/src/shared/embeddings/types.ts +0 -147
  427. package/src/shared/entities/agent.ts +0 -141
  428. package/src/shared/entities/base-entity.ts +0 -79
  429. package/src/shared/entities/index.ts +0 -6
  430. package/src/shared/events/domain-events.ts +0 -259
  431. package/src/shared/events/index.ts +0 -5
  432. package/src/shared/git/git-analyzer.ts +0 -656
  433. package/src/shared/git/index.ts +0 -11
  434. package/src/shared/http/http-client.ts +0 -420
  435. package/src/shared/http/index.ts +0 -13
  436. package/src/shared/index.ts +0 -41
  437. package/src/shared/io/file-reader.ts +0 -525
  438. package/src/shared/io/index.ts +0 -25
  439. package/src/shared/llm/cache.ts +0 -473
  440. package/src/shared/llm/circuit-breaker.ts +0 -369
  441. package/src/shared/llm/cost-tracker.ts +0 -460
  442. package/src/shared/llm/index.ts +0 -140
  443. package/src/shared/llm/interfaces.ts +0 -629
  444. package/src/shared/llm/provider-manager.ts +0 -685
  445. package/src/shared/llm/providers/claude.ts +0 -524
  446. package/src/shared/llm/providers/index.ts +0 -8
  447. package/src/shared/llm/providers/ollama.ts +0 -575
  448. package/src/shared/llm/providers/openai.ts +0 -609
  449. package/src/shared/metrics/code-metrics.ts +0 -520
  450. package/src/shared/metrics/index.ts +0 -23
  451. package/src/shared/metrics/system-metrics.ts +0 -353
  452. package/src/shared/parsers/index.ts +0 -6
  453. package/src/shared/parsers/typescript-parser.ts +0 -841
  454. package/src/shared/security/compliance-patterns.ts +0 -666
  455. package/src/shared/security/index.ts +0 -30
  456. package/src/shared/security/osv-client.ts +0 -468
  457. package/src/shared/types/index.ts +0 -150
  458. package/src/shared/value-objects/index.ts +0 -273
  459. package/src/strange-loop/healing-controller.ts +0 -833
  460. package/src/strange-loop/index.ts +0 -104
  461. package/src/strange-loop/self-model.ts +0 -494
  462. package/src/strange-loop/strange-loop.ts +0 -446
  463. package/src/strange-loop/swarm-observer.ts +0 -448
  464. package/src/strange-loop/topology-analyzer.ts +0 -565
  465. package/src/strange-loop/types.ts +0 -640
  466. package/src/time-crystal/default-phases.ts +0 -520
  467. package/src/time-crystal/index.ts +0 -164
  468. package/src/time-crystal/oscillator.ts +0 -425
  469. package/src/time-crystal/phase-executor.ts +0 -521
  470. package/src/time-crystal/scheduler.ts +0 -1025
  471. package/src/time-crystal/test-runner.ts +0 -787
  472. package/src/time-crystal/types.ts +0 -421
  473. package/src/workers/base-worker.ts +0 -304
  474. package/src/workers/daemon.ts +0 -264
  475. package/src/workers/index.ts +0 -119
  476. package/src/workers/interfaces.ts +0 -393
  477. package/src/workers/worker-manager.ts +0 -424
  478. package/src/workers/workers/compliance-checker.ts +0 -445
  479. package/src/workers/workers/coverage-tracker.ts +0 -344
  480. package/src/workers/workers/defect-predictor.ts +0 -375
  481. package/src/workers/workers/flaky-detector.ts +0 -390
  482. package/src/workers/workers/index.ts +0 -17
  483. package/src/workers/workers/learning-consolidation.ts +0 -442
  484. package/src/workers/workers/performance-baseline.ts +0 -434
  485. package/src/workers/workers/quality-gate.ts +0 -419
  486. package/src/workers/workers/regression-monitor.ts +0 -357
  487. package/src/workers/workers/security-scan.ts +0 -349
  488. package/src/workers/workers/test-health.ts +0 -359
  489. package/tests/integration/code-intelligence/knowledge-graph-real.test.ts +0 -540
  490. package/tests/integration/coordination/cross-domain-router.test.ts +0 -403
  491. package/tests/integration/coordination/protocol-executor.test.ts +0 -454
  492. package/tests/integration/coordination/workflow-orchestrator.test.ts +0 -418
  493. package/tests/integration/feedback/feedback-loop-integration.test.ts +0 -560
  494. package/tests/integration/migration/v2-to-v3-migration.test.ts +0 -471
  495. package/tests/integration/parsers/typescript-parser.test.ts +0 -463
  496. package/tests/integration/security/vulnerability-detection.test.ts +0 -628
  497. package/tests/integration/test-execution/coordinator.test.ts +0 -410
  498. package/tests/integration/test-generation/coordinator.test.ts +0 -361
  499. package/tests/mocks/index.ts +0 -228
  500. package/tests/time-crystal/default-phases.test.ts +0 -476
  501. package/tests/time-crystal/oscillator.test.ts +0 -541
  502. package/tests/time-crystal/phase-executor.test.ts +0 -653
  503. package/tests/time-crystal/scheduler.test.ts +0 -626
  504. package/tests/time-crystal/test-runner.test.ts +0 -594
  505. package/tests/unit/causal-discovery/causal-graph.test.ts +0 -504
  506. package/tests/unit/causal-discovery/causal-root-cause-analyzer.test.ts +0 -347
  507. package/tests/unit/causal-discovery/discovery-engine.test.ts +0 -435
  508. package/tests/unit/causal-discovery/weight-matrix.test.ts +0 -328
  509. package/tests/unit/cli/cli.test.ts +0 -341
  510. package/tests/unit/cli/commands.test.ts +0 -414
  511. package/tests/unit/cli/init-command.test.ts +0 -274
  512. package/tests/unit/cli/migrate-command.test.ts +0 -396
  513. package/tests/unit/coordination/claims/claim-service.test.ts +0 -949
  514. package/tests/unit/coordination/claims/handoff-manager.test.ts +0 -773
  515. package/tests/unit/coordination/claims/work-stealing.test.ts +0 -492
  516. package/tests/unit/coordination/queen-coordinator.test.ts +0 -966
  517. package/tests/unit/coordination/result-saver.test.ts +0 -653
  518. package/tests/unit/coordination/task-executor.test.ts +0 -810
  519. package/tests/unit/domains/chaos-resilience/chaos-engineer.test.ts +0 -484
  520. package/tests/unit/domains/chaos-resilience/load-tester.test.ts +0 -559
  521. package/tests/unit/domains/chaos-resilience/performance-profiler.test.ts +0 -490
  522. package/tests/unit/domains/code-intelligence/impact-analyzer.test.ts +0 -560
  523. package/tests/unit/domains/code-intelligence/knowledge-graph.test.ts +0 -460
  524. package/tests/unit/domains/code-intelligence/semantic-analyzer.test.ts +0 -584
  525. package/tests/unit/domains/contract-testing/api-compatibility.test.ts +0 -483
  526. package/tests/unit/domains/contract-testing/contract-validator.test.ts +0 -370
  527. package/tests/unit/domains/contract-testing/schema-validator.test.ts +0 -610
  528. package/tests/unit/domains/coverage-analysis/coverage-embedder.test.ts +0 -298
  529. package/tests/unit/domains/coverage-analysis/hnsw-index.test.ts +0 -292
  530. package/tests/unit/domains/coverage-analysis/sublinear-analyzer.test.ts +0 -506
  531. package/tests/unit/domains/defect-intelligence/defect-predictor.test.ts +0 -370
  532. package/tests/unit/domains/defect-intelligence/pattern-learner.test.ts +0 -546
  533. package/tests/unit/domains/defect-intelligence/root-cause-analyzer.test.ts +0 -534
  534. package/tests/unit/domains/learning-optimization/learning-coordinator.test.ts +0 -541
  535. package/tests/unit/domains/learning-optimization/metrics-optimizer.test.ts +0 -552
  536. package/tests/unit/domains/learning-optimization/production-intel.test.ts +0 -589
  537. package/tests/unit/domains/learning-optimization/transfer-specialist.test.ts +0 -453
  538. package/tests/unit/domains/quality-assessment/coherence-gate.test.ts +0 -1006
  539. package/tests/unit/domains/quality-assessment/deployment-advisor.test.ts +0 -515
  540. package/tests/unit/domains/quality-assessment/quality-analyzer.test.ts +0 -401
  541. package/tests/unit/domains/quality-assessment/quality-gate.test.ts +0 -324
  542. package/tests/unit/domains/requirements-validation/bdd-scenario-writer.test.ts +0 -479
  543. package/tests/unit/domains/requirements-validation/requirements-validator.test.ts +0 -452
  544. package/tests/unit/domains/requirements-validation/testability-scorer.test.ts +0 -505
  545. package/tests/unit/domains/security-compliance/compliance-validator.test.ts +0 -500
  546. package/tests/unit/domains/security-compliance/security-auditor.test.ts +0 -498
  547. package/tests/unit/domains/security-compliance/security-scanner.test.ts +0 -412
  548. package/tests/unit/domains/visual-accessibility/accessibility-tester.test.ts +0 -432
  549. package/tests/unit/domains/visual-accessibility/responsive-tester.test.ts +0 -506
  550. package/tests/unit/domains/visual-accessibility/visual-tester.test.ts +0 -412
  551. package/tests/unit/early-exit/early-exit-controller.test.ts +0 -548
  552. package/tests/unit/early-exit/early-exit-decision.test.ts +0 -617
  553. package/tests/unit/early-exit/index.test.ts +0 -254
  554. package/tests/unit/early-exit/quality-signal.test.ts +0 -589
  555. package/tests/unit/early-exit/speculative-executor.test.ts +0 -453
  556. package/tests/unit/feedback/coverage-learner.test.ts +0 -288
  557. package/tests/unit/feedback/feedback-loop.test.ts +0 -458
  558. package/tests/unit/feedback/pattern-promotion.test.ts +0 -390
  559. package/tests/unit/feedback/quality-score-calculator.test.ts +0 -364
  560. package/tests/unit/feedback/test-outcome-tracker.test.ts +0 -243
  561. package/tests/unit/init/init-wizard.test.ts +0 -881
  562. package/tests/unit/init/project-analyzer.test.ts +0 -807
  563. package/tests/unit/init/self-configurator.test.ts +0 -493
  564. package/tests/unit/integrations/ruvector/ast-complexity.test.ts +0 -240
  565. package/tests/unit/integrations/ruvector/coverage-router.test.ts +0 -366
  566. package/tests/unit/integrations/ruvector/diff-risk-classifier.test.ts +0 -340
  567. package/tests/unit/integrations/ruvector/graph-boundaries.test.ts +0 -355
  568. package/tests/unit/integrations/ruvector/q-learning-router.test.ts +0 -314
  569. package/tests/unit/kernel/agent-coordinator.test.ts +0 -220
  570. package/tests/unit/kernel/event-bus.test.ts +0 -197
  571. package/tests/unit/learning/qe-reasoning-bank.test.ts +0 -666
  572. package/tests/unit/learning/real-qe-reasoning-bank.benchmark.test.ts +0 -415
  573. package/tests/unit/mcp/mcp-server.test.ts +0 -544
  574. package/tests/unit/mcp/metrics/metrics-collector.test.ts +0 -340
  575. package/tests/unit/mcp/security/cve-prevention.test.ts +0 -512
  576. package/tests/unit/mcp/security/oauth21-provider.test.ts +0 -624
  577. package/tests/unit/mcp/security/rate-limiter.test.ts +0 -410
  578. package/tests/unit/mcp/security/sampling-server.test.ts +0 -420
  579. package/tests/unit/mcp/security/schema-validator.test.ts +0 -494
  580. package/tests/unit/mcp/tools/base.test.ts +0 -336
  581. package/tests/unit/mcp/tools/domain-tools.test.ts +0 -759
  582. package/tests/unit/mcp/tools/registry.test.ts +0 -240
  583. package/tests/unit/neural-optimizer/replay-buffer.test.ts +0 -403
  584. package/tests/unit/neural-optimizer/swarm-topology.test.ts +0 -473
  585. package/tests/unit/neural-optimizer/topology-optimizer.test.ts +0 -595
  586. package/tests/unit/neural-optimizer/value-network.test.ts +0 -343
  587. package/tests/unit/optimization/auto-tuner.test.ts +0 -506
  588. package/tests/unit/optimization/metric-collectors.test.ts +0 -352
  589. package/tests/unit/optimization/qe-workers.test.ts +0 -407
  590. package/tests/unit/optimization/tuning-algorithm.test.ts +0 -467
  591. package/tests/unit/routing/qe-agent-registry.test.ts +0 -229
  592. package/tests/unit/routing/qe-task-router.test.ts +0 -390
  593. package/tests/unit/routing/routing-feedback.test.ts +0 -339
  594. package/tests/unit/shared/embeddings/nomic-embedder.test.ts +0 -419
  595. package/tests/unit/shared/http/http-client.test.ts +0 -719
  596. package/tests/unit/shared/io/file-reader.test.ts +0 -511
  597. package/tests/unit/shared/llm/cache.test.ts +0 -391
  598. package/tests/unit/shared/llm/circuit-breaker.test.ts +0 -293
  599. package/tests/unit/shared/llm/cost-tracker.test.ts +0 -431
  600. package/tests/unit/shared/llm/provider-manager.test.ts +0 -550
  601. package/tests/unit/shared/llm/providers.test.ts +0 -532
  602. package/tests/unit/shared/parsers/typescript-parser.test.ts +0 -693
  603. package/tests/unit/shared/value-objects.test.ts +0 -184
  604. package/tests/unit/strange-loop/strange-loop.test.ts +0 -1170
  605. package/tests/unit/workers/base-worker.test.ts +0 -341
  606. package/tests/unit/workers/daemon.test.ts +0 -291
  607. package/tests/unit/workers/worker-manager.test.ts +0 -284
  608. package/tsconfig.json +0 -32
  609. package/vitest.config.ts +0 -27
@@ -1,934 +0,0 @@
1
- /**
2
- * Agentic QE v3 - Responsive Testing Service
3
- * Implements responsive design and cross-device testing
4
- */
5
-
6
- import { v4 as uuidv4 } from 'uuid';
7
- import { Result, ok, err } from '../../../shared/types/index.js';
8
- import { MemoryBackend } from '../../../kernel/interfaces.js';
9
- import {
10
- Viewport,
11
- Screenshot,
12
- VisualDiff,
13
- } from '../interfaces.js';
14
- import { FilePath } from '../../../shared/value-objects/index.js';
15
-
16
- /**
17
- * Responsive testing interfaces
18
- */
19
- export interface ResponsiveTestResult {
20
- readonly url: string;
21
- readonly timestamp: Date;
22
- readonly viewports: ViewportResult[];
23
- readonly breakpointIssues: BreakpointIssue[];
24
- readonly layoutScore: number;
25
- readonly recommendations: string[];
26
- }
27
-
28
- export interface ViewportResult {
29
- readonly viewport: Viewport;
30
- readonly screenshot: Screenshot;
31
- readonly layoutIssues: LayoutIssue[];
32
- readonly renderTime: number;
33
- readonly passed: boolean;
34
- }
35
-
36
- export interface LayoutIssue {
37
- readonly type: LayoutIssueType;
38
- readonly severity: 'critical' | 'warning' | 'info';
39
- readonly element: string;
40
- readonly description: string;
41
- readonly viewport: Viewport;
42
- }
43
-
44
- export type LayoutIssueType =
45
- | 'horizontal-overflow'
46
- | 'text-overflow'
47
- | 'overlapping-elements'
48
- | 'hidden-content'
49
- | 'touch-target-size'
50
- | 'font-size-too-small'
51
- | 'image-not-responsive';
52
-
53
- export interface BreakpointIssue {
54
- readonly breakpoint: number;
55
- readonly description: string;
56
- readonly affectedElements: string[];
57
- readonly suggestion: string;
58
- }
59
-
60
- export interface ResponsiveTestConfig {
61
- viewports: Viewport[];
62
- breakpoints: number[];
63
- checkTouchTargets: boolean;
64
- minFontSize: number;
65
- minTouchTargetSize: number;
66
- /**
67
- * Enable simulation mode for testing purposes only.
68
- * When true, returns deterministic stub data for layout issues.
69
- * When false (default), returns empty results (no browser available).
70
- */
71
- simulationMode: boolean;
72
- }
73
-
74
- /**
75
- * Predefined device viewports
76
- */
77
- export const DEVICE_VIEWPORTS: Record<string, Viewport> = {
78
- 'iphone-se': {
79
- width: 375,
80
- height: 667,
81
- deviceScaleFactor: 2,
82
- isMobile: true,
83
- hasTouch: true,
84
- },
85
- 'iphone-14': {
86
- width: 390,
87
- height: 844,
88
- deviceScaleFactor: 3,
89
- isMobile: true,
90
- hasTouch: true,
91
- },
92
- 'iphone-14-pro-max': {
93
- width: 430,
94
- height: 932,
95
- deviceScaleFactor: 3,
96
- isMobile: true,
97
- hasTouch: true,
98
- },
99
- 'ipad-mini': {
100
- width: 768,
101
- height: 1024,
102
- deviceScaleFactor: 2,
103
- isMobile: true,
104
- hasTouch: true,
105
- },
106
- 'ipad-pro': {
107
- width: 1024,
108
- height: 1366,
109
- deviceScaleFactor: 2,
110
- isMobile: true,
111
- hasTouch: true,
112
- },
113
- 'pixel-7': {
114
- width: 412,
115
- height: 915,
116
- deviceScaleFactor: 2.625,
117
- isMobile: true,
118
- hasTouch: true,
119
- },
120
- 'galaxy-s21': {
121
- width: 360,
122
- height: 800,
123
- deviceScaleFactor: 3,
124
- isMobile: true,
125
- hasTouch: true,
126
- },
127
- 'desktop-hd': {
128
- width: 1920,
129
- height: 1080,
130
- deviceScaleFactor: 1,
131
- isMobile: false,
132
- hasTouch: false,
133
- },
134
- 'desktop-2k': {
135
- width: 2560,
136
- height: 1440,
137
- deviceScaleFactor: 1,
138
- isMobile: false,
139
- hasTouch: false,
140
- },
141
- 'laptop': {
142
- width: 1366,
143
- height: 768,
144
- deviceScaleFactor: 1,
145
- isMobile: false,
146
- hasTouch: false,
147
- },
148
- };
149
-
150
- const DEFAULT_CONFIG: ResponsiveTestConfig = {
151
- viewports: [
152
- DEVICE_VIEWPORTS['iphone-14'],
153
- DEVICE_VIEWPORTS['ipad-mini'],
154
- DEVICE_VIEWPORTS['laptop'],
155
- DEVICE_VIEWPORTS['desktop-hd'],
156
- ],
157
- breakpoints: [320, 480, 768, 1024, 1280, 1920],
158
- checkTouchTargets: true,
159
- minFontSize: 12,
160
- minTouchTargetSize: 44,
161
- simulationMode: false,
162
- };
163
-
164
- /**
165
- * Responsive Tester Service
166
- */
167
- export interface IResponsiveTestingService {
168
- /**
169
- * Test responsive design across viewports
170
- */
171
- testResponsiveness(url: string, options?: Partial<ResponsiveTestConfig>): Promise<Result<ResponsiveTestResult, Error>>;
172
-
173
- /**
174
- * Compare layouts between viewports
175
- */
176
- compareViewports(url: string, viewport1: Viewport, viewport2: Viewport): Promise<Result<VisualDiff, Error>>;
177
-
178
- /**
179
- * Test specific breakpoint
180
- */
181
- testBreakpoint(url: string, breakpoint: number): Promise<Result<ViewportResult, Error>>;
182
-
183
- /**
184
- * Get recommended breakpoints based on content
185
- */
186
- analyzeBreakpoints(url: string): Promise<Result<BreakpointAnalysis, Error>>;
187
- }
188
-
189
- export interface BreakpointAnalysis {
190
- readonly currentBreakpoints: number[];
191
- readonly suggestedBreakpoints: number[];
192
- readonly contentBreaks: ContentBreak[];
193
- readonly coverageScore: number;
194
- }
195
-
196
- export interface ContentBreak {
197
- readonly width: number;
198
- readonly reason: string;
199
- readonly affectedElements: string[];
200
- }
201
-
202
- /**
203
- * Responsive Testing Service Implementation
204
- */
205
- export class ResponsiveTesterService implements IResponsiveTestingService {
206
- private readonly config: ResponsiveTestConfig;
207
-
208
- constructor(
209
- private readonly memory: MemoryBackend,
210
- config: Partial<ResponsiveTestConfig> = {}
211
- ) {
212
- this.config = { ...DEFAULT_CONFIG, ...config };
213
- }
214
-
215
- /**
216
- * Test responsive design across viewports
217
- */
218
- async testResponsiveness(
219
- url: string,
220
- options?: Partial<ResponsiveTestConfig>
221
- ): Promise<Result<ResponsiveTestResult, Error>> {
222
- try {
223
- const testConfig = { ...this.config, ...options };
224
- const viewportResults: ViewportResult[] = [];
225
- const allIssues: LayoutIssue[] = [];
226
-
227
- // Test each viewport
228
- for (const viewport of testConfig.viewports) {
229
- const result = await this.testViewport(url, viewport, testConfig);
230
- viewportResults.push(result);
231
- allIssues.push(...result.layoutIssues);
232
- }
233
-
234
- // Detect breakpoint issues
235
- const breakpointIssues = this.detectBreakpointIssues(
236
- url,
237
- viewportResults,
238
- testConfig
239
- );
240
-
241
- // Calculate layout score
242
- const layoutScore = this.calculateLayoutScore(viewportResults, allIssues);
243
-
244
- // Generate recommendations
245
- const recommendations = this.generateRecommendations(allIssues, breakpointIssues);
246
-
247
- const result: ResponsiveTestResult = {
248
- url,
249
- timestamp: new Date(),
250
- viewports: viewportResults,
251
- breakpointIssues,
252
- layoutScore,
253
- recommendations,
254
- };
255
-
256
- // Store result
257
- await this.storeResult(result);
258
-
259
- return ok(result);
260
- } catch (error) {
261
- return err(error instanceof Error ? error : new Error(String(error)));
262
- }
263
- }
264
-
265
- /**
266
- * Compare layouts between viewports
267
- */
268
- async compareViewports(
269
- url: string,
270
- viewport1: Viewport,
271
- viewport2: Viewport
272
- ): Promise<Result<VisualDiff, Error>> {
273
- try {
274
- // Capture screenshots for both viewports
275
- const screenshot1 = this.createScreenshot(url, viewport1);
276
- const screenshot2 = this.createScreenshot(url, viewport2);
277
-
278
- // Calculate structural diff (not pixel diff)
279
- const diff = this.calculateStructuralDiff(screenshot1, screenshot2);
280
-
281
- return ok(diff);
282
- } catch (error) {
283
- return err(error instanceof Error ? error : new Error(String(error)));
284
- }
285
- }
286
-
287
- /**
288
- * Test specific breakpoint
289
- */
290
- async testBreakpoint(
291
- url: string,
292
- breakpoint: number
293
- ): Promise<Result<ViewportResult, Error>> {
294
- try {
295
- const viewport: Viewport = {
296
- width: breakpoint,
297
- height: 800,
298
- deviceScaleFactor: 1,
299
- isMobile: breakpoint < 768,
300
- hasTouch: breakpoint < 1024,
301
- };
302
-
303
- const result = await this.testViewport(url, viewport, this.config);
304
- return ok(result);
305
- } catch (error) {
306
- return err(error instanceof Error ? error : new Error(String(error)));
307
- }
308
- }
309
-
310
- /**
311
- * Analyze breakpoints based on content
312
- */
313
- async analyzeBreakpoints(url: string): Promise<Result<BreakpointAnalysis, Error>> {
314
- try {
315
- // Test across a range of widths to find content breaks
316
- const contentBreaks = this.findContentBreaks(url);
317
-
318
- // Compare with current breakpoints
319
- const currentBreakpoints = this.config.breakpoints;
320
- const suggestedBreakpoints = this.suggestBreakpoints(contentBreaks);
321
-
322
- // Calculate coverage score
323
- const coverageScore = this.calculateBreakpointCoverage(
324
- currentBreakpoints,
325
- contentBreaks
326
- );
327
-
328
- return ok({
329
- currentBreakpoints,
330
- suggestedBreakpoints,
331
- contentBreaks,
332
- coverageScore,
333
- });
334
- } catch (error) {
335
- return err(error instanceof Error ? error : new Error(String(error)));
336
- }
337
- }
338
-
339
- // ============================================================================
340
- // Private Helper Methods
341
- // ============================================================================
342
-
343
- private async testViewport(
344
- url: string,
345
- viewport: Viewport,
346
- config: ResponsiveTestConfig
347
- ): Promise<ViewportResult> {
348
- const screenshot = this.createScreenshot(url, viewport);
349
- const layoutIssues = this.detectLayoutIssues(url, viewport, config);
350
-
351
- // Deterministic render time based on URL hash and viewport
352
- const urlHash = this.hashUrl(url);
353
- const hashNum = parseInt(urlHash, 36);
354
- const renderTime = 200 + ((hashNum + viewport.width) % 1000);
355
-
356
- const passed = layoutIssues.filter((i) => i.severity === 'critical').length === 0;
357
-
358
- return {
359
- viewport,
360
- screenshot,
361
- layoutIssues,
362
- renderTime,
363
- passed,
364
- };
365
- }
366
-
367
- private createScreenshot(url: string, viewport: Viewport): Screenshot {
368
- // Deterministic load time based on URL hash and viewport
369
- const urlHash = this.hashUrl(url);
370
- const hashNum = parseInt(urlHash, 36);
371
- const loadTime = 500 + ((hashNum + viewport.width + viewport.height) % 2000);
372
-
373
- return {
374
- id: uuidv4(),
375
- url,
376
- viewport,
377
- timestamp: new Date(),
378
- path: FilePath.create(`.visual-tests/responsive/${viewport.width}x${viewport.height}.png`),
379
- metadata: {
380
- browser: 'chromium',
381
- os: process.platform,
382
- fullPage: false,
383
- loadTime,
384
- },
385
- };
386
- }
387
-
388
- private detectLayoutIssues(
389
- url: string,
390
- viewport: Viewport,
391
- config: ResponsiveTestConfig
392
- ): LayoutIssue[] {
393
- // Simulation mode: use deterministic results based on URL hash and viewport
394
- if (config.simulationMode) {
395
- return this.detectLayoutIssuesSimulation(url, viewport, config);
396
- }
397
-
398
- // Production mode: perform heuristic-based responsive analysis
399
- // without browser automation (static analysis based on URL patterns and viewport)
400
- return this.detectLayoutIssuesHeuristic(url, viewport, config);
401
- }
402
-
403
- /**
404
- * Heuristic-based responsive layout issue detection for production mode.
405
- * Analyzes URL patterns and viewport characteristics to identify likely issues.
406
- */
407
- private detectLayoutIssuesHeuristic(
408
- url: string,
409
- viewport: Viewport,
410
- config: ResponsiveTestConfig
411
- ): LayoutIssue[] {
412
- const issues: LayoutIssue[] = [];
413
- const urlLower = url.toLowerCase();
414
-
415
- // === Check CSS breakpoint coverage ===
416
- // Identify pages that commonly have breakpoint issues
417
- const hasResponsivePatterns = this.hasResponsivePatterns(urlLower);
418
-
419
- // Check for horizontal overflow risk at small viewports
420
- if (viewport.width < 768) {
421
- // Pages with tables, wide images, or fixed-width elements
422
- if (this.hasWideContentPatterns(urlLower)) {
423
- issues.push({
424
- type: 'horizontal-overflow',
425
- severity: 'critical',
426
- element: '.wide-content, table, pre',
427
- description: 'Wide content elements may cause horizontal overflow on mobile',
428
- viewport,
429
- });
430
- }
431
-
432
- // Pages without responsive patterns
433
- if (!hasResponsivePatterns) {
434
- issues.push({
435
- type: 'horizontal-overflow',
436
- severity: 'warning',
437
- element: '.container',
438
- description: 'Page may lack responsive CSS breakpoints for mobile',
439
- viewport,
440
- });
441
- }
442
- }
443
-
444
- // === Check viewport meta tag issues ===
445
- // Very small widths without proper viewport handling
446
- if (viewport.width <= 320) {
447
- issues.push({
448
- type: 'text-overflow',
449
- severity: 'warning',
450
- element: 'body',
451
- description: 'Verify viewport meta tag is set correctly for very small screens',
452
- viewport,
453
- });
454
- }
455
-
456
- // === Check touch target sizes ===
457
- if (config.checkTouchTargets && viewport.hasTouch) {
458
- // Interactive pages need proper touch targets
459
- if (this.hasInteractiveElements(urlLower)) {
460
- issues.push({
461
- type: 'touch-target-size',
462
- severity: 'warning',
463
- element: 'button, a, input',
464
- description: `Touch targets should be at least ${config.minTouchTargetSize}px for accessibility`,
465
- viewport,
466
- });
467
- }
468
-
469
- // Navigation links on mobile
470
- if (viewport.isMobile && this.hasNavigationElements(urlLower)) {
471
- issues.push({
472
- type: 'touch-target-size',
473
- severity: 'info',
474
- element: 'nav a',
475
- description: 'Navigation links may be too small for touch on mobile devices',
476
- viewport,
477
- });
478
- }
479
- }
480
-
481
- // === Check font size readability ===
482
- if (viewport.isMobile && config.minFontSize > 0) {
483
- // Forms and data-heavy pages often have small text
484
- if (this.hasDataDensePatterns(urlLower)) {
485
- issues.push({
486
- type: 'font-size-too-small',
487
- severity: 'warning',
488
- element: '.data, .table, .form-label',
489
- description: `Font size may be below ${config.minFontSize}px on mobile`,
490
- viewport,
491
- });
492
- }
493
- }
494
-
495
- // === Check image responsiveness ===
496
- if (this.hasImagePatterns(urlLower)) {
497
- // Large viewports should use higher resolution images
498
- if (viewport.deviceScaleFactor > 1) {
499
- issues.push({
500
- type: 'image-not-responsive',
501
- severity: 'info',
502
- element: 'img',
503
- description: 'Verify images use srcset for high-DPI displays',
504
- viewport,
505
- });
506
- }
507
-
508
- // Small viewports should use appropriately sized images
509
- if (viewport.width < 480) {
510
- issues.push({
511
- type: 'image-not-responsive',
512
- severity: 'info',
513
- element: 'img',
514
- description: 'Verify images are resized for mobile to reduce bandwidth',
515
- viewport,
516
- });
517
- }
518
- }
519
-
520
- // === Check media query coverage ===
521
- // Analyze standard breakpoint coverage
522
- const nearestBreakpoint = this.findNearestBreakpoint(viewport.width, config.breakpoints);
523
- if (nearestBreakpoint.gap > 200) {
524
- issues.push({
525
- type: 'hidden-content',
526
- severity: 'info',
527
- element: 'body',
528
- description: `Viewport ${viewport.width}px is ${nearestBreakpoint.gap}px from nearest breakpoint (${nearestBreakpoint.value}px)`,
529
- viewport,
530
- });
531
- }
532
-
533
- // === Check element overlap risks ===
534
- if (this.hasOverlapRiskPatterns(urlLower) && viewport.width < 1024) {
535
- issues.push({
536
- type: 'overlapping-elements',
537
- severity: 'warning',
538
- element: '.positioned, .absolute, .fixed',
539
- description: 'Positioned elements may overlap on smaller screens',
540
- viewport,
541
- });
542
- }
543
-
544
- return issues;
545
- }
546
-
547
- // URL pattern detection helpers for responsive analysis
548
- private hasResponsivePatterns(url: string): boolean {
549
- // URLs that typically have responsive design
550
- return url.includes('mobile') || url.includes('responsive') ||
551
- url.includes('bootstrap') || url.includes('tailwind') ||
552
- url.includes('material') || url.includes('foundation');
553
- }
554
-
555
- private hasWideContentPatterns(url: string): boolean {
556
- return url.includes('table') || url.includes('data') || url.includes('report') ||
557
- url.includes('code') || url.includes('pre') || url.includes('spreadsheet');
558
- }
559
-
560
- private hasInteractiveElements(url: string): boolean {
561
- return url.includes('form') || url.includes('button') || url.includes('input') ||
562
- url.includes('select') || url.includes('click') || url.includes('action');
563
- }
564
-
565
- private hasNavigationElements(url: string): boolean {
566
- return url.includes('nav') || url.includes('menu') || url.includes('header') ||
567
- url.includes('sidebar') || url.includes('footer') || url.includes('breadcrumb');
568
- }
569
-
570
- private hasDataDensePatterns(url: string): boolean {
571
- return url.includes('dashboard') || url.includes('analytics') || url.includes('report') ||
572
- url.includes('table') || url.includes('stats') || url.includes('metrics');
573
- }
574
-
575
- private hasImagePatterns(url: string): boolean {
576
- return url.includes('gallery') || url.includes('photo') || url.includes('image') ||
577
- url.includes('media') || url.includes('portfolio') || url.includes('hero');
578
- }
579
-
580
- private hasOverlapRiskPatterns(url: string): boolean {
581
- return url.includes('modal') || url.includes('overlay') || url.includes('tooltip') ||
582
- url.includes('dropdown') || url.includes('popup') || url.includes('float');
583
- }
584
-
585
- private findNearestBreakpoint(width: number, breakpoints: number[]): { value: number; gap: number } {
586
- let nearest = breakpoints[0] || 0;
587
- let minGap = Math.abs(width - nearest);
588
-
589
- for (const bp of breakpoints) {
590
- const gap = Math.abs(width - bp);
591
- if (gap < minGap) {
592
- minGap = gap;
593
- nearest = bp;
594
- }
595
- }
596
-
597
- return { value: nearest, gap: minGap };
598
- }
599
-
600
- /**
601
- * Simulation mode layout issue detection with deterministic results.
602
- */
603
- private detectLayoutIssuesSimulation(
604
- url: string,
605
- viewport: Viewport,
606
- config: ResponsiveTestConfig
607
- ): LayoutIssue[] {
608
- const issues: LayoutIssue[] = [];
609
- const urlHash = this.hashUrl(url);
610
- const hashNum = parseInt(urlHash, 36);
611
-
612
- // Deterministic check for horizontal overflow (more likely on small screens)
613
- // Use hash + viewport width for determinism
614
- const overflowDeterminant = ((hashNum + viewport.width) % 100) / 100;
615
- if (viewport.width < 768 && overflowDeterminant < 0.2) {
616
- issues.push({
617
- type: 'horizontal-overflow',
618
- severity: 'critical',
619
- element: '.container',
620
- description: 'Content overflows horizontally causing horizontal scroll',
621
- viewport,
622
- });
623
- }
624
-
625
- // Deterministic check for text overflow
626
- const textOverflowDeterminant = ((hashNum + viewport.width + 100) % 100) / 100;
627
- if (viewport.width < 480 && textOverflowDeterminant < 0.15) {
628
- issues.push({
629
- type: 'text-overflow',
630
- severity: 'warning',
631
- element: '.long-text',
632
- description: 'Text content is truncated or overflows container',
633
- viewport,
634
- });
635
- }
636
-
637
- // Deterministic check for touch target size on mobile
638
- const touchDeterminant = ((hashNum + viewport.width + 200) % 100) / 100;
639
- if (config.checkTouchTargets && viewport.isMobile && touchDeterminant < 0.25) {
640
- issues.push({
641
- type: 'touch-target-size',
642
- severity: 'warning',
643
- element: '.small-button',
644
- description: `Touch target is smaller than ${config.minTouchTargetSize}px minimum`,
645
- viewport,
646
- });
647
- }
648
-
649
- // Deterministic check for font size
650
- const fontDeterminant = ((hashNum + viewport.width + 300) % 100) / 100;
651
- if (viewport.isMobile && fontDeterminant < 0.1) {
652
- issues.push({
653
- type: 'font-size-too-small',
654
- severity: 'warning',
655
- element: '.fine-print',
656
- description: `Font size is below ${config.minFontSize}px minimum for readability`,
657
- viewport,
658
- });
659
- }
660
-
661
- // Deterministic check for non-responsive images
662
- const imageDeterminant = ((hashNum + viewport.width + 400) % 100) / 100;
663
- if (imageDeterminant < 0.15) {
664
- issues.push({
665
- type: 'image-not-responsive',
666
- severity: 'info',
667
- element: 'img.hero-image',
668
- description: 'Image does not scale properly for viewport width',
669
- viewport,
670
- });
671
- }
672
-
673
- return issues;
674
- }
675
-
676
- private detectBreakpointIssues(
677
- url: string,
678
- viewportResults: ViewportResult[],
679
- config: ResponsiveTestConfig
680
- ): BreakpointIssue[] {
681
- // In production mode (simulationMode: false), return empty results
682
- // since we can't detect breakpoint issues without a real browser
683
- if (!config.simulationMode) {
684
- return [];
685
- }
686
-
687
- const issues: BreakpointIssue[] = [];
688
- const urlHash = this.hashUrl(url);
689
- const hashNum = parseInt(urlHash, 36);
690
-
691
- // Sort results by viewport width
692
- const sorted = [...viewportResults].sort(
693
- (a, b) => a.viewport.width - b.viewport.width
694
- );
695
-
696
- // Check for issues at each breakpoint
697
- for (let i = 0; i < sorted.length - 1; i++) {
698
- const current = sorted[i];
699
- const next = sorted[i + 1];
700
-
701
- // Check if there's a breakpoint between these viewports
702
- const breakpointBetween = config.breakpoints.find(
703
- (bp) => bp > current.viewport.width && bp < next.viewport.width
704
- );
705
-
706
- // Deterministic decision based on hash and breakpoint
707
- if (breakpointBetween) {
708
- const determinant = ((hashNum + breakpointBetween + i * 100) % 100) / 100;
709
- if (determinant < 0.2) {
710
- issues.push({
711
- breakpoint: breakpointBetween,
712
- description: 'Layout shifts abruptly at this breakpoint',
713
- affectedElements: ['.navigation', '.sidebar'],
714
- suggestion: 'Consider adding intermediate styles or adjusting breakpoint',
715
- });
716
- }
717
- }
718
- }
719
-
720
- return issues;
721
- }
722
-
723
- private calculateLayoutScore(
724
- viewportResults: ViewportResult[],
725
- issues: LayoutIssue[]
726
- ): number {
727
- const baseScore = 100;
728
-
729
- // Deduct points for issues
730
- const criticalPenalty = issues.filter((i) => i.severity === 'critical').length * 15;
731
- const warningPenalty = issues.filter((i) => i.severity === 'warning').length * 5;
732
- const infoPenalty = issues.filter((i) => i.severity === 'info').length * 1;
733
-
734
- // Bonus for passing all viewport tests
735
- const passingBonus = viewportResults.every((r) => r.passed) ? 5 : 0;
736
-
737
- return Math.max(0, baseScore - criticalPenalty - warningPenalty - infoPenalty + passingBonus);
738
- }
739
-
740
- private generateRecommendations(
741
- layoutIssues: LayoutIssue[],
742
- breakpointIssues: BreakpointIssue[]
743
- ): string[] {
744
- const recommendations: string[] = [];
745
-
746
- // Group issues by type
747
- const issuesByType = new Map<LayoutIssueType, LayoutIssue[]>();
748
- for (const issue of layoutIssues) {
749
- const existing = issuesByType.get(issue.type) || [];
750
- issuesByType.set(issue.type, [...existing, issue]);
751
- }
752
-
753
- // Generate recommendations for each issue type
754
- if (issuesByType.has('horizontal-overflow')) {
755
- recommendations.push(
756
- 'Use CSS overflow-x: hidden or adjust element widths to prevent horizontal scrolling'
757
- );
758
- }
759
-
760
- if (issuesByType.has('touch-target-size')) {
761
- recommendations.push(
762
- 'Increase touch target sizes to at least 44x44 pixels for better mobile usability'
763
- );
764
- }
765
-
766
- if (issuesByType.has('font-size-too-small')) {
767
- recommendations.push(
768
- 'Use relative font units (rem/em) and ensure minimum 16px base font size on mobile'
769
- );
770
- }
771
-
772
- if (issuesByType.has('image-not-responsive')) {
773
- recommendations.push(
774
- 'Use srcset and sizes attributes for responsive images, or CSS max-width: 100%'
775
- );
776
- }
777
-
778
- if (breakpointIssues.length > 0) {
779
- recommendations.push(
780
- 'Review CSS media queries to ensure smooth transitions between breakpoints'
781
- );
782
- }
783
-
784
- return recommendations;
785
- }
786
-
787
- private calculateStructuralDiff(
788
- screenshot1: Screenshot,
789
- screenshot2: Screenshot
790
- ): VisualDiff {
791
- // Calculate difference based on viewport changes
792
- const widthDiff = Math.abs(screenshot1.viewport.width - screenshot2.viewport.width);
793
- const heightDiff = Math.abs(screenshot1.viewport.height - screenshot2.viewport.height);
794
-
795
- // Larger viewport differences typically mean more layout changes
796
- const diffPercentage = Math.min(50, (widthDiff + heightDiff) / 20);
797
-
798
- return {
799
- baselineId: screenshot1.id,
800
- comparisonId: screenshot2.id,
801
- diffPercentage,
802
- diffPixels: Math.floor(diffPercentage * 1000),
803
- regions: [],
804
- status: diffPercentage < 10 ? 'acceptable' : 'changed',
805
- };
806
- }
807
-
808
- /**
809
- * Find content break points by analyzing URL structure
810
- * In production, this would test rendering at many widths
811
- */
812
- private findContentBreaks(url: string): ContentBreak[] {
813
- const breaks: ContentBreak[] = [];
814
-
815
- // Use URL hash for deterministic results
816
- const urlHash = this.hashUrl(url);
817
- const hashNum = parseInt(urlHash.substring(0, 6), 36);
818
-
819
- // Common responsive breakpoints to test
820
- const potentialBreaks = [375, 540, 768, 992, 1200, 1400];
821
-
822
- // Analyze URL patterns to determine likely break points
823
- const isEcommerce = url.includes('shop') || url.includes('product') || url.includes('cart');
824
- const isDashboard = url.includes('dashboard') || url.includes('admin') || url.includes('panel');
825
- const isContent = url.includes('blog') || url.includes('article') || url.includes('news');
826
-
827
- for (let i = 0; i < potentialBreaks.length; i++) {
828
- const width = potentialBreaks[i];
829
-
830
- // Deterministic decision based on hash and URL type
831
- const determinant = (hashNum + i * 100 + width) % 100;
832
-
833
- // Different page types have different break point patterns
834
- let threshold: number;
835
- let elements: string[];
836
- let reason: string;
837
-
838
- if (isEcommerce) {
839
- threshold = 40; // E-commerce often has more breakpoints
840
- elements = ['.product-grid', '.cart-items', '.checkout-form', '.filters'];
841
- reason = 'Product grid layout adjusts for viewport';
842
- } else if (isDashboard) {
843
- threshold = 50;
844
- elements = ['.sidebar', '.dashboard-cards', '.data-table', '.nav-menu'];
845
- reason = 'Dashboard layout reorganizes for smaller screens';
846
- } else if (isContent) {
847
- threshold = 60;
848
- elements = ['.article-content', '.sidebar-widgets', '.comments'];
849
- reason = 'Content width and sidebar visibility changes';
850
- } else {
851
- threshold = 55;
852
- elements = ['.container', '.grid', '.navigation', '.footer'];
853
- reason = 'Content layout changes significantly';
854
- }
855
-
856
- if (determinant < threshold) {
857
- // Select affected elements based on breakpoint width
858
- const affectedCount = Math.min(
859
- elements.length,
860
- 1 + Math.floor((hashNum + width) % elements.length)
861
- );
862
- const affectedElements = elements.slice(0, affectedCount);
863
-
864
- breaks.push({
865
- width,
866
- reason,
867
- affectedElements,
868
- });
869
- }
870
- }
871
-
872
- return breaks;
873
- }
874
-
875
- /**
876
- * Hash URL for deterministic results
877
- */
878
- private hashUrl(url: string): string {
879
- let hash = 0;
880
- for (let i = 0; i < url.length; i++) {
881
- const char = url.charCodeAt(i);
882
- hash = (hash << 5) - hash + char;
883
- hash = hash & hash;
884
- }
885
- return Math.abs(hash).toString(36);
886
- }
887
-
888
- private suggestBreakpoints(contentBreaks: ContentBreak[]): number[] {
889
- // Suggest breakpoints based on content breaks
890
- const suggestions = new Set<number>();
891
-
892
- for (const breakItem of contentBreaks) {
893
- // Round to nearest common breakpoint
894
- const rounded = Math.round(breakItem.width / 100) * 100;
895
- suggestions.add(rounded);
896
- }
897
-
898
- // Add standard breakpoints if not covered
899
- const standard = [576, 768, 992, 1200, 1400];
900
- for (const bp of standard) {
901
- if (!Array.from(suggestions).some((s) => Math.abs(s - bp) < 50)) {
902
- suggestions.add(bp);
903
- }
904
- }
905
-
906
- return Array.from(suggestions).sort((a, b) => a - b);
907
- }
908
-
909
- private calculateBreakpointCoverage(
910
- current: number[],
911
- contentBreaks: ContentBreak[]
912
- ): number {
913
- if (contentBreaks.length === 0) return 100;
914
-
915
- let covered = 0;
916
- for (const breakItem of contentBreaks) {
917
- // Check if any current breakpoint is within 50px
918
- if (current.some((bp) => Math.abs(bp - breakItem.width) < 50)) {
919
- covered++;
920
- }
921
- }
922
-
923
- return Math.round((covered / contentBreaks.length) * 100);
924
- }
925
-
926
- private async storeResult(result: ResponsiveTestResult): Promise<void> {
927
- const resultId = uuidv4();
928
- await this.memory.set(
929
- `visual-accessibility:responsive:${resultId}`,
930
- result,
931
- { namespace: 'visual-accessibility', persist: true }
932
- );
933
- }
934
- }