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.
- package/.claude/helpers/statusline-v3.cjs +96 -27
- package/README.md +6 -3
- package/package.json +1 -1
- package/scripts/sync-claude-flow.cjs +99 -0
- package/v3/CHANGELOG.md +133 -0
- package/v3/README.md +9 -5
- package/v3/dist/cli/bundle.js +60879 -51811
- package/v3/dist/coordination/consensus/domain-findings.d.ts +202 -0
- package/v3/dist/coordination/consensus/domain-findings.d.ts.map +1 -0
- package/v3/dist/coordination/consensus/domain-findings.js +66 -0
- package/v3/dist/coordination/consensus/domain-findings.js.map +1 -0
- package/v3/dist/coordination/consensus/index.d.ts +2 -0
- package/v3/dist/coordination/consensus/index.d.ts.map +1 -1
- package/v3/dist/coordination/consensus/index.js +4 -0
- package/v3/dist/coordination/consensus/index.js.map +1 -1
- package/v3/dist/coordination/index.d.ts +1 -0
- package/v3/dist/coordination/index.d.ts.map +1 -1
- package/v3/dist/coordination/index.js +4 -0
- package/v3/dist/coordination/index.js.map +1 -1
- package/v3/dist/coordination/mixins/consensus-enabled-domain.d.ts +225 -0
- package/v3/dist/coordination/mixins/consensus-enabled-domain.d.ts.map +1 -0
- package/v3/dist/coordination/mixins/consensus-enabled-domain.js +466 -0
- package/v3/dist/coordination/mixins/consensus-enabled-domain.js.map +1 -0
- package/v3/dist/coordination/mixins/index.d.ts +14 -0
- package/v3/dist/coordination/mixins/index.d.ts.map +1 -0
- package/v3/dist/coordination/mixins/index.js +28 -0
- package/v3/dist/coordination/mixins/index.js.map +1 -0
- package/v3/dist/coordination/mixins/mincut-aware-domain.d.ts +227 -0
- package/v3/dist/coordination/mixins/mincut-aware-domain.d.ts.map +1 -0
- package/v3/dist/coordination/mixins/mincut-aware-domain.js +368 -0
- package/v3/dist/coordination/mixins/mincut-aware-domain.js.map +1 -0
- package/v3/dist/coordination/queen-coordinator.d.ts +23 -1
- package/v3/dist/coordination/queen-coordinator.d.ts.map +1 -1
- package/v3/dist/coordination/queen-coordinator.js +131 -3
- package/v3/dist/coordination/queen-coordinator.js.map +1 -1
- package/v3/dist/coordination/task-executor.d.ts +21 -1
- package/v3/dist/coordination/task-executor.d.ts.map +1 -1
- package/v3/dist/coordination/task-executor.js +222 -5
- package/v3/dist/coordination/task-executor.js.map +1 -1
- package/v3/dist/domains/chaos-resilience/coordinator.d.ts +92 -0
- package/v3/dist/domains/chaos-resilience/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/chaos-resilience/coordinator.js +241 -1
- package/v3/dist/domains/chaos-resilience/coordinator.js.map +1 -1
- package/v3/dist/domains/chaos-resilience/plugin.js +1 -1
- package/v3/dist/domains/chaos-resilience/plugin.js.map +1 -1
- package/v3/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +29 -2
- package/v3/dist/domains/chaos-resilience/services/chaos-engineer.d.ts.map +1 -1
- package/v3/dist/domains/chaos-resilience/services/chaos-engineer.js +62 -3
- package/v3/dist/domains/chaos-resilience/services/chaos-engineer.js.map +1 -1
- package/v3/dist/domains/code-intelligence/coordinator.d.ts +112 -0
- package/v3/dist/domains/code-intelligence/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/coordinator.js +221 -0
- package/v3/dist/domains/code-intelligence/coordinator.js.map +1 -1
- package/v3/dist/domains/code-intelligence/services/knowledge-graph.d.ts +66 -2
- package/v3/dist/domains/code-intelligence/services/knowledge-graph.d.ts.map +1 -1
- package/v3/dist/domains/code-intelligence/services/knowledge-graph.js +253 -3
- package/v3/dist/domains/code-intelligence/services/knowledge-graph.js.map +1 -1
- package/v3/dist/domains/contract-testing/coordinator.d.ts +89 -1
- package/v3/dist/domains/contract-testing/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/contract-testing/coordinator.js +222 -1
- package/v3/dist/domains/contract-testing/coordinator.js.map +1 -1
- package/v3/dist/domains/contract-testing/interfaces.d.ts +29 -1
- package/v3/dist/domains/contract-testing/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/contract-testing/plugin.js +1 -1
- package/v3/dist/domains/contract-testing/plugin.js.map +1 -1
- package/v3/dist/domains/contract-testing/services/contract-validator.d.ts +29 -2
- package/v3/dist/domains/contract-testing/services/contract-validator.d.ts.map +1 -1
- package/v3/dist/domains/contract-testing/services/contract-validator.js +58 -3
- package/v3/dist/domains/contract-testing/services/contract-validator.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/coordinator.d.ts +95 -2
- package/v3/dist/domains/coverage-analysis/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/coordinator.js +274 -6
- package/v3/dist/domains/coverage-analysis/coordinator.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/plugin.d.ts +6 -1
- package/v3/dist/domains/coverage-analysis/plugin.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/plugin.js +73 -0
- package/v3/dist/domains/coverage-analysis/plugin.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts +119 -3
- package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.js +267 -5
- package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.js.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/gap-detector.d.ts +111 -2
- package/v3/dist/domains/coverage-analysis/services/gap-detector.d.ts.map +1 -1
- package/v3/dist/domains/coverage-analysis/services/gap-detector.js +231 -3
- package/v3/dist/domains/coverage-analysis/services/gap-detector.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/coordinator.d.ts +80 -1
- package/v3/dist/domains/defect-intelligence/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/coordinator.js +262 -7
- package/v3/dist/domains/defect-intelligence/coordinator.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/interfaces.d.ts +17 -0
- package/v3/dist/domains/defect-intelligence/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/defect-predictor.d.ts +91 -2
- package/v3/dist/domains/defect-intelligence/services/defect-predictor.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/defect-predictor.js +274 -7
- package/v3/dist/domains/defect-intelligence/services/defect-predictor.js.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts +79 -2
- package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.js +259 -3
- package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.js.map +1 -1
- package/v3/dist/domains/domain-interface.d.ts +194 -2
- package/v3/dist/domains/domain-interface.d.ts.map +1 -1
- package/v3/dist/domains/domain-interface.js +239 -0
- package/v3/dist/domains/domain-interface.js.map +1 -1
- package/v3/dist/domains/learning-optimization/coordinator.d.ts +171 -0
- package/v3/dist/domains/learning-optimization/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/coordinator.js +401 -1
- package/v3/dist/domains/learning-optimization/coordinator.js.map +1 -1
- package/v3/dist/domains/learning-optimization/index.d.ts +1 -1
- package/v3/dist/domains/learning-optimization/index.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/index.js.map +1 -1
- package/v3/dist/domains/learning-optimization/interfaces.d.ts +18 -0
- package/v3/dist/domains/learning-optimization/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/plugin.js +1 -1
- package/v3/dist/domains/learning-optimization/plugin.js.map +1 -1
- package/v3/dist/domains/learning-optimization/services/learning-coordinator.d.ts +54 -2
- package/v3/dist/domains/learning-optimization/services/learning-coordinator.d.ts.map +1 -1
- package/v3/dist/domains/learning-optimization/services/learning-coordinator.js +90 -3
- package/v3/dist/domains/learning-optimization/services/learning-coordinator.js.map +1 -1
- package/v3/dist/domains/quality-assessment/coordinator.d.ts +127 -0
- package/v3/dist/domains/quality-assessment/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/coordinator.js +493 -7
- package/v3/dist/domains/quality-assessment/coordinator.js.map +1 -1
- package/v3/dist/domains/quality-assessment/interfaces.d.ts +22 -0
- package/v3/dist/domains/quality-assessment/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/plugin.d.ts +6 -1
- package/v3/dist/domains/quality-assessment/plugin.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/plugin.js +67 -0
- package/v3/dist/domains/quality-assessment/plugin.js.map +1 -1
- package/v3/dist/domains/quality-assessment/services/deployment-advisor.d.ts +61 -2
- package/v3/dist/domains/quality-assessment/services/deployment-advisor.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/services/deployment-advisor.js +213 -5
- package/v3/dist/domains/quality-assessment/services/deployment-advisor.js.map +1 -1
- package/v3/dist/domains/quality-assessment/services/quality-analyzer.d.ts +59 -4
- package/v3/dist/domains/quality-assessment/services/quality-analyzer.d.ts.map +1 -1
- package/v3/dist/domains/quality-assessment/services/quality-analyzer.js +195 -3
- package/v3/dist/domains/quality-assessment/services/quality-analyzer.js.map +1 -1
- package/v3/dist/domains/requirements-validation/coordinator.d.ts +78 -0
- package/v3/dist/domains/requirements-validation/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/coordinator.js +189 -0
- package/v3/dist/domains/requirements-validation/coordinator.js.map +1 -1
- package/v3/dist/domains/requirements-validation/interfaces.d.ts +4 -0
- package/v3/dist/domains/requirements-validation/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/services/requirements-validator.d.ts +106 -2
- package/v3/dist/domains/requirements-validation/services/requirements-validator.d.ts.map +1 -1
- package/v3/dist/domains/requirements-validation/services/requirements-validator.js +263 -3
- package/v3/dist/domains/requirements-validation/services/requirements-validator.js.map +1 -1
- package/v3/dist/domains/security-compliance/coordinator.d.ts +56 -1
- package/v3/dist/domains/security-compliance/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/coordinator.js +241 -17
- package/v3/dist/domains/security-compliance/coordinator.js.map +1 -1
- package/v3/dist/domains/security-compliance/interfaces.d.ts +2 -0
- package/v3/dist/domains/security-compliance/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/security-scanner.d.ts +33 -2
- package/v3/dist/domains/security-compliance/services/security-scanner.d.ts.map +1 -1
- package/v3/dist/domains/security-compliance/services/security-scanner.js +107 -3
- package/v3/dist/domains/security-compliance/services/security-scanner.js.map +1 -1
- package/v3/dist/domains/test-execution/coordinator.d.ts +89 -0
- package/v3/dist/domains/test-execution/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/coordinator.js +259 -2
- package/v3/dist/domains/test-execution/coordinator.js.map +1 -1
- package/v3/dist/domains/test-execution/plugin.d.ts +6 -1
- package/v3/dist/domains/test-execution/plugin.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/plugin.js +77 -0
- package/v3/dist/domains/test-execution/plugin.js.map +1 -1
- package/v3/dist/domains/test-execution/services/test-executor.d.ts +30 -2
- package/v3/dist/domains/test-execution/services/test-executor.d.ts.map +1 -1
- package/v3/dist/domains/test-execution/services/test-executor.js +64 -3
- package/v3/dist/domains/test-execution/services/test-executor.js.map +1 -1
- package/v3/dist/domains/test-generation/coordinator.d.ts +137 -0
- package/v3/dist/domains/test-generation/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/coordinator.js +421 -1
- package/v3/dist/domains/test-generation/coordinator.js.map +1 -1
- package/v3/dist/domains/test-generation/interfaces.d.ts +2 -0
- package/v3/dist/domains/test-generation/interfaces.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/plugin.d.ts +6 -1
- package/v3/dist/domains/test-generation/plugin.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/plugin.js +84 -0
- package/v3/dist/domains/test-generation/plugin.js.map +1 -1
- package/v3/dist/domains/test-generation/services/test-generator.d.ts +32 -0
- package/v3/dist/domains/test-generation/services/test-generator.d.ts.map +1 -1
- package/v3/dist/domains/test-generation/services/test-generator.js +158 -3
- package/v3/dist/domains/test-generation/services/test-generator.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/coordinator.d.ts +77 -0
- package/v3/dist/domains/visual-accessibility/coordinator.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/coordinator.js +210 -2
- package/v3/dist/domains/visual-accessibility/coordinator.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/plugin.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/plugin.js +3 -3
- package/v3/dist/domains/visual-accessibility/plugin.js.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/visual-tester.d.ts +47 -2
- package/v3/dist/domains/visual-accessibility/services/visual-tester.d.ts.map +1 -1
- package/v3/dist/domains/visual-accessibility/services/visual-tester.js +87 -3
- package/v3/dist/domains/visual-accessibility/services/visual-tester.js.map +1 -1
- package/v3/dist/kernel/interfaces.d.ts +54 -1
- package/v3/dist/kernel/interfaces.d.ts.map +1 -1
- package/v3/dist/learning/dream/dream-scheduler.d.ts +302 -0
- package/v3/dist/learning/dream/dream-scheduler.d.ts.map +1 -0
- package/v3/dist/learning/dream/dream-scheduler.js +551 -0
- package/v3/dist/learning/dream/dream-scheduler.js.map +1 -0
- package/v3/dist/learning/dream/index.d.ts +1 -0
- package/v3/dist/learning/dream/index.d.ts.map +1 -1
- package/v3/dist/learning/dream/index.js +4 -0
- package/v3/dist/learning/dream/index.js.map +1 -1
- package/v3/dist/learning/experience-capture-middleware.d.ts +119 -0
- package/v3/dist/learning/experience-capture-middleware.d.ts.map +1 -0
- package/v3/dist/learning/experience-capture-middleware.js +416 -0
- package/v3/dist/learning/experience-capture-middleware.js.map +1 -0
- package/v3/dist/mcp/bundle.js +83142 -70580
- package/v3/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/core-handlers.js +16 -2
- package/v3/dist/mcp/handlers/core-handlers.js.map +1 -1
- package/v3/dist/mcp/handlers/domain-handlers.d.ts +12 -13
- package/v3/dist/mcp/handlers/domain-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/index.d.ts +1 -1
- package/v3/dist/mcp/handlers/index.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/index.js +2 -2
- package/v3/dist/mcp/handlers/index.js.map +1 -1
- package/v3/dist/mcp/handlers/task-handlers.d.ts +1 -0
- package/v3/dist/mcp/handlers/task-handlers.d.ts.map +1 -1
- package/v3/dist/mcp/handlers/task-handlers.js +46 -12
- package/v3/dist/mcp/handlers/task-handlers.js.map +1 -1
- package/v3/dist/mcp/handlers/wrapped-domain-handlers.d.ts +30 -0
- package/v3/dist/mcp/handlers/wrapped-domain-handlers.d.ts.map +1 -0
- package/v3/dist/mcp/handlers/wrapped-domain-handlers.js +75 -0
- package/v3/dist/mcp/handlers/wrapped-domain-handlers.js.map +1 -0
- package/v3/dist/mcp/services/reasoning-bank-service.d.ts +87 -13
- package/v3/dist/mcp/services/reasoning-bank-service.d.ts.map +1 -1
- package/v3/dist/mcp/services/reasoning-bank-service.js +291 -31
- package/v3/dist/mcp/services/reasoning-bank-service.js.map +1 -1
- package/v3/dist/mcp/tools/chaos-resilience/inject.js +1 -1
- package/v3/dist/mcp/tools/chaos-resilience/inject.js.map +1 -1
- package/v3/dist/mcp/tools/contract-testing/validate.js +1 -1
- package/v3/dist/mcp/tools/contract-testing/validate.js.map +1 -1
- package/v3/dist/mcp/tools/learning-optimization/optimize.js +1 -1
- package/v3/dist/mcp/tools/learning-optimization/optimize.js.map +1 -1
- package/v3/dist/mcp/tools/visual-accessibility/index.js +2 -2
- package/v3/dist/mcp/tools/visual-accessibility/index.js.map +1 -1
- package/v3/dist/routing/qe-agent-registry.d.ts +28 -1
- package/v3/dist/routing/qe-agent-registry.d.ts.map +1 -1
- package/v3/dist/routing/qe-agent-registry.js +116 -1
- package/v3/dist/routing/qe-agent-registry.js.map +1 -1
- package/v3/dist/shared/events/domain-events.d.ts +27 -0
- package/v3/dist/shared/events/domain-events.d.ts.map +1 -1
- package/v3/dist/shared/events/domain-events.js +1 -0
- package/v3/dist/shared/events/domain-events.js.map +1 -1
- package/v3/dist/sync/claude-flow-bridge.d.ts +63 -0
- package/v3/dist/sync/claude-flow-bridge.d.ts.map +1 -0
- package/v3/dist/sync/claude-flow-bridge.js +320 -0
- package/v3/dist/sync/claude-flow-bridge.js.map +1 -0
- 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
|
-
|
|
33
|
-
|
|
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
|
-
|
|
222
|
+
let conditions = decision === 'warning'
|
|
56
223
|
? this.generateConditions(metrics)
|
|
57
224
|
: undefined;
|
|
58
225
|
// Generate rollback plan for non-blocked deployments
|
|
59
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
36
|
-
|
|
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);
|