1
>
/*---------------------------------------------------------------------------------------------
extHostChatAgents2.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import type * as vscode from 'vscode';
7
>
import { coalesce } from '../../../base/common/arrays.js';
8
>
import { DeferredPromise, raceCancellation, raceCancellationError, timeout } from '../../../base/common/async.js';
9
>
import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js';
10
>
import { toErrorMessage } from '../../../base/common/errorMessage.js';
11
>
import { Emitter } from '../../../base/common/event.js';
12
>
import { Iterable } from '../../../base/common/iterator.js';
13
>
import { Disposable, DisposableMap, DisposableResourceMap, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js';
14
>
import { revive } from '../../../base/common/marshalling.js';
15
>
import { StopWatch } from '../../../base/common/stopwatch.js';
16
>
import { assertType } from '../../../base/common/types.js';
17
>
import { URI, UriComponents } from '../../../base/common/uri.js';
18
>
import { generateUuid } from '../../../base/common/uuid.js';
19
>
import { Location } from '../../../editor/common/languages.js';
20
>
import { ExtensionIdentifier, IExtensionDescription, IRelaxedExtensionDescription } from '../../../platform/extensions/common/extensions.js';
21
>
import { ILogService } from '../../../platform/log/common/log.js';
22
>
import { packErrorForTelemetry } from '../../../platform/telemetry/common/errorTelemetry.js';
23
>
import { isChatViewTitleActionContext } from '../../contrib/chat/common/actions/chatActions.js';
24
>
import { IChatAgentRequest, IChatAgentResult, IChatAgentResultTimings, UserSelectedTools } from '../../contrib/chat/common/participants/chatAgents.js';
25
>
import { ChatAgentVoteDirection, IChatContentReference, IChatFollowup, IChatResponseErrorDetails, IChatUserActionEvent, IChatVoteAction } from '../../contrib/chat/common/chatService/chatService.js';
26
>
import { ChatRequestHooks } from '../../contrib/chat/common/promptSyntax/hookSchema.js';
27
>
import { LocalChatSessionUri } from '../../contrib/chat/common/model/chatUri.js';
28
>
import { ChatAgentLocation } from '../../contrib/chat/common/constants.js';
29
>
import { checkProposedApiEnabled, isProposedApiEnabled } from '../../services/extensions/common/extensions.js';
30
>
import { Dto } from '../../services/extensions/common/proxyIdentifier.js';
31
>
import { ExtHostChatAgentsShape2, IChatAgentCompletionItem, IChatAgentHistoryEntryDto, IChatAgentInvokeResult, IChatAgentProgressShape, IChatSessionCustomizationItemDto, IChatSessionCustomizationProviderMetadataDto, IChatSessionCustomizationSourceFolderDto, IChatProgressDto, IChatSessionContextDto, ICustomAgentDto, IExtensionChatAgentMetadata, IHookDto, IInstructionDto, IMainContext, IPluginDto, ISkillDto, ISlashCommandDto, MainContext, MainThreadChatAgentsShape2 } from './extHost.protocol.js';
32
>
import { CommandsConverter, ExtHostCommands } from './extHostCommands.js';
33
>
import { ExtHostDiagnostics } from './extHostDiagnostics.js';
34
>
import { ExtHostDocuments } from './extHostDocuments.js';
35
>
import { ExtHostLanguageModels } from './extHostLanguageModels.js';
36
>
import { ExtHostLanguageModelTools } from './extHostLanguageModelTools.js';
37
>
import * as typeConvert from './extHostTypeConverters.js';
38
>
import * as extHostTypes from './extHostTypes.js';
39
>
import { IPromptFileContext, IPromptFileResource } from '../../contrib/chat/common/promptSyntax/service/promptsService.js';
40
>
import { PromptsType } from '../../contrib/chat/common/promptSyntax/promptTypes.js';
41
>
import { ExtHostChatSessions } from './extHostChatSessions.js';
42
>
import { ExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js';
43
>
44
>
export class ChatAgentResponseStream {
45
>
46
>
private _stopWatch = StopWatch.create(false);
47
>
private _isClosed: boolean = false;
48
>
private _firstProgress: number | undefined;
49
>
private _apiObject: vscode.ChatResponseStream | undefined;
50
>
51
>
constructor(
52
>
private readonly _extension: IExtensionDescription,
53
>
private readonly _request: IChatAgentRequest,
54
>
private readonly _proxy: IChatAgentProgressShape,
55
>
private readonly _commandsConverter: CommandsConverter,
56
>
private readonly _sessionDisposables: DisposableStore,
57
>
private readonly _pendingCarouselResolvers: Map</* requestId */string, Map</* resolveId */ string, DeferredPromise<Record<string, unknown> | undefined>>>,
58
>
private readonly _token: CancellationToken
59
>
) { }
60
>
61
>
close() {
62
this._isClosed = true;
63
}
65
>
get timings(): IChatAgentResultTimings {
66
return {
67
firstProgress: this._firstProgress,