diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts index a9e08c350c5..0fd03576d08 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts @@ -39,6 +39,7 @@ import { getEditingSessionContext } from '../chatEditing/chatEditingActions.js'; import { ctxHasEditorModification, ctxHasRequestInProgress, ctxIsGlobalEditingSession } from '../chatEditing/chatEditingEditorContextKeys.js'; import { ACTION_ID_NEW_CHAT, CHAT_CATEGORY, clearChatSessionPreservingType, handleCurrentEditingSession, handleModeSwitch } from './chatActions.js'; import { CreateRemoteAgentJobAction } from './chatContinueInAction.js'; +import { CTX_HOVER_MODE } from '../../../inlineChat/common/inlineChat.js'; export interface IVoiceChatExecuteActionContext { readonly disableTimeout?: boolean; @@ -859,6 +860,7 @@ export class CancelAction extends Action2 { when: ContextKeyExpr.and( ctxIsGlobalEditingSession.negate(), ctxHasRequestInProgress, + CTX_HOVER_MODE.negate(), ), order: 4, group: 'navigation', diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts index def506dfd1a..2220f7d1474 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts @@ -29,6 +29,7 @@ registerEditorContribution(InlineChatController.ID, InlineChatController, Editor registerAction2(InlineChatActions.KeepSessionAction2); registerAction2(InlineChatActions.UndoSessionAction2); registerAction2(InlineChatActions.UndoAndCloseSessionAction2); +registerAction2(InlineChatActions.CancelSessionAction); // --- browser diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts index 882525d9900..3007bac0d91 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts @@ -386,6 +386,31 @@ export class UndoAndCloseSessionAction2 extends KeepOrUndoSessionAction { } } +export class CancelSessionAction extends KeepOrUndoSessionAction { + + constructor() { + super(false, { + id: 'inlineChat2.cancel', + title: localize2('cancel', "Cancel"), + precondition: ContextKeyExpr.and(CTX_INLINE_CHAT_VISIBLE, ctxHasRequestInProgress), + keybinding: [{ + when: ContextKeyExpr.or( + EditorContextKeys.focus, + ChatContextKeys.inputHasFocus, + ), + weight: KeybindingWeight.WorkbenchContrib + 1, + primary: KeyCode.Escape, + }], + menu: [{ + id: MenuId.ChatEditorInlineExecute, + group: 'navigation', + order: 100, + when: ctxHasRequestInProgress + }] + }); + } +} + export class SubmitInlineChatInputAction extends AbstractInlineChatAction { constructor() { diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts index 8fd374d6ac3..8cbb1326de4 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts @@ -151,6 +151,7 @@ export class InlineChatController implements IEditorContribution { @ILanguageModelsService private readonly _languageModelService: ILanguageModelsService, @ILogService private readonly _logService: ILogService, @IChatEditingService private readonly _chatEditingService: IChatEditingService, + @IChatService private readonly _chatService: IChatService, ) { const editorObs = observableCodeEditor(_editor); @@ -599,6 +600,7 @@ export class InlineChatController implements IEditorContribution { if (!session) { return; } + this._chatService.cancelCurrentRequestForSession(session.chatModel.sessionResource); await session.editingSession.reject(); session.dispose(); } diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.ts index 2a997e1555f..486d0bc4442 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.ts @@ -36,7 +36,6 @@ import { IConfigurationService } from '../../../../platform/configuration/common import { getSimpleEditorOptions } from '../../codeEditor/browser/simpleEditorOptions.js'; import { PlaceholderTextContribution } from '../../../../editor/contrib/placeholderText/browser/placeholderTextContribution.js'; import { IInlineChatSession2 } from './inlineChatSessionService.js'; -import { CancelChatActionId } from '../../chat/browser/actions/chatExecuteActions.js'; import { assertType } from '../../../../base/common/types.js'; /** @@ -476,7 +475,7 @@ export class InlineChatSessionOverlayWidget extends Disposable { }, menuOptions: { renderShortTitle: true }, actionViewItemProvider: (action, options) => { - const primaryActions = [CancelChatActionId, 'inlineChat2.keep']; + const primaryActions = ['inlineChat2.cancel', 'inlineChat2.keep']; const labeledActions = primaryActions.concat(['inlineChat2.undo']); if (!labeledActions.includes(action.id)) {