import { WorkerManifest } from "@trigger.dev/core/v3";
import { type WorkloadClientToServerEvents, type WorkloadServerToClientEvents } from "@trigger.dev/core/v3/workers";
import { type Socket } from "socket.io-client";
import { SendDebugLogOptions } from "./logger.js";
import { EnvObject } from "std-env";
type ManagedRunControllerOptions = {
    workerManifest: WorkerManifest;
    env: EnvObject;
};
export type SupervisorSocket = Socket<WorkloadServerToClientEvents, WorkloadClientToServerEvents>;
export declare class ManagedRunController {
    private readonly env;
    private readonly workerManifest;
    private readonly httpClient;
    private readonly warmStartClient;
    private socket;
    private readonly logger;
    private readonly taskRunProcessProvider;
    private warmStartEnabled;
    private warmStartCount;
    private restoreCount;
    private notificationCount;
    private lastNotificationAt;
    private currentExecution;
    private processKeepAliveEnabled;
    private processKeepAliveMaxExecutionCount;
    constructor(opts: ManagedRunControllerOptions);
    get metrics(): {
        processKeepAlive: {
            enabled: boolean;
            executionCount: number;
            maxExecutionCount: number;
            hasPersistentProcess: boolean;
        };
        warmStartCount: number;
        restoreCount: number;
        notificationCount: number;
        lastNotificationAt: Date | null;
    };
    get runnerId(): string;
    get successExitCode(): number;
    get failureExitCode(): number;
    get workerApiUrl(): string;
    get workerInstanceName(): string;
    private subscribeToRunNotifications;
    private unsubscribeFromRunNotifications;
    private get runFriendlyId();
    private get snapshotFriendlyId();
    private lockedRunExecution;
    private startRunExecution;
    private waitForNextRunLock;
    /**
     *  This will eagerly create a new run execution. It will never throw, but may exit
     *  the process on any errors or when no runs are available after the configured duration.
     */
    private waitForNextRun;
    private exitProcess;
    createSupervisorSocket(): SupervisorSocket;
    start(): void;
    cancelRunsAndExitProcess(): Promise<void>;
    sendDebugLog(opts: SendDebugLogOptions): void;
}
export {};
