Asosiy tarkibga o'tish

Sessiyalarni Boshqarish & Kompaktatsiya (Chuqur Tahlil)

Ushbu hujjat OpenClaw sessiyalarni boshidan oxirigacha qanday boshqarishini tushuntiradi:
  • Sessiya marshrutizatsiyasi (kiruvchi xabarlar sessionKey ga 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)
Agar avval yuqori darajadagi umumiy ko‘rinishni xohlasangiz, quyidagilardan boshlang:

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:
  1. 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.)
  2. 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

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
OpenClaw bularni 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> (standart main)
  • 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)
Kanonik qoidalar /concepts/session da hujjatlashtirilgan.

Sessiya identifikatorlari (sessionId)

Har bir sessionKey joriy sessionId ga ishora qiladi (suhbat davom etadigan transkript fayli). Asosiy qoidalar:
  • Reset (/new, /reset) ushbu sessionKey uchun yangi sessionId yaratadi.
  • Kundalik reset (standart: Gateway xostining lokal vaqti bilan 4:00) reset chegarasidan keyingi birinchi xabarda yangi sessionId yaratadi.
  • Idle expiry (session.reset.idleMinutes or legacy session.idleMinutes) creates a new sessionId when a message arrives after the idle window. When daily + idle are both configured, whichever expires first wins.
Implementatsiya tafsiloti: qaror 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 (agar sessionFile o‘rnatilmagan bo‘lsa, fayl nomi shundan olinadi)
  • updatedAt: oxirgi faollik vaqti
  • sessionFile: ixtiyoriy aniq transkript yo‘li
  • chatType: 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, elevatedLevel
    • sendPolicy (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 bajarilgan
  • memoryFlushAt: oxirgi pre-kompaktatsiya memory flush vaqti
  • memoryFlushCompactionCount: oxirgi flush qaysi kompaktatsiya sonida bajarilgan
Omborni tahrirlash xavfsiz, ammo Gateway — asosiy manba: sessiyalar ishlayotganda yozuvlarni qayta yozishi yoki tiklashi mumkin.

Transkript tuzilmasi (*.jsonl)

Transkriptlar @mariozechner/pi-coding-agent dagi SessionManager tomonidan boshqariladi. Fayl JSONL formatida:
  • Birinchi qatorda: sessiya sarlavhasi (type: "session", id, cwd, timestamp, ixtiyoriy parentSession)
  • Keyin: id + parentId ga ega sessiya yozuvlari (daraxt)
Muhim yozuv turlari:
  • message: user/assistant/toolResult xabarlari
  • custom_message: kengaytma kiritgan va model kontekstiga kiradigan xabarlar (UI’da yashirilishi mumkin)
  • custom: model kontekstiga kirmaydigan kengaytma holati
  • compaction: firstKeptEntryId va tokensBefore bilan saqlangan kompaktatsiya xulosasi
  • branch_summary: daraxt shoxobchasida navigatsiya qilinganda saqlanadigan xulosa
OpenClaw ataylab transkriptlarni “tuzatmaydi”; Gateway ularni o‘qish/yozish uchun SessionManager dan foydalanadi.

Kontekst oynasi va kuzatiladigan tokenlar

Ikki xil tushuncha muhim:
  1. Model kontekst oynasi: model uchun qat’iy limit (model ko‘ra oladigan tokenlar soni)
  2. Sessiya ombori hisoblagichlari: sessions.json ga yoziladigan aylanma statistika ( /status va dashboard’lar uchun)
Limitlarni sozlayotgan bo‘lsangiz:
  • 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.
Batafsil: /token-use.

Kompaktatsiya: bu nima

Kompaktatsiya eski suhbatni xulosa qilib, transkriptga saqlangan compaction yozuvini qo‘shadi va so‘nggi xabarlarni saqlab qoladi. Kompaktatsiyadan keyin, keyingi turn’lar quyidagilarni ko‘radi:
  • Kompaktatsiya xulosasi
  • firstKeptEntryId dan keyingi xabarlar
Kompaktsiya doimiy (sessiya pruningidan farqli o‘laroq). Qarang: /concepts/session-pruning.

Avto-kompaktatsiya qachon sodir bo‘ladi (Pi runtime)

O‘rnatilgan Pi agentida avto-kompaktatsiya ikki holatda ishga tushadi:
  1. Overflow tiklash: model kontekst overflow xatosini qaytaradi → kompaktatsiya → qayta urinish.
  2. Threshold nazorati: muvaffaqiyatli turn’dan keyin, quyidagi shart bajarilganda:
contextTokens > contextWindow - reserveTokens Bu yerda:
  • contextWindow — modelning kontekst oynasi
  • reserveTokens — promptlar + keyingi model javobi uchun ajratilgan zahira
Bu Pi runtime semantikasi (OpenClaw hodisalarni qabul qiladi, lekin kompaktatsiya qachon bo‘lishini Pi hal qiladi).

Kompaktatsiya sozlamalari (reserveTokens, keepRecentTokens)

Pi kompaktatsiya sozlamalari Pi settings’da joylashgan:
{
  compaction: {
    enabled: true,
    reserveTokens: 16384,
    keepRecentTokens: 20000,
  },
}
OpenClaw o‘rnatilgan ishga tushirishlar uchun xavfsizlik minimumini ham qo‘llaydi:
  • Agar compaction.reserveTokens < reserveTokensFloor bo‘lsa, OpenClaw uni oshiradi.
  • Standart minimum: 20000 token.
  • Minimumni o‘chirish uchun: agents.defaults.compaction.reserveTokensFloor: 0.
  • Agar allaqachon yuqori bo‘lsa, OpenClaw o‘zgartirmaydi.
Sabab: kompaktatsiya muqarrar bo‘lishidan oldin ko‘p bosqichli “xizmat ishlari” (masalan, xotira yozuvlari) uchun yetarli zahira qoldirish. Implementatsiya: 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_REPLY bilan 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:
  1. Sessiya kontekst foydalanishini kuzatish.
  2. U “yumshoq threshold” (Pi kompaktatsiya threshold’idan past) dan oshganda, agentga jim “xotirani hozir yoz” direktivasini yuborish.
  3. Foydalanuvchi hech narsa ko‘rmasligi uchun NO_REPLY dan foydalanish.
Config (agents.defaults.compaction.memoryFlush):
  • enabled (standart: true)
  • softThresholdTokens (standart: 4000)
  • prompt (flush turn uchun user xabari)
  • systemPrompt (flush turn uchun qo‘shimcha system prompt)
Izohlar:
  • Standart prompt/system prompt yetkazishni bostirish uchun NO_REPLY ko‘rsatmasini o‘z ichiga oladi.
  • Flush har bir kompaktatsiya siklida bir marta ishlaydi (sessions.json da 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.
Pi extension API’da 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 /status dagi sessionKey ni tasdiqlang.
  • Saqlash (store) va transkript mos kelmayaptimi? openclaw status dan Gateway xosti va saqlash yo‘lini tasdiqlang.
  • Siqish (compaction) haddan tashqari ko‘pmi? Tekshiring:
    • model kontekst oynasi (juda kichik emasmi)
    • kompaktatsiya sozlamalari (reserveTokens model 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.