dsh-github-radar
goodboys155/dsh-github-radar
右侧栏 GitHub 面板,四个升起中的仓库榜:最近 2 天新建、最近 7 天、最近 30 天,以及两万星以上且近期仍在推送的老牌项目;前三个按星标增速(星/天)而非星标总数排序,让刚起量的项目排在攒了很久的项目前面。每行显示仓库名、仓库自带描述、语言、每日涨星速度与最多两个话题,整行链接到仓库页。另有搜索框直接查 GitHub Search API,带防抖并识别输入法组词——中文或日文拼音打字过程中只发一次请求,不是每敲一个字母发一次。数据取自公开的 GitHub Search API,匿名访问:不需要 token、不需要登录、不读账号,也不访问其它任何域名。四个榜缓存 30 分钟,搜索结果缓存 5 分钟;请求优先直连,直连失败才回退到确实在监听的本机代理端口。
安装
dsh plugin --profile web add github:goodboys155/dsh-github-radarREADME
GitHub Radar · DeepSeek Harness 插件
中文 | English
右侧栏面板,打开就显示 GitHub 上真正在起量的项目:四个榜单按星标增速排序,外加关键词搜索。点一行直达仓库。

不需要 GitHub 账号
本插件从不要求你登录。它以匿名身份读取 GitHub 公开的 Search API —— 不需要 token、不需要 OAuth、不读任何账号或凭据,也不会读取、保存或上传任何与你 GitHub 身份有关的东西。
它只访问 api.github.com,别的一概不碰,没有遥测。
没有代理、网络本身能直连 GitHub 时,开箱即用。连不上时会发生什么,见网络行为。
四个榜单
| 榜单 | 查询条件 | 排序方式 |
|---|---|---|
| 今日 | 2 天内新建,≥3 星 | 每天涨星数 |
| 本周 | 7 天内新建,≥20 星 | 每天涨星数 |
| 本月 | 30 天内新建,≥100 星 | 每天涨星数 |
| 常青 | ≥2 万星,30 天内有推送 | 星标总数 |
为什么按「星/天」而不是总星数。 三天涨 2000 星的项目,比半年涨 3000 星的更值得看,但后者在"按总星数排序"里永远压在前面。所以前三个榜先拉一批候选,再在本地按 星数 ÷ 建仓天数 重排;每行在语言后面直接显示这个速率,例如 +460/天。「常青」榜衡量的是体量,总星数才是对的指标,保持不变。
搜索。 输入关键词即直查 GitHub,匹配规则就是 GitHub 自己的:名字、描述、README、话题全都参与,所以 rust 和 中文 都能搜。结果按星数排序。空格分隔的多个词由 GitHub 做 AND 组合,这就是 awesome list 只有 2.3 万条结果、而不是 200 万条的原因。
两个实际体验上的细节:
- 防抖 500 毫秒,不会每敲一个字母就发一次请求。
- 识别输入法组词:中日韩输入法还在组词(拼音没上屏)时不发请求,等
compositionend才发。所以打「中文」是 1 次请求,不是每个拼音字母 1 次。
安装
dsh plugin --profile web add github:goodboys155/dsh-github-radar
装完重启 DSH。右侧栏会出现「雷达」标签页。
必须重启:DSH 只在启动时扫描客户端插件,改磁盘文件不会热重载浏览器那一半。
网络行为
出站请求优先直连,用 Node 自带的全局 fetch(undici)—— 它维持连接池、复用 TLS 会话,比每次调用现搓 https.request 快一个数量级。
直连失败时,才会去探测下面这些本机代理端口,并且只试真正在监听的那些:
127.0.0.1:10808 (v2rayN 默认)
127.0.0.1:10809
127.0.0.1:7890 (Clash 默认)
127.0.0.1:7897
127.0.0.1:1080
每个端口探测只花几毫秒。直连失败且没有代理在听时,大约 6 秒就报错 —— 而不是拿五个端口各等 15 秒。没有代理的机器是正常且受支持的配置,只是它会快速报失败,而不是一直挂着。
第一个响应成功的代理会被记住,本次进程内一直用它。
数据源与缓存
GitHub Search REST API 的 repositories 端点,匿名调用。
匿名搜索的限额是每分钟 10 次,插件的用量远低于这个数:
- 四个榜单:内存 + 磁盘缓存 30 分钟(
$DSH_HOME/github-radar/trending-<period>.json) - 某个搜索关键词:内存缓存 5 分钟
刷新按钮会强制重新拉取。GitHub 不可达时,最后一次成功的榜单会带「离线缓存」标记继续渲染,而不是变成一个空面板。
架构
index.js host —— GET /api/github-radar/trending?period=day|week|month|all
GET /api/github-radar/search?q=<keywords>
client.js client —— 右侧栏标签页:四档切换、搜索框、列表
cordis.patch.yml bundle patch
两个路由都只监听回环地址,且只接受 GET。把请求放在浏览器里发会撞 CORS,还会把代理配置暴露给页面 —— 所以出站请求放在宿主端。
权限
声明的能力只有网络:
- 除
$DSH_HOME/github-radar/(缓存目录)外不写文件 - 不起 shell、不起子进程、不读环境变量
- 不碰凭据、不碰 token、不碰 GitHub 账号
环境要求
- DeepSeek Harness 0.2.0 及以后
- Windows / macOS / Linux(宿主端只用 Node 内置模块)
已知限制
- 每个榜单 30 条,搜索 30 条,没有"加载更多"。
- 描述按 GitHub 原样显示,以英文为主,不做翻译。
- 「今日」榜要求仓库 2 天内既新建又已经涨星,冷清的时候会比较薄。
- 搜索结果按星数排序,所以一个精确匹配但星数很少的仓库,可能排在热门的近似匹配下面 —— 这是 GitHub 的排序,不是过滤。
- 星数是某一时刻的快照,最长可能已缓存 30 分钟。
- 反复点刷新可能用完每分钟 10 次的匿名额度,GitHub 会返回 403 直到窗口重置;正常情况下缓存会挡住这种用法。
许可证
MIT —— 见 LICENSE。