feat: 完成 TraceMemo v2.2.0 品牌升级并保留旧数据兼容

- 将用户可见品牌升级为 TraceMemo(迹忆)
- 增加最早期 userData/sessionData 兼容路径选择
- 保留 WechatExplorer runtime identity 以兼容 safeStorage
- 继续使用旧 Knowledge、Settings、API Token 和 Provider 配置
- 新日志写入 TraceMemo 目录并保留历史日志
- 保留旧 API、Skill、环境变量和导出目录兼容标识
- 更新相关文档、界面文案与自动化测试
This commit is contained in:
Wxw-Gu
2026-08-11 14:42:12 +08:00
parent 2354fd0766
commit 55c6fb8cd3
86 changed files with 481 additions and 459 deletions
+4 -4
View File
@@ -1138,7 +1138,7 @@ describe('media export flow', () => {
expect(result).toEqual({ success: false, error: '已取消' })
expect(state.exportReads).toEqual(['cancel-1'])
const outputDir = join(state.documents, 'WechatExplorer', '导出', 'cancelled-all-conversations')
const outputDir = join(state.documents, 'TraceMemo', '导出', 'cancelled-all-conversations')
expect(existsSync(join(outputDir, '联系人', '联系人一', 'index.html'))).toBe(true)
expect(existsSync(join(outputDir, '联系人', '联系人二', 'index.html'))).toBe(false)
const partialManifest = JSON.parse(readFileSync(join(outputDir, '导出清单.json'), 'utf8')) as {
@@ -1195,7 +1195,7 @@ describe('media export flow', () => {
expect(firstSize).toBeGreaterThan(0)
expect(readFileSync(second.outputPath!).subarray(0, 2).toString()).toBe('PK')
const entries = execFileSync('unzip', ['-Z1', second.outputPath!], { encoding: 'utf8' })
const htmlPath = join(state.documents, 'WechatExplorer', '导出', 'zip-fixture', 'index.html')
const htmlPath = join(state.documents, 'TraceMemo', '导出', 'zip-fixture', 'index.html')
const archive = readArchive(htmlPath)
expect(entries).toContain('zip-fixture/index.html')
expect(entries).toContain('zip-fixture/data/messages.js')
@@ -1209,7 +1209,7 @@ describe('media export flow', () => {
true
)
expect(
readdirSync(join(state.documents, 'WechatExplorer', '导出')).some((name) =>
readdirSync(join(state.documents, 'TraceMemo', '导出')).some((name) =>
name.startsWith('zip-fixture.zip.tmp-')
)
).toBe(false)
@@ -1250,7 +1250,7 @@ describe('media export flow', () => {
expect(cancelled).toEqual({ success: false, error: '已取消' })
expect(readFileSync(first.outputPath!)).toEqual(completeZip)
expect(
readdirSync(join(state.documents, 'WechatExplorer', '导出')).some((name) =>
readdirSync(join(state.documents, 'TraceMemo', '导出')).some((name) =>
name.startsWith('zip-cancel-fixture.zip.tmp-')
)
).toBe(false)