Sessions

Session 总览

Session 的职责、生命周期,以及本地和远程模式的统一使用方式

Session 总览

Agent 负责组装工具、plugin、配置和存储位置。模型由宿主在执行前注入;真正承载一次连续对话、历史、流式输出与工具审批的是 Session

一个 Session 是一条持久化的、线性有序的 Message 序列。你可以离开进程后重新 get() 它,也可以在本地 AgentRemoteAgent 之间复用几乎相同的调用方式。

先记住这条主线

create / get
-> 读取 messages() 初始快照
-> subscribe() 实时变化
-> prompt() 返回 turn handle
-> 处理 delta、part、approval
-> await turn.finished
-> 需要时 stop()、fork() 或 archive()

订阅要在 prompt() 前建立。它只发送建立订阅之后的 Mutation,不会补发已经发生的流式输出。

一个完整的本地例子

const session = await agent.sessions.create({
  sessionId: "repo-analysis",
});

await session.set({ model });

const initial_page = await session.messages();
render_messages(initial_page.items);

const unsubscribe = session.subscribe((mutation) => {
  apply_mutation_to_ui(mutation);

  if (
    mutation.variant === "part" &&
    mutation.type === "tool" &&
    mutation.part.state === "approval-required" &&
    mutation.part.approval
  ) {
    show_approval_request(mutation.part.approval);
  }
});

const turn = await session.prompt({ query: "分析这个仓库的 Session 设计" });
const result = await turn.finished;

if (!result.success) {
  show_error(result.error || "Turn failed");
}

unsubscribe();

apply_mutation_to_ui() 应按 message_id + revision 合并完整快照;对 delta 只追加增量文本。完整做法见 实时订阅重连与同步

Session 里有哪些对象

对象作用什么时候使用
SessionMessage持久化历史的唯一模型首次加载、重连、历史浏览
SessionMutation订阅后的实时变化协议流式渲染、工具状态、标题更新
TurnHandle一次输入归属的执行句柄等待最终结果、停止后检查结果
SessionApproval当前 Session 的待审批工具请求审批页、后台处理

Message 和 Mutation 不要混用:Message 是可恢复的状态快照;Mutation 是把状态变化及时送到客户端的协议。

本地与远程的差异

两者都有 prompt()stop()compact()subscribe()messages()approvals()fork()。模型配置边界如下:

场景配置模型
本地 AgentSessionsession.set({ model }),只接收运行时模型实例
RemoteAgentSession不提供模型配置方法;远程客户端只执行 Session
Downcity Agent 项目City 保存 execution.modelId 和 Session 覆盖,并在每轮执行前注入模型实例

远程客户端不参与模型选择;模型 ID、默认值和恢复策略都属于服务端宿主。

API 地图

  • 管理会话:agent.sessions.create/get/list/archive/archived/clean_archive()
  • 输入与完成:session.prompt()turn.finished
  • 读取与实时:session.messages()session.get_info()session.subscribe()
  • 运行控制:session.stop()session.set()session.compact()session.fork()
  • 工具审批:session.approvals()session.resolve_approval()session.approval_mode()
  • 调试上下文:session.system()元数据与落盘

下一步

先从 管理 Session 建立会话,再阅读 输入与 TurnMessage