Skip to content

BUG-gao/session-weaver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Session Weaver

安全迁移 Claude Code 与 Codex 会话:保留消息、推理、图片和工具调用,写入前后自动校验。

CI License: Non--Commercial Rust

Session Weaver 是一个面向 Claude Code 会话迁移、Codex 会话迁移和 Claude/Codex 双向转换的源码公开命令行工具。它不会只判断“每行是不是合法 JSON”,还会检查目标客户端 真正依赖的字段,并在写入后重新读取验证。

# Codex -> Claude Code
sw tc <CODEX_SESSION_ID>

# Claude Code -> Codex
sw tx <CLAUDE_SESSION_ID>

如果 Session Weaver 帮你保住了一段重要会话,欢迎点一个 Star,让更多需要迁移 AI 编程上下文的人能找到它。

为什么需要它

Claude Code 和 Codex 都使用 JSONL 保存会话,但记录结构、内容块、工具调用、索引和 恢复约束并不相同。简单改字段或复制文件可能得到“转换成功、恢复崩溃”的结果。

Session Weaver 针对这些问题提供:

  • Claude Code 与 Codex 双向原生会话迁移。
  • 文本、推理摘要、图片、工具调用和工具结果转换。
  • 迁移前语义校验、目标格式校验和写入后回读。
  • 临时文件写入、原子提交、覆盖前备份。
  • Claude history.jsonl、Codex session_index.jsonl 和可选 SQLite 注册。
  • 原生会话 ID 或直接 JSONL 路径输入。
  • 便携、带 SHA-256 校验的会话包。
  • 人类可读输出和适合脚本的 --json

已修复的兼容问题

项目包含三项针对 Claude Code 2.1.183 的回归测试:

  1. 图片使用合法 image 内容块,不伪装成缺少 text 的文本块。
  2. 普通助手回复写入 stop_reason: "end_turn"
  3. 每条助手消息写入非空 model

这些问题无法被普通 JSON 语法检查发现。Session Weaver 的 check 命令会验证到字段路径。

0.1.2:让 codex→claude 迁移会话能在桌面 App 里正常使用

修复了三个相互独立、共同导致「迁移会话无法在 Claude 桌面 App 里使用」的问题(基于 2.1.181 / 2.1.183 实测):

  1. 发消息报 Invalid request(关键):历史里有三类被 Anthropic API 拒绝(400)的结构,现已全部规范化:① thinking 块缺少原始加密 signature(迁移无法伪造,故丢弃 reasoning并保持 parentUuid 链完整);② tool_use.input 为字符串(如 apply_patch 的 patch 文本),API 要求必须是对象(现解析或包成对象);③ tool_result 里的 Codex input_image 块(现转换为 Anthropic 的 base64 image 块)。

  2. 会话不出现在历史列表:桌面 App 的历史列表读取的是它自己的注册表 ~/Library/Application Support/Claude/claude-code-sessions/<账号>/<工作区>/local_<id>.json,而不是 ~/.claude/projects/*.jsonl。迁移到 Claude 时现在会自动写入该注册文件(复用同一 cwd 已有会话的工作区目录;找不到则跳过,不影响迁移)。注册文件只用最保守的权限(permissionMode: default,不预授权任何工具或目录)。

  3. 模型 id 兼容性(正确性):不再把源 provider 的非 Claude 模型 id(如 gpt-5.5<synthetic>)写入 Claude 的 model 字段,统一回退到 --claude-model;claude→claude 迁移仍保留原 Claude 模型。

附带:迁移会话的标题改为取第一条真实用户消息,不再是注入的权限/开发者样板文字。

注:第 2 项依赖桌面 App 当前的注册表布局,属于对未公开格式的适配,App 升级后可能需要跟进。

兼容矩阵

来源 目标 状态 验证方式
Claude Code Codex 支持 解析、往返、索引、Codex 0.142.0-alpha.1 TUI 探测
Codex Claude Code 支持 解析、往返、字段校验、Claude Code 2.1.183 恢复探测
便携包 Claude Code 支持 SHA-256、目标校验、回读
便携包 Codex 支持 SHA-256、目标校验、回读

客户端格式会持续变化。建议升级客户端后先运行 session-weaver doctorsession-weaver check

安装

从源码安装

git clone https://github.com/BUG-gao/session-weaver.git
cd session-weaver
cargo install --path .

下载 Release

Releases 下载对应平台压缩包, 解压后把 session-weaversw 加入 PATH

要求 Rust 1.88 或更高版本。

快速开始

按会话 ID 迁移

sw tc 019d...  # Codex -> Claude Code
sw tx 6367...  # Claude Code -> Codex

默认目标目录:

  • Claude Code:CLAUDE_CONFIG_DIRCLAUDE_HOME~/.claude
  • Codex:CODEX_HOME~/.codex

可用 SESSION_WEAVER_CLAUDE_HOMESESSION_WEAVER_CODEX_HOME 覆盖。

按文件迁移

sw tc ./source.jsonl -o ./tmp/claude-home

命令完成后会打印新会话 ID、保存位置和恢复命令。默认不会自动启动客户端;显式传入 --open 才会启动。

迁移前检查

sw ok claude <SESSION_ID>
sw ok codex ./rollout.jsonl --json

查看本机会话

sw ls claude
sw ls codex --json
sw show codex <SESSION_ID>

便携包

便携包先把原生会话解析为 Session Weaver 的类型化模型,再保存版本和摘要,不是简单复制 原始 JSONL。

sw pack claude <SESSION_ID> ./session.sw.json
sw unpack codex ./session.sw.json

导入时会验证 schema、版本和 SHA-256 摘要。摘要不一致时拒绝写入。

命令

命令 用途
tc / to-claude Codex -> Claude Code
tx / to-codex Claude Code -> Codex
ls 扫描本机 Claude/Codex 会话
show 查看会话元数据和事件数量
ok 执行语义与目标兼容检查
pack 导出 Session Weaver 便携包
unpack 从便携包生成原生会话
env 查看 Rust、客户端版本和存储根目录
move / scan / inspect / check / export / import / doctor 兼容旧脚本的完整命令

完整参数:

sw --help
sw tc --help

数据安全

  • 默认不删除源会话。
  • 已存在目标默认拒绝覆盖。
  • --overwrite 覆盖前创建带时间戳的备份。
  • 主会话先写临时文件、flush、sync,再原子重命名。
  • 目标写入后重新解析,失败则报告目标验证错误。
  • SQLite 使用事务并先探测当前表字段。
  • 工具不迁移账号、API Key、OAuth 凭证或计费数据。

会话内容可能包含源码、密钥、个人信息和终端输出。提交 Issue 时只上传最小、脱敏的复现 数据,不要公开真实会话。

当前边界

  • 首个版本只支持 Claude Code 与 Codex。
  • 不迁移 Claude 子代理目录、shell snapshot、缓存或客户端账号状态。
  • Codex 加密推理内容和客户端专有计费字段不进入便携模型。
  • 未知内容块会尽量保留;无法安全表达的块会产生诊断。
  • 真实兼容性基于测试报告中的明确客户端版本,不代表未来版本永久兼容。

测试

cargo fmt --all --check
cargo clippy --all-targets -- -D warnings
cargo test --all-targets

测试覆盖模型、字段校验、解析、生成、CLI、路径发现、SQLite、便携包、双向往返、随机文本、 损坏输入和真实客户端启动探测。

详细结果见 测试报告

参与贡献

欢迎提交新客户端版本的脱敏夹具、兼容问题和平台测试结果。开始前请阅读 CONTRIBUTING.mdSECURITY.md

路线图:

  • 扩大 Claude/Codex 历史版本夹具矩阵。
  • 增加结构化迁移差异报告。
  • 提供可审计的兼容规则版本表。
  • 评估更多本地 AI 编程客户端。

许可证

Session Weaver Non-Commercial Source License。本项目允许个人、教育、研究和评估等非商业用途;未经版权持有人书面许可,不允许商业使用。

About

安全迁移 Claude Code 与 Codex 会话,自动校验并修复兼容问题

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors