/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from '../../../../base/common/cancellation.js'; import { Event } from '../../../../base/common/event.js'; import { IDisposable } from '../../../../base/common/lifecycle.js'; import { IObservable } from '../../../../base/common/observable.js'; import { URI } from '../../../../base/common/uri.js'; import { IActiveCodeEditor, ICodeEditor } from '../../../../editor/browser/editorBrowser.js'; import { Position } from '../../../../editor/common/core/position.js'; import { IRange } from '../../../../editor/common/core/range.js'; import { IValidEditOperation } from '../../../../editor/common/model.js'; import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; import { IChatEditingSession } from '../../chat/common/chatEditingService.js'; import { IChatModel } from '../../chat/common/chatModel.js'; import { Session, StashedSession } from './inlineChatSession.js'; export interface ISessionKeyComputer { getComparisonKey(editor: ICodeEditor, uri: URI): string; } export const IInlineChatSessionService = createDecorator('IInlineChatSessionService'); export interface IInlineChatSessionEvent { readonly editor: ICodeEditor; readonly session: Session; } export interface IInlineChatSessionEndEvent extends IInlineChatSessionEvent { readonly endedByExternalCause: boolean; } export interface IInlineChatSession2 { readonly initialPosition: Position; readonly uri: URI; readonly chatModel: IChatModel; readonly editingSession: IChatEditingSession; dispose(): void; } export interface IInlineChatSessionService { _serviceBrand: undefined; onWillStartSession: Event; onDidMoveSession: Event; onDidStashSession: Event; onDidEndSession: Event; createSession(editor: IActiveCodeEditor, options: { wholeRange?: IRange; session?: Session; headless?: boolean }, token: CancellationToken): Promise; moveSession(session: Session, newEditor: ICodeEditor): void; getCodeEditor(session: Session): ICodeEditor; getSession(editor: ICodeEditor, uri: URI): Session | undefined; releaseSession(session: Session): void; stashSession(session: Session, editor: ICodeEditor, undoCancelEdits: IValidEditOperation[]): StashedSession; registerSessionKeyComputer(scheme: string, value: ISessionKeyComputer): IDisposable; dispose(): void; hideOnRequest: IObservable; createSession2(editor: ICodeEditor, uri: URI, token: CancellationToken): Promise; getSession2(uri: URI): IInlineChatSession2 | undefined; onDidChangeSessions: Event; }