diff options
| author | Abhi <[email protected]> | 2025-07-07 16:45:44 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-07 20:45:44 +0000 |
| commit | aa10ccba713d49bef6bf474bfd72c0852e3da611 (patch) | |
| tree | 92f1de8bec31cdb10a02fe8ddac1fbde41b75e7f /packages/core/src | |
| parent | 6eccb474c77e41aa88d1d1d4ea7eada3e85e746c (diff) | |
feature(commands) - Refactor Slash Command + Vision For the Future (#3175)
Diffstat (limited to 'packages/core/src')
| -rw-r--r-- | packages/core/src/config/config.test.ts | 42 | ||||
| -rw-r--r-- | packages/core/src/config/config.ts | 15 |
2 files changed, 56 insertions, 1 deletions
diff --git a/packages/core/src/config/config.test.ts b/packages/core/src/config/config.test.ts index 9b576b96..c9debdbe 100644 --- a/packages/core/src/config/config.test.ts +++ b/packages/core/src/config/config.test.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { describe, it, expect, vi, beforeEach, Mock } from 'vitest'; import { Config, ConfigParameters, SandboxConfig } from './config.js'; import * as path from 'path'; import { setGeminiMdFilename as mockSetGeminiMdFilename } from '../tools/memoryTool.js'; @@ -13,6 +13,8 @@ import { DEFAULT_OTLP_ENDPOINT, } from '../telemetry/index.js'; +import { loadServerHierarchicalMemory } from '../utils/memoryDiscovery.js'; + // Mock dependencies that might be called during Config construction or createServerConfig vi.mock('../tools/tool-registry', () => { const ToolRegistryMock = vi.fn(); @@ -24,6 +26,10 @@ vi.mock('../tools/tool-registry', () => { return { ToolRegistry: ToolRegistryMock }; }); +vi.mock('../utils/memoryDiscovery.js', () => ({ + loadServerHierarchicalMemory: vi.fn(), +})); + // Mock individual tools if their constructors are complex or have side effects vi.mock('../tools/ls'); vi.mock('../tools/read-file'); @@ -270,4 +276,38 @@ describe('Server Config (config.ts)', () => { expect(config.getTelemetryOtlpEndpoint()).toBe(DEFAULT_OTLP_ENDPOINT); }); }); + + describe('refreshMemory', () => { + it('should update memory and file count on successful refresh', async () => { + const config = new Config(baseParams); + const mockMemoryData = { + memoryContent: 'new memory content', + fileCount: 5, + }; + + (loadServerHierarchicalMemory as Mock).mockResolvedValue(mockMemoryData); + + const result = await config.refreshMemory(); + + expect(loadServerHierarchicalMemory).toHaveBeenCalledWith( + config.getWorkingDir(), + config.getDebugMode(), + config.getFileService(), + config.getExtensionContextFilePaths(), + ); + + expect(config.getUserMemory()).toBe(mockMemoryData.memoryContent); + expect(config.getGeminiMdFileCount()).toBe(mockMemoryData.fileCount); + expect(result).toEqual(mockMemoryData); + }); + + it('should propagate errors from loadServerHierarchicalMemory', async () => { + const config = new Config(baseParams); + const testError = new Error('Failed to load memory'); + + (loadServerHierarchicalMemory as Mock).mockRejectedValue(testError); + + await expect(config.refreshMemory()).rejects.toThrow(testError); + }); + }); }); diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index f2404bb0..fd96af91 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -30,6 +30,7 @@ import { WebSearchTool } from '../tools/web-search.js'; import { GeminiClient } from '../core/client.js'; import { FileDiscoveryService } from '../services/fileDiscoveryService.js'; import { GitService } from '../services/gitService.js'; +import { loadServerHierarchicalMemory } from '../utils/memoryDiscovery.js'; import { getProjectTempDir } from '../utils/paths.js'; import { initializeTelemetry, @@ -454,6 +455,20 @@ export class Config { } return this.gitService; } + + async refreshMemory(): Promise<{ memoryContent: string; fileCount: number }> { + const { memoryContent, fileCount } = await loadServerHierarchicalMemory( + this.getWorkingDir(), + this.getDebugMode(), + this.getFileService(), + this.getExtensionContextFilePaths(), + ); + + this.setUserMemory(memoryContent); + this.setGeminiMdFileCount(fileCount); + + return { memoryContent, fileCount }; + } } export function createToolRegistry(config: Config): Promise<ToolRegistry> { |
