feat(wrapped): 年度总结支持目录/单卡片接口,新增卡片#0/#2

- 新增 /api/wrapped/annual/meta 与 /api/wrapped/annual/cards/{card_id},用于前端懒加载单页卡片
- 增加卡片 manifest / 缓存版本控制 / 并发锁,避免重复计算与旧缓存串数据
- 新增 Card#0「年度全局概览」:活跃天数、top 联系人/群、常用表达/金句/表情等汇总
- 新增 Card#2「年度消息字数」:收发字数统计 + 类比呈现 + 键盘敲击统计
- 完善 Card#1 赛博作息表:支持更快的索引计算与更丰富的叙事文案
This commit is contained in:
2977094657
2026-01-31 14:54:11 +08:00
parent 79da96b2d3
commit 77a60bde70
7 changed files with 2246 additions and 21 deletions

11
uv.lock generated
View File

@@ -498,6 +498,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a7/c4/3a096c6e701832443b957b9dac18a163103360d0c7f5842ca41695371148/pyinstaller_hooks_contrib-2025.11-py3-none-any.whl", hash = "sha256:777e163e2942474aa41a8e6d31ac1635292d63422c3646c176d584d04d971c34", size = 449478, upload-time = "2025-12-23T12:59:35.987Z" },
]
[[package]]
name = "pypinyin"
version = "0.55.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/b4/a4/784cf98c09e0dc22776b0d7d8a4a5b761218bcae4608c2416ce1e167c8af/pypinyin-0.55.0.tar.gz", hash = "sha256:b5711b3a0c6f76e67408ec6b2e3c4987a3a806b7c528076e7c7b86fcf0eaa66b", size = 839836, upload-time = "2025-07-20T12:01:50.657Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b9/7b/4cabc76fcc21c3c7d5c671d8783984d30ac9d3bb387c4ba784fca3cdfa3a/pypinyin-0.55.0-py2.py3-none-any.whl", hash = "sha256:d53b1e8ad2cdb815fb2cb604ed3123372f5a28c6f447571244aca36fc62a286f", size = 840203, upload-time = "2025-07-20T12:01:48.535Z" },
]
[[package]]
name = "python-dotenv"
version = "1.1.0"
@@ -839,6 +848,7 @@ dependencies = [
{ name = "pilk" },
{ name = "psutil" },
{ name = "pycryptodome" },
{ name = "pypinyin" },
{ name = "python-multipart" },
{ name = "pywin32", marker = "sys_platform == 'win32'" },
{ name = "requests" },
@@ -862,6 +872,7 @@ requires-dist = [
{ name = "psutil", specifier = ">=7.0.0" },
{ name = "pycryptodome", specifier = ">=3.23.0" },
{ name = "pyinstaller", marker = "extra == 'build'", specifier = ">=6.0.0" },
{ name = "pypinyin", specifier = ">=0.53.0" },
{ name = "python-multipart", specifier = ">=0.0.6" },
{ name = "pywin32", marker = "sys_platform == 'win32'", specifier = ">=310" },
{ name = "requests", specifier = ">=2.32.4" },