OpenClaw 会话 Header 修复
问题现象
- •session 文件行数始终很少,且每次对话后像是被覆盖
- •
sessions_history只看到 assistant 消息 - •
openclaw doctor提示 sessions missing transcripts
根因
Session JSONL 第一行缺少 type=session 的 header。
OpenClaw 在加载时判定文件无效并重写,导致历史丢失。
处理步骤
- •定位 sessionId 与文件
- •
cat ~/.openclaw/agents/<agentId>/sessions/sessions.json
- •
- •检查 header
- •
head -1 <sessionId>.jsonl必须包含"type":"session"
- •
- •备份并补写 header(建议先确保 gateway 空闲)
bash
SESSION_ID="..."
FILE="/root/.openclaw/agents/<agentId>/sessions/${SESSION_ID}.jsonl"
FIRST_LINE=$(head -1 "$FILE")
if ! echo "$FIRST_LINE" | grep -q '"type":"session"'; then
BACKUP="$FILE.bak.$(date +%s)"
cp "$FILE" "$BACKUP"
HEADER=$(printf '{"type":"session","version":3,"id":"%s","timestamp":"%s","cwd":"/root/openclaw"}' \
"$SESSION_ID" "$(date -Iseconds)")
{ echo "$HEADER"; cat "$BACKUP"; } > "$FILE"
fi
验证
- •发送新消息后,
wc -l <sessionId>.jsonl行数应持续增长 - •
grep '"role":"user"' <sessionId>.jsonl能看到用户消息