From e13562e4cbbb517ebe74d632bc35869ad386081d Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Mon, 9 Feb 2026 21:42:23 -0500 Subject: [PATCH] Clean up session tracking on session_end to prevent unbounded map growth gateway_start only fires on full process restart. Without cleanup, sessionIds and workspaceDirsBySessionKey grow indefinitely across /new and /reset cycles. session_end now deletes entries for the completed session key. Co-Authored-By: Claude Opus 4.6 --- openclaw/src/index.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/openclaw/src/index.ts b/openclaw/src/index.ts index 426085ea..fc9ab906 100644 --- a/openclaw/src/index.ts +++ b/openclaw/src/index.ts @@ -61,6 +61,12 @@ interface AfterCompactionEvent { compactedCount: number; } +interface SessionEndEvent { + sessionId: string; + messageCount: number; + durationMs?: number; +} + interface EventContext { sessionKey?: string; workspaceDir?: string; @@ -93,6 +99,7 @@ interface OpenClawPluginApi { ((event: "tool_result_persist", callback: EventCallback) => void) & ((event: "agent_end", callback: EventCallback) => void) & ((event: "session_start", callback: EventCallback) => void) & + ((event: "session_end", callback: EventCallback) => void) & ((event: "after_compaction", callback: EventCallback) => void) & ((event: "gateway_start", callback: EventCallback>) => void); runtime: { @@ -528,6 +535,15 @@ export default function claudeMemPlugin(api: OpenClawPluginApi): void { }, api.logger); }); + // ------------------------------------------------------------------ + // Event: session_end — clean up session tracking to prevent unbounded growth + // ------------------------------------------------------------------ + api.on("session_end", async (_event, ctx) => { + const key = ctx.sessionKey || "default"; + sessionIds.delete(key); + workspaceDirsBySessionKey.delete(key); + }); + // ------------------------------------------------------------------ // Event: gateway_start — clear session tracking for fresh start // ------------------------------------------------------------------