@camstack/addon-agent-ui 1.2.21 → 1.2.23

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 (2) hide show
  1. package/dist/addon.js +38 -4
  2. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -19874,6 +19874,14 @@ var ClipSchema = object({
19874
19874
  endMs: number()
19875
19875
  }),
19876
19876
  /**
19877
+ * Distinct object classes attached to this visit (`person`, `car`, …),
19878
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
19879
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
19880
+ * did not. Absent (never empty) when the visit attached no classified object
19881
+ * event, so a motion/audio-only visit keeps its kind label.
19882
+ */
19883
+ labels: array(string()).max(3).optional(),
19884
+ /**
19877
19885
  * Lazy thumbnail URL, never inlined.
19878
19886
  *
19879
19887
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -24208,9 +24216,21 @@ var RecordingLocationUsageSchema = object({
24208
24216
  * previously rendered as two identical "disks" with a nonsensical used
24209
24217
  * split — hydrate attribution across aliases is arbitrary by nature. */
24210
24218
  locationIds: array(string()).optional(),
24211
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
24219
+ /**
24220
+ * Filesystem root of the physical volume this row accounts — the only
24221
+ * operator-legible identity when a location has no `displayName` yet, and
24222
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
24223
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
24224
+ * it, and this schema must keep validating that older provider's payload.
24225
+ */
24226
+ root: string().optional(),
24227
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
24228
+ * the footage's SHARE of the volume, not how full the volume is — the disk
24229
+ * also holds everything that is not recordings. Volume fill is
24230
+ * `(totalBytes - availableBytes) / totalBytes`. */
24212
24231
  usedBytes: number(),
24213
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
24232
+ /** Free bytes on the location's volume; null when capacity is unknown
24233
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
24214
24234
  availableBytes: number().nullable(),
24215
24235
  /** Total bytes of the location's volume; null when unknown. */
24216
24236
  totalBytes: number().nullable()
@@ -24222,7 +24242,15 @@ var RecordingStorageUsageSchema = object({
24222
24242
  nodeId: string(),
24223
24243
  totalUsedBytes: number(),
24224
24244
  devices: array(RecordingDeviceUsageSchema),
24225
- locations: array(RecordingLocationUsageSchema)
24245
+ /**
24246
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
24247
+ * of the payload without it: the hub serves this method through a BAKED
24248
+ * router, so a hub whose framework train predates a change to this array
24249
+ * strips it out of an answer a newer recorder happily produced. A UI that
24250
+ * dereferences it unconditionally crashes the whole Storage page over a
24251
+ * missing disk bar.
24252
+ */
24253
+ locations: array(RecordingLocationUsageSchema).optional()
24226
24254
  });
24227
24255
  /**
24228
24256
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -33338,8 +33366,14 @@ Object.freeze({
33338
33366
  "network-access": "ingress",
33339
33367
  "smtp-provider": "email"
33340
33368
  });
33369
+ /** Schema defaults — an untouched sub-field must author exactly these. */
33370
+ var NC_AUDIO_DEFAULTS = {
33371
+ hitPercent: 60,
33372
+ samplingSeconds: 10
33373
+ };
33341
33374
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
33342
33375
  new Set(["devices", "classes"]);
33376
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
33343
33377
  /**
33344
33378
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
33345
33379
  *
@@ -33730,7 +33764,7 @@ var AgentUIAddon = class extends BaseAddon {
33730
33764
  capability: adminUiCapability,
33731
33765
  provider: {
33732
33766
  getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
33733
- getVersion: async () => ({ version: "1.2.21" })
33767
+ getVersion: async () => ({ version: "1.2.23" })
33734
33768
  }
33735
33769
  }];
33736
33770
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-agent-ui",
3
- "version": "1.2.21",
3
+ "version": "1.2.23",
4
4
  "description": "Agent UI — lightweight status dashboard served by every agent node",
5
5
  "keywords": [
6
6
  "camstack",