Implement live analysis achievements and admin console

这个提交包含在:
cryptocommuniums-afk
2026-03-15 01:39:34 +08:00
父节点 d1b6603061
当前提交 edc66ea5bc
修改 23 个文件,包含 4033 行新增1022 行删除

查看文件

@@ -10,14 +10,18 @@
### 用户与训练
- 用户名登录:无需注册,输入用户名即可进入训练工作台
- 新用户邀请:首次创建用户名账号需要邀请码 `CA2026`
- 训练计划:按技能等级和训练周期生成训练计划,改为后台异步生成
- 训练进度:展示训练次数、时长、评分趋势、最近分析结果
- 每日打卡与提醒:支持训练打卡、提醒、通知记录
- 成就系统与提醒:训练日聚合、成就进度、连练统计、提醒、通知记录
### 视频与分析
- 视频上传分析:上传 `webm/mp4` 视频进入视频库并触发分析流程
- 实时摄像头分析:浏览器端调用 MediaPipe,进行姿势识别和反馈展示
- 实时摄像头分析:浏览器端调用 MediaPipe,自动识别 `forehand/backhand/serve/volley/overhead/slice/lob/unknown`
- 连续动作片段:自动聚合连续同类动作区间,单段不超过 10 秒,并保存得分、置信度与反馈摘要
- 实时分析录制:分析阶段可同步保留浏览器端本地录制视频,停止分析后自动登记到系统
- 训练数据回写:实时分析与录制数据自动写入训练记录、日训练聚合、成就系统和 NTRP 评分
- 动作纠正:支持文本纠正和多模态纠正两条链路,统一通过后台任务执行
- 多模态图片输入:上传关键帧后会转换为公网可访问的绝对 URL,再提交给视觉模型
- 视觉标准图库:内置网球公网参考图,可直接发起视觉识别测试并保存结果
@@ -36,6 +40,15 @@
- 视频库登记:归档完成后由 app worker 自动写回现有视频库
- 上传稳定性:媒体分段上传遇到 `502/503/504` 会自动重试
### 评分、成就与管理
- 每日异步 NTRP系统会在每日零点后自动排队全量 NTRP 刷新任务
- 用户手动刷新:普通用户可刷新自己的 NTRP;管理员可刷新任意用户或全量用户
- NTRP 快照:每次刷新都会生成可追踪的快照,保存维度评分和数据来源摘要
- 成就定义表:成就系统已独立于旧徽章表,支持大规模扩展、分层、隐藏成就与分类
- 管理系统:`/admin` 提供用户管理、任务列表、实时分析会话列表、应用设置和审计日志
- H1 管理能力:当 `H1` 被配置为 admin 后,可查看全部视觉测试数据与后台管理数据
## 前端能力
### 移动端
@@ -46,6 +59,7 @@
- 横屏视频优先布局
- 录制页和分析页防下拉刷新干扰
- 录制时按设备场景自动调整码率和控件密度
- 实时分析页支持竖屏最大化预览,主要操作按钮放在侧边
### 桌面端
@@ -76,6 +90,7 @@
- 当前 PC 剪辑仍处于基础媒体域准备阶段,未交付完整多轨编辑器
- 当前存储策略为本地卷优先,未接入对象存储归档
- 当前 `.env` 配置的视觉网关若忽略 `LLM_VISION_MODEL`,系统会回退到文本纠正;代码已支持独立视觉模型配置,但上游网关能力仍需单独确认
- 当前实时动作识别仍基于姿态启发式分类,不是专门训练的动作识别模型
## 后续增强方向

查看文件

@@ -11,6 +11,7 @@
## Recommended loop
```bash
set -a && source .env && set +a && pnpm exec drizzle-kit migrate
pnpm check
pnpm test
pnpm test:go
@@ -31,11 +32,12 @@ git commit -m "..."
如果业务开发中被打断,恢复时按以下顺序:
1. `git status` 查看当前工作树
2. 先跑 `pnpm check`
3. 再跑 `pnpm test`
4. 若涉及媒体链路,再跑 `pnpm test:go`
5. 最后`pnpm test:e2e`
6. 若当前分支包含部署改动,再执行 `docker compose config` 与基础 smoke check
2. 若 schema 或环境变量改动过,先执行 `set -a && source .env && set +a && pnpm exec drizzle-kit migrate`
3. 再跑 `pnpm check`
4. 再跑 `pnpm test`
5. 若涉及媒体链路,再`pnpm test:go`
6. 最后跑 `pnpm test:e2e`
7. 若当前分支包含部署改动,再执行 `docker compose config` 与基础 smoke check
不要在一半状态下长时间保留“能编译但主流程不可用”的改动。
@@ -55,6 +57,7 @@ git commit -m "..."
- `client/src/lib/media.ts`
- `client/src/pages/Recorder.tsx`
- `client/src/pages/LiveCamera.tsx`
- `media/main.go`
- `server/routers.ts`
- `server/_core/mediaProxy.ts`
@@ -65,6 +68,7 @@ git commit -m "..."
- marker 写入
- finalize
- 视频库登记
- 实时分析停止后的会话保存和训练数据回写
## Documentation discipline

查看文件

@@ -19,6 +19,7 @@
当前覆盖:
- Node/tRPC 路由输入校验与权限检查
- 实时分析会话保存、管理员权限与异步 NTRP 刷新入队
- LLM 模块请求配置与环境变量回退逻辑
- 视觉模型 per-request model override 能力
- 视觉标准图库路由与 admin/H1 全量可见性逻辑
@@ -41,11 +42,18 @@
使用 Playwright。为保证稳定性
- 启动本地测试服务器 `pnpm dev:test`
- 测试服务器启动前要求数据库已完成 Drizzle 迁移
- 通过路由拦截模拟 tRPC 和 `/media` 接口
- 注入假媒体设备、假 `MediaRecorder` 和假 `RTCPeerConnection`
这样可以自动验证前端主流程,而不依赖数据库、真实摄像头权限和真实 WebRTC 网络环境。
当前 E2E 已覆盖新的后台任务流和任务中心依赖的接口 mock。
这样可以自动验证前端主流程,而不依赖真实摄像头权限和真实 WebRTC 网络环境。
当前 E2E 已覆盖新的后台任务流、实时分析入口、录制焦点视图和任务中心依赖的接口 mock。
首次在新库或新 schema 上执行前,先跑:
```bash
set -a && source .env && set +a && pnpm exec drizzle-kit migrate
```
## Unified verification
@@ -109,7 +117,10 @@ pnpm test:llm
- 打开 `https://te.hao.work/`
- 打开 `https://te.hao.work/login`
- 打开 `https://te.hao.work/checkin`
- 打开 `https://te.hao.work/admin`(管理员)
- 打开 `https://te.hao.work/recorder`
- 打开 `https://te.hao.work/live-camera`
- 确认没有 `pageerror` 或首屏 `console.error`
## Local browser prerequisites
@@ -125,6 +136,7 @@ pnpm exec playwright install chromium
- E2E 目前验证的是“模块主流程是否正常”,不是媒体编码质量本身
- 若需要真实录制验证,可额外用本地 Chrome 和真实摄像头做手工联调
-`pnpm test:e2e` 失败,优先检查:
- 本地数据库是否已执行最新 Drizzle 迁移
- `PORT=3100` 是否被占用
- 浏览器依赖是否安装
- 前端路由或测试标识是否被改动

查看文件

@@ -1,12 +1,13 @@
# Verified Features
本文档记录当前已经通过自动化验证或构建验证的项目。更新时间2026-03-15 00:52 CST。
本文档记录当前已经通过自动化验证或构建验证的项目。更新时间2026-03-15 01:39 CST。
## 最新完整验证记录
- 通过命令:`pnpm verify`
- 验证时间2026-03-15 00:51 CST
- 结果摘要:`pnpm check` 通过,`pnpm test` 通过90/90),`pnpm test:go` 通过,`pnpm build` 通过,`pnpm test:e2e` 通过6/6`pnpm test:llm` 通过
- 验证时间2026-03-15 01:38 - 01:39 CST
- 结果摘要:`pnpm check` 通过,`pnpm test` 通过95/95),`pnpm test:go` 通过,`pnpm build` 通过,`pnpm test:e2e` 通过6/6
- 数据库状态:已执行 `set -a && source .env && set +a && pnpm exec drizzle-kit migrate``0007_grounded_live_ops` 已成功应用
## 生产部署联测
@@ -44,9 +45,12 @@
| plan | `pnpm test` | 通过 |
| video | `pnpm test` | 通过 |
| analysis | `pnpm test` | 通过 |
| live analysis 会话保存 | `pnpm test` | 通过 |
| record | `pnpm test` | 通过 |
| rating | `pnpm test` | 通过 |
| checkin | `pnpm test` | 通过 |
| achievement | `pnpm test` | 通过 |
| admin | `pnpm test` | 通过 |
| checkin 兼容路由 | `pnpm test` | 通过 |
| badge | `pnpm test` | 通过 |
| leaderboard | `pnpm test` | 通过 |
| tutorial / reminder / notification 路由校验 | `pnpm test` | 通过 |
@@ -95,6 +99,7 @@
- Playwright 运行依赖 mocked media/network,不等价于真机摄像头、真实弱网和真实 WebRTC 质量验收
- 当前上游视觉网关可能忽略 `LLM_VISION_MODEL` 并回退为文本模型;服务端已实现自动降级,任务不会因此直接失败
- 2026-03-15 的真实标准图测试中,正手 / 反手 / 发球三条记录均以 `fallback` 完成,说明当前上游视觉网关仍未稳定返回结构化视觉结果
- 开发服务器启动阶段仍会打印 `OAUTH_SERVER_URL` 未配置提示;当前用户名登录、mock auth 和自动化测试不受影响
## 当前未纳入自动验证的内容