Sessiyalarni Boshqarish & Kompaktatsiya (Chuqur Tahlil)
Ushbu hujjat OpenClaw sessiyalarni boshidan oxirigacha qanday boshqarishini tushuntiradi:- Sessiya marshrutizatsiyasi (kiruvchi xabarlar
sessionKeyga qanday moslanadi) - Sessiya ombori (
sessions.json) va u nimalarni kuzatadi - Transkriptni saqlash (
*.jsonl) va uning tuzilmasi - Transkript gigiyenasi (ishga tushirishdan oldin provayderga xos tuzatishlar)
- Kontekst cheklovlari (kontekst oynasi va kuzatiladigan tokenlar)
- Kompaktatsiya (qo‘lda + avto-kompaktatsiya) va pre-kompaktatsiya ishlarini qayerga ulash mumkinligi
- Yashirin xizmat ishlari (masalan, foydalanuvchiga ko‘rinmas chiqishsiz xotira yozuvlari)
Haqiqat manbai: Gateway
OpenClaw yagona Gateway jarayoni atrofida loyihalangan bo‘lib, u sessiya holatini boshqaradi.- UI’lar (macOS ilovasi, veb Control UI, TUI) sessiyalar ro‘yxati va token hisoblari uchun Gateway’dan so‘rov yuborishi kerak.
- Masofaviy rejimda sessiya fayllari masofaviy xostda bo‘ladi; “lokal Mac fayllarini tekshirish” Gateway foydalanayotgan ma’lumotni aks ettirmaydi.
Ikki saqlash qatlami
OpenClaw sessiyalarni ikki qatlamda saqlaydi:-
Sessiya ombori (
sessions.json)- Kalit/qiymat xaritasi:
sessionKey -> SessionEntry - Kichik, o‘zgaruvchan, tahrirlash (yoki yozuvlarni o‘chirish) xavfsiz
- Sessiya metama’lumotlarini kuzatadi (joriy sessiya identifikatori, oxirgi faollik, toggle’lar, token hisoblagichlari va h.k.)
- Kalit/qiymat xaritasi:
-
Transkript (
<sessionId>.jsonl)- Daraxt tuzilmasiga ega append-only transkript (
id+parentId) - Haqiqiy suhbat + tool chaqiruvlari + kompaktatsiya xulosalarini saqlaydi
- Keyingi turn’lar uchun model kontekstini qayta tiklashda ishlatiladi
- Daraxt tuzilmasiga ega append-only transkript (
Diskdagi joylashuv
Har bir agent uchun, Gateway xostida:- Ombor:
~/.openclaw/agents/<agentId>/sessions/sessions.json - Transkriptlar:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl- Telegram mavzu sessiyalari:
.../<sessionId>-topic-<threadId>.jsonl
- Telegram mavzu sessiyalari:
src/config/sessions.ts orqali aniqlaydi.
Sessiya kalitlari (sessionKey)
sessionKey siz qaysi suhbat konteynerida ekaningizni aniqlaydi (marshrutizatsiya + izolyatsiya).
Keng tarqalgan andozalar:
- Asosiy/to‘g‘ridan-to‘g‘ri chat (har bir agent uchun):
agent:<agentId>:<mainKey>(standartmain) - Guruh:
agent:<agentId>:<channel>:group:<id> - Xona/kanal (Discord/Slack):
agent:<agentId>:<channel>:channel:<id>yoki...:room:<id> - Cron:
cron:<job.id> - Webhook:
hook:<uuid>(agar alohida belgilanmagan bo‘lsa)
Sessiya identifikatorlari (sessionId)
Har bir sessionKey joriy sessionId ga ishora qiladi (suhbat davom etadigan transkript fayli).
Asosiy qoidalar:
- Reset (
/new,/reset) ushbusessionKeyuchun yangisessionIdyaratadi. - Kundalik reset (standart: Gateway xostining lokal vaqti bilan 4:00) reset chegarasidan keyingi birinchi xabarda yangi
sessionIdyaratadi. - Idle expiry (
session.reset.idleMinutesor legacysession.idleMinutes) creates a newsessionIdwhen a message arrives after the idle window. When daily + idle are both configured, whichever expires first wins.
src/auto-reply/reply/session.ts ichidagi initSessionState() da qabul qilinadi.
Sessiya ombori sxemasi (sessions.json)
Ombordagi qiymat turi src/config/sessions.ts dagi SessionEntry.
Asosiy maydonlar (to‘liq emas):
sessionId: joriy transkript identifikatori (agarsessionFileo‘rnatilmagan bo‘lsa, fayl nomi shundan olinadi)updatedAt: oxirgi faollik vaqtisessionFile: ixtiyoriy aniq transkript yo‘lichatType:direct | group | room(UI va yuborish siyosati uchun)provider,subject,room,space,displayName: guruh/kanal yorlig‘i uchun metama’lumot- Toggle’lar:
thinkingLevel,verboseLevel,reasoningLevel,elevatedLevelsendPolicy(sessiya darajasida override)
- Model tanlash:
providerOverride,modelOverride,authProfileOverride
- Token hisoblagichlari (eng yaxshi taxmin / provayderga bog‘liq):
inputTokens,outputTokens,totalTokens,contextTokens
compactionCount: ushbu sessiya kaliti uchun avto-kompaktatsiya nechta bajarilganmemoryFlushAt: oxirgi pre-kompaktatsiya memory flush vaqtimemoryFlushCompactionCount: oxirgi flush qaysi kompaktatsiya sonida bajarilgan
Transkript tuzilmasi (*.jsonl)
Transkriptlar @mariozechner/pi-coding-agent dagi SessionManager tomonidan boshqariladi.
Fayl JSONL formatida:
- Birinchi qatorda: sessiya sarlavhasi (
type: "session",id,cwd,timestamp, ixtiyoriyparentSession) - Keyin:
id+parentIdga ega sessiya yozuvlari (daraxt)
message: user/assistant/toolResult xabarlaricustom_message: kengaytma kiritgan va model kontekstiga kiradigan xabarlar (UI’da yashirilishi mumkin)custom: model kontekstiga kirmaydigan kengaytma holaticompaction:firstKeptEntryIdvatokensBeforebilan saqlangan kompaktatsiya xulosasibranch_summary: daraxt shoxobchasida navigatsiya qilinganda saqlanadigan xulosa
SessionManager dan foydalanadi.
Kontekst oynasi va kuzatiladigan tokenlar
Ikki xil tushuncha muhim:- Model kontekst oynasi: model uchun qat’iy limit (model ko‘ra oladigan tokenlar soni)
- Sessiya ombori hisoblagichlari:
sessions.jsonga yoziladigan aylanma statistika (/statusva dashboard’lar uchun)
- Kontekst oynasi model katalogidan olinadi (va config orqali override qilinishi mumkin).
- Ombordagi
contextTokens— ish vaqtidagi taxmin/hisobot qiymati; uni qat’iy kafolat deb qabul qilmang.
Kompaktatsiya: bu nima
Kompaktatsiya eski suhbatni xulosa qilib, transkriptga saqlangancompaction yozuvini qo‘shadi va so‘nggi xabarlarni saqlab qoladi.
Kompaktatsiyadan keyin, keyingi turn’lar quyidagilarni ko‘radi:
- Kompaktatsiya xulosasi
firstKeptEntryIddan keyingi xabarlar
Avto-kompaktatsiya qachon sodir bo‘ladi (Pi runtime)
O‘rnatilgan Pi agentida avto-kompaktatsiya ikki holatda ishga tushadi:- Overflow tiklash: model kontekst overflow xatosini qaytaradi → kompaktatsiya → qayta urinish.
- Threshold nazorati: muvaffaqiyatli turn’dan keyin, quyidagi shart bajarilganda:
contextTokens > contextWindow - reserveTokens
Bu yerda:
contextWindow— modelning kontekst oynasireserveTokens— promptlar + keyingi model javobi uchun ajratilgan zahira
Kompaktatsiya sozlamalari (reserveTokens, keepRecentTokens)
Pi kompaktatsiya sozlamalari Pi settings’da joylashgan:
- Agar
compaction.reserveTokens < reserveTokensFloorbo‘lsa, OpenClaw uni oshiradi. - Standart minimum:
20000token. - Minimumni o‘chirish uchun:
agents.defaults.compaction.reserveTokensFloor: 0. - Agar allaqachon yuqori bo‘lsa, OpenClaw o‘zgartirmaydi.
ensurePiCompactionReserveTokens() (src/agents/pi-settings.ts)
(src/agents/pi-embedded-runner.ts dan chaqiriladi).
Foydalanuvchiga ko‘rinadigan joylar
Kompaktatsiya va sessiya holatini quyidagilar orqali kuzatishingiz mumkin:/status(har qanday chat sessiyasida)openclaw status(CLI)openclaw sessions/sessions --json- Verbose rejim:
🧹 Auto-compaction complete+ kompaktatsiya soni
Yashirin xizmat turn’lari (NO_REPLY)
OpenClaw fon vazifalari uchun, foydalanuvchi oraliq chiqishni ko‘rmasligi kerak bo‘lgan “jim” turn’larni qo‘llab-quvvatlaydi.
Kelishuv:
- Assistant chiqishini
NO_REPLYbilan boshlaydi — bu “foydalanuvchiga javob yuborilmasin” degani. - OpenClaw yetkazish qatlamida buni olib tashlaydi/yashiradi.
2026.1.10 dan boshlab, agar qisman streaming bo‘lagi NO_REPLY bilan boshlansa, OpenClaw draft/typing streaming ni ham bostiradi, shuning uchun jim operatsiyalar o‘rtada chiqib ketmaydi.
Pre-kompaktatsiya “memory flush” (joriy qilingan)
Maqsad: avto-kompaktatsiyadan oldin, agent ish maydonida diskka doimiy holat yozadigan (masalan,memory/YYYY-MM-DD.md) jim agentik turn ishga tushirish, shunda kompaktatsiya muhim kontekstni o‘chirib yubormaydi.
OpenClaw pre-threshold flush yondashuvidan foydalanadi:
- Sessiya kontekst foydalanishini kuzatish.
- U “yumshoq threshold” (Pi kompaktatsiya threshold’idan past) dan oshganda, agentga jim “xotirani hozir yoz” direktivasini yuborish.
- Foydalanuvchi hech narsa ko‘rmasligi uchun
NO_REPLYdan foydalanish.
agents.defaults.compaction.memoryFlush):
enabled(standart:true)softThresholdTokens(standart:4000)prompt(flush turn uchun user xabari)systemPrompt(flush turn uchun qo‘shimcha system prompt)
- Standart prompt/system prompt yetkazishni bostirish uchun
NO_REPLYko‘rsatmasini o‘z ichiga oladi. - Flush har bir kompaktatsiya siklida bir marta ishlaydi (
sessions.jsonda kuzatiladi). - Flush faqat o‘rnatilgan Pi sessiyalari uchun ishlaydi (CLI backend’lar o‘tkazib yuboradi).
- Agar sessiya workspace’i faqat o‘qish rejimida bo‘lsa (
workspaceAccess: "ro"yoki"none"), flush o‘tkazib yuboriladi. - Workspace fayl tuzilmasi va yozish andozalari uchun Memory ga qarang.
session_before_compact hook ham mavjud, ammo OpenClaw’ning
flush logikasi hozircha Gateway tomonida joylashgan.
Muammolarni bartaraf etish ro‘yxati
- Sessiya kaliti noto‘g‘rimi? /concepts/session dan boshlang va
/statusdagisessionKeyni tasdiqlang. - Saqlash (store) va transkript mos kelmayaptimi?
openclaw statusdan Gateway xosti va saqlash yo‘lini tasdiqlang. - Siqish (compaction) haddan tashqari ko‘pmi? Tekshiring:
- model kontekst oynasi (juda kichik emasmi)
- kompaktatsiya sozlamalari (
reserveTokensmodel oynasiga nisbatan juda yuqori bo‘lsa, erta kompaktatsiya bo‘lishi mumkin) - tool-result hajmi: session pruning’ni yoqing/moslang
- Jim navbatlar sizib chiqyaptimi? Javob
NO_REPLY(aniq token) bilan boshlanishini va siz streaming bostirish tuzatishi kiritilgan buildda ekaningizni tasdiqlang.