diff --git a/src/message-runtime-rules.ts b/src/message-runtime-rules.ts index da9145e..a7d31f2 100644 --- a/src/message-runtime-rules.ts +++ b/src/message-runtime-rules.ts @@ -104,10 +104,14 @@ export function getProcessableMessages( messages: Parameters[0], channel?: Channel, ) { + const isPaired = isPairedRoomJid(chatJid); return filterProcessableMessages( messages, - isPairedRoomJid(chatJid), - channel?.isOwnMessage?.bind(channel), + isPaired, + // In paired rooms (unified mode), don't filter by isOwnMessage — + // both bots need to see each other's messages for the ping-pong flow. + // Loop prevention is handled by filterLoopingPairedBotMessages + round_trip_count. + isPaired ? undefined : channel?.isOwnMessage?.bind(channel), ).filter((message) => !isTaskStatusControlMessage(message.content)); }