fix(cli): restore 'Modify with editor' option in external terminals (#17621)

This commit is contained in:
Abhi
2026-01-26 21:24:25 -05:00
committed by GitHub
parent ad0bece6d6
commit 68649c8dec
4 changed files with 162 additions and 10 deletions
@@ -30,6 +30,7 @@ interface ToolActionsContextValue {
payload?: ToolConfirmationPayload,
) => Promise<void>;
cancel: (callId: string) => Promise<void>;
isDiffingEnabled: boolean;
}
const ToolActionsContext = createContext<ToolActionsContextValue | null>(null);
@@ -55,12 +56,28 @@ export const ToolActionsProvider: React.FC<ToolActionsProviderProps> = (
// Hoist IdeClient logic here to keep UI pure
const [ideClient, setIdeClient] = useState<IdeClient | null>(null);
const [isDiffingEnabled, setIsDiffingEnabled] = useState(false);
useEffect(() => {
let isMounted = true;
if (config.getIdeMode()) {
IdeClient.getInstance()
.then((client) => {
if (isMounted) setIdeClient(client);
if (!isMounted) return;
setIdeClient(client);
setIsDiffingEnabled(client.isDiffingEnabled());
const handleStatusChange = () => {
if (isMounted) {
setIsDiffingEnabled(client.isDiffingEnabled());
}
};
client.addStatusChangeListener(handleStatusChange);
// Return a cleanup function for the listener
return () => {
client.removeStatusChangeListener(handleStatusChange);
};
})
.catch((error) => {
debugLogger.error('Failed to get IdeClient instance:', error);
@@ -88,12 +105,12 @@ export const ToolActionsProvider: React.FC<ToolActionsProviderProps> = (
// 1. Handle Side Effects (IDE Diff)
if (
details?.type === 'edit' &&
ideClient?.isDiffingEnabled() &&
isDiffingEnabled &&
'filePath' in details // Check for safety
) {
const cliOutcome =
outcome === ToolConfirmationOutcome.Cancel ? 'rejected' : 'accepted';
await ideClient.resolveDiffFromCli(details.filePath, cliOutcome);
await ideClient?.resolveDiffFromCli(details.filePath, cliOutcome);
}
// 2. Dispatch
@@ -125,7 +142,7 @@ export const ToolActionsProvider: React.FC<ToolActionsProviderProps> = (
debugLogger.warn(`ToolActions: No confirmation mechanism for ${callId}`);
},
[config, ideClient, toolCalls],
[config, ideClient, toolCalls, isDiffingEnabled],
);
const cancel = useCallback(
@@ -136,7 +153,7 @@ export const ToolActionsProvider: React.FC<ToolActionsProviderProps> = (
);
return (
<ToolActionsContext.Provider value={{ confirm, cancel }}>
<ToolActionsContext.Provider value={{ confirm, cancel, isDiffingEnabled }}>
{children}
</ToolActionsContext.Provider>
);