openclaw/src/slack/monitor/message-handler
spiceoogway e31764fed1 fix: prevent multi-channel response routing race condition (#4530)
## Problem

When multiple channels (WhatsApp, iMessage, Telegram, etc.) are active,
responses intended for one channel could leak to another channel if
messages arrived simultaneously. This created serious privacy concerns.

**Root Cause:**
All channels were updating the SAME main session key with their delivery
context (channel, to, accountId). When messages arrived concurrently:

1. WhatsApp message arrives → updates session['agent:main:main'].lastChannel = 'whatsapp'
2. Agent starts processing (takes time)
3. iMessage message arrives → OVERWRITES session['agent:main:main'].lastChannel = 'imessage'
4. WhatsApp response delivers → reads session lastChannel = 'imessage'
5. Response goes to wrong channel!

## Solution

Changed all channel monitors to use the channel-specific session key
(route.sessionKey) instead of the shared main session key
(route.mainSessionKey) when updating delivery context.

Now each channel updates its own isolated session:
- WhatsApp: session['agent:main:whatsapp:dm:+1234']
- iMessage: session['agent:main:imessage:dm:alice']
- Telegram: session['agent:main:telegram:dm:12345']

This prevents cross-channel state clobbering.

## Changes

- src/discord/monitor/message-handler.process.ts
- src/imessage/monitor/monitor-provider.ts
- src/line/bot-message-context.ts
- src/signal/monitor/event-handler.ts
- src/slack/monitor/message-handler/dispatch.ts
- src/slack/monitor/message-handler/prepare.ts
- src/telegram/bot-message-context.ts
- src/web/auto-reply/monitor/process-message.ts

All changed from:
  sessionKey: route.mainSessionKey

To:
  sessionKey: route.sessionKey

## Testing

Manual testing needed:
1. Configure 2+ channels (e.g., WhatsApp + iMessage)
2. Send message to channel A
3. Immediately send message to channel B (within 100ms)
4. Verify responses go to correct channels

Fixes #4530
2026-01-30 08:42:22 -05:00
..
dispatch.ts fix: prevent multi-channel response routing race condition (#4530) 2026-01-30 08:42:22 -05:00
prepare.inbound-contract.test.ts refactor: rename to openclaw 2026-01-30 03:16:21 +01:00
prepare.sender-prefix.test.ts refactor: rename to openclaw 2026-01-30 03:16:21 +01:00
prepare.ts fix: prevent multi-channel response routing race condition (#4530) 2026-01-30 08:42:22 -05:00
types.ts refactor(security): harden CommandAuthorized plumbing 2026-01-17 10:19:34 +00:00