diff --git a/src/plugins/hooks.ts b/src/plugins/hooks.ts index b5099fcb3a0..a45211748b6 100644 --- a/src/plugins/hooks.ts +++ b/src/plugins/hooks.ts @@ -186,7 +186,9 @@ function namespaceMessageMeta( if (!result?.messageMeta || Object.keys(result.messageMeta).length === 0) { return; } - result.messageMeta = { [pluginId]: result.messageMeta }; + // Shallow-copy the original meta before wrapping so we never mutate the + // plugin's returned object (which may be a reused module-level constant). + result.messageMeta = { [pluginId]: { ...result.messageMeta } }; } /** diff --git a/ui/src/ui/chat/message-extract.ts b/ui/src/ui/chat/message-extract.ts index bfb23d03f29..edd16e1e7ae 100644 --- a/ui/src/ui/chat/message-extract.ts +++ b/ui/src/ui/chat/message-extract.ts @@ -36,7 +36,10 @@ function stripDisplayPatterns(text: string, message: unknown): string { // skip invalid regex } } - return result.trimStart(); + // Still run hardcoded fallback after pattern-driven strip: if the + // plugin-provided regex was malformed or missed a variant format, + // the safety net catches it. + return stripRelevantMemoriesTags(result.trimStart()); } // Hardcoded fallback: strip tags even when messageMeta