@@ -1799,8 +1799,19 @@ export function useChat(
17991799 } )
18001800 }
18011801 } catch ( err ) {
1802- if ( err instanceof Error && err . name === 'AbortError' ) return
1802+ if ( err instanceof Error && err . name === 'AbortError' ) {
1803+ logger . error ( 'Send aborted (AbortError)' , { streamId : userMessageId } )
1804+ return
1805+ }
18031806 const errorMessage = err instanceof Error ? err . message : 'Failed to send message'
1807+ logger . error ( 'Send catch block entered' , {
1808+ streamId : userMessageId ,
1809+ errorMessage,
1810+ errorName : err instanceof Error ? err . name : 'unknown' ,
1811+ gen,
1812+ currentGen : streamGenRef . current ,
1813+ hasActiveStreamId : Boolean ( streamIdRef . current ) ,
1814+ } )
18041815 if ( requestChatId && isActiveStreamConflictError ( errorMessage ) ) {
18051816 logger . info ( 'Active stream conflict detected while sending message; reattaching' , {
18061817 chatId : requestChatId ,
@@ -1859,9 +1870,12 @@ export function useChat(
18591870
18601871 const activeStreamId = streamIdRef . current
18611872 if ( activeStreamId && streamGenRef . current === gen ) {
1873+ const reconnectController = new AbortController ( )
1874+ abortControllerRef . current = reconnectController
1875+
18621876 for ( let attempt = 0 ; attempt < MAX_RECONNECT_ATTEMPTS ; attempt ++ ) {
18631877 if ( streamGenRef . current !== gen ) return
1864- if ( abortControllerRef . current ? .signal . aborted ) return
1878+ if ( reconnectController . signal . aborted ) return
18651879
18661880 const delayMs = Math . min ( RECONNECT_BASE_DELAY_MS * 2 ** attempt , RECONNECT_MAX_DELAY_MS )
18671881 logger . info ( 'Reconnect attempt after network error' , {
@@ -1876,15 +1890,15 @@ export function useChat(
18761890 await new Promise ( ( resolve ) => setTimeout ( resolve , delayMs ) )
18771891
18781892 if ( streamGenRef . current !== gen ) return
1879- if ( abortControllerRef . current ? .signal . aborted ) return
1893+ if ( reconnectController . signal . aborted ) return
18801894
18811895 try {
18821896 await resumeOrFinalize ( {
18831897 streamId : activeStreamId ,
18841898 assistantId,
18851899 gen,
18861900 fromEventId : lastEventIdRef . current ,
1887- signal : abortController . signal ,
1901+ signal : reconnectController . signal ,
18881902 } )
18891903 return
18901904 } catch ( reconnectErr ) {
0 commit comments