fix: never split replies into multiple messages (Fabric has no length limit)

Unlike Discord, Fabric has no message-length cap. Single-chunk chunker
(text -> [text]), textChunkLimit=MAX_SAFE_INTEGER, capabilities
blockStreaming=false, replyOptions.disableBlockStreaming=true -> every
agent reply delivered as exactly one Fabric message.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
h z
2026-05-15 18:30:25 +01:00
parent 9cb262367e
commit f59c693186
4 changed files with 22 additions and 6 deletions

View File

@@ -93,7 +93,9 @@ export const fabricChannelPlugin = createChatChannelPlugin({
threads: false,
media: false,
nativeCommands: false,
blockStreaming: true,
// Fabric has no message-length limit and we never want a reply split
// into multiple messages -> no block streaming.
blockStreaming: false,
},
reload: { configPrefixes: ['channels.fabric'] },
config: {
@@ -126,7 +128,12 @@ export const fabricChannelPlugin = createChatChannelPlugin({
},
threading: { topLevelReplyToMode: 'channel' },
outbound: {
base: {},
base: {
deliveryMode: 'direct',
// Fabric has no length limit: never chunk — always one message.
chunker: (text) => [text],
textChunkLimit: Number.MAX_SAFE_INTEGER,
},
attachedResults: {
channel: 'fabric',
sendText: async (ctx) => {

View File

@@ -144,7 +144,8 @@ 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)}`),
replyOptions: {},
// Fabric has no length limit: deliver the whole reply as ONE message.
replyOptions: { disableBlockStreaming: true },
});
this.log.info(`fabric: dispatch returned agent=${agentId} channel=${channelId}`);
}

View File

@@ -105,7 +105,9 @@ export const fabricChannelPlugin = createChatChannelPlugin<ResolvedFabricAccount
threads: false,
media: false,
nativeCommands: false,
blockStreaming: true,
// Fabric has no message-length limit and we never want a reply split
// into multiple messages -> no block streaming.
blockStreaming: false,
},
reload: { configPrefixes: ['channels.fabric'] },
config: {
@@ -142,7 +144,12 @@ export const fabricChannelPlugin = createChatChannelPlugin<ResolvedFabricAccount
threading: { topLevelReplyToMode: 'channel' },
outbound: {
base: {},
base: {
deliveryMode: 'direct',
// Fabric has no length limit: never chunk — always one message.
chunker: (text: string) => [text],
textChunkLimit: Number.MAX_SAFE_INTEGER,
},
attachedResults: {
channel: 'fabric',
sendText: async (ctx: {

View File

@@ -176,7 +176,8 @@ 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)}`),
replyOptions: {},
// Fabric has no length limit: deliver the whole reply as ONE message.
replyOptions: { disableBlockStreaming: true } as never,
});
this.log.info(`fabric: dispatch returned agent=${agentId} channel=${channelId}`);
} catch (err) {