mcp-adr-analysis-server 2.0.8 → 2.0.10

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 (62) hide show
  1. package/dist/src/index.d.ts +8 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +434 -5
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/resources/index.d.ts.map +1 -1
  6. package/dist/src/resources/index.js +71 -1
  7. package/dist/src/resources/index.js.map +1 -1
  8. package/dist/src/tools/human-override-tool.d.ts +42 -0
  9. package/dist/src/tools/human-override-tool.d.ts.map +1 -0
  10. package/dist/src/tools/human-override-tool.js +431 -0
  11. package/dist/src/tools/human-override-tool.js.map +1 -0
  12. package/dist/src/tools/smart-git-push-tool.d.ts +5 -1
  13. package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -1
  14. package/dist/src/tools/smart-git-push-tool.js +75 -30
  15. package/dist/src/tools/smart-git-push-tool.js.map +1 -1
  16. package/dist/src/tools/smart-score-tool.d.ts +138 -0
  17. package/dist/src/tools/smart-score-tool.d.ts.map +1 -0
  18. package/dist/src/tools/smart-score-tool.js +602 -0
  19. package/dist/src/tools/smart-score-tool.js.map +1 -0
  20. package/dist/src/tools/todo-management-tool.d.ts +184 -6
  21. package/dist/src/tools/todo-management-tool.d.ts.map +1 -1
  22. package/dist/src/tools/todo-management-tool.js +819 -42
  23. package/dist/src/tools/todo-management-tool.js.map +1 -1
  24. package/dist/src/tools/tool-chain-orchestrator.d.ts +164 -0
  25. package/dist/src/tools/tool-chain-orchestrator.d.ts.map +1 -0
  26. package/dist/src/tools/tool-chain-orchestrator.js +738 -0
  27. package/dist/src/tools/tool-chain-orchestrator.js.map +1 -0
  28. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts +150 -0
  29. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -0
  30. package/dist/src/tools/troubleshoot-guided-workflow-tool.js +520 -0
  31. package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -0
  32. package/dist/src/types/knowledge-graph-schemas.d.ts +481 -0
  33. package/dist/src/types/knowledge-graph-schemas.d.ts.map +1 -0
  34. package/dist/src/types/knowledge-graph-schemas.js +59 -0
  35. package/dist/src/types/knowledge-graph-schemas.js.map +1 -0
  36. package/dist/src/utils/enhanced-sensitive-detector.js +1 -1
  37. package/dist/src/utils/enhanced-sensitive-detector.js.map +1 -1
  38. package/dist/src/utils/json-safe.d.ts +38 -0
  39. package/dist/src/utils/json-safe.d.ts.map +1 -0
  40. package/dist/src/utils/json-safe.js +86 -0
  41. package/dist/src/utils/json-safe.js.map +1 -0
  42. package/dist/src/utils/knowledge-graph-manager.d.ts +28 -0
  43. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -0
  44. package/dist/src/utils/knowledge-graph-manager.js +192 -0
  45. package/dist/src/utils/knowledge-graph-manager.js.map +1 -0
  46. package/dist/src/utils/mcp-response-validator.d.ts +30 -0
  47. package/dist/src/utils/mcp-response-validator.d.ts.map +1 -0
  48. package/dist/src/utils/mcp-response-validator.js +197 -0
  49. package/dist/src/utils/mcp-response-validator.js.map +1 -0
  50. package/dist/src/utils/project-health-scoring.d.ts +177 -0
  51. package/dist/src/utils/project-health-scoring.d.ts.map +1 -0
  52. package/dist/src/utils/project-health-scoring.js +370 -0
  53. package/dist/src/utils/project-health-scoring.js.map +1 -0
  54. package/dist/src/utils/release-readiness-detector.d.ts +2 -0
  55. package/dist/src/utils/release-readiness-detector.d.ts.map +1 -1
  56. package/dist/src/utils/release-readiness-detector.js +4 -2
  57. package/dist/src/utils/release-readiness-detector.js.map +1 -1
  58. package/dist/src/utils/todo-file-watcher.d.ts +26 -0
  59. package/dist/src/utils/todo-file-watcher.d.ts.map +1 -0
  60. package/dist/src/utils/todo-file-watcher.js +163 -0
  61. package/dist/src/utils/todo-file-watcher.js.map +1 -0
  62. package/package.json +1 -1
@@ -0,0 +1,602 @@
1
+ /**
2
+ * Smart Score Tool - Central Coordination for Project Health Scoring
3
+ *
4
+ * Provides comprehensive scoring coordination across all MCP tools:
5
+ * - Cross-tool score synchronization
6
+ * - Manual score recalculation and rebalancing
7
+ * - Health score diagnostics and validation
8
+ * - Automated score updates and maintenance
9
+ */
10
+ import { z } from 'zod';
11
+ import { McpAdrError } from '../types/index.js';
12
+ // Operation schemas for smart scoring
13
+ const RecalculateScoresSchema = z.object({
14
+ operation: z.literal('recalculate_scores'),
15
+ projectPath: z.string().describe('Path to project directory'),
16
+ components: z.array(z.enum(['task_completion', 'deployment_readiness', 'architecture_compliance', 'security_posture', 'code_quality', 'all'])).default(['all']).describe('Score components to recalculate'),
17
+ forceUpdate: z.boolean().default(false).describe('Force update even if data is fresh'),
18
+ updateSources: z.boolean().default(true).describe('Trigger source tool updates before recalculating')
19
+ });
20
+ const SyncScoresSchema = z.object({
21
+ operation: z.literal('sync_scores'),
22
+ projectPath: z.string().describe('Path to project directory'),
23
+ todoPath: z.string().default('TODO.md').describe('Path to TODO.md file'),
24
+ triggerTools: z.array(z.enum(['manage_todo', 'smart_git_push', 'compare_adr_progress', 'analyze_content_security', 'validate_rules'])).optional().describe('Tools to trigger for fresh data'),
25
+ rebalanceWeights: z.boolean().default(false).describe('Recalculate optimal scoring weights')
26
+ });
27
+ const DiagnoseScoresSchema = z.object({
28
+ operation: z.literal('diagnose_scores'),
29
+ projectPath: z.string().describe('Path to project directory'),
30
+ includeHistory: z.boolean().default(true).describe('Include score history analysis'),
31
+ checkDataFreshness: z.boolean().default(true).describe('Validate data freshness across tools'),
32
+ suggestImprovements: z.boolean().default(true).describe('Provide score improvement suggestions')
33
+ });
34
+ const OptimizeWeightsSchema = z.object({
35
+ operation: z.literal('optimize_weights'),
36
+ projectPath: z.string().describe('Path to project directory'),
37
+ analysisMode: z.enum(['current_state', 'historical_data', 'project_type']).default('current_state').describe('Method for weight optimization'),
38
+ customWeights: z.object({
39
+ taskCompletion: z.number().min(0).max(1).optional(),
40
+ deploymentReadiness: z.number().min(0).max(1).optional(),
41
+ architectureCompliance: z.number().min(0).max(1).optional(),
42
+ securityPosture: z.number().min(0).max(1).optional(),
43
+ codeQuality: z.number().min(0).max(1).optional()
44
+ }).optional().describe('Custom weight overrides'),
45
+ previewOnly: z.boolean().default(false).describe('Preview changes without applying')
46
+ });
47
+ const ResetScoresSchema = z.object({
48
+ operation: z.literal('reset_scores'),
49
+ projectPath: z.string().describe('Path to project directory'),
50
+ component: z.enum(['task_completion', 'deployment_readiness', 'architecture_compliance', 'security_posture', 'code_quality', 'all']).default('all').describe('Score component to reset'),
51
+ preserveHistory: z.boolean().default(true).describe('Preserve score history in backup'),
52
+ recalculateAfterReset: z.boolean().default(true).describe('Immediately recalculate after reset')
53
+ });
54
+ // Main operation schema
55
+ const SmartScoreSchema = z.union([
56
+ RecalculateScoresSchema,
57
+ SyncScoresSchema,
58
+ DiagnoseScoresSchema,
59
+ OptimizeWeightsSchema,
60
+ ResetScoresSchema
61
+ ]);
62
+ /**
63
+ * Trigger score updates from source tools
64
+ */
65
+ async function triggerSourceToolUpdates(projectPath, tools, todoPath) {
66
+ const results = {};
67
+ for (const tool of tools) {
68
+ try {
69
+ switch (tool) {
70
+ case 'manage_todo':
71
+ // Trigger TODO analysis to update task completion scores
72
+ const { manageTodo } = await import('./todo-management-tool.js');
73
+ results[tool] = await manageTodo({
74
+ operation: 'analyze_progress',
75
+ todoPath: todoPath || 'TODO.md',
76
+ timeframe: 'all',
77
+ includeVelocity: true
78
+ }, projectPath);
79
+ break;
80
+ case 'smart_git_push':
81
+ // Trigger git release readiness analysis
82
+ const { smartGitPush } = await import('./smart-git-push-tool.js');
83
+ results[tool] = await smartGitPush({
84
+ projectPath,
85
+ checkReleaseReadiness: true,
86
+ dryRun: true // Don't actually push, just analyze
87
+ });
88
+ break;
89
+ case 'compare_adr_progress':
90
+ // Trigger ADR progress comparison
91
+ // This would need to be implemented in the main server
92
+ results[tool] = { status: 'tool_not_available', message: 'compare_adr_progress integration pending' };
93
+ break;
94
+ case 'analyze_content_security':
95
+ // Trigger content security analysis
96
+ // This would need to be implemented in the main server
97
+ results[tool] = { status: 'tool_not_available', message: 'analyze_content_security integration pending' };
98
+ break;
99
+ case 'validate_rules':
100
+ // Trigger rule validation
101
+ // This would need to be implemented in the main server
102
+ results[tool] = { status: 'tool_not_available', message: 'validate_rules integration pending' };
103
+ break;
104
+ default:
105
+ results[tool] = { status: 'unknown_tool', message: `Tool ${tool} not recognized` };
106
+ }
107
+ }
108
+ catch (error) {
109
+ results[tool] = {
110
+ status: 'error',
111
+ message: `Failed to trigger ${tool}: ${error instanceof Error ? error.message : String(error)}`
112
+ };
113
+ }
114
+ }
115
+ return results;
116
+ }
117
+ /**
118
+ * Calculate optimal weights based on project characteristics
119
+ */
120
+ async function calculateOptimalWeights(projectPath, _analysisMode) {
121
+ const fs = await import('fs/promises');
122
+ const path = await import('path');
123
+ // Default weights
124
+ const defaultWeights = {
125
+ taskCompletion: 0.25,
126
+ deploymentReadiness: 0.30,
127
+ architectureCompliance: 0.20,
128
+ securityPosture: 0.15,
129
+ codeQuality: 0.10
130
+ };
131
+ try {
132
+ // Analyze project characteristics
133
+ const packageJsonPath = path.join(projectPath, 'package.json');
134
+ let projectType = 'general';
135
+ let hasTests = false;
136
+ let hasCi = false;
137
+ try {
138
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
139
+ // Determine project type
140
+ if (packageJson.dependencies?.['express'] || packageJson.dependencies?.['fastify']) {
141
+ projectType = 'backend_api';
142
+ }
143
+ else if (packageJson.dependencies?.['react'] || packageJson.dependencies?.['vue'] || packageJson.dependencies?.['angular']) {
144
+ projectType = 'frontend';
145
+ }
146
+ else if (packageJson.dependencies?.['electron']) {
147
+ projectType = 'desktop_app';
148
+ }
149
+ else if (packageJson.type === 'module' || packageJson.main?.endsWith('.mjs')) {
150
+ projectType = 'library';
151
+ }
152
+ // Check for testing setup
153
+ hasTests = Boolean(packageJson.scripts?.test ||
154
+ packageJson.devDependencies?.jest ||
155
+ packageJson.devDependencies?.mocha ||
156
+ packageJson.devDependencies?.vitest);
157
+ // Check for CI/CD
158
+ const ciFiles = ['.github/workflows', '.gitlab-ci.yml', 'azure-pipelines.yml', '.circleci'];
159
+ hasCi = false;
160
+ for (const ciFile of ciFiles) {
161
+ try {
162
+ await fs.access(path.join(projectPath, ciFile));
163
+ hasCi = true;
164
+ break;
165
+ }
166
+ catch { }
167
+ }
168
+ }
169
+ catch (error) {
170
+ // Fall back to default weights if package.json analysis fails
171
+ }
172
+ // Adjust weights based on project characteristics
173
+ let optimizedWeights = { ...defaultWeights };
174
+ switch (projectType) {
175
+ case 'backend_api':
176
+ // APIs prioritize security and deployment
177
+ optimizedWeights = {
178
+ taskCompletion: 0.20,
179
+ deploymentReadiness: 0.35,
180
+ architectureCompliance: 0.15,
181
+ securityPosture: 0.25,
182
+ codeQuality: 0.05
183
+ };
184
+ break;
185
+ case 'frontend':
186
+ // Frontend prioritizes task completion and code quality
187
+ optimizedWeights = {
188
+ taskCompletion: 0.35,
189
+ deploymentReadiness: 0.25,
190
+ architectureCompliance: 0.15,
191
+ securityPosture: 0.10,
192
+ codeQuality: 0.15
193
+ };
194
+ break;
195
+ case 'library':
196
+ // Libraries prioritize code quality and architecture
197
+ optimizedWeights = {
198
+ taskCompletion: 0.20,
199
+ deploymentReadiness: 0.20,
200
+ architectureCompliance: 0.30,
201
+ securityPosture: 0.15,
202
+ codeQuality: 0.15
203
+ };
204
+ break;
205
+ case 'desktop_app':
206
+ // Desktop apps balance all aspects
207
+ optimizedWeights = {
208
+ taskCompletion: 0.25,
209
+ deploymentReadiness: 0.25,
210
+ architectureCompliance: 0.20,
211
+ securityPosture: 0.15,
212
+ codeQuality: 0.15
213
+ };
214
+ break;
215
+ }
216
+ // Adjust for testing maturity
217
+ if (hasTests) {
218
+ optimizedWeights.codeQuality += 0.05;
219
+ optimizedWeights.taskCompletion -= 0.05;
220
+ }
221
+ // Adjust for CI/CD maturity
222
+ if (hasCi) {
223
+ optimizedWeights.deploymentReadiness += 0.05;
224
+ optimizedWeights.taskCompletion -= 0.05;
225
+ }
226
+ // Ensure weights sum to 1.0
227
+ const total = Object.values(optimizedWeights).reduce((sum, weight) => sum + weight, 0);
228
+ if (total !== 1.0) {
229
+ const factor = 1.0 / total;
230
+ Object.keys(optimizedWeights).forEach(key => {
231
+ optimizedWeights[key] *= factor;
232
+ });
233
+ }
234
+ return optimizedWeights;
235
+ }
236
+ catch (error) {
237
+ return defaultWeights;
238
+ }
239
+ }
240
+ /**
241
+ * Main smart score function
242
+ */
243
+ export async function smartScore(args) {
244
+ try {
245
+ const validatedArgs = SmartScoreSchema.parse(args);
246
+ switch (validatedArgs.operation) {
247
+ case 'recalculate_scores': {
248
+ const { ProjectHealthScoring } = await import('../utils/project-health-scoring.js');
249
+ const healthScoring = new ProjectHealthScoring(validatedArgs.projectPath);
250
+ // Trigger source updates if requested
251
+ let sourceResults = {};
252
+ let todoData = null;
253
+ if (validatedArgs.updateSources) {
254
+ const allTools = ['manage_todo', 'smart_git_push', 'compare_adr_progress', 'analyze_content_security', 'validate_rules'];
255
+ sourceResults = await triggerSourceToolUpdates(validatedArgs.projectPath, allTools);
256
+ // Extract TODO data if available
257
+ if (sourceResults['manage_todo']?.content?.[0]?.text) {
258
+ const analysisText = sourceResults['manage_todo'].content[0].text;
259
+ const completionMatch = analysisText.match(/(\d+)\/(\d+) tasks? completed \((\d+)%\)/);
260
+ if (completionMatch) {
261
+ todoData = {
262
+ completed: parseInt(completionMatch[1]),
263
+ total: parseInt(completionMatch[2]),
264
+ percentage: parseInt(completionMatch[3])
265
+ };
266
+ }
267
+ }
268
+ }
269
+ // Get current scores
270
+ const currentScores = await healthScoring.getProjectHealthScore();
271
+ return {
272
+ content: [{
273
+ type: 'text',
274
+ text: `# 🔄 Scores Recalculated Successfully
275
+
276
+ ## Updated Project Health Scores:
277
+ - 🎯 **Overall**: ${currentScores.overall}% (${currentScores.confidence}% confidence)
278
+ - 📋 **Task Completion**: ${currentScores.taskCompletion}%
279
+ - 🚀 **Deployment Readiness**: ${currentScores.deploymentReadiness}%
280
+ - 🏗️ **Architecture Compliance**: ${currentScores.architectureCompliance}%
281
+ - 🔒 **Security Posture**: ${currentScores.securityPosture}%
282
+ - 🛠️ **Code Quality**: ${currentScores.codeQuality}%
283
+
284
+ ## Components Recalculated:
285
+ ${validatedArgs.components.includes('all') ? '- All components updated' : validatedArgs.components.map(c => `- ${c.replace('_', ' ')}`).join('\n')}${todoData ? `\n\n## TODO.md Balance Check:
286
+ - Task Completion from TODO.md: ${todoData.percentage}%
287
+ - Health Score Task Completion: ${currentScores.taskCompletion}%
288
+ - ${Math.abs(todoData.percentage - currentScores.taskCompletion) > 10 ? '⚠️ Significant difference detected - consider running sync_scores' : '✅ Scores are well balanced'}` : ''}
289
+
290
+ ## Source Tool Updates:
291
+ ${Object.entries(sourceResults).map(([tool, result]) => `- **${tool}**: ${result.status || 'success'}`).join('\n')}
292
+
293
+ ## Data Freshness:
294
+ - **Last Updated**: ${new Date(currentScores.lastUpdated).toLocaleString()}
295
+ - **Contributing Tools**: ${currentScores.influencingTools.join(', ') || 'None'}
296
+
297
+ *All TODO.md files will automatically display updated health scores on next access.*`
298
+ }]
299
+ };
300
+ }
301
+ case 'sync_scores': {
302
+ const { ProjectHealthScoring } = await import('../utils/project-health-scoring.js');
303
+ const healthScoring = new ProjectHealthScoring(validatedArgs.projectPath);
304
+ // Trigger specific tools if requested
305
+ let triggerResults = {};
306
+ if (validatedArgs.triggerTools && validatedArgs.triggerTools.length > 0) {
307
+ triggerResults = await triggerSourceToolUpdates(validatedArgs.projectPath, validatedArgs.triggerTools, validatedArgs.todoPath);
308
+ }
309
+ // Force a TODO update to sync task completion scores
310
+ const { manageTodo } = await import('./todo-management-tool.js');
311
+ const todoAnalysis = await manageTodo({
312
+ operation: 'analyze_progress',
313
+ todoPath: validatedArgs.todoPath,
314
+ timeframe: 'all',
315
+ includeVelocity: true
316
+ }, validatedArgs.projectPath);
317
+ // Extract task completion data from TODO analysis
318
+ let todoCompletionData = null;
319
+ if (todoAnalysis?.content?.[0]?.text) {
320
+ const analysisText = todoAnalysis.content[0].text;
321
+ // Parse completion metrics from the analysis
322
+ const completionMatch = analysisText.match(/(\d+)\/(\d+) tasks? completed \((\d+)%\)/);
323
+ const criticalMatch = analysisText.match(/(\d+) critical\/high priority tasks? remaining/);
324
+ if (completionMatch) {
325
+ todoCompletionData = {
326
+ completed: parseInt(completionMatch[1]),
327
+ total: parseInt(completionMatch[2]),
328
+ percentage: parseInt(completionMatch[3]),
329
+ criticalRemaining: criticalMatch ? parseInt(criticalMatch[1]) : 0
330
+ };
331
+ }
332
+ }
333
+ // Get synchronized scores
334
+ const syncedScores = await healthScoring.getProjectHealthScore();
335
+ // Optimize weights if requested
336
+ let weightOptimization = null;
337
+ if (validatedArgs.rebalanceWeights) {
338
+ const optimalWeights = await calculateOptimalWeights(validatedArgs.projectPath, 'current_state');
339
+ weightOptimization = {
340
+ current: {
341
+ taskCompletion: 0.25,
342
+ deploymentReadiness: 0.30,
343
+ architectureCompliance: 0.20,
344
+ securityPosture: 0.15,
345
+ codeQuality: 0.10
346
+ },
347
+ optimal: optimalWeights
348
+ };
349
+ }
350
+ return {
351
+ content: [{
352
+ type: 'text',
353
+ text: `# 🔄 Cross-Tool Score Synchronization Complete
354
+
355
+ ## Synchronized Health Scores:
356
+ - 🎯 **Overall Project Health**: ${syncedScores.overall}% (${syncedScores.confidence}% confidence)
357
+
358
+ ### 📊 Component Breakdown:
359
+ - 📋 **Task Completion**: ${syncedScores.taskCompletion}% (${syncedScores.breakdown.taskCompletion.completed}/${syncedScores.breakdown.taskCompletion.total} tasks)${todoCompletionData ? `
360
+ - TODO.md Analysis: ${todoCompletionData.completed}/${todoCompletionData.total} (${todoCompletionData.percentage}%)
361
+ - Critical/High Priority Remaining: ${todoCompletionData.criticalRemaining}` : ''}
362
+ - 🚀 **Deployment Readiness**: ${syncedScores.deploymentReadiness}% (${syncedScores.breakdown.deploymentReadiness.criticalBlockers} critical blockers)
363
+ - 🏗️ **Architecture Compliance**: ${syncedScores.architectureCompliance}%
364
+ - 🔒 **Security Posture**: ${syncedScores.securityPosture}% (${syncedScores.breakdown.securityPosture.vulnerabilityCount} vulnerabilities)
365
+ - 🛠️ **Code Quality**: ${syncedScores.codeQuality}% (${syncedScores.breakdown.codeQuality.ruleViolations} violations)
366
+
367
+ ## Tool Synchronization Results:
368
+ ${Object.entries(triggerResults).map(([tool, result]) => `- **${tool}**: ${result.status === 'error' ? '❌ Failed' : '✅ Updated'}`).join('\n')}
369
+
370
+ ${weightOptimization ? `
371
+ ## Weight Optimization Analysis:
372
+ ### Current Weights vs Optimal:
373
+ ${Object.entries(weightOptimization.optimal).map(([key, value]) => `- **${key}**: ${(weightOptimization.current[key] * 100).toFixed(0)}% → ${(Number(value) * 100).toFixed(0)}%`).join('\n')}
374
+
375
+ *Use \`optimize_weights\` operation to apply optimal weights.*
376
+ ` : ''}
377
+
378
+ ## Data Status:
379
+ - **Last Synchronized**: ${new Date().toLocaleString()}
380
+ - **Data Confidence**: ${syncedScores.confidence}%
381
+ - **Contributing Tools**: ${syncedScores.influencingTools.join(', ') || 'manage_todo (default)'}
382
+
383
+ *All health dashboards will reflect these synchronized scores.*`
384
+ }]
385
+ };
386
+ }
387
+ case 'diagnose_scores': {
388
+ const { ProjectHealthScoring } = await import('../utils/project-health-scoring.js');
389
+ const healthScoring = new ProjectHealthScoring(validatedArgs.projectPath);
390
+ const currentScores = await healthScoring.getProjectHealthScore();
391
+ // Check data freshness
392
+ const now = new Date();
393
+ const lastUpdate = new Date(currentScores.lastUpdated);
394
+ const hoursSinceUpdate = (now.getTime() - lastUpdate.getTime()) / (1000 * 60 * 60);
395
+ const dataFreshness = hoursSinceUpdate < 1 ? 'Fresh' :
396
+ hoursSinceUpdate < 24 ? 'Recent' :
397
+ hoursSinceUpdate < 72 ? 'Stale' : 'Very Stale';
398
+ // Analyze component health
399
+ const componentAnalysis = [
400
+ { name: 'Task Completion', score: currentScores.taskCompletion, threshold: 70 },
401
+ { name: 'Deployment Readiness', score: currentScores.deploymentReadiness, threshold: 75 },
402
+ { name: 'Architecture Compliance', score: currentScores.architectureCompliance, threshold: 60 },
403
+ { name: 'Security Posture', score: currentScores.securityPosture, threshold: 80 },
404
+ { name: 'Code Quality', score: currentScores.codeQuality, threshold: 65 }
405
+ ];
406
+ const weakComponents = componentAnalysis.filter(c => c.score < c.threshold);
407
+ const strongComponents = componentAnalysis.filter(c => c.score >= c.threshold + 15);
408
+ // Generate improvement suggestions
409
+ const suggestions = [];
410
+ if (currentScores.breakdown.taskCompletion.criticalTasksRemaining > 0) {
411
+ suggestions.push('🔴 Address critical/blocked tasks to improve task completion score');
412
+ }
413
+ if (currentScores.breakdown.deploymentReadiness.criticalBlockers > 0) {
414
+ suggestions.push('🚀 Resolve deployment blockers to improve readiness score');
415
+ }
416
+ if (currentScores.breakdown.securityPosture.vulnerabilityCount > 0) {
417
+ suggestions.push('🔒 Fix security vulnerabilities to boost security posture');
418
+ }
419
+ if (currentScores.breakdown.codeQuality.ruleViolations > 3) {
420
+ suggestions.push('🛠️ Address code quality violations to improve standards');
421
+ }
422
+ if (currentScores.confidence < 70) {
423
+ suggestions.push('🔄 Run score synchronization to refresh stale data');
424
+ }
425
+ return {
426
+ content: [{
427
+ type: 'text',
428
+ text: `# 🔍 Project Health Score Diagnostics
429
+
430
+ ## Overall Assessment:
431
+ - 🎯 **Overall Health**: ${currentScores.overall}% ${currentScores.overall >= 80 ? '🟢 Excellent' : currentScores.overall >= 60 ? '🟡 Good' : '🔴 Needs Improvement'}
432
+ - 📊 **Data Confidence**: ${currentScores.confidence}% (${dataFreshness})
433
+ - ⏰ **Last Updated**: ${lastUpdate.toLocaleString()} (${Math.round(hoursSinceUpdate)} hours ago)
434
+
435
+ ## Component Analysis:
436
+
437
+ ### 💪 Strong Areas:
438
+ ${strongComponents.length > 0 ? strongComponents.map(c => `- **${c.name}**: ${c.score}% 🟢`).join('\n') : '- No components currently exceeding excellence thresholds'}
439
+
440
+ ### ⚠️ Areas for Improvement:
441
+ ${weakComponents.length > 0 ? weakComponents.map(c => `- **${c.name}**: ${c.score}% (target: ${c.threshold}%)`).join('\n') : '- All components meeting target thresholds! 🎉'}
442
+
443
+ ## Detailed Breakdown:
444
+ - 📋 **Task Completion**: ${currentScores.taskCompletion}% | ${currentScores.breakdown.taskCompletion.completed}/${currentScores.breakdown.taskCompletion.total} tasks | ${currentScores.breakdown.taskCompletion.criticalTasksRemaining} critical remaining
445
+ - 🚀 **Deployment**: ${currentScores.deploymentReadiness}% | ${currentScores.breakdown.deploymentReadiness.criticalBlockers} critical blockers | ${currentScores.breakdown.deploymentReadiness.warningBlockers} warnings
446
+ - 🏗️ **Architecture**: ${currentScores.architectureCompliance}% | ADR compliance tracking
447
+ - 🔒 **Security**: ${currentScores.securityPosture}% | ${currentScores.breakdown.securityPosture.vulnerabilityCount} vulnerabilities | ${currentScores.breakdown.securityPosture.contentMaskingEffectiveness}% masking effectiveness
448
+ - 🛠️ **Code Quality**: ${currentScores.codeQuality}% | ${currentScores.breakdown.codeQuality.ruleViolations} violations | ${currentScores.breakdown.codeQuality.patternAdherence}% pattern adherence
449
+
450
+ ## Data Source Status:
451
+ ${currentScores.influencingTools.length > 0 ?
452
+ currentScores.influencingTools.map(tool => `- ✅ **${tool}**: Contributing data`).join('\n') :
453
+ '- ⚠️ **Limited data sources**: Only basic scoring available'}
454
+
455
+ ${validatedArgs.suggestImprovements && suggestions.length > 0 ? `
456
+ ## 🎯 Recommended Actions:
457
+ ${suggestions.map(s => `${s}`).join('\n')}
458
+
459
+ ## Quick Fixes:
460
+ 1. Run \`sync_scores\` to refresh all data sources
461
+ 2. Use \`recalculate_scores\` with \`updateSources: true\` for comprehensive refresh
462
+ 3. Address highest-impact issues first (critical tasks, security vulnerabilities)
463
+ ` : ''}
464
+
465
+ *Use \`sync_scores\` or \`recalculate_scores\` to refresh diagnostic data.*`
466
+ }]
467
+ };
468
+ }
469
+ case 'optimize_weights': {
470
+ const optimalWeights = await calculateOptimalWeights(validatedArgs.projectPath, validatedArgs.analysisMode);
471
+ // Apply custom weight overrides if provided
472
+ let finalWeights = { ...optimalWeights };
473
+ if (validatedArgs.customWeights) {
474
+ Object.entries(validatedArgs.customWeights).forEach(([key, value]) => {
475
+ if (value !== undefined) {
476
+ finalWeights[key] = value;
477
+ }
478
+ });
479
+ // Renormalize to ensure sum = 1.0
480
+ const total = Object.values(finalWeights).reduce((sum, weight) => sum + weight, 0);
481
+ if (total !== 1.0) {
482
+ const factor = 1.0 / total;
483
+ Object.keys(finalWeights).forEach(key => {
484
+ finalWeights[key] *= factor;
485
+ });
486
+ }
487
+ }
488
+ if (!validatedArgs.previewOnly) {
489
+ // Apply the optimized weights
490
+ const { ProjectHealthScoring } = await import('../utils/project-health-scoring.js');
491
+ new ProjectHealthScoring(validatedArgs.projectPath, finalWeights);
492
+ // Note: Weight application would require updating the ProjectHealthScoring class constructor
493
+ // For now, we return the preview showing what would change
494
+ return {
495
+ content: [{
496
+ type: 'text',
497
+ text: `# ⚖️ Scoring Weights Preview
498
+
499
+ ## New Weight Configuration Would Be Applied:
500
+ ${Object.entries(finalWeights).map(([key, value]) => `- **${key.replace(/([A-Z])/g, ' $1').toLowerCase()}**: ${(Number(value) * 100).toFixed(1)}%`).join('\n')}
501
+
502
+ ## Optimization Method: ${validatedArgs.analysisMode}
503
+ ${validatedArgs.customWeights ? '## Custom Overrides Applied: Yes' : ''}
504
+
505
+ *Note: Weight application requires ProjectHealthScoring class enhancement.*
506
+ *For now, this shows the optimal configuration that would be applied.*`
507
+ }]
508
+ };
509
+ }
510
+ else {
511
+ // Preview mode - show what would change
512
+ const currentWeights = {
513
+ taskCompletion: 0.25,
514
+ deploymentReadiness: 0.30,
515
+ architectureCompliance: 0.20,
516
+ securityPosture: 0.15,
517
+ codeQuality: 0.10
518
+ };
519
+ return {
520
+ content: [{
521
+ type: 'text',
522
+ text: `# ⚖️ Weight Optimization Preview
523
+
524
+ ## Current vs Optimal Weights:
525
+ ${Object.entries(finalWeights).map(([key, value]) => {
526
+ const current = currentWeights[key] * 100;
527
+ const optimal = Number(value) * 100;
528
+ const change = optimal - current;
529
+ const arrow = change > 0 ? '↗️' : change < 0 ? '↘️' : '➡️';
530
+ return `- **${key.replace(/([A-Z])/g, ' $1').toLowerCase()}**: ${current.toFixed(1)}% ${arrow} ${optimal.toFixed(1)}% ${change !== 0 ? `(${change > 0 ? '+' : ''}${change.toFixed(1)}%)` : ''}`;
531
+ }).join('\n')}
532
+
533
+ ## Optimization Rationale:
534
+ - **Analysis Method**: ${validatedArgs.analysisMode}
535
+ - **Project Type**: Detected from package.json and project structure
536
+ - **Customizations**: ${validatedArgs.customWeights ? 'Custom weights provided' : 'Auto-detected optimal weights'}
537
+
538
+ **To apply these weights, run the same command with \`previewOnly: false\`**`
539
+ }]
540
+ };
541
+ }
542
+ }
543
+ case 'reset_scores': {
544
+ const { ProjectHealthScoring } = await import('../utils/project-health-scoring.js');
545
+ // Create backup if preserving history
546
+ let backupPath = null;
547
+ if (validatedArgs.preserveHistory) {
548
+ const fs = await import('fs/promises');
549
+ const path = await import('path');
550
+ const cachePath = path.join(validatedArgs.projectPath, '.mcp-adr-cache', 'project-health-scores.json');
551
+ backupPath = `${cachePath}.backup.${Date.now()}`;
552
+ try {
553
+ const currentScores = await fs.readFile(cachePath, 'utf-8');
554
+ await fs.writeFile(backupPath, currentScores, 'utf-8');
555
+ }
556
+ catch (error) {
557
+ // Backup failed, but continue with reset
558
+ backupPath = null;
559
+ }
560
+ }
561
+ // Reset scores by creating fresh instance
562
+ const resetScoring = new ProjectHealthScoring(validatedArgs.projectPath);
563
+ const resetScores = await resetScoring.getProjectHealthScore();
564
+ // Recalculate if requested
565
+ if (validatedArgs.recalculateAfterReset) {
566
+ const allTools = ['manage_todo', 'smart_git_push'];
567
+ await triggerSourceToolUpdates(validatedArgs.projectPath, allTools);
568
+ }
569
+ return {
570
+ content: [{
571
+ type: 'text',
572
+ text: `# 🔄 Scores Reset Successfully
573
+
574
+ ## Reset Component: ${validatedArgs.component}
575
+
576
+ ## Fresh Baseline Scores:
577
+ - 🎯 **Overall**: ${resetScores.overall}%
578
+ - 📋 **Task Completion**: ${resetScores.taskCompletion}%
579
+ - 🚀 **Deployment Readiness**: ${resetScores.deploymentReadiness}%
580
+ - 🏗️ **Architecture Compliance**: ${resetScores.architectureCompliance}%
581
+ - 🔒 **Security Posture**: ${resetScores.securityPosture}%
582
+ - 🛠️ **Code Quality**: ${resetScores.codeQuality}%
583
+
584
+ ${backupPath ? `## Backup Created: \`${backupPath}\`` : ''}
585
+ ${validatedArgs.recalculateAfterReset ? '## Recalculation: ✅ Fresh data collected from available tools' : '## Recalculation: ⏸️ Skipped (use recalculate_scores to refresh)'}
586
+
587
+ *Health scoring system has been reset to baseline values.*`
588
+ }]
589
+ };
590
+ }
591
+ default:
592
+ throw new McpAdrError(`Unknown smart score operation: ${validatedArgs.operation}`, 'INVALID_INPUT');
593
+ }
594
+ }
595
+ catch (error) {
596
+ if (error instanceof z.ZodError) {
597
+ throw new McpAdrError(`Invalid input: ${error.errors.map(e => e.message).join(', ')}`, 'INVALID_INPUT');
598
+ }
599
+ throw new McpAdrError(`Smart score operation failed: ${error instanceof Error ? error.message : String(error)}`, 'SMART_SCORE_ERROR');
600
+ }
601
+ }
602
+ //# sourceMappingURL=smart-score-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-score-tool.js","sourceRoot":"","sources":["../../../src/tools/smart-score-tool.ts"],"names":[],"mappings":"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"}