agentic-qe 1.0.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/.claude/agents/analysis/code-analyzer.md +209 -0
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +180 -0
- package/.claude/agents/architecture/system-design/arch-system-design.md +156 -0
- package/.claude/agents/base-template-generator.md +42 -0
- package/.claude/agents/consensus/byzantine-coordinator.md +63 -0
- package/.claude/agents/consensus/crdt-synchronizer.md +997 -0
- package/.claude/agents/consensus/gossip-coordinator.md +63 -0
- package/.claude/agents/consensus/performance-benchmarker.md +851 -0
- package/.claude/agents/consensus/quorum-manager.md +823 -0
- package/.claude/agents/consensus/raft-manager.md +63 -0
- package/.claude/agents/consensus/security-manager.md +622 -0
- package/.claude/agents/core/coder.md +266 -0
- package/.claude/agents/core/planner.md +168 -0
- package/.claude/agents/core/researcher.md +190 -0
- package/.claude/agents/core/reviewer.md +326 -0
- package/.claude/agents/core/tester.md +319 -0
- package/.claude/agents/data/ml/data-ml-model.md +193 -0
- package/.claude/agents/development/backend/dev-backend-api.md +142 -0
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +164 -0
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +174 -0
- package/.claude/agents/flow-nexus/app-store.md +88 -0
- package/.claude/agents/flow-nexus/authentication.md +69 -0
- package/.claude/agents/flow-nexus/challenges.md +81 -0
- package/.claude/agents/flow-nexus/neural-network.md +88 -0
- package/.claude/agents/flow-nexus/payments.md +83 -0
- package/.claude/agents/flow-nexus/sandbox.md +76 -0
- package/.claude/agents/flow-nexus/swarm.md +76 -0
- package/.claude/agents/flow-nexus/user-tools.md +96 -0
- package/.claude/agents/flow-nexus/workflow.md +84 -0
- package/.claude/agents/github/code-review-swarm.md +538 -0
- package/.claude/agents/github/github-modes.md +173 -0
- package/.claude/agents/github/issue-tracker.md +319 -0
- package/.claude/agents/github/multi-repo-swarm.md +553 -0
- package/.claude/agents/github/pr-manager.md +191 -0
- package/.claude/agents/github/project-board-sync.md +509 -0
- package/.claude/agents/github/release-manager.md +367 -0
- package/.claude/agents/github/release-swarm.md +583 -0
- package/.claude/agents/github/repo-architect.md +398 -0
- package/.claude/agents/github/swarm-issue.md +573 -0
- package/.claude/agents/github/swarm-pr.md +428 -0
- package/.claude/agents/github/sync-coordinator.md +452 -0
- package/.claude/agents/github/workflow-automation.md +635 -0
- package/.claude/agents/goal/code-goal-planner.md +446 -0
- package/.claude/agents/goal/goal-planner.md +168 -0
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +130 -0
- package/.claude/agents/hive-mind/queen-coordinator.md +203 -0
- package/.claude/agents/hive-mind/scout-explorer.md +242 -0
- package/.claude/agents/hive-mind/swarm-memory-manager.md +193 -0
- package/.claude/agents/hive-mind/worker-specialist.md +217 -0
- package/.claude/agents/neural/safla-neural.md +74 -0
- package/.claude/agents/optimization/benchmark-suite.md +665 -0
- package/.claude/agents/optimization/load-balancer.md +431 -0
- package/.claude/agents/optimization/performance-monitor.md +672 -0
- package/.claude/agents/optimization/resource-allocator.md +674 -0
- package/.claude/agents/optimization/topology-optimizer.md +808 -0
- package/.claude/agents/qe-api-contract-validator.md +1088 -0
- package/.claude/agents/qe-chaos-engineer.md +736 -0
- package/.claude/agents/qe-coverage-analyzer.md +282 -0
- package/.claude/agents/qe-deployment-readiness.md +1109 -0
- package/.claude/agents/qe-flaky-test-hunter.md +1121 -0
- package/.claude/agents/qe-fleet-commander.md +641 -0
- package/.claude/agents/qe-performance-tester.md +354 -0
- package/.claude/agents/qe-production-intelligence.md +1162 -0
- package/.claude/agents/qe-quality-gate.md +294 -0
- package/.claude/agents/qe-regression-risk-analyzer.md +947 -0
- package/.claude/agents/qe-requirements-validator.md +691 -0
- package/.claude/agents/qe-security-scanner.md +430 -0
- package/.claude/agents/qe-test-data-architect.md +1007 -0
- package/.claude/agents/qe-test-executor.md +365 -0
- package/.claude/agents/qe-test-generator.md +332 -0
- package/.claude/agents/qe-visual-tester.md +754 -0
- package/.claude/agents/sparc/architecture.md +472 -0
- package/.claude/agents/sparc/pseudocode.md +318 -0
- package/.claude/agents/sparc/refinement.md +525 -0
- package/.claude/agents/sparc/specification.md +276 -0
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +226 -0
- package/.claude/agents/swarm/adaptive-coordinator.md +396 -0
- package/.claude/agents/swarm/hierarchical-coordinator.md +327 -0
- package/.claude/agents/swarm/mesh-coordinator.md +392 -0
- package/.claude/agents/templates/automation-smart-agent.md +205 -0
- package/.claude/agents/templates/coordinator-swarm-init.md +105 -0
- package/.claude/agents/templates/github-pr-manager.md +177 -0
- package/.claude/agents/templates/implementer-sparc-coder.md +259 -0
- package/.claude/agents/templates/memory-coordinator.md +187 -0
- package/.claude/agents/templates/migration-plan.md +746 -0
- package/.claude/agents/templates/orchestrator-task.md +139 -0
- package/.claude/agents/templates/performance-analyzer.md +199 -0
- package/.claude/agents/templates/sparc-coordinator.md +183 -0
- package/.claude/agents/testing/unit/tdd-london-swarm.md +244 -0
- package/.claude/agents/testing/validation/production-validator.md +395 -0
- package/.claude/aqe-fleet.json +47 -0
- package/.claude/commands/README.md +106 -0
- package/.claude/commands/agents/README.md +10 -0
- package/.claude/commands/agents/agent-capabilities.md +21 -0
- package/.claude/commands/agents/agent-coordination.md +28 -0
- package/.claude/commands/agents/agent-spawning.md +28 -0
- package/.claude/commands/agents/agent-types.md +26 -0
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +54 -0
- package/.claude/commands/analysis/README.md +9 -0
- package/.claude/commands/analysis/bottleneck-detect.md +162 -0
- package/.claude/commands/analysis/performance-bottlenecks.md +59 -0
- package/.claude/commands/analysis/performance-report.md +25 -0
- package/.claude/commands/analysis/token-efficiency.md +45 -0
- package/.claude/commands/analysis/token-usage.md +25 -0
- package/.claude/commands/aqe-analyze.md +344 -0
- package/.claude/commands/aqe-benchmark.md +466 -0
- package/.claude/commands/aqe-chaos.md +443 -0
- package/.claude/commands/aqe-execute.md +322 -0
- package/.claude/commands/aqe-fleet-status.md +431 -0
- package/.claude/commands/aqe-generate.md +301 -0
- package/.claude/commands/aqe-optimize.md +361 -0
- package/.claude/commands/aqe-report.md +411 -0
- package/.claude/commands/automation/README.md +9 -0
- package/.claude/commands/automation/auto-agent.md +122 -0
- package/.claude/commands/automation/self-healing.md +106 -0
- package/.claude/commands/automation/session-memory.md +90 -0
- package/.claude/commands/automation/smart-agents.md +73 -0
- package/.claude/commands/automation/smart-spawn.md +25 -0
- package/.claude/commands/automation/workflow-select.md +25 -0
- package/.claude/commands/coordination/README.md +9 -0
- package/.claude/commands/coordination/agent-spawn.md +25 -0
- package/.claude/commands/coordination/init.md +44 -0
- package/.claude/commands/coordination/orchestrate.md +43 -0
- package/.claude/commands/coordination/spawn.md +45 -0
- package/.claude/commands/coordination/swarm-init.md +85 -0
- package/.claude/commands/coordination/task-orchestrate.md +25 -0
- package/.claude/commands/flow-nexus/app-store.md +124 -0
- package/.claude/commands/flow-nexus/challenges.md +120 -0
- package/.claude/commands/flow-nexus/login-registration.md +65 -0
- package/.claude/commands/flow-nexus/neural-network.md +134 -0
- package/.claude/commands/flow-nexus/payments.md +116 -0
- package/.claude/commands/flow-nexus/sandbox.md +83 -0
- package/.claude/commands/flow-nexus/swarm.md +87 -0
- package/.claude/commands/flow-nexus/user-tools.md +152 -0
- package/.claude/commands/flow-nexus/workflow.md +115 -0
- package/.claude/commands/github/README.md +11 -0
- package/.claude/commands/github/code-review-swarm.md +514 -0
- package/.claude/commands/github/code-review.md +25 -0
- package/.claude/commands/github/github-modes.md +147 -0
- package/.claude/commands/github/github-swarm.md +121 -0
- package/.claude/commands/github/issue-tracker.md +292 -0
- package/.claude/commands/github/issue-triage.md +25 -0
- package/.claude/commands/github/multi-repo-swarm.md +519 -0
- package/.claude/commands/github/pr-enhance.md +26 -0
- package/.claude/commands/github/pr-manager.md +170 -0
- package/.claude/commands/github/project-board-sync.md +471 -0
- package/.claude/commands/github/release-manager.md +338 -0
- package/.claude/commands/github/release-swarm.md +544 -0
- package/.claude/commands/github/repo-analyze.md +25 -0
- package/.claude/commands/github/repo-architect.md +367 -0
- package/.claude/commands/github/swarm-issue.md +482 -0
- package/.claude/commands/github/swarm-pr.md +285 -0
- package/.claude/commands/github/sync-coordinator.md +301 -0
- package/.claude/commands/github/workflow-automation.md +442 -0
- package/.claude/commands/hive-mind/README.md +17 -0
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -0
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -0
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -0
- package/.claude/commands/hive-mind/hive-mind.md +27 -0
- package/.claude/commands/hooks/README.md +11 -0
- package/.claude/commands/hooks/overview.md +132 -0
- package/.claude/commands/hooks/post-edit.md +117 -0
- package/.claude/commands/hooks/post-task.md +112 -0
- package/.claude/commands/hooks/pre-edit.md +113 -0
- package/.claude/commands/hooks/pre-task.md +111 -0
- package/.claude/commands/hooks/session-end.md +118 -0
- package/.claude/commands/hooks/setup.md +103 -0
- package/.claude/commands/memory/README.md +9 -0
- package/.claude/commands/memory/memory-persist.md +25 -0
- package/.claude/commands/memory/memory-search.md +25 -0
- package/.claude/commands/memory/memory-usage.md +25 -0
- package/.claude/commands/memory/neural.md +47 -0
- package/.claude/commands/memory/usage.md +46 -0
- package/.claude/commands/monitoring/README.md +9 -0
- package/.claude/commands/monitoring/agent-metrics.md +25 -0
- package/.claude/commands/monitoring/agents.md +44 -0
- package/.claude/commands/monitoring/real-time-view.md +25 -0
- package/.claude/commands/monitoring/status.md +46 -0
- package/.claude/commands/monitoring/swarm-monitor.md +25 -0
- package/.claude/commands/optimization/README.md +9 -0
- package/.claude/commands/optimization/auto-topology.md +62 -0
- package/.claude/commands/optimization/cache-manage.md +25 -0
- package/.claude/commands/optimization/parallel-execute.md +25 -0
- package/.claude/commands/optimization/parallel-execution.md +50 -0
- package/.claude/commands/optimization/topology-optimize.md +25 -0
- package/.claude/commands/pair/commands.md +546 -0
- package/.claude/commands/pair/config.md +510 -0
- package/.claude/commands/pair/examples.md +512 -0
- package/.claude/commands/pair/modes.md +348 -0
- package/.claude/commands/pair/session.md +407 -0
- package/.claude/commands/pair/start.md +209 -0
- package/.claude/commands/sparc/analyzer.md +52 -0
- package/.claude/commands/sparc/architect.md +53 -0
- package/.claude/commands/sparc/batch-executor.md +54 -0
- package/.claude/commands/sparc/coder.md +54 -0
- package/.claude/commands/sparc/debugger.md +54 -0
- package/.claude/commands/sparc/designer.md +53 -0
- package/.claude/commands/sparc/documenter.md +54 -0
- package/.claude/commands/sparc/innovator.md +54 -0
- package/.claude/commands/sparc/memory-manager.md +54 -0
- package/.claude/commands/sparc/optimizer.md +54 -0
- package/.claude/commands/sparc/orchestrator.md +132 -0
- package/.claude/commands/sparc/researcher.md +54 -0
- package/.claude/commands/sparc/reviewer.md +54 -0
- package/.claude/commands/sparc/sparc-modes.md +174 -0
- package/.claude/commands/sparc/swarm-coordinator.md +54 -0
- package/.claude/commands/sparc/tdd.md +54 -0
- package/.claude/commands/sparc/tester.md +54 -0
- package/.claude/commands/sparc/workflow-manager.md +54 -0
- package/.claude/commands/stream-chain/pipeline.md +121 -0
- package/.claude/commands/stream-chain/run.md +70 -0
- package/.claude/commands/swarm/README.md +15 -0
- package/.claude/commands/swarm/analysis.md +95 -0
- package/.claude/commands/swarm/development.md +96 -0
- package/.claude/commands/swarm/examples.md +168 -0
- package/.claude/commands/swarm/maintenance.md +102 -0
- package/.claude/commands/swarm/optimization.md +117 -0
- package/.claude/commands/swarm/research.md +136 -0
- package/.claude/commands/swarm/swarm-analysis.md +8 -0
- package/.claude/commands/swarm/swarm-background.md +8 -0
- package/.claude/commands/swarm/swarm-init.md +19 -0
- package/.claude/commands/swarm/swarm-modes.md +8 -0
- package/.claude/commands/swarm/swarm-monitor.md +8 -0
- package/.claude/commands/swarm/swarm-spawn.md +19 -0
- package/.claude/commands/swarm/swarm-status.md +8 -0
- package/.claude/commands/swarm/swarm-strategies.md +8 -0
- package/.claude/commands/swarm/swarm.md +27 -0
- package/.claude/commands/swarm/testing.md +131 -0
- package/.claude/commands/training/README.md +9 -0
- package/.claude/commands/training/model-update.md +25 -0
- package/.claude/commands/training/neural-patterns.md +74 -0
- package/.claude/commands/training/neural-train.md +25 -0
- package/.claude/commands/training/pattern-learn.md +25 -0
- package/.claude/commands/training/specialization.md +63 -0
- package/.claude/commands/truth/start.md +143 -0
- package/.claude/commands/verify/check.md +50 -0
- package/.claude/commands/verify/start.md +128 -0
- package/.claude/commands/workflows/README.md +9 -0
- package/.claude/commands/workflows/development.md +78 -0
- package/.claude/commands/workflows/research.md +63 -0
- package/.claude/commands/workflows/workflow-create.md +25 -0
- package/.claude/commands/workflows/workflow-execute.md +25 -0
- package/.claude/commands/workflows/workflow-export.md +25 -0
- package/.claude/helpers/checkpoint-manager.sh +251 -0
- package/.claude/helpers/github-safe.js +106 -0
- package/.claude/helpers/github-setup.sh +28 -0
- package/.claude/helpers/quick-start.sh +19 -0
- package/.claude/helpers/setup-mcp.sh +18 -0
- package/.claude/helpers/standard-checkpoint-hooks.sh +179 -0
- package/.claude/settings.json +114 -0
- package/.claude/settings.local.json +10 -0
- package/CONTRIBUTING.md +897 -0
- package/LICENSE +21 -0
- package/README.md +632 -0
- package/bin/aqe +959 -0
- package/config/fleet.yaml +50 -0
- package/dist/agents/ApiContractValidatorAgent.d.ts +222 -0
- package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -0
- package/dist/agents/ApiContractValidatorAgent.js +787 -0
- package/dist/agents/ApiContractValidatorAgent.js.map +1 -0
- package/dist/agents/BaseAgent.d.ts +147 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -0
- package/dist/agents/BaseAgent.js +374 -0
- package/dist/agents/BaseAgent.js.map +1 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts +103 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -0
- package/dist/agents/CoverageAnalyzerAgent.js +466 -0
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -0
- package/dist/agents/DeploymentReadinessAgent.d.ts +244 -0
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -0
- package/dist/agents/DeploymentReadinessAgent.js +974 -0
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -0
- package/dist/agents/FlakyTestHunterAgent.d.ts +172 -0
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -0
- package/dist/agents/FlakyTestHunterAgent.js +867 -0
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -0
- package/dist/agents/FleetCommanderAgent.d.ts +154 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -0
- package/dist/agents/FleetCommanderAgent.js +924 -0
- package/dist/agents/FleetCommanderAgent.js.map +1 -0
- package/dist/agents/PerformanceTesterAgent.d.ts +194 -0
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -0
- package/dist/agents/PerformanceTesterAgent.js +972 -0
- package/dist/agents/PerformanceTesterAgent.js.map +1 -0
- package/dist/agents/ProductionIntelligenceAgent.d.ts +224 -0
- package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -0
- package/dist/agents/ProductionIntelligenceAgent.js +856 -0
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -0
- package/dist/agents/QualityAnalyzerAgent.d.ts +67 -0
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -0
- package/dist/agents/QualityAnalyzerAgent.js +453 -0
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -0
- package/dist/agents/QualityGateAgent.d.ts +104 -0
- package/dist/agents/QualityGateAgent.d.ts.map +1 -0
- package/dist/agents/QualityGateAgent.js +522 -0
- package/dist/agents/QualityGateAgent.js.map +1 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +274 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.js +1076 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -0
- package/dist/agents/RequirementsValidatorAgent.d.ts +195 -0
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -0
- package/dist/agents/RequirementsValidatorAgent.js +992 -0
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -0
- package/dist/agents/SecurityScannerAgent.d.ts +126 -0
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -0
- package/dist/agents/SecurityScannerAgent.js +695 -0
- package/dist/agents/SecurityScannerAgent.js.map +1 -0
- package/dist/agents/TestDataArchitectAgent.d.ts +452 -0
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -0
- package/dist/agents/TestDataArchitectAgent.js +1346 -0
- package/dist/agents/TestDataArchitectAgent.js.map +1 -0
- package/dist/agents/TestExecutorAgent.d.ts +101 -0
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -0
- package/dist/agents/TestExecutorAgent.js +730 -0
- package/dist/agents/TestExecutorAgent.js.map +1 -0
- package/dist/agents/TestGeneratorAgent.d.ts +109 -0
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -0
- package/dist/agents/TestGeneratorAgent.js +450 -0
- package/dist/agents/TestGeneratorAgent.js.map +1 -0
- package/dist/agents/index.d.ts +51 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +738 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +32 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +764 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/fleet.d.ts +36 -0
- package/dist/cli/commands/fleet.d.ts.map +1 -0
- package/dist/cli/commands/fleet.js +745 -0
- package/dist/cli/commands/fleet.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +24 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +424 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +17 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +570 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.d.ts +25 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +558 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/index-spec.d.ts +3 -0
- package/dist/cli/index-spec.d.ts.map +1 -0
- package/dist/cli/index-spec.js +154 -0
- package/dist/cli/index-spec.js.map +1 -0
- package/dist/cli/index-working.d.ts +7 -0
- package/dist/cli/index-working.d.ts.map +1 -0
- package/dist/cli/index-working.js +470 -0
- package/dist/cli/index-working.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +174 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/Agent.d.ts +189 -0
- package/dist/core/Agent.d.ts.map +1 -0
- package/dist/core/Agent.js +288 -0
- package/dist/core/Agent.js.map +1 -0
- package/dist/core/EventBus.d.ts +40 -0
- package/dist/core/EventBus.d.ts.map +1 -0
- package/dist/core/EventBus.js +114 -0
- package/dist/core/EventBus.js.map +1 -0
- package/dist/core/FleetManager.d.ts +219 -0
- package/dist/core/FleetManager.d.ts.map +1 -0
- package/dist/core/FleetManager.js +354 -0
- package/dist/core/FleetManager.js.map +1 -0
- package/dist/core/MemoryManager.d.ts +119 -0
- package/dist/core/MemoryManager.d.ts.map +1 -0
- package/dist/core/MemoryManager.js +460 -0
- package/dist/core/MemoryManager.js.map +1 -0
- package/dist/core/Task.d.ts +264 -0
- package/dist/core/Task.d.ts.map +1 -0
- package/dist/core/Task.js +397 -0
- package/dist/core/Task.js.map +1 -0
- package/dist/core/coverage-analyzer.d.ts +50 -0
- package/dist/core/coverage-analyzer.d.ts.map +1 -0
- package/dist/core/coverage-analyzer.js +146 -0
- package/dist/core/coverage-analyzer.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +20 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/quality-gate.d.ts +81 -0
- package/dist/core/quality-gate.d.ts.map +1 -0
- package/dist/core/quality-gate.js +254 -0
- package/dist/core/quality-gate.js.map +1 -0
- package/dist/coverage/coverage-collector.d.ts +62 -0
- package/dist/coverage/coverage-collector.d.ts.map +1 -0
- package/dist/coverage/coverage-collector.js +61 -0
- package/dist/coverage/coverage-collector.js.map +1 -0
- package/dist/coverage/coverage-reporter.d.ts +42 -0
- package/dist/coverage/coverage-reporter.d.ts.map +1 -0
- package/dist/coverage/coverage-reporter.js +53 -0
- package/dist/coverage/coverage-reporter.js.map +1 -0
- package/dist/index.d.ts +89 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +142 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/handlers/agent-spawn.d.ts +72 -0
- package/dist/mcp/handlers/agent-spawn.d.ts.map +1 -0
- package/dist/mcp/handlers/agent-spawn.js +255 -0
- package/dist/mcp/handlers/agent-spawn.js.map +1 -0
- package/dist/mcp/handlers/base-handler.d.ts +53 -0
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -0
- package/dist/mcp/handlers/base-handler.js +77 -0
- package/dist/mcp/handlers/base-handler.js.map +1 -0
- package/dist/mcp/handlers/fleet-init.d.ts +55 -0
- package/dist/mcp/handlers/fleet-init.d.ts.map +1 -0
- package/dist/mcp/handlers/fleet-init.js +149 -0
- package/dist/mcp/handlers/fleet-init.js.map +1 -0
- package/dist/mcp/handlers/fleet-status.d.ts +103 -0
- package/dist/mcp/handlers/fleet-status.d.ts.map +1 -0
- package/dist/mcp/handlers/fleet-status.js +244 -0
- package/dist/mcp/handlers/fleet-status.js.map +1 -0
- package/dist/mcp/handlers/optimize-tests.d.ts +219 -0
- package/dist/mcp/handlers/optimize-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/optimize-tests.js +532 -0
- package/dist/mcp/handlers/optimize-tests.js.map +1 -0
- package/dist/mcp/handlers/predict-defects.d.ts +194 -0
- package/dist/mcp/handlers/predict-defects.d.ts.map +1 -0
- package/dist/mcp/handlers/predict-defects.js +721 -0
- package/dist/mcp/handlers/predict-defects.js.map +1 -0
- package/dist/mcp/handlers/quality-analyze.d.ts +273 -0
- package/dist/mcp/handlers/quality-analyze.d.ts.map +1 -0
- package/dist/mcp/handlers/quality-analyze.js +702 -0
- package/dist/mcp/handlers/quality-analyze.js.map +1 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts +152 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -0
- package/dist/mcp/handlers/task-orchestrate.js +629 -0
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -0
- package/dist/mcp/handlers/test-execute.d.ts +132 -0
- package/dist/mcp/handlers/test-execute.d.ts.map +1 -0
- package/dist/mcp/handlers/test-execute.js +436 -0
- package/dist/mcp/handlers/test-execute.js.map +1 -0
- package/dist/mcp/handlers/test-generate.d.ts +107 -0
- package/dist/mcp/handlers/test-generate.d.ts.map +1 -0
- package/dist/mcp/handlers/test-generate.js +437 -0
- package/dist/mcp/handlers/test-generate.js.map +1 -0
- package/dist/mcp/server.d.ts +99 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +214 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/services/AgentRegistry.d.ts +191 -0
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -0
- package/dist/mcp/services/AgentRegistry.js +403 -0
- package/dist/mcp/services/AgentRegistry.js.map +1 -0
- package/dist/mcp/services/HookExecutor.d.ts +165 -0
- package/dist/mcp/services/HookExecutor.d.ts.map +1 -0
- package/dist/mcp/services/HookExecutor.js +327 -0
- package/dist/mcp/services/HookExecutor.js.map +1 -0
- package/dist/mcp/start.d.ts +7 -0
- package/dist/mcp/start.d.ts.map +1 -0
- package/dist/mcp/start.js +35 -0
- package/dist/mcp/start.js.map +1 -0
- package/dist/mcp/tools.d.ts +81 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +471 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/optimization/sublinear-solver.d.ts +72 -0
- package/dist/optimization/sublinear-solver.d.ts.map +1 -0
- package/dist/optimization/sublinear-solver.js +263 -0
- package/dist/optimization/sublinear-solver.js.map +1 -0
- package/dist/scripts/verifyComplexity.d.ts +8 -0
- package/dist/scripts/verifyComplexity.d.ts.map +1 -0
- package/dist/scripts/verifyComplexity.js +56 -0
- package/dist/scripts/verifyComplexity.js.map +1 -0
- package/dist/types/api-contract.types.d.ts +273 -0
- package/dist/types/api-contract.types.d.ts.map +1 -0
- package/dist/types/api-contract.types.js +18 -0
- package/dist/types/api-contract.types.js.map +1 -0
- package/dist/types/errors.d.ts +104 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +226 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/events.d.ts +101 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +6 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +570 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +131 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/Config.d.ts +128 -0
- package/dist/utils/Config.d.ts.map +1 -0
- package/dist/utils/Config.js +232 -0
- package/dist/utils/Config.js.map +1 -0
- package/dist/utils/Database.d.ts +112 -0
- package/dist/utils/Database.d.ts.map +1 -0
- package/dist/utils/Database.js +352 -0
- package/dist/utils/Database.js.map +1 -0
- package/dist/utils/Logger.d.ts +58 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +125 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +14 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/sublinear/coverageOptimizer.d.ts +84 -0
- package/dist/utils/sublinear/coverageOptimizer.d.ts.map +1 -0
- package/dist/utils/sublinear/coverageOptimizer.js +415 -0
- package/dist/utils/sublinear/coverageOptimizer.js.map +1 -0
- package/dist/utils/sublinear/index.d.ts +50 -0
- package/dist/utils/sublinear/index.d.ts.map +1 -0
- package/dist/utils/sublinear/index.js +390 -0
- package/dist/utils/sublinear/index.js.map +1 -0
- package/dist/utils/sublinear/matrixSolver.d.ts +132 -0
- package/dist/utils/sublinear/matrixSolver.d.ts.map +1 -0
- package/dist/utils/sublinear/matrixSolver.js +642 -0
- package/dist/utils/sublinear/matrixSolver.js.map +1 -0
- package/dist/utils/sublinear/temporalPredictor.d.ts +195 -0
- package/dist/utils/sublinear/temporalPredictor.d.ts.map +1 -0
- package/dist/utils/sublinear/temporalPredictor.js +474 -0
- package/dist/utils/sublinear/temporalPredictor.js.map +1 -0
- package/dist/utils/sublinear/testSelector.d.ts +81 -0
- package/dist/utils/sublinear/testSelector.d.ts.map +1 -0
- package/dist/utils/sublinear/testSelector.js +303 -0
- package/dist/utils/sublinear/testSelector.js.map +1 -0
- package/package.json +131 -0
|
@@ -0,0 +1,856 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ProductionIntelligenceAgent - Converts production data into test scenarios
|
|
4
|
+
*
|
|
5
|
+
* Implements incident replay testing, RUM analysis, anomaly detection,
|
|
6
|
+
* load pattern analysis, and feature usage analytics to close the
|
|
7
|
+
* production-to-testing feedback loop.
|
|
8
|
+
*
|
|
9
|
+
* Based on SPARC methodology and AQE Fleet specification
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ProductionIntelligenceAgent = void 0;
|
|
13
|
+
const BaseAgent_1 = require("./BaseAgent");
|
|
14
|
+
const types_1 = require("../types");
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Production Intelligence Agent Implementation
|
|
17
|
+
// ============================================================================
|
|
18
|
+
class ProductionIntelligenceAgent extends BaseAgent_1.BaseAgent {
|
|
19
|
+
constructor(config) {
|
|
20
|
+
super({
|
|
21
|
+
...config,
|
|
22
|
+
type: types_1.QEAgentType.PRODUCTION_INTELLIGENCE,
|
|
23
|
+
capabilities: [
|
|
24
|
+
{
|
|
25
|
+
name: 'incident-replay',
|
|
26
|
+
version: '1.0.0',
|
|
27
|
+
description: 'Convert production incidents into reproducible test scenarios',
|
|
28
|
+
parameters: {
|
|
29
|
+
minOccurrences: config.thresholds?.minIncidentOccurrences || 5,
|
|
30
|
+
severityFilter: ['HIGH', 'CRITICAL']
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'rum-analysis',
|
|
35
|
+
version: '1.0.0',
|
|
36
|
+
description: 'Analyze Real User Monitoring data to generate realistic test scenarios',
|
|
37
|
+
parameters: {
|
|
38
|
+
deviceTypes: ['mobile', 'desktop', 'tablet'],
|
|
39
|
+
browserSupport: ['chrome', 'safari', 'firefox', 'edge']
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'anomaly-detection',
|
|
44
|
+
version: '1.0.0',
|
|
45
|
+
description: 'Detect abnormal patterns indicating potential bugs',
|
|
46
|
+
parameters: {
|
|
47
|
+
stdDevThreshold: config.thresholds?.anomalyStdDev || 3,
|
|
48
|
+
detectionWindow: 300000 // 5 minutes
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'load-pattern-analysis',
|
|
53
|
+
version: '1.0.0',
|
|
54
|
+
description: 'Extract realistic load patterns from production traffic',
|
|
55
|
+
parameters: {
|
|
56
|
+
analysisWindow: '30d',
|
|
57
|
+
includeSeasonality: true
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'feature-usage-analytics',
|
|
62
|
+
version: '1.0.0',
|
|
63
|
+
description: 'Track feature usage to prioritize testing efforts',
|
|
64
|
+
parameters: {
|
|
65
|
+
usageThreshold: 0.05, // 5% minimum usage
|
|
66
|
+
deadCodeWindow: 90 // days
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
});
|
|
71
|
+
this.baselineMetrics = new Map();
|
|
72
|
+
this.monitoringClients = new Map();
|
|
73
|
+
this.config = {
|
|
74
|
+
...config,
|
|
75
|
+
thresholds: {
|
|
76
|
+
anomalyStdDev: 3,
|
|
77
|
+
errorRateSpike: 0.5,
|
|
78
|
+
latencyDegradation: 0.3,
|
|
79
|
+
minIncidentOccurrences: 5,
|
|
80
|
+
...config.thresholds
|
|
81
|
+
},
|
|
82
|
+
features: {
|
|
83
|
+
incidentReplay: true,
|
|
84
|
+
rumAnalysis: true,
|
|
85
|
+
anomalyDetection: true,
|
|
86
|
+
loadPatternAnalysis: true,
|
|
87
|
+
featureUsageAnalytics: true,
|
|
88
|
+
...config.features
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// BaseAgent Implementation
|
|
94
|
+
// ============================================================================
|
|
95
|
+
async initializeComponents() {
|
|
96
|
+
console.log(`ProductionIntelligenceAgent ${this.agentId.id} initializing...`);
|
|
97
|
+
// Initialize monitoring platform clients
|
|
98
|
+
await this.initializeMonitoringClients();
|
|
99
|
+
// Load historical baseline metrics
|
|
100
|
+
await this.loadBaselineMetrics();
|
|
101
|
+
// Register event handlers for production events
|
|
102
|
+
this.registerProductionEventHandlers();
|
|
103
|
+
console.log(`ProductionIntelligenceAgent ${this.agentId.id} initialized successfully`);
|
|
104
|
+
}
|
|
105
|
+
async performTask(task) {
|
|
106
|
+
const { type, payload } = task;
|
|
107
|
+
console.log(`ProductionIntelligenceAgent executing ${type} task: ${task.id}`);
|
|
108
|
+
switch (type) {
|
|
109
|
+
case 'incident-replay':
|
|
110
|
+
return await this.performIncidentReplay(payload);
|
|
111
|
+
case 'rum-analysis':
|
|
112
|
+
return await this.performRUMAnalysis(payload);
|
|
113
|
+
case 'anomaly-detection':
|
|
114
|
+
return await this.performAnomalyDetection(payload);
|
|
115
|
+
case 'load-pattern-analysis':
|
|
116
|
+
return await this.performLoadPatternAnalysis(payload);
|
|
117
|
+
case 'feature-usage-analytics':
|
|
118
|
+
return await this.performFeatureUsageAnalytics(payload);
|
|
119
|
+
case 'generate-tests-from-incidents':
|
|
120
|
+
return await this.generateTestsFromIncidents(payload);
|
|
121
|
+
case 'generate-tests-from-rum':
|
|
122
|
+
return await this.generateTestsFromRUM(payload);
|
|
123
|
+
case 'analyze-production-vs-staging':
|
|
124
|
+
return await this.analyzeProductionVsStaging(payload);
|
|
125
|
+
default:
|
|
126
|
+
throw new Error(`Unsupported task type: ${type}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async loadKnowledge() {
|
|
130
|
+
// Load production intelligence patterns and insights
|
|
131
|
+
const storedPatterns = await this.retrieveMemory('production-patterns');
|
|
132
|
+
if (storedPatterns) {
|
|
133
|
+
console.log('Loaded production intelligence patterns from memory');
|
|
134
|
+
}
|
|
135
|
+
// Load incident history
|
|
136
|
+
const incidentHistory = await this.memoryStore.retrieve('aqe/production/incidents');
|
|
137
|
+
if (incidentHistory) {
|
|
138
|
+
console.log('Loaded incident history from memory');
|
|
139
|
+
}
|
|
140
|
+
// Load RUM data
|
|
141
|
+
const rumData = await this.memoryStore.retrieve('aqe/production/rum-data');
|
|
142
|
+
if (rumData) {
|
|
143
|
+
console.log('Loaded RUM data from memory');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async cleanup() {
|
|
147
|
+
// Save current state
|
|
148
|
+
await this.storeMemory('production-state', {
|
|
149
|
+
baselineMetrics: Array.from(this.baselineMetrics.entries()),
|
|
150
|
+
timestamp: new Date()
|
|
151
|
+
});
|
|
152
|
+
// Close monitoring client connections
|
|
153
|
+
for (const [platform, client] of this.monitoringClients.entries()) {
|
|
154
|
+
console.log(`Closing connection to ${platform}`);
|
|
155
|
+
// In real implementation, properly close connections
|
|
156
|
+
}
|
|
157
|
+
this.monitoringClients.clear();
|
|
158
|
+
console.log(`ProductionIntelligenceAgent ${this.agentId.id} cleaned up`);
|
|
159
|
+
}
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// Incident Replay Testing
|
|
162
|
+
// ============================================================================
|
|
163
|
+
async performIncidentReplay(data) {
|
|
164
|
+
const { incident } = data;
|
|
165
|
+
console.log(`Analyzing incident ${incident.id} for replay testing`);
|
|
166
|
+
// Generate test scenario from incident
|
|
167
|
+
const testScenario = await this.generateIncidentTestScenario(incident);
|
|
168
|
+
// Store incident analysis
|
|
169
|
+
await this.memoryStore.store(`aqe/incidents/${incident.id}`, {
|
|
170
|
+
incident,
|
|
171
|
+
testScenario,
|
|
172
|
+
analyzedAt: new Date(),
|
|
173
|
+
severity: incident.severity
|
|
174
|
+
});
|
|
175
|
+
// Emit event for test generation
|
|
176
|
+
this.emitEvent('production.incident.analyzed', {
|
|
177
|
+
incidentId: incident.id,
|
|
178
|
+
testScenarioId: testScenario.id,
|
|
179
|
+
severity: incident.severity
|
|
180
|
+
}, incident.severity === 'CRITICAL' ? 'critical' : 'high');
|
|
181
|
+
return {
|
|
182
|
+
testScenario,
|
|
183
|
+
reproducible: true,
|
|
184
|
+
testSuite: {
|
|
185
|
+
id: `incident-replay-${incident.id}`,
|
|
186
|
+
name: `Incident Replay: ${incident.id} - ${incident.error}`,
|
|
187
|
+
tests: [testScenario],
|
|
188
|
+
metadata: {
|
|
189
|
+
generatedAt: new Date(),
|
|
190
|
+
coverageTarget: 0,
|
|
191
|
+
framework: 'jest',
|
|
192
|
+
estimatedDuration: incident.context.requestTrace?.duration || 5000,
|
|
193
|
+
generationStrategy: 'incident-replay'
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
async generateIncidentTestScenario(incident) {
|
|
199
|
+
return {
|
|
200
|
+
id: `test-incident-${incident.id}`,
|
|
201
|
+
name: `should handle ${incident.error} gracefully`,
|
|
202
|
+
type: types_1.TestType.INTEGRATION,
|
|
203
|
+
parameters: [
|
|
204
|
+
{
|
|
205
|
+
name: 'incident',
|
|
206
|
+
value: incident,
|
|
207
|
+
type: 'ProductionIncident'
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'systemState',
|
|
211
|
+
value: incident.context.systemState,
|
|
212
|
+
type: 'SystemState'
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'expectedBehavior',
|
|
216
|
+
value: 'graceful-degradation',
|
|
217
|
+
type: 'string'
|
|
218
|
+
}
|
|
219
|
+
],
|
|
220
|
+
assertions: [
|
|
221
|
+
`expect(response.status).not.toBe(500)`,
|
|
222
|
+
`expect(response.error).toBeDefined()`,
|
|
223
|
+
`expect(response.retryable).toBe(true)`,
|
|
224
|
+
`expect(orderData).not.toBeNull()`,
|
|
225
|
+
`expect(circuitBreaker.state).toBe('OPEN') // after threshold`
|
|
226
|
+
],
|
|
227
|
+
expectedResult: {
|
|
228
|
+
status: 'failed-gracefully',
|
|
229
|
+
userNotified: true,
|
|
230
|
+
dataIntegrity: true
|
|
231
|
+
},
|
|
232
|
+
estimatedDuration: incident.context.requestTrace?.duration || 5000
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
// ============================================================================
|
|
236
|
+
// RUM Analysis
|
|
237
|
+
// ============================================================================
|
|
238
|
+
async performRUMAnalysis(data) {
|
|
239
|
+
const { rumData, timeWindow = 'last_7_days' } = data;
|
|
240
|
+
console.log(`Analyzing RUM data for ${timeWindow}`);
|
|
241
|
+
// Fetch RUM data from monitoring platform or use provided data
|
|
242
|
+
const analysisData = rumData || await this.fetchRUMData(timeWindow);
|
|
243
|
+
// Analyze user journeys
|
|
244
|
+
const userJourneys = this.analyzeUserJourneys(analysisData);
|
|
245
|
+
// Identify error patterns
|
|
246
|
+
const errorPatterns = this.identifyErrorPatterns(analysisData);
|
|
247
|
+
// Generate performance insights
|
|
248
|
+
const performanceInsights = this.generatePerformanceInsights(analysisData);
|
|
249
|
+
// Generate tests from RUM data
|
|
250
|
+
const generatedTests = await this.generateTestsFromRUMData(analysisData);
|
|
251
|
+
// Store RUM analysis
|
|
252
|
+
await this.memoryStore.store('aqe/rum-data/latest', {
|
|
253
|
+
analysisData,
|
|
254
|
+
userJourneys,
|
|
255
|
+
errorPatterns,
|
|
256
|
+
performanceInsights,
|
|
257
|
+
analyzedAt: new Date()
|
|
258
|
+
});
|
|
259
|
+
// Emit event
|
|
260
|
+
this.emitEvent('production.rum.analyzed', {
|
|
261
|
+
journeys: userJourneys.length,
|
|
262
|
+
errors: errorPatterns.length,
|
|
263
|
+
tests: generatedTests.length
|
|
264
|
+
}, 'medium');
|
|
265
|
+
return {
|
|
266
|
+
userJourneys,
|
|
267
|
+
errorPatterns,
|
|
268
|
+
performanceInsights,
|
|
269
|
+
generatedTests
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
analyzeUserJourneys(rumData) {
|
|
273
|
+
// Sort journeys by frequency
|
|
274
|
+
return rumData.userJourneys
|
|
275
|
+
.sort((a, b) => b.frequency - a.frequency)
|
|
276
|
+
.slice(0, 10); // Top 10 most common journeys
|
|
277
|
+
}
|
|
278
|
+
identifyErrorPatterns(rumData) {
|
|
279
|
+
// Filter high-impact errors
|
|
280
|
+
return rumData.errorPatterns
|
|
281
|
+
.filter(pattern => pattern.userImpact === 'HIGH' || pattern.frequency > 100)
|
|
282
|
+
.sort((a, b) => b.frequency - a.frequency);
|
|
283
|
+
}
|
|
284
|
+
generatePerformanceInsights(rumData) {
|
|
285
|
+
const { performanceMetrics } = rumData;
|
|
286
|
+
return {
|
|
287
|
+
fcp: {
|
|
288
|
+
status: performanceMetrics.FCP.p95 < 2500 ? 'GOOD' : 'NEEDS_IMPROVEMENT',
|
|
289
|
+
p95: performanceMetrics.FCP.p95,
|
|
290
|
+
threshold: 2500
|
|
291
|
+
},
|
|
292
|
+
lcp: {
|
|
293
|
+
status: performanceMetrics.LCP.p95 < 4000 ? 'GOOD' : 'NEEDS_IMPROVEMENT',
|
|
294
|
+
p95: performanceMetrics.LCP.p95,
|
|
295
|
+
threshold: 4000
|
|
296
|
+
},
|
|
297
|
+
fid: {
|
|
298
|
+
status: performanceMetrics.FID.p95 < 100 ? 'GOOD' : 'NEEDS_IMPROVEMENT',
|
|
299
|
+
p95: performanceMetrics.FID.p95,
|
|
300
|
+
threshold: 100
|
|
301
|
+
},
|
|
302
|
+
cls: {
|
|
303
|
+
status: performanceMetrics.CLS.p95 < 0.1 ? 'GOOD' : 'NEEDS_IMPROVEMENT',
|
|
304
|
+
p95: performanceMetrics.CLS.p95,
|
|
305
|
+
threshold: 0.1
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
async generateTestsFromRUMData(rumData) {
|
|
310
|
+
const tests = [];
|
|
311
|
+
// Generate tests for common user journeys
|
|
312
|
+
for (const journey of rumData.userJourneys.slice(0, 5)) {
|
|
313
|
+
tests.push({
|
|
314
|
+
id: `rum-journey-${journey.pattern.replace(/\s+/g, '-').toLowerCase()}`,
|
|
315
|
+
name: `should complete user journey: ${journey.pattern}`,
|
|
316
|
+
type: types_1.TestType.E2E,
|
|
317
|
+
parameters: [
|
|
318
|
+
{
|
|
319
|
+
name: 'journey',
|
|
320
|
+
value: journey,
|
|
321
|
+
type: 'UserJourney'
|
|
322
|
+
}
|
|
323
|
+
],
|
|
324
|
+
assertions: [
|
|
325
|
+
`expect(journey.completed).toBe(true)`,
|
|
326
|
+
`expect(journey.conversionRate).toBeGreaterThanOrEqual(${journey.conversionRate})`
|
|
327
|
+
],
|
|
328
|
+
expectedResult: {
|
|
329
|
+
completed: true,
|
|
330
|
+
duration: journey.avgDuration
|
|
331
|
+
},
|
|
332
|
+
estimatedDuration: journey.avgDuration
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
// Generate tests for error patterns
|
|
336
|
+
for (const error of rumData.errorPatterns.slice(0, 3)) {
|
|
337
|
+
tests.push({
|
|
338
|
+
id: `rum-error-${error.error.replace(/\W+/g, '-').toLowerCase()}`,
|
|
339
|
+
name: `should handle error: ${error.error}`,
|
|
340
|
+
type: types_1.TestType.INTEGRATION,
|
|
341
|
+
parameters: [
|
|
342
|
+
{
|
|
343
|
+
name: 'errorPattern',
|
|
344
|
+
value: error,
|
|
345
|
+
type: 'ErrorPattern'
|
|
346
|
+
}
|
|
347
|
+
],
|
|
348
|
+
assertions: [
|
|
349
|
+
`expect(() => triggerError()).not.toThrow()`,
|
|
350
|
+
`expect(errorHandled).toBe(true)`
|
|
351
|
+
],
|
|
352
|
+
expectedResult: {
|
|
353
|
+
errorHandled: true
|
|
354
|
+
},
|
|
355
|
+
estimatedDuration: 2000
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
return tests;
|
|
359
|
+
}
|
|
360
|
+
// ============================================================================
|
|
361
|
+
// Anomaly Detection
|
|
362
|
+
// ============================================================================
|
|
363
|
+
async performAnomalyDetection(data) {
|
|
364
|
+
const { currentMetrics, lookbackPeriod = '24h' } = data;
|
|
365
|
+
console.log(`Detecting anomalies in production metrics (lookback: ${lookbackPeriod})`);
|
|
366
|
+
const anomalies = [];
|
|
367
|
+
const recommendations = [];
|
|
368
|
+
// Error rate spike detection
|
|
369
|
+
const errorRateAnomaly = this.detectErrorRateSpike(currentMetrics);
|
|
370
|
+
if (errorRateAnomaly) {
|
|
371
|
+
anomalies.push(errorRateAnomaly);
|
|
372
|
+
recommendations.push('Generate regression tests for recent changes');
|
|
373
|
+
}
|
|
374
|
+
// Latency degradation detection
|
|
375
|
+
const latencyAnomaly = this.detectLatencyDegradation(currentMetrics);
|
|
376
|
+
if (latencyAnomaly) {
|
|
377
|
+
anomalies.push(latencyAnomaly);
|
|
378
|
+
recommendations.push('Generate performance tests targeting affected endpoints');
|
|
379
|
+
}
|
|
380
|
+
// User behavior anomaly detection
|
|
381
|
+
const behaviorAnomaly = this.detectBehaviorAnomaly(currentMetrics);
|
|
382
|
+
if (behaviorAnomaly) {
|
|
383
|
+
anomalies.push(behaviorAnomaly);
|
|
384
|
+
recommendations.push('Generate UI tests for affected user flows');
|
|
385
|
+
}
|
|
386
|
+
// Store anomalies
|
|
387
|
+
await this.memoryStore.store('aqe/anomalies/latest', {
|
|
388
|
+
anomalies,
|
|
389
|
+
recommendations,
|
|
390
|
+
detectedAt: new Date(),
|
|
391
|
+
metrics: currentMetrics
|
|
392
|
+
});
|
|
393
|
+
// Emit high-priority event if critical anomalies found
|
|
394
|
+
const criticalAnomalies = anomalies.filter(a => a.severity === 'CRITICAL');
|
|
395
|
+
if (criticalAnomalies.length > 0) {
|
|
396
|
+
this.emitEvent('production.anomaly.critical', {
|
|
397
|
+
count: criticalAnomalies.length,
|
|
398
|
+
anomalies: criticalAnomalies
|
|
399
|
+
}, 'critical');
|
|
400
|
+
}
|
|
401
|
+
return { anomalies, recommendations };
|
|
402
|
+
}
|
|
403
|
+
detectErrorRateSpike(currentMetrics) {
|
|
404
|
+
const baseline = this.baselineMetrics.get('errorRate') || { mean: 0.005, stdDev: 0.002 };
|
|
405
|
+
const current = currentMetrics.errorRate || 0;
|
|
406
|
+
const zScore = (current - baseline.mean) / baseline.stdDev;
|
|
407
|
+
if (Math.abs(zScore) > this.config.thresholds.anomalyStdDev) {
|
|
408
|
+
return {
|
|
409
|
+
type: 'ERROR_RATE_SPIKE',
|
|
410
|
+
severity: zScore > 5 ? 'CRITICAL' : zScore > 3 ? 'HIGH' : 'MEDIUM',
|
|
411
|
+
details: {
|
|
412
|
+
current,
|
|
413
|
+
baseline: baseline.mean,
|
|
414
|
+
deviation: zScore,
|
|
415
|
+
magnitude: (current - baseline.mean) / baseline.mean,
|
|
416
|
+
confidence: this.calculateConfidence(zScore)
|
|
417
|
+
},
|
|
418
|
+
affectedUsers: Math.floor(currentMetrics.activeUsers * current),
|
|
419
|
+
recommendation: 'Generate regression tests for recent changes'
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
return null;
|
|
423
|
+
}
|
|
424
|
+
detectLatencyDegradation(currentMetrics) {
|
|
425
|
+
const baseline = this.baselineMetrics.get('latency') || { p95: 250, mean: 180 };
|
|
426
|
+
const current = currentMetrics.latency?.p95 || 0;
|
|
427
|
+
const degradation = (current - baseline.p95) / baseline.p95;
|
|
428
|
+
if (degradation > this.config.thresholds.latencyDegradation) {
|
|
429
|
+
return {
|
|
430
|
+
type: 'LATENCY_DEGRADATION',
|
|
431
|
+
severity: degradation > 1.0 ? 'CRITICAL' : degradation > 0.5 ? 'HIGH' : 'MEDIUM',
|
|
432
|
+
details: {
|
|
433
|
+
current,
|
|
434
|
+
baseline: baseline.p95,
|
|
435
|
+
deviation: degradation,
|
|
436
|
+
magnitude: degradation,
|
|
437
|
+
confidence: 0.9
|
|
438
|
+
},
|
|
439
|
+
affectedEndpoints: currentMetrics.endpoints || [],
|
|
440
|
+
recommendation: 'Generate performance tests targeting affected endpoints'
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
return null;
|
|
444
|
+
}
|
|
445
|
+
detectBehaviorAnomaly(currentMetrics) {
|
|
446
|
+
const baseline = this.baselineMetrics.get('userBehavior') || { conversionRate: 0.75 };
|
|
447
|
+
const current = currentMetrics.conversionRate || 0;
|
|
448
|
+
const drop = (baseline.conversionRate - current) / baseline.conversionRate;
|
|
449
|
+
if (drop > 0.2) { // 20% drop in conversion
|
|
450
|
+
return {
|
|
451
|
+
type: 'USER_BEHAVIOR_ANOMALY',
|
|
452
|
+
severity: drop > 0.5 ? 'CRITICAL' : 'HIGH',
|
|
453
|
+
details: {
|
|
454
|
+
current,
|
|
455
|
+
baseline: baseline.conversionRate,
|
|
456
|
+
deviation: drop,
|
|
457
|
+
magnitude: drop,
|
|
458
|
+
confidence: 0.85
|
|
459
|
+
},
|
|
460
|
+
hypothesis: 'UI bug or broken functionality',
|
|
461
|
+
recommendation: 'Generate UI tests for affected user flows'
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
calculateConfidence(zScore) {
|
|
467
|
+
// Convert z-score to confidence level (0-1)
|
|
468
|
+
const absZ = Math.abs(zScore);
|
|
469
|
+
if (absZ > 3)
|
|
470
|
+
return 0.999;
|
|
471
|
+
if (absZ > 2)
|
|
472
|
+
return 0.95;
|
|
473
|
+
if (absZ > 1)
|
|
474
|
+
return 0.68;
|
|
475
|
+
return 0.5;
|
|
476
|
+
}
|
|
477
|
+
// ============================================================================
|
|
478
|
+
// Load Pattern Analysis
|
|
479
|
+
// ============================================================================
|
|
480
|
+
async performLoadPatternAnalysis(data) {
|
|
481
|
+
const { timeWindow = '30d' } = data;
|
|
482
|
+
console.log(`Analyzing load patterns for ${timeWindow}`);
|
|
483
|
+
// Fetch production traffic data
|
|
484
|
+
const loadPattern = await this.extractLoadPattern(timeWindow);
|
|
485
|
+
// Generate load test script
|
|
486
|
+
const loadTestScript = this.generateLoadTestScript(loadPattern);
|
|
487
|
+
// Generate recommendations
|
|
488
|
+
const recommendations = this.generateLoadTestRecommendations(loadPattern);
|
|
489
|
+
// Store load pattern
|
|
490
|
+
await this.memoryStore.store('aqe/load-patterns/latest', {
|
|
491
|
+
loadPattern,
|
|
492
|
+
analyzedAt: new Date(),
|
|
493
|
+
timeWindow
|
|
494
|
+
});
|
|
495
|
+
return {
|
|
496
|
+
loadPattern,
|
|
497
|
+
loadTestScript,
|
|
498
|
+
recommendations
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
async extractLoadPattern(timeWindow) {
|
|
502
|
+
// Simulate load pattern extraction
|
|
503
|
+
// In real implementation, fetch from monitoring platform
|
|
504
|
+
return {
|
|
505
|
+
dailyPattern: {
|
|
506
|
+
hourly: Array.from({ length: 24 }, (_, hour) => ({
|
|
507
|
+
hour,
|
|
508
|
+
rps: hour >= 9 && hour <= 17 ? 2000 + Math.random() * 1000 : 500 + Math.random() * 200
|
|
509
|
+
})),
|
|
510
|
+
peakHours: [9, 12, 14, 15, 18],
|
|
511
|
+
lowTrafficHours: [0, 1, 2, 3, 4]
|
|
512
|
+
},
|
|
513
|
+
weeklyPattern: {
|
|
514
|
+
monday: { rps: 2891, conversionRate: 0.78 },
|
|
515
|
+
tuesday: { rps: 3124, conversionRate: 0.81 },
|
|
516
|
+
wednesday: { rps: 3342, conversionRate: 0.83 },
|
|
517
|
+
thursday: { rps: 3198, conversionRate: 0.79 },
|
|
518
|
+
friday: { rps: 2734, conversionRate: 0.72 },
|
|
519
|
+
saturday: { rps: 1893, conversionRate: 0.65 },
|
|
520
|
+
sunday: { rps: 1678, conversionRate: 0.67 }
|
|
521
|
+
},
|
|
522
|
+
endpointDistribution: {
|
|
523
|
+
'GET /api/products': 0.34,
|
|
524
|
+
'GET /api/search': 0.23,
|
|
525
|
+
'POST /api/cart': 0.15,
|
|
526
|
+
'POST /api/orders': 0.12,
|
|
527
|
+
'GET /api/users': 0.08,
|
|
528
|
+
'other': 0.08
|
|
529
|
+
},
|
|
530
|
+
userBehaviorPatterns: {
|
|
531
|
+
browsers: {
|
|
532
|
+
avgSessionDuration: 342000,
|
|
533
|
+
avgPagesPerSession: 7.8
|
|
534
|
+
},
|
|
535
|
+
buyers: {
|
|
536
|
+
avgSessionDuration: 523000,
|
|
537
|
+
avgPagesPerSession: 12.3
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
generateLoadTestScript(pattern) {
|
|
543
|
+
// Generate k6 load test script
|
|
544
|
+
return `
|
|
545
|
+
import { check, group, sleep } from 'k6';
|
|
546
|
+
import http from 'k6/http';
|
|
547
|
+
|
|
548
|
+
export let options = {
|
|
549
|
+
stages: [
|
|
550
|
+
{ duration: '5m', target: 2000 }, // Morning ramp-up
|
|
551
|
+
{ duration: '2h', target: 3500 }, // Peak hours
|
|
552
|
+
{ duration: '5m', target: 1800 }, // Evening traffic
|
|
553
|
+
{ duration: '5m', target: 500 } // Night baseline
|
|
554
|
+
],
|
|
555
|
+
thresholds: {
|
|
556
|
+
http_req_duration: ['p(95)<500'],
|
|
557
|
+
http_req_failed: ['rate<0.01'],
|
|
558
|
+
http_reqs: ['rate>2000']
|
|
559
|
+
}
|
|
560
|
+
};
|
|
561
|
+
|
|
562
|
+
export default function() {
|
|
563
|
+
// Implementation based on endpoint distribution
|
|
564
|
+
const endpoints = ${JSON.stringify(pattern.endpointDistribution)};
|
|
565
|
+
|
|
566
|
+
// Select endpoint based on distribution
|
|
567
|
+
const rand = Math.random();
|
|
568
|
+
let endpoint = '/api/products';
|
|
569
|
+
|
|
570
|
+
group('User Session', () => {
|
|
571
|
+
let response = http.get(\`\${BASE_URL}\${endpoint}\`);
|
|
572
|
+
check(response, {
|
|
573
|
+
'status 200': (r) => r.status === 200,
|
|
574
|
+
'response time < 500ms': (r) => r.timings.duration < 500
|
|
575
|
+
});
|
|
576
|
+
sleep(Math.random() * 3 + 1);
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
`.trim();
|
|
580
|
+
}
|
|
581
|
+
generateLoadTestRecommendations(pattern) {
|
|
582
|
+
const recommendations = [];
|
|
583
|
+
// Analyze peak traffic
|
|
584
|
+
const maxRps = Math.max(...pattern.dailyPattern.hourly.map(h => h.rps));
|
|
585
|
+
recommendations.push(`Test system capacity at ${maxRps * 1.5} RPS (150% of peak load)`);
|
|
586
|
+
// Check conversion rates
|
|
587
|
+
const avgConversion = Object.values(pattern.weeklyPattern).reduce((sum, day) => sum + day.conversionRate, 0) / 7;
|
|
588
|
+
if (avgConversion < 0.75) {
|
|
589
|
+
recommendations.push('Investigate low conversion rate - potential UX issues');
|
|
590
|
+
}
|
|
591
|
+
recommendations.push('Implement gradual ramp-up to detect breaking points');
|
|
592
|
+
recommendations.push('Test during simulated peak hours to validate auto-scaling');
|
|
593
|
+
return recommendations;
|
|
594
|
+
}
|
|
595
|
+
// ============================================================================
|
|
596
|
+
// Feature Usage Analytics
|
|
597
|
+
// ============================================================================
|
|
598
|
+
async performFeatureUsageAnalytics(data) {
|
|
599
|
+
const { timeWindow = '30d' } = data;
|
|
600
|
+
console.log(`Analyzing feature usage for ${timeWindow}`);
|
|
601
|
+
// Fetch feature usage data
|
|
602
|
+
const usageData = await this.fetchFeatureUsageData(timeWindow);
|
|
603
|
+
// Analyze and prioritize features
|
|
604
|
+
const features = this.analyzeFeaturePriority(usageData);
|
|
605
|
+
// Identify unused features
|
|
606
|
+
const unusedFeatures = this.identifyUnusedFeatures(usageData);
|
|
607
|
+
// Store analytics
|
|
608
|
+
await this.memoryStore.store('aqe/feature-usage/latest', {
|
|
609
|
+
features,
|
|
610
|
+
unusedFeatures,
|
|
611
|
+
analyzedAt: new Date(),
|
|
612
|
+
timeWindow
|
|
613
|
+
});
|
|
614
|
+
return { features, unusedFeatures };
|
|
615
|
+
}
|
|
616
|
+
async fetchFeatureUsageData(timeWindow) {
|
|
617
|
+
// Simulate feature usage data
|
|
618
|
+
// In real implementation, fetch from analytics platform
|
|
619
|
+
return {
|
|
620
|
+
totalUsers: 84392,
|
|
621
|
+
features: [
|
|
622
|
+
{ name: 'search_autocomplete', activeUsers: 75103, satisfaction: 0.92 },
|
|
623
|
+
{ name: 'product_recommendations', activeUsers: 56503, clickthrough: 0.34 },
|
|
624
|
+
{ name: 'saved_for_later', activeUsers: 19411, conversion: 0.12 },
|
|
625
|
+
{ name: 'gift_wrapping', activeUsers: 2107, seasonal: true },
|
|
626
|
+
{ name: 'legacy_wishlist_v1', activeUsers: 42, lastUsed: '2024-08-12' }
|
|
627
|
+
]
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
analyzeFeaturePriority(usageData) {
|
|
631
|
+
return usageData.features.map((feature) => {
|
|
632
|
+
const usagePercent = feature.activeUsers / usageData.totalUsers;
|
|
633
|
+
let priority;
|
|
634
|
+
let recommendation;
|
|
635
|
+
if (usagePercent > 0.5) {
|
|
636
|
+
priority = 'CRITICAL';
|
|
637
|
+
recommendation = 'Maintain high test coverage (>90%), add edge cases';
|
|
638
|
+
}
|
|
639
|
+
else if (usagePercent > 0.25) {
|
|
640
|
+
priority = 'HIGH';
|
|
641
|
+
recommendation = 'Increase coverage to 85%+';
|
|
642
|
+
}
|
|
643
|
+
else if (usagePercent > 0.1) {
|
|
644
|
+
priority = 'MEDIUM';
|
|
645
|
+
recommendation = 'Coverage acceptable for usage level';
|
|
646
|
+
}
|
|
647
|
+
else if (usagePercent > 0.01) {
|
|
648
|
+
priority = 'LOW';
|
|
649
|
+
recommendation = 'Minimal testing required';
|
|
650
|
+
}
|
|
651
|
+
else {
|
|
652
|
+
priority = 'DEPRECATED';
|
|
653
|
+
recommendation = 'Consider removal, migrate remaining users';
|
|
654
|
+
}
|
|
655
|
+
return {
|
|
656
|
+
name: feature.name,
|
|
657
|
+
usage: usagePercent,
|
|
658
|
+
priority,
|
|
659
|
+
testCoverage: Math.floor(Math.random() * 30) + 60, // Simulated
|
|
660
|
+
recommendation
|
|
661
|
+
};
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
identifyUnusedFeatures(usageData) {
|
|
665
|
+
const unusedThreshold = usageData.totalUsers * 0.001; // 0.1% usage
|
|
666
|
+
return usageData.features
|
|
667
|
+
.filter((f) => f.activeUsers < unusedThreshold)
|
|
668
|
+
.map((f) => ({
|
|
669
|
+
name: f.name,
|
|
670
|
+
lastUsed: f.lastUsed || 'unknown',
|
|
671
|
+
recommendation: 'Dead code, safe to remove'
|
|
672
|
+
}));
|
|
673
|
+
}
|
|
674
|
+
// ============================================================================
|
|
675
|
+
// Test Generation from Production Data
|
|
676
|
+
// ============================================================================
|
|
677
|
+
async generateTestsFromIncidents(data) {
|
|
678
|
+
const { incidentIds, severityFilter = ['HIGH', 'CRITICAL'], limit = 10 } = data;
|
|
679
|
+
// Fetch incidents from memory
|
|
680
|
+
const incidents = await this.fetchIncidents(incidentIds, severityFilter, limit);
|
|
681
|
+
const testSuites = [];
|
|
682
|
+
let totalTests = 0;
|
|
683
|
+
for (const incident of incidents) {
|
|
684
|
+
const result = await this.performIncidentReplay({ incident });
|
|
685
|
+
if (result.testSuite) {
|
|
686
|
+
testSuites.push(result.testSuite);
|
|
687
|
+
totalTests += result.testSuite.tests.length;
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
return { testSuites, totalTests };
|
|
691
|
+
}
|
|
692
|
+
async generateTestsFromRUM(data) {
|
|
693
|
+
const { timeWindow = '7d', minJourneyFrequency = 100 } = data;
|
|
694
|
+
// Fetch RUM data
|
|
695
|
+
const rumData = await this.fetchRUMData(timeWindow);
|
|
696
|
+
// Filter journeys by frequency
|
|
697
|
+
const relevantJourneys = rumData.userJourneys.filter(j => j.frequency >= minJourneyFrequency);
|
|
698
|
+
const tests = await this.generateTestsFromRUMData(rumData);
|
|
699
|
+
const testSuite = {
|
|
700
|
+
id: `rum-generated-${Date.now()}`,
|
|
701
|
+
name: 'RUM-Based User Journey Tests',
|
|
702
|
+
tests,
|
|
703
|
+
metadata: {
|
|
704
|
+
generatedAt: new Date(),
|
|
705
|
+
coverageTarget: 0,
|
|
706
|
+
framework: 'playwright',
|
|
707
|
+
estimatedDuration: tests.reduce((sum, t) => sum + (t.estimatedDuration || 0), 0),
|
|
708
|
+
generationStrategy: 'rum-analysis'
|
|
709
|
+
}
|
|
710
|
+
};
|
|
711
|
+
return {
|
|
712
|
+
testSuites: [testSuite],
|
|
713
|
+
totalTests: tests.length
|
|
714
|
+
};
|
|
715
|
+
}
|
|
716
|
+
async analyzeProductionVsStaging(data) {
|
|
717
|
+
const { metrics } = data;
|
|
718
|
+
const differences = [];
|
|
719
|
+
const recommendations = [];
|
|
720
|
+
// Compare production vs staging metrics
|
|
721
|
+
for (const metric of metrics) {
|
|
722
|
+
const prodValue = await this.fetchProductionMetric(metric);
|
|
723
|
+
const stagingValue = await this.fetchStagingMetric(metric);
|
|
724
|
+
const delta = Math.abs(prodValue - stagingValue) / prodValue;
|
|
725
|
+
if (delta > 0.1) { // >10% difference
|
|
726
|
+
differences.push({
|
|
727
|
+
metric,
|
|
728
|
+
production: prodValue,
|
|
729
|
+
staging: stagingValue,
|
|
730
|
+
delta,
|
|
731
|
+
severity: delta > 0.5 ? 'HIGH' : 'MEDIUM'
|
|
732
|
+
});
|
|
733
|
+
recommendations.push(`Staging environment does not match production for ${metric}`);
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
return { differences, recommendations };
|
|
737
|
+
}
|
|
738
|
+
// ============================================================================
|
|
739
|
+
// Helper Methods
|
|
740
|
+
// ============================================================================
|
|
741
|
+
async initializeMonitoringClients() {
|
|
742
|
+
const { monitoringPlatforms } = this.config;
|
|
743
|
+
if (monitoringPlatforms?.datadog) {
|
|
744
|
+
console.log('Initializing Datadog client');
|
|
745
|
+
// In real implementation: initialize Datadog API client
|
|
746
|
+
this.monitoringClients.set('datadog', { initialized: true });
|
|
747
|
+
}
|
|
748
|
+
if (monitoringPlatforms?.newRelic) {
|
|
749
|
+
console.log('Initializing New Relic client');
|
|
750
|
+
// In real implementation: initialize New Relic API client
|
|
751
|
+
this.monitoringClients.set('newrelic', { initialized: true });
|
|
752
|
+
}
|
|
753
|
+
if (monitoringPlatforms?.grafana) {
|
|
754
|
+
console.log('Initializing Grafana client');
|
|
755
|
+
// In real implementation: initialize Grafana API client
|
|
756
|
+
this.monitoringClients.set('grafana', { initialized: true });
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
async loadBaselineMetrics() {
|
|
760
|
+
// Load historical baselines from memory
|
|
761
|
+
const storedBaselines = await this.retrieveMemory('baseline-metrics');
|
|
762
|
+
if (storedBaselines) {
|
|
763
|
+
this.baselineMetrics = new Map(Object.entries(storedBaselines));
|
|
764
|
+
}
|
|
765
|
+
else {
|
|
766
|
+
// Initialize with defaults
|
|
767
|
+
this.baselineMetrics.set('errorRate', { mean: 0.005, stdDev: 0.002 });
|
|
768
|
+
this.baselineMetrics.set('latency', { p95: 250, mean: 180 });
|
|
769
|
+
this.baselineMetrics.set('userBehavior', { conversionRate: 0.75 });
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
registerProductionEventHandlers() {
|
|
773
|
+
// Listen for production incidents
|
|
774
|
+
this.registerEventHandler({
|
|
775
|
+
eventType: 'production.incident',
|
|
776
|
+
handler: async (event) => {
|
|
777
|
+
await this.performIncidentReplay({ incident: event.data });
|
|
778
|
+
}
|
|
779
|
+
});
|
|
780
|
+
// Listen for anomaly alerts
|
|
781
|
+
this.registerEventHandler({
|
|
782
|
+
eventType: 'production.anomaly',
|
|
783
|
+
handler: async (event) => {
|
|
784
|
+
await this.performAnomalyDetection({ currentMetrics: event.data });
|
|
785
|
+
}
|
|
786
|
+
});
|
|
787
|
+
}
|
|
788
|
+
async fetchRUMData(timeWindow) {
|
|
789
|
+
// Simulate fetching RUM data
|
|
790
|
+
// In real implementation, fetch from monitoring platform
|
|
791
|
+
return {
|
|
792
|
+
timeWindow,
|
|
793
|
+
totalSessions: 847392,
|
|
794
|
+
totalPageViews: 3421847,
|
|
795
|
+
userJourneys: [
|
|
796
|
+
{
|
|
797
|
+
pattern: 'Homepage → Search → Product → Checkout → Payment',
|
|
798
|
+
frequency: 234891,
|
|
799
|
+
avgDuration: 342000,
|
|
800
|
+
conversionRate: 0.78
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
pattern: 'Homepage → Category → Product → Add to Cart',
|
|
804
|
+
frequency: 189234,
|
|
805
|
+
avgDuration: 178000,
|
|
806
|
+
conversionRate: 0.34
|
|
807
|
+
}
|
|
808
|
+
],
|
|
809
|
+
deviceDistribution: { mobile: 0.63, desktop: 0.32, tablet: 0.05 },
|
|
810
|
+
browserDistribution: { chrome: 0.54, safari: 0.31, firefox: 0.09, edge: 0.04 },
|
|
811
|
+
performanceMetrics: {
|
|
812
|
+
FCP: { p50: 1234, p95: 3421, p99: 5678 },
|
|
813
|
+
LCP: { p50: 2341, p95: 4523, p99: 7891 },
|
|
814
|
+
FID: { p50: 87, p95: 234, p99: 456 },
|
|
815
|
+
CLS: { p50: 0.02, p95: 0.08, p99: 0.15 }
|
|
816
|
+
},
|
|
817
|
+
errorPatterns: [],
|
|
818
|
+
featureUsage: {}
|
|
819
|
+
};
|
|
820
|
+
}
|
|
821
|
+
async fetchIncidents(incidentIds, severityFilter, limit) {
|
|
822
|
+
// Simulate fetching incidents from memory
|
|
823
|
+
// In real implementation, query incident management system
|
|
824
|
+
return [
|
|
825
|
+
{
|
|
826
|
+
id: 'INC-2024-1234',
|
|
827
|
+
timestamp: '2025-09-29T14:23:47.892Z',
|
|
828
|
+
severity: 'CRITICAL',
|
|
829
|
+
service: 'payment-service',
|
|
830
|
+
error: 'PaymentProcessingException: Gateway timeout after 30s',
|
|
831
|
+
affectedUsers: 1247,
|
|
832
|
+
duration: 342000,
|
|
833
|
+
region: 'us-east-1',
|
|
834
|
+
context: {
|
|
835
|
+
systemState: {
|
|
836
|
+
cpu: 87.3,
|
|
837
|
+
memory: 4.2,
|
|
838
|
+
connections: 342,
|
|
839
|
+
queueDepth: 1893,
|
|
840
|
+
cacheHitRate: 23.1
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
];
|
|
845
|
+
}
|
|
846
|
+
async fetchProductionMetric(metric) {
|
|
847
|
+
// Simulate fetching production metric
|
|
848
|
+
return Math.random() * 100;
|
|
849
|
+
}
|
|
850
|
+
async fetchStagingMetric(metric) {
|
|
851
|
+
// Simulate fetching staging metric
|
|
852
|
+
return Math.random() * 100;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
exports.ProductionIntelligenceAgent = ProductionIntelligenceAgent;
|
|
856
|
+
//# sourceMappingURL=ProductionIntelligenceAgent.js.map
|