diff options
Diffstat (limited to 'packages/cli/src/ui/commands/memoryCommand.ts')
| -rw-r--r-- | packages/cli/src/ui/commands/memoryCommand.ts | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/packages/cli/src/ui/commands/memoryCommand.ts b/packages/cli/src/ui/commands/memoryCommand.ts new file mode 100644 index 00000000..18ca96bb --- /dev/null +++ b/packages/cli/src/ui/commands/memoryCommand.ts @@ -0,0 +1,106 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { getErrorMessage } from '@google/gemini-cli-core'; +import { MessageType } from '../types.js'; +import { SlashCommand, SlashCommandActionReturn } from './types.js'; + +export const memoryCommand: SlashCommand = { + name: 'memory', + description: 'Commands for interacting with memory.', + subCommands: [ + { + name: 'show', + description: 'Show the current memory contents.', + action: async (context) => { + const memoryContent = context.services.config?.getUserMemory() || ''; + const fileCount = context.services.config?.getGeminiMdFileCount() || 0; + + const messageContent = + memoryContent.length > 0 + ? `Current memory content from ${fileCount} file(s):\n\n---\n${memoryContent}\n---` + : 'Memory is currently empty.'; + + context.ui.addItem( + { + type: MessageType.INFO, + text: messageContent, + }, + Date.now(), + ); + }, + }, + { + name: 'add', + description: 'Add content to the memory.', + action: (context, args): SlashCommandActionReturn | void => { + if (!args || args.trim() === '') { + return { + type: 'message', + messageType: 'error', + content: 'Usage: /memory add <text to remember>', + }; + } + + context.ui.addItem( + { + type: MessageType.INFO, + text: `Attempting to save to memory: "${args.trim()}"`, + }, + Date.now(), + ); + + return { + type: 'tool', + toolName: 'save_memory', + toolArgs: { fact: args.trim() }, + }; + }, + }, + { + name: 'refresh', + description: 'Refresh the memory from the source.', + action: async (context) => { + context.ui.addItem( + { + type: MessageType.INFO, + text: 'Refreshing memory from source files...', + }, + Date.now(), + ); + + try { + const result = await context.services.config?.refreshMemory(); + + if (result) { + const { memoryContent, fileCount } = result; + const successMessage = + memoryContent.length > 0 + ? `Memory refreshed successfully. Loaded ${memoryContent.length} characters from ${fileCount} file(s).` + : 'Memory refreshed successfully. No memory content found.'; + + context.ui.addItem( + { + type: MessageType.INFO, + text: successMessage, + }, + Date.now(), + ); + } + } catch (error) { + const errorMessage = getErrorMessage(error); + context.ui.addItem( + { + type: MessageType.ERROR, + text: `Error refreshing memory: ${errorMessage}`, + }, + Date.now(), + ); + } + }, + }, + ], +}; |
