Skip to content

[Bug] 会话复制到已存在同内容会话的账号时未作幂等去重,且改写 created_at 导致列表顺序混乱 #103

Description

@NicholasLea

运行环境

  • OS: macOS (Apple Silicon)
  • workbuddy-switch 版本: v0.1.47

问题描述

在使用「会话复制」功能将账号 A 的会话同步/复制到账号 B 时,存在两个影响体验的问题:

  1. 未作幂等去重:若目标账号内已存在内容完全相同的会话,工具会无差别以新 session ID 再次写入一条完整副本,导致目标账号内出现大量完全相同的重复会话。
  2. 重写 created_at 导致会话列表乱序:写入副本时,created_at 与 updated_at 被重写为复制发生的当前时间戳,而 WorkBuddy 客户端会话列表默认按此时间降序排列,导致批量复制的历史会话瞬间被顶到列表最上方,把最近正在进行的真实对话挤到下方,容易让用户误以为原有对话被覆盖或丢失。

关键证据

在核对本地数据库(sessions 表)时发现:

  • 复制落地的副本会话中,created_at 与 updated_at 均被赋值为复制时刻的时间戳;
  • 但这些会话的 last_activity_at 字段依然保留着原始会话的历史真实时间(如几天或数周前的原始时间戳)。

这表明原始时间信息在复制流程中是完全可得的,但在持久化为新记录时未被写入排序依赖的 created_at。

建议与改进方案

  1. 幂等性检查:在复制到目标账号前,建议基于会话内容(如消息内容哈希)检查目标账号是否已存在相同对话,若存在则跳过或提供「跳过已有」选项。
  2. 保留原始时间戳:建议将源会话的真实 created_at / updated_at 继承给新副本,或增加「保留原始时间戳」开关,避免污染目标账号的时间线排序。
  3. 管理与撤回:若后续支持,建议提供副本撤销 / 批量删除副本 / 解除关联的入口。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions