- सत्र रूटिंग (इनबाउंड संदेश
sessionKeyसे कैसे मैप होते हैं) - सत्र स्टोर (
sessions.json) और यह क्या ट्रैक करता है - ट्रांसक्रिप्ट स्थायित्व (
*.jsonl) और इसकी संरचना - ट्रांसक्रिप्ट स्वच्छता (रन से पहले प्रदाता-विशिष्ट सुधार)
- संदर्भ सीमाएं (संदर्भ विंडो बनाम ट्रैक किए गए टोकन)
- Compaction (मैन्युअल और ऑटो-Compaction) और प्री-Compaction काम कहां हुक करना है
- मौन रखरखाव (मेमोरी लेखन जिनसे उपयोगकर्ता-दृश्य आउटपुट नहीं बनना चाहिए)
सत्य का स्रोत: Gateway
OpenClaw एकल Gateway प्रक्रिया के इर्द-गिर्द डिजाइन किया गया है जो सत्र स्थिति की स्वामी होती है।- UI (macOS ऐप, वेब Control UI, TUI) को सत्र सूचियों और टोकन गणनाओं के लिए Gateway से क्वेरी करनी चाहिए।
- रिमोट मोड में, सत्र फाइलें रिमोट होस्ट पर होती हैं; “आपकी स्थानीय Mac फाइलें जांचना” यह नहीं दिखाएगा कि Gateway क्या उपयोग कर रहा है।
दो स्थायित्व परतें
OpenClaw सत्रों को दो परतों में स्थायी करता है:-
सत्र स्टोर (
sessions.json)- कुंजी/मान मैप:
sessionKey -> SessionEntry - छोटा, परिवर्तनीय, संपादित करने के लिए सुरक्षित (या प्रविष्टियां हटाने के लिए)
- सत्र मेटाडेटा ट्रैक करता है (वर्तमान सत्र id, अंतिम गतिविधि, टॉगल, टोकन काउंटर आदि)
- कुंजी/मान मैप:
-
ट्रांसक्रिप्ट (
<sessionId>.jsonl)- ट्री संरचना वाला केवल-जोड़े जाने वाला ट्रांसक्रिप्ट (प्रविष्टियों में
id+parentIdहोते हैं) - वास्तविक बातचीत + टूल कॉल + Compaction सारांश संग्रहीत करता है
- भविष्य के टर्न के लिए मॉडल संदर्भ फिर से बनाने में उपयोग होता है
- Compaction चेकपॉइंट compacted successor
ट्रांसक्रिप्ट पर मेटाडेटा होते हैं। नए Compaction दूसरी
.checkpoint.*.jsonlकॉपी नहीं लिखते।
- ट्री संरचना वाला केवल-जोड़े जाने वाला ट्रांसक्रिप्ट (प्रविष्टियों में
mtimeMs/size से कैश होता है और समवर्ती रीडरों में साझा होता है।
ऑन-डिस्क स्थान
प्रति एजेंट, Gateway होस्ट पर:- स्टोर:
~/.openclaw/agents/<agentId>/sessions/sessions.json - ट्रांसक्रिप्ट:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl- Telegram टॉपिक सत्र:
.../<sessionId>-topic-<threadId>.jsonl
- Telegram टॉपिक सत्र:
src/config/sessions.ts के जरिए रिजॉल्व करता है।
स्टोर रखरखाव और डिस्क नियंत्रण
सत्र स्थायित्व मेंsessions.json, ट्रांसक्रिप्ट आर्टिफैक्ट, और ट्रैजेक्टरी साइडकार के लिए स्वचालित रखरखाव नियंत्रण (session.maintenance) हैं:
mode:enforce(डिफॉल्ट) याwarnpruneAfter: बासी-प्रविष्टि आयु कटऑफ (डिफॉल्ट30d)maxEntries:sessions.jsonमें प्रविष्टियों की सीमा (डिफॉल्ट500)- अल्पकालिक gateway model-run probe retention
24hपर स्थिर है, लेकिन यह दबाव-गेटेड है: यह बासी strict probe rows केवल तब हटाता है जब session-entry रखरखाव/कैप दबाव पहुंचता है। यह केवलagent:*:explicit:model-run-<uuid>से मेल खाने वाली strict explicit probe keys पर लागू होता है और चलने पर global stale-entry cleanup/capping से पहले चलता है। resetArchiveRetention:*.reset.<timestamp>ट्रांसक्रिप्ट आर्काइव के लिए retention (डिफॉल्ट:pruneAfterजैसा;falsecleanup अक्षम करता है)maxDiskBytes: वैकल्पिक sessions-directory बजटhighWaterBytes: cleanup के बाद वैकल्पिक लक्ष्य (डिफॉल्टmaxDiskBytesका80%)
sessions.json फाइलें हर metadata update के लिए clone या reread नहीं होतीं। Runtime code को updateSessionStore(...) या updateSessionStoreEntry(...) को प्राथमिकता देनी चाहिए; direct whole-store saves compatibility और offline-maintenance tools हैं। जब Gateway पहुंच योग्य हो, non-dry-run openclaw sessions cleanup और openclaw agents delete store mutations को Gateway को delegate करते हैं ताकि cleanup उसी writer queue में शामिल हो; --store <path> direct file maintenance के लिए explicit offline repair path है। maxEntries cleanup अभी भी production-sized caps के लिए batched है, इसलिए store configured cap से थोड़े समय के लिए अधिक हो सकता है, फिर अगला high-water cleanup उसे वापस नीचे rewrite करता है। Gateway startup के दौरान session store reads entries को prune या cap नहीं करते; cleanup के लिए writes या openclaw sessions cleanup --enforce का उपयोग करें। openclaw sessions cleanup --enforce अभी भी configured cap तुरंत लागू करता है और disk budget configured न होने पर भी पुराने unreferenced transcript, checkpoint, और trajectory artifacts को prune करता है।
रखरखाव durable external conversation pointers जैसे group sessions
और thread-scoped chat sessions को बनाए रखता है, लेकिन cron, hooks,
heartbeat, ACP, और sub-agents के लिए synthetic runtime entries तब भी हटाई जा सकती हैं जब वे
configured age, count, या disk budget से अधिक हो जाएं। Gateway model-run probe sessions
अलग 24h model-run retention का उपयोग केवल तब करते हैं जब उनकी key ठीक
agent:*:explicit:model-run-<uuid> से मेल खाती है; अन्य explicit sessions उस
retention का हिस्सा नहीं हैं। model-run cleanup केवल session-entry cap
pressure के तहत लागू होता है। Isolated cron runs अपना अलग cron.sessionRetention control रखते हैं,
जो model-run probe retention से स्वतंत्र है।
OpenClaw अब Gateway writes के दौरान automatic sessions.json.bak.* rotation backups नहीं बनाता। legacy session.maintenance.rotateBytes key ignored है और openclaw doctor --fix इसे पुराने configs से हटाता है।
ट्रांसक्रिप्ट mutations transcript file पर session write lock का उपयोग करते हैं। Lock acquisition
busy-session error दिखाने से पहले session.writeLock.acquireTimeoutMs तक प्रतीक्षा करता है; डिफॉल्ट 60000
ms है। इसे केवल तब बढ़ाएं जब वैध prep, cleanup, compaction, या transcript mirror work धीमी मशीनों पर
लंबे समय तक contend करे। session.writeLock.staleMs नियंत्रित करता है कि मौजूदा lock कब
stale मानकर reclaim किया जा सकता है; डिफॉल्ट 1800000 ms है। session.writeLock.maxHoldMs
in-process watchdog release threshold नियंत्रित करता है; डिफॉल्ट 300000 ms है। Emergency env overrides हैं
OPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS, OPENCLAW_SESSION_WRITE_LOCK_STALE_MS, और
OPENCLAW_SESSION_WRITE_LOCK_MAX_HOLD_MS।
disk budget cleanup (mode: "enforce") के लिए enforcement order:
- सबसे पहले सबसे पुराने archived, orphan transcript, या orphan trajectory artifacts हटाएं।
- अगर अभी भी target से ऊपर है, तो सबसे पुरानी session entries और उनकी transcript/trajectory files evict करें।
- usage
highWaterBytesपर या उससे नीचे आने तक जारी रखें।
mode: "warn" में, OpenClaw संभावित evictions रिपोर्ट करता है लेकिन store/files को mutate नहीं करता।
मांग पर रखरखाव चलाएं:
Cron सत्र और रन लॉग
Isolated cron runs भी session entries/transcripts बनाते हैं, और उनके dedicated retention controls होते हैं:cron.sessionRetention(डिफॉल्ट24h) session store से पुराने isolated cron run sessions prune करता है (falseअक्षम करता है)।cron.runLog.keepLinesप्रति cron job retained SQLite run-history rows prune करता है (डिफॉल्ट:2000)।cron.runLog.maxBytesपुराने file-backed run logs के लिए accepted रहता है।
cron:<jobId> session entry को sanitize करता है। यह thinking/fast/verbose settings, labels, और explicit
user-selected model/auth overrides जैसी safe preferences carry करता है। यह channel/group routing, send या queue policy, elevation, origin, और ACP
runtime binding जैसे ambient conversation context को drop करता है ताकि नया isolated run पुराने run से stale delivery या
runtime authority inherit न कर सके।
सत्र कुंजियां (sessionKey)
sessionKey पहचानता है कि आप किस conversation bucket में हैं (routing + isolation)।
सामान्य patterns:
- Main/direct chat (प्रति agent):
agent:<agentId>:<mainKey>(डिफॉल्टmain) - Group:
agent:<agentId>:<channel>:group:<id> - Room/channel (Discord/Slack):
agent:<agentId>:<channel>:channel:<id>या...:room:<id> - Cron:
cron:<job.id> - Webhook:
hook:<uuid>(जब तक override न किया गया हो)
सत्र ids (sessionId)
हर sessionKey एक current sessionId की ओर संकेत करता है (वह transcript file जो conversation जारी रखती है)।
व्यावहारिक नियम:
- Reset (
/new,/reset) उसsessionKeyके लिए नयाsessionIdबनाता है। - Daily reset (gateway host पर डिफॉल्ट 4:00 AM local time) reset boundary के बाद अगले message पर नया
sessionIdबनाता है। - Idle expiry (
session.reset.idleMinutesया legacysession.idleMinutes) idle window के बाद message आने पर नयाsessionIdबनाता है। जब daily + idle दोनों configured हों, जो पहले expire हो वही लागू होता है। - Control UI reconnect resume operator UI client से matching
sessionIdGateway को मिलने पर एक reconnect send के लिए currently visible session को preserve कर सकता है। Ordinary stale sends अभी भी नयाsessionIdबनाते हैं। - System events (heartbeat, cron wakeups, exec notifications, gateway bookkeeping) session row mutate कर सकते हैं लेकिन daily/idle reset freshness नहीं बढ़ाते। Reset rollover fresh prompt बनने से पहले previous session के queued system-event notices discard करता है।
- Parent fork policy thread या subagent fork बनाते समय OpenClaw की active branch का उपयोग करती है। अगर वह branch बहुत बड़ी है, तो OpenClaw fail होने या unusable history inherit करने के बजाय child को isolated context के साथ शुरू करता है। sizing policy automatic है; legacy
session.parentForkMaxTokensconfigopenclaw doctor --fixद्वारा हटाया जाता है।
src/auto-reply/reply/session.ts में initSessionState() में होता है।
सत्र स्टोर schema (sessions.json)
स्टोर का value type src/config/sessions.ts में SessionEntry है।
मुख्य fields (पूर्ण सूची नहीं):
sessionId: current transcript id (filename इससे derive होता है जब तकsessionFileset न हो)sessionStartedAt: currentsessionIdके लिए start timestamp; daily reset freshness इसका उपयोग करती है। Legacy rows इसे JSONL session header से derive कर सकते हैं।lastInteractionAt: last real user/channel interaction timestamp; idle reset freshness इसका उपयोग करती है ताकि heartbeat, cron, और exec events sessions को alive न रखें। इस field के बिना legacy rows idle freshness के लिए recovered session start time पर fall back करते हैं।updatedAt: last store-row mutation timestamp, listing, pruning, और bookkeeping के लिए used। यह daily/idle reset freshness का authority नहीं है।sessionFile: optional explicit transcript path overridechatType:direct | group | room(UIs और send policy में मदद करता है)provider,subject,room,space,displayName: group/channel labeling के लिए metadata- Toggles:
thinkingLevel,verboseLevel,reasoningLevel,elevatedLevelsendPolicy(per-session override)
- Model selection:
providerOverride,modelOverride,authProfileOverride
- Token counters (best-effort / provider-dependent):
inputTokens,outputTokens,totalTokens,contextTokens
compactionCount: इस session key के लिए auto-compaction कितनी बार complete हुआmemoryFlushAt: last pre-compaction memory flush का timestampmemoryFlushCompactionCount: last flush चलने के समय compaction count
ट्रांसक्रिप्ट संरचना (*.jsonl)
Transcripts openclaw/plugin-sdk/agent-sessions के SessionManager द्वारा managed होते हैं।
फाइल JSONL है:
- पहली line: session header (
type: "session",id,cwd,timestamp, optionalparentSessionशामिल) - फिर:
id+parentId(tree) वाली session entries
message: user/assistant/toolResult संदेशcustom_message: एक्सटेंशन द्वारा इंजेक्ट किए गए संदेश जो मॉडल संदर्भ में प्रवेश करते हैं (UI से छिपाए जा सकते हैं)custom: एक्सटेंशन स्थिति जो मॉडल संदर्भ में प्रवेश नहीं करतीcompaction:firstKeptEntryIdऔरtokensBeforeके साथ स्थायी Compaction सारांशbranch_summary: ट्री ब्रांच नेविगेट करते समय स्थायी सारांश
SessionManager का उपयोग करता है.
संदर्भ विंडो बनाम ट्रैक किए गए टोकन
दो अलग अवधारणाएं महत्वपूर्ण हैं:- मॉडल संदर्भ विंडो: प्रति मॉडल हार्ड कैप (मॉडल को दिखने वाले टोकन)
- सेशन स्टोर काउंटर:
sessions.jsonमें लिखे जाने वाले रोलिंग आंकड़े (/status और डैशबोर्ड के लिए उपयोग)
- संदर्भ विंडो मॉडल कैटलॉग से आती है (और config के माध्यम से ओवरराइड की जा सकती है).
- स्टोर में
contextTokensएक रनटाइम अनुमान/रिपोर्टिंग मान है; इसे सख्त गारंटी न मानें.
Compaction: यह क्या है
Compaction पुरानी बातचीत को ट्रांसक्रिप्ट में एक स्थायीcompaction एंट्री में सारांशित करता है और हाल के संदेशों को यथावत रखता है.
Compaction के बाद, भविष्य के टर्न देखते हैं:
- Compaction सारांश
firstKeptEntryIdके बाद के संदेश
agents.defaults.compaction.postCompactionSections के माध्यम से opt-in है; जब यह unset या [] हो,
OpenClaw Compaction सारांश के ऊपर AGENTS.md अंश नहीं जोड़ता.
Compaction स्थायी है (सेशन pruning के विपरीत). /concepts/session-pruning देखें.
Compaction chunk सीमाएं और टूल pairing
जब OpenClaw लंबे ट्रांसक्रिप्ट को Compaction chunks में विभाजित करता है, तो यह assistant tool calls को उनके संबंधितtoolResult entries के साथ paired रखता है.
- अगर token-share split किसी tool call और उसके result के बीच आ जाता है, तो OpenClaw pair को अलग करने के बजाय boundary को assistant tool-call message तक shift करता है.
- अगर trailing tool-result block अन्यथा chunk को target से ऊपर धकेल देगा, तो OpenClaw उस pending tool block को preserve करता है और unsummarized tail intact रखता है.
- Aborted/error tool-call blocks pending split को open नहीं रखते.
Auto-compaction कब होता है (OpenClaw रनटाइम)
embedded OpenClaw agent में, auto-compaction दो मामलों में trigger होता है:- Overflow recovery: मॉडल context overflow error लौटाता है
(
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 exceeded, और समान provider-shaped variants) → compact → retry. जब provider attempted token count रिपोर्ट करता है, OpenClaw उस observed count को overflow recovery compaction में forward करता है. अगर provider overflow confirm करता है लेकिन parseable count expose नहीं करता, तो OpenClaw compaction engines और diagnostics को minimally over-budget synthetic count पास करता है. अगर overflow recovery फिर भी fail होती है, तो OpenClaw user को explicit guidance दिखाता है और session key को चुपचाप नए session id पर rotate करने के बजाय current session mapping preserve करता है. अगला कदम operator-controlled है: message retry करें,/compactचलाएं, या fresh session पसंद होने पर/newचलाएं. - Threshold maintenance: successful turn के बाद, जब:
contextTokens > contextWindow - reserveTokens
जहां:
contextWindowमॉडल की context window हैreserveTokensprompts + अगले model output के लिए reserved headroom है
agents.defaults.compaction.maxActiveTranscriptBytes set हो और
active transcript file उस size तक पहुंच जाए. यह local reopen cost के लिए file-size guard है,
raw archival नहीं: OpenClaw अभी भी normal semantic compaction चलाता है,
और इसके लिए truncateAfterCompaction चाहिए ताकि compacted summary
new successor transcript बन सके.
embedded OpenClaw runs के लिए, agents.defaults.compaction.midTurnPrecheck.enabled: true
एक opt-in tool-loop guard जोड़ता है. Tool result append होने के बाद और
अगले model call से पहले, OpenClaw वही preflight
budget logic उपयोग करके prompt pressure estimate करता है जो turn start पर उपयोग होती है. अगर context अब fit नहीं होता, तो guard
OpenClaw runtime के transformContext hook के अंदर compact नहीं करता. यह structured
mid-turn precheck signal raise करता है, current prompt submission रोकता है, और
outer run loop को existing recovery path उपयोग करने देता है: oversized tool results को truncate करें
जब वह पर्याप्त हो, या configured compaction mode trigger करके retry करें. यह
option default रूप से disabled है और default तथा safeguard
दोनों compaction modes के साथ काम करता है, जिसमें provider-backed safeguard compaction भी शामिल है.
यह maxActiveTranscriptBytes से स्वतंत्र है: byte-size guard
turn खुलने से पहले चलता है, जबकि mid-turn precheck embedded OpenClaw tool
loop में नए tool results append होने के बाद बाद में चलता है.
Compaction settings (reserveTokens, keepRecentTokens)
OpenClaw runtime की compaction settings agent settings में रहती हैं:
- अगर
compaction.reserveTokens < reserveTokensFloor, OpenClaw इसे बढ़ाता है. - Default floor
20000tokens है. - Floor disable करने के लिए
agents.defaults.compaction.reserveTokensFloor: 0set करें. - अगर यह पहले से अधिक है, OpenClaw इसे वैसे ही छोड़ता है.
- Manual
/compactexplicitagents.defaults.compaction.keepRecentTokensका सम्मान करता है और OpenClaw runtime का recent-tail cut point रखता है. Explicit keep budget के बिना, manual compaction hard checkpoint रहता है और rebuilt context नए summary से शुरू होता है. - नए tool results के बाद और अगले model
call से पहले optional tool-loop precheck चलाने के लिए
agents.defaults.compaction.midTurnPrecheck.enabled: trueset करें. यह केवल trigger है; summary generation अब भी configured compaction path का उपयोग करता है. यहmaxActiveTranscriptBytesसे स्वतंत्र है, जो turn-start active-transcript byte-size guard है. - Active transcript बड़ा होने पर turn से पहले local compaction चलाने के लिए
agents.defaults.compaction.maxActiveTranscriptBytesको byte value या"20mb"जैसी string पर set करें. यह guard केवल तब active है जबtruncateAfterCompactionभी enabled हो. Disable करने के लिए इसे unset छोड़ें या0set करें. - जब
agents.defaults.compaction.truncateAfterCompactionenabled हो, OpenClaw compaction के बाद active transcript को compacted successor JSONL पर rotate करता है. Branch/restore checkpoint actions उस compacted successor का उपयोग करते हैं; legacy pre-compaction checkpoint files referenced रहते हुए readable रहती हैं.
src/agents/agent-settings.ts में applyAgentCompactionSettingsFromConfig()
(embedded-runner turn और compaction setup paths से called).
Pluggable compaction providers
Plugins plugin API परregisterCompactionProvider() के माध्यम से compaction provider register कर सकते हैं. जब agents.defaults.compaction.provider किसी registered provider id पर set हो, safeguard extension built-in summarizeInStages pipeline के बजाय summarization उस provider को delegate करता है.
provider: registered compaction provider plugin की id. Default LLM summarization के लिए unset छोड़ें.providerset करने सेmode: "safeguard"force होता है.- Providers को built-in path जैसी ही compaction instructions और identifier-preservation policy मिलती है.
- Safeguard provider output के बाद भी recent-turn और split-turn suffix context preserve करता है.
- Built-in safeguard summarization prior summaries को new messages के साथ re-distill करता है बजाय full previous summary verbatim preserve करने के.
- Safeguard mode default रूप से summary quality audits enable करता है; retry-on-malformed-output behavior skip करने के लिए
qualityGuard.enabled: falseset करें. - अगर provider fail होता है या empty result लौटाता है, OpenClaw automatically built-in LLM summarization पर fall back करता है.
- Caller cancellation का सम्मान करने के लिए abort/timeout signals re-throw किए जाते हैं (swallow नहीं किए जाते).
src/plugins/compaction-provider.ts, src/agents/agent-hooks/compaction-safeguard.ts.
User-visible surfaces
आप compaction और session state इनसे observe कर सकते हैं:/status(किसी भी chat session में)openclaw status(CLI)openclaw sessions/sessions --json- Gateway logs (
pnpm gateway:watchयाopenclaw logs --follow):embedded run auto-compaction start+complete - Verbose mode:
🧹 Auto-compaction complete+ compaction count
Silent housekeeping (NO_REPLY)
OpenClaw background tasks के लिए “silent” turns support करता है, जहां user को intermediate output नहीं दिखना चाहिए.
Convention:
- Assistant अपना output exact silent token
NO_REPLY/no_replyसे शुरू करता है ताकि indicate हो “user को reply deliver न करें”. - OpenClaw delivery layer में इसे strip/suppress करता है.
- Exact silent-token suppression case-insensitive है, इसलिए
NO_REPLYऔरno_replyदोनों count होते हैं जब पूरा payload सिर्फ silent token हो. - यह केवल true background/no-delivery turns के लिए है; यह ordinary actionable user requests के लिए shortcut नहीं है.
2026.1.10 के अनुसार, OpenClaw draft/typing streaming भी suppress करता है जब
partial chunk NO_REPLY से शुरू होता है, ताकि silent operations mid-turn में partial
output leak न करें.
Pre-compaction “memory flush” (implemented)
Goal: auto-compaction होने से पहले, एक silent agentic turn चलाएं जो durable state को disk पर लिखे (जैसे agent workspace मेंmemory/YYYY-MM-DD.md) ताकि compaction
critical context erase न कर सके.
OpenClaw pre-threshold flush approach उपयोग करता है:
- Session context usage monitor करें.
- जब यह “soft threshold” cross करता है (OpenClaw runtime के compaction threshold से नीचे), तो agent को silent “write memory now” directive चलाएं.
- Exact silent token
NO_REPLY/no_replyउपयोग करें ताकि user को कुछ न दिखे.
agents.defaults.compaction.memoryFlush):
enabled(default:true)model(flush turn के लिए optional exact provider/model override, उदाहरण के लिएollama/qwen3:8b)softThresholdTokens(default:4000)prompt(flush turn के लिए user message)systemPrompt(flush turn के लिए appended extra system prompt)
- Default prompt/system prompt delivery suppress करने के लिए
NO_REPLYhint शामिल करते हैं. - जब
modelset हो, flush turn active session fallback chain inherit किए बिना उस model का उपयोग करता है, ताकि local-only housekeeping चुपचाप paid conversation model पर fall back न करे. - Flush प्रति compaction cycle एक बार चलता है (
sessions.jsonमें tracked). - Flush केवल embedded OpenClaw sessions के लिए चलता है (CLI backends इसे skip करते हैं).
- जब session workspace read-only हो (
workspaceAccess: "ro"या"none"), flush skip किया जाता है. - Workspace file layout और write patterns के लिए Memory देखें.
session_before_compact hook भी expose करता है, लेकिन OpenClaw की
flush logic आज Gateway side पर रहती है.
Troubleshooting checklist
- Session key गलत है? /concepts/session से शुरू करें और
/statusमेंsessionKeyconfirm करें. - Store बनाम transcript mismatch?
openclaw statusसे Gateway host और store path confirm करें. - Compaction spam? Check करें:
- model context window (बहुत छोटी)
- compaction settings (model window के लिए
reserveTokensबहुत high होने से earlier compaction हो सकता है) - tool-result bloat: session pruning enable/tune करें
- Silent turns leak हो रहे हैं? Confirm करें कि reply
NO_REPLY(case-insensitive exact token) से शुरू होता है और आप ऐसे build पर हैं जिसमें streaming suppression fix शामिल है.