import { CancellationToken } from "../../../../../../base/common/cancellation.js";
import { Event } from "../../../../../../base/common/event.js";
import { IDisposable } from "../../../../../../base/common/lifecycle.js";
import { ResourceSet } from "../../../../../../base/common/map.js";
import { URI } from "../../../../../../base/common/uri.js";
import { ITextModel } from "../../../../../../editor/common/model.js";
import { IExtensionDescription } from "../../../../../../platform/extensions/common/extensions.js";
import { IResolvedPromptSourceFolder } from "../config/promptFileLocations.js";
import { ParsedPromptFile } from "../promptFileParser.js";
import { PromptsType } from "../promptTypes.js";
import { IPromptPath, PromptsStorage, IResolvedChatPromptSlashCommand, IChatPromptSlashCommand, ICustomAgent, IAgentInstructionFile, Logger, IPromptFileContext, IPromptFileResource, IAgentSkill, IConfiguredHooksInfo, IInstructionFile, IPromptDiscoveryInfo } from "./promptsService.js";
/**
* Provides prompt services.
*/
export declare const IPromptsService: import("../../../../../../platform/instantiation/common/instantiation.js").ServiceIdentifier<IPromptsService>;
/**
* Provides prompt services.
*/
export interface IPromptsService extends IDisposable {
    readonly _serviceBrand: undefined;
    /**
    * The parsed prompt file for the provided text model.
    * @param textModel Returns the parsed prompt file.
    */
    getParsedPromptFile(textModel: ITextModel): ParsedPromptFile;
    /**
    * List all available prompt files.
    */
    listPromptFiles(type: PromptsType, token: CancellationToken): Promise<readonly IPromptPath[]>;
    /**
    * List all available prompt files.
    */
    listPromptFilesForStorage(type: PromptsType, storage: PromptsStorage, token: CancellationToken): Promise<readonly IPromptPath[]>;
    /**
    * Get a list of prompt source folders based on the provided prompt type.
    */
    getSourceFolders(type: PromptsType): Promise<readonly IPromptPath[]>;
    /**
    * Get a list of resolved prompt source folders with full metadata.
    * This includes displayPath, isDefault, and storage information.
    * Used for diagnostics and config-info displays.
    */
    getResolvedSourceFolders(type: PromptsType): Promise<readonly IResolvedPromptSourceFolder[]>;
    /**
    * Validates if the provided command name is a valid prompt slash command.
    */
    isValidSlashCommandName(name: string): boolean;
    /**
    * Synchronously checks whether `name` matches a discovered prompt slash command.
    * Backed by a cache that is populated lazily on the first call and refreshed on
    * subsequent {@link onDidChangeSlashCommands} firings, so the very first call after
    * service creation may return `false` for known commands until the first discovery
    * completes.
    */
    hasPromptSlashCommand(name: string): boolean;
    /**
    * Gets the prompt file for a slash command.
    */
    resolvePromptSlashCommand(command: string, sessionType: string | undefined, token: CancellationToken): Promise<IResolvedChatPromptSlashCommand | undefined>;
    /**
    * Event that is triggered when the slash command to ParsedPromptFile cache is updated.
    * Event handlers can use {@link resolvePromptSlashCommand} to retrieve the latest data.
    */
    readonly onDidChangeSlashCommands: Event<void>;
    /**
    * Returns a prompt command if the command name is valid.
    */
    getPromptSlashCommands(token: CancellationToken): Promise<readonly IChatPromptSlashCommand[]>;
    /**
    * Returns the prompt command name for the given URI.
    */
    getPromptSlashCommandName(uri: URI, token: CancellationToken): Promise<string>;
    /**
    * Event that is triggered when the list of custom agents changes.
    */
    readonly onDidChangeCustomAgents: Event<void>;
    /**
    * Event that is triggered when the list of instruction files changes.
    */
    readonly onDidChangeInstructions: Event<void>;
    /**
    * Finds all available custom agents
    */
    getCustomAgents(token: CancellationToken): Promise<readonly ICustomAgent[]>;
    /**
    * Parses the provided URI
    * @param uris
    */
    parseNew(uri: URI, token: CancellationToken): Promise<ParsedPromptFile>;
    /**
    * Internal: register a contributed file. Returns a disposable that removes the contribution.
    * Not intended for extension authors; used by contribution point handler.
    */
    registerContributedFile(type: PromptsType, uri: URI, extension: IExtensionDescription, name: string | undefined, description: string | undefined, when?: string, sessionTypes?: readonly string[]): IDisposable;
    getPromptLocationLabel(promptPath: IPromptPath): string;
    /**
    * Gets list of AGENTS.md files, including optionally nested ones from subfolders.
    */
    listNestedAgentMDs(token: CancellationToken): Promise<IAgentInstructionFile[]>;
    /**
    * Gets combined list of agent instruction files (AGENTS.md, CLAUDE.md, copilot-instructions.md).
    * Combines results from listAgentMDs (non-nested), listClaudeMDs, and listCopilotInstructionsMDs.
    */
    listAgentInstructions(token: CancellationToken, logger?: Logger): Promise<IAgentInstructionFile[]>;
    /**
    * For a chat mode file URI, return the name of the agent file that it should use.
    * @param oldURI
    */
    getAgentFileURIFromModeFile(oldURI: URI): URI | undefined;
    /**
    * Returns the list of disabled prompt file URIs for a given type. By default no prompt files are disabled.
    */
    getDisabledPromptFiles(type: PromptsType): ResourceSet;
    /**
    * Persists the set of disabled prompt file URIs for the given type.
    */
    setDisabledPromptFiles(type: PromptsType, uris: ResourceSet): void;
    /**
    * Registers a prompt file provider that can provide prompt files for repositories.
    * @param extension The extension registering the provider.
    * @param type The type of contribution.
    * @param provider The provider implementation with optional change event.
    * @returns A disposable that unregisters the provider when disposed.
    */
    registerPromptFileProvider(extension: IExtensionDescription, type: PromptsType, provider: {
        onDidChangePromptFiles?: Event<void>;
        providePromptFiles: (context: IPromptFileContext, token: CancellationToken) => Promise<IPromptFileResource[] | undefined>;
    }): IDisposable;
    /**
    * Gets list of agent skills files.
    */
    findAgentSkills(token: CancellationToken): Promise<IAgentSkill[] | undefined>;
    /**
    * Event that is triggered when the list of skills changes.
    */
    readonly onDidChangeSkills: Event<void>;
    /**
    * Event that is triggered when the effective hook availability or configuration changes.
    */
    readonly onDidChangeHooks: Event<void>;
    /**
    * Gets all hooks collected from hooks.json files.
    * The result is cached and invalidated when the effective hook availability or configuration changes.
    */
    getHooks(token: CancellationToken): Promise<IConfiguredHooksInfo | undefined>;
    /**
    * Gets all instruction files
    */
    getInstructionFiles(token: CancellationToken): Promise<readonly IInstructionFile[]>;
    /**
    * Returns the cached discovery info for the given prompt type.
    */
    getDiscoveryInfo(type: PromptsType, token: CancellationToken): Promise<IPromptDiscoveryInfo>;
}
