-
-
Save kfrancis/bbb57d85306246b72130f4a62ae7b946 to your computer and use it in GitHub Desktop.
| { | |
| "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" | |
| } |
| <!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> |
| 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); | |
| }); | |
| }); | |
| }); |
| <!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> |
| // 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); | |
| }); | |
| } | |
| }); |
this seems amazing plugin but getting this error, Please Help:
Getting this error:
npx repomix --remote https://github.com/nikahmadz/4046cf69caf4ddc68ea5e293e6afdc0e --include "src//*.ts,/.md" --ignore "**/.log,tmp/"
npm error code ERR_INVALID_URL
npm error Invalid URL
npm error A complete log of this run can be found in: C:\Users\user123_789\AppData\Local\npm-cache_logs\2025-01-05T08_00_23_247Z-debug-0.log
Log:
0 verbose cli C:\Program Files\nodejs\node.exe C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\bin\npm-cli.js
1 info using [email protected]
2 info using [email protected]
3 silly config load:file:C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\npmrc
4 silly config load:file:\wsl.localhost\Ubuntu\home\user123_789.npmrc
5 silly config load:file:C:\Users\user123_789.npmrc
6 silly config load:file:C:\Users\user123_789\AppData\Roaming\npm\etc\npmrc
7 verbose title npm exec repomix --remote https://github.com/nikahmadz/4046cf69caf4ddc68ea5e293e6afdc0e
8 verbose argv "exec" "--" "repomix" "--remote" "https://github.com/nikahmadz/4046cf69caf4ddc68ea5e293e6afdc0e"
9 verbose logfile logs-max:10 dir:C:\Users\user123_789\AppData\Local\npm-cache_logs\2025-01-05T08_00_23_247Z-
10 verbose logfile C:\Users\user123_789\AppData\Local\npm-cache_logs\2025-01-05T08_00_23_247Z-debug-0.log
11 silly logfile start cleaning logs, removing 3 files
12 verbose stack TypeError: Invalid URL
12 verbose stack at new URL (node:internal/url:816:29)
12 verbose stack at fromFile (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\node_modules\npm-package-arg\lib\npa.js:263:15)
12 verbose stack at resolve (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\node_modules\npm-package-arg\lib\npa.js:71:12)
12 verbose stack at npa (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\node_modules\npm-package-arg\lib\npa.js:53:10)
12 verbose stack at FetcherBase.get (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\node_modules\pacote\lib\fetcher.js:474:16)
12 verbose stack at Object.manifest (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\node_modules\pacote\lib\index.js:20:29)
12 verbose stack at hasPkgBin (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\node_modules\libnpmexec\lib\index.js:82:10)
12 verbose stack at exec (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\node_modules\libnpmexec\lib\index.js:137:17)
12 verbose stack at Exec.callExec (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\lib\commands\exec.js:79:12)
12 verbose stack at Exec.exec (C:\Users\user123_789\AppData\Roaming\npm\node_modules\npm\lib\commands\exec.js:28:17)
13 error code ERR_INVALID_URL
14 error Invalid URL
15 verbose cwd \wsl.localhost\Ubuntu\home\user123_789
16 verbose os Windows_NT 10.0.26100
17 verbose node v22.11.0
18 verbose npm v10.9.2
19 verbose exit 1
20 verbose code 1
21 error A complete log of this run can be found in: C:\Users\user123_789\AppData\Local\npm-cache_logs\2025-01-05T08_00_23_247Z-debug-0.log
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.
Just creating a little Repomix browser extension. I love using it, just trying to make it easier to use personally.