Skip to content

会话日志 (Sessions) ​

字数
513 字
阅读时间
3 分钟

ctx.sessions(由 @chatluna/session 提供)是仅追加(append-only)会话日志的底层服务入口。在处理常规业务逻辑时,通常建议优先使用上层的 Conversations。

服务 ​

你可以通过 ctx.sessions 调用以下服务级方法:

方法作用
open(id, { seed?, meta?, store? })打开已有会话;若不存在则按 seed 创建
create(id?, options)新建会话并返回 Session 实例
branch(parent, at, options)从父会话的指定条目位置创建分支
list({ cursor?, limit? })分页列出会话头
head(id, store?)读取会话头信息(header 与 length)
delete(id, store?)删除指定会话
define(name, schema)注册条目类型的载荷 schema
releaseIfEphemeral(id)释放指定的临时会话

Session 句柄 ​

通过 open 或 create 获取到 Session 实例后,可以访问以下属性和方法:

成员作用
header / id / length会话元信息与当前长度
entries(from?) / messages()读取日志条目及展开后的消息列表
push(...) / commit(input) / write(inputs)追加日志条目
compact(input)写入历史压缩切点
branch(at, options)从当前会话分叉出新的 Session 实例
draft / setDraft(message)访问或更新未提交的消息草稿
reconstructRequest(at)还原指定位置的历史请求
checkInvariants()检查会话数据一致性(仅做检查,不自动修复)
onEntry / onDraft订阅条目追加与草稿变更事件

条目与存储 ​

所有条目类型都必须先通过 define 注册载荷 schema,在实际写入前会自动校验 JSON 合法性。

底层存储通过 put(id, expectedN, entries) 实现乐观并发控制:当版本不匹配时会抛出冲突错误,避免意外覆盖已有数据。

会话的 header 包含了 parent、at、delegationDepth、title、origin 等元数据。在执行会话分叉时,系统会自动复制指定切点之前的所有历史条目。

继续 ​

页面历史

在 CC-BY-SA-4.0 许可下发布