From 68786fc90c48a57369becbded15be264f8039ae7 Mon Sep 17 00:00:00 2001 From: Vellum Assistant Date: Wed, 25 Feb 2026 01:48:12 -0500 Subject: [PATCH] =?UTF-8?q?fix:=20prevent=20map=20leaks=20in=20recording?= =?UTF-8?q?=20handlers=20=E2=80=94=20duplicate=20start=20+=20missing=20soc?= =?UTF-8?q?ket?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude --- assistant/src/daemon/handlers/recording.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/assistant/src/daemon/handlers/recording.ts b/assistant/src/daemon/handlers/recording.ts index 7e991d551d6..42c6afc9763 100644 --- a/assistant/src/daemon/handlers/recording.ts +++ b/assistant/src/daemon/handlers/recording.ts @@ -29,6 +29,12 @@ export function handleRecordingStart( ): string { const recordingId = uuid(); + const existingRecordingId = recordingOwnerByConversation.get(conversationId); + if (existingRecordingId) { + log.warn({ conversationId, existingRecordingId }, 'Overwriting active recording for conversation'); + standaloneRecordingConversationId.delete(existingRecordingId); + } + standaloneRecordingConversationId.set(recordingId, conversationId); recordingOwnerByConversation.set(conversationId, recordingId); @@ -68,6 +74,8 @@ export function handleRecordingStop( const socket = findSocketForSession(conversationId, ctx); if (!socket) { log.warn({ conversationId, recordingId }, 'Cannot send recording_stop: no socket bound to conversation'); + standaloneRecordingConversationId.delete(recordingId); + recordingOwnerByConversation.delete(conversationId); return undefined; }