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,61 @@
1
+ /**
2
+ * Enhanced sensitive content detector for smart git push
3
+ *
4
+ * Integrates with existing content-masking-tool.ts and adds git-specific patterns
5
+ */
6
+ export interface SensitivePattern {
7
+ name: string;
8
+ pattern: RegExp;
9
+ description: string;
10
+ category: 'credentials' | 'secrets' | 'personal' | 'infrastructure' | 'development';
11
+ severity: 'critical' | 'high' | 'medium' | 'low';
12
+ falsePositivePatterns?: RegExp[];
13
+ contextRequired?: boolean;
14
+ }
15
+ export interface SensitiveMatch {
16
+ pattern: SensitivePattern;
17
+ match: string;
18
+ line: number;
19
+ column: number;
20
+ context: string;
21
+ confidence: number;
22
+ suggestions: string[];
23
+ }
24
+ export interface SensitiveContentResult {
25
+ filePath: string;
26
+ hasIssues: boolean;
27
+ matches: SensitiveMatch[];
28
+ summary: {
29
+ criticalCount: number;
30
+ highCount: number;
31
+ mediumCount: number;
32
+ lowCount: number;
33
+ totalCount: number;
34
+ };
35
+ recommendations: string[];
36
+ }
37
+ /**
38
+ * Enhanced sensitive patterns for git context
39
+ */
40
+ export declare const GIT_SENSITIVE_PATTERNS: SensitivePattern[];
41
+ /**
42
+ * Analyze content for sensitive information
43
+ */
44
+ export declare function analyzeSensitiveContent(filePath: string, content: string, customPatterns?: SensitivePattern[]): Promise<SensitiveContentResult>;
45
+ /**
46
+ * Integration with existing content masking tool
47
+ */
48
+ export declare function integrateWithContentMasking(filePath: string, content: string): Promise<{
49
+ sensitiveAnalysis: SensitiveContentResult;
50
+ maskingPrompt?: string;
51
+ combinedRecommendations: string[];
52
+ }>;
53
+ /**
54
+ * Quick check for obviously sensitive files
55
+ */
56
+ export declare function isObviouslySensitive(filePath: string): boolean;
57
+ /**
58
+ * Create a custom sensitive pattern
59
+ */
60
+ export declare function createSensitivePattern(name: string, pattern: string, description: string, category: SensitivePattern['category'], severity: SensitivePattern['severity']): SensitivePattern;
61
+ //# sourceMappingURL=enhanced-sensitive-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-sensitive-detector.d.ts","sourceRoot":"","sources":["../../../src/utils/enhanced-sensitive-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,GAAG,aAAa,CAAC;IACpF,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,gBAAgB,EA8JpD,CAAC;AAEF;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,gBAAgB,EAAO,GACtC,OAAO,CAAC,sBAAsB,CAAC,CA8EjC;AAkJD;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IACT,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,MAAM,EAAE,CAAC;CACnC,CAAC,CA8CD;AA2BD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAmB9D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,EACtC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,GACrC,gBAAgB,CAQlB"}
@@ -0,0 +1,437 @@
1
+ /**
2
+ * Enhanced sensitive content detector for smart git push
3
+ *
4
+ * Integrates with existing content-masking-tool.ts and adds git-specific patterns
5
+ */
6
+ import { basename, extname } from 'path';
7
+ /**
8
+ * Enhanced sensitive patterns for git context
9
+ */
10
+ export const GIT_SENSITIVE_PATTERNS = [
11
+ // API Keys and Tokens
12
+ {
13
+ name: 'github-token',
14
+ pattern: /ghp_[a-zA-Z0-9]{36}|github_pat_[a-zA-Z0-9_]{82}/,
15
+ description: 'GitHub Personal Access Token',
16
+ category: 'credentials',
17
+ severity: 'critical'
18
+ },
19
+ {
20
+ name: 'aws-access-key',
21
+ pattern: /AKIA[0-9A-Z]{16}/,
22
+ description: 'AWS Access Key ID',
23
+ category: 'credentials',
24
+ severity: 'critical'
25
+ },
26
+ {
27
+ name: 'aws-secret-key',
28
+ pattern: /[0-9a-zA-Z\/+=]{40}/,
29
+ description: 'AWS Secret Access Key',
30
+ category: 'credentials',
31
+ severity: 'critical',
32
+ contextRequired: true
33
+ },
34
+ {
35
+ name: 'generic-api-key',
36
+ pattern: /[Aa][Pp][Ii][_-]?[Kk][Ee][Yy]['"\s]*[:=]['"\s]*[a-zA-Z0-9_\-]{20,}/,
37
+ description: 'Generic API Key',
38
+ category: 'credentials',
39
+ severity: 'high'
40
+ },
41
+ {
42
+ name: 'generic-secret',
43
+ pattern: /[Ss]ecret['"\s]*[:=]['"\s]*[a-zA-Z0-9_\-]{15,}/,
44
+ description: 'Generic Secret',
45
+ category: 'secrets',
46
+ severity: 'high'
47
+ },
48
+ {
49
+ name: 'generic-token',
50
+ pattern: /[Tt]oken['"\s]*[:=]['"\s]*[a-zA-Z0-9_\-]{20,}/,
51
+ description: 'Generic Token',
52
+ category: 'credentials',
53
+ severity: 'high'
54
+ },
55
+ // Database Credentials
56
+ {
57
+ name: 'database-url',
58
+ pattern: /(postgres|mysql|mongodb):\/\/[^:\s]+:[^@\s]+@[^:\s\/]+/,
59
+ description: 'Database connection URL with credentials',
60
+ category: 'credentials',
61
+ severity: 'critical'
62
+ },
63
+ {
64
+ name: 'database-password',
65
+ pattern: /[Dd]b[_-]?[Pp]assword['"\s]*[:=]['"\s]*[^\s'"]{8,}/,
66
+ description: 'Database password',
67
+ category: 'credentials',
68
+ severity: 'high'
69
+ },
70
+ // Private Keys
71
+ {
72
+ name: 'private-key',
73
+ pattern: /-----BEGIN [A-Z ]+PRIVATE KEY-----/,
74
+ description: 'Private key',
75
+ category: 'credentials',
76
+ severity: 'critical'
77
+ },
78
+ {
79
+ name: 'ssh-private-key',
80
+ pattern: /-----BEGIN OPENSSH PRIVATE KEY-----/,
81
+ description: 'SSH private key',
82
+ category: 'credentials',
83
+ severity: 'critical'
84
+ },
85
+ // Personal Information
86
+ {
87
+ name: 'email-address',
88
+ pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/,
89
+ description: 'Email address',
90
+ category: 'personal',
91
+ severity: 'low',
92
+ falsePositivePatterns: [
93
+ /example\.com|test\.com|localhost|no-reply|noreply/,
94
+ /email@example\.com|test@test\.com|user@domain\.com/
95
+ ]
96
+ },
97
+ {
98
+ name: 'phone-number',
99
+ pattern: /\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}/,
100
+ description: 'Phone number',
101
+ category: 'personal',
102
+ severity: 'medium'
103
+ },
104
+ // Infrastructure
105
+ {
106
+ name: 'ip-address',
107
+ pattern: /(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/,
108
+ description: 'IP address',
109
+ category: 'infrastructure',
110
+ severity: 'medium',
111
+ falsePositivePatterns: [
112
+ /127\.0\.0\.1|localhost|0\.0\.0\.0|192\.168\.|10\.|172\.16\./
113
+ ]
114
+ },
115
+ {
116
+ name: 'domain-name',
117
+ pattern: /https?:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/,
118
+ description: 'Domain name or URL',
119
+ category: 'infrastructure',
120
+ severity: 'low',
121
+ falsePositivePatterns: [
122
+ /example\.com|test\.com|localhost|github\.com|stackoverflow\.com/
123
+ ]
124
+ },
125
+ // Development Secrets
126
+ {
127
+ name: 'jwt-secret',
128
+ pattern: /[Jj]wt[_-]?[Ss]ecret['"\s]*[:=]['"\s]*[a-zA-Z0-9_\-]{32,}/,
129
+ description: 'JWT secret key',
130
+ category: 'secrets',
131
+ severity: 'high'
132
+ },
133
+ {
134
+ name: 'encryption-key',
135
+ pattern: /[Ee]ncryption[_-]?[Kk]ey['"\s]*[:=]['"\s]*[a-zA-Z0-9_\-+\/=]{32,}/,
136
+ description: 'Encryption key',
137
+ category: 'secrets',
138
+ severity: 'high'
139
+ },
140
+ {
141
+ name: 'session-secret',
142
+ pattern: /[Ss]ession[_-]?[Ss]ecret['"\s]*[:=]['"\s]*[a-zA-Z0-9_\-]{20,}/,
143
+ description: 'Session secret',
144
+ category: 'secrets',
145
+ severity: 'high'
146
+ },
147
+ // Development/Debug Information
148
+ {
149
+ name: 'debug-info',
150
+ pattern: /console\.log\(.*(?:password|secret|token|key).*\)/i,
151
+ description: 'Debug logging of sensitive information',
152
+ category: 'development',
153
+ severity: 'medium'
154
+ },
155
+ {
156
+ name: 'hardcoded-password',
157
+ pattern: /password['"\s]*[:=]['"\s]*(?!.*\$\{|.*process\.env)['"]*[a-zA-Z0-9!@#$%^&*()_+\-=]{8,}['"]*(?!['"]*\s*\+|\s*\$\{)/,
158
+ description: 'Hardcoded password',
159
+ category: 'credentials',
160
+ severity: 'high'
161
+ }
162
+ ];
163
+ /**
164
+ * Analyze content for sensitive information
165
+ */
166
+ export async function analyzeSensitiveContent(filePath, content, customPatterns = []) {
167
+ const allPatterns = [...GIT_SENSITIVE_PATTERNS, ...customPatterns];
168
+ const matches = [];
169
+ const lines = content.split('\n');
170
+ // Check each line for sensitive patterns
171
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
172
+ const line = lines[lineIndex];
173
+ const lineNumber = lineIndex + 1;
174
+ if (!line)
175
+ continue;
176
+ for (const pattern of allPatterns) {
177
+ const regex = new RegExp(pattern.pattern, 'g');
178
+ let match;
179
+ while ((match = regex.exec(line)) !== null) {
180
+ // Check for false positives
181
+ if (pattern.falsePositivePatterns) {
182
+ const isFalsePositive = pattern.falsePositivePatterns.some(fp => fp.test(match[0]));
183
+ if (isFalsePositive) {
184
+ continue;
185
+ }
186
+ }
187
+ // Get context around the match
188
+ const contextStart = Math.max(0, lineIndex - 2);
189
+ const contextEnd = Math.min(lines.length, lineIndex + 3);
190
+ const context = lines.slice(contextStart, contextEnd).join('\n');
191
+ // Calculate confidence based on context and pattern specificity
192
+ const confidence = calculateConfidence(pattern, match[0], context, filePath);
193
+ // Generate suggestions
194
+ const suggestions = generateSuggestions(pattern, filePath);
195
+ matches.push({
196
+ pattern,
197
+ match: match[0],
198
+ line: lineNumber,
199
+ column: match.index || 0,
200
+ context,
201
+ confidence,
202
+ suggestions
203
+ });
204
+ }
205
+ }
206
+ }
207
+ // Sort matches by severity and confidence
208
+ matches.sort((a, b) => {
209
+ const severityOrder = { critical: 4, high: 3, medium: 2, low: 1 };
210
+ const severityDiff = severityOrder[b.pattern.severity] - severityOrder[a.pattern.severity];
211
+ if (severityDiff !== 0)
212
+ return severityDiff;
213
+ return b.confidence - a.confidence;
214
+ });
215
+ // Generate summary
216
+ const summary = {
217
+ criticalCount: matches.filter(m => m.pattern.severity === 'critical').length,
218
+ highCount: matches.filter(m => m.pattern.severity === 'high').length,
219
+ mediumCount: matches.filter(m => m.pattern.severity === 'medium').length,
220
+ lowCount: matches.filter(m => m.pattern.severity === 'low').length,
221
+ totalCount: matches.length
222
+ };
223
+ // Generate recommendations
224
+ const recommendations = generateRecommendations(matches);
225
+ return {
226
+ filePath,
227
+ hasIssues: matches.length > 0,
228
+ matches,
229
+ summary,
230
+ recommendations
231
+ };
232
+ }
233
+ /**
234
+ * Calculate confidence score for a match
235
+ */
236
+ function calculateConfidence(pattern, match, context, filePath) {
237
+ let confidence = 0.5; // Base confidence
238
+ // Pattern-specific confidence adjustments
239
+ if (pattern.name.includes('github') || pattern.name.includes('aws')) {
240
+ confidence += 0.3; // Service-specific patterns are more reliable
241
+ }
242
+ if (pattern.severity === 'critical') {
243
+ confidence += 0.2;
244
+ }
245
+ // Context-based adjustments
246
+ if (context.toLowerCase().includes('example') || context.toLowerCase().includes('test')) {
247
+ confidence -= 0.3; // Likely example/test data
248
+ }
249
+ if (context.toLowerCase().includes('placeholder') || context.toLowerCase().includes('dummy')) {
250
+ confidence -= 0.4; // Likely placeholder
251
+ }
252
+ // File-based adjustments
253
+ const fileName = basename(filePath);
254
+ const fileExt = extname(filePath);
255
+ if (fileName.includes('example') || fileName.includes('test') || fileName.includes('demo')) {
256
+ confidence -= 0.2;
257
+ }
258
+ if (fileExt === '.md' || fileExt === '.txt') {
259
+ confidence -= 0.1; // Documentation files are less likely to contain real secrets
260
+ }
261
+ if (fileExt === '.env' || fileName === '.env' || fileName.includes('config')) {
262
+ confidence += 0.2; // Config files are more likely to contain real secrets
263
+ }
264
+ // Match length adjustments
265
+ if (match.length > 50) {
266
+ confidence += 0.1; // Longer matches are more likely to be real
267
+ }
268
+ return Math.max(0, Math.min(1, confidence));
269
+ }
270
+ /**
271
+ * Generate suggestions for handling sensitive content
272
+ */
273
+ function generateSuggestions(pattern, filePath) {
274
+ const suggestions = [];
275
+ const fileName = basename(filePath);
276
+ switch (pattern.category) {
277
+ case 'credentials':
278
+ suggestions.push('Move to environment variables');
279
+ suggestions.push('Use a secrets management service');
280
+ suggestions.push('Add to .gitignore and use .env.example');
281
+ if (pattern.severity === 'critical') {
282
+ suggestions.push('🚨 ROTATE THIS CREDENTIAL IMMEDIATELY');
283
+ }
284
+ break;
285
+ case 'secrets':
286
+ suggestions.push('Store in secure environment variables');
287
+ suggestions.push('Use a key management service');
288
+ suggestions.push('Consider using encrypted configuration');
289
+ break;
290
+ case 'personal':
291
+ suggestions.push('Replace with placeholder values');
292
+ suggestions.push('Use fake data for examples');
293
+ suggestions.push('Move to private configuration');
294
+ break;
295
+ case 'infrastructure':
296
+ suggestions.push('Use configuration variables');
297
+ suggestions.push('Consider if this information should be public');
298
+ suggestions.push('Use localhost or example.com for demos');
299
+ break;
300
+ case 'development':
301
+ suggestions.push('Remove debug logging');
302
+ suggestions.push('Use proper logging framework');
303
+ suggestions.push('Consider development vs production builds');
304
+ break;
305
+ }
306
+ // File-specific suggestions
307
+ if (fileName.includes('example') || fileName.includes('demo')) {
308
+ suggestions.push('Use obviously fake placeholder values');
309
+ }
310
+ if (fileName.includes('test')) {
311
+ suggestions.push('Use test-specific dummy data');
312
+ }
313
+ return suggestions;
314
+ }
315
+ /**
316
+ * Generate overall recommendations
317
+ */
318
+ function generateRecommendations(matches) {
319
+ const recommendations = [];
320
+ if (matches.length === 0) {
321
+ return ['No sensitive content detected'];
322
+ }
323
+ const criticalCount = matches.filter(m => m.pattern.severity === 'critical').length;
324
+ const highCount = matches.filter(m => m.pattern.severity === 'high').length;
325
+ if (criticalCount > 0) {
326
+ recommendations.push(`🚨 ${criticalCount} CRITICAL security issue(s) found - DO NOT COMMIT`);
327
+ recommendations.push('Rotate any exposed credentials immediately');
328
+ }
329
+ if (highCount > 0) {
330
+ recommendations.push(`⚠️ ${highCount} HIGH severity issue(s) found`);
331
+ recommendations.push('Review and secure sensitive information');
332
+ }
333
+ // General recommendations
334
+ recommendations.push('Use environment variables for sensitive configuration');
335
+ recommendations.push('Consider using a secrets management service');
336
+ recommendations.push('Add sensitive files to .gitignore');
337
+ recommendations.push('Use the content masking tool to sanitize content');
338
+ return recommendations;
339
+ }
340
+ /**
341
+ * Integration with existing content masking tool
342
+ */
343
+ export async function integrateWithContentMasking(filePath, content) {
344
+ // Get our enhanced analysis
345
+ const sensitiveAnalysis = await analyzeSensitiveContent(filePath, content);
346
+ // Try to use existing content masking tool
347
+ let maskingPrompt;
348
+ let existingRecommendations = [];
349
+ try {
350
+ const { analyzeContentSecurity } = await import('../tools/content-masking-tool.js');
351
+ const maskingResult = await analyzeContentSecurity({
352
+ content,
353
+ contentType: getContentType(filePath),
354
+ enhancedMode: false,
355
+ knowledgeEnhancement: false
356
+ });
357
+ // Extract prompt and recommendations from the result
358
+ if (maskingResult.content && maskingResult.content[0]) {
359
+ const resultText = maskingResult.content[0].text;
360
+ const promptMatch = resultText.match(/## AI.*Prompt\n\n(.*?)(?=\n##|$)/s);
361
+ if (promptMatch) {
362
+ maskingPrompt = promptMatch[1];
363
+ }
364
+ // Extract existing recommendations
365
+ const recMatch = resultText.match(/## Next Steps\n\n(.*?)(?=\n##|$)/s);
366
+ if (recMatch) {
367
+ existingRecommendations = recMatch[1].split('\n').filter((line) => line.trim());
368
+ }
369
+ }
370
+ }
371
+ catch (error) {
372
+ console.warn('Could not integrate with existing content masking tool:', error);
373
+ }
374
+ // Combine recommendations
375
+ const combinedRecommendations = [
376
+ ...sensitiveAnalysis.recommendations,
377
+ ...existingRecommendations
378
+ ].filter((rec, index, arr) => arr.indexOf(rec) === index); // Remove duplicates
379
+ return {
380
+ sensitiveAnalysis,
381
+ ...(maskingPrompt && { maskingPrompt }),
382
+ combinedRecommendations
383
+ };
384
+ }
385
+ /**
386
+ * Get content type for file
387
+ */
388
+ function getContentType(filePath) {
389
+ const ext = extname(filePath).toLowerCase();
390
+ if (['.js', '.ts', '.py', '.java', '.cpp', '.c', '.go', '.rs', '.rb', '.php'].includes(ext)) {
391
+ return 'code';
392
+ }
393
+ if (['.md', '.txt', '.rst', '.doc', '.docx'].includes(ext)) {
394
+ return 'documentation';
395
+ }
396
+ if (['.json', '.yaml', '.yml', '.ini', '.conf', '.config', '.env'].includes(ext)) {
397
+ return 'configuration';
398
+ }
399
+ if (['.log', '.out', '.err'].includes(ext)) {
400
+ return 'logs';
401
+ }
402
+ return 'general';
403
+ }
404
+ /**
405
+ * Quick check for obviously sensitive files
406
+ */
407
+ export function isObviouslySensitive(filePath) {
408
+ const fileName = basename(filePath).toLowerCase();
409
+ const sensitiveFilePatterns = [
410
+ /^\.env$/,
411
+ /^\.env\./,
412
+ /secrets?\./,
413
+ /credentials?\./,
414
+ /private.*key/,
415
+ /id_rsa$/,
416
+ /id_ed25519$/,
417
+ /\.pem$/,
418
+ /\.p12$/,
419
+ /\.pfx$/,
420
+ /keystore/,
421
+ /truststore/
422
+ ];
423
+ return sensitiveFilePatterns.some(pattern => pattern.test(fileName));
424
+ }
425
+ /**
426
+ * Create a custom sensitive pattern
427
+ */
428
+ export function createSensitivePattern(name, pattern, description, category, severity) {
429
+ return {
430
+ name,
431
+ pattern: new RegExp(pattern, 'g'),
432
+ description,
433
+ category,
434
+ severity
435
+ };
436
+ }
437
+ //# sourceMappingURL=enhanced-sensitive-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-sensitive-detector.js","sourceRoot":"","sources":["../../../src/utils/enhanced-sensitive-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Interactive approval workflow for smart git push
3
+ *
4
+ * Handles user interaction for approving/rejecting files with issues
5
+ */
6
+ export interface ApprovalItem {
7
+ filePath: string;
8
+ issues: ApprovalIssue[];
9
+ suggestions: string[];
10
+ severity: 'error' | 'warning' | 'info';
11
+ allowedInLocation: boolean;
12
+ confidence: number;
13
+ }
14
+ export interface ApprovalIssue {
15
+ type: 'sensitive-content' | 'llm-artifact' | 'location-violation' | 'temporary-file' | 'wrong-location';
16
+ message: string;
17
+ severity: 'error' | 'warning' | 'info';
18
+ pattern?: string;
19
+ line?: number;
20
+ context?: string;
21
+ }
22
+ export interface ApprovalResult {
23
+ approved: string[];
24
+ rejected: string[];
25
+ moved: Array<{
26
+ from: string;
27
+ to: string;
28
+ }>;
29
+ ignored: string[];
30
+ actions: ApprovalAction[];
31
+ proceed: boolean;
32
+ }
33
+ export interface ApprovalAction {
34
+ type: 'approve' | 'reject' | 'move' | 'ignore' | 'edit';
35
+ filePath: string;
36
+ target?: string | undefined;
37
+ reason?: string;
38
+ }
39
+ export interface ApprovalOptions {
40
+ interactiveMode: boolean;
41
+ autoApproveInfo: boolean;
42
+ autoRejectErrors: boolean;
43
+ dryRun: boolean;
44
+ batchMode: boolean;
45
+ timeout?: number;
46
+ }
47
+ /**
48
+ * Main interactive approval function
49
+ */
50
+ export declare function handleInteractiveApproval(items: ApprovalItem[], options: ApprovalOptions): Promise<ApprovalResult>;
51
+ /**
52
+ * Batch approval for similar files
53
+ */
54
+ export declare function batchApproval(items: ApprovalItem[], action: ApprovalAction, criteria: {
55
+ sameSeverity?: boolean;
56
+ sameIssueType?: boolean;
57
+ samePattern?: boolean;
58
+ }): ApprovalAction[];
59
+ /**
60
+ * Save approval preferences for future use
61
+ */
62
+ export declare function saveApprovalPreferences(actions: ApprovalAction[], configPath?: string): void;
63
+ //# sourceMappingURL=interactive-approval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-approval.d.ts","sourceRoot":"","sources":["../../../src/utils/interactive-approval.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,mBAAmB,GAAG,cAAc,GAAG,oBAAoB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;IACxG,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAuEzB;AAyXD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EAAE,EACrB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE;IACR,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,cAAc,EAAE,CAkClB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,GAAE,MAAmC,GAC9C,IAAI,CAiBN"}