/**
 * @module _shared/composer-resolve
 *
 * Picks the LLM provider that powers `compose-scenes-with-skills`. Until
 * v0.69 the composer was hardcoded to Anthropic Claude Sonnet 4.6; v0.70
 * exposes Claude / OpenAI / Gemini as interchangeable backends behind the
 * same Hyperframes skill-bundle prompt (Phase 0 spike validated that all
 * three pass first-shot lint on the same prompts — see
 * `scripts-spike-composer-providers.mts` for the data).
 *
 * Auto-resolve preserves the v0.69 default (Claude) when the user has an
 * `ANTHROPIC_API_KEY` set. Without one we fall back to Gemini (cheapest of
 * the three per the spike) and then OpenAI. Explicit `--composer <name>`
 * always wins.
 */
export type ComposerProvider = "claude" | "openai" | "gemini";
export interface ComposerResolution {
    provider: ComposerProvider;
    apiKey: string;
}
/** Env var name for a provider's composer key. */
export declare function composerEnvVar(provider: ComposerProvider): string;
/** Human label for error messages. */
export declare function composerLabel(provider: ComposerProvider): string;
/** Validate a composer string supplied via CLI flag / pipeline YAML. */
export declare function isComposerProvider(value: unknown): value is ComposerProvider;
/**
 * Resolve a composer provider + key.
 *
 * `explicit` takes precedence — if it's set, we require its key and return
 * exactly that provider. With no `explicit`, we walk the auto-resolve order
 * (`claude > gemini > openai`) and return the first provider whose key is
 * present.
 *
 * Throws `ComposerResolveError` if (a) `explicit` was set but its key is
 * missing, or (b) no provider's key is present.
 */
export declare function resolveComposer(explicit?: ComposerProvider): ComposerResolution;
export declare class ComposerResolveError extends Error {
    readonly code: "missing-explicit-key" | "no-key-available";
    readonly meta: {
        requestedProvider?: ComposerProvider;
    };
    constructor(code: "missing-explicit-key" | "no-key-available", message: string, meta?: {
        requestedProvider?: ComposerProvider;
    });
}
