+
+ ›
+ {frame.provider}
+ {frame.kind}
+ {frame.payload.truncated ? · {frame.payload.byteLength} bytes : null}
+
+
+ {frame.payload.head}
+ {frame.payload.truncated ? '\n…' : ''}
+
+
+ )
+}
+
/** One message: its prose first, then a collapsible run folding all of the
* turn's tool activity. Monochrome per STYLEGUIDE: user prompts read as a
* lifted card, assistant prose as body copy, reasoning de-emphasized. */
@@ -145,6 +166,7 @@ function MessageRow({
const isUser = message.role === 'user'
const isReasoning = message.role === 'reasoning'
const isSystem = message.role === 'system'
+ const providerFrame = message.blocks.find((block) => block.type === 'text' && block.providerFrame)
const scrollToTop = useCallback(() => {
if (rowRef.current) {
@@ -159,6 +181,14 @@ function MessageRow({
return null
}
+ if (providerFrame) {
+ return (
+