@camstack/addon-terminal 0.1.52 → 0.1.53

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
@@ -19139,6 +19139,50 @@ var EventStoreFootprintSchema = object({
19139
19139
  totalBytes: number().int(),
19140
19140
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19141
19141
  });
19142
+ /** Event-media footprint for one {@link MediaFileKind}. */
19143
+ var EventMediaKindFootprintSchema = object({
19144
+ kind: MediaFileKindEnum,
19145
+ /** Media rows of this kind. */
19146
+ rows: number().int(),
19147
+ /** Bytes on disk held by those rows. */
19148
+ bytes: number().int()
19149
+ });
19150
+ /**
19151
+ * The media footprint broken down by KIND — the axis a deletion decision
19152
+ * actually turns on.
19153
+ *
19154
+ * A byte total says how much there is; it cannot say what is safe to remove.
19155
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19156
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19157
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19158
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19159
+ * nothing else, so sizing a deletion means summing per kind.
19160
+ *
19161
+ * ## Why `unaccounted*` exists
19162
+ *
19163
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19164
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19165
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19166
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19167
+ * retired code path, or by a version that knew a kind this one does not) would
19168
+ * otherwise vanish from the total silently, and an operator would delete
19169
+ * against a denominator smaller than the disk.
19170
+ *
19171
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19172
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19173
+ */
19174
+ var EventMediaKindBreakdownSchema = object({
19175
+ /** Every media row in scope, from one unfiltered aggregate. */
19176
+ totalRows: number().int(),
19177
+ /** Every media byte in scope, from that same aggregate. */
19178
+ totalBytes: number().int(),
19179
+ /** Per-kind footprint, ordered by bytes descending. */
19180
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19181
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19182
+ unaccountedRows: number().int(),
19183
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19184
+ unaccountedBytes: number().int()
19185
+ });
19142
19186
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19143
19187
  var EventPruneCountsSchema = object({
19144
19188
  motion: number().int(),
@@ -19342,6 +19386,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19342
19386
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19343
19387
  kind: "query",
19344
19388
  auth: "admin"
19389
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19390
+ kind: "query",
19391
+ auth: "admin"
19345
19392
  }), method(object({
19346
19393
  olderThanMs: number(),
19347
19394
  reason: OpsLogReasonSchema.optional()
@@ -21397,6 +21444,20 @@ method(object({
21397
21444
  error: string().optional()
21398
21445
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21399
21446
  providerId: string(),
21447
+ /**
21448
+ * The location this config is an UNSAVED edit of, when there is one.
21449
+ *
21450
+ * `listLocations` replaces every declared secret with the redaction
21451
+ * sentinel, so the edit modal's form state holds the sentinel for any
21452
+ * credential the operator did not retype — and posting that here
21453
+ * without a way to resolve it makes the provider try to authenticate
21454
+ * as `__camstack_redacted__` and report the operator's own working
21455
+ * password as wrong. Given this id, the orchestrator restores each
21456
+ * sentinel from the stored config (same rule as `upsertLocation`)
21457
+ * before dispatching. Omitted by the "Add location" wizard, where
21458
+ * every value was typed just now and nothing is stored yet.
21459
+ */
21460
+ locationId: string().optional(),
21400
21461
  config: record(string(), unknown())
21401
21462
  }), object({
21402
21463
  ok: boolean(),
@@ -35477,6 +35538,12 @@ Object.freeze({
35477
35538
  addonId: null,
35478
35539
  access: "view"
35479
35540
  },
35541
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
35542
+ capName: "pipeline-analytics",
35543
+ capScope: "device",
35544
+ addonId: null,
35545
+ access: "view"
35546
+ },
35480
35547
  "pipelineAnalytics.getEventStoreFootprint": {
35481
35548
  capName: "pipeline-analytics",
35482
35549
  capScope: "device",
@@ -39142,6 +39209,11 @@ Object.freeze({
39142
39209
  form: "single",
39143
39210
  optional: false
39144
39211
  }],
39212
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
39213
+ name: "deviceId",
39214
+ form: "single",
39215
+ optional: true
39216
+ }],
39145
39217
  "pipelineAnalytics.getGroup": [{
39146
39218
  name: "deviceId",
39147
39219
  form: "single",
package/dist/addon.mjs CHANGED
@@ -19116,6 +19116,50 @@ var EventStoreFootprintSchema = object({
19116
19116
  totalBytes: number().int(),
19117
19117
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19118
19118
  });
19119
+ /** Event-media footprint for one {@link MediaFileKind}. */
19120
+ var EventMediaKindFootprintSchema = object({
19121
+ kind: MediaFileKindEnum,
19122
+ /** Media rows of this kind. */
19123
+ rows: number().int(),
19124
+ /** Bytes on disk held by those rows. */
19125
+ bytes: number().int()
19126
+ });
19127
+ /**
19128
+ * The media footprint broken down by KIND — the axis a deletion decision
19129
+ * actually turns on.
19130
+ *
19131
+ * A byte total says how much there is; it cannot say what is safe to remove.
19132
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19133
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19134
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19135
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19136
+ * nothing else, so sizing a deletion means summing per kind.
19137
+ *
19138
+ * ## Why `unaccounted*` exists
19139
+ *
19140
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19141
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19142
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19143
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19144
+ * retired code path, or by a version that knew a kind this one does not) would
19145
+ * otherwise vanish from the total silently, and an operator would delete
19146
+ * against a denominator smaller than the disk.
19147
+ *
19148
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19149
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19150
+ */
19151
+ var EventMediaKindBreakdownSchema = object({
19152
+ /** Every media row in scope, from one unfiltered aggregate. */
19153
+ totalRows: number().int(),
19154
+ /** Every media byte in scope, from that same aggregate. */
19155
+ totalBytes: number().int(),
19156
+ /** Per-kind footprint, ordered by bytes descending. */
19157
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19158
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19159
+ unaccountedRows: number().int(),
19160
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19161
+ unaccountedBytes: number().int()
19162
+ });
19119
19163
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19120
19164
  var EventPruneCountsSchema = object({
19121
19165
  motion: number().int(),
@@ -19319,6 +19363,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19319
19363
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19320
19364
  kind: "query",
19321
19365
  auth: "admin"
19366
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19367
+ kind: "query",
19368
+ auth: "admin"
19322
19369
  }), method(object({
19323
19370
  olderThanMs: number(),
19324
19371
  reason: OpsLogReasonSchema.optional()
@@ -21374,6 +21421,20 @@ method(object({
21374
21421
  error: string().optional()
21375
21422
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21376
21423
  providerId: string(),
21424
+ /**
21425
+ * The location this config is an UNSAVED edit of, when there is one.
21426
+ *
21427
+ * `listLocations` replaces every declared secret with the redaction
21428
+ * sentinel, so the edit modal's form state holds the sentinel for any
21429
+ * credential the operator did not retype — and posting that here
21430
+ * without a way to resolve it makes the provider try to authenticate
21431
+ * as `__camstack_redacted__` and report the operator's own working
21432
+ * password as wrong. Given this id, the orchestrator restores each
21433
+ * sentinel from the stored config (same rule as `upsertLocation`)
21434
+ * before dispatching. Omitted by the "Add location" wizard, where
21435
+ * every value was typed just now and nothing is stored yet.
21436
+ */
21437
+ locationId: string().optional(),
21377
21438
  config: record(string(), unknown())
21378
21439
  }), object({
21379
21440
  ok: boolean(),
@@ -35454,6 +35515,12 @@ Object.freeze({
35454
35515
  addonId: null,
35455
35516
  access: "view"
35456
35517
  },
35518
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
35519
+ capName: "pipeline-analytics",
35520
+ capScope: "device",
35521
+ addonId: null,
35522
+ access: "view"
35523
+ },
35457
35524
  "pipelineAnalytics.getEventStoreFootprint": {
35458
35525
  capName: "pipeline-analytics",
35459
35526
  capScope: "device",
@@ -39119,6 +39186,11 @@ Object.freeze({
39119
39186
  form: "single",
39120
39187
  optional: false
39121
39188
  }],
39189
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
39190
+ name: "deviceId",
39191
+ form: "single",
39192
+ optional: true
39193
+ }],
39122
39194
  "pipelineAnalytics.getGroup": [{
39123
39195
  name: "deviceId",
39124
39196
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-terminal",
3
- "version": "0.1.52",
3
+ "version": "0.1.53",
4
4
  "description": "Interactive terminal sessions (pty + xterm) as a CamStack addon",
5
5
  "keywords": [
6
6
  "camstack",