Highlights
Incremental memory ingestion. The MetaClaw memory layer no longer waits until session end to extract and persist turns. Instead, turns
are buffered and flushed every N turns (default 5), shrinking the mid-session blackout window and eliminating the O(NΒ²) cost of
re-sending full history on every agent turn.
What's new
Memory layer (metaclaw/memory/manager.py)
- New
buffer_turn(session_id, turn, scope_id=None)β buffers a single turn, auto-flushes whenflush_everyis reached. - New
flush_session(session_id, scope_id=None, final=True)β flushes buffered turns; only emits the working-summary unit and clears
per-session state whenfinal=True. ingest_session_turnsrefactored into shared helpers (_extract_turns_to_units,_build_working_summary_unit,_persist_units).- Per-session state persists across flush boundaries; absolute turn indices preserved via a
turn_offsetparameter.
Config
metaclaw/config.pygainsmemory_flush_every(default5).- Sidecar
SidecarConfigforwards the same value.
Sidecar HTTP (openclaw-metaclaw-memory/sidecar)
- New
POST /buffer_turnβ returns{flushed, added}. - New
POST /flush_sessionβ returns{added}. - Proxy now routes
/v1/memory/buffer_turnand/v1/memory/flush_session.
OpenClaw plugin (openclaw-metaclaw-memory/src)
client.tsaddsbufferTurnandflushSession.types.tsaddsBufferTurnResponseandFlushSessionResponse.hooks/auto-capture.tsrewritten: tracks per-session turn count in a module-levelMap, soagent_endonly forwards the new delta via
bufferTurn.session_endcallsflushSession(final=true)and drops the tracker.
Upgrade notes
- No migration required β the legacy
/ingestendpoint andingest_session_turnsAPI are unchanged. - To opt in from the plugin, rebuild
openclaw-metaclaw-memory(npm run build) and redeploy. - Tune
memory_flush_everyviaSidecarConfig.flush_everyif you want a different flush cadence.