会话管理
会话保持对话有序。一线程一会话。Moltbot 将每代理一个直聊会话视为主会话。直聊折叠为 agent:<agentId>:<mainKey>(默认 main),群组/频道聊天各有自己的 key。session.mainKey 会被遵守。使用 session.dmScope 控制私信如何分组:
main(默认):所有私信共享主会话以保持连贯。per-peer:按发送者 id 跨频道隔离。per-channel-peer:按频道 + 发送者隔离(推荐多用户收件箱)。per-account-channel-peer:按账户 + 频道 + 发送者隔离(推荐多账户收件箱)。
使用 session.identityLinks 将带提供商前缀的 peer id 映射到规范身份,以便同一人在使用 per-peer、per-channel-peer 或 per-account-channel-peer 时跨频道共享同一私信会话。
网关为唯一真实来源
所有会话状态由网关(「主」Moltbot)持有。UI 客户端(macOS 应用、WebChat 等)必须向网关查询会话列表与 token 计数,而非读取本地文件。远程模式下,你关心的会话存储位于远程网关主机,而非你的 Mac。UI 中显示的 token 计数来自网关存储字段(inputTokens、outputTokens、totalTokens、contextTokens);客户端不会解析 JSONL 记录来「修正」总数。
状态存放位置
在网关主机上:存储文件:~/.clawdbot/agents/<agentId>/sessions/sessions.json(每代理)。记录:~/.clawdbot/agents/<agentId>/sessions/<SessionId>.jsonl(Telegram 主题会话使用 .../<SessionId>-topic-<threadId>.jsonl)。存储为映射 sessionKey -> { sessionId, updatedAt, ... }。删除条目是安全的;会按需重建。群组条目可包含 displayName、channel、subject、room、space 以便在 UI 中标注会话。会话条目包含 origin 元数据(标签与路由提示)以便 UI 说明会话来源。Moltbot 不会读取旧版 Pi/Tau 会话目录。
会话修剪
Moltbot 默认在 LLM 调用前从内存上下文中修剪旧工具结果。这不会重写 JSONL 历史。见 会话修剪。
压缩前内存刷新
当会话接近自动压缩时,Moltbot 可运行静默内存刷新轮次,提醒模型在上下文被压缩前将持久笔记写入磁盘。仅在工作区可写时运行。见 内存 与 压缩。
传输到会话键的映射
直聊遵循 session.dmScope(默认 main)。main:agent:<agentId>:<mainKey>(跨设备/频道连贯)。多个电话号码与频道可映射到同一代理主 key;它们作为同一对话的传输入口。per-peer:agent:<agentId>:dm:<peerId>。per-channel-peer:agent:<agentId>:<channel>:dm:<peerId>。per-account-channel-peer:agent:<agentId>:<channel>:<accountId>:dm:<peerId>(accountId 默认 default)。若 session.identityLinks 匹配带提供商前缀的 peer id(如 telegram:123),规范 key 会替换 <peerId>,使同一人跨频道共享会话。群聊隔离状态:agent:<agentId>:<channel>:group:<id>(房间/频道使用 agent:<agentId>:<channel>:channel:<id>)。Telegram 论坛主题在群组 id 后追加 :topic:<threadId> 以隔离。更多映射与 Cron/钩子/节点会话 key 见英文文档。