mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-17 09:30:58 -07:00
Fix bugs where Rewind and Resume showed Ugly and 100X too verbose content. (#17940)
This commit is contained in:
@@ -655,6 +655,9 @@ describe('useGeminiStream', () => {
|
||||
expectedMergedResponse,
|
||||
expect.any(AbortSignal),
|
||||
'prompt-id-2',
|
||||
undefined,
|
||||
false,
|
||||
expectedMergedResponse,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1057,6 +1060,9 @@ describe('useGeminiStream', () => {
|
||||
toolCallResponseParts,
|
||||
expect.any(AbortSignal),
|
||||
'prompt-id-4',
|
||||
undefined,
|
||||
false,
|
||||
toolCallResponseParts,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1498,6 +1504,9 @@ describe('useGeminiStream', () => {
|
||||
'This is the actual prompt from the command file.',
|
||||
expect.any(AbortSignal),
|
||||
expect.any(String),
|
||||
undefined,
|
||||
false,
|
||||
'/my-custom-command',
|
||||
);
|
||||
|
||||
expect(mockScheduleToolCalls).not.toHaveBeenCalled();
|
||||
@@ -1524,6 +1533,9 @@ describe('useGeminiStream', () => {
|
||||
'',
|
||||
expect.any(AbortSignal),
|
||||
expect.any(String),
|
||||
undefined,
|
||||
false,
|
||||
'/emptycmd',
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -1542,6 +1554,9 @@ describe('useGeminiStream', () => {
|
||||
'// This is a line comment',
|
||||
expect.any(AbortSignal),
|
||||
expect.any(String),
|
||||
undefined,
|
||||
false,
|
||||
'// This is a line comment',
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -1560,6 +1575,9 @@ describe('useGeminiStream', () => {
|
||||
'/* This is a block comment */',
|
||||
expect.any(AbortSignal),
|
||||
expect.any(String),
|
||||
undefined,
|
||||
false,
|
||||
'/* This is a block comment */',
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -2392,6 +2410,9 @@ describe('useGeminiStream', () => {
|
||||
processedQueryParts, // Argument 1: The parts array directly
|
||||
expect.any(AbortSignal), // Argument 2: An AbortSignal
|
||||
expect.any(String), // Argument 3: The prompt_id string
|
||||
undefined,
|
||||
false,
|
||||
rawQuery,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -2931,6 +2952,9 @@ describe('useGeminiStream', () => {
|
||||
'test query',
|
||||
expect.any(AbortSignal),
|
||||
expect.any(String),
|
||||
undefined,
|
||||
false,
|
||||
'test query',
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -3078,6 +3102,9 @@ describe('useGeminiStream', () => {
|
||||
'second query',
|
||||
expect.any(AbortSignal),
|
||||
expect.any(String),
|
||||
undefined,
|
||||
false,
|
||||
'second query',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1255,6 +1255,9 @@ export const useGeminiStream = (
|
||||
queryToSend,
|
||||
abortSignal,
|
||||
prompt_id!,
|
||||
undefined,
|
||||
false,
|
||||
query,
|
||||
);
|
||||
const processingStatus = await processGeminiStreamEvents(
|
||||
stream,
|
||||
|
||||
@@ -178,6 +178,30 @@ describe('convertSessionToHistoryFormats', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should prioritize displayContent for UI history but use content for client history', () => {
|
||||
const messages: MessageRecord[] = [
|
||||
{
|
||||
type: 'user',
|
||||
content: [{ text: 'Expanded content' }],
|
||||
displayContent: [{ text: 'User input' }],
|
||||
} as MessageRecord,
|
||||
];
|
||||
|
||||
const result = convertSessionToHistoryFormats(messages);
|
||||
|
||||
expect(result.uiHistory).toHaveLength(1);
|
||||
expect(result.uiHistory[0]).toMatchObject({
|
||||
type: 'user',
|
||||
text: 'User input',
|
||||
});
|
||||
|
||||
expect(result.clientHistory).toHaveLength(1);
|
||||
expect(result.clientHistory[0]).toEqual({
|
||||
role: 'user',
|
||||
parts: [{ text: 'Expanded content' }],
|
||||
});
|
||||
});
|
||||
|
||||
it('should filter out slash commands from client history but keep in UI', () => {
|
||||
const messages: MessageRecord[] = [
|
||||
{ type: 'user', content: '/help' } as MessageRecord,
|
||||
|
||||
@@ -15,6 +15,7 @@ import type {
|
||||
} from '@google/gemini-cli-core';
|
||||
import type { Part } from '@google/genai';
|
||||
import { partListUnionToString, coreEvents } from '@google/gemini-cli-core';
|
||||
import { checkExhaustive } from '../../utils/checks.js';
|
||||
import type { SessionInfo } from '../../utils/sessionUtils.js';
|
||||
import { MessageType, ToolCallStatus } from '../types.js';
|
||||
|
||||
@@ -125,8 +126,13 @@ export function convertSessionToHistoryFormats(
|
||||
|
||||
for (const msg of messages) {
|
||||
// Add the message only if it has content
|
||||
const displayContentString = msg.displayContent
|
||||
? partListUnionToString(msg.displayContent)
|
||||
: undefined;
|
||||
const contentString = partListUnionToString(msg.content);
|
||||
if (msg.content && contentString.trim()) {
|
||||
const uiText = displayContentString || contentString;
|
||||
|
||||
if (uiText.trim()) {
|
||||
let messageType: MessageType;
|
||||
switch (msg.type) {
|
||||
case 'user':
|
||||
@@ -141,14 +147,18 @@ export function convertSessionToHistoryFormats(
|
||||
case 'warning':
|
||||
messageType = MessageType.WARNING;
|
||||
break;
|
||||
case 'gemini':
|
||||
messageType = MessageType.GEMINI;
|
||||
break;
|
||||
default:
|
||||
checkExhaustive(msg);
|
||||
messageType = MessageType.GEMINI;
|
||||
break;
|
||||
}
|
||||
|
||||
uiHistory.push({
|
||||
type: messageType,
|
||||
text: contentString,
|
||||
text: uiText,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -199,7 +209,9 @@ export function convertSessionToHistoryFormats(
|
||||
// Add regular user message
|
||||
clientHistory.push({
|
||||
role: 'user',
|
||||
parts: [{ text: contentString }],
|
||||
parts: Array.isArray(msg.content)
|
||||
? (msg.content as Part[])
|
||||
: [{ text: contentString }],
|
||||
});
|
||||
} else if (msg.type === 'gemini') {
|
||||
// Handle Gemini messages with potential tool calls
|
||||
|
||||
Reference in New Issue
Block a user