import type { GovernancePolicyDeclaration, GovernancePolicySource } from "./governancePolicyCompiler.js";
export type GovernancePolicyRegistryBoundary = "input" | "contract" | "governance" | "runtime-state";
export type GovernancePolicyRegistryErrorCode = "MISSING_RUNTIME_ID" | "MISSING_POLICY" | "MISSING_POLICY_ID" | "MISSING_POLICY_SOURCE" | "DUPLICATE_POLICY" | "RUNTIME_NOT_READY" | "CONTRACT_REJECTED" | "GOVERNANCE_REJECTED";
export type GovernancePolicyRegistryGateCheck = {
    accepted: boolean;
    reason?: string;
};
export type GovernancePolicyRegistryEntry = GovernancePolicyDeclaration & {
    policyId: string;
    source: GovernancePolicySource;
    registeredAt: string;
    revision: number;
    enabled: boolean;
};
export type GovernancePolicyRegistrySnapshot = {
    runtimeId: string;
    entries: readonly GovernancePolicyRegistryEntry[];
    sources: readonly GovernancePolicySource[];
    queryableByRuntime: true;
    unsafeSideEffects: false;
};
export type GovernancePolicyRegistryRequest = {
    runtimeId?: string;
    policies?: readonly GovernancePolicyDeclaration[];
    existingEntries?: readonly GovernancePolicyRegistryEntry[];
    replace?: boolean;
    registeredAt?: string;
    runtimeReady?: boolean;
    contract?: GovernancePolicyRegistryGateCheck;
    governance?: GovernancePolicyRegistryGateCheck;
};
export type GovernancePolicyRegistryError = {
    code: GovernancePolicyRegistryErrorCode;
    message: string;
    boundary: GovernancePolicyRegistryBoundary;
    safeForManagement: true;
};
export type GovernancePolicyRegistryResult = {
    ok: true;
    registry: GovernancePolicyRegistrySnapshot;
    registeredPolicyIds: readonly string[];
    events: readonly string[];
} | {
    ok: false;
    error: GovernancePolicyRegistryError;
    events: readonly string[];
};
export declare function registerGovernancePolicies(request?: GovernancePolicyRegistryRequest): GovernancePolicyRegistryResult;
