import { CancellationToken } from "../../../../base/common/cancellation.js";
import { Event } from "../../../../base/common/event.js";
import { IDisposable } from "../../../../base/common/lifecycle.js";
import { URI } from "../../../../base/common/uri.js";
import { IActiveCodeEditor, ICodeEditor } from "../../../../editor/browser/editorBrowser.js";
import { IRange } from "../../../../editor/common/core/range.js";
import { IValidEditOperation } from "../../../../editor/common/model.js";
import { EditMode } from "@codingame/monaco-vscode-c465110a-57c0-59d7-a6b2-be0a4db7e517-common/vscode/vs/workbench/contrib/inlineChat/common/inlineChat";
import { Session, StashedSession } from "@codingame/monaco-vscode-c465110a-57c0-59d7-a6b2-be0a4db7e517-common/vscode/vs/workbench/contrib/inlineChat/browser/inlineChatSession";
import { IInlineChatSessionEvent, IInlineChatSessionEndEvent, ISessionKeyComputer } from "./inlineChatSessionService.js";
export declare const IInlineChatSessionService: import("../../../../platform/instantiation/common/instantiation.js").ServiceIdentifier<IInlineChatSessionService>;
export interface IInlineChatSessionService {
    _serviceBrand: undefined;
    onWillStartSession: Event<IActiveCodeEditor>;
    onDidMoveSession: Event<IInlineChatSessionEvent>;
    onDidStashSession: Event<IInlineChatSessionEvent>;
    onDidEndSession: Event<IInlineChatSessionEndEvent>;
    createSession(editor: IActiveCodeEditor, options: {
        editMode: EditMode;
        wholeRange?: IRange;
        session?: Session;
        headless?: boolean;
    }, token: CancellationToken): Promise<Session | undefined>;
    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;
}
