agentic-qe 2.6.6 ā 2.7.0
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/CHANGELOG.md +60 -0
- package/README.md +1 -1
- package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -1
- package/dist/agents/AccessibilityAllyAgent.js +1 -1
- package/dist/agents/AccessibilityAllyAgent.js.map +1 -1
- package/dist/agents/ApiContractValidatorAgent.d.ts +83 -56
- package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -1
- package/dist/agents/ApiContractValidatorAgent.js +97 -46
- package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
- package/dist/agents/BaseAgent.d.ts +64 -13
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +5 -4
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +18 -12
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.js +25 -24
- package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +170 -41
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +7 -5
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.d.ts +49 -13
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.js +30 -30
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +56 -18
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +45 -46
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts +164 -15
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +44 -34
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +29 -7
- package/dist/agents/LearningAgent.d.ts.map +1 -1
- package/dist/agents/LearningAgent.js +6 -4
- package/dist/agents/LearningAgent.js.map +1 -1
- package/dist/agents/NeuralAgentExtension.d.ts +46 -2
- package/dist/agents/NeuralAgentExtension.d.ts.map +1 -1
- package/dist/agents/NeuralAgentExtension.js +13 -11
- package/dist/agents/NeuralAgentExtension.js.map +1 -1
- package/dist/agents/PerformanceTesterAgent.d.ts +177 -14
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +73 -10
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.d.ts +117 -15
- package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +76 -63
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
- package/dist/agents/QXPartnerAgent.js +40 -30
- package/dist/agents/QXPartnerAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts +113 -6
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js +30 -25
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +125 -4
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +13 -15
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +32 -13
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +49 -30
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.d.ts +6 -13
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.js +34 -27
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.d.ts +86 -14
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +53 -38
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts +140 -57
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +93 -54
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +43 -18
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +31 -23
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +71 -23
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +116 -58
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/adapters/LearningEngineAdapter.d.ts.map +1 -1
- package/dist/agents/adapters/LearningEngineAdapter.js.map +1 -1
- package/dist/agents/adapters/MemoryServiceAdapter.d.ts.map +1 -1
- package/dist/agents/adapters/MemoryServiceAdapter.js +10 -6
- package/dist/agents/adapters/MemoryServiceAdapter.js.map +1 -1
- package/dist/agents/index.d.ts +36 -5
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +1 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/n8n/N8nBaseAgent.d.ts.map +1 -1
- package/dist/agents/n8n/N8nBaseAgent.js +2 -1
- package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +221 -66
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/fleet/backup.d.ts +4 -4
- package/dist/cli/commands/fleet/backup.d.ts.map +1 -1
- package/dist/cli/commands/fleet/backup.js +4 -4
- package/dist/cli/commands/fleet/backup.js.map +1 -1
- package/dist/cli/commands/fleet/health.d.ts +131 -1
- package/dist/cli/commands/fleet/health.d.ts.map +1 -1
- package/dist/cli/commands/fleet/health.js +204 -138
- package/dist/cli/commands/fleet/health.js.map +1 -1
- package/dist/cli/commands/fleet/metrics.d.ts.map +1 -1
- package/dist/cli/commands/fleet/metrics.js +1 -1
- package/dist/cli/commands/fleet/metrics.js.map +1 -1
- package/dist/cli/commands/fleet/monitor.d.ts.map +1 -1
- package/dist/cli/commands/fleet/monitor.js +2 -1
- package/dist/cli/commands/fleet/monitor.js.map +1 -1
- package/dist/cli/commands/fleet/restart.d.ts.map +1 -1
- package/dist/cli/commands/fleet/restart.js +1 -1
- package/dist/cli/commands/fleet/restart.js.map +1 -1
- package/dist/cli/commands/fleet/shutdown.d.ts.map +1 -1
- package/dist/cli/commands/fleet/shutdown.js.map +1 -1
- package/dist/cli/commands/fleet/status.d.ts.map +1 -1
- package/dist/cli/commands/fleet/status.js +1 -1
- package/dist/cli/commands/fleet/status.js.map +1 -1
- package/dist/cli/commands/fleet/topology.d.ts.map +1 -1
- package/dist/cli/commands/fleet/topology.js +9 -8
- package/dist/cli/commands/fleet/topology.js.map +1 -1
- package/dist/cli/commands/fleet.d.ts +8 -0
- package/dist/cli/commands/fleet.d.ts.map +1 -1
- package/dist/cli/commands/fleet.js +55 -21
- package/dist/cli/commands/fleet.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts +2 -2
- package/dist/cli/commands/improve/index.d.ts.map +1 -1
- package/dist/cli/commands/improve/index.js +76 -38
- package/dist/cli/commands/improve/index.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +57 -19
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/commands/memory/index.d.ts +23 -4
- package/dist/cli/commands/memory/index.d.ts.map +1 -1
- package/dist/cli/commands/memory/index.js.map +1 -1
- package/dist/cli/commands/memory/stats.js +1 -1
- package/dist/cli/commands/memory/stats.js.map +1 -1
- package/dist/cli/commands/memory/vacuum.js +3 -3
- package/dist/cli/commands/memory/vacuum.js.map +1 -1
- package/dist/cli/commands/patterns/extract.d.ts.map +1 -1
- package/dist/cli/commands/patterns/extract.js +4 -3
- package/dist/cli/commands/patterns/extract.js.map +1 -1
- package/dist/cli/commands/patterns/index-new.d.ts +10 -1
- package/dist/cli/commands/patterns/index-new.d.ts.map +1 -1
- package/dist/cli/commands/patterns/index-new.js.map +1 -1
- package/dist/cli/commands/patterns/index.d.ts +2 -2
- package/dist/cli/commands/patterns/index.d.ts.map +1 -1
- package/dist/cli/commands/patterns/index.js +105 -19
- package/dist/cli/commands/patterns/index.js.map +1 -1
- package/dist/cli/commands/patterns/list.d.ts.map +1 -1
- package/dist/cli/commands/patterns/list.js +2 -1
- package/dist/cli/commands/patterns/list.js.map +1 -1
- package/dist/cli/commands/patterns/search.d.ts.map +1 -1
- package/dist/cli/commands/patterns/search.js +2 -1
- package/dist/cli/commands/patterns/search.js.map +1 -1
- package/dist/cli/commands/patterns/show.d.ts.map +1 -1
- package/dist/cli/commands/patterns/show.js +7 -6
- package/dist/cli/commands/patterns/show.js.map +1 -1
- package/dist/cli/commands/patterns/stats.d.ts.map +1 -1
- package/dist/cli/commands/patterns/stats.js +5 -4
- package/dist/cli/commands/patterns/stats.js.map +1 -1
- package/dist/cli/commands/quality/baseline.d.ts.map +1 -1
- package/dist/cli/commands/quality/baseline.js +2 -2
- package/dist/cli/commands/quality/baseline.js.map +1 -1
- package/dist/cli/commands/quality/compare.d.ts.map +1 -1
- package/dist/cli/commands/quality/compare.js +1 -1
- package/dist/cli/commands/quality/compare.js.map +1 -1
- package/dist/cli/commands/quality/trends.d.ts.map +1 -1
- package/dist/cli/commands/quality/trends.js.map +1 -1
- package/dist/cli/commands/routing/index.d.ts.map +1 -1
- package/dist/cli/commands/routing/index.js +90 -35
- package/dist/cli/commands/routing/index.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +59 -33
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/workflow/cancel.d.ts +14 -7
- package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
- package/dist/cli/commands/workflow/cancel.js +23 -6
- package/dist/cli/commands/workflow/cancel.js.map +1 -1
- package/dist/cli/commands/workflow/list.d.ts.map +1 -1
- package/dist/cli/commands/workflow/list.js +46 -9
- package/dist/cli/commands/workflow/list.js.map +1 -1
- package/dist/cli/commands/workflow/pause.d.ts +1 -1
- package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
- package/dist/cli/commands/workflow/pause.js +21 -4
- package/dist/cli/commands/workflow/pause.js.map +1 -1
- package/dist/core/ArtifactWorkflow.d.ts.map +1 -1
- package/dist/core/ArtifactWorkflow.js +130 -43
- package/dist/core/ArtifactWorkflow.js.map +1 -1
- package/dist/core/MemoryManager.d.ts +5 -5
- package/dist/core/MemoryManager.d.ts.map +1 -1
- package/dist/core/MemoryManager.js +4 -3
- package/dist/core/MemoryManager.js.map +1 -1
- package/dist/core/PatternDatabaseAdapter.d.ts +1 -1
- package/dist/core/PatternDatabaseAdapter.d.ts.map +1 -1
- package/dist/core/PatternDatabaseAdapter.js +12 -12
- package/dist/core/PatternDatabaseAdapter.js.map +1 -1
- package/dist/core/coordination/BlackboardCoordination.d.ts +2 -2
- package/dist/core/coordination/BlackboardCoordination.d.ts.map +1 -1
- package/dist/core/coordination/ConsensusGating.d.ts.map +1 -1
- package/dist/core/coordination/ConsensusGating.js +50 -9
- package/dist/core/coordination/ConsensusGating.js.map +1 -1
- package/dist/core/coordination/GOAPCoordination.d.ts +1 -1
- package/dist/core/coordination/GOAPCoordination.d.ts.map +1 -1
- package/dist/core/coordination/GOAPCoordination.js +70 -8
- package/dist/core/coordination/GOAPCoordination.js.map +1 -1
- package/dist/core/coordination/OODACoordination.d.ts +10 -10
- package/dist/core/coordination/OODACoordination.d.ts.map +1 -1
- package/dist/core/coordination/OODACoordination.js +48 -9
- package/dist/core/coordination/OODACoordination.js.map +1 -1
- package/dist/core/hooks/RollbackManager.d.ts +2 -2
- package/dist/core/hooks/RollbackManager.d.ts.map +1 -1
- package/dist/core/hooks/RollbackManager.js +41 -4
- package/dist/core/hooks/RollbackManager.js.map +1 -1
- package/dist/core/hooks/VerificationHookManager.d.ts +8 -8
- package/dist/core/hooks/VerificationHookManager.d.ts.map +1 -1
- package/dist/core/hooks/VerificationHookManager.js +12 -2
- package/dist/core/hooks/VerificationHookManager.js.map +1 -1
- package/dist/core/hooks/checkers/ConfigurationChecker.d.ts +1 -1
- package/dist/core/hooks/checkers/ConfigurationChecker.d.ts.map +1 -1
- package/dist/core/hooks/checkers/ConfigurationChecker.js.map +1 -1
- package/dist/core/hooks/validators/OutputValidator.d.ts +2 -2
- package/dist/core/hooks/validators/OutputValidator.d.ts.map +1 -1
- package/dist/core/hooks/validators/QualityValidator.d.ts +1 -1
- package/dist/core/hooks/validators/QualityValidator.d.ts.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +143 -37
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +28 -25
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/VersionHistory.d.ts +5 -5
- package/dist/core/memory/VersionHistory.d.ts.map +1 -1
- package/dist/core/memory/VersionHistory.js +37 -4
- package/dist/core/memory/VersionHistory.js.map +1 -1
- package/dist/core/neural/NeuralTrainer.d.ts +12 -0
- package/dist/core/neural/NeuralTrainer.d.ts.map +1 -1
- package/dist/core/neural/NeuralTrainer.js +162 -18
- package/dist/core/neural/NeuralTrainer.js.map +1 -1
- package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -1
- package/dist/core/optimization/SwarmOptimizer.js +198 -26
- package/dist/core/optimization/SwarmOptimizer.js.map +1 -1
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts +5 -1
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -1
- package/dist/core/orchestration/WorkflowOrchestrator.js +58 -12
- package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -1
- package/dist/core/orchestration/types.d.ts +8 -8
- package/dist/core/orchestration/types.d.ts.map +1 -1
- package/dist/core/routing/AdaptiveModelRouter.d.ts +3 -3
- package/dist/core/routing/AdaptiveModelRouter.d.ts.map +1 -1
- package/dist/core/routing/AdaptiveModelRouter.js.map +1 -1
- package/dist/core/routing/CostTracker.d.ts +10 -2
- package/dist/core/routing/CostTracker.d.ts.map +1 -1
- package/dist/core/routing/CostTracker.js +36 -4
- package/dist/core/routing/CostTracker.js.map +1 -1
- package/dist/core/routing/FleetManagerIntegration.d.ts +1 -1
- package/dist/core/routing/types.d.ts +41 -4
- package/dist/core/routing/types.d.ts.map +1 -1
- package/dist/core/strategies/DefaultMemoryStrategy.d.ts.map +1 -1
- package/dist/core/strategies/DefaultMemoryStrategy.js +33 -1
- package/dist/core/strategies/DefaultMemoryStrategy.js.map +1 -1
- package/dist/learning/ImprovementLoop.d.ts +4 -4
- package/dist/learning/ImprovementLoop.d.ts.map +1 -1
- package/dist/learning/ImprovementLoop.js +108 -9
- package/dist/learning/ImprovementLoop.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts +2 -2
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +72 -30
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/PerformanceTracker.d.ts.map +1 -1
- package/dist/learning/PerformanceTracker.js +40 -4
- package/dist/learning/PerformanceTracker.js.map +1 -1
- package/dist/learning/TransferLearningManager.d.ts +1 -1
- package/dist/learning/TransferLearningManager.d.ts.map +1 -1
- package/dist/learning/TransferLearningManager.js +143 -9
- package/dist/learning/TransferLearningManager.js.map +1 -1
- package/dist/learning/metrics/AlertManager.d.ts.map +1 -1
- package/dist/learning/metrics/AlertManager.js +20 -9
- package/dist/learning/metrics/AlertManager.js.map +1 -1
- package/dist/learning/metrics/LearningMetrics.d.ts.map +1 -1
- package/dist/learning/metrics/LearningMetrics.js +21 -21
- package/dist/learning/metrics/LearningMetrics.js.map +1 -1
- package/dist/learning/metrics/MetricsCollector.d.ts.map +1 -1
- package/dist/learning/metrics/MetricsCollector.js +20 -7
- package/dist/learning/metrics/MetricsCollector.js.map +1 -1
- package/dist/learning/metrics/MetricsStore.js +6 -6
- package/dist/learning/metrics/MetricsStore.js.map +1 -1
- package/dist/mcp/handlers/base-handler.d.ts +8 -8
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
- package/dist/mcp/handlers/base-handler.js +5 -4
- package/dist/mcp/handlers/base-handler.js.map +1 -1
- package/dist/mcp/handlers/coordination/event-emit.d.ts +2 -2
- package/dist/mcp/handlers/coordination/event-emit.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/event-emit.js.map +1 -1
- package/dist/mcp/handlers/coordination/event-subscribe.d.ts +2 -2
- package/dist/mcp/handlers/coordination/event-subscribe.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/event-subscribe.js +2 -1
- package/dist/mcp/handlers/coordination/event-subscribe.js.map +1 -1
- package/dist/mcp/handlers/coordination/task-status.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/task-status.js +40 -18
- package/dist/mcp/handlers/coordination/task-status.js.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-checkpoint.d.ts +5 -5
- package/dist/mcp/handlers/coordination/workflow-checkpoint.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-checkpoint.js +64 -16
- package/dist/mcp/handlers/coordination/workflow-checkpoint.js.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-create.d.ts +3 -3
- package/dist/mcp/handlers/coordination/workflow-create.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-execute.d.ts +3 -3
- package/dist/mcp/handlers/coordination/workflow-execute.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-execute.js +2 -2
- package/dist/mcp/handlers/coordination/workflow-execute.js.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-resume.d.ts +2 -2
- package/dist/mcp/handlers/coordination/workflow-resume.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-resume.js +26 -6
- package/dist/mcp/handlers/coordination/workflow-resume.js.map +1 -1
- package/dist/mcp/handlers/learning/learning-query.d.ts.map +1 -1
- package/dist/mcp/handlers/learning/learning-query.js +1 -1
- package/dist/mcp/handlers/learning/learning-query.js.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +5 -4
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.js +6 -4
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +247 -31
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js +3 -3
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts +3 -3
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +3 -2
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/handlers/test/generate-integration-tests.d.ts +15 -3
- package/dist/mcp/handlers/test/generate-integration-tests.d.ts.map +1 -1
- package/dist/mcp/handlers/test/generate-integration-tests.js +5 -5
- package/dist/mcp/handlers/test/generate-integration-tests.js.map +1 -1
- package/dist/mcp/handlers/test/generate-unit-tests.js.map +1 -1
- package/dist/mcp/handlers/test/test-coverage-detailed.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-coverage-detailed.js +1 -1
- package/dist/mcp/handlers/test/test-coverage-detailed.js.map +1 -1
- package/dist/mcp/handlers/test/test-execute-parallel.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-execute-parallel.js +8 -6
- package/dist/mcp/handlers/test/test-execute-parallel.js.map +1 -1
- package/dist/mcp/handlers/test/test-optimize-sublinear.d.ts +8 -1
- package/dist/mcp/handlers/test/test-optimize-sublinear.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-optimize-sublinear.js +1 -1
- package/dist/mcp/handlers/test/test-optimize-sublinear.js.map +1 -1
- package/dist/mcp/handlers/test/test-report-comprehensive.d.ts +14 -2
- package/dist/mcp/handlers/test/test-report-comprehensive.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-report-comprehensive.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -10
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts +2 -6
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts.map +1 -1
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts +37 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.js +113 -53
- package/dist/reasoning/CodeSignatureGenerator.js.map +1 -1
- package/dist/reasoning/PatternExtractor.d.ts +91 -10
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -1
- package/dist/reasoning/PatternExtractor.js +104 -26
- package/dist/reasoning/PatternExtractor.js.map +1 -1
- package/dist/types/hook.types.d.ts +628 -70
- package/dist/types/hook.types.d.ts.map +1 -1
- package/dist/utils/Config.d.ts +1 -1
- package/dist/utils/Config.d.ts.map +1 -1
- package/dist/utils/Database.d.ts +187 -44
- package/dist/utils/Database.d.ts.map +1 -1
- package/dist/utils/Database.js +24 -15
- package/dist/utils/Database.js.map +1 -1
- package/dist/utils/FakerDataGenerator.d.ts +28 -4
- package/dist/utils/FakerDataGenerator.d.ts.map +1 -1
- package/dist/utils/FakerDataGenerator.js +2 -2
- package/dist/utils/FakerDataGenerator.js.map +1 -1
- package/dist/utils/Logger.d.ts +6 -6
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +5 -5
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/SecureValidation.d.ts +4 -4
- package/dist/utils/SecureValidation.d.ts.map +1 -1
- package/dist/utils/SecureValidation.js.map +1 -1
- package/dist/utils/SeededRandom.d.ts +297 -0
- package/dist/utils/SeededRandom.d.ts.map +1 -0
- package/dist/utils/SeededRandom.js +389 -0
- package/dist/utils/SeededRandom.js.map +1 -0
- package/dist/utils/TestFrameworkExecutor.d.ts.map +1 -1
- package/dist/utils/TestFrameworkExecutor.js +3 -3
- package/dist/utils/TestFrameworkExecutor.js.map +1 -1
- package/dist/utils/batch-operations.d.ts +2 -2
- package/dist/utils/batch-operations.d.ts.map +1 -1
- package/dist/utils/batch-operations.js.map +1 -1
- package/dist/utils/filtering.d.ts +1 -1
- package/dist/utils/filtering.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -42,6 +42,22 @@ const ora_1 = __importDefault(require("ora"));
|
|
|
42
42
|
const fs = __importStar(require("fs-extra"));
|
|
43
43
|
const path = __importStar(require("path"));
|
|
44
44
|
const ProcessExit_1 = require("../../utils/ProcessExit");
|
|
45
|
+
/** Type guard for ExecutionReport */
|
|
46
|
+
function isExecutionReport(data) {
|
|
47
|
+
if (typeof data !== 'object' || data === null) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const obj = data;
|
|
51
|
+
return typeof obj.timestamp === 'string' || obj.timestamp === undefined;
|
|
52
|
+
}
|
|
53
|
+
/** Type guard for CoverageData */
|
|
54
|
+
function isCoverageData(data) {
|
|
55
|
+
if (typeof data !== 'object' || data === null) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const obj = data;
|
|
59
|
+
return typeof obj.overall === 'number' || obj.overall === undefined;
|
|
60
|
+
}
|
|
45
61
|
class AnalyzeCommand {
|
|
46
62
|
static async execute(target, options) {
|
|
47
63
|
console.log(chalk_1.default.blue.bold('\nš Analyzing Test Results and Quality Metrics\n'));
|
|
@@ -84,9 +100,11 @@ class AnalyzeCommand {
|
|
|
84
100
|
await this.storeAnalysisResults(analysisResults, recommendations);
|
|
85
101
|
}
|
|
86
102
|
catch (error) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
103
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
104
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
105
|
+
console.error(chalk_1.default.red('ā Analysis failed:'), errorMessage);
|
|
106
|
+
if (options.verbose && errorStack) {
|
|
107
|
+
console.error(chalk_1.default.gray(errorStack));
|
|
90
108
|
}
|
|
91
109
|
ProcessExit_1.ProcessExit.exitIfNotTest(1);
|
|
92
110
|
}
|
|
@@ -127,12 +145,17 @@ class AnalyzeCommand {
|
|
|
127
145
|
};
|
|
128
146
|
// Load latest execution
|
|
129
147
|
const latestFile = path.join(reportsDir, executionFiles[0]);
|
|
130
|
-
|
|
148
|
+
const latestData = await fs.readJson(latestFile);
|
|
149
|
+
if (isExecutionReport(latestData)) {
|
|
150
|
+
testData.latest = latestData;
|
|
151
|
+
}
|
|
131
152
|
// Load historical data (up to 30 most recent)
|
|
132
153
|
for (const file of executionFiles.slice(0, 30)) {
|
|
133
154
|
const filePath = path.join(reportsDir, file);
|
|
134
155
|
const data = await fs.readJson(filePath);
|
|
135
|
-
|
|
156
|
+
if (isExecutionReport(data)) {
|
|
157
|
+
testData.history.push(data);
|
|
158
|
+
}
|
|
136
159
|
}
|
|
137
160
|
// Load coverage data if available
|
|
138
161
|
const coverageFiles = reportFiles.filter(file => file.startsWith('coverage-'));
|
|
@@ -140,7 +163,9 @@ class AnalyzeCommand {
|
|
|
140
163
|
const filePath = path.join(reportsDir, file);
|
|
141
164
|
if (await fs.pathExists(filePath)) {
|
|
142
165
|
const coverage = await fs.readJson(filePath);
|
|
143
|
-
|
|
166
|
+
if (isCoverageData(coverage)) {
|
|
167
|
+
testData.coverage.push(coverage);
|
|
168
|
+
}
|
|
144
169
|
}
|
|
145
170
|
}
|
|
146
171
|
return testData;
|
|
@@ -253,7 +278,7 @@ class AnalyzeCommand {
|
|
|
253
278
|
});
|
|
254
279
|
analysis.trends.passRate.push({
|
|
255
280
|
timestamp,
|
|
256
|
-
value: data.summary?.total
|
|
281
|
+
value: data.summary?.total ? (data.summary.passed / data.summary.total) * 100 : 0
|
|
257
282
|
});
|
|
258
283
|
analysis.trends.testCount.push({
|
|
259
284
|
timestamp,
|
|
@@ -270,7 +295,7 @@ class AnalyzeCommand {
|
|
|
270
295
|
analysis.predictions = this.generatePredictions(analysis.trends);
|
|
271
296
|
return analysis;
|
|
272
297
|
}
|
|
273
|
-
static async analyzeGaps(testData,
|
|
298
|
+
static async analyzeGaps(testData, _options) {
|
|
274
299
|
const analysis = {
|
|
275
300
|
type: 'gaps',
|
|
276
301
|
timestamp: new Date().toISOString(),
|
|
@@ -292,6 +317,7 @@ class AnalyzeCommand {
|
|
|
292
317
|
const quality = await this.analyzeQuality(testData, options);
|
|
293
318
|
const trends = await this.analyzeTrends(testData, options);
|
|
294
319
|
const gaps = await this.analyzeGaps(testData, options);
|
|
320
|
+
const analyses = [coverage, quality, trends, gaps];
|
|
295
321
|
return {
|
|
296
322
|
type: 'comprehensive',
|
|
297
323
|
timestamp: new Date().toISOString(),
|
|
@@ -300,9 +326,9 @@ class AnalyzeCommand {
|
|
|
300
326
|
trends,
|
|
301
327
|
gaps,
|
|
302
328
|
summary: {
|
|
303
|
-
overallScore: this.calculateOverallScore(
|
|
304
|
-
criticalIssues: this.identifyCriticalIssues(
|
|
305
|
-
topRecommendations: this.prioritizeRecommendations(
|
|
329
|
+
overallScore: this.calculateOverallScore(analyses),
|
|
330
|
+
criticalIssues: this.identifyCriticalIssues(analyses),
|
|
331
|
+
topRecommendations: this.prioritizeRecommendations(analyses)
|
|
306
332
|
}
|
|
307
333
|
};
|
|
308
334
|
}
|
|
@@ -369,7 +395,7 @@ class AnalyzeCommand {
|
|
|
369
395
|
if (!latest)
|
|
370
396
|
return gaps;
|
|
371
397
|
// Check for quality issues
|
|
372
|
-
if (latest.summary?.failed > 0) {
|
|
398
|
+
if (latest.summary?.failed && latest.summary.failed > 0) {
|
|
373
399
|
gaps.push({
|
|
374
400
|
type: 'failing_tests',
|
|
375
401
|
count: latest.summary.failed,
|
|
@@ -378,7 +404,7 @@ class AnalyzeCommand {
|
|
|
378
404
|
suggestion: 'Fix failing tests to improve quality'
|
|
379
405
|
});
|
|
380
406
|
}
|
|
381
|
-
if (latest.errors
|
|
407
|
+
if (latest.errors && latest.errors.length > 0) {
|
|
382
408
|
gaps.push({
|
|
383
409
|
type: 'test_errors',
|
|
384
410
|
count: latest.errors.length,
|
|
@@ -396,7 +422,9 @@ class AnalyzeCommand {
|
|
|
396
422
|
if (index === 0)
|
|
397
423
|
return true;
|
|
398
424
|
const prev = reliabilityData[index - 1];
|
|
399
|
-
const
|
|
425
|
+
const currentPassRate = data.total > 0 ? data.passed / data.total : 0;
|
|
426
|
+
const prevPassRate = prev.total > 0 ? prev.passed / prev.total : 0;
|
|
427
|
+
const passRateDiff = Math.abs(currentPassRate - prevPassRate);
|
|
400
428
|
return passRateDiff < 0.1; // Less than 10% variation
|
|
401
429
|
});
|
|
402
430
|
return (consistentResults.length / reliabilityData.length) * 100;
|
|
@@ -423,11 +451,11 @@ class AnalyzeCommand {
|
|
|
423
451
|
};
|
|
424
452
|
const score = metrics.passRate * weights.passRate +
|
|
425
453
|
metrics.testReliability * weights.testReliability +
|
|
426
|
-
|
|
454
|
+
0 * weights.coverage + // coverage is not part of QualityMetrics
|
|
427
455
|
(100 - metrics.flakyTests) * weights.flakyTests;
|
|
428
456
|
return Math.max(0, Math.min(100, score));
|
|
429
457
|
}
|
|
430
|
-
static async identifyQualityIssues(
|
|
458
|
+
static async identifyQualityIssues(_testData, metrics) {
|
|
431
459
|
const issues = [];
|
|
432
460
|
if (metrics.passRate < 90) {
|
|
433
461
|
issues.push({
|
|
@@ -497,8 +525,9 @@ class AnalyzeCommand {
|
|
|
497
525
|
return { direction: 'stable', change: 0 };
|
|
498
526
|
}
|
|
499
527
|
const values = dataPoints.map(point => point.value);
|
|
500
|
-
const
|
|
501
|
-
const
|
|
528
|
+
const halfLength = Math.floor(values.length / 2);
|
|
529
|
+
const recentAvg = values.slice(0, halfLength).reduce((sum, val) => sum + val, 0) / halfLength;
|
|
530
|
+
const olderAvg = values.slice(halfLength).reduce((sum, val) => sum + val, 0) / (values.length - halfLength);
|
|
502
531
|
const change = recentAvg - olderAvg;
|
|
503
532
|
const direction = Math.abs(change) < 1 ? 'stable' : change > 0 ? 'improving' : 'declining';
|
|
504
533
|
return { direction, change };
|
|
@@ -508,7 +537,8 @@ class AnalyzeCommand {
|
|
|
508
537
|
// Simple linear prediction for coverage
|
|
509
538
|
const coverageTrend = this.calculateTrend(trends.coverage);
|
|
510
539
|
if (coverageTrend.direction !== 'stable') {
|
|
511
|
-
const
|
|
540
|
+
const currentValue = trends.coverage[0]?.value ?? 0;
|
|
541
|
+
const predicted = currentValue + (coverageTrend.change * 2);
|
|
512
542
|
predictions.push({
|
|
513
543
|
type: 'coverage',
|
|
514
544
|
timeframe: '2 cycles',
|
|
@@ -520,47 +550,92 @@ class AnalyzeCommand {
|
|
|
520
550
|
return predictions;
|
|
521
551
|
}
|
|
522
552
|
static calculateOverallScore(analyses) {
|
|
523
|
-
const scores =
|
|
524
|
-
|
|
525
|
-
|
|
553
|
+
const scores = [];
|
|
554
|
+
for (const analysis of analyses) {
|
|
555
|
+
if ('metrics' in analysis && analysis.metrics && 'qualityScore' in analysis.metrics) {
|
|
556
|
+
scores.push(analysis.metrics.qualityScore);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
526
559
|
return scores.length > 0
|
|
527
560
|
? scores.reduce((sum, score) => sum + score, 0) / scores.length
|
|
528
561
|
: 0;
|
|
529
562
|
}
|
|
530
563
|
static identifyCriticalIssues(analyses) {
|
|
531
564
|
const criticalIssues = [];
|
|
532
|
-
|
|
533
|
-
|
|
565
|
+
for (const analysis of analyses) {
|
|
566
|
+
// Handle QualityAnalysis issues
|
|
567
|
+
if (analysis.type === 'quality' && analysis.issues) {
|
|
534
568
|
const critical = analysis.issues.filter((issue) => issue.severity === 'high');
|
|
535
569
|
criticalIssues.push(...critical);
|
|
536
570
|
}
|
|
537
|
-
|
|
571
|
+
// Handle CoverageAnalysis gaps
|
|
572
|
+
if (analysis.type === 'coverage' && analysis.gaps) {
|
|
538
573
|
const critical = analysis.gaps.filter((gap) => gap.severity === 'high');
|
|
539
574
|
criticalIssues.push(...critical);
|
|
540
575
|
}
|
|
541
|
-
|
|
576
|
+
// Handle GapsAnalysis - all gap types
|
|
577
|
+
if (analysis.type === 'gaps') {
|
|
578
|
+
const coverageCritical = analysis.coverageGaps.filter((gap) => gap.severity === 'high');
|
|
579
|
+
const testingCritical = analysis.testingGaps.filter((gap) => gap.severity === 'high');
|
|
580
|
+
const qualityCritical = analysis.qualityGaps.filter((gap) => gap.severity === 'high');
|
|
581
|
+
criticalIssues.push(...coverageCritical, ...testingCritical, ...qualityCritical);
|
|
582
|
+
}
|
|
583
|
+
// Handle ComprehensiveAnalysis - nested issues and gaps
|
|
584
|
+
if (analysis.type === 'comprehensive') {
|
|
585
|
+
if (analysis.quality?.issues) {
|
|
586
|
+
const critical = analysis.quality.issues.filter((issue) => issue.severity === 'high');
|
|
587
|
+
criticalIssues.push(...critical);
|
|
588
|
+
}
|
|
589
|
+
if (analysis.coverage?.gaps) {
|
|
590
|
+
const critical = analysis.coverage.gaps.filter((gap) => gap.severity === 'high');
|
|
591
|
+
criticalIssues.push(...critical);
|
|
592
|
+
}
|
|
593
|
+
if (analysis.gaps) {
|
|
594
|
+
const coverageCritical = analysis.gaps.coverageGaps.filter((gap) => gap.severity === 'high');
|
|
595
|
+
const qualityCritical = analysis.gaps.qualityGaps.filter((gap) => gap.severity === 'high');
|
|
596
|
+
criticalIssues.push(...coverageCritical, ...qualityCritical);
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
542
600
|
return criticalIssues;
|
|
543
601
|
}
|
|
544
602
|
static prioritizeRecommendations(analyses) {
|
|
545
603
|
const allRecommendations = [];
|
|
546
|
-
|
|
547
|
-
if (analysis.recommendations) {
|
|
604
|
+
for (const analysis of analyses) {
|
|
605
|
+
if ('recommendations' in analysis && analysis.recommendations) {
|
|
548
606
|
allRecommendations.push(...analysis.recommendations);
|
|
549
607
|
}
|
|
550
|
-
}
|
|
608
|
+
}
|
|
551
609
|
// Sort by priority
|
|
610
|
+
const priorityOrder = { 'high': 3, 'medium': 2, 'low': 1 };
|
|
552
611
|
return allRecommendations
|
|
553
612
|
.sort((a, b) => {
|
|
554
|
-
const priorityOrder = { 'high': 3, 'medium': 2, 'low': 1 };
|
|
555
613
|
return (priorityOrder[b.priority] || 0) - (priorityOrder[a.priority] || 0);
|
|
556
614
|
})
|
|
557
615
|
.slice(0, 5); // Top 5 recommendations
|
|
558
616
|
}
|
|
559
|
-
static async generateRecommendations(analysis,
|
|
617
|
+
static async generateRecommendations(analysis, _options) {
|
|
560
618
|
const recommendations = [];
|
|
561
619
|
// Coverage-specific recommendations
|
|
562
|
-
if (analysis.type === 'coverage'
|
|
563
|
-
const coverageData = analysis.
|
|
620
|
+
if (analysis.type === 'coverage') {
|
|
621
|
+
const coverageData = analysis.current;
|
|
622
|
+
if (coverageData.overall < 80) {
|
|
623
|
+
recommendations.push({
|
|
624
|
+
type: 'improve_coverage',
|
|
625
|
+
priority: 'high',
|
|
626
|
+
title: 'Improve Test Coverage',
|
|
627
|
+
description: `Current coverage (${coverageData.overall.toFixed(1)}%) is below recommended 80%`,
|
|
628
|
+
actions: [
|
|
629
|
+
'Run: agentic-qe generate tests --coverage-target 85',
|
|
630
|
+
'Focus on uncovered code paths',
|
|
631
|
+
'Add integration tests for complex flows'
|
|
632
|
+
],
|
|
633
|
+
estimatedImpact: 'High'
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
else if (analysis.type === 'comprehensive' && analysis.coverage) {
|
|
638
|
+
const coverageData = analysis.coverage.current;
|
|
564
639
|
if (coverageData.overall < 80) {
|
|
565
640
|
recommendations.push({
|
|
566
641
|
type: 'improve_coverage',
|
|
@@ -577,14 +652,29 @@ class AnalyzeCommand {
|
|
|
577
652
|
}
|
|
578
653
|
}
|
|
579
654
|
// Quality-specific recommendations
|
|
580
|
-
if (analysis.type === 'quality'
|
|
581
|
-
|
|
582
|
-
if (qualityData.metrics?.flakyTests > 0) {
|
|
655
|
+
if (analysis.type === 'quality') {
|
|
656
|
+
if (analysis.metrics.flakyTests > 0) {
|
|
583
657
|
recommendations.push({
|
|
584
658
|
type: 'fix_flaky_tests',
|
|
585
659
|
priority: 'medium',
|
|
586
660
|
title: 'Address Flaky Tests',
|
|
587
|
-
description: `${
|
|
661
|
+
description: `${analysis.metrics.flakyTests} potentially flaky tests detected`,
|
|
662
|
+
actions: [
|
|
663
|
+
'Review test execution logs',
|
|
664
|
+
'Add proper test isolation',
|
|
665
|
+
'Check for timing dependencies'
|
|
666
|
+
],
|
|
667
|
+
estimatedImpact: 'Medium'
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
else if (analysis.type === 'comprehensive' && analysis.quality) {
|
|
672
|
+
if (analysis.quality.metrics.flakyTests > 0) {
|
|
673
|
+
recommendations.push({
|
|
674
|
+
type: 'fix_flaky_tests',
|
|
675
|
+
priority: 'medium',
|
|
676
|
+
title: 'Address Flaky Tests',
|
|
677
|
+
description: `${analysis.quality.metrics.flakyTests} potentially flaky tests detected`,
|
|
588
678
|
actions: [
|
|
589
679
|
'Review test execution logs',
|
|
590
680
|
'Add proper test isolation',
|
|
@@ -595,8 +685,8 @@ class AnalyzeCommand {
|
|
|
595
685
|
}
|
|
596
686
|
}
|
|
597
687
|
// Gap-specific recommendations
|
|
598
|
-
if (analysis.gaps) {
|
|
599
|
-
analysis.gaps
|
|
688
|
+
if (analysis.type === 'coverage' && analysis.gaps) {
|
|
689
|
+
for (const gap of analysis.gaps) {
|
|
600
690
|
if (gap.severity === 'high') {
|
|
601
691
|
recommendations.push({
|
|
602
692
|
type: 'address_gap',
|
|
@@ -607,7 +697,22 @@ class AnalyzeCommand {
|
|
|
607
697
|
estimatedImpact: 'High'
|
|
608
698
|
});
|
|
609
699
|
}
|
|
610
|
-
}
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
else if (analysis.type === 'gaps') {
|
|
703
|
+
const allGaps = [...analysis.coverageGaps, ...analysis.testingGaps, ...analysis.qualityGaps];
|
|
704
|
+
for (const gap of allGaps) {
|
|
705
|
+
if (gap.severity === 'high') {
|
|
706
|
+
recommendations.push({
|
|
707
|
+
type: 'address_gap',
|
|
708
|
+
priority: 'high',
|
|
709
|
+
title: `Address ${gap.type}`,
|
|
710
|
+
description: gap.description,
|
|
711
|
+
actions: [gap.suggestion],
|
|
712
|
+
estimatedImpact: 'High'
|
|
713
|
+
});
|
|
714
|
+
}
|
|
715
|
+
}
|
|
611
716
|
}
|
|
612
717
|
return recommendations;
|
|
613
718
|
}
|
|
@@ -636,14 +741,31 @@ class AnalyzeCommand {
|
|
|
636
741
|
await fs.writeFile(htmlFile, htmlContent);
|
|
637
742
|
}
|
|
638
743
|
// Generate CSV for trends
|
|
639
|
-
if (options.format === 'csv' && analysis.trends) {
|
|
640
|
-
const
|
|
641
|
-
|
|
642
|
-
|
|
744
|
+
if (options.format === 'csv' && 'trends' in analysis && analysis.trends) {
|
|
745
|
+
const trendsData = analysis.type === 'trends' ? analysis.trends : undefined;
|
|
746
|
+
if (trendsData) {
|
|
747
|
+
const csvContent = this.generateCsvReport(trendsData);
|
|
748
|
+
const csvFile = `${reportsDir}/trends-${timestamp}.csv`;
|
|
749
|
+
await fs.writeFile(csvFile, csvContent);
|
|
750
|
+
}
|
|
643
751
|
}
|
|
644
752
|
}
|
|
645
753
|
static generateHtmlReport(reportData) {
|
|
646
754
|
const { analysis, recommendations } = reportData;
|
|
755
|
+
// Extract current metrics if available
|
|
756
|
+
const hasCurrent = analysis.type === 'coverage' || (analysis.type === 'comprehensive' && analysis.coverage);
|
|
757
|
+
const currentOverall = analysis.type === 'coverage'
|
|
758
|
+
? analysis.current.overall
|
|
759
|
+
: analysis.type === 'comprehensive' && analysis.coverage
|
|
760
|
+
? analysis.coverage.current.overall
|
|
761
|
+
: 0;
|
|
762
|
+
// Extract metrics if available
|
|
763
|
+
const hasMetrics = analysis.type === 'quality' || (analysis.type === 'comprehensive' && analysis.quality);
|
|
764
|
+
const metricsData = analysis.type === 'quality'
|
|
765
|
+
? analysis.metrics
|
|
766
|
+
: analysis.type === 'comprehensive' && analysis.quality
|
|
767
|
+
? analysis.quality.metrics
|
|
768
|
+
: null;
|
|
647
769
|
return `<!DOCTYPE html>
|
|
648
770
|
<html>
|
|
649
771
|
<head>
|
|
@@ -666,13 +788,13 @@ class AnalyzeCommand {
|
|
|
666
788
|
<p>Type: ${analysis.type}</p>
|
|
667
789
|
</div>
|
|
668
790
|
|
|
669
|
-
${
|
|
791
|
+
${hasCurrent ? `
|
|
670
792
|
<div class="section">
|
|
671
793
|
<h2>Current Metrics</h2>
|
|
672
|
-
<div class="metric">Coverage: ${
|
|
673
|
-
${
|
|
674
|
-
<div class="metric">Pass Rate: ${
|
|
675
|
-
<div class="metric">Quality Score: ${
|
|
794
|
+
<div class="metric">Coverage: ${currentOverall.toFixed(1)}%</div>
|
|
795
|
+
${hasMetrics && metricsData ? `
|
|
796
|
+
<div class="metric">Pass Rate: ${metricsData.passRate.toFixed(1)}%</div>
|
|
797
|
+
<div class="metric">Quality Score: ${metricsData.qualityScore.toFixed(1)}</div>
|
|
676
798
|
` : ''}
|
|
677
799
|
</div>
|
|
678
800
|
` : ''}
|
|
@@ -682,8 +804,8 @@ class AnalyzeCommand {
|
|
|
682
804
|
<h2>Recommendations</h2>
|
|
683
805
|
${recommendations.map((rec) => `
|
|
684
806
|
<div class="recommendation">
|
|
685
|
-
<h3 class="${rec.priority}">${rec.title}</h3>
|
|
686
|
-
<p>${rec.description}</p>
|
|
807
|
+
<h3 class="${rec.priority}">${rec.title || rec.type}</h3>
|
|
808
|
+
<p>${rec.description || rec.message || ''}</p>
|
|
687
809
|
<ul>
|
|
688
810
|
${rec.actions.map((action) => `<li>${action}</li>`).join('')}
|
|
689
811
|
</ul>
|
|
@@ -701,13 +823,13 @@ class AnalyzeCommand {
|
|
|
701
823
|
}
|
|
702
824
|
static generateCsvReport(trends) {
|
|
703
825
|
let csv = 'Timestamp,Coverage,PassRate,TestCount,ExecutionTime\n';
|
|
704
|
-
const maxLength = Math.max(trends.coverage
|
|
826
|
+
const maxLength = Math.max(trends.coverage.length, trends.passRate.length, trends.testCount.length, trends.executionTime.length);
|
|
705
827
|
for (let i = 0; i < maxLength; i++) {
|
|
706
|
-
const timestamp = trends.coverage
|
|
707
|
-
const coverage = trends.coverage
|
|
708
|
-
const passRate = trends.passRate
|
|
709
|
-
const testCount = trends.testCount
|
|
710
|
-
const executionTime = trends.executionTime
|
|
828
|
+
const timestamp = trends.coverage[i]?.timestamp || '';
|
|
829
|
+
const coverage = trends.coverage[i]?.value ?? '';
|
|
830
|
+
const passRate = trends.passRate[i]?.value ?? '';
|
|
831
|
+
const testCount = trends.testCount[i]?.value ?? '';
|
|
832
|
+
const executionTime = trends.executionTime[i]?.value ?? '';
|
|
711
833
|
csv += `${timestamp},${coverage},${passRate},${testCount},${executionTime}\n`;
|
|
712
834
|
}
|
|
713
835
|
return csv;
|
|
@@ -717,18 +839,36 @@ class AnalyzeCommand {
|
|
|
717
839
|
console.log(chalk_1.default.gray(` Type: ${analysis.type}`));
|
|
718
840
|
console.log(chalk_1.default.gray(` Timestamp: ${analysis.timestamp}`));
|
|
719
841
|
// Display key metrics based on analysis type
|
|
720
|
-
if (analysis.
|
|
842
|
+
if (analysis.type === 'coverage') {
|
|
721
843
|
console.log(chalk_1.default.gray(` Coverage: ${analysis.current.overall.toFixed(1)}%`));
|
|
844
|
+
if (analysis.trends.direction) {
|
|
845
|
+
console.log(chalk_1.default.gray(` Trend: ${analysis.trends.direction}`));
|
|
846
|
+
}
|
|
722
847
|
}
|
|
723
|
-
if (analysis.
|
|
848
|
+
else if (analysis.type === 'quality') {
|
|
724
849
|
console.log(chalk_1.default.gray(` Pass Rate: ${analysis.metrics.passRate.toFixed(1)}%`));
|
|
725
850
|
console.log(chalk_1.default.gray(` Quality Score: ${analysis.metrics.qualityScore.toFixed(1)}`));
|
|
851
|
+
if (analysis.trends.direction) {
|
|
852
|
+
console.log(chalk_1.default.gray(` Trend: ${analysis.trends.direction}`));
|
|
853
|
+
}
|
|
726
854
|
}
|
|
727
|
-
if (analysis.
|
|
728
|
-
|
|
855
|
+
else if (analysis.type === 'comprehensive') {
|
|
856
|
+
if (analysis.coverage) {
|
|
857
|
+
console.log(chalk_1.default.gray(` Coverage: ${analysis.coverage.current.overall.toFixed(1)}%`));
|
|
858
|
+
}
|
|
859
|
+
if (analysis.quality) {
|
|
860
|
+
console.log(chalk_1.default.gray(` Pass Rate: ${analysis.quality.metrics.passRate.toFixed(1)}%`));
|
|
861
|
+
console.log(chalk_1.default.gray(` Quality Score: ${analysis.quality.metrics.qualityScore.toFixed(1)}`));
|
|
862
|
+
}
|
|
729
863
|
}
|
|
730
864
|
// Display critical issues
|
|
731
|
-
|
|
865
|
+
let criticalIssues = [];
|
|
866
|
+
if (analysis.type === 'quality' && analysis.issues) {
|
|
867
|
+
criticalIssues = analysis.issues.filter((issue) => issue.severity === 'high');
|
|
868
|
+
}
|
|
869
|
+
else if (analysis.type === 'comprehensive' && analysis.quality?.issues) {
|
|
870
|
+
criticalIssues = analysis.quality.issues.filter((issue) => issue.severity === 'high');
|
|
871
|
+
}
|
|
732
872
|
if (criticalIssues.length > 0) {
|
|
733
873
|
console.log(chalk_1.default.red('\nšØ Critical Issues:'));
|
|
734
874
|
criticalIssues.forEach((issue) => {
|
|
@@ -739,8 +879,8 @@ class AnalyzeCommand {
|
|
|
739
879
|
if (recommendations.length > 0) {
|
|
740
880
|
console.log(chalk_1.default.yellow('\nš” Top Recommendations:'));
|
|
741
881
|
recommendations.slice(0, 3).forEach((rec, index) => {
|
|
742
|
-
console.log(chalk_1.default.gray(` ${index + 1}. ${rec.title}`));
|
|
743
|
-
console.log(chalk_1.default.gray(` ${rec.description}`));
|
|
882
|
+
console.log(chalk_1.default.gray(` ${index + 1}. ${rec.title || rec.type}`));
|
|
883
|
+
console.log(chalk_1.default.gray(` ${rec.description || rec.message || ''}`));
|
|
744
884
|
});
|
|
745
885
|
}
|
|
746
886
|
console.log(chalk_1.default.yellow('\nš Reports Generated:'));
|
|
@@ -754,11 +894,25 @@ class AnalyzeCommand {
|
|
|
754
894
|
console.log(chalk_1.default.gray(' 3. Monitor trends over time for continuous improvement'));
|
|
755
895
|
}
|
|
756
896
|
static async storeAnalysisResults(analysis, recommendations) {
|
|
897
|
+
// Extract metrics or current values depending on analysis type
|
|
898
|
+
let metricsOrCurrent = null;
|
|
899
|
+
let issuesCount = 0;
|
|
900
|
+
if (analysis.type === 'coverage') {
|
|
901
|
+
metricsOrCurrent = analysis.current;
|
|
902
|
+
}
|
|
903
|
+
else if (analysis.type === 'quality') {
|
|
904
|
+
metricsOrCurrent = analysis.metrics;
|
|
905
|
+
issuesCount = analysis.issues.length;
|
|
906
|
+
}
|
|
907
|
+
else if (analysis.type === 'comprehensive') {
|
|
908
|
+
metricsOrCurrent = analysis.quality?.metrics || analysis.coverage?.current || null;
|
|
909
|
+
issuesCount = analysis.quality?.issues?.length || 0;
|
|
910
|
+
}
|
|
757
911
|
const summary = {
|
|
758
912
|
type: analysis.type,
|
|
759
913
|
timestamp: analysis.timestamp,
|
|
760
|
-
metrics:
|
|
761
|
-
issues:
|
|
914
|
+
metrics: metricsOrCurrent,
|
|
915
|
+
issues: issuesCount,
|
|
762
916
|
recommendations: recommendations.length,
|
|
763
917
|
status: 'completed'
|
|
764
918
|
};
|
|
@@ -767,6 +921,7 @@ class AnalyzeCommand {
|
|
|
767
921
|
npx claude-flow@alpha memory store --key "agentic-qe/analysis/latest" --value '${JSON.stringify(summary)}'
|
|
768
922
|
npx claude-flow@alpha hooks notify --message "Analysis completed: ${analysis.type} analysis with ${recommendations.length} recommendations"
|
|
769
923
|
`;
|
|
924
|
+
await fs.ensureDir('.agentic-qe/scripts');
|
|
770
925
|
await fs.writeFile('.agentic-qe/scripts/store-analysis-results.sh', coordinationScript);
|
|
771
926
|
await fs.chmod('.agentic-qe/scripts/store-analysis-results.sh', '755');
|
|
772
927
|
}
|