/** * Agentic QE v3 - Domain Events * Event definitions for cross-domain communication */ import { v4 as uuidv4 } from 'uuid'; import { DomainEvent, DomainName, Severity } from '../types'; // ============================================================================ // Base Event Factory // ============================================================================ export function createEvent( type: string, source: DomainName, payload: T, correlationId?: string ): DomainEvent { return { id: uuidv4(), type, timestamp: new Date(), source, correlationId, payload, }; } // ============================================================================ // Test Generation Events // ============================================================================ export interface TestGeneratedPayload { testId: string; testFile: string; framework: string; sourceFile: string; testType: 'unit' | 'integration' | 'e2e' | 'property'; } export interface TestSuiteCreatedPayload { suiteId: string; testCount: number; sourceFiles: string[]; coverageEstimate: number; } export const TestGenerationEvents = { TestGenerated: 'test-generation.TestGenerated', TestSuiteCreated: 'test-generation.TestSuiteCreated', PatternLearned: 'test-generation.PatternLearned', GenerationFailed: 'test-generation.GenerationFailed', } as const; // ============================================================================ // Test Execution Events // ============================================================================ export interface TestRunStartedPayload { runId: string; testCount: number; parallel: boolean; workers: number; } export interface TestRunCompletedPayload { runId: string; passed: number; failed: number; skipped: number; duration: number; } export interface FlakyTestDetectedPayload { testId: string; testFile: string; failureRate: number; pattern: string; } export const TestExecutionEvents = { TestRunStarted: 'test-execution.TestRunStarted', TestRunCompleted: 'test-execution.TestRunCompleted', FlakyTestDetected: 'test-execution.FlakyTestDetected', RetryTriggered: 'test-execution.RetryTriggered', } as const; // ============================================================================ // Coverage Analysis Events // ============================================================================ export interface CoverageReportPayload { reportId: string; line: number; branch: number; function: number; statement: number; files: number; } export interface CoverageGapPayload { gapId: string; file: string; uncoveredLines: number[]; uncoveredBranches: number[]; riskScore: number; } export const CoverageAnalysisEvents = { CoverageReportCreated: 'coverage-analysis.CoverageReportCreated', CoverageGapDetected: 'coverage-analysis.CoverageGapDetected', RiskZoneIdentified: 'coverage-analysis.RiskZoneIdentified', } as const; // ============================================================================ // Quality Assessment Events // ============================================================================ export interface QualityGatePayload { gateId: string; passed: boolean; checks: Array<{ name: string; passed: boolean; value: number; threshold: number; }>; } export interface DeploymentDecisionPayload { decision: 'approved' | 'blocked' | 'warning'; reason: string; riskScore: number; recommendations: string[]; } export const QualityAssessmentEvents = { QualityGateEvaluated: 'quality-assessment.QualityGateEvaluated', DeploymentApproved: 'quality-assessment.DeploymentApproved', DeploymentBlocked: 'quality-assessment.DeploymentBlocked', } as const; // ============================================================================ // Defect Intelligence Events // ============================================================================ export interface DefectPredictedPayload { predictionId: string; file: string; probability: number; factors: string[]; recommendations: string[]; } export interface RootCausePayload { analysisId: string; defectId: string; rootCause: string; confidence: number; relatedFiles: string[]; } export const DefectIntelligenceEvents = { DefectPredicted: 'defect-intelligence.DefectPredicted', RootCauseIdentified: 'defect-intelligence.RootCauseIdentified', RegressionRiskAnalyzed: 'defect-intelligence.RegressionRiskAnalyzed', } as const; // ============================================================================ // Code Intelligence Events // ============================================================================ export interface KnowledgeGraphUpdatedPayload { nodes: number; edges: number; filesIndexed: number; duration: number; } export interface ImpactAnalysisPayload { analysisId: string; changedFiles: string[]; impactedFiles: string[]; impactedTests: string[]; riskLevel: Severity; } export const CodeIntelligenceEvents = { KnowledgeGraphUpdated: 'code-intelligence.KnowledgeGraphUpdated', ImpactAnalysisCompleted: 'code-intelligence.ImpactAnalysisCompleted', SemanticSearchCompleted: 'code-intelligence.SemanticSearchCompleted', } as const; // ============================================================================ // Security Compliance Events // ============================================================================ export interface VulnerabilityPayload { vulnId: string; cve?: string; severity: Severity; file: string; line?: number; description: string; remediation: string; } export interface CompliancePayload { standard: string; passed: boolean; violations: number; findings: string[]; } export const SecurityComplianceEvents = { VulnerabilityDetected: 'security-compliance.VulnerabilityDetected', ComplianceValidated: 'security-compliance.ComplianceValidated', SecurityAuditCompleted: 'security-compliance.SecurityAuditCompleted', } as const; // ============================================================================ // Learning Optimization Events // ============================================================================ export interface PatternConsolidatedPayload { patternCount: number; domains: DomainName[]; improvements: number; } export interface TransferCompletedPayload { sourceProject: string; targetProject: string; patternsTransferred: number; successRate: number; } export const LearningOptimizationEvents = { PatternConsolidated: 'learning-optimization.PatternConsolidated', TransferCompleted: 'learning-optimization.TransferCompleted', OptimizationApplied: 'learning-optimization.OptimizationApplied', } as const; // ============================================================================ // All Events Map // ============================================================================ export const AllDomainEvents = { ...TestGenerationEvents, ...TestExecutionEvents, ...CoverageAnalysisEvents, ...QualityAssessmentEvents, ...DefectIntelligenceEvents, ...CodeIntelligenceEvents, ...SecurityComplianceEvents, ...LearningOptimizationEvents, } as const; export type DomainEventType = (typeof AllDomainEvents)[keyof typeof AllDomainEvents];