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