@camstack/addon-pipeline 1.2.153 → 1.2.155

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 (38) hide show
  1. package/dist/audio-analyzer/index.js +2 -2
  2. package/dist/audio-analyzer/index.mjs +2 -2
  3. package/dist/detection-pipeline/index.js +5 -5
  4. package/dist/detection-pipeline/index.mjs +4 -4
  5. package/dist/{dist-Dsritt4-.mjs → dist-CBRky_dz.mjs} +304 -4
  6. package/dist/{dist-DnVnWACi.js → dist-CmrtJ8RB.js} +304 -4
  7. package/dist/{lazy-sharp-DZWYKdV2.js → lazy-sharp-BODx7w1t.js} +1 -1
  8. package/dist/{local-frame-registry-BpFLRfbw.js → local-frame-registry-BRG0GTmK.js} +1 -1
  9. package/dist/{local-frame-registry-Yf-uIxbS.mjs → local-frame-registry-ByKcWWPU.mjs} +1 -1
  10. package/dist/motion-wasm/index.js +2 -2
  11. package/dist/motion-wasm/index.mjs +1 -1
  12. package/dist/{node-C5xmFvjS.js → node-BSeMUwxJ.js} +1 -1
  13. package/dist/{node-CNGxkfes.mjs → node-CQzPpwIR.mjs} +1 -1
  14. package/dist/pipeline-runner/index.js +5 -5
  15. package/dist/pipeline-runner/index.mjs +4 -4
  16. package/dist/{process-memory-DX_KCfdx.mjs → process-memory-DQX-DbHx.mjs} +1 -1
  17. package/dist/{process-memory-COT8rA8L.js → process-memory-DVmHBraW.js} +1 -1
  18. package/dist/recorder/index.js +667 -100
  19. package/dist/recorder/index.mjs +667 -100
  20. package/dist/{segment-demux-js-CTFSl-b9.mjs → segment-demux-js-DGX1iGLL.mjs} +1 -1
  21. package/dist/{segment-demux-js-Dwg9Jq5_.js → segment-demux-js-DmqnujVx.js} +1 -1
  22. package/dist/session-decode/decode-worker-child.js +2 -2
  23. package/dist/session-decode/decode-worker-child.mjs +1 -1
  24. package/dist/stream-broker/_stub.js +2 -2
  25. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-ZucA907q.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DvfM0ofY.mjs} +3 -3
  26. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-lMPlG5w5.mjs +26 -0
  27. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CSNuIp4J.mjs +26 -0
  28. package/dist/stream-broker/demux-worker-child.js +1 -1
  29. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  30. package/dist/stream-broker/{hostInit-BqUcM0Fh.mjs → hostInit-DQGeMfoN.mjs} +3 -3
  31. package/dist/stream-broker/index.js +3 -3
  32. package/dist/stream-broker/index.mjs +3 -3
  33. package/dist/stream-broker/remoteEntry.js +1 -1
  34. package/dist/{worker-protocol-CDBQXOIu.mjs → worker-protocol-C7jOjCsc.mjs} +1 -1
  35. package/dist/{worker-protocol-BsvaPb-G.js → worker-protocol-S2nAdf6B.js} +1 -1
  36. package/package.json +1 -1
  37. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B14Zc1oq.mjs +0 -26
  38. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DO6LkN6o.mjs +0 -26
@@ -9353,6 +9353,20 @@ var RelocateJobSchema = object({
9353
9353
  * in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
9354
9354
  */
9355
9355
  rowsReconciled: number().int().nonnegative().optional(),
9356
+ /**
9357
+ * Rows this run FORGOT because the file they name is not on disk.
9358
+ *
9359
+ * The mover derived the path from the row's own fields and `stat`ed it; an
9360
+ * ENOENT there is a per-path confirmation that the segment is gone (D296),
9361
+ * and the durable row is dropped through the same channel eviction uses. It
9362
+ * is reported for the same reason `rowsReconciled` is: this is a durable
9363
+ * mutation nobody asked for, and a migration that quietly erases hour rows is
9364
+ * the same failure as one that quietly skips them (D295).
9365
+ *
9366
+ * The production drain of 2026-08-30 would have reported 11 074 here — the
9367
+ * ledger claimed 5.65 GB of footage that no longer existed.
9368
+ */
9369
+ rowsForgotten: number().int().nonnegative().optional(),
9356
9370
  startedAt: number(),
9357
9371
  finishedAt: number().nullable(),
9358
9372
  error: string().nullable()
@@ -9716,6 +9730,91 @@ var RelocateResidueSchema = object({
9716
9730
  segments: number().int().nonnegative(),
9717
9731
  bytes: number().int().nonnegative()
9718
9732
  }).nullable();
9733
+ /**
9734
+ * Ask one location whether its durable hour rows describe the disk — the walk
9735
+ * (D319).
9736
+ *
9737
+ * `apply` DEFAULTS TO FALSE and that default is the product: the operator's
9738
+ * missing tool is the question, and the dry run is how they sanity-check the
9739
+ * destructive run before authorising it.
9740
+ */
9741
+ var LedgerWalkInputSchema = object({
9742
+ locationId: string().min(1),
9743
+ /** Forget the confirmed-absent rows, rather than only counting them. */
9744
+ apply: boolean().optional(),
9745
+ /** Narrow to one camera. */
9746
+ deviceId: number().int().positive().optional(),
9747
+ /** Narrow to these recording profiles; empty/absent = every profile. */
9748
+ profiles: array(string().min(1)).optional()
9749
+ });
9750
+ /** Why a whole walk did nothing. Every one leaves the ledger untouched. */
9751
+ var LedgerWalkRefusalSchema = _enum([
9752
+ "location-unknown",
9753
+ "source-writable",
9754
+ "no-ledger",
9755
+ "archive-unreadable",
9756
+ "anchor-absent",
9757
+ "anchor-unreadable",
9758
+ "anchor-moved"
9759
+ ]);
9760
+ _enum([
9761
+ "live-tail",
9762
+ "listing-error",
9763
+ "path-mismatch",
9764
+ "durable-refused"
9765
+ ]);
9766
+ /** Every skip reason, always present, always a number — so a reason that never
9767
+ * fired reports as zero rather than absent and the report shape is constant
9768
+ * between passes. Spelled out rather than `z.record` for exactly that. */
9769
+ var LedgerWalkSkipCountsSchema = object({
9770
+ "live-tail": number().int().nonnegative(),
9771
+ "listing-error": number().int().nonnegative(),
9772
+ "path-mismatch": number().int().nonnegative(),
9773
+ "durable-refused": number().int().nonnegative()
9774
+ });
9775
+ /** One camera's share of a walk, so a report names cameras and not rows. */
9776
+ var LedgerWalkDeviceReportSchema = object({
9777
+ deviceId: number().int(),
9778
+ hoursWalked: number().int().nonnegative(),
9779
+ hoursMissing: number().int().nonnegative(),
9780
+ ghostSegments: number().int().nonnegative(),
9781
+ ghostBytes: number().int().nonnegative(),
9782
+ forgottenSegments: number().int().nonnegative(),
9783
+ orphanFiles: number().int().nonnegative()
9784
+ });
9785
+ /**
9786
+ * What one walk claimed, listed, found and (only when armed) forgot.
9787
+ *
9788
+ * `archiveSegments` is the **M** and `segmentsClaimed` the **N** (D295), so a
9789
+ * walk that saw a fraction of the location is visible in its own report rather
9790
+ * than in the absence of one.
9791
+ */
9792
+ var LedgerWalkReportSchema = object({
9793
+ locationId: string(),
9794
+ applied: boolean(),
9795
+ refused: LedgerWalkRefusalSchema.nullable(),
9796
+ archiveSegments: number().int().nonnegative().nullable(),
9797
+ archiveBytes: number().int().nonnegative().nullable(),
9798
+ hoursClaimed: number().int().nonnegative(),
9799
+ hoursWalked: number().int().nonnegative(),
9800
+ hoursMissing: number().int().nonnegative(),
9801
+ /** `readdir` calls issued — the cost, stated in the unit that is paid. */
9802
+ listings: number().int().nonnegative(),
9803
+ segmentsClaimed: number().int().nonnegative(),
9804
+ ghostSegments: number().int().nonnegative(),
9805
+ ghostBytes: number().int().nonnegative(),
9806
+ ghostHoursWhole: number().int().nonnegative(),
9807
+ forgottenSegments: number().int().nonnegative(),
9808
+ forgottenBytes: number().int().nonnegative(),
9809
+ /** Files under a claimed hour that no durable row names. Never deleted. */
9810
+ orphanFiles: number().int().nonnegative(),
9811
+ orphanSample: array(string()).readonly(),
9812
+ hoursSkipped: number().int().nonnegative(),
9813
+ skippedByReason: LedgerWalkSkipCountsSchema,
9814
+ /** The walk stopped at its per-pass hour bound with claims unwalked. */
9815
+ bounded: boolean(),
9816
+ byDevice: array(LedgerWalkDeviceReportSchema).readonly()
9817
+ });
9719
9818
  /** How many rows a media pass would still act on against a given target — the
9720
9819
  * media lane's denominator AND its residue, from ONE derivation so the two can
9721
9820
  * never disagree. `null` = the count could not be taken. */
@@ -21151,13 +21250,15 @@ var ListGroupsPageSchema = object({
21151
21250
  groups: array(AnalyticsGroupRecordSchema).readonly(),
21152
21251
  nextCursor: string().nullable()
21153
21252
  });
21253
+ var KEY_EVENTS_DEFAULT_LIMIT = 50;
21254
+ var KEY_EVENTS_MAX_LIMIT = 200;
21154
21255
  var KeyEventQueryInput = object({
21155
21256
  deviceId: number(),
21156
21257
  /** Window lower bound (track firstSeen ≥ since). */
21157
21258
  since: number(),
21158
21259
  /** Window upper bound (track firstSeen ≤ until). */
21159
21260
  until: number(),
21160
- limit: number().int().min(1).max(200).default(50),
21261
+ limit: number().int().min(1).max(KEY_EVENTS_MAX_LIMIT).default(KEY_EVENTS_DEFAULT_LIMIT),
21161
21262
  /** Drop tracks scoring below this importance. */
21162
21263
  minImportance: number().min(0).max(1).optional(),
21163
21264
  /** Restrict to a single class (e.g. 'person'). */
@@ -21179,6 +21280,32 @@ var KeyEventSchema = object({
21179
21280
  ...TrackFlagFields,
21180
21281
  ...TrackRetrainFields
21181
21282
  });
21283
+ /** `getKeyEvents`' window and filters, asked of a SET of cameras at once. */
21284
+ var KeyEventBatchQueryInput = object({
21285
+ deviceIds: array(number()).min(1).max(200),
21286
+ since: number(),
21287
+ until: number(),
21288
+ /** Applied PER CAMERA, exactly as `getKeyEvents.limit` is — never a total
21289
+ * across the set, which would let a busy camera starve a quiet one of its
21290
+ * rows and change what the merged feed contains. */
21291
+ limit: number().int().min(1).max(KEY_EVENTS_MAX_LIMIT).default(KEY_EVENTS_DEFAULT_LIMIT),
21292
+ minImportance: number().min(0).max(1).optional(),
21293
+ classFilter: string().optional()
21294
+ });
21295
+ /**
21296
+ * One camera's key events in a batch answer.
21297
+ *
21298
+ * The row exists for every requested id. `getKeyEvents` degrades to `[]` on
21299
+ * error rather than throwing, so a camera whose store read failed and one with
21300
+ * no events in the window were ALREADY indistinguishable per camera — the
21301
+ * batch does not make that worse, and the row keeps the deviceId the single
21302
+ * method's output never carried (the caller used to stamp it from the fan-out
21303
+ * key, which only worked because there was one query per camera).
21304
+ */
21305
+ var KeyEventsForDeviceSchema = object({
21306
+ deviceId: number(),
21307
+ events: array(KeyEventSchema).readonly()
21308
+ });
21182
21309
  object({
21183
21310
  trackId: string(),
21184
21311
  className: string(),
@@ -21250,6 +21377,50 @@ var EventStoreFootprintSchema = object({
21250
21377
  totalBytes: number().int(),
21251
21378
  devices: array(EventStoreDeviceFootprintSchema).readonly()
21252
21379
  });
21380
+ /** Event-media footprint for one {@link MediaFileKind}. */
21381
+ var EventMediaKindFootprintSchema = object({
21382
+ kind: MediaFileKindEnum,
21383
+ /** Media rows of this kind. */
21384
+ rows: number().int(),
21385
+ /** Bytes on disk held by those rows. */
21386
+ bytes: number().int()
21387
+ });
21388
+ /**
21389
+ * The media footprint broken down by KIND — the axis a deletion decision
21390
+ * actually turns on.
21391
+ *
21392
+ * A byte total says how much there is; it cannot say what is safe to remove.
21393
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
21394
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
21395
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
21396
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
21397
+ * nothing else, so sizing a deletion means summing per kind.
21398
+ *
21399
+ * ## Why `unaccounted*` exists
21400
+ *
21401
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
21402
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
21403
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
21404
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
21405
+ * retired code path, or by a version that knew a kind this one does not) would
21406
+ * otherwise vanish from the total silently, and an operator would delete
21407
+ * against a denominator smaller than the disk.
21408
+ *
21409
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
21410
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
21411
+ */
21412
+ var EventMediaKindBreakdownSchema = object({
21413
+ /** Every media row in scope, from one unfiltered aggregate. */
21414
+ totalRows: number().int(),
21415
+ /** Every media byte in scope, from that same aggregate. */
21416
+ totalBytes: number().int(),
21417
+ /** Per-kind footprint, ordered by bytes descending. */
21418
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
21419
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
21420
+ unaccountedRows: number().int(),
21421
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
21422
+ unaccountedBytes: number().int()
21423
+ });
21253
21424
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
21254
21425
  var EventPruneCountsSchema = object({
21255
21426
  motion: number().int(),
@@ -21404,7 +21575,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21404
21575
  until: number().optional(),
21405
21576
  kinds: array(string()).optional(),
21406
21577
  limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
21407
- }), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(object({
21578
+ }), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(KeyEventBatchQueryInput, array(KeyEventsForDeviceSchema).readonly()), method(object({
21408
21579
  deviceId: number(),
21409
21580
  since: number(),
21410
21581
  until: number(),
@@ -21453,6 +21624,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21453
21624
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
21454
21625
  kind: "query",
21455
21626
  auth: "admin"
21627
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
21628
+ kind: "query",
21629
+ auth: "admin"
21456
21630
  }), method(object({
21457
21631
  olderThanMs: number(),
21458
21632
  reason: OpsLogReasonSchema.optional()
@@ -23546,6 +23720,20 @@ method(object({
23546
23720
  error: string().optional()
23547
23721
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
23548
23722
  providerId: string(),
23723
+ /**
23724
+ * The location this config is an UNSAVED edit of, when there is one.
23725
+ *
23726
+ * `listLocations` replaces every declared secret with the redaction
23727
+ * sentinel, so the edit modal's form state holds the sentinel for any
23728
+ * credential the operator did not retype — and posting that here
23729
+ * without a way to resolve it makes the provider try to authenticate
23730
+ * as `__camstack_redacted__` and report the operator's own working
23731
+ * password as wrong. Given this id, the orchestrator restores each
23732
+ * sentinel from the stored config (same rule as `upsertLocation`)
23733
+ * before dispatching. Omitted by the "Add location" wizard, where
23734
+ * every value was typed just now and nothing is stored yet.
23735
+ */
23736
+ locationId: string().optional(),
23549
23737
  config: record(string(), unknown())
23550
23738
  }), object({
23551
23739
  ok: boolean(),
@@ -29458,6 +29646,23 @@ var recordingCapability = {
29458
29646
  kind: "query",
29459
29647
  auth: "admin"
29460
29648
  }),
29649
+ /**
29650
+ * Does this location's LEDGER tell the truth about its disk? (D319)
29651
+ *
29652
+ * One `readdir` per claimed hour, diffed both ways: durable rows whose file
29653
+ * is not there, and files no durable row names. `apply` defaults to FALSE —
29654
+ * the report is the product, and the dry run is how an operator
29655
+ * sanity-checks the destructive run before authorising it.
29656
+ *
29657
+ * REFUSES a source that is still a write target: a listing of a live
29658
+ * location is a lower bound, which is not the strong evidence that lets
29659
+ * this pass forget without a budget. A live location is reconciled by the
29660
+ * mover, under D318's bound.
29661
+ */
29662
+ reconcileLedgerAgainstDisk: method(LedgerWalkInputSchema, LedgerWalkReportSchema, {
29663
+ kind: "mutation",
29664
+ auth: "admin"
29665
+ }),
29461
29666
  /** Cancel a running or queued relocate job. A queued job never runs. */
29462
29667
  cancelRelocateJob: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
29463
29668
  kind: "mutation",
@@ -29911,7 +30116,26 @@ var SceneMonitorStatusSchema = object({
29911
30116
  monitors: array(SceneMonitorSchema),
29912
30117
  lastFetchedAt: number()
29913
30118
  });
29914
- DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
30119
+ /**
30120
+ * One camera's row in a `listScenesBatch` answer.
30121
+ *
30122
+ * `status` is NULLABLE and the nullability is the whole point. `scene-monitor`
30123
+ * is a `defaultActive` wrapper, so every camera is asked; a camera whose
30124
+ * provider is absent (pipeline-analytics not deployed, the post-processing node
30125
+ * down) cannot answer, and that is not the same fact as a camera with no scenes
30126
+ * configured. Fanned out per camera the difference was visible — one query
30127
+ * errored while the others resolved — and a batch that returned only the rows
30128
+ * it managed would have destroyed it, silently, by making an unreachable camera
30129
+ * indistinguishable from one that answered `monitors: []`.
30130
+ *
30131
+ * So: EVERY requested deviceId gets a row. `status: null` means "this camera
30132
+ * could not be read"; `status.monitors: []` means "read, and it has none".
30133
+ */
30134
+ var SceneMonitorStatusForDeviceSchema = object({
30135
+ deviceId: number(),
30136
+ status: SceneMonitorStatusSchema.nullable()
30137
+ });
30138
+ DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({ deviceIds: array(number()).min(1).max(200) }), array(SceneMonitorStatusForDeviceSchema).readonly()), method(object({
29915
30139
  deviceId: number(),
29916
30140
  label: string(),
29917
30141
  roi: MaskRectShapeSchema,
@@ -31235,6 +31459,27 @@ var CameraOccupancySnapshotSchema = object({
31235
31459
  stationaryObjects: array(StationaryObjectSchema).readonly().optional()
31236
31460
  });
31237
31461
  /**
31462
+ * One camera's row in a `getCurrentSnapshotBatch` answer.
31463
+ *
31464
+ * THREE outcomes, and the single-camera method could only express two of them
31465
+ * because `snapshot: null` was already spoken for:
31466
+ *
31467
+ * - `read: 'read'`, `snapshot` present — the live occupancy reading.
31468
+ * - `read: 'read'`, `snapshot: null` — read, and this camera has no reading
31469
+ * yet: no frame since boot, and no parked-object registry to hydrate from.
31470
+ * - `read: 'unreadable'` — the owner could not answer for this
31471
+ * camera. `snapshot` is null, and it does NOT mean "nothing parked here".
31472
+ *
31473
+ * Collapsing the last two is the failure this field exists to prevent: a
31474
+ * hydration that threw would otherwise render as an empty Stationary section,
31475
+ * which is a definite claim about a camera nobody could read.
31476
+ */
31477
+ var CameraOccupancySnapshotForDeviceSchema = object({
31478
+ deviceId: number(),
31479
+ read: _enum(["read", "unreadable"]),
31480
+ snapshot: CameraOccupancySnapshotSchema.nullable()
31481
+ });
31482
+ /**
31238
31483
  * Time-series resolution. The history methods return one bucket per
31239
31484
  * step over the requested range. Smaller resolutions cost more
31240
31485
  * memory + bandwidth; bound to discrete steps so caller cannot ask
@@ -31258,7 +31503,7 @@ var HistoryPointSchema = object({
31258
31503
  /** Object count averaged over the bucket (rounded to nearest integer). */
31259
31504
  count: number().int().nonnegative()
31260
31505
  });
31261
- DeviceType.Camera, method(object({ deviceId: number() }), CameraOccupancySnapshotSchema.nullable()), method(object({
31506
+ DeviceType.Camera, method(object({ deviceId: number() }), CameraOccupancySnapshotSchema.nullable()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(CameraOccupancySnapshotForDeviceSchema).readonly()), method(object({
31262
31507
  deviceId: number(),
31263
31508
  zoneId: string(),
31264
31509
  className: string().optional()
@@ -34698,6 +34943,12 @@ Object.freeze({
34698
34943
  addonId: null,
34699
34944
  access: "view"
34700
34945
  },
34946
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
34947
+ capName: "pipeline-analytics",
34948
+ capScope: "device",
34949
+ addonId: null,
34950
+ access: "view"
34951
+ },
34701
34952
  "pipelineAnalytics.getEventStoreFootprint": {
34702
34953
  capName: "pipeline-analytics",
34703
34954
  capScope: "device",
@@ -34716,6 +34967,12 @@ Object.freeze({
34716
34967
  addonId: null,
34717
34968
  access: "view"
34718
34969
  },
34970
+ "pipelineAnalytics.getKeyEventsBatch": {
34971
+ capName: "pipeline-analytics",
34972
+ capScope: "device",
34973
+ addonId: null,
34974
+ access: "view"
34975
+ },
34719
34976
  "pipelineAnalytics.getMotionEvents": {
34720
34977
  capName: "pipeline-analytics",
34721
34978
  capScope: "device",
@@ -35892,6 +36149,12 @@ Object.freeze({
35892
36149
  addonId: null,
35893
36150
  access: "view"
35894
36151
  },
36152
+ "recording.reconcileLedgerAgainstDisk": {
36153
+ capName: "recording",
36154
+ capScope: "system",
36155
+ addonId: null,
36156
+ access: "create"
36157
+ },
35895
36158
  "recording.refreshStorageLocationsForMigration": {
35896
36159
  capName: "recording",
35897
36160
  capScope: "system",
@@ -36018,6 +36281,12 @@ Object.freeze({
36018
36281
  addonId: null,
36019
36282
  access: "view"
36020
36283
  },
36284
+ "sceneMonitor.listScenesBatch": {
36285
+ capName: "scene-monitor",
36286
+ capScope: "device",
36287
+ addonId: null,
36288
+ access: "view"
36289
+ },
36021
36290
  "sceneMonitor.recheckNow": {
36022
36291
  capName: "scene-monitor",
36023
36292
  capScope: "device",
@@ -37374,6 +37643,12 @@ Object.freeze({
37374
37643
  addonId: null,
37375
37644
  access: "view"
37376
37645
  },
37646
+ "zoneAnalytics.getCurrentSnapshotBatch": {
37647
+ capName: "zone-analytics",
37648
+ capScope: "device",
37649
+ addonId: null,
37650
+ access: "view"
37651
+ },
37377
37652
  "zoneAnalytics.getUnzonedHistory": {
37378
37653
  capName: "zone-analytics",
37379
37654
  capScope: "device",
@@ -38363,6 +38638,11 @@ Object.freeze({
38363
38638
  form: "single",
38364
38639
  optional: false
38365
38640
  }],
38641
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
38642
+ name: "deviceId",
38643
+ form: "single",
38644
+ optional: true
38645
+ }],
38366
38646
  "pipelineAnalytics.getGroup": [{
38367
38647
  name: "deviceId",
38368
38648
  form: "single",
@@ -38373,6 +38653,11 @@ Object.freeze({
38373
38653
  form: "single",
38374
38654
  optional: false
38375
38655
  }],
38656
+ "pipelineAnalytics.getKeyEventsBatch": [{
38657
+ name: "deviceIds",
38658
+ form: "array",
38659
+ optional: false
38660
+ }],
38376
38661
  "pipelineAnalytics.getMotionEvents": [{
38377
38662
  name: "deviceId",
38378
38663
  form: "single",
@@ -38813,6 +39098,11 @@ Object.freeze({
38813
39098
  form: "single",
38814
39099
  optional: false
38815
39100
  }],
39101
+ "recording.reconcileLedgerAgainstDisk": [{
39102
+ name: "deviceId",
39103
+ form: "single",
39104
+ optional: true
39105
+ }],
38816
39106
  "recording.relocateFootage": [{
38817
39107
  name: "deviceId",
38818
39108
  form: "single",
@@ -38878,6 +39168,11 @@ Object.freeze({
38878
39168
  form: "single",
38879
39169
  optional: false
38880
39170
  }],
39171
+ "sceneMonitor.listScenesBatch": [{
39172
+ name: "deviceIds",
39173
+ form: "array",
39174
+ optional: false
39175
+ }],
38881
39176
  "sceneMonitor.recheckNow": [{
38882
39177
  name: "deviceId",
38883
39178
  form: "single",
@@ -39139,6 +39434,11 @@ Object.freeze({
39139
39434
  form: "single",
39140
39435
  optional: false
39141
39436
  }],
39437
+ "zoneAnalytics.getCurrentSnapshotBatch": [{
39438
+ name: "deviceIds",
39439
+ form: "array",
39440
+ optional: false
39441
+ }],
39142
39442
  "zoneAnalytics.getUnzonedHistory": [{
39143
39443
  name: "deviceId",
39144
39444
  form: "single",
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DnVnWACi.js");
1
+ const require_dist = require("./dist-CmrtJ8RB.js");
2
2
  let node_path = require("node:path");
3
3
  node_path = require_dist.__toESM(node_path);
4
4
  let node_url = require("node:url");
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DnVnWACi.js");
1
+ const require_dist = require("./dist-CmrtJ8RB.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  //#region src/detection-pipeline/registry/model-catalogs.ts
4
4
  var HF_REPO = "camstack/camstack-models";
@@ -1,4 +1,4 @@
1
- import { M as audioKindId, Z as hfModelUrl, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-Dsritt4-.mjs";
1
+ import { M as audioKindId, Z as hfModelUrl, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-CBRky_dz.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  //#region src/detection-pipeline/registry/model-catalogs.ts
4
4
  var HF_REPO = "camstack/camstack-models";
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-DnVnWACi.js");
6
- const require_lazy_sharp = require("../lazy-sharp-DZWYKdV2.js");
5
+ const require_dist = require("../dist-CmrtJ8RB.js");
6
+ const require_lazy_sharp = require("../lazy-sharp-BODx7w1t.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_path = require("node:path");
9
9
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -1,4 +1,4 @@
1
- import { It as hydrateSchema, Pt as DeviceType, Y as evaluateZoneRules, it as motionDetectionCapability, jt as BaseAddon } from "../dist-Dsritt4-.mjs";
1
+ import { It as hydrateSchema, Pt as DeviceType, Y as evaluateZoneRules, it as motionDetectionCapability, jt as BaseAddon } from "../dist-CBRky_dz.mjs";
2
2
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { join } from "node:path";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DnVnWACi.js");
1
+ const require_dist = require("./dist-CmrtJ8RB.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_dist.__toESM(node_fs, 1);
@@ -1,4 +1,4 @@
1
- import { Dt as buildFfmpegArgs, Et as Fmp4BoxSplitter, kt as isSoftwareDecode, wt as errMsg } from "./dist-Dsritt4-.mjs";
1
+ import { Dt as buildFfmpegArgs, Et as Fmp4BoxSplitter, kt as isSoftwareDecode, wt as errMsg } from "./dist-CBRky_dz.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import "node:fs";
4
4
  import "node:path";
@@ -2,12 +2,12 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-DnVnWACi.js");
6
- const require_node = require("../node-C5xmFvjS.js");
7
- const require_local_frame_registry = require("../local-frame-registry-BpFLRfbw.js");
8
- const require_worker_protocol = require("../worker-protocol-BsvaPb-G.js");
5
+ const require_dist = require("../dist-CmrtJ8RB.js");
6
+ const require_node = require("../node-BSeMUwxJ.js");
7
+ const require_local_frame_registry = require("../local-frame-registry-BRG0GTmK.js");
8
+ const require_worker_protocol = require("../worker-protocol-S2nAdf6B.js");
9
9
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
10
- const require_lazy_sharp = require("../lazy-sharp-DZWYKdV2.js");
10
+ const require_lazy_sharp = require("../lazy-sharp-BODx7w1t.js");
11
11
  const require_restream_intent = require("../restream-intent-Cv9x3jmu.js");
12
12
  const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DaUBcb13.js");
13
13
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
@@ -1,7 +1,7 @@
1
- import { B as defineCustomActions, Bt as nodePin, Ft as createEvent, Gt as _enum, H as deriveDetailCropRect, Kt as array, L as customAction, Qt as object, X as failureContributionCapability, Xt as literal, Yt as lazy, Zt as number, _ as FailureCounters, en as string, et as loadContributionCapability, ft as pipelineRunnerCapability, jt as BaseAddon, lt as pickDetailCropConvention, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, p as DEFAULT_NATIVE_LEASE_SETTINGS, qt as boolean, u as DEFAULT_DETAIL_CROP_CONVENTION, ut as pickNativeLeaseOverride, wt as errMsg } from "../dist-Dsritt4-.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CNGxkfes.mjs";
3
- import { c as getStepDefinition, n as resolveFrameViewGeometry, t as localFrameRegistry } from "../local-frame-registry-Yf-uIxbS.mjs";
4
- import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-CDBQXOIu.mjs";
1
+ import { B as defineCustomActions, Bt as nodePin, Ft as createEvent, Gt as _enum, H as deriveDetailCropRect, Kt as array, L as customAction, Qt as object, X as failureContributionCapability, Xt as literal, Yt as lazy, Zt as number, _ as FailureCounters, en as string, et as loadContributionCapability, ft as pipelineRunnerCapability, jt as BaseAddon, lt as pickDetailCropConvention, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, p as DEFAULT_NATIVE_LEASE_SETTINGS, qt as boolean, u as DEFAULT_DETAIL_CROP_CONVENTION, ut as pickNativeLeaseOverride, wt as errMsg } from "../dist-CBRky_dz.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CQzPpwIR.mjs";
3
+ import { c as getStepDefinition, n as resolveFrameViewGeometry, t as localFrameRegistry } from "../local-frame-registry-ByKcWWPU.mjs";
4
+ import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-C7jOjCsc.mjs";
5
5
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
6
6
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
7
7
  import { n as withDetectionIntent } from "../restream-intent-B4BXZra7.mjs";
@@ -1,4 +1,4 @@
1
- import { ot as parseProcStatus } from "./dist-Dsritt4-.mjs";
1
+ import { ot as parseProcStatus } from "./dist-CBRky_dz.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { execFile } from "node:child_process";
4
4
  //#region src/shared/node-topology-platform.ts
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DnVnWACi.js");
1
+ const require_dist = require("./dist-CmrtJ8RB.js");
2
2
  let node_fs = require("node:fs");
3
3
  node_fs = require_dist.__toESM(node_fs);
4
4
  let node_child_process = require("node:child_process");