Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion ui/desktop/src/components/ProgressiveMessageList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ export default function ProgressiveMessageList({
const [isLoading, setIsLoading] = useState(() => messages.length > showLoadingThreshold);
const timeoutRef = useRef<number | null>(null);
const mountedRef = useRef(true);
const hasOnlyToolResponses = (message: Message) =>
message.content.every((c) => c.type === 'toolResponse');

// Try to use context manager, but don't require it for session history
let hasContextHandlerContent: ((message: Message) => boolean) | undefined;
Expand Down Expand Up @@ -199,7 +201,7 @@ export default function ProgressiveMessageList({
}}
/>
) : (
<UserMessage message={message} />
!hasOnlyToolResponses(message) && <UserMessage message={message} />
)}
</>
) : (
Expand Down
23 changes: 1 addition & 22 deletions ui/desktop/src/components/sessions/SessionHistoryView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,29 +43,8 @@ const isUserMessage = (message: Message): boolean => {
return true;
};

// Filter messages for display (same logic as useChatEngine)
const filterMessagesForDisplay = (messages: Message[]): Message[] => {
return messages.filter((message) => {
// Only filter out when display is explicitly false
if (message.display === false) return false;

// Keep all assistant messages and user messages that aren't just tool responses
if (message.role === 'assistant') return true;

// For user messages, check if they're only tool responses
if (message.role === 'user') {
const hasOnlyToolResponses = message.content.every((c) => c.type === 'toolResponse');
const hasTextContent = message.content.some((c) => c.type === 'text');
const hasToolConfirmation = message.content.every(
(c) => c.type === 'toolConfirmationRequest'
);

// Keep the message if it has text content or tool confirmation or is not just tool responses
return hasTextContent || !hasOnlyToolResponses || hasToolConfirmation;
}

return true;
});
return messages.filter((message) => message.display ?? true);
};

interface SessionHistoryViewProps {
Expand Down
23 changes: 1 addition & 22 deletions ui/desktop/src/hooks/useChatEngine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -326,29 +326,8 @@ export const useChatEngine = ({
}
}, [stop, messages, _setInput, setMessages]);

// Filter out standalone tool response messages for rendering
const filteredMessages = useMemo(() => {
return [...ancestorMessages, ...messages].filter((message) => {
// Only filter out when display is explicitly false
if (message.display === false) return false;

// Keep all assistant messages and user messages that aren't just tool responses
if (message.role === 'assistant') return true;

// For user messages, check if they're only tool responses
if (message.role === 'user') {
const hasOnlyToolResponses = message.content.every((c) => c.type === 'toolResponse');
const hasTextContent = message.content.some((c) => c.type === 'text');
const hasToolConfirmation = message.content.every(
(c) => c.type === 'toolConfirmationRequest'
);

// Keep the message if it has text content or tool confirmation or is not just tool responses
return hasTextContent || !hasOnlyToolResponses || hasToolConfirmation;
}

return true;
});
return [...ancestorMessages, ...messages].filter((message) => message.display ?? true);
}, [ancestorMessages, messages]);

// Generate command history from filtered messages
Expand Down
Loading