summaryrefslogtreecommitdiff
path: root/packages/core/src
diff options
context:
space:
mode:
authorAbhi <[email protected]>2025-07-07 16:45:44 -0400
committerGitHub <[email protected]>2025-07-07 20:45:44 +0000
commitaa10ccba713d49bef6bf474bfd72c0852e3da611 (patch)
tree92f1de8bec31cdb10a02fe8ddac1fbde41b75e7f /packages/core/src
parent6eccb474c77e41aa88d1d1d4ea7eada3e85e746c (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.ts42
-rw-r--r--packages/core/src/config/config.ts15
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> {