mcp-adr-analysis-server 2.0.5 → 2.0.7

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 (37) hide show
  1. package/dist/src/index.d.ts +3 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +249 -0
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/tools/deployment-guidance-tool.d.ts +21 -0
  6. package/dist/src/tools/deployment-guidance-tool.d.ts.map +1 -0
  7. package/dist/src/tools/deployment-guidance-tool.js +289 -0
  8. package/dist/src/tools/deployment-guidance-tool.js.map +1 -0
  9. package/dist/src/tools/smart-git-push-tool.d.ts +24 -0
  10. package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -0
  11. package/dist/src/tools/smart-git-push-tool.js +526 -0
  12. package/dist/src/tools/smart-git-push-tool.js.map +1 -0
  13. package/dist/src/tools/todo-management-tool.d.ts +166 -0
  14. package/dist/src/tools/todo-management-tool.d.ts.map +1 -0
  15. package/dist/src/tools/todo-management-tool.js +472 -0
  16. package/dist/src/tools/todo-management-tool.js.map +1 -0
  17. package/dist/src/utils/enhanced-sensitive-detector.d.ts +61 -0
  18. package/dist/src/utils/enhanced-sensitive-detector.d.ts.map +1 -0
  19. package/dist/src/utils/enhanced-sensitive-detector.js +437 -0
  20. package/dist/src/utils/enhanced-sensitive-detector.js.map +1 -0
  21. package/dist/src/utils/interactive-approval.d.ts +63 -0
  22. package/dist/src/utils/interactive-approval.d.ts.map +1 -0
  23. package/dist/src/utils/interactive-approval.js +441 -0
  24. package/dist/src/utils/interactive-approval.js.map +1 -0
  25. package/dist/src/utils/llm-artifact-detector.d.ts +76 -0
  26. package/dist/src/utils/llm-artifact-detector.d.ts.map +1 -0
  27. package/dist/src/utils/llm-artifact-detector.js +422 -0
  28. package/dist/src/utils/llm-artifact-detector.js.map +1 -0
  29. package/dist/src/utils/location-filter.d.ts +79 -0
  30. package/dist/src/utils/location-filter.d.ts.map +1 -0
  31. package/dist/src/utils/location-filter.js +327 -0
  32. package/dist/src/utils/location-filter.js.map +1 -0
  33. package/dist/src/utils/release-readiness-detector.d.ts +47 -0
  34. package/dist/src/utils/release-readiness-detector.d.ts.map +1 -0
  35. package/dist/src/utils/release-readiness-detector.js +413 -0
  36. package/dist/src/utils/release-readiness-detector.js.map +1 -0
  37. package/package.json +2 -2
@@ -0,0 +1,526 @@
1
+ /**
2
+ * Smart Git Push MCP Tool
3
+ *
4
+ * Intelligent git push with sensitive content and LLM artifact filtering
5
+ * Leverages existing content security tools and git CLI integration
6
+ */
7
+ import { McpAdrError } from '../types/index.js';
8
+ import { execSync } from 'child_process';
9
+ import { readFileSync, existsSync, statSync } from 'fs';
10
+ import { join, basename } from 'path';
11
+ /**
12
+ * Main smart git push function
13
+ */
14
+ export async function smartGitPush(args) {
15
+ const { branch, message, skipValidation = false, allowedArtifacts = [], sensitivityLevel = 'moderate', interactiveMode = true, dryRun = false, projectPath = process.cwd(), checkReleaseReadiness = false, releaseType = 'minor' } = args;
16
+ try {
17
+ // Step 1: Check release readiness if requested
18
+ let releaseReadinessResult = null;
19
+ if (checkReleaseReadiness) {
20
+ const { analyzeReleaseReadiness } = await import('../utils/release-readiness-detector.js');
21
+ releaseReadinessResult = await analyzeReleaseReadiness({
22
+ projectPath,
23
+ releaseType,
24
+ includeAnalysis: true
25
+ });
26
+ }
27
+ // Step 2: Get staged files using git CLI
28
+ const stagedFiles = await getStagedFiles(projectPath);
29
+ if (stagedFiles.length === 0) {
30
+ let responseText = `# Smart Git Push - No Changes
31
+
32
+ ## Status
33
+ No staged files found. Use \`git add\` to stage files before pushing.
34
+
35
+ ## Available Commands
36
+ - \`git add .\` - Stage all changes
37
+ - \`git add <file>\` - Stage specific file
38
+ - \`git status\` - Check current status
39
+ `;
40
+ // Add release readiness info if checked
41
+ if (releaseReadinessResult) {
42
+ responseText += `
43
+ ## Release Readiness Analysis
44
+ ${releaseReadinessResult.summary}
45
+
46
+ ### Recommendations
47
+ ${releaseReadinessResult.recommendations.map(r => `- ${r}`).join('\n')}
48
+
49
+ ${releaseReadinessResult.isReady ?
50
+ '✅ **Project is ready for release!** Consider creating a release after staging files.' :
51
+ '❌ **Project is not ready for release.** Address blockers before proceeding.'}
52
+ `;
53
+ }
54
+ return {
55
+ content: [{
56
+ type: 'text',
57
+ text: responseText
58
+ }]
59
+ };
60
+ }
61
+ // Step 3: Analyze staged files if validation is enabled
62
+ let validationResults = [];
63
+ if (!skipValidation) {
64
+ validationResults = await validateStagedFiles(stagedFiles, {
65
+ sensitivityLevel,
66
+ allowedArtifacts,
67
+ projectPath
68
+ });
69
+ }
70
+ // Step 4: Handle interactive approval if needed
71
+ const issues = validationResults.filter(r => r.issues.length > 0);
72
+ // Check if release readiness should block push
73
+ let releaseReadinessBlocked = false;
74
+ if (releaseReadinessResult && !releaseReadinessResult.isReady) {
75
+ const criticalBlockers = releaseReadinessResult.blockers.filter(b => b.severity === 'error');
76
+ if (criticalBlockers.length > 0) {
77
+ releaseReadinessBlocked = true;
78
+ }
79
+ }
80
+ if ((issues.length > 0 || releaseReadinessBlocked) && interactiveMode) {
81
+ const approvalResult = await handleInteractiveApproval(issues, dryRun);
82
+ if (!approvalResult.proceed) {
83
+ let cancelText = `# Smart Git Push - Cancelled
84
+
85
+ ## User Decision
86
+ Push cancelled due to validation issues.
87
+
88
+ ## Issues Found
89
+ ${issues.map(issue => `
90
+ ### ${issue.file}
91
+ ${issue.issues.map(i => `- **${i.severity.toUpperCase()}**: ${i.message}`).join('\n')}
92
+
93
+ **Suggestions:**
94
+ ${issue.suggestions.map(s => `- ${s}`).join('\n')}
95
+ `).join('\n')}
96
+ `;
97
+ // Add release readiness info if checked and blocked
98
+ if (releaseReadinessResult && releaseReadinessBlocked) {
99
+ cancelText += `
100
+ ## Release Readiness Issues
101
+ ${releaseReadinessResult.summary}
102
+
103
+ ### Critical Blockers
104
+ ${releaseReadinessResult.blockers.filter(b => b.severity === 'error').map(b => `- **${b.type}**: ${b.message}`).join('\n')}
105
+
106
+ ### Recommendations
107
+ ${releaseReadinessResult.recommendations.map(r => `- ${r}`).join('\n')}
108
+ `;
109
+ }
110
+ return {
111
+ content: [{
112
+ type: 'text',
113
+ text: cancelText
114
+ }]
115
+ };
116
+ }
117
+ }
118
+ // Step 5: Execute git push if not dry run
119
+ if (!dryRun) {
120
+ const pushResult = await executePush(projectPath, branch, message);
121
+ let successText = `# Smart Git Push - Success ✅
122
+
123
+ ## Push Details
124
+ - **Branch**: ${branch || 'current'}
125
+ - **Files**: ${stagedFiles.length} staged files
126
+ - **Validation**: ${skipValidation ? 'Skipped' : 'Completed'}
127
+ - **Issues Found**: ${issues.length}
128
+ - **Sensitivity Level**: ${sensitivityLevel}
129
+ ${checkReleaseReadiness ? `- **Release Readiness**: ${releaseReadinessResult?.isReady ? '✅ Ready' : '❌ Not Ready'}` : ''}
130
+
131
+ ## Files Pushed
132
+ ${stagedFiles.map(f => `- ${f.path} (${f.status})`).join('\n')}
133
+
134
+ ${issues.length > 0 ? `
135
+ ## Validation Issues (Approved)
136
+ ${issues.map(issue => `
137
+ ### ${issue.file}
138
+ ${issue.issues.map(i => `- **${i.severity.toUpperCase()}**: ${i.message}`).join('\n')}
139
+ `).join('\n')}
140
+ ` : ''}
141
+
142
+ ${releaseReadinessResult ? `
143
+ ## Release Readiness Analysis
144
+ ${releaseReadinessResult.summary}
145
+
146
+ ### Post-Push Recommendations
147
+ ${releaseReadinessResult.recommendations.map(r => `- ${r}`).join('\n')}
148
+
149
+ ${releaseReadinessResult.isReady ?
150
+ '🎉 **Congratulations!** This push completed a release-ready state. Consider creating a release tag.' :
151
+ '📋 **Next Steps**: Address remaining blockers to achieve release readiness.'}
152
+ ` : ''}
153
+
154
+ ## Git Output
155
+ \`\`\`
156
+ ${pushResult.output}
157
+ \`\`\`
158
+
159
+ ## Next Steps
160
+ - Monitor CI/CD pipeline for build status
161
+ - Review any deployment processes
162
+ - Check for any post-push hooks or workflows
163
+ ${releaseReadinessResult?.isReady ? '- Consider creating a release tag or publishing' : ''}
164
+ `;
165
+ return {
166
+ content: [{
167
+ type: 'text',
168
+ text: successText
169
+ }]
170
+ };
171
+ }
172
+ else {
173
+ // Dry run - show what would happen
174
+ let dryRunText = `# Smart Git Push - Dry Run 🔍
175
+
176
+ ## Analysis Complete
177
+ - **Files to Push**: ${stagedFiles.length}
178
+ - **Validation Issues**: ${issues.length}
179
+ - **Sensitivity Level**: ${sensitivityLevel}
180
+ - **Would Push to**: ${branch || 'current branch'}
181
+ ${checkReleaseReadiness ? `- **Release Readiness**: ${releaseReadinessResult?.isReady ? '✅ Ready' : '❌ Not Ready'}` : ''}
182
+
183
+ ## Staged Files
184
+ ${stagedFiles.map(f => `- ${f.path} (${f.status}) - ${f.size} bytes`).join('\n')}
185
+
186
+ ${issues.length > 0 ? `
187
+ ## Validation Issues Found
188
+ ${issues.map(issue => `
189
+ ### ${issue.file}
190
+ ${issue.issues.map(i => `- **${i.severity.toUpperCase()}**: ${i.message}`).join('\n')}
191
+
192
+ **Suggestions:**
193
+ ${issue.suggestions.map(s => `- ${s}`).join('\n')}
194
+ `).join('\n')}
195
+ ` : '## ✅ No Validation Issues Found'}
196
+
197
+ ${releaseReadinessResult ? `
198
+ ## Release Readiness Analysis
199
+ ${releaseReadinessResult.summary}
200
+
201
+ ### Pre-Push Recommendations
202
+ ${releaseReadinessResult.recommendations.map(r => `- ${r}`).join('\n')}
203
+
204
+ ${releaseReadinessResult.isReady ?
205
+ '🎉 **Ready for Release!** This push would complete all release requirements.' :
206
+ '📋 **Release Blockers**: Address these issues before considering this a release.'}
207
+ ` : ''}
208
+
209
+ ## Command to Execute
210
+ \`\`\`bash
211
+ # Run without dry run to actually push
212
+ git push${branch ? ` origin ${branch}` : ''}
213
+ \`\`\`
214
+
215
+ **Note:** This was a dry run. No files were actually pushed.
216
+ `;
217
+ return {
218
+ content: [{
219
+ type: 'text',
220
+ text: dryRunText
221
+ }]
222
+ };
223
+ }
224
+ }
225
+ catch (error) {
226
+ throw new McpAdrError(`Smart git push failed: ${error instanceof Error ? error.message : String(error)}`, 'GIT_PUSH_ERROR');
227
+ }
228
+ }
229
+ /**
230
+ * Get staged files using git CLI
231
+ */
232
+ async function getStagedFiles(projectPath) {
233
+ try {
234
+ // Get staged files with status
235
+ const gitOutput = execSync('git diff --cached --name-status', {
236
+ cwd: projectPath,
237
+ encoding: 'utf8'
238
+ });
239
+ if (!gitOutput.trim()) {
240
+ return [];
241
+ }
242
+ const files = [];
243
+ const lines = gitOutput.trim().split('\n');
244
+ for (const line of lines) {
245
+ const [status, ...pathParts] = line.split('\t');
246
+ const path = pathParts.join('\t'); // Handle filenames with tabs
247
+ const fullPath = join(projectPath, path);
248
+ let content;
249
+ let size = 0;
250
+ // Read file content if it exists (not for deleted files)
251
+ if (status !== 'D' && existsSync(fullPath)) {
252
+ try {
253
+ const stats = statSync(fullPath);
254
+ size = stats.size;
255
+ // Only read content for small files (< 100KB)
256
+ if (size < 100 * 1024) {
257
+ content = readFileSync(fullPath, 'utf8');
258
+ }
259
+ }
260
+ catch (err) {
261
+ console.error(`Warning: Could not read file ${path}:`, err);
262
+ }
263
+ }
264
+ files.push({
265
+ path,
266
+ status: mapGitStatus(status || 'M'),
267
+ content: content || '',
268
+ size
269
+ });
270
+ }
271
+ return files;
272
+ }
273
+ catch (error) {
274
+ throw new McpAdrError(`Failed to get staged files: ${error instanceof Error ? error.message : String(error)}`, 'GIT_STATUS_ERROR');
275
+ }
276
+ }
277
+ /**
278
+ * Map git status codes to readable names
279
+ */
280
+ function mapGitStatus(status) {
281
+ switch (status) {
282
+ case 'A': return 'added';
283
+ case 'M': return 'modified';
284
+ case 'D': return 'deleted';
285
+ case 'R': return 'renamed';
286
+ default: return 'modified';
287
+ }
288
+ }
289
+ /**
290
+ * Validate staged files for issues
291
+ */
292
+ async function validateStagedFiles(files, options) {
293
+ const results = [];
294
+ for (const file of files) {
295
+ const issues = [];
296
+ const suggestions = [];
297
+ // Skip validation for deleted files
298
+ if (file.status === 'deleted') {
299
+ results.push({ file: file.path, issues, suggestions, approved: true });
300
+ continue;
301
+ }
302
+ // 1. Check for sensitive content
303
+ if (file.content) {
304
+ const sensitiveIssues = await checkSensitiveContent(file.content, file.path);
305
+ issues.push(...sensitiveIssues);
306
+ }
307
+ // 2. Check for LLM artifacts
308
+ const llmIssues = await checkLLMArtifacts(file.path, file.content);
309
+ issues.push(...llmIssues);
310
+ // 3. Check location rules
311
+ const locationIssues = await checkLocationRules(file.path, options.allowedArtifacts);
312
+ issues.push(...locationIssues);
313
+ // 4. Generate suggestions
314
+ const fileSuggestions = generateSuggestions(file.path, issues);
315
+ suggestions.push(...fileSuggestions);
316
+ results.push({
317
+ file: file.path,
318
+ issues,
319
+ suggestions,
320
+ approved: issues.length === 0 || issues.every(i => i.severity === 'info')
321
+ });
322
+ }
323
+ return results;
324
+ }
325
+ /**
326
+ * Check for sensitive content using enhanced sensitive detector
327
+ */
328
+ async function checkSensitiveContent(content, filePath) {
329
+ try {
330
+ // Use enhanced sensitive detector
331
+ const { analyzeSensitiveContent } = await import('../utils/enhanced-sensitive-detector.js');
332
+ const result = await analyzeSensitiveContent(filePath, content);
333
+ // Convert to ValidationIssue format
334
+ const issues = [];
335
+ for (const match of result.matches) {
336
+ issues.push({
337
+ type: 'sensitive-content',
338
+ severity: match.pattern.severity === 'critical' ? 'error' :
339
+ match.pattern.severity === 'high' ? 'error' :
340
+ match.pattern.severity === 'medium' ? 'warning' : 'info',
341
+ message: `${match.pattern.description}: ${match.match}`,
342
+ pattern: match.pattern.name,
343
+ line: match.line
344
+ });
345
+ }
346
+ return issues;
347
+ }
348
+ catch (error) {
349
+ console.error('Sensitive content check failed:', error);
350
+ return [];
351
+ }
352
+ }
353
+ /**
354
+ * Check for LLM artifacts using enhanced detector
355
+ */
356
+ async function checkLLMArtifacts(filePath, content) {
357
+ try {
358
+ // Use enhanced LLM artifact detector
359
+ const { detectLLMArtifacts } = await import('../utils/llm-artifact-detector.js');
360
+ const result = detectLLMArtifacts(filePath, content || '');
361
+ // Convert to ValidationIssue format
362
+ const issues = [];
363
+ for (const match of result.matches) {
364
+ const issue = {
365
+ type: 'llm-artifact',
366
+ severity: match.pattern.severity === 'error' ? 'error' :
367
+ match.pattern.severity === 'warning' ? 'warning' : 'info',
368
+ message: `${match.pattern.description}: ${match.match}`,
369
+ pattern: match.pattern.name
370
+ };
371
+ if (match.line !== undefined) {
372
+ issue.line = match.line;
373
+ }
374
+ issues.push(issue);
375
+ }
376
+ return issues;
377
+ }
378
+ catch (error) {
379
+ console.error('LLM artifact check failed:', error);
380
+ return [];
381
+ }
382
+ }
383
+ /**
384
+ * Check location rules using enhanced location filter
385
+ */
386
+ async function checkLocationRules(filePath, allowedArtifacts) {
387
+ try {
388
+ // Use enhanced location filter
389
+ const { validateFileLocation } = await import('../utils/location-filter.js');
390
+ // Skip if explicitly allowed
391
+ if (allowedArtifacts.includes(basename(filePath)) || allowedArtifacts.includes(filePath)) {
392
+ return [];
393
+ }
394
+ const result = validateFileLocation(filePath);
395
+ if (!result.isValid) {
396
+ return [{
397
+ type: 'wrong-location',
398
+ severity: result.severity === 'error' ? 'error' :
399
+ result.severity === 'warning' ? 'warning' : 'info',
400
+ message: result.message,
401
+ pattern: result.rule?.name || 'location-rule'
402
+ }];
403
+ }
404
+ return [];
405
+ }
406
+ catch (error) {
407
+ console.error('Location rule check failed:', error);
408
+ return [];
409
+ }
410
+ }
411
+ /**
412
+ * Generate suggestions for issues
413
+ */
414
+ function generateSuggestions(filePath, issues) {
415
+ const suggestions = [];
416
+ const fileName = basename(filePath);
417
+ for (const issue of issues) {
418
+ switch (issue.type) {
419
+ case 'sensitive-content':
420
+ suggestions.push(`Use content masking tool: analyze_content_security`);
421
+ suggestions.push(`Move sensitive data to environment variables`);
422
+ suggestions.push(`Add ${filePath} to .gitignore if it's config`);
423
+ break;
424
+ case 'llm-artifact':
425
+ suggestions.push(`Move ${fileName} to tests/ directory`);
426
+ suggestions.push(`Move ${fileName} to scripts/ directory`);
427
+ suggestions.push(`Add ${filePath} to .gitignore`);
428
+ suggestions.push(`Remove file if it's temporary`);
429
+ break;
430
+ case 'wrong-location':
431
+ suggestions.push(`Move ${fileName} to tests/ directory`);
432
+ suggestions.push(`Move ${fileName} to scripts/ directory`);
433
+ suggestions.push(`Move ${fileName} to tools/ directory`);
434
+ break;
435
+ }
436
+ }
437
+ return [...new Set(suggestions)]; // Remove duplicates
438
+ }
439
+ /**
440
+ * Handle interactive approval using enhanced approval system
441
+ */
442
+ async function handleInteractiveApproval(issues, dryRun) {
443
+ try {
444
+ // Use enhanced interactive approval
445
+ const { handleInteractiveApproval } = await import('../utils/interactive-approval.js');
446
+ // Convert ValidationResult to ApprovalItem format
447
+ const approvalItems = issues.map(issue => ({
448
+ filePath: issue.file,
449
+ issues: issue.issues.map(i => ({
450
+ type: i.type,
451
+ message: i.message,
452
+ severity: i.severity,
453
+ ...(i.pattern && { pattern: i.pattern }),
454
+ ...(i.line && { line: i.line })
455
+ })),
456
+ suggestions: issue.suggestions,
457
+ severity: issue.issues.reduce((highest, i) => {
458
+ const severityOrder = { error: 3, warning: 2, info: 1 };
459
+ return severityOrder[i.severity] > severityOrder[highest] ? i.severity : highest;
460
+ }, 'info'),
461
+ allowedInLocation: true, // Simplified for now
462
+ confidence: 0.8 // Default confidence
463
+ }));
464
+ const options = {
465
+ interactiveMode: true,
466
+ autoApproveInfo: false,
467
+ autoRejectErrors: false,
468
+ dryRun,
469
+ batchMode: false
470
+ };
471
+ const result = await handleInteractiveApproval(approvalItems, options);
472
+ return {
473
+ proceed: result.proceed,
474
+ approved: result.approved
475
+ };
476
+ }
477
+ catch (error) {
478
+ console.error('Interactive approval failed:', error);
479
+ // Fallback to simple approval
480
+ console.log('\n=== Smart Git Push - Validation Issues ===');
481
+ console.log(`Found ${issues.length} files with issues:`);
482
+ for (const issue of issues) {
483
+ console.log(`\n${issue.file}:`);
484
+ for (const i of issue.issues) {
485
+ console.log(` - ${i.severity.toUpperCase()}: ${i.message}`);
486
+ }
487
+ }
488
+ if (dryRun) {
489
+ return { proceed: true, approved: [] };
490
+ }
491
+ // Auto-approve info and warnings, block errors
492
+ const hasErrors = issues.some(issue => issue.issues.some(i => i.severity === 'error'));
493
+ return {
494
+ proceed: !hasErrors,
495
+ approved: hasErrors ? [] : issues.map(i => i.file)
496
+ };
497
+ }
498
+ }
499
+ /**
500
+ * Execute git push
501
+ */
502
+ async function executePush(projectPath, branch, message) {
503
+ try {
504
+ let output = '';
505
+ // Commit if there are staged changes and a message is provided
506
+ if (message) {
507
+ const commitOutput = execSync(`git commit -m "${message}"`, {
508
+ cwd: projectPath,
509
+ encoding: 'utf8'
510
+ });
511
+ output += `Commit:\n${commitOutput}\n\n`;
512
+ }
513
+ // Push to the specified branch or current branch
514
+ const pushCommand = branch ? `git push origin ${branch}` : 'git push';
515
+ const pushOutput = execSync(pushCommand, {
516
+ cwd: projectPath,
517
+ encoding: 'utf8'
518
+ });
519
+ output += `Push:\n${pushOutput}`;
520
+ return { output, success: true };
521
+ }
522
+ catch (error) {
523
+ throw new McpAdrError(`Git push failed: ${error instanceof Error ? error.message : String(error)}`, 'GIT_PUSH_FAILED');
524
+ }
525
+ }
526
+ //# sourceMappingURL=smart-git-push-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-git-push-tool.js","sourceRoot":"","sources":["../../../src/tools/smart-git-push-tool.ts"],"names":[],"mappings":"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"}