This seems IME composition issue. Doubling OS and app(Obsidian) event.
The problem is, isComposing: ture
even after a key event. (e.g. enter, esc …)
KeyboardEvent: isComposing property - Web APIs | MDN
AFAIK many services solve this CJK IME problem by early returning if isComposing.
I know nothing about React, but this is a case in React project:
const handleKeyDown = (event: React.KeyboardEvent) => {
if (event.nativeEvent.isComposing) return;
...
};