会话历史备份
用户明确指定 Claude 或 Codex 时仅处理指定来源;笼统要求两者同步时处理两者。沿用用户指定的 remote,未指定时使用本技能约定的 syncspace 并核对其已存在。目标为 <remote>:claude-history/<host>/ 或 <remote>:codex-history/<host>/。
本地导出不等于授权上传;用户已经要求同步/上传到该目标时无需重复确认。脚本路径均相对本技能目录,不依赖另一份 ~/.claude/skills 安装。
流程
- 检查
rclone、Python、uv及所需导出器。每次建立独立临时目录,原始导出和清洗产物分开放置。 - Claude 使用已安装的
claude-extract --all --format markdown --output <raw>;Codex 使用python3 <skill>/scripts/export_codex.py --output <raw>,日期筛选见其--help。不读取或导出认证配置。 - 两种来源均须清洗:
uv run <skill>/scripts/filter_history.py <raw> <clean>。该脚本结合结构过滤、密钥规则、可选 detect-secrets/Presidio 与 PII 正则;记录实际启用的检测层,缺失的层不得说成已执行。过滤不是无泄露保证,应抽查清洗结果,疑似残留时修正后再上传。 - 上传前列举目标和本地清洗产物,区分不存在的目标目录与认证/网络失败。认证/网络失败不能当成空远端继续计算新增量。预览使用
rclone copy <clean> <target> --dry-run。 - 使用
rclone copy <clean> <target>同步新增及变更文件,避免sync删除远端内容。默认不要用--ignore-existing,它会漏掉同一会话后续追加的消息;用户明确要求不可变归档时才采用仅新增策略并说明这一限制。 - 核对传输退出状态及远端结果后报告来源、成功/失败、实际新增或更新情况。只允许上传清洗目录;不能用原始导出目录替代。
完成后清理本次产生的原始临时导出;失败时只保留排障必要材料并注明位置。现有 scripts/report_sync.py 按“仅新增、同名跳过”模型汇总,仅在采用该模式时使用;其差集不能证明变更同步成功。