diff --git a/src/workspaces/officerdev/src/apps/Chat/components/MessageBubble.tsx b/src/workspaces/officerdev/src/apps/Chat/components/MessageBubble.tsx index 4881be90..0ef3780c 100644 --- a/src/workspaces/officerdev/src/apps/Chat/components/MessageBubble.tsx +++ b/src/workspaces/officerdev/src/apps/Chat/components/MessageBubble.tsx @@ -140,13 +140,40 @@ export const MessageBubble = ({ message, onAnswer, onRetry, onDecidePlan, defaul return ( <> {metadata && } -
+
{message.images?.map((img, i) => ( {img.filename} ))} - {/* break-words, or a pasted URL or base64 blob pushes the bubble past max-w and out of the pane. */} -
{text}
+ {/* YOUR OWN MESSAGE IS RENDERED AS MARKDOWN TOO. + + It used to be `whitespace-pre-wrap` plain text, so pasting a fenced block gave you the + backticks and none of the formatting — the one place in the app where markdown was + written and not read. + + The reason this is usually left plain is that rendering changes what you typed: + `a_b_c` becomes italic, a leading `#` becomes a heading. That is real, and the answer + is the Copy button below, which copies the RAW text — so the original is never more + than one click away and nothing you wrote can be lost to a renderer. + + Same plugins, components and sanitize schema as the assistant's, deliberately: a code + block should look identical whoever wrote it. `break-words` stays, or a pasted URL or + base64 blob pushes the bubble past max-w and out of the pane. */} +
+ + {text} + +
+ {/* Hidden until hover, unlike the assistant's. A reply is something you copy out of; your + own message is something you already have, so the control earns its place only when + reached for. */} +
+ +