@Injectable ({ providedIn: 'root' }) export class AgentService implements OnDestroy {   private socket: Socket | null = null;  private streamingTextSubject = new BehaviorSubject('');   private isStreamingSubject = new BehaviorSubject(false);   private currentToolSubject = new BehaviorSubject(null);  streamingText$ = this.streamingTextSubject.asObservable();   isStreaming$ = this.isStreamingSubject.asObservable();   currentTool$ = this.currentToolSubject.asObservable(); }On connection, I send the JWT for authentication and wire up all the event handlers. Tokens get appended as they arrive:this.socket.on(   'chat:token',   (data: { conversationId: string; token: string }) => {     const current = this.streamingTextSubject.value;     this.streamingTextSubject.next(current + data.token);   } );this.socket.on('chat:tool:start', (data: { toolName: string }) => {   this.currentToolSubject.next(data.toolName); });this.socket.on('chat:complete', (data) => {   this.isStreamingSubject.next(false);   this.chatCompleteSubject.next(data); });