Technical reference
Oturum yönetimi derinlemesine inceleme
OpenClaw, oturumları bu alanlarda uçtan uca yönetir:
- Oturum yönlendirme (gelen iletilerin bir
sessionKeyile nasıl eşleştiği) - Oturum deposu (
sessions.json) ve neleri izlediği - Transkript kalıcılığı (
*.jsonl) ve yapısı - Transkript hijyeni (çalıştırmalardan önce sağlayıcıya özgü düzeltmeler)
- Bağlam sınırları (bağlam penceresi ve izlenen token'lar)
- Compaction (elle ve otomatik Compaction) ve Compaction öncesi işlerin nereye bağlanacağı
- Sessiz bakım (kullanıcıya görünür çıktı üretmemesi gereken bellek yazmaları)
Önce daha üst düzey bir genel bakış istiyorsanız şunlarla başlayın:
Doğruluk kaynağı: Gateway
OpenClaw, oturum durumunun sahibi olan tek bir Gateway süreci etrafında tasarlanmıştır.
- UI'lar (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 ne kullandığını yansıtmaz.
İki kalıcılık katmanı
OpenClaw oturumları iki katmanda kalıcı hale getirir:
-
Oturum deposu (
sessions.json)- Anahtar/değer eşlemesi:
sessionKey -> SessionEntry - Küçük, değiştirilebilir, düzenlemesi (veya girdileri silmesi) güvenli
- Oturum meta verilerini izler (geçerli oturum kimliği, son etkinlik, geçişler, token sayaçları vb.)
- Anahtar/değer eşlemesi:
-
Transkript (
<sessionId>.jsonl)- Ağaç yapılı, yalnızca eklemeli transkript (girdiler
id+parentIdiçerir) - Gerçek konuşmayı + araç çağrılarını + Compaction özetlerini depolar
- Gelecekteki turlar için model bağlamını yeniden oluşturmak üzere kullanılır
- Compaction kontrol noktaları, sıkıştırılmış ardıl transkript üzerinde meta verilerdir. Yeni Compaction'lar ikinci bir
.checkpoint.*.jsonlkopyası yazmaz.
- Ağaç yapılı, yalnızca eklemeli transkript (girdiler
Gateway geçmiş okuyucuları, yüzey açıkça rastgele geçmiş erişimine ihtiyaç duymadıkça
tüm transkripti belleğe almaktan kaçınmalıdır. İlk sayfa geçmişi,
gömülü sohbet geçmişi, yeniden başlatma kurtarması ve token/kullanım kontrolleri sınırlı kuyruk
okumaları kullanır. Tam transkript taramaları, dosya yolu artı mtimeMs/size ile
önbelleğe alınan ve eşzamanlı okuyucular arasında paylaşılan asenkron transkript dizini üzerinden geçer.
Disk üzerindeki konumlar
Gateway ana makinesinde, her ajan için:
- Depo:
~/.openclaw/agents/<agentId>/sessions/sessions.json - Transkriptler:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl- Telegram konu oturumları:
.../<sessionId>-topic-<threadId>.jsonl
- Telegram konu oturumları:
OpenClaw bunları src/config/sessions.ts aracılığıyla çözümler.
Depo bakımı ve disk denetimleri
Oturum kalıcılığında sessions.json, transkript yapıtları ve trajectory yan dosyaları için otomatik bakım denetimleri (session.maintenance) vardır:
mode:enforce(varsayılan) veyawarnpruneAfter: eski girdi yaş sınırı (varsayılan30d)maxEntries:sessions.jsoniçindeki girdileri sınırlar (varsayılan500)- Kısa ömürlü Gateway model çalıştırma probe saklama süresi sabit olarak
24hdeğerindedir, ancak baskıya bağlıdır: eski katı probe satırlarını yalnızca oturum girdisi bakım/sınır baskısına ulaşıldığında kaldırır. Bu yalnızcaagent:*:explicit:model-run-<uuid>ile eşleşen katı açık probe anahtarları için geçerlidir ve çalıştığında genel eski girdi temizliği/sınırlamasından önce çalışır. resetArchiveRetention:*.reset.<timestamp>transkript arşivleri için saklama süresi (varsayılan:pruneAfterile aynı;falsetemizliği devre dışı bırakır)maxDiskBytes: isteğe bağlı oturumlar dizini bütçesihighWaterBytes: temizlik sonrası isteğe bağlı hedef (varsayılanmaxDiskBytesdeğerinin%80'i)
Normal Gateway yazmaları, süreç içi değişiklikleri bir çalışma zamanı dosya kilidi almadan seri hale getiren depo başına bir oturum yazıcısından geçer. Sıcak yol yama yardımcıları, bu yazıcı yuvasını tuttukları sırada doğrulanmış değiştirilebilir önbelleği ödünç alır; böylece büyük sessions.json dosyaları her meta veri güncellemesi için klonlanmaz veya yeniden okunmaz. Çalışma zamanı kodu updateSessionStore(...) veya updateSessionStoreEntry(...) kullanmayı tercih etmelidir; doğrudan tüm depo kaydetmeleri uyumluluk ve çevrimdışı bakım araçlarıdır. Bir Gateway erişilebilir olduğunda, dry-run olmayan openclaw sessions cleanup ve openclaw agents delete, depo değişikliklerini Gateway'e devreder; böylece temizlik aynı yazıcı kuyruğuna katılır. --store <path>, doğrudan dosya bakımı için açık çevrimdışı onarım yoludur. maxEntries temizliği üretim boyutlu sınırlar için hâlâ toplu yapılır; bu nedenle bir depo, bir sonraki yüksek su seviyesi temizliği onu tekrar aşağı çekmeden önce yapılandırılmış sınırı kısa süreliğine aşabilir. Oturum deposu okumaları, Gateway başlangıcı sırasında girdileri budamaz veya sınırlamaz; temizlik için yazmaları ya da openclaw sessions cleanup --enforce kullanın. openclaw sessions cleanup --enforce, disk bütçesi yapılandırılmamış olsa bile yapılandırılmış sınırı yine hemen uygular ve eski başvurulmayan transkript, kontrol noktası ve trajectory yapıtlarını budar.
Bakım, grup oturumları ve iş parçacığı kapsamlı sohbet oturumları gibi kalıcı dış konuşma işaretçilerini korur,
ancak cron, hook'lar, Heartbeat, ACP ve alt ajanlara yönelik sentetik çalışma zamanı girdileri
yapılandırılmış yaş, sayı veya disk bütçesini aştıklarında yine de kaldırılabilir. Gateway model çalıştırma probe oturumları, yalnızca anahtarları tam olarak
agent:*:explicit:model-run-<uuid> ile eşleştiğinde ayrı 24h model çalıştırma saklamasını kullanır; diğer açık oturumlar
bu saklamanın parçası değildir. Model çalıştırma temizliği yalnızca oturum girdisi sınırı
baskısı altında uygulanır. Yalıtılmış cron çalıştırmaları, model çalıştırma probe saklamasından bağımsız olarak kendi cron.sessionRetention denetimini korur.
OpenClaw artık Gateway yazmaları sırasında otomatik sessions.json.bak.* döndürme yedekleri oluşturmaz. Eski session.maintenance.rotateBytes anahtarı yok sayılır ve openclaw doctor --fix onu eski yapılandırmalardan kaldırır.
Transkript değişiklikleri, transkript dosyasında bir oturum yazma kilidi kullanır. Kilit alma,
meşgul oturum hatası gösterilmeden önce session.writeLock.acquireTimeoutMs kadar bekler; varsayılan 60000
ms'dir. Bunu yalnızca meşru hazırlık, temizlik, Compaction veya transkript yansıtma işleri
yavaş makinelerde daha uzun süre çakıştığında artırın. session.writeLock.staleMs, mevcut bir kilidin
ne zaman eski sayılarak geri alınabileceğini denetler; varsayılan 1800000 ms'dir. session.writeLock.maxHoldMs, süreç içi
watchdog serbest bırakma eşiğini denetler; varsayılan 300000 ms'dir. Acil durum env geçersiz kılmaları
OPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS, OPENCLAW_SESSION_WRITE_LOCK_STALE_MS ve
OPENCLAW_SESSION_WRITE_LOCK_MAX_HOLD_MS değerleridir.
Disk bütçesi temizliği için zorlama sırası (mode: "enforce"):
- Önce en eski arşivlenmiş, sahipsiz transkript veya sahipsiz trajectory yapıtlarını kaldır.
- Hâlâ hedefin üzerindeyse, en eski oturum girdilerini ve onların transkript/trajectory dosyalarını çıkar.
- Kullanım
highWaterBytesdeğerinde veya altında olana kadar devam et.
mode: "warn" içinde OpenClaw olası çıkarmaları bildirir ancak depoyu/dosyaları değiştirmez.
Bakımı isteğe bağlı çalıştırın:
openclaw sessions cleanup --dry-runopenclaw sessions cleanup --enforceCron oturumları ve çalıştırma günlükleri
Yalıtılmış cron çalıştırmaları da oturum girdileri/transkriptler oluşturur ve bunların özel saklama denetimleri vardır:
cron.sessionRetention(varsayılan24h), eski yalıtılmış cron çalıştırma oturumlarını oturum deposundan budar (falsedevre dışı bırakır).cron.runLog.keepLines, cron işi başına saklanan SQLite çalıştırma geçmişi satırlarını budar (varsayılan:2000).cron.runLog.maxBytes, eski dosya destekli çalıştırma günlükleri için kabul edilmeye devam eder.
Cron zorla yeni bir yalıtılmış çalıştırma oturumu oluşturduğunda, yeni satırı yazmadan önce önceki
cron:<jobId> oturum girdisini temizler. Düşünme/hızlı/ayrıntılı ayarları, etiketler ve açıkça
kullanıcı tarafından seçilmiş model/auth geçersiz kılmaları gibi güvenli
tercihleri taşır. Yeni bir yalıtılmış çalıştırmanın eski bir çalıştırmadan bayat teslimat veya
çalışma zamanı yetkisi devralamaması için kanal/grup yönlendirme, gönderme veya kuyruk ilkesi,
yükseltme, kaynak ve ACP çalışma zamanı bağlaması gibi ortam konuşma bağlamını bırakır.
Oturum anahtarları (sessionKey)
Bir sessionKey, hangi konuşma kovasında olduğunuzu tanımlar (yönlendirme + yalıtım).
Yaygın örüntüler:
- 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>(geçersiz kılınmadığı sürece)
Kanonik kurallar /concepts/session adresinde belgelenmiştir.
Oturum kimlikleri (sessionId)
Her sessionKey, geçerli bir sessionId değerine (konuşmayı sürdüren transkript dosyası) işaret eder.
Genel kurallar:
- Sıfırlama (
/new,/reset), ilgilisessionKeyiçin yeni birsessionIdoluşturur. - Günlük sıfırlama (varsayılan olarak Gateway ana makinesinde yerel saatle 04:00), sıfırlama sınırından sonraki ilk iletide yeni bir
sessionIdoluşturur. - Boşta kalma süresi dolması (
session.reset.idleMinutesveya eskisession.idleMinutes), boşta kalma penceresinden sonra bir ileti geldiğinde yeni birsessionIdoluşturur. Günlük + boşta kalma birlikte yapılandırıldığında, hangisinin süresi önce dolarsa o kazanır. - Control UI yeniden bağlanma sürdürmesi, Gateway bir operatör UI istemcisinden eşleşen
sessionIddeğerini aldığında, bir yeniden bağlanma gönderimi için o anda görünür olan oturumu koruyabilir. Sıradan bayat gönderimler yine yeni birsessionIdoluşturur. - Sistem olayları (Heartbeat, cron uyandırmaları, exec bildirimleri, Gateway defter tutma) oturum satırını değiştirebilir ancak günlük/boşta sıfırlama tazeliğini uzatmaz. Sıfırlama devri, yeni istem oluşturulmadan önce önceki oturum için kuyruğa alınmış sistem olayı bildirimlerini atar.
- Üst fork ilkesi, bir iş parçacığı veya alt ajan fork'u oluştururken OpenClaw'ın etkin dalını kullanır. Bu dal çok büyükse OpenClaw, başarısız olmak veya kullanılamaz geçmişi devralmak yerine alt öğeyi yalıtılmış bağlamla başlatır. Boyutlandırma ilkesi otomatiktir; eski
session.parentForkMaxTokensyapılandırmasıopenclaw doctor --fixtarafından kaldırılır.
Uygulama ayrıntısı: karar src/auto-reply/reply/session.ts içindeki initSessionState() içinde verilir.
Oturum deposu şeması (sessions.json)
Deponun değer türü src/config/sessions.ts içindeki SessionEntry türüdür.
Ana alanlar (kapsamlı değildir):
sessionId: geçerli transkript kimliği (sessionFileayarlanmadıkça dosya adı bundan türetilir)sessionStartedAt: geçerlisessionIdiçin başlangıç zaman damgası; günlük sıfırlama güncelliği bunu kullanır. Eski satırlar bunu JSONL oturum başlığından türetebilir.lastInteractionAt: son gerçek kullanıcı/kanal etkileşimi zaman damgası; boşta sıfırlama güncelliği bunu kullanır, böylece heartbeat, cron ve exec olayları oturumları canlı tutmaz. Bu alanı olmayan eski satırlar, boşta güncelliği için kurtarılan oturum başlangıç zamanına geri döner.updatedAt: listeleme, budama ve defter tutma için kullanılan son depo satırı mutasyonu zaman damgası. Günlük/boşta sıfırlama güncelliği için yetkili kaynak değildir.archivedAt: isteğe bağlı arşiv zaman damgası. Arşivlenen oturumlar transkriptleri bozulmadan depoda kalır ve normal etkin listelerden hariç tutulur.pinnedAt: isteğe bağlı sabitleme zaman damgası. Etkin sabitlenmiş oturumlar sabitlenmemiş oturumlardan önce sıralanır; bir oturumu arşivlemek sabitlemesini temizler.- Codex iş parçacığı birlikte çalışabilirliği: her iki alan da Codex iş parçacığı yönetimi biçimini izler —
aktarım hattındaki
archived/pinnedboolean değerleri her zaman zaman damgasından türetilir ve sunucu tarafında damgalanır; Codexthreads.archived_atsemantiği ve camelCase serileştirmesiyle eşleşir. OpenClaw zaman damgaları epoch milisaniyeleridir, Codex ise epoch saniyeleri kullanır; bu nedenle köprüler codex plugin sınırında dönüştürme yapar. Codex'in henüz sabitleme API'si yoktur (yalnızcathread/archive/thread/unarchive); sabitlenmiş durum, bir tane var olana kadar OpenClaw tarafında kalır; o noktada eşleşen biçim bağlı oturumların sabitleme durumunu mekanik olarak gidiş dönüş yapmasını sağlar. sessionFile: isteğe bağlı açık transkript yolu geçersiz kılmasıchatType:direct | group | room(UI'lara ve gönderme politikasına yardımcı olur)provider,subject,room,space,displayName: grup/kanal etiketleme için meta veriler- Açma kapama ayarları:
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,contextTokens
compactionCount: bu oturum anahtarı için otomatik Compaction'ın kaç kez tamamlandığımemoryFlushAt: son Compaction öncesi bellek temizlemesinin zaman damgasımemoryFlushCompactionCount: son temizleme çalıştığında Compaction sayısı
Depoyu düzenlemek güvenlidir, ancak yetkili kaynak Gateway'dir: oturumlar çalışırken girdileri yeniden yazabilir veya yeniden doldurabilir.
Transkript yapısı (*.jsonl)
Transkriptler openclaw/plugin-sdk/agent-sessions öğesinin SessionManager'ı tarafından yönetilir.
Dosya JSONL'dir:
- İlk satır: oturum başlığı (
type: "session",id,cwd,timestamp, isteğe bağlıparentSessioniçerir) - Sonra:
id+parentId(ağaç) içeren oturum girdileri
Dikkate değer girdi türleri:
message: kullanıcı/asistan/toolResult iletilericustom_message: model bağlamına giren uzantı tarafından enjekte edilen iletiler (UI'dan gizlenebilir)custom: model bağlamına girmeyen uzantı durumucompaction:firstKeptEntryIdvetokensBeforeiçeren kalıcı Compaction özetibranch_summary: bir ağaç dalında gezinirken kalıcı özet
OpenClaw transkriptleri bilerek "düzeltmez"; Gateway bunları okumak/yazmak için SessionManager kullanır.
Bağlam pencereleri ve izlenen tokenlar
İki farklı kavram önemlidir:
- Model bağlam penceresi: model başına sert sınır (modelin görebildiği tokenlar)
- Oturum deposu sayaçları:
sessions.jsoniçine yazılan hareketli istatistikler (/status ve panolar için kullanılır)
Sınırları ayarlıyorsanız:
- Bağlam penceresi model kataloğundan gelir (ve yapılandırma üzerinden geçersiz kılınabilir).
- Depodaki
contextTokensbir çalışma zamanı tahmini/raporlama değeridir; bunu katı bir garanti olarak değerlendirmeyin.
Daha fazlası için bkz. /token-use.
Compaction: nedir
Compaction, eski konuşmayı transkriptte kalıcı bir compaction girdisine özetler ve son iletileri olduğu gibi tutar.
Compaction sonrasında gelecekteki turlar şunları görür:
- Compaction özeti
firstKeptEntryIdsonrasındaki iletiler
Compaction sonrasında AGENTS.md bölümü yeniden enjekte etme, agents.defaults.compaction.postCompactionSections ile isteğe bağlıdır; ayarlanmamışsa veya [] ise,
OpenClaw Compaction özetinin üzerine AGENTS.md alıntıları eklemez.
Compaction kalıcıdır (oturum budamanın aksine). Bkz. /concepts/session-pruning.
Compaction parça sınırları ve araç eşleştirmesi
OpenClaw uzun bir transkripti Compaction parçalarına böldüğünde,
asistan araç çağrılarını eşleşen toolResult girdileriyle eşlenmiş tutar.
- Token payı bölmesi bir araç çağrısı ile sonucu arasına denk gelirse, OpenClaw çifti ayırmak yerine sınırı asistan araç çağrısı iletisine kaydırır.
- Sondaki bir araç sonucu bloğu aksi halde parçayı hedefin üzerine çıkaracaksa, OpenClaw bekleyen bu araç bloğunu korur ve özetlenmemiş kuyruğu olduğu gibi tutar.
- Durdurulan/hatalı araç çağrısı blokları bekleyen bir bölmeyi açık tutmaz.
Otomatik Compaction ne zaman gerçekleşir (OpenClaw çalışma zamanı)
Gömülü OpenClaw ajanında otomatik Compaction iki durumda tetiklenir:
- Taşma kurtarma: model bir bağlam taşması hatası döndürür
(
request_too_large,context length exceeded,input exceeds the maximum number of tokens,input token count exceeds the maximum number of input tokens,input is too long for the model,ollama error: context length exceededve benzer sağlayıcı biçimli varyantlar) → compact → yeniden dene. Sağlayıcı denenen token sayısını bildirdiğinde, OpenClaw gözlemlenen bu sayıyı taşma kurtarma Compaction'ına iletir. Sağlayıcı taşmayı doğrular ancak ayrıştırılabilir bir sayı sunmazsa, OpenClaw Compaction motorlarına ve tanılamalara bütçeyi asgari düzeyde aşan sentetik bir sayı geçirir. Taşma kurtarma hâlâ başarısız olursa, OpenClaw kullanıcıya açık rehberlik sunar ve oturum anahtarını sessizce yeni bir oturum kimliğine döndürmek yerine geçerli oturum eşlemesini korur. Sonraki adım operatör denetimindedir: iletiyi yeniden dene,/compactçalıştır veya yeni bir oturum tercih edildiğinde/newçalıştır. - Eşik bakımı: başarılı bir turdan sonra, şu olduğunda:
contextTokens > contextWindow - reserveTokens
Burada:
contextWindowmodelin bağlam penceresidirreserveTokensistemler + sonraki model çıktısı için ayrılmış boşluktur
Bunlar OpenClaw çalışma zamanı semantik değerleridir.
OpenClaw, agents.defaults.compaction.maxActiveTranscriptBytes ayarlandığında ve
etkin transkript dosyası bu boyuta ulaştığında, sonraki çalıştırmayı açmadan önce
ön kontrol yerel Compaction da tetikleyebilir. Bu, yerel yeniden açma maliyeti için dosya boyutu korumasıdır,
ham arşivleme değildir: OpenClaw yine normal semantik Compaction çalıştırır
ve sıkıştırılmış özetin yeni bir ardıl transkript olabilmesi için truncateAfterCompaction gerektirir.
Gömülü OpenClaw çalıştırmaları için agents.defaults.compaction.midTurnPrecheck.enabled: true
isteğe bağlı bir araç döngüsü koruması ekler. Bir araç sonucu eklendikten sonra ve
sonraki model çağrısından önce, OpenClaw tur başlangıcında kullanılan aynı ön kontrol
bütçe mantığını kullanarak istem baskısını tahmin eder. Bağlam artık sığmıyorsa, koruma
OpenClaw çalışma zamanının transformContext kancası içinde compact yapmaz. Yapılandırılmış
tur ortası ön kontrol sinyali yükseltir, geçerli istem gönderimini durdurur ve
dış çalıştırma döngüsünün mevcut kurtarma yolunu kullanmasına izin verir: bu yeterli olduğunda
aşırı büyük araç sonuçlarını keser veya yapılandırılmış Compaction modunu tetikleyip yeniden dener. Seçenek
varsayılan olarak devre dışıdır ve sağlayıcı destekli safeguard Compaction dahil olmak üzere hem default hem de safeguard
Compaction modlarıyla çalışır.
Bu, maxActiveTranscriptBytes değerinden bağımsızdır: byte boyutu koruması
bir tur açılmadan önce çalışır, tur ortası ön kontrol ise yeni araç sonuçları eklendikten sonra gömülü OpenClaw araç
döngüsünde daha sonra çalışır.
Compaction ayarları (reserveTokens, keepRecentTokens)
OpenClaw çalışma zamanının Compaction ayarları ajan ayarlarında bulunur:
{ compaction: { enabled: true, reserveTokens: 16384, keepRecentTokens: 20000, },}OpenClaw gömülü çalıştırmalar için ayrıca bir güvenlik tabanı uygular:
compaction.reserveTokens < reserveTokensFloorise OpenClaw bunu yükseltir.- Varsayılan taban
20000tokendır. - Tabanı devre dışı bırakmak için
agents.defaults.compaction.reserveTokensFloor: 0ayarlayın. - Zaten daha yüksekse OpenClaw bunu olduğu gibi bırakır.
- Manuel
/compact, açık biragents.defaults.compaction.keepRecentTokensdeğerine uyar ve OpenClaw çalışma zamanının son kuyruk kesme noktasını korur. Açık bir tutma bütçesi olmadan, manuel Compaction katı bir denetim noktası olarak kalır ve yeniden oluşturulan bağlam yeni özetten başlar. - Yeni araç sonuçlarından sonra ve sonraki model
çağrısından önce isteğe bağlı araç döngüsü ön kontrolünü çalıştırmak için
agents.defaults.compaction.midTurnPrecheck.enabled: trueayarlayın. Bu yalnızca bir tetikleyicidir; özet üretimi hâlâ yapılandırılmış Compaction yolunu kullanır. Bir tur başlangıcı etkin transkript byte boyutu koruması olanmaxActiveTranscriptBytesdeğerinden bağımsızdır. - Etkin
transkript büyüdüğünde bir turdan önce yerel Compaction çalıştırmak için
agents.defaults.compaction.maxActiveTranscriptBytesdeğerini bir byte değeri veya"20mb"gibi bir dize olarak ayarlayın. Bu koruma yalnızcatruncateAfterCompactionda etkinleştirildiğinde etkindir. Devre dışı bırakmak için ayarlamadan bırakın veya0olarak ayarlayın. agents.defaults.compaction.truncateAfterCompactionetkinleştirildiğinde, OpenClaw etkin transkripti Compaction sonrasında sıkıştırılmış bir ardıl JSONL'ye döndürür. Dal/geri yükleme denetim noktası eylemleri bu sıkıştırılmış ardılı kullanır; eski Compaction öncesi denetim noktası dosyaları başvuruldukları sürece okunabilir kalır.
Neden: Compaction kaçınılmaz hale gelmeden önce çok turlu "temizlik" (bellek yazmaları gibi) için yeterli boşluk bırakmak.
Uygulama: src/agents/agent-settings.ts içinde applyAgentCompactionSettingsFromConfig()
(gömülü çalıştırıcı turundan ve Compaction kurulum yollarından çağrılır).
Takılabilir Compaction sağlayıcıları
Plugin'ler, plugin API'sindeki registerCompactionProvider() aracılığıyla bir Compaction sağlayıcısı kaydedebilir. agents.defaults.compaction.provider kayıtlı bir sağlayıcı kimliğine ayarlandığında, safeguard uzantısı özetlemeyi yerleşik summarizeInStages işlem hattı yerine bu sağlayıcıya devreder.
provider: kayıtlı bir Compaction sağlayıcı Plugin'inin kimliği. Varsayılan LLM özetlemesi için ayarlamadan bırakın.- Bir
providerayarlamakmode: "safeguard"değerini zorunlu kılar. - Sağlayıcılar, yerleşik yolla aynı Compaction talimatlarını ve tanımlayıcı koruma politikasını alır.
- Safeguard, sağlayıcı çıktısından sonra son tur ve bölünmüş tur sonek bağlamını hâlâ korur.
- Yerleşik safeguard özetlemesi, önceki özetin tamamını olduğu gibi korumak yerine önceki özetleri yeni iletilerle yeniden damıtır.
- Safeguard modu varsayılan olarak özet kalite denetimlerini etkinleştirir; hatalı biçimlendirilmiş çıktı durumunda yeniden deneme davranışını atlamak için
qualityGuard.enabled: falseayarlayın. - Sağlayıcı başarısız olursa veya boş sonuç döndürürse, OpenClaw otomatik olarak yerleşik LLM özetlemesine geri döner.
- Çağıran iptaline saygı göstermek için abort/timeout sinyalleri yeniden fırlatılır (yutulmaz).
Kaynak: src/plugins/compaction-provider.ts, src/agents/agent-hooks/compaction-safeguard.ts.
Kullanıcının görebildiği yüzeyler
Compaction ve oturum durumunu şunlarla gözlemleyebilirsiniz:
/status(herhangi bir sohbet oturumunda)openclaw status(CLI)openclaw sessions/sessions --json- Gateway günlükleri (
pnpm gateway:watchveyaopenclaw logs --follow):embedded run auto-compaction start+complete - Ayrıntılı mod:
🧹 Auto-compaction complete+ Compaction sayısı
Sessiz temizlik (NO_REPLY)
OpenClaw, kullanıcının ara çıktıyı görmemesi gereken arka plan görevleri için "sessiz" turları destekler.
Kural:
- Asistan çıktısına, "kullanıcıya yanıt iletme" anlamına gelen tam sessiz belirteç
NO_REPLY/no_replyile başlar. - OpenClaw bunu teslim katmanında çıkarır/bastırır.
- Tam sessiz belirteç bastırma büyük/küçük harfe duyarlı değildir; bu nedenle tüm yük yalnızca sessiz belirteç olduğunda
NO_REPLYveno_replyikisi de geçerli sayılır. - Bu yalnızca gerçek arka plan/teslimatsız dönüşler içindir; sıradan, eyleme dönük kullanıcı istekleri için bir kısayol değildir.
2026.1.10 itibarıyla OpenClaw, kısmi bir parça NO_REPLY ile başladığında taslak/yazma akışını da bastırır; böylece sessiz işlemler dönüş sırasında kısmi çıktıyı sızdırmaz.
Compaction öncesi "bellek boşaltma" (uygulandı)
Amaç: otomatik Compaction gerçekleşmeden önce, kalıcı durumu diske yazan sessiz bir aracılı dönüş çalıştırmak (ör. ajan çalışma alanında memory/YYYY-MM-DD.md), böylece Compaction kritik bağlamı silemez.
OpenClaw ön eşik boşaltma yaklaşımını kullanır:
- Oturum bağlamı kullanımını izle.
- "Yumuşak eşiği" geçtiğinde (OpenClaw çalışma zamanının Compaction eşiğinin altında), ajana sessiz bir "belleği şimdi yaz" yönergesi çalıştır.
- Kullanıcının hiçbir şey görmemesi için tam sessiz belirteç
NO_REPLY/no_replykullan.
Yapılandırma (agents.defaults.compaction.memoryFlush):
enabled(varsayılan:true)model(boşaltma dönüşü için isteğe bağlı tam sağlayıcı/model geçersiz kılması, örneğinollama/qwen3:8b)softThresholdTokens(varsayılan:4000)prompt(boşaltma dönüşü için kullanıcı iletisi)systemPrompt(boşaltma dönüşü için eklenen ek sistem istemi)
Notlar:
- Varsayılan istem/sistem istemi, teslimi bastırmak için bir
NO_REPLYipucu içerir. modelayarlandığında, boşaltma dönüşü etkin oturum yedek zincirini devralmadan bu modeli kullanır; böylece yalnızca yerel bakım işleri sessizce ücretli bir konuşma modeline geri dönmez.- Boşaltma her Compaction döngüsünde bir kez çalışır (
sessions.jsoniçinde izlenir). - Boşaltma yalnızca gömülü OpenClaw oturumları için çalışır (CLI arka uçları bunu atlar).
- Oturum çalışma alanı salt okunur olduğunda (
workspaceAccess: "ro"veya"none") boşaltma atlanır. - Çalışma alanı dosya düzeni ve yazma kalıpları için bkz. Bellek.
OpenClaw ayrıca uzantı API'sinde bir session_before_compact kancası sunar, ancak OpenClaw'ın boşaltma mantığı bugün Gateway tarafında bulunur.
Sorun giderme kontrol listesi
- Oturum anahtarı yanlış mı? /concepts/session ile başlayın ve
/statusiçindekisessionKeydeğerini doğrulayın. - Depo ile transkript uyuşmuyor mu?
openclaw statusçıktısından Gateway konağını ve depo yolunu doğrulayın. - Compaction spam'i mi? Şunları kontrol edin:
- model bağlam penceresi (çok küçük)
- Compaction ayarları (
reserveTokensmodel penceresi için çok yüksekse daha erken Compaction'a neden olabilir) - araç sonucu şişmesi: oturum budamayı etkinleştirin/ayarlayın
- Sessiz dönüşler sızıyor mu? Yanıtın
NO_REPLYile başladığını (büyük/küçük harfe duyarsız tam belirteç) ve akış bastırma düzeltmesini içeren bir derlemede olduğunuzu doğrulayın.