Как проявляется
memoryFlush запускается только на каждом втором цикле автокомпактации, пропуская промежуточные.
Из-за чего возникает
После выполнения memoryFlush и компактации оба счетчика (compactionCount и memoryFlushCompactionCount) устанавливаются в одинаковое значение, из-за чего следующий вызов memoryFlush пропускается, так как проверка считает, что сброс уже был выполнен.
Как исправить
- Найдите в коде место, где происходит обновление memoryFlushCompactionCount после инкремента compactionCount (например, в agent-runner-memory.ts).
- Измените логику так, чтобы memoryFlushCompactionCount сохранял значение до инкремента, а не после.
Пример исправления из PR #51421:
const nextCount = await incrementCompactionCount({ ... });
// УБРАТЬ или закомментировать обновление memoryFlushCompactionCount = nextCount;
// Вместо этого сохранить предыдущее значение, чтобы не синхронизировать счетчики
- Пересоберите и перезапустите OpenClaw.
- Проверьте, что memoryFlush теперь срабатывает перед каждой автокомпактацией, а не через раз.
Как не столкнуться снова
Следите за тем, чтобы счетчики вызовов memoryFlush и компактации не синхронизировались, иначе сброс памяти будет пропускаться.
Источник
Разбор основан на обсуждении в репозитории проекта: issue #12590.
Другие типичные проблемы — в разделе ошибок и решений, а базовая настройка разобрана в первом запуске.