Sessions

分叉 Session

从完整历史或指定 Message 创建可独立继续执行的新 Session

分叉 Session

session.fork() 从当前 Session 的历史创建一个独立的新 Session。分叉后的后续输入、模型执行、工具状态与审批都彼此隔离。

const full_branch = await session.fork();

const branch_at_message = await session.fork({
  messageId: "assistant:repo-analysis:abc",
});

也可以直接传入 messageId 字符串:

const branch = await session.fork("assistant:repo-analysis:abc");

两种边界

调用复制范围
fork()当前可见历史的完整状态
fork({ messageId })从开头复制到该 Message,包含该 Message

分叉点是顶层 Message,不是 Assistant 内的 part_id。如果需要在工具调用前后试验不同方向,先在 messages() 中找到对应 Assistant Message 的 message_id

来源与顺序

复制进新 Session 的 Message 保留新的 Session 身份和新的线性顺序,同时可携带 origin,记录来源的 session_idmessage_idturn_id。这使分叉可追溯,但分叉后两个 Session 不共享可变状态。

不要把分叉理解为“两个窗口共同编辑一份历史”。源 Session 的后续 Message 不会自动出现到分叉中,分叉的后续 Message 也不会回写源 Session。

适合的场景

  • 在保留主线结论的前提下比较两种实现方案。
  • 从某一条用户输入重新提问,避免后续上下文干扰。
  • 为长任务建立实验支线,而不污染主会话。

分叉后按普通 Session 使用:加载 messages()、建立 subscribe(),然后调用 prompt()。不需要复制 Mutation,也不应该复制源 Session 的 pending approval。