From 2e6b2792b966bbb3384d8fa84a3673dee0caba3f Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Mon, 24 Feb 2025 12:19:12 -0800 Subject: [PATCH] Move edit_file tool to extension (#241657) Core contributes a tool which is the real implementation of file editing, but the extension gets to control the tool result --- src/vs/platform/extensions/common/extensionsApiProposals.ts | 2 +- src/vs/workbench/api/common/extHostLanguageModelTools.ts | 6 +++--- src/vs/workbench/contrib/chat/common/tools/editFileTool.ts | 6 +++--- src/vscode-dts/vscode.proposed.chatParticipantPrivate.d.ts | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/vs/platform/extensions/common/extensionsApiProposals.ts b/src/vs/platform/extensions/common/extensionsApiProposals.ts index 8273d3c17d442..6d62272e988c8 100644 --- a/src/vs/platform/extensions/common/extensionsApiProposals.ts +++ b/src/vs/platform/extensions/common/extensionsApiProposals.ts @@ -33,7 +33,7 @@ const _allApiProposals = { }, chatParticipantPrivate: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.chatParticipantPrivate.d.ts', - version: 3 + version: 4 }, chatProvider: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.chatProvider.d.ts', diff --git a/src/vs/workbench/api/common/extHostLanguageModelTools.ts b/src/vs/workbench/api/common/extHostLanguageModelTools.ts index acd7c106ec3c8..3cf4bc4b67234 100644 --- a/src/vs/workbench/api/common/extHostLanguageModelTools.ts +++ b/src/vs/workbench/api/common/extHostLanguageModelTools.ts @@ -16,7 +16,7 @@ import { checkProposedApiEnabled, isProposedApiEnabled } from '../../services/ex import { ExtHostLanguageModelToolsShape, IMainContext, IToolDataDto, MainContext, MainThreadLanguageModelToolsShape } from './extHost.protocol.js'; import * as typeConvert from './extHostTypeConverters.js'; import { IToolInputProcessor } from '../../contrib/chat/common/tools/tools.js'; -import { EditToolData, EditToolId, EditToolInputProcessor } from '../../contrib/chat/common/tools/editFileTool.js'; +import { EditToolData, InternalEditToolId, EditToolInputProcessor, ExtensionEditToolId } from '../../contrib/chat/common/tools/editFileTool.js'; import { Dto } from '../../services/extensions/common/proxyIdentifier.js'; export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape { @@ -62,7 +62,7 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape throw new Error(`Invalid tool invocation token`); } - if (toolId === EditToolId && !isProposedApiEnabled(extension, 'chatParticipantPrivate')) { + if ((toolId === InternalEditToolId || toolId === ExtensionEditToolId) && !isProposedApiEnabled(extension, 'chatParticipantPrivate')) { throw new Error(`Invalid tool: ${toolId}`); } @@ -93,7 +93,7 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape return Array.from(this._allTools.values()) .map(tool => typeConvert.LanguageModelToolDescription.to(tool)) .filter(tool => { - if (tool.name === EditToolId) { + if (tool.name === InternalEditToolId || tool.name === ExtensionEditToolId) { return isProposedApiEnabled(extension, 'chatParticipantPrivate'); } diff --git a/src/vs/workbench/contrib/chat/common/tools/editFileTool.ts b/src/vs/workbench/contrib/chat/common/tools/editFileTool.ts index 655ee5a35faeb..27b3a2b81208e 100644 --- a/src/vs/workbench/contrib/chat/common/tools/editFileTool.ts +++ b/src/vs/workbench/contrib/chat/common/tools/editFileTool.ts @@ -41,10 +41,10 @@ class Person { } `; -export const EditToolId = 'vscode_editFile'; +export const ExtensionEditToolId = 'vscode_editFile'; +export const InternalEditToolId = 'vscode_editFile_internal'; export const EditToolData: IToolData = { - id: EditToolId, - tags: ['vscode_editing'], + id: InternalEditToolId, displayName: localize('chat.tools.editFile', "Edit File"), modelDescription: `Edit a file in the workspace. Use this tool once per file that needs to be modified, even if there are multiple changes for a file. Generate the "explanation" property first. ${codeInstructions}`, inputSchema: { diff --git a/src/vscode-dts/vscode.proposed.chatParticipantPrivate.d.ts b/src/vscode-dts/vscode.proposed.chatParticipantPrivate.d.ts index 87da8184e3145..01dd8aa49bdfa 100644 --- a/src/vscode-dts/vscode.proposed.chatParticipantPrivate.d.ts +++ b/src/vscode-dts/vscode.proposed.chatParticipantPrivate.d.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// version: 3 +// version: 4 declare module 'vscode' {