diff --git a/packages/shared/src/chat/messages.ts b/packages/shared/src/chat/messages.ts index 3fa935f..05f90bb 100644 --- a/packages/shared/src/chat/messages.ts +++ b/packages/shared/src/chat/messages.ts @@ -226,6 +226,33 @@ export async function editEncryptedMessage( } as never) .eq('id', params.messageId); if (error) throw error; + + // Recompute mentions: an edit can add or remove @-tokens. Drop old rows + // then re-insert from the new plaintext (best-effort, same as insertMessage). + try { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const { error: delErr } = await (params.client as any) + .from('message_mentions') + .delete() + .eq('message_id', params.messageId); + if (delErr) throw delErr; + + const mentionUsernames = parseMentionUsernames(params.newPlaintext); + if (mentionUsernames.length > 0) { + const resolver = makeMentionResolver(params.client); + const resolved = await resolver.resolveUsernames(params.conversationId, mentionUsernames); + if (resolved.size > 0) { + await insertMentions( + params.client, + params.messageId, + params.conversationId, + [...resolved.values()], + ); + } + } + } catch (err) { + console.warn('mention recompute on edit failed', err); + } } export async function softDeleteMessage(