openclaw/extensions/whatsapp/src
huangjianxiong 0a8677ec99
fix(whatsapp): keep echo tracker log truncation UTF-16 safe (#102603)
* fix(whatsapp): keep echo tracker log truncation UTF-16 safe

Replace `.slice(0, 50)` with `truncateUtf16Safe(text, 50)` in
echo tracker verbose log message to prevent surrogate pair corruption.

Ref. lsr911 pattern — mechanical substitution, no behavior change.

* test(whatsapp): cover UTF-16-safe echo previews

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 11:46:52 +01:00
..
__fixtures__ Replace Sharp image backend with Photon (#86437) 2026-05-25 15:04:44 +01:00
auto-reply fix(whatsapp): keep echo tracker log truncation UTF-16 safe (#102603) 2026-07-09 11:46:52 +01:00
inbound refactor(whatsapp): localize internal types (#101959) 2026-07-07 19:05:16 -07:00
account-config.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
account-ids.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
account-types.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
accounts.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
accounts.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
accounts.whatsapp-auth.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
action-runtime-target-auth.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
action-runtime.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
action-runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
active-listener.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
active-listener.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
agent-tools-call.test.ts feat(whatsapp): add requester-bound MeowCaller calls (#99635) 2026-07-04 02:19:28 -07:00
agent-tools-call.ts feat(whatsapp): add requester-bound MeowCaller calls (#99635) 2026-07-04 02:19:28 -07:00
agent-tools-login.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
agent-tools-login.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
approval-auth.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
approval-auth.ts refactor: localize internal implementation symbols (#101831) 2026-07-07 10:23:36 -07:00
approval-handler.runtime.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
approval-handler.runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
approval-native.test.ts refactor(channels): drop unused approval aliases 2026-06-19 16:41:19 +08:00
approval-native.ts refactor(channels): drop unused approval aliases 2026-06-19 16:41:19 +08:00
approval-reactions.test.ts fix(whatsapp): resolve approval reactions across jid drift (#95935) 2026-06-23 00:44:50 -03:00
approval-reactions.ts refactor: localize internal implementation symbols (#101831) 2026-07-07 10:23:36 -07:00
approval-resolver.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
auth-store.lazy-dir.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
auth-store.runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
auth-store.test.ts fix(whatsapp): restore malformed credentials from backup (#99070) 2026-07-05 06:50:28 -07:00
auth-store.ts fix(whatsapp): restore malformed credentials from backup (#99070) 2026-07-05 06:50:28 -07:00
auto-reply.broadcast-groups.combined.test.ts refactor(whatsapp): migrate admission object callers (#93787) 2026-06-17 08:58:49 +08:00
auto-reply.broadcast-groups.test-harness.ts test(whatsapp): update auto reply inbound fixtures 2026-06-11 17:29:24 +01:00
auto-reply.impl.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
auto-reply.test-harness.ts fix: block WhatsApp sends during reachout timelock (#101264) 2026-07-07 00:54:43 -03:00
auto-reply.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.test.ts refactor(whatsapp): migrate admission object callers (#93787) 2026-06-17 08:58:49 +08:00
auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts fix(whatsapp): bound reconnect catch-up replies (#80642) 2026-07-05 06:34:57 -07:00
auto-reply.web-auto-reply.last-route.test.ts chore(deadcode): remove test-only channel helpers 2026-06-22 16:57:03 +08:00
channel-actions.runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
channel-actions.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
channel-actions.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
channel-outbound.test.ts fix: outbound recovery can replay already sent replies (#99600) 2026-07-04 01:09:12 -07:00
channel-outbound.ts refactor: localize internal implementation symbols (#101831) 2026-07-07 10:23:36 -07:00
channel-react-action.runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
channel-react-action.test.ts test(qa-lab): harden whatsapp qa scenarios (#95622) 2026-07-01 00:01:09 -03:00
channel-react-action.ts refactor: consolidate exact boolean coercion (#99750) 2026-07-03 19:42:06 -07:00
channel.acp-bindings.test.ts Honor WhatsApp configured ACP bindings (#92513) 2026-06-13 18:09:22 -03:00
channel.runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
channel.setup.test.ts fix(channels): normalize phone identities with stray plus signs (#100467) 2026-07-06 02:19:11 +01:00
channel.setup.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
channel.ts fix(gateway): stop terminal WhatsApp restart loops (#78511) 2026-07-05 05:49:33 -07:00
command-policy.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
config-accessors.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
config-accessors.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
config-schema.test.ts feat(whatsapp): add requester-bound MeowCaller calls (#99635) 2026-07-04 02:19:28 -07:00
config-schema.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
config-ui-hints.ts feat(whatsapp): add requester-bound MeowCaller calls (#99635) 2026-07-04 02:19:28 -07:00
connection-controller-registry.test.ts fix(whatsapp): route captured replies through successor controller after restart (#85823) 2026-06-09 00:05:44 -03:00
connection-controller-registry.ts fix(whatsapp): route captured replies through successor controller after restart (#85823) 2026-06-09 00:05:44 -03:00
connection-controller.test.ts fix(whatsapp): remove dead watchdog timeout clamp (#95706) 2026-06-22 17:47:10 +08:00
connection-controller.ts fix(whatsapp): remove dead watchdog timeout clamp (#95706) 2026-06-22 17:47:10 +08:00
creds-files.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
creds-persistence.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
creds-persistence.ts refactor: consolidate exact keyed async queues (#99691) 2026-07-04 16:45:07 -07:00
directory-config.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
directory-config.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
directory-contract.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
doctor-contract.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
doctor.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
doctor.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
document-filename.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
document-filename.ts refactor: localize internal implementation symbols (#101831) 2026-07-07 10:23:36 -07:00
group-config-path.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
group-intro.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
group-policy.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
group-policy.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
group-session-contract.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
group-session-key.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
group-session-key.ts fix(agent): preserve explicit recipient sessions (#101507) 2026-07-07 10:07:13 +01:00
heartbeat.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
identity.ts refactor(whatsapp): read inbound contexts in auto reply 2026-06-11 17:29:24 +01:00
image-preview.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
inbound-context.contract.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
inbound-policy.ts refactor(whatsapp): localize internal types (#101959) 2026-07-07 19:05:16 -07:00
inbound.media.test.ts fix(channels): expose inbound media download failures [AI-assisted] (#100119) 2026-07-04 20:28:52 -04:00
inbound.test.ts fix(whatsapp): extract GIF metadata and distinguish gifPlayback in media placeholders (fixes #49099) (#93679) 2026-06-17 02:12:10 +08:00
inbound.ts fix(whatsapp): extract GIF metadata and distinguish gifPlayback in media placeholders (fixes #49099) (#93679) 2026-06-17 02:12:10 +08:00
login-qr.test.ts fix(whatsapp): preserve auth on terminal disconnects (#93076) 2026-06-15 20:50:22 -03:00
login-qr.ts refactor: localize internal reply and plugin types (#101666) 2026-07-07 05:51:47 -07:00
login.coverage.test.ts fix(whatsapp): replace refreshed terminal QR (#100159) 2026-07-04 23:42:26 -04:00
login.test.ts fix(whatsapp): require durable auth before login success (#92095) 2026-06-14 10:24:14 +08:00
login.ts fix(whatsapp): replace refreshed terminal QR (#100159) 2026-07-04 23:42:26 -04:00
logout.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
media.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
media.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
monitor-inbox.allows-messages-from-senders-allowfrom-list.test-support.ts refactor(whatsapp): migrate admission object callers (#93787) 2026-06-17 08:58:49 +08:00
monitor-inbox.append-upsert.test-support.ts fix(whatsapp): bound reconnect catch-up replies (#80642) 2026-07-05 06:34:57 -07:00
monitor-inbox.behavior.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
monitor-inbox.blocks-messages-from-unauthorized-senders-not-allowfrom.test-support.ts refactor(whatsapp): migrate admission object callers (#93787) 2026-06-17 08:58:49 +08:00
monitor-inbox.captures-media-path-image-messages.test-support.ts test: stabilize load-sensitive test families that break gates under parallel load (#100420) 2026-07-05 12:53:06 -07:00
monitor-inbox.streams-inbound-messages.test-support.ts fix: block WhatsApp sends during reachout timelock (#101264) 2026-07-07 00:54:43 -03:00
monitor-inbox.test-harness.ts fix: block WhatsApp sends during reachout timelock (#101264) 2026-07-07 00:54:43 -03:00
normalize-target.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
normalize.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
outbound-adapter.poll.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
outbound-adapter.sendpayload.test.ts test(channels): align outbound delivery assertions 2026-07-04 15:13:16 +02:00
outbound-adapter.ts refactor(shared): consolidate remaining channel lazy loaders (#99302) 2026-07-02 19:08:11 -07:00
outbound-base.test.ts fix: outbound recovery can replay already sent replies (#99600) 2026-07-04 01:09:12 -07:00
outbound-base.ts fix: outbound recovery can replay already sent replies (#99600) 2026-07-04 01:09:12 -07:00
outbound-media-contract.ts fix(whatsapp): bound socket operations (#93094) 2026-06-15 00:04:11 -03:00
outbound-media.runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
outbound-payload.contract.test.ts test(channels): align outbound delivery assertions 2026-07-04 15:13:16 +02:00
outbound-send-deps.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
outbound-test-support.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
pairing-security.test-harness.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
qa-driver.runtime.test.ts test(qa-lab): harden whatsapp qa scenarios (#95622) 2026-07-01 00:01:09 -03:00
qa-driver.runtime.ts refactor(whatsapp): localize internal types (#101959) 2026-07-07 19:05:16 -07:00
qr-image.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
qr-terminal.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
quoted-message.test.ts fix(whatsapp): preserve bot-authored quote replies (#94879) 2026-07-05 06:47:50 -07:00
quoted-message.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
reaction-level.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
reaction-level.ts refactor(types): remove redundant local aliases (#100061) 2026-07-04 16:34:47 -07:00
reconnect.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
reconnect.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
resolve-outbound-target.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
resolve-outbound-target.ts refactor(whatsapp): localize internal types (#101959) 2026-07-07 19:05:16 -07:00
resolve-target.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
runtime-api.ts refactor(shared): consolidate remaining channel lazy loaders (#99302) 2026-07-02 19:08:11 -07:00
runtime-group-policy.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
security-contract.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
security-fix.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
send.test.ts fix(whatsapp): gate poll sends during reachout timelock 2026-07-07 06:03:09 +02:00
send.ts fix(whatsapp): gate poll sends during reachout timelock 2026-07-07 06:03:09 +02:00
session-contract.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
session-contract.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
session-errors.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
session-route.test.ts fix(agent): preserve explicit recipient sessions (#101507) 2026-07-07 10:07:13 +01:00
session-route.ts fix(agent): preserve explicit recipient sessions (#101507) 2026-07-07 10:07:13 +01:00
session.runtime.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
session.test.ts fix(whatsapp): validate WebSocket URL env (#97697) 2026-06-29 10:50:16 -07:00
session.ts refactor: localize internal reply and plugin types (#101666) 2026-07-07 05:51:47 -07:00
setup-core.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
setup-finalize.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
setup-surface.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
setup-surface.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
setup-test-helpers.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
shared.ts fix(whatsapp): restart listener on selfChatMode config change (#93873) 2026-06-19 13:41:26 +01:00
socket-timing.test.ts fix(whatsapp): serialize overlapping Web sends (#99050) 2026-07-05 02:32:36 -04:00
socket-timing.ts fix(whatsapp): serialize overlapping Web sends (#99050) 2026-07-05 02:32:36 -04:00
state-migrations.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
status-issues.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
status-issues.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
system-prompt.test.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
system-prompt.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
targets-runtime.ts fix(whatsapp): convert GFM bold-italic without leaving literal asterisks (#96570) 2026-06-27 08:46:45 -07:00
test-helpers.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00
text-runtime.test.ts fix(whatsapp): convert GFM bold-italic without leaving literal asterisks (#96570) 2026-06-27 08:46:45 -07:00
text-runtime.ts fix(whatsapp): resolve approval reactions across jid drift (#95935) 2026-06-23 00:44:50 -03:00
vcard.ts docs: document channel extension sources 2026-06-04 21:59:00 -04:00