import QueryPlan from './QueryPlan.ts';
export type BoundedSupportSurface = 'query' | 'optic' | 'diff';
export type BoundedSupportKind = 'entity' | 'neighborhood' | 'global-discovery' | 'interval-diff';
export type BoundedSupportDirection = 'outgoing' | 'incoming';
export type BoundedSupportRuleFields = {
    readonly surface: BoundedSupportSurface;
    readonly kind: BoundedSupportKind;
    readonly reason: string;
    readonly rootNodeIds?: readonly string[];
    readonly maxDepth?: number;
    readonly directions?: readonly BoundedSupportDirection[];
};
/** Runtime-backed support law for a public read surface. */
export default class BoundedSupportRule {
    readonly surface: BoundedSupportSurface;
    readonly kind: BoundedSupportKind;
    readonly reason: string;
    readonly rootNodeIds: readonly string[];
    readonly maxDepth: number | undefined;
    readonly directions: readonly BoundedSupportDirection[];
    constructor(fields: BoundedSupportRuleFields);
    static entityRead(fields: {
        readonly surface: BoundedSupportSurface;
        readonly nodeIds: readonly string[];
    }): BoundedSupportRule;
    static neighborhoodRead(fields: {
        readonly surface: BoundedSupportSurface;
        readonly rootNodeIds: readonly string[];
        readonly maxDepth: number;
        readonly directions: readonly BoundedSupportDirection[];
    }): BoundedSupportRule;
    static globalDiscovery(fields: {
        readonly surface: BoundedSupportSurface;
        readonly reason: string;
    }): BoundedSupportRule;
    static fromQueryPlan(plan: QueryPlan): BoundedSupportRule;
    isBounded(): boolean;
    requiresWholeGraphDiscovery(): boolean;
}
