v3/implementation/adrs/ADR-030-agentic-qe-integration.md
Accepted - Architecture Review Complete (2026-01-23)
2026-01-23
Claude Flow V3 requires comprehensive quality engineering (QE) capabilities for:
The current V3 architecture provides agent coordination (@claude-flow/plugins), memory management (@claude-flow/memory), and security primitives (@claude-flow/security), but lacks specialized QE capabilities.
The agentic-qe package (v3.2.3) provides a comprehensive Quality Engineering framework:
| Component | Description | Performance |
|---|---|---|
| 51 QE Agents | Specialized agents across 12 DDD bounded contexts | O(1) dispatch |
| 7 TDD Subagents | London-style TDD with red-green-refactor cycles | <500ms per cycle |
| ReasoningBank Learning | HNSW-indexed pattern storage with Dream cycles | 150x faster search |
| TinyDancer Model Routing | 3-tier routing (Haiku/Sonnet/Opus) | <5ms routing |
| Queen Coordinator | Hierarchical orchestration with Byzantine tolerance | O(log n) consensus |
| O(log n) Coverage | Johnson-Lindenstrauss projected gap detection | 12,500x faster |
| Browser Automation | @claude-flow/browser integration | Full Playwright |
| MCP Server | All tools via Model Context Protocol | <100ms response |
agentic-qe/
├── test-generation/ # AI-powered test creation (unit, integration, E2E)
├── test-execution/ # Parallel execution, retry, reporting
├── coverage-analysis/ # O(log n) gap detection, prioritization
├── quality-assessment/ # Quality gates, readiness decisions
├── defect-intelligence/ # Prediction, root cause analysis
├── requirements-validation/ # BDD, testability analysis
├── code-intelligence/ # Knowledge graph, semantic search
├── security-compliance/ # SAST, DAST, audit trails
├── contract-testing/ # OpenAPI, GraphQL, gRPC contracts
├── visual-accessibility/ # Visual regression, WCAG compliance
├── chaos-resilience/ # Chaos engineering, load testing
└── learning-optimization/ # Cross-domain transfer learning
| Dependency | agentic-qe | claude-flow V3 | Strategy |
|---|---|---|---|
@ruvector/attention | Core attention | ADR-028 integration | Reuse V3 instance |
@ruvector/gnn | Code graphs | ADR-029 integration | Reuse V3 instance |
@ruvector/sona | Self-learning | ReasoningBank | Bridge via adapter |
hnswlib-node | Vector search | @claude-flow/memory | Share index |
better-sqlite3 | Persistence | sql.js (WASM) | Separate DBs |
@xenova/transformers | Embeddings | @claude-flow/embeddings | Share model |
Integrate agentic-qe as a first-class plugin for Claude Flow V3 using the @claude-flow/plugins SDK with clear bounded context mapping, shared infrastructure coordination, and security isolation.
┌─────────────────────────────────────────────────────────────────────────────────┐
│ Claude Flow V3 │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────────────┐ │
│ │ @claude-flow/plugins Registry │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────────────┐ │ │
│ │ │ Core │ │ Security │ │ Memory │ │ agentic-qe │ │ │
│ │ │ Plugins │ │ Plugins │ │ Plugins │ │ Plugin (NEW) │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ └─────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────────────┐ │
│ │ Shared Infrastructure Layer │ │
│ ├────────────────────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │ │
│ │ │ Memory Service │ │ RuVector Layer │ │ MCP Server │ │ │
│ │ │ (AgentDB/HNSW) │ │ (Attention/GNN)│ │ (Tool Registry) │ │ │
│ │ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │ │
│ │ │ Hive Mind │ │ Security Module│ │ Embeddings Service │ │ │
│ │ │ (Coordination) │ │ (ADR-013) │ │ (ONNX/Hyperbolic) │ │ │
│ │ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│ agentic-qe Plugin Internals │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────────────┐ │
│ │ Anti-Corruption │ │ Context Mapping │ │ Security Sandbox │ │
│ │ Layer (ACL) │ │ Service │ │ (Test Execution) │ │
│ └───────────────────┘ └───────────────────┘ └───────────────────────────┘ │
│ │ │ │ │
│ └─────────────────────┼────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │ 12 Bounded Contexts (QE Domains) │ │
│ ├──────────────────────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │
│ │ │ test-gen │ │ test-exec │ │ coverage │ │ quality-assessment │ │ │
│ │ │ (12 agents) │ │ (8 agents) │ │ (6 agents) │ │ (5 agents) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │
│ │ │ defect-intel│ │ req-valid │ │ code-intel │ │ security-compliance │ │ │
│ │ │ (4 agents) │ │ (3 agents) │ │ (5 agents) │ │ (4 agents) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │
│ │ │ contract │ │ visual-a11y │ │ chaos │ │ learning-optimize │ │ │
│ │ │ (3 agents) │ │ (3 agents) │ │ (4 agents) │ │ (2 agents) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
// v3/plugins/agentic-qe/src/index.ts
import { PluginBuilder, HookEvent, HookPriority } from '@claude-flow/plugins';
import { AgenticQEBridge } from './infrastructure/agentic-qe-bridge';
import { ContextMapper } from './infrastructure/context-mapper';
import { SecuritySandbox } from './infrastructure/security-sandbox';
import { mcpTools } from './mcp-tools';
import { hooks } from './hooks';
import { workers } from './workers';
export const agenticQEPlugin = new PluginBuilder('agentic-qe', '3.2.3')
.withDescription('Quality Engineering plugin with 51 specialized agents across 12 DDD bounded contexts')
.withAuthor('rUv')
.withLicense('MIT')
.withDependencies([
'@claude-flow/memory',
'@claude-flow/security',
'@claude-flow/embeddings'
])
.withCapabilities([
'test-generation',
'test-execution',
'coverage-analysis',
'quality-assessment',
'defect-intelligence',
'requirements-validation',
'code-intelligence',
'security-compliance',
'contract-testing',
'visual-accessibility',
'chaos-resilience',
'learning-optimization'
])
.withMCPTools(mcpTools)
.withHooks(hooks)
.withWorkers(workers)
.onInitialize(async (context) => {
// Initialize shared infrastructure bridges
const memoryService = context.get('memory');
const securityModule = context.get('security');
const embeddingsService = context.get('embeddings');
// Create anti-corruption layer
const bridge = new AgenticQEBridge({
memory: memoryService,
security: securityModule,
embeddings: embeddingsService,
namespace: 'aqe/v3'
});
// Initialize context mapper for domain translation
const contextMapper = new ContextMapper({
v3Domains: ['Security', 'Core', 'Memory', 'Integration', 'Coordination'],
qeContexts: [
'test-generation', 'test-execution', 'coverage-analysis',
'quality-assessment', 'defect-intelligence', 'requirements-validation',
'code-intelligence', 'security-compliance', 'contract-testing',
'visual-accessibility', 'chaos-resilience', 'learning-optimization'
]
});
// Initialize security sandbox for test execution
const sandbox = new SecuritySandbox({
maxExecutionTime: 30000, // 30s max per test
memoryLimit: 512 * 1024 * 1024, // 512MB
networkPolicy: 'restricted', // No external calls by default
fileSystemPolicy: 'workspace-only'
});
// Store instances in plugin context
context.set('aqe.bridge', bridge);
context.set('aqe.contextMapper', contextMapper);
context.set('aqe.sandbox', sandbox);
// Initialize namespaces in memory service
await bridge.initializeNamespaces();
return { success: true };
})
.onShutdown(async (context) => {
const bridge = context.get<AgenticQEBridge>('aqe.bridge');
await bridge.cleanup();
return { success: true };
})
.build();
// v3/plugins/agentic-qe/src/infrastructure/context-mapper.ts
export interface ContextMapping {
qeContext: string;
v3Domains: string[];
agents: string[];
memoryNamespace: string;
securityLevel: 'low' | 'medium' | 'high' | 'critical';
}
export class ContextMapper {
private mappings: Map<string, ContextMapping> = new Map();
constructor(config: ContextMapperConfig) {
this.initializeMappings();
}
private initializeMappings(): void {
// Map QE contexts to V3 domains
this.mappings.set('test-generation', {
qeContext: 'test-generation',
v3Domains: ['Core', 'Integration'],
agents: [
'unit-test-generator', 'integration-test-generator',
'e2e-test-generator', 'property-test-generator',
'mutation-test-generator', 'fuzz-test-generator',
'api-test-generator', 'performance-test-generator',
'security-test-generator', 'accessibility-test-generator',
'contract-test-generator', 'bdd-test-generator'
],
memoryNamespace: 'aqe/v3/test-generation',
securityLevel: 'medium'
});
this.mappings.set('test-execution', {
qeContext: 'test-execution',
v3Domains: ['Core', 'Coordination'],
agents: [
'test-runner', 'parallel-executor', 'retry-manager',
'result-aggregator', 'flaky-test-detector',
'timeout-manager', 'resource-allocator', 'test-reporter'
],
memoryNamespace: 'aqe/v3/test-execution',
securityLevel: 'high' // Executes code
});
this.mappings.set('coverage-analysis', {
qeContext: 'coverage-analysis',
v3Domains: ['Core', 'Memory'],
agents: [
'coverage-collector', 'gap-detector', 'priority-ranker',
'hotspot-analyzer', 'trend-tracker', 'impact-assessor'
],
memoryNamespace: 'aqe/v3/coverage',
securityLevel: 'low'
});
this.mappings.set('quality-assessment', {
qeContext: 'quality-assessment',
v3Domains: ['Core'],
agents: [
'quality-gate-evaluator', 'readiness-assessor',
'risk-calculator', 'metric-aggregator', 'decision-maker'
],
memoryNamespace: 'aqe/v3/quality',
securityLevel: 'low'
});
this.mappings.set('defect-intelligence', {
qeContext: 'defect-intelligence',
v3Domains: ['Core', 'Memory'],
agents: [
'defect-predictor', 'root-cause-analyzer',
'pattern-detector', 'regression-tracker'
],
memoryNamespace: 'aqe/v3/defects',
securityLevel: 'low'
});
this.mappings.set('requirements-validation', {
qeContext: 'requirements-validation',
v3Domains: ['Core'],
agents: [
'bdd-validator', 'testability-analyzer', 'requirement-tracer'
],
memoryNamespace: 'aqe/v3/requirements',
securityLevel: 'low'
});
this.mappings.set('code-intelligence', {
qeContext: 'code-intelligence',
v3Domains: ['Core', 'Memory', 'Integration'],
agents: [
'knowledge-graph-builder', 'semantic-searcher',
'dependency-analyzer', 'complexity-assessor', 'pattern-miner'
],
memoryNamespace: 'aqe/v3/code-intel',
securityLevel: 'medium'
});
this.mappings.set('security-compliance', {
qeContext: 'security-compliance',
v3Domains: ['Security'],
agents: [
'sast-scanner', 'dast-scanner',
'audit-trail-manager', 'compliance-checker'
],
memoryNamespace: 'aqe/v3/security',
securityLevel: 'critical'
});
this.mappings.set('contract-testing', {
qeContext: 'contract-testing',
v3Domains: ['Integration'],
agents: [
'openapi-validator', 'graphql-validator', 'grpc-validator'
],
memoryNamespace: 'aqe/v3/contracts',
securityLevel: 'medium'
});
this.mappings.set('visual-accessibility', {
qeContext: 'visual-accessibility',
v3Domains: ['Integration'],
agents: [
'visual-regression-detector', 'wcag-checker', 'screenshot-differ'
],
memoryNamespace: 'aqe/v3/visual',
securityLevel: 'medium'
});
this.mappings.set('chaos-resilience', {
qeContext: 'chaos-resilience',
v3Domains: ['Core', 'Coordination'],
agents: [
'chaos-injector', 'load-generator',
'resilience-assessor', 'recovery-validator'
],
memoryNamespace: 'aqe/v3/chaos',
securityLevel: 'critical' // Can disrupt systems
});
this.mappings.set('learning-optimization', {
qeContext: 'learning-optimization',
v3Domains: ['Memory', 'Integration'],
agents: [
'cross-domain-learner', 'pattern-optimizer'
],
memoryNamespace: 'aqe/v3/learning',
securityLevel: 'low'
});
}
getMapping(context: string): ContextMapping | undefined {
return this.mappings.get(context);
}
getV3DomainsForContext(context: string): string[] {
return this.mappings.get(context)?.v3Domains ?? [];
}
getAgentsForContext(context: string): string[] {
return this.mappings.get(context)?.agents ?? [];
}
getAllAgents(): string[] {
return Array.from(this.mappings.values())
.flatMap(m => m.agents);
}
}
// v3/plugins/agentic-qe/src/infrastructure/agentic-qe-bridge.ts
import type { IMemoryService } from '@claude-flow/memory';
import type { SecurityModule } from '@claude-flow/security';
import type { EmbeddingsService } from '@claude-flow/embeddings';
export interface AgenticQEBridgeConfig {
memory: IMemoryService;
security: SecurityModule;
embeddings: EmbeddingsService;
namespace: string;
}
export interface QEMemoryNamespace {
name: string;
description: string;
vectorDimension: number;
hnswConfig: {
m: number;
efConstruction: number;
efSearch: number;
};
schema: Record<string, { type: string; index?: boolean }>;
}
export class AgenticQEBridge {
private config: AgenticQEBridgeConfig;
private namespaces: QEMemoryNamespace[] = [];
constructor(config: AgenticQEBridgeConfig) {
this.config = config;
this.defineNamespaces();
}
private defineNamespaces(): void {
// Root namespace for all agentic-qe data
this.namespaces = [
{
name: 'aqe/v3/test-patterns',
description: 'Learned test generation patterns',
vectorDimension: 384,
hnswConfig: { m: 16, efConstruction: 200, efSearch: 100 },
schema: {
patternType: { type: 'string', index: true },
language: { type: 'string', index: true },
framework: { type: 'string', index: true },
effectiveness: { type: 'number' },
usageCount: { type: 'number' }
}
},
{
name: 'aqe/v3/coverage-data',
description: 'Coverage analysis results and gaps',
vectorDimension: 384,
hnswConfig: { m: 12, efConstruction: 150, efSearch: 50 },
schema: {
filePath: { type: 'string', index: true },
linesCovered: { type: 'number' },
linesTotal: { type: 'number' },
branchCoverage: { type: 'number' },
gapType: { type: 'string', index: true },
priority: { type: 'number' }
}
},
{
name: 'aqe/v3/defect-patterns',
description: 'Defect intelligence and predictions',
vectorDimension: 384,
hnswConfig: { m: 16, efConstruction: 200, efSearch: 100 },
schema: {
defectType: { type: 'string', index: true },
severity: { type: 'string', index: true },
rootCause: { type: 'string' },
resolution: { type: 'string' },
recurrence: { type: 'number' }
}
},
{
name: 'aqe/v3/code-knowledge',
description: 'Code intelligence knowledge graph',
vectorDimension: 384,
hnswConfig: { m: 24, efConstruction: 300, efSearch: 150 },
schema: {
nodeType: { type: 'string', index: true },
nodeName: { type: 'string', index: true },
filePath: { type: 'string', index: true },
complexity: { type: 'number' },
dependencies: { type: 'string' } // JSON array
}
},
{
name: 'aqe/v3/security-findings',
description: 'Security scan findings and compliance',
vectorDimension: 384,
hnswConfig: { m: 16, efConstruction: 200, efSearch: 100 },
schema: {
findingType: { type: 'string', index: true },
severity: { type: 'string', index: true },
cweId: { type: 'string', index: true },
filePath: { type: 'string' },
lineNumber: { type: 'number' },
remediation: { type: 'string' }
}
},
{
name: 'aqe/v3/contracts',
description: 'API contract definitions and validations',
vectorDimension: 384,
hnswConfig: { m: 12, efConstruction: 150, efSearch: 50 },
schema: {
contractType: { type: 'string', index: true },
serviceName: { type: 'string', index: true },
version: { type: 'string' },
endpoint: { type: 'string' },
validationStatus: { type: 'string', index: true }
}
},
{
name: 'aqe/v3/visual-baselines',
description: 'Visual regression baselines and diffs',
vectorDimension: 768, // Higher dim for image embeddings
hnswConfig: { m: 32, efConstruction: 400, efSearch: 200 },
schema: {
componentId: { type: 'string', index: true },
viewport: { type: 'string', index: true },
baselineHash: { type: 'string' },
lastUpdated: { type: 'number' }
}
},
{
name: 'aqe/v3/chaos-experiments',
description: 'Chaos engineering experiments and results',
vectorDimension: 384,
hnswConfig: { m: 12, efConstruction: 150, efSearch: 50 },
schema: {
experimentType: { type: 'string', index: true },
targetService: { type: 'string', index: true },
failureMode: { type: 'string' },
impactLevel: { type: 'string' },
recoveryTime: { type: 'number' }
}
},
{
name: 'aqe/v3/learning-trajectories',
description: 'ReasoningBank learning trajectories for QE',
vectorDimension: 384,
hnswConfig: { m: 16, efConstruction: 200, efSearch: 100 },
schema: {
taskType: { type: 'string', index: true },
agentId: { type: 'string', index: true },
success: { type: 'boolean', index: true },
reward: { type: 'number' },
trajectory: { type: 'string' } // JSON array of steps
}
}
];
}
async initializeNamespaces(): Promise<void> {
for (const ns of this.namespaces) {
await this.config.memory.createNamespace(ns.name, {
vectorDimension: ns.vectorDimension,
hnswConfig: ns.hnswConfig,
schema: ns.schema
});
}
}
async cleanup(): Promise<void> {
// Optional: cleanup temporary data, keep learned patterns
const tempNamespaces = [
'aqe/v3/coverage-data' // Regenerated each analysis
];
for (const ns of tempNamespaces) {
await this.config.memory.clearNamespace(ns);
}
}
// Bridge methods for agentic-qe to access V3 memory
async storeTestPattern(pattern: TestPattern): Promise<string> {
const embedding = await this.config.embeddings.generate(pattern.description);
return this.config.memory.store({
namespace: 'aqe/v3/test-patterns',
content: JSON.stringify(pattern),
embedding,
metadata: {
patternType: pattern.type,
language: pattern.language,
framework: pattern.framework
}
});
}
async searchSimilarPatterns(query: string, k: number = 10): Promise<TestPattern[]> {
const embedding = await this.config.embeddings.generate(query);
const results = await this.config.memory.searchSemantic(embedding, k, {
namespace: 'aqe/v3/test-patterns'
});
return results.map(r => JSON.parse(r.content));
}
}
// v3/plugins/agentic-qe/src/mcp-tools/index.ts
import type { MCPTool } from '@claude-flow/plugins';
export const mcpTools: MCPTool[] = [
// Test Generation Tools
{
name: 'aqe/generate-tests',
description: 'Generate tests for code using AI-powered test generation',
category: 'test-generation',
version: '3.2.3',
inputSchema: {
type: 'object',
properties: {
targetPath: { type: 'string', description: 'Path to file/directory to test' },
testType: {
type: 'string',
enum: ['unit', 'integration', 'e2e', 'property', 'mutation', 'fuzz'],
default: 'unit'
},
framework: {
type: 'string',
enum: ['vitest', 'jest', 'mocha', 'pytest', 'junit'],
description: 'Test framework to use'
},
coverage: {
type: 'object',
properties: {
target: { type: 'number', description: 'Target coverage %', default: 80 },
focusGaps: { type: 'boolean', default: true }
}
},
style: {
type: 'string',
enum: ['tdd-london', 'tdd-chicago', 'bdd', 'example-based'],
default: 'tdd-london'
}
},
required: ['targetPath']
},
handler: async (input, context) => {
const bridge = context.get<AgenticQEBridge>('aqe.bridge');
const sandbox = context.get<SecuritySandbox>('aqe.sandbox');
// Generate tests using agentic-qe engine
const result = await sandbox.execute(async () => {
const { TestGenerationService } = await import('agentic-qe');
const service = new TestGenerationService({
memory: bridge,
model: context.get('modelRouter') // TinyDancer routing
});
return service.generate({
target: input.targetPath,
type: input.testType,
framework: input.framework,
coverageTarget: input.coverage?.target,
focusGaps: input.coverage?.focusGaps,
style: input.style
});
});
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
},
// Coverage Analysis Tools
{
name: 'aqe/analyze-coverage',
description: 'Analyze code coverage with O(log n) gap detection',
category: 'coverage-analysis',
version: '3.2.3',
inputSchema: {
type: 'object',
properties: {
coverageReport: { type: 'string', description: 'Path to coverage report (lcov/json)' },
targetPath: { type: 'string', description: 'Path to analyze' },
algorithm: {
type: 'string',
enum: ['johnson-lindenstrauss', 'full-scan'],
default: 'johnson-lindenstrauss'
},
prioritize: { type: 'boolean', default: true }
},
required: ['targetPath']
},
handler: async (input, context) => {
const bridge = context.get<AgenticQEBridge>('aqe.bridge');
const { CoverageAnalysisService } = await import('agentic-qe');
const service = new CoverageAnalysisService({ memory: bridge });
const result = await service.analyze({
report: input.coverageReport,
target: input.targetPath,
algorithm: input.algorithm,
prioritize: input.prioritize
});
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
},
// Security Compliance Tools
{
name: 'aqe/security-scan',
description: 'Run SAST/DAST security scans with compliance checking',
category: 'security-compliance',
version: '3.2.3',
inputSchema: {
type: 'object',
properties: {
targetPath: { type: 'string', description: 'Path to scan' },
scanType: {
type: 'string',
enum: ['sast', 'dast', 'both'],
default: 'sast'
},
compliance: {
type: 'array',
items: { type: 'string', enum: ['owasp-top-10', 'sans-25', 'pci-dss', 'hipaa'] },
default: ['owasp-top-10']
},
severity: {
type: 'string',
enum: ['all', 'critical', 'high', 'medium'],
default: 'all'
}
},
required: ['targetPath']
},
handler: async (input, context) => {
const securityModule = context.get('security');
const bridge = context.get<AgenticQEBridge>('aqe.bridge');
// Validate path before scanning
const pathResult = await securityModule.pathValidator.validate(input.targetPath);
if (!pathResult.valid) {
throw new Error(`Path validation failed: ${pathResult.error}`);
}
const { SecurityComplianceService } = await import('agentic-qe');
const service = new SecurityComplianceService({
memory: bridge,
security: securityModule
});
const result = await service.scan({
target: pathResult.resolvedPath,
type: input.scanType,
compliance: input.compliance,
severityFilter: input.severity
});
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
},
// Contract Testing Tools
{
name: 'aqe/validate-contract',
description: 'Validate API contracts (OpenAPI, GraphQL, gRPC)',
category: 'contract-testing',
version: '3.2.3',
inputSchema: {
type: 'object',
properties: {
contractPath: { type: 'string', description: 'Path to contract definition' },
contractType: {
type: 'string',
enum: ['openapi', 'graphql', 'grpc', 'asyncapi'],
description: 'Type of contract'
},
targetUrl: { type: 'string', description: 'URL to validate against (optional)' },
strict: { type: 'boolean', default: true }
},
required: ['contractPath', 'contractType']
},
handler: async (input, context) => {
const bridge = context.get<AgenticQEBridge>('aqe.bridge');
const { ContractTestingService } = await import('agentic-qe');
const service = new ContractTestingService({ memory: bridge });
const result = await service.validate({
contract: input.contractPath,
type: input.contractType,
targetUrl: input.targetUrl,
strict: input.strict
});
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
},
// Chaos Engineering Tools
{
name: 'aqe/chaos-inject',
description: 'Inject chaos failures for resilience testing',
category: 'chaos-resilience',
version: '3.2.3',
inputSchema: {
type: 'object',
properties: {
target: { type: 'string', description: 'Target service/component' },
failureType: {
type: 'string',
enum: ['network-latency', 'network-partition', 'cpu-stress', 'memory-pressure', 'disk-failure', 'process-kill'],
description: 'Type of failure to inject'
},
duration: { type: 'number', description: 'Duration in seconds', default: 30 },
intensity: { type: 'number', description: 'Intensity 0-1', default: 0.5 },
dryRun: { type: 'boolean', default: true }
},
required: ['target', 'failureType']
},
handler: async (input, context) => {
const sandbox = context.get<SecuritySandbox>('aqe.sandbox');
// Chaos injection requires elevated security checks
if (!input.dryRun) {
const confirmed = await context.get('ui')?.confirm(
`WARNING: This will inject ${input.failureType} into ${input.target} for ${input.duration}s. Continue?`
);
if (!confirmed) {
return {
content: [{
type: 'text',
text: 'Chaos injection cancelled by user'
}]
};
}
}
const result = await sandbox.execute(async () => {
const { ChaosResilienceService } = await import('agentic-qe');
const service = new ChaosResilienceService();
return service.inject({
target: input.target,
failure: input.failureType,
duration: input.duration,
intensity: input.intensity,
dryRun: input.dryRun
});
}, { securityLevel: 'critical' });
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
},
// Quality Gate Evaluation
{
name: 'aqe/evaluate-quality-gate',
description: 'Evaluate quality gates for release readiness',
category: 'quality-assessment',
version: '3.2.3',
inputSchema: {
type: 'object',
properties: {
gates: {
type: 'array',
items: {
type: 'object',
properties: {
metric: { type: 'string' },
operator: { type: 'string', enum: ['>', '<', '>=', '<=', '=='] },
threshold: { type: 'number' }
}
},
description: 'Quality gate definitions'
},
defaults: {
type: 'string',
enum: ['strict', 'standard', 'minimal'],
default: 'standard'
}
}
},
handler: async (input, context) => {
const bridge = context.get<AgenticQEBridge>('aqe.bridge');
const { QualityAssessmentService } = await import('agentic-qe');
const service = new QualityAssessmentService({ memory: bridge });
const result = await service.evaluateGates({
gates: input.gates,
defaults: input.defaults
});
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
},
// Defect Intelligence
{
name: 'aqe/predict-defects',
description: 'Predict potential defects using ML-based analysis',
category: 'defect-intelligence',
version: '3.2.3',
inputSchema: {
type: 'object',
properties: {
targetPath: { type: 'string', description: 'Path to analyze' },
depth: {
type: 'string',
enum: ['shallow', 'medium', 'deep'],
default: 'medium'
},
includeRootCause: { type: 'boolean', default: true }
},
required: ['targetPath']
},
handler: async (input, context) => {
const bridge = context.get<AgenticQEBridge>('aqe.bridge');
const { DefectIntelligenceService } = await import('agentic-qe');
const service = new DefectIntelligenceService({ memory: bridge });
const result = await service.predict({
target: input.targetPath,
depth: input.depth,
includeRootCause: input.includeRootCause
});
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
},
// TDD Cycle Tool (7 subagents)
{
name: 'aqe/tdd-cycle',
description: 'Execute TDD red-green-refactor cycle with 7 specialized subagents',
category: 'test-generation',
version: '3.2.3',
inputSchema: {
type: 'object',
properties: {
requirement: { type: 'string', description: 'Requirement/story to implement' },
targetPath: { type: 'string', description: 'Path to implement in' },
style: {
type: 'string',
enum: ['london', 'chicago'],
default: 'london'
},
maxCycles: { type: 'number', default: 10 }
},
required: ['requirement', 'targetPath']
},
handler: async (input, context) => {
const bridge = context.get<AgenticQEBridge>('aqe.bridge');
const sandbox = context.get<SecuritySandbox>('aqe.sandbox');
const result = await sandbox.execute(async () => {
const { TDDCycleService } = await import('agentic-qe');
const service = new TDDCycleService({
memory: bridge,
model: context.get('modelRouter')
});
return service.execute({
requirement: input.requirement,
target: input.targetPath,
style: input.style,
maxCycles: input.maxCycles,
// Use 7 TDD subagents
agents: [
'requirement-analyzer',
'test-designer',
'red-phase-executor',
'green-phase-implementer',
'refactor-advisor',
'coverage-verifier',
'cycle-coordinator'
]
});
});
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
}
];
// v3/plugins/agentic-qe/src/infrastructure/model-routing-adapter.ts
import type { EnhancedModelRouter, EnhancedRouteResult } from '@claude-flow/cli/ruvector';
/**
* Adapter to align TinyDancer model routing with ADR-026 Agent Booster routing
*/
export class ModelRoutingAdapter {
private v3Router: EnhancedModelRouter;
constructor(v3Router: EnhancedModelRouter) {
this.v3Router = v3Router;
}
/**
* Map TinyDancer task categories to ADR-026 routing
*/
async routeQETask(task: QETask): Promise<ModelRouteResult> {
// TinyDancer categories mapped to complexity
const complexityMap: Record<string, number> = {
// Tier 1: Agent Booster (simple transforms)
'add-test-import': 0.1,
'add-test-describe': 0.15,
'add-assertion': 0.2,
// Tier 2: Haiku (simple generation)
'generate-unit-test': 0.3,
'generate-mock': 0.35,
'analyze-coverage-line': 0.25,
// Tier 2: Sonnet (medium complexity)
'generate-integration-test': 0.5,
'analyze-coverage-branch': 0.45,
'predict-defect-simple': 0.4,
'validate-contract-simple': 0.45,
// Tier 3: Opus (high complexity)
'generate-e2e-test': 0.7,
'root-cause-analysis': 0.8,
'chaos-experiment-design': 0.85,
'architecture-analysis': 0.9,
'security-audit-deep': 0.95
};
const complexity = complexityMap[task.category] ?? 0.5;
// Use V3 router for actual model selection
const routeResult = await this.v3Router.route(task.description, {
filePath: task.targetPath
});
// Enhance with QE-specific routing hints
return {
...routeResult,
qeCategory: task.category,
qeComplexity: complexity,
recommendedAgents: this.getRecommendedAgents(task.category, routeResult.tier)
};
}
private getRecommendedAgents(category: string, tier: 1 | 2 | 3): string[] {
// Map tier to agent allocation
const tierAgentCounts = {
1: 1, // Single agent for simple tasks
2: 3, // Small team for medium tasks
3: 5 // Full team for complex tasks
};
const agentCount = tierAgentCounts[tier];
// Get agents for this category
const categoryAgents: Record<string, string[]> = {
'generate-unit-test': ['unit-test-generator'],
'generate-integration-test': ['integration-test-generator', 'mock-generator', 'test-runner'],
'generate-e2e-test': ['e2e-test-generator', 'browser-automation', 'test-runner', 'result-aggregator', 'visual-regression-detector'],
'root-cause-analysis': ['root-cause-analyzer', 'defect-predictor', 'pattern-detector', 'code-intelligence', 'knowledge-graph-builder'],
'chaos-experiment-design': ['chaos-injector', 'resilience-assessor', 'recovery-validator', 'load-generator', 'metric-aggregator']
};
return (categoryAgents[category] ?? ['generic-qe-agent']).slice(0, agentCount);
}
}
interface QETask {
category: string;
description: string;
targetPath?: string;
}
interface ModelRouteResult extends EnhancedRouteResult {
qeCategory: string;
qeComplexity: number;
recommendedAgents: string[];
}
// v3/plugins/agentic-qe/src/infrastructure/queen-hive-bridge.ts
import type { HiveMindService } from '@claude-flow/coordination';
/**
* Bridge between agentic-qe Queen Coordinator and claude-flow Hive Mind
*/
export class QueenHiveBridge {
private hiveMind: HiveMindService;
private queenId: string;
constructor(hiveMind: HiveMindService) {
this.hiveMind = hiveMind;
this.queenId = `aqe-queen-${Date.now()}`;
}
/**
* Register QE Queen as a specialized coordinator in Hive Mind
*/
async registerQueen(): Promise<void> {
await this.hiveMind.join({
agentId: this.queenId,
role: 'queen', // Special role in hierarchical topology
capabilities: [
'qe-coordination',
'test-orchestration',
'coverage-coordination',
'quality-gate-enforcement'
],
metadata: {
source: 'agentic-qe',
version: '3.2.3',
contexts: [
'test-generation', 'test-execution', 'coverage-analysis',
'quality-assessment', 'defect-intelligence'
]
}
});
}
/**
* Coordinate QE swarm through Hive Mind
*/
async coordinateQESwarm(task: QESwarmTask): Promise<QESwarmResult> {
// Use Hive Mind consensus for agent allocation
const consensusResult = await this.hiveMind.consensus({
action: 'propose',
type: 'agent-allocation',
value: {
task: task.id,
requiredAgents: task.agents,
priority: task.priority
}
});
if (consensusResult.accepted) {
// Broadcast task to allocated agents
await this.hiveMind.broadcast({
message: JSON.stringify({
type: 'qe-task',
taskId: task.id,
payload: task.payload
}),
priority: task.priority === 'critical' ? 'critical' : 'normal',
fromId: this.queenId
});
// Wait for agent results via shared memory
return this.collectResults(task.id, task.agents.length);
}
throw new Error(`QE swarm consensus rejected: ${consensusResult.reason}`);
}
/**
* Handle Byzantine fault tolerance for critical QE operations
*/
async executeWithBFT<T>(
operation: () => Promise<T>,
replicaCount: number = 3
): Promise<T> {
// Execute operation on multiple agents
const results: T[] = [];
const errors: Error[] = [];
for (let i = 0; i < replicaCount; i++) {
try {
results.push(await operation());
} catch (e) {
errors.push(e as Error);
}
}
// BFT: Need 2f+1 agreeing results (f = 1 for 3 replicas)
if (results.length < 2) {
throw new Error(`BFT consensus failed: only ${results.length}/${replicaCount} replicas succeeded`);
}
// Return majority result (simplified: first successful)
return results[0];
}
private async collectResults(taskId: string, agentCount: number): Promise<QESwarmResult> {
// Poll shared memory for results
const results = await this.hiveMind.memory({
action: 'get',
key: `qe-task-results:${taskId}`
});
return {
taskId,
agentResults: results.value ? JSON.parse(results.value) : [],
completedAgents: results.value ? JSON.parse(results.value).length : 0,
totalAgents: agentCount
};
}
}
interface QESwarmTask {
id: string;
agents: string[];
priority: 'low' | 'normal' | 'high' | 'critical';
payload: unknown;
}
interface QESwarmResult {
taskId: string;
agentResults: unknown[];
completedAgents: number;
totalAgents: number;
}
// v3/plugins/agentic-qe/src/infrastructure/security-sandbox.ts
import type { SecurityModule } from '@claude-flow/security';
export interface SandboxConfig {
maxExecutionTime: number; // ms
memoryLimit: number; // bytes
networkPolicy: 'unrestricted' | 'restricted' | 'blocked';
fileSystemPolicy: 'full' | 'workspace-only' | 'readonly' | 'none';
}
export interface SandboxExecutionOptions {
securityLevel?: 'low' | 'medium' | 'high' | 'critical';
allowNetwork?: boolean;
allowFileWrite?: boolean;
timeout?: number;
}
/**
* Security sandbox for executing test code safely
*/
export class SecuritySandbox {
private config: SandboxConfig;
private securityModule?: SecurityModule;
constructor(config: SandboxConfig) {
this.config = config;
}
setSecurityModule(module: SecurityModule): void {
this.securityModule = module;
}
/**
* Execute code within security constraints
*/
async execute<T>(
fn: () => Promise<T>,
options: SandboxExecutionOptions = {}
): Promise<T> {
const timeout = options.timeout ?? this.config.maxExecutionTime;
const level = options.securityLevel ?? 'medium';
// Apply security policy based on level
const policy = this.getPolicyForLevel(level);
// Validate execution is allowed
if (level === 'critical' && !this.securityModule) {
throw new Error('Critical security level requires security module');
}
// Create timeout promise
const timeoutPromise = new Promise<never>((_, reject) => {
setTimeout(() => reject(new Error(`Execution timeout after ${timeout}ms`)), timeout);
});
// Create execution promise with resource tracking
const executionPromise = this.executeWithPolicy(fn, policy);
// Race execution against timeout
return Promise.race([executionPromise, timeoutPromise]);
}
private getPolicyForLevel(level: 'low' | 'medium' | 'high' | 'critical'): ExecutionPolicy {
const policies: Record<string, ExecutionPolicy> = {
low: {
allowNetwork: true,
allowFileWrite: true,
allowShell: true,
maxMemory: this.config.memoryLimit,
timeout: this.config.maxExecutionTime
},
medium: {
allowNetwork: this.config.networkPolicy === 'unrestricted',
allowFileWrite: this.config.fileSystemPolicy !== 'readonly' && this.config.fileSystemPolicy !== 'none',
allowShell: false,
maxMemory: this.config.memoryLimit,
timeout: this.config.maxExecutionTime
},
high: {
allowNetwork: false,
allowFileWrite: this.config.fileSystemPolicy === 'workspace-only',
allowShell: false,
maxMemory: this.config.memoryLimit / 2,
timeout: this.config.maxExecutionTime / 2
},
critical: {
allowNetwork: false,
allowFileWrite: false,
allowShell: false,
maxMemory: this.config.memoryLimit / 4,
timeout: 5000 // 5s max for critical
}
};
return policies[level];
}
private async executeWithPolicy<T>(
fn: () => Promise<T>,
policy: ExecutionPolicy
): Promise<T> {
// Track memory usage (simplified)
const startMemory = process.memoryUsage().heapUsed;
try {
const result = await fn();
// Check memory limit wasn't exceeded
const endMemory = process.memoryUsage().heapUsed;
const memoryUsed = endMemory - startMemory;
if (memoryUsed > policy.maxMemory) {
console.warn(`Execution used ${memoryUsed} bytes, limit was ${policy.maxMemory}`);
}
return result;
} catch (error) {
// Sanitize error messages for security
if (this.securityModule) {
throw new Error(this.securityModule.sanitizeError(error as Error).message);
}
throw error;
}
}
}
interface ExecutionPolicy {
allowNetwork: boolean;
allowFileWrite: boolean;
allowShell: boolean;
maxMemory: number;
timeout: number;
}
| Metric | Target | Rationale |
|---|---|---|
| Test generation latency | <2s for unit tests | TinyDancer Tier 2 routing |
| Coverage analysis | O(log n) | Johnson-Lindenstrauss projection |
| Quality gate evaluation | <500ms | Cached metrics aggregation |
| Security scan (SAST) | <10s per 1000 LOC | Parallel AST scanning |
| MCP tool response | <100ms | V3 MCP server requirement |
| Memory per context | <50MB | Bounded context isolation |
v3/plugins/agentic-qe/ structurev3/plugins/agentic-qe/
├── src/
│ ├── index.ts # Plugin entry point & exports
│ ├── plugin.ts # AQEPlugin class registration
│ ├── types.ts # TypeScript type definitions
│ ├── interfaces.ts # Public interfaces
│ ├── schemas.ts # Zod validation schemas
│ ├── constants.ts # Plugin constants
│ │
│ ├── bridges/ # Anti-corruption layer
│ │ ├── index.ts # Bridge exports
│ │ ├── QEMemoryBridge.ts # Memory domain integration
│ │ ├── QESecurityBridge.ts # Security domain integration
│ │ ├── QECoreBridge.ts # Core domain integration
│ │ ├── QEHiveBridge.ts # Hive Mind coordination
│ │ └── QEModelRoutingAdapter.ts # TinyDancer ↔ ADR-026 adapter
│ │
│ ├── tools/ # MCP tool handlers (16 tools)
│ │ ├── index.ts # Tool registry
│ │ ├── test-generation/
│ │ │ ├── generate-tests.ts
│ │ │ └── tdd-cycle.ts
│ │ ├── coverage-analysis/
│ │ │ ├── analyze-coverage.ts
│ │ │ └── prioritize-gaps.ts
│ │ ├── quality-assessment/
│ │ │ ├── evaluate-quality-gate.ts
│ │ │ └── assess-readiness.ts
│ │ ├── defect-intelligence/
│ │ │ ├── predict-defects.ts
│ │ │ └── analyze-root-cause.ts
│ │ ├── security-compliance/
│ │ │ ├── security-scan.ts
│ │ │ └── audit-compliance.ts
│ │ ├── contract-testing/
│ │ │ ├── validate-contract.ts
│ │ │ └── compare-contracts.ts
│ │ ├── visual-accessibility/
│ │ │ ├── visual-regression.ts
│ │ │ └── check-accessibility.ts
│ │ └── chaos-resilience/
│ │ ├── chaos-inject.ts
│ │ └── assess-resilience.ts
│ │
│ ├── hooks/ # Lifecycle hooks (5 hooks)
│ │ ├── index.ts
│ │ ├── pre-test-execution.ts
│ │ ├── pre-security-scan.ts
│ │ ├── post-test-execution.ts
│ │ ├── post-coverage-analysis.ts
│ │ └── post-security-scan.ts
│ │
│ ├── workers/ # Background workers (3 workers)
│ │ ├── index.ts
│ │ ├── TestExecutorWorker.ts
│ │ ├── CoverageAnalyzerWorker.ts
│ │ └── SecurityScannerWorker.ts
│ │
│ ├── sandbox/ # Security sandbox
│ │ ├── index.ts
│ │ ├── TestSandbox.ts
│ │ └── SandboxPolicy.ts
│ │
│ └── contexts/ # Bounded context adapters
│ ├── index.ts
│ └── ContextMapper.ts
│
├── agents/ # 51 agent definitions (YAML)
│ ├── test-generation/ # 12 agents
│ │ ├── unit-test-generator.yaml
│ │ ├── integration-test-generator.yaml
│ │ ├── e2e-test-generator.yaml
│ │ ├── property-test-generator.yaml
│ │ ├── mutation-test-generator.yaml
│ │ ├── fuzz-test-generator.yaml
│ │ ├── api-test-generator.yaml
│ │ ├── performance-test-generator.yaml
│ │ ├── security-test-generator.yaml
│ │ ├── accessibility-test-generator.yaml
│ │ ├── contract-test-generator.yaml
│ │ └── bdd-test-generator.yaml
│ ├── test-execution/ # 8 agents
│ │ ├── test-runner.yaml
│ │ ├── parallel-executor.yaml
│ │ ├── retry-manager.yaml
│ │ ├── result-aggregator.yaml
│ │ ├── flaky-test-detector.yaml
│ │ ├── timeout-manager.yaml
│ │ ├── resource-allocator.yaml
│ │ └── test-reporter.yaml
│ ├── coverage-analysis/ # 6 agents
│ │ ├── coverage-collector.yaml
│ │ ├── gap-detector.yaml
│ │ ├── priority-ranker.yaml
│ │ ├── hotspot-analyzer.yaml
│ │ ├── trend-tracker.yaml
│ │ └── impact-assessor.yaml
│ ├── quality-assessment/ # 5 agents
│ │ ├── quality-gate-evaluator.yaml
│ │ ├── readiness-assessor.yaml
│ │ ├── risk-calculator.yaml
│ │ ├── metric-aggregator.yaml
│ │ └── decision-maker.yaml
│ ├── defect-intelligence/ # 4 agents
│ │ ├── defect-predictor.yaml
│ │ ├── root-cause-analyzer.yaml
│ │ ├── pattern-detector.yaml
│ │ └── regression-tracker.yaml
│ ├── requirements-validation/ # 3 agents
│ │ ├── bdd-validator.yaml
│ │ ├── testability-analyzer.yaml
│ │ └── requirement-tracer.yaml
│ ├── code-intelligence/ # 5 agents
│ │ ├── knowledge-graph-builder.yaml
│ │ ├── semantic-searcher.yaml
│ │ ├── dependency-analyzer.yaml
│ │ ├── complexity-assessor.yaml
│ │ └── pattern-miner.yaml
│ ├── security-compliance/ # 4 agents
│ │ ├── sast-scanner.yaml
│ │ ├── dast-scanner.yaml
│ │ ├── audit-trail-manager.yaml
│ │ └── compliance-checker.yaml
│ ├── contract-testing/ # 3 agents
│ │ ├── openapi-validator.yaml
│ │ ├── graphql-validator.yaml
│ │ └── grpc-validator.yaml
│ ├── visual-accessibility/ # 3 agents
│ │ ├── visual-regression-detector.yaml
│ │ ├── wcag-checker.yaml
│ │ └── screenshot-differ.yaml
│ ├── chaos-resilience/ # 4 agents
│ │ ├── chaos-injector.yaml
│ │ ├── load-generator.yaml
│ │ ├── resilience-assessor.yaml
│ │ └── recovery-validator.yaml
│ ├── learning-optimization/ # 2 agents
│ │ ├── cross-domain-learner.yaml
│ │ └── pattern-optimizer.yaml
│ └── tdd/ # 7 TDD subagents
│ ├── requirement-analyzer.yaml
│ ├── test-designer.yaml
│ ├── red-phase-executor.yaml
│ ├── green-phase-implementer.yaml
│ ├── refactor-advisor.yaml
│ ├── coverage-verifier.yaml
│ └── cycle-coordinator.yaml
│
├── skills/ # Claude Code skills (12 skills)
│ ├── qe-test-generation.md
│ ├── qe-tdd-cycle.md
│ ├── qe-coverage-analysis.md
│ ├── qe-quality-gate.md
│ ├── qe-defect-prediction.md
│ ├── qe-security-scan.md
│ ├── qe-contract-testing.md
│ ├── qe-visual-testing.md
│ ├── qe-accessibility.md
│ ├── qe-chaos-engineering.md
│ ├── qe-queen-coordinator.md
│ └── qe-full-pipeline.md
│
├── __tests__/ # Test suite
│ ├── unit/
│ │ ├── plugin.test.ts
│ │ ├── bridges/
│ │ │ ├── QEMemoryBridge.test.ts
│ │ │ ├── QESecurityBridge.test.ts
│ │ │ ├── QECoreBridge.test.ts
│ │ │ └── QEHiveBridge.test.ts
│ │ ├── tools/
│ │ │ └── *.test.ts
│ │ └── hooks/
│ │ └── *.test.ts
│ ├── integration/
│ │ ├── memory-integration.test.ts
│ │ ├── mcp-tools.test.ts
│ │ └── swarm-coordination.test.ts
│ └── e2e/
│ ├── test-generation-flow.test.ts
│ ├── quality-gate-flow.test.ts
│ └── full-pipeline.test.ts
│
├── examples/ # Working examples
│ ├── basic-test-generation.ts
│ ├── tdd-workflow.ts
│ ├── coverage-analysis.ts
│ ├── quality-gate-setup.ts
│ ├── security-audit.ts
│ └── chaos-experiment.ts
│
├── plugin.yaml # ✅ EXISTS - Plugin manifest
├── README.md # ✅ EXISTS - Usage documentation
├── package.json # Package definition
├── tsconfig.json # TypeScript configuration
└── vitest.config.ts # Test configuration
| Task | Files | Priority | Dependencies |
|---|---|---|---|
| Create package.json with dependencies | package.json | 🔴 Critical | None |
| Create TypeScript config | tsconfig.json | 🔴 Critical | package.json |
| Define type definitions | src/types.ts, src/interfaces.ts | 🔴 Critical | tsconfig.json |
| Create Zod schemas | src/schemas.ts | 🔴 Critical | types.ts |
| Implement plugin entry point | src/index.ts, src/plugin.ts | 🔴 Critical | schemas.ts |
| Create constants | src/constants.ts | 🟡 High | types.ts |
Deliverables:
@claude-flow/plugins SDK| Task | Files | Priority | Dependencies |
|---|---|---|---|
| Memory bridge | src/bridges/QEMemoryBridge.ts | 🔴 Critical | Phase 1 |
| Security bridge | src/bridges/QESecurityBridge.ts | 🔴 Critical | Phase 1 |
| Core bridge | src/bridges/QECoreBridge.ts | 🔴 Critical | Phase 1 |
| Hive Mind bridge | src/bridges/QEHiveBridge.ts | 🔴 Critical | Phase 1 |
| Model routing adapter | src/bridges/QEModelRoutingAdapter.ts | 🟡 High | Phase 1 |
| Context mapper | src/contexts/ContextMapper.ts | 🟡 High | Bridges |
Deliverables:
| Task | Files | Priority | Dependencies |
|---|---|---|---|
| Tool registry | src/tools/index.ts | 🔴 Critical | Phase 2 |
| Test generation tools (2) | src/tools/test-generation/*.ts | 🔴 Critical | Registry |
| Coverage tools (2) | src/tools/coverage-analysis/*.ts | 🔴 Critical | Registry |
| Quality tools (2) | src/tools/quality-assessment/*.ts | 🟡 High | Registry |
| Defect tools (2) | src/tools/defect-intelligence/*.ts | 🟡 High | Registry |
| Security tools (2) | src/tools/security-compliance/*.ts | 🟡 High | Registry |
| Contract tools (2) | src/tools/contract-testing/*.ts | 🟢 Medium | Registry |
| Visual tools (2) | src/tools/visual-accessibility/*.ts | 🟢 Medium | Registry |
| Chaos tools (2) | src/tools/chaos-resilience/*.ts | 🟢 Medium | Registry |
Deliverables:
mcp__agentic-qe__<tool-name>| Task | Files | Priority | Dependencies |
|---|---|---|---|
| Hook registry | src/hooks/index.ts | 🟡 High | Phase 2 |
| Pre-execution hooks (2) | src/hooks/pre-*.ts | 🟡 High | Registry |
| Post-execution hooks (3) | src/hooks/post-*.ts | 🟡 High | Registry |
| Worker registry | src/workers/index.ts | 🟡 High | Phase 2 |
| Test executor worker | src/workers/TestExecutorWorker.ts | 🟡 High | Registry |
| Coverage analyzer worker | src/workers/CoverageAnalyzerWorker.ts | 🟢 Medium | Registry |
| Security scanner worker | src/workers/SecurityScannerWorker.ts | 🟢 Medium | Registry |
| Security sandbox | src/sandbox/*.ts | 🔴 Critical | Hooks |
Deliverables:
| Task | Files | Priority | Dependencies |
|---|---|---|---|
| Test generation agents (12) | agents/test-generation/*.yaml | 🟡 High | Phase 3 |
| Test execution agents (8) | agents/test-execution/*.yaml | 🟡 High | Phase 3 |
| Coverage agents (6) | agents/coverage-analysis/*.yaml | 🟡 High | Phase 3 |
| Quality agents (5) | agents/quality-assessment/*.yaml | 🟢 Medium | Phase 3 |
| Defect agents (4) | agents/defect-intelligence/*.yaml | 🟢 Medium | Phase 3 |
| Requirements agents (3) | agents/requirements-validation/*.yaml | 🟢 Medium | Phase 3 |
| Code intelligence agents (5) | agents/code-intelligence/*.yaml | 🟢 Medium | Phase 3 |
| Security agents (4) | agents/security-compliance/*.yaml | 🟢 Medium | Phase 3 |
| Contract agents (3) | agents/contract-testing/*.yaml | 🟢 Medium | Phase 3 |
| Visual agents (3) | agents/visual-accessibility/*.yaml | 🟢 Medium | Phase 3 |
| Chaos agents (4) | agents/chaos-resilience/*.yaml | 🟢 Medium | Phase 3 |
| Learning agents (2) | agents/learning-optimization/*.yaml | 🟢 Medium | Phase 3 |
| TDD subagents (7) | agents/tdd/*.yaml | 🟡 High | Phase 3 |
Deliverables:
| Task | Files | Priority | Dependencies |
|---|---|---|---|
| Core skills (6) | skills/qe-*.md | 🟡 High | Phase 5 |
| Advanced skills (6) | skills/qe-*.md | 🟢 Medium | Phase 5 |
| Basic examples (3) | examples/*.ts | 🟢 Medium | Phase 4 |
| Advanced examples (3) | examples/*.ts | 🟢 Medium | Phase 4 |
Deliverables:
/qe-* commands in Claude Code| Task | Files | Priority | Dependencies |
|---|---|---|---|
| Unit tests | __tests__/unit/**/*.test.ts | 🟡 High | Phase 4 |
| Integration tests | __tests__/integration/*.test.ts | 🟡 High | Phase 5 |
| E2E tests | __tests__/e2e/*.test.ts | 🟢 Medium | Phase 6 |
| Test config | vitest.config.ts | 🟡 High | Phase 1 |
| Update README | README.md | 🟢 Medium | Phase 6 |
Deliverables:
| Metric | Target | Measurement |
|---|---|---|
| Total files | ~103 | Count |
| TypeScript LOC | ~5,000 | src/**/*.ts |
| YAML LOC | ~2,500 | agents/**/*.yaml |
| Skill LOC | ~1,200 | skills/**/*.md |
| Test LOC | ~2,000 | tests/**/*.ts |
| Total LOC | ~10,700 | All files |
| Test coverage | 80%+ | Vitest coverage |
| Build time | <30s | npm run build |
| Bundle size | <500KB | minified |
{
"name": "@claude-flow/plugin-agentic-qe",
"version": "3.0.0-alpha.1",
"dependencies": {
"agentic-qe": "^3.2.3",
"@claude-flow/plugins": "^3.0.0",
"@claude-flow/memory": "^3.0.0",
"@claude-flow/security": "^3.0.0",
"@claude-flow/embeddings": "^3.0.0",
"zod": "^3.23.0"
},
"devDependencies": {
"vitest": "^2.0.0",
"typescript": "^5.5.0",
"@types/node": "^20.0.0"
},
"peerDependencies": {
"@claude-flow/browser": ">=3.0.0"
}
}