8 Commits

  • fix(key): 支持手动指定微信安装目录并校验 db key 来源
    - /api/get_keys 支持传入 wechat_install_path,兼容安装目录与 Weixin.exe / WeChat.exe
    
    - 解密完成后保存 db key 的来源路径与别名,避免历史密钥被错误账号复用
    
    - 解密页按 account + db_storage_path 回填已保存密钥,并补充相关测试覆盖
  • perf(chat-ui): 聊天媒体懒加载并补充资源加载埋点
    - 为消息图片、视频缩略图、头像和引用缩略图接入懒加载
    - 新增聊天媒体性能采集插件与通用 perf logger
    - 优化媒体占位并补充前端资源加载耗时埋点
  • fix(chat): 补充视频号消息 objectId 和 objectNonceId 字段透传
    补充 Finder/视频号类型 app message 的 objectId、objectNonceId 解析
    
    在聊天消息接口、搜索结果和导出链路中透传上述字段
    
    前端消息归一化增加 objectId、objectNonceId 字段
    
    新增对应测试,覆盖 type=51 场景
  • fix(chat-media): 修复聊天图片缓存降级并刷新当前会话媒体
    - 优先使用更高质量的微信图片资源并回写本地缓存
    - 图片接口返回 no-store,避免浏览器继续命中旧缓存
    - 页面恢复前台时刷新当前会话媒体资源,并补充相关测试
  • fix(chat-ui): 修复账号未选中时的会话加载与实时刷新异常
    - 在账号列表已加载但当前账号为空时强制刷新,避免聊天页进入无账号状态
    - 为实时增量刷新补充异常兜底和日志,避免单次失败阻断后续更新
    - 保留消息归一化中的原始 type/localId 字段,减少前端后续处理丢失信息
  • feat(ui): 新增浅深色主题切换并统一界面配色
    - 新增主题 store 与本地持久化能力,支持侧边栏切换浅色/深色模式
    - 将聊天页、会话列表、标题栏、弹窗等配色改为 CSS 变量统一管理
    - 适配定位卡片、引用气泡、系统提示等聊天消息组件在不同主题下的可读性
    - 同步整理首页、解密页、联系人页、朋友圈页等页面背景与交互样式
  • refactor(chat-ui): 拆分聊天页组件并抽离组合式逻辑
    - 将聊天页从超大单文件拆分为会话列表、会话面板、消息列表、消息项和覆盖层组件\n- 抽离会话、消息、搜索、导出、编辑、历史窗口等组合式逻辑\n- 下沉消息格式化、消息归一化、聊天记录解析与文件图标等工具模块\n- 新增 chat.css 并在 Nuxt 中注册,统一聊天页样式
  • fix: resolve chat messages not loading due to Nuxt auto-import bug and WCDB timeout
    - Move frontend/utils/ to frontend/lib/ to avoid Nuxt unimport scanner
      incorrectly extracting function parameter names (value, fallback) as
      module-level exports, which injected phantom imports that broke all
      client-side JavaScript execution
    - Update all import paths across 13 files from ~/utils/ to ~/lib/
    - Add timeout (5s) and negative cache (60s TTL) to WCDB realtime
      ensure_connected() to prevent open_account() from hanging indefinitely
      when the WeChat database is locked
    - Reorder selectContact() to fire loadMessages() before navigateTo() so
      the message fetch starts before route navigation triggers Suspense
    - Add watch: false to SSR useAsyncData calls to prevent unnecessary
      re-fetching on client-side route changes