Legacy sync
会话历史导入
把旧版 SQLite 中的会话与消息导入到新版数据库。
会话历史导入
旧版 WinCode 的会话和消息也存储在 SQLite 中,但 Schema 与新版不同。legacySync 模块在迁移时会打开旧版数据库,按项目分组把会话与消息逐条导入新版,并保证消息与所属会话的关联关系完整。

数据对应关系
在 LegacySyncApplyResult 中,会话与消息的统计是分开的:
sessions.imported- 新版新增的会话数量sessions.merged- 与新版已存在的会话合并的数量(按旧版 ID 匹配)sessions.skipped- 因已存在而跳过的数量sessions.failed- 导入失败的数量messages同理,但统计的是消息条数
projects 也有同样的统计,因为新版的项目结构可能与旧版不完全一致。
迁移策略
会话导入遵循"按会话 ID 去重"的原则:
- 如果新版已经有同 ID 的会话,则跳过,避免重复。
- 如果新版没有,则把会话连同它的全部消息一起插入。
- 消息的
role、content、createdAt、工具调用等字段都按原样保留,保证打开历史会话时能看到与旧版一致的对话。
项目归位
会话必须归属于某个项目。旧版的项目结构如果在新版中已经存在(按路径匹配),则把会话挂到已有的项目下;否则,会创建一个新的项目记录。迁移完成后,onProjectsImported 回调会通知前端刷新项目列表,让用户立即可见。
大数据量注意
如果旧版积累了数千条会话,迁移可能需要几十秒。迁移过程中对话框会停留在 syncing 状态,完成后自动切换到 done。建议在网络与磁盘负载较低时执行,避免影响其他使用。