diff --git a/frontend/dashboard/src/components/conversation/MessageBubble.tsx b/frontend/dashboard/src/components/conversation/MessageBubble.tsx index 228cf76..01894ec 100644 --- a/frontend/dashboard/src/components/conversation/MessageBubble.tsx +++ b/frontend/dashboard/src/components/conversation/MessageBubble.tsx @@ -92,15 +92,13 @@ export default function MessageBubble({ function UserBubble({ message }: { message: ConversationMessage }) { const [showWrapper, setShowWrapper] = useState(false); - const hasWrapper = SYSTEM_REMINDER_PATTERN.test(message.text); let displayText = message.text; let wrapperText = ""; - if (hasWrapper) { - const m = message.text.match(/^([\s\S]*?<\/(system-reminder|command-name|local-command-stdout|command-message|command-args)>\s*)/i); - if (m) { - wrapperText = m[1]; - displayText = message.text.slice(m[1].length); - } + while (SYSTEM_REMINDER_PATTERN.test(displayText)) { + const m = displayText.match(/^([\s\S]*?<\/(system-reminder|command-name|local-command-stdout|command-message|command-args)>\s*)/i); + if (!m) break; + wrapperText += m[1]; + displayText = displayText.slice(m[1].length); } return ( diff --git a/frontend/dashboard/src/components/conversation/TerminalView.tsx b/frontend/dashboard/src/components/conversation/TerminalView.tsx index dbce905..9f50558 100644 --- a/frontend/dashboard/src/components/conversation/TerminalView.tsx +++ b/frontend/dashboard/src/components/conversation/TerminalView.tsx @@ -88,17 +88,15 @@ function ContinuationRow({ children }: { children: ReactNode }) { function UserRow({ message }: { message: ConversationMessage }) { const [showWrapper, setShowWrapper] = useState(false); - const hasWrapper = SYSTEM_REMINDER_PATTERN.test(message.text); let displayText = message.text; let wrapperText = ""; - if (hasWrapper) { - const m = message.text.match( + while (SYSTEM_REMINDER_PATTERN.test(displayText)) { + const m = displayText.match( /^([\s\S]*?<\/(system-reminder|command-name|local-command-stdout|command-message|command-args)>\s*)/i, ); - if (m) { - wrapperText = m[1]; - displayText = message.text.slice(m[1].length); - } + if (!m) break; + wrapperText += m[1]; + displayText = displayText.slice(m[1].length); } return (