import type { KaijiBotConfig, ConfigFileSnapshot, ConfigWriteNotification, GatewayReloadMode } from "../config/config.js";
import { buildGatewayReloadPlan, type GatewayReloadPlan } from "./config-reload-plan.js";
export { buildGatewayReloadPlan };
export type { ChannelKind, GatewayReloadPlan } from "./config-reload-plan.js";
export type GatewayReloadSettings = {
    mode: GatewayReloadMode;
    debounceMs: number;
};
export declare function diffConfigPaths(prev: unknown, next: unknown, prefix?: string): string[];
export declare function resolveGatewayReloadSettings(cfg: KaijiBotConfig): GatewayReloadSettings;
export type GatewayConfigReloader = {
    stop: () => Promise<void>;
};
export declare function startGatewayConfigReloader(opts: {
    initialConfig: KaijiBotConfig;
    initialInternalWriteHash?: string | null;
    readSnapshot: () => Promise<ConfigFileSnapshot>;
    onHotReload: (plan: GatewayReloadPlan, nextConfig: KaijiBotConfig) => Promise<void>;
    onRestart: (plan: GatewayReloadPlan, nextConfig: KaijiBotConfig) => void | Promise<void>;
    subscribeToWrites?: (listener: (event: ConfigWriteNotification) => void) => () => void;
    log: {
        info: (msg: string) => void;
        warn: (msg: string) => void;
        error: (msg: string) => void;
    };
    watchPath: string;
}): GatewayConfigReloader;
