/**
 * Declarative input expansion: converts shorthand keys (e.g. {branch: "main"})
 * into full nested structures (e.g. {build: {type: "branch", spec: {branch: "main"}}})
 * using rules defined on EndpointSpec.inputExpansions.
 */
import type { InputExpansionRule } from "../registry/types.js";
/**
 * Deep-clone a template object and replace every exact "$value" string
 * with the provided value. Only exact matches are replaced — "$value"
 * embedded in a larger string (e.g. "prefix-$value") is left as-is.
 */
export declare function substituteValue(template: Record<string, unknown>, value: unknown): Record<string, unknown>;
/**
 * Apply declarative expansion rules to an input map.
 * For each rule whose triggerKey is present (and skipIfPresent guard is not),
 * merge the expanded structure into the result.
 *
 * Rules are applied in order. The original input is not mutated.
 */
export declare function applyInputExpansions(inputs: Record<string, unknown>, rules: InputExpansionRule[]): Record<string, unknown>;
//# sourceMappingURL=input-expander.d.ts.map