export type ClawdRequestState = { userMessageId: string; hint: string | null; progressEvents: TProgress[]; }; export type ClawdRequestStateByChatId = Record< string, ClawdRequestState >; export function startClawdRequestState( previousState: ClawdRequestStateByChatId, chatSessionId: string, userMessageId: string, hint: string | null ): ClawdRequestStateByChatId { return { ...previousState, [chatSessionId]: { userMessageId, hint, progressEvents: [], }, }; } export function updateClawdRequestState( previousState: ClawdRequestStateByChatId, chatSessionId: string, userMessageId: string, updater: ( currentState: ClawdRequestState ) => ClawdRequestState ): ClawdRequestStateByChatId { const currentState = previousState[chatSessionId]; if (!currentState || currentState.userMessageId !== userMessageId) { return previousState; } return { ...previousState, [chatSessionId]: updater(currentState), }; } export function clearClawdRequestState( previousState: ClawdRequestStateByChatId, chatSessionId: string, userMessageId: string ): ClawdRequestStateByChatId { const currentState = previousState[chatSessionId]; if (!currentState || currentState.userMessageId !== userMessageId) { return previousState; } const nextState = { ...previousState }; delete nextState[chatSessionId]; return nextState; }