@camstack/types 1.2.120 → 1.2.122

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.
@@ -196,6 +196,45 @@ declare const NodeProcessSchema: z.ZodObject<{
196
196
  threadCount: z.ZodNullable<z.ZodNumber>;
197
197
  uptimeSec: z.ZodNumber;
198
198
  }, z.core.$strip>;
199
+ declare const ContainerMemorySnapshotSchema: z.ZodObject<{
200
+ source: z.ZodEnum<{
201
+ "cgroup-v2": "cgroup-v2";
202
+ "cgroup-v1": "cgroup-v1";
203
+ }>;
204
+ currentBytes: z.ZodNumber;
205
+ limitBytes: z.ZodNullable<z.ZodNumber>;
206
+ anonBytes: z.ZodNullable<z.ZodNumber>;
207
+ fileBytes: z.ZodNullable<z.ZodNumber>;
208
+ shmemBytes: z.ZodNullable<z.ZodNumber>;
209
+ slabBytes: z.ZodNullable<z.ZodNumber>;
210
+ gpuShmemBytes: z.ZodNullable<z.ZodNumber>;
211
+ }, z.core.$strip>;
212
+ /**
213
+ * One retained container-memory reading.
214
+ *
215
+ * `atMs` is the timestamp of the PROCESS snapshot taken in the same tick, not
216
+ * a second clock: that is what makes "processes sum to X, container says Y"
217
+ * subtractable per point rather than an eyeballed comparison of two series
218
+ * sampled at different instants.
219
+ *
220
+ * A reduced window keeps the sample with the LARGEST `currentBytes` in each
221
+ * bucket, WHOLE. Taking a per-field maximum would synthesise a row whose parts
222
+ * never coexisted, and a mean would smear away the peak this exists to find.
223
+ */
224
+ declare const ContainerMemoryPointSchema: z.ZodObject<{
225
+ source: z.ZodEnum<{
226
+ "cgroup-v2": "cgroup-v2";
227
+ "cgroup-v1": "cgroup-v1";
228
+ }>;
229
+ currentBytes: z.ZodNumber;
230
+ limitBytes: z.ZodNullable<z.ZodNumber>;
231
+ anonBytes: z.ZodNullable<z.ZodNumber>;
232
+ fileBytes: z.ZodNullable<z.ZodNumber>;
233
+ shmemBytes: z.ZodNullable<z.ZodNumber>;
234
+ slabBytes: z.ZodNullable<z.ZodNumber>;
235
+ gpuShmemBytes: z.ZodNullable<z.ZodNumber>;
236
+ atMs: z.ZodNumber;
237
+ }, z.core.$strip>;
199
238
  declare const DumpHeapSnapshotInputSchema: z.ZodObject<{
200
239
  addonId: z.ZodString;
201
240
  }, z.core.$strip>;
@@ -280,6 +319,20 @@ declare const NodeLoadSeriesSchema: z.ZodObject<{
280
319
  processCountMin: z.ZodNumber;
281
320
  }, z.core.$strip>>>;
282
321
  }, z.core.$strip>>>;
322
+ containerMemory: z.ZodReadonly<z.ZodArray<z.ZodObject<{
323
+ source: z.ZodEnum<{
324
+ "cgroup-v2": "cgroup-v2";
325
+ "cgroup-v1": "cgroup-v1";
326
+ }>;
327
+ currentBytes: z.ZodNumber;
328
+ limitBytes: z.ZodNullable<z.ZodNumber>;
329
+ anonBytes: z.ZodNullable<z.ZodNumber>;
330
+ fileBytes: z.ZodNullable<z.ZodNumber>;
331
+ shmemBytes: z.ZodNullable<z.ZodNumber>;
332
+ slabBytes: z.ZodNullable<z.ZodNumber>;
333
+ gpuShmemBytes: z.ZodNullable<z.ZodNumber>;
334
+ atMs: z.ZodNumber;
335
+ }, z.core.$strip>>>;
283
336
  bucketMs: z.ZodNumber;
284
337
  retainedSamples: z.ZodNumber;
285
338
  oldestAtMs: z.ZodNullable<z.ZodNumber>;
@@ -641,6 +694,20 @@ export declare const metricsProviderCapability: {
641
694
  processCountMin: z.ZodNumber;
642
695
  }, z.core.$strip>>>;
643
696
  }, z.core.$strip>>>;
697
+ containerMemory: z.ZodReadonly<z.ZodArray<z.ZodObject<{
698
+ source: z.ZodEnum<{
699
+ "cgroup-v2": "cgroup-v2";
700
+ "cgroup-v1": "cgroup-v1";
701
+ }>;
702
+ currentBytes: z.ZodNumber;
703
+ limitBytes: z.ZodNullable<z.ZodNumber>;
704
+ anonBytes: z.ZodNullable<z.ZodNumber>;
705
+ fileBytes: z.ZodNullable<z.ZodNumber>;
706
+ shmemBytes: z.ZodNullable<z.ZodNumber>;
707
+ slabBytes: z.ZodNullable<z.ZodNumber>;
708
+ gpuShmemBytes: z.ZodNullable<z.ZodNumber>;
709
+ atMs: z.ZodNumber;
710
+ }, z.core.$strip>>>;
644
711
  bucketMs: z.ZodNumber;
645
712
  retainedSamples: z.ZodNumber;
646
713
  oldestAtMs: z.ZodNullable<z.ZodNumber>;
@@ -666,4 +733,4 @@ export declare const metricsProviderCapability: {
666
733
  };
667
734
  };
668
735
  export type IMetricsProvider = InferProvider<typeof metricsProviderCapability>;
669
- export { SystemMetricsSchema, SystemResourceSnapshotSchema, DiskSpaceInfoSchema, MetricsGpuInfoSchema, PidResourceStatsSchema, AddonInstanceSchema, NodeProcessSchema, DumpHeapSnapshotInputSchema, DumpHeapSnapshotResultSchema, LoadPointSchema, LoadFunctionSeriesSchema, NodeLoadSeriesSchema, GetLoadSeriesInputSchema, CpuBreakdownSchema, MemoryInfoSchema, DiskIoSnapshotSchema, NetworkIoSnapshotSchema, ProcessResourceInfoSchema, PressureInfoSchema, };
736
+ export { SystemMetricsSchema, SystemResourceSnapshotSchema, DiskSpaceInfoSchema, MetricsGpuInfoSchema, PidResourceStatsSchema, AddonInstanceSchema, NodeProcessSchema, DumpHeapSnapshotInputSchema, DumpHeapSnapshotResultSchema, LoadPointSchema, LoadFunctionSeriesSchema, ContainerMemorySnapshotSchema, ContainerMemoryPointSchema, NodeLoadSeriesSchema, GetLoadSeriesInputSchema, CpuBreakdownSchema, MemoryInfoSchema, DiskIoSnapshotSchema, NetworkIoSnapshotSchema, ProcessResourceInfoSchema, PressureInfoSchema, };
@@ -3,10 +3,10 @@
3
3
  * recording config. NOTE on events (source of truth, R5/C3): this cap carries
4
4
  * NO event surface — `getPlaybackManifest` returns playlist URLs only. Timeline
5
5
  * events (motion/object/audio) come from `pipelineAnalytics` (durable SQLite
6
- * rows); the recorder's internal EventMap markers are ephemeral in-RAM
7
- * annotations that are not exposed here and must not be treated as an event
8
- * feed. Event<->footage joins are by time, padded with the shared `EVENT_PAD_MS`
9
- * (`interfaces/recording-config.ts`).
6
+ * rows) and are the ONLY event surface the recorder has none. The in-RAM
7
+ * playback markers it used to build were deleted on 2026-08-29 because nothing
8
+ * ever read them. Event<->footage joins are by time, padded with the shared
9
+ * `EVENT_PAD_MS` (`interfaces/recording-config.ts`).
10
10
  */
11
11
  import { z } from 'zod';
12
12
  import { type InferProvider } from './capability-definition.js';
package/dist/index.js CHANGED
@@ -1885,11 +1885,10 @@ var DetectionCatalogClassMapSchema = zod.z.object({
1885
1885
  * timestamp + postMs]`). Matches the admin-ui clip window (−5s/+10s).
1886
1886
  *
1887
1887
  * Every consumer derives from this ONE constant so event↔footage boundaries
1888
- * agree everywhere (C1):
1889
- * - the `videoclips` default provider (addon-post-analysis) pads its clip
1890
- * windows with it;
1891
- * - the recorder's ephemeral in-RAM `EventMap` markers (addon-pipeline) pad
1892
- * their `startMs/endMs` with it.
1888
+ * agree everywhere (C1): today that is the `videoclips` default provider
1889
+ * (addon-post-analysis), which pads its clip windows with it. The recorder used
1890
+ * to pad in-RAM playback markers with it too; those markers had no reader
1891
+ * anywhere in the repo and were deleted on 2026-08-29.
1893
1892
  *
1894
1893
  * NOTE: this is a UI/JOIN convention, NOT the `events`-band keep/discard gate —
1895
1894
  * that uses the per-device `preBufferSec`/`postBufferSec` config.
@@ -11898,6 +11897,50 @@ var NodeProcessSchema = zod.z.object({
11898
11897
  /** Wall-clock uptime (seconds). Parsed from `ps etime`. */
11899
11898
  uptimeSec: zod.z.number()
11900
11899
  });
11900
+ /**
11901
+ * One retained container-memory reading.
11902
+ *
11903
+ * `atMs` is the timestamp of the PROCESS snapshot taken in the same tick, not
11904
+ * a second clock: that is what makes "processes sum to X, container says Y"
11905
+ * subtractable per point rather than an eyeballed comparison of two series
11906
+ * sampled at different instants.
11907
+ *
11908
+ * A reduced window keeps the sample with the LARGEST `currentBytes` in each
11909
+ * bucket, WHOLE. Taking a per-field maximum would synthesise a row whose parts
11910
+ * never coexisted, and a mean would smear away the peak this exists to find.
11911
+ */
11912
+ var ContainerMemoryPointSchema = zod.z.object({
11913
+ /** Which hierarchy answered, so a reading is never ambiguous. */
11914
+ source: zod.z.enum(["cgroup-v2", "cgroup-v1"]),
11915
+ /** `memory.current` (v2) / `memory.usage_in_bytes` (v1). Always known. */
11916
+ currentBytes: zod.z.number(),
11917
+ /** The cgroup's ceiling. `null` = NO LIMIT — never a sentinel, never zero. */
11918
+ limitBytes: zod.z.number().nullable(),
11919
+ /** Anonymous pages: the closest thing to "what the processes allocated". */
11920
+ anonBytes: zod.z.number().nullable(),
11921
+ /** Page cache. Charged to the cgroup, owned by no process. */
11922
+ fileBytes: zod.z.number().nullable(),
11923
+ /**
11924
+ * Shared memory — and the field that explained the largest single surprise.
11925
+ * The i915 driver backs GPU buffers with shmem, so an inference pool or a
11926
+ * hardware-decode session holding DRM objects is charged HERE and appears
11927
+ * nowhere in a `ps` scan.
11928
+ */
11929
+ shmemBytes: zod.z.number().nullable(),
11930
+ /** Kernel slab charged to this cgroup. `null` on v1, which never publishes it. */
11931
+ slabBytes: zod.z.number().nullable(),
11932
+ /**
11933
+ * Shrinkable i915 GEM object bytes, from debugfs.
11934
+ *
11935
+ * **Host-wide across every DRM client, NOT cgroup-scoped.** It is not a
11936
+ * component of `currentBytes` and must not be subtracted from it; it says
11937
+ * what put the shmem there, where `shmemBytes` only says how much.
11938
+ *
11939
+ * `null` wherever debugfs is not mounted — which is inside every camstack
11940
+ * container today — and on any node with no Intel GPU.
11941
+ */
11942
+ gpuShmemBytes: zod.z.number().nullable()
11943
+ }).extend({ atMs: zod.z.number() });
11901
11944
  var DumpHeapSnapshotInputSchema = zod.z.object({
11902
11945
  /** The addon whose runner should dump a heap snapshot. */
11903
11946
  addonId: zod.z.string() });
@@ -11961,6 +12004,21 @@ var NodeLoadSeriesSchema = zod.z.object({
11961
12004
  /** One entry per function seen in the window, heaviest-first. */
11962
12005
  series: zod.z.array(LoadFunctionSeriesSchema).readonly(),
11963
12006
  /**
12007
+ * The CONTAINER's memory over the same window, oldest-first.
12008
+ *
12009
+ * Sits next to `series` rather than in a method of its own because the whole
12010
+ * question is a subtraction: the per-process rows in `series` sum to one
12011
+ * number and this one is another, and an operator who has to issue two calls
12012
+ * to compare them will compare two different instants. Same reader, same
12013
+ * `sinceMs`, same `bucketMs`, same timestamps.
12014
+ *
12015
+ * **EMPTY means ABSENT, never zero.** A node with no cgroup — a developer
12016
+ * Mac, a bare-metal host, a container with the hierarchy hidden — reports no
12017
+ * points at all. A zero here would be indistinguishable from a healthy
12018
+ * container and is precisely the lie this field exists to avoid.
12019
+ */
12020
+ containerMemory: zod.z.array(ContainerMemoryPointSchema).readonly(),
12021
+ /**
11964
12022
  * Width of one returned bucket, in ms. Equals the sampling cadence when no
11965
12023
  * reduction was needed — so a caller can always say what one point covers
11966
12024
  * without having to know whether it was reduced.
@@ -29953,10 +30011,10 @@ var rebootCapability = {
29953
30011
  * recording config. NOTE on events (source of truth, R5/C3): this cap carries
29954
30012
  * NO event surface — `getPlaybackManifest` returns playlist URLs only. Timeline
29955
30013
  * events (motion/object/audio) come from `pipelineAnalytics` (durable SQLite
29956
- * rows); the recorder's internal EventMap markers are ephemeral in-RAM
29957
- * annotations that are not exposed here and must not be treated as an event
29958
- * feed. Event<->footage joins are by time, padded with the shared `EVENT_PAD_MS`
29959
- * (`interfaces/recording-config.ts`).
30014
+ * rows) and are the ONLY event surface the recorder has none. The in-RAM
30015
+ * playback markers it used to build were deleted on 2026-08-29 because nothing
30016
+ * ever read them. Event<->footage joins are by time, padded with the shared
30017
+ * `EVENT_PAD_MS` (`interfaces/recording-config.ts`).
29960
30018
  */
29961
30019
  var RecordingStatusSchema = zod.z.object({
29962
30020
  deviceId: zod.z.number(),
package/dist/index.mjs CHANGED
@@ -1884,11 +1884,10 @@ var DetectionCatalogClassMapSchema = z.object({
1884
1884
  * timestamp + postMs]`). Matches the admin-ui clip window (−5s/+10s).
1885
1885
  *
1886
1886
  * Every consumer derives from this ONE constant so event↔footage boundaries
1887
- * agree everywhere (C1):
1888
- * - the `videoclips` default provider (addon-post-analysis) pads its clip
1889
- * windows with it;
1890
- * - the recorder's ephemeral in-RAM `EventMap` markers (addon-pipeline) pad
1891
- * their `startMs/endMs` with it.
1887
+ * agree everywhere (C1): today that is the `videoclips` default provider
1888
+ * (addon-post-analysis), which pads its clip windows with it. The recorder used
1889
+ * to pad in-RAM playback markers with it too; those markers had no reader
1890
+ * anywhere in the repo and were deleted on 2026-08-29.
1892
1891
  *
1893
1892
  * NOTE: this is a UI/JOIN convention, NOT the `events`-band keep/discard gate —
1894
1893
  * that uses the per-device `preBufferSec`/`postBufferSec` config.
@@ -11897,6 +11896,50 @@ var NodeProcessSchema = z.object({
11897
11896
  /** Wall-clock uptime (seconds). Parsed from `ps etime`. */
11898
11897
  uptimeSec: z.number()
11899
11898
  });
11899
+ /**
11900
+ * One retained container-memory reading.
11901
+ *
11902
+ * `atMs` is the timestamp of the PROCESS snapshot taken in the same tick, not
11903
+ * a second clock: that is what makes "processes sum to X, container says Y"
11904
+ * subtractable per point rather than an eyeballed comparison of two series
11905
+ * sampled at different instants.
11906
+ *
11907
+ * A reduced window keeps the sample with the LARGEST `currentBytes` in each
11908
+ * bucket, WHOLE. Taking a per-field maximum would synthesise a row whose parts
11909
+ * never coexisted, and a mean would smear away the peak this exists to find.
11910
+ */
11911
+ var ContainerMemoryPointSchema = z.object({
11912
+ /** Which hierarchy answered, so a reading is never ambiguous. */
11913
+ source: z.enum(["cgroup-v2", "cgroup-v1"]),
11914
+ /** `memory.current` (v2) / `memory.usage_in_bytes` (v1). Always known. */
11915
+ currentBytes: z.number(),
11916
+ /** The cgroup's ceiling. `null` = NO LIMIT — never a sentinel, never zero. */
11917
+ limitBytes: z.number().nullable(),
11918
+ /** Anonymous pages: the closest thing to "what the processes allocated". */
11919
+ anonBytes: z.number().nullable(),
11920
+ /** Page cache. Charged to the cgroup, owned by no process. */
11921
+ fileBytes: z.number().nullable(),
11922
+ /**
11923
+ * Shared memory — and the field that explained the largest single surprise.
11924
+ * The i915 driver backs GPU buffers with shmem, so an inference pool or a
11925
+ * hardware-decode session holding DRM objects is charged HERE and appears
11926
+ * nowhere in a `ps` scan.
11927
+ */
11928
+ shmemBytes: z.number().nullable(),
11929
+ /** Kernel slab charged to this cgroup. `null` on v1, which never publishes it. */
11930
+ slabBytes: z.number().nullable(),
11931
+ /**
11932
+ * Shrinkable i915 GEM object bytes, from debugfs.
11933
+ *
11934
+ * **Host-wide across every DRM client, NOT cgroup-scoped.** It is not a
11935
+ * component of `currentBytes` and must not be subtracted from it; it says
11936
+ * what put the shmem there, where `shmemBytes` only says how much.
11937
+ *
11938
+ * `null` wherever debugfs is not mounted — which is inside every camstack
11939
+ * container today — and on any node with no Intel GPU.
11940
+ */
11941
+ gpuShmemBytes: z.number().nullable()
11942
+ }).extend({ atMs: z.number() });
11900
11943
  var DumpHeapSnapshotInputSchema = z.object({
11901
11944
  /** The addon whose runner should dump a heap snapshot. */
11902
11945
  addonId: z.string() });
@@ -11960,6 +12003,21 @@ var NodeLoadSeriesSchema = z.object({
11960
12003
  /** One entry per function seen in the window, heaviest-first. */
11961
12004
  series: z.array(LoadFunctionSeriesSchema).readonly(),
11962
12005
  /**
12006
+ * The CONTAINER's memory over the same window, oldest-first.
12007
+ *
12008
+ * Sits next to `series` rather than in a method of its own because the whole
12009
+ * question is a subtraction: the per-process rows in `series` sum to one
12010
+ * number and this one is another, and an operator who has to issue two calls
12011
+ * to compare them will compare two different instants. Same reader, same
12012
+ * `sinceMs`, same `bucketMs`, same timestamps.
12013
+ *
12014
+ * **EMPTY means ABSENT, never zero.** A node with no cgroup — a developer
12015
+ * Mac, a bare-metal host, a container with the hierarchy hidden — reports no
12016
+ * points at all. A zero here would be indistinguishable from a healthy
12017
+ * container and is precisely the lie this field exists to avoid.
12018
+ */
12019
+ containerMemory: z.array(ContainerMemoryPointSchema).readonly(),
12020
+ /**
11963
12021
  * Width of one returned bucket, in ms. Equals the sampling cadence when no
11964
12022
  * reduction was needed — so a caller can always say what one point covers
11965
12023
  * without having to know whether it was reduced.
@@ -29952,10 +30010,10 @@ var rebootCapability = {
29952
30010
  * recording config. NOTE on events (source of truth, R5/C3): this cap carries
29953
30011
  * NO event surface — `getPlaybackManifest` returns playlist URLs only. Timeline
29954
30012
  * events (motion/object/audio) come from `pipelineAnalytics` (durable SQLite
29955
- * rows); the recorder's internal EventMap markers are ephemeral in-RAM
29956
- * annotations that are not exposed here and must not be treated as an event
29957
- * feed. Event<->footage joins are by time, padded with the shared `EVENT_PAD_MS`
29958
- * (`interfaces/recording-config.ts`).
30013
+ * rows) and are the ONLY event surface the recorder has none. The in-RAM
30014
+ * playback markers it used to build were deleted on 2026-08-29 because nothing
30015
+ * ever read them. Event<->footage joins are by time, padded with the shared
30016
+ * `EVENT_PAD_MS` (`interfaces/recording-config.ts`).
29959
30017
  */
29960
30018
  var RecordingStatusSchema = z.object({
29961
30019
  deviceId: z.number(),
@@ -7,7 +7,7 @@ import type { PipelineEngineChoice } from '../types/pipeline.js';
7
7
  import type { PipelineExecutionTrace, StepCadence } from '../types/pipeline-step.js';
8
8
  import type { CameraMetrics } from './api-shared.js';
9
9
  import type { FrameHandle } from './frame-handle.js';
10
- import type { NodeProcess, SystemResourceSnapshot } from './metrics-provider.js';
10
+ import type { ContainerMemorySnapshot, NodeProcess, SystemResourceSnapshot } from './metrics-provider.js';
11
11
  import type { RunnerLocalLoad } from './pipeline-runner-capability.js';
12
12
  import type { BrokerStats } from './stream-broker.js';
13
13
  export interface EventSource {
@@ -1198,6 +1198,16 @@ export interface EventCatalog {
1198
1198
  readonly nodeId: string;
1199
1199
  readonly processes: ReadonlyArray<NodeProcess>;
1200
1200
  readonly timestamp: number;
1201
+ /**
1202
+ * The CONTAINER's memory at the SAME instant as `processes`, or `null`
1203
+ * when this node has no cgroup.
1204
+ *
1205
+ * It rides this event rather than one of its own for a single reason: the
1206
+ * question is a subtraction. The processes above sum to one number and
1207
+ * this is another, and two events would carry two timestamps that never
1208
+ * quite line up. `null` is ABSENT — never a zeroed reading.
1209
+ */
1210
+ readonly containerMemory: ContainerMemorySnapshot | null;
1201
1211
  };
1202
1212
  /**
1203
1213
  * Per-agent hwaccel override changed (set / cleared / re-probed). Payload
@@ -1,5 +1,5 @@
1
1
  import type { z } from 'zod';
2
- import type { CpuBreakdownSchema, MemoryInfoSchema, DiskIoSnapshotSchema, NetworkIoSnapshotSchema, MetricsGpuInfoSchema, ProcessResourceInfoSchema, PressureInfoSchema, SystemResourceSnapshotSchema, DiskSpaceInfoSchema, PidResourceStatsSchema, AddonInstanceSchema, NodeProcessSchema, DumpHeapSnapshotInputSchema, DumpHeapSnapshotResultSchema, LoadPointSchema, LoadFunctionSeriesSchema, NodeLoadSeriesSchema, GetLoadSeriesInputSchema } from '../capabilities/metrics-provider.cap.js';
2
+ import type { CpuBreakdownSchema, MemoryInfoSchema, DiskIoSnapshotSchema, NetworkIoSnapshotSchema, MetricsGpuInfoSchema, ProcessResourceInfoSchema, PressureInfoSchema, SystemResourceSnapshotSchema, DiskSpaceInfoSchema, PidResourceStatsSchema, AddonInstanceSchema, NodeProcessSchema, DumpHeapSnapshotInputSchema, DumpHeapSnapshotResultSchema, LoadPointSchema, LoadFunctionSeriesSchema, ContainerMemorySnapshotSchema, ContainerMemoryPointSchema, NodeLoadSeriesSchema, GetLoadSeriesInputSchema } from '../capabilities/metrics-provider.cap.js';
3
3
  export type CpuBreakdown = z.infer<typeof CpuBreakdownSchema>;
4
4
  export type MemoryInfo = z.infer<typeof MemoryInfoSchema>;
5
5
  export type DiskIoSnapshot = z.infer<typeof DiskIoSnapshotSchema>;
@@ -16,5 +16,7 @@ export type DumpHeapSnapshotInput = z.infer<typeof DumpHeapSnapshotInputSchema>;
16
16
  export type DumpHeapSnapshotResult = z.infer<typeof DumpHeapSnapshotResultSchema>;
17
17
  export type LoadSeriesPoint = z.infer<typeof LoadPointSchema>;
18
18
  export type LoadFunctionSeries = z.infer<typeof LoadFunctionSeriesSchema>;
19
+ export type ContainerMemorySnapshot = z.infer<typeof ContainerMemorySnapshotSchema>;
20
+ export type ContainerMemoryPoint = z.infer<typeof ContainerMemoryPointSchema>;
19
21
  export type NodeLoadSeries = z.infer<typeof NodeLoadSeriesSchema>;
20
22
  export type GetLoadSeriesInput = z.infer<typeof GetLoadSeriesInputSchema>;
@@ -6,11 +6,10 @@ import { type CamProfile } from '../capabilities/schemas/streaming-shared.js';
6
6
  * timestamp + postMs]`). Matches the admin-ui clip window (−5s/+10s).
7
7
  *
8
8
  * Every consumer derives from this ONE constant so event↔footage boundaries
9
- * agree everywhere (C1):
10
- * - the `videoclips` default provider (addon-post-analysis) pads its clip
11
- * windows with it;
12
- * - the recorder's ephemeral in-RAM `EventMap` markers (addon-pipeline) pad
13
- * their `startMs/endMs` with it.
9
+ * agree everywhere (C1): today that is the `videoclips` default provider
10
+ * (addon-post-analysis), which pads its clip windows with it. The recorder used
11
+ * to pad in-RAM playback markers with it too; those markers had no reader
12
+ * anywhere in the repo and were deleted on 2026-08-29.
14
13
  *
15
14
  * NOTE: this is a UI/JOIN convention, NOT the `events`-band keep/discard gate —
16
15
  * that uses the per-device `preBufferSec`/`postBufferSec` config.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.120",
3
+ "version": "1.2.122",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",