You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Every response dispatch creates two streaming card messages in Feishu DMs. The first card receives the full streamed content, and a second identical card (without streaming content) is created ~1 second later.
In dispatch-CYHzwBjK.js, queuedCounts.final increments per sendFinalReply() call. A count of 2 means sendFinalReply() is called twice for a single response.
The first sendFinalReply call closes the streaming card. The second call hits startStreaming() after closeStreaming() has nulled streamingStartPromise, so the guard if (streaming) return fails, and a second streaming card is created and immediately closed.
Reproduction
Configure Feishu renderer with renderMode: "card", cardName: "claw-default"
Send any message to the bot
Observe two Interactive Card messages appear in the chat
Evidence
From gateway logs (PM2):
card update delta=0ms → cardkit card created (id=7625704855768566742)
card close → cardId=7625704855768566742
card update delta=0ms → cardkit card created (id=7625705023825279638)
card close → cardId=7625705023825279638
Two separate im.message.create calls with different message IDs for a single dispatch.
Expected Behavior
Only one streaming card should be created per response. counts.final should be 1 for normal single-text responses.
Workaround
None clean. Using renderMode: "auto" still produces 2 messages (streaming card + fallback text). Only disabling card streaming entirely avoids the duplicate.
Environment
2026.4.5 (3e72c03)2026.3.8Description
Every response dispatch creates two streaming card messages in Feishu DMs. The first card receives the full streamed content, and a second identical card (without streaming content) is created ~1 second later.
Root Cause Analysis
Traced through the codebase:
In
monitor-BFekcwtJ.js, thecreateFeishuReplyDispatcherdeliver callback callsstartStreaming()on first block delivery (creates card fix: add @lid format support and allowFrom wildcard handling #1), then callscloseStreaming()on final delivery (closes card fix: add @lid format support and allowFrom wildcard handling #1 via PATCH to/cardkit/v1/cards/{cardId}/settings).However,
counts.finalconsistently shows2in dispatch logs:In
dispatch-CYHzwBjK.js,queuedCounts.finalincrements persendFinalReply()call. A count of 2 meanssendFinalReply()is called twice for a single response.The first
sendFinalReplycall closes the streaming card. The second call hitsstartStreaming()aftercloseStreaming()has nulledstreamingStartPromise, so the guardif (streaming) returnfails, and a second streaming card is created and immediately closed.Reproduction
renderMode: "card",cardName: "claw-default"Evidence
From gateway logs (PM2):
Two separate
im.message.createcalls with different message IDs for a single dispatch.Expected Behavior
Only one streaming card should be created per response.
counts.finalshould be1for normal single-text responses.Workaround
None clean. Using
renderMode: "auto"still produces 2 messages (streaming card + fallback text). Only disabling card streaming entirely avoids the duplicate.