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

@@ -222,6 +222,7 @@ py -m pip install --user -r requirements.txt
| 生成导出计划 CSV白名单 | `python export_all_chats.py --write-plan-csv export_plan.csv --plan-mode whitelist` |
| 按计划 CSV 导出(黑名单,默认) | `python export_all_chats.py output_dir --from-plan-csv export_plan.csv` |
| 按计划 CSV 导出(白名单) | `python export_all_chats.py output_dir --from-plan-csv export_plan.csv --plan-mode whitelist` |
| 导出时间窗口 delta JSON不覆盖完整 JSON | `python export_all_chats.py output_dir --delta-only --start "2026-05-26 00:00:00" --end "2026-05-26 08:00:00"` |
| 批量导出 + 语音转录 | `python export_all_chats.py --with-transcriptions` |
| 转录单个文件语音 | `python transcribe_chat.py input.json [output.json]` |
| 注册 MCP ServerClaude | `claude mcp add wechat -- python /path/to/mcp_server.py` |
@@ -235,6 +236,10 @@ py -m pip install --user -r requirements.txt
的行会被跳过,空值、`1` 或没有 `export` 列都会导出;`whitelist`
模式下只有明确 `export=1` 的行会导出。
`--delta-only` 是无状态时间窗口导出,必须显式传 `--start`。它不会读取或
覆盖 `exported_chats/*.json`,适合由外部调度器维护游标后定时拉取新增消息。
时间窗口内没有消息的会话会跳过,不生成空的 `*.delta.json` 文件。
### Web UI
`python main.py` 启动后打开 http://localhost:5678 查看实时消息流。
@@ -398,7 +403,7 @@ make help # 列出所有命令
| 文件 | 说明 |
|---|---|
| `export_all_chats.py` | 批量导出全部聊天为 JSON (含 CSV 计划选择、`-t` 转录、`-i` 增量、日期范围、`--dry-run`) |
| `export_all_chats.py` | 批量导出全部聊天为 JSON (含 CSV 计划选择、`--delta-only` 时间窗口、`-t` 转录、`-i` 增量、日期范围、`--dry-run`) |
| `export_chat.py` | 单会话 JSON 导出 (供 `export_all_chats` 调用) |
| `chat_export_helpers.py` | JSON 导出共享格式化函数 (避免漂移) |
| `export_messages.py` | CSV / HTML / JSON 三种格式导出, 图片可内联 (PR #107) |