工坊统计服务(Phase A

August 14, 2026 · View on GitHub

零服务器是工坊的默认形态;本目录是可选的远程统计服务参考实现(Cloudflare Worker + D1,免费额度足够),部署后工坊自动解锁:

  • 卡片上的 ↓ 装机 N · 近7天 +M 社区装机徽章
  • /trending 真·飙升榜(按实际安装净增长,而非 stars/创建时间近似)

不部署 = 完全无影响:宿主侧仅在 DSH_WORKSHOP_STATS_URL 环境变量存在时才上报,客户端拉取失败静默降级。

隐私

  • 只上报 full_name + 事件类型(install/update/uninstall)+ 匿名安装 ID(每台机器一个随机 UUID,存于 profile 目录);
  • 无用户身份、无路径、无 IP 持久化。匿名 ID 仅用于防刷参考,不跨服务关联。

API

端点说明
POST /events{ full_name, event, install_id },记录事件并更新计数器
GET /stats?repos=a/b,c/d每仓库 totals + installs7d / net7d
GET /trending?days=7&limit=20按窗口内净增长排序

部署(Cloudflare)

cd remote/worker

# 1. 创建 D1 数据库并记录 database_id
wrangler d1 create dsh-workshop-stats

# 2. 把 database_id 填进 wrangler.toml 的 REPLACE_WITH_YOUR_D1_DATABASE_ID

# 3. 建表
wrangler d1 execute dsh-workshop-stats --remote --file=schema.sql

# 4. 部署
wrangler deploy
# → 得到 https://dsh-workshop-stats.<你的子域>.workers.dev

接入工坊

给 dsh web 进程设置环境变量(例):

set DSH_WORKSHOP_STATS_URL=https://dsh-workshop-stats.<你的子域>.workers.dev

重启 dsh web 后:/dsh-plugin-workshop/api/status 返回 statsUrl,客户端开始显示装机徽章并上报事件。

本地验证

node remote/test/harness.mjs

用内存 Mock D1 跑通事件上报、stats 查询、trending 排序与参数校验。

后续(Phase B 起)

  • 评分/评论(需要更强的身份与防滥用设计)
  • 更新徽章(服务端镜像最新版本,替代逐仓库 API 调用)
  • 服务端全文/中文搜索索引