update with api feedback

This commit is contained in:
Connor Peet
2025-04-23 11:09:15 -07:00
parent dd5b6c1235
commit 41cc1e2836
14 changed files with 52 additions and 49 deletions

View File

@@ -6,8 +6,7 @@
import { CancellationToken } from '../../../base/common/cancellation.js';
import { Disposable, DisposableMap } from '../../../base/common/lifecycle.js';
import { revive } from '../../../base/common/marshalling.js';
import { IProgress, IProgressStep } from '../../../platform/progress/common/progress.js';
import { CountTokensCallback, ILanguageModelToolsService, IToolData, IToolInvocation, IToolResult } from '../../contrib/chat/common/languageModelToolsService.js';
import { CountTokensCallback, ILanguageModelToolsService, IToolData, IToolInvocation, IToolProgressStep, IToolResult, ToolProgress } from '../../contrib/chat/common/languageModelToolsService.js';
import { IExtHostContext, extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
import { Dto } from '../../services/extensions/common/proxyIdentifier.js';
import { ExtHostContext, ExtHostLanguageModelToolsShape, MainContext, MainThreadLanguageModelToolsShape } from '../common/extHost.protocol.js';
@@ -19,7 +18,7 @@ export class MainThreadLanguageModelTools extends Disposable implements MainThre
private readonly _tools = this._register(new DisposableMap<string>());
private readonly _runningToolCalls = new Map</* call ID */string, {
countTokens: CountTokensCallback;
progress: IProgress<IProgressStep>;
progress: ToolProgress;
}>();
constructor(
@@ -49,7 +48,7 @@ export class MainThreadLanguageModelTools extends Disposable implements MainThre
};
}
$acceptToolProgress(callId: string, progress: IProgressStep): void {
$acceptToolProgress(callId: string, progress: IToolProgressStep): void {
this._runningToolCalls.get(callId)?.progress.report(progress);
}

View File

@@ -59,7 +59,7 @@ import { IChatContentInlineReference, IChatFollowup, IChatNotebookEdit, IChatPro
import { IChatRequestVariableValue } from '../../contrib/chat/common/chatVariables.js';
import { ChatAgentLocation } from '../../contrib/chat/common/constants.js';
import { IChatMessage, IChatResponseFragment, ILanguageModelChatMetadata, ILanguageModelChatSelector, ILanguageModelsChangeEvent } from '../../contrib/chat/common/languageModels.js';
import { IPreparedToolInvocation, IToolData, IToolInvocation, IToolResult } from '../../contrib/chat/common/languageModelToolsService.js';
import { IPreparedToolInvocation, IToolData, IToolInvocation, IToolProgressStep, IToolResult } from '../../contrib/chat/common/languageModelToolsService.js';
import { DebugConfigurationProviderTriggerKind, IAdapterDescriptor, IConfig, IDebugSessionReplMode, IDebugTestRunReference, IDebugVisualization, IDebugVisualizationContext, IDebugVisualizationTreeItem, MainThreadDebugVisualization } from '../../contrib/debug/common/debug.js';
import { McpCollectionDefinition, McpConnectionState, McpServerDefinition, McpServerLaunch } from '../../contrib/mcp/common/mcpTypes.js';
import * as notebookCommon from '../../contrib/notebook/common/notebookCommon.js';
@@ -1380,7 +1380,7 @@ export type IToolDataDto = Omit<IToolData, 'when'>;
export interface MainThreadLanguageModelToolsShape extends IDisposable {
$getTools(): Promise<Dto<IToolDataDto>[]>;
$acceptToolProgress(callId: string, progress: IProgressStep): void;
$acceptToolProgress(callId: string, progress: IToolProgressStep): void;
$invokeTool(dto: IToolInvocation, token?: CancellationToken): Promise<Dto<IToolResult>>;
$countTokensForInvocation(callId: string, input: string, token: CancellationToken): Promise<number>;
$registerTool(id: string): void;

View File

@@ -138,12 +138,12 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape
};
}
let progress: vscode.Progress<{ message?: string; increment?: number }> | undefined;
let progress: vscode.Progress<{ message?: string | vscode.MarkdownString; increment?: number }> | undefined;
if (isProposedApiEnabled(item.extension, 'toolProgress')) {
progress = {
report: value => {
this._proxy.$acceptToolProgress(dto.callId, {
message: value.message,
message: typeConvert.MarkdownString.fromStrict(value.message),
increment: value.increment,
total: 100,
});
@@ -151,7 +151,8 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape
};
}
const extensionResult = await raceCancellation(Promise.resolve(item.tool.invoke(options, token, progress!)), token);
// todo: 'any' cast because TS can't handle the overloads
const extensionResult = await raceCancellation(Promise.resolve((item.tool.invoke as any)(options, token, progress!)), token);
if (!extensionResult) {
throw new CancellationError();
}

View File

@@ -7,6 +7,7 @@ import { $ } from '../../../../base/browser/dom.js';
import { Dialog } from '../../../../base/browser/ui/dialog/dialog.js';
import { toAction, WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } from '../../../../base/common/actions.js';
import { timeout } from '../../../../base/common/async.js';
import { CancellationToken } from '../../../../base/common/cancellation.js';
import { Codicon } from '../../../../base/common/codicons.js';
import { toErrorMessage } from '../../../../base/common/errorMessage.js';
import { isCancellationError } from '../../../../base/common/errors.js';
@@ -37,7 +38,7 @@ import { ILogService } from '../../../../platform/log/common/log.js';
import { IOpenerService } from '../../../../platform/opener/common/opener.js';
import product from '../../../../platform/product/common/product.js';
import { IProductService } from '../../../../platform/product/common/productService.js';
import { IProgress, IProgressService, IProgressStep, ProgressLocation } from '../../../../platform/progress/common/progress.js';
import { IProgressService, ProgressLocation } from '../../../../platform/progress/common/progress.js';
import { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js';
import { Registry } from '../../../../platform/registry/common/platform.js';
import { ITelemetryService, TelemetryLevel } from '../../../../platform/telemetry/common/telemetry.js';
@@ -52,11 +53,13 @@ import { IHostService } from '../../../services/host/browser/host.js';
import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js';
import { ILifecycleService } from '../../../services/lifecycle/common/lifecycle.js';
import { IViewsService } from '../../../services/views/common/viewsService.js';
import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolResult, ToolProgress } from '../../chat/common/languageModelToolsService.js';
import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
import { IChatAgentImplementation, IChatAgentRequest, IChatAgentResult, IChatAgentService } from '../common/chatAgents.js';
import { ChatContextKeys } from '../common/chatContextKeys.js';
import { ChatEntitlement, ChatEntitlementContext, ChatEntitlementRequests, ChatEntitlementService, IChatEntitlementService } from '../common/chatEntitlementService.js';
import { IChatRequestModel, ChatRequestModel, ChatModel, IChatRequestVariableData, IChatRequestToolEntry } from '../common/chatModel.js';
import { ChatModel, ChatRequestModel, IChatRequestModel, IChatRequestToolEntry, IChatRequestVariableData } from '../common/chatModel.js';
import { ChatRequestAgentPart, ChatRequestToolPart } from '../common/chatParserTypes.js';
import { IChatProgress, IChatService } from '../common/chatService.js';
import { ChatAgentLocation, ChatConfiguration, ChatMode, validateChatMode } from '../common/constants.js';
import { ILanguageModelsService } from '../common/languageModels.js';
@@ -64,9 +67,6 @@ import { CHAT_CATEGORY, CHAT_OPEN_ACTION_ID, CHAT_SETUP_ACTION_ID } from './acti
import { ChatViewId, IChatWidgetService, showCopilotView } from './chat.js';
import { CHAT_SIDEBAR_PANEL_ID } from './chatViewPane.js';
import './media/chatSetup.css';
import { ChatRequestAgentPart, ChatRequestToolPart } from '../common/chatParserTypes.js';
import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolResult } from '../../chat/common/languageModelToolsService.js';
import { CancellationToken } from '../../../../base/common/cancellation.js';
const defaultChat = {
extensionId: product.defaultChatAgent?.extensionId ?? '',
@@ -518,7 +518,7 @@ class SetupTool extends Disposable implements IToolImpl {
super();
}
invoke(invocation: IToolInvocation, countTokens: CountTokensCallback, progress: IProgress<IProgressStep>, token: CancellationToken): Promise<IToolResult> {
invoke(invocation: IToolInvocation, countTokens: CountTokensCallback, progress: ToolProgress, token: CancellationToken): Promise<IToolResult> {
const result: IToolResult = {
content: [
{

View File

@@ -7,9 +7,8 @@ import { DeferredPromise } from '../../../../../base/common/async.js';
import { IMarkdownString } from '../../../../../base/common/htmlContent.js';
import { observableValue } from '../../../../../base/common/observable.js';
import { localize } from '../../../../../nls.js';
import { IProgressStep } from '../../../../../platform/progress/common/progress.js';
import { IChatTerminalToolInvocationData, IChatToolInputInvocationData, IChatToolInvocation, IChatToolInvocationSerialized } from '../chatService.js';
import { IPreparedToolInvocation, IToolConfirmationMessages, IToolData, IToolResult } from '../languageModelToolsService.js';
import { IPreparedToolInvocation, IToolConfirmationMessages, IToolData, IToolProgressStep, IToolResult } from '../languageModelToolsService.js';
export class ChatToolInvocation implements IChatToolInvocation {
public readonly kind: 'toolInvocation' = 'toolInvocation';
@@ -47,7 +46,7 @@ export class ChatToolInvocation implements IChatToolInvocation {
public readonly toolSpecificData?: IChatTerminalToolInvocationData | IChatToolInputInvocationData;
public readonly progress = observableValue<{ message?: string; progress: number }>(this, { progress: 0 });
public readonly progress = observableValue<{ message?: string | IMarkdownString; progress: number }>(this, { progress: 0 });
constructor(preparedInvocation: IPreparedToolInvocation | undefined, toolData: IToolData, public readonly toolCallId: string) {
const defaultMessage = localize('toolInvocationMessage', "Using {0}", `"${toolData.displayName}"`);
@@ -88,7 +87,7 @@ export class ChatToolInvocation implements IChatToolInvocation {
return this._confirmationMessages;
}
public acceptProgress(step: IProgressStep) {
public acceptProgress(step: IToolProgressStep) {
const prev = this.progress.get();
this.progress.set({
progress: step.increment ? (prev.progress + step.increment) : prev.progress,

View File

@@ -235,7 +235,7 @@ export interface IChatToolInvocation {
invocationMessage: string | IMarkdownString;
pastTenseMessage: string | IMarkdownString | undefined;
resultDetails: IToolResult['toolResultDetails'];
progress: IObservable<{ message?: string; progress: number }>;
progress: IObservable<{ message?: string | IMarkdownString; progress: number }>;
readonly toolId: string;
readonly toolCallId: string;

View File

@@ -15,7 +15,7 @@ import { Location } from '../../../../editor/common/languages.js';
import { ContextKeyExpression } from '../../../../platform/contextkey/common/contextkey.js';
import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js';
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
import { IProgress, IProgressStep } from '../../../../platform/progress/common/progress.js';
import { IProgress } from '../../../../platform/progress/common/progress.js';
import { IChatTerminalToolInvocationData, IChatToolInputInvocationData } from './chatService.js';
import { PromptElementJSON, stringifyPromptElementJSON } from './tools/promptTsxTypes.js';
@@ -41,6 +41,14 @@ export interface IToolData {
supportsToolPicker?: boolean;
}
export interface IToolProgressStep {
readonly message: string | IMarkdownString | undefined;
readonly increment: number | undefined;
readonly total: number | undefined;
}
export type ToolProgress = IProgress<IToolProgressStep>;
export type ToolDataSource =
| {
type: 'extension';
@@ -135,7 +143,7 @@ export interface IPreparedToolInvocation {
}
export interface IToolImpl {
invoke(invocation: IToolInvocation, countTokens: CountTokensCallback, progress: IProgress<IProgressStep>, token: CancellationToken): Promise<IToolResult>;
invoke(invocation: IToolInvocation, countTokens: CountTokensCallback, progress: ToolProgress, token: CancellationToken): Promise<IToolResult>;
prepareToolInvocation?(parameters: any, token: CancellationToken): Promise<IPreparedToolInvocation | undefined>;
}

View File

@@ -9,7 +9,6 @@ import { IDisposable } from '../../../../../base/common/lifecycle.js';
import { autorun } from '../../../../../base/common/observable.js';
import { URI, UriComponents } from '../../../../../base/common/uri.js';
import { generateUuid } from '../../../../../base/common/uuid.js';
import { IProgress, IProgressStep } from '../../../../../platform/progress/common/progress.js';
import { SaveReason } from '../../../../common/editor.js';
import { ITextFileService } from '../../../../services/textfile/common/textfiles.js';
import { CellUri } from '../../../notebook/common/notebookCommon.js';
@@ -17,7 +16,7 @@ import { INotebookService } from '../../../notebook/common/notebookService.js';
import { ICodeMapperService } from '../../common/chatCodeMapperService.js';
import { ChatModel } from '../../common/chatModel.js';
import { IChatService } from '../../common/chatService.js';
import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolResult } from '../../common/languageModelToolsService.js';
import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolResult, ToolProgress } from '../../common/languageModelToolsService.js';
export const ExtensionEditToolId = 'vscode_editFile';
export const InternalEditToolId = 'vscode_editFile_internal';
@@ -43,7 +42,7 @@ export class EditTool implements IToolImpl {
@INotebookService private readonly notebookService: INotebookService,
) { }
async invoke(invocation: IToolInvocation, countTokens: CountTokensCallback, _progress: IProgress<IProgressStep>, token: CancellationToken): Promise<IToolResult> {
async invoke(invocation: IToolInvocation, countTokens: CountTokensCallback, _progress: ToolProgress, token: CancellationToken): Promise<IToolResult> {
if (!invocation.context) {
throw new Error('toolInvocationToken is required for this tool');
}

View File

@@ -3,15 +3,14 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { localize } from '../../../../../nls.js';
import { CancellationToken } from '../../../../../base/common/cancellation.js';
import { MarkdownString } from '../../../../../base/common/htmlContent.js';
import { URI } from '../../../../../base/common/uri.js';
import { localize } from '../../../../../nls.js';
import { IWebContentExtractorService } from '../../../../../platform/webContentExtractor/common/webContentExtractor.js';
import { ITrustedDomainService } from '../../../url/browser/trustedDomainService.js';
import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolResult, IToolResultTextPart } from '../../common/languageModelToolsService.js';
import { MarkdownString } from '../../../../../base/common/htmlContent.js';
import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolResult, IToolResultTextPart, ToolProgress } from '../../common/languageModelToolsService.js';
import { InternalFetchWebPageToolId } from '../../common/tools/tools.js';
import { IProgress, IProgressStep } from '../../../../../platform/progress/common/progress.js';
export const FetchWebPageToolData: IToolData = {
id: InternalFetchWebPageToolId,
@@ -42,7 +41,7 @@ export class FetchWebPageTool implements IToolImpl {
@ITrustedDomainService private readonly _trustedDomainService: ITrustedDomainService,
) { }
async invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: IProgress<IProgressStep>, _token: CancellationToken): Promise<IToolResult> {
async invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: ToolProgress, _token: CancellationToken): Promise<IToolResult> {
const parsedUriResults = this._parseUris((invocation.parameters as { urls?: string[] }).urls);
const validUris = Array.from(parsedUriResults.values()).filter((uri): uri is URI => !!uri);
if (!validUris.length) {

View File

@@ -9,9 +9,8 @@ import { ThemeIcon } from '../../../../base/common/themables.js';
import { localize } from '../../../../nls.js';
import { SortBy } from '../../../../platform/extensionManagement/common/extensionManagement.js';
import { EXTENSION_CATEGORIES } from '../../../../platform/extensions/common/extensions.js';
import { IProgress, IProgressStep } from '../../../../platform/progress/common/progress.js';
import { CountTokensCallback, IToolData, IToolImpl, IToolInvocation, IToolResult } from '../../chat/common/languageModelToolsService.js';
import { ExtensionState, IExtensionsWorkbenchService, IExtension } from '../common/extensions.js';
import { CountTokensCallback, IToolData, IToolImpl, IToolInvocation, IToolResult, ToolProgress } from '../../chat/common/languageModelToolsService.js';
import { ExtensionState, IExtension, IExtensionsWorkbenchService } from '../common/extensions.js';
export const SearchExtensionsToolId = 'vscode_searchExtensions_internal';
@@ -73,7 +72,7 @@ export class SearchExtensionsTool implements IToolImpl {
@IExtensionsWorkbenchService private readonly extensionWorkbenchService: IExtensionsWorkbenchService,
) { }
async invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: IProgress<IProgressStep>, token: CancellationToken): Promise<IToolResult> {
async invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: ToolProgress, token: CancellationToken): Promise<IToolResult> {
const params = invocation.parameters as InputParams;
if (!params.keywords?.length && !params.category && !params.ids?.length) {
return {

View File

@@ -4,31 +4,31 @@
*--------------------------------------------------------------------------------------------*/
import { raceCancellationError, Sequencer } from '../../../../base/common/async.js';
import * as json from '../../../../base/common/json.js';
import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js';
import * as json from '../../../../base/common/json.js';
import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js';
import { LRUCache } from '../../../../base/common/map.js';
import { autorun, autorunWithStore, derived, disposableObservableValue, IObservable, ITransaction, observableFromEvent, ObservablePromise, observableValue, transaction } from '../../../../base/common/observable.js';
import { basename } from '../../../../base/common/resources.js';
import { URI } from '../../../../base/common/uri.js';
import { generateUuid } from '../../../../base/common/uuid.js';
import { localize } from '../../../../nls.js';
import { ICommandService } from '../../../../platform/commands/common/commands.js';
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
import { ILogger, ILoggerService } from '../../../../platform/log/common/log.js';
import { INotificationService, Severity } from '../../../../platform/notification/common/notification.js';
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';
import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js';
import { IEditorService } from '../../../services/editor/common/editorService.js';
import { IExtensionService } from '../../../services/extensions/common/extensions.js';
import { IOutputService } from '../../../services/output/common/output.js';
import { ToolProgress } from '../../chat/common/languageModelToolsService.js';
import { mcpActivationEvent } from './mcpConfiguration.js';
import { IMcpRegistry } from './mcpRegistryTypes.js';
import { McpServerRequestHandler } from './mcpServerRequestHandler.js';
import { extensionMcpCollectionPrefix, IMcpServer, IMcpServerConnection, IMcpTool, McpCollectionReference, McpConnectionFailedError, McpConnectionState, McpDefinitionReference, McpServerDefinition, McpServerToolsState } from './mcpTypes.js';
import { MCP } from './modelContextProtocol.js';
import { INotificationService, Severity } from '../../../../platform/notification/common/notification.js';
import { localize } from '../../../../nls.js';
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
import { IEditorService } from '../../../services/editor/common/editorService.js';
import { IProgress, IProgressStep } from '../../../../platform/progress/common/progress.js';
import { generateUuid } from '../../../../base/common/uuid.js';
type ServerBootData = {
supportsLogging: boolean;
@@ -502,7 +502,7 @@ export class McpTool implements IMcpTool {
return this._server.callOn(h => h.callTool({ name, arguments: params }, token), token);
}
callWithProgress(params: Record<string, unknown>, progress: IProgress<IProgressStep>, token?: CancellationToken): Promise<MCP.CallToolResult> {
callWithProgress(params: Record<string, unknown>, progress: ToolProgress, token?: CancellationToken): Promise<MCP.CallToolResult> {
// serverToolName is always set now, but older cache entries (from 1.99-Insiders) may not have it.
const name = this._definition.serverToolName ?? this._definition.name;
const progressToken = generateUuid();

View File

@@ -14,9 +14,8 @@ import { localize } from '../../../../nls.js';
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
import { ILogService } from '../../../../platform/log/common/log.js';
import { IProductService } from '../../../../platform/product/common/productService.js';
import { IProgress, IProgressStep } from '../../../../platform/progress/common/progress.js';
import { StorageScope } from '../../../../platform/storage/common/storage.js';
import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolResult } from '../../chat/common/languageModelToolsService.js';
import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolResult, ToolProgress } from '../../chat/common/languageModelToolsService.js';
import { IMcpRegistry } from './mcpRegistryTypes.js';
import { McpServer, McpServerMetadataCache } from './mcpServer.js';
import { IMcpServer, IMcpService, IMcpTool, McpCollectionDefinition, McpServerDefinition, McpServerToolsState } from './mcpTypes.js';
@@ -247,7 +246,7 @@ class McpToolImplementation implements IToolImpl {
};
}
async invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, progress: IProgress<IProgressStep>, token: CancellationToken) {
async invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, progress: ToolProgress, token: CancellationToken) {
const result: IToolResult = {
content: []

View File

@@ -3,11 +3,11 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { equals as arraysEqual } from '../../../../base/common/arrays.js';
import { assertNever } from '../../../../base/common/assert.js';
import { CancellationToken } from '../../../../base/common/cancellation.js';
import { IDisposable } from '../../../../base/common/lifecycle.js';
import { equals as objectsEqual } from '../../../../base/common/objects.js';
import { equals as arraysEqual } from '../../../../base/common/arrays.js';
import { IObservable } from '../../../../base/common/observable.js';
import { URI, UriComponents } from '../../../../base/common/uri.js';
import { Location } from '../../../../editor/common/languages.js';
@@ -17,9 +17,9 @@ import { ExtensionIdentifier } from '../../../../platform/extensions/common/exte
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
import { StorageScope } from '../../../../platform/storage/common/storage.js';
import { IWorkspaceFolderData } from '../../../../platform/workspace/common/workspace.js';
import { ToolProgress } from '../../chat/common/languageModelToolsService.js';
import { McpServerRequestHandler } from './mcpServerRequestHandler.js';
import { MCP } from './modelContextProtocol.js';
import { IProgress, IProgressStep } from '../../../../platform/progress/common/progress.js';
export const extensionMcpCollectionPrefix = 'ext.';
@@ -264,7 +264,7 @@ export interface IMcpTool {
/**
* Identical to {@link call}, but reports progress.
*/
callWithProgress(params: Record<string, unknown>, progress: IProgress<IProgressStep>, token?: CancellationToken): Promise<MCP.CallToolResult>;
callWithProgress(params: Record<string, unknown>, progress: ToolProgress, token?: CancellationToken): Promise<MCP.CallToolResult>;
}
export const enum McpServerTransportType {

View File

@@ -12,7 +12,7 @@ declare module 'vscode' {
/**
* A progress message that represents a chunk of work
*/
message?: string;
message?: string | MarkdownString;
/**
* An increment for discrete progress. Increments will be summed up until 100 (100%) is reached
*/