mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-28 05:16:23 -06:00
6299b679c0
* fix(tlon): truncate approval message preview on UTF-16 boundary formatApprovalRequest called truncate() with raw .slice() before the trailing ellipsis. A Tlon ship display name or message preview whose emoji landed on the 100-character preview cap was split mid-surrogate pair, emitting a lone surrogate in the owner notification. Use sliceUtf16Safe so the truncation always falls on a code-point boundary. * fix(tlon): guard all three messagePreview UTF-16 truncation sites The prior commit only guarded the formatter (truncate in approval.ts). The root-cause sites are in monitor/index.ts where PendingApproval is constructed: messagePreview: rawText.slice(0, 100), // channel mention path messagePreview: messageText.slice(0, 100), // DM path An emoji whose high surrogate falls at position 99 was sliced mid-pair, storing a lone \uD83D in the persistent PendingApproval before the formatter ever ran. Fix: replace both production sites with sliceUtf16Safe(), and also guard the createPendingApproval() constructor itself so any future caller that passes an untruncated preview is automatically safe. Add regression tests that drive the full createPendingApproval -> messagePreview -> formatApprovalRequest chain for both the DM and channel paths with an emoji placed exactly at the 100-unit boundary. * fix(tlon): truncate approval message preview on UTF-16 boundary * fix(clownfish): repair validation for live-pr-inventory-20260629T032026-001 (2) --------- Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Tlon (OpenClaw plugin)
Tlon/Urbit channel plugin for OpenClaw. Supports DMs, group mentions, and thread replies.