import type { CIProvider, ProviderObservation, ReconcileRequest, RequiredChecksProvider, RequiredCheckSnapshot } from "@awp/application";
import { type ProviderDescriptor, type ProviderOperationContext, type ProviderReference, type ProviderResult } from "@awp/contracts";
import type { GitHubActionsTransport, GitHubRepositoryConfig } from "./github.js";
export declare class GitHubRepositoryRegistry {
    private readonly repositories;
    constructor(repositories: readonly GitHubRepositoryConfig[]);
    get(repositoryKey: string): GitHubRepositoryConfig;
    find(owner: string, repository: string): GitHubRepositoryConfig | undefined;
}
export declare class GitHubRequiredChecksProvider implements RequiredChecksProvider {
    private readonly github;
    private readonly now;
    constructor(github: GitHubActionsTransport, now?: () => string);
    describe(): Promise<ProviderDescriptor>;
    observeRequiredChecks(context: ProviderOperationContext, repositoryKey: string, branch: string, revision: string): Promise<ProviderResult<RequiredCheckSnapshot>>;
}
export declare class GitHubCIProvider implements CIProvider {
    private readonly github;
    private readonly repositories;
    private readonly sleep;
    private readonly now;
    private readonly correlationPolls;
    private readonly correlationPollMs;
    constructor(github: GitHubActionsTransport, repositories: GitHubRepositoryRegistry, sleep?: (milliseconds: number) => Promise<void>, now?: () => string, correlationPolls?: number, correlationPollMs?: number);
    describe(): Promise<ProviderDescriptor>;
    start(context: ProviderOperationContext, repositoryKey: string, candidateDigest: string): Promise<ProviderResult<ProviderObservation>>;
    cancel(context: ProviderOperationContext, reference: ProviderReference): Promise<ProviderResult<ProviderObservation>>;
    reconcile(request: ReconcileRequest): Promise<ProviderResult<ProviderObservation>>;
    listRequiredChecks(context: ProviderOperationContext, repositoryKey: string, branch: string): Promise<readonly string[]>;
    private findCorrelatedRun;
    private runResult;
    private correlationResult;
    private correlationObservation;
    private missingRunResult;
}
export declare function operationKeyFor(operationId: string, candidateDigest: string): string;
//# sourceMappingURL=adapter.d.ts.map