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 { NextCursorLinePrediction } from '../../inlineEdits/common/dataTypes/nextCursorLinePrediction';
import * as xtabPromptOptions from '../../inlineEdits/common/dataTypes/xtabPromptOptions';
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): 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;
    protected _isTeamMember: boolean;
    private _teamMemberUsername;
    constructor(copilotTokenStore?: ICopilotTokenStore);
    getConfigMixedWithDefaults<T>(key: Config<T>): T;
    getDefaultValue<T>(key: BaseConfig<T>): T;
    private _setUserInfo;
    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): 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;
    protected _isUsingTeamDefault(key: BaseConfig<any>): boolean;
    /**
     * Extracts a normalized value (0-1) from a string
     */
    static _extractHashValue(input: string): number;
    /**
     * Checks if the key is configured by the user in any of the configuration scopes.
     */
    isConfigured<T>(key: BaseConfig<T>, scope?: ConfigurationScope): boolean;
}
export type DefaultValueWithTeamValue<T> = {
    defaultValue: T;
    teamDefaultValue: T;
    /**
     * Roll out `teamDefaultValue` to a percentage of the team.
     * This is a number between 0 and 1.
     * 0 means 0% of the team will get `teamDefaultValue`
     * 1 means 100% of the team will get `teamDefaultValue`
     * undefined means 100% of the team will get `teamDefaultValue`
     */
    teamDefaultValueRollout?: number;
};
export type DefaultValueWithTeamAndInternalValue<T> = DefaultValueWithTeamValue<T> & {
    internalDefaultValue: T;
};
export declare namespace ConfigValueValidators {
    function isDefaultValueWithTeamValue<T>(value: T | DefaultValueWithTeamValue<T>): value is DefaultValueWithTeamValue<T>;
    function isDefaultValueWithTeamAndInternalValue<T>(value: T | DefaultValueWithTeamAndInternalValue<T>): value is DefaultValueWithTeamAndInternalValue<T>;
}
export interface BaseConfig<T> {
    /**
     * Key as it appears in settings.json minus the "github.copilot." prefix.
     * e.g. "advanced.debug.overrideProxyUrl"
     */
    readonly id: 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 `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 | DefaultValueWithTeamValue<T> | DefaultValueWithTeamAndInternalValue<T>;
    /**
     * Setting options
     */
    readonly options?: ConfigOptions;
    readonly validator?: IValidator<T>;
}
export declare const enum ConfigType {
    Simple = 0,
    ExperimentBased = 1
}
export interface ConfigOptions {
    readonly internal?: boolean;
    readonly valueIgnoredForExternals?: boolean;
}
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;
/**
 * Will define a setting which will be backed by an experiment. The experiment variable will be:
 * ```
 *     config.github.copilot.${key}
 *
 * e.g.
 *     config.github.copilot.chat.advanced.inlineEdits.internalRollout
 * ```
 */
export declare function defineExpSetting<T extends ExperimentBasedConfigType>(key: string, defaultValue: T | DefaultValueWithTeamValue<T> | DefaultValueWithTeamAndInternalValue<T>, options?: ConfigOptions, expOptions?: {
    experimentName?: string;
}): ExperimentBasedConfig<T>;
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-3.5-sonnet",
    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 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>;
    }
    /**
     * Internal and debugging settings that should be hidden from users.
     *
     * Features should only be in this list temporarily, moving on to experimental to be accessible to early adopters.
    */
    namespace Internal {
        /** 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 DebugOverrideChatEngine: Config<string | undefined>;
        /** 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 DebugCollectFetcherTelemetry: ExperimentBasedConfig<boolean>;
        const DebugExpUseNodeFetchFetcher: ExperimentBasedConfig<boolean | undefined>;
        const DebugExpUseNodeFetcher: ExperimentBasedConfig<boolean | undefined>;
        const DebugExpUseElectronFetcher: ExperimentBasedConfig<boolean | undefined>;
        const GitHistoryRelatedFilesUsingEmbeddings: Config<boolean>;
        /** 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 WorkspaceEnableFullWorkspace: ExperimentBasedConfig<boolean>;
        const WorkspaceEnableCodeSearch: ExperimentBasedConfig<boolean>;
        const WorkspaceEnableEmbeddingsSearch: ExperimentBasedConfig<boolean>;
        const WorkspacePreferredEmbeddingsModel: ExperimentBasedConfig<string>;
        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 NotebookAlternativeDocumentFormat: ExperimentBasedConfig<AlternativeNotebookFormat>;
        const UseAlternativeNESNotebookFormat: ExperimentBasedConfig<boolean>;
        const TerminalToDebuggerPatterns: Config<string[]>;
        const InlineEditsIgnoreCompletionsDisablement: Config<boolean>;
        const InlineEditsAsyncCompletions: ExperimentBasedConfig<boolean>;
        const InlineEditsDebounceUseCoreRequestTime: ExperimentBasedConfig<boolean>;
        const InlineEditsYieldToCopilot: ExperimentBasedConfig<boolean>;
        const InlineEditsExcludedProviders: ExperimentBasedConfig<string | undefined>;
        const InlineEditsEnableCompletionsProvider: ExperimentBasedConfig<boolean>;
        const InlineEditsEnableGhCompletionsProvider: ExperimentBasedConfig<boolean>;
        const InlineEditsCompletionsUrl: ExperimentBasedConfig<string | undefined>;
        const InlineEditsLogContextRecorderEnabled: Config<boolean>;
        const InlineEditsDebounce: ExperimentBasedConfig<number>;
        const InlineEditsCacheDelay: ExperimentBasedConfig<number>;
        const InlineEditsSubsequentCacheDelay: ExperimentBasedConfig<number | undefined>;
        const InlineEditsRebasedCacheDelay: ExperimentBasedConfig<number | undefined>;
        const InlineEditsBackoffDebounceEnabled: ExperimentBasedConfig<boolean>;
        const InlineEditsExtraDebounceEndOfLine: ExperimentBasedConfig<number>;
        const InlineEditsDebounceOnSelectionChange: ExperimentBasedConfig<number | undefined>;
        const InlineEditsProviderId: ExperimentBasedConfig<string | undefined>;
        const InlineEditsHideInternalInterface: Config<boolean>;
        const InlineEditsLogCancelledRequests: Config<boolean>;
        const InlineEditsUnification: ExperimentBasedConfig<boolean>;
        const InlineEditsTriggerOnEditorChangeAfterSeconds: ExperimentBasedConfig<number | undefined>;
        const InlineEditsNextCursorPredictionDisplayLine: ExperimentBasedConfig<boolean>;
        const InlineEditsNextCursorPredictionCurrentFileMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsNextCursorPredictionEnabled: ExperimentBasedConfig<boolean | NextCursorLinePrediction | undefined>;
        const InlineEditsNextCursorPredictionModelName: ExperimentBasedConfig<string | undefined>;
        const InlineEditsNextCursorPredictionUrl: Config<string | undefined>;
        const InlineEditsNextCursorPredictionApiKey: Config<string | undefined>;
        const InlineEditsXtabProviderUrl: Config<string | undefined>;
        const InlineEditsXtabProviderApiKey: Config<string | undefined>;
        const InlineEditsXtabProviderModelConfiguration: Config<xtabPromptOptions.ModelConfiguration | undefined>;
        const InlineEditsXtabProviderModelConfigurationString: ExperimentBasedConfig<string | undefined>;
        const InlineEditsXtabProviderDefaultModelConfigurationString: ExperimentBasedConfig<string | undefined>;
        const InlineEditsXtabProviderModelName: ExperimentBasedConfig<string | undefined>;
        const InlineEditsInlineCompletionsEnabled: Config<boolean>;
        const InlineEditsXtabProviderUsePrediction: Config<boolean>;
        const InlineEditsXtabProviderUseVaryingLinesAbove: ExperimentBasedConfig<boolean | undefined>;
        const InlineEditsXtabProviderNLinesAbove: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabProviderNLinesBelow: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabProviderRetryWithNMoreLinesBelow: ExperimentBasedConfig<number | undefined>;
        const InlineEditsAutoExpandEditWindowLines: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabNRecentlyViewedDocuments: ExperimentBasedConfig<number>;
        const InlineEditsXtabRecentlyViewedDocumentsMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabDiffNEntries: ExperimentBasedConfig<number>;
        const InlineEditsXtabDiffMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabProviderEmitFastCursorLineChange: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabIncludeViewedFiles: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabPageSize: ExperimentBasedConfig<number>;
        const InlineEditsXtabEditWindowMaxTokens: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabIncludeTagsInCurrentFile: 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 InlineEditsXtabLanguageContextEnabled: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabLanguageContextEnabledLanguages: Config<xtabPromptOptions.LanguageContextLanguages>;
        const InlineEditsXtabLanguageContextMaxTokens: ExperimentBasedConfig<number>;
        const InlineEditsXtabUseUnifiedModel: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabProviderUseSimplifiedPrompt: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabProviderUseXtab275Prompting: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabUseNes41Miniv3Prompting: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabCodexV21NesUnified: ExperimentBasedConfig<boolean>;
        const InlineEditsXtabMaxMergeConflictLines: ExperimentBasedConfig<number | undefined>;
        const InlineEditsXtabOnlyMergeConflictLines: ExperimentBasedConfig<boolean>;
        const InlineEditsUndoInsertionFiltering: ExperimentBasedConfig<"v1" | "v2" | undefined>;
        const InlineEditsDiagnosticsExplorationEnabled: Config<boolean | undefined>;
        const EditSourceTrackingShowDecorations: Config<boolean>;
        const EditSourceTrackingShowStatusBar: Config<boolean>;
        const WorkspaceRecordingEnabled: Config<boolean>;
        const EditRecordingEnabled: Config<boolean>;
        const InternalWelcomeHintEnabled: Config<boolean>;
        /** Configure temporal context max age */
        const TemporalContextMaxAge: ExperimentBasedConfig<number>;
        const TemporalContextPreferSameLang: ExperimentBasedConfig<boolean>;
        const CodeSearchAgentEnabled: Config<boolean | undefined>;
        const AgentTemperature: Config<number | undefined>;
        const InlineChatUseCodeMapper: Config<boolean>;
        const InstantApplyModelName: ExperimentBasedConfig<string>;
        const InstantApplyShortModelName: ExperimentBasedConfig<string>;
        const InstantApplyShortContextLimit: ExperimentBasedConfig<number>;
        const EnableUserPreferences: Config<boolean>;
        const SummarizeAgentConversationHistoryThreshold: Config<number | undefined>;
        const AgentHistorySummarizationMode: Config<string | undefined>;
        const AgentHistorySummarizationWithPromptCache: ExperimentBasedConfig<boolean | undefined>;
        const AgentHistorySummarizationForceGpt41: ExperimentBasedConfig<boolean | undefined>;
        const UseResponsesApiTruncation: Config<boolean | undefined>;
        const EnableReadFileV2: ExperimentBasedConfig<boolean>;
        const AskAgent: ExperimentBasedConfig<boolean>;
        const VerifyTextDocumentChanges: ExperimentBasedConfig<boolean>;
        const OmitBaseAgentInstructions: Config<boolean>;
        const PromptFileContext: ExperimentBasedConfig<boolean>;
        const DefaultToolsGrouped: ExperimentBasedConfig<boolean>;
        const VirtualToolEmbeddingRanking: ExperimentBasedConfig<boolean>;
        const MultiReplaceStringGrok: ExperimentBasedConfig<boolean>;
        const EnableClaudeCodeAgent: Config<string | boolean | undefined>;
        const ClaudeCodeDebugEnabled: Config<boolean>;
        const CopilotCLIEnabled: Config<boolean | undefined>;
        const CLIIsolationEnabled: Config<boolean | undefined>;
        const Gpt5AlternativePatch: ExperimentBasedConfig<boolean>;
    }
    const Enable: Config<{
        [key: string]: boolean;
    }>;
    /** Use the Responses API instead of Chat Completions when supported */
    const UseResponsesApi: ExperimentBasedConfig<boolean | undefined>;
    /** Configure reasoning effort sent to Responses API */
    const ResponsesApiReasoningEffort: ExperimentBasedConfig<"default" | "low" | "medium" | "high">;
    /** Configure reasoning summary style sent to Responses API */
    const ResponsesApiReasoningSummary: ExperimentBasedConfig<"off" | "detailed">;
    const EnableChatImageUpload: ExperimentBasedConfig<boolean>;
    /** Enable extended thinking for Anthropic models that support it */
    const AnthropicThinkingEnabled: ExperimentBasedConfig<boolean>;
    /** Maximum thinking tokens for Anthropic extended thinking. If set, overrides the default calculation. */
    const MaxAnthropicThinkingTokens: Config<number | null>;
    /** 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>;
    /** Enable memory tool */
    const MemoryToolEnabled: ExperimentBasedConfig<boolean>;
    /** Add context from recently used files */
    const TemporalContextInlineChatEnabled: ExperimentBasedConfig<boolean>;
    const TemporalContextEditsEnabled: ExperimentBasedConfig<boolean>;
    /** User provided code generation instructions for the chat */
    const CodeGenerationInstructions: Config<CodeGenerationInstruction[]>;
    const TestGenerationInstructions: Config<CodeGenerationInstruction[]>;
    const CommitMessageGenerationInstructions: Config<CommitMessageGenerationInstruction[]>;
    const PullRequestDescriptionGenerationInstructions: Config<CommitMessageGenerationInstruction[]>;
    /** Show code lens "Generate tests" when we have test coverage info about this symbol and it's not covered */
    const GenerateTestsCodeLens: Config<boolean>;
    /** 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 GitHistoryRelatedFilesProvider: Config<boolean>;
    const Test2SrcRelatedFilesProvider: Config<boolean>;
    const TerminalToDebuggerEnabled: Config<boolean>;
    const CodeSearchAgentEnabled: Config<boolean>;
    const InlineEditsEnabled: ExperimentBasedConfig<boolean>;
    const InlineEditsEnableDiagnosticsProvider: ExperimentBasedConfig<boolean>;
    const InlineEditsAllowWhitespaceOnlyChanges: ExperimentBasedConfig<boolean>;
    const NewWorkspaceCreationAgentEnabled: Config<boolean>;
    const NewWorkspaceUseContext7: Config<boolean>;
    const SummarizeAgentConversationHistory: Config<boolean>;
    const VirtualToolThreshold: ExperimentBasedConfig<number>;
    const CurrentEditorAgentContext: Config<boolean>;
    /** BYOK  */
    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;
    }>>;
    const CustomOAIModels: Config<Record<string, {
        name: string;
        url: string;
        toolCalling: boolean;
        vision: boolean;
        maxInputTokens: number;
        maxOutputTokens: number;
        requiresAPIKey?: boolean;
        thinking?: boolean;
        requestHeaders?: Record<string, string>;
    }>>;
    const AutoFixDiagnostics: ExperimentBasedConfig<boolean>;
    const NotebookFollowCellExecution: Config<boolean>;
    const UseAlternativeNESNotebookFormat: ExperimentBasedConfig<boolean>;
    const CustomInstructionsInSystemMessage: Config<boolean>;
    const EnableAlternateGptPrompt: ExperimentBasedConfig<boolean>;
    const CompletionsFetcher: ExperimentBasedConfig<FetcherId | undefined>;
    const NextEditSuggestionsFetcher: ExperimentBasedConfig<FetcherId | undefined>;
}
export declare function getAllConfigKeys(): string[];
export declare function registerNextEditProviderId(providerId: string): string;
export {};
//# sourceMappingURL=configurationService.d.ts.map