todo #5 · 四端实时统计 + 多设备归因 + GB 配额 + 统计页重设计 · 阅读版
docs/superpowers/plans/2026-06-24-stats-overhaul.md。本 HTML 仅供阅读,不驱动执行。
四端实时统计真生效(上传/下载/延迟/累计流量)+ 服务端按设备归因并按 GB 账户综合卡控 + 统计页按新设计(上聚合·下分设备)像素级还原。
已敲定决策:租户=用户账户(无需层级表);配额改 GB、按账户综合卡;每设备独立 dp_uuid;分三期;页面改动先设计后开发、用真相源、四端统一元素。
Dart 契约(pangolin/vpn/stats)与 UI 都正确,缺口全在原生侧:
PacketTunnelProvider 起了 libbox 但 writeStatus/writeGroups 空实现,stats EventChannel 注册了无人 push → 0 数据。VpnChannel.swift 硬编码推 0;扩展回调全空。writeGroups urltest)疑似 stale。/connections);延迟解析 /proxies urltest 疑似拿不到 URLTest 组。ReportUsage → dp_uuid→user_id → usage_daily(user_id,date)。users.dp_uuid,devices 无 dp_uuid 列,usage_daily 无设备维度。plans.daily_minutes,连接时凭证 TTL 卡,非持续)。现有 stats 设计在 mobile/tablet/desktop 仅聚合;分设备明细任何端都没设计 → Phase 3 必须 design-first。_MetricCard 私有于 stats_page,应提升为公共组件。
LibboxCommandClient 连 App Group 容器订阅扩展 CommandServer 的 writeStatus/writeGroups,转推 stats channel——对齐 Android StatsHandler 模型。extractUrltestResults() 解析 + 核下发配置含 URLTest 组。devices.dp_uuid 每设备凭证;新表 usage_device_daily;plans.daily_gb。dp_uuid→(user_id,device_id) 解析,双写设备表 + 账户 rollup。metric_card.dart、新增 device_stat_row.dart;四端接分设备 provider;语义 token;红线扫描。先 Phase 1(见效快、零 schema 风险)→ 合并验收 → Phase 2(后端)→ Phase 3(设计可与 Phase 2 并行起草,实现接线依赖 Phase 2 API)。
不在本次范围:组织级多租户层级、协议选择(#8)、KillSwitch(#1/#2/#3)。