- Shipped
- April 25, 2026 at 10:17 PM UTC
- Author
- kamo
- Commit
- 3873b0b
ToolDock (and its tool windows like SupportTicketWindow → TicketChat) is mounted inside ToolProviders, which sits ABOVE PresenceWrapper in the tree to avoid unmounting on auth/navigation changes. ChatWebSocketProvider lived inside PresenceWrapper, so tool windows fell back to the default no-op context value — TicketChat's subscribe() was a silent no-op, the agent never sent SUBSCRIBE for /topic/chat/session/{guid}, and visitor messages after the first appeared only after a refresh (REST initial-fetch). Move ChatWebSocketProvider to layout.tsx wrapping ToolProviders. The provider now internally gates on authentication so it stays safe at the top of the tree.