smart-repomix
Version:
AI-powered wrapper for repomix that intelligently filters unnecessary files
264 lines (206 loc) • 6.42 kB
Markdown
# Advanced Usage
## Configuration in repomix.config.json
Smart Repomix can be configured directly in your `repomix.config.json` file:
```json
{
// Your existing repomix configuration
"output": {
"filePath": "output.xml",
"style": "xml"
},
"include": ["src/**/*"],
// Smart Repomix specific configuration
"smartRepomix": {
// API key (alternative to env var or CLI option)
"apiKey": "your-gemini-api-key",
// Custom prompt template with placeholders
"promptTemplate": "You are analyzing a codebase. User wants to: {{instruction}}\n\nCodebase:\n{{codebase}}\n\nReturn only comma-separated glob patterns to ignore."
}
}
```
### Prompt Template Customization
The prompt template supports two placeholders:
- `{{instruction}}`: Replaced with the user's -I instruction
- `{{codebase}}`: Replaced with the XML codebase content
Example custom prompts:
```json
{
"smartRepomix": {
// For focusing on security
"promptTemplate": "Security audit request: {{instruction}}\n\nAnalyze this codebase and identify files to exclude:\n{{codebase}}\n\nReturn glob patterns that match files NOT relevant for security analysis."
}
}
```
```json
{
"smartRepomix": {
// For documentation purposes
"promptTemplate": "Documentation task: {{instruction}}\n\nFrom this codebase:\n{{codebase}}\n\nIdentify and return glob patterns for files that are not needed for documentation."
}
}
```
## Custom Ignore Instructions
### For Different Project Types
**React/Next.js Projects:**
```bash
npx smart-repomix -I "ignore node_modules, build outputs, test files, .next directory, and coverage reports"
```
**Python Projects:**
```bash
npx smart-repomix -I "ignore __pycache__, .pytest_cache, venv, dist, *.pyc files, and test directories"
```
**Monorepo:**
```bash
npx smart-repomix -I "ignore all node_modules, build directories, test files, but keep configuration files"
```
### Purpose-Specific Filtering
**For Code Review:**
```bash
npx smart-repomix -I "keep only source code, ignore tests, docs, build files, and dependencies"
```
**For Documentation:**
```bash
npx smart-repomix -I "ignore everything except markdown files, source code comments, and API definitions"
```
**For Security Audit:**
```bash
npx smart-repomix -I "ignore test files and documentation, focus on configuration and source files"
```
## Using Different Models
```bash
# Fast mode (default)
npx smart-repomix -I "..." -m gemini-2.5-flash
# More accurate for large codebases
npx smart-repomix -I "..." -m gemini-2.5-pro
# Latest model
npx smart-repomix -I "..." -m gemini-2.5-pro-latest
```
## Scripting and Automation
### Bash Script Example
```bash
#!/bin/bash
# smart-filter.sh
export GEMINI_API_KEY="your-key"
INSTRUCTION="ignore test files, build artifacts, and dependencies"
OUTPUT="filtered-$(date +%Y%m%d-%H%M%S).xml"
npx smart-repomix -I "$INSTRUCTION" -o "$OUTPUT" -v
echo "Filtered codebase saved to: $OUTPUT"
```
### Node.js Automation
```javascript
// analyze-multiple-repos.js
import smartRepomix from 'smart-repomix';
import { readdirSync } from 'fs';
import { join } from 'path';
const repos = ['repo1', 'repo2', 'repo3'];
for (const repo of repos) {
process.chdir(join('/path/to', repo));
await smartRepomix({
instruction: 'ignore test files and build artifacts',
outputPath: `${repo}-filtered.xml`,
apiKey: process.env.GEMINI_API_KEY,
verbose: true
});
}
```
### CI/CD Integration
```yaml
# .github/workflows/analyze.yml
name: Analyze Codebase
on:
push:
branches: [main]
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout
- name: Setup Node
uses: actions/setup-node
with:
node-version: '18'
- name: Run Smart Repomix
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
npx smart-repomix -I "ignore test files and CI/CD configs" -o codebase.xml
- name: Upload Artifact
uses: actions/upload-artifact
with:
name: codebase-analysis
path: codebase.xml
```
## Performance Tips
1. **Use specific instructions**: More specific instructions lead to better results
```bash
# Good
npx smart-repomix -I "ignore test files (*.test.js, *.spec.js), build directories, and node_modules"
# Less effective
npx smart-repomix -I "ignore unnecessary files"
```
2. **Model selection**:
- Use `gemini-2.5-flash` for most cases (fast and effective)
- Use `gemini-2.5-pro` for very large codebases or complex filtering needs
3. **Dry run first**: Always test with `--dry-run` to see what will be ignored
```bash
npx smart-repomix -I "..." --dry-run
```
## Debugging
### Verbose Mode
```bash
# See all operations
npx smart-repomix -I "..." -v
# Check what repomix commands are being run
npx smart-repomix -I "..." -v 2>&1 | grep "Running:"
```
### Manual Testing
```bash
# See what the initial scan produces
npx repomix --output test-full.xml
# Test ignore patterns manually
npx repomix --output test-filtered.xml --ignore "node_modules/**,*.test.js"
```
### API Key Issues
```bash
# Test API key
export GEMINI_API_KEY="your-key"
curl -X POST "https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents":[{"parts":[{"text":"Hello"}]}]}'
```
## Custom Integration
### As a Library
```javascript
import smartRepomix from 'smart-repomix';
import ora from 'ora';
async function analyzeCodebase(projectPath, instruction) {
const spinner = ora('Analyzing codebase...').start();
try {
process.chdir(projectPath);
const ignorePatterns = await smartRepomix({
instruction,
outputPath: 'analysis.xml',
apiKey: process.env.GEMINI_API_KEY,
model: 'gemini-2.5-pro',
verbose: false,
spinner
});
spinner.succeed('Analysis complete');
return ignorePatterns;
} catch (error) {
spinner.fail('Analysis failed');
throw error;
}
}
```
### Custom Prompts
You can modify the source code to customize the AI prompt for specific needs:
```javascript
// In index.js, modify the prompt template
const prompt = `
You are analyzing a codebase for a ${projectType} project.
Additional context: ${context}
User instruction: "${instruction}"
...
`;
```