import type { RelayYamlConfig } from './types.js';
/**
 * Escape a string for safe inclusion in a shell command passed to `sh -c`.
 * Wraps the value in single quotes and escapes any embedded single quotes.
 */
export declare function shellEscape(value: string): string;
/**
 * Variable context for template resolution.
 * Values are typed as `unknown` to accommodate dynamic step-output contexts;
 * only scalar values (string | number | boolean) are interpolated — complex
 * objects are coerced via String(). Shell-bound templates are escaped by
 * {@link resolveTemplateForShell}.
 */
export interface VariableContext {
    [key: string]: unknown;
}
export declare function resolveVariables(config: RelayYamlConfig, vars: VariableContext): RelayYamlConfig;
export declare function resolveTemplate(template: string, context: VariableContext): string;
/**
 * Like resolveTemplate but shell-escapes interpolated values.
 * Use this when the result will be passed to `sh -c` to prevent injection.
 */
export declare function resolveTemplateForShell(template: string, context: VariableContext): string;
export declare function resolveDotPath(key: string, context: VariableContext): string | number | boolean | undefined;
export declare function resolveStepOutputRef(ref: string, stepOutputs: Map<string, string>): string;
export declare function interpolateStepTask(template: string, context: VariableContext): string;
export declare class TemplateResolver {
    resolveVariables(config: RelayYamlConfig, vars: VariableContext): RelayYamlConfig;
    interpolate(template: string, vars: VariableContext): string;
    resolveDotPath(key: string, vars: VariableContext): string | number | boolean | undefined;
    interpolateStepTask(template: string, context: VariableContext): string;
}
//# sourceMappingURL=template-resolver.d.ts.map