import { WorkerManifest } from "@trigger.dev/core/v3";
import { TaskRunProcess } from "../../executions/taskRunProcess.js";
import { RunnerEnv } from "./env.js";
import { RunLogger } from "./logger.js";
export interface TaskRunProcessProviderOptions {
    workerManifest: WorkerManifest;
    env: RunnerEnv;
    logger: RunLogger;
    processKeepAliveEnabled: boolean;
    processKeepAliveMaxExecutionCount: number;
}
export interface GetProcessOptions {
    taskRunEnv: Record<string, string>;
    isWarmStart?: boolean;
}
export declare class TaskRunProcessProvider {
    private readonly workerManifest;
    private readonly env;
    private readonly logger;
    private readonly processKeepAliveEnabled;
    private readonly processKeepAliveMaxExecutionCount;
    private readonly machineId;
    private persistentProcess;
    private executionCount;
    constructor(opts: TaskRunProcessProviderOptions);
    get hasPersistentProcess(): boolean;
    handleImmediateRetry(): Promise<void>;
    /**
     * Gets a TaskRunProcess, either by reusing an existing one or creating a new one
     */
    getProcess(opts: GetProcessOptions): Promise<TaskRunProcess>;
    /**
     * Returns a process after execution, handling keep-alive logic and cleanup
     */
    returnProcess(process: TaskRunProcess): Promise<void>;
    suspendProcess(flush: boolean, process?: TaskRunProcess): Promise<void>;
    /**
     * Handles process abort/kill scenarios
     */
    handleProcessAbort(process: TaskRunProcess): Promise<void>;
    killProcess(process: TaskRunProcess): Promise<void>;
    /**
     * Forces cleanup of any persistent process
     */
    cleanup(): Promise<void>;
    /**
     * Gets metrics about the provider state
     */
    get metrics(): {
        processKeepAlive: {
            enabled: boolean;
            executionCount: number;
            maxExecutionCount: number;
            hasPersistentProcess: boolean;
        };
    };
    private createTaskRunProcess;
    private buildProcessEnvironment;
    private shouldReusePersistentProcess;
    private shouldKeepProcessAlive;
    private cleanupProcess;
    private sendDebugLog;
}
