summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/commands/memoryCommand.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/ui/commands/memoryCommand.ts')
-rw-r--r--packages/cli/src/ui/commands/memoryCommand.ts106
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(),
+ );
+ }
+ },
+ },
+ ],
+};