Appearance
OpenClaw 历史会话搜不到:memory indexer 跳过 .jsonl.reset 和 .jsonl.deleted 文件
问题
执行 openclaw memory search 时,大量历史会话内容搜索不到,尤其是那些最重要的长对话历史。
bash
openclaw memory search "上周讨论的架构方案"
# 返回空,但明明有相关历史对话根本原因:listSessionFilesForAgent 函数使用 .filter((name) => name.endsWith(".jsonl")) 过滤文件,这会排除以下两类文件:
.jsonl.reset.*:会话重置归档文件(用户执行/reset或/new后,旧会话内容归档到这里).jsonl.deleted.*:被标记删除的会话文件
这些被排除的文件恰恰包含了大量真实的人机对话历史。一个典型案例中,被排除的 .jsonl.reset.* 文件(56个)总大小 16.2 MB,而被索引的活跃 .jsonl 文件(63个)总大小 23.1 MB,最大的 .reset 文件(6.2 MB)比最大的活跃文件(2.4 MB)还要大 2.5 倍——而这些正是实际的对话内容。
解决方案
强制重建索引(临时方案,仅索引当前活跃 .jsonl 文件):
bash
openclaw memory sync --force这个命令会重建索引,但 .jsonl.reset.* 文件依然不会被包含。
确认搜索是否覆盖了所有文件:
bash
openclaw memory status --deep
# 查看 indexed session files 数量,对比实际 ~/.openclaw/agents/<id>/sessions/ 目录文件数
ls ~/.openclaw/agents/main/sessions/ | wc -l
ls ~/.openclaw/agents/main/sessions/ | grep "\.reset\." | wc -l等待官方修复:这是一个已知 bug,官方需要修改 listSessionFilesForAgent 函数,将 .jsonl.reset.* 和 .jsonl.deleted.* 文件也纳入索引范围。
备份保护:在官方修复前,重要的历史对话建议在执行 /reset 之前手动导出关键内容。