[3.2] - 2025-01
Backend
Features
- 新增 WebAuthn Passkey 无密码登录支持
- 支持注册、认证、管理 Passkey 凭证
- 支持多设备凭证(iCloud Keychain 等)备份检测
- 支持克隆攻击防护(sign_count 验证)
- 认证策略模式,统一密码登录和 Passkey 登录接口
- 新增日历视图,集成 Bangumi.tv 放送时间表
- 新增下载器 API 和管理接口
- 全面异步化改造
- 数据库层新增异步支持(aiosqlite),为 Passkey 操作提供非阻塞 I/O
UserDatabase支持同步/异步双模式,兼容新旧代码路径Database上下文管理器同时支持with(同步)和async with(异步)- RSS 引擎、下载器、检查器、解析器全面转为异步
- 网络请求从
requests迁移至httpx(AsyncClient)
- 后端迁移至
uv包管理器(pyproject.toml + uv.lock) - 服务器启动使用后台任务,避免阻塞
Changes
- 升级 WebAuthn 依赖至 py_webauthn 2.7.0
_get_webauthn_from_request优先使用浏览器 Origin header,修复跨端口开发环境下的验证问题auth_user和update_user_info转为异步函数TitleParser.tmdb_parser转为异步函数RSSEngine方法全面异步化(pull_rss、refresh_rss、download_bangumi、add_rss)Checker.check_downloader转为异步函数ProgramStatus从 threading 迁移至 asyncio(Event、Lock)
Bugfixes
- 修复
aaguid类型错误(py_webauthn 2.7.0 中为str,不再是bytes) - 修复
credential_backup_eligible字段不存在的问题(改用credential_device_type) - 修复
verify_authentication_response传入无效参数credential_id导致 TypeError - 修复程序启动阻塞服务器的问题
- 修复搜索接口导出与组件不匹配的问题
- 修复 poster 端点路径检查错误拦截所有请求
- 修复 OpenAI 解析器安全问题
- 修复数据库测试使用异步会话与同步代码不匹配
- 修复 3.1.x 升级 3.2 时配置字段冲突导致设置丢失的问题
program.sleep_time/program.times自动迁移为rss_time/rename_time- 移除已废弃的
rss_parser字段(type、custom_url、token、enable_tmdb) - 修复
ENV_TO_ATTR环境变量映射指向不存在的模型字段 - 修复
DEFAULT_SETTINGS与当前配置模型不一致
- 修复版本升级时迁移逻辑错误(所有升级均调用 3.0→3.1 迁移函数)
- 新增版本感知的迁移调度,根据来源版本执行对应迁移
- 新增
from_31_to_32()迁移函数处理数据库 schema 变更
Frontend
Features
- 全新 UI 设计系统重构
- 统一的设计令牌(颜色、字体、间距、阴影、动画)
- 支持亮色/暗色主题切换
- 完善的无障碍访问支持(ARIA、键盘导航、焦点管理)
- 响应式布局适配移动端
- 新增 Passkey 管理面板(设置页)
- WebAuthn 浏览器支持检测
- 设备名称自动识别
- Passkey 列表展示与删除
- 登录页新增 Passkey 指纹登录按钮
- 新增日历视图页面
- 新增下载器管理页面
- 新增 Bangumi 卡片悬停覆盖层(显示标题和标签)
- 新增
resolvePosterUrl工具函数,统一处理外部 URL 和本地路径 - 重新设计 LLM 设置面板
- 重新设计设置、下载器、播放器、日志页面样式
- 全新移动端优先响应式设计
- 三层断点系统:手机 (<640px)、平板 (640-1023px)、桌面 (≥1024px)
- 手机端底部导航栏(带图标和文字标签)
- 平板端迷你侧边栏(56px 图标导航)
- 移动端弹出框自动切换为底部抽屉(Bottom Sheet)
- 下拉刷新(Pull-to-Refresh)支持
- 水平滑动容器(Swipe Container)支持
- 移动端卡片列表替代数据表格(RSS 页面)
- CSS Grid 响应式布局(Bangumi 卡片网格)
- 表单标签在移动端垂直堆叠,输入框全宽
- 触摸目标最小 44px,符合无障碍标准
- 安全区域适配(刘海屏设备)
100dvh动态视口高度(解决移动浏览器地址栏问题)viewport-fit=cover支持全面屏设备
New Components
ab-bottom-sheet— 触摸驱动的底部抽屉组件(拖拽关闭、最大高度限制)ab-adaptive-modal— 自适应弹窗(移动端底部抽屉 / 桌面端居中对话框)ab-pull-refresh— 下拉刷新包装组件ab-swipe-container— 水平滑动容器(CSS scroll-snap)ab-data-list— 移动端友好的卡片列表(替代 NDataTable)ab-mobile-nav— 增强型底部导航栏(图标 + 标签 + 活动指示器)useSafeArea— 安全区域 composable
Changes
- 重构搜索逻辑,移除 rxjs 依赖
- 搜索 Store 导出重构,匹配组件期望格式
- 升级前端依赖
- 断点系统从单一 1024px 扩展为 640px + 1024px 两级
useBreakpointQuery新增isTablet、isMobileOrTablet、isTabletOrPCmedia-query.vue新增#tablet插槽(回退到#mobile)- UnoCSS 新增
sm: 640px断点 ab-input样式移动端全宽 + 增高触摸目标- 布局使用
dvh单位替代vh,支持 safe-area-inset
CI/Infrastructure
- CI 新增 PR 开启时的构建测试(dev 分支 PR 到 main 时自动触发 build)
- CI 升级
actions/upload-artifact和actions/download-artifact至 v4 - Docker 构建移除
linux/arm/v7平台(uv 镜像不支持) - 新增 CLAUDE.md 开发指南