插件港 DSH Harbor · DeepSeek Harness 社区插件收录站
社区维护的 DeepSeek Harness(DSH)插件目录:浏览、搜索、按分类筛选、
一键复制安装命令。视觉对齐官网(纯黑底、238px 大网格、唯一强调色 #4D6BFE)。
- 不人工审核:提交页粘贴仓库地址 → 实时读 GitHub 元数据 → 立即上架。
- 来源可查:每条都链回 GitHub 公开仓库,展示 Star / 许可证 / 语言 / 最近提交。
- 数据在仓库里:唯一真源是
data/plugins.json,git diff 可读可回滚,不依赖数据库。
快速开始
npm install
npm run dev # http://localhost:3000
生产:
npm run build && npm start
页面与接口
| 路径 | 说明 |
|---|---|
/ |
落地页:Hero + 安装卡、分类 chips、本周精选、最新上架、提交指引、贡献者墙 |
/plugins |
插件库。?q= 搜索、?category= 分类、?sort=stars|updated|added|name 排序、?view=list 列表视图、?page= 分页(全部走 URL,可分享可被收录) |
/plugins/<owner>/<repo> |
插件详情:安装命令、README 渲染、仓库信息、同分类推荐 |
/submit |
提交表单,粘贴仓库地址即时回显 |
/about |
收录规范、数据来源、免责声明 |
/api/plugins |
公开只读 JSON,支持 ?category= ?q= ?limit=(CORS 开放) |
/api/repo?full=owner/repo |
提交页的仓库预检 |
POST /api/submit |
提交入库 |
/badge/<owner>/<repo>.svg |
README 徽章,Star 数随目录同步刷新 |
/rss.xml · /sitemap.xml · /robots.txt |
订阅与 SEO |
目录数据
data/plugins.json 是唯一真源。字段分两类:
- 机器字段(
stars/forks/license/language/pushedAt/openIssues/version) 由npm run sync覆盖写入。 - 编辑字段(
name/nameZh/description/category/tags/featured/author/addedAt/submittedBy)只由人或提交表单提供,sync 永不覆盖。
所以同步脚本可以放心反复运行。
同步命令
npm run sync:dry # 只打印,不写盘
npm run sync # 刷新已有条目 + 按 scripts/curated.ts 补全
npm run sync:discover # 额外扫 GitHub `dsh-plugin` 话题,自动收录新仓库
npm run sync:prune # 顺带移除已归档 / 不存在的仓库
鉴权:优先用 GITHUB_TOKEN 环境变量;没设的话回落到本机 gh auth(GraphQL,
每小时 5000 点,145 个仓库约 4 个请求)。不要在无鉴权的情况下跑 --discover,
搜索接口未认证只有 10 次/分钟。
精选清单
scripts/curated.ts 是人工整理的收录清单:仓库地址 + 中文短名 + 中文描述 + 分类 + 精选排序。
新增一批插件时改这个文件,再跑 npm run sync。
提交是怎么落库的
- 前端把仓库地址发到
POST /api/submit。 - 服务端用
lib/repo-input.ts把各种形态的输入(owner/repo、完整 URL、github:owner/repo、git@github.com:owner/repo.git)归一成owner/repo。 lib/github.ts#checkRepo实时读 GitHub:仓库是否存在、是否归档、Star、许可证、语言、topics。- 校验通过后由
lib/catalog.ts#mutateCatalog原子写入(临时文件 + rename,串行队列防并发覆盖)。 revalidatePath()让首页 / 插件库 / 详情页立刻刷新。
防滥用:同 IP 每小时 5 次提交、表单蜜罐字段、描述长度上限。 重复提交同一个仓库会返回 409 并给出已有条目链接。
部署
需要可写文件系统
提交会把新条目写进 data/plugins.json,所以要么给容器挂一个卷,要么改用「提交开 PR」的变体。
HARBOR_DATA_DIR 可以指定数据目录(默认 ./data)。
docker build -t dsh-harbor .
docker run -d --name dsh-harbor -p 3000:3000 \
-v "$PWD/data:/app/data" \
-e NEXT_PUBLIC_SITE_URL=https://your-domain \
-e GITHUB_TOKEN=ghp_xxx \
dsh-harbor
环境变量
| 变量 | 默认 | 作用 |
|---|---|---|
NEXT_PUBLIC_SITE_URL |
http://localhost:3000 |
站点绝对地址,用于 canonical / OG / sitemap / 徽章 Markdown |
GITHUB_TOKEN |
— | 提交预检与同步脚本用,避免匿名限流 |
HARBOR_DATA_DIR |
./data |
目录数据目录 |
HARBOR_SUBMIT_PER_HOUR |
8 |
同一 IP 每小时最多提交几次 |
HARBOR_REQUIRE_LICENSE |
true |
是否强制要求仓库声明开源许可证 |
上线步骤见 DEPLOY.md(docker compose up -d --build 一把梭,Caddy 自动签证书)。
定时同步
用 cron 每天刷一次 Star 与更新时间:
17 4 * * * cd /srv/dsh-harbor && GITHUB_TOKEN=xxx npm run sync >> /var/log/dsh-harbor-sync.log 2>&1
同步后重启或等待 ISR 过期即可;页面有 30s–10min 的分级 revalidate。
项目结构
app/
layout.tsx 全局壳:字体、导航、页脚、网格背景
page.tsx 落地页
plugins/page.tsx 插件库(搜索 / 分类 / 排序 / 分页 / 视图切换)
plugins/[owner]/[repo]/ 插件详情(README 渲染 + JSON-LD)
submit/ 提交页
about/ 收录规范
api/{plugins,repo,submit}/
badge/[[...slug]]/ README 徽章 SVG
rss.xml/ sitemap.ts robots.ts not-found.tsx
components/ 导航、页脚、卡片、行、复制按钮、表单、分页…
lib/
types.ts 数据模型
categories.ts 10 个分类 + 关键词推断
catalog.ts 目录读写、查询、统计、贡献者(node:fs,仅服务端)
format.ts 纯展示辅助(客户端可引用)
sort.ts 排序常量
github.ts GitHub 只读访问(checkRepo / fetchReadme)
markdown.ts README → 安全 HTML
repo-input.ts 仓库地址解析
site.ts 站点常量
scripts/
curated.ts 人工精选清单
sync.ts 同步脚本
data/plugins.json 目录真源
design/ 设计稿与原型(不属于构建产物)
research/ 同类站点架构调研
README 渲染的安全策略
README 是第三方内容,lib/markdown.ts 的流程是:marked 解析 → sanitize-html 白名单过滤
(脚本 / 样式 / 事件属性 / iframe / 表单全部丢弃,链接协议限 http(s)/mailto)→ 把仓库内相对路径
改写成 GitHub 或 raw.githubusercontent 的绝对地址。因此不需要额外跑浏览器沙箱。
许可证
本仓库自身的代码与数据整理成果采用 MIT 许可证。
data/plugins.json 里收录的各个插件不在此列 —— 它们的著作权与许可证归各自作者所有,
以每条记录中 repoUrl 指向的仓库所声明的许可证为准。本站只做索引,不托管任何插件代码。
免责声明
非官方社区项目,与 DeepSeek 官方无隶属关系。插件著作权归各作者;本站在本机运行第三方代码这件事上 不做安全背书,安装前请自行审阅源码。
No comments yet. Be the first to write one.