import * as package_manager_detector0 from "package-manager-detector";
import { Agent, Command, ResolvedCommand } from "package-manager-detector";
import { Buffer } from "node:buffer";
export * from "package-manager-detector/constants";
export * from "package-manager-detector/commands";

//#region src/config.d.ts
interface Config {
  defaultAgent: Agent | 'prompt';
  globalAgent: Agent;
  runAgent: 'node' | undefined;
  useSfw: boolean;
  catalog: boolean;
}
declare function getConfig(): Promise<Config>;
declare function getDefaultAgent(programmatic?: boolean): Promise<Agent | "prompt">;
declare function getGlobalAgent(): Promise<Agent>;
declare function getRunAgent(): Promise<"node" | undefined>;
declare function getUseSfw(): Promise<boolean>;
declare function getCatalog(): Promise<boolean>;
//#endregion
//#region src/detect.d.ts
interface DetectOptions {
  autoInstall?: boolean;
  programmatic?: boolean;
  cwd?: string;
  /**
   * Should use Volta when present
   *
   * @see https://volta.sh/
   * @default true
   */
  detectVolta?: boolean;
}
declare function detect({
  autoInstall,
  programmatic,
  cwd
}?: DetectOptions): Promise<package_manager_detector0.Agent | undefined>;
//#endregion
//#region src/runner.d.ts
interface RunnerContext {
  programmatic?: boolean;
  hasLock?: boolean;
  cwd?: string;
}
interface ExtendedResolvedCommand extends ResolvedCommand {
  cwd?: string;
}
interface RunOptions {
  /**
   * Called before agent detection and command execution.
   *
   * Useful for performing concrete, agent-agnostic operations.
   */
  onBeforeCommand?: (args: string[], ctx: Pick<RunnerContext, 'cwd' | 'programmatic'> & {
    /**
     * Skips subsequent command execution.
     *
     * This is useful for operations such as generating shell-completion scripts.
     */
    exit: () => void;
  }) => void | Promise<void>;
}
type Runner = (agent: Agent, args: string[], ctx?: RunnerContext) => Promise<ExtendedResolvedCommand | undefined> | ExtendedResolvedCommand | undefined;
declare function runCli(fn: Runner, options?: DetectOptions & RunOptions & {
  args?: string[];
}): Promise<void>;
declare function getCliCommand(fn: Runner, args: string[], options?: DetectOptions, cwd?: string): Promise<ExtendedResolvedCommand | undefined>;
declare function run(fn: Runner, args: string[], options?: DetectOptions & RunOptions): Promise<void>;
//#endregion
//#region src/parse.d.ts
declare class UnsupportedCommand extends Error {
  constructor({
    agent,
    command
  }: {
    agent: Agent;
    command: Command;
  });
}
declare function getCommand(agent: Agent, command: Command, args?: string[]): ExtendedResolvedCommand;
declare const parseNi: Runner;
declare const parseNr: Runner;
declare const parseNup: Runner;
declare const parseNd: Runner;
declare const parseNun: Runner;
declare const parseNlx: Runner;
declare const parseNa: Runner;
declare function serializeCommand(command?: ResolvedCommand): string | undefined;
//#endregion
//#region src/utils.d.ts
declare const CLI_TEMP_DIR: string;
declare function remove<T>(arr: T[], v: T): T[];
declare function exclude<T>(arr: T[], ...v: T[]): T[];
declare function cmdExists(cmd: string): boolean;
/**
 * Write file safely avoiding conflicts
 */
declare function writeFileSafe(path: string, data?: string | Buffer): Promise<boolean>;
declare function limitText(text: string, maxWidth: number): string;
declare function terminalLink(text: string, url: string, options?: {
  fallback?: (text: string, url: string) => string;
}): string;
declare function formatPackageWithUrl(pkg: string, url?: string, limits?: number): string;
declare namespace index_d_exports {
  export { CLI_TEMP_DIR, DetectOptions, ExtendedResolvedCommand, Runner, RunnerContext, UnsupportedCommand, cmdExists, detect, exclude, formatPackageWithUrl, getCatalog, getCliCommand, getCommand, getConfig, getDefaultAgent, getGlobalAgent, getRunAgent, getUseSfw, limitText, parseNa, parseNd, parseNi, parseNlx, parseNr, parseNun, parseNup, remove, run, runCli, serializeCommand, terminalLink, writeFileSafe };
}
//#endregion
export { CLI_TEMP_DIR, DetectOptions, ExtendedResolvedCommand, Runner, RunnerContext, UnsupportedCommand, cmdExists, detect, exclude, formatPackageWithUrl, getCatalog, getCliCommand, getCommand, getConfig, getDefaultAgent, getGlobalAgent, getRunAgent, getUseSfw, limitText, parseNa, parseNd, parseNi, parseNlx, parseNr, parseNun, parseNup, remove, run, runCli, serializeCommand, terminalLink, writeFileSafe };