Skip to content

[Bug]: Feishu: messages not delivered when blockStreamingDefault is "on" (queuedFinal=false, replies=0) #38258

@abchinawxh-design

Description

@abchinawxh-design

Bug type

Behavior bug (incorrect output/state without crash)

Summary

Environment

  • openclaw version: 2026.3.2
  • Channel: Feishu (two accounts: default + invest)
  • agents.defaults.blockStreamingDefault: "on"

Problem

When blockStreamingDefault is set to "on" (the default after setup wizard),
Feishu agents receive messages and dispatch to the agent successfully, but
no reply is ever delivered to the Feishu client.

Log shows:
feishu[invest]: dispatching to agent (session=...)
feishu[invest]: dispatch complete (queuedFinal=false, replies=0)

The agent does generate a response (confirmed via session files), but it never reaches Feishu.

Root Cause

In extensions/feishu/src/reply-dispatcher.ts, the returned replyOptions does not set
disableBlockStreaming. This means the agent-level block streaming pipeline is active.

The pipeline calls onBlockReplydispatcher.sendBlockReply() → feishu's deliver({kind: "block"}).
However, feishu's deliver silently drops block chunks when renderMode is "auto" and the
text contains no code blocks/tables (!(streamingEnabled && useCard)return).

The pipeline still marks didStream = true (the callback returned without error).
Then shouldDropFinalPayloads = blockStreamingEnabled && didStream() = true, so the final
reply array is filtered to []. dispatcher.sendFinalReply() is never called → nothing sent.

Compare with QQ bot: it actually sends block chunks, so didStream=true is correct and
the final reply being dropped is acceptable. Feishu drops blocks silently, causing both
blocks AND the final reply to be lost.

Fix

In extensions/feishu/src/reply-dispatcher.ts, add disableBlockStreaming: true to replyOptions:

  return {
    dispatcher,
    replyOptions: {
      ...replyOptions,
      onModelSelected: prefixContext.onModelSelected,
+     disableBlockStreaming: true,
      onPartialReply: streamingEnabled ? ... : undefined,
    },
    markDispatchIdle,
  };

After this fix, log shows:
feishu[default]: dispatch complete (queuedFinal=true, replies=1)  ✅
feishu[invest]: dispatch complete (queuedFinal=true, replies=1)   ✅

Notes

- QQ bot channel is unaffected (it does not go through feishu's reply-dispatcher)
- Feishu streaming cards (via onPartialReply) still work after this fix
- This bug affects any setup where blockStreamingDefault: "on" (which is the default)

---

### Steps to reproduce

When `blockStreamingDefault` is set to `"on"` (the default after setup wizard),
Feishu agents receive messages and dispatch to the agent successfully, but
**no reply is ever delivered** to the Feishu client.

### Expected behavior

feishu agent can reseive the message

### Actual behavior

## Problem
When `blockStreamingDefault` is set to `"on"` (the default after setup wizard),
Feishu agents receive messages and dispatch to the agent successfully, but
**no reply is ever delivered** to the Feishu client.

### OpenClaw version

- openclaw version: 2026.3.2   - Channel: Feishu (two accounts: default + invest)   - agents.defaults.blockStreamingDefault: "on"

### Operating system

opencloudos 6.6.117-45.1.oc9.x86_64

### Install method

_No response_

### Logs, screenshots, and evidence

```shell
Log shows:
feishu[invest]: dispatching to agent (session=...)
feishu[invest]: dispatch complete (queuedFinal=false, replies=0)

The agent does generate a response (confirmed via session files), but it never reaches Feishu.

Impact and severity

No response

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingbug:behaviorIncorrect behavior without a crash

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions