세션 관리 및 압축 (심층 분석)

이 문서는 OpenClaw이 세션을 종단 간으로 관리하는 방법을 설명합니다:

  • 세션 라우팅 (인바운드 메시지가 sessionKey에 매핑되는 방법)
  • 세션 저장소 (sessions.json) 및 추적 내용
  • 트랜스크립트 지속성 (*.jsonl) 및 구조
  • 트랜스크립트 위생 (실행 전 프로바이더별 수정)
  • 컨텍스트 한도 (컨텍스트 창 vs 추적 토큰)
  • 압축 (수동 + 자동 압축) 및 사전 압축 작업 연결 지점
  • 조용한 관리 (사용자에게 보이는 출력을 생성하지 않아야 하는 메모리 쓰기 등)

진실의 원천: Gateway

OpenClaw은 세션 상태를 소유하는 단일 Gateway 프로세스를 중심으로 설계되었습니다.

두 가지 지속성 레이어

  1. 세션 저장소 (sessions.json) - 키/값 맵: sessionKey -> SessionEntry
  2. 트랜스크립트 (<sessionId>.jsonl) - 트리 구조의 추가 전용 트랜스크립트

압축: 개요

압축은 오래된 대화를 트랜스크립트의 지속된 compaction 항목으로 요약하고 최근 메시지를 그대로 유지합니다.

압축은 영구적입니다 (세션 프루닝과 달리).

사전 압축 “메모리 플러시” (구현됨)

목표: 자동 압축이 발생하기 전에, 내구성 상태를 디스크에 쓰는(예: 에이전트 워크스페이스의 memory/YYYY-MM-DD.md) 조용한 에이전트 턴을 실행하여 압축이 중요한 컨텍스트를 삭제하지 못하도록 합니다.

설정 (agents.defaults.compaction.memoryFlush):

  • enabled (기본: true)
  • softThresholdTokens (기본: 4000)
  • prompt (플러시 턴을 위한 사용자 메시지)
  • systemPrompt (플러시 턴에 추가되는 추가 시스템 프롬프트)