openclaw/extensions/line/src
Miorbnli 18e80760a7
fix(channels): keep inbound log previews UTF-16 safe (#102407)
* fix(matrix): truncate inbound preview on UTF-16 code-point boundary

The matrix inbound verbose preview used bodyText.slice(0, 200) before logging.
When a supplementary-plane character (emoji, extended CJK) straddles the 200th
code unit, the slice splits its surrogate pair and emits a lone surrogate into
the verbose log line. Lone surrogates corrupt JSON log serialization, break
terminal rendering, and crash UTF-8-validating log shippers.

Use the shared truncateUtf16Safe helper (already used by the mattermost sibling
monitor after #101630) to keep complete surrogate pairs intact. No behavior
change for ASCII input; the preview is still capped at 200 code units.

Co-Authored-By: Claude <noreply@anthropic.com>

* test(matrix): fix inbound-preview test for lint and lib target

- Avoid String.prototype.isWellFormed (ES2024 lib): use the encodeURIComponent
  well-formedness probe instead, which works on the project's TS lib target.
- Replace literal string concatenation with template strings to satisfy the
  no-useless-concat lint rule. No behavior change in the assertions.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(channels): keep inbound log previews UTF-16 safe

* test(line): type verbose preview fixtures

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 07:32:55 +01:00
..
flex-templates fix(line): truncate action fields on code-point boundaries 2026-06-28 11:37:51 -07:00
account-helpers.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
accounts.test.ts fix(line): load accounts.default and default-enable named accounts (#81471) 2026-06-28 15:44:31 -07:00
accounts.ts fix(line): load accounts.default and default-enable named accounts (#81471) 2026-06-28 15:44:31 -07:00
actions.ts refactor(line): localize internal declarations (#102037) 2026-07-07 22:05:30 -07:00
auto-reply-delivery.test.ts fix(line): surface partial delivery when rich or media send fails alongside text (#100996) 2026-07-06 19:21:29 +01:00
auto-reply-delivery.ts refactor(line): localize internal declarations (#102037) 2026-07-07 22:05:30 -07:00
bindings.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
bot-access.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
bot-handlers.test.ts fix(channels): expose inbound media download failures [AI-assisted] (#100119) 2026-07-04 20:28:52 -04:00
bot-handlers.ts refactor(line): localize internal declarations (#102037) 2026-07-07 22:05:30 -07:00
bot-message-context.test.ts fix(channels): keep inbound log previews UTF-16 safe (#102407) 2026-07-09 07:32:55 +01:00
bot-message-context.ts fix(channels): keep inbound log previews UTF-16 safe (#102407) 2026-07-09 07:32:55 +01:00
bot.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
card-command.ts fix(line): truncate outbound altText, location, menu, and code fields on code point boundaries (#98994) 2026-07-03 23:46:13 -07:00
channel-access-token.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
channel-api.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
channel-setup-status.contract.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
channel-shared.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
channel.logout.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
channel.runtime.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
channel.sendPayload.test.ts fix: outbound recovery can replay already sent replies (#99600) 2026-07-04 01:09:12 -07:00
channel.setup.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
channel.status.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
channel.ts fix(agent): preserve explicit recipient sessions (#101507) 2026-07-07 10:07:13 +01:00
config-adapter.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
config-schema.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
config-schema.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
download.test.ts fix(line): preserve uploaded file names for media detection (#96403) 2026-06-29 11:03:30 -07:00
download.ts fix(line): preserve uploaded file names for media detection (#96403) 2026-06-29 11:03:30 -07:00
flex-templates.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
gateway.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
group-keys.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
group-keys.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
group-policy.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
markdown-to-line.test.ts fix(line): truncate outbound altText, location, menu, and code fields on code point boundaries (#98994) 2026-07-03 23:46:13 -07:00
markdown-to-line.ts fix(line): truncate outbound altText, location, menu, and code fields on code point boundaries (#98994) 2026-07-03 23:46:13 -07:00
message-cards.test.ts fix(line): truncate outbound altText, location, menu, and code fields on code point boundaries (#98994) 2026-07-03 23:46:13 -07:00
messaging-target.test.ts fix(agent): preserve explicit recipient sessions (#101507) 2026-07-07 10:07:13 +01:00
messaging-target.ts fix(agent): preserve explicit recipient sessions (#101507) 2026-07-07 10:07:13 +01:00
monitor-durable.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
monitor-durable.ts refactor(line): localize internal declarations (#102037) 2026-07-07 22:05:30 -07:00
monitor.lifecycle.test.ts fix(line): mark running after startup succeeds 2026-06-17 17:53:07 +02:00
monitor.runtime.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
monitor.ts refactor(line): localize internal declarations (#102037) 2026-07-07 22:05:30 -07:00
outbound-media.test.ts refactor(line): drop unused media kind detector 2026-06-19 12:30:06 +08:00
outbound-media.ts refactor(line): drop unused media kind detector 2026-06-19 12:30:06 +08:00
outbound.runtime.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
outbound.ts fix: outbound recovery can replay already sent replies (#99600) 2026-07-04 01:09:12 -07:00
probe.contract.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
probe.runtime.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
probe.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
quick-reply-fallback.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
reply-chunks.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
reply-chunks.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
reply-payload-transform.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
reply-payload-transform.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
rich-menu.test.ts fix(line): truncate outbound altText, location, menu, and code fields on code point boundaries (#98994) 2026-07-03 23:46:13 -07:00
rich-menu.ts fix(line): truncate outbound altText, location, menu, and code fields on code point boundaries (#98994) 2026-07-03 23:46:13 -07:00
runtime.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
send-receipt.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
send.test.ts fix(line): truncate action fields on code-point boundaries 2026-06-28 11:37:51 -07:00
send.ts fix(line): truncate outbound altText, location, menu, and code fields on code point boundaries (#98994) 2026-07-03 23:46:13 -07:00
session-route.test.ts fix(agent): preserve explicit recipient sessions (#101507) 2026-07-07 10:07:13 +01:00
setup-core.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
setup-runtime-api.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
setup-surface.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
setup-surface.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
signature.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
signature.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
status.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
template-messages.ts fix(line): truncate template title/altText on grapheme boundaries, not raw UTF-16 (#97428) 2026-06-28 11:59:59 -07:00
types.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
webhook-node.test.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
webhook-node.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
webhook-utils.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00
webhook.ts docs: document large extension sources 2026-06-04 21:40:44 -04:00