summaryrefslogtreecommitdiff
path: root/packages/core/src/tools/edit.ts
diff options
context:
space:
mode:
authorchristine betts <[email protected]>2025-08-06 20:55:29 +0000
committerGitHub <[email protected]>2025-08-06 20:55:29 +0000
commitb55467c1dd3515b35607a2abfbdefaa79bf6a48f (patch)
treeae6597f6572557325192e873bd1daf66a7841340 /packages/core/src/tools/edit.ts
parent43510ed212ea29b7bd752277de525f7821551b22 (diff)
[ide-mode] Support rendering in-IDE diffs using the edit tool (#5618)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Diffstat (limited to 'packages/core/src/tools/edit.ts')
-rw-r--r--packages/core/src/tools/edit.ts20
1 files changed, 20 insertions, 0 deletions
diff --git a/packages/core/src/tools/edit.ts b/packages/core/src/tools/edit.ts
index 853ad4c1..43505182 100644
--- a/packages/core/src/tools/edit.ts
+++ b/packages/core/src/tools/edit.ts
@@ -27,6 +27,7 @@ import { ensureCorrectEdit } from '../utils/editCorrector.js';
import { DEFAULT_DIFF_OPTIONS } from './diffOptions.js';
import { ReadFileTool } from './read-file.js';
import { ModifiableDeclarativeTool, ModifyContext } from './modifiable-tool.js';
+import { IDEConnectionStatus } from '../ide/ide-client.js';
/**
* Parameters for the Edit tool
@@ -328,6 +329,14 @@ Expectation for required parameters:
'Proposed',
DEFAULT_DIFF_OPTIONS,
);
+ const ideClient = this.config.getIdeClient();
+ const ideConfirmation =
+ this.config.getIdeModeFeature() &&
+ this.config.getIdeMode() &&
+ ideClient?.getConnectionStatus().status === IDEConnectionStatus.Connected
+ ? ideClient.openDiff(params.file_path, editData.newContent)
+ : undefined;
+
const confirmationDetails: ToolEditConfirmationDetails = {
type: 'edit',
title: `Confirm Edit: ${shortenPath(makeRelative(params.file_path, this.config.getTargetDir()))}`,
@@ -340,7 +349,18 @@ Expectation for required parameters:
if (outcome === ToolConfirmationOutcome.ProceedAlways) {
this.config.setApprovalMode(ApprovalMode.AUTO_EDIT);
}
+
+ if (ideConfirmation) {
+ const result = await ideConfirmation;
+ if (result.status === 'accepted' && result.content) {
+ // TODO(chrstn): See https://github.com/google-gemini/gemini-cli/pull/5618#discussion_r2255413084
+ // for info on a possible race condition where the file is modified on disk while being edited.
+ params.old_string = editData.currentContent ?? '';
+ params.new_string = result.content;
+ }
+ }
},
+ ideConfirmation,
};
return confirmationDetails;
}