Sessions

session.compact()

在本地或远程 Session 中排队执行一次显式历史压缩

session.compact()

session.compact() 用于显式请求压缩当前 Session 历史。

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

await session.compact();
await session.prompt({ query: "基于压缩后的历史继续" });

本地 AgentSession 与远程 RemoteAgentSession 都支持这个方法。

队列语义

await session.compact() 表示 command 已通过校验并进入 Session 有序输入队列,不表示摘要生成和历史重写已经完成。

  • Session 空闲时,command 在下一次 prompt() turn 开始前执行
  • turn 运行中时,command 在下一个 Session step 检查点执行
  • 如果当前 turn 在下一个检查点前结束,command 会保留到下一个 turn
  • compact command、配置 command 和 steer prompt 严格保持入队顺序
  • 单独调用 compact() 不会创建 turn,也不会主动发起 provider 请求

运行中执行 compact 前,SDK 会先收口当前 Assistant 草稿。canonical history 重写完成后,下一次 provider 调用会重新加载历史,不会继续使用压缩前的内存消息。

观察执行结果

压缩过程通过正常的 Session timeline 发布 action message:

  • 准备摘要和归档时为 running
  • canonical history 替换完成后为 completed
  • 模型、composer 或存储操作失败时为 failed

如果当前没有可压缩的 active record,Session 会产生一条 completed action,说明不需要压缩。

调用方通过 subscribe() 观察这些消息;compact() 的返回只表达入队是否成功。

自动压缩与显式压缩

Provider 真实 usage 达到上下文阈值时,自动压缩仍会正常运行。session.compact() 复用同一个 compaction composer、存储事务和 action message,只是向 Session 队列增加一次显式请求。

Summary、Active 历史和恢复行为见 元数据与落盘