@camstack/addon-pipeline 1.2.357 → 1.2.359

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 (33) hide show
  1. package/dist/audio-analyzer/index.js +3 -3
  2. package/dist/audio-analyzer/index.mjs +3 -3
  3. package/dist/{custom-model-catalog-IDV_JbaV.js → custom-model-catalog-BZFt7qC7.js} +2 -2
  4. package/dist/{custom-model-catalog-ZdOOtn-r.mjs → custom-model-catalog-Bdp__rWS.mjs} +2 -2
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-vf1gSnDD.js → dist-8okS4wxl.js} +52 -2
  8. package/dist/{dist-Dnh7fzvR.mjs → dist-TseSUtZJ.mjs} +52 -2
  9. package/dist/{model-catalogs-Kr9Qb33p.mjs → model-catalogs-BSCj4g0O.mjs} +1 -1
  10. package/dist/{model-catalogs-DXZcRGsq.js → model-catalogs-C0aOsH6-.js} +1 -1
  11. package/dist/motion-wasm/index.js +1 -1
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/{node-DCRoqtZO.js → node-BStoDcFQ.js} +1 -1
  14. package/dist/{node-B-ZL1ARj.mjs → node-I5Y2Dzmr.mjs} +1 -1
  15. package/dist/pipeline-runner/index.js +3 -3
  16. package/dist/pipeline-runner/index.mjs +3 -3
  17. package/dist/{process-memory-C1IfH9_K.js → process-memory-7YJfeXUK.js} +1 -1
  18. package/dist/{process-memory-DihQW-e5.mjs → process-memory-D4H6J3CG.mjs} +1 -1
  19. package/dist/recorder/index.js +127 -3
  20. package/dist/recorder/index.mjs +127 -3
  21. package/dist/{segment-demux-js-snYi0bGh.js → segment-demux-js-BwQRJ24B.js} +1 -1
  22. package/dist/{segment-demux-js-DgaXlND5.mjs → segment-demux-js-RgT0biID.mjs} +1 -1
  23. package/dist/stream-broker/_stub.js +1 -1
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-lVYtyYRc.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DqdW2pDb.mjs} +1 -1
  25. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-XWaPHrfA.mjs +26 -0
  26. package/dist/stream-broker/demux-worker-child.js +1 -1
  27. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  28. package/dist/stream-broker/{hostInit-DyZTqdF8.mjs → hostInit-xe-7xOfx.mjs} +1 -1
  29. package/dist/stream-broker/index.js +3 -3
  30. package/dist/stream-broker/index.mjs +3 -3
  31. package/dist/stream-broker/remoteEntry.js +1 -1
  32. package/package.json +1 -1
  33. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Wy0jRnQx.mjs +0 -26
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-vf1gSnDD.js");
7
- const require_model_catalogs = require("../model-catalogs-DXZcRGsq.js");
8
- const require_process_memory = require("../process-memory-C1IfH9_K.js");
6
+ const require_dist = require("../dist-8okS4wxl.js");
7
+ const require_model_catalogs = require("../model-catalogs-C0aOsH6-.js");
8
+ const require_process_memory = require("../process-memory-7YJfeXUK.js");
9
9
  let node_fs = require("node:fs");
10
10
  node_fs = require_chunk.__toESM(node_fs);
11
11
  let node_path = require("node:path");
@@ -1,7 +1,7 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { $ as audioAnalysisCapability, Hn as hydrateSchema, Kn as nodePin, L as PoolMemoryWatchdog, Ln as audioChunkBytesPerSample, Mn as errMsg, Pn as BaseAddon, Rt as mapAudioLabelToMacro, Vn as expandAudioChunkToF32le, cr as EventCategory, et as audioAnalyzerCapability, h as DEFAULT_AUDIO_ANALYZER_CONFIG, r as AUDIO_BACKEND_CHOICES, un as resolvePoolMemoryPolicy } from "../dist-Dnh7fzvR.mjs";
3
- import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-Kr9Qb33p.mjs";
4
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DihQW-e5.mjs";
2
+ import { $ as audioAnalysisCapability, Hn as hydrateSchema, Kn as nodePin, L as PoolMemoryWatchdog, Ln as audioChunkBytesPerSample, Mn as errMsg, Pn as BaseAddon, Rt as mapAudioLabelToMacro, Vn as expandAudioChunkToF32le, cr as EventCategory, et as audioAnalyzerCapability, h as DEFAULT_AUDIO_ANALYZER_CONFIG, r as AUDIO_BACKEND_CHOICES, un as resolvePoolMemoryPolicy } from "../dist-TseSUtZJ.mjs";
3
+ import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-BSCj4g0O.mjs";
4
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-D4H6J3CG.mjs";
5
5
  import * as fs from "node:fs";
6
6
  import * as path$1 from "node:path";
7
7
  import { ensureModel } from "@camstack/system/addon-utils";
@@ -1,5 +1,5 @@
1
- const require_dist = require("./dist-vf1gSnDD.js");
2
- const require_model_catalogs = require("./model-catalogs-DXZcRGsq.js");
1
+ const require_dist = require("./dist-8okS4wxl.js");
2
+ const require_model_catalogs = require("./model-catalogs-C0aOsH6-.js");
3
3
  const require_worker_protocol = require("./worker-protocol-C-G8qmye.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -1,5 +1,5 @@
1
- import { A as LABEL_SUPPLY_VOCABULARIES, Mt as inferModelProvider, b as DEVICE_BACKEND_TO_FORMAT, f as COCO_80_LABELS, hn as stepModelRunsOnFormat, i as AUDIO_MACRO_LABELS, p as COCO_TO_MACRO, tt as audioKindId } from "./dist-Dnh7fzvR.mjs";
2
- import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-Kr9Qb33p.mjs";
1
+ import { A as LABEL_SUPPLY_VOCABULARIES, Mt as inferModelProvider, b as DEVICE_BACKEND_TO_FORMAT, f as COCO_80_LABELS, hn as stepModelRunsOnFormat, i as AUDIO_MACRO_LABELS, p as COCO_TO_MACRO, tt as audioKindId } from "./dist-TseSUtZJ.mjs";
2
+ import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-BSCj4g0O.mjs";
3
3
  import { t as isWorkerReply } from "./worker-protocol-D_NzPcnh.mjs";
4
4
  import { randomUUID } from "node:crypto";
5
5
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-vf1gSnDD.js");
7
- const require_node = require("../node-DCRoqtZO.js");
8
- const require_custom_model_catalog = require("../custom-model-catalog-IDV_JbaV.js");
6
+ const require_dist = require("../dist-8okS4wxl.js");
7
+ const require_node = require("../node-BStoDcFQ.js");
8
+ const require_custom_model_catalog = require("../custom-model-catalog-BZFt7qC7.js");
9
9
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
10
- const require_process_memory = require("../process-memory-C1IfH9_K.js");
10
+ const require_process_memory = require("../process-memory-7YJfeXUK.js");
11
11
  let node_os = require("node:os");
12
12
  node_os = require_chunk.__toESM(node_os);
13
13
  let node_fs = require("node:fs");
@@ -1,9 +1,9 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { Gt as modelBindingKey, Hn as hydrateSchema, It as loadContributionCapability, Kn as nodePin, L as PoolMemoryWatchdog, Mn as errMsg$1, Pn as BaseAddon, Pt as linkedLabelStepId, Q as applyModelBoundSettings, Qt as pipelineExecutorCapability, Rn as createEvent, St as evaluateZoneRules, Y as YAMNET_TO_MACRO, Yn as sleep, Yt as pickClusterStepSettings, Zn as array, an as resolveClusterStepModelId, bn as supportedRuntimes$1, cr as EventCategory, ct as collectModelBoundKeys, d as CLUSTER_MODEL_SCOPED_STEPS, g as DEFAULT_CLUSTER_STEP_SETTINGS, hn as stepModelRunsOnFormat, jt as hfModelUrl, k as LABEL_SUPPLY_MACRO, lt as containingParentIndex, mn as runtimeDevices$1, n as APPLE_SA_TO_MACRO, or as string, pn as rootSuppliesOf, pt as defaultDeviceFor$1, qt as overlayClusterStepSettings, rr as object, sr as union, un as resolvePoolMemoryPolicy, vt as detectionPipelineCapability, xt as enumerateInferenceDevices } from "../dist-Dnh7fzvR.mjs";
3
- import { s as readProcessCost } from "../node-B-ZL1ARj.mjs";
4
- import { C as resolveModelDefaultConfidence, S as landmarkPrecisionVerdict, _ as ALL_STEPS, b as getStepDefinition, f as localFrameRegistry, g as ALL_PIPELINE_STEPS, l as resolveDefaultDetectionModel, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, v as getDefaultModelForFormat, x as resolveModelForFormat, y as getStep } from "../custom-model-catalog-ZdOOtn-r.mjs";
2
+ import { Gt as modelBindingKey, Hn as hydrateSchema, It as loadContributionCapability, Kn as nodePin, L as PoolMemoryWatchdog, Mn as errMsg$1, Pn as BaseAddon, Pt as linkedLabelStepId, Q as applyModelBoundSettings, Qt as pipelineExecutorCapability, Rn as createEvent, St as evaluateZoneRules, Y as YAMNET_TO_MACRO, Yn as sleep, Yt as pickClusterStepSettings, Zn as array, an as resolveClusterStepModelId, bn as supportedRuntimes$1, cr as EventCategory, ct as collectModelBoundKeys, d as CLUSTER_MODEL_SCOPED_STEPS, g as DEFAULT_CLUSTER_STEP_SETTINGS, hn as stepModelRunsOnFormat, jt as hfModelUrl, k as LABEL_SUPPLY_MACRO, lt as containingParentIndex, mn as runtimeDevices$1, n as APPLE_SA_TO_MACRO, or as string, pn as rootSuppliesOf, pt as defaultDeviceFor$1, qt as overlayClusterStepSettings, rr as object, sr as union, un as resolvePoolMemoryPolicy, vt as detectionPipelineCapability, xt as enumerateInferenceDevices } from "../dist-TseSUtZJ.mjs";
3
+ import { s as readProcessCost } from "../node-I5Y2Dzmr.mjs";
4
+ import { C as resolveModelDefaultConfidence, S as landmarkPrecisionVerdict, _ as ALL_STEPS, b as getStepDefinition, f as localFrameRegistry, g as ALL_PIPELINE_STEPS, l as resolveDefaultDetectionModel, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, v as getDefaultModelForFormat, x as resolveModelForFormat, y as getStep } from "../custom-model-catalog-Bdp__rWS.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DihQW-e5.mjs";
6
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-D4H6J3CG.mjs";
7
7
  import * as os$1 from "node:os";
8
8
  import * as fs from "node:fs";
9
9
  import * as path$1 from "node:path";
@@ -1,5 +1,5 @@
1
1
  let node_crypto = require("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-Tkp9dHXv.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).
@@ -23446,6 +23456,12 @@ var NcSystemEventKindSchema = _enum([
23446
23456
  "node-updating",
23447
23457
  "node-inference-unavailable",
23448
23458
  "detection-blind",
23459
+ "recording-stalled",
23460
+ "recording-healthy",
23461
+ "recording-degraded",
23462
+ "storage-location-low",
23463
+ "storage-location-critical",
23464
+ "storage-location-ok",
23449
23465
  "addon-crash-loop",
23450
23466
  "addon-update-available",
23451
23467
  "server-update-available",
@@ -56654,6 +56670,9 @@ new Map(Object.entries({
56654
56670
  "stream-online": "device-events",
56655
56671
  "stream-offline": "device-events",
56656
56672
  "detection-blind": "device-events",
56673
+ "recording-stalled": "device-events",
56674
+ "recording-healthy": "device-events",
56675
+ "recording-degraded": "device-events",
56657
56676
  "node-online": "system",
56658
56677
  "node-offline": "system",
56659
56678
  "node-restarting": "system",
@@ -56667,6 +56686,9 @@ new Map(Object.entries({
56667
56686
  "wrapper-update-available": "system",
56668
56687
  "backup-completed": "system",
56669
56688
  "export-completed": "system",
56689
+ "storage-location-low": "system",
56690
+ "storage-location-critical": "system",
56691
+ "storage-location-ok": "system",
56670
56692
  "alarm-triggered": "alarm",
56671
56693
  "alarm-armed": "alarm",
56672
56694
  "alarm-disarmed": "alarm",
@@ -56728,6 +56750,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
56728
56750
  label: "Detecting nothing",
56729
56751
  kinds: ["detection-blind"]
56730
56752
  },
56753
+ {
56754
+ id: "recording",
56755
+ family: "device-events",
56756
+ label: "Recording",
56757
+ kinds: [
56758
+ "recording-stalled",
56759
+ "recording-healthy",
56760
+ "recording-degraded"
56761
+ ]
56762
+ },
56731
56763
  {
56732
56764
  id: "nodes",
56733
56765
  family: "system",
@@ -56768,6 +56800,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
56768
56800
  label: "Backups & exports",
56769
56801
  kinds: ["backup-completed", "export-completed"]
56770
56802
  },
56803
+ {
56804
+ id: "storage",
56805
+ family: "system",
56806
+ label: "Storage locations",
56807
+ kinds: [
56808
+ "storage-location-low",
56809
+ "storage-location-critical",
56810
+ "storage-location-ok"
56811
+ ]
56812
+ },
56771
56813
  {
56772
56814
  id: "alarm",
56773
56815
  family: "alarm",
@@ -56850,6 +56892,9 @@ var DEVICE_EVENTS = [
56850
56892
  "stream-online",
56851
56893
  "stream-offline",
56852
56894
  "detection-blind",
56895
+ "recording-stalled",
56896
+ "recording-healthy",
56897
+ "recording-degraded",
56853
56898
  ...ALARM
56854
56899
  ];
56855
56900
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -57017,6 +57062,11 @@ var STATE_SUMMARY_VARS = [
57017
57062
  [...RULE_TEXT],
57018
57063
  [...RULE_TEXT],
57019
57064
  [...RULE_TEXT],
57065
+ [...RULE_TEXT],
57066
+ [...RULE_TEXT],
57067
+ [...RULE_TEXT],
57068
+ [...RULE_TEXT],
57069
+ [...RULE_TEXT],
57020
57070
  ([...RULE_TEXT], [...UPDATES]),
57021
57071
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
57022
57072
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "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-Tkp9dHXv.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).
@@ -23446,6 +23456,12 @@ var NcSystemEventKindSchema = _enum([
23446
23456
  "node-updating",
23447
23457
  "node-inference-unavailable",
23448
23458
  "detection-blind",
23459
+ "recording-stalled",
23460
+ "recording-healthy",
23461
+ "recording-degraded",
23462
+ "storage-location-low",
23463
+ "storage-location-critical",
23464
+ "storage-location-ok",
23449
23465
  "addon-crash-loop",
23450
23466
  "addon-update-available",
23451
23467
  "server-update-available",
@@ -56654,6 +56670,9 @@ new Map(Object.entries({
56654
56670
  "stream-online": "device-events",
56655
56671
  "stream-offline": "device-events",
56656
56672
  "detection-blind": "device-events",
56673
+ "recording-stalled": "device-events",
56674
+ "recording-healthy": "device-events",
56675
+ "recording-degraded": "device-events",
56657
56676
  "node-online": "system",
56658
56677
  "node-offline": "system",
56659
56678
  "node-restarting": "system",
@@ -56667,6 +56686,9 @@ new Map(Object.entries({
56667
56686
  "wrapper-update-available": "system",
56668
56687
  "backup-completed": "system",
56669
56688
  "export-completed": "system",
56689
+ "storage-location-low": "system",
56690
+ "storage-location-critical": "system",
56691
+ "storage-location-ok": "system",
56670
56692
  "alarm-triggered": "alarm",
56671
56693
  "alarm-armed": "alarm",
56672
56694
  "alarm-disarmed": "alarm",
@@ -56728,6 +56750,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
56728
56750
  label: "Detecting nothing",
56729
56751
  kinds: ["detection-blind"]
56730
56752
  },
56753
+ {
56754
+ id: "recording",
56755
+ family: "device-events",
56756
+ label: "Recording",
56757
+ kinds: [
56758
+ "recording-stalled",
56759
+ "recording-healthy",
56760
+ "recording-degraded"
56761
+ ]
56762
+ },
56731
56763
  {
56732
56764
  id: "nodes",
56733
56765
  family: "system",
@@ -56768,6 +56800,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
56768
56800
  label: "Backups & exports",
56769
56801
  kinds: ["backup-completed", "export-completed"]
56770
56802
  },
56803
+ {
56804
+ id: "storage",
56805
+ family: "system",
56806
+ label: "Storage locations",
56807
+ kinds: [
56808
+ "storage-location-low",
56809
+ "storage-location-critical",
56810
+ "storage-location-ok"
56811
+ ]
56812
+ },
56771
56813
  {
56772
56814
  id: "alarm",
56773
56815
  family: "alarm",
@@ -56850,6 +56892,9 @@ var DEVICE_EVENTS = [
56850
56892
  "stream-online",
56851
56893
  "stream-offline",
56852
56894
  "detection-blind",
56895
+ "recording-stalled",
56896
+ "recording-healthy",
56897
+ "recording-degraded",
56853
56898
  ...ALARM
56854
56899
  ];
56855
56900
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -57017,6 +57062,11 @@ var STATE_SUMMARY_VARS = [
57017
57062
  [...RULE_TEXT],
57018
57063
  [...RULE_TEXT],
57019
57064
  [...RULE_TEXT],
57065
+ [...RULE_TEXT],
57066
+ [...RULE_TEXT],
57067
+ [...RULE_TEXT],
57068
+ [...RULE_TEXT],
57069
+ [...RULE_TEXT],
57020
57070
  ([...RULE_TEXT], [...UPDATES]),
57021
57071
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
57022
57072
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
@@ -1,4 +1,4 @@
1
- import { jt as hfModelUrl } from "./dist-Dnh7fzvR.mjs";
1
+ import { jt as hfModelUrl } from "./dist-TseSUtZJ.mjs";
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-vf1gSnDD.js");
1
+ const require_dist = require("./dist-8okS4wxl.js");
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-vf1gSnDD.js");
5
+ const require_dist = require("../dist-8okS4wxl.js");
6
6
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Hn as hydrateSchema, Kt as motionDetectionCapability, Pn as BaseAddon, St as evaluateZoneRules, jn as DeviceType } from "../dist-Dnh7fzvR.mjs";
1
+ import { Hn as hydrateSchema, Kt as motionDetectionCapability, Pn as BaseAddon, St as evaluateZoneRules, jn as DeviceType } from "../dist-TseSUtZJ.mjs";
2
2
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { join } from "node:path";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-vf1gSnDD.js");
2
+ const require_dist = require("./dist-8okS4wxl.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let node_fs = require("node:fs");
5
5
  node_fs = require_chunk.__toESM(node_fs, 1);
@@ -1,4 +1,4 @@
1
- import { En as buildFfmpegArgs, Mn as errMsg, Tn as Fmp4BoxSplitter, kn as isSoftwareDecode } from "./dist-Dnh7fzvR.mjs";
1
+ import { En as buildFfmpegArgs, Mn as errMsg, Tn as Fmp4BoxSplitter, kn as isSoftwareDecode } from "./dist-TseSUtZJ.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { realpathSync } from "node:fs";
4
4
  import path from "node:path";
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-vf1gSnDD.js");
7
- const require_node = require("../node-DCRoqtZO.js");
8
- const require_custom_model_catalog = require("../custom-model-catalog-IDV_JbaV.js");
6
+ const require_dist = require("../dist-8okS4wxl.js");
7
+ const require_node = require("../node-BStoDcFQ.js");
8
+ const require_custom_model_catalog = require("../custom-model-catalog-BZFt7qC7.js");
9
9
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
10
10
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
11
11
  const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
@@ -1,6 +1,6 @@
1
- import { $t as pipelineRunnerCapability, Bn as defineCustomActions, E as FailureCounters, Et as failureContributionCapability, Ft as linkedStepOf, I as PIPELINE_RAMP, It as loadContributionCapability, Kn as nodePin, M as NativeLeaseAdmissionSchema, Mn as errMsg, N as NativeLeaseSettingsSchema, P as NodeBenchRunnerInputSchema, Pn as BaseAddon, Qn as boolean, Rn as createEvent, U as ROOT_SUPPLIABLE_STEP_IDS, Xn as _enum, Xt as pickDetailCropConvention, Z as allowedSuppliedEffect, Zn as array, Zt as pickNativeLeaseOverride, _ as DEFAULT_DETAIL_CROP_CONVENTION, _t as deriveRootFaceRefineRect, a as BackgroundRunRegistry, cr as EventCategory, er as lazy, fn as resolveRootSupply, ht as deriveDetailCropRect, it as cameraOwnsMotionViaSensor, j as MODEL_FORMATS, ln as resolveModelBoundSetting, m as CROP_SUPPLY_SOURCES, nr as number, or as string, pn as rootSuppliesOf, rr as object, rt as buildBenchStepTree, tr as literal, x as DEVICE_RAMP, y as DEFAULT_NATIVE_LEASE_SETTINGS, zn as customAction } from "../dist-Dnh7fzvR.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-B-ZL1ARj.mjs";
3
- import { a as stepsForElectedPool, b as getStepDefinition, d as rootObjectGate, f as localFrameRegistry, h as resolveFrameViewGeometry, i as placeDetailStep, l as resolveDefaultDetectionModel, m as createSessionDecodeCoordinator, p as isSessionDecodeReadGone, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, y as getStep } from "../custom-model-catalog-ZdOOtn-r.mjs";
1
+ import { $t as pipelineRunnerCapability, Bn as defineCustomActions, E as FailureCounters, Et as failureContributionCapability, Ft as linkedStepOf, I as PIPELINE_RAMP, It as loadContributionCapability, Kn as nodePin, M as NativeLeaseAdmissionSchema, Mn as errMsg, N as NativeLeaseSettingsSchema, P as NodeBenchRunnerInputSchema, Pn as BaseAddon, Qn as boolean, Rn as createEvent, U as ROOT_SUPPLIABLE_STEP_IDS, Xn as _enum, Xt as pickDetailCropConvention, Z as allowedSuppliedEffect, Zn as array, Zt as pickNativeLeaseOverride, _ as DEFAULT_DETAIL_CROP_CONVENTION, _t as deriveRootFaceRefineRect, a as BackgroundRunRegistry, cr as EventCategory, er as lazy, fn as resolveRootSupply, ht as deriveDetailCropRect, it as cameraOwnsMotionViaSensor, j as MODEL_FORMATS, ln as resolveModelBoundSetting, m as CROP_SUPPLY_SOURCES, nr as number, or as string, pn as rootSuppliesOf, rr as object, rt as buildBenchStepTree, tr as literal, x as DEVICE_RAMP, y as DEFAULT_NATIVE_LEASE_SETTINGS, zn as customAction } from "../dist-TseSUtZJ.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-I5Y2Dzmr.mjs";
3
+ import { a as stepsForElectedPool, b as getStepDefinition, d as rootObjectGate, f as localFrameRegistry, h as resolveFrameViewGeometry, i as placeDetailStep, l as resolveDefaultDetectionModel, m as createSessionDecodeCoordinator, p as isSessionDecodeReadGone, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, y as getStep } from "../custom-model-catalog-Bdp__rWS.mjs";
4
4
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
6
  import { c as withDetectionIntent, o as preRollRequestOf, t as DETECTION_PRE_ROLL_REQUEST_MS } from "../restream-intent-DyGmLAU9.mjs";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-vf1gSnDD.js");
2
+ const require_dist = require("./dist-8okS4wxl.js");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_chunk.__toESM(node_fs);
5
5
  let node_child_process = require("node:child_process");
@@ -1,4 +1,4 @@
1
- import { Jt as parseProcStatus } from "./dist-Dnh7fzvR.mjs";
1
+ import { Jt as parseProcStatus } from "./dist-TseSUtZJ.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { execFile } from "node:child_process";
4
4
  //#region src/shared/node-topology-platform.ts
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-vf1gSnDD.js");
7
- const require_node = require("../node-DCRoqtZO.js");
6
+ const require_dist = require("../dist-8okS4wxl.js");
7
+ const require_node = require("../node-BStoDcFQ.js");
8
8
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
9
9
  const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
10
10
  const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
@@ -16328,6 +16328,94 @@ var SpawnPressureGovernor = class {
16328
16328
  return this.deps.now?.() ?? Date.now();
16329
16329
  }
16330
16330
  };
16331
+ var DEFAULT_RECORDING_STALL_CONFIG = {
16332
+ thresholdMs: 5 * 6e4,
16333
+ degradedCooldownMs: 30 * 6e4
16334
+ };
16335
+ var RecordingStallMonitor = class {
16336
+ config;
16337
+ state = /* @__PURE__ */ new Map();
16338
+ constructor(config = DEFAULT_RECORDING_STALL_CONFIG) {
16339
+ this.config = config;
16340
+ }
16341
+ /**
16342
+ * Declare whether this camera is expected to produce segments. When
16343
+ * `expected` becomes false, any open stall episode is cleared without a
16344
+ * healthy event (switched-off must not look like recovery).
16345
+ */
16346
+ setExpected(deviceId, expected, now) {
16347
+ const prev = this.state.get(deviceId);
16348
+ if (!expected) {
16349
+ this.state.set(deviceId, {
16350
+ expected: false,
16351
+ lastSegmentAt: prev?.lastSegmentAt ?? null,
16352
+ stalledReported: false,
16353
+ lastDegradedAt: prev?.lastDegradedAt ?? null
16354
+ });
16355
+ return;
16356
+ }
16357
+ this.state.set(deviceId, {
16358
+ expected: true,
16359
+ lastSegmentAt: prev?.lastSegmentAt ?? now,
16360
+ stalledReported: prev?.stalledReported ?? false,
16361
+ lastDegradedAt: prev?.lastDegradedAt ?? null
16362
+ });
16363
+ }
16364
+ /** A segment finalized for this camera (any profile). */
16365
+ noteSegment(deviceId, now) {
16366
+ const prev = this.state.get(deviceId);
16367
+ const wasStalled = prev?.stalledReported === true;
16368
+ this.state.set(deviceId, {
16369
+ expected: prev?.expected ?? false,
16370
+ lastSegmentAt: now,
16371
+ stalledReported: false,
16372
+ lastDegradedAt: prev?.lastDegradedAt ?? null
16373
+ });
16374
+ if (wasStalled && (prev?.expected ?? false)) return { deviceId };
16375
+ return null;
16376
+ }
16377
+ /**
16378
+ * Devices that have JUST crossed into stalled. Call from a periodic sweep.
16379
+ */
16380
+ sweep(now) {
16381
+ const out = [];
16382
+ for (const [deviceId, s] of this.state) {
16383
+ if (!s.expected || s.stalledReported) continue;
16384
+ if (s.lastSegmentAt === null) continue;
16385
+ const idleMs = now - s.lastSegmentAt;
16386
+ if (idleMs < this.config.thresholdMs) continue;
16387
+ this.state.set(deviceId, {
16388
+ ...s,
16389
+ stalledReported: true
16390
+ });
16391
+ out.push({
16392
+ deviceId,
16393
+ idleMs,
16394
+ thresholdMs: this.config.thresholdMs
16395
+ });
16396
+ }
16397
+ return out;
16398
+ }
16399
+ /**
16400
+ * Writer restart budget exhausted. Cooldown per camera so a storm is one
16401
+ * notification, not one per give-up.
16402
+ */
16403
+ noteDegraded(deviceId, message, now) {
16404
+ const prev = this.state.get(deviceId);
16405
+ const last = prev?.lastDegradedAt ?? null;
16406
+ if (last !== null && now - last < this.config.degradedCooldownMs) return null;
16407
+ this.state.set(deviceId, {
16408
+ expected: prev?.expected ?? false,
16409
+ lastSegmentAt: prev?.lastSegmentAt ?? null,
16410
+ stalledReported: prev?.stalledReported ?? false,
16411
+ lastDegradedAt: now
16412
+ });
16413
+ return {
16414
+ deviceId,
16415
+ message
16416
+ };
16417
+ }
16418
+ };
16331
16419
  //#endregion
16332
16420
  //#region src/recorder/addon/recording-controller.ts
16333
16421
  /**
@@ -16688,6 +16776,7 @@ var RecordingController = class {
16688
16776
  * for good reason. Every bounded-parallel attach in this file reads it.
16689
16777
  */
16690
16778
  spawnPressure;
16779
+ stallMonitor = new RecordingStallMonitor();
16691
16780
  constructor(deps) {
16692
16781
  this.deps = deps;
16693
16782
  this.spawnPressure = new SpawnPressureGovernor({
@@ -17266,6 +17355,20 @@ var RecordingController = class {
17266
17355
  segmentSeconds: this.active.get(s.deviceId)?.find((r) => r.profile === s.profile)?.segmentSeconds
17267
17356
  }
17268
17357
  });
17358
+ for (const edge of this.stallMonitor.sweep(now)) {
17359
+ this.deps.logger.warn("recorder: recording stalled for Notification Center", {
17360
+ tags: { deviceId: edge.deviceId },
17361
+ meta: {
17362
+ idleMs: edge.idleMs,
17363
+ thresholdMs: edge.thresholdMs
17364
+ }
17365
+ });
17366
+ this.deps.emitRecordingHealth?.(require_dist.EventCategory.RecordingHealthStalled, {
17367
+ deviceId: edge.deviceId,
17368
+ idleMs: edge.idleMs,
17369
+ thresholdMs: edge.thresholdMs
17370
+ });
17371
+ }
17269
17372
  const byDevice = /* @__PURE__ */ new Map();
17270
17373
  for (const s of stalled) {
17271
17374
  const list = byDevice.get(s.deviceId);
@@ -17415,6 +17518,7 @@ var RecordingController = class {
17415
17518
  const config = await this.deps.loadConfig(deviceId);
17416
17519
  if (this.stopped || this.paused) return;
17417
17520
  const wantRecording = shouldRecordAt(config, this.triggersFor(deviceId), new Date(this.now()));
17521
+ this.stallMonitor.setExpected(deviceId, wantRecording, this.now());
17418
17522
  this.scheduleNextDecision(deviceId, config);
17419
17523
  if (!wantRecording) {
17420
17524
  this.reportUnrecordable(deviceId, config);
@@ -17889,6 +17993,20 @@ var RecordingController = class {
17889
17993
  pid
17890
17994
  }) ?? require_node.NO_COST_CLAIM,
17891
17995
  onGaveUp: () => {
17996
+ const degraded = this.stallMonitor.noteDegraded(deviceId, `writer gave up on profile ${profile}`, this.now());
17997
+ if (degraded !== null) {
17998
+ this.deps.logger.warn("recorder: recording degraded (restart budget exhausted)", {
17999
+ tags: { deviceId },
18000
+ meta: {
18001
+ profile,
18002
+ message: degraded.message
18003
+ }
18004
+ });
18005
+ this.deps.emitRecordingHealth?.(require_dist.EventCategory.RecordingHealthDegraded, {
18006
+ deviceId,
18007
+ message: degraded.message
18008
+ });
18009
+ }
17892
18010
  this.recoverWriterGaveUp(deviceId, profile);
17893
18011
  },
17894
18012
  onResourcePressure: () => this.spawnPressure.report(deviceId)
@@ -17930,7 +18048,10 @@ var RecordingController = class {
17930
18048
  },
17931
18049
  intervalMs: this.deps.watchIntervalMs > 0 ? this.deps.watchIntervalMs : DEFAULT_WATCH_INTERVAL_MS,
17932
18050
  onFinalized: async (startMs, durMs, flatAbsPath) => {
17933
- this.lastSegmentAt.set(idleKey(deviceId, profile), this.now());
18051
+ const segmentAt = this.now();
18052
+ this.lastSegmentAt.set(idleKey(deviceId, profile), segmentAt);
18053
+ const recovered = this.stallMonitor.noteSegment(deviceId, segmentAt);
18054
+ if (recovered !== null) this.deps.emitRecordingHealth?.(require_dist.EventCategory.RecordingHealthOk, { deviceId: recovered.deviceId });
17934
18055
  if (startMs >= writerStartedMs - 1e3 && !firstSegmentSeen) {
17935
18056
  firstSegmentSeen = true;
17936
18057
  this.deps.logger.info("recorder: first segment of this attach", {
@@ -21714,6 +21835,9 @@ var RecorderV2Addon = class extends require_dist.BaseAddon {
21714
21835
  count: missed.count
21715
21836
  });
21716
21837
  },
21838
+ emitRecordingHealth: (category, data) => {
21839
+ this.emitExportEvent(category, data);
21840
+ },
21717
21841
  spawn: node_child_process.spawn,
21718
21842
  costRegistry: this.costRegistry,
21719
21843
  segmentSeconds: this.config.segmentSeconds,