agentic-qe 3.6.1 → 3.6.3

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 (517) hide show
  1. package/.claude/agents/v3/qe-accessibility-auditor.md +14 -9
  2. package/.claude/agents/v3/qe-bdd-generator.md +14 -9
  3. package/.claude/agents/v3/qe-chaos-engineer.md +15 -10
  4. package/.claude/agents/v3/qe-code-complexity.md +14 -9
  5. package/.claude/agents/v3/qe-code-intelligence.md +14 -9
  6. package/.claude/agents/v3/qe-contract-validator.md +14 -9
  7. package/.claude/agents/v3/qe-coverage-specialist.md +14 -9
  8. package/.claude/agents/v3/qe-defect-predictor.md +14 -9
  9. package/.claude/agents/v3/qe-dependency-mapper.md +14 -9
  10. package/.claude/agents/v3/qe-deployment-advisor.md +14 -9
  11. package/.claude/agents/v3/qe-flaky-hunter.md +14 -9
  12. package/.claude/agents/v3/qe-fleet-commander.md +14 -9
  13. package/.claude/agents/v3/qe-gap-detector.md +14 -9
  14. package/.claude/agents/v3/qe-graphql-tester.md +14 -9
  15. package/.claude/agents/v3/qe-impact-analyzer.md +14 -9
  16. package/.claude/agents/v3/qe-kg-builder.md +14 -9
  17. package/.claude/agents/v3/qe-load-tester.md +14 -9
  18. package/.claude/agents/v3/qe-message-broker-tester.md +15 -10
  19. package/.claude/agents/v3/qe-metrics-optimizer.md +14 -9
  20. package/.claude/agents/v3/qe-middleware-validator.md +15 -10
  21. package/.claude/agents/v3/qe-mutation-tester.md +14 -9
  22. package/.claude/agents/v3/qe-odata-contract-tester.md +17 -12
  23. package/.claude/agents/v3/qe-performance-tester.md +14 -9
  24. package/.claude/agents/v3/qe-product-factors-assessor.md +19 -0
  25. package/.claude/agents/v3/qe-property-tester.md +14 -9
  26. package/.claude/agents/v3/qe-quality-criteria-recommender.md +2 -2
  27. package/.claude/agents/v3/qe-qx-partner.md +101 -14
  28. package/.claude/agents/v3/qe-regression-analyzer.md +14 -9
  29. package/.claude/agents/v3/qe-requirements-validator.md +14 -9
  30. package/.claude/agents/v3/qe-responsive-tester.md +14 -9
  31. package/.claude/agents/v3/qe-retry-handler.md +14 -9
  32. package/.claude/agents/v3/qe-risk-assessor.md +14 -9
  33. package/.claude/agents/v3/qe-root-cause-analyzer.md +14 -9
  34. package/.claude/agents/v3/qe-sap-idoc-tester.md +16 -11
  35. package/.claude/agents/v3/qe-sap-rfc-tester.md +15 -10
  36. package/.claude/agents/v3/qe-security-auditor.md +18 -9
  37. package/.claude/agents/v3/qe-security-scanner.md +15 -10
  38. package/.claude/agents/v3/qe-soap-tester.md +15 -10
  39. package/.claude/agents/v3/qe-sod-analyzer.md +17 -12
  40. package/.claude/agents/v3/qe-test-architect.md +14 -9
  41. package/.claude/agents/v3/qe-transfer-specialist.md +14 -9
  42. package/.claude/agents/v3/subagents/qe-code-reviewer.md +14 -9
  43. package/.claude/agents/v3/subagents/qe-integration-reviewer.md +14 -9
  44. package/.claude/agents/v3/subagents/qe-performance-reviewer.md +14 -9
  45. package/.claude/agents/v3/subagents/qe-security-reviewer.md +14 -9
  46. package/.claude/agents/v3/subagents/qe-tdd-green.md +14 -9
  47. package/.claude/agents/v3/subagents/qe-tdd-red.md +14 -9
  48. package/.claude/agents/v3/subagents/qe-tdd-refactor.md +14 -9
  49. package/.claude/agents/v3/templates/qx-report-template.html +26 -22
  50. package/.claude/skills/.validation/README.md +2 -2
  51. package/.claude/skills/.validation/skill-validation-mcp-integration.md +1 -1
  52. package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +1 -1
  53. package/.claude/skills/TRUST-TIERS.md +55 -55
  54. package/.claude/skills/a11y-ally/SKILL.md +1 -1
  55. package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +1 -1
  56. package/.claude/skills/a11y-ally/scripts/validate-config.json +42 -0
  57. package/.claude/skills/accessibility-testing/SKILL.md +1 -1
  58. package/.claude/skills/accessibility-testing/scripts/validate-config.json +56 -0
  59. package/.claude/skills/api-testing-patterns/SKILL.md +1 -1
  60. package/.claude/skills/api-testing-patterns/scripts/validate-config.json +61 -0
  61. package/.claude/skills/brutal-honesty-review/SKILL.md +1 -1
  62. package/.claude/skills/brutal-honesty-review/scripts/validate-config.json +34 -0
  63. package/.claude/skills/bug-reporting-excellence/SKILL.md +1 -1
  64. package/.claude/skills/bug-reporting-excellence/scripts/validate-config.json +34 -0
  65. package/.claude/skills/chaos-engineering-resilience/SKILL.md +1 -1
  66. package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +1 -1
  67. package/.claude/skills/chaos-engineering-resilience/scripts/validate-config.json +47 -0
  68. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +1 -1
  69. package/.claude/skills/cicd-pipeline-qe-orchestrator/scripts/validate-config.json +42 -0
  70. package/.claude/skills/code-review-quality/SKILL.md +1 -1
  71. package/.claude/skills/code-review-quality/scripts/validate-config.json +34 -0
  72. package/.claude/skills/compatibility-testing/SKILL.md +1 -1
  73. package/.claude/skills/compatibility-testing/scripts/validate-config.json +44 -0
  74. package/.claude/skills/compliance-testing/SKILL.md +1 -1
  75. package/.claude/skills/compliance-testing/scripts/validate-config.json +39 -0
  76. package/.claude/skills/contract-testing/SKILL.md +1 -1
  77. package/.claude/skills/contract-testing/scripts/validate-config.json +59 -0
  78. package/.claude/skills/database-testing/SKILL.md +1 -1
  79. package/.claude/skills/database-testing/evals/database-testing.yaml +1 -1
  80. package/.claude/skills/database-testing/scripts/validate-config.json +48 -0
  81. package/.claude/skills/enterprise-integration-testing/SKILL.md +1 -1
  82. package/.claude/skills/localization-testing/SKILL.md +1 -1
  83. package/.claude/skills/localization-testing/evals/localization-testing.yaml +1 -1
  84. package/.claude/skills/localization-testing/scripts/validate-config.json +42 -0
  85. package/.claude/skills/middleware-testing-patterns/SKILL.md +1 -1
  86. package/.claude/skills/mobile-testing/SKILL.md +1 -1
  87. package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +1 -1
  88. package/.claude/skills/mobile-testing/scripts/validate-config.json +43 -0
  89. package/.claude/skills/mutation-testing/SKILL.md +1 -1
  90. package/.claude/skills/mutation-testing/scripts/validate-config.json +44 -0
  91. package/.claude/skills/n8n-expression-testing/SKILL.md +1 -1
  92. package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +1 -1
  93. package/.claude/skills/n8n-expression-testing/scripts/validate-config.json +39 -0
  94. package/.claude/skills/n8n-integration-testing-patterns/SKILL.md +1 -1
  95. package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +1 -1
  96. package/.claude/skills/n8n-integration-testing-patterns/scripts/validate-config.json +34 -0
  97. package/.claude/skills/n8n-security-testing/SKILL.md +1 -1
  98. package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +1 -1
  99. package/.claude/skills/n8n-security-testing/scripts/validate-config.json +34 -0
  100. package/.claude/skills/n8n-trigger-testing-strategies/SKILL.md +1 -1
  101. package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +1 -1
  102. package/.claude/skills/n8n-trigger-testing-strategies/scripts/validate-config.json +34 -0
  103. package/.claude/skills/n8n-workflow-testing-fundamentals/SKILL.md +1 -1
  104. package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +1 -1
  105. package/.claude/skills/n8n-workflow-testing-fundamentals/scripts/validate-config.json +35 -0
  106. package/.claude/skills/observability-testing-patterns/SKILL.md +1 -1
  107. package/.claude/skills/pentest-validation/SKILL.md +1 -1
  108. package/.claude/skills/pentest-validation/evals/pentest-validation.yaml +1 -1
  109. package/.claude/skills/pentest-validation/scripts/validate-config.json +12 -0
  110. package/.claude/skills/performance-analysis/SKILL.md +1 -1
  111. package/.claude/skills/performance-analysis/scripts/validate-config.json +36 -0
  112. package/.claude/skills/performance-testing/SKILL.md +1 -1
  113. package/.claude/skills/performance-testing/evals/performance-testing.yaml +1 -1
  114. package/.claude/skills/performance-testing/scripts/validate-config.json +55 -0
  115. package/.claude/skills/qcsd-cicd-swarm/SKILL.md +1 -1
  116. package/.claude/skills/qcsd-development-swarm/SKILL.md +1 -1
  117. package/.claude/skills/qcsd-ideation-swarm/SKILL.md +1 -1
  118. package/.claude/skills/qcsd-ideation-swarm/scripts/validate-config.json +25 -0
  119. package/.claude/skills/qcsd-refinement-swarm/SKILL.md +1 -1
  120. package/.claude/skills/qcsd-refinement-swarm/scripts/validate-config.json +25 -0
  121. package/.claude/skills/qe-chaos-resilience/SKILL.md +1 -1
  122. package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +1 -1
  123. package/.claude/skills/qe-chaos-resilience/scripts/validate-config.json +43 -0
  124. package/.claude/skills/qe-code-intelligence/SKILL.md +1 -1
  125. package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +1 -1
  126. package/.claude/skills/qe-code-intelligence/scripts/validate-config.json +41 -0
  127. package/.claude/skills/qe-contract-testing/SKILL.md +1 -1
  128. package/.claude/skills/qe-contract-testing/evals/qe-contract-testing.yaml +1 -1
  129. package/.claude/skills/qe-contract-testing/scripts/validate-config.json +42 -0
  130. package/.claude/skills/qe-coverage-analysis/SKILL.md +1 -1
  131. package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +1 -1
  132. package/.claude/skills/qe-coverage-analysis/scripts/validate-config.json +42 -0
  133. package/.claude/skills/qe-defect-intelligence/SKILL.md +1 -1
  134. package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +1 -1
  135. package/.claude/skills/qe-defect-intelligence/scripts/validate-config.json +40 -0
  136. package/.claude/skills/qe-iterative-loop/SKILL.md +1 -1
  137. package/.claude/skills/qe-iterative-loop/scripts/validate-config.json +40 -0
  138. package/.claude/skills/qe-learning-optimization/SKILL.md +1 -1
  139. package/.claude/skills/qe-learning-optimization/scripts/validate-config.json +25 -0
  140. package/.claude/skills/qe-quality-assessment/SKILL.md +1 -1
  141. package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +1 -1
  142. package/.claude/skills/qe-quality-assessment/scripts/validate-config.json +47 -0
  143. package/.claude/skills/qe-requirements-validation/SKILL.md +1 -1
  144. package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +1 -1
  145. package/.claude/skills/qe-requirements-validation/scripts/validate-config.json +37 -0
  146. package/.claude/skills/qe-security-compliance/SKILL.md +1 -1
  147. package/.claude/skills/qe-security-compliance/evals/qe-security-compliance.yaml +1 -1
  148. package/.claude/skills/qe-security-compliance/scripts/validate-config.json +41 -0
  149. package/.claude/skills/qe-test-execution/SKILL.md +1 -1
  150. package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +1 -1
  151. package/.claude/skills/qe-test-execution/scripts/validate-config.json +37 -0
  152. package/.claude/skills/qe-test-generation/SKILL.md +1 -1
  153. package/.claude/skills/qe-test-generation/scripts/validate-config.json +25 -0
  154. package/.claude/skills/qe-visual-accessibility/SKILL.md +1 -1
  155. package/.claude/skills/qe-visual-accessibility/scripts/validate-config.json +25 -0
  156. package/.claude/skills/quality-metrics/SKILL.md +1 -1
  157. package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +1 -1
  158. package/.claude/skills/quality-metrics/scripts/validate-config.json +43 -0
  159. package/.claude/skills/refactoring-patterns/SKILL.md +1 -1
  160. package/.claude/skills/refactoring-patterns/scripts/validate-config.json +35 -0
  161. package/.claude/skills/regression-testing/SKILL.md +1 -1
  162. package/.claude/skills/regression-testing/evals/regression-testing.yaml +1 -1
  163. package/.claude/skills/regression-testing/scripts/validate-config.json +50 -0
  164. package/.claude/skills/risk-based-testing/SKILL.md +1 -1
  165. package/.claude/skills/risk-based-testing/scripts/validate-config.json +25 -0
  166. package/.claude/skills/security-testing/SKILL.md +1 -1
  167. package/.claude/skills/security-testing/evals/security-testing.yaml +1 -1
  168. package/.claude/skills/security-testing/scripts/validate-config.json +45 -0
  169. package/.claude/skills/security-visual-testing/SKILL.md +1 -1
  170. package/.claude/skills/security-visual-testing/scripts/validate-config.json +45 -0
  171. package/.claude/skills/sherlock-review/SKILL.md +1 -1
  172. package/.claude/skills/sherlock-review/scripts/validate-config.json +35 -0
  173. package/.claude/skills/shift-left-testing/SKILL.md +1 -1
  174. package/.claude/skills/shift-left-testing/scripts/validate-config.json +25 -0
  175. package/.claude/skills/shift-right-testing/SKILL.md +1 -1
  176. package/.claude/skills/shift-right-testing/scripts/validate-config.json +25 -0
  177. package/.claude/skills/skill-builder/SKILL.md +2 -2
  178. package/.claude/skills/skills-manifest.json +1 -1
  179. package/.claude/skills/tdd-london-chicago/SKILL.md +1 -1
  180. package/.claude/skills/tdd-london-chicago/scripts/validate-config.json +43 -0
  181. package/.claude/skills/test-automation-strategy/SKILL.md +1 -1
  182. package/.claude/skills/test-automation-strategy/scripts/validate-config.json +39 -0
  183. package/.claude/skills/test-data-management/SKILL.md +1 -1
  184. package/.claude/skills/test-data-management/evals/test-data-management.yaml +1 -1
  185. package/.claude/skills/test-data-management/scripts/validate-config.json +41 -0
  186. package/.claude/skills/test-design-techniques/SKILL.md +1 -1
  187. package/.claude/skills/test-design-techniques/scripts/validate-config.json +36 -0
  188. package/.claude/skills/test-reporting-analytics/SKILL.md +1 -1
  189. package/.claude/skills/test-reporting-analytics/scripts/validate-config.json +36 -0
  190. package/.claude/skills/testability-scoring/SKILL.md +1 -1
  191. package/.claude/skills/testability-scoring/scripts/validate-config.json +42 -0
  192. package/.claude/skills/trust-tier-manifest.json +106 -106
  193. package/.claude/skills/verification-quality/scripts/validate-config.json +36 -0
  194. package/.claude/skills/visual-testing-advanced/SKILL.md +1 -1
  195. package/.claude/skills/visual-testing-advanced/scripts/validate-config.json +38 -0
  196. package/.claude/skills/wms-testing-patterns/SKILL.md +1 -1
  197. package/.claude/skills/wms-testing-patterns/evals/wms-testing-patterns.yaml +165 -0
  198. package/.claude/skills/wms-testing-patterns/schemas/output.json +150 -0
  199. package/.claude/skills/wms-testing-patterns/scripts/validate-config.json +51 -0
  200. package/README.md +20 -20
  201. package/package.json +6 -6
  202. package/scripts/cloud-db-config.json +1 -1
  203. package/scripts/migrate-validators.cjs +171 -0
  204. package/scripts/postinstall.cjs +57 -0
  205. package/scripts/preinstall.cjs +28 -8
  206. package/scripts/test-schema-validation.js +2 -2
  207. package/scripts/update-skill-manifest.ts +3 -3
  208. package/scripts/validate-skill.cjs +384 -0
  209. package/scripts/validate-tier3.cjs +61 -0
  210. package/scripts/validator-lib.cjs +274 -0
  211. package/v3/CHANGELOG.md +32 -0
  212. package/v3/assets/agents/v3/qe-product-factors-assessor.md +19 -0
  213. package/v3/assets/agents/v3/qe-quality-criteria-recommender.md +2 -2
  214. package/v3/assets/agents/v3/qe-qx-partner.md +27 -0
  215. package/v3/assets/skills/.validation/README.md +1 -1
  216. package/v3/assets/skills/.validation/skill-validation-mcp-integration.md +1 -1
  217. package/v3/assets/skills/.validation/templates/skill-frontmatter.example.yaml +1 -1
  218. package/v3/assets/skills/accessibility-testing/SKILL.md +1 -1
  219. package/v3/assets/skills/accessibility-testing/scripts/validate-config.json +56 -0
  220. package/v3/assets/skills/api-testing-patterns/SKILL.md +1 -1
  221. package/v3/assets/skills/api-testing-patterns/scripts/validate-config.json +61 -0
  222. package/v3/assets/skills/bug-reporting-excellence/SKILL.md +1 -1
  223. package/v3/assets/skills/bug-reporting-excellence/scripts/validate-config.json +34 -0
  224. package/v3/assets/skills/chaos-engineering-resilience/SKILL.md +1 -1
  225. package/v3/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +1 -1
  226. package/v3/assets/skills/chaos-engineering-resilience/scripts/validate-config.json +47 -0
  227. package/v3/assets/skills/code-review-quality/SKILL.md +1 -1
  228. package/v3/assets/skills/code-review-quality/scripts/validate-config.json +34 -0
  229. package/v3/assets/skills/compatibility-testing/SKILL.md +1 -1
  230. package/v3/assets/skills/compatibility-testing/scripts/validate-config.json +44 -0
  231. package/v3/assets/skills/compliance-testing/SKILL.md +1 -1
  232. package/v3/assets/skills/compliance-testing/scripts/validate-config.json +39 -0
  233. package/v3/assets/skills/contract-testing/SKILL.md +1 -1
  234. package/v3/assets/skills/contract-testing/scripts/validate-config.json +59 -0
  235. package/v3/assets/skills/database-testing/SKILL.md +1 -1
  236. package/v3/assets/skills/database-testing/evals/database-testing.yaml +1 -1
  237. package/v3/assets/skills/database-testing/scripts/validate-config.json +48 -0
  238. package/v3/assets/skills/enterprise-integration-testing/SKILL.md +1 -1
  239. package/v3/assets/skills/localization-testing/SKILL.md +1 -1
  240. package/v3/assets/skills/localization-testing/evals/localization-testing.yaml +1 -1
  241. package/v3/assets/skills/localization-testing/scripts/validate-config.json +42 -0
  242. package/v3/assets/skills/middleware-testing-patterns/SKILL.md +1 -1
  243. package/v3/assets/skills/mobile-testing/SKILL.md +1 -1
  244. package/v3/assets/skills/mobile-testing/evals/mobile-testing.yaml +1 -1
  245. package/v3/assets/skills/mobile-testing/scripts/validate-config.json +43 -0
  246. package/v3/assets/skills/mutation-testing/SKILL.md +1 -1
  247. package/v3/assets/skills/mutation-testing/scripts/validate-config.json +44 -0
  248. package/v3/assets/skills/observability-testing-patterns/SKILL.md +1 -1
  249. package/v3/assets/skills/pentest-validation/SKILL.md +1 -1
  250. package/v3/assets/skills/pentest-validation/evals/pentest-validation.yaml +1 -1
  251. package/v3/assets/skills/performance-testing/SKILL.md +1 -1
  252. package/v3/assets/skills/performance-testing/evals/performance-testing.yaml +1 -1
  253. package/v3/assets/skills/performance-testing/scripts/validate-config.json +55 -0
  254. package/v3/assets/skills/qcsd-cicd-swarm/SKILL.md +1 -1
  255. package/v3/assets/skills/qcsd-development-swarm/SKILL.md +1 -1
  256. package/v3/assets/skills/qcsd-ideation-swarm/SKILL.md +1 -1
  257. package/v3/assets/skills/qcsd-refinement-swarm/SKILL.md +1 -1
  258. package/v3/assets/skills/qe-chaos-resilience/SKILL.md +1 -1
  259. package/v3/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +1 -1
  260. package/v3/assets/skills/qe-chaos-resilience/scripts/validate-config.json +43 -0
  261. package/v3/assets/skills/qe-code-intelligence/SKILL.md +1 -1
  262. package/v3/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +1 -1
  263. package/v3/assets/skills/qe-code-intelligence/scripts/validate-config.json +41 -0
  264. package/v3/assets/skills/qe-contract-testing/SKILL.md +1 -1
  265. package/v3/assets/skills/qe-contract-testing/evals/qe-contract-testing.yaml +1 -1
  266. package/v3/assets/skills/qe-contract-testing/scripts/validate-config.json +42 -0
  267. package/v3/assets/skills/qe-coverage-analysis/SKILL.md +1 -1
  268. package/v3/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +1 -1
  269. package/v3/assets/skills/qe-coverage-analysis/scripts/validate-config.json +42 -0
  270. package/v3/assets/skills/qe-defect-intelligence/SKILL.md +1 -1
  271. package/v3/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +1 -1
  272. package/v3/assets/skills/qe-defect-intelligence/scripts/validate-config.json +40 -0
  273. package/v3/assets/skills/qe-iterative-loop/SKILL.md +1 -1
  274. package/v3/assets/skills/qe-iterative-loop/scripts/validate-config.json +40 -0
  275. package/v3/assets/skills/qe-learning-optimization/SKILL.md +1 -1
  276. package/v3/assets/skills/qe-learning-optimization/scripts/validate-config.json +25 -0
  277. package/v3/assets/skills/qe-quality-assessment/SKILL.md +1 -1
  278. package/v3/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +1 -1
  279. package/v3/assets/skills/qe-quality-assessment/scripts/validate-config.json +47 -0
  280. package/v3/assets/skills/qe-requirements-validation/SKILL.md +1 -1
  281. package/v3/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +1 -1
  282. package/v3/assets/skills/qe-requirements-validation/scripts/validate-config.json +37 -0
  283. package/v3/assets/skills/qe-security-compliance/SKILL.md +1 -1
  284. package/v3/assets/skills/qe-security-compliance/evals/qe-security-compliance.yaml +1 -1
  285. package/v3/assets/skills/qe-security-compliance/scripts/validate-config.json +41 -0
  286. package/v3/assets/skills/qe-test-execution/SKILL.md +1 -1
  287. package/v3/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +1 -1
  288. package/v3/assets/skills/qe-test-execution/scripts/validate-config.json +37 -0
  289. package/v3/assets/skills/qe-test-generation/SKILL.md +1 -1
  290. package/v3/assets/skills/qe-test-generation/scripts/validate-config.json +25 -0
  291. package/v3/assets/skills/qe-visual-accessibility/SKILL.md +1 -1
  292. package/v3/assets/skills/qe-visual-accessibility/scripts/validate-config.json +25 -0
  293. package/v3/assets/skills/quality-metrics/SKILL.md +1 -1
  294. package/v3/assets/skills/quality-metrics/evals/quality-metrics.yaml +1 -1
  295. package/v3/assets/skills/quality-metrics/scripts/validate-config.json +43 -0
  296. package/v3/assets/skills/refactoring-patterns/SKILL.md +1 -1
  297. package/v3/assets/skills/refactoring-patterns/scripts/validate-config.json +35 -0
  298. package/v3/assets/skills/regression-testing/SKILL.md +1 -1
  299. package/v3/assets/skills/regression-testing/evals/regression-testing.yaml +1 -1
  300. package/v3/assets/skills/regression-testing/scripts/validate-config.json +50 -0
  301. package/v3/assets/skills/risk-based-testing/SKILL.md +1 -1
  302. package/v3/assets/skills/risk-based-testing/scripts/validate-config.json +25 -0
  303. package/v3/assets/skills/security-testing/SKILL.md +1 -1
  304. package/v3/assets/skills/security-testing/evals/security-testing.yaml +1 -1
  305. package/v3/assets/skills/security-testing/scripts/validate-config.json +45 -0
  306. package/v3/assets/skills/security-visual-testing/SKILL.md +1 -1
  307. package/v3/assets/skills/shift-left-testing/SKILL.md +1 -1
  308. package/v3/assets/skills/shift-left-testing/scripts/validate-config.json +25 -0
  309. package/v3/assets/skills/shift-right-testing/SKILL.md +1 -1
  310. package/v3/assets/skills/shift-right-testing/scripts/validate-config.json +25 -0
  311. package/v3/assets/skills/tdd-london-chicago/SKILL.md +1 -1
  312. package/v3/assets/skills/tdd-london-chicago/scripts/validate-config.json +43 -0
  313. package/v3/assets/skills/test-automation-strategy/SKILL.md +1 -1
  314. package/v3/assets/skills/test-automation-strategy/scripts/validate-config.json +39 -0
  315. package/v3/assets/skills/test-data-management/SKILL.md +1 -1
  316. package/v3/assets/skills/test-data-management/evals/test-data-management.yaml +1 -1
  317. package/v3/assets/skills/test-data-management/scripts/validate-config.json +41 -0
  318. package/v3/assets/skills/test-design-techniques/SKILL.md +1 -1
  319. package/v3/assets/skills/test-design-techniques/scripts/validate-config.json +36 -0
  320. package/v3/assets/skills/test-reporting-analytics/SKILL.md +1 -1
  321. package/v3/assets/skills/test-reporting-analytics/scripts/validate-config.json +36 -0
  322. package/v3/assets/skills/verification-quality/SKILL.md +0 -6
  323. package/v3/assets/skills/verification-quality/scripts/validate-config.json +36 -0
  324. package/v3/assets/skills/visual-testing-advanced/SKILL.md +1 -1
  325. package/v3/assets/skills/visual-testing-advanced/scripts/validate-config.json +38 -0
  326. package/v3/assets/skills/wms-testing-patterns/SKILL.md +1 -1
  327. package/v3/dist/adapters/claude-flow/model-router-bridge.js +3 -3
  328. package/v3/dist/adapters/claude-flow/model-router-bridge.js.map +1 -1
  329. package/v3/dist/adapters/claude-flow/pretrain-bridge.js +4 -4
  330. package/v3/dist/adapters/claude-flow/pretrain-bridge.js.map +1 -1
  331. package/v3/dist/adapters/claude-flow/trajectory-bridge.js +4 -4
  332. package/v3/dist/adapters/claude-flow/trajectory-bridge.js.map +1 -1
  333. package/v3/dist/cli/bundle.js +172 -159
  334. package/v3/dist/cli/commands/claude-flow-setup.js +3 -3
  335. package/v3/dist/cli/commands/claude-flow-setup.js.map +1 -1
  336. package/v3/dist/cli/commands/completions.d.ts.map +1 -1
  337. package/v3/dist/cli/commands/completions.js +2 -1
  338. package/v3/dist/cli/commands/completions.js.map +1 -1
  339. package/v3/dist/cli/commands/hooks.js +8 -8
  340. package/v3/dist/cli/commands/hooks.js.map +1 -1
  341. package/v3/dist/cli/completions/index.d.ts.map +1 -1
  342. package/v3/dist/cli/completions/index.js +4 -3
  343. package/v3/dist/cli/completions/index.js.map +1 -1
  344. package/v3/dist/domains/code-intelligence/services/metric-collector/test-counter.js +5 -5
  345. package/v3/dist/domains/code-intelligence/services/metric-collector/test-counter.js.map +1 -1
  346. package/v3/dist/domains/requirements-validation/services/quality-criteria/quality-criteria-service.js +1 -1
  347. package/v3/dist/domains/requirements-validation/services/quality-criteria/quality-criteria-service.js.map +1 -1
  348. package/v3/dist/init/agents-installer.d.ts +5 -1
  349. package/v3/dist/init/agents-installer.d.ts.map +1 -1
  350. package/v3/dist/init/agents-installer.js +13 -5
  351. package/v3/dist/init/agents-installer.js.map +1 -1
  352. package/v3/dist/init/enhancements/claude-flow-adapter.d.ts.map +1 -1
  353. package/v3/dist/init/enhancements/claude-flow-adapter.js +15 -12
  354. package/v3/dist/init/enhancements/claude-flow-adapter.js.map +1 -1
  355. package/v3/dist/init/enhancements/detector.js +2 -2
  356. package/v3/dist/init/enhancements/detector.js.map +1 -1
  357. package/v3/dist/init/init-wizard.d.ts.map +1 -1
  358. package/v3/dist/init/init-wizard.js +17 -33
  359. package/v3/dist/init/init-wizard.js.map +1 -1
  360. package/v3/dist/init/phases/07-hooks.js +9 -9
  361. package/v3/dist/init/phases/07-hooks.js.map +1 -1
  362. package/v3/dist/init/phases/10-workers.d.ts.map +1 -1
  363. package/v3/dist/init/phases/10-workers.js +74 -85
  364. package/v3/dist/init/phases/10-workers.js.map +1 -1
  365. package/v3/dist/init/phases/12-verification.d.ts.map +1 -1
  366. package/v3/dist/init/phases/12-verification.js +13 -1
  367. package/v3/dist/init/phases/12-verification.js.map +1 -1
  368. package/v3/dist/kernel/hybrid-backend.d.ts.map +1 -1
  369. package/v3/dist/kernel/hybrid-backend.js +4 -1
  370. package/v3/dist/kernel/hybrid-backend.js.map +1 -1
  371. package/v3/dist/kernel/memory-backend.d.ts.map +1 -1
  372. package/v3/dist/kernel/memory-backend.js +3 -0
  373. package/v3/dist/kernel/memory-backend.js.map +1 -1
  374. package/v3/dist/mcp/bundle.js +1340 -19
  375. package/v3/dist/mcp/tools/index.d.ts +2 -1
  376. package/v3/dist/mcp/tools/index.d.ts.map +1 -1
  377. package/v3/dist/mcp/tools/index.js +5 -1
  378. package/v3/dist/mcp/tools/index.js.map +1 -1
  379. package/v3/dist/mcp/tools/qx-analysis/analyze.d.ts +33 -0
  380. package/v3/dist/mcp/tools/qx-analysis/analyze.d.ts.map +1 -0
  381. package/v3/dist/mcp/tools/qx-analysis/analyze.js +679 -0
  382. package/v3/dist/mcp/tools/qx-analysis/analyze.js.map +1 -0
  383. package/v3/dist/mcp/tools/qx-analysis/heuristics-engine.d.ts +38 -0
  384. package/v3/dist/mcp/tools/qx-analysis/heuristics-engine.d.ts.map +1 -0
  385. package/v3/dist/mcp/tools/qx-analysis/heuristics-engine.js +458 -0
  386. package/v3/dist/mcp/tools/qx-analysis/heuristics-engine.js.map +1 -0
  387. package/v3/dist/mcp/tools/qx-analysis/impact-analyzer.d.ts +16 -0
  388. package/v3/dist/mcp/tools/qx-analysis/impact-analyzer.d.ts.map +1 -0
  389. package/v3/dist/mcp/tools/qx-analysis/impact-analyzer.js +175 -0
  390. package/v3/dist/mcp/tools/qx-analysis/impact-analyzer.js.map +1 -0
  391. package/v3/dist/mcp/tools/qx-analysis/index.d.ts +27 -0
  392. package/v3/dist/mcp/tools/qx-analysis/index.d.ts.map +1 -0
  393. package/v3/dist/mcp/tools/qx-analysis/index.js +34 -0
  394. package/v3/dist/mcp/tools/qx-analysis/index.js.map +1 -0
  395. package/v3/dist/mcp/tools/qx-analysis/oracle-detector.d.ts +22 -0
  396. package/v3/dist/mcp/tools/qx-analysis/oracle-detector.d.ts.map +1 -0
  397. package/v3/dist/mcp/tools/qx-analysis/oracle-detector.js +194 -0
  398. package/v3/dist/mcp/tools/qx-analysis/oracle-detector.js.map +1 -0
  399. package/v3/dist/mcp/tools/qx-analysis/types.d.ts +278 -0
  400. package/v3/dist/mcp/tools/qx-analysis/types.d.ts.map +1 -0
  401. package/v3/dist/mcp/tools/qx-analysis/types.js +46 -0
  402. package/v3/dist/mcp/tools/qx-analysis/types.js.map +1 -0
  403. package/v3/dist/mcp/tools/registry.d.ts +1 -0
  404. package/v3/dist/mcp/tools/registry.d.ts.map +1 -1
  405. package/v3/dist/mcp/tools/registry.js +5 -0
  406. package/v3/dist/mcp/tools/registry.js.map +1 -1
  407. package/v3/dist/sync/cloud/tunnel-manager.d.ts.map +1 -1
  408. package/v3/dist/sync/cloud/tunnel-manager.js +11 -0
  409. package/v3/dist/sync/cloud/tunnel-manager.js.map +1 -1
  410. package/v3/package.json +5 -5
  411. package/.claude/skills/.validation/templates/validate.template.sh +0 -1060
  412. package/.claude/skills/.validation/templates/validator-lib.sh +0 -1031
  413. package/.claude/skills/a11y-ally/scripts/validate.sh +0 -690
  414. package/.claude/skills/accessibility-testing/scripts/validate.sh +0 -943
  415. package/.claude/skills/api-testing-patterns/scripts/validate.sh +0 -931
  416. package/.claude/skills/brutal-honesty-review/scripts/validate.sh +0 -130
  417. package/.claude/skills/bug-reporting-excellence/scripts/validate.sh +0 -108
  418. package/.claude/skills/chaos-engineering-resilience/scripts/validate.sh +0 -1107
  419. package/.claude/skills/cicd-pipeline-qe-orchestrator/scripts/validate.sh +0 -310
  420. package/.claude/skills/code-review-quality/scripts/validate.sh +0 -113
  421. package/.claude/skills/compatibility-testing/scripts/validate.sh +0 -605
  422. package/.claude/skills/compliance-testing/scripts/validate.sh +0 -888
  423. package/.claude/skills/contract-testing/scripts/validate.sh +0 -1033
  424. package/.claude/skills/database-testing/scripts/validate.sh +0 -1099
  425. package/.claude/skills/localization-testing/scripts/validate.sh +0 -131
  426. package/.claude/skills/mobile-testing/scripts/validate.sh +0 -127
  427. package/.claude/skills/mutation-testing/scripts/validate.sh +0 -992
  428. package/.claude/skills/n8n-expression-testing/scripts/validate.sh +0 -162
  429. package/.claude/skills/n8n-integration-testing-patterns/scripts/validate.sh +0 -104
  430. package/.claude/skills/n8n-security-testing/scripts/validate.sh +0 -120
  431. package/.claude/skills/n8n-trigger-testing-strategies/scripts/validate.sh +0 -121
  432. package/.claude/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +0 -126
  433. package/.claude/skills/pentest-validation/scripts/validate.sh +0 -402
  434. package/.claude/skills/performance-analysis/scripts/validate.sh +0 -63
  435. package/.claude/skills/performance-testing/scripts/validate.sh +0 -1090
  436. package/.claude/skills/qcsd-ideation-swarm/scripts/validate.sh +0 -56
  437. package/.claude/skills/qcsd-refinement-swarm/scripts/validate.sh +0 -56
  438. package/.claude/skills/qe-chaos-resilience/scripts/validate.sh +0 -401
  439. package/.claude/skills/qe-code-intelligence/scripts/validate.sh +0 -408
  440. package/.claude/skills/qe-contract-testing/scripts/validate.sh +0 -421
  441. package/.claude/skills/qe-coverage-analysis/scripts/validate.sh +0 -453
  442. package/.claude/skills/qe-defect-intelligence/scripts/validate.sh +0 -466
  443. package/.claude/skills/qe-iterative-loop/scripts/validate.sh +0 -474
  444. package/.claude/skills/qe-learning-optimization/scripts/validate.sh +0 -56
  445. package/.claude/skills/qe-quality-assessment/scripts/validate.sh +0 -352
  446. package/.claude/skills/qe-requirements-validation/scripts/validate.sh +0 -275
  447. package/.claude/skills/qe-security-compliance/scripts/validate.sh +0 -305
  448. package/.claude/skills/qe-test-execution/scripts/validate.sh +0 -323
  449. package/.claude/skills/qe-test-generation/scripts/validate.sh +0 -56
  450. package/.claude/skills/qe-visual-accessibility/scripts/validate.sh +0 -56
  451. package/.claude/skills/quality-metrics/scripts/validate.sh +0 -434
  452. package/.claude/skills/refactoring-patterns/scripts/validate.sh +0 -241
  453. package/.claude/skills/regression-testing/scripts/validate.sh +0 -130
  454. package/.claude/skills/risk-based-testing/scripts/validate.sh +0 -56
  455. package/.claude/skills/security-testing/scripts/validate.sh +0 -967
  456. package/.claude/skills/security-visual-testing/scripts/validate.sh +0 -748
  457. package/.claude/skills/sherlock-review/scripts/validate.sh +0 -115
  458. package/.claude/skills/shift-left-testing/scripts/validate.sh +0 -56
  459. package/.claude/skills/shift-right-testing/scripts/validate.sh +0 -56
  460. package/.claude/skills/tdd-london-chicago/scripts/validate.sh +0 -214
  461. package/.claude/skills/test-automation-strategy/scripts/validate.sh +0 -195
  462. package/.claude/skills/test-data-management/scripts/validate.sh +0 -137
  463. package/.claude/skills/test-design-techniques/scripts/validate.sh +0 -91
  464. package/.claude/skills/test-reporting-analytics/scripts/validate.sh +0 -77
  465. package/.claude/skills/testability-scoring/scripts/validate.sh +0 -891
  466. package/.claude/skills/verification-quality/scripts/validate.sh +0 -77
  467. package/.claude/skills/visual-testing-advanced/scripts/validate.sh +0 -77
  468. package/v3/assets/skills/.validation/templates/validate.template.sh +0 -1060
  469. package/v3/assets/skills/.validation/templates/validator-lib.sh +0 -1031
  470. package/v3/assets/skills/accessibility-testing/scripts/validate.sh +0 -943
  471. package/v3/assets/skills/api-testing-patterns/scripts/validate.sh +0 -931
  472. package/v3/assets/skills/aqe-v2-v3-migration/skill.md +0 -326
  473. package/v3/assets/skills/bug-reporting-excellence/scripts/validate.sh +0 -108
  474. package/v3/assets/skills/chaos-engineering-resilience/scripts/validate.sh +0 -1107
  475. package/v3/assets/skills/code-review-quality/scripts/validate.sh +0 -113
  476. package/v3/assets/skills/compatibility-testing/scripts/validate.sh +0 -605
  477. package/v3/assets/skills/compliance-testing/scripts/validate.sh +0 -888
  478. package/v3/assets/skills/contract-testing/scripts/validate.sh +0 -1033
  479. package/v3/assets/skills/database-testing/scripts/validate.sh +0 -1099
  480. package/v3/assets/skills/localization-testing/scripts/validate.sh +0 -131
  481. package/v3/assets/skills/mobile-testing/scripts/validate.sh +0 -127
  482. package/v3/assets/skills/mutation-testing/scripts/validate.sh +0 -992
  483. package/v3/assets/skills/n8n-expression-testing/scripts/validate.sh +0 -162
  484. package/v3/assets/skills/n8n-integration-testing-patterns/scripts/validate.sh +0 -104
  485. package/v3/assets/skills/n8n-security-testing/scripts/validate.sh +0 -120
  486. package/v3/assets/skills/n8n-trigger-testing-strategies/scripts/validate.sh +0 -121
  487. package/v3/assets/skills/n8n-workflow-testing-fundamentals/scripts/validate.sh +0 -126
  488. package/v3/assets/skills/pentest-validation/scripts/validate.sh +0 -402
  489. package/v3/assets/skills/performance-testing/scripts/validate.sh +0 -1090
  490. package/v3/assets/skills/qe-chaos-resilience/scripts/validate.sh +0 -401
  491. package/v3/assets/skills/qe-code-intelligence/scripts/validate.sh +0 -408
  492. package/v3/assets/skills/qe-contract-testing/scripts/validate.sh +0 -421
  493. package/v3/assets/skills/qe-coverage-analysis/scripts/validate.sh +0 -453
  494. package/v3/assets/skills/qe-defect-intelligence/scripts/validate.sh +0 -466
  495. package/v3/assets/skills/qe-iterative-loop/scripts/validate.sh +0 -474
  496. package/v3/assets/skills/qe-learning-optimization/scripts/validate.sh +0 -56
  497. package/v3/assets/skills/qe-quality-assessment/scripts/validate.sh +0 -352
  498. package/v3/assets/skills/qe-requirements-validation/scripts/validate.sh +0 -275
  499. package/v3/assets/skills/qe-security-compliance/scripts/validate.sh +0 -305
  500. package/v3/assets/skills/qe-test-execution/scripts/validate.sh +0 -323
  501. package/v3/assets/skills/qe-test-generation/scripts/validate.sh +0 -56
  502. package/v3/assets/skills/qe-visual-accessibility/scripts/validate.sh +0 -56
  503. package/v3/assets/skills/quality-metrics/scripts/validate.sh +0 -434
  504. package/v3/assets/skills/refactoring-patterns/scripts/validate.sh +0 -241
  505. package/v3/assets/skills/regression-testing/scripts/validate.sh +0 -130
  506. package/v3/assets/skills/risk-based-testing/scripts/validate.sh +0 -56
  507. package/v3/assets/skills/security-testing/scripts/validate.sh +0 -967
  508. package/v3/assets/skills/security-visual-testing/scripts/validate.sh +0 -748
  509. package/v3/assets/skills/shift-left-testing/scripts/validate.sh +0 -56
  510. package/v3/assets/skills/shift-right-testing/scripts/validate.sh +0 -56
  511. package/v3/assets/skills/tdd-london-chicago/scripts/validate.sh +0 -214
  512. package/v3/assets/skills/test-automation-strategy/scripts/validate.sh +0 -195
  513. package/v3/assets/skills/test-data-management/scripts/validate.sh +0 -137
  514. package/v3/assets/skills/test-design-techniques/scripts/validate.sh +0 -91
  515. package/v3/assets/skills/test-reporting-analytics/scripts/validate.sh +0 -77
  516. package/v3/assets/skills/verification-quality/scripts/validate.sh +0 -77
  517. package/v3/assets/skills/visual-testing-advanced/scripts/validate.sh +0 -77
@@ -0,0 +1,679 @@
1
+ /**
2
+ * Agentic QE v3 - QX Analysis MCP Tool
3
+ *
4
+ * qe/qx/analyze - Comprehensive Quality Experience analysis
5
+ *
6
+ * Combines heuristics engine, oracle detector, and impact analyzer
7
+ * for programmatic QX analysis matching V2 quality.
8
+ *
9
+ * QX Methodology by Lalitkumar Bhamare / Tales of Testing
10
+ */
11
+ import { MCPToolBase } from '../base';
12
+ import { QXHeuristicsEngine } from './heuristics-engine';
13
+ import { OracleDetector } from './oracle-detector';
14
+ import { ImpactAnalyzer } from './impact-analyzer';
15
+ import { QXHeuristic, } from './types';
16
+ // ============================================================================
17
+ // Schema
18
+ // ============================================================================
19
+ const QX_ANALYZE_SCHEMA = {
20
+ type: 'object',
21
+ properties: {
22
+ target: {
23
+ type: 'string',
24
+ description: 'Target URL or identifier to analyze',
25
+ },
26
+ context: {
27
+ type: 'object',
28
+ description: 'Pre-collected QX context (optional)',
29
+ },
30
+ mode: {
31
+ type: 'string',
32
+ description: 'Analysis mode: full, quick, or targeted',
33
+ enum: ['full', 'quick', 'targeted'],
34
+ default: 'full',
35
+ },
36
+ heuristics: {
37
+ type: 'array',
38
+ description: 'Specific heuristics to apply (default: all)',
39
+ },
40
+ minOracleSeverity: {
41
+ type: 'string',
42
+ description: 'Minimum oracle problem severity to report',
43
+ enum: ['low', 'medium', 'high', 'critical'],
44
+ default: 'medium',
45
+ },
46
+ includeCreativity: {
47
+ type: 'boolean',
48
+ description: 'Include creativity analysis from diverse domains',
49
+ default: true,
50
+ },
51
+ includeDesign: {
52
+ type: 'boolean',
53
+ description: 'Include design quality analysis',
54
+ default: true,
55
+ },
56
+ },
57
+ required: ['target'],
58
+ };
59
+ // ============================================================================
60
+ // Tool Implementation
61
+ // ============================================================================
62
+ export class QXAnalyzeTool extends MCPToolBase {
63
+ config = {
64
+ name: 'qe/qx/analyze',
65
+ description: 'Comprehensive Quality Experience (QX) analysis combining QA and UX perspectives. ' +
66
+ 'Applies 23+ programmatic heuristics, detects oracle problems, and analyzes impacts. ' +
67
+ 'QX = Marriage between QA (Quality Advocacy) and UX (User Experience).',
68
+ domain: 'quality-assessment',
69
+ schema: QX_ANALYZE_SCHEMA,
70
+ streaming: true,
71
+ timeout: 180000,
72
+ };
73
+ async execute(params, context) {
74
+ const { target, context: qxContext = this.createMinimalContext(target), mode = 'full', heuristics, minOracleSeverity = 'medium', includeCreativity = true, includeDesign = true, } = params;
75
+ try {
76
+ this.emitStream(context, {
77
+ status: 'starting',
78
+ message: `Starting QX analysis for: ${target}`,
79
+ phase: 'initialization',
80
+ });
81
+ // 1. Analyze problem
82
+ this.emitStream(context, { status: 'analyzing', phase: 'problem-analysis' });
83
+ const problemAnalysis = this.analyzeProblem(qxContext);
84
+ if (this.isAborted(context)) {
85
+ return { success: false, error: 'Operation aborted' };
86
+ }
87
+ // 2. Analyze user needs
88
+ this.emitStream(context, { status: 'analyzing', phase: 'user-needs' });
89
+ const userNeeds = this.analyzeUserNeeds(qxContext, problemAnalysis);
90
+ // 3. Analyze business needs
91
+ this.emitStream(context, { status: 'analyzing', phase: 'business-needs' });
92
+ const businessNeeds = this.analyzeBusinessNeeds(qxContext, problemAnalysis);
93
+ // 4. Analyze creativity (optional)
94
+ this.emitStream(context, { status: 'analyzing', phase: 'creativity' });
95
+ const creativityAnalysis = includeCreativity
96
+ ? this.analyzeCreativity(qxContext, problemAnalysis)
97
+ : this.createMinimalCreativityAnalysis();
98
+ // 5. Analyze design (optional)
99
+ this.emitStream(context, { status: 'analyzing', phase: 'design' });
100
+ const designAnalysis = includeDesign
101
+ ? this.analyzeDesign(qxContext)
102
+ : this.createMinimalDesignAnalysis();
103
+ // 6. Detect oracle problems
104
+ this.emitStream(context, { status: 'analyzing', phase: 'oracle-detection' });
105
+ const oracleDetector = new OracleDetector(minOracleSeverity);
106
+ const oracleProblems = oracleDetector.detect(qxContext, userNeeds, businessNeeds);
107
+ // 7. Analyze impacts
108
+ this.emitStream(context, { status: 'analyzing', phase: 'impact-analysis' });
109
+ const impactAnalyzer = new ImpactAnalyzer();
110
+ const impactAnalysis = impactAnalyzer.analyze(qxContext, problemAnalysis);
111
+ // 8. Apply heuristics
112
+ this.emitStream(context, { status: 'analyzing', phase: 'heuristics', count: 23 });
113
+ const heuristicsEngine = new QXHeuristicsEngine({
114
+ enabledHeuristics: heuristics || Object.values(QXHeuristic),
115
+ });
116
+ const heuristicResults = await heuristicsEngine.applyAll(qxContext, problemAnalysis, userNeeds, businessNeeds);
117
+ // 9. Generate recommendations
118
+ this.emitStream(context, { status: 'analyzing', phase: 'recommendations' });
119
+ const recommendations = this.generateRecommendations(problemAnalysis, userNeeds, businessNeeds, oracleProblems, impactAnalysis, heuristicResults);
120
+ // 10. Calculate overall score
121
+ const overallScore = this.calculateOverallScore(problemAnalysis, userNeeds, businessNeeds, creativityAnalysis, designAnalysis, impactAnalysis, heuristicResults);
122
+ const grade = this.scoreToGrade(overallScore);
123
+ const result = {
124
+ overallScore,
125
+ grade,
126
+ timestamp: new Date().toISOString(),
127
+ target,
128
+ problemAnalysis,
129
+ userNeeds,
130
+ businessNeeds,
131
+ creativityAnalysis,
132
+ designAnalysis,
133
+ oracleProblems,
134
+ impactAnalysis,
135
+ heuristics: heuristicResults,
136
+ recommendations,
137
+ context: qxContext,
138
+ };
139
+ this.emitStream(context, {
140
+ status: 'complete',
141
+ score: overallScore,
142
+ grade,
143
+ heuristicsApplied: heuristicResults.length,
144
+ oracleProblemsFound: oracleProblems.length,
145
+ });
146
+ return {
147
+ success: true,
148
+ data: result,
149
+ metadata: this.createMetadata(context.startTime, context.requestId),
150
+ };
151
+ }
152
+ catch (error) {
153
+ return {
154
+ success: false,
155
+ error: `QX analysis failed: ${error instanceof Error ? error.message : String(error)}`,
156
+ };
157
+ }
158
+ }
159
+ // ============================================================================
160
+ // Analysis Methods (Ported from V2)
161
+ // ============================================================================
162
+ analyzeProblem(context) {
163
+ const title = context.title || 'Untitled page';
164
+ const description = context.metadata?.description || '';
165
+ const hasError = context.errorIndicators?.hasErrorMessages || false;
166
+ let problemStatement = `Evaluate quality experience of "${title}"`;
167
+ if (description) {
168
+ problemStatement += ` - ${description.substring(0, 100)}`;
169
+ }
170
+ const totalElements = context.domMetrics?.totalElements || 0;
171
+ const interactiveElements = context.domMetrics?.interactiveElements || 0;
172
+ const forms = context.domMetrics?.forms || 0;
173
+ let complexity;
174
+ if (totalElements > 500 || interactiveElements > 50 || forms > 3) {
175
+ complexity = 'complex';
176
+ }
177
+ else if (totalElements > 200 || interactiveElements > 20 || forms > 1) {
178
+ complexity = 'moderate';
179
+ }
180
+ else {
181
+ complexity = 'simple';
182
+ }
183
+ const breakdown = [];
184
+ if (context.domMetrics?.semanticStructure?.hasNav)
185
+ breakdown.push('Navigation structure');
186
+ if (forms > 0)
187
+ breakdown.push(`Form interactions (${forms} forms)`);
188
+ if (interactiveElements > 0)
189
+ breakdown.push(`User interactions (${interactiveElements} elements)`);
190
+ if (context.accessibility)
191
+ breakdown.push('Accessibility compliance');
192
+ if (context.performance)
193
+ breakdown.push('Performance metrics');
194
+ const potentialFailures = [];
195
+ // Domain-specific failure modes
196
+ const titleLower = title.toLowerCase();
197
+ if (titleLower.includes('health') || titleLower.includes('care') || titleLower.includes('nhs')) {
198
+ potentialFailures.push({
199
+ description: 'Healthcare information may not be accessible to users with visual impairments',
200
+ severity: 'high',
201
+ likelihood: 'likely',
202
+ });
203
+ potentialFailures.push({
204
+ description: 'Patient journey complexity may cause confusion during registration or booking',
205
+ severity: 'medium',
206
+ likelihood: 'possible',
207
+ });
208
+ potentialFailures.push({
209
+ description: 'Emergency contact information may not be prominently visible',
210
+ severity: 'high',
211
+ likelihood: 'possible',
212
+ });
213
+ }
214
+ // Generic failure modes based on context
215
+ if (!context.domMetrics?.semanticStructure?.hasMain) {
216
+ potentialFailures.push({
217
+ description: 'Missing main content landmark - users may struggle to find primary content',
218
+ severity: 'medium',
219
+ likelihood: 'likely',
220
+ });
221
+ }
222
+ if (context.accessibility && (context.accessibility.altTextsCoverage || 0) < 80) {
223
+ potentialFailures.push({
224
+ description: 'Poor image alt text coverage - screen reader users affected',
225
+ severity: 'high',
226
+ likelihood: 'very-likely',
227
+ });
228
+ }
229
+ if (hasError) {
230
+ potentialFailures.push({
231
+ description: 'Visible error messages detected - potential usability issues',
232
+ severity: 'medium',
233
+ likelihood: 'likely',
234
+ });
235
+ }
236
+ if (context.performance && (context.performance.loadTime || 0) > 3000) {
237
+ potentialFailures.push({
238
+ description: 'Slow load time - user frustration and abandonment risk',
239
+ severity: 'high',
240
+ likelihood: 'very-likely',
241
+ });
242
+ }
243
+ // Ensure Rule of Three
244
+ while (potentialFailures.length < 3) {
245
+ if (complexity === 'complex') {
246
+ potentialFailures.push({
247
+ description: 'Complex interaction flows may confuse first-time users',
248
+ severity: 'medium',
249
+ likelihood: 'possible',
250
+ });
251
+ }
252
+ else if (complexity === 'moderate') {
253
+ potentialFailures.push({
254
+ description: 'Multiple interactive elements increase cognitive load',
255
+ severity: 'low',
256
+ likelihood: 'possible',
257
+ });
258
+ }
259
+ else {
260
+ potentialFailures.push({
261
+ description: 'Limited interactivity may not meet user expectations',
262
+ severity: 'low',
263
+ likelihood: 'possible',
264
+ });
265
+ }
266
+ }
267
+ let clarityScore = 50;
268
+ if (title && title !== 'Untitled page')
269
+ clarityScore += 15;
270
+ if (description)
271
+ clarityScore += 15;
272
+ if (breakdown.length >= 3)
273
+ clarityScore += 10;
274
+ if (context.domMetrics?.semanticStructure?.hasMain)
275
+ clarityScore += 10;
276
+ clarityScore = Math.min(100, clarityScore);
277
+ return {
278
+ problemStatement,
279
+ complexity,
280
+ breakdown,
281
+ potentialFailures: potentialFailures.slice(0, 5),
282
+ clarityScore,
283
+ };
284
+ }
285
+ analyzeUserNeeds(context, problemAnalysis) {
286
+ const needs = [];
287
+ const challenges = [];
288
+ const semantic = context.domMetrics?.semanticStructure;
289
+ const accessibility = context.accessibility;
290
+ const interactiveElements = context.domMetrics?.interactiveElements || 0;
291
+ const forms = context.domMetrics?.forms || 0;
292
+ // Must-have features
293
+ if (semantic?.hasNav) {
294
+ needs.push({ description: 'Clear navigation to find content', priority: 'must-have', addressed: true });
295
+ }
296
+ else {
297
+ challenges.push('Missing navigation structure - users cannot easily explore site');
298
+ needs.push({ description: 'Clear navigation to find content', priority: 'must-have', addressed: false });
299
+ }
300
+ if (interactiveElements > 0) {
301
+ needs.push({ description: 'Interactive elements for engagement', priority: 'must-have', addressed: true });
302
+ }
303
+ if (accessibility && (accessibility.focusableElementsCount || 0) > 0) {
304
+ needs.push({ description: 'Keyboard navigation support', priority: 'must-have', addressed: true });
305
+ }
306
+ else {
307
+ challenges.push('Limited keyboard navigation - inaccessible to some users');
308
+ needs.push({ description: 'Keyboard navigation support', priority: 'must-have', addressed: false });
309
+ }
310
+ // Should-have features
311
+ if (semantic?.hasHeader) {
312
+ needs.push({ description: 'Consistent page header for orientation', priority: 'should-have', addressed: true });
313
+ }
314
+ if (semantic?.hasFooter) {
315
+ needs.push({ description: 'Footer with supporting information', priority: 'should-have', addressed: true });
316
+ }
317
+ if (accessibility && (accessibility.altTextsCoverage || 0) > 50) {
318
+ needs.push({ description: 'Image descriptions for screen readers', priority: 'should-have', addressed: true });
319
+ }
320
+ else if (accessibility && (accessibility.altTextsCoverage || 0) < 50) {
321
+ challenges.push('Poor alt text coverage - images not accessible');
322
+ needs.push({ description: 'Image descriptions for screen readers', priority: 'should-have', addressed: false });
323
+ }
324
+ if (context.performance && (context.performance.loadTime || 0) < 3000) {
325
+ needs.push({ description: 'Fast page load time', priority: 'should-have', addressed: true });
326
+ }
327
+ else if (context.performance && (context.performance.loadTime || 0) >= 3000) {
328
+ challenges.push('Slow load time - user frustration risk');
329
+ needs.push({ description: 'Fast page load time', priority: 'should-have', addressed: false });
330
+ }
331
+ // Nice-to-have features
332
+ if (semantic?.hasAside) {
333
+ needs.push({ description: 'Supplementary content sections', priority: 'nice-to-have', addressed: true });
334
+ }
335
+ if (accessibility && (accessibility.landmarkRoles || 0) > 3) {
336
+ needs.push({ description: 'Rich ARIA landmarks for navigation', priority: 'nice-to-have', addressed: true });
337
+ }
338
+ if (forms > 0) {
339
+ needs.push({ description: 'Form interactions for user input', priority: 'nice-to-have', addressed: true });
340
+ }
341
+ // Determine suitability
342
+ const addressedMustHaves = needs.filter((n) => n.priority === 'must-have' && n.addressed).length;
343
+ let suitability;
344
+ if (challenges.length === 0 && addressedMustHaves >= 3) {
345
+ suitability = 'excellent';
346
+ }
347
+ else if (challenges.length <= 1 && addressedMustHaves >= 2) {
348
+ suitability = 'good';
349
+ }
350
+ else if (challenges.length <= 2 && addressedMustHaves >= 2) {
351
+ suitability = 'adequate';
352
+ }
353
+ else {
354
+ suitability = 'poor';
355
+ }
356
+ let alignmentScore = 40;
357
+ alignmentScore += addressedMustHaves * 10;
358
+ alignmentScore += needs.filter((n) => n.priority === 'should-have' && n.addressed).length * 5;
359
+ alignmentScore += needs.filter((n) => n.priority === 'nice-to-have' && n.addressed).length * 2;
360
+ alignmentScore -= challenges.length * 8;
361
+ alignmentScore = Math.max(0, Math.min(100, alignmentScore));
362
+ return { needs, suitability, challenges, alignmentScore };
363
+ }
364
+ analyzeBusinessNeeds(context, problemAnalysis) {
365
+ const forms = context.domMetrics?.forms || 0;
366
+ const interactiveElements = context.domMetrics?.interactiveElements || 0;
367
+ const performance = context.performance;
368
+ const hasErrors = context.errorIndicators?.hasErrorMessages || false;
369
+ let primaryGoal;
370
+ let kpisAffected = [];
371
+ if (forms > 2) {
372
+ primaryGoal = 'business-ease';
373
+ kpisAffected = ['Form completion rate', 'Lead generation', 'User sign-ups'];
374
+ }
375
+ else if (interactiveElements > 30) {
376
+ primaryGoal = 'user-experience';
377
+ kpisAffected = ['Time on site', 'Click-through rate', 'User engagement'];
378
+ }
379
+ else {
380
+ primaryGoal = 'balanced';
381
+ kpisAffected = ['Content consumption', 'Bounce rate', 'Page views'];
382
+ }
383
+ // Domain-specific KPIs
384
+ const titleLower = (context.title || '').toLowerCase();
385
+ if (titleLower.includes('health') || titleLower.includes('care')) {
386
+ kpisAffected.push('Patient satisfaction', 'Appointment completion rate', 'Information accessibility');
387
+ }
388
+ const crossTeamImpact = [];
389
+ if (forms > 0) {
390
+ crossTeamImpact.push({ team: 'Marketing', impactType: 'positive', description: 'Form conversion optimization needed' });
391
+ crossTeamImpact.push({ team: 'Development', impactType: 'neutral', description: 'Form validation and submission handling' });
392
+ }
393
+ if (context.accessibility && (context.accessibility.altTextsCoverage || 0) < 100) {
394
+ crossTeamImpact.push({ team: 'Content', impactType: 'negative', description: 'Image alt text creation required' });
395
+ }
396
+ if (performance && (performance.loadTime || 0) > 2000) {
397
+ crossTeamImpact.push({ team: 'Engineering', impactType: 'negative', description: 'Performance optimization needed' });
398
+ }
399
+ if (problemAnalysis.complexity === 'complex') {
400
+ crossTeamImpact.push({ team: 'QA', impactType: 'neutral', description: 'Comprehensive testing strategy required' });
401
+ }
402
+ let compromisesUX = false;
403
+ if (hasErrors)
404
+ compromisesUX = true;
405
+ if (context.accessibility && (context.accessibility.altTextsCoverage || 0) < 50)
406
+ compromisesUX = true;
407
+ if (performance && (performance.loadTime || 0) > 4000)
408
+ compromisesUX = true;
409
+ let alignmentScore = 50;
410
+ if (kpisAffected.length > 0)
411
+ alignmentScore += 15;
412
+ if (crossTeamImpact.length > 0)
413
+ alignmentScore += 10;
414
+ if (!compromisesUX)
415
+ alignmentScore += 20;
416
+ alignmentScore = Math.min(100, alignmentScore);
417
+ return {
418
+ primaryGoal,
419
+ kpisAffected,
420
+ crossTeamImpact,
421
+ compromisesUX,
422
+ impactsKPIs: kpisAffected.length > 0,
423
+ alignmentScore,
424
+ };
425
+ }
426
+ analyzeCreativity(context, problemAnalysis) {
427
+ const innovativeApproaches = [];
428
+ if (problemAnalysis.complexity === 'complex' || problemAnalysis.complexity === 'moderate') {
429
+ innovativeApproaches.push({
430
+ description: 'Question fundamental assumptions about user mental models and expected workflows',
431
+ inspirationSource: 'philosophy',
432
+ applicability: 'high',
433
+ novelty: 'moderately-novel',
434
+ });
435
+ if (context.errorIndicators?.hasErrorMessages) {
436
+ innovativeApproaches.push({
437
+ description: 'Apply diagnostic testing - systematically isolate error sources through controlled scenarios',
438
+ inspirationSource: 'medicine',
439
+ applicability: 'high',
440
+ novelty: 'moderately-novel',
441
+ });
442
+ }
443
+ }
444
+ if (context.domMetrics?.forms && context.domMetrics.forms > 0) {
445
+ innovativeApproaches.push({
446
+ description: 'Test checkout/form flows like fashion retail - focus on friction points, abandonment triggers',
447
+ inspirationSource: 'e-commerce',
448
+ applicability: 'high',
449
+ novelty: 'incremental',
450
+ });
451
+ }
452
+ innovativeApproaches.push({
453
+ description: 'Analyze through diverse demographic lenses (age, gender, culture, ability) for inclusive testing',
454
+ inspirationSource: 'social science',
455
+ applicability: 'high',
456
+ novelty: 'moderately-novel',
457
+ });
458
+ if (context.domMetrics?.interactiveElements && context.domMetrics.interactiveElements > 20) {
459
+ innovativeApproaches.push({
460
+ description: 'Test for "game-breaking" exploits - unexpected interaction sequences, boundary conditions',
461
+ inspirationSource: 'gaming',
462
+ applicability: 'medium',
463
+ novelty: 'highly-novel',
464
+ });
465
+ }
466
+ const domainsExplored = [...new Set(innovativeApproaches.map((a) => a.inspirationSource))];
467
+ const perspectives = [
468
+ 'Unexperienced user perspective (fresh eyes)',
469
+ 'Power user perspective (efficiency focus)',
470
+ 'Accessibility perspective (assistive tech users)',
471
+ 'International perspective (cultural differences)',
472
+ ];
473
+ let creativityScore = 50;
474
+ creativityScore += innovativeApproaches.length * 8;
475
+ creativityScore += domainsExplored.length * 5;
476
+ creativityScore = Math.min(100, creativityScore);
477
+ return {
478
+ innovativeApproaches,
479
+ domainsExplored,
480
+ perspectives,
481
+ creativityScore,
482
+ notes: [
483
+ 'Creativity draws from diverse domains to uncover unconventional testing approaches',
484
+ 'Higher complexity problems benefit from cross-disciplinary inspiration',
485
+ `Applied ${innovativeApproaches.length} creative approaches from ${domainsExplored.length} domains`,
486
+ ],
487
+ };
488
+ }
489
+ analyzeDesign(context) {
490
+ const clearElements = [];
491
+ const unclearElements = [];
492
+ if (context.domMetrics?.semanticStructure?.hasNav) {
493
+ clearElements.push('Navigation structure clearly defined with semantic <nav> element');
494
+ }
495
+ if (context.domMetrics?.semanticStructure?.hasMain) {
496
+ clearElements.push('Main content area clearly identified');
497
+ }
498
+ if (context.domMetrics?.semanticStructure?.hasHeader && context.domMetrics?.semanticStructure?.hasFooter) {
499
+ clearElements.push('Header and footer provide clear page structure');
500
+ }
501
+ const ariaLabels = context.accessibility?.ariaLabelsCount || 0;
502
+ const interactiveElements = context.domMetrics?.interactiveElements || 0;
503
+ if (interactiveElements > 0 && ariaLabels < interactiveElements * 0.5) {
504
+ unclearElements.push('Many interactive elements lack ARIA labels for clarity');
505
+ }
506
+ let exactnessScore = 50 + clearElements.length * 15 - unclearElements.length * 10;
507
+ exactnessScore = Math.max(0, Math.min(100, exactnessScore));
508
+ const clarity = exactnessScore >= 80 ? 'excellent' : exactnessScore >= 60 ? 'good' : exactnessScore >= 40 ? 'adequate' : 'poor';
509
+ const intuitivePatterns = [];
510
+ const culturalIssues = [];
511
+ let followsConventions = true;
512
+ if (context.domMetrics?.semanticStructure?.hasNav) {
513
+ intuitivePatterns.push('Standard navigation placement');
514
+ }
515
+ if (context.domMetrics?.semanticStructure?.hasHeader) {
516
+ intuitivePatterns.push('Header follows common layout conventions');
517
+ }
518
+ if (!context.domMetrics?.semanticStructure?.hasNav && interactiveElements > 10) {
519
+ followsConventions = false;
520
+ culturalIssues.push('Non-standard navigation pattern may confuse users from different regions');
521
+ }
522
+ let intuitiveScore = 50 + intuitivePatterns.length * 15;
523
+ if (!followsConventions)
524
+ intuitiveScore -= 20;
525
+ intuitiveScore = Math.max(0, Math.min(100, intuitiveScore));
526
+ const overallDesignScore = Math.round((exactnessScore + intuitiveScore) / 2);
527
+ return {
528
+ exactness: {
529
+ clarity,
530
+ clearElements,
531
+ unclearElements,
532
+ score: exactnessScore,
533
+ },
534
+ intuitive: {
535
+ followsConventions,
536
+ intuitivePatterns,
537
+ culturalIssues,
538
+ score: intuitiveScore,
539
+ },
540
+ counterIntuitive: {
541
+ deviations: [],
542
+ innovativeJustification: false,
543
+ freshEyesPerspective: true,
544
+ issuesCount: 0,
545
+ },
546
+ overallDesignScore,
547
+ };
548
+ }
549
+ generateRecommendations(problemAnalysis, userNeeds, businessNeeds, oracleProblems, impactAnalysis, heuristics) {
550
+ const recommendations = [];
551
+ let priority = 1;
552
+ // High-severity issues from heuristics
553
+ for (const heuristic of heuristics) {
554
+ for (const issue of heuristic.issues) {
555
+ if (issue.severity === 'critical' || issue.severity === 'high') {
556
+ recommendations.push({
557
+ principle: heuristic.name,
558
+ recommendation: issue.description,
559
+ severity: issue.severity,
560
+ impact: issue.severity === 'critical' ? 90 : 75,
561
+ effort: 'medium',
562
+ priority: priority++,
563
+ category: 'qx',
564
+ });
565
+ }
566
+ }
567
+ for (const rec of heuristic.recommendations) {
568
+ recommendations.push({
569
+ principle: heuristic.name,
570
+ recommendation: rec,
571
+ severity: 'medium',
572
+ impact: 60,
573
+ effort: 'medium',
574
+ priority: priority++,
575
+ category: 'qx',
576
+ });
577
+ }
578
+ }
579
+ // Oracle problem resolutions
580
+ for (const oracle of oracleProblems) {
581
+ recommendations.push({
582
+ principle: `Oracle: ${oracle.type}`,
583
+ recommendation: oracle.description,
584
+ severity: oracle.severity,
585
+ impact: oracle.severity === 'critical' ? 95 : oracle.severity === 'high' ? 80 : 60,
586
+ effort: 'high',
587
+ priority: priority++,
588
+ category: 'process',
589
+ evidence: oracle.resolutionApproach,
590
+ });
591
+ }
592
+ // User needs challenges
593
+ for (const challenge of userNeeds.challenges) {
594
+ recommendations.push({
595
+ principle: 'User Needs',
596
+ recommendation: challenge,
597
+ severity: 'medium',
598
+ impact: 65,
599
+ effort: 'medium',
600
+ priority: priority++,
601
+ category: 'ux',
602
+ });
603
+ }
604
+ // Sort by severity and impact
605
+ return recommendations
606
+ .sort((a, b) => {
607
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
608
+ const severityDiff = severityOrder[a.severity] - severityOrder[b.severity];
609
+ if (severityDiff !== 0)
610
+ return severityDiff;
611
+ return b.impact - a.impact;
612
+ })
613
+ .slice(0, 15);
614
+ }
615
+ calculateOverallScore(problemAnalysis, userNeeds, businessNeeds, creativityAnalysis, designAnalysis, impactAnalysis, heuristics) {
616
+ const heuristicsAvg = heuristics.reduce((sum, h) => sum + h.score, 0) / heuristics.length || 0;
617
+ const score = problemAnalysis.clarityScore * 0.1 +
618
+ userNeeds.alignmentScore * 0.2 +
619
+ businessNeeds.alignmentScore * 0.15 +
620
+ creativityAnalysis.creativityScore * 0.1 +
621
+ designAnalysis.overallDesignScore * 0.15 +
622
+ (100 - impactAnalysis.overallImpactScore) * 0.1 +
623
+ heuristicsAvg * 0.2;
624
+ return Math.round(Math.max(0, Math.min(100, score)));
625
+ }
626
+ scoreToGrade(score) {
627
+ if (score >= 90)
628
+ return 'A';
629
+ if (score >= 80)
630
+ return 'B';
631
+ if (score >= 70)
632
+ return 'C';
633
+ if (score >= 60)
634
+ return 'D';
635
+ return 'F';
636
+ }
637
+ createMinimalContext(target) {
638
+ return {
639
+ url: target,
640
+ title: target,
641
+ };
642
+ }
643
+ createMinimalCreativityAnalysis() {
644
+ return {
645
+ innovativeApproaches: [],
646
+ domainsExplored: [],
647
+ perspectives: [],
648
+ creativityScore: 50,
649
+ notes: ['Creativity analysis skipped'],
650
+ };
651
+ }
652
+ createMinimalDesignAnalysis() {
653
+ return {
654
+ exactness: { clarity: 'adequate', clearElements: [], unclearElements: [], score: 50 },
655
+ intuitive: { followsConventions: true, intuitivePatterns: [], culturalIssues: [], score: 50 },
656
+ counterIntuitive: { deviations: [], innovativeJustification: false, freshEyesPerspective: false, issuesCount: 0 },
657
+ overallDesignScore: 50,
658
+ };
659
+ }
660
+ // Helper methods from base class
661
+ emitStream(context, data) {
662
+ if (context.streaming && context.onStream) {
663
+ context.onStream(data);
664
+ }
665
+ }
666
+ isAborted(context) {
667
+ return context.abortSignal?.aborted || false;
668
+ }
669
+ createMetadata(startTime, requestId) {
670
+ return {
671
+ executionTime: Date.now() - startTime,
672
+ timestamp: new Date().toISOString(),
673
+ requestId,
674
+ };
675
+ }
676
+ }
677
+ // Export singleton instance
678
+ export const qxAnalyzeTool = new QXAnalyzeTool();
679
+ //# sourceMappingURL=analyze.js.map