import type { StackEndpoint } from "./stack.js";
export interface SecretsSender {
    send(command: unknown): Promise<unknown>;
}
export declare function upsertLocalSecret(secretId: string, value: Record<string, string>, client?: SecretsSender): Promise<void>;
export declare function probeTcp(port: number, opts?: {
    host?: string;
    timeoutMs?: number;
}): Promise<boolean>;
export declare function hostPortsOf(endpoints: ReadonlyArray<Pick<StackEndpoint, "url" | "probe">>): number[];
export interface PortHolder {
    kind: "container" | "process";
    name: string;
}
export interface PortConflict {
    port: number;
    holder: PortHolder | null;
}
export declare function parseDockerPsPorts(output: string, ignorePrefix: string): Map<number, string>;
export interface PortConflictIo {
    dockerPs: () => string;
    processOn: (port: number) => string | null;
    listening: (port: number) => Promise<boolean>;
}
export declare function findPortConflicts(ports: readonly number[], ignorePrefix: string, io?: PortConflictIo): Promise<PortConflict[]>;
export declare function describePortConflicts(conflicts: readonly PortConflict[], moveHints?: ReadonlyMap<number, string>): string;
