@google/gemini-cli-core 0.3.0-preview.3 → 0.4.0-nightly.20250904.e133acd2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/google-gemini-cli-core-0.2.2.tgz +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/src/code_assist/codeAssist.d.ts +2 -0
- package/dist/src/code_assist/codeAssist.js +12 -0
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/converter.d.ts +2 -1
- package/dist/src/code_assist/converter.js +1 -1
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +64 -27
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +252 -0
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/config/config.d.ts +12 -3
- package/dist/src/config/config.js +36 -7
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +26 -40
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +1 -0
- package/dist/src/config/models.js +2 -0
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/core/client.d.ts +6 -2
- package/dist/src/core/client.js +22 -11
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +62 -7
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +2 -2
- package/dist/src/core/coreToolScheduler.test.js +18 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +16 -0
- package/dist/src/core/geminiChat.js +133 -4
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +184 -0
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +9 -9
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +2 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +14 -4
- package/dist/src/core/turn.js +32 -10
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +217 -8
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +6 -1
- package/dist/src/ide/ide-client.js +20 -2
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +12 -0
- package/dist/src/ide/ideContext.js +1 -0
- package/dist/src/ide/ideContext.js.map +1 -1
- package/dist/src/ide/process-utils.js +15 -9
- package/dist/src/ide/process-utils.js.map +1 -1
- package/dist/src/ide/process-utils.test.js +90 -4
- package/dist/src/ide/process-utils.test.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.d.ts +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.test.js +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.d.ts +24 -0
- package/dist/src/mcp/token-storage/file-token-storage.js +144 -0
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.js +235 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.d.ts +23 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +78 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +193 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +31 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js +190 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +254 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/types.d.ts +4 -0
- package/dist/src/mcp/token-storage/types.js +5 -1
- package/dist/src/mcp/token-storage/types.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +5 -12
- package/dist/src/services/chatRecordingService.js +25 -16
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +54 -17
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +10 -16
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +27 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +3 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/loggers.js +1 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +1 -2
- package/dist/src/telemetry/metrics.js +1 -7
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +5 -25
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +1 -3
- package/dist/src/telemetry/types.js +1 -3
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/test-utils/index.d.ts +6 -0
- package/dist/src/test-utils/index.js +7 -0
- package/dist/src/test-utils/index.js.map +1 -0
- package/dist/src/test-utils/mock-tool.d.ts +41 -0
- package/dist/src/test-utils/mock-tool.js +51 -0
- package/dist/src/test-utils/mock-tool.js.map +1 -0
- package/dist/src/tools/diffOptions.js +21 -13
- package/dist/src/tools/diffOptions.js.map +1 -1
- package/dist/src/tools/diffOptions.test.js +40 -4
- package/dist/src/tools/diffOptions.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +2 -2
- package/dist/src/tools/edit.js +20 -22
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +26 -5
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +5 -3
- package/dist/src/tools/mcp-client-manager.js +30 -5
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +20 -1
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +5 -5
- package/dist/src/tools/mcp-client.js +13 -22
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +3 -3
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +3 -2
- package/dist/src/tools/mcp-tool.js +9 -9
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +28 -7
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.js +5 -33
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-file.js +1 -1
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-many-files.js +1 -1
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/shell.js +1 -1
- package/dist/src/tools/shell.test.js +2 -2
- package/dist/src/tools/smart-edit.d.ts +73 -0
- package/dist/src/tools/smart-edit.js +607 -0
- package/dist/src/tools/smart-edit.js.map +1 -0
- package/dist/src/tools/smart-edit.test.d.ts +6 -0
- package/dist/src/tools/smart-edit.test.js +397 -0
- package/dist/src/tools/smart-edit.test.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +2 -1
- package/dist/src/tools/tool-registry.js +5 -5
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +5 -1
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +4 -3
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +1 -1
- package/dist/src/tools/web-search.js +3 -1
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.js +9 -13
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +19 -3
- package/dist/src/utils/fileUtils.js +139 -28
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +293 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.d.ts +1 -0
- package/dist/src/utils/gitIgnoreParser.js +101 -10
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +66 -0
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/ide-trust.d.ts +10 -0
- package/dist/src/utils/ide-trust.js +14 -0
- package/dist/src/utils/ide-trust.js.map +1 -0
- package/dist/src/utils/llm-edit-fixer.d.ts +25 -0
- package/dist/src/utils/llm-edit-fixer.js +112 -0
- package/dist/src/utils/llm-edit-fixer.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +5 -4
- package/dist/src/utils/memoryDiscovery.js +10 -9
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +38 -19
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +33 -0
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/google-gemini-cli-core-0.3.0-preview.2.tgz +0 -0
|
@@ -140,6 +140,72 @@ src/*.tmp
|
|
|
140
140
|
expect(() => parser.isIgnored('/node_modules')).not.toThrow();
|
|
141
141
|
expect(parser.isIgnored('/node_modules')).toBe(false);
|
|
142
142
|
});
|
|
143
|
+
it('should handle backslash-prefixed files without crashing', () => {
|
|
144
|
+
expect(() => parser.isIgnored('\\backslash-file-test.txt')).not.toThrow();
|
|
145
|
+
expect(parser.isIgnored('\\backslash-file-test.txt')).toBe(false);
|
|
146
|
+
});
|
|
147
|
+
it('should handle files with absolute-like names', () => {
|
|
148
|
+
expect(() => parser.isIgnored('/backslash-file-test.txt')).not.toThrow();
|
|
149
|
+
expect(parser.isIgnored('/backslash-file-test.txt')).toBe(false);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
describe('nested .gitignore files', () => {
|
|
153
|
+
beforeEach(async () => {
|
|
154
|
+
await setupGitRepo();
|
|
155
|
+
// Root .gitignore
|
|
156
|
+
await createTestFile('.gitignore', 'root-ignored.txt');
|
|
157
|
+
// Nested .gitignore 1
|
|
158
|
+
await createTestFile('a/.gitignore', '/b\nc');
|
|
159
|
+
// Nested .gitignore 2
|
|
160
|
+
await createTestFile('a/d/.gitignore', 'e.txt\nf/g');
|
|
161
|
+
});
|
|
162
|
+
it('should handle nested .gitignore files correctly', async () => {
|
|
163
|
+
parser.loadGitRepoPatterns();
|
|
164
|
+
// From root .gitignore
|
|
165
|
+
expect(parser.isIgnored('root-ignored.txt')).toBe(true);
|
|
166
|
+
expect(parser.isIgnored('a/root-ignored.txt')).toBe(true);
|
|
167
|
+
// From a/.gitignore: /b
|
|
168
|
+
expect(parser.isIgnored('a/b')).toBe(true);
|
|
169
|
+
expect(parser.isIgnored('b')).toBe(false);
|
|
170
|
+
expect(parser.isIgnored('a/x/b')).toBe(false);
|
|
171
|
+
// From a/.gitignore: c
|
|
172
|
+
expect(parser.isIgnored('a/c')).toBe(true);
|
|
173
|
+
expect(parser.isIgnored('a/x/y/c')).toBe(true);
|
|
174
|
+
expect(parser.isIgnored('c')).toBe(false);
|
|
175
|
+
// From a/d/.gitignore: e.txt
|
|
176
|
+
expect(parser.isIgnored('a/d/e.txt')).toBe(true);
|
|
177
|
+
expect(parser.isIgnored('a/d/x/e.txt')).toBe(true);
|
|
178
|
+
expect(parser.isIgnored('a/e.txt')).toBe(false);
|
|
179
|
+
// From a/d/.gitignore: f/g
|
|
180
|
+
expect(parser.isIgnored('a/d/f/g')).toBe(true);
|
|
181
|
+
expect(parser.isIgnored('a/f/g')).toBe(false);
|
|
182
|
+
});
|
|
183
|
+
it('should correctly transform patterns from nested gitignore files', () => {
|
|
184
|
+
parser.loadGitRepoPatterns();
|
|
185
|
+
const patterns = parser.getPatterns();
|
|
186
|
+
// From root .gitignore
|
|
187
|
+
expect(patterns).toContain('root-ignored.txt');
|
|
188
|
+
// From a/.gitignore
|
|
189
|
+
expect(patterns).toContain('/a/b'); // /b becomes /a/b
|
|
190
|
+
expect(patterns).toContain('/a/**/c'); // c becomes /a/**/c
|
|
191
|
+
// From a/d/.gitignore
|
|
192
|
+
expect(patterns).toContain('/a/d/**/e.txt'); // e.txt becomes /a/d/**/e.txt
|
|
193
|
+
expect(patterns).toContain('/a/d/f/g'); // f/g becomes /a/d/f/g
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
describe('precedence rules', () => {
|
|
197
|
+
it('should prioritize root .gitignore over .git/info/exclude', async () => {
|
|
198
|
+
await setupGitRepo();
|
|
199
|
+
// Exclude all .log files
|
|
200
|
+
await createTestFile(path.join('.git', 'info', 'exclude'), '*.log');
|
|
201
|
+
// But make an exception in the root .gitignore
|
|
202
|
+
await createTestFile('.gitignore', '!important.log');
|
|
203
|
+
parser.loadGitRepoPatterns();
|
|
204
|
+
expect(parser.isIgnored('some.log')).toBe(true);
|
|
205
|
+
expect(parser.isIgnored('important.log')).toBe(false);
|
|
206
|
+
expect(parser.isIgnored(path.join('subdir', 'some.log'))).toBe(true);
|
|
207
|
+
expect(parser.isIgnored(path.join('subdir', 'important.log'))).toBe(false);
|
|
208
|
+
});
|
|
143
209
|
});
|
|
144
210
|
describe('getIgnoredPatterns', () => {
|
|
145
211
|
it('should return the raw patterns added', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitIgnoreParser.test.js","sourceRoot":"","sources":["../../../src/utils/gitIgnoreParser.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gitIgnoreParser.test.js","sourceRoot":"","sources":["../../../src/utils/gitIgnoreParser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Gets the workspace trust from the IDE if available.
|
|
8
|
+
* @returns A boolean if the IDE provides a trust value, otherwise undefined.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getIdeTrust(): boolean | undefined;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { ideContext } from '../ide/ideContext.js';
|
|
7
|
+
/**
|
|
8
|
+
* Gets the workspace trust from the IDE if available.
|
|
9
|
+
* @returns A boolean if the IDE provides a trust value, otherwise undefined.
|
|
10
|
+
*/
|
|
11
|
+
export function getIdeTrust() {
|
|
12
|
+
return ideContext.getIdeContext()?.workspaceState?.isTrusted;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ide-trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ide-trust.js","sourceRoot":"","sources":["../../../src/utils/ide-trust.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { type GeminiClient } from '../core/client.js';
|
|
7
|
+
export interface SearchReplaceEdit {
|
|
8
|
+
search: string;
|
|
9
|
+
replace: string;
|
|
10
|
+
noChangesRequired: boolean;
|
|
11
|
+
explanation: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Attempts to fix a failed edit by using an LLM to generate a new search and replace pair.
|
|
15
|
+
* @param instruction The instruction for what needs to be done.
|
|
16
|
+
* @param old_string The original string to be replaced.
|
|
17
|
+
* @param new_string The original replacement string.
|
|
18
|
+
* @param error The error that occurred during the initial edit.
|
|
19
|
+
* @param current_content The current content of the file.
|
|
20
|
+
* @param geminiClient The Gemini client to use for the LLM call.
|
|
21
|
+
* @param abortSignal An abort signal to cancel the operation.
|
|
22
|
+
* @returns A new search and replace pair.
|
|
23
|
+
*/
|
|
24
|
+
export declare function FixLLMEditWithInstruction(instruction: string, old_string: string, new_string: string, error: string, current_content: string, geminiClient: GeminiClient, abortSignal: AbortSignal): Promise<SearchReplaceEdit>;
|
|
25
|
+
export declare function resetLlmEditFixerCaches_TEST_ONLY(): void;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Type } from '@google/genai';
|
|
7
|
+
import {} from '../core/client.js';
|
|
8
|
+
import { LruCache } from './LruCache.js';
|
|
9
|
+
import { DEFAULT_GEMINI_FLASH_MODEL } from '../config/models.js';
|
|
10
|
+
const MAX_CACHE_SIZE = 50;
|
|
11
|
+
const EDIT_SYS_PROMPT = `
|
|
12
|
+
You are an expert code-editing assistant specializing in debugging and correcting failed search-and-replace operations.
|
|
13
|
+
|
|
14
|
+
# Primary Goal
|
|
15
|
+
Your task is to analyze a failed edit attempt and provide a corrected \`search\` string that will match the text in the file precisely. The correction should be as minimal as possible, staying very close to the original, failed \`search\` string. Do NOT invent a completely new edit based on the instruction; your job is to fix the provided parameters.
|
|
16
|
+
|
|
17
|
+
It is important that you do no try to figure out if the instruction is correct. DO NOT GIVE ADVICE. Your only goal here is to do your best to perform the search and replace task!
|
|
18
|
+
|
|
19
|
+
# Input Context
|
|
20
|
+
You will be given:
|
|
21
|
+
1. The high-level instruction for the original edit.
|
|
22
|
+
2. The exact \`search\` and \`replace\` strings that failed.
|
|
23
|
+
3. The error message that was produced.
|
|
24
|
+
4. The full content of the source file.
|
|
25
|
+
|
|
26
|
+
# Rules for Correction
|
|
27
|
+
1. **Minimal Correction:** Your new \`search\` string must be a close variation of the original. Focus on fixing issues like whitespace, indentation, line endings, or small contextual differences.
|
|
28
|
+
2. **Explain the Fix:** Your \`explanation\` MUST state exactly why the original \`search\` failed and how your new \`search\` string resolves that specific failure. (e.g., "The original search failed due to incorrect indentation; the new search corrects the indentation to match the source file.").
|
|
29
|
+
3. **Preserve the \`replace\` String:** Do NOT modify the \`replace\` string unless the instruction explicitly requires it and it was the source of the error. Your primary focus is fixing the \`search\` string.
|
|
30
|
+
4. **No Changes Case:** CRUCIAL: if the change is already present in the file, set \`noChangesRequired\` to True and explain why in the \`explanation\`. It is crucial that you only do this if the changes outline in \`replace\` are alredy in the file and suits the instruction!!
|
|
31
|
+
5. **Exactness:** The final \`search\` field must be the EXACT literal text from the file. Do not escape characters.
|
|
32
|
+
`;
|
|
33
|
+
const EDIT_USER_PROMPT = `
|
|
34
|
+
# Goal of the Original Edit
|
|
35
|
+
<instruction>
|
|
36
|
+
{instruction}
|
|
37
|
+
</instruction>
|
|
38
|
+
|
|
39
|
+
# Failed Attempt Details
|
|
40
|
+
- **Original \`search\` parameter (failed):**
|
|
41
|
+
<search>
|
|
42
|
+
{old_string}
|
|
43
|
+
</search>
|
|
44
|
+
- **Original \`replace\` parameter:**
|
|
45
|
+
<replace>
|
|
46
|
+
{new_string}
|
|
47
|
+
</replace>
|
|
48
|
+
- **Error Encountered:**
|
|
49
|
+
<error>
|
|
50
|
+
{error}
|
|
51
|
+
</error>
|
|
52
|
+
|
|
53
|
+
# Full File Content
|
|
54
|
+
<file_content>
|
|
55
|
+
{current_content}
|
|
56
|
+
</file_content>
|
|
57
|
+
|
|
58
|
+
# Your Task
|
|
59
|
+
Based on the error and the file content, provide a corrected \`search\` string that will succeed. Remember to keep your correction minimal and explain the precise reason for the failure in your \`explanation\`.
|
|
60
|
+
`;
|
|
61
|
+
const SearchReplaceEditSchema = {
|
|
62
|
+
type: Type.OBJECT,
|
|
63
|
+
properties: {
|
|
64
|
+
explanation: { type: Type.STRING },
|
|
65
|
+
search: { type: Type.STRING },
|
|
66
|
+
replace: { type: Type.STRING },
|
|
67
|
+
noChangesRequired: { type: Type.BOOLEAN },
|
|
68
|
+
},
|
|
69
|
+
required: ['search', 'replace', 'explanation'],
|
|
70
|
+
};
|
|
71
|
+
const editCorrectionWithInstructionCache = new LruCache(MAX_CACHE_SIZE);
|
|
72
|
+
/**
|
|
73
|
+
* Attempts to fix a failed edit by using an LLM to generate a new search and replace pair.
|
|
74
|
+
* @param instruction The instruction for what needs to be done.
|
|
75
|
+
* @param old_string The original string to be replaced.
|
|
76
|
+
* @param new_string The original replacement string.
|
|
77
|
+
* @param error The error that occurred during the initial edit.
|
|
78
|
+
* @param current_content The current content of the file.
|
|
79
|
+
* @param geminiClient The Gemini client to use for the LLM call.
|
|
80
|
+
* @param abortSignal An abort signal to cancel the operation.
|
|
81
|
+
* @returns A new search and replace pair.
|
|
82
|
+
*/
|
|
83
|
+
export async function FixLLMEditWithInstruction(instruction, old_string, new_string, error, current_content, geminiClient, abortSignal) {
|
|
84
|
+
const cacheKey = `${instruction}---${old_string}---${new_string}--${current_content}--${error}`;
|
|
85
|
+
const cachedResult = editCorrectionWithInstructionCache.get(cacheKey);
|
|
86
|
+
if (cachedResult) {
|
|
87
|
+
return cachedResult;
|
|
88
|
+
}
|
|
89
|
+
const userPrompt = EDIT_USER_PROMPT.replace('{instruction}', instruction)
|
|
90
|
+
.replace('{old_string}', old_string)
|
|
91
|
+
.replace('{new_string}', new_string)
|
|
92
|
+
.replace('{error}', error)
|
|
93
|
+
.replace('{current_content}', current_content);
|
|
94
|
+
const contents = [
|
|
95
|
+
{
|
|
96
|
+
role: 'user',
|
|
97
|
+
parts: [
|
|
98
|
+
{
|
|
99
|
+
text: `${EDIT_SYS_PROMPT}
|
|
100
|
+
${userPrompt}`,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
const result = (await geminiClient.generateJson(contents, SearchReplaceEditSchema, abortSignal, DEFAULT_GEMINI_FLASH_MODEL));
|
|
106
|
+
editCorrectionWithInstructionCache.set(cacheKey, result);
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
export function resetLlmEditFixerCaches_TEST_ONLY() {
|
|
110
|
+
editCorrectionWithInstructionCache.clear();
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=llm-edit-fixer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-edit-fixer.js","sourceRoot":"","sources":["../../../src/utils/llm-edit-fixer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAgB,IAAI,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAqB,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBvB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BxB,CAAC;AASF,MAAM,uBAAuB,GAAG;IAC9B,IAAI,EAAE,IAAI,CAAC,MAAM;IACjB,UAAU,EAAE;QACV,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QAClC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QAC9B,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;KAC1C;IACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC;CAC/C,CAAC;AAEF,MAAM,kCAAkC,GAAG,IAAI,QAAQ,CAGrD,cAAc,CAAC,CAAC;AAElB;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAmB,EACnB,UAAkB,EAClB,UAAkB,EAClB,KAAa,EACb,eAAuB,EACvB,YAA0B,EAC1B,WAAwB;IAExB,MAAM,QAAQ,GAAG,GAAG,WAAW,MAAM,UAAU,MAAM,UAAU,KAAK,eAAe,KAAK,KAAK,EAAE,CAAC;IAChG,MAAM,YAAY,GAAG,kCAAkC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC;SACtE,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC;SACnC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC;SACnC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;SACzB,OAAO,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAc;QAC1B;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,GAAG,eAAe;EAChC,UAAU,EAAE;iBACL;aACF;SACF;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAC7C,QAAQ,EACR,uBAAuB,EACvB,WAAW,EACX,0BAA0B,CAC3B,CAAiC,CAAC;IAEnC,kCAAkC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,kCAAkC,CAAC,KAAK,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
7
7
|
import type { FileFilteringOptions } from '../config/config.js';
|
|
8
|
+
export interface LoadServerHierarchicalMemoryResponse {
|
|
9
|
+
memoryContent: string;
|
|
10
|
+
fileCount: number;
|
|
11
|
+
}
|
|
8
12
|
/**
|
|
9
13
|
* Loads hierarchical GEMINI.md files and concatenates their content.
|
|
10
14
|
* This function is intended for use by the server.
|
|
11
15
|
*/
|
|
12
|
-
export declare function loadServerHierarchicalMemory(currentWorkingDirectory: string, includeDirectoriesToReadGemini: readonly string[], debugMode: boolean, fileService: FileDiscoveryService, extensionContextFilePaths
|
|
13
|
-
memoryContent: string;
|
|
14
|
-
fileCount: number;
|
|
15
|
-
}>;
|
|
16
|
+
export declare function loadServerHierarchicalMemory(currentWorkingDirectory: string, includeDirectoriesToReadGemini: readonly string[], debugMode: boolean, fileService: FileDiscoveryService, extensionContextFilePaths: string[] | undefined, folderTrust: boolean, importFormat?: 'flat' | 'tree', fileFilteringOptions?: FileFilteringOptions, maxDirs?: number): Promise<LoadServerHierarchicalMemoryResponse>;
|
|
@@ -8,9 +8,10 @@ import * as fsSync from 'node:fs';
|
|
|
8
8
|
import * as path from 'node:path';
|
|
9
9
|
import { homedir } from 'node:os';
|
|
10
10
|
import { bfsFileSearch } from './bfsFileSearch.js';
|
|
11
|
-
import {
|
|
11
|
+
import { getAllGeminiMdFilenames } from '../tools/memoryTool.js';
|
|
12
12
|
import { processImports } from './memoryImportProcessor.js';
|
|
13
13
|
import { DEFAULT_MEMORY_FILE_FILTERING_OPTIONS } from '../config/config.js';
|
|
14
|
+
import { GEMINI_DIR } from './paths.js';
|
|
14
15
|
// Simple console logger, similar to the one previously in CLI's config.ts
|
|
15
16
|
// TODO: Integrate with a more robust server-side logger if available/appropriate.
|
|
16
17
|
const logger = {
|
|
@@ -58,7 +59,7 @@ async function findProjectRoot(startDir) {
|
|
|
58
59
|
currentDir = parentDir;
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
|
-
async function getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDirectoriesToReadGemini, userHomePath, debugMode, fileService, extensionContextFilePaths = [], fileFilteringOptions, maxDirs) {
|
|
62
|
+
async function getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDirectoriesToReadGemini, userHomePath, debugMode, fileService, extensionContextFilePaths = [], folderTrust, fileFilteringOptions, maxDirs) {
|
|
62
63
|
const dirs = new Set([
|
|
63
64
|
...includeDirectoriesToReadGemini,
|
|
64
65
|
currentWorkingDirectory,
|
|
@@ -69,7 +70,7 @@ async function getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDire
|
|
|
69
70
|
const pathsArrays = [];
|
|
70
71
|
for (let i = 0; i < dirsArray.length; i += CONCURRENT_LIMIT) {
|
|
71
72
|
const batch = dirsArray.slice(i, i + CONCURRENT_LIMIT);
|
|
72
|
-
const batchPromises = batch.map((dir) => getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMode, fileService, extensionContextFilePaths, fileFilteringOptions, maxDirs));
|
|
73
|
+
const batchPromises = batch.map((dir) => getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMode, fileService, extensionContextFilePaths, folderTrust, fileFilteringOptions, maxDirs));
|
|
73
74
|
const batchResults = await Promise.allSettled(batchPromises);
|
|
74
75
|
for (const result of batchResults) {
|
|
75
76
|
if (result.status === 'fulfilled') {
|
|
@@ -86,12 +87,12 @@ async function getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDire
|
|
|
86
87
|
const paths = pathsArrays.flat();
|
|
87
88
|
return Array.from(new Set(paths));
|
|
88
89
|
}
|
|
89
|
-
async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMode, fileService, extensionContextFilePaths = [], fileFilteringOptions, maxDirs) {
|
|
90
|
+
async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMode, fileService, extensionContextFilePaths = [], folderTrust, fileFilteringOptions, maxDirs) {
|
|
90
91
|
const allPaths = new Set();
|
|
91
92
|
const geminiMdFilenames = getAllGeminiMdFilenames();
|
|
92
93
|
for (const geminiMdFilename of geminiMdFilenames) {
|
|
93
94
|
const resolvedHome = path.resolve(userHomePath);
|
|
94
|
-
const globalMemoryPath = path.join(resolvedHome,
|
|
95
|
+
const globalMemoryPath = path.join(resolvedHome, GEMINI_DIR, geminiMdFilename);
|
|
95
96
|
// This part that finds the global file always runs.
|
|
96
97
|
try {
|
|
97
98
|
await fs.access(globalMemoryPath, fsSync.constants.R_OK);
|
|
@@ -104,7 +105,7 @@ async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMo
|
|
|
104
105
|
}
|
|
105
106
|
// FIX: Only perform the workspace search (upward and downward scans)
|
|
106
107
|
// if a valid currentWorkingDirectory is provided.
|
|
107
|
-
if (dir) {
|
|
108
|
+
if (dir && folderTrust) {
|
|
108
109
|
const resolvedCwd = path.resolve(dir);
|
|
109
110
|
if (debugMode)
|
|
110
111
|
logger.debug(`Searching for ${geminiMdFilename} starting from CWD: ${resolvedCwd}`);
|
|
@@ -117,7 +118,7 @@ async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMo
|
|
|
117
118
|
? path.dirname(projectRoot)
|
|
118
119
|
: path.dirname(resolvedHome);
|
|
119
120
|
while (currentDir && currentDir !== path.dirname(currentDir)) {
|
|
120
|
-
if (currentDir === path.join(resolvedHome,
|
|
121
|
+
if (currentDir === path.join(resolvedHome, GEMINI_DIR)) {
|
|
121
122
|
break;
|
|
122
123
|
}
|
|
123
124
|
const potentialPath = path.join(currentDir, geminiMdFilename);
|
|
@@ -226,13 +227,13 @@ currentWorkingDirectoryForDisplay) {
|
|
|
226
227
|
* Loads hierarchical GEMINI.md files and concatenates their content.
|
|
227
228
|
* This function is intended for use by the server.
|
|
228
229
|
*/
|
|
229
|
-
export async function loadServerHierarchicalMemory(currentWorkingDirectory, includeDirectoriesToReadGemini, debugMode, fileService, extensionContextFilePaths = [], importFormat = 'tree', fileFilteringOptions, maxDirs = 200) {
|
|
230
|
+
export async function loadServerHierarchicalMemory(currentWorkingDirectory, includeDirectoriesToReadGemini, debugMode, fileService, extensionContextFilePaths = [], folderTrust, importFormat = 'tree', fileFilteringOptions, maxDirs = 200) {
|
|
230
231
|
if (debugMode)
|
|
231
232
|
logger.debug(`Loading server hierarchical memory for CWD: ${currentWorkingDirectory} (importFormat: ${importFormat})`);
|
|
232
233
|
// For the server, homedir() refers to the server process's home.
|
|
233
234
|
// This is consistent with how MemoryTool already finds the global path.
|
|
234
235
|
const userHomePath = homedir();
|
|
235
|
-
const filePaths = await getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDirectoriesToReadGemini, userHomePath, debugMode, fileService, extensionContextFilePaths, fileFilteringOptions || DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, maxDirs);
|
|
236
|
+
const filePaths = await getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDirectoriesToReadGemini, userHomePath, debugMode, fileService, extensionContextFilePaths, folderTrust, fileFilteringOptions || DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, maxDirs);
|
|
236
237
|
if (filePaths.length === 0) {
|
|
237
238
|
if (debugMode)
|
|
238
239
|
logger.debug('No GEMINI.md files found in hierarchy of the workspace.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryDiscovery.js","sourceRoot":"","sources":["../../../src/utils/memoryDiscovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"memoryDiscovery.js","sourceRoot":"","sources":["../../../src/utils/memoryDiscovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,9 @@ import * as fsPromises from 'node:fs/promises';
|
|
|
8
8
|
import * as os from 'node:os';
|
|
9
9
|
import * as path from 'node:path';
|
|
10
10
|
import { loadServerHierarchicalMemory } from './memoryDiscovery.js';
|
|
11
|
-
import {
|
|
11
|
+
import { setGeminiMdFilename, DEFAULT_CONTEXT_FILENAME, } from '../tools/memoryTool.js';
|
|
12
12
|
import { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
13
|
+
import { GEMINI_DIR } from './paths.js';
|
|
13
14
|
vi.mock('os', async (importOriginal) => {
|
|
14
15
|
const actualOs = await importOriginal();
|
|
15
16
|
return {
|
|
@@ -18,6 +19,7 @@ vi.mock('os', async (importOriginal) => {
|
|
|
18
19
|
};
|
|
19
20
|
});
|
|
20
21
|
describe('loadServerHierarchicalMemory', () => {
|
|
22
|
+
const DEFAULT_FOLDER_TRUST = true;
|
|
21
23
|
let testRootDir;
|
|
22
24
|
let cwd;
|
|
23
25
|
let projectRoot;
|
|
@@ -49,16 +51,33 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
49
51
|
// Clean up the temporary directory to prevent resource leaks.
|
|
50
52
|
await fsPromises.rm(testRootDir, { recursive: true, force: true });
|
|
51
53
|
});
|
|
54
|
+
describe('when untrusted', () => {
|
|
55
|
+
it('does not load context files from untrusted workspaces', async () => {
|
|
56
|
+
await createTestFile(path.join(projectRoot, DEFAULT_CONTEXT_FILENAME), 'Project root memory');
|
|
57
|
+
await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'Src directory memory');
|
|
58
|
+
const { fileCount } = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], false);
|
|
59
|
+
expect(fileCount).toEqual(0);
|
|
60
|
+
});
|
|
61
|
+
it('loads context from outside the untrusted workspace', async () => {
|
|
62
|
+
await createTestFile(path.join(projectRoot, DEFAULT_CONTEXT_FILENAME), 'Project root memory'); // Untrusted
|
|
63
|
+
await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'Src directory memory'); // Untrusted
|
|
64
|
+
const filepath = path.join(homedir, GEMINI_DIR, DEFAULT_CONTEXT_FILENAME);
|
|
65
|
+
await createTestFile(filepath, 'default context content'); // In user home dir (outside untrusted space).
|
|
66
|
+
const { fileCount, memoryContent } = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], false);
|
|
67
|
+
expect(fileCount).toEqual(1);
|
|
68
|
+
expect(memoryContent).toContain(path.relative(cwd, filepath).toString());
|
|
69
|
+
});
|
|
70
|
+
});
|
|
52
71
|
it('should return empty memory and count if no context files are found', async () => {
|
|
53
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
72
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
54
73
|
expect(result).toEqual({
|
|
55
74
|
memoryContent: '',
|
|
56
75
|
fileCount: 0,
|
|
57
76
|
});
|
|
58
77
|
});
|
|
59
78
|
it('should load only the global context file if present and others are not (default filename)', async () => {
|
|
60
|
-
const defaultContextFile = await createTestFile(path.join(homedir,
|
|
61
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
79
|
+
const defaultContextFile = await createTestFile(path.join(homedir, GEMINI_DIR, DEFAULT_CONTEXT_FILENAME), 'default context content');
|
|
80
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
62
81
|
expect(result).toEqual({
|
|
63
82
|
memoryContent: `--- Context from: ${path.relative(cwd, defaultContextFile)} ---\ndefault context content\n--- End of Context from: ${path.relative(cwd, defaultContextFile)} ---`,
|
|
64
83
|
fileCount: 1,
|
|
@@ -67,8 +86,8 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
67
86
|
it('should load only the global custom context file if present and filename is changed', async () => {
|
|
68
87
|
const customFilename = 'CUSTOM_AGENTS.md';
|
|
69
88
|
setGeminiMdFilename(customFilename);
|
|
70
|
-
const customContextFile = await createTestFile(path.join(homedir,
|
|
71
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
89
|
+
const customContextFile = await createTestFile(path.join(homedir, GEMINI_DIR, customFilename), 'custom context content');
|
|
90
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
72
91
|
expect(result).toEqual({
|
|
73
92
|
memoryContent: `--- Context from: ${path.relative(cwd, customContextFile)} ---\ncustom context content\n--- End of Context from: ${path.relative(cwd, customContextFile)} ---`,
|
|
74
93
|
fileCount: 1,
|
|
@@ -79,7 +98,7 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
79
98
|
setGeminiMdFilename(customFilename);
|
|
80
99
|
const projectContextFile = await createTestFile(path.join(projectRoot, customFilename), 'project context content');
|
|
81
100
|
const cwdContextFile = await createTestFile(path.join(cwd, customFilename), 'cwd context content');
|
|
82
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
101
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
83
102
|
expect(result).toEqual({
|
|
84
103
|
memoryContent: `--- Context from: ${path.relative(cwd, projectContextFile)} ---\nproject context content\n--- End of Context from: ${path.relative(cwd, projectContextFile)} ---\n\n--- Context from: ${path.relative(cwd, cwdContextFile)} ---\ncwd context content\n--- End of Context from: ${path.relative(cwd, cwdContextFile)} ---`,
|
|
85
104
|
fileCount: 2,
|
|
@@ -90,7 +109,7 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
90
109
|
setGeminiMdFilename(customFilename);
|
|
91
110
|
await createTestFile(path.join(cwd, 'subdir', customFilename), 'Subdir custom memory');
|
|
92
111
|
await createTestFile(path.join(cwd, customFilename), 'CWD custom memory');
|
|
93
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
112
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
94
113
|
expect(result).toEqual({
|
|
95
114
|
memoryContent: `--- Context from: ${customFilename} ---\nCWD custom memory\n--- End of Context from: ${customFilename} ---\n\n--- Context from: ${path.join('subdir', customFilename)} ---\nSubdir custom memory\n--- End of Context from: ${path.join('subdir', customFilename)} ---`,
|
|
96
115
|
fileCount: 2,
|
|
@@ -99,7 +118,7 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
99
118
|
it('should load ORIGINAL_GEMINI_MD_FILENAME files by upward traversal from CWD to project root', async () => {
|
|
100
119
|
const projectRootGeminiFile = await createTestFile(path.join(projectRoot, DEFAULT_CONTEXT_FILENAME), 'Project root memory');
|
|
101
120
|
const srcGeminiFile = await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'Src directory memory');
|
|
102
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
121
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
103
122
|
expect(result).toEqual({
|
|
104
123
|
memoryContent: `--- Context from: ${path.relative(cwd, projectRootGeminiFile)} ---\nProject root memory\n--- End of Context from: ${path.relative(cwd, projectRootGeminiFile)} ---\n\n--- Context from: ${path.relative(cwd, srcGeminiFile)} ---\nSrc directory memory\n--- End of Context from: ${path.relative(cwd, srcGeminiFile)} ---`,
|
|
105
124
|
fileCount: 2,
|
|
@@ -108,19 +127,19 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
108
127
|
it('should load ORIGINAL_GEMINI_MD_FILENAME files by downward traversal from CWD', async () => {
|
|
109
128
|
await createTestFile(path.join(cwd, 'subdir', DEFAULT_CONTEXT_FILENAME), 'Subdir memory');
|
|
110
129
|
await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'CWD memory');
|
|
111
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
130
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
112
131
|
expect(result).toEqual({
|
|
113
132
|
memoryContent: `--- Context from: ${DEFAULT_CONTEXT_FILENAME} ---\nCWD memory\n--- End of Context from: ${DEFAULT_CONTEXT_FILENAME} ---\n\n--- Context from: ${path.join('subdir', DEFAULT_CONTEXT_FILENAME)} ---\nSubdir memory\n--- End of Context from: ${path.join('subdir', DEFAULT_CONTEXT_FILENAME)} ---`,
|
|
114
133
|
fileCount: 2,
|
|
115
134
|
});
|
|
116
135
|
});
|
|
117
136
|
it('should load and correctly order global, upward, and downward ORIGINAL_GEMINI_MD_FILENAME files', async () => {
|
|
118
|
-
const defaultContextFile = await createTestFile(path.join(homedir,
|
|
137
|
+
const defaultContextFile = await createTestFile(path.join(homedir, GEMINI_DIR, DEFAULT_CONTEXT_FILENAME), 'default context content');
|
|
119
138
|
const rootGeminiFile = await createTestFile(path.join(testRootDir, DEFAULT_CONTEXT_FILENAME), 'Project parent memory');
|
|
120
139
|
const projectRootGeminiFile = await createTestFile(path.join(projectRoot, DEFAULT_CONTEXT_FILENAME), 'Project root memory');
|
|
121
140
|
const cwdGeminiFile = await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'CWD memory');
|
|
122
141
|
const subDirGeminiFile = await createTestFile(path.join(cwd, 'sub', DEFAULT_CONTEXT_FILENAME), 'Subdir memory');
|
|
123
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
142
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
124
143
|
expect(result).toEqual({
|
|
125
144
|
memoryContent: `--- Context from: ${path.relative(cwd, defaultContextFile)} ---\ndefault context content\n--- End of Context from: ${path.relative(cwd, defaultContextFile)} ---\n\n--- Context from: ${path.relative(cwd, rootGeminiFile)} ---\nProject parent memory\n--- End of Context from: ${path.relative(cwd, rootGeminiFile)} ---\n\n--- Context from: ${path.relative(cwd, projectRootGeminiFile)} ---\nProject root memory\n--- End of Context from: ${path.relative(cwd, projectRootGeminiFile)} ---\n\n--- Context from: ${path.relative(cwd, cwdGeminiFile)} ---\nCWD memory\n--- End of Context from: ${path.relative(cwd, cwdGeminiFile)} ---\n\n--- Context from: ${path.relative(cwd, subDirGeminiFile)} ---\nSubdir memory\n--- End of Context from: ${path.relative(cwd, subDirGeminiFile)} ---`,
|
|
126
145
|
fileCount: 5,
|
|
@@ -131,7 +150,7 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
131
150
|
await createTestFile(path.join(projectRoot, '.gitignore'), 'node_modules');
|
|
132
151
|
await createTestFile(path.join(cwd, 'node_modules', DEFAULT_CONTEXT_FILENAME), 'Ignored memory');
|
|
133
152
|
const regularSubDirGeminiFile = await createTestFile(path.join(cwd, 'my_code', DEFAULT_CONTEXT_FILENAME), 'My code memory');
|
|
134
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], 'tree', {
|
|
153
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST, 'tree', {
|
|
135
154
|
respectGitIgnore: true,
|
|
136
155
|
respectGeminiIgnore: true,
|
|
137
156
|
}, 200);
|
|
@@ -148,14 +167,14 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
148
167
|
await createEmptyDir(path.join(cwd, `deep_dir_${i}`));
|
|
149
168
|
}
|
|
150
169
|
// Pass the custom limit directly to the function
|
|
151
|
-
await loadServerHierarchicalMemory(cwd, [], true, new FileDiscoveryService(projectRoot), [], 'tree', // importFormat
|
|
170
|
+
await loadServerHierarchicalMemory(cwd, [], true, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST, 'tree', // importFormat
|
|
152
171
|
{
|
|
153
172
|
respectGitIgnore: true,
|
|
154
173
|
respectGeminiIgnore: true,
|
|
155
174
|
}, 50);
|
|
156
175
|
expect(consoleDebugSpy).toHaveBeenCalledWith(expect.stringContaining('[DEBUG] [BfsFileSearch]'), expect.stringContaining('Scanning [50/50]:'));
|
|
157
176
|
vi.mocked(console.debug).mockRestore();
|
|
158
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot));
|
|
177
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
159
178
|
expect(result).toEqual({
|
|
160
179
|
memoryContent: '',
|
|
161
180
|
fileCount: 0,
|
|
@@ -163,7 +182,7 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
163
182
|
});
|
|
164
183
|
it('should load extension context file paths', async () => {
|
|
165
184
|
const extensionFilePath = await createTestFile(path.join(testRootDir, 'extensions/ext1/GEMINI.md'), 'Extension memory content');
|
|
166
|
-
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [extensionFilePath]);
|
|
185
|
+
const result = await loadServerHierarchicalMemory(cwd, [], false, new FileDiscoveryService(projectRoot), [extensionFilePath], DEFAULT_FOLDER_TRUST);
|
|
167
186
|
expect(result).toEqual({
|
|
168
187
|
memoryContent: `--- Context from: ${path.relative(cwd, extensionFilePath)} ---\nExtension memory content\n--- End of Context from: ${path.relative(cwd, extensionFilePath)} ---`,
|
|
169
188
|
fileCount: 1,
|
|
@@ -172,7 +191,7 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
172
191
|
it('should load memory from included directories', async () => {
|
|
173
192
|
const includedDir = await createEmptyDir(path.join(testRootDir, 'included'));
|
|
174
193
|
const includedFile = await createTestFile(path.join(includedDir, DEFAULT_CONTEXT_FILENAME), 'included directory memory');
|
|
175
|
-
const result = await loadServerHierarchicalMemory(cwd, [includedDir], false, new FileDiscoveryService(projectRoot));
|
|
194
|
+
const result = await loadServerHierarchicalMemory(cwd, [includedDir], false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
176
195
|
expect(result).toEqual({
|
|
177
196
|
memoryContent: `--- Context from: ${path.relative(cwd, includedFile)} ---\nincluded directory memory\n--- End of Context from: ${path.relative(cwd, includedFile)} ---`,
|
|
178
197
|
fileCount: 1,
|
|
@@ -188,7 +207,7 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
188
207
|
createdFiles.push(filePath);
|
|
189
208
|
}
|
|
190
209
|
// Load memory from all directories
|
|
191
|
-
const result = await loadServerHierarchicalMemory(cwd, createdFiles.map((f) => path.dirname(f)), false, new FileDiscoveryService(projectRoot));
|
|
210
|
+
const result = await loadServerHierarchicalMemory(cwd, createdFiles.map((f) => path.dirname(f)), false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
192
211
|
// Should have loaded all files
|
|
193
212
|
expect(result.fileCount).toBe(numDirs);
|
|
194
213
|
// Content should include all project contents
|
|
@@ -204,7 +223,7 @@ describe('loadServerHierarchicalMemory', () => {
|
|
|
204
223
|
await createTestFile(path.join(childDir, DEFAULT_CONTEXT_FILENAME), 'Child content');
|
|
205
224
|
// Include both parent and child directories
|
|
206
225
|
const result = await loadServerHierarchicalMemory(parentDir, [childDir, parentDir], // Deliberately include duplicates
|
|
207
|
-
false, new FileDiscoveryService(projectRoot));
|
|
226
|
+
false, new FileDiscoveryService(projectRoot), [], DEFAULT_FOLDER_TRUST);
|
|
208
227
|
// Should have both files without duplicates
|
|
209
228
|
expect(result.fileCount).toBe(2);
|
|
210
229
|
expect(result.memoryContent).toContain('Parent content');
|