import type { ModelAdapterRuntimeCaller, ModelAdapterRuntimeGate } from "./modelAdapterRuntime.js";
export type ModelAbstractionCapabilityKind = "responses-style" | "messages-style" | "completion-style" | "embedding" | "tool-call" | "multimodal" | (string & {});
export type AbstractionLayerBindingBoundary = "input" | "contract" | "governance" | "runtime-state" | "binding";
export type AbstractionLayerBindingErrorCode = "MISSING_RUNTIME_ID" | "MISSING_CALLER" | "MISSING_ABSTRACTION_LAYER" | "MISSING_ABSTRACTION_LAYER_ID" | "EMPTY_ABSTRACTIONS" | "RUNTIME_NOT_READY" | "CONTRACT_REJECTED" | "GOVERNANCE_REJECTED";
export type AbstractionLayerBindingError = {
    code: AbstractionLayerBindingErrorCode;
    message: string;
    boundary: AbstractionLayerBindingBoundary;
    publicSafe: true;
};
export type ModelAbstractionRef = {
    kind: ModelAbstractionCapabilityKind;
    ref: string;
    fromCarrierId?: string;
};
export type AbstractionLayerBindingInput = {
    id?: string;
    abstractions?: readonly ModelAbstractionRef[];
    metadata?: Readonly<Record<string, unknown>>;
};
export type AbstractionLayerBindingRequest = {
    runtimeId?: string;
    caller?: ModelAdapterRuntimeCaller;
    abstractionLayer?: AbstractionLayerBindingInput;
    runtimeReady?: boolean;
    contract?: ModelAdapterRuntimeGate;
    governance?: ModelAdapterRuntimeGate;
};
export type AbstractionLayerBinding = {
    bindingId: string;
    runtimeId: string;
    layerId: string;
    caller: ModelAdapterRuntimeCaller;
    surface: "abstractionLayer";
    route: "runtime.modelAdapter.abstractionLayer";
    abstractions: readonly ModelAbstractionRef[];
    abstractionKinds: readonly ModelAbstractionCapabilityKind[];
    metadata: Readonly<Record<string, unknown>>;
    contractChecked: true;
    governanceChecked: true;
    dryRun: true;
    unsafeSideEffects: false;
};
export type AbstractionLayerBindingResult = {
    ok: true;
    binding: AbstractionLayerBinding;
    events: readonly string[];
} | {
    ok: false;
    error: AbstractionLayerBindingError;
    events: readonly string[];
};
export declare function bindAbstractionLayer(request?: AbstractionLayerBindingRequest): AbstractionLayerBindingResult;
