openclaw/extensions
yunweibang f4a2bbe0c9
fix(feishu): add early event-level dedup to prevent duplicate replies (#43762)
* fix(feishu): add early event-level dedup to prevent duplicate replies

Add synchronous in-memory dedup at EventDispatcher handler level using
message_id as key with 5-minute TTL and 2000-entry cap.

This catches duplicate events immediately when they arrive from the Lark
SDK — before the inbound debouncer or processing queue — preventing the
race condition where two concurrent dispatches enter the pipeline before
either records the messageId in the downstream dedup layer.

Fixes the root cause reported in #42687.

* fix(feishu): correct inverted dedup condition

check() returns false on first call (new key) and true on subsequent
calls (duplicate). The previous `!check()` guard was inverted —
dropping every first delivery and passing all duplicates.

Remove the negation so the guard correctly drops duplicates.

* fix(feishu): simplify eventDedup key — drop redundant accountId prefix

eventDedup is already scoped per account (one instance per
registerEventHandlers call), so the accountId prefix in the cache key
is redundant. Use `evt:${messageId}` instead.

* fix(feishu): share inbound processing claim dedupe

---------

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-13 22:37:40 -05:00
..
acpx refactor: share acpx process env test helper 2026-03-13 21:40:53 +00:00
bluebubbles refactor: share bluebubbles multipart helpers 2026-03-13 23:35:28 +00:00
copilot-proxy chore: bump version to 2026.3.13 2026-03-13 04:38:32 +00:00
device-pair refactor: share device pair ipv4 parsing 2026-03-13 23:35:27 +00:00
diagnostics-otel chore: bump version to 2026.3.13 2026-03-13 04:38:32 +00:00
diffs test: share plugin api test harness 2026-03-14 02:40:27 +00:00
discord test: dedupe discord delivery target setup 2026-03-13 23:35:27 +00:00
feishu fix(feishu): add early event-level dedup to prevent duplicate replies (#43762) 2026-03-13 22:37:40 -05:00
google-gemini-cli-auth test: dedupe gemini oauth fallback checks 2026-03-13 23:35:27 +00:00
googlechat refactor: share extension channel status summaries 2026-03-14 02:40:27 +00:00
imessage refactor: share extension channel status summaries 2026-03-14 02:40:27 +00:00
irc refactor: share extension deferred and runtime helpers 2026-03-14 02:40:28 +00:00
line refactor: share line outbound media loop 2026-03-13 23:35:26 +00:00
llm-task test: dedupe llm task embedded run setup 2026-03-13 23:35:27 +00:00
lobster test: share lobster windows spawn assertions 2026-03-13 21:40:53 +00:00
matrix refactor: share extension deferred and runtime helpers 2026-03-14 02:40:28 +00:00
mattermost refactor: share extension channel status summaries 2026-03-14 02:40:27 +00:00
memory-core Plugins: resolve local openclaw peer for audits 2026-03-13 13:55:28 -07:00
memory-lancedb chore: update dependencies 2026-03-14 02:09:53 +00:00
minimax-portal-auth chore: bump version to 2026.3.13 2026-03-13 04:38:32 +00:00
msteams test: share directory runtime helpers 2026-03-14 02:40:27 +00:00
nextcloud-talk refactor: share extension monitor runtime setup 2026-03-14 02:40:28 +00:00
nostr refactor: share extension deferred and runtime helpers 2026-03-14 02:40:28 +00:00
ollama chore: bump version to 2026.3.13 2026-03-13 04:38:32 +00:00
open-prose docs: trim duplicated plugin and open prose guides 2026-03-13 20:19:39 +00:00
phone-control test: share plugin api test harness 2026-03-14 02:40:27 +00:00
qwen-portal-auth refactor(extensions): reuse shared helper primitives 2026-03-07 10:41:05 +00:00
sglang refactor: share self hosted provider plugin helpers 2026-03-14 01:40:41 +00:00
shared fix(ci): repair helper typing regressions 2026-03-14 03:22:53 +00:00
signal chore: bump version to 2026.3.13 2026-03-13 04:38:32 +00:00
slack refactor: share extension channel status summaries 2026-03-14 02:40:27 +00:00
synology-chat fix(ui): stop dashboard chat history reload storm (#45541) 2026-03-13 19:19:53 -05:00
talk-voice fix(discord): avoid native plugin command collisions 2026-03-07 21:59:44 +00:00
telegram fix(ui): stop dashboard chat history reload storm (#45541) 2026-03-13 19:19:53 -05:00
test-utils fix(ci): repair helper typing regressions 2026-03-14 03:22:53 +00:00
thread-ownership test: dedupe thread ownership send checks 2026-03-13 23:35:27 +00:00
tlon fix(ui): stop dashboard chat history reload storm (#45541) 2026-03-13 19:19:53 -05:00
twitch refactor: share extension channel status summaries 2026-03-14 02:40:27 +00:00
vllm refactor: share self hosted provider plugin helpers 2026-03-14 01:40:41 +00:00
voice-call fix(ui): stop dashboard chat history reload storm (#45541) 2026-03-13 19:19:53 -05:00
whatsapp test: share whatsapp outbound poll fixtures 2026-03-14 01:41:17 +00:00
zalo test: share directory runtime helpers 2026-03-14 02:40:27 +00:00
zalouser refactor: share extension deferred and runtime helpers 2026-03-14 02:40:28 +00:00
.npmignore fix: harden windows npm runtime path 2026-03-12 23:03:19 +00:00