From f34ee37ef9e7c8457345c8d189f685acd1d6b8dc Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 30 Jan 2026 10:13:16 +0000 Subject: [PATCH] fix(signal): add chunkDelay between separate reply payloads Previously chunkDelay only applied between chunks of a single text message (split by newline). When the agent sent multiple separate reply payloads in one turn, they all fired immediately with no delay. This adds the same delay logic to the outer reply loop, so consecutive reply payloads also get typing indicators and natural pauses. --- src/signal/monitor.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/signal/monitor.ts b/src/signal/monitor.ts index 94b4f88ee..e925a8c09 100644 --- a/src/signal/monitor.ts +++ b/src/signal/monitor.ts @@ -259,10 +259,23 @@ async function deliverReplies(params: { chunkMode, chunkDelay, } = params; + let isFirstPayload = true; for (const payload of replies) { const mediaList = payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []); const text = payload.text ?? ""; if (!text && mediaList.length === 0) continue; + if (!isFirstPayload && chunkDelay) { + const delayMs = computeChunkDelay(chunkDelay, (text || "").length); + if (delayMs > 0) { + try { + await sendTypingSignal(target, { baseUrl, account, accountId }); + } catch { + /* typing failure is non-fatal */ + } + await sleep(delayMs); + } + } + isFirstPayload = false; if (mediaList.length === 0) { const chunks = chunkTextWithMode(text, textLimit, chunkMode); let isFirst = true;