import type { CloudDriver, ComputeStackOutputs, ComputeTarget, FindComputeTargetsOptions, ProvisionComputeOptions, RemoteDeployResult, RunRemoteDeployOptions, UploadReleaseOptions, UploadReleaseResult } from '@ts-cloud/core';
export interface AwsDriverOptions {
    region?: string;
}
/**
 * Local-state pin (parity with the Hetzner driver's shared-box support): a
 * project riding an instance whose tags belong to another project records
 * `{ "instanceId": "i-..." }` in `storage/cloud/state/<stack>.json`, and target
 * lookups trust that record when the tag scan finds nothing. Exported for
 * tests.
 */
export declare function readPinnedInstanceId(stackName: string): string | null;
export declare class AwsDriver implements CloudDriver {
    readonly name: 'aws';
    readonly usesCloudFormation = true;
    private region;
    constructor(options?: AwsDriverOptions);
    private resolveRegion;
    /**
     * Provision a single Ubuntu EC2 box for the Forge/PHP path — mirroring the
     * Hetzner driver, bypassing the heavy CloudFormation stack. Boots the shared
     * Ubuntu bootstrap (or a baked golden AMI), fronted by a security group, and
     * tagged so deploys (SSM) find it. Idempotent: reuses a running instance.
     *
     * NOTE: deploys run over SSM, so the instance needs the SSM agent + an IAM
     * instance profile granting AmazonSSMManagedInstanceCore. Provide it via
     * `compute.server.iamInstanceProfile` (live-verified step).
     */
    provisionComputeInfrastructure(options: ProvisionComputeOptions): Promise<ComputeStackOutputs>;
    /** Terminate the lightweight EC2 box + delete its security group. */
    destroyCompute(options: ProvisionComputeOptions): Promise<{
        destroyed: string[];
    }>;
    getComputeOutputs(options: ProvisionComputeOptions): Promise<ComputeStackOutputs>;
    uploadRelease(options: UploadReleaseOptions): Promise<UploadReleaseResult>;
    findComputeTargets(options: FindComputeTargetsOptions): Promise<ComputeTarget[]>;
    private reservationsToTargets;
    /**
     * SSM AWS-RunShellScript executes the joined commands with `/bin/sh` (dash on
     * Ubuntu), which rejects bash-only syntax like `set -o pipefail`. Our deploy
     * scripts are bash, so run them through a bash heredoc.
     */
    private bashWrap;
    runRemoteDeploy(options: RunRemoteDeployOptions): Promise<RemoteDeployResult>;
    private pollSsmCommand;
}
