feat(export): 增加微信聊天增量 JSON 导出 (#122)

新增 export_all_chats --delta-only 按时间窗口导出每个会话的增量 JSON.

- --delta-only 写入 deltas/<run_id>/manifest.json + 有消息的会话文件, 便于后续按批次消费
- 沿用现有 CSV plan 选择逻辑, 可通过 --from-plan-csv 控制范围
- 空时间窗口会话直接跳过, 不再生成 message_count=0 的 delta 文件
- 增量 JSON 保留会话级 metadata, 不改变现有 CSV 导出默认流程
- manifest.json 只记录实际有消息的会话, 无法解析的留在 errors 中便于定位

测试: tests/test_export_all_chats_delta.py 7 个 case (run_id 时间戳形状 / 文件名安全化 / msg_uid 哈希组成 / 写窗口不覆盖全量 JSON / 空窗口跳过 / CLI 参数校验 / manifest 记录文件).

跟 #114 (CSV plan) 互补 — CSV plan 选 "哪些会话" 而 delta 选 "哪个时间窗口".
This commit is contained in:
phoenixray2000
2026-05-29 13:18:53 +08:00
committed by GitHub
parent eba9a9d4cd
commit 5e0eaa33fa
5 changed files with 559 additions and 12 deletions

View File

@@ -110,3 +110,24 @@ pending = [m for m in data["messages"]
`[图片]` 等。原始媒体仍在 WeChat DB 中,可用 `mcp_server.py` 中的
辅助函数(`decode_image``decode_voice`)取出。
- **群聊**中的 `sender` 是群成员解析后的显示名;当前登录用户仍为 `"me"`
## Delta JSON 输出
`export_all_chats.py --delta-only --start <time> [--end <time>]` 会写入:
```text
deltas/<run_id>/manifest.json
deltas/<run_id>/chats/*.delta.json
```
时间窗口内没有消息的会话会跳过,不生成空的 `*.delta.json` 文件。
Delta 文件顶层字段与完整聊天 JSON 类似,但包含:
- `schema_version`
- `export_kind: "wechat_delta"`
- `range.start` / `range.end`
- `message_count`
- `messages[].msg_uid`
`msg_uid` 是下游去重用的稳定哈希,不要求调用方只依赖 `local_id`