nonmean/dhs-plugin-explorer ↗★ 0
dsh-plugin-explorer
Browse GitHub repos tagged dsh-plugin: names, readmes, and statistics, with a Sync button and live search.
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗dsh-plugin-explorer
A local tool for the DeepSeek Harness web GUI that browses the GitHub
dsh-plugin topic: every repo's
name, README, and statistics (stars, forks, open issues, language,
license, last update, topics), with a Sync button to refresh the data and
an in-memory search over the cached snapshot.
It is a client plugin
(dsh.client dual-face package) that mounts one entry into the sidebar's
footer action list (sidebar.footer.action): a Plugin Explorer trigger
beside Settings that opens the tool's modal.
Using the tool
- Open the web GUI (
http://127.0.0.1:3080) and refresh the page. - Click Plugin Explorer in the sidebar footer (bottom-left, next to Settings).
- Press Sync to fetch the topic's repos from the GitHub search API (sorted by stars, up to 1000 repos — GitHub's search cap).
- Search filters the cached snapshot by repo name, description, topics, language, license, and README text (readmes the tool already fetched).
- Expand a repo's README to load and render it (fetched lazily on first expand, then cached).
Data persists in localStorage under dsh-plugin-explorer:repos:v1 and
dsh-plugin-explorer:readmes:v1, so the list survives restarts and works
offline. The readme cache is size-bounded (oldest entries evicted).
GitHub API notes
- Unauthenticated REST rate limits apply (60 req/h core, 10 req/min search, per IP). One full sync costs up to 10 search requests; READMEs cost one request each and are cached. Rate-limit hits abort gracefully with a message and keep the previous data (a partial sync is preserved).
- The tool talks to
api.github.comstraight from the browser (CORS is permissive); no token is required for public data. If you hit limits often, set aGITHUB_TOKEN? No — the browser cannot read your env; the tool is intentionally anonymous.
Architecture
src/
index.ts node half: empty apply() (mounts the loader row)
client/
index.ts browser half: inject ['slots'], slots.inject(...)
into 'sidebar.footer.action', register RepoExplorer
RepoExplorer.tsx trigger + modal: sync, search, list, README expand
RepoExplorer.module.css
github.ts GitHub REST client + localStorage cache + helpers