From 663f800b4be306ab837d9ec471f68bef09a83db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Guti=C3=A9rrez?= <35082514+alezmad@users.noreply.github.com> Date: Mon, 6 Apr 2026 12:44:29 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20v0.1.16=20=E2=80=94=20fix=20message=20de?= =?UTF-8?q?livery=20between=20same-member=20sessions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit excludeSenderMemberId blocked delivery to ALL peers sharing the same member_id (all sessions from one join). Replaced with excludeSenderSessionPubkey which only excludes the sender's own session — peers with different session pubkeys receive correctly. Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/broker/src/broker.ts | 4 ++-- apps/broker/src/index.ts | 6 +++--- apps/cli/package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/broker/src/broker.ts b/apps/broker/src/broker.ts index 8c64415..bec36ad 100644 --- a/apps/broker/src/broker.ts +++ b/apps/broker/src/broker.ts @@ -492,7 +492,7 @@ export async function drainForMember( memberPubkey: string, status: PeerStatus, sessionPubkey?: string, - excludeSenderMemberId?: string, + excludeSenderSessionPubkey?: string, ): Promise< Array<{ id: string; @@ -534,7 +534,7 @@ export async function drainForMember( AND delivered_at IS NULL AND priority::text IN (${priorityList}) AND (target_spec = ${memberPubkey} OR target_spec = '*'${sessionPubkey ? sql` OR target_spec = ${sessionPubkey}` : sql``}) - ${excludeSenderMemberId ? sql`AND sender_member_id != ${excludeSenderMemberId}` : sql``} + ${excludeSenderSessionPubkey ? sql`AND (sender_session_pubkey IS NULL OR sender_session_pubkey != ${excludeSenderSessionPubkey})` : sql``} ORDER BY created_at ASC, id ASC FOR UPDATE SKIP LOCKED ) diff --git a/apps/broker/src/index.ts b/apps/broker/src/index.ts index e631c2a..174e589 100644 --- a/apps/broker/src/index.ts +++ b/apps/broker/src/index.ts @@ -83,7 +83,7 @@ function sendToPeer(presenceId: string, msg: WSServerMessage): void { async function maybePushQueuedMessages( presenceId: string, - excludeSenderMemberId?: string, + excludeSenderSessionPubkey?: string, ): Promise { const conn = connections.get(presenceId); if (!conn) return; @@ -98,7 +98,7 @@ async function maybePushQueuedMessages( conn.memberPubkey, status, conn.sessionPubkey ?? undefined, - excludeSenderMemberId, + excludeSenderSessionPubkey, ); for (const m of messages) { const push: WSPushMessage = { @@ -470,7 +470,7 @@ async function handleSend( && peer.memberPubkey !== msg.targetSpec && peer.sessionPubkey !== msg.targetSpec) continue; - void maybePushQueuedMessages(pid, conn.memberId); + void maybePushQueuedMessages(pid, conn.sessionPubkey ?? undefined); } } diff --git a/apps/cli/package.json b/apps/cli/package.json index b9e8b74..1c0209b 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,6 +1,6 @@ { "name": "claudemesh-cli", - "version": "0.1.15", + "version": "0.1.16", "description": "Claude Code MCP client for claudemesh — peer mesh messaging between Claude sessions.", "keywords": [ "claude-code",