Path: blob/main/extensions/copilot/src/extension/intents/node/terminalExplainIntent.ts
13399 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 * as l10n from '@vscode/l10n';6import type * as vscode from 'vscode';7import { ChatLocation } from '../../../platform/chat/common/commonTypes';8import { IEndpointProvider } from '../../../platform/endpoint/common/endpointProvider';9import { IEnvService } from '../../../platform/env/common/envService';10import { IChatEndpoint } from '../../../platform/networking/common/networking';11import { ITerminalService } from '../../../platform/terminal/common/terminalService';12import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';13import { Intent } from '../../common/constants';14import { IBuildPromptContext } from '../../prompt/common/intents';15import { IIntent, IIntentInvocation, IIntentInvocationContext } from '../../prompt/node/intents';16import { PromptRenderer } from '../../prompts/node/base/promptRenderer';17import { TerminalExplainPrompt } from '../../prompts/node/panel/terminalExplain';181920export class TerminalExplainIntent implements IIntent {21static readonly ID = Intent.TerminalExplain;22static intentName = 'explain';23readonly id = TerminalExplainIntent.ID;24readonly locations = [ChatLocation.Panel, ChatLocation.Terminal];25readonly description = l10n.t('Explain what just happened in the terminal');26readonly commandInfo = {27allowsEmptyArgs: true,28defaultEnablement: true,29sampleRequest: l10n.t('What did the last command do?')30};3132constructor(33@IInstantiationService private readonly instantiationService: IInstantiationService,34@IEndpointProvider private readonly endpointProvider: IEndpointProvider,35) { }3637async invoke(invocationContext: IIntentInvocationContext): Promise<IIntentInvocation> {38const location = invocationContext.location;39const endpoint = await this.endpointProvider.getChatEndpoint(invocationContext.request);40return this.instantiationService.createInstance(TerminalExplainIntentInvocation, this, endpoint, location);41}42}4344class TerminalExplainIntentInvocation implements IIntentInvocation {4546constructor(47readonly intent: TerminalExplainIntent,48readonly endpoint: IChatEndpoint,49readonly location: ChatLocation,50@IInstantiationService private readonly instantiationService: IInstantiationService,51@IEnvService private readonly envService: IEnvService,52@ITerminalService private readonly terminalService: ITerminalService,53) { }5455async buildPrompt(promptContext: IBuildPromptContext, progress: vscode.Progress<vscode.ChatResponseProgressPart | vscode.ChatResponseReferencePart>, token: vscode.CancellationToken) {56const osName = this.envService.OS;57const shellType = this.terminalService.terminalShellType;5859const renderer = PromptRenderer.create(this.instantiationService, this.endpoint, TerminalExplainPrompt, {60promptContext,61osName,62shellType,63endpoint: this.endpoint,64});6566const result = await renderer.render(progress, token);6768return result;69}70}717273