import type { RepoMeshDaemonRole, RepoMeshHostMetadata, RepoMeshHostStatus } from '../repo-mesh-types.js';
export declare function normalizeMeshDaemonRole(value: unknown): RepoMeshDaemonRole | undefined;
/**
 * Options for resolveMeshHostStatus's read-side host-pin default.
 *
 * `localDaemonId` is the id of the daemon evaluating the mesh (typically
 * `deps.statusInstanceId`). When the persisted `meshHost` declares `role:'host'`
 * but carries NO `hostDaemonId` (the first-setup miss — a host mesh whose pin was
 * never written to config), the host daemon IS this local daemon by definition, so
 * we synthesize `hostDaemonId = localDaemonId` (and, when the mesh has a node
 * representing this daemon, `hostNodeId`). This is the read-side default — the SSOT
 * is computed from the role + the evaluating daemon's identity rather than requiring
 * a config migration to backfill every already-created mesh.
 *
 * HARD guard: the synthesis fires ONLY for `role:'host'`. A `role:'member'` daemon
 * must NEVER fill itself in as host — that would make a member falsely claim
 * coordinator/queue ownership.
 */
export interface ResolveMeshHostOptions {
    /** Id of the daemon evaluating this mesh (e.g. deps.statusInstanceId). */
    localDaemonId?: string;
}
export declare function resolveMeshHostStatus(mesh: unknown, opts?: ResolveMeshHostOptions): RepoMeshHostStatus;
export declare function isMeshHostOwner(mesh: unknown): boolean;
export declare function buildMeshHostRequiredFailure(mesh: unknown, operation: string): Record<string, unknown>;
export declare function requireMeshHostQueueOwner(opts?: {
    ownerRole?: RepoMeshDaemonRole;
}): void;
export declare function createDefaultMeshHostMetadata(): RepoMeshHostMetadata;
