agentic-qe 3.8.4 → 3.8.6

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 (198) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/dist/cli/bundle.js +694 -694
  4. package/dist/cli/commands/hooks-handlers/command-hooks.d.ts +12 -0
  5. package/dist/cli/commands/hooks-handlers/command-hooks.js +253 -0
  6. package/dist/cli/commands/hooks-handlers/editing-hooks.d.ts +12 -0
  7. package/dist/cli/commands/hooks-handlers/editing-hooks.js +161 -0
  8. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.d.ts +57 -0
  9. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +263 -0
  10. package/dist/cli/commands/hooks-handlers/hooks-shared.d.ts +52 -0
  11. package/dist/cli/commands/hooks-handlers/hooks-shared.js +223 -0
  12. package/dist/cli/commands/hooks-handlers/routing-hooks.d.ts +12 -0
  13. package/dist/cli/commands/hooks-handlers/routing-hooks.js +107 -0
  14. package/dist/cli/commands/hooks-handlers/session-hooks.d.ts +12 -0
  15. package/dist/cli/commands/hooks-handlers/session-hooks.js +171 -0
  16. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +12 -0
  17. package/dist/cli/commands/hooks-handlers/stats-hooks.js +248 -0
  18. package/dist/cli/commands/hooks-handlers/task-hooks.d.ts +12 -0
  19. package/dist/cli/commands/hooks-handlers/task-hooks.js +152 -0
  20. package/dist/cli/commands/hooks.d.ts +3 -23
  21. package/dist/cli/commands/hooks.js +16 -1459
  22. package/dist/coordination/mincut/phase-executor.d.ts +27 -0
  23. package/dist/coordination/mincut/phase-executor.js +70 -0
  24. package/dist/coordination/mincut/time-crystal-analysis.d.ts +35 -0
  25. package/dist/coordination/mincut/time-crystal-analysis.js +237 -0
  26. package/dist/coordination/mincut/time-crystal-persistence.d.ts +35 -0
  27. package/dist/coordination/mincut/time-crystal-persistence.js +81 -0
  28. package/dist/coordination/mincut/time-crystal-scheduling.d.ts +34 -0
  29. package/dist/coordination/mincut/time-crystal-scheduling.js +213 -0
  30. package/dist/coordination/mincut/time-crystal-types.d.ts +278 -0
  31. package/dist/coordination/mincut/time-crystal-types.js +67 -0
  32. package/dist/coordination/mincut/time-crystal.d.ts +8 -438
  33. package/dist/coordination/mincut/time-crystal.js +87 -905
  34. package/dist/domains/base-domain-coordinator.d.ts +0 -15
  35. package/dist/domains/base-domain-coordinator.js +7 -5
  36. package/dist/domains/chaos-resilience/coordinator.d.ts +0 -4
  37. package/dist/domains/chaos-resilience/coordinator.js +24 -22
  38. package/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +0 -4
  39. package/dist/domains/chaos-resilience/services/chaos-engineer.js +47 -45
  40. package/dist/domains/chaos-resilience/services/performance-profiler.d.ts +0 -4
  41. package/dist/domains/chaos-resilience/services/performance-profiler.js +10 -8
  42. package/dist/domains/code-intelligence/coordinator-consensus.d.ts +0 -3
  43. package/dist/domains/code-intelligence/coordinator-consensus.js +8 -6
  44. package/dist/domains/code-intelligence/coordinator-gnn.d.ts +0 -3
  45. package/dist/domains/code-intelligence/coordinator-gnn.js +8 -6
  46. package/dist/domains/code-intelligence/coordinator-hypergraph.d.ts +0 -3
  47. package/dist/domains/code-intelligence/coordinator-hypergraph.js +13 -11
  48. package/dist/domains/code-intelligence/coordinator.d.ts +0 -3
  49. package/dist/domains/code-intelligence/coordinator.js +21 -19
  50. package/dist/domains/code-intelligence/services/c4-model/index.d.ts +0 -3
  51. package/dist/domains/code-intelligence/services/c4-model/index.js +5 -3
  52. package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +0 -6
  53. package/dist/domains/code-intelligence/services/knowledge-graph.js +4 -2
  54. package/dist/domains/code-intelligence/services/product-factors-bridge.d.ts +0 -5
  55. package/dist/domains/code-intelligence/services/product-factors-bridge.js +9 -7
  56. package/dist/domains/contract-testing/coordinator.d.ts +0 -6
  57. package/dist/domains/contract-testing/coordinator.js +25 -23
  58. package/dist/domains/contract-testing/services/contract-validator.d.ts +0 -4
  59. package/dist/domains/contract-testing/services/contract-validator.js +4 -2
  60. package/dist/domains/contract-testing/services/schema-validator.js +1 -1
  61. package/dist/domains/coverage-analysis/coordinator.js +13 -11
  62. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +4 -2
  63. package/dist/domains/coverage-analysis/services/gap-detector.js +3 -1
  64. package/dist/domains/coverage-analysis/services/hnsw-index.d.ts +0 -15
  65. package/dist/domains/coverage-analysis/services/hnsw-index.js +3 -1
  66. package/dist/domains/coverage-analysis/services/sublinear-analyzer.d.ts +0 -26
  67. package/dist/domains/coverage-analysis/services/sublinear-analyzer.js +3 -1
  68. package/dist/domains/defect-intelligence/coordinator.d.ts +1 -10
  69. package/dist/domains/defect-intelligence/coordinator.js +5 -3
  70. package/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.d.ts +0 -6
  71. package/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.js +3 -1
  72. package/dist/domains/defect-intelligence/services/defect-predictor.d.ts +0 -6
  73. package/dist/domains/defect-intelligence/services/defect-predictor.js +5 -3
  74. package/dist/domains/defect-intelligence/services/pattern-learner.d.ts +0 -4
  75. package/dist/domains/defect-intelligence/services/pattern-learner.js +3 -1
  76. package/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts +0 -6
  77. package/dist/domains/defect-intelligence/services/root-cause-analyzer.js +3 -1
  78. package/dist/domains/enterprise-integration/coordinator.js +6 -4
  79. package/dist/domains/learning-optimization/coordinator-consensus.d.ts +0 -3
  80. package/dist/domains/learning-optimization/coordinator-consensus.js +8 -6
  81. package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
  82. package/dist/domains/learning-optimization/coordinator.js +15 -13
  83. package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +0 -4
  84. package/dist/domains/learning-optimization/services/learning-coordinator.js +4 -2
  85. package/dist/domains/quality-assessment/coordinator-claim-verifier.d.ts +0 -3
  86. package/dist/domains/quality-assessment/coordinator-claim-verifier.js +6 -4
  87. package/dist/domains/quality-assessment/coordinator-gate-evaluation.d.ts +0 -4
  88. package/dist/domains/quality-assessment/coordinator-gate-evaluation.js +9 -7
  89. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +0 -3
  90. package/dist/domains/quality-assessment/coordinator-rl-integration.js +10 -8
  91. package/dist/domains/quality-assessment/coordinator.d.ts +0 -15
  92. package/dist/domains/quality-assessment/coordinator.js +14 -12
  93. package/dist/domains/quality-assessment/services/deployment-advisor.d.ts +0 -10
  94. package/dist/domains/quality-assessment/services/deployment-advisor.js +4 -2
  95. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +0 -6
  96. package/dist/domains/quality-assessment/services/quality-analyzer.js +4 -2
  97. package/dist/domains/requirements-validation/coordinator.d.ts +0 -3
  98. package/dist/domains/requirements-validation/coordinator.js +15 -13
  99. package/dist/domains/requirements-validation/services/product-factors-assessment/code-intelligence/codebase-analyzer.d.ts +0 -5
  100. package/dist/domains/requirements-validation/services/product-factors-assessment/code-intelligence/codebase-analyzer.js +15 -13
  101. package/dist/domains/requirements-validation/services/product-factors-assessment/product-factors-service.d.ts +0 -6
  102. package/dist/domains/requirements-validation/services/product-factors-assessment/product-factors-service.js +9 -7
  103. package/dist/domains/requirements-validation/services/requirements-validator.d.ts +0 -6
  104. package/dist/domains/requirements-validation/services/requirements-validator.js +4 -2
  105. package/dist/domains/security-compliance/coordinator.js +24 -22
  106. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +0 -21
  107. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +4 -2
  108. package/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts +0 -4
  109. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +3 -1
  110. package/dist/domains/security-compliance/services/security-auditor-dast.d.ts +0 -4
  111. package/dist/domains/security-compliance/services/security-auditor-dast.js +3 -1
  112. package/dist/domains/security-compliance/services/security-auditor-sast.d.ts +0 -3
  113. package/dist/domains/security-compliance/services/security-auditor-sast.js +3 -1
  114. package/dist/domains/security-compliance/services/security-auditor-secrets.d.ts +0 -3
  115. package/dist/domains/security-compliance/services/security-auditor-secrets.js +3 -1
  116. package/dist/domains/security-compliance/services/security-auditor.js +11 -9
  117. package/dist/domains/test-execution/coordinator.js +11 -9
  118. package/dist/domains/test-execution/services/auth-state-manager.d.ts +0 -3
  119. package/dist/domains/test-execution/services/auth-state-manager.js +4 -2
  120. package/dist/domains/test-execution/services/e2e/e2e-coordinator.d.ts +0 -14
  121. package/dist/domains/test-execution/services/e2e/e2e-coordinator.js +3 -1
  122. package/dist/domains/test-execution/services/flaky-detector.js +4 -2
  123. package/dist/domains/test-execution/services/retry-handler.js +3 -1
  124. package/dist/domains/test-execution/services/test-executor.js +3 -1
  125. package/dist/domains/test-generation/coordinator.d.ts +0 -17
  126. package/dist/domains/test-generation/coordinator.js +33 -31
  127. package/dist/domains/test-generation/pattern-injection/edge-case-injector.d.ts +0 -5
  128. package/dist/domains/test-generation/pattern-injection/edge-case-injector.js +3 -1
  129. package/dist/domains/test-generation/services/code-transform-integration.d.ts +0 -7
  130. package/dist/domains/test-generation/services/code-transform-integration.js +3 -1
  131. package/dist/domains/test-generation/services/coherence-gate-service.d.ts +0 -3
  132. package/dist/domains/test-generation/services/coherence-gate-service.js +3 -1
  133. package/dist/domains/test-generation/services/test-generator.d.ts +0 -8
  134. package/dist/domains/test-generation/services/test-generator.js +5 -3
  135. package/dist/domains/visual-accessibility/coordinator.d.ts +0 -3
  136. package/dist/domains/visual-accessibility/coordinator.js +14 -12
  137. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +0 -3
  138. package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +52 -50
  139. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +0 -4
  140. package/dist/domains/visual-accessibility/services/accessibility-tester.js +8 -6
  141. package/dist/domains/visual-accessibility/services/axe-core-integration.d.ts +0 -3
  142. package/dist/domains/visual-accessibility/services/axe-core-integration.js +20 -18
  143. package/dist/domains/visual-accessibility/services/browser-security-scanner.d.ts +0 -4
  144. package/dist/domains/visual-accessibility/services/browser-security-scanner.js +6 -4
  145. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +0 -30
  146. package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +5 -3
  147. package/dist/domains/visual-accessibility/services/viewport-capture.d.ts +0 -27
  148. package/dist/domains/visual-accessibility/services/viewport-capture.js +6 -4
  149. package/dist/domains/visual-accessibility/services/visual-regression.d.ts +0 -26
  150. package/dist/domains/visual-accessibility/services/visual-regression.js +4 -2
  151. package/dist/domains/visual-accessibility/services/visual-tester.d.ts +0 -4
  152. package/dist/domains/visual-accessibility/services/visual-tester.js +4 -2
  153. package/dist/governance/deterministic-gateway-integration.js +1 -1
  154. package/dist/learning/agent-routing.d.ts +53 -0
  155. package/dist/learning/agent-routing.js +142 -0
  156. package/dist/learning/embedding-utils.d.ts +34 -0
  157. package/dist/learning/embedding-utils.js +95 -0
  158. package/dist/learning/pattern-promotion.d.ts +63 -0
  159. package/dist/learning/pattern-promotion.js +187 -0
  160. package/dist/learning/pretrained-patterns.d.ts +14 -0
  161. package/dist/learning/pretrained-patterns.js +726 -0
  162. package/dist/learning/qe-reasoning-bank-types.d.ts +174 -0
  163. package/dist/learning/qe-reasoning-bank-types.js +24 -0
  164. package/dist/learning/qe-reasoning-bank.d.ts +9 -192
  165. package/dist/learning/qe-reasoning-bank.js +48 -1093
  166. package/dist/mcp/bundle.js +335 -335
  167. package/dist/mcp/security/validators/command-validator.d.ts +1 -40
  168. package/dist/mcp/security/validators/command-validator.js +2 -122
  169. package/dist/mcp/security/validators/crypto-validator.d.ts +1 -39
  170. package/dist/mcp/security/validators/crypto-validator.js +2 -71
  171. package/dist/mcp/security/validators/input-sanitizer.d.ts +1 -55
  172. package/dist/mcp/security/validators/input-sanitizer.js +2 -156
  173. package/dist/mcp/security/validators/interfaces.d.ts +1 -163
  174. package/dist/mcp/security/validators/interfaces.js +2 -5
  175. package/dist/mcp/security/validators/path-traversal-validator.d.ts +1 -49
  176. package/dist/mcp/security/validators/path-traversal-validator.js +2 -241
  177. package/dist/mcp/security/validators/regex-safety-validator.d.ts +1 -49
  178. package/dist/mcp/security/validators/regex-safety-validator.js +2 -182
  179. package/dist/mcp/security/validators/validation-orchestrator.d.ts +1 -65
  180. package/dist/mcp/security/validators/validation-orchestrator.js +2 -145
  181. package/dist/shared/io/file-reader.js +1 -1
  182. package/dist/shared/security/command-validator.d.ts +44 -0
  183. package/dist/shared/security/command-validator.js +126 -0
  184. package/dist/shared/security/crypto-validator.d.ts +43 -0
  185. package/dist/shared/security/crypto-validator.js +75 -0
  186. package/dist/shared/security/index.d.ts +7 -0
  187. package/dist/shared/security/index.js +15 -0
  188. package/dist/shared/security/input-sanitizer.d.ts +59 -0
  189. package/dist/shared/security/input-sanitizer.js +160 -0
  190. package/dist/shared/security/path-traversal-validator.d.ts +53 -0
  191. package/dist/shared/security/path-traversal-validator.js +245 -0
  192. package/dist/shared/security/regex-safety-validator.d.ts +53 -0
  193. package/dist/shared/security/regex-safety-validator.js +186 -0
  194. package/dist/shared/security/validation-orchestrator.d.ts +69 -0
  195. package/dist/shared/security/validation-orchestrator.js +149 -0
  196. package/dist/shared/security/validators-interfaces.d.ts +167 -0
  197. package/dist/shared/security/validators-interfaces.js +9 -0
  198. package/package.json +1 -1
@@ -186,32 +186,6 @@ export interface IVisualRegressionService {
186
186
  */
187
187
  isBrowserAvailable(): Promise<boolean>;
188
188
  }
189
- /**
190
- * Visual Regression Service Implementation
191
- *
192
- * Orchestrates visual regression testing with browser-based capture,
193
- * baseline management, and result aggregation.
194
- *
195
- * @example
196
- * ```typescript
197
- * const service = new VisualRegressionService(memory, vibiumClient, {
198
- * diffThreshold: 0.5,
199
- * useBrowserCapture: true,
200
- * });
201
- *
202
- * // Run a single test
203
- * const result = await service.runTest('https://example.com');
204
- * if (result.success && result.value.passed) {
205
- * console.log('Visual regression test passed');
206
- * }
207
- *
208
- * // Run tests across multiple viewports
209
- * const report = await service.runTests(
210
- * ['https://example.com', 'https://example.com/about'],
211
- * [{ width: 1920, height: 1080, ... }, { width: 375, height: 667, ... }]
212
- * );
213
- * ```
214
- */
215
189
  export declare class VisualRegressionService implements IVisualRegressionService {
216
190
  private readonly memory;
217
191
  private readonly vibiumClient;
@@ -19,6 +19,7 @@
19
19
  *
20
20
  * @module domains/visual-accessibility/services/visual-regression
21
21
  */
22
+ import { LoggerFactory } from '../../../logging/index.js';
22
23
  import { v4 as uuidv4 } from 'uuid';
23
24
  import { ok, err } from '../../../shared/types/index.js';
24
25
  import { FilePath } from '../../../shared/value-objects/index.js';
@@ -73,6 +74,7 @@ const DEFAULT_CONFIG = {
73
74
  * );
74
75
  * ```
75
76
  */
77
+ const logger = LoggerFactory.create('visual-accessibility/visual-regression');
76
78
  export class VisualRegressionService {
77
79
  memory;
78
80
  vibiumClient;
@@ -117,7 +119,7 @@ export class VisualRegressionService {
117
119
  }
118
120
  catch (error) {
119
121
  // Non-critical: browser client acquisition failed
120
- console.debug('[VisualRegression] Browser client error:', error instanceof Error ? error.message : error);
122
+ logger.debug('Browser client error:');
121
123
  }
122
124
  }
123
125
  return null;
@@ -506,7 +508,7 @@ export class VisualRegressionService {
506
508
  if (clientCapture.success) {
507
509
  return clientCapture;
508
510
  }
509
- console.warn(`[VisualRegression] Browser client capture failed, trying Vibium`);
511
+ logger.warn(`Browser client capture failed, trying Vibium`);
510
512
  }
511
513
  // Fall back to Vibium
512
514
  if (this.vibiumClient && await this.isBrowserAvailable()) {
@@ -31,10 +31,6 @@ export interface VisualTesterDependencies {
31
31
  memory: MemoryBackend;
32
32
  llmRouter?: HybridRouter;
33
33
  }
34
- /**
35
- * Visual Testing Service Implementation
36
- * Provides screenshot capture and comparison capabilities
37
- */
38
34
  export declare class VisualTesterService implements IVisualTestingService {
39
35
  private readonly config;
40
36
  private readonly memory;
@@ -2,6 +2,7 @@
2
2
  * Agentic QE v3 - Visual Testing Service
3
3
  * Implements visual regression testing with screenshot comparison
4
4
  */
5
+ import { LoggerFactory } from '../../../logging/index.js';
5
6
  import { v4 as uuidv4 } from 'uuid';
6
7
  import { ok, err } from '../../../shared/types/index.js';
7
8
  import { FilePath } from '../../../shared/value-objects/index.js';
@@ -27,6 +28,7 @@ const DEFAULT_CONFIG = {
27
28
  * Visual Testing Service Implementation
28
29
  * Provides screenshot capture and comparison capabilities
29
30
  */
31
+ const logger = LoggerFactory.create('visual-accessibility/visual-tester');
30
32
  export class VisualTesterService {
31
33
  config;
32
34
  memory;
@@ -227,7 +229,7 @@ export class VisualTesterService {
227
229
  return browserResult;
228
230
  }
229
231
  // Log fallback but don't fail - use deterministic instead
230
- console.warn('[VisualTester] Browser comparison failed, falling back to deterministic:', browserResult.error.message);
232
+ logger.warn(`Browser comparison failed, falling back to deterministic: ${browserResult.error.message}`);
231
233
  }
232
234
  // Fallback to deterministic comparison
233
235
  const diffResult = this.calculateDiff(baseline, screenshot);
@@ -368,7 +370,7 @@ Provide:
368
370
  return response.content;
369
371
  }
370
372
  catch (error) {
371
- console.warn('[VisualTesterService] LLM analysis failed:', error);
373
+ logger.warn('LLM analysis failed:');
372
374
  return null;
373
375
  }
374
376
  }
@@ -10,7 +10,7 @@
10
10
  * @see ADR-058-guidance-governance-integration.md
11
11
  */
12
12
  import { governanceFlags, isStrictMode, isDeterministicGatewayEnabled } from './feature-flags.js';
13
- import { createSafeRegex } from '../mcp/security/validators/regex-safety-validator.js';
13
+ import { createSafeRegex } from '../shared/security/regex-safety-validator.js';
14
14
  // isDeterministicGatewayEnabled is imported from feature-flags.js
15
15
  /**
16
16
  * Get deterministic gateway flags with defaults
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Agentic QE v3 - Agent Routing
3
+ * ADR-021: QE ReasoningBank for Pattern Learning
4
+ *
5
+ * Static agent capability mapping and routing score calculation
6
+ * used by QEReasoningBank.routeTask().
7
+ */
8
+ import type { QEDomain } from './qe-patterns.js';
9
+ /**
10
+ * Profile describing an agent's domains, capabilities, and performance.
11
+ */
12
+ export interface AgentCapabilityProfile {
13
+ domains: QEDomain[];
14
+ capabilities: string[];
15
+ performanceScore: number;
16
+ }
17
+ /**
18
+ * Static mapping of QE agent types to their capability profiles.
19
+ */
20
+ export declare const AGENT_CAPABILITIES: Record<string, AgentCapabilityProfile>;
21
+ /**
22
+ * Scored agent with reasoning trace.
23
+ */
24
+ export interface ScoredAgent {
25
+ agent: string;
26
+ score: number;
27
+ reasoning: string[];
28
+ }
29
+ /**
30
+ * Routing weight configuration.
31
+ */
32
+ export interface RoutingWeights {
33
+ similarity: number;
34
+ performance: number;
35
+ capabilities: number;
36
+ }
37
+ /**
38
+ * Calculate agent scores for a routing request.
39
+ *
40
+ * @param detectedDomains - Domains detected from the task description
41
+ * @param requestCapabilities - Required capabilities from the routing request
42
+ * @param agentDomainPatternCounts - Map from agent type to number of matching patterns
43
+ * @param routingWeights - Weights for the scoring components
44
+ * @param agentCapabilities - Agent capability map (defaults to AGENT_CAPABILITIES)
45
+ * @returns Sorted array of scored agents (highest score first)
46
+ */
47
+ export declare function calculateAgentScores(detectedDomains: QEDomain[], requestCapabilities: string[] | undefined, agentDomainPatternCounts: Map<string, number>, routingWeights: RoutingWeights, agentCapabilities?: Record<string, AgentCapabilityProfile>): ScoredAgent[];
48
+ /**
49
+ * Domain compatibility matrix for cross-domain pattern transfer.
50
+ * Maps each domain to its related domains (same as TransferSpecialistService).
51
+ */
52
+ export declare const RELATED_DOMAINS: Record<QEDomain, QEDomain[]>;
53
+ //# sourceMappingURL=agent-routing.d.ts.map
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Agentic QE v3 - Agent Routing
3
+ * ADR-021: QE ReasoningBank for Pattern Learning
4
+ *
5
+ * Static agent capability mapping and routing score calculation
6
+ * used by QEReasoningBank.routeTask().
7
+ */
8
+ // ============================================================================
9
+ // Agent Capabilities Map
10
+ // ============================================================================
11
+ /**
12
+ * Static mapping of QE agent types to their capability profiles.
13
+ */
14
+ export const AGENT_CAPABILITIES = {
15
+ 'qe-test-generator': {
16
+ domains: ['test-generation'],
17
+ capabilities: ['test-generation', 'tdd', 'bdd', 'unit-test', 'integration-test'],
18
+ performanceScore: 0.85,
19
+ },
20
+ 'qe-coverage-analyzer': {
21
+ domains: ['coverage-analysis'],
22
+ capabilities: ['coverage-analysis', 'gap-detection', 'risk-scoring'],
23
+ performanceScore: 0.92,
24
+ },
25
+ 'qe-coverage-specialist': {
26
+ domains: ['coverage-analysis'],
27
+ capabilities: ['sublinear-analysis', 'branch-coverage', 'mutation-testing'],
28
+ performanceScore: 0.88,
29
+ },
30
+ 'qe-test-architect': {
31
+ domains: ['test-generation', 'coverage-analysis'],
32
+ capabilities: ['test-strategy', 'test-pyramid', 'architecture'],
33
+ performanceScore: 0.9,
34
+ },
35
+ 'qe-api-contract-validator': {
36
+ domains: ['contract-testing'],
37
+ capabilities: ['contract-testing', 'openapi', 'graphql', 'pact'],
38
+ performanceScore: 0.87,
39
+ },
40
+ 'qe-security-auditor': {
41
+ domains: ['security-compliance'],
42
+ capabilities: ['sast', 'dast', 'vulnerability', 'owasp'],
43
+ performanceScore: 0.82,
44
+ },
45
+ 'qe-visual-tester': {
46
+ domains: ['visual-accessibility'],
47
+ capabilities: ['screenshot', 'visual-regression', 'percy', 'chromatic'],
48
+ performanceScore: 0.8,
49
+ },
50
+ 'qe-a11y-ally': {
51
+ domains: ['visual-accessibility'],
52
+ capabilities: ['wcag', 'aria', 'screen-reader', 'contrast'],
53
+ performanceScore: 0.85,
54
+ },
55
+ 'qe-performance-tester': {
56
+ domains: ['chaos-resilience'],
57
+ capabilities: ['load-testing', 'stress-testing', 'k6', 'artillery'],
58
+ performanceScore: 0.83,
59
+ },
60
+ 'qe-flaky-investigator': {
61
+ domains: ['test-execution'],
62
+ capabilities: ['flaky-detection', 'test-stability', 'retry'],
63
+ performanceScore: 0.78,
64
+ },
65
+ 'qe-chaos-engineer': {
66
+ domains: ['chaos-resilience'],
67
+ capabilities: ['chaos-testing', 'resilience', 'fault-injection'],
68
+ performanceScore: 0.75,
69
+ },
70
+ };
71
+ /**
72
+ * Calculate agent scores for a routing request.
73
+ *
74
+ * @param detectedDomains - Domains detected from the task description
75
+ * @param requestCapabilities - Required capabilities from the routing request
76
+ * @param agentDomainPatternCounts - Map from agent type to number of matching patterns
77
+ * @param routingWeights - Weights for the scoring components
78
+ * @param agentCapabilities - Agent capability map (defaults to AGENT_CAPABILITIES)
79
+ * @returns Sorted array of scored agents (highest score first)
80
+ */
81
+ export function calculateAgentScores(detectedDomains, requestCapabilities, agentDomainPatternCounts, routingWeights, agentCapabilities = AGENT_CAPABILITIES) {
82
+ const agentScores = [];
83
+ for (const [agentType, profile] of Object.entries(agentCapabilities)) {
84
+ let score = 0;
85
+ const reasoning = [];
86
+ // Domain match (0-0.4)
87
+ const domainMatch = detectedDomains.filter((d) => profile.domains.includes(d)).length;
88
+ const domainScore = domainMatch > 0 ? (domainMatch / detectedDomains.length) * 0.4 : 0;
89
+ score += domainScore * routingWeights.similarity;
90
+ if (domainScore > 0) {
91
+ reasoning.push(`Domain match: ${(domainScore * 100).toFixed(0)}%`);
92
+ }
93
+ // Capability match (0-0.3)
94
+ if (requestCapabilities && requestCapabilities.length > 0) {
95
+ const capMatch = requestCapabilities.filter((c) => profile.capabilities.some((pc) => pc.toLowerCase().includes(c.toLowerCase()))).length;
96
+ const capScore = capMatch > 0 ? (capMatch / requestCapabilities.length) * 0.3 : 0;
97
+ score += capScore * routingWeights.capabilities;
98
+ if (capScore > 0) {
99
+ reasoning.push(`Capability match: ${(capScore * 100).toFixed(0)}%`);
100
+ }
101
+ }
102
+ else {
103
+ score += 0.15 * routingWeights.capabilities;
104
+ }
105
+ // Historical performance (0-0.3)
106
+ score += profile.performanceScore * 0.3 * routingWeights.performance;
107
+ reasoning.push(`Performance score: ${(profile.performanceScore * 100).toFixed(0)}%`);
108
+ // Pattern similarity boost
109
+ const patternCount = agentDomainPatternCounts.get(agentType) || 0;
110
+ if (patternCount > 0) {
111
+ const patternBoost = Math.min(0.1, patternCount * 0.02);
112
+ score += patternBoost;
113
+ reasoning.push(`Pattern matches: ${patternCount}`);
114
+ }
115
+ agentScores.push({ agent: agentType, score, reasoning });
116
+ }
117
+ // Sort by score descending
118
+ agentScores.sort((a, b) => b.score - a.score);
119
+ return agentScores;
120
+ }
121
+ // ============================================================================
122
+ // Cross-Domain Compatibility Matrix
123
+ // ============================================================================
124
+ /**
125
+ * Domain compatibility matrix for cross-domain pattern transfer.
126
+ * Maps each domain to its related domains (same as TransferSpecialistService).
127
+ */
128
+ export const RELATED_DOMAINS = {
129
+ 'test-generation': ['test-execution', 'coverage-analysis', 'requirements-validation'],
130
+ 'test-execution': ['test-generation', 'coverage-analysis', 'quality-assessment'],
131
+ 'coverage-analysis': ['test-generation', 'test-execution', 'quality-assessment'],
132
+ 'quality-assessment': ['test-execution', 'coverage-analysis', 'defect-intelligence'],
133
+ 'defect-intelligence': ['quality-assessment', 'code-intelligence'],
134
+ 'requirements-validation': ['test-generation', 'quality-assessment'],
135
+ 'code-intelligence': ['defect-intelligence', 'security-compliance'],
136
+ 'security-compliance': ['code-intelligence', 'quality-assessment'],
137
+ 'contract-testing': ['test-generation', 'test-execution'],
138
+ 'visual-accessibility': ['quality-assessment'],
139
+ 'chaos-resilience': ['test-execution', 'quality-assessment'],
140
+ 'learning-optimization': ['test-generation', 'test-execution', 'coverage-analysis', 'quality-assessment', 'defect-intelligence'],
141
+ };
142
+ //# sourceMappingURL=agent-routing.js.map
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Agentic QE v3 - Embedding Utilities
3
+ * ADR-021: QE ReasoningBank for Pattern Learning
4
+ *
5
+ * Pure functions for embedding manipulation: resizing, hashing,
6
+ * and normalization. Used by QEReasoningBank.embed().
7
+ */
8
+ /**
9
+ * Resize an embedding vector to a target dimension using averaging (downscale)
10
+ * or interpolation (upscale), then normalize to unit length.
11
+ *
12
+ * @param embedding - Source embedding vector
13
+ * @param targetDim - Desired output dimension
14
+ * @returns Resized and normalized embedding
15
+ */
16
+ export declare function resizeEmbedding(embedding: number[], targetDim: number): number[];
17
+ /**
18
+ * Generate a hash-based embedding for text. This is a deterministic fallback
19
+ * that always works (including ARM64) when ONNX embeddings are unavailable.
20
+ *
21
+ * @param text - Input text to embed
22
+ * @param dimension - Output embedding dimension
23
+ * @returns Hash-based embedding vector normalized to unit length
24
+ */
25
+ export declare function hashEmbedding(text: string, dimension: number): number[];
26
+ /**
27
+ * Normalize a vector to unit length (L2 normalization).
28
+ * Returns the input unchanged if magnitude is zero.
29
+ *
30
+ * @param vector - Input vector
31
+ * @returns Normalized vector
32
+ */
33
+ export declare function normalizeVector(vector: number[]): number[];
34
+ //# sourceMappingURL=embedding-utils.d.ts.map
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Agentic QE v3 - Embedding Utilities
3
+ * ADR-021: QE ReasoningBank for Pattern Learning
4
+ *
5
+ * Pure functions for embedding manipulation: resizing, hashing,
6
+ * and normalization. Used by QEReasoningBank.embed().
7
+ */
8
+ // ============================================================================
9
+ // Embedding Resize
10
+ // ============================================================================
11
+ /**
12
+ * Resize an embedding vector to a target dimension using averaging (downscale)
13
+ * or interpolation (upscale), then normalize to unit length.
14
+ *
15
+ * @param embedding - Source embedding vector
16
+ * @param targetDim - Desired output dimension
17
+ * @returns Resized and normalized embedding
18
+ */
19
+ export function resizeEmbedding(embedding, targetDim) {
20
+ if (embedding.length === targetDim) {
21
+ return embedding;
22
+ }
23
+ if (embedding.length > targetDim) {
24
+ // Average adjacent values to reduce dimension
25
+ const ratio = embedding.length / targetDim;
26
+ const result = new Array(targetDim).fill(0);
27
+ for (let i = 0; i < targetDim; i++) {
28
+ const start = Math.floor(i * ratio);
29
+ const end = Math.floor((i + 1) * ratio);
30
+ let sum = 0;
31
+ for (let j = start; j < end; j++) {
32
+ sum += embedding[j];
33
+ }
34
+ result[i] = sum / (end - start);
35
+ }
36
+ return normalizeVector(result);
37
+ }
38
+ else {
39
+ // Interpolate to increase dimension (less common)
40
+ const result = new Array(targetDim).fill(0);
41
+ const ratio = (embedding.length - 1) / (targetDim - 1);
42
+ for (let i = 0; i < targetDim; i++) {
43
+ const pos = i * ratio;
44
+ const lower = Math.floor(pos);
45
+ const upper = Math.min(lower + 1, embedding.length - 1);
46
+ const weight = pos - lower;
47
+ result[i] = embedding[lower] * (1 - weight) + embedding[upper] * weight;
48
+ }
49
+ return normalizeVector(result);
50
+ }
51
+ }
52
+ // ============================================================================
53
+ // Hash-Based Embedding
54
+ // ============================================================================
55
+ /**
56
+ * Generate a hash-based embedding for text. This is a deterministic fallback
57
+ * that always works (including ARM64) when ONNX embeddings are unavailable.
58
+ *
59
+ * @param text - Input text to embed
60
+ * @param dimension - Output embedding dimension
61
+ * @returns Hash-based embedding vector normalized to unit length
62
+ */
63
+ export function hashEmbedding(text, dimension) {
64
+ const embedding = new Array(dimension).fill(0);
65
+ const normalized = text.toLowerCase().trim();
66
+ // Use multiple hash passes for better distribution
67
+ for (let pass = 0; pass < 3; pass++) {
68
+ for (let i = 0; i < normalized.length; i++) {
69
+ const charCode = normalized.charCodeAt(i);
70
+ const idx = (charCode * (i + 1) * (pass + 1)) % dimension;
71
+ embedding[idx] += Math.sin(charCode * (pass + 1)) / (i + 1);
72
+ }
73
+ }
74
+ return normalizeVector(embedding);
75
+ }
76
+ // ============================================================================
77
+ // Vector Normalization
78
+ // ============================================================================
79
+ /**
80
+ * Normalize a vector to unit length (L2 normalization).
81
+ * Returns the input unchanged if magnitude is zero.
82
+ *
83
+ * @param vector - Input vector
84
+ * @returns Normalized vector
85
+ */
86
+ export function normalizeVector(vector) {
87
+ const magnitude = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
88
+ if (magnitude > 0) {
89
+ for (let i = 0; i < vector.length; i++) {
90
+ vector[i] /= magnitude;
91
+ }
92
+ }
93
+ return vector;
94
+ }
95
+ //# sourceMappingURL=embedding-utils.js.map
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Agentic QE v3 - Pattern Promotion & Cross-Domain Seeding
3
+ * Extracted from qe-reasoning-bank.ts for file size discipline
4
+ *
5
+ * Handles pattern promotion (short-term → long-term) with coherence gating (ADR-052),
6
+ * and cross-domain pattern seeding/transfer.
7
+ */
8
+ import type { EventBus } from '../kernel/interfaces.js';
9
+ import type { QEPattern } from './qe-patterns.js';
10
+ import type { PatternStore, PatternSearchResult } from './pattern-store.js';
11
+ import type { SQLitePatternStore } from './sqlite-persistence.js';
12
+ import type { RvfDualWriter } from '../integrations/ruvector/rvf-dual-writer.js';
13
+ import type { Result } from '../shared/types/index.js';
14
+ /**
15
+ * Dependencies needed for promotion checks
16
+ */
17
+ export interface PromotionDeps {
18
+ patternStore: PatternStore;
19
+ coherenceService?: {
20
+ isInitialized(): boolean;
21
+ checkCoherence(nodes: unknown[]): Promise<{
22
+ energy: number;
23
+ contradictions?: {
24
+ nodeIds: string[];
25
+ }[];
26
+ }>;
27
+ };
28
+ eventBus?: EventBus;
29
+ coherenceThreshold: number;
30
+ getSqliteStore: () => SQLitePatternStore;
31
+ rvfDualWriter: RvfDualWriter | null;
32
+ searchPatterns: (query: string | number[], options?: Record<string, unknown>) => Promise<Result<PatternSearchResult[]>>;
33
+ getPattern: (id: string) => Promise<QEPattern | null>;
34
+ }
35
+ /**
36
+ * Check if a pattern should be promoted with coherence gate (ADR-052)
37
+ *
38
+ * Two-stage check:
39
+ * 1. Basic criteria (usage and quality) - cheap
40
+ * 2. Coherence criteria (only if basic passes) - expensive
41
+ */
42
+ export declare function checkPatternPromotionWithCoherence(pattern: QEPattern, deps: PromotionDeps): Promise<boolean>;
43
+ /**
44
+ * Promote a pattern to long-term storage
45
+ */
46
+ export declare function promotePattern(patternId: string, deps: PromotionDeps): Promise<void>;
47
+ /**
48
+ * Dependencies for cross-domain seeding
49
+ */
50
+ export interface SeedingDeps {
51
+ searchPatterns: (query: string | number[], options?: Record<string, unknown>) => Promise<Result<PatternSearchResult[]>>;
52
+ storePattern: (options: Record<string, unknown>) => Promise<Result<QEPattern>>;
53
+ patternStore: PatternStore;
54
+ }
55
+ /**
56
+ * Seed cross-domain patterns by transferring generalizable patterns
57
+ * from populated domains to their related domains.
58
+ */
59
+ export declare function seedCrossDomainPatterns(deps: SeedingDeps): Promise<{
60
+ transferred: number;
61
+ skipped: number;
62
+ }>;
63
+ //# sourceMappingURL=pattern-promotion.d.ts.map