agentic-qe 3.3.1 → 3.3.3

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 (250) hide show
  1. package/.claude/helpers/statusline-v3.cjs +96 -27
  2. package/README.md +6 -3
  3. package/package.json +1 -1
  4. package/scripts/sync-claude-flow.cjs +99 -0
  5. package/v3/CHANGELOG.md +133 -0
  6. package/v3/README.md +9 -5
  7. package/v3/dist/cli/bundle.js +60879 -51811
  8. package/v3/dist/coordination/consensus/domain-findings.d.ts +202 -0
  9. package/v3/dist/coordination/consensus/domain-findings.d.ts.map +1 -0
  10. package/v3/dist/coordination/consensus/domain-findings.js +66 -0
  11. package/v3/dist/coordination/consensus/domain-findings.js.map +1 -0
  12. package/v3/dist/coordination/consensus/index.d.ts +2 -0
  13. package/v3/dist/coordination/consensus/index.d.ts.map +1 -1
  14. package/v3/dist/coordination/consensus/index.js +4 -0
  15. package/v3/dist/coordination/consensus/index.js.map +1 -1
  16. package/v3/dist/coordination/index.d.ts +1 -0
  17. package/v3/dist/coordination/index.d.ts.map +1 -1
  18. package/v3/dist/coordination/index.js +4 -0
  19. package/v3/dist/coordination/index.js.map +1 -1
  20. package/v3/dist/coordination/mixins/consensus-enabled-domain.d.ts +225 -0
  21. package/v3/dist/coordination/mixins/consensus-enabled-domain.d.ts.map +1 -0
  22. package/v3/dist/coordination/mixins/consensus-enabled-domain.js +466 -0
  23. package/v3/dist/coordination/mixins/consensus-enabled-domain.js.map +1 -0
  24. package/v3/dist/coordination/mixins/index.d.ts +14 -0
  25. package/v3/dist/coordination/mixins/index.d.ts.map +1 -0
  26. package/v3/dist/coordination/mixins/index.js +28 -0
  27. package/v3/dist/coordination/mixins/index.js.map +1 -0
  28. package/v3/dist/coordination/mixins/mincut-aware-domain.d.ts +227 -0
  29. package/v3/dist/coordination/mixins/mincut-aware-domain.d.ts.map +1 -0
  30. package/v3/dist/coordination/mixins/mincut-aware-domain.js +368 -0
  31. package/v3/dist/coordination/mixins/mincut-aware-domain.js.map +1 -0
  32. package/v3/dist/coordination/queen-coordinator.d.ts +23 -1
  33. package/v3/dist/coordination/queen-coordinator.d.ts.map +1 -1
  34. package/v3/dist/coordination/queen-coordinator.js +131 -3
  35. package/v3/dist/coordination/queen-coordinator.js.map +1 -1
  36. package/v3/dist/coordination/task-executor.d.ts +21 -1
  37. package/v3/dist/coordination/task-executor.d.ts.map +1 -1
  38. package/v3/dist/coordination/task-executor.js +222 -5
  39. package/v3/dist/coordination/task-executor.js.map +1 -1
  40. package/v3/dist/domains/chaos-resilience/coordinator.d.ts +92 -0
  41. package/v3/dist/domains/chaos-resilience/coordinator.d.ts.map +1 -1
  42. package/v3/dist/domains/chaos-resilience/coordinator.js +241 -1
  43. package/v3/dist/domains/chaos-resilience/coordinator.js.map +1 -1
  44. package/v3/dist/domains/chaos-resilience/plugin.js +1 -1
  45. package/v3/dist/domains/chaos-resilience/plugin.js.map +1 -1
  46. package/v3/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +29 -2
  47. package/v3/dist/domains/chaos-resilience/services/chaos-engineer.d.ts.map +1 -1
  48. package/v3/dist/domains/chaos-resilience/services/chaos-engineer.js +62 -3
  49. package/v3/dist/domains/chaos-resilience/services/chaos-engineer.js.map +1 -1
  50. package/v3/dist/domains/code-intelligence/coordinator.d.ts +112 -0
  51. package/v3/dist/domains/code-intelligence/coordinator.d.ts.map +1 -1
  52. package/v3/dist/domains/code-intelligence/coordinator.js +221 -0
  53. package/v3/dist/domains/code-intelligence/coordinator.js.map +1 -1
  54. package/v3/dist/domains/code-intelligence/services/knowledge-graph.d.ts +66 -2
  55. package/v3/dist/domains/code-intelligence/services/knowledge-graph.d.ts.map +1 -1
  56. package/v3/dist/domains/code-intelligence/services/knowledge-graph.js +253 -3
  57. package/v3/dist/domains/code-intelligence/services/knowledge-graph.js.map +1 -1
  58. package/v3/dist/domains/contract-testing/coordinator.d.ts +89 -1
  59. package/v3/dist/domains/contract-testing/coordinator.d.ts.map +1 -1
  60. package/v3/dist/domains/contract-testing/coordinator.js +222 -1
  61. package/v3/dist/domains/contract-testing/coordinator.js.map +1 -1
  62. package/v3/dist/domains/contract-testing/interfaces.d.ts +29 -1
  63. package/v3/dist/domains/contract-testing/interfaces.d.ts.map +1 -1
  64. package/v3/dist/domains/contract-testing/plugin.js +1 -1
  65. package/v3/dist/domains/contract-testing/plugin.js.map +1 -1
  66. package/v3/dist/domains/contract-testing/services/contract-validator.d.ts +29 -2
  67. package/v3/dist/domains/contract-testing/services/contract-validator.d.ts.map +1 -1
  68. package/v3/dist/domains/contract-testing/services/contract-validator.js +58 -3
  69. package/v3/dist/domains/contract-testing/services/contract-validator.js.map +1 -1
  70. package/v3/dist/domains/coverage-analysis/coordinator.d.ts +95 -2
  71. package/v3/dist/domains/coverage-analysis/coordinator.d.ts.map +1 -1
  72. package/v3/dist/domains/coverage-analysis/coordinator.js +274 -6
  73. package/v3/dist/domains/coverage-analysis/coordinator.js.map +1 -1
  74. package/v3/dist/domains/coverage-analysis/plugin.d.ts +6 -1
  75. package/v3/dist/domains/coverage-analysis/plugin.d.ts.map +1 -1
  76. package/v3/dist/domains/coverage-analysis/plugin.js +73 -0
  77. package/v3/dist/domains/coverage-analysis/plugin.js.map +1 -1
  78. package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts +119 -3
  79. package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts.map +1 -1
  80. package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.js +267 -5
  81. package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.js.map +1 -1
  82. package/v3/dist/domains/coverage-analysis/services/gap-detector.d.ts +111 -2
  83. package/v3/dist/domains/coverage-analysis/services/gap-detector.d.ts.map +1 -1
  84. package/v3/dist/domains/coverage-analysis/services/gap-detector.js +231 -3
  85. package/v3/dist/domains/coverage-analysis/services/gap-detector.js.map +1 -1
  86. package/v3/dist/domains/defect-intelligence/coordinator.d.ts +80 -1
  87. package/v3/dist/domains/defect-intelligence/coordinator.d.ts.map +1 -1
  88. package/v3/dist/domains/defect-intelligence/coordinator.js +262 -7
  89. package/v3/dist/domains/defect-intelligence/coordinator.js.map +1 -1
  90. package/v3/dist/domains/defect-intelligence/interfaces.d.ts +17 -0
  91. package/v3/dist/domains/defect-intelligence/interfaces.d.ts.map +1 -1
  92. package/v3/dist/domains/defect-intelligence/services/defect-predictor.d.ts +91 -2
  93. package/v3/dist/domains/defect-intelligence/services/defect-predictor.d.ts.map +1 -1
  94. package/v3/dist/domains/defect-intelligence/services/defect-predictor.js +274 -7
  95. package/v3/dist/domains/defect-intelligence/services/defect-predictor.js.map +1 -1
  96. package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts +79 -2
  97. package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts.map +1 -1
  98. package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.js +259 -3
  99. package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.js.map +1 -1
  100. package/v3/dist/domains/domain-interface.d.ts +194 -2
  101. package/v3/dist/domains/domain-interface.d.ts.map +1 -1
  102. package/v3/dist/domains/domain-interface.js +239 -0
  103. package/v3/dist/domains/domain-interface.js.map +1 -1
  104. package/v3/dist/domains/learning-optimization/coordinator.d.ts +171 -0
  105. package/v3/dist/domains/learning-optimization/coordinator.d.ts.map +1 -1
  106. package/v3/dist/domains/learning-optimization/coordinator.js +401 -1
  107. package/v3/dist/domains/learning-optimization/coordinator.js.map +1 -1
  108. package/v3/dist/domains/learning-optimization/index.d.ts +1 -1
  109. package/v3/dist/domains/learning-optimization/index.d.ts.map +1 -1
  110. package/v3/dist/domains/learning-optimization/index.js.map +1 -1
  111. package/v3/dist/domains/learning-optimization/interfaces.d.ts +18 -0
  112. package/v3/dist/domains/learning-optimization/interfaces.d.ts.map +1 -1
  113. package/v3/dist/domains/learning-optimization/plugin.js +1 -1
  114. package/v3/dist/domains/learning-optimization/plugin.js.map +1 -1
  115. package/v3/dist/domains/learning-optimization/services/learning-coordinator.d.ts +54 -2
  116. package/v3/dist/domains/learning-optimization/services/learning-coordinator.d.ts.map +1 -1
  117. package/v3/dist/domains/learning-optimization/services/learning-coordinator.js +90 -3
  118. package/v3/dist/domains/learning-optimization/services/learning-coordinator.js.map +1 -1
  119. package/v3/dist/domains/quality-assessment/coordinator.d.ts +127 -0
  120. package/v3/dist/domains/quality-assessment/coordinator.d.ts.map +1 -1
  121. package/v3/dist/domains/quality-assessment/coordinator.js +493 -7
  122. package/v3/dist/domains/quality-assessment/coordinator.js.map +1 -1
  123. package/v3/dist/domains/quality-assessment/interfaces.d.ts +22 -0
  124. package/v3/dist/domains/quality-assessment/interfaces.d.ts.map +1 -1
  125. package/v3/dist/domains/quality-assessment/plugin.d.ts +6 -1
  126. package/v3/dist/domains/quality-assessment/plugin.d.ts.map +1 -1
  127. package/v3/dist/domains/quality-assessment/plugin.js +67 -0
  128. package/v3/dist/domains/quality-assessment/plugin.js.map +1 -1
  129. package/v3/dist/domains/quality-assessment/services/deployment-advisor.d.ts +61 -2
  130. package/v3/dist/domains/quality-assessment/services/deployment-advisor.d.ts.map +1 -1
  131. package/v3/dist/domains/quality-assessment/services/deployment-advisor.js +213 -5
  132. package/v3/dist/domains/quality-assessment/services/deployment-advisor.js.map +1 -1
  133. package/v3/dist/domains/quality-assessment/services/quality-analyzer.d.ts +59 -4
  134. package/v3/dist/domains/quality-assessment/services/quality-analyzer.d.ts.map +1 -1
  135. package/v3/dist/domains/quality-assessment/services/quality-analyzer.js +195 -3
  136. package/v3/dist/domains/quality-assessment/services/quality-analyzer.js.map +1 -1
  137. package/v3/dist/domains/requirements-validation/coordinator.d.ts +78 -0
  138. package/v3/dist/domains/requirements-validation/coordinator.d.ts.map +1 -1
  139. package/v3/dist/domains/requirements-validation/coordinator.js +189 -0
  140. package/v3/dist/domains/requirements-validation/coordinator.js.map +1 -1
  141. package/v3/dist/domains/requirements-validation/interfaces.d.ts +4 -0
  142. package/v3/dist/domains/requirements-validation/interfaces.d.ts.map +1 -1
  143. package/v3/dist/domains/requirements-validation/services/requirements-validator.d.ts +106 -2
  144. package/v3/dist/domains/requirements-validation/services/requirements-validator.d.ts.map +1 -1
  145. package/v3/dist/domains/requirements-validation/services/requirements-validator.js +263 -3
  146. package/v3/dist/domains/requirements-validation/services/requirements-validator.js.map +1 -1
  147. package/v3/dist/domains/security-compliance/coordinator.d.ts +56 -1
  148. package/v3/dist/domains/security-compliance/coordinator.d.ts.map +1 -1
  149. package/v3/dist/domains/security-compliance/coordinator.js +241 -17
  150. package/v3/dist/domains/security-compliance/coordinator.js.map +1 -1
  151. package/v3/dist/domains/security-compliance/interfaces.d.ts +2 -0
  152. package/v3/dist/domains/security-compliance/interfaces.d.ts.map +1 -1
  153. package/v3/dist/domains/security-compliance/services/security-scanner.d.ts +33 -2
  154. package/v3/dist/domains/security-compliance/services/security-scanner.d.ts.map +1 -1
  155. package/v3/dist/domains/security-compliance/services/security-scanner.js +107 -3
  156. package/v3/dist/domains/security-compliance/services/security-scanner.js.map +1 -1
  157. package/v3/dist/domains/test-execution/coordinator.d.ts +89 -0
  158. package/v3/dist/domains/test-execution/coordinator.d.ts.map +1 -1
  159. package/v3/dist/domains/test-execution/coordinator.js +259 -2
  160. package/v3/dist/domains/test-execution/coordinator.js.map +1 -1
  161. package/v3/dist/domains/test-execution/plugin.d.ts +6 -1
  162. package/v3/dist/domains/test-execution/plugin.d.ts.map +1 -1
  163. package/v3/dist/domains/test-execution/plugin.js +77 -0
  164. package/v3/dist/domains/test-execution/plugin.js.map +1 -1
  165. package/v3/dist/domains/test-execution/services/test-executor.d.ts +30 -2
  166. package/v3/dist/domains/test-execution/services/test-executor.d.ts.map +1 -1
  167. package/v3/dist/domains/test-execution/services/test-executor.js +64 -3
  168. package/v3/dist/domains/test-execution/services/test-executor.js.map +1 -1
  169. package/v3/dist/domains/test-generation/coordinator.d.ts +137 -0
  170. package/v3/dist/domains/test-generation/coordinator.d.ts.map +1 -1
  171. package/v3/dist/domains/test-generation/coordinator.js +421 -1
  172. package/v3/dist/domains/test-generation/coordinator.js.map +1 -1
  173. package/v3/dist/domains/test-generation/interfaces.d.ts +2 -0
  174. package/v3/dist/domains/test-generation/interfaces.d.ts.map +1 -1
  175. package/v3/dist/domains/test-generation/plugin.d.ts +6 -1
  176. package/v3/dist/domains/test-generation/plugin.d.ts.map +1 -1
  177. package/v3/dist/domains/test-generation/plugin.js +84 -0
  178. package/v3/dist/domains/test-generation/plugin.js.map +1 -1
  179. package/v3/dist/domains/test-generation/services/test-generator.d.ts +32 -0
  180. package/v3/dist/domains/test-generation/services/test-generator.d.ts.map +1 -1
  181. package/v3/dist/domains/test-generation/services/test-generator.js +158 -3
  182. package/v3/dist/domains/test-generation/services/test-generator.js.map +1 -1
  183. package/v3/dist/domains/visual-accessibility/coordinator.d.ts +77 -0
  184. package/v3/dist/domains/visual-accessibility/coordinator.d.ts.map +1 -1
  185. package/v3/dist/domains/visual-accessibility/coordinator.js +210 -2
  186. package/v3/dist/domains/visual-accessibility/coordinator.js.map +1 -1
  187. package/v3/dist/domains/visual-accessibility/plugin.d.ts.map +1 -1
  188. package/v3/dist/domains/visual-accessibility/plugin.js +3 -3
  189. package/v3/dist/domains/visual-accessibility/plugin.js.map +1 -1
  190. package/v3/dist/domains/visual-accessibility/services/visual-tester.d.ts +47 -2
  191. package/v3/dist/domains/visual-accessibility/services/visual-tester.d.ts.map +1 -1
  192. package/v3/dist/domains/visual-accessibility/services/visual-tester.js +87 -3
  193. package/v3/dist/domains/visual-accessibility/services/visual-tester.js.map +1 -1
  194. package/v3/dist/kernel/interfaces.d.ts +54 -1
  195. package/v3/dist/kernel/interfaces.d.ts.map +1 -1
  196. package/v3/dist/learning/dream/dream-scheduler.d.ts +302 -0
  197. package/v3/dist/learning/dream/dream-scheduler.d.ts.map +1 -0
  198. package/v3/dist/learning/dream/dream-scheduler.js +551 -0
  199. package/v3/dist/learning/dream/dream-scheduler.js.map +1 -0
  200. package/v3/dist/learning/dream/index.d.ts +1 -0
  201. package/v3/dist/learning/dream/index.d.ts.map +1 -1
  202. package/v3/dist/learning/dream/index.js +4 -0
  203. package/v3/dist/learning/dream/index.js.map +1 -1
  204. package/v3/dist/learning/experience-capture-middleware.d.ts +119 -0
  205. package/v3/dist/learning/experience-capture-middleware.d.ts.map +1 -0
  206. package/v3/dist/learning/experience-capture-middleware.js +416 -0
  207. package/v3/dist/learning/experience-capture-middleware.js.map +1 -0
  208. package/v3/dist/mcp/bundle.js +83142 -70580
  209. package/v3/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
  210. package/v3/dist/mcp/handlers/core-handlers.js +16 -2
  211. package/v3/dist/mcp/handlers/core-handlers.js.map +1 -1
  212. package/v3/dist/mcp/handlers/domain-handlers.d.ts +12 -13
  213. package/v3/dist/mcp/handlers/domain-handlers.d.ts.map +1 -1
  214. package/v3/dist/mcp/handlers/index.d.ts +1 -1
  215. package/v3/dist/mcp/handlers/index.d.ts.map +1 -1
  216. package/v3/dist/mcp/handlers/index.js +2 -2
  217. package/v3/dist/mcp/handlers/index.js.map +1 -1
  218. package/v3/dist/mcp/handlers/task-handlers.d.ts +1 -0
  219. package/v3/dist/mcp/handlers/task-handlers.d.ts.map +1 -1
  220. package/v3/dist/mcp/handlers/task-handlers.js +46 -12
  221. package/v3/dist/mcp/handlers/task-handlers.js.map +1 -1
  222. package/v3/dist/mcp/handlers/wrapped-domain-handlers.d.ts +30 -0
  223. package/v3/dist/mcp/handlers/wrapped-domain-handlers.d.ts.map +1 -0
  224. package/v3/dist/mcp/handlers/wrapped-domain-handlers.js +75 -0
  225. package/v3/dist/mcp/handlers/wrapped-domain-handlers.js.map +1 -0
  226. package/v3/dist/mcp/services/reasoning-bank-service.d.ts +87 -13
  227. package/v3/dist/mcp/services/reasoning-bank-service.d.ts.map +1 -1
  228. package/v3/dist/mcp/services/reasoning-bank-service.js +291 -31
  229. package/v3/dist/mcp/services/reasoning-bank-service.js.map +1 -1
  230. package/v3/dist/mcp/tools/chaos-resilience/inject.js +1 -1
  231. package/v3/dist/mcp/tools/chaos-resilience/inject.js.map +1 -1
  232. package/v3/dist/mcp/tools/contract-testing/validate.js +1 -1
  233. package/v3/dist/mcp/tools/contract-testing/validate.js.map +1 -1
  234. package/v3/dist/mcp/tools/learning-optimization/optimize.js +1 -1
  235. package/v3/dist/mcp/tools/learning-optimization/optimize.js.map +1 -1
  236. package/v3/dist/mcp/tools/visual-accessibility/index.js +2 -2
  237. package/v3/dist/mcp/tools/visual-accessibility/index.js.map +1 -1
  238. package/v3/dist/routing/qe-agent-registry.d.ts +28 -1
  239. package/v3/dist/routing/qe-agent-registry.d.ts.map +1 -1
  240. package/v3/dist/routing/qe-agent-registry.js +116 -1
  241. package/v3/dist/routing/qe-agent-registry.js.map +1 -1
  242. package/v3/dist/shared/events/domain-events.d.ts +27 -0
  243. package/v3/dist/shared/events/domain-events.d.ts.map +1 -1
  244. package/v3/dist/shared/events/domain-events.js +1 -0
  245. package/v3/dist/shared/events/domain-events.js.map +1 -1
  246. package/v3/dist/sync/claude-flow-bridge.d.ts +63 -0
  247. package/v3/dist/sync/claude-flow-bridge.d.ts.map +1 -0
  248. package/v3/dist/sync/claude-flow-bridge.js +320 -0
  249. package/v3/dist/sync/claude-flow-bridge.js.map +1 -0
  250. package/v3/package.json +1 -1
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Agentic QE v3 - Deployment Advisor Service
3
3
  * ML-based deployment readiness and risk scoring
4
+ *
5
+ * ADR-051: Added LLM integration for AI-powered deployment advice
4
6
  */
5
7
  import { v4 as uuidv4 } from 'uuid';
6
8
  import { ok, err } from '../../../shared/types';
@@ -21,17 +23,182 @@ const DEFAULT_CONFIG = {
21
23
  },
22
24
  enableMLPrediction: true,
23
25
  learningRate: 0.1,
26
+ enableLLMAdvice: true, // ADR-051: On by default - opt-out
27
+ llmModelTier: 2, // ADR-051: Sonnet by default for deployment advice
24
28
  };
25
29
  /**
26
30
  * Deployment Advisor Service Implementation
27
31
  * Uses ML-based risk scoring to provide deployment recommendations
32
+ *
33
+ * ADR-051: Added LLM integration for AI-powered deployment advice including:
34
+ * - Go/no-go recommendations with reasoning
35
+ * - Risk mitigation strategies
36
+ * - Rollback plan suggestions
37
+ * - Post-deployment monitoring recommendations
28
38
  */
29
39
  export class DeploymentAdvisorService {
30
- memory;
31
40
  config;
32
- constructor(memory, config = {}) {
33
- this.memory = memory;
41
+ memory;
42
+ llmRouter;
43
+ constructor(dependencies, config = {}) {
34
44
  this.config = { ...DEFAULT_CONFIG, ...config };
45
+ // Support both old and new constructor signatures for backward compatibility
46
+ if ('memory' in dependencies) {
47
+ this.memory = dependencies.memory;
48
+ this.llmRouter = dependencies.llmRouter;
49
+ }
50
+ else {
51
+ this.memory = dependencies;
52
+ }
53
+ }
54
+ // ============================================================================
55
+ // ADR-051: LLM Enhancement Methods
56
+ // ============================================================================
57
+ /**
58
+ * Check if LLM advice is available and enabled
59
+ */
60
+ isLLMAdviceAvailable() {
61
+ return this.config.enableLLMAdvice && this.llmRouter !== undefined;
62
+ }
63
+ /**
64
+ * Get model ID for the configured tier
65
+ */
66
+ getModelForTier(tier) {
67
+ switch (tier) {
68
+ case 1: return 'claude-3-5-haiku-20241022';
69
+ case 2: return 'claude-sonnet-4-20250514';
70
+ case 3: return 'claude-sonnet-4-20250514';
71
+ case 4: return 'claude-opus-4-5-20251101';
72
+ default: return 'claude-sonnet-4-20250514';
73
+ }
74
+ }
75
+ /**
76
+ * Generate deployment advice using LLM for deeper insights
77
+ * Provides go/no-go recommendation, risk mitigation, rollback plans, and monitoring advice
78
+ */
79
+ async generateDeploymentAdviceWithLLM(metrics, riskScore, baseDecision, releaseCandidate) {
80
+ if (!this.llmRouter) {
81
+ return {};
82
+ }
83
+ try {
84
+ const modelId = this.getModelForTier(this.config.llmModelTier);
85
+ const response = await this.llmRouter.chat({
86
+ messages: [
87
+ {
88
+ role: 'system',
89
+ content: `You are a senior DevOps/SRE engineer providing deployment advice.
90
+ Analyze the deployment metrics and provide comprehensive advice. Be specific and actionable.
91
+ Return JSON with the following structure:
92
+ {
93
+ "goNoGo": {
94
+ "recommendation": "GO" | "NO-GO" | "CONDITIONAL",
95
+ "reasoning": "detailed explanation"
96
+ },
97
+ "riskMitigation": [
98
+ { "risk": "description", "mitigation": "action to take", "priority": "high" | "medium" | "low" }
99
+ ],
100
+ "rollbackPlan": {
101
+ "triggers": ["list of conditions that should trigger rollback"],
102
+ "steps": ["ordered list of rollback steps"],
103
+ "estimatedTime": "estimated rollback duration"
104
+ },
105
+ "monitoring": {
106
+ "keyMetrics": ["metrics to monitor post-deploy"],
107
+ "alertThresholds": { "metric": "threshold" },
108
+ "observationPeriod": "recommended monitoring duration"
109
+ }
110
+ }`,
111
+ },
112
+ {
113
+ role: 'user',
114
+ content: `Release Candidate: ${releaseCandidate}
115
+ Risk Score: ${Math.round(riskScore * 100)}%
116
+ Current Decision: ${baseDecision.toUpperCase()}
117
+
118
+ Quality Metrics:
119
+ - Test Coverage: ${metrics.coverage}%
120
+ - Tests Passing: ${metrics.testsPassing}%
121
+ - Critical Bugs: ${metrics.criticalBugs}
122
+ - Code Smells: ${metrics.codeSmells}
123
+ - Security Vulnerabilities: ${metrics.securityVulnerabilities}
124
+ - Technical Debt: ${metrics.technicalDebt}h
125
+ - Code Duplications: ${metrics.duplications}%
126
+
127
+ Provide deployment advice specific to these metrics.`,
128
+ },
129
+ ],
130
+ model: modelId,
131
+ maxTokens: 2048,
132
+ temperature: 0.3, // Low temperature for consistent advice
133
+ });
134
+ if (response.content) {
135
+ try {
136
+ const jsonMatch = response.content.match(/\{[\s\S]*\}/);
137
+ if (jsonMatch) {
138
+ const analysis = JSON.parse(jsonMatch[0]);
139
+ return this.formatLLMAdvice(analysis, metrics, riskScore);
140
+ }
141
+ }
142
+ catch {
143
+ // JSON parse failed - return empty enhancement
144
+ console.warn('[DeploymentAdvisor] Failed to parse LLM response JSON');
145
+ }
146
+ }
147
+ }
148
+ catch (error) {
149
+ console.warn('[DeploymentAdvisor] LLM advice generation failed:', error);
150
+ }
151
+ return {};
152
+ }
153
+ /**
154
+ * Format LLM analysis into DeploymentAdvice enhancements
155
+ */
156
+ formatLLMAdvice(analysis, metrics, riskScore) {
157
+ const enhancedReasons = [];
158
+ const enhancedConditions = [];
159
+ // Add go/no-go reasoning
160
+ if (analysis.goNoGo?.reasoning) {
161
+ enhancedReasons.push(`[LLM Analysis] ${analysis.goNoGo.reasoning}`);
162
+ }
163
+ // Add risk mitigation as conditions
164
+ if (analysis.riskMitigation && analysis.riskMitigation.length > 0) {
165
+ for (const risk of analysis.riskMitigation) {
166
+ if (risk.mitigation) {
167
+ enhancedConditions.push(`[${(risk.priority || 'medium').toUpperCase()}] ${risk.mitigation}`);
168
+ }
169
+ }
170
+ }
171
+ // Add monitoring recommendations as conditions
172
+ if (analysis.monitoring) {
173
+ if (analysis.monitoring.observationPeriod) {
174
+ enhancedConditions.push(`Monitor deployment for ${analysis.monitoring.observationPeriod} post-deploy`);
175
+ }
176
+ if (analysis.monitoring.keyMetrics && analysis.monitoring.keyMetrics.length > 0) {
177
+ enhancedConditions.push(`Key metrics to watch: ${analysis.monitoring.keyMetrics.join(', ')}`);
178
+ }
179
+ }
180
+ // Generate enhanced rollback plan
181
+ let enhancedRollbackPlan;
182
+ if (analysis.rollbackPlan) {
183
+ const parts = [];
184
+ if (analysis.rollbackPlan.triggers && analysis.rollbackPlan.triggers.length > 0) {
185
+ parts.push(`Rollback Triggers:\n${analysis.rollbackPlan.triggers.map((t, i) => ` ${i + 1}. ${t}`).join('\n')}`);
186
+ }
187
+ if (analysis.rollbackPlan.steps && analysis.rollbackPlan.steps.length > 0) {
188
+ parts.push(`\nRollback Steps:\n${analysis.rollbackPlan.steps.map((s, i) => ` ${i + 1}. ${s}`).join('\n')}`);
189
+ }
190
+ if (analysis.rollbackPlan.estimatedTime) {
191
+ parts.push(`\nEstimated Rollback Time: ${analysis.rollbackPlan.estimatedTime}`);
192
+ }
193
+ if (parts.length > 0) {
194
+ enhancedRollbackPlan = parts.join('\n');
195
+ }
196
+ }
197
+ return {
198
+ reasons: enhancedReasons,
199
+ conditions: enhancedConditions,
200
+ rollbackPlan: enhancedRollbackPlan,
201
+ };
35
202
  }
36
203
  /**
37
204
  * Get deployment advice based on quality metrics and risk analysis
@@ -52,15 +219,29 @@ export class DeploymentAdvisorService {
52
219
  // Generate reasons
53
220
  const reasons = this.generateReasons(metrics, adjustedRiskScore);
54
221
  // Generate conditions for conditional approval
55
- const conditions = decision === 'warning'
222
+ let conditions = decision === 'warning'
56
223
  ? this.generateConditions(metrics)
57
224
  : undefined;
58
225
  // Generate rollback plan for non-blocked deployments
59
- const rollbackPlan = decision !== 'blocked'
226
+ let rollbackPlan = decision !== 'blocked'
60
227
  ? this.generateRollbackPlan(releaseCandidate)
61
228
  : undefined;
62
229
  // Calculate confidence based on historical accuracy
63
230
  const confidence = await this.calculateConfidence(metrics);
231
+ // ADR-051: Enhance advice with LLM if enabled
232
+ if (this.isLLMAdviceAvailable()) {
233
+ const llmAdvice = await this.generateDeploymentAdviceWithLLM(metrics, adjustedRiskScore, decision, releaseCandidate);
234
+ // Merge LLM-generated advice with base advice
235
+ if (llmAdvice.reasons && llmAdvice.reasons.length > 0) {
236
+ reasons.push(...llmAdvice.reasons);
237
+ }
238
+ if (llmAdvice.conditions && llmAdvice.conditions.length > 0) {
239
+ conditions = [...(conditions || []), ...llmAdvice.conditions];
240
+ }
241
+ if (llmAdvice.rollbackPlan) {
242
+ rollbackPlan = llmAdvice.rollbackPlan;
243
+ }
244
+ }
64
245
  const advice = {
65
246
  decision,
66
247
  confidence,
@@ -381,4 +562,31 @@ export class DeploymentAdvisorService {
381
562
  await this.memory.set('deployment-advice:ml:weights', newWeights, { namespace: 'quality-assessment', persist: true });
382
563
  }
383
564
  }
565
+ // ============================================================================
566
+ // Factory Functions
567
+ // ============================================================================
568
+ /**
569
+ * Create a DeploymentAdvisorService instance with default dependencies
570
+ * Maintains backward compatibility with existing code
571
+ *
572
+ * @param memory - Memory backend for pattern storage
573
+ * @param config - Optional configuration overrides
574
+ * @returns Configured DeploymentAdvisorService instance
575
+ */
576
+ export function createDeploymentAdvisorService(memory, config = {}) {
577
+ return new DeploymentAdvisorService({ memory }, config);
578
+ }
579
+ /**
580
+ * Create a DeploymentAdvisorService instance with custom dependencies
581
+ * Used for testing or when custom implementations are needed
582
+ *
583
+ * ADR-051: Includes LLM router for AI-enhanced deployment advice
584
+ *
585
+ * @param dependencies - All service dependencies including optional LLM router
586
+ * @param config - Optional configuration overrides
587
+ * @returns Configured DeploymentAdvisorService instance
588
+ */
589
+ export function createDeploymentAdvisorServiceWithDependencies(dependencies, config = {}) {
590
+ return new DeploymentAdvisorService(dependencies, config);
591
+ }
384
592
  //# sourceMappingURL=deployment-advisor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deployment-advisor.js","sourceRoot":"","sources":["../../../../src/domains/quality-assessment/services/deployment-advisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deployment-advisor.js","sourceRoot":"","sources":["../../../../src/domains/quality-assessment/services/deployment-advisor.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@
2
2
  * Agentic QE v3 - Quality Analyzer Service
3
3
  * Comprehensive quality metrics analysis with trends and recommendations
4
4
  */
5
- import { Result } from '../../../shared/types';
5
+ import { Result, QualityScore } from '../../../shared/types';
6
6
  import { MemoryBackend } from '../../../kernel/interfaces';
7
- import { QualityAnalysisRequest, QualityReport, QualityTrend, ComplexityRequest, ComplexityReport } from '../interfaces';
7
+ import { QualityAnalysisRequest, QualityReport, QualityMetricDetail, QualityTrend, ComplexityRequest, ComplexityReport, LLMQualityInsights } from '../interfaces';
8
+ import type { HybridRouter } from '../../../shared/llm';
8
9
  /**
9
10
  * Interface for the quality analyzer service
10
11
  */
@@ -33,16 +34,70 @@ export interface QualityAnalyzerConfig {
33
34
  critical: number;
34
35
  };
35
36
  };
37
+ /** ADR-051: Enable LLM-powered quality insights */
38
+ enableLLMInsights?: boolean;
39
+ /** ADR-051: Model tier for LLM calls (1=Haiku, 2=Sonnet, 4=Opus) */
40
+ llmModelTier?: number;
41
+ /** ADR-051: Max tokens for LLM responses */
42
+ llmMaxTokens?: number;
43
+ }
44
+ /**
45
+ * Dependencies for QualityAnalyzerService
46
+ * Enables dependency injection and testing
47
+ */
48
+ export interface QualityAnalyzerDependencies {
49
+ memory: MemoryBackend;
50
+ /** ADR-051: Optional LLM router for AI-enhanced quality insights */
51
+ llmRouter?: HybridRouter;
36
52
  }
37
53
  /**
38
54
  * Quality Analyzer Service Implementation
39
55
  * Analyzes code quality metrics and provides actionable insights
56
+ *
57
+ * ADR-051: Added LLM enhancement for AI-powered quality insights
40
58
  */
41
59
  export declare class QualityAnalyzerService implements IQualityAnalyzerService {
42
- private readonly memory;
43
60
  private readonly config;
44
61
  private readonly metricsAnalyzer;
45
- constructor(memory: MemoryBackend, config?: Partial<QualityAnalyzerConfig>);
62
+ private readonly memory;
63
+ private readonly llmRouter?;
64
+ /**
65
+ * Creates a QualityAnalyzerService instance
66
+ *
67
+ * Supports two constructor signatures for backward compatibility:
68
+ * 1. Old: (memory: MemoryBackend, config?: Partial<QualityAnalyzerConfig>)
69
+ * 2. New: (dependencies: QualityAnalyzerDependencies, config?: Partial<QualityAnalyzerConfig>)
70
+ */
71
+ constructor(memoryOrDependencies: MemoryBackend | QualityAnalyzerDependencies, config?: Partial<QualityAnalyzerConfig>);
72
+ /**
73
+ * Check if LLM insights are available and enabled
74
+ */
75
+ private isLLMInsightsAvailable;
76
+ /**
77
+ * Get model ID for the configured tier
78
+ */
79
+ private getModelForTier;
80
+ /**
81
+ * Generate quality insights using LLM
82
+ * Provides AI-powered explanation and prioritized recommendations
83
+ */
84
+ generateQualityInsightsWithLLM(metrics: QualityMetricDetail[], score: QualityScore, codeContext?: string): Promise<LLMQualityInsights | null>;
85
+ /**
86
+ * Build prompt for quality insights generation
87
+ */
88
+ private buildQualityInsightsPrompt;
89
+ /**
90
+ * Parse LLM response into structured insights
91
+ */
92
+ private parseQualityInsightsResponse;
93
+ /**
94
+ * Normalize impact value to valid type
95
+ */
96
+ private normalizeImpact;
97
+ /**
98
+ * Normalize effort value to valid type
99
+ */
100
+ private normalizeEffort;
46
101
  /**
47
102
  * Analyze quality metrics for source files
48
103
  */
@@ -1 +1 @@
1
- {"version":3,"file":"quality-analyzer.d.ts","sourceRoot":"","sources":["../../../../src/domains/quality-assessment/services/quality-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAyB,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,sBAAsB,EACtB,aAAa,EAEb,YAAY,EAEZ,iBAAiB,EACjB,gBAAgB,EAIjB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IACvF,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;IACxF,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;CACrF;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE;QACpB,UAAU,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QAClD,SAAS,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QACjD,eAAe,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KACxD,CAAC;CACH;AAuBD;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,uBAAuB;IAKlE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;gBAGnC,MAAM,EAAE,aAAa,EACtC,MAAM,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAM7C;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAyCxC;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAoC3C;;OAEG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAqDzB,kBAAkB;YAyElB,iBAAiB;IAO/B,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,gBAAgB;IAiCxB,OAAO,CAAC,qBAAqB;YAmCf,cAAc;IAyB5B,OAAO,CAAC,uBAAuB;YAuEjB,qBAAqB;IAmCnC,OAAO,CAAC,0BAA0B;IAuBlC,OAAO,CAAC,gBAAgB;IA8CxB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,uBAAuB;YAiBjB,WAAW;YAmBX,qBAAqB;CAcpC"}
1
+ {"version":3,"file":"quality-analyzer.d.ts","sourceRoot":"","sources":["../../../../src/domains/quality-assessment/services/quality-analyzer.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,9 @@ const DEFAULT_CONFIG = {
13
13
  cognitive: { warning: 15, critical: 30 },
14
14
  maintainability: { warning: 50, critical: 30 }, // Lower is worse
15
15
  },
16
+ enableLLMInsights: true, // On by default - opt-out
17
+ llmModelTier: 2, // Sonnet by default
18
+ llmMaxTokens: 2048,
16
19
  };
17
20
  /**
18
21
  * Metric rating thresholds
@@ -27,15 +30,195 @@ const RATING_THRESHOLDS = {
27
30
  /**
28
31
  * Quality Analyzer Service Implementation
29
32
  * Analyzes code quality metrics and provides actionable insights
33
+ *
34
+ * ADR-051: Added LLM enhancement for AI-powered quality insights
30
35
  */
31
36
  export class QualityAnalyzerService {
32
- memory;
33
37
  config;
34
38
  metricsAnalyzer;
35
- constructor(memory, config = {}) {
36
- this.memory = memory;
39
+ memory;
40
+ llmRouter;
41
+ /**
42
+ * Creates a QualityAnalyzerService instance
43
+ *
44
+ * Supports two constructor signatures for backward compatibility:
45
+ * 1. Old: (memory: MemoryBackend, config?: Partial<QualityAnalyzerConfig>)
46
+ * 2. New: (dependencies: QualityAnalyzerDependencies, config?: Partial<QualityAnalyzerConfig>)
47
+ */
48
+ constructor(memoryOrDependencies, config = {}) {
37
49
  this.config = { ...DEFAULT_CONFIG, ...config };
38
50
  this.metricsAnalyzer = getCodeMetricsAnalyzer();
51
+ // Support both old and new constructor signatures
52
+ if ('memory' in memoryOrDependencies) {
53
+ // New signature: dependencies object
54
+ this.memory = memoryOrDependencies.memory;
55
+ this.llmRouter = memoryOrDependencies.llmRouter;
56
+ }
57
+ else {
58
+ // Old signature: direct MemoryBackend
59
+ this.memory = memoryOrDependencies;
60
+ this.llmRouter = undefined;
61
+ }
62
+ }
63
+ // ============================================================================
64
+ // ADR-051: LLM Enhancement Methods
65
+ // ============================================================================
66
+ /**
67
+ * Check if LLM insights are available and enabled
68
+ */
69
+ isLLMInsightsAvailable() {
70
+ return this.config.enableLLMInsights === true && this.llmRouter !== undefined;
71
+ }
72
+ /**
73
+ * Get model ID for the configured tier
74
+ */
75
+ getModelForTier(tier) {
76
+ switch (tier) {
77
+ case 1: return 'claude-3-5-haiku-20241022';
78
+ case 2: return 'claude-sonnet-4-20250514';
79
+ case 3: return 'claude-sonnet-4-20250514';
80
+ case 4: return 'claude-opus-4-5-20251101';
81
+ default: return 'claude-sonnet-4-20250514';
82
+ }
83
+ }
84
+ /**
85
+ * Generate quality insights using LLM
86
+ * Provides AI-powered explanation and prioritized recommendations
87
+ */
88
+ async generateQualityInsightsWithLLM(metrics, score, codeContext) {
89
+ if (!this.llmRouter)
90
+ return null;
91
+ try {
92
+ const prompt = this.buildQualityInsightsPrompt(metrics, score, codeContext);
93
+ const modelId = this.getModelForTier(this.config.llmModelTier ?? 2);
94
+ const response = await this.llmRouter.chat({
95
+ messages: [
96
+ {
97
+ role: 'system',
98
+ content: `You are an expert software quality engineer. Analyze quality metrics and provide actionable insights.
99
+
100
+ Your response MUST be valid JSON with this exact structure:
101
+ {
102
+ "explanation": "string - natural language explanation of quality issues",
103
+ "prioritizedRecommendations": [
104
+ {
105
+ "priority": number (1 is highest),
106
+ "title": "string",
107
+ "description": "string",
108
+ "estimatedImpact": "high" | "medium" | "low",
109
+ "estimatedEffort": "high" | "medium" | "low"
110
+ }
111
+ ],
112
+ "estimatedImpactOnScore": number (points improvement if recommendations followed),
113
+ "keySummary": "string - brief summary of key findings"
114
+ }
115
+
116
+ Focus on:
117
+ 1. Root cause analysis of quality issues
118
+ 2. Prioritized, actionable recommendations
119
+ 3. Realistic impact estimates
120
+ 4. Practical effort assessments`,
121
+ },
122
+ {
123
+ role: 'user',
124
+ content: prompt,
125
+ },
126
+ ],
127
+ model: modelId,
128
+ maxTokens: this.config.llmMaxTokens ?? 2048,
129
+ temperature: 0.3, // Low temperature for consistent analysis
130
+ });
131
+ if (response.content && response.content.length > 0) {
132
+ return this.parseQualityInsightsResponse(response.content);
133
+ }
134
+ return null;
135
+ }
136
+ catch (error) {
137
+ console.warn('[QualityAnalyzer] LLM insights generation failed:', error);
138
+ return null;
139
+ }
140
+ }
141
+ /**
142
+ * Build prompt for quality insights generation
143
+ */
144
+ buildQualityInsightsPrompt(metrics, score, codeContext) {
145
+ let prompt = `## Quality Analysis Results\n\n`;
146
+ prompt += `### Overall Score: ${score.overall}/100\n\n`;
147
+ prompt += `### Detailed Metrics:\n`;
148
+ for (const metric of metrics) {
149
+ prompt += `- **${metric.name}**: ${metric.value} (Rating: ${metric.rating}, Trend: ${metric.trend})\n`;
150
+ }
151
+ prompt += `\n`;
152
+ prompt += `### Score Breakdown:\n`;
153
+ prompt += `- Coverage: ${score.coverage}%\n`;
154
+ prompt += `- Complexity: ${score.complexity}\n`;
155
+ prompt += `- Maintainability: ${score.maintainability}\n`;
156
+ prompt += `- Security: ${score.security}\n\n`;
157
+ if (codeContext) {
158
+ prompt += `### Code Context:\n\`\`\`\n${codeContext.slice(0, 2000)}\n\`\`\`\n\n`;
159
+ }
160
+ prompt += `## Task\n`;
161
+ prompt += `Analyze these quality metrics and provide:\n`;
162
+ prompt += `1. A clear explanation of the quality issues identified\n`;
163
+ prompt += `2. Prioritized recommendations for improvement (most impactful first)\n`;
164
+ prompt += `3. Estimated impact on quality score if recommendations are followed\n`;
165
+ prompt += `4. A brief summary of key findings\n`;
166
+ return prompt;
167
+ }
168
+ /**
169
+ * Parse LLM response into structured insights
170
+ */
171
+ parseQualityInsightsResponse(content) {
172
+ try {
173
+ // Try to extract JSON from response
174
+ const jsonMatch = content.match(/\{[\s\S]*\}/);
175
+ if (jsonMatch) {
176
+ const parsed = JSON.parse(jsonMatch[0]);
177
+ // Validate required fields
178
+ if (typeof parsed.explanation === 'string' &&
179
+ Array.isArray(parsed.prioritizedRecommendations) &&
180
+ typeof parsed.estimatedImpactOnScore === 'number' &&
181
+ typeof parsed.keySummary === 'string') {
182
+ return {
183
+ explanation: parsed.explanation,
184
+ prioritizedRecommendations: parsed.prioritizedRecommendations.map((rec, index) => ({
185
+ priority: rec.priority ?? index + 1,
186
+ title: rec.title ?? 'Recommendation',
187
+ description: rec.description ?? '',
188
+ estimatedImpact: this.normalizeImpact(rec.estimatedImpact),
189
+ estimatedEffort: this.normalizeEffort(rec.estimatedEffort),
190
+ })),
191
+ estimatedImpactOnScore: parsed.estimatedImpactOnScore,
192
+ keySummary: parsed.keySummary,
193
+ };
194
+ }
195
+ }
196
+ return null;
197
+ }
198
+ catch (error) {
199
+ console.warn('[QualityAnalyzer] Failed to parse LLM insights response:', error);
200
+ return null;
201
+ }
202
+ }
203
+ /**
204
+ * Normalize impact value to valid type
205
+ */
206
+ normalizeImpact(value) {
207
+ const normalized = value?.toLowerCase();
208
+ if (normalized === 'high' || normalized === 'medium' || normalized === 'low') {
209
+ return normalized;
210
+ }
211
+ return 'medium';
212
+ }
213
+ /**
214
+ * Normalize effort value to valid type
215
+ */
216
+ normalizeEffort(value) {
217
+ const normalized = value?.toLowerCase();
218
+ if (normalized === 'high' || normalized === 'medium' || normalized === 'low') {
219
+ return normalized;
220
+ }
221
+ return 'medium';
39
222
  }
40
223
  /**
41
224
  * Analyze quality metrics for source files
@@ -58,11 +241,20 @@ export class QualityAnalyzerService {
58
241
  : [];
59
242
  // Generate recommendations based on metrics
60
243
  const recommendations = this.generateRecommendations(metricDetails, score);
244
+ // ADR-051: Generate LLM insights if enabled
245
+ let llmInsights;
246
+ if (this.isLLMInsightsAvailable()) {
247
+ const insights = await this.generateQualityInsightsWithLLM(metricDetails, score);
248
+ if (insights) {
249
+ llmInsights = insights;
250
+ }
251
+ }
61
252
  const report = {
62
253
  score,
63
254
  metrics: metricDetails,
64
255
  trends,
65
256
  recommendations,
257
+ llmInsights,
66
258
  };
67
259
  // Store the report
68
260
  await this.storeReport(report, sourceFiles);