import type { ConfigurationChangeEvent, ConfigurationScope } from 'vscode';
import { Emitter, Event } from '../../../util/vs/base/common/event';
import { Disposable } from '../../../util/vs/base/common/lifecycle';
import { IObservable } from '../../../util/vs/base/common/observable';
import { ICopilotTokenStore } from '../../authentication/common/copilotTokenStore';
import { ImportChanges } from '../../inlineEdits/common/dataTypes/importFilteringOptions';
import { JointCompletionsProviderStrategy, JointCompletionsProviderTriggerChangeStrategy } from '../../inlineEdits/common/dataTypes/jointCompletionsProviderOptions';
import * as triggerOptions from '../../inlineEdits/common/dataTypes/triggerOptions';
import * as xtabHistoryOptions from '../../inlineEdits/common/dataTypes/xtabHistoryOptions';
import * as xtabPromptOptions from '../../inlineEdits/common/dataTypes/xtabPromptOptions';
import { ResponseProcessor } from '../../inlineEdits/common/responseProcessor';
import { FetcherId } from '../../networking/common/fetcherService';
import { AlternativeNotebookFormat } from '../../notebook/common/alternativeContentFormat';
import { IExperimentationService } from '../../telemetry/common/nullExperimentationService';
import { IValidator } from './validator';
export declare const CopilotConfigPrefix = "github.copilot";
export declare const IConfigurationService: import("../../../util/common/services").ServiceIdentifier<IConfigurationService>;
export type ExperimentBasedConfigType = boolean | number | (string | undefined);
export interface InspectConfigResult<T> {
    /**
     * The default value which is used when no other value is defined
     */
    defaultValue?: T;
    /**
     * The global or installation-wide value.
     */
    globalValue?: T;
    /**
     * The workspace-specific value.
     */
    workspaceValue?: T;
    /**
     * The workspace-folder-specific value.
     */
    workspaceFolderValue?: T;
    /**
     * Language specific default value when this configuration value is created for a {@link ConfigurationScope language scope}.
     */
    defaultLanguageValue?: T;
    /**
     * Language specific global value when this configuration value is created for a {@link ConfigurationScope language scope}.
     */
    globalLanguageValue?: T;
    /**
     * Language specific workspace value when this configuration value is created for a {@link ConfigurationScope language scope}.
     */
    workspaceLanguageValue?: T;
    /**
     * Language specific workspace-folder value when this configuration value is created for a {@link ConfigurationScope language scope}.
     */
    workspaceFolderLanguageValue?: T;
    /**
     * All language identifiers for which this configuration is defined.
     */
    languageIds?: string[];
}
export interface IConfigurationService {
    readonly _serviceBrand: undefined;
    /**
     * Gets user configuration for a key from vscode (which if not defined, pulls default value from package.json).
     * If not defined, returns the default value.
     *
     * @remark For object values, the user config will replace the default config.
     */
    getConfig<T>(key: Config<T>, scope?: ConfigurationScope): T;
    /**
     * Gets an observable for the configuration of a key from vscode (which if not defined, pulls default value from package.json).
     * If not defined, returns the default value.
     *
     * @remark For object values, the user config will replace the default config.
     */
    getConfigObservable<T>(key: Config<T>): IObservable<T>;
    /**
     * Retrieve all information about a configuration setting. A configuration value
     * often consists of a *default* value, a global or installation-wide value,
     * a workspace-specific value and folder-specific value
     * @param configKey The config key to look up
     * @returns Information about a configuration setting or `undefined`.
     */
    inspectConfig<T>(key: BaseConfig<T>, scope?: ConfigurationScope): InspectConfigResult<T> | undefined;
    /**
     * Checks if the key is configured by the user in any of the configuration scopes.
     */
    isConfigured<T>(key: BaseConfig<T>, scope?: ConfigurationScope): boolean;
    /**
     * Proxies vscode.workspace.getConfiguration to allow getting a configuration value that is not in the Copilot namespace.
     * @param configKey The config key to look up
     */
    getNonExtensionConfig<T>(configKey: string): T | undefined;
    /**
     * Sets user configuration for a key in vscode.
     */
    setConfig<T>(key: BaseConfig<T>, value: T, target?: ConfigTarget): Thenable<void>;
    /**
     * Gets user configuration for a key from vscode (which if not defined, pulls default value from package.json).
     * If not defined, returns the experimentation based value or falls back to the default value.
     *
     * @remark For object values, the user config will replace the default config.
     */
    getExperimentBasedConfig<T extends ExperimentBasedConfigType>(key: ExperimentBasedConfig<T>, experimentationService: IExperimentationService, scope?: ConfigurationScope): T;
    /**
     * Gets the observable of a user configuration for a key from vscode (which if not defined, pulls default value from package.json).
     * If not defined, returns the experimentation based value or falls back to the default value.
     *
     * @remark For object values, the user config will replace the default config.
     */
    getExperimentBasedConfigObservable<T extends ExperimentBasedConfigType>(key: ExperimentBasedConfig<T>, experimentationService: IExperimentationService): IObservable<T>;
    /**
     * For object values, the user config will be mixed in with the default config.
     */
    getConfigMixedWithDefaults<T>(key: Config<T>): T;
    getDefaultValue<T>(key: Config<T>): T;
    getDefaultValue<T extends ExperimentBasedConfigType>(key: ExperimentBasedConfig<T>): T;
    /**
     * Emitted whenever a configuration value changes.
     * This emits for all changes, not just changes to the Copilot settings.
     */
    onDidChangeConfiguration: Event<ConfigurationChangeEvent>;
    /**
     * Called by experimentation service to trigger updates to ExP based configurations
     *
     * @param treatments List of treatments that have been changed
     */
    updateExperimentBasedConfiguration(treatments: string[]): void;
    dumpConfig(): {
        [key: string]: string;
    };
}
export declare abstract class AbstractConfigurationService extends Disposable implements IConfigurationService {
    readonly _serviceBrand: undefined;
    protected _onDidChangeConfiguration: Emitter<ConfigurationChangeEvent>;
    readonly onDidChangeConfiguration: Event<ConfigurationChangeEvent>;
    protected _isInternal: boolean;
    constructor(copilotTokenStore?: ICopilotTokenStore);
    getConfigMixedWithDefaults<T>(key: Config<T>): T;
    getDefaultValue<T>(key: BaseConfig<T>): T;
    protected _setUserInfo(userInfo: {
        isInternal: boolean;
    }): void;
    abstract getConfig<T>(key: Config<T>, scope?: ConfigurationScope): T;
    abstract inspectConfig<T>(key: BaseConfig<T>, scope?: ConfigurationScope): InspectConfigResult<T> | undefined;
    abstract getNonExtensionConfig<T>(configKey: string): T | undefined;
    abstract setConfig<T>(key: BaseConfig<T>, value: T, target?: ConfigTarget): Thenable<void>;
    abstract getExperimentBasedConfig<T extends ExperimentBasedConfigType>(key: ExperimentBasedConfig<T>, experimentationService: IExperimentationService): T;
    abstract dumpConfig(): {
        [key: string]: string;
    };
    updateExperimentBasedConfiguration(treatments: string[]): void;
    getConfigObservable<T>(key: Config<T>): IObservable<T>;
    getExperimentBasedConfigObservable<T extends ExperimentBasedConfigType>(key: ExperimentBasedConfig<T>, experimentationService: IExperimentationService): IObservable<T>;
    private observables;
    private _getObservable_$show2FramesUp;
    /**
     * Checks if the key is configured by the user in any of the configuration scopes.
     */
    isConfigured<T>(key: BaseConfig<T>, scope?: ConfigurationScope): boolean;
    protected getDefaultValueForConfig<T>(key: BaseConfig<T>): T | undefined;
}
export interface BaseConfig<T> {
    /**
     * Key as it appears in settings.json minus the "github.copilot." prefix.
     * e.g. "advanced.debug.overrideProxyUrl"
     */
    readonly id: string;
    /**
     * The old key as it appears in settings.json minus the "github.copilot." prefix.
     */
    readonly oldId?: string;
    /**
     * This setting is present in package.json and is visible to the general public.
     */
    readonly isPublic: boolean;
    /**
     * The fully qualified id, e.g. "github.copilot.advanced.debug.overrideProxyUrl".
     * Use this with `affectsConfiguration` from the ConfigurationChangeEvent
     */
    readonly fullyQualifiedId: string;
    /**
     * The fully qualified old id, e.g. "github.copilot.advanced.debug.overrideProxyUrl".
     */
    readonly fullyQualifiedOldId?: string | undefined;
    /**
     * The `X` in `github.copilot.advanced.X` settings.
     */
    readonly advancedSubKey: string | undefined;
    /**
     * The default value (defined either in code for hidden settings, or in package.json for non-hidden settings)
     */
    readonly defaultValue: T;
    /**
     * Setting options
     */
    readonly options?: ConfigOptions;
    readonly validator?: IValidator<T>;
}
export declare const enum ConfigType {
    Simple = 0,
    ExperimentBased = 1
}
export interface ConfigOptions {
    readonly oldKey?: string;
    readonly valueIgnoredForExternals?: boolean;
}
export declare const enum ConfigTarget {
    Global = "global",
    Workspace = "workspace",
    WorkspaceFolder = "workspaceFolder"
}
export interface Config<T> extends BaseConfig<T> {
    readonly configType: ConfigType.Simple;
}
export interface ExperimentBasedConfig<T extends ExperimentBasedConfigType> extends BaseConfig<T> {
    readonly configType: ConfigType.ExperimentBased;
    readonly experimentName: string | undefined;
}
declare class ConfigRegistry {
    /**
     * A map of all registered configs, keyed by their full id, eg `github.copilot.advanced.debug.overrideProxyUrl`.
     */
    readonly configs: Map<string, Config<any> | ExperimentBasedConfig<any>>;
    registerConfig(config: Config<any> | ExperimentBasedConfig<any>): void;
}
export declare const globalConfigRegistry: ConfigRegistry;
export type ConfigurationValue = {
    value: any | undefined;
};
export type ConfigurationKeyValuePairs = [string, ConfigurationValue][];
export type ConfigurationMigrationFn = (value: any) => ConfigurationValue | ConfigurationKeyValuePairs | Promise<ConfigurationValue | ConfigurationKeyValuePairs>;
export type ConfigurationMigration = {
    key: string;
    migrateFn: ConfigurationMigrationFn;
};
export interface IConfigurationMigrationRegistry {
    registerConfigurationMigrations(configurationMigrations: ConfigurationMigration[]): void;
}
declare class ConfigurationMigrationRegistryImpl implements IConfigurationMigrationRegistry {
    readonly migrations: ConfigurationMigration[];
    private readonly _onDidRegisterConfigurationMigrations;
    readonly onDidRegisterConfigurationMigration: Event<ConfigurationMigration[]>;
    registerConfigurationMigrations(configurationMigrations: ConfigurationMigration[]): void;
}
export declare const ConfigurationMigrationRegistry: ConfigurationMigrationRegistryImpl;
export declare const HARD_TOOL_LIMIT = 128;
export declare const enum CHAT_MODEL {
    GPT41 = "gpt-4.1-2025-04-14",
    GPT4OMINI = "gpt-4o-mini",
    NES_XTAB = "copilot-nes-xtab",// xtab model hosted in prod in proxy
    CUSTOM_NES = "custom-nes",
    XTAB_4O_MINI_FINETUNED = "xtab-4o-mini-finetuned",
    GPT4OPROXY = "gpt-4o-instant-apply-full-ft-v66",
    SHORT_INSTANT_APPLY = "gpt-4o-instant-apply-full-ft-v66-short",
    CLAUDE_SONNET = "claude-sonnet-4.5",
    CLAUDE_37_SONNET = "claude-3.7-sonnet",
    DEEPSEEK_CHAT = "deepseek-chat",
    GEMINI_25_PRO = "gemini-2.5-pro",
    GEMINI_20_PRO = "gemini-2.0-pro-exp-02-05",
    GEMINI_FLASH = "gemini-2.0-flash-001",
    O1 = "o1",
    O3MINI = "o3-mini",
    O1MINI = "o1-mini",
    EXPERIMENTAL = "experimental-01"
}
export declare enum AuthProviderId {
    GitHub = "github",
    GitHubEnterprise = "github-enterprise",
    Microsoft = "microsoft"
}
export declare enum AuthPermissionMode {
    Default = "default",
    Minimal = "minimal"
}
export declare enum AzureAuthMode {
    EntraId = "entraId",
    ApiKey = "apiKey"
}
export declare namespace AzureAuthMode {
    /** Microsoft authentication provider ID for VS Code authentication API */
    const MICROSOFT_AUTH_PROVIDER = "microsoft";
    /** Azure Cognitive Services scope for Entra ID authentication */
    const COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default";
}
export type CodeGenerationImportInstruction = {
    language?: string;
    file: string;
};
export type CodeGenerationTextInstruction = {
    language?: string;
    text: string;
};
export type CodeGenerationInstruction = CodeGenerationImportInstruction | CodeGenerationTextInstruction;
export type CommitMessageGenerationInstruction = {
    file: string;
} | {
    text: string;
};
export declare const XTabProviderId = "XtabProvider";
export declare namespace ConfigKey {
    /**
     * These settings are defined in the completions extensions and shared.
     *
     * We should not change the names of these settings without coordinating with Completions extension.
    */
    namespace Shared {
        /** Allows for overriding the base domain we use for making requests to the CAPI. This helps CAPI devs develop against a local instance. */
        const DebugOverrideProxyUrl: Config<string | undefined>;
        const DebugOverrideCAPIUrl: Config<string | undefined>;
        const DebugUseNodeFetchFetcher: Config<boolean>;
        const DebugUseNodeFetcher: Config<boolean>;
        const DebugUseElectronFetcher: Config<boolean>;
        const AuthProvider: Config<AuthProviderId>;
        const AuthPermissions: Config<AuthPermissionMode>;
    }
    /**
     * Advanced settings that are available for all users to configure.
     */
    namespace Advanced {
        /** Allows forcing a particular model.
         * Note: this should not be used while self-hosting because it might lead to
         * a fundamental different experience compared to our end-users.
        */
        const DebugPromptOverrideString: Config<string | null>;
        const DebugPromptOverrideFile: Config<string | null>;
        const WorkspacePrototypeAdoCodeSearchEndpointOverride: Config<string>;
        const FeedbackOnChange: Config<boolean>;
        const ReviewIntent: Config<boolean>;
        /** Enable the new notebook priorities experiment */
        const NotebookSummaryExperimentEnabled: Config<boolean>;
        /** Enable filtering variables by cell document symbols */
        const NotebookVariableFilteringEnabled: Config<boolean>;
        const TerminalToDebuggerPatterns: Config<string[]>;
        const WorkspaceRecordingEnabled: Config<boolean>;
        const EditRecordingEnabled: Config<boolean>;
        const CodeSearchAgentEnabled: Config<boolean | undefined>;
        const AgentTemperature: Config<number | undefined>;
        const EnableUserPreferences: Config<boolean>;
        const SummarizeAgentConversationHistoryThreshold: Config<number | undefined>;
        const AgentHistorySummarizationMode: Config<string | undefined>;
        const UseResponsesApiTruncation: Config<boolean | undefined>;
        const OmitBaseAgentInstructions: Config<boolean>;
        const CLIShowExternalSessions: Config<boolean>;
        const CLIPlanExitModeEnabled: Config<boolean>;
        const CLIAutoModelEnabled: Config<boolean>;
        const CLIModelDetailsEnabled: Config<boolean>;
        const CLIPlanCommandEnabled: Config<boolean>;
        const CLIChatLazyLoadSessionItem: Config<boolean>;
        const CLIAIGenerateBranchNames: Config<boolean>;
        const CLIForkSessionsEnabled: Config<boolean>;
        const CLIMCPServerEnabled: Config<boolean | undefined>;
        const CLIBranchSupport: Config<boolean>;
        const CLIIsolationOption: Config<boolean>;
        const CLIAutoCommitEnabled: Config<boolean>;
        const CLISessionController: Config<boolean>;
        const CLIThinkingEffortEnabled: Config<boolean>;
        const CLIRemoteEnabled: Config<boolean>;
        const CLISessionControllerForSessionsApp: Config<boolean>;
        const CLITerminalLinks: Config<boolean>;
        const RequestLoggerMaxEntries: Config<number>;
        /** Uses new expanded project labels */
        const ProjectLabelsExpanded: ExperimentBasedConfig<boolean>;
        /** Add project labels in default agent */
        const ProjectLabelsChat: ExperimentBasedConfig<boolean>;
        /** Add project labels in default agent */
        const ProjectLabelsInline: ExperimentBasedConfig<boolean>;
        const WorkspaceMaxLocalIndexSize: ExperimentBasedConfig<number>;
        const WorkspaceEnableCodeSearch: ExperimentBasedConfig<boolean>;
        const WorkspaceEnableCodeSearchExternalIngest: ExperimentBasedConfig<boolean>;
        const WorkspacePreferredEmbeddingsModel: ExperimentBasedConfig<string>;
        const NotebookAlternativeDocumentFormat: ExperimentBasedConfig<AlternativeNotebookFormat>;
        const UseAlternativeNESNotebookFormat: ExperimentBasedConfig<boolean>;
        const InlineChatReasoningEffort: ExperimentBasedConfig<string>;
        const InlineChatEnableThinking: ExperimentBasedConfig<boolean>;
        const InstantApplyShortModelName: ExperimentBasedConfig<string>;
        const InstantApplyShortContextLimit: ExperimentBasedConfig<number>;
        const PromptFileContext: ExperimentBasedConfig<boolean>;
        const DefaultToolsGrouped: ExperimentBasedConfig<boolean>;
        const Gpt5AlternativePatch: ExperimentBasedConfig<boolean>;
        const SearchSubagentToolEnabled: ExperimentBasedConfig<boolean>;
        /** Use the agentic proxy for the search subagent tool */
        const SearchSubagentUseAgenticProxy: ExperimentBasedConfig<boolean>;
        /** Model to use for the search subagent. When useAgenticProxy is true, defaults to 'vscode-agentic-search-router-a'. When false, defaults to the main agent model. */
        const SearchSubagentModel: ExperimentBasedConfig<string>;
        /** Maximum number of tool calls the search subagent can make */
        const SearchSubagentToolCallLimit: ExperimentBasedConfig<number>;
        /** Enable the thoroughness parameter on the search subagent tool, which adjusts turn limits based on requested thoroughness */
        const SearchSubagentThoroughnessEnabled: ExperimentBasedConfig<boolean>;
        const ExecutionSubagentToolEnabled: ExperimentBasedConfig<boolean>;
        const SkillToolEnabled: ExperimentBasedConfig<boolean>;
        /** When enabled, the get_changed_files tool is available to the agent. */
        const GetChangedFilesToolEnabled: ExperimentBasedConfig<boolean>;
        /** Model to use for the execution subagent */
        /** Use the agentic proxy for the execution subagent */
        const ExecutionSubagentUseAgenticProxy: ExperimentBasedConfig<boolean>;
        /** Model to use for the execution subagent. When useAgenticProxy is true, defaults to 'exec-subagent-router-a'. When false, defaults to the main agent model. */
        const ExecutionSubagentModel: ExperimentBasedConfig<string>;
        /** Maximum number of tool calls the execution subagent can make */
        const ExecutionSubagentToolCallLimit: ExperimentBasedConfig<number>;
        /** When enabled, the main agent's manage_todo_list tool is disabled and a background copilot-utility-small model maintains the todo list instead. */
        const BackgroundTodoAgentEnabled: ExperimentBasedConfig<boolean>;
        const InlineEditsTriggerOnEditorChangeAfterSeconds: ExperimentBasedConfig<number | undefined>;
        const InlineEditsNextCursorPredictionDisplayLine: ExperimentBasedConfig<boolean>;
        const InlineEditsNextCursorPredictionCurrentFileMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsRenameSymbolSuggestions: ExperimentBasedConfig<boolean>;
        const InlineEditsPreferredModel: ExperimentBasedConfig<string>;
        const InlineEditsAggressiveness: ExperimentBasedConfig<xtabPromptOptions.AggressivenessSetting>;
        const DiagnosticsContextProvider: ExperimentBasedConfig<boolean>;
        const ChatSessionContextProvider: ExperimentBasedConfig<boolean>;
        const Gemini3MultiReplaceString: ExperimentBasedConfig<boolean>;
        const BatchReplaceStringDescriptions: ExperimentBasedConfig<boolean>;
        const AgentOmitFileAttachmentContents: ExperimentBasedConfig<boolean>;
        /**
         * Settings for switch between old tools and new skills
         */
        const InstallExtensionSkillEnabled: ExperimentBasedConfig<boolean>;
        const ProjectSetupInfoSkillEnabled: ExperimentBasedConfig<boolean>;
        /**
         * When enabled, large tool results (above the threshold in bytes) are written to disk
         * instead of being included directly in the prompt. This helps manage context window usage.
         */
        const LargeToolResultsToDiskEnabled: ExperimentBasedConfig<boolean>;
        /**
         * The size threshold in bytes above which tool results are written to disk.
         * Only applies when LargeToolResultsToDiskEnabled is true.
         */
        const LargeToolResultsToDiskThreshold: ExperimentBasedConfig<number>;
        /** Simulate GitHub authentication failures for testing. Can't be TeamInternal because we lose these flags as part of testing. */
        const DebugGitHubAuthFailWith: Config<"NotAuthorized" | "RequestFailed" | "ParseFailed" | "GitHubLoginFailed" | "HTTP401" | "RateLimited" | null>;
        /** @deprecated Use ChatDebugFileLogging instead. Kept during experiment transition. */
        const AgentDebugLogEnabled: ExperimentBasedConfig<boolean>;
        const ChatDebugFileLogging: ExperimentBasedConfig<boolean>;
        const ChatDebugFileLoggingFlushInterval: Config<number>;
        const ChatDebugFileLoggingMaxRetainedSessionLogs: ExperimentBasedConfig<number>;
        const ChatDebugFileLoggingMaxSessionLogSizeMB: ExperimentBasedConfig<number>;
        const OTelEnabled: Config<boolean>;
        const OTelExporterType: Config<string>;
        const OTelOtlpEndpoint: Config<string>;
        const OTelCaptureContent: Config<boolean>;
        const OTelMaxAttributeSizeChars: Config<number>;
        const OTelOutfile: Config<string>;
        const OTelDbSpanExporter: Config<boolean>;
        /** Internal: override reasoning/thinking effort sent to model APIs (e.g. Responses API, Messages API). Used by evals. */
        const ReasoningEffortOverride: Config<string | null>;
        /** Enable extended (1 hour) prompt cache TTL on tools and system blocks for the Anthropic Messages API. Applied to Claude Opus 4.5/4.6/4.7 and Sonnet 4.5/4.6 variants. */
        const AnthropicExtendedCacheTtl: ExperimentBasedConfig<boolean>;
        /** Enable extended (1 hour) prompt cache TTL on the rolling message-level breakpoints (last cacheable user/tool-result blocks) for the Anthropic Messages API. Same model/location/subagent gating as {@link AnthropicExtendedCacheTtl}. */
        const AnthropicExtendedCacheTtlMessages: ExperimentBasedConfig<boolean>;
        /** Freeze the customizations-index variable (the `<instructions>`/`<skills>`/`<agents>` block) at the first turn of a conversation and reuse it on subsequent turns. Prevents the system prompt cache from being invalidated by per-turn churn — e.g. the active mode swapping which subagent entry appears in `<agents>`, or async experimentation flipping a `when`-gated skill. */
        const FreezeCustomizationsIndex: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabProviderModelConfiguration: Config<xtabPromptOptions.ModelConfiguration | null>;
    }
    /**
     * Internal settings those only team members can configure
     * Features should only be in this list temporarily, moving on to experimental to be accessible to early adopters.
    */
    namespace TeamInternal {
        /** Allows forcing a particular context window size.
         * This setting doesn't validate values so large windows may not be supported by the model.
         * Note: this should not be used while self-hosting because it might lead to
         * a fundamental different experience compared to our end-users.
         */
        const DebugOverrideChatMaxTokenNum: Config<number>;
        /** Allow reporting issue when clicking on the Unhelpful button
         * Requires a window reload to take effect
         */
        const DebugReportFeedback: Config<boolean>;
        const DisableRepoInfoTelemetry: Config<boolean>;
        const InlineEditsIgnoreCompletionsDisablement: Config<boolean>;
        const InlineEditsModelPickerEnabled: ExperimentBasedConfig<boolean>;
        const InlineEditsUseSlashModels: ExperimentBasedConfig<boolean>;
        const InlineEditsLogContextRecorderEnabled: Config<boolean>;
        const InlineEditsHideInternalInterface: Config<boolean>;
        const InlineEditsLogCancelledRequests: Config<boolean>;
        const InlineEditsNextCursorPredictionUrl: Config<string | undefined>;
        const InlineEditsNextCursorPredictionApiKey: Config<string | undefined>;
        const InlineEditsXtabProviderUrl: Config<string | undefined>;
        const InlineEditsXtabProviderApiKey: Config<string | undefined>;
        const InlineEditsNextCursorPredictionLintOptions: Config<Partial<xtabPromptOptions.LintOptions> | undefined>;
        const InlineEditsInlineCompletionsEnabled: Config<boolean>;
        const InlineEditsInlineCompletionsAdvanced: ExperimentBasedConfig<boolean>;
        /**
         * When enabled, a cached NES suggestion that was once rendered as an inline
         * (ghost text at cursor) suggestion will not be re-served from cache unless
         * it can again be rendered as an inline suggestion. The cache entry is not
         * evicted — it is simply gated until the cursor returns to an
         * inline-renderable position.
         */
        const InlineEditsNesMimicGhostTextBehavior: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabProviderUsePrediction: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabLanguageContextEnabledLanguages: Config<xtabPromptOptions.LanguageContextLanguages>;
        const InlineEditsXtabLanguageContextTraitsPosition: ExperimentBasedConfig<"before" | "after">;
        const InlineEditsDiagnosticsExplorationEnabled: Config<boolean | undefined>;
        const InternalWelcomeHintEnabled: Config<boolean>;
        const InlineChatUseCodeMapper: Config<boolean>;
        const EnablePromptRendererTracing: Config<boolean>;
        const DebugCollectFetcherTelemetry: ExperimentBasedConfig<boolean>;
        const DebugShowNetworkStatus: ExperimentBasedConfig<boolean>;
        const GeminiFunctionCallingMode: ExperimentBasedConfig<"required" | "none" | "auto" | "validated" | undefined>;
        const ModelProviderPreference: Config<string | undefined>;
        const UseVSCodeTelemetryLibForGH: ExperimentBasedConfig<boolean>;
        const DebugExpUseNodeFetchFetcher: ExperimentBasedConfig<boolean | undefined>;
        const DebugExpUseNodeFetcher: ExperimentBasedConfig<boolean | undefined>;
        const DebugExpUseElectronFetcher: ExperimentBasedConfig<boolean | undefined>;
        const InlineEditsAsyncCompletions: ExperimentBasedConfig<boolean>;
        const InlineEditsEagerBackupRequest: ExperimentBasedConfig<boolean>;
        const InlineEditsDebounceUseCoreRequestTime: ExperimentBasedConfig<boolean>;
        const InlineEditsYieldToCopilot: ExperimentBasedConfig<boolean>;
        const InlineEditsExcludedProviders: ExperimentBasedConfig<string | undefined>;
        const InlineEditsEnableGhCompletionsProvider: ExperimentBasedConfig<boolean>;
        const InlineEditsCompletionsUrl: ExperimentBasedConfig<string | undefined>;
        const InlineEditsDebounce: ExperimentBasedConfig<number>;
        const InlineEditsCacheCursorDistanceCheck: ExperimentBasedConfig<boolean>;
        const InlineEditsCacheDelay: ExperimentBasedConfig<number>;
        const InlineEditsSubsequentCacheDelay: ExperimentBasedConfig<number | undefined>;
        const InlineEditsSpeculativeRequestDelay: ExperimentBasedConfig<number | undefined>;
        const InlineEditsRebasedCacheDelay: ExperimentBasedConfig<number | undefined>;
        const InlineEditsAbsorbSubsequenceTyping: ExperimentBasedConfig<boolean>;
        const InlineEditsReverseAgreement: ExperimentBasedConfig<boolean>;
        const InlineEditsMaxImperfectAgreementLength: ExperimentBasedConfig<number>;
        const InlineEditsBackoffDebounceEnabled: ExperimentBasedConfig<boolean>;
        const InlineEditsExtraDebounceEndOfLine: ExperimentBasedConfig<number>;
        const InlineEditsSpeculativeRequests: ExperimentBasedConfig<xtabPromptOptions.SpeculativeRequestsEnablement>;
        const InlineEditsSpeculativeRequestsCursorPlacement: ExperimentBasedConfig<xtabPromptOptions.SpeculativeRequestsCursorPlacement>;
        const InlineEditsSpeculativeRequestsAutoExpandEditWindowLines: ExperimentBasedConfig<xtabPromptOptions.SpeculativeRequestsAutoExpandEditWindowLines>;
        const InlineEditsExtraDebounceInlineSuggestion: ExperimentBasedConfig<number>;
        const InlineEditsDebounceOnSelectionChange: ExperimentBasedConfig<number | undefined>;
        const InlineEditsTriggerOnEditorChangeStrategy: ExperimentBasedConfig<triggerOptions.DocumentSwitchTriggerStrategy>;
        const InlineEditsProviderId: ExperimentBasedConfig<string | undefined>;
        const InlineEditsUnification: ExperimentBasedConfig<boolean>;
        const InlineEditsNextCursorPredictionModelName: ExperimentBasedConfig<string | undefined>;
        const InlineEditsNextCursorPredictionUseEndpointProvider: Config<boolean>;
        const InlineEditsNextCursorPredictionMaxResponseTokens: ExperimentBasedConfig<number>;
        const InlineEditsNextCursorPredictionLintOptionsString: ExperimentBasedConfig<string | undefined>;
        const InlineEditsXtabProviderModelConfigurationString: ExperimentBasedConfig<string | undefined>;
        const InlineEditsXtabProviderDefaultModelConfigurationString: ExperimentBasedConfig<string | undefined>;
        const InlineEditsXtabProviderUseVaryingLinesAbove: ExperimentBasedConfig<boolean | undefined>;
        const InlineEditsXtabProviderNLinesAbove: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabProviderNLinesBelow: ExperimentBasedConfig<number | undefined>;
        const InlineEditsAutoExpandEditWindowLines: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabNRecentlyViewedDocuments: ExperimentBasedConfig<number>;
        const InlineEditsXtabRecentlyViewedDocumentsMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabRecentlyViewedIncludeLineNumbers: ExperimentBasedConfig<xtabPromptOptions.IncludeLineNumbersOption>;
        const InlineEditsNextCursorPredictionRecentSnippetsIncludeLineNumbers: ExperimentBasedConfig<xtabPromptOptions.IncludeLineNumbersOption>;
        const InlineEditsXtabDiffNEntries: ExperimentBasedConfig<number>;
        const InlineEditsXtabDiffMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabDiffMergeStrategy: ExperimentBasedConfig<xtabHistoryOptions.DiffHistoryMergeStrategy>;
        const InlineEditsXtabDiffMergeLineGap: ExperimentBasedConfig<number>;
        const InlineEditsXtabDiffMergeSplitAfterMs: ExperimentBasedConfig<number>;
        const InlineEditsXtabProviderEmitFastCursorLineChange: ExperimentBasedConfig<ResponseProcessor.EmitFastCursorLineChange>;
        const InlineEditsXtabIncludeViewedFiles: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabRecentlyViewedClippingStrategy: ExperimentBasedConfig<xtabPromptOptions.RecentFileClippingStrategy>;
        const InlineEditsXtabPageSize: ExperimentBasedConfig<number>;
        const InlineEditsXtabEditWindowMaxTokens: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabIncludeTagsInCurrentFile: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabIncludeLineNumbersInCurrentFile: ExperimentBasedConfig<xtabPromptOptions.IncludeLineNumbersOption>;
        const InlineEditsXtabIncludeCursorTagInCurrentFile: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabCurrentFileMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabPrioritizeAboveCursor: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabDiffOnlyForDocsInPrompt: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabDiffUseRelativePaths: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabNNonSignificantLinesToConverge: ExperimentBasedConfig<number>;
        const InlineEditsXtabNSignificantLinesToConverge: ExperimentBasedConfig<number>;
        const InlineEditsXtabEarlyCursorLineDivergenceCancellation: ExperimentBasedConfig<xtabPromptOptions.EarlyDivergenceCancellationMode>;
        const InlineEditsXtabLanguageContextEnabled: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabLanguageContextMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabIncludeNeighborFiles: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabNeighborFilesMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabGlobalBudgetEnabled: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabGlobalBudgetTotalTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabMaxMergeConflictLines: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabOnlyMergeConflictLines: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabDuplicateAdditionsMode: ExperimentBasedConfig<xtabPromptOptions.DuplicateAdditionsMode>;
        const InlineEditsXtabAggressivenessLevel: ExperimentBasedConfig<xtabPromptOptions.AggressivenessLevel | undefined>;
        const InlineEditsAggressivenessLowMinResponseTimeMs: ExperimentBasedConfig<number>;
        const InlineEditsAggressivenessMediumMinResponseTimeMs: ExperimentBasedConfig<number>;
        const InlineEditsAggressivenessHighDebounceMs: ExperimentBasedConfig<number>;
        const InlineEditsUserHappinessScoreConfigurationString: ExperimentBasedConfig<string | undefined>;
        const InlineEditsUndoInsertionFiltering: ExperimentBasedConfig<"v1" | "v2" | undefined>;
        const InlineEditsFilterOutEditsWithSubstrings: ExperimentBasedConfig<string>;
        const InlineEditsAllowImportChanges: ExperimentBasedConfig<ImportChanges>;
        const InlineEditsIgnoreWhenSuggestVisible: ExperimentBasedConfig<boolean>;
        const InlineEditsJointCompletionsProviderEnabled: ExperimentBasedConfig<boolean>;
        const InlineEditsJointCompletionsProviderStrategy: ExperimentBasedConfig<JointCompletionsProviderStrategy>;
        const InlineEditsJointCompletionsProviderTriggerChangeStrategy: ExperimentBasedConfig<JointCompletionsProviderTriggerChangeStrategy>;
        const InstantApplyModelName: ExperimentBasedConfig<string>;
        const VerifyTextDocumentChanges: ExperimentBasedConfig<boolean>;
        const UseAutoModeRouting: ExperimentBasedConfig<boolean>;
        /** Controls which `routing_method` value is sent to the auto-intent-service per request
         * when `UseAutoModeRouting` is enabled.
         * '' (empty/default) = omit `routing_method` and use the server default.
         * 'binary' = binary classifier v1.
         * 'hydra' = HYDRA multi-head capability matching.
         * For experiments, this setting selects the routing method only when router usage is enabled;
         * it does not by itself determine whether the router is called. */
        const AutoModeRoutingMethod: ExperimentBasedConfig<string>;
        /** Inline Completions */
        const InlineCompletionsDefaultDiagnosticsOptions: ExperimentBasedConfig<string | undefined>;
        const RecordExpectedEditEnabled: Config<boolean>;
        const RecordExpectedEditOnReject: Config<boolean>;
        const ReadFileCodeFences: ExperimentBasedConfig<boolean>;
        const EnableReadFileV2: ExperimentBasedConfig<boolean>;
        const AskAgent: ExperimentBasedConfig<boolean>;
        const RetryNetworkErrors: ExperimentBasedConfig<boolean>;
        const RetryServerErrorStatusCodes: ExperimentBasedConfig<string>;
        const FallbackNodeFetchOnNetworkProcessCrash: ExperimentBasedConfig<boolean>;
        const ChatRequestPowerSaveBlocker: ExperimentBasedConfig<boolean>;
        /** Enable WebSocket transport for Responses API requests. When enabled, uses a persistent WebSocket connection per conversation instead of individual HTTP requests. */
        const ResponsesApiWebSocketEnabled: ExperimentBasedConfig<boolean>;
        const DebugSimulateWebSocketResponse: Config<string>;
    }
    /**
     * Deprecated settings that are no longer in use.
     */
    namespace Deprecated {
        /** Model override for Plan agent — migrated to core `chat.planAgent.defaultModel` */
        const PlanAgentModel: Config<string>;
        const OllamaEndpoint: Config<string>;
        const AzureModels: Config<Record<string, {
            name: string;
            url: string;
            toolCalling: boolean;
            vision: boolean;
            maxInputTokens: number;
            maxOutputTokens: number;
            requiresAPIKey?: boolean;
            thinking?: boolean;
            streaming?: boolean;
            zeroDataRetentionEnabled?: boolean;
        }>>;
        const CustomOAIModels: Config<Record<string, {
            name: string;
            url: string;
            toolCalling: boolean;
            vision: boolean;
            maxInputTokens: number;
            maxOutputTokens: number;
            requiresAPIKey?: boolean;
            thinking?: boolean;
            streaming?: boolean;
            requestHeaders?: Record<string, string>;
            zeroDataRetentionEnabled?: boolean;
        }>>;
        const AzureAuthType: Config<AzureAuthMode>;
    }
    const Enable: Config<{
        [key: string]: boolean;
    }>;
    const selectedCompletionsModel: Config<string>;
    const RateLimitAutoSwitchToAuto: Config<boolean>;
    /** Use the Messages API instead of Chat Completions when supported */
    const UseAnthropicMessagesApi: ExperimentBasedConfig<boolean | undefined>;
    /** Context editing mode for Anthropic Messages API. 'off' disables context editing. */
    const AnthropicContextEditingMode: ExperimentBasedConfig<"off" | "clear-thinking" | "clear-tooluse" | "clear-both">;
    /** Configure reasoning summary style sent to Responses API */
    const ResponsesApiReasoningSummary: ExperimentBasedConfig<"off" | "detailed">;
    /** Enable context_management sent to Responses API */
    const ResponsesApiContextManagementEnabled: ExperimentBasedConfig<boolean>;
    /** Enable client-side prompt_cache_key (conversationId:modelFamily) sent to Responses API */
    const ResponsesApiPromptCacheKeyEnabled: ExperimentBasedConfig<boolean>;
    /** Enable updated prompt for 5.3Codex model */
    const Updated53CodexPromptEnabled: ExperimentBasedConfig<boolean>;
    /** Enable updated prompt for Claude Opus 4.7 model */
    const Claude47OpusPromptEnabled: ExperimentBasedConfig<boolean>;
    /** Enable get_changed_files tool for GPT-5.5 models */
    const EnableGpt55GetChangedFilesTool: ExperimentBasedConfig<boolean>;
    /** Enable read_file tool for GPT-5.5 models */
    const EnableGpt55ReadFileTool: ExperimentBasedConfig<boolean>;
    /** Enable economical search and edit instructions for GPT-5.5 models */
    const EnableGpt55EconomicalSearchAndEdit: ExperimentBasedConfig<boolean>;
    /** Enable GPT-5.4 large prompt sections for GPT-5.5 models */
    const EnableGpt55LargePromptSections: ExperimentBasedConfig<boolean>;
    const EnableChatImageUpload: ExperimentBasedConfig<boolean>;
    /** Enable Anthropic web search tool for BYOK Claude models */
    const AnthropicWebSearchToolEnabled: ExperimentBasedConfig<boolean>;
    /** Maximum number of web searches allowed per request */
    const AnthropicWebSearchMaxUses: Config<number>;
    /** List of domains to restrict web search results to */
    const AnthropicWebSearchAllowedDomains: Config<string[]>;
    /** List of domains to exclude from web search results */
    const AnthropicWebSearchBlockedDomains: Config<string[]>;
    /** User location for personalizing web search results */
    const AnthropicWebSearchUserLocation: Config<{
        city?: string;
        region?: string;
        country?: string;
        timezone?: string;
    } | null>;
    /** User provided code generation instructions for the chat */
    const CodeGenerationInstructions: Config<CodeGenerationInstruction[]>;
    const TestGenerationInstructions: Config<CodeGenerationInstruction[]>;
    const CommitMessageGenerationInstructions: Config<CommitMessageGenerationInstruction[]>;
    const PullRequestDescriptionGenerationInstructions: Config<CommitMessageGenerationInstruction[]>;
    /** Whether new flows around setting up tests are enabled */
    const SetupTests: Config<boolean>;
    /** Whether the Copilot TypeScript context provider is enabled and if how */
    const TypeScriptLanguageContext: ExperimentBasedConfig<boolean>;
    const TypeScriptLanguageContextMode: ExperimentBasedConfig<"fill" | "minimal" | "double" | "fillHalf">;
    const TypeScriptLanguageContextIncludeDocumentation: ExperimentBasedConfig<boolean>;
    const TypeScriptLanguageContextCacheTimeout: ExperimentBasedConfig<number>;
    const TypeScriptLanguageContextFix: ExperimentBasedConfig<boolean>;
    const TypeScriptLanguageContextInline: ExperimentBasedConfig<boolean>;
    const UseInstructionFiles: Config<boolean>;
    const ReviewAgent: Config<boolean>;
    const CodeFeedback: Config<boolean>;
    const CodeFeedbackInstructions: Config<CodeGenerationInstruction[]>;
    const UseProjectTemplates: Config<boolean>;
    const ExplainScopeSelection: Config<boolean>;
    const EnableCodeActions: Config<boolean>;
    const LocaleOverride: Config<string>;
    const TerminalChatLocation: Config<string>;
    const AutomaticRenameSuggestions: Config<boolean>;
    const TerminalToDebuggerEnabled: Config<boolean>;
    const CodeSearchAgentEnabled: Config<boolean>;
    const ClaudeAgentEnabled: Config<boolean>;
    const ClaudeAgentAllowDangerouslySkipPermissions: Config<boolean>;
    const ClaudeAgentAllowAutoPermissions: ExperimentBasedConfig<boolean>;
    const InlineEditsEnabled: ExperimentBasedConfig<boolean>;
    const InlineEditsEnableDiagnosticsProvider: ExperimentBasedConfig<boolean>;
    const InlineEditsAllowWhitespaceOnlyChanges: ExperimentBasedConfig<boolean>;
    /** Because of migration the value returned may be `boolean | "onlyWithEdit" | "jump" | undefined` */
    const InlineEditsNextCursorPredictionEnabled: ExperimentBasedConfig<boolean>;
    const NewWorkspaceCreationAgentEnabled: Config<boolean>;
    const NewWorkspaceUseContext7: Config<boolean>;
    const SummarizeAgentConversationHistory: Config<boolean>;
    const VirtualToolThreshold: ExperimentBasedConfig<number>;
    const CurrentEditorAgentContext: Config<boolean>;
    /** BYOK  */
    const AutoFixDiagnostics: ExperimentBasedConfig<boolean>;
    const NotebookFollowCellExecution: Config<boolean>;
    const UseAlternativeNESNotebookFormat: ExperimentBasedConfig<boolean>;
    const CustomInstructionsInSystemMessage: Config<boolean>;
    const EnableAlternateGptPrompt: ExperimentBasedConfig<boolean>;
    const EnableAlternateGeminiModelFPrompt: ExperimentBasedConfig<boolean>;
    const EnableOrganizationCustomAgents: Config<boolean>;
    const EnableOrganizationInstructions: Config<boolean>;
    const CompletionsFetcher: ExperimentBasedConfig<FetcherId | undefined>;
    const NextEditSuggestionsFetcher: ExperimentBasedConfig<FetcherId | undefined>;
    const GitHubMcpEnabled: ExperimentBasedConfig<boolean>;
    const GitHubMcpToolsets: Config<string[]>;
    const GitHubMcpReadonly: Config<boolean>;
    const GitHubMcpLockdown: Config<boolean>;
    type GitHubMcpChannelValue = 'stable' | 'insiders';
    const GitHubMcpChannel: Config<GitHubMcpChannelValue>;
    const BackgroundAgentEnabled: Config<boolean>;
    const CloudAgentEnabled: Config<boolean>;
    const AdditionalReadAccessPaths: Config<string[]>;
    const SwitchAgentEnabled: ExperimentBasedConfig<boolean>;
    /** Additional tools to enable for the Plan agent (additive to base tools) */
    const PlanAgentAdditionalTools: Config<string[]>;
    /** Model override for Implement agent (empty = use default) */
    const ImplementAgentModel: Config<string>;
    /** Additional tools to enable for the Ask agent (additive to base tools) */
    const AskAgentAdditionalTools: Config<string[]>;
    /** Model override for Ask agent (empty = use default) */
    const AskAgentModel: Config<string>;
    /** Whether the Explore (Code Research) subagent is enabled */
    const ExploreAgentEnabled: ExperimentBasedConfig<boolean>;
    /** Model override for Explore (Code Research) agent — reads from core `chat.exploreAgent.defaultModel` */
    const ExploreAgentModel: Config<string>;
    const ViewImageToolEnabled: ExperimentBasedConfig<boolean>;
    /** Enable local session search index — tracks sessions locally and enables chronicle commands.*/
    const LocalIndexEnabled: ExperimentBasedConfig<boolean>;
}
export declare function getAllConfigKeys(): string[];
export declare function registerNextEditProviderId(providerId: string): string;
export {};
//# sourceMappingURL=configurationService.d.ts.map