@camstack/types 1.2.94 → 1.2.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -79,8 +79,8 @@ export { type IOauthIntegrationProvider, type OauthIntegrationDescriptor, OauthI
79
79
  export { type AudioEvent, AudioEventSchema, type DetectionSource, DetectionSourceSchema, type EventKind, type EventKindCategory, EventKindCategorySchema, type EventKindDescriptor, EventKindDescriptorSchema, type EventKindIcon, EventKindIconSchema, EventKindSchema, type EventKindsForDevice, EventKindsForDeviceSchema, type EventPruneCounts, type EventStoreDeviceFootprint, type EventStoreFootprint, type IPipelineAnalyticsProvider, type KeyEvent, KeyEventSchema, type LabelAttribution, LabelAttributionSchema, type LabelTier, LabelTierSchema, type MediaFile, type MediaFileInfo, MediaFileInfoSchema, type MediaFileKind, MediaFileSchema, type MotionEvent, MotionEventSchema, type ObjectEvent, ObjectEventSchema, pipelineAnalyticsCapability, type RecentTracksPage, RecentTracksPageSchema, type RecentTracksQuery, RecentTracksQueryInput, type RetrainAnnotation, type RetrainAnnotationDraft, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, type RetrainAssistResult, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, type RetrainFrame, type RetrainFrameCandidate, RetrainFrameCandidateSchema, type RetrainFrameList, RetrainFrameListSchema, RetrainFrameSchema, type RetrainFrameSelection, RetrainFrameSelectionSchema, type RetrainMacroClass, RetrainMacroClassSchema, type RetrainStatus, RetrainStatusSchema, type RetrainTrack, RetrainTrackSchema, type RetrainTransitionResult, RetrainTransitionResultSchema, type ScoredObjectEvent, ScoredObjectEventSchema, type SensorEvent, SensorEventSchema, type Track, type TrackCascadeCounts, TrackCascadeCountsSchema, type TrackEnvelope, TrackEnvelopeSchema, TrackedDetectionSchema, type TrackFlags, type TrackFlagsPatch, TrackFlagsPatchSchema, TrackFlagsSchema, type TrackProjection, TrackProjectionSchema, TrackSchema, type TrackSource, TrackSourceSchema, type TrackState, TrackStateSchema, type TrackZoneFilter, TrackZoneFilterSchema, type TrainingExportDeviceTotals, TrainingExportDeviceTotalsSchema, type TrainingExportSummary, TrainingExportSummarySchema, type ZoneCrossing, type ZoneCrossingDirection, ZoneCrossingDirectionSchema, ZoneCrossingSchema, } from './pipeline-analytics.cap.js';
80
80
  export type { NativeCropRef, PipelineStepInputOutput, PipelineValidationIssue, PipelineValidationResult, } from './pipeline-executor.cap.js';
81
81
  export { ModelSubstitutionSchema, NativeCropRefSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, pipelineExecutorCapability, } from './pipeline-executor.cap.js';
82
- export type { CameraAssignmentStatus, CameraAudioStatus, CameraBrokerProfile, CameraBrokerStatus, CameraDecoderShm, CameraDecoderStatus, CameraDetectionPhase, CameraDetectionProvisioning, CameraDetectionProvisioningState, CameraDetectionStatus, CameraMotionStatus, CameraRecordingMode, CameraRecordingStatus, CameraSourceStatus, CameraSourceStream, CameraStatus, CameraStatusDegradation, CameraStatusDegradationReason, CameraStatusStage, DiskReconcileJob, IngestOwner, NodeInferenceDevice, NodeInferenceDevices, } from './pipeline-orchestrator.cap.js';
83
- export { AgentLoadSummarySchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CapabilityBindingsSchema, DiskReconcileJobSchema, GlobalMetricsSchema, IngestOwnerSchema, PipelineAssignmentSchema, pipelineOrchestratorCapability, } from './pipeline-orchestrator.cap.js';
82
+ export type { CameraAssignmentStatus, CameraAudioStatus, CameraBrokerProfile, CameraBrokerStatus, CameraDecoderShm, CameraDecoderStatus, CameraDetectionPhase, CameraDetectionProvisioning, CameraDetectionProvisioningState, CameraDetectionStatus, CameraMotionStatus, CameraRecordingMode, CameraRecordingStatus, CameraSourceStatus, CameraSourceStream, CameraStatus, CameraStatusDegradation, CameraStatusDegradationReason, CameraStatusStage, DiskReconcileJob, InferenceDeviceExclusionReason, IngestOwner, NodeInferenceDevice, NodeInferenceDevices, } from './pipeline-orchestrator.cap.js';
83
+ export { AgentLoadSummarySchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CapabilityBindingsSchema, DiskReconcileJobSchema, GlobalMetricsSchema, INFERENCE_DEVICE_EXCLUSION_REASONS, InferenceDeviceExclusionReasonSchema, IngestOwnerSchema, PipelineAssignmentSchema, pipelineOrchestratorCapability, } from './pipeline-orchestrator.cap.js';
84
84
  export type { DetailParent, DetailResult, MotionSource, MotionSources, ReportMotionInput, RunDetailSubtreeInput, RunDetailSubtreeResult, RunnerFrameSource, RunnerInferenceDevice, RunStatelessStepInput, RunStatelessStepResult, StatelessStepRefusal, } from './pipeline-runner.cap.js';
85
85
  export { MotionSourceEnum, MotionSourcesSchema, type NativeCropBbox, NativeCropBboxSchema, NativeCropResultSchema, pipelineRunnerCapability, ReportMotionInputSchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, } from './pipeline-runner.cap.js';
86
86
  export { AudioChunkInputSchema, AudioClassificationLabelSchema, AudioLevelSchema, BoundingBoxSchema, FrameInputSchema, SpatialDetectionSchema, } from './schemas/detection-shared.js';
@@ -154,7 +154,7 @@ export { type BacklightMode, BacklightModeSchema, type ExposureMode, ExposureMod
154
154
  export { AvailableIntegrationTypeSchema, CreateIntegrationInputSchema, DeleteIntegrationResultSchema, type IIntegrationsProvider, IntegrationLiteSchema, type IntegrationTestConnectionResult, type IntegrationTestConnectionStatus, IntegrationWithStateSchema, integrationsCapability, TestConnectionResultSchema, TestConnectionStatusEnum, UpdateIntegrationInputSchema, } from './integrations.cap.js';
155
155
  export { type IIntercomProvider, type IntercomAbility, IntercomAbilitySchema, type IntercomStatus, IntercomStatusSchema, intercomCapability, } from './intercom.cap.js';
156
156
  export { type DeviceCodeSeverity, DeviceCodeSeveritySchema, type ILawnMowerControlProvider, type LawnMowerActivity, LawnMowerActivitySchema, type LawnMowerControlStatus, LawnMowerControlStatusSchema, lawnMowerControlCapability, } from './lawn-mower-control.cap.js';
157
- export { type ConnectionEndpoint, type ILocalNetworkProvider, type LocalInterface, localNetworkCapability, } from './local-network.cap.js';
157
+ export { type AdvertisedLocalPort, type ConnectionEndpoint, type ILocalNetworkProvider, type LocalInterface, localNetworkCapability, } from './local-network.cap.js';
158
158
  export { type ILockControlProvider, type LockControlStatus, LockControlStatusSchema, type LockState, LockStateSchema, lockControlCapability, } from './lock-control.cap.js';
159
159
  export { type MaskGridDims, MaskGridDimsSchema, type MaskGridShape, MaskGridShapeSchema, type MaskLineShape, MaskLineShapeSchema, type MaskPoint, MaskPointSchema, type MaskPolygonShape, MaskPolygonShapeSchema, type MaskPolygonVertices, MaskPolygonVerticesSchema, type MaskRectShape, MaskRectShapeSchema, type MaskShape, type MaskShapeKind, MaskShapeKindSchema, MaskShapeSchema, } from './mask-shape.js';
160
160
  export { type IMediaPlayerProvider, type MediaInfo, type MediaPlayerRepeat, MediaPlayerRepeatSchema, type MediaPlayerState, MediaPlayerStateSchema, type MediaPlayerStatus, MediaPlayerStatusSchema, mediaPlayerCapability, } from './media-player.cap.js';
@@ -74,6 +74,17 @@ declare const ConnectionEndpointSchema: z.ZodObject<{
74
74
  plausibleReason: z.ZodString;
75
75
  priority: z.ZodNumber;
76
76
  }, z.core.$strip>;
77
+ /** The port every LAN/loopback `baseUrl` in the same result was built with. */
78
+ declare const AdvertisedLocalPortSchema: z.ZodObject<{
79
+ port: z.ZodNumber;
80
+ source: z.ZodEnum<{
81
+ default: "default";
82
+ "server-config": "server-config";
83
+ "server-env": "server-env";
84
+ "caller-hint": "caller-hint";
85
+ }>;
86
+ }, z.core.$strip>;
87
+ export type AdvertisedLocalPort = z.infer<typeof AdvertisedLocalPortSchema>;
77
88
  /**
78
89
  * The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
79
90
  * AUTO (resolved from the candidate ranking at send time); `resolved` reports
@@ -157,9 +168,29 @@ export declare const localNetworkCapability: {
157
168
  * Honours `getAllowedAddresses()` when set — addresses outside
158
169
  * the allowlist are dropped (the public tunnel + loopback are
159
170
  * always included as escape hatches).
171
+ *
172
+ * **The port is the hub's, not the caller's** (D62 — a function's fact
173
+ * belongs to whoever already owns it). This method used to take a `port`
174
+ * and echo it onto every LAN and loopback URL it advertised, which made
175
+ * every client a second authority on a socket only the hub binds. A viewer
176
+ * configured with a port-less public URL (`https://camstack.example.top`)
177
+ * infers 443 from the scheme, asks with 443, and was handed
178
+ * `https://192.168.1.9:443` for a hub listening on 4443. That candidate
179
+ * cannot ever answer, and losing its race reads in the log exactly like
180
+ * "the LAN was tried and it was slower" — so an operator sitting on his own
181
+ * WiFi stayed on the public tunnel for weeks, with the LAN candidate born
182
+ * dead on every single connect.
183
+ *
184
+ * The hub now resolves its own listen port and reports it as `localPort`,
185
+ * with the SOURCE of the number, so a client can tell a fact from an echo.
186
+ *
187
+ * Out of scope on purpose: a LAN URL that is not the hub's own socket (a
188
+ * reverse proxy in front of it on another port) is not this method's to
189
+ * invent either — pin it with `setNotificationEndpoint` / a configured
190
+ * origin, which is an operator statement rather than a guess.
160
191
  */
161
192
  readonly getConnectionEndpoints: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
162
- port: z.ZodNumber;
193
+ port: z.ZodOptional<z.ZodNumber>;
163
194
  includeLoopback: z.ZodOptional<z.ZodBoolean>;
164
195
  ipv4Only: z.ZodOptional<z.ZodBoolean>;
165
196
  scheme: z.ZodOptional<z.ZodEnum<{
@@ -189,6 +220,15 @@ export declare const localNetworkCapability: {
189
220
  plausibleReason: z.ZodString;
190
221
  priority: z.ZodNumber;
191
222
  }, z.core.$strip>>>;
223
+ localPort: z.ZodObject<{
224
+ port: z.ZodNumber;
225
+ source: z.ZodEnum<{
226
+ default: "default";
227
+ "server-config": "server-config";
228
+ "server-env": "server-env";
229
+ "caller-hint": "caller-hint";
230
+ }>;
231
+ }, z.core.$strip>;
192
232
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
193
233
  /**
194
234
  * The endpoint OUTBOUND artifacts must be addressed by — notification
@@ -532,6 +532,24 @@ declare const CameraStatusSchema: z.ZodObject<{
532
532
  }, z.core.$strip>>>;
533
533
  fetchedAt: z.ZodNumber;
534
534
  }, z.core.$strip>;
535
+ /**
536
+ * Why the dispatcher does NOT consider a device the node HAS for the
537
+ * camera-root election. The list is the CONTRACT between the orchestrator's
538
+ * `resolveInferenceDeviceEligibility` (which computes it) and the admin UI
539
+ * (which renders it) — the orchestrator's `InferenceDeviceExclusionReason`
540
+ * derives from this tuple so the two can never drift.
541
+ *
542
+ * Every one of these drops used to be silent, and an accelerator that is
543
+ * enabled, available, and never chosen is indistinguishable from one that was
544
+ * never configured. The reason is the difference.
545
+ */
546
+ declare const INFERENCE_DEVICE_EXCLUSION_REASONS: readonly ["disabled", "unavailable", "cannot-host-camera-root", "accelerator-preferred"];
547
+ declare const InferenceDeviceExclusionReasonSchema: z.ZodEnum<{
548
+ disabled: "disabled";
549
+ unavailable: "unavailable";
550
+ "cannot-host-camera-root": "cannot-host-camera-root";
551
+ "accelerator-preferred": "accelerator-preferred";
552
+ }>;
535
553
  declare const NodeInferenceDeviceSchema: z.ZodObject<{
536
554
  key: z.ZodString;
537
555
  backend: z.ZodString;
@@ -554,6 +572,12 @@ declare const NodeInferenceDeviceSchema: z.ZodObject<{
554
572
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
555
573
  jumpDeviceKey: z.ZodOptional<z.ZodString>;
556
574
  }, z.core.$strip>>>;
575
+ exclusion: z.ZodNullable<z.ZodEnum<{
576
+ disabled: "disabled";
577
+ unavailable: "unavailable";
578
+ "cannot-host-camera-root": "cannot-host-camera-root";
579
+ "accelerator-preferred": "accelerator-preferred";
580
+ }>>;
557
581
  }, z.core.$strip>;
558
582
  declare const NodeInferenceDevicesSchema: z.ZodObject<{
559
583
  nodeId: z.ZodString;
@@ -580,6 +604,12 @@ declare const NodeInferenceDevicesSchema: z.ZodObject<{
580
604
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
581
605
  jumpDeviceKey: z.ZodOptional<z.ZodString>;
582
606
  }, z.core.$strip>>>;
607
+ exclusion: z.ZodNullable<z.ZodEnum<{
608
+ disabled: "disabled";
609
+ unavailable: "unavailable";
610
+ "cannot-host-camera-root": "cannot-host-camera-root";
611
+ "accelerator-preferred": "accelerator-preferred";
612
+ }>>;
583
613
  }, z.core.$strip>>>;
584
614
  }, z.core.$strip>;
585
615
  /**
@@ -1027,6 +1057,12 @@ export declare const pipelineOrchestratorCapability: {
1027
1057
  settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1028
1058
  jumpDeviceKey: z.ZodOptional<z.ZodString>;
1029
1059
  }, z.core.$strip>>>;
1060
+ exclusion: z.ZodNullable<z.ZodEnum<{
1061
+ disabled: "disabled";
1062
+ unavailable: "unavailable";
1063
+ "cannot-host-camera-root": "cannot-host-camera-root";
1064
+ "accelerator-preferred": "accelerator-preferred";
1065
+ }>>;
1030
1066
  }, z.core.$strip>>>;
1031
1067
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
1032
1068
  /**
@@ -1887,4 +1923,5 @@ export type CameraRecordingMode = z.infer<typeof CameraRecordingModeSchema>;
1887
1923
  export type IngestOwner = z.infer<typeof IngestOwnerSchema>;
1888
1924
  export type NodeInferenceDevice = z.infer<typeof NodeInferenceDeviceSchema>;
1889
1925
  export type NodeInferenceDevices = z.infer<typeof NodeInferenceDevicesSchema>;
1890
- export { AgentLoadSummarySchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMotionStatusSchema, CameraPipelineConfigSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStepOverridePatchSchema, CapabilityBindingsSchema, DiskReconcileJobSchema, GlobalMetricsSchema, IngestOwnerSchema, PipelineAssignmentSchema, PipelineTemplateSchema as OrchestratorPipelineTemplateSchema, };
1926
+ export type InferenceDeviceExclusionReason = z.infer<typeof InferenceDeviceExclusionReasonSchema>;
1927
+ export { AgentLoadSummarySchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMotionStatusSchema, CameraPipelineConfigSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStepOverridePatchSchema, CapabilityBindingsSchema, DiskReconcileJobSchema, GlobalMetricsSchema, INFERENCE_DEVICE_EXCLUSION_REASONS, InferenceDeviceExclusionReasonSchema, IngestOwnerSchema, PipelineAssignmentSchema, PipelineTemplateSchema as OrchestratorPipelineTemplateSchema, };
@@ -18,8 +18,8 @@ export type { IBatteryOperated, IDoorbellButton, INativeSnapshot, IPanTiltZoom,
18
18
  export { getByPath, setByPath } from './path-util.js';
19
19
  export type { ReachabilityPollHandle, ReachabilityPollLogger, ReachabilityPollOptions, } from './reachability-poll.js';
20
20
  export { REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, startReachabilityPoll, } from './reachability-poll.js';
21
- export type { RuntimeStateBridge } from './runtime-state-helpers.js';
22
- export { createRuntimeStateBridge } from './runtime-state-helpers.js';
21
+ export type { RuntimeStateBridge, RuntimeStateStaleReadPolicy, } from './runtime-state-helpers.js';
22
+ export { createRuntimeStateBridge, OPERATOR_WRITTEN_STALE_MS, RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS, } from './runtime-state-helpers.js';
23
23
  export type { WireableField } from './schema-fields.js';
24
24
  export { enumerateItemArrayFields, enumerateSchemaFields } from './schema-fields.js';
25
25
  export type { DeviceConfigEntry } from './zod-to-config-ui.js';
@@ -13,6 +13,45 @@ import type { IDeviceRuntimeState } from './device-runtime-state.js';
13
13
  * coming back; per-read is enough to stall the viewer's first paint.
14
14
  */
15
15
  export declare const RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS = 60000;
16
+ /**
17
+ * The freshness window for a cap whose value changes ONLY when WE write it.
18
+ *
19
+ * The usual `staleMs: 10_000` is tuned for a reading that moves on its own — a
20
+ * battery level, a day/night state that flips at dusk. It is the wrong number
21
+ * for a cap like `privacy-mask`, whose two facts (is the video mask on, is the
22
+ * microphone on) change when an operator changes them, through a `setMask` /
23
+ * `setAudioEnabled` that **re-reads the camera and rewrites this very slice**.
24
+ * A write is therefore its own invalidation: the window never delays an
25
+ * operator's own change, however long it is.
26
+ *
27
+ * What the window really bounds is the ONE case we do not write: somebody
28
+ * changing the mask in the vendor app or the camera's web UI. Ten minutes is
29
+ * the trade — that change is visible within ten minutes, and a fleet of 29
30
+ * cameras behind a page that polls every 5s costs about 3 camera round trips a
31
+ * minute instead of 696
32
+ * ([D221](../../../../docs/decisions/adr-0221-a-polled-list-never-dials-a-camera.md)).
33
+ *
34
+ * Use it ONLY with {@link RuntimeStateStaleReadPolicy} `'serve-and-revalidate'`.
35
+ * On the awaiting default a window this long does not remove the stall, it
36
+ * merely makes it rarer and just as long.
37
+ */
38
+ export declare const OPERATOR_WRITTEN_STALE_MS: number;
39
+ /**
40
+ * What a read does when the slice it finds is STALE **and present**.
41
+ *
42
+ * - `'await-refresh'` (default) — the caller waits for the camera. Right for a
43
+ * reader that asked BECAUSE it wants the current value: an open settings
44
+ * form, a write path reading back what the firmware accepted.
45
+ * - `'serve-and-revalidate'` — the caller is answered from the slice
46
+ * immediately and the refresh runs behind it, for the next caller. Right for
47
+ * a POLLED reader, which by definition will ask again shortly and must never
48
+ * put a camera round trip on a request path (D49, D221).
49
+ *
50
+ * A COLD slice — one that was never fetched — awaits under both policies. The
51
+ * first render has to be a real answer rather than a flash of the `empty()`
52
+ * default, and a default is exactly what "the operator muted this" looks like.
53
+ */
54
+ export type RuntimeStateStaleReadPolicy = 'await-refresh' | 'serve-and-revalidate';
16
55
  /**
17
56
  * Minimal logger surface the bridge uses. Declared with METHOD syntax
18
57
  * (not a property arrow) so the parameter check is bivariant — a scoped
@@ -69,6 +108,23 @@ export interface RuntimeStateBridgeLogger {
69
108
  * helper stays thin so a single provider can host multiple cap-bridged
70
109
  * readers without fighting over a shared promise.
71
110
  *
111
+ * ## The freshness window belongs to the READER, not to the cap
112
+ *
113
+ * `staleMs` plus {@link RuntimeStateStaleReadPolicy} are what make this the
114
+ * ONLY cache in front of a cap. Before D221 they were not: `privacy-mask` kept
115
+ * the 10s window meant for a self-changing reading while a fleet-wide list
116
+ * polled it every 5s, so the slice was stale on nearly every read and the badge
117
+ * dialled 29 cameras twelve times a minute. The answer was a SECOND cache in
118
+ * the consumer — two authorities over one fact, and the write path that did not
119
+ * route through that consumer (the mask editor, which writes the cap directly)
120
+ * left it lying.
121
+ *
122
+ * So a cap whose value only an operator changes takes
123
+ * {@link OPERATOR_WRITTEN_STALE_MS} and `'serve-and-revalidate'`, here, once:
124
+ * the write path already re-reads the camera into this slice, which is a
125
+ * stronger invalidation than any downstream mirror can offer, and no consumer
126
+ * needs a cache of its own.
127
+ *
72
128
  * ## A refresh that does not LAND is a miss, and a miss costs the caller
73
129
  *
74
130
  * Providers swallow their own camera errors (they keep the last slice
@@ -91,8 +147,10 @@ export interface RuntimeStateBridgeLogger {
91
147
  */
92
148
  export interface RuntimeStateBridge<TStatus> {
93
149
  /** Run a stale-check; if the slice is missing or older than
94
- * `staleMs`, await `refresh()`. Idempotent within the freshness
95
- * window back-to-back calls touch zero camera I/O. */
150
+ * `staleMs`, refresh it awaiting the camera, or behind the caller
151
+ * when `staleRead` is `'serve-and-revalidate'` and a slice already
152
+ * exists. Idempotent within the freshness window — back-to-back calls
153
+ * touch zero camera I/O. */
96
154
  readonly ensureFresh: () => Promise<void>;
97
155
  /** Drop-in `getStatus` provider method. Includes the cross-device
98
156
  * guard + freshness check + status projection from the slice. */
@@ -113,6 +171,9 @@ export declare function createRuntimeStateBridge<TCap extends CapabilityDefiniti
113
171
  readonly empty: () => z.infer<TCap['status']['schema']>;
114
172
  /** Override the miss cooldown (tests, or a cap whose fetch is cheap). */
115
173
  readonly refreshMissCooldownMs?: number;
174
+ /** What a stale-but-present slice does. Defaults to `'await-refresh'`,
175
+ * which is what every caller did before the policy existed. */
176
+ readonly staleRead?: RuntimeStateStaleReadPolicy;
116
177
  /** Scoped logger so a refresh that never lands is visible per-device. */
117
178
  readonly logger?: RuntimeStateBridgeLogger;
118
179
  }): RuntimeStateBridge<z.infer<TCap['status']['schema']>>;
package/dist/index.d.ts CHANGED
@@ -153,8 +153,8 @@ export type { IBatteryOperated, IDoorbellButton, INativeSnapshot, IPanTiltZoom,
153
153
  export { getByPath, setByPath } from './device/path-util.js';
154
154
  export type { ReachabilityPollHandle, ReachabilityPollLogger, ReachabilityPollOptions, } from './device/reachability-poll.js';
155
155
  export { REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, startReachabilityPoll, } from './device/reachability-poll.js';
156
- export type { RuntimeStateBridge } from './device/runtime-state-helpers.js';
157
- export { createRuntimeStateBridge } from './device/runtime-state-helpers.js';
156
+ export type { RuntimeStateBridge, RuntimeStateStaleReadPolicy, } from './device/runtime-state-helpers.js';
157
+ export { createRuntimeStateBridge, OPERATOR_WRITTEN_STALE_MS, RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS, } from './device/runtime-state-helpers.js';
158
158
  export type { WireableField } from './device/schema-fields.js';
159
159
  export { enumerateItemArrayFields, enumerateSchemaFields } from './device/schema-fields.js';
160
160
  export type { SourceInfo } from './device/source-info.js';
package/dist/index.js CHANGED
@@ -18236,6 +18236,24 @@ var CameraStatusSchema = zod.z.object({
18236
18236
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
18237
18237
  fetchedAt: zod.z.number()
18238
18238
  });
18239
+ /**
18240
+ * Why the dispatcher does NOT consider a device the node HAS for the
18241
+ * camera-root election. The list is the CONTRACT between the orchestrator's
18242
+ * `resolveInferenceDeviceEligibility` (which computes it) and the admin UI
18243
+ * (which renders it) — the orchestrator's `InferenceDeviceExclusionReason`
18244
+ * derives from this tuple so the two can never drift.
18245
+ *
18246
+ * Every one of these drops used to be silent, and an accelerator that is
18247
+ * enabled, available, and never chosen is indistinguishable from one that was
18248
+ * never configured. The reason is the difference.
18249
+ */
18250
+ var INFERENCE_DEVICE_EXCLUSION_REASONS = [
18251
+ "disabled",
18252
+ "unavailable",
18253
+ "cannot-host-camera-root",
18254
+ "accelerator-preferred"
18255
+ ];
18256
+ var InferenceDeviceExclusionReasonSchema = zod.z.enum(INFERENCE_DEVICE_EXCLUSION_REASONS);
18239
18257
  var NodeInferenceDeviceSchema = zod.z.object({
18240
18258
  /** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
18241
18259
  key: zod.z.string(),
@@ -18266,7 +18284,17 @@ var NodeInferenceDeviceSchema = zod.z.object({
18266
18284
  * available per format; this is the stored selection that becomes the
18267
18285
  * default for EVERY camera landing on this accelerator.
18268
18286
  */
18269
- steps: zod.z.record(zod.z.string(), DeviceStepConfigSchema).optional()
18287
+ steps: zod.z.record(zod.z.string(), DeviceStepConfigSchema).optional(),
18288
+ /**
18289
+ * `null` when the device IS a camera-root candidate on this node; otherwise
18290
+ * the reason the dispatcher drops it. Computed by the SAME
18291
+ * `resolveInferenceDeviceEligibility` the dispatcher runs, so this view can
18292
+ * never disagree with the election — deriving it in the UI from
18293
+ * `enabled`/`available` would silently miss `cannot-host-camera-root` (needs
18294
+ * the node's model catalog) and `accelerator-preferred` (needs the node-wide
18295
+ * "an accelerator is serving" predicate).
18296
+ */
18297
+ exclusion: InferenceDeviceExclusionReasonSchema.nullable()
18270
18298
  });
18271
18299
  var NodeInferenceDevicesSchema = zod.z.object({
18272
18300
  nodeId: zod.z.string(),
@@ -24586,7 +24614,41 @@ var ConnectionEndpointSchema = zod.z.object({
24586
24614
  */
24587
24615
  priority: zod.z.number()
24588
24616
  });
24589
- var GetConnectionEndpointsResultSchema = zod.z.object({ endpoints: zod.z.array(ConnectionEndpointSchema).readonly() });
24617
+ /**
24618
+ * Where the advertised local port came from. Ordered most → least
24619
+ * authoritative, and the whole point of returning it: a client must be able to
24620
+ * tell a FACT about the hub's socket from an echo of its own guess.
24621
+ */
24622
+ var LocalPortSourceEnum = zod.z.enum([
24623
+ "server-config",
24624
+ "server-env",
24625
+ "caller-hint",
24626
+ "default"
24627
+ ]);
24628
+ /** The port every LAN/loopback `baseUrl` in the same result was built with. */
24629
+ var AdvertisedLocalPortSchema = zod.z.object({
24630
+ port: zod.z.number().int().min(1).max(65535),
24631
+ source: LocalPortSourceEnum
24632
+ });
24633
+ var GetConnectionEndpointsResultSchema = zod.z.object({
24634
+ endpoints: zod.z.array(ConnectionEndpointSchema).readonly(),
24635
+ /**
24636
+ * The port the hub built the LAN/loopback URLs with, and where that number
24637
+ * came from.
24638
+ *
24639
+ * Returned rather than merely applied, because "the URL is right" and "the
24640
+ * client can KNOW the URL is right" are different properties. A client that
24641
+ * only sees a corrected URL cannot distinguish a hub that fixed the port from
24642
+ * a hub that echoed the port the client sent, so it cannot decide whether to
24643
+ * race the candidate or discard it. With `source` it can: anything but
24644
+ * `caller-hint` is the hub's own socket.
24645
+ *
24646
+ * Absent on hubs predating this field — a client that finds it missing is
24647
+ * talking to an echoing hub and must degrade exactly as it does for
24648
+ * `caller-hint`.
24649
+ */
24650
+ localPort: AdvertisedLocalPortSchema
24651
+ });
24590
24652
  /**
24591
24653
  * The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
24592
24654
  * AUTO (resolved from the candidate ranking at send time); `resolved` reports
@@ -24632,10 +24694,35 @@ var localNetworkCapability = {
24632
24694
  * Honours `getAllowedAddresses()` when set — addresses outside
24633
24695
  * the allowlist are dropped (the public tunnel + loopback are
24634
24696
  * always included as escape hatches).
24697
+ *
24698
+ * **The port is the hub's, not the caller's** (D62 — a function's fact
24699
+ * belongs to whoever already owns it). This method used to take a `port`
24700
+ * and echo it onto every LAN and loopback URL it advertised, which made
24701
+ * every client a second authority on a socket only the hub binds. A viewer
24702
+ * configured with a port-less public URL (`https://camstack.example.top`)
24703
+ * infers 443 from the scheme, asks with 443, and was handed
24704
+ * `https://192.168.1.9:443` for a hub listening on 4443. That candidate
24705
+ * cannot ever answer, and losing its race reads in the log exactly like
24706
+ * "the LAN was tried and it was slower" — so an operator sitting on his own
24707
+ * WiFi stayed on the public tunnel for weeks, with the LAN candidate born
24708
+ * dead on every single connect.
24709
+ *
24710
+ * The hub now resolves its own listen port and reports it as `localPort`,
24711
+ * with the SOURCE of the number, so a client can tell a fact from an echo.
24712
+ *
24713
+ * Out of scope on purpose: a LAN URL that is not the hub's own socket (a
24714
+ * reverse proxy in front of it on another port) is not this method's to
24715
+ * invent either — pin it with `setNotificationEndpoint` / a configured
24716
+ * origin, which is an operator statement rather than a guess.
24635
24717
  */
24636
24718
  getConnectionEndpoints: require_sleep.method(zod.z.object({
24637
- /** Local hub HTTP port to use in base URLs. */
24638
- port: zod.z.number().int().min(1).max(65535),
24719
+ /**
24720
+ * LEGACY HINT — do not send from new code. Kept optional so clients
24721
+ * written against the echoing contract keep working; the hub uses it
24722
+ * only when it cannot read its own port, and says so via
24723
+ * `localPort.source === 'caller-hint'`.
24724
+ */
24725
+ port: zod.z.number().int().min(1).max(65535).optional(),
24639
24726
  /** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
24640
24727
  * candidate. Default `true`. */
24641
24728
  includeLoopback: zod.z.boolean().optional(),
@@ -32409,11 +32496,63 @@ function startReachabilityPoll(options) {
32409
32496
  //#endregion
32410
32497
  //#region src/device/runtime-state-helpers.ts
32411
32498
  var LAST_FETCHED_FIELD = "lastFetchedAt";
32499
+ /**
32500
+ * How long a bridge stops re-attempting a refresh that did not land.
32501
+ *
32502
+ * Sized against the failure it exists for: a camera whose control plane
32503
+ * is unreachable costs the FULL connect give-up (~3s on Linux when the
32504
+ * neighbour never answers, up to the client's own timeout otherwise) on
32505
+ * every attempt, and a failed refresh never advances `lastFetchedAt`, so
32506
+ * without a cooldown the slice is permanently stale and EVERY read pays
32507
+ * that price. One attempt per minute is enough to notice the camera
32508
+ * coming back; per-read is enough to stall the viewer's first paint.
32509
+ */
32510
+ var RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS = 6e4;
32511
+ /**
32512
+ * The freshness window for a cap whose value changes ONLY when WE write it.
32513
+ *
32514
+ * The usual `staleMs: 10_000` is tuned for a reading that moves on its own — a
32515
+ * battery level, a day/night state that flips at dusk. It is the wrong number
32516
+ * for a cap like `privacy-mask`, whose two facts (is the video mask on, is the
32517
+ * microphone on) change when an operator changes them, through a `setMask` /
32518
+ * `setAudioEnabled` that **re-reads the camera and rewrites this very slice**.
32519
+ * A write is therefore its own invalidation: the window never delays an
32520
+ * operator's own change, however long it is.
32521
+ *
32522
+ * What the window really bounds is the ONE case we do not write: somebody
32523
+ * changing the mask in the vendor app or the camera's web UI. Ten minutes is
32524
+ * the trade — that change is visible within ten minutes, and a fleet of 29
32525
+ * cameras behind a page that polls every 5s costs about 3 camera round trips a
32526
+ * minute instead of 696
32527
+ * ([D221](../../../../docs/decisions/adr-0221-a-polled-list-never-dials-a-camera.md)).
32528
+ *
32529
+ * Use it ONLY with {@link RuntimeStateStaleReadPolicy} `'serve-and-revalidate'`.
32530
+ * On the awaiting default a window this long does not remove the stall, it
32531
+ * merely makes it rarer and just as long.
32532
+ */
32533
+ var OPERATOR_WRITTEN_STALE_MS = 10 * 6e4;
32412
32534
  function createRuntimeStateBridge(params) {
32413
32535
  const { runtimeState, cap, ownDeviceId, refresh, staleMs, empty, logger } = params;
32414
32536
  const missCooldownMs = params.refreshMissCooldownMs ?? 6e4;
32537
+ const staleRead = params.staleRead ?? "await-refresh";
32415
32538
  /** Epoch ms until which a refresh is not re-attempted. 0 = no cooldown. */
32416
32539
  let missCooldownUntil = 0;
32540
+ /**
32541
+ * The refresh this bridge currently has in the air, if any.
32542
+ *
32543
+ * Providers single-flight their own camera client, so this is not what stops
32544
+ * a second round trip. What it stops is a POLLED reader JOINING one: under
32545
+ * `'serve-and-revalidate'` a read that finds a refresh already outstanding is
32546
+ * answered from the slice at once — even a cold, empty slice, which reports
32547
+ * UNKNOWN, which is the truth about a camera nobody has reached.
32548
+ *
32549
+ * That distinction is the whole cost of an unreachable camera. Measured on
32550
+ * the live hub (device 3629, an offline battery Reolink): its refresh takes
32551
+ * 23.1s to give up, so without this every 5s poll landing inside those 23s
32552
+ * joined the wait and spent the caller's full 1.2s source budget — five
32553
+ * stalled polls per cooldown cycle, for one camera, forever.
32554
+ */
32555
+ let refreshInFlight = null;
32417
32556
  const readFetchedAt = () => {
32418
32557
  const value = runtimeState.getCapState(cap.name)?.[LAST_FETCHED_FIELD];
32419
32558
  return typeof value === "number" ? value : 0;
@@ -32434,14 +32573,14 @@ function createRuntimeStateBridge(params) {
32434
32573
  }
32435
32574
  });
32436
32575
  };
32437
- const ensureFresh = async () => {
32438
- const slice = runtimeState.getCapState(cap.name);
32439
- const fetchedAt = readFetchedAt();
32440
- if (slice && Date.now() - fetchedAt <= staleMs) {
32441
- missCooldownUntil = 0;
32442
- return;
32443
- }
32444
- if (Date.now() < missCooldownUntil) return;
32576
+ /**
32577
+ * One refresh attempt, plus the LANDED check that decides the cooldown.
32578
+ *
32579
+ * @param fetchedAt What `lastFetchedAt` was before the attempt — the only
32580
+ * evidence the bridge has that the refresh persisted
32581
+ * anything, since providers swallow their own camera errors.
32582
+ */
32583
+ const runRefresh = async (fetchedAt) => {
32445
32584
  try {
32446
32585
  await refresh();
32447
32586
  } catch (err) {
@@ -32457,6 +32596,41 @@ function createRuntimeStateBridge(params) {
32457
32596
  }
32458
32597
  openMissCooldown(void 0);
32459
32598
  };
32599
+ /**
32600
+ * Start a refresh and remember it, at most one at a time.
32601
+ *
32602
+ * It never rejects: under `'serve-and-revalidate'` the caller is answered
32603
+ * from the slice either way, so a floating rejection would take the process
32604
+ * down for a fault the miss cooldown has already recorded and logged.
32605
+ */
32606
+ const startRefresh = (fetchedAt) => {
32607
+ const existing = refreshInFlight;
32608
+ if (existing !== null) return existing;
32609
+ const started = runRefresh(fetchedAt).catch(() => void 0).finally(() => {
32610
+ refreshInFlight = null;
32611
+ });
32612
+ refreshInFlight = started;
32613
+ return started;
32614
+ };
32615
+ const ensureFresh = async () => {
32616
+ const slice = runtimeState.getCapState(cap.name);
32617
+ const fetchedAt = readFetchedAt();
32618
+ if (slice && Date.now() - fetchedAt <= staleMs) {
32619
+ missCooldownUntil = 0;
32620
+ return;
32621
+ }
32622
+ if (Date.now() < missCooldownUntil) return;
32623
+ if (staleRead === "serve-and-revalidate") {
32624
+ if (refreshInFlight !== null) return;
32625
+ if (slice && fetchedAt > 0) {
32626
+ startRefresh(fetchedAt);
32627
+ return;
32628
+ }
32629
+ await startRefresh(fetchedAt);
32630
+ return;
32631
+ }
32632
+ await runRefresh(fetchedAt);
32633
+ };
32460
32634
  const projectStatus = () => {
32461
32635
  const slice = runtimeState.getCapState(cap.name);
32462
32636
  if (!slice) return empty();
@@ -47267,6 +47441,7 @@ exports.HistoryResolutionEnum = HistoryResolutionEnum;
47267
47441
  exports.HumidifierStatusSchema = HumidifierStatusSchema;
47268
47442
  exports.HumiditySensorStatusSchema = HumiditySensorStatusSchema;
47269
47443
  exports.HvacModeSchema = HvacModeSchema;
47444
+ exports.INFERENCE_DEVICE_EXCLUSION_REASONS = INFERENCE_DEVICE_EXCLUSION_REASONS;
47270
47445
  exports.ImageContractSchema = ImageContractSchema;
47271
47446
  exports.ImageContractStateSchema = ImageContractStateSchema;
47272
47447
  exports.ImageRotateSchema = ImageRotateSchema;
@@ -47274,6 +47449,7 @@ exports.ImageSettingsOptionsSchema = ImageSettingsOptionsSchema;
47274
47449
  exports.ImageSettingsPatchSchema = ImageSettingsPatchSchema;
47275
47450
  exports.ImageSettingsStatusSchema = ImageSettingsStatusSchema;
47276
47451
  exports.ImageStatusSchema = ImageStatusSchema;
47452
+ exports.InferenceDeviceExclusionReasonSchema = InferenceDeviceExclusionReasonSchema;
47277
47453
  exports.IngestOwnerSchema = IngestOwnerSchema;
47278
47454
  exports.InstalledPackageSchema = InstalledPackageSchema;
47279
47455
  exports.IntegrationLiteSchema = IntegrationLiteSchema;
@@ -47486,6 +47662,7 @@ exports.NotificationFormatSchema = NotificationFormatSchema;
47486
47662
  exports.NotificationSchema = NotificationSchema;
47487
47663
  exports.NotifierStatusSchema = NotifierStatusSchema;
47488
47664
  exports.NumericSensorStatusSchema = NumericSensorStatusSchema;
47665
+ exports.OPERATOR_WRITTEN_STALE_MS = OPERATOR_WRITTEN_STALE_MS;
47489
47666
  exports.OPS_LOG_DEFAULT_LIMIT = OPS_LOG_DEFAULT_LIMIT;
47490
47667
  exports.OPS_LOG_RING_DEFAULT_MAX = OPS_LOG_RING_DEFAULT_MAX;
47491
47668
  exports.OauthIntegrationDescriptorSchema = OauthIntegrationDescriptorSchema;
@@ -47568,6 +47745,7 @@ exports.RESERVED_BINDING_NAMES = RESERVED_BINDING_NAMES;
47568
47745
  exports.RESTORED_CAP_NAMES = RESTORED_CAP_NAMES;
47569
47746
  exports.RUNTIME_DEFAULTS = RUNTIME_DEFAULTS;
47570
47747
  exports.RUNTIME_STATE_POLICY = RUNTIME_STATE_POLICY;
47748
+ exports.RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS = RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS;
47571
47749
  exports.RUNTIME_TO_FORMAT = RUNTIME_TO_FORMAT;
47572
47750
  exports.RawStateResultSchema = require_sleep.RawStateResultSchema;
47573
47751
  exports.ReadGopBytesResultSchema = ReadGopBytesResultSchema;
package/dist/index.mjs CHANGED
@@ -18235,6 +18235,24 @@ var CameraStatusSchema = z.object({
18235
18235
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
18236
18236
  fetchedAt: z.number()
18237
18237
  });
18238
+ /**
18239
+ * Why the dispatcher does NOT consider a device the node HAS for the
18240
+ * camera-root election. The list is the CONTRACT between the orchestrator's
18241
+ * `resolveInferenceDeviceEligibility` (which computes it) and the admin UI
18242
+ * (which renders it) — the orchestrator's `InferenceDeviceExclusionReason`
18243
+ * derives from this tuple so the two can never drift.
18244
+ *
18245
+ * Every one of these drops used to be silent, and an accelerator that is
18246
+ * enabled, available, and never chosen is indistinguishable from one that was
18247
+ * never configured. The reason is the difference.
18248
+ */
18249
+ var INFERENCE_DEVICE_EXCLUSION_REASONS = [
18250
+ "disabled",
18251
+ "unavailable",
18252
+ "cannot-host-camera-root",
18253
+ "accelerator-preferred"
18254
+ ];
18255
+ var InferenceDeviceExclusionReasonSchema = z.enum(INFERENCE_DEVICE_EXCLUSION_REASONS);
18238
18256
  var NodeInferenceDeviceSchema = z.object({
18239
18257
  /** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
18240
18258
  key: z.string(),
@@ -18265,7 +18283,17 @@ var NodeInferenceDeviceSchema = z.object({
18265
18283
  * available per format; this is the stored selection that becomes the
18266
18284
  * default for EVERY camera landing on this accelerator.
18267
18285
  */
18268
- steps: z.record(z.string(), DeviceStepConfigSchema).optional()
18286
+ steps: z.record(z.string(), DeviceStepConfigSchema).optional(),
18287
+ /**
18288
+ * `null` when the device IS a camera-root candidate on this node; otherwise
18289
+ * the reason the dispatcher drops it. Computed by the SAME
18290
+ * `resolveInferenceDeviceEligibility` the dispatcher runs, so this view can
18291
+ * never disagree with the election — deriving it in the UI from
18292
+ * `enabled`/`available` would silently miss `cannot-host-camera-root` (needs
18293
+ * the node's model catalog) and `accelerator-preferred` (needs the node-wide
18294
+ * "an accelerator is serving" predicate).
18295
+ */
18296
+ exclusion: InferenceDeviceExclusionReasonSchema.nullable()
18269
18297
  });
18270
18298
  var NodeInferenceDevicesSchema = z.object({
18271
18299
  nodeId: z.string(),
@@ -24585,7 +24613,41 @@ var ConnectionEndpointSchema = z.object({
24585
24613
  */
24586
24614
  priority: z.number()
24587
24615
  });
24588
- var GetConnectionEndpointsResultSchema = z.object({ endpoints: z.array(ConnectionEndpointSchema).readonly() });
24616
+ /**
24617
+ * Where the advertised local port came from. Ordered most → least
24618
+ * authoritative, and the whole point of returning it: a client must be able to
24619
+ * tell a FACT about the hub's socket from an echo of its own guess.
24620
+ */
24621
+ var LocalPortSourceEnum = z.enum([
24622
+ "server-config",
24623
+ "server-env",
24624
+ "caller-hint",
24625
+ "default"
24626
+ ]);
24627
+ /** The port every LAN/loopback `baseUrl` in the same result was built with. */
24628
+ var AdvertisedLocalPortSchema = z.object({
24629
+ port: z.number().int().min(1).max(65535),
24630
+ source: LocalPortSourceEnum
24631
+ });
24632
+ var GetConnectionEndpointsResultSchema = z.object({
24633
+ endpoints: z.array(ConnectionEndpointSchema).readonly(),
24634
+ /**
24635
+ * The port the hub built the LAN/loopback URLs with, and where that number
24636
+ * came from.
24637
+ *
24638
+ * Returned rather than merely applied, because "the URL is right" and "the
24639
+ * client can KNOW the URL is right" are different properties. A client that
24640
+ * only sees a corrected URL cannot distinguish a hub that fixed the port from
24641
+ * a hub that echoed the port the client sent, so it cannot decide whether to
24642
+ * race the candidate or discard it. With `source` it can: anything but
24643
+ * `caller-hint` is the hub's own socket.
24644
+ *
24645
+ * Absent on hubs predating this field — a client that finds it missing is
24646
+ * talking to an echoing hub and must degrade exactly as it does for
24647
+ * `caller-hint`.
24648
+ */
24649
+ localPort: AdvertisedLocalPortSchema
24650
+ });
24589
24651
  /**
24590
24652
  * The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
24591
24653
  * AUTO (resolved from the candidate ranking at send time); `resolved` reports
@@ -24631,10 +24693,35 @@ var localNetworkCapability = {
24631
24693
  * Honours `getAllowedAddresses()` when set — addresses outside
24632
24694
  * the allowlist are dropped (the public tunnel + loopback are
24633
24695
  * always included as escape hatches).
24696
+ *
24697
+ * **The port is the hub's, not the caller's** (D62 — a function's fact
24698
+ * belongs to whoever already owns it). This method used to take a `port`
24699
+ * and echo it onto every LAN and loopback URL it advertised, which made
24700
+ * every client a second authority on a socket only the hub binds. A viewer
24701
+ * configured with a port-less public URL (`https://camstack.example.top`)
24702
+ * infers 443 from the scheme, asks with 443, and was handed
24703
+ * `https://192.168.1.9:443` for a hub listening on 4443. That candidate
24704
+ * cannot ever answer, and losing its race reads in the log exactly like
24705
+ * "the LAN was tried and it was slower" — so an operator sitting on his own
24706
+ * WiFi stayed on the public tunnel for weeks, with the LAN candidate born
24707
+ * dead on every single connect.
24708
+ *
24709
+ * The hub now resolves its own listen port and reports it as `localPort`,
24710
+ * with the SOURCE of the number, so a client can tell a fact from an echo.
24711
+ *
24712
+ * Out of scope on purpose: a LAN URL that is not the hub's own socket (a
24713
+ * reverse proxy in front of it on another port) is not this method's to
24714
+ * invent either — pin it with `setNotificationEndpoint` / a configured
24715
+ * origin, which is an operator statement rather than a guess.
24634
24716
  */
24635
24717
  getConnectionEndpoints: method(z.object({
24636
- /** Local hub HTTP port to use in base URLs. */
24637
- port: z.number().int().min(1).max(65535),
24718
+ /**
24719
+ * LEGACY HINT — do not send from new code. Kept optional so clients
24720
+ * written against the echoing contract keep working; the hub uses it
24721
+ * only when it cannot read its own port, and says so via
24722
+ * `localPort.source === 'caller-hint'`.
24723
+ */
24724
+ port: z.number().int().min(1).max(65535).optional(),
24638
24725
  /** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
24639
24726
  * candidate. Default `true`. */
24640
24727
  includeLoopback: z.boolean().optional(),
@@ -32401,11 +32488,63 @@ function startReachabilityPoll(options) {
32401
32488
  //#endregion
32402
32489
  //#region src/device/runtime-state-helpers.ts
32403
32490
  var LAST_FETCHED_FIELD = "lastFetchedAt";
32491
+ /**
32492
+ * How long a bridge stops re-attempting a refresh that did not land.
32493
+ *
32494
+ * Sized against the failure it exists for: a camera whose control plane
32495
+ * is unreachable costs the FULL connect give-up (~3s on Linux when the
32496
+ * neighbour never answers, up to the client's own timeout otherwise) on
32497
+ * every attempt, and a failed refresh never advances `lastFetchedAt`, so
32498
+ * without a cooldown the slice is permanently stale and EVERY read pays
32499
+ * that price. One attempt per minute is enough to notice the camera
32500
+ * coming back; per-read is enough to stall the viewer's first paint.
32501
+ */
32502
+ var RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS = 6e4;
32503
+ /**
32504
+ * The freshness window for a cap whose value changes ONLY when WE write it.
32505
+ *
32506
+ * The usual `staleMs: 10_000` is tuned for a reading that moves on its own — a
32507
+ * battery level, a day/night state that flips at dusk. It is the wrong number
32508
+ * for a cap like `privacy-mask`, whose two facts (is the video mask on, is the
32509
+ * microphone on) change when an operator changes them, through a `setMask` /
32510
+ * `setAudioEnabled` that **re-reads the camera and rewrites this very slice**.
32511
+ * A write is therefore its own invalidation: the window never delays an
32512
+ * operator's own change, however long it is.
32513
+ *
32514
+ * What the window really bounds is the ONE case we do not write: somebody
32515
+ * changing the mask in the vendor app or the camera's web UI. Ten minutes is
32516
+ * the trade — that change is visible within ten minutes, and a fleet of 29
32517
+ * cameras behind a page that polls every 5s costs about 3 camera round trips a
32518
+ * minute instead of 696
32519
+ * ([D221](../../../../docs/decisions/adr-0221-a-polled-list-never-dials-a-camera.md)).
32520
+ *
32521
+ * Use it ONLY with {@link RuntimeStateStaleReadPolicy} `'serve-and-revalidate'`.
32522
+ * On the awaiting default a window this long does not remove the stall, it
32523
+ * merely makes it rarer and just as long.
32524
+ */
32525
+ var OPERATOR_WRITTEN_STALE_MS = 10 * 6e4;
32404
32526
  function createRuntimeStateBridge(params) {
32405
32527
  const { runtimeState, cap, ownDeviceId, refresh, staleMs, empty, logger } = params;
32406
32528
  const missCooldownMs = params.refreshMissCooldownMs ?? 6e4;
32529
+ const staleRead = params.staleRead ?? "await-refresh";
32407
32530
  /** Epoch ms until which a refresh is not re-attempted. 0 = no cooldown. */
32408
32531
  let missCooldownUntil = 0;
32532
+ /**
32533
+ * The refresh this bridge currently has in the air, if any.
32534
+ *
32535
+ * Providers single-flight their own camera client, so this is not what stops
32536
+ * a second round trip. What it stops is a POLLED reader JOINING one: under
32537
+ * `'serve-and-revalidate'` a read that finds a refresh already outstanding is
32538
+ * answered from the slice at once — even a cold, empty slice, which reports
32539
+ * UNKNOWN, which is the truth about a camera nobody has reached.
32540
+ *
32541
+ * That distinction is the whole cost of an unreachable camera. Measured on
32542
+ * the live hub (device 3629, an offline battery Reolink): its refresh takes
32543
+ * 23.1s to give up, so without this every 5s poll landing inside those 23s
32544
+ * joined the wait and spent the caller's full 1.2s source budget — five
32545
+ * stalled polls per cooldown cycle, for one camera, forever.
32546
+ */
32547
+ let refreshInFlight = null;
32409
32548
  const readFetchedAt = () => {
32410
32549
  const value = runtimeState.getCapState(cap.name)?.[LAST_FETCHED_FIELD];
32411
32550
  return typeof value === "number" ? value : 0;
@@ -32426,14 +32565,14 @@ function createRuntimeStateBridge(params) {
32426
32565
  }
32427
32566
  });
32428
32567
  };
32429
- const ensureFresh = async () => {
32430
- const slice = runtimeState.getCapState(cap.name);
32431
- const fetchedAt = readFetchedAt();
32432
- if (slice && Date.now() - fetchedAt <= staleMs) {
32433
- missCooldownUntil = 0;
32434
- return;
32435
- }
32436
- if (Date.now() < missCooldownUntil) return;
32568
+ /**
32569
+ * One refresh attempt, plus the LANDED check that decides the cooldown.
32570
+ *
32571
+ * @param fetchedAt What `lastFetchedAt` was before the attempt — the only
32572
+ * evidence the bridge has that the refresh persisted
32573
+ * anything, since providers swallow their own camera errors.
32574
+ */
32575
+ const runRefresh = async (fetchedAt) => {
32437
32576
  try {
32438
32577
  await refresh();
32439
32578
  } catch (err) {
@@ -32449,6 +32588,41 @@ function createRuntimeStateBridge(params) {
32449
32588
  }
32450
32589
  openMissCooldown(void 0);
32451
32590
  };
32591
+ /**
32592
+ * Start a refresh and remember it, at most one at a time.
32593
+ *
32594
+ * It never rejects: under `'serve-and-revalidate'` the caller is answered
32595
+ * from the slice either way, so a floating rejection would take the process
32596
+ * down for a fault the miss cooldown has already recorded and logged.
32597
+ */
32598
+ const startRefresh = (fetchedAt) => {
32599
+ const existing = refreshInFlight;
32600
+ if (existing !== null) return existing;
32601
+ const started = runRefresh(fetchedAt).catch(() => void 0).finally(() => {
32602
+ refreshInFlight = null;
32603
+ });
32604
+ refreshInFlight = started;
32605
+ return started;
32606
+ };
32607
+ const ensureFresh = async () => {
32608
+ const slice = runtimeState.getCapState(cap.name);
32609
+ const fetchedAt = readFetchedAt();
32610
+ if (slice && Date.now() - fetchedAt <= staleMs) {
32611
+ missCooldownUntil = 0;
32612
+ return;
32613
+ }
32614
+ if (Date.now() < missCooldownUntil) return;
32615
+ if (staleRead === "serve-and-revalidate") {
32616
+ if (refreshInFlight !== null) return;
32617
+ if (slice && fetchedAt > 0) {
32618
+ startRefresh(fetchedAt);
32619
+ return;
32620
+ }
32621
+ await startRefresh(fetchedAt);
32622
+ return;
32623
+ }
32624
+ await runRefresh(fetchedAt);
32625
+ };
32452
32626
  const projectStatus = () => {
32453
32627
  const slice = runtimeState.getCapState(cap.name);
32454
32628
  if (!slice) return empty();
@@ -46910,4 +47084,4 @@ function enumerateInferenceDevices(hw) {
46910
47084
  return out;
46911
47085
  }
46912
47086
  //#endregion
46913
- export { ACCESSORY_LABEL, ACCESS_ROLES, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AUDIO_PRESETS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionCandidateResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, AdoptionJobSchema, AdoptionJobStateSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, AdoptionOutcomeSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationActionSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationControlStatusSchema, AutomationRecipeSchema, AutomationTriggerSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BATTERY_UNREACHABLE_AFTER_MS, BOOT_RECOVERY_BACKOFF_MS, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, CLUSTER_MODEL_SCOPED_STEPS, CLUSTER_MODEL_SECTION_ID, COCO_80_LABELS, COCO_TO_MACRO, CONNECTION_TEST_TIMEOUT_MS, CORE_BLOCKS_ADDON_ID, CORE_BLOCK_ADDON_PREFIX, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, ConnectionTestOutcomeSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileResultSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_CLUSTER_STEP_MODELS, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_POOL_MEMORY_POLICY, DEFAULT_RECORDING_PROFILES, DEFAULT_RETENTION, DEFAULT_RUNTIME_STATE_DURABILITY, DEFAULT_SCRUB_THUMBNAIL_PRESET, DEFAULT_TIMELAPSE_PREVIEW_TEXT, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_MACRO_CLASSES, DETECTION_PIPELINE_CAP_NAME, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, EngineInfoSchema as DataStoreEngineInfoSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DeclaredDevices, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceSelectorSchema, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DiskReconcileJobSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPORT_DENSE_MAX_RANGES, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventMediaArtifactSchema, EventMediaCoverageSchema, EventMediaKindSchema, EventMediaProductionSchema, EventSourceType, ExportBytesSchema, ExportDenseRangeSchema, ExportDenseSchema, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionBindingSourceSchema, ExpressionEvalError, ExpressionFieldBindingSchema, ExpressionGlobalBindingSchema, ExpressionLiteralBindingSchema, ExpressionParseError, ExpressionSourceSchema, FULL_IMAGE_BBOX, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, Fmp4BoxSplitter, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HfModelResolutionSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LinkedDevicesModeSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmDownloadProgressSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRetryPolicySchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmTimeoutDefaults, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_CLIP_EVENT_IDS, MAX_CLIP_LABELS, MAX_CONDITION_DEPTH, MAX_CONDITION_LEAVES, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, METHOD_DEVICE_SELECTORS, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelExtraFileSchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_HOLD_FIELD, NATIVE_LEASE_HOLD_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, NC_ALARM_SYSTEM_EVENT_KINDS, NC_AUDIO_DBFS_FLOOR, NC_AUDIO_DB_MAX, NC_AUDIO_DB_MIN, NC_AUDIO_DB_OFFERED, NC_AUDIO_DB_STEP, NC_AUDIO_DEFAULTS, NC_AUDIO_HIT_PERCENT_MAX, NC_AUDIO_HIT_PERCENT_MIN, NC_AUDIO_SAMPLING_MAX_SEC, NC_AUDIO_SAMPLING_MIN_SEC, NC_AUDIO_SEED, NC_AUTHORABLE_SYSTEM_EVENT_KINDS, NC_BASE_CONDITION_KEYS, NC_CONDITION_CATALOG, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX, NC_CONFIRM_DEFAULT_TIMEOUT_MS, NC_CONFIRM_MAX_TIMEOUT_MS, NC_CONFIRM_MIN_TIMEOUT_MS, NC_DEFAULT_SNOOZE_MINUTES, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_OCCUPANCY_DEFAULTS, NC_RULE_EDITOR_SECTION_ORDER, NC_RULE_KIND_SPECS, NC_RULE_SECTIONS, NC_SNOOZE_MAX_MINUTES, NC_SYSTEM_DELIVERY, NC_SYSTEM_EVENT_FILTER_KEYS, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcAlarmSkipReasonSchema, NcAlarmSkippedDeviceSchema, NcAudioConditionSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcConfirmExpectSchema, NcConfirmSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcSceneConditionSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcSystemEventConditionSchema, NcSystemEventKindSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PoolMemoryWatchdog, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RECORDING_EXPORT_MAX_READ_BYTES, RESERVED_BINDING_NAMES, RESTORED_CAP_NAMES, RUNTIME_DEFAULTS, RUNTIME_STATE_POLICY, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRebalanceInputSchema, RecordingRebalanceMoveSchema, RecordingRebalancePlanSchema, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageClassSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainMacroClassSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTransitionResultSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCENE_CONDITIONS, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, SCENE_DEFAULT_ANCHOR_THRESHOLD, SCENE_DEFAULT_CHECK_INTERVAL_SEC, SCENE_DEFAULT_OBSERVATION_SPACING_SEC, SCENE_DEFAULT_QUIET_SECONDS, SCENE_DEFAULT_UNCOVERED_POLICY, SCENE_DIVERGED, SCENE_RESET_RECAPTURES, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SYSTEM_SCOPE_DEVICE_METHODS, SceneCheckSchema, SceneConditionSchema, SceneConfirmSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, SceneUnavailableSchema, SceneUncoveredPolicySchema, SceneVerdictSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SetSiteLocationInputSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SiteLocationSchema, SiteLocationSourceSchema, SiteLocationStatusSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, StorageMigrationClassSchema, StorageMigrationDestinationsSchema, StorageMigrationFootageMoveInputSchema, StorageMigrationInputSchema, StorageMigrationJobSchema, StorageMigrationLeaseInputSchema, StorageMigrationMediaMoveInputSchema, StorageMigrationMoveSchema, StorageMigrationParticipantSchema, StorageMigrationPhaseSchema, StorageMigrationPlanSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMELAPSE_DENSE_FLOOR_SEC, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalInstanceInfoSchema, TerminalLegacyCameraSchema, TerminalOutputBatchSchema, TerminalOutputEventSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestConnectionStatusEnum, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainingExportDeviceTotalsSchema, TrainingExportSummarySchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VISIT_MERGE_GAP_MS, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, WEBRTC_EGRESS_PROFILE, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, asBoolean, asJsonArray, asJsonObject, asNumber, asString, assertTimelapseCadences, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioIsFailClosed, audioKindId, audioLabelChoices, audioMetricsCapability, audioModeOf, audioOrDefaults, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildRoleScopes, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyBearerPrincipal, classifyStream, classifyStreams, climateControlCapability, clusterModelSettingKey, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, commitWatchdogRestart, compileExpression, compileExpressionSafe, composeSwitchedOff, conditionDepth, conditionExclusionReason, conditionVisibleForKind, connectionTestCapability, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlockAddonId, coreBlockIdFromAddonId, coreBlocksCapability, cosineSimilarity, countConditionLeaves, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, declarationOwnerNodeId, decodeVectorBase64, decoderCapability, defaultDeliveryForSection, defaultDeviceFor, defineCustomActions, deriveBatteryPresence, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectAccessRole, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceSelectorMatches, deviceStateCapability, deviceStatusCapability, doorbellCapability, droppedConditionsForKind, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateExpressionSource, evaluatePoolMemory, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, generateAutomationBlock, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, initialPoolMemoryState, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isAudioLabelSelected, isAudioRule, isBaseConditionKey, isBatteryPresenceFault, isClusterScopedStep, isCollectionArrayMethod, isDeployableToAgent, isDetectionMacroClass, isDeviceConfigCap, isDeviceScopedCap, isEvent, isIsolatedBuiltin, isNode, isObjectInput, isOccupancyRule, isRestoredCap, isSameAddonId, isScheduleActive, isSoftwareDecode, isSystemDelivery, isVoidInput, jobKindSchema, kebabToCamel, knownValues, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logBannerArgs, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, methodAccessForHttpMethod, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeAudioLabel, normalizeTokenScopes, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, osdManagerCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProcStatus, parseProfileBrokerId, parseRuleSection, parseStreamParamsFormPatch, patchAudio, petFeederCapability, pickAccessoryControl, pickClusterStepModels, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickRestartCandidate, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, poolMemoryThreshold, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, principalMayReachAddon, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readClusterStepModels, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readTimelapseGeneratedAt, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resetPoolBaseline, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveClusterStepModelId, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolvePoolMemoryPolicy, resolveRecordingProfiles, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, resolveViewableDeviceIds, roleSpec, ruleEditorSectionsForKind, ruleKindOf, ruleKindSpec, ruleMatchesSection, ruleSection, ruleSectionOf, ruleSeedForSection, runInferenceStep, runtimeDevices, runtimeStatePolicyFor, sceneMonitorCapability, scopeInherits, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageMigrationCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, summarizeEffectiveScope, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, systemEventFilterApplies, systemEventFilterAppliesToAnyKind, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, toggleAudioLabel, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, validateRecipeBounds, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
47087
+ export { ACCESSORY_LABEL, ACCESS_ROLES, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AUDIO_PRESETS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionCandidateResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, AdoptionJobSchema, AdoptionJobStateSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, AdoptionOutcomeSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationActionSchema, AutomationConditionOperatorSchema, AutomationConditionSchema, AutomationControlStatusSchema, AutomationRecipeSchema, AutomationTriggerSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BATTERY_UNREACHABLE_AFTER_MS, BOOT_RECOVERY_BACKOFF_MS, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, CLUSTER_MODEL_SCOPED_STEPS, CLUSTER_MODEL_SECTION_ID, COCO_80_LABELS, COCO_TO_MACRO, CONNECTION_TEST_TIMEOUT_MS, CORE_BLOCKS_ADDON_ID, CORE_BLOCK_ADDON_PREFIX, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusDegradationReasonSchema, CameraStatusDegradationSchema, CameraStatusSchema, CameraStatusStageSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, ConnectionTestOutcomeSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileResultSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DECLARED_DEVICE_SWEEP_LIMIT, DECLARED_INTEGRATION_FIXED_KEY, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_CLUSTER_STEP_MODELS, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_POOL_MEMORY_POLICY, DEFAULT_RECORDING_PROFILES, DEFAULT_RETENTION, DEFAULT_RUNTIME_STATE_DURABILITY, DEFAULT_SCRUB_THUMBNAIL_PRESET, DEFAULT_TIMELAPSE_PREVIEW_TEXT, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_MACRO_CLASSES, DETECTION_PIPELINE_CAP_NAME, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, EngineInfoSchema as DataStoreEngineInfoSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DeclaredDevices, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceSelectorSchema, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DiskReconcileJobSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPORT_DENSE_MAX_RANGES, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventMediaArtifactSchema, EventMediaCoverageSchema, EventMediaKindSchema, EventMediaProductionSchema, EventSourceType, ExportBytesSchema, ExportDenseRangeSchema, ExportDenseSchema, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionBindingSourceSchema, ExpressionEvalError, ExpressionFieldBindingSchema, ExpressionGlobalBindingSchema, ExpressionLiteralBindingSchema, ExpressionParseError, ExpressionSourceSchema, FULL_IMAGE_BBOX, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, Fmp4BoxSplitter, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HfModelResolutionSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, INFERENCE_DEVICE_EXCLUSION_REASONS, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, InferenceDeviceExclusionReasonSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LinkedDevicesModeSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmDownloadProgressSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRetryPolicySchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmTimeoutDefaults, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_CLIP_EVENT_IDS, MAX_CLIP_LABELS, MAX_CONDITION_DEPTH, MAX_CONDITION_LEAVES, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, METHOD_DEVICE_SELECTORS, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelExtraFileSchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_HOLD_FIELD, NATIVE_LEASE_HOLD_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TILE_BUDGET_FIELD, NATIVE_LEASE_TILE_BUDGET_KEY, NC_ALARM_SYSTEM_EVENT_KINDS, NC_AUDIO_DBFS_FLOOR, NC_AUDIO_DB_MAX, NC_AUDIO_DB_MIN, NC_AUDIO_DB_OFFERED, NC_AUDIO_DB_STEP, NC_AUDIO_DEFAULTS, NC_AUDIO_HIT_PERCENT_MAX, NC_AUDIO_HIT_PERCENT_MIN, NC_AUDIO_SAMPLING_MAX_SEC, NC_AUDIO_SAMPLING_MIN_SEC, NC_AUDIO_SEED, NC_AUTHORABLE_SYSTEM_EVENT_KINDS, NC_BASE_CONDITION_KEYS, NC_CONDITION_CATALOG, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX, NC_CONFIRM_DEFAULT_TIMEOUT_MS, NC_CONFIRM_MAX_TIMEOUT_MS, NC_CONFIRM_MIN_TIMEOUT_MS, NC_DEFAULT_SNOOZE_MINUTES, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_OCCUPANCY_DEFAULTS, NC_RULE_EDITOR_SECTION_ORDER, NC_RULE_KIND_SPECS, NC_RULE_SECTIONS, NC_SNOOZE_MAX_MINUTES, NC_SYSTEM_DELIVERY, NC_SYSTEM_EVENT_FILTER_KEYS, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcAlarmSkipReasonSchema, NcAlarmSkippedDeviceSchema, NcAudioConditionSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcConfirmExpectSchema, NcConfirmSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcSceneConditionSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcSystemEventConditionSchema, NcSystemEventKindSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPERATOR_WRITTEN_STALE_MS, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PoolMemoryWatchdog, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RECORDING_EXPORT_MAX_READ_BYTES, RESERVED_BINDING_NAMES, RESTORED_CAP_NAMES, RUNTIME_DEFAULTS, RUNTIME_STATE_POLICY, RUNTIME_STATE_REFRESH_MISS_COOLDOWN_MS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRebalanceInputSchema, RecordingRebalanceMoveSchema, RecordingRebalancePlanSchema, RecordingRebalanceSkipReasonSchema, RecordingRebalanceSkipSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageClassSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainMacroClassSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTransitionResultSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCENE_CONDITIONS, SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, SCENE_DEFAULT_ANCHOR_THRESHOLD, SCENE_DEFAULT_CHECK_INTERVAL_SEC, SCENE_DEFAULT_OBSERVATION_SPACING_SEC, SCENE_DEFAULT_QUIET_SECONDS, SCENE_DEFAULT_UNCOVERED_POLICY, SCENE_DIVERGED, SCENE_RESET_RECAPTURES, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SYSTEM_SCOPE_DEVICE_METHODS, SceneCheckSchema, SceneConditionSchema, SceneConfirmSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, SceneUnavailableSchema, SceneUncoveredPolicySchema, SceneVerdictSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SetSiteLocationInputSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SiteLocationSchema, SiteLocationSourceSchema, SiteLocationStatusSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, StorageMigrationClassSchema, StorageMigrationDestinationsSchema, StorageMigrationFootageMoveInputSchema, StorageMigrationInputSchema, StorageMigrationJobSchema, StorageMigrationLeaseInputSchema, StorageMigrationMediaMoveInputSchema, StorageMigrationMoveSchema, StorageMigrationParticipantSchema, StorageMigrationPhaseSchema, StorageMigrationPlanSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMELAPSE_DENSE_FLOOR_SEC, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalInstanceInfoSchema, TerminalLegacyCameraSchema, TerminalOutputBatchSchema, TerminalOutputEventSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestConnectionStatusEnum, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainingExportDeviceTotalsSchema, TrainingExportSummarySchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VISIT_MERGE_GAP_MS, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, WEBRTC_EGRESS_PROFILE, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, asBoolean, asJsonArray, asJsonObject, asNumber, asString, assertTimelapseCadences, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioIsFailClosed, audioKindId, audioLabelChoices, audioMetricsCapability, audioModeOf, audioOrDefaults, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildRoleScopes, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyBearerPrincipal, classifyStream, classifyStreams, climateControlCapability, clusterModelSettingKey, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, commitWatchdogRestart, compileExpression, compileExpressionSafe, composeSwitchedOff, conditionDepth, conditionExclusionReason, conditionVisibleForKind, connectionTestCapability, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlockAddonId, coreBlockIdFromAddonId, coreBlocksCapability, cosineSimilarity, countConditionLeaves, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, declarationOwnerNodeId, decodeVectorBase64, decoderCapability, defaultDeliveryForSection, defaultDeviceFor, defineCustomActions, deriveBatteryPresence, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectAccessRole, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceSelectorMatches, deviceStateCapability, deviceStatusCapability, doorbellCapability, droppedConditionsForKind, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateExpressionSource, evaluatePoolMemory, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, generateAutomationBlock, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, initialPoolMemoryState, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isAudioLabelSelected, isAudioRule, isBaseConditionKey, isBatteryPresenceFault, isClusterScopedStep, isCollectionArrayMethod, isDeployableToAgent, isDetectionMacroClass, isDeviceConfigCap, isDeviceScopedCap, isEvent, isIsolatedBuiltin, isNode, isObjectInput, isOccupancyRule, isRestoredCap, isSameAddonId, isScheduleActive, isSoftwareDecode, isSystemDelivery, isVoidInput, jobKindSchema, kebabToCamel, knownValues, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logBannerArgs, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, methodAccessForHttpMethod, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeAudioLabel, normalizeTokenScopes, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, osdManagerCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProcStatus, parseProfileBrokerId, parseRuleSection, parseStreamParamsFormPatch, patchAudio, petFeederCapability, pickAccessoryControl, pickClusterStepModels, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickRestartCandidate, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, poolMemoryThreshold, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, principalMayReachAddon, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readClusterStepModels, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readTimelapseGeneratedAt, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resetPoolBaseline, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveClusterStepModelId, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolvePoolMemoryPolicy, resolveRecordingProfiles, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, resolveViewableDeviceIds, roleSpec, ruleEditorSectionsForKind, ruleKindOf, ruleKindSpec, ruleMatchesSection, ruleSection, ruleSectionOf, ruleSeedForSection, runInferenceStep, runtimeDevices, runtimeStatePolicyFor, sceneMonitorCapability, scopeInherits, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageMigrationCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, summarizeEffectiveScope, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, systemEventFilterApplies, systemEventFilterAppliesToAnyKind, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, toggleAudioLabel, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, validateRecipeBounds, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
@@ -81,6 +81,38 @@ export interface ConfigSection {
81
81
  readonly fields: readonly ConfigField[];
82
82
  }
83
83
  export type ConfigField = ConfigTextField | ConfigNumberField | ConfigBooleanField | ConfigSelectField | ConfigMultiSelectField | ConfigTimezoneField | ConfigDateTimeField | ConfigColorField | ConfigPasswordField | ConfigTextAreaField | ConfigSliderField | ConfigTagsField | ConfigGroupField | ConfigSubTabsField | ConfigSeparatorField | ConfigInfoField | ConfigQrCodeField | ConfigObjectArrayField | ConfigEditableArrayField | ConfigModelSelectorField | ConfigStorageLocationField | ConfigProbeField | ConfigButtonField | ConfigPipelineEditorField | ConfigNodeSelectField | ConfigNodeMultiSelectField | ConfigDeviceSelectField | ConfigDeviceMultiSelectField | ConfigWidgetField | ConfigAddonActionSelectField | ConfigAddonActionButtonField | ConfigDeviceActionButtonField;
84
+ /**
85
+ * Per-MODEL applicability of a pipeline-step setting (D214).
86
+ *
87
+ * A step's config schema is static, but whether a knob has any effect depends
88
+ * on WHICH model the step runs: an NMS IoU threshold means nothing to a model
89
+ * whose export fuses NMS into the graph (Frigate YOLO-NAS, TFLite SSD), a
90
+ * per-macro confidence slider is moot for a macro the model's labelmap cannot
91
+ * produce, and a class allow-list must offer the MODEL's labels, not the
92
+ * catalog's. Computed server-side (`buildSchemaSlots` → the step's model
93
+ * union, static + custom registry) and consumed by the step editors, which
94
+ * disable an inapplicable knob WITH its reason instead of rendering a control
95
+ * that silently does nothing.
96
+ *
97
+ * COMPILE-TIME ONLY on the wire: `ConfigField` crosses the cap boundary via
98
+ * `z.custom<ConfigField>()` (no stripping), so an addon compiled against this
99
+ * field runs on hubs whose installed framework predates it — same pattern as
100
+ * the `yolonas` `PostprocessorType` member (D208).
101
+ */
102
+ export interface ConfigFieldModelApplicability {
103
+ /**
104
+ * modelId → operator-readable reason this knob has NO effect with that
105
+ * model. The editor disables the control and shows the reason.
106
+ */
107
+ readonly inapplicable?: Readonly<Record<string, string>>;
108
+ /**
109
+ * modelId → replacement options for select/multiselect fields whose offer
110
+ * derives from the model's own labelmap (custom models: a class allow-list
111
+ * must operate on THE MODEL's labels — options from another labelmap build
112
+ * a filter that can never match).
113
+ */
114
+ readonly optionsByModel?: Readonly<Record<string, readonly ConfigOption[]>>;
115
+ }
84
116
  export interface ConfigFieldBase {
85
117
  readonly key: string;
86
118
  readonly label: string;
@@ -92,6 +124,8 @@ export interface ConfigFieldBase {
92
124
  readonly default?: unknown;
93
125
  readonly span?: 1 | 2 | 3 | 4;
94
126
  readonly showWhen?: ConfigCondition;
127
+ /** Per-model knob applicability — see {@link ConfigFieldModelApplicability}. */
128
+ readonly modelApplicability?: ConfigFieldModelApplicability;
95
129
  /**
96
130
  * Save behavior when value changes.
97
131
  * - true: save immediately on change (toggles, selects, checkboxes)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.94",
3
+ "version": "1.2.95",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",