code-auditor-mcp 1.18.0 → 1.20.0

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.
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Code Map Generator
3
+ * Processes indexed code data into human-readable terminal-friendly maps
4
+ */
5
+ import { DocumentationMetrics } from '../analyzers/documentationAnalyzer.js';
6
+ export interface CodeMapOptions {
7
+ includeComplexity?: boolean;
8
+ includeDocumentation?: boolean;
9
+ includeDependencies?: boolean;
10
+ includeUsage?: boolean;
11
+ maxDepth?: number;
12
+ groupByDirectory?: boolean;
13
+ showUnusedImports?: boolean;
14
+ minComplexity?: number;
15
+ }
16
+ export interface CodeMapStats {
17
+ totalFiles: number;
18
+ totalFunctions: number;
19
+ totalComponents: number;
20
+ averageComplexity: number;
21
+ highComplexityCount: number;
22
+ unusedImports: number;
23
+ documentationCoverage?: number;
24
+ lastIndexed: Date | null;
25
+ }
26
+ export interface FileGroup {
27
+ directory: string;
28
+ files: FileMapInfo[];
29
+ stats: {
30
+ functionCount: number;
31
+ componentCount: number;
32
+ averageComplexity: number;
33
+ documentationScore: number;
34
+ };
35
+ }
36
+ export interface FileMapInfo {
37
+ path: string;
38
+ relativePath: string;
39
+ functions: FunctionMapInfo[];
40
+ components: FunctionMapInfo[];
41
+ lineCount: number;
42
+ complexity: number;
43
+ unusedImports: string[];
44
+ documentationScore: number;
45
+ }
46
+ export interface FunctionMapInfo {
47
+ name: string;
48
+ line: number;
49
+ complexity?: number;
50
+ purpose?: string;
51
+ parameters?: string[];
52
+ hooks?: string[];
53
+ dependencies?: string[];
54
+ usedBy?: string[];
55
+ calls?: string[];
56
+ isExported?: boolean;
57
+ componentType?: string;
58
+ hasDocumentation?: boolean;
59
+ }
60
+ export interface DependencyInfo {
61
+ name: string;
62
+ version?: string;
63
+ usageCount: number;
64
+ usedBy: string[];
65
+ unusedInFiles: string[];
66
+ }
67
+ export declare class CodeMapGenerator {
68
+ /**
69
+ * Generates a complete code map for the project
70
+ */
71
+ generateCodeMap(projectPath: string, options?: CodeMapOptions): Promise<{
72
+ stats: CodeMapStats;
73
+ fileGroups: FileGroup[];
74
+ dependencies: DependencyInfo[];
75
+ documentation?: DocumentationMetrics;
76
+ }>;
77
+ /**
78
+ * Generates a paginated code map and stores sections in database
79
+ * Returns summary with section references
80
+ */
81
+ generatePaginatedCodeMap(projectPath: string, options?: CodeMapOptions): Promise<{
82
+ mapId: string;
83
+ summary: {
84
+ stats: CodeMapStats;
85
+ sectionsAvailable: Array<{
86
+ type: string;
87
+ description: string;
88
+ size: number;
89
+ }>;
90
+ totalSections: number;
91
+ };
92
+ quickPreview: string;
93
+ }>;
94
+ /**
95
+ * Formats the code map as terminal-friendly text
96
+ */
97
+ formatAsText(codeMap: Awaited<ReturnType<CodeMapGenerator['generateCodeMap']>>, options?: CodeMapOptions): string;
98
+ private calculateProjectStats;
99
+ private groupFunctionsByFile;
100
+ private groupFilesByDirectory;
101
+ private calculateGroupStats;
102
+ private analyzeDependencies;
103
+ private formatTimeAgo;
104
+ /**
105
+ * Break code map into sections for storage
106
+ */
107
+ private createCodeMapSections;
108
+ /**
109
+ * Create a quick preview of the code map
110
+ */
111
+ private createQuickPreview;
112
+ /**
113
+ * Format individual sections
114
+ */
115
+ private formatOverviewSection;
116
+ private formatFilesSection;
117
+ private formatDependenciesSection;
118
+ private formatDocumentationSection;
119
+ }
120
+ //# sourceMappingURL=CodeMapGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeMapGenerator.d.ts","sourceRoot":"","sources":["../../src/services/CodeMapGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,483 @@
1
+ /**
2
+ * Code Map Generator
3
+ * Processes indexed code data into human-readable terminal-friendly maps
4
+ */
5
+ import { getAllFunctions, getDatabase } from '../codeIndexService.js';
6
+ import path from 'path';
7
+ import { randomBytes } from 'crypto';
8
+ export class CodeMapGenerator {
9
+ /**
10
+ * Generates a complete code map for the project
11
+ */
12
+ async generateCodeMap(projectPath, options = {}) {
13
+ const functions = await getAllFunctions();
14
+ const stats = this.calculateProjectStats(functions);
15
+ // Group functions by files and directories
16
+ const fileMap = this.groupFunctionsByFile(functions);
17
+ const fileGroups = options.groupByDirectory
18
+ ? this.groupFilesByDirectory(fileMap, projectPath)
19
+ : [{ directory: '.', files: Object.values(fileMap), stats: this.calculateGroupStats(Object.values(fileMap)) }];
20
+ // Analyze dependencies
21
+ const dependencies = this.analyzeDependencies(functions);
22
+ return {
23
+ stats,
24
+ fileGroups,
25
+ dependencies
26
+ };
27
+ }
28
+ /**
29
+ * Generates a paginated code map and stores sections in database
30
+ * Returns summary with section references
31
+ */
32
+ async generatePaginatedCodeMap(projectPath, options = {}) {
33
+ // Generate the full code map data
34
+ const fullMap = await this.generateCodeMap(projectPath, options);
35
+ // Generate unique map ID
36
+ const mapId = 'map_' + randomBytes(8).toString('hex');
37
+ // Get database instance
38
+ const db = await getDatabase();
39
+ // Break into sections and store each
40
+ const sections = await this.createCodeMapSections(fullMap, options);
41
+ const sectionInfo = [];
42
+ for (const [sectionType, content] of Object.entries(sections)) {
43
+ await db.storeCodeMapSection(mapId, sectionType, content.text, content.metadata);
44
+ sectionInfo.push({
45
+ type: sectionType,
46
+ description: content.description,
47
+ size: content.text.length
48
+ });
49
+ }
50
+ // Create quick preview (first ~1000 chars)
51
+ const quickPreview = this.createQuickPreview(fullMap, 1000);
52
+ return {
53
+ mapId,
54
+ summary: {
55
+ stats: fullMap.stats,
56
+ sectionsAvailable: sectionInfo,
57
+ totalSections: sectionInfo.length
58
+ },
59
+ quickPreview
60
+ };
61
+ }
62
+ /**
63
+ * Formats the code map as terminal-friendly text
64
+ */
65
+ formatAsText(codeMap, options = {}) {
66
+ const lines = [];
67
+ // Header
68
+ lines.push('šŸ“– CODEBASE GUIDE');
69
+ lines.push('');
70
+ // Overview stats
71
+ lines.push('šŸŽÆ STRUCTURE OVERVIEW');
72
+ lines.push(`Files: ${codeMap.stats.totalFiles} | Functions: ${codeMap.stats.totalFunctions} | Components: ${codeMap.stats.totalComponents}`);
73
+ lines.push(`Avg Complexity: ${codeMap.stats.averageComplexity.toFixed(1)} | High Complexity: ${codeMap.stats.highComplexityCount} functions`);
74
+ if (options.includeDocumentation && codeMap.documentation) {
75
+ lines.push(`Documentation Coverage: ${codeMap.documentation.coverageScore}%`);
76
+ }
77
+ if (codeMap.stats.lastIndexed) {
78
+ const timeAgo = this.formatTimeAgo(codeMap.stats.lastIndexed);
79
+ lines.push(`Last indexed: ${timeAgo}`);
80
+ }
81
+ lines.push('');
82
+ // File groups (directories)
83
+ lines.push('šŸ“ Core Architecture:');
84
+ lines.push('');
85
+ for (const group of codeMap.fileGroups) {
86
+ if (group.directory !== '.') {
87
+ lines.push(`šŸ“ ${group.directory}/`);
88
+ lines.push(`ā”œā”€ā”€ Functions: ${group.stats.functionCount} | Components: ${group.stats.componentCount}`);
89
+ lines.push(`ā”œā”€ā”€ Avg Complexity: ${group.stats.averageComplexity.toFixed(1)} | Documentation: ${group.stats.documentationScore.toFixed(0)}%`);
90
+ lines.push('│');
91
+ }
92
+ // Files in this group
93
+ for (const file of group.files.slice(0, options.maxDepth || 10)) {
94
+ const indent = group.directory !== '.' ? '│ ' : '';
95
+ lines.push(`${indent}šŸ“„ ${file.relativePath}${file.lineCount ? ` [Lines: ${file.lineCount}]` : ''}`);
96
+ // Show complexity warning if high
97
+ if (file.complexity > (options.minComplexity || 7)) {
98
+ lines.push(`${indent}│ āš ļø High complexity: ${file.complexity.toFixed(1)}`);
99
+ }
100
+ // Components
101
+ if (file.components.length > 0) {
102
+ for (const component of file.components) {
103
+ lines.push(`${indent}│ └── šŸ”§ ${component.name}()${component.componentType ? ` [${component.componentType}]` : ''}`);
104
+ if (component.parameters && component.parameters.length > 0) {
105
+ lines.push(`${indent}│ ā”œā”€ā”€ Props: ${component.parameters.join(', ')}`);
106
+ }
107
+ if (options.includeComplexity && component.complexity) {
108
+ lines.push(`${indent}│ ā”œā”€ā”€ Complexity: ${component.complexity.toFixed(1)}`);
109
+ }
110
+ if (component.hooks && component.hooks.length > 0) {
111
+ lines.push(`${indent}│ ā”œā”€ā”€ Hooks: ${component.hooks.join(', ')}`);
112
+ }
113
+ if (options.includeUsage && component.usedBy && component.usedBy.length > 0) {
114
+ const usageCount = component.usedBy.length;
115
+ const usagePreview = component.usedBy.slice(0, 3).join(', ');
116
+ const usageText = usageCount > 3 ? `${usagePreview} (${usageCount} total)` : usagePreview;
117
+ lines.push(`${indent}│ ā”œā”€ā”€ Used by: ${usageText}`);
118
+ }
119
+ if (options.includeDocumentation) {
120
+ const docStatus = component.hasDocumentation ? 'Good' : 'Missing';
121
+ lines.push(`${indent}│ └── šŸ“ Documentation: ${docStatus}`);
122
+ }
123
+ if (component.purpose) {
124
+ lines.push(`${indent}│ └── Context: "${component.purpose}"`);
125
+ }
126
+ }
127
+ }
128
+ // Regular functions (non-components)
129
+ const regularFunctions = file.functions.filter(f => !file.components.find(c => c.name === f.name));
130
+ if (regularFunctions.length > 0) {
131
+ for (const func of regularFunctions.slice(0, 5)) { // Limit to avoid clutter
132
+ lines.push(`${indent}│ └── šŸ”§ ${func.name}()`);
133
+ if (func.purpose) {
134
+ lines.push(`${indent}│ └── "${func.purpose}"`);
135
+ }
136
+ if (options.includeUsage && func.calls && func.calls.length > 0) {
137
+ lines.push(`${indent}│ └── Calls: ${func.calls.slice(0, 3).join(', ')}`);
138
+ }
139
+ }
140
+ if (regularFunctions.length > 5) {
141
+ lines.push(`${indent}│ └── ... ${regularFunctions.length - 5} more functions`);
142
+ }
143
+ }
144
+ // Unused imports warning
145
+ if (options.showUnusedImports && file.unusedImports.length > 0) {
146
+ lines.push(`${indent}│ āš ļø Unused imports: ${file.unusedImports.join(', ')}`);
147
+ }
148
+ lines.push(`${indent}│`);
149
+ }
150
+ lines.push('');
151
+ }
152
+ // Dependencies section
153
+ if (options.includeDependencies && codeMap.dependencies.length > 0) {
154
+ lines.push('šŸ”— DEPENDENCIES');
155
+ lines.push('');
156
+ const sortedDeps = codeMap.dependencies
157
+ .sort((a, b) => b.usageCount - a.usageCount)
158
+ .slice(0, 10);
159
+ for (const dep of sortedDeps) {
160
+ lines.push(`ā”œā”€ā”€ ${dep.name}${dep.version ? ` (${dep.version})` : ''} → ${dep.usageCount} functions`);
161
+ if (dep.unusedInFiles.length > 0) {
162
+ lines.push(`│ └── āš ļø Unused in: ${dep.unusedInFiles.slice(0, 3).join(', ')}`);
163
+ }
164
+ }
165
+ lines.push('');
166
+ }
167
+ // Documentation section
168
+ if (options.includeDocumentation && codeMap.documentation) {
169
+ lines.push('šŸ“ DOCUMENTATION QUALITY');
170
+ lines.push('');
171
+ lines.push(`ā”œā”€ā”€ Functions with JSDoc: ${codeMap.documentation.documentedFunctions}/${codeMap.documentation.totalFunctions} (${Math.round((codeMap.documentation.documentedFunctions / codeMap.documentation.totalFunctions) * 100)}%)`);
172
+ lines.push(`ā”œā”€ā”€ Components documented: ${codeMap.documentation.documentedComponents}/${codeMap.documentation.totalComponents} (${Math.round((codeMap.documentation.documentedComponents / codeMap.documentation.totalComponents) * 100)}%)`);
173
+ lines.push(`ā”œā”€ā”€ Files with purpose: ${codeMap.documentation.filesWithPurpose}/${codeMap.documentation.totalFiles} (${Math.round((codeMap.documentation.filesWithPurpose / codeMap.documentation.totalFiles) * 100)}%)`);
174
+ if (codeMap.documentation.wellDocumentedFiles.length > 0) {
175
+ lines.push(`└── Well documented: ${codeMap.documentation.wellDocumentedFiles.slice(0, 3).map(f => path.basename(f)).join(', ')}`);
176
+ }
177
+ lines.push('');
178
+ }
179
+ // Issues summary
180
+ const issues = [];
181
+ if (codeMap.stats.highComplexityCount > 0) {
182
+ issues.push(`${codeMap.stats.highComplexityCount} functions with high complexity`);
183
+ }
184
+ if (codeMap.stats.unusedImports > 0) {
185
+ issues.push(`${codeMap.stats.unusedImports} unused imports`);
186
+ }
187
+ if (issues.length > 0) {
188
+ lines.push('āš ļø ATTENTION NEEDED:');
189
+ issues.forEach(issue => lines.push(`ā”œā”€ā”€ ${issue}`));
190
+ lines.push('');
191
+ }
192
+ return lines.join('\n');
193
+ }
194
+ calculateProjectStats(functions) {
195
+ const fileSet = new Set(functions.map(f => f.filePath));
196
+ const complexities = functions.map(f => {
197
+ const complexity = f.complexity || f.metadata?.complexity || 0;
198
+ return typeof complexity === 'number' ? complexity : 0;
199
+ }).filter(c => c > 0);
200
+ const averageComplexity = complexities.length > 0
201
+ ? complexities.reduce((sum, c) => sum + c, 0) / complexities.length
202
+ : 0;
203
+ return {
204
+ totalFiles: fileSet.size,
205
+ totalFunctions: functions.filter(f => (f.metadata?.entityType || 'function') === 'function').length,
206
+ totalComponents: functions.filter(f => (f.metadata?.entityType) === 'component').length,
207
+ averageComplexity,
208
+ highComplexityCount: complexities.filter(c => c > 7).length,
209
+ unusedImports: functions.reduce((sum, f) => sum + (f.metadata?.unusedImports?.length || 0), 0),
210
+ lastIndexed: functions.length > 0 ? new Date() : null
211
+ };
212
+ }
213
+ groupFunctionsByFile(functions) {
214
+ const fileMap = {};
215
+ for (const func of functions) {
216
+ if (!fileMap[func.filePath]) {
217
+ fileMap[func.filePath] = {
218
+ path: func.filePath,
219
+ relativePath: path.relative(process.cwd(), func.filePath),
220
+ functions: [],
221
+ components: [],
222
+ lineCount: 0,
223
+ complexity: 0,
224
+ unusedImports: func.metadata?.unusedImports || [],
225
+ documentationScore: 0
226
+ };
227
+ }
228
+ const file = fileMap[func.filePath];
229
+ const funcInfo = {
230
+ name: func.name,
231
+ line: func.lineNumber,
232
+ complexity: func.complexity || func.metadata?.complexity,
233
+ purpose: func.purpose,
234
+ parameters: func.parameters?.map(p => p.name),
235
+ hooks: func.metadata?.hooks?.map(h => h.name),
236
+ dependencies: func.dependencies,
237
+ usedBy: func.metadata?.calledBy,
238
+ calls: func.metadata?.functionCalls,
239
+ isExported: func.metadata?.isExported,
240
+ componentType: func.metadata?.componentType,
241
+ hasDocumentation: !!(func.jsDoc?.description || func.metadata?.jsDoc)
242
+ };
243
+ if (func.metadata?.entityType === 'component') {
244
+ file.components.push(funcInfo);
245
+ }
246
+ else {
247
+ file.functions.push(funcInfo);
248
+ }
249
+ // Update file stats
250
+ file.lineCount = Math.max(file.lineCount, func.endLine || func.lineNumber);
251
+ file.complexity = Math.max(file.complexity, func.complexity || func.metadata?.complexity || 0);
252
+ }
253
+ // Calculate documentation scores
254
+ for (const file of Object.values(fileMap)) {
255
+ const allFunctions = [...file.functions, ...file.components];
256
+ const documented = allFunctions.filter(f => f.hasDocumentation).length;
257
+ file.documentationScore = allFunctions.length > 0 ? (documented / allFunctions.length) * 100 : 100;
258
+ }
259
+ return fileMap;
260
+ }
261
+ groupFilesByDirectory(fileMap, projectPath) {
262
+ const groups = {};
263
+ for (const file of Object.values(fileMap)) {
264
+ const directory = path.dirname(file.relativePath);
265
+ const cleanDir = directory === '.' ? '.' : directory.split('/')[0];
266
+ if (!groups[cleanDir]) {
267
+ groups[cleanDir] = {
268
+ directory: cleanDir,
269
+ files: [],
270
+ stats: { functionCount: 0, componentCount: 0, averageComplexity: 0, documentationScore: 0 }
271
+ };
272
+ }
273
+ groups[cleanDir].files.push(file);
274
+ }
275
+ // Calculate group stats
276
+ for (const group of Object.values(groups)) {
277
+ group.stats = this.calculateGroupStats(group.files);
278
+ }
279
+ return Object.values(groups).sort((a, b) => a.directory.localeCompare(b.directory));
280
+ }
281
+ calculateGroupStats(files) {
282
+ const functionCount = files.reduce((sum, f) => sum + f.functions.length, 0);
283
+ const componentCount = files.reduce((sum, f) => sum + f.components.length, 0);
284
+ const complexities = files.map(f => f.complexity).filter(c => c > 0);
285
+ const averageComplexity = complexities.length > 0
286
+ ? complexities.reduce((sum, c) => sum + c, 0) / complexities.length
287
+ : 0;
288
+ const averageDocScore = files.length > 0
289
+ ? files.reduce((sum, f) => sum + f.documentationScore, 0) / files.length
290
+ : 0;
291
+ return {
292
+ functionCount,
293
+ componentCount,
294
+ averageComplexity,
295
+ documentationScore: averageDocScore
296
+ };
297
+ }
298
+ analyzeDependencies(functions) {
299
+ const depMap = {};
300
+ for (const func of functions) {
301
+ // External dependencies
302
+ if (func.dependencies) {
303
+ for (const dep of func.dependencies) {
304
+ if (!depMap[dep]) {
305
+ depMap[dep] = {
306
+ name: dep,
307
+ usageCount: 0,
308
+ usedBy: [],
309
+ unusedInFiles: []
310
+ };
311
+ }
312
+ depMap[dep].usageCount++;
313
+ depMap[dep].usedBy.push(`${func.name} (${path.basename(func.filePath)})`);
314
+ }
315
+ }
316
+ // Unused imports
317
+ if (func.metadata?.unusedImports) {
318
+ for (const unused of func.metadata.unusedImports) {
319
+ if (!depMap[unused]) {
320
+ depMap[unused] = {
321
+ name: unused,
322
+ usageCount: 0,
323
+ usedBy: [],
324
+ unusedInFiles: []
325
+ };
326
+ }
327
+ depMap[unused].unusedInFiles.push(path.basename(func.filePath));
328
+ }
329
+ }
330
+ }
331
+ return Object.values(depMap)
332
+ .filter(dep => dep.usageCount > 0 || dep.unusedInFiles.length > 0)
333
+ .sort((a, b) => b.usageCount - a.usageCount);
334
+ }
335
+ formatTimeAgo(date) {
336
+ const now = new Date();
337
+ const diffMs = now.getTime() - date.getTime();
338
+ const diffMins = Math.floor(diffMs / 60000);
339
+ const diffHours = Math.floor(diffMs / 3600000);
340
+ const diffDays = Math.floor(diffMs / 86400000);
341
+ if (diffMins < 1)
342
+ return 'just now';
343
+ if (diffMins < 60)
344
+ return `${diffMins} minute${diffMins !== 1 ? 's' : ''} ago`;
345
+ if (diffHours < 24)
346
+ return `${diffHours} hour${diffHours !== 1 ? 's' : ''} ago`;
347
+ return `${diffDays} day${diffDays !== 1 ? 's' : ''} ago`;
348
+ }
349
+ /**
350
+ * Break code map into sections for storage
351
+ */
352
+ async createCodeMapSections(fullMap, options) {
353
+ const sections = {};
354
+ // Overview section
355
+ sections.overview = {
356
+ text: this.formatOverviewSection(fullMap.stats, fullMap.documentation),
357
+ description: "Project overview and statistics",
358
+ metadata: { stats: fullMap.stats }
359
+ };
360
+ // Files section (chunked by directory if large)
361
+ if (fullMap.fileGroups.length <= 20) {
362
+ sections.files = {
363
+ text: this.formatFilesSection(fullMap.fileGroups, options),
364
+ description: "Complete file structure and functions",
365
+ metadata: { fileCount: fullMap.fileGroups.reduce((sum, g) => sum + g.files.length, 0) }
366
+ };
367
+ }
368
+ else {
369
+ // Split into chunks
370
+ const chunkSize = 10;
371
+ for (let i = 0; i < fullMap.fileGroups.length; i += chunkSize) {
372
+ const chunk = fullMap.fileGroups.slice(i, i + chunkSize);
373
+ const chunkNum = Math.floor(i / chunkSize) + 1;
374
+ sections[`files_${chunkNum}`] = {
375
+ text: this.formatFilesSection(chunk, options),
376
+ description: `Files section ${chunkNum} (${chunk.length} directories)`,
377
+ metadata: { chunk: chunkNum, fileCount: chunk.reduce((sum, g) => sum + g.files.length, 0) }
378
+ };
379
+ }
380
+ }
381
+ // Dependencies section
382
+ sections.dependencies = {
383
+ text: this.formatDependenciesSection(fullMap.dependencies),
384
+ description: "Dependency analysis and usage",
385
+ metadata: { dependencyCount: fullMap.dependencies.length }
386
+ };
387
+ // Documentation section (if enabled)
388
+ if (options.includeDocumentation && fullMap.documentation) {
389
+ sections.documentation = {
390
+ text: this.formatDocumentationSection(fullMap.documentation),
391
+ description: "Documentation quality metrics",
392
+ metadata: { coverage: fullMap.documentation.coverageScore }
393
+ };
394
+ }
395
+ return sections;
396
+ }
397
+ /**
398
+ * Create a quick preview of the code map
399
+ */
400
+ createQuickPreview(fullMap, maxLength = 1000) {
401
+ const overview = this.formatOverviewSection(fullMap.stats, fullMap.documentation);
402
+ if (overview.length <= maxLength) {
403
+ // Add a sample of files if we have room
404
+ const remainingSpace = maxLength - overview.length - 50; // Leave some buffer
405
+ const filesSample = this.formatFilesSection(fullMap.fileGroups.slice(0, 2), {});
406
+ const truncatedFiles = filesSample.length > remainingSpace
407
+ ? filesSample.substring(0, remainingSpace) + '...\n\n[Use get_code_map_section to see complete file listing]'
408
+ : filesSample;
409
+ return overview + '\n\n' + truncatedFiles;
410
+ }
411
+ return overview.substring(0, maxLength - 50) + '...\n\n[Use get_code_map_section for complete overview]';
412
+ }
413
+ /**
414
+ * Format individual sections
415
+ */
416
+ formatOverviewSection(stats, documentation) {
417
+ return `šŸ“– CODEBASE OVERVIEW\n\nšŸŽÆ STRUCTURE\nFiles: ${stats.totalFiles} | Functions: ${stats.totalFunctions} | Components: ${stats.totalComponents}\nAvg Complexity: ${stats.averageComplexity.toFixed(1)} | High Complexity: ${stats.highComplexityCount} functions\n${documentation ? `Documentation Coverage: ${Math.round(documentation.coverageScore)}%` : ''}\nLast indexed: ${stats.lastIndexed ? this.formatTimeAgo(stats.lastIndexed) : 'never'}\n`;
418
+ }
419
+ formatFilesSection(fileGroups, options) {
420
+ // Use existing formatAsText logic but for files section only
421
+ const result = [];
422
+ result.push('šŸ“ FILES & FUNCTIONS\n');
423
+ for (const group of fileGroups) {
424
+ result.push(`šŸ“ ${group.directory}/`);
425
+ result.push(`ā”œā”€ā”€ Functions: ${group.stats.functionCount} | Components: ${group.stats.componentCount}`);
426
+ result.push(`ā”œā”€ā”€ Avg Complexity: ${group.stats.averageComplexity.toFixed(1)} | Documentation: ${Math.round(group.stats.documentationScore)}%`);
427
+ result.push('│');
428
+ // Show first few files in detail, then summarize
429
+ const filesToShow = group.files.slice(0, 5);
430
+ for (const file of filesToShow) {
431
+ result.push(`│ šŸ“„ ${file.relativePath} [Lines: ${file.lineCount}]`);
432
+ // Show first few functions
433
+ const functionsToShow = file.functions.slice(0, 3);
434
+ for (const func of functionsToShow) {
435
+ result.push(`│ │ └── šŸ”§ ${func.name}()`);
436
+ if (func.purpose) {
437
+ result.push(`│ │ └── "${func.purpose}"`);
438
+ }
439
+ }
440
+ if (file.functions.length > 3) {
441
+ result.push(`│ │ └── ... ${file.functions.length - 3} more functions`);
442
+ }
443
+ if (file.unusedImports.length > 0) {
444
+ result.push(`│ │ āš ļø Unused imports: ${file.unusedImports.slice(0, 3).join(', ')}${file.unusedImports.length > 3 ? `, +${file.unusedImports.length - 3} more` : ''}`);
445
+ }
446
+ result.push('│');
447
+ }
448
+ if (group.files.length > 5) {
449
+ result.push(`│ └── ... ${group.files.length - 5} more files`);
450
+ }
451
+ result.push('');
452
+ }
453
+ return result.join('\n');
454
+ }
455
+ formatDependenciesSection(dependencies) {
456
+ const result = [];
457
+ result.push('šŸ”— DEPENDENCIES\n');
458
+ const topDeps = dependencies.slice(0, 10);
459
+ for (const dep of topDeps) {
460
+ result.push(`ā”œā”€ā”€ ${dep.name} → ${dep.usageCount} functions`);
461
+ if (dep.unusedInFiles.length > 0) {
462
+ const files = dep.unusedInFiles.slice(0, 3);
463
+ result.push(`│ └── āš ļø Unused in: ${files.join(', ')}${dep.unusedInFiles.length > 3 ? `, +${dep.unusedInFiles.length - 3} more` : ''}`);
464
+ }
465
+ }
466
+ if (dependencies.length > 10) {
467
+ result.push(`└── ... ${dependencies.length - 10} more dependencies`);
468
+ }
469
+ return result.join('\n');
470
+ }
471
+ formatDocumentationSection(documentation) {
472
+ const result = [];
473
+ result.push('šŸ“ DOCUMENTATION QUALITY\n');
474
+ result.push(`ā”œā”€ā”€ Functions with JSDoc: ${documentation.documentedFunctions}/${documentation.totalFunctions} (${Math.round((documentation.documentedFunctions / documentation.totalFunctions) * 100)}%)`);
475
+ result.push(`ā”œā”€ā”€ Components documented: ${documentation.documentedComponents}/${documentation.totalComponents} (${Math.round((documentation.documentedComponents / documentation.totalComponents) * 100)}%)`);
476
+ result.push(`ā”œā”€ā”€ Files with purpose: ${documentation.filesWithPurpose}/${documentation.totalFiles} (${Math.round((documentation.filesWithPurpose / documentation.totalFiles) * 100)}%)`);
477
+ if (documentation.wellDocumentedFiles.length > 0) {
478
+ result.push(`└── Well documented: ${documentation.wellDocumentedFiles.slice(0, 3).join(', ')}`);
479
+ }
480
+ return result.join('\n');
481
+ }
482
+ }
483
+ //# sourceMappingURL=CodeMapGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeMapGenerator.js","sourceRoot":"","sources":["../../src/services/CodeMapGenerator.ts"],"names":[],"mappings":"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"}