agentic-qe 3.8.6 → 3.8.8

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 (250) hide show
  1. package/.claude/agents/n8n/n8n-base-agent.md +4 -35
  2. package/.claude/agents/n8n/n8n-bdd-scenario-tester.md +4 -25
  3. package/.claude/agents/n8n/n8n-chaos-tester.md +4 -26
  4. package/.claude/agents/n8n/n8n-ci-orchestrator.md +4 -27
  5. package/.claude/agents/n8n/n8n-compliance-validator.md +4 -25
  6. package/.claude/agents/n8n/n8n-expression-validator.md +4 -25
  7. package/.claude/agents/n8n/n8n-integration-test.md +4 -27
  8. package/.claude/agents/n8n/n8n-monitoring-validator.md +4 -26
  9. package/.claude/agents/n8n/n8n-node-validator.md +4 -25
  10. package/.claude/agents/n8n/n8n-performance-tester.md +4 -29
  11. package/.claude/agents/n8n/n8n-security-auditor.md +4 -26
  12. package/.claude/agents/n8n/n8n-trigger-test.md +4 -27
  13. package/.claude/agents/n8n/n8n-unit-tester.md +4 -25
  14. package/.claude/agents/n8n/n8n-version-comparator.md +4 -26
  15. package/.claude/agents/n8n/n8n-workflow-executor.md +4 -26
  16. package/.claude/agents/v3/qe-accessibility-auditor.md +21 -55
  17. package/.claude/agents/v3/qe-bdd-generator.md +23 -58
  18. package/.claude/agents/v3/qe-chaos-engineer.md +21 -54
  19. package/.claude/agents/v3/qe-code-complexity.md +21 -54
  20. package/.claude/agents/v3/qe-code-intelligence.md +21 -54
  21. package/.claude/agents/v3/qe-contract-validator.md +21 -53
  22. package/.claude/agents/v3/qe-coverage-specialist.md +23 -79
  23. package/.claude/agents/v3/qe-defect-predictor.md +23 -76
  24. package/.claude/agents/v3/qe-dependency-mapper.md +21 -53
  25. package/.claude/agents/v3/qe-deployment-advisor.md +21 -54
  26. package/.claude/agents/v3/qe-devils-advocate.md +212 -238
  27. package/.claude/agents/v3/qe-flaky-hunter.md +21 -53
  28. package/.claude/agents/v3/qe-fleet-commander.md +21 -54
  29. package/.claude/agents/v3/qe-gap-detector.md +23 -79
  30. package/.claude/agents/v3/qe-graphql-tester.md +21 -54
  31. package/.claude/agents/v3/qe-impact-analyzer.md +21 -53
  32. package/.claude/agents/v3/qe-integration-architect.md +2 -2
  33. package/.claude/agents/v3/qe-integration-tester.md +15 -36
  34. package/.claude/agents/v3/qe-kg-builder.md +21 -53
  35. package/.claude/agents/v3/qe-learning-coordinator.md +21 -51
  36. package/.claude/agents/v3/qe-load-tester.md +21 -55
  37. package/.claude/agents/v3/qe-message-broker-tester.md +345 -385
  38. package/.claude/agents/v3/qe-metrics-optimizer.md +21 -54
  39. package/.claude/agents/v3/qe-middleware-validator.md +389 -428
  40. package/.claude/agents/v3/qe-mutation-tester.md +21 -54
  41. package/.claude/agents/v3/qe-odata-contract-tester.md +443 -489
  42. package/.claude/agents/v3/qe-parallel-executor.md +21 -52
  43. package/.claude/agents/v3/qe-pattern-learner.md +23 -70
  44. package/.claude/agents/v3/qe-pentest-validator.md +322 -359
  45. package/.claude/agents/v3/qe-performance-tester.md +21 -54
  46. package/.claude/agents/v3/qe-product-factors-assessor.md +339 -376
  47. package/.claude/agents/v3/qe-property-tester.md +21 -53
  48. package/.claude/agents/v3/qe-quality-criteria-recommender.md +379 -410
  49. package/.claude/agents/v3/qe-quality-gate.md +17 -64
  50. package/.claude/agents/v3/qe-queen-coordinator.md +71 -121
  51. package/.claude/agents/v3/qe-qx-partner.md +23 -64
  52. package/.claude/agents/v3/qe-regression-analyzer.md +21 -54
  53. package/.claude/agents/v3/qe-requirements-validator.md +23 -66
  54. package/.claude/agents/v3/qe-responsive-tester.md +21 -54
  55. package/.claude/agents/v3/qe-retry-handler.md +21 -53
  56. package/.claude/agents/v3/qe-risk-assessor.md +23 -58
  57. package/.claude/agents/v3/qe-root-cause-analyzer.md +21 -53
  58. package/.claude/agents/v3/qe-sap-idoc-tester.md +371 -412
  59. package/.claude/agents/v3/qe-sap-rfc-tester.md +323 -362
  60. package/.claude/agents/v3/qe-security-auditor.md +21 -54
  61. package/.claude/agents/v3/qe-security-scanner.md +21 -58
  62. package/.claude/agents/v3/qe-soap-tester.md +307 -345
  63. package/.claude/agents/v3/qe-sod-analyzer.md +486 -533
  64. package/.claude/agents/v3/qe-tdd-specialist.md +17 -42
  65. package/.claude/agents/v3/qe-test-architect.md +23 -58
  66. package/.claude/agents/v3/qe-test-idea-rewriter.md +351 -375
  67. package/.claude/agents/v3/qe-transfer-specialist.md +21 -55
  68. package/.claude/agents/v3/qe-visual-tester.md +15 -37
  69. package/.claude/agents/v3/subagents/qe-code-reviewer.md +21 -54
  70. package/.claude/agents/v3/subagents/qe-integration-reviewer.md +21 -54
  71. package/.claude/agents/v3/subagents/qe-performance-reviewer.md +21 -54
  72. package/.claude/agents/v3/subagents/qe-security-reviewer.md +21 -54
  73. package/.claude/agents/v3/subagents/qe-tdd-green.md +21 -53
  74. package/.claude/agents/v3/subagents/qe-tdd-red.md +21 -53
  75. package/.claude/agents/v3/subagents/qe-tdd-refactor.md +21 -53
  76. package/.claude/skills/.validation/schemas/skill-eval.schema.json +5 -5
  77. package/.claude/skills/.validation/skill-validation-mcp-integration.md +32 -81
  78. package/.claude/skills/agentic-quality-engineering/SKILL.md +31 -60
  79. package/.claude/skills/iterative-loop/SKILL.md +2 -2
  80. package/.claude/skills/pair-programming/SKILL.md +2 -2
  81. package/.claude/skills/performance-testing/SKILL.md +1 -1
  82. package/.claude/skills/qcsd-cicd-swarm/steps/01-flag-detection.md +2 -2
  83. package/.claude/skills/qcsd-cicd-swarm/steps/07-learning-persistence.md +6 -6
  84. package/.claude/skills/qcsd-development-swarm/steps/01-flag-detection.md +2 -2
  85. package/.claude/skills/qcsd-development-swarm/steps/07-learning-persistence.md +6 -6
  86. package/.claude/skills/qcsd-ideation-swarm/steps/07-learning-persistence.md +6 -6
  87. package/.claude/skills/qcsd-production-swarm/steps/01-flag-detection.md +202 -206
  88. package/.claude/skills/qcsd-production-swarm/steps/07-learning-persistence.md +157 -185
  89. package/.claude/skills/qcsd-refinement-swarm/steps/01-flag-detection.md +87 -91
  90. package/.claude/skills/qcsd-refinement-swarm/steps/07-learning-persistence.md +49 -53
  91. package/.claude/skills/qe-chaos-resilience/SKILL.md +2 -2
  92. package/.claude/skills/qe-code-intelligence/SKILL.md +2 -2
  93. package/.claude/skills/qe-coverage-analysis/SKILL.md +2 -2
  94. package/.claude/skills/qe-defect-intelligence/SKILL.md +2 -2
  95. package/.claude/skills/qe-iterative-loop/SKILL.md +12 -12
  96. package/.claude/skills/qe-learning-optimization/SKILL.md +2 -2
  97. package/.claude/skills/qe-quality-assessment/SKILL.md +2 -2
  98. package/.claude/skills/qe-requirements-validation/SKILL.md +2 -2
  99. package/.claude/skills/qe-test-execution/SKILL.md +2 -2
  100. package/.claude/skills/qe-test-generation/SKILL.md +2 -2
  101. package/.claude/skills/qe-visual-accessibility/SKILL.md +2 -2
  102. package/.claude/skills/quality-metrics/SKILL.md +1 -1
  103. package/.claude/skills/security-testing/SKILL.md +1 -1
  104. package/.claude/skills/skills-manifest.json +1 -1
  105. package/.claude/skills/validation-pipeline/SKILL.md +2 -2
  106. package/.claude/skills/verification-quality/SKILL.md +2 -2
  107. package/CHANGELOG.md +41 -0
  108. package/assets/agents/v3/qe-accessibility-auditor.md +21 -55
  109. package/assets/agents/v3/qe-bdd-generator.md +23 -58
  110. package/assets/agents/v3/qe-chaos-engineer.md +21 -54
  111. package/assets/agents/v3/qe-code-complexity.md +21 -54
  112. package/assets/agents/v3/qe-code-intelligence.md +21 -54
  113. package/assets/agents/v3/qe-contract-validator.md +21 -53
  114. package/assets/agents/v3/qe-coverage-specialist.md +23 -79
  115. package/assets/agents/v3/qe-defect-predictor.md +23 -76
  116. package/assets/agents/v3/qe-dependency-mapper.md +21 -53
  117. package/assets/agents/v3/qe-deployment-advisor.md +21 -54
  118. package/assets/agents/v3/qe-devils-advocate.md +212 -238
  119. package/assets/agents/v3/qe-flaky-hunter.md +21 -53
  120. package/assets/agents/v3/qe-fleet-commander.md +21 -54
  121. package/assets/agents/v3/qe-gap-detector.md +23 -79
  122. package/assets/agents/v3/qe-graphql-tester.md +21 -54
  123. package/assets/agents/v3/qe-impact-analyzer.md +21 -53
  124. package/assets/agents/v3/qe-integration-architect.md +2 -2
  125. package/assets/agents/v3/qe-integration-tester.md +15 -36
  126. package/assets/agents/v3/qe-kg-builder.md +21 -53
  127. package/assets/agents/v3/qe-learning-coordinator.md +21 -51
  128. package/assets/agents/v3/qe-load-tester.md +21 -55
  129. package/assets/agents/v3/qe-message-broker-tester.md +345 -385
  130. package/assets/agents/v3/qe-metrics-optimizer.md +21 -54
  131. package/assets/agents/v3/qe-middleware-validator.md +389 -428
  132. package/assets/agents/v3/qe-mutation-tester.md +21 -54
  133. package/assets/agents/v3/qe-odata-contract-tester.md +443 -489
  134. package/assets/agents/v3/qe-parallel-executor.md +21 -52
  135. package/assets/agents/v3/qe-pattern-learner.md +23 -70
  136. package/assets/agents/v3/qe-pentest-validator.md +322 -359
  137. package/assets/agents/v3/qe-performance-tester.md +21 -54
  138. package/assets/agents/v3/qe-product-factors-assessor.md +339 -376
  139. package/assets/agents/v3/qe-property-tester.md +21 -53
  140. package/assets/agents/v3/qe-quality-criteria-recommender.md +379 -410
  141. package/assets/agents/v3/qe-quality-gate.md +17 -64
  142. package/assets/agents/v3/qe-queen-coordinator.md +71 -121
  143. package/assets/agents/v3/qe-qx-partner.md +23 -64
  144. package/assets/agents/v3/qe-regression-analyzer.md +21 -54
  145. package/assets/agents/v3/qe-requirements-validator.md +23 -66
  146. package/assets/agents/v3/qe-responsive-tester.md +21 -54
  147. package/assets/agents/v3/qe-retry-handler.md +21 -53
  148. package/assets/agents/v3/qe-risk-assessor.md +23 -58
  149. package/assets/agents/v3/qe-root-cause-analyzer.md +21 -53
  150. package/assets/agents/v3/qe-sap-idoc-tester.md +371 -412
  151. package/assets/agents/v3/qe-sap-rfc-tester.md +323 -362
  152. package/assets/agents/v3/qe-security-auditor.md +21 -54
  153. package/assets/agents/v3/qe-security-scanner.md +21 -58
  154. package/assets/agents/v3/qe-soap-tester.md +307 -345
  155. package/assets/agents/v3/qe-sod-analyzer.md +486 -533
  156. package/assets/agents/v3/qe-tdd-specialist.md +17 -42
  157. package/assets/agents/v3/qe-test-architect.md +23 -58
  158. package/assets/agents/v3/qe-test-idea-rewriter.md +351 -375
  159. package/assets/agents/v3/qe-transfer-specialist.md +21 -55
  160. package/assets/agents/v3/qe-visual-tester.md +15 -37
  161. package/assets/agents/v3/subagents/qe-code-reviewer.md +21 -54
  162. package/assets/agents/v3/subagents/qe-integration-reviewer.md +21 -54
  163. package/assets/agents/v3/subagents/qe-performance-reviewer.md +21 -54
  164. package/assets/agents/v3/subagents/qe-security-reviewer.md +21 -54
  165. package/assets/agents/v3/subagents/qe-tdd-green.md +21 -53
  166. package/assets/agents/v3/subagents/qe-tdd-red.md +21 -53
  167. package/assets/agents/v3/subagents/qe-tdd-refactor.md +21 -53
  168. package/assets/governance/constitution.md +1 -1
  169. package/assets/governance/shards/chaos-resilience.shard.md +1 -1
  170. package/assets/governance/shards/code-intelligence.shard.md +1 -1
  171. package/assets/governance/shards/contract-testing.shard.md +1 -1
  172. package/assets/governance/shards/coverage-analysis.shard.md +1 -1
  173. package/assets/governance/shards/defect-intelligence.shard.md +1 -1
  174. package/assets/governance/shards/learning-optimization.shard.md +1 -1
  175. package/assets/governance/shards/quality-assessment.shard.md +1 -1
  176. package/assets/governance/shards/requirements-validation.shard.md +1 -1
  177. package/assets/governance/shards/security-compliance.shard.md +1 -1
  178. package/assets/governance/shards/test-execution.shard.md +1 -1
  179. package/assets/governance/shards/test-generation.shard.md +1 -1
  180. package/assets/governance/shards/visual-accessibility.shard.md +1 -1
  181. package/assets/grammars/tree-sitter-c_sharp.wasm +0 -0
  182. package/assets/grammars/tree-sitter-java.wasm +0 -0
  183. package/assets/grammars/tree-sitter-python.wasm +0 -0
  184. package/assets/grammars/tree-sitter-rust.wasm +0 -0
  185. package/assets/grammars/tree-sitter-swift.wasm +0 -0
  186. package/assets/skills/.validation/schemas/skill-eval.schema.json +5 -5
  187. package/assets/skills/.validation/skill-validation-mcp-integration.md +32 -81
  188. package/assets/skills/agentic-quality-engineering/SKILL.md +31 -60
  189. package/assets/skills/pair-programming/SKILL.md +2 -2
  190. package/assets/skills/performance-testing/SKILL.md +1 -1
  191. package/assets/skills/qcsd-cicd-swarm/steps/01-flag-detection.md +2 -2
  192. package/assets/skills/qcsd-cicd-swarm/steps/07-learning-persistence.md +6 -6
  193. package/assets/skills/qcsd-development-swarm/steps/01-flag-detection.md +2 -2
  194. package/assets/skills/qcsd-development-swarm/steps/07-learning-persistence.md +6 -6
  195. package/assets/skills/qcsd-ideation-swarm/steps/07-learning-persistence.md +6 -6
  196. package/assets/skills/qcsd-production-swarm/steps/01-flag-detection.md +202 -206
  197. package/assets/skills/qcsd-production-swarm/steps/07-learning-persistence.md +157 -185
  198. package/assets/skills/qcsd-refinement-swarm/steps/01-flag-detection.md +87 -91
  199. package/assets/skills/qcsd-refinement-swarm/steps/07-learning-persistence.md +49 -53
  200. package/assets/skills/qe-chaos-resilience/SKILL.md +2 -2
  201. package/assets/skills/qe-code-intelligence/SKILL.md +2 -2
  202. package/assets/skills/qe-coverage-analysis/SKILL.md +2 -2
  203. package/assets/skills/qe-defect-intelligence/SKILL.md +2 -2
  204. package/assets/skills/qe-iterative-loop/SKILL.md +12 -12
  205. package/assets/skills/qe-learning-optimization/SKILL.md +2 -2
  206. package/assets/skills/qe-quality-assessment/SKILL.md +2 -2
  207. package/assets/skills/qe-requirements-validation/SKILL.md +2 -2
  208. package/assets/skills/qe-test-execution/SKILL.md +2 -2
  209. package/assets/skills/qe-test-generation/SKILL.md +2 -2
  210. package/assets/skills/qe-visual-accessibility/SKILL.md +2 -2
  211. package/assets/skills/quality-metrics/SKILL.md +1 -1
  212. package/assets/skills/security-testing/SKILL.md +1 -1
  213. package/assets/skills/validation-pipeline/SKILL.md +2 -2
  214. package/assets/skills/verification-quality/SKILL.md +2 -2
  215. package/dist/cli/bundle.js +5240 -4631
  216. package/dist/cli/command-registry.js +3 -1
  217. package/dist/cli/commands/init.js +2 -0
  218. package/dist/cli/commands/memory.d.ts +11 -0
  219. package/dist/cli/commands/memory.js +333 -0
  220. package/dist/cli/completions/index.d.ts +17 -0
  221. package/dist/cli/completions/index.js +49 -1
  222. package/dist/cli/handlers/hypergraph-handler.d.ts +27 -0
  223. package/dist/cli/handlers/hypergraph-handler.js +248 -0
  224. package/dist/cli/handlers/index.d.ts +1 -0
  225. package/dist/cli/handlers/index.js +1 -0
  226. package/dist/cli/handlers/init-handler.d.ts +1 -0
  227. package/dist/cli/handlers/init-handler.js +18 -6
  228. package/dist/cli/index.js +2 -0
  229. package/dist/coordination/protocols/code-intelligence-index.js +2 -11
  230. package/dist/domains/code-intelligence/coordinator-hypergraph.js +1 -1
  231. package/dist/domains/code-intelligence/coordinator.d.ts +5 -0
  232. package/dist/domains/code-intelligence/coordinator.js +35 -3
  233. package/dist/init/phases/06-code-intelligence.d.ts +8 -3
  234. package/dist/init/phases/06-code-intelligence.js +70 -32
  235. package/dist/init/phases/08-mcp.js +10 -0
  236. package/dist/init/phases/phase-interface.d.ts +2 -0
  237. package/dist/mcp/bundle.js +1507 -1506
  238. package/dist/mcp/handlers/hypergraph-handler.d.ts +27 -0
  239. package/dist/mcp/handlers/hypergraph-handler.js +140 -0
  240. package/dist/mcp/handlers/index.d.ts +1 -0
  241. package/dist/mcp/handlers/index.js +2 -0
  242. package/dist/mcp/server.js +19 -0
  243. package/dist/mcp/tool-scoping.js +5 -0
  244. package/dist/shared/code-index-extractor.d.ts +23 -0
  245. package/dist/shared/code-index-extractor.js +101 -0
  246. package/dist/shared/parsers/multi-language-parser.d.ts +4 -1
  247. package/dist/shared/parsers/multi-language-parser.js +73 -1
  248. package/dist/shared/parsers/tree-sitter-wasm-parser.d.ts +32 -0
  249. package/dist/shared/parsers/tree-sitter-wasm-parser.js +1034 -0
  250. package/package.json +2 -1
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Agentic QE v3 - Hypergraph Query MCP Handler
3
+ *
4
+ * Exposes hypergraph queries as an MCP tool:
5
+ * - stats: node/edge counts
6
+ * - untested: functions without test coverage
7
+ * - impacted: tests impacted by changed files
8
+ * - gaps: functions with low coverage
9
+ */
10
+ import type { ToolResult } from '../types.js';
11
+ export interface HypergraphQueryParams {
12
+ /** Query type */
13
+ query: 'stats' | 'untested' | 'impacted' | 'gaps';
14
+ /** Changed files (for 'impacted' query) */
15
+ files?: string[];
16
+ /** Max coverage threshold (for 'gaps' query, default 50) */
17
+ maxCoverage?: number;
18
+ /** Max results (default 20) */
19
+ limit?: number;
20
+ }
21
+ export interface HypergraphQueryResult {
22
+ query: string;
23
+ data: Record<string, unknown>;
24
+ totalResults: number;
25
+ }
26
+ export declare function handleHypergraphQuery(params: HypergraphQueryParams): Promise<ToolResult<HypergraphQueryResult>>;
27
+ //# sourceMappingURL=hypergraph-handler.d.ts.map
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Agentic QE v3 - Hypergraph Query MCP Handler
3
+ *
4
+ * Exposes hypergraph queries as an MCP tool:
5
+ * - stats: node/edge counts
6
+ * - untested: functions without test coverage
7
+ * - impacted: tests impacted by changed files
8
+ * - gaps: functions with low coverage
9
+ */
10
+ import { join, resolve } from 'path';
11
+ import { existsSync } from 'fs';
12
+ import { v4 as uuidv4 } from 'uuid';
13
+ import { findProjectRoot } from '../../kernel/unified-memory.js';
14
+ import { openDatabase } from '../../shared/safe-db.js';
15
+ import { createHypergraphEngine } from '../../integrations/ruvector/hypergraph-engine.js';
16
+ import { toErrorMessage } from '../../shared/error-utils.js';
17
+ // ============================================================================
18
+ // Helpers
19
+ // ============================================================================
20
+ function makeResult(success, startTime, data, error) {
21
+ return {
22
+ success,
23
+ data,
24
+ error,
25
+ metadata: {
26
+ executionTime: Date.now() - startTime,
27
+ timestamp: new Date().toISOString(),
28
+ requestId: uuidv4(),
29
+ domain: 'code-intelligence',
30
+ toolName: 'hypergraph_query',
31
+ dataSource: 'real',
32
+ },
33
+ };
34
+ }
35
+ // ============================================================================
36
+ // Handler
37
+ // ============================================================================
38
+ export async function handleHypergraphQuery(params) {
39
+ const startTime = Date.now();
40
+ try {
41
+ const projectRoot = findProjectRoot();
42
+ const dbPath = join(projectRoot, '.agentic-qe', 'memory.db');
43
+ if (!existsSync(dbPath)) {
44
+ return makeResult(false, startTime, undefined, `Database not found: ${dbPath}. Run "aqe init --auto" first.`);
45
+ }
46
+ const db = openDatabase(dbPath);
47
+ try {
48
+ const engine = await createHypergraphEngine({
49
+ db,
50
+ maxTraversalDepth: 10,
51
+ maxQueryResults: 1000,
52
+ enableVectorSearch: false,
53
+ });
54
+ const limit = params.limit || 20;
55
+ switch (params.query) {
56
+ case 'stats': {
57
+ const stats = await engine.getStats();
58
+ return makeResult(true, startTime, {
59
+ query: 'stats',
60
+ data: {
61
+ totalNodes: stats.totalNodes,
62
+ totalEdges: stats.totalEdges,
63
+ nodesByType: stats.nodesByType,
64
+ edgesByType: stats.edgesByType,
65
+ avgComplexity: stats.avgComplexity,
66
+ avgCoverage: stats.avgCoverage,
67
+ nodesWithEmbeddings: stats.nodesWithEmbeddings,
68
+ },
69
+ totalResults: stats.totalNodes + stats.totalEdges,
70
+ });
71
+ }
72
+ case 'untested': {
73
+ const untested = await engine.findUntestedFunctions();
74
+ const results = untested.slice(0, limit);
75
+ return makeResult(true, startTime, {
76
+ query: 'untested',
77
+ data: {
78
+ functions: results.map(fn => ({
79
+ name: fn.name,
80
+ filePath: fn.filePath,
81
+ lineStart: fn.lineStart,
82
+ complexity: fn.complexity,
83
+ })),
84
+ },
85
+ totalResults: untested.length,
86
+ });
87
+ }
88
+ case 'impacted': {
89
+ if (!params.files || params.files.length === 0) {
90
+ return makeResult(false, startTime, undefined, 'The "files" parameter is required for the "impacted" query.');
91
+ }
92
+ // Resolve relative paths to absolute so they match hypergraph entries
93
+ const absoluteFiles = params.files.map(f => resolve(f));
94
+ const tests = await engine.findImpactedTests(absoluteFiles);
95
+ return makeResult(true, startTime, {
96
+ query: 'impacted',
97
+ data: {
98
+ changedFiles: params.files,
99
+ impactedTests: tests.map(t => ({
100
+ name: t.name,
101
+ filePath: t.filePath,
102
+ })),
103
+ },
104
+ totalResults: tests.length,
105
+ });
106
+ }
107
+ case 'gaps': {
108
+ const maxCov = params.maxCoverage ?? 50;
109
+ const gaps = await engine.findCoverageGaps(maxCov);
110
+ const results = gaps.slice(0, limit);
111
+ return makeResult(true, startTime, {
112
+ query: 'gaps',
113
+ data: {
114
+ maxCoverage: maxCov,
115
+ functions: results.map(fn => ({
116
+ name: fn.name,
117
+ filePath: fn.filePath,
118
+ coverage: fn.coverage,
119
+ complexity: fn.complexity,
120
+ })),
121
+ },
122
+ totalResults: gaps.length,
123
+ });
124
+ }
125
+ default:
126
+ return makeResult(false, startTime, undefined, `Unknown query type: "${params.query}". Use: stats, untested, impacted, gaps`);
127
+ }
128
+ }
129
+ finally {
130
+ try {
131
+ db.close();
132
+ }
133
+ catch { /* ignore */ }
134
+ }
135
+ }
136
+ catch (error) {
137
+ return makeResult(false, startTime, undefined, toErrorMessage(error));
138
+ }
139
+ }
140
+ //# sourceMappingURL=hypergraph-handler.js.map
@@ -11,5 +11,6 @@ export { handleTeamList, handleTeamHealth, handleTeamMessage, handleTeamBroadcas
11
11
  export { handleMemoryStore, handleMemoryRetrieve, handleMemoryQuery, handleMemoryDelete, handleMemoryUsage, handleMemoryShare, } from './memory-handlers';
12
12
  export { handlePipelineLoad, handlePipelineRun, handlePipelineList, handlePipelineValidate, getPipelineRegistry, getPipelineLoader, type PipelineLoadParams, type PipelineLoadResult, type PipelineRunParams, type PipelineRunResult, type PipelineListParams, type PipelineListResult, type PipelineValidateParams, type PipelineValidateResult, } from './pipeline-handlers.js';
13
13
  export { handleValidationPipeline, type ValidationPipelineParams, type ValidationPipelineResult, } from './validation-pipeline-handler.js';
14
+ export { handleHypergraphQuery, type HypergraphQueryParams, type HypergraphQueryResult, } from './hypergraph-handler.js';
14
15
  export { handleCrossPhaseStore, handleCrossPhaseQuery, handleAgentComplete, handlePhaseStart, handlePhaseEnd, handleCrossPhaseStats, handleFormatSignals, handleCrossPhaseCleanup, resetCrossPhaseHandlers, type StoreSignalParams, type StoreSignalResult, type QuerySignalsParams, type QuerySignalsResult, type AgentCompleteParams, type AgentCompleteResult, type PhaseEventParams, type PhaseStartResult, type PhaseEndResult, type CrossPhaseStatsResult, type FormatSignalsParams, type FormatSignalsResult, } from './cross-phase-handlers';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -22,6 +22,8 @@ export { handleMemoryStore, handleMemoryRetrieve, handleMemoryQuery, handleMemor
22
22
  export { handlePipelineLoad, handlePipelineRun, handlePipelineList, handlePipelineValidate, getPipelineRegistry, getPipelineLoader, } from './pipeline-handlers.js';
23
23
  // Validation pipeline handler (BMAD-003)
24
24
  export { handleValidationPipeline, } from './validation-pipeline-handler.js';
25
+ // Hypergraph query handler
26
+ export { handleHypergraphQuery, } from './hypergraph-handler.js';
25
27
  // Cross-phase handlers
26
28
  export { handleCrossPhaseStore, handleCrossPhaseQuery, handleAgentComplete, handlePhaseStart, handlePhaseEnd, handleCrossPhaseStats, handleFormatSignals, handleCrossPhaseCleanup, resetCrossPhaseHandlers, } from './cross-phase-handlers';
27
29
  //# sourceMappingURL=index.js.map
@@ -12,6 +12,8 @@ handleTaskSubmit, handleTaskList, handleTaskStatus, handleTaskCancel, handleTask
12
12
  handleAgentList, handleAgentSpawn, handleAgentMetrics, handleAgentStatus,
13
13
  // Domain handlers
14
14
  handleTestGenerate, handleTestExecute, handleCoverageAnalyze, handleQualityAssess, handleSecurityScan, handleContractValidate, handleAccessibilityTest, handleChaosTest, handleDefectPredict, handleRequirementsValidate, handleCodeIndex,
15
+ // Hypergraph query handler
16
+ handleHypergraphQuery,
15
17
  // Memory handlers
16
18
  handleMemoryStore, handleMemoryRetrieve, handleMemoryQuery, handleMemoryDelete, handleMemoryUsage, handleMemoryShare,
17
19
  // Cross-phase handlers
@@ -394,6 +396,23 @@ const DOMAIN_TOOLS = [
394
396
  },
395
397
  handler: handleCodeIndex,
396
398
  },
399
+ // Hypergraph Query
400
+ {
401
+ definition: {
402
+ name: 'mcp__agentic_qe__hypergraph_query',
403
+ description: 'Query the code knowledge hypergraph for untested functions, impacted tests, coverage gaps, and stats',
404
+ category: 'domain',
405
+ domain: 'code-intelligence',
406
+ lazyLoad: true,
407
+ parameters: [
408
+ { name: 'query', type: 'string', description: 'Query type: stats, untested, impacted, gaps', required: true },
409
+ { name: 'files', type: 'array', description: 'Changed files (required for "impacted" query)' },
410
+ { name: 'maxCoverage', type: 'number', description: 'Max coverage threshold for "gaps" query (default: 50)' },
411
+ { name: 'limit', type: 'number', description: 'Max results (default: 20)' },
412
+ ],
413
+ },
414
+ handler: handleHypergraphQuery,
415
+ },
397
416
  // Validation Pipeline (BMAD-003)
398
417
  {
399
418
  definition: {
@@ -14,6 +14,7 @@ const DEFAULT_SCOPES = {
14
14
  'test_execute_parallel',
15
15
  'coverage_analyze_sublinear',
16
16
  'code_index',
17
+ 'hypergraph_query',
17
18
  'memory_query',
18
19
  'memory_retrieve',
19
20
  'model_route',
@@ -23,6 +24,7 @@ const DEFAULT_SCOPES = {
23
24
  allowed: [
24
25
  'coverage_analyze_sublinear',
25
26
  'code_index',
27
+ 'hypergraph_query',
26
28
  'quality_assess',
27
29
  'memory_query',
28
30
  'memory_retrieve',
@@ -32,6 +34,7 @@ const DEFAULT_SCOPES = {
32
34
  allowed: [
33
35
  'security_scan_comprehensive',
34
36
  'code_index',
37
+ 'hypergraph_query',
35
38
  'memory_query',
36
39
  'memory_retrieve',
37
40
  ],
@@ -41,6 +44,7 @@ const DEFAULT_SCOPES = {
41
44
  'quality_assess',
42
45
  'coverage_analyze_sublinear',
43
46
  'defect_predict',
47
+ 'hypergraph_query',
44
48
  'memory_query',
45
49
  'memory_retrieve',
46
50
  ],
@@ -49,6 +53,7 @@ const DEFAULT_SCOPES = {
49
53
  allowed: [
50
54
  'defect_predict',
51
55
  'code_index',
56
+ 'hypergraph_query',
52
57
  'memory_query',
53
58
  'memory_retrieve',
54
59
  ],
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Lightweight regex-based code entity extractor.
3
+ *
4
+ * Builds a CodeIndexResult from file paths by scanning for
5
+ * function/class/interface declarations, arrow function exports,
6
+ * class method definitions, and import statements.
7
+ *
8
+ * Uses async file I/O to avoid blocking the event loop on large codebases.
9
+ *
10
+ * Used by both init phase 06 and the code-intelligence coordinator
11
+ * to populate hypergraph tables.
12
+ */
13
+ import type { CodeIndexResult } from '../integrations/ruvector/hypergraph-engine.js';
14
+ export type { CodeIndexResult };
15
+ /**
16
+ * Extract code entities and imports from a list of file paths.
17
+ * Returns a CodeIndexResult compatible with HypergraphEngine.buildFromIndexResult().
18
+ *
19
+ * Uses async I/O in batches to avoid blocking the event loop and
20
+ * exhausting file descriptors on large codebases.
21
+ */
22
+ export declare function extractCodeIndex(paths: string[]): Promise<CodeIndexResult>;
23
+ //# sourceMappingURL=code-index-extractor.d.ts.map
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Lightweight regex-based code entity extractor.
3
+ *
4
+ * Builds a CodeIndexResult from file paths by scanning for
5
+ * function/class/interface declarations, arrow function exports,
6
+ * class method definitions, and import statements.
7
+ *
8
+ * Uses async file I/O to avoid blocking the event loop on large codebases.
9
+ *
10
+ * Used by both init phase 06 and the code-intelligence coordinator
11
+ * to populate hypergraph tables.
12
+ */
13
+ import { readFile } from 'fs/promises';
14
+ // ============================================================================
15
+ // Constants
16
+ // ============================================================================
17
+ /** Keywords that look like method definitions but are control flow */
18
+ const CONTROL_FLOW_KEYWORDS = new Set([
19
+ 'if', 'for', 'while', 'switch', 'catch', 'return',
20
+ 'new', 'throw', 'import', 'export', 'constructor',
21
+ ]);
22
+ /** Batch size for concurrent file reads to avoid fd exhaustion */
23
+ const READ_BATCH_SIZE = 50;
24
+ // ============================================================================
25
+ // Extractor
26
+ // ============================================================================
27
+ /**
28
+ * Parse a single file's content into entities and imports.
29
+ * Pure function — no I/O.
30
+ */
31
+ function parseFileContent(filePath, content) {
32
+ const lines = content.split('\n');
33
+ const entities = [];
34
+ const imports = [];
35
+ for (let i = 0; i < lines.length; i++) {
36
+ const line = lines[i];
37
+ // Named function declarations: function foo() / export async function foo()
38
+ const funcMatch = line.match(/(?:export\s+)?(?:default\s+)?(?:async\s+)?function\s+(\w+)/);
39
+ if (funcMatch) {
40
+ entities.push({ type: 'function', name: funcMatch[1], lineStart: i + 1 });
41
+ continue;
42
+ }
43
+ // Arrow function exports: export const foo = (...) => / export const foo = async (
44
+ const arrowMatch = line.match(/(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[a-zA-Z_]\w*)\s*(?::\s*[^=]+)?\s*=>/);
45
+ if (arrowMatch) {
46
+ entities.push({ type: 'function', name: arrowMatch[1], lineStart: i + 1 });
47
+ continue;
48
+ }
49
+ // Class declarations: class Foo / export abstract class Foo
50
+ const classMatch = line.match(/(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+(\w+)/);
51
+ if (classMatch) {
52
+ entities.push({ type: 'class', name: classMatch[1], lineStart: i + 1 });
53
+ continue;
54
+ }
55
+ // Interface declarations: interface Foo / export interface Foo
56
+ const interfaceMatch = line.match(/(?:export\s+)?interface\s+(\w+)/);
57
+ if (interfaceMatch) {
58
+ entities.push({ type: 'interface', name: interfaceMatch[1], lineStart: i + 1 });
59
+ continue;
60
+ }
61
+ // Class method definitions: async doThing(...) / public static foo(
62
+ // Must be indented (inside a class body) and not a control flow keyword
63
+ const methodMatch = line.match(/^\s+(?:(?:public|private|protected|static|readonly|override|abstract|async)\s+)*(\w+)\s*(?:<[^>]*>)?\s*\([^)]*\)\s*(?::\s*[^{]+)?\s*\{?\s*$/);
64
+ if (methodMatch && !CONTROL_FLOW_KEYWORDS.has(methodMatch[1])) {
65
+ entities.push({ type: 'function', name: methodMatch[1], lineStart: i + 1 });
66
+ continue;
67
+ }
68
+ // Relative imports: import ... from './foo' / from '../bar'
69
+ const importMatch = line.match(/(?:import|from)\s+['"](\.[^'"]+)['"]/);
70
+ if (importMatch) {
71
+ imports.push(importMatch[1]);
72
+ }
73
+ }
74
+ return { path: filePath, entities, imports };
75
+ }
76
+ /**
77
+ * Extract code entities and imports from a list of file paths.
78
+ * Returns a CodeIndexResult compatible with HypergraphEngine.buildFromIndexResult().
79
+ *
80
+ * Uses async I/O in batches to avoid blocking the event loop and
81
+ * exhausting file descriptors on large codebases.
82
+ */
83
+ export async function extractCodeIndex(paths) {
84
+ const files = [];
85
+ // Process files in batches to limit concurrency
86
+ for (let offset = 0; offset < paths.length; offset += READ_BATCH_SIZE) {
87
+ const batch = paths.slice(offset, offset + READ_BATCH_SIZE);
88
+ const results = await Promise.allSettled(batch.map(async (filePath) => {
89
+ const content = await readFile(filePath, 'utf-8');
90
+ return parseFileContent(filePath, content);
91
+ }));
92
+ for (const result of results) {
93
+ if (result.status === 'fulfilled') {
94
+ files.push(result.value);
95
+ }
96
+ // Skip rejected (unreadable files) silently
97
+ }
98
+ }
99
+ return { files };
100
+ }
101
+ //# sourceMappingURL=code-index-extractor.js.map
@@ -128,11 +128,14 @@ declare class DartParser implements ILanguageParser {
128
128
  }
129
129
  /**
130
130
  * Registry of all language parsers.
131
- * Provides regex-based parsing for Python, Java, C#, Go, Rust, Swift, Kotlin, Dart.
131
+ * For Python, Java, C#, Rust, Swift: tries WASM parser first, falls back to regex.
132
+ * For Go, Kotlin, Dart: uses regex parser directly.
132
133
  */
133
134
  export declare class TreeSitterParserRegistry {
134
135
  private parsers;
136
+ private _wasmInitPromise;
135
137
  constructor();
138
+ private _tryLoadWasmParsers;
136
139
  register(parser: ILanguageParser): void;
137
140
  getParser(language: SupportedLanguage): ILanguageParser | undefined;
138
141
  parseFile(content: string, filePath: string, language: SupportedLanguage): Promise<ParsedFile | undefined>;
@@ -7,6 +7,7 @@
7
7
  * 1. joinMultiLineSignatures — collapses multi-line function/class declarations into single logical lines
8
8
  * 2. matchBalancedBrackets — handles nested generics like Map<String, List<Foo>> correctly
9
9
  */
10
+ import { createLogger } from '../../logging/logger-factory.js';
10
11
  // ============================================================================
11
12
  // Shared Parsing Utilities
12
13
  // ============================================================================
@@ -1230,13 +1231,53 @@ class DartParser {
1230
1231
  // ============================================================================
1231
1232
  // Parser Registry
1232
1233
  // ============================================================================
1234
+ const registryLogger = createLogger('ParserRegistry');
1235
+ /** Languages that have WASM parser support */
1236
+ const WASM_SUPPORTED_LANGUAGES = ['python', 'java', 'csharp', 'rust', 'swift'];
1237
+ /**
1238
+ * Wraps a WASM parser with automatic fallback to a regex parser.
1239
+ * Logs a user-facing warning when fallback occurs.
1240
+ */
1241
+ class FallbackParser {
1242
+ language;
1243
+ supportedExtensions;
1244
+ wasmParser;
1245
+ regexParser;
1246
+ wasmFailCount = 0;
1247
+ static MAX_WASM_RETRIES = 3;
1248
+ constructor(wasmParser, regexParser) {
1249
+ this.wasmParser = wasmParser;
1250
+ this.regexParser = regexParser;
1251
+ this.language = wasmParser.language;
1252
+ this.supportedExtensions = wasmParser.supportedExtensions;
1253
+ }
1254
+ async parseFile(content, filePath) {
1255
+ if (this.wasmFailCount < FallbackParser.MAX_WASM_RETRIES) {
1256
+ try {
1257
+ return await this.wasmParser.parseFile(content, filePath);
1258
+ }
1259
+ catch (err) {
1260
+ this.wasmFailCount++;
1261
+ const msg = err instanceof Error ? err.message : String(err);
1262
+ const permanent = this.wasmFailCount >= FallbackParser.MAX_WASM_RETRIES;
1263
+ registryLogger.warn(`[${this.language}] tree-sitter WASM parser failed (attempt ${this.wasmFailCount}/${FallbackParser.MAX_WASM_RETRIES}): ${msg}. ` +
1264
+ `Falling back to regex parser (~97-98% accuracy). ` +
1265
+ (permanent ? 'Set AQE_PARSER_REGEX_ONLY=1 to silence this warning.' : 'Will retry WASM on next parse.'));
1266
+ }
1267
+ }
1268
+ return this.regexParser.parseFile(content, filePath);
1269
+ }
1270
+ }
1233
1271
  /**
1234
1272
  * Registry of all language parsers.
1235
- * Provides regex-based parsing for Python, Java, C#, Go, Rust, Swift, Kotlin, Dart.
1273
+ * For Python, Java, C#, Rust, Swift: tries WASM parser first, falls back to regex.
1274
+ * For Go, Kotlin, Dart: uses regex parser directly.
1236
1275
  */
1237
1276
  export class TreeSitterParserRegistry {
1238
1277
  parsers = new Map();
1278
+ _wasmInitPromise = null;
1239
1279
  constructor() {
1280
+ // Register regex parsers for all 8 languages immediately
1240
1281
  this.register(new PythonParser());
1241
1282
  this.register(new JavaParser());
1242
1283
  this.register(new CSharpParser());
@@ -1245,6 +1286,31 @@ export class TreeSitterParserRegistry {
1245
1286
  this.register(new SwiftParser());
1246
1287
  this.register(new KotlinParser());
1247
1288
  this.register(new DartParser());
1289
+ // Kick off async WASM parser loading (non-blocking)
1290
+ this._wasmInitPromise = this._tryLoadWasmParsers();
1291
+ }
1292
+ async _tryLoadWasmParsers() {
1293
+ try {
1294
+ const mod = await import('./tree-sitter-wasm-parser.js');
1295
+ if (!mod.isWasmAvailable()) {
1296
+ registryLogger.info('tree-sitter WASM parsers disabled or unavailable. Using regex parsers (~97-98% accuracy). ' +
1297
+ 'Set AQE_PARSER_REGEX_ONLY=0 or ensure web-tree-sitter is installed to enable WASM.');
1298
+ return;
1299
+ }
1300
+ const wasmParsers = mod.createWasmParsers();
1301
+ // Wrap each WASM parser with fallback to the existing regex parser
1302
+ for (const lang of WASM_SUPPORTED_LANGUAGES) {
1303
+ const wasmParser = wasmParsers.get(lang);
1304
+ const regexParser = this.parsers.get(lang);
1305
+ if (wasmParser && regexParser) {
1306
+ this.parsers.set(lang, new FallbackParser(wasmParser, regexParser));
1307
+ }
1308
+ }
1309
+ registryLogger.info('tree-sitter WASM parsers available for: ' + WASM_SUPPORTED_LANGUAGES.join(', '));
1310
+ }
1311
+ catch {
1312
+ registryLogger.info('tree-sitter WASM parser module not available. Using regex parsers for all languages.');
1313
+ }
1248
1314
  }
1249
1315
  register(parser) {
1250
1316
  this.parsers.set(parser.language, parser);
@@ -1253,6 +1319,12 @@ export class TreeSitterParserRegistry {
1253
1319
  return this.parsers.get(language);
1254
1320
  }
1255
1321
  async parseFile(content, filePath, language) {
1322
+ // Ensure WASM init has completed (or failed) before first parse.
1323
+ // After the first call, the promise is already resolved so this is a no-op.
1324
+ if (this._wasmInitPromise) {
1325
+ await this._wasmInitPromise;
1326
+ this._wasmInitPromise = null;
1327
+ }
1256
1328
  const parser = this.parsers.get(language);
1257
1329
  if (!parser)
1258
1330
  return undefined;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Tree-sitter WASM Parser (ADR-076 Amendment 2026-03-24)
3
+ *
4
+ * Provides AST-based parsing for Python, Java, C#, Rust, Swift using
5
+ * web-tree-sitter WASM grammars. Achieves ~100% accuracy for identifying
6
+ * functions, classes, imports, properties, and complexity — eliminating
7
+ * the ~2-3% edge cases (code in strings, complex generics) that regex misses.
8
+ *
9
+ * Lazy-loads WASM grammars on first parse per language.
10
+ * Falls back to regex parsers with user-facing log warnings when WASM
11
+ * initialization fails (missing dependency, incompatible Node version, etc.).
12
+ */
13
+ import type { SupportedLanguage } from '../types/test-frameworks.js';
14
+ import type { ILanguageParser, ParsedFile } from './interfaces.js';
15
+ export declare class TreeSitterWASMParser implements ILanguageParser {
16
+ readonly language: SupportedLanguage;
17
+ readonly supportedExtensions: string[];
18
+ constructor(language: SupportedLanguage, extensions: string[]);
19
+ parseFile(content: string, filePath: string): Promise<ParsedFile>;
20
+ private extractFromAST;
21
+ }
22
+ export declare function createWasmParsers(): Map<SupportedLanguage, ILanguageParser>;
23
+ /**
24
+ * Check if web-tree-sitter WASM is available in this environment.
25
+ * Returns true if the dependency is installed; does NOT initialize WASM.
26
+ */
27
+ export declare function isWasmAvailable(): boolean;
28
+ /**
29
+ * Reset internal state — for testing only.
30
+ */
31
+ export declare function _resetWasmState(): void;
32
+ //# sourceMappingURL=tree-sitter-wasm-parser.d.ts.map