diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx index bfcca5e80..08fe2ca32 100644 --- a/components/canvas/CanvasChatPanel.tsx +++ b/components/canvas/CanvasChatPanel.tsx @@ -482,7 +482,7 @@ function extractCanvasModelName(text: string): string { if (!source) return ""; const badgeMatch = source.match( - /^\s*[◈◇◆🔹⬡✦•·]\s*([A-Za-z][A-Za-z0-9 .:+\-_/()]{2,})\s*$/im + /^\s*[◈◇◆🔹⬡✦•·]\s*([^\n]+?)\s*$/im ); if (badgeMatch?.[1]) { return badgeMatch[1].trim(); @@ -501,7 +501,7 @@ function extractCanvasModelName(text: string): string { function stripCanvasModelRoutingLines(text: string): string { return String(text || "") .replace(/^\s*(?:Routed to|Using model)\s*[::].*$/gim, "") - .replace(/^\s*[◈◇◆🔹⬡✦•·]\s*[A-Za-z][A-Za-z0-9 .:+\-_/()]{2,}\s*$/gim, "") + .replace(/^\s*[◈◇◆🔹⬡✦•·]\s*[^\n]+\s*$/gim, "") .replace(/\n{3,}/g, "\n\n") .trim(); } @@ -761,7 +761,7 @@ function shouldSplitCanvasAnalysisAfterLine(line: string): boolean { } // 模型徽标行(例如:◈ Nano Banana Pro) - return /^[◈◇◆🔹⬡✦•·]\s*[A-Za-z][A-Za-z0-9 .:+\-_/()]{2,}\s*$/i.test(normalized); + return /^[◈◇◆🔹⬡✦•·]\s*[^\n]+$/i.test(normalized); } function extractCanvasImageAnalysisSection(content: string): CanvasAnalysisSection | null { diff --git a/components/message.tsx b/components/message.tsx index 4254c5370..b840bba61 100644 --- a/components/message.tsx +++ b/components/message.tsx @@ -161,9 +161,7 @@ function filterAgentRoutingNoise(text: string): string { ); // 如果文本里没有现成的模型展示行,则补一行友好的模型名 - const hasModelBadgeLine = /^\s*[◈◇◆🔹⬡✦•·]\s*[A-Za-z][A-Za-z0-9 .:+\-_/()]{2,}\s*$/im.test( - filtered - ); + const hasModelBadgeLine = /^\s*[◈◇◆🔹⬡✦•·]\s*[^\n]+$/im.test(filtered); if (routedModelName && !hasModelBadgeLine) { filtered = `◈ ${routedModelName}\n\n${filtered}`; } @@ -179,9 +177,9 @@ const ASSISTANT_TYPEWRITER_SECTION_REGEX = /(?:###\s*需求理解|【\s*需求理解\s*】|###\s*图片分析|【\s*图片分析\s*】|###\s*执行计划|【\s*执行计划\s*】|###\s*输出设置|【\s*输出设置\s*】)/; const ASSISTANT_TYPEWRITER_STORAGE_KEY = "assistant-typewriter-completed-keys-v1"; const MODEL_BADGE_LINE_REGEX = - /^\s*[◈◇◆🔹⬡✦•·]\s*([A-Za-z][A-Za-z0-9 .:+\-_/()]{2,})\s*$/im; + /^\s*[◈◇◆🔹⬡✦•·]\s*([^\n]+?)\s*$/im; const MODEL_BADGE_LINE_GLOBAL_REGEX = - /^\s*[◈◇◆🔹⬡✦•·]\s*[A-Za-z][A-Za-z0-9 .:+\-_/()]{2,}\s*$/gim; + /^\s*[◈◇◆🔹⬡✦•·]\s*[^\n]+\s*$/gim; function extractModelBadgeName(text: string): string { if (!text) return "";