@camstack/types 1.2.42 → 1.2.43

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.
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as EventCategory } from "./event-category-41fKf-q9.mjs";
2
- import { $ as ProfileRtspEntrySchema, A as method, B as scopeKey, C as DeviceType, Ct as collectHydratedFieldValues, D as event, E as DEVICE_STATUS_METHOD, F as readNodePin, G as CamStreamKindSchema, H as BrokerStatusSchema, I as ReadinessRegistry, J as DecodedAudioChunkSchema, K as CamStreamResolutionSchema, L as ReadinessTimeoutError, M as systemMethod, N as CAP_NODE_PIN_CONTEXT_KEY, O as expandCapMethods, P as nodePin, Q as FrameHandleSchema, R as emitDownForOwnedCaps, S as DeviceRole, St as collectHydratedFieldEntries, T as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Tt as resolveHydratedFieldValue, U as CAM_PROFILE_ORDER, V as BrokerStatsSchema, W as CamProfileSchema, X as EncodedPacketSchema, Y as DecodedFrameSchema, Z as FrameHandleFormatSchema, _ as RawStateResultSchema, _t as createEvent, a as asJsonObject, at as SubscribeAudioChunksResultSchema, b as ChargingStatus, bt as WELL_KNOWN_TABS, c as parseJsonArray, ct as makeProfileBrokerId, d as DEVICE_SCOPED_CAPS, dt as selectAssignedProfileSlots, et as ProfileSlotSchema, f as isDeviceScopedCap, ft as DATAPLANE_SECRET_HEADER, g as createSliceHandle, gt as createDurableState, h as createMirrorSource, ht as normalizeAddonInitResult, i as asJsonArray, it as SubscribeAudioChunksInputSchema, j as resolveCapMount, k as isDeviceConfigCap, l as parseJsonObject, lt as makeSourceBrokerId, m as createLazyTrpcSource, mt as BaseAddon, n as sleepCancellable, nt as StreamSourceEntrySchema, o as asNumber, ot as SubscribeFramesInputSchema, p as createDeviceProxy, pt as DisposerChain, q as CameraStreamSchema, r as asBoolean, rt as StreamSourceSchema, s as asString, st as SubscribeFramesResultSchema, t as sleep, tt as ProfileSlotStatusSchema, u as parseJsonUnknown, ut as parseProfileBrokerId, v as deviceOpsCapability, vt as emitReadiness, w as adminUiCapability, wt as hydrateSchema, x as DeviceFeature, xt as WELL_KNOWN_TAB_MAP, y as viewerUiCapability, yt as isEvent, z as readinessKey } from "./sleep-BmNKsY7v.mjs";
2
+ import { $ as FrameHandleSchema, A as method, B as readinessKey, C as DeviceType, Ct as collectHydratedFieldEntries, D as event, E as DEVICE_STATUS_METHOD, Et as resolveHydratedFieldValue, F as readNodePin, G as CamProfileSchema, H as BrokerStatsSchema, I as toNodeId, J as CameraStreamSchema, K as CamStreamKindSchema, L as ReadinessRegistry, M as systemMethod, N as CAP_NODE_PIN_CONTEXT_KEY, O as expandCapMethods, P as nodePin, Q as FrameHandleFormatSchema, R as ReadinessTimeoutError, S as DeviceRole, St as WELL_KNOWN_TAB_MAP, T as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Tt as hydrateSchema, U as BrokerStatusSchema, V as scopeKey, W as CAM_PROFILE_ORDER, X as DecodedFrameSchema, Y as DecodedAudioChunkSchema, Z as EncodedPacketSchema, _ as RawStateResultSchema, _t as createDurableState, a as asJsonObject, at as SubscribeAudioChunksInputSchema, b as ChargingStatus, bt as isEvent, c as parseJsonArray, ct as SubscribeFramesResultSchema, d as DEVICE_SCOPED_CAPS, dt as parseProfileBrokerId, et as ProfileRtspEntrySchema, f as isDeviceScopedCap, ft as selectAssignedProfileSlots, g as createSliceHandle, gt as normalizeAddonInitResult, h as createMirrorSource, ht as BaseAddon, i as asJsonArray, it as StreamSourceSchema, j as resolveCapMount, k as isDeviceConfigCap, l as parseJsonObject, lt as makeProfileBrokerId, m as createLazyTrpcSource, mt as DisposerChain, n as sleepCancellable, nt as ProfileSlotStatusSchema, o as asNumber, ot as SubscribeAudioChunksResultSchema, p as createDeviceProxy, pt as DATAPLANE_SECRET_HEADER, q as CamStreamResolutionSchema, r as asBoolean, rt as StreamSourceEntrySchema, s as asString, st as SubscribeFramesInputSchema, t as sleep, tt as ProfileSlotSchema, u as parseJsonUnknown, ut as makeSourceBrokerId, v as deviceOpsCapability, vt as createEvent, w as adminUiCapability, wt as collectHydratedFieldValues, x as DeviceFeature, xt as WELL_KNOWN_TABS, y as viewerUiCapability, yt as emitReadiness, z as emitDownForOwnedCaps } from "./sleep-DtstvzWm.mjs";
3
3
  import { t as canonicalHash } from "./canonical-hash-7nfBbEqR.mjs";
4
4
  import { EventSourceType } from "./enums.mjs";
5
5
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
@@ -288,6 +288,8 @@ function buildInputArgs(input, decodeHwAccel) {
288
288
  const args = [];
289
289
  if (!isSoftwareDecode(decodeHwAccel)) args.push("-hwaccel", String(decodeHwAccel));
290
290
  if (input.extraArgs?.length) args.push(...input.extraArgs);
291
+ if (input.analyzeDurationUs !== void 0) args.push("-analyzeduration", String(input.analyzeDurationUs));
292
+ if (input.probeSizeBytes !== void 0) args.push("-probesize", String(input.probeSizeBytes));
291
293
  if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
292
294
  if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
293
295
  args.push("-i", input.url);
@@ -336,6 +338,7 @@ function buildVideoArgs(video, outputArgs) {
336
338
  if (video.pixelFormat !== void 0) args.push("-pix_fmt", video.pixelFormat);
337
339
  if (video.fps !== void 0) args.push("-r", String(video.fps));
338
340
  if (video.gopFrames !== void 0) args.push("-g", String(video.gopFrames));
341
+ if (video.forceKeyFramesSeconds !== void 0) args.push("-force_key_frames", `expr:gte(t,n_forced*${video.forceKeyFramesSeconds})`);
339
342
  if (video.bf !== void 0) args.push("-bf", String(video.bf));
340
343
  args.push(...buildRateControlArgs(video));
341
344
  if (video.bitstreamFilter !== void 0) args.push("-bsf:v", video.bitstreamFilter);
@@ -371,6 +374,56 @@ function isElementaryVideoSink(sink) {
371
374
  return sink.kind === "stdout" && (sink.container === "h264" || sink.container === "hevc");
372
375
  }
373
376
  /**
377
+ * The fragmented-MP4 muxer flags, in the order the recorder has proven them
378
+ * (`recorder/addon/ffmpeg-args.ts` passes the same `movflags` string through
379
+ * `-segment_format_options`, across every vendor in the fleet):
380
+ *
381
+ * - `frag_keyframe` — cut a fragment at each key frame, so every fragment
382
+ * opens on a sync sample. HKSV's whole requirement.
383
+ * - `empty_moov` — write `ftyp`+`moov` up front with no samples in it, which
384
+ * is what makes the head a standalone INITIALISATION segment.
385
+ * - `default_base_moof` — fragment offsets are self-relative, so a fragment is
386
+ * demuxable without the bytes that preceded it. D31's byte-range read path
387
+ * depends on exactly this property of the recorder's segments.
388
+ */
389
+ var FMP4_MOVFLAGS = "+frag_keyframe+empty_moov+default_base_moof";
390
+ /**
391
+ * The terminal sink args for every non-`rtp-outputs` sink. Exhaustive over the
392
+ * union so a new member cannot fall through to `['-f', container, 'pipe:1']`,
393
+ * which is what a plain `container` read would have done for `mp4` — a valid
394
+ * argv that writes a NON-fragmented, unseekable-to-a-pipe MP4 and produces one
395
+ * unusable byte stream.
396
+ */
397
+ function buildStdoutOrRtspSinkArgs(sink) {
398
+ if (sink.kind === "rtsp-listen") return [
399
+ "-f",
400
+ "rtsp",
401
+ "-rtsp_transport",
402
+ "tcp",
403
+ "-rtsp_flags",
404
+ "listen",
405
+ sink.url
406
+ ];
407
+ if (sink.kind === "rtp-outputs") return [];
408
+ return sink.container === "mp4" ? buildFmp4SinkArgs(sink) : [
409
+ "-f",
410
+ sink.container,
411
+ "pipe:1"
412
+ ];
413
+ }
414
+ /** `-movflags … -min_frag_duration <us> -f mp4 pipe:1`. */
415
+ function buildFmp4SinkArgs(sink) {
416
+ return [
417
+ "-movflags",
418
+ FMP4_MOVFLAGS,
419
+ "-min_frag_duration",
420
+ String(Math.max(0, Math.round(sink.fragmentMs * 1e3))),
421
+ "-f",
422
+ "mp4",
423
+ "pipe:1"
424
+ ];
425
+ }
426
+ /**
374
427
  * A second output mapping source audio to RTP-over-UDP. `0:a:0?` makes the
375
428
  * audio optional so a source with no audio skips it instead of failing the
376
429
  * whole invocation.
@@ -431,19 +484,7 @@ function buildFfmpegArgs(inv) {
431
484
  ];
432
485
  }
433
486
  const audioArgs = isElementaryVideoSink(inv.sink) ? ["-an"] : buildAudioArgs(inv.audio);
434
- const sinkArgs = inv.sink.kind === "stdout" ? [
435
- "-f",
436
- inv.sink.container,
437
- "pipe:1"
438
- ] : [
439
- "-f",
440
- "rtsp",
441
- "-rtsp_transport",
442
- "tcp",
443
- "-rtsp_flags",
444
- "listen",
445
- inv.sink.url
446
- ];
487
+ const sinkArgs = buildStdoutOrRtspSinkArgs(inv.sink);
447
488
  return [
448
489
  ...head,
449
490
  ...buildVideoArgs(inv.video, inv.outputArgs),
@@ -528,7 +569,10 @@ function invocationFromEncodeProfile(input) {
528
569
  height: v.height
529
570
  } : null;
530
571
  const target = v.codec === "h265" ? "h265" : "h264";
531
- const video = shouldCopy ? { kind: "copy" } : {
572
+ const video = shouldCopy ? {
573
+ kind: "copy",
574
+ ...input.bitstreamFilter !== void 0 ? { bitstreamFilter: input.bitstreamFilter } : {}
575
+ } : {
532
576
  kind: "encode",
533
577
  encoder: pickVideoEncoder(target, input.decodeHwAccel, input.hardwareEncoders === true),
534
578
  scale,
@@ -536,10 +580,14 @@ function invocationFromEncodeProfile(input) {
536
580
  ...v.tune !== void 0 ? { tune: v.tune } : {},
537
581
  ...v.profile !== void 0 ? { profile: v.profile } : {},
538
582
  ...v.level !== void 0 ? { level: v.level } : {},
583
+ ...input.pixelFormat !== void 0 ? { pixelFormat: input.pixelFormat } : {},
539
584
  ...v.fps !== void 0 ? { fps: v.fps } : {},
540
585
  ...v.gopFrames !== void 0 ? { gopFrames: v.gopFrames } : {},
586
+ ...input.forceKeyFramesSeconds !== void 0 ? { forceKeyFramesSeconds: input.forceKeyFramesSeconds } : {},
541
587
  ...v.bf !== void 0 ? { bf: v.bf } : {},
542
- ...v.bitrateKbps !== void 0 ? { bitrateKbps: v.bitrateKbps } : {}
588
+ ...v.bitrateKbps !== void 0 ? { bitrateKbps: v.bitrateKbps } : {},
589
+ ...input.rateControl !== void 0 ? { rateControl: input.rateControl } : {},
590
+ ...input.bitstreamFilter !== void 0 ? { bitstreamFilter: input.bitstreamFilter } : {}
543
591
  };
544
592
  return {
545
593
  logLevel: input.logLevel ?? "error",
@@ -603,9 +651,27 @@ var WEBRTC_EGRESS_PROFILE = {
603
651
  * audio plane (out-of-band), so this is `passthrough` exactly like the browser
604
652
  * — see the ADR for why the previous in-band Opus was encoded and discarded.
605
653
  */
654
+ /**
655
+ * Alexa's egress asks for OPUS, and that is a change with a history.
656
+ *
657
+ * The previous profile encoded Opus IN-BAND into an MPEG-TS, where it was
658
+ * discarded: Opus is `stream_type 0x06` and the broker's demuxer maps only
659
+ * `0x0f` (aac), `0x03`/`0x04` (mp2) and `0x81` (ac3). Every frame it produced
660
+ * died at the demuxer, so the encode was replaced with `passthrough` — correct,
661
+ * because paying libopus for nothing is worse than silence.
662
+ *
663
+ * But `passthrough` means the egress emits NO audio at all, and Alexa's audio
664
+ * does not arrive by magic: it rides the published stream, which is what the
665
+ * WebRTC session dials. So the Echo had video and silence either way.
666
+ *
667
+ * Opus here now reaches the egress AUDIO SIDECAR — a separate RTP leg the
668
+ * restreamer grafts onto its SDP — which never touches the MPEG-TS demuxer that
669
+ * killed the in-band attempt. Same codec, different plane, and this one the
670
+ * consumer can actually negotiate.
671
+ */
606
672
  var ALEXA_EGRESS_PROFILE = {
607
673
  ...BASE_LIVE_EGRESS_PROFILE,
608
- audio: "passthrough"
674
+ audio: { codec: "opus" }
609
675
  };
610
676
  /** VBV window for a consumer whose budget is enforced per second (HomeKit). */
611
677
  var RATE_CONTROL_TIGHT = {
@@ -726,6 +792,14 @@ async function resolveEgressDecodeHwAccel(deps) {
726
792
  * Here every knob is a named field, and defaults are APPLIED before hashing so
727
793
  * an omitted field and its explicit default land on the same key.
728
794
  */
795
+ /**
796
+ * The transport a CAP request describes. `fragments` is deliberately
797
+ * unreachable from here — the request schema has no way to ask for it, so the
798
+ * cap path can never be handed a fragment child by accident.
799
+ */
800
+ function egressTransportFromRequest(request) {
801
+ return { transport: request.publishLocally === true ? "push" : "dial" };
802
+ }
729
803
  /** Absent optional ⇒ this sentinel, so `undefined` and "not set" agree. */
730
804
  var UNSET = "\0unset";
731
805
  function canonicalVideo(video) {
@@ -757,10 +831,12 @@ function canonicalAudio(audio) {
757
831
  * future operator-facing "why are these two not sharing?" surface — can diff
758
832
  * two requests without reversing a hash.
759
833
  */
760
- function canonicalEgressPlan(request) {
834
+ function canonicalEgressPlan(request, delivery = egressTransportFromRequest(request)) {
761
835
  return {
762
836
  deviceId: request.deviceId,
763
837
  source: request.source.kind === "profile" ? `profile:${request.source.profile}` : `cam-stream:${request.source.camStreamId}`,
838
+ transport: delivery.transport,
839
+ fragmentMs: delivery.fragmentMs ?? -1,
764
840
  video: canonicalVideo(request.encode.video),
765
841
  audio: canonicalAudio(request.encode.audio),
766
842
  rateControl: request.rateControl ?? "relaxed",
@@ -780,8 +856,8 @@ function canonicalEgressPlan(request) {
780
856
  * exactly a mutable shared object, where one consumer's downgrade dragged
781
857
  * every other consumer to 360p.
782
858
  */
783
- function egressTranscodeSharingKey(request) {
784
- return `egress:${canonicalHash(canonicalEgressPlan(request))}`;
859
+ function egressTranscodeSharingKey(request, delivery = egressTransportFromRequest(request)) {
860
+ return `egress:${canonicalHash(canonicalEgressPlan(request, delivery))}`;
785
861
  }
786
862
  //#endregion
787
863
  //#region src/health/wiring-health.ts
@@ -901,7 +977,7 @@ var DEFAULT_RETENTION = {
901
977
  * ## This file adds no state
902
978
  *
903
979
  * Every switch here is a VIEW onto an authority that already existed
904
- * ([D61](../../../../docs/decisions/adr-0062.md)). The whole point of the
980
+ * ([D62](../../../../docs/decisions/adr-0062.md)). The whole point of the
905
981
  * group is that there is exactly one place each function is turned off, and
906
982
  * the group routes to it:
907
983
  *
@@ -912,6 +988,40 @@ var DEFAULT_RETENTION = {
912
988
  * | `audio-analysis` | `deviceManager.setWrapperActive('audio-analysis')` | `AudioSubscriptionController.subscribeAudioStream` returns `null` before opening the stream |
913
989
  * | `recording` | `recording.setDeviceConfig` → `RecordingConfig.enabled` | `band-decision.shouldRecord` returns false; the controller detaches the device |
914
990
  * | `notifications` | `notificationRules.setDeviceMuted` | `NotificationCenter.evaluateAndEnqueue` returns before any rule is evaluated |
991
+ * | `privacy-mask` | `privacyMask.setMask({ enabled })` → the CAMERA | the camera blanks the masked regions itself; every stream and recording carries the black boxes |
992
+ * | `device-audio` | `privacyMask.setAudioEnabled` → the CAMERA | the camera stops encoding an audio track at all; every consumer sees silent video |
993
+ *
994
+ * ## The two switches whose authority is not on this server
995
+ *
996
+ * `privacy-mask` and `device-audio` write the CAMERA. That is not a loophole
997
+ * in "the group stores nothing" — it is the purest form of it: the camera
998
+ * holds the fact, every read is a read-through, and there is no server-side
999
+ * copy that could drift. Their availability therefore cannot come from
1000
+ * `listBindableCapsForDeviceType` (a device-NATIVE cap carries no wrappers and
1001
+ * is filtered out there); it comes from the cap's own camera-probed
1002
+ * `privacyMask.getOptions()`, which is strictly more honest — it answers for
1003
+ * THIS camera rather than for the device type
1004
+ * ([D74](../../../../docs/decisions/adr-0074.md)).
1005
+ *
1006
+ * ## `privacy-mask` is the one row whose ON is not "the function is working"
1007
+ *
1008
+ * Every other switch means *this camera's function is doing its job*, so
1009
+ * `enabled: false` is a thing an operator took away. `privacy-mask` means **the
1010
+ * MASK is active** — `enabled: true` is video deliberately obscured. The
1011
+ * polarity is not a choice made here: `addon-export-hap`'s privacy `Switch`
1012
+ * (`builders/privacy-switch.ts`) already mirrors `patch.enabled` verbatim, and
1013
+ * a HomeKit toggle that disagreed with the app's toggle for the same camera is
1014
+ * worse than either surface not having one.
1015
+ *
1016
+ * Two consequences follow and both are load-bearing:
1017
+ *
1018
+ * - **It never counts as `switchedOff`.** `countsAsSwitchedOff` is `false` for
1019
+ * exactly this row. With the polarity above, every camera that has NOT drawn
1020
+ * a privacy mask would otherwise report `switchedOff: ['privacy-mask']` — the
1021
+ * normal, healthy state of most cameras rendered as an operator disablement.
1022
+ * - **Its cost line names BOTH directions.** `costWhenOff` is rendered
1023
+ * unconditionally by both clients, so for this row it has to read correctly
1024
+ * whichever way the switch is sitting.
915
1025
  *
916
1026
  * The wrapper-binding pair is not a new idea: `legacy-migrations.ts` already
917
1027
  * migrated the legacy `audioEnabled` / `pipelineEnabled` /
@@ -930,22 +1040,38 @@ var DEFAULT_RETENTION = {
930
1040
  * `CameraStatus.switchedOff`.
931
1041
  */
932
1042
  /**
933
- * The five functions the operator named (2026-08-05). Deliberately NOT one id
934
- * per pipeline step: face recognition and plate/LPR are per-step toggles on
1043
+ * The functions the operator named — five on 2026-08-05, plus the camera's own
1044
+ * microphone on 2026-08-07. Deliberately NOT one id per pipeline step: face
1045
+ * recognition and plate/LPR are per-step toggles on
935
1046
  * `pipelineOrchestrator.setCameraStepToggle` and belong in the pipeline
936
- * editor, not in a five-button safety group.
1047
+ * editor, not in a safety group.
937
1048
  */
938
1049
  var CameraSwitchIdSchema = z.enum([
939
1050
  "stream-broker",
940
1051
  "object-detection",
1052
+ "privacy-mask",
1053
+ "device-audio",
941
1054
  "audio-analysis",
942
1055
  "recording",
943
1056
  "notifications"
944
1057
  ]);
945
- /** Stable render order — broadest blast radius first. */
1058
+ /**
1059
+ * Stable render order — broadest blast radius first, and a source before the
1060
+ * thing that consumes it. `device-audio` sits ABOVE `audio-analysis` because
1061
+ * turning the microphone off leaves the analyzer with nothing to analyse; the
1062
+ * reverse is not true.
1063
+ *
1064
+ * `privacy-mask` sits directly ABOVE `device-audio` because they are literal
1065
+ * siblings — one cap, one device plane, video then audio — and NOT above
1066
+ * `object-detection` despite feeding it: a mask blanks REGIONS, so its blast
1067
+ * radius is partial, and the "broadest first" rule does not rank a partial
1068
+ * control above a whole-function one.
1069
+ */
946
1070
  var CAMERA_SWITCH_ORDER = [
947
1071
  "stream-broker",
948
1072
  "object-detection",
1073
+ "privacy-mask",
1074
+ "device-audio",
949
1075
  "audio-analysis",
950
1076
  "recording",
951
1077
  "notifications"
@@ -963,14 +1089,26 @@ var CameraSwitchAuthoritySchema = z.discriminatedUnion("kind", [
963
1089
  capName: z.string()
964
1090
  }),
965
1091
  z.object({ kind: z.literal("recording-config") }),
966
- z.object({ kind: z.literal("notification-mute") })
1092
+ z.object({ kind: z.literal("notification-mute") }),
1093
+ z.object({
1094
+ kind: z.literal("camera-audio"),
1095
+ capName: z.string()
1096
+ }),
1097
+ z.object({
1098
+ kind: z.literal("camera-mask"),
1099
+ capName: z.string()
1100
+ })
967
1101
  ]);
968
1102
  /**
969
1103
  * Why a switch is not offered for this camera. Rendered instead of the
970
1104
  * control, never as a dead control — an absent function and a broken one must
971
1105
  * not look the same.
972
1106
  */
973
- var CameraSwitchUnavailableReasonSchema = z.enum(["no-provider", "source-unreachable"]);
1107
+ var CameraSwitchUnavailableReasonSchema = z.enum([
1108
+ "no-provider",
1109
+ "source-unreachable",
1110
+ "not-configured"
1111
+ ]);
974
1112
  /**
975
1113
  * One switch, resolved for one camera.
976
1114
  *
@@ -1010,6 +1148,13 @@ var CameraSwitchGroupSchema = z.object({
1010
1148
  var DETECTION_PIPELINE_CAP_NAME = "detection-pipeline";
1011
1149
  var AUDIO_ANALYSIS_CAP_NAME = "audio-analysis";
1012
1150
  /**
1151
+ * The device-NATIVE cap that owns what the camera does not capture — masked
1152
+ * video regions and, since 2026-08-07, the microphone. Named here because the
1153
+ * `camera-audio` authority, the orchestrator's gather and the fake harness all
1154
+ * have to agree on it.
1155
+ */
1156
+ var PRIVACY_MASK_CAP_NAME = "privacy-mask";
1157
+ /**
1013
1158
  * THE catalog. One entry per switch; the cost lines are the operator-facing
1014
1159
  * contract and are written to be true rather than reassuring.
1015
1160
  */
@@ -1018,7 +1163,8 @@ var CAMERA_SWITCH_CATALOG = {
1018
1163
  id: "stream-broker",
1019
1164
  label: "Camera",
1020
1165
  costWhenOff: "Off: the whole camera stops. No live view, no recording, no detection and no notifications — its streams are released and nothing dials it again until you turn it back on.",
1021
- authority: { kind: "device-disabled" }
1166
+ authority: { kind: "device-disabled" },
1167
+ countsAsSwitchedOff: true
1022
1168
  },
1023
1169
  "object-detection": {
1024
1170
  id: "object-detection",
@@ -1027,7 +1173,28 @@ var CAMERA_SWITCH_CATALOG = {
1027
1173
  authority: {
1028
1174
  kind: "wrapper-binding",
1029
1175
  capName: DETECTION_PIPELINE_CAP_NAME
1030
- }
1176
+ },
1177
+ countsAsSwitchedOff: true
1178
+ },
1179
+ "privacy-mask": {
1180
+ id: "privacy-mask",
1181
+ label: "Privacy mask",
1182
+ costWhenOff: "On: the zones you drew on this camera are blacked out by the camera itself — live view, playback, exports and detection all see the black boxes, and nothing behind them was ever recorded. Off: the camera captures the whole frame, and your zones are kept for when you turn it back on.",
1183
+ authority: {
1184
+ kind: "camera-mask",
1185
+ capName: PRIVACY_MASK_CAP_NAME
1186
+ },
1187
+ countsAsSwitchedOff: false
1188
+ },
1189
+ "device-audio": {
1190
+ id: "device-audio",
1191
+ label: "Camera microphone",
1192
+ costWhenOff: "Off: the camera captures no sound at all. Live view and recordings become silent video, and audio detection and classification have nothing left to analyse — turning them back on will not recover it. The picture, motion and object detection are unaffected, and two-way talk still works. Applies at the camera, so every consumer sees the same silence.",
1193
+ authority: {
1194
+ kind: "camera-audio",
1195
+ capName: PRIVACY_MASK_CAP_NAME
1196
+ },
1197
+ countsAsSwitchedOff: true
1031
1198
  },
1032
1199
  "audio-analysis": {
1033
1200
  id: "audio-analysis",
@@ -1036,19 +1203,22 @@ var CAMERA_SWITCH_CATALOG = {
1036
1203
  authority: {
1037
1204
  kind: "wrapper-binding",
1038
1205
  capName: AUDIO_ANALYSIS_CAP_NAME
1039
- }
1206
+ },
1207
+ countsAsSwitchedOff: true
1040
1208
  },
1041
1209
  recording: {
1042
1210
  id: "recording",
1043
1211
  label: "Recording",
1044
1212
  costWhenOff: "Off: nothing new is written to disk. Footage already recorded stays, but retention keeps deleting it — so this camera’s history shrinks and is not replaced. Your recording schedule is kept and resumes when you turn it back on.",
1045
- authority: { kind: "recording-config" }
1213
+ authority: { kind: "recording-config" },
1214
+ countsAsSwitchedOff: true
1046
1215
  },
1047
1216
  notifications: {
1048
1217
  id: "notifications",
1049
1218
  label: "Notifications",
1050
1219
  costWhenOff: "Off: this camera never notifies anyone, on any rule, with no expiry. Detection, events and recording carry on exactly as before — you simply stop being told about them.",
1051
- authority: { kind: "notification-mute" }
1220
+ authority: { kind: "notification-mute" },
1221
+ countsAsSwitchedOff: true
1052
1222
  }
1053
1223
  };
1054
1224
  /** Resolve one switch's `{ available, enabled }` pair. */
@@ -1095,6 +1265,55 @@ function resolveState(descriptor, input) {
1095
1265
  available: true,
1096
1266
  enabled: !input.notificationsMuted
1097
1267
  };
1268
+ case "camera-audio": {
1269
+ const audio = input.deviceAudio;
1270
+ if (audio === null) return {
1271
+ available: false,
1272
+ enabled: true,
1273
+ unavailableReason: "source-unreachable"
1274
+ };
1275
+ if (!audio.supported) return {
1276
+ available: false,
1277
+ enabled: true,
1278
+ unavailableReason: "no-provider"
1279
+ };
1280
+ if (audio.enabled === null) return {
1281
+ available: false,
1282
+ enabled: true,
1283
+ unavailableReason: "source-unreachable"
1284
+ };
1285
+ return {
1286
+ available: true,
1287
+ enabled: audio.enabled
1288
+ };
1289
+ }
1290
+ case "camera-mask": {
1291
+ const mask = input.privacyMask;
1292
+ if (mask === null) return {
1293
+ available: false,
1294
+ enabled: false,
1295
+ unavailableReason: "source-unreachable"
1296
+ };
1297
+ if (!mask.supported) return {
1298
+ available: false,
1299
+ enabled: false,
1300
+ unavailableReason: "no-provider"
1301
+ };
1302
+ if (mask.configuredRegions === null || mask.enabled === null) return {
1303
+ available: false,
1304
+ enabled: false,
1305
+ unavailableReason: "source-unreachable"
1306
+ };
1307
+ if (mask.configuredRegions === 0) return {
1308
+ available: false,
1309
+ enabled: false,
1310
+ unavailableReason: "not-configured"
1311
+ };
1312
+ return {
1313
+ available: true,
1314
+ enabled: mask.enabled
1315
+ };
1316
+ }
1098
1317
  }
1099
1318
  }
1100
1319
  /**
@@ -1128,9 +1347,15 @@ function deriveCameraSwitches(input) {
1128
1347
  * `switchedOff: ['object-detection']` was turned off; the same camera with an
1129
1348
  * empty list is broken. Unavailable switches never appear — a function nobody
1130
1349
  * provides was not switched off by anyone.
1350
+ *
1351
+ * `privacy-mask` never appears either, whichever way it is sitting, because its
1352
+ * ON means "the mask is active" rather than "the function works"
1353
+ * ({@link CameraSwitchDescriptor.countsAsSwitchedOff}). Without that filter the
1354
+ * ordinary state of every camera nobody has masked would carry a
1355
+ * "switched off" badge, and the badge that matters would be lost in it.
1131
1356
  */
1132
1357
  function switchedOffIds(switches) {
1133
- return switches.filter((s) => s.available && !s.enabled).map((s) => s.id);
1358
+ return switches.filter((s) => CAMERA_SWITCH_CATALOG[s.id].countsAsSwitchedOff && s.available && !s.enabled).map((s) => s.id);
1134
1359
  }
1135
1360
  //#endregion
1136
1361
  //#region src/interfaces/device-capabilities/camera.ts
@@ -4166,6 +4391,26 @@ var EgressTranscodeRequestSchema = z.object({
4166
4391
  "h264_mp4toannexb",
4167
4392
  "hevc_mp4toannexb"
4168
4393
  ]).optional(),
4394
+ /**
4395
+ * Publish the transcode as a LOCAL push cam stream, instead of leaving the
4396
+ * consumer to dial the returned url. The broker picks the id and returns it
4397
+ * as `camStreamId` — a caller-supplied one would be circular, since the
4398
+ * sharing key is computed FROM this request.
4399
+ *
4400
+ * The url is still returned and still the contract for a transcode pinned to
4401
+ * another node. But dialling it locally costs an RTSP round trip that changes
4402
+ * the transport underneath the consumer: a dialled stream is an RTP source,
4403
+ * so `isRtpSource()` is true and the session takes the RTP-passthrough +
4404
+ * repacketizer branch. The push branch — the one the derived mechanism has
4405
+ * live hours on — is never reached. Measured on Alexa: broker registered, RTP
4406
+ * arriving, key frame arriving, black screen, on a chain healthy at every
4407
+ * other point.
4408
+ *
4409
+ * Same idea the transport already applies to CALLS, where `classifyCapRoute`
4410
+ * gives priority to `hub-in-process` so a local call never leaves the node.
4411
+ * This is that rule for media.
4412
+ */
4413
+ publishLocally: z.boolean().optional(),
4169
4414
  pixelFormat: z.enum(["yuv420p", "nv12"]).optional(),
4170
4415
  /**
4171
4416
  * Operator/consumer override for decode hardware. ABSENT is the normal case
@@ -4210,7 +4455,13 @@ var EgressTranscodeSchema = z.object({
4210
4455
  * Returned rather than assumed: a consumer that asked for hardware and got
4211
4456
  * software needs to be able to see that without reading the broker's logs.
4212
4457
  */
4213
- decodeHwAccel: z.string().nullable()
4458
+ decodeHwAccel: z.string().nullable(),
4459
+ /**
4460
+ * Set when `publishLocally` was honoured: attach to THIS instead of dialling
4461
+ * `url`, and the session takes the push/deframe transport rather than the
4462
+ * RTP-passthrough one. `null` means the consumer must dial.
4463
+ */
4464
+ camStreamId: z.string().nullable()
4214
4465
  });
4215
4466
  var streamBrokerCapability = {
4216
4467
  name: "stream-broker",
@@ -15862,9 +16113,15 @@ var snapshotCapability = {
15862
16113
  * Bypass the cache freshness check and fetch directly from the
15863
16114
  * native (or stream-broker fallback). Triggered by the UI's
15864
16115
  * "refresh" button so an operator can force a fresh frame
15865
- * even when the cache is well within `snapshotMaxAgeMs`.
15866
- * On battery cams this WILL wake the camera — accept the
15867
- * cost only when the user explicitly asks for it.
16116
+ * even when the cache is well within the device's
16117
+ * `snapshotMaxAgeS` window.
16118
+ *
16119
+ * **`force` is an OPERATOR signal, not a freshness preference.** On a
16120
+ * battery camera it is the one thing that walks past the wrapper's
16121
+ * sleep gate and wakes the camera, so a background caller — a poller,
16122
+ * an event handler, a thumbnail — must NEVER set it. Every such caller
16123
+ * gets the cached frame, which on a sleeping battery camera is the
16124
+ * correct answer: stale but honest beats woken.
15868
16125
  */
15869
16126
  force: z.boolean().optional()
15870
16127
  }), SnapshotImageSchema.nullable()),
@@ -22487,12 +22744,30 @@ var pressureSensorCapability = {
22487
22744
  //#endregion
22488
22745
  //#region src/capabilities/privacy-mask.cap.ts
22489
22746
  /**
22490
- * Privacy mask = up to `maxRegions` SHAPES the camera blanks out (NOT a
22491
- * cell grid). Reolink `<shelterList>` zones are rectangles; Hikvision
22492
- * ISAPI `<RegionCoordinatesList>` zones are free polygons (this camera:
22493
- * exactly 4 vertices, not necessarily axis-aligned). The cap composes the
22494
- * shared rect|polygon subset of the MaskShape vocabulary. All coords are
22495
- * normalized 0..1 (top-left origin).
22747
+ * PRIVACY what the camera deliberately does not capture. Two planes:
22748
+ *
22749
+ * - **video**: up to `maxRegions` SHAPES the camera blanks out (NOT a cell
22750
+ * grid). Reolink `<shelterList>` zones are rectangles; Hikvision ISAPI
22751
+ * `<RegionCoordinatesList>` zones are free polygons (this camera: exactly
22752
+ * 4 vertices, not necessarily axis-aligned). The cap composes the shared
22753
+ * rect|polygon subset of the MaskShape vocabulary. All coords are
22754
+ * normalized 0..1 (top-left origin).
22755
+ * - **audio**: the camera's microphone. `setAudioEnabled(false)` stops the
22756
+ * camera encoding an audio track at all, so EVERY consumer — live view,
22757
+ * recording, the audio analyzer, an export — sees silent video. There is
22758
+ * no server-side copy of this fact; the camera is the store and every read
22759
+ * is a read-through, which is why a switch over it cannot drift
22760
+ * ([D62](../../../../docs/decisions/adr-0062.md)).
22761
+ *
22762
+ * Both belong here for one reason: they are the two things an operator turns
22763
+ * off when the answer to "what is this camera allowed to record" changes, and
22764
+ * both are applied ON the device, before anything leaves it.
22765
+ *
22766
+ * **The audio flag has exactly one writer.** `stream-params` used to carry a
22767
+ * per-profile `audio` in its patch schema — reachable from no UI and honoured
22768
+ * by one provider — and it was removed when this landed. A second writer onto
22769
+ * one device register is the shape of every knob this repo has shipped that
22770
+ * disagreed with the one the reader read.
22496
22771
  */
22497
22772
  /** A privacy-mask region's geometry — rectangle or free polygon. */
22498
22773
  var PrivacyMaskShapeSchema = z.discriminatedUnion("kind", [MaskRectShapeSchema, MaskPolygonShapeSchema]);
@@ -22504,21 +22779,45 @@ var PrivacyMaskRegionSchema = z.object({
22504
22779
  enabled: z.boolean(),
22505
22780
  shape: PrivacyMaskShapeSchema
22506
22781
  });
22507
- /** Current on-camera privacy-mask state — master enable + zones. */
22782
+ /** Current on-camera privacy state — mask master enable + zones + microphone. */
22508
22783
  var PrivacyMaskStatusSchema = z.object({
22509
22784
  enabled: z.boolean(),
22510
22785
  /** Active zones (normalized 0..1). Length ≤ maxRegions. */
22511
22786
  regions: z.array(PrivacyMaskRegionSchema),
22787
+ /**
22788
+ * Is the camera capturing sound right now? Read from the camera, never from
22789
+ * a server-side mirror.
22790
+ *
22791
+ * `null` means "no answer" — either this camera exposes no controllable
22792
+ * microphone (`getOptions().supportsAudioMute === false`) or the read
22793
+ * failed. A consumer must render `null` as UNKNOWN and never as `false`:
22794
+ * "the microphone is off" and "we could not ask" look identical to an
22795
+ * operator only until one of them is wrong.
22796
+ *
22797
+ * On a camera whose profiles carry the flag independently (Reolink writes
22798
+ * it per stream), `true` means AT LEAST ONE profile still carries audio —
22799
+ * privacy is only satisfied when every one of them is silent.
22800
+ */
22801
+ audioEnabled: z.boolean().nullable(),
22512
22802
  lastFetchedAt: z.number()
22513
22803
  });
22514
- /** Per-camera availability. */
22804
+ /** Per-camera availability. Probed, never assumed from the model name. */
22515
22805
  var PrivacyMaskOptionsSchema = z.object({
22516
22806
  /** Maximum number of supported zones. */
22517
22807
  maxRegions: z.number(),
22518
22808
  /** Shape kinds this camera accepts — Reolink: ['rect']; Hikvision: ['rect','polygon']. */
22519
22809
  supportedShapes: z.array(MaskShapeKindSchema),
22520
22810
  /** Polygon vertex bounds when 'polygon' is supported (Hikvision: {min:4,max:4}). */
22521
- polygonVertices: MaskPolygonVerticesSchema.optional()
22811
+ polygonVertices: MaskPolygonVerticesSchema.optional(),
22812
+ /**
22813
+ * Does this camera expose a microphone switch we can actually write?
22814
+ *
22815
+ * Camera-probed: `true` only when the firmware answered with an audio flag
22816
+ * we know how to patch. A camera that never answered is `false` — a control
22817
+ * the operator can press that changes nothing is worse than no control, and
22818
+ * the switch group renders "not available" instead.
22819
+ */
22820
+ supportsAudioMute: z.boolean()
22522
22821
  });
22523
22822
  /** Partial change — every field optional. */
22524
22823
  var PrivacyMaskPatchSchema = z.object({
@@ -22545,6 +22844,27 @@ var privacyMaskCapability = {
22545
22844
  }), z.void(), {
22546
22845
  kind: "mutation",
22547
22846
  auth: "admin"
22847
+ }),
22848
+ /**
22849
+ * Turn the camera's microphone on or off, at the camera.
22850
+ *
22851
+ * Deliberately its OWN mutation rather than a field on
22852
+ * {@link PrivacyMaskPatchSchema}: `patch.enabled` already means "the video
22853
+ * mask master switch", and overloading it would make one boolean mean two
22854
+ * unrelated things on the same call. It is also the only method here whose
22855
+ * write leaves the device in a state a later `getStatus` reads back
22856
+ * verbatim, which is what makes it safe as a switch authority.
22857
+ *
22858
+ * A camera whose `getOptions().supportsAudioMute` is false must REJECT
22859
+ * this rather than silently accept it — a write nothing applies is exactly
22860
+ * what the switch group exists to remove.
22861
+ */
22862
+ setAudioEnabled: method(z.object({
22863
+ deviceId: z.number(),
22864
+ enabled: z.boolean()
22865
+ }), z.void(), {
22866
+ kind: "mutation",
22867
+ auth: "admin"
22548
22868
  })
22549
22869
  },
22550
22870
  status: {
@@ -22553,6 +22873,26 @@ var privacyMaskCapability = {
22553
22873
  },
22554
22874
  runtimeState: PrivacyMaskStatusSchema
22555
22875
  };
22876
+ /**
22877
+ * Collapse a camera's PER-PROFILE audio flags into the one answer
22878
+ * {@link PrivacyMaskStatusSchema.shape.audioEnabled} promises.
22879
+ *
22880
+ * Both firmwares this cap talks to store the flag per stream profile, and
22881
+ * both let those profiles disagree. The rule is `some`, not `every`: privacy
22882
+ * is only satisfied when NOTHING is carrying sound, so a camera whose sub
22883
+ * stream is still audible must read as `true` and be switchable off — not as
22884
+ * `false` because the main stream happens to be muted already.
22885
+ *
22886
+ * An empty list is `null` ("this camera reported no audio flag at all"),
22887
+ * never `false`.
22888
+ *
22889
+ * Lives here rather than in each provider so the rule the schema documents
22890
+ * and the rule the providers apply cannot drift apart.
22891
+ */
22892
+ function summarisePrivacyAudio(profiles) {
22893
+ if (profiles.length === 0) return null;
22894
+ return profiles.some((p) => p.audioEnabled);
22895
+ }
22556
22896
  //#endregion
22557
22897
  //#region src/capabilities/ptz.cap.ts
22558
22898
  var PtzPresetSchema = z.object({
@@ -22937,6 +23277,21 @@ var LocateSegmentResultSchema = z.discriminatedUnion("kind", [z.object({
22937
23277
  })]);
22938
23278
  /** Raw bytes of one finalized footage segment (read off disk on the recording node). */
22939
23279
  var ReadSegmentBytesResultSchema = z.object({ data: z.instanceof(Uint8Array) });
23280
+ /**
23281
+ * One GOP of a finalized segment, cut by byte range through the segment's own
23282
+ * `mfra` (D31 on the D42 feeder path). `data` is the `ftyp`+`moov` head plus
23283
+ * the single `moof`+`mdat` covering the requested instant — standalone-
23284
+ * demuxable, never the whole file. When the segment's index cannot be parsed
23285
+ * the provider degrades INSIDE the mechanism to the whole segment (still one
23286
+ * `data`, `gopStartMs` = the segment start) — a worse read, not another path.
23287
+ */
23288
+ var ReadGopBytesResultSchema = z.object({
23289
+ data: z.instanceof(Uint8Array),
23290
+ /** Absolute epoch ms of the returned fragment's first sample. */
23291
+ gopStartMs: z.number(),
23292
+ /** Media ms the returned fragment covers. */
23293
+ gopDurMs: z.number()
23294
+ });
22940
23295
  var recordingCapability = {
22941
23296
  name: "recording",
22942
23297
  scope: "system",
@@ -23004,6 +23359,18 @@ var recordingCapability = {
23004
23359
  kind: "query",
23005
23360
  auth: "admin"
23006
23361
  }),
23362
+ /** Read the single GOP of segment `startMs` covering `epochMs`, by mfra
23363
+ * byte range — the scrub-granular read (D31 letter on the feeder path).
23364
+ * See {@link ReadGopBytesResultSchema} for the degradation contract. */
23365
+ readGopBytes: method(z.object({
23366
+ deviceId: z.number(),
23367
+ profile: z.string(),
23368
+ startMs: z.number(),
23369
+ epochMs: z.number()
23370
+ }), ReadGopBytesResultSchema, {
23371
+ kind: "query",
23372
+ auth: "admin"
23373
+ }),
23007
23374
  setDeviceConfig: method(z.object({
23008
23375
  deviceId: z.number(),
23009
23376
  config: RecordingConfigSchema
@@ -23665,6 +24032,16 @@ var StreamProfileConfigSchema = z.object({
23665
24032
  "baseline"
23666
24033
  ]).optional(),
23667
24034
  gop: z.number().optional(),
24035
+ /**
24036
+ * Whether THIS profile currently carries an audio track. READ-ONLY here.
24037
+ *
24038
+ * There is no matching field on {@link StreamProfilePatchSchema}: the
24039
+ * camera's microphone is owned by `privacy-mask` (`setAudioEnabled`), which
24040
+ * writes every profile at once so "audio off" means silent everywhere. A
24041
+ * per-profile writer beside it would let a camera be half-muted and would be
24042
+ * a second knob onto one device register — the failure D62 exists to
24043
+ * prevent. Absent when the firmware does not report the flag.
24044
+ */
23668
24045
  audio: z.boolean().optional()
23669
24046
  });
23670
24047
  var StreamParamsStatusSchema = z.object({
@@ -23705,7 +24082,13 @@ var StreamParamsOptionsSchema = z.object({
23705
24082
  ext: StreamProfileOptionsSchema.optional()
23706
24083
  });
23707
24084
  /** A partial change to one profile — every field optional; a provider
23708
- * ignores fields it doesn't support. */
24085
+ * ignores fields it doesn't support.
24086
+ *
24087
+ * There is deliberately NO `audio` here. It existed until 2026-08-07,
24088
+ * reachable from no form and honoured by exactly one provider, while the
24089
+ * camera's microphone is a whole-device fact. It now has one writer,
24090
+ * `privacyMask.setAudioEnabled`, which writes every profile — see
24091
+ * `privacy-mask.cap.ts`. */
23709
24092
  var StreamProfilePatchSchema = z.object({
23710
24093
  width: z.number().optional(),
23711
24094
  height: z.number().optional(),
@@ -23718,8 +24101,7 @@ var StreamProfilePatchSchema = z.object({
23718
24101
  "main",
23719
24102
  "baseline"
23720
24103
  ]).optional(),
23721
- gop: z.number().optional(),
23722
- audio: z.boolean().optional()
24104
+ gop: z.number().optional()
23723
24105
  });
23724
24106
  var streamParamsCapability = {
23725
24107
  name: "stream-params",
@@ -26638,10 +27020,7 @@ var BATTERY_DEVICE_PROFILE = {
26638
27020
  audioMode: "disabled",
26639
27021
  detectionMode: "on-motion"
26640
27022
  },
26641
- settings: {
26642
- "snapshot.minRefreshIntervalSec": 3600,
26643
- "streamBroker.preBufferEnabled": false
26644
- }
27023
+ settings: {}
26645
27024
  };
26646
27025
  /**
26647
27026
  * Profile registry — order matters when multiple profiles match the
@@ -27493,7 +27872,7 @@ var SystemMirror = class {
27493
27872
  }
27494
27873
  async refreshDeviceMetadata(deviceId, kind) {
27495
27874
  try {
27496
- const info = (await this.api.deviceManager.listAll.query({})).find((d) => d.id === deviceId);
27875
+ const info = await this.api.deviceManager.getDevice.query({ deviceId });
27497
27876
  if (!info) return;
27498
27877
  const wasNew = !this.devices.has(deviceId);
27499
27878
  this.devices.set(deviceId, info);
@@ -32385,6 +32764,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
32385
32764
  addonId: null,
32386
32765
  access: "view"
32387
32766
  },
32767
+ "privacyMask.setAudioEnabled": {
32768
+ capName: "privacy-mask",
32769
+ capScope: "device",
32770
+ addonId: null,
32771
+ access: "create"
32772
+ },
32388
32773
  "privacyMask.setMask": {
32389
32774
  capName: "privacy-mask",
32390
32775
  capScope: "device",
@@ -32553,6 +32938,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
32553
32938
  addonId: null,
32554
32939
  access: "create"
32555
32940
  },
32941
+ "recording.readGopBytes": {
32942
+ capName: "recording",
32943
+ capScope: "system",
32944
+ addonId: null,
32945
+ access: "view"
32946
+ },
32556
32947
  "recording.readSegmentBytes": {
32557
32948
  capName: "recording",
32558
32949
  capScope: "system",
@@ -35571,6 +35962,44 @@ function bestLocationMatch(externalName, existing, threshold = .8) {
35571
35962
  return best;
35572
35963
  }
35573
35964
  //#endregion
35965
+ //#region src/utils/addon-id.ts
35966
+ /**
35967
+ * The addon id as the REGISTRY, the wire and the durable stores spell it.
35968
+ *
35969
+ * `AddonContext.id` does not agree with itself across the two context
35970
+ * factories:
35971
+ *
35972
+ * - a FORKED addon gets the bare manifest id
35973
+ * (`kernel/moleculer/addon-context-factory.ts` → `id: addonId`);
35974
+ * - an addon co-located in hub-main gets it PREFIXED
35975
+ * (`server/backend/src/core/addon/addon-registry.service.ts` →
35976
+ * ``id: `addon:${addonId}` ``).
35977
+ *
35978
+ * Everything an addon might compare `ctx.id` AGAINST carries the bare form:
35979
+ * `DeviceBindingEntry.providerAddonId`, the `device-manager` bindings store's
35980
+ * `wrapperAddonId`, `CapabilityRegistry` provider keys, manifest ids.
35981
+ *
35982
+ * So `entry.providerAddonId === this.ctx.id` is silently, permanently false
35983
+ * for a builtin — and only for a builtin, which is why it survives a green
35984
+ * suite whose fake supplies the bare id. That is exactly how camera 615's
35985
+ * virtual doorbell latched `unbound` for twelve hours on 2026-08-07 while its
35986
+ * binding was intact ([D72](../../../../docs/decisions/adr-0072.md)).
35987
+ *
35988
+ * Route every comparison between `ctx.id` and a registry/store addon id
35989
+ * through {@link isSameAddonId}. `scripts/check-addon-id-comparison.ts`
35990
+ * enforces it in the processes where the prefix exists.
35991
+ */
35992
+ /** The prefix the hub-main context factory prepends to the manifest id. */
35993
+ var ADDON_ID_PREFIX = "addon:";
35994
+ /** The manifest id, whichever spelling of `ctx.id` you were handed. */
35995
+ function bareAddonId(id) {
35996
+ return id.startsWith(ADDON_ID_PREFIX) ? id.slice(6) : id;
35997
+ }
35998
+ /** True when both ids name the same addon, prefixed or not. */
35999
+ function isSameAddonId(a, b) {
36000
+ return bareAddonId(a) === bareAddonId(b);
36001
+ }
36002
+ //#endregion
35574
36003
  //#region src/utils/cosine-similarity.ts
35575
36004
  /** Cosine similarity between two embedding vectors */
35576
36005
  function cosineSimilarity(a, b) {
@@ -36297,7 +36726,7 @@ function readDetailCropConvention(config) {
36297
36726
  square: square.success ? square.data : DEFAULT_DETAIL_CROP_CONVENTION.square
36298
36727
  };
36299
36728
  }
36300
- function isHydratedField(entry) {
36729
+ function isHydratedField$1(entry) {
36301
36730
  return typeof entry === "object" && entry !== null && "key" in entry;
36302
36731
  }
36303
36732
  /**
@@ -36312,7 +36741,7 @@ function pickDetailCropConvention(view) {
36312
36741
  if (view === null) return DEFAULT_DETAIL_CROP_CONVENTION;
36313
36742
  const flat = {};
36314
36743
  for (const section of view.sections) for (const entry of section.fields) {
36315
- if (!isHydratedField(entry) || typeof entry.key !== "string") continue;
36744
+ if (!isHydratedField$1(entry) || typeof entry.key !== "string") continue;
36316
36745
  if (entry.key === "detailCropPaddingRatio" || entry.key === "detailCropSquare") flat[entry.key] = entry.value;
36317
36746
  }
36318
36747
  return readDetailCropConvention(flat);
@@ -36399,6 +36828,245 @@ function slideInsideFrame(rect, frameWidth, frameHeight) {
36399
36828
  };
36400
36829
  }
36401
36830
  //#endregion
36831
+ //#region src/pipeline/native-lease.ts
36832
+ /**
36833
+ * THE native-frame **lease** knobs — TTL, RAM budget and demand window for the
36834
+ * decode worker's native-resolution frame retention.
36835
+ *
36836
+ * ## Why they live here and not in the addon that reads them
36837
+ *
36838
+ * The WRITER is `pipeline-orchestrator` (the cluster-wide settings authority);
36839
+ * the READER is a private child process of `addon-pipeline`'s pipeline-runner.
36840
+ * Addons never import each other, so a key owned by either side would have to
36841
+ * be hand-copied by the other — and a hand-copied key is how a setting silently
36842
+ * stops arriving while both sides still look correct. Same reasoning, same
36843
+ * placement as `detail-crop.ts` (D52's "one cluster-wide orchestrator setting").
36844
+ *
36845
+ * ## Why cluster-wide and not per-node
36846
+ *
36847
+ * The lease is a per-decode-worker RAM window. Its purpose — the late
36848
+ * cross-process native crop landing on a full-resolution frame rather than the
36849
+ * ≤640 detection fallback — is a property of the PIPELINE, not of a node's
36850
+ * hardware: a per-node TTL would mean the same camera produces different crop
36851
+ * quality depending on which node the balancer placed it on, and nobody could
36852
+ * tell that from the stored media. Node-level RAM pressure is already handled
36853
+ * by the per-session budget ceiling, which is itself one of these knobs.
36854
+ *
36855
+ * ## What each knob costs
36856
+ *
36857
+ * A retained frame is a full NATIVE-resolution copy in system RAM. With the
36858
+ * default pinned-RGB24 lease path (`CAMSTACK_SESSION_PINNED_RGB_CROP`, on):
36859
+ * 4K ≈ 24.9 MB/frame, 1080p ≈ 6.2 MB/frame. On the YUV420P path (flag off, and
36860
+ * for software-decoded sessions): 4K ≈ 12.4 MB, 1080p ≈ 3.1 MB. Worst-case
36861
+ * resident RAM for ONE busy camera ≈ frameBytes × deliveredFps × ttlSeconds,
36862
+ * clamped by the budget ceiling. See `docs/design/decode-path.md` → "Lease
36863
+ * admission" for what actually gets admitted.
36864
+ */
36865
+ /**
36866
+ * Store identity of the lease knobs in `pipeline-orchestrator`'s GLOBAL
36867
+ * (cluster-wide) settings. Keys are unique across that addon's whole schema, so
36868
+ * the reader can walk every section instead of trusting the section id.
36869
+ */
36870
+ var NATIVE_LEASE_SECTION_ID = "native-lease";
36871
+ var NATIVE_LEASE_TTL_KEY = "nativeLeaseTtlMs";
36872
+ var NATIVE_LEASE_BUDGET_KEY = "nativeLeaseBudgetMb";
36873
+ var NATIVE_LEASE_ACTIVITY_KEY = "nativeLeaseActivityMs";
36874
+ var NATIVE_LEASE_ADMISSION_KEY = "nativeLeaseAdmission";
36875
+ /**
36876
+ * WHICH delivered frames the decode worker retains a native copy of.
36877
+ *
36878
+ * - `all` — every frame the worker delivered to the runner. The shipped
36879
+ * behaviour, and the only correct one if something can ask for a crop of a
36880
+ * frame the runner never sent to inference.
36881
+ * - `inferred` — only the frames the runner ADMITTED to its detection queue.
36882
+ * A native-crop request always names a `frameId` that rode an inference
36883
+ * result, so that is the only set a request can name. How much it drops is
36884
+ * the two-plane governor's admit ratio and nothing else: measured at ~50% on
36885
+ * this cluster, not the ~80% the design sketch assumed, because the governor
36886
+ * was not throttling as hard as the sketch supposed. Read
36887
+ * `leaseAdmitted`/`leaseOffered` off the metrics line for the camera in front
36888
+ * of you rather than quoting a number from here. The newest delivered frame is
36889
+ * croppable regardless — it is still the worker's reserved slot, not a lease —
36890
+ * which covers the one-frame race between a mark and the supersede that
36891
+ * consumes it.
36892
+ */
36893
+ var NativeLeaseAdmissionSchema = z.enum(["all", "inferred"]);
36894
+ /**
36895
+ * Operator-tunable native-lease settings. Bounds are enforced HERE (not only in
36896
+ * the slider) because the value also travels to a forked child process, where a
36897
+ * junk number would silently become a 0-length or unbounded retention window.
36898
+ */
36899
+ var NativeLeaseSettingsSchema = z.object({
36900
+ /**
36901
+ * How long a retained native frame is served before it counts as a miss.
36902
+ *
36903
+ * Must cover the FULL late-crop horizon: detection inference + the
36904
+ * cross-process inference-result hop to hub post-analysis + tracking + the
36905
+ * tRPC crop round-trip back. Below ~500 ms the busiest cameras' subject crops
36906
+ * outrun it and fall back to the ≤640 detection frame; above ~3 s the resident
36907
+ * RAM per busy camera grows linearly with no measured hit-rate gain.
36908
+ */
36909
+ ttlMs: z.number().int().min(250).max(1e4),
36910
+ /**
36911
+ * Hard per-decode-worker RAM ceiling for retained native frames, in MB.
36912
+ *
36913
+ * Intended as a SAFETY ceiling with the TTL as the effective cap — but check
36914
+ * which one is actually binding before reasoning from that. At the shipped
36915
+ * 1024 MB and a 2 800 ms TTL, a 4K camera hits the CEILING first (~43 frames
36916
+ * at ~24 MB each) and the TTL never gets to expire anything; `leaseMb` /
36917
+ * `leaseFrames` on the metrics line say which. When the ceiling binds, a
36918
+ * change that admits fewer frames buys retention WINDOW at constant RAM
36919
+ * rather than giving RAM back — lower this knob if RAM is what you wanted.
36920
+ * `0` DISABLES the lease entirely and falls the worker back to the tiny
36921
+ * leak-prone GPU surface ring (~85% crop miss; that is what the lease exists
36922
+ * to replace).
36923
+ */
36924
+ budgetMb: z.number().int().min(0).max(4096),
36925
+ /**
36926
+ * Demand window: eager per-frame native retention runs only within this many
36927
+ * ms of the last native-crop request (or of the dial starting).
36928
+ *
36929
+ * `0` means ALWAYS ON — it disables the gate, it does not disable retention.
36930
+ * That is the legacy behaviour that saturated an N100 (24 native-4K downloads
36931
+ * per second on a camera with zero crop demand), so leave it non-zero unless
36932
+ * you are reproducing that.
36933
+ */
36934
+ activityMs: z.number().int().min(0).max(12e4),
36935
+ /**
36936
+ * Which delivered frames are retained at all — see
36937
+ * {@link NativeLeaseAdmissionSchema}. This is the only knob of the four that
36938
+ * changes WHAT is kept rather than for how long, so it is also the only one
36939
+ * that can turn a crop that used to hit into a miss. The worker counts every
36940
+ * crop request naming a frame it did NOT see marked
36941
+ * (`leaseUnmarkedCrops` on the session-decode metrics line): a non-zero value
36942
+ * there is the signal that some caller names frames outside the inference set
36943
+ * and that this must go back to `all`.
36944
+ */
36945
+ admission: NativeLeaseAdmissionSchema
36946
+ });
36947
+ /**
36948
+ * The values in force when the operator has set nothing — byte-for-byte the
36949
+ * constants the decode worker shipped with as env-var defaults, so making these
36950
+ * settings changed no behaviour on the day it landed.
36951
+ */
36952
+ var DEFAULT_NATIVE_LEASE_SETTINGS = {
36953
+ ttlMs: 1200,
36954
+ budgetMb: 1024,
36955
+ activityMs: 15e3,
36956
+ admission: "inferred"
36957
+ };
36958
+ /** Slider bounds for the operator-facing knobs (orchestrator settings UI). */
36959
+ var NATIVE_LEASE_TTL_FIELD = {
36960
+ min: 250,
36961
+ max: 1e4,
36962
+ step: 50,
36963
+ default: DEFAULT_NATIVE_LEASE_SETTINGS.ttlMs
36964
+ };
36965
+ var NATIVE_LEASE_BUDGET_FIELD = {
36966
+ min: 0,
36967
+ max: 4096,
36968
+ step: 64,
36969
+ default: DEFAULT_NATIVE_LEASE_SETTINGS.budgetMb
36970
+ };
36971
+ var NATIVE_LEASE_ACTIVITY_FIELD = {
36972
+ min: 0,
36973
+ max: 12e4,
36974
+ step: 1e3,
36975
+ default: DEFAULT_NATIVE_LEASE_SETTINGS.activityMs
36976
+ };
36977
+ /** Select options for the admission knob (orchestrator settings UI). */
36978
+ var NATIVE_LEASE_ADMISSION_FIELD = {
36979
+ options: [{
36980
+ value: "all",
36981
+ label: "Every delivered frame"
36982
+ }, {
36983
+ value: "inferred",
36984
+ label: "Only frames sent to inference"
36985
+ }],
36986
+ default: DEFAULT_NATIVE_LEASE_SETTINGS.admission
36987
+ };
36988
+ /**
36989
+ * Parse one knob, reporting `null` for absent, junk, out-of-bounds — AND for a
36990
+ * value equal to the shipped default.
36991
+ *
36992
+ * That last rule is not tidiness, it is the difference between the documented
36993
+ * precedence being true and being a lie. `addon-settings.getGlobalSettings`
36994
+ * returns a HYDRATED payload, and `hydrateField` fills an unstored field with
36995
+ * the schema's own `default` (verified live on the hub: a cluster that has never
36996
+ * opened the form still reports `nativeLeaseTtlMs = 1200`). A reader that took
36997
+ * that at face value would report all three knobs as "set" on every cluster on
36998
+ * the day this shipped, permanently retiring the `CAMSTACK_SESSION_NATIVE_LEASE_*`
36999
+ * emergency override that the precedence promises. There is no raw-store read on
37000
+ * this cap to distinguish the two, so the default value itself is treated as
37001
+ * "the operator has expressed no preference" — which is also what leaving a
37002
+ * slider untouched means.
37003
+ *
37004
+ * The cost is one honest edge: an operator who deliberately selects the default
37005
+ * value in order to overrule an env var does not get it. Clear the env var
37006
+ * instead; the worker's spawn line names the source, so this is visible rather
37007
+ * than mysterious.
37008
+ */
37009
+ function readKnob(knob, raw) {
37010
+ const parsed = NativeLeaseSettingsSchema.shape[knob].safeParse(raw);
37011
+ if (!parsed.success) return null;
37012
+ return parsed.data === DEFAULT_NATIVE_LEASE_SETTINGS[knob] ? null : parsed.data;
37013
+ }
37014
+ /** {@link readKnob} for the one non-numeric knob. Same default-means-unset rule. */
37015
+ function readAdmissionKnob(raw) {
37016
+ const parsed = NativeLeaseAdmissionSchema.safeParse(raw);
37017
+ if (!parsed.success) return null;
37018
+ return parsed.data === DEFAULT_NATIVE_LEASE_SETTINGS.admission ? null : parsed.data;
37019
+ }
37020
+ /**
37021
+ * Narrow a FLAT settings record to the knobs the operator set.
37022
+ *
37023
+ * Per-FIELD parse, deliberately: a junk TTL must not also discard a valid
37024
+ * budget. An absent, out-of-bounds or default-valued knob is OMITTED (not
37025
+ * clamped, not defaulted) so the caller can still fall through to the env
37026
+ * override — clamping here would turn a typo into a value nobody chose. See
37027
+ * {@link readKnob} for why the default counts as unset.
37028
+ */
37029
+ function readNativeLeaseOverride(config) {
37030
+ const ttlMs = readKnob("ttlMs", config[NATIVE_LEASE_TTL_KEY]);
37031
+ const budgetMb = readKnob("budgetMb", config[NATIVE_LEASE_BUDGET_KEY]);
37032
+ const activityMs = readKnob("activityMs", config[NATIVE_LEASE_ACTIVITY_KEY]);
37033
+ const admission = readAdmissionKnob(config[NATIVE_LEASE_ADMISSION_KEY]);
37034
+ return {
37035
+ ...ttlMs === null ? {} : { ttlMs },
37036
+ ...budgetMb === null ? {} : { budgetMb },
37037
+ ...activityMs === null ? {} : { activityMs },
37038
+ ...admission === null ? {} : { admission }
37039
+ };
37040
+ }
37041
+ function isHydratedField(entry) {
37042
+ return typeof entry === "object" && entry !== null && "key" in entry;
37043
+ }
37044
+ var LEASE_KEYS = [
37045
+ NATIVE_LEASE_TTL_KEY,
37046
+ NATIVE_LEASE_BUDGET_KEY,
37047
+ NATIVE_LEASE_ACTIVITY_KEY,
37048
+ NATIVE_LEASE_ADMISSION_KEY
37049
+ ];
37050
+ /**
37051
+ * Extract the operator's lease overrides from an
37052
+ * `addon-settings.getGlobalSettings` payload.
37053
+ *
37054
+ * Walks EVERY section rather than looking inside {@link NATIVE_LEASE_SECTION_ID}
37055
+ * alone: the keys are unique across the addon's schema, and a section rename
37056
+ * must not silently revert the whole cluster to the defaults. A `null` payload
37057
+ * (addon mid-boot) means "operator set nothing" — the env/default fallback then
37058
+ * applies, which is the correct read of "I could not ask".
37059
+ */
37060
+ function pickNativeLeaseOverride(view) {
37061
+ if (view === null) return {};
37062
+ const flat = {};
37063
+ for (const section of view.sections) for (const entry of section.fields) {
37064
+ if (!isHydratedField(entry) || typeof entry.key !== "string") continue;
37065
+ if (LEASE_KEYS.includes(entry.key)) flat[entry.key] = entry.value;
37066
+ }
37067
+ return readNativeLeaseOverride(flat);
37068
+ }
37069
+ //#endregion
36402
37070
  //#region src/helpers/bind-addon-actions.ts
36403
37071
  /**
36404
37072
  * Bind an addon's custom-action catalog to its tRPC surface, returning a
@@ -36650,4 +37318,4 @@ function enumerateInferenceDevices(hw) {
36650
37318
  return out;
36651
37319
  }
36652
37320
  //#endregion
36653
- export { ACCESSORY_LABEL, 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, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, 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, AutomationControlStatusSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, 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, COCO_80_LABELS, COCO_TO_MACRO, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, 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, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, 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, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceLinkModeSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionEvalError, ExpressionParseError, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, 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, 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, LabelDefinitionSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, 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, NC_BASE_CONDITION_KEYS, NC_CONDITION_CATALOG, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_SNOOZE_MAX_MINUTES, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, 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, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, 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, 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, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, 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, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, 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, 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, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, 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, applyTransform, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlocksCapability, cosineSimilarity, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, decodeVectorBase64, decoderCapability, defaultDeviceFor, defineCustomActions, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, egressTranscodeSharingKey, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateLinkExpression, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isBaseConditionKey, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isDeviceScopedCap, isEvent, isNode, isObjectInput, isSoftwareDecode, 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, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, petFeederCapability, pickAccessoryControl, pickDetailCropConvention, pickPreferredRtspEntry, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readDetailCropConvention, readDeviceStateFrom, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
37321
+ export { ACCESSORY_LABEL, 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, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, 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, AutomationControlStatusSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, 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, COCO_80_LABELS, COCO_TO_MACRO, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, 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, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, 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, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceLinkModeSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, 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, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionEvalError, ExpressionParseError, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, 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, 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, LabelDefinitionSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, 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_SECTION_ID, NATIVE_LEASE_TTL_FIELD, NATIVE_LEASE_TTL_KEY, NC_BASE_CONDITION_KEYS, NC_CONDITION_CATALOG, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_SNOOZE_MAX_MINUTES, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, 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, 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, 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, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, 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, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, 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, 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, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, 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, applyTransform, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlocksCapability, cosineSimilarity, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, decodeVectorBase64, decoderCapability, defaultDeviceFor, defineCustomActions, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateLinkExpression, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isBaseConditionKey, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isDeviceScopedCap, isEvent, isNode, isObjectInput, isSameAddonId, isSoftwareDecode, 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, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, petFeederCapability, pickAccessoryControl, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };