Path: blob/main/src/vs/workbench/contrib/chat/electron-browser/builtInTools/tools.ts
5263 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 { Disposable } from '../../../../../base/common/lifecycle.js';6import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';7import { IWorkbenchContribution } from '../../../../common/contributions.js';8import { ChatExternalPathConfirmationContribution } from '../../common/tools/builtinTools/chatExternalPathConfirmation.js';9import { ChatUrlFetchingConfirmationContribution } from '../../common/tools/builtinTools/chatUrlFetchingConfirmation.js';10import { ILanguageModelToolsConfirmationService } from '../../common/tools/languageModelToolsConfirmationService.js';11import { ILanguageModelToolsService } from '../../common/tools/languageModelToolsService.js';12import { InternalFetchWebPageToolId } from '../../common/tools/builtinTools/tools.js';13import { FetchWebPageTool, FetchWebPageToolData, IFetchWebPageToolParams } from './fetchPageTool.js';1415export class NativeBuiltinToolsContribution extends Disposable implements IWorkbenchContribution {1617static readonly ID = 'chat.nativeBuiltinTools';1819constructor(20@ILanguageModelToolsService toolsService: ILanguageModelToolsService,21@IInstantiationService instantiationService: IInstantiationService,22@ILanguageModelToolsConfirmationService confirmationService: ILanguageModelToolsConfirmationService,23) {24super();2526const editTool = instantiationService.createInstance(FetchWebPageTool);27this._register(toolsService.registerTool(FetchWebPageToolData, editTool));2829this._register(confirmationService.registerConfirmationContribution(30InternalFetchWebPageToolId,31instantiationService.createInstance(32ChatUrlFetchingConfirmationContribution,33params => (params as IFetchWebPageToolParams).urls34)35));3637// Register external path confirmation contribution for read_file and list_dir38// They share the same allowlist so approving a folder for reading files also allows listing that directory39const externalPathConfirmation = new ChatExternalPathConfirmationContribution(40(ref) => {41const params = ref.parameters as { filePath?: string; path?: string };42// read_file uses filePath (it's a file), list_dir uses path (it's a directory)43if (params?.filePath) {44return { path: params.filePath, isDirectory: false };45}46if (params?.path) {47return { path: params.path, isDirectory: true };48}49return undefined;50}51);5253this._register(confirmationService.registerConfirmationContribution(54'copilot_readFile',55externalPathConfirmation56));5758this._register(confirmationService.registerConfirmationContribution(59'copilot_listDirectory',60externalPathConfirmation61));62}63}646566