diff options
Diffstat (limited to 'packages/cli/src/ui/commands/compressCommand.ts')
| -rw-r--r-- | packages/cli/src/ui/commands/compressCommand.ts | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/packages/cli/src/ui/commands/compressCommand.ts b/packages/cli/src/ui/commands/compressCommand.ts new file mode 100644 index 00000000..c3dfdf37 --- /dev/null +++ b/packages/cli/src/ui/commands/compressCommand.ts @@ -0,0 +1,77 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { HistoryItemCompression, MessageType } from '../types.js'; +import { SlashCommand } from './types.js'; + +export const compressCommand: SlashCommand = { + name: 'compress', + altName: 'summarize', + description: 'Compresses the context by replacing it with a summary.', + action: async (context) => { + const { ui } = context; + if (ui.pendingItem) { + ui.addItem( + { + type: MessageType.ERROR, + text: 'Already compressing, wait for previous request to complete', + }, + Date.now(), + ); + return; + } + + const pendingMessage: HistoryItemCompression = { + type: MessageType.COMPRESSION, + compression: { + isPending: true, + originalTokenCount: null, + newTokenCount: null, + }, + }; + + try { + ui.setPendingItem(pendingMessage); + const promptId = `compress-${Date.now()}`; + const compressed = await context.services.config + ?.getGeminiClient() + ?.tryCompressChat(promptId, true); + if (compressed) { + ui.addItem( + { + type: MessageType.COMPRESSION, + compression: { + isPending: false, + originalTokenCount: compressed.originalTokenCount, + newTokenCount: compressed.newTokenCount, + }, + } as HistoryItemCompression, + Date.now(), + ); + } else { + ui.addItem( + { + type: MessageType.ERROR, + text: 'Failed to compress chat history.', + }, + Date.now(), + ); + } + } catch (e) { + ui.addItem( + { + type: MessageType.ERROR, + text: `Failed to compress chat history: ${ + e instanceof Error ? e.message : String(e) + }`, + }, + Date.now(), + ); + } finally { + ui.setPendingItem(null); + } + }, +}; |
