import { MachinePresetResources, ServerBackgroundWorker, WorkerManifest } from "@trigger.dev/core/v3";
import { TaskRunProcess } from "../executions/taskRunProcess.js";
export type TaskRunProcessPoolOptions = {
    env: Record<string, string>;
    cwd: string;
    enableProcessReuse: boolean;
    maxPoolSize?: number;
    maxExecutionsPerProcess?: number;
};
export declare class TaskRunProcessPool {
    private availableProcessesByVersion;
    private busyProcessesByVersion;
    private readonly options;
    private readonly maxPoolSize;
    private readonly maxExecutionsPerProcess;
    private readonly executionCountsPerProcess;
    private readonly deprecatedVersions;
    private readonly idleTimers;
    private static readonly IDLE_TIMEOUT_MS;
    constructor(options: TaskRunProcessPoolOptions);
    deprecateVersion(version: string): void;
    getProcess(workerManifest: WorkerManifest, serverWorker: ServerBackgroundWorker, machineResources: MachinePresetResources, env?: Record<string, string>, cwd?: string): Promise<{
        taskRunProcess: TaskRunProcess;
        isReused: boolean;
    }>;
    returnProcess(process: TaskRunProcess, version: string, options?: {
        forceKill?: boolean;
    }): Promise<void>;
    private findReusableProcess;
    private shouldReuseProcess;
    private isProcessHealthy;
    private startIdleTimer;
    private clearIdleTimer;
    private killProcess;
    shutdown(): Promise<void>;
    getStats(): {
        availableCount: number;
        busyCount: number;
        totalCount: number;
        byVersion: Record<string, {
            available: number;
            busy: number;
        }>;
    };
}
