@google/gemini-cli-core 0.5.5 → 0.6.0-preview.0
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/LICENSE +2 -2
- package/README.md +12 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/src/code_assist/converter.d.ts +1 -0
- package/dist/src/code_assist/converter.js +1 -0
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +10 -0
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.d.ts +5 -7
- package/dist/src/code_assist/oauth-credential-storage.js +5 -8
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js +35 -33
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +28 -2
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +674 -536
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/config/config.d.ts +32 -1
- package/dist/src/config/config.js +73 -16
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +104 -16
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +15 -0
- package/dist/src/config/models.js +27 -0
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.d.ts +6 -0
- package/dist/src/config/models.test.js +55 -0
- package/dist/src/config/models.test.js.map +1 -0
- package/dist/src/confirmation-bus/index.d.ts +7 -0
- package/dist/src/confirmation-bus/index.js +8 -0
- package/dist/src/confirmation-bus/index.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.d.ts +17 -0
- package/dist/src/confirmation-bus/message-bus.js +81 -0
- package/dist/src/confirmation-bus/message-bus.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.test.d.ts +6 -0
- package/dist/src/confirmation-bus/message-bus.test.js +164 -0
- package/dist/src/confirmation-bus/message-bus.test.js.map +1 -0
- package/dist/src/confirmation-bus/types.d.ts +38 -0
- package/dist/src/confirmation-bus/types.js +15 -0
- package/dist/src/confirmation-bus/types.js.map +1 -0
- package/dist/src/core/baseLlmClient.d.ts +1 -0
- package/dist/src/core/baseLlmClient.js +24 -0
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +63 -0
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.d.ts +5 -4
- package/dist/src/core/client.js +80 -140
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +247 -186
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +0 -1
- package/dist/src/core/contentGenerator.js +0 -4
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +0 -3
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +4 -3
- package/dist/src/core/coreToolScheduler.js +42 -5
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +43 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +3 -30
- package/dist/src/core/geminiChat.js +32 -228
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +58 -489
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +5 -5
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +49 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/subagent.js +1 -1
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagent.test.js +9 -8
- package/dist/src/core/subagent.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +2 -1
- package/dist/src/core/turn.js +2 -2
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +18 -18
- 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/constants.d.ts +1 -0
- package/dist/src/ide/constants.js +1 -0
- package/dist/src/ide/constants.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +51 -13
- package/dist/src/ide/ide-client.js +182 -35
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +71 -0
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.js +8 -2
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +13 -2
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +34 -113
- package/dist/src/ide/ideContext.js +20 -78
- package/dist/src/ide/ideContext.js.map +1 -1
- package/dist/src/ide/ideContext.test.js +37 -39
- package/dist/src/ide/ideContext.test.js.map +1 -1
- package/dist/src/ide/types.d.ts +141 -0
- package/dist/src/ide/types.js +73 -0
- package/dist/src/ide/types.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.d.ts +2 -0
- package/dist/src/mcp/oauth-token-storage.js +25 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.test.js +251 -160
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/index.d.ts +11 -0
- package/dist/src/mcp/token-storage/index.js +12 -0
- package/dist/src/mcp/token-storage/index.js.map +1 -0
- package/dist/src/output/json-formatter.d.ts +11 -0
- package/dist/src/output/json-formatter.js +30 -0
- package/dist/src/output/json-formatter.js.map +1 -0
- package/dist/src/output/json-formatter.test.d.ts +6 -0
- package/dist/src/output/json-formatter.test.js +266 -0
- package/dist/src/output/json-formatter.test.js.map +1 -0
- package/dist/src/output/types.d.ts +20 -0
- package/dist/src/output/types.js +11 -0
- package/dist/src/output/types.js.map +1 -0
- package/dist/src/policy/index.d.ts +7 -0
- package/dist/src/policy/index.js +8 -0
- package/dist/src/policy/index.js.map +1 -0
- package/dist/src/policy/policy-engine.d.ts +30 -0
- package/dist/src/policy/policy-engine.js +83 -0
- package/dist/src/policy/policy-engine.js.map +1 -0
- package/dist/src/policy/policy-engine.test.d.ts +6 -0
- package/dist/src/policy/policy-engine.test.js +470 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -0
- package/dist/src/policy/stable-stringify.d.ts +58 -0
- package/dist/src/policy/stable-stringify.js +122 -0
- package/dist/src/policy/stable-stringify.js.map +1 -0
- package/dist/src/policy/types.d.ts +47 -0
- package/dist/src/policy/types.js +12 -0
- package/dist/src/policy/types.js.map +1 -0
- package/dist/src/routing/modelRouterService.d.ts +23 -0
- package/dist/src/routing/modelRouterService.js +70 -0
- package/dist/src/routing/modelRouterService.js.map +1 -0
- package/dist/src/routing/modelRouterService.test.d.ts +6 -0
- package/dist/src/routing/modelRouterService.test.js +98 -0
- package/dist/src/routing/modelRouterService.test.js.map +1 -0
- package/dist/src/routing/routingStrategy.d.ts +62 -0
- package/dist/src/routing/routingStrategy.js +7 -0
- package/dist/src/routing/routingStrategy.js.map +1 -0
- package/dist/src/routing/strategies/classifierStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/classifierStrategy.js +173 -0
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/classifierStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js +192 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/compositeStrategy.d.ts +26 -0
- package/dist/src/routing/strategies/compositeStrategy.js +67 -0
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -0
- package/dist/src/routing/strategies/compositeStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/compositeStrategy.test.js +123 -0
- package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/defaultStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/defaultStrategy.js +20 -0
- package/dist/src/routing/strategies/defaultStrategy.js.map +1 -0
- package/dist/src/routing/strategies/defaultStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/defaultStrategy.test.js +26 -0
- package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/fallbackStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/fallbackStrategy.js +25 -0
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.js +55 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/overrideStrategy.d.ts +15 -0
- package/dist/src/routing/strategies/overrideStrategy.js +28 -0
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -0
- package/dist/src/routing/strategies/overrideStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/overrideStrategy.test.js +42 -0
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -0
- package/dist/src/services/chatRecordingService.d.ts +2 -1
- package/dist/src/services/chatRecordingService.js +3 -3
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +8 -3
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +10 -0
- package/dist/src/services/fileDiscoveryService.js +31 -17
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/gitService.js +9 -12
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +10 -20
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +5 -0
- package/dist/src/services/loopDetectionService.js +36 -20
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +41 -12
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +34 -2
- package/dist/src/services/shellExecutionService.js +177 -43
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +153 -56
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +10 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +85 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +63 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +12 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +31 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +3 -0
- package/dist/src/telemetry/constants.js +3 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.d.ts +34 -0
- package/dist/src/telemetry/gcp-exporters.js +117 -0
- package/dist/src/telemetry/gcp-exporters.js.map +1 -0
- package/dist/src/telemetry/gcp-exporters.test.d.ts +6 -0
- package/dist/src/telemetry/gcp-exporters.test.js +318 -0
- package/dist/src/telemetry/gcp-exporters.test.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +3 -2
- package/dist/src/telemetry/index.js +3 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +4 -1
- package/dist/src/telemetry/loggers.js +42 -7
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +84 -36
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +3 -1
- package/dist/src/telemetry/metrics.js +32 -3
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +42 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sdk.js +16 -1
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +95 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +47 -3
- package/dist/src/telemetry/types.js +67 -3
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/edit.js +6 -5
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +79 -9
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +5 -1
- package/dist/src/tools/glob.js +24 -17
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +51 -0
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/ls.js +19 -32
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +140 -280
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +1 -1
- package/dist/src/tools/read-many-files.js +17 -49
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +4 -0
- package/dist/src/tools/ripGrep.js +11 -1
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +51 -1
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +12 -2
- package/dist/src/tools/shell.js +20 -27
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +33 -68
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +0 -1
- package/dist/src/tools/smart-edit.js +5 -18
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +18 -9
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +7 -5
- package/dist/src/tools/tools.js +2 -2
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.js +4 -5
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +94 -10
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.js +11 -5
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/editCorrector.d.ts +7 -6
- package/dist/src/utils/editCorrector.js +61 -18
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +30 -79
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.js +31 -44
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +61 -75
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/errorParsing.js +2 -2
- package/dist/src/utils/errorParsing.js.map +1 -1
- package/dist/src/utils/errorParsing.test.js +7 -7
- package/dist/src/utils/errorParsing.test.js.map +1 -1
- package/dist/src/utils/errors.d.ts +6 -0
- package/dist/src/utils/errors.js +10 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +17 -8
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/geminiIgnoreParser.d.ts +18 -0
- package/dist/src/utils/geminiIgnoreParser.js +61 -0
- package/dist/src/utils/geminiIgnoreParser.js.map +1 -0
- package/dist/src/utils/geminiIgnoreParser.test.d.ts +6 -0
- package/dist/src/utils/geminiIgnoreParser.test.js +50 -0
- package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.d.ts +3 -9
- package/dist/src/utils/gitIgnoreParser.js +60 -69
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +18 -53
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +12 -6
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.d.ts +2 -2
- package/dist/src/utils/nextSpeakerChecker.js +8 -2
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +40 -33
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +5 -0
- package/dist/src/utils/shell-utils.js +23 -0
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/terminalSerializer.d.ts +28 -0
- package/dist/src/utils/terminalSerializer.js +432 -0
- package/dist/src/utils/terminalSerializer.js.map +1 -0
- package/dist/src/utils/terminalSerializer.test.d.ts +6 -0
- package/dist/src/utils/terminalSerializer.test.js +176 -0
- package/dist/src/utils/terminalSerializer.test.js.map +1 -0
- package/dist/src/utils/textUtils.d.ts +5 -0
- package/dist/src/utils/textUtils.js +14 -0
- package/dist/src/utils/textUtils.js.map +1 -1
- package/dist/src/utils/textUtils.test.d.ts +6 -0
- package/dist/src/utils/textUtils.test.js +59 -0
- package/dist/src/utils/textUtils.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -1
- package/dist/src/utils/ide-trust.d.ts +0 -10
- package/dist/src/utils/ide-trust.js +0 -14
- package/dist/src/utils/ide-trust.js.map +0 -1
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import type { GeminiClient } from '../core/client.js';
|
|
7
|
+
import type { BaseLlmClient } from '../core/baseLlmClient.js';
|
|
7
8
|
import type { EditToolParams } from '../tools/edit.js';
|
|
8
9
|
/**
|
|
9
10
|
* Defines the structure of the parameters within CorrectedEditResult
|
|
@@ -32,15 +33,15 @@ export interface CorrectedEditResult {
|
|
|
32
33
|
* EditToolParams (as CorrectedEditParams) and the final occurrences count.
|
|
33
34
|
*/
|
|
34
35
|
export declare function ensureCorrectEdit(filePath: string, currentContent: string, originalParams: EditToolParams, // This is the EditToolParams from edit.ts, without \'corrected\'
|
|
35
|
-
|
|
36
|
-
export declare function ensureCorrectFileContent(content: string,
|
|
37
|
-
export declare function correctOldStringMismatch(
|
|
36
|
+
geminiClient: GeminiClient, baseLlmClient: BaseLlmClient, abortSignal: AbortSignal): Promise<CorrectedEditResult>;
|
|
37
|
+
export declare function ensureCorrectFileContent(content: string, baseLlmClient: BaseLlmClient, abortSignal: AbortSignal): Promise<string>;
|
|
38
|
+
export declare function correctOldStringMismatch(baseLlmClient: BaseLlmClient, fileContent: string, problematicSnippet: string, abortSignal: AbortSignal): Promise<string>;
|
|
38
39
|
/**
|
|
39
40
|
* Adjusts the new_string to align with a corrected old_string, maintaining the original intent.
|
|
40
41
|
*/
|
|
41
|
-
export declare function correctNewString(
|
|
42
|
-
export declare function correctNewStringEscaping(
|
|
43
|
-
export declare function correctStringEscaping(potentiallyProblematicString: string,
|
|
42
|
+
export declare function correctNewString(baseLlmClient: BaseLlmClient, originalOldString: string, correctedOldString: string, originalNewString: string, abortSignal: AbortSignal): Promise<string>;
|
|
43
|
+
export declare function correctNewStringEscaping(baseLlmClient: BaseLlmClient, oldString: string, potentiallyProblematicNewString: string, abortSignal: AbortSignal): Promise<string>;
|
|
44
|
+
export declare function correctStringEscaping(potentiallyProblematicString: string, baseLlmClient: BaseLlmClient, abortSignal: AbortSignal): Promise<string>;
|
|
44
45
|
/**
|
|
45
46
|
* Unescapes a string that might have been overly escaped by an LLM.
|
|
46
47
|
*/
|
|
@@ -12,12 +12,23 @@ import { LruCache } from './LruCache.js';
|
|
|
12
12
|
import { DEFAULT_GEMINI_FLASH_LITE_MODEL } from '../config/models.js';
|
|
13
13
|
import { isFunctionResponse, isFunctionCall, } from '../utils/messageInspectors.js';
|
|
14
14
|
import * as fs from 'node:fs';
|
|
15
|
-
|
|
16
|
-
const
|
|
15
|
+
import { promptIdContext } from './promptIdContext.js';
|
|
16
|
+
const EDIT_MODEL = DEFAULT_GEMINI_FLASH_LITE_MODEL;
|
|
17
|
+
const EDIT_CONFIG = {
|
|
17
18
|
thinkingConfig: {
|
|
18
19
|
thinkingBudget: 0,
|
|
19
20
|
},
|
|
20
21
|
};
|
|
22
|
+
const CODE_CORRECTION_SYSTEM_PROMPT = `
|
|
23
|
+
You are an expert code-editing assistant. Your task is to analyze a failed edit attempt and provide a corrected version of the text snippets.
|
|
24
|
+
The correction should be as minimal as possible, staying very close to the original.
|
|
25
|
+
Focus ONLY on fixing issues like whitespace, indentation, line endings, or incorrect escaping.
|
|
26
|
+
Do NOT invent a completely new edit. Your job is to fix the provided parameters to make the edit succeed.
|
|
27
|
+
Return ONLY the corrected snippet in the specified JSON format.
|
|
28
|
+
`.trim();
|
|
29
|
+
function getPromptId() {
|
|
30
|
+
return promptIdContext.getStore() ?? `edit-corrector-${Date.now()}`;
|
|
31
|
+
}
|
|
21
32
|
const MAX_CACHE_SIZE = 50;
|
|
22
33
|
// Cache for ensureCorrectEdit results
|
|
23
34
|
const editCorrectionCache = new LruCache(MAX_CACHE_SIZE);
|
|
@@ -109,7 +120,7 @@ async function findLastEditTimestamp(filePath, client) {
|
|
|
109
120
|
* EditToolParams (as CorrectedEditParams) and the final occurrences count.
|
|
110
121
|
*/
|
|
111
122
|
export async function ensureCorrectEdit(filePath, currentContent, originalParams, // This is the EditToolParams from edit.ts, without \'corrected\'
|
|
112
|
-
|
|
123
|
+
geminiClient, baseLlmClient, abortSignal) {
|
|
113
124
|
const cacheKey = `${currentContent}---${originalParams.old_string}---${originalParams.new_string}`;
|
|
114
125
|
const cachedResult = editCorrectionCache.get(cacheKey);
|
|
115
126
|
if (cachedResult) {
|
|
@@ -123,7 +134,7 @@ client, abortSignal) {
|
|
|
123
134
|
let occurrences = countOccurrences(currentContent, finalOldString);
|
|
124
135
|
if (occurrences === expectedReplacements) {
|
|
125
136
|
if (newStringPotentiallyEscaped) {
|
|
126
|
-
finalNewString = await correctNewStringEscaping(
|
|
137
|
+
finalNewString = await correctNewStringEscaping(baseLlmClient, finalOldString, originalParams.new_string, abortSignal);
|
|
127
138
|
}
|
|
128
139
|
}
|
|
129
140
|
else if (occurrences > expectedReplacements) {
|
|
@@ -161,7 +172,7 @@ client, abortSignal) {
|
|
|
161
172
|
if (occurrences === expectedReplacements) {
|
|
162
173
|
finalOldString = unescapedOldStringAttempt;
|
|
163
174
|
if (newStringPotentiallyEscaped) {
|
|
164
|
-
finalNewString = await correctNewString(
|
|
175
|
+
finalNewString = await correctNewString(baseLlmClient, originalParams.old_string, // original old
|
|
165
176
|
unescapedOldStringAttempt, // corrected old
|
|
166
177
|
originalParams.new_string, // original new (which is potentially escaped)
|
|
167
178
|
abortSignal);
|
|
@@ -172,7 +183,7 @@ client, abortSignal) {
|
|
|
172
183
|
// In order to keep from clobbering edits made outside our system,
|
|
173
184
|
// let's check if there was a more recent edit to the file than what
|
|
174
185
|
// our system has done
|
|
175
|
-
const lastEditedByUsTime = await findLastEditTimestamp(filePath,
|
|
186
|
+
const lastEditedByUsTime = await findLastEditTimestamp(filePath, geminiClient);
|
|
176
187
|
// Add a 1-second buffer to account for timing inaccuracies. If the file
|
|
177
188
|
// was modified more than a second after the last edit tool was run, we
|
|
178
189
|
// can assume it was modified by something else.
|
|
@@ -191,14 +202,14 @@ client, abortSignal) {
|
|
|
191
202
|
}
|
|
192
203
|
}
|
|
193
204
|
}
|
|
194
|
-
const llmCorrectedOldString = await correctOldStringMismatch(
|
|
205
|
+
const llmCorrectedOldString = await correctOldStringMismatch(baseLlmClient, currentContent, unescapedOldStringAttempt, abortSignal);
|
|
195
206
|
const llmOldOccurrences = countOccurrences(currentContent, llmCorrectedOldString);
|
|
196
207
|
if (llmOldOccurrences === expectedReplacements) {
|
|
197
208
|
finalOldString = llmCorrectedOldString;
|
|
198
209
|
occurrences = llmOldOccurrences;
|
|
199
210
|
if (newStringPotentiallyEscaped) {
|
|
200
211
|
const baseNewStringForLLMCorrection = unescapeStringForGeminiBug(originalParams.new_string);
|
|
201
|
-
finalNewString = await correctNewString(
|
|
212
|
+
finalNewString = await correctNewString(baseLlmClient, originalParams.old_string, // original old
|
|
202
213
|
llmCorrectedOldString, // corrected old
|
|
203
214
|
baseNewStringForLLMCorrection, // base new for correction
|
|
204
215
|
abortSignal);
|
|
@@ -239,7 +250,7 @@ client, abortSignal) {
|
|
|
239
250
|
editCorrectionCache.set(cacheKey, result);
|
|
240
251
|
return result;
|
|
241
252
|
}
|
|
242
|
-
export async function ensureCorrectFileContent(content,
|
|
253
|
+
export async function ensureCorrectFileContent(content, baseLlmClient, abortSignal) {
|
|
243
254
|
const cachedResult = fileContentCorrectionCache.get(content);
|
|
244
255
|
if (cachedResult) {
|
|
245
256
|
return cachedResult;
|
|
@@ -249,7 +260,7 @@ export async function ensureCorrectFileContent(content, client, abortSignal) {
|
|
|
249
260
|
fileContentCorrectionCache.set(content, content);
|
|
250
261
|
return content;
|
|
251
262
|
}
|
|
252
|
-
const correctedContent = await correctStringEscaping(content,
|
|
263
|
+
const correctedContent = await correctStringEscaping(content, baseLlmClient, abortSignal);
|
|
253
264
|
fileContentCorrectionCache.set(content, correctedContent);
|
|
254
265
|
return correctedContent;
|
|
255
266
|
}
|
|
@@ -264,7 +275,7 @@ const OLD_STRING_CORRECTION_SCHEMA = {
|
|
|
264
275
|
},
|
|
265
276
|
required: ['corrected_target_snippet'],
|
|
266
277
|
};
|
|
267
|
-
export async function correctOldStringMismatch(
|
|
278
|
+
export async function correctOldStringMismatch(baseLlmClient, fileContent, problematicSnippet, abortSignal) {
|
|
268
279
|
const prompt = `
|
|
269
280
|
Context: A process needs to find an exact literal, unique match for a specific text snippet within a file's content. The provided snippet failed to match exactly. This is most likely because it has been overly escaped.
|
|
270
281
|
|
|
@@ -287,7 +298,15 @@ Return ONLY the corrected target snippet in the specified JSON format with the k
|
|
|
287
298
|
`.trim();
|
|
288
299
|
const contents = [{ role: 'user', parts: [{ text: prompt }] }];
|
|
289
300
|
try {
|
|
290
|
-
const result = await
|
|
301
|
+
const result = await baseLlmClient.generateJson({
|
|
302
|
+
contents,
|
|
303
|
+
schema: OLD_STRING_CORRECTION_SCHEMA,
|
|
304
|
+
abortSignal,
|
|
305
|
+
model: EDIT_MODEL,
|
|
306
|
+
config: EDIT_CONFIG,
|
|
307
|
+
systemInstruction: CODE_CORRECTION_SYSTEM_PROMPT,
|
|
308
|
+
promptId: getPromptId(),
|
|
309
|
+
});
|
|
291
310
|
if (result &&
|
|
292
311
|
typeof result['corrected_target_snippet'] === 'string' &&
|
|
293
312
|
result['corrected_target_snippet'].length > 0) {
|
|
@@ -319,7 +338,7 @@ const NEW_STRING_CORRECTION_SCHEMA = {
|
|
|
319
338
|
/**
|
|
320
339
|
* Adjusts the new_string to align with a corrected old_string, maintaining the original intent.
|
|
321
340
|
*/
|
|
322
|
-
export async function correctNewString(
|
|
341
|
+
export async function correctNewString(baseLlmClient, originalOldString, correctedOldString, originalNewString, abortSignal) {
|
|
323
342
|
if (originalOldString === correctedOldString) {
|
|
324
343
|
return originalNewString;
|
|
325
344
|
}
|
|
@@ -351,7 +370,15 @@ Return ONLY the corrected string in the specified JSON format with the key 'corr
|
|
|
351
370
|
`.trim();
|
|
352
371
|
const contents = [{ role: 'user', parts: [{ text: prompt }] }];
|
|
353
372
|
try {
|
|
354
|
-
const result = await
|
|
373
|
+
const result = await baseLlmClient.generateJson({
|
|
374
|
+
contents,
|
|
375
|
+
schema: NEW_STRING_CORRECTION_SCHEMA,
|
|
376
|
+
abortSignal,
|
|
377
|
+
model: EDIT_MODEL,
|
|
378
|
+
config: EDIT_CONFIG,
|
|
379
|
+
systemInstruction: CODE_CORRECTION_SYSTEM_PROMPT,
|
|
380
|
+
promptId: getPromptId(),
|
|
381
|
+
});
|
|
355
382
|
if (result &&
|
|
356
383
|
typeof result['corrected_new_string'] === 'string' &&
|
|
357
384
|
result['corrected_new_string'].length > 0) {
|
|
@@ -379,7 +406,7 @@ const CORRECT_NEW_STRING_ESCAPING_SCHEMA = {
|
|
|
379
406
|
},
|
|
380
407
|
required: ['corrected_new_string_escaping'],
|
|
381
408
|
};
|
|
382
|
-
export async function correctNewStringEscaping(
|
|
409
|
+
export async function correctNewStringEscaping(baseLlmClient, oldString, potentiallyProblematicNewString, abortSignal) {
|
|
383
410
|
const prompt = `
|
|
384
411
|
Context: A text replacement operation is planned. The text to be replaced (old_string) has been correctly identified in the file. However, the replacement text (new_string) might have been improperly escaped by a previous LLM generation (e.g. too many backslashes for newlines like \\n instead of \n, or unnecessarily quotes like \\"Hello\\" instead of "Hello").
|
|
385
412
|
|
|
@@ -402,7 +429,15 @@ Return ONLY the corrected string in the specified JSON format with the key 'corr
|
|
|
402
429
|
`.trim();
|
|
403
430
|
const contents = [{ role: 'user', parts: [{ text: prompt }] }];
|
|
404
431
|
try {
|
|
405
|
-
const result = await
|
|
432
|
+
const result = await baseLlmClient.generateJson({
|
|
433
|
+
contents,
|
|
434
|
+
schema: CORRECT_NEW_STRING_ESCAPING_SCHEMA,
|
|
435
|
+
abortSignal,
|
|
436
|
+
model: EDIT_MODEL,
|
|
437
|
+
config: EDIT_CONFIG,
|
|
438
|
+
systemInstruction: CODE_CORRECTION_SYSTEM_PROMPT,
|
|
439
|
+
promptId: getPromptId(),
|
|
440
|
+
});
|
|
406
441
|
if (result &&
|
|
407
442
|
typeof result['corrected_new_string_escaping'] === 'string' &&
|
|
408
443
|
result['corrected_new_string_escaping'].length > 0) {
|
|
@@ -430,7 +465,7 @@ const CORRECT_STRING_ESCAPING_SCHEMA = {
|
|
|
430
465
|
},
|
|
431
466
|
required: ['corrected_string_escaping'],
|
|
432
467
|
};
|
|
433
|
-
export async function correctStringEscaping(potentiallyProblematicString,
|
|
468
|
+
export async function correctStringEscaping(potentiallyProblematicString, baseLlmClient, abortSignal) {
|
|
434
469
|
const prompt = `
|
|
435
470
|
Context: An LLM has just generated potentially_problematic_string and the text might have been improperly escaped (e.g. too many backslashes for newlines like \\n instead of \n, or unnecessarily quotes like \\"Hello\\" instead of "Hello").
|
|
436
471
|
|
|
@@ -448,7 +483,15 @@ Return ONLY the corrected string in the specified JSON format with the key 'corr
|
|
|
448
483
|
`.trim();
|
|
449
484
|
const contents = [{ role: 'user', parts: [{ text: prompt }] }];
|
|
450
485
|
try {
|
|
451
|
-
const result = await
|
|
486
|
+
const result = await baseLlmClient.generateJson({
|
|
487
|
+
contents,
|
|
488
|
+
schema: CORRECT_STRING_ESCAPING_SCHEMA,
|
|
489
|
+
abortSignal,
|
|
490
|
+
model: EDIT_MODEL,
|
|
491
|
+
config: EDIT_CONFIG,
|
|
492
|
+
systemInstruction: CODE_CORRECTION_SYSTEM_PROMPT,
|
|
493
|
+
promptId: getPromptId(),
|
|
494
|
+
});
|
|
452
495
|
if (result &&
|
|
453
496
|
typeof result['corrected_string_escaping'] === 'string' &&
|
|
454
497
|
result['corrected_string_escaping'].length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editCorrector.js","sourceRoot":"","sources":["../../../src/utils/editCorrector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"editCorrector.js","sourceRoot":"","sources":["../../../src/utils/editCorrector.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,8 @@ vi.mock('fs', () => ({
|
|
|
18
18
|
}));
|
|
19
19
|
vi.mock('../core/client.js', () => ({
|
|
20
20
|
GeminiClient: vi.fn().mockImplementation(function (_config) {
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.sendMessageStream = (...params) => mockSendMessageStream(...params); // Corrected: use mockSendMessageStream
|
|
21
|
+
this.startChat = (...params) => mockStartChat(...params);
|
|
22
|
+
this.sendMessageStream = (...params) => mockSendMessageStream(...params);
|
|
24
23
|
return this;
|
|
25
24
|
}),
|
|
26
25
|
}));
|
|
@@ -111,6 +110,7 @@ describe('editCorrector', () => {
|
|
|
111
110
|
});
|
|
112
111
|
describe('ensureCorrectEdit', () => {
|
|
113
112
|
let mockGeminiClientInstance;
|
|
113
|
+
let mockBaseLlmClientInstance;
|
|
114
114
|
let mockToolRegistry;
|
|
115
115
|
let mockConfigInstance;
|
|
116
116
|
const abortSignal = new AbortController().signal;
|
|
@@ -184,6 +184,9 @@ describe('editCorrector', () => {
|
|
|
184
184
|
mockSendMessageStream = vi.fn();
|
|
185
185
|
mockGeminiClientInstance = new GeminiClient(mockConfigInstance);
|
|
186
186
|
mockGeminiClientInstance.getHistory = vi.fn().mockResolvedValue([]);
|
|
187
|
+
mockBaseLlmClientInstance = {
|
|
188
|
+
generateJson: mockGenerateJson,
|
|
189
|
+
};
|
|
187
190
|
resetEditCorrectorCaches_TEST_ONLY();
|
|
188
191
|
});
|
|
189
192
|
describe('Scenario Group 1: originalParams.old_string matches currentContent directly', () => {
|
|
@@ -197,7 +200,7 @@ describe('editCorrector', () => {
|
|
|
197
200
|
mockResponses.push({
|
|
198
201
|
corrected_new_string_escaping: 'replace with "this"',
|
|
199
202
|
});
|
|
200
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
203
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
201
204
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
202
205
|
expect(result.params.new_string).toBe('replace with "this"');
|
|
203
206
|
expect(result.params.old_string).toBe('find me');
|
|
@@ -210,7 +213,7 @@ describe('editCorrector', () => {
|
|
|
210
213
|
old_string: 'find me',
|
|
211
214
|
new_string: 'replace with this',
|
|
212
215
|
};
|
|
213
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
216
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
214
217
|
expect(mockGenerateJson).toHaveBeenCalledTimes(0);
|
|
215
218
|
expect(result.params.new_string).toBe('replace with this');
|
|
216
219
|
expect(result.params.old_string).toBe('find me');
|
|
@@ -226,7 +229,7 @@ describe('editCorrector', () => {
|
|
|
226
229
|
mockResponses.push({
|
|
227
230
|
corrected_new_string_escaping: 'replace with "this"',
|
|
228
231
|
});
|
|
229
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
232
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
230
233
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
231
234
|
expect(result.params.new_string).toBe('replace with "this"');
|
|
232
235
|
expect(result.params.old_string).toBe('find\\me');
|
|
@@ -239,7 +242,7 @@ describe('editCorrector', () => {
|
|
|
239
242
|
old_string: 'find\\me',
|
|
240
243
|
new_string: 'replace with this',
|
|
241
244
|
};
|
|
242
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
245
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
243
246
|
expect(mockGenerateJson).toHaveBeenCalledTimes(0);
|
|
244
247
|
expect(result.params.new_string).toBe('replace with this');
|
|
245
248
|
expect(result.params.old_string).toBe('find\\me');
|
|
@@ -255,7 +258,7 @@ describe('editCorrector', () => {
|
|
|
255
258
|
new_string: 'replace with \\"this\\"',
|
|
256
259
|
};
|
|
257
260
|
mockResponses.push({ corrected_new_string: 'replace with "this"' });
|
|
258
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
261
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
259
262
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
260
263
|
expect(result.params.new_string).toBe('replace with "this"');
|
|
261
264
|
expect(result.params.old_string).toBe('find "me"');
|
|
@@ -268,7 +271,7 @@ describe('editCorrector', () => {
|
|
|
268
271
|
old_string: 'find \\"me\\"',
|
|
269
272
|
new_string: 'replace with this',
|
|
270
273
|
};
|
|
271
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
274
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
272
275
|
expect(mockGenerateJson).toHaveBeenCalledTimes(0);
|
|
273
276
|
expect(result.params.new_string).toBe('replace with this');
|
|
274
277
|
expect(result.params.old_string).toBe('find "me"');
|
|
@@ -281,7 +284,7 @@ describe('editCorrector', () => {
|
|
|
281
284
|
old_string: 'find \\\\me',
|
|
282
285
|
new_string: 'replace with foobar',
|
|
283
286
|
};
|
|
284
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
287
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
285
288
|
expect(mockGenerateJson).toHaveBeenCalledTimes(0);
|
|
286
289
|
expect(result.params.new_string).toBe('replace with foobar');
|
|
287
290
|
expect(result.params.old_string).toBe('find \\me');
|
|
@@ -298,7 +301,7 @@ describe('editCorrector', () => {
|
|
|
298
301
|
};
|
|
299
302
|
const llmNewString = 'LLM says replace with "that"';
|
|
300
303
|
mockResponses.push({ corrected_new_string_escaping: llmNewString });
|
|
301
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
304
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
302
305
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
303
306
|
expect(result.params.new_string).toBe(llmNewString);
|
|
304
307
|
expect(result.params.old_string).toBe('find me');
|
|
@@ -315,7 +318,7 @@ describe('editCorrector', () => {
|
|
|
315
318
|
const llmNewString = 'LLM says replace with "that"';
|
|
316
319
|
mockResponses.push({ corrected_target_snippet: llmCorrectedOldString });
|
|
317
320
|
mockResponses.push({ corrected_new_string: llmNewString });
|
|
318
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
321
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
319
322
|
expect(mockGenerateJson).toHaveBeenCalledTimes(2);
|
|
320
323
|
expect(result.params.new_string).toBe(llmNewString);
|
|
321
324
|
expect(result.params.old_string).toBe(llmCorrectedOldString);
|
|
@@ -330,7 +333,7 @@ describe('editCorrector', () => {
|
|
|
330
333
|
};
|
|
331
334
|
const llmCorrectedOldString = 'to be corrected';
|
|
332
335
|
mockResponses.push({ corrected_target_snippet: llmCorrectedOldString });
|
|
333
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
336
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
334
337
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
335
338
|
expect(result.params.new_string).toBe('replace with "this"');
|
|
336
339
|
expect(result.params.old_string).toBe(llmCorrectedOldString);
|
|
@@ -347,7 +350,7 @@ describe('editCorrector', () => {
|
|
|
347
350
|
mockResponses.push({
|
|
348
351
|
corrected_new_string_escaping: newStringForLLMAndReturnedByLLM,
|
|
349
352
|
});
|
|
350
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
353
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
351
354
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
352
355
|
expect(result.params.new_string).toBe(newStringForLLMAndReturnedByLLM);
|
|
353
356
|
expect(result.occurrences).toBe(1);
|
|
@@ -362,7 +365,7 @@ describe('editCorrector', () => {
|
|
|
362
365
|
new_string: 'some new string',
|
|
363
366
|
};
|
|
364
367
|
mockResponses.push({ corrected_target_snippet: 'still nonexistent' });
|
|
365
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
368
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
366
369
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
367
370
|
expect(result.params).toEqual(originalParams);
|
|
368
371
|
expect(result.occurrences).toBe(0);
|
|
@@ -374,7 +377,7 @@ describe('editCorrector', () => {
|
|
|
374
377
|
old_string: 'find "me"',
|
|
375
378
|
new_string: 'some new string',
|
|
376
379
|
};
|
|
377
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
380
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
378
381
|
expect(mockGenerateJson).toHaveBeenCalledTimes(0);
|
|
379
382
|
expect(result.params).toEqual(originalParams);
|
|
380
383
|
expect(result.occurrences).toBe(2);
|
|
@@ -391,7 +394,7 @@ describe('editCorrector', () => {
|
|
|
391
394
|
const expectedFinalNewString = 'const y = "new\nval\\"content\\"';
|
|
392
395
|
mockResponses.push({ corrected_target_snippet: currentContent });
|
|
393
396
|
mockResponses.push({ corrected_new_string: expectedFinalNewString });
|
|
394
|
-
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
397
|
+
const result = await ensureCorrectEdit('/test/file.txt', currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
395
398
|
expect(mockGenerateJson).toHaveBeenCalledTimes(2);
|
|
396
399
|
expect(result.params.old_string).toBe(currentContent);
|
|
397
400
|
expect(result.params.new_string).toBe(expectedFinalNewString);
|
|
@@ -433,68 +436,16 @@ describe('editCorrector', () => {
|
|
|
433
436
|
},
|
|
434
437
|
];
|
|
435
438
|
mockGeminiClientInstance.getHistory.mockResolvedValue(history);
|
|
436
|
-
const result = await ensureCorrectEdit(filePath, currentContent, originalParams, mockGeminiClientInstance, abortSignal);
|
|
439
|
+
const result = await ensureCorrectEdit(filePath, currentContent, originalParams, mockGeminiClientInstance, mockBaseLlmClientInstance, abortSignal);
|
|
437
440
|
expect(result.occurrences).toBe(0);
|
|
438
441
|
expect(result.params).toEqual(originalParams);
|
|
439
442
|
});
|
|
440
443
|
});
|
|
441
444
|
});
|
|
442
445
|
describe('ensureCorrectFileContent', () => {
|
|
443
|
-
let
|
|
444
|
-
let mockToolRegistry;
|
|
445
|
-
let mockConfigInstance;
|
|
446
|
+
let mockBaseLlmClientInstance;
|
|
446
447
|
const abortSignal = new AbortController().signal;
|
|
447
448
|
beforeEach(() => {
|
|
448
|
-
mockToolRegistry = new ToolRegistry({});
|
|
449
|
-
const configParams = {
|
|
450
|
-
apiKey: 'test-api-key',
|
|
451
|
-
model: 'test-model',
|
|
452
|
-
sandbox: false,
|
|
453
|
-
targetDir: '/test',
|
|
454
|
-
debugMode: false,
|
|
455
|
-
question: undefined,
|
|
456
|
-
fullContext: false,
|
|
457
|
-
coreTools: undefined,
|
|
458
|
-
toolDiscoveryCommand: undefined,
|
|
459
|
-
toolCallCommand: undefined,
|
|
460
|
-
mcpServerCommand: undefined,
|
|
461
|
-
mcpServers: undefined,
|
|
462
|
-
userAgent: 'test-agent',
|
|
463
|
-
userMemory: '',
|
|
464
|
-
geminiMdFileCount: 0,
|
|
465
|
-
alwaysSkipModificationConfirmation: false,
|
|
466
|
-
};
|
|
467
|
-
mockConfigInstance = {
|
|
468
|
-
...configParams,
|
|
469
|
-
getApiKey: vi.fn(() => configParams.apiKey),
|
|
470
|
-
getModel: vi.fn(() => configParams.model),
|
|
471
|
-
getSandbox: vi.fn(() => configParams.sandbox),
|
|
472
|
-
getTargetDir: vi.fn(() => configParams.targetDir),
|
|
473
|
-
getToolRegistry: vi.fn(() => mockToolRegistry),
|
|
474
|
-
getDebugMode: vi.fn(() => configParams.debugMode),
|
|
475
|
-
getQuestion: vi.fn(() => configParams.question),
|
|
476
|
-
getFullContext: vi.fn(() => configParams.fullContext),
|
|
477
|
-
getCoreTools: vi.fn(() => configParams.coreTools),
|
|
478
|
-
getToolDiscoveryCommand: vi.fn(() => configParams.toolDiscoveryCommand),
|
|
479
|
-
getToolCallCommand: vi.fn(() => configParams.toolCallCommand),
|
|
480
|
-
getMcpServerCommand: vi.fn(() => configParams.mcpServerCommand),
|
|
481
|
-
getMcpServers: vi.fn(() => configParams.mcpServers),
|
|
482
|
-
getUserAgent: vi.fn(() => configParams.userAgent),
|
|
483
|
-
getUserMemory: vi.fn(() => configParams.userMemory),
|
|
484
|
-
setUserMemory: vi.fn((mem) => {
|
|
485
|
-
configParams.userMemory = mem;
|
|
486
|
-
}),
|
|
487
|
-
getGeminiMdFileCount: vi.fn(() => configParams.geminiMdFileCount),
|
|
488
|
-
setGeminiMdFileCount: vi.fn((count) => {
|
|
489
|
-
configParams.geminiMdFileCount = count;
|
|
490
|
-
}),
|
|
491
|
-
getAlwaysSkipModificationConfirmation: vi.fn(() => configParams.alwaysSkipModificationConfirmation),
|
|
492
|
-
setAlwaysSkipModificationConfirmation: vi.fn((skip) => {
|
|
493
|
-
configParams.alwaysSkipModificationConfirmation = skip;
|
|
494
|
-
}),
|
|
495
|
-
getQuotaErrorOccurred: vi.fn().mockReturnValue(false),
|
|
496
|
-
setQuotaErrorOccurred: vi.fn(),
|
|
497
|
-
};
|
|
498
449
|
callCount = 0;
|
|
499
450
|
mockResponses.length = 0;
|
|
500
451
|
mockGenerateJson = vi
|
|
@@ -509,14 +460,14 @@ describe('editCorrector', () => {
|
|
|
509
460
|
return Promise.resolve({});
|
|
510
461
|
return Promise.resolve(response);
|
|
511
462
|
});
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
463
|
+
mockBaseLlmClientInstance = {
|
|
464
|
+
generateJson: mockGenerateJson,
|
|
465
|
+
};
|
|
515
466
|
resetEditCorrectorCaches_TEST_ONLY();
|
|
516
467
|
});
|
|
517
468
|
it('should return content unchanged if no escaping issues detected', async () => {
|
|
518
469
|
const content = 'This is normal content without escaping issues';
|
|
519
|
-
const result = await ensureCorrectFileContent(content,
|
|
470
|
+
const result = await ensureCorrectFileContent(content, mockBaseLlmClientInstance, abortSignal);
|
|
520
471
|
expect(result).toBe(content);
|
|
521
472
|
expect(mockGenerateJson).toHaveBeenCalledTimes(0);
|
|
522
473
|
});
|
|
@@ -526,7 +477,7 @@ describe('editCorrector', () => {
|
|
|
526
477
|
mockResponses.push({
|
|
527
478
|
corrected_string_escaping: correctedContent,
|
|
528
479
|
});
|
|
529
|
-
const result = await ensureCorrectFileContent(content,
|
|
480
|
+
const result = await ensureCorrectFileContent(content, mockBaseLlmClientInstance, abortSignal);
|
|
530
481
|
expect(result).toBe(correctedContent);
|
|
531
482
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
532
483
|
});
|
|
@@ -538,7 +489,7 @@ describe('editCorrector', () => {
|
|
|
538
489
|
mockResponses.push({
|
|
539
490
|
corrected_string_escaping: correctedContent,
|
|
540
491
|
});
|
|
541
|
-
const result = await ensureCorrectFileContent(content,
|
|
492
|
+
const result = await ensureCorrectFileContent(content, mockBaseLlmClientInstance, abortSignal);
|
|
542
493
|
expect(result).toBe(correctedContent);
|
|
543
494
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
544
495
|
});
|
|
@@ -546,7 +497,7 @@ describe('editCorrector', () => {
|
|
|
546
497
|
const content = 'console.log(\\"Hello World\\");';
|
|
547
498
|
// Mock empty response to simulate LLM failure
|
|
548
499
|
mockResponses.push({});
|
|
549
|
-
const result = await ensureCorrectFileContent(content,
|
|
500
|
+
const result = await ensureCorrectFileContent(content, mockBaseLlmClientInstance, abortSignal);
|
|
550
501
|
expect(result).toBe(content);
|
|
551
502
|
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
552
503
|
});
|
|
@@ -556,7 +507,7 @@ describe('editCorrector', () => {
|
|
|
556
507
|
mockResponses.push({
|
|
557
508
|
corrected_string_escaping: correctedContent,
|
|
558
509
|
});
|
|
559
|
-
const result = await ensureCorrectFileContent(content,
|
|
510
|
+
const result = await ensureCorrectFileContent(content, mockBaseLlmClientInstance, abortSignal);
|
|
560
511
|
expect(result).toBe(correctedContent);
|
|
561
512
|
});
|
|
562
513
|
});
|