Path: blob/main/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.ts
4780 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js';6import { ServicesAccessor } from '../../../../../editor/browser/editorExtensions.js';7import { localize2 } from '../../../../../nls.js';8import { Action2, registerAction2 } from '../../../../../platform/actions/common/actions.js';9import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js';10import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';11import { ChatContextKeys } from '../../common/actions/chatContextKeys.js';12import { ElicitationState } from '../../common/chatService/chatService.js';13import { isResponseVM } from '../../common/model/chatViewModel.js';14import { IChatWidgetService } from '../chat.js';15import { CHAT_CATEGORY } from './chatActions.js';1617export const AcceptElicitationRequestActionId = 'workbench.action.chat.acceptElicitation';1819class AcceptElicitationRequestAction extends Action2 {20constructor() {21super({22id: AcceptElicitationRequestActionId,23title: localize2('chat.acceptElicitation', "Accept Request"),24f1: false,25category: CHAT_CATEGORY,26keybinding: {27when: ContextKeyExpr.and(ChatContextKeys.inChatSession, ChatContextKeys.Editing.hasElicitationRequest),28primary: KeyMod.CtrlCmd | KeyCode.Enter,29weight: KeybindingWeight.WorkbenchContrib + 1,30},31});32}3334override async run(accessor: ServicesAccessor): Promise<void> {35const chatWidgetService = accessor.get(IChatWidgetService);36const widget = chatWidgetService.lastFocusedWidget;37if (!widget) {38return;39}4041const items = widget.viewModel?.getItems();42if (!items?.length) {43return;44}4546for (let i = items.length - 1; i >= 0; i--) {47const item = items[i];48if (!isResponseVM(item)) {49continue;50}5152for (const content of item.response.value) {53if (content.kind === 'elicitation2' && content.state.get() === ElicitationState.Pending) {54await content.accept(true);55widget.focusInput();56return;57}58}59}60}61}6263export function registerChatElicitationActions(): void {64registerAction2(AcceptElicitationRequestAction);65}666768