type SettingsOptions = {
    required?: boolean;
    trimWhiteSpace?: boolean;
};
declare function getSetting(key: string, options?: SettingsOptions): string | undefined;
declare function getNumberSetting(key: string, options: SettingsOptions & {
    required: true;
}): number;
declare function getNumberSetting(key: string, options: SettingsOptions): number | undefined;
declare function getBooleanSetting(key: string, options: SettingsOptions & {
    required: true;
}): boolean;
declare function getBooleanSetting(key: string, options: SettingsOptions): boolean | undefined;
declare function getJSONSetting<T = unknown>(key: string, options: SettingsOptions & {
    required: true;
}): T;
declare function getJSONSetting<T = unknown>(key: string, options: SettingsOptions): T | undefined;

type SettingType = 'string' | 'number' | 'boolean' | 'json';
type SettingTypeValue<T extends SettingType> = T extends 'boolean' ? boolean : T extends 'string' ? string : T extends 'number' ? number : T extends 'json' ? unknown : never;
type SettingDef<T extends SettingType> = {
    type: T;
    description: string;
    required?: boolean;
    default?: SettingTypeValue<T>;
};
type BooleanArgDef = SettingDef<'boolean'>;
type StringArgDef = SettingDef<'string'>;
type NumberArgDef = SettingDef<'number'>;
type JSONArgDef = SettingDef<'json'>;
type SettingsDef = Record<string, BooleanArgDef | StringArgDef | NumberArgDef | JSONArgDef>;
type ParsedSettings<T extends SettingsDef> = {
    [K in keyof T]: T[K]['required'] extends true ? SettingTypeValue<T[K]['type']> : SettingTypeValue<T[K]['type']> | undefined;
};
type MetaDef = {
    name: string;
    version?: string;
    description?: string;
};
type CommandDef<T extends SettingsDef> = {
    meta: MetaDef;
    settings: T;
    run: (ctx: {
        settings: ParsedSettings<T>;
    }) => void | Promise<void>;
};
declare function runPlugin<T extends SettingsDef>(options: CommandDef<T>): void;

export { type BooleanArgDef, type CommandDef, type JSONArgDef, type MetaDef, type NumberArgDef, type ParsedSettings, type SettingDef, type SettingType, type SettingTypeValue, type SettingsDef, type SettingsOptions, type StringArgDef, getBooleanSetting, getJSONSetting, getNumberSetting, getSetting, runPlugin };
