Path: blob/main/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.ts
3296 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 { Codicon } from '../../../../../base/common/codicons.js';6import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js';7import { Selection } from '../../../../../editor/common/core/selection.js';8import { localize, localize2 } from '../../../../../nls.js';9import { Action2, MenuId, registerAction2 } from '../../../../../platform/actions/common/actions.js';10import { ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js';11import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';12import { CHAT_CATEGORY } from './chatActions.js';13import { IQuickChatOpenOptions, IQuickChatService } from '../chat.js';14import { ChatContextKeys } from '../../common/chatContextKeys.js';1516export const ASK_QUICK_QUESTION_ACTION_ID = 'workbench.action.quickchat.toggle';17export function registerQuickChatActions() {18registerAction2(QuickChatGlobalAction);19registerAction2(AskQuickChatAction);2021registerAction2(class OpenInChatViewAction extends Action2 {22constructor() {23super({24id: 'workbench.action.quickchat.openInChatView',25title: localize2('chat.openInChatView.label', "Open in Chat View"),26f1: false,27category: CHAT_CATEGORY,28icon: Codicon.chatSparkle,29menu: {30id: MenuId.ChatInputSide,31group: 'navigation',32order: 1033}34});35}3637run(accessor: ServicesAccessor) {38const quickChatService = accessor.get(IQuickChatService);39quickChatService.openInChatView();40}41});4243registerAction2(class CloseQuickChatAction extends Action2 {44constructor() {45super({46id: 'workbench.action.quickchat.close',47title: localize2('chat.closeQuickChat.label', "Close Quick Chat"),48f1: false,49category: CHAT_CATEGORY,50icon: Codicon.close,51menu: {52id: MenuId.ChatInputSide,53group: 'navigation',54order: 2055}56});57}5859run(accessor: ServicesAccessor) {60const quickChatService = accessor.get(IQuickChatService);61quickChatService.close();62}63});6465}6667class QuickChatGlobalAction extends Action2 {68constructor() {69super({70id: ASK_QUICK_QUESTION_ACTION_ID,71title: localize2('quickChat', 'Open Quick Chat'),72precondition: ChatContextKeys.enabled,73icon: Codicon.chatSparkle,74f1: false,75category: CHAT_CATEGORY,76keybinding: {77weight: KeybindingWeight.WorkbenchContrib,78primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.KeyL,79},80menu: {81id: MenuId.ChatTitleBarMenu,82group: 'a_open',83order: 484},85metadata: {86description: localize('toggle.desc', 'Toggle the quick chat'),87args: [{88name: 'args',89schema: {90anyOf: [91{92type: 'object',93required: ['query'],94properties: {95query: {96description: localize('toggle.query', "The query to open the quick chat with"),97type: 'string'98},99isPartialQuery: {100description: localize('toggle.isPartialQuery', "Whether the query is partial; it will wait for more user input"),101type: 'boolean'102}103},104},105{106type: 'string',107description: localize('toggle.query', "The query to open the quick chat with")108}109]110}111}]112},113});114}115116override run(accessor: ServicesAccessor, query?: string | Omit<IQuickChatOpenOptions, 'selection'>): void {117const quickChatService = accessor.get(IQuickChatService);118let options: IQuickChatOpenOptions | undefined;119switch (typeof query) {120case 'string': options = { query }; break;121case 'object': options = query; break;122}123if (options?.query) {124options.selection = new Selection(1, options.query.length + 1, 1, options.query.length + 1);125}126quickChatService.toggle(options);127}128}129130class AskQuickChatAction extends Action2 {131constructor() {132super({133id: `workbench.action.openQuickChat`,134category: CHAT_CATEGORY,135title: localize2('interactiveSession.open', "Open Quick Chat"),136precondition: ChatContextKeys.enabled,137f1: true138});139}140141override run(accessor: ServicesAccessor, query?: string): void {142const quickChatService = accessor.get(IQuickChatService);143quickChatService.toggle(query ? {144query,145selection: new Selection(1, query.length + 1, 1, query.length + 1)146} : undefined);147}148}149150151