summaryrefslogtreecommitdiff
path: root/packages/core/src/tools/write-file.ts
diff options
context:
space:
mode:
authorchristine betts <[email protected]>2025-08-06 17:36:05 +0000
committerGitHub <[email protected]>2025-08-06 17:36:05 +0000
commitfde9849d48e3b92377aca2eecfd390ebce288692 (patch)
tree90c09c3dfce161ed6adb1d71c33fb432c1708614 /packages/core/src/tools/write-file.ts
parent487818df276dc66827ce0f469f84bcae56a70801 (diff)
[ide-mode] Add support for in-IDE diff handling in the CLI (#5603)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Diffstat (limited to 'packages/core/src/tools/write-file.ts')
-rw-r--r--packages/core/src/tools/write-file.ts18
1 files changed, 18 insertions, 0 deletions
diff --git a/packages/core/src/tools/write-file.ts b/packages/core/src/tools/write-file.ts
index 1cb1a917..32ecc068 100644
--- a/packages/core/src/tools/write-file.ts
+++ b/packages/core/src/tools/write-file.ts
@@ -32,6 +32,7 @@ import {
recordFileOperationMetric,
FileOperation,
} from '../telemetry/metrics.js';
+import { IDEConnectionStatus } from '../ide/ide-client.js';
/**
* Parameters for the WriteFile tool
@@ -184,10 +185,19 @@ export class WriteFileTool
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, correctedContent)
+ : undefined;
+
const confirmationDetails: ToolEditConfirmationDetails = {
type: 'edit',
title: `Confirm Write: ${shortenPath(relativePath)}`,
fileName,
+ filePath: params.file_path,
fileDiff,
originalContent,
newContent: correctedContent,
@@ -195,7 +205,15 @@ export class WriteFileTool
if (outcome === ToolConfirmationOutcome.ProceedAlways) {
this.config.setApprovalMode(ApprovalMode.AUTO_EDIT);
}
+
+ if (ideConfirmation) {
+ const result = await ideConfirmation;
+ if (result.status === 'accepted' && result.content) {
+ params.content = result.content;
+ }
+ }
},
+ ideConfirmation,
};
return confirmationDetails;
}