import { IDisposable } from "../../../../base/common/lifecycle.js";
import { CancellationToken } from "../../../../base/common/cancellation.js";
import { Event } from "../../../../base/common/event.js";
import { URI } from "../../../../base/common/uri.js";
import { ThemeIcon } from "../../../../base/common/themables.js";
import { IChatProgress } from "./chatService.js";
import { IChatAgentRequest } from "@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common/vscode/vs/workbench/contrib/chat/common/chatAgents";
import { IRelaxedExtensionDescription } from "../../../../platform/extensions/common/extensions.js";
export interface IChatSessionsExtensionPoint {
    readonly id: string;
    readonly type: string;
    readonly name: string;
    readonly displayName: string;
    readonly description: string;
    readonly extensionDescription: IRelaxedExtensionDescription;
    readonly when?: string;
}
export interface IChatSessionItem {
    id: string;
    label: string;
    iconPath?: URI | {
        light: URI;
        dark: URI;
    } | ThemeIcon;
}
export interface ChatSession extends IDisposable {
    readonly id: string;
    readonly onWillDispose: Event<void>;
    history: Array<{
        type: "request";
        prompt: string;
    } | {
        type: "response";
        parts: IChatProgress[];
    }>;
    readonly progressEvent?: Event<IChatProgress[]>;
    readonly interruptActiveResponseCallback?: () => Promise<boolean>;
    requestHandler?: (request: IChatAgentRequest, progress: (progress: IChatProgress[]) => void, history: [
    ], token: CancellationToken) => Promise<void>;
}
export interface IChatSessionItemProvider {
    readonly chatSessionType: string;
    provideChatSessionItems(token: CancellationToken): Promise<IChatSessionItem[]>;
}
export interface IChatSessionContentProvider {
    readonly chatSessionType: string;
    provideChatSessionContent(id: string, token: CancellationToken): Promise<ChatSession>;
}
