import type { BaseArgs, BaseConfig, ExtensionInfo, ICallable, Report } from './types';
import type { Command, Config, ExtendedOption } from "../config";
import { Logger } from "../logger";
import { getHooks } from './hooks';
import { withConfigDefaults, withConfigScope } from './decorators';
export * from './types';
export { getHooks, withConfigDefaults, withConfigScope };
type Behavior = {
    isDefaultCommand?: boolean;
};
export declare class BaseProgram<TConfig extends BaseConfig = BaseConfig, TArgs extends BaseArgs = BaseArgs> {
    static is(program: BaseProgram): boolean;
    readonly name: string;
    readonly command: Command;
    readonly config: Config<TConfig>;
    readonly logger: Logger;
    readonly options: ExtendedOption[];
    get report(): Report;
    protected modules: ICallable[];
    protected extensions: (string | ExtensionInfo)[];
    private _report;
    private parent;
    private behavior;
    constructor(config?: BaseConfig & TConfig, behavior?: Behavior);
    init(args: BaseArgs, parent?: BaseProgram): Promise<void>;
    apply(program?: BaseProgram): void;
    parse(args: string[]): Promise<Command>;
    action(_args: TArgs): Promise<void>;
    args(args: Hash): TArgs;
    addModule(module: ICallable): void;
    private resolveConfig;
    private hookConfig;
    private _action;
    private normalizeExtensions;
    private resolveExtensions;
}
