mcp-adr-analysis-server 2.7.31 → 2.7.32

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.
@@ -1,76 +0,0 @@
1
- /**
2
- * LLM Artifact Detection System
3
- *
4
- * Detects files and content generated by LLMs that may not be suitable for production
5
- * Focuses on development artifacts, debug scripts, and temporary files
6
- */
7
- export interface LLMArtifactPattern {
8
- name: string;
9
- description: string;
10
- category: 'debug' | 'testing' | 'documentation' | 'experimental' | 'temporary' | 'tutorial';
11
- severity: 'error' | 'warning' | 'info';
12
- filePattern?: RegExp;
13
- contentPattern?: RegExp;
14
- combinedPattern?: (fileName: string, content: string) => boolean;
15
- locationExceptions: string[];
16
- confidence: number;
17
- }
18
- export interface LLMArtifactMatch {
19
- pattern: LLMArtifactPattern;
20
- matchType: 'filename' | 'content' | 'combined';
21
- match: string;
22
- line?: number;
23
- context?: string;
24
- confidence: number;
25
- suggestions: string[];
26
- }
27
- export interface LLMArtifactResult {
28
- filePath: string;
29
- isLLMArtifact: boolean;
30
- matches: LLMArtifactMatch[];
31
- overallConfidence: number;
32
- severity: 'error' | 'warning' | 'info';
33
- recommendations: string[];
34
- allowedInCurrentLocation: boolean;
35
- }
36
- /**
37
- * Comprehensive LLM artifact patterns
38
- */
39
- export declare const LLM_ARTIFACT_PATTERNS: LLMArtifactPattern[];
40
- /**
41
- * Detect LLM artifacts in a file
42
- */
43
- export declare function detectLLMArtifacts(filePath: string, content: string, customPatterns?: LLMArtifactPattern[]): LLMArtifactResult;
44
- /**
45
- * Batch analyze multiple files
46
- */
47
- export declare function batchDetectLLMArtifacts(files: Array<{
48
- path: string;
49
- content: string;
50
- }>, customPatterns?: LLMArtifactPattern[]): LLMArtifactResult[];
51
- /**
52
- * Get summary statistics for LLM artifact detection
53
- */
54
- export declare function getLLMArtifactSummary(results: LLMArtifactResult[]): {
55
- totalFiles: number;
56
- artifactFiles: number;
57
- allowedFiles: number;
58
- errorCount: number;
59
- warningCount: number;
60
- infoCount: number;
61
- categorySummary: Record<string, number>;
62
- topPatterns: Array<{
63
- name: string;
64
- count: number;
65
- }>;
66
- };
67
- /**
68
- * Create a custom LLM artifact pattern
69
- */
70
- export declare function createLLMPattern(name: string, description: string, category: LLMArtifactPattern['category'], severity: LLMArtifactPattern['severity'], options: {
71
- filePattern?: string;
72
- contentPattern?: string;
73
- locationExceptions?: string[];
74
- confidence?: number;
75
- }): LLMArtifactPattern;
76
- //# sourceMappingURL=llm-artifact-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-artifact-detector.d.ts","sourceRoot":"","sources":["../../../src/utils/llm-artifact-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5F,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACjE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,EAuLrD,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,kBAAkB,EAAO,GACxC,iBAAiB,CAqDnB;AAyMD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,cAAc,GAAE,kBAAkB,EAAO,GACxC,iBAAiB,EAAE,CAErB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD,CAgCA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,EACxC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,EACxC,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,kBAAkB,CAWpB"}
@@ -1,426 +0,0 @@
1
- /**
2
- * LLM Artifact Detection System
3
- *
4
- * Detects files and content generated by LLMs that may not be suitable for production
5
- * Focuses on development artifacts, debug scripts, and temporary files
6
- */
7
- import { basename, dirname } from 'path';
8
- /**
9
- * Comprehensive LLM artifact patterns
10
- */
11
- export const LLM_ARTIFACT_PATTERNS = [
12
- // Debug Scripts
13
- {
14
- name: 'debug-script',
15
- description: 'Debug script typically generated for troubleshooting',
16
- category: 'debug',
17
- severity: 'warning',
18
- filePattern: /^debug_.*\.(py|js|ts|sh|rb|go|php|java)$/,
19
- contentPattern: /print\s*\(\s*["'].*(?:debug|test|trace).*["']\s*\)|console\.log\s*\(\s*["'].*debug.*["']\s*\)|logging\.debug|debugger\s*;/i,
20
- locationExceptions: ['debug/', 'scripts/', 'tools/', 'dev/', 'utils/'],
21
- confidence: 0.8,
22
- },
23
- // Test Files in Wrong Location
24
- {
25
- name: 'misplaced-test',
26
- description: 'Test file not in proper test directory',
27
- category: 'testing',
28
- severity: 'error',
29
- filePattern: /^test_.*\.(py|js|ts|rb|go|php|java)$|.*\.test\.(js|ts|py)$|.*\.spec\.(js|ts|py)$/,
30
- locationExceptions: ['tests/', 'test/', '__tests__/', 'spec/', 'specs/'],
31
- confidence: 0.9,
32
- },
33
- // Mock/Fixture Files
34
- {
35
- name: 'mock-data',
36
- description: 'Mock data or fixture files',
37
- category: 'testing',
38
- severity: 'info',
39
- filePattern: /^mock_.*\.(json|js|ts|py|yaml|yml)$|^fixture_.*\.(json|js|ts|py|yaml|yml)$/,
40
- contentPattern: /mock|fixture|dummy.*data|fake.*data|test.*data/i,
41
- locationExceptions: ['tests/', 'test/', '__tests__/', 'fixtures/', 'mocks/', 'dev/'],
42
- confidence: 0.7,
43
- },
44
- // Temporary Files
45
- {
46
- name: 'temporary-file',
47
- description: 'Temporary file that should not be committed',
48
- category: 'temporary',
49
- severity: 'error',
50
- filePattern: /^temp_.*|.*\.tmp$|.*\.temp$|.*\.bak$|.*\.orig$|^scratch_.*|^playground_.*/,
51
- locationExceptions: ['tmp/', 'temp/', 'dev/'],
52
- confidence: 0.9,
53
- },
54
- // Experimental Code
55
- {
56
- name: 'experimental-code',
57
- description: 'Experimental or prototype code',
58
- category: 'experimental',
59
- severity: 'warning',
60
- filePattern: /^experiment_.*|^poc_.*|^prototype_.*|^try_.*|^attempt_.*/,
61
- contentPattern: /\/\*.*experiment.*\*\/|#.*experiment|\/\/.*experiment|TODO.*experiment/i,
62
- locationExceptions: ['experiments/', 'poc/', 'prototypes/', 'dev/', 'playground/'],
63
- confidence: 0.8,
64
- },
65
- // Tutorial/Learning Files
66
- {
67
- name: 'tutorial-file',
68
- description: 'Tutorial or learning file with step-by-step instructions',
69
- category: 'tutorial',
70
- severity: 'info',
71
- filePattern: /^tutorial_.*|^learn_.*|^example_.*|^demo_.*|^walkthrough_.*/,
72
- contentPattern: /step\s+\d+|tutorial|walkthrough|follow.*along|this.*example.*shows/i,
73
- locationExceptions: ['tutorials/', 'examples/', 'demos/', 'docs/', 'learning/'],
74
- confidence: 0.7,
75
- },
76
- // Documentation Drafts
77
- {
78
- name: 'documentation-draft',
79
- description: 'Draft documentation that may not be ready',
80
- category: 'documentation',
81
- severity: 'info',
82
- filePattern: /^draft_.*\.md$|^notes_.*\.md$|^wip_.*\.md$|^todo_.*\.md$/,
83
- contentPattern: /\[draft\]|\[wip\]|\[todo\]|work.*in.*progress|need.*to.*update/i,
84
- locationExceptions: ['docs/', 'documentation/', 'drafts/', 'dev/'],
85
- confidence: 0.6,
86
- },
87
- // LLM Conversation Logs
88
- {
89
- name: 'llm-conversation',
90
- description: 'LLM conversation log or output',
91
- category: 'temporary',
92
- severity: 'warning',
93
- filePattern: /^llm_.*|^ai_.*|^claude_.*|^gpt_.*|^chat_.*\.txt$|^conversation_.*\.txt$/,
94
- contentPattern: /human:|assistant:|claude:|gpt:|user:|system:|you:|me:|i'll.*help.*you/i,
95
- locationExceptions: ['dev/', 'logs/', 'temp/'],
96
- confidence: 0.9,
97
- },
98
- // Analysis/Report Files
99
- {
100
- name: 'analysis-report',
101
- description: 'Analysis or report file that may be temporary',
102
- category: 'temporary',
103
- severity: 'info',
104
- filePattern: /^analysis_.*|^report_.*|^output_.*|^results_.*\.(txt|md|json|csv)$/,
105
- contentPattern: /analysis.*results|generated.*on|report.*summary|output.*from/i,
106
- locationExceptions: ['reports/', 'analysis/', 'output/', 'dev/'],
107
- confidence: 0.5,
108
- },
109
- // Configuration Experiments
110
- {
111
- name: 'config-experiment',
112
- description: 'Experimental configuration file',
113
- category: 'experimental',
114
- severity: 'warning',
115
- filePattern: /^test_.*\.config\.(js|json|yaml|yml)$|^experiment_.*\.config\.(js|json|yaml|yml)$/,
116
- contentPattern: /test.*config|experiment.*config|temporary.*config/i,
117
- locationExceptions: ['configs/', 'dev/', 'experiments/'],
118
- confidence: 0.7,
119
- },
120
- // Utility Scripts
121
- {
122
- name: 'utility-script',
123
- description: 'Utility script that may be temporary',
124
- category: 'debug',
125
- severity: 'info',
126
- filePattern: /^util_.*|^helper_.*|^tool_.*\.(py|js|ts|sh|rb)$/,
127
- contentPattern: /quick.*script|helper.*function|utility.*tool|one.*time.*use/i,
128
- locationExceptions: ['utils/', 'helpers/', 'tools/', 'scripts/'],
129
- confidence: 0.6,
130
- },
131
- // Code Generation Artifacts
132
- {
133
- name: 'code-generation',
134
- description: 'Generated code that may need review',
135
- category: 'experimental',
136
- severity: 'info',
137
- filePattern: /^generated_.*|^auto_.*|^codegen_.*/,
138
- contentPattern: /\/\*.*generated.*\*\/|#.*auto.*generated|\/\/.*generated|@generated/i,
139
- locationExceptions: ['generated/', 'auto/', 'codegen/', 'build/'],
140
- confidence: 0.8,
141
- },
142
- // Learning/Practice Files
143
- {
144
- name: 'learning-file',
145
- description: 'Learning or practice file',
146
- category: 'tutorial',
147
- severity: 'info',
148
- filePattern: /^practice_.*|^learning_.*|^exercise_.*|^kata_.*/,
149
- contentPattern: /practice|exercise|kata|learning|studying|following.*tutorial/i,
150
- locationExceptions: ['practice/', 'learning/', 'exercises/', 'dev/'],
151
- confidence: 0.7,
152
- },
153
- // Verbose Comments (LLM-style)
154
- {
155
- name: 'verbose-comments',
156
- description: 'Unusually verbose comments typical of LLM generation',
157
- category: 'documentation',
158
- severity: 'info',
159
- combinedPattern: (_fileName, content) => {
160
- // Check for excessive commenting ratio
161
- const lines = content.split('\n');
162
- const commentLines = lines.filter(line => line.trim().startsWith('//') ||
163
- line.trim().startsWith('#') ||
164
- line.trim().startsWith('/*') ||
165
- line.trim().startsWith('*') ||
166
- line.trim().startsWith('"""') ||
167
- line.trim().startsWith("'''"));
168
- // If more than 40% of lines are comments, it might be LLM-generated
169
- const commentRatio = commentLines.length / lines.length;
170
- return commentRatio > 0.4 && content.length > 500;
171
- },
172
- locationExceptions: ['docs/', 'examples/', 'tutorials/'],
173
- confidence: 0.4,
174
- },
175
- ];
176
- /**
177
- * Detect LLM artifacts in a file
178
- */
179
- export function detectLLMArtifacts(filePath, content, customPatterns = []) {
180
- const fileName = basename(filePath);
181
- const dirPath = dirname(filePath);
182
- const allPatterns = [...LLM_ARTIFACT_PATTERNS, ...customPatterns];
183
- const matches = [];
184
- // Check each pattern
185
- for (const pattern of allPatterns) {
186
- const patternMatches = checkPattern(pattern, fileName, content, filePath);
187
- matches.push(...patternMatches);
188
- }
189
- // Calculate overall confidence
190
- const overallConfidence = matches.length > 0
191
- ? matches.reduce((sum, match) => sum + match.confidence, 0) / matches.length
192
- : 0;
193
- // Determine severity
194
- const severity = matches.length > 0
195
- ? matches.reduce((highest, match) => {
196
- const severityOrder = { error: 3, warning: 2, info: 1 };
197
- return severityOrder[match.pattern.severity] > severityOrder[highest]
198
- ? match.pattern.severity
199
- : highest;
200
- }, 'info')
201
- : 'info';
202
- // Check if current location is allowed
203
- const allowedInCurrentLocation = matches.length === 0 ||
204
- matches.every(match => match.pattern.locationExceptions.some(exception => dirPath.includes(exception) || dirPath.endsWith(exception.replace('/', ''))));
205
- // Generate recommendations
206
- const recommendations = generateRecommendations(matches, filePath, allowedInCurrentLocation);
207
- return {
208
- filePath,
209
- isLLMArtifact: matches.length > 0,
210
- matches,
211
- overallConfidence,
212
- severity,
213
- recommendations,
214
- allowedInCurrentLocation,
215
- };
216
- }
217
- /**
218
- * Check a specific pattern against file and content
219
- */
220
- function checkPattern(pattern, fileName, content, filePath) {
221
- const matches = [];
222
- // Check filename pattern
223
- if (pattern.filePattern && pattern.filePattern.test(fileName)) {
224
- matches.push({
225
- pattern,
226
- matchType: 'filename',
227
- match: fileName,
228
- confidence: pattern.confidence,
229
- suggestions: generateSuggestions(pattern, filePath, 'filename'),
230
- });
231
- }
232
- // Check content pattern
233
- if (pattern.contentPattern && content) {
234
- const contentMatches = content.match(pattern.contentPattern);
235
- if (contentMatches) {
236
- const lines = content.split('\n');
237
- for (let i = 0; i < lines.length; i++) {
238
- if (pattern.contentPattern.test(lines[i])) {
239
- matches.push({
240
- pattern,
241
- matchType: 'content',
242
- match: lines[i] || '',
243
- line: i + 1,
244
- context: getLineContext(lines, i, 2),
245
- confidence: pattern.confidence * 0.9, // Slightly lower confidence for content matches
246
- suggestions: generateSuggestions(pattern, filePath, 'content'),
247
- });
248
- break; // Only report first match per pattern
249
- }
250
- }
251
- }
252
- }
253
- // Check combined pattern
254
- if (pattern.combinedPattern && pattern.combinedPattern(fileName, content)) {
255
- matches.push({
256
- pattern,
257
- matchType: 'combined',
258
- match: 'Pattern detected in file structure and content',
259
- confidence: pattern.confidence,
260
- suggestions: generateSuggestions(pattern, filePath, 'combined'),
261
- });
262
- }
263
- return matches;
264
- }
265
- /**
266
- * Get context around a line
267
- */
268
- function getLineContext(lines, lineIndex, contextSize) {
269
- const start = Math.max(0, lineIndex - contextSize);
270
- const end = Math.min(lines.length, lineIndex + contextSize + 1);
271
- return lines.slice(start, end).join('\n');
272
- }
273
- /**
274
- * Generate suggestions for handling LLM artifacts
275
- */
276
- function generateSuggestions(pattern, filePath, _matchType) {
277
- const suggestions = [];
278
- const fileName = basename(filePath);
279
- // Category-specific suggestions
280
- switch (pattern.category) {
281
- case 'debug':
282
- suggestions.push(`Move ${fileName} to scripts/ or tools/ directory`);
283
- suggestions.push("Add to .gitignore if it's temporary");
284
- suggestions.push('Remove debug logging before commit');
285
- break;
286
- case 'testing':
287
- suggestions.push(`Move ${fileName} to tests/ directory`);
288
- suggestions.push('Ensure test follows project testing conventions');
289
- break;
290
- case 'temporary':
291
- suggestions.push('Remove file if no longer needed');
292
- suggestions.push('Add to .gitignore');
293
- suggestions.push('Move to tmp/ directory if needed');
294
- break;
295
- case 'experimental':
296
- suggestions.push(`Move ${fileName} to experiments/ or dev/ directory`);
297
- suggestions.push('Add documentation about experimental status');
298
- suggestions.push('Consider if this should be in version control');
299
- break;
300
- case 'tutorial':
301
- suggestions.push(`Move ${fileName} to examples/ or tutorials/ directory`);
302
- suggestions.push('Add to documentation structure');
303
- break;
304
- case 'documentation':
305
- suggestions.push(`Move ${fileName} to docs/ directory`);
306
- suggestions.push('Review and finalize before committing');
307
- break;
308
- }
309
- // Location-specific suggestions
310
- if (pattern.locationExceptions.length > 0) {
311
- const allowedDirs = pattern.locationExceptions.join(', ');
312
- suggestions.push(`Consider moving to: ${allowedDirs}`);
313
- }
314
- // Severity-specific suggestions
315
- if (pattern.severity === 'error') {
316
- suggestions.push('🚨 This file should not be committed in its current location');
317
- }
318
- else if (pattern.severity === 'warning') {
319
- suggestions.push('⚠️ Review this file before committing');
320
- }
321
- return suggestions;
322
- }
323
- /**
324
- * Generate recommendations for the overall result
325
- */
326
- function generateRecommendations(matches, _filePath, allowedInCurrentLocation) {
327
- const recommendations = [];
328
- if (matches.length === 0) {
329
- return ['File appears to be a legitimate source file'];
330
- }
331
- if (allowedInCurrentLocation) {
332
- recommendations.push('✅ File is in an appropriate location for its type');
333
- }
334
- else {
335
- recommendations.push('❌ File should be moved to an appropriate directory');
336
- // Add specific suggestions from matches
337
- const uniqueSuggestions = new Set();
338
- matches.forEach(match => {
339
- match.suggestions.forEach(suggestion => {
340
- if (suggestion.includes('Move') ||
341
- suggestion.includes('scripts/') ||
342
- suggestion.includes('tests/') ||
343
- suggestion.includes('tools/')) {
344
- uniqueSuggestions.add(suggestion);
345
- }
346
- });
347
- });
348
- uniqueSuggestions.forEach(suggestion => {
349
- recommendations.push(suggestion);
350
- });
351
- }
352
- // Count by severity
353
- const errorCount = matches.filter(m => m.pattern.severity === 'error').length;
354
- const warningCount = matches.filter(m => m.pattern.severity === 'warning').length;
355
- if (errorCount > 0) {
356
- recommendations.push(`🚨 ${errorCount} critical issue(s) - file should not be committed`);
357
- }
358
- if (warningCount > 0) {
359
- recommendations.push(`⚠️ ${warningCount} warning(s) - review before committing`);
360
- }
361
- // Category-specific recommendations
362
- const categories = [...new Set(matches.map(m => m.pattern.category))];
363
- if (categories.includes('debug')) {
364
- recommendations.push('Consider if debug code is needed in repository');
365
- }
366
- if (categories.includes('temporary')) {
367
- recommendations.push('Remove temporary files before committing');
368
- }
369
- if (categories.includes('experimental')) {
370
- recommendations.push('Move experimental code to appropriate directory');
371
- }
372
- return recommendations;
373
- }
374
- /**
375
- * Batch analyze multiple files
376
- */
377
- export function batchDetectLLMArtifacts(files, customPatterns = []) {
378
- return files.map(file => detectLLMArtifacts(file.path, file.content, customPatterns));
379
- }
380
- /**
381
- * Get summary statistics for LLM artifact detection
382
- */
383
- export function getLLMArtifactSummary(results) {
384
- const summary = {
385
- totalFiles: results.length,
386
- artifactFiles: results.filter(r => r.isLLMArtifact).length,
387
- allowedFiles: results.filter(r => r.allowedInCurrentLocation).length,
388
- errorCount: results.filter(r => r.severity === 'error').length,
389
- warningCount: results.filter(r => r.severity === 'warning').length,
390
- infoCount: results.filter(r => r.severity === 'info').length,
391
- categorySummary: {},
392
- topPatterns: [],
393
- };
394
- // Count by category
395
- const patternCounts = {};
396
- for (const result of results) {
397
- for (const match of result.matches) {
398
- const category = match.pattern.category;
399
- summary.categorySummary[category] = (summary.categorySummary[category] || 0) + 1;
400
- const patternName = match.pattern.name;
401
- patternCounts[patternName] = (patternCounts[patternName] || 0) + 1;
402
- }
403
- }
404
- // Top patterns
405
- summary.topPatterns = Object.entries(patternCounts)
406
- .sort((a, b) => b[1] - a[1])
407
- .slice(0, 5)
408
- .map(([name, count]) => ({ name, count }));
409
- return summary;
410
- }
411
- /**
412
- * Create a custom LLM artifact pattern
413
- */
414
- export function createLLMPattern(name, description, category, severity, options) {
415
- return {
416
- name,
417
- description,
418
- category,
419
- severity,
420
- ...(options.filePattern && { filePattern: new RegExp(options.filePattern) }),
421
- ...(options.contentPattern && { contentPattern: new RegExp(options.contentPattern, 'i') }),
422
- locationExceptions: options.locationExceptions || [],
423
- confidence: options.confidence || 0.7,
424
- };
425
- }
426
- //# sourceMappingURL=llm-artifact-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-artifact-detector.js","sourceRoot":"","sources":["../../../src/utils/llm-artifact-detector.ts"],"names":[],"mappings":"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"}