import { z } from 'zod';
import { type InferProvider } from './capability-definition.js';
/**
 * Per-device feature/identity probe slice. Holds the runtime-resolved
 * truth about what a device CAN do — which the kernel uses to:
 *   1. Reconcile accessory children (hub-children spawn siren/floodlight/PIR
 *      based on what the firmware actually advertises).
 *   2. Compute the public `features: DeviceFeature[]` array surfaced via
 *      `device-manager.listAll`.
 *   3. Decide which optional caps (PTZ, intercom, doorbell, battery, …)
 *      to register on the device's capability surface.
 *
 * Auto-registered by `BaseDevice` for every device. Drivers populate the
 * slice from `onProbe()` (kernel calls it once after register, before
 * accessory reconciliation). Consumers read via:
 *   `runtimeState.getCapState<FeatureProbeStatus>('feature-probe')`
 *
 * `flags` is an open record so each driver carries its own keys without
 * a centralized schema bottleneck — Reolink writes `hasPtz/hasIntercom`,
 * Hikvision writes `hasSupplementalLight/hasAlarmIo`, etc.
 *
 * Replaces the older driver-local `deviceCache.has*` blob: the per-device
 * config is for operator-edited overrides + UI snapshots; runtime probe
 * results belong in runtime-state where the kernel handles persistence,
 * cross-process mirroring, and reactive updates.
 */
export declare const FeatureProbeStatusSchema: z.ZodObject<{
    flags: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    deviceType: z.ZodNullable<z.ZodString>;
    model: z.ZodNullable<z.ZodString>;
    channelCount: z.ZodNullable<z.ZodNumber>;
    lastProbedAt: z.ZodNumber;
    lastFetchedAt: z.ZodNumber;
}, z.core.$strip>;
export type FeatureProbeStatus = z.infer<typeof FeatureProbeStatusSchema>;
export declare const featureProbeCapability: {
    readonly name: "feature-probe";
    readonly scope: "device";
    readonly mode: "singleton";
    readonly methods: {};
    readonly events: {
        /** Fires whenever a fresh probe completes (kernel-driven `reprobe()`
         *  or driver-initiated re-detect after a state change). */
        readonly onProbeChanged: {
            readonly data: z.ZodObject<{
                deviceId: z.ZodNumber;
                status: z.ZodObject<{
                    flags: z.ZodRecord<z.ZodString, z.ZodUnknown>;
                    deviceType: z.ZodNullable<z.ZodString>;
                    model: z.ZodNullable<z.ZodString>;
                    channelCount: z.ZodNullable<z.ZodNumber>;
                    lastProbedAt: z.ZodNumber;
                    lastFetchedAt: z.ZodNumber;
                }, z.core.$strip>;
            }, z.core.$strip>;
        };
    };
    readonly status: {
        readonly schema: z.ZodObject<{
            flags: z.ZodRecord<z.ZodString, z.ZodUnknown>;
            deviceType: z.ZodNullable<z.ZodString>;
            model: z.ZodNullable<z.ZodString>;
            channelCount: z.ZodNullable<z.ZodNumber>;
            lastProbedAt: z.ZodNumber;
            lastFetchedAt: z.ZodNumber;
        }, z.core.$strip>;
        readonly kind: "push";
    };
    readonly runtimeState: z.ZodObject<{
        flags: z.ZodRecord<z.ZodString, z.ZodUnknown>;
        deviceType: z.ZodNullable<z.ZodString>;
        model: z.ZodNullable<z.ZodString>;
        channelCount: z.ZodNullable<z.ZodNumber>;
        lastProbedAt: z.ZodNumber;
        lastFetchedAt: z.ZodNumber;
    }, z.core.$strip>;
};
export type IFeatureProbeProvider = InferProvider<typeof featureProbeCapability>;
//# sourceMappingURL=feature-probe.cap.d.ts.map