@camstack/types 1.2.43 → 1.2.45

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.
Files changed (38) hide show
  1. package/dist/addon.js +8 -2
  2. package/dist/addon.mjs +8 -2
  3. package/dist/capabilities/index.d.ts +21 -3
  4. package/dist/capabilities/osd-manager.cap.d.ts +900 -0
  5. package/dist/capabilities/pipeline-analytics.cap.d.ts +1192 -74
  6. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +10 -0
  7. package/dist/capabilities/pipeline-runner.cap.d.ts +6 -0
  8. package/dist/capabilities/schemas/streaming-shared.d.ts +2 -0
  9. package/dist/capabilities/server-management.cap.d.ts +3 -3
  10. package/dist/capabilities/stream-broker.cap.d.ts +32 -0
  11. package/dist/ffmpeg/fmp4-box-splitter.d.ts +113 -0
  12. package/dist/ffmpeg/fmp4-fragment-child.d.ts +85 -0
  13. package/dist/ffmpeg/fmp4-fragment-plane.d.ts +142 -0
  14. package/dist/ffmpeg/invocation.d.ts +4 -2
  15. package/dist/fmp4-box-splitter-B53u9-Nu.mjs +615 -0
  16. package/dist/fmp4-box-splitter-BkWH7O3L.js +686 -0
  17. package/dist/generated/addon-api.d.ts +162 -0
  18. package/dist/generated/cap-input-defaults.d.ts +1 -1
  19. package/dist/generated/capability-router-map.d.ts +5 -2
  20. package/dist/generated/device-proxy.d.ts +3 -1
  21. package/dist/generated/method-access-map.d.ts +1 -1
  22. package/dist/generated/system-proxy.d.ts +2 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.js +1114 -407
  25. package/dist/index.mjs +1075 -397
  26. package/dist/interfaces/camera-switches.d.ts +48 -0
  27. package/dist/interfaces/stream-broker.d.ts +19 -49
  28. package/dist/node.d.ts +4 -0
  29. package/dist/node.js +509 -3
  30. package/dist/node.mjs +507 -3
  31. package/dist/notification/schedule.d.ts +20 -0
  32. package/dist/{sleep-Bx9IIoT0.js → sleep-BOI-sVEA.js} +37 -1
  33. package/dist/{sleep-DtstvzWm.mjs → sleep-Bf5fBs7u.mjs} +37 -1
  34. package/dist/types/detection.d.ts +31 -0
  35. package/dist/types/pipeline-step.d.ts +22 -1
  36. package/package.json +1 -1
  37. package/dist/canonical-hash-7nfBbEqR.mjs +0 -35
  38. package/dist/canonical-hash-BcZHRHIx.js +0 -40
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { t as EventCategory } from "./event-category-41fKf-q9.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
- import { t as canonicalHash } from "./canonical-hash-7nfBbEqR.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-Bf5fBs7u.mjs";
3
+ import { a as buildAudioArgs, c as buildVideoArgs, d as logBannerArgs, f as pickVideoEncoder, i as audioPlanFromEncodeProfile, l as invocationFromEncodeProfile, n as canonicalHash, o as buildFfmpegArgs, r as AUDIO_PRESETS, s as buildInputArgs, t as Fmp4BoxSplitter, u as isSoftwareDecode } from "./fmp4-box-splitter-B53u9-Nu.mjs";
4
4
  import { EventSourceType } from "./enums.mjs";
5
5
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
6
6
  import { z } from "zod";
@@ -230,383 +230,6 @@ function encodeProfileFromStreamShape(stream) {
230
230
  };
231
231
  }
232
232
  //#endregion
233
- //#region src/ffmpeg/invocation.ts
234
- var AUDIO_ENCODER_BY_CODEC = {
235
- opus: "libopus",
236
- aac: "aac",
237
- pcmu: "pcm_mulaw",
238
- pcma: "pcm_alaw"
239
- };
240
- /**
241
- * Camera-microphone audio, per codec. Lives HERE rather than in
242
- * `encode-defaults.ts` only to avoid an import cycle (`encode-defaults` depends
243
- * on these types); it is re-exported from there, which is where to read it.
244
- *
245
- * Every source in this repo is a mono camera mic. The former broker preset
246
- * encoded Opus at `channels: 2`, spending bitrate duplicating one channel —
247
- * that is the value this consolidation changed.
248
- */
249
- var AUDIO_PRESETS = {
250
- aac: {
251
- kind: "encode",
252
- codec: "aac",
253
- bitrateKbps: 128,
254
- sampleRateHz: 48e3,
255
- channels: 1
256
- },
257
- opus: {
258
- kind: "encode",
259
- codec: "opus",
260
- bitrateKbps: 64,
261
- sampleRateHz: 48e3,
262
- channels: 1
263
- },
264
- pcmu: {
265
- kind: "encode",
266
- codec: "pcmu",
267
- sampleRateHz: 8e3,
268
- channels: 1
269
- }
270
- };
271
- /** `-hide_banner -loglevel <level>` — every ffmpeg site opens with this. */
272
- function logBannerArgs(level) {
273
- return [
274
- "-hide_banner",
275
- "-loglevel",
276
- level
277
- ];
278
- }
279
- /** `true` when the resolved value means "decode in software" (⇒ no `-hwaccel`). */
280
- function isSoftwareDecode(decodeHwAccel) {
281
- return !decodeHwAccel || decodeHwAccel === "none" || decodeHwAccel === "copy";
282
- }
283
- /**
284
- * Every INPUT option, in order, terminated by `-i <url>`. Nothing may be
285
- * appended to this list by a caller — that is the whole point of the function.
286
- */
287
- function buildInputArgs(input, decodeHwAccel) {
288
- const args = [];
289
- if (!isSoftwareDecode(decodeHwAccel)) args.push("-hwaccel", String(decodeHwAccel));
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));
293
- if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
294
- if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
295
- args.push("-i", input.url);
296
- return args;
297
- }
298
- /** The `-vf` filter args, or `[]` when a consumer `-vf` already claims the slot. */
299
- function buildVideoFilterArgs(scale, outputArgs) {
300
- if (!scale) return [];
301
- if (outputArgs.some((a) => a === "-vf")) return [];
302
- if (scale.mode === "exact") return ["-vf", `scale=${scale.width}:${scale.height}`];
303
- return ["-vf", `scale='min(${scale.width},iw)':'min(${scale.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2`];
304
- }
305
- /** Rate-control args for an encode plan. */
306
- function buildRateControlArgs(video) {
307
- const kbps = video.bitrateKbps;
308
- if (kbps === void 0) return [];
309
- const rc = video.rateControl ?? {
310
- kind: "cap",
311
- vbvSeconds: 2
312
- };
313
- const bufsize = Math.max(1, Math.round(kbps * rc.vbvSeconds));
314
- return [
315
- ...rc.kind === "cbr" ? ["-b:v", `${kbps}k`] : [],
316
- "-maxrate",
317
- `${kbps}k`,
318
- "-bufsize",
319
- `${bufsize}k`
320
- ];
321
- }
322
- /** The whole video block (`-vf` … `-c:v` … knobs), after `-i`. */
323
- function buildVideoArgs(video, outputArgs) {
324
- if (video.kind === "copy") return [
325
- "-c:v",
326
- "copy",
327
- ...video.bitstreamFilter ? ["-bsf:v", video.bitstreamFilter] : []
328
- ];
329
- const args = [
330
- ...buildVideoFilterArgs(video.scale, outputArgs),
331
- "-c:v",
332
- video.encoder
333
- ];
334
- if (video.preset !== void 0) args.push("-preset", video.preset);
335
- if (video.tune !== void 0) args.push("-tune", video.tune);
336
- if (video.profile !== void 0) args.push("-profile:v", video.profile);
337
- if (video.level !== void 0) args.push("-level", video.level);
338
- if (video.pixelFormat !== void 0) args.push("-pix_fmt", video.pixelFormat);
339
- if (video.fps !== void 0) args.push("-r", String(video.fps));
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})`);
342
- if (video.bf !== void 0) args.push("-bf", String(video.bf));
343
- args.push(...buildRateControlArgs(video));
344
- if (video.bitstreamFilter !== void 0) args.push("-bsf:v", video.bitstreamFilter);
345
- return args;
346
- }
347
- /** The whole audio block, after `-i`. */
348
- function buildAudioArgs(audio) {
349
- if (audio.kind === "none") return ["-an"];
350
- if (audio.kind === "copy") return ["-c:a", "copy"];
351
- const args = [];
352
- if (audio.filter !== void 0) args.push("-af", audio.filter);
353
- args.push("-c:a", AUDIO_ENCODER_BY_CODEC[audio.codec]);
354
- if (audio.application !== void 0) args.push("-application", audio.application);
355
- if (audio.frameDurationMs !== void 0) args.push("-frame_duration", String(audio.frameDurationMs));
356
- if (audio.globalHeader === true) args.push("-flags", "+global_header");
357
- if (audio.sampleRateHz !== void 0) args.push("-ar", String(audio.sampleRateHz));
358
- if (audio.bitrateKbps !== void 0) args.push("-b:a", `${audio.bitrateKbps}k`);
359
- if (audio.vbvBufferKbits !== void 0) args.push("-bufsize", `${audio.vbvBufferKbits}k`);
360
- if (audio.channels !== void 0) args.push("-ac", String(audio.channels));
361
- return args;
362
- }
363
- /** RTP output-leg args (`-payload_type`, `-ssrc`, `-sdp_file`, `-f rtp <url>`). */
364
- function buildRtpOutputArgs(out) {
365
- const args = [];
366
- if (out.payloadType !== void 0) args.push("-payload_type", String(out.payloadType));
367
- if (out.ssrc !== void 0) args.push("-ssrc", String(out.ssrc));
368
- if (out.sdpFile !== void 0) args.push("-sdp_file", out.sdpFile);
369
- args.push("-f", "rtp", out.url);
370
- return args;
371
- }
372
- /** `true` when the sink is a raw elementary bytestream that cannot mux audio. */
373
- function isElementaryVideoSink(sink) {
374
- return sink.kind === "stdout" && (sink.container === "h264" || sink.container === "hevc");
375
- }
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
- /**
427
- * A second output mapping source audio to RTP-over-UDP. `0:a:0?` makes the
428
- * audio optional so a source with no audio skips it instead of failing the
429
- * whole invocation.
430
- */
431
- function buildAudioSidecarArgs(sidecar) {
432
- return [
433
- "-map",
434
- "0:a:0?",
435
- ...buildAudioArgs(sidecar.codec === "pcma" ? {
436
- kind: "encode",
437
- codec: "pcma",
438
- sampleRateHz: 8e3,
439
- channels: 1
440
- } : AUDIO_PRESETS[sidecar.codec]),
441
- ...buildRtpOutputArgs({
442
- url: sidecar.rtpUrl,
443
- sdpFile: sidecar.sdpFile
444
- })
445
- ];
446
- }
447
- /**
448
- * Assemble the full ffmpeg argument list. Layout:
449
- *
450
- * -hide_banner -loglevel <level>
451
- * [-hwaccel <backend|auto>] ─┐ INPUT options — strictly before -i.
452
- * [<input.extraArgs>] │
453
- * [-fflags <flag>…] │
454
- * [-rtsp_transport tcp] │
455
- * -i <url> ─┘
456
- * <video block> <threads> <audio block> ─┐ OUTPUT options.
457
- * <consumer outputArgs verbatim> │
458
- * <sink> ─┘ terminal
459
- */
460
- function buildFfmpegArgs(inv) {
461
- const head = [...logBannerArgs(inv.logLevel), ...buildInputArgs(inv.input, inv.decodeHwAccel)];
462
- const threadArgs = inv.threadCount > 0 ? ["-threads", String(inv.threadCount)] : [];
463
- if (inv.sink.kind === "rtp-outputs") {
464
- const videoLeg = inv.sink.video ? [
465
- "-an",
466
- "-map",
467
- "0:v:0",
468
- ...buildVideoArgs(inv.video, inv.outputArgs),
469
- ...threadArgs,
470
- ...inv.outputArgs,
471
- ...buildRtpOutputArgs(inv.sink.video)
472
- ] : [];
473
- const audioLeg = inv.sink.audio ? [
474
- "-vn",
475
- "-map",
476
- "0:a:0?",
477
- ...buildAudioArgs(inv.audio),
478
- ...buildRtpOutputArgs(inv.sink.audio)
479
- ] : [];
480
- return [
481
- ...head,
482
- ...videoLeg,
483
- ...audioLeg
484
- ];
485
- }
486
- const audioArgs = isElementaryVideoSink(inv.sink) ? ["-an"] : buildAudioArgs(inv.audio);
487
- const sinkArgs = buildStdoutOrRtspSinkArgs(inv.sink);
488
- return [
489
- ...head,
490
- ...buildVideoArgs(inv.video, inv.outputArgs),
491
- ...threadArgs,
492
- ...audioArgs,
493
- ...inv.outputArgs,
494
- ...sinkArgs,
495
- ...inv.audioSidecar ? buildAudioSidecarArgs(inv.audioSidecar) : []
496
- ];
497
- }
498
- /**
499
- * Hardware ENCODER ids per decode-hwaccel backend — a static, deterministic
500
- * map (the same shape the reference NVR uses: platform → encoder, no probe).
501
- */
502
- var ENCODER_IDS_BY_BACKEND = {
503
- videotoolbox: {
504
- h264: "h264_videotoolbox",
505
- h265: "hevc_videotoolbox"
506
- },
507
- vaapi: {
508
- h264: "h264_vaapi",
509
- h265: "hevc_vaapi"
510
- },
511
- qsv: {
512
- h264: "h264_qsv",
513
- h265: "hevc_qsv"
514
- },
515
- cuda: {
516
- h264: "h264_nvenc",
517
- h265: "hevc_nvenc"
518
- },
519
- nvdec: {
520
- h264: "h264_nvenc",
521
- h265: "hevc_nvenc"
522
- },
523
- amf: {
524
- h264: "h264_amf",
525
- h265: "hevc_amf"
526
- }
527
- };
528
- /**
529
- * The hardware encoder for a target codec on `backend`, or the software one.
530
- * `'auto'` is NOT a backend identity (it is an instruction to ffmpeg), so it
531
- * maps to software encoding.
532
- */
533
- function pickVideoEncoder(target, backend, useHardware) {
534
- const software = target === "h264" ? "libx264" : "libx265";
535
- if (!useHardware || backend === null || isSoftwareDecode(backend) || backend === "auto") return software;
536
- const ids = ENCODER_IDS_BY_BACKEND[backend.toLowerCase()];
537
- if (!ids) return software;
538
- return target === "h264" ? ids.h264 : ids.h265;
539
- }
540
- /** Map an `EncodeProfile.audio` to an audio plan. */
541
- function audioPlanFromEncodeProfile(audio) {
542
- if (audio === "passthrough") return { kind: "none" };
543
- if (audio.codec === "copy") return { kind: "copy" };
544
- return {
545
- kind: "encode",
546
- codec: audio.codec,
547
- ...audio.bitrateKbps !== void 0 ? { bitrateKbps: audio.bitrateKbps } : {},
548
- ...audio.sampleRateHz !== void 0 ? { sampleRateHz: audio.sampleRateHz } : {},
549
- ...audio.channels !== void 0 ? { channels: audio.channels } : {}
550
- };
551
- }
552
- /**
553
- * Adapt an `EncodeProfile` (the operator/consumer-facing shape) into an
554
- * {@link FfmpegInvocation}. This is the ONLY bridge between the two models —
555
- * a second one is how the repo grew two argv builders that disagreed about
556
- * hardware.
557
- *
558
- * Smart video copy: when the source already speaks the requested codec the
559
- * encode block is elided entirely and ffmpeg runs as a re-muxer on the video
560
- * plane. Width / height / fps / bitrate in the profile are a downstream BUDGET,
561
- * not a forced rescale.
562
- */
563
- function invocationFromEncodeProfile(input) {
564
- const v = input.profile.video;
565
- const shouldCopy = v.codec === "copy" || input.forceReencode !== true && v.codec === input.sourceCodec;
566
- const scale = v.width !== void 0 && v.height !== void 0 ? {
567
- mode: "fit",
568
- width: v.width,
569
- height: v.height
570
- } : null;
571
- const target = v.codec === "h265" ? "h265" : "h264";
572
- const video = shouldCopy ? {
573
- kind: "copy",
574
- ...input.bitstreamFilter !== void 0 ? { bitstreamFilter: input.bitstreamFilter } : {}
575
- } : {
576
- kind: "encode",
577
- encoder: pickVideoEncoder(target, input.decodeHwAccel, input.hardwareEncoders === true),
578
- scale,
579
- ...v.preset !== void 0 ? { preset: v.preset } : {},
580
- ...v.tune !== void 0 ? { tune: v.tune } : {},
581
- ...v.profile !== void 0 ? { profile: v.profile } : {},
582
- ...v.level !== void 0 ? { level: v.level } : {},
583
- ...input.pixelFormat !== void 0 ? { pixelFormat: input.pixelFormat } : {},
584
- ...v.fps !== void 0 ? { fps: v.fps } : {},
585
- ...v.gopFrames !== void 0 ? { gopFrames: v.gopFrames } : {},
586
- ...input.forceKeyFramesSeconds !== void 0 ? { forceKeyFramesSeconds: input.forceKeyFramesSeconds } : {},
587
- ...v.bf !== void 0 ? { bf: v.bf } : {},
588
- ...v.bitrateKbps !== void 0 ? { bitrateKbps: v.bitrateKbps } : {},
589
- ...input.rateControl !== void 0 ? { rateControl: input.rateControl } : {},
590
- ...input.bitstreamFilter !== void 0 ? { bitstreamFilter: input.bitstreamFilter } : {}
591
- };
592
- return {
593
- logLevel: input.logLevel ?? "error",
594
- decodeHwAccel: input.decodeHwAccel,
595
- input: {
596
- url: input.sourceUrl,
597
- rtspTransport: "tcp",
598
- fflags: ["+discardcorrupt"],
599
- ...input.profile.inputArgs?.length ? { extraArgs: input.profile.inputArgs } : {}
600
- },
601
- video,
602
- audio: audioPlanFromEncodeProfile(input.profile.audio),
603
- threadCount: input.threadCount ?? 0,
604
- outputArgs: input.profile.outputArgs ?? [],
605
- sink: input.sink,
606
- ...input.audioSidecar !== void 0 ? { audioSidecar: input.audioSidecar } : {}
607
- };
608
- }
609
- //#endregion
610
233
  //#region src/ffmpeg/encode-defaults.ts
611
234
  /**
612
235
  * The shape every live egress starts from: H.264 Baseline 3.1 at 720p25.
@@ -990,6 +613,19 @@ var DEFAULT_RETENTION = {
990
613
  * | `notifications` | `notificationRules.setDeviceMuted` | `NotificationCenter.evaluateAndEnqueue` returns before any rule is evaluated |
991
614
  * | `privacy-mask` | `privacyMask.setMask({ enabled })` → the CAMERA | the camera blanks the masked regions itself; every stream and recording carries the black boxes |
992
615
  * | `device-audio` | `privacyMask.setAudioEnabled` → the CAMERA | the camera stops encoding an audio track at all; every consumer sees silent video |
616
+ * | `broker-audio` | `streamBroker.setDeviceAudioMute` → `DeviceOverride.audioMuted` | `StreamBroker.setAudioMuted` drops the audio plane at the source: no `type:'audio'` packet leaves `fanOutEncoded`, no RTP reaches the restreamer, and the restreamer serves the video-only SDP |
617
+ *
618
+ * ## `device-audio` and `broker-audio` are two functions, not two knobs
619
+ *
620
+ * They look adjacent and they are not the same control ([D83](../../../../docs/decisions/adr-0083.md)):
621
+ * `device-audio` writes the CAMERA, so it is hardware privacy — the microphone
622
+ * genuinely stops, it survives CamStack entirely, and it costs a multi-second
623
+ * encoder restart on every flip. `broker-audio` writes THIS server, so it is
624
+ * instant, vendor-independent and reversible without touching the camera, and
625
+ * a camera that ignores or lacks the ISAPI/Reolink control is still silenced.
626
+ * D62 forbids a second switch that *disagrees* with the first; these two
627
+ * cannot disagree, because neither reads the other's store — the camera holds
628
+ * one, the broker holds the other, and each reports its own fact.
993
629
  *
994
630
  * ## The two switches whose authority is not on this server
995
631
  *
@@ -1051,6 +687,7 @@ var CameraSwitchIdSchema = z.enum([
1051
687
  "object-detection",
1052
688
  "privacy-mask",
1053
689
  "device-audio",
690
+ "broker-audio",
1054
691
  "audio-analysis",
1055
692
  "recording",
1056
693
  "notifications"
@@ -1066,12 +703,17 @@ var CameraSwitchIdSchema = z.enum([
1066
703
  * `object-detection` despite feeding it: a mask blanks REGIONS, so its blast
1067
704
  * radius is partial, and the "broadest first" rule does not rank a partial
1068
705
  * control above a whole-function one.
706
+ *
707
+ * `broker-audio` sits directly BELOW `device-audio` by the same source-first
708
+ * rule: the camera's microphone feeds the broker, so silencing the camera
709
+ * leaves the broker's mute with nothing to suppress; the reverse is not true.
1069
710
  */
1070
711
  var CAMERA_SWITCH_ORDER = [
1071
712
  "stream-broker",
1072
713
  "object-detection",
1073
714
  "privacy-mask",
1074
715
  "device-audio",
716
+ "broker-audio",
1075
717
  "audio-analysis",
1076
718
  "recording",
1077
719
  "notifications"
@@ -1097,7 +739,8 @@ var CameraSwitchAuthoritySchema = z.discriminatedUnion("kind", [
1097
739
  z.object({
1098
740
  kind: z.literal("camera-mask"),
1099
741
  capName: z.string()
1100
- })
742
+ }),
743
+ z.object({ kind: z.literal("broker-audio-mute") })
1101
744
  ]);
1102
745
  /**
1103
746
  * Why a switch is not offered for this camera. Rendered instead of the
@@ -1196,6 +839,13 @@ var CAMERA_SWITCH_CATALOG = {
1196
839
  },
1197
840
  countsAsSwitchedOff: true
1198
841
  },
842
+ "broker-audio": {
843
+ id: "broker-audio",
844
+ label: "Audio distribution",
845
+ costWhenOff: "Off: this server distributes no sound for this camera — live view is silent and everything recorded while it is off is silent FOREVER, even after you turn it back on. Audio detection and classification also have nothing to analyse. The camera keeps capturing sound, so nothing about the camera changes and turning this back on is instant, with no interruption to the picture.",
846
+ authority: { kind: "broker-audio-mute" },
847
+ countsAsSwitchedOff: true
848
+ },
1199
849
  "audio-analysis": {
1200
850
  id: "audio-analysis",
1201
851
  label: "Audio detection & classification",
@@ -1314,6 +964,18 @@ function resolveState(descriptor, input) {
1314
964
  enabled: mask.enabled
1315
965
  };
1316
966
  }
967
+ case "broker-audio-mute": {
968
+ const broker = input.brokerAudio;
969
+ if (broker === null) return {
970
+ available: false,
971
+ enabled: true,
972
+ unavailableReason: "source-unreachable"
973
+ };
974
+ return {
975
+ available: true,
976
+ enabled: !broker.muted
977
+ };
978
+ }
1317
979
  }
1318
980
  }
1319
981
  /**
@@ -4755,7 +4417,44 @@ var streamBrokerCapability = {
4755
4417
  kind: "mutation",
4756
4418
  auth: "admin"
4757
4419
  }),
4758
- isRtspEnabled: method(z.object({ brokerId: z.string() }), z.boolean())
4420
+ isRtspEnabled: method(z.object({ brokerId: z.string() }), z.boolean()),
4421
+ /**
4422
+ * ── Per-device audio-plane policy (D83) ───────────────────────────
4423
+ *
4424
+ * The BROKER-side mute: while `muted`, this node distributes none of
4425
+ * the device's audio, on any plane it serves — live (WebRTC / encoded
4426
+ * subscribers) AND recording (the RTSP restreamer the recorder pulls,
4427
+ * which additionally serves the video-only SDP so the recorder's ffmpeg
4428
+ * never declares an audio stream it will not receive).
4429
+ *
4430
+ * Keyed by `deviceId`, not `brokerId`: every one of a camera's streams
4431
+ * carries the same microphone, and a per-stream answer would let main
4432
+ * and sub disagree about whether the camera is silent.
4433
+ *
4434
+ * The state lives in the broker's existing `DeviceOverride` blob — no
4435
+ * new store — and the mute is applied to a fresh broker at creation, so
4436
+ * a restart, a re-dial or a catalog republish never un-mutes a camera.
4437
+ */
4438
+ getDeviceAudioMute: method(z.object({ deviceId: z.number().int() }), z.object({
4439
+ muted: z.boolean(),
4440
+ /**
4441
+ * How many live non-derived brokers currently hold the mute. Purely
4442
+ * diagnostic: `muted` is the policy and is authoritative on its own
4443
+ * (it applies to brokers that do not exist yet), while this says
4444
+ * whether anything is presently being silenced.
4445
+ */
4446
+ appliedBrokers: z.number().int().nonnegative()
4447
+ })),
4448
+ setDeviceAudioMute: method(z.object({
4449
+ deviceId: z.number().int(),
4450
+ muted: z.boolean()
4451
+ }), z.object({
4452
+ muted: z.boolean(),
4453
+ appliedBrokers: z.number().int().nonnegative()
4454
+ }), {
4455
+ kind: "mutation",
4456
+ auth: "admin"
4457
+ })
4759
4458
  },
4760
4459
  events: {
4761
4460
  onCamStreamDemand: event(z.object({
@@ -12602,6 +12301,30 @@ var TrackSourceSchema = z.enum([
12602
12301
  "audio"
12603
12302
  ]);
12604
12303
  /**
12304
+ * Where a track sits in the RETRAIN lifecycle (D81).
12305
+ *
12306
+ * - `none` — never marked, or un-marked. Evictable.
12307
+ * - `staging` — the operator wants this track as training material and has not
12308
+ * finished with it. **This is the only state retention holds**: the track and
12309
+ * everything it owns (object events, crops, keyframes, CLIP vector) survive
12310
+ * the device's age window.
12311
+ * - `trained` — the retrain page has taken what it needed. The frames it chose
12312
+ * were COPIED into the retrain dataset at selection time, so the dataset no
12313
+ * longer depends on the track's media and the track becomes EVICTABLE again.
12314
+ * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
12315
+ * a deliberate action of the retrain page, not a side effect of a checkbox.
12316
+ *
12317
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
12318
+ * the store's filter language has only positive equality and `whereIn` — no
12319
+ * negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
12320
+ * would make the entire pre-column history immortal in one deploy.
12321
+ */
12322
+ var RetrainStatusSchema = z.enum([
12323
+ "none",
12324
+ "staging",
12325
+ "trained"
12326
+ ]);
12327
+ /**
12605
12328
  * Per-track OPERATOR flags — set by hand from the admin UI or the viewer, never
12606
12329
  * by the pipeline. Spread into `TrackSchema` and `KeyEventSchema` from one place
12607
12330
  * so the two surfaces cannot drift.
@@ -12611,18 +12334,31 @@ var TrackSourceSchema = z.enum([
12611
12334
  * columns existed read as absent, and a consumer that needs a boolean should say
12612
12335
  * `flag === true`, not `flag !== false`.
12613
12336
  *
12614
- * What the flags DO is deliberately UNDEFINED at the time of writing: they are
12615
- * operator curation, and the behaviour they drive will be specified separately.
12616
- * In particular a `markForTrain` track is NOT pinned against retention — see
12617
- * `docs/decisions/adr-0059.md` for why that is a store-level change, not a flag.
12337
+ * `markForTrain` is the WIRE FACE of {@link RetrainStatusSchema}, not a column:
12338
+ * it is exactly `retrainStatus === 'staging'`, in both directions. Writing
12339
+ * `true` moves `none → staging`, writing `false` moves `staging none`, and a
12340
+ * `trained` track reports `false` while refusing both writes. The boolean is
12341
+ * kept because three surfaces drive a toggle off it; anything that needs to tell
12342
+ * "never marked" from "already trained" must read `retrainStatus`.
12343
+ *
12344
+ * `debug` does NOT pin; it is attention, not durability.
12618
12345
  */
12619
12346
  var TrackFlagFields = {
12620
- /** Operator marked this track as training material. */
12347
+ /** Operator marked this track as training material — i.e. `retrainStatus` is
12348
+ * `'staging'`. */
12621
12349
  markForTrain: z.boolean().optional(),
12622
12350
  /** Operator marked this track for diagnostic attention. */
12623
12351
  debug: z.boolean().optional()
12624
12352
  };
12625
12353
  /**
12354
+ * The lifecycle field itself, on the READ surfaces only (`Track`, `KeyEvent`).
12355
+ * Deliberately NOT part of {@link TrackFlagFields}: that group also builds the
12356
+ * write patch, and the status is not something the toggle sets — it is what the
12357
+ * toggle's boolean is derived from. Absent on an in-RAM track never touched;
12358
+ * always present on a persisted row (the column default materialises `'none'`).
12359
+ */
12360
+ var TrackRetrainFields = { retrainStatus: RetrainStatusSchema.optional() };
12361
+ /**
12626
12362
  * The write half: a PARTIAL patch. An omitted key is left untouched, so setting
12627
12363
  * one flag can never clear the other — the toggles are independent and are
12628
12364
  * driven from three surfaces that do not know about each other.
@@ -12636,13 +12372,108 @@ var TrackFlagsPatchSchema = z.object(TrackFlagFields);
12636
12372
  var TrackFlagsSchema = z.object({
12637
12373
  trackId: z.string(),
12638
12374
  markForTrain: z.boolean(),
12639
- debug: z.boolean()
12375
+ debug: z.boolean(),
12376
+ /** The lifecycle state the boolean was derived from. Required here (unlike on
12377
+ * a track row) because this shape is only ever produced by the write body,
12378
+ * which always knows it — and a surface that has just written needs to render
12379
+ * `trained` without a re-fetch. */
12380
+ retrainStatus: RetrainStatusSchema
12381
+ });
12382
+ /**
12383
+ * WHICH tier a label occupies. The slot a label lands in is DECLARED by the
12384
+ * step that produced it (`StepDefinition.labelTier`), never inferred from the
12385
+ * text or the step's name.
12386
+ *
12387
+ * - `1` — a SUB-CLASS: finer than the macro class, still a taxonomy token.
12388
+ * `animal-type` (`dog`, `bird`), `vehicle-type` (`van`), and the root
12389
+ * detector's own raw class when it is finer than the macro it maps to.
12390
+ * - `2` — an INSTANCE: the finest thing said about this subject.
12391
+ * `species` (`Turdus migratorius`), `identity` (`Alice`), `plate-text`.
12392
+ *
12393
+ * The macro class itself (`person`, `vehicle`, `animal`, `package`, `face`,
12394
+ * `plate`, `audio`) is NOT a tier — it is `className`, and a macro token
12395
+ * offered for either label slot is refused (2026-08-07 rule; the refusal is
12396
+ * logged as `label tier collapse refused`).
12397
+ */
12398
+ var LabelTierSchema = z.union([z.literal(1), z.literal(2)]);
12399
+ /**
12400
+ * WHO decided a label, and when. Carried per tier so a value can be traced to
12401
+ * the step and model that produced it — which is what makes the write rule
12402
+ * arguable after the fact ("why is 592's label `dog` and not `Canis lupus`?")
12403
+ * and what lets a migrated, UNATTRIBUTED value be told apart from a real one.
12404
+ *
12405
+ * `stepId` is the pipeline step id (`animal-classifier`, `bird-classifier`,
12406
+ * `plate-ocr`, `face-embedding`, `object-detection`), or the sentinel
12407
+ * `migration:4g` for a value the 4g migration moved from the single-slot era —
12408
+ * that value has no provenance, and the write rule lets ANY properly-attributed
12409
+ * write of the same tier replace it regardless of score.
12410
+ */
12411
+ var LabelAttributionSchema = z.object({
12412
+ stepId: z.string(),
12413
+ modelId: z.string().optional(),
12414
+ decidedAt: z.number()
12415
+ });
12416
+ /**
12417
+ * The TIERED label model (roadmap 4g), spread into `TrackSchema` and
12418
+ * `ObjectEventSchema` from ONE place so the two surfaces cannot drift — a
12419
+ * track and its events always answer the same question the same way.
12420
+ *
12421
+ * Two scalar columns, not an array: every consumer wants "the coarse one" or
12422
+ * "the fine one", and an array made both a scan. `label` is tier 1, `subLabel`
12423
+ * is tier 2, and each carries its own score + attribution.
12424
+ *
12425
+ * **Reading it.** What a human should be shown is `subLabel ?? label` — the
12426
+ * finest thing known. Before 4g the single `label` column held the finest
12427
+ * value, so a consumer that has not been updated reads the tier-1 slot and
12428
+ * shows nothing on a species-only row; that is why the migration puts every
12429
+ * pre-4g value in tier 2 (it cannot regress a display that reads the fallback)
12430
+ * and why the read surfaces were changed in the same train.
12431
+ *
12432
+ * **Writing it.** The slots are independent, which is the whole point: a
12433
+ * tier-1 write (`bird`) can never overwrite a tier-2 value (`Turdus
12434
+ * migratorius`), so fineness cannot regress by construction. Within a tier the
12435
+ * higher score wins. One rule, one implementation — see
12436
+ * `pipeline/label-tier.ts` in addon-post-analysis.
12437
+ */
12438
+ var TieredLabelFields = {
12439
+ /** Tier 1 — the sub-class. See {@link LabelTierSchema}. */
12440
+ label: z.string().optional(),
12441
+ /** Confidence of the tier-1 value, as reported by the deciding step. */
12442
+ labelScore: z.number().optional(),
12443
+ /** Provenance of the tier-1 value. See {@link LabelAttributionSchema}. */
12444
+ labelMeta: LabelAttributionSchema.optional(),
12445
+ /** Tier 2 — the instance. See {@link LabelTierSchema}. */
12446
+ subLabel: z.string().optional(),
12447
+ /** Confidence of the tier-2 value, as reported by the deciding step. */
12448
+ subLabelScore: z.number().optional(),
12449
+ /** Provenance of the tier-2 value. See {@link LabelAttributionSchema}. */
12450
+ subLabelMeta: LabelAttributionSchema.optional()
12451
+ };
12452
+ /** Per-camera slice of a training-export estimate. */
12453
+ var TrainingExportDeviceTotalsSchema = z.object({
12454
+ deviceId: z.number(),
12455
+ tracks: z.number().int(),
12456
+ files: z.number().int(),
12457
+ bytes: z.number().int()
12458
+ });
12459
+ /**
12460
+ * What a training export WOULD contain. Computed from media index rows only —
12461
+ * no blob is read to produce this.
12462
+ */
12463
+ var TrainingExportSummarySchema = z.object({
12464
+ generatedAt: z.number(),
12465
+ trackCount: z.number().int(),
12466
+ fileCount: z.number().int(),
12467
+ byteCount: z.number().int(),
12468
+ /** More marked tracks exist than a single pass carries. */
12469
+ truncated: z.boolean(),
12470
+ devices: z.array(TrainingExportDeviceTotalsSchema).readonly()
12640
12471
  });
12641
12472
  var TrackSchema = z.object({
12642
12473
  trackId: z.string(),
12643
12474
  deviceId: z.number(),
12644
12475
  className: z.string(),
12645
- label: z.string().optional(),
12476
+ ...TieredLabelFields,
12646
12477
  producingDeviceName: z.string().optional(),
12647
12478
  /** Track provenance. Absent ⇒ `pipeline` (legacy rows). */
12648
12479
  source: TrackSourceSchema.optional(),
@@ -12681,7 +12512,8 @@ var TrackSchema = z.object({
12681
12512
  * Populated from the persisted envelope columns on historical reads;
12682
12513
  * absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
12683
12514
  envelope: TrackEnvelopeSchema.optional(),
12684
- ...TrackFlagFields
12515
+ ...TrackFlagFields,
12516
+ ...TrackRetrainFields
12685
12517
  });
12686
12518
  var BaseEventFields = {
12687
12519
  id: z.string(),
@@ -12762,7 +12594,7 @@ var ObjectEventSchema = z.object({
12762
12594
  /** Omitted in slim projection. */
12763
12595
  trackId: z.string().optional(),
12764
12596
  className: z.string(),
12765
- label: z.string().optional(),
12597
+ ...TieredLabelFields,
12766
12598
  /** Omitted in slim projection. */
12767
12599
  confidence: z.number().optional(),
12768
12600
  /** Heavy JSON — omitted in slim projection. */
@@ -12843,6 +12675,173 @@ var MediaFileSchema = z.object({
12843
12675
  * stored blob and a `?variant=thumb` rendering without fetching either.
12844
12676
  */
12845
12677
  var MediaFileInfoSchema = MediaFileSchema.omit({ base64: true });
12678
+ /**
12679
+ * The MACRO tier of an annotation — a CLOSED set.
12680
+ *
12681
+ * This is what the exported detector predicts, so a typo here is a new class
12682
+ * with one example in it. `label` and `subLabel` are open strings by contrast:
12683
+ * the whole point of the page is teaching the model things it does not know
12684
+ * yet, and constraining that vocabulary would make it useless.
12685
+ *
12686
+ * A macro class is NEVER a label. The provider refuses a write whose `label` or
12687
+ * `subLabel` is one of these values, in any casing, because once `person`
12688
+ * exists in both tiers "every person box" stops being answerable without
12689
+ * knowing every string anyone ever typed — and the damage is retroactive.
12690
+ */
12691
+ var RetrainMacroClassSchema = z.enum([
12692
+ "person",
12693
+ "vehicle",
12694
+ "animal",
12695
+ "package",
12696
+ "face",
12697
+ "plate"
12698
+ ]);
12699
+ /** A subject to learn, or a phantom to unlearn (taught by OMISSION). */
12700
+ var RetrainAnnotationKindSchema = z.enum(["subject", "model_error"]);
12701
+ /** Did a human draw this box, or did the assist propose it? */
12702
+ var RetrainAnnotationSourceSchema = z.enum(["operator", "assist"]);
12703
+ /** Normalised `[0,1]` rectangle against the FULL frame — the canonical form. */
12704
+ var RetrainBboxSchema = z.object({
12705
+ x: z.number(),
12706
+ y: z.number(),
12707
+ w: z.number(),
12708
+ h: z.number()
12709
+ });
12710
+ /**
12711
+ * One annotated subject.
12712
+ *
12713
+ * `bbox` is normalised against the full frame, ALWAYS. The per-model shapes
12714
+ * (letterboxed root / zone-cropped package / subject-cropped classifier) are
12715
+ * derived from it at export and never stored — storing them is how one feature
12716
+ * space ends up holding two crops of the same subject (D52).
12717
+ */
12718
+ var RetrainAnnotationSchema = z.object({
12719
+ id: z.string(),
12720
+ trackId: z.string(),
12721
+ deviceId: z.number(),
12722
+ /** The COPY in retrain storage — never the source track's media key. */
12723
+ mediaKey: z.string(),
12724
+ bbox: RetrainBboxSchema,
12725
+ macroClass: RetrainMacroClassSchema,
12726
+ label: z.string().optional(),
12727
+ subLabel: z.string().optional(),
12728
+ kind: RetrainAnnotationKindSchema,
12729
+ source: RetrainAnnotationSourceSchema,
12730
+ /** Which model proposed this box — or, on a `model_error`, drew the phantom. */
12731
+ assistModelId: z.string().optional(),
12732
+ assistScore: z.number().optional(),
12733
+ exportedInBatch: z.string().optional(),
12734
+ createdAt: z.number()
12735
+ });
12736
+ /** The write form — the server owns `id`, `createdAt` and the frame binding. */
12737
+ var RetrainAnnotationDraftSchema = RetrainAnnotationSchema.omit({
12738
+ id: true,
12739
+ trackId: true,
12740
+ deviceId: true,
12741
+ mediaKey: true,
12742
+ createdAt: true,
12743
+ exportedInBatch: true
12744
+ });
12745
+ /** A track sitting in `staging`, with everything the worklist needs to rank it. */
12746
+ var RetrainTrackSchema = z.object({
12747
+ trackId: z.string(),
12748
+ deviceId: z.number(),
12749
+ className: z.string(),
12750
+ label: z.string().optional(),
12751
+ firstSeen: z.number(),
12752
+ lastSeen: z.number(),
12753
+ /** How many frames the dataset already holds from this track. */
12754
+ frameCount: z.number().int(),
12755
+ /** How many subjects have been annotated on those frames. `0` with
12756
+ * `frameCount: 0` is exactly "staging, still to work". */
12757
+ annotationCount: z.number().int()
12758
+ });
12759
+ /** A frame the picker may offer — an index row, no blob was read to produce it. */
12760
+ var RetrainFrameCandidateSchema = z.object({
12761
+ mediaKey: z.string(),
12762
+ kind: MediaFileKindEnum,
12763
+ timestamp: z.number(),
12764
+ sizeBytes: z.number().int(),
12765
+ /** A copy of this original already exists — selecting it is free and cannot
12766
+ * fail, whatever became of the original. */
12767
+ copied: z.boolean()
12768
+ });
12769
+ /** A frame the dataset OWNS: bytes copied at selection time. */
12770
+ var RetrainFrameSchema = z.object({
12771
+ frameId: z.string(),
12772
+ deviceId: z.number(),
12773
+ trackId: z.string(),
12774
+ /** Provenance only. It may already point at nothing — that is expected. */
12775
+ sourceMediaKey: z.string(),
12776
+ sourceKind: MediaFileKindEnum,
12777
+ sizeBytes: z.number().int(),
12778
+ width: z.number().int(),
12779
+ height: z.number().int(),
12780
+ copiedAt: z.number()
12781
+ });
12782
+ /** Why a copy-on-select could not be honoured — named, never a silent skip. */
12783
+ var RetrainCopyRefusalSchema = z.enum([
12784
+ "source-missing",
12785
+ "unreadable-image",
12786
+ "write-failed"
12787
+ ]);
12788
+ var RetrainFrameSelectionSchema = z.object({
12789
+ copied: z.array(RetrainFrameSchema).readonly(),
12790
+ refused: z.array(z.object({
12791
+ sourceMediaKey: z.string(),
12792
+ reason: RetrainCopyRefusalSchema
12793
+ })).readonly()
12794
+ });
12795
+ var RetrainFrameListSchema = z.object({
12796
+ candidates: z.array(RetrainFrameCandidateSchema).readonly(),
12797
+ copies: z.array(RetrainFrameSchema).readonly(),
12798
+ /** What the page pre-selects — the native key frame when one survives. */
12799
+ autoPickMediaKey: z.string().optional()
12800
+ });
12801
+ /** What the operator asked the assist to look for. */
12802
+ var RetrainAssistSubjectSchema = z.discriminatedUnion("kind", [z.object({
12803
+ kind: z.literal("package"),
12804
+ zone: RetrainBboxSchema.optional()
12805
+ }), z.object({
12806
+ kind: z.literal("objects"),
12807
+ modelId: z.string(),
12808
+ minScore: z.number().optional()
12809
+ })]);
12810
+ /**
12811
+ * The assist's answer — a discriminated union, because "the model saw nothing"
12812
+ * and "this node cannot run that model" lead to different next moves and a
12813
+ * nullable result cannot tell them apart.
12814
+ */
12815
+ var RetrainAssistResultSchema = z.discriminatedUnion("kind", [z.object({
12816
+ kind: z.literal("proposed"),
12817
+ modelId: z.string(),
12818
+ stepId: z.string(),
12819
+ minScore: z.number(),
12820
+ /** Drafts, ready to edit. `source: 'assist'` until the operator touches one. */
12821
+ proposals: z.array(RetrainAnnotationDraftSchema).readonly(),
12822
+ /** Returned by the runner but removed by the threshold. */
12823
+ belowThreshold: z.number().int()
12824
+ }), z.object({
12825
+ kind: z.literal("refused"),
12826
+ /** `no-zone` is ours; the rest are the runner's own refusal vocabulary. */
12827
+ reason: z.string(),
12828
+ detail: z.string().optional()
12829
+ })]);
12830
+ /** The outcome of a lifecycle move owned by the retrain page. */
12831
+ var RetrainTransitionResultSchema = z.object({
12832
+ trackId: z.string(),
12833
+ /** Where the track ended up, whatever happened. */
12834
+ retrainStatus: RetrainStatusSchema,
12835
+ /** `false` ⇒ the move was refused or was a no-op; `reason` says which. */
12836
+ changed: z.boolean(),
12837
+ reason: z.enum([
12838
+ "unknown-track",
12839
+ "no-frames-copied",
12840
+ "not-staging",
12841
+ "not-trained",
12842
+ "unchanged"
12843
+ ]).optional()
12844
+ });
12846
12845
  var DEFAULT_EVENT_QUERY_LIMIT = 1e3;
12847
12846
  var MAX_EVENT_QUERY_LIMIT = 5e3;
12848
12847
  var DeviceEventQueryInput = z.object({
@@ -12897,13 +12896,14 @@ var KeyEventSchema = z.object({
12897
12896
  /** Track start time (firstSeen). */
12898
12897
  timestamp: z.number(),
12899
12898
  className: z.string(),
12900
- label: z.string().optional(),
12899
+ ...TieredLabelFields,
12901
12900
  importance: z.number(),
12902
12901
  /** Highest-confidence ObjectEvent id for the track (empty when none). */
12903
12902
  bestEventId: z.string(),
12904
12903
  /** Track lifetime in ms (lastSeen - firstSeen). */
12905
12904
  windowMs: z.number().optional(),
12906
- ...TrackFlagFields
12905
+ ...TrackFlagFields,
12906
+ ...TrackRetrainFields
12907
12907
  });
12908
12908
  var TrackedDetectionSchema = z.object({
12909
12909
  trackId: z.string(),
@@ -13265,11 +13265,29 @@ var pipelineAnalyticsCapability = {
13265
13265
  *
13266
13266
  * `auth: 'protected'` (the default), NOT `admin`: the viewer is an
13267
13267
  * authenticated non-admin surface and two of the three call sites are
13268
- * there. Revisit if a flag ever gains an effect that costs storage
13269
- * `deleteTracks` next door is admin for exactly that reason.
13268
+ * there. The note that used to sit here said to revisit this the day a flag
13269
+ * gained an effect that costs storage, and D81 is that day — `markForTrain`
13270
+ * now pins. It STAYS protected, and the reason is that the alternative
13271
+ * makes the feature pointless: marking a track is something you do while
13272
+ * looking at it, on the surface you were already looking at it on, and that
13273
+ * surface is the viewer. What the storage cost gets instead is a BOUND — a
13274
+ * per-device pin budget enforced in the body, refusing a new pin past the
13275
+ * limit while always allowing un-marking. `deleteTracks` next door is still
13276
+ * admin, because destroying evidence and preserving it are not symmetric.
13270
13277
  *
13271
- * Returns the RESOLVED state of both flags (absent `false`) so a caller
13272
- * can drive its toggle without a re-fetch. Rejects an unknown track.
13278
+ * `markForTrain` writes the retrain LIFECYCLE, not a boolean column: `true`
13279
+ * is `none staging`, `false` is `staging none`. A track already
13280
+ * `trained` refuses BOTH — its frames are copies inside the retrain dataset
13281
+ * and re-staging it from a generic toggle is how the same material gets
13282
+ * annotated twice under two ground truths. Returning a trained track to
13283
+ * staging is a deliberate action of the retrain page, which is also the only
13284
+ * thing that produces `trained` in the first place.
13285
+ *
13286
+ * Returns the RESOLVED state of both flags (absent → `false`) plus the
13287
+ * `retrainStatus` they were derived from, so a caller can drive its toggle
13288
+ * — and render a `trained` badge — without a re-fetch. Rejects an unknown
13289
+ * track, a new staging mark on a device already holding its full budget, and
13290
+ * any `markForTrain` write against a trained track.
13273
13291
  */
13274
13292
  setTrackFlags: method(z.object({
13275
13293
  /** Log/audit scope only — the trackId is globally unique on its own. */
@@ -13333,6 +13351,237 @@ var pipelineAnalyticsCapability = {
13333
13351
  kind: "query",
13334
13352
  auth: "admin"
13335
13353
  }),
13354
+ /**
13355
+ * The CHEAP QUESTION, asked before any media moves: how big is the dataset
13356
+ * the marked (`markForTrain`) tracks would produce?
13357
+ *
13358
+ * Answered from media INDEX rows only — key, kind, size, timestamp — so it
13359
+ * costs ~2 KB of reads per track and no blob reads at all. The measured harm
13360
+ * behind D56 was a bulk pass that read and base64'd every blob a track owned
13361
+ * before deciding anything, taking hub-main to 82 s busy out of 120; an
13362
+ * export is that same I/O shape, so it inherits the same discipline: know
13363
+ * the size, then decide.
13364
+ *
13365
+ * `truncated` reports that more marked tracks exist than one pass carries.
13366
+ * Empty `deviceIds` ⇒ every device that has marked tracks.
13367
+ */
13368
+ getTrainingExportSummary: method(z.object({ deviceIds: z.array(z.number()).optional() }), TrainingExportSummarySchema, {
13369
+ kind: "query",
13370
+ auth: "admin"
13371
+ }),
13372
+ /**
13373
+ * Where to download the dataset archive.
13374
+ *
13375
+ * The BYTES do not come back through this cap — they come from the returned
13376
+ * data-plane URL, which streams a tar built entry by entry. A multi-gigabyte
13377
+ * archive base64'd through a unary RPC envelope would be held whole in
13378
+ * memory twice on a hub this repo has already OOM'd once (D9/D18 are the
13379
+ * same lesson about frames). `getDownloadUrl` on `recordingExport` is the
13380
+ * precedent, and this follows it deliberately.
13381
+ *
13382
+ * The archive contains a `manifest.json` FIRST, then the stored media
13383
+ * VERBATIM under `tracks/<deviceId>/<trackId>/…`. No crop is derived and no
13384
+ * model is run: a training set's pixels must be the pixels the pipeline saw.
13385
+ */
13386
+ getTrainingExportUrl: method(z.object({ deviceIds: z.array(z.number()).optional() }), z.object({ url: z.string() }), {
13387
+ kind: "query",
13388
+ auth: "admin"
13389
+ }),
13390
+ /**
13391
+ * The staging worklist for one camera, or for every camera that has one.
13392
+ *
13393
+ * Fetched ON DEMAND, over the staging set only — the page never scans
13394
+ * history, because making the working set small is the entire purpose of
13395
+ * the mark. Each row carries how many frames the dataset already holds from
13396
+ * the track and how many subjects were annotated on them, so
13397
+ * `frameCount: 0` reads as "still to work" without a second call per track.
13398
+ *
13399
+ * `auth: 'admin'`, unlike the viewer-level mark itself: marking a track is
13400
+ * curation you do while looking at it, but building the training set the
13401
+ * fleet's models are fine-tuned on is not.
13402
+ */
13403
+ listRetrainStaging: method(z.object({
13404
+ /** Empty ⇒ every camera that has staging tracks. A LIST, not a single
13405
+ * `deviceId`, deliberately: `deviceId` would make this device-bound and
13406
+ * route it at one camera's owner, and "every camera" would stop being
13407
+ * expressible at all. */
13408
+ deviceIds: z.array(z.number()).optional(),
13409
+ limit: z.number().int().min(1).max(500).optional()
13410
+ }), z.array(RetrainTrackSchema).readonly(), {
13411
+ kind: "query",
13412
+ auth: "admin"
13413
+ }),
13414
+ /**
13415
+ * What a track can contribute, and what it already has.
13416
+ *
13417
+ * `candidates` are the track's whole, unannotated frames — index rows only,
13418
+ * so this is cheap. `copies` are the frames already inside the dataset, and
13419
+ * a candidate whose copy exists is marked `copied: true`: selecting it again
13420
+ * is free and CANNOT fail, whatever became of the original.
13421
+ *
13422
+ * A crop, a thumbnail and `fullFrameBoxed` are never candidates. The last
13423
+ * one matters most: it has the model's own rectangle burned into the pixels,
13424
+ * and a detector trained on it learns to find a green line.
13425
+ */
13426
+ listRetrainFrames: method(z.object({ trackId: z.string() }), RetrainFrameListSchema, {
13427
+ kind: "query",
13428
+ auth: "admin"
13429
+ }),
13430
+ /**
13431
+ * COPY-ON-SELECT — the write that makes `trained` safe to evict.
13432
+ *
13433
+ * Selecting a frame copies its bytes into retrain storage immediately: not
13434
+ * a reference, not a lease. Once the copy exists the dataset no longer
13435
+ * depends on the track's media, which is exactly what lets D81 hand a
13436
+ * `trained` track back to retention.
13437
+ *
13438
+ * The order inside is load-bearing and is pinned by a test: an EXISTING
13439
+ * copy is returned without touching the source, so an original that
13440
+ * evaporated blocks the selection of THAT ORIGINAL and never the copy
13441
+ * already taken. Every refusal comes back named — a dropped selection is
13442
+ * never silent, on the wire or in the log.
13443
+ */
13444
+ selectRetrainFrames: method(z.object({
13445
+ deviceId: z.number(),
13446
+ trackId: z.string(),
13447
+ mediaKeys: z.array(z.string()).min(1)
13448
+ }), RetrainFrameSelectionSchema, {
13449
+ kind: "mutation",
13450
+ auth: "admin"
13451
+ }),
13452
+ /** Un-select a frame: its annotations go first, then the copy and its blob.
13453
+ * Deliberately destructive and deliberately explicit — it is the only way
13454
+ * a frame leaves the dataset before export. */
13455
+ deselectRetrainFrame: method(z.object({
13456
+ deviceId: z.number(),
13457
+ trackId: z.string(),
13458
+ frameId: z.string()
13459
+ }), z.object({
13460
+ removed: z.boolean(),
13461
+ removedAnnotations: z.number().int()
13462
+ }), {
13463
+ kind: "mutation",
13464
+ auth: "admin"
13465
+ }),
13466
+ /**
13467
+ * The pixels of ONE copied frame, base64.
13468
+ *
13469
+ * Through the cap rather than a data plane because it is genuinely one
13470
+ * frame at a time, on demand, at human speed — the shape D9/D18 permit
13471
+ * (what they forbid is frames crossing a boundary at frame RATE). The
13472
+ * annotation canvas needs the image and its exact dimensions in the same
13473
+ * answer: a canvas that places a normalised box against a size it guessed
13474
+ * draws every box in the wrong place.
13475
+ */
13476
+ getRetrainFrameImage: method(z.object({ frameId: z.string() }), z.object({
13477
+ base64: z.string(),
13478
+ width: z.number().int(),
13479
+ height: z.number().int()
13480
+ }), {
13481
+ kind: "query",
13482
+ auth: "admin"
13483
+ }),
13484
+ /**
13485
+ * Ask the pipeline what it sees, as a PROPOSAL.
13486
+ *
13487
+ * Runs through `pipelineRunner.runStatelessStep` on the COPIED frame, and
13488
+ * every box comes back as a draft with `source: 'assist'` plus the model and
13489
+ * score that produced it. The operator confirms, edits, adds and deletes;
13490
+ * nothing is stored until `saveRetrainAnnotations`.
13491
+ *
13492
+ * For packages the request is `rfdetr-package` on the ZONE CROP at 0.35 —
13493
+ * never the whole frame, where a package detector at that threshold proposes
13494
+ * furniture. A package request with no zone is REFUSED rather than widened,
13495
+ * because the silent widening would look like a bad model for as long as
13496
+ * nobody checked which rectangle it ran on.
13497
+ */
13498
+ proposeRetrainAnnotations: method(z.object({
13499
+ deviceId: z.number(),
13500
+ trackId: z.string(),
13501
+ frameId: z.string(),
13502
+ subject: RetrainAssistSubjectSchema,
13503
+ /** Which node runs it. Absent ⇒ wherever an unowned call lands. */
13504
+ nodeId: z.string().optional()
13505
+ }), RetrainAssistResultSchema, {
13506
+ kind: "mutation",
13507
+ auth: "admin"
13508
+ }),
13509
+ /** Every annotation on a track, oldest first. */
13510
+ listRetrainAnnotations: method(z.object({ trackId: z.string() }), z.array(RetrainAnnotationSchema).readonly(), {
13511
+ kind: "query",
13512
+ auth: "admin"
13513
+ }),
13514
+ /**
13515
+ * Replace EVERY annotation on one frame with the supplied set.
13516
+ *
13517
+ * Whole-frame replacement, not per-box upsert: the unit of ground truth is
13518
+ * the frame, and "the operator deleted a box" must be the same durable
13519
+ * outcome as "the operator never drew it". A per-box patch would let a frame
13520
+ * keep a box the operator removed on a surface that only knew about the
13521
+ * boxes it sent.
13522
+ *
13523
+ * Refuses a macro class typed into `label` or `subLabel` — the tiers are
13524
+ * separate and the guard is at the WRITE, because a mixed taxonomy cannot
13525
+ * be un-mixed by reading it.
13526
+ */
13527
+ saveRetrainAnnotations: method(z.object({
13528
+ deviceId: z.number(),
13529
+ trackId: z.string(),
13530
+ frameId: z.string(),
13531
+ annotations: z.array(RetrainAnnotationDraftSchema)
13532
+ }), z.array(RetrainAnnotationSchema).readonly(), {
13533
+ kind: "mutation",
13534
+ auth: "admin"
13535
+ }),
13536
+ /**
13537
+ * Finish with a track: `staging → trained`. **The only writer of that
13538
+ * state** — D81 shipped the column with it deliberately unreachable.
13539
+ *
13540
+ * Refuses a track the dataset holds no copies from. `trained` un-pins the
13541
+ * track's media, so completing without a copy is a delete order for material
13542
+ * nothing ever extracted anything from; that refusal IS the safety argument
13543
+ * of D81, expressed as a precondition.
13544
+ */
13545
+ completeRetrainTrack: method(z.object({
13546
+ deviceId: z.number(),
13547
+ trackId: z.string()
13548
+ }), RetrainTransitionResultSchema, {
13549
+ kind: "mutation",
13550
+ auth: "admin"
13551
+ }),
13552
+ /**
13553
+ * The deliberate return: `trained → staging`, for the rare case.
13554
+ *
13555
+ * The generic `setTrackFlags` toggle refuses this in both directions by
13556
+ * design (D81) — re-staging from a checkbox is how the same material gets
13557
+ * annotated twice under two ground truths. Doing it here means the operator
13558
+ * is looking at the annotations that already exist while they decide, and
13559
+ * those annotations are LEFT ALONE: "put this back" must not be a
13560
+ * destructive act wearing a navigational name.
13561
+ */
13562
+ restageRetrainTrack: method(z.object({
13563
+ deviceId: z.number(),
13564
+ trackId: z.string()
13565
+ }), RetrainTransitionResultSchema, {
13566
+ kind: "mutation",
13567
+ auth: "admin"
13568
+ }),
13569
+ /**
13570
+ * Where to download the ANNOTATED dataset.
13571
+ *
13572
+ * The sibling of `getTrainingExportUrl` and deliberately not the same
13573
+ * archive: that one streams a marked track's stored media verbatim, this one
13574
+ * streams the retrain COPIES plus an `annotations.json` carrying, for every
13575
+ * subject, the canonical full-frame box AND the geometry derived for each
13576
+ * model shape (letterboxed root / zone-cropped package / subject-cropped
13577
+ * classifier). Derived at export, never stored — one box in, three shapes
13578
+ * out, so two crops of the same subject can never end up in one feature
13579
+ * space (D52).
13580
+ */
13581
+ getRetrainExportUrl: method(z.object({ deviceIds: z.array(z.number()).optional() }), z.object({ url: z.string() }), {
13582
+ kind: "query",
13583
+ auth: "admin"
13584
+ }),
13336
13585
  getEventMedia: method(z.object({
13337
13586
  eventId: z.string(),
13338
13587
  kind: MediaFileKindEnum.optional()
@@ -14159,6 +14408,22 @@ var DetailResultSchema = z.object({
14159
14408
  bbox: NativeCropBboxSchema.optional(),
14160
14409
  embedding: z.string().optional(),
14161
14410
  label: z.string().optional(),
14411
+ /**
14412
+ * The tier `label` occupies, copied VERBATIM from the producing step's
14413
+ * `StepDefinition.labelTier` (roadmap 4g). Present only when `label` is.
14414
+ *
14415
+ * It rides the wire rather than being resolved by the consumer because the
14416
+ * declaration lives with the step definition, which only the executing node
14417
+ * has: post-analysis holds no step registry, and re-deriving the tier from
14418
+ * `className` there would be exactly the inference this model exists to
14419
+ * forbid. A `label` that arrives WITHOUT this field is refused by the write
14420
+ * rule and logged (`label tier undeclared`) — an older runner therefore
14421
+ * stops enriching rather than guessing, which is why addon-pipeline is
14422
+ * deployed BEFORE addon-post-analysis.
14423
+ */
14424
+ labelTier: z.union([z.literal(1), z.literal(2)]).optional(),
14425
+ /** Model that produced `label` — carried into the tier's attribution. */
14426
+ labelModelId: z.string().optional(),
14162
14427
  alignedCropJpeg: z.string().optional(),
14163
14428
  /** Face short side (px) measured on the NATIVE crop surface. The `bbox`
14164
14429
  * above is detection-frame px (≈6× smaller on a 4K camera) — min-face-size
@@ -22097,6 +22362,216 @@ setOverlay: method(z.object({
22097
22362
  }] }
22098
22363
  };
22099
22364
  //#endregion
22365
+ //#region src/capabilities/osd-manager.cap.ts
22366
+ /**
22367
+ * `osd-manager` — the ORCHESTRATOR over the device-scope `osd` cap.
22368
+ *
22369
+ * The `osd` cap is the firmware contract: it probes a camera's overlay
22370
+ * SLOTS and writes literal text into one. It has no idea WHERE that text
22371
+ * comes from, and it must not — a driver that grew a "show the temperature
22372
+ * here" feature would grow it once per vendor.
22373
+ *
22374
+ * This cap owns the other half: a per-(camera, slot) BINDING that says
22375
+ * which value feeds the slot, how it is formatted, and under which
22376
+ * conditions it is shown at all. One addon renders every binding on every
22377
+ * camera, so a new source costs zero driver code.
22378
+ *
22379
+ * Three deliberate choices, each with a rejected alternative:
22380
+ *
22381
+ * 1. A source is `(capName, valuePath)` over the kernel's device
22382
+ * runtime-state mirror — NOT a closed enum of source kinds. Every
22383
+ * cap-keyed slice a device publishes is bindable the day the cap
22384
+ * ships. The rejected alternative (one enum member per source, with
22385
+ * a resolver branch each) is what makes "add the humidity too" a
22386
+ * code change.
22387
+ * 2. The display gate reuses `NcConditionsSchema` verbatim — the
22388
+ * notification centre's condition vocabulary — rather than a parallel
22389
+ * model. An operator who has learned one condition editor has learned
22390
+ * both.
22391
+ * 3. Because the renderer's facts are device STATE and not a detection
22392
+ * record, only a SUBSET of that vocabulary can be answered here.
22393
+ * `setSlotBinding` REJECTS the rest at write time (see
22394
+ * `getConditionSupport`). It does not accept-then-fail-closed: a
22395
+ * condition that can never be true renders a permanently blank
22396
+ * overlay, and a blank overlay looks exactly like a broken camera.
22397
+ */
22398
+ /** Where a slot's value comes from. */
22399
+ var OsdSourceSchema = z.discriminatedUnion("kind", [
22400
+ z.object({
22401
+ kind: z.literal("static"),
22402
+ text: z.string().max(64)
22403
+ }),
22404
+ z.object({
22405
+ kind: z.literal("clock"),
22406
+ /** Token pattern: `YYYY MM DD HH mm ss`. Everything else is literal. */
22407
+ pattern: z.string().min(1).max(32).default("HH:mm"),
22408
+ /** IANA zone. Omitted = the server's zone. */
22409
+ timezone: z.string().min(1).max(64).optional()
22410
+ }),
22411
+ z.object({
22412
+ kind: z.literal("device-state"),
22413
+ deviceId: z.number().int().optional(),
22414
+ capName: z.string().min(1).max(64),
22415
+ /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22416
+ valuePath: z.string().min(1).max(64)
22417
+ })
22418
+ ]);
22419
+ var OsdSlotBindingSchema = z.object({
22420
+ /** Off = the manager stops driving this slot. It does NOT clear it. */
22421
+ enabled: z.boolean().default(true),
22422
+ source: OsdSourceSchema,
22423
+ /** `${value}` and `${unit}` are substituted; every occurrence. */
22424
+ template: z.string().max(96).default("${value}"),
22425
+ /** Truncate with an ellipsis past this length. Absent = no limit. */
22426
+ maxCharacters: z.number().int().min(4).max(64).optional(),
22427
+ /**
22428
+ * Decimal places for a numeric value. `0` yields an integer — the
22429
+ * documented workaround for firmwares that reject `.` in overlay text.
22430
+ */
22431
+ maxDecimals: z.number().int().min(0).max(4).default(1),
22432
+ /** Appended via `${unit}`. The state mirror does not carry units. */
22433
+ unitLabel: z.string().max(8).optional(),
22434
+ /** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
22435
+ valueMap: z.record(z.string(), z.string()).optional(),
22436
+ /** Time windows in which the slot is shown. Absent = always. */
22437
+ schedule: NcScheduleSchema.optional(),
22438
+ /**
22439
+ * Display gate, in the notification centre's condition vocabulary.
22440
+ * Only the keys reported by `getConditionSupport` are accepted.
22441
+ */
22442
+ conditions: NcConditionsSchema.optional(),
22443
+ /** Rendered when the gate is closed or the value unreadable. Empty = hide. */
22444
+ fallbackText: z.string().max(64).default("")
22445
+ });
22446
+ /** One camera slot, as the operator sees it: firmware truth + our binding. */
22447
+ var OsdSlotViewSchema = z.object({
22448
+ slotId: z.string(),
22449
+ kind: OsdOverlayKindEnum,
22450
+ /** Firmware refuses text edits (a timestamp, the channel name). */
22451
+ readOnly: z.boolean(),
22452
+ cameraEnabled: z.boolean(),
22453
+ cameraText: z.string().optional(),
22454
+ binding: OsdSlotBindingSchema.nullable()
22455
+ });
22456
+ /**
22457
+ * What happened to one slot on one render pass. `unchanged` exists so the
22458
+ * operator can tell "we are driving this and the value is steady" from
22459
+ * "we never got there" — and so the loop can prove it is not rewriting
22460
+ * identical text to the camera every tick.
22461
+ */
22462
+ var OsdRenderOutcomeEnum = z.enum([
22463
+ "written",
22464
+ "unchanged",
22465
+ "gated",
22466
+ "unreadable",
22467
+ "disabled",
22468
+ "unbound",
22469
+ "failed"
22470
+ ]);
22471
+ var OsdRenderResultSchema = z.object({
22472
+ slotId: z.string(),
22473
+ outcome: OsdRenderOutcomeEnum,
22474
+ /** The text the slot should carry. Empty = the slot is switched off. */
22475
+ text: z.string(),
22476
+ /** Why, whenever the outcome is not a plain write. Never silent. */
22477
+ reason: z.string().optional()
22478
+ });
22479
+ var OsdSourceValueTypeEnum = z.enum([
22480
+ "number",
22481
+ "boolean",
22482
+ "string",
22483
+ "enum"
22484
+ ]);
22485
+ /**
22486
+ * One bindable value, derived from a cap's `runtimeState` schema — never
22487
+ * hand-listed. The editor renders from this, so a cap that ships a new
22488
+ * state field becomes bindable with no UI change.
22489
+ */
22490
+ var OsdSourceOptionSchema = z.object({
22491
+ deviceId: z.number().int(),
22492
+ deviceName: z.string(),
22493
+ capName: z.string(),
22494
+ valuePath: z.string(),
22495
+ label: z.string(),
22496
+ valueType: OsdSourceValueTypeEnum,
22497
+ /** Present for `enum`; the editor offers these as `valueMap` keys. */
22498
+ enumValues: z.array(z.string()).readonly().optional()
22499
+ });
22500
+ var osdManagerCapability = {
22501
+ name: "osd-manager",
22502
+ scope: "system",
22503
+ mode: "singleton",
22504
+ methods: {
22505
+ /**
22506
+ * The camera's slots, each with its binding. `supported: false` when
22507
+ * the camera publishes no `osd` cap — the page then says so instead
22508
+ * of rendering an empty list that reads as "no overlays configured".
22509
+ */
22510
+ getDeviceOsd: method(z.object({ deviceId: z.number().int() }), z.object({
22511
+ supported: z.boolean(),
22512
+ slots: z.array(OsdSlotViewSchema)
22513
+ }), { auth: "admin" }),
22514
+ /**
22515
+ * Every value bindable on this camera: its own state leaves first,
22516
+ * then every other device's. Derived from the cap definitions, so it
22517
+ * cannot drift from what the resolver can actually read.
22518
+ */
22519
+ getSourceCatalog: method(z.object({ deviceId: z.number().int() }), z.object({ sources: z.array(OsdSourceOptionSchema) }), { auth: "admin" }),
22520
+ /**
22521
+ * The condition ids this gate can answer, alongside the FULL notification
22522
+ * condition catalog. Both, in one call, on purpose: an editor that showed
22523
+ * the catalog without the supported set would offer conditions that
22524
+ * `setSlotBinding` then rejects.
22525
+ */
22526
+ getConditionSupport: method(z.object({}), z.object({
22527
+ supported: z.array(z.string()),
22528
+ catalog: z.array(NcConditionDescriptorSchema)
22529
+ }), { auth: "admin" }),
22530
+ /**
22531
+ * Persist a binding and render it immediately, returning the slot as
22532
+ * it now stands. Throws when the binding names an unsupported
22533
+ * condition, an unknown cap, or a value path that cap does not have.
22534
+ */
22535
+ setSlotBinding: method(z.object({
22536
+ deviceId: z.number().int(),
22537
+ slotId: z.string().min(1),
22538
+ binding: OsdSlotBindingSchema
22539
+ }), z.object({
22540
+ slot: OsdSlotViewSchema,
22541
+ render: OsdRenderResultSchema
22542
+ }), {
22543
+ kind: "mutation",
22544
+ auth: "admin"
22545
+ }),
22546
+ /** Forget the binding. The slot keeps whatever text it last carried. */
22547
+ clearSlotBinding: method(z.object({
22548
+ deviceId: z.number().int(),
22549
+ slotId: z.string().min(1)
22550
+ }), z.object({ success: z.literal(true) }), {
22551
+ kind: "mutation",
22552
+ auth: "admin"
22553
+ }),
22554
+ /**
22555
+ * Render without writing. `binding` overrides the stored one so an
22556
+ * editor can preview an unsaved change. Mutation kind only to carry
22557
+ * the binding object safely; no side effects.
22558
+ */
22559
+ previewSlot: method(z.object({
22560
+ deviceId: z.number().int(),
22561
+ slotId: z.string().min(1),
22562
+ binding: OsdSlotBindingSchema.optional()
22563
+ }), OsdRenderResultSchema, {
22564
+ kind: "mutation",
22565
+ auth: "admin"
22566
+ }),
22567
+ /** Force a render pass over one camera now, instead of at the next tick. */
22568
+ renderDevice: method(z.object({ deviceId: z.number().int() }), z.object({ results: z.array(OsdRenderResultSchema) }), {
22569
+ kind: "mutation",
22570
+ auth: "admin"
22571
+ })
22572
+ }
22573
+ };
22574
+ //#endregion
22100
22575
  //#region src/capabilities/pet-feeder.cap.ts
22101
22576
  /**
22102
22577
  * PetKit pet-feeder cap. Models the control + telemetry surface of a
@@ -28184,6 +28659,7 @@ var CAPABILITY_NAMES = {
28184
28659
  numericSensor: "numeric-sensor",
28185
28660
  oauthIntegration: "oauth-integration",
28186
28661
  osd: "osd",
28662
+ osdManager: "osd-manager",
28187
28663
  petFeeder: "pet-feeder",
28188
28664
  pipelineAnalytics: "pipeline-analytics",
28189
28665
  pipelineExecutor: "pipeline-executor",
@@ -28615,6 +29091,10 @@ var CAPABILITY_ROUTER_KEYS = [
28615
29091
  key: "osd",
28616
29092
  name: "osd"
28617
29093
  },
29094
+ {
29095
+ key: "osdManager",
29096
+ name: "osd-manager"
29097
+ },
28618
29098
  {
28619
29099
  key: "petFeeder",
28620
29100
  name: "pet-feeder"
@@ -28928,6 +29408,7 @@ var ALL_CAPABILITY_DEFINITIONS = [
28928
29408
  numericSensorCapability,
28929
29409
  oauthIntegrationCapability,
28930
29410
  osdCapability,
29411
+ osdManagerCapability,
28931
29412
  petFeederCapability,
28932
29413
  pipelineAnalyticsCapability,
28933
29414
  pipelineExecutorCapability,
@@ -31846,6 +32327,48 @@ var METHOD_ACCESS_MAP = Object.freeze({
31846
32327
  addonId: null,
31847
32328
  access: "create"
31848
32329
  },
32330
+ "osdManager.clearSlotBinding": {
32331
+ capName: "osd-manager",
32332
+ capScope: "system",
32333
+ addonId: null,
32334
+ access: "delete"
32335
+ },
32336
+ "osdManager.getConditionSupport": {
32337
+ capName: "osd-manager",
32338
+ capScope: "system",
32339
+ addonId: null,
32340
+ access: "view"
32341
+ },
32342
+ "osdManager.getDeviceOsd": {
32343
+ capName: "osd-manager",
32344
+ capScope: "system",
32345
+ addonId: null,
32346
+ access: "view"
32347
+ },
32348
+ "osdManager.getSourceCatalog": {
32349
+ capName: "osd-manager",
32350
+ capScope: "system",
32351
+ addonId: null,
32352
+ access: "view"
32353
+ },
32354
+ "osdManager.previewSlot": {
32355
+ capName: "osd-manager",
32356
+ capScope: "system",
32357
+ addonId: null,
32358
+ access: "create"
32359
+ },
32360
+ "osdManager.renderDevice": {
32361
+ capName: "osd-manager",
32362
+ capScope: "system",
32363
+ addonId: null,
32364
+ access: "create"
32365
+ },
32366
+ "osdManager.setSlotBinding": {
32367
+ capName: "osd-manager",
32368
+ capScope: "system",
32369
+ addonId: null,
32370
+ access: "create"
32371
+ },
31849
32372
  "petFeeder.callPet": {
31850
32373
  capName: "pet-feeder",
31851
32374
  capScope: "device",
@@ -31918,6 +32441,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
31918
32441
  addonId: null,
31919
32442
  access: "delete"
31920
32443
  },
32444
+ "pipelineAnalytics.completeRetrainTrack": {
32445
+ capName: "pipeline-analytics",
32446
+ capScope: "device",
32447
+ addonId: null,
32448
+ access: "create"
32449
+ },
31921
32450
  "pipelineAnalytics.deleteDeviceEvents": {
31922
32451
  capName: "pipeline-analytics",
31923
32452
  capScope: "device",
@@ -31930,6 +32459,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
31930
32459
  addonId: null,
31931
32460
  access: "delete"
31932
32461
  },
32462
+ "pipelineAnalytics.deselectRetrainFrame": {
32463
+ capName: "pipeline-analytics",
32464
+ capScope: "device",
32465
+ addonId: null,
32466
+ access: "create"
32467
+ },
31933
32468
  "pipelineAnalytics.getActiveTracks": {
31934
32469
  capName: "pipeline-analytics",
31935
32470
  capScope: "device",
@@ -31990,6 +32525,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
31990
32525
  addonId: null,
31991
32526
  access: "view"
31992
32527
  },
32528
+ "pipelineAnalytics.getRetrainExportUrl": {
32529
+ capName: "pipeline-analytics",
32530
+ capScope: "device",
32531
+ addonId: null,
32532
+ access: "view"
32533
+ },
32534
+ "pipelineAnalytics.getRetrainFrameImage": {
32535
+ capName: "pipeline-analytics",
32536
+ capScope: "device",
32537
+ addonId: null,
32538
+ access: "view"
32539
+ },
31993
32540
  "pipelineAnalytics.getSensorEvents": {
31994
32541
  capName: "pipeline-analytics",
31995
32542
  capScope: "device",
@@ -32008,6 +32555,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
32008
32555
  addonId: null,
32009
32556
  access: "view"
32010
32557
  },
32558
+ "pipelineAnalytics.getTrainingExportSummary": {
32559
+ capName: "pipeline-analytics",
32560
+ capScope: "device",
32561
+ addonId: null,
32562
+ access: "view"
32563
+ },
32564
+ "pipelineAnalytics.getTrainingExportUrl": {
32565
+ capName: "pipeline-analytics",
32566
+ capScope: "device",
32567
+ addonId: null,
32568
+ access: "view"
32569
+ },
32011
32570
  "pipelineAnalytics.listEventKinds": {
32012
32571
  capName: "pipeline-analytics",
32013
32572
  capScope: "device",
@@ -32032,6 +32591,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
32032
32591
  addonId: null,
32033
32592
  access: "view"
32034
32593
  },
32594
+ "pipelineAnalytics.listRetrainAnnotations": {
32595
+ capName: "pipeline-analytics",
32596
+ capScope: "device",
32597
+ addonId: null,
32598
+ access: "view"
32599
+ },
32600
+ "pipelineAnalytics.listRetrainFrames": {
32601
+ capName: "pipeline-analytics",
32602
+ capScope: "device",
32603
+ addonId: null,
32604
+ access: "view"
32605
+ },
32606
+ "pipelineAnalytics.listRetrainStaging": {
32607
+ capName: "pipeline-analytics",
32608
+ capScope: "device",
32609
+ addonId: null,
32610
+ access: "view"
32611
+ },
32035
32612
  "pipelineAnalytics.listTrackMedia": {
32036
32613
  capName: "pipeline-analytics",
32037
32614
  capScope: "device",
@@ -32044,6 +32621,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
32044
32621
  addonId: null,
32045
32622
  access: "view"
32046
32623
  },
32624
+ "pipelineAnalytics.proposeRetrainAnnotations": {
32625
+ capName: "pipeline-analytics",
32626
+ capScope: "device",
32627
+ addonId: null,
32628
+ access: "create"
32629
+ },
32047
32630
  "pipelineAnalytics.pruneEvents": {
32048
32631
  capName: "pipeline-analytics",
32049
32632
  capScope: "device",
@@ -32074,12 +32657,30 @@ var METHOD_ACCESS_MAP = Object.freeze({
32074
32657
  addonId: null,
32075
32658
  access: "create"
32076
32659
  },
32660
+ "pipelineAnalytics.restageRetrainTrack": {
32661
+ capName: "pipeline-analytics",
32662
+ capScope: "device",
32663
+ addonId: null,
32664
+ access: "create"
32665
+ },
32666
+ "pipelineAnalytics.saveRetrainAnnotations": {
32667
+ capName: "pipeline-analytics",
32668
+ capScope: "device",
32669
+ addonId: null,
32670
+ access: "create"
32671
+ },
32077
32672
  "pipelineAnalytics.searchObjectEvents": {
32078
32673
  capName: "pipeline-analytics",
32079
32674
  capScope: "device",
32080
32675
  addonId: null,
32081
32676
  access: "view"
32082
32677
  },
32678
+ "pipelineAnalytics.selectRetrainFrames": {
32679
+ capName: "pipeline-analytics",
32680
+ capScope: "device",
32681
+ addonId: null,
32682
+ access: "create"
32683
+ },
32083
32684
  "pipelineAnalytics.setTrackFlags": {
32084
32685
  capName: "pipeline-analytics",
32085
32686
  capScope: "device",
@@ -33484,6 +34085,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
33484
34085
  addonId: null,
33485
34086
  access: "view"
33486
34087
  },
34088
+ "streamBroker.getDeviceAudioMute": {
34089
+ capName: "stream-broker",
34090
+ capScope: "system",
34091
+ addonId: null,
34092
+ access: "view"
34093
+ },
33487
34094
  "streamBroker.getPreBufferInfo": {
33488
34095
  capName: "stream-broker",
33489
34096
  capScope: "system",
@@ -33604,6 +34211,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
33604
34211
  addonId: null,
33605
34212
  access: "create"
33606
34213
  },
34214
+ "streamBroker.setDeviceAudioMute": {
34215
+ capName: "stream-broker",
34216
+ capScope: "system",
34217
+ addonId: null,
34218
+ access: "create"
34219
+ },
33607
34220
  "streamBroker.setPreBufferDuration": {
33608
34221
  capName: "stream-broker",
33609
34222
  capScope: "system",
@@ -34319,6 +34932,7 @@ var KNOWN_CAP_NAMES = [
34319
34932
  "notifier",
34320
34933
  "oauth-integration",
34321
34934
  "osd",
34935
+ "osd-manager",
34322
34936
  "pet-feeder",
34323
34937
  "pipeline-analytics",
34324
34938
  "pipeline-executor",
@@ -34466,6 +35080,7 @@ var SYSTEM_CAP_NAMES = [
34466
35080
  "notification-output",
34467
35081
  "notification-rules",
34468
35082
  "oauth-integration",
35083
+ "osd-manager",
34469
35084
  "pipeline-executor",
34470
35085
  "pipeline-orchestrator",
34471
35086
  "pipeline-runner",
@@ -34924,6 +35539,7 @@ function createSystemProxy(api) {
34924
35539
  deleteTarget: (input) => dispatch("notificationOutput", "deleteTarget", "mutation", input),
34925
35540
  setTargetEnabled: (input) => dispatch("notificationOutput", "setTargetEnabled", "mutation", input)
34926
35541
  },
35542
+ osdManager: { getConditionSupport: (input) => dispatch("osdManager", "getConditionSupport", "query", input) },
34927
35543
  pipelineExecutor: {
34928
35544
  getAvailableEngines: (input) => dispatch("pipelineExecutor", "getAvailableEngines", "query", input),
34929
35545
  getSelectedEngine: (input) => dispatch("pipelineExecutor", "getSelectedEngine", "query", input),
@@ -35465,6 +36081,68 @@ function prepareNotification(caps, n) {
35465
36081
  };
35466
36082
  }
35467
36083
  //#endregion
36084
+ //#region src/notification/schedule.ts
36085
+ var WEEKDAY_TO_DAY = {
36086
+ Sun: 0,
36087
+ Mon: 1,
36088
+ Tue: 2,
36089
+ Wed: 3,
36090
+ Thu: 4,
36091
+ Fri: 5,
36092
+ Sat: 6
36093
+ };
36094
+ /** Resolve (weekday, minute-of-day) of `atMs` in the schedule's timezone.
36095
+ * An invalid/unknown IANA name falls back to the host timezone. */
36096
+ function localDayMinute(atMs, timezone) {
36097
+ const d = new Date(atMs);
36098
+ if (timezone !== void 0) try {
36099
+ const parts = new Intl.DateTimeFormat("en-US", {
36100
+ timeZone: timezone,
36101
+ weekday: "short",
36102
+ hour: "numeric",
36103
+ minute: "numeric",
36104
+ hourCycle: "h23"
36105
+ }).formatToParts(d);
36106
+ let weekday;
36107
+ let hour;
36108
+ let minute;
36109
+ for (const p of parts) if (p.type === "weekday") weekday = p.value;
36110
+ else if (p.type === "hour") hour = Number(p.value);
36111
+ else if (p.type === "minute") minute = Number(p.value);
36112
+ const day = weekday !== void 0 ? WEEKDAY_TO_DAY[weekday] : void 0;
36113
+ if (day !== void 0 && hour !== void 0 && minute !== void 0) return {
36114
+ day,
36115
+ minute: hour * 60 + minute
36116
+ };
36117
+ } catch {}
36118
+ return {
36119
+ day: d.getDay(),
36120
+ minute: d.getHours() * 60 + d.getMinutes()
36121
+ };
36122
+ }
36123
+ /**
36124
+ * Is the schedule active at `atMs`? No schedule = always active. Windows
36125
+ * are OR'd; a window with `startMinute > endMinute` crosses midnight (it
36126
+ * starts on a listed day and spills into the next). `invert` flips the
36127
+ * result (active OUTSIDE the windows).
36128
+ */
36129
+ function isScheduleActive(schedule, atMs) {
36130
+ if (schedule === void 0) return true;
36131
+ const { day, minute } = localDayMinute(atMs, schedule.timezone);
36132
+ const prevDay = (day + 6) % 7;
36133
+ let inside = false;
36134
+ for (const w of schedule.windows) if (w.startMinute <= w.endMinute) {
36135
+ if (w.days.includes(day) && minute >= w.startMinute && minute < w.endMinute) {
36136
+ inside = true;
36137
+ break;
36138
+ }
36139
+ } else if (w.days.includes(day) && minute >= w.startMinute || w.days.includes(prevDay) && minute < w.endMinute) {
36140
+ inside = true;
36141
+ break;
36142
+ }
36143
+ return schedule.invert === true ? !inside : inside;
36144
+ }
36145
+ //#endregion
35468
36146
  //#region src/notification/timelapse-rule.ts
35469
36147
  /**
35470
36148
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
@@ -37318,4 +37996,4 @@ function enumerateInferenceDevices(hw) {
37318
37996
  return out;
37319
37997
  }
37320
37998
  //#endregion
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 };
37999
+ 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, Fmp4BoxSplitter, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelAttributionSchema, LabelDefinitionSchema, LabelTierSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, 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, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, 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, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, RetrainFrameCandidateSchema, RetrainFrameListSchema, RetrainFrameSchema, RetrainFrameSelectionSchema, RetrainMacroClassSchema, RetrainStatusSchema, RetrainTrackSchema, RetrainTransitionResultSchema, 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, TrainingExportDeviceTotalsSchema, TrainingExportSummarySchema, 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, isScheduleActive, 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, osdManagerCapability, 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 };