Path: blob/main/extensions/copilot/src/extension/intents/node/editCodeIntent2.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 type * as vscode from 'vscode';6import { ChatLocation } from '../../../platform/chat/common/commonTypes';7import { IConfigurationService } from '../../../platform/configuration/common/configurationService';8import { modelSupportsMultiReplaceString, modelSupportsReplaceString } from '../../../platform/endpoint/common/chatModelCapabilities';9import { IEndpointProvider } from '../../../platform/endpoint/common/endpointProvider';10import { IAutomodeService } from '../../../platform/endpoint/node/automodeService';11import { IEnvService } from '../../../platform/env/common/envService';12import { ILogService } from '../../../platform/log/common/logService';13import { IEditLogService } from '../../../platform/multiFileEdit/common/editLogService';14import { IChatEndpoint } from '../../../platform/networking/common/networking';15import { requestHasNotebookRefs } from '../../../platform/notebook/common/helpers';16import { INotebookService } from '../../../platform/notebook/common/notebookService';17import { IOTelService } from '../../../platform/otel/common/otelService';18import { ISessionTranscriptService } from '../../../platform/chat/common/sessionTranscriptService';19import { IPromptPathRepresentationService } from '../../../platform/prompts/common/promptPathRepresentationService';20import { IExperimentationService } from '../../../platform/telemetry/common/nullExperimentationService';21import { ITelemetryService } from '../../../platform/telemetry/common/telemetry';22import { IWorkspaceService } from '../../../platform/workspace/common/workspaceService';23import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';24import { ICommandService } from '../../commands/node/commandService';25import { IIntent, IntentLinkificationOptions } from '../../prompt/node/intents';26import { ICodeMapperService } from '../../prompts/node/codeMapper/codeMapperService';27import { EditCodePrompt2 } from '../../prompts/node/panel/editCodePrompt2';28import { NotebookInlinePrompt } from '../../prompts/node/panel/notebookInlinePrompt';29import { ToolName } from '../../tools/common/toolNames';30import { IToolsService } from '../../tools/common/toolsService';31import { AgentIntentInvocation } from './agentIntent';32import { EditCodeIntentOptions } from './editCodeIntent';3334const getTools = (instaService: IInstantiationService, request: vscode.ChatRequest): Promise<vscode.LanguageModelToolInformation[]> =>35instaService.invokeFunction(async accessor => {36const toolsService = accessor.get<IToolsService>(IToolsService);37const endpointProvider = accessor.get<IEndpointProvider>(IEndpointProvider);38const notebookService = accessor.get<INotebookService>(INotebookService);39const model = await endpointProvider.getChatEndpoint(request);40const lookForTools = new Set<string>([ToolName.EditFile]);414243if (requestHasNotebookRefs(request, notebookService, { checkPromptAsWell: true })) {44lookForTools.add(ToolName.CreateNewJupyterNotebook);45}4647if (modelSupportsReplaceString(model)) {48lookForTools.add(ToolName.ReplaceString);49if (modelSupportsMultiReplaceString(model)) {50lookForTools.add(ToolName.MultiReplaceString);51}52}53lookForTools.add(ToolName.EditNotebook);54if (requestHasNotebookRefs(request, notebookService, { checkPromptAsWell: true })) {55lookForTools.add(ToolName.GetNotebookSummary);56lookForTools.add(ToolName.RunNotebookCell);57}5859return toolsService.getEnabledTools(request, model, tool => lookForTools.has(tool.name));60});6162export class EditCode2IntentInvocation extends AgentIntentInvocation {6364public override get linkification(): IntentLinkificationOptions {65return { disable: false };66}6768protected override prompt: typeof EditCodePrompt2 | typeof NotebookInlinePrompt = EditCodePrompt2;6970constructor(71intent: IIntent,72location: ChatLocation,73endpoint: IChatEndpoint,74request: vscode.ChatRequest,75intentOptions: EditCodeIntentOptions,76@IInstantiationService instantiationService: IInstantiationService,77@ICodeMapperService codeMapperService: ICodeMapperService,78@IEnvService envService: IEnvService,79@IPromptPathRepresentationService promptPathRepresentationService: IPromptPathRepresentationService,80@IEndpointProvider endpointProvider: IEndpointProvider,81@IWorkspaceService workspaceService: IWorkspaceService,82@IToolsService toolsService: IToolsService,83@IConfigurationService configurationService: IConfigurationService,84@IEditLogService editLogService: IEditLogService,85@ICommandService commandService: ICommandService,86@ITelemetryService telemetryService: ITelemetryService,87@INotebookService notebookService: INotebookService,88@ILogService logService: ILogService,89@IExperimentationService expService: IExperimentationService,90@IAutomodeService automodeService: IAutomodeService,91@IOTelService otelService: IOTelService,92@ISessionTranscriptService sessionTranscriptService: ISessionTranscriptService,93) {94super(intent, location, endpoint, request, intentOptions, instantiationService, codeMapperService, envService, promptPathRepresentationService, endpointProvider, workspaceService, toolsService, configurationService, editLogService, commandService, telemetryService, notebookService, logService, expService, automodeService, otelService, sessionTranscriptService);95}9697public override async getAvailableTools(): Promise<vscode.LanguageModelToolInformation[]> {98return getTools(this.instantiationService, this.request);99}100}101102103