import type { ProviderMoniker } from '@xyo-network/xl1-protocol/protocol-model';
import type { Surface } from './Backing.js';
/**
 * Declarative description of a capability that an actor may need.
 *
 * The capability registry is a sidecar to the moniker namespace — every
 * moniker that an actor consumes should have a corresponding `Capability`
 * entry. Plan-time transitive closure uses `ProviderDescriptor.dependencies`.
 */
export interface Capability {
    /** Canonical id — equals the existing moniker constant string. */
    readonly id: ProviderMoniker;
    /** kind configuration or state exposed by this contract. */
    readonly kind: 'viewer' | 'runner' | 'gateway' | 'archivist' | 'signer';
    /** Human label for diagnostics. */
    readonly label: string;
    /**
     * Which API surface this capability is exposed under — `'node'` for point
     * queries on canonical state (Ethereum-node analog) or `'indexed'` for
     * cross-key/aggregate queries (Etherscan analog). Connection-level umbrellas
     * (`XyoConnection`, `XyoGatewayRunner`) carry `'node'`; the actual filtering
     * is done downstream by `connectionSubsetBySurface`.
     */
    readonly surface: Surface;
}
/** Public contract for Capability Registry Instance. */
export interface CapabilityRegistryInstance {
    /** Returns get. */
    get(id: ProviderMoniker): Capability;
    /** Returns the register result exposed by this provider. */
    register(cap: Capability): this;
    /** Returns the to json result exposed by this provider. */
    toJson(): Record<ProviderMoniker, Omit<Capability, 'id'>>;
    /** Attempts to get and returns `undefined` when it cannot be resolved. */
    tryGet(id: ProviderMoniker): Capability | undefined;
}
/** Creates capability registry. */
export declare function createCapabilityRegistry(): CapabilityRegistryInstance;
//# sourceMappingURL=Capability.d.ts.map