#11494: fix(bluebubbles): skip typing indicator for tapback messages
channel: bluebubbles
size: S
trusted-contributor
experienced-contributor
Cluster:
Bluebubbles iMessage Fixes
## Summary
Fixes #11189
When a tapback/reaction message is received, the typing indicator was being started in `onReplyStart` but would linger indefinitely because the agent typically returns `NO_REPLY` for these messages.
This PR adds an early return check for `isTapbackMessage` in the `onReplyStart` callback to skip starting the typing indicator for tapback/reaction messages.
## Changes
- `extensions/bluebubbles/src/monitor.ts`: Added check for `isTapbackMessage` before starting typing indicator
- `extensions/bluebubbles/src/monitor.test.ts`: Added test to verify typing indicator is NOT started for tapback messages
## Test plan
- [x] New test fails before fix, passes after (TDD)
- [x] All 52 existing monitor tests pass
- [x] Full CI gate passes (`pnpm build && pnpm check && pnpm test`)
- [x] Codex review passes with no regressions identified
### Manual verification scenarios:
- [ ] Receive a tapback → Verify no typing indicator appears
- [ ] Receive a regular message → Verify typing indicator still works normally
- [ ] Receive a tapback in a group → Verify no typing indicator
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This PR updates the BlueBubbles webhook monitor to avoid starting a typing indicator for tapback/reaction (“tapback”) messages. Specifically, `onReplyStart` now returns early when `isTapbackMessage` is true, preventing a typing “start” call that would otherwise linger when the agent returns `NO_REPLY`.
A new test in `extensions/bluebubbles/src/monitor.test.ts` asserts that for a tapback-pattern payload, invoking the reply start hook does not result in any `sendBlueBubblesTyping(..., true, ...)` calls, while existing typing indicator behavior remains covered by adjacent tests.
<h3>Confidence Score: 5/5</h3>
- This PR is safe to merge with minimal risk.
- The change is narrowly scoped (an early return in `onReplyStart` guarded by an existing `isTapbackMessage` flag) and is covered by a targeted unit test. No other behavior is modified, and the new logic is consistent with the reported issue (typing indicator lingering when no reply is produced).
- No files require special attention
<!-- greptile_other_comments_section -->
<!-- /greptile_comment -->
Most Similar PRs
#17620: fix(bluebubbles): skip typing indicators when Private API is disabled
by Kerr1st · 2026-02-16
81.6%
#6546: Reply: avoid typing before text in message mode
by aldoeliacim · 2026-02-01
76.1%
#23483: fix(bluebubbles): key debounce by chat+sender instead of messageId
by saucesteals · 2026-02-22
74.8%
#14429: feat(bluebubbles): handle iMessage edit events in webhook
by westhechiang · 2026-02-12
74.8%
#15240: fix(bluebubbles): URL dropped when sent in same iMessage bubble as ...
by yinghaosang · 2026-02-13
74.7%
#16304: fix(bluebubbles): accept webhook message fields at top level
by MisterGuy420 · 2026-02-14
72.9%
#20406: fix(slack): respect replyToMode when computing statusThreadTs in DMs
by QuinnYates · 2026-02-18
71.1%
#16327: fix(bluebubbles): enforce dmPolicy for DMs; block unknown senders w...
by saurav470 · 2026-02-14
70.8%
#21174: fix(bluebubbles): trim leading newlines from message text
by cosmopax · 2026-02-19
70.6%
#22564: fix(bluebubbles): include iMessage subject in message text
by lailoo · 2026-02-21
70.5%