The recovery logic matched questions by checking if the list was
non-empty, which caused it to pick up stale questions from earlier
turns. When a re-ask fired, the wrong question could resolve the
blocker, leaving the real question undelivered and the process stuck.
Match questions by messageID and callID from the originating tool part
so only the correct question unblocks the prompt.
Fixes#27503
String.length counts code points, not display columns, so CJK
characters and emoji that occupy two terminal cells caused
misaligned cursors, broken mention triggers, and incorrect
history restoration offsets.
Use Bun.stringWidth for now, we need an alternative for this.
Fix#26716Close#26922