Skip to main content
Glama
MIT License
27,120
19,787
  • Linux
  • Apple
outputStyleDecorate.ts•7.49 kB
import type { RepomixConfigMerged } from '../../config/configSchema.js'; interface ContentInfo { selection: { isEntireCodebase: boolean; include?: boolean; ignore?: boolean; gitignore?: boolean; defaultIgnore?: boolean; }; processing: { commentsRemoved: boolean; emptyLinesRemoved: boolean; securityCheckEnabled: boolean; showLineNumbers: boolean; parsableStyle: boolean; compressed: boolean; truncatedBase64: boolean; }; sorting: { gitChanges: boolean; }; } export const analyzeContent = (config: RepomixConfigMerged): ContentInfo => { return { selection: { isEntireCodebase: !config.include.length && !config.ignore.customPatterns.length, include: config.include.length > 0, ignore: config.ignore.customPatterns.length > 0, gitignore: config.ignore.useGitignore, defaultIgnore: config.ignore.useDefaultPatterns, }, processing: { commentsRemoved: config.output.removeComments, emptyLinesRemoved: config.output.removeEmptyLines, securityCheckEnabled: config.security.enableSecurityCheck, showLineNumbers: config.output.showLineNumbers, parsableStyle: config.output.parsableStyle, compressed: config.output.compress, truncatedBase64: config.output.truncateBase64, }, sorting: { gitChanges: config.output.git?.sortByChanges ?? false, }, }; }; export const generateHeader = (config: RepomixConfigMerged, _generationDate: string): string => { const info = analyzeContent(config); // Generate selection description let description: string; if (info.selection.isEntireCodebase) { description = 'This file is a merged representation of the entire codebase'; } else { const parts = []; if (info.selection.include) { parts.push('specifically included files'); } if (info.selection.ignore) { parts.push('files not matching ignore patterns'); } description = `This file is a merged representation of a subset of the codebase, containing ${parts.join(' and ')}`; } // Add processing information const processingNotes = []; if (info.processing.commentsRemoved) { processingNotes.push('comments have been removed'); } if (info.processing.emptyLinesRemoved) { processingNotes.push('empty lines have been removed'); } if (info.processing.showLineNumbers) { processingNotes.push('line numbers have been added'); } if (info.processing.parsableStyle) { processingNotes.push(`content has been formatted for parsing in ${config.output.style} style`); } if (info.processing.compressed) { processingNotes.push('content has been compressed (code blocks are separated by ā‹®---- delimiter)'); } if (!info.processing.securityCheckEnabled) { processingNotes.push('security check has been disabled'); } const processingInfo = processingNotes.length > 0 ? `The content has been processed where ${processingNotes.join(', ')}.` : ''; return `${description}, combined into a single document by Repomix.\n${processingInfo}`.trim(); }; export const generateSummaryPurpose = (config: RepomixConfigMerged): string => { const info = analyzeContent(config); const contentDescription = info.selection.isEntireCodebase ? "the entire repository's contents" : "a subset of the repository's contents that is considered the most important context"; return ` This file contains a packed representation of ${contentDescription}. It is designed to be easily consumable by AI systems for analysis, code review, or other automated processes. `.trim(); }; export const generateSummaryFileFormat = (): string => { return ` The content is organized as follows: 1. This summary section 2. Repository information 3. Directory structure 4. Repository files (if enabled) `.trim(); }; export const generateSummaryFileFormatJson = (): string => { return ` The content is organized as follows: 1. This summary section 2. Repository information 3. Directory structure 4. Repository files, each consisting of: - File path as a key - Full contents of the file as the value `.trim(); }; export const generateSummaryUsageGuidelines = (config: RepomixConfigMerged, repositoryInstruction: string): string => { return ` - This file should be treated as read-only. Any changes should be made to the original repository files, not this packed version. - When processing this file, use the file path to distinguish between different files in the repository. - Be aware that this file may contain sensitive information. Handle it with the same level of security as you would the original repository. ${config.output.headerText ? '- Pay special attention to the Repository Description. These contain important context and guidelines specific to this project.' : ''} ${repositoryInstruction ? '- Pay special attention to the Repository Instruction. These contain important context and guidelines specific to this project.' : ''} `.trim(); }; export const generateSummaryNotes = (config: RepomixConfigMerged): string => { const info = analyzeContent(config); const notes = [ "- Some files may have been excluded based on .gitignore rules and Repomix's configuration", '- Binary files are not included in this packed representation. Please refer to the Repository Structure section for a complete list of file paths, including binary files', ]; // File selection notes if (info.selection.include) { notes.push(`- Only files matching these patterns are included: ${config.include.join(', ')}`); } if (info.selection.ignore) { notes.push(`- Files matching these patterns are excluded: ${config.ignore.customPatterns.join(', ')}`); } if (info.selection.gitignore) { notes.push('- Files matching patterns in .gitignore are excluded'); } if (info.selection.defaultIgnore) { notes.push('- Files matching default ignore patterns are excluded'); } // Processing notes if (info.processing.commentsRemoved) { notes.push('- Code comments have been removed from supported file types'); } if (info.processing.emptyLinesRemoved) { notes.push('- Empty lines have been removed from all files'); } if (info.processing.showLineNumbers) { notes.push('- Line numbers have been added to the beginning of each line'); } if (info.processing.parsableStyle) { notes.push(`- Content has been formatted for parsing in ${config.output.style} style`); } if (info.processing.compressed) { notes.push('- Content has been compressed - code blocks are separated by ā‹®---- delimiter'); } if (info.processing.truncatedBase64) { notes.push( '- Long base64 data strings (e.g., data:image/png;base64,...) have been truncated to reduce token count', ); } if (!info.processing.securityCheckEnabled) { notes.push('- Security check has been disabled - content may contain sensitive information'); } // Sorting notes if (info.sorting.gitChanges) { notes.push('- Files are sorted by Git change count (files with more changes are at the bottom)'); } // Git diffs notes if (config.output.git?.includeDiffs) { notes.push('- Git diffs from the worktree and staged changes are included'); } // Git logs notes if (config.output.git?.includeLogs) { const logCount = config.output.git?.includeLogsCount || 50; notes.push(`- Git logs (${logCount} commits) are included to show development patterns`); } return notes.join('\n'); };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yamadashy/repomix'

If you have feedback or need assistance with the MCP directory API, please join our Discord server