Oturum Yönetimi ve Sıkıştırma (Derinlemesine İnceleme)¶
Bu belge, OpenClaw’ın oturumları uçtan uca nasıl yönettiğini açıklar:
- Oturum yönlendirme (gelen mesajların bir
sessionKeyile nasıl eşlendiği) - Oturum deposu (
sessions.json) ve neyi izlediği - Transkript kalıcılığı (
*.jsonl) ve yapısı - Transkript hijyeni (çalıştırmalar öncesinde sağlayıcıya özgü düzeltmeler)
- Bağlam sınırları (bağlam penceresi ile izlenen token’lar)
- Sıkıştırma (manuel + otomatik sıkıştırma) ve ön sıkıştırma çalışmalarının nereye bağlanacağı
- Sessiz bakım işleri (örn. kullanıcıya görünür çıktı üretmemesi gereken bellek yazımları)
Önce daha üst düzey bir genel bakış istiyorsanız, şuradan başlayın:
Tek doğruluk kaynağı: Gateway¶
OpenClaw, oturum durumunun sahibi olan tek bir Gateway süreci etrafında tasarlanmıştır.
- UI’ler (macOS uygulaması, web Control UI, TUI) oturum listeleri ve token sayıları için Gateway’i sorgulamalıdır.
- Uzak modda, oturum dosyaları uzak ana makinededir; “yerel Mac dosyalarınızı kontrol etmek” Gateway’in kullandıklarını yansıtmaz.
İki kalıcılık katmanı¶
OpenClaw, oturumları iki katmanda kalıcı hale getirir:
-
Oturum deposu (
sessions.json) - Anahtar/değer haritası:sessionKey -> SessionEntry- Küçük, değiştirilebilir, düzenlemesi (veya girdileri silmesi) güvenlidir - Oturum meta verilerini izler (geçerli oturum kimliği, son etkinlik, anahtarlar, token sayaçları vb.) -
Transkript (
<sessionId>.jsonl) - Ağaç yapılı, yalnızca eklemeli transkript (girdilerid+parentIdiçerir) - Gerçek konuşmayı + araç çağrılarını + sıkıştırma özetlerini depolar - Gelecek turlar için model bağlamını yeniden oluşturmakta kullanılır
Disk üzerindeki konumlar¶
Gateway ana makinesinde, ajan başına:
- Depo:
~/.openclaw/agents/<agentId>/sessions/sessions.json - Transkriptler:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl - Telegram konu oturumları:
.../<sessionId>-topic-<threadId>.jsonl
OpenClaw bunları src/config/sessions.ts üzerinden çözümler.
Oturum anahtarları (sessionKey)¶
Bir sessionKey, hangi konuşma kovasında olduğunuzu (yönlendirme + yalıtım) tanımlar.
Yaygın kalıplar:
- Ana/doğrudan sohbet (ajan başına):
agent:<agentId>:<mainKey>(varsayılanmain) - Grup:
agent:<agentId>:<channel>:group:<id> - Oda/kanal (Discord/Slack):
agent:<agentId>:<channel>:channel:<id>veya...:room:<id> - Cron:
cron:<job.id> - Webhook:
hook:<uuid>(aksi belirtilmedikçe)
Kanonik kurallar /concepts/session adresinde belgelenmiştir.
Oturum kimlikleri (sessionId)¶
Her sessionKey, geçerli bir sessionId’e (konuşmayı sürdüren transkript dosyası) işaret eder.
Pratik kurallar:
- Sıfırlama (
/new,/reset), busessionKeyiçin yeni birsessionIdoluşturur. - Günlük sıfırlama (Gateway ana makinesinde varsayılan yerel saatle 04:00), sıfırlama sınırından sonraki ilk mesajda yeni bir
sessionIdoluşturur. - Boşta kalma süresi dolumu (
session.reset.idleMinutesveya eskisession.idleMinutes), boşta penceresinden sonra bir mesaj geldiğinde yeni birsessionIdoluşturur. Günlük + boşta birlikte yapılandırıldığında, önce süresi dolan kazanır.
Uygulama detayı: karar, src/auto-reply/reply/session.ts içindeki initSessionState()’te verilir.
Oturum deposu şeması (sessions.json)¶
Deponun değer türü, src/config/sessions.ts içindeki SessionEntry’dır.
Temel alanlar (kapsamlı değildir):
sessionId: geçerli transkript kimliği (dosya adı,sessionFileayarlanmadıkça buradan türetilir)updatedAt: son etkinlik zaman damgasısessionFile: isteğe bağlı açık transkript yol geçersiz kılmachatType:direct | group | room(UI’lere ve gönderim politikasına yardımcı olur)provider,subject,room,space,displayName: grup/kanal etiketleme için meta veriler- Anahtarlar:
thinkingLevel,verboseLevel,reasoningLevel,elevatedLevelsendPolicy(oturum başına geçersiz kılma)- Model seçimi:
providerOverride,modelOverride,authProfileOverride- Token sayaçları (en iyi çaba / sağlayıcıya bağlı):
inputTokens,outputTokens,totalTokens,contextTokenscompactionCount: bu oturum anahtarı için otomatik sıkıştırmanın kaç kez tamamlandığımemoryFlushAt: son ön sıkıştırma bellek boşaltmasının zaman damgasımemoryFlushCompactionCount: son boşaltmanın çalıştığı sıradaki sıkıştırma sayısı
Depo düzenlenmesi güvenlidir; ancak otorite Gateway’dir: oturumlar çalıştıkça girdileri yeniden yazabilir veya yeniden doldurabilir.
Transkript yapısı (*.jsonl)¶
Transkriptler, @mariozechner/pi-coding-agent’in SessionManager’i tarafından yönetilir.
Dosya JSONL’dir:
- İlk satır: oturum başlığı (
type: "session";id,cwd,timestamp, isteğe bağlıparentSessioniçerir) - Sonrasında:
id+parentId(ağaç) ile oturum girdileri
Öne çıkan girdi türleri:
message: kullanıcı/asistan/toolResult mesajlarıcustom_message: modele bağlama giren uzantı tarafından enjekte edilen mesajlar (UI’den gizlenebilir)custom: modele bağlama girmeyen uzantı durumucompaction:firstKeptEntryIdvetokensBeforeiçeren kalıcı sıkıştırma özetibranch_summary: ağaç dalında gezinirken kalıcı özet
OpenClaw, transkriptleri kasıtlı olarak “düzeltmez”; Gateway, onları okumak/yazmak için SessionManager’i kullanır.
Bağlam pencereleri ve izlenen token’lar¶
İki farklı kavram önemlidir:
- Model bağlam penceresi: model başına katı üst sınır (modelin görebildiği token’lar)
- Oturum deposu sayaçları:
sessions.jsoniçine yazılan döngüsel istatistikler (/status ve panolar için kullanılır)
Sınırları ayarlarken:
- Bağlam penceresi, model kataloğundan gelir (ve yapılandırma ile geçersiz kılınabilir).
- Depodaki
contextTokens, çalışma zamanı tahmini/raporlama değeridir; katı bir garanti olarak ele almayın.
Daha fazlası için bkz. /token-use.
Compaction: what it is¶
Sıkıştırma, daha eski konuşmayı transkriptte kalıcı bir compaction girdisi olarak özetler ve yakın mesajları olduğu gibi bırakır.
Sıkıştırmadan sonra, gelecek turlar şunları görür:
- Sıkıştırma özeti
firstKeptEntryId’ten sonraki mesajlar
Compaction is persistent (unlike session pruning). /concepts/session-pruning.
Otomatik sıkıştırma ne zaman olur (Pi çalışma zamanı)¶
Gömülü Pi ajanında, otomatik sıkıştırma iki durumda tetiklenir:
- Taşma kurtarma: model bağlam taşması hatası döndürür → sıkıştır → yeniden dene.
- Eşik bakımı: başarılı bir turdan sonra, şu koşulda:
contextTokens > contextWindow - reserveTokens
Burada:
contextWindow, modelin bağlam penceresidirreserveTokens, istemler + bir sonraki model çıktısı için ayrılan baş boşluktur
Bunlar Pi çalışma zamanı semantikleridir (OpenClaw olayları tüketir, ancak ne zaman sıkıştırılacağına Pi karar verir).
Sıkıştırma ayarları (reserveTokens, keepRecentTokens)¶
Pi’nin sıkıştırma ayarları Pi ayarlarında yer alır:
{
compaction: {
enabled: true,
reserveTokens: 16384,
keepRecentTokens: 20000,
},
}
OpenClaw ayrıca gömülü çalıştırmalar için bir güvenlik tabanı uygular:
compaction.reserveTokens < reserveTokensFloorise, OpenClaw yükseltir.- Varsayılan taban
20000token’dır. - Tabanı devre dışı bırakmak için
agents.defaults.compaction.reserveTokensFloor: 0ayarlayın. - Zaten daha yüksekse, OpenClaw dokunmaz.
Neden: sıkıştırma kaçınılmaz hale gelmeden önce çok turlu “bakım işleri” (bellek yazımları gibi) için yeterli baş boşluğu bırakmak.
Uygulama: src/agents/pi-settings.ts içindeki ensurePiCompactionReserveTokens()
(src/agents/pi-embedded-runner.ts’dan çağrılır).
Kullanıcıya görünen yüzeyler¶
Sıkıştırmayı ve oturum durumunu şuradan gözlemleyebilirsiniz:
/status(herhangi bir sohbet oturumunda)openclaw status(CLI)openclaw sessions/sessions --json- Ayrıntılı mod:
🧹 Auto-compaction complete+ sıkıştırma sayısı
Sessiz bakım işleri (NO_REPLY)¶
OpenClaw, kullanıcının ara çıktıları görmemesi gereken arka plan görevleri için “sessiz” turları destekler.
Convention:
- Asistan çıktısına “kullanıcıya yanıt teslim etme” anlamına gelen
NO_REPLYile başlar. - OpenClaw, teslim katmanında bunu ayıklar/bastırır.
2026.1.10 itibarıyla, OpenClaw ayrıca bir kısmi parça NO_REPLY ile başladığında taslak/yazıyor akışını da bastırır; böylece sessiz işlemler tur ortasında kısmi çıktı sızdırmaz.
Ön sıkıştırma “bellek boşaltma” (uygulandı)¶
Amaç: otomatik sıkıştırma gerçekleşmeden önce, kalıcı durumu diske yazan sessiz, ajan temelli bir tur çalıştırmak (örn. ajan çalışma alanındaki memory/YYYY-MM-DD.md) ki sıkıştırma kritik bağlamı silemesin.
OpenClaw eşik öncesi boşaltma yaklaşımını kullanır:
- Monitor session context usage.
- “Yumuşak eşik” (Pi’nin sıkıştırma eşiğinin altında) aşıldığında, ajana sessiz bir “şimdi belleği yaz” yönergesi çalıştırır.
- Kullanıcının hiçbir şey görmemesi için
NO_REPLYkullanılır.
Yapılandırma (agents.defaults.compaction.memoryFlush):
enabled(varsayılan:true)softThresholdTokens(varsayılan:4000)prompt(boşaltma turu için kullanıcı mesajı)systemPrompt(boşaltma turu için eklenen ekstra sistem istemi)
Notlar:
- Varsayılan istem/sistem istemi, teslimi bastırmak için bir
NO_REPLYipucu içerir. - Boşaltma, her sıkıştırma döngüsünde bir kez çalışır (
sessions.json’da izlenir). - Boşaltma yalnızca gömülü Pi oturumları için çalışır (CLI arka uçları atlar).
- Oturum çalışma alanı salt okunur olduğunda boşaltma atlanır (
workspaceAccess: "ro"veya"none"). - Çalışma alanı dosya düzeni ve yazma kalıpları için bkz. Memory.
Pi, uzantı API’sinde bir session_before_compact kancası da sunar; ancak OpenClaw’ın
boşaltma mantığı bugün Gateway tarafında yer alır.
Sorun giderme kontrol listesi¶
- Oturum anahtarı yanlış mı? /concepts/session ile başlayın ve
/statusiçindekisessionKey’ı doğrulayın. - Depo ile transkript uyuşmazlığı mı? Gateway ana makinesini ve
openclaw status’den depo yolunu doğrulayın. - Sıkıştırma spam’i mi? Şunları kontrol edin:
- model bağlam penceresi (çok küçük)
- sıkıştırma ayarları (model penceresi için
reserveTokensçok yüksekse daha erken sıkıştırmaya neden olabilir) - tool-result şişmesi: oturum budamayı etkinleştirin/ayarlayın
- Sessiz turlar sızdırıyor mu? Yanıtın
NO_REPLY(tam belirteç) ile başladığını ve akış bastırma düzeltmesini içeren bir derlemede olduğunuzu doğrulayın.