diff --git a/packages/plugin-ext/src/plugin/plugin-context.ts b/packages/plugin-ext/src/plugin/plugin-context.ts index a72d2af839842..fa19ce1e12d17 100644 --- a/packages/plugin-ext/src/plugin/plugin-context.ts +++ b/packages/plugin-ext/src/plugin/plugin-context.ts @@ -1218,9 +1218,17 @@ export function createAPIFactory( } }; + const chat: typeof theia.chat = { + /** @stubbed MappedEditsProvider */ + registerMappedEditsProvider(documentSelector: theia.DocumentSelector, provider: theia.MappedEditsProvider): Disposable { + return Disposable.NULL; + } + }; + return { version: require('../../package.json').version, authentication, + chat, commands, comments, window, diff --git a/packages/plugin/src/theia.d.ts b/packages/plugin/src/theia.d.ts index 3ffce743ddb84..17468c2b7b1bd 100644 --- a/packages/plugin/src/theia.d.ts +++ b/packages/plugin/src/theia.d.ts @@ -30,6 +30,7 @@ import './theia.proposed.dropMetadata'; import './theia.proposed.editSessionIdentityProvider'; import './theia.proposed.extensionsAny'; import './theia.proposed.externalUriOpener'; +import './theia.proposed.mappedEditsProvider'; import './theia.proposed.notebookCellExecutionState'; import './theia.proposed.notebookKernelSource'; import './theia.proposed.notebookMessaging'; diff --git a/packages/plugin/src/theia.proposed.mappedEditsProvider.d.ts b/packages/plugin/src/theia.proposed.mappedEditsProvider.d.ts new file mode 100644 index 0000000000000..cedc13e167e6b --- /dev/null +++ b/packages/plugin/src/theia.proposed.mappedEditsProvider.d.ts @@ -0,0 +1,59 @@ +// ***************************************************************************** +// Copyright (C) 2024 STMicroelectronics and others. +// +// This program and the accompanying materials are made available under the +// terms of the Eclipse Public License v. 2.0 which is available at +// http://www.eclipse.org/legal/epl-2.0. +// +// This Source Code may also be made available under the following Secondary +// Licenses when the conditions for such availability set forth in the Eclipse +// Public License v. 2.0 are satisfied: GNU General Public License, version 2 +// with the GNU Classpath Exception which is available at +// https://www.gnu.org/software/classpath/license.html. +// +// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 +// ***************************************************************************** + +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export module '@theia/plugin' { + + export interface DocumentContextItem { + readonly uri: Uri; + readonly version: number; + readonly ranges: Range[]; + } + + export interface MappedEditsContext { + documents: DocumentContextItem[][]; + } + + /** + * Interface for providing mapped edits for a given document. + */ + export interface MappedEditsProvider { + /** + * Provide mapped edits for a given document. + * @param document The document to provide mapped edits for. + * @param codeBlocks Code blocks that come from an LLM's reply. + * "Insert at cursor" in the panel chat only sends one edit that the user clicks on, but inline chat can send multiple blocks + * and let the lang server decide what to do with them. + * @param context The context for providing mapped edits. + * @param token A cancellation token. + * @returns A provider result of text edits. + */ + provideMappedEdits( + document: TextDocument, + codeBlocks: string[], + context: MappedEditsContext, + token: CancellationToken + ): ProviderResult; + } + + export namespace chat { + export function registerMappedEditsProvider(documentSelector: DocumentSelector, provider: MappedEditsProvider): Disposable; + } +}