/**
 * Agent + camera pipeline settings — the persisted shapes that back the
 * 3-level resolution model:
 *
 *   1. Agent declares which addons it runs by default (every addonId in
 *      the catalog gets an entry with enabled/modelId/settings). Seeded
 *      automatically from the catalog on first boot, editable after.
 *
 *   2. Camera opts in or out of specific addonIds via a boolean overlay
 *      (`stepToggles`). Absent = inherit agent. Present = force.
 *
 *   3. Escape hatch: camera can pin a full pipeline wholesale for a
 *      specific agent via `pipelineByAgent[agentNodeId]`. When set, it
 *      bypasses addonDefaults + stepToggles entirely.
 *
 * The resolver walks this chain and emits the existing
 * `CameraPipelineConfig` shape that the runner consumes — no changes
 * required downstream of the orchestrator.
 */
import type { CameraPipelineConfig } from './camera-pipeline.js';
/**
 * Per-addon configuration stored under `agent.addonDefaults[addonId]`.
 * Every addon in the catalog gets one entry — whether enabled or not.
 * Operators edit these to pick models, tune settings, flip default
 * enabled state for their hardware.
 */
export interface AgentAddonConfig {
    readonly enabled: boolean;
    readonly modelId: string;
    readonly settings: Readonly<Record<string, unknown>>;
}
/**
 * Partial override of a single addon's config for one (device, agent) pair.
 * Every field is optional — the resolver shallow-merges this patch on top
 * of the agent.addonDefaults base, so operators can override one field
 * (e.g. just the model) without redeclaring the whole config. The merge is
 * per-field on the top-level interface keys only: when `settings` is present
 * on the patch, it fully replaces the base `settings` map (no key-level
 * deep merge inside `settings`).
 */
export interface CameraStepOverridePatch {
    readonly enabled?: boolean;
    readonly modelId?: string;
    readonly settings?: Readonly<Record<string, unknown>>;
}
/**
 * Per-agent pipeline settings. Phase 2f: engine + hwaccel + audio
 * ownership moved to per-addon global settings (detection-pipeline,
 * decoder-nodeav/ffmpeg, audio-analyzer). What's left on the
 * orchestrator is the per-step defaults map (modelId / step settings)
 * consumed by the resolver. The authoritative engine triple is read
 * from the `detection-pipeline` addon's global settings via
 * `readDetectionPipelineEngine()`.
 */
export interface AgentPipelineSettings {
    readonly addonDefaults: Readonly<Record<string, AgentAddonConfig>>;
}
/**
 * Per-camera pipeline settings. Sparse by design — a camera that has
 * accepted every agent default has an empty record here. `stepToggles`
 * are keyed on `addonId` (flat), not on tree-path, so operators can
 * enable/disable an addon irrespective of where it sits in the
 * resolved tree.
 */
export interface CameraPipelineSettings {
    readonly pinnedAgentNodeId?: string;
    readonly stepToggles?: Readonly<Record<string, boolean>>;
    /**
     * L2.5 per-agent per-step override. Shallow-merged on top of the L1
     * agent defaults AFTER the L2 flat stepToggles overlay but BEFORE the
     * L3 wholesale bypass. `pipelineByAgent[agent]` still takes full
     * precedence when present — the L2.5 map for that agent is ignored.
     * When an L2.5 patch has `enabled` set, it supersedes the corresponding
     * L2 `stepToggles` entry for that (agent, addonId) pair; L2 still
     * applies when the L2.5 patch leaves `enabled` undefined.
     */
    readonly stepOverridesByAgent?: Readonly<Record<string, Readonly<Record<string, CameraStepOverridePatch>>>>;
    /**
     * Per-agent wholesale pipeline override. Engine is NOT stored here —
     * the override runs under the engine selected on that agent via the
     * detection-pipeline addon's global settings. Operator picks steps
     * + audio model/enabled only. This keeps the override portable
     * across agent-moves and prevents a camera from being pinned to an
     * engine the agent doesn't host.
     */
    readonly pipelineByAgent?: Readonly<Record<string, {
        readonly steps: CameraPipelineConfig['steps'];
        readonly audio: {
            readonly modelId: string;
            readonly enabled: boolean;
        } | null;
    }>>;
}
//# sourceMappingURL=agent-pipeline-settings.d.ts.map