openclaw/extensions
Vincent Koc 89a1e99815
fix(slack): finalize replyToMode off threading behavior (#23799)
* fix: make replyToMode 'off' actually prevent threading in Slack

Three independent bugs caused Slack replies to always create threads
even when replyToMode was set to 'off':

1. Typing indicator created threads via statusThreadTs fallback (#16868)
   - resolveSlackThreadTargets fell back to messageTs for statusThreadTs
   - 'is typing...' was posted as thread reply, creating a thread
   - Fix: remove messageTs fallback, let statusThreadTs be undefined

2. [[reply_to_current]] tags bypassed replyToMode entirely (#16080)
   - Slack dock had allowExplicitReplyTagsWhenOff: true
   - Reply tags from system prompt always threaded regardless of config
   - Fix: set allowExplicitReplyTagsWhenOff to false for Slack

3. Contradictory replyToMode defaults in codebase (#20827)
   - monitor/provider.ts defaulted to 'all'
   - accounts.ts defaulted to 'off' (matching docs)
   - Fix: align provider.ts default to 'off' per documentation

Fixes: openclaw/openclaw#16868, openclaw/openclaw#16080, openclaw/openclaw#20827

* fix(slack): respect replyToMode in DMs even with typing indicator thread

When replyToMode is 'off' in DMs, replies should stay in the main
conversation even when the typing indicator creates a thread context.

Previously, when incomingThreadTs was set (from the typing indicator's
thread), replyToMode was forced to 'all', causing all replies to go
into the thread.

Now, for direct messages, the user's configured replyToMode is always
respected. For channels/groups, the existing behavior is preserved
(stay in thread if already in one).

This fix:
- Keeps the typing indicator working (statusThreadTs fallback preserved)
- Prevents DM replies from being forced into threads
- Maintains channel thread continuity

Fixes #16868

* refactor(slack): eliminate redundant resolveSlackThreadContext call

- Add isThreadReply to resolveSlackThreadTargets return value
- Remove duplicate call in dispatch.ts
- Addresses greptile review feedback with cleaner DRY approach

* docs(slack): add JSDoc to resolveSlackThreadTargets

Document return values including isThreadReply distinction between
genuine user thread replies vs bot status message thread context.

* docs(changelog): record Slack replyToMode off threading fixes

---------

Co-authored-by: James <jamesrp13@gmail.com>
Co-authored-by: theoseo <suhong.seo@gmail.com>
2026-02-22 13:27:50 -05:00
..
bluebubbles fix(bluebubbles): tighten chat target handling 2026-02-22 11:29:31 +00:00
copilot-proxy fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
device-pair Security: disable plugin runtime command execution primitive (#20828) 2026-02-19 10:17:29 +00:00
diagnostics-otel fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
discord refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
feishu fix(feishu): prefer video file_key for inbound media 2026-02-22 19:21:42 +01:00
google-antigravity-auth fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
google-gemini-cli-auth fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
googlechat refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
imessage refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
irc refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
line refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
llm-task fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
lobster fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
matrix refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
mattermost refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
memory-core fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
memory-lancedb fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
minimax-portal-auth fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
msteams refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
nextcloud-talk refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
nostr fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
open-prose fix(ci): sync plugin versions and harden install smoke 2026-02-21 20:18:37 +01:00
phone-control style: align formatting with oxfmt 0.33 2026-02-18 01:34:35 +00:00
qwen-portal-auth TypeScript: add extensions to tsconfig and fix type errors (#12781) 2026-02-09 10:05:38 -08:00
shared refactor(extensions): dedupe connector helper usage 2026-02-16 14:59:30 +00:00
signal refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
slack fix(slack): finalize replyToMode off threading behavior (#23799) 2026-02-22 13:27:50 -05:00
synology-chat test: speed up slow media and synology suites 2026-02-22 14:18:44 +00:00
talk-voice Gateway/Plugins: device pairing + phone control plugins (#11755) 2026-02-08 18:07:13 +01:00
telegram fix(telegram): wire webhookPort through config and startup 2026-02-22 17:54:16 +01:00
thread-ownership test(extensions): cast fetch mocks to satisfy tsgo 2026-02-16 21:25:35 -05:00
tlon refactor(plugin-sdk): unify channel dedupe primitives 2026-02-22 10:46:34 +01:00
twitch refactor(security): unify secure id paths and guard weak patterns 2026-02-22 10:16:19 +01:00
voice-call fix(voice-call): tighten manager outbound behavior 2026-02-22 11:29:31 +00:00
whatsapp refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00
zalo test(zalo): broaden webhook monitor coverage 2026-02-22 11:29:31 +00:00
zalouser refactor(channels): reuse runtime group policy helpers 2026-02-22 12:44:23 +01:00