import { BaseExecutionContext } from '../../execution/base.js';
import { LocalExecutionContext } from '../../execution/local.js';
import type { CommandExecutor, CommandOptions, CommandResult, ExecutionCapability, ExecutionEnvironment, ExecutionRoutingStrategy, HybridExecutionContextConfig, RemoteTarget } from '../../types/connector/index.js';
import { RemoteExecutionContext } from './remote.js';
export interface HybridExecutionContextOptions {
    id: string;
    local: {
        cwd: string;
        fsAccess?: boolean;
        envVars?: Record<string, string>;
        capabilities?: ExecutionCapability[];
        shell?: string;
    };
    remotes: RemoteTarget[];
    routingStrategy?: ExecutionRoutingStrategy;
}
export declare class HybridExecutionContext extends BaseExecutionContext implements CommandExecutor {
    readonly id: string;
    readonly environment: ExecutionEnvironment;
    private localCtx;
    private remoteCtxs;
    private remoteTargets;
    private routingStrategy;
    private roundRobinIndex;
    constructor(options: HybridExecutionContextOptions);
    protected doInitialize(): Promise<void>;
    protected doTeardown(): Promise<void>;
    getLocal(): LocalExecutionContext;
    getRemote(remoteId: string): RemoteExecutionContext | undefined;
    getRemotes(): RemoteExecutionContext[];
    getRoutingStrategy(): ExecutionRoutingStrategy;
    setRoutingStrategy(strategy: ExecutionRoutingStrategy): void;
    connectAllRemotes(): Promise<void>;
    disconnectAllRemotes(): Promise<void>;
    executeCommand(command: string, args?: string[], options?: CommandOptions): Promise<CommandResult>;
    toConfig(): HybridExecutionContextConfig;
    private getFirstConnectedRemote;
    private getRoundRobinTargets;
}
//# sourceMappingURL=hybrid.d.ts.map