@camstack/addon-training 0.1.32 → 0.1.34

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 (25) hide show
  1. package/dist/{MotionZonesSettings-BuF39hJ1.mjs → MotionZonesSettings-DmGil-Sd.mjs} +3 -3
  2. package/dist/{PrivacyMaskSettings-DxR_4RPW.mjs → PrivacyMaskSettings--gz2eSGB.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-CWQq_WMo.mjs → SceneMonitorEditor-CslVp3Z2.mjs} +3 -3
  4. package/dist/_stub.js +13 -13
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-C1xkMgny.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-BeFr_KhE.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DnH0udRu.mjs +26 -0
  7. package/dist/addon-training.css +1 -1
  8. package/dist/{dist-DYyJbH-C.mjs → dist-8focs11m.mjs} +153 -14
  9. package/dist/{dist-BNDgFezD.js → dist-BH64IPHN.js} +153 -14
  10. package/dist/{grid-2x2-Cm6Xp3uQ.mjs → grid-2x2-qyJL_j_g.mjs} +1 -1
  11. package/dist/{hostInit-ov0IGtQc.mjs → hostInit-B8LEaHwH.mjs} +2 -2
  12. package/dist/index.js +1 -1
  13. package/dist/orchestrator/training.addon.js +11 -2
  14. package/dist/orchestrator/training.addon.mjs +11 -2
  15. package/dist/{player-overlays-CisFNRCY.mjs → player-overlays-CCJGDv3A.mjs} +1 -1
  16. package/dist/providers/modal/training-modal.addon.js +1 -1
  17. package/dist/providers/modal/training-modal.addon.mjs +1 -1
  18. package/dist/remoteEntry.js +1 -1
  19. package/dist/{responsive-50H8qy3U.mjs → responsive-BVIV-dmc.mjs} +1 -1
  20. package/dist/{scene-monitor-copy-BEqFU51P.mjs → scene-monitor-copy-Be4537Z1.mjs} +1 -1
  21. package/dist/{square-BpNW7PQH.mjs → square-GyEX7ul6.mjs} +1 -1
  22. package/dist/{trash-2-n-JZcYiP.mjs → trash-2-BpoLIu7c.mjs} +1 -1
  23. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-DrrIkvY9.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-CkcnEQXW.mjs} +1 -1
  24. package/package.json +1 -1
  25. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CaCR_8wR.mjs +0 -26
@@ -1,5 +1,5 @@
1
1
  import "node:crypto";
2
- //#region ../types/dist/event-category-DaIZi00R.mjs
2
+ //#region ../types/dist/event-category-C4hVnRo8.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -218,7 +218,17 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
218
218
  EventCategory["RecordingStopped"] = "recording.stopped";
219
219
  EventCategory["RecordingError"] = "recording.error";
220
220
  EventCategory["RecordingHealthDegraded"] = "recording.health.degraded";
221
+ /** Recording enabled but no segment finalized for the NC stall window. */
222
+ EventCategory["RecordingHealthStalled"] = "recording.health.stalled";
223
+ /** Recovery from {@link RecordingHealthStalled}. */
224
+ EventCategory["RecordingHealthOk"] = "recording.health.ok";
221
225
  EventCategory["RecordingStorageCritical"] = "recording.storage.critical";
226
+ /** Free space on a storage location crossed the warn bar. */
227
+ EventCategory["StorageLocationLow"] = "storage.location.low";
228
+ /** Free space at/under the critical bar, or capacity probe failed (`null`). */
229
+ EventCategory["StorageLocationCritical"] = "storage.location.critical";
230
+ /** Recovery from low/critical on a storage location. */
231
+ EventCategory["StorageLocationOk"] = "storage.location.ok";
222
232
  EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
223
233
  EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
224
234
  EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
@@ -5377,7 +5387,7 @@ var ZodIssueCode = {
5377
5387
  var ZodFirstPartyTypeKind;
5378
5388
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5379
5389
  //#endregion
5380
- //#region ../types/dist/sleep-DwAQ9sqX.mjs
5390
+ //#region ../types/dist/sleep-B_3F_YwS.mjs
5381
5391
  /**
5382
5392
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5383
5393
  * window to float samples (D455).
@@ -7978,6 +7988,21 @@ var ProfileRtspEntrySchema = object({
7978
7988
  codec: string().optional(),
7979
7989
  resolution: CamStreamResolutionSchema.optional()
7980
7990
  });
7991
+ /**
7992
+ * The model weight formats a catalog entry can ship. Schema-free on purpose:
7993
+ * `types/models.ts` builds Zod schemas from it, but a runner-closure consumer
7994
+ * (the model downloader in `@camstack/system`) needs only the list and must
7995
+ * reach it through `@camstack/types/addon` without building the cap schema
7996
+ * graph (D28).
7997
+ */
7998
+ var MODEL_FORMATS = [
7999
+ "onnx",
8000
+ "coreml",
8001
+ "openvino",
8002
+ "tflite",
8003
+ "pt",
8004
+ "gguf"
8005
+ ];
7981
8006
  object({
7982
8007
  field: string().min(1),
7983
8008
  on: literal("advance")
@@ -8451,7 +8476,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8451
8476
  return DeviceRole;
8452
8477
  }({});
8453
8478
  //#endregion
8454
- //#region ../types/dist/composition-Bzr7GwgP.mjs
8479
+ //#region ../types/dist/composition-C-WpVYTX.mjs
8455
8480
  /**
8456
8481
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8457
8482
  *
@@ -8503,7 +8528,7 @@ var BASE = `https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFM
8503
8528
  function portable(target) {
8504
8529
  return `${BASE}/jellyfin-ffmpeg_${FFMPEG_RELEASE}_portable_${target}-gpl.tar.xz`;
8505
8530
  }
8506
- portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
8531
+ portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64"), `${BASE}${FFMPEG_RELEASE}`;
8507
8532
  /**
8508
8533
  * THE table "which boolean of this device type counts as HIGH", and the
8509
8534
  * pure evaluator of its EDGE.
@@ -11713,14 +11738,6 @@ var MASK_SUPPLY_STEP_IDS = ["segmentation"];
11713
11738
  ...CROP_SUPPLY_STEP_IDS,
11714
11739
  ...MASK_SUPPLY_STEP_IDS
11715
11740
  ];
11716
- var MODEL_FORMATS = [
11717
- "onnx",
11718
- "coreml",
11719
- "openvino",
11720
- "tflite",
11721
- "pt",
11722
- "gguf"
11723
- ];
11724
11741
  /**
11725
11742
  * Multi-file format payload.
11726
11743
  *
@@ -13884,6 +13901,16 @@ var BrokerClientsSchema = object({
13884
13901
  /** Total encoded + raw-RTP callback subscriber count (sum of `encoded[].length`). */
13885
13902
  encodedSubscribers: number()
13886
13903
  });
13904
+ /**
13905
+ * How many people are watching one camera LIVE right now — see
13906
+ * `getLiveViewerCounts`. A camera with nobody watching is absent from the list
13907
+ * (so `viewers` is always at least 1): the listing carries the cameras that
13908
+ * have viewers, never a row of zeros.
13909
+ */
13910
+ var LiveViewerCountSchema = object({
13911
+ deviceId: number().int().nonnegative(),
13912
+ viewers: number().int().positive()
13913
+ });
13887
13914
  _enum([
13888
13915
  "reconnecting",
13889
13916
  "sleeping",
@@ -14244,7 +14271,7 @@ method(object({
14244
14271
  }), {
14245
14272
  kind: "mutation",
14246
14273
  auth: "admin"
14247
- }), method(object({ brokerId: string() }), BrokerClientsSchema), method(object({
14274
+ }), method(object({ brokerId: string() }), BrokerClientsSchema), method(_void(), array(LiveViewerCountSchema).readonly()), method(object({
14248
14275
  brokerId: string(),
14249
14276
  channel: _enum(["rtsp", "audio"]),
14250
14277
  handle: string()
@@ -20181,6 +20208,12 @@ var NcSystemEventKindSchema = _enum([
20181
20208
  "node-updating",
20182
20209
  "node-inference-unavailable",
20183
20210
  "detection-blind",
20211
+ "recording-stalled",
20212
+ "recording-healthy",
20213
+ "recording-degraded",
20214
+ "storage-location-low",
20215
+ "storage-location-critical",
20216
+ "storage-location-ok",
20184
20217
  "addon-crash-loop",
20185
20218
  "addon-update-available",
20186
20219
  "server-update-available",
@@ -27649,6 +27682,12 @@ var CameraStepOverridePatchSchema = object({
27649
27682
  settings: record(string(), unknown()).readonly().optional()
27650
27683
  });
27651
27684
  var CameraStepSettingsSchema = record(string(), record(string(), unknown()).readonly());
27685
+ /** The three root-detector choices a camera has (D507: at most one root). */
27686
+ var CameraDetectionSourceSchema = _enum([
27687
+ "pipeline",
27688
+ "onboard",
27689
+ "none"
27690
+ ]);
27652
27691
  var CameraPipelineSettingsSchema = object({
27653
27692
  stepToggles: record(string(), boolean()).optional(),
27654
27693
  stepSettings: CameraStepSettingsSchema.optional(),
@@ -28226,6 +28265,26 @@ method(object({
28226
28265
  }), object({ success: literal(true) }), {
28227
28266
  kind: "mutation",
28228
28267
  auth: "admin"
28268
+ }), method(object({ deviceId: number() }), object({
28269
+ source: CameraDetectionSourceSchema,
28270
+ explicit: boolean(),
28271
+ onboard: object({
28272
+ /** The camera has an onboard detector this system can read. */
28273
+ available: boolean(),
28274
+ /** What its detections carry — a camera with no box cannot be a root step. */
28275
+ geometry: _enum([
28276
+ "boxed",
28277
+ "while-streaming",
28278
+ "flag-only",
28279
+ "unknown"
28280
+ ])
28281
+ })
28282
+ })), method(object({
28283
+ deviceId: number(),
28284
+ source: CameraDetectionSourceSchema
28285
+ }), object({ success: literal(true) }), {
28286
+ kind: "mutation",
28287
+ auth: "admin"
28229
28288
  }), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
28230
28289
  deviceId: number(),
28231
28290
  agentNodeId: string(),
@@ -31557,6 +31616,17 @@ var BatteryStatusSchema = object({
31557
31616
  */
31558
31617
  lastContactAt: number().optional(),
31559
31618
  /**
31619
+ * Ms epoch of the last COMPLETE scheduled refresh — every fact the provider
31620
+ * holds for the device (level, charging, link, device info, state slices) and
31621
+ * its cached snapshot, read together. Absent = never since this slice was
31622
+ * born. Unlike `lastUpdated` (any write, even a push of one field) this is
31623
+ * the staleness an operator can trust: the provider owns the device fact and
31624
+ * so owns the window on its age (D224, D847). Not a clock in the
31625
+ * runtime-state-durability sense: it moves once per window and must survive
31626
+ * a restart, or every restart would owe the camera a wake.
31627
+ */
31628
+ lastFullRefreshAt: number().optional(),
31629
+ /**
31560
31630
  * True when the source is a BINARY low-battery indicator (HA
31561
31631
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
31562
31632
  * charge level — `percentage` is then a coarse stand-in (100 = normal,
@@ -34772,7 +34842,14 @@ var TopologyNodeSchema = object({
34772
34842
  * completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
34773
34843
  * for offline rows and when the hub cannot tell.
34774
34844
  */
34775
- meshTransport: _enum(["tls", "clear"]).optional()
34845
+ meshTransport: _enum(["tls", "clear"]).optional(),
34846
+ /**
34847
+ * Whether the hub holds this online AGENT's capability registration (its
34848
+ * `registerNode` manifest). `false` = online in the mesh but not ready: the
34849
+ * hub dropped the registration on a disconnect only it saw and the agent has
34850
+ * not re-sent it. Absent for the hub and offline rows.
34851
+ */
34852
+ capabilitiesRegistered: boolean().optional()
34776
34853
  });
34777
34854
  var CapUsageEdgeSchema = object({
34778
34855
  callerAddonId: string(),
@@ -45034,6 +45111,12 @@ Object.freeze({
45034
45111
  addonId: null,
45035
45112
  access: "view"
45036
45113
  },
45114
+ "pipelineOrchestrator.getCameraDetectionSource": {
45115
+ capName: "pipeline-orchestrator",
45116
+ capScope: "system",
45117
+ addonId: null,
45118
+ access: "view"
45119
+ },
45037
45120
  "pipelineOrchestrator.getCameraMetrics": {
45038
45121
  capName: "pipeline-orchestrator",
45039
45122
  capScope: "system",
@@ -45262,6 +45345,12 @@ Object.freeze({
45262
45345
  addonId: null,
45263
45346
  access: "create"
45264
45347
  },
45348
+ "pipelineOrchestrator.setCameraDetectionSource": {
45349
+ capName: "pipeline-orchestrator",
45350
+ capScope: "system",
45351
+ addonId: null,
45352
+ access: "create"
45353
+ },
45265
45354
  "pipelineOrchestrator.setCameraPipelineForAgent": {
45266
45355
  capName: "pipeline-orchestrator",
45267
45356
  capScope: "system",
@@ -46714,6 +46803,12 @@ Object.freeze({
46714
46803
  addonId: null,
46715
46804
  access: "view"
46716
46805
  },
46806
+ "streamBroker.getLiveViewerCounts": {
46807
+ capName: "stream-broker",
46808
+ capScope: "system",
46809
+ addonId: null,
46810
+ access: "view"
46811
+ },
46717
46812
  "streamBroker.getPreBufferInfo": {
46718
46813
  capName: "stream-broker",
46719
46814
  capScope: "system",
@@ -50859,6 +50954,11 @@ Object.freeze({
50859
50954
  form: "single",
50860
50955
  optional: false
50861
50956
  }],
50957
+ "pipelineOrchestrator.getCameraDetectionSource": [{
50958
+ name: "deviceId",
50959
+ form: "single",
50960
+ optional: false
50961
+ }],
50862
50962
  "pipelineOrchestrator.getCameraMetrics": [{
50863
50963
  name: "deviceId",
50864
50964
  form: "single",
@@ -50919,6 +51019,11 @@ Object.freeze({
50919
51019
  form: "single",
50920
51020
  optional: false
50921
51021
  }],
51022
+ "pipelineOrchestrator.setCameraDetectionSource": [{
51023
+ name: "deviceId",
51024
+ form: "single",
51025
+ optional: false
51026
+ }],
50922
51027
  "pipelineOrchestrator.setCameraPipelineForAgent": [{
50923
51028
  name: "deviceId",
50924
51029
  form: "single",
@@ -51948,6 +52053,9 @@ new Map(Object.entries({
51948
52053
  "stream-online": "device-events",
51949
52054
  "stream-offline": "device-events",
51950
52055
  "detection-blind": "device-events",
52056
+ "recording-stalled": "device-events",
52057
+ "recording-healthy": "device-events",
52058
+ "recording-degraded": "device-events",
51951
52059
  "node-online": "system",
51952
52060
  "node-offline": "system",
51953
52061
  "node-restarting": "system",
@@ -51961,6 +52069,9 @@ new Map(Object.entries({
51961
52069
  "wrapper-update-available": "system",
51962
52070
  "backup-completed": "system",
51963
52071
  "export-completed": "system",
52072
+ "storage-location-low": "system",
52073
+ "storage-location-critical": "system",
52074
+ "storage-location-ok": "system",
51964
52075
  "alarm-triggered": "alarm",
51965
52076
  "alarm-armed": "alarm",
51966
52077
  "alarm-disarmed": "alarm",
@@ -52022,6 +52133,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52022
52133
  label: "Detecting nothing",
52023
52134
  kinds: ["detection-blind"]
52024
52135
  },
52136
+ {
52137
+ id: "recording",
52138
+ family: "device-events",
52139
+ label: "Recording",
52140
+ kinds: [
52141
+ "recording-stalled",
52142
+ "recording-healthy",
52143
+ "recording-degraded"
52144
+ ]
52145
+ },
52025
52146
  {
52026
52147
  id: "nodes",
52027
52148
  family: "system",
@@ -52062,6 +52183,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52062
52183
  label: "Backups & exports",
52063
52184
  kinds: ["backup-completed", "export-completed"]
52064
52185
  },
52186
+ {
52187
+ id: "storage",
52188
+ family: "system",
52189
+ label: "Storage locations",
52190
+ kinds: [
52191
+ "storage-location-low",
52192
+ "storage-location-critical",
52193
+ "storage-location-ok"
52194
+ ]
52195
+ },
52065
52196
  {
52066
52197
  id: "alarm",
52067
52198
  family: "alarm",
@@ -52144,6 +52275,9 @@ var DEVICE_EVENTS = [
52144
52275
  "stream-online",
52145
52276
  "stream-offline",
52146
52277
  "detection-blind",
52278
+ "recording-stalled",
52279
+ "recording-healthy",
52280
+ "recording-degraded",
52147
52281
  ...ALARM
52148
52282
  ];
52149
52283
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -52311,6 +52445,11 @@ var STATE_SUMMARY_VARS = [
52311
52445
  [...RULE_TEXT],
52312
52446
  [...RULE_TEXT],
52313
52447
  [...RULE_TEXT],
52448
+ [...RULE_TEXT],
52449
+ [...RULE_TEXT],
52450
+ [...RULE_TEXT],
52451
+ [...RULE_TEXT],
52452
+ [...RULE_TEXT],
52314
52453
  ([...RULE_TEXT], [...UPDATES]),
52315
52454
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
52316
52455
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
@@ -32,7 +32,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
32
32
  }) : target, mod));
33
33
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
34
  require("node:crypto");
35
- //#region ../types/dist/event-category-DaIZi00R.mjs
35
+ //#region ../types/dist/event-category-C4hVnRo8.mjs
36
36
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
37
37
  EventCategory["SystemBoot"] = "system.boot";
38
38
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -251,7 +251,17 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
251
251
  EventCategory["RecordingStopped"] = "recording.stopped";
252
252
  EventCategory["RecordingError"] = "recording.error";
253
253
  EventCategory["RecordingHealthDegraded"] = "recording.health.degraded";
254
+ /** Recording enabled but no segment finalized for the NC stall window. */
255
+ EventCategory["RecordingHealthStalled"] = "recording.health.stalled";
256
+ /** Recovery from {@link RecordingHealthStalled}. */
257
+ EventCategory["RecordingHealthOk"] = "recording.health.ok";
254
258
  EventCategory["RecordingStorageCritical"] = "recording.storage.critical";
259
+ /** Free space on a storage location crossed the warn bar. */
260
+ EventCategory["StorageLocationLow"] = "storage.location.low";
261
+ /** Free space at/under the critical bar, or capacity probe failed (`null`). */
262
+ EventCategory["StorageLocationCritical"] = "storage.location.critical";
263
+ /** Recovery from low/critical on a storage location. */
264
+ EventCategory["StorageLocationOk"] = "storage.location.ok";
255
265
  EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
256
266
  EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
257
267
  EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
@@ -5410,7 +5420,7 @@ var ZodIssueCode = {
5410
5420
  var ZodFirstPartyTypeKind;
5411
5421
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5412
5422
  //#endregion
5413
- //#region ../types/dist/sleep-DwAQ9sqX.mjs
5423
+ //#region ../types/dist/sleep-B_3F_YwS.mjs
5414
5424
  /**
5415
5425
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5416
5426
  * window to float samples (D455).
@@ -8011,6 +8021,21 @@ var ProfileRtspEntrySchema = object({
8011
8021
  codec: string().optional(),
8012
8022
  resolution: CamStreamResolutionSchema.optional()
8013
8023
  });
8024
+ /**
8025
+ * The model weight formats a catalog entry can ship. Schema-free on purpose:
8026
+ * `types/models.ts` builds Zod schemas from it, but a runner-closure consumer
8027
+ * (the model downloader in `@camstack/system`) needs only the list and must
8028
+ * reach it through `@camstack/types/addon` without building the cap schema
8029
+ * graph (D28).
8030
+ */
8031
+ var MODEL_FORMATS = [
8032
+ "onnx",
8033
+ "coreml",
8034
+ "openvino",
8035
+ "tflite",
8036
+ "pt",
8037
+ "gguf"
8038
+ ];
8014
8039
  object({
8015
8040
  field: string().min(1),
8016
8041
  on: literal("advance")
@@ -8484,7 +8509,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8484
8509
  return DeviceRole;
8485
8510
  }({});
8486
8511
  //#endregion
8487
- //#region ../types/dist/composition-Bzr7GwgP.mjs
8512
+ //#region ../types/dist/composition-C-WpVYTX.mjs
8488
8513
  /**
8489
8514
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8490
8515
  *
@@ -8536,7 +8561,7 @@ var BASE = `https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFM
8536
8561
  function portable(target) {
8537
8562
  return `${BASE}/jellyfin-ffmpeg_${FFMPEG_RELEASE}_portable_${target}-gpl.tar.xz`;
8538
8563
  }
8539
- portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
8564
+ portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64"), `${BASE}${FFMPEG_RELEASE}`;
8540
8565
  /**
8541
8566
  * THE table "which boolean of this device type counts as HIGH", and the
8542
8567
  * pure evaluator of its EDGE.
@@ -11746,14 +11771,6 @@ var MASK_SUPPLY_STEP_IDS = ["segmentation"];
11746
11771
  ...CROP_SUPPLY_STEP_IDS,
11747
11772
  ...MASK_SUPPLY_STEP_IDS
11748
11773
  ];
11749
- var MODEL_FORMATS = [
11750
- "onnx",
11751
- "coreml",
11752
- "openvino",
11753
- "tflite",
11754
- "pt",
11755
- "gguf"
11756
- ];
11757
11774
  /**
11758
11775
  * Multi-file format payload.
11759
11776
  *
@@ -13917,6 +13934,16 @@ var BrokerClientsSchema = object({
13917
13934
  /** Total encoded + raw-RTP callback subscriber count (sum of `encoded[].length`). */
13918
13935
  encodedSubscribers: number()
13919
13936
  });
13937
+ /**
13938
+ * How many people are watching one camera LIVE right now — see
13939
+ * `getLiveViewerCounts`. A camera with nobody watching is absent from the list
13940
+ * (so `viewers` is always at least 1): the listing carries the cameras that
13941
+ * have viewers, never a row of zeros.
13942
+ */
13943
+ var LiveViewerCountSchema = object({
13944
+ deviceId: number().int().nonnegative(),
13945
+ viewers: number().int().positive()
13946
+ });
13920
13947
  _enum([
13921
13948
  "reconnecting",
13922
13949
  "sleeping",
@@ -14277,7 +14304,7 @@ method(object({
14277
14304
  }), {
14278
14305
  kind: "mutation",
14279
14306
  auth: "admin"
14280
- }), method(object({ brokerId: string() }), BrokerClientsSchema), method(object({
14307
+ }), method(object({ brokerId: string() }), BrokerClientsSchema), method(_void(), array(LiveViewerCountSchema).readonly()), method(object({
14281
14308
  brokerId: string(),
14282
14309
  channel: _enum(["rtsp", "audio"]),
14283
14310
  handle: string()
@@ -20214,6 +20241,12 @@ var NcSystemEventKindSchema = _enum([
20214
20241
  "node-updating",
20215
20242
  "node-inference-unavailable",
20216
20243
  "detection-blind",
20244
+ "recording-stalled",
20245
+ "recording-healthy",
20246
+ "recording-degraded",
20247
+ "storage-location-low",
20248
+ "storage-location-critical",
20249
+ "storage-location-ok",
20217
20250
  "addon-crash-loop",
20218
20251
  "addon-update-available",
20219
20252
  "server-update-available",
@@ -27682,6 +27715,12 @@ var CameraStepOverridePatchSchema = object({
27682
27715
  settings: record(string(), unknown()).readonly().optional()
27683
27716
  });
27684
27717
  var CameraStepSettingsSchema = record(string(), record(string(), unknown()).readonly());
27718
+ /** The three root-detector choices a camera has (D507: at most one root). */
27719
+ var CameraDetectionSourceSchema = _enum([
27720
+ "pipeline",
27721
+ "onboard",
27722
+ "none"
27723
+ ]);
27685
27724
  var CameraPipelineSettingsSchema = object({
27686
27725
  stepToggles: record(string(), boolean()).optional(),
27687
27726
  stepSettings: CameraStepSettingsSchema.optional(),
@@ -28259,6 +28298,26 @@ method(object({
28259
28298
  }), object({ success: literal(true) }), {
28260
28299
  kind: "mutation",
28261
28300
  auth: "admin"
28301
+ }), method(object({ deviceId: number() }), object({
28302
+ source: CameraDetectionSourceSchema,
28303
+ explicit: boolean(),
28304
+ onboard: object({
28305
+ /** The camera has an onboard detector this system can read. */
28306
+ available: boolean(),
28307
+ /** What its detections carry — a camera with no box cannot be a root step. */
28308
+ geometry: _enum([
28309
+ "boxed",
28310
+ "while-streaming",
28311
+ "flag-only",
28312
+ "unknown"
28313
+ ])
28314
+ })
28315
+ })), method(object({
28316
+ deviceId: number(),
28317
+ source: CameraDetectionSourceSchema
28318
+ }), object({ success: literal(true) }), {
28319
+ kind: "mutation",
28320
+ auth: "admin"
28262
28321
  }), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
28263
28322
  deviceId: number(),
28264
28323
  agentNodeId: string(),
@@ -31590,6 +31649,17 @@ var BatteryStatusSchema = object({
31590
31649
  */
31591
31650
  lastContactAt: number().optional(),
31592
31651
  /**
31652
+ * Ms epoch of the last COMPLETE scheduled refresh — every fact the provider
31653
+ * holds for the device (level, charging, link, device info, state slices) and
31654
+ * its cached snapshot, read together. Absent = never since this slice was
31655
+ * born. Unlike `lastUpdated` (any write, even a push of one field) this is
31656
+ * the staleness an operator can trust: the provider owns the device fact and
31657
+ * so owns the window on its age (D224, D847). Not a clock in the
31658
+ * runtime-state-durability sense: it moves once per window and must survive
31659
+ * a restart, or every restart would owe the camera a wake.
31660
+ */
31661
+ lastFullRefreshAt: number().optional(),
31662
+ /**
31593
31663
  * True when the source is a BINARY low-battery indicator (HA
31594
31664
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
31595
31665
  * charge level — `percentage` is then a coarse stand-in (100 = normal,
@@ -34805,7 +34875,14 @@ var TopologyNodeSchema = object({
34805
34875
  * completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
34806
34876
  * for offline rows and when the hub cannot tell.
34807
34877
  */
34808
- meshTransport: _enum(["tls", "clear"]).optional()
34878
+ meshTransport: _enum(["tls", "clear"]).optional(),
34879
+ /**
34880
+ * Whether the hub holds this online AGENT's capability registration (its
34881
+ * `registerNode` manifest). `false` = online in the mesh but not ready: the
34882
+ * hub dropped the registration on a disconnect only it saw and the agent has
34883
+ * not re-sent it. Absent for the hub and offline rows.
34884
+ */
34885
+ capabilitiesRegistered: boolean().optional()
34809
34886
  });
34810
34887
  var CapUsageEdgeSchema = object({
34811
34888
  callerAddonId: string(),
@@ -45067,6 +45144,12 @@ Object.freeze({
45067
45144
  addonId: null,
45068
45145
  access: "view"
45069
45146
  },
45147
+ "pipelineOrchestrator.getCameraDetectionSource": {
45148
+ capName: "pipeline-orchestrator",
45149
+ capScope: "system",
45150
+ addonId: null,
45151
+ access: "view"
45152
+ },
45070
45153
  "pipelineOrchestrator.getCameraMetrics": {
45071
45154
  capName: "pipeline-orchestrator",
45072
45155
  capScope: "system",
@@ -45295,6 +45378,12 @@ Object.freeze({
45295
45378
  addonId: null,
45296
45379
  access: "create"
45297
45380
  },
45381
+ "pipelineOrchestrator.setCameraDetectionSource": {
45382
+ capName: "pipeline-orchestrator",
45383
+ capScope: "system",
45384
+ addonId: null,
45385
+ access: "create"
45386
+ },
45298
45387
  "pipelineOrchestrator.setCameraPipelineForAgent": {
45299
45388
  capName: "pipeline-orchestrator",
45300
45389
  capScope: "system",
@@ -46747,6 +46836,12 @@ Object.freeze({
46747
46836
  addonId: null,
46748
46837
  access: "view"
46749
46838
  },
46839
+ "streamBroker.getLiveViewerCounts": {
46840
+ capName: "stream-broker",
46841
+ capScope: "system",
46842
+ addonId: null,
46843
+ access: "view"
46844
+ },
46750
46845
  "streamBroker.getPreBufferInfo": {
46751
46846
  capName: "stream-broker",
46752
46847
  capScope: "system",
@@ -50892,6 +50987,11 @@ Object.freeze({
50892
50987
  form: "single",
50893
50988
  optional: false
50894
50989
  }],
50990
+ "pipelineOrchestrator.getCameraDetectionSource": [{
50991
+ name: "deviceId",
50992
+ form: "single",
50993
+ optional: false
50994
+ }],
50895
50995
  "pipelineOrchestrator.getCameraMetrics": [{
50896
50996
  name: "deviceId",
50897
50997
  form: "single",
@@ -50952,6 +51052,11 @@ Object.freeze({
50952
51052
  form: "single",
50953
51053
  optional: false
50954
51054
  }],
51055
+ "pipelineOrchestrator.setCameraDetectionSource": [{
51056
+ name: "deviceId",
51057
+ form: "single",
51058
+ optional: false
51059
+ }],
50955
51060
  "pipelineOrchestrator.setCameraPipelineForAgent": [{
50956
51061
  name: "deviceId",
50957
51062
  form: "single",
@@ -51981,6 +52086,9 @@ new Map(Object.entries({
51981
52086
  "stream-online": "device-events",
51982
52087
  "stream-offline": "device-events",
51983
52088
  "detection-blind": "device-events",
52089
+ "recording-stalled": "device-events",
52090
+ "recording-healthy": "device-events",
52091
+ "recording-degraded": "device-events",
51984
52092
  "node-online": "system",
51985
52093
  "node-offline": "system",
51986
52094
  "node-restarting": "system",
@@ -51994,6 +52102,9 @@ new Map(Object.entries({
51994
52102
  "wrapper-update-available": "system",
51995
52103
  "backup-completed": "system",
51996
52104
  "export-completed": "system",
52105
+ "storage-location-low": "system",
52106
+ "storage-location-critical": "system",
52107
+ "storage-location-ok": "system",
51997
52108
  "alarm-triggered": "alarm",
51998
52109
  "alarm-armed": "alarm",
51999
52110
  "alarm-disarmed": "alarm",
@@ -52055,6 +52166,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52055
52166
  label: "Detecting nothing",
52056
52167
  kinds: ["detection-blind"]
52057
52168
  },
52169
+ {
52170
+ id: "recording",
52171
+ family: "device-events",
52172
+ label: "Recording",
52173
+ kinds: [
52174
+ "recording-stalled",
52175
+ "recording-healthy",
52176
+ "recording-degraded"
52177
+ ]
52178
+ },
52058
52179
  {
52059
52180
  id: "nodes",
52060
52181
  family: "system",
@@ -52095,6 +52216,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52095
52216
  label: "Backups & exports",
52096
52217
  kinds: ["backup-completed", "export-completed"]
52097
52218
  },
52219
+ {
52220
+ id: "storage",
52221
+ family: "system",
52222
+ label: "Storage locations",
52223
+ kinds: [
52224
+ "storage-location-low",
52225
+ "storage-location-critical",
52226
+ "storage-location-ok"
52227
+ ]
52228
+ },
52098
52229
  {
52099
52230
  id: "alarm",
52100
52231
  family: "alarm",
@@ -52177,6 +52308,9 @@ var DEVICE_EVENTS = [
52177
52308
  "stream-online",
52178
52309
  "stream-offline",
52179
52310
  "detection-blind",
52311
+ "recording-stalled",
52312
+ "recording-healthy",
52313
+ "recording-degraded",
52180
52314
  ...ALARM
52181
52315
  ];
52182
52316
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -52344,6 +52478,11 @@ var STATE_SUMMARY_VARS = [
52344
52478
  [...RULE_TEXT],
52345
52479
  [...RULE_TEXT],
52346
52480
  [...RULE_TEXT],
52481
+ [...RULE_TEXT],
52482
+ [...RULE_TEXT],
52483
+ [...RULE_TEXT],
52484
+ [...RULE_TEXT],
52485
+ [...RULE_TEXT],
52347
52486
  ([...RULE_TEXT], [...UPDATES]),
52348
52487
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
52349
52488
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
@@ -1,4 +1,4 @@
1
- import { b as e } from "./responsive-50H8qy3U.mjs";
1
+ import { b as e } from "./responsive-BVIV-dmc.mjs";
2
2
  var t = e("grid-2x2", [
3
3
  ["path", {
4
4
  d: "M12 3v18",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.352",
39
+ version: "1.2.358",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.281",
84
+ version: "1.2.282",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,