Spaces:
Sleeping
Sleeping
File size: 1,549 Bytes
b8ba5a3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # Bug Analysis - Chat Message Flow
## Bug 1: Auth fails on /api/chat/stream (FIXED)
- `getAuthUser()` in chat-endpoint.ts used SDK auth which requires JWT cookie
- In dev mode, no cookie is set → returns null → 401 Unauthorized
- Fix: Added dev-mode bypass matching tRPC context.ts
## Bug 2: Race condition in Home.tsx session creation
- When user sends first message with no session:
1. `handleSend()` calls `createSession.mutate()` with inline `onSuccess` that calls `sendMessage(content, session.id)`
2. But `createSession` also has a global `onSuccess` that calls `clearMessages()`
3. Race: `sendMessage` adds user msg + assistant placeholder → `clearMessages()` wipes them
- Fix: Remove `clearMessages()` from global createSession.onSuccess when it's triggered by handleSend
## Bug 3: sessionMessages useEffect overwrites optimistic state
- When `currentSessionId` changes, `trpc.messages.list.useQuery` fires
- The useEffect unconditionally calls `setMessages(mapped)`
- This can overwrite the optimistic user message added by useChat before the DB message is visible
- Fix: Don't overwrite messages during streaming
## Bug 4: "done" SSE event with empty data gets skipped
- Line 123 in useChat.ts: `if (!dataStr || dataStr === "{}") continue;`
- The "done" event sends `data: {}` which gets skipped - this is fine
- But the "done" event should trigger cleanup
## Action items:
1. ✅ Fix auth bypass in chat-endpoint.ts
2. Fix race condition in Home.tsx
3. Guard sessionMessages effect during streaming
4. Test end-to-end
|