Path: blob/main/src/vs/workbench/api/common/extHostAiSettingsSearch.ts
3296 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 { SettingsSearchProvider, SettingsSearchResult } from 'vscode';6import { CancellationToken } from '../../../base/common/cancellation.js';7import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js';8import { AiSettingsSearchProviderOptions } from '../../services/aiSettingsSearch/common/aiSettingsSearch.js';9import { ExtHostAiSettingsSearchShape, IMainContext, MainContext, MainThreadAiSettingsSearchShape } from './extHost.protocol.js';10import { Disposable } from './extHostTypes.js';11import { Progress } from '../../../platform/progress/common/progress.js';12import { AiSettingsSearch } from './extHostTypeConverters.js';1314export class ExtHostAiSettingsSearch implements ExtHostAiSettingsSearchShape {15private _settingsSearchProviders: Map<number, SettingsSearchProvider> = new Map();16private _nextHandle = 0;1718private readonly _proxy: MainThreadAiSettingsSearchShape;1920constructor(mainContext: IMainContext) {21this._proxy = mainContext.getProxy(MainContext.MainThreadAiSettingsSearch);22}2324async $startSearch(handle: number, query: string, option: AiSettingsSearchProviderOptions, token: CancellationToken): Promise<void> {25if (this._settingsSearchProviders.size === 0) {26throw new Error('No related information providers registered');27}2829const provider = this._settingsSearchProviders.get(handle);30if (!provider) {31throw new Error('Settings search provider not found');32}3334const progressReporter = new Progress<SettingsSearchResult>((data) => {35this._proxy.$handleSearchResult(handle, AiSettingsSearch.fromSettingsSearchResult(data));36});3738return provider.provideSettingsSearchResults(query, option, progressReporter, token);39}4041registerSettingsSearchProvider(extension: IExtensionDescription, provider: SettingsSearchProvider): Disposable {42const handle = this._nextHandle;43this._nextHandle++;44this._settingsSearchProviders.set(handle, provider);45this._proxy.$registerAiSettingsSearchProvider(handle);46return new Disposable(() => {47this._proxy.$unregisterAiSettingsSearchProvider(handle);48this._settingsSearchProviders.delete(handle);49});50}51}525354