/**
 * Per-camera pipeline configuration — the canonical shape carried by the
 * orchestrator's `pipelines/<deviceId>` store and pushed to the runner
 * inside every `attachCamera` payload.
 *
 * Model: a camera declares WHAT to execute (ordered tree of steps) and
 * WHERE to execute it (engine runtime+backend+format). The runner holds
 * this in RAM for the lifetime of the attach, swaps it atomically when
 * the orchestrator re-sends (hot reload on edit or rebalance).
 *
 * `PipelineStepInput` already exists in `pipeline-executor.cap.ts` and is
 * the stateless step shape accepted by `runPipeline`. Reusing it here
 * keeps the edit → persist → execute round-trip shape-identical with
 * zero conversion.
 */
import type { PipelineStepInputOutput } from '../capabilities/pipeline-executor.cap.js';
import type { PipelineEngineChoice } from './pipeline.js';
/**
 * A camera's end-to-end pipeline: which engine to run on, which video
 * steps (ordered tree), and optional audio classification. Null `audio`
 * or `audio.enabled === false` means audio classification is disabled
 * for this camera — metering (dB/RMS) stays orthogonal, it's part of
 * `audio-analyzer` not tied to this config.
 */
export interface CameraPipelineConfig {
    readonly engine: PipelineEngineChoice;
    readonly steps: readonly PipelineStepInputOutput[];
    readonly audio?: {
        readonly engine: PipelineEngineChoice;
        readonly modelId: string;
        readonly enabled: boolean;
        /**
         * Audio-classifier step settings (`enabledAudioClasses`,
         * `minConfidence`) sourced from the agent's
         * `addonDefaults['audio-classifier'].settings` and overlaid by any
         * per-device patch. The audio-analyzer reads these at runtime to
         * filter macro classes and gate by score.
         */
        readonly settings?: Readonly<Record<string, unknown>>;
    } | null;
}
/**
 * Named preset applied to one or more cameras. The camera stores a
 * copy of the template's config at apply time — no live reference.
 * Templates let operators curate reusable pipelines without re-authoring
 * step trees per-camera.
 */
export interface PipelineTemplate {
    readonly id: string;
    readonly name: string;
    readonly description?: string;
    readonly config: CameraPipelineConfig;
    /** ISO 8601 — creation timestamp. */
    readonly createdAt: string;
    /** ISO 8601 — last modification timestamp. */
    readonly updatedAt: string;
}
//# sourceMappingURL=camera-pipeline.d.ts.map