summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/App.tsx
diff options
context:
space:
mode:
authorMarat Boshernitsan <[email protected]>2025-06-03 23:01:26 -0700
committerGitHub <[email protected]>2025-06-03 23:01:26 -0700
commit7de790fbf236193191a33482793ee3ec5943d62d (patch)
tree793bd860550f91238e91b65177c88b53c6b820b7 /packages/cli/src/ui/App.tsx
parentc313762ba06ab1324dccd4c7663038cb56d24e53 (diff)
Fix several bugs in prompt history (#734)
Co-authored-by: Marat Boshernitsan <[email protected]>
Diffstat (limited to 'packages/cli/src/ui/App.tsx')
-rw-r--r--packages/cli/src/ui/App.tsx43
1 files changed, 29 insertions, 14 deletions
diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx
index 9ebefaa9..ddaf2f02 100644
--- a/packages/cli/src/ui/App.tsx
+++ b/packages/cli/src/ui/App.tsx
@@ -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]);