@camstack/addon-notifiers 1.2.43 → 1.2.45

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.
package/dist/addon.js CHANGED
@@ -13792,6 +13792,50 @@ var NodeProcessSchema = object({
13792
13792
  /** Wall-clock uptime (seconds). Parsed from `ps etime`. */
13793
13793
  uptimeSec: number()
13794
13794
  });
13795
+ /**
13796
+ * One retained container-memory reading.
13797
+ *
13798
+ * `atMs` is the timestamp of the PROCESS snapshot taken in the same tick, not
13799
+ * a second clock: that is what makes "processes sum to X, container says Y"
13800
+ * subtractable per point rather than an eyeballed comparison of two series
13801
+ * sampled at different instants.
13802
+ *
13803
+ * A reduced window keeps the sample with the LARGEST `currentBytes` in each
13804
+ * bucket, WHOLE. Taking a per-field maximum would synthesise a row whose parts
13805
+ * never coexisted, and a mean would smear away the peak this exists to find.
13806
+ */
13807
+ var ContainerMemoryPointSchema = object({
13808
+ /** Which hierarchy answered, so a reading is never ambiguous. */
13809
+ source: _enum(["cgroup-v2", "cgroup-v1"]),
13810
+ /** `memory.current` (v2) / `memory.usage_in_bytes` (v1). Always known. */
13811
+ currentBytes: number(),
13812
+ /** The cgroup's ceiling. `null` = NO LIMIT — never a sentinel, never zero. */
13813
+ limitBytes: number().nullable(),
13814
+ /** Anonymous pages: the closest thing to "what the processes allocated". */
13815
+ anonBytes: number().nullable(),
13816
+ /** Page cache. Charged to the cgroup, owned by no process. */
13817
+ fileBytes: number().nullable(),
13818
+ /**
13819
+ * Shared memory — and the field that explained the largest single surprise.
13820
+ * The i915 driver backs GPU buffers with shmem, so an inference pool or a
13821
+ * hardware-decode session holding DRM objects is charged HERE and appears
13822
+ * nowhere in a `ps` scan.
13823
+ */
13824
+ shmemBytes: number().nullable(),
13825
+ /** Kernel slab charged to this cgroup. `null` on v1, which never publishes it. */
13826
+ slabBytes: number().nullable(),
13827
+ /**
13828
+ * Shrinkable i915 GEM object bytes, from debugfs.
13829
+ *
13830
+ * **Host-wide across every DRM client, NOT cgroup-scoped.** It is not a
13831
+ * component of `currentBytes` and must not be subtracted from it; it says
13832
+ * what put the shmem there, where `shmemBytes` only says how much.
13833
+ *
13834
+ * `null` wherever debugfs is not mounted — which is inside every camstack
13835
+ * container today — and on any node with no Intel GPU.
13836
+ */
13837
+ gpuShmemBytes: number().nullable()
13838
+ }).extend({ atMs: number() });
13795
13839
  var DumpHeapSnapshotInputSchema = object({
13796
13840
  /** The addon whose runner should dump a heap snapshot. */
13797
13841
  addonId: string() });
@@ -13855,6 +13899,21 @@ var NodeLoadSeriesSchema = object({
13855
13899
  /** One entry per function seen in the window, heaviest-first. */
13856
13900
  series: array(LoadFunctionSeriesSchema).readonly(),
13857
13901
  /**
13902
+ * The CONTAINER's memory over the same window, oldest-first.
13903
+ *
13904
+ * Sits next to `series` rather than in a method of its own because the whole
13905
+ * question is a subtraction: the per-process rows in `series` sum to one
13906
+ * number and this one is another, and an operator who has to issue two calls
13907
+ * to compare them will compare two different instants. Same reader, same
13908
+ * `sinceMs`, same `bucketMs`, same timestamps.
13909
+ *
13910
+ * **EMPTY means ABSENT, never zero.** A node with no cgroup — a developer
13911
+ * Mac, a bare-metal host, a container with the hierarchy hidden — reports no
13912
+ * points at all. A zero here would be indistinguishable from a healthy
13913
+ * container and is precisely the lie this field exists to avoid.
13914
+ */
13915
+ containerMemory: array(ContainerMemoryPointSchema).readonly(),
13916
+ /**
13858
13917
  * Width of one returned bucket, in ms. Equals the sampling cadence when no
13859
13918
  * reduction was needed — so a caller can always say what one point covers
13860
13919
  * without having to know whether it was reduced.
@@ -25798,10 +25857,10 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceI
25798
25857
  * recording config. NOTE on events (source of truth, R5/C3): this cap carries
25799
25858
  * NO event surface — `getPlaybackManifest` returns playlist URLs only. Timeline
25800
25859
  * events (motion/object/audio) come from `pipelineAnalytics` (durable SQLite
25801
- * rows); the recorder's internal EventMap markers are ephemeral in-RAM
25802
- * annotations that are not exposed here and must not be treated as an event
25803
- * feed. Event<->footage joins are by time, padded with the shared `EVENT_PAD_MS`
25804
- * (`interfaces/recording-config.ts`).
25860
+ * rows) and are the ONLY event surface — the recorder has none. The in-RAM
25861
+ * playback markers it used to build were deleted on 2026-08-29 because nothing
25862
+ * ever read them. Event<->footage joins are by time, padded with the shared
25863
+ * `EVENT_PAD_MS` (`interfaces/recording-config.ts`).
25805
25864
  */
25806
25865
  var RecordingStatusSchema = object({
25807
25866
  deviceId: number(),
package/dist/addon.mjs CHANGED
@@ -13765,6 +13765,50 @@ var NodeProcessSchema = object({
13765
13765
  /** Wall-clock uptime (seconds). Parsed from `ps etime`. */
13766
13766
  uptimeSec: number()
13767
13767
  });
13768
+ /**
13769
+ * One retained container-memory reading.
13770
+ *
13771
+ * `atMs` is the timestamp of the PROCESS snapshot taken in the same tick, not
13772
+ * a second clock: that is what makes "processes sum to X, container says Y"
13773
+ * subtractable per point rather than an eyeballed comparison of two series
13774
+ * sampled at different instants.
13775
+ *
13776
+ * A reduced window keeps the sample with the LARGEST `currentBytes` in each
13777
+ * bucket, WHOLE. Taking a per-field maximum would synthesise a row whose parts
13778
+ * never coexisted, and a mean would smear away the peak this exists to find.
13779
+ */
13780
+ var ContainerMemoryPointSchema = object({
13781
+ /** Which hierarchy answered, so a reading is never ambiguous. */
13782
+ source: _enum(["cgroup-v2", "cgroup-v1"]),
13783
+ /** `memory.current` (v2) / `memory.usage_in_bytes` (v1). Always known. */
13784
+ currentBytes: number(),
13785
+ /** The cgroup's ceiling. `null` = NO LIMIT — never a sentinel, never zero. */
13786
+ limitBytes: number().nullable(),
13787
+ /** Anonymous pages: the closest thing to "what the processes allocated". */
13788
+ anonBytes: number().nullable(),
13789
+ /** Page cache. Charged to the cgroup, owned by no process. */
13790
+ fileBytes: number().nullable(),
13791
+ /**
13792
+ * Shared memory — and the field that explained the largest single surprise.
13793
+ * The i915 driver backs GPU buffers with shmem, so an inference pool or a
13794
+ * hardware-decode session holding DRM objects is charged HERE and appears
13795
+ * nowhere in a `ps` scan.
13796
+ */
13797
+ shmemBytes: number().nullable(),
13798
+ /** Kernel slab charged to this cgroup. `null` on v1, which never publishes it. */
13799
+ slabBytes: number().nullable(),
13800
+ /**
13801
+ * Shrinkable i915 GEM object bytes, from debugfs.
13802
+ *
13803
+ * **Host-wide across every DRM client, NOT cgroup-scoped.** It is not a
13804
+ * component of `currentBytes` and must not be subtracted from it; it says
13805
+ * what put the shmem there, where `shmemBytes` only says how much.
13806
+ *
13807
+ * `null` wherever debugfs is not mounted — which is inside every camstack
13808
+ * container today — and on any node with no Intel GPU.
13809
+ */
13810
+ gpuShmemBytes: number().nullable()
13811
+ }).extend({ atMs: number() });
13768
13812
  var DumpHeapSnapshotInputSchema = object({
13769
13813
  /** The addon whose runner should dump a heap snapshot. */
13770
13814
  addonId: string() });
@@ -13828,6 +13872,21 @@ var NodeLoadSeriesSchema = object({
13828
13872
  /** One entry per function seen in the window, heaviest-first. */
13829
13873
  series: array(LoadFunctionSeriesSchema).readonly(),
13830
13874
  /**
13875
+ * The CONTAINER's memory over the same window, oldest-first.
13876
+ *
13877
+ * Sits next to `series` rather than in a method of its own because the whole
13878
+ * question is a subtraction: the per-process rows in `series` sum to one
13879
+ * number and this one is another, and an operator who has to issue two calls
13880
+ * to compare them will compare two different instants. Same reader, same
13881
+ * `sinceMs`, same `bucketMs`, same timestamps.
13882
+ *
13883
+ * **EMPTY means ABSENT, never zero.** A node with no cgroup — a developer
13884
+ * Mac, a bare-metal host, a container with the hierarchy hidden — reports no
13885
+ * points at all. A zero here would be indistinguishable from a healthy
13886
+ * container and is precisely the lie this field exists to avoid.
13887
+ */
13888
+ containerMemory: array(ContainerMemoryPointSchema).readonly(),
13889
+ /**
13831
13890
  * Width of one returned bucket, in ms. Equals the sampling cadence when no
13832
13891
  * reduction was needed — so a caller can always say what one point covers
13833
13892
  * without having to know whether it was reduced.
@@ -25771,10 +25830,10 @@ DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceI
25771
25830
  * recording config. NOTE on events (source of truth, R5/C3): this cap carries
25772
25831
  * NO event surface — `getPlaybackManifest` returns playlist URLs only. Timeline
25773
25832
  * events (motion/object/audio) come from `pipelineAnalytics` (durable SQLite
25774
- * rows); the recorder's internal EventMap markers are ephemeral in-RAM
25775
- * annotations that are not exposed here and must not be treated as an event
25776
- * feed. Event<->footage joins are by time, padded with the shared `EVENT_PAD_MS`
25777
- * (`interfaces/recording-config.ts`).
25833
+ * rows) and are the ONLY event surface — the recorder has none. The in-RAM
25834
+ * playback markers it used to build were deleted on 2026-08-29 because nothing
25835
+ * ever read them. Event<->footage joins are by time, padded with the shared
25836
+ * `EVENT_PAD_MS` (`interfaces/recording-config.ts`).
25778
25837
  */
25779
25838
  var RecordingStatusSchema = object({
25780
25839
  deviceId: number(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-notifiers",
3
- "version": "1.2.43",
3
+ "version": "1.2.45",
4
4
  "description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
5
5
  "keywords": [
6
6
  "camstack",