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.
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +12 -0
- package/dist/cli/bundle.js +694 -694
- package/dist/cli/commands/hooks-handlers/command-hooks.d.ts +12 -0
- package/dist/cli/commands/hooks-handlers/command-hooks.js +253 -0
- package/dist/cli/commands/hooks-handlers/editing-hooks.d.ts +12 -0
- package/dist/cli/commands/hooks-handlers/editing-hooks.js +161 -0
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.d.ts +57 -0
- package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +263 -0
- package/dist/cli/commands/hooks-handlers/hooks-shared.d.ts +52 -0
- package/dist/cli/commands/hooks-handlers/hooks-shared.js +223 -0
- package/dist/cli/commands/hooks-handlers/routing-hooks.d.ts +12 -0
- package/dist/cli/commands/hooks-handlers/routing-hooks.js +107 -0
- package/dist/cli/commands/hooks-handlers/session-hooks.d.ts +12 -0
- package/dist/cli/commands/hooks-handlers/session-hooks.js +171 -0
- package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +12 -0
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +248 -0
- package/dist/cli/commands/hooks-handlers/task-hooks.d.ts +12 -0
- package/dist/cli/commands/hooks-handlers/task-hooks.js +152 -0
- package/dist/cli/commands/hooks.d.ts +3 -23
- package/dist/cli/commands/hooks.js +16 -1459
- package/dist/coordination/mincut/phase-executor.d.ts +27 -0
- package/dist/coordination/mincut/phase-executor.js +70 -0
- package/dist/coordination/mincut/time-crystal-analysis.d.ts +35 -0
- package/dist/coordination/mincut/time-crystal-analysis.js +237 -0
- package/dist/coordination/mincut/time-crystal-persistence.d.ts +35 -0
- package/dist/coordination/mincut/time-crystal-persistence.js +81 -0
- package/dist/coordination/mincut/time-crystal-scheduling.d.ts +34 -0
- package/dist/coordination/mincut/time-crystal-scheduling.js +213 -0
- package/dist/coordination/mincut/time-crystal-types.d.ts +278 -0
- package/dist/coordination/mincut/time-crystal-types.js +67 -0
- package/dist/coordination/mincut/time-crystal.d.ts +8 -438
- package/dist/coordination/mincut/time-crystal.js +87 -905
- package/dist/domains/base-domain-coordinator.d.ts +0 -15
- package/dist/domains/base-domain-coordinator.js +7 -5
- package/dist/domains/chaos-resilience/coordinator.d.ts +0 -4
- package/dist/domains/chaos-resilience/coordinator.js +24 -22
- package/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +0 -4
- package/dist/domains/chaos-resilience/services/chaos-engineer.js +47 -45
- package/dist/domains/chaos-resilience/services/performance-profiler.d.ts +0 -4
- package/dist/domains/chaos-resilience/services/performance-profiler.js +10 -8
- package/dist/domains/code-intelligence/coordinator-consensus.d.ts +0 -3
- package/dist/domains/code-intelligence/coordinator-consensus.js +8 -6
- package/dist/domains/code-intelligence/coordinator-gnn.d.ts +0 -3
- package/dist/domains/code-intelligence/coordinator-gnn.js +8 -6
- package/dist/domains/code-intelligence/coordinator-hypergraph.d.ts +0 -3
- package/dist/domains/code-intelligence/coordinator-hypergraph.js +13 -11
- package/dist/domains/code-intelligence/coordinator.d.ts +0 -3
- package/dist/domains/code-intelligence/coordinator.js +21 -19
- package/dist/domains/code-intelligence/services/c4-model/index.d.ts +0 -3
- package/dist/domains/code-intelligence/services/c4-model/index.js +5 -3
- package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +0 -6
- package/dist/domains/code-intelligence/services/knowledge-graph.js +4 -2
- package/dist/domains/code-intelligence/services/product-factors-bridge.d.ts +0 -5
- package/dist/domains/code-intelligence/services/product-factors-bridge.js +9 -7
- package/dist/domains/contract-testing/coordinator.d.ts +0 -6
- package/dist/domains/contract-testing/coordinator.js +25 -23
- package/dist/domains/contract-testing/services/contract-validator.d.ts +0 -4
- package/dist/domains/contract-testing/services/contract-validator.js +4 -2
- package/dist/domains/contract-testing/services/schema-validator.js +1 -1
- package/dist/domains/coverage-analysis/coordinator.js +13 -11
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +4 -2
- package/dist/domains/coverage-analysis/services/gap-detector.js +3 -1
- package/dist/domains/coverage-analysis/services/hnsw-index.d.ts +0 -15
- package/dist/domains/coverage-analysis/services/hnsw-index.js +3 -1
- package/dist/domains/coverage-analysis/services/sublinear-analyzer.d.ts +0 -26
- package/dist/domains/coverage-analysis/services/sublinear-analyzer.js +3 -1
- package/dist/domains/defect-intelligence/coordinator.d.ts +1 -10
- package/dist/domains/defect-intelligence/coordinator.js +5 -3
- package/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.d.ts +0 -6
- package/dist/domains/defect-intelligence/services/causal-root-cause-analyzer.js +3 -1
- package/dist/domains/defect-intelligence/services/defect-predictor.d.ts +0 -6
- package/dist/domains/defect-intelligence/services/defect-predictor.js +5 -3
- package/dist/domains/defect-intelligence/services/pattern-learner.d.ts +0 -4
- package/dist/domains/defect-intelligence/services/pattern-learner.js +3 -1
- package/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts +0 -6
- package/dist/domains/defect-intelligence/services/root-cause-analyzer.js +3 -1
- package/dist/domains/enterprise-integration/coordinator.js +6 -4
- package/dist/domains/learning-optimization/coordinator-consensus.d.ts +0 -3
- package/dist/domains/learning-optimization/coordinator-consensus.js +8 -6
- package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
- package/dist/domains/learning-optimization/coordinator.js +15 -13
- package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +0 -4
- package/dist/domains/learning-optimization/services/learning-coordinator.js +4 -2
- package/dist/domains/quality-assessment/coordinator-claim-verifier.d.ts +0 -3
- package/dist/domains/quality-assessment/coordinator-claim-verifier.js +6 -4
- package/dist/domains/quality-assessment/coordinator-gate-evaluation.d.ts +0 -4
- package/dist/domains/quality-assessment/coordinator-gate-evaluation.js +9 -7
- package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +0 -3
- package/dist/domains/quality-assessment/coordinator-rl-integration.js +10 -8
- package/dist/domains/quality-assessment/coordinator.d.ts +0 -15
- package/dist/domains/quality-assessment/coordinator.js +14 -12
- package/dist/domains/quality-assessment/services/deployment-advisor.d.ts +0 -10
- package/dist/domains/quality-assessment/services/deployment-advisor.js +4 -2
- package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +0 -6
- package/dist/domains/quality-assessment/services/quality-analyzer.js +4 -2
- package/dist/domains/requirements-validation/coordinator.d.ts +0 -3
- package/dist/domains/requirements-validation/coordinator.js +15 -13
- package/dist/domains/requirements-validation/services/product-factors-assessment/code-intelligence/codebase-analyzer.d.ts +0 -5
- package/dist/domains/requirements-validation/services/product-factors-assessment/code-intelligence/codebase-analyzer.js +15 -13
- package/dist/domains/requirements-validation/services/product-factors-assessment/product-factors-service.d.ts +0 -6
- package/dist/domains/requirements-validation/services/product-factors-assessment/product-factors-service.js +9 -7
- package/dist/domains/requirements-validation/services/requirements-validator.d.ts +0 -6
- package/dist/domains/requirements-validation/services/requirements-validator.js +4 -2
- package/dist/domains/security-compliance/coordinator.js +24 -22
- package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +0 -21
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +4 -2
- package/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts +0 -4
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +3 -1
- package/dist/domains/security-compliance/services/security-auditor-dast.d.ts +0 -4
- package/dist/domains/security-compliance/services/security-auditor-dast.js +3 -1
- package/dist/domains/security-compliance/services/security-auditor-sast.d.ts +0 -3
- package/dist/domains/security-compliance/services/security-auditor-sast.js +3 -1
- package/dist/domains/security-compliance/services/security-auditor-secrets.d.ts +0 -3
- package/dist/domains/security-compliance/services/security-auditor-secrets.js +3 -1
- package/dist/domains/security-compliance/services/security-auditor.js +11 -9
- package/dist/domains/test-execution/coordinator.js +11 -9
- package/dist/domains/test-execution/services/auth-state-manager.d.ts +0 -3
- package/dist/domains/test-execution/services/auth-state-manager.js +4 -2
- package/dist/domains/test-execution/services/e2e/e2e-coordinator.d.ts +0 -14
- package/dist/domains/test-execution/services/e2e/e2e-coordinator.js +3 -1
- package/dist/domains/test-execution/services/flaky-detector.js +4 -2
- package/dist/domains/test-execution/services/retry-handler.js +3 -1
- package/dist/domains/test-execution/services/test-executor.js +3 -1
- package/dist/domains/test-generation/coordinator.d.ts +0 -17
- package/dist/domains/test-generation/coordinator.js +33 -31
- package/dist/domains/test-generation/pattern-injection/edge-case-injector.d.ts +0 -5
- package/dist/domains/test-generation/pattern-injection/edge-case-injector.js +3 -1
- package/dist/domains/test-generation/services/code-transform-integration.d.ts +0 -7
- package/dist/domains/test-generation/services/code-transform-integration.js +3 -1
- package/dist/domains/test-generation/services/coherence-gate-service.d.ts +0 -3
- package/dist/domains/test-generation/services/coherence-gate-service.js +3 -1
- package/dist/domains/test-generation/services/test-generator.d.ts +0 -8
- package/dist/domains/test-generation/services/test-generator.js +5 -3
- package/dist/domains/visual-accessibility/coordinator.d.ts +0 -3
- package/dist/domains/visual-accessibility/coordinator.js +14 -12
- package/dist/domains/visual-accessibility/services/accessibility-tester-browser.d.ts +0 -3
- package/dist/domains/visual-accessibility/services/accessibility-tester-browser.js +52 -50
- package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +0 -4
- package/dist/domains/visual-accessibility/services/accessibility-tester.js +8 -6
- package/dist/domains/visual-accessibility/services/axe-core-integration.d.ts +0 -3
- package/dist/domains/visual-accessibility/services/axe-core-integration.js +20 -18
- package/dist/domains/visual-accessibility/services/browser-security-scanner.d.ts +0 -4
- package/dist/domains/visual-accessibility/services/browser-security-scanner.js +6 -4
- package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.d.ts +0 -30
- package/dist/domains/visual-accessibility/services/browser-swarm-coordinator.js +5 -3
- package/dist/domains/visual-accessibility/services/viewport-capture.d.ts +0 -27
- package/dist/domains/visual-accessibility/services/viewport-capture.js +6 -4
- package/dist/domains/visual-accessibility/services/visual-regression.d.ts +0 -26
- package/dist/domains/visual-accessibility/services/visual-regression.js +4 -2
- package/dist/domains/visual-accessibility/services/visual-tester.d.ts +0 -4
- package/dist/domains/visual-accessibility/services/visual-tester.js +4 -2
- package/dist/governance/deterministic-gateway-integration.js +1 -1
- package/dist/learning/agent-routing.d.ts +53 -0
- package/dist/learning/agent-routing.js +142 -0
- package/dist/learning/embedding-utils.d.ts +34 -0
- package/dist/learning/embedding-utils.js +95 -0
- package/dist/learning/pattern-promotion.d.ts +63 -0
- package/dist/learning/pattern-promotion.js +187 -0
- package/dist/learning/pretrained-patterns.d.ts +14 -0
- package/dist/learning/pretrained-patterns.js +726 -0
- package/dist/learning/qe-reasoning-bank-types.d.ts +174 -0
- package/dist/learning/qe-reasoning-bank-types.js +24 -0
- package/dist/learning/qe-reasoning-bank.d.ts +9 -192
- package/dist/learning/qe-reasoning-bank.js +48 -1093
- package/dist/mcp/bundle.js +335 -335
- package/dist/mcp/security/validators/command-validator.d.ts +1 -40
- package/dist/mcp/security/validators/command-validator.js +2 -122
- package/dist/mcp/security/validators/crypto-validator.d.ts +1 -39
- package/dist/mcp/security/validators/crypto-validator.js +2 -71
- package/dist/mcp/security/validators/input-sanitizer.d.ts +1 -55
- package/dist/mcp/security/validators/input-sanitizer.js +2 -156
- package/dist/mcp/security/validators/interfaces.d.ts +1 -163
- package/dist/mcp/security/validators/interfaces.js +2 -5
- package/dist/mcp/security/validators/path-traversal-validator.d.ts +1 -49
- package/dist/mcp/security/validators/path-traversal-validator.js +2 -241
- package/dist/mcp/security/validators/regex-safety-validator.d.ts +1 -49
- package/dist/mcp/security/validators/regex-safety-validator.js +2 -182
- package/dist/mcp/security/validators/validation-orchestrator.d.ts +1 -65
- package/dist/mcp/security/validators/validation-orchestrator.js +2 -145
- package/dist/shared/io/file-reader.js +1 -1
- package/dist/shared/security/command-validator.d.ts +44 -0
- package/dist/shared/security/command-validator.js +126 -0
- package/dist/shared/security/crypto-validator.d.ts +43 -0
- package/dist/shared/security/crypto-validator.js +75 -0
- package/dist/shared/security/index.d.ts +7 -0
- package/dist/shared/security/index.js +15 -0
- package/dist/shared/security/input-sanitizer.d.ts +59 -0
- package/dist/shared/security/input-sanitizer.js +160 -0
- package/dist/shared/security/path-traversal-validator.d.ts +53 -0
- package/dist/shared/security/path-traversal-validator.js +245 -0
- package/dist/shared/security/regex-safety-validator.d.ts +53 -0
- package/dist/shared/security/regex-safety-validator.js +186 -0
- package/dist/shared/security/validation-orchestrator.d.ts +69 -0
- package/dist/shared/security/validation-orchestrator.js +149 -0
- package/dist/shared/security/validators-interfaces.d.ts +167 -0
- package/dist/shared/security/validators-interfaces.js +9 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 '../
|
|
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
|