v0.3.4 - 多项错误修改
🎉 v0.3.4 重要更新
这是一个重要的 bug 修复和性能优化版本,包含从 v0.3.2 以来的多项改进。
🐛 关键 Bug 修复
AI 配置保存和状态同步(PR #77)
- 修复 OnboardingView 测试通过的 AI 配置未完全保存的问题
- 配置保存到 aiConfig.providers 但状态未保存到 ai-provider-status
- 导致设置页显示"未配置",状态按钮灰色
- 修复 nextStep() 使用旧 AI 配置结构重复保存的问题
- 改进 AI 配置步骤按钮 UX:
- 未测试时:只能"跳过"(下一步禁用)
- 测试通过后:只能"下一步"(跳过禁用)
- 新增 skipAIConfig() 函数,明确区分跳过和使用配置两种意图
- 简化 按钮文字为"跳过"/"下一步",提升清晰度
RSS 订阅源优化(PR #76)
- 新增 HTML 实体解码(& → &, < → <, > → >, " → ", ' → ')
- 新增 智能标题截断(超过 100 字符时在词边界处截断)
- 改进 RSS 订阅源标题显示质量
- 增强 订阅源去重逻辑,避免重复订阅
- 修复 Service Worker 中的动态 import 错误
- 修复 推荐池统计显示问题
⚡ 性能优化
用户画像生成优化(PR #75)
- 优化 画像重建触发机制,大幅降低 AI 调用成本
- 新增智能判断:仅在浏览行为显著变化时触发重建
- 防止频繁 AI 调用浪费预算
- 提升 冷启动性能,减少初始化时间
推荐池管理(PR #75)
- 新增 推荐池自动清理机制(Phase 12.7)
- 自动删除过期推荐(7天)
- 防止存储空间浪费
- 重命名 定时器为"弹窗容量评估",更准确描述功能
🔐 安全性增强
API 密钥加密(PR #73, #74)
- 实现 API 密钥 AES-GCM-256 加密存储
- 使用 Web Crypto API 进行强加密
- 自动加密所有 Provider 的 API Key
- 提升 数据安全性,防止明文泄露
💰 AI 预算控制
Provider 级别预算控制(PR #72)
- 实现 每个 Provider 独立的月度预算限制
- OpenAI: 美元(USD)
- DeepSeek: 人民币(CNY)
- 新增 预算超限警告和自动停用机制
- 优化 预算追踪和统计展示
超时配置(PR #74)
- 实现 Provider 超时配置(Phase 12.6)
- 标准模式:60秒(远程)/ 30秒(本地)
- 推理模式:120秒(远程)/ 180秒(本地)
- 改进 请求可靠性,避免长时间挂起
🛡️ 容错与稳定性
统一容错机制(PR #70)
- 实现 指数退避 + 熔断器模式
- 自动重试失败的 API 请求
- 熔断器防止级联失败
- 集成 到 BaseAIService,所有 Provider 自动受益
- 优化 网络错误处理,降级为警告日志
日志优化(PR #68)
- 改进 日志准确性和可读性
- 新增 自动清理无效推荐的机制
- 优化 网络错误处理,减少误报
🧪 测试改进
测试覆盖率提升
- 升级 AI 配置测试策略:从 mock 迁移到真实 DeepSeek API
- 修复 11 处测试 mock 数据使用旧 AI 配置结构的问题
- 提升 测试覆盖率:
- 总体行覆盖率:74.9%
- i18n 模块:90.24%
- P0/P1 关键模块覆盖率大幅提升
测试稳定性
- 修复 NotificationSettings 测试的 i18n mock 配置
- 修复 配置优先级和画像保留问题
- 修复 推理模式配置优先级问题
🏗️ 架构改进
AI 配置架构迁移
- 完成 从旧结构到新 providers 结构的迁移
- 简化 配置管理,提升可维护性
- 修复 版本迭代导致的类型不匹配问题
首选 Provider 设置
- 集成 首选 AI Provider 设置到配置浮层
- 改进 用户体验,简化配置流程
📦 技术细节
- 测试套件: 67/67 通过
- 行覆盖率: 74.9%
- 包大小: 826KB
- 支持浏览器: Chrome MV3
🔗 相关资源
- 完整变更记录: PR #77, PR #76, PR #75
- 性能优化: PR #70, PR #68, PR #67
- 安全增强: PR #73, PR #74
- 预算控制: PR #72, PR #71
📝 升级建议
从 v0.3.2 升级到 v0.3.4 后:
- 重新测试 AI 配置:打开设置页检查 AI Provider 状态
- 检查预算设置:如需要,设置每个 Provider 的月度预算
- 清除旧推荐:推荐池将自动清理 7 天前的过期推荐
- 验证 API 密钥:已自动加密,但请确认连接正常
感谢使用 Silent Feed!