summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/commands/compressCommand.ts
diff options
context:
space:
mode:
authorAbhi <[email protected]>2025-07-15 21:59:16 -0400
committerGitHub <[email protected]>2025-07-16 01:59:16 +0000
commitb72e3dfb43acc3faf8099fa758a4283b83f32ff6 (patch)
tree5759c8c1b2a6aaf87aa170798d873f5d276f6e59 /packages/cli/src/ui/commands/compressCommand.ts
parente88b9362dcd1092de01ce8efa413b5acd89ee620 (diff)
migrate compress command (#4271)
Diffstat (limited to 'packages/cli/src/ui/commands/compressCommand.ts')
-rw-r--r--packages/cli/src/ui/commands/compressCommand.ts77
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);
+ }
+ },
+};