@camstack/addon-post-analysis 1.2.356 → 1.2.357

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.
@@ -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";
@@ -5449,7 +5459,7 @@ var ZodIssueCode = {
5449
5459
  var ZodFirstPartyTypeKind;
5450
5460
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5451
5461
  //#endregion
5452
- //#region ../types/dist/sleep-DwAQ9sqX.mjs
5462
+ //#region ../types/dist/sleep-Tkp9dHXv.mjs
5453
5463
  /**
5454
5464
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5455
5465
  * window to float samples (D455).
@@ -15091,7 +15101,14 @@ var BrokerProviderInfoSchema = object({
15091
15101
  /** Broker kinds this provider can create, with a display label. */
15092
15102
  kinds: array(object({
15093
15103
  kind: string(),
15094
- label: string()
15104
+ label: string(),
15105
+ /**
15106
+ * Relative hub path to start an interactive account link (OAuth popup).
15107
+ * May include `{{brokerId}}`; admin-ui substitutes and appends `?popup=1`.
15108
+ */
15109
+ interactiveConnectPath: string().min(1).optional(),
15110
+ /** Relative hub path to disconnect the linked account (same popup pattern). */
15111
+ interactiveDisconnectPath: string().min(1).optional()
15095
15112
  }))
15096
15113
  });
15097
15114
  var ListInputSchema = object({
@@ -24267,6 +24284,12 @@ var NcSystemEventKindSchema = _enum([
24267
24284
  "node-updating",
24268
24285
  "node-inference-unavailable",
24269
24286
  "detection-blind",
24287
+ "recording-stalled",
24288
+ "recording-healthy",
24289
+ "recording-degraded",
24290
+ "storage-location-low",
24291
+ "storage-location-critical",
24292
+ "storage-location-ok",
24270
24293
  "addon-crash-loop",
24271
24294
  "addon-update-available",
24272
24295
  "server-update-available",
@@ -25764,6 +25787,30 @@ var NC_CONDITION_CATALOG = [
25764
25787
  value: "detection-blind",
25765
25788
  label: "Camera detecting nothing"
25766
25789
  },
25790
+ {
25791
+ value: "recording-stalled",
25792
+ label: "Recording stalled"
25793
+ },
25794
+ {
25795
+ value: "recording-healthy",
25796
+ label: "Recording healthy again"
25797
+ },
25798
+ {
25799
+ value: "recording-degraded",
25800
+ label: "Recording degraded (restart storm)"
25801
+ },
25802
+ {
25803
+ value: "storage-location-low",
25804
+ label: "Storage location low"
25805
+ },
25806
+ {
25807
+ value: "storage-location-critical",
25808
+ label: "Storage location critical"
25809
+ },
25810
+ {
25811
+ value: "storage-location-ok",
25812
+ label: "Storage location ok again"
25813
+ },
25767
25814
  {
25768
25815
  value: "addon-crash-loop",
25769
25816
  label: "Addon stopped after repeated crashes"
@@ -65003,9 +65050,9 @@ var NC_SYSTEM_EVENT_FILTER_KEYS = [
65003
65050
  */
65004
65051
  function systemEventFilterApplies(kind, filter) {
65005
65052
  switch (filter) {
65006
- case "deviceIds": return kind.startsWith("device-") || kind.startsWith("stream-") || kind === "detection-blind" || kind === "alarm-triggered";
65053
+ case "deviceIds": return kind.startsWith("device-") || kind.startsWith("stream-") || kind === "detection-blind" || kind.startsWith("recording-") || kind === "alarm-triggered";
65007
65054
  case "deviceTypes": return kind.startsWith("device-") || kind === "detection-blind";
65008
- case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "wrapper-update-available" || kind === "server-updated";
65055
+ case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "wrapper-update-available" || kind === "server-updated" || kind.startsWith("storage-location-");
65009
65056
  case "packageNames": return kind.endsWith("update-available") || kind === "addon-updated" || kind === "node-updating" || kind === "server-updated";
65010
65057
  case "consumableLowPercent": return NC_CONSUMABLE_SYSTEM_EVENT_KINDS.includes(kind);
65011
65058
  }
@@ -65049,6 +65096,9 @@ var NC_SYSTEM_EVENT_FAMILY = {
65049
65096
  "stream-online": "device-events",
65050
65097
  "stream-offline": "device-events",
65051
65098
  "detection-blind": "device-events",
65099
+ "recording-stalled": "device-events",
65100
+ "recording-healthy": "device-events",
65101
+ "recording-degraded": "device-events",
65052
65102
  "node-online": "system",
65053
65103
  "node-offline": "system",
65054
65104
  "node-restarting": "system",
@@ -65062,6 +65112,9 @@ var NC_SYSTEM_EVENT_FAMILY = {
65062
65112
  "wrapper-update-available": "system",
65063
65113
  "backup-completed": "system",
65064
65114
  "export-completed": "system",
65115
+ "storage-location-low": "system",
65116
+ "storage-location-critical": "system",
65117
+ "storage-location-ok": "system",
65065
65118
  "alarm-triggered": "alarm",
65066
65119
  "alarm-armed": "alarm",
65067
65120
  "alarm-disarmed": "alarm",
@@ -65141,6 +65194,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
65141
65194
  label: "Detecting nothing",
65142
65195
  kinds: ["detection-blind"]
65143
65196
  },
65197
+ {
65198
+ id: "recording",
65199
+ family: "device-events",
65200
+ label: "Recording",
65201
+ kinds: [
65202
+ "recording-stalled",
65203
+ "recording-healthy",
65204
+ "recording-degraded"
65205
+ ]
65206
+ },
65144
65207
  {
65145
65208
  id: "nodes",
65146
65209
  family: "system",
@@ -65181,6 +65244,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
65181
65244
  label: "Backups & exports",
65182
65245
  kinds: ["backup-completed", "export-completed"]
65183
65246
  },
65247
+ {
65248
+ id: "storage",
65249
+ family: "system",
65250
+ label: "Storage locations",
65251
+ kinds: [
65252
+ "storage-location-low",
65253
+ "storage-location-critical",
65254
+ "storage-location-ok"
65255
+ ]
65256
+ },
65184
65257
  {
65185
65258
  id: "alarm",
65186
65259
  family: "alarm",
@@ -66030,6 +66103,9 @@ var DEVICE_EVENTS = [
66030
66103
  "stream-online",
66031
66104
  "stream-offline",
66032
66105
  "detection-blind",
66106
+ "recording-stalled",
66107
+ "recording-healthy",
66108
+ "recording-degraded",
66033
66109
  ...ALARM
66034
66110
  ];
66035
66111
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -30,7 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  }) : target, mod));
31
31
  //#endregion
32
32
  let node_crypto = require("node:crypto");
33
- //#region ../types/dist/event-category-DaIZi00R.mjs
33
+ //#region ../types/dist/event-category-C4hVnRo8.mjs
34
34
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
35
35
  EventCategory["SystemBoot"] = "system.boot";
36
36
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -249,7 +249,17 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
249
249
  EventCategory["RecordingStopped"] = "recording.stopped";
250
250
  EventCategory["RecordingError"] = "recording.error";
251
251
  EventCategory["RecordingHealthDegraded"] = "recording.health.degraded";
252
+ /** Recording enabled but no segment finalized for the NC stall window. */
253
+ EventCategory["RecordingHealthStalled"] = "recording.health.stalled";
254
+ /** Recovery from {@link RecordingHealthStalled}. */
255
+ EventCategory["RecordingHealthOk"] = "recording.health.ok";
252
256
  EventCategory["RecordingStorageCritical"] = "recording.storage.critical";
257
+ /** Free space on a storage location crossed the warn bar. */
258
+ EventCategory["StorageLocationLow"] = "storage.location.low";
259
+ /** Free space at/under the critical bar, or capacity probe failed (`null`). */
260
+ EventCategory["StorageLocationCritical"] = "storage.location.critical";
261
+ /** Recovery from low/critical on a storage location. */
262
+ EventCategory["StorageLocationOk"] = "storage.location.ok";
253
263
  EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
254
264
  EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
255
265
  EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
@@ -5480,7 +5490,7 @@ var ZodIssueCode = {
5480
5490
  var ZodFirstPartyTypeKind;
5481
5491
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5482
5492
  //#endregion
5483
- //#region ../types/dist/sleep-DwAQ9sqX.mjs
5493
+ //#region ../types/dist/sleep-Tkp9dHXv.mjs
5484
5494
  /**
5485
5495
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5486
5496
  * window to float samples (D455).
@@ -15122,7 +15132,14 @@ var BrokerProviderInfoSchema = object({
15122
15132
  /** Broker kinds this provider can create, with a display label. */
15123
15133
  kinds: array(object({
15124
15134
  kind: string(),
15125
- label: string()
15135
+ label: string(),
15136
+ /**
15137
+ * Relative hub path to start an interactive account link (OAuth popup).
15138
+ * May include `{{brokerId}}`; admin-ui substitutes and appends `?popup=1`.
15139
+ */
15140
+ interactiveConnectPath: string().min(1).optional(),
15141
+ /** Relative hub path to disconnect the linked account (same popup pattern). */
15142
+ interactiveDisconnectPath: string().min(1).optional()
15126
15143
  }))
15127
15144
  });
15128
15145
  var ListInputSchema = object({
@@ -24298,6 +24315,12 @@ var NcSystemEventKindSchema = _enum([
24298
24315
  "node-updating",
24299
24316
  "node-inference-unavailable",
24300
24317
  "detection-blind",
24318
+ "recording-stalled",
24319
+ "recording-healthy",
24320
+ "recording-degraded",
24321
+ "storage-location-low",
24322
+ "storage-location-critical",
24323
+ "storage-location-ok",
24301
24324
  "addon-crash-loop",
24302
24325
  "addon-update-available",
24303
24326
  "server-update-available",
@@ -25795,6 +25818,30 @@ var NC_CONDITION_CATALOG = [
25795
25818
  value: "detection-blind",
25796
25819
  label: "Camera detecting nothing"
25797
25820
  },
25821
+ {
25822
+ value: "recording-stalled",
25823
+ label: "Recording stalled"
25824
+ },
25825
+ {
25826
+ value: "recording-healthy",
25827
+ label: "Recording healthy again"
25828
+ },
25829
+ {
25830
+ value: "recording-degraded",
25831
+ label: "Recording degraded (restart storm)"
25832
+ },
25833
+ {
25834
+ value: "storage-location-low",
25835
+ label: "Storage location low"
25836
+ },
25837
+ {
25838
+ value: "storage-location-critical",
25839
+ label: "Storage location critical"
25840
+ },
25841
+ {
25842
+ value: "storage-location-ok",
25843
+ label: "Storage location ok again"
25844
+ },
25798
25845
  {
25799
25846
  value: "addon-crash-loop",
25800
25847
  label: "Addon stopped after repeated crashes"
@@ -65034,9 +65081,9 @@ var NC_SYSTEM_EVENT_FILTER_KEYS = [
65034
65081
  */
65035
65082
  function systemEventFilterApplies(kind, filter) {
65036
65083
  switch (filter) {
65037
- case "deviceIds": return kind.startsWith("device-") || kind.startsWith("stream-") || kind === "detection-blind" || kind === "alarm-triggered";
65084
+ case "deviceIds": return kind.startsWith("device-") || kind.startsWith("stream-") || kind === "detection-blind" || kind.startsWith("recording-") || kind === "alarm-triggered";
65038
65085
  case "deviceTypes": return kind.startsWith("device-") || kind === "detection-blind";
65039
- case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "wrapper-update-available" || kind === "server-updated";
65086
+ case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "wrapper-update-available" || kind === "server-updated" || kind.startsWith("storage-location-");
65040
65087
  case "packageNames": return kind.endsWith("update-available") || kind === "addon-updated" || kind === "node-updating" || kind === "server-updated";
65041
65088
  case "consumableLowPercent": return NC_CONSUMABLE_SYSTEM_EVENT_KINDS.includes(kind);
65042
65089
  }
@@ -65080,6 +65127,9 @@ var NC_SYSTEM_EVENT_FAMILY = {
65080
65127
  "stream-online": "device-events",
65081
65128
  "stream-offline": "device-events",
65082
65129
  "detection-blind": "device-events",
65130
+ "recording-stalled": "device-events",
65131
+ "recording-healthy": "device-events",
65132
+ "recording-degraded": "device-events",
65083
65133
  "node-online": "system",
65084
65134
  "node-offline": "system",
65085
65135
  "node-restarting": "system",
@@ -65093,6 +65143,9 @@ var NC_SYSTEM_EVENT_FAMILY = {
65093
65143
  "wrapper-update-available": "system",
65094
65144
  "backup-completed": "system",
65095
65145
  "export-completed": "system",
65146
+ "storage-location-low": "system",
65147
+ "storage-location-critical": "system",
65148
+ "storage-location-ok": "system",
65096
65149
  "alarm-triggered": "alarm",
65097
65150
  "alarm-armed": "alarm",
65098
65151
  "alarm-disarmed": "alarm",
@@ -65172,6 +65225,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
65172
65225
  label: "Detecting nothing",
65173
65226
  kinds: ["detection-blind"]
65174
65227
  },
65228
+ {
65229
+ id: "recording",
65230
+ family: "device-events",
65231
+ label: "Recording",
65232
+ kinds: [
65233
+ "recording-stalled",
65234
+ "recording-healthy",
65235
+ "recording-degraded"
65236
+ ]
65237
+ },
65175
65238
  {
65176
65239
  id: "nodes",
65177
65240
  family: "system",
@@ -65212,6 +65275,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
65212
65275
  label: "Backups & exports",
65213
65276
  kinds: ["backup-completed", "export-completed"]
65214
65277
  },
65278
+ {
65279
+ id: "storage",
65280
+ family: "system",
65281
+ label: "Storage locations",
65282
+ kinds: [
65283
+ "storage-location-low",
65284
+ "storage-location-critical",
65285
+ "storage-location-ok"
65286
+ ]
65287
+ },
65215
65288
  {
65216
65289
  id: "alarm",
65217
65290
  family: "alarm",
@@ -66061,6 +66134,9 @@ var DEVICE_EVENTS = [
66061
66134
  "stream-online",
66062
66135
  "stream-offline",
66063
66136
  "detection-blind",
66137
+ "recording-stalled",
66138
+ "recording-healthy",
66139
+ "recording-degraded",
66064
66140
  ...ALARM
66065
66141
  ];
66066
66142
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-DG_jp-en.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-CwcMHf4e.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $n as embeddingRequirementsFailedError, Ar as parseProcStatus, Qt as PoolMemoryWatchdog, Ti as normalizeNodeId, Vr as resolvePoolMemoryPolicy, Xn as embeddingEncoderCapability, Zn as embeddingModelFailedError, _i as BaseAddon, a as CLIP_EMBEDDING_STEP_ID, c as resolveClusterModelPin, er as embeddingRequirementsUnavailableError, i as CLIP_TEXT_MODELS, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-DfIHnFg4.mjs";
1
+ import { $n as embeddingRequirementsFailedError, Ar as parseProcStatus, Qt as PoolMemoryWatchdog, Ti as normalizeNodeId, Vr as resolvePoolMemoryPolicy, Xn as embeddingEncoderCapability, Zn as embeddingModelFailedError, _i as BaseAddon, a as CLIP_EMBEDDING_STEP_ID, c as resolveClusterModelPin, er as embeddingRequirementsUnavailableError, i as CLIP_TEXT_MODELS, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-CeXEX5AW.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.350",
21
+ version: "1.2.353",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.277",
36
+ version: "1.2.281",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.350",
39
+ version: "1.2.353",
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.277",
84
+ version: "1.2.281",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-DG_jp-en.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-CwcMHf4e.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs, 1);
8
8
  let node_path = require("node:path");
@@ -13467,6 +13467,87 @@ function incomingFromSystemEvent(event, lookup) {
13467
13467
  ...identity !== void 0 ? { deviceType: identity.type } : {}
13468
13468
  });
13469
13469
  }
13470
+ case "recording.health.stalled": {
13471
+ const deviceId = numberField(data, "deviceId");
13472
+ const idleMs = numberField(data, "idleMs");
13473
+ if (deviceId === void 0 || idleMs === void 0) return null;
13474
+ const identity = lookup(deviceId);
13475
+ const minutes = Math.max(1, Math.round(idleMs / 6e4));
13476
+ return systemSubject({
13477
+ facts,
13478
+ kind: "recording-stalled",
13479
+ subject: `recording:${deviceId}`,
13480
+ titleKey: "system.recording-stalled.title",
13481
+ bodyKey: "system.recording-stalled.body",
13482
+ textParams: {
13483
+ ...deviceTextParams(deviceId, identity),
13484
+ minutes: String(minutes)
13485
+ },
13486
+ textCount: minutes,
13487
+ deviceId,
13488
+ ...identity !== void 0 ? { deviceType: identity.type } : {}
13489
+ });
13490
+ }
13491
+ case "recording.health.ok": {
13492
+ const deviceId = numberField(data, "deviceId");
13493
+ if (deviceId === void 0) return null;
13494
+ const identity = lookup(deviceId);
13495
+ return systemSubject({
13496
+ facts,
13497
+ kind: "recording-healthy",
13498
+ subject: `recording:${deviceId}`,
13499
+ titleKey: "system.recording-healthy.title",
13500
+ bodyKey: "system.recording-healthy.body",
13501
+ textParams: deviceTextParams(deviceId, identity),
13502
+ deviceId,
13503
+ ...identity !== void 0 ? { deviceType: identity.type } : {}
13504
+ });
13505
+ }
13506
+ case "recording.health.degraded": {
13507
+ const deviceId = numberField(data, "deviceId");
13508
+ if (deviceId === void 0) return null;
13509
+ const identity = lookup(deviceId);
13510
+ const message = stringField(data, "message") ?? "writer restart budget exhausted";
13511
+ return systemSubject({
13512
+ facts,
13513
+ kind: "recording-degraded",
13514
+ subject: `recording-degraded:${deviceId}`,
13515
+ titleKey: "system.recording-degraded.title",
13516
+ bodyKey: "system.recording-degraded.body",
13517
+ textParams: {
13518
+ ...deviceTextParams(deviceId, identity),
13519
+ message
13520
+ },
13521
+ deviceId,
13522
+ ...identity !== void 0 ? { deviceType: identity.type } : {}
13523
+ });
13524
+ }
13525
+ case "storage.location.low":
13526
+ case "storage.location.critical":
13527
+ case "storage.location.ok": {
13528
+ const locationId = stringField(data, "locationId");
13529
+ if (locationId === void 0) return null;
13530
+ const nodeId = stringField(data, "nodeId");
13531
+ const kind = event.category === "storage.location.low" ? "storage-location-low" : event.category === "storage.location.critical" ? "storage-location-critical" : "storage-location-ok";
13532
+ const freePercent = numberField(data, "freePercent");
13533
+ const reason = stringField(data, "reason") ?? kind;
13534
+ const locationName = stringField(data, "locationName") ?? locationId;
13535
+ return systemSubject({
13536
+ facts,
13537
+ kind,
13538
+ subject: `storage-location:${locationId}`,
13539
+ titleKey: `system.${kind}.title`,
13540
+ bodyKey: `system.${kind}.body`,
13541
+ textParams: {
13542
+ locationId,
13543
+ locationName,
13544
+ reason,
13545
+ ...freePercent !== void 0 ? { freePercent: String(freePercent) } : {},
13546
+ ...nodeId !== void 0 ? { nodeId } : {}
13547
+ },
13548
+ ...nodeId !== void 0 ? { nodeId } : {}
13549
+ });
13550
+ }
13470
13551
  case "update.available": return incomingFromUpdateAvailable(facts, data);
13471
13552
  case "addon.updated": {
13472
13553
  const update = parseAddonUpdateComplete(data);
@@ -15505,6 +15586,21 @@ var en_default = {
15505
15586
  "one": "Camera {{deviceName}} has been analysed for {{minutes}} minute with no detection at all",
15506
15587
  "other": "Camera {{deviceName}} has been analysed for {{minutes}} minutes with no detection at all"
15507
15588
  },
15589
+ "system.recording-stalled.title": "Recording stalled — {{deviceName}}",
15590
+ "system.recording-stalled.body": {
15591
+ "one": "Camera {{deviceName}} has not written a recording segment for {{minutes}} minute",
15592
+ "other": "Camera {{deviceName}} has not written a recording segment for {{minutes}} minutes"
15593
+ },
15594
+ "system.recording-healthy.title": "Recording healthy — {{deviceName}}",
15595
+ "system.recording-healthy.body": "Camera {{deviceName}} is writing recording segments again",
15596
+ "system.recording-degraded.title": "Recording degraded — {{deviceName}}",
15597
+ "system.recording-degraded.body": "Camera {{deviceName}} exhausted its writer restart budget ({{message}})",
15598
+ "system.storage-location-low.title": "Storage low — {{locationName}}",
15599
+ "system.storage-location-low.body": "Location {{locationName}} is down to {{freePercent}}% free ({{reason}})",
15600
+ "system.storage-location-critical.title": "Storage critical — {{locationName}}",
15601
+ "system.storage-location-critical.body": "Location {{locationName}} is critical: {{reason}}",
15602
+ "system.storage-location-ok.title": "Storage ok — {{locationName}}",
15603
+ "system.storage-location-ok.body": "Location {{locationName}} has recovered free space",
15508
15604
  "system.addon-update-available.title": {
15509
15605
  "one": "{{count}} addon update available",
15510
15606
  "other": "{{count}} addon updates available"
@@ -15865,6 +15961,21 @@ var it_default = {
15865
15961
  "system.node-inference-unavailable.body": "Il nodo {{nodeId}} non può più eseguire inferenza — tutti i dispositivi abilitati non sono disponibili ({{devices}}). Non riceverà camere finché uno non torna disponibile.",
15866
15962
  "system.addon-crash-loop.title": "Crash-loop addon — {{nodeId}}",
15867
15963
  "system.addon-crash-loop.body": "L'addon {{addons}} sul nodo {{nodeId}} è andato in crash {{count}} volte di seguito e NON verrà riavviato. Tutto ciò che fornisce resta offline finché non viene riparato.",
15964
+ "system.recording-stalled.title": "Registrazione ferma — {{deviceName}}",
15965
+ "system.recording-stalled.body": {
15966
+ "one": "La camera {{deviceName}} non scrive un segmento da {{minutes}} minuto",
15967
+ "other": "La camera {{deviceName}} non scrive un segmento da {{minutes}} minuti"
15968
+ },
15969
+ "system.recording-healthy.title": "Registrazione ok — {{deviceName}}",
15970
+ "system.recording-healthy.body": "La camera {{deviceName}} scrive di nuovo i segmenti",
15971
+ "system.recording-degraded.title": "Registrazione degradata — {{deviceName}}",
15972
+ "system.recording-degraded.body": "La camera {{deviceName}} ha esaurito i riavvii del writer ({{message}})",
15973
+ "system.storage-location-low.title": "Storage basso — {{locationName}}",
15974
+ "system.storage-location-low.body": "La location {{locationName}} è al {{freePercent}}% libero ({{reason}})",
15975
+ "system.storage-location-critical.title": "Storage critico — {{locationName}}",
15976
+ "system.storage-location-critical.body": "La location {{locationName}} è critica: {{reason}}",
15977
+ "system.storage-location-ok.title": "Storage ok — {{locationName}}",
15978
+ "system.storage-location-ok.body": "La location {{locationName}} ha recuperato spazio libero",
15868
15979
  "system.detection-blind.title": "Senza detection — {{deviceName}}",
15869
15980
  "system.detection-blind.body": {
15870
15981
  "one": "La camera {{deviceName}} è analizzata da {{minutes}} minuto senza alcun rilevamento",
@@ -102003,6 +102114,12 @@ var NC_SYSTEM_EVENT_CATEGORIES = [
102003
102114
  require_clip_model_registry.EventCategory.WorkerOffline,
102004
102115
  require_clip_model_registry.EventCategory.PipelineNodeInferenceUnavailable,
102005
102116
  require_clip_model_registry.EventCategory.PipelineDetectionBlind,
102117
+ require_clip_model_registry.EventCategory.RecordingHealthStalled,
102118
+ require_clip_model_registry.EventCategory.RecordingHealthOk,
102119
+ require_clip_model_registry.EventCategory.RecordingHealthDegraded,
102120
+ require_clip_model_registry.EventCategory.StorageLocationLow,
102121
+ require_clip_model_registry.EventCategory.StorageLocationCritical,
102122
+ require_clip_model_registry.EventCategory.StorageLocationOk,
102006
102123
  require_clip_model_registry.EventCategory.AddonRunnerFailed,
102007
102124
  require_clip_model_registry.EventCategory.AddonStarted,
102008
102125
  require_clip_model_registry.EventCategory.AddonRestarted,
@@ -1,4 +1,4 @@
1
- import { $ as NC_ALARM_DEFAULT_PROFILE_ID, $r as subKindsOf, $t as RECORDING_EXPORT_MAX_READ_BYTES, A as DetectionSourceSchema, Ai as boolean, An as applyBlockingEdit, At as NcConditionsSchema, B as FailureCounters, Bi as templateLiteral, Bn as consumableLowPercentOf, Br as resolveModeNotifyPolicy, Bt as NcSharedSequenceSchema, C as CoverStateSchema, Ci as isDeviceScopedCap, Cn as TrackRelationSchema, Cr as isVectorIndexDimConflict, Ct as NC_TEMPLATE_VARS, D as DETECTION_MACRO_CLASSES, Di as ZodObject, Dn as addonWidgetsSourceCapability, Dr as memoizePinnedFfmpeg, Dt as NcAlarmSensorsSchema, E as DEFAULT_TIMELAPSE_PREVIEW_TEXT, Ei as sleep$1, En as activateAlarmProfile, Er as mayWriteToLocation, Et as NcAlarmSensorsInputSchema, F as EVENT_KIND_BY_CAP, Fi as object, Fn as audioMetricsCapability, Fr as readTimelapseGeneratedAt, Ft as NcRulePatchSchema, G as MAX_ARCHIVED_DEBUG_NOTES, Gn as deriveDetailCropRect, Gr as ruleDeviceCompatCapQueries, Gt as NcSystemEventKindSchema, H as ListTrackRelationsInputSchema, Hi as union, Hn as cosineSimilarity$1, Hr as rootSupplyServes, Ht as NcSnoozeSchema, I as EVENT_OWNER_TYPES, Ii as partialRecord, In as audioModeOf, Ir as renameAlarmProfile, It as NcRuleSchema, J as MAX_TRACK_PURITIES, Jn as describeSystemEventDeliveryProblem, Jr as sceneMonitorCapability, Jt as NcTemplatePreviewSchema, K as MAX_BIRTH_DECISION_RECORDS, Kn as derivePostTriggeredAction, Kr as ruleGroupingApplies, Kt as NcTaxonomySchema, L as EXPORT_DENSE_MAX_RANGES, Li as record, Ln as buildEventKindDescriptor, Lr as resolveClipSearchMinScore, Lt as NcRuleTargetSchema, M as EMBEDDING_REQUIREMENTS_FAILED, Mi as literal, Mn as applyNonBlockingEdit, Mr as plateGalleryCapability, Mt as NcRuleActionSchema, N as EMBEDDING_REQUIREMENTS_UNAVAILABLE, Ni as looseObject, Nn as applySecureOnArmEdit, Nr as readDeviceStateFrom, Nt as NcRuleActionsSchema, O as DETECTION_PIPELINE_CAP_NAME, Oi as _enum, On as alarmDeviceSecureOnArm, Or as notificationRulesCapability, Ot as NcAlarmSettingsPatchSchema, P as EVENT_DENSITY_BATCH_MAX, Pi as number, Pn as assertTimelapseCadences, Pr as readMotionTriggeredBy, Pt as NcRuleInputSchema, Q as MotionTriggeredBySchema, Qn as embeddingRefusalOf, Qr as storageOccupancyCapability, R as FIRST_LEVEL_MACRO_CLASSES, Ri as strictObject, Rn as buildViewerLink, Rr as resolveLocationMode, Rt as NcRuleUpdateInputSchema, S as ClearTrackRelationResultSchema, Si as hydrateSchema, Sn as TrackRelationKindSchema, Sr as isSystemEventSummaryRule, St as NC_TAXONOMY, T as DEFAULT_EVENT_COLOR, Tn as TrackSourceSchema, Tr as linkedStepOf, Tt as NcAlarmPostTriggeredActionSchema, U as ListTrackRelationsResultSchema, Ui as unknown, Un as createAlarmProfile, Ur as ruleAutoTriggersAlarm, Ut as NcSnoozeSuppressedSchema, V as LabelAttributionSchema, Vi as tuple, Vn as coreBlockIdFromAddonId, Vt as NcSnoozeInputSchema, W as LockStateSchema, Wi as EventCategory, Wn as deleteAlarmProfile, Wr as ruleBelongsToAlarm$1, Wt as NcStateSummarySectionIdSchema, X as MOTION_CLOSE_AFTER_MS, Xr as sensorRaisedOf, Xt as OPS_LOG_DEFAULT_LIMIT, Y as MAX_TRACK_RELATIONS, Yn as describeSystemEventFamilyProblem, Yr as secureActuationFor, Yt as NcTemplateVarDescriptorSchema, Z as MediaFileKindEnum, Zr as servedTemplateVars, Zt as OpsLogEntrySchema, _ as BIRTH_DECISION_DEFAULT_LIMIT, _i as BaseAddon, _n as TRACK_RELATIONS_DEFAULT_LIMIT, _r as isMediaOwnerType, _t as NC_GROUPING_MIN_SEC, a as CLIP_EMBEDDING_STEP_ID, ai as systemEventSummarySplitOf, an as SCENE_DEFAULT_ANCHOR_THRESHOLD, ar as faceGalleryCapability, at as NC_ALARM_TRIGGERED_MAX_SEC, b as COCO_TO_MACRO, bi as customAction, bn as TimelapseRuleSchema, br as isScheduleActive, bt as NC_SYSTEM_EVENT_KIND_GROUP_SPECS, c as resolveClusterModelPin, ci as vectorDimFromBase64, cn as SCENE_DEFAULT_QUIET_SECONDS, cr as gifFromMp4Args, ct as NC_CLIP_POST_ROLL_DEFAULT_SEC, d as APPEARANCE_BLOCKS, di as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, dn as SCENE_RESET_RECAPTURES, dr as isAudioClassName, dt as NC_CONDITION_CATALOG, ei as syncActiveAlarmProfileSettings, en as RECORDING_SOURCE_CAMSTACK_ADDON, et as NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC, f as APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT, fi as canonicalHash, fn as SceneMonitorSchema, fr as isDefaultAlarmProfileId, ft as NC_CONSUMABLE_LOW_PERCENT_DEFAULT, g as ArchivedDebugNoteSchema, gi as errMsg, gn as TIMELAPSE_DENSE_FLOOR_SEC, gr as isKnownTemplateVar, gt as NC_GROUPING_MAX_SEC, h as AlarmArmModeSchema, hi as DeviceType, hn as SetTrackRelationInputSchema, hr as isEventOwnerType, ht as NC_GROUPING_DEFAULT_SEC, ii as systemEventSummaryScheduleOf, in as SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, ir as evictionPolicyOfLocation, it as NC_ALARM_SYSTEM_EVENT_KINDS, j as EMBEDDING_MODEL_FAILED, ji as discriminatedUnion, jn as applyModeDelaysEdits, jr as pipelineAnalyticsCapability, jt as NcLegacyRuleActionSequenceSchema, k as DeclaredDevices, ki as array, kn as alarmPanelCapability, kr as occupancyScope, kt as NcConditionDescriptorSchema, l as ALL_CAPABILITY_DEFINITIONS, li as viewerLinkBaseOf, ln as SCENE_DEFAULT_UNCOVERED_POLICY, lr as isAlarmControllableCap, lt as NC_CLIP_PRE_ROLL_DEFAULT_SEC, m as AUDIO_MACRO_LABELS, mi as isSourceCap, mn as SetTrackPurityResultSchema, mr as isEventKindLabelKey, mt as NC_DEFAULT_SNOOZE_MINUTES, ni as systemEventFamilyProblems, nn as RetrainStatusSchema, nr as ensureAlarmProfiles, nt as NC_ALARM_DELAY_MAX_SEC, o as FACE_EMBEDDING_STEP_ID, oi as templateCarriesSummary, on as SCENE_DEFAULT_CHECK_INTERVAL_SEC, or as failureContributionCapability, ot as NC_AUDIO_CONFIRM_HITS_DEFAULT, p as ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT, pi as evaluateSensorEdge, pn as SetTrackPurityInputSchema, pr as isDetectionMacroClass, pt as NC_CONSUMABLE_SYSTEM_EVENT_KINDS, q as MAX_BIRTH_LATENCY_PROXY_MS, qn as deriveRecordingMode, qr as ruleKindOf, qt as NcTemplatePreviewInputSchema, ri as systemEventFilterApplies, rn as SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, rr as eventKindLabel, rt as NC_ALARM_NOTIFY_FIELDS, s as readClusterModelPinStrict, si as templateVarsFor, sn as SCENE_DEFAULT_OBSERVATION_SPACING_SEC, sr as gifDeriveSpeed, st as NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT, t as BUILTIN_CLIP_MODELS, ti as systemEventDeliveryProblems, tn as RebuildObjectEmbeddingsRefusalSchema, tr as encodeVectorBase64, tt as NC_ALARM_DELAY_FIELDS, u as APPEARANCE_BIN_COUNT, ui as zoneAnalyticsCapability, un as SCENE_DIVERGED, ur as isAppLinkBase, ut as NC_CLIP_RETENTION_MAX_SEC, v as BaseDevice, vi as CamProfileSchema, vn as TimelapseRuleInputSchema, vr as isRetiredClearKey, vt as NC_SENSOR_TRANSITION_KINDS, w as DEFAULT_DETAIL_CROP_CONVENTION, wi as nodePin, wn as TrackSideSchema, wr as kebabToCamel, wt as NcAlarmConfigSchema, x as ClearTrackRelationInputSchema, xi as defineCustomActions, xn as TrackPuritySchema, xr as isSystemDelivery, xt as NC_TANK_SYSTEM_EVENT_KINDS, y as BirthDecisionRecordSchema, yi as createEvent, yn as TimelapseRulePatchSchema, yr as isRootSuppliableStepId, yt as NC_SNOOZE_MAX_MINUTES, z as FULL_IMAGE_BBOX, zi as string, zn as cloneAlarmSettings, zr as resolveModeDelays, zt as NcScheduleSchema } from "../clip-model-registry-DfIHnFg4.mjs";
1
+ import { $ as NC_ALARM_DEFAULT_PROFILE_ID, $r as subKindsOf, $t as RECORDING_EXPORT_MAX_READ_BYTES, A as DetectionSourceSchema, Ai as boolean, An as applyBlockingEdit, At as NcConditionsSchema, B as FailureCounters, Bi as templateLiteral, Bn as consumableLowPercentOf, Br as resolveModeNotifyPolicy, Bt as NcSharedSequenceSchema, C as CoverStateSchema, Ci as isDeviceScopedCap, Cn as TrackRelationSchema, Cr as isVectorIndexDimConflict, Ct as NC_TEMPLATE_VARS, D as DETECTION_MACRO_CLASSES, Di as ZodObject, Dn as addonWidgetsSourceCapability, Dr as memoizePinnedFfmpeg, Dt as NcAlarmSensorsSchema, E as DEFAULT_TIMELAPSE_PREVIEW_TEXT, Ei as sleep$1, En as activateAlarmProfile, Er as mayWriteToLocation, Et as NcAlarmSensorsInputSchema, F as EVENT_KIND_BY_CAP, Fi as object, Fn as audioMetricsCapability, Fr as readTimelapseGeneratedAt, Ft as NcRulePatchSchema, G as MAX_ARCHIVED_DEBUG_NOTES, Gn as deriveDetailCropRect, Gr as ruleDeviceCompatCapQueries, Gt as NcSystemEventKindSchema, H as ListTrackRelationsInputSchema, Hi as union, Hn as cosineSimilarity$1, Hr as rootSupplyServes, Ht as NcSnoozeSchema, I as EVENT_OWNER_TYPES, Ii as partialRecord, In as audioModeOf, Ir as renameAlarmProfile, It as NcRuleSchema, J as MAX_TRACK_PURITIES, Jn as describeSystemEventDeliveryProblem, Jr as sceneMonitorCapability, Jt as NcTemplatePreviewSchema, K as MAX_BIRTH_DECISION_RECORDS, Kn as derivePostTriggeredAction, Kr as ruleGroupingApplies, Kt as NcTaxonomySchema, L as EXPORT_DENSE_MAX_RANGES, Li as record, Ln as buildEventKindDescriptor, Lr as resolveClipSearchMinScore, Lt as NcRuleTargetSchema, M as EMBEDDING_REQUIREMENTS_FAILED, Mi as literal, Mn as applyNonBlockingEdit, Mr as plateGalleryCapability, Mt as NcRuleActionSchema, N as EMBEDDING_REQUIREMENTS_UNAVAILABLE, Ni as looseObject, Nn as applySecureOnArmEdit, Nr as readDeviceStateFrom, Nt as NcRuleActionsSchema, O as DETECTION_PIPELINE_CAP_NAME, Oi as _enum, On as alarmDeviceSecureOnArm, Or as notificationRulesCapability, Ot as NcAlarmSettingsPatchSchema, P as EVENT_DENSITY_BATCH_MAX, Pi as number, Pn as assertTimelapseCadences, Pr as readMotionTriggeredBy, Pt as NcRuleInputSchema, Q as MotionTriggeredBySchema, Qn as embeddingRefusalOf, Qr as storageOccupancyCapability, R as FIRST_LEVEL_MACRO_CLASSES, Ri as strictObject, Rn as buildViewerLink, Rr as resolveLocationMode, Rt as NcRuleUpdateInputSchema, S as ClearTrackRelationResultSchema, Si as hydrateSchema, Sn as TrackRelationKindSchema, Sr as isSystemEventSummaryRule, St as NC_TAXONOMY, T as DEFAULT_EVENT_COLOR, Tn as TrackSourceSchema, Tr as linkedStepOf, Tt as NcAlarmPostTriggeredActionSchema, U as ListTrackRelationsResultSchema, Ui as unknown, Un as createAlarmProfile, Ur as ruleAutoTriggersAlarm, Ut as NcSnoozeSuppressedSchema, V as LabelAttributionSchema, Vi as tuple, Vn as coreBlockIdFromAddonId, Vt as NcSnoozeInputSchema, W as LockStateSchema, Wi as EventCategory, Wn as deleteAlarmProfile, Wr as ruleBelongsToAlarm$1, Wt as NcStateSummarySectionIdSchema, X as MOTION_CLOSE_AFTER_MS, Xr as sensorRaisedOf, Xt as OPS_LOG_DEFAULT_LIMIT, Y as MAX_TRACK_RELATIONS, Yn as describeSystemEventFamilyProblem, Yr as secureActuationFor, Yt as NcTemplateVarDescriptorSchema, Z as MediaFileKindEnum, Zr as servedTemplateVars, Zt as OpsLogEntrySchema, _ as BIRTH_DECISION_DEFAULT_LIMIT, _i as BaseAddon, _n as TRACK_RELATIONS_DEFAULT_LIMIT, _r as isMediaOwnerType, _t as NC_GROUPING_MIN_SEC, a as CLIP_EMBEDDING_STEP_ID, ai as systemEventSummarySplitOf, an as SCENE_DEFAULT_ANCHOR_THRESHOLD, ar as faceGalleryCapability, at as NC_ALARM_TRIGGERED_MAX_SEC, b as COCO_TO_MACRO, bi as customAction, bn as TimelapseRuleSchema, br as isScheduleActive, bt as NC_SYSTEM_EVENT_KIND_GROUP_SPECS, c as resolveClusterModelPin, ci as vectorDimFromBase64, cn as SCENE_DEFAULT_QUIET_SECONDS, cr as gifFromMp4Args, ct as NC_CLIP_POST_ROLL_DEFAULT_SEC, d as APPEARANCE_BLOCKS, di as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, dn as SCENE_RESET_RECAPTURES, dr as isAudioClassName, dt as NC_CONDITION_CATALOG, ei as syncActiveAlarmProfileSettings, en as RECORDING_SOURCE_CAMSTACK_ADDON, et as NC_ALARM_DEFAULT_TRIGGERED_DURATION_SEC, f as APPEARANCE_RESOLVES_AMBIGUITY_DEFAULT, fi as canonicalHash, fn as SceneMonitorSchema, fr as isDefaultAlarmProfileId, ft as NC_CONSUMABLE_LOW_PERCENT_DEFAULT, g as ArchivedDebugNoteSchema, gi as errMsg, gn as TIMELAPSE_DENSE_FLOOR_SEC, gr as isKnownTemplateVar, gt as NC_GROUPING_MAX_SEC, h as AlarmArmModeSchema, hi as DeviceType, hn as SetTrackRelationInputSchema, hr as isEventOwnerType, ht as NC_GROUPING_DEFAULT_SEC, ii as systemEventSummaryScheduleOf, in as SCENE_CONFIRM_DEFAULT_TIMEOUT_MS, ir as evictionPolicyOfLocation, it as NC_ALARM_SYSTEM_EVENT_KINDS, j as EMBEDDING_MODEL_FAILED, ji as discriminatedUnion, jn as applyModeDelaysEdits, jr as pipelineAnalyticsCapability, jt as NcLegacyRuleActionSequenceSchema, k as DeclaredDevices, ki as array, kn as alarmPanelCapability, kr as occupancyScope, kt as NcConditionDescriptorSchema, l as ALL_CAPABILITY_DEFINITIONS, li as viewerLinkBaseOf, ln as SCENE_DEFAULT_UNCOVERED_POLICY, lr as isAlarmControllableCap, lt as NC_CLIP_PRE_ROLL_DEFAULT_SEC, m as AUDIO_MACRO_LABELS, mi as isSourceCap, mn as SetTrackPurityResultSchema, mr as isEventKindLabelKey, mt as NC_DEFAULT_SNOOZE_MINUTES, ni as systemEventFamilyProblems, nn as RetrainStatusSchema, nr as ensureAlarmProfiles, nt as NC_ALARM_DELAY_MAX_SEC, o as FACE_EMBEDDING_STEP_ID, oi as templateCarriesSummary, on as SCENE_DEFAULT_CHECK_INTERVAL_SEC, or as failureContributionCapability, ot as NC_AUDIO_CONFIRM_HITS_DEFAULT, p as ARCHIVED_DEBUG_NOTES_DEFAULT_LIMIT, pi as evaluateSensorEdge, pn as SetTrackPurityInputSchema, pr as isDetectionMacroClass, pt as NC_CONSUMABLE_SYSTEM_EVENT_KINDS, q as MAX_BIRTH_LATENCY_PROXY_MS, qn as deriveRecordingMode, qr as ruleKindOf, qt as NcTemplatePreviewInputSchema, ri as systemEventFilterApplies, rn as SCENE_CONFIRM_DEFAULT_MAX_IMAGE_PX, rr as eventKindLabel, rt as NC_ALARM_NOTIFY_FIELDS, s as readClusterModelPinStrict, si as templateVarsFor, sn as SCENE_DEFAULT_OBSERVATION_SPACING_SEC, sr as gifDeriveSpeed, st as NC_AUDIO_CONFIRM_WINDOW_SEC_DEFAULT, t as BUILTIN_CLIP_MODELS, ti as systemEventDeliveryProblems, tn as RebuildObjectEmbeddingsRefusalSchema, tr as encodeVectorBase64, tt as NC_ALARM_DELAY_FIELDS, u as APPEARANCE_BIN_COUNT, ui as zoneAnalyticsCapability, un as SCENE_DIVERGED, ur as isAppLinkBase, ut as NC_CLIP_RETENTION_MAX_SEC, v as BaseDevice, vi as CamProfileSchema, vn as TimelapseRuleInputSchema, vr as isRetiredClearKey, vt as NC_SENSOR_TRANSITION_KINDS, w as DEFAULT_DETAIL_CROP_CONVENTION, wi as nodePin, wn as TrackSideSchema, wr as kebabToCamel, wt as NcAlarmConfigSchema, x as ClearTrackRelationInputSchema, xi as defineCustomActions, xn as TrackPuritySchema, xr as isSystemDelivery, xt as NC_TANK_SYSTEM_EVENT_KINDS, y as BirthDecisionRecordSchema, yi as createEvent, yn as TimelapseRulePatchSchema, yr as isRootSuppliableStepId, yt as NC_SNOOZE_MAX_MINUTES, z as FULL_IMAGE_BBOX, zi as string, zn as cloneAlarmSettings, zr as resolveModeDelays, zt as NcScheduleSchema } from "../clip-model-registry-CeXEX5AW.mjs";
2
2
  import { t as __exportAll } from "../embedding-encoder/index.mjs";
3
3
  import * as fs$1 from "node:fs";
4
4
  import { createWriteStream, promises } from "node:fs";
@@ -13459,6 +13459,87 @@ function incomingFromSystemEvent(event, lookup) {
13459
13459
  ...identity !== void 0 ? { deviceType: identity.type } : {}
13460
13460
  });
13461
13461
  }
13462
+ case "recording.health.stalled": {
13463
+ const deviceId = numberField(data, "deviceId");
13464
+ const idleMs = numberField(data, "idleMs");
13465
+ if (deviceId === void 0 || idleMs === void 0) return null;
13466
+ const identity = lookup(deviceId);
13467
+ const minutes = Math.max(1, Math.round(idleMs / 6e4));
13468
+ return systemSubject({
13469
+ facts,
13470
+ kind: "recording-stalled",
13471
+ subject: `recording:${deviceId}`,
13472
+ titleKey: "system.recording-stalled.title",
13473
+ bodyKey: "system.recording-stalled.body",
13474
+ textParams: {
13475
+ ...deviceTextParams(deviceId, identity),
13476
+ minutes: String(minutes)
13477
+ },
13478
+ textCount: minutes,
13479
+ deviceId,
13480
+ ...identity !== void 0 ? { deviceType: identity.type } : {}
13481
+ });
13482
+ }
13483
+ case "recording.health.ok": {
13484
+ const deviceId = numberField(data, "deviceId");
13485
+ if (deviceId === void 0) return null;
13486
+ const identity = lookup(deviceId);
13487
+ return systemSubject({
13488
+ facts,
13489
+ kind: "recording-healthy",
13490
+ subject: `recording:${deviceId}`,
13491
+ titleKey: "system.recording-healthy.title",
13492
+ bodyKey: "system.recording-healthy.body",
13493
+ textParams: deviceTextParams(deviceId, identity),
13494
+ deviceId,
13495
+ ...identity !== void 0 ? { deviceType: identity.type } : {}
13496
+ });
13497
+ }
13498
+ case "recording.health.degraded": {
13499
+ const deviceId = numberField(data, "deviceId");
13500
+ if (deviceId === void 0) return null;
13501
+ const identity = lookup(deviceId);
13502
+ const message = stringField(data, "message") ?? "writer restart budget exhausted";
13503
+ return systemSubject({
13504
+ facts,
13505
+ kind: "recording-degraded",
13506
+ subject: `recording-degraded:${deviceId}`,
13507
+ titleKey: "system.recording-degraded.title",
13508
+ bodyKey: "system.recording-degraded.body",
13509
+ textParams: {
13510
+ ...deviceTextParams(deviceId, identity),
13511
+ message
13512
+ },
13513
+ deviceId,
13514
+ ...identity !== void 0 ? { deviceType: identity.type } : {}
13515
+ });
13516
+ }
13517
+ case "storage.location.low":
13518
+ case "storage.location.critical":
13519
+ case "storage.location.ok": {
13520
+ const locationId = stringField(data, "locationId");
13521
+ if (locationId === void 0) return null;
13522
+ const nodeId = stringField(data, "nodeId");
13523
+ const kind = event.category === "storage.location.low" ? "storage-location-low" : event.category === "storage.location.critical" ? "storage-location-critical" : "storage-location-ok";
13524
+ const freePercent = numberField(data, "freePercent");
13525
+ const reason = stringField(data, "reason") ?? kind;
13526
+ const locationName = stringField(data, "locationName") ?? locationId;
13527
+ return systemSubject({
13528
+ facts,
13529
+ kind,
13530
+ subject: `storage-location:${locationId}`,
13531
+ titleKey: `system.${kind}.title`,
13532
+ bodyKey: `system.${kind}.body`,
13533
+ textParams: {
13534
+ locationId,
13535
+ locationName,
13536
+ reason,
13537
+ ...freePercent !== void 0 ? { freePercent: String(freePercent) } : {},
13538
+ ...nodeId !== void 0 ? { nodeId } : {}
13539
+ },
13540
+ ...nodeId !== void 0 ? { nodeId } : {}
13541
+ });
13542
+ }
13462
13543
  case "update.available": return incomingFromUpdateAvailable(facts, data);
13463
13544
  case "addon.updated": {
13464
13545
  const update = parseAddonUpdateComplete(data);
@@ -15497,6 +15578,21 @@ var en_default = {
15497
15578
  "one": "Camera {{deviceName}} has been analysed for {{minutes}} minute with no detection at all",
15498
15579
  "other": "Camera {{deviceName}} has been analysed for {{minutes}} minutes with no detection at all"
15499
15580
  },
15581
+ "system.recording-stalled.title": "Recording stalled — {{deviceName}}",
15582
+ "system.recording-stalled.body": {
15583
+ "one": "Camera {{deviceName}} has not written a recording segment for {{minutes}} minute",
15584
+ "other": "Camera {{deviceName}} has not written a recording segment for {{minutes}} minutes"
15585
+ },
15586
+ "system.recording-healthy.title": "Recording healthy — {{deviceName}}",
15587
+ "system.recording-healthy.body": "Camera {{deviceName}} is writing recording segments again",
15588
+ "system.recording-degraded.title": "Recording degraded — {{deviceName}}",
15589
+ "system.recording-degraded.body": "Camera {{deviceName}} exhausted its writer restart budget ({{message}})",
15590
+ "system.storage-location-low.title": "Storage low — {{locationName}}",
15591
+ "system.storage-location-low.body": "Location {{locationName}} is down to {{freePercent}}% free ({{reason}})",
15592
+ "system.storage-location-critical.title": "Storage critical — {{locationName}}",
15593
+ "system.storage-location-critical.body": "Location {{locationName}} is critical: {{reason}}",
15594
+ "system.storage-location-ok.title": "Storage ok — {{locationName}}",
15595
+ "system.storage-location-ok.body": "Location {{locationName}} has recovered free space",
15500
15596
  "system.addon-update-available.title": {
15501
15597
  "one": "{{count}} addon update available",
15502
15598
  "other": "{{count}} addon updates available"
@@ -15857,6 +15953,21 @@ var it_default = {
15857
15953
  "system.node-inference-unavailable.body": "Il nodo {{nodeId}} non può più eseguire inferenza — tutti i dispositivi abilitati non sono disponibili ({{devices}}). Non riceverà camere finché uno non torna disponibile.",
15858
15954
  "system.addon-crash-loop.title": "Crash-loop addon — {{nodeId}}",
15859
15955
  "system.addon-crash-loop.body": "L'addon {{addons}} sul nodo {{nodeId}} è andato in crash {{count}} volte di seguito e NON verrà riavviato. Tutto ciò che fornisce resta offline finché non viene riparato.",
15956
+ "system.recording-stalled.title": "Registrazione ferma — {{deviceName}}",
15957
+ "system.recording-stalled.body": {
15958
+ "one": "La camera {{deviceName}} non scrive un segmento da {{minutes}} minuto",
15959
+ "other": "La camera {{deviceName}} non scrive un segmento da {{minutes}} minuti"
15960
+ },
15961
+ "system.recording-healthy.title": "Registrazione ok — {{deviceName}}",
15962
+ "system.recording-healthy.body": "La camera {{deviceName}} scrive di nuovo i segmenti",
15963
+ "system.recording-degraded.title": "Registrazione degradata — {{deviceName}}",
15964
+ "system.recording-degraded.body": "La camera {{deviceName}} ha esaurito i riavvii del writer ({{message}})",
15965
+ "system.storage-location-low.title": "Storage basso — {{locationName}}",
15966
+ "system.storage-location-low.body": "La location {{locationName}} è al {{freePercent}}% libero ({{reason}})",
15967
+ "system.storage-location-critical.title": "Storage critico — {{locationName}}",
15968
+ "system.storage-location-critical.body": "La location {{locationName}} è critica: {{reason}}",
15969
+ "system.storage-location-ok.title": "Storage ok — {{locationName}}",
15970
+ "system.storage-location-ok.body": "La location {{locationName}} ha recuperato spazio libero",
15860
15971
  "system.detection-blind.title": "Senza detection — {{deviceName}}",
15861
15972
  "system.detection-blind.body": {
15862
15973
  "one": "La camera {{deviceName}} è analizzata da {{minutes}} minuto senza alcun rilevamento",
@@ -101908,6 +102019,12 @@ var NC_SYSTEM_EVENT_CATEGORIES = [
101908
102019
  EventCategory.WorkerOffline,
101909
102020
  EventCategory.PipelineNodeInferenceUnavailable,
101910
102021
  EventCategory.PipelineDetectionBlind,
102022
+ EventCategory.RecordingHealthStalled,
102023
+ EventCategory.RecordingHealthOk,
102024
+ EventCategory.RecordingHealthDegraded,
102025
+ EventCategory.StorageLocationLow,
102026
+ EventCategory.StorageLocationCritical,
102027
+ EventCategory.StorageLocationOk,
101911
102028
  EventCategory.AddonRunnerFailed,
101912
102029
  EventCategory.AddonStarted,
101913
102030
  EventCategory.AddonRestarted,
@@ -30,7 +30,7 @@ async function d(e) {
30
30
  }
31
31
  }
32
32
  async function f() {
33
- return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CZWX_8EQ.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-BT5KDOVx.mjs")).catch((e) => {
34
34
  throw l = void 0, e;
35
35
  }), l;
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-post-analysis",
3
- "version": "1.2.356",
3
+ "version": "1.2.357",
4
4
  "description": "Post-Analysis bundle — enrichment, embedding-encoder, pipeline-analytics. Multi-entry npm package shipping addons that consume pipeline output.",
5
5
  "keywords": [
6
6
  "camstack",