declare const AGENTS: {
    npm: {
        run: (args: string[]) => string;
        install: string;
        frozen: string;
        global: string;
        add: string;
        upgrade: string;
        'upgrade-interactive': null;
    };
    yarn: {
        run: string;
        install: string;
        frozen: string;
        global: string;
        add: string;
        upgrade: string;
        'upgrade-interactive': string;
    };
    pnpm: {
        run: (args: string[]) => string;
        install: string;
        frozen: string;
        global: string;
        add: string;
        upgrade: string;
        'upgrade-interactive': string;
    };
};
declare type Agent = keyof typeof AGENTS;
declare type Command = keyof typeof AGENTS.npm;

declare function getCommand(agent: Agent, commnad: Command, args?: string[]): string;
declare function parseNi(agent: Agent, args: string[], hasLock?: boolean): string;
declare function parseNr(agent: Agent, args: string[]): string;
declare function parseNu(agent: Agent, args: string[]): string;

interface Config {
    defaultAgent: Agent | 'prompt';
    globalAgent: Agent;
}
declare function getConfig(): Config;
declare function getDefaultAgent(): "npm" | "pnpm" | "yarn" | "prompt";
declare function getGlobalAgent(): "npm" | "pnpm" | "yarn";

interface DetectOptions {
    autoInstall?: boolean;
}
declare function detect({ autoInstall }: DetectOptions): Promise<"npm" | "pnpm" | "yarn" | null>;

declare type Runner = (agent: Agent, args: string[], hasLock?: boolean) => Promise<string | undefined> | string | undefined;
declare function runCli(fn: Runner, options?: DetectOptions): Promise<void>;
declare function run(fn: Runner, args: string[], options?: DetectOptions): Promise<void>;

declare function remove<T>(arr: T[], v: T): T[];
declare function exclude<T>(arr: T[], v: T): T[];
declare function cmdExists(cmd: string): boolean;

export { DetectOptions, Runner, cmdExists, detect, exclude, getCommand, getConfig, getDefaultAgent, getGlobalAgent, parseNi, parseNr, parseNu, remove, run, runCli };
