diff --git a/docs/channels/bluebubbles.md b/docs/channels/bluebubbles.md index cf5faee1d..39a543843 100644 --- a/docs/channels/bluebubbles.md +++ b/docs/channels/bluebubbles.md @@ -196,6 +196,7 @@ Provider options: - `channels.bluebubbles.sendReadReceipts`: Send read receipts (default: `true`). - `channels.bluebubbles.blockStreaming`: Enable block streaming (default: `true`). - `channels.bluebubbles.textChunkLimit`: Outbound chunk size in chars (default: 4000). +- `channels.bluebubbles.chunkMode`: `newline` (default) splits on every newline and sends each line immediately during streaming; `length` splits only when exceeding `textChunkLimit`. - `channels.bluebubbles.mediaMaxMb`: Inbound media cap in MB (default: 8). - `channels.bluebubbles.historyLimit`: Max group messages for context (0 disables). - `channels.bluebubbles.dmHistoryLimit`: DM history limit. diff --git a/extensions/bluebubbles/src/accounts.ts b/extensions/bluebubbles/src/accounts.ts index 5a4fee8ba..6603b7d2a 100644 --- a/extensions/bluebubbles/src/accounts.ts +++ b/extensions/bluebubbles/src/accounts.ts @@ -47,7 +47,8 @@ function mergeBlueBubblesAccountConfig( }; const { accounts: _ignored, ...rest } = base; const account = resolveAccountConfig(cfg, accountId) ?? {}; - return { ...rest, ...account }; + const chunkMode = account.chunkMode ?? rest.chunkMode ?? "newline"; + return { ...rest, ...account, chunkMode }; } export function resolveBlueBubblesAccount(params: { diff --git a/extensions/bluebubbles/src/types.ts b/extensions/bluebubbles/src/types.ts index e4650ce33..d2aeb4022 100644 --- a/extensions/bluebubbles/src/types.ts +++ b/extensions/bluebubbles/src/types.ts @@ -38,7 +38,7 @@ export type BlueBubblesAccountConfig = { dms?: Record; /** Outbound text chunk size (chars). Default: 4000. */ textChunkLimit?: number; - /** Chunking mode: "length" (default) splits by size, "newline" splits on every newline. */ + /** Chunking mode: "newline" (default) splits on every newline; "length" splits by size. */ chunkMode?: "length" | "newline"; blockStreaming?: boolean; /** Merge streamed block replies before sending. */