summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx')
-rw-r--r--packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx41
1 files changed, 34 insertions, 7 deletions
diff --git a/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx b/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx
index 197a922c..8b7f93d1 100644
--- a/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx
+++ b/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx
@@ -33,6 +33,7 @@ export const ToolConfirmationMessage: React.FC<
ToolConfirmationMessageProps
> = ({
confirmationDetails,
+ config,
isFocused = true,
availableTerminalHeight,
terminalWidth,
@@ -40,14 +41,29 @@ export const ToolConfirmationMessage: React.FC<
const { onConfirm } = confirmationDetails;
const childWidth = terminalWidth - 2; // 2 for padding
+ const handleConfirm = async (outcome: ToolConfirmationOutcome) => {
+ if (confirmationDetails.type === 'edit') {
+ const ideClient = config?.getIdeClient();
+ if (config?.getIdeMode() && config?.getIdeModeFeature()) {
+ const cliOutcome =
+ outcome === ToolConfirmationOutcome.Cancel ? 'rejected' : 'accepted';
+ await ideClient?.resolveDiffFromCli(
+ confirmationDetails.filePath,
+ cliOutcome,
+ );
+ }
+ }
+ onConfirm(outcome);
+ };
+
useInput((_, key) => {
if (!isFocused) return;
if (key.escape) {
- onConfirm(ToolConfirmationOutcome.Cancel);
+ handleConfirm(ToolConfirmationOutcome.Cancel);
}
});
- const handleSelect = (item: ToolConfirmationOutcome) => onConfirm(item);
+ const handleSelect = (item: ToolConfirmationOutcome) => handleConfirm(item);
let bodyContent: React.ReactNode | null = null; // Removed contextDisplay here
let question: string;
@@ -85,6 +101,7 @@ export const ToolConfirmationMessage: React.FC<
HEIGHT_OPTIONS;
return Math.max(availableTerminalHeight - surroundingElementsHeight, 1);
}
+
if (confirmationDetails.type === 'edit') {
if (confirmationDetails.isModifying) {
return (
@@ -114,15 +131,25 @@ export const ToolConfirmationMessage: React.FC<
label: 'Yes, allow always',
value: ToolConfirmationOutcome.ProceedAlways,
},
- {
+ );
+ if (config?.getIdeMode() && config?.getIdeModeFeature()) {
+ options.push({
+ label: 'No',
+ value: ToolConfirmationOutcome.Cancel,
+ });
+ } else {
+ // TODO(chrstnb): support edit tool in IDE mode.
+
+ options.push({
label: 'Modify with external editor',
value: ToolConfirmationOutcome.ModifyWithEditor,
- },
- {
+ });
+ options.push({
label: 'No, suggest changes (esc)',
value: ToolConfirmationOutcome.Cancel,
- },
- );
+ });
+ }
+
bodyContent = (
<DiffRenderer
diffContent={confirmationDetails.fileDiff}