Skip to content

fix(signal): add stop callback to clear typing indicator on response complete#26932

Open
ClawdadBot wants to merge 2 commits intoopenclaw:mainfrom
ClawdadBot:fix/signal-typing-stop-callback
Open

fix(signal): add stop callback to clear typing indicator on response complete#26932
ClawdadBot wants to merge 2 commits intoopenclaw:mainfrom
ClawdadBot:fix/signal-typing-stop-callback

Conversation

@ClawdadBot
Copy link

@ClawdadBot ClawdadBot commented Feb 25, 2026

Problem

The keepalive loop introduced in d42ef2a (v2026.2.24, #25886) continuously refreshes Signal's typing indicator every ~3s. Without a stop callback, fireStop() only halts the JS interval — no 'stop typing' API call is ever sent. Signal's indicator then persists until its own TTL expires, but that TTL kept getting reset by the keepalive, causing the perpetual typing indicator regression reported in #26891.

Fix

Wire up the stop callback in createTypingCallbacks for the Signal channel using sendTypingSignal with { stop: true }. This explicitly clears the indicator when the response completes or NO_REPLY is returned.

stop: async () => {
  if (!ctxPayload.To) return;
  await sendTypingSignal(ctxPayload.To, {
    baseUrl: deps.baseUrl,
    account: deps.account,
    accountId: deps.accountId,
    stop: true,
  });
},

sendTypingSignal already supported { stop: true } — it just wasn't wired up for Signal.

Notes

Closes #26891

Greptile Summary

Added stop callback to Signal's typing indicator implementation to properly clear the typing indicator when responses complete or NO_REPLY is returned.

  • Wired up the stop callback in createTypingCallbacks for the Signal channel
  • Calls sendTypingSignal with { stop: true } to explicitly clear the indicator
  • Mirrors the structure of the existing start callback with proper guard clause for missing ctxPayload.To

The fix directly addresses the perpetual typing indicator regression where the keepalive loop continuously refreshed the indicator without ever sending a stop signal. The sendTypingSignal function already supported the stop parameter - it just wasn't being used.

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • Score reflects a straightforward bug fix that follows existing patterns. The implementation correctly wires up the stop callback using an API that already supported this functionality. The code structure mirrors the start callback, includes proper guard clauses, and directly addresses the reported issue with no behavioral side effects.
  • No files require special attention

Last reviewed commit: 4b0b120

(3/5) Reply to the agent's comments like "Can you suggest a fix for this @greptileai?" or ask follow-up questions!

@openclaw-barnacle openclaw-barnacle bot added channel: signal Channel integration: signal size: XS labels Feb 25, 2026
@openclaw-barnacle
Copy link

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle bot added the stale Marked as stale due to inactivity label Mar 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: signal Channel integration: signal size: XS stale Marked as stale due to inactivity

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Discord: typing indicator gets stuck after bot sends message

1 participant