summaryrefslogtreecommitdiff
path: root/packages/core/src
diff options
context:
space:
mode:
authormatt korwel <[email protected]>2025-06-11 13:34:35 -0700
committerGitHub <[email protected]>2025-06-11 20:34:35 +0000
commit4160d904da8328eb7168b5b652d4c0f17682546c (patch)
treed73968337c4b1f241ab2165f40bafe7fbbd6cea8 /packages/core/src
parent24c61147b839b3173fa1ad79781f3c4c0f4144fa (diff)
Extensibility: Gemini.md files (#944)
Diffstat (limited to 'packages/core/src')
-rw-r--r--packages/core/src/utils/memoryDiscovery.test.ts28
-rw-r--r--packages/core/src/utils/memoryDiscovery.ts10
2 files changed, 38 insertions, 0 deletions
diff --git a/packages/core/src/utils/memoryDiscovery.test.ts b/packages/core/src/utils/memoryDiscovery.test.ts
index 5329a15b..9c78f625 100644
--- a/packages/core/src/utils/memoryDiscovery.test.ts
+++ b/packages/core/src/utils/memoryDiscovery.test.ts
@@ -564,4 +564,32 @@ describe('loadServerHierarchicalMemory', () => {
);
consoleDebugSpy.mockRestore();
});
+
+ it('should load extension context file paths', async () => {
+ const extensionFilePath = '/test/extensions/ext1/gemini.md';
+ mockFs.access.mockImplementation(async (p) => {
+ if (p === extensionFilePath) {
+ return undefined;
+ }
+ throw new Error('File not found');
+ });
+ mockFs.readFile.mockImplementation(async (p) => {
+ if (p === extensionFilePath) {
+ return 'Extension memory content';
+ }
+ throw new Error('File not found');
+ });
+
+ const { memoryContent, fileCount } = await loadServerHierarchicalMemory(
+ CWD,
+ false,
+ [extensionFilePath],
+ );
+
+ expect(memoryContent).toBe(
+ `--- Context from: ${path.relative(CWD, extensionFilePath)} ---\nExtension memory content\n--- End of Context from: ${path.relative(CWD, extensionFilePath)} ---`,
+ );
+ expect(fileCount).toBe(1);
+ expect(mockFs.readFile).toHaveBeenCalledWith(extensionFilePath, 'utf-8');
+ });
});
diff --git a/packages/core/src/utils/memoryDiscovery.ts b/packages/core/src/utils/memoryDiscovery.ts
index 6e822145..07649415 100644
--- a/packages/core/src/utils/memoryDiscovery.ts
+++ b/packages/core/src/utils/memoryDiscovery.ts
@@ -81,6 +81,7 @@ async function getGeminiMdFilePathsInternal(
currentWorkingDirectory: string,
userHomePath: string,
debugMode: boolean,
+ extensionContextFilePaths: string[] = [],
): Promise<string[]> {
const resolvedCwd = path.resolve(currentWorkingDirectory);
const resolvedHome = path.resolve(userHomePath);
@@ -195,6 +196,13 @@ async function getGeminiMdFilePathsInternal(
}
}
+ // Add extension context file paths
+ for (const extensionPath of extensionContextFilePaths) {
+ if (!paths.includes(extensionPath)) {
+ paths.push(extensionPath);
+ }
+ }
+
if (debugMode)
logger.debug(
`Final ordered ${getCurrentGeminiMdFilename()} paths to read: ${JSON.stringify(paths)}`,
@@ -258,6 +266,7 @@ function concatenateInstructions(
export async function loadServerHierarchicalMemory(
currentWorkingDirectory: string,
debugMode: boolean,
+ extensionContextFilePaths: string[] = [],
): Promise<{ memoryContent: string; fileCount: number }> {
if (debugMode)
logger.debug(
@@ -270,6 +279,7 @@ export async function loadServerHierarchicalMemory(
currentWorkingDirectory,
userHomePath,
debugMode,
+ extensionContextFilePaths,
);
if (filePaths.length === 0) {
if (debugMode) logger.debug('No GEMINI.md files found in hierarchy.');