Fix several bugs in prompt history (#734)

Co-authored-by: Marat Boshernitsan <maratb@google.com>
This commit is contained in:
Marat Boshernitsan
2025-06-03 23:01:26 -07:00
committed by GitHub
parent c313762ba0
commit 7de790fbf2
4 changed files with 136 additions and 22 deletions

View File

@@ -227,21 +227,36 @@ export const App = ({
useEffect(() => {
const fetchUserMessages = async () => {
const pastMessages = (await logger?.getPreviousUserMessages()) || [];
if (pastMessages.length > 0) {
setUserMessages(pastMessages.reverse());
} else {
setUserMessages(
history
.filter(
(item): item is HistoryItem & { type: 'user'; text: string } =>
item.type === 'user' &&
typeof item.text === 'string' &&
item.text.trim() !== '',
)
.map((item) => item.text),
);
const pastMessagesRaw = (await logger?.getPreviousUserMessages()) || []; // Newest first
const currentSessionUserMessages = history
.filter(
(item): item is HistoryItem & { type: 'user'; text: string } =>
item.type === 'user' &&
typeof item.text === 'string' &&
item.text.trim() !== '',
)
.map((item) => item.text)
.reverse(); // Newest first, to match pastMessagesRaw sorting
// Combine, with current session messages being more recent
const combinedMessages = [
...currentSessionUserMessages,
...pastMessagesRaw,
];
// Deduplicate consecutive identical messages from the combined list (still newest first)
const deduplicatedMessages: string[] = [];
if (combinedMessages.length > 0) {
deduplicatedMessages.push(combinedMessages[0]); // Add the newest one unconditionally
for (let i = 1; i < combinedMessages.length; i++) {
if (combinedMessages[i] !== combinedMessages[i - 1]) {
deduplicatedMessages.push(combinedMessages[i]);
}
}
}
// Reverse to oldest first for useInputHistory
setUserMessages(deduplicatedMessages.reverse());
};
fetchUserMessages();
}, [history, logger]);