import type { CodeEmissionPlan, EmissionElement } from "./emissionPlan.js";
/** A request for semantic names: each element's id, role, and current structural default name. */
export interface SemanticNamingRequest {
    readonly elements: readonly {
        readonly id: string;
        readonly role: EmissionElement["role"];
        readonly structuralName: string;
    }[];
}
/**
 * The naming port: given the structural elements, return a map (or record) from element id to a
 * proposed semantic display name. The server backs this with a capability-routed model; tests back it
 * with a plain function. Returning nothing for an id leaves its structural default untouched.
 */
export type SemanticNamingProvider = (request: SemanticNamingRequest) => ReadonlyMap<string, string> | Readonly<Record<string, string>>;
/**
 * Apply a semantic-naming provider to a plan, overriding ONLY element display names. The element
 * tree, roles, text, tokens, and navigation are preserved byte-for-byte; only `displayName` fields
 * may change, and only for elements the provider names with a non-empty string. With no usable name
 * for an element (or a missing provider entry), the structural default stands. Deterministic and
 * side-effect-free.
 */
export declare function applyNaming(plan: CodeEmissionPlan, provider: SemanticNamingProvider): CodeEmissionPlan;
//# sourceMappingURL=semanticNaming.d.ts.map