diff --git a/dist/fabric/src/inbound.js b/dist/fabric/src/inbound.js index e163985..317bd73 100644 --- a/dist/fabric/src/inbound.js +++ b/dist/fabric/src/inbound.js @@ -233,8 +233,21 @@ export class FabricInbound { }, onRecordError: (err) => this.log.warn(`fabric: session record failed agent=${agentId}: ${String(err)}`), onDispatchError: (err, info) => this.log.warn(`fabric: ${info.kind} dispatch failed agent=${agentId}: ${String(err)}`), - // Fabric has no length limit: deliver the whole reply as ONE message. - replyOptions: { disableBlockStreaming: true }, + // - disableBlockStreaming: Fabric has no length limit, deliver the + // whole reply as ONE message. + // - sourceReplyDeliveryMode 'automatic': OpenClaw defaults group + // chats to "message_tool_only", which SUPPRESSES auto-delivery of + // the agent's text reply (it expects the agent to call a message + // tool). Fabric already gates *when* an agent speaks via the + // per-recipient wakeup flag, so once a turn is dispatched the + // reply must always flow back through `deliver`. Forcing + // 'automatic' overrides the group default so the reply is + // delivered. (source-reply-delivery-mode: a truthy `requested` + // wins unless it's message_tool_only with no tool available.) + replyOptions: { + disableBlockStreaming: true, + sourceReplyDeliveryMode: 'automatic', + }, }); this.log.info(`fabric: dispatch returned agent=${agentId} channel=${channelId}`); } diff --git a/src/inbound.ts b/src/inbound.ts index 3f5fc18..0d82a57 100644 --- a/src/inbound.ts +++ b/src/inbound.ts @@ -279,8 +279,21 @@ export class FabricInbound { this.log.warn(`fabric: session record failed agent=${agentId}: ${String(err)}`), onDispatchError: (err: unknown, info: { kind: string }) => this.log.warn(`fabric: ${info.kind} dispatch failed agent=${agentId}: ${String(err)}`), - // Fabric has no length limit: deliver the whole reply as ONE message. - replyOptions: { disableBlockStreaming: true } as never, + // - disableBlockStreaming: Fabric has no length limit, deliver the + // whole reply as ONE message. + // - sourceReplyDeliveryMode 'automatic': OpenClaw defaults group + // chats to "message_tool_only", which SUPPRESSES auto-delivery of + // the agent's text reply (it expects the agent to call a message + // tool). Fabric already gates *when* an agent speaks via the + // per-recipient wakeup flag, so once a turn is dispatched the + // reply must always flow back through `deliver`. Forcing + // 'automatic' overrides the group default so the reply is + // delivered. (source-reply-delivery-mode: a truthy `requested` + // wins unless it's message_tool_only with no tool available.) + replyOptions: { + disableBlockStreaming: true, + sourceReplyDeliveryMode: 'automatic', + } as never, }); this.log.info(`fabric: dispatch returned agent=${agentId} channel=${channelId}`); } catch (err) {