agentic-qe 1.0.5 ā 1.2.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/qe-coverage-analyzer.md +8 -0
- package/.claude/agents/qe-flaky-test-hunter.md +9 -1
- package/.claude/agents/qe-quality-analyzer.md +405 -0
- package/.claude/agents/qe-test-generator.md +7 -0
- package/.claude/agents/reasoning/agent.md +816 -0
- package/.claude/agents/reasoning/goal-planner.md +73 -0
- package/.claude/settings.json +21 -20
- package/.claude/skills/README.md +124 -0
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
- package/.claude/skills/agentdb-learning/SKILL.md +545 -0
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
- package/.claude/skills/agentic-quality-engineering/SKILL.md +604 -0
- package/.claude/skills/api-testing-patterns/SKILL.md +686 -0
- package/.claude/skills/bug-reporting-excellence/SKILL.md +632 -0
- package/.claude/skills/code-review-quality/SKILL.md +683 -0
- package/.claude/skills/consultancy-practices/SKILL.md +540 -0
- package/.claude/skills/context-driven-testing/SKILL.md +466 -0
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +676 -0
- package/.claude/skills/flow-nexus-neural/SKILL.md +738 -0
- package/.claude/skills/flow-nexus-platform/SKILL.md +1157 -0
- package/.claude/skills/flow-nexus-swarm/SKILL.md +610 -0
- package/.claude/skills/github-code-review/SKILL.md +1140 -0
- package/.claude/skills/github-multi-repo/SKILL.md +874 -0
- package/.claude/skills/github-project-management/SKILL.md +1277 -0
- package/.claude/skills/github-release-management/SKILL.md +1081 -0
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -0
- package/.claude/skills/hive-mind-advanced/SKILL.md +712 -0
- package/.claude/skills/holistic-testing-pact/SKILL.md +225 -0
- package/.claude/skills/hooks-automation/SKILL.md +1201 -0
- package/.claude/skills/pair-programming/SKILL.md +1202 -0
- package/.claude/skills/performance-analysis/SKILL.md +563 -0
- package/.claude/skills/performance-testing/SKILL.md +662 -0
- package/.claude/skills/quality-metrics/SKILL.md +592 -0
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/.claude/skills/refactoring-patterns/SKILL.md +778 -0
- package/.claude/skills/risk-based-testing/SKILL.md +721 -0
- package/.claude/skills/security-testing/SKILL.md +651 -0
- package/.claude/skills/skill-builder/SKILL.md +910 -0
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -0
- package/.claude/skills/stream-chain/SKILL.md +563 -0
- package/.claude/skills/swarm-advanced/SKILL.md +973 -0
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
- package/.claude/skills/tdd-london-chicago/SKILL.md +567 -0
- package/.claude/skills/technical-writing/SKILL.md +235 -0
- package/.claude/skills/test-automation-strategy/SKILL.md +842 -0
- package/.claude/skills/verification-quality/SKILL.md +649 -0
- package/.claude/skills/xp-practices/SKILL.md +671 -0
- package/.claude/statusline-command.sh +176 -0
- package/CHANGELOG.md +645 -1
- package/CONTRIBUTING.md +51 -0
- package/README.md +758 -162
- package/bin/aqe +90 -938
- package/config/improvement-loop.config.ts +323 -0
- package/config/neural-agent.config.ts +197 -0
- package/dist/adapters/MemoryStoreAdapter.d.ts +16 -16
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +22 -16
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/BaseAgent.d.ts +69 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +382 -1
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +69 -3
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +418 -51
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.js +13 -13
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +76 -4
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +375 -13
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +2 -2
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +84 -0
- package/dist/agents/LearningAgent.d.ts.map +1 -0
- package/dist/agents/LearningAgent.js +197 -0
- package/dist/agents/LearningAgent.js.map +1 -0
- package/dist/agents/NeuralAgentExtension.d.ts +117 -0
- package/dist/agents/NeuralAgentExtension.d.ts.map +1 -0
- package/dist/agents/NeuralAgentExtension.js +288 -0
- package/dist/agents/NeuralAgentExtension.js.map +1 -0
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +4 -3
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +7 -7
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js +2 -2
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.js +5 -5
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +7 -7
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.js +1 -1
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +6 -6
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +1 -3
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +53 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +372 -31
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/mixins/NeuralCapableMixin.d.ts +130 -0
- package/dist/agents/mixins/NeuralCapableMixin.d.ts.map +1 -0
- package/dist/agents/mixins/NeuralCapableMixin.js +358 -0
- package/dist/agents/mixins/NeuralCapableMixin.js.map +1 -0
- package/dist/agents/mixins/QUICCapableMixin.d.ts +34 -0
- package/dist/agents/mixins/QUICCapableMixin.d.ts.map +1 -0
- package/dist/agents/mixins/QUICCapableMixin.js +346 -0
- package/dist/agents/mixins/QUICCapableMixin.js.map +1 -0
- package/dist/cli/commands/agent/index.d.ts +5 -0
- package/dist/cli/commands/agent/index.d.ts.map +1 -1
- package/dist/cli/commands/agent/index.js +11 -6
- package/dist/cli/commands/agent/index.js.map +1 -1
- package/dist/cli/commands/agent/kill.d.ts +13 -0
- package/dist/cli/commands/agent/kill.d.ts.map +1 -0
- package/dist/cli/commands/agent/kill.js +65 -0
- package/dist/cli/commands/agent/kill.js.map +1 -0
- package/dist/cli/commands/agent/list.d.ts +19 -0
- package/dist/cli/commands/agent/list.d.ts.map +1 -0
- package/dist/cli/commands/agent/list.js +92 -0
- package/dist/cli/commands/agent/list.js.map +1 -0
- package/dist/cli/commands/agent/logs.d.ts +14 -0
- package/dist/cli/commands/agent/logs.d.ts.map +1 -0
- package/dist/cli/commands/agent/logs.js +77 -0
- package/dist/cli/commands/agent/logs.js.map +1 -0
- package/dist/cli/commands/agent/metrics.d.ts +21 -0
- package/dist/cli/commands/agent/metrics.d.ts.map +1 -0
- package/dist/cli/commands/agent/metrics.js +87 -0
- package/dist/cli/commands/agent/metrics.js.map +1 -0
- package/dist/cli/commands/agent/spawn.d.ts +28 -0
- package/dist/cli/commands/agent/spawn.d.ts.map +1 -0
- package/dist/cli/commands/agent/spawn.js +83 -0
- package/dist/cli/commands/agent/spawn.js.map +1 -0
- package/dist/cli/commands/improve/index.d.ts +70 -0
- package/dist/cli/commands/improve/index.d.ts.map +1 -0
- package/dist/cli/commands/improve/index.js +530 -0
- package/dist/cli/commands/improve/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +57 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +1127 -42
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +68 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -0
- package/dist/cli/commands/learn/index.js +431 -0
- package/dist/cli/commands/learn/index.js.map +1 -0
- package/dist/cli/commands/patterns/index.d.ts +75 -0
- package/dist/cli/commands/patterns/index.d.ts.map +1 -0
- package/dist/cli/commands/patterns/index.js +502 -0
- package/dist/cli/commands/patterns/index.js.map +1 -0
- package/dist/cli/commands/skills/index.d.ts +51 -0
- package/dist/cli/commands/skills/index.d.ts.map +1 -0
- package/dist/cli/commands/skills/index.js +364 -0
- package/dist/cli/commands/skills/index.js.map +1 -0
- package/dist/cli/index.js +458 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/core/EventBus.d.ts +38 -0
- package/dist/core/EventBus.d.ts.map +1 -1
- package/dist/core/EventBus.js +176 -31
- package/dist/core/EventBus.js.map +1 -1
- package/dist/core/FleetManager.d.ts +35 -1
- package/dist/core/FleetManager.d.ts.map +1 -1
- package/dist/core/FleetManager.js +121 -45
- package/dist/core/FleetManager.js.map +1 -1
- package/dist/core/MemoryManager.d.ts +19 -1
- package/dist/core/MemoryManager.d.ts.map +1 -1
- package/dist/core/MemoryManager.js +25 -1
- package/dist/core/MemoryManager.js.map +1 -1
- package/dist/core/embeddings/EmbeddingCache.d.ts +134 -0
- package/dist/core/embeddings/EmbeddingCache.d.ts.map +1 -0
- package/dist/core/embeddings/EmbeddingCache.js +239 -0
- package/dist/core/embeddings/EmbeddingCache.js.map +1 -0
- package/dist/core/embeddings/EmbeddingGenerator.d.ts +224 -0
- package/dist/core/embeddings/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/core/embeddings/EmbeddingGenerator.js +459 -0
- package/dist/core/embeddings/EmbeddingGenerator.js.map +1 -0
- package/dist/core/embeddings/index.d.ts +15 -0
- package/dist/core/embeddings/index.d.ts.map +1 -0
- package/dist/core/embeddings/index.js +22 -0
- package/dist/core/embeddings/index.js.map +1 -0
- package/dist/core/memory/AgentDBIntegration.d.ts +35 -0
- package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -0
- package/dist/core/memory/AgentDBIntegration.js +75 -0
- package/dist/core/memory/AgentDBIntegration.js.map +1 -0
- package/dist/core/memory/AgentDBManager.d.ts +200 -0
- package/dist/core/memory/AgentDBManager.d.ts.map +1 -0
- package/dist/core/memory/AgentDBManager.js +263 -0
- package/dist/core/memory/AgentDBManager.js.map +1 -0
- package/dist/core/memory/AgentDBService.d.ts +160 -0
- package/dist/core/memory/AgentDBService.d.ts.map +1 -0
- package/dist/core/memory/AgentDBService.js +450 -0
- package/dist/core/memory/AgentDBService.js.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts +51 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.js +230 -0
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -0
- package/dist/core/memory/ReasoningBankAdapter.d.ts +58 -0
- package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -0
- package/dist/core/memory/ReasoningBankAdapter.js +80 -0
- package/dist/core/memory/ReasoningBankAdapter.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +79 -2
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +243 -52
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +4 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +9 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/neural/NeuralTrainer.d.ts +137 -0
- package/dist/core/neural/NeuralTrainer.d.ts.map +1 -0
- package/dist/core/neural/NeuralTrainer.js +543 -0
- package/dist/core/neural/NeuralTrainer.js.map +1 -0
- package/dist/core/neural/index.d.ts +8 -0
- package/dist/core/neural/index.d.ts.map +1 -0
- package/dist/core/neural/index.js +24 -0
- package/dist/core/neural/index.js.map +1 -0
- package/dist/core/neural/types.d.ts +216 -0
- package/dist/core/neural/types.d.ts.map +1 -0
- package/dist/core/neural/types.js +8 -0
- package/dist/core/neural/types.js.map +1 -0
- package/dist/core/security/CertificateValidator.d.ts +130 -0
- package/dist/core/security/CertificateValidator.d.ts.map +1 -0
- package/dist/core/security/CertificateValidator.js +376 -0
- package/dist/core/security/CertificateValidator.js.map +1 -0
- package/dist/core/transport/QUICTransport.d.ts +62 -0
- package/dist/core/transport/QUICTransport.d.ts.map +1 -0
- package/dist/core/transport/QUICTransport.js +381 -0
- package/dist/core/transport/QUICTransport.js.map +1 -0
- package/dist/core/transport/SecureQUICTransport.d.ts +71 -0
- package/dist/core/transport/SecureQUICTransport.d.ts.map +1 -0
- package/dist/core/transport/SecureQUICTransport.js +253 -0
- package/dist/core/transport/SecureQUICTransport.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/AdvancedFeatureExtractor.d.ts +123 -0
- package/dist/learning/AdvancedFeatureExtractor.d.ts.map +1 -0
- package/dist/learning/AdvancedFeatureExtractor.js +423 -0
- package/dist/learning/AdvancedFeatureExtractor.js.map +1 -0
- package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
- package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
- package/dist/learning/FlakyFixRecommendations.js +247 -0
- package/dist/learning/FlakyFixRecommendations.js.map +1 -0
- package/dist/learning/FlakyPredictionModel.d.ts +67 -0
- package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
- package/dist/learning/FlakyPredictionModel.js +336 -0
- package/dist/learning/FlakyPredictionModel.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +55 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
- package/dist/learning/FlakyTestDetector.js +237 -0
- package/dist/learning/FlakyTestDetector.js.map +1 -0
- package/dist/learning/ImprovementLoop.d.ts +133 -0
- package/dist/learning/ImprovementLoop.d.ts.map +1 -0
- package/dist/learning/ImprovementLoop.js +412 -0
- package/dist/learning/ImprovementLoop.js.map +1 -0
- package/dist/learning/ImprovementWorker.d.ts +83 -0
- package/dist/learning/ImprovementWorker.d.ts.map +1 -0
- package/dist/learning/ImprovementWorker.js +164 -0
- package/dist/learning/ImprovementWorker.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +144 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -0
- package/dist/learning/LearningEngine.js +531 -0
- package/dist/learning/LearningEngine.js.map +1 -0
- package/dist/learning/NeuralPatternMatcher.d.ts +184 -0
- package/dist/learning/NeuralPatternMatcher.d.ts.map +1 -0
- package/dist/learning/NeuralPatternMatcher.js +702 -0
- package/dist/learning/NeuralPatternMatcher.js.map +1 -0
- package/dist/learning/NeuralTrainer.d.ts +209 -0
- package/dist/learning/NeuralTrainer.d.ts.map +1 -0
- package/dist/learning/NeuralTrainer.js +478 -0
- package/dist/learning/NeuralTrainer.js.map +1 -0
- package/dist/learning/PerformanceTracker.d.ts +118 -0
- package/dist/learning/PerformanceTracker.d.ts.map +1 -0
- package/dist/learning/PerformanceTracker.js +376 -0
- package/dist/learning/PerformanceTracker.js.map +1 -0
- package/dist/learning/StatisticalAnalysis.d.ts +47 -0
- package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
- package/dist/learning/StatisticalAnalysis.js +170 -0
- package/dist/learning/StatisticalAnalysis.js.map +1 -0
- package/dist/learning/SwarmIntegration.d.ts +107 -0
- package/dist/learning/SwarmIntegration.d.ts.map +1 -0
- package/dist/learning/SwarmIntegration.js +191 -0
- package/dist/learning/SwarmIntegration.js.map +1 -0
- package/dist/learning/index.d.ts +16 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +32 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/types.d.ts +289 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +25 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/mcp/MCPToolRegistry.d.ts +34 -0
- package/dist/mcp/MCPToolRegistry.d.ts.map +1 -0
- package/dist/mcp/MCPToolRegistry.js +48 -0
- package/dist/mcp/MCPToolRegistry.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -4
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +94 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +7 -1
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/tools.d.ts +15 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +17 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
- package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
- package/dist/reasoning/CodeSignatureGenerator.js +427 -0
- package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
- package/dist/reasoning/PatternClassifier.d.ts +98 -0
- package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
- package/dist/reasoning/PatternClassifier.js +345 -0
- package/dist/reasoning/PatternClassifier.js.map +1 -0
- package/dist/reasoning/PatternExtractor.d.ts +131 -0
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
- package/dist/reasoning/PatternExtractor.js +539 -0
- package/dist/reasoning/PatternExtractor.js.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.js +336 -0
- package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +121 -0
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
- package/dist/reasoning/QEReasoningBank.js +235 -0
- package/dist/reasoning/QEReasoningBank.js.map +1 -0
- package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
- package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
- package/dist/reasoning/TestTemplateCreator.js +535 -0
- package/dist/reasoning/TestTemplateCreator.js.map +1 -0
- package/dist/reasoning/index.d.ts +10 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/index.js +31 -0
- package/dist/reasoning/index.js.map +1 -0
- package/dist/reasoning/types.d.ts +717 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reasoning/types.js +57 -0
- package/dist/reasoning/types.js.map +1 -0
- package/dist/transport/QUICTransport.d.ts +340 -0
- package/dist/transport/QUICTransport.d.ts.map +1 -0
- package/dist/transport/QUICTransport.js +814 -0
- package/dist/transport/QUICTransport.js.map +1 -0
- package/dist/transport/UDPTransport.d.ts +348 -0
- package/dist/transport/UDPTransport.d.ts.map +1 -0
- package/dist/transport/UDPTransport.js +820 -0
- package/dist/transport/UDPTransport.js.map +1 -0
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/index.d.ts +41 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/pattern.types.d.ts +364 -0
- package/dist/types/pattern.types.d.ts.map +1 -0
- package/dist/types/pattern.types.js +60 -0
- package/dist/types/pattern.types.js.map +1 -0
- package/dist/types/quic.d.ts +339 -0
- package/dist/types/quic.d.ts.map +1 -0
- package/dist/types/quic.js +48 -0
- package/dist/types/quic.js.map +1 -0
- package/dist/utils/Config.js +1 -1
- package/dist/utils/Config.js.map +1 -1
- package/dist/utils/Database.d.ts +14 -0
- package/dist/utils/Database.d.ts.map +1 -1
- package/dist/utils/Database.js +51 -4
- package/dist/utils/Database.js.map +1 -1
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +111 -26
- package/dist/utils/Logger.js.map +1 -1
- package/package.json +54 -9
|
@@ -44,7 +44,7 @@ const fs = __importStar(require("fs-extra"));
|
|
|
44
44
|
const path = __importStar(require("path"));
|
|
45
45
|
class InitCommand {
|
|
46
46
|
static async execute(options) {
|
|
47
|
-
console.log(chalk_1.default.blue.bold('\nš Initializing Agentic QE
|
|
47
|
+
console.log(chalk_1.default.blue.bold('\nš Initializing Agentic QE Project (v1.2.0)\n'));
|
|
48
48
|
try {
|
|
49
49
|
// Parse options
|
|
50
50
|
const maxAgents = parseInt(options.maxAgents);
|
|
@@ -84,8 +84,9 @@ class InitCommand {
|
|
|
84
84
|
timeout: 1800000
|
|
85
85
|
}
|
|
86
86
|
};
|
|
87
|
-
// Interactive project setup if needed
|
|
88
|
-
|
|
87
|
+
// Interactive project setup if needed (skip if --non-interactive or --yes)
|
|
88
|
+
const isNonInteractive = options.nonInteractive || options.yes;
|
|
89
|
+
if (!options.config && !isNonInteractive) {
|
|
89
90
|
const projectAnswers = await inquirer_1.default.prompt([
|
|
90
91
|
{
|
|
91
92
|
type: 'input',
|
|
@@ -138,6 +139,34 @@ class InitCommand {
|
|
|
138
139
|
if (fleetConfig.streaming) {
|
|
139
140
|
fleetConfig.streaming.enabled = projectAnswers.enableStreaming;
|
|
140
141
|
}
|
|
142
|
+
// Enable Phase 2 features by default (no questions)
|
|
143
|
+
options.enableLearning = true;
|
|
144
|
+
options.enablePatterns = true;
|
|
145
|
+
options.enableImprovement = true;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
// Non-interactive mode: use defaults or environment variables
|
|
149
|
+
fleetConfig.project = {
|
|
150
|
+
name: process.env.AQE_PROJECT_NAME || path.basename(process.cwd()),
|
|
151
|
+
path: process.cwd(),
|
|
152
|
+
language: (process.env.AQE_LANGUAGE || 'typescript').toLowerCase()
|
|
153
|
+
};
|
|
154
|
+
// Use environment variables or defaults
|
|
155
|
+
if (fleetConfig.routing) {
|
|
156
|
+
fleetConfig.routing.enabled = process.env.AQE_ROUTING_ENABLED === 'true' || false;
|
|
157
|
+
}
|
|
158
|
+
if (fleetConfig.streaming) {
|
|
159
|
+
fleetConfig.streaming.enabled = process.env.AQE_STREAMING_ENABLED !== 'false';
|
|
160
|
+
}
|
|
161
|
+
// Use defaults if non-interactive
|
|
162
|
+
options.enableLearning = process.env.AQE_LEARNING_ENABLED !== 'false';
|
|
163
|
+
options.enablePatterns = process.env.AQE_PATTERNS_ENABLED !== 'false';
|
|
164
|
+
options.enableImprovement = process.env.AQE_IMPROVEMENT_ENABLED !== 'false';
|
|
165
|
+
console.log(chalk_1.default.gray(' ā¹ļø Running in non-interactive mode with defaults'));
|
|
166
|
+
console.log(chalk_1.default.gray(` ⢠Project: ${fleetConfig.project.name}`));
|
|
167
|
+
console.log(chalk_1.default.gray(` ⢠Language: ${fleetConfig.project.language}`));
|
|
168
|
+
console.log(chalk_1.default.gray(` ⢠Routing: ${fleetConfig.routing?.enabled ? 'enabled' : 'disabled'}`));
|
|
169
|
+
console.log(chalk_1.default.gray(` ⢠Streaming: ${fleetConfig.streaming?.enabled ? 'enabled' : 'disabled'}`));
|
|
141
170
|
}
|
|
142
171
|
const spinner = (0, ora_1.default)('Setting up fleet infrastructure...').start();
|
|
143
172
|
// Create directory structure
|
|
@@ -153,8 +182,28 @@ class InitCommand {
|
|
|
153
182
|
spinner.text = 'Creating CLAUDE.md documentation...';
|
|
154
183
|
// Create or update CLAUDE.md with agent documentation
|
|
155
184
|
await this.createClaudeMd(fleetConfig);
|
|
185
|
+
// Initialize Claude Flow coordination
|
|
186
|
+
await this.initializeCoordination(fleetConfig);
|
|
187
|
+
// Phase 2: Initialize memory database FIRST (required for agents)
|
|
188
|
+
spinner.text = 'Initializing memory database...';
|
|
189
|
+
await this.initializeMemoryDatabase();
|
|
190
|
+
// Phase 2: Initialize pattern bank database
|
|
191
|
+
if (options.enablePatterns !== false) {
|
|
192
|
+
spinner.text = 'Initializing pattern bank database...';
|
|
193
|
+
await this.initializePatternDatabase(fleetConfig);
|
|
194
|
+
}
|
|
195
|
+
// Phase 2: Initialize learning system
|
|
196
|
+
if (options.enableLearning !== false) {
|
|
197
|
+
spinner.text = 'Initializing learning system...';
|
|
198
|
+
await this.initializeLearningSystem(fleetConfig);
|
|
199
|
+
}
|
|
200
|
+
// Phase 2: Initialize improvement loop
|
|
201
|
+
if (options.enableImprovement !== false) {
|
|
202
|
+
spinner.text = 'Setting up improvement loop...';
|
|
203
|
+
await this.initializeImprovementLoop(fleetConfig);
|
|
204
|
+
}
|
|
205
|
+
// Now spawn agents AFTER databases are initialized
|
|
156
206
|
spinner.text = 'Spawning initial agents...';
|
|
157
|
-
// Spawn initial fleet agents
|
|
158
207
|
await this.spawnInitialAgents(fleetConfig);
|
|
159
208
|
spinner.succeed(chalk_1.default.green('Fleet initialization completed successfully!'));
|
|
160
209
|
// Display summary
|
|
@@ -167,19 +216,25 @@ class InitCommand {
|
|
|
167
216
|
// Show agent status
|
|
168
217
|
const agentCount = await this.countAgentFiles('.claude/agents');
|
|
169
218
|
console.log(chalk_1.default.gray(` Agent Definitions: ${agentCount} agents ready`));
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
219
|
+
// Create comprehensive config.json
|
|
220
|
+
spinner.text = 'Creating comprehensive configuration...';
|
|
221
|
+
await this.createComprehensiveConfig(fleetConfig, {
|
|
222
|
+
enableLearning: options.enableLearning !== false,
|
|
223
|
+
enablePatterns: options.enablePatterns !== false,
|
|
224
|
+
enableImprovement: options.enableImprovement !== false
|
|
225
|
+
});
|
|
226
|
+
spinner.succeed(chalk_1.default.green('Project initialization completed successfully!'));
|
|
227
|
+
// Display comprehensive summary
|
|
228
|
+
await this.displayComprehensiveSummary(fleetConfig, {
|
|
229
|
+
enableLearning: options.enableLearning !== false,
|
|
230
|
+
enablePatterns: options.enablePatterns !== false,
|
|
231
|
+
enableImprovement: options.enableImprovement !== false
|
|
232
|
+
});
|
|
177
233
|
}
|
|
178
234
|
catch (error) {
|
|
179
235
|
console.error(chalk_1.default.red('ā Initialization failed:'), error.message);
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
236
|
+
console.error(chalk_1.default.gray('\nStack trace:'));
|
|
237
|
+
console.error(chalk_1.default.gray(error.stack));
|
|
183
238
|
process.exit(1);
|
|
184
239
|
}
|
|
185
240
|
}
|
|
@@ -189,10 +244,18 @@ class InitCommand {
|
|
|
189
244
|
'.agentic-qe/config',
|
|
190
245
|
'.agentic-qe/logs',
|
|
191
246
|
'.agentic-qe/data',
|
|
247
|
+
'.agentic-qe/data/learning', // Phase 2: Learning state
|
|
248
|
+
'.agentic-qe/data/patterns', // Phase 2: Pattern database
|
|
249
|
+
'.agentic-qe/data/improvement', // Phase 2: Improvement state
|
|
192
250
|
'.agentic-qe/agents',
|
|
193
251
|
'.agentic-qe/reports',
|
|
252
|
+
'.agentic-qe/scripts', // For coordination scripts
|
|
253
|
+
'.agentic-qe/state', // For state management
|
|
254
|
+
'.agentic-qe/state/coordination', // Coordination state
|
|
194
255
|
'.claude', // For Claude Code integration
|
|
195
256
|
'.claude/agents', // Where agent definitions live
|
|
257
|
+
'.claude/skills', // Where QE skill definitions live (17 QE skills only)
|
|
258
|
+
'.claude/commands', // Where AQE slash commands live (8 commands)
|
|
196
259
|
'tests/unit',
|
|
197
260
|
'tests/integration',
|
|
198
261
|
'tests/e2e',
|
|
@@ -204,49 +267,109 @@ class InitCommand {
|
|
|
204
267
|
}
|
|
205
268
|
// Copy agent templates from agentic-qe package
|
|
206
269
|
await this.copyAgentTemplates();
|
|
270
|
+
// Copy skill templates (only QE Fleet skills, not Claude Flow)
|
|
271
|
+
await this.copySkillTemplates();
|
|
272
|
+
// Copy command templates (8 AQE slash commands)
|
|
273
|
+
await this.copyCommandTemplates();
|
|
207
274
|
}
|
|
208
275
|
static async copyAgentTemplates() {
|
|
276
|
+
console.log(chalk_1.default.cyan(' š Searching for agent templates...'));
|
|
209
277
|
// Find the agentic-qe package location (handles both npm install and local dev)
|
|
210
278
|
const possiblePaths = [
|
|
211
279
|
path.join(__dirname, '../../../.claude/agents'), // From dist/cli/commands
|
|
212
280
|
path.join(process.cwd(), 'node_modules/agentic-qe/.claude/agents'),
|
|
213
281
|
path.join(process.cwd(), '../agentic-qe/.claude/agents') // Monorepo case
|
|
214
282
|
];
|
|
283
|
+
console.log(chalk_1.default.gray(' ⢠Checking paths:'));
|
|
215
284
|
let sourcePath = null;
|
|
216
285
|
for (const p of possiblePaths) {
|
|
217
|
-
|
|
286
|
+
const exists = await fs.pathExists(p);
|
|
287
|
+
console.log(chalk_1.default.gray(` ${exists ? 'ā' : 'ā'} ${p}`));
|
|
288
|
+
if (exists && !sourcePath) {
|
|
218
289
|
sourcePath = p;
|
|
219
|
-
break;
|
|
220
290
|
}
|
|
221
291
|
}
|
|
222
292
|
if (!sourcePath) {
|
|
223
|
-
console.warn(chalk_1.default.yellow('ā ļø
|
|
293
|
+
console.warn(chalk_1.default.yellow(' ā ļø No agent templates found in package paths'));
|
|
294
|
+
console.warn(chalk_1.default.yellow(' ā¹ļø Falling back to programmatic generation (all 18 agents)'));
|
|
224
295
|
await this.createBasicAgents();
|
|
225
296
|
return;
|
|
226
297
|
}
|
|
227
|
-
|
|
298
|
+
console.log(chalk_1.default.green(` ā Found agent templates at: ${sourcePath}`));
|
|
299
|
+
// Count available templates
|
|
300
|
+
const availableFiles = await fs.readdir(sourcePath);
|
|
301
|
+
const templateFiles = availableFiles.filter(f => f.endsWith('.md'));
|
|
302
|
+
console.log(chalk_1.default.cyan(` š¦ Found ${templateFiles.length} agent templates to copy`));
|
|
303
|
+
// Copy all agent definition files individually (not directory copy)
|
|
228
304
|
const targetPath = path.join(process.cwd(), '.claude/agents');
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
305
|
+
let copiedFiles = 0;
|
|
306
|
+
for (const templateFile of templateFiles) {
|
|
307
|
+
const sourceFile = path.join(sourcePath, templateFile);
|
|
308
|
+
const targetFile = path.join(targetPath, templateFile);
|
|
309
|
+
// Only copy if target doesn't exist
|
|
310
|
+
if (!await fs.pathExists(targetFile)) {
|
|
311
|
+
await fs.copy(sourceFile, targetFile);
|
|
312
|
+
copiedFiles++;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
console.log(chalk_1.default.green(` ā Copied ${copiedFiles} new agent definitions`));
|
|
316
|
+
const copiedCount = await this.countAgentFiles(targetPath);
|
|
317
|
+
console.log(chalk_1.default.cyan(` š Total agents in target: ${copiedCount}`));
|
|
318
|
+
// Verify all 18 agents exist (17 QE agents + 1 base template generator)
|
|
319
|
+
const expectedAgents = 18;
|
|
320
|
+
if (copiedCount < expectedAgents) {
|
|
321
|
+
console.warn(chalk_1.default.yellow(` ā ļø Expected ${expectedAgents} agents, found ${copiedCount}`));
|
|
322
|
+
console.warn(chalk_1.default.yellow(` ā¹ļø Creating missing agents programmatically...`));
|
|
323
|
+
// Get list of files that actually exist in TARGET (not source!)
|
|
324
|
+
const targetFiles = await fs.readdir(targetPath);
|
|
325
|
+
const existingTargetFiles = targetFiles.filter(f => f.endsWith('.md'));
|
|
326
|
+
await this.createMissingAgents(targetPath, existingTargetFiles);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
console.log(chalk_1.default.green(` ā All ${expectedAgents} agents present and ready`));
|
|
330
|
+
}
|
|
234
331
|
}
|
|
235
332
|
static async createBasicAgents() {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
333
|
+
try {
|
|
334
|
+
console.log(chalk_1.default.cyan(' š ļø Creating all agent definitions programmatically...'));
|
|
335
|
+
// ALL 18 AGENTS (17 QE agents + 1 base template generator)
|
|
336
|
+
const allAgents = [
|
|
337
|
+
// Core Testing (5)
|
|
338
|
+
'qe-test-generator',
|
|
339
|
+
'qe-test-executor',
|
|
340
|
+
'qe-coverage-analyzer',
|
|
341
|
+
'qe-quality-gate',
|
|
342
|
+
'qe-quality-analyzer',
|
|
343
|
+
// Performance & Security (2)
|
|
344
|
+
'qe-performance-tester',
|
|
345
|
+
'qe-security-scanner',
|
|
346
|
+
// Strategic Planning (3)
|
|
347
|
+
'qe-requirements-validator',
|
|
348
|
+
'qe-production-intelligence',
|
|
349
|
+
'qe-fleet-commander',
|
|
350
|
+
// Deployment (1)
|
|
351
|
+
'qe-deployment-readiness',
|
|
352
|
+
// Advanced Testing (4)
|
|
353
|
+
'qe-regression-risk-analyzer',
|
|
354
|
+
'qe-test-data-architect',
|
|
355
|
+
'qe-api-contract-validator',
|
|
356
|
+
'qe-flaky-test-hunter',
|
|
357
|
+
// Specialized (2)
|
|
358
|
+
'qe-visual-tester',
|
|
359
|
+
'qe-chaos-engineer'
|
|
360
|
+
];
|
|
361
|
+
const targetPath = path.join(process.cwd(), '.claude/agents');
|
|
362
|
+
console.log(chalk_1.default.gray(` ⢠Creating ${allAgents.length} agent definition files...`));
|
|
363
|
+
for (const agentName of allAgents) {
|
|
364
|
+
// Defensive null check
|
|
365
|
+
if (!agentName || typeof agentName !== 'string') {
|
|
366
|
+
console.warn(chalk_1.default.yellow(`ā ļø Skipping invalid agent name: ${agentName}`));
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
const agentFile = path.join(targetPath, `${agentName}.md`);
|
|
370
|
+
const agentType = agentName.replace('qe-', '');
|
|
371
|
+
const skills = this.getAgentSkills(agentName);
|
|
372
|
+
const content = `---
|
|
250
373
|
name: ${agentName}
|
|
251
374
|
type: ${agentType}
|
|
252
375
|
color: blue
|
|
@@ -254,13 +377,22 @@ priority: medium
|
|
|
254
377
|
description: "Agentic QE Fleet ${agentType} agent"
|
|
255
378
|
capabilities:
|
|
256
379
|
- ${agentType}
|
|
380
|
+
skills:
|
|
381
|
+
${skills.map(s => ` - ${s}`).join('\n')}
|
|
257
382
|
coordination:
|
|
258
383
|
protocol: aqe-hooks
|
|
384
|
+
learning:
|
|
385
|
+
enabled: true
|
|
386
|
+
observability:
|
|
387
|
+
- agent.getLearningStatus()
|
|
388
|
+
- agent.getLearnedPatterns()
|
|
389
|
+
- agent.recommendStrategy(state)
|
|
259
390
|
metadata:
|
|
260
|
-
version: "1.0
|
|
391
|
+
version: "1.1.0"
|
|
261
392
|
framework: "agentic-qe"
|
|
262
393
|
routing: "supported"
|
|
263
394
|
streaming: "supported"
|
|
395
|
+
phase2: "q-learning-enabled"
|
|
264
396
|
---
|
|
265
397
|
|
|
266
398
|
# ${agentName.toUpperCase()} Agent
|
|
@@ -272,6 +404,68 @@ This agent is part of the Agentic QE Fleet and specializes in ${agentType}.
|
|
|
272
404
|
- AI-powered ${agentType}
|
|
273
405
|
- Integration with Agentic QE Fleet
|
|
274
406
|
- Native TypeScript coordination
|
|
407
|
+
- **Q-Learning**: Learns from task execution automatically
|
|
408
|
+
- **Pattern Bank**: Uses proven test patterns
|
|
409
|
+
- **Improvement Loop**: Continuously optimizes strategies
|
|
410
|
+
|
|
411
|
+
## š§ Q-Learning Integration (Phase 2)
|
|
412
|
+
|
|
413
|
+
This agent automatically learns from EVERY task execution through Q-learning integration in \`BaseAgent.onPostTask()\`.
|
|
414
|
+
|
|
415
|
+
### Observability Methods
|
|
416
|
+
|
|
417
|
+
\`\`\`typescript
|
|
418
|
+
// 1. Check learning status
|
|
419
|
+
const status = agent.getLearningStatus();
|
|
420
|
+
console.log(status);
|
|
421
|
+
// {
|
|
422
|
+
// enabled: true,
|
|
423
|
+
// totalExperiences: 1247,
|
|
424
|
+
// explorationRate: 0.08,
|
|
425
|
+
// patterns: 34
|
|
426
|
+
// }
|
|
427
|
+
|
|
428
|
+
// 2. View learned patterns
|
|
429
|
+
const patterns = agent.getLearnedPatterns();
|
|
430
|
+
console.log(patterns[0]);
|
|
431
|
+
// {
|
|
432
|
+
// state: { taskComplexity: 'high', ... },
|
|
433
|
+
// action: 'thorough-deep-analysis',
|
|
434
|
+
// qValue: 0.8734,
|
|
435
|
+
// successRate: 0.88
|
|
436
|
+
// }
|
|
437
|
+
|
|
438
|
+
// 3. Get strategy recommendations
|
|
439
|
+
const recommendation = await agent.recommendStrategy({
|
|
440
|
+
taskComplexity: 'medium',
|
|
441
|
+
availableCapabilities: agent.capabilities
|
|
442
|
+
});
|
|
443
|
+
console.log(recommendation);
|
|
444
|
+
// {
|
|
445
|
+
// action: 'balanced-coverage',
|
|
446
|
+
// confidence: 0.92,
|
|
447
|
+
// expectedQValue: 0.7845
|
|
448
|
+
// }
|
|
449
|
+
\`\`\`
|
|
450
|
+
|
|
451
|
+
### CLI Commands
|
|
452
|
+
|
|
453
|
+
\`\`\`bash
|
|
454
|
+
# Check learning status
|
|
455
|
+
aqe learn status --agent ${agentName}
|
|
456
|
+
|
|
457
|
+
# View learned patterns
|
|
458
|
+
aqe learn history --agent ${agentName} --limit 50
|
|
459
|
+
|
|
460
|
+
# Export learning data
|
|
461
|
+
aqe learn export --agent ${agentName} --output learning.json
|
|
462
|
+
\`\`\`
|
|
463
|
+
|
|
464
|
+
## Skills
|
|
465
|
+
|
|
466
|
+
This agent can use the following Claude Code Skills:
|
|
467
|
+
|
|
468
|
+
${this.getSkillDocumentation(agentName)}
|
|
275
469
|
|
|
276
470
|
## Coordination Protocol
|
|
277
471
|
|
|
@@ -402,10 +596,100 @@ for await (const event of agent.execute(params)) {
|
|
|
402
596
|
}
|
|
403
597
|
\\\`\\\`\\\`
|
|
404
598
|
|
|
599
|
+
For full capabilities, install the complete agentic-qe package.
|
|
600
|
+
`;
|
|
601
|
+
await fs.writeFile(agentFile, content);
|
|
602
|
+
console.log(chalk_1.default.gray(` ā Created ${agentName}.md`));
|
|
603
|
+
}
|
|
604
|
+
const finalCount = await this.countAgentFiles(targetPath);
|
|
605
|
+
console.log(chalk_1.default.green(` ā Successfully created ${finalCount} agent definitions`));
|
|
606
|
+
}
|
|
607
|
+
catch (error) {
|
|
608
|
+
console.error(chalk_1.default.red('ā Error in createBasicAgents:'), error.message);
|
|
609
|
+
console.error(chalk_1.default.gray('Stack trace:'), error.stack);
|
|
610
|
+
throw error;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
static async createMissingAgents(targetPath, existingFiles) {
|
|
614
|
+
const allAgentNames = [
|
|
615
|
+
'qe-test-generator', 'qe-test-executor', 'qe-coverage-analyzer',
|
|
616
|
+
'qe-quality-gate', 'qe-quality-analyzer', 'qe-performance-tester',
|
|
617
|
+
'qe-security-scanner', 'qe-requirements-validator', 'qe-production-intelligence',
|
|
618
|
+
'qe-fleet-commander', 'qe-deployment-readiness', 'qe-regression-risk-analyzer',
|
|
619
|
+
'qe-test-data-architect', 'qe-api-contract-validator', 'qe-flaky-test-hunter',
|
|
620
|
+
'qe-visual-tester', 'qe-chaos-engineer'
|
|
621
|
+
];
|
|
622
|
+
const existingAgentNames = existingFiles.map(f => f.replace('.md', ''));
|
|
623
|
+
const missingAgents = allAgentNames.filter(name => !existingAgentNames.includes(name));
|
|
624
|
+
if (missingAgents.length === 0) {
|
|
625
|
+
console.log(chalk_1.default.green(' ā No missing agents to create'));
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
console.log(chalk_1.default.cyan(` š ļø Creating ${missingAgents.length} missing agents:`));
|
|
629
|
+
for (const agentName of missingAgents) {
|
|
630
|
+
console.log(chalk_1.default.gray(` ⢠${agentName}`));
|
|
631
|
+
}
|
|
632
|
+
// Create missing agents using the same logic as createBasicAgents
|
|
633
|
+
for (const agentName of missingAgents) {
|
|
634
|
+
const agentFile = path.join(targetPath, `${agentName}.md`);
|
|
635
|
+
const agentType = agentName.replace('qe-', '');
|
|
636
|
+
const skills = this.getAgentSkills(agentName);
|
|
637
|
+
const content = `---
|
|
638
|
+
name: ${agentName}
|
|
639
|
+
type: ${agentType}
|
|
640
|
+
color: blue
|
|
641
|
+
priority: medium
|
|
642
|
+
description: "Agentic QE Fleet ${agentType} agent"
|
|
643
|
+
capabilities:
|
|
644
|
+
- ${agentType}
|
|
645
|
+
skills:
|
|
646
|
+
${skills.map(s => ` - ${s}`).join('\n')}
|
|
647
|
+
coordination:
|
|
648
|
+
protocol: aqe-hooks
|
|
649
|
+
learning:
|
|
650
|
+
enabled: true
|
|
651
|
+
observability:
|
|
652
|
+
- agent.getLearningStatus()
|
|
653
|
+
- agent.getLearnedPatterns()
|
|
654
|
+
- agent.recommendStrategy(state)
|
|
655
|
+
metadata:
|
|
656
|
+
version: "1.1.0"
|
|
657
|
+
framework: "agentic-qe"
|
|
658
|
+
routing: "supported"
|
|
659
|
+
streaming: "supported"
|
|
660
|
+
phase2: "q-learning-enabled"
|
|
661
|
+
---
|
|
662
|
+
|
|
663
|
+
# ${agentName.toUpperCase()} Agent
|
|
664
|
+
|
|
665
|
+
## Description
|
|
666
|
+
This agent is part of the Agentic QE Fleet and specializes in ${agentType}.
|
|
667
|
+
|
|
668
|
+
## Capabilities
|
|
669
|
+
- AI-powered ${agentType}
|
|
670
|
+
- Integration with Agentic QE Fleet
|
|
671
|
+
- Native TypeScript coordination
|
|
672
|
+
- **Q-Learning**: Learns from task execution automatically
|
|
673
|
+
- **Pattern Bank**: Uses proven test patterns
|
|
674
|
+
- **Improvement Loop**: Continuously optimizes strategies
|
|
675
|
+
|
|
676
|
+
## Skills
|
|
677
|
+
|
|
678
|
+
This agent can use the following Claude Code Skills:
|
|
679
|
+
|
|
680
|
+
${this.getSkillDocumentation(agentName)}
|
|
681
|
+
|
|
682
|
+
## Coordination Protocol
|
|
683
|
+
|
|
684
|
+
This agent uses **AQE hooks** (Agentic QE native hooks) for coordination (zero external dependencies, 100-500x faster than external hooks).
|
|
685
|
+
|
|
405
686
|
For full capabilities, install the complete agentic-qe package.
|
|
406
687
|
`;
|
|
407
688
|
await fs.writeFile(agentFile, content);
|
|
689
|
+
console.log(chalk_1.default.gray(` ā Created ${agentName}.md`));
|
|
408
690
|
}
|
|
691
|
+
const finalCount = await this.countAgentFiles(targetPath);
|
|
692
|
+
console.log(chalk_1.default.green(` ā Total agent count: ${finalCount}`));
|
|
409
693
|
}
|
|
410
694
|
static async countAgentFiles(dirPath) {
|
|
411
695
|
if (!await fs.pathExists(dirPath))
|
|
@@ -413,17 +697,258 @@ For full capabilities, install the complete agentic-qe package.
|
|
|
413
697
|
const files = await fs.readdir(dirPath);
|
|
414
698
|
return files.filter(f => f.endsWith('.md')).length;
|
|
415
699
|
}
|
|
700
|
+
/**
|
|
701
|
+
* Copy only the 17 QE Fleet skills (filters out Claude Flow skills)
|
|
702
|
+
*/
|
|
703
|
+
static async copySkillTemplates() {
|
|
704
|
+
console.log(chalk_1.default.cyan(' šÆ Initializing QE Fleet skills...'));
|
|
705
|
+
// Define the 17 QE Fleet skills (from SKILLS-MAPPING.md)
|
|
706
|
+
const QE_FLEET_SKILLS = [
|
|
707
|
+
// Core Quality Practices (5)
|
|
708
|
+
'holistic-testing-pact',
|
|
709
|
+
'context-driven-testing',
|
|
710
|
+
'agentic-quality-engineering',
|
|
711
|
+
'exploratory-testing-advanced',
|
|
712
|
+
'risk-based-testing',
|
|
713
|
+
// Development Methodologies (3)
|
|
714
|
+
'tdd-london-chicago',
|
|
715
|
+
'xp-practices',
|
|
716
|
+
'refactoring-patterns',
|
|
717
|
+
// Testing Specializations (4)
|
|
718
|
+
'api-testing-patterns',
|
|
719
|
+
'performance-testing',
|
|
720
|
+
'security-testing',
|
|
721
|
+
'test-automation-strategy',
|
|
722
|
+
// Communication & Process (3)
|
|
723
|
+
'technical-writing',
|
|
724
|
+
'bug-reporting-excellence',
|
|
725
|
+
'code-review-quality',
|
|
726
|
+
// Professional Skills (2)
|
|
727
|
+
'consultancy-practices',
|
|
728
|
+
'quality-metrics'
|
|
729
|
+
];
|
|
730
|
+
// Find the agentic-qe package location
|
|
731
|
+
const possiblePaths = [
|
|
732
|
+
path.join(__dirname, '../../../.claude/skills'), // From dist/cli/commands
|
|
733
|
+
path.join(process.cwd(), 'node_modules/agentic-qe/.claude/skills'),
|
|
734
|
+
path.join(process.cwd(), '../agentic-qe/.claude/skills') // Monorepo case
|
|
735
|
+
];
|
|
736
|
+
console.log(chalk_1.default.gray(' ⢠Checking skill source paths:'));
|
|
737
|
+
let sourcePath = null;
|
|
738
|
+
for (const p of possiblePaths) {
|
|
739
|
+
const exists = await fs.pathExists(p);
|
|
740
|
+
console.log(chalk_1.default.gray(` ${exists ? 'ā' : 'ā'} ${p}`));
|
|
741
|
+
if (exists && !sourcePath) {
|
|
742
|
+
sourcePath = p;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
if (!sourcePath) {
|
|
746
|
+
console.warn(chalk_1.default.yellow(' ā ļø No skill templates found in package paths'));
|
|
747
|
+
console.warn(chalk_1.default.yellow(' ā¹ļø Skills can be added manually to .claude/skills/'));
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
console.log(chalk_1.default.green(` ā Found skill templates at: ${sourcePath}`));
|
|
751
|
+
// List all available skills
|
|
752
|
+
const availableDirs = await fs.readdir(sourcePath);
|
|
753
|
+
const availableSkills = availableDirs.filter(name => {
|
|
754
|
+
const skillPath = path.join(sourcePath, name);
|
|
755
|
+
try {
|
|
756
|
+
return fs.statSync(skillPath).isDirectory();
|
|
757
|
+
}
|
|
758
|
+
catch {
|
|
759
|
+
return false;
|
|
760
|
+
}
|
|
761
|
+
});
|
|
762
|
+
console.log(chalk_1.default.cyan(` š¦ Found ${availableSkills.length} total skills in source`));
|
|
763
|
+
// Filter to only QE Fleet skills
|
|
764
|
+
const qeSkillsToConfig = availableSkills.filter(skill => QE_FLEET_SKILLS.includes(skill));
|
|
765
|
+
console.log(chalk_1.default.cyan(` šÆ Filtering to ${qeSkillsToConfig.length} QE Fleet skills (excluding Claude Flow skills)`));
|
|
766
|
+
const targetPath = path.join(process.cwd(), '.claude/skills');
|
|
767
|
+
let copiedCount = 0;
|
|
768
|
+
// Copy each QE skill directory
|
|
769
|
+
for (const skillName of qeSkillsToConfig) {
|
|
770
|
+
const sourceSkillPath = path.join(sourcePath, skillName);
|
|
771
|
+
const targetSkillPath = path.join(targetPath, skillName);
|
|
772
|
+
// Skip if already exists
|
|
773
|
+
if (await fs.pathExists(targetSkillPath)) {
|
|
774
|
+
console.log(chalk_1.default.gray(` ⢠Skipped ${skillName} (already exists)`));
|
|
775
|
+
continue;
|
|
776
|
+
}
|
|
777
|
+
// Copy the entire skill directory
|
|
778
|
+
await fs.copy(sourceSkillPath, targetSkillPath);
|
|
779
|
+
copiedCount++;
|
|
780
|
+
console.log(chalk_1.default.gray(` ā Copied ${skillName}`));
|
|
781
|
+
}
|
|
782
|
+
// Final count
|
|
783
|
+
const finalSkillCount = await this.countSkillDirs(targetPath);
|
|
784
|
+
if (copiedCount > 0) {
|
|
785
|
+
console.log(chalk_1.default.green(` ā Copied ${copiedCount} new QE skills`));
|
|
786
|
+
}
|
|
787
|
+
else {
|
|
788
|
+
console.log(chalk_1.default.green(' ā All QE skills already present'));
|
|
789
|
+
}
|
|
790
|
+
console.log(chalk_1.default.cyan(` š Total QE skills initialized: ${finalSkillCount}`));
|
|
791
|
+
// Verify we have exactly 17 QE skills
|
|
792
|
+
if (finalSkillCount === 17) {
|
|
793
|
+
console.log(chalk_1.default.green(' ā
All 17 QE Fleet skills successfully initialized'));
|
|
794
|
+
}
|
|
795
|
+
else if (finalSkillCount < 17) {
|
|
796
|
+
console.warn(chalk_1.default.yellow(` ā ļø Expected 17 QE skills, found ${finalSkillCount}`));
|
|
797
|
+
const missingSkills = QE_FLEET_SKILLS.filter(skill => {
|
|
798
|
+
return !fs.existsSync(path.join(targetPath, skill));
|
|
799
|
+
});
|
|
800
|
+
console.warn(chalk_1.default.yellow(` ā¹ļø Missing skills: ${missingSkills.join(', ')}`));
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* Count skill directories in .claude/skills
|
|
805
|
+
*/
|
|
806
|
+
static async countSkillDirs(dirPath) {
|
|
807
|
+
if (!await fs.pathExists(dirPath))
|
|
808
|
+
return 0;
|
|
809
|
+
const items = await fs.readdir(dirPath);
|
|
810
|
+
let count = 0;
|
|
811
|
+
for (const item of items) {
|
|
812
|
+
const itemPath = path.join(dirPath, item);
|
|
813
|
+
try {
|
|
814
|
+
if (fs.statSync(itemPath).isDirectory()) {
|
|
815
|
+
count++;
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
catch {
|
|
819
|
+
// Ignore errors
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
return count;
|
|
823
|
+
}
|
|
824
|
+
/**
|
|
825
|
+
* Copy AQE slash command templates (8 commands)
|
|
826
|
+
*/
|
|
827
|
+
static async copyCommandTemplates() {
|
|
828
|
+
console.log(chalk_1.default.cyan(' ā” Initializing AQE slash commands...'));
|
|
829
|
+
// Define the 8 AQE slash commands
|
|
830
|
+
const AQE_COMMANDS = [
|
|
831
|
+
'aqe-analyze.md',
|
|
832
|
+
'aqe-benchmark.md',
|
|
833
|
+
'aqe-chaos.md',
|
|
834
|
+
'aqe-execute.md',
|
|
835
|
+
'aqe-fleet-status.md',
|
|
836
|
+
'aqe-generate.md',
|
|
837
|
+
'aqe-optimize.md',
|
|
838
|
+
'aqe-report.md'
|
|
839
|
+
];
|
|
840
|
+
// Find the agentic-qe package location
|
|
841
|
+
const possiblePaths = [
|
|
842
|
+
path.join(__dirname, '../../../.claude/commands'), // From dist/cli/commands
|
|
843
|
+
path.join(process.cwd(), 'node_modules/agentic-qe/.claude/commands'),
|
|
844
|
+
path.join(process.cwd(), '../agentic-qe/.claude/commands') // Monorepo case
|
|
845
|
+
];
|
|
846
|
+
console.log(chalk_1.default.gray(' ⢠Checking command source paths:'));
|
|
847
|
+
let sourcePath = null;
|
|
848
|
+
for (const p of possiblePaths) {
|
|
849
|
+
const exists = await fs.pathExists(p);
|
|
850
|
+
console.log(chalk_1.default.gray(` ${exists ? 'ā' : 'ā'} ${p}`));
|
|
851
|
+
if (exists && !sourcePath) {
|
|
852
|
+
sourcePath = p;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
if (!sourcePath) {
|
|
856
|
+
console.warn(chalk_1.default.yellow(' ā ļø No command templates found in package paths'));
|
|
857
|
+
console.warn(chalk_1.default.yellow(' ā¹ļø Commands can be added manually to .claude/commands/'));
|
|
858
|
+
return;
|
|
859
|
+
}
|
|
860
|
+
console.log(chalk_1.default.green(` ā Found command templates at: ${sourcePath}`));
|
|
861
|
+
const targetPath = path.join(process.cwd(), '.claude/commands');
|
|
862
|
+
let copiedCount = 0;
|
|
863
|
+
// Copy each AQE command file
|
|
864
|
+
for (const commandFile of AQE_COMMANDS) {
|
|
865
|
+
const sourceFile = path.join(sourcePath, commandFile);
|
|
866
|
+
const targetFile = path.join(targetPath, commandFile);
|
|
867
|
+
// Skip if already exists or if source doesn't exist
|
|
868
|
+
if (await fs.pathExists(targetFile)) {
|
|
869
|
+
console.log(chalk_1.default.gray(` ⢠Skipped ${commandFile} (already exists)`));
|
|
870
|
+
continue;
|
|
871
|
+
}
|
|
872
|
+
if (!await fs.pathExists(sourceFile)) {
|
|
873
|
+
console.log(chalk_1.default.gray(` ⢠Skipped ${commandFile} (source not found)`));
|
|
874
|
+
continue;
|
|
875
|
+
}
|
|
876
|
+
// Copy the command file
|
|
877
|
+
await fs.copy(sourceFile, targetFile);
|
|
878
|
+
copiedCount++;
|
|
879
|
+
console.log(chalk_1.default.gray(` ā Copied ${commandFile}`));
|
|
880
|
+
}
|
|
881
|
+
// Count final commands
|
|
882
|
+
const finalCommandCount = await this.countCommandFiles(targetPath);
|
|
883
|
+
if (copiedCount > 0) {
|
|
884
|
+
console.log(chalk_1.default.green(` ā Copied ${copiedCount} new AQE commands`));
|
|
885
|
+
}
|
|
886
|
+
else {
|
|
887
|
+
console.log(chalk_1.default.green(' ā All AQE commands already present'));
|
|
888
|
+
}
|
|
889
|
+
console.log(chalk_1.default.cyan(` š Total AQE commands initialized: ${finalCommandCount}`));
|
|
890
|
+
// Verify we have all 8 AQE commands
|
|
891
|
+
if (finalCommandCount >= 8) {
|
|
892
|
+
console.log(chalk_1.default.green(' ā
All 8 AQE slash commands successfully initialized'));
|
|
893
|
+
}
|
|
894
|
+
else if (finalCommandCount < 8) {
|
|
895
|
+
console.warn(chalk_1.default.yellow(` ā ļø Expected 8 AQE commands, found ${finalCommandCount}`));
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
/**
|
|
899
|
+
* Count command files in .claude/commands
|
|
900
|
+
*/
|
|
901
|
+
static async countCommandFiles(dirPath) {
|
|
902
|
+
if (!await fs.pathExists(dirPath))
|
|
903
|
+
return 0;
|
|
904
|
+
const items = await fs.readdir(dirPath);
|
|
905
|
+
return items.filter(f => f.startsWith('aqe-') && f.endsWith('.md')).length;
|
|
906
|
+
}
|
|
416
907
|
static async writeFleetConfig(config) {
|
|
908
|
+
console.log(chalk_1.default.cyan(' š Writing fleet configuration...'));
|
|
909
|
+
// Sanitize config to remove undefined values that cause jsonfile errors
|
|
910
|
+
const sanitizedConfig = this.sanitizeConfig(config);
|
|
417
911
|
const configPath = '.agentic-qe/config/fleet.json';
|
|
418
|
-
await fs.writeJson(configPath,
|
|
912
|
+
await fs.writeJson(configPath, sanitizedConfig, { spaces: 2 });
|
|
913
|
+
console.log(chalk_1.default.gray(` ā Wrote ${configPath}`));
|
|
419
914
|
// Create agent configurations
|
|
420
|
-
const agentConfigs = this.generateAgentConfigs(config);
|
|
915
|
+
const agentConfigs = this.sanitizeConfig(this.generateAgentConfigs(config));
|
|
421
916
|
await fs.writeJson('.agentic-qe/config/agents.json', agentConfigs, { spaces: 2 });
|
|
917
|
+
console.log(chalk_1.default.gray(` ā Wrote .agentic-qe/config/agents.json`));
|
|
422
918
|
// Create environment configurations
|
|
423
|
-
const envConfigs = this.generateEnvironmentConfigs(config.environments || []);
|
|
919
|
+
const envConfigs = this.sanitizeConfig(this.generateEnvironmentConfigs(config.environments || []));
|
|
424
920
|
await fs.writeJson('.agentic-qe/config/environments.json', envConfigs, { spaces: 2 });
|
|
921
|
+
console.log(chalk_1.default.gray(` ā Wrote .agentic-qe/config/environments.json`));
|
|
425
922
|
// Create routing configuration (Phase 1 - v1.0.5)
|
|
426
923
|
await this.writeRoutingConfig(config);
|
|
924
|
+
console.log(chalk_1.default.green(' ā Fleet configuration complete'));
|
|
925
|
+
}
|
|
926
|
+
/**
|
|
927
|
+
* Sanitize config object by removing undefined values and ensuring all properties are serializable
|
|
928
|
+
*/
|
|
929
|
+
static sanitizeConfig(obj) {
|
|
930
|
+
if (obj === null || obj === undefined) {
|
|
931
|
+
return null;
|
|
932
|
+
}
|
|
933
|
+
if (Array.isArray(obj)) {
|
|
934
|
+
return obj.map(item => this.sanitizeConfig(item)).filter(item => item !== null && item !== undefined);
|
|
935
|
+
}
|
|
936
|
+
if (typeof obj === 'object') {
|
|
937
|
+
const sanitized = {};
|
|
938
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
939
|
+
// Skip undefined values
|
|
940
|
+
if (value === undefined) {
|
|
941
|
+
continue;
|
|
942
|
+
}
|
|
943
|
+
// Recursively sanitize nested objects
|
|
944
|
+
const sanitizedValue = this.sanitizeConfig(value);
|
|
945
|
+
if (sanitizedValue !== null && sanitizedValue !== undefined) {
|
|
946
|
+
sanitized[key] = sanitizedValue;
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
return sanitized;
|
|
950
|
+
}
|
|
951
|
+
return obj;
|
|
427
952
|
}
|
|
428
953
|
static async writeRoutingConfig(config) {
|
|
429
954
|
const routingConfig = {
|
|
@@ -527,6 +1052,7 @@ For full capabilities, install the complete agentic-qe package.
|
|
|
527
1052
|
alerts: env === 'production'
|
|
528
1053
|
}
|
|
529
1054
|
};
|
|
1055
|
+
return configs;
|
|
530
1056
|
}, {});
|
|
531
1057
|
}
|
|
532
1058
|
static async setupClaudeFlowIntegration(config) {
|
|
@@ -576,6 +1102,9 @@ For full capabilities, install the complete agentic-qe package.
|
|
|
576
1102
|
await fs.writeJson('.agentic-qe/data/registry.json', agentRegistry, { spaces: 2 });
|
|
577
1103
|
}
|
|
578
1104
|
static async initializeCoordination(config) {
|
|
1105
|
+
// Ensure config has required properties
|
|
1106
|
+
const topology = config.topology || 'hierarchical';
|
|
1107
|
+
const maxAgents = config.maxAgents || 10;
|
|
579
1108
|
// Create pre-execution coordination script (AQE native)
|
|
580
1109
|
const preExecutionScript = `#!/bin/bash
|
|
581
1110
|
# Agentic QE Fleet Pre-Execution Coordination
|
|
@@ -585,7 +1114,7 @@ For full capabilities, install the complete agentic-qe package.
|
|
|
585
1114
|
agentic-qe fleet status --json > /tmp/aqe-fleet-status-pre.json 2>/dev/null || true
|
|
586
1115
|
|
|
587
1116
|
# Log coordination event
|
|
588
|
-
echo "[AQE] Pre-execution coordination: Fleet topology=${
|
|
1117
|
+
echo "[AQE] Pre-execution coordination: Fleet topology=${topology}, Max agents=${maxAgents}" >> .agentic-qe/logs/coordination.log
|
|
589
1118
|
|
|
590
1119
|
# Store fleet config in coordination memory (via file-based state)
|
|
591
1120
|
mkdir -p .agentic-qe/state/coordination
|
|
@@ -879,9 +1408,106 @@ for await (const event of handler.execute(params)) {
|
|
|
879
1408
|
- ā ļø Test generation (coming in v1.1.0)
|
|
880
1409
|
- ā ļø Security scanning (coming in v1.1.0)
|
|
881
1410
|
|
|
1411
|
+
## šÆ Claude Code Skills Integration
|
|
1412
|
+
|
|
1413
|
+
This fleet includes **17 specialized QE skills** that agents can use:
|
|
1414
|
+
|
|
1415
|
+
### Quality Engineering Skills (10 skills)
|
|
1416
|
+
- **agentic-quality-engineering**: Using AI agents as force multipliers in quality work - autonomous testing systems, PACT principles, scaling quality engineering with intelligent agents
|
|
1417
|
+
- **api-testing-patterns**: Comprehensive API testing patterns including contract testing, REST/GraphQL testing, and integration testing
|
|
1418
|
+
- **bug-reporting-excellence**: Write high-quality bug reports that get fixed quickly - includes templates, examples, and best practices
|
|
1419
|
+
- **context-driven-testing**: Apply context-driven testing principles where practices are chosen based on project context, not universal "best practices"
|
|
1420
|
+
- **exploratory-testing-advanced**: Advanced exploratory testing techniques with Session-Based Test Management (SBTM), RST heuristics, and test tours
|
|
1421
|
+
- **holistic-testing-pact**: Apply the Holistic Testing Model evolved with PACT (Proactive, Autonomous, Collaborative, Targeted) principles
|
|
1422
|
+
- **tdd-london-chicago**: Apply both London and Chicago school TDD approaches - understanding different TDD philosophies and choosing the right testing style
|
|
1423
|
+
- **pair-programming**: AI-assisted pair programming with multiple modes (driver/navigator/switch), real-time verification, quality monitoring
|
|
1424
|
+
- **verification-quality**: Comprehensive truth scoring, code quality verification, and automatic rollback system with 0.95 accuracy threshold
|
|
1425
|
+
- **xp-practices**: Apply XP practices including pair programming, ensemble programming, continuous integration, and sustainable pace
|
|
1426
|
+
|
|
1427
|
+
### AgentDB Skills (5 skills)
|
|
1428
|
+
- **agentdb-advanced**: Master advanced AgentDB features including QUIC synchronization, multi-database management, custom distance metrics, hybrid search
|
|
1429
|
+
- **agentdb-learning**: Create and train AI learning plugins with AgentDB's 9 reinforcement learning algorithms (Decision Transformer, Q-Learning, SARSA, Actor-Critic)
|
|
1430
|
+
- **agentdb-memory-patterns**: Implement persistent memory patterns for AI agents using AgentDB (session memory, long-term storage, pattern learning)
|
|
1431
|
+
- **agentdb-optimization**: Optimize AgentDB performance with quantization (4-32x memory reduction), HNSW indexing (150x faster search), caching
|
|
1432
|
+
- **agentdb-vector-search**: Implement semantic vector search with AgentDB for intelligent document retrieval, similarity matching, and context-aware querying
|
|
1433
|
+
|
|
1434
|
+
### Using Skills
|
|
1435
|
+
|
|
1436
|
+
#### Via CLI
|
|
1437
|
+
\\\`\\\`\\\`bash
|
|
1438
|
+
# List all available skills
|
|
1439
|
+
aqe skills list
|
|
1440
|
+
|
|
1441
|
+
# Search for specific skills
|
|
1442
|
+
aqe skills search "testing"
|
|
1443
|
+
|
|
1444
|
+
# Show skill details
|
|
1445
|
+
aqe skills show agentic-quality-engineering
|
|
1446
|
+
|
|
1447
|
+
# Show skill statistics
|
|
1448
|
+
aqe skills stats
|
|
1449
|
+
\\\`\\\`\\\`
|
|
1450
|
+
|
|
1451
|
+
#### Via Skill Tool in Claude Code
|
|
1452
|
+
\\\`\\\`\\\`javascript
|
|
1453
|
+
// Execute a skill
|
|
1454
|
+
Skill("agentic-quality-engineering")
|
|
1455
|
+
Skill("tdd-london-chicago")
|
|
1456
|
+
Skill("api-testing-patterns")
|
|
1457
|
+
\\\`\\\`\\\`
|
|
1458
|
+
|
|
1459
|
+
#### Integration with Agents
|
|
1460
|
+
All QE agents automatically have access to relevant skills based on their specialization:
|
|
1461
|
+
- **Test generators** use: agentic-quality-engineering, api-testing-patterns, tdd-london-chicago
|
|
1462
|
+
- **Coverage analyzers** use: agentic-quality-engineering, quality-metrics, risk-based-testing
|
|
1463
|
+
- **Flaky test hunters** use: agentic-quality-engineering, exploratory-testing-advanced
|
|
1464
|
+
- **Performance testers** use: agentic-quality-engineering, performance-testing, quality-metrics
|
|
1465
|
+
- **Security scanners** use: agentic-quality-engineering, security-testing, risk-based-testing
|
|
1466
|
+
|
|
1467
|
+
## š§ Q-Learning Integration (Phase 2)
|
|
1468
|
+
|
|
1469
|
+
All agents automatically learn from task execution through Q-learning:
|
|
1470
|
+
|
|
1471
|
+
### Observability
|
|
1472
|
+
\\\`\\\`\\\`bash
|
|
1473
|
+
# Check learning status
|
|
1474
|
+
aqe learn status --agent test-gen
|
|
1475
|
+
|
|
1476
|
+
# View learned patterns
|
|
1477
|
+
aqe learn history --agent test-gen --limit 50
|
|
1478
|
+
|
|
1479
|
+
# Export learning data
|
|
1480
|
+
aqe learn export --agent test-gen --output learning.json
|
|
1481
|
+
\\\`\\\`\\\`
|
|
1482
|
+
|
|
1483
|
+
### Pattern Management
|
|
1484
|
+
\\\`\\\`\\\`bash
|
|
1485
|
+
# List test patterns
|
|
1486
|
+
aqe patterns list --framework jest
|
|
1487
|
+
|
|
1488
|
+
# Search patterns
|
|
1489
|
+
aqe patterns search "api validation"
|
|
1490
|
+
|
|
1491
|
+
# Extract patterns from tests
|
|
1492
|
+
aqe patterns extract ./tests --framework jest
|
|
1493
|
+
\\\`\\\`\\\`
|
|
1494
|
+
|
|
1495
|
+
### Improvement Loop
|
|
1496
|
+
\\\`\\\`\\\`bash
|
|
1497
|
+
# Start continuous improvement
|
|
1498
|
+
aqe improve start
|
|
1499
|
+
|
|
1500
|
+
# Check improvement status
|
|
1501
|
+
aqe improve status
|
|
1502
|
+
|
|
1503
|
+
# Run single improvement cycle
|
|
1504
|
+
aqe improve cycle
|
|
1505
|
+
\\\`\\\`\\\`
|
|
1506
|
+
|
|
882
1507
|
## š Documentation
|
|
883
1508
|
|
|
884
1509
|
- **Agent Definitions**: \\\`.claude/agents/\\\` - ${agentCount} specialized QE agents
|
|
1510
|
+
- **Skills**: \\\`.claude/skills/\\\` - 17 specialized QE skills for agents
|
|
885
1511
|
- **Fleet Config**: \\\`.agentic-qe/config/fleet.json\\\`
|
|
886
1512
|
- **Routing Config**: \\\`.agentic-qe/config/routing.json\\\` (Multi-Model Router settings)
|
|
887
1513
|
- **AQE Hooks Config**: \\\`.agentic-qe/config/aqe-hooks.json\\\` (zero dependencies, 100-500x faster)
|
|
@@ -949,6 +1575,465 @@ tail -f .agentic-qe/logs/fleet.log
|
|
|
949
1575
|
`;
|
|
950
1576
|
await fs.writeFile(claudeMdPath, claudeMdContent);
|
|
951
1577
|
}
|
|
1578
|
+
// ============================================================================
|
|
1579
|
+
// Phase 2 Initialization Methods (v1.1.0)
|
|
1580
|
+
// ============================================================================
|
|
1581
|
+
/**
|
|
1582
|
+
* Initialize Phase 2 Pattern Bank Database
|
|
1583
|
+
*/
|
|
1584
|
+
static async initializePatternDatabase(config) {
|
|
1585
|
+
const Database = (await Promise.resolve().then(() => __importStar(require('better-sqlite3')))).default;
|
|
1586
|
+
const dbPath = path.join(process.cwd(), '.agentic-qe', 'patterns.db');
|
|
1587
|
+
console.log(chalk_1.default.cyan(' š¦ Initializing Pattern Bank database...'));
|
|
1588
|
+
const db = new Database(dbPath);
|
|
1589
|
+
// Enable WAL mode for better concurrency
|
|
1590
|
+
db.pragma('journal_mode = WAL');
|
|
1591
|
+
db.pragma('synchronous = NORMAL');
|
|
1592
|
+
db.pragma('cache_size = -64000'); // 64MB cache
|
|
1593
|
+
// Read and execute the schema
|
|
1594
|
+
const schemaPath = path.join(__dirname, '../../../docs/architecture/REASONING-BANK-SCHEMA.sql');
|
|
1595
|
+
let schema;
|
|
1596
|
+
if (await fs.pathExists(schemaPath)) {
|
|
1597
|
+
schema = await fs.readFile(schemaPath, 'utf-8');
|
|
1598
|
+
}
|
|
1599
|
+
else {
|
|
1600
|
+
// Fallback: inline schema if file not found
|
|
1601
|
+
schema = this.getPatternBankSchema();
|
|
1602
|
+
}
|
|
1603
|
+
// Execute schema
|
|
1604
|
+
db.exec(schema);
|
|
1605
|
+
db.close();
|
|
1606
|
+
console.log(chalk_1.default.green(' ā Pattern Bank initialized'));
|
|
1607
|
+
console.log(chalk_1.default.gray(` ⢠Database: ${dbPath}`));
|
|
1608
|
+
console.log(chalk_1.default.gray(` ⢠Framework: ${config.frameworks?.[0] || 'jest'}`));
|
|
1609
|
+
console.log(chalk_1.default.gray(` ⢠Tables: test_patterns, pattern_usage, cross_project_mappings, pattern_similarity_index`));
|
|
1610
|
+
console.log(chalk_1.default.gray(` ⢠Full-text search: enabled`));
|
|
1611
|
+
}
|
|
1612
|
+
/**
|
|
1613
|
+
* Initialize Phase 2 Memory Database (SwarmMemoryManager)
|
|
1614
|
+
*/
|
|
1615
|
+
static async initializeMemoryDatabase() {
|
|
1616
|
+
const dbPath = path.join(process.cwd(), '.agentic-qe', 'memory.db');
|
|
1617
|
+
console.log(chalk_1.default.cyan(' š¾ Initializing Memory Manager database...'));
|
|
1618
|
+
// Import SwarmMemoryManager dynamically
|
|
1619
|
+
const { SwarmMemoryManager } = await Promise.resolve().then(() => __importStar(require('../../core/memory/SwarmMemoryManager')));
|
|
1620
|
+
const memoryManager = new SwarmMemoryManager(dbPath);
|
|
1621
|
+
await memoryManager.initialize();
|
|
1622
|
+
// Verify tables created
|
|
1623
|
+
const stats = await memoryManager.stats();
|
|
1624
|
+
await memoryManager.close();
|
|
1625
|
+
console.log(chalk_1.default.green(' ā Memory Manager initialized'));
|
|
1626
|
+
console.log(chalk_1.default.gray(` ⢠Database: ${dbPath}`));
|
|
1627
|
+
console.log(chalk_1.default.gray(` ⢠Tables: 12 tables (memory_entries, hints, events, workflow_state, patterns, etc.)`));
|
|
1628
|
+
console.log(chalk_1.default.gray(` ⢠Access control: 5 levels (private, team, swarm, public, system)`));
|
|
1629
|
+
}
|
|
1630
|
+
/**
|
|
1631
|
+
* Initialize Phase 2 Learning System
|
|
1632
|
+
*/
|
|
1633
|
+
static async initializeLearningSystem(config) {
|
|
1634
|
+
const learningConfig = {
|
|
1635
|
+
enabled: true,
|
|
1636
|
+
learningRate: 0.1,
|
|
1637
|
+
discountFactor: 0.95,
|
|
1638
|
+
explorationRate: 0.2,
|
|
1639
|
+
explorationDecay: 0.995,
|
|
1640
|
+
minExplorationRate: 0.01,
|
|
1641
|
+
targetImprovement: 0.20, // 20% improvement goal
|
|
1642
|
+
maxMemorySize: 100 * 1024 * 1024, // 100MB
|
|
1643
|
+
batchSize: 32,
|
|
1644
|
+
updateFrequency: 10,
|
|
1645
|
+
replayBufferSize: 10000
|
|
1646
|
+
};
|
|
1647
|
+
// Store learning configuration
|
|
1648
|
+
await fs.writeJson('.agentic-qe/config/learning.json', learningConfig, { spaces: 2 });
|
|
1649
|
+
// Create learning database directory
|
|
1650
|
+
await fs.ensureDir('.agentic-qe/data/learning');
|
|
1651
|
+
// Create learning state placeholder
|
|
1652
|
+
const learningState = {
|
|
1653
|
+
initialized: true,
|
|
1654
|
+
version: '1.1.0',
|
|
1655
|
+
createdAt: new Date().toISOString(),
|
|
1656
|
+
agents: {} // Will be populated as agents learn
|
|
1657
|
+
};
|
|
1658
|
+
await fs.writeJson('.agentic-qe/data/learning/state.json', learningState, { spaces: 2 });
|
|
1659
|
+
console.log(chalk_1.default.green(' ā Learning system initialized'));
|
|
1660
|
+
console.log(chalk_1.default.gray(` ⢠Q-learning algorithm (lr=${learningConfig.learningRate}, γ=${learningConfig.discountFactor})`));
|
|
1661
|
+
console.log(chalk_1.default.gray(` ⢠Experience replay buffer: ${learningConfig.replayBufferSize} experiences`));
|
|
1662
|
+
console.log(chalk_1.default.gray(` ⢠Target improvement: ${learningConfig.targetImprovement * 100}%`));
|
|
1663
|
+
}
|
|
1664
|
+
/**
|
|
1665
|
+
* Get inline Pattern Bank schema (fallback if schema file not found)
|
|
1666
|
+
*/
|
|
1667
|
+
static getPatternBankSchema() {
|
|
1668
|
+
return `
|
|
1669
|
+
-- Enable WAL mode for better concurrent access
|
|
1670
|
+
PRAGMA journal_mode = WAL;
|
|
1671
|
+
PRAGMA synchronous = NORMAL;
|
|
1672
|
+
|
|
1673
|
+
-- Core Pattern Storage
|
|
1674
|
+
CREATE TABLE IF NOT EXISTS test_patterns (
|
|
1675
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
1676
|
+
pattern_type TEXT NOT NULL,
|
|
1677
|
+
framework TEXT NOT NULL,
|
|
1678
|
+
language TEXT NOT NULL DEFAULT 'typescript',
|
|
1679
|
+
code_signature_hash TEXT NOT NULL,
|
|
1680
|
+
code_signature JSON NOT NULL,
|
|
1681
|
+
test_template JSON NOT NULL,
|
|
1682
|
+
metadata JSON NOT NULL,
|
|
1683
|
+
version TEXT NOT NULL DEFAULT '1.0.0',
|
|
1684
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
1685
|
+
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
1686
|
+
CHECK(pattern_type IN ('edge-case', 'integration', 'boundary', 'error-handling', 'unit', 'e2e', 'performance', 'security')),
|
|
1687
|
+
CHECK(framework IN ('jest', 'mocha', 'cypress', 'vitest', 'playwright', 'ava', 'jasmine')),
|
|
1688
|
+
CHECK(json_valid(code_signature)),
|
|
1689
|
+
CHECK(json_valid(test_template)),
|
|
1690
|
+
CHECK(json_valid(metadata))
|
|
1691
|
+
);
|
|
1692
|
+
|
|
1693
|
+
CREATE INDEX IF NOT EXISTS idx_patterns_framework_type ON test_patterns(framework, pattern_type);
|
|
1694
|
+
CREATE INDEX IF NOT EXISTS idx_patterns_signature_hash ON test_patterns(code_signature_hash);
|
|
1695
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_patterns_dedup ON test_patterns(code_signature_hash, framework);
|
|
1696
|
+
|
|
1697
|
+
-- Pattern Usage Tracking
|
|
1698
|
+
CREATE TABLE IF NOT EXISTS pattern_usage (
|
|
1699
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1700
|
+
pattern_id TEXT NOT NULL,
|
|
1701
|
+
project_id TEXT NOT NULL,
|
|
1702
|
+
usage_count INTEGER NOT NULL DEFAULT 0,
|
|
1703
|
+
success_count INTEGER NOT NULL DEFAULT 0,
|
|
1704
|
+
failure_count INTEGER NOT NULL DEFAULT 0,
|
|
1705
|
+
avg_execution_time REAL NOT NULL DEFAULT 0.0,
|
|
1706
|
+
avg_coverage_gain REAL NOT NULL DEFAULT 0.0,
|
|
1707
|
+
flaky_count INTEGER NOT NULL DEFAULT 0,
|
|
1708
|
+
quality_score REAL NOT NULL DEFAULT 0.0,
|
|
1709
|
+
first_used TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
1710
|
+
last_used TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
1711
|
+
FOREIGN KEY (pattern_id) REFERENCES test_patterns(id) ON DELETE CASCADE,
|
|
1712
|
+
UNIQUE(pattern_id, project_id)
|
|
1713
|
+
);
|
|
1714
|
+
|
|
1715
|
+
CREATE INDEX IF NOT EXISTS idx_usage_pattern ON pattern_usage(pattern_id);
|
|
1716
|
+
CREATE INDEX IF NOT EXISTS idx_usage_quality ON pattern_usage(quality_score DESC);
|
|
1717
|
+
|
|
1718
|
+
-- Cross-Project Pattern Sharing
|
|
1719
|
+
CREATE TABLE IF NOT EXISTS cross_project_mappings (
|
|
1720
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1721
|
+
pattern_id TEXT NOT NULL,
|
|
1722
|
+
source_framework TEXT NOT NULL,
|
|
1723
|
+
target_framework TEXT NOT NULL,
|
|
1724
|
+
transformation_rules JSON NOT NULL,
|
|
1725
|
+
compatibility_score REAL NOT NULL DEFAULT 1.0,
|
|
1726
|
+
project_count INTEGER NOT NULL DEFAULT 0,
|
|
1727
|
+
success_rate REAL NOT NULL DEFAULT 0.0,
|
|
1728
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
1729
|
+
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
1730
|
+
FOREIGN KEY (pattern_id) REFERENCES test_patterns(id) ON DELETE CASCADE,
|
|
1731
|
+
UNIQUE(pattern_id, source_framework, target_framework),
|
|
1732
|
+
CHECK(json_valid(transformation_rules))
|
|
1733
|
+
);
|
|
1734
|
+
|
|
1735
|
+
-- Pattern Similarity Index
|
|
1736
|
+
CREATE TABLE IF NOT EXISTS pattern_similarity_index (
|
|
1737
|
+
pattern_a TEXT NOT NULL,
|
|
1738
|
+
pattern_b TEXT NOT NULL,
|
|
1739
|
+
similarity_score REAL NOT NULL,
|
|
1740
|
+
structure_similarity REAL NOT NULL,
|
|
1741
|
+
identifier_similarity REAL NOT NULL,
|
|
1742
|
+
metadata_similarity REAL NOT NULL,
|
|
1743
|
+
algorithm TEXT NOT NULL DEFAULT 'hybrid-tfidf',
|
|
1744
|
+
last_computed TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
1745
|
+
PRIMARY KEY (pattern_a, pattern_b),
|
|
1746
|
+
FOREIGN KEY (pattern_a) REFERENCES test_patterns(id) ON DELETE CASCADE,
|
|
1747
|
+
FOREIGN KEY (pattern_b) REFERENCES test_patterns(id) ON DELETE CASCADE
|
|
1748
|
+
);
|
|
1749
|
+
|
|
1750
|
+
CREATE INDEX IF NOT EXISTS idx_similarity_score ON pattern_similarity_index(similarity_score DESC);
|
|
1751
|
+
|
|
1752
|
+
-- Full-Text Search
|
|
1753
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS pattern_fts USING fts5(
|
|
1754
|
+
pattern_id UNINDEXED,
|
|
1755
|
+
pattern_name,
|
|
1756
|
+
description,
|
|
1757
|
+
tags,
|
|
1758
|
+
framework,
|
|
1759
|
+
pattern_type,
|
|
1760
|
+
content='',
|
|
1761
|
+
tokenize='porter ascii'
|
|
1762
|
+
);
|
|
1763
|
+
|
|
1764
|
+
-- Schema Version
|
|
1765
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
1766
|
+
version TEXT PRIMARY KEY,
|
|
1767
|
+
applied_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
1768
|
+
description TEXT
|
|
1769
|
+
);
|
|
1770
|
+
|
|
1771
|
+
INSERT OR IGNORE INTO schema_version (version, description)
|
|
1772
|
+
VALUES ('1.1.0', 'Initial QE ReasoningBank schema');
|
|
1773
|
+
`;
|
|
1774
|
+
}
|
|
1775
|
+
/**
|
|
1776
|
+
* Initialize Phase 2 Improvement Loop
|
|
1777
|
+
*/
|
|
1778
|
+
static async initializeImprovementLoop(config) {
|
|
1779
|
+
const improvementConfig = {
|
|
1780
|
+
enabled: true,
|
|
1781
|
+
intervalMs: 3600000, // 1 hour
|
|
1782
|
+
autoApply: false, // Requires user approval
|
|
1783
|
+
enableABTesting: true,
|
|
1784
|
+
strategies: {
|
|
1785
|
+
parallelExecution: { enabled: true, weight: 0.8 },
|
|
1786
|
+
adaptiveRetry: { enabled: true, maxRetries: 3 },
|
|
1787
|
+
resourceOptimization: { enabled: true, adaptive: true }
|
|
1788
|
+
},
|
|
1789
|
+
thresholds: {
|
|
1790
|
+
minImprovement: 0.05, // 5% minimum improvement to apply
|
|
1791
|
+
maxFailureRate: 0.1, // 10% max failure rate
|
|
1792
|
+
minConfidence: 0.8 // 80% confidence required
|
|
1793
|
+
},
|
|
1794
|
+
abTesting: {
|
|
1795
|
+
sampleSize: 100,
|
|
1796
|
+
significanceLevel: 0.05,
|
|
1797
|
+
minSampleDuration: 3600000 // 1 hour
|
|
1798
|
+
}
|
|
1799
|
+
};
|
|
1800
|
+
// Store improvement configuration
|
|
1801
|
+
await fs.writeJson('.agentic-qe/config/improvement.json', improvementConfig, { spaces: 2 });
|
|
1802
|
+
// Create improvement state
|
|
1803
|
+
const improvementState = {
|
|
1804
|
+
version: '1.1.0',
|
|
1805
|
+
lastCycle: null,
|
|
1806
|
+
activeCycles: 0,
|
|
1807
|
+
totalImprovement: 0,
|
|
1808
|
+
strategies: {}
|
|
1809
|
+
};
|
|
1810
|
+
await fs.writeJson('.agentic-qe/data/improvement/state.json', improvementState, { spaces: 2 });
|
|
1811
|
+
console.log(chalk_1.default.green(' ā Improvement loop initialized'));
|
|
1812
|
+
console.log(chalk_1.default.gray(` ⢠Cycle interval: ${improvementConfig.intervalMs / 3600000} hour(s)`));
|
|
1813
|
+
console.log(chalk_1.default.gray(` ⢠A/B testing: enabled (sample size: ${improvementConfig.abTesting.sampleSize})`));
|
|
1814
|
+
console.log(chalk_1.default.gray(` ⢠Auto-apply: ${improvementConfig.autoApply ? 'enabled' : 'disabled (requires approval)'}`));
|
|
1815
|
+
}
|
|
1816
|
+
/**
|
|
1817
|
+
* Create comprehensive config.json with all Phase 1 and Phase 2 settings
|
|
1818
|
+
*/
|
|
1819
|
+
static async createComprehensiveConfig(fleetConfig, options) {
|
|
1820
|
+
const comprehensiveConfig = {
|
|
1821
|
+
version: '1.1.0',
|
|
1822
|
+
initialized: new Date().toISOString(),
|
|
1823
|
+
// Phase 1: Multi-Model Router
|
|
1824
|
+
phase1: {
|
|
1825
|
+
routing: {
|
|
1826
|
+
enabled: fleetConfig.routing?.enabled || false,
|
|
1827
|
+
defaultModel: fleetConfig.routing?.defaultModel || 'claude-sonnet-4.5',
|
|
1828
|
+
costTracking: fleetConfig.routing?.enableCostTracking !== false,
|
|
1829
|
+
fallback: fleetConfig.routing?.enableFallback !== false,
|
|
1830
|
+
maxRetries: fleetConfig.routing?.maxRetries || 3,
|
|
1831
|
+
modelPreferences: {
|
|
1832
|
+
simple: 'gpt-3.5-turbo',
|
|
1833
|
+
medium: 'claude-haiku',
|
|
1834
|
+
complex: 'claude-sonnet-4.5',
|
|
1835
|
+
critical: 'gpt-4'
|
|
1836
|
+
},
|
|
1837
|
+
budgets: {
|
|
1838
|
+
daily: 50,
|
|
1839
|
+
monthly: 1000
|
|
1840
|
+
}
|
|
1841
|
+
},
|
|
1842
|
+
streaming: {
|
|
1843
|
+
enabled: fleetConfig.streaming?.enabled !== false,
|
|
1844
|
+
progressInterval: fleetConfig.streaming?.progressInterval || 2000,
|
|
1845
|
+
bufferEvents: fleetConfig.streaming?.bufferEvents || false,
|
|
1846
|
+
timeout: fleetConfig.streaming?.timeout || 1800000
|
|
1847
|
+
}
|
|
1848
|
+
},
|
|
1849
|
+
// Phase 2: Learning, Patterns, and Improvement
|
|
1850
|
+
phase2: {
|
|
1851
|
+
learning: {
|
|
1852
|
+
enabled: options.enableLearning,
|
|
1853
|
+
learningRate: 0.1,
|
|
1854
|
+
discountFactor: 0.95,
|
|
1855
|
+
explorationRate: 0.2,
|
|
1856
|
+
targetImprovement: 0.20
|
|
1857
|
+
},
|
|
1858
|
+
patterns: {
|
|
1859
|
+
enabled: options.enablePatterns,
|
|
1860
|
+
dbPath: '.agentic-qe/data/patterns.db',
|
|
1861
|
+
minConfidence: 0.85,
|
|
1862
|
+
enableExtraction: true
|
|
1863
|
+
},
|
|
1864
|
+
improvement: {
|
|
1865
|
+
enabled: options.enableImprovement,
|
|
1866
|
+
intervalMs: 3600000,
|
|
1867
|
+
autoApply: false,
|
|
1868
|
+
enableABTesting: true
|
|
1869
|
+
}
|
|
1870
|
+
},
|
|
1871
|
+
// Agent configurations
|
|
1872
|
+
agents: {
|
|
1873
|
+
testGenerator: {
|
|
1874
|
+
enablePatterns: options.enablePatterns,
|
|
1875
|
+
enableLearning: options.enableLearning
|
|
1876
|
+
},
|
|
1877
|
+
coverageAnalyzer: {
|
|
1878
|
+
enableLearning: options.enableLearning,
|
|
1879
|
+
targetImprovement: 0.20
|
|
1880
|
+
},
|
|
1881
|
+
flakyTestHunter: {
|
|
1882
|
+
enableML: true,
|
|
1883
|
+
enableLearning: options.enableLearning
|
|
1884
|
+
},
|
|
1885
|
+
defaultAgents: {
|
|
1886
|
+
enableLearning: options.enableLearning
|
|
1887
|
+
}
|
|
1888
|
+
},
|
|
1889
|
+
// Fleet configuration
|
|
1890
|
+
fleet: {
|
|
1891
|
+
topology: fleetConfig.topology || 'hierarchical',
|
|
1892
|
+
maxAgents: fleetConfig.maxAgents || 10,
|
|
1893
|
+
testingFocus: fleetConfig.testingFocus || [],
|
|
1894
|
+
environments: fleetConfig.environments || [],
|
|
1895
|
+
frameworks: fleetConfig.frameworks || ['jest']
|
|
1896
|
+
}
|
|
1897
|
+
};
|
|
1898
|
+
await fs.writeJson('.agentic-qe/config.json', comprehensiveConfig, { spaces: 2 });
|
|
1899
|
+
console.log(chalk_1.default.green(' ā Comprehensive configuration created'));
|
|
1900
|
+
console.log(chalk_1.default.gray(` ⢠Config file: .agentic-qe/config.json`));
|
|
1901
|
+
}
|
|
1902
|
+
/**
|
|
1903
|
+
* Display comprehensive initialization summary
|
|
1904
|
+
*/
|
|
1905
|
+
static async displayComprehensiveSummary(fleetConfig, options) {
|
|
1906
|
+
console.log(chalk_1.default.yellow('\nš Initialization Summary:\n'));
|
|
1907
|
+
// Multi-Model Router Summary
|
|
1908
|
+
console.log(chalk_1.default.cyan('Multi-Model Router'));
|
|
1909
|
+
console.log(chalk_1.default.gray(` Status: ${fleetConfig.routing?.enabled ? 'ā
Enabled' : 'ā ļø Disabled (opt-in)'}`));
|
|
1910
|
+
if (fleetConfig.routing?.enabled) {
|
|
1911
|
+
console.log(chalk_1.default.gray(' ⢠Cost optimization: 70-81% savings'));
|
|
1912
|
+
console.log(chalk_1.default.gray(' ⢠Fallback chains: enabled'));
|
|
1913
|
+
console.log(chalk_1.default.gray(' ⢠Budget tracking: daily $50, monthly $1000'));
|
|
1914
|
+
}
|
|
1915
|
+
console.log(chalk_1.default.cyan('\nStreaming'));
|
|
1916
|
+
console.log(chalk_1.default.gray(` Status: ${fleetConfig.streaming?.enabled !== false ? 'ā
Enabled' : 'ā ļø Disabled'}`));
|
|
1917
|
+
console.log(chalk_1.default.gray(' ⢠Real-time progress updates'));
|
|
1918
|
+
console.log(chalk_1.default.gray(' ⢠for-await-of compatible'));
|
|
1919
|
+
// Learning System Summary
|
|
1920
|
+
console.log(chalk_1.default.cyan('\nLearning System'));
|
|
1921
|
+
console.log(chalk_1.default.gray(` Status: ${options.enableLearning ? 'ā
Enabled' : 'ā ļø Disabled'}`));
|
|
1922
|
+
if (options.enableLearning) {
|
|
1923
|
+
console.log(chalk_1.default.gray(' ⢠Q-learning (lr=0.1, γ=0.95)'));
|
|
1924
|
+
console.log(chalk_1.default.gray(' ⢠Experience replay (10,000 buffer)'));
|
|
1925
|
+
console.log(chalk_1.default.gray(' ⢠Target: 20% improvement'));
|
|
1926
|
+
}
|
|
1927
|
+
console.log(chalk_1.default.cyan('\nPattern Bank'));
|
|
1928
|
+
console.log(chalk_1.default.gray(` Status: ${options.enablePatterns ? 'ā
Enabled' : 'ā ļø Disabled'}`));
|
|
1929
|
+
if (options.enablePatterns) {
|
|
1930
|
+
console.log(chalk_1.default.gray(' ⢠Pattern extraction: enabled'));
|
|
1931
|
+
console.log(chalk_1.default.gray(' ⢠Confidence threshold: 85%'));
|
|
1932
|
+
console.log(chalk_1.default.gray(' ⢠Template generation: enabled'));
|
|
1933
|
+
}
|
|
1934
|
+
console.log(chalk_1.default.cyan('\nImprovement Loop'));
|
|
1935
|
+
console.log(chalk_1.default.gray(` Status: ${options.enableImprovement ? 'ā
Enabled' : 'ā ļø Disabled'}`));
|
|
1936
|
+
if (options.enableImprovement) {
|
|
1937
|
+
console.log(chalk_1.default.gray(' ⢠Cycle: 1 hour intervals'));
|
|
1938
|
+
console.log(chalk_1.default.gray(' ⢠A/B testing: enabled'));
|
|
1939
|
+
console.log(chalk_1.default.gray(' ⢠Auto-apply: OFF (requires approval)'));
|
|
1940
|
+
}
|
|
1941
|
+
// Agent Configuration
|
|
1942
|
+
console.log(chalk_1.default.cyan('\nAgent Configuration:'));
|
|
1943
|
+
console.log(chalk_1.default.gray(' ⢠TestGeneratorAgent: Patterns + Learning'));
|
|
1944
|
+
console.log(chalk_1.default.gray(' ⢠CoverageAnalyzerAgent: Learning + 20% target'));
|
|
1945
|
+
console.log(chalk_1.default.gray(' ⢠FlakyTestHunterAgent: ML + Learning'));
|
|
1946
|
+
console.log(chalk_1.default.gray(' ⢠All agents: Learning enabled (opt-in)'));
|
|
1947
|
+
// Fleet Configuration
|
|
1948
|
+
console.log(chalk_1.default.cyan('\nFleet Configuration:'));
|
|
1949
|
+
console.log(chalk_1.default.gray(` Topology: ${fleetConfig.topology}`));
|
|
1950
|
+
console.log(chalk_1.default.gray(` Max Agents: ${fleetConfig.maxAgents}`));
|
|
1951
|
+
console.log(chalk_1.default.gray(` Frameworks: ${(fleetConfig.frameworks || ['jest']).join(', ')}`));
|
|
1952
|
+
// Next Steps
|
|
1953
|
+
console.log(chalk_1.default.yellow('\nš” Next Steps:\n'));
|
|
1954
|
+
console.log(chalk_1.default.gray(' 1. Review configuration: .agentic-qe/config.json'));
|
|
1955
|
+
console.log(chalk_1.default.gray(' 2. Generate tests: aqe test generate src/'));
|
|
1956
|
+
if (options.enableLearning) {
|
|
1957
|
+
console.log(chalk_1.default.gray(' 3. Check learning status: aqe learn status'));
|
|
1958
|
+
}
|
|
1959
|
+
if (fleetConfig.routing?.enabled) {
|
|
1960
|
+
console.log(chalk_1.default.gray(' 4. View routing dashboard: aqe routing dashboard'));
|
|
1961
|
+
}
|
|
1962
|
+
if (options.enablePatterns) {
|
|
1963
|
+
console.log(chalk_1.default.gray(' 5. List patterns: aqe patterns list'));
|
|
1964
|
+
}
|
|
1965
|
+
if (options.enableImprovement) {
|
|
1966
|
+
console.log(chalk_1.default.gray(' 6. Start improvement loop: aqe improve start'));
|
|
1967
|
+
}
|
|
1968
|
+
// Documentation
|
|
1969
|
+
console.log(chalk_1.default.yellow('\nš Documentation:\n'));
|
|
1970
|
+
console.log(chalk_1.default.gray(' ⢠Getting Started: docs/GETTING-STARTED.md'));
|
|
1971
|
+
if (options.enableLearning) {
|
|
1972
|
+
console.log(chalk_1.default.gray(' ⢠Learning System: docs/guides/LEARNING-SYSTEM-USER-GUIDE.md'));
|
|
1973
|
+
}
|
|
1974
|
+
if (options.enablePatterns) {
|
|
1975
|
+
console.log(chalk_1.default.gray(' ⢠Pattern Management: docs/guides/PATTERN-MANAGEMENT-USER-GUIDE.md'));
|
|
1976
|
+
}
|
|
1977
|
+
if (fleetConfig.routing?.enabled) {
|
|
1978
|
+
console.log(chalk_1.default.gray(' ⢠Cost Optimization: docs/guides/COST-OPTIMIZATION-GUIDE.md'));
|
|
1979
|
+
}
|
|
1980
|
+
// Performance Tips
|
|
1981
|
+
console.log(chalk_1.default.yellow('\nā” Performance Tips:\n'));
|
|
1982
|
+
console.log(chalk_1.default.gray(' ⢠Learning improves over time (20% target in 100 tasks)'));
|
|
1983
|
+
console.log(chalk_1.default.gray(' ⢠Patterns increase test quality (85% confidence threshold)'));
|
|
1984
|
+
if (fleetConfig.routing?.enabled) {
|
|
1985
|
+
console.log(chalk_1.default.gray(' ⢠Routing saves 70-81% on AI costs'));
|
|
1986
|
+
}
|
|
1987
|
+
console.log(chalk_1.default.gray(' ⢠Improvement loop optimizes continuously (1 hour cycles)'));
|
|
1988
|
+
console.log('');
|
|
1989
|
+
}
|
|
1990
|
+
/**
|
|
1991
|
+
* Get relevant skills for an agent
|
|
1992
|
+
*/
|
|
1993
|
+
static getAgentSkills(agentName) {
|
|
1994
|
+
const skillMap = {
|
|
1995
|
+
'qe-test-generator': ['agentic-quality-engineering', 'api-testing-patterns', 'tdd-london-chicago', 'test-automation-strategy'],
|
|
1996
|
+
'qe-coverage-analyzer': ['agentic-quality-engineering', 'quality-metrics', 'risk-based-testing'],
|
|
1997
|
+
'qe-flaky-test-hunter': ['agentic-quality-engineering', 'exploratory-testing-advanced', 'risk-based-testing'],
|
|
1998
|
+
'qe-performance-tester': ['agentic-quality-engineering', 'performance-testing', 'quality-metrics'],
|
|
1999
|
+
'qe-security-scanner': ['agentic-quality-engineering', 'security-testing', 'risk-based-testing'],
|
|
2000
|
+
'qe-quality-gate': ['agentic-quality-engineering', 'quality-metrics', 'risk-based-testing'],
|
|
2001
|
+
'qe-api-contract-validator': ['agentic-quality-engineering', 'api-testing-patterns'],
|
|
2002
|
+
'qe-test-executor': ['agentic-quality-engineering', 'test-automation-strategy'],
|
|
2003
|
+
'qe-requirements-validator': ['agentic-quality-engineering', 'context-driven-testing'],
|
|
2004
|
+
'qe-quality-analyzer': ['agentic-quality-engineering', 'quality-metrics'],
|
|
2005
|
+
'qe-visual-tester': ['agentic-quality-engineering', 'exploratory-testing-advanced'],
|
|
2006
|
+
'qe-chaos-engineer': ['agentic-quality-engineering', 'risk-based-testing'],
|
|
2007
|
+
'qe-production-intelligence': ['agentic-quality-engineering', 'context-driven-testing'],
|
|
2008
|
+
'qe-fleet-commander': ['agentic-quality-engineering'],
|
|
2009
|
+
'qe-deployment-readiness': ['agentic-quality-engineering', 'risk-based-testing', 'quality-metrics'],
|
|
2010
|
+
'qe-regression-risk-analyzer': ['agentic-quality-engineering', 'risk-based-testing'],
|
|
2011
|
+
'qe-test-data-architect': ['agentic-quality-engineering', 'test-automation-strategy']
|
|
2012
|
+
};
|
|
2013
|
+
return skillMap[agentName] || ['agentic-quality-engineering'];
|
|
2014
|
+
}
|
|
2015
|
+
/**
|
|
2016
|
+
* Get skill documentation for agent
|
|
2017
|
+
*/
|
|
2018
|
+
static getSkillDocumentation(agentName) {
|
|
2019
|
+
const skills = this.getAgentSkills(agentName);
|
|
2020
|
+
const skillDescriptions = {
|
|
2021
|
+
'agentic-quality-engineering': 'AI agents as force multipliers in quality work (PACT principles)',
|
|
2022
|
+
'api-testing-patterns': 'REST, GraphQL, contract testing patterns',
|
|
2023
|
+
'tdd-london-chicago': 'Both TDD schools, when to use each approach',
|
|
2024
|
+
'test-automation-strategy': 'When/how to automate effectively',
|
|
2025
|
+
'quality-metrics': 'Meaningful metrics vs vanity metrics',
|
|
2026
|
+
'risk-based-testing': 'Focus testing where failure hurts most',
|
|
2027
|
+
'exploratory-testing-advanced': 'RST heuristics, SBTM, test tours',
|
|
2028
|
+
'performance-testing': 'Load, stress, soak testing strategies',
|
|
2029
|
+
'security-testing': 'OWASP Top 10, vulnerability patterns',
|
|
2030
|
+
'context-driven-testing': 'RST techniques and contextual best practices'
|
|
2031
|
+
};
|
|
2032
|
+
return skills.map(skill => {
|
|
2033
|
+
const description = skillDescriptions[skill] || 'Quality engineering expertise';
|
|
2034
|
+
return `- **${skill}**: ${description}`;
|
|
2035
|
+
}).join('\n');
|
|
2036
|
+
}
|
|
952
2037
|
}
|
|
953
2038
|
exports.InitCommand = InitCommand;
|
|
954
2039
|
//# sourceMappingURL=init.js.map
|