# Contributing Issues and pull requests are welcome. ## Development The plugin deliberately has no build step: - `client.js` is the browser bundle. It is a plain CJS factory registered through `window.__ModuleLoader__.load`. - `index.js` is an empty host half; it only gives the bundle a Loader entry. - `cordis.patch.yml` inserts the `github-mirror` row. After editing `client.js`, the DSH client module system normally reloads it by file revision. Refresh the page when the panel does not update. ## Checks ```bash node --check client.js node -e "JSON.parse(require('fs').readFileSync('package.json','utf8'))" node -e "JSON.parse(require('fs').readFileSync('package.json','utf8')).name === 'dsh-github-mirror' || process.exit(1)" ``` ## Manual test checklist 1. Install the plugin into a DSH profile and open the sidebar entry. 2. Enter a public GitHub username and confirm the repository list renders. 3. Switch **Browse via** between `bgithub.xyz` and **GitHub official**; confirm row links change. 4. Copy a clone command and confirm it uses the selected transfer route. 5. Open the settings dialog, save a username, and confirm the list refreshes. 6. Optional: add a read-only token and confirm private repositories appear and the token is not sent to a mirror. 7. Point the browse route at an unreachable mirror and confirm the fallback banner appears. ## Code notes - Keep the panel usable at 360px width. - Do not send `Authorization` headers to mirror or proxy hosts. - Keep all user-facing strings in both `zh` and `en` dictionaries in `client.js`.