@camstack/addon-post-analysis 1.2.217 → 1.2.219

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.
@@ -17081,6 +17081,7 @@ var NcSystemEventKindSchema = _enum([
17081
17081
  "addon-crash-loop",
17082
17082
  "addon-update-available",
17083
17083
  "server-update-available",
17084
+ "wrapper-update-available",
17084
17085
  "alarm-triggered",
17085
17086
  "alarm-armed",
17086
17087
  "alarm-disarmed",
@@ -18227,6 +18228,10 @@ var NC_CONDITION_CATALOG = [
18227
18228
  value: "server-update-available",
18228
18229
  label: "Server update available"
18229
18230
  },
18231
+ {
18232
+ value: "wrapper-update-available",
18233
+ label: "Container / app update available"
18234
+ },
18230
18235
  {
18231
18236
  value: "addon-updated",
18232
18237
  label: "Addons updated"
@@ -21122,7 +21127,17 @@ var EventDensityBucketSchema = object({
21122
21127
  bucketStart: number(),
21123
21128
  motion: number().int(),
21124
21129
  object: number().int(),
21125
- audio: number().int()
21130
+ audio: number().int(),
21131
+ /**
21132
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
21133
+ * as opposed to `audio`, which is their COUNT (D431).
21134
+ *
21135
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
21136
+ * measured", which is not the same claim as silence, and a lane that cannot
21137
+ * tell them apart paints a quiet hour at full scale — which is exactly what
21138
+ * the count-on-a-level-meter did.
21139
+ */
21140
+ audioDbfs: number().optional()
21126
21141
  });
21127
21142
  /**
21128
21143
  * One camera's row in a `getEventDensityBatch` answer.
@@ -23848,6 +23863,53 @@ var ImageContractSchema = object({
23848
23863
  /** One operator-grade sentence: this node runs image X; the contract says Y. */
23849
23864
  message: string()
23850
23865
  });
23866
+ /**
23867
+ * The shell verdict (see {@link WrapperKindSchema}) with the proofs that
23868
+ * produced it.
23869
+ *
23870
+ * There is deliberately NO `canSelfUpdate` and no apply action: a wrapper
23871
+ * update is an ANNOUNCEMENT. The notification body carries the exact command
23872
+ * for a `docker` shell and says the app restarts into the new build for
23873
+ * `electron`, and that sentence is chosen from `kind` alone — a boolean
23874
+ * nothing reads is the defect this repo keeps paying for.
23875
+ */
23876
+ var WrapperIdentitySchema = object({
23877
+ kind: _enum([
23878
+ "docker",
23879
+ "electron",
23880
+ "native",
23881
+ "contradictory",
23882
+ "unknown"
23883
+ ]),
23884
+ /** Every probe that ran, in a stable order. Never empty. */
23885
+ evidence: array(object({
23886
+ /** Which probe this row reports. */
23887
+ fact: _enum([
23888
+ "dockerenv-file",
23889
+ "proc-1-cgroup",
23890
+ "platform",
23891
+ "electron-app-version-env"
23892
+ ]),
23893
+ /**
23894
+ * `observed` — this process read it itself. `declared` — the shell told the
23895
+ * process and nothing here can check it. Only the Electron app version is
23896
+ * ever `declared`, and only because a child cannot see its parent.
23897
+ */
23898
+ mode: _enum(["observed", "declared"]),
23899
+ /** Did the probe support the fact it names? A `false` row is still evidence. */
23900
+ holds: boolean(),
23901
+ /** What was actually read, verbatim enough for an operator to argue with. */
23902
+ detail: string()
23903
+ })),
23904
+ /**
23905
+ * The version of the SHELL, when the shell has one it can state: the
23906
+ * Electron app version it declared, or the baked seed closure that
23907
+ * fingerprints a container / app bundle. `null` for `contradictory` and
23908
+ * `unknown` — which version belongs to the shell is precisely what is not
23909
+ * known there.
23910
+ */
23911
+ currentVersion: string().nullable()
23912
+ });
23851
23913
  var ServerRollbackInfoSchema = object({
23852
23914
  /** The version that failed (or was manually rolled back). */
23853
23915
  fromVersion: string(),
@@ -23889,7 +23951,13 @@ var ServerPackageStatusSchema = object({
23889
23951
  * Seed-vs-contract verdict (see {@link ImageContractSchema}). Optional for
23890
23952
  * version skew: an older provider's payload simply omits it.
23891
23953
  */
23892
- imageContract: ImageContractSchema.optional()
23954
+ imageContract: ImageContractSchema.optional(),
23955
+ /**
23956
+ * What this node runs INSIDE (see {@link WrapperIdentitySchema}). Optional
23957
+ * for version skew: an older provider's payload simply omits it, and an
23958
+ * absent wrapper is unknown — never `native`.
23959
+ */
23960
+ wrapper: WrapperIdentitySchema.optional()
23893
23961
  });
23894
23962
  var ServerUpdateCheckResultSchema = object({
23895
23963
  packageName: string(),
@@ -31869,7 +31937,23 @@ var RecordingRangeSchema = object({
31869
31937
  });
31870
31938
  var RecordingAvailabilitySchema = object({
31871
31939
  deviceId: number(),
31872
- ranges: array(RecordingRangeSchema)
31940
+ ranges: array(RecordingRangeSchema),
31941
+ /**
31942
+ * Every profile this camera has footage in — not only the one `ranges`
31943
+ * describes (D433).
31944
+ *
31945
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
31946
+ * and enumerating all of them triples the directory reads for a bar that
31947
+ * would look identical. But the answer used to say nothing about that, so a
31948
+ * caller asking "what can I export?" read the single preferred profile as
31949
+ * the only one that exists — on this deployment every camera records `high`
31950
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
31951
+ * UI could not see it.
31952
+ *
31953
+ * Cheap: it is the same shallow directory read the profile CHOICE already
31954
+ * makes. Ask for a specific profile's ranges with the `profile` input.
31955
+ */
31956
+ profilesWithFootage: array(string())
31873
31957
  });
31874
31958
  var RecordingDaysSchema = object({
31875
31959
  deviceId: number(),
@@ -31895,7 +31979,11 @@ var RecordingDaysSchema = object({
31895
31979
  var RecordingAvailabilityForDeviceSchema = object({
31896
31980
  deviceId: number(),
31897
31981
  read: _enum(["read", "unreadable"]),
31898
- ranges: array(RecordingRangeSchema).readonly()
31982
+ ranges: array(RecordingRangeSchema).readonly(),
31983
+ /** Same field, same meaning, as the singular answer (D433). A row that
31984
+ * dropped it would tell a grid caller the archive holds one profile.
31985
+ * Empty on an `'unreadable'` row: nobody looked. */
31986
+ profilesWithFootage: array(string()).readonly()
31899
31987
  });
31900
31988
  /**
31901
31989
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -32185,7 +32273,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
32185
32273
  method(object({
32186
32274
  deviceId: number(),
32187
32275
  fromMs: number(),
32188
- toMs: number()
32276
+ toMs: number(),
32277
+ /**
32278
+ * Answer for THIS profile instead of the preferred one (D433). Absent
32279
+ * keeps the timeline's behaviour — one bar, one profile, one set of
32280
+ * reads. `profilesWithFootage` on the answer says what may be asked
32281
+ * for.
32282
+ */
32283
+ profile: string().optional()
32189
32284
  }), RecordingAvailabilitySchema, {
32190
32285
  kind: "query",
32191
32286
  auth: "protected"
@@ -44359,7 +44454,7 @@ function systemEventFilterApplies(kind, filter) {
44359
44454
  switch (filter) {
44360
44455
  case "deviceIds": return kind.startsWith("device-") || kind.startsWith("stream-") || kind === "detection-blind" || kind === "alarm-triggered" || kind === "export-completed";
44361
44456
  case "deviceTypes": return kind.startsWith("device-") || kind === "detection-blind";
44362
- case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "server-updated";
44457
+ 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";
44363
44458
  case "packageNames": return kind.endsWith("update-available") || kind === "addon-updated" || kind === "server-updated";
44364
44459
  }
44365
44460
  }
@@ -17050,6 +17050,7 @@ var NcSystemEventKindSchema = _enum([
17050
17050
  "addon-crash-loop",
17051
17051
  "addon-update-available",
17052
17052
  "server-update-available",
17053
+ "wrapper-update-available",
17053
17054
  "alarm-triggered",
17054
17055
  "alarm-armed",
17055
17056
  "alarm-disarmed",
@@ -18196,6 +18197,10 @@ var NC_CONDITION_CATALOG = [
18196
18197
  value: "server-update-available",
18197
18198
  label: "Server update available"
18198
18199
  },
18200
+ {
18201
+ value: "wrapper-update-available",
18202
+ label: "Container / app update available"
18203
+ },
18199
18204
  {
18200
18205
  value: "addon-updated",
18201
18206
  label: "Addons updated"
@@ -21091,7 +21096,17 @@ var EventDensityBucketSchema = object({
21091
21096
  bucketStart: number(),
21092
21097
  motion: number().int(),
21093
21098
  object: number().int(),
21094
- audio: number().int()
21099
+ audio: number().int(),
21100
+ /**
21101
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
21102
+ * as opposed to `audio`, which is their COUNT (D431).
21103
+ *
21104
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
21105
+ * measured", which is not the same claim as silence, and a lane that cannot
21106
+ * tell them apart paints a quiet hour at full scale — which is exactly what
21107
+ * the count-on-a-level-meter did.
21108
+ */
21109
+ audioDbfs: number().optional()
21095
21110
  });
21096
21111
  /**
21097
21112
  * One camera's row in a `getEventDensityBatch` answer.
@@ -23817,6 +23832,53 @@ var ImageContractSchema = object({
23817
23832
  /** One operator-grade sentence: this node runs image X; the contract says Y. */
23818
23833
  message: string()
23819
23834
  });
23835
+ /**
23836
+ * The shell verdict (see {@link WrapperKindSchema}) with the proofs that
23837
+ * produced it.
23838
+ *
23839
+ * There is deliberately NO `canSelfUpdate` and no apply action: a wrapper
23840
+ * update is an ANNOUNCEMENT. The notification body carries the exact command
23841
+ * for a `docker` shell and says the app restarts into the new build for
23842
+ * `electron`, and that sentence is chosen from `kind` alone — a boolean
23843
+ * nothing reads is the defect this repo keeps paying for.
23844
+ */
23845
+ var WrapperIdentitySchema = object({
23846
+ kind: _enum([
23847
+ "docker",
23848
+ "electron",
23849
+ "native",
23850
+ "contradictory",
23851
+ "unknown"
23852
+ ]),
23853
+ /** Every probe that ran, in a stable order. Never empty. */
23854
+ evidence: array(object({
23855
+ /** Which probe this row reports. */
23856
+ fact: _enum([
23857
+ "dockerenv-file",
23858
+ "proc-1-cgroup",
23859
+ "platform",
23860
+ "electron-app-version-env"
23861
+ ]),
23862
+ /**
23863
+ * `observed` — this process read it itself. `declared` — the shell told the
23864
+ * process and nothing here can check it. Only the Electron app version is
23865
+ * ever `declared`, and only because a child cannot see its parent.
23866
+ */
23867
+ mode: _enum(["observed", "declared"]),
23868
+ /** Did the probe support the fact it names? A `false` row is still evidence. */
23869
+ holds: boolean(),
23870
+ /** What was actually read, verbatim enough for an operator to argue with. */
23871
+ detail: string()
23872
+ })),
23873
+ /**
23874
+ * The version of the SHELL, when the shell has one it can state: the
23875
+ * Electron app version it declared, or the baked seed closure that
23876
+ * fingerprints a container / app bundle. `null` for `contradictory` and
23877
+ * `unknown` — which version belongs to the shell is precisely what is not
23878
+ * known there.
23879
+ */
23880
+ currentVersion: string().nullable()
23881
+ });
23820
23882
  var ServerRollbackInfoSchema = object({
23821
23883
  /** The version that failed (or was manually rolled back). */
23822
23884
  fromVersion: string(),
@@ -23858,7 +23920,13 @@ var ServerPackageStatusSchema = object({
23858
23920
  * Seed-vs-contract verdict (see {@link ImageContractSchema}). Optional for
23859
23921
  * version skew: an older provider's payload simply omits it.
23860
23922
  */
23861
- imageContract: ImageContractSchema.optional()
23923
+ imageContract: ImageContractSchema.optional(),
23924
+ /**
23925
+ * What this node runs INSIDE (see {@link WrapperIdentitySchema}). Optional
23926
+ * for version skew: an older provider's payload simply omits it, and an
23927
+ * absent wrapper is unknown — never `native`.
23928
+ */
23929
+ wrapper: WrapperIdentitySchema.optional()
23862
23930
  });
23863
23931
  var ServerUpdateCheckResultSchema = object({
23864
23932
  packageName: string(),
@@ -31838,7 +31906,23 @@ var RecordingRangeSchema = object({
31838
31906
  });
31839
31907
  var RecordingAvailabilitySchema = object({
31840
31908
  deviceId: number(),
31841
- ranges: array(RecordingRangeSchema)
31909
+ ranges: array(RecordingRangeSchema),
31910
+ /**
31911
+ * Every profile this camera has footage in — not only the one `ranges`
31912
+ * describes (D433).
31913
+ *
31914
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
31915
+ * and enumerating all of them triples the directory reads for a bar that
31916
+ * would look identical. But the answer used to say nothing about that, so a
31917
+ * caller asking "what can I export?" read the single preferred profile as
31918
+ * the only one that exists — on this deployment every camera records `high`
31919
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
31920
+ * UI could not see it.
31921
+ *
31922
+ * Cheap: it is the same shallow directory read the profile CHOICE already
31923
+ * makes. Ask for a specific profile's ranges with the `profile` input.
31924
+ */
31925
+ profilesWithFootage: array(string())
31842
31926
  });
31843
31927
  var RecordingDaysSchema = object({
31844
31928
  deviceId: number(),
@@ -31864,7 +31948,11 @@ var RecordingDaysSchema = object({
31864
31948
  var RecordingAvailabilityForDeviceSchema = object({
31865
31949
  deviceId: number(),
31866
31950
  read: _enum(["read", "unreadable"]),
31867
- ranges: array(RecordingRangeSchema).readonly()
31951
+ ranges: array(RecordingRangeSchema).readonly(),
31952
+ /** Same field, same meaning, as the singular answer (D433). A row that
31953
+ * dropped it would tell a grid caller the archive holds one profile.
31954
+ * Empty on an `'unreadable'` row: nobody looked. */
31955
+ profilesWithFootage: array(string()).readonly()
31868
31956
  });
31869
31957
  /**
31870
31958
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -32154,7 +32242,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
32154
32242
  method(object({
32155
32243
  deviceId: number(),
32156
32244
  fromMs: number(),
32157
- toMs: number()
32245
+ toMs: number(),
32246
+ /**
32247
+ * Answer for THIS profile instead of the preferred one (D433). Absent
32248
+ * keeps the timeline's behaviour — one bar, one profile, one set of
32249
+ * reads. `profilesWithFootage` on the answer says what may be asked
32250
+ * for.
32251
+ */
32252
+ profile: string().optional()
32158
32253
  }), RecordingAvailabilitySchema, {
32159
32254
  kind: "query",
32160
32255
  auth: "protected"
@@ -44328,7 +44423,7 @@ function systemEventFilterApplies(kind, filter) {
44328
44423
  switch (filter) {
44329
44424
  case "deviceIds": return kind.startsWith("device-") || kind.startsWith("stream-") || kind === "detection-blind" || kind === "alarm-triggered" || kind === "export-completed";
44330
44425
  case "deviceTypes": return kind.startsWith("device-") || kind === "detection-blind";
44331
- case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "server-updated";
44426
+ 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";
44332
44427
  case "packageNames": return kind.endsWith("update-available") || kind === "addon-updated" || kind === "server-updated";
44333
44428
  }
44334
44429
  }
@@ -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-B_6UZCut.js");
5
+ const require_dist = require("../dist-Cnlk6Tyz.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_dist.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { At as resolvePoolMemoryPolicy, B as PoolMemoryWatchdog, Ct as parseProcStatus, gt as hfModelUrl, ut as embeddingEncoderCapability, zt as BaseAddon } from "../dist-DWZqNymj.mjs";
1
+ import { At as resolvePoolMemoryPolicy, B as PoolMemoryWatchdog, Ct as parseProcStatus, gt as hfModelUrl, ut as embeddingEncoderCapability, zt as BaseAddon } from "../dist-D0l3xZqa.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";
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
3
3
  var e = {
4
4
  "@camstack/sdk": {
5
5
  name: "@camstack/sdk",
6
- version: "1.2.95",
6
+ version: "1.2.97",
7
7
  scope: ["default"],
8
8
  loaded: !1,
9
9
  from: "addon_pipeline_analytics_widgets",
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.175",
21
+ version: "1.2.177",
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.143",
36
+ version: "1.2.145",
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.175",
39
+ version: "1.2.177",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.95",
48
+ version: "1.2.97",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.143",
84
+ version: "1.2.145",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,