diff options
| author | christine betts <[email protected]> | 2025-08-06 20:55:29 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-08-06 20:55:29 +0000 |
| commit | b55467c1dd3515b35607a2abfbdefaa79bf6a48f (patch) | |
| tree | ae6597f6572557325192e873bd1daf66a7841340 /packages/core/src/tools/edit.ts | |
| parent | 43510ed212ea29b7bd752277de525f7821551b22 (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.ts | 20 |
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; } |
