Skip to content

Commit 010a8f6

Browse files
committed
fix(chat): separate copied message segments
1 parent 7285c70 commit 010a8f6

2 files changed

Lines changed: 27 additions & 8 deletions

File tree

apps/sim/app/workspace/[workspaceId]/home/components/message-content/message-content.test.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ describe('getRenderableMessageText', () => {
120120
mainText('Main answer.'),
121121
]
122122

123-
expect(getRenderableMessageText(blocks, 'Fallback.')).toBe('Visible research. Main answer.')
123+
expect(getRenderableMessageText(blocks, 'Fallback.')).toBe('Visible research. \n\nMain answer.')
124124
})
125125

126126
it('omits legacy subagent text that has no parent group', () => {
@@ -141,7 +141,22 @@ describe('getRenderableMessageText', () => {
141141
mainText('Main answer.'),
142142
]
143143

144-
expect(getRenderableMessageText(blocks, 'Fallback.')).toBe('Visible research. Main answer.')
144+
expect(getRenderableMessageText(blocks, 'Fallback.')).toBe('Visible research. \n\nMain answer.')
145+
})
146+
147+
it('separates rendered blocks when streamed text has no boundary whitespace', () => {
148+
const blocks: ContentBlock[] = [
149+
subagentStart('research', 'span-visible', 'main'),
150+
{
151+
type: 'subagent_text',
152+
content: 'Visible research.',
153+
spanId: 'span-visible',
154+
timestamp: 2,
155+
},
156+
mainText('Main answer.'),
157+
]
158+
159+
expect(getRenderableMessageText(blocks, 'Fallback.')).toBe('Visible research.\n\nMain answer.')
145160
})
146161
})
147162

apps/sim/app/workspace/[workspaceId]/home/components/message-content/message-content.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -492,28 +492,32 @@ export function parseBlocks(blocks: ContentBlock[]): MessageSegment[] {
492492
return parseBlocksLegacy(blocks)
493493
}
494494

495+
function joinRenderableText(parts: string[]): string {
496+
return parts.filter(Boolean).join('\n\n')
497+
}
498+
495499
function getAgentGroupText(items: AgentGroupItem[]): string {
496-
return items
497-
.map((item) => {
500+
return joinRenderableText(
501+
items.map((item) => {
498502
if (item.type === 'text') return item.content
499503
if (item.type === 'agent_group') return getAgentGroupText(item.group.items)
500504
return ''
501505
})
502-
.join('')
506+
)
503507
}
504508

505509
/** Returns only the text represented by the same segment tree the transcript renders. */
506510
export function getRenderableMessageText(blocks: ContentBlock[], fallbackContent: string): string {
507511
const parsed = blocks.length > 0 ? parseBlocks(blocks) : []
508512
if (parsed.length === 0) return fallbackContent
509513

510-
return parsed
511-
.map((segment) => {
514+
return joinRenderableText(
515+
parsed.map((segment) => {
512516
if (segment.type === 'text') return segment.content
513517
if (segment.type === 'agent_group') return getAgentGroupText(segment.items)
514518
return ''
515519
})
516-
.join('')
520+
)
517521
}
518522

519523
function parseBlocksLegacy(blocks: ContentBlock[]): MessageSegment[] {

0 commit comments

Comments
 (0)