Bug Description
When using Feishu channel with streaming: true and renderMode: "card" (default configuration), long replies produce duplicate or truncated message blocks.
Reproduction steps:
- Configure Feishu channel with streaming enabled
- Send a request that generates a long reply (> ~1000 chars)
- Observe the output in Feishu app
Expected behavior:
A single streaming card message with smooth incremental updates, followed by a final complete message.
Actual behavior:
- Case A (light): One streaming card + one additional non-streaming block with partial content
- Case B (severe): Multiple message blocks, with content from early blocks lost or duplicated
Technical Analysis
Root cause (suspected): File dist/monitor-DS-8NLOO.js, line 693:
this.updateThrottleMs = 100;
The queueStreamingUpdate() function applies 100ms throttling per update. When blocks arrive faster than 100ms intervals, updates are skipped/delayed and content is lost. When final arrives and triggers closeStreaming(), accumulated but unsent text is truncated, then sendChunkedTextReply sends the full content via fallback path, causing duplicates.
Why Telegram/Discord don't have this issue: They use editMessageText on a draft message (no throttle). Feishu uses throttled card updates via FeishuStreamingSession.
Workaround
Setting agents.defaults.blockStreamingDefault: "off" in config partially mitigates the issue but does not fully resolve it.
Environment
- OpenClaw version: 2026.4.8
- Feishu plugin version: 2026.4.8
- Node.js version: v22.x
- Deployment: Linux VM
Bug Description
When using Feishu channel with
streaming: trueandrenderMode: "card"(default configuration), long replies produce duplicate or truncated message blocks.Reproduction steps:
Expected behavior:
A single streaming card message with smooth incremental updates, followed by a final complete message.
Actual behavior:
Technical Analysis
Root cause (suspected): File
dist/monitor-DS-8NLOO.js, line 693:The
queueStreamingUpdate()function applies 100ms throttling per update. When blocks arrive faster than 100ms intervals, updates are skipped/delayed and content is lost. Whenfinalarrives and triggerscloseStreaming(), accumulated but unsent text is truncated, thensendChunkedTextReplysends the full content via fallback path, causing duplicates.Why Telegram/Discord don't have this issue: They use
editMessageTexton a draft message (no throttle). Feishu uses throttled card updates via FeishuStreamingSession.Workaround
Setting
agents.defaults.blockStreamingDefault: "off"in config partially mitigates the issue but does not fully resolve it.Environment