import { CancellationToken } from "../../../../base/common/cancellation.js";
import { Event } from "../../../../base/common/event.js";
import { IDisposable } from "../../../../base/common/lifecycle.js";
import { ThemeIcon } from "../../../../base/common/themables.js";
import { URI } from "../../../../base/common/uri.js";
import { IChatService } from "./chatService/chatService.service.js";
import { IChatSessionItemProvider, IChatSessionsExtensionPoint, IChatSessionItem, IChatSessionContentProvider, IChatSession, IChatSessionProviderOptionItem, IChatSessionProviderOptionGroup, IChatSessionOptionsWillNotifyExtensionEvent } from "./chatSessionsService.js";
import { IChatModel } from "./model/chatModel.js";
import { IChatAgentAttachmentCapabilities } from "./participants/chatAgents.js";
import { Target } from "./promptSyntax/service/promptsService.js";
export declare const IChatSessionsService: import("../../../../platform/instantiation/common/instantiation.js").ServiceIdentifier<IChatSessionsService>;
export interface IChatSessionsService {
    readonly _serviceBrand: undefined;
    readonly onDidChangeItemsProviders: Event<IChatSessionItemProvider>;
    readonly onDidChangeSessionItems: Event<string>;
    readonly onDidChangeAvailability: Event<void>;
    readonly onDidChangeInProgress: Event<void>;
    getChatSessionContribution(chatSessionType: string): IChatSessionsExtensionPoint | undefined;
    registerChatSessionItemProvider(provider: IChatSessionItemProvider): IDisposable;
    activateChatSessionItemProvider(chatSessionType: string): Promise<IChatSessionItemProvider | undefined>;
    getAllChatSessionContributions(): IChatSessionsExtensionPoint[];
    getIconForSessionType(chatSessionType: string): ThemeIcon | URI | undefined;
    getWelcomeTitleForSessionType(chatSessionType: string): string | undefined;
    getWelcomeMessageForSessionType(chatSessionType: string): string | undefined;
    getInputPlaceholderForSessionType(chatSessionType: string): string | undefined;
    /**
    * Get the list of chat session items grouped by session type.
    * @param providerTypeFilter If specified, only returns items from the given providers. If undefined, returns items from all providers.
    */
    getChatSessionItems(providerTypeFilter: readonly string[] | undefined, token: CancellationToken): Promise<Array<{
        readonly chatSessionType: string;
        readonly items: IChatSessionItem[];
    }>>;
    reportInProgress(chatSessionType: string, count: number): void;
    getInProgress(): {
        displayName: string;
        count: number;
    }[];
    notifySessionItemsChanged(chatSessionType: string): void;
    readonly onDidChangeContentProviderSchemes: Event<{
        readonly added: string[];
        readonly removed: string[];
    }>;
    getContentProviderSchemes(): string[];
    registerChatSessionContentProvider(scheme: string, provider: IChatSessionContentProvider): IDisposable;
    canResolveChatSession(sessionResource: URI): Promise<boolean>;
    getOrCreateChatSession(sessionResource: URI, token: CancellationToken): Promise<IChatSession>;
    hasAnySessionOptions(sessionResource: URI): boolean;
    getSessionOption(sessionResource: URI, optionId: string): string | IChatSessionProviderOptionItem | undefined;
    setSessionOption(sessionResource: URI, optionId: string, value: string | IChatSessionProviderOptionItem): boolean;
    /**
    * Fired when options for a chat session change.
    */
    onDidChangeSessionOptions: Event<URI>;
    /**
    * Get the capabilities for a specific session type
    */
    getCapabilitiesForSessionType(chatSessionType: string): IChatAgentAttachmentCapabilities | undefined;
    /**
    * Get the customAgentTarget for a specific session type.
    * When the Target is not `Target.Undefined`, the mode picker should show filtered custom agents matching this target.
    */
    getCustomAgentTargetForSessionType(chatSessionType: string): Target;
    onDidChangeOptionGroups: Event<string>;
    getOptionGroupsForSessionType(chatSessionType: string): IChatSessionProviderOptionGroup[] | undefined;
    setOptionGroupsForSessionType(chatSessionType: string, handle: number, optionGroups?: IChatSessionProviderOptionGroup[]): void;
    /**
    * Event fired when session options change and need to be sent to the extension.
    * MainThreadChatSessions subscribes to this to forward changes to the extension host.
    * Uses IWaitUntil pattern to allow listeners to register async work.
    */
    readonly onRequestNotifyExtension: Event<IChatSessionOptionsWillNotifyExtensionEvent>;
    notifySessionOptionsChange(sessionResource: URI, updates: ReadonlyArray<{
        optionId: string;
        value: string | IChatSessionProviderOptionItem;
    }>): Promise<void>;
    registerChatModelChangeListeners(chatService: IChatService, chatSessionType: string, onChange: () => void): IDisposable;
    getInProgressSessionDescription(chatModel: IChatModel): string | undefined;
}
