// Telegram tests cover progress text clipping behavior. import { sliceUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime"; export const TELEGRAM_PROGRESS_MAX_CHARS = 300; /** * Clips Telegram progress text to at most {@link TELEGRAM_PROGRESS_MAX_CHARS} UTF-16 code units, * slicing on a code-point boundary so a surrogate pair straddling the limit is * dropped whole rather than leaving a lone high surrogate in the payload. */ export function clipTelegramProgressText(text: string): string { if (text.length <= TELEGRAM_PROGRESS_MAX_CHARS) { return text; } // Slice on a code-point boundary so an emoji (or any astral character) that // straddles the limit is dropped whole instead of leaving a lone \uD83D-style // high surrogate before the ellipsis, which serializes to an invalid character // in the Telegram Bot API payload. return `${sliceUtf16Safe(text, 0, TELEGRAM_PROGRESS_MAX_CHARS - 1).trimEnd()}…`; }