import type { HeuristicOperatorName, LlmMutatorConfig } from '../config'; import { type NodeMutator } from '../mutators/index'; /** The parsed `heuristics` sub-block of {@link LlmMutatorConfig}. */ export type HeuristicsConfig = LlmMutatorConfig['heuristics']; /** * The outcome of {@link selectHeuristicMutators}: the chosen mutators plus the * names of any requested-but-unimplemented operators (for a debug log). Returned * as a record (not a bare array) so the caller can surface the gap without the * selection function performing logging side effects itself. */ export interface HeuristicSelection { /** The mutators to inject, in stable barrel order. */ mutators: NodeMutator[]; /** * Operator names that were explicitly requested in `operators` but are not in * the live registry yet (a not-yet-shipped catalog entry). Empty when the * allow-list is empty or every requested name resolved. */ unimplemented: HeuristicOperatorName[]; } /** * Select the heuristic mutators to inject for a given `heuristics` config block. * PURE — no side effects, no Stryker import. See the module header for the rules. * * @param cfg The parsed `heuristics` sub-block (`enabled`, `operators`, …). * @returns The chosen mutators (stable order) plus any unimplemented requests. */ export declare function selectHeuristicMutators(cfg: HeuristicsConfig): HeuristicSelection;