@camstack/addon-model-studio 1.1.250 → 1.1.252

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 (19) hide show
  1. package/dist/{MotionZonesSettings-DMyPH8E4.mjs → MotionZonesSettings-d7R9fNX4.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-CH3Urgiy.mjs → PrivacyMaskSettings-DrGSWT67.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-GV1CGdIE.mjs → SceneMonitorEditor-Dop7jels.mjs} +3 -3
  4. package/dist/_stub.js +14 -14
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BUsusX_V.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dw8uAk5I.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-tfHw-0Bq.mjs +26 -0
  7. package/dist/addon-model-studio.css +1 -1
  8. package/dist/{hostInit-3msX8S03.mjs → hostInit-D36hHmDz.mjs} +2 -2
  9. package/dist/model-studio.addon.js +153 -14
  10. package/dist/model-studio.addon.mjs +153 -14
  11. package/dist/{player-overlays-Dtr3bp2U.mjs → player-overlays-D5-vmA5J.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-DS5SbGGI.mjs → responsive-BzE5vG45.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-Bw7fLt-W.mjs → scene-monitor-copy-BihLE04_.mjs} +1 -1
  15. package/dist/{square-BMH94K96.mjs → square-D0cMa1nt.mjs} +1 -1
  16. package/dist/{trash-2-CMXPv4YN.mjs → trash-2-D0vctyi0.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-ByO2D7yP.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-Doe57L1Z.mjs} +1 -1
  18. package/package.json +1 -1
  19. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BYQ2rfWg.mjs +0 -26
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.351",
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.280",
84
+ version: "1.2.282",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -394,7 +394,7 @@ function buildScryptedRegistryDescriptor(entry) {
394
394
  };
395
395
  }
396
396
  //#endregion
397
- //#region ../types/dist/event-category-DaIZi00R.mjs
397
+ //#region ../types/dist/event-category-C4hVnRo8.mjs
398
398
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
399
399
  EventCategory["SystemBoot"] = "system.boot";
400
400
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -613,7 +613,17 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
613
613
  EventCategory["RecordingStopped"] = "recording.stopped";
614
614
  EventCategory["RecordingError"] = "recording.error";
615
615
  EventCategory["RecordingHealthDegraded"] = "recording.health.degraded";
616
+ /** Recording enabled but no segment finalized for the NC stall window. */
617
+ EventCategory["RecordingHealthStalled"] = "recording.health.stalled";
618
+ /** Recovery from {@link RecordingHealthStalled}. */
619
+ EventCategory["RecordingHealthOk"] = "recording.health.ok";
616
620
  EventCategory["RecordingStorageCritical"] = "recording.storage.critical";
621
+ /** Free space on a storage location crossed the warn bar. */
622
+ EventCategory["StorageLocationLow"] = "storage.location.low";
623
+ /** Free space at/under the critical bar, or capacity probe failed (`null`). */
624
+ EventCategory["StorageLocationCritical"] = "storage.location.critical";
625
+ /** Recovery from low/critical on a storage location. */
626
+ EventCategory["StorageLocationOk"] = "storage.location.ok";
617
627
  EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
618
628
  EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
619
629
  EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
@@ -5772,7 +5782,7 @@ var ZodIssueCode = {
5772
5782
  var ZodFirstPartyTypeKind;
5773
5783
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5774
5784
  //#endregion
5775
- //#region ../types/dist/sleep-DwAQ9sqX.mjs
5785
+ //#region ../types/dist/sleep-B_3F_YwS.mjs
5776
5786
  /**
5777
5787
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5778
5788
  * window to float samples (D455).
@@ -8374,6 +8384,21 @@ var ProfileRtspEntrySchema = object({
8374
8384
  resolution: CamStreamResolutionSchema.optional()
8375
8385
  });
8376
8386
  /**
8387
+ * The model weight formats a catalog entry can ship. Schema-free on purpose:
8388
+ * `types/models.ts` builds Zod schemas from it, but a runner-closure consumer
8389
+ * (the model downloader in `@camstack/system`) needs only the list and must
8390
+ * reach it through `@camstack/types/addon` without building the cap schema
8391
+ * graph (D28).
8392
+ */
8393
+ var MODEL_FORMATS = [
8394
+ "onnx",
8395
+ "coreml",
8396
+ "openvino",
8397
+ "tflite",
8398
+ "pt",
8399
+ "gguf"
8400
+ ];
8401
+ /**
8377
8402
  * Per-call node pinning for `ctx.api` capability calls.
8378
8403
  *
8379
8404
  * A capability call normally resolves to its DEFAULT provider — a `singleton`
@@ -8927,7 +8952,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8927
8952
  return DeviceRole;
8928
8953
  }({});
8929
8954
  //#endregion
8930
- //#region ../types/dist/composition-Bzr7GwgP.mjs
8955
+ //#region ../types/dist/composition-C-WpVYTX.mjs
8931
8956
  /**
8932
8957
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8933
8958
  *
@@ -8979,7 +9004,7 @@ var BASE = `https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFM
8979
9004
  function portable(target) {
8980
9005
  return `${BASE}/jellyfin-ffmpeg_${FFMPEG_RELEASE}_portable_${target}-gpl.tar.xz`;
8981
9006
  }
8982
- portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
9007
+ portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64"), `${BASE}${FFMPEG_RELEASE}`;
8983
9008
  /**
8984
9009
  * THE table "which boolean of this device type counts as HIGH", and the
8985
9010
  * pure evaluator of its EDGE.
@@ -12296,14 +12321,6 @@ function deriveRootSupplies(labels, classMap) {
12296
12321
  }
12297
12322
  return supplies;
12298
12323
  }
12299
- var MODEL_FORMATS = [
12300
- "onnx",
12301
- "coreml",
12302
- "openvino",
12303
- "tflite",
12304
- "pt",
12305
- "gguf"
12306
- ];
12307
12324
  /**
12308
12325
  * Multi-file format payload.
12309
12326
  *
@@ -14481,6 +14498,16 @@ var BrokerClientsSchema = object({
14481
14498
  /** Total encoded + raw-RTP callback subscriber count (sum of `encoded[].length`). */
14482
14499
  encodedSubscribers: number()
14483
14500
  });
14501
+ /**
14502
+ * How many people are watching one camera LIVE right now — see
14503
+ * `getLiveViewerCounts`. A camera with nobody watching is absent from the list
14504
+ * (so `viewers` is always at least 1): the listing carries the cameras that
14505
+ * have viewers, never a row of zeros.
14506
+ */
14507
+ var LiveViewerCountSchema = object({
14508
+ deviceId: number().int().nonnegative(),
14509
+ viewers: number().int().positive()
14510
+ });
14484
14511
  _enum([
14485
14512
  "reconnecting",
14486
14513
  "sleeping",
@@ -14841,7 +14868,7 @@ method(object({
14841
14868
  }), {
14842
14869
  kind: "mutation",
14843
14870
  auth: "admin"
14844
- }), method(object({ brokerId: string() }), BrokerClientsSchema), method(object({
14871
+ }), method(object({ brokerId: string() }), BrokerClientsSchema), method(_void(), array(LiveViewerCountSchema).readonly()), method(object({
14845
14872
  brokerId: string(),
14846
14873
  channel: _enum(["rtsp", "audio"]),
14847
14874
  handle: string()
@@ -20812,6 +20839,12 @@ var NcSystemEventKindSchema = _enum([
20812
20839
  "node-updating",
20813
20840
  "node-inference-unavailable",
20814
20841
  "detection-blind",
20842
+ "recording-stalled",
20843
+ "recording-healthy",
20844
+ "recording-degraded",
20845
+ "storage-location-low",
20846
+ "storage-location-critical",
20847
+ "storage-location-ok",
20815
20848
  "addon-crash-loop",
20816
20849
  "addon-update-available",
20817
20850
  "server-update-available",
@@ -28280,6 +28313,12 @@ var CameraStepOverridePatchSchema = object({
28280
28313
  settings: record(string(), unknown()).readonly().optional()
28281
28314
  });
28282
28315
  var CameraStepSettingsSchema = record(string(), record(string(), unknown()).readonly());
28316
+ /** The three root-detector choices a camera has (D507: at most one root). */
28317
+ var CameraDetectionSourceSchema = _enum([
28318
+ "pipeline",
28319
+ "onboard",
28320
+ "none"
28321
+ ]);
28283
28322
  var CameraPipelineSettingsSchema = object({
28284
28323
  stepToggles: record(string(), boolean()).optional(),
28285
28324
  stepSettings: CameraStepSettingsSchema.optional(),
@@ -28857,6 +28896,26 @@ method(object({
28857
28896
  }), object({ success: literal(true) }), {
28858
28897
  kind: "mutation",
28859
28898
  auth: "admin"
28899
+ }), method(object({ deviceId: number() }), object({
28900
+ source: CameraDetectionSourceSchema,
28901
+ explicit: boolean(),
28902
+ onboard: object({
28903
+ /** The camera has an onboard detector this system can read. */
28904
+ available: boolean(),
28905
+ /** What its detections carry — a camera with no box cannot be a root step. */
28906
+ geometry: _enum([
28907
+ "boxed",
28908
+ "while-streaming",
28909
+ "flag-only",
28910
+ "unknown"
28911
+ ])
28912
+ })
28913
+ })), method(object({
28914
+ deviceId: number(),
28915
+ source: CameraDetectionSourceSchema
28916
+ }), object({ success: literal(true) }), {
28917
+ kind: "mutation",
28918
+ auth: "admin"
28860
28919
  }), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
28861
28920
  deviceId: number(),
28862
28921
  agentNodeId: string(),
@@ -32188,6 +32247,17 @@ var BatteryStatusSchema = object({
32188
32247
  */
32189
32248
  lastContactAt: number().optional(),
32190
32249
  /**
32250
+ * Ms epoch of the last COMPLETE scheduled refresh — every fact the provider
32251
+ * holds for the device (level, charging, link, device info, state slices) and
32252
+ * its cached snapshot, read together. Absent = never since this slice was
32253
+ * born. Unlike `lastUpdated` (any write, even a push of one field) this is
32254
+ * the staleness an operator can trust: the provider owns the device fact and
32255
+ * so owns the window on its age (D224, D847). Not a clock in the
32256
+ * runtime-state-durability sense: it moves once per window and must survive
32257
+ * a restart, or every restart would owe the camera a wake.
32258
+ */
32259
+ lastFullRefreshAt: number().optional(),
32260
+ /**
32191
32261
  * True when the source is a BINARY low-battery indicator (HA
32192
32262
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
32193
32263
  * charge level — `percentage` is then a coarse stand-in (100 = normal,
@@ -35403,7 +35473,14 @@ var TopologyNodeSchema = object({
35403
35473
  * completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
35404
35474
  * for offline rows and when the hub cannot tell.
35405
35475
  */
35406
- meshTransport: _enum(["tls", "clear"]).optional()
35476
+ meshTransport: _enum(["tls", "clear"]).optional(),
35477
+ /**
35478
+ * Whether the hub holds this online AGENT's capability registration (its
35479
+ * `registerNode` manifest). `false` = online in the mesh but not ready: the
35480
+ * hub dropped the registration on a disconnect only it saw and the agent has
35481
+ * not re-sent it. Absent for the hub and offline rows.
35482
+ */
35483
+ capabilitiesRegistered: boolean().optional()
35407
35484
  });
35408
35485
  var CapUsageEdgeSchema = object({
35409
35486
  callerAddonId: string(),
@@ -45663,6 +45740,12 @@ Object.freeze({
45663
45740
  addonId: null,
45664
45741
  access: "view"
45665
45742
  },
45743
+ "pipelineOrchestrator.getCameraDetectionSource": {
45744
+ capName: "pipeline-orchestrator",
45745
+ capScope: "system",
45746
+ addonId: null,
45747
+ access: "view"
45748
+ },
45666
45749
  "pipelineOrchestrator.getCameraMetrics": {
45667
45750
  capName: "pipeline-orchestrator",
45668
45751
  capScope: "system",
@@ -45891,6 +45974,12 @@ Object.freeze({
45891
45974
  addonId: null,
45892
45975
  access: "create"
45893
45976
  },
45977
+ "pipelineOrchestrator.setCameraDetectionSource": {
45978
+ capName: "pipeline-orchestrator",
45979
+ capScope: "system",
45980
+ addonId: null,
45981
+ access: "create"
45982
+ },
45894
45983
  "pipelineOrchestrator.setCameraPipelineForAgent": {
45895
45984
  capName: "pipeline-orchestrator",
45896
45985
  capScope: "system",
@@ -47343,6 +47432,12 @@ Object.freeze({
47343
47432
  addonId: null,
47344
47433
  access: "view"
47345
47434
  },
47435
+ "streamBroker.getLiveViewerCounts": {
47436
+ capName: "stream-broker",
47437
+ capScope: "system",
47438
+ addonId: null,
47439
+ access: "view"
47440
+ },
47346
47441
  "streamBroker.getPreBufferInfo": {
47347
47442
  capName: "stream-broker",
47348
47443
  capScope: "system",
@@ -51488,6 +51583,11 @@ Object.freeze({
51488
51583
  form: "single",
51489
51584
  optional: false
51490
51585
  }],
51586
+ "pipelineOrchestrator.getCameraDetectionSource": [{
51587
+ name: "deviceId",
51588
+ form: "single",
51589
+ optional: false
51590
+ }],
51491
51591
  "pipelineOrchestrator.getCameraMetrics": [{
51492
51592
  name: "deviceId",
51493
51593
  form: "single",
@@ -51548,6 +51648,11 @@ Object.freeze({
51548
51648
  form: "single",
51549
51649
  optional: false
51550
51650
  }],
51651
+ "pipelineOrchestrator.setCameraDetectionSource": [{
51652
+ name: "deviceId",
51653
+ form: "single",
51654
+ optional: false
51655
+ }],
51551
51656
  "pipelineOrchestrator.setCameraPipelineForAgent": [{
51552
51657
  name: "deviceId",
51553
51658
  form: "single",
@@ -52577,6 +52682,9 @@ new Map(Object.entries({
52577
52682
  "stream-online": "device-events",
52578
52683
  "stream-offline": "device-events",
52579
52684
  "detection-blind": "device-events",
52685
+ "recording-stalled": "device-events",
52686
+ "recording-healthy": "device-events",
52687
+ "recording-degraded": "device-events",
52580
52688
  "node-online": "system",
52581
52689
  "node-offline": "system",
52582
52690
  "node-restarting": "system",
@@ -52590,6 +52698,9 @@ new Map(Object.entries({
52590
52698
  "wrapper-update-available": "system",
52591
52699
  "backup-completed": "system",
52592
52700
  "export-completed": "system",
52701
+ "storage-location-low": "system",
52702
+ "storage-location-critical": "system",
52703
+ "storage-location-ok": "system",
52593
52704
  "alarm-triggered": "alarm",
52594
52705
  "alarm-armed": "alarm",
52595
52706
  "alarm-disarmed": "alarm",
@@ -52651,6 +52762,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52651
52762
  label: "Detecting nothing",
52652
52763
  kinds: ["detection-blind"]
52653
52764
  },
52765
+ {
52766
+ id: "recording",
52767
+ family: "device-events",
52768
+ label: "Recording",
52769
+ kinds: [
52770
+ "recording-stalled",
52771
+ "recording-healthy",
52772
+ "recording-degraded"
52773
+ ]
52774
+ },
52654
52775
  {
52655
52776
  id: "nodes",
52656
52777
  family: "system",
@@ -52691,6 +52812,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52691
52812
  label: "Backups & exports",
52692
52813
  kinds: ["backup-completed", "export-completed"]
52693
52814
  },
52815
+ {
52816
+ id: "storage",
52817
+ family: "system",
52818
+ label: "Storage locations",
52819
+ kinds: [
52820
+ "storage-location-low",
52821
+ "storage-location-critical",
52822
+ "storage-location-ok"
52823
+ ]
52824
+ },
52694
52825
  {
52695
52826
  id: "alarm",
52696
52827
  family: "alarm",
@@ -52773,6 +52904,9 @@ var DEVICE_EVENTS = [
52773
52904
  "stream-online",
52774
52905
  "stream-offline",
52775
52906
  "detection-blind",
52907
+ "recording-stalled",
52908
+ "recording-healthy",
52909
+ "recording-degraded",
52776
52910
  ...ALARM
52777
52911
  ];
52778
52912
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -52940,6 +53074,11 @@ var STATE_SUMMARY_VARS = [
52940
53074
  [...RULE_TEXT],
52941
53075
  [...RULE_TEXT],
52942
53076
  [...RULE_TEXT],
53077
+ [...RULE_TEXT],
53078
+ [...RULE_TEXT],
53079
+ [...RULE_TEXT],
53080
+ [...RULE_TEXT],
53081
+ [...RULE_TEXT],
52943
53082
  ([...RULE_TEXT], [...UPDATES]),
52944
53083
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
52945
53084
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
@@ -368,7 +368,7 @@ function buildScryptedRegistryDescriptor(entry) {
368
368
  };
369
369
  }
370
370
  //#endregion
371
- //#region ../types/dist/event-category-DaIZi00R.mjs
371
+ //#region ../types/dist/event-category-C4hVnRo8.mjs
372
372
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
373
373
  EventCategory["SystemBoot"] = "system.boot";
374
374
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -587,7 +587,17 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
587
587
  EventCategory["RecordingStopped"] = "recording.stopped";
588
588
  EventCategory["RecordingError"] = "recording.error";
589
589
  EventCategory["RecordingHealthDegraded"] = "recording.health.degraded";
590
+ /** Recording enabled but no segment finalized for the NC stall window. */
591
+ EventCategory["RecordingHealthStalled"] = "recording.health.stalled";
592
+ /** Recovery from {@link RecordingHealthStalled}. */
593
+ EventCategory["RecordingHealthOk"] = "recording.health.ok";
590
594
  EventCategory["RecordingStorageCritical"] = "recording.storage.critical";
595
+ /** Free space on a storage location crossed the warn bar. */
596
+ EventCategory["StorageLocationLow"] = "storage.location.low";
597
+ /** Free space at/under the critical bar, or capacity probe failed (`null`). */
598
+ EventCategory["StorageLocationCritical"] = "storage.location.critical";
599
+ /** Recovery from low/critical on a storage location. */
600
+ EventCategory["StorageLocationOk"] = "storage.location.ok";
591
601
  EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
592
602
  EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
593
603
  EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
@@ -5746,7 +5756,7 @@ var ZodIssueCode = {
5746
5756
  var ZodFirstPartyTypeKind;
5747
5757
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5748
5758
  //#endregion
5749
- //#region ../types/dist/sleep-DwAQ9sqX.mjs
5759
+ //#region ../types/dist/sleep-B_3F_YwS.mjs
5750
5760
  /**
5751
5761
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5752
5762
  * window to float samples (D455).
@@ -8348,6 +8358,21 @@ var ProfileRtspEntrySchema = object({
8348
8358
  resolution: CamStreamResolutionSchema.optional()
8349
8359
  });
8350
8360
  /**
8361
+ * The model weight formats a catalog entry can ship. Schema-free on purpose:
8362
+ * `types/models.ts` builds Zod schemas from it, but a runner-closure consumer
8363
+ * (the model downloader in `@camstack/system`) needs only the list and must
8364
+ * reach it through `@camstack/types/addon` without building the cap schema
8365
+ * graph (D28).
8366
+ */
8367
+ var MODEL_FORMATS = [
8368
+ "onnx",
8369
+ "coreml",
8370
+ "openvino",
8371
+ "tflite",
8372
+ "pt",
8373
+ "gguf"
8374
+ ];
8375
+ /**
8351
8376
  * Per-call node pinning for `ctx.api` capability calls.
8352
8377
  *
8353
8378
  * A capability call normally resolves to its DEFAULT provider — a `singleton`
@@ -8901,7 +8926,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8901
8926
  return DeviceRole;
8902
8927
  }({});
8903
8928
  //#endregion
8904
- //#region ../types/dist/composition-Bzr7GwgP.mjs
8929
+ //#region ../types/dist/composition-C-WpVYTX.mjs
8905
8930
  /**
8906
8931
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8907
8932
  *
@@ -8953,7 +8978,7 @@ var BASE = `https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${FFM
8953
8978
  function portable(target) {
8954
8979
  return `${BASE}/jellyfin-ffmpeg_${FFMPEG_RELEASE}_portable_${target}-gpl.tar.xz`;
8955
8980
  }
8956
- portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
8981
+ portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64"), `${BASE}${FFMPEG_RELEASE}`;
8957
8982
  /**
8958
8983
  * THE table "which boolean of this device type counts as HIGH", and the
8959
8984
  * pure evaluator of its EDGE.
@@ -12270,14 +12295,6 @@ function deriveRootSupplies(labels, classMap) {
12270
12295
  }
12271
12296
  return supplies;
12272
12297
  }
12273
- var MODEL_FORMATS = [
12274
- "onnx",
12275
- "coreml",
12276
- "openvino",
12277
- "tflite",
12278
- "pt",
12279
- "gguf"
12280
- ];
12281
12298
  /**
12282
12299
  * Multi-file format payload.
12283
12300
  *
@@ -14455,6 +14472,16 @@ var BrokerClientsSchema = object({
14455
14472
  /** Total encoded + raw-RTP callback subscriber count (sum of `encoded[].length`). */
14456
14473
  encodedSubscribers: number()
14457
14474
  });
14475
+ /**
14476
+ * How many people are watching one camera LIVE right now — see
14477
+ * `getLiveViewerCounts`. A camera with nobody watching is absent from the list
14478
+ * (so `viewers` is always at least 1): the listing carries the cameras that
14479
+ * have viewers, never a row of zeros.
14480
+ */
14481
+ var LiveViewerCountSchema = object({
14482
+ deviceId: number().int().nonnegative(),
14483
+ viewers: number().int().positive()
14484
+ });
14458
14485
  _enum([
14459
14486
  "reconnecting",
14460
14487
  "sleeping",
@@ -14815,7 +14842,7 @@ method(object({
14815
14842
  }), {
14816
14843
  kind: "mutation",
14817
14844
  auth: "admin"
14818
- }), method(object({ brokerId: string() }), BrokerClientsSchema), method(object({
14845
+ }), method(object({ brokerId: string() }), BrokerClientsSchema), method(_void(), array(LiveViewerCountSchema).readonly()), method(object({
14819
14846
  brokerId: string(),
14820
14847
  channel: _enum(["rtsp", "audio"]),
14821
14848
  handle: string()
@@ -20786,6 +20813,12 @@ var NcSystemEventKindSchema = _enum([
20786
20813
  "node-updating",
20787
20814
  "node-inference-unavailable",
20788
20815
  "detection-blind",
20816
+ "recording-stalled",
20817
+ "recording-healthy",
20818
+ "recording-degraded",
20819
+ "storage-location-low",
20820
+ "storage-location-critical",
20821
+ "storage-location-ok",
20789
20822
  "addon-crash-loop",
20790
20823
  "addon-update-available",
20791
20824
  "server-update-available",
@@ -28254,6 +28287,12 @@ var CameraStepOverridePatchSchema = object({
28254
28287
  settings: record(string(), unknown()).readonly().optional()
28255
28288
  });
28256
28289
  var CameraStepSettingsSchema = record(string(), record(string(), unknown()).readonly());
28290
+ /** The three root-detector choices a camera has (D507: at most one root). */
28291
+ var CameraDetectionSourceSchema = _enum([
28292
+ "pipeline",
28293
+ "onboard",
28294
+ "none"
28295
+ ]);
28257
28296
  var CameraPipelineSettingsSchema = object({
28258
28297
  stepToggles: record(string(), boolean()).optional(),
28259
28298
  stepSettings: CameraStepSettingsSchema.optional(),
@@ -28831,6 +28870,26 @@ method(object({
28831
28870
  }), object({ success: literal(true) }), {
28832
28871
  kind: "mutation",
28833
28872
  auth: "admin"
28873
+ }), method(object({ deviceId: number() }), object({
28874
+ source: CameraDetectionSourceSchema,
28875
+ explicit: boolean(),
28876
+ onboard: object({
28877
+ /** The camera has an onboard detector this system can read. */
28878
+ available: boolean(),
28879
+ /** What its detections carry — a camera with no box cannot be a root step. */
28880
+ geometry: _enum([
28881
+ "boxed",
28882
+ "while-streaming",
28883
+ "flag-only",
28884
+ "unknown"
28885
+ ])
28886
+ })
28887
+ })), method(object({
28888
+ deviceId: number(),
28889
+ source: CameraDetectionSourceSchema
28890
+ }), object({ success: literal(true) }), {
28891
+ kind: "mutation",
28892
+ auth: "admin"
28834
28893
  }), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
28835
28894
  deviceId: number(),
28836
28895
  agentNodeId: string(),
@@ -32162,6 +32221,17 @@ var BatteryStatusSchema = object({
32162
32221
  */
32163
32222
  lastContactAt: number().optional(),
32164
32223
  /**
32224
+ * Ms epoch of the last COMPLETE scheduled refresh — every fact the provider
32225
+ * holds for the device (level, charging, link, device info, state slices) and
32226
+ * its cached snapshot, read together. Absent = never since this slice was
32227
+ * born. Unlike `lastUpdated` (any write, even a push of one field) this is
32228
+ * the staleness an operator can trust: the provider owns the device fact and
32229
+ * so owns the window on its age (D224, D847). Not a clock in the
32230
+ * runtime-state-durability sense: it moves once per window and must survive
32231
+ * a restart, or every restart would owe the camera a wake.
32232
+ */
32233
+ lastFullRefreshAt: number().optional(),
32234
+ /**
32165
32235
  * True when the source is a BINARY low-battery indicator (HA
32166
32236
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
32167
32237
  * charge level — `percentage` is then a coarse stand-in (100 = normal,
@@ -35377,7 +35447,14 @@ var TopologyNodeSchema = object({
35377
35447
  * completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
35378
35448
  * for offline rows and when the hub cannot tell.
35379
35449
  */
35380
- meshTransport: _enum(["tls", "clear"]).optional()
35450
+ meshTransport: _enum(["tls", "clear"]).optional(),
35451
+ /**
35452
+ * Whether the hub holds this online AGENT's capability registration (its
35453
+ * `registerNode` manifest). `false` = online in the mesh but not ready: the
35454
+ * hub dropped the registration on a disconnect only it saw and the agent has
35455
+ * not re-sent it. Absent for the hub and offline rows.
35456
+ */
35457
+ capabilitiesRegistered: boolean().optional()
35381
35458
  });
35382
35459
  var CapUsageEdgeSchema = object({
35383
35460
  callerAddonId: string(),
@@ -45637,6 +45714,12 @@ Object.freeze({
45637
45714
  addonId: null,
45638
45715
  access: "view"
45639
45716
  },
45717
+ "pipelineOrchestrator.getCameraDetectionSource": {
45718
+ capName: "pipeline-orchestrator",
45719
+ capScope: "system",
45720
+ addonId: null,
45721
+ access: "view"
45722
+ },
45640
45723
  "pipelineOrchestrator.getCameraMetrics": {
45641
45724
  capName: "pipeline-orchestrator",
45642
45725
  capScope: "system",
@@ -45865,6 +45948,12 @@ Object.freeze({
45865
45948
  addonId: null,
45866
45949
  access: "create"
45867
45950
  },
45951
+ "pipelineOrchestrator.setCameraDetectionSource": {
45952
+ capName: "pipeline-orchestrator",
45953
+ capScope: "system",
45954
+ addonId: null,
45955
+ access: "create"
45956
+ },
45868
45957
  "pipelineOrchestrator.setCameraPipelineForAgent": {
45869
45958
  capName: "pipeline-orchestrator",
45870
45959
  capScope: "system",
@@ -47317,6 +47406,12 @@ Object.freeze({
47317
47406
  addonId: null,
47318
47407
  access: "view"
47319
47408
  },
47409
+ "streamBroker.getLiveViewerCounts": {
47410
+ capName: "stream-broker",
47411
+ capScope: "system",
47412
+ addonId: null,
47413
+ access: "view"
47414
+ },
47320
47415
  "streamBroker.getPreBufferInfo": {
47321
47416
  capName: "stream-broker",
47322
47417
  capScope: "system",
@@ -51462,6 +51557,11 @@ Object.freeze({
51462
51557
  form: "single",
51463
51558
  optional: false
51464
51559
  }],
51560
+ "pipelineOrchestrator.getCameraDetectionSource": [{
51561
+ name: "deviceId",
51562
+ form: "single",
51563
+ optional: false
51564
+ }],
51465
51565
  "pipelineOrchestrator.getCameraMetrics": [{
51466
51566
  name: "deviceId",
51467
51567
  form: "single",
@@ -51522,6 +51622,11 @@ Object.freeze({
51522
51622
  form: "single",
51523
51623
  optional: false
51524
51624
  }],
51625
+ "pipelineOrchestrator.setCameraDetectionSource": [{
51626
+ name: "deviceId",
51627
+ form: "single",
51628
+ optional: false
51629
+ }],
51525
51630
  "pipelineOrchestrator.setCameraPipelineForAgent": [{
51526
51631
  name: "deviceId",
51527
51632
  form: "single",
@@ -52551,6 +52656,9 @@ new Map(Object.entries({
52551
52656
  "stream-online": "device-events",
52552
52657
  "stream-offline": "device-events",
52553
52658
  "detection-blind": "device-events",
52659
+ "recording-stalled": "device-events",
52660
+ "recording-healthy": "device-events",
52661
+ "recording-degraded": "device-events",
52554
52662
  "node-online": "system",
52555
52663
  "node-offline": "system",
52556
52664
  "node-restarting": "system",
@@ -52564,6 +52672,9 @@ new Map(Object.entries({
52564
52672
  "wrapper-update-available": "system",
52565
52673
  "backup-completed": "system",
52566
52674
  "export-completed": "system",
52675
+ "storage-location-low": "system",
52676
+ "storage-location-critical": "system",
52677
+ "storage-location-ok": "system",
52567
52678
  "alarm-triggered": "alarm",
52568
52679
  "alarm-armed": "alarm",
52569
52680
  "alarm-disarmed": "alarm",
@@ -52625,6 +52736,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52625
52736
  label: "Detecting nothing",
52626
52737
  kinds: ["detection-blind"]
52627
52738
  },
52739
+ {
52740
+ id: "recording",
52741
+ family: "device-events",
52742
+ label: "Recording",
52743
+ kinds: [
52744
+ "recording-stalled",
52745
+ "recording-healthy",
52746
+ "recording-degraded"
52747
+ ]
52748
+ },
52628
52749
  {
52629
52750
  id: "nodes",
52630
52751
  family: "system",
@@ -52665,6 +52786,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52665
52786
  label: "Backups & exports",
52666
52787
  kinds: ["backup-completed", "export-completed"]
52667
52788
  },
52789
+ {
52790
+ id: "storage",
52791
+ family: "system",
52792
+ label: "Storage locations",
52793
+ kinds: [
52794
+ "storage-location-low",
52795
+ "storage-location-critical",
52796
+ "storage-location-ok"
52797
+ ]
52798
+ },
52668
52799
  {
52669
52800
  id: "alarm",
52670
52801
  family: "alarm",
@@ -52747,6 +52878,9 @@ var DEVICE_EVENTS = [
52747
52878
  "stream-online",
52748
52879
  "stream-offline",
52749
52880
  "detection-blind",
52881
+ "recording-stalled",
52882
+ "recording-healthy",
52883
+ "recording-degraded",
52750
52884
  ...ALARM
52751
52885
  ];
52752
52886
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -52914,6 +53048,11 @@ var STATE_SUMMARY_VARS = [
52914
53048
  [...RULE_TEXT],
52915
53049
  [...RULE_TEXT],
52916
53050
  [...RULE_TEXT],
53051
+ [...RULE_TEXT],
53052
+ [...RULE_TEXT],
53053
+ [...RULE_TEXT],
53054
+ [...RULE_TEXT],
53055
+ [...RULE_TEXT],
52917
53056
  ([...RULE_TEXT], [...UPDATES]),
52918
53057
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
52919
53058
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
@@ -1,5 +1,5 @@
1
1
  import { b as e, g as t, l as n, u as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-CHL8loOl.mjs";
2
- import { b as i, y as a } from "./responsive-DS5SbGGI.mjs";
2
+ import { b as i, y as a } from "./responsive-BzE5vG45.mjs";
3
3
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
4
4
  var l = i("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",