Two bugs were introduced when sendTextMessage was changed to auto-detect
message format (text/post/interactive):
1. Message type mismatch: sendTextMessage could create a text or post
message, but patchTextMessage only works on interactive cards.
Fix: add sendInteractiveCardMessage for streaming create (always
interactive, always patchable).
2. flushTextToSink state corruption: the text management after flush
had a flawed appendedDuringFlush heuristic that could lose text or
duplicate it. Fix: properly track sent vs unsent text by removing
the sent prefix length, keeping only the last chunk for future patches.
Also fix finish() to flush pending text regardless of currentMessageId.
- Increase max message length from 4000 to 8000 chars
- Add splitAtBoundary: paragraph > newline > space priority, never split
inside fenced code blocks (move split to before opening fence)
- Add sendLongText: sends multi-chunk long messages sequentially
- Update PatchableTextStream.flush to use splitAtBoundary
- Add unit tests (6) for splitting edge cases