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.
Files changed (383) hide show
  1. package/.claude/agents/qe-coverage-analyzer.md +8 -0
  2. package/.claude/agents/qe-flaky-test-hunter.md +9 -1
  3. package/.claude/agents/qe-quality-analyzer.md +405 -0
  4. package/.claude/agents/qe-test-generator.md +7 -0
  5. package/.claude/agents/reasoning/agent.md +816 -0
  6. package/.claude/agents/reasoning/goal-planner.md +73 -0
  7. package/.claude/settings.json +21 -20
  8. package/.claude/skills/README.md +124 -0
  9. package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
  10. package/.claude/skills/agentdb-learning/SKILL.md +545 -0
  11. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
  12. package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
  13. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
  14. package/.claude/skills/agentic-quality-engineering/SKILL.md +604 -0
  15. package/.claude/skills/api-testing-patterns/SKILL.md +686 -0
  16. package/.claude/skills/bug-reporting-excellence/SKILL.md +632 -0
  17. package/.claude/skills/code-review-quality/SKILL.md +683 -0
  18. package/.claude/skills/consultancy-practices/SKILL.md +540 -0
  19. package/.claude/skills/context-driven-testing/SKILL.md +466 -0
  20. package/.claude/skills/exploratory-testing-advanced/SKILL.md +676 -0
  21. package/.claude/skills/flow-nexus-neural/SKILL.md +738 -0
  22. package/.claude/skills/flow-nexus-platform/SKILL.md +1157 -0
  23. package/.claude/skills/flow-nexus-swarm/SKILL.md +610 -0
  24. package/.claude/skills/github-code-review/SKILL.md +1140 -0
  25. package/.claude/skills/github-multi-repo/SKILL.md +874 -0
  26. package/.claude/skills/github-project-management/SKILL.md +1277 -0
  27. package/.claude/skills/github-release-management/SKILL.md +1081 -0
  28. package/.claude/skills/github-workflow-automation/SKILL.md +1065 -0
  29. package/.claude/skills/hive-mind-advanced/SKILL.md +712 -0
  30. package/.claude/skills/holistic-testing-pact/SKILL.md +225 -0
  31. package/.claude/skills/hooks-automation/SKILL.md +1201 -0
  32. package/.claude/skills/pair-programming/SKILL.md +1202 -0
  33. package/.claude/skills/performance-analysis/SKILL.md +563 -0
  34. package/.claude/skills/performance-testing/SKILL.md +662 -0
  35. package/.claude/skills/quality-metrics/SKILL.md +592 -0
  36. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
  37. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
  38. package/.claude/skills/refactoring-patterns/SKILL.md +778 -0
  39. package/.claude/skills/risk-based-testing/SKILL.md +721 -0
  40. package/.claude/skills/security-testing/SKILL.md +651 -0
  41. package/.claude/skills/skill-builder/SKILL.md +910 -0
  42. package/.claude/skills/sparc-methodology/SKILL.md +1115 -0
  43. package/.claude/skills/stream-chain/SKILL.md +563 -0
  44. package/.claude/skills/swarm-advanced/SKILL.md +973 -0
  45. package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
  46. package/.claude/skills/tdd-london-chicago/SKILL.md +567 -0
  47. package/.claude/skills/technical-writing/SKILL.md +235 -0
  48. package/.claude/skills/test-automation-strategy/SKILL.md +842 -0
  49. package/.claude/skills/verification-quality/SKILL.md +649 -0
  50. package/.claude/skills/xp-practices/SKILL.md +671 -0
  51. package/.claude/statusline-command.sh +176 -0
  52. package/CHANGELOG.md +645 -1
  53. package/CONTRIBUTING.md +51 -0
  54. package/README.md +758 -162
  55. package/bin/aqe +90 -938
  56. package/config/improvement-loop.config.ts +323 -0
  57. package/config/neural-agent.config.ts +197 -0
  58. package/dist/adapters/MemoryStoreAdapter.d.ts +16 -16
  59. package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
  60. package/dist/adapters/MemoryStoreAdapter.js +22 -16
  61. package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
  62. package/dist/agents/BaseAgent.d.ts +69 -0
  63. package/dist/agents/BaseAgent.d.ts.map +1 -1
  64. package/dist/agents/BaseAgent.js +382 -1
  65. package/dist/agents/BaseAgent.js.map +1 -1
  66. package/dist/agents/CoverageAnalyzerAgent.d.ts +69 -3
  67. package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
  68. package/dist/agents/CoverageAnalyzerAgent.js +418 -51
  69. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  70. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
  71. package/dist/agents/DeploymentReadinessAgent.js +13 -13
  72. package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
  73. package/dist/agents/FlakyTestHunterAgent.d.ts +76 -4
  74. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  75. package/dist/agents/FlakyTestHunterAgent.js +375 -13
  76. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  77. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  78. package/dist/agents/FleetCommanderAgent.js +2 -2
  79. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  80. package/dist/agents/LearningAgent.d.ts +84 -0
  81. package/dist/agents/LearningAgent.d.ts.map +1 -0
  82. package/dist/agents/LearningAgent.js +197 -0
  83. package/dist/agents/LearningAgent.js.map +1 -0
  84. package/dist/agents/NeuralAgentExtension.d.ts +117 -0
  85. package/dist/agents/NeuralAgentExtension.d.ts.map +1 -0
  86. package/dist/agents/NeuralAgentExtension.js +288 -0
  87. package/dist/agents/NeuralAgentExtension.js.map +1 -0
  88. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
  89. package/dist/agents/PerformanceTesterAgent.js +4 -3
  90. package/dist/agents/PerformanceTesterAgent.js.map +1 -1
  91. package/dist/agents/ProductionIntelligenceAgent.js +7 -7
  92. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
  93. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
  94. package/dist/agents/QualityAnalyzerAgent.js +2 -2
  95. package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
  96. package/dist/agents/QualityGateAgent.js +5 -5
  97. package/dist/agents/QualityGateAgent.js.map +1 -1
  98. package/dist/agents/RegressionRiskAnalyzerAgent.js +7 -7
  99. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
  100. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
  101. package/dist/agents/RequirementsValidatorAgent.js +1 -1
  102. package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
  103. package/dist/agents/SecurityScannerAgent.js +6 -6
  104. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  105. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  106. package/dist/agents/TestExecutorAgent.js +1 -3
  107. package/dist/agents/TestExecutorAgent.js.map +1 -1
  108. package/dist/agents/TestGeneratorAgent.d.ts +53 -2
  109. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  110. package/dist/agents/TestGeneratorAgent.js +372 -31
  111. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  112. package/dist/agents/mixins/NeuralCapableMixin.d.ts +130 -0
  113. package/dist/agents/mixins/NeuralCapableMixin.d.ts.map +1 -0
  114. package/dist/agents/mixins/NeuralCapableMixin.js +358 -0
  115. package/dist/agents/mixins/NeuralCapableMixin.js.map +1 -0
  116. package/dist/agents/mixins/QUICCapableMixin.d.ts +34 -0
  117. package/dist/agents/mixins/QUICCapableMixin.d.ts.map +1 -0
  118. package/dist/agents/mixins/QUICCapableMixin.js +346 -0
  119. package/dist/agents/mixins/QUICCapableMixin.js.map +1 -0
  120. package/dist/cli/commands/agent/index.d.ts +5 -0
  121. package/dist/cli/commands/agent/index.d.ts.map +1 -1
  122. package/dist/cli/commands/agent/index.js +11 -6
  123. package/dist/cli/commands/agent/index.js.map +1 -1
  124. package/dist/cli/commands/agent/kill.d.ts +13 -0
  125. package/dist/cli/commands/agent/kill.d.ts.map +1 -0
  126. package/dist/cli/commands/agent/kill.js +65 -0
  127. package/dist/cli/commands/agent/kill.js.map +1 -0
  128. package/dist/cli/commands/agent/list.d.ts +19 -0
  129. package/dist/cli/commands/agent/list.d.ts.map +1 -0
  130. package/dist/cli/commands/agent/list.js +92 -0
  131. package/dist/cli/commands/agent/list.js.map +1 -0
  132. package/dist/cli/commands/agent/logs.d.ts +14 -0
  133. package/dist/cli/commands/agent/logs.d.ts.map +1 -0
  134. package/dist/cli/commands/agent/logs.js +77 -0
  135. package/dist/cli/commands/agent/logs.js.map +1 -0
  136. package/dist/cli/commands/agent/metrics.d.ts +21 -0
  137. package/dist/cli/commands/agent/metrics.d.ts.map +1 -0
  138. package/dist/cli/commands/agent/metrics.js +87 -0
  139. package/dist/cli/commands/agent/metrics.js.map +1 -0
  140. package/dist/cli/commands/agent/spawn.d.ts +28 -0
  141. package/dist/cli/commands/agent/spawn.d.ts.map +1 -0
  142. package/dist/cli/commands/agent/spawn.js +83 -0
  143. package/dist/cli/commands/agent/spawn.js.map +1 -0
  144. package/dist/cli/commands/improve/index.d.ts +70 -0
  145. package/dist/cli/commands/improve/index.d.ts.map +1 -0
  146. package/dist/cli/commands/improve/index.js +530 -0
  147. package/dist/cli/commands/improve/index.js.map +1 -0
  148. package/dist/cli/commands/init.d.ts +57 -0
  149. package/dist/cli/commands/init.d.ts.map +1 -1
  150. package/dist/cli/commands/init.js +1127 -42
  151. package/dist/cli/commands/init.js.map +1 -1
  152. package/dist/cli/commands/learn/index.d.ts +68 -0
  153. package/dist/cli/commands/learn/index.d.ts.map +1 -0
  154. package/dist/cli/commands/learn/index.js +431 -0
  155. package/dist/cli/commands/learn/index.js.map +1 -0
  156. package/dist/cli/commands/patterns/index.d.ts +75 -0
  157. package/dist/cli/commands/patterns/index.d.ts.map +1 -0
  158. package/dist/cli/commands/patterns/index.js +502 -0
  159. package/dist/cli/commands/patterns/index.js.map +1 -0
  160. package/dist/cli/commands/skills/index.d.ts +51 -0
  161. package/dist/cli/commands/skills/index.d.ts.map +1 -0
  162. package/dist/cli/commands/skills/index.js +364 -0
  163. package/dist/cli/commands/skills/index.js.map +1 -0
  164. package/dist/cli/index.js +458 -8
  165. package/dist/cli/index.js.map +1 -1
  166. package/dist/core/EventBus.d.ts +38 -0
  167. package/dist/core/EventBus.d.ts.map +1 -1
  168. package/dist/core/EventBus.js +176 -31
  169. package/dist/core/EventBus.js.map +1 -1
  170. package/dist/core/FleetManager.d.ts +35 -1
  171. package/dist/core/FleetManager.d.ts.map +1 -1
  172. package/dist/core/FleetManager.js +121 -45
  173. package/dist/core/FleetManager.js.map +1 -1
  174. package/dist/core/MemoryManager.d.ts +19 -1
  175. package/dist/core/MemoryManager.d.ts.map +1 -1
  176. package/dist/core/MemoryManager.js +25 -1
  177. package/dist/core/MemoryManager.js.map +1 -1
  178. package/dist/core/embeddings/EmbeddingCache.d.ts +134 -0
  179. package/dist/core/embeddings/EmbeddingCache.d.ts.map +1 -0
  180. package/dist/core/embeddings/EmbeddingCache.js +239 -0
  181. package/dist/core/embeddings/EmbeddingCache.js.map +1 -0
  182. package/dist/core/embeddings/EmbeddingGenerator.d.ts +224 -0
  183. package/dist/core/embeddings/EmbeddingGenerator.d.ts.map +1 -0
  184. package/dist/core/embeddings/EmbeddingGenerator.js +459 -0
  185. package/dist/core/embeddings/EmbeddingGenerator.js.map +1 -0
  186. package/dist/core/embeddings/index.d.ts +15 -0
  187. package/dist/core/embeddings/index.d.ts.map +1 -0
  188. package/dist/core/embeddings/index.js +22 -0
  189. package/dist/core/embeddings/index.js.map +1 -0
  190. package/dist/core/memory/AgentDBIntegration.d.ts +35 -0
  191. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -0
  192. package/dist/core/memory/AgentDBIntegration.js +75 -0
  193. package/dist/core/memory/AgentDBIntegration.js.map +1 -0
  194. package/dist/core/memory/AgentDBManager.d.ts +200 -0
  195. package/dist/core/memory/AgentDBManager.d.ts.map +1 -0
  196. package/dist/core/memory/AgentDBManager.js +263 -0
  197. package/dist/core/memory/AgentDBManager.js.map +1 -0
  198. package/dist/core/memory/AgentDBService.d.ts +160 -0
  199. package/dist/core/memory/AgentDBService.d.ts.map +1 -0
  200. package/dist/core/memory/AgentDBService.js +450 -0
  201. package/dist/core/memory/AgentDBService.js.map +1 -0
  202. package/dist/core/memory/RealAgentDBAdapter.d.ts +51 -0
  203. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -0
  204. package/dist/core/memory/RealAgentDBAdapter.js +230 -0
  205. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -0
  206. package/dist/core/memory/ReasoningBankAdapter.d.ts +58 -0
  207. package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -0
  208. package/dist/core/memory/ReasoningBankAdapter.js +80 -0
  209. package/dist/core/memory/ReasoningBankAdapter.js.map +1 -0
  210. package/dist/core/memory/SwarmMemoryManager.d.ts +79 -2
  211. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  212. package/dist/core/memory/SwarmMemoryManager.js +243 -52
  213. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  214. package/dist/core/memory/index.d.ts +4 -0
  215. package/dist/core/memory/index.d.ts.map +1 -1
  216. package/dist/core/memory/index.js +9 -1
  217. package/dist/core/memory/index.js.map +1 -1
  218. package/dist/core/neural/NeuralTrainer.d.ts +137 -0
  219. package/dist/core/neural/NeuralTrainer.d.ts.map +1 -0
  220. package/dist/core/neural/NeuralTrainer.js +543 -0
  221. package/dist/core/neural/NeuralTrainer.js.map +1 -0
  222. package/dist/core/neural/index.d.ts +8 -0
  223. package/dist/core/neural/index.d.ts.map +1 -0
  224. package/dist/core/neural/index.js +24 -0
  225. package/dist/core/neural/index.js.map +1 -0
  226. package/dist/core/neural/types.d.ts +216 -0
  227. package/dist/core/neural/types.d.ts.map +1 -0
  228. package/dist/core/neural/types.js +8 -0
  229. package/dist/core/neural/types.js.map +1 -0
  230. package/dist/core/security/CertificateValidator.d.ts +130 -0
  231. package/dist/core/security/CertificateValidator.d.ts.map +1 -0
  232. package/dist/core/security/CertificateValidator.js +376 -0
  233. package/dist/core/security/CertificateValidator.js.map +1 -0
  234. package/dist/core/transport/QUICTransport.d.ts +62 -0
  235. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  236. package/dist/core/transport/QUICTransport.js +381 -0
  237. package/dist/core/transport/QUICTransport.js.map +1 -0
  238. package/dist/core/transport/SecureQUICTransport.d.ts +71 -0
  239. package/dist/core/transport/SecureQUICTransport.d.ts.map +1 -0
  240. package/dist/core/transport/SecureQUICTransport.js +253 -0
  241. package/dist/core/transport/SecureQUICTransport.js.map +1 -0
  242. package/dist/index.d.ts +10 -0
  243. package/dist/index.d.ts.map +1 -1
  244. package/dist/index.js +10 -0
  245. package/dist/index.js.map +1 -1
  246. package/dist/learning/AdvancedFeatureExtractor.d.ts +123 -0
  247. package/dist/learning/AdvancedFeatureExtractor.d.ts.map +1 -0
  248. package/dist/learning/AdvancedFeatureExtractor.js +423 -0
  249. package/dist/learning/AdvancedFeatureExtractor.js.map +1 -0
  250. package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
  251. package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
  252. package/dist/learning/FlakyFixRecommendations.js +247 -0
  253. package/dist/learning/FlakyFixRecommendations.js.map +1 -0
  254. package/dist/learning/FlakyPredictionModel.d.ts +67 -0
  255. package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
  256. package/dist/learning/FlakyPredictionModel.js +336 -0
  257. package/dist/learning/FlakyPredictionModel.js.map +1 -0
  258. package/dist/learning/FlakyTestDetector.d.ts +55 -0
  259. package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
  260. package/dist/learning/FlakyTestDetector.js +237 -0
  261. package/dist/learning/FlakyTestDetector.js.map +1 -0
  262. package/dist/learning/ImprovementLoop.d.ts +133 -0
  263. package/dist/learning/ImprovementLoop.d.ts.map +1 -0
  264. package/dist/learning/ImprovementLoop.js +412 -0
  265. package/dist/learning/ImprovementLoop.js.map +1 -0
  266. package/dist/learning/ImprovementWorker.d.ts +83 -0
  267. package/dist/learning/ImprovementWorker.d.ts.map +1 -0
  268. package/dist/learning/ImprovementWorker.js +164 -0
  269. package/dist/learning/ImprovementWorker.js.map +1 -0
  270. package/dist/learning/LearningEngine.d.ts +144 -0
  271. package/dist/learning/LearningEngine.d.ts.map +1 -0
  272. package/dist/learning/LearningEngine.js +531 -0
  273. package/dist/learning/LearningEngine.js.map +1 -0
  274. package/dist/learning/NeuralPatternMatcher.d.ts +184 -0
  275. package/dist/learning/NeuralPatternMatcher.d.ts.map +1 -0
  276. package/dist/learning/NeuralPatternMatcher.js +702 -0
  277. package/dist/learning/NeuralPatternMatcher.js.map +1 -0
  278. package/dist/learning/NeuralTrainer.d.ts +209 -0
  279. package/dist/learning/NeuralTrainer.d.ts.map +1 -0
  280. package/dist/learning/NeuralTrainer.js +478 -0
  281. package/dist/learning/NeuralTrainer.js.map +1 -0
  282. package/dist/learning/PerformanceTracker.d.ts +118 -0
  283. package/dist/learning/PerformanceTracker.d.ts.map +1 -0
  284. package/dist/learning/PerformanceTracker.js +376 -0
  285. package/dist/learning/PerformanceTracker.js.map +1 -0
  286. package/dist/learning/StatisticalAnalysis.d.ts +47 -0
  287. package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
  288. package/dist/learning/StatisticalAnalysis.js +170 -0
  289. package/dist/learning/StatisticalAnalysis.js.map +1 -0
  290. package/dist/learning/SwarmIntegration.d.ts +107 -0
  291. package/dist/learning/SwarmIntegration.d.ts.map +1 -0
  292. package/dist/learning/SwarmIntegration.js +191 -0
  293. package/dist/learning/SwarmIntegration.js.map +1 -0
  294. package/dist/learning/index.d.ts +16 -0
  295. package/dist/learning/index.d.ts.map +1 -0
  296. package/dist/learning/index.js +32 -0
  297. package/dist/learning/index.js.map +1 -0
  298. package/dist/learning/types.d.ts +289 -0
  299. package/dist/learning/types.d.ts.map +1 -0
  300. package/dist/learning/types.js +25 -0
  301. package/dist/learning/types.js.map +1 -0
  302. package/dist/mcp/MCPToolRegistry.d.ts +34 -0
  303. package/dist/mcp/MCPToolRegistry.d.ts.map +1 -0
  304. package/dist/mcp/MCPToolRegistry.js +48 -0
  305. package/dist/mcp/MCPToolRegistry.js.map +1 -0
  306. package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
  307. package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
  308. package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
  309. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
  310. package/dist/mcp/server.d.ts +4 -4
  311. package/dist/mcp/server.d.ts.map +1 -1
  312. package/dist/mcp/server.js +94 -0
  313. package/dist/mcp/server.js.map +1 -1
  314. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  315. package/dist/mcp/services/AgentRegistry.js +7 -1
  316. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  317. package/dist/mcp/tools.d.ts +15 -0
  318. package/dist/mcp/tools.d.ts.map +1 -1
  319. package/dist/mcp/tools.js +17 -1
  320. package/dist/mcp/tools.js.map +1 -1
  321. package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
  322. package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
  323. package/dist/reasoning/CodeSignatureGenerator.js +427 -0
  324. package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
  325. package/dist/reasoning/PatternClassifier.d.ts +98 -0
  326. package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
  327. package/dist/reasoning/PatternClassifier.js +345 -0
  328. package/dist/reasoning/PatternClassifier.js.map +1 -0
  329. package/dist/reasoning/PatternExtractor.d.ts +131 -0
  330. package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
  331. package/dist/reasoning/PatternExtractor.js +539 -0
  332. package/dist/reasoning/PatternExtractor.js.map +1 -0
  333. package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
  334. package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
  335. package/dist/reasoning/PatternMemoryIntegration.js +336 -0
  336. package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
  337. package/dist/reasoning/QEReasoningBank.d.ts +121 -0
  338. package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
  339. package/dist/reasoning/QEReasoningBank.js +235 -0
  340. package/dist/reasoning/QEReasoningBank.js.map +1 -0
  341. package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
  342. package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
  343. package/dist/reasoning/TestTemplateCreator.js +535 -0
  344. package/dist/reasoning/TestTemplateCreator.js.map +1 -0
  345. package/dist/reasoning/index.d.ts +10 -0
  346. package/dist/reasoning/index.d.ts.map +1 -0
  347. package/dist/reasoning/index.js +31 -0
  348. package/dist/reasoning/index.js.map +1 -0
  349. package/dist/reasoning/types.d.ts +717 -0
  350. package/dist/reasoning/types.d.ts.map +1 -0
  351. package/dist/reasoning/types.js +57 -0
  352. package/dist/reasoning/types.js.map +1 -0
  353. package/dist/transport/QUICTransport.d.ts +340 -0
  354. package/dist/transport/QUICTransport.d.ts.map +1 -0
  355. package/dist/transport/QUICTransport.js +814 -0
  356. package/dist/transport/QUICTransport.js.map +1 -0
  357. package/dist/transport/UDPTransport.d.ts +348 -0
  358. package/dist/transport/UDPTransport.d.ts.map +1 -0
  359. package/dist/transport/UDPTransport.js +820 -0
  360. package/dist/transport/UDPTransport.js.map +1 -0
  361. package/dist/types/errors.d.ts +1 -1
  362. package/dist/types/index.d.ts +41 -0
  363. package/dist/types/index.d.ts.map +1 -1
  364. package/dist/types/index.js +2 -0
  365. package/dist/types/index.js.map +1 -1
  366. package/dist/types/pattern.types.d.ts +364 -0
  367. package/dist/types/pattern.types.d.ts.map +1 -0
  368. package/dist/types/pattern.types.js +60 -0
  369. package/dist/types/pattern.types.js.map +1 -0
  370. package/dist/types/quic.d.ts +339 -0
  371. package/dist/types/quic.d.ts.map +1 -0
  372. package/dist/types/quic.js +48 -0
  373. package/dist/types/quic.js.map +1 -0
  374. package/dist/utils/Config.js +1 -1
  375. package/dist/utils/Config.js.map +1 -1
  376. package/dist/utils/Database.d.ts +14 -0
  377. package/dist/utils/Database.d.ts.map +1 -1
  378. package/dist/utils/Database.js +51 -4
  379. package/dist/utils/Database.js.map +1 -1
  380. package/dist/utils/Logger.d.ts.map +1 -1
  381. package/dist/utils/Logger.js +111 -26
  382. package/dist/utils/Logger.js.map +1 -1
  383. 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 Fleet\n'));
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
- if (!options.config) {
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
- console.log(chalk_1.default.yellow('\nšŸ’” Next Steps:'));
171
- console.log(chalk_1.default.gray(' 1. View agents: ls .claude/agents/'));
172
- console.log(chalk_1.default.gray(' 2. Generate tests: aqe test <module-name>'));
173
- console.log(chalk_1.default.gray(' 3. Run tests: aqe run tests --parallel'));
174
- console.log(chalk_1.default.gray(' 4. Monitor fleet: aqe status --verbose'));
175
- // Initialize Claude Flow coordination
176
- await this.initializeCoordination(fleetConfig);
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
- if (options.verbose) {
181
- console.error(chalk_1.default.gray(error.stack));
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
- if (await fs.pathExists(p)) {
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('āš ļø Could not find agent templates, creating basic agents'));
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
- // Copy all agent definition files
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
- await fs.copy(sourcePath, targetPath, {
230
- overwrite: false, // Don't overwrite existing agent definitions
231
- filter: (src) => src.endsWith('.md') // Only copy markdown agent files
232
- });
233
- console.log(chalk_1.default.green(`āœ“ Copied ${await this.countAgentFiles(targetPath)} agent definitions`));
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
- // Fallback: Create basic agent templates if package agents not found
237
- const basicAgents = [
238
- 'qe-test-generator',
239
- 'qe-test-executor',
240
- 'qe-coverage-analyzer',
241
- 'qe-quality-gate',
242
- 'qe-performance-tester',
243
- 'qe-security-scanner'
244
- ];
245
- const targetPath = path.join(process.cwd(), '.claude/agents');
246
- for (const agentName of basicAgents) {
247
- const agentFile = path.join(targetPath, `${agentName}.md`);
248
- const agentType = agentName.replace('qe-', '');
249
- const content = `---
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.5"
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, config, { spaces: 2 });
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=${config.topology}, Max agents=${config.maxAgents}" >> .agentic-qe/logs/coordination.log
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