Thanks @chrishamm.
I think it's possible to have a stateless duet that support proper console output to any number of clients. It's based on the fact that the polling interval T is relatively short. Something along these lines:
Duet keeps only last lines not older than T + some margin.
Duet tracks sequence number of each line from start.
When returning lines to a client, duet also returns seq number of last returned line.
Client pass that seq number in next call and duet sends back only newer lines.
Or something like this. The duet's memory overhead is independent on the number of clients, and client can tell if they lost lines for any reason.
BTW, having multiple DWC clients at a same time is a common use case. For example, when debugging a macro, I open the file in one tab and issue manual commands in another.