Made context files append instead of replace

This commit is contained in:
Dev Randalpura
2026-05-12 17:15:04 -04:00
parent ecfaac2dc7
commit 1fcd81e0a4
2 changed files with 85 additions and 16 deletions

View File

@@ -16,6 +16,7 @@ import {
import {
MemoryTool,
setGeminiMdFilename,
resetGeminiMdFilename,
getCurrentGeminiMdFilename,
getAllGeminiMdFilenames,
DEFAULT_CONTEXT_FILENAME,
@@ -77,30 +78,65 @@ describe('MemoryTool', () => {
afterEach(() => {
vi.restoreAllMocks();
setGeminiMdFilename(DEFAULT_CONTEXT_FILENAME);
resetGeminiMdFilename(DEFAULT_CONTEXT_FILENAME);
});
describe('setGeminiMdFilename', () => {
it('should update currentGeminiMdFilename when a valid new name is provided', () => {
it('should append to currentGeminiMdFilename when a valid new name is provided', () => {
const newName = 'CUSTOM_CONTEXT.md';
setGeminiMdFilename(newName);
expect(getCurrentGeminiMdFilename()).toBe(newName);
expect(getAllGeminiMdFilenames()).toEqual([
DEFAULT_CONTEXT_FILENAME,
newName,
]);
});
it('should not update currentGeminiMdFilename if the new name is empty or whitespace', () => {
const initialName = getCurrentGeminiMdFilename();
const initialNames = getAllGeminiMdFilenames();
setGeminiMdFilename(' ');
expect(getCurrentGeminiMdFilename()).toBe(initialName);
expect(getAllGeminiMdFilenames()).toEqual(initialNames);
setGeminiMdFilename('');
expect(getCurrentGeminiMdFilename()).toBe(initialName);
expect(getAllGeminiMdFilenames()).toEqual(initialNames);
});
it('should handle an array of filenames', () => {
it('should handle adding an array of filenames', () => {
const newNames = ['CUSTOM_CONTEXT.md', 'ANOTHER_CONTEXT.md'];
setGeminiMdFilename(newNames);
expect(getCurrentGeminiMdFilename()).toBe('CUSTOM_CONTEXT.md');
expect(getAllGeminiMdFilenames()).toEqual(newNames);
expect(getAllGeminiMdFilenames()).toEqual([
DEFAULT_CONTEXT_FILENAME,
...newNames,
]);
});
it('should ensure uniqueness when adding names', () => {
setGeminiMdFilename(DEFAULT_CONTEXT_FILENAME);
expect(getAllGeminiMdFilenames()).toEqual([DEFAULT_CONTEXT_FILENAME]);
setGeminiMdFilename(['NEW.md', 'NEW.md']);
expect(getAllGeminiMdFilenames()).toEqual([
DEFAULT_CONTEXT_FILENAME,
'NEW.md',
]);
});
});
describe('resetGeminiMdFilename', () => {
it('should replace all filenames with the provided one', () => {
setGeminiMdFilename('OTHER.md');
resetGeminiMdFilename('RESET.md');
expect(getAllGeminiMdFilenames()).toEqual(['RESET.md']);
});
it('should reset to default if no argument provided', () => {
resetGeminiMdFilename('OTHER.md');
resetGeminiMdFilename();
expect(getAllGeminiMdFilenames()).toEqual([DEFAULT_CONTEXT_FILENAME]);
});
it('should handle array reset', () => {
resetGeminiMdFilename(['A.md', 'B.md']);
expect(getAllGeminiMdFilenames()).toEqual(['A.md', 'B.md']);
});
});

View File

@@ -33,17 +33,50 @@ export const DEFAULT_CONTEXT_FILENAME = 'GEMINI.md';
export const MEMORY_SECTION_HEADER = '## Gemini Added Memories';
export const PROJECT_MEMORY_INDEX_FILENAME = 'MEMORY.md';
// This variable will hold the currently configured filename for GEMINI.md context files.
// It defaults to DEFAULT_CONTEXT_FILENAME but can be overridden by setGeminiMdFilename.
// This variable will hold the currently configured filenames for GEMINI.md context files.
// It defaults to DEFAULT_CONTEXT_FILENAME but can be extended by setGeminiMdFilename.
let currentGeminiMdFilename: string | string[] = DEFAULT_CONTEXT_FILENAME;
/**
* Adds one or more filenames to the current context filenames.
* Ensures uniqueness and maintains order.
*/
export function setGeminiMdFilename(newFilename: string | string[]): void {
if (Array.isArray(newFilename)) {
if (newFilename.length > 0) {
currentGeminiMdFilename = newFilename.map((name) => name.trim());
const filenames = Array.isArray(newFilename) ? newFilename : [newFilename];
const current = getAllGeminiMdFilenames();
const next = new Set(current);
for (const filename of filenames) {
const trimmed = filename.trim();
if (trimmed !== '') {
next.add(trimmed);
}
} else if (newFilename && newFilename.trim() !== '') {
currentGeminiMdFilename = newFilename.trim();
}
const result = Array.from(next);
if (result.length > 1) {
currentGeminiMdFilename = result;
} else if (result.length === 1) {
currentGeminiMdFilename = result[0];
}
}
/**
* Resets the context filenames to the provided value, or the default if none provided.
* This replaces all current filenames.
*/
export function resetGeminiMdFilename(
filename: string | string[] = DEFAULT_CONTEXT_FILENAME,
): void {
const filenames = Array.isArray(filename) ? filename : [filename];
const cleaned = filenames.map((f) => f.trim()).filter((f) => f !== '');
if (cleaned.length === 0) {
currentGeminiMdFilename = DEFAULT_CONTEXT_FILENAME;
} else if (cleaned.length === 1) {
currentGeminiMdFilename = cleaned[0];
} else {
currentGeminiMdFilename = cleaned;
}
}