* fix(terminal): let Korean be typed in the mobile terminal The hidden native terminal input set keyboardType="ascii-capable", which removes the globe key on iOS — the key that switches to the Korean layout. There was no way to reach a Hangul keyboard from a terminal at all. Reaching the layout is not enough. receiveTextChange forwards a text change only when it extends the previous buffer, and a Korean IME rewrites the syllable it is composing in place: ㅎ → 하 → 한. Every keystroke after the first jamo failed startsWith and was dropped, so Korean produced one stray jamo and nothing else. Forward a composition edit as a rubout plus the replacement when it rewrites exactly one trailing Hangul character. Wider rewrites stay swallowed: those are autocorrect and suggestion replacements, which can touch text the terminal has already committed. Hangul also stops travelling the keypress path. The IME reports the jamo it is composing while the text change reports the syllable, and dispatching both puts two conflicting characters on the wire. * fix(terminal): stop composition rubouts after a swallowed replacement A swallowed replacement advances previousText to text the terminal never received, so the buffer and the terminal disagree from that point on. A composition rubout deletes from the terminal, which means it deletes whatever is actually sitting there rather than the character the buffer thinks it is replacing: 한글 swallowed to 우리 then rewritten to 우루 emitted DEL and left 한루 on the line. Latch the disagreement when a replacement is swallowed and keep rubouts off until the line is cleared, which is where the buffer and the terminal are known to match again. Appends are unchanged. * fix(terminal): support CJK IME composition on mobile * fix(terminal): guard backspace after input desync * fix(terminal): retain desync guard after hidden input clears * fix(terminal): preserve Unicode text on Backspace --------- Co-authored-by: ljy900825-dev <ljy900825@gmail.com> Co-authored-by: Mohamed Boudra <boudra.moha@gmail.com>