@camstack/addon-pipeline 1.2.154 → 1.2.156

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-CNyaLgDE.js → dist-C499qEUf.js} +296 -4
  6. package/dist/{dist-B3LRtscY.mjs → dist-C9ohtgTQ.mjs} +296 -4
  7. package/dist/{lazy-sharp-BtcZ-K2I.js → lazy-sharp-D5uApbbe.js} +1 -1
  8. package/dist/{local-frame-registry-C5pZ5QSM.mjs → local-frame-registry-DAVug-jA.mjs} +1 -1
  9. package/dist/{local-frame-registry-TkoMo5_E.js → local-frame-registry-VkzIezFI.js} +1 -1
  10. package/dist/motion-wasm/index.js +2 -2
  11. package/dist/motion-wasm/index.mjs +1 -1
  12. package/dist/{node-CtIkY7To.mjs → node-CwIlVFyz.mjs} +1 -1
  13. package/dist/{node-Ctiow9ZV.js → node-DEq8mutP.js} +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-C87TCFw5.mjs → process-memory-DWw7FrV5.mjs} +1 -1
  17. package/dist/{process-memory-W1prDrmt.js → process-memory-DzycAIEm.js} +1 -1
  18. package/dist/recorder/index.js +668 -100
  19. package/dist/recorder/index.mjs +668 -100
  20. package/dist/{segment-demux-js-BXma5CQd.mjs → segment-demux-js-D2InpBpa.mjs} +1 -1
  21. package/dist/{segment-demux-js-CnRETfAK.js → segment-demux-js-Df1rAqNh.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-oS7jpj-4.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BJlcLzCs.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-yWrVN7u8.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-BMp9L2lF.mjs → hostInit-QpJx-TgK.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-DlDGOO8p.mjs → worker-protocol-CFHcqXoS.mjs} +1 -1
  35. package/dist/{worker-protocol-DOFTntiF.js → worker-protocol-ge8Ce0Bo.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-CVQG3RZ2.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-Vtqzcp6N.mjs +0 -26
@@ -9330,6 +9330,20 @@ var RelocateJobSchema = object({
9330
9330
  * in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
9331
9331
  */
9332
9332
  rowsReconciled: number().int().nonnegative().optional(),
9333
+ /**
9334
+ * Rows this run FORGOT because the file they name is not on disk.
9335
+ *
9336
+ * The mover derived the path from the row's own fields and `stat`ed it; an
9337
+ * ENOENT there is a per-path confirmation that the segment is gone (D296),
9338
+ * and the durable row is dropped through the same channel eviction uses. It
9339
+ * is reported for the same reason `rowsReconciled` is: this is a durable
9340
+ * mutation nobody asked for, and a migration that quietly erases hour rows is
9341
+ * the same failure as one that quietly skips them (D295).
9342
+ *
9343
+ * The production drain of 2026-08-30 would have reported 11 074 here — the
9344
+ * ledger claimed 5.65 GB of footage that no longer existed.
9345
+ */
9346
+ rowsForgotten: number().int().nonnegative().optional(),
9333
9347
  startedAt: number(),
9334
9348
  finishedAt: number().nullable(),
9335
9349
  error: string().nullable()
@@ -9693,6 +9707,91 @@ var RelocateResidueSchema = object({
9693
9707
  segments: number().int().nonnegative(),
9694
9708
  bytes: number().int().nonnegative()
9695
9709
  }).nullable();
9710
+ /**
9711
+ * Ask one location whether its durable hour rows describe the disk — the walk
9712
+ * (D319).
9713
+ *
9714
+ * `apply` DEFAULTS TO FALSE and that default is the product: the operator's
9715
+ * missing tool is the question, and the dry run is how they sanity-check the
9716
+ * destructive run before authorising it.
9717
+ */
9718
+ var LedgerWalkInputSchema = object({
9719
+ locationId: string().min(1),
9720
+ /** Forget the confirmed-absent rows, rather than only counting them. */
9721
+ apply: boolean().optional(),
9722
+ /** Narrow to one camera. */
9723
+ deviceId: number().int().positive().optional(),
9724
+ /** Narrow to these recording profiles; empty/absent = every profile. */
9725
+ profiles: array(string().min(1)).optional()
9726
+ });
9727
+ /** Why a whole walk did nothing. Every one leaves the ledger untouched. */
9728
+ var LedgerWalkRefusalSchema = _enum([
9729
+ "location-unknown",
9730
+ "source-writable",
9731
+ "no-ledger",
9732
+ "archive-unreadable",
9733
+ "anchor-absent",
9734
+ "anchor-unreadable",
9735
+ "anchor-moved"
9736
+ ]);
9737
+ _enum([
9738
+ "live-tail",
9739
+ "listing-error",
9740
+ "path-mismatch",
9741
+ "durable-refused"
9742
+ ]);
9743
+ /** Every skip reason, always present, always a number — so a reason that never
9744
+ * fired reports as zero rather than absent and the report shape is constant
9745
+ * between passes. Spelled out rather than `z.record` for exactly that. */
9746
+ var LedgerWalkSkipCountsSchema = object({
9747
+ "live-tail": number().int().nonnegative(),
9748
+ "listing-error": number().int().nonnegative(),
9749
+ "path-mismatch": number().int().nonnegative(),
9750
+ "durable-refused": number().int().nonnegative()
9751
+ });
9752
+ /** One camera's share of a walk, so a report names cameras and not rows. */
9753
+ var LedgerWalkDeviceReportSchema = object({
9754
+ deviceId: number().int(),
9755
+ hoursWalked: number().int().nonnegative(),
9756
+ hoursMissing: number().int().nonnegative(),
9757
+ ghostSegments: number().int().nonnegative(),
9758
+ ghostBytes: number().int().nonnegative(),
9759
+ forgottenSegments: number().int().nonnegative(),
9760
+ orphanFiles: number().int().nonnegative()
9761
+ });
9762
+ /**
9763
+ * What one walk claimed, listed, found and (only when armed) forgot.
9764
+ *
9765
+ * `archiveSegments` is the **M** and `segmentsClaimed` the **N** (D295), so a
9766
+ * walk that saw a fraction of the location is visible in its own report rather
9767
+ * than in the absence of one.
9768
+ */
9769
+ var LedgerWalkReportSchema = object({
9770
+ locationId: string(),
9771
+ applied: boolean(),
9772
+ refused: LedgerWalkRefusalSchema.nullable(),
9773
+ archiveSegments: number().int().nonnegative().nullable(),
9774
+ archiveBytes: number().int().nonnegative().nullable(),
9775
+ hoursClaimed: number().int().nonnegative(),
9776
+ hoursWalked: number().int().nonnegative(),
9777
+ hoursMissing: number().int().nonnegative(),
9778
+ /** `readdir` calls issued — the cost, stated in the unit that is paid. */
9779
+ listings: number().int().nonnegative(),
9780
+ segmentsClaimed: number().int().nonnegative(),
9781
+ ghostSegments: number().int().nonnegative(),
9782
+ ghostBytes: number().int().nonnegative(),
9783
+ ghostHoursWhole: number().int().nonnegative(),
9784
+ forgottenSegments: number().int().nonnegative(),
9785
+ forgottenBytes: number().int().nonnegative(),
9786
+ /** Files under a claimed hour that no durable row names. Never deleted. */
9787
+ orphanFiles: number().int().nonnegative(),
9788
+ orphanSample: array(string()).readonly(),
9789
+ hoursSkipped: number().int().nonnegative(),
9790
+ skippedByReason: LedgerWalkSkipCountsSchema,
9791
+ /** The walk stopped at its per-pass hour bound with claims unwalked. */
9792
+ bounded: boolean(),
9793
+ byDevice: array(LedgerWalkDeviceReportSchema).readonly()
9794
+ });
9696
9795
  /** How many rows a media pass would still act on against a given target — the
9697
9796
  * media lane's denominator AND its residue, from ONE derivation so the two can
9698
9797
  * never disagree. `null` = the count could not be taken. */
@@ -21128,13 +21227,15 @@ var ListGroupsPageSchema = object({
21128
21227
  groups: array(AnalyticsGroupRecordSchema).readonly(),
21129
21228
  nextCursor: string().nullable()
21130
21229
  });
21230
+ var KEY_EVENTS_DEFAULT_LIMIT = 50;
21231
+ var KEY_EVENTS_MAX_LIMIT = 200;
21131
21232
  var KeyEventQueryInput = object({
21132
21233
  deviceId: number(),
21133
21234
  /** Window lower bound (track firstSeen ≥ since). */
21134
21235
  since: number(),
21135
21236
  /** Window upper bound (track firstSeen ≤ until). */
21136
21237
  until: number(),
21137
- limit: number().int().min(1).max(200).default(50),
21238
+ limit: number().int().min(1).max(KEY_EVENTS_MAX_LIMIT).default(KEY_EVENTS_DEFAULT_LIMIT),
21138
21239
  /** Drop tracks scoring below this importance. */
21139
21240
  minImportance: number().min(0).max(1).optional(),
21140
21241
  /** Restrict to a single class (e.g. 'person'). */
@@ -21156,6 +21257,32 @@ var KeyEventSchema = object({
21156
21257
  ...TrackFlagFields,
21157
21258
  ...TrackRetrainFields
21158
21259
  });
21260
+ /** `getKeyEvents`' window and filters, asked of a SET of cameras at once. */
21261
+ var KeyEventBatchQueryInput = object({
21262
+ deviceIds: array(number()).min(1).max(200),
21263
+ since: number(),
21264
+ until: number(),
21265
+ /** Applied PER CAMERA, exactly as `getKeyEvents.limit` is — never a total
21266
+ * across the set, which would let a busy camera starve a quiet one of its
21267
+ * rows and change what the merged feed contains. */
21268
+ limit: number().int().min(1).max(KEY_EVENTS_MAX_LIMIT).default(KEY_EVENTS_DEFAULT_LIMIT),
21269
+ minImportance: number().min(0).max(1).optional(),
21270
+ classFilter: string().optional()
21271
+ });
21272
+ /**
21273
+ * One camera's key events in a batch answer.
21274
+ *
21275
+ * The row exists for every requested id. `getKeyEvents` degrades to `[]` on
21276
+ * error rather than throwing, so a camera whose store read failed and one with
21277
+ * no events in the window were ALREADY indistinguishable per camera — the
21278
+ * batch does not make that worse, and the row keeps the deviceId the single
21279
+ * method's output never carried (the caller used to stamp it from the fan-out
21280
+ * key, which only worked because there was one query per camera).
21281
+ */
21282
+ var KeyEventsForDeviceSchema = object({
21283
+ deviceId: number(),
21284
+ events: array(KeyEventSchema).readonly()
21285
+ });
21159
21286
  object({
21160
21287
  trackId: string(),
21161
21288
  className: string(),
@@ -21375,6 +21502,47 @@ var RebuildStatusSchema = object({
21375
21502
  /** Present when the pass ended by throwing. */
21376
21503
  error: string().nullable()
21377
21504
  });
21505
+ /**
21506
+ * Acknowledgement that a debug-media reclaim STARTED.
21507
+ *
21508
+ * The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
21509
+ * it runs detached and this returns immediately. Awaiting it is how the
21510
+ * `addons.custom` door hit the 60 s UDS deadline while the walk carried on
21511
+ * with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
21512
+ */
21513
+ var MediaReclaimStartResultSchema = object({
21514
+ started: boolean(),
21515
+ /** True when a pass was already running; the new request is ignored. */
21516
+ alreadyRunning: boolean()
21517
+ });
21518
+ var MediaReclaimInputSchema = object({
21519
+ mode: _enum(["report", "reclaim"]).default("report"),
21520
+ scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
21521
+ deviceIds: array(number().int()).min(1).optional(),
21522
+ restart: boolean().optional(),
21523
+ pageSize: number().int().min(50).max(5e3).optional(),
21524
+ maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
21525
+ maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
21526
+ maxBytesPerRun: number().int().min(1).optional(),
21527
+ budgetMinutes: number().int().min(1).max(720).optional(),
21528
+ throttleBytesPerSec: number().int().min(64 * 1024).optional(),
21529
+ graceMinutes: number().int().min(1).max(10080).optional()
21530
+ });
21531
+ var MediaReclaimStatusSchema = object({
21532
+ running: boolean(),
21533
+ mode: _enum(["report", "reclaim"]).nullable(),
21534
+ totalExamined: number(),
21535
+ totalEligible: number(),
21536
+ totalReclaimed: number(),
21537
+ totalBytesReclaimed: number(),
21538
+ totalRefused: number(),
21539
+ /** Device+scope windows finished in this pass. */
21540
+ devicesDone: number(),
21541
+ complete: boolean().nullable(),
21542
+ startedAtMs: number().nullable(),
21543
+ finishedAtMs: number().nullable(),
21544
+ error: string().nullable()
21545
+ });
21378
21546
  var ReplayFrameInputSchema = object({
21379
21547
  timestamp: number(),
21380
21548
  frame: PipelineRunResultBridge
@@ -21425,7 +21593,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21425
21593
  until: number().optional(),
21426
21594
  kinds: array(string()).optional(),
21427
21595
  limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
21428
- }), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(object({
21596
+ }), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(KeyEventBatchQueryInput, array(KeyEventsForDeviceSchema).readonly()), method(object({
21429
21597
  deviceId: number(),
21430
21598
  since: number(),
21431
21599
  until: number(),
@@ -21516,6 +21684,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21516
21684
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
21517
21685
  kind: "query",
21518
21686
  auth: "admin"
21687
+ }), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
21688
+ kind: "mutation",
21689
+ auth: "admin"
21690
+ }), method(object({}), MediaReclaimStatusSchema, {
21691
+ kind: "query",
21692
+ auth: "admin"
21519
21693
  }), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
21520
21694
  kind: "query",
21521
21695
  auth: "admin"
@@ -29496,6 +29670,23 @@ var recordingCapability = {
29496
29670
  kind: "query",
29497
29671
  auth: "admin"
29498
29672
  }),
29673
+ /**
29674
+ * Does this location's LEDGER tell the truth about its disk? (D319)
29675
+ *
29676
+ * One `readdir` per claimed hour, diffed both ways: durable rows whose file
29677
+ * is not there, and files no durable row names. `apply` defaults to FALSE —
29678
+ * the report is the product, and the dry run is how an operator
29679
+ * sanity-checks the destructive run before authorising it.
29680
+ *
29681
+ * REFUSES a source that is still a write target: a listing of a live
29682
+ * location is a lower bound, which is not the strong evidence that lets
29683
+ * this pass forget without a budget. A live location is reconciled by the
29684
+ * mover, under D318's bound.
29685
+ */
29686
+ reconcileLedgerAgainstDisk: method(LedgerWalkInputSchema, LedgerWalkReportSchema, {
29687
+ kind: "mutation",
29688
+ auth: "admin"
29689
+ }),
29499
29690
  /** Cancel a running or queued relocate job. A queued job never runs. */
29500
29691
  cancelRelocateJob: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
29501
29692
  kind: "mutation",
@@ -29949,7 +30140,26 @@ var SceneMonitorStatusSchema = object({
29949
30140
  monitors: array(SceneMonitorSchema),
29950
30141
  lastFetchedAt: number()
29951
30142
  });
29952
- DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
30143
+ /**
30144
+ * One camera's row in a `listScenesBatch` answer.
30145
+ *
30146
+ * `status` is NULLABLE and the nullability is the whole point. `scene-monitor`
30147
+ * is a `defaultActive` wrapper, so every camera is asked; a camera whose
30148
+ * provider is absent (pipeline-analytics not deployed, the post-processing node
30149
+ * down) cannot answer, and that is not the same fact as a camera with no scenes
30150
+ * configured. Fanned out per camera the difference was visible — one query
30151
+ * errored while the others resolved — and a batch that returned only the rows
30152
+ * it managed would have destroyed it, silently, by making an unreachable camera
30153
+ * indistinguishable from one that answered `monitors: []`.
30154
+ *
30155
+ * So: EVERY requested deviceId gets a row. `status: null` means "this camera
30156
+ * could not be read"; `status.monitors: []` means "read, and it has none".
30157
+ */
30158
+ var SceneMonitorStatusForDeviceSchema = object({
30159
+ deviceId: number(),
30160
+ status: SceneMonitorStatusSchema.nullable()
30161
+ });
30162
+ DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({ deviceIds: array(number()).min(1).max(200) }), array(SceneMonitorStatusForDeviceSchema).readonly()), method(object({
29953
30163
  deviceId: number(),
29954
30164
  label: string(),
29955
30165
  roi: MaskRectShapeSchema,
@@ -31273,6 +31483,27 @@ var CameraOccupancySnapshotSchema = object({
31273
31483
  stationaryObjects: array(StationaryObjectSchema).readonly().optional()
31274
31484
  });
31275
31485
  /**
31486
+ * One camera's row in a `getCurrentSnapshotBatch` answer.
31487
+ *
31488
+ * THREE outcomes, and the single-camera method could only express two of them
31489
+ * because `snapshot: null` was already spoken for:
31490
+ *
31491
+ * - `read: 'read'`, `snapshot` present — the live occupancy reading.
31492
+ * - `read: 'read'`, `snapshot: null` — read, and this camera has no reading
31493
+ * yet: no frame since boot, and no parked-object registry to hydrate from.
31494
+ * - `read: 'unreadable'` — the owner could not answer for this
31495
+ * camera. `snapshot` is null, and it does NOT mean "nothing parked here".
31496
+ *
31497
+ * Collapsing the last two is the failure this field exists to prevent: a
31498
+ * hydration that threw would otherwise render as an empty Stationary section,
31499
+ * which is a definite claim about a camera nobody could read.
31500
+ */
31501
+ var CameraOccupancySnapshotForDeviceSchema = object({
31502
+ deviceId: number(),
31503
+ read: _enum(["read", "unreadable"]),
31504
+ snapshot: CameraOccupancySnapshotSchema.nullable()
31505
+ });
31506
+ /**
31276
31507
  * Time-series resolution. The history methods return one bucket per
31277
31508
  * step over the requested range. Smaller resolutions cost more
31278
31509
  * memory + bandwidth; bound to discrete steps so caller cannot ask
@@ -31296,7 +31527,7 @@ var HistoryPointSchema = object({
31296
31527
  /** Object count averaged over the bucket (rounded to nearest integer). */
31297
31528
  count: number().int().nonnegative()
31298
31529
  });
31299
- DeviceType.Camera, method(object({ deviceId: number() }), CameraOccupancySnapshotSchema.nullable()), method(object({
31530
+ DeviceType.Camera, method(object({ deviceId: number() }), CameraOccupancySnapshotSchema.nullable()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(CameraOccupancySnapshotForDeviceSchema).readonly()), method(object({
31300
31531
  deviceId: number(),
31301
31532
  zoneId: string(),
31302
31533
  className: string().optional()
@@ -34760,6 +34991,18 @@ Object.freeze({
34760
34991
  addonId: null,
34761
34992
  access: "view"
34762
34993
  },
34994
+ "pipelineAnalytics.getKeyEventsBatch": {
34995
+ capName: "pipeline-analytics",
34996
+ capScope: "device",
34997
+ addonId: null,
34998
+ access: "view"
34999
+ },
35000
+ "pipelineAnalytics.getMediaReclaimStatus": {
35001
+ capName: "pipeline-analytics",
35002
+ capScope: "device",
35003
+ addonId: null,
35004
+ access: "view"
35005
+ },
34763
35006
  "pipelineAnalytics.getMotionEvents": {
34764
35007
  capName: "pipeline-analytics",
34765
35008
  capScope: "device",
@@ -34934,6 +35177,12 @@ Object.freeze({
34934
35177
  addonId: null,
34935
35178
  access: "create"
34936
35179
  },
35180
+ "pipelineAnalytics.reclaimDebugMedia": {
35181
+ capName: "pipeline-analytics",
35182
+ capScope: "device",
35183
+ addonId: null,
35184
+ access: "create"
35185
+ },
34937
35186
  "pipelineAnalytics.reconcileFromDisk": {
34938
35187
  capName: "pipeline-analytics",
34939
35188
  capScope: "device",
@@ -35936,6 +36185,12 @@ Object.freeze({
35936
36185
  addonId: null,
35937
36186
  access: "view"
35938
36187
  },
36188
+ "recording.reconcileLedgerAgainstDisk": {
36189
+ capName: "recording",
36190
+ capScope: "system",
36191
+ addonId: null,
36192
+ access: "create"
36193
+ },
35939
36194
  "recording.refreshStorageLocationsForMigration": {
35940
36195
  capName: "recording",
35941
36196
  capScope: "system",
@@ -36062,6 +36317,12 @@ Object.freeze({
36062
36317
  addonId: null,
36063
36318
  access: "view"
36064
36319
  },
36320
+ "sceneMonitor.listScenesBatch": {
36321
+ capName: "scene-monitor",
36322
+ capScope: "device",
36323
+ addonId: null,
36324
+ access: "view"
36325
+ },
36065
36326
  "sceneMonitor.recheckNow": {
36066
36327
  capName: "scene-monitor",
36067
36328
  capScope: "device",
@@ -37418,6 +37679,12 @@ Object.freeze({
37418
37679
  addonId: null,
37419
37680
  access: "view"
37420
37681
  },
37682
+ "zoneAnalytics.getCurrentSnapshotBatch": {
37683
+ capName: "zone-analytics",
37684
+ capScope: "device",
37685
+ addonId: null,
37686
+ access: "view"
37687
+ },
37421
37688
  "zoneAnalytics.getUnzonedHistory": {
37422
37689
  capName: "zone-analytics",
37423
37690
  capScope: "device",
@@ -38422,6 +38689,11 @@ Object.freeze({
38422
38689
  form: "single",
38423
38690
  optional: false
38424
38691
  }],
38692
+ "pipelineAnalytics.getKeyEventsBatch": [{
38693
+ name: "deviceIds",
38694
+ form: "array",
38695
+ optional: false
38696
+ }],
38425
38697
  "pipelineAnalytics.getMotionEvents": [{
38426
38698
  name: "deviceId",
38427
38699
  form: "single",
@@ -38527,6 +38799,11 @@ Object.freeze({
38527
38799
  form: "single",
38528
38800
  optional: true
38529
38801
  }],
38802
+ "pipelineAnalytics.reclaimDebugMedia": [{
38803
+ name: "deviceIds",
38804
+ form: "array",
38805
+ optional: true
38806
+ }],
38530
38807
  "pipelineAnalytics.reconcileFromDisk": [{
38531
38808
  name: "deviceId",
38532
38809
  form: "single",
@@ -38862,6 +39139,11 @@ Object.freeze({
38862
39139
  form: "single",
38863
39140
  optional: false
38864
39141
  }],
39142
+ "recording.reconcileLedgerAgainstDisk": [{
39143
+ name: "deviceId",
39144
+ form: "single",
39145
+ optional: true
39146
+ }],
38865
39147
  "recording.relocateFootage": [{
38866
39148
  name: "deviceId",
38867
39149
  form: "single",
@@ -38927,6 +39209,11 @@ Object.freeze({
38927
39209
  form: "single",
38928
39210
  optional: false
38929
39211
  }],
39212
+ "sceneMonitor.listScenesBatch": [{
39213
+ name: "deviceIds",
39214
+ form: "array",
39215
+ optional: false
39216
+ }],
38930
39217
  "sceneMonitor.recheckNow": [{
38931
39218
  name: "deviceId",
38932
39219
  form: "single",
@@ -39188,6 +39475,11 @@ Object.freeze({
39188
39475
  form: "single",
39189
39476
  optional: false
39190
39477
  }],
39478
+ "zoneAnalytics.getCurrentSnapshotBatch": [{
39479
+ name: "deviceIds",
39480
+ form: "array",
39481
+ optional: false
39482
+ }],
39191
39483
  "zoneAnalytics.getUnzonedHistory": [{
39192
39484
  name: "deviceId",
39193
39485
  form: "single",
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CNyaLgDE.js");
1
+ const require_dist = require("./dist-C499qEUf.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
- import { M as audioKindId, Z as hfModelUrl, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-B3LRtscY.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-C9ohtgTQ.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";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CNyaLgDE.js");
1
+ const require_dist = require("./dist-C499qEUf.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";
@@ -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-CNyaLgDE.js");
6
- const require_lazy_sharp = require("../lazy-sharp-BtcZ-K2I.js");
5
+ const require_dist = require("../dist-C499qEUf.js");
6
+ const require_lazy_sharp = require("../lazy-sharp-D5uApbbe.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-B3LRtscY.mjs";
1
+ import { It as hydrateSchema, Pt as DeviceType, Y as evaluateZoneRules, it as motionDetectionCapability, jt as BaseAddon } from "../dist-C9ohtgTQ.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
- import { Dt as buildFfmpegArgs, Et as Fmp4BoxSplitter, kt as isSoftwareDecode, wt as errMsg } from "./dist-B3LRtscY.mjs";
1
+ import { Dt as buildFfmpegArgs, Et as Fmp4BoxSplitter, kt as isSoftwareDecode, wt as errMsg } from "./dist-C9ohtgTQ.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import "node:fs";
4
4
  import "node:path";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CNyaLgDE.js");
1
+ const require_dist = require("./dist-C499qEUf.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);
@@ -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-CNyaLgDE.js");
6
- const require_node = require("../node-Ctiow9ZV.js");
7
- const require_local_frame_registry = require("../local-frame-registry-TkoMo5_E.js");
8
- const require_worker_protocol = require("../worker-protocol-DOFTntiF.js");
5
+ const require_dist = require("../dist-C499qEUf.js");
6
+ const require_node = require("../node-DEq8mutP.js");
7
+ const require_local_frame_registry = require("../local-frame-registry-VkzIezFI.js");
8
+ const require_worker_protocol = require("../worker-protocol-ge8Ce0Bo.js");
9
9
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
10
- const require_lazy_sharp = require("../lazy-sharp-BtcZ-K2I.js");
10
+ const require_lazy_sharp = require("../lazy-sharp-D5uApbbe.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-B3LRtscY.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CtIkY7To.mjs";
3
- import { c as getStepDefinition, n as resolveFrameViewGeometry, t as localFrameRegistry } from "../local-frame-registry-C5pZ5QSM.mjs";
4
- import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-DlDGOO8p.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-C9ohtgTQ.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CwIlVFyz.mjs";
3
+ import { c as getStepDefinition, n as resolveFrameViewGeometry, t as localFrameRegistry } from "../local-frame-registry-DAVug-jA.mjs";
4
+ import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-CFHcqXoS.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-B3LRtscY.mjs";
1
+ import { ot as parseProcStatus } from "./dist-C9ohtgTQ.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-CNyaLgDE.js");
1
+ const require_dist = require("./dist-C499qEUf.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");