diff --git a/packages/ui/src/components/message-stream-v2.tsx b/packages/ui/src/components/message-stream-v2.tsx index e1673d41..26e178e2 100644 --- a/packages/ui/src/components/message-stream-v2.tsx +++ b/packages/ui/src/components/message-stream-v2.tsx @@ -225,6 +225,20 @@ export default function MessageStreamV2(props: MessageStreamV2Props) { const showUsagePreference = () => preferences().showUsageMetrics ?? true const store = createMemo(() => messageStoreBus.getOrCreate(props.instanceId)) const messageIds = createMemo(() => store().getSessionMessageIds(props.sessionId)) + const visibleMessageIds = createMemo(() => { + const ids = messageIds() + const revert = store().getSessionRevert(props.sessionId) + if (!revert?.messageID) { + return ids + } + const stopIndex = ids.indexOf(revert.messageID) + return stopIndex === -1 ? ids : ids.slice(0, stopIndex) + }) + const messageRecords = createMemo(() => + visibleMessageIds() + .map((id) => store().getMessage(id)) + .filter((record): record is MessageRecord => Boolean(record)), + ) const sessionRevision = createMemo(() => store().getSessionRevision(props.sessionId)) const usageSnapshot = createMemo(() => store().getSessionUsage(props.sessionId)) @@ -696,9 +710,7 @@ function MessageBlock(props: MessageBlockProps) { const block = createMemo(() => { const current = record() - if (!current) { - return null - } + if (!current) return null const index = props.messageIndexMap.get(current.id) ?? 0 const isQueued = current.role === "user" && (props.lastAssistantIndex === -1 || index > props.lastAssistantIndex) @@ -870,108 +882,107 @@ function MessageBlock(props: MessageBlockProps) { return resultBlock }) - return ( - - {(resolvedBlock) => ( -
- - {(item) => ( - - - - - - {(() => { - const toolItem = item as ToolDisplayItem - const toolState = toolItem.toolPart.state as ToolState | undefined - const hasToolState = - Boolean(toolState) && (isToolStateRunning(toolState) || isToolStateCompleted(toolState) || isToolStateError(toolState)) - const taskSessionId = hasToolState ? extractTaskSessionId(toolState) : "" - const taskLocation = taskSessionId ? findTaskSessionLocation(taskSessionId) : null - const handleGoToTaskSession = (event: MouseEvent) => { - event.preventDefault() - event.stopPropagation() - if (!taskLocation) return - navigateToTaskSession(taskLocation) - } + const resolvedBlock = block() + if (!resolvedBlock) return null - return ( -
-
-
- {TOOL_ICON} - Tool Call - {toolItem.toolPart.tool || "unknown"} -
- - - -
- + return ( +
+ + {(item) => ( + + + + + + {(() => { + const toolItem = item as ToolDisplayItem + const toolState = toolItem.toolPart.state as ToolState | undefined + const hasToolState = + Boolean(toolState) && (isToolStateRunning(toolState) || isToolStateCompleted(toolState) || isToolStateError(toolState)) + const taskSessionId = hasToolState ? extractTaskSessionId(toolState) : "" + const taskLocation = taskSessionId ? findTaskSessionLocation(taskSessionId) : null + const handleGoToTaskSession = (event: MouseEvent) => { + event.preventDefault() + event.stopPropagation() + if (!taskLocation) return + navigateToTaskSession(taskLocation) + } + + return ( +
+
+
+ {TOOL_ICON} + Tool Call + {toolItem.toolPart.tool || "unknown"}
- ) - })()} - - - - - - - - - - - - )} - -
- )} - + + + +
+ +
+ ) + })()} + + + + + + + + + + + + )} + +
) }