import { log } from "../../shared/logger" import { resolveSessionEventID } from "../../shared/event-session-id" import { HOOK_NAME } from "./constants" import type { RalphLoopState } from "./types" type LoopStateController = { getState: () => RalphLoopState | null clear: () => boolean } export function handleDeletedLoopSession( props: Record | undefined, loopState: LoopStateController, ): boolean { const sessionID = resolveSessionEventID(props) if (!sessionID) return false const state = loopState.getState() if (state?.session_id === sessionID) { loopState.clear() log(`[${HOOK_NAME}] Session deleted, loop cleared`, { sessionID }) } return true } export function handleErroredLoopSession( props: Record | undefined, loopState: LoopStateController, ): boolean { const sessionID = resolveSessionEventID(props) const error = props?.error as { name?: string } | undefined if (error?.name === "MessageAbortedError") { if (sessionID) { const state = loopState.getState() if (state?.session_id === sessionID) { loopState.clear() log(`[${HOOK_NAME}] User aborted, loop cleared`, { sessionID }) } } return true } if (sessionID) { log(`[${HOOK_NAME}] Session error ignored, loop remains active`, { sessionID }) } return true }