feat: clear should also clear chat history (#1008)
This commit is contained in:
parent
dd679a6cdb
commit
6af7a5c589
|
@ -340,6 +340,27 @@ describe('useSlashCommandProcessor', () => {
|
||||||
expect(commandResult).toBe(true);
|
expect(commandResult).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('/clear should clear items, reset chat, and refresh static', async () => {
|
||||||
|
const mockResetChat = vi.fn();
|
||||||
|
mockConfig = {
|
||||||
|
...mockConfig,
|
||||||
|
getGeminiClient: () => ({
|
||||||
|
resetChat: mockResetChat,
|
||||||
|
}),
|
||||||
|
} as unknown as Config;
|
||||||
|
|
||||||
|
const { handleSlashCommand } = getProcessor();
|
||||||
|
let commandResult: SlashCommandActionReturn | boolean = false;
|
||||||
|
await act(async () => {
|
||||||
|
commandResult = await handleSlashCommand('/clear');
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(mockClearItems).toHaveBeenCalled();
|
||||||
|
expect(mockResetChat).toHaveBeenCalled();
|
||||||
|
expect(mockRefreshStatic).toHaveBeenCalled();
|
||||||
|
expect(commandResult).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
it('/editor should open editor dialog and return true', async () => {
|
it('/editor should open editor dialog and return true', async () => {
|
||||||
const { handleSlashCommand } = getProcessor();
|
const { handleSlashCommand } = getProcessor();
|
||||||
let commandResult: SlashCommandActionReturn | boolean = false;
|
let commandResult: SlashCommandActionReturn | boolean = false;
|
||||||
|
|
|
@ -181,10 +181,11 @@ export const useSlashCommandProcessor = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'clear',
|
name: 'clear',
|
||||||
description: 'clear the screen',
|
description: 'clear the screen and conversation history',
|
||||||
action: (_mainCommand, _subCommand, _args) => {
|
action: async (_mainCommand, _subCommand, _args) => {
|
||||||
onDebugMessage('Clearing terminal.');
|
onDebugMessage('Clearing terminal and resetting chat.');
|
||||||
clearItems();
|
clearItems();
|
||||||
|
await config?.getGeminiClient()?.resetChat();
|
||||||
console.clear();
|
console.clear();
|
||||||
refreshStatic();
|
refreshStatic();
|
||||||
},
|
},
|
||||||
|
|
|
@ -331,6 +331,34 @@ describe('Gemini Client (client.ts)', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('resetChat', () => {
|
||||||
|
it('should create a new chat session, clearing the old history', async () => {
|
||||||
|
// 1. Get the initial chat instance and add some history.
|
||||||
|
const initialChat = await client.getChat();
|
||||||
|
const initialHistory = await client.getHistory();
|
||||||
|
await client.addHistory({
|
||||||
|
role: 'user',
|
||||||
|
parts: [{ text: 'some old message' }],
|
||||||
|
});
|
||||||
|
const historyWithOldMessage = await client.getHistory();
|
||||||
|
expect(historyWithOldMessage.length).toBeGreaterThan(
|
||||||
|
initialHistory.length,
|
||||||
|
);
|
||||||
|
|
||||||
|
// 2. Call resetChat.
|
||||||
|
await client.resetChat();
|
||||||
|
|
||||||
|
// 3. Get the new chat instance and its history.
|
||||||
|
const newChat = await client.getChat();
|
||||||
|
const newHistory = await client.getHistory();
|
||||||
|
|
||||||
|
// 4. Assert that the chat instance is new and the history is reset.
|
||||||
|
expect(newChat).not.toBe(initialChat);
|
||||||
|
expect(newHistory.length).toBe(initialHistory.length);
|
||||||
|
expect(JSON.stringify(newHistory)).not.toContain('some old message');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('sendMessageStream', () => {
|
describe('sendMessageStream', () => {
|
||||||
it('should return the turn instance after the stream is complete', async () => {
|
it('should return the turn instance after the stream is complete', async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
|
@ -86,6 +86,11 @@ export class GeminiClient {
|
||||||
chat.setHistory(history);
|
chat.setHistory(history);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async resetChat(): Promise<void> {
|
||||||
|
this.chat = this.startChat();
|
||||||
|
await this.chat;
|
||||||
|
}
|
||||||
|
|
||||||
private async getEnvironment(): Promise<Part[]> {
|
private async getEnvironment(): Promise<Part[]> {
|
||||||
const cwd = this.config.getWorkingDir();
|
const cwd = this.config.getWorkingDir();
|
||||||
const today = new Date().toLocaleDateString(undefined, {
|
const today = new Date().toLocaleDateString(undefined, {
|
||||||
|
|
Loading…
Reference in New Issue