Back to home@Victor-770

dsh-plugin-directory

DeepSeek Harness 插件目录:中英双语、按功能分类、README 全文搜索、按热度排序。

Stars
0
Language
JavaScript
Created
Aug 14, 2026
Updated
Aug 25, 2026

Introduction

DSH Plugin Directory

DeepSeek Harness 插件目录:中英双语、按功能分类、README 全文搜索、按热度排序。

  • 数据源:https://github.com/topics/dsh-plugin(GitHub Actions 每 6 小时同步,当前 1 万+ 仓库)
  • 前端:Cloudflare Pages(Astro 静态站,深色开发工具美学)
  • 搜索:Cloudflare Worker(search-core 纯函数库,中英别名互搜)
  • 测试:npm test(node:test 32 例,唯一 seam = search-core)

结构

scripts/sync.mjs        # 同步管道:拉 GitHub API -> 数据产物(经 scripts/lib/artifacts.mjs 写盘)成功后 IndexNow 分批通知 Bing
scripts/lib/artifacts.mjs   # 产物层唯一实现:plugins/ 分片 + index.json.gz + plugins-meta.json.gz + browse(-lite/-top).json
scripts/rebuild-data-artifacts.mjs  # 离线重放:从现有分片补产/重写派生产物(不访问网络)
scripts/lib/categories.mjs  # 八分类规则 + top-20 手动兜底
search-core/            # 纯函数库(tokenize/buildIndex/expandAliases/search)+ 测试
worker/                 # Cloudflare Worker:GET /api/search(冷启动拉 index.json.gz + plugins-meta.json.gz,~16MB)
site/                   # Astro 静态站
site/src/lib/publish-policy.js  # 发布策略单一来源:OG 图 top-N(500)、en 详情页 star>=2 —— Pages 免费版 20k 文件/部署上限
site/public/data/       # 同步产物(Pages 静态服务,Worker 同源拉取;plugins 分片 + gzip 索引,规避 Pages 25MiB/文件上限)
site/src/pages/plugin/  # 每插件详情页(构建期生成,SEO 长尾入口;/en/ 下为 star 达标插件的英文版)
site/src/pages/en/       # 英文版页面树(真实 URL /en/,配 hreflang,zh 在根路径)
site/src/pages/category/ # 分类落地页(/category/{slug}/,中英,空分类不生成)
site/src/pages/sitemap.xml.ts + sitemaps/  # sitemapindex + 分片(每片 ≤5000 URL;详情页 lastmod 取 pushed_at)
site/scripts/og-images.mjs  # 构建期生成 OG 图(纯 Node PNG,1200x630;只为 star top-500 生成,其余用站点级 og.png)
functions/              # Pages Functions:/api/search 代理到 Worker(必须位于仓库根,Pages 自动检测)

开源许可(AGPL-3.0)

本站代码以 GNU AGPL-3.0 开源:允许自由使用、修改与再分发;但以网络服务形式对外提供修改版时(§13),必须向用户公开你的修改源码。收录数据整理自 GitHub 公开 API,版权归各仓库原作者。

开源即护城河:代码可以被复制,复制不走的是域名、收录历史与每 6 小时的数据新鲜度。若你基于本项目搭建同类站点,请保留版权声明并遵守 AGPL-3.0。

SEO / IndexNow

同步完成后自动向 Bing 通知新增/更新/删除的插件 URL(Bing 站长指南 §4):

  • Key 文件site/public/<32位hex>.txt(当前 e5c18ce8e6c944e39d70920c824b5626.txt),随静态站部署,地址 https://dsh-plugin-directory.online/<key>.txt
  • 触发时机:每次 npm run sync 对比上次 plugins.json,只提交 pushed_at/stars/description 变化的插件及其 /en/ 版本,不做全量批量提交。
  • 端点:默认 https://api.indexnow.org/indexnow;可用环境变量 INDEXNOW_ENDPOINT 覆盖(自建端点调试)。
  • 失败不影响同步:IndexNow 通知出错仅告警,不会让数据同步失败。
  • sitemap 的插件详情页 lastmod 使用各插件 GitHub pushed_at(而非同步时间),符合 Bing 对准确 freshness 信号的要求。

本地开发

npm test                          # search-core + i18n 测试(32 例)
node scripts/sync.mjs             # 拉取数据(可选 GITHUB_TOKEN=xxx 提速)
cd site && npm install && npm run dev   # 本地浏览站(需先 sync 生成数据)
node worker/smoke.mjs             # Worker 本地冒烟(需先 sync)

部署(Ticket 06)

有向导版:Windows 下执行 pwsh scripts/deploy.ps1 逐项检查并打印每一步。 一键 Worker 部署:npm run deploy(站点构建门禁 -> 全量测试 -> wrangler 部署 Worker; npm run deploy -- --worker-only 跳过构建。静态站由 push 触发 Pages 云端构建,不在脚本范围)。

  1. GitHub repo 推送到远端,仓库 Secrets 添加 GH_TOKEN(fine-grained,public repo 只读;不加也能跑,额度低)。
  2. Pages:连接该 repo → 构建命令 cd site && npm install && npm run build → 输出目录 site/dist(相对仓库根) → 得到 xxx.pages.dev(自定义域名 dsh-plugin-directory.online,并在 Cloudflare 配好 pages.dev → 主域 301)。
  3. Workercd worker → 把 wrangler.tomlSITE_ORIGIN 改成 Pages 地址 → npx wrangler deploy。可选限流环境变量(wrangler.toml [vars] 或面板配置):RATE_LIMIT_MAX(每 IP 每窗口最大请求数,默认 120)、RATE_LIMIT_WINDOW_SECONDS(窗口秒数,默认 60)。真实访客 IP 的限流在 Pages Function(functions/api/search.js)执行,Worker 侧按边缘 IP 兜底。
  4. 限流信任密钥(可选,推荐)cd worker && npx wrangler secret put PAGES_WORKER_SHARED_KEY(填随机串),并在 Pages 面板为生产环境添加同名环境变量。配置后 Pages Function 转发的真实 IP 头(x-dsh-real-ip)才会被 Worker 信任;两侧都不配置也是安全默认(Worker 只按边缘 CF-Connecting-IP 限流,功能不受影响)。
  5. 上线检查:首页展示"最后同步时间";/api/search?q=皮肤 返回结果。
  6. Bing Webmaster Tools(可选但推荐):验证 dsh-plugin-directory.online,提交 https://dsh-plugin-directory.online/sitemap.xml。IndexNow 通知无需在 BWT 验证(key 文件已部署)。

已知取舍(grilling 记档)

  • 全量收录(含独立应用/死仓库),无兼容性验证;star 排序靠前的是非插件应用(如 OpenBiliClaw)。
  • 发布策略受 Cloudflare Pages 免费版 20,000 文件/部署上限约束(site/src/lib/publish-policy.js 单一来源): OG 图只为 star top-500 生成(其余用站点级 og.png);英文详情页只生成 star ≥ 2 的插件 (0-1 星长尾英文壳页无搜索流量;en 树内的分类列表/相关卡片对未达标插件回退链到中文页,不产生 404)。
  • 浏览端分阶段加载:首屏 browse-top.json(~100KB,top 300 + 全语料计数)即可交互; 全量 browse-lite.json(~3MB)按需懒加载(首个交互/深滚动/空闲 4s),筛选在首屏阶段走 /api/search。
  • 相关性排序带 IDF 加权与同组取 max:满篇样板词(dsh/plugin)权重趋零,营销文案刷分已被抑制。
  • 中文切词为二元切词 + 首尾字,别名表 163 键硬编码(2 字键精确命中,≥3 字键切词覆盖匹配);IDF 相关性排序;不做语义搜索。
  • 壳双语:UI 文案中英,插件内容保持原文。
  • Worker 冷启动拉 index.json.gz(~14MB)+ plugins-meta.json.gz(~1MB,无 README);每 10 分钟 TTL 后台刷新同源拉取。 数据端先于 Worker 发布旧布局时自动回退分片 + manifest(部署顺序解耦)。