import type { KaijiBotConfig } from "../config/config.js";
import type { PluginSlotsConfig } from "../config/types.plugins.js";
import type { PluginKind } from "./types.js";
export type PluginSlotKey = keyof PluginSlotsConfig;
type SlotPluginRecord = {
    id: string;
    kind?: PluginKind | PluginKind[];
};
/** Normalize a kind field to an array for uniform iteration. */
export declare function normalizeKinds(kind?: PluginKind | PluginKind[]): PluginKind[];
/** Check whether a plugin's kind field includes a specific kind. */
export declare function hasKind(kind: PluginKind | PluginKind[] | undefined, target: PluginKind): boolean;
/**
 * Returns the slot key for a single-kind plugin.
 * For multi-kind plugins use `slotKeysForPluginKind` instead.
 */
export declare function slotKeyForPluginKind(kind?: PluginKind): PluginSlotKey | null;
/** Order-insensitive equality check for two kind values (string or array). */
export declare function kindsEqual(a: PluginKind | PluginKind[] | undefined, b: PluginKind | PluginKind[] | undefined): boolean;
/** Return all slot keys that a plugin's kind field maps to. */
export declare function slotKeysForPluginKind(kind?: PluginKind | PluginKind[]): PluginSlotKey[];
export declare function defaultSlotIdForKey(slotKey: PluginSlotKey): string;
export type SlotSelectionResult = {
    config: KaijiBotConfig;
    warnings: string[];
    changed: boolean;
};
export declare function applyExclusiveSlotSelection(params: {
    config: KaijiBotConfig;
    selectedId: string;
    selectedKind?: PluginKind | PluginKind[];
    registry?: {
        plugins: SlotPluginRecord[];
    };
}): SlotSelectionResult;
export {};
