From 66b35e00b69eb8a1dcffc6668a5932babdc4af69 Mon Sep 17 00:00:00 2001 From: scotthuang Date: Sun, 15 Mar 2026 18:39:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20address=20Codex=20review=20=E2=80=94=20s?= =?UTF-8?q?hallow-copy=20meta=20before=20namespacing,=20keep=20hardcoded?= =?UTF-8?q?=20fallback=20after=20pattern=20strip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/hooks.ts | 4 +++- ui/src/ui/chat/message-extract.ts | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) 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