splitMessage used byte-length (len(s)) and byte-slicing (s[:n]) to split
long messages into platform-sized chunks. When the text contains multi-byte
UTF-8 characters (Chinese, Japanese, emoji, etc.), a byte-level split can
cut in the middle of a character, producing invalid UTF-8 sequences that
cause garbled output on messaging platforms.
Switch to []rune-based length checks and slicing so splits always occur
at character boundaries. Also fix the newline-boundary search to correctly
convert byte offsets to rune offsets in the mixed-content case.
Add regression tests covering CJK, emoji, and newline-split scenarios.