Created
December 19, 2024 16:53
-
-
Save kfrancis/bbb57d85306246b72130f4a62ae7b946 to your computer and use it in GitHub Desktop.
Repomix Browser Extension
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"manifest_version": 3, | |
"name": "Repomix Helper", | |
"version": "1.0", | |
"description": "Generate repomix output from GitHub repositories with advanced configuration", | |
"permissions": [ | |
"activeTab", | |
"scripting", | |
"storage" | |
], | |
"action": { | |
"default_popup": "popup.html" | |
}, | |
"host_permissions": [ | |
"https://github.com/*" | |
], | |
"options_page": "options.html" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<style> | |
body { | |
padding: 20px; | |
max-width: 800px; | |
margin: 0 auto; | |
} | |
.section { | |
margin-bottom: 20px; | |
} | |
.input-group { | |
margin-bottom: 15px; | |
} | |
label { | |
display: block; | |
margin-bottom: 5px; | |
} | |
textarea { | |
width: 100%; | |
height: 60px; | |
} | |
.checkbox-group { | |
margin: 5px 0; | |
} | |
</style> | |
</head> | |
<body> | |
<h2>Repomix Helper Settings</h2> | |
<div class="section"> | |
<h3>Output Settings</h3> | |
<div class="input-group"> | |
<label>Output Style:</label> | |
<select id="outputStyle"> | |
<option value="plain">Plain Text</option> | |
<option value="xml">XML</option> | |
<option value="markdown">Markdown</option> | |
</select> | |
</div> | |
<div class="checkbox-group"> | |
<input type="checkbox" id="removeComments"> | |
<label for="removeComments">Remove Comments</label> | |
</div> | |
<div class="checkbox-group"> | |
<input type="checkbox" id="removeEmptyLines"> | |
<label for="removeEmptyLines">Remove Empty Lines</label> | |
</div> | |
<div class="checkbox-group"> | |
<input type="checkbox" id="showLineNumbers"> | |
<label for="showLineNumbers">Show Line Numbers</label> | |
</div> | |
</div> | |
<div class="section"> | |
<h3>File Patterns</h3> | |
<div class="input-group"> | |
<label>Default Include Patterns:</label> | |
<textarea id="includePatterns">src/**/*.ts,**/*.md</textarea> | |
</div> | |
<div class="input-group"> | |
<label>Default Ignore Patterns:</label> | |
<textarea id="ignorePatterns">**/*.log,tmp/</textarea> | |
</div> | |
</div> | |
<div class="section"> | |
<h3>Security Settings</h3> | |
<div class="checkbox-group"> | |
<input type="checkbox" id="enableSecurityCheck" checked> | |
<label for="enableSecurityCheck">Enable Security Check</label> | |
</div> | |
</div> | |
<button id="save">Save Settings</button> | |
<div id="status" style="margin-top: 10px;"></div> | |
<script src="options.js"></script> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
document.addEventListener('DOMContentLoaded', function() { | |
// Load saved settings | |
chrome.storage.sync.get({ | |
outputStyle: 'plain', | |
removeComments: false, | |
removeEmptyLines: false, | |
showLineNumbers: false, | |
includePatterns: 'src/**/*.ts,**/*.md', | |
ignorePatterns: '**/*.log,tmp/', | |
enableSecurityCheck: true | |
}, function(items) { | |
document.getElementById('outputStyle').value = items.outputStyle; | |
document.getElementById('removeComments').checked = items.removeComments; | |
document.getElementById('removeEmptyLines').checked = items.removeEmptyLines; | |
document.getElementById('showLineNumbers').checked = items.showLineNumbers; | |
document.getElementById('includePatterns').value = items.includePatterns; | |
document.getElementById('ignorePatterns').value = items.ignorePatterns; | |
document.getElementById('enableSecurityCheck').checked = items.enableSecurityCheck; | |
}); | |
// Save settings | |
document.getElementById('save').addEventListener('click', function() { | |
const settings = { | |
outputStyle: document.getElementById('outputStyle').value, | |
removeComments: document.getElementById('removeComments').checked, | |
removeEmptyLines: document.getElementById('removeEmptyLines').checked, | |
showLineNumbers: document.getElementById('showLineNumbers').checked, | |
includePatterns: document.getElementById('includePatterns').value, | |
ignorePatterns: document.getElementById('ignorePatterns').value, | |
enableSecurityCheck: document.getElementById('enableSecurityCheck').checked | |
}; | |
chrome.storage.sync.set(settings, function() { | |
const status = document.getElementById('status'); | |
status.textContent = 'Settings saved!'; | |
setTimeout(function() { | |
status.textContent = ''; | |
}, 2000); | |
}); | |
}); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<style> | |
body { | |
width: 400px; | |
padding: 15px; | |
} | |
.input-group { | |
margin-bottom: 15px; | |
} | |
.section { | |
margin-bottom: 20px; | |
} | |
textarea { | |
width: 100%; | |
height: 60px; | |
} | |
.checkbox-group { | |
margin: 5px 0; | |
} | |
</style> | |
</head> | |
<body> | |
<div class="section"> | |
<h3>Generate Repomix Command</h3> | |
<div class="input-group"> | |
<label>Include Patterns:</label> | |
<textarea id="includePatterns"></textarea> | |
</div> | |
<div class="input-group"> | |
<label>Ignore Patterns:</label> | |
<textarea id="ignorePatterns"></textarea> | |
</div> | |
<div class="checkbox-group"> | |
<input type="checkbox" id="useStoredSettings" checked> | |
<label for="useStoredSettings">Use Saved Settings</label> | |
</div> | |
<button id="generate">Generate Command</button> | |
<button id="openSettings" style="margin-left: 10px;">Settings</button> | |
</div> | |
<div id="output" style="margin-top: 15px;"></div> | |
<script src="popup.js"></script> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// popup.js | |
document.addEventListener('DOMContentLoaded', function() { | |
const generateButton = document.getElementById('generate'); | |
const outputDiv = document.getElementById('output'); | |
const useStoredSettings = document.getElementById('useStoredSettings'); | |
// Load saved patterns into textareas | |
chrome.storage.sync.get({ | |
includePatterns: 'src/**/*.ts,**/*.md', | |
ignorePatterns: '**/*.log,tmp/' | |
}, function(items) { | |
document.getElementById('includePatterns').value = items.includePatterns; | |
document.getElementById('ignorePatterns').value = items.ignorePatterns; | |
}); | |
document.getElementById('openSettings').addEventListener('click', function() { | |
chrome.runtime.openOptionsPage(); | |
}); | |
function getRepoUrlFromGitHub(url) { | |
try { | |
const githubUrl = new URL(url); | |
if (!githubUrl.hostname.includes('github.com')) { | |
return null; | |
} | |
// Split the pathname and remove empty strings | |
const pathParts = githubUrl.pathname.split('/').filter(part => part); | |
// We need at least username/repo | |
if (pathParts.length < 2) { | |
return null; | |
} | |
// Just take the username and repo name | |
const [username, repo] = pathParts; | |
return `https://github.com/${username}/${repo}`; | |
} catch (e) { | |
console.error('Error parsing GitHub URL:', e); | |
return null; | |
} | |
} | |
generateButton.addEventListener('click', async () => { | |
// Get the current tab | |
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); | |
const repoUrl = getRepoUrlFromGitHub(tab.url); | |
if (!repoUrl) { | |
outputDiv.textContent = 'Please navigate to a GitHub repository page'; | |
return; | |
} | |
const includePatterns = document.getElementById('includePatterns').value; | |
const ignorePatterns = document.getElementById('ignorePatterns').value; | |
let command = `npx repomix --remote ${repoUrl}`; | |
if (useStoredSettings.checked) { | |
// Get stored settings | |
chrome.storage.sync.get({ | |
outputStyle: 'plain', | |
removeComments: false, | |
removeEmptyLines: false, | |
showLineNumbers: false, | |
enableSecurityCheck: true | |
}, function(settings) { | |
if (settings.outputStyle !== 'plain') { | |
command += ` --style ${settings.outputStyle}`; | |
} | |
if (settings.removeComments) { | |
command += ' --remove-comments'; | |
} | |
if (settings.removeEmptyLines) { | |
command += ' --remove-empty-lines'; | |
} | |
if (settings.showLineNumbers) { | |
command += ' --output-show-line-numbers'; | |
} | |
if (!settings.enableSecurityCheck) { | |
command += ' --no-security-check'; | |
} | |
if (includePatterns) { | |
command += ` --include "${includePatterns}"`; | |
} | |
if (ignorePatterns) { | |
command += ` --ignore "${ignorePatterns}"`; | |
} | |
displayOutput(command); | |
}); | |
} else { | |
if (includePatterns) { | |
command += ` --include "${includePatterns}"`; | |
} | |
if (ignorePatterns) { | |
command += ` --ignore "${ignorePatterns}"`; | |
} | |
displayOutput(command); | |
} | |
}); | |
function displayOutput(command) { | |
outputDiv.innerHTML = ` | |
<div style="margin-bottom: 10px">Command generated:</div> | |
<textarea readonly style="width: 100%; height: 80px">${command}</textarea> | |
<button id="copy" style="margin-top: 5px">Copy to Clipboard</button> | |
`; | |
document.getElementById('copy').addEventListener('click', () => { | |
navigator.clipboard.writeText(command); | |
const copyBtn = document.getElementById('copy'); | |
copyBtn.textContent = 'Copied!'; | |
setTimeout(() => { | |
copyBtn.textContent = 'Copy to Clipboard'; | |
}, 2000); | |
}); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Well, @krigeta https://github.com/nikahmadz/4046cf69caf4ddc68ea5e293e6afdc0e is not a repo url. You have to be visiting a repo and then use the extension. I didn't really play around with it too much, since the Repomix author wanted to take it and roll with it, but it worked well enough for the work I was trying to do (and made it simple). None of the config options do anything, just FYI, more just Claude spitting out options and a UI but no way of using them in that implementation.