mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-19 02:43:18 +00:00
Made context files append instead of replace
This commit is contained in:
@@ -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']);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user