I assume that KoL normalizes messages internally and every message has a message id and a timestamp. You don't get to specify those things when you submit a message via either lchat or mchat, but when you receive a message via mchat, you can see them. When you receive a message via lchat, you don't.
With the chat GUI and the relay browser running simultaneously, each receives messages in whatever protocol it is communicating in. If the mchat protocol, you see KoL's timestamps. If the the lchat protocol, no.
Now, regarding your comment, when trying to match a message received in the browser via mchat protocol, our concern is to not give it to the GUI if it was originated (and echoed) there. Therefore, we compare only against SentMessage history entries. So, if someone types "yeah" in the chat GUI and then, within 25 messages, types "yeah" in the relay browser which is running mchat, we will think that we originated the message.
I actually bumped the rolling buffer up from 5 messages to 25 messages, which will exacerbate that possibility. Had I left it at 5 and you typed a lot of short messages into the chat GUI before the browser refreshes, it is possible that it will echo a message which has rolled off the list. Is that more or less likely than interspersing short messages in the two chat clients?
I also considered whether it would be useful to switch the chat GUI to use mchat rather than lchat. It would allow us to be completely compatible with the browser running mchat, but, aside from it being a vastly larger effort, we'd have the equivalent can of worms (ball of worms? can of wax? ball of wax?) if the user decided to run lchat in the browser.
The compatibility issue is a huge mess and I thought about this for days before concluding that although mchat provides all that nice metadata, if you run one protocol in the browser and one in the GUI - and we cannot stop users from doing that - we can't make it work perfectly. Either it is impossible, or it is too hard for me - at least in the amount of time I am willing to put into it.
If somebody else wants to work on it, be my guest!
I may shrink the rolling buffer back down to 5 again. Would I prefer to see a bug report because the buffer is too small, or because it is too large?
